summaryrefslogtreecommitdiff
path: root/boost
diff options
context:
space:
mode:
Diffstat (limited to 'boost')
-rw-r--r--boost/boost/Debug/BuildLog.htmbin0 -> 8872 bytes
-rw-r--r--boost/boost/Debug/boost.libbin0 -> 1543772 bytes
-rw-r--r--boost/boost/Debug/vc90.idbbin0 -> 1387520 bytes
-rw-r--r--boost/boost/Debug/vc90.pdbbin0 -> 405504 bytes
-rw-r--r--boost/boost/ReadMe.txt22
-rw-r--r--boost/boost/algorithm/minmax.hpp47
-rw-r--r--boost/boost/algorithm/minmax_element.hpp551
-rw-r--r--boost/boost/algorithm/string.hpp30
-rw-r--r--boost/boost/algorithm/string/case_conv.hpp191
-rw-r--r--boost/boost/algorithm/string/classification.hpp309
-rw-r--r--boost/boost/algorithm/string/compare.hpp198
-rw-r--r--boost/boost/algorithm/string/concept.hpp82
-rw-r--r--boost/boost/algorithm/string/config.hpp27
-rw-r--r--boost/boost/algorithm/string/constants.hpp35
-rw-r--r--boost/boost/algorithm/string/detail/case_conv.hpp68
-rw-r--r--boost/boost/algorithm/string/detail/classification.hpp197
-rw-r--r--boost/boost/algorithm/string/detail/find_format.hpp192
-rw-r--r--boost/boost/algorithm/string/detail/find_format_all.hpp262
-rw-r--r--boost/boost/algorithm/string/detail/find_format_store.hpp70
-rw-r--r--boost/boost/algorithm/string/detail/find_iterator.hpp86
-rw-r--r--boost/boost/algorithm/string/detail/finder.hpp644
-rw-r--r--boost/boost/algorithm/string/detail/finder_regex.hpp121
-rw-r--r--boost/boost/algorithm/string/detail/formatter.hpp93
-rw-r--r--boost/boost/algorithm/string/detail/formatter_regex.hpp60
-rw-r--r--boost/boost/algorithm/string/detail/predicate.hpp76
-rw-r--r--boost/boost/algorithm/string/detail/replace_storage.hpp158
-rw-r--r--boost/boost/algorithm/string/detail/sequence.hpp199
-rw-r--r--boost/boost/algorithm/string/detail/trim.hpp94
-rw-r--r--boost/boost/algorithm/string/detail/util.hpp105
-rw-r--r--boost/boost/algorithm/string/erase.hpp843
-rw-r--r--boost/boost/algorithm/string/find.hpp341
-rw-r--r--boost/boost/algorithm/string/find_format.hpp263
-rw-r--r--boost/boost/algorithm/string/find_iterator.hpp380
-rw-r--r--boost/boost/algorithm/string/finder.hpp269
-rw-r--r--boost/boost/algorithm/string/formatter.hpp93
-rw-r--r--boost/boost/algorithm/string/iter_find.hpp184
-rw-r--r--boost/boost/algorithm/string/join.hpp144
-rw-r--r--boost/boost/algorithm/string/predicate.hpp463
-rw-r--r--boost/boost/algorithm/string/predicate_facade.hpp41
-rw-r--r--boost/boost/algorithm/string/regex.hpp644
-rw-r--r--boost/boost/algorithm/string/regex_find_format.hpp89
-rw-r--r--boost/boost/algorithm/string/replace.hpp927
-rw-r--r--boost/boost/algorithm/string/sequence_traits.hpp192
-rw-r--r--boost/boost/algorithm/string/split.hpp162
-rw-r--r--boost/boost/algorithm/string/std/list_traits.hpp84
-rw-r--r--boost/boost/algorithm/string/std/rope_traits.hpp100
-rw-r--r--boost/boost/algorithm/string/std/slist_traits.hpp84
-rw-r--r--boost/boost/algorithm/string/std/string_traits.hpp51
-rw-r--r--boost/boost/algorithm/string/std_containers_traits.hpp25
-rw-r--r--boost/boost/algorithm/string/trim.hpp389
-rw-r--r--boost/boost/algorithm/string/yes_no_type.hpp32
-rw-r--r--boost/boost/algorithm/string_regex.hpp22
-rw-r--r--boost/boost/aligned_storage.hpp170
-rw-r--r--boost/boost/any.hpp238
-rw-r--r--boost/boost/archive/add_facet.hpp55
-rw-r--r--boost/boost/archive/archive_exception.hpp115
-rw-r--r--boost/boost/archive/basic_archive.hpp130
-rw-r--r--boost/boost/archive/basic_binary_iarchive.hpp121
-rw-r--r--boost/boost/archive/basic_binary_iprimitive.hpp173
-rw-r--r--boost/boost/archive/basic_binary_oarchive.hpp118
-rw-r--r--boost/boost/archive/basic_binary_oprimitive.hpp151
-rw-r--r--boost/boost/archive/basic_streambuf_locale_saver.hpp61
-rw-r--r--boost/boost/archive/basic_text_iarchive.hpp94
-rw-r--r--boost/boost/archive/basic_text_iprimitive.hpp130
-rw-r--r--boost/boost/archive/basic_text_oarchive.hpp131
-rw-r--r--boost/boost/archive/basic_text_oprimitive.hpp169
-rw-r--r--boost/boost/archive/basic_xml_archive.hpp102
-rw-r--r--boost/boost/archive/basic_xml_iarchive.hpp115
-rw-r--r--boost/boost/archive/basic_xml_oarchive.hpp131
-rw-r--r--boost/boost/archive/binary_iarchive.hpp55
-rw-r--r--boost/boost/archive/binary_iarchive_impl.hpp87
-rw-r--r--boost/boost/archive/binary_oarchive.hpp53
-rw-r--r--boost/boost/archive/binary_oarchive_impl.hpp87
-rw-r--r--boost/boost/archive/binary_wiarchive.hpp59
-rw-r--r--boost/boost/archive/binary_woarchive.hpp59
-rw-r--r--boost/boost/archive/codecvt_null.hpp90
-rw-r--r--boost/boost/archive/detail/abi_prefix.hpp15
-rw-r--r--boost/boost/archive/detail/abi_suffix.hpp14
-rw-r--r--boost/boost/archive/detail/archive_pointer_iserializer.hpp92
-rw-r--r--boost/boost/archive/detail/archive_pointer_oserializer.hpp67
-rw-r--r--boost/boost/archive/detail/auto_link_archive.hpp47
-rw-r--r--boost/boost/archive/detail/auto_link_warchive.hpp47
-rw-r--r--boost/boost/archive/detail/basic_archive_impl.hpp91
-rw-r--r--boost/boost/archive/detail/basic_config.hpp45
-rw-r--r--boost/boost/archive/detail/basic_iarchive.hpp116
-rw-r--r--boost/boost/archive/detail/basic_iserializer.hpp87
-rw-r--r--boost/boost/archive/detail/basic_oarchive.hpp113
-rw-r--r--boost/boost/archive/detail/basic_oserializer.hpp83
-rw-r--r--boost/boost/archive/detail/basic_pointer_iserializer.hpp64
-rw-r--r--boost/boost/archive/detail/basic_pointer_oserializer.hpp62
-rw-r--r--boost/boost/archive/detail/basic_serializer.hpp51
-rw-r--r--boost/boost/archive/detail/basic_serializer_map.hpp69
-rw-r--r--boost/boost/archive/detail/common_iarchive.hpp75
-rw-r--r--boost/boost/archive/detail/common_oarchive.hpp77
-rw-r--r--boost/boost/archive/detail/decl.hpp79
-rw-r--r--boost/boost/archive/detail/interface_iarchive.hpp94
-rw-r--r--boost/boost/archive/detail/interface_oarchive.hpp100
-rw-r--r--boost/boost/archive/detail/iserializer.hpp608
-rw-r--r--boost/boost/archive/detail/known_archive_types.hpp93
-rw-r--r--boost/boost/archive/detail/known_archive_types_fwd.hpp39
-rw-r--r--boost/boost/archive/detail/oserializer.hpp574
-rw-r--r--boost/boost/archive/detail/polymorphic_iarchive_impl.hpp209
-rw-r--r--boost/boost/archive/detail/polymorphic_oarchive_impl.hpp197
-rw-r--r--boost/boost/archive/detail/utf8_codecvt_facet.hpp22
-rw-r--r--boost/boost/archive/dinkumware.hpp224
-rw-r--r--boost/boost/archive/impl/archive_pointer_iserializer.ipp65
-rw-r--r--boost/boost/archive/impl/archive_pointer_oserializer.ipp63
-rw-r--r--boost/boost/archive/impl/basic_binary_iarchive.ipp80
-rw-r--r--boost/boost/archive/impl/basic_binary_iprimitive.ipp190
-rw-r--r--boost/boost/archive/impl/basic_binary_oarchive.ipp46
-rw-r--r--boost/boost/archive/impl/basic_binary_oprimitive.ipp160
-rw-r--r--boost/boost/archive/impl/basic_text_iarchive.ipp80
-rw-r--r--boost/boost/archive/impl/basic_text_iprimitive.ipp123
-rw-r--r--boost/boost/archive/impl/basic_text_oarchive.ipp62
-rw-r--r--boost/boost/archive/impl/basic_text_oprimitive.ipp103
-rw-r--r--boost/boost/archive/impl/basic_xml_grammar.hpp191
-rw-r--r--boost/boost/archive/impl/basic_xml_iarchive.ipp111
-rw-r--r--boost/boost/archive/impl/basic_xml_oarchive.ipp245
-rw-r--r--boost/boost/archive/impl/text_iarchive_impl.ipp127
-rw-r--r--boost/boost/archive/impl/text_oarchive_impl.ipp124
-rw-r--r--boost/boost/archive/impl/text_wiarchive_impl.ipp118
-rw-r--r--boost/boost/archive/impl/text_woarchive_impl.ipp85
-rw-r--r--boost/boost/archive/impl/xml_iarchive_impl.ipp199
-rw-r--r--boost/boost/archive/impl/xml_oarchive_impl.ipp117
-rw-r--r--boost/boost/archive/impl/xml_wiarchive_impl.ipp202
-rw-r--r--boost/boost/archive/impl/xml_woarchive_impl.ipp159
-rw-r--r--boost/boost/archive/iterators/base64_exception.hpp68
-rw-r--r--boost/boost/archive/iterators/base64_from_binary.hpp105
-rw-r--r--boost/boost/archive/iterators/binary_from_base64.hpp120
-rw-r--r--boost/boost/archive/iterators/dataflow.hpp104
-rw-r--r--boost/boost/archive/iterators/dataflow_exception.hpp80
-rw-r--r--boost/boost/archive/iterators/escape.hpp114
-rw-r--r--boost/boost/archive/iterators/head_iterator.hpp81
-rw-r--r--boost/boost/archive/iterators/insert_linebreaks.hpp101
-rw-r--r--boost/boost/archive/iterators/istream_iterator.hpp94
-rw-r--r--boost/boost/archive/iterators/mb_from_wchar.hpp136
-rw-r--r--boost/boost/archive/iterators/ostream_iterator.hpp83
-rw-r--r--boost/boost/archive/iterators/remove_whitespace.hpp169
-rw-r--r--boost/boost/archive/iterators/transform_width.hpp168
-rw-r--r--boost/boost/archive/iterators/unescape.hpp94
-rw-r--r--boost/boost/archive/iterators/wchar_from_mb.hpp129
-rw-r--r--boost/boost/archive/iterators/xml_escape.hpp125
-rw-r--r--boost/boost/archive/iterators/xml_unescape.hpp118
-rw-r--r--boost/boost/archive/iterators/xml_unescape_exception.hpp49
-rw-r--r--boost/boost/archive/polymorphic_binary_iarchive.hpp42
-rw-r--r--boost/boost/archive/polymorphic_binary_oarchive.hpp42
-rw-r--r--boost/boost/archive/polymorphic_iarchive.hpp164
-rw-r--r--boost/boost/archive/polymorphic_oarchive.hpp153
-rw-r--r--boost/boost/archive/polymorphic_text_iarchive.hpp40
-rw-r--r--boost/boost/archive/polymorphic_text_oarchive.hpp40
-rw-r--r--boost/boost/archive/polymorphic_text_wiarchive.hpp45
-rw-r--r--boost/boost/archive/polymorphic_text_woarchive.hpp45
-rw-r--r--boost/boost/archive/polymorphic_xml_iarchive.hpp40
-rw-r--r--boost/boost/archive/polymorphic_xml_oarchive.hpp40
-rw-r--r--boost/boost/archive/polymorphic_xml_wiarchive.hpp45
-rw-r--r--boost/boost/archive/polymorphic_xml_woarchive.hpp45
-rw-r--r--boost/boost/archive/text_iarchive.hpp99
-rw-r--r--boost/boost/archive/text_oarchive.hpp100
-rw-r--r--boost/boost/archive/text_wiarchive.hpp98
-rw-r--r--boost/boost/archive/text_woarchive.hpp127
-rw-r--r--boost/boost/archive/tmpdir.hpp49
-rw-r--r--boost/boost/archive/wcslen.hpp56
-rw-r--r--boost/boost/archive/xml_iarchive.hpp111
-rw-r--r--boost/boost/archive/xml_oarchive.hpp113
-rw-r--r--boost/boost/archive/xml_wiarchive.hpp116
-rw-r--r--boost/boost/archive/xml_woarchive.hpp126
-rw-r--r--boost/boost/array.hpp321
-rw-r--r--boost/boost/assert.hpp37
-rw-r--r--boost/boost/assign.hpp24
-rw-r--r--boost/boost/assign/assignment_exception.hpp43
-rw-r--r--boost/boost/assign/list_inserter.hpp404
-rw-r--r--boost/boost/assign/list_of.hpp593
-rw-r--r--boost/boost/assign/ptr_list_inserter.hpp164
-rw-r--r--boost/boost/assign/ptr_list_of.hpp185
-rw-r--r--boost/boost/assign/ptr_map_inserter.hpp103
-rw-r--r--boost/boost/assign/std.hpp27
-rw-r--r--boost/boost/assign/std/deque.hpp38
-rw-r--r--boost/boost/assign/std/list.hpp38
-rw-r--r--boost/boost/assign/std/map.hpp45
-rw-r--r--boost/boost/assign/std/queue.hpp45
-rw-r--r--boost/boost/assign/std/set.hpp44
-rw-r--r--boost/boost/assign/std/slist.hpp45
-rw-r--r--boost/boost/assign/std/stack.hpp37
-rw-r--r--boost/boost/assign/std/vector.hpp37
-rw-r--r--boost/boost/bind.hpp1651
-rw-r--r--boost/boost/bind/apply.hpp74
-rw-r--r--boost/boost/bind/arg.hpp36
-rw-r--r--boost/boost/bind/bind_cc.hpp117
-rw-r--r--boost/boost/bind/bind_mf_cc.hpp227
-rw-r--r--boost/boost/bind/bind_template.hpp226
-rw-r--r--boost/boost/bind/make_adaptable.hpp187
-rw-r--r--boost/boost/bind/mem_fn_cc.hpp103
-rw-r--r--boost/boost/bind/mem_fn_template.hpp1020
-rw-r--r--boost/boost/bind/mem_fn_vw.hpp130
-rw-r--r--boost/boost/bind/placeholders.hpp68
-rw-r--r--boost/boost/bind/protect.hpp144
-rw-r--r--boost/boost/bind/storage.hpp475
-rw-r--r--boost/boost/blank.hpp100
-rw-r--r--boost/boost/blank_fwd.hpp22
-rw-r--r--boost/boost/boost.sln20
-rw-r--r--boost/boost/boost.vcproj227
-rw-r--r--boost/boost/boost.vcproj.Dwight-PC.Dwight Merriman.user65
-rw-r--r--boost/boost/call_traits.hpp24
-rw-r--r--boost/boost/cast.hpp107
-rw-r--r--boost/boost/checked_delete.hpp69
-rw-r--r--boost/boost/compatibility/cpp_c_headers/cassert10
-rw-r--r--boost/boost/compatibility/cpp_c_headers/cctype26
-rw-r--r--boost/boost/compatibility/cpp_c_headers/cerrno10
-rw-r--r--boost/boost/compatibility/cpp_c_headers/cfloat10
-rw-r--r--boost/boost/compatibility/cpp_c_headers/climits10
-rw-r--r--boost/boost/compatibility/cpp_c_headers/clocale16
-rw-r--r--boost/boost/compatibility/cpp_c_headers/cmath35
-rw-r--r--boost/boost/compatibility/cpp_c_headers/csetjmp15
-rw-r--r--boost/boost/compatibility/cpp_c_headers/csignal16
-rw-r--r--boost/boost/compatibility/cpp_c_headers/cstdarg14
-rw-r--r--boost/boost/compatibility/cpp_c_headers/cstddef15
-rw-r--r--boost/boost/compatibility/cpp_c_headers/cstdio57
-rw-r--r--boost/boost/compatibility/cpp_c_headers/cstdlib43
-rw-r--r--boost/boost/compatibility/cpp_c_headers/cstring36
-rw-r--r--boost/boost/compatibility/cpp_c_headers/ctime26
-rw-r--r--boost/boost/compatibility/cpp_c_headers/cwchar156
-rw-r--r--boost/boost/compatibility/cpp_c_headers/cwctype39
-rw-r--r--boost/boost/compressed_pair.hpp24
-rw-r--r--boost/boost/concept_archetype.hpp669
-rw-r--r--boost/boost/concept_check.hpp1056
-rw-r--r--boost/boost/config.hpp70
-rw-r--r--boost/boost/config/abi/borland_prefix.hpp27
-rw-r--r--boost/boost/config/abi/borland_suffix.hpp12
-rw-r--r--boost/boost/config/abi/msvc_prefix.hpp8
-rw-r--r--boost/boost/config/abi/msvc_suffix.hpp8
-rw-r--r--boost/boost/config/abi_prefix.hpp20
-rw-r--r--boost/boost/config/abi_suffix.hpp23
-rw-r--r--boost/boost/config/auto_link.hpp363
-rw-r--r--boost/boost/config/compiler/borland.hpp190
-rw-r--r--boost/boost/config/compiler/comeau.hpp59
-rw-r--r--boost/boost/config/compiler/common_edg.hpp62
-rw-r--r--boost/boost/config/compiler/compaq_cxx.hpp19
-rw-r--r--boost/boost/config/compiler/digitalmars.hpp49
-rw-r--r--boost/boost/config/compiler/gcc.hpp105
-rw-r--r--boost/boost/config/compiler/gcc_xml.hpp30
-rw-r--r--boost/boost/config/compiler/greenhills.hpp28
-rw-r--r--boost/boost/config/compiler/hp_acc.hpp72
-rw-r--r--boost/boost/config/compiler/intel.hpp158
-rw-r--r--boost/boost/config/compiler/kai.hpp35
-rw-r--r--boost/boost/config/compiler/metrowerks.hpp104
-rw-r--r--boost/boost/config/compiler/mpw.hpp51
-rw-r--r--boost/boost/config/compiler/sgi_mipspro.hpp24
-rw-r--r--boost/boost/config/compiler/sunpro_cc.hpp92
-rw-r--r--boost/boost/config/compiler/vacpp.hpp57
-rw-r--r--boost/boost/config/compiler/visualc.hpp178
-rw-r--r--boost/boost/config/no_tr1/complex.hpp28
-rw-r--r--boost/boost/config/no_tr1/functional.hpp28
-rw-r--r--boost/boost/config/no_tr1/memory.hpp28
-rw-r--r--boost/boost/config/no_tr1/utility.hpp28
-rw-r--r--boost/boost/config/platform/aix.hpp33
-rw-r--r--boost/boost/config/platform/amigaos.hpp15
-rw-r--r--boost/boost/config/platform/beos.hpp26
-rw-r--r--boost/boost/config/platform/bsd.hpp73
-rw-r--r--boost/boost/config/platform/cygwin.hpp48
-rw-r--r--boost/boost/config/platform/hpux.hpp85
-rw-r--r--boost/boost/config/platform/irix.hpp31
-rw-r--r--boost/boost/config/platform/linux.hpp98
-rw-r--r--boost/boost/config/platform/macos.hpp78
-rw-r--r--boost/boost/config/platform/qnxnto.hpp31
-rw-r--r--boost/boost/config/platform/solaris.hpp21
-rw-r--r--boost/boost/config/platform/win32.hpp58
-rw-r--r--boost/boost/config/posix_features.hpp95
-rw-r--r--boost/boost/config/requires_threads.hpp92
-rw-r--r--boost/boost/config/select_compiler_config.hpp87
-rw-r--r--boost/boost/config/select_platform_config.hpp90
-rw-r--r--boost/boost/config/select_stdlib_config.hpp68
-rw-r--r--boost/boost/config/stdlib/dinkumware.hpp106
-rw-r--r--boost/boost/config/stdlib/libcomo.hpp46
-rw-r--r--boost/boost/config/stdlib/libstdcpp3.hpp73
-rw-r--r--boost/boost/config/stdlib/modena.hpp30
-rw-r--r--boost/boost/config/stdlib/msl.hpp59
-rw-r--r--boost/boost/config/stdlib/roguewave.hpp127
-rw-r--r--boost/boost/config/stdlib/sgi.hpp111
-rw-r--r--boost/boost/config/stdlib/stlport.hpp201
-rw-r--r--boost/boost/config/stdlib/vacpp.hpp18
-rw-r--r--boost/boost/config/suffix.hpp569
-rw-r--r--boost/boost/config/user.hpp124
-rw-r--r--boost/boost/crc.hpp1106
-rw-r--r--boost/boost/cregex.hpp39
-rw-r--r--boost/boost/cstdint.hpp446
-rw-r--r--boost/boost/cstdlib.hpp41
-rw-r--r--boost/boost/current_function.hpp63
-rw-r--r--boost/boost/date_time.hpp15
-rw-r--r--boost/boost/date_time/adjust_functors.hpp178
-rw-r--r--boost/boost/date_time/c_local_time_adjustor.hpp64
-rw-r--r--boost/boost/date_time/c_time.hpp91
-rw-r--r--boost/boost/date_time/compiler_config.hpp149
-rw-r--r--boost/boost/date_time/constrained_value.hpp98
-rw-r--r--boost/boost/date_time/date.hpp197
-rw-r--r--boost/boost/date_time/date_clock_device.hpp77
-rw-r--r--boost/boost/date_time/date_defs.hpp26
-rw-r--r--boost/boost/date_time/date_duration.hpp147
-rw-r--r--boost/boost/date_time/date_duration_types.hpp269
-rw-r--r--boost/boost/date_time/date_facet.hpp775
-rw-r--r--boost/boost/date_time/date_format_simple.hpp159
-rw-r--r--boost/boost/date_time/date_formatting.hpp127
-rw-r--r--boost/boost/date_time/date_formatting_limited.hpp121
-rw-r--r--boost/boost/date_time/date_formatting_locales.hpp233
-rw-r--r--boost/boost/date_time/date_generator_formatter.hpp263
-rw-r--r--boost/boost/date_time/date_generator_parser.hpp329
-rw-r--r--boost/boost/date_time/date_generators.hpp509
-rw-r--r--boost/boost/date_time/date_iterator.hpp101
-rw-r--r--boost/boost/date_time/date_names_put.hpp320
-rw-r--r--boost/boost/date_time/date_parsing.hpp301
-rw-r--r--boost/boost/date_time/dst_rules.hpp391
-rw-r--r--boost/boost/date_time/dst_transition_generators.hpp75
-rw-r--r--boost/boost/date_time/filetime_functions.hpp78
-rw-r--r--boost/boost/date_time/format_date_parser.hpp731
-rw-r--r--boost/boost/date_time/gregorian/conversion.hpp73
-rw-r--r--boost/boost/date_time/gregorian/formatters.hpp162
-rw-r--r--boost/boost/date_time/gregorian/formatters_limited.hpp81
-rw-r--r--boost/boost/date_time/gregorian/greg_calendar.hpp47
-rw-r--r--boost/boost/date_time/gregorian/greg_date.hpp135
-rw-r--r--boost/boost/date_time/gregorian/greg_day.hpp57
-rw-r--r--boost/boost/date_time/gregorian/greg_day_of_year.hpp38
-rw-r--r--boost/boost/date_time/gregorian/greg_duration.hpp38
-rw-r--r--boost/boost/date_time/gregorian/greg_duration_types.hpp34
-rw-r--r--boost/boost/date_time/gregorian/greg_facet.hpp351
-rw-r--r--boost/boost/date_time/gregorian/greg_month.hpp105
-rw-r--r--boost/boost/date_time/gregorian/greg_serialize.hpp489
-rw-r--r--boost/boost/date_time/gregorian/greg_weekday.hpp66
-rw-r--r--boost/boost/date_time/gregorian/greg_year.hpp53
-rw-r--r--boost/boost/date_time/gregorian/greg_ymd.hpp33
-rw-r--r--boost/boost/date_time/gregorian/gregorian.hpp38
-rw-r--r--boost/boost/date_time/gregorian/gregorian_io.hpp777
-rw-r--r--boost/boost/date_time/gregorian/gregorian_types.hpp109
-rw-r--r--boost/boost/date_time/gregorian/parsers.hpp91
-rw-r--r--boost/boost/date_time/gregorian_calendar.hpp70
-rw-r--r--boost/boost/date_time/gregorian_calendar.ipp219
-rw-r--r--boost/boost/date_time/int_adapter.hpp507
-rw-r--r--boost/boost/date_time/iso_format.hpp303
-rw-r--r--boost/boost/date_time/local_time/conversion.hpp35
-rw-r--r--boost/boost/date_time/local_time/custom_time_zone.hpp169
-rw-r--r--boost/boost/date_time/local_time/date_duration_operators.hpp115
-rw-r--r--boost/boost/date_time/local_time/dst_transition_day_rules.hpp77
-rw-r--r--boost/boost/date_time/local_time/local_date_time.hpp525
-rw-r--r--boost/boost/date_time/local_time/local_time.hpp24
-rw-r--r--boost/boost/date_time/local_time/local_time_io.hpp118
-rw-r--r--boost/boost/date_time/local_time/local_time_types.hpp52
-rw-r--r--boost/boost/date_time/local_time/posix_time_zone.hpp443
-rw-r--r--boost/boost/date_time/local_time/tz_database.hpp32
-rw-r--r--boost/boost/date_time/local_time_adjustor.hpp213
-rw-r--r--boost/boost/date_time/local_timezone_defs.hpp193
-rw-r--r--boost/boost/date_time/locale_config.hpp31
-rw-r--r--boost/boost/date_time/microsec_time_clock.hpp196
-rw-r--r--boost/boost/date_time/parse_format_base.hpp29
-rw-r--r--boost/boost/date_time/period.hpp352
-rw-r--r--boost/boost/date_time/period_formatter.hpp196
-rw-r--r--boost/boost/date_time/period_parser.hpp196
-rw-r--r--boost/boost/date_time/posix_time/conversion.hpp93
-rw-r--r--boost/boost/date_time/posix_time/date_duration_operators.hpp114
-rw-r--r--boost/boost/date_time/posix_time/posix_time.hpp39
-rw-r--r--boost/boost/date_time/posix_time/posix_time_config.hpp178
-rw-r--r--boost/boost/date_time/posix_time/posix_time_duration.hpp82
-rw-r--r--boost/boost/date_time/posix_time/posix_time_io.hpp246
-rw-r--r--boost/boost/date_time/posix_time/posix_time_legacy_io.hpp153
-rw-r--r--boost/boost/date_time/posix_time/posix_time_system.hpp68
-rw-r--r--boost/boost/date_time/posix_time/posix_time_types.hpp55
-rw-r--r--boost/boost/date_time/posix_time/ptime.hpp65
-rw-r--r--boost/boost/date_time/posix_time/time_formatters.hpp289
-rw-r--r--boost/boost/date_time/posix_time/time_formatters_limited.hpp211
-rw-r--r--boost/boost/date_time/posix_time/time_parsers.hpp44
-rw-r--r--boost/boost/date_time/posix_time/time_period.hpp29
-rw-r--r--boost/boost/date_time/posix_time/time_serialize.hpp200
-rw-r--r--boost/boost/date_time/special_defs.hpp25
-rw-r--r--boost/boost/date_time/special_values_formatter.hpp96
-rw-r--r--boost/boost/date_time/special_values_parser.hpp159
-rw-r--r--boost/boost/date_time/string_convert.hpp33
-rw-r--r--boost/boost/date_time/string_parse_tree.hpp278
-rw-r--r--boost/boost/date_time/strings_from_facet.hpp123
-rw-r--r--boost/boost/date_time/testfrmwk.hpp66
-rw-r--r--boost/boost/date_time/time.hpp190
-rw-r--r--boost/boost/date_time/time_clock.hpp83
-rw-r--r--boost/boost/date_time/time_defs.hpp33
-rw-r--r--boost/boost/date_time/time_duration.hpp281
-rw-r--r--boost/boost/date_time/time_facet.hpp1263
-rw-r--r--boost/boost/date_time/time_formatting_streams.hpp119
-rw-r--r--boost/boost/date_time/time_iterator.hpp52
-rw-r--r--boost/boost/date_time/time_parsing.hpp321
-rw-r--r--boost/boost/date_time/time_resolution_traits.hpp140
-rw-r--r--boost/boost/date_time/time_system_counted.hpp254
-rw-r--r--boost/boost/date_time/time_system_split.hpp213
-rw-r--r--boost/boost/date_time/time_zone_base.hpp99
-rw-r--r--boost/boost/date_time/time_zone_names.hpp98
-rw-r--r--boost/boost/date_time/tz_db_base.hpp376
-rw-r--r--boost/boost/date_time/wrapping_int.hpp163
-rw-r--r--boost/boost/date_time/year_month_day.hpp45
-rw-r--r--boost/boost/detail/algorithm.hpp236
-rw-r--r--boost/boost/detail/allocator_utilities.hpp185
-rw-r--r--boost/boost/detail/atomic_count.hpp108
-rw-r--r--boost/boost/detail/atomic_count_gcc.hpp72
-rw-r--r--boost/boost/detail/atomic_count_pthreads.hpp96
-rw-r--r--boost/boost/detail/atomic_count_win32.hpp63
-rw-r--r--boost/boost/detail/bad_weak_ptr.hpp59
-rw-r--r--boost/boost/detail/binary_search.hpp216
-rw-r--r--boost/boost/detail/call_traits.hpp164
-rw-r--r--boost/boost/detail/catch_exceptions.hpp146
-rw-r--r--boost/boost/detail/compressed_pair.hpp443
-rw-r--r--boost/boost/detail/dynamic_bitset.hpp168
-rw-r--r--boost/boost/detail/endian.hpp73
-rw-r--r--boost/boost/detail/indirect_traits.hpp487
-rw-r--r--boost/boost/detail/interlocked.hpp125
-rw-r--r--boost/boost/detail/is_function_ref_tester.hpp135
-rw-r--r--boost/boost/detail/is_incrementable.hpp124
-rw-r--r--boost/boost/detail/is_xxx.hpp61
-rw-r--r--boost/boost/detail/iterator.hpp494
-rw-r--r--boost/boost/detail/lightweight_mutex.hpp42
-rw-r--r--boost/boost/detail/lightweight_test.hpp75
-rw-r--r--boost/boost/detail/limits.hpp449
-rw-r--r--boost/boost/detail/lwm_nop.hpp37
-rw-r--r--boost/boost/detail/lwm_pthreads.hpp86
-rw-r--r--boost/boost/detail/lwm_win32_cs.hpp104
-rw-r--r--boost/boost/detail/named_template_params.hpp177
-rw-r--r--boost/boost/detail/no_exceptions_support.hpp87
-rw-r--r--boost/boost/detail/none_t.hpp28
-rw-r--r--boost/boost/detail/numeric_traits.hpp191
-rw-r--r--boost/boost/detail/ob_call_traits.hpp168
-rw-r--r--boost/boost/detail/ob_compressed_pair.hpp510
-rw-r--r--boost/boost/detail/quick_allocator.hpp198
-rw-r--r--boost/boost/detail/reference_content.hpp141
-rw-r--r--boost/boost/detail/select_type.hpp36
-rw-r--r--boost/boost/detail/shared_array_nmt.hpp151
-rw-r--r--boost/boost/detail/shared_count.hpp376
-rw-r--r--boost/boost/detail/shared_ptr_nmt.hpp182
-rw-r--r--boost/boost/detail/sp_counted_base.hpp69
-rw-r--r--boost/boost/detail/sp_counted_base_cw_ppc.hpp170
-rw-r--r--boost/boost/detail/sp_counted_base_cw_x86.hpp158
-rw-r--r--boost/boost/detail/sp_counted_base_gcc_ia64.hpp157
-rw-r--r--boost/boost/detail/sp_counted_base_gcc_ppc.hpp181
-rw-r--r--boost/boost/detail/sp_counted_base_gcc_x86.hpp173
-rw-r--r--boost/boost/detail/sp_counted_base_nt.hpp107
-rw-r--r--boost/boost/detail/sp_counted_base_pt.hpp135
-rw-r--r--boost/boost/detail/sp_counted_base_w32.hpp130
-rw-r--r--boost/boost/detail/sp_counted_impl.hpp232
-rw-r--r--boost/boost/detail/templated_streams.hpp74
-rw-r--r--boost/boost/detail/utf8_codecvt_facet.hpp197
-rw-r--r--boost/boost/detail/workaround.hpp74
-rw-r--r--boost/boost/dynamic_bitset.hpp19
-rw-r--r--boost/boost/dynamic_bitset/config.hpp81
-rw-r--r--boost/boost/dynamic_bitset/dynamic_bitset.hpp1800
-rw-r--r--boost/boost/dynamic_bitset_fwd.hpp28
-rw-r--r--boost/boost/dynamic_property_map.hpp362
-rw-r--r--boost/boost/enable_shared_from_this.hpp73
-rw-r--r--boost/boost/filesystem.hpp20
-rw-r--r--boost/boost/filesystem/cerrno.hpp23
-rw-r--r--boost/boost/filesystem/config.hpp112
-rw-r--r--boost/boost/filesystem/convenience.hpp331
-rw-r--r--boost/boost/filesystem/exception.hpp9
-rw-r--r--boost/boost/filesystem/fstream.hpp584
-rw-r--r--boost/boost/filesystem/operations.hpp1099
-rw-r--r--boost/boost/filesystem/path.hpp1423
-rw-r--r--boost/boost/foreach.hpp812
-rw-r--r--boost/boost/format.hpp59
-rw-r--r--boost/boost/format/alt_sstream.hpp176
-rw-r--r--boost/boost/format/alt_sstream_impl.hpp296
-rw-r--r--boost/boost/format/detail/compat_workarounds.hpp86
-rw-r--r--boost/boost/format/detail/config_macros.hpp97
-rw-r--r--boost/boost/format/detail/msvc_disambiguater.hpp56
-rw-r--r--boost/boost/format/detail/unset_macros.hpp34
-rw-r--r--boost/boost/format/detail/workarounds_gcc-2_95.hpp162
-rw-r--r--boost/boost/format/detail/workarounds_stlport.hpp42
-rw-r--r--boost/boost/format/exceptions.hpp103
-rw-r--r--boost/boost/format/feed_args.hpp267
-rw-r--r--boost/boost/format/format_class.hpp143
-rw-r--r--boost/boost/format/format_fwd.hpp49
-rw-r--r--boost/boost/format/format_implementation.hpp277
-rw-r--r--boost/boost/format/free_funcs.hpp70
-rw-r--r--boost/boost/format/group.hpp676
-rw-r--r--boost/boost/format/internals.hpp199
-rw-r--r--boost/boost/format/internals_fwd.hpp60
-rw-r--r--boost/boost/format/parsing.hpp491
-rw-r--r--boost/boost/function.hpp64
-rw-r--r--boost/boost/function/detail/function_iterate.hpp16
-rw-r--r--boost/boost/function/detail/gen_maybe_include.pl37
-rw-r--r--boost/boost/function/detail/maybe_include.hpp267
-rw-r--r--boost/boost/function/detail/prologue.hpp24
-rw-r--r--boost/boost/function/function0.hpp12
-rw-r--r--boost/boost/function/function1.hpp12
-rw-r--r--boost/boost/function/function10.hpp12
-rw-r--r--boost/boost/function/function2.hpp12
-rw-r--r--boost/boost/function/function3.hpp12
-rw-r--r--boost/boost/function/function4.hpp12
-rw-r--r--boost/boost/function/function5.hpp12
-rw-r--r--boost/boost/function/function6.hpp12
-rw-r--r--boost/boost/function/function7.hpp12
-rw-r--r--boost/boost/function/function8.hpp12
-rw-r--r--boost/boost/function/function9.hpp12
-rw-r--r--boost/boost/function/function_base.hpp736
-rw-r--r--boost/boost/function/function_template.hpp837
-rw-r--r--boost/boost/function/gen_function_N.pl26
-rw-r--r--boost/boost/function_equal.hpp28
-rw-r--r--boost/boost/function_output_iterator.hpp56
-rw-r--r--boost/boost/functional.hpp548
-rw-r--r--boost/boost/functional/detail/container_fwd.hpp95
-rw-r--r--boost/boost/functional/detail/float_functions.hpp154
-rw-r--r--boost/boost/functional/detail/hash_float.hpp123
-rw-r--r--boost/boost/functional/hash.hpp10
-rw-r--r--boost/boost/functional/hash/deque.hpp21
-rw-r--r--boost/boost/functional/hash/hash.hpp602
-rw-r--r--boost/boost/functional/hash/list.hpp21
-rw-r--r--boost/boost/functional/hash/map.hpp22
-rw-r--r--boost/boost/functional/hash/pair.hpp20
-rw-r--r--boost/boost/functional/hash/set.hpp21
-rw-r--r--boost/boost/functional/hash/vector.hpp20
-rw-r--r--boost/boost/functional/hash_fwd.hpp40
-rw-r--r--boost/boost/generator_iterator.hpp80
-rw-r--r--boost/boost/get_pointer.hpp29
-rw-r--r--boost/boost/graph/adj_list_serialize.hpp114
-rw-r--r--boost/boost/graph/adjacency_iterator.hpp102
-rw-r--r--boost/boost/graph/adjacency_list.hpp544
-rw-r--r--boost/boost/graph/adjacency_list_io.hpp408
-rw-r--r--boost/boost/graph/adjacency_matrix.hpp1278
-rw-r--r--boost/boost/graph/astar_search.hpp407
-rw-r--r--boost/boost/graph/bandwidth.hpp83
-rw-r--r--boost/boost/graph/bc_clustering.hpp164
-rw-r--r--boost/boost/graph/bellman_ford_shortest_paths.hpp241
-rw-r--r--boost/boost/graph/betweenness_centrality.hpp599
-rw-r--r--boost/boost/graph/biconnected_components.hpp415
-rw-r--r--boost/boost/graph/breadth_first_search.hpp293
-rw-r--r--boost/boost/graph/circle_layout.hpp55
-rw-r--r--boost/boost/graph/compressed_sparse_row_graph.hpp799
-rw-r--r--boost/boost/graph/connected_components.hpp101
-rw-r--r--boost/boost/graph/copy.hpp450
-rw-r--r--boost/boost/graph/create_condensation_graph.hpp83
-rw-r--r--boost/boost/graph/cuthill_mckee_ordering.hpp190
-rw-r--r--boost/boost/graph/dag_shortest_paths.hpp157
-rw-r--r--boost/boost/graph/depth_first_search.hpp365
-rw-r--r--boost/boost/graph/detail/adj_list_edge_iterator.hpp117
-rw-r--r--boost/boost/graph/detail/adjacency_list.hpp2832
-rw-r--r--boost/boost/graph/detail/array_binary_tree.hpp182
-rw-r--r--boost/boost/graph/detail/bitset.hpp910
-rw-r--r--boost/boost/graph/detail/bitset_adaptor.hpp90
-rw-r--r--boost/boost/graph/detail/connected_components.hpp208
-rw-r--r--boost/boost/graph/detail/edge.hpp94
-rw-r--r--boost/boost/graph/detail/incidence_iterator.hpp79
-rw-r--r--boost/boost/graph/detail/incremental_components.hpp141
-rw-r--r--boost/boost/graph/detail/indexed_properties.hpp177
-rw-r--r--boost/boost/graph/detail/is_same.hpp40
-rw-r--r--boost/boost/graph/detail/list_base.hpp220
-rw-r--r--boost/boost/graph/detail/permutation.hpp205
-rw-r--r--boost/boost/graph/detail/read_graphviz_spirit.hpp583
-rw-r--r--boost/boost/graph/detail/self_avoiding_walk.hpp418
-rw-r--r--boost/boost/graph/detail/set_adaptor.hpp117
-rw-r--r--boost/boost/graph/detail/shadow_iterator.hpp139
-rw-r--r--boost/boost/graph/detail/sparse_ordering.hpp198
-rw-r--r--boost/boost/graph/dijkstra_shortest_paths.hpp347
-rw-r--r--boost/boost/graph/dominator_tree.hpp488
-rw-r--r--boost/boost/graph/edge_connectivity.hpp181
-rw-r--r--boost/boost/graph/edge_list.hpp303
-rw-r--r--boost/boost/graph/edmunds_karp_max_flow.hpp250
-rw-r--r--boost/boost/graph/erdos_renyi_generator.hpp228
-rw-r--r--boost/boost/graph/exception.hpp44
-rw-r--r--boost/boost/graph/filtered_graph.hpp507
-rw-r--r--boost/boost/graph/floyd_warshall_shortest.hpp251
-rw-r--r--boost/boost/graph/fruchterman_reingold.hpp420
-rw-r--r--boost/boost/graph/graph_archetypes.hpp290
-rw-r--r--boost/boost/graph/graph_as_tree.hpp154
-rw-r--r--boost/boost/graph/graph_concepts.hpp492
-rw-r--r--boost/boost/graph/graph_selectors.hpp36
-rw-r--r--boost/boost/graph/graph_test.hpp382
-rw-r--r--boost/boost/graph/graph_traits.hpp168
-rw-r--r--boost/boost/graph/graph_utility.hpp425
-rw-r--r--boost/boost/graph/graphviz.hpp772
-rw-r--r--boost/boost/graph/gursoy_atun_layout.hpp631
-rw-r--r--boost/boost/graph/incremental_components.hpp170
-rw-r--r--boost/boost/graph/isomorphism.hpp467
-rw-r--r--boost/boost/graph/iteration_macros.hpp129
-rw-r--r--boost/boost/graph/iteration_macros_undef.hpp22
-rw-r--r--boost/boost/graph/johnson_all_pairs_shortest.hpp206
-rw-r--r--boost/boost/graph/kamada_kawai_spring_layout.hpp542
-rw-r--r--boost/boost/graph/king_ordering.hpp320
-rw-r--r--boost/boost/graph/kruskal_min_spanning_tree.hpp155
-rw-r--r--boost/boost/graph/leda_graph.hpp549
-rw-r--r--boost/boost/graph/matrix_as_graph.hpp127
-rw-r--r--boost/boost/graph/max_cardinality_matching.hpp876
-rw-r--r--boost/boost/graph/minimum_degree_ordering.hpp655
-rw-r--r--boost/boost/graph/named_function_params.hpp753
-rw-r--r--boost/boost/graph/neighbor_bfs.hpp323
-rw-r--r--boost/boost/graph/page_rank.hpp153
-rw-r--r--boost/boost/graph/plod_generator.hpp161
-rw-r--r--boost/boost/graph/prim_minimum_spanning_tree.hpp91
-rw-r--r--boost/boost/graph/profile.hpp43
-rw-r--r--boost/boost/graph/properties.hpp375
-rw-r--r--boost/boost/graph/property_iter_range.hpp118
-rw-r--r--boost/boost/graph/push_relabel_max_flow.hpp727
-rw-r--r--boost/boost/graph/random.hpp205
-rw-r--r--boost/boost/graph/random_layout.hpp49
-rw-r--r--boost/boost/graph/read_dimacs.hpp278
-rw-r--r--boost/boost/graph/relax.hpp77
-rw-r--r--boost/boost/graph/reverse_graph.hpp314
-rw-r--r--boost/boost/graph/sequential_vertex_coloring.hpp124
-rw-r--r--boost/boost/graph/simple_point.hpp23
-rw-r--r--boost/boost/graph/sloan_ordering.hpp448
-rw-r--r--boost/boost/graph/small_world_generator.hpp114
-rw-r--r--boost/boost/graph/smallest_last_ordering.hpp122
-rw-r--r--boost/boost/graph/stanford_graph.hpp565
-rw-r--r--boost/boost/graph/strong_components.hpp334
-rw-r--r--boost/boost/graph/subgraph.hpp872
-rw-r--r--boost/boost/graph/topological_sort.hpp76
-rw-r--r--boost/boost/graph/transitive_closure.hpp370
-rw-r--r--boost/boost/graph/transpose_graph.hpp40
-rw-r--r--boost/boost/graph/tree_traits.hpp43
-rw-r--r--boost/boost/graph/two_bit_color_map.hpp90
-rw-r--r--boost/boost/graph/undirected_dfs.hpp250
-rw-r--r--boost/boost/graph/vector_as_graph.hpp332
-rw-r--r--boost/boost/graph/visitors.hpp269
-rw-r--r--boost/boost/graph/wavefront.hpp135
-rw-r--r--boost/boost/implicit_cast.hpp29
-rw-r--r--boost/boost/indirect_reference.hpp43
-rw-r--r--boost/boost/integer.hpp127
-rw-r--r--boost/boost/integer/integer_mask.hpp93
-rw-r--r--boost/boost/integer/static_log2.hpp132
-rw-r--r--boost/boost/integer/static_min_max.hpp55
-rw-r--r--boost/boost/integer_fwd.hpp152
-rw-r--r--boost/boost/integer_traits.hpp236
-rw-r--r--boost/boost/intrusive_ptr.hpp277
-rw-r--r--boost/boost/io/ios_state.hpp417
-rw-r--r--boost/boost/io_fwd.hpp67
-rw-r--r--boost/boost/iostreams/categories.hpp142
-rw-r--r--boost/boost/iostreams/chain.hpp563
-rw-r--r--boost/boost/iostreams/char_traits.hpp72
-rw-r--r--boost/boost/iostreams/checked_operations.hpp150
-rw-r--r--boost/boost/iostreams/close.hpp145
-rw-r--r--boost/boost/iostreams/code_converter.hpp417
-rw-r--r--boost/boost/iostreams/combine.hpp233
-rw-r--r--boost/boost/iostreams/compose.hpp368
-rw-r--r--boost/boost/iostreams/concepts.hpp128
-rw-r--r--boost/boost/iostreams/constants.hpp41
-rw-r--r--boost/boost/iostreams/copy.hpp198
-rw-r--r--boost/boost/iostreams/detail/access_control.hpp86
-rw-r--r--boost/boost/iostreams/detail/adapter/basic_adapter.hpp69
-rw-r--r--boost/boost/iostreams/detail/adapter/concept_adapter.hpp276
-rw-r--r--boost/boost/iostreams/detail/adapter/direct_adapter.hpp278
-rw-r--r--boost/boost/iostreams/detail/adapter/mode_adapter.hpp117
-rw-r--r--boost/boost/iostreams/detail/adapter/non_blocking_adapter.hpp57
-rw-r--r--boost/boost/iostreams/detail/adapter/output_iterator_adapter.hpp40
-rw-r--r--boost/boost/iostreams/detail/adapter/range_adapter.hpp182
-rw-r--r--boost/boost/iostreams/detail/add_facet.hpp48
-rw-r--r--boost/boost/iostreams/detail/bool_trait_def.hpp48
-rw-r--r--boost/boost/iostreams/detail/broken_overload_resolution/forward.hpp30
-rw-r--r--boost/boost/iostreams/detail/broken_overload_resolution/stream.hpp179
-rw-r--r--boost/boost/iostreams/detail/broken_overload_resolution/stream_buffer.hpp183
-rw-r--r--boost/boost/iostreams/detail/buffer.hpp199
-rw-r--r--boost/boost/iostreams/detail/call_traits.hpp31
-rw-r--r--boost/boost/iostreams/detail/char_traits.hpp62
-rw-r--r--boost/boost/iostreams/detail/closer.hpp122
-rw-r--r--boost/boost/iostreams/detail/codecvt_helper.hpp237
-rw-r--r--boost/boost/iostreams/detail/codecvt_holder.hpp62
-rw-r--r--boost/boost/iostreams/detail/config/auto_link.hpp48
-rw-r--r--boost/boost/iostreams/detail/config/bzip2.hpp47
-rw-r--r--boost/boost/iostreams/detail/config/codecvt.hpp76
-rw-r--r--boost/boost/iostreams/detail/config/disable_warnings.hpp21
-rw-r--r--boost/boost/iostreams/detail/config/dyn_link.hpp36
-rw-r--r--boost/boost/iostreams/detail/config/enable_warnings.hpp15
-rw-r--r--boost/boost/iostreams/detail/config/gcc.hpp23
-rw-r--r--boost/boost/iostreams/detail/config/limits.hpp14
-rw-r--r--boost/boost/iostreams/detail/config/overload_resolution.hpp31
-rw-r--r--boost/boost/iostreams/detail/config/wide_streams.hpp54
-rw-r--r--boost/boost/iostreams/detail/config/windows_posix.hpp25
-rw-r--r--boost/boost/iostreams/detail/config/zlib.hpp49
-rw-r--r--boost/boost/iostreams/detail/counted_array.hpp63
-rw-r--r--boost/boost/iostreams/detail/default_arg.hpp24
-rw-r--r--boost/boost/iostreams/detail/dispatch.hpp40
-rw-r--r--boost/boost/iostreams/detail/double_object.hpp113
-rw-r--r--boost/boost/iostreams/detail/enable_if_stream.hpp30
-rw-r--r--boost/boost/iostreams/detail/error.hpp44
-rw-r--r--boost/boost/iostreams/detail/forward.hpp101
-rw-r--r--boost/boost/iostreams/detail/fstream.hpp32
-rw-r--r--boost/boost/iostreams/detail/ios.hpp65
-rw-r--r--boost/boost/iostreams/detail/iostream.hpp33
-rw-r--r--boost/boost/iostreams/detail/is_dereferenceable.hpp84
-rw-r--r--boost/boost/iostreams/detail/is_iterator_range.hpp26
-rw-r--r--boost/boost/iostreams/detail/newline.hpp31
-rw-r--r--boost/boost/iostreams/detail/optional.hpp113
-rw-r--r--boost/boost/iostreams/detail/param_type.hpp26
-rw-r--r--boost/boost/iostreams/detail/push.hpp153
-rw-r--r--boost/boost/iostreams/detail/push_params.hpp20
-rw-r--r--boost/boost/iostreams/detail/resolve.hpp229
-rw-r--r--boost/boost/iostreams/detail/select.hpp79
-rw-r--r--boost/boost/iostreams/detail/select_by_size.hpp159
-rw-r--r--boost/boost/iostreams/detail/streambuf.hpp33
-rw-r--r--boost/boost/iostreams/detail/streambuf/chainbuf.hpp115
-rw-r--r--boost/boost/iostreams/detail/streambuf/direct_streambuf.hpp305
-rw-r--r--boost/boost/iostreams/detail/streambuf/indirect_streambuf.hpp423
-rw-r--r--boost/boost/iostreams/detail/streambuf/linked_streambuf.hpp80
-rw-r--r--boost/boost/iostreams/detail/system_failure.hpp76
-rw-r--r--boost/boost/iostreams/detail/template_params.hpp25
-rw-r--r--boost/boost/iostreams/detail/translate_int_type.hpp61
-rw-r--r--boost/boost/iostreams/detail/vc6/close.hpp125
-rw-r--r--boost/boost/iostreams/detail/vc6/read.hpp237
-rw-r--r--boost/boost/iostreams/detail/vc6/write.hpp158
-rw-r--r--boost/boost/iostreams/detail/wrap_unwrap.hpp126
-rw-r--r--boost/boost/iostreams/device/array.hpp143
-rw-r--r--boost/boost/iostreams/device/back_inserter.hpp40
-rw-r--r--boost/boost/iostreams/device/file.hpp182
-rw-r--r--boost/boost/iostreams/device/file_descriptor.hpp156
-rw-r--r--boost/boost/iostreams/device/mapped_file.hpp270
-rw-r--r--boost/boost/iostreams/device/null.hpp64
-rw-r--r--boost/boost/iostreams/filter/aggregate.hpp165
-rw-r--r--boost/boost/iostreams/filter/bzip2.hpp387
-rw-r--r--boost/boost/iostreams/filter/counter.hpp81
-rw-r--r--boost/boost/iostreams/filter/gzip.hpp594
-rw-r--r--boost/boost/iostreams/filter/line.hpp214
-rw-r--r--boost/boost/iostreams/filter/newline.hpp420
-rw-r--r--boost/boost/iostreams/filter/regex.hpp93
-rw-r--r--boost/boost/iostreams/filter/stdio.hpp82
-rw-r--r--boost/boost/iostreams/filter/symmetric.hpp302
-rw-r--r--boost/boost/iostreams/filter/test.hpp277
-rw-r--r--boost/boost/iostreams/filter/zlib.hpp415
-rw-r--r--boost/boost/iostreams/filtering_stream.hpp148
-rw-r--r--boost/boost/iostreams/filtering_streambuf.hpp64
-rw-r--r--boost/boost/iostreams/flush.hpp124
-rw-r--r--boost/boost/iostreams/get.hpp16
-rw-r--r--boost/boost/iostreams/imbue.hpp81
-rw-r--r--boost/boost/iostreams/input_sequence.hpp70
-rw-r--r--boost/boost/iostreams/invert.hpp162
-rw-r--r--boost/boost/iostreams/operations.hpp25
-rw-r--r--boost/boost/iostreams/operations_fwd.hpp40
-rw-r--r--boost/boost/iostreams/optimal_buffer_size.hpp86
-rw-r--r--boost/boost/iostreams/output_sequence.hpp70
-rw-r--r--boost/boost/iostreams/pipeline.hpp125
-rw-r--r--boost/boost/iostreams/positioning.hpp102
-rw-r--r--boost/boost/iostreams/put.hpp16
-rw-r--r--boost/boost/iostreams/putback.hpp16
-rw-r--r--boost/boost/iostreams/read.hpp246
-rw-r--r--boost/boost/iostreams/restrict.hpp418
-rw-r--r--boost/boost/iostreams/seek.hpp179
-rw-r--r--boost/boost/iostreams/skip.hpp87
-rw-r--r--boost/boost/iostreams/stream.hpp133
-rw-r--r--boost/boost/iostreams/stream_buffer.hpp108
-rw-r--r--boost/boost/iostreams/tee.hpp170
-rw-r--r--boost/boost/iostreams/traits.hpp256
-rw-r--r--boost/boost/iostreams/traits_fwd.hpp71
-rw-r--r--boost/boost/iostreams/write.hpp170
-rw-r--r--boost/boost/iterator.hpp59
-rw-r--r--boost/boost/iterator/counting_iterator.hpp215
-rw-r--r--boost/boost/iterator/detail/any_conversion_eater.hpp19
-rw-r--r--boost/boost/iterator/detail/config_def.hpp135
-rw-r--r--boost/boost/iterator/detail/config_undef.hpp25
-rw-r--r--boost/boost/iterator/detail/enable_if.hpp86
-rw-r--r--boost/boost/iterator/detail/facade_iterator_category.hpp209
-rw-r--r--boost/boost/iterator/detail/minimum_category.hpp116
-rw-r--r--boost/boost/iterator/filter_iterator.hpp135
-rw-r--r--boost/boost/iterator/indirect_iterator.hpp139
-rw-r--r--boost/boost/iterator/interoperable.hpp50
-rw-r--r--boost/boost/iterator/is_lvalue_iterator.hpp150
-rw-r--r--boost/boost/iterator/is_readable_iterator.hpp108
-rw-r--r--boost/boost/iterator/iterator_adaptor.hpp366
-rw-r--r--boost/boost/iterator/iterator_archetypes.hpp514
-rw-r--r--boost/boost/iterator/iterator_categories.hpp188
-rw-r--r--boost/boost/iterator/iterator_concepts.hpp308
-rw-r--r--boost/boost/iterator/iterator_facade.hpp879
-rw-r--r--boost/boost/iterator/iterator_traits.hpp92
-rw-r--r--boost/boost/iterator/new_iterator_tests.hpp264
-rw-r--r--boost/boost/iterator/permutation_iterator.hpp72
-rw-r--r--boost/boost/iterator/reverse_iterator.hpp69
-rw-r--r--boost/boost/iterator/transform_iterator.hpp188
-rw-r--r--boost/boost/iterator/zip_iterator.hpp585
-rw-r--r--boost/boost/iterator_adaptors.hpp10
-rw-r--r--boost/boost/lambda/algorithm.hpp1377
-rw-r--r--boost/boost/lambda/bind.hpp19
-rw-r--r--boost/boost/lambda/casts.hpp219
-rw-r--r--boost/boost/lambda/closures.hpp274
-rw-r--r--boost/boost/lambda/construct.hpp237
-rw-r--r--boost/boost/lambda/control_structures.hpp22
-rw-r--r--boost/boost/lambda/core.hpp79
-rw-r--r--boost/boost/lambda/detail/actions.hpp174
-rw-r--r--boost/boost/lambda/detail/arity_code.hpp110
-rw-r--r--boost/boost/lambda/detail/bind_functions.hpp1879
-rw-r--r--boost/boost/lambda/detail/control_constructs_common.hpp50
-rw-r--r--boost/boost/lambda/detail/control_structures_impl.hpp550
-rw-r--r--boost/boost/lambda/detail/function_adaptors.hpp640
-rw-r--r--boost/boost/lambda/detail/is_instance_of.hpp104
-rw-r--r--boost/boost/lambda/detail/lambda_config.hpp48
-rw-r--r--boost/boost/lambda/detail/lambda_functor_base.hpp599
-rw-r--r--boost/boost/lambda/detail/lambda_functors.hpp212
-rw-r--r--boost/boost/lambda/detail/lambda_fwd.hpp74
-rw-r--r--boost/boost/lambda/detail/lambda_traits.hpp527
-rw-r--r--boost/boost/lambda/detail/member_ptr.hpp737
-rw-r--r--boost/boost/lambda/detail/operator_actions.hpp139
-rw-r--r--boost/boost/lambda/detail/operator_lambda_func_base.hpp271
-rw-r--r--boost/boost/lambda/detail/operator_return_type_traits.hpp942
-rw-r--r--boost/boost/lambda/detail/operators.hpp370
-rw-r--r--boost/boost/lambda/detail/ret.hpp325
-rw-r--r--boost/boost/lambda/detail/return_type_traits.hpp284
-rw-r--r--boost/boost/lambda/detail/select_functions.hpp74
-rw-r--r--boost/boost/lambda/exceptions.hpp1740
-rw-r--r--boost/boost/lambda/if.hpp462
-rw-r--r--boost/boost/lambda/lambda.hpp34
-rw-r--r--boost/boost/lambda/loops.hpp505
-rw-r--r--boost/boost/lambda/numeric.hpp119
-rw-r--r--boost/boost/lambda/switch.hpp502
-rw-r--r--boost/boost/last_value.hpp48
-rw-r--r--boost/boost/lexical_cast.hpp252
-rw-r--r--boost/boost/limits.hpp144
-rw-r--r--boost/boost/logic/tribool.hpp460
-rw-r--r--boost/boost/logic/tribool_fwd.hpp15
-rw-r--r--boost/boost/logic/tribool_io.hpp348
-rw-r--r--boost/boost/math/common_factor.hpp16
-rw-r--r--boost/boost/math/common_factor_ct.hpp188
-rw-r--r--boost/boost/math/common_factor_rt.hpp408
-rw-r--r--boost/boost/math/complex.hpp32
-rw-r--r--boost/boost/math/complex/acos.hpp235
-rw-r--r--boost/boost/math/complex/acosh.hpp34
-rw-r--r--boost/boost/math/complex/asin.hpp245
-rw-r--r--boost/boost/math/complex/asinh.hpp32
-rw-r--r--boost/boost/math/complex/atan.hpp36
-rw-r--r--boost/boost/math/complex/atanh.hpp245
-rw-r--r--boost/boost/math/complex/details.hpp104
-rw-r--r--boost/boost/math/complex/fabs.hpp23
-rw-r--r--boost/boost/math/octonion.hpp4754
-rw-r--r--boost/boost/math/quaternion.hpp1924
-rw-r--r--boost/boost/math/special_functions/acosh.hpp198
-rw-r--r--boost/boost/math/special_functions/asinh.hpp101
-rw-r--r--boost/boost/math/special_functions/atanh.hpp267
-rw-r--r--boost/boost/math/special_functions/detail/series.hpp52
-rw-r--r--boost/boost/math/special_functions/expm1.hpp121
-rw-r--r--boost/boost/math/special_functions/hypot.hpp84
-rw-r--r--boost/boost/math/special_functions/log1p.hpp124
-rw-r--r--boost/boost/math/special_functions/sinc.hpp146
-rw-r--r--boost/boost/math/special_functions/sinhc.hpp146
-rw-r--r--boost/boost/math_fwd.hpp101
-rw-r--r--boost/boost/mem_fn.hpp389
-rw-r--r--boost/boost/mpl/O1_size.hpp40
-rw-r--r--boost/boost/mpl/O1_size_fwd.hpp24
-rw-r--r--boost/boost/mpl/accumulate.hpp39
-rw-r--r--boost/boost/mpl/advance.hpp76
-rw-r--r--boost/boost/mpl/advance_fwd.hpp28
-rw-r--r--boost/boost/mpl/alias.hpp21
-rw-r--r--boost/boost/mpl/always.hpp39
-rw-r--r--boost/boost/mpl/and.hpp56
-rw-r--r--boost/boost/mpl/apply.hpp225
-rw-r--r--boost/boost/mpl/apply_fwd.hpp107
-rw-r--r--boost/boost/mpl/apply_wrap.hpp200
-rw-r--r--boost/boost/mpl/arg.hpp131
-rw-r--r--boost/boost/mpl/arg_fwd.hpp28
-rw-r--r--boost/boost/mpl/arithmetic.hpp25
-rw-r--r--boost/boost/mpl/as_sequence.hpp38
-rw-r--r--boost/boost/mpl/assert.hpp361
-rw-r--r--boost/boost/mpl/at.hpp52
-rw-r--r--boost/boost/mpl/at_fwd.hpp24
-rw-r--r--boost/boost/mpl/aux_/O1_size_impl.hpp87
-rw-r--r--boost/boost/mpl/aux_/adl_barrier.hpp48
-rw-r--r--boost/boost/mpl/aux_/advance_backward.hpp124
-rw-r--r--boost/boost/mpl/aux_/advance_forward.hpp123
-rw-r--r--boost/boost/mpl/aux_/apply_1st.hpp35
-rw-r--r--boost/boost/mpl/aux_/arg_typedef.hpp31
-rw-r--r--boost/boost/mpl/aux_/arithmetic_op.hpp92
-rw-r--r--boost/boost/mpl/aux_/arity.hpp39
-rw-r--r--boost/boost/mpl/aux_/arity_spec.hpp67
-rw-r--r--boost/boost/mpl/aux_/at_impl.hpp45
-rw-r--r--boost/boost/mpl/aux_/back_impl.hpp43
-rw-r--r--boost/boost/mpl/aux_/basic_bind.hpp21
-rw-r--r--boost/boost/mpl/aux_/begin_end_impl.hpp100
-rw-r--r--boost/boost/mpl/aux_/clear_impl.hpp35
-rw-r--r--boost/boost/mpl/aux_/common_name_wknd.hpp34
-rw-r--r--boost/boost/mpl/aux_/comparison_op.hpp83
-rw-r--r--boost/boost/mpl/aux_/config/adl.hpp40
-rw-r--r--boost/boost/mpl/aux_/config/arrays.hpp30
-rw-r--r--boost/boost/mpl/aux_/config/bind.hpp33
-rw-r--r--boost/boost/mpl/aux_/config/compiler.hpp64
-rw-r--r--boost/boost/mpl/aux_/config/ctps.hpp30
-rw-r--r--boost/boost/mpl/aux_/config/dependent_nttp.hpp35
-rw-r--r--boost/boost/mpl/aux_/config/dmc_ambiguous_ctps.hpp27
-rw-r--r--boost/boost/mpl/aux_/config/dtp.hpp46
-rw-r--r--boost/boost/mpl/aux_/config/eti.hpp47
-rw-r--r--boost/boost/mpl/aux_/config/forwarding.hpp27
-rw-r--r--boost/boost/mpl/aux_/config/gcc.hpp23
-rw-r--r--boost/boost/mpl/aux_/config/has_apply.hpp32
-rw-r--r--boost/boost/mpl/aux_/config/has_xxx.hpp33
-rw-r--r--boost/boost/mpl/aux_/config/integral.hpp38
-rw-r--r--boost/boost/mpl/aux_/config/intel.hpp21
-rw-r--r--boost/boost/mpl/aux_/config/lambda.hpp32
-rw-r--r--boost/boost/mpl/aux_/config/msvc.hpp21
-rw-r--r--boost/boost/mpl/aux_/config/msvc_typename.hpp26
-rw-r--r--boost/boost/mpl/aux_/config/nttp.hpp41
-rw-r--r--boost/boost/mpl/aux_/config/operators.hpp33
-rw-r--r--boost/boost/mpl/aux_/config/overload_resolution.hpp29
-rw-r--r--boost/boost/mpl/aux_/config/preprocessor.hpp39
-rw-r--r--boost/boost/mpl/aux_/config/static_constant.hpp25
-rw-r--r--boost/boost/mpl/aux_/config/ttp.hpp39
-rw-r--r--boost/boost/mpl/aux_/config/typeof.hpp38
-rw-r--r--boost/boost/mpl/aux_/config/use_preprocessed.hpp19
-rw-r--r--boost/boost/mpl/aux_/config/workaround.hpp19
-rw-r--r--boost/boost/mpl/aux_/contains_impl.hpp61
-rw-r--r--boost/boost/mpl/aux_/count_args.hpp105
-rw-r--r--boost/boost/mpl/aux_/count_impl.hpp44
-rw-r--r--boost/boost/mpl/aux_/empty_impl.hpp43
-rw-r--r--boost/boost/mpl/aux_/erase_impl.hpp69
-rw-r--r--boost/boost/mpl/aux_/erase_key_impl.hpp32
-rw-r--r--boost/boost/mpl/aux_/filter_iter.hpp140
-rw-r--r--boost/boost/mpl/aux_/find_if_pred.hpp31
-rw-r--r--boost/boost/mpl/aux_/fold_impl.hpp43
-rw-r--r--boost/boost/mpl/aux_/fold_impl_body.hpp365
-rw-r--r--boost/boost/mpl/aux_/fold_op.hpp37
-rw-r--r--boost/boost/mpl/aux_/fold_pred.hpp37
-rw-r--r--boost/boost/mpl/aux_/front_impl.hpp41
-rw-r--r--boost/boost/mpl/aux_/full_lambda.hpp350
-rw-r--r--boost/boost/mpl/aux_/has_apply.hpp32
-rw-r--r--boost/boost/mpl/aux_/has_begin.hpp23
-rw-r--r--boost/boost/mpl/aux_/has_key_impl.hpp34
-rw-r--r--boost/boost/mpl/aux_/has_rebind.hpp99
-rw-r--r--boost/boost/mpl/aux_/has_size.hpp23
-rw-r--r--boost/boost/mpl/aux_/has_tag.hpp23
-rw-r--r--boost/boost/mpl/aux_/has_type.hpp23
-rw-r--r--boost/boost/mpl/aux_/include_preprocessed.hpp42
-rw-r--r--boost/boost/mpl/aux_/insert_impl.hpp68
-rw-r--r--boost/boost/mpl/aux_/insert_range_impl.hpp77
-rw-r--r--boost/boost/mpl/aux_/inserter_algorithm.hpp159
-rw-r--r--boost/boost/mpl/aux_/integral_wrapper.hpp93
-rw-r--r--boost/boost/mpl/aux_/is_msvc_eti_arg.hpp64
-rw-r--r--boost/boost/mpl/aux_/iter_apply.hpp47
-rw-r--r--boost/boost/mpl/aux_/iter_fold_if_impl.hpp210
-rw-r--r--boost/boost/mpl/aux_/iter_fold_impl.hpp42
-rw-r--r--boost/boost/mpl/aux_/iter_push_front.hpp36
-rw-r--r--boost/boost/mpl/aux_/joint_iter.hpp120
-rw-r--r--boost/boost/mpl/aux_/lambda_arity_param.hpp25
-rw-r--r--boost/boost/mpl/aux_/lambda_no_ctps.hpp193
-rw-r--r--boost/boost/mpl/aux_/lambda_spec.hpp49
-rw-r--r--boost/boost/mpl/aux_/lambda_support.hpp169
-rw-r--r--boost/boost/mpl/aux_/largest_int.hpp63
-rw-r--r--boost/boost/mpl/aux_/logical_op.hpp165
-rw-r--r--boost/boost/mpl/aux_/msvc_dtw.hpp68
-rw-r--r--boost/boost/mpl/aux_/msvc_eti_base.hpp77
-rw-r--r--boost/boost/mpl/aux_/msvc_is_class.hpp58
-rw-r--r--boost/boost/mpl/aux_/msvc_never_true.hpp34
-rw-r--r--boost/boost/mpl/aux_/msvc_type.hpp62
-rw-r--r--boost/boost/mpl/aux_/na.hpp95
-rw-r--r--boost/boost/mpl/aux_/na_assert.hpp34
-rw-r--r--boost/boost/mpl/aux_/na_fwd.hpp31
-rw-r--r--boost/boost/mpl/aux_/na_spec.hpp175
-rw-r--r--boost/boost/mpl/aux_/nested_type_wknd.hpp48
-rw-r--r--boost/boost/mpl/aux_/nttp_decl.hpp35
-rw-r--r--boost/boost/mpl/aux_/numeric_cast_utils.hpp77
-rw-r--r--boost/boost/mpl/aux_/numeric_op.hpp311
-rw-r--r--boost/boost/mpl/aux_/order_impl.hpp76
-rw-r--r--boost/boost/mpl/aux_/overload_names.hpp48
-rw-r--r--boost/boost/mpl/aux_/partition_op.hpp58
-rw-r--r--boost/boost/mpl/aux_/pop_back_impl.hpp34
-rw-r--r--boost/boost/mpl/aux_/pop_front_impl.hpp44
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc/advance_backward.hpp97
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc/advance_forward.hpp97
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc/and.hpp69
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc/apply.hpp169
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc/apply_fwd.hpp52
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc/apply_wrap.hpp456
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc/arg.hpp117
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc/basic_bind.hpp300
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc/bind.hpp397
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc/bind_fwd.hpp46
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc/bitand.hpp147
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc/bitor.hpp147
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc/bitxor.hpp147
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc/deque.hpp323
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc/divides.hpp146
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc/equal_to.hpp94
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc/fold_impl.hpp180
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc/full_lambda.hpp558
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc/greater.hpp94
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc/greater_equal.hpp94
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc/inherit.hpp139
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc/iter_fold_if_impl.hpp133
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc/iter_fold_impl.hpp180
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc/lambda_no_ctps.hpp229
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc/less.hpp94
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc/less_equal.hpp94
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc/list.hpp323
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc/list_c.hpp328
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc/map.hpp323
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc/minus.hpp146
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc/modulus.hpp101
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc/not_equal_to.hpp94
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc/or.hpp69
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc/placeholders.hpp105
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc/plus.hpp146
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc/quote.hpp11
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc/reverse_fold_impl.hpp295
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc/reverse_iter_fold_impl.hpp295
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc/set.hpp323
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc/set_c.hpp328
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc/shift_left.hpp99
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc/shift_right.hpp99
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc/template_arity.hpp40
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc/times.hpp146
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc/unpack_args.hpp97
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc/vector.hpp323
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc/vector_c.hpp309
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc551/advance_backward.hpp97
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc551/advance_forward.hpp97
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc551/and.hpp69
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc551/apply.hpp169
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc551/apply_fwd.hpp52
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc551/apply_wrap.hpp456
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc551/arg.hpp123
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc551/basic_bind.hpp306
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc551/bind.hpp403
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc551/bind_fwd.hpp46
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc551/bitand.hpp147
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc551/bitor.hpp147
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc551/bitxor.hpp147
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc551/deque.hpp323
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc551/divides.hpp146
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc551/equal_to.hpp94
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc551/fold_impl.hpp180
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc551/full_lambda.hpp558
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc551/greater.hpp94
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc551/greater_equal.hpp94
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc551/inherit.hpp141
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc551/iter_fold_if_impl.hpp133
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc551/iter_fold_impl.hpp180
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc551/lambda_no_ctps.hpp229
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc551/less.hpp94
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc551/less_equal.hpp94
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc551/list.hpp323
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc551/list_c.hpp328
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc551/map.hpp323
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc551/minus.hpp146
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc551/modulus.hpp101
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc551/not_equal_to.hpp94
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc551/or.hpp69
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc551/placeholders.hpp105
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc551/plus.hpp146
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc551/quote.hpp11
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc551/reverse_fold_impl.hpp295
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc551/reverse_iter_fold_impl.hpp295
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc551/set.hpp323
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc551/set_c.hpp328
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc551/shift_left.hpp99
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc551/shift_right.hpp99
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc551/template_arity.hpp40
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc551/times.hpp146
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc551/unpack_args.hpp97
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc551/vector.hpp323
-rw-r--r--boost/boost/mpl/aux_/preprocessed/bcc551/vector_c.hpp309
-rw-r--r--boost/boost/mpl/aux_/preprocessed/dmc/advance_backward.hpp97
-rw-r--r--boost/boost/mpl/aux_/preprocessed/dmc/advance_forward.hpp97
-rw-r--r--boost/boost/mpl/aux_/preprocessed/dmc/and.hpp69
-rw-r--r--boost/boost/mpl/aux_/preprocessed/dmc/apply.hpp169
-rw-r--r--boost/boost/mpl/aux_/preprocessed/dmc/apply_fwd.hpp52
-rw-r--r--boost/boost/mpl/aux_/preprocessed/dmc/apply_wrap.hpp84
-rw-r--r--boost/boost/mpl/aux_/preprocessed/dmc/arg.hpp123
-rw-r--r--boost/boost/mpl/aux_/preprocessed/dmc/basic_bind.hpp406
-rw-r--r--boost/boost/mpl/aux_/preprocessed/dmc/bind.hpp515
-rw-r--r--boost/boost/mpl/aux_/preprocessed/dmc/bind_fwd.hpp53
-rw-r--r--boost/boost/mpl/aux_/preprocessed/dmc/bitand.hpp147
-rw-r--r--boost/boost/mpl/aux_/preprocessed/dmc/bitor.hpp147
-rw-r--r--boost/boost/mpl/aux_/preprocessed/dmc/bitxor.hpp147
-rw-r--r--boost/boost/mpl/aux_/preprocessed/dmc/deque.hpp323
-rw-r--r--boost/boost/mpl/aux_/preprocessed/dmc/divides.hpp146
-rw-r--r--boost/boost/mpl/aux_/preprocessed/dmc/equal_to.hpp94
-rw-r--r--boost/boost/mpl/aux_/preprocessed/dmc/fold_impl.hpp180
-rw-r--r--boost/boost/mpl/aux_/preprocessed/dmc/full_lambda.hpp536
-rw-r--r--boost/boost/mpl/aux_/preprocessed/dmc/greater.hpp94
-rw-r--r--boost/boost/mpl/aux_/preprocessed/dmc/greater_equal.hpp94
-rw-r--r--boost/boost/mpl/aux_/preprocessed/dmc/inherit.hpp141
-rw-r--r--boost/boost/mpl/aux_/preprocessed/dmc/iter_fold_if_impl.hpp133
-rw-r--r--boost/boost/mpl/aux_/preprocessed/dmc/iter_fold_impl.hpp180
-rw-r--r--boost/boost/mpl/aux_/preprocessed/dmc/lambda_no_ctps.hpp229
-rw-r--r--boost/boost/mpl/aux_/preprocessed/dmc/less.hpp94
-rw-r--r--boost/boost/mpl/aux_/preprocessed/dmc/less_equal.hpp94
-rw-r--r--boost/boost/mpl/aux_/preprocessed/dmc/list.hpp323
-rw-r--r--boost/boost/mpl/aux_/preprocessed/dmc/list_c.hpp328
-rw-r--r--boost/boost/mpl/aux_/preprocessed/dmc/map.hpp323
-rw-r--r--boost/boost/mpl/aux_/preprocessed/dmc/minus.hpp146
-rw-r--r--boost/boost/mpl/aux_/preprocessed/dmc/modulus.hpp101
-rw-r--r--boost/boost/mpl/aux_/preprocessed/dmc/not_equal_to.hpp94
-rw-r--r--boost/boost/mpl/aux_/preprocessed/dmc/or.hpp69
-rw-r--r--boost/boost/mpl/aux_/preprocessed/dmc/placeholders.hpp105
-rw-r--r--boost/boost/mpl/aux_/preprocessed/dmc/plus.hpp146
-rw-r--r--boost/boost/mpl/aux_/preprocessed/dmc/quote.hpp123
-rw-r--r--boost/boost/mpl/aux_/preprocessed/dmc/reverse_fold_impl.hpp231
-rw-r--r--boost/boost/mpl/aux_/preprocessed/dmc/reverse_iter_fold_impl.hpp231
-rw-r--r--boost/boost/mpl/aux_/preprocessed/dmc/set.hpp323
-rw-r--r--boost/boost/mpl/aux_/preprocessed/dmc/set_c.hpp328
-rw-r--r--boost/boost/mpl/aux_/preprocessed/dmc/shift_left.hpp99
-rw-r--r--boost/boost/mpl/aux_/preprocessed/dmc/shift_right.hpp99
-rw-r--r--boost/boost/mpl/aux_/preprocessed/dmc/template_arity.hpp11
-rw-r--r--boost/boost/mpl/aux_/preprocessed/dmc/times.hpp146
-rw-r--r--boost/boost/mpl/aux_/preprocessed/dmc/unpack_args.hpp94
-rw-r--r--boost/boost/mpl/aux_/preprocessed/dmc/vector.hpp323
-rw-r--r--boost/boost/mpl/aux_/preprocessed/dmc/vector_c.hpp309
-rw-r--r--boost/boost/mpl/aux_/preprocessed/gcc/advance_backward.hpp97
-rw-r--r--boost/boost/mpl/aux_/preprocessed/gcc/advance_forward.hpp97
-rw-r--r--boost/boost/mpl/aux_/preprocessed/gcc/and.hpp69
-rw-r--r--boost/boost/mpl/aux_/preprocessed/gcc/apply.hpp169
-rw-r--r--boost/boost/mpl/aux_/preprocessed/gcc/apply_fwd.hpp52
-rw-r--r--boost/boost/mpl/aux_/preprocessed/gcc/apply_wrap.hpp84
-rw-r--r--boost/boost/mpl/aux_/preprocessed/gcc/arg.hpp123
-rw-r--r--boost/boost/mpl/aux_/preprocessed/gcc/basic_bind.hpp440
-rw-r--r--boost/boost/mpl/aux_/preprocessed/gcc/bind.hpp561
-rw-r--r--boost/boost/mpl/aux_/preprocessed/gcc/bind_fwd.hpp52
-rw-r--r--boost/boost/mpl/aux_/preprocessed/gcc/bitand.hpp147
-rw-r--r--boost/boost/mpl/aux_/preprocessed/gcc/bitor.hpp147
-rw-r--r--boost/boost/mpl/aux_/preprocessed/gcc/bitxor.hpp147
-rw-r--r--boost/boost/mpl/aux_/preprocessed/gcc/deque.hpp323
-rw-r--r--boost/boost/mpl/aux_/preprocessed/gcc/divides.hpp146
-rw-r--r--boost/boost/mpl/aux_/preprocessed/gcc/equal_to.hpp94
-rw-r--r--boost/boost/mpl/aux_/preprocessed/gcc/fold_impl.hpp180
-rw-r--r--boost/boost/mpl/aux_/preprocessed/gcc/full_lambda.hpp558
-rw-r--r--boost/boost/mpl/aux_/preprocessed/gcc/greater.hpp94
-rw-r--r--boost/boost/mpl/aux_/preprocessed/gcc/greater_equal.hpp94
-rw-r--r--boost/boost/mpl/aux_/preprocessed/gcc/inherit.hpp141
-rw-r--r--boost/boost/mpl/aux_/preprocessed/gcc/iter_fold_if_impl.hpp133
-rw-r--r--boost/boost/mpl/aux_/preprocessed/gcc/iter_fold_impl.hpp180
-rw-r--r--boost/boost/mpl/aux_/preprocessed/gcc/lambda_no_ctps.hpp229
-rw-r--r--boost/boost/mpl/aux_/preprocessed/gcc/less.hpp94
-rw-r--r--boost/boost/mpl/aux_/preprocessed/gcc/less_equal.hpp94
-rw-r--r--boost/boost/mpl/aux_/preprocessed/gcc/list.hpp323
-rw-r--r--boost/boost/mpl/aux_/preprocessed/gcc/list_c.hpp328
-rw-r--r--boost/boost/mpl/aux_/preprocessed/gcc/map.hpp323
-rw-r--r--boost/boost/mpl/aux_/preprocessed/gcc/minus.hpp146
-rw-r--r--boost/boost/mpl/aux_/preprocessed/gcc/modulus.hpp101
-rw-r--r--boost/boost/mpl/aux_/preprocessed/gcc/not_equal_to.hpp94
-rw-r--r--boost/boost/mpl/aux_/preprocessed/gcc/or.hpp69
-rw-r--r--boost/boost/mpl/aux_/preprocessed/gcc/placeholders.hpp105
-rw-r--r--boost/boost/mpl/aux_/preprocessed/gcc/plus.hpp146
-rw-r--r--boost/boost/mpl/aux_/preprocessed/gcc/quote.hpp123
-rw-r--r--boost/boost/mpl/aux_/preprocessed/gcc/reverse_fold_impl.hpp231
-rw-r--r--boost/boost/mpl/aux_/preprocessed/gcc/reverse_iter_fold_impl.hpp231
-rw-r--r--boost/boost/mpl/aux_/preprocessed/gcc/set.hpp323
-rw-r--r--boost/boost/mpl/aux_/preprocessed/gcc/set_c.hpp328
-rw-r--r--boost/boost/mpl/aux_/preprocessed/gcc/shift_left.hpp99
-rw-r--r--boost/boost/mpl/aux_/preprocessed/gcc/shift_right.hpp99
-rw-r--r--boost/boost/mpl/aux_/preprocessed/gcc/template_arity.hpp101
-rw-r--r--boost/boost/mpl/aux_/preprocessed/gcc/times.hpp146
-rw-r--r--boost/boost/mpl/aux_/preprocessed/gcc/unpack_args.hpp94
-rw-r--r--boost/boost/mpl/aux_/preprocessed/gcc/vector.hpp323
-rw-r--r--boost/boost/mpl/aux_/preprocessed/gcc/vector_c.hpp309
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc60/advance_backward.hpp132
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc60/advance_forward.hpp132
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc60/and.hpp73
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc60/apply.hpp166
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc60/apply_fwd.hpp46
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc60/apply_wrap.hpp247
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc60/arg.hpp123
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc60/basic_bind.hpp328
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc60/bind.hpp432
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc60/bind_fwd.hpp46
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc60/bitand.hpp149
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc60/bitor.hpp149
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc60/bitxor.hpp149
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc60/deque.hpp556
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc60/divides.hpp148
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc60/equal_to.hpp102
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc60/fold_impl.hpp293
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc60/full_lambda.hpp554
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc60/greater.hpp102
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc60/greater_equal.hpp102
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc60/inherit.hpp166
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc60/iter_fold_if_impl.hpp133
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc60/iter_fold_impl.hpp293
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc60/lambda_no_ctps.hpp229
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc60/less.hpp102
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc60/less_equal.hpp102
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc60/list.hpp556
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc60/list_c.hpp534
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc60/map.hpp556
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc60/minus.hpp148
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc60/modulus.hpp115
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc60/not_equal_to.hpp102
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc60/or.hpp73
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc60/placeholders.hpp105
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc60/plus.hpp148
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc60/quote.hpp11
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc60/reverse_fold_impl.hpp343
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc60/reverse_iter_fold_impl.hpp343
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc60/set.hpp556
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc60/set_c.hpp534
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc60/shift_left.hpp114
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc60/shift_right.hpp114
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc60/template_arity.hpp46
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc60/times.hpp148
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc60/unpack_args.hpp109
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc60/vector.hpp556
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc60/vector_c.hpp534
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc70/advance_backward.hpp97
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc70/advance_forward.hpp97
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc70/and.hpp71
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc70/apply.hpp160
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc70/apply_fwd.hpp46
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc70/apply_wrap.hpp138
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc70/arg.hpp123
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc70/basic_bind.hpp328
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc70/bind.hpp432
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc70/bind_fwd.hpp46
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc70/bitand.hpp151
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc70/bitor.hpp151
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc70/bitxor.hpp151
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc70/deque.hpp556
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc70/divides.hpp150
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc70/equal_to.hpp102
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc70/fold_impl.hpp245
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc70/full_lambda.hpp554
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc70/greater.hpp102
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc70/greater_equal.hpp102
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc70/inherit.hpp166
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc70/iter_fold_if_impl.hpp133
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc70/iter_fold_impl.hpp245
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc70/lambda_no_ctps.hpp229
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc70/less.hpp102
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc70/less_equal.hpp102
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc70/list.hpp556
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc70/list_c.hpp534
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc70/map.hpp556
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc70/minus.hpp150
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc70/modulus.hpp115
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc70/not_equal_to.hpp102
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc70/or.hpp71
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc70/placeholders.hpp105
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc70/plus.hpp150
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc70/quote.hpp116
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc70/reverse_fold_impl.hpp295
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc70/reverse_iter_fold_impl.hpp295
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc70/set.hpp556
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc70/set_c.hpp534
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc70/shift_left.hpp114
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc70/shift_right.hpp114
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc70/template_arity.hpp46
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc70/times.hpp150
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc70/unpack_args.hpp109
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc70/vector.hpp556
-rw-r--r--boost/boost/mpl/aux_/preprocessed/msvc70/vector_c.hpp534
-rw-r--r--boost/boost/mpl/aux_/preprocessed/mwcw/advance_backward.hpp97
-rw-r--r--boost/boost/mpl/aux_/preprocessed/mwcw/advance_forward.hpp97
-rw-r--r--boost/boost/mpl/aux_/preprocessed/mwcw/and.hpp69
-rw-r--r--boost/boost/mpl/aux_/preprocessed/mwcw/apply.hpp169
-rw-r--r--boost/boost/mpl/aux_/preprocessed/mwcw/apply_fwd.hpp52
-rw-r--r--boost/boost/mpl/aux_/preprocessed/mwcw/apply_wrap.hpp456
-rw-r--r--boost/boost/mpl/aux_/preprocessed/mwcw/arg.hpp123
-rw-r--r--boost/boost/mpl/aux_/preprocessed/mwcw/basic_bind.hpp440
-rw-r--r--boost/boost/mpl/aux_/preprocessed/mwcw/bind.hpp561
-rw-r--r--boost/boost/mpl/aux_/preprocessed/mwcw/bind_fwd.hpp52
-rw-r--r--boost/boost/mpl/aux_/preprocessed/mwcw/bitand.hpp147
-rw-r--r--boost/boost/mpl/aux_/preprocessed/mwcw/bitor.hpp147
-rw-r--r--boost/boost/mpl/aux_/preprocessed/mwcw/bitxor.hpp147
-rw-r--r--boost/boost/mpl/aux_/preprocessed/mwcw/deque.hpp323
-rw-r--r--boost/boost/mpl/aux_/preprocessed/mwcw/divides.hpp146
-rw-r--r--boost/boost/mpl/aux_/preprocessed/mwcw/equal_to.hpp94
-rw-r--r--boost/boost/mpl/aux_/preprocessed/mwcw/fold_impl.hpp180
-rw-r--r--boost/boost/mpl/aux_/preprocessed/mwcw/full_lambda.hpp554
-rw-r--r--boost/boost/mpl/aux_/preprocessed/mwcw/greater.hpp94
-rw-r--r--boost/boost/mpl/aux_/preprocessed/mwcw/greater_equal.hpp94
-rw-r--r--boost/boost/mpl/aux_/preprocessed/mwcw/inherit.hpp141
-rw-r--r--boost/boost/mpl/aux_/preprocessed/mwcw/iter_fold_if_impl.hpp133
-rw-r--r--boost/boost/mpl/aux_/preprocessed/mwcw/iter_fold_impl.hpp180
-rw-r--r--boost/boost/mpl/aux_/preprocessed/mwcw/lambda_no_ctps.hpp229
-rw-r--r--boost/boost/mpl/aux_/preprocessed/mwcw/less.hpp94
-rw-r--r--boost/boost/mpl/aux_/preprocessed/mwcw/less_equal.hpp94
-rw-r--r--boost/boost/mpl/aux_/preprocessed/mwcw/list.hpp323
-rw-r--r--boost/boost/mpl/aux_/preprocessed/mwcw/list_c.hpp328
-rw-r--r--boost/boost/mpl/aux_/preprocessed/mwcw/map.hpp323
-rw-r--r--boost/boost/mpl/aux_/preprocessed/mwcw/minus.hpp146
-rw-r--r--boost/boost/mpl/aux_/preprocessed/mwcw/modulus.hpp101
-rw-r--r--boost/boost/mpl/aux_/preprocessed/mwcw/not_equal_to.hpp94
-rw-r--r--boost/boost/mpl/aux_/preprocessed/mwcw/or.hpp69
-rw-r--r--boost/boost/mpl/aux_/preprocessed/mwcw/placeholders.hpp105
-rw-r--r--boost/boost/mpl/aux_/preprocessed/mwcw/plus.hpp146
-rw-r--r--boost/boost/mpl/aux_/preprocessed/mwcw/quote.hpp123
-rw-r--r--boost/boost/mpl/aux_/preprocessed/mwcw/reverse_fold_impl.hpp231
-rw-r--r--boost/boost/mpl/aux_/preprocessed/mwcw/reverse_iter_fold_impl.hpp231
-rw-r--r--boost/boost/mpl/aux_/preprocessed/mwcw/set.hpp323
-rw-r--r--boost/boost/mpl/aux_/preprocessed/mwcw/set_c.hpp328
-rw-r--r--boost/boost/mpl/aux_/preprocessed/mwcw/shift_left.hpp99
-rw-r--r--boost/boost/mpl/aux_/preprocessed/mwcw/shift_right.hpp99
-rw-r--r--boost/boost/mpl/aux_/preprocessed/mwcw/template_arity.hpp11
-rw-r--r--boost/boost/mpl/aux_/preprocessed/mwcw/times.hpp146
-rw-r--r--boost/boost/mpl/aux_/preprocessed/mwcw/unpack_args.hpp94
-rw-r--r--boost/boost/mpl/aux_/preprocessed/mwcw/vector.hpp323
-rw-r--r--boost/boost/mpl/aux_/preprocessed/mwcw/vector_c.hpp309
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ctps/advance_backward.hpp97
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ctps/advance_forward.hpp97
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ctps/and.hpp73
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ctps/apply.hpp268
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ctps/apply_fwd.hpp50
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ctps/apply_wrap.hpp78
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ctps/arg.hpp123
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ctps/basic_bind.hpp486
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ctps/bind.hpp590
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ctps/bind_fwd.hpp52
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ctps/bitand.hpp134
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ctps/bitor.hpp134
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ctps/bitxor.hpp134
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ctps/deque.hpp556
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ctps/divides.hpp133
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ctps/equal_to.hpp94
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ctps/fold_impl.hpp245
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ctps/full_lambda.hpp554
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ctps/greater.hpp94
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ctps/greater_equal.hpp94
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ctps/inherit.hpp166
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ctps/iter_fold_if_impl.hpp133
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ctps/iter_fold_impl.hpp245
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ctps/lambda_no_ctps.hpp229
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ctps/less.hpp94
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ctps/less_equal.hpp94
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ctps/list.hpp556
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ctps/list_c.hpp534
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ctps/map.hpp556
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ctps/minus.hpp133
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ctps/modulus.hpp101
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ctps/not_equal_to.hpp94
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ctps/or.hpp73
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ctps/placeholders.hpp105
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ctps/plus.hpp133
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ctps/quote.hpp116
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ctps/reverse_fold_impl.hpp295
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ctps/reverse_iter_fold_impl.hpp295
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ctps/set.hpp556
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ctps/set_c.hpp534
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ctps/shift_left.hpp99
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ctps/shift_right.hpp99
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ctps/template_arity.hpp40
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ctps/times.hpp133
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ctps/unpack_args.hpp109
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ctps/vector.hpp556
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ctps/vector_c.hpp534
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ttp/advance_backward.hpp97
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ttp/advance_forward.hpp97
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ttp/and.hpp69
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ttp/apply.hpp169
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ttp/apply_fwd.hpp52
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ttp/apply_wrap.hpp84
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ttp/arg.hpp123
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ttp/basic_bind.hpp369
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ttp/bind.hpp466
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ttp/bind_fwd.hpp52
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ttp/bitand.hpp157
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ttp/bitor.hpp157
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ttp/bitxor.hpp157
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ttp/deque.hpp323
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ttp/divides.hpp156
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ttp/equal_to.hpp98
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ttp/fold_impl.hpp180
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ttp/full_lambda.hpp554
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ttp/greater.hpp98
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ttp/greater_equal.hpp98
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ttp/inherit.hpp141
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ttp/iter_fold_if_impl.hpp133
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ttp/iter_fold_impl.hpp180
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ttp/lambda_no_ctps.hpp229
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ttp/less.hpp98
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ttp/less_equal.hpp98
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ttp/list.hpp323
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ttp/list_c.hpp328
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ttp/map.hpp323
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ttp/minus.hpp156
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ttp/modulus.hpp111
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ttp/not_equal_to.hpp98
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ttp/or.hpp69
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ttp/placeholders.hpp105
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ttp/plus.hpp156
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ttp/quote.hpp11
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ttp/reverse_fold_impl.hpp231
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ttp/reverse_iter_fold_impl.hpp231
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ttp/set.hpp323
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ttp/set_c.hpp328
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ttp/shift_left.hpp110
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ttp/shift_right.hpp110
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ttp/template_arity.hpp40
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ttp/times.hpp156
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ttp/unpack_args.hpp94
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ttp/vector.hpp323
-rw-r--r--boost/boost/mpl/aux_/preprocessed/no_ttp/vector_c.hpp309
-rw-r--r--boost/boost/mpl/aux_/preprocessed/plain/advance_backward.hpp97
-rw-r--r--boost/boost/mpl/aux_/preprocessed/plain/advance_forward.hpp97
-rw-r--r--boost/boost/mpl/aux_/preprocessed/plain/and.hpp64
-rw-r--r--boost/boost/mpl/aux_/preprocessed/plain/apply.hpp139
-rw-r--r--boost/boost/mpl/aux_/preprocessed/plain/apply_fwd.hpp52
-rw-r--r--boost/boost/mpl/aux_/preprocessed/plain/apply_wrap.hpp84
-rw-r--r--boost/boost/mpl/aux_/preprocessed/plain/arg.hpp123
-rw-r--r--boost/boost/mpl/aux_/preprocessed/plain/basic_bind.hpp440
-rw-r--r--boost/boost/mpl/aux_/preprocessed/plain/bind.hpp561
-rw-r--r--boost/boost/mpl/aux_/preprocessed/plain/bind_fwd.hpp52
-rw-r--r--boost/boost/mpl/aux_/preprocessed/plain/bitand.hpp142
-rw-r--r--boost/boost/mpl/aux_/preprocessed/plain/bitor.hpp142
-rw-r--r--boost/boost/mpl/aux_/preprocessed/plain/bitxor.hpp142
-rw-r--r--boost/boost/mpl/aux_/preprocessed/plain/deque.hpp323
-rw-r--r--boost/boost/mpl/aux_/preprocessed/plain/divides.hpp141
-rw-r--r--boost/boost/mpl/aux_/preprocessed/plain/equal_to.hpp92
-rw-r--r--boost/boost/mpl/aux_/preprocessed/plain/fold_impl.hpp180
-rw-r--r--boost/boost/mpl/aux_/preprocessed/plain/full_lambda.hpp554
-rw-r--r--boost/boost/mpl/aux_/preprocessed/plain/greater.hpp92
-rw-r--r--boost/boost/mpl/aux_/preprocessed/plain/greater_equal.hpp92
-rw-r--r--boost/boost/mpl/aux_/preprocessed/plain/inherit.hpp125
-rw-r--r--boost/boost/mpl/aux_/preprocessed/plain/iter_fold_if_impl.hpp133
-rw-r--r--boost/boost/mpl/aux_/preprocessed/plain/iter_fold_impl.hpp180
-rw-r--r--boost/boost/mpl/aux_/preprocessed/plain/lambda_no_ctps.hpp228
-rw-r--r--boost/boost/mpl/aux_/preprocessed/plain/less.hpp92
-rw-r--r--boost/boost/mpl/aux_/preprocessed/plain/less_equal.hpp92
-rw-r--r--boost/boost/mpl/aux_/preprocessed/plain/list.hpp323
-rw-r--r--boost/boost/mpl/aux_/preprocessed/plain/list_c.hpp328
-rw-r--r--boost/boost/mpl/aux_/preprocessed/plain/map.hpp323
-rw-r--r--boost/boost/mpl/aux_/preprocessed/plain/minus.hpp141
-rw-r--r--boost/boost/mpl/aux_/preprocessed/plain/modulus.hpp99
-rw-r--r--boost/boost/mpl/aux_/preprocessed/plain/not_equal_to.hpp92
-rw-r--r--boost/boost/mpl/aux_/preprocessed/plain/or.hpp64
-rw-r--r--boost/boost/mpl/aux_/preprocessed/plain/placeholders.hpp105
-rw-r--r--boost/boost/mpl/aux_/preprocessed/plain/plus.hpp141
-rw-r--r--boost/boost/mpl/aux_/preprocessed/plain/quote.hpp123
-rw-r--r--boost/boost/mpl/aux_/preprocessed/plain/reverse_fold_impl.hpp231
-rw-r--r--boost/boost/mpl/aux_/preprocessed/plain/reverse_iter_fold_impl.hpp231
-rw-r--r--boost/boost/mpl/aux_/preprocessed/plain/set.hpp323
-rw-r--r--boost/boost/mpl/aux_/preprocessed/plain/set_c.hpp328
-rw-r--r--boost/boost/mpl/aux_/preprocessed/plain/shift_left.hpp97
-rw-r--r--boost/boost/mpl/aux_/preprocessed/plain/shift_right.hpp97
-rw-r--r--boost/boost/mpl/aux_/preprocessed/plain/template_arity.hpp11
-rw-r--r--boost/boost/mpl/aux_/preprocessed/plain/times.hpp141
-rw-r--r--boost/boost/mpl/aux_/preprocessed/plain/unpack_args.hpp94
-rw-r--r--boost/boost/mpl/aux_/preprocessed/plain/vector.hpp323
-rw-r--r--boost/boost/mpl/aux_/preprocessed/plain/vector_c.hpp309
-rw-r--r--boost/boost/mpl/aux_/preprocessor/add.hpp65
-rw-r--r--boost/boost/mpl/aux_/preprocessor/def_params_tail.hpp105
-rw-r--r--boost/boost/mpl/aux_/preprocessor/default_params.hpp67
-rw-r--r--boost/boost/mpl/aux_/preprocessor/enum.hpp62
-rw-r--r--boost/boost/mpl/aux_/preprocessor/ext_params.hpp78
-rw-r--r--boost/boost/mpl/aux_/preprocessor/filter_params.hpp28
-rw-r--r--boost/boost/mpl/aux_/preprocessor/is_seq.hpp54
-rw-r--r--boost/boost/mpl/aux_/preprocessor/params.hpp65
-rw-r--r--boost/boost/mpl/aux_/preprocessor/partial_spec_params.hpp32
-rw-r--r--boost/boost/mpl/aux_/preprocessor/range.hpp23
-rw-r--r--boost/boost/mpl/aux_/preprocessor/repeat.hpp51
-rw-r--r--boost/boost/mpl/aux_/preprocessor/sub.hpp65
-rw-r--r--boost/boost/mpl/aux_/preprocessor/token_equal.hpp56
-rw-r--r--boost/boost/mpl/aux_/preprocessor/tuple.hpp29
-rw-r--r--boost/boost/mpl/aux_/ptr_to_ref.hpp46
-rw-r--r--boost/boost/mpl/aux_/push_back_impl.hpp55
-rw-r--r--boost/boost/mpl/aux_/push_front_impl.hpp56
-rw-r--r--boost/boost/mpl/aux_/range_c/O1_size.hpp31
-rw-r--r--boost/boost/mpl/aux_/range_c/back.hpp34
-rw-r--r--boost/boost/mpl/aux_/range_c/empty.hpp37
-rw-r--r--boost/boost/mpl/aux_/range_c/front.hpp33
-rw-r--r--boost/boost/mpl/aux_/range_c/iterator.hpp106
-rw-r--r--boost/boost/mpl/aux_/range_c/size.hpp37
-rw-r--r--boost/boost/mpl/aux_/range_c/tag.hpp24
-rw-r--r--boost/boost/mpl/aux_/reverse_fold_impl.hpp44
-rw-r--r--boost/boost/mpl/aux_/reverse_fold_impl_body.hpp412
-rw-r--r--boost/boost/mpl/aux_/reverse_iter_fold_impl.hpp43
-rw-r--r--boost/boost/mpl/aux_/sequence_wrapper.hpp292
-rw-r--r--boost/boost/mpl/aux_/shift_op.hpp87
-rw-r--r--boost/boost/mpl/aux_/single_element_iter.hpp118
-rw-r--r--boost/boost/mpl/aux_/size_impl.hpp52
-rw-r--r--boost/boost/mpl/aux_/sort_impl.hpp121
-rw-r--r--boost/boost/mpl/aux_/static_cast.hpp27
-rw-r--r--boost/boost/mpl/aux_/template_arity.hpp189
-rw-r--r--boost/boost/mpl/aux_/template_arity_fwd.hpp23
-rw-r--r--boost/boost/mpl/aux_/test.hpp32
-rw-r--r--boost/boost/mpl/aux_/test/assert.hpp29
-rw-r--r--boost/boost/mpl/aux_/test/data.hpp25
-rw-r--r--boost/boost/mpl/aux_/test/test_case.hpp21
-rw-r--r--boost/boost/mpl/aux_/traits_lambda_spec.hpp56
-rw-r--r--boost/boost/mpl/aux_/transform_iter.hpp123
-rw-r--r--boost/boost/mpl/aux_/type_wrapper.hpp47
-rw-r--r--boost/boost/mpl/aux_/unwrap.hpp47
-rw-r--r--boost/boost/mpl/aux_/value_wknd.hpp89
-rw-r--r--boost/boost/mpl/aux_/yes_no.hpp58
-rw-r--r--boost/boost/mpl/back.hpp39
-rw-r--r--boost/boost/mpl/back_fwd.hpp24
-rw-r--r--boost/boost/mpl/back_inserter.hpp34
-rw-r--r--boost/boost/mpl/base.hpp35
-rw-r--r--boost/boost/mpl/begin.hpp19
-rw-r--r--boost/boost/mpl/begin_end.hpp57
-rw-r--r--boost/boost/mpl/begin_end_fwd.hpp27
-rw-r--r--boost/boost/mpl/bind.hpp547
-rw-r--r--boost/boost/mpl/bind_fwd.hpp99
-rw-r--r--boost/boost/mpl/bitand.hpp23
-rw-r--r--boost/boost/mpl/bitor.hpp23
-rw-r--r--boost/boost/mpl/bitwise.hpp24
-rw-r--r--boost/boost/mpl/bitxor.hpp23
-rw-r--r--boost/boost/mpl/bool.hpp39
-rw-r--r--boost/boost/mpl/bool_fwd.hpp33
-rw-r--r--boost/boost/mpl/clear.hpp39
-rw-r--r--boost/boost/mpl/clear_fwd.hpp24
-rw-r--r--boost/boost/mpl/comparison.hpp24
-rw-r--r--boost/boost/mpl/contains.hpp41
-rw-r--r--boost/boost/mpl/contains_fwd.hpp25
-rw-r--r--boost/boost/mpl/copy.hpp58
-rw-r--r--boost/boost/mpl/copy_if.hpp96
-rw-r--r--boost/boost/mpl/count.hpp40
-rw-r--r--boost/boost/mpl/count_fwd.hpp24
-rw-r--r--boost/boost/mpl/count_if.hpp79
-rw-r--r--boost/boost/mpl/deque.hpp58
-rw-r--r--boost/boost/mpl/deref.hpp41
-rw-r--r--boost/boost/mpl/distance.hpp78
-rw-r--r--boost/boost/mpl/distance_fwd.hpp28
-rw-r--r--boost/boost/mpl/divides.hpp21
-rw-r--r--boost/boost/mpl/empty.hpp39
-rw-r--r--boost/boost/mpl/empty_base.hpp59
-rw-r--r--boost/boost/mpl/empty_fwd.hpp24
-rw-r--r--boost/boost/mpl/empty_sequence.hpp42
-rw-r--r--boost/boost/mpl/end.hpp19
-rw-r--r--boost/boost/mpl/equal.hpp112
-rw-r--r--boost/boost/mpl/equal_to.hpp21
-rw-r--r--boost/boost/mpl/erase.hpp42
-rw-r--r--boost/boost/mpl/erase_fwd.hpp24
-rw-r--r--boost/boost/mpl/erase_key.hpp41
-rw-r--r--boost/boost/mpl/erase_key_fwd.hpp24
-rw-r--r--boost/boost/mpl/eval_if.hpp71
-rw-r--r--boost/boost/mpl/filter_view.hpp46
-rw-r--r--boost/boost/mpl/find.hpp38
-rw-r--r--boost/boost/mpl/find_if.hpp50
-rw-r--r--boost/boost/mpl/fold.hpp48
-rw-r--r--boost/boost/mpl/for_each.hpp112
-rw-r--r--boost/boost/mpl/front.hpp39
-rw-r--r--boost/boost/mpl/front_fwd.hpp24
-rw-r--r--boost/boost/mpl/front_inserter.hpp33
-rw-r--r--boost/boost/mpl/greater.hpp21
-rw-r--r--boost/boost/mpl/greater_equal.hpp21
-rw-r--r--boost/boost/mpl/has_key.hpp41
-rw-r--r--boost/boost/mpl/has_key_fwd.hpp25
-rw-r--r--boost/boost/mpl/has_xxx.hpp233
-rw-r--r--boost/boost/mpl/identity.hpp45
-rw-r--r--boost/boost/mpl/if.hpp135
-rw-r--r--boost/boost/mpl/index_if.hpp60
-rw-r--r--boost/boost/mpl/index_of.hpp39
-rw-r--r--boost/boost/mpl/inherit.hpp229
-rw-r--r--boost/boost/mpl/inherit_linearly.hpp39
-rw-r--r--boost/boost/mpl/insert.hpp41
-rw-r--r--boost/boost/mpl/insert_fwd.hpp24
-rw-r--r--boost/boost/mpl/insert_range.hpp41
-rw-r--r--boost/boost/mpl/insert_range_fwd.hpp24
-rw-r--r--boost/boost/mpl/inserter.hpp32
-rw-r--r--boost/boost/mpl/int.hpp22
-rw-r--r--boost/boost/mpl/int_fwd.hpp27
-rw-r--r--boost/boost/mpl/integral_c.hpp51
-rw-r--r--boost/boost/mpl/integral_c_fwd.hpp32
-rw-r--r--boost/boost/mpl/integral_c_tag.hpp26
-rw-r--r--boost/boost/mpl/is_placeholder.hpp67
-rw-r--r--boost/boost/mpl/is_sequence.hpp112
-rw-r--r--boost/boost/mpl/iter_fold.hpp49
-rw-r--r--boost/boost/mpl/iter_fold_if.hpp117
-rw-r--r--boost/boost/mpl/iterator_category.hpp35
-rw-r--r--boost/boost/mpl/iterator_range.hpp42
-rw-r--r--boost/boost/mpl/iterator_tags.hpp27
-rw-r--r--boost/boost/mpl/joint_view.hpp65
-rw-r--r--boost/boost/mpl/key_type.hpp42
-rw-r--r--boost/boost/mpl/key_type_fwd.hpp25
-rw-r--r--boost/boost/mpl/lambda.hpp29
-rw-r--r--boost/boost/mpl/lambda_fwd.hpp57
-rw-r--r--boost/boost/mpl/less.hpp21
-rw-r--r--boost/boost/mpl/less_equal.hpp21
-rw-r--r--boost/boost/mpl/limits/arity.hpp21
-rw-r--r--boost/boost/mpl/limits/list.hpp21
-rw-r--r--boost/boost/mpl/limits/map.hpp21
-rw-r--r--boost/boost/mpl/limits/set.hpp21
-rw-r--r--boost/boost/mpl/limits/unrolling.hpp21
-rw-r--r--boost/boost/mpl/limits/vector.hpp21
-rw-r--r--boost/boost/mpl/list.hpp57
-rw-r--r--boost/boost/mpl/list/aux_/O1_size.hpp33
-rw-r--r--boost/boost/mpl/list/aux_/begin_end.hpp44
-rw-r--r--boost/boost/mpl/list/aux_/clear.hpp34
-rw-r--r--boost/boost/mpl/list/aux_/empty.hpp34
-rw-r--r--boost/boost/mpl/list/aux_/front.hpp33
-rw-r--r--boost/boost/mpl/list/aux_/include_preprocessed.hpp35
-rw-r--r--boost/boost/mpl/list/aux_/item.hpp55
-rw-r--r--boost/boost/mpl/list/aux_/iterator.hpp76
-rw-r--r--boost/boost/mpl/list/aux_/numbered.hpp68
-rw-r--r--boost/boost/mpl/list/aux_/numbered_c.hpp71
-rw-r--r--boost/boost/mpl/list/aux_/pop_front.hpp34
-rw-r--r--boost/boost/mpl/list/aux_/preprocessed/plain/list10.hpp149
-rw-r--r--boost/boost/mpl/list/aux_/preprocessed/plain/list10_c.hpp164
-rw-r--r--boost/boost/mpl/list/aux_/preprocessed/plain/list20.hpp169
-rw-r--r--boost/boost/mpl/list/aux_/preprocessed/plain/list20_c.hpp173
-rw-r--r--boost/boost/mpl/list/aux_/preprocessed/plain/list30.hpp189
-rw-r--r--boost/boost/mpl/list/aux_/preprocessed/plain/list30_c.hpp183
-rw-r--r--boost/boost/mpl/list/aux_/preprocessed/plain/list40.hpp209
-rw-r--r--boost/boost/mpl/list/aux_/preprocessed/plain/list40_c.hpp193
-rw-r--r--boost/boost/mpl/list/aux_/preprocessed/plain/list50.hpp229
-rw-r--r--boost/boost/mpl/list/aux_/preprocessed/plain/list50_c.hpp203
-rw-r--r--boost/boost/mpl/list/aux_/push_back.hpp36
-rw-r--r--boost/boost/mpl/list/aux_/push_front.hpp39
-rw-r--r--boost/boost/mpl/list/aux_/size.hpp33
-rw-r--r--boost/boost/mpl/list/aux_/tag.hpp24
-rw-r--r--boost/boost/mpl/list/list0.hpp42
-rw-r--r--boost/boost/mpl/list/list0_c.hpp31
-rw-r--r--boost/boost/mpl/list/list10.hpp43
-rw-r--r--boost/boost/mpl/list/list10_c.hpp43
-rw-r--r--boost/boost/mpl/list/list20.hpp43
-rw-r--r--boost/boost/mpl/list/list20_c.hpp43
-rw-r--r--boost/boost/mpl/list/list30.hpp43
-rw-r--r--boost/boost/mpl/list/list30_c.hpp43
-rw-r--r--boost/boost/mpl/list/list40.hpp43
-rw-r--r--boost/boost/mpl/list/list40_c.hpp43
-rw-r--r--boost/boost/mpl/list/list50.hpp43
-rw-r--r--boost/boost/mpl/list/list50_c.hpp43
-rw-r--r--boost/boost/mpl/list_c.hpp60
-rw-r--r--boost/boost/mpl/logical.hpp21
-rw-r--r--boost/boost/mpl/long.hpp22
-rw-r--r--boost/boost/mpl/long_fwd.hpp27
-rw-r--r--boost/boost/mpl/lower_bound.hpp143
-rw-r--r--boost/boost/mpl/map.hpp57
-rw-r--r--boost/boost/mpl/map/aux_/at_impl.hpp144
-rw-r--r--boost/boost/mpl/map/aux_/begin_end_impl.hpp50
-rw-r--r--boost/boost/mpl/map/aux_/clear_impl.hpp35
-rw-r--r--boost/boost/mpl/map/aux_/contains_impl.hpp43
-rw-r--r--boost/boost/mpl/map/aux_/empty_impl.hpp34
-rw-r--r--boost/boost/mpl/map/aux_/erase_impl.hpp41
-rw-r--r--boost/boost/mpl/map/aux_/erase_key_impl.hpp53
-rw-r--r--boost/boost/mpl/map/aux_/has_key_impl.hpp44
-rw-r--r--boost/boost/mpl/map/aux_/include_preprocessed.hpp53
-rw-r--r--boost/boost/mpl/map/aux_/insert_impl.hpp72
-rw-r--r--boost/boost/mpl/map/aux_/item.hpp138
-rw-r--r--boost/boost/mpl/map/aux_/iterator.hpp169
-rw-r--r--boost/boost/mpl/map/aux_/key_type_impl.hpp36
-rw-r--r--boost/boost/mpl/map/aux_/map0.hpp74
-rw-r--r--boost/boost/mpl/map/aux_/numbered.hpp110
-rw-r--r--boost/boost/mpl/map/aux_/preprocessed/no_ctps/map10.hpp350
-rw-r--r--boost/boost/mpl/map/aux_/preprocessed/no_ctps/map20.hpp370
-rw-r--r--boost/boost/mpl/map/aux_/preprocessed/no_ctps/map30.hpp390
-rw-r--r--boost/boost/mpl/map/aux_/preprocessed/no_ctps/map40.hpp410
-rw-r--r--boost/boost/mpl/map/aux_/preprocessed/no_ctps/map50.hpp430
-rw-r--r--boost/boost/mpl/map/aux_/preprocessed/plain/map10.hpp290
-rw-r--r--boost/boost/mpl/map/aux_/preprocessed/plain/map20.hpp310
-rw-r--r--boost/boost/mpl/map/aux_/preprocessed/plain/map30.hpp330
-rw-r--r--boost/boost/mpl/map/aux_/preprocessed/plain/map40.hpp350
-rw-r--r--boost/boost/mpl/map/aux_/preprocessed/plain/map50.hpp370
-rw-r--r--boost/boost/mpl/map/aux_/preprocessed/typeof_based/map10.hpp150
-rw-r--r--boost/boost/mpl/map/aux_/preprocessed/typeof_based/map20.hpp170
-rw-r--r--boost/boost/mpl/map/aux_/preprocessed/typeof_based/map30.hpp190
-rw-r--r--boost/boost/mpl/map/aux_/preprocessed/typeof_based/map40.hpp210
-rw-r--r--boost/boost/mpl/map/aux_/preprocessed/typeof_based/map50.hpp230
-rw-r--r--boost/boost/mpl/map/aux_/size_impl.hpp33
-rw-r--r--boost/boost/mpl/map/aux_/tag.hpp24
-rw-r--r--boost/boost/mpl/map/aux_/value_type_impl.hpp36
-rw-r--r--boost/boost/mpl/map/map0.hpp36
-rw-r--r--boost/boost/mpl/map/map10.hpp44
-rw-r--r--boost/boost/mpl/map/map20.hpp44
-rw-r--r--boost/boost/mpl/map/map30.hpp44
-rw-r--r--boost/boost/mpl/map/map40.hpp44
-rw-r--r--boost/boost/mpl/map/map50.hpp44
-rw-r--r--boost/boost/mpl/math/fixed_c.hpp36
-rw-r--r--boost/boost/mpl/math/is_even.hpp54
-rw-r--r--boost/boost/mpl/math/rational_c.hpp37
-rw-r--r--boost/boost/mpl/max.hpp19
-rw-r--r--boost/boost/mpl/max_element.hpp72
-rw-r--r--boost/boost/mpl/min.hpp19
-rw-r--r--boost/boost/mpl/min_element.hpp40
-rw-r--r--boost/boost/mpl/min_max.hpp46
-rw-r--r--boost/boost/mpl/minus.hpp21
-rw-r--r--boost/boost/mpl/modulus.hpp22
-rw-r--r--boost/boost/mpl/multiplies.hpp53
-rw-r--r--boost/boost/mpl/multiset/aux_/count_impl.hpp82
-rw-r--r--boost/boost/mpl/multiset/aux_/insert_impl.hpp34
-rw-r--r--boost/boost/mpl/multiset/aux_/item.hpp114
-rw-r--r--boost/boost/mpl/multiset/aux_/multiset0.hpp34
-rw-r--r--boost/boost/mpl/multiset/aux_/tag.hpp23
-rw-r--r--boost/boost/mpl/multiset/multiset0.hpp36
-rw-r--r--boost/boost/mpl/negate.hpp81
-rw-r--r--boost/boost/mpl/next.hpp19
-rw-r--r--boost/boost/mpl/next_prior.hpp49
-rw-r--r--boost/boost/mpl/not.hpp51
-rw-r--r--boost/boost/mpl/not_equal_to.hpp21
-rw-r--r--boost/boost/mpl/numeric_cast.hpp41
-rw-r--r--boost/boost/mpl/or.hpp57
-rw-r--r--boost/boost/mpl/order.hpp41
-rw-r--r--boost/boost/mpl/order_fwd.hpp25
-rw-r--r--boost/boost/mpl/pair.hpp70
-rw-r--r--boost/boost/mpl/pair_view.hpp169
-rw-r--r--boost/boost/mpl/partition.hpp53
-rw-r--r--boost/boost/mpl/placeholders.hpp100
-rw-r--r--boost/boost/mpl/plus.hpp21
-rw-r--r--boost/boost/mpl/pop_back.hpp39
-rw-r--r--boost/boost/mpl/pop_back_fwd.hpp24
-rw-r--r--boost/boost/mpl/pop_front.hpp39
-rw-r--r--boost/boost/mpl/pop_front_fwd.hpp24
-rw-r--r--boost/boost/mpl/print.hpp74
-rw-r--r--boost/boost/mpl/prior.hpp19
-rw-r--r--boost/boost/mpl/protect.hpp55
-rw-r--r--boost/boost/mpl/push_back.hpp53
-rw-r--r--boost/boost/mpl/push_back_fwd.hpp24
-rw-r--r--boost/boost/mpl/push_front.hpp52
-rw-r--r--boost/boost/mpl/push_front_fwd.hpp24
-rw-r--r--boost/boost/mpl/quote.hpp140
-rw-r--r--boost/boost/mpl/range_c.hpp48
-rw-r--r--boost/boost/mpl/remove.hpp52
-rw-r--r--boost/boost/mpl/remove_if.hpp83
-rw-r--r--boost/boost/mpl/replace.hpp55
-rw-r--r--boost/boost/mpl/replace_if.hpp88
-rw-r--r--boost/boost/mpl/reverse.hpp38
-rw-r--r--boost/boost/mpl/reverse_fold.hpp50
-rw-r--r--boost/boost/mpl/reverse_iter_fold.hpp56
-rw-r--r--boost/boost/mpl/same_as.hpp55
-rw-r--r--boost/boost/mpl/sequence_tag.hpp124
-rw-r--r--boost/boost/mpl/sequence_tag_fwd.hpp26
-rw-r--r--boost/boost/mpl/set.hpp57
-rw-r--r--boost/boost/mpl/set/aux_/at_impl.hpp40
-rw-r--r--boost/boost/mpl/set/aux_/begin_end_impl.hpp43
-rw-r--r--boost/boost/mpl/set/aux_/clear_impl.hpp35
-rw-r--r--boost/boost/mpl/set/aux_/empty_impl.hpp34
-rw-r--r--boost/boost/mpl/set/aux_/erase_impl.hpp41
-rw-r--r--boost/boost/mpl/set/aux_/erase_key_impl.hpp53
-rw-r--r--boost/boost/mpl/set/aux_/has_key_impl.hpp60
-rw-r--r--boost/boost/mpl/set/aux_/include_preprocessed.hpp42
-rw-r--r--boost/boost/mpl/set/aux_/insert_impl.hpp65
-rw-r--r--boost/boost/mpl/set/aux_/item.hpp82
-rw-r--r--boost/boost/mpl/set/aux_/iterator.hpp97
-rw-r--r--boost/boost/mpl/set/aux_/key_type_impl.hpp34
-rw-r--r--boost/boost/mpl/set/aux_/numbered.hpp48
-rw-r--r--boost/boost/mpl/set/aux_/numbered_c.hpp48
-rw-r--r--boost/boost/mpl/set/aux_/preprocessed/plain/set10.hpp140
-rw-r--r--boost/boost/mpl/set/aux_/preprocessed/plain/set10_c.hpp145
-rw-r--r--boost/boost/mpl/set/aux_/preprocessed/plain/set20.hpp168
-rw-r--r--boost/boost/mpl/set/aux_/preprocessed/plain/set20_c.hpp154
-rw-r--r--boost/boost/mpl/set/aux_/preprocessed/plain/set30.hpp195
-rw-r--r--boost/boost/mpl/set/aux_/preprocessed/plain/set30_c.hpp164
-rw-r--r--boost/boost/mpl/set/aux_/preprocessed/plain/set40.hpp221
-rw-r--r--boost/boost/mpl/set/aux_/preprocessed/plain/set40_c.hpp174
-rw-r--r--boost/boost/mpl/set/aux_/preprocessed/plain/set50.hpp250
-rw-r--r--boost/boost/mpl/set/aux_/preprocessed/plain/set50_c.hpp184
-rw-r--r--boost/boost/mpl/set/aux_/set0.hpp69
-rw-r--r--boost/boost/mpl/set/aux_/size_impl.hpp33
-rw-r--r--boost/boost/mpl/set/aux_/tag.hpp24
-rw-r--r--boost/boost/mpl/set/aux_/value_type_impl.hpp34
-rw-r--r--boost/boost/mpl/set/set0.hpp35
-rw-r--r--boost/boost/mpl/set/set0_c.hpp32
-rw-r--r--boost/boost/mpl/set/set10.hpp44
-rw-r--r--boost/boost/mpl/set/set10_c.hpp45
-rw-r--r--boost/boost/mpl/set/set20.hpp44
-rw-r--r--boost/boost/mpl/set/set20_c.hpp45
-rw-r--r--boost/boost/mpl/set/set30.hpp44
-rw-r--r--boost/boost/mpl/set/set30_c.hpp45
-rw-r--r--boost/boost/mpl/set/set40.hpp44
-rw-r--r--boost/boost/mpl/set/set40_c.hpp45
-rw-r--r--boost/boost/mpl/set/set50.hpp44
-rw-r--r--boost/boost/mpl/set/set50_c.hpp45
-rw-r--r--boost/boost/mpl/set_c.hpp60
-rw-r--r--boost/boost/mpl/shift_left.hpp22
-rw-r--r--boost/boost/mpl/shift_right.hpp22
-rw-r--r--boost/boost/mpl/single_view.hpp38
-rw-r--r--boost/boost/mpl/size.hpp42
-rw-r--r--boost/boost/mpl/size_fwd.hpp24
-rw-r--r--boost/boost/mpl/size_t.hpp25
-rw-r--r--boost/boost/mpl/size_t_fwd.hpp28
-rw-r--r--boost/boost/mpl/sizeof.hpp36
-rw-r--r--boost/boost/mpl/sort.hpp27
-rw-r--r--boost/boost/mpl/stable_partition.hpp75
-rw-r--r--boost/boost/mpl/switch.hpp49
-rw-r--r--boost/boost/mpl/tag.hpp52
-rw-r--r--boost/boost/mpl/times.hpp21
-rw-r--r--boost/boost/mpl/transform.hpp145
-rw-r--r--boost/boost/mpl/transform_view.hpp46
-rw-r--r--boost/boost/mpl/unique.hpp85
-rw-r--r--boost/boost/mpl/unpack_args.hpp146
-rw-r--r--boost/boost/mpl/upper_bound.hpp141
-rw-r--r--boost/boost/mpl/value_type.hpp42
-rw-r--r--boost/boost/mpl/value_type_fwd.hpp25
-rw-r--r--boost/boost/mpl/vector.hpp57
-rw-r--r--boost/boost/mpl/vector/aux_/O1_size.hpp56
-rw-r--r--boost/boost/mpl/vector/aux_/at.hpp116
-rw-r--r--boost/boost/mpl/vector/aux_/back.hpp59
-rw-r--r--boost/boost/mpl/vector/aux_/begin_end.hpp49
-rw-r--r--boost/boost/mpl/vector/aux_/clear.hpp55
-rw-r--r--boost/boost/mpl/vector/aux_/empty.hpp68
-rw-r--r--boost/boost/mpl/vector/aux_/front.hpp56
-rw-r--r--boost/boost/mpl/vector/aux_/include_preprocessed.hpp55
-rw-r--r--boost/boost/mpl/vector/aux_/item.hpp103
-rw-r--r--boost/boost/mpl/vector/aux_/iterator.hpp130
-rw-r--r--boost/boost/mpl/vector/aux_/numbered.hpp218
-rw-r--r--boost/boost/mpl/vector/aux_/numbered_c.hpp77
-rw-r--r--boost/boost/mpl/vector/aux_/pop_back.hpp40
-rw-r--r--boost/boost/mpl/vector/aux_/pop_front.hpp40
-rw-r--r--boost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector10.hpp1528
-rw-r--r--boost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector10_c.hpp149
-rw-r--r--boost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector20.hpp1804
-rw-r--r--boost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector20_c.hpp195
-rw-r--r--boost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector30.hpp2124
-rw-r--r--boost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector30_c.hpp238
-rw-r--r--boost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector40.hpp2444
-rw-r--r--boost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector40_c.hpp281
-rw-r--r--boost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector50.hpp2764
-rw-r--r--boost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector50_c.hpp325
-rw-r--r--boost/boost/mpl/vector/aux_/preprocessed/plain/vector10.hpp829
-rw-r--r--boost/boost/mpl/vector/aux_/preprocessed/plain/vector10_c.hpp149
-rw-r--r--boost/boost/mpl/vector/aux_/preprocessed/plain/vector20.hpp1144
-rw-r--r--boost/boost/mpl/vector/aux_/preprocessed/plain/vector20_c.hpp195
-rw-r--r--boost/boost/mpl/vector/aux_/preprocessed/plain/vector30.hpp1464
-rw-r--r--boost/boost/mpl/vector/aux_/preprocessed/plain/vector30_c.hpp238
-rw-r--r--boost/boost/mpl/vector/aux_/preprocessed/plain/vector40.hpp1784
-rw-r--r--boost/boost/mpl/vector/aux_/preprocessed/plain/vector40_c.hpp281
-rw-r--r--boost/boost/mpl/vector/aux_/preprocessed/plain/vector50.hpp2104
-rw-r--r--boost/boost/mpl/vector/aux_/preprocessed/plain/vector50_c.hpp325
-rw-r--r--boost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector10.hpp139
-rw-r--r--boost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector10_c.hpp154
-rw-r--r--boost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector20.hpp159
-rw-r--r--boost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector20_c.hpp163
-rw-r--r--boost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector30.hpp179
-rw-r--r--boost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector30_c.hpp173
-rw-r--r--boost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector40.hpp199
-rw-r--r--boost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector40_c.hpp183
-rw-r--r--boost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector50.hpp219
-rw-r--r--boost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector50_c.hpp193
-rw-r--r--boost/boost/mpl/vector/aux_/push_back.hpp40
-rw-r--r--boost/boost/mpl/vector/aux_/push_front.hpp40
-rw-r--r--boost/boost/mpl/vector/aux_/size.hpp49
-rw-r--r--boost/boost/mpl/vector/aux_/tag.hpp32
-rw-r--r--boost/boost/mpl/vector/aux_/vector0.hpp52
-rw-r--r--boost/boost/mpl/vector/vector0.hpp34
-rw-r--r--boost/boost/mpl/vector/vector0_c.hpp31
-rw-r--r--boost/boost/mpl/vector/vector10.hpp45
-rw-r--r--boost/boost/mpl/vector/vector10_c.hpp46
-rw-r--r--boost/boost/mpl/vector/vector20.hpp45
-rw-r--r--boost/boost/mpl/vector/vector20_c.hpp46
-rw-r--r--boost/boost/mpl/vector/vector30.hpp45
-rw-r--r--boost/boost/mpl/vector/vector30_c.hpp47
-rw-r--r--boost/boost/mpl/vector/vector40.hpp45
-rw-r--r--boost/boost/mpl/vector/vector40_c.hpp46
-rw-r--r--boost/boost/mpl/vector/vector50.hpp45
-rw-r--r--boost/boost/mpl/vector/vector50_c.hpp46
-rw-r--r--boost/boost/mpl/vector_c.hpp60
-rw-r--r--boost/boost/mpl/void.hpp76
-rw-r--r--boost/boost/mpl/void_fwd.hpp26
-rw-r--r--boost/boost/mpl/zip_view.hpp64
-rw-r--r--boost/boost/multi_array.hpp499
-rw-r--r--boost/boost/multi_array/algorithm.hpp103
-rw-r--r--boost/boost/multi_array/base.hpp479
-rw-r--r--boost/boost/multi_array/collection_concept.hpp62
-rw-r--r--boost/boost/multi_array/concept_checks.hpp214
-rw-r--r--boost/boost/multi_array/copy_array.hpp68
-rw-r--r--boost/boost/multi_array/extent_gen.hpp75
-rw-r--r--boost/boost/multi_array/extent_range.hpp49
-rw-r--r--boost/boost/multi_array/index_gen.hpp81
-rw-r--r--boost/boost/multi_array/index_range.hpp188
-rw-r--r--boost/boost/multi_array/iterator.hpp170
-rw-r--r--boost/boost/multi_array/multi_array_ref.hpp633
-rw-r--r--boost/boost/multi_array/range_list.hpp70
-rw-r--r--boost/boost/multi_array/storage_order.hpp125
-rw-r--r--boost/boost/multi_array/subarray.hpp398
-rw-r--r--boost/boost/multi_array/types.hpp38
-rw-r--r--boost/boost/multi_array/view.hpp474
-rw-r--r--boost/boost/multi_index/composite_key.hpp1315
-rw-r--r--boost/boost/multi_index/detail/access_specifier.hpp55
-rw-r--r--boost/boost/multi_index/detail/archive_constructed.hpp79
-rw-r--r--boost/boost/multi_index/detail/auto_space.hpp85
-rw-r--r--boost/boost/multi_index/detail/base_type.hpp87
-rw-r--r--boost/boost/multi_index/detail/bidir_node_iterator.hpp111
-rw-r--r--boost/boost/multi_index/detail/bucket_array.hpp198
-rw-r--r--boost/boost/multi_index/detail/converter.hpp52
-rw-r--r--boost/boost/multi_index/detail/copy_map.hpp133
-rw-r--r--boost/boost/multi_index/detail/def_ctor_tuple_cons.hpp59
-rw-r--r--boost/boost/multi_index/detail/duplicates_iterator.hpp120
-rw-r--r--boost/boost/multi_index/detail/has_tag.hpp42
-rw-r--r--boost/boost/multi_index/detail/hash_index_args.hpp107
-rw-r--r--boost/boost/multi_index/detail/hash_index_iterator.hpp109
-rw-r--r--boost/boost/multi_index/detail/hash_index_node.hpp117
-rw-r--r--boost/boost/multi_index/detail/header_holder.hpp50
-rw-r--r--boost/boost/multi_index/detail/index_base.hpp179
-rw-r--r--boost/boost/multi_index/detail/index_loader.hpp138
-rw-r--r--boost/boost/multi_index/detail/index_matcher.hpp248
-rw-r--r--boost/boost/multi_index/detail/index_node_base.hpp132
-rw-r--r--boost/boost/multi_index/detail/index_saver.hpp135
-rw-r--r--boost/boost/multi_index/detail/invariant_assert.hpp21
-rw-r--r--boost/boost/multi_index/detail/is_index_list.hpp40
-rw-r--r--boost/boost/multi_index/detail/iter_adaptor.hpp273
-rw-r--r--boost/boost/multi_index/detail/modify_key_adaptor.hpp49
-rw-r--r--boost/boost/multi_index/detail/msvc_index_specifier.hpp69
-rw-r--r--boost/boost/multi_index/detail/no_duplicate_tags.hpp97
-rw-r--r--boost/boost/multi_index/detail/node_type.hpp79
-rw-r--r--boost/boost/multi_index/detail/ord_index_args.hpp83
-rw-r--r--boost/boost/multi_index/detail/ord_index_node.hpp580
-rw-r--r--boost/boost/multi_index/detail/ord_index_ops.hpp125
-rw-r--r--boost/boost/multi_index/detail/prevent_eti.hpp60
-rw-r--r--boost/boost/multi_index/detail/rnd_index_loader.hpp163
-rw-r--r--boost/boost/multi_index/detail/rnd_index_node.hpp240
-rw-r--r--boost/boost/multi_index/detail/rnd_index_ops.hpp200
-rw-r--r--boost/boost/multi_index/detail/rnd_index_ptr_array.hpp125
-rw-r--r--boost/boost/multi_index/detail/rnd_node_iterator.hpp133
-rw-r--r--boost/boost/multi_index/detail/safe_ctr_proxy.hpp105
-rw-r--r--boost/boost/multi_index/detail/safe_mode.hpp568
-rw-r--r--boost/boost/multi_index/detail/scope_guard.hpp277
-rw-r--r--boost/boost/multi_index/detail/seq_index_node.hpp175
-rw-r--r--boost/boost/multi_index/detail/seq_index_ops.hpp185
-rw-r--r--boost/boost/multi_index/detail/uintptr_type.hpp69
-rw-r--r--boost/boost/multi_index/detail/unbounded.hpp52
-rw-r--r--boost/boost/multi_index/detail/value_compare.hpp52
-rw-r--r--boost/boost/multi_index/hashed_index.hpp1075
-rw-r--r--boost/boost/multi_index/hashed_index_fwd.hpp58
-rw-r--r--boost/boost/multi_index/identity.hpp147
-rw-r--r--boost/boost/multi_index/identity_fwd.hpp26
-rw-r--r--boost/boost/multi_index/indexed_by.hpp72
-rw-r--r--boost/boost/multi_index/key_extractors.hpp21
-rw-r--r--boost/boost/multi_index/mem_fun.hpp222
-rw-r--r--boost/boost/multi_index/member.hpp269
-rw-r--r--boost/boost/multi_index/ordered_index.hpp1239
-rw-r--r--boost/boost/multi_index/ordered_index_fwd.hpp124
-rw-r--r--boost/boost/multi_index/random_access_index.hpp920
-rw-r--r--boost/boost/multi_index/random_access_index_fwd.hpp91
-rw-r--r--boost/boost/multi_index/safe_mode_errors.hpp48
-rw-r--r--boost/boost/multi_index/sequenced_index.hpp839
-rw-r--r--boost/boost/multi_index/sequenced_index_fwd.hpp91
-rw-r--r--boost/boost/multi_index/tag.hpp92
-rw-r--r--boost/boost/multi_index_container.hpp1027
-rw-r--r--boost/boost/multi_index_container_fwd.hpp121
-rw-r--r--boost/boost/next_prior.hpp51
-rw-r--r--boost/boost/non_type.hpp27
-rw-r--r--boost/boost/noncopyable.hpp36
-rw-r--r--boost/boost/nondet_random.hpp64
-rw-r--r--boost/boost/none.hpp43
-rw-r--r--boost/boost/numeric/conversion/bounds.hpp24
-rw-r--r--boost/boost/numeric/conversion/cast.hpp51
-rw-r--r--boost/boost/numeric/conversion/conversion_traits.hpp39
-rw-r--r--boost/boost/numeric/conversion/converter.hpp68
-rw-r--r--boost/boost/numeric/conversion/converter_policies.hpp186
-rw-r--r--boost/boost/numeric/conversion/detail/bounds.hpp58
-rw-r--r--boost/boost/numeric/conversion/detail/conversion_traits.hpp97
-rw-r--r--boost/boost/numeric/conversion/detail/converter.hpp602
-rw-r--r--boost/boost/numeric/conversion/detail/int_float_mixture.hpp72
-rw-r--r--boost/boost/numeric/conversion/detail/is_subranged.hpp234
-rw-r--r--boost/boost/numeric/conversion/detail/meta.hpp120
-rw-r--r--boost/boost/numeric/conversion/detail/old_numeric_cast.hpp339
-rw-r--r--boost/boost/numeric/conversion/detail/sign_mixture.hpp72
-rw-r--r--boost/boost/numeric/conversion/detail/udt_builtin_mixture.hpp69
-rw-r--r--boost/boost/numeric/conversion/int_float_mixture.hpp30
-rw-r--r--boost/boost/numeric/conversion/int_float_mixture_enum.hpp29
-rw-r--r--boost/boost/numeric/conversion/is_subranged.hpp27
-rw-r--r--boost/boost/numeric/conversion/sign_mixture.hpp30
-rw-r--r--boost/boost/numeric/conversion/sign_mixture_enum.hpp29
-rw-r--r--boost/boost/numeric/conversion/udt_builtin_mixture.hpp28
-rw-r--r--boost/boost/numeric/conversion/udt_builtin_mixture_enum.hpp26
-rw-r--r--boost/boost/numeric/interval.hpp32
-rw-r--r--boost/boost/numeric/interval/arith.hpp305
-rw-r--r--boost/boost/numeric/interval/arith2.hpp227
-rw-r--r--boost/boost/numeric/interval/arith3.hpp69
-rw-r--r--boost/boost/numeric/interval/checking.hpp130
-rw-r--r--boost/boost/numeric/interval/compare.hpp19
-rw-r--r--boost/boost/numeric/interval/compare/certain.hpp113
-rw-r--r--boost/boost/numeric/interval/compare/explicit.hpp248
-rw-r--r--boost/boost/numeric/interval/compare/lexicographic.hpp122
-rw-r--r--boost/boost/numeric/interval/compare/possible.hpp113
-rw-r--r--boost/boost/numeric/interval/compare/set.hpp101
-rw-r--r--boost/boost/numeric/interval/compare/tribool.hpp138
-rw-r--r--boost/boost/numeric/interval/constants.hpp85
-rw-r--r--boost/boost/numeric/interval/detail/alpha_rounding_control.hpp114
-rw-r--r--boost/boost/numeric/interval/detail/bcc_rounding_control.hpp57
-rw-r--r--boost/boost/numeric/interval/detail/bugs.hpp79
-rw-r--r--boost/boost/numeric/interval/detail/c99_rounding_control.hpp47
-rw-r--r--boost/boost/numeric/interval/detail/c99sub_rounding_control.hpp43
-rw-r--r--boost/boost/numeric/interval/detail/division.hpp194
-rw-r--r--boost/boost/numeric/interval/detail/ia64_rounding_control.hpp83
-rw-r--r--boost/boost/numeric/interval/detail/interval_prototype.hpp41
-rw-r--r--boost/boost/numeric/interval/detail/msvc_rounding_control.hpp91
-rw-r--r--boost/boost/numeric/interval/detail/ppc_rounding_control.hpp99
-rw-r--r--boost/boost/numeric/interval/detail/sparc_rounding_control.hpp112
-rw-r--r--boost/boost/numeric/interval/detail/test_input.hpp76
-rw-r--r--boost/boost/numeric/interval/detail/x86_rounding_control.hpp108
-rw-r--r--boost/boost/numeric/interval/detail/x86gcc_rounding_control.hpp51
-rw-r--r--boost/boost/numeric/interval/ext/integer.hpp70
-rw-r--r--boost/boost/numeric/interval/ext/x86_fast_rounding_control.hpp70
-rw-r--r--boost/boost/numeric/interval/hw_rounding.hpp68
-rw-r--r--boost/boost/numeric/interval/interval.hpp450
-rw-r--r--boost/boost/numeric/interval/io.hpp41
-rw-r--r--boost/boost/numeric/interval/limits.hpp51
-rw-r--r--boost/boost/numeric/interval/policies.hpp75
-rw-r--r--boost/boost/numeric/interval/rounded_arith.hpp120
-rw-r--r--boost/boost/numeric/interval/rounded_transc.hpp140
-rw-r--r--boost/boost/numeric/interval/rounding.hpp101
-rw-r--r--boost/boost/numeric/interval/transc.hpp232
-rw-r--r--boost/boost/numeric/interval/utility.hpp337
-rw-r--r--boost/boost/numeric/ublas/banded.hpp2025
-rw-r--r--boost/boost/numeric/ublas/blas.hpp300
-rw-r--r--boost/boost/numeric/ublas/detail/concepts.hpp1494
-rw-r--r--boost/boost/numeric/ublas/detail/config.hpp294
-rw-r--r--boost/boost/numeric/ublas/detail/definitions.hpp216
-rw-r--r--boost/boost/numeric/ublas/detail/documentation.hpp37
-rw-r--r--boost/boost/numeric/ublas/detail/duff.hpp60
-rw-r--r--boost/boost/numeric/ublas/detail/iterator.hpp1440
-rw-r--r--boost/boost/numeric/ublas/detail/matrix_assign.hpp1632
-rw-r--r--boost/boost/numeric/ublas/detail/raw.hpp882
-rw-r--r--boost/boost/numeric/ublas/detail/returntype_deduction.hpp174
-rw-r--r--boost/boost/numeric/ublas/detail/temporary.hpp37
-rw-r--r--boost/boost/numeric/ublas/detail/vector_assign.hpp571
-rw-r--r--boost/boost/numeric/ublas/exception.hpp293
-rw-r--r--boost/boost/numeric/ublas/expression_types.hpp492
-rw-r--r--boost/boost/numeric/ublas/functional.hpp2087
-rw-r--r--boost/boost/numeric/ublas/fwd.hpp216
-rw-r--r--boost/boost/numeric/ublas/hermitian.hpp2434
-rw-r--r--boost/boost/numeric/ublas/io.hpp252
-rw-r--r--boost/boost/numeric/ublas/lu.hpp342
-rw-r--r--boost/boost/numeric/ublas/matrix.hpp4045
-rw-r--r--boost/boost/numeric/ublas/matrix_expression.hpp4952
-rw-r--r--boost/boost/numeric/ublas/matrix_proxy.hpp5097
-rw-r--r--boost/boost/numeric/ublas/matrix_sparse.hpp5205
-rw-r--r--boost/boost/numeric/ublas/operation.hpp855
-rw-r--r--boost/boost/numeric/ublas/operation_blocked.hpp268
-rw-r--r--boost/boost/numeric/ublas/operation_sparse.hpp220
-rw-r--r--boost/boost/numeric/ublas/storage.hpp1860
-rw-r--r--boost/boost/numeric/ublas/storage_sparse.hpp542
-rw-r--r--boost/boost/numeric/ublas/symmetric.hpp2133
-rw-r--r--boost/boost/numeric/ublas/traits.hpp537
-rw-r--r--boost/boost/numeric/ublas/triangular.hpp2543
-rw-r--r--boost/boost/numeric/ublas/vector.hpp1683
-rw-r--r--boost/boost/numeric/ublas/vector_expression.hpp1672
-rw-r--r--boost/boost/numeric/ublas/vector_of_vector.hpp1231
-rw-r--r--boost/boost/numeric/ublas/vector_proxy.hpp1570
-rw-r--r--boost/boost/numeric/ublas/vector_sparse.hpp2009
-rw-r--r--boost/boost/operators.hpp943
-rw-r--r--boost/boost/optional.hpp18
-rw-r--r--boost/boost/optional/optional.hpp922
-rw-r--r--boost/boost/optional/optional_fwd.hpp22
-rw-r--r--boost/boost/optional/optional_io.hpp84
-rw-r--r--boost/boost/parameter.hpp19
-rw-r--r--boost/boost/parameter/aux_/arg_list.hpp467
-rw-r--r--boost/boost/parameter/aux_/cast.hpp129
-rw-r--r--boost/boost/parameter/aux_/default.hpp67
-rw-r--r--boost/boost/parameter/aux_/maybe.hpp98
-rw-r--r--boost/boost/parameter/aux_/overloads.hpp88
-rw-r--r--boost/boost/parameter/aux_/parameter_requirements.hpp25
-rw-r--r--boost/boost/parameter/aux_/parenthesized_type.hpp119
-rw-r--r--boost/boost/parameter/aux_/preprocessor/flatten.hpp115
-rw-r--r--boost/boost/parameter/aux_/preprocessor/for_each.hpp103
-rw-r--r--boost/boost/parameter/aux_/python/invoker.hpp131
-rw-r--r--boost/boost/parameter/aux_/python/invoker_iterate.hpp93
-rw-r--r--boost/boost/parameter/aux_/result_of0.hpp36
-rw-r--r--boost/boost/parameter/aux_/set.hpp65
-rw-r--r--boost/boost/parameter/aux_/tag.hpp38
-rw-r--r--boost/boost/parameter/aux_/tagged_argument.hpp187
-rw-r--r--boost/boost/parameter/aux_/template_keyword.hpp47
-rw-r--r--boost/boost/parameter/aux_/unwrap_cv_reference.hpp97
-rw-r--r--boost/boost/parameter/aux_/void.hpp29
-rw-r--r--boost/boost/parameter/aux_/yesno.hpp26
-rw-r--r--boost/boost/parameter/binding.hpp106
-rw-r--r--boost/boost/parameter/config.hpp14
-rw-r--r--boost/boost/parameter/keyword.hpp148
-rw-r--r--boost/boost/parameter/macros.hpp98
-rw-r--r--boost/boost/parameter/match.hpp55
-rw-r--r--boost/boost/parameter/name.hpp155
-rw-r--r--boost/boost/parameter/parameters.hpp931
-rw-r--r--boost/boost/parameter/preprocessor.hpp1169
-rw-r--r--boost/boost/parameter/python.hpp735
-rw-r--r--boost/boost/parameter/value_type.hpp108
-rw-r--r--boost/boost/pending/bucket_sorter.hpp134
-rw-r--r--boost/boost/pending/container_traits.hpp413
-rw-r--r--boost/boost/pending/cstddef.hpp16
-rw-r--r--boost/boost/pending/ct_if.hpp111
-rw-r--r--boost/boost/pending/detail/disjoint_sets.hpp88
-rw-r--r--boost/boost/pending/detail/int_iterator.hpp74
-rw-r--r--boost/boost/pending/detail/property.hpp160
-rw-r--r--boost/boost/pending/disjoint_sets.hpp220
-rw-r--r--boost/boost/pending/fenced_priority_queue.hpp152
-rw-r--r--boost/boost/pending/fibonacci_heap.hpp268
-rw-r--r--boost/boost/pending/indirect_cmp.hpp86
-rw-r--r--boost/boost/pending/integer_log2.hpp113
-rw-r--r--boost/boost/pending/integer_range.hpp59
-rw-r--r--boost/boost/pending/is_heap.hpp62
-rw-r--r--boost/boost/pending/iterator_adaptors.hpp6
-rw-r--r--boost/boost/pending/iterator_tests.hpp268
-rw-r--r--boost/boost/pending/lowest_bit.hpp39
-rw-r--r--boost/boost/pending/mutable_heap.hpp64
-rw-r--r--boost/boost/pending/mutable_queue.hpp135
-rw-r--r--boost/boost/pending/property.hpp132
-rw-r--r--boost/boost/pending/property_serialize.hpp28
-rw-r--r--boost/boost/pending/queue.hpp118
-rw-r--r--boost/boost/pending/relaxed_heap.hpp642
-rw-r--r--boost/boost/pending/stringtok.hpp111
-rw-r--r--boost/boost/pfto.hpp74
-rw-r--r--boost/boost/pointee.hpp74
-rw-r--r--boost/boost/pointer_cast.hpp45
-rw-r--r--boost/boost/pointer_to_other.hpp55
-rw-r--r--boost/boost/pool/detail/ct_gcd_lcm.hpp104
-rw-r--r--boost/boost/pool/detail/for.m4107
-rw-r--r--boost/boost/pool/detail/gcd_lcm.hpp58
-rw-r--r--boost/boost/pool/detail/guard.hpp40
-rw-r--r--boost/boost/pool/detail/mutex.hpp145
-rw-r--r--boost/boost/pool/detail/pool_construct.bat24
-rw-r--r--boost/boost/pool/detail/pool_construct.inc853
-rw-r--r--boost/boost/pool/detail/pool_construct.m484
-rw-r--r--boost/boost/pool/detail/pool_construct.sh11
-rw-r--r--boost/boost/pool/detail/pool_construct_simple.bat25
-rw-r--r--boost/boost/pool/detail/pool_construct_simple.inc43
-rw-r--r--boost/boost/pool/detail/pool_construct_simple.m473
-rw-r--r--boost/boost/pool/detail/pool_construct_simple.sh11
-rw-r--r--boost/boost/pool/detail/singleton.hpp107
-rw-r--r--boost/boost/pool/object_pool.hpp157
-rw-r--r--boost/boost/pool/pool.hpp580
-rw-r--r--boost/boost/pool/pool_alloc.hpp221
-rw-r--r--boost/boost/pool/poolfwd.hpp73
-rw-r--r--boost/boost/pool/simple_segregated_storage.hpp265
-rw-r--r--boost/boost/pool/singleton_pool.hpp119
-rw-r--r--boost/boost/preprocessor.hpp19
-rw-r--r--boost/boost/preprocessor/arithmetic.hpp25
-rw-r--r--boost/boost/preprocessor/arithmetic/add.hpp51
-rw-r--r--boost/boost/preprocessor/arithmetic/dec.hpp288
-rw-r--r--boost/boost/preprocessor/arithmetic/detail/div_base.hpp61
-rw-r--r--boost/boost/preprocessor/arithmetic/div.hpp39
-rw-r--r--boost/boost/preprocessor/arithmetic/inc.hpp288
-rw-r--r--boost/boost/preprocessor/arithmetic/mod.hpp39
-rw-r--r--boost/boost/preprocessor/arithmetic/mul.hpp53
-rw-r--r--boost/boost/preprocessor/arithmetic/sub.hpp50
-rw-r--r--boost/boost/preprocessor/array.hpp27
-rw-r--r--boost/boost/preprocessor/array/data.hpp28
-rw-r--r--boost/boost/preprocessor/array/elem.hpp29
-rw-r--r--boost/boost/preprocessor/array/insert.hpp55
-rw-r--r--boost/boost/preprocessor/array/pop_back.hpp37
-rw-r--r--boost/boost/preprocessor/array/pop_front.hpp38
-rw-r--r--boost/boost/preprocessor/array/push_back.hpp33
-rw-r--r--boost/boost/preprocessor/array/push_front.hpp33
-rw-r--r--boost/boost/preprocessor/array/remove.hpp54
-rw-r--r--boost/boost/preprocessor/array/replace.hpp49
-rw-r--r--boost/boost/preprocessor/array/reverse.hpp29
-rw-r--r--boost/boost/preprocessor/array/size.hpp28
-rw-r--r--boost/boost/preprocessor/assert_msg.hpp17
-rw-r--r--boost/boost/preprocessor/cat.hpp35
-rw-r--r--boost/boost/preprocessor/comma.hpp17
-rw-r--r--boost/boost/preprocessor/comma_if.hpp17
-rw-r--r--boost/boost/preprocessor/comparison.hpp24
-rw-r--r--boost/boost/preprocessor/comparison/equal.hpp34
-rw-r--r--boost/boost/preprocessor/comparison/greater.hpp38
-rw-r--r--boost/boost/preprocessor/comparison/greater_equal.hpp38
-rw-r--r--boost/boost/preprocessor/comparison/less.hpp46
-rw-r--r--boost/boost/preprocessor/comparison/less_equal.hpp39
-rw-r--r--boost/boost/preprocessor/comparison/not_equal.hpp814
-rw-r--r--boost/boost/preprocessor/config/config.hpp70
-rw-r--r--boost/boost/preprocessor/config/limits.hpp29
-rw-r--r--boost/boost/preprocessor/control.hpp22
-rw-r--r--boost/boost/preprocessor/control/deduce_d.hpp22
-rw-r--r--boost/boost/preprocessor/control/detail/dmc/while.hpp536
-rw-r--r--boost/boost/preprocessor/control/detail/edg/while.hpp534
-rw-r--r--boost/boost/preprocessor/control/detail/msvc/while.hpp277
-rw-r--r--boost/boost/preprocessor/control/detail/while.hpp536
-rw-r--r--boost/boost/preprocessor/control/expr_if.hpp30
-rw-r--r--boost/boost/preprocessor/control/expr_iif.hpp31
-rw-r--r--boost/boost/preprocessor/control/if.hpp30
-rw-r--r--boost/boost/preprocessor/control/iif.hpp34
-rw-r--r--boost/boost/preprocessor/control/while.hpp312
-rw-r--r--boost/boost/preprocessor/debug.hpp18
-rw-r--r--boost/boost/preprocessor/debug/assert.hpp44
-rw-r--r--boost/boost/preprocessor/debug/error.hpp33
-rw-r--r--boost/boost/preprocessor/debug/line.hpp35
-rw-r--r--boost/boost/preprocessor/dec.hpp17
-rw-r--r--boost/boost/preprocessor/detail/auto_rec.hpp293
-rw-r--r--boost/boost/preprocessor/detail/check.hpp48
-rw-r--r--boost/boost/preprocessor/detail/dmc/auto_rec.hpp286
-rw-r--r--boost/boost/preprocessor/detail/is_binary.hpp30
-rw-r--r--boost/boost/preprocessor/detail/is_nullary.hpp30
-rw-r--r--boost/boost/preprocessor/detail/is_unary.hpp30
-rw-r--r--boost/boost/preprocessor/detail/null.hpp17
-rw-r--r--boost/boost/preprocessor/detail/split.hpp35
-rw-r--r--boost/boost/preprocessor/empty.hpp17
-rw-r--r--boost/boost/preprocessor/enum.hpp17
-rw-r--r--boost/boost/preprocessor/enum_params.hpp17
-rw-r--r--boost/boost/preprocessor/enum_params_with_a_default.hpp17
-rw-r--r--boost/boost/preprocessor/enum_params_with_defaults.hpp17
-rw-r--r--boost/boost/preprocessor/enum_shifted.hpp17
-rw-r--r--boost/boost/preprocessor/enum_shifted_params.hpp17
-rw-r--r--boost/boost/preprocessor/expand.hpp17
-rw-r--r--boost/boost/preprocessor/expr_if.hpp17
-rw-r--r--boost/boost/preprocessor/facilities.hpp21
-rw-r--r--boost/boost/preprocessor/facilities/apply.hpp34
-rw-r--r--boost/boost/preprocessor/facilities/empty.hpp21
-rw-r--r--boost/boost/preprocessor/facilities/expand.hpp28
-rw-r--r--boost/boost/preprocessor/facilities/identity.hpp23
-rw-r--r--boost/boost/preprocessor/facilities/intercept.hpp277
-rw-r--r--boost/boost/preprocessor/facilities/is_1.hpp23
-rw-r--r--boost/boost/preprocessor/facilities/is_empty.hpp43
-rw-r--r--boost/boost/preprocessor/facilities/is_empty_or_1.hpp30
-rw-r--r--boost/boost/preprocessor/for.hpp17
-rw-r--r--boost/boost/preprocessor/identity.hpp17
-rw-r--r--boost/boost/preprocessor/if.hpp17
-rw-r--r--boost/boost/preprocessor/inc.hpp17
-rw-r--r--boost/boost/preprocessor/iterate.hpp17
-rw-r--r--boost/boost/preprocessor/iteration.hpp19
-rw-r--r--boost/boost/preprocessor/iteration/detail/bounds/lower1.hpp99
-rw-r--r--boost/boost/preprocessor/iteration/detail/bounds/lower2.hpp99
-rw-r--r--boost/boost/preprocessor/iteration/detail/bounds/lower3.hpp99
-rw-r--r--boost/boost/preprocessor/iteration/detail/bounds/lower4.hpp99
-rw-r--r--boost/boost/preprocessor/iteration/detail/bounds/lower5.hpp99
-rw-r--r--boost/boost/preprocessor/iteration/detail/bounds/upper1.hpp99
-rw-r--r--boost/boost/preprocessor/iteration/detail/bounds/upper2.hpp99
-rw-r--r--boost/boost/preprocessor/iteration/detail/bounds/upper3.hpp99
-rw-r--r--boost/boost/preprocessor/iteration/detail/bounds/upper4.hpp99
-rw-r--r--boost/boost/preprocessor/iteration/detail/bounds/upper5.hpp99
-rw-r--r--boost/boost/preprocessor/iteration/detail/finish.hpp99
-rw-r--r--boost/boost/preprocessor/iteration/detail/iter/forward1.hpp1342
-rw-r--r--boost/boost/preprocessor/iteration/detail/iter/forward2.hpp1338
-rw-r--r--boost/boost/preprocessor/iteration/detail/iter/forward3.hpp1338
-rw-r--r--boost/boost/preprocessor/iteration/detail/iter/forward4.hpp1338
-rw-r--r--boost/boost/preprocessor/iteration/detail/iter/forward5.hpp1338
-rw-r--r--boost/boost/preprocessor/iteration/detail/iter/reverse1.hpp1296
-rw-r--r--boost/boost/preprocessor/iteration/detail/iter/reverse2.hpp1296
-rw-r--r--boost/boost/preprocessor/iteration/detail/iter/reverse3.hpp1296
-rw-r--r--boost/boost/preprocessor/iteration/detail/iter/reverse4.hpp1296
-rw-r--r--boost/boost/preprocessor/iteration/detail/iter/reverse5.hpp1296
-rw-r--r--boost/boost/preprocessor/iteration/detail/local.hpp812
-rw-r--r--boost/boost/preprocessor/iteration/detail/rlocal.hpp782
-rw-r--r--boost/boost/preprocessor/iteration/detail/self.hpp21
-rw-r--r--boost/boost/preprocessor/iteration/detail/start.hpp99
-rw-r--r--boost/boost/preprocessor/iteration/iterate.hpp82
-rw-r--r--boost/boost/preprocessor/iteration/local.hpp26
-rw-r--r--boost/boost/preprocessor/iteration/self.hpp19
-rw-r--r--boost/boost/preprocessor/library.hpp34
-rw-r--r--boost/boost/preprocessor/limits.hpp17
-rw-r--r--boost/boost/preprocessor/list.hpp35
-rw-r--r--boost/boost/preprocessor/list/adt.hpp73
-rw-r--r--boost/boost/preprocessor/list/append.hpp40
-rw-r--r--boost/boost/preprocessor/list/at.hpp39
-rw-r--r--boost/boost/preprocessor/list/cat.hpp42
-rw-r--r--boost/boost/preprocessor/list/detail/dmc/fold_left.hpp279
-rw-r--r--boost/boost/preprocessor/list/detail/edg/fold_left.hpp536
-rw-r--r--boost/boost/preprocessor/list/detail/edg/fold_right.hpp794
-rw-r--r--boost/boost/preprocessor/list/detail/fold_left.hpp279
-rw-r--r--boost/boost/preprocessor/list/detail/fold_right.hpp277
-rw-r--r--boost/boost/preprocessor/list/enum.hpp41
-rw-r--r--boost/boost/preprocessor/list/filter.hpp54
-rw-r--r--boost/boost/preprocessor/list/first_n.hpp58
-rw-r--r--boost/boost/preprocessor/list/fold_left.hpp303
-rw-r--r--boost/boost/preprocessor/list/fold_right.hpp40
-rw-r--r--boost/boost/preprocessor/list/for_each.hpp49
-rw-r--r--boost/boost/preprocessor/list/for_each_i.hpp65
-rw-r--r--boost/boost/preprocessor/list/for_each_product.hpp141
-rw-r--r--boost/boost/preprocessor/list/rest_n.hpp55
-rw-r--r--boost/boost/preprocessor/list/reverse.hpp40
-rw-r--r--boost/boost/preprocessor/list/size.hpp58
-rw-r--r--boost/boost/preprocessor/list/to_tuple.hpp38
-rw-r--r--boost/boost/preprocessor/list/transform.hpp49
-rw-r--r--boost/boost/preprocessor/logical.hpp29
-rw-r--r--boost/boost/preprocessor/logical/and.hpp30
-rw-r--r--boost/boost/preprocessor/logical/bitand.hpp38
-rw-r--r--boost/boost/preprocessor/logical/bitnor.hpp38
-rw-r--r--boost/boost/preprocessor/logical/bitor.hpp38
-rw-r--r--boost/boost/preprocessor/logical/bitxor.hpp38
-rw-r--r--boost/boost/preprocessor/logical/bool.hpp288
-rw-r--r--boost/boost/preprocessor/logical/compl.hpp36
-rw-r--r--boost/boost/preprocessor/logical/nor.hpp30
-rw-r--r--boost/boost/preprocessor/logical/not.hpp30
-rw-r--r--boost/boost/preprocessor/logical/or.hpp30
-rw-r--r--boost/boost/preprocessor/logical/xor.hpp30
-rw-r--r--boost/boost/preprocessor/max.hpp17
-rw-r--r--boost/boost/preprocessor/min.hpp17
-rw-r--r--boost/boost/preprocessor/punctuation.hpp20
-rw-r--r--boost/boost/preprocessor/punctuation/comma.hpp21
-rw-r--r--boost/boost/preprocessor/punctuation/comma_if.hpp31
-rw-r--r--boost/boost/preprocessor/punctuation/paren.hpp23
-rw-r--r--boost/boost/preprocessor/punctuation/paren_if.hpp38
-rw-r--r--boost/boost/preprocessor/repeat.hpp17
-rw-r--r--boost/boost/preprocessor/repeat_2nd.hpp17
-rw-r--r--boost/boost/preprocessor/repeat_3rd.hpp17
-rw-r--r--boost/boost/preprocessor/repeat_from_to.hpp17
-rw-r--r--boost/boost/preprocessor/repeat_from_to_2nd.hpp17
-rw-r--r--boost/boost/preprocessor/repeat_from_to_3rd.hpp17
-rw-r--r--boost/boost/preprocessor/repetition.hpp32
-rw-r--r--boost/boost/preprocessor/repetition/deduce_r.hpp22
-rw-r--r--boost/boost/preprocessor/repetition/deduce_z.hpp22
-rw-r--r--boost/boost/preprocessor/repetition/detail/dmc/for.hpp536
-rw-r--r--boost/boost/preprocessor/repetition/detail/edg/for.hpp534
-rw-r--r--boost/boost/preprocessor/repetition/detail/for.hpp536
-rw-r--r--boost/boost/preprocessor/repetition/detail/msvc/for.hpp277
-rw-r--r--boost/boost/preprocessor/repetition/enum.hpp66
-rw-r--r--boost/boost/preprocessor/repetition/enum_binary_params.hpp54
-rw-r--r--boost/boost/preprocessor/repetition/enum_params.hpp41
-rw-r--r--boost/boost/preprocessor/repetition/enum_params_with_a_default.hpp25
-rw-r--r--boost/boost/preprocessor/repetition/enum_params_with_defaults.hpp24
-rw-r--r--boost/boost/preprocessor/repetition/enum_shifted.hpp68
-rw-r--r--boost/boost/preprocessor/repetition/enum_shifted_binary_params.hpp51
-rw-r--r--boost/boost/preprocessor/repetition/enum_shifted_params.hpp44
-rw-r--r--boost/boost/preprocessor/repetition/enum_trailing.hpp63
-rw-r--r--boost/boost/preprocessor/repetition/enum_trailing_binary_params.hpp53
-rw-r--r--boost/boost/preprocessor/repetition/enum_trailing_params.hpp38
-rw-r--r--boost/boost/preprocessor/repetition/for.hpp306
-rw-r--r--boost/boost/preprocessor/repetition/repeat.hpp825
-rw-r--r--boost/boost/preprocessor/repetition/repeat_from_to.hpp87
-rw-r--r--boost/boost/preprocessor/selection.hpp18
-rw-r--r--boost/boost/preprocessor/selection/max.hpp39
-rw-r--r--boost/boost/preprocessor/selection/min.hpp39
-rw-r--r--boost/boost/preprocessor/seq.hpp41
-rw-r--r--boost/boost/preprocessor/seq/cat.hpp48
-rw-r--r--boost/boost/preprocessor/seq/detail/split.hpp284
-rw-r--r--boost/boost/preprocessor/seq/elem.hpp304
-rw-r--r--boost/boost/preprocessor/seq/enum.hpp288
-rw-r--r--boost/boost/preprocessor/seq/filter.hpp54
-rw-r--r--boost/boost/preprocessor/seq/first_n.hpp30
-rw-r--r--boost/boost/preprocessor/seq/fold_left.hpp1070
-rw-r--r--boost/boost/preprocessor/seq/fold_right.hpp288
-rw-r--r--boost/boost/preprocessor/seq/for_each.hpp60
-rw-r--r--boost/boost/preprocessor/seq/for_each_i.hpp61
-rw-r--r--boost/boost/preprocessor/seq/for_each_product.hpp126
-rw-r--r--boost/boost/preprocessor/seq/insert.hpp28
-rw-r--r--boost/boost/preprocessor/seq/pop_back.hpp29
-rw-r--r--boost/boost/preprocessor/seq/pop_front.hpp27
-rw-r--r--boost/boost/preprocessor/seq/push_back.hpp19
-rw-r--r--boost/boost/preprocessor/seq/push_front.hpp19
-rw-r--r--boost/boost/preprocessor/seq/remove.hpp29
-rw-r--r--boost/boost/preprocessor/seq/replace.hpp29
-rw-r--r--boost/boost/preprocessor/seq/rest_n.hpp30
-rw-r--r--boost/boost/preprocessor/seq/reverse.hpp39
-rw-r--r--boost/boost/preprocessor/seq/seq.hpp44
-rw-r--r--boost/boost/preprocessor/seq/size.hpp548
-rw-r--r--boost/boost/preprocessor/seq/subseq.hpp28
-rw-r--r--boost/boost/preprocessor/seq/to_array.hpp28
-rw-r--r--boost/boost/preprocessor/seq/to_tuple.hpp27
-rw-r--r--boost/boost/preprocessor/seq/transform.hpp48
-rw-r--r--boost/boost/preprocessor/slot.hpp17
-rw-r--r--boost/boost/preprocessor/slot/counter.hpp25
-rw-r--r--boost/boost/preprocessor/slot/detail/counter.hpp269
-rw-r--r--boost/boost/preprocessor/slot/detail/def.hpp49
-rw-r--r--boost/boost/preprocessor/slot/detail/shared.hpp247
-rw-r--r--boost/boost/preprocessor/slot/detail/slot1.hpp267
-rw-r--r--boost/boost/preprocessor/slot/detail/slot2.hpp267
-rw-r--r--boost/boost/preprocessor/slot/detail/slot3.hpp267
-rw-r--r--boost/boost/preprocessor/slot/detail/slot4.hpp267
-rw-r--r--boost/boost/preprocessor/slot/detail/slot5.hpp267
-rw-r--r--boost/boost/preprocessor/slot/slot.hpp32
-rw-r--r--boost/boost/preprocessor/stringize.hpp33
-rw-r--r--boost/boost/preprocessor/tuple.hpp24
-rw-r--r--boost/boost/preprocessor/tuple/eat.hpp57
-rw-r--r--boost/boost/preprocessor/tuple/elem.hpp385
-rw-r--r--boost/boost/preprocessor/tuple/rem.hpp72
-rw-r--r--boost/boost/preprocessor/tuple/reverse.hpp62
-rw-r--r--boost/boost/preprocessor/tuple/to_list.hpp62
-rw-r--r--boost/boost/preprocessor/tuple/to_seq.hpp60
-rw-r--r--boost/boost/preprocessor/while.hpp17
-rw-r--r--boost/boost/preprocessor/wstringize.hpp29
-rw-r--r--boost/boost/program_options.hpp23
-rw-r--r--boost/boost/program_options/cmdline.hpp85
-rw-r--r--boost/boost/program_options/config.hpp55
-rw-r--r--boost/boost/program_options/detail/cmdline.hpp136
-rw-r--r--boost/boost/program_options/detail/config_file.hpp178
-rw-r--r--boost/boost/program_options/detail/convert.hpp107
-rw-r--r--boost/boost/program_options/detail/parsers.hpp144
-rw-r--r--boost/boost/program_options/detail/utf8_codecvt_facet.hpp25
-rw-r--r--boost/boost/program_options/detail/value_semantic.hpp189
-rw-r--r--boost/boost/program_options/environment_iterator.hpp51
-rw-r--r--boost/boost/program_options/eof_iterator.hpp97
-rw-r--r--boost/boost/program_options/errors.hpp146
-rw-r--r--boost/boost/program_options/option.hpp60
-rw-r--r--boost/boost/program_options/options_description.hpp241
-rw-r--r--boost/boost/program_options/parsers.hpp228
-rw-r--r--boost/boost/program_options/positional_options.hpp65
-rw-r--r--boost/boost/program_options/value_semantic.hpp356
-rw-r--r--boost/boost/program_options/variables_map.hpp195
-rw-r--r--boost/boost/program_options/version.hpp19
-rw-r--r--boost/boost/progress.hpp143
-rw-r--r--boost/boost/property_map.hpp546
-rw-r--r--boost/boost/property_map_iterator.hpp113
-rw-r--r--boost/boost/ptr_container/clone_allocator.hpp80
-rw-r--r--boost/boost/ptr_container/detail/associative_ptr_container.hpp209
-rw-r--r--boost/boost/ptr_container/detail/default_deleter.hpp69
-rw-r--r--boost/boost/ptr_container/detail/is_convertible.hpp73
-rw-r--r--boost/boost/ptr_container/detail/map_iterator.hpp87
-rw-r--r--boost/boost/ptr_container/detail/move.hpp35
-rw-r--r--boost/boost/ptr_container/detail/reversible_ptr_container.hpp672
-rw-r--r--boost/boost/ptr_container/detail/scoped_deleter.hpp115
-rw-r--r--boost/boost/ptr_container/detail/static_move_ptr.hpp212
-rw-r--r--boost/boost/ptr_container/detail/throw_exception.hpp33
-rw-r--r--boost/boost/ptr_container/detail/void_ptr_iterator.hpp227
-rw-r--r--boost/boost/ptr_container/exception.hpp58
-rw-r--r--boost/boost/ptr_container/indirect_fun.hpp133
-rw-r--r--boost/boost/ptr_container/nullable.hpp63
-rw-r--r--boost/boost/ptr_container/ptr_array.hpp239
-rw-r--r--boost/boost/ptr_container/ptr_container.hpp26
-rw-r--r--boost/boost/ptr_container/ptr_deque.hpp72
-rw-r--r--boost/boost/ptr_container/ptr_list.hpp95
-rw-r--r--boost/boost/ptr_container/ptr_map.hpp131
-rw-r--r--boost/boost/ptr_container/ptr_map_adapter.hpp682
-rw-r--r--boost/boost/ptr_container/ptr_sequence_adapter.hpp605
-rw-r--r--boost/boost/ptr_container/ptr_set.hpp134
-rw-r--r--boost/boost/ptr_container/ptr_set_adapter.hpp513
-rw-r--r--boost/boost/ptr_container/ptr_vector.hpp92
-rw-r--r--boost/boost/python.hpp73
-rw-r--r--boost/boost/python/arg_from_python.hpp76
-rw-r--r--boost/boost/python/args.hpp175
-rw-r--r--boost/boost/python/args_fwd.hpp52
-rw-r--r--boost/boost/python/back_reference.hpp102
-rw-r--r--boost/boost/python/base_type_traits.hpp43
-rw-r--r--boost/boost/python/bases.hpp68
-rw-r--r--boost/boost/python/borrowed.hpp21
-rw-r--r--boost/boost/python/call.hpp79
-rw-r--r--boost/boost/python/call_method.hpp79
-rw-r--r--boost/boost/python/cast.hpp106
-rw-r--r--boost/boost/python/class.hpp654
-rw-r--r--boost/boost/python/class_fwd.hpp24
-rw-r--r--boost/boost/python/converter/arg_from_python.hpp336
-rw-r--r--boost/boost/python/converter/arg_to_python.hpp261
-rw-r--r--boost/boost/python/converter/arg_to_python_base.hpp32
-rw-r--r--boost/boost/python/converter/as_to_python_function.hpp46
-rw-r--r--boost/boost/python/converter/builtin_converters.hpp145
-rw-r--r--boost/boost/python/converter/constructor_function.hpp17
-rw-r--r--boost/boost/python/converter/context_result_converter.hpp17
-rw-r--r--boost/boost/python/converter/convertible_function.hpp14
-rw-r--r--boost/boost/python/converter/from_python.hpp41
-rw-r--r--boost/boost/python/converter/implicit.hpp46
-rw-r--r--boost/boost/python/converter/obj_mgr_arg_from_python.hpp121
-rw-r--r--boost/boost/python/converter/object_manager.hpp230
-rw-r--r--boost/boost/python/converter/pointer_type_id.hpp68
-rw-r--r--boost/boost/python/converter/pyobject_traits.hpp41
-rw-r--r--boost/boost/python/converter/pyobject_type.hpp34
-rw-r--r--boost/boost/python/converter/pytype_object_mgr_traits.hpp42
-rw-r--r--boost/boost/python/converter/registered.hpp111
-rw-r--r--boost/boost/python/converter/registered_pointee.hpp62
-rw-r--r--boost/boost/python/converter/registrations.hpp89
-rw-r--r--boost/boost/python/converter/registry.hpp53
-rw-r--r--boost/boost/python/converter/return_from_python.hpp162
-rw-r--r--boost/boost/python/converter/rvalue_from_python_data.hpp140
-rw-r--r--boost/boost/python/converter/shared_ptr_deleter.hpp22
-rw-r--r--boost/boost/python/converter/shared_ptr_from_python.hpp52
-rw-r--r--boost/boost/python/converter/shared_ptr_to_python.hpp28
-rw-r--r--boost/boost/python/converter/to_python_function_type.hpp19
-rw-r--r--boost/boost/python/copy_const_reference.hpp43
-rw-r--r--boost/boost/python/copy_non_const_reference.hpp43
-rw-r--r--boost/boost/python/data_members.hpp316
-rw-r--r--boost/boost/python/def.hpp114
-rw-r--r--boost/boost/python/def_visitor.hpp86
-rw-r--r--boost/boost/python/default_call_policies.hpp84
-rw-r--r--boost/boost/python/detail/aix_init_module.hpp26
-rw-r--r--boost/boost/python/detail/api_placeholder.hpp15
-rw-r--r--boost/boost/python/detail/borrowed_ptr.hpp111
-rw-r--r--boost/boost/python/detail/caller.hpp220
-rw-r--r--boost/boost/python/detail/config.hpp137
-rw-r--r--boost/boost/python/detail/construct.hpp42
-rw-r--r--boost/boost/python/detail/convertible.hpp38
-rw-r--r--boost/boost/python/detail/copy_ctor_mutates_rhs.hpp21
-rw-r--r--boost/boost/python/detail/cv_category.hpp36
-rw-r--r--boost/boost/python/detail/dealloc.hpp17
-rw-r--r--boost/boost/python/detail/decorated_type_id.hpp76
-rw-r--r--boost/boost/python/detail/decref_guard.hpp21
-rw-r--r--boost/boost/python/detail/def_helper.hpp212
-rw-r--r--boost/boost/python/detail/def_helper_fwd.hpp17
-rw-r--r--boost/boost/python/detail/defaults_def.hpp291
-rw-r--r--boost/boost/python/detail/defaults_gen.hpp388
-rw-r--r--boost/boost/python/detail/dependent.hpp27
-rw-r--r--boost/boost/python/detail/destroy.hpp106
-rw-r--r--boost/boost/python/detail/enable_if.hpp72
-rw-r--r--boost/boost/python/detail/exception_handler.hpp48
-rw-r--r--boost/boost/python/detail/force_instantiate.hpp32
-rw-r--r--boost/boost/python/detail/if_else.hpp116
-rw-r--r--boost/boost/python/detail/indirect_traits.hpp13
-rw-r--r--boost/boost/python/detail/invoke.hpp100
-rw-r--r--boost/boost/python/detail/is_auto_ptr.hpp30
-rw-r--r--boost/boost/python/detail/is_shared_ptr.hpp17
-rw-r--r--boost/boost/python/detail/is_wrapper.hpp29
-rw-r--r--boost/boost/python/detail/is_xxx.hpp13
-rw-r--r--boost/boost/python/detail/make_keyword_range_fn.hpp69
-rw-r--r--boost/boost/python/detail/make_tuple.hpp32
-rw-r--r--boost/boost/python/detail/map_entry.hpp43
-rw-r--r--boost/boost/python/detail/mpl_lambda.hpp12
-rw-r--r--boost/boost/python/detail/msvc_typeinfo.hpp75
-rw-r--r--boost/boost/python/detail/none.hpp20
-rw-r--r--boost/boost/python/detail/not_specified.hpp14
-rw-r--r--boost/boost/python/detail/nullary_function_adaptor.hpp46
-rw-r--r--boost/boost/python/detail/operator_id.hpp55
-rw-r--r--boost/boost/python/detail/overloads_fwd.hpp18
-rw-r--r--boost/boost/python/detail/pointee.hpp35
-rw-r--r--boost/boost/python/detail/prefix.hpp16
-rw-r--r--boost/boost/python/detail/preprocessor.hpp66
-rw-r--r--boost/boost/python/detail/python22_fixed.h152
-rw-r--r--boost/boost/python/detail/raw_pyobject.hpp32
-rw-r--r--boost/boost/python/detail/referent_storage.hpp76
-rw-r--r--boost/boost/python/detail/result.hpp131
-rw-r--r--boost/boost/python/detail/scope.hpp16
-rw-r--r--boost/boost/python/detail/sfinae.hpp13
-rw-r--r--boost/boost/python/detail/signature.hpp88
-rw-r--r--boost/boost/python/detail/string_literal.hpp88
-rw-r--r--boost/boost/python/detail/target.hpp82
-rw-r--r--boost/boost/python/detail/translate_exception.hpp67
-rw-r--r--boost/boost/python/detail/type_list.hpp39
-rw-r--r--boost/boost/python/detail/type_list_impl.hpp57
-rw-r--r--boost/boost/python/detail/type_list_impl_no_pts.hpp107
-rw-r--r--boost/boost/python/detail/unwrap_type_id.hpp31
-rw-r--r--boost/boost/python/detail/unwrap_wrapper.hpp34
-rw-r--r--boost/boost/python/detail/value_arg.hpp27
-rw-r--r--boost/boost/python/detail/value_is_shared_ptr.hpp17
-rw-r--r--boost/boost/python/detail/value_is_xxx.hpp62
-rw-r--r--boost/boost/python/detail/void_ptr.hpp35
-rw-r--r--boost/boost/python/detail/void_return.hpp42
-rw-r--r--boost/boost/python/detail/wrap_python.hpp192
-rw-r--r--boost/boost/python/detail/wrapper_base.hpp90
-rw-r--r--boost/boost/python/dict.hpp152
-rw-r--r--boost/boost/python/docstring_options.hpp76
-rw-r--r--boost/boost/python/enum.hpp102
-rw-r--r--boost/boost/python/errors.hpp55
-rw-r--r--boost/boost/python/exception_translator.hpp27
-rw-r--r--boost/boost/python/exec.hpp40
-rw-r--r--boost/boost/python/extract.hpp261
-rw-r--r--boost/boost/python/handle.hpp264
-rw-r--r--boost/boost/python/handle_fwd.hpp16
-rw-r--r--boost/boost/python/has_back_reference.hpp24
-rw-r--r--boost/boost/python/implicit.hpp29
-rw-r--r--boost/boost/python/import.hpp22
-rw-r--r--boost/boost/python/init.hpp421
-rw-r--r--boost/boost/python/instance_holder.hpp63
-rw-r--r--boost/boost/python/iterator.hpp127
-rw-r--r--boost/boost/python/list.hpp142
-rw-r--r--boost/boost/python/long.hpp68
-rw-r--r--boost/boost/python/lvalue_from_pytype.hpp105
-rw-r--r--boost/boost/python/make_constructor.hpp279
-rw-r--r--boost/boost/python/make_function.hpp153
-rw-r--r--boost/boost/python/manage_new_object.hpp41
-rw-r--r--boost/boost/python/module.hpp13
-rw-r--r--boost/boost/python/module_init.hpp53
-rw-r--r--boost/boost/python/numeric.hpp241
-rw-r--r--boost/boost/python/object.hpp27
-rw-r--r--boost/boost/python/object/add_to_namespace.hpp23
-rw-r--r--boost/boost/python/object/class.hpp64
-rw-r--r--boost/boost/python/object/class_detail.hpp19
-rw-r--r--boost/boost/python/object/class_metadata.hpp281
-rw-r--r--boost/boost/python/object/class_wrapper.hpp42
-rw-r--r--boost/boost/python/object/enum_base.hpp34
-rw-r--r--boost/boost/python/object/find_instance.hpp21
-rw-r--r--boost/boost/python/object/forward.hpp194
-rw-r--r--boost/boost/python/object/function.hpp78
-rw-r--r--boost/boost/python/object/function_handle.hpp44
-rw-r--r--boost/boost/python/object/function_object.hpp40
-rw-r--r--boost/boost/python/object/inheritance.hpp132
-rw-r--r--boost/boost/python/object/inheritance_query.hpp17
-rw-r--r--boost/boost/python/object/instance.hpp51
-rw-r--r--boost/boost/python/object/iterator.hpp254
-rw-r--r--boost/boost/python/object/iterator_core.hpp17
-rw-r--r--boost/boost/python/object/life_support.hpp15
-rw-r--r--boost/boost/python/object/make_holder.hpp97
-rw-r--r--boost/boost/python/object/make_instance.hpp75
-rw-r--r--boost/boost/python/object/make_ptr_instance.hpp67
-rw-r--r--boost/boost/python/object/pickle_support.hpp124
-rw-r--r--boost/boost/python/object/pointer_holder.hpp208
-rw-r--r--boost/boost/python/object/py_function.hpp163
-rw-r--r--boost/boost/python/object/stl_iterator_core.hpp27
-rw-r--r--boost/boost/python/object/value_holder.hpp166
-rw-r--r--boost/boost/python/object/value_holder_fwd.hpp16
-rw-r--r--boost/boost/python/object_attributes.hpp68
-rw-r--r--boost/boost/python/object_call.hpp23
-rw-r--r--boost/boost/python/object_core.hpp485
-rw-r--r--boost/boost/python/object_fwd.hpp18
-rw-r--r--boost/boost/python/object_items.hpp89
-rw-r--r--boost/boost/python/object_operators.hpp132
-rw-r--r--boost/boost/python/object_protocol.hpp79
-rw-r--r--boost/boost/python/object_protocol_core.hpp53
-rw-r--r--boost/boost/python/object_slices.hpp142
-rw-r--r--boost/boost/python/opaque_pointer_converter.hpp192
-rw-r--r--boost/boost/python/operators.hpp364
-rw-r--r--boost/boost/python/other.hpp114
-rw-r--r--boost/boost/python/overloads.hpp13
-rw-r--r--boost/boost/python/override.hpp144
-rw-r--r--boost/boost/python/pointee.hpp43
-rw-r--r--boost/boost/python/proxy.hpp101
-rw-r--r--boost/boost/python/ptr.hpp128
-rw-r--r--boost/boost/python/pure_virtual.hpp124
-rw-r--r--boost/boost/python/raw_function.hpp61
-rw-r--r--boost/boost/python/refcount.hpp41
-rw-r--r--boost/boost/python/reference_existing_object.hpp46
-rw-r--r--boost/boost/python/register_ptr_to_python.hpp31
-rw-r--r--boost/boost/python/return_arg.hpp96
-rw-r--r--boost/boost/python/return_by_value.hpp31
-rw-r--r--boost/boost/python/return_internal_reference.hpp43
-rw-r--r--boost/boost/python/return_opaque_pointer.hpp47
-rw-r--r--boost/boost/python/return_value_policy.hpp21
-rw-r--r--boost/boost/python/scope.hpp78
-rw-r--r--boost/boost/python/self.hpp33
-rw-r--r--boost/boost/python/signature.hpp179
-rw-r--r--boost/boost/python/slice.hpp266
-rw-r--r--boost/boost/python/slice_nil.hpp44
-rw-r--r--boost/boost/python/ssize_t.hpp29
-rw-r--r--boost/boost/python/stl_iterator.hpp61
-rw-r--r--boost/boost/python/str.hpp414
-rw-r--r--boost/boost/python/suite/indexing/container_utils.hpp52
-rw-r--r--boost/boost/python/suite/indexing/detail/indexing_suite_detail.hpp759
-rw-r--r--boost/boost/python/suite/indexing/indexing_suite.hpp299
-rw-r--r--boost/boost/python/suite/indexing/map_indexing_suite.hpp181
-rw-r--r--boost/boost/python/suite/indexing/vector_indexing_suite.hpp242
-rw-r--r--boost/boost/python/tag.hpp18
-rw-r--r--boost/boost/python/to_python_converter.hpp40
-rw-r--r--boost/boost/python/to_python_indirect.hpp103
-rw-r--r--boost/boost/python/to_python_value.hpp124
-rw-r--r--boost/boost/python/tuple.hpp70
-rw-r--r--boost/boost/python/type_id.hpp191
-rw-r--r--boost/boost/python/with_custodian_and_ward.hpp124
-rw-r--r--boost/boost/python/wrapper.hpp35
-rw-r--r--boost/boost/random.hpp72
-rw-r--r--boost/boost/random/additive_combine.hpp125
-rw-r--r--boost/boost/random/bernoulli_distribution.hpp80
-rw-r--r--boost/boost/random/binomial_distribution.hpp81
-rw-r--r--boost/boost/random/cauchy_distribution.hpp89
-rw-r--r--boost/boost/random/detail/const_mod.hpp359
-rw-r--r--boost/boost/random/detail/iterator_mixin.hpp45
-rw-r--r--boost/boost/random/detail/pass_through_engine.hpp98
-rw-r--r--boost/boost/random/detail/ptr_helper.hpp94
-rw-r--r--boost/boost/random/detail/signed_unsigned_compare.hpp91
-rw-r--r--boost/boost/random/detail/uniform_int_float.hpp84
-rw-r--r--boost/boost/random/discard_block.hpp121
-rw-r--r--boost/boost/random/exponential_distribution.hpp81
-rw-r--r--boost/boost/random/gamma_distribution.hpp133
-rw-r--r--boost/boost/random/geometric_distribution.hpp97
-rw-r--r--boost/boost/random/inversive_congruential.hpp127
-rw-r--r--boost/boost/random/lagged_fibonacci.hpp464
-rw-r--r--boost/boost/random/linear_congruential.hpp258
-rw-r--r--boost/boost/random/linear_feedback_shift.hpp145
-rw-r--r--boost/boost/random/lognormal_distribution.hpp114
-rw-r--r--boost/boost/random/mersenne_twister.hpp302
-rw-r--r--boost/boost/random/normal_distribution.hpp111
-rw-r--r--boost/boost/random/poisson_distribution.hpp99
-rw-r--r--boost/boost/random/random_number_generator.hpp56
-rw-r--r--boost/boost/random/ranlux.hpp50
-rw-r--r--boost/boost/random/shuffle_output.hpp175
-rw-r--r--boost/boost/random/subtract_with_carry.hpp445
-rw-r--r--boost/boost/random/triangle_distribution.hpp101
-rw-r--r--boost/boost/random/uniform_01.hpp93
-rw-r--r--boost/boost/random/uniform_int.hpp152
-rw-r--r--boost/boost/random/uniform_on_sphere.hpp86
-rw-r--r--boost/boost/random/uniform_real.hpp83
-rw-r--r--boost/boost/random/uniform_smallint.hpp236
-rw-r--r--boost/boost/random/variate_generator.hpp133
-rw-r--r--boost/boost/random/xor_combine.hpp130
-rw-r--r--boost/boost/range.hpp33
-rw-r--r--boost/boost/range/begin.hpp197
-rw-r--r--boost/boost/range/concepts.hpp155
-rw-r--r--boost/boost/range/config.hpp55
-rw-r--r--boost/boost/range/const_iterator.hpp127
-rw-r--r--boost/boost/range/const_reverse_iterator.hpp37
-rw-r--r--boost/boost/range/detail/begin.hpp133
-rw-r--r--boost/boost/range/detail/collection_traits.hpp266
-rw-r--r--boost/boost/range/detail/collection_traits_detail.hpp621
-rw-r--r--boost/boost/range/detail/common.hpp116
-rw-r--r--boost/boost/range/detail/const_iterator.hpp123
-rw-r--r--boost/boost/range/detail/difference_type.hpp121
-rw-r--r--boost/boost/range/detail/empty.hpp120
-rw-r--r--boost/boost/range/detail/end.hpp161
-rw-r--r--boost/boost/range/detail/implementation_help.hpp162
-rw-r--r--boost/boost/range/detail/iterator.hpp128
-rw-r--r--boost/boost/range/detail/mfc/carray.hpp97
-rw-r--r--boost/boost/range/detail/mfc/cstring.hpp92
-rw-r--r--boost/boost/range/detail/remove_extent.hpp157
-rw-r--r--boost/boost/range/detail/sfinae.hpp77
-rw-r--r--boost/boost/range/detail/size.hpp159
-rw-r--r--boost/boost/range/detail/size_type.hpp118
-rw-r--r--boost/boost/range/detail/sizer.hpp37
-rw-r--r--boost/boost/range/detail/value_type.hpp122
-rw-r--r--boost/boost/range/detail/vc6/end.hpp170
-rw-r--r--boost/boost/range/detail/vc6/size.hpp166
-rw-r--r--boost/boost/range/difference_type.hpp145
-rw-r--r--boost/boost/range/empty.hpp67
-rw-r--r--boost/boost/range/end.hpp201
-rw-r--r--boost/boost/range/functions.hpp25
-rw-r--r--boost/boost/range/iterator.hpp128
-rw-r--r--boost/boost/range/iterator_range.hpp608
-rw-r--r--boost/boost/range/metafunctions.hpp28
-rw-r--r--boost/boost/range/rbegin.hpp68
-rw-r--r--boost/boost/range/rend.hpp68
-rw-r--r--boost/boost/range/result_iterator.hpp43
-rw-r--r--boost/boost/range/reverse_iterator.hpp40
-rw-r--r--boost/boost/range/reverse_result_iterator.hpp37
-rw-r--r--boost/boost/range/size.hpp123
-rw-r--r--boost/boost/range/size_type.hpp176
-rw-r--r--boost/boost/range/sub_range.hpp170
-rw-r--r--boost/boost/range/value_type.hpp146
-rw-r--r--boost/boost/rational.hpp548
-rw-r--r--boost/boost/ref.hpp178
-rw-r--r--boost/boost/regex.h100
-rw-r--r--boost/boost/regex.hpp37
-rw-r--r--boost/boost/regex/concepts.hpp870
-rw-r--r--boost/boost/regex/config.hpp411
-rw-r--r--boost/boost/regex/config/borland.hpp72
-rw-r--r--boost/boost/regex/config/cwchar.hpp207
-rw-r--r--boost/boost/regex/icu.hpp1017
-rw-r--r--boost/boost/regex/mfc.hpp190
-rw-r--r--boost/boost/regex/pattern_except.hpp83
-rw-r--r--boost/boost/regex/pending/object_cache.hpp163
-rw-r--r--boost/boost/regex/pending/static_mutex.hpp177
-rw-r--r--boost/boost/regex/pending/unicode_iterator.hpp691
-rw-r--r--boost/boost/regex/regex_traits.hpp35
-rw-r--r--boost/boost/regex/user.hpp90
-rw-r--r--boost/boost/regex/v4/basic_regex.hpp638
-rw-r--r--boost/boost/regex/v4/basic_regex_creator.hpp1296
-rw-r--r--boost/boost/regex/v4/basic_regex_parser.hpp2089
-rw-r--r--boost/boost/regex/v4/c_regex_traits.hpp197
-rw-r--r--boost/boost/regex/v4/char_regex_traits.hpp67
-rw-r--r--boost/boost/regex/v4/cpp_regex_traits.hpp1041
-rw-r--r--boost/boost/regex/v4/cregex.hpp301
-rw-r--r--boost/boost/regex/v4/error_type.hpp58
-rw-r--r--boost/boost/regex/v4/fileiter.hpp449
-rw-r--r--boost/boost/regex/v4/instances.hpp206
-rw-r--r--boost/boost/regex/v4/iterator_category.hpp87
-rw-r--r--boost/boost/regex/v4/iterator_traits.hpp121
-rw-r--r--boost/boost/regex/v4/match_flags.hpp140
-rw-r--r--boost/boost/regex/v4/match_results.hpp413
-rw-r--r--boost/boost/regex/v4/mem_block_cache.hpp99
-rw-r--r--boost/boost/regex/v4/perl_matcher.hpp527
-rw-r--r--boost/boost/regex/v4/perl_matcher_common.hpp949
-rw-r--r--boost/boost/regex/v4/perl_matcher_non_recursive.hpp1367
-rw-r--r--boost/boost/regex/v4/perl_matcher_recursive.hpp832
-rw-r--r--boost/boost/regex/v4/primary_transform.hpp132
-rw-r--r--boost/boost/regex/v4/protected_call.hpp67
-rw-r--r--boost/boost/regex/v4/regbase.hpp162
-rw-r--r--boost/boost/regex/v4/regex.hpp202
-rw-r--r--boost/boost/regex/v4/regex_cstring.hpp123
-rw-r--r--boost/boost/regex/v4/regex_format.hpp637
-rw-r--r--boost/boost/regex/v4/regex_fwd.hpp73
-rw-r--r--boost/boost/regex/v4/regex_grep.hpp141
-rw-r--r--boost/boost/regex/v4/regex_iterator.hpp187
-rw-r--r--boost/boost/regex/v4/regex_kmp.hpp108
-rw-r--r--boost/boost/regex/v4/regex_match.hpp368
-rw-r--r--boost/boost/regex/v4/regex_merge.hpp79
-rw-r--r--boost/boost/regex/v4/regex_raw_buffer.hpp196
-rw-r--r--boost/boost/regex/v4/regex_replace.hpp108
-rw-r--r--boost/boost/regex/v4/regex_search.hpp203
-rw-r--r--boost/boost/regex/v4/regex_split.hpp149
-rw-r--r--boost/boost/regex/v4/regex_stack.hpp225
-rw-r--r--boost/boost/regex/v4/regex_token_iterator.hpp328
-rw-r--r--boost/boost/regex/v4/regex_traits.hpp175
-rw-r--r--boost/boost/regex/v4/regex_traits_defaults.hpp317
-rw-r--r--boost/boost/regex/v4/regex_workaround.hpp202
-rw-r--r--boost/boost/regex/v4/states.hpp276
-rw-r--r--boost/boost/regex/v4/sub_match.hpp495
-rw-r--r--boost/boost/regex/v4/syntax_type.hpp102
-rw-r--r--boost/boost/regex/v4/u32regex_iterator.hpp193
-rw-r--r--boost/boost/regex/v4/u32regex_token_iterator.hpp377
-rw-r--r--boost/boost/regex/v4/w32_regex_traits.hpp716
-rw-r--r--boost/boost/regex_fwd.hpp33
-rw-r--r--boost/boost/scoped_array.hpp135
-rw-r--r--boost/boost/scoped_ptr.hpp157
-rw-r--r--boost/boost/serialization/access.hpp130
-rw-r--r--boost/boost/serialization/base_object.hpp172
-rw-r--r--boost/boost/serialization/binary_object.hpp88
-rw-r--r--boost/boost/serialization/collection_traits.hpp86
-rw-r--r--boost/boost/serialization/collections_load_imp.hpp139
-rw-r--r--boost/boost/serialization/collections_save_imp.hpp66
-rw-r--r--boost/boost/serialization/config.hpp74
-rw-r--r--boost/boost/serialization/deque.hpp75
-rw-r--r--boost/boost/serialization/detail/shared_count_132.hpp567
-rw-r--r--boost/boost/serialization/detail/shared_ptr_132.hpp482
-rw-r--r--boost/boost/serialization/detail/shared_ptr_nmt_132.hpp182
-rw-r--r--boost/boost/serialization/detail/stack_constructor.hpp73
-rw-r--r--boost/boost/serialization/export.hpp280
-rw-r--r--boost/boost/serialization/extended_type_info.hpp94
-rw-r--r--boost/boost/serialization/extended_type_info_no_rtti.hpp133
-rw-r--r--boost/boost/serialization/extended_type_info_typeid.hpp138
-rw-r--r--boost/boost/serialization/force_include.hpp61
-rw-r--r--boost/boost/serialization/hash_collections_load_imp.hpp58
-rw-r--r--boost/boost/serialization/hash_collections_save_imp.hpp66
-rw-r--r--boost/boost/serialization/hash_map.hpp175
-rw-r--r--boost/boost/serialization/hash_set.hpp178
-rw-r--r--boost/boost/serialization/is_abstract.hpp52
-rw-r--r--boost/boost/serialization/level.hpp120
-rw-r--r--boost/boost/serialization/level_enum.hpp55
-rw-r--r--boost/boost/serialization/list.hpp77
-rw-r--r--boost/boost/serialization/map.hpp118
-rw-r--r--boost/boost/serialization/nvp.hpp142
-rw-r--r--boost/boost/serialization/optional.hpp112
-rw-r--r--boost/boost/serialization/scoped_ptr.hpp58
-rw-r--r--boost/boost/serialization/serialization.hpp179
-rw-r--r--boost/boost/serialization/set.hpp120
-rw-r--r--boost/boost/serialization/shared_ptr.hpp241
-rw-r--r--boost/boost/serialization/shared_ptr_132.hpp240
-rw-r--r--boost/boost/serialization/slist.hpp93
-rw-r--r--boost/boost/serialization/split_free.hpp93
-rw-r--r--boost/boost/serialization/split_member.hpp86
-rw-r--r--boost/boost/serialization/string.hpp91
-rw-r--r--boost/boost/serialization/tracking.hpp113
-rw-r--r--boost/boost/serialization/tracking_enum.hpp41
-rw-r--r--boost/boost/serialization/traits.hpp62
-rw-r--r--boost/boost/serialization/type_info_implementation.hpp86
-rw-r--r--boost/boost/serialization/utility.hpp47
-rw-r--r--boost/boost/serialization/variant.hpp161
-rw-r--r--boost/boost/serialization/vector.hpp128
-rw-r--r--boost/boost/serialization/version.hpp87
-rw-r--r--boost/boost/serialization/void_cast.hpp200
-rw-r--r--boost/boost/serialization/void_cast_fwd.hpp43
-rw-r--r--boost/boost/serialization/weak_ptr.hpp58
-rw-r--r--boost/boost/shared_array.hpp177
-rw-r--r--boost/boost/shared_container_iterator.hpp62
-rw-r--r--boost/boost/shared_ptr.hpp558
-rw-r--r--boost/boost/signal.hpp358
-rw-r--r--boost/boost/signals.hpp10
-rw-r--r--boost/boost/signals/connection.hpp213
-rw-r--r--boost/boost/signals/detail/config.hpp54
-rw-r--r--boost/boost/signals/detail/gen_signal_N.pl132
-rw-r--r--boost/boost/signals/detail/named_slot_map.hpp193
-rw-r--r--boost/boost/signals/detail/signal_base.hpp159
-rw-r--r--boost/boost/signals/detail/signals_common.hpp162
-rw-r--r--boost/boost/signals/detail/slot_call_iterator.hpp95
-rw-r--r--boost/boost/signals/signal0.hpp37
-rw-r--r--boost/boost/signals/signal1.hpp37
-rw-r--r--boost/boost/signals/signal10.hpp37
-rw-r--r--boost/boost/signals/signal2.hpp37
-rw-r--r--boost/boost/signals/signal3.hpp37
-rw-r--r--boost/boost/signals/signal4.hpp37
-rw-r--r--boost/boost/signals/signal5.hpp37
-rw-r--r--boost/boost/signals/signal6.hpp37
-rw-r--r--boost/boost/signals/signal7.hpp37
-rw-r--r--boost/boost/signals/signal8.hpp37
-rw-r--r--boost/boost/signals/signal9.hpp37
-rw-r--r--boost/boost/signals/signal_template.hpp410
-rw-r--r--boost/boost/signals/slot.hpp157
-rw-r--r--boost/boost/signals/trackable.hpp195
-rw-r--r--boost/boost/smart_cast.hpp298
-rw-r--r--boost/boost/smart_ptr.hpp25
-rw-r--r--boost/boost/spirit.hpp72
-rw-r--r--boost/boost/spirit/actor.hpp114
-rw-r--r--boost/boost/spirit/actor/assign_actor.hpp96
-rw-r--r--boost/boost/spirit/actor/assign_key_actor.hpp92
-rw-r--r--boost/boost/spirit/actor/clear_actor.hpp58
-rw-r--r--boost/boost/spirit/actor/decrement_actor.hpp56
-rw-r--r--boost/boost/spirit/actor/erase_actor.hpp85
-rw-r--r--boost/boost/spirit/actor/increment_actor.hpp56
-rw-r--r--boost/boost/spirit/actor/insert_at_actor.hpp117
-rw-r--r--boost/boost/spirit/actor/insert_key_actor.hpp93
-rw-r--r--boost/boost/spirit/actor/push_back_actor.hpp97
-rw-r--r--boost/boost/spirit/actor/push_front_actor.hpp87
-rw-r--r--boost/boost/spirit/actor/ref_actor.hpp65
-rw-r--r--boost/boost/spirit/actor/ref_const_ref_actor.hpp73
-rw-r--r--boost/boost/spirit/actor/ref_const_ref_const_ref_a.hpp82
-rw-r--r--boost/boost/spirit/actor/ref_const_ref_value_actor.hpp73
-rw-r--r--boost/boost/spirit/actor/ref_value_actor.hpp65
-rw-r--r--boost/boost/spirit/actor/swap_actor.hpp81
-rw-r--r--boost/boost/spirit/actor/typeof.hpp70
-rw-r--r--boost/boost/spirit/attribute.hpp38
-rw-r--r--boost/boost/spirit/attribute/closure.hpp1079
-rw-r--r--boost/boost/spirit/attribute/closure_context.hpp51
-rw-r--r--boost/boost/spirit/attribute/closure_fwd.hpp65
-rw-r--r--boost/boost/spirit/attribute/parametric.hpp140
-rw-r--r--boost/boost/spirit/attribute/typeof.hpp64
-rw-r--r--boost/boost/spirit/core.hpp74
-rw-r--r--boost/boost/spirit/core/assert.hpp39
-rw-r--r--boost/boost/spirit/core/composite/actions.hpp123
-rw-r--r--boost/boost/spirit/core/composite/alternative.hpp134
-rw-r--r--boost/boost/spirit/core/composite/composite.hpp138
-rw-r--r--boost/boost/spirit/core/composite/difference.hpp137
-rw-r--r--boost/boost/spirit/core/composite/directives.hpp603
-rw-r--r--boost/boost/spirit/core/composite/epsilon.hpp272
-rw-r--r--boost/boost/spirit/core/composite/exclusive_or.hpp138
-rw-r--r--boost/boost/spirit/core/composite/impl/alternative.ipp86
-rw-r--r--boost/boost/spirit/core/composite/impl/difference.ipp86
-rw-r--r--boost/boost/spirit/core/composite/impl/directives.ipp370
-rw-r--r--boost/boost/spirit/core/composite/impl/exclusive_or.ipp86
-rw-r--r--boost/boost/spirit/core/composite/impl/intersection.ipp86
-rw-r--r--boost/boost/spirit/core/composite/impl/kleene_star.ipp30
-rw-r--r--boost/boost/spirit/core/composite/impl/list.ipp89
-rw-r--r--boost/boost/spirit/core/composite/impl/optional.ipp30
-rw-r--r--boost/boost/spirit/core/composite/impl/positive.ipp30
-rw-r--r--boost/boost/spirit/core/composite/impl/sequence.ipp86
-rw-r--r--boost/boost/spirit/core/composite/impl/sequential_and.ipp86
-rw-r--r--boost/boost/spirit/core/composite/impl/sequential_or.ipp86
-rw-r--r--boost/boost/spirit/core/composite/intersection.hpp138
-rw-r--r--boost/boost/spirit/core/composite/kleene_star.hpp96
-rw-r--r--boost/boost/spirit/core/composite/list.hpp69
-rw-r--r--boost/boost/spirit/core/composite/no_actions.hpp163
-rw-r--r--boost/boost/spirit/core/composite/operators.hpp26
-rw-r--r--boost/boost/spirit/core/composite/optional.hpp90
-rw-r--r--boost/boost/spirit/core/composite/positive.hpp99
-rw-r--r--boost/boost/spirit/core/composite/sequence.hpp129
-rw-r--r--boost/boost/spirit/core/composite/sequential_and.hpp72
-rw-r--r--boost/boost/spirit/core/composite/sequential_or.hpp150
-rw-r--r--boost/boost/spirit/core/config.hpp63
-rw-r--r--boost/boost/spirit/core/impl/match.ipp109
-rw-r--r--boost/boost/spirit/core/impl/match_attr_traits.ipp94
-rw-r--r--boost/boost/spirit/core/impl/parser.ipp51
-rw-r--r--boost/boost/spirit/core/match.hpp181
-rw-r--r--boost/boost/spirit/core/nil.hpp19
-rw-r--r--boost/boost/spirit/core/non_terminal/grammar.hpp81
-rw-r--r--boost/boost/spirit/core/non_terminal/impl/grammar.ipp388
-rw-r--r--boost/boost/spirit/core/non_terminal/impl/object_with_id.ipp185
-rw-r--r--boost/boost/spirit/core/non_terminal/impl/rule.ipp407
-rw-r--r--boost/boost/spirit/core/non_terminal/impl/subrule.ipp205
-rw-r--r--boost/boost/spirit/core/non_terminal/parser_context.hpp147
-rw-r--r--boost/boost/spirit/core/non_terminal/parser_id.hpp118
-rw-r--r--boost/boost/spirit/core/non_terminal/rule.hpp168
-rw-r--r--boost/boost/spirit/core/non_terminal/subrule.hpp296
-rw-r--r--boost/boost/spirit/core/non_terminal/subrule_fwd.hpp31
-rw-r--r--boost/boost/spirit/core/parser.hpp219
-rw-r--r--boost/boost/spirit/core/primitives/impl/numerics.ipp531
-rw-r--r--boost/boost/spirit/core/primitives/impl/primitives.ipp465
-rw-r--r--boost/boost/spirit/core/primitives/numerics.hpp285
-rw-r--r--boost/boost/spirit/core/primitives/numerics_fwd.hpp83
-rw-r--r--boost/boost/spirit/core/primitives/primitives.hpp645
-rw-r--r--boost/boost/spirit/core/safe_bool.hpp59
-rw-r--r--boost/boost/spirit/core/scanner/impl/skipper.ipp177
-rw-r--r--boost/boost/spirit/core/scanner/scanner.hpp320
-rw-r--r--boost/boost/spirit/core/scanner/scanner_fwd.hpp48
-rw-r--r--boost/boost/spirit/core/scanner/skipper.hpp192
-rw-r--r--boost/boost/spirit/core/scanner/skipper_fwd.hpp28
-rw-r--r--boost/boost/spirit/core/typeof.hpp335
-rw-r--r--boost/boost/spirit/debug.hpp146
-rw-r--r--boost/boost/spirit/debug/debug_node.hpp315
-rw-r--r--boost/boost/spirit/debug/impl/parser_names.ipp551
-rw-r--r--boost/boost/spirit/debug/minimal.hpp82
-rw-r--r--boost/boost/spirit/debug/parser_names.hpp250
-rw-r--r--boost/boost/spirit/debug/typeof.hpp36
-rw-r--r--boost/boost/spirit/dynamic.hpp29
-rw-r--r--boost/boost/spirit/dynamic/for.hpp183
-rw-r--r--boost/boost/spirit/dynamic/if.hpp225
-rw-r--r--boost/boost/spirit/dynamic/impl/conditions.ipp100
-rw-r--r--boost/boost/spirit/dynamic/impl/select.ipp115
-rw-r--r--boost/boost/spirit/dynamic/impl/switch.ipp569
-rw-r--r--boost/boost/spirit/dynamic/lazy.hpp62
-rw-r--r--boost/boost/spirit/dynamic/rule_alias.hpp72
-rw-r--r--boost/boost/spirit/dynamic/select.hpp237
-rw-r--r--boost/boost/spirit/dynamic/stored_rule.hpp123
-rw-r--r--boost/boost/spirit/dynamic/stored_rule_fwd.hpp27
-rw-r--r--boost/boost/spirit/dynamic/switch.hpp255
-rw-r--r--boost/boost/spirit/dynamic/typeof.hpp85
-rw-r--r--boost/boost/spirit/dynamic/while.hpp185
-rw-r--r--boost/boost/spirit/error_handling.hpp22
-rw-r--r--boost/boost/spirit/error_handling/exceptions.hpp361
-rw-r--r--boost/boost/spirit/error_handling/exceptions_fwd.hpp37
-rw-r--r--boost/boost/spirit/error_handling/impl/exceptions.ipp85
-rw-r--r--boost/boost/spirit/error_handling/typeof.hpp34
-rw-r--r--boost/boost/spirit/fusion/algorithm/any.hpp71
-rw-r--r--boost/boost/spirit/fusion/algorithm/detail/any.ipp39
-rw-r--r--boost/boost/spirit/fusion/algorithm/detail/find_if.ipp118
-rw-r--r--boost/boost/spirit/fusion/algorithm/detail/fold.ipp88
-rw-r--r--boost/boost/spirit/fusion/algorithm/detail/for_each.ipp36
-rw-r--r--boost/boost/spirit/fusion/algorithm/erase.hpp81
-rw-r--r--boost/boost/spirit/fusion/algorithm/filter.hpp51
-rw-r--r--boost/boost/spirit/fusion/algorithm/find.hpp77
-rw-r--r--boost/boost/spirit/fusion/algorithm/find_if.hpp76
-rw-r--r--boost/boost/spirit/fusion/algorithm/fold.hpp75
-rw-r--r--boost/boost/spirit/fusion/algorithm/for_each.hpp70
-rw-r--r--boost/boost/spirit/fusion/algorithm/insert.hpp85
-rw-r--r--boost/boost/spirit/fusion/algorithm/push_back.hpp53
-rw-r--r--boost/boost/spirit/fusion/algorithm/push_front.hpp53
-rw-r--r--boost/boost/spirit/fusion/algorithm/remove.hpp64
-rw-r--r--boost/boost/spirit/fusion/algorithm/remove_if.hpp52
-rw-r--r--boost/boost/spirit/fusion/algorithm/replace.hpp91
-rw-r--r--boost/boost/spirit/fusion/algorithm/transform.hpp52
-rw-r--r--boost/boost/spirit/fusion/detail/access.hpp55
-rw-r--r--boost/boost/spirit/fusion/detail/config.hpp442
-rw-r--r--boost/boost/spirit/fusion/iterator/as_fusion_iterator.hpp72
-rw-r--r--boost/boost/spirit/fusion/iterator/cons_iterator.hpp81
-rw-r--r--boost/boost/spirit/fusion/iterator/deref.hpp101
-rw-r--r--boost/boost/spirit/fusion/iterator/detail/adapt_deref_traits.hpp45
-rw-r--r--boost/boost/spirit/fusion/iterator/detail/adapt_value_traits.hpp29
-rw-r--r--boost/boost/spirit/fusion/iterator/detail/cons_iterator/deref_traits.hpp60
-rw-r--r--boost/boost/spirit/fusion/iterator/detail/cons_iterator/next_traits.hpp84
-rw-r--r--boost/boost/spirit/fusion/iterator/detail/cons_iterator/value_traits.hpp61
-rw-r--r--boost/boost/spirit/fusion/iterator/detail/filter_view_iterator/deref_traits.hpp32
-rw-r--r--boost/boost/spirit/fusion/iterator/detail/filter_view_iterator/equal_to_traits.hpp35
-rw-r--r--boost/boost/spirit/fusion/iterator/detail/filter_view_iterator/next_traits.hpp77
-rw-r--r--boost/boost/spirit/fusion/iterator/detail/filter_view_iterator/value_traits.hpp31
-rw-r--r--boost/boost/spirit/fusion/iterator/detail/iterator_base.hpp41
-rw-r--r--boost/boost/spirit/fusion/iterator/detail/joint_view_iterator/deref_traits.hpp31
-rw-r--r--boost/boost/spirit/fusion/iterator/detail/joint_view_iterator/next_traits.hpp85
-rw-r--r--boost/boost/spirit/fusion/iterator/detail/joint_view_iterator/value_traits.hpp31
-rw-r--r--boost/boost/spirit/fusion/iterator/detail/single_view_iterator/deref_traits.hpp72
-rw-r--r--boost/boost/spirit/fusion/iterator/detail/single_view_iterator/next_traits.hpp62
-rw-r--r--boost/boost/spirit/fusion/iterator/detail/single_view_iterator/value_traits.hpp37
-rw-r--r--boost/boost/spirit/fusion/iterator/detail/transform_view_iterator/deref_traits.hpp59
-rw-r--r--boost/boost/spirit/fusion/iterator/detail/transform_view_iterator/next_traits.hpp59
-rw-r--r--boost/boost/spirit/fusion/iterator/detail/transform_view_iterator/value_traits.hpp44
-rw-r--r--boost/boost/spirit/fusion/iterator/detail/tuple_iterator/deref_traits.hpp66
-rw-r--r--boost/boost/spirit/fusion/iterator/detail/tuple_iterator/equal_to_traits.hpp71
-rw-r--r--boost/boost/spirit/fusion/iterator/detail/tuple_iterator/next_traits.hpp65
-rw-r--r--boost/boost/spirit/fusion/iterator/detail/tuple_iterator/prior_traits.hpp67
-rw-r--r--boost/boost/spirit/fusion/iterator/detail/tuple_iterator/value_traits.hpp54
-rw-r--r--boost/boost/spirit/fusion/iterator/detail/type_sequence_iterator/deref_traits.hpp57
-rw-r--r--boost/boost/spirit/fusion/iterator/detail/type_sequence_iterator/next_traits.hpp59
-rw-r--r--boost/boost/spirit/fusion/iterator/detail/type_sequence_iterator/value_traits.hpp39
-rw-r--r--boost/boost/spirit/fusion/iterator/equal_to.hpp50
-rw-r--r--boost/boost/spirit/fusion/iterator/filter_view_iterator.hpp51
-rw-r--r--boost/boost/spirit/fusion/iterator/is_iterator.hpp32
-rw-r--r--boost/boost/spirit/fusion/iterator/joint_view_iterator.hpp55
-rw-r--r--boost/boost/spirit/fusion/iterator/next.hpp54
-rw-r--r--boost/boost/spirit/fusion/iterator/prior.hpp51
-rw-r--r--boost/boost/spirit/fusion/iterator/single_view_iterator.hpp46
-rw-r--r--boost/boost/spirit/fusion/iterator/transform_view_iterator.hpp44
-rw-r--r--boost/boost/spirit/fusion/iterator/tuple_iterator.hpp97
-rw-r--r--boost/boost/spirit/fusion/iterator/type_sequence_iterator.hpp32
-rw-r--r--boost/boost/spirit/fusion/iterator/value_of.hpp39
-rw-r--r--boost/boost/spirit/fusion/sequence/append_view.hpp29
-rw-r--r--boost/boost/spirit/fusion/sequence/as_fusion_sequence.hpp99
-rw-r--r--boost/boost/spirit/fusion/sequence/at.hpp67
-rw-r--r--boost/boost/spirit/fusion/sequence/begin.hpp93
-rw-r--r--boost/boost/spirit/fusion/sequence/cons.hpp69
-rw-r--r--boost/boost/spirit/fusion/sequence/detail/as_tuple_element.hpp108
-rw-r--r--boost/boost/spirit/fusion/sequence/detail/cons_begin_end_traits.hpp101
-rw-r--r--boost/boost/spirit/fusion/sequence/detail/filter_view_begin_end_trts.hpp89
-rw-r--r--boost/boost/spirit/fusion/sequence/detail/generate.hpp80
-rw-r--r--boost/boost/spirit/fusion/sequence/detail/io.hpp142
-rw-r--r--boost/boost/spirit/fusion/sequence/detail/joint_view_begin_end_traits.hpp126
-rw-r--r--boost/boost/spirit/fusion/sequence/detail/manip.hpp336
-rw-r--r--boost/boost/spirit/fusion/sequence/detail/range_begin_end_traits.hpp104
-rw-r--r--boost/boost/spirit/fusion/sequence/detail/sequence_base.hpp42
-rw-r--r--boost/boost/spirit/fusion/sequence/detail/sequence_equal_to.hpp60
-rw-r--r--boost/boost/spirit/fusion/sequence/detail/sequence_greater.hpp59
-rw-r--r--boost/boost/spirit/fusion/sequence/detail/sequence_greater_equal.hpp60
-rw-r--r--boost/boost/spirit/fusion/sequence/detail/sequence_less.hpp61
-rw-r--r--boost/boost/spirit/fusion/sequence/detail/sequence_less_equal.hpp59
-rw-r--r--boost/boost/spirit/fusion/sequence/detail/sequence_not_equal_to.hpp59
-rw-r--r--boost/boost/spirit/fusion/sequence/detail/single_view_begin_end_trts.hpp101
-rw-r--r--boost/boost/spirit/fusion/sequence/detail/trsfrm_view_begin_end_trts.hpp88
-rw-r--r--boost/boost/spirit/fusion/sequence/detail/tuple10.hpp123
-rw-r--r--boost/boost/spirit/fusion/sequence/detail/tuple_access_result.hpp33
-rw-r--r--boost/boost/spirit/fusion/sequence/detail/tuple_at_traits.hpp60
-rw-r--r--boost/boost/spirit/fusion/sequence/detail/tuple_begin_end_traits.hpp143
-rw-r--r--boost/boost/spirit/fusion/sequence/detail/tuple_body.hpp86
-rw-r--r--boost/boost/spirit/fusion/sequence/detail/tuple_builder.hpp89
-rw-r--r--boost/boost/spirit/fusion/sequence/detail/tuple_macro.hpp97
-rw-r--r--boost/boost/spirit/fusion/sequence/detail/tuple_size_traits.hpp29
-rw-r--r--boost/boost/spirit/fusion/sequence/detail/tuple_value_at_traits.hpp37
-rw-r--r--boost/boost/spirit/fusion/sequence/detail/type_seq_begin_end_trts.hpp89
-rw-r--r--boost/boost/spirit/fusion/sequence/end.hpp94
-rw-r--r--boost/boost/spirit/fusion/sequence/equal_to.hpp54
-rw-r--r--boost/boost/spirit/fusion/sequence/filter_view.hpp46
-rw-r--r--boost/boost/spirit/fusion/sequence/generate.hpp47
-rw-r--r--boost/boost/spirit/fusion/sequence/get.hpp116
-rw-r--r--boost/boost/spirit/fusion/sequence/greater.hpp54
-rw-r--r--boost/boost/spirit/fusion/sequence/greater_equal.hpp54
-rw-r--r--boost/boost/spirit/fusion/sequence/io.hpp45
-rw-r--r--boost/boost/spirit/fusion/sequence/is_sequence.hpp31
-rw-r--r--boost/boost/spirit/fusion/sequence/joint_view.hpp63
-rw-r--r--boost/boost/spirit/fusion/sequence/less.hpp54
-rw-r--r--boost/boost/spirit/fusion/sequence/less_equal.hpp54
-rw-r--r--boost/boost/spirit/fusion/sequence/limits.hpp20
-rw-r--r--boost/boost/spirit/fusion/sequence/make_tuple.hpp47
-rw-r--r--boost/boost/spirit/fusion/sequence/not_equal_to.hpp54
-rw-r--r--boost/boost/spirit/fusion/sequence/prepend_view.hpp29
-rw-r--r--boost/boost/spirit/fusion/sequence/range.hpp38
-rw-r--r--boost/boost/spirit/fusion/sequence/single_view.hpp39
-rw-r--r--boost/boost/spirit/fusion/sequence/size.hpp43
-rw-r--r--boost/boost/spirit/fusion/sequence/tie.hpp58
-rw-r--r--boost/boost/spirit/fusion/sequence/transform_view.hpp51
-rw-r--r--boost/boost/spirit/fusion/sequence/tuple.hpp74
-rw-r--r--boost/boost/spirit/fusion/sequence/tuple10.hpp307
-rw-r--r--boost/boost/spirit/fusion/sequence/tuple20.hpp51
-rw-r--r--boost/boost/spirit/fusion/sequence/tuple30.hpp51
-rw-r--r--boost/boost/spirit/fusion/sequence/tuple40.hpp51
-rw-r--r--boost/boost/spirit/fusion/sequence/tuple50.hpp51
-rw-r--r--boost/boost/spirit/fusion/sequence/tuple_element.hpp46
-rw-r--r--boost/boost/spirit/fusion/sequence/tuple_forward.hpp28
-rw-r--r--boost/boost/spirit/fusion/sequence/tuple_size.hpp38
-rw-r--r--boost/boost/spirit/fusion/sequence/type_sequence.hpp31
-rw-r--r--boost/boost/spirit/fusion/sequence/value_at.hpp45
-rw-r--r--boost/boost/spirit/iterator.hpp26
-rw-r--r--boost/boost/spirit/iterator/file_iterator.hpp225
-rw-r--r--boost/boost/spirit/iterator/file_iterator_fwd.hpp34
-rw-r--r--boost/boost/spirit/iterator/fixed_size_queue.hpp398
-rw-r--r--boost/boost/spirit/iterator/impl/file_iterator.ipp460
-rw-r--r--boost/boost/spirit/iterator/impl/position_iterator.ipp131
-rw-r--r--boost/boost/spirit/iterator/multi_pass.hpp1295
-rw-r--r--boost/boost/spirit/iterator/multi_pass_fwd.hpp42
-rw-r--r--boost/boost/spirit/iterator/position_iterator.hpp429
-rw-r--r--boost/boost/spirit/iterator/position_iterator_fwd.hpp56
-rw-r--r--boost/boost/spirit/iterator/typeof.hpp92
-rw-r--r--boost/boost/spirit/meta.hpp27
-rw-r--r--boost/boost/spirit/meta/as_parser.hpp109
-rw-r--r--boost/boost/spirit/meta/fundamental.hpp52
-rw-r--r--boost/boost/spirit/meta/impl/fundamental.ipp305
-rw-r--r--boost/boost/spirit/meta/impl/parser_traits.ipp187
-rw-r--r--boost/boost/spirit/meta/impl/refactoring.ipp447
-rw-r--r--boost/boost/spirit/meta/impl/traverse.ipp389
-rw-r--r--boost/boost/spirit/meta/parser_traits.hpp316
-rw-r--r--boost/boost/spirit/meta/refactoring.hpp274
-rw-r--r--boost/boost/spirit/meta/traverse.hpp218
-rw-r--r--boost/boost/spirit/phoenix.hpp26
-rw-r--r--boost/boost/spirit/phoenix/actor.hpp596
-rw-r--r--boost/boost/spirit/phoenix/binders.hpp4067
-rw-r--r--boost/boost/spirit/phoenix/casts.hpp1471
-rw-r--r--boost/boost/spirit/phoenix/closures.hpp440
-rw-r--r--boost/boost/spirit/phoenix/composite.hpp1423
-rw-r--r--boost/boost/spirit/phoenix/functions.hpp761
-rw-r--r--boost/boost/spirit/phoenix/new.hpp1316
-rw-r--r--boost/boost/spirit/phoenix/operators.hpp2203
-rw-r--r--boost/boost/spirit/phoenix/primitives.hpp248
-rw-r--r--boost/boost/spirit/phoenix/special_ops.hpp342
-rw-r--r--boost/boost/spirit/phoenix/statements.hpp444
-rw-r--r--boost/boost/spirit/phoenix/tuple_helpers.hpp1076
-rw-r--r--boost/boost/spirit/phoenix/tuples.hpp1330
-rw-r--r--boost/boost/spirit/symbols.hpp22
-rw-r--r--boost/boost/spirit/symbols/impl/symbols.ipp114
-rw-r--r--boost/boost/spirit/symbols/impl/tst.ipp277
-rw-r--r--boost/boost/spirit/symbols/symbols.hpp225
-rw-r--r--boost/boost/spirit/symbols/symbols_fwd.hpp34
-rw-r--r--boost/boost/spirit/symbols/typeof.hpp26
-rw-r--r--boost/boost/spirit/tree/ast.hpp378
-rw-r--r--boost/boost/spirit/tree/ast_fwd.hpp33
-rw-r--r--boost/boost/spirit/tree/common.hpp1504
-rw-r--r--boost/boost/spirit/tree/common_fwd.hpp88
-rw-r--r--boost/boost/spirit/tree/impl/parse_tree_utils.ipp131
-rw-r--r--boost/boost/spirit/tree/impl/tree_to_xml.ipp514
-rw-r--r--boost/boost/spirit/tree/parse_tree.hpp286
-rw-r--r--boost/boost/spirit/tree/parse_tree_fwd.hpp29
-rw-r--r--boost/boost/spirit/tree/parse_tree_utils.hpp63
-rw-r--r--boost/boost/spirit/tree/parsetree.dtd17
-rw-r--r--boost/boost/spirit/tree/tree_to_xml.hpp111
-rw-r--r--boost/boost/spirit/tree/typeof.hpp80
-rw-r--r--boost/boost/spirit/utility.hpp41
-rw-r--r--boost/boost/spirit/utility/chset.hpp183
-rw-r--r--boost/boost/spirit/utility/chset_operators.hpp398
-rw-r--r--boost/boost/spirit/utility/confix.hpp392
-rw-r--r--boost/boost/spirit/utility/confix_fwd.hpp35
-rw-r--r--boost/boost/spirit/utility/distinct.hpp227
-rw-r--r--boost/boost/spirit/utility/distinct_fwd.hpp32
-rw-r--r--boost/boost/spirit/utility/escape_char.hpp180
-rw-r--r--boost/boost/spirit/utility/escape_char_fwd.hpp25
-rw-r--r--boost/boost/spirit/utility/flush_multi_pass.hpp73
-rw-r--r--boost/boost/spirit/utility/functor_parser.hpp67
-rw-r--r--boost/boost/spirit/utility/grammar_def.hpp303
-rw-r--r--boost/boost/spirit/utility/grammar_def_fwd.hpp48
-rw-r--r--boost/boost/spirit/utility/impl/chset.ipp362
-rw-r--r--boost/boost/spirit/utility/impl/chset/basic_chset.hpp102
-rw-r--r--boost/boost/spirit/utility/impl/chset/basic_chset.ipp241
-rw-r--r--boost/boost/spirit/utility/impl/chset/range_run.hpp118
-rw-r--r--boost/boost/spirit/utility/impl/chset/range_run.ipp212
-rw-r--r--boost/boost/spirit/utility/impl/chset_operators.ipp662
-rw-r--r--boost/boost/spirit/utility/impl/confix.ipp217
-rw-r--r--boost/boost/spirit/utility/impl/escape_char.ipp220
-rw-r--r--boost/boost/spirit/utility/impl/lists.ipp164
-rw-r--r--boost/boost/spirit/utility/impl/regex.ipp77
-rw-r--r--boost/boost/spirit/utility/lists.hpp336
-rw-r--r--boost/boost/spirit/utility/lists_fwd.hpp27
-rw-r--r--boost/boost/spirit/utility/loops.hpp313
-rw-r--r--boost/boost/spirit/utility/regex.hpp108
-rw-r--r--boost/boost/spirit/utility/rule_parser.hpp1118
-rw-r--r--boost/boost/spirit/utility/scoped_lock.hpp108
-rw-r--r--boost/boost/spirit/utility/typeof.hpp146
-rw-r--r--boost/boost/spirit/version.hpp31
-rw-r--r--boost/boost/state_saver.hpp94
-rw-r--r--boost/boost/statechart/asynchronous_state_machine.hpp89
-rw-r--r--boost/boost/statechart/custom_reaction.hpp74
-rw-r--r--boost/boost/statechart/deep_history.hpp63
-rw-r--r--boost/boost/statechart/deferral.hpp71
-rw-r--r--boost/boost/statechart/detail/avoid_unused_warning.hpp31
-rw-r--r--boost/boost/statechart/detail/constructor.hpp139
-rw-r--r--boost/boost/statechart/detail/counted_base.hpp92
-rw-r--r--boost/boost/statechart/detail/leaf_state.hpp84
-rw-r--r--boost/boost/statechart/detail/memory.hpp72
-rw-r--r--boost/boost/statechart/detail/node_state.hpp156
-rw-r--r--boost/boost/statechart/detail/rtti_policy.hpp217
-rw-r--r--boost/boost/statechart/detail/state_base.hpp200
-rw-r--r--boost/boost/statechart/event.hpp69
-rw-r--r--boost/boost/statechart/event_base.hpp127
-rw-r--r--boost/boost/statechart/event_processor.hpp84
-rw-r--r--boost/boost/statechart/exception_translator.hpp58
-rw-r--r--boost/boost/statechart/fifo_scheduler.hpp203
-rw-r--r--boost/boost/statechart/fifo_worker.hpp198
-rw-r--r--boost/boost/statechart/history.hpp16
-rw-r--r--boost/boost/statechart/in_state_reaction.hpp91
-rw-r--r--boost/boost/statechart/null_exception_translator.hpp44
-rw-r--r--boost/boost/statechart/processor_container.hpp384
-rw-r--r--boost/boost/statechart/result.hpp122
-rw-r--r--boost/boost/statechart/shallow_history.hpp63
-rw-r--r--boost/boost/statechart/simple_state.hpp996
-rw-r--r--boost/boost/statechart/state.hpp102
-rw-r--r--boost/boost/statechart/state_machine.hpp1054
-rw-r--r--boost/boost/statechart/termination.hpp71
-rw-r--r--boost/boost/statechart/transition.hpp148
-rw-r--r--boost/boost/static_assert.hpp118
-rw-r--r--boost/boost/static_warning.hpp180
-rw-r--r--boost/boost/strong_typedef.hpp45
-rw-r--r--boost/boost/test/auto_unit_test.hpp30
-rw-r--r--boost/boost/test/detail/config.hpp146
-rw-r--r--boost/boost/test/detail/enable_warnings.hpp51
-rw-r--r--boost/boost/test/detail/fwd_decl.hpp59
-rw-r--r--boost/boost/test/detail/global_typedef.hpp84
-rw-r--r--boost/boost/test/detail/log_level.hpp60
-rw-r--r--boost/boost/test/detail/suppress_warnings.hpp51
-rw-r--r--boost/boost/test/detail/unit_test_parameters.hpp86
-rw-r--r--boost/boost/test/detail/workaround.hpp74
-rw-r--r--boost/boost/test/detail/wrap_io_saver.hpp63
-rw-r--r--boost/boost/test/exception_safety.hpp207
-rw-r--r--boost/boost/test/execution_monitor.hpp254
-rw-r--r--boost/boost/test/floating_point_comparison.hpp283
-rw-r--r--boost/boost/test/framework.hpp124
-rw-r--r--boost/boost/test/impl/compiler_log_formatter.ipp214
-rw-r--r--boost/boost/test/impl/cpp_main.ipp145
-rw-r--r--boost/boost/test/impl/exception_safety.ipp573
-rw-r--r--boost/boost/test/impl/execution_monitor.ipp711
-rw-r--r--boost/boost/test/impl/framework.ipp494
-rw-r--r--boost/boost/test/impl/interaction_based.ipp125
-rw-r--r--boost/boost/test/impl/logged_expectations.ipp274
-rw-r--r--boost/boost/test/impl/plain_report_formatter.ipp222
-rw-r--r--boost/boost/test/impl/progress_monitor.ipp120
-rw-r--r--boost/boost/test/impl/results_collector.ipp311
-rw-r--r--boost/boost/test/impl/results_reporter.ipp213
-rw-r--r--boost/boost/test/impl/test_main.ipp83
-rw-r--r--boost/boost/test/impl/test_tools.ipp677
-rw-r--r--boost/boost/test/impl/unit_test_log.ipp425
-rw-r--r--boost/boost/test/impl/unit_test_main.ipp127
-rw-r--r--boost/boost/test/impl/unit_test_monitor.ipp133
-rw-r--r--boost/boost/test/impl/unit_test_parameters.ipp366
-rw-r--r--boost/boost/test/impl/unit_test_suite.ipp259
-rw-r--r--boost/boost/test/impl/xml_log_formatter.ipp195
-rw-r--r--boost/boost/test/impl/xml_report_formatter.ipp130
-rw-r--r--boost/boost/test/included/prg_exec_monitor.hpp42
-rw-r--r--boost/boost/test/included/test_exec_monitor.hpp66
-rw-r--r--boost/boost/test/included/unit_test.hpp65
-rw-r--r--boost/boost/test/included/unit_test_framework.hpp11
-rw-r--r--boost/boost/test/interaction_based.hpp277
-rw-r--r--boost/boost/test/logged_expectations.hpp86
-rw-r--r--boost/boost/test/minimal.hpp167
-rw-r--r--boost/boost/test/mock_object.hpp344
-rw-r--r--boost/boost/test/output/compiler_log_formatter.hpp84
-rw-r--r--boost/boost/test/output/plain_report_formatter.hpp71
-rw-r--r--boost/boost/test/output/xml_log_formatter.hpp84
-rw-r--r--boost/boost/test/output/xml_report_formatter.hpp67
-rw-r--r--boost/boost/test/output_test_stream.hpp103
-rw-r--r--boost/boost/test/parameterized_test.hpp211
-rw-r--r--boost/boost/test/predicate_result.hpp113
-rw-r--r--boost/boost/test/prg_exec_monitor.hpp83
-rw-r--r--boost/boost/test/progress_monitor.hpp88
-rw-r--r--boost/boost/test/results_collector.hpp140
-rw-r--r--boost/boost/test/results_reporter.hpp98
-rw-r--r--boost/boost/test/test_case_template.hpp184
-rw-r--r--boost/boost/test/test_exec_monitor.hpp51
-rw-r--r--boost/boost/test/test_observer.hpp82
-rw-r--r--boost/boost/test/test_tools.hpp692
-rw-r--r--boost/boost/test/unit_test.hpp102
-rw-r--r--boost/boost/test/unit_test_log.hpp213
-rw-r--r--boost/boost/test/unit_test_log_formatter.hpp152
-rw-r--r--boost/boost/test/unit_test_monitor.hpp81
-rw-r--r--boost/boost/test/unit_test_suite.hpp225
-rw-r--r--boost/boost/test/unit_test_suite_impl.hpp353
-rw-r--r--boost/boost/test/utils/algorithm.hpp250
-rw-r--r--boost/boost/test/utils/assign_op.hpp50
-rw-r--r--boost/boost/test/utils/basic_cstring/basic_cstring.hpp777
-rw-r--r--boost/boost/test/utils/basic_cstring/basic_cstring_fwd.hpp61
-rw-r--r--boost/boost/test/utils/basic_cstring/bcs_char_traits.hpp168
-rw-r--r--boost/boost/test/utils/basic_cstring/compare.hpp139
-rw-r--r--boost/boost/test/utils/basic_cstring/io.hpp97
-rw-r--r--boost/boost/test/utils/callback.hpp337
-rw-r--r--boost/boost/test/utils/class_properties.hpp264
-rw-r--r--boost/boost/test/utils/custom_manip.hpp78
-rw-r--r--boost/boost/test/utils/fixed_mapping.hpp155
-rw-r--r--boost/boost/test/utils/foreach.hpp379
-rw-r--r--boost/boost/test/utils/iterator/ifstream_line_iterator.hpp134
-rw-r--r--boost/boost/test/utils/iterator/input_iterator_facade.hpp133
-rw-r--r--boost/boost/test/utils/iterator/istream_line_iterator.hpp121
-rw-r--r--boost/boost/test/utils/iterator/token_iterator.hpp456
-rw-r--r--boost/boost/test/utils/named_params.hpp341
-rw-r--r--boost/boost/test/utils/nullstream.hpp121
-rw-r--r--boost/boost/test/utils/rtti.hpp76
-rw-r--r--boost/boost/test/utils/runtime/argument.hpp115
-rw-r--r--boost/boost/test/utils/runtime/cla/argument_factory.hpp227
-rw-r--r--boost/boost/test/utils/runtime/cla/argv_traverser.cpp25
-rw-r--r--boost/boost/test/utils/runtime/cla/argv_traverser.hpp107
-rw-r--r--boost/boost/test/utils/runtime/cla/argv_traverser.ipp224
-rw-r--r--boost/boost/test/utils/runtime/cla/basic_parameter.hpp93
-rw-r--r--boost/boost/test/utils/runtime/cla/char_parameter.cpp25
-rw-r--r--boost/boost/test/utils/runtime/cla/char_parameter.hpp107
-rw-r--r--boost/boost/test/utils/runtime/cla/char_parameter.ipp69
-rw-r--r--boost/boost/test/utils/runtime/cla/detail/argument_value_usage.hpp91
-rw-r--r--boost/boost/test/utils/runtime/cla/dual_name_parameter.cpp25
-rw-r--r--boost/boost/test/utils/runtime/cla/dual_name_parameter.hpp97
-rw-r--r--boost/boost/test/utils/runtime/cla/dual_name_parameter.ipp99
-rw-r--r--boost/boost/test/utils/runtime/cla/fwd.hpp64
-rw-r--r--boost/boost/test/utils/runtime/cla/id_policy.cpp25
-rw-r--r--boost/boost/test/utils/runtime/cla/id_policy.hpp146
-rw-r--r--boost/boost/test/utils/runtime/cla/id_policy.ipp121
-rw-r--r--boost/boost/test/utils/runtime/cla/iface/argument_factory.hpp58
-rw-r--r--boost/boost/test/utils/runtime/cla/iface/id_policy.hpp72
-rw-r--r--boost/boost/test/utils/runtime/cla/modifier.hpp78
-rw-r--r--boost/boost/test/utils/runtime/cla/named_parameter.cpp25
-rw-r--r--boost/boost/test/utils/runtime/cla/named_parameter.hpp102
-rw-r--r--boost/boost/test/utils/runtime/cla/named_parameter.ipp128
-rw-r--r--boost/boost/test/utils/runtime/cla/parameter.hpp159
-rw-r--r--boost/boost/test/utils/runtime/cla/parser.cpp27
-rw-r--r--boost/boost/test/utils/runtime/cla/parser.hpp165
-rw-r--r--boost/boost/test/utils/runtime/cla/parser.ipp270
-rw-r--r--boost/boost/test/utils/runtime/cla/positional_parameter.hpp100
-rw-r--r--boost/boost/test/utils/runtime/cla/typed_parameter.hpp77
-rw-r--r--boost/boost/test/utils/runtime/cla/validation.cpp25
-rw-r--r--boost/boost/test/utils/runtime/cla/validation.hpp64
-rw-r--r--boost/boost/test/utils/runtime/cla/validation.ipp73
-rw-r--r--boost/boost/test/utils/runtime/cla/value_generator.hpp90
-rw-r--r--boost/boost/test/utils/runtime/cla/value_handler.hpp66
-rw-r--r--boost/boost/test/utils/runtime/config.hpp153
-rw-r--r--boost/boost/test/utils/runtime/configuration.hpp70
-rw-r--r--boost/boost/test/utils/runtime/env/environment.cpp32
-rw-r--r--boost/boost/test/utils/runtime/env/environment.hpp183
-rw-r--r--boost/boost/test/utils/runtime/env/environment.ipp138
-rw-r--r--boost/boost/test/utils/runtime/env/fwd.hpp57
-rw-r--r--boost/boost/test/utils/runtime/env/modifier.hpp56
-rw-r--r--boost/boost/test/utils/runtime/env/variable.hpp225
-rw-r--r--boost/boost/test/utils/runtime/file/config_file.cpp256
-rw-r--r--boost/boost/test/utils/runtime/file/config_file.hpp191
-rw-r--r--boost/boost/test/utils/runtime/file/config_file_iterator.cpp687
-rw-r--r--boost/boost/test/utils/runtime/file/config_file_iterator.hpp178
-rw-r--r--boost/boost/test/utils/runtime/fwd.hpp50
-rw-r--r--boost/boost/test/utils/runtime/interpret_argument_value.hpp172
-rw-r--r--boost/boost/test/utils/runtime/parameter.hpp47
-rw-r--r--boost/boost/test/utils/runtime/trace.hpp39
-rw-r--r--boost/boost/test/utils/runtime/validation.hpp91
-rw-r--r--boost/boost/test/utils/trivial_singleton.hpp87
-rw-r--r--boost/boost/test/utils/wrap_stringstream.hpp202
-rw-r--r--boost/boost/test/utils/xml_printer.hpp153
-rw-r--r--boost/boost/thread.hpp19
-rw-r--r--boost/boost/thread/barrier.hpp44
-rw-r--r--boost/boost/thread/condition.hpp201
-rw-r--r--boost/boost/thread/detail/config.hpp95
-rw-r--r--boost/boost/thread/detail/force_cast.hpp39
-rw-r--r--boost/boost/thread/detail/lock.hpp209
-rw-r--r--boost/boost/thread/detail/read_write_lock.hpp1106
-rw-r--r--boost/boost/thread/detail/singleton.hpp59
-rw-r--r--boost/boost/thread/detail/tss_hooks.hpp78
-rw-r--r--boost/boost/thread/exceptions.hpp94
-rw-r--r--boost/boost/thread/mutex.hpp170
-rw-r--r--boost/boost/thread/once.hpp37
-rw-r--r--boost/boost/thread/recursive_mutex.hpp184
-rw-r--r--boost/boost/thread/thread.hpp89
-rw-r--r--boost/boost/thread/tss.hpp128
-rw-r--r--boost/boost/thread/xtime.hpp54
-rw-r--r--boost/boost/throw_exception.hpp46
-rw-r--r--boost/boost/timer.hpp72
-rw-r--r--boost/boost/token_functions.hpp615
-rw-r--r--boost/boost/token_iterator.hpp128
-rw-r--r--boost/boost/tokenizer.hpp98
-rw-r--r--boost/boost/tr1/array.hpp83
-rw-r--r--boost/boost/tr1/complex.hpp243
-rw-r--r--boost/boost/tr1/detail/config.hpp140
-rw-r--r--boost/boost/tr1/detail/functor2iterator.hpp34
-rw-r--r--boost/boost/tr1/detail/math_overloads.hpp58
-rw-r--r--boost/boost/tr1/functional.hpp137
-rw-r--r--boost/boost/tr1/memory.hpp71
-rw-r--r--boost/boost/tr1/random.hpp581
-rw-r--r--boost/boost/tr1/regex.hpp142
-rw-r--r--boost/boost/tr1/tr1/algorithm27
-rw-r--r--boost/boost/tr1/tr1/array22
-rw-r--r--boost/boost/tr1/tr1/bcc32/array.h13
-rw-r--r--boost/boost/tr1/tr1/bcc32/random.h13
-rw-r--r--boost/boost/tr1/tr1/bcc32/regex.h13
-rw-r--r--boost/boost/tr1/tr1/bcc32/tuple.h13
-rw-r--r--boost/boost/tr1/tr1/bcc32/type_tra.h13
-rw-r--r--boost/boost/tr1/tr1/bitset27
-rw-r--r--boost/boost/tr1/tr1/complex31
-rw-r--r--boost/boost/tr1/tr1/deque27
-rw-r--r--boost/boost/tr1/tr1/exception39
-rw-r--r--boost/boost/tr1/tr1/fstream27
-rw-r--r--boost/boost/tr1/tr1/functional30
-rw-r--r--boost/boost/tr1/tr1/iomanip27
-rw-r--r--boost/boost/tr1/tr1/ios27
-rw-r--r--boost/boost/tr1/tr1/iostream27
-rw-r--r--boost/boost/tr1/tr1/istream27
-rw-r--r--boost/boost/tr1/tr1/iterator27
-rw-r--r--boost/boost/tr1/tr1/limits27
-rw-r--r--boost/boost/tr1/tr1/list27
-rw-r--r--boost/boost/tr1/tr1/locale27
-rw-r--r--boost/boost/tr1/tr1/map27
-rw-r--r--boost/boost/tr1/tr1/memory31
-rw-r--r--boost/boost/tr1/tr1/new35
-rw-r--r--boost/boost/tr1/tr1/numeric27
-rw-r--r--boost/boost/tr1/tr1/ostream27
-rw-r--r--boost/boost/tr1/tr1/queue27
-rw-r--r--boost/boost/tr1/tr1/random22
-rw-r--r--boost/boost/tr1/tr1/regex22
-rw-r--r--boost/boost/tr1/tr1/set27
-rw-r--r--boost/boost/tr1/tr1/sstream27
-rw-r--r--boost/boost/tr1/tr1/stack27
-rw-r--r--boost/boost/tr1/tr1/stdexcept34
-rw-r--r--boost/boost/tr1/tr1/streambuf27
-rw-r--r--boost/boost/tr1/tr1/string27
-rw-r--r--boost/boost/tr1/tr1/strstream27
-rw-r--r--boost/boost/tr1/tr1/sun/algorithm.SUNWCCh6
-rw-r--r--boost/boost/tr1/tr1/sun/array.SUNWCCh6
-rw-r--r--boost/boost/tr1/tr1/sun/bcc32.SUNWCCh6
-rw-r--r--boost/boost/tr1/tr1/sun/bitset.SUNWCCh6
-rw-r--r--boost/boost/tr1/tr1/sun/complex.SUNWCCh6
-rw-r--r--boost/boost/tr1/tr1/sun/deque.SUNWCCh6
-rw-r--r--boost/boost/tr1/tr1/sun/exception.SUNWCCh6
-rw-r--r--boost/boost/tr1/tr1/sun/fstream.SUNWCCh6
-rw-r--r--boost/boost/tr1/tr1/sun/functional.SUNWCCh6
-rw-r--r--boost/boost/tr1/tr1/sun/iomanip.SUNWCCh6
-rw-r--r--boost/boost/tr1/tr1/sun/ios.SUNWCCh6
-rw-r--r--boost/boost/tr1/tr1/sun/iostream.SUNWCCh6
-rw-r--r--boost/boost/tr1/tr1/sun/istream.SUNWCCh6
-rw-r--r--boost/boost/tr1/tr1/sun/iterator.SUNWCCh6
-rw-r--r--boost/boost/tr1/tr1/sun/limits.SUNWCCh6
-rw-r--r--boost/boost/tr1/tr1/sun/list.SUNWCCh6
-rw-r--r--boost/boost/tr1/tr1/sun/locale.SUNWCCh6
-rw-r--r--boost/boost/tr1/tr1/sun/map.SUNWCCh6
-rw-r--r--boost/boost/tr1/tr1/sun/memory.SUNWCCh6
-rw-r--r--boost/boost/tr1/tr1/sun/new.SUNWCCh6
-rw-r--r--boost/boost/tr1/tr1/sun/numeric.SUNWCCh6
-rw-r--r--boost/boost/tr1/tr1/sun/ostream.SUNWCCh6
-rw-r--r--boost/boost/tr1/tr1/sun/queue.SUNWCCh6
-rw-r--r--boost/boost/tr1/tr1/sun/random.SUNWCCh6
-rw-r--r--boost/boost/tr1/tr1/sun/regex.SUNWCCh6
-rw-r--r--boost/boost/tr1/tr1/sun/set.SUNWCCh6
-rw-r--r--boost/boost/tr1/tr1/sun/sstream.SUNWCCh6
-rw-r--r--boost/boost/tr1/tr1/sun/stack.SUNWCCh6
-rw-r--r--boost/boost/tr1/tr1/sun/stdexcept.SUNWCCh6
-rw-r--r--boost/boost/tr1/tr1/sun/streambuf.SUNWCCh6
-rw-r--r--boost/boost/tr1/tr1/sun/string.SUNWCCh6
-rw-r--r--boost/boost/tr1/tr1/sun/strstream.SUNWCCh6
-rw-r--r--boost/boost/tr1/tr1/sun/sun.SUNWCCh6
-rw-r--r--boost/boost/tr1/tr1/sun/tuple.SUNWCCh6
-rw-r--r--boost/boost/tr1/tr1/sun/type_traits.SUNWCCh6
-rw-r--r--boost/boost/tr1/tr1/sun/typeinfo.SUNWCCh6
-rw-r--r--boost/boost/tr1/tr1/sun/utility.SUNWCCh6
-rw-r--r--boost/boost/tr1/tr1/sun/valarray.SUNWCCh6
-rw-r--r--boost/boost/tr1/tr1/sun/vector.SUNWCCh6
-rw-r--r--boost/boost/tr1/tr1/tuple22
-rw-r--r--boost/boost/tr1/tr1/type_traits20
-rw-r--r--boost/boost/tr1/tr1/typeinfo27
-rw-r--r--boost/boost/tr1/tr1/utility31
-rw-r--r--boost/boost/tr1/tr1/valarray27
-rw-r--r--boost/boost/tr1/tr1/vector27
-rw-r--r--boost/boost/tr1/tuple.hpp83
-rw-r--r--boost/boost/tr1/type_traits.hpp79
-rw-r--r--boost/boost/tr1/utility.hpp122
-rw-r--r--boost/boost/tuple/detail/tuple_basic.hpp944
-rw-r--r--boost/boost/tuple/detail/tuple_basic_no_partial_spec.hpp841
-rw-r--r--boost/boost/tuple/tuple.hpp90
-rw-r--r--boost/boost/tuple/tuple_comparison.hpp175
-rw-r--r--boost/boost/tuple/tuple_io.hpp525
-rw-r--r--boost/boost/type.hpp18
-rw-r--r--boost/boost/type_traits.hpp80
-rw-r--r--boost/boost/type_traits/add_const.hpp47
-rw-r--r--boost/boost/type_traits/add_cv.hpp48
-rw-r--r--boost/boost/type_traits/add_pointer.hpp72
-rw-r--r--boost/boost/type_traits/add_reference.hpp89
-rw-r--r--boost/boost/type_traits/add_volatile.hpp47
-rw-r--r--boost/boost/type_traits/aligned_storage.hpp13
-rw-r--r--boost/boost/type_traits/alignment_of.hpp100
-rw-r--r--boost/boost/type_traits/alignment_traits.hpp15
-rw-r--r--boost/boost/type_traits/arithmetic_traits.hpp20
-rw-r--r--boost/boost/type_traits/array_traits.hpp15
-rw-r--r--boost/boost/type_traits/broken_compiler_spec.hpp117
-rw-r--r--boost/boost/type_traits/composite_traits.hpp29
-rw-r--r--boost/boost/type_traits/config.hpp76
-rw-r--r--boost/boost/type_traits/conversion_traits.hpp17
-rw-r--r--boost/boost/type_traits/cv_traits.hpp24
-rw-r--r--boost/boost/type_traits/decay.hpp44
-rw-r--r--boost/boost/type_traits/detail/bool_trait_def.hpp173
-rw-r--r--boost/boost/type_traits/detail/bool_trait_undef.hpp27
-rw-r--r--boost/boost/type_traits/detail/cv_traits_impl.hpp97
-rw-r--r--boost/boost/type_traits/detail/false_result.hpp28
-rw-r--r--boost/boost/type_traits/detail/ice_and.hpp35
-rw-r--r--boost/boost/type_traits/detail/ice_eq.hpp36
-rw-r--r--boost/boost/type_traits/detail/ice_not.hpp31
-rw-r--r--boost/boost/type_traits/detail/ice_or.hpp34
-rw-r--r--boost/boost/type_traits/detail/is_function_ptr_helper.hpp220
-rw-r--r--boost/boost/type_traits/detail/is_function_ptr_tester.hpp654
-rw-r--r--boost/boost/type_traits/detail/is_mem_fun_pointer_impl.hpp817
-rw-r--r--boost/boost/type_traits/detail/is_mem_fun_pointer_tester.hpp2759
-rw-r--r--boost/boost/type_traits/detail/size_t_trait_def.hpp58
-rw-r--r--boost/boost/type_traits/detail/size_t_trait_undef.hpp16
-rw-r--r--boost/boost/type_traits/detail/template_arity_spec.hpp31
-rw-r--r--boost/boost/type_traits/detail/type_trait_def.hpp61
-rw-r--r--boost/boost/type_traits/detail/type_trait_undef.hpp19
-rw-r--r--boost/boost/type_traits/detail/wrap.hpp18
-rw-r--r--boost/boost/type_traits/detail/yes_no_type.hpp26
-rw-r--r--boost/boost/type_traits/extent.hpp134
-rw-r--r--boost/boost/type_traits/function_traits.hpp236
-rw-r--r--boost/boost/type_traits/has_nothrow_assign.hpp38
-rw-r--r--boost/boost/type_traits/has_nothrow_constructor.hpp38
-rw-r--r--boost/boost/type_traits/has_nothrow_copy.hpp38
-rw-r--r--boost/boost/type_traits/has_nothrow_destructor.hpp25
-rw-r--r--boost/boost/type_traits/has_trivial_assign.hpp50
-rw-r--r--boost/boost/type_traits/has_trivial_constructor.hpp42
-rw-r--r--boost/boost/type_traits/has_trivial_copy.hpp48
-rw-r--r--boost/boost/type_traits/has_trivial_destructor.hpp42
-rw-r--r--boost/boost/type_traits/has_virtual_destructor.hpp25
-rw-r--r--boost/boost/type_traits/ice.hpp20
-rw-r--r--boost/boost/type_traits/integral_constant.hpp53
-rw-r--r--boost/boost/type_traits/intrinsics.hpp137
-rw-r--r--boost/boost/type_traits/is_abstract.hpp137
-rw-r--r--boost/boost/type_traits/is_arithmetic.hpp43
-rw-r--r--boost/boost/type_traits/is_array.hpp90
-rw-r--r--boost/boost/type_traits/is_base_and_derived.hpp223
-rw-r--r--boost/boost/type_traits/is_base_of.hpp40
-rw-r--r--boost/boost/type_traits/is_class.hpp128
-rw-r--r--boost/boost/type_traits/is_compound.hpp40
-rw-r--r--boost/boost/type_traits/is_const.hpp142
-rw-r--r--boost/boost/type_traits/is_convertible.hpp416
-rw-r--r--boost/boost/type_traits/is_empty.hpp211
-rw-r--r--boost/boost/type_traits/is_enum.hpp180
-rw-r--r--boost/boost/type_traits/is_float.hpp27
-rw-r--r--boost/boost/type_traits/is_floating_point.hpp27
-rw-r--r--boost/boost/type_traits/is_function.hpp88
-rw-r--r--boost/boost/type_traits/is_fundamental.hpp41
-rw-r--r--boost/boost/type_traits/is_integral.hpp71
-rw-r--r--boost/boost/type_traits/is_member_function_pointer.hpp126
-rw-r--r--boost/boost/type_traits/is_member_object_pointer.hpp46
-rw-r--r--boost/boost/type_traits/is_member_pointer.hpp108
-rw-r--r--boost/boost/type_traits/is_object.hpp53
-rw-r--r--boost/boost/type_traits/is_pod.hpp135
-rw-r--r--boost/boost/type_traits/is_pointer.hpp149
-rw-r--r--boost/boost/type_traits/is_polymorphic.hpp102
-rw-r--r--boost/boost/type_traits/is_reference.hpp116
-rw-r--r--boost/boost/type_traits/is_same.hpp103
-rw-r--r--boost/boost/type_traits/is_scalar.hpp55
-rw-r--r--boost/boost/type_traits/is_signed.hpp117
-rw-r--r--boost/boost/type_traits/is_stateless.hpp48
-rw-r--r--boost/boost/type_traits/is_union.hpp49
-rw-r--r--boost/boost/type_traits/is_unsigned.hpp114
-rw-r--r--boost/boost/type_traits/is_void.hpp33
-rw-r--r--boost/boost/type_traits/is_volatile.hpp131
-rw-r--r--boost/boost/type_traits/msvc/remove_all_extents.hpp47
-rw-r--r--boost/boost/type_traits/msvc/remove_bounds.hpp43
-rw-r--r--boost/boost/type_traits/msvc/remove_const.hpp143
-rw-r--r--boost/boost/type_traits/msvc/remove_cv.hpp190
-rw-r--r--boost/boost/type_traits/msvc/remove_extent.hpp43
-rw-r--r--boost/boost/type_traits/msvc/remove_pointer.hpp42
-rw-r--r--boost/boost/type_traits/msvc/remove_reference.hpp42
-rw-r--r--boost/boost/type_traits/msvc/remove_volatile.hpp143
-rw-r--r--boost/boost/type_traits/msvc/typeof.hpp50
-rw-r--r--boost/boost/type_traits/object_traits.hpp33
-rw-r--r--boost/boost/type_traits/rank.hpp81
-rw-r--r--boost/boost/type_traits/reference_traits.hpp15
-rw-r--r--boost/boost/type_traits/remove_all_extents.hpp48
-rw-r--r--boost/boost/type_traits/remove_bounds.hpp48
-rw-r--r--boost/boost/type_traits/remove_const.hpp78
-rw-r--r--boost/boost/type_traits/remove_cv.hpp61
-rw-r--r--boost/boost/type_traits/remove_extent.hpp48
-rw-r--r--boost/boost/type_traits/remove_pointer.hpp43
-rw-r--r--boost/boost/type_traits/remove_reference.hpp50
-rw-r--r--boost/boost/type_traits/remove_volatile.hpp77
-rw-r--r--boost/boost/type_traits/same_traits.hpp15
-rw-r--r--boost/boost/type_traits/transform_traits.hpp21
-rw-r--r--boost/boost/type_traits/transform_traits_spec.hpp14
-rw-r--r--boost/boost/type_traits/type_with_alignment.hpp288
-rw-r--r--boost/boost/typeof/encode_decode.hpp57
-rw-r--r--boost/boost/typeof/encode_decode_params.hpp34
-rw-r--r--boost/boost/typeof/incr_registration_group.hpp14
-rw-r--r--boost/boost/typeof/int_encoding.hpp116
-rw-r--r--boost/boost/typeof/integral_template_param.hpp80
-rw-r--r--boost/boost/typeof/message.hpp8
-rw-r--r--boost/boost/typeof/modifiers.hpp92
-rw-r--r--boost/boost/typeof/msvc/typeof_impl.hpp198
-rw-r--r--boost/boost/typeof/native.hpp60
-rw-r--r--boost/boost/typeof/pointers_data_members.hpp39
-rw-r--r--boost/boost/typeof/register_functions.hpp43
-rw-r--r--boost/boost/typeof/register_functions_iterate.hpp85
-rw-r--r--boost/boost/typeof/register_fundamental.hpp62
-rw-r--r--boost/boost/typeof/register_mem_functions.hpp32
-rw-r--r--boost/boost/typeof/std/bitset.hpp15
-rw-r--r--boost/boost/typeof/std/complex.hpp15
-rw-r--r--boost/boost/typeof/std/deque.hpp17
-rw-r--r--boost/boost/typeof/std/fstream.hpp27
-rw-r--r--boost/boost/typeof/std/functional.hpp55
-rw-r--r--boost/boost/typeof/std/iostream.hpp18
-rw-r--r--boost/boost/typeof/std/istream.hpp21
-rw-r--r--boost/boost/typeof/std/iterator.hpp58
-rw-r--r--boost/boost/typeof/std/list.hpp17
-rw-r--r--boost/boost/typeof/std/locale.hpp40
-rw-r--r--boost/boost/typeof/std/map.hpp23
-rw-r--r--boost/boost/typeof/std/memory.hpp17
-rw-r--r--boost/boost/typeof/std/ostream.hpp18
-rw-r--r--boost/boost/typeof/std/queue.hpp17
-rw-r--r--boost/boost/typeof/std/set.hpp22
-rw-r--r--boost/boost/typeof/std/sstream.hpp32
-rw-r--r--boost/boost/typeof/std/stack.hpp17
-rw-r--r--boost/boost/typeof/std/streambuf.hpp17
-rw-r--r--boost/boost/typeof/std/string.hpp20
-rw-r--r--boost/boost/typeof/std/utility.hpp15
-rw-r--r--boost/boost/typeof/std/valarray.hpp21
-rw-r--r--boost/boost/typeof/std/vector.hpp17
-rw-r--r--boost/boost/typeof/template_encoding.hpp152
-rw-r--r--boost/boost/typeof/template_template_param.hpp125
-rw-r--r--boost/boost/typeof/type_encoding.hpp27
-rw-r--r--boost/boost/typeof/type_template_param.hpp37
-rw-r--r--boost/boost/typeof/typeof.hpp150
-rw-r--r--boost/boost/typeof/typeof_impl.hpp152
-rw-r--r--boost/boost/typeof/vector.hpp163
-rw-r--r--boost/boost/typeof/vector100.hpp321
-rw-r--r--boost/boost/typeof/vector150.hpp471
-rw-r--r--boost/boost/typeof/vector200.hpp621
-rw-r--r--boost/boost/typeof/vector50.hpp171
-rw-r--r--boost/boost/utility.hpp19
-rw-r--r--boost/boost/utility/addressof.hpp58
-rw-r--r--boost/boost/utility/base_from_member.hpp87
-rw-r--r--boost/boost/utility/compare_pointees.hpp68
-rw-r--r--boost/boost/utility/detail/in_place_factory_prefix.hpp33
-rw-r--r--boost/boost/utility/detail/in_place_factory_suffix.hpp23
-rw-r--r--boost/boost/utility/detail/result_of_iterate.hpp86
-rw-r--r--boost/boost/utility/enable_if.hpp119
-rw-r--r--boost/boost/utility/in_place_factory.hpp58
-rw-r--r--boost/boost/utility/result_of.hpp66
-rw-r--r--boost/boost/utility/typed_in_place_factory.hpp57
-rw-r--r--boost/boost/utility/value_init.hpp77
-rw-r--r--boost/boost/variant.hpp27
-rw-r--r--boost/boost/variant/apply_visitor.hpp20
-rw-r--r--boost/boost/variant/bad_visit.hpp41
-rw-r--r--boost/boost/variant/detail/apply_visitor_binary.hpp172
-rw-r--r--boost/boost/variant/detail/apply_visitor_delayed.hpp85
-rw-r--r--boost/boost/variant/detail/apply_visitor_unary.hpp79
-rw-r--r--boost/boost/variant/detail/backup_holder.hpp94
-rw-r--r--boost/boost/variant/detail/bool_trait_def.hpp30
-rw-r--r--boost/boost/variant/detail/bool_trait_undef.hpp21
-rw-r--r--boost/boost/variant/detail/cast_storage.hpp48
-rw-r--r--boost/boost/variant/detail/config.hpp38
-rw-r--r--boost/boost/variant/detail/enable_recursive.hpp162
-rw-r--r--boost/boost/variant/detail/enable_recursive_fwd.hpp116
-rw-r--r--boost/boost/variant/detail/forced_return.hpp104
-rw-r--r--boost/boost/variant/detail/generic_result_type.hpp88
-rw-r--r--boost/boost/variant/detail/has_nothrow_move.hpp106
-rw-r--r--boost/boost/variant/detail/has_trivial_move.hpp100
-rw-r--r--boost/boost/variant/detail/initializer.hpp265
-rw-r--r--boost/boost/variant/detail/make_variant_list.hpp60
-rw-r--r--boost/boost/variant/detail/move.hpp166
-rw-r--r--boost/boost/variant/detail/over_sequence.hpp95
-rw-r--r--boost/boost/variant/detail/substitute.hpp231
-rw-r--r--boost/boost/variant/detail/substitute_fwd.hpp59
-rw-r--r--boost/boost/variant/detail/variant_io.hpp92
-rw-r--r--boost/boost/variant/detail/visitation_impl.hpp286
-rw-r--r--boost/boost/variant/get.hpp202
-rw-r--r--boost/boost/variant/recursive_variant.hpp182
-rw-r--r--boost/boost/variant/recursive_wrapper.hpp123
-rw-r--r--boost/boost/variant/recursive_wrapper_fwd.hpp147
-rw-r--r--boost/boost/variant/static_visitor.hpp97
-rw-r--r--boost/boost/variant/variant.hpp1828
-rw-r--r--boost/boost/variant/variant_fwd.hpp253
-rw-r--r--boost/boost/variant/visitor_ptr.hpp116
-rw-r--r--boost/boost/vector_property_map.hpp92
-rw-r--r--boost/boost/version.hpp37
-rw-r--r--boost/boost/visit_each.hpp29
-rw-r--r--boost/boost/wave.hpp21
-rw-r--r--boost/boost/wave/cpp_context.hpp460
-rw-r--r--boost/boost/wave/cpp_exceptions.hpp421
-rw-r--r--boost/boost/wave/cpp_iteration_context.hpp205
-rw-r--r--boost/boost/wave/cpp_throw.hpp128
-rw-r--r--boost/boost/wave/cpplexer/convert_trigraphs.hpp139
-rw-r--r--boost/boost/wave/cpplexer/cpp_lex_interface.hpp113
-rw-r--r--boost/boost/wave/cpplexer/cpp_lex_iterator.hpp200
-rw-r--r--boost/boost/wave/cpplexer/cpp_lex_token.hpp281
-rw-r--r--boost/boost/wave/cpplexer/cpplexer_exceptions.hpp250
-rw-r--r--boost/boost/wave/cpplexer/detect_include_guards.hpp263
-rw-r--r--boost/boost/wave/cpplexer/re2clex/aq.hpp64
-rw-r--r--boost/boost/wave/cpplexer/re2clex/cpp_re.hpp55
-rw-r--r--boost/boost/wave/cpplexer/re2clex/cpp_re2c_lexer.hpp408
-rw-r--r--boost/boost/wave/cpplexer/re2clex/scanner.hpp72
-rw-r--r--boost/boost/wave/cpplexer/token_cache.hpp72
-rw-r--r--boost/boost/wave/cpplexer/validate_universal_char.hpp322
-rw-r--r--boost/boost/wave/grammars/cpp_chlit_grammar.hpp345
-rw-r--r--boost/boost/wave/grammars/cpp_defined_grammar.hpp190
-rw-r--r--boost/boost/wave/grammars/cpp_defined_grammar_gen.hpp85
-rw-r--r--boost/boost/wave/grammars/cpp_expression_grammar.hpp850
-rw-r--r--boost/boost/wave/grammars/cpp_expression_grammar_gen.hpp75
-rw-r--r--boost/boost/wave/grammars/cpp_expression_value.hpp882
-rw-r--r--boost/boost/wave/grammars/cpp_grammar.hpp754
-rw-r--r--boost/boost/wave/grammars/cpp_grammar_gen.hpp110
-rw-r--r--boost/boost/wave/grammars/cpp_intlit_grammar.hpp192
-rw-r--r--boost/boost/wave/grammars/cpp_literal_grammar_gen.hpp77
-rw-r--r--boost/boost/wave/grammars/cpp_predef_macros_gen.hpp80
-rw-r--r--boost/boost/wave/grammars/cpp_predef_macros_grammar.hpp173
-rw-r--r--boost/boost/wave/grammars/cpp_value_error.hpp51
-rw-r--r--boost/boost/wave/language_support.hpp178
-rw-r--r--boost/boost/wave/preprocessing_hooks.hpp324
-rw-r--r--boost/boost/wave/token_ids.hpp345
-rw-r--r--boost/boost/wave/util/cpp_ifblock.hpp161
-rw-r--r--boost/boost/wave/util/cpp_include_paths.hpp506
-rw-r--r--boost/boost/wave/util/cpp_iterator.hpp2111
-rw-r--r--boost/boost/wave/util/cpp_macromap.hpp1748
-rw-r--r--boost/boost/wave/util/cpp_macromap_predef.hpp283
-rw-r--r--boost/boost/wave/util/cpp_macromap_utils.hpp537
-rw-r--r--boost/boost/wave/util/file_position.hpp231
-rw-r--r--boost/boost/wave/util/flex_string.hpp2428
-rw-r--r--boost/boost/wave/util/functor_input.hpp155
-rw-r--r--boost/boost/wave/util/insert_whitespace_detection.hpp352
-rw-r--r--boost/boost/wave/util/interpret_pragma.hpp202
-rw-r--r--boost/boost/wave/util/iteration_context.hpp82
-rw-r--r--boost/boost/wave/util/macro_definition.hpp175
-rw-r--r--boost/boost/wave/util/macro_helpers.hpp260
-rw-r--r--boost/boost/wave/util/pattern_parser.hpp65
-rw-r--r--boost/boost/wave/util/symbol_table.hpp68
-rw-r--r--boost/boost/wave/util/time_conversion_helper.hpp159
-rw-r--r--boost/boost/wave/util/transform_iterator.hpp169
-rw-r--r--boost/boost/wave/util/unput_queue_iterator.hpp465
-rw-r--r--boost/boost/wave/wave_config.hpp403
-rw-r--r--boost/boost/wave/wave_config_constant.hpp83
-rw-r--r--boost/boost/wave/wave_version.hpp26
-rw-r--r--boost/boost/wave/whitespace_handling.hpp228
-rw-r--r--boost/boost/weak_ptr.hpp194
-rw-r--r--boost/boost/xpressive/basic_regex.hpp239
-rw-r--r--boost/boost/xpressive/detail/core/access.hpp131
-rw-r--r--boost/boost/xpressive/detail/core/action.hpp69
-rw-r--r--boost/boost/xpressive/detail/core/action_state.hpp72
-rw-r--r--boost/boost/xpressive/detail/core/adaptor.hpp78
-rw-r--r--boost/boost/xpressive/detail/core/finder.hpp194
-rw-r--r--boost/boost/xpressive/detail/core/flow_control.hpp69
-rw-r--r--boost/boost/xpressive/detail/core/icase.hpp33
-rw-r--r--boost/boost/xpressive/detail/core/linker.hpp275
-rw-r--r--boost/boost/xpressive/detail/core/matcher/action_matcher.hpp77
-rw-r--r--boost/boost/xpressive/detail/core/matcher/alternate_end_matcher.hpp51
-rw-r--r--boost/boost/xpressive/detail/core/matcher/alternate_matcher.hpp211
-rw-r--r--boost/boost/xpressive/detail/core/matcher/any_matcher.hpp50
-rw-r--r--boost/boost/xpressive/detail/core/matcher/assert_bol_matcher.hpp57
-rw-r--r--boost/boost/xpressive/detail/core/matcher/assert_bos_matcher.hpp38
-rw-r--r--boost/boost/xpressive/detail/core/matcher/assert_eol_matcher.hpp57
-rw-r--r--boost/boost/xpressive/detail/core/matcher/assert_eos_matcher.hpp38
-rw-r--r--boost/boost/xpressive/detail/core/matcher/assert_line_base.hpp67
-rw-r--r--boost/boost/xpressive/detail/core/matcher/assert_word_matcher.hpp112
-rw-r--r--boost/boost/xpressive/detail/core/matcher/charset_matcher.hpp62
-rw-r--r--boost/boost/xpressive/detail/core/matcher/end_matcher.hpp66
-rw-r--r--boost/boost/xpressive/detail/core/matcher/epsilon_matcher.hpp69
-rw-r--r--boost/boost/xpressive/detail/core/matcher/keeper_matcher.hpp97
-rw-r--r--boost/boost/xpressive/detail/core/matcher/literal_matcher.hpp63
-rw-r--r--boost/boost/xpressive/detail/core/matcher/logical_newline_matcher.hpp78
-rw-r--r--boost/boost/xpressive/detail/core/matcher/lookahead_matcher.hpp144
-rw-r--r--boost/boost/xpressive/detail/core/matcher/lookbehind_matcher.hpp175
-rw-r--r--boost/boost/xpressive/detail/core/matcher/mark_begin_matcher.hpp56
-rw-r--r--boost/boost/xpressive/detail/core/matcher/mark_end_matcher.hpp64
-rw-r--r--boost/boost/xpressive/detail/core/matcher/mark_matcher.hpp86
-rw-r--r--boost/boost/xpressive/detail/core/matcher/posix_charset_matcher.hpp68
-rw-r--r--boost/boost/xpressive/detail/core/matcher/range_matcher.hpp82
-rw-r--r--boost/boost/xpressive/detail/core/matcher/regex_byref_matcher.hpp69
-rw-r--r--boost/boost/xpressive/detail/core/matcher/regex_matcher.hpp63
-rw-r--r--boost/boost/xpressive/detail/core/matcher/repeat_begin_matcher.hpp69
-rw-r--r--boost/boost/xpressive/detail/core/matcher/repeat_end_matcher.hpp121
-rw-r--r--boost/boost/xpressive/detail/core/matcher/set_matcher.hpp145
-rw-r--r--boost/boost/xpressive/detail/core/matcher/simple_repeat_matcher.hpp217
-rw-r--r--boost/boost/xpressive/detail/core/matcher/string_matcher.hpp87
-rw-r--r--boost/boost/xpressive/detail/core/matcher/true_matcher.hpp38
-rw-r--r--boost/boost/xpressive/detail/core/matchers.hpp47
-rw-r--r--boost/boost/xpressive/detail/core/optimize.hpp98
-rw-r--r--boost/boost/xpressive/detail/core/peeker.hpp197
-rw-r--r--boost/boost/xpressive/detail/core/quant_style.hpp157
-rw-r--r--boost/boost/xpressive/detail/core/regex_impl.hpp105
-rw-r--r--boost/boost/xpressive/detail/core/results_cache.hpp141
-rw-r--r--boost/boost/xpressive/detail/core/state.hpp343
-rw-r--r--boost/boost/xpressive/detail/core/sub_match_impl.hpp43
-rw-r--r--boost/boost/xpressive/detail/core/sub_match_vector.hpp171
-rw-r--r--boost/boost/xpressive/detail/detail_fwd.hpp337
-rw-r--r--boost/boost/xpressive/detail/dynamic/dynamic.hpp438
-rw-r--r--boost/boost/xpressive/detail/dynamic/matchable.hpp155
-rw-r--r--boost/boost/xpressive/detail/dynamic/parse_charset.hpp360
-rw-r--r--boost/boost/xpressive/detail/dynamic/parser.hpp346
-rw-r--r--boost/boost/xpressive/detail/dynamic/parser_enum.hpp72
-rw-r--r--boost/boost/xpressive/detail/dynamic/parser_traits.hpp400
-rw-r--r--boost/boost/xpressive/detail/static/as_xpr.hpp175
-rw-r--r--boost/boost/xpressive/detail/static/compile.hpp91
-rw-r--r--boost/boost/xpressive/detail/static/is_pure.hpp249
-rw-r--r--boost/boost/xpressive/detail/static/modifier.hpp61
-rw-r--r--boost/boost/xpressive/detail/static/placeholders.hpp162
-rw-r--r--boost/boost/xpressive/detail/static/productions/alt_compilers.hpp96
-rw-r--r--boost/boost/xpressive/detail/static/productions/charset_transforms.hpp140
-rw-r--r--boost/boost/xpressive/detail/static/productions/complement_compiler.hpp251
-rw-r--r--boost/boost/xpressive/detail/static/productions/domain_tags.hpp24
-rw-r--r--boost/boost/xpressive/detail/static/productions/independent_compiler.hpp135
-rw-r--r--boost/boost/xpressive/detail/static/productions/marker_compiler.hpp50
-rw-r--r--boost/boost/xpressive/detail/static/productions/marker_transform.hpp94
-rw-r--r--boost/boost/xpressive/detail/static/productions/modify_compiler.hpp82
-rw-r--r--boost/boost/xpressive/detail/static/productions/noop_compiler.hpp55
-rw-r--r--boost/boost/xpressive/detail/static/productions/productions.hpp108
-rw-r--r--boost/boost/xpressive/detail/static/productions/quant_compilers.hpp141
-rw-r--r--boost/boost/xpressive/detail/static/productions/quant_traits.hpp102
-rw-r--r--boost/boost/xpressive/detail/static/productions/quant_transforms.hpp185
-rw-r--r--boost/boost/xpressive/detail/static/productions/set_compilers.hpp171
-rw-r--r--boost/boost/xpressive/detail/static/productions/transmogrify.hpp200
-rw-r--r--boost/boost/xpressive/detail/static/productions/visitor.hpp142
-rw-r--r--boost/boost/xpressive/detail/static/regex_operators.hpp164
-rw-r--r--boost/boost/xpressive/detail/static/static.hpp292
-rw-r--r--boost/boost/xpressive/detail/static/type_traits.hpp91
-rw-r--r--boost/boost/xpressive/detail/static/width_of.hpp267
-rw-r--r--boost/boost/xpressive/detail/utility/algorithm.hpp102
-rw-r--r--boost/boost/xpressive/detail/utility/any.hpp103
-rw-r--r--boost/boost/xpressive/detail/utility/boyer_moore.hpp201
-rw-r--r--boost/boost/xpressive/detail/utility/chset/basic_chset.hpp150
-rw-r--r--boost/boost/xpressive/detail/utility/chset/basic_chset.ipp409
-rw-r--r--boost/boost/xpressive/detail/utility/chset/chset.hpp164
-rw-r--r--boost/boost/xpressive/detail/utility/chset/range_run.hpp102
-rw-r--r--boost/boost/xpressive/detail/utility/chset/range_run.ipp237
-rw-r--r--boost/boost/xpressive/detail/utility/cons.hpp304
-rw-r--r--boost/boost/xpressive/detail/utility/dont_care.hpp25
-rw-r--r--boost/boost/xpressive/detail/utility/hash_peek_bitset.hpp175
-rw-r--r--boost/boost/xpressive/detail/utility/ignore_unused.hpp26
-rw-r--r--boost/boost/xpressive/detail/utility/literals.hpp93
-rw-r--r--boost/boost/xpressive/detail/utility/never_true.hpp25
-rw-r--r--boost/boost/xpressive/detail/utility/save_restore.hpp55
-rw-r--r--boost/boost/xpressive/detail/utility/sequence_stack.hpp241
-rw-r--r--boost/boost/xpressive/detail/utility/tracking_ptr.hpp489
-rw-r--r--boost/boost/xpressive/detail/utility/traits_utils.hpp90
-rw-r--r--boost/boost/xpressive/match_results.hpp524
-rw-r--r--boost/boost/xpressive/proto/arg_traits.hpp123
-rw-r--r--boost/boost/xpressive/proto/compiler/branch.hpp63
-rw-r--r--boost/boost/xpressive/proto/compiler/conditional.hpp54
-rw-r--r--boost/boost/xpressive/proto/compiler/error.hpp31
-rw-r--r--boost/boost/xpressive/proto/compiler/fold.hpp113
-rw-r--r--boost/boost/xpressive/proto/compiler/switch.hpp55
-rw-r--r--boost/boost/xpressive/proto/compiler/transform.hpp253
-rw-r--r--boost/boost/xpressive/proto/op_base.hpp279
-rw-r--r--boost/boost/xpressive/proto/op_tags.hpp100
-rw-r--r--boost/boost/xpressive/proto/operators.hpp135
-rw-r--r--boost/boost/xpressive/proto/proto.hpp44
-rw-r--r--boost/boost/xpressive/proto/proto_fwd.hpp199
-rw-r--r--boost/boost/xpressive/proto/proto_typeof.hpp75
-rw-r--r--boost/boost/xpressive/regex_algorithms.hpp488
-rw-r--r--boost/boost/xpressive/regex_compiler.hpp553
-rw-r--r--boost/boost/xpressive/regex_constants.hpp282
-rw-r--r--boost/boost/xpressive/regex_error.hpp82
-rw-r--r--boost/boost/xpressive/regex_iterator.hpp231
-rw-r--r--boost/boost/xpressive/regex_primitives.hpp655
-rw-r--r--boost/boost/xpressive/regex_token_iterator.hpp298
-rw-r--r--boost/boost/xpressive/regex_traits.hpp84
-rw-r--r--boost/boost/xpressive/sub_match.hpp331
-rw-r--r--boost/boost/xpressive/traits/c_regex_traits.hpp366
-rw-r--r--boost/boost/xpressive/traits/cpp_regex_traits.hpp676
-rw-r--r--boost/boost/xpressive/traits/detail/c_ctype.hpp841
-rw-r--r--boost/boost/xpressive/traits/null_regex_traits.hpp233
-rw-r--r--boost/boost/xpressive/xpressive.hpp21
-rw-r--r--boost/boost/xpressive/xpressive_dynamic.hpp25
-rw-r--r--boost/boost/xpressive/xpressive_fwd.hpp167
-rw-r--r--boost/boost/xpressive/xpressive_static.hpp32
-rw-r--r--boost/boost/xpressive/xpressive_typeof.hpp100
3782 files changed, 662981 insertions, 0 deletions
diff --git a/boost/boost/Debug/BuildLog.htm b/boost/boost/Debug/BuildLog.htm
new file mode 100644
index 00000000000..d4047fd6cf2
--- /dev/null
+++ b/boost/boost/Debug/BuildLog.htm
Binary files differ
diff --git a/boost/boost/Debug/boost.lib b/boost/boost/Debug/boost.lib
new file mode 100644
index 00000000000..43e8180e7c2
--- /dev/null
+++ b/boost/boost/Debug/boost.lib
Binary files differ
diff --git a/boost/boost/Debug/vc90.idb b/boost/boost/Debug/vc90.idb
new file mode 100644
index 00000000000..7eecc514648
--- /dev/null
+++ b/boost/boost/Debug/vc90.idb
Binary files differ
diff --git a/boost/boost/Debug/vc90.pdb b/boost/boost/Debug/vc90.pdb
new file mode 100644
index 00000000000..e30186863e3
--- /dev/null
+++ b/boost/boost/Debug/vc90.pdb
Binary files differ
diff --git a/boost/boost/ReadMe.txt b/boost/boost/ReadMe.txt
new file mode 100644
index 00000000000..d8858669edd
--- /dev/null
+++ b/boost/boost/ReadMe.txt
@@ -0,0 +1,22 @@
+========================================================================
+ STATIC LIBRARY : boost Project Overview
+========================================================================
+
+AppWizard has created this boost library project for you.
+
+No source files were created as part of your project.
+
+
+boost.vcproj
+ This is the main project file for VC++ projects generated using an Application Wizard.
+ It contains information about the version of Visual C++ that generated the file, and
+ information about the platforms, configurations, and project features selected with the
+ Application Wizard.
+
+/////////////////////////////////////////////////////////////////////////////
+Other notes:
+
+AppWizard uses "TODO:" comments to indicate parts of the source code you
+should add to or customize.
+
+/////////////////////////////////////////////////////////////////////////////
diff --git a/boost/boost/algorithm/minmax.hpp b/boost/boost/algorithm/minmax.hpp
new file mode 100644
index 00000000000..2b5101a4810
--- /dev/null
+++ b/boost/boost/algorithm/minmax.hpp
@@ -0,0 +1,47 @@
+// (C) Copyright Herve Bronnimann 2004.
+// 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)
+
+/*
+ Revision history:
+ 1 July 2004
+ Split the code into two headers to lessen dependence on
+ Boost.tuple. (Herve)
+ 26 June 2004
+ Added the code for the boost minmax library. (Herve)
+*/
+
+#ifndef BOOST_ALGORITHM_MINMAX_HPP
+#define BOOST_ALGORITHM_MINMAX_HPP
+
+/* PROPOSED STANDARD EXTENSIONS:
+ *
+ * minmax(a, b)
+ * Effect: (b<a) ? std::make_pair(b,a) : std::make_pair(a,b);
+ *
+ * minmax(a, b, comp)
+ * Effect: comp(b,a) ? std::make_pair(b,a) : std::make_pair(a,b);
+ *
+ */
+
+#include <boost/tuple/tuple.hpp> // for using pairs with boost::cref
+#include <boost/ref.hpp>
+
+namespace boost {
+
+ template <typename T>
+ tuple< T const&, T const& >
+ minmax(T const& a, T const& b) {
+ return (b<a) ? make_tuple(cref(b),cref(a)) : make_tuple(cref(a),cref(b));
+ }
+
+ template <typename T, class BinaryPredicate>
+ tuple< T const&, T const& >
+ minmax(T const& a, T const& b, BinaryPredicate comp) {
+ return comp(b,a) ? make_tuple(cref(b),cref(a)) : make_tuple(cref(a),cref(b));
+ }
+
+} // namespace boost
+
+#endif // BOOST_ALGORITHM_MINMAX_HPP
diff --git a/boost/boost/algorithm/minmax_element.hpp b/boost/boost/algorithm/minmax_element.hpp
new file mode 100644
index 00000000000..6c88b6375e4
--- /dev/null
+++ b/boost/boost/algorithm/minmax_element.hpp
@@ -0,0 +1,551 @@
+// (C) Copyright Herve Bronnimann 2004.
+// 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)
+
+/*
+ Revision history:
+ 1 July 2004
+ Split the code into two headers to lessen dependence on
+ Boost.tuple. (Herve)
+ 26 June 2004
+ Added the code for the boost minmax library. (Herve)
+*/
+
+#ifndef BOOST_ALGORITHM_MINMAX_ELEMENT_HPP
+#define BOOST_ALGORITHM_MINMAX_ELEMENT_HPP
+
+/* PROPOSED STANDARD EXTENSIONS:
+ *
+ * minmax_element(first, last)
+ * Effect: std::make_pair( std::min_element(first, last),
+ * std::max_element(first, last) );
+ *
+ * minmax_element(first, last, comp)
+ * Effect: std::make_pair( std::min_element(first, last, comp),
+ * std::max_element(first, last, comp) );
+ */
+
+#include <utility> // for std::pair and std::make_pair
+
+namespace boost {
+
+ namespace detail { // for obtaining a uniform version of minmax_element
+ // that compiles with VC++ 6.0 -- avoid the iterator_traits by
+ // having comparison object over iterator, not over dereferenced value
+
+ template <typename Iterator>
+ struct less_over_iter {
+ bool operator()(Iterator const& it1,
+ Iterator const& it2) const { return *it1 < *it2; }
+ };
+
+ template <typename Iterator, class BinaryPredicate>
+ struct binary_pred_over_iter {
+ explicit binary_pred_over_iter(BinaryPredicate const& p ) : m_p( p ) {}
+ bool operator()(Iterator const& it1,
+ Iterator const& it2) const { return m_p(*it1, *it2); }
+ private:
+ BinaryPredicate m_p;
+ };
+
+ // common base for the two minmax_element overloads
+
+ template <typename ForwardIter, class Compare >
+ std::pair<ForwardIter,ForwardIter>
+ basic_minmax_element(ForwardIter first, ForwardIter last, Compare comp)
+ {
+ if (first == last)
+ return std::make_pair(last,last);
+
+ ForwardIter min_result = first;
+ ForwardIter max_result = first;
+
+ // if only one element
+ ForwardIter second = first; ++second;
+ if (second == last)
+ return std::make_pair(min_result, max_result);
+
+ // treat first pair separately (only one comparison for first two elements)
+ ForwardIter potential_min_result = last;
+ if (comp(first, second))
+ max_result = second;
+ else {
+ min_result = second;
+ potential_min_result = first;
+ }
+
+ // then each element by pairs, with at most 3 comparisons per pair
+ first = ++second; if (first != last) ++second;
+ while (second != last) {
+ if (comp(first, second)) {
+ if (comp(first, min_result)) {
+ min_result = first;
+ potential_min_result = last;
+ }
+ if (comp(max_result, second))
+ max_result = second;
+ } else {
+ if (comp(second, min_result)) {
+ min_result = second;
+ potential_min_result = first;
+ }
+ if (comp(max_result, first))
+ max_result = first;
+ }
+ first = ++second;
+ if (first != last) ++second;
+ }
+
+ // if odd number of elements, treat last element
+ if (first != last) { // odd number of elements
+ if (comp(first, min_result))
+ min_result = first, potential_min_result = last;
+ else if (comp(max_result, first))
+ max_result = first;
+ }
+
+ // resolve min_result being incorrect with one extra comparison
+ // (in which case potential_min_result is necessarily the correct result)
+ if (potential_min_result != last
+ && !comp(min_result, potential_min_result))
+ min_result = potential_min_result;
+
+ return std::make_pair(min_result,max_result);
+ }
+
+ } // namespace detail
+
+ template <typename ForwardIter>
+ std::pair<ForwardIter,ForwardIter>
+ minmax_element(ForwardIter first, ForwardIter last)
+ {
+ return detail::basic_minmax_element(first, last,
+ detail::less_over_iter<ForwardIter>() );
+ }
+
+ template <typename ForwardIter, class BinaryPredicate>
+ std::pair<ForwardIter,ForwardIter>
+ minmax_element(ForwardIter first, ForwardIter last, BinaryPredicate comp)
+ {
+ return detail::basic_minmax_element(first, last,
+ detail::binary_pred_over_iter<ForwardIter,BinaryPredicate>(comp) );
+ }
+
+}
+
+/* PROPOSED BOOST EXTENSIONS
+ * In the description below, [rfirst,rlast) denotes the reversed range
+ * of [first,last). Even though the iterator type of first and last may
+ * be only a Forward Iterator, it is possible to explain the semantics
+ * by assuming that it is a Bidirectional Iterator. In the sequel,
+ * reverse(ForwardIterator&) returns the reverse_iterator adaptor.
+ * This is not how the functions would be implemented!
+ *
+ * first_min_element(first, last)
+ * Effect: std::min_element(first, last);
+ *
+ * first_min_element(first, last, comp)
+ * Effect: std::min_element(first, last, comp);
+ *
+ * last_min_element(first, last)
+ * Effect: reverse( std::min_element(reverse(last), reverse(first)) );
+ *
+ * last_min_element(first, last, comp)
+ * Effect: reverse( std::min_element(reverse(last), reverse(first), comp) );
+ *
+ * first_max_element(first, last)
+ * Effect: std::max_element(first, last);
+ *
+ * first_max_element(first, last, comp)
+ * Effect: max_element(first, last);
+ *
+ * last_max_element(first, last)
+ * Effect: reverse( std::max_element(reverse(last), reverse(first)) );
+ *
+ * last_max_element(first, last, comp)
+ * Effect: reverse( std::max_element(reverse(last), reverse(first), comp) );
+ *
+ * first_min_first_max_element(first, last)
+ * Effect: std::make_pair( first_min_element(first, last),
+ * first_max_element(first, last) );
+ *
+ * first_min_first_max_element(first, last, comp)
+ * Effect: std::make_pair( first_min_element(first, last, comp),
+ * first_max_element(first, last, comp) );
+ *
+ * first_min_last_max_element(first, last)
+ * Effect: std::make_pair( first_min_element(first, last),
+ * last_max_element(first, last) );
+ *
+ * first_min_last_max_element(first, last, comp)
+ * Effect: std::make_pair( first_min_element(first, last, comp),
+ * last_max_element(first, last, comp) );
+ *
+ * last_min_first_max_element(first, last)
+ * Effect: std::make_pair( last_min_element(first, last),
+ * first_max_element(first, last) );
+ *
+ * last_min_first_max_element(first, last, comp)
+ * Effect: std::make_pair( last_min_element(first, last, comp),
+ * first_max_element(first, last, comp) );
+ *
+ * last_min_last_max_element(first, last)
+ * Effect: std::make_pair( last_min_element(first, last),
+ * last_max_element(first, last) );
+ *
+ * last_min_last_max_element(first, last, comp)
+ * Effect: std::make_pair( last_min_element(first, last, comp),
+ * last_max_element(first, last, comp) );
+ */
+
+namespace boost {
+
+ // Min_element and max_element variants
+
+ namespace detail { // common base for the overloads
+
+ template <typename ForwardIter, class BinaryPredicate>
+ ForwardIter
+ basic_first_min_element(ForwardIter first, ForwardIter last,
+ BinaryPredicate comp)
+ {
+ if (first == last) return last;
+ ForwardIter min_result = first;
+ while (++first != last)
+ if (comp(first, min_result))
+ min_result = first;
+ return min_result;
+ }
+
+ template <typename ForwardIter, class BinaryPredicate>
+ ForwardIter
+ basic_last_min_element(ForwardIter first, ForwardIter last,
+ BinaryPredicate comp)
+ {
+ if (first == last) return last;
+ ForwardIter min_result = first;
+ while (++first != last)
+ if (!comp(min_result, first))
+ min_result = first;
+ return min_result;
+ }
+
+ template <typename ForwardIter, class BinaryPredicate>
+ ForwardIter
+ basic_first_max_element(ForwardIter first, ForwardIter last,
+ BinaryPredicate comp)
+ {
+ if (first == last) return last;
+ ForwardIter max_result = first;
+ while (++first != last)
+ if (comp(max_result, first))
+ max_result = first;
+ return max_result;
+ }
+
+ template <typename ForwardIter, class BinaryPredicate>
+ ForwardIter
+ basic_last_max_element(ForwardIter first, ForwardIter last,
+ BinaryPredicate comp)
+ {
+ if (first == last) return last;
+ ForwardIter max_result = first;
+ while (++first != last)
+ if (!comp(first, max_result))
+ max_result = first;
+ return max_result;
+ }
+
+ } // namespace detail
+
+ template <typename ForwardIter>
+ ForwardIter
+ first_min_element(ForwardIter first, ForwardIter last)
+ {
+ return detail::basic_first_min_element(first, last,
+ detail::less_over_iter<ForwardIter>() );
+ }
+
+ template <typename ForwardIter, class BinaryPredicate>
+ ForwardIter
+ first_min_element(ForwardIter first, ForwardIter last, BinaryPredicate comp)
+ {
+ return detail::basic_first_min_element(first, last,
+ detail::binary_pred_over_iter<ForwardIter,BinaryPredicate>(comp) );
+ }
+
+ template <typename ForwardIter>
+ ForwardIter
+ last_min_element(ForwardIter first, ForwardIter last)
+ {
+ return detail::basic_last_min_element(first, last,
+ detail::less_over_iter<ForwardIter>() );
+ }
+
+ template <typename ForwardIter, class BinaryPredicate>
+ ForwardIter
+ last_min_element(ForwardIter first, ForwardIter last, BinaryPredicate comp)
+ {
+ return detail::basic_last_min_element(first, last,
+ detail::binary_pred_over_iter<ForwardIter,BinaryPredicate>(comp) );
+ }
+
+ template <typename ForwardIter>
+ ForwardIter
+ first_max_element(ForwardIter first, ForwardIter last)
+ {
+ return detail::basic_first_max_element(first, last,
+ detail::less_over_iter<ForwardIter>() );
+ }
+
+ template <typename ForwardIter, class BinaryPredicate>
+ ForwardIter
+ first_max_element(ForwardIter first, ForwardIter last, BinaryPredicate comp)
+ {
+ return detail::basic_first_max_element(first, last,
+ detail::binary_pred_over_iter<ForwardIter,BinaryPredicate>(comp) );
+ }
+
+ template <typename ForwardIter>
+ ForwardIter
+ last_max_element(ForwardIter first, ForwardIter last)
+ {
+ return detail::basic_last_max_element(first, last,
+ detail::less_over_iter<ForwardIter>() );
+ }
+
+ template <typename ForwardIter, class BinaryPredicate>
+ ForwardIter
+ last_max_element(ForwardIter first, ForwardIter last, BinaryPredicate comp)
+ {
+ return detail::basic_last_max_element(first, last,
+ detail::binary_pred_over_iter<ForwardIter,BinaryPredicate>(comp) );
+ }
+
+
+ // Minmax_element variants -- comments removed
+
+ namespace detail {
+
+ template <typename ForwardIter, class BinaryPredicate>
+ std::pair<ForwardIter,ForwardIter>
+ basic_first_min_last_max_element(ForwardIter first, ForwardIter last,
+ BinaryPredicate comp)
+ {
+ if (first == last)
+ return std::make_pair(last,last);
+
+ ForwardIter min_result = first;
+ ForwardIter max_result = first;
+
+ ForwardIter second = ++first;
+ if (second == last)
+ return std::make_pair(min_result, max_result);
+
+ if (comp(second, min_result))
+ min_result = second;
+ else
+ max_result = second;
+
+ first = ++second; if (first != last) ++second;
+ while (second != last) {
+ if (!comp(second, first)) {
+ if (comp(first, min_result))
+ min_result = first;
+ if (!comp(second, max_result))
+ max_result = second;
+ } else {
+ if (comp(second, min_result))
+ min_result = second;
+ if (!comp(first, max_result))
+ max_result = first;
+ }
+ first = ++second; if (first != last) ++second;
+ }
+
+ if (first != last) {
+ if (comp(first, min_result))
+ min_result = first;
+ else if (!comp(first, max_result))
+ max_result = first;
+ }
+
+ return std::make_pair(min_result, max_result);
+ }
+
+ template <typename ForwardIter, class BinaryPredicate>
+ std::pair<ForwardIter,ForwardIter>
+ basic_last_min_first_max_element(ForwardIter first, ForwardIter last,
+ BinaryPredicate comp)
+ {
+ if (first == last) return std::make_pair(last,last);
+
+ ForwardIter min_result = first;
+ ForwardIter max_result = first;
+
+ ForwardIter second = ++first;
+ if (second == last)
+ return std::make_pair(min_result, max_result);
+
+ if (comp(max_result, second))
+ max_result = second;
+ else
+ min_result = second;
+
+ first = ++second; if (first != last) ++second;
+ while (second != last) {
+ if (comp(first, second)) {
+ if (!comp(min_result, first))
+ min_result = first;
+ if (comp(max_result, second))
+ max_result = second;
+ } else {
+ if (!comp(min_result, second))
+ min_result = second;
+ if (comp(max_result, first))
+ max_result = first;
+ }
+ first = ++second; if (first != last) ++second;
+ }
+
+ if (first != last) {
+ if (!comp(min_result, first))
+ min_result = first;
+ else if (comp(max_result, first))
+ max_result = first;
+ }
+
+ return std::make_pair(min_result, max_result);
+ }
+
+ template <typename ForwardIter, class BinaryPredicate>
+ std::pair<ForwardIter,ForwardIter>
+ basic_last_min_last_max_element(ForwardIter first, ForwardIter last,
+ BinaryPredicate comp)
+ {
+ if (first == last) return std::make_pair(last,last);
+
+ ForwardIter min_result = first;
+ ForwardIter max_result = first;
+
+ ForwardIter second = first; ++second;
+ if (second == last)
+ return std::make_pair(min_result,max_result);
+
+ ForwardIter potential_max_result = last;
+ if (comp(first, second))
+ max_result = second;
+ else {
+ min_result = second;
+ potential_max_result = second;
+ }
+
+ first = ++second; if (first != last) ++second;
+ while (second != last) {
+ if (comp(first, second)) {
+ if (!comp(min_result, first))
+ min_result = first;
+ if (!comp(second, max_result)) {
+ max_result = second;
+ potential_max_result = last;
+ }
+ } else {
+ if (!comp(min_result, second))
+ min_result = second;
+ if (!comp(first, max_result)) {
+ max_result = first;
+ potential_max_result = second;
+ }
+ }
+ first = ++second;
+ if (first != last) ++second;
+ }
+
+ if (first != last) {
+ if (!comp(min_result, first))
+ min_result = first;
+ if (!comp(first, max_result)) {
+ max_result = first;
+ potential_max_result = last;
+ }
+ }
+
+ if (potential_max_result != last
+ && !comp(potential_max_result, max_result))
+ max_result = potential_max_result;
+
+ return std::make_pair(min_result,max_result);
+ }
+
+ } // namespace detail
+
+ template <typename ForwardIter>
+ inline std::pair<ForwardIter,ForwardIter>
+ first_min_first_max_element(ForwardIter first, ForwardIter last)
+ {
+ return minmax_element(first, last);
+ }
+
+ template <typename ForwardIter, class BinaryPredicate>
+ inline std::pair<ForwardIter,ForwardIter>
+ first_min_first_max_element(ForwardIter first, ForwardIter last,
+ BinaryPredicate comp)
+ {
+ return minmax_element(first, last, comp);
+ }
+
+ template <typename ForwardIter>
+ std::pair<ForwardIter,ForwardIter>
+ first_min_last_max_element(ForwardIter first, ForwardIter last)
+ {
+ return detail::basic_first_min_last_max_element(first, last,
+ detail::less_over_iter<ForwardIter>() );
+ }
+
+ template <typename ForwardIter, class BinaryPredicate>
+ inline std::pair<ForwardIter,ForwardIter>
+ first_min_last_max_element(ForwardIter first, ForwardIter last,
+ BinaryPredicate comp)
+ {
+ return detail::basic_first_min_last_max_element(first, last,
+ detail::binary_pred_over_iter<ForwardIter,BinaryPredicate>(comp) );
+ }
+
+ template <typename ForwardIter>
+ std::pair<ForwardIter,ForwardIter>
+ last_min_first_max_element(ForwardIter first, ForwardIter last)
+ {
+ return detail::basic_last_min_first_max_element(first, last,
+ detail::less_over_iter<ForwardIter>() );
+ }
+
+ template <typename ForwardIter, class BinaryPredicate>
+ inline std::pair<ForwardIter,ForwardIter>
+ last_min_first_max_element(ForwardIter first, ForwardIter last,
+ BinaryPredicate comp)
+ {
+ return detail::basic_last_min_first_max_element(first, last,
+ detail::binary_pred_over_iter<ForwardIter,BinaryPredicate>(comp) );
+ }
+
+ template <typename ForwardIter>
+ std::pair<ForwardIter,ForwardIter>
+ last_min_last_max_element(ForwardIter first, ForwardIter last)
+ {
+ return detail::basic_last_min_last_max_element(first, last,
+ detail::less_over_iter<ForwardIter>() );
+ }
+
+ template <typename ForwardIter, class BinaryPredicate>
+ inline std::pair<ForwardIter,ForwardIter>
+ last_min_last_max_element(ForwardIter first, ForwardIter last,
+ BinaryPredicate comp)
+ {
+ return detail::basic_last_min_last_max_element(first, last,
+ detail::binary_pred_over_iter<ForwardIter,BinaryPredicate>(comp) );
+ }
+
+} // namespace boost
+
+#endif // BOOST_ALGORITHM_MINMAX_ELEMENT_HPP
diff --git a/boost/boost/algorithm/string.hpp b/boost/boost/algorithm/string.hpp
new file mode 100644
index 00000000000..1a664f196f7
--- /dev/null
+++ b/boost/boost/algorithm/string.hpp
@@ -0,0 +1,30 @@
+// Boost string_algo library string_algo.hpp header file ---------------------------//
+
+// Copyright Pavol Droba 2002-2004. Use, modification and
+// distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_ALGO_HPP
+#define BOOST_STRING_ALGO_HPP
+
+/*! \file
+ Cumulative include for string_algo library
+*/
+
+#include <boost/algorithm/string/std_containers_traits.hpp>
+#include <boost/algorithm/string/trim.hpp>
+#include <boost/algorithm/string/case_conv.hpp>
+#include <boost/algorithm/string/predicate.hpp>
+#include <boost/algorithm/string/find.hpp>
+#include <boost/algorithm/string/split.hpp>
+#include <boost/algorithm/string/join.hpp>
+#include <boost/algorithm/string/replace.hpp>
+#include <boost/algorithm/string/erase.hpp>
+#include <boost/algorithm/string/classification.hpp>
+#include <boost/algorithm/string/find_iterator.hpp>
+
+
+#endif // BOOST_STRING_ALGO_HPP
diff --git a/boost/boost/algorithm/string/case_conv.hpp b/boost/boost/algorithm/string/case_conv.hpp
new file mode 100644
index 00000000000..5f61bf17cea
--- /dev/null
+++ b/boost/boost/algorithm/string/case_conv.hpp
@@ -0,0 +1,191 @@
+// Boost string_algo library case_conv.hpp header file ---------------------------//
+
+// Copyright Pavol Droba 2002-2003. Use, modification and
+// distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_CASE_CONV_HPP
+#define BOOST_STRING_CASE_CONV_HPP
+
+#include <boost/algorithm/string/config.hpp>
+#include <algorithm>
+#include <locale>
+#include <boost/iterator/transform_iterator.hpp>
+
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/value_type.hpp>
+
+#include <boost/algorithm/string/detail/case_conv.hpp>
+
+/*! \file
+ Defines sequence case-conversion algorithms.
+ Algorithms convert each element in the input sequence to the
+ desired case using provided locales.
+*/
+
+namespace boost {
+ namespace algorithm {
+
+// to_lower -----------------------------------------------//
+
+ //! Convert to lower case
+ /*!
+ Each element of the input sequence is converted to lower
+ case. The result is a copy of the input converted to lower case.
+ It is returned as a sequence or copied to the output iterator.
+
+ \param Output An output iterator to which the result will be copied
+ \param Input An input range
+ \param Loc A locale used for conversion
+ \return
+ An output iterator pointing just after the last inserted character or
+ a copy of the input
+
+ \note The second variant of this function provides the strong exception-safety guarantee
+
+ */
+ template<typename OutputIteratorT, typename RangeT>
+ inline OutputIteratorT
+ to_lower_copy(
+ OutputIteratorT Output,
+ const RangeT& Input,
+ const std::locale& Loc=std::locale())
+ {
+ return std::transform(
+ begin(Input),
+ end(Input),
+ Output,
+ ::boost::algorithm::detail::to_lowerF<
+ typename range_value<RangeT>::type >(Loc));
+ }
+
+ //! Convert to lower case
+ /*!
+ \overload
+ */
+ template<typename SequenceT>
+ inline SequenceT to_lower_copy(
+ const SequenceT& Input,
+ const std::locale& Loc=std::locale())
+ {
+ return SequenceT(
+ make_transform_iterator(
+ begin(Input),
+ ::boost::algorithm::detail::to_lowerF<
+ typename range_value<SequenceT>::type >(Loc)),
+ make_transform_iterator(
+ end(Input),
+ ::boost::algorithm::detail::to_lowerF<
+ typename range_value<SequenceT>::type >(Loc)));
+ }
+
+ //! Convert to lower case
+ /*!
+ Each element of the input sequence is converted to lower
+ case. The input sequence is modified in-place.
+
+ \param Input A range
+ \param Loc a locale used for conversion
+ */
+ template<typename WritableRangeT>
+ inline void to_lower(
+ WritableRangeT& Input,
+ const std::locale& Loc=std::locale())
+ {
+ std::transform(
+ begin(Input),
+ end(Input),
+ begin(Input),
+ ::boost::algorithm::detail::to_lowerF<
+ typename range_value<WritableRangeT>::type >(Loc));
+ }
+
+// to_upper -----------------------------------------------//
+
+ //! Convert to upper case
+ /*!
+ Each element of the input sequence is converted to upper
+ case. The result is a copy of the input converted to upper case.
+ It is returned as a sequence or copied to the output iterator
+
+ \param Output An output iterator to which the result will be copied
+ \param Input An input range
+ \param Loc A locale used for conversion
+ \return
+ An output iterator pointing just after the last inserted character or
+ a copy of the input
+
+ \note The second variant of this function provides the strong exception-safety guarantee
+ */
+ template<typename OutputIteratorT, typename RangeT>
+ inline OutputIteratorT
+ to_upper_copy(
+ OutputIteratorT Output,
+ const RangeT& Input,
+ const std::locale& Loc=std::locale())
+ {
+ return std::transform(
+ begin(Input),
+ end(Input),
+ Output,
+ ::boost::algorithm::detail::to_upperF<
+ typename range_value<RangeT>::type >(Loc));
+ }
+
+ //! Convert to upper case
+ /*!
+ \overload
+ */
+ template<typename SequenceT>
+ inline SequenceT to_upper_copy(
+ const SequenceT& Input,
+ const std::locale& Loc=std::locale())
+ {
+ return SequenceT(
+ make_transform_iterator(
+ begin(Input),
+ ::boost::algorithm::detail::to_upperF<
+ typename range_value<SequenceT>::type >(Loc)),
+ make_transform_iterator(
+ end(Input),
+ ::boost::algorithm::detail::to_upperF<
+ typename range_value<SequenceT>::type >(Loc)));
+
+ }
+
+ //! Convert to upper case
+ /*!
+ Each element of the input sequence is converted to upper
+ case. The input sequence is modified in-place.
+
+ \param Input An input range
+ \param Loc a locale used for conversion
+ */
+ template<typename WritableRangeT>
+ inline void to_upper(
+ WritableRangeT& Input,
+ const std::locale& Loc=std::locale())
+ {
+ std::transform(
+ begin(Input),
+ end(Input),
+ begin(Input),
+ ::boost::algorithm::detail::to_upperF<
+ typename range_value<WritableRangeT>::type >(Loc));
+ }
+
+ } // namespace algorithm
+
+ // pull names to the boost namespace
+ using algorithm::to_lower;
+ using algorithm::to_lower_copy;
+ using algorithm::to_upper;
+ using algorithm::to_upper_copy;
+
+} // namespace boost
+
+#endif // BOOST_STRING_CASE_CONV_HPP
diff --git a/boost/boost/algorithm/string/classification.hpp b/boost/boost/algorithm/string/classification.hpp
new file mode 100644
index 00000000000..232050fea12
--- /dev/null
+++ b/boost/boost/algorithm/string/classification.hpp
@@ -0,0 +1,309 @@
+// Boost string_algo library classification.hpp header file ---------------------------//
+
+// Copyright Pavol Droba 2002-2003. Use, modification and
+// distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_CLASSIFICATION_HPP
+#define BOOST_STRING_CLASSIFICATION_HPP
+
+#include <algorithm>
+#include <locale>
+#include <boost/range/value_type.hpp>
+#include <boost/algorithm/string/detail/classification.hpp>
+#include <boost/algorithm/string/predicate_facade.hpp>
+
+/*! \file
+ Classification predicates are included in the library to give
+ some more convenience when using algorithms like \c trim() and \c all().
+ They wrap functionality of STL classification functions ( e.g. \c std::isspace() )
+ into generic functors.
+*/
+
+namespace boost {
+ namespace algorithm {
+
+// classification functor generator -------------------------------------//
+
+ //! is_classified predicate
+ /*!
+ Construct the \c is_classified predicate. This predicate holds if the input is
+ of specified \c std::ctype category.
+
+ \param Type A \c std::ctype category
+ \param Loc A locale used for classification
+ \return An instance of the \c is_classified predicate
+ */
+ inline detail::is_classifiedF
+ is_classified(std::ctype_base::mask Type, const std::locale& Loc=std::locale())
+ {
+ return detail::is_classifiedF(Type, Loc);
+ }
+
+ //! is_space predicate
+ /*!
+ Construct the \c is_classified predicate for the \c ctype_base::space category.
+
+ \param Loc A locale used for classification
+ \return An instance of the \c is_classified predicate
+ */
+ inline detail::is_classifiedF
+ is_space(const std::locale& Loc=std::locale())
+ {
+ return detail::is_classifiedF(std::ctype_base::space, Loc);
+ }
+
+ //! is_alnum predicate
+ /*!
+ Construct the \c is_classified predicate for the \c ctype_base::alnum category.
+
+ \param Loc A locale used for classification
+ \return An instance of the \c is_classified predicate
+ */
+ inline detail::is_classifiedF
+ is_alnum(const std::locale& Loc=std::locale())
+ {
+ return detail::is_classifiedF(std::ctype_base::alnum, Loc);
+ }
+
+ //! is_alpha predicate
+ /*!
+ Construct the \c is_classified predicate for the \c ctype_base::alpha category.
+
+ \param Loc A locale used for classification
+ \return An instance of the \c is_classified predicate
+ */
+ inline detail::is_classifiedF
+ is_alpha(const std::locale& Loc=std::locale())
+ {
+ return detail::is_classifiedF(std::ctype_base::alpha, Loc);
+ }
+
+ //! is_cntrl predicate
+ /*!
+ Construct the \c is_classified predicate for the \c ctype_base::cntrl category.
+
+ \param Loc A locale used for classification
+ \return An instance of the \c is_classified predicate
+ */
+ inline detail::is_classifiedF
+ is_cntrl(const std::locale& Loc=std::locale())
+ {
+ return detail::is_classifiedF(std::ctype_base::cntrl, Loc);
+ }
+
+ //! is_digit predicate
+ /*!
+ Construct the \c is_classified predicate for the \c ctype_base::digit category.
+
+ \param Loc A locale used for classification
+ \return An instance of the \c is_classified predicate
+ */
+ inline detail::is_classifiedF
+ is_digit(const std::locale& Loc=std::locale())
+ {
+ return detail::is_classifiedF(std::ctype_base::digit, Loc);
+ }
+
+ //! is_graph predicate
+ /*!
+ Construct the \c is_classified predicate for the \c ctype_base::graph category.
+
+ \param Loc A locale used for classification
+ \return An instance of the \c is_classified predicate
+ */
+ inline detail::is_classifiedF
+ is_graph(const std::locale& Loc=std::locale())
+ {
+ return detail::is_classifiedF(std::ctype_base::graph, Loc);
+ }
+
+ //! is_lower predicate
+ /*!
+ Construct the \c is_classified predicate for the \c ctype_base::lower category.
+
+ \param Loc A locale used for classification
+ \return An instance of \c is_classified predicate
+ */
+ inline detail::is_classifiedF
+ is_lower(const std::locale& Loc=std::locale())
+ {
+ return detail::is_classifiedF(std::ctype_base::lower, Loc);
+ }
+
+ //! is_print predicate
+ /*!
+ Construct the \c is_classified predicate for the \c ctype_base::print category.
+
+ \param Loc A locale used for classification
+ \return An instance of the \c is_classified predicate
+ */
+ inline detail::is_classifiedF
+ is_print(const std::locale& Loc=std::locale())
+ {
+ return detail::is_classifiedF(std::ctype_base::print, Loc);
+ }
+
+ //! is_punct predicate
+ /*!
+ Construct the \c is_classified predicate for the \c ctype_base::punct category.
+
+ \param Loc A locale used for classification
+ \return An instance of the \c is_classified predicate
+ */
+ inline detail::is_classifiedF
+ is_punct(const std::locale& Loc=std::locale())
+ {
+ return detail::is_classifiedF(std::ctype_base::punct, Loc);
+ }
+
+ //! is_upper predicate
+ /*!
+ Construct the \c is_classified predicate for the \c ctype_base::upper category.
+
+ \param Loc A locale used for classification
+ \return An instance of the \c is_classified predicate
+ */
+ inline detail::is_classifiedF
+ is_upper(const std::locale& Loc=std::locale())
+ {
+ return detail::is_classifiedF(std::ctype_base::upper, Loc);
+ }
+
+ //! is_xdigit predicate
+ /*!
+ Construct the \c is_classified predicate for the \c ctype_base::xdigit category.
+
+ \param Loc A locale used for classification
+ \return An instance of the \c is_classified predicate
+ */
+ inline detail::is_classifiedF
+ is_xdigit(const std::locale& Loc=std::locale())
+ {
+ return detail::is_classifiedF(std::ctype_base::xdigit, Loc);
+ }
+
+ //! is_any_of predicate
+ /*!
+ Construct the \c is_any_of predicate. The predicate holds if the input
+ is included in the specified set of characters.
+
+ \param Set A set of characters to be recognized
+ \return An instance of the \c is_any_of predicate
+ */
+ template<typename RangeT>
+ inline detail::is_any_ofF<
+ BOOST_STRING_TYPENAME range_value<RangeT>::type>
+ is_any_of( const RangeT& Set )
+ {
+ return detail::is_any_ofF<
+ BOOST_STRING_TYPENAME range_value<RangeT>::type>(Set);
+ }
+
+ //! is_from_range predicate
+ /*!
+ Construct the \c is_from_range predicate. The predicate holds if the input
+ is included in the specified range. (i.e. From <= Ch <= To )
+
+ \param From The start of the range
+ \param To The end of the range
+ \return An instance of the \c is_from_range predicate
+ */
+ template<typename CharT>
+ inline detail::is_from_rangeF<CharT> is_from_range(CharT From, CharT To)
+ {
+ return detail::is_from_rangeF<CharT>(From,To);
+ }
+
+ // predicate combinators ---------------------------------------------------//
+
+ //! predicate 'and' composition predicate
+ /*!
+ Construct the \c class_and predicate. This predicate can be used
+ to logically combine two classification predicates. \c class_and holds,
+ if both predicates return true.
+
+ \param Pred1 The first predicate
+ \param Pred2 The second predicate
+ \return An instance of the \c class_and predicate
+ */
+ template<typename Pred1T, typename Pred2T>
+ inline detail::pred_andF<Pred1T, Pred2T>
+ operator&&(
+ const predicate_facade<Pred1T>& Pred1,
+ const predicate_facade<Pred2T>& Pred2 )
+ {
+ // Doing the static_cast with the pointer instead of the reference
+ // is a workaround for some compilers which have problems with
+ // static_cast's of template references, i.e. CW8. /grafik/
+ return detail::pred_andF<Pred1T,Pred2T>(
+ *static_cast<const Pred1T*>(&Pred1),
+ *static_cast<const Pred2T*>(&Pred2) );
+ }
+
+ //! predicate 'or' composition predicate
+ /*!
+ Construct the \c class_or predicate. This predicate can be used
+ to logically combine two classification predicates. \c class_or holds,
+ if one of the predicates return true.
+
+ \param Pred1 The first predicate
+ \param Pred2 The second predicate
+ \return An instance of the \c class_or predicate
+ */
+ template<typename Pred1T, typename Pred2T>
+ inline detail::pred_orF<Pred1T, Pred2T>
+ operator||(
+ const predicate_facade<Pred1T>& Pred1,
+ const predicate_facade<Pred2T>& Pred2 )
+ {
+ // Doing the static_cast with the pointer instead of the reference
+ // is a workaround for some compilers which have problems with
+ // static_cast's of template references, i.e. CW8. /grafik/
+ return detail::pred_orF<Pred1T,Pred2T>(
+ *static_cast<const Pred1T*>(&Pred1),
+ *static_cast<const Pred2T*>(&Pred2));
+ }
+
+ //! predicate negation operator
+ /*!
+ Construct the \c class_not predicate. This predicate represents a negation.
+ \c class_or holds if of the predicates return false.
+
+ \param Pred The predicate to be negated
+ \return An instance of the \c class_not predicate
+ */
+ template<typename PredT>
+ inline detail::pred_notF<PredT>
+ operator!( const predicate_facade<PredT>& Pred )
+ {
+ // Doing the static_cast with the pointer instead of the reference
+ // is a workaround for some compilers which have problems with
+ // static_cast's of template references, i.e. CW8. /grafik/
+ return detail::pred_notF<PredT>(*static_cast<const PredT*>(&Pred));
+ }
+
+ } // namespace algorithm
+
+ // pull names to the boost namespace
+ using algorithm::is_classified;
+ using algorithm::is_space;
+ using algorithm::is_alnum;
+ using algorithm::is_alpha;
+ using algorithm::is_cntrl;
+ using algorithm::is_digit;
+ using algorithm::is_graph;
+ using algorithm::is_lower;
+ using algorithm::is_upper;
+ using algorithm::is_print;
+ using algorithm::is_punct;
+ using algorithm::is_xdigit;
+ using algorithm::is_any_of;
+ using algorithm::is_from_range;
+
+} // namespace boost
+
+#endif // BOOST_STRING_PREDICATE_HPP
diff --git a/boost/boost/algorithm/string/compare.hpp b/boost/boost/algorithm/string/compare.hpp
new file mode 100644
index 00000000000..c2a0bbad3ee
--- /dev/null
+++ b/boost/boost/algorithm/string/compare.hpp
@@ -0,0 +1,198 @@
+// Boost string_algo library compare.hpp header file -------------------------//
+
+// Copyright Pavol Droba 2002-2006. Use, modification and
+// distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_COMPARE_HPP
+#define BOOST_STRING_COMPARE_HPP
+
+#include <boost/algorithm/string/config.hpp>
+#include <locale>
+
+/*! \file
+ Defines element comparison predicates. Many algorithms in this library can
+ take an additional argument with a predicate used to compare elements.
+ This makes it possible, for instance, to have case insensitive versions
+ of the algorithms.
+*/
+
+namespace boost {
+ namespace algorithm {
+
+ // is_equal functor -----------------------------------------------//
+
+ //! is_equal functor
+ /*!
+ Standard STL equal_to only handle comparison between arguments
+ of the same type. This is a less restrictive version which wraps operator ==.
+ */
+ struct is_equal
+ {
+ //! Function operator
+ /*!
+ Compare two operands for equality
+ */
+ template< typename T1, typename T2 >
+ bool operator()( const T1& Arg1, const T2& Arg2 ) const
+ {
+ return Arg1==Arg2;
+ }
+ };
+
+ //! case insensitive version of is_equal
+ /*!
+ Case insensitive comparison predicate. Comparison is done using
+ specified locales.
+ */
+ struct is_iequal
+ {
+ //! Constructor
+ /*!
+ \param Loc locales used for comparison
+ */
+ is_iequal( const std::locale& Loc=std::locale() ) :
+ m_Loc( Loc ) {}
+
+ //! Function operator
+ /*!
+ Compare two operands. Case is ignored.
+ */
+ template< typename T1, typename T2 >
+ bool operator()( const T1& Arg1, const T2& Arg2 ) const
+ {
+ #if defined(__BORLANDC__) && (__BORLANDC__ >= 0x560) && (__BORLANDC__ <= 0x564) && !defined(_USE_OLD_RW_STL)
+ return std::toupper(Arg1)==std::toupper(Arg2);
+ #else
+ return std::toupper<T1>(Arg1,m_Loc)==std::toupper<T2>(Arg2,m_Loc);
+ #endif
+ }
+
+ private:
+ std::locale m_Loc;
+ };
+
+ // is_less functor -----------------------------------------------//
+
+ //! is_less functor
+ /*!
+ Convenient version of standard std::less. Operation is templated, therefore it is
+ not required to specify the exact types upon the construction
+ */
+ struct is_less
+ {
+ //! Functor operation
+ /*!
+ Compare two operands using > operator
+ */
+ template< typename T1, typename T2 >
+ bool operator()( const T1& Arg1, const T2& Arg2 ) const
+ {
+ return Arg1<Arg2;
+ }
+ };
+
+
+ //! case insensitive version of is_less
+ /*!
+ Case insensitive comparison predicate. Comparison is done using
+ specified locales.
+ */
+ struct is_iless
+ {
+ //! Constructor
+ /*!
+ \param Loc locales used for comparison
+ */
+ is_iless( const std::locale& Loc=std::locale() ) :
+ m_Loc( Loc ) {}
+
+ //! Function operator
+ /*!
+ Compare two operands. Case is ignored.
+ */
+ template< typename T1, typename T2 >
+ bool operator()( const T1& Arg1, const T2& Arg2 ) const
+ {
+ #if defined(__BORLANDC__) && (__BORLANDC__ >= 0x560) && (__BORLANDC__ <= 0x564) && !defined(_USE_OLD_RW_STL)
+ return std::toupper(Arg1)<std::toupper(Arg2);
+ #else
+ return std::toupper<T1>(Arg1,m_Loc)<std::toupper<T2>(Arg2,m_Loc);
+ #endif
+ }
+
+ private:
+ std::locale m_Loc;
+ };
+
+ // is_not_greater functor -----------------------------------------------//
+
+ //! is_not_greater functor
+ /*!
+ Convenient version of standard std::not_greater_to. Operation is templated, therefore it is
+ not required to specify the exact types upon the construction
+ */
+ struct is_not_greater
+ {
+ //! Functor operation
+ /*!
+ Compare two operands using > operator
+ */
+ template< typename T1, typename T2 >
+ bool operator()( const T1& Arg1, const T2& Arg2 ) const
+ {
+ return Arg1<=Arg2;
+ }
+ };
+
+
+ //! case insensitive version of is_not_greater
+ /*!
+ Case insensitive comparison predicate. Comparison is done using
+ specified locales.
+ */
+ struct is_not_igreater
+ {
+ //! Constructor
+ /*!
+ \param Loc locales used for comparison
+ */
+ is_not_igreater( const std::locale& Loc=std::locale() ) :
+ m_Loc( Loc ) {}
+
+ //! Function operator
+ /*!
+ Compare two operands. Case is ignored.
+ */
+ template< typename T1, typename T2 >
+ bool operator()( const T1& Arg1, const T2& Arg2 ) const
+ {
+ #if defined(__BORLANDC__) && (__BORLANDC__ >= 0x560) && (__BORLANDC__ <= 0x564) && !defined(_USE_OLD_RW_STL)
+ return std::toupper(Arg1)<=std::toupper(Arg2);
+ #else
+ return std::toupper<T1>(Arg1,m_Loc)<=std::toupper<T2>(Arg2,m_Loc);
+ #endif
+ }
+
+ private:
+ std::locale m_Loc;
+ };
+
+
+ } // namespace algorithm
+
+ // pull names to the boost namespace
+ using algorithm::is_equal;
+ using algorithm::is_iequal;
+ using algorithm::is_less;
+ using algorithm::is_iless;
+ using algorithm::is_not_greater;
+ using algorithm::is_not_igreater;
+
+} // namespace boost
+
+
+#endif // BOOST_STRING_COMPARE_HPP
diff --git a/boost/boost/algorithm/string/concept.hpp b/boost/boost/algorithm/string/concept.hpp
new file mode 100644
index 00000000000..1efda27d76b
--- /dev/null
+++ b/boost/boost/algorithm/string/concept.hpp
@@ -0,0 +1,82 @@
+// Boost string_algo library concept.hpp header file ---------------------------//
+
+// Copyright Pavol Droba 2002-2003. Use, modification and
+// distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_CONCEPT_HPP
+#define BOOST_STRING_CONCEPT_HPP
+
+#include <boost/concept_check.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+
+/*! \file
+ Defines concepts used in string_algo library
+*/
+
+namespace boost {
+ namespace algorithm {
+
+ //! Finder concept
+ /*!
+ Defines the Finder concept. Finder is a functor which selects
+ an arbitrary part of a string. Search is performed on
+ the range specified by starting and ending iterators.
+
+ Result of the find operation must be convertible to iterator_range.
+ */
+ template<typename FinderT, typename IteratorT>
+ struct FinderConcept
+ {
+ private:
+ typedef iterator_range<IteratorT> range;
+ public:
+ void constraints()
+ {
+ // Operation
+ r=(*pF)(i,i);
+ }
+ private:
+ range r;
+ IteratorT i;
+ FinderT* pF;
+ }; // Finder_concept
+
+
+ //! Formatter concept
+ /*!
+ Defines the Formatter concept. Formatter is a functor, which
+ takes a result from a finder operation and transforms it
+ in a specific way.
+
+ Result must be a container supported by container_traits,
+ or a reference to it.
+ */
+ template<typename FormatterT, typename FinderT, typename IteratorT>
+ struct FormatterConcept
+ {
+ public:
+ void constraints()
+ {
+ // Operation
+ begin((*pFo)( (*pF)(i,i) ));
+ end((*pFo)( (*pF)(i,i) ));
+ }
+ private:
+ IteratorT i;
+ FinderT* pF;
+ FormatterT *pFo;
+ }; // FormatterConcept;
+
+ } // namespace algorithm
+} // namespace boost
+
+
+
+
+#endif // BOOST_STRING_CONCEPT_HPP
diff --git a/boost/boost/algorithm/string/config.hpp b/boost/boost/algorithm/string/config.hpp
new file mode 100644
index 00000000000..da28643624f
--- /dev/null
+++ b/boost/boost/algorithm/string/config.hpp
@@ -0,0 +1,27 @@
+// Boost string_algo library config.hpp header file ---------------------------//
+
+// Copyright Pavol Droba 2002-2003. Use, modification and
+// distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_CONFIG_HPP
+#define BOOST_STRING_CONFIG_HPP
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+#ifdef BOOST_STRING_DEDUCED_TYPENAME
+# error "macro already defined!"
+#endif
+
+#define BOOST_STRING_TYPENAME BOOST_DEDUCED_TYPENAME
+
+// Metrowerks workaround
+#if BOOST_WORKAROUND(__MWERKS__, <= 0x3003) // 8.x
+#pragma parse_func_templ off
+#endif
+
+#endif // BOOST_STRING_CONFIG_HPP
diff --git a/boost/boost/algorithm/string/constants.hpp b/boost/boost/algorithm/string/constants.hpp
new file mode 100644
index 00000000000..d9dbe0dacf6
--- /dev/null
+++ b/boost/boost/algorithm/string/constants.hpp
@@ -0,0 +1,35 @@
+// Boost string_algo library constants.hpp header file ---------------------------//
+
+// Copyright Pavol Droba 2002-2003. Use, modification and
+// distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_CONSTANTS_HPP
+#define BOOST_STRING_CONSTANTS_HPP
+
+namespace boost {
+ namespace algorithm {
+
+ //! Token compression mode
+ /*!
+ Specifies token compression mode for the token_finder.
+ */
+ enum token_compress_mode_type
+ {
+ token_compress_on, //!< Compress adjacent tokens
+ token_compress_off //!< Do not compress adjacent tokens
+ };
+
+ } // namespace algorithm
+
+ // pull the names to the boost namespace
+ using algorithm::token_compress_on;
+ using algorithm::token_compress_off;
+
+} // namespace boost
+
+#endif // BOOST_STRING_CONSTANTS_HPP
+
diff --git a/boost/boost/algorithm/string/detail/case_conv.hpp b/boost/boost/algorithm/string/detail/case_conv.hpp
new file mode 100644
index 00000000000..ffc4514ab27
--- /dev/null
+++ b/boost/boost/algorithm/string/detail/case_conv.hpp
@@ -0,0 +1,68 @@
+// Boost string_algo library string_funct.hpp header file ---------------------------//
+
+// Copyright Pavol Droba 2002-2003. Use, modification and
+// distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_CASE_CONV_DETAIL_HPP
+#define BOOST_STRING_CASE_CONV_DETAIL_HPP
+
+#include <boost/algorithm/string/config.hpp>
+#include <locale>
+#include <functional>
+
+namespace boost {
+ namespace algorithm {
+ namespace detail {
+
+// case conversion functors -----------------------------------------------//
+
+ // a tolower functor
+ template<typename CharT>
+ struct to_lowerF : public std::unary_function<CharT, CharT>
+ {
+ // Constructor
+ to_lowerF( const std::locale& Loc ) : m_Loc( Loc ) {}
+
+ // Operation
+ CharT operator ()( CharT Ch ) const
+ {
+ #if defined(__BORLANDC__) && (__BORLANDC__ >= 0x560) && (__BORLANDC__ <= 0x564) && !defined(_USE_OLD_RW_STL)
+ return std::tolower( Ch);
+ #else
+ return std::tolower<CharT>( Ch, m_Loc );
+ #endif
+ }
+ private:
+ const std::locale& m_Loc;
+ };
+
+ // a toupper functor
+ template<typename CharT>
+ struct to_upperF : public std::unary_function<CharT, CharT>
+ {
+ // Constructor
+ to_upperF( const std::locale& Loc ) : m_Loc( Loc ) {}
+
+ // Operation
+ CharT operator ()( CharT Ch ) const
+ {
+ #if defined(__BORLANDC__) && (__BORLANDC__ >= 0x560) && (__BORLANDC__ <= 0x564) && !defined(_USE_OLD_RW_STL)
+ return std::toupper( Ch);
+ #else
+ return std::toupper<CharT>( Ch, m_Loc );
+ #endif
+ }
+ private:
+ const std::locale& m_Loc;
+ };
+
+ } // namespace detail
+ } // namespace algorithm
+} // namespace boost
+
+
+#endif // BOOST_STRING_CASE_CONV_DETAIL_HPP
diff --git a/boost/boost/algorithm/string/detail/classification.hpp b/boost/boost/algorithm/string/detail/classification.hpp
new file mode 100644
index 00000000000..c950bfac234
--- /dev/null
+++ b/boost/boost/algorithm/string/detail/classification.hpp
@@ -0,0 +1,197 @@
+// Boost string_algo library classification.hpp header file ---------------------------//
+
+// Copyright Pavol Droba 2002-2003. Use, modification and
+// distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_CLASSIFICATION_DETAIL_HPP
+#define BOOST_STRING_CLASSIFICATION_DETAIL_HPP
+
+#include <boost/algorithm/string/config.hpp>
+#include <algorithm>
+#include <functional>
+#include <locale>
+#include <set>
+
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+
+#include <boost/algorithm/string/predicate_facade.hpp>
+#include <boost/type_traits/remove_const.hpp>
+
+namespace boost {
+ namespace algorithm {
+ namespace detail {
+
+// classification functors -----------------------------------------------//
+
+ // is_classified functor
+ struct is_classifiedF :
+ public predicate_facade<is_classifiedF>
+ {
+ // Boost.Lambda support
+ template <class Args> struct sig { typedef bool type; };
+
+ // Constructor from a locale
+ is_classifiedF(std::ctype_base::mask Type, std::locale const & Loc = std::locale()) :
+ m_Type(Type), m_Locale(Loc) {}
+
+ // Operation
+ template<typename CharT>
+ bool operator()( CharT Ch ) const
+ {
+ return std::use_facet< std::ctype<CharT> >(m_Locale).is( m_Type, Ch );
+ }
+
+ #if defined(__BORLANDC__) && (__BORLANDC__ >= 0x560) && (__BORLANDC__ <= 0x582) && !defined(_USE_OLD_RW_STL)
+ template<>
+ bool operator()( char const Ch ) const
+ {
+ return std::use_facet< std::ctype<char> >(m_Locale).is( m_Type, Ch );
+ }
+ #endif
+
+ private:
+ const std::ctype_base::mask m_Type;
+ const std::locale m_Locale;
+ };
+
+ // is_any_of functor
+ /*
+ returns true if the value is from the specified set
+ */
+ template<typename CharT>
+ struct is_any_ofF :
+ public predicate_facade<is_any_ofF<CharT> >
+ {
+ // Boost.Lambda support
+ template <class Args> struct sig { typedef bool type; };
+
+ // Constructor
+ template<typename RangeT>
+ is_any_ofF( const RangeT& Range ) :
+ m_Set( begin(Range), end(Range) ) {}
+
+ // Operation
+ template<typename Char2T>
+ bool operator()( Char2T Ch ) const
+ {
+ return m_Set.find(Ch)!=m_Set.end();
+ }
+
+ private:
+ // set cannot operate on const value-type
+ typedef typename remove_const<CharT>::type set_value_type;
+ std::set<set_value_type> m_Set;
+ };
+
+ // is_from_range functor
+ /*
+ returns true if the value is from the specified range.
+ (i.e. x>=From && x>=To)
+ */
+ template<typename CharT>
+ struct is_from_rangeF :
+ public predicate_facade< is_from_rangeF<CharT> >
+ {
+ // Boost.Lambda support
+ template <class Args> struct sig { typedef bool type; };
+
+ // Constructor
+ is_from_rangeF( CharT From, CharT To ) : m_From(From), m_To(To) {}
+
+ // Operation
+ template<typename Char2T>
+ bool operator()( Char2T Ch ) const
+ {
+ return ( m_From <= Ch ) && ( Ch <= m_To );
+ }
+
+ private:
+ CharT m_From;
+ CharT m_To;
+ };
+
+ // class_and composition predicate
+ template<typename Pred1T, typename Pred2T>
+ struct pred_andF :
+ public predicate_facade< pred_andF<Pred1T,Pred2T> >
+ {
+ public:
+
+ // Boost.Lambda support
+ template <class Args> struct sig { typedef bool type; };
+
+ // Constructor
+ pred_andF( Pred1T Pred1, Pred2T Pred2 ) :
+ m_Pred1(Pred1), m_Pred2(Pred2) {}
+
+ // Operation
+ template<typename CharT>
+ bool operator()( CharT Ch ) const
+ {
+ return m_Pred1(Ch) && m_Pred2(Ch);
+ }
+
+ private:
+ Pred1T m_Pred1;
+ Pred2T m_Pred2;
+ };
+
+ // class_or composition predicate
+ template<typename Pred1T, typename Pred2T>
+ struct pred_orF :
+ public predicate_facade< pred_orF<Pred1T,Pred2T> >
+ {
+ public:
+ // Boost.Lambda support
+ template <class Args> struct sig { typedef bool type; };
+
+ // Constructor
+ pred_orF( Pred1T Pred1, Pred2T Pred2 ) :
+ m_Pred1(Pred1), m_Pred2(Pred2) {}
+
+ // Operation
+ template<typename CharT>
+ bool operator()( CharT Ch ) const
+ {
+ return m_Pred1(Ch) || m_Pred2(Ch);
+ }
+
+ private:
+ Pred1T m_Pred1;
+ Pred2T m_Pred2;
+ };
+
+ // class_not composition predicate
+ template< typename PredT >
+ struct pred_notF :
+ public predicate_facade< pred_notF<PredT> >
+ {
+ public:
+ // Boost.Lambda support
+ template <class Args> struct sig { typedef bool type; };
+
+ // Constructor
+ pred_notF( PredT Pred ) : m_Pred(Pred) {}
+
+ // Operation
+ template<typename CharT>
+ bool operator()( CharT Ch ) const
+ {
+ return !m_Pred(Ch);
+ }
+
+ private:
+ PredT m_Pred;
+ };
+
+ } // namespace detail
+ } // namespace algorithm
+} // namespace boost
+
+
+#endif // BOOST_STRING_CLASSIFICATION_DETAIL_HPP
diff --git a/boost/boost/algorithm/string/detail/find_format.hpp b/boost/boost/algorithm/string/detail/find_format.hpp
new file mode 100644
index 00000000000..2ba7ba28e9e
--- /dev/null
+++ b/boost/boost/algorithm/string/detail/find_format.hpp
@@ -0,0 +1,192 @@
+// Boost string_algo library find_format.hpp header file ---------------------------//
+
+// Copyright Pavol Droba 2002-2003. Use, modification and
+// distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_FIND_FORMAT_DETAIL_HPP
+#define BOOST_STRING_FIND_FORMAT_DETAIL_HPP
+
+#include <boost/algorithm/string/config.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <boost/range/const_iterator.hpp>
+#include <boost/range/iterator.hpp>
+#include <boost/algorithm/string/detail/find_format_store.hpp>
+#include <boost/algorithm/string/detail/replace_storage.hpp>
+
+namespace boost {
+ namespace algorithm {
+ namespace detail {
+
+// find_format_copy (iterator variant) implementation -------------------------------//
+
+ template<
+ typename OutputIteratorT,
+ typename InputT,
+ typename FormatterT,
+ typename FindResultT >
+ inline OutputIteratorT find_format_copy_impl(
+ OutputIteratorT Output,
+ const InputT& Input,
+ FormatterT Formatter,
+ const FindResultT& FindResult )
+ {
+ return find_format_copy_impl2(
+ Output,
+ Input,
+ Formatter,
+ FindResult,
+ Formatter(FindResult) );
+ }
+
+ template<
+ typename OutputIteratorT,
+ typename InputT,
+ typename FormatterT,
+ typename FindResultT,
+ typename FormatResultT >
+ inline OutputIteratorT find_format_copy_impl2(
+ OutputIteratorT Output,
+ const InputT& Input,
+ FormatterT Formatter,
+ const FindResultT& FindResult,
+ const FormatResultT& FormatResult )
+ {
+ typedef find_format_store<
+ BOOST_STRING_TYPENAME
+ range_const_iterator<InputT>::type,
+ FormatterT,
+ FormatResultT > store_type;
+
+ // Create store for the find result
+ store_type M( FindResult, FormatResult, Formatter );
+
+ if ( !M )
+ {
+ // Match not found - return original sequence
+ std::copy( begin(Input), end(Input), Output );
+ return Output;
+ }
+
+ // Copy the beginning of the sequence
+ std::copy( begin(Input), begin(M), Output );
+ // Format find result
+ // Copy formated result
+ std::copy( begin(M.format_result()), end(M.format_result()), Output );
+ // Copy the rest of the sequence
+ std::copy( M.end(), end(Input), Output );
+
+ return Output;
+ }
+
+// find_format_copy implementation --------------------------------------------------//
+
+ template<
+ typename InputT,
+ typename FormatterT,
+ typename FindResultT >
+ inline InputT find_format_copy_impl(
+ const InputT& Input,
+ FormatterT Formatter,
+ const FindResultT& FindResult)
+ {
+ return find_format_copy_impl2(
+ Input,
+ Formatter,
+ FindResult,
+ Formatter(FindResult) );
+ }
+
+ template<
+ typename InputT,
+ typename FormatterT,
+ typename FindResultT,
+ typename FormatResultT >
+ inline InputT find_format_copy_impl2(
+ const InputT& Input,
+ FormatterT Formatter,
+ const FindResultT& FindResult,
+ const FormatResultT& FormatResult)
+ {
+ typedef find_format_store<
+ BOOST_STRING_TYPENAME
+ range_const_iterator<InputT>::type,
+ FormatterT,
+ FormatResultT > store_type;
+
+ // Create store for the find result
+ store_type M( FindResult, FormatResult, Formatter );
+
+ if ( !M )
+ {
+ // Match not found - return original sequence
+ return InputT( Input );
+ }
+
+ InputT Output;
+ // Copy the beginning of the sequence
+ insert( Output, end(Output), begin(Input), M.begin() );
+ // Copy formated result
+ insert( Output, end(Output), M.format_result() );
+ // Copy the rest of the sequence
+ insert( Output, end(Output), M.end(), end(Input) );
+
+ return Output;
+ }
+
+// replace implementation ----------------------------------------------------//
+
+ template<
+ typename InputT,
+ typename FormatterT,
+ typename FindResultT >
+ inline void find_format_impl(
+ InputT& Input,
+ FormatterT Formatter,
+ const FindResultT& FindResult)
+ {
+ find_format_impl2(
+ Input,
+ Formatter,
+ FindResult,
+ Formatter(FindResult) );
+ }
+
+ template<
+ typename InputT,
+ typename FormatterT,
+ typename FindResultT,
+ typename FormatResultT >
+ inline void find_format_impl2(
+ InputT& Input,
+ FormatterT Formatter,
+ const FindResultT& FindResult,
+ const FormatResultT& FormatResult)
+ {
+ typedef find_format_store<
+ BOOST_STRING_TYPENAME
+ range_iterator<InputT>::type,
+ FormatterT,
+ FormatResultT > store_type;
+
+ // Create store for the find result
+ store_type M( FindResult, FormatResult, Formatter );
+
+ if ( !M )
+ {
+ // Search not found - return original sequence
+ return;
+ }
+
+ // Replace match
+ replace( Input, M.begin(), M.end(), M.format_result() );
+ }
+
+ } // namespace detail
+ } // namespace algorithm
+} // namespace boost
+
+#endif // BOOST_STRING_FIND_FORMAT_DETAIL_HPP
diff --git a/boost/boost/algorithm/string/detail/find_format_all.hpp b/boost/boost/algorithm/string/detail/find_format_all.hpp
new file mode 100644
index 00000000000..a6be0b6faef
--- /dev/null
+++ b/boost/boost/algorithm/string/detail/find_format_all.hpp
@@ -0,0 +1,262 @@
+// Boost string_algo library find_format_all.hpp header file ---------------------------//
+
+// Copyright Pavol Droba 2002-2003. Use, modification and
+// distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_FIND_FORMAT_ALL_DETAIL_HPP
+#define BOOST_STRING_FIND_FORMAT_ALL_DETAIL_HPP
+
+#include <boost/algorithm/string/config.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <boost/range/const_iterator.hpp>
+#include <boost/range/value_type.hpp>
+#include <boost/algorithm/string/detail/find_format_store.hpp>
+#include <boost/algorithm/string/detail/replace_storage.hpp>
+
+namespace boost {
+ namespace algorithm {
+ namespace detail {
+
+// find_format_all_copy (iterator variant) implementation ---------------------------//
+
+ template<
+ typename OutputIteratorT,
+ typename InputT,
+ typename FinderT,
+ typename FormatterT,
+ typename FindResultT >
+ inline OutputIteratorT find_format_all_copy_impl(
+ OutputIteratorT Output,
+ const InputT& Input,
+ FinderT Finder,
+ FormatterT Formatter,
+ const FindResultT& FindResult )
+ {
+ return find_format_all_copy_impl2(
+ Output,
+ Input,
+ Finder,
+ Formatter,
+ FindResult,
+ Formatter(FindResult) );
+ }
+
+ template<
+ typename OutputIteratorT,
+ typename InputT,
+ typename FinderT,
+ typename FormatterT,
+ typename FindResultT,
+ typename FormatResultT >
+ inline OutputIteratorT find_format_all_copy_impl2(
+ OutputIteratorT Output,
+ const InputT& Input,
+ FinderT Finder,
+ FormatterT Formatter,
+ const FindResultT& FindResult,
+ const FormatResultT& FormatResult )
+ {
+ typedef BOOST_STRING_TYPENAME
+ range_const_iterator<InputT>::type input_iterator_type;
+
+ typedef find_format_store<
+ input_iterator_type,
+ FormatterT,
+ FormatResultT > store_type;
+
+ // Create store for the find result
+ store_type M( FindResult, FormatResult, Formatter );
+
+ // Initialize last match
+ input_iterator_type LastMatch=begin(Input);
+
+ // Iterate through all matches
+ while( M )
+ {
+ // Copy the beginning of the sequence
+ std::copy( LastMatch, M.begin(), Output );
+ // Copy formated result
+ std::copy( begin(M.format_result()), end(M.format_result()), Output );
+
+ // Proceed to the next match
+ LastMatch=M.end();
+ M=Finder( LastMatch, end(Input) );
+ }
+
+ // Copy the rest of the sequence
+ std::copy( LastMatch, end(Input), Output );
+
+ return Output;
+ }
+
+// find_format_all_copy implementation ----------------------------------------------//
+
+ template<
+ typename InputT,
+ typename FinderT,
+ typename FormatterT,
+ typename FindResultT >
+ inline InputT find_format_all_copy_impl(
+ const InputT& Input,
+ FinderT Finder,
+ FormatterT Formatter,
+ const FindResultT& FindResult)
+ {
+ return find_format_all_copy_impl2(
+ Input,
+ Finder,
+ Formatter,
+ FindResult,
+ Formatter(FindResult) );
+ }
+
+ template<
+ typename InputT,
+ typename FinderT,
+ typename FormatterT,
+ typename FindResultT,
+ typename FormatResultT >
+ inline InputT find_format_all_copy_impl2(
+ const InputT& Input,
+ FinderT Finder,
+ FormatterT Formatter,
+ const FindResultT& FindResult,
+ const FormatResultT& FormatResult)
+ {
+ typedef BOOST_STRING_TYPENAME
+ range_const_iterator<InputT>::type input_iterator_type;
+
+ typedef find_format_store<
+ input_iterator_type,
+ FormatterT,
+ FormatResultT > store_type;
+
+ // Create store for the find result
+ store_type M( FindResult, FormatResult, Formatter );
+
+ // Initialize last match
+ input_iterator_type LastMatch=begin(Input);
+
+ // Output temporary
+ InputT Output;
+
+ // Iterate through all matches
+ while( M )
+ {
+ // Copy the beginning of the sequence
+ insert( Output, end(Output), LastMatch, M.begin() );
+ // Copy formated result
+ insert( Output, end(Output), M.format_result() );
+
+ // Proceed to the next match
+ LastMatch=M.end();
+ M=Finder( LastMatch, end(Input) );
+ }
+
+ // Copy the rest of the sequence
+ insert( Output, end(Output), LastMatch, end(Input) );
+
+ return Output;
+ }
+
+// find_format_all implementation ------------------------------------------------//
+
+ template<
+ typename InputT,
+ typename FinderT,
+ typename FormatterT,
+ typename FindResultT >
+ inline void find_format_all_impl(
+ InputT& Input,
+ FinderT Finder,
+ FormatterT Formatter,
+ FindResultT FindResult)
+ {
+ find_format_all_impl2(
+ Input,
+ Finder,
+ Formatter,
+ FindResult,
+ Formatter(FindResult) );
+ }
+
+ template<
+ typename InputT,
+ typename FinderT,
+ typename FormatterT,
+ typename FindResultT,
+ typename FormatResultT >
+ inline void find_format_all_impl2(
+ InputT& Input,
+ FinderT Finder,
+ FormatterT Formatter,
+ FindResultT FindResult,
+ FormatResultT FormatResult)
+ {
+ typedef BOOST_STRING_TYPENAME
+ range_iterator<InputT>::type input_iterator_type;
+ typedef find_format_store<
+ input_iterator_type,
+ FormatterT,
+ FormatResultT > store_type;
+
+ // Create store for the find result
+ store_type M( FindResult, FormatResult, Formatter );
+
+ // Instantiate replacement storage
+ std::deque<
+ BOOST_STRING_TYPENAME range_value<InputT>::type> Storage;
+
+ // Initialize replacement iterators
+ input_iterator_type InsertIt=begin(Input);
+ input_iterator_type SearchIt=begin(Input);
+
+ while( M )
+ {
+ // process the segment
+ InsertIt=process_segment(
+ Storage,
+ Input,
+ InsertIt,
+ SearchIt,
+ M.begin() );
+
+ // Adjust search iterator
+ SearchIt=M.end();
+
+ // Copy formated replace to the storage
+ copy_to_storage( Storage, M.format_result() );
+
+ // Find range for a next match
+ M=Finder( SearchIt, end(Input) );
+ }
+
+ // process the last segment
+ InsertIt=process_segment(
+ Storage,
+ Input,
+ InsertIt,
+ SearchIt,
+ end(Input) );
+
+ if ( Storage.empty() )
+ {
+ // Truncate input
+ erase( Input, InsertIt, end(Input) );
+ }
+ else
+ {
+ // Copy remaining data to the end of input
+ insert( Input, end(Input), Storage.begin(), Storage.end() );
+ }
+ }
+
+ } // namespace detail
+ } // namespace algorithm
+} // namespace boost
+
+#endif // BOOST_STRING_FIND_FORMAT_ALL_DETAIL_HPP
diff --git a/boost/boost/algorithm/string/detail/find_format_store.hpp b/boost/boost/algorithm/string/detail/find_format_store.hpp
new file mode 100644
index 00000000000..a1afc55c100
--- /dev/null
+++ b/boost/boost/algorithm/string/detail/find_format_store.hpp
@@ -0,0 +1,70 @@
+// Boost string_algo library find_format_store.hpp header file ---------------------------//
+
+// Copyright Pavol Droba 2002-2003. Use, modification and
+// distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_FIND_FORMAT_STORE_DETAIL_HPP
+#define BOOST_STRING_FIND_FORMAT_STORE_DETAIL_HPP
+
+#include <boost/algorithm/string/config.hpp>
+#include <boost/range/iterator_range.hpp>
+
+namespace boost {
+ namespace algorithm {
+ namespace detail {
+
+// temporary format and find result storage --------------------------------//
+
+ template<
+ typename ForwardIteratorT,
+ typename FormatterT,
+ typename FormatResultT >
+ class find_format_store :
+ public iterator_range<ForwardIteratorT>
+ {
+ public:
+ // typedefs
+ typedef iterator_range<ForwardIteratorT> base_type;
+ typedef FormatterT formatter_type;
+ typedef FormatResultT format_result_type;
+
+ public:
+ // Construction
+ find_format_store(
+ const base_type& FindResult,
+ const format_result_type& FormatResult,
+ const formatter_type& Formatter ) :
+ base_type(FindResult),
+ m_FormatResult(FormatResult),
+ m_Formatter(Formatter) {}
+
+ // Assignment
+ template< typename FindResultT >
+ find_format_store& operator=( FindResultT FindResult )
+ {
+ iterator_range<ForwardIteratorT>::operator=(FindResult);
+ m_FormatResult=m_Formatter(FindResult);
+
+ return *this;
+ }
+
+ // Retrieve format result
+ const format_result_type& format_result()
+ {
+ return m_FormatResult;
+ }
+
+ private:
+ format_result_type m_FormatResult;
+ const formatter_type& m_Formatter;
+ };
+
+ } // namespace detail
+ } // namespace algorithm
+} // namespace boost
+
+#endif // BOOST_STRING_FIND_FORMAT_STORE_DETAIL_HPP
diff --git a/boost/boost/algorithm/string/detail/find_iterator.hpp b/boost/boost/algorithm/string/detail/find_iterator.hpp
new file mode 100644
index 00000000000..ebfd59aae61
--- /dev/null
+++ b/boost/boost/algorithm/string/detail/find_iterator.hpp
@@ -0,0 +1,86 @@
+// Boost string_algo library find_iterator.hpp header file ---------------------------//
+
+// Copyright Pavol Droba 2002-2003. Use, modification and
+// distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_FIND_ITERATOR_DETAIL_HPP
+#define BOOST_STRING_FIND_ITERATOR_DETAIL_HPP
+
+#include <boost/algorithm/string/config.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <boost/iterator/iterator_facade.hpp>
+#include <boost/iterator/iterator_categories.hpp>
+#include <boost/function.hpp>
+
+namespace boost {
+ namespace algorithm {
+ namespace detail {
+
+// find_iterator base -----------------------------------------------//
+
+ // Find iterator base
+ template<typename IteratorT>
+ class find_iterator_base
+ {
+ protected:
+ // typedefs
+ typedef IteratorT input_iterator_type;
+ typedef iterator_range<IteratorT> match_type;
+ typedef function2<
+ match_type,
+ input_iterator_type,
+ input_iterator_type> finder_type;
+
+ protected:
+ // Protected construction/destruction
+
+ // Default constructor
+ find_iterator_base() {};
+ // Copy construction
+ find_iterator_base( const find_iterator_base& Other ) :
+ m_Finder(Other.m_Finder) {}
+
+ // Constructor
+ template<typename FinderT>
+ find_iterator_base( FinderT Finder, int ) :
+ m_Finder(Finder) {}
+
+ // Destructor
+ ~find_iterator_base() {}
+
+ // Find operation
+ match_type do_find(
+ input_iterator_type Begin,
+ input_iterator_type End ) const
+ {
+ if (!m_Finder.empty())
+ {
+ return m_Finder(Begin,End);
+ }
+ else
+ {
+ return match_type(End,End);
+ }
+ }
+
+ // Check
+ bool is_null() const
+ {
+ return m_Finder.empty();
+ }
+
+ private:
+ // Finder
+ finder_type m_Finder;
+ };
+
+ } // namespace detail
+ } // namespace algorithm
+} // namespace boost
+
+
+#endif // BOOST_STRING_FIND_ITERATOR_DETAIL_HPP
diff --git a/boost/boost/algorithm/string/detail/finder.hpp b/boost/boost/algorithm/string/detail/finder.hpp
new file mode 100644
index 00000000000..cd6d6f7e041
--- /dev/null
+++ b/boost/boost/algorithm/string/detail/finder.hpp
@@ -0,0 +1,644 @@
+// Boost string_algo library finder.hpp header file ---------------------------//
+
+// Copyright Pavol Droba 2002-2006. Use, modification and
+// distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_FINDER_DETAIL_HPP
+#define BOOST_STRING_FINDER_DETAIL_HPP
+
+#include <boost/algorithm/string/config.hpp>
+#include <boost/algorithm/string/constants.hpp>
+#include <boost/detail/iterator.hpp>
+
+#include <boost/range/iterator_range.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/empty.hpp>
+
+namespace boost {
+ namespace algorithm {
+ namespace detail {
+
+
+// find first functor -----------------------------------------------//
+
+ // find a subsequence in the sequence ( functor )
+ /*
+ Returns a pair <begin,end> marking the subsequence in the sequence.
+ If the find fails, functor returns <End,End>
+ */
+ template<typename SearchIteratorT,typename PredicateT>
+ struct first_finderF
+ {
+ typedef SearchIteratorT search_iterator_type;
+
+ // Construction
+ template< typename SearchT >
+ first_finderF( const SearchT& Search, PredicateT Comp ) :
+ m_Search(begin(Search), end(Search)), m_Comp(Comp) {}
+ first_finderF(
+ search_iterator_type SearchBegin,
+ search_iterator_type SearchEnd,
+ PredicateT Comp ) :
+ m_Search(SearchBegin, SearchEnd), m_Comp(Comp) {}
+
+ // Operation
+ template< typename ForwardIteratorT >
+ iterator_range<ForwardIteratorT>
+ operator()(
+ ForwardIteratorT Begin,
+ ForwardIteratorT End ) const
+ {
+ typedef iterator_range<ForwardIteratorT> result_type;
+ typedef ForwardIteratorT input_iterator_type;
+
+ // Outer loop
+ for(input_iterator_type OuterIt=Begin;
+ OuterIt!=End;
+ ++OuterIt)
+ {
+ // Sanity check
+ if( boost::empty(m_Search) )
+ return result_type( End, End );
+
+ input_iterator_type InnerIt=OuterIt;
+ search_iterator_type SubstrIt=m_Search.begin();
+ for(;
+ InnerIt!=End && SubstrIt!=m_Search.end();
+ ++InnerIt,++SubstrIt)
+ {
+ if( !( m_Comp(*InnerIt,*SubstrIt) ) )
+ break;
+ }
+
+ // Substring matching succeeded
+ if ( SubstrIt==m_Search.end() )
+ return result_type( OuterIt, InnerIt );
+ }
+
+ return result_type( End, End );
+ }
+
+ private:
+ iterator_range<search_iterator_type> m_Search;
+ PredicateT m_Comp;
+ };
+
+// find last functor -----------------------------------------------//
+
+ // find the last match a subseqeunce in the sequence ( functor )
+ /*
+ Returns a pair <begin,end> marking the subsequence in the sequence.
+ If the find fails, returns <End,End>
+ */
+ template<typename SearchIteratorT, typename PredicateT>
+ struct last_finderF
+ {
+ typedef SearchIteratorT search_iterator_type;
+ typedef first_finderF<
+ search_iterator_type,
+ PredicateT> first_finder_type;
+
+ // Construction
+ template< typename SearchT >
+ last_finderF( const SearchT& Search, PredicateT Comp ) :
+ m_Search(begin(Search), end(Search)), m_Comp(Comp) {}
+ last_finderF(
+ search_iterator_type SearchBegin,
+ search_iterator_type SearchEnd,
+ PredicateT Comp ) :
+ m_Search(SearchBegin, SearchEnd), m_Comp(Comp) {}
+
+ // Operation
+ template< typename ForwardIteratorT >
+ iterator_range<ForwardIteratorT>
+ operator()(
+ ForwardIteratorT Begin,
+ ForwardIteratorT End ) const
+ {
+ typedef iterator_range<ForwardIteratorT> result_type;
+
+ if( boost::empty(m_Search) )
+ return result_type( End, End );
+
+ typedef BOOST_STRING_TYPENAME boost::detail::
+ iterator_traits<ForwardIteratorT>::iterator_category category;
+
+ return findit( Begin, End, category() );
+ }
+
+ private:
+ // forward iterator
+ template< typename ForwardIteratorT >
+ iterator_range<ForwardIteratorT>
+ findit(
+ ForwardIteratorT Begin,
+ ForwardIteratorT End,
+ std::forward_iterator_tag ) const
+ {
+ typedef ForwardIteratorT input_iterator_type;
+ typedef iterator_range<ForwardIteratorT> result_type;
+
+ first_finder_type first_finder(
+ m_Search.begin(), m_Search.end(), m_Comp );
+
+ result_type M=first_finder( Begin, End );
+ result_type Last=M;
+
+ while( M )
+ {
+ Last=M;
+ M=first_finder( end(M), End );
+ }
+
+ return Last;
+ }
+
+ // bidirectional iterator
+ template< typename ForwardIteratorT >
+ iterator_range<ForwardIteratorT>
+ findit(
+ ForwardIteratorT Begin,
+ ForwardIteratorT End,
+ std::bidirectional_iterator_tag ) const
+ {
+ typedef iterator_range<ForwardIteratorT> result_type;
+ typedef ForwardIteratorT input_iterator_type;
+
+ // Outer loop
+ for(input_iterator_type OuterIt=End;
+ OuterIt!=Begin; )
+ {
+ input_iterator_type OuterIt2=--OuterIt;
+
+ input_iterator_type InnerIt=OuterIt2;
+ search_iterator_type SubstrIt=m_Search.begin();
+ for(;
+ InnerIt!=End && SubstrIt!=m_Search.end();
+ ++InnerIt,++SubstrIt)
+ {
+ if( !( m_Comp(*InnerIt,*SubstrIt) ) )
+ break;
+ }
+
+ // Substring matching succeeded
+ if( SubstrIt==m_Search.end() )
+ return result_type( OuterIt2, InnerIt );
+ }
+
+ return result_type( End, End );
+ }
+
+ private:
+ iterator_range<search_iterator_type> m_Search;
+ PredicateT m_Comp;
+ };
+
+// find n-th functor -----------------------------------------------//
+
+ // find the n-th match of a subsequence in the sequence ( functor )
+ /*
+ Returns a pair <begin,end> marking the subsequence in the sequence.
+ If the find fails, returns <End,End>
+ */
+ template<typename SearchIteratorT, typename PredicateT>
+ struct nth_finderF
+ {
+ typedef SearchIteratorT search_iterator_type;
+ typedef first_finderF<
+ search_iterator_type,
+ PredicateT> first_finder_type;
+ typedef last_finderF<
+ search_iterator_type,
+ PredicateT> last_finder_type;
+
+ // Construction
+ template< typename SearchT >
+ nth_finderF(
+ const SearchT& Search,
+ int Nth,
+ PredicateT Comp) :
+ m_Search(begin(Search), end(Search)),
+ m_Nth(Nth),
+ m_Comp(Comp) {}
+ nth_finderF(
+ search_iterator_type SearchBegin,
+ search_iterator_type SearchEnd,
+ int Nth,
+ PredicateT Comp) :
+ m_Search(SearchBegin, SearchEnd),
+ m_Nth(Nth),
+ m_Comp(Comp) {}
+
+ // Operation
+ template< typename ForwardIteratorT >
+ iterator_range<ForwardIteratorT>
+ operator()(
+ ForwardIteratorT Begin,
+ ForwardIteratorT End ) const
+ {
+ if(m_Nth>=0)
+ {
+ return find_forward(Begin, End, m_Nth);
+ }
+ else
+ {
+ return find_backward(Begin, End, -m_Nth);
+ }
+
+ }
+
+ private:
+ // Implementation helpers
+ template< typename ForwardIteratorT >
+ iterator_range<ForwardIteratorT>
+ find_forward(
+ ForwardIteratorT Begin,
+ ForwardIteratorT End,
+ unsigned int N) const
+ {
+ typedef ForwardIteratorT input_iterator_type;
+ typedef iterator_range<ForwardIteratorT> result_type;
+
+ // Sanity check
+ if( boost::empty(m_Search) )
+ return result_type( End, End );
+
+ // Instantiate find functor
+ first_finder_type first_finder(
+ m_Search.begin(), m_Search.end(), m_Comp );
+
+ result_type M( Begin, Begin );
+
+ for( unsigned int n=0; n<=N; ++n )
+ {
+ // find next match
+ M=first_finder( end(M), End );
+
+ if ( !M )
+ {
+ // Subsequence not found, return
+ return M;
+ }
+ }
+
+ return M;
+ }
+
+ template< typename ForwardIteratorT >
+ iterator_range<ForwardIteratorT>
+ find_backward(
+ ForwardIteratorT Begin,
+ ForwardIteratorT End,
+ unsigned int N) const
+ {
+ typedef ForwardIteratorT input_iterator_type;
+ typedef iterator_range<ForwardIteratorT> result_type;
+
+ // Sanity check
+ if( boost::empty(m_Search) )
+ return result_type( End, End );
+
+ // Instantiate find functor
+ last_finder_type last_finder(
+ m_Search.begin(), m_Search.end(), m_Comp );
+
+ result_type M( End, End );
+
+ for( unsigned int n=1; n<=N; ++n )
+ {
+ // find next match
+ M=last_finder( Begin, begin(M) );
+
+ if ( !M )
+ {
+ // Subsequence not found, return
+ return M;
+ }
+ }
+
+ return M;
+ }
+
+
+ private:
+ iterator_range<search_iterator_type> m_Search;
+ int m_Nth;
+ PredicateT m_Comp;
+ };
+
+// find head/tail implementation helpers ---------------------------//
+
+ template<typename ForwardIteratorT>
+ iterator_range<ForwardIteratorT>
+ find_head_impl(
+ ForwardIteratorT Begin,
+ ForwardIteratorT End,
+ unsigned int N,
+ std::forward_iterator_tag )
+ {
+ typedef ForwardIteratorT input_iterator_type;
+ typedef iterator_range<ForwardIteratorT> result_type;
+
+ input_iterator_type It=Begin;
+ for(
+ unsigned int Index=0;
+ Index<N && It!=End; ++Index,++It ) {};
+
+ return result_type( Begin, It );
+ }
+
+ template< typename ForwardIteratorT >
+ iterator_range<ForwardIteratorT>
+ find_head_impl(
+ ForwardIteratorT Begin,
+ ForwardIteratorT End,
+ unsigned int N,
+ std::random_access_iterator_tag )
+ {
+ typedef ForwardIteratorT input_iterator_type;
+ typedef iterator_range<ForwardIteratorT> result_type;
+
+ if ( (End<=Begin) || ( static_cast<unsigned int>(End-Begin) < N ) )
+ return result_type( Begin, End );
+
+ return result_type(Begin,Begin+N);
+ }
+
+ // Find head implementation
+ template<typename ForwardIteratorT>
+ iterator_range<ForwardIteratorT>
+ find_head_impl(
+ ForwardIteratorT Begin,
+ ForwardIteratorT End,
+ unsigned int N )
+ {
+ typedef BOOST_STRING_TYPENAME boost::detail::
+ iterator_traits<ForwardIteratorT>::iterator_category category;
+
+ return find_head_impl( Begin, End, N, category() );
+ }
+
+ template< typename ForwardIteratorT >
+ iterator_range<ForwardIteratorT>
+ find_tail_impl(
+ ForwardIteratorT Begin,
+ ForwardIteratorT End,
+ unsigned int N,
+ std::forward_iterator_tag )
+ {
+ typedef ForwardIteratorT input_iterator_type;
+ typedef iterator_range<ForwardIteratorT> result_type;
+
+ unsigned int Index=0;
+ input_iterator_type It=Begin;
+ input_iterator_type It2=Begin;
+
+ // Advance It2 by N increments
+ for( Index=0; Index<N && It2!=End; ++Index,++It2 ) {};
+
+ // Advance It, It2 to the end
+ for(; It2!=End; ++It,++It2 ) {};
+
+ return result_type( It, It2 );
+ }
+
+ template< typename ForwardIteratorT >
+ iterator_range<ForwardIteratorT>
+ find_tail_impl(
+ ForwardIteratorT Begin,
+ ForwardIteratorT End,
+ unsigned int N,
+ std::bidirectional_iterator_tag )
+ {
+ typedef ForwardIteratorT input_iterator_type;
+ typedef iterator_range<ForwardIteratorT> result_type;
+
+ input_iterator_type It=End;
+ for(
+ unsigned int Index=0;
+ Index<N && It!=Begin; ++Index,--It ) {};
+
+ return result_type( It, End );
+ }
+
+ template< typename ForwardIteratorT >
+ iterator_range<ForwardIteratorT>
+ find_tail_impl(
+ ForwardIteratorT Begin,
+ ForwardIteratorT End,
+ unsigned int N,
+ std::random_access_iterator_tag )
+ {
+ typedef ForwardIteratorT input_iterator_type;
+ typedef iterator_range<ForwardIteratorT> result_type;
+
+ if ( (End<=Begin) || ( static_cast<unsigned int>(End-Begin) < N ) )
+ return result_type( Begin, End );
+
+ return result_type( End-N, End );
+ }
+
+ // Operation
+ template< typename ForwardIteratorT >
+ iterator_range<ForwardIteratorT>
+ find_tail_impl(
+ ForwardIteratorT Begin,
+ ForwardIteratorT End,
+ unsigned int N )
+ {
+ typedef BOOST_STRING_TYPENAME boost::detail::
+ iterator_traits<ForwardIteratorT>::iterator_category category;
+
+ return find_tail_impl( Begin, End, N, category() );
+ }
+
+
+
+// find head functor -----------------------------------------------//
+
+
+ // find a head in the sequence ( functor )
+ /*
+ This functor find a head of the specified range. For
+ a specified N, the head is a subsequence of N starting
+ elements of the range.
+ */
+ struct head_finderF
+ {
+ // Construction
+ head_finderF( int N ) : m_N(N) {}
+
+ // Operation
+ template< typename ForwardIteratorT >
+ iterator_range<ForwardIteratorT>
+ operator()(
+ ForwardIteratorT Begin,
+ ForwardIteratorT End ) const
+ {
+ if(m_N>=0)
+ {
+ return find_head_impl( Begin, End, m_N );
+ }
+ else
+ {
+ iterator_range<ForwardIteratorT> Res=
+ find_tail_impl( Begin, End, -m_N );
+
+ return make_iterator_range(Begin, Res.begin());
+ }
+ }
+
+ private:
+ int m_N;
+ };
+
+// find tail functor -----------------------------------------------//
+
+
+ // find a tail in the sequence ( functor )
+ /*
+ This functor find a tail of the specified range. For
+ a specified N, the head is a subsequence of N starting
+ elements of the range.
+ */
+ struct tail_finderF
+ {
+ // Construction
+ tail_finderF( int N ) : m_N(N) {}
+
+ // Operation
+ template< typename ForwardIteratorT >
+ iterator_range<ForwardIteratorT>
+ operator()(
+ ForwardIteratorT Begin,
+ ForwardIteratorT End ) const
+ {
+ if(m_N>=0)
+ {
+ return find_tail_impl( Begin, End, m_N );
+ }
+ else
+ {
+ iterator_range<ForwardIteratorT> Res=
+ find_head_impl( Begin, End, -m_N );
+
+ return make_iterator_range(Res.end(), End);
+ }
+ }
+
+ private:
+ int m_N;
+ };
+
+// find token functor -----------------------------------------------//
+
+ // find a token in a sequence ( functor )
+ /*
+ This find functor finds a token specified be a predicate
+ in a sequence. It is equivalent of std::find algorithm,
+ with an exception that it return range instead of a single
+ iterator.
+
+ If bCompress is set to true, adjacent matching tokens are
+ concatenated into one match.
+ */
+ template< typename PredicateT >
+ struct token_finderF
+ {
+ // Construction
+ token_finderF(
+ PredicateT Pred,
+ token_compress_mode_type eCompress=token_compress_off ) :
+ m_Pred(Pred), m_eCompress(eCompress) {}
+
+ // Operation
+ template< typename ForwardIteratorT >
+ iterator_range<ForwardIteratorT>
+ operator()(
+ ForwardIteratorT Begin,
+ ForwardIteratorT End ) const
+ {
+ typedef iterator_range<ForwardIteratorT> result_type;
+
+ ForwardIteratorT It=std::find_if( Begin, End, m_Pred );
+
+ if( It==End )
+ {
+ return result_type( End, End );
+ }
+ else
+ {
+ ForwardIteratorT It2=It;
+
+ if( m_eCompress==token_compress_on )
+ {
+ // Find first non-matching character
+ while( It2!=End && m_Pred(*It2) ) ++It2;
+ }
+ else
+ {
+ // Advance by one position
+ ++It2;
+ }
+
+ return result_type( It, It2 );
+ }
+ }
+
+ private:
+ PredicateT m_Pred;
+ token_compress_mode_type m_eCompress;
+ };
+
+// find range functor -----------------------------------------------//
+
+ // find a range in the sequence ( functor )
+ /*
+ This functor actually does not perform any find operation.
+ It always returns given iterator range as a result.
+ */
+ template<typename ForwardIterator1T>
+ struct range_finderF
+ {
+ typedef ForwardIterator1T input_iterator_type;
+ typedef iterator_range<input_iterator_type> result_type;
+
+ // Construction
+ range_finderF(
+ input_iterator_type Begin,
+ input_iterator_type End ) : m_Range(Begin, End) {}
+
+ range_finderF(const iterator_range<input_iterator_type>& Range) :
+ m_Range(Range) {}
+
+ // Operation
+ template< typename ForwardIterator2T >
+ iterator_range<ForwardIterator2T>
+ operator()(
+ ForwardIterator2T,
+ ForwardIterator2T ) const
+ {
+#if BOOST_WORKAROUND( __MWERKS__, <= 0x3003 )
+ return iterator_range<const ForwardIterator2T>(this->m_Range);
+#elif BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+ return iterator_range<ForwardIterator2T>(m_Range.begin(), m_Range.end());
+#else
+ return m_Range;
+#endif
+ }
+
+ private:
+ iterator_range<input_iterator_type> m_Range;
+ };
+
+
+ } // namespace detail
+ } // namespace algorithm
+} // namespace boost
+
+#endif // BOOST_STRING_FINDER_DETAIL_HPP
diff --git a/boost/boost/algorithm/string/detail/finder_regex.hpp b/boost/boost/algorithm/string/detail/finder_regex.hpp
new file mode 100644
index 00000000000..7f178da869c
--- /dev/null
+++ b/boost/boost/algorithm/string/detail/finder_regex.hpp
@@ -0,0 +1,121 @@
+// Boost string_algo library find_regex.hpp header file ---------------------------//
+
+// Copyright Pavol Droba 2002-2003. Use, modification and
+// distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_FINDER_REGEX_DETAIL_HPP
+#define BOOST_STRING_FINDER_REGEX_DETAIL_HPP
+
+#include <boost/algorithm/string/config.hpp>
+#include <boost/regex.hpp>
+
+#include <boost/range/iterator_range.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+
+namespace boost {
+ namespace algorithm {
+ namespace detail {
+
+// regex find functor -----------------------------------------------//
+
+ // regex search result
+ template<typename IteratorT>
+ struct regex_search_result :
+ public iterator_range<IteratorT>
+ {
+ typedef regex_search_result<IteratorT> type;
+ typedef iterator_range<IteratorT> base_type;
+ typedef BOOST_STRING_TYPENAME base_type::value_type value_type;
+ typedef BOOST_STRING_TYPENAME base_type::difference_type difference_type;
+ typedef BOOST_STRING_TYPENAME base_type::const_iterator const_iterator;
+ typedef BOOST_STRING_TYPENAME base_type::iterator iterator;
+ typedef boost::match_results<iterator> match_results_type;
+
+ // Construction
+
+ // Construction from the match result
+ regex_search_result( const match_results_type& MatchResults ) :
+ base_type( MatchResults[0].first, MatchResults[0].second ),
+ m_MatchResults( MatchResults ) {}
+
+ // Construction of empty match. End iterator has to be specified
+ regex_search_result( IteratorT End ) :
+ base_type( End, End ) {}
+
+ regex_search_result( const regex_search_result& Other ) :
+ base_type( Other.begin(), Other.end() ),
+ m_MatchResults( Other.m_MatchResults ) {}
+
+ // Assignment
+ regex_search_result& operator=( const regex_search_result& Other )
+ {
+ base_type::operator=( Other );
+ m_MatchResults=Other.m_MatchResults;
+ return *this;
+ }
+
+ // Match result retrival
+ const match_results_type& match_results() const
+ {
+ return m_MatchResults;
+ }
+
+ private:
+ // Saved matchresult
+ match_results_type m_MatchResults;
+ };
+
+ // find_regex
+ /*
+ Regex based search functor
+ */
+ template<typename RegExT>
+ struct find_regexF
+ {
+ typedef RegExT regex_type;
+ typedef const RegExT& regex_reference_type;
+
+ // Construction
+ find_regexF( regex_reference_type Rx, match_flag_type MatchFlags = match_default ) :
+ m_Rx(Rx), m_MatchFlags(MatchFlags) {}
+
+ // Operation
+ template< typename ForwardIteratorT >
+ regex_search_result<ForwardIteratorT>
+ operator()(
+ ForwardIteratorT Begin,
+ ForwardIteratorT End ) const
+ {
+ typedef ForwardIteratorT input_iterator_type;
+ typedef regex_search_result<ForwardIteratorT> result_type;
+
+ // instantiate match result
+ match_results<input_iterator_type> result;
+ // search for a match
+ if ( regex_search( Begin, End, result, m_Rx, m_MatchFlags ) )
+ {
+ // construct a result
+ return result_type( result );
+ }
+ else
+ {
+ // empty result
+ return result_type( End );
+ }
+ }
+
+ private:
+ regex_reference_type m_Rx; // Regexp
+ match_flag_type m_MatchFlags; // match flags
+ };
+
+ } // namespace detail
+ } // namespace algorithm
+} // namespace boost
+
+#endif // BOOST_STRING_FIND_DETAIL_HPP
diff --git a/boost/boost/algorithm/string/detail/formatter.hpp b/boost/boost/algorithm/string/detail/formatter.hpp
new file mode 100644
index 00000000000..367bf67c884
--- /dev/null
+++ b/boost/boost/algorithm/string/detail/formatter.hpp
@@ -0,0 +1,93 @@
+// Boost string_algo library formatter.hpp header file ---------------------------//
+
+// Copyright Pavol Droba 2002-2003. Use, modification and
+// distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_FORMATTER_DETAIL_HPP
+#define BOOST_STRING_FORMATTER_DETAIL_HPP
+
+
+#include <boost/range/iterator_range.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/const_iterator.hpp>
+
+#include <boost/algorithm/string/detail/util.hpp>
+
+// generic replace functors -----------------------------------------------//
+
+namespace boost {
+ namespace algorithm {
+ namespace detail {
+
+// const format functor ----------------------------------------------------//
+
+ // constant format functor
+ template<typename RangeT>
+ struct const_formatF
+ {
+ private:
+ typedef BOOST_STRING_TYPENAME
+ range_const_iterator<RangeT>::type format_iterator;
+ typedef iterator_range<format_iterator> result_type;
+
+ public:
+ // Construction
+ const_formatF(const RangeT& Format) :
+ m_Format(begin(Format), end(Format)) {}
+
+ // Operation
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+ template<typename Range2T>
+ result_type& operator()(const Range2T&)
+ {
+ return m_Format;
+ }
+#endif
+
+ template<typename Range2T>
+ const result_type& operator()(const Range2T&) const
+ {
+ return m_Format;
+ }
+
+ private:
+ result_type m_Format;
+ };
+
+// identity format functor ----------------------------------------------------//
+
+ // identity format functor
+ template<typename RangeT>
+ struct identity_formatF
+ {
+ // Operation
+ template< typename Range2T >
+ const RangeT& operator()(const Range2T& Replace) const
+ {
+ return RangeT(begin(Replace), end(Replace));
+ }
+ };
+
+// empty format functor ( used by erase ) ------------------------------------//
+
+ // empty format functor
+ template< typename CharT >
+ struct empty_formatF
+ {
+ template< typename ReplaceT >
+ empty_container<CharT> operator()(const ReplaceT&) const
+ {
+ return empty_container<CharT>();
+ }
+ };
+
+ } // namespace detail
+ } // namespace algorithm
+} // namespace boost
+
+#endif // BOOST_STRING_FORMATTER_DETAIL_HPP
diff --git a/boost/boost/algorithm/string/detail/formatter_regex.hpp b/boost/boost/algorithm/string/detail/formatter_regex.hpp
new file mode 100644
index 00000000000..0f28fd29c9d
--- /dev/null
+++ b/boost/boost/algorithm/string/detail/formatter_regex.hpp
@@ -0,0 +1,60 @@
+// Boost string_algo library formatter_regex.hpp header file ---------------------------//
+
+// Copyright Pavol Droba 2002-2003. Use, modification and
+// distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_FORMATTER_REGEX_DETAIL_HPP
+#define BOOST_STRING_FORMATTER_REGEX_DETAIL_HPP
+
+#include <boost/algorithm/string/config.hpp>
+#include <string>
+#include <boost/regex.hpp>
+#include <boost/algorithm/string/detail/finder_regex.hpp>
+
+namespace boost {
+ namespace algorithm {
+ namespace detail {
+
+// regex format functor -----------------------------------------//
+
+ // regex format functor
+ template<typename StringT>
+ struct regex_formatF
+ {
+ private:
+ typedef StringT result_type;
+ typedef BOOST_STRING_TYPENAME StringT::value_type char_type;
+
+ public:
+ // Construction
+ regex_formatF( const StringT& Fmt, match_flag_type Flags=format_default ) :
+ m_Fmt(Fmt), m_Flags( Flags ) {}
+
+ template<typename InputIteratorT>
+ result_type operator()(
+ const regex_search_result<InputIteratorT>& Replace ) const
+ {
+ if ( Replace.empty() )
+ {
+ return result_type();
+ }
+ else
+ {
+ return Replace.match_results().format( m_Fmt, m_Flags );
+ }
+ }
+ private:
+ const StringT& m_Fmt;
+ match_flag_type m_Flags;
+ };
+
+
+ } // namespace detail
+ } // namespace algorithm
+} // namespace boost
+
+#endif // BOOST_STRING_FORMATTER_DETAIL_HPP
diff --git a/boost/boost/algorithm/string/detail/predicate.hpp b/boost/boost/algorithm/string/detail/predicate.hpp
new file mode 100644
index 00000000000..ea1794d7786
--- /dev/null
+++ b/boost/boost/algorithm/string/detail/predicate.hpp
@@ -0,0 +1,76 @@
+// Boost string_algo library predicate.hpp header file ---------------------------//
+
+// Copyright Pavol Droba 2002-2003. Use, modification and
+// distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_PREDICATE_DETAIL_HPP
+#define BOOST_STRING_PREDICATE_DETAIL_HPP
+
+#include <iterator>
+#include <boost/algorithm/string/find.hpp>
+
+namespace boost {
+ namespace algorithm {
+ namespace detail {
+
+// ends_with predicate implementation ----------------------------------//
+
+ template<
+ typename ForwardIterator1T,
+ typename ForwardIterator2T,
+ typename PredicateT>
+ inline bool ends_with_iter_select(
+ ForwardIterator1T Begin,
+ ForwardIterator1T End,
+ ForwardIterator2T SubBegin,
+ ForwardIterator2T SubEnd,
+ PredicateT Comp,
+ std::bidirectional_iterator_tag)
+ {
+ ForwardIterator1T it=End;
+ ForwardIterator2T pit=SubEnd;
+ for(;it!=Begin && pit!=SubBegin;)
+ {
+ if( !(Comp(*(--it),*(--pit))) )
+ return false;
+ }
+
+ return pit==SubBegin;
+ }
+
+ template<
+ typename ForwardIterator1T,
+ typename ForwardIterator2T,
+ typename PredicateT>
+ inline bool ends_with_iter_select(
+ ForwardIterator1T Begin,
+ ForwardIterator1T End,
+ ForwardIterator2T SubBegin,
+ ForwardIterator2T SubEnd,
+ PredicateT Comp,
+ std::forward_iterator_tag)
+ {
+ if ( SubBegin==SubEnd )
+ {
+ // empty subsequence check
+ return true;
+ }
+
+ iterator_range<ForwardIterator1T> Result
+ =last_finder(
+ make_iterator_range(SubBegin, SubEnd),
+ Comp)(Begin, End);
+
+ return !Result.empty() && Result.end()==End;
+ }
+
+ } // namespace detail
+ } // namespace algorithm
+} // namespace boost
+
+
+#endif // BOOST_STRING_PREDICATE_DETAIL_HPP
diff --git a/boost/boost/algorithm/string/detail/replace_storage.hpp b/boost/boost/algorithm/string/detail/replace_storage.hpp
new file mode 100644
index 00000000000..248eb312615
--- /dev/null
+++ b/boost/boost/algorithm/string/detail/replace_storage.hpp
@@ -0,0 +1,158 @@
+// Boost string_algo library replace_storage.hpp header file ---------------------------//
+
+// Copyright Pavol Droba 2002-2003. Use, modification and
+// distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_REPLACE_STORAGE_DETAIL_HPP
+#define BOOST_STRING_REPLACE_STORAGE_DETAIL_HPP
+
+#include <boost/algorithm/string/config.hpp>
+#include <algorithm>
+#include <boost/mpl/bool.hpp>
+#include <boost/algorithm/string/sequence_traits.hpp>
+#include <boost/algorithm/string/detail/sequence.hpp>
+
+namespace boost {
+ namespace algorithm {
+ namespace detail {
+
+// storage handling routines -----------------------------------------------//
+
+ template< typename StorageT, typename OutputIteratorT >
+ inline OutputIteratorT move_from_storage(
+ StorageT& Storage,
+ OutputIteratorT DestBegin,
+ OutputIteratorT DestEnd )
+ {
+ OutputIteratorT OutputIt=DestBegin;
+
+ while( !Storage.empty() && OutputIt!=DestEnd )
+ {
+ *OutputIt=Storage.front();
+ Storage.pop_front();
+ ++OutputIt;
+ }
+
+ return OutputIt;
+ }
+
+ template< typename StorageT, typename WhatT >
+ inline void copy_to_storage(
+ StorageT& Storage,
+ const WhatT& What )
+ {
+ Storage.insert( Storage.end(), begin(What), end(What) );
+ }
+
+
+// process segment routine -----------------------------------------------//
+
+ template< bool HasStableIterators >
+ struct process_segment_helper
+ {
+ // Optimized version of process_segment for generic sequence
+ template<
+ typename StorageT,
+ typename InputT,
+ typename ForwardIteratorT >
+ ForwardIteratorT operator()(
+ StorageT& Storage,
+ InputT& /*Input*/,
+ ForwardIteratorT InsertIt,
+ ForwardIteratorT SegmentBegin,
+ ForwardIteratorT SegmentEnd )
+ {
+ // Copy data from the storage until the beginning of the segment
+ ForwardIteratorT It=move_from_storage( Storage, InsertIt, SegmentBegin );
+
+ // 3 cases are possible :
+ // a) Storage is empty, It==SegmentBegin
+ // b) Storage is empty, It!=SegmentBegin
+ // c) Storage is not empty
+
+ if( Storage.empty() )
+ {
+ if( It==SegmentBegin )
+ {
+ // Case a) everything is grand, just return end of segment
+ return SegmentEnd;
+ }
+ else
+ {
+ // Case b) move the segment backwards
+ return std::copy( SegmentBegin, SegmentEnd, It );
+ }
+ }
+ else
+ {
+ // Case c) -> shift the segment to the left and keep the overlap in the storage
+ while( It!=SegmentEnd )
+ {
+ // Store value into storage
+ Storage.push_back( *It );
+ // Get the top from the storage and put it here
+ *It=Storage.front();
+ Storage.pop_front();
+
+ // Advance
+ ++It;
+ }
+
+ return It;
+ }
+ }
+ };
+
+ template<>
+ struct process_segment_helper< true >
+ {
+ // Optimized version of process_segment for list-like sequence
+ template<
+ typename StorageT,
+ typename InputT,
+ typename ForwardIteratorT >
+ ForwardIteratorT operator()(
+ StorageT& Storage,
+ InputT& Input,
+ ForwardIteratorT InsertIt,
+ ForwardIteratorT SegmentBegin,
+ ForwardIteratorT SegmentEnd )
+
+ {
+ // Call replace to do the job
+ replace( Input, InsertIt, SegmentBegin, Storage );
+ // Empty the storage
+ Storage.clear();
+ // Iterators were not changed, simply return the end of segment
+ return SegmentEnd;
+ }
+ };
+
+ // Process one segment in the replace_all algorithm
+ template<
+ typename StorageT,
+ typename InputT,
+ typename ForwardIteratorT >
+ inline ForwardIteratorT process_segment(
+ StorageT& Storage,
+ InputT& Input,
+ ForwardIteratorT InsertIt,
+ ForwardIteratorT SegmentBegin,
+ ForwardIteratorT SegmentEnd )
+ {
+ return
+ process_segment_helper<
+ has_stable_iterators<InputT>::value>()(
+ Storage, Input, InsertIt, SegmentBegin, SegmentEnd );
+ }
+
+
+ } // namespace detail
+ } // namespace algorithm
+} // namespace boost
+
+#endif // BOOST_STRING_REPLACE_STORAGE_DETAIL_HPP
diff --git a/boost/boost/algorithm/string/detail/sequence.hpp b/boost/boost/algorithm/string/detail/sequence.hpp
new file mode 100644
index 00000000000..03c7fd0cc05
--- /dev/null
+++ b/boost/boost/algorithm/string/detail/sequence.hpp
@@ -0,0 +1,199 @@
+// Boost string_algo library sequence.hpp header file ---------------------------//
+
+// Copyright Pavol Droba 2002-2003. Use, modification and
+// distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_DETAIL_SEQUENCE_HPP
+#define BOOST_STRING_DETAIL_SEQUENCE_HPP
+
+#include <boost/algorithm/string/config.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/logical.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+
+#include <boost/algorithm/string/sequence_traits.hpp>
+
+namespace boost {
+ namespace algorithm {
+ namespace detail {
+
+// insert helpers -------------------------------------------------//
+
+ template< typename InputT, typename ForwardIteratorT >
+ inline void insert(
+ InputT& Input,
+ BOOST_STRING_TYPENAME InputT::iterator At,
+ ForwardIteratorT Begin,
+ ForwardIteratorT End )
+ {
+ Input.insert( At, Begin, End );
+ }
+
+ template< typename InputT, typename InsertT >
+ inline void insert(
+ InputT& Input,
+ BOOST_STRING_TYPENAME InputT::iterator At,
+ const InsertT& Insert )
+ {
+ insert( Input, At, begin(Insert), end(Insert) );
+ }
+
+// erase helper ---------------------------------------------------//
+
+ // Erase a range in the sequence
+ /*
+ Returns the iterator pointing just after the erase subrange
+ */
+ template< typename InputT >
+ inline typename InputT::iterator erase(
+ InputT& Input,
+ BOOST_STRING_TYPENAME InputT::iterator From,
+ BOOST_STRING_TYPENAME InputT::iterator To )
+ {
+ return Input.erase( From, To );
+ }
+
+// replace helper implementation ----------------------------------//
+
+ // Optimized version of replace for generic sequence containers
+ // Assumption: insert and erase are expensive
+ template< bool HasConstTimeOperations >
+ struct replace_const_time_helper
+ {
+ template< typename InputT, typename ForwardIteratorT >
+ void operator()(
+ InputT& Input,
+ BOOST_STRING_TYPENAME InputT::iterator From,
+ BOOST_STRING_TYPENAME InputT::iterator To,
+ ForwardIteratorT Begin,
+ ForwardIteratorT End )
+ {
+ // Copy data to the container ( as much as possible )
+ ForwardIteratorT InsertIt=Begin;
+ BOOST_STRING_TYPENAME InputT::iterator InputIt=From;
+ for(; InsertIt!=End && InputIt!=To; InsertIt++, InputIt++ )
+ {
+ *InputIt=*InsertIt;
+ }
+
+ if ( InsertIt!=End )
+ {
+ // Replace sequence is longer, insert it
+ Input.insert( InputIt, InsertIt, End );
+ }
+ else
+ {
+ if ( InputIt!=To )
+ {
+ // Replace sequence is shorter, erase the rest
+ Input.erase( InputIt, To );
+ }
+ }
+ }
+ };
+
+ template<>
+ struct replace_const_time_helper< true >
+ {
+ // Const-time erase and insert methods -> use them
+ template< typename InputT, typename ForwardIteratorT >
+ void operator()(
+ InputT& Input,
+ BOOST_STRING_TYPENAME InputT::iterator From,
+ BOOST_STRING_TYPENAME InputT::iterator To,
+ ForwardIteratorT Begin,
+ ForwardIteratorT End )
+ {
+ BOOST_STRING_TYPENAME InputT::iterator At=Input.erase( From, To );
+ if ( Begin!=End )
+ {
+ if(!Input.empty())
+ {
+ Input.insert( At, Begin, End );
+ }
+ else
+ {
+ Input.insert( Input.begin(), Begin, End );
+ }
+ }
+ }
+ };
+
+ // No native replace method
+ template< bool HasNative >
+ struct replace_native_helper
+ {
+ template< typename InputT, typename ForwardIteratorT >
+ void operator()(
+ InputT& Input,
+ BOOST_STRING_TYPENAME InputT::iterator From,
+ BOOST_STRING_TYPENAME InputT::iterator To,
+ ForwardIteratorT Begin,
+ ForwardIteratorT End )
+ {
+ replace_const_time_helper<
+ boost::mpl::and_<
+ has_const_time_insert<InputT>,
+ has_const_time_erase<InputT> >::value >()(
+ Input, From, To, Begin, End );
+ }
+ };
+
+ // Container has native replace method
+ template<>
+ struct replace_native_helper< true >
+ {
+ template< typename InputT, typename ForwardIteratorT >
+ void operator()(
+ InputT& Input,
+ BOOST_STRING_TYPENAME InputT::iterator From,
+ BOOST_STRING_TYPENAME InputT::iterator To,
+ ForwardIteratorT Begin,
+ ForwardIteratorT End )
+ {
+ Input.replace( From, To, Begin, End );
+ }
+ };
+
+// replace helper -------------------------------------------------//
+
+ template< typename InputT, typename ForwardIteratorT >
+ inline void replace(
+ InputT& Input,
+ BOOST_STRING_TYPENAME InputT::iterator From,
+ BOOST_STRING_TYPENAME InputT::iterator To,
+ ForwardIteratorT Begin,
+ ForwardIteratorT End )
+ {
+ replace_native_helper< has_native_replace<InputT>::value >()(
+ Input, From, To, Begin, End );
+ }
+
+ template< typename InputT, typename InsertT >
+ inline void replace(
+ InputT& Input,
+ BOOST_STRING_TYPENAME InputT::iterator From,
+ BOOST_STRING_TYPENAME InputT::iterator To,
+ const InsertT& Insert )
+ {
+ if(From!=To)
+ {
+ replace( Input, From, To, begin(Insert), end(Insert) );
+ }
+ else
+ {
+ insert( Input, From, begin(Insert), end(Insert) );
+ }
+ }
+
+ } // namespace detail
+ } // namespace algorithm
+} // namespace boost
+
+
+#endif // BOOST_STRING_DETAIL_SEQUENCE_HPP
diff --git a/boost/boost/algorithm/string/detail/trim.hpp b/boost/boost/algorithm/string/detail/trim.hpp
new file mode 100644
index 00000000000..502eca3d653
--- /dev/null
+++ b/boost/boost/algorithm/string/detail/trim.hpp
@@ -0,0 +1,94 @@
+// Boost string_algo library trim.hpp header file ---------------------------//
+
+// Copyright Pavol Droba 2002-2003. Use, modification and
+// distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_TRIM_DETAIL_HPP
+#define BOOST_STRING_TRIM_DETAIL_HPP
+
+#include <boost/algorithm/string/config.hpp>
+#include <boost/detail/iterator.hpp>
+
+namespace boost {
+ namespace algorithm {
+ namespace detail {
+
+// trim iterator helper -----------------------------------------------//
+
+ // Search for first non matching character from the beginning of the sequence
+ template< typename ForwardIteratorT, typename PredicateT >
+ inline ForwardIteratorT trim_begin(
+ ForwardIteratorT InBegin,
+ ForwardIteratorT InEnd,
+ PredicateT IsSpace )
+ {
+ ForwardIteratorT It=InBegin;
+ for(; It!=InEnd; ++It )
+ {
+ if (!IsSpace(*It))
+ return It;
+ }
+
+ return It;
+ }
+
+ // Search for first non matching character from the end of the sequence
+ template< typename ForwardIteratorT, typename PredicateT >
+ inline ForwardIteratorT trim_end(
+ ForwardIteratorT InBegin,
+ ForwardIteratorT InEnd,
+ PredicateT IsSpace )
+ {
+ typedef BOOST_STRING_TYPENAME boost::detail::
+ iterator_traits<ForwardIteratorT>::iterator_category category;
+
+ return trim_end_iter_select( InBegin, InEnd, IsSpace, category() );
+ }
+
+ template< typename ForwardIteratorT, typename PredicateT >
+ inline ForwardIteratorT trim_end_iter_select(
+ ForwardIteratorT InBegin,
+ ForwardIteratorT InEnd,
+ PredicateT IsSpace,
+ std::forward_iterator_tag )
+ {
+ ForwardIteratorT TrimIt=InBegin;
+
+ for( ForwardIteratorT It=InBegin; It!=InEnd; ++It )
+ {
+ if ( !IsSpace(*It) )
+ {
+ TrimIt=It;
+ ++TrimIt;
+ }
+ }
+
+ return TrimIt;
+ }
+
+ template< typename ForwardIteratorT, typename PredicateT >
+ inline ForwardIteratorT trim_end_iter_select(
+ ForwardIteratorT InBegin,
+ ForwardIteratorT InEnd,
+ PredicateT IsSpace,
+ std::bidirectional_iterator_tag )
+ {
+ for( ForwardIteratorT It=InEnd; It!=InBegin; )
+ {
+ if ( !IsSpace(*(--It)) )
+ return ++It;
+ }
+
+ return InBegin;
+ }
+
+ } // namespace detail
+ } // namespace algorithm
+} // namespace boost
+
+
+#endif // BOOST_STRING_TRIM_DETAIL_HPP
diff --git a/boost/boost/algorithm/string/detail/util.hpp b/boost/boost/algorithm/string/detail/util.hpp
new file mode 100644
index 00000000000..09663bda5ce
--- /dev/null
+++ b/boost/boost/algorithm/string/detail/util.hpp
@@ -0,0 +1,105 @@
+// Boost string_algo library util.hpp header file ---------------------------//
+
+// Copyright Pavol Droba 2002-2003. Use, modification and
+// distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_UTIL_DETAIL_HPP
+#define BOOST_STRING_UTIL_DETAIL_HPP
+
+#include <boost/algorithm/string/config.hpp>
+#include <functional>
+#include <boost/range/iterator_range.hpp>
+
+namespace boost {
+ namespace algorithm {
+ namespace detail {
+
+// empty container -----------------------------------------------//
+
+ // empty_container
+ /*
+ This class represents always empty container,
+ containing elements of type CharT.
+
+ It is supposed to be used in a const version only
+ */
+ template< typename CharT >
+ struct empty_container
+ {
+ typedef empty_container<CharT> type;
+ typedef CharT value_type;
+ typedef std::size_t size_type;
+ typedef std::ptrdiff_t difference_type;
+ typedef const value_type& reference;
+ typedef const value_type& const_reference;
+ typedef const value_type* iterator;
+ typedef const value_type* const_iterator;
+
+
+ // Operations
+ const_iterator begin() const
+ {
+ return reinterpret_cast<const_iterator>(0);
+ }
+
+ const_iterator end() const
+ {
+ return reinterpret_cast<const_iterator>(0);
+ }
+
+ bool empty() const
+ {
+ return false;
+ }
+
+ size_type size() const
+ {
+ return 0;
+ }
+ };
+
+// bounded copy algorithm -----------------------------------------------//
+
+ // Bounded version of the std::copy algorithm
+ template<typename InputIteratorT, typename OutputIteratorT>
+ inline OutputIteratorT bounded_copy(
+ InputIteratorT First,
+ InputIteratorT Last,
+ OutputIteratorT DestFirst,
+ OutputIteratorT DestLast )
+ {
+ InputIteratorT InputIt=First;
+ OutputIteratorT OutputIt=DestFirst;
+ for(; InputIt!=Last && OutputIt!=DestLast; InputIt++, OutputIt++ )
+ {
+ *OutputIt=*InputIt;
+ }
+
+ return OutputIt;
+ }
+
+// iterator range utilities -----------------------------------------//
+
+ // copy range functor
+ template<
+ typename SeqT,
+ typename IteratorT=BOOST_STRING_TYPENAME SeqT::const_iterator >
+ struct copy_iterator_rangeF :
+ public std::unary_function< iterator_range<IteratorT>, SeqT >
+ {
+ SeqT operator()( const iterator_range<IteratorT>& Range ) const
+ {
+ return copy_range<SeqT>(Range);
+ }
+ };
+
+ } // namespace detail
+ } // namespace algorithm
+} // namespace boost
+
+
+#endif // BOOST_STRING_UTIL_DETAIL_HPP
diff --git a/boost/boost/algorithm/string/erase.hpp b/boost/boost/algorithm/string/erase.hpp
new file mode 100644
index 00000000000..3f6eae53cfe
--- /dev/null
+++ b/boost/boost/algorithm/string/erase.hpp
@@ -0,0 +1,843 @@
+// Boost string_algo library erase.hpp header file ---------------------------//
+
+// Copyright Pavol Droba 2002-2006. Use, modification and
+// distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_ERASE_HPP
+#define BOOST_STRING_ERASE_HPP
+
+#include <boost/algorithm/string/config.hpp>
+
+#include <boost/range/iterator_range.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/iterator.hpp>
+#include <boost/range/const_iterator.hpp>
+
+#include <boost/algorithm/string/find_format.hpp>
+#include <boost/algorithm/string/finder.hpp>
+#include <boost/algorithm/string/formatter.hpp>
+
+/*! \file
+ Defines various erase algorithms. Each algorithm removes
+ part(s) of the input according to a searching criteria.
+*/
+
+namespace boost {
+ namespace algorithm {
+
+// erase_range -------------------------------------------------------//
+
+ //! Erase range algorithm
+ /*!
+ Remove the given range from the input. The result is a modified copy of
+ the input. It is returned as a sequence or copied to the output iterator.
+
+ \param Output An output iterator to which the result will be copied
+ \param Input An input sequence
+ \param SearchRange A range in the input to be removed
+ \return An output iterator pointing just after the last inserted character or
+ a modified copy of the input
+
+ \note The second variant of this function provides the strong exception-safety guarantee
+ */
+ template<typename OutputIteratorT, typename RangeT>
+ inline OutputIteratorT erase_range_copy(
+ OutputIteratorT Output,
+ const RangeT& Input,
+ const iterator_range<
+ BOOST_STRING_TYPENAME
+ range_const_iterator<RangeT>::type>& SearchRange )
+ {
+ return find_format_copy(
+ Output,
+ Input,
+ range_finder(SearchRange),
+ empty_formatter(Input) );
+ }
+
+ //! Erase range algorithm
+ /*!
+ \overload
+ */
+ template<typename SequenceT>
+ inline SequenceT erase_range_copy(
+ const SequenceT& Input,
+ const iterator_range<
+ BOOST_STRING_TYPENAME
+ range_const_iterator<SequenceT>::type>& SearchRange )
+ {
+ return find_format_copy(
+ Input,
+ range_finder(SearchRange),
+ empty_formatter(Input) );
+ }
+
+ //! Erase range algorithm
+ /*!
+ Remove the given range from the input.
+ The input sequence is modified in-place.
+
+ \param Input An input sequence
+ \param SearchRange A range in the input to be removed
+ */
+ template<typename SequenceT>
+ inline void erase_range(
+ SequenceT& Input,
+ const iterator_range<
+ BOOST_STRING_TYPENAME
+ range_iterator<SequenceT>::type>& SearchRange )
+ {
+ find_format(
+ Input,
+ range_finder(SearchRange),
+ empty_formatter(Input) );
+ }
+
+// erase_first --------------------------------------------------------//
+
+ //! Erase first algorithm
+ /*!
+ Remove the first occurrence of the substring from the input.
+ The result is a modified copy of the input. It is returned as a sequence
+ or copied to the output iterator.
+
+ \param Output An output iterator to which the result will be copied
+ \param Input An input string
+ \param Search A substring to be searched for
+ \return An output iterator pointing just after the last inserted character or
+ a modified copy of the input
+
+ \note The second variant of this function provides the strong exception-safety guarantee
+ */
+ template<
+ typename OutputIteratorT,
+ typename Range1T,
+ typename Range2T>
+ inline OutputIteratorT erase_first_copy(
+ OutputIteratorT Output,
+ const Range1T& Input,
+ const Range2T& Search )
+ {
+ return find_format_copy(
+ Output,
+ Input,
+ first_finder(Search),
+ empty_formatter(Input) );
+ }
+
+ //! Erase first algorithm
+ /*!
+ \overload
+ */
+ template<typename SequenceT, typename RangeT>
+ inline SequenceT erase_first_copy(
+ const SequenceT& Input,
+ const RangeT& Search )
+ {
+ return find_format_copy(
+ Input,
+ first_finder(Search),
+ empty_formatter(Input) );
+ }
+
+ //! Erase first algorithm
+ /*!
+ Remove the first occurrence of the substring from the input.
+ The input sequence is modified in-place.
+
+ \param Input An input string
+ \param Search A substring to be searched for.
+ */
+ template<typename SequenceT, typename RangeT>
+ inline void erase_first(
+ SequenceT& Input,
+ const RangeT& Search )
+ {
+ find_format(
+ Input,
+ first_finder(Search),
+ empty_formatter(Input) );
+ }
+
+// erase_first ( case insensitive ) ------------------------------------//
+
+ //! Erase first algorithm ( case insensitive )
+ /*!
+ Remove the first occurrence of the substring from the input.
+ The result is a modified copy of the input. It is returned as a sequence
+ or copied to the output iterator.
+ Searching is case insensitive.
+
+ \param Output An output iterator to which the result will be copied
+ \param Input An input string
+ \param Search A substring to be searched for
+ \param Loc A locale used for case insensitive comparison
+ \return An output iterator pointing just after the last inserted character or
+ a modified copy of the input
+
+ \note The second variant of this function provides the strong exception-safety guarantee
+ */
+ template<
+ typename OutputIteratorT,
+ typename Range1T,
+ typename Range2T>
+ inline OutputIteratorT ierase_first_copy(
+ OutputIteratorT Output,
+ const Range1T& Input,
+ const Range2T& Search,
+ const std::locale& Loc=std::locale() )
+ {
+ return find_format_copy(
+ Output,
+ Input,
+ first_finder(Search, is_iequal(Loc)),
+ empty_formatter(Input) );
+ }
+
+ //! Erase first algorithm ( case insensitive )
+ /*!
+ \overload
+ */
+ template<typename SequenceT, typename RangeT>
+ inline SequenceT ierase_first_copy(
+ const SequenceT& Input,
+ const RangeT& Search,
+ const std::locale& Loc=std::locale() )
+ {
+ return find_format_copy(
+ Input,
+ first_finder(Search, is_iequal(Loc)),
+ empty_formatter(Input) );
+ }
+
+ //! Erase first algorithm ( case insensitive )
+ /*!
+ Remove the first occurrence of the substring from the input.
+ The input sequence is modified in-place. Searching is case insensitive.
+
+ \param Input An input string
+ \param Search A substring to be searched for
+ \param Loc A locale used for case insensitive comparison
+ */
+ template<typename SequenceT, typename RangeT>
+ inline void ierase_first(
+ SequenceT& Input,
+ const RangeT& Search,
+ const std::locale& Loc=std::locale() )
+ {
+ find_format(
+ Input,
+ first_finder(Search, is_iequal(Loc)),
+ empty_formatter(Input) );
+ }
+
+// erase_last --------------------------------------------------------//
+
+ //! Erase last algorithm
+ /*!
+ Remove the last occurrence of the substring from the input.
+ The result is a modified copy of the input. It is returned as a sequence
+ or copied to the output iterator.
+
+ \param Output An output iterator to which the result will be copied
+ \param Input An input string
+ \param Search A substring to be searched for.
+ \return An output iterator pointing just after the last inserted character or
+ a modified copy of the input
+
+ \note The second variant of this function provides the strong exception-safety guarantee
+ */
+ template<
+ typename OutputIteratorT,
+ typename Range1T,
+ typename Range2T>
+ inline OutputIteratorT erase_last_copy(
+ OutputIteratorT Output,
+ const Range1T& Input,
+ const Range2T& Search )
+ {
+ return find_format_copy(
+ Output,
+ Input,
+ last_finder(Search),
+ empty_formatter(Input) );
+ }
+
+ //! Erase last algorithm
+ /*!
+ \overload
+ */
+ template<typename SequenceT, typename RangeT>
+ inline SequenceT erase_last_copy(
+ const SequenceT& Input,
+ const RangeT& Search )
+ {
+ return find_format_copy(
+ Input,
+ last_finder(Search),
+ empty_formatter(Input) );
+ }
+
+ //! Erase last algorithm
+ /*!
+ Remove the last occurrence of the substring from the input.
+ The input sequence is modified in-place.
+
+ \param Input An input string
+ \param Search A substring to be searched for
+ */
+ template<typename SequenceT, typename RangeT>
+ inline void erase_last(
+ SequenceT& Input,
+ const RangeT& Search )
+ {
+ find_format(
+ Input,
+ last_finder(Search),
+ empty_formatter(Input) );
+ }
+
+// erase_last ( case insensitive ) ------------------------------------//
+
+ //! Erase last algorithm ( case insensitive )
+ /*!
+ Remove the last occurrence of the substring from the input.
+ The result is a modified copy of the input. It is returned as a sequence
+ or copied to the output iterator.
+ Searching is case insensitive.
+
+ \param Output An output iterator to which the result will be copied
+ \param Input An input string
+ \param Search A substring to be searched for
+ \param Loc A locale used for case insensitive comparison
+ \return An output iterator pointing just after the last inserted character or
+ a modified copy of the input
+
+ \note The second variant of this function provides the strong exception-safety guarantee
+ */
+ template<
+ typename OutputIteratorT,
+ typename Range1T,
+ typename Range2T>
+ inline OutputIteratorT ierase_last_copy(
+ OutputIteratorT Output,
+ const Range1T& Input,
+ const Range2T& Search,
+ const std::locale& Loc=std::locale() )
+ {
+ return find_format_copy(
+ Output,
+ Input,
+ last_finder(Search, is_iequal(Loc)),
+ empty_formatter(Input) );
+ }
+
+ //! Erase last algorithm ( case insensitive )
+ /*!
+ \overload
+ */
+ template<typename SequenceT, typename RangeT>
+ inline SequenceT ierase_last_copy(
+ const SequenceT& Input,
+ const RangeT& Search,
+ const std::locale& Loc=std::locale() )
+ {
+ return find_format_copy(
+ Input,
+ last_finder(Search, is_iequal(Loc)),
+ empty_formatter(Input) );
+ }
+
+ //! Erase last algorithm ( case insensitive )
+ /*!
+ Remove the last occurrence of the substring from the input.
+ The input sequence is modified in-place. Searching is case insensitive.
+
+ \param Input An input string
+ \param Search A substring to be searched for
+ \param Loc A locale used for case insensitive comparison
+ */
+ template<typename SequenceT, typename RangeT>
+ inline void ierase_last(
+ SequenceT& Input,
+ const RangeT& Search,
+ const std::locale& Loc=std::locale() )
+ {
+ find_format(
+ Input,
+ last_finder(Search, is_iequal(Loc)),
+ empty_formatter(Input) );
+ }
+
+// erase_nth --------------------------------------------------------------------//
+
+ //! Erase nth algorithm
+ /*!
+ Remove the Nth occurrence of the substring in the input.
+ The result is a modified copy of the input. It is returned as a sequence
+ or copied to the output iterator.
+
+
+ \param Output An output iterator to which the result will be copied
+ \param Input An input string
+ \param Search A substring to be searched for
+ \param Nth An index of the match to be replaced. The index is 0-based.
+ For negative N, matches are counted from the end of string.
+ \return An output iterator pointing just after the last inserted character or
+ a modified copy of the input
+
+ \note The second variant of this function provides the strong exception-safety guarantee
+ */
+ template<
+ typename OutputIteratorT,
+ typename Range1T,
+ typename Range2T>
+ inline OutputIteratorT erase_nth_copy(
+ OutputIteratorT Output,
+ const Range1T& Input,
+ const Range2T& Search,
+ int Nth )
+ {
+ return find_format_copy(
+ Output,
+ Input,
+ nth_finder(Search, Nth),
+ empty_formatter(Input) );
+ }
+
+ //! Erase nth algorithm
+ /*!
+ \overload
+ */
+ template<typename SequenceT, typename RangeT>
+ inline SequenceT erase_nth_copy(
+ const SequenceT& Input,
+ const RangeT& Search,
+ int Nth )
+ {
+ return find_format_copy(
+ Input,
+ nth_finder(Search, Nth),
+ empty_formatter(Input) );
+ }
+
+ //! Erase nth algorithm
+ /*!
+ Remove the Nth occurrence of the substring in the input.
+ The input sequence is modified in-place.
+
+ \param Input An input string
+ \param Search A substring to be searched for.
+ \param Nth An index of the match to be replaced. The index is 0-based.
+ For negative N, matches are counted from the end of string.
+ */
+ template<typename SequenceT, typename RangeT>
+ inline void erase_nth(
+ SequenceT& Input,
+ const RangeT& Search,
+ int Nth )
+ {
+ find_format(
+ Input,
+ nth_finder(Search, Nth),
+ empty_formatter(Input) );
+ }
+
+// erase_nth ( case insensitive ) ---------------------------------------------//
+
+ //! Erase nth algorithm ( case insensitive )
+ /*!
+ Remove the Nth occurrence of the substring in the input.
+ The result is a modified copy of the input. It is returned as a sequence
+ or copied to the output iterator.
+ Searching is case insensitive.
+
+ \param Output An output iterator to which the result will be copied
+ \param Input An input string
+ \param Search A substring to be searched for.
+ \param Nth An index of the match to be replaced. The index is 0-based.
+ For negative N, matches are counted from the end of string.
+ \param Loc A locale used for case insensitive comparison
+ \return An output iterator pointing just after the last inserted character or
+ a modified copy of the input
+
+ \note The second variant of this function provides the strong exception-safety guarantee
+ */
+ template<
+ typename OutputIteratorT,
+ typename Range1T,
+ typename Range2T>
+ inline OutputIteratorT ierase_nth_copy(
+ OutputIteratorT Output,
+ const Range1T& Input,
+ const Range2T& Search,
+ int Nth,
+ const std::locale& Loc=std::locale() )
+ {
+ return find_format_copy(
+ Output,
+ Input,
+ nth_finder(Search, Nth, is_iequal(Loc)),
+ empty_formatter(Input) );
+ }
+
+ //! Erase nth algorithm
+ /*!
+ \overload
+ */
+ template<typename SequenceT, typename RangeT>
+ inline SequenceT ierase_nth_copy(
+ const SequenceT& Input,
+ const RangeT& Search,
+ int Nth,
+ const std::locale& Loc=std::locale() )
+ {
+ return find_format_copy(
+ Input,
+ nth_finder(Search, Nth, is_iequal(Loc)),
+ empty_formatter(Input) );
+ }
+
+ //! Erase nth algorithm
+ /*!
+ Remove the Nth occurrence of the substring in the input.
+ The input sequence is modified in-place. Searching is case insensitive.
+
+ \param Input An input string
+ \param Search A substring to be searched for.
+ \param Nth An index of the match to be replaced. The index is 0-based.
+ For negative N, matches are counted from the end of string.
+ \param Loc A locale used for case insensitive comparison
+ */
+ template<typename SequenceT, typename RangeT>
+ inline void ierase_nth(
+ SequenceT& Input,
+ const RangeT& Search,
+ int Nth,
+ const std::locale& Loc=std::locale() )
+ {
+ find_format(
+ Input,
+ nth_finder(Search, Nth, is_iequal(Loc)),
+ empty_formatter(Input) );
+ }
+
+
+// erase_all --------------------------------------------------------//
+
+ //! Erase all algorithm
+ /*!
+ Remove all the occurrences of the string from the input.
+ The result is a modified copy of the input. It is returned as a sequence
+ or copied to the output iterator.
+
+
+ \param Output An output iterator to which the result will be copied
+ \param Input An input sequence
+ \param Search A substring to be searched for.
+ \return An output iterator pointing just after the last inserted character or
+ a modified copy of the input
+
+ \note The second variant of this function provides the strong exception-safety guarantee
+ */
+ template<
+ typename OutputIteratorT,
+ typename Range1T,
+ typename Range2T>
+ inline OutputIteratorT erase_all_copy(
+ OutputIteratorT Output,
+ const Range1T& Input,
+ const Range2T& Search )
+ {
+ return find_format_all_copy(
+ Output,
+ Input,
+ first_finder(Search),
+ empty_formatter(Input) );
+ }
+
+ //! Erase all algorithm
+ /*!
+ \overload
+ */
+ template<typename SequenceT, typename RangeT>
+ inline SequenceT erase_all_copy(
+ const SequenceT& Input,
+ const RangeT& Search )
+ {
+ return find_format_all_copy(
+ Input,
+ first_finder(Search),
+ empty_formatter(Input) );
+ }
+
+ //! Erase all algorithm
+ /*!
+ Remove all the occurrences of the string from the input.
+ The input sequence is modified in-place.
+
+ \param Input An input string
+ \param Search A substring to be searched for.
+ */
+ template<typename SequenceT, typename RangeT>
+ inline void erase_all(
+ SequenceT& Input,
+ const RangeT& Search )
+ {
+ find_format_all(
+ Input,
+ first_finder(Search),
+ empty_formatter(Input) );
+ }
+
+// erase_all ( case insensitive ) ------------------------------------//
+
+ //! Erase all algorithm ( case insensitive )
+ /*!
+ Remove all the occurrences of the string from the input.
+ The result is a modified copy of the input. It is returned as a sequence
+ or copied to the output iterator.
+ Searching is case insensitive.
+
+ \param Output An output iterator to which the result will be copied
+ \param Input An input string
+ \param Search A substring to be searched for
+ \param Loc A locale used for case insensitive comparison
+ \return An output iterator pointing just after the last inserted character or
+ a modified copy of the input
+
+ \note The second variant of this function provides the strong exception-safety guarantee
+ */
+ template<
+ typename OutputIteratorT,
+ typename Range1T,
+ typename Range2T>
+ inline OutputIteratorT ierase_all_copy(
+ OutputIteratorT Output,
+ const Range1T& Input,
+ const Range2T& Search,
+ const std::locale& Loc=std::locale() )
+ {
+ return find_format_all_copy(
+ Output,
+ Input,
+ first_finder(Search, is_iequal(Loc)),
+ empty_formatter(Input) );
+ }
+
+ //! Erase all algorithm ( case insensitive )
+ /*!
+ \overload
+ */
+ template<typename SequenceT, typename RangeT>
+ inline SequenceT ierase_all_copy(
+ const SequenceT& Input,
+ const RangeT& Search,
+ const std::locale& Loc=std::locale() )
+ {
+ return find_format_all_copy(
+ Input,
+ first_finder(Search, is_iequal(Loc)),
+ empty_formatter(Input) );
+ }
+
+ //! Erase all algorithm ( case insensitive )
+ /*!
+ Remove all the occurrences of the string from the input.
+ The input sequence is modified in-place. Searching is case insensitive.
+
+ \param Input An input string
+ \param Search A substring to be searched for.
+ \param Loc A locale used for case insensitive comparison
+ */
+ template<typename SequenceT, typename RangeT>
+ inline void ierase_all(
+ SequenceT& Input,
+ const RangeT& Search,
+ const std::locale& Loc=std::locale() )
+ {
+ find_format_all(
+ Input,
+ first_finder(Search, is_iequal(Loc)),
+ empty_formatter(Input) );
+ }
+
+// erase_head --------------------------------------------------------------------//
+
+ //! Erase head algorithm
+ /*!
+ Remove the head from the input. The head is a prefix of a sequence of given size.
+ If the sequence is shorter then required, the whole string is
+ considered to be the head. The result is a modified copy of the input.
+ It is returned as a sequence or copied to the output iterator.
+
+
+ \param Output An output iterator to which the result will be copied
+ \param Input An input string
+ \param N Length of the head.
+ For N>=0, at most N characters are extracted.
+ For N<0, size(Input)-|N| characters are extracted.
+ \return An output iterator pointing just after the last inserted character or
+ a modified copy of the input
+
+ \note The second variant of this function provides the strong exception-safety guarantee
+ */
+ template<
+ typename OutputIteratorT,
+ typename RangeT>
+ inline OutputIteratorT erase_head_copy(
+ OutputIteratorT Output,
+ const RangeT& Input,
+ int N )
+ {
+ return find_format_copy(
+ Output,
+ Input,
+ head_finder(N),
+ empty_formatter( Input ) );
+ }
+
+ //! Erase head algorithm
+ /*!
+ \overload
+ */
+ template<typename SequenceT>
+ inline SequenceT erase_head_copy(
+ const SequenceT& Input,
+ int N )
+ {
+ return find_format_copy(
+ Input,
+ head_finder(N),
+ empty_formatter( Input ) );
+ }
+
+ //! Erase head algorithm
+ /*!
+ Remove the head from the input. The head is a prefix of a sequence of given size.
+ If the sequence is shorter then required, the whole string is
+ considered to be the head. The input sequence is modified in-place.
+
+ \param Input An input string
+ \param N Length of the head
+ For N>=0, at most N characters are extracted.
+ For N<0, size(Input)-|N| characters are extracted.
+ */
+ template<typename SequenceT>
+ inline void erase_head(
+ SequenceT& Input,
+ int N )
+ {
+ find_format(
+ Input,
+ head_finder(N),
+ empty_formatter( Input ) );
+ }
+
+// erase_tail --------------------------------------------------------------------//
+
+ //! Erase tail algorithm
+ /*!
+ Remove the tail from the input. The tail is a suffix of a sequence of given size.
+ If the sequence is shorter then required, the whole string is
+ considered to be the tail.
+ The result is a modified copy of the input. It is returned as a sequence
+ or copied to the output iterator.
+
+ \param Output An output iterator to which the result will be copied
+ \param Input An input string
+ \param N Length of the head.
+ For N>=0, at most N characters are extracted.
+ For N<0, size(Input)-|N| characters are extracted.
+ \return An output iterator pointing just after the last inserted character or
+ a modified copy of the input
+
+ \note The second variant of this function provides the strong exception-safety guarantee
+ */
+ template<
+ typename OutputIteratorT,
+ typename RangeT>
+ inline OutputIteratorT erase_tail_copy(
+ OutputIteratorT Output,
+ const RangeT& Input,
+ int N )
+ {
+ return find_format_copy(
+ Output,
+ Input,
+ tail_finder(N),
+ empty_formatter( Input ) );
+ }
+
+ //! Erase tail algorithm
+ /*!
+ \overload
+ */
+ template<typename SequenceT>
+ inline SequenceT erase_tail_copy(
+ const SequenceT& Input,
+ int N )
+ {
+ return find_format_copy(
+ Input,
+ tail_finder(N),
+ empty_formatter( Input ) );
+ }
+
+ //! Erase tail algorithm
+ /*!
+ Remove the tail from the input. The tail is a suffix of a sequence of given size.
+ If the sequence is shorter then required, the whole string is
+ considered to be the tail. The input sequence is modified in-place.
+
+ \param Input An input string
+ \param N Length of the head
+ For N>=0, at most N characters are extracted.
+ For N<0, size(Input)-|N| characters are extracted.
+ */
+ template<typename SequenceT>
+ inline void erase_tail(
+ SequenceT& Input,
+ int N )
+ {
+ find_format(
+ Input,
+ tail_finder(N),
+ empty_formatter( Input ) );
+ }
+
+ } // namespace algorithm
+
+ // pull names into the boost namespace
+ using algorithm::erase_range_copy;
+ using algorithm::erase_range;
+ using algorithm::erase_first_copy;
+ using algorithm::erase_first;
+ using algorithm::ierase_first_copy;
+ using algorithm::ierase_first;
+ using algorithm::erase_last_copy;
+ using algorithm::erase_last;
+ using algorithm::ierase_last_copy;
+ using algorithm::ierase_last;
+ using algorithm::erase_nth_copy;
+ using algorithm::erase_nth;
+ using algorithm::ierase_nth_copy;
+ using algorithm::ierase_nth;
+ using algorithm::erase_all_copy;
+ using algorithm::erase_all;
+ using algorithm::ierase_all_copy;
+ using algorithm::ierase_all;
+ using algorithm::erase_head_copy;
+ using algorithm::erase_head;
+ using algorithm::erase_tail_copy;
+ using algorithm::erase_tail;
+
+} // namespace boost
+
+
+#endif // BOOST_ERASE_HPP
diff --git a/boost/boost/algorithm/string/find.hpp b/boost/boost/algorithm/string/find.hpp
new file mode 100644
index 00000000000..8c49ebe3fb3
--- /dev/null
+++ b/boost/boost/algorithm/string/find.hpp
@@ -0,0 +1,341 @@
+// Boost string_algo library find.hpp header file ---------------------------//
+
+// Copyright Pavol Droba 2002-2003. Use, modification and
+// distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_FIND_HPP
+#define BOOST_STRING_FIND_HPP
+
+#include <boost/algorithm/string/config.hpp>
+
+#include <boost/range/iterator_range.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/iterator.hpp>
+#include <boost/range/const_iterator.hpp>
+#include <boost/range/result_iterator.hpp>
+
+#include <boost/algorithm/string/finder.hpp>
+#include <boost/algorithm/string/compare.hpp>
+#include <boost/algorithm/string/constants.hpp>
+
+/*! \file
+ Defines a set of find algorithms. The algorithms are searching
+ for a substring of the input. The result is given as an \c iterator_range
+ delimiting the substring.
+*/
+
+namespace boost {
+ namespace algorithm {
+
+// Generic find -----------------------------------------------//
+
+ //! Generic find algorithm
+ /*!
+ Search the input using the given finder.
+
+ \param Input A string which will be searched.
+ \param Finder Finder object used for searching.
+ \return
+ An \c iterator_range delimiting the match.
+ Returned iterator is either \c RangeT::iterator or
+ \c RangeT::const_iterator, depending on the constness of
+ the input parameter.
+ */
+ template<typename RangeT, typename FinderT>
+ inline iterator_range<
+ BOOST_STRING_TYPENAME range_result_iterator<RangeT>::type>
+ find(
+ RangeT& Input,
+ FinderT Finder)
+ {
+ return Finder(begin(Input),end(Input));
+ }
+
+// find_first -----------------------------------------------//
+
+ //! Find first algorithm
+ /*!
+ Search for the first occurence of the substring in the input.
+
+ \param Input A string which will be searched.
+ \param Search A substring to be searched for.
+ \return
+ An \c iterator_range delimiting the match.
+ Returned iterator is either \c RangeT::iterator or
+ \c RangeT::const_iterator, depending on the constness of
+ the input parameter.
+
+ \note This function provides the strong exception-safety guarantee
+ */
+ template<typename Range1T, typename Range2T>
+ inline iterator_range<
+ BOOST_STRING_TYPENAME range_result_iterator<Range1T>::type>
+ find_first(
+ Range1T& Input,
+ const Range2T& Search)
+ {
+ return first_finder(Search)(
+ begin(Input),end(Input));
+ }
+
+ //! Find first algorithm ( case insensitive )
+ /*!
+ Search for the first occurence of the substring in the input.
+ Searching is case insensitive.
+
+ \param Input A string which will be searched.
+ \param Search A substring to be searched for.
+ \param Loc A locale used for case insensitive comparison
+ \return
+ An \c iterator_range delimiting the match.
+ Returned iterator is either \c Range1T::iterator or
+ \c Range1T::const_iterator, depending on the constness of
+ the input parameter.
+
+ \note This function provides the strong exception-safety guarantee
+ */
+ template<typename Range1T, typename Range2T>
+ inline iterator_range<
+ BOOST_STRING_TYPENAME range_result_iterator<Range1T>::type>
+ ifind_first(
+ Range1T& Input,
+ const Range2T& Search,
+ const std::locale& Loc=std::locale())
+ {
+ return first_finder(Search,is_iequal(Loc))(
+ begin(Input),end(Input));
+ }
+
+// find_last -----------------------------------------------//
+
+ //! Find last algorithm
+ /*!
+ Search for the last occurence of the substring in the input.
+
+ \param Input A string which will be searched.
+ \param Search A substring to be searched for.
+ \return
+ An \c iterator_range delimiting the match.
+ Returned iterator is either \c Range1T::iterator or
+ \c Range1T::const_iterator, depending on the constness of
+ the input parameter.
+
+ \note This function provides the strong exception-safety guarantee
+ */
+ template<typename Range1T, typename Range2T>
+ inline iterator_range<
+ BOOST_STRING_TYPENAME range_result_iterator<Range1T>::type>
+ find_last(
+ Range1T& Input,
+ const Range2T& Search)
+ {
+ return last_finder(Search)(
+ begin(Input),end(Input));
+ }
+
+ //! Find last algorithm ( case insensitive )
+ /*!
+ Search for the last match a string in the input.
+ Searching is case insensitive.
+
+ \param Input A string which will be searched.
+ \param Search A substring to be searched for.
+ \param Loc A locale used for case insensitive comparison
+ \return
+ An \c iterator_range delimiting the match.
+ Returned iterator is either \c Range1T::iterator or
+ \c Range1T::const_iterator, depending on the constness of
+ the input parameter.
+
+ \note This function provides the strong exception-safety guarantee
+ */
+ template<typename Range1T, typename Range2T>
+ inline iterator_range<
+ BOOST_STRING_TYPENAME range_result_iterator<Range1T>::type>
+ ifind_last(
+ Range1T& Input,
+ const Range2T& Search,
+ const std::locale& Loc=std::locale())
+ {
+ return last_finder(Search, is_iequal(Loc))(
+ begin(Input),end(Input));
+ }
+
+// find_nth ----------------------------------------------------------------------//
+
+ //! Find n-th algorithm
+ /*!
+ Search for the n-th (zero-indexed) occurence of the substring in the
+ input.
+
+ \param Input A string which will be searched.
+ \param Search A substring to be searched for.
+ \param Nth An index (zero-indexed) of the match to be found.
+ For negative N, the matches are counted from the end of string.
+ \return
+ An \c iterator_range delimiting the match.
+ Returned iterator is either \c Range1T::iterator or
+ \c Range1T::const_iterator, depending on the constness of
+ the input parameter.
+ */
+ template<typename Range1T, typename Range2T>
+ inline iterator_range<
+ BOOST_STRING_TYPENAME range_result_iterator<Range1T>::type>
+ find_nth(
+ Range1T& Input,
+ const Range2T& Search,
+ int Nth)
+ {
+ return nth_finder(Search,Nth)(
+ begin(Input),end(Input));
+ }
+
+ //! Find n-th algorithm ( case insensitive ).
+ /*!
+ Search for the n-th (zero-indexed) occurrence of the substring in the
+ input. Searching is case insensitive.
+
+ \param Input A string which will be searched.
+ \param Search A substring to be searched for.
+ \param Nth An index (zero-indexed) of the match to be found.
+ For negative N, the matches are counted from the end of string.
+ \param Loc A locale used for case insensitive comparison
+ \return
+ An \c iterator_range delimiting the match.
+ Returned iterator is either \c Range1T::iterator or
+ \c Range1T::const_iterator, depending on the constness of
+ the input parameter.
+
+
+ \note This function provides the strong exception-safety guarantee
+ */
+ template<typename Range1T, typename Range2T>
+ inline iterator_range<
+ BOOST_STRING_TYPENAME range_result_iterator<Range1T>::type>
+ ifind_nth(
+ Range1T& Input,
+ const Range2T& Search,
+ int Nth,
+ const std::locale& Loc=std::locale())
+ {
+ return nth_finder(Search,Nth,is_iequal(Loc))(
+ begin(Input),end(Input));
+ }
+
+// find_head ----------------------------------------------------------------------//
+
+ //! Find head algorithm
+ /*!
+ Get the head of the input. Head is a prefix of the string of the
+ given size. If the input is shorter then required, whole input if considered
+ to be the head.
+
+ \param Input An input string
+ \param N Length of the head
+ For N>=0, at most N characters are extracted.
+ For N<0, size(Input)-|N| characters are extracted.
+ \return
+ An \c iterator_range delimiting the match.
+ Returned iterator is either \c Range1T::iterator or
+ \c Range1T::const_iterator, depending on the constness of
+ the input parameter.
+
+ \note This function provides the strong exception-safety guarantee
+ */
+ template<typename RangeT>
+ inline iterator_range<
+ BOOST_STRING_TYPENAME range_result_iterator<RangeT>::type>
+ find_head(
+ RangeT& Input,
+ int N)
+ {
+ return head_finder(N)(
+ begin(Input),end(Input));
+ }
+
+// find_tail ----------------------------------------------------------------------//
+
+ //! Find tail algorithm
+ /*!
+ Get the head of the input. Head is a suffix of the string of the
+ given size. If the input is shorter then required, whole input if considered
+ to be the tail.
+
+ \param Input An input string
+ \param N Length of the tail.
+ For N>=0, at most N characters are extracted.
+ For N<0, size(Input)-|N| characters are extracted.
+ \return
+ An \c iterator_range delimiting the match.
+ Returned iterator is either \c RangeT::iterator or
+ \c RangeT::const_iterator, depending on the constness of
+ the input parameter.
+
+
+ \note This function provides the strong exception-safety guarantee
+ */
+ template<typename RangeT>
+ inline iterator_range<
+ BOOST_STRING_TYPENAME range_result_iterator<RangeT>::type>
+ find_tail(
+ RangeT& Input,
+ int N)
+ {
+ return tail_finder(N)(
+ begin(Input),end(Input));
+ }
+
+// find_token --------------------------------------------------------------------//
+
+ //! Find token algorithm
+ /*!
+ Look for a given token in the string. Token is a character that matches the
+ given predicate.
+ If the "token compress mode" is enabled, adjacent tokens are considered to be one match.
+
+ \param Input A input string.
+ \param Pred An unary predicate to identify a token
+ \param eCompress Enable/Disable compressing of adjacent tokens
+ \return
+ An \c iterator_range delimiting the match.
+ Returned iterator is either \c RangeT::iterator or
+ \c RangeT::const_iterator, depending on the constness of
+ the input parameter.
+
+ \note This function provides the strong exception-safety guarantee
+ */
+ template<typename RangeT, typename PredicateT>
+ inline iterator_range<
+ BOOST_STRING_TYPENAME range_result_iterator<RangeT>::type>
+ find_token(
+ RangeT& Input,
+ PredicateT Pred,
+ token_compress_mode_type eCompress=token_compress_off)
+ {
+ return token_finder(Pred, eCompress)(
+ begin(Input),end(Input));
+ }
+
+ } // namespace algorithm
+
+ // pull names to the boost namespace
+ using algorithm::find;
+ using algorithm::find_first;
+ using algorithm::ifind_first;
+ using algorithm::find_last;
+ using algorithm::ifind_last;
+ using algorithm::find_nth;
+ using algorithm::ifind_nth;
+ using algorithm::find_head;
+ using algorithm::find_tail;
+ using algorithm::find_token;
+
+} // namespace boost
+
+
+#endif // BOOST_STRING_FIND_HPP
diff --git a/boost/boost/algorithm/string/find_format.hpp b/boost/boost/algorithm/string/find_format.hpp
new file mode 100644
index 00000000000..7a7d87bf9be
--- /dev/null
+++ b/boost/boost/algorithm/string/find_format.hpp
@@ -0,0 +1,263 @@
+// Boost string_algo library find_format.hpp header file ---------------------------//
+
+// Copyright Pavol Droba 2002-2003. Use, modification and
+// distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_FIND_FORMAT_HPP
+#define BOOST_STRING_FIND_FORMAT_HPP
+
+#include <deque>
+#include <boost/detail/iterator.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/const_iterator.hpp>
+
+#include <boost/algorithm/string/concept.hpp>
+#include <boost/algorithm/string/detail/find_format.hpp>
+#include <boost/algorithm/string/detail/find_format_all.hpp>
+
+/*! \file
+ Defines generic replace algorithms. Each algorithm replaces
+ part(s) of the input. The part to be replaced is looked up using a Finder object.
+ Result of finding is then used by a Formatter object to generate the replacement.
+*/
+
+namespace boost {
+ namespace algorithm {
+
+// generic replace -----------------------------------------------------------------//
+
+ //! Generic replace algorithm
+ /*!
+ Use the Finder to search for a substring. Use the Formatter to format
+ this substring and replace it in the input.
+ The result is a modified copy of the input. It is returned as a sequence
+ or copied to the output iterator.
+
+ \param Output An output iterator to which the result will be copied
+ \param Input An input sequence
+ \param Finder A Finder object used to search for a match to be replaced
+ \param Formatter A Formatter object used to format a match
+ \return An output iterator pointing just after the last inserted character or
+ a modified copy of the input
+
+ \note The second variant of this function provides the strong exception-safety guarantee
+ */
+ template<
+ typename OutputIteratorT,
+ typename RangeT,
+ typename FinderT,
+ typename FormatterT>
+ inline OutputIteratorT find_format_copy(
+ OutputIteratorT Output,
+ const RangeT& Input,
+ FinderT Finder,
+ FormatterT Formatter )
+ {
+ // Concept check
+ function_requires<
+ FinderConcept<FinderT,
+ BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> >();
+ function_requires<
+ FormatterConcept<
+ FormatterT,
+ FinderT,BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> >();
+
+ return detail::find_format_copy_impl(
+ Output,
+ Input,
+ Formatter,
+ Finder( begin(Input), end(Input) ) );
+ }
+
+ //! Generic replace algorithm
+ /*!
+ \overload
+ */
+ template<
+ typename SequenceT,
+ typename FinderT,
+ typename FormatterT>
+ inline SequenceT find_format_copy(
+ const SequenceT& Input,
+ FinderT Finder,
+ FormatterT Formatter )
+ {
+ // Concept check
+ function_requires<
+ FinderConcept<FinderT,
+ BOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type> >();
+ function_requires<
+ FormatterConcept<
+ FormatterT,
+ FinderT,BOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type> >();
+
+ return detail::find_format_copy_impl(
+ Input,
+ Formatter,
+ Finder(begin(Input), end(Input)));
+ }
+
+ //! Generic replace algorithm
+ /*!
+ Use the Finder to search for a substring. Use the Formatter to format
+ this substring and replace it in the input. The input is modified in-place.
+
+ \param Input An input sequence
+ \param Finder A Finder object used to search for a match to be replaced
+ \param Formatter A Formatter object used to format a match
+ */
+ template<
+ typename SequenceT,
+ typename FinderT,
+ typename FormatterT>
+ inline void find_format(
+ SequenceT& Input,
+ FinderT Finder,
+ FormatterT Formatter)
+ {
+ // Concept check
+ function_requires<
+ FinderConcept<FinderT,
+ BOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type> >();
+ function_requires<
+ FormatterConcept<
+ FormatterT,
+ FinderT,BOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type> >();
+
+ detail::find_format_impl(
+ Input,
+ Formatter,
+ Finder(begin(Input), end(Input)));
+ }
+
+
+// find_format_all generic ----------------------------------------------------------------//
+
+ //! Generic replace all algorithm
+ /*!
+ Use the Finder to search for a substring. Use the Formatter to format
+ this substring and replace it in the input. Repeat this for all matching
+ substrings.
+ The result is a modified copy of the input. It is returned as a sequence
+ or copied to the output iterator.
+
+ \param Output An output iterator to which the result will be copied
+ \param Input An input sequence
+ \param Finder A Finder object used to search for a match to be replaced
+ \param Formatter A Formatter object used to format a match
+ \return An output iterator pointing just after the last inserted character or
+ a modified copy of the input
+
+ \note The second variant of this function provides the strong exception-safety guarantee
+ */
+ template<
+ typename OutputIteratorT,
+ typename RangeT,
+ typename FinderT,
+ typename FormatterT>
+ inline OutputIteratorT find_format_all_copy(
+ OutputIteratorT Output,
+ const RangeT& Input,
+ FinderT Finder,
+ FormatterT Formatter)
+ {
+ // Concept check
+ function_requires<
+ FinderConcept<FinderT,
+ BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> >();
+ function_requires<
+ FormatterConcept<
+ FormatterT,
+ FinderT,BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> >();
+
+ return detail::find_format_all_copy_impl(
+ Output,
+ Input,
+ Finder,
+ Formatter,
+ Finder(begin(Input), end(Input)));
+ }
+
+ //! Generic replace all algorithm
+ /*!
+ \overload
+ */
+ template<
+ typename SequenceT,
+ typename FinderT,
+ typename FormatterT >
+ inline SequenceT find_format_all_copy(
+ const SequenceT& Input,
+ FinderT Finder,
+ FormatterT Formatter )
+ {
+ // Concept check
+ function_requires<
+ FinderConcept<FinderT,
+ BOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type> >();
+ function_requires<
+ FormatterConcept<
+ FormatterT,
+ FinderT,BOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type> >();
+
+ return detail::find_format_all_copy_impl(
+ Input,
+ Finder,
+ Formatter,
+ Finder( begin(Input), end(Input) ) );
+ }
+
+ //! Generic replace all algorithm
+ /*!
+ Use the Finder to search for a substring. Use the Formatter to format
+ this substring and replace it in the input. Repeat this for all matching
+ substrings.The input is modified in-place.
+
+ \param Input An input sequence
+ \param Finder A Finder object used to search for a match to be replaced
+ \param Formatter A Formatter object used to format a match
+ */
+ template<
+ typename SequenceT,
+ typename FinderT,
+ typename FormatterT >
+ inline void find_format_all(
+ SequenceT& Input,
+ FinderT Finder,
+ FormatterT Formatter )
+ {
+ // Concept check
+ function_requires<
+ FinderConcept<FinderT,
+ BOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type> >();
+ function_requires<
+ FormatterConcept<
+ FormatterT,
+ FinderT,BOOST_STRING_TYPENAME range_const_iterator<SequenceT>::type> >();
+
+ detail::find_format_all_impl(
+ Input,
+ Finder,
+ Formatter,
+ Finder(begin(Input), end(Input)));
+
+ }
+
+ } // namespace algorithm
+
+ // pull the names to the boost namespace
+ using algorithm::find_format_copy;
+ using algorithm::find_format;
+ using algorithm::find_format_all_copy;
+ using algorithm::find_format_all;
+
+} // namespace boost
+
+
+#endif // BOOST_STRING_FIND_FORMAT_HPP
diff --git a/boost/boost/algorithm/string/find_iterator.hpp b/boost/boost/algorithm/string/find_iterator.hpp
new file mode 100644
index 00000000000..26891dd5724
--- /dev/null
+++ b/boost/boost/algorithm/string/find_iterator.hpp
@@ -0,0 +1,380 @@
+// Boost string_algo library find_iterator.hpp header file ---------------------------//
+
+// Copyright Pavol Droba 2002-2004. Use, modification and
+// distribution is 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)
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_FIND_ITERATOR_HPP
+#define BOOST_STRING_FIND_ITERATOR_HPP
+
+#include <boost/algorithm/string/config.hpp>
+#include <boost/iterator/iterator_facade.hpp>
+#include <boost/iterator/iterator_categories.hpp>
+
+#include <boost/range/iterator_range.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/result_iterator.hpp>
+
+#include <boost/algorithm/string/detail/find_iterator.hpp>
+
+/*! \file
+ Defines find iterator classes. Find iterator repeatly applies a Finder
+ to the specified input string to search for matches. Dereferencing
+ the iterator yields the current match or a range between the last and the current
+ match depending on the iterator used.
+*/
+
+namespace boost {
+ namespace algorithm {
+
+// find_iterator -----------------------------------------------//
+
+ //! find_iterator
+ /*!
+ Find iterator encapsulates a Finder and allows
+ for incremental searching in a string.
+ Each increment moves the iterator to the next match.
+
+ Find iterator is a readable forward traversal iterator.
+
+ Dereferencing the iterator yields an iterator_range delimiting
+ the current match.
+ */
+ template<typename IteratorT>
+ class find_iterator :
+ public iterator_facade<
+ find_iterator<IteratorT>,
+ const iterator_range<IteratorT>,
+ forward_traversal_tag >,
+ private detail::find_iterator_base<IteratorT>
+ {
+ private:
+ // facade support
+ friend class ::boost::iterator_core_access;
+
+ // base type
+ typedef iterator_facade<
+ find_iterator<IteratorT>,
+ const iterator_range<IteratorT>,
+ forward_traversal_tag> facade_type;
+
+ private:
+ // typedefs
+
+ typedef detail::find_iterator_base<IteratorT> base_type;
+ typedef BOOST_STRING_TYPENAME
+ base_type::input_iterator_type input_iterator_type;
+ typedef BOOST_STRING_TYPENAME
+ base_type::match_type match_type;
+
+ public:
+ //! Default constructor
+ /*!
+ Construct null iterator. All null iterators are equal.
+
+ \post eof()==true
+ */
+ find_iterator() {}
+
+ //! Copy constructor
+ /*!
+ Construct a copy of the find_iterator
+ */
+ find_iterator( const find_iterator& Other ) :
+ base_type(Other),
+ m_Match(Other.m_Match),
+ m_End(Other.m_End) {}
+
+ //! Constructor
+ /*!
+ Construct new find_iterator for a given finder
+ and a range.
+ */
+ template<typename FinderT>
+ find_iterator(
+ IteratorT Begin,
+ IteratorT End,
+ FinderT Finder ) :
+ detail::find_iterator_base<IteratorT>(Finder,0),
+ m_Match(Begin,Begin),
+ m_End(End)
+ {
+ increment();
+ }
+
+ //! Constructor
+ /*!
+ Construct new find_iterator for a given finder
+ and a range.
+ */
+ template<typename FinderT, typename RangeT>
+ find_iterator(
+ RangeT& Col,
+ FinderT Finder ) :
+ detail::find_iterator_base<IteratorT>(Finder,0),
+ m_Match(begin(Col),begin(Col)),
+ m_End(end(Col))
+ {
+ increment();
+ }
+
+ private:
+ // iterator operations
+
+ // dereference
+ const match_type& dereference() const
+ {
+ return m_Match;
+ }
+
+ // increment
+ void increment()
+ {
+ m_Match=this->do_find(m_Match.end(),m_End);
+ }
+
+ // comparison
+ bool equal( const find_iterator& Other ) const
+ {
+ bool bEof=eof();
+ bool bOtherEof=Other.eof();
+
+ return bEof || bOtherEof ? bEof==bOtherEof :
+ (
+ m_Match==Other.m_Match &&
+ m_End==Other.m_End
+ );
+ }
+
+ public:
+ // operations
+
+ //! Eof check
+ /*!
+ Check the eof condition. Eof condition means that
+ there is nothing more to be searched i.e. find_iterator
+ is after the last match.
+ */
+ bool eof() const
+ {
+ return
+ this->is_null() ||
+ (
+ m_Match.begin() == m_End &&
+ m_Match.end() == m_End
+ );
+ }
+
+ private:
+ // Attributes
+ match_type m_Match;
+ input_iterator_type m_End;
+ };
+
+ //! find iterator construction helper
+ /*!
+ * Construct a find iterator to iterate through the specified string
+ */
+ template<typename RangeT, typename FinderT>
+ inline find_iterator<
+ BOOST_STRING_TYPENAME range_result_iterator<RangeT>::type>
+ make_find_iterator(
+ RangeT& Collection,
+ FinderT Finder)
+ {
+ return find_iterator<BOOST_STRING_TYPENAME range_result_iterator<RangeT>::type>(
+ begin(Collection), end(Collection), Finder);
+ }
+
+// split iterator -----------------------------------------------//
+
+ //! split_iterator
+ /*!
+ Split iterator encapsulates a Finder and allows
+ for incremental searching in a string.
+ Unlike the find iterator, split iterator iterates
+ through gaps between matches.
+
+ Find iterator is a readable forward traversal iterator.
+
+ Dereferencing the iterator yields an iterator_range delimiting
+ the current match.
+ */
+ template<typename IteratorT>
+ class split_iterator :
+ public iterator_facade<
+ split_iterator<IteratorT>,
+ const iterator_range<IteratorT>,
+ forward_traversal_tag >,
+ private detail::find_iterator_base<IteratorT>
+ {
+ private:
+ // facade support
+ friend class ::boost::iterator_core_access;
+
+ // base type
+ typedef iterator_facade<
+ find_iterator<IteratorT>,
+ iterator_range<IteratorT>,
+ forward_traversal_tag> facade_type;
+
+ private:
+ // typedefs
+
+ typedef detail::find_iterator_base<IteratorT> base_type;
+ typedef BOOST_STRING_TYPENAME
+ base_type::input_iterator_type input_iterator_type;
+ typedef BOOST_STRING_TYPENAME
+ base_type::match_type match_type;
+
+ public:
+ //! Default constructor
+ /*!
+ Construct null iterator. All null iterators are equal.
+
+ \post eof()==true
+ */
+ split_iterator() {}
+ //! Copy constructor
+ /*!
+ Construct a copy of the split_iterator
+ */
+ split_iterator( const split_iterator& Other ) :
+ base_type(Other),
+ m_Match(Other.m_Match),
+ m_Next(Other.m_Next),
+ m_End(Other.m_End),
+ m_bEof(false)
+ {}
+
+ //! Constructor
+ /*!
+ Construct new split_iterator for a given finder
+ and a range.
+ */
+ template<typename FinderT>
+ split_iterator(
+ IteratorT Begin,
+ IteratorT End,
+ FinderT Finder ) :
+ detail::find_iterator_base<IteratorT>(Finder,0),
+ m_Match(Begin,Begin),
+ m_Next(Begin),
+ m_End(End),
+ m_bEof(false)
+ {
+ increment();
+ }
+ //! Constructor
+ /*!
+ Construct new split_iterator for a given finder
+ and a collection.
+ */
+ template<typename FinderT, typename RangeT>
+ split_iterator(
+ RangeT& Col,
+ FinderT Finder ) :
+ detail::find_iterator_base<IteratorT>(Finder,0),
+ m_Match(begin(Col),begin(Col)),
+ m_Next(begin(Col)),
+ m_End(end(Col)),
+ m_bEof(false)
+ {
+ increment();
+ }
+
+
+ private:
+ // iterator operations
+
+ // dereference
+ const match_type& dereference() const
+ {
+ return m_Match;
+ }
+
+ // increment
+ void increment()
+ {
+ match_type FindMatch=this->do_find( m_Next, m_End );
+
+ if(FindMatch.begin()==m_End && FindMatch.end()==m_End)
+ {
+ if(m_Match.end()==m_End)
+ {
+ // Mark iterator as eof
+ m_bEof=true;
+ }
+ }
+
+ m_Match=match_type( m_Next, FindMatch.begin() );
+ m_Next=FindMatch.end();
+ }
+
+ // comparison
+ bool equal( const split_iterator& Other ) const
+ {
+ bool bEof=eof();
+ bool bOtherEof=Other.eof();
+
+ return bEof || bOtherEof ? bEof==bOtherEof :
+ (
+ m_Match==Other.m_Match &&
+ m_Next==Other.m_Next &&
+ m_End==Other.m_End
+ );
+ }
+
+ public:
+ // operations
+
+ //! Eof check
+ /*!
+ Check the eof condition. Eof condition means that
+ there is nothing more to be searched i.e. find_iterator
+ is after the last match.
+ */
+ bool eof() const
+ {
+ return this->is_null() || m_bEof;
+ }
+
+ private:
+ // Attributes
+ match_type m_Match;
+ input_iterator_type m_Next;
+ input_iterator_type m_End;
+ bool m_bEof;
+ };
+
+ //! split iterator construction helper
+ /*!
+ * Construct a split iterator to iterate through the specified collection
+ */
+ template<typename RangeT, typename FinderT>
+ inline split_iterator<
+ BOOST_STRING_TYPENAME range_result_iterator<RangeT>::type>
+ make_split_iterator(
+ RangeT& Collection,
+ FinderT Finder)
+ {
+ return split_iterator<BOOST_STRING_TYPENAME range_result_iterator<RangeT>::type>(
+ begin(Collection), end(Collection), Finder);
+ }
+
+
+ } // namespace algorithm
+
+ // pull names to the boost namespace
+ using algorithm::find_iterator;
+ using algorithm::make_find_iterator;
+ using algorithm::split_iterator;
+ using algorithm::make_split_iterator;
+
+} // namespace boost
+
+
+#endif // BOOST_STRING_FIND_ITERATOR_HPP
diff --git a/boost/boost/algorithm/string/finder.hpp b/boost/boost/algorithm/string/finder.hpp
new file mode 100644
index 00000000000..6a64369d379
--- /dev/null
+++ b/boost/boost/algorithm/string/finder.hpp
@@ -0,0 +1,269 @@
+// Boost string_algo library finder.hpp header file ---------------------------//
+
+// Copyright Pavol Droba 2002-2006. Use, modification and
+// distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_FINDER_HPP
+#define BOOST_STRING_FINDER_HPP
+
+#include <boost/algorithm/string/config.hpp>
+
+#include <boost/range/iterator_range.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/iterator.hpp>
+#include <boost/range/const_iterator.hpp>
+
+#include <boost/algorithm/string/constants.hpp>
+#include <boost/algorithm/string/detail/finder.hpp>
+#include <boost/algorithm/string/compare.hpp>
+
+/*! \file
+ Defines Finder generators. Finder object is a functor which is able to
+ find a substring matching a specific criteria in the input.
+ Finders are used as a pluggable components for replace, find
+ and split facilities. This header contains generator functions
+ for finders provided in this library.
+*/
+
+namespace boost {
+ namespace algorithm {
+
+// Finder generators ------------------------------------------//
+
+ //! "First" finder
+ /*!
+ Construct the \c first_finder. The finder searches for the first
+ occurrence of the string in a given input.
+ The result is given as an \c iterator_range delimiting the match.
+
+ \param Search A substring to be searched for.
+ \param Comp An element comparison predicate
+ \return An instance of the \c first_finder object
+ */
+ template<typename ContainerT>
+ inline detail::first_finderF<
+ BOOST_STRING_TYPENAME range_const_iterator<ContainerT>::type,
+ is_equal>
+ first_finder( const ContainerT& Search )
+ {
+ return
+ detail::first_finderF<
+ BOOST_STRING_TYPENAME
+ range_const_iterator<ContainerT>::type,
+ is_equal>( Search, is_equal() ) ;
+ }
+
+ //! "First" finder
+ /*!
+ \overload
+ */
+ template<typename ContainerT,typename PredicateT>
+ inline detail::first_finderF<
+ BOOST_STRING_TYPENAME range_const_iterator<ContainerT>::type,
+ PredicateT>
+ first_finder(
+ const ContainerT& Search, PredicateT Comp )
+ {
+ return
+ detail::first_finderF<
+ BOOST_STRING_TYPENAME
+ range_const_iterator<ContainerT>::type,
+ PredicateT>( Search, Comp );
+ }
+
+ //! "Last" finder
+ /*!
+ Construct the \c last_finder. The finder searches for the last
+ occurrence of the string in a given input.
+ The result is given as an \c iterator_range delimiting the match.
+
+ \param Search A substring to be searched for.
+ \param Comp An element comparison predicate
+ \return An instance of the \c last_finder object
+ */
+ template<typename ContainerT>
+ inline detail::last_finderF<
+ BOOST_STRING_TYPENAME range_const_iterator<ContainerT>::type,
+ is_equal>
+ last_finder( const ContainerT& Search )
+ {
+ return
+ detail::last_finderF<
+ BOOST_STRING_TYPENAME
+ range_const_iterator<ContainerT>::type,
+ is_equal>( Search, is_equal() );
+ }
+ //! "Last" finder
+ /*!
+ \overload
+ */
+ template<typename ContainerT, typename PredicateT>
+ inline detail::last_finderF<
+ BOOST_STRING_TYPENAME range_const_iterator<ContainerT>::type,
+ PredicateT>
+ last_finder( const ContainerT& Search, PredicateT Comp )
+ {
+ return
+ detail::last_finderF<
+ BOOST_STRING_TYPENAME
+ range_const_iterator<ContainerT>::type,
+ PredicateT>( Search, Comp ) ;
+ }
+
+ //! "Nth" finder
+ /*!
+ Construct the \c nth_finder. The finder searches for the n-th (zero-indexed)
+ occurrence of the string in a given input.
+ The result is given as an \c iterator_range delimiting the match.
+
+ \param Search A substring to be searched for.
+ \param Nth An index of the match to be find
+ \param Comp An element comparison predicate
+ \return An instance of the \c nth_finder object
+ */
+ template<typename ContainerT>
+ inline detail::nth_finderF<
+ BOOST_STRING_TYPENAME range_const_iterator<ContainerT>::type,
+ is_equal>
+ nth_finder(
+ const ContainerT& Search,
+ int Nth)
+ {
+ return
+ detail::nth_finderF<
+ BOOST_STRING_TYPENAME
+ range_const_iterator<ContainerT>::type,
+ is_equal>( Search, Nth, is_equal() ) ;
+ }
+ //! "Nth" finder
+ /*!
+ \overload
+ */
+ template<typename ContainerT, typename PredicateT>
+ inline detail::nth_finderF<
+ BOOST_STRING_TYPENAME range_const_iterator<ContainerT>::type,
+ PredicateT>
+ nth_finder(
+ const ContainerT& Search,
+ int Nth,
+ PredicateT Comp )
+ {
+ return
+ detail::nth_finderF<
+ BOOST_STRING_TYPENAME
+ range_const_iterator<ContainerT>::type,
+ PredicateT>( Search, Nth, Comp );
+ }
+
+ //! "Head" finder
+ /*!
+ Construct the \c head_finder. The finder returns a head of a given
+ input. The head is a prefix of a string up to n elements in
+ size. If an input has less then n elements, whole input is
+ considered a head.
+ The result is given as an \c iterator_range delimiting the match.
+
+ \param N The size of the head
+ \return An instance of the \c head_finder object
+ */
+ inline detail::head_finderF
+ head_finder( int N )
+ {
+ return detail::head_finderF(N);
+ }
+
+ //! "Tail" finder
+ /*!
+ Construct the \c tail_finder. The finder returns a tail of a given
+ input. The tail is a suffix of a string up to n elements in
+ size. If an input has less then n elements, whole input is
+ considered a head.
+ The result is given as an \c iterator_range delimiting the match.
+
+ \param N The size of the head
+ \return An instance of the \c tail_finder object
+ */
+ inline detail::tail_finderF
+ tail_finder( int N )
+ {
+ return detail::tail_finderF(N);
+ }
+
+ //! "Token" finder
+ /*!
+ Construct the \c token_finder. The finder searches for a token
+ specified by a predicate. It is similar to std::find_if
+ algorithm, with an exception that it return a range of
+ instead of a single iterator.
+
+ If "compress token mode" is enabled, adjacent matching tokens are
+ concatenated into one match. Thus the finder can be used to
+ search for continuous segments of characters satisfying the
+ given predicate.
+
+ The result is given as an \c iterator_range delimiting the match.
+
+ \param Pred An element selection predicate
+ \param eCompress Compress flag
+ \return An instance of the \c token_finder object
+ */
+ template< typename PredicateT >
+ inline detail::token_finderF<PredicateT>
+ token_finder(
+ PredicateT Pred,
+ token_compress_mode_type eCompress=token_compress_off )
+ {
+ return detail::token_finderF<PredicateT>( Pred, eCompress );
+ }
+
+ //! "Range" finder
+ /*!
+ Construct the \c range_finder. The finder does not perform
+ any operation. It simply returns the given range for
+ any input.
+
+ \param Begin Beginning of the range
+ \param End End of the range
+ \param Range The range.
+ \return An instance of the \c range_finger object
+ */
+ template< typename ForwardIteratorT >
+ inline detail::range_finderF<ForwardIteratorT>
+ range_finder(
+ ForwardIteratorT Begin,
+ ForwardIteratorT End )
+ {
+ return detail::range_finderF<ForwardIteratorT>( Begin, End );
+ }
+
+ //! "Range" finder
+ /*!
+ \overload
+ */
+ template< typename ForwardIteratorT >
+ inline detail::range_finderF<ForwardIteratorT>
+ range_finder( iterator_range<ForwardIteratorT> Range )
+ {
+ return detail::range_finderF<ForwardIteratorT>( Range );
+ }
+
+ } // namespace algorithm
+
+ // pull the names to the boost namespace
+ using algorithm::first_finder;
+ using algorithm::last_finder;
+ using algorithm::nth_finder;
+ using algorithm::head_finder;
+ using algorithm::tail_finder;
+ using algorithm::token_finder;
+ using algorithm::range_finder;
+
+} // namespace boost
+
+
+#endif // BOOST_STRING_FINDER_HPP
diff --git a/boost/boost/algorithm/string/formatter.hpp b/boost/boost/algorithm/string/formatter.hpp
new file mode 100644
index 00000000000..74234dfed50
--- /dev/null
+++ b/boost/boost/algorithm/string/formatter.hpp
@@ -0,0 +1,93 @@
+// Boost string_algo library formatter.hpp header file ---------------------------//
+
+// Copyright Pavol Droba 2002-2003. Use, modification and
+// distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_FORMATTER_HPP
+#define BOOST_STRING_FORMATTER_HPP
+
+#include <boost/detail/iterator.hpp>
+#include <boost/range/value_type.hpp>
+#include <boost/range/iterator_range.hpp>
+
+#include <boost/algorithm/string/detail/formatter.hpp>
+
+/*! \file
+ Defines Formatter generators. Formatter is a functor which formats
+ a string according to given parameters. A Formatter works
+ in conjunction with a Finder. A Finder can provide additional information
+ for a specific Formatter. An example of such a cooperation is regex_finder
+ and regex_formatter.
+
+ Formatters are used as pluggable components for replace facilities.
+ This header contains generator functions for the Formatters provided in this library.
+*/
+
+namespace boost {
+ namespace algorithm {
+
+// generic formatters ---------------------------------------------------------------//
+
+ //! Constant formatter
+ /*!
+ Construct the \c const_formatter. Const formatter always returns
+ the same value, regardless of the parameter.
+
+ \param Format A predefined value used as a result for formating
+ \return An instance of the \c const_formatter object.
+ */
+ template<typename RangeT>
+ inline detail::const_formatF<RangeT>
+ const_formatter(const RangeT& Format)
+ {
+ return detail::const_formatF<RangeT>(Format);
+ }
+
+ //! Identity formatter
+ /*!
+ Construct the \c identity_formatter. Identity formatter always returns
+ the parameter.
+
+ \return An instance of the \c identity_formatter object.
+ */
+ template<typename RangeT>
+ inline detail::identity_formatF<RangeT>
+ identity_formatter()
+ {
+ return detail::identity_formatF<RangeT>();
+ }
+
+ //! Empty formatter
+ /*!
+ Construct the \c empty_formatter. Empty formatter always returns an empty
+ sequence.
+
+ \param Input container used to select a correct value_type for the
+ resulting empty_container<>.
+ \return An instance of the \c empty_formatter object.
+ */
+ template<typename RangeT>
+ inline detail::empty_formatF<
+ BOOST_STRING_TYPENAME range_value<RangeT>::type>
+ empty_formatter(const RangeT&)
+ {
+ return detail::empty_formatF<
+ BOOST_STRING_TYPENAME range_value<RangeT>::type>();
+ }
+
+
+ } // namespace algorithm
+
+ // pull the names to the boost namespace
+ using algorithm::const_formatter;
+ using algorithm::identity_formatter;
+ using algorithm::empty_formatter;
+
+} // namespace boost
+
+
+#endif // BOOST_FORMATTER_HPP
diff --git a/boost/boost/algorithm/string/iter_find.hpp b/boost/boost/algorithm/string/iter_find.hpp
new file mode 100644
index 00000000000..c9b51caeb25
--- /dev/null
+++ b/boost/boost/algorithm/string/iter_find.hpp
@@ -0,0 +1,184 @@
+// Boost string_algo library iter_find.hpp header file ---------------------------//
+
+// Copyright Pavol Droba 2002-2003. Use, modification and
+// distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_ITER_FIND_HPP
+#define BOOST_STRING_ITER_FIND_HPP
+
+#include <boost/algorithm/string/config.hpp>
+#include <algorithm>
+#include <iterator>
+#include <boost/iterator/transform_iterator.hpp>
+
+#include <boost/range/iterator_range.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/result_iterator.hpp>
+#include <boost/range/value_type.hpp>
+
+#include <boost/algorithm/string/concept.hpp>
+#include <boost/algorithm/string/find_iterator.hpp>
+#include <boost/algorithm/string/detail/util.hpp>
+
+/*! \file
+ Defines generic split algorithms. Split algorithms can be
+ used to divide a sequence into several part according
+ to a given criteria. Result is given as a 'container
+ of containers' where elements are copies or references
+ to extracted parts.
+
+ There are two algorithms provided. One iterates over matching
+ substrings, the other one over the gaps between these matches.
+*/
+
+namespace boost {
+ namespace algorithm {
+
+// iterate find ---------------------------------------------------//
+
+ //! Iter find algorithm
+ /*!
+ This algorithm executes a given finder in iteration on the input,
+ until the end of input is reached, or no match is found.
+ Iteration is done using built-in find_iterator, so the real
+ searching is performed only when needed.
+ In each iteration new match is found and added to the result.
+
+ \param Result A 'container container' to contain the result of search.
+ Both outer and inner container must have constructor taking a pair
+ of iterators as an argument.
+ Typical type of the result is
+ \c std::vector<boost::iterator_range<iterator>>
+ (each element of such a vector will container a range delimiting
+ a match).
+ \param Input A container which will be searched.
+ \param Finder A Finder object used for searching
+ \return A reference the result
+
+ \note Prior content of the result will be overwritten.
+ */
+ template<
+ typename SequenceSequenceT,
+ typename RangeT,
+ typename FinderT >
+ inline SequenceSequenceT&
+ iter_find(
+ SequenceSequenceT& Result,
+ RangeT& Input,
+ FinderT Finder )
+ {
+ function_requires<
+ FinderConcept<FinderT,
+ BOOST_STRING_TYPENAME range_result_iterator<RangeT>::type> >();
+
+ typedef BOOST_STRING_TYPENAME
+ range_result_iterator<RangeT>::type input_iterator_type;
+ typedef find_iterator<input_iterator_type> find_iterator_type;
+ typedef detail::copy_iterator_rangeF<
+ BOOST_STRING_TYPENAME
+ range_value<SequenceSequenceT>::type,
+ input_iterator_type> copy_range_type;
+
+ input_iterator_type InputEnd=end(Input);
+
+ typedef transform_iterator<copy_range_type, find_iterator_type>
+ transform_iter_type;
+
+ transform_iter_type itBegin=
+ make_transform_iterator(
+ find_iterator_type( begin(Input), InputEnd, Finder ),
+ copy_range_type());
+
+ transform_iter_type itEnd=
+ make_transform_iterator(
+ find_iterator_type(),
+ copy_range_type());
+
+ SequenceSequenceT Tmp(itBegin, itEnd);
+
+ Result.swap(Tmp);
+ return Result;
+ }
+
+// iterate split ---------------------------------------------------//
+
+ //! Split find algorithm
+ /*!
+ This algorithm executes a given finder in iteration on the input,
+ until the end of input is reached, or no match is found.
+ Iteration is done using built-in find_iterator, so the real
+ searching is performed only when needed.
+ Each match is used as a separator of segments. These segments are then
+ returned in the result.
+
+ \param Result A 'container container' to container the result of search.
+ Both outer and inner container must have constructor taking a pair
+ of iterators as an argument.
+ Typical type of the result is
+ \c std::vector<boost::iterator_range<iterator>>
+ (each element of such a vector will container a range delimiting
+ a match).
+ \param Input A container which will be searched.
+ \param Finder A finder object used for searching
+ \return A reference the result
+
+ \note Prior content of the result will be overwritten.
+ */
+ template<
+ typename SequenceSequenceT,
+ typename RangeT,
+ typename FinderT >
+ inline SequenceSequenceT&
+ iter_split(
+ SequenceSequenceT& Result,
+ RangeT& Input,
+ FinderT Finder )
+ {
+ function_requires<
+ FinderConcept<FinderT,
+ BOOST_STRING_TYPENAME range_result_iterator<RangeT>::type> >();
+
+ typedef BOOST_STRING_TYPENAME
+ range_result_iterator<RangeT>::type input_iterator_type;
+ typedef split_iterator<input_iterator_type> find_iterator_type;
+ typedef detail::copy_iterator_rangeF<
+ BOOST_STRING_TYPENAME
+ range_value<SequenceSequenceT>::type,
+ input_iterator_type> copy_range_type;
+
+ input_iterator_type InputEnd=end(Input);
+
+ typedef transform_iterator<copy_range_type, find_iterator_type>
+ transform_iter_type;
+
+ transform_iter_type itBegin=
+ make_transform_iterator(
+ find_iterator_type( begin(Input), InputEnd, Finder ),
+ copy_range_type() );
+
+ transform_iter_type itEnd=
+ make_transform_iterator(
+ find_iterator_type(),
+ copy_range_type() );
+
+ SequenceSequenceT Tmp(itBegin, itEnd);
+
+ Result.swap(Tmp);
+ return Result;
+ }
+
+ } // namespace algorithm
+
+ // pull names to the boost namespace
+ using algorithm::iter_find;
+ using algorithm::iter_split;
+
+} // namespace boost
+
+
+#endif // BOOST_STRING_ITER_FIND_HPP
diff --git a/boost/boost/algorithm/string/join.hpp b/boost/boost/algorithm/string/join.hpp
new file mode 100644
index 00000000000..b4e07912d4f
--- /dev/null
+++ b/boost/boost/algorithm/string/join.hpp
@@ -0,0 +1,144 @@
+// Boost string_algo library join.hpp header file ---------------------------//
+
+// Copyright Pavol Droba 2002-2006. Use, modification and
+// distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_JOIN_HPP
+#define BOOST_STRING_JOIN_HPP
+
+#include <boost/algorithm/string/config.hpp>
+#include <boost/algorithm/string/detail/sequence.hpp>
+#include <boost/range/value_type.hpp>
+
+
+/*! \file
+ Defines join algorithm.
+
+ Join algorithm is a counterpart to split algorithms.
+ It joins strings from a 'list' by adding user defined separator.
+ Additionally there is a version that allows simple filtering
+ by providing a predicate.
+*/
+
+namespace boost {
+ namespace algorithm {
+
+// join --------------------------------------------------------------//
+
+ //! Join algorithm
+ /*!
+ This algorithm joins all strings in a 'list' into one long string.
+ Segments are concatenated by given separator.
+
+ \param Input A container that holds the input strings. It must be a container-of-containers.
+ \param Separator A string that will separate the joined segments.
+ \return Concatenated string.
+
+ \note This function provides the strong exception-safety guarantee
+ */
+ template< typename SequenceSequenceT, typename Range1T>
+ inline typename range_value<SequenceSequenceT>::type
+ join(
+ const SequenceSequenceT& Input,
+ Range1T& Separator)
+ {
+ // Define working types
+ typedef typename range_value<SequenceSequenceT>::type ResultT;
+ typedef typename range_const_iterator<SequenceSequenceT>::type InputIteratorT;
+
+ // Parse input
+ InputIteratorT itBegin=begin(Input);
+ InputIteratorT itEnd=end(Input);
+
+ // Construct container to hold the result
+ ResultT Result;
+
+ // Append first element
+ if(itBegin!=itEnd)
+ {
+ detail::insert(Result, end(Result), *itBegin);
+ ++itBegin;
+ }
+
+ for(;itBegin!=itEnd; ++itBegin)
+ {
+ // Add separator
+ detail::insert(Result, end(Result), Separator);
+ // Add element
+ detail::insert(Result, end(Result), *itBegin);
+ }
+
+ return Result;
+ }
+
+// join_if ----------------------------------------------------------//
+
+ //! Conditional join algorithm
+ /*!
+ This algorithm joins all strings in a 'list' into one long string.
+ Segments are concatenated by given separator. Only segments that
+ satisfy the predicate will be added to the result.
+
+ \param Input A container that holds the input strings. It must be a container-of-containers.
+ \param Separator A string that will separate the joined segments.
+ \param Pred A segment selection predicate
+ \return Concatenated string.
+
+ \note This function provides the strong exception-safety guarantee
+ */
+ template< typename SequenceSequenceT, typename Range1T, typename PredicateT>
+ inline typename range_value<SequenceSequenceT>::type
+ join_if(
+ const SequenceSequenceT& Input,
+ Range1T& Separator,
+ PredicateT Pred)
+ {
+ // Define working types
+ typedef typename range_value<SequenceSequenceT>::type ResultT;
+ typedef typename range_const_iterator<SequenceSequenceT>::type InputIteratorT;
+
+ // Parse input
+ InputIteratorT itBegin=begin(Input);
+ InputIteratorT itEnd=end(Input);
+
+ // Construct container to hold the result
+ ResultT Result;
+
+ // Roll to the first element that will be added
+ while(itBegin!=itEnd && !Pred(*itBegin)) ++itBegin;
+ // Add this element
+ if(itBegin!=itEnd)
+ {
+ detail::insert(Result, end(Result), *itBegin);
+ ++itBegin;
+ }
+
+ for(;itBegin!=itEnd; ++itBegin)
+ {
+ if(Pred(*itBegin))
+ {
+ // Add separator
+ detail::insert(Result, end(Result), Separator);
+ // Add element
+ detail::insert(Result, end(Result), *itBegin);
+ }
+ }
+
+ return Result;
+ }
+
+ } // namespace algorithm
+
+ // pull names to the boost namespace
+ using algorithm::join;
+ using algorithm::join_if;
+
+} // namespace boost
+
+
+#endif // BOOST_STRING_JOIN_HPP
+
diff --git a/boost/boost/algorithm/string/predicate.hpp b/boost/boost/algorithm/string/predicate.hpp
new file mode 100644
index 00000000000..41ed456a093
--- /dev/null
+++ b/boost/boost/algorithm/string/predicate.hpp
@@ -0,0 +1,463 @@
+// Boost string_algo library predicate.hpp header file ---------------------------//
+
+// Copyright Pavol Droba 2002-2003. Use, modification and
+// distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_PREDICATE_HPP
+#define BOOST_STRING_PREDICATE_HPP
+
+#include <boost/algorithm/string/config.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/iterator.hpp>
+#include <boost/range/const_iterator.hpp>
+
+#include <boost/algorithm/string/compare.hpp>
+#include <boost/algorithm/string/find.hpp>
+#include <boost/algorithm/string/detail/predicate.hpp>
+
+/*! \file boost/algorithm/string/predicate.hpp
+ Defines string-related predicates.
+ The predicates determine whether a substring is contained in the input string
+ under various conditions: a string starts with the substring, ends with the
+ substring, simply contains the substring or if both strings are equal.
+ Additionaly the algorithm \c all() checks all elements of a container to satisfy a
+ condition.
+
+ All predicates provide the strong exception guarantee.
+*/
+
+namespace boost {
+ namespace algorithm {
+
+// starts_with predicate -----------------------------------------------//
+
+ //! 'Starts with' predicate
+ /*!
+ This predicate holds when the test string is a prefix of the Input.
+ In other words, if the input starts with the test.
+ When the optional predicate is specified, it is used for character-wise
+ comparison.
+
+ \param Input An input sequence
+ \param Test A test sequence
+ \param Comp An element comparison predicate
+ \return The result of the test
+
+ \note This function provides the strong exception-safety guarantee
+ */
+ template<typename Range1T, typename Range2T, typename PredicateT>
+ inline bool starts_with(
+ const Range1T& Input,
+ const Range2T& Test,
+ PredicateT Comp)
+ {
+ typedef BOOST_STRING_TYPENAME
+ range_const_iterator<Range1T>::type Iterator1T;
+ typedef BOOST_STRING_TYPENAME
+ range_const_iterator<Range2T>::type Iterator2T;
+
+ Iterator1T InputEnd=end(Input);
+ Iterator2T TestEnd=end(Test);
+
+ Iterator1T it=begin(Input);
+ Iterator2T pit=begin(Test);
+ for(;
+ it!=InputEnd && pit!=TestEnd;
+ ++it,++pit)
+ {
+ if( !(Comp(*it,*pit)) )
+ return false;
+ }
+
+ return pit==TestEnd;
+ }
+
+ //! 'Starts with' predicate
+ /*!
+ \overload
+ */
+ template<typename Range1T, typename Range2T>
+ inline bool starts_with(
+ const Range1T& Input,
+ const Range2T& Test)
+ {
+ return starts_with(Input, Test, is_equal());
+ }
+
+ //! 'Starts with' predicate ( case insensitive )
+ /*!
+ This predicate holds when the test string is a prefix of the Input.
+ In other words, if the input starts with the test.
+ Elements are compared case insensitively.
+
+ \param Input An input sequence
+ \param Test A test sequence
+ \param Loc A locale used for case insensitive comparison
+ \return The result of the test
+
+ \note This function provides the strong exception-safety guarantee
+ */
+ template<typename Range1T, typename Range2T>
+ inline bool istarts_with(
+ const Range1T& Input,
+ const Range2T& Test,
+ const std::locale& Loc=std::locale())
+ {
+ return starts_with(Input, Test, is_iequal(Loc));
+ }
+
+
+// ends_with predicate -----------------------------------------------//
+
+ //! 'Ends with' predicate
+ /*!
+ This predicate holds when the test string is a suffix of the Input.
+ In other words, if the input ends with the test.
+ When the optional predicate is specified, it is used for character-wise
+ comparison.
+
+
+ \param Input An input sequence
+ \param Test A test sequence
+ \param Comp An element comparison predicate
+ \return The result of the test
+
+ \note This function provides the strong exception-safety guarantee
+ */
+ template<typename Range1T, typename Range2T, typename PredicateT>
+ inline bool ends_with(
+ const Range1T& Input,
+ const Range2T& Test,
+ PredicateT Comp)
+ {
+ typedef BOOST_STRING_TYPENAME
+ range_const_iterator<Range1T>::type Iterator1T;
+ typedef BOOST_STRING_TYPENAME boost::detail::
+ iterator_traits<Iterator1T>::iterator_category category;
+
+ return detail::
+ ends_with_iter_select(
+ begin(Input),
+ end(Input),
+ begin(Test),
+ end(Test),
+ Comp,
+ category());
+ }
+
+
+ //! 'Ends with' predicate
+ /*!
+ \overload
+ */
+ template<typename Range1T, typename Range2T>
+ inline bool ends_with(
+ const Range1T& Input,
+ const Range2T& Test)
+ {
+ return ends_with(Input, Test, is_equal());
+ }
+
+ //! 'Ends with' predicate ( case insensitive )
+ /*!
+ This predicate holds when the test container is a suffix of the Input.
+ In other words, if the input ends with the test.
+ Elements are compared case insensitively.
+
+ \param Input An input sequence
+ \param Test A test sequence
+ \param Loc A locale used for case insensitive comparison
+ \return The result of the test
+
+ \note This function provides the strong exception-safety guarantee
+ */
+ template<typename Range1T, typename Range2T>
+ inline bool iends_with(
+ const Range1T& Input,
+ const Range2T& Test,
+ const std::locale& Loc=std::locale())
+ {
+ return ends_with(Input, Test, is_iequal(Loc));
+ }
+
+// contains predicate -----------------------------------------------//
+
+ //! 'Contains' predicate
+ /*!
+ This predicate holds when the test container is contained in the Input.
+ When the optional predicate is specified, it is used for character-wise
+ comparison.
+
+ \param Input An input sequence
+ \param Test A test sequence
+ \param Comp An element comparison predicate
+ \return The result of the test
+
+ \note This function provides the strong exception-safety guarantee
+ */
+ template<typename Range1T, typename Range2T, typename PredicateT>
+ inline bool contains(
+ const Range1T& Input,
+ const Range2T& Test,
+ PredicateT Comp)
+ {
+ if (empty(Test))
+ {
+ // Empty range is contained always
+ return true;
+ }
+
+ // Use the temporary variable to make VACPP happy
+ bool bResult=(first_finder(Test,Comp)(begin(Input), end(Input)));
+ return bResult;
+ }
+
+ //! 'Contains' predicate
+ /*!
+ \overload
+ */
+ template<typename Range1T, typename Range2T>
+ inline bool contains(
+ const Range1T& Input,
+ const Range2T& Test)
+ {
+ return contains(Input, Test, is_equal());
+ }
+
+ //! 'Contains' predicate ( case insensitive )
+ /*!
+ This predicate holds when the test container is contained in the Input.
+ Elements are compared case insensitively.
+
+ \param Input An input sequence
+ \param Test A test sequence
+ \param Loc A locale used for case insensitive comparison
+ \return The result of the test
+
+ \note This function provides the strong exception-safety guarantee
+ */
+ template<typename Range1T, typename Range2T>
+ inline bool icontains(
+ const Range1T& Input,
+ const Range2T& Test,
+ const std::locale& Loc=std::locale())
+ {
+ return contains(Input, Test, is_iequal(Loc));
+ }
+
+// equals predicate -----------------------------------------------//
+
+ //! 'Equals' predicate
+ /*!
+ This predicate holds when the test container is equal to the
+ input container i.e. all elements in both containers are same.
+ When the optional predicate is specified, it is used for character-wise
+ comparison.
+
+ \param Input An input sequence
+ \param Test A test sequence
+ \param Comp An element comparison predicate
+ \return The result of the test
+
+ \note This is a two-way version of \c std::equal algorithm
+
+ \note This function provides the strong exception-safety guarantee
+ */
+ template<typename Range1T, typename Range2T, typename PredicateT>
+ inline bool equals(
+ const Range1T& Input,
+ const Range2T& Test,
+ PredicateT Comp)
+ {
+ typedef BOOST_STRING_TYPENAME
+ range_const_iterator<Range1T>::type Iterator1T;
+ typedef BOOST_STRING_TYPENAME
+ range_const_iterator<Range2T>::type Iterator2T;
+
+ Iterator1T InputEnd=end(Input);
+ Iterator2T TestEnd=end(Test);
+
+ Iterator1T it=begin(Input);
+ Iterator2T pit=begin(Test);
+ for(;
+ it!=InputEnd && pit!=TestEnd;
+ ++it,++pit)
+ {
+ if( !(Comp(*it,*pit)) )
+ return false;
+ }
+
+ return (pit==TestEnd) && (it==InputEnd);
+ }
+
+ //! 'Equals' predicate
+ /*!
+ \overload
+ */
+ template<typename Range1T, typename Range2T>
+ inline bool equals(
+ const Range1T& Input,
+ const Range2T& Test)
+ {
+ return equals(Input, Test, is_equal());
+ }
+
+ //! 'Equals' predicate ( case insensitive )
+ /*!
+ This predicate holds when the test container is equal to the
+ input container i.e. all elements in both containers are same.
+ Elements are compared case insensitively.
+
+ \param Input An input sequence
+ \param Test A test sequence
+ \param Loc A locale used for case insensitive comparison
+ \return The result of the test
+
+ \note This is a two-way version of \c std::equal algorithm
+
+ \note This function provides the strong exception-safety guarantee
+ */
+ template<typename Range1T, typename Range2T>
+ inline bool iequals(
+ const Range1T& Input,
+ const Range2T& Test,
+ const std::locale& Loc=std::locale())
+ {
+ return equals(Input, Test, is_iequal(Loc));
+ }
+
+// lexicographical_compare predicate -----------------------------//
+
+ //! Lexicographical compare predicate
+ /*!
+ This predicate is an overload of std::lexicographical_compare
+ for range arguments
+
+ It check whether the first argument is lexicographically less
+ then the second one.
+
+ If the optional predicate is specified, it is used for character-wise
+ comparison
+
+ \param Arg1 First argument
+ \param Arg2 Second argument
+ \param Pred Comparison predicate
+ \return The result of the test
+
+ \note This function provides the strong exception-safety guarantee
+ */
+ template<typename Range1T, typename Range2T, typename PredicateT>
+ inline bool lexicographical_compare(
+ const Range1T& Arg1,
+ const Range2T& Arg2,
+ PredicateT Pred)
+ {
+ return std::lexicographical_compare(
+ begin(Arg1),
+ end(Arg1),
+ begin(Arg2),
+ end(Arg2),
+ Pred);
+ }
+
+ //! Lexicographical compare predicate
+ /*!
+ \overload
+ */
+ template<typename Range1T, typename Range2T>
+ inline bool lexicographical_compare(
+ const Range1T& Arg1,
+ const Range2T& Arg2)
+ {
+ return std::lexicographical_compare(
+ begin(Arg1),
+ end(Arg1),
+ begin(Arg2),
+ end(Arg2),
+ is_less());
+ }
+
+ //! Lexicographical compare predicate (case-insensitive)
+ /*!
+ This predicate is an overload of std::lexicographical_compare
+ for range arguments.
+ It check whether the first argument is lexicographically less
+ then the second one.
+ Elements are compared case insensitively
+
+
+ \param Arg1 First argument
+ \param Arg2 Second argument
+ \return The result of the test
+
+ \note This function provides the strong exception-safety guarantee
+ */
+ template<typename Range1T, typename Range2T>
+ inline bool ilexicographical_compare(
+ const Range1T& Arg1,
+ const Range2T& Arg2)
+ {
+ return std::lexicographical_compare(
+ begin(Arg1),
+ end(Arg1),
+ begin(Arg2),
+ end(Arg2),
+ is_iless());
+ }
+
+
+// all predicate -----------------------------------------------//
+
+ //! 'All' predicate
+ /*!
+ This predicate holds it all its elements satisfy a given
+ condition, represented by the predicate.
+
+ \param Input An input sequence
+ \param Pred A predicate
+ \return The result of the test
+
+ \note This function provides the strong exception-safety guarantee
+ */
+ template<typename RangeT, typename PredicateT>
+ inline bool all(
+ const RangeT& Input,
+ PredicateT Pred)
+ {
+ typedef BOOST_STRING_TYPENAME
+ range_const_iterator<RangeT>::type Iterator1T;
+
+ Iterator1T InputEnd=end(Input);
+ for( Iterator1T It=begin(Input); It!=InputEnd; ++It)
+ {
+ if (!Pred(*It))
+ return false;
+ }
+
+ return true;
+ }
+
+ } // namespace algorithm
+
+ // pull names to the boost namespace
+ using algorithm::starts_with;
+ using algorithm::istarts_with;
+ using algorithm::ends_with;
+ using algorithm::iends_with;
+ using algorithm::contains;
+ using algorithm::icontains;
+ using algorithm::equals;
+ using algorithm::iequals;
+ using algorithm::all;
+ using algorithm::lexicographical_compare;
+ using algorithm::ilexicographical_compare;
+
+} // namespace boost
+
+
+#endif // BOOST_STRING_PREDICATE_HPP
diff --git a/boost/boost/algorithm/string/predicate_facade.hpp b/boost/boost/algorithm/string/predicate_facade.hpp
new file mode 100644
index 00000000000..70730f8b5f0
--- /dev/null
+++ b/boost/boost/algorithm/string/predicate_facade.hpp
@@ -0,0 +1,41 @@
+// Boost string_algo library predicate_facade.hpp header file ---------------------------//
+
+// Copyright Pavol Droba 2002-2003. Use, modification and
+// distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_PREDICATE_FACADE_HPP
+#define BOOST_STRING_PREDICATE_FACADE_HPP
+
+#include <boost/algorithm/string/config.hpp>
+
+/*
+ \file boost/algorith/string/predicate_facade.hpp
+ This file containes predicate_facade definition. This template class is used
+ to identify classification predicates, so they can be combined using
+ composition operators.
+*/
+
+namespace boost {
+ namespace algorithm {
+
+// predicate facade ------------------------------------------------------//
+
+ //! Predicate facade
+ /*!
+ This class allows to recognize classification
+ predicates, so that they can be combined using
+ composition operators.
+ Every classification predicate must be derived from this class.
+ */
+ template<typename Derived>
+ struct predicate_facade {};
+
+ } // namespace algorithm
+} // namespace boost
+
+
+#endif // BOOST_STRING_CLASSIFICATION_DETAIL_HPP
diff --git a/boost/boost/algorithm/string/regex.hpp b/boost/boost/algorithm/string/regex.hpp
new file mode 100644
index 00000000000..630d117de0b
--- /dev/null
+++ b/boost/boost/algorithm/string/regex.hpp
@@ -0,0 +1,644 @@
+// Boost string_algo library regex.hpp header file ---------------------------//
+
+// Copyright Pavol Droba 2002-2003. Use, modification and
+// distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_REGEX_HPP
+#define BOOST_STRING_REGEX_HPP
+
+#include <boost/algorithm/string/config.hpp>
+#include <boost/regex.hpp>
+
+#include <boost/range/iterator_range.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/result_iterator.hpp>
+
+#include <boost/algorithm/string/find_format.hpp>
+#include <boost/algorithm/string/regex_find_format.hpp>
+#include <boost/algorithm/string/formatter.hpp>
+#include <boost/algorithm/string/iter_find.hpp>
+
+/*! \file
+ Defines regex variants of the algorithms.
+*/
+
+namespace boost {
+ namespace algorithm {
+
+// find_regex -----------------------------------------------//
+
+ //! Find regex algorithm
+ /*!
+ Search for a substring matching the given regex in the input.
+
+ \param Input A container which will be searched.
+ \param Rx A regular expression
+ \param Flags Regex options
+ \return
+ An \c iterator_range delimiting the match.
+ Returned iterator is either \c RangeT::iterator or
+ \c RangeT::const_iterator, depending on the constness of
+ the input parameter.
+
+ \note This function provides the strong exception-safety guarantee
+ */
+ template<
+ typename RangeT,
+ typename CharT,
+ typename RegexTraitsT>
+ inline iterator_range<
+ BOOST_STRING_TYPENAME range_result_iterator<RangeT>::type >
+ find_regex(
+ RangeT& Input,
+ const basic_regex<CharT, RegexTraitsT>& Rx,
+ match_flag_type Flags=match_default )
+ {
+ return regex_finder(Rx,Flags)(
+ begin(Input), end(Input) );
+ }
+
+// replace_regex --------------------------------------------------------------------//
+
+ //! Replace regex algorithm
+ /*!
+ Search for a substring matching given regex and format it with
+ the specified format.
+ The result is a modified copy of the input. It is returned as a sequence
+ or copied to the output iterator.
+
+ \param Output An output iterator to which the result will be copied
+ \param Input An input string
+ \param Rx A regular expression
+ \param Format Regex format definition
+ \param Flags Regex options
+ \return An output iterator pointing just after the last inserted character or
+ a modified copy of the input
+
+ \note The second variant of this function provides the strong exception-safety guarantee
+ */
+ template<
+ typename OutputIteratorT,
+ typename RangeT,
+ typename CharT,
+ typename RegexTraitsT,
+ typename FormatStringTraitsT, typename FormatStringAllocatorT >
+ inline OutputIteratorT replace_regex_copy(
+ OutputIteratorT Output,
+ const RangeT& Input,
+ const basic_regex<CharT, RegexTraitsT>& Rx,
+ const std::basic_string<CharT, FormatStringTraitsT, FormatStringAllocatorT>& Format,
+ match_flag_type Flags=match_default | format_default )
+ {
+ return find_format_copy(
+ Output,
+ Input,
+ regex_finder( Rx, Flags ),
+ regex_formatter( Format, Flags ) );
+ }
+
+ //! Replace regex algorithm
+ /*!
+ \overload
+ */
+ template<
+ typename SequenceT,
+ typename CharT,
+ typename RegexTraitsT,
+ typename FormatStringTraitsT, typename FormatStringAllocatorT >
+ inline SequenceT replace_regex_copy(
+ const SequenceT& Input,
+ const basic_regex<CharT, RegexTraitsT>& Rx,
+ const std::basic_string<CharT, FormatStringTraitsT, FormatStringAllocatorT>& Format,
+ match_flag_type Flags=match_default | format_default )
+ {
+ return find_format_copy(
+ Input,
+ regex_finder( Rx, Flags ),
+ regex_formatter( Format, Flags ) );
+ }
+
+ //! Replace regex algorithm
+ /*!
+ Search for a substring matching given regex and format it with
+ the specified format. The input string is modified in-place.
+
+ \param Input An input string
+ \param Rx A regular expression
+ \param Format Regex format definition
+ \param Flags Regex options
+ */
+ template<
+ typename SequenceT,
+ typename CharT,
+ typename RegexTraitsT,
+ typename FormatStringTraitsT, typename FormatStringAllocatorT >
+ inline void replace_regex(
+ SequenceT& Input,
+ const basic_regex<CharT, RegexTraitsT>& Rx,
+ const std::basic_string<CharT, FormatStringTraitsT, FormatStringAllocatorT>& Format,
+ match_flag_type Flags=match_default | format_default )
+ {
+ find_format(
+ Input,
+ regex_finder( Rx, Flags ),
+ regex_formatter( Format, Flags ) );
+ }
+
+// replace_all_regex --------------------------------------------------------------------//
+
+ //! Replace all regex algorithm
+ /*!
+ Format all substrings, matching given regex, with the specified format.
+ The result is a modified copy of the input. It is returned as a sequence
+ or copied to the output iterator.
+
+ \param Output An output iterator to which the result will be copied
+ \param Input An input string
+ \param Rx A regular expression
+ \param Format Regex format definition
+ \param Flags Regex options
+ \return An output iterator pointing just after the last inserted character or
+ a modified copy of the input
+
+ \note The second variant of this function provides the strong exception-safety guarantee
+ */
+ template<
+ typename OutputIteratorT,
+ typename RangeT,
+ typename CharT,
+ typename RegexTraitsT,
+ typename FormatStringTraitsT, typename FormatStringAllocatorT >
+ inline OutputIteratorT replace_all_regex_copy(
+ OutputIteratorT Output,
+ const RangeT& Input,
+ const basic_regex<CharT, RegexTraitsT>& Rx,
+ const std::basic_string<CharT, FormatStringTraitsT, FormatStringAllocatorT>& Format,
+ match_flag_type Flags=match_default | format_default )
+ {
+ return find_format_all_copy(
+ Output,
+ Input,
+ regex_finder( Rx, Flags ),
+ regex_formatter( Format, Flags ) );
+ }
+
+ //! Replace all regex algorithm
+ /*!
+ \overload
+ */
+ template<
+ typename SequenceT,
+ typename CharT,
+ typename RegexTraitsT,
+ typename FormatStringTraitsT, typename FormatStringAllocatorT >
+ inline SequenceT replace_all_regex_copy(
+ const SequenceT& Input,
+ const basic_regex<CharT, RegexTraitsT>& Rx,
+ const std::basic_string<CharT, FormatStringTraitsT, FormatStringAllocatorT>& Format,
+ match_flag_type Flags=match_default | format_default )
+ {
+ return find_format_all_copy(
+ Input,
+ regex_finder( Rx, Flags ),
+ regex_formatter( Format, Flags ) );
+ }
+
+ //! Replace all regex algorithm
+ /*!
+ Format all substrings, matching given regex, with the specified format.
+ The input string is modified in-place.
+
+ \param Input An input string
+ \param Rx A regular expression
+ \param Format Regex format definition
+ \param Flags Regex options
+ */
+ template<
+ typename SequenceT,
+ typename CharT,
+ typename RegexTraitsT,
+ typename FormatStringTraitsT, typename FormatStringAllocatorT >
+ inline void replace_all_regex(
+ SequenceT& Input,
+ const basic_regex<CharT, RegexTraitsT>& Rx,
+ const std::basic_string<CharT, FormatStringTraitsT, FormatStringAllocatorT>& Format,
+ match_flag_type Flags=match_default | format_default )
+ {
+ find_format_all(
+ Input,
+ regex_finder( Rx, Flags ),
+ regex_formatter( Format, Flags ) );
+ }
+
+// erase_regex --------------------------------------------------------------------//
+
+ //! Erase regex algorithm
+ /*!
+ Remove a substring matching given regex from the input.
+ The result is a modified copy of the input. It is returned as a sequence
+ or copied to the output iterator.
+
+ \param Output An output iterator to which the result will be copied
+ \param Input An input string
+ \param Rx A regular expression
+ \param Flags Regex options
+ \return An output iterator pointing just after the last inserted character or
+ a modified copy of the input
+
+ \note The second variant of this function provides the strong exception-safety guarantee
+ */
+ template<
+ typename OutputIteratorT,
+ typename RangeT,
+ typename CharT,
+ typename RegexTraitsT >
+ inline OutputIteratorT erase_regex_copy(
+ OutputIteratorT Output,
+ const RangeT& Input,
+ const basic_regex<CharT, RegexTraitsT>& Rx,
+ match_flag_type Flags=match_default )
+ {
+ return find_format_copy(
+ Output,
+ Input,
+ regex_finder( Rx, Flags ),
+ empty_formatter( Input ) );
+ }
+
+ //! Erase regex algorithm
+ /*!
+ \overload
+ */
+ template<
+ typename SequenceT,
+ typename CharT,
+ typename RegexTraitsT >
+ inline SequenceT erase_regex_copy(
+ const SequenceT& Input,
+ const basic_regex<CharT, RegexTraitsT>& Rx,
+ match_flag_type Flags=match_default )
+ {
+ return find_format_copy(
+ Input,
+ regex_finder( Rx, Flags ),
+ empty_formatter( Input ) );
+ }
+
+ //! Erase regex algorithm
+ /*!
+ Remove a substring matching given regex from the input.
+ The input string is modified in-place.
+
+ \param Input An input string
+ \param Rx A regular expression
+ \param Flags Regex options
+ */
+ template<
+ typename SequenceT,
+ typename CharT,
+ typename RegexTraitsT >
+ inline void erase_regex(
+ SequenceT& Input,
+ const basic_regex<CharT, RegexTraitsT>& Rx,
+ match_flag_type Flags=match_default )
+ {
+ find_format(
+ Input,
+ regex_finder( Rx, Flags ),
+ empty_formatter( Input ) );
+ }
+
+// erase_all_regex --------------------------------------------------------------------//
+
+ //! Erase all regex algorithm
+ /*!
+ Erase all substrings, matching given regex, from the input.
+ The result is a modified copy of the input. It is returned as a sequence
+ or copied to the output iterator.
+
+
+ \param Output An output iterator to which the result will be copied
+ \param Input An input string
+ \param Rx A regular expression
+ \param Flags Regex options
+ \return An output iterator pointing just after the last inserted character or
+ a modified copy of the input
+
+ \note The second variant of this function provides the strong exception-safety guarantee
+ */
+ template<
+ typename OutputIteratorT,
+ typename RangeT,
+ typename CharT,
+ typename RegexTraitsT >
+ inline OutputIteratorT erase_all_regex_copy(
+ OutputIteratorT Output,
+ const RangeT& Input,
+ const basic_regex<CharT, RegexTraitsT>& Rx,
+ match_flag_type Flags=match_default )
+ {
+ return find_format_all_copy(
+ Output,
+ Input,
+ regex_finder( Rx, Flags ),
+ empty_formatter( Input ) );
+ }
+
+ //! Erase all regex algorithm
+ /*!
+ \overload
+ */
+ template<
+ typename SequenceT,
+ typename CharT,
+ typename RegexTraitsT >
+ inline SequenceT erase_all_regex_copy(
+ const SequenceT& Input,
+ const basic_regex<CharT, RegexTraitsT>& Rx,
+ match_flag_type Flags=match_default )
+ {
+ return find_format_all_copy(
+ Input,
+ regex_finder( Rx, Flags ),
+ empty_formatter( Input ) );
+ }
+
+ //! Erase all regex algorithm
+ /*!
+ Erase all substrings, matching given regex, from the input.
+ The input string is modified in-place.
+
+ \param Input An input string
+ \param Rx A regular expression
+ \param Flags Regex options
+ */
+ template<
+ typename SequenceT,
+ typename CharT,
+ typename RegexTraitsT>
+ inline void erase_all_regex(
+ SequenceT& Input,
+ const basic_regex<CharT, RegexTraitsT>& Rx,
+ match_flag_type Flags=match_default )
+ {
+ find_format_all(
+ Input,
+ regex_finder( Rx, Flags ),
+ empty_formatter( Input ) );
+ }
+
+// find_all_regex ------------------------------------------------------------------//
+
+ //! Find all regex algorithm
+ /*!
+ This algorithm finds all substrings matching the give regex
+ in the input.
+
+ Each part is copied and added as a new element to the output container.
+ Thus the result container must be able to hold copies
+ of the matches (in a compatible structure like std::string) or
+ a reference to it (e.g. using the iterator range class).
+ Examples of such a container are \c std::vector<std::string>
+ or \c std::list<boost::iterator_range<std::string::iterator>>
+
+ \param Result A container that can hold copies of references to the substrings.
+ \param Input A container which will be searched.
+ \param Rx A regular expression
+ \param Flags Regex options
+ \return A reference to the result
+
+ \note Prior content of the result will be overwritten.
+
+ \note This function provides the strong exception-safety guarantee
+ */
+ template<
+ typename SequenceSequenceT,
+ typename RangeT,
+ typename CharT,
+ typename RegexTraitsT >
+ inline SequenceSequenceT& find_all_regex(
+ SequenceSequenceT& Result,
+ const RangeT& Input,
+ const basic_regex<CharT, RegexTraitsT>& Rx,
+ match_flag_type Flags=match_default )
+ {
+ return iter_find(
+ Result,
+ Input,
+ regex_finder(Rx,Flags) );
+ }
+
+// split_regex ------------------------------------------------------------------//
+
+ //! Split regex algorithm
+ /*!
+ Tokenize expression. This function is equivalent to C strtok. Input
+ sequence is split into tokens, separated by separators. Separator
+ is an every match of the given regex.
+ Each part is copied and added as a new element to the output container.
+ Thus the result container must be able to hold copies
+ of the matches (in a compatible structure like std::string) or
+ a reference to it (e.g. using the iterator range class).
+ Examples of such a container are \c std::vector<std::string>
+ or \c std::list<boost::iterator_range<std::string::iterator>>
+
+ \param Result A container that can hold copies of references to the substrings.
+ \param Input A container which will be searched.
+ \param Rx A regular expression
+ \param Flags Regex options
+ \return A reference to the result
+
+ \note Prior content of the result will be overwritten.
+
+ \note This function provides the strong exception-safety guarantee
+ */
+ template<
+ typename SequenceSequenceT,
+ typename RangeT,
+ typename CharT,
+ typename RegexTraitsT >
+ inline SequenceSequenceT& split_regex(
+ SequenceSequenceT& Result,
+ const RangeT& Input,
+ const basic_regex<CharT, RegexTraitsT>& Rx,
+ match_flag_type Flags=match_default )
+ {
+ return iter_split(
+ Result,
+ Input,
+ regex_finder(Rx,Flags) );
+ }
+
+// join_if ------------------------------------------------------------------//
+
+#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+ //! Conditional join algorithm
+ /*!
+ This algorithm joins all strings in a 'list' into one long string.
+ Segments are concatenated by given separator. Only segments that
+ match the given regular expression will be added to the result
+
+ This is a specialization of join_if algorithm.
+
+ \param Input A container that holds the input strings. It must be a container-of-containers.
+ \param Separator A string that will separate the joined segments.
+ \param Rx A regular expression
+ \param Flags Regex options
+ \return Concatenated string.
+
+ \note This function provides the strong exception-safety guarantee
+ */
+ template<
+ typename SequenceSequenceT,
+ typename Range1T,
+ typename CharT,
+ typename RegexTraitsT >
+ inline typename range_value<SequenceSequenceT>::type
+ join_if(
+ const SequenceSequenceT& Input,
+ Range1T& Separator,
+ const basic_regex<CharT, RegexTraitsT>& Rx,
+ match_flag_type Flags=match_default )
+ {
+ // Define working types
+ typedef typename range_value<SequenceSequenceT>::type ResultT;
+ typedef typename range_const_iterator<SequenceSequenceT>::type InputIteratorT;
+
+ // Parse input
+ InputIteratorT itBegin=begin(Input);
+ InputIteratorT itEnd=end(Input);
+
+ // Construct container to hold the result
+ ResultT Result;
+
+
+ // Roll to the first element that will be added
+ while(
+ itBegin!=itEnd &&
+ !regex_match(begin(*itBegin), end(*itBegin), Rx, Flags)) ++itBegin;
+
+ // Add this element
+ if(itBegin!=itEnd)
+ {
+ detail::insert(Result, end(Result), *itBegin);
+ ++itBegin;
+ }
+
+ for(;itBegin!=itEnd; ++itBegin)
+ {
+ if(regex_match(begin(*itBegin), end(*itBegin), Rx, Flags))
+ {
+ // Add separator
+ detail::insert(Result, end(Result), Separator);
+ // Add element
+ detail::insert(Result, end(Result), *itBegin);
+ }
+ }
+
+ return Result;
+ }
+
+#else // BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+ //! Conditional join algorithm
+ /*!
+ This algorithm joins all strings in a 'list' into one long string.
+ Segments are concatenated by given separator. Only segments that
+ match the given regular expression will be added to the result
+
+ This is a specialization of join_if algorithm.
+
+ \param Input A container that holds the input strings. It must be a container-of-containers.
+ \param Separator A string that will separate the joined segments.
+ \param Rx A regular expression
+ \param Flags Regex options
+ \return Concatenated string.
+
+ \note This function provides the strong exception-safety guarantee
+ */
+ template<
+ typename SequenceSequenceT,
+ typename Range1T,
+ typename CharT,
+ typename RegexTraitsT >
+ inline typename range_value<SequenceSequenceT>::type
+ join_if_regex(
+ const SequenceSequenceT& Input,
+ Range1T& Separator,
+ const basic_regex<CharT, RegexTraitsT>& Rx,
+ match_flag_type Flags=match_default )
+ {
+ // Define working types
+ typedef typename range_value<SequenceSequenceT>::type ResultT;
+ typedef typename range_const_iterator<SequenceSequenceT>::type InputIteratorT;
+
+ // Parse input
+ InputIteratorT itBegin=begin(Input);
+ InputIteratorT itEnd=end(Input);
+
+ // Construct container to hold the result
+ ResultT Result;
+
+
+ // Roll to the first element that will be added
+ while(
+ itBegin!=itEnd &&
+ !regex_match(begin(*itBegin), end(*itBegin), Rx, Flags)) ++itBegin;
+
+ // Add this element
+ if(itBegin!=itEnd)
+ {
+ detail::insert(Result, end(Result), *itBegin);
+ ++itBegin;
+ }
+
+ for(;itBegin!=itEnd; ++itBegin)
+ {
+ if(regex_match(begin(*itBegin), end(*itBegin), Rx, Flags))
+ {
+ // Add separator
+ detail::insert(Result, end(Result), Separator);
+ // Add element
+ detail::insert(Result, end(Result), *itBegin);
+ }
+ }
+
+ return Result;
+ }
+
+
+#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+ } // namespace algorithm
+
+ // pull names into the boost namespace
+ using algorithm::find_regex;
+ using algorithm::replace_regex;
+ using algorithm::replace_regex_copy;
+ using algorithm::replace_all_regex;
+ using algorithm::replace_all_regex_copy;
+ using algorithm::erase_regex;
+ using algorithm::erase_regex_copy;
+ using algorithm::erase_all_regex;
+ using algorithm::erase_all_regex_copy;
+ using algorithm::find_all_regex;
+ using algorithm::split_regex;
+
+#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+ using algorithm::join_if;
+#else // BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+ using algorithm::join_if_regex;
+#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+
+
+} // namespace boost
+
+
+#endif // BOOST_STRING_REGEX_HPP
diff --git a/boost/boost/algorithm/string/regex_find_format.hpp b/boost/boost/algorithm/string/regex_find_format.hpp
new file mode 100644
index 00000000000..4f289734885
--- /dev/null
+++ b/boost/boost/algorithm/string/regex_find_format.hpp
@@ -0,0 +1,89 @@
+// Boost string_algo library regex_find_format.hpp header file ---------------------------//
+
+// Copyright Pavol Droba 2002-2003. Use, modification and
+// distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_REGEX_FIND_FORMAT_HPP
+#define BOOST_STRING_REGEX_FIND_FORMAT_HPP
+
+#include <boost/algorithm/string/config.hpp>
+#include <boost/regex.hpp>
+#include <boost/algorithm/string/detail/finder_regex.hpp>
+#include <boost/algorithm/string/detail/formatter_regex.hpp>
+
+/*! \file
+ Defines the \c regex_finder and \c regex_formatter generators. These two functors
+ are designed to work together. \c regex_formatter uses additional information
+ about a match contained in the regex_finder search result.
+*/
+
+namespace boost {
+ namespace algorithm {
+
+// regex_finder -----------------------------------------------//
+
+ //! "Regex" finder
+ /*!
+ Construct the \c regex_finder. Finder uses the regex engine to search
+ for a match.
+ Result is given in \c regex_search_result. This is an extension
+ of the iterator_range. In addition it containes match results
+ from the \c regex_search algorithm.
+
+ \param Rx A regular expression
+ \param MatchFlags Regex search options
+ \return An instance of the \c regex_finder object
+ */
+ template<
+ typename CharT,
+ typename RegexTraitsT>
+ inline detail::find_regexF< basic_regex<CharT, RegexTraitsT> >
+ regex_finder(
+ const basic_regex<CharT, RegexTraitsT>& Rx,
+ match_flag_type MatchFlags=match_default )
+ {
+ return detail::
+ find_regexF<
+ basic_regex<CharT, RegexTraitsT> >( Rx, MatchFlags );
+ }
+
+// regex_formater ---------------------------------------------//
+
+ //! Regex formatter
+ /*!
+ Construct the \c regex_formatter. Regex formatter uses the regex engine to
+ format a match found by the \c regex_finder.
+ This formatted it designed to closely cooperate with \c regex_finder.
+
+ \param Format Regex format definition
+ \param Flags Format flags
+ \return An instance of the \c regex_formatter functor
+ */
+ template<
+ typename CharT,
+ typename TraitsT, typename AllocT >
+ inline detail::regex_formatF< std::basic_string< CharT, TraitsT, AllocT > >
+ regex_formatter(
+ const std::basic_string<CharT, TraitsT, AllocT>& Format,
+ match_flag_type Flags=format_default )
+ {
+ return
+ detail::regex_formatF< std::basic_string<CharT, TraitsT, AllocT> >(
+ Format,
+ Flags );
+ }
+
+ } // namespace algorithm
+
+ // pull the names to the boost namespace
+ using algorithm::regex_finder;
+ using algorithm::regex_formatter;
+
+} // namespace boost
+
+
+#endif // BOOST_STRING_REGEX_FIND_FORMAT_HPP
diff --git a/boost/boost/algorithm/string/replace.hpp b/boost/boost/algorithm/string/replace.hpp
new file mode 100644
index 00000000000..8f1a92c7f89
--- /dev/null
+++ b/boost/boost/algorithm/string/replace.hpp
@@ -0,0 +1,927 @@
+// Boost string_algo library replace.hpp header file ---------------------------//
+
+// Copyright Pavol Droba 2002-2006. Use, modification and
+// distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_REPLACE_HPP
+#define BOOST_STRING_REPLACE_HPP
+
+#include <boost/algorithm/string/config.hpp>
+
+#include <boost/range/iterator_range.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/iterator.hpp>
+#include <boost/range/const_iterator.hpp>
+
+#include <boost/algorithm/string/find_format.hpp>
+#include <boost/algorithm/string/finder.hpp>
+#include <boost/algorithm/string/formatter.hpp>
+#include <boost/algorithm/string/compare.hpp>
+
+/*! \file
+ Defines various replace algorithms. Each algorithm replaces
+ part(s) of the input according to set of searching and replace criteria.
+*/
+
+namespace boost {
+ namespace algorithm {
+
+// replace_range --------------------------------------------------------------------//
+
+ //! Replace range algorithm
+ /*!
+ Replace the given range in the input string.
+ The result is a modified copy of the input. It is returned as a sequence
+ or copied to the output iterator.
+
+ \param Output An output iterator to which the result will be copied
+ \param Input An input string
+ \param SearchRange A range in the input to be substituted
+ \param Format A substitute string
+ \return An output iterator pointing just after the last inserted character or
+ a modified copy of the input
+
+ \note The second variant of this function provides the strong exception-safety guarantee
+ */
+ template<
+ typename OutputIteratorT,
+ typename Range1T,
+ typename Range2T>
+ inline OutputIteratorT replace_range_copy(
+ OutputIteratorT Output,
+ const Range1T& Input,
+ const iterator_range<
+ BOOST_STRING_TYPENAME
+ range_const_iterator<Range1T>::type>& SearchRange,
+ const Range2T& Format)
+ {
+ return find_format_copy(
+ Output,
+ Input,
+ range_finder(SearchRange),
+ const_formatter(Format));
+ }
+
+ //! Replace range algorithm
+ /*!
+ \overload
+ */
+ template<typename SequenceT, typename RangeT>
+ inline SequenceT replace_range_copy(
+ const SequenceT& Input,
+ const iterator_range<
+ BOOST_STRING_TYPENAME
+ range_const_iterator<SequenceT>::type>& SearchRange,
+ const RangeT& Format)
+ {
+ return find_format_copy(
+ Input,
+ range_finder(SearchRange),
+ const_formatter(Format));
+ }
+
+ //! Replace range algorithm
+ /*!
+ Replace the given range in the input string.
+ The input sequence is modified in-place.
+
+ \param Input An input string
+ \param SearchRange A range in the input to be substituted
+ \param Format A substitute string
+ */
+ template<typename SequenceT, typename RangeT>
+ inline void replace_range(
+ SequenceT& Input,
+ const iterator_range<
+ BOOST_STRING_TYPENAME
+ range_iterator<SequenceT>::type>& SearchRange,
+ const RangeT& Format)
+ {
+ find_format(
+ Input,
+ range_finder(SearchRange),
+ const_formatter(Format));
+ }
+
+// replace_first --------------------------------------------------------------------//
+
+ //! Replace first algorithm
+ /*!
+ Replace the first match of the search substring in the input
+ with the format string.
+ The result is a modified copy of the input. It is returned as a sequence
+ or copied to the output iterator.
+
+ \param Output An output iterator to which the result will be copied
+ \param Input An input string
+ \param Search A substring to be searched for
+ \param Format A substitute string
+ \return An output iterator pointing just after the last inserted character or
+ a modified copy of the input
+
+ \note The second variant of this function provides the strong exception-safety guarantee
+ */
+ template<
+ typename OutputIteratorT,
+ typename Range1T,
+ typename Range2T,
+ typename Range3T>
+ inline OutputIteratorT replace_first_copy(
+ OutputIteratorT Output,
+ const Range1T& Input,
+ const Range2T& Search,
+ const Range3T& Format)
+ {
+ return find_format_copy(
+ Output,
+ Input,
+ first_finder(Search),
+ const_formatter(Format) );
+ }
+
+ //! Replace first algorithm
+ /*!
+ \overload
+ */
+ template<typename SequenceT, typename Range1T, typename Range2T>
+ inline SequenceT replace_first_copy(
+ const SequenceT& Input,
+ const Range1T& Search,
+ const Range2T& Format )
+ {
+ return find_format_copy(
+ Input,
+ first_finder(Search),
+ const_formatter(Format) );
+ }
+
+ //! Replace first algorithm
+ /*!
+ replace the first match of the search substring in the input
+ with the format string. The input sequence is modified in-place.
+
+ \param Input An input string
+ \param Search A substring to be searched for
+ \param Format A substitute string
+ */
+ template<typename SequenceT, typename Range1T, typename Range2T>
+ inline void replace_first(
+ SequenceT& Input,
+ const Range1T& Search,
+ const Range2T& Format )
+ {
+ find_format(
+ Input,
+ first_finder(Search),
+ const_formatter(Format) );
+ }
+
+// replace_first ( case insensitive ) ---------------------------------------------//
+
+ //! Replace first algorithm ( case insensitive )
+ /*!
+ Replace the first match of the search substring in the input
+ with the format string.
+ The result is a modified copy of the input. It is returned as a sequence
+ or copied to the output iterator.
+ Searching is case insensitive.
+
+ \param Output An output iterator to which the result will be copied
+ \param Input An input string
+ \param Search A substring to be searched for
+ \param Format A substitute string
+ \param Loc A locale used for case insensitive comparison
+ \return An output iterator pointing just after the last inserted character or
+ a modified copy of the input
+
+ \note The second variant of this function provides the strong exception-safety guarantee
+ */
+ template<
+ typename OutputIteratorT,
+ typename Range1T,
+ typename Range2T,
+ typename Range3T>
+ inline OutputIteratorT ireplace_first_copy(
+ OutputIteratorT Output,
+ const Range1T& Input,
+ const Range2T& Search,
+ const Range3T& Format,
+ const std::locale& Loc=std::locale() )
+ {
+ return find_format_copy(
+ Output,
+ Input,
+ first_finder(Search, is_iequal(Loc)),
+ const_formatter(Format) );
+ }
+
+ //! Replace first algorithm ( case insensitive )
+ /*!
+ \overload
+ */
+ template<typename SequenceT, typename Range2T, typename Range1T>
+ inline SequenceT ireplace_first_copy(
+ const SequenceT& Input,
+ const Range2T& Search,
+ const Range1T& Format,
+ const std::locale& Loc=std::locale() )
+ {
+ return find_format_copy(
+ Input,
+ first_finder(Search, is_iequal(Loc)),
+ const_formatter(Format) );
+ }
+
+ //! Replace first algorithm ( case insensitive )
+ /*!
+ Replace the first match of the search substring in the input
+ with the format string. Input sequence is modified in-place.
+ Searching is case insensitive.
+
+ \param Input An input string
+ \param Search A substring to be searched for
+ \param Format A substitute string
+ \param Loc A locale used for case insensitive comparison
+ */
+ template<typename SequenceT, typename Range1T, typename Range2T>
+ inline void ireplace_first(
+ SequenceT& Input,
+ const Range1T& Search,
+ const Range2T& Format,
+ const std::locale& Loc=std::locale() )
+ {
+ find_format(
+ Input,
+ first_finder(Search, is_iequal(Loc)),
+ const_formatter(Format) );
+ }
+
+// replace_last --------------------------------------------------------------------//
+
+ //! Replace last algorithm
+ /*!
+ Replace the last match of the search string in the input
+ with the format string.
+ The result is a modified copy of the input. It is returned as a sequence
+ or copied to the output iterator.
+
+ \param Output An output iterator to which the result will be copied
+ \param Input An input string
+ \param Search A substring to be searched for
+ \param Format A substitute string
+ \return An output iterator pointing just after the last inserted character or
+ a modified copy of the input
+
+ \note The second variant of this function provides the strong exception-safety guarantee
+ */
+ template<
+ typename OutputIteratorT,
+ typename Range1T,
+ typename Range2T,
+ typename Range3T>
+ inline OutputIteratorT replace_last_copy(
+ OutputIteratorT Output,
+ const Range1T& Input,
+ const Range2T& Search,
+ const Range3T& Format )
+ {
+ return find_format_copy(
+ Output,
+ Input,
+ last_finder(Search),
+ const_formatter(Format) );
+ }
+
+ //! Replace last algorithm
+ /*!
+ \overload
+ */
+ template<typename SequenceT, typename Range1T, typename Range2T>
+ inline SequenceT replace_last_copy(
+ const SequenceT& Input,
+ const Range1T& Search,
+ const Range2T& Format )
+ {
+ return find_format_copy(
+ Input,
+ last_finder(Search),
+ const_formatter(Format) );
+ }
+
+ //! Replace last algorithm
+ /*!
+ Replace the last match of the search string in the input
+ with the format string. Input sequence is modified in-place.
+
+ \param Input An input string
+ \param Search A substring to be searched for
+ \param Format A substitute string
+ */
+ template<typename SequenceT, typename Range1T, typename Range2T>
+ inline void replace_last(
+ SequenceT& Input,
+ const Range1T& Search,
+ const Range2T& Format )
+ {
+ find_format(
+ Input,
+ last_finder(Search),
+ const_formatter(Format) );
+ }
+
+// replace_last ( case insensitive ) -----------------------------------------------//
+
+ //! Replace last algorithm ( case insensitive )
+ /*!
+ Replace the last match of the search string in the input
+ with the format string.
+ The result is a modified copy of the input. It is returned as a sequence
+ or copied to the output iterator.
+ Searching is case insensitive.
+
+ \param Output An output iterator to which the result will be copied
+ \param Input An input string
+ \param Search A substring to be searched for
+ \param Format A substitute string
+ \param Loc A locale used for case insensitive comparison
+ \return An output iterator pointing just after the last inserted character or
+ a modified copy of the input
+
+ \note The second variant of this function provides the strong exception-safety guarantee
+ */
+ template<
+ typename OutputIteratorT,
+ typename Range1T,
+ typename Range2T,
+ typename Range3T>
+ inline OutputIteratorT ireplace_last_copy(
+ OutputIteratorT Output,
+ const Range1T& Input,
+ const Range2T& Search,
+ const Range3T& Format,
+ const std::locale& Loc=std::locale() )
+ {
+ return find_format_copy(
+ Output,
+ Input,
+ last_finder(Search, is_iequal(Loc)),
+ const_formatter(Format) );
+ }
+
+ //! Replace last algorithm ( case insensitive )
+ /*!
+ \overload
+ */
+ template<typename SequenceT, typename Range1T, typename Range2T>
+ inline SequenceT ireplace_last_copy(
+ const SequenceT& Input,
+ const Range1T& Search,
+ const Range2T& Format,
+ const std::locale& Loc=std::locale() )
+ {
+ return find_format_copy(
+ Input,
+ last_finder(Search, is_iequal(Loc)),
+ const_formatter(Format) );
+ }
+
+ //! Replace last algorithm ( case insensitive )
+ /*!
+ Replace the last match of the search string in the input
+ with the format string.The input sequence is modified in-place.
+ Searching is case insensitive.
+
+ \param Input An input string
+ \param Search A substring to be searched for
+ \param Format A substitute string
+ \param Loc A locale used for case insensitive comparison
+ \return A reference to the modified input
+ */
+ template<typename SequenceT, typename Range1T, typename Range2T>
+ inline void ireplace_last(
+ SequenceT& Input,
+ const Range1T& Search,
+ const Range2T& Format,
+ const std::locale& Loc=std::locale() )
+ {
+ find_format(
+ Input,
+ last_finder(Search, is_iequal(Loc)),
+ const_formatter(Format) );
+ }
+
+// replace_nth --------------------------------------------------------------------//
+
+ //! Replace nth algorithm
+ /*!
+ Replace an Nth (zero-indexed) match of the search string in the input
+ with the format string.
+ The result is a modified copy of the input. It is returned as a sequence
+ or copied to the output iterator.
+
+ \param Output An output iterator to which the result will be copied
+ \param Input An input string
+ \param Search A substring to be searched for
+ \param Nth An index of the match to be replaced. The index is 0-based.
+ For negative N, matches are counted from the end of string.
+ \param Format A substitute string
+ \return An output iterator pointing just after the last inserted character or
+ a modified copy of the input
+
+ \note The second variant of this function provides the strong exception-safety guarantee
+ */
+ template<
+ typename OutputIteratorT,
+ typename Range1T,
+ typename Range2T,
+ typename Range3T>
+ inline OutputIteratorT replace_nth_copy(
+ OutputIteratorT Output,
+ const Range1T& Input,
+ const Range2T& Search,
+ int Nth,
+ const Range3T& Format )
+ {
+ return find_format_copy(
+ Output,
+ Input,
+ nth_finder(Search, Nth),
+ const_formatter(Format) );
+ }
+
+ //! Replace nth algorithm
+ /*!
+ \overload
+ */
+ template<typename SequenceT, typename Range1T, typename Range2T>
+ inline SequenceT replace_nth_copy(
+ const SequenceT& Input,
+ const Range1T& Search,
+ int Nth,
+ const Range2T& Format )
+ {
+ return find_format_copy(
+ Input,
+ nth_finder(Search, Nth),
+ const_formatter(Format) );
+ }
+
+ //! Replace nth algorithm
+ /*!
+ Replace an Nth (zero-indexed) match of the search string in the input
+ with the format string. Input sequence is modified in-place.
+
+ \param Input An input string
+ \param Search A substring to be searched for
+ \param Nth An index of the match to be replaced. The index is 0-based.
+ For negative N, matches are counted from the end of string.
+ \param Format A substitute string
+ */
+ template<typename SequenceT, typename Range1T, typename Range2T>
+ inline void replace_nth(
+ SequenceT& Input,
+ const Range1T& Search,
+ int Nth,
+ const Range2T& Format )
+ {
+ find_format(
+ Input,
+ nth_finder(Search, Nth),
+ const_formatter(Format) );
+ }
+
+// replace_nth ( case insensitive ) -----------------------------------------------//
+
+ //! Replace nth algorithm ( case insensitive )
+ /*!
+ Replace an Nth (zero-indexed) match of the search string in the input
+ with the format string.
+ The result is a modified copy of the input. It is returned as a sequence
+ or copied to the output iterator.
+ Searching is case insensitive.
+
+ \param Output An output iterator to which the result will be copied
+ \param Input An input string
+ \param Search A substring to be searched for
+ \param Nth An index of the match to be replaced. The index is 0-based.
+ For negative N, matches are counted from the end of string.
+ \param Format A substitute string
+ \param Loc A locale used for case insensitive comparison
+ \return An output iterator pointing just after the last inserted character or
+ a modified copy of the input
+
+ \note The second variant of this function provides the strong exception-safety guarantee
+ */
+ template<
+ typename OutputIteratorT,
+ typename Range1T,
+ typename Range2T,
+ typename Range3T>
+ inline OutputIteratorT ireplace_nth_copy(
+ OutputIteratorT Output,
+ const Range1T& Input,
+ const Range2T& Search,
+ int Nth,
+ const Range3T& Format,
+ const std::locale& Loc=std::locale() )
+ {
+ return find_format_copy(
+ Output,
+ Input,
+ nth_finder(Search, Nth, is_iequal(Loc) ),
+ const_formatter(Format) );
+ }
+
+ //! Replace nth algorithm ( case insensitive )
+ /*!
+ \overload
+ */
+ template<typename SequenceT, typename Range1T, typename Range2T>
+ inline SequenceT ireplace_nth_copy(
+ const SequenceT& Input,
+ const Range1T& Search,
+ int Nth,
+ const Range2T& Format,
+ const std::locale& Loc=std::locale() )
+ {
+ return find_format_copy(
+ Input,
+ nth_finder(Search, Nth, is_iequal(Loc)),
+ const_formatter(Format) );
+ }
+
+ //! Replace nth algorithm ( case insensitive )
+ /*!
+ Replace an Nth (zero-indexed) match of the search string in the input
+ with the format string. Input sequence is modified in-place.
+ Searching is case insensitive.
+
+ \param Input An input string
+ \param Search A substring to be searched for
+ \param Nth An index of the match to be replaced. The index is 0-based.
+ For negative N, matches are counted from the end of string.
+ \param Format A substitute string
+ \param Loc A locale used for case insensitive comparison
+ */
+ template<typename SequenceT, typename Range1T, typename Range2T>
+ inline void ireplace_nth(
+ SequenceT& Input,
+ const Range1T& Search,
+ int Nth,
+ const Range2T& Format,
+ const std::locale& Loc=std::locale() )
+ {
+ find_format(
+ Input,
+ nth_finder(Search, Nth, is_iequal(Loc)),
+ const_formatter(Format) );
+ }
+
+// replace_all --------------------------------------------------------------------//
+
+ //! Replace all algorithm
+ /*!
+ Replace all occurrences of the search string in the input
+ with the format string.
+ The result is a modified copy of the input. It is returned as a sequence
+ or copied to the output iterator.
+
+ \param Output An output iterator to which the result will be copied
+ \param Input An input string
+ \param Search A substring to be searched for
+ \param Format A substitute string
+ \return An output iterator pointing just after the last inserted character or
+ a modified copy of the input
+
+ \note The second variant of this function provides the strong exception-safety guarantee
+ */
+ template<
+ typename OutputIteratorT,
+ typename Range1T,
+ typename Range2T,
+ typename Range3T>
+ inline OutputIteratorT replace_all_copy(
+ OutputIteratorT Output,
+ const Range1T& Input,
+ const Range2T& Search,
+ const Range3T& Format )
+ {
+ return find_format_all_copy(
+ Output,
+ Input,
+ first_finder(Search),
+ const_formatter(Format) );
+ }
+
+ //! Replace all algorithm
+ /*!
+ \overload
+ */
+ template<typename SequenceT, typename Range1T, typename Range2T>
+ inline SequenceT replace_all_copy(
+ const SequenceT& Input,
+ const Range1T& Search,
+ const Range2T& Format )
+ {
+ return find_format_all_copy(
+ Input,
+ first_finder(Search),
+ const_formatter(Format) );
+ }
+
+ //! Replace all algorithm
+ /*!
+ Replace all occurrences of the search string in the input
+ with the format string. The input sequence is modified in-place.
+
+ \param Input An input string
+ \param Search A substring to be searched for
+ \param Format A substitute string
+ \return A reference to the modified input
+ */
+ template<typename SequenceT, typename Range1T, typename Range2T>
+ inline void replace_all(
+ SequenceT& Input,
+ const Range1T& Search,
+ const Range2T& Format )
+ {
+ find_format_all(
+ Input,
+ first_finder(Search),
+ const_formatter(Format) );
+ }
+
+// replace_all ( case insensitive ) -----------------------------------------------//
+
+ //! Replace all algorithm ( case insensitive )
+ /*!
+ Replace all occurrences of the search string in the input
+ with the format string.
+ The result is a modified copy of the input. It is returned as a sequence
+ or copied to the output iterator.
+ Searching is case insensitive.
+
+ \param Output An output iterator to which the result will be copied
+ \param Input An input string
+ \param Search A substring to be searched for
+ \param Format A substitute string
+ \param Loc A locale used for case insensitive comparison
+ \return An output iterator pointing just after the last inserted character or
+ a modified copy of the input
+
+ \note The second variant of this function provides the strong exception-safety guarantee
+ */
+ template<
+ typename OutputIteratorT,
+ typename Range1T,
+ typename Range2T,
+ typename Range3T>
+ inline OutputIteratorT ireplace_all_copy(
+ OutputIteratorT Output,
+ const Range1T& Input,
+ const Range2T& Search,
+ const Range3T& Format,
+ const std::locale& Loc=std::locale() )
+ {
+ return find_format_all_copy(
+ Output,
+ Input,
+ first_finder(Search, is_iequal(Loc)),
+ const_formatter(Format) );
+ }
+
+ //! Replace all algorithm ( case insensitive )
+ /*!
+ \overload
+ */
+ template<typename SequenceT, typename Range1T, typename Range2T>
+ inline SequenceT ireplace_all_copy(
+ const SequenceT& Input,
+ const Range1T& Search,
+ const Range2T& Format,
+ const std::locale& Loc=std::locale() )
+ {
+ return find_format_all_copy(
+ Input,
+ first_finder(Search, is_iequal(Loc)),
+ const_formatter(Format) );
+ }
+
+ //! Replace all algorithm ( case insensitive )
+ /*!
+ Replace all occurrences of the search string in the input
+ with the format string.The input sequence is modified in-place.
+ Searching is case insensitive.
+
+ \param Input An input string
+ \param Search A substring to be searched for
+ \param Format A substitute string
+ \param Loc A locale used for case insensitive comparison
+ */
+ template<typename SequenceT, typename Range1T, typename Range2T>
+ inline void ireplace_all(
+ SequenceT& Input,
+ const Range1T& Search,
+ const Range2T& Format,
+ const std::locale& Loc=std::locale() )
+ {
+ find_format_all(
+ Input,
+ first_finder(Search, is_iequal(Loc)),
+ const_formatter(Format) );
+ }
+
+// replace_head --------------------------------------------------------------------//
+
+ //! Replace head algorithm
+ /*!
+ Replace the head of the input with the given format string.
+ The head is a prefix of a string of given size.
+ If the sequence is shorter then required, whole string if
+ considered to be the head.
+ The result is a modified copy of the input. It is returned as a sequence
+ or copied to the output iterator.
+
+ \param Output An output iterator to which the result will be copied
+ \param Input An input string
+ \param N Length of the head.
+ For N>=0, at most N characters are extracted.
+ For N<0, size(Input)-|N| characters are extracted.
+ \param Format A substitute string
+ \return An output iterator pointing just after the last inserted character or
+ a modified copy of the input
+
+ \note The second variant of this function provides the strong exception-safety guarantee
+ */
+ template<
+ typename OutputIteratorT,
+ typename Range1T,
+ typename Range2T>
+ inline OutputIteratorT replace_head_copy(
+ OutputIteratorT Output,
+ const Range1T& Input,
+ int N,
+ const Range2T& Format )
+ {
+ return find_format_copy(
+ Output,
+ Input,
+ head_finder(N),
+ const_formatter(Format) );
+ }
+
+ //! Replace head algorithm
+ /*!
+ \overload
+ */
+ template<typename SequenceT, typename RangeT>
+ inline SequenceT replace_head_copy(
+ const SequenceT& Input,
+ int N,
+ const RangeT& Format )
+ {
+ return find_format_copy(
+ Input,
+ head_finder(N),
+ const_formatter(Format) );
+ }
+
+ //! Replace head algorithm
+ /*!
+ Replace the head of the input with the given format string.
+ The head is a prefix of a string of given size.
+ If the sequence is shorter then required, the whole string is
+ considered to be the head. The input sequence is modified in-place.
+
+ \param Input An input string
+ \param N Length of the head.
+ For N>=0, at most N characters are extracted.
+ For N<0, size(Input)-|N| characters are extracted.
+ \param Format A substitute string
+ */
+ template<typename SequenceT, typename RangeT>
+ inline void replace_head(
+ SequenceT& Input,
+ int N,
+ const RangeT& Format )
+ {
+ find_format(
+ Input,
+ head_finder(N),
+ const_formatter(Format) );
+ }
+
+// replace_tail --------------------------------------------------------------------//
+
+ //! Replace tail algorithm
+ /*!
+ Replace the tail of the input with the given format string.
+ The tail is a suffix of a string of given size.
+ If the sequence is shorter then required, whole string is
+ considered to be the tail.
+ The result is a modified copy of the input. It is returned as a sequence
+ or copied to the output iterator.
+
+ \param Output An output iterator to which the result will be copied
+ \param Input An input string
+ \param N Length of the tail.
+ For N>=0, at most N characters are extracted.
+ For N<0, size(Input)-|N| characters are extracted.
+ \param Format A substitute string
+ \return An output iterator pointing just after the last inserted character or
+ a modified copy of the input
+
+ \note The second variant of this function provides the strong exception-safety guarantee
+ */
+ template<
+ typename OutputIteratorT,
+ typename Range1T,
+ typename Range2T>
+ inline OutputIteratorT replace_tail_copy(
+ OutputIteratorT Output,
+ const Range1T& Input,
+ int N,
+ const Range2T& Format )
+ {
+ return find_format_copy(
+ Output,
+ Input,
+ tail_finder(N),
+ const_formatter(Format) );
+ }
+
+ //! Replace tail algorithm
+ /*!
+ \overload
+ */
+ template<typename SequenceT, typename RangeT>
+ inline SequenceT replace_tail_copy(
+ const SequenceT& Input,
+ int N,
+ const RangeT& Format )
+ {
+ return find_format_copy(
+ Input,
+ tail_finder(N),
+ const_formatter(Format) );
+ }
+
+ //! Replace tail algorithm
+ /*!
+ Replace the tail of the input with the given format sequence.
+ The tail is a suffix of a string of given size.
+ If the sequence is shorter then required, the whole string is
+ considered to be the tail. The input sequence is modified in-place.
+
+ \param Input An input string
+ \param N Length of the tail.
+ For N>=0, at most N characters are extracted.
+ For N<0, size(Input)-|N| characters are extracted.
+ \param Format A substitute string
+ */
+ template<typename SequenceT, typename RangeT>
+ inline void replace_tail(
+ SequenceT& Input,
+ int N,
+ const RangeT& Format )
+ {
+ find_format(
+ Input,
+ tail_finder(N),
+ const_formatter(Format) );
+ }
+
+ } // namespace algorithm
+
+ // pull names to the boost namespace
+ using algorithm::replace_range_copy;
+ using algorithm::replace_range;
+ using algorithm::replace_first_copy;
+ using algorithm::replace_first;
+ using algorithm::ireplace_first_copy;
+ using algorithm::ireplace_first;
+ using algorithm::replace_last_copy;
+ using algorithm::replace_last;
+ using algorithm::ireplace_last_copy;
+ using algorithm::ireplace_last;
+ using algorithm::replace_nth_copy;
+ using algorithm::replace_nth;
+ using algorithm::ireplace_nth_copy;
+ using algorithm::ireplace_nth;
+ using algorithm::replace_all_copy;
+ using algorithm::replace_all;
+ using algorithm::ireplace_all_copy;
+ using algorithm::ireplace_all;
+ using algorithm::replace_head_copy;
+ using algorithm::replace_head;
+ using algorithm::replace_tail_copy;
+ using algorithm::replace_tail;
+
+} // namespace boost
+
+#endif // BOOST_REPLACE_HPP
diff --git a/boost/boost/algorithm/string/sequence_traits.hpp b/boost/boost/algorithm/string/sequence_traits.hpp
new file mode 100644
index 00000000000..e53f656214c
--- /dev/null
+++ b/boost/boost/algorithm/string/sequence_traits.hpp
@@ -0,0 +1,192 @@
+// Boost string_algo library sequence_traits.hpp header file ---------------------------//
+
+// Copyright Pavol Droba 2002-2003. Use, modification and
+// distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_SEQUENCE_TRAITS_HPP
+#define BOOST_STRING_SEQUENCE_TRAITS_HPP
+
+#include <boost/config.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/algorithm/string/yes_no_type.hpp>
+
+/*! \file
+ Traits defined in this header are used by various algorithms to achieve
+ better performance for specific containers.
+ Traits provide fail-safe defaults. If a container supports some of these
+ features, it is possible to specialize the specific trait for this container.
+ For lacking compilers, it is possible of define an override for a specific tester
+ function.
+
+ Due to a language restriction, it is not currently possible to define specializations for
+ stl containers without including the corresponding header. To decrease the overhead
+ needed by this inclusion, user can selectively include a specialization
+ header for a specific container. They are located in boost/algorithm/string/stl
+ directory. Alternatively she can include boost/algorithm/string/std_collection_traits.hpp
+ header which contains specializations for all stl containers.
+*/
+
+namespace boost {
+ namespace algorithm {
+
+// sequence traits -----------------------------------------------//
+
+#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+ //! Native replace tester
+ /*!
+ Declare an override of this tester function with return
+ type boost::string_algo::yes_type for a sequence with this property.
+
+ \return yes_type if the container has basic_string like native replace
+ method.
+ */
+ no_type has_native_replace_tester(...);
+
+ //! Stable iterators tester
+ /*!
+ Declare an override of this tester function with return
+ type boost::string_algo::yes_type for a sequence with this property.
+
+ \return yes_type if the sequence's insert/replace/erase methods do not invalidate
+ existing iterators.
+ */
+ no_type has_stable_iterators_tester(...);
+
+ //! const time insert tester
+ /*!
+ Declare an override of this tester function with return
+ type boost::string_algo::yes_type for a sequence with this property.
+
+ \return yes_type if the sequence's insert method is working in constant time
+ */
+ no_type has_const_time_insert_tester(...);
+
+ //! const time erase tester
+ /*!
+ Declare an override of this tester function with return
+ type boost::string_algo::yes_type for a sequence with this property.
+
+ \return yes_type if the sequence's erase method is working in constant time
+ */
+ no_type has_const_time_erase_tester(...);
+
+#endif //BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+ //! Native replace trait
+ /*!
+ This trait specifies that the sequence has \c std::string like replace method
+ */
+ template< typename T >
+ class has_native_replace
+ {
+
+#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ private:
+ static T* t;
+ public:
+ BOOST_STATIC_CONSTANT(bool, value=(
+ sizeof(has_native_replace_tester(t))==sizeof(yes_type) ) );
+#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ public:
+# if BOOST_WORKAROUND( __IBMCPP__, <= 600 )
+ enum { value = false };
+# else
+ BOOST_STATIC_CONSTANT(bool, value=false);
+# endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 )
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+
+ typedef mpl::bool_<has_native_replace<T>::value> type;
+ };
+
+
+ //! Stable iterators trait
+ /*!
+ This trait specifies that the sequence has stable iterators. It means
+ that operations like insert/erase/replace do not invalidate iterators.
+ */
+ template< typename T >
+ class has_stable_iterators
+ {
+#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ private:
+ static T* t;
+ public:
+ BOOST_STATIC_CONSTANT(bool, value=(
+ sizeof(has_stable_iterators_tester(t))==sizeof(yes_type) ) );
+#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ public:
+# if BOOST_WORKAROUND( __IBMCPP__, <= 600 )
+ enum { value = false };
+# else
+ BOOST_STATIC_CONSTANT(bool, value=false);
+# endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 )
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+ typedef mpl::bool_<has_stable_iterators<T>::value> type;
+ };
+
+
+ //! Const time insert trait
+ /*!
+ This trait specifies that the sequence's insert method has
+ constant time complexity.
+ */
+ template< typename T >
+ class has_const_time_insert
+ {
+#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ private:
+ static T* t;
+ public:
+ BOOST_STATIC_CONSTANT(bool, value=(
+ sizeof(has_const_time_insert_tester(t))==sizeof(yes_type) ) );
+#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ public:
+# if BOOST_WORKAROUND( __IBMCPP__, <= 600 )
+ enum { value = false };
+# else
+ BOOST_STATIC_CONSTANT(bool, value=false);
+# endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 )
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+ typedef mpl::bool_<has_const_time_insert<T>::value> type;
+ };
+
+
+ //! Const time erase trait
+ /*!
+ This trait specifies that the sequence's erase method has
+ constant time complexity.
+ */
+ template< typename T >
+ class has_const_time_erase
+ {
+#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ private:
+ static T* t;
+ public:
+ BOOST_STATIC_CONSTANT(bool, value=(
+ sizeof(has_const_time_erase_tester(t))==sizeof(yes_type) ) );
+#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ public:
+# if BOOST_WORKAROUND( __IBMCPP__, <= 600 )
+ enum { value = false };
+# else
+ BOOST_STATIC_CONSTANT(bool, value=false);
+# endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 )
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+ typedef mpl::bool_<has_const_time_erase<T>::value> type;
+ };
+
+ } // namespace algorithm
+} // namespace boost
+
+
+#endif // BOOST_STRING_SEQUENCE_TRAITS_HPP
diff --git a/boost/boost/algorithm/string/split.hpp b/boost/boost/algorithm/string/split.hpp
new file mode 100644
index 00000000000..71bf43f827d
--- /dev/null
+++ b/boost/boost/algorithm/string/split.hpp
@@ -0,0 +1,162 @@
+// Boost string_algo library split.hpp header file ---------------------------//
+
+// Copyright Pavol Droba 2002-2006. Use, modification and
+// distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_SPLIT_HPP
+#define BOOST_STRING_SPLIT_HPP
+
+#include <boost/algorithm/string/config.hpp>
+
+#include <boost/algorithm/string/iter_find.hpp>
+#include <boost/algorithm/string/finder.hpp>
+#include <boost/algorithm/string/compare.hpp>
+
+/*! \file
+ Defines basic split algorithms.
+ Split algorithms can be used to divide a string
+ into several parts according to given criteria.
+
+ Each part is copied and added as a new element to the
+ output container.
+ Thus the result container must be able to hold copies
+ of the matches (in a compatible structure like std::string) or
+ a reference to it (e.g. using the iterator range class).
+ Examples of such a container are \c std::vector<std::string>
+ or \c std::list<boost::iterator_range<std::string::iterator>>
+*/
+
+namespace boost {
+ namespace algorithm {
+
+// find_all ------------------------------------------------------------//
+
+ //! Find all algorithm
+ /*!
+ This algorithm finds all occurrences of the search string
+ in the input.
+
+ Each part is copied and added as a new element to the
+ output container.
+ Thus the result container must be able to hold copies
+ of the matches (in a compatible structure like std::string) or
+ a reference to it (e.g. using the iterator range class).
+ Examples of such a container are \c std::vector<std::string>
+ or \c std::list<boost::iterator_range<std::string::iterator>>
+
+ \param Result A container that can hold copies of references to the substrings
+ \param Input A container which will be searched.
+ \param Search A substring to be searched for.
+ \return A reference the result
+
+ \note Prior content of the result will be overwritten.
+
+ \note This function provides the strong exception-safety guarantee
+ */
+ template< typename SequenceSequenceT, typename Range1T, typename Range2T >
+ inline SequenceSequenceT& find_all(
+ SequenceSequenceT& Result,
+ Range1T& Input,
+ const Range2T& Search)
+ {
+ return iter_find(
+ Result,
+ Input,
+ first_finder(Search) );
+ }
+
+ //! Find all algorithm ( case insensitive )
+ /*!
+ This algorithm finds all occurrences of the search string
+ in the input.
+ Each part is copied and added as a new element to the
+ output container. Thus the result container must be able to hold copies
+ of the matches (in a compatible structure like std::string) or
+ a reference to it (e.g. using the iterator range class).
+ Examples of such a container are \c std::vector<std::string>
+ or \c std::list<boost::iterator_range<std::string::iterator>>
+
+ Searching is case insensitive.
+
+ \param Result A container that can hold copies of references to the substrings
+ \param Input A container which will be searched.
+ \param Search A substring to be searched for.
+ \param Loc A locale used for case insensitive comparison
+ \return A reference the result
+
+ \note Prior content of the result will be overwritten.
+
+ \note This function provides the strong exception-safety guarantee
+ */
+ template< typename SequenceSequenceT, typename Range1T, typename Range2T >
+ inline SequenceSequenceT& ifind_all(
+ SequenceSequenceT& Result,
+ Range1T& Input,
+ const Range2T& Search,
+ const std::locale& Loc=std::locale() )
+ {
+ return iter_find(
+ Result,
+ Input,
+ first_finder(Search, is_iequal(Loc) ) );
+ }
+
+
+// tokenize -------------------------------------------------------------//
+
+ //! Split algorithm
+ /*!
+ Tokenize expression. This function is equivalent to C strtok. Input
+ sequence is split into tokens, separated by separators. Separators
+ are given by means of the predicate.
+
+ Each part is copied and added as a new element to the
+ output container.
+ Thus the result container must be able to hold copies
+ of the matches (in a compatible structure like std::string) or
+ a reference to it (e.g. using the iterator range class).
+ Examples of such a container are \c std::vector<std::string>
+ or \c std::list<boost::iterator_range<std::string::iterator>>
+
+ \param Result A container that can hold copies of references to the substrings
+ \param Input A container which will be searched.
+ \param Pred A predicate to identify separators. This predicate is
+ supposed to return true if a given element is a separator.
+ \param eCompress If eCompress argument is set to token_compress_on, adjacent
+ separators are merged together. Otherwise, every two separators
+ delimit a token.
+ \return A reference the result
+
+ \note Prior content of the result will be overwritten.
+
+ \note This function provides the strong exception-safety guarantee
+ */
+ template< typename SequenceSequenceT, typename RangeT, typename PredicateT >
+ inline SequenceSequenceT& split(
+ SequenceSequenceT& Result,
+ RangeT& Input,
+ PredicateT Pred,
+ token_compress_mode_type eCompress=token_compress_off )
+ {
+ return iter_split(
+ Result,
+ Input,
+ token_finder( Pred, eCompress ) );
+ }
+
+ } // namespace algorithm
+
+ // pull names to the boost namespace
+ using algorithm::find_all;
+ using algorithm::ifind_all;
+ using algorithm::split;
+
+} // namespace boost
+
+
+#endif // BOOST_STRING_SPLIT_HPP
+
diff --git a/boost/boost/algorithm/string/std/list_traits.hpp b/boost/boost/algorithm/string/std/list_traits.hpp
new file mode 100644
index 00000000000..e58a66a6300
--- /dev/null
+++ b/boost/boost/algorithm/string/std/list_traits.hpp
@@ -0,0 +1,84 @@
+// Boost string_algo library list_traits.hpp header file ---------------------------//
+
+// Copyright Pavol Droba 2002-2003. Use, modification and
+// distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_STD_LIST_TRAITS_HPP
+#define BOOST_STRING_STD_LIST_TRAITS_HPP
+
+#include <boost/algorithm/string/yes_no_type.hpp>
+#include <list>
+#include <boost/algorithm/string/sequence_traits.hpp>
+
+namespace boost {
+ namespace algorithm {
+
+// std::list<> traits -----------------------------------------------//
+
+#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+ // stable iterators tester
+ template<typename T, typename AllocT>
+ yes_type has_stable_iterators_tester( const ::std::list<T,AllocT>* );
+
+ // const time insert tester
+ template<typename T, typename AllocT>
+ yes_type has_const_time_insert_tester( const ::std::list<T,AllocT>* );
+
+ // const time erase tester
+ template<typename T, typename AllocT>
+ yes_type has_const_time_erase_tester( const ::std::list<T,AllocT>* );
+
+
+#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+ // stable iterators trait
+ template<typename T, typename AllocT>
+ class has_stable_iterators< ::std::list<T,AllocT> >
+ {
+ public:
+#if BOOST_WORKAROUND( __IBMCPP__, <= 600 )
+ enum { value = true };
+#else
+ BOOST_STATIC_CONSTANT(bool, value=true);
+#endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 )
+ typedef mpl::bool_<has_stable_iterators<T>::value> type;
+ };
+
+ // const time insert trait
+ template<typename T, typename AllocT>
+ class has_const_time_insert< ::std::list<T,AllocT> >
+ {
+ public:
+#if BOOST_WORKAROUND( __IBMCPP__, <= 600 )
+ enum { value = true };
+#else
+ BOOST_STATIC_CONSTANT(bool, value=true);
+#endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 )
+ typedef mpl::bool_<has_const_time_insert<T>::value> type;
+ };
+
+ // const time erase trait
+ template<typename T, typename AllocT>
+ class has_const_time_erase< ::std::list<T,AllocT> >
+ {
+ public:
+#if BOOST_WORKAROUND( __IBMCPP__, <= 600 )
+ enum { value = true };
+#else
+ BOOST_STATIC_CONSTANT(bool, value=true);
+#endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 )
+ typedef mpl::bool_<has_const_time_erase<T>::value> type;
+ };
+#endif
+
+
+ } // namespace algorithm
+} // namespace boost
+
+
+#endif // BOOST_STRING_STD_LIST_TRAITS_HPP
diff --git a/boost/boost/algorithm/string/std/rope_traits.hpp b/boost/boost/algorithm/string/std/rope_traits.hpp
new file mode 100644
index 00000000000..98f3451ab4a
--- /dev/null
+++ b/boost/boost/algorithm/string/std/rope_traits.hpp
@@ -0,0 +1,100 @@
+// Boost string_algo library string_traits.hpp header file ---------------------------//
+
+// Copyright Pavol Droba 2002-2003. Use, modification and
+// distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_STD_ROPE_TRAITS_HPP
+#define BOOST_STRING_STD_ROPE_TRAITS_HPP
+
+#include <boost/algorithm/string/yes_no_type.hpp>
+#include <rope>
+#include <boost/algorithm/string/sequence_traits.hpp>
+
+namespace boost {
+ namespace algorithm {
+
+// SGI's std::rope<> traits -----------------------------------------------//
+
+#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+ // native replace tester
+ template<typename T, typename TraitsT, typename AllocT>
+ yes_type has_native_replace_tester( const std::rope<T, TraitsT, AllocT>* );
+
+ // stable iterators tester
+ template<typename T, typename TraitsT, typename AllocT>
+ yes_type has_stable_iterators_tester( const std::rope<T, TraitsT, AllocT>* );
+
+ // const time insert tester
+ template<typename T, typename TraitsT, typename AllocT>
+ yes_type has_const_time_insert_tester( const std::rope<T, TraitsT, AllocT>* );
+
+ // const time erase tester
+ template<typename T, typename TraitsT, typename AllocT>
+ yes_type has_const_time_erase_tester( const std::rope<T, TraitsT, AllocT>* );
+
+#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+ // native replace trait
+ template<typename T, typename TraitsT, typename AllocT>
+ class has_native_replace< std::rope<T,TraitsT,AllocT> >
+ {
+ public:
+#if BOOST_WORKAROUND( __IBMCPP__, <= 600 )
+ enum { value = true };
+#else
+ BOOST_STATIC_CONSTANT(bool, value=true);
+#endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 )
+ typedef mpl::bool_<value> type;
+ };
+
+ // stable iterators trait
+ template<typename T, typename TraitsT, typename AllocT>
+ class has_stable_iterators< std::rope<T,TraitsT,AllocT> >
+ {
+ public:
+#if BOOST_WORKAROUND( __IBMCPP__, <= 600 )
+ enum { value = true };
+#else
+ BOOST_STATIC_CONSTANT(bool, value=true);
+#endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 )
+ typedef mpl::bool_<value> type;
+ };
+
+ // const time insert trait
+ template<typename T, typename TraitsT, typename AllocT>
+ class has_const_time_insert< std::rope<T,TraitsT,AllocT> >
+ {
+ public:
+#if BOOST_WORKAROUND( __IBMCPP__, <= 600 )
+ enum { value = true };
+#else
+ BOOST_STATIC_CONSTANT(bool, value=true);
+#endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 )
+ typedef mpl::bool_<value> type;
+ };
+
+ // const time erase trait
+ template<typename T, typename TraitsT, typename AllocT>
+ class has_const_time_erase< std::rope<T,TraitsT,AllocT> >
+ {
+ public:
+#if BOOST_WORKAROUND( __IBMCPP__, <= 600 )
+ enum { value = true };
+#else
+ BOOST_STATIC_CONSTANT(bool, value=true);
+#endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 )
+ typedef mpl::bool_<value> type;
+ };
+#endif
+
+
+ } // namespace algorithm
+} // namespace boost
+
+
+#endif // BOOST_STRING_ROPE_TRAITS_HPP
diff --git a/boost/boost/algorithm/string/std/slist_traits.hpp b/boost/boost/algorithm/string/std/slist_traits.hpp
new file mode 100644
index 00000000000..d05c7295ec4
--- /dev/null
+++ b/boost/boost/algorithm/string/std/slist_traits.hpp
@@ -0,0 +1,84 @@
+// Boost string_algo library slist_traits.hpp header file ---------------------------//
+
+// Copyright Pavol Droba 2002-2003. Use, modification and
+// distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_STD_SLIST_TRAITS_HPP
+#define BOOST_STRING_STD_SLIST_TRAITS_HPP
+
+#include <boost/algorithm/string/config.hpp>
+#include <boost/algorithm/string/yes_no_type.hpp>
+#include BOOST_SLIST_HEADER
+#include <boost/algorithm/string/sequence_traits.hpp>
+
+namespace boost {
+ namespace algorithm {
+
+// SGI's std::slist<> traits -----------------------------------------------//
+
+#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+ // stable iterators tester
+ template<typename T, typename AllocT>
+ yes_type has_stable_iterators_tester( const BOOST_STD_EXTENSION_NAMESPACE::slist<T,AllocT>* );
+
+ // const time insert tester
+ template<typename T, typename AllocT>
+ yes_type has_const_time_insert_tester( const BOOST_STD_EXTENSION_NAMESPACE::slist<T,AllocT>* );
+
+ // const time erase tester
+ template<typename T, typename AllocT>
+ yes_type has_const_time_erase_tester( const BOOST_STD_EXTENSION_NAMESPACE::slist<T,AllocT>* );
+
+#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+ // stable iterators trait
+ template<typename T, typename AllocT>
+ class has_stable_iterators< BOOST_STD_EXTENSION_NAMESPACE::slist<T,AllocT> >
+ {
+ public:
+#if BOOST_WORKAROUND( __IBMCPP__, <= 600 )
+ enum { value = true };
+#else
+ BOOST_STATIC_CONSTANT(bool, value=true);
+#endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 )
+ typedef mpl::bool_<has_stable_iterators<T>::value> type;
+ };
+
+ // const time insert trait
+ template<typename T, typename AllocT>
+ class has_const_time_insert< BOOST_STD_EXTENSION_NAMESPACE::slist<T,AllocT> >
+ {
+ public:
+#if BOOST_WORKAROUND( __IBMCPP__, <= 600 )
+ enum { value = true };
+#else
+ BOOST_STATIC_CONSTANT(bool, value=true);
+#endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 )
+ typedef mpl::bool_<has_const_time_insert<T>::value> type;
+ };
+
+ // const time erase trait
+ template<typename T, typename AllocT>
+ class has_const_time_erase< BOOST_STD_EXTENSION_NAMESPACE::slist<T,AllocT> >
+ {
+ public:
+#if BOOST_WORKAROUND( __IBMCPP__, <= 600 )
+ enum { value = true };
+#else
+ BOOST_STATIC_CONSTANT(bool, value=true);
+#endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 )
+ typedef mpl::bool_<has_const_time_erase<T>::value> type;
+ };
+#endif
+
+
+ } // namespace algorithm
+} // namespace boost
+
+
+#endif // BOOST_STRING_STD_LIST_TRAITS_HPP
diff --git a/boost/boost/algorithm/string/std/string_traits.hpp b/boost/boost/algorithm/string/std/string_traits.hpp
new file mode 100644
index 00000000000..d603a4a680c
--- /dev/null
+++ b/boost/boost/algorithm/string/std/string_traits.hpp
@@ -0,0 +1,51 @@
+// Boost string_algo library string_traits.hpp header file ---------------------------//
+
+// Copyright Pavol Droba 2002-2003. Use, modification and
+// distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_STD_STRING_TRAITS_HPP
+#define BOOST_STRING_STD_STRING_TRAITS_HPP
+
+#include <boost/algorithm/string/yes_no_type.hpp>
+#include <string>
+#include <boost/algorithm/string/sequence_traits.hpp>
+
+namespace boost {
+ namespace algorithm {
+
+// std::basic_string<> traits -----------------------------------------------//
+
+#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+ // native replace tester
+ template<typename T, typename TraitsT, typename AllocT>
+ yes_type has_native_replace_tester( const std::basic_string<T, TraitsT, AllocT>* );
+
+#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+ // native replace trait
+ template<typename T, typename TraitsT, typename AllocT>
+ class has_native_replace< std::basic_string<T, TraitsT, AllocT> >
+ {
+ public:
+#if BOOST_WORKAROUND( __IBMCPP__, <= 600 )
+ enum { value = true } ;
+#else
+ BOOST_STATIC_CONSTANT(bool, value=true);
+#endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 )
+
+ typedef mpl::bool_<has_native_replace<T>::value> type;
+ };
+
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+ } // namespace algorithm
+} // namespace boost
+
+
+#endif // BOOST_STRING_LIST_TRAITS_HPP
diff --git a/boost/boost/algorithm/string/std_containers_traits.hpp b/boost/boost/algorithm/string/std_containers_traits.hpp
new file mode 100644
index 00000000000..ab0cf3f1040
--- /dev/null
+++ b/boost/boost/algorithm/string/std_containers_traits.hpp
@@ -0,0 +1,25 @@
+// Boost string_algo library std_containers_traits.hpp header file ---------------------------//
+
+// Copyright Pavol Droba 2002-2003. Use, modification and
+// distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_STD_CONTAINERS_TRAITS_HPP
+#define BOOST_STRING_STD_CONTAINERS_TRAITS_HPP
+
+/*!\file
+ This file includes sequence traits for stl containers.
+*/
+
+#include <boost/config.hpp>
+#include <boost/algorithm/string/std/string_traits.hpp>
+#include <boost/algorithm/string/std/list_traits.hpp>
+
+#ifdef BOOST_HAS_SLIST
+# include <boost/algorithm/string/std/slist_traits.hpp>
+#endif
+
+#endif // BOOST_STRING_STD_CONTAINERS_TRAITS_HPP
diff --git a/boost/boost/algorithm/string/trim.hpp b/boost/boost/algorithm/string/trim.hpp
new file mode 100644
index 00000000000..6a3425ba0c3
--- /dev/null
+++ b/boost/boost/algorithm/string/trim.hpp
@@ -0,0 +1,389 @@
+// Boost string_algo library trim.hpp header file ---------------------------//
+
+// Copyright Pavol Droba 2002-2003. Use, modification and
+// distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_TRIM_HPP
+#define BOOST_STRING_TRIM_HPP
+
+#include <boost/algorithm/string/config.hpp>
+
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/const_iterator.hpp>
+
+#include <boost/algorithm/string/detail/trim.hpp>
+#include <boost/algorithm/string/classification.hpp>
+#include <locale>
+
+/*! \file
+ Defines trim algorithms.
+ Trim algorithms are used to remove trailing and leading spaces from a
+ sequence (string). Space is recognized using given locales.
+
+ Parametric (\c _if) variants use a predicate (functor) to select which characters
+ are to be trimmed..
+ Functions take a selection predicate as a parameter, which is used to determine
+ whether a character is a space. Common predicates are provided in classification.hpp header.
+
+*/
+
+namespace boost {
+ namespace algorithm {
+
+ // left trim -----------------------------------------------//
+
+
+ //! Left trim - parametric
+ /*!
+ Remove all leading spaces from the input.
+ The supplied predicate is used to determine which characters are considered spaces.
+ The result is a trimmed copy of the input. It is returned as a sequence
+ or copied to the output iterator
+
+ \param Output An output iterator to which the result will be copied
+ \param Input An input range
+ \param IsSpace An unary predicate identifying spaces
+ \return
+ An output iterator pointing just after the last inserted character or
+ a copy of the input
+
+ \note The second variant of this function provides the strong exception-safety guarantee
+ */
+ template<typename OutputIteratorT, typename RangeT, typename PredicateT>
+ inline OutputIteratorT trim_left_copy_if(
+ OutputIteratorT Output,
+ const RangeT& Input,
+ PredicateT IsSpace)
+ {
+ std::copy(
+ ::boost::algorithm::detail::trim_begin(
+ begin(Input),
+ end(Input),
+ IsSpace ),
+ end(Input),
+ Output);
+
+ return Output;
+ }
+
+ //! Left trim - parametric
+ /*!
+ \overload
+ */
+ template<typename SequenceT, typename PredicateT>
+ inline SequenceT trim_left_copy_if(const SequenceT& Input, PredicateT IsSpace)
+ {
+ return SequenceT(
+ ::boost::algorithm::detail::trim_begin(
+ begin(Input),
+ end(Input),
+ IsSpace ),
+ end(Input));
+ }
+
+ //! Left trim - parametric
+ /*!
+ Remove all leading spaces from the input.
+ The result is a trimmed copy of the input.
+
+ \param Input An input sequence
+ \param Loc a locale used for 'space' classification
+ \return A trimmed copy of the input
+
+ \note This function provides the strong exception-safety guarantee
+ */
+ template<typename SequenceT>
+ inline SequenceT trim_left_copy(const SequenceT& Input, const std::locale& Loc=std::locale())
+ {
+ return
+ trim_left_copy_if(
+ Input,
+ is_space(Loc));
+ }
+
+ //! Left trim
+ /*!
+ Remove all leading spaces from the input. The supplied predicate is
+ used to determine which characters are considered spaces.
+ The input sequence is modified in-place.
+
+ \param Input An input sequence
+ \param IsSpace An unary predicate identifying spaces
+ */
+ template<typename SequenceT, typename PredicateT>
+ inline void trim_left_if(SequenceT& Input, PredicateT IsSpace)
+ {
+ Input.erase(
+ begin(Input),
+ ::boost::algorithm::detail::trim_begin(
+ begin(Input),
+ end(Input),
+ IsSpace));
+ }
+
+ //! Left trim
+ /*!
+ Remove all leading spaces from the input.
+ The Input sequence is modified in-place.
+
+ \param Input An input sequence
+ \param Loc A locale used for 'space' classification
+ */
+ template<typename SequenceT>
+ inline void trim_left(SequenceT& Input, const std::locale& Loc=std::locale())
+ {
+ trim_left_if(
+ Input,
+ is_space(Loc));
+ }
+
+ // right trim -----------------------------------------------//
+
+ //! Right trim - parametric
+ /*!
+ Remove all trailing spaces from the input.
+ The supplied predicate is used to determine which characters are considered spaces.
+ The result is a trimmed copy of the input. It is returned as a sequence
+ or copied to the output iterator
+
+ \param Output An output iterator to which the result will be copied
+ \param Input An input range
+ \param IsSpace An unary predicate identifying spaces
+ \return
+ An output iterator pointing just after the last inserted character or
+ a copy of the input
+
+ \note The second variant of this function provides the strong exception-safety guarantee
+ */
+ template<typename OutputIteratorT, typename RangeT, typename PredicateT>
+ inline OutputIteratorT trim_right_copy_if(
+ OutputIteratorT Output,
+ const RangeT& Input,
+ PredicateT IsSpace )
+ {
+ std::copy(
+ begin(Input),
+ ::boost::algorithm::detail::trim_end(
+ begin(Input),
+ end(Input),
+ IsSpace ),
+ Output );
+
+ return Output;
+ }
+
+ //! Right trim - parametric
+ /*!
+ \overload
+ */
+ template<typename SequenceT, typename PredicateT>
+ inline SequenceT trim_right_copy_if(const SequenceT& Input, PredicateT IsSpace)
+ {
+ return SequenceT(
+ begin(Input),
+ ::boost::algorithm::detail::trim_end(
+ begin(Input),
+ end(Input),
+ IsSpace)
+ );
+ }
+
+ //! Right trim
+ /*!
+ Remove all trailing spaces from the input.
+ The result is a trimmed copy of the input
+
+ \param Input An input sequence
+ \param Loc A locale used for 'space' classification
+ \return A trimmed copy of the input
+
+ \note This function provides the strong exception-safety guarantee
+ */
+ template<typename SequenceT>
+ inline SequenceT trim_right_copy(const SequenceT& Input, const std::locale& Loc=std::locale())
+ {
+ return
+ trim_right_copy_if(
+ Input,
+ is_space(Loc));
+ }
+
+
+ //! Right trim - parametric
+ /*!
+ Remove all trailing spaces from the input.
+ The supplied predicate is used to determine which characters are considered spaces.
+ The input sequence is modified in-place.
+
+ \param Input An input sequence
+ \param IsSpace An unary predicate identifying spaces
+ */
+ template<typename SequenceT, typename PredicateT>
+ inline void trim_right_if(SequenceT& Input, PredicateT IsSpace)
+ {
+ Input.erase(
+ ::boost::algorithm::detail::trim_end(
+ begin(Input),
+ end(Input),
+ IsSpace ),
+ end(Input)
+ );
+ }
+
+
+ //! Right trim
+ /*!
+ Remove all trailing spaces from the input.
+ The input sequence is modified in-place.
+
+ \param Input An input sequence
+ \param Loc A locale used for 'space' classification
+ */
+ template<typename SequenceT>
+ inline void trim_right(SequenceT& Input, const std::locale& Loc=std::locale())
+ {
+ trim_right_if(
+ Input,
+ is_space(Loc) );
+ }
+
+ // both side trim -----------------------------------------------//
+
+ //! Trim - parametric
+ /*!
+ Remove all trailing and leading spaces from the input.
+ The supplied predicate is used to determine which characters are considered spaces.
+ The result is a trimmed copy of the input. It is returned as a sequence
+ or copied to the output iterator
+
+ \param Output An output iterator to which the result will be copied
+ \param Input An input range
+ \param IsSpace An unary predicate identifying spaces
+ \return
+ An output iterator pointing just after the last inserted character or
+ a copy of the input
+
+ \note The second variant of this function provides the strong exception-safety guarantee
+ */
+ template<typename OutputIteratorT, typename RangeT, typename PredicateT>
+ inline OutputIteratorT trim_copy_if(
+ OutputIteratorT Output,
+ const RangeT& Input,
+ PredicateT IsSpace)
+ {
+ BOOST_STRING_TYPENAME
+ range_const_iterator<RangeT>::type TrimEnd=
+ ::boost::algorithm::detail::trim_end(
+ begin(Input),
+ end(Input),
+ IsSpace);
+
+ std::copy(
+ detail::trim_begin(
+ begin(Input), TrimEnd, IsSpace),
+ TrimEnd,
+ Output
+ );
+
+ return Output;
+ }
+
+ //! Trim - parametric
+ /*!
+ \overload
+ */
+ template<typename SequenceT, typename PredicateT>
+ inline SequenceT trim_copy_if(const SequenceT& Input, PredicateT IsSpace)
+ {
+ BOOST_STRING_TYPENAME
+ range_const_iterator<SequenceT>::type TrimEnd=
+ ::boost::algorithm::detail::trim_end(
+ begin(Input),
+ end(Input),
+ IsSpace);
+
+ return SequenceT(
+ detail::trim_begin(
+ begin(Input),
+ TrimEnd,
+ IsSpace),
+ TrimEnd
+ );
+ }
+
+ //! Trim
+ /*!
+ Remove all leading and trailing spaces from the input.
+ The result is a trimmed copy of the input
+
+ \param Input An input sequence
+ \param Loc A locale used for 'space' classification
+ \return A trimmed copy of the input
+
+ \note This function provides the strong exception-safety guarantee
+ */
+ template<typename SequenceT>
+ inline SequenceT trim_copy( const SequenceT& Input, const std::locale& Loc=std::locale() )
+ {
+ return
+ trim_copy_if(
+ Input,
+ is_space(Loc) );
+ }
+
+ //! Trim
+ /*!
+ Remove all leading and trailing spaces from the input.
+ The supplied predicate is used to determine which characters are considered spaces.
+ The input sequence is modified in-place.
+
+ \param Input An input sequence
+ \param IsSpace An unary predicate identifying spaces
+ */
+ template<typename SequenceT, typename PredicateT>
+ inline void trim_if(SequenceT& Input, PredicateT IsSpace)
+ {
+ trim_right_if( Input, IsSpace );
+ trim_left_if( Input, IsSpace );
+ }
+
+ //! Trim
+ /*!
+ Remove all leading and trailing spaces from the input.
+ The input sequence is modified in-place.
+
+ \param Input An input sequence
+ \param Loc A locale used for 'space' classification
+ */
+ template<typename SequenceT>
+ inline void trim(SequenceT& Input, const std::locale& Loc=std::locale())
+ {
+ trim_if(
+ Input,
+ is_space( Loc ) );
+ }
+
+ } // namespace algorithm
+
+ // pull names to the boost namespace
+ using algorithm::trim_left;
+ using algorithm::trim_left_if;
+ using algorithm::trim_left_copy;
+ using algorithm::trim_left_copy_if;
+ using algorithm::trim_right;
+ using algorithm::trim_right_if;
+ using algorithm::trim_right_copy;
+ using algorithm::trim_right_copy_if;
+ using algorithm::trim;
+ using algorithm::trim_if;
+ using algorithm::trim_copy;
+ using algorithm::trim_copy_if;
+
+} // namespace boost
+
+#endif // BOOST_STRING_TRIM_HPP
diff --git a/boost/boost/algorithm/string/yes_no_type.hpp b/boost/boost/algorithm/string/yes_no_type.hpp
new file mode 100644
index 00000000000..dc3da7a0043
--- /dev/null
+++ b/boost/boost/algorithm/string/yes_no_type.hpp
@@ -0,0 +1,32 @@
+// Boost string_algo library yes_no_type.hpp header file ---------------------------//
+
+// Copyright Pavol Droba 2002-2003. Use, modification and
+// distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_YES_NO_TYPE_DETAIL_HPP
+#define BOOST_STRING_YES_NO_TYPE_DETAIL_HPP
+
+namespace boost {
+ namespace algorithm {
+
+ // taken from boost mailing-list
+ // when yes_no_type will become officially
+ // a part of boost distribution, this header
+ // will be deprecated
+ template<int I> struct size_descriptor
+ {
+ typedef char (& type)[I];
+ };
+
+ typedef size_descriptor<1>::type yes_type;
+ typedef size_descriptor<2>::type no_type;
+
+ } // namespace algorithm
+} // namespace boost
+
+
+#endif // BOOST_STRING_YES_NO_TYPE_DETAIL_HPP
diff --git a/boost/boost/algorithm/string_regex.hpp b/boost/boost/algorithm/string_regex.hpp
new file mode 100644
index 00000000000..c91b3a7babb
--- /dev/null
+++ b/boost/boost/algorithm/string_regex.hpp
@@ -0,0 +1,22 @@
+// Boost string_algo library string_regex.hpp header file ---------------------------//
+
+// Copyright Pavol Droba 2002-2004. Use, modification and
+// distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_ALGO_REGEX_HPP
+#define BOOST_STRING_ALGO_REGEX_HPP
+
+/*! \file
+ Cumulative include for string_algo library.
+ In addtion to string.hpp contains also regex-related stuff.
+*/
+
+#include <boost/regex.hpp>
+#include <boost/algorithm/string.hpp>
+#include <boost/algorithm/string/regex.hpp>
+
+#endif // BOOST_STRING_ALGO_REGEX_HPP
diff --git a/boost/boost/aligned_storage.hpp b/boost/boost/aligned_storage.hpp
new file mode 100644
index 00000000000..cfaf7877a15
--- /dev/null
+++ b/boost/boost/aligned_storage.hpp
@@ -0,0 +1,170 @@
+//-----------------------------------------------------------------------------
+// boost aligned_storage.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_ALIGNED_STORAGE_HPP
+#define BOOST_ALIGNED_STORAGE_HPP
+
+#include <cstddef> // for std::size_t
+
+#include "boost/config.hpp"
+#include "boost/detail/workaround.hpp"
+#include "boost/type_traits/alignment_of.hpp"
+#include "boost/type_traits/type_with_alignment.hpp"
+#include "boost/type_traits/is_pod.hpp"
+
+#include "boost/mpl/eval_if.hpp"
+#include "boost/mpl/identity.hpp"
+
+#include "boost/type_traits/detail/bool_trait_def.hpp"
+
+namespace boost {
+
+namespace detail { namespace aligned_storage {
+
+BOOST_STATIC_CONSTANT(
+ std::size_t
+ , alignment_of_max_align = ::boost::alignment_of<max_align>::value
+ );
+
+//
+// To be TR1 conforming this must be a POD type:
+//
+template <
+ std::size_t size_
+ , std::size_t alignment_
+>
+struct aligned_storage_imp
+{
+ union data_t
+ {
+ char buf[size_];
+
+ typename mpl::eval_if_c<
+ alignment_ == std::size_t(-1)
+ , mpl::identity<detail::max_align>
+ , type_with_alignment<alignment_>
+ >::type align_;
+ } data_;
+};
+
+}} // namespace detail::aligned_storage
+
+template <
+ std::size_t size_
+ , std::size_t alignment_ = std::size_t(-1)
+>
+class aligned_storage
+{
+private: // representation
+
+ detail::aligned_storage::aligned_storage_imp<size_, alignment_> data_;
+
+public: // constants
+
+ typedef detail::aligned_storage::aligned_storage_imp<size_, alignment_> type;
+
+ BOOST_STATIC_CONSTANT(
+ std::size_t
+ , size = size_
+ );
+ BOOST_STATIC_CONSTANT(
+ std::size_t
+ , alignment = (
+ alignment_ == std::size_t(-1)
+ ? ::boost::detail::aligned_storage::alignment_of_max_align
+ : alignment_
+ )
+ );
+
+#if defined(__GNUC__) &&\
+ (__GNUC__ > 3) ||\
+ (__GNUC__ == 3 && (__GNUC_MINOR__ > 2 ||\
+ (__GNUC_MINOR__ == 2 && __GNUC_PATCHLEVEL__ >=3)))
+
+private: // noncopyable
+
+ aligned_storage(const aligned_storage&);
+ aligned_storage& operator=(const aligned_storage&);
+
+#else // gcc less than 3.2.3
+
+public: // _should_ be noncopyable, but GCC compiler emits error
+
+ aligned_storage(const aligned_storage&);
+ aligned_storage& operator=(const aligned_storage&);
+
+#endif // gcc < 3.2.3 workaround
+
+public: // structors
+
+ aligned_storage()
+ {
+ }
+
+ ~aligned_storage()
+ {
+ }
+
+public: // accessors
+
+ void* address()
+ {
+ return this;
+ }
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+
+ const void* address() const
+ {
+ return this;
+ }
+
+#else // MSVC6
+
+ const void* address() const;
+
+#endif // MSVC6 workaround
+
+};
+
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+
+// MSVC6 seems not to like inline functions with const void* returns, so we
+// declare the following here:
+
+template <std::size_t S, std::size_t A>
+const void* aligned_storage<S,A>::address() const
+{
+ return const_cast< aligned_storage<S,A>* >(this)->address();
+}
+
+#endif // MSVC6 workaround
+
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+//
+// Make sure that is_pod recognises aligned_storage<>::type
+// as a POD (Note that aligned_storage<> itself is not a POD):
+//
+template <std::size_t size_, std::size_t alignment_>
+struct is_pod<boost::detail::aligned_storage::aligned_storage_imp<size_,alignment_> >
+ BOOST_TT_AUX_BOOL_C_BASE(true)
+{
+ BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(true)
+};
+#endif
+
+
+} // namespace boost
+
+#include "boost/type_traits/detail/bool_trait_undef.hpp"
+
+#endif // BOOST_ALIGNED_STORAGE_HPP
diff --git a/boost/boost/any.hpp b/boost/boost/any.hpp
new file mode 100644
index 00000000000..ad3f211f692
--- /dev/null
+++ b/boost/boost/any.hpp
@@ -0,0 +1,238 @@
+// See http://www.boost.org/libs/any for Documentation.
+
+#ifndef BOOST_ANY_INCLUDED
+#define BOOST_ANY_INCLUDED
+
+// what: variant type boost::any
+// who: contributed by Kevlin Henney,
+// with features contributed and bugs found by
+// Ed Brey, Mark Rodgers, Peter Dimov, and James Curran
+// when: July 2001
+// where: tested with BCC 5.5, MSVC 6.0, and g++ 2.95
+
+#include <algorithm>
+#include <typeinfo>
+
+#include "boost/config.hpp"
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/type_traits/is_reference.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/static_assert.hpp>
+
+namespace boost
+{
+ class any
+ {
+ public: // structors
+
+ any()
+ : content(0)
+ {
+ }
+
+ template<typename ValueType>
+ any(const ValueType & value)
+ : content(new holder<ValueType>(value))
+ {
+ }
+
+ any(const any & other)
+ : content(other.content ? other.content->clone() : 0)
+ {
+ }
+
+ ~any()
+ {
+ delete content;
+ }
+
+ public: // modifiers
+
+ any & swap(any & rhs)
+ {
+ std::swap(content, rhs.content);
+ return *this;
+ }
+
+ template<typename ValueType>
+ any & operator=(const ValueType & rhs)
+ {
+ any(rhs).swap(*this);
+ return *this;
+ }
+
+ any & operator=(const any & rhs)
+ {
+ any(rhs).swap(*this);
+ return *this;
+ }
+
+ public: // queries
+
+ bool empty() const
+ {
+ return !content;
+ }
+
+ const std::type_info & type() const
+ {
+ return content ? content->type() : typeid(void);
+ }
+
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+ private: // types
+#else
+ public: // types (public so any_cast can be non-friend)
+#endif
+
+ class placeholder
+ {
+ public: // structors
+
+ virtual ~placeholder()
+ {
+ }
+
+ public: // queries
+
+ virtual const std::type_info & type() const = 0;
+
+ virtual placeholder * clone() const = 0;
+
+ };
+
+ template<typename ValueType>
+ class holder : public placeholder
+ {
+ public: // structors
+
+ holder(const ValueType & value)
+ : held(value)
+ {
+ }
+
+ public: // queries
+
+ virtual const std::type_info & type() const
+ {
+ return typeid(ValueType);
+ }
+
+ virtual placeholder * clone() const
+ {
+ return new holder(held);
+ }
+
+ public: // representation
+
+ ValueType held;
+
+ };
+
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+
+ private: // representation
+
+ template<typename ValueType>
+ friend ValueType * any_cast(any *);
+
+ template<typename ValueType>
+ friend ValueType * unsafe_any_cast(any *);
+
+#else
+
+ public: // representation (public so any_cast can be non-friend)
+
+#endif
+
+ placeholder * content;
+
+ };
+
+ class bad_any_cast : public std::bad_cast
+ {
+ public:
+ virtual const char * what() const throw()
+ {
+ return "boost::bad_any_cast: "
+ "failed conversion using boost::any_cast";
+ }
+ };
+
+ template<typename ValueType>
+ ValueType * any_cast(any * operand)
+ {
+ return operand && operand->type() == typeid(ValueType)
+ ? &static_cast<any::holder<ValueType> *>(operand->content)->held
+ : 0;
+ }
+
+ template<typename ValueType>
+ const ValueType * any_cast(const any * operand)
+ {
+ return any_cast<ValueType>(const_cast<any *>(operand));
+ }
+
+ template<typename ValueType>
+ ValueType any_cast(const any & operand)
+ {
+ typedef BOOST_DEDUCED_TYPENAME remove_reference<ValueType>::type nonref;
+
+#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ // If 'nonref' is still reference type, it means the user has not
+ // specialized 'remove_reference'.
+
+ // Please use BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION macro
+ // to generate specialization of remove_reference for your class
+ // See type traits library documentation for details
+ BOOST_STATIC_ASSERT(!is_reference<nonref>::value);
+#endif
+
+ const nonref * result = any_cast<nonref>(&operand);
+ if(!result)
+ boost::throw_exception(bad_any_cast());
+ return *result;
+ }
+
+ template<typename ValueType>
+ ValueType any_cast(any & operand)
+ {
+ typedef BOOST_DEDUCED_TYPENAME remove_reference<ValueType>::type nonref;
+
+#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ // The comment in the above version of 'any_cast' explains when this
+ // assert is fired and what to do.
+ BOOST_STATIC_ASSERT(!is_reference<nonref>::value);
+#endif
+
+ nonref * result = any_cast<nonref>(&operand);
+ if(!result)
+ boost::throw_exception(bad_any_cast());
+ return *result;
+ }
+
+ // Note: The "unsafe" versions of any_cast are not part of the
+ // public interface and may be removed at any time. They are
+ // required where we know what type is stored in the any and can't
+ // use typeid() comparison, e.g., when our types may travel across
+ // different shared libraries.
+ template<typename ValueType>
+ inline ValueType * unsafe_any_cast(any * operand)
+ {
+ return &static_cast<any::holder<ValueType> *>(operand->content)->held;
+ }
+
+ template<typename ValueType>
+ inline const ValueType * unsafe_any_cast(const any * operand)
+ {
+ return unsafe_any_cast<ValueType>(const_cast<any *>(operand));
+ }
+}
+
+// Copyright Kevlin Henney, 2000, 2001, 2002. All rights reserved.
+//
+// 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)
+
+#endif
diff --git a/boost/boost/archive/add_facet.hpp b/boost/boost/archive/add_facet.hpp
new file mode 100644
index 00000000000..6bafe9bdb24
--- /dev/null
+++ b/boost/boost/archive/add_facet.hpp
@@ -0,0 +1,55 @@
+#ifndef BOOST_ARCHIVE_ADD_FACET_HPP
+#define BOOST_ARCHIVE_ADD_FACET_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// add_facet.hpp
+
+// (C) Copyright 2003 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <locale>
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+// does STLport uses native STL for locales?
+#if (defined(__SGI_STL_PORT)&& defined(_STLP_NO_OWN_IOSTREAMS))
+// and this native STL lib is old Dinkumware (has not defined _CPPLIB_VER)
+# if (defined(_YVALS) && !defined(__IBMCPP__)) || !defined(_CPPLIB_VER)
+# define BOOST_ARCHIVE_OLD_DINKUMWARE_BENEATH_STLPORT
+# endif
+#endif
+
+namespace boost {
+namespace archive {
+
+template<class Facet>
+inline std::locale *
+add_facet(const std::locale &l, Facet * f){
+ return
+ #if defined BOOST_ARCHIVE_OLD_DINKUMWARE_BENEATH_STLPORT
+ // std namespace used for native locale
+ new std::locale(std::_Addfac(l, f));
+ #elif BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1) // old Dinkumwar
+ // std namespace used for native locale
+ new std::locale(std::_Addfac(l, f));
+ #else
+ // standard compatible
+ new std::locale(l, f);
+ #endif
+}
+
+} // namespace archive
+} // namespace boost
+
+#undef BOOST_ARCHIVE_OLD_DINKUMWARE_BENEATH_STLPORT
+
+#endif // BOOST_ARCHIVE_ADD_FACET_HPP
diff --git a/boost/boost/archive/archive_exception.hpp b/boost/boost/archive/archive_exception.hpp
new file mode 100644
index 00000000000..80b0bf1c4cf
--- /dev/null
+++ b/boost/boost/archive/archive_exception.hpp
@@ -0,0 +1,115 @@
+#ifndef BOOST_ARCHIVE_ARCHIVE_EXCEPTION_HPP
+#define BOOST_ARCHIVE_ARCHIVE_EXCEPTION_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// archive/archive_exception.hpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <exception>
+#include <cassert>
+
+namespace boost {
+namespace archive {
+
+//////////////////////////////////////////////////////////////////////
+// exceptions thrown by archives
+//
+class archive_exception :
+ public virtual std::exception
+{
+public:
+ typedef enum {
+ no_exception, // initialized without code
+ other_exception, // any excepton not listed below
+ unregistered_class, // attempt to serialize a pointer of an
+ // an unregistered class
+ invalid_signature, // first line of archive does not contain
+ // expected string
+ unsupported_version,// archive created with library version
+ // subsequent to this one
+ pointer_conflict, // an attempt has been made to directly
+ // serialization::detail an object
+ // after having already serialzed the same
+ // object through a pointer. Were this permited,
+ // it the archive load would result in the
+ // creation of an extra copy of the obect.
+ incompatible_native_format, // attempt to read native binary format
+ // on incompatible platform
+ array_size_too_short,// array being loaded doesn't fit in array allocated
+ stream_error, // i/o error on stream
+ invalid_class_name, // class name greater than the maximum permitted.
+ // most likely a corrupted archive or an attempt
+ // to insert virus via buffer overrun method.
+ unregistered_cast // base - derived relationship not registered with
+ // void_cast_register
+ } exception_code;
+ exception_code code;
+ archive_exception(exception_code c) :
+ code(c)
+ {}
+ virtual const char *what( ) const throw( )
+ {
+ const char *msg = "programming error";
+ switch(code){
+ case no_exception:
+ msg = "uninitialized exception";
+ break;
+ case unregistered_class:
+ msg = "unregistered class";
+ break;
+ case invalid_signature:
+ msg = "invalid signature";
+ break;
+ case unsupported_version:
+ msg = "unsupported version";
+ break;
+ case pointer_conflict:
+ msg = "pointer conflict";
+ break;
+ case incompatible_native_format:
+ msg = "incompatible native format";
+ break;
+ case array_size_too_short:
+ msg = "array size too short";
+ break;
+ case stream_error:
+ msg = "stream error";
+ break;
+ case invalid_class_name:
+ msg = "class name too long";
+ break;
+ case unregistered_cast:
+ msg = "unregistered void cast";
+ break;
+ case other_exception:
+ // if get here - it indicates a derived exception
+ // was sliced by passing by value in catch
+ msg = "unknown derived exception";
+ break;
+ default:
+ assert(false);
+ break;
+ }
+ return msg;
+ }
+protected:
+ archive_exception() :
+ code(no_exception)
+ {}
+};
+
+}// namespace archive
+}// namespace boost
+
+#endif //BOOST_ARCHIVE_ARCHIVE_EXCEPTION_HPP
diff --git a/boost/boost/archive/basic_archive.hpp b/boost/boost/archive/basic_archive.hpp
new file mode 100644
index 00000000000..456243af9f3
--- /dev/null
+++ b/boost/boost/archive/basic_archive.hpp
@@ -0,0 +1,130 @@
+#ifndef BOOST_ARCHIVE_BASIC_ARCHIVE_HPP
+#define BOOST_ARCHIVE_BASIC_ARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_archive.hpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+#include <boost/strong_typedef.hpp>
+#include <boost/noncopyable.hpp>
+
+#include <boost/archive/detail/auto_link_archive.hpp>
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+namespace boost {
+namespace archive {
+
+BOOST_STRONG_TYPEDEF(unsigned int, version_type)
+BOOST_STRONG_TYPEDEF(int, class_id_type)
+BOOST_STRONG_TYPEDEF(int, class_id_optional_type)
+BOOST_STRONG_TYPEDEF(int, class_id_reference_type)
+BOOST_STRONG_TYPEDEF(unsigned int, object_id_type)
+BOOST_STRONG_TYPEDEF(unsigned int, object_reference_type)
+
+struct tracking_type {
+ typedef bool value_type;
+ bool t;
+ explicit tracking_type(const bool t_ = false)
+ : t(t_)
+ {};
+ tracking_type(const tracking_type & t_)
+ : t(t_.t)
+ {}
+ operator bool () const {
+ return t;
+ };
+ operator bool & () {
+ return t;
+ };
+ tracking_type & operator=(const bool t_){
+ t = t_;
+ return *this;
+ }
+ bool operator==(const tracking_type & rhs) const {
+ return t == rhs.t;
+ }
+ bool operator==(const bool & rhs) const {
+ return t == rhs;
+ }
+ tracking_type & operator=(const tracking_type & rhs){
+ t = rhs.t;
+ return *this;
+ }
+};
+
+struct class_name_type : private boost::noncopyable {
+ char *t;
+ operator const char * & () const {
+ return const_cast<const char * &>(t);
+ }
+ operator char * () {
+ return t;
+ }
+ explicit class_name_type(const char *key_)
+ : t(const_cast<char *>(key_)){}
+ explicit class_name_type(char *key_)
+ : t(key_){}
+ class_name_type & operator=(const class_name_type & rhs){
+ t = rhs.t;
+ return *this;
+ }
+};
+
+enum archive_flags {
+ no_header = 1, // suppress archive header info
+ no_codecvt = 2, // suppress alteration of codecvt facet
+ no_xml_tag_checking = 4, // suppress checking of xml tags
+ no_tracking = 8 // suppress ALL tracking
+// no_object_creation = 16 // don't create any new objects
+};
+
+#define NULL_POINTER_TAG class_id_type(-1)
+
+BOOST_ARCHIVE_DECL(const char *)
+ARCHIVE_SIGNATURE();
+
+BOOST_ARCHIVE_DECL(unsigned char)
+ARCHIVE_VERSION();
+
+}// namespace archive
+}// namespace boost
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#include <boost/serialization/level.hpp>
+
+// set implementation level to primitive for all types
+// used internally by the serialization library
+
+BOOST_CLASS_IMPLEMENTATION(boost::archive::version_type, primitive_type)
+BOOST_CLASS_IMPLEMENTATION(boost::archive::class_id_type, primitive_type)
+BOOST_CLASS_IMPLEMENTATION(boost::archive::class_id_reference_type, primitive_type)
+BOOST_CLASS_IMPLEMENTATION(boost::archive::class_id_optional_type, primitive_type)
+BOOST_CLASS_IMPLEMENTATION(boost::archive::class_name_type, primitive_type)
+BOOST_CLASS_IMPLEMENTATION(boost::archive::object_id_type, primitive_type)
+BOOST_CLASS_IMPLEMENTATION(boost::archive::object_reference_type, primitive_type)
+BOOST_CLASS_IMPLEMENTATION(boost::archive::tracking_type, primitive_type)
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// Make sure that the export.hpp header isn't included before any archive header
+// Doing so would inhibit construction of correct mpl list of known archive
+// types which in turn would inhibit instantiation of all combinations of
+// serialization/archive types.
+
+#ifdef BOOST_SERIALIZATION_EXPORT_HPP
+#error "export.hpp must not be included before any archive header"
+#endif
+
+#endif //BOOST_ARCHIVE_BASIC_ARCHIVE_HPP
diff --git a/boost/boost/archive/basic_binary_iarchive.hpp b/boost/boost/archive/basic_binary_iarchive.hpp
new file mode 100644
index 00000000000..eddbe3f4f9d
--- /dev/null
+++ b/boost/boost/archive/basic_binary_iarchive.hpp
@@ -0,0 +1,121 @@
+#ifndef BOOST_ARCHIVE_BASIC_BINARY_IARCHIVE_HPP
+#define BOOST_ARCHIVE_BASIC_BINARY_IARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_binary_iarchive.hpp
+//
+// archives stored as native binary - this should be the fastest way
+// to archive the state of a group of obects. It makes no attempt to
+// convert to any canonical form.
+
+// IN GENERAL, ARCHIVES CREATED WITH THIS CLASS WILL NOT BE READABLE
+// ON PLATFORM APART FROM THE ONE THEY ARE CREATED ON
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+//#include <cstring>
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/pfto.hpp>
+
+#include <boost/archive/detail/common_iarchive.hpp>
+#include <boost/serialization/string.hpp>
+
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+namespace boost {
+namespace archive {
+
+/////////////////////////////////////////////////////////////////////////
+// class basic_binary_iarchive - read serialized objects from a input binary stream
+template<class Archive>
+class basic_binary_iarchive :
+ public detail::common_iarchive<Archive>
+{
+protected:
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+public:
+#elif defined(BOOST_MSVC)
+ // for some inexplicable reason insertion of "class" generates compile erro
+ // on msvc 7.1
+ friend detail::interface_iarchive<Archive>;
+#else
+ friend class detail::interface_iarchive<Archive>;
+#endif
+ // intermediate level to support override of operators
+ // fot templates in the absence of partial function
+ // template ordering. If we get here pass to base class
+ // note extra nonsense to sneak it pass the borland compiers
+ typedef detail::common_iarchive<Archive> detail_common_iarchive;
+ template<class T>
+ void load_override(T & t, BOOST_PFTO int)
+ {
+ this->detail_common_iarchive::load_override(t, 0);
+ }
+ // binary files don't include the optional information
+ void load_override(class_id_optional_type & /* t */, int){}
+
+ // the following have been overridden to provide specific sizes
+ // for these pseudo prmitive types.
+ void load_override(version_type & t, int){
+ // upto 255 versions
+ unsigned char x;
+ * this->This() >> x;
+ t = version_type(x);
+ }
+ void load_override(class_id_type & t, int){
+ // upto 32K classes
+ int_least16_t x;
+ * this->This() >> x;
+ t = class_id_type(x);
+ }
+ void load_override(class_id_reference_type & t, int){
+ // upto 32K classes
+ int_least16_t x;
+ * this->This() >> x;
+ t = class_id_reference_type(x);
+ }
+ void load_override(object_id_type & t, int){
+ // upto 2G objects
+ uint_least32_t x;
+ * this->This() >> x;
+ t = object_id_type(x);
+ }
+ void load_override(object_reference_type & t, int){
+ // upto 2G objects
+ uint_least32_t x;
+ * this->This() >> x;
+ t = object_reference_type(x);
+ }
+ void load_override(tracking_type & t, int){
+ char x;
+ * this->This() >> x;
+ t = (0 != x);
+ }
+
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+ load_override(class_name_type & t, int);
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+ init();
+
+ basic_binary_iarchive(unsigned int flags) :
+ detail::common_iarchive<Archive>(flags)
+ {}
+};
+
+} // namespace archive
+} // namespace boost
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // BOOST_ARCHIVE_BASIC_BINARY_IARCHIVE_HPP
diff --git a/boost/boost/archive/basic_binary_iprimitive.hpp b/boost/boost/archive/basic_binary_iprimitive.hpp
new file mode 100644
index 00000000000..3799c727e89
--- /dev/null
+++ b/boost/boost/archive/basic_binary_iprimitive.hpp
@@ -0,0 +1,173 @@
+#ifndef BOOST_ARCHIVE_BINARY_IPRIMITIVE_HPP
+#define BOOST_ARCHIVE_BINARY_IPRIMITIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_binary_iprimitive.hpp
+//
+// archives stored as native binary - this should be the fastest way
+// to archive the state of a group of obects. It makes no attempt to
+// convert to any canonical form.
+
+// IN GENERAL, ARCHIVES CREATED WITH THIS CLASS WILL NOT BE READABLE
+// ON PLATFORM APART FROM THE ONE THEY ARE CREATED ON
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <iosfwd>
+#include <cassert>
+#include <locale>
+#include <cstring> // std::memcpy
+#include <cstddef> // std::size_t
+#include <streambuf> // basic_streambuf
+#include <string>
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::memcpy;
+ using ::size_t;
+} // namespace std
+#endif
+
+#include <boost/cstdint.hpp>
+#include <boost/scoped_ptr.hpp>
+#include <boost/throw_exception.hpp>
+//#include <boost/limits.hpp>
+//#include <boost/io/ios_state.hpp>
+
+#include <boost/archive/basic_streambuf_locale_saver.hpp>
+#include <boost/archive/archive_exception.hpp>
+#include <boost/archive/detail/auto_link_archive.hpp>
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+namespace boost {
+namespace archive {
+
+/////////////////////////////////////////////////////////////////////////////
+// class binary_iarchive - read serialized objects from a input binary stream
+template<class Archive, class Elem, class Tr>
+class basic_binary_iprimitive
+{
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+ friend class load_access;
+protected:
+#else
+public:
+#endif
+ std::basic_streambuf<Elem, Tr> & m_sb;
+ // return a pointer to the most derived class
+ Archive * This(){
+ return static_cast<Archive *>(this);
+ }
+ boost::scoped_ptr<std::locale> archive_locale;
+ basic_streambuf_locale_saver<Elem, Tr> locale_saver;
+
+ // main template for serilization of primitive types
+ template<class T>
+ void load(T & t){
+ load_binary(& t, sizeof(T));
+ }
+
+ /////////////////////////////////////////////////////////
+ // fundamental types that need special treatment
+
+ // trap usage of invalid uninitialized boolean
+ void load(bool & t){
+ load_binary(& t, sizeof(t));
+ int i = t;
+ assert(0 == i || 1 == i);
+ }
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+ load(std::string &s);
+ #ifndef BOOST_NO_STD_WSTRING
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+ load(std::wstring &ws);
+ #endif
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+ load(char * t);
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+ load(wchar_t * t);
+
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+ init();
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY())
+ basic_binary_iprimitive(
+ std::basic_streambuf<Elem, Tr> & sb,
+ bool no_codecvt
+ );
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY())
+ ~basic_binary_iprimitive();
+public:
+ void
+ load_binary(void *address, std::size_t count);
+};
+
+template<class Archive, class Elem, class Tr>
+inline void
+basic_binary_iprimitive<Archive, Elem, Tr>::load_binary(
+ void *address,
+ std::size_t count
+){
+#if 0
+ assert(
+ static_cast<std::size_t>((std::numeric_limits<std::streamsize>::max)()) >= count
+ );
+ //if(is.fail())
+ // boost::throw_exception(archive_exception(archive_exception::stream_error));
+ // note: an optimizer should eliminate the following for char files
+ std::size_t s = count / sizeof(BOOST_DEDUCED_TYPENAME IStream::char_type);
+ is.read(
+ static_cast<BOOST_DEDUCED_TYPENAME IStream::char_type *>(address),
+ s
+ );
+ // note: an optimizer should eliminate the following for char files
+ s = count % sizeof(BOOST_DEDUCED_TYPENAME IStream::char_type);
+ if(0 < s){
+ if(is.fail())
+ boost::throw_exception(archive_exception(archive_exception::stream_error));
+ BOOST_DEDUCED_TYPENAME IStream::char_type t;
+ is.read(& t, 1);
+ std::memcpy(address, &t, s);
+ }
+#endif
+ // note: an optimizer should eliminate the following for char files
+ std::streamsize s = count / sizeof(Elem);
+ std::streamsize scount = m_sb.sgetn(
+ static_cast<Elem *>(address),
+ s
+ );
+ if(count != static_cast<std::size_t>(s))
+ boost::throw_exception(
+ archive_exception(archive_exception::stream_error)
+ );
+ // note: an optimizer should eliminate the following for char files
+ s = count % sizeof(Elem);
+ if(0 < s){
+// if(is.fail())
+// boost::throw_exception(archive_exception(archive_exception::stream_error));
+ Elem t;
+ scount = m_sb.sgetn(& t, 1);
+ if(count != 1)
+ boost::throw_exception(
+ archive_exception(archive_exception::stream_error)
+ );
+ std::memcpy(address, &t, s);
+ }
+}
+
+} // namespace archive
+} // namespace boost
+
+#include <boost/archive/detail/abi_suffix.hpp> // pop pragams
+
+#endif // BOOST_ARCHIVE_BINARY_IPRIMITIVE_HPP
diff --git a/boost/boost/archive/basic_binary_oarchive.hpp b/boost/boost/archive/basic_binary_oarchive.hpp
new file mode 100644
index 00000000000..bc4b89dced1
--- /dev/null
+++ b/boost/boost/archive/basic_binary_oarchive.hpp
@@ -0,0 +1,118 @@
+#ifndef BOOST_ARCHIVE_BASIC_BINARY_OARCHIVE_HPP
+#define BOOST_ARCHIVE_BASIC_BINARY_OARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_binary_oarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+// archives stored as native binary - this should be the fastest way
+// to archive the state of a group of obects. It makes no attempt to
+// convert to any canonical form.
+
+// IN GENERAL, ARCHIVES CREATED WITH THIS CLASS WILL NOT BE READABLE
+// ON PLATFORM APART FROM THE ONE THEY ARE CREATE ON
+
+#include <boost/config.hpp>
+#include <boost/pfto.hpp>
+
+#include <boost/detail/workaround.hpp>
+#include <boost/archive/detail/common_oarchive.hpp>
+#include <boost/serialization/string.hpp>
+
+namespace boost {
+namespace archive {
+
+//////////////////////////////////////////////////////////////////////
+// class basic_binary_oarchive - write serialized objects to a binary output stream
+// note: this archive has no pretensions to portability. Archive format
+// may vary across machine architectures and compilers. About the only
+// guarentee is that an archive created with this code will be readable
+// by a program built with the same tools for the same machne. This class
+// does have the virtue of buiding the smalles archive in the minimum amount
+// of time. So under some circumstances it may be he right choice.
+
+/////////////////////////////////////////////////////////////////////////
+// class basic_text_iarchive - read serialized objects from a input text stream
+template<class Archive>
+class basic_binary_oarchive :
+ public detail::common_oarchive<Archive>
+{
+protected:
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+public:
+#elif defined(BOOST_MSVC)
+ // for some inexplicable reason insertion of "class" generates compile erro
+ // on msvc 7.1
+ friend detail::interface_oarchive<Archive>;
+#else
+ friend class detail::interface_oarchive<Archive>;
+#endif
+ // any datatype not specifed below will be handled by base class
+ typedef detail::common_oarchive<Archive> detail_common_oarchive;
+ template<class T>
+ void save_override(T & t, BOOST_PFTO int){
+ this->detail_common_oarchive::save_override(t, 0);
+ }
+ // binary files don't include the optional information
+ void save_override(const class_id_optional_type & /* t */, int){}
+
+ void save_override(const version_type & t, int){
+ // upto 255 versions
+ // note:t.t resolves borland ambguity
+ unsigned char x = t.t;
+ * this->This() << x;
+ }
+ void save_override(const class_id_type & t, int){
+ // upto 32K classes
+ int_least16_t x = t.t;
+ * this->This() << x;
+ }
+ void save_override(const class_id_reference_type & t, int){
+ // upto 32K classes
+ int_least16_t x = t.t;
+ * this->This() << x;
+ }
+ void save_override(const object_id_type & t, int){
+ // upto 2G objects
+ uint_least32_t x = t.t;
+ * this->This() << x;
+ }
+ void save_override(const object_reference_type & t, int){
+ // upto 2G objects
+ uint_least32_t x = t.t;
+ * this->This() << x;
+ }
+ void save_override(const tracking_type & t, int){
+ char x = t.t;
+ * this->This() << x;
+ }
+
+ // explicitly convert to char * to avoid compile ambiguities
+ void save_override(const class_name_type & t, int){
+ const std::string s(t);
+ * this->This() << s;
+ }
+
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+ init();
+
+ basic_binary_oarchive(unsigned int flags) :
+ detail::common_oarchive<Archive>(flags)
+ {}
+};
+
+} // namespace archive
+} // namespace boost
+
+#endif // BOOST_ARCHIVE_BASIC_BINARY_OARCHIVE_HPP
diff --git a/boost/boost/archive/basic_binary_oprimitive.hpp b/boost/boost/archive/basic_binary_oprimitive.hpp
new file mode 100644
index 00000000000..b79146c5171
--- /dev/null
+++ b/boost/boost/archive/basic_binary_oprimitive.hpp
@@ -0,0 +1,151 @@
+#ifndef BOOST_ARCHIVE_BASIC_BINARY_OPRIMITIVE_HPP
+#define BOOST_ARCHIVE_BASIC_BINARY_OPRIMITIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_binary_oprimitive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+// archives stored as native binary - this should be the fastest way
+// to archive the state of a group of obects. It makes no attempt to
+// convert to any canonical form.
+
+// IN GENERAL, ARCHIVES CREATED WITH THIS CLASS WILL NOT BE READABLE
+// ON PLATFORM APART FROM THE ONE THEY ARE CREATE ON
+
+#include <iosfwd>
+#include <cassert>
+#include <locale>
+#include <cstddef> // size_t
+#include <streambuf> // basic_streambuf
+#include <string>
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::size_t;
+} // namespace std
+#endif
+
+#include <boost/cstdint.hpp>
+//#include <boost/limits.hpp>
+//#include <boost/io/ios_state.hpp>
+#include <boost/scoped_ptr.hpp>
+#include <boost/throw_exception.hpp>
+
+#include <boost/archive/basic_streambuf_locale_saver.hpp>
+#include <boost/archive/archive_exception.hpp>
+#include <boost/archive/detail/auto_link_archive.hpp>
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+namespace boost {
+namespace archive {
+
+/////////////////////////////////////////////////////////////////////////
+// class basic_binary_oprimitive - binary output of prmitives
+
+template<class Archive, class Elem, class Tr>
+class basic_binary_oprimitive
+{
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+ friend class save_access;
+protected:
+#else
+public:
+#endif
+ std::basic_streambuf<Elem, Tr> & m_sb;
+ // return a pointer to the most derived class
+ Archive * This(){
+ return static_cast<Archive *>(this);
+ }
+ boost::scoped_ptr<std::locale> archive_locale;
+ basic_streambuf_locale_saver<Elem, Tr> locale_saver;
+
+ // default saving of primitives.
+ template<class T>
+ void save(const T & t)
+ {
+ save_binary(& t, sizeof(T));
+ }
+
+ /////////////////////////////////////////////////////////
+ // fundamental types that need special treatment
+
+ // trap usage of invalid uninitialized boolean which would
+ // otherwise crash on load.
+ void save(const bool t){
+ int i = t;
+ assert(0 == i || 1 == i);
+ save_binary(& t, sizeof(t));
+ }
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+ save(const std::string &s);
+ #ifndef BOOST_NO_STD_WSTRING
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+ save(const std::wstring &ws);
+ #endif
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+ save(const char * t);
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+ save(const wchar_t * t);
+
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+ init();
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY())
+ basic_binary_oprimitive(
+ std::basic_streambuf<Elem, Tr> & sb,
+ bool no_codecvt
+ );
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY())
+ ~basic_binary_oprimitive();
+public:
+ void save_binary(const void *address, std::size_t count);
+};
+
+template<class Archive, class Elem, class Tr>
+inline void
+basic_binary_oprimitive<Archive, Elem, Tr>::save_binary(
+ const void *address,
+ std::size_t count
+){
+ //assert(
+ // static_cast<std::size_t>((std::numeric_limits<std::streamsize>::max)()) >= count
+ //);
+ // note: if the following assertions fail
+ // a likely cause is that the output stream is set to "text"
+ // mode where by cr characters recieve special treatment.
+ // be sure that the output stream is opened with ios::binary
+ //if(os.fail())
+ // boost::throw_exception(archive_exception(archive_exception::stream_error));
+ // figure number of elements to output - round up
+ count = ( count + sizeof(Elem) - 1)
+ / sizeof(Elem);
+ std::streamsize scount = m_sb.sputn(
+ static_cast<const Elem *>(address),
+ count
+ );
+ if(count != static_cast<std::size_t>(scount))
+ boost::throw_exception(archive_exception(archive_exception::stream_error));
+ //os.write(
+ // static_cast<const BOOST_DEDUCED_TYPENAME OStream::char_type *>(address),
+ // count
+ //);
+ //assert(os.good());
+}
+
+} //namespace boost
+} //namespace archive
+
+#include <boost/archive/detail/abi_suffix.hpp> // pop pragams
+
+#endif // BOOST_ARCHIVE_BASIC_BINARY_OPRIMITIVE_HPP
diff --git a/boost/boost/archive/basic_streambuf_locale_saver.hpp b/boost/boost/archive/basic_streambuf_locale_saver.hpp
new file mode 100644
index 00000000000..734ec7885b1
--- /dev/null
+++ b/boost/boost/archive/basic_streambuf_locale_saver.hpp
@@ -0,0 +1,61 @@
+#ifndef BOOST_ARCHIVE_BASIC_STREAMBUF_LOCALE_SAVER_HPP
+#define BOOST_ARCHIVE_BASIC_STREAMBUF_LOCALE_SAVER_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_streambuf_local_saver.hpp
+
+// (C) Copyright 2005 Robert Ramey - http://www.rrsd.com
+
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+// note derived from boost/io/ios_state.hpp
+// Copyright 2002, 2005 Daryle Walker. Use, modification, and distribution
+// are subject to the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or a copy at <http://www.boost.org/LICENSE_1_0.txt>.)
+
+// See <http://www.boost.org/libs/io/> for the library's home page.
+
+#ifndef BOOST_NO_STD_LOCALE
+#include <locale> // for std::locale
+#endif
+#include <streambuf> // for std::basic_streambuf
+
+namespace boost{
+namespace archive{
+
+#ifndef BOOST_NO_STD_LOCALE
+template < typename Ch, class Tr >
+class basic_streambuf_locale_saver
+{
+public:
+ typedef ::std::basic_streambuf<Ch, Tr> state_type;
+ typedef ::std::locale aspect_type;
+ explicit basic_streambuf_locale_saver( state_type &s )
+ : s_save_( s ), a_save_( s.getloc() )
+ {}
+ basic_streambuf_locale_saver( state_type &s, aspect_type const &a )
+ : s_save_( s ), a_save_( s.pubimbue(a) )
+ {}
+ ~basic_streambuf_locale_saver()
+ { this->restore(); }
+ void restore()
+ { s_save_.pubimbue( a_save_ ); }
+private:
+ state_type & s_save_;
+ aspect_type const a_save_;
+};
+
+} // archive
+} // boost
+
+#endif // BOOST_NO_STD_LOCALE
+#endif // BOOST_ARCHIVE_BASIC_STREAMBUF_LOCALE_SAVER_HPP
diff --git a/boost/boost/archive/basic_text_iarchive.hpp b/boost/boost/archive/basic_text_iarchive.hpp
new file mode 100644
index 00000000000..ab70019b867
--- /dev/null
+++ b/boost/boost/archive/basic_text_iarchive.hpp
@@ -0,0 +1,94 @@
+#ifndef BOOST_ARCHIVE_BASIC_TEXT_IARCHIVE_HPP
+#define BOOST_ARCHIVE_BASIC_TEXT_IARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_text_iarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+// archives stored as text - note these ar templated on the basic
+// stream templates to accommodate wide (and other?) kind of characters
+//
+// note the fact that on libraries without wide characters, ostream is
+// is not a specialization of basic_ostream which in fact is not defined
+// in such cases. So we can't use basic_ostream<IStream::char_type> but rather
+// use two template parameters
+
+#include <boost/config.hpp>
+#include <boost/pfto.hpp>
+#include <boost/detail/workaround.hpp>
+
+#include <boost/archive/detail/common_iarchive.hpp>
+#include <boost/serialization/string.hpp>
+
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+namespace boost {
+namespace archive {
+
+/////////////////////////////////////////////////////////////////////////
+// class basic_text_iarchive - read serialized objects from a input text stream
+template<class Archive>
+class basic_text_iarchive :
+ public detail::common_iarchive<Archive>
+{
+protected:
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+public:
+#elif defined(BOOST_MSVC)
+ // for some inexplicable reason insertion of "class" generates compile erro
+ // on msvc 7.1
+ friend detail::interface_iarchive<Archive>;
+#else
+ friend class detail::interface_iarchive<Archive>;
+#endif
+ // intermediate level to support override of operators
+ // fot templates in the absence of partial function
+ // template ordering
+ typedef detail::common_iarchive<Archive> detail_common_iarchive;
+ template<class T>
+ void load_override(T & t, BOOST_PFTO int)
+ {
+ this->detail_common_iarchive::load_override(t, 0);
+ }
+
+ // Borland compilers has a problem with strong type. Try to fix this here
+ #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
+ void load_override(version_type & t, int){
+ unsigned int x;
+ * this->This() >> x;
+ t.t = version_type(x);
+ }
+ #endif
+
+ // text file don't include the optional information
+ void load_override(class_id_optional_type & /*t*/, int){}
+
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+ load_override(class_name_type & t, int);
+
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+ init(void);
+
+ basic_text_iarchive(unsigned int flags) :
+ detail::common_iarchive<Archive>(flags)
+ {}
+ ~basic_text_iarchive(){}
+};
+
+} // namespace archive
+} // namespace boost
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // BOOST_ARCHIVE_BASIC_TEXT_IARCHIVE_HPP
diff --git a/boost/boost/archive/basic_text_iprimitive.hpp b/boost/boost/archive/basic_text_iprimitive.hpp
new file mode 100644
index 00000000000..fe25a2ab4dc
--- /dev/null
+++ b/boost/boost/archive/basic_text_iprimitive.hpp
@@ -0,0 +1,130 @@
+#ifndef BOOST_ARCHIVE_BASIC_TEXT_IPRIMITIVE_HPP
+#define BOOST_ARCHIVE_BASIC_TEXT_IPRIMITIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_text_iprimitive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+// archives stored as text - note these ar templated on the basic
+// stream templates to accommodate wide (and other?) kind of characters
+//
+// note the fact that on libraries without wide characters, ostream is
+// is not a specialization of basic_ostream which in fact is not defined
+// in such cases. So we can't use basic_ostream<IStream::char_type> but rather
+// use two template parameters
+
+#include <cassert>
+#include <locale>
+#include <cstddef> // size_t
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::size_t;
+ #if ! defined(BOOST_DINKUMWARE_STDLIB) && ! defined(__SGI_STL_PORT)
+ using ::locale;
+ #endif
+} // namespace std
+#endif
+
+#include <boost/detail/workaround.hpp>
+#if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1)
+#include <boost/archive/dinkumware.hpp>
+#endif
+
+#include <boost/throw_exception.hpp>
+#include <boost/limits.hpp>
+#include <boost/io/ios_state.hpp>
+#include <boost/scoped_ptr.hpp>
+
+#include <boost/archive/archive_exception.hpp>
+
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+namespace boost {
+namespace archive {
+
+/////////////////////////////////////////////////////////////////////////
+// class basic_text_iarchive - load serialized objects from a input text stream
+template<class IStream>
+class basic_text_iprimitive
+{
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+protected:
+#else
+public:
+#endif
+ IStream &is;
+ io::ios_flags_saver flags_saver;
+ io::ios_precision_saver precision_saver;
+ boost::scoped_ptr<std::locale> archive_locale;
+ io::basic_ios_locale_saver<
+ BOOST_DEDUCED_TYPENAME IStream::char_type, BOOST_DEDUCED_TYPENAME IStream::traits_type
+ > locale_saver;
+ template<class T>
+ void load(T & t)
+ {
+ if(is.fail())
+ boost::throw_exception(archive_exception(archive_exception::stream_error));
+ is >> t;
+ }
+ void load(unsigned char & t)
+ {
+ if(is.fail())
+ boost::throw_exception(archive_exception(archive_exception::stream_error));
+ unsigned short int i;
+ is >> i;
+ t = static_cast<unsigned char>(i);
+ }
+ void load(signed char & t)
+ {
+ if(is.fail())
+ boost::throw_exception(archive_exception(archive_exception::stream_error));
+ signed short int i;
+ is >> i;
+ t = static_cast<signed char>(i);
+ }
+ void load(char & t)
+ {
+ if(is.fail())
+ boost::throw_exception(archive_exception(archive_exception::stream_error));
+ short int i;
+ is >> i;
+ t = static_cast<char>(i);
+ }
+ #ifndef BOOST_NO_INTRINSIC_WCHAR_T
+ void load(wchar_t & t)
+ {
+ if(is.fail())
+ boost::throw_exception(archive_exception(archive_exception::stream_error));
+ unsigned i;
+ is >> i;
+ t = static_cast<wchar_t>(i);
+ }
+ #endif
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY())
+ basic_text_iprimitive(IStream &is, bool no_codecvt);
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY())
+ ~basic_text_iprimitive();
+public:
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+ load_binary(void *address, std::size_t count);
+};
+
+} // namespace archive
+} // namespace boost
+
+#include <boost/archive/detail/abi_suffix.hpp> // pop pragams
+
+#endif // BOOST_ARCHIVE_BASIC_TEXT_IPRIMITIVE_HPP
diff --git a/boost/boost/archive/basic_text_oarchive.hpp b/boost/boost/archive/basic_text_oarchive.hpp
new file mode 100644
index 00000000000..5289170b101
--- /dev/null
+++ b/boost/boost/archive/basic_text_oarchive.hpp
@@ -0,0 +1,131 @@
+#ifndef BOOST_ARCHIVE_BASIC_TEXT_OARCHIVE_HPP
+#define BOOST_ARCHIVE_BASIC_TEXT_OARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_text_oarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+// archives stored as text - note these ar templated on the basic
+// stream templates to accommodate wide (and other?) kind of characters
+//
+// note the fact that on libraries without wide characters, ostream is
+// is not a specialization of basic_ostream which in fact is not defined
+// in such cases. So we can't use basic_ostream<OStream::char_type> but rather
+// use two template parameters
+
+#include <cassert>
+#include <boost/config.hpp>
+#include <boost/pfto.hpp>
+#include <boost/detail/workaround.hpp>
+
+#include <boost/archive/detail/common_oarchive.hpp>
+#include <boost/serialization/string.hpp>
+
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+namespace boost {
+namespace archive {
+
+/////////////////////////////////////////////////////////////////////////
+// class basic_text_iarchive - read serialized objects from a input text stream
+template<class Archive>
+class basic_text_oarchive :
+ public detail::common_oarchive<Archive>
+{
+protected:
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \
+|| BOOST_WORKAROUND(__BORLANDC__,BOOST_TESTED_AT(0x560))
+public:
+#elif defined(BOOST_MSVC)
+ // for some inexplicable reason insertion of "class" generates compile erro
+ // on msvc 7.1
+ friend detail::interface_oarchive<Archive>;
+#else
+ friend class detail::interface_oarchive<Archive>;
+#endif
+ enum {
+ none,
+ eol,
+ space
+ } delimiter;
+
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+ newtoken();
+
+ void newline(){
+ delimiter = eol;
+ }
+
+ // default processing - kick back to base class. Note the
+ // extra stuff to get it passed borland compilers
+ typedef detail::common_oarchive<Archive> detail_common_oarchive;
+ template<class T>
+ void save_override(T & t, BOOST_PFTO int){
+ this->detail_common_oarchive::save_override(t, 0);
+ }
+
+ // start new objects on a new line
+ void save_override(const object_id_type & t, int){
+ this->This()->newline();
+ // and and invoke prmitive to underlying value
+ this->This()->save(t.t);
+ }
+
+ void save_override(const object_reference_type & t, int){
+ this->This()->newline();
+ // and and invoke prmitive to underlying value
+ this->This()->save(t.t);
+ }
+
+ // text file don't include the optional information
+ void save_override(const class_id_optional_type & /* t */, int){}
+
+ // note the following four overrides are necessary for some borland
+ // compilers which don't handle BOOST_STRONG_TYPE properly.
+ void save_override(const version_type & t, int){
+ // note:t.t resolves borland ambguity
+ unsigned int x = t.t;
+ * this->This() << x;
+ }
+ void save_override(const class_id_type & t, int){
+ // note:t.t resolves borland ambguity
+ int x = t.t;
+ * this->This() << x;
+ }
+ void save_override(const class_id_reference_type & t, int){
+ // note:t.t resolves borland ambguity
+ int x = t.t;
+ * this->This() << x;
+ }
+ void save_override(const class_name_type & t, int){
+ const std::string s(t);
+ * this->This() << s;
+ }
+
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+ init();
+
+ basic_text_oarchive(unsigned int flags) :
+ detail::common_oarchive<Archive>(flags),
+ delimiter(none)
+ {}
+ ~basic_text_oarchive(){}
+};
+
+} // namespace archive
+} // namespace boost
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // BOOST_ARCHIVE_BASIC_TEXT_OARCHIVE_HPP
diff --git a/boost/boost/archive/basic_text_oprimitive.hpp b/boost/boost/archive/basic_text_oprimitive.hpp
new file mode 100644
index 00000000000..fbf180118f7
--- /dev/null
+++ b/boost/boost/archive/basic_text_oprimitive.hpp
@@ -0,0 +1,169 @@
+#ifndef BOOST_ARCHIVE_BASIC_TEXT_OPRIMITIVE_HPP
+#define BOOST_ARCHIVE_BASIC_TEXT_OPRIMITIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_text_oprimitive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+// archives stored as text - note these ar templated on the basic
+// stream templates to accommodate wide (and other?) kind of characters
+//
+// note the fact that on libraries without wide characters, ostream is
+// is not a specialization of basic_ostream which in fact is not defined
+// in such cases. So we can't use basic_ostream<OStream::char_type> but rather
+// use two template parameters
+
+#include <iomanip>
+#include <locale>
+#include <cstddef> // size_t
+#include <cmath> // isnan
+#include <cassert>
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+#if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1)
+#include <boost/archive/dinkumware.hpp>
+#endif
+
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::size_t;
+ #if ! defined(BOOST_DINKUMWARE_STDLIB) && ! defined(__SGI_STL_PORT)
+ using ::locale;
+ #endif
+} // namespace std
+#endif
+
+#include <boost/limits.hpp>
+#include <boost/io/ios_state.hpp>
+#include <boost/scoped_ptr.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/archive/archive_exception.hpp>
+
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+namespace boost {
+namespace archive {
+
+class save_access;
+
+/////////////////////////////////////////////////////////////////////////
+// class basic_text_oprimitive - output of prmitives to stream
+template<class OStream>
+class basic_text_oprimitive
+{
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+protected:
+#else
+public:
+#endif
+ OStream &os;
+ io::ios_flags_saver flags_saver;
+ io::ios_precision_saver precision_saver;
+ boost::scoped_ptr<std::locale> archive_locale;
+ io::basic_ios_locale_saver<
+ BOOST_DEDUCED_TYPENAME OStream::char_type, BOOST_DEDUCED_TYPENAME OStream::traits_type
+ > locale_saver;
+
+ // default saving of primitives.
+ template<class T>
+ void save(const T &t){
+ if(os.fail())
+ boost::throw_exception(archive_exception(archive_exception::stream_error));
+ os << t;
+ }
+
+ /////////////////////////////////////////////////////////
+ // fundamental types that need special treatment
+ void save(const bool t){
+ // trap usage of invalid uninitialized boolean which would
+ // otherwise crash on load.
+#ifndef NDEBUG
+ int i = t;
+ assert(0 == i || 1 == i);
+#endif
+ if(os.fail())
+ boost::throw_exception(archive_exception(archive_exception::stream_error));
+ os << t;
+ }
+ void save(const signed char t)
+ {
+ if(os.fail())
+ boost::throw_exception(archive_exception(archive_exception::stream_error));
+ os << static_cast<short int>(t);
+ }
+ void save(const unsigned char t)
+ {
+ if(os.fail())
+ boost::throw_exception(archive_exception(archive_exception::stream_error));
+ os << static_cast<short unsigned int>(t);
+ }
+ void save(const char t)
+ {
+ if(os.fail())
+ boost::throw_exception(archive_exception(archive_exception::stream_error));
+ os << static_cast<short int>(t);
+ }
+ #ifndef BOOST_NO_INTRINSIC_WCHAR_T
+ void save(const wchar_t t)
+ {
+ if(os.fail())
+ boost::throw_exception(archive_exception(archive_exception::stream_error));
+ os << static_cast<int>(t);
+ }
+ #endif
+ void save(const float t)
+ {
+ // must be a user mistake - can't serialize un-initialized data
+ if(os.fail())
+ boost::throw_exception(archive_exception(archive_exception::stream_error));
+ os << std::setprecision(std::numeric_limits<float>::digits10 + 2);
+ os << t;
+ }
+ void save(const double t)
+ {
+ // must be a user mistake - can't serialize un-initialized data
+ if(os.fail())
+ boost::throw_exception(archive_exception(archive_exception::stream_error));
+ os << std::setprecision(std::numeric_limits<double>::digits10 + 2);
+ os << t;
+ }
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY())
+ basic_text_oprimitive(OStream & os, bool no_codecvt);
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY())
+ ~basic_text_oprimitive();
+public:
+ // unformatted append of one character
+ void put(int c){
+ if(os.fail())
+ boost::throw_exception(archive_exception(archive_exception::stream_error));
+ os.put(c);
+ }
+ // unformatted append of null terminated string
+ void put(const char * s){
+ if(os.fail())
+ boost::throw_exception(archive_exception(archive_exception::stream_error));
+ while('\0' != *s)
+ os.put(*s++);
+ }
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+ save_binary(const void *address, std::size_t count);
+};
+
+} //namespace boost
+} //namespace archive
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // BOOST_ARCHIVE_BASIC_TEXT_OPRIMITIVE_HPP
diff --git a/boost/boost/archive/basic_xml_archive.hpp b/boost/boost/archive/basic_xml_archive.hpp
new file mode 100644
index 00000000000..aa4f32d74b9
--- /dev/null
+++ b/boost/boost/archive/basic_xml_archive.hpp
@@ -0,0 +1,102 @@
+#ifndef BOOST_ARCHIVE_BASIC_XML_TEXT_ARCHIVE_HPP
+#define BOOST_ARCHIVE_BASIC_XML_TEXT_ARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_xml_archive.hpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/archive/detail/auto_link_archive.hpp>
+#include <boost/archive/archive_exception.hpp>
+
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+namespace boost {
+namespace archive {
+
+//////////////////////////////////////////////////////////////////////
+// exceptions thrown by xml archives
+//
+class xml_archive_exception :
+ public virtual archive_exception
+{
+public:
+ typedef enum {
+ xml_archive_parsing_error, // see save_register
+ xml_archive_tag_mismatch,
+ xml_archive_tag_name_error
+ } exception_code;
+ xml_archive_exception(exception_code /* c */)
+ {}
+ virtual const char *what( ) const throw( )
+ {
+ const char *msg;
+ switch(code){
+ case xml_archive_parsing_error:
+ msg = "unrecognized XML syntax";
+ break;
+ case xml_archive_tag_mismatch:
+ msg = "XML start/end tag mismatch";
+ break;
+ case xml_archive_tag_name_error:
+ msg = "Invalid XML tag name";
+ break;
+ default:
+ msg = archive_exception::what();
+ break;
+ }
+ return msg;
+ }
+};
+
+// constant strings used in xml i/o
+
+extern
+BOOST_ARCHIVE_DECL(const char *)
+OBJECT_ID();
+
+extern
+BOOST_ARCHIVE_DECL(const char *)
+OBJECT_REFERENCE();
+
+extern
+BOOST_ARCHIVE_DECL(const char *)
+CLASS_ID();
+
+extern
+BOOST_ARCHIVE_DECL(const char *)
+CLASS_ID_REFERENCE();
+
+extern
+BOOST_ARCHIVE_DECL(const char *)
+CLASS_NAME();
+
+extern
+BOOST_ARCHIVE_DECL(const char *)
+TRACKING();
+
+extern
+BOOST_ARCHIVE_DECL(const char *)
+VERSION();
+
+extern
+BOOST_ARCHIVE_DECL(const char *)
+SIGNATURE();
+
+}// namespace archive
+}// namespace boost
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // BOOST_ARCHIVE_BASIC_XML_TEXT_ARCHIVE_HPP
+
diff --git a/boost/boost/archive/basic_xml_iarchive.hpp b/boost/boost/archive/basic_xml_iarchive.hpp
new file mode 100644
index 00000000000..fc468bede83
--- /dev/null
+++ b/boost/boost/archive/basic_xml_iarchive.hpp
@@ -0,0 +1,115 @@
+#ifndef BOOST_ARCHIVE_BASIC_XML_IARCHIVE_HPP
+#define BOOST_ARCHIVE_BASIC_XML_IARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_xml_iarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+#include <boost/pfto.hpp>
+#include <boost/detail/workaround.hpp>
+
+#include <boost/archive/detail/common_iarchive.hpp>
+
+#include <boost/serialization/nvp.hpp>
+#include <boost/serialization/string.hpp>
+
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+namespace boost {
+namespace archive {
+
+/////////////////////////////////////////////////////////////////////////
+// class xml_iarchive - read serialized objects from a input text stream
+template<class Archive>
+class basic_xml_iarchive :
+ public detail::common_iarchive<Archive>
+{
+protected:
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+public:
+#elif defined(BOOST_MSVC)
+ // for some inexplicable reason insertion of "class" generates compile erro
+ // on msvc 7.1
+ friend detail::interface_oarchive<Archive>;
+#else
+ friend class detail::interface_oarchive<Archive>;
+#endif
+ unsigned int depth;
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+ load_start(const char *name);
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+ load_end(const char *name);
+
+ // Anything not an attribute and not a name-value pair is an
+ // should be trapped here.
+ template<class T>
+ void load_override(T & t, BOOST_PFTO int)
+ {
+ // If your program fails to compile here, its most likely due to
+ // not specifying an nvp wrapper around the variable to
+ // be serialized.
+ BOOST_STATIC_ASSERT(0 == sizeof(T));
+ }
+
+ // Anything not an attribute - see below - should be a name value
+ // pair and be processed here
+ typedef detail::common_iarchive<Archive> detail_common_iarchive;
+ template<class T>
+ void load_override(
+ #ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+ const
+ #endif
+ boost::serialization::nvp<T> & t,
+ int
+ ){
+ load_start(t.name());
+ this->detail_common_iarchive::load_override(t.value(), 0);
+ load_end(t.name());
+ }
+
+ // specific overrides for attributes - handle as
+ // primitives. These are not name-value pairs
+ // so they have to be intercepted here and passed on to load.
+ // although the class_id is included in the xml text file in order
+ // to make the file self describing, it isn't used when loading
+ // an xml archive. So we can skip it here. Note: we MUST override
+ // it otherwise it will be loaded as a normal primitive w/o tag and
+ // leaving the archive in an undetermined state
+ void load_override(class_id_optional_type & /* t */, int){}
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+ load_override(object_id_type & t, int);
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+ load_override(version_type & t, int);
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+ load_override(class_id_type & t, int);
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+ load_override(tracking_type & t, int);
+ // class_name_type can't be handled here as it depends upon the
+ // char type used by the stream. So require the derived implementation
+ // handle this.
+ // void load_override(class_name_type & t, int);
+
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY())
+ basic_xml_iarchive(unsigned int flags);
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY())
+ ~basic_xml_iarchive();
+};
+
+} // namespace archive
+} // namespace boost
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // BOOST_ARCHIVE_BASIC_XML_IARCHIVE_HPP
diff --git a/boost/boost/archive/basic_xml_oarchive.hpp b/boost/boost/archive/basic_xml_oarchive.hpp
new file mode 100644
index 00000000000..7c3503f742c
--- /dev/null
+++ b/boost/boost/archive/basic_xml_oarchive.hpp
@@ -0,0 +1,131 @@
+#ifndef BOOST_ARCHIVE_BASIC_XML_OARCHIVE_HPP
+#define BOOST_ARCHIVE_BASIC_XML_OARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_xml_oarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+
+#include <boost/archive/detail/common_oarchive.hpp>
+
+#include <boost/serialization/nvp.hpp>
+#include <boost/serialization/tracking.hpp>
+#include <boost/serialization/string.hpp>
+
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+namespace boost {
+namespace archive {
+
+//////////////////////////////////////////////////////////////////////
+// class basic_xml_oarchive - write serialized objects to a xml output stream
+template<class Archive>
+class basic_xml_oarchive :
+ public detail::common_oarchive<Archive>
+{
+protected:
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+public:
+#elif defined(BOOST_MSVC)
+ // for some inexplicable reason insertion of "class" generates compile erro
+ // on msvc 7.1
+ friend detail::interface_oarchive<Archive>;
+#else
+ friend class detail::interface_oarchive<Archive>;
+#endif
+ // special stuff for xml output
+ unsigned int depth;
+ bool indent_next;
+ bool pending_preamble;
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+ indent();
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+ init();
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+ write_attribute(
+ const char *attribute_name,
+ int t,
+ const char *conjunction = "=\""
+ );
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+ write_attribute(
+ const char *attribute_name,
+ const char *key
+ );
+ // helpers used below
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+ save_start(const char *name);
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+ save_end(const char *name);
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+ end_preamble();
+
+ // Anything not an attribute and not a name-value pair is an
+ // error and should be trapped here.
+ template<class T>
+ void save_override(T & t, BOOST_PFTO int)
+ {
+ // If your program fails to compile here, its most likely due to
+ // not specifying an nvp wrapper around the variable to
+ // be serialized.
+ BOOST_STATIC_ASSERT(0 == sizeof(T));
+ }
+
+ // special treatment for name-value pairs.
+ typedef detail::common_oarchive<Archive> detail_common_oarchive;
+ template<class T>
+ void save_override(
+ #ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+ const
+ #endif
+ ::boost::serialization::nvp<T> & t,
+ int
+ ){
+ save_start(t.name());
+ this->detail_common_oarchive::save_override(t.const_value(), 0);
+ save_end(t.name());
+ }
+
+ // specific overrides for attributes - not name value pairs so we
+ // want to trap them before the above "fall through"
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+ save_override(const object_id_type & t, int);
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+ save_override(const object_reference_type & t, int);
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+ save_override(const version_type & t, int);
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+ save_override(const class_id_type & t, int);
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+ save_override(const class_id_optional_type & t, int);
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+ save_override(const class_id_reference_type & t, int);
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+ save_override(const class_name_type & t, int);
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+ save_override(const tracking_type & t, int);
+
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY())
+ basic_xml_oarchive(unsigned int flags);
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY())
+ ~basic_xml_oarchive();
+};
+
+} // namespace archive
+} // namespace boost
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // BOOST_ARCHIVE_BASIC_XML_OARCHIVE_HPP
diff --git a/boost/boost/archive/binary_iarchive.hpp b/boost/boost/archive/binary_iarchive.hpp
new file mode 100644
index 00000000000..1090e43ae01
--- /dev/null
+++ b/boost/boost/archive/binary_iarchive.hpp
@@ -0,0 +1,55 @@
+#ifndef BOOST_ARCHIVE_BINARY_IARCHIVE_HPP
+#define BOOST_ARCHIVE_BINARY_IARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// binary_iarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <istream>
+#include <boost/archive/binary_iarchive_impl.hpp>
+
+namespace boost {
+namespace archive {
+
+// do not derive from this class. If you want to extend this functionality
+// via inhertance, derived from binary_iarchive_impl instead. This will
+// preserve correct static polymorphism.
+class binary_iarchive :
+ public binary_iarchive_impl<
+ boost::archive::binary_iarchive,
+ std::istream::char_type,
+ std::istream::traits_type
+ >
+{
+public:
+ binary_iarchive(std::istream & is, unsigned int flags = 0) :
+ binary_iarchive_impl<
+ binary_iarchive, std::istream::char_type, std::istream::traits_type
+ >(is, flags)
+ {}
+ binary_iarchive(std::streambuf & bsb, unsigned int flags = 0) :
+ binary_iarchive_impl<
+ binary_iarchive, std::istream::char_type, std::istream::traits_type
+ >(bsb, flags)
+ {}
+};
+
+} // namespace archive
+} // namespace boost
+
+// required by smart_cast for compilers not implementing
+// partial template specialization
+BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(boost::archive::binary_iarchive)
+
+#endif // BOOST_ARCHIVE_BINARY_IARCHIVE_HPP
diff --git a/boost/boost/archive/binary_iarchive_impl.hpp b/boost/boost/archive/binary_iarchive_impl.hpp
new file mode 100644
index 00000000000..a3adf99ab41
--- /dev/null
+++ b/boost/boost/archive/binary_iarchive_impl.hpp
@@ -0,0 +1,87 @@
+#ifndef BOOST_ARCHIVE_BINARY_IARCHIVE_IMPL_HPP
+#define BOOST_ARCHIVE_BINARY_IARCHIVE_IMPL_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// binary_iarchive_impl.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <istream>
+#include <boost/pfto.hpp>
+#include <boost/archive/basic_binary_iprimitive.hpp>
+#include <boost/archive/basic_binary_iarchive.hpp>
+
+namespace boost {
+namespace archive {
+
+template<class Archive, class Elem, class Tr>
+class binary_iarchive_impl :
+ public basic_binary_iprimitive<Archive, Elem, Tr>,
+ public basic_binary_iarchive<Archive>
+{
+#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+public:
+#else
+ friend class detail::interface_iarchive<Archive>;
+ friend class basic_binary_iarchive<Archive>;
+ friend class load_access;
+protected:
+#endif
+ // note: the following should not needed - but one compiler (vc 7.1)
+ // fails to compile one test (test_shared_ptr) without it !!!
+ // make this protected so it can be called from a derived archive
+ template<class T>
+ void load_override(T & t, BOOST_PFTO int){
+ basic_binary_iarchive<Archive>::load_override(t, 0);
+ }
+ void init(unsigned int flags){
+ if(0 != (flags & no_header))
+ return;
+ #if ! defined(__MWERKS__)
+ this->basic_binary_iarchive<Archive>::init();
+ this->basic_binary_iprimitive<Archive, Elem, Tr>::init();
+ #else
+ basic_binary_iarchive<Archive>::init();
+ basic_binary_iprimitive<Archive, Elem, Tr>::init();
+ #endif
+ }
+ binary_iarchive_impl(
+ std::basic_streambuf<Elem, Tr> & bsb,
+ unsigned int flags
+ ) :
+ basic_binary_iprimitive<Archive, Elem, Tr>(
+ bsb,
+ 0 != (flags & no_codecvt)
+ ),
+ basic_binary_iarchive<Archive>(flags)
+ {
+ init(flags);
+ }
+ binary_iarchive_impl(
+ std::basic_istream<Elem, Tr> & is,
+ unsigned int flags
+ ) :
+ basic_binary_iprimitive<Archive, Elem, Tr>(
+ * is.rdbuf(),
+ 0 != (flags & no_codecvt)
+ ),
+ basic_binary_iarchive<Archive>(flags)
+ {
+ init(flags);
+ }
+};
+
+} // namespace archive
+} // namespace boost
+
+#endif // BOOST_ARCHIVE_BINARY_IARCHIVE_IMPL_HPP
diff --git a/boost/boost/archive/binary_oarchive.hpp b/boost/boost/archive/binary_oarchive.hpp
new file mode 100644
index 00000000000..3bf5b542c23
--- /dev/null
+++ b/boost/boost/archive/binary_oarchive.hpp
@@ -0,0 +1,53 @@
+#ifndef BOOST_ARCHIVE_BINARY_OARCHIVE_HPP
+#define BOOST_ARCHIVE_BINARY_OARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// binary_oarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <ostream>
+#include <boost/archive/binary_oarchive_impl.hpp>
+
+namespace boost {
+namespace archive {
+
+// do not derive from this class. If you want to extend this functionality
+// via inhertance, derived from binary_oarchive_impl instead. This will
+// preserve correct static polymorphism.
+class binary_oarchive :
+ public binary_oarchive_impl<
+ binary_oarchive, std::ostream::char_type, std::ostream::traits_type
+ >
+{
+public:
+ binary_oarchive(std::ostream & os, unsigned int flags = 0) :
+ binary_oarchive_impl<
+ binary_oarchive, std::ostream::char_type, std::ostream::traits_type
+ >(os, flags)
+ {}
+ binary_oarchive(std::streambuf & bsb, unsigned int flags = 0) :
+ binary_oarchive_impl<
+ binary_oarchive, std::ostream::char_type, std::ostream::traits_type
+ >(bsb, flags)
+ {}
+};
+
+} // namespace archive
+} // namespace boost
+
+// required by smart_cast for compilers not implementing
+// partial template specialization
+BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(boost::archive::binary_oarchive)
+
+#endif // BOOST_ARCHIVE_BINARY_OARCHIVE_HPP
diff --git a/boost/boost/archive/binary_oarchive_impl.hpp b/boost/boost/archive/binary_oarchive_impl.hpp
new file mode 100644
index 00000000000..67e53c3fd51
--- /dev/null
+++ b/boost/boost/archive/binary_oarchive_impl.hpp
@@ -0,0 +1,87 @@
+#ifndef BOOST_ARCHIVE_BINARY_OARCHIVE_IMPL_HPP
+#define BOOST_ARCHIVE_BINARY_OARCHIVE_IMPL_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// binary_oarchive_impl.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <ostream>
+#include <boost/pfto.hpp>
+#include <boost/archive/basic_binary_oprimitive.hpp>
+#include <boost/archive/basic_binary_oarchive.hpp>
+
+namespace boost {
+namespace archive {
+
+template<class Archive, class Elem, class Tr>
+class binary_oarchive_impl :
+ public basic_binary_oprimitive<Archive, Elem, Tr>,
+ public basic_binary_oarchive<Archive>
+{
+#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+public:
+#else
+ friend class detail::interface_oarchive<Archive>;
+ friend class basic_binary_oarchive<Archive>;
+ friend class save_access;
+protected:
+#endif
+ // note: the following should not needed - but one compiler (vc 7.1)
+ // fails to compile one test (test_shared_ptr) without it !!!
+ // make this protected so it can be called from a derived archive
+ template<class T>
+ void save_override(T & t, BOOST_PFTO int){
+ basic_binary_oarchive<Archive>::save_override(t, 0);
+ }
+ void init(unsigned int flags) {
+ if(0 != (flags & no_header))
+ return;
+ #if ! defined(__MWERKS__)
+ this->basic_binary_oarchive<Archive>::init();
+ this->basic_binary_oprimitive<Archive, Elem, Tr>::init();
+ #else
+ basic_binary_oarchive<Archive>::init();
+ basic_binary_oprimitive<Archive, Elem, Tr>::init();
+ #endif
+ }
+ binary_oarchive_impl(
+ std::basic_streambuf<Elem, Tr> & bsb,
+ unsigned int flags
+ ) :
+ basic_binary_oprimitive<Archive, Elem, Tr>(
+ bsb,
+ 0 != (flags & no_codecvt)
+ ),
+ basic_binary_oarchive<Archive>(flags)
+ {
+ init(flags);
+ }
+ binary_oarchive_impl(
+ std::basic_ostream<Elem, Tr> & os,
+ unsigned int flags
+ ) :
+ basic_binary_oprimitive<Archive, Elem, Tr>(
+ * os.rdbuf(),
+ 0 != (flags & no_codecvt)
+ ),
+ basic_binary_oarchive<Archive>(flags)
+ {
+ init(flags);
+ }
+};
+
+} // namespace archive
+} // namespace boost
+
+#endif // BOOST_ARCHIVE_BINARY_OARCHIVE_IMPL_HPP
diff --git a/boost/boost/archive/binary_wiarchive.hpp b/boost/boost/archive/binary_wiarchive.hpp
new file mode 100644
index 00000000000..db975c908a8
--- /dev/null
+++ b/boost/boost/archive/binary_wiarchive.hpp
@@ -0,0 +1,59 @@
+#ifndef BOOST_ARCHIVE_BINARY_WIARCHIVE_HPP
+#define BOOST_ARCHIVE_BINARY_WIARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// binary_wiarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+#ifdef BOOST_NO_STD_WSTREAMBUF
+#error "wide char i/o not supported on this platform"
+#else
+
+#include <istream> // wistream
+#include <boost/archive/binary_iarchive_impl.hpp>
+
+namespace boost {
+namespace archive {
+
+// do not derive from this class. If you want to extend this functionality
+// via inhertance, derived from binary_iarchive_impl instead. This will
+// preserve correct static polymorphism.
+class binary_wiarchive :
+ public binary_iarchive_impl<
+ binary_wiarchive, std::wistream::char_type, std::wistream::traits_type
+ >
+{
+public:
+ binary_wiarchive(std::wistream & is, unsigned int flags = 0) :
+ binary_iarchive_impl<
+ binary_wiarchive, std::wistream::char_type, std::wistream::traits_type
+ >(is, flags)
+ {}
+ binary_wiarchive(std::wstreambuf & bsb, unsigned int flags = 0) :
+ binary_iarchive_impl<
+ binary_wiarchive, std::wistream::char_type, std::wistream::traits_type
+ >(bsb, flags)
+ {}
+};
+
+} // namespace archive
+} // namespace boost
+
+// required by smart_cast for compilers not implementing
+// partial template specialization
+BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(boost::archive::binary_wiarchive)
+
+#endif // BOOST_NO_STD_WSTREAMBUF
+#endif // BOOST_ARCHIVE_BINARY_WIARCHIVE_HPP
diff --git a/boost/boost/archive/binary_woarchive.hpp b/boost/boost/archive/binary_woarchive.hpp
new file mode 100644
index 00000000000..97880840eef
--- /dev/null
+++ b/boost/boost/archive/binary_woarchive.hpp
@@ -0,0 +1,59 @@
+#ifndef BOOST_ARCHIVE_BINARY_WOARCHIVE_HPP
+#define BOOST_ARCHIVE_BINARY_WOARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// binary_woarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+#ifdef BOOST_NO_STD_WSTREAMBUF
+#error "wide char i/o not supported on this platform"
+#else
+
+#include <ostream>
+#include <boost/archive/binary_oarchive_impl.hpp>
+
+namespace boost {
+namespace archive {
+
+// do not derive from this class. If you want to extend this functionality
+// via inhertance, derived from binary_oarchive_impl instead. This will
+// preserve correct static polymorphism.
+class binary_woarchive :
+ public binary_oarchive_impl<
+ binary_woarchive, std::wostream::char_type, std::wostream::traits_type
+ >
+{
+public:
+ binary_woarchive(std::wostream & os, unsigned int flags = 0) :
+ binary_oarchive_impl<
+ binary_woarchive, std::wostream::char_type, std::wostream::traits_type
+ >(os, flags)
+ {}
+ binary_woarchive(std::wstreambuf & bsb, unsigned int flags = 0) :
+ binary_oarchive_impl<
+ binary_woarchive, std::wostream::char_type, std::wostream::traits_type
+ >(bsb, flags)
+ {}
+};
+
+} // namespace archive
+} // namespace boost
+
+// required by smart_cast for compilers not implementing
+// partial template specialization
+BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(boost::archive::binary_woarchive)
+
+#endif // BOOST_NO_STD_WSTREAMBUF
+#endif // BOOST_ARCHIVE_BINARY_WOARCHIVE_HPP
diff --git a/boost/boost/archive/codecvt_null.hpp b/boost/boost/archive/codecvt_null.hpp
new file mode 100644
index 00000000000..18c4e20dbee
--- /dev/null
+++ b/boost/boost/archive/codecvt_null.hpp
@@ -0,0 +1,90 @@
+#ifndef BOOST_ARCHIVE_CODECVT_NULL_HPP
+#define BOOST_ARCHIVE_CODECVT_NULL_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// codecvt_null.hpp:
+
+// (C) Copyright 2004 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <locale>
+#include <cstddef>
+
+#include <boost/config.hpp>
+
+namespace std{
+ #if defined(__LIBCOMO__)
+ using ::mbstate_t;
+ #elif defined(__QNXNTO__)
+ using std::mbstate_t;
+ #elif defined(BOOST_DINKUMWARE_STDLIB) && BOOST_DINKUMWARE_STDLIB == 1
+ using ::mbstate_t;
+ #elif defined(__SGI_STL_PORT)
+ #elif defined(BOOST_NO_STDC_NAMESPACE)
+ using ::codecvt;
+ using ::mbstate_t;
+ #endif
+} // namespace std
+
+namespace boost {
+namespace archive {
+
+template<class Ch>
+class codecvt_null;
+
+template<>
+class codecvt_null<char> : public std::codecvt<char, char, std::mbstate_t>
+{
+ virtual bool do_always_noconv() const throw() {
+ return true;
+ }
+public:
+ explicit codecvt_null(std::size_t no_locale_manage = 0) :
+ std::codecvt<char, char, std::mbstate_t>(no_locale_manage)
+ {}
+};
+
+template<>
+class codecvt_null<wchar_t> : public std::codecvt<wchar_t, char, std::mbstate_t>
+{
+ virtual std::codecvt_base::result
+ do_out(
+ std::mbstate_t & state,
+ const wchar_t * first1,
+ const wchar_t * last1,
+ const wchar_t * & next1,
+ char * first2,
+ char * last2,
+ char * & next2
+ ) const;
+ virtual std::codecvt_base::result
+ do_in(
+ std::mbstate_t & state,
+ const char * first1,
+ const char * last1,
+ const char * & next1,
+ wchar_t * first2,
+ wchar_t * last2,
+ wchar_t * & next2
+ ) const;
+ virtual int do_encoding( ) const throw( ){
+ return sizeof(wchar_t) / sizeof(char);
+ }
+ virtual int do_max_length( ) const throw( ){
+ return do_encoding();
+ }
+};
+
+} // namespace archive
+} // namespace boost
+
+#endif //BOOST_ARCHIVE_CODECVT_NULL_HPP
diff --git a/boost/boost/archive/detail/abi_prefix.hpp b/boost/boost/archive/detail/abi_prefix.hpp
new file mode 100644
index 00000000000..af9fd6ce44a
--- /dev/null
+++ b/boost/boost/archive/detail/abi_prefix.hpp
@@ -0,0 +1,15 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// abi_prefix.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config/abi_prefix.hpp> // must be the last header
+#ifdef BOOST_MSVC
+# pragma warning(push)
+# pragma warning(disable : 4251 4231 4660 4275)
+#endif
diff --git a/boost/boost/archive/detail/abi_suffix.hpp b/boost/boost/archive/detail/abi_suffix.hpp
new file mode 100644
index 00000000000..2e0dfa37b2a
--- /dev/null
+++ b/boost/boost/archive/detail/abi_suffix.hpp
@@ -0,0 +1,14 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// abi_suffix.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+#include <boost/config/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
diff --git a/boost/boost/archive/detail/archive_pointer_iserializer.hpp b/boost/boost/archive/detail/archive_pointer_iserializer.hpp
new file mode 100644
index 00000000000..db63aebe46d
--- /dev/null
+++ b/boost/boost/archive/detail/archive_pointer_iserializer.hpp
@@ -0,0 +1,92 @@
+#ifndef BOOST_ARCHIVE_ARCHIVE_POINTER_ISERIALIZER_POINTER_HPP
+#define BOOST_ARCHIVE_ARCHIVE_POINTER_ISERIALIZER_POINTER_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// archive_pointer_iserializer.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <cassert>
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+#include <boost/archive/detail/basic_serializer.hpp>
+#include <boost/archive/detail/basic_pointer_iserializer.hpp>
+
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+namespace boost {
+
+namespace serialization {
+ class extended_type_info;
+} // namespace serialization
+
+namespace archive {
+namespace detail {
+
+template<class Archive>
+class archive_pointer_iserializer :
+ public basic_pointer_iserializer {
+protected:
+ explicit BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY())
+ archive_pointer_iserializer(
+ const boost::serialization::extended_type_info & eti
+ );
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY())
+ // account for bogus gcc warning
+ #if defined(__GNUC__)
+ virtual
+ #endif
+ ~archive_pointer_iserializer();
+public:
+ virtual const basic_iserializer & get_basic_serializer() const
+ // mscvc 6.0 requires template functions to be implemented. For this
+ // reason we can't make abstract.
+ #if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) || defined(__MWERKS__)
+ {
+ assert(false);
+ return *static_cast<const basic_iserializer *>(NULL);
+ }
+ #else
+ = 0;
+ #endif
+ virtual void load_object_ptr(
+ basic_iarchive & ar,
+ void * & x,
+ const unsigned int file_version
+ ) const
+ #if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) || defined(__MWERKS__)
+ {
+ assert(false);
+ }
+ #else
+ = 0;
+ #endif
+ // return the type_extended load pointer corresponding to a given
+ // type_info. returns NULL if there is no such instance. This
+ // would indicate that the no object of the specified type was loaded
+ // any where in the code.
+ static
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(const basic_pointer_iserializer *)
+ find(
+ const boost::serialization::extended_type_info & eti
+ );
+};
+
+} // namespace detail
+} // namespace archive
+} // namespace boost
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // BOOST_ARCHIVE_ARCHIVE_POINTER_ISERIALIZER_POINTER_HPP
diff --git a/boost/boost/archive/detail/archive_pointer_oserializer.hpp b/boost/boost/archive/detail/archive_pointer_oserializer.hpp
new file mode 100644
index 00000000000..00005113a96
--- /dev/null
+++ b/boost/boost/archive/detail/archive_pointer_oserializer.hpp
@@ -0,0 +1,67 @@
+#ifndef BOOST_ARCHIVE_ARCHIVE_POINTER_OSERIALIZER_POINTER_HPP
+#define BOOST_ARCHIVE_ARCHIVE_POINTER_OSERIALIZER_POINTER_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// archive_pointer_oserializer.hpp: extenstion of type_info required for
+// serialization.
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+#include <boost/archive/detail/basic_serializer.hpp>
+#include <boost/archive/detail/basic_pointer_oserializer.hpp>
+
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+namespace boost {
+
+namespace serialization {
+ class extended_type_info;
+} // namespace serialization
+
+namespace archive {
+namespace detail {
+
+template<class Archive>
+class archive_pointer_oserializer :
+ public basic_pointer_oserializer {
+protected:
+ explicit BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY())
+ archive_pointer_oserializer(
+ const boost::serialization::extended_type_info & eti
+ );
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY())
+ // account for bogus gcc warning
+ #if defined(__GNUC__)
+ virtual
+ #endif
+ ~archive_pointer_oserializer();
+public:
+ // return the type_extended save pointer corresponding to a give
+ // type_info. returns NULL, if there is no such instance. This
+ // would indicate that the no object of the specified type was saved
+ // any where in the code.
+ static
+ BOOST_ARCHIVE_OR_WARCHIVE_DECL(const basic_pointer_oserializer *)
+ find(
+ const boost::serialization::extended_type_info & eti
+ );
+};
+
+} // namespace detail
+} // namespace archive
+} // namespace boost
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // BOOST_ARCHIVE_ARCHIVE_POINTER_OSERIALIZER_POINTER_HPP
diff --git a/boost/boost/archive/detail/auto_link_archive.hpp b/boost/boost/archive/detail/auto_link_archive.hpp
new file mode 100644
index 00000000000..126f66d3328
--- /dev/null
+++ b/boost/boost/archive/detail/auto_link_archive.hpp
@@ -0,0 +1,47 @@
+#ifndef BOOST_ARCHIVE_DETAIL_AUTO_LINK_ARCHIVE_HPP
+#define BOOST_ARCHIVE_DETAIL_AUTO_LINK_ARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// auto_link_archive.hpp
+//
+// © Copyright Robert Ramey 2004
+// Use, modification, and distribution is 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)
+
+// See library home page at http://www.boost.org/libs/serialization
+
+//----------------------------------------------------------------------------//
+
+// This header implements separate compilation features as described in
+// http://www.boost.org/more/separate_compilation.html
+
+// enable automatic library variant selection ------------------------------//
+
+#include <boost/archive/detail/decl.hpp>
+
+#if !defined(BOOST_ARCHIVE_SOURCE) \
+&& !defined(BOOST_ALL_NO_LIB) && !defined(BOOST_SERIALIZATION_NO_LIB)
+
+// Set the name of our library, this will get undef'ed by auto_link.hpp
+// once it's done with it:
+//
+#define BOOST_LIB_NAME boost_serialization
+//
+// If we're importing code from a dll, then tell auto_link.hpp about it:
+//
+#if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_SERIALIZATION_DYN_LINK)
+# define BOOST_DYN_LINK
+#endif
+//
+// And include the header that does the work:
+//
+#include <boost/config/auto_link.hpp>
+#endif // auto-linking disabled
+
+#endif // ARCHIVE_DETAIL_AUTO_LINK_ARCHIVE_HPP
diff --git a/boost/boost/archive/detail/auto_link_warchive.hpp b/boost/boost/archive/detail/auto_link_warchive.hpp
new file mode 100644
index 00000000000..2ef45f8adce
--- /dev/null
+++ b/boost/boost/archive/detail/auto_link_warchive.hpp
@@ -0,0 +1,47 @@
+#ifndef BOOST_ARCHIVE_DETAIL_AUTO_LINK_WARCHIVE_HPP
+#define BOOST_ARCHIVE_DETAIL_AUTO_LINK_WARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// auto_link_warchive.hpp
+//
+// © Copyright Robert Ramey 2004
+// Use, modification, and distribution is 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)
+
+// See library home page at http://www.boost.org/libs/serialization
+
+//----------------------------------------------------------------------------//
+
+// This header implements separate compilation features as described in
+// http://www.boost.org/more/separate_compilation.html
+
+// enable automatic library variant selection ------------------------------//
+
+#include <boost/archive/detail/decl.hpp>
+
+#if !defined(BOOST_WARCHIVE_SOURCE) \
+&& !defined(BOOST_ALL_NO_LIB) && !defined(BOOST_SERIALIZATION_NO_LIB)
+
+// Set the name of our library, this will get undef'ed by auto_link.hpp
+// once it's done with it:
+//
+#define BOOST_LIB_NAME boost_wserialization
+//
+// If we're importing code from a dll, then tell auto_link.hpp about it:
+//
+#if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_SERIALIZATION_DYN_LINK)
+# define BOOST_DYN_LINK
+#endif
+//
+// And include the header that does the work:
+//
+#include <boost/config/auto_link.hpp>
+#endif // auto-linking disabled
+
+#endif // ARCHIVE_DETAIL_AUTO_LINK_ARCHIVE_HPP
diff --git a/boost/boost/archive/detail/basic_archive_impl.hpp b/boost/boost/archive/detail/basic_archive_impl.hpp
new file mode 100644
index 00000000000..a63b96e5365
--- /dev/null
+++ b/boost/boost/archive/detail/basic_archive_impl.hpp
@@ -0,0 +1,91 @@
+#ifndef BOOST_ARCHIVE_DETAIL_BASIC_ARCHIVE_IMPL_HPP
+#define BOOST_ARCHIVE_DETAIL_BASIC_ARCHIVE_IMPL_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_archive_impl.hpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+// can't use this - much as I'd like to as borland doesn't support it
+// #include <boost/scoped_ptr.hpp>
+
+#include <set>
+#include <boost/shared_ptr.hpp>
+
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+namespace boost {
+namespace serialization {
+ class extended_type_info;
+} // namespace serialization
+
+namespace archive {
+namespace detail {
+
+//////////////////////////////////////////////////////////////////////
+class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_archive_impl
+{
+ //////////////////////////////////////////////////////////////////////
+ // list of serialization helpers
+ // at least one compiler sunpro 5.3 erroneously doesn't give access to embedded structs
+ struct helper_compare;
+ friend struct helper_compare;
+
+ struct helper_type {
+ shared_ptr<void> m_helper;
+ const boost::serialization::extended_type_info * m_eti;
+ helper_type(
+ shared_ptr<void> h,
+ const boost::serialization::extended_type_info * const eti
+ ) :
+ m_helper(h),
+ m_eti(eti)
+ {}
+ };
+
+ struct helper_compare {
+ bool operator()(
+ const helper_type & lhs,
+ const helper_type & rhs
+ ) const {
+ return lhs.m_eti < rhs.m_eti;
+ }
+ };
+
+ typedef std::set<helper_type, helper_compare> collection;
+ typedef collection::iterator helper_iterator;
+ typedef collection::const_iterator helper_const_iterator;
+ collection m_helpers;
+protected:
+ void
+ lookup_helper(
+ const boost::serialization::extended_type_info * const eti,
+ shared_ptr<void> & sph
+ );
+ void
+ insert_helper(
+ const boost::serialization::extended_type_info * const eti,
+ shared_ptr<void> & sph
+ );
+};
+
+} // namespace detail
+} // namespace serialization
+} // namespace boost
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif //BOOST_ARCHIVE_DETAIL_BASIC_ARCHIVE_IMPL_HPP
+
+
+
diff --git a/boost/boost/archive/detail/basic_config.hpp b/boost/boost/archive/detail/basic_config.hpp
new file mode 100644
index 00000000000..8aa9612fe1c
--- /dev/null
+++ b/boost/boost/archive/detail/basic_config.hpp
@@ -0,0 +1,45 @@
+#ifndef BOOST_ARCHIVE_DETAIL_BASIC_CONFIG_HPP
+#define BOOST_ARCHIVE_DETAIL_BASIC_CONFIG_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+// basic_config.hpp ---------------------------------------------//
+
+// © Copyright Robert Ramey 2004
+// Use, modification, and distribution is 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)
+
+// See library home page at http://www.boost.org/libs/serialization
+
+//----------------------------------------------------------------------------//
+
+// This header implements separate compilation features as described in
+// http://www.boost.org/more/separate_compilation.html
+
+#include <boost/config.hpp>
+
+#ifdef BOOST_HAS_DECLSPEC // defined in config system
+// we need to import/export our code only if the user has specifically
+// asked for it by defining either BOOST_ALL_DYN_LINK if they want all boost
+// libraries to be dynamically linked, or BOOST_ARCHIVE_DYN_LINK
+// if they want just this one to be dynamically linked:
+#if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_ARCHIVE_DYN_LINK)
+// export if this is our own source, otherwise import:
+#ifdef BOOST_ARCHIVE_SOURCE
+# define BOOST_ARCHIVE_DECL __declspec(dllexport)
+#else
+# define BOOST_ARCHIVE_DECL __declspec(dllimport)
+#endif // BOOST_ARCHIVE_SOURCE
+#endif // DYN_LINK
+#endif // BOOST_HAS_DECLSPEC
+//
+// if BOOST_ARCHIVE_DECL isn't defined yet define it now:
+#ifndef BOOST_ARCHIVE_DECL
+#define BOOST_ARCHIVE_DECL
+#endif
+
+#endif // BOOST_ARCHIVE_DETAIL_BASIC_CONFIG_HPP
diff --git a/boost/boost/archive/detail/basic_iarchive.hpp b/boost/boost/archive/detail/basic_iarchive.hpp
new file mode 100644
index 00000000000..b0dea6a4f30
--- /dev/null
+++ b/boost/boost/archive/detail/basic_iarchive.hpp
@@ -0,0 +1,116 @@
+#ifndef BOOST_ARCHIVE_DETAIL_BASIC_IARCHIVE_HPP
+#define BOOST_ARCHIVE_DETAIL_BASIC_IARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_iarchive.hpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+// can't use this - much as I'd like to as borland doesn't support it
+// #include <boost/scoped_ptr.hpp>
+
+#include <boost/config.hpp>
+#include <boost/archive/basic_archive.hpp>
+#include <boost/serialization/tracking_enum.hpp>
+
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+namespace boost {
+template<class T>
+class shared_ptr;
+
+namespace serialization {
+ class extended_type_info;
+} // namespace serialization
+
+namespace archive {
+namespace detail {
+
+class basic_iarchive_impl;
+class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_iserializer;
+class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_pointer_iserializer;
+//////////////////////////////////////////////////////////////////////
+// class basic_iarchive - read serialized objects from a input stream
+class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_iarchive
+{
+ friend class basic_iarchive_impl;
+ // hide implementation of this class to minimize header conclusion
+ // in client code. I couldn't used scoped pointer with borland
+ // boost::scoped_ptr<basic_iarchive_impl> pimpl;
+ basic_iarchive_impl * pimpl;
+
+ virtual void vload(version_type &t) = 0;
+ virtual void vload(object_id_type &t) = 0;
+ virtual void vload(class_id_type &t) = 0;
+ virtual void vload(class_id_optional_type &t) = 0;
+ virtual void vload(class_name_type &t) = 0;
+ virtual void vload(tracking_type &t) = 0;
+protected:
+ basic_iarchive(unsigned int flags);
+ // account for bogus gcc warning
+ #if defined(__GNUC__)
+ virtual
+ #endif
+ ~basic_iarchive();
+public:
+ // note: NOT part of the public API.
+ void next_object_pointer(void *t);
+ void register_basic_serializer(const basic_iserializer & bis);
+ void
+ lookup_basic_helper(
+ const boost::serialization::extended_type_info * const eti,
+ shared_ptr<void> & sph
+ );
+ void
+ insert_basic_helper(
+ const boost::serialization::extended_type_info * const eti,
+ shared_ptr<void> & sph
+ );
+ void load_object(
+ void *t,
+ const basic_iserializer & bis
+ );
+ const basic_pointer_iserializer *
+ load_pointer(
+ void * & t,
+ const basic_pointer_iserializer * bpis_ptr,
+ const basic_pointer_iserializer * (*finder)(
+ const boost::serialization::extended_type_info & eti
+ )
+ );
+ // real public API starts here
+ void
+ set_library_version(unsigned int archive_library_version);
+ unsigned int
+ get_library_version() const;
+ unsigned int
+ get_flags() const;
+ void
+ reset_object_address(const void * new_address, const void * old_address);
+ void
+ delete_created_pointers();
+};
+
+} // namespace detail
+} // namespace archive
+} // namespace boost
+
+// required by smart_cast for compilers not implementing
+// partial template specialization
+BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(
+ boost::archive::detail::basic_iarchive
+)
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif //BOOST_ARCHIVE_DETAIL_BASIC_IARCHIVE_HPP
diff --git a/boost/boost/archive/detail/basic_iserializer.hpp b/boost/boost/archive/detail/basic_iserializer.hpp
new file mode 100644
index 00000000000..5075777905d
--- /dev/null
+++ b/boost/boost/archive/detail/basic_iserializer.hpp
@@ -0,0 +1,87 @@
+#ifndef BOOST_ARCHIVE_DETAIL_BASIC_ISERIALIZER_HPP
+#define BOOST_ARCHIVE_DETAIL_BASIC_ISERIALIZER_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_iserializer.hpp: extenstion of type_info required for serialization.
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <cassert>
+#include <cstdlib> // NULL
+#include <boost/config.hpp>
+
+#include <boost/archive/detail/auto_link_archive.hpp>
+#include <boost/archive/detail/basic_serializer.hpp>
+
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+namespace boost {
+
+namespace serialization {
+ class extended_type_info;
+} // namespace serialization
+
+// forward declarations
+namespace archive {
+namespace detail {
+
+class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_iarchive;
+class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_pointer_iserializer;
+
+class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_iserializer :
+ public basic_serializer
+{
+private:
+ basic_pointer_iserializer *bpis;
+protected:
+ explicit basic_iserializer(
+ const boost::serialization::extended_type_info & type_
+ );
+ // account for bogus gcc warning
+ #if defined(__GNUC__)
+ virtual
+ #endif
+ ~basic_iserializer();
+public:
+ bool serialized_as_pointer() const {
+ return bpis != NULL;
+ }
+ void set_bpis(basic_pointer_iserializer *bpis_){
+ bpis = bpis_;
+ }
+ const basic_pointer_iserializer * get_bpis_ptr() const {
+ return bpis;
+ }
+ virtual void load_object_data(
+ basic_iarchive & ar,
+ void *x,
+ const unsigned int file_version
+ ) const = 0;
+ // returns true if class_info should be saved
+ virtual bool class_info() const = 0 ;
+ // returns true if objects should be tracked
+ virtual bool tracking(const unsigned int) const = 0 ;
+ // returns class version
+ virtual unsigned int version() const = 0 ;
+ // returns true if this class is polymorphic
+ virtual bool is_polymorphic() const = 0;
+ virtual void destroy(/*const*/ void *address) const = 0 ;
+};
+
+} // namespae detail
+} // namespace archive
+} // namespace boost
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // BOOST_ARCHIVE_DETAIL_BASIC_ISERIALIZER_HPP
diff --git a/boost/boost/archive/detail/basic_oarchive.hpp b/boost/boost/archive/detail/basic_oarchive.hpp
new file mode 100644
index 00000000000..c0a5f417fcf
--- /dev/null
+++ b/boost/boost/archive/detail/basic_oarchive.hpp
@@ -0,0 +1,113 @@
+#ifndef BOOST_ARCHIVE_BASIC_OARCHIVE_HPP
+#define BOOST_ARCHIVE_BASIC_OARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_oarchive.hpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+// can't use this - much as I'd like to as borland doesn't support it
+// #include <boost/scoped_ptr.hpp>
+
+#include <boost/archive/basic_archive.hpp>
+#include <boost/serialization/tracking_enum.hpp>
+
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+namespace boost {
+template<class T>
+class shared_ptr;
+
+namespace serialization {
+ class extended_type_info;
+} // namespace serialization
+
+namespace archive {
+namespace detail {
+
+class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_oarchive_impl;
+class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_oserializer;
+class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_pointer_oserializer;
+//////////////////////////////////////////////////////////////////////
+// class basic_oarchive - write serialized objects to an output stream
+class BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY()) basic_oarchive
+{
+ friend class basic_oarchive_impl;
+ // hide implementation of this class to minimize header conclusion
+ // in client code. note: borland can't use scoped_ptr
+ //boost::scoped_ptr<basic_oarchive_impl> pimpl;
+ basic_oarchive_impl * pimpl;
+
+ // overload these to bracket object attributes. Used to implement
+ // xml archives
+ virtual void vsave(const version_type t) = 0;
+ virtual void vsave(const object_id_type t) = 0;
+ virtual void vsave(const object_reference_type t) = 0;
+ virtual void vsave(const class_id_type t) = 0;
+ virtual void vsave(const class_id_optional_type t) = 0;
+ virtual void vsave(const class_id_reference_type t) = 0;
+ virtual void vsave(const class_name_type & t) = 0;
+ virtual void vsave(const tracking_type t) = 0;
+protected:
+ basic_oarchive(unsigned int flags);
+ // account for bogus gcc warning
+ #if defined(__GNUC__)
+ virtual
+ #endif
+ ~basic_oarchive();
+public:
+ // note: NOT part of the public interface
+ void register_basic_serializer(const basic_oserializer & bos);
+ void
+ lookup_basic_helper(
+ const boost::serialization::extended_type_info * const eti,
+ shared_ptr<void> & sph
+ );
+ void
+ insert_basic_helper(
+ const boost::serialization::extended_type_info * const eti,
+ shared_ptr<void> & sph
+ );
+ void save_object(
+ const void *x,
+ const basic_oserializer & bos
+ );
+ void save_pointer(
+ const void * t,
+ const basic_pointer_oserializer * bpos_ptr
+ );
+ void save_null_pointer(){
+ vsave(NULL_POINTER_TAG);
+ }
+ // real public interface starts here
+ void end_preamble(); // default implementation does nothing
+ unsigned int get_library_version() const;
+ unsigned int get_flags() const;
+};
+
+} // namespace detail
+} // namespace archive
+} // namespace boost
+
+// required by smart_cast for compilers not implementing
+// partial template specialization
+BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(
+ boost::archive::detail::basic_oarchive
+)
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif //BOOST_ARCHIVE_BASIC_OARCHIVE_HPP
diff --git a/boost/boost/archive/detail/basic_oserializer.hpp b/boost/boost/archive/detail/basic_oserializer.hpp
new file mode 100644
index 00000000000..2df93763f7c
--- /dev/null
+++ b/boost/boost/archive/detail/basic_oserializer.hpp
@@ -0,0 +1,83 @@
+#ifndef BOOST_SERIALIZATION_BASIC_OSERIALIZER_HPP
+#define BOOST_SERIALIZATION_BASIC_OSERIALIZER_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_oserializer.hpp: extenstion of type_info required for serialization.
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <cstdlib> // NULL
+#include <boost/config.hpp>
+
+#include <boost/archive/detail/auto_link_archive.hpp>
+#include <boost/archive/detail/basic_serializer.hpp>
+
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+namespace boost {
+
+namespace serialization {
+ class extended_type_info;
+} // namespace serialization
+
+// forward declarations
+namespace archive {
+namespace detail {
+
+class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_oarchive;
+class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_pointer_oserializer;
+
+class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_oserializer :
+ public basic_serializer
+{
+private:
+ basic_pointer_oserializer *bpos;
+protected:
+ explicit basic_oserializer(
+ const boost::serialization::extended_type_info & type_
+ );
+ // account for bogus gcc warning
+ #if defined(__GNUC__)
+ virtual
+ #endif
+ ~basic_oserializer();
+public:
+ bool serialized_as_pointer() const {
+ return bpos != NULL;
+ }
+ void set_bpos(basic_pointer_oserializer *bpos_){
+ bpos = bpos_;
+ }
+ const basic_pointer_oserializer * get_bpos() const {
+ return bpos;
+ }
+ virtual void save_object_data(
+ basic_oarchive & ar, const void * x
+ ) const = 0;
+ // returns true if class_info should be saved
+ virtual bool class_info() const = 0;
+ // returns true if objects should be tracked
+ virtual bool tracking(const unsigned int flags) const = 0;
+ // returns class version
+ virtual unsigned int version() const = 0;
+ // returns true if this class is polymorphic
+ virtual bool is_polymorphic() const = 0;
+};
+
+} // namespace detail
+} // namespace serialization
+} // namespace boost
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // BOOST_SERIALIZATION_BASIC_OSERIALIZER_HPP
diff --git a/boost/boost/archive/detail/basic_pointer_iserializer.hpp b/boost/boost/archive/detail/basic_pointer_iserializer.hpp
new file mode 100644
index 00000000000..b151228ebda
--- /dev/null
+++ b/boost/boost/archive/detail/basic_pointer_iserializer.hpp
@@ -0,0 +1,64 @@
+#ifndef BOOST_ARCHIVE_BASIC_ARCHIVE_POINTER_ISERIALIZER_HPP
+#define BOOST_ARCHIVE_BASIC_ARCHIVE_POINTER_ISERIALIZER_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_pointer_oserializer.hpp: extenstion of type_info required for
+// serialization.
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+#include <boost/config.hpp>
+#include <boost/archive/detail/auto_link_archive.hpp>
+#include <boost/archive/detail/basic_serializer.hpp>
+
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+namespace boost {
+
+namespace serialization {
+ class extended_type_info;
+} // namespace serialization
+
+// forward declarations
+namespace archive {
+namespace detail {
+
+class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_iarchive;
+class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_iserializer;
+
+class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_pointer_iserializer
+ : public basic_serializer {
+protected:
+ explicit basic_pointer_iserializer(
+ const boost::serialization::extended_type_info & type_
+ );
+ // account for bogus gcc warning
+ #if defined(__GNUC__)
+ virtual
+ #endif
+ ~basic_pointer_iserializer();
+public:
+ virtual const basic_iserializer & get_basic_serializer() const = 0;
+ virtual void load_object_ptr(
+ basic_iarchive & ar,
+ void * & x,
+ const unsigned int file_version
+ ) const = 0;
+};
+
+} // namespace detail
+} // namespace archive
+} // namespace boost
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // BOOST_ARCHIVE_BASIC_ARCHIVE_POINTER_ISERIALIZER_HPP
diff --git a/boost/boost/archive/detail/basic_pointer_oserializer.hpp b/boost/boost/archive/detail/basic_pointer_oserializer.hpp
new file mode 100644
index 00000000000..6f4eb5eb66c
--- /dev/null
+++ b/boost/boost/archive/detail/basic_pointer_oserializer.hpp
@@ -0,0 +1,62 @@
+#ifndef BOOST_ARCHIVE_BASIC_ARCHIVE_POINTER_OSERIALIZER_HPP
+#define BOOST_ARCHIVE_BASIC_ARCHIVE_POINTER_OSERIALIZER_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_pointer_oserializer.hpp: extenstion of type_info required for
+// serialization.
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+#include <boost/config.hpp>
+#include <boost/archive/detail/auto_link_archive.hpp>
+#include <boost/archive/detail/basic_serializer.hpp>
+
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+namespace boost {
+
+namespace serialization {
+ class extended_type_info;
+} // namespace serialization
+
+namespace archive {
+namespace detail {
+
+class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_oarchive;
+class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_oserializer;
+
+class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_pointer_oserializer :
+ public basic_serializer {
+protected:
+ explicit basic_pointer_oserializer(
+ const boost::serialization::extended_type_info & type_
+ );
+ // account for bogus gcc warning
+ #if defined(__GNUC__)
+ virtual
+ #endif
+ ~basic_pointer_oserializer();
+public:
+ virtual const basic_oserializer & get_basic_serializer() const = 0;
+ virtual void save_object_ptr(
+ basic_oarchive & ar,
+ const void * x
+ ) const = 0;
+};
+
+} // namespace detail
+} // namespace archive
+} // namespace boost
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // BOOST_ARCHIVE_BASIC_ARCHIVE_POINTER_OSERIALIZER_HPP
diff --git a/boost/boost/archive/detail/basic_serializer.hpp b/boost/boost/archive/detail/basic_serializer.hpp
new file mode 100644
index 00000000000..f901c248b18
--- /dev/null
+++ b/boost/boost/archive/detail/basic_serializer.hpp
@@ -0,0 +1,51 @@
+#ifndef BOOST_ARCHIVE_BASIC_SERIALIZER_HPP
+#define BOOST_ARCHIVE_BASIC_SERIALIZER_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_serializer.hpp: extenstion of type_info required for serialization.
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <cassert>
+
+#include <boost/noncopyable.hpp>
+#include <boost/config.hpp>
+#include <boost/serialization/extended_type_info.hpp>
+
+namespace boost {
+namespace archive {
+namespace detail {
+
+class basic_serializer : private boost::noncopyable
+{
+ const boost::serialization::extended_type_info & m_eti;
+protected:
+ explicit basic_serializer(
+ const boost::serialization::extended_type_info & eti
+ ) :
+ m_eti(eti)
+ {}
+public:
+ const boost::serialization::extended_type_info & get_eti() const {
+ return m_eti;
+ }
+ bool operator<(const basic_serializer & rhs) const {
+ return & m_eti < & rhs.get_eti();
+ }
+};
+
+} // namespace detail
+} // namespace archive
+} // namespace boost
+
+#endif // BOOST_ARCHIVE_BASIC_SERIALIZER_HPP
diff --git a/boost/boost/archive/detail/basic_serializer_map.hpp b/boost/boost/archive/detail/basic_serializer_map.hpp
new file mode 100644
index 00000000000..be675c41617
--- /dev/null
+++ b/boost/boost/archive/detail/basic_serializer_map.hpp
@@ -0,0 +1,69 @@
+#ifndef BOOST_TYPEINFO_EXTENDED_MAP_HPP
+#define BOOST_TYPEINFO_EXTENDED_MAP_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_serializer_map.hpp: extenstion of type_info required for serialization.
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <set>
+
+#include <boost/config.hpp>
+#include <boost/utility.hpp>
+#include <boost/archive/detail/auto_link_archive.hpp>
+
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+namespace boost {
+namespace serialization {
+ class extended_type_info;
+}
+
+namespace archive {
+namespace detail {
+
+class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_serializer;
+
+struct BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) type_info_pointer_compare
+{
+ bool operator()(
+ const basic_serializer * lhs, const basic_serializer * rhs
+ ) const ;
+};
+
+class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_serializer_map : public
+ boost::noncopyable
+{
+ typedef std::set<const basic_serializer *, type_info_pointer_compare> map_type;
+ map_type m_map;
+ bool & m_deleted;
+public:
+ bool insert(const basic_serializer * bs);
+ const basic_serializer * tfind(
+ const boost::serialization::extended_type_info & type_
+ ) const;
+ void erase(basic_serializer * bs);
+ basic_serializer_map(bool & deleted);
+ ~basic_serializer_map();
+private:
+ // cw 8.3 requires this
+ basic_serializer_map& operator=(basic_serializer_map const&);
+};
+
+} // namespace detail
+} // namespace archive
+} // namespace boost
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // BOOST_TYPEINFO_EXTENDED_MAP_HPP
diff --git a/boost/boost/archive/detail/common_iarchive.hpp b/boost/boost/archive/detail/common_iarchive.hpp
new file mode 100644
index 00000000000..bdaa0f03835
--- /dev/null
+++ b/boost/boost/archive/detail/common_iarchive.hpp
@@ -0,0 +1,75 @@
+#ifndef BOOST_ARCHIVE_DETAIL_COMMON_IARCHIVE_HPP
+#define BOOST_ARCHIVE_DETAIL_COMMON_IARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// common_iarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/archive/detail/basic_iarchive.hpp>
+#include <boost/archive/detail/interface_iarchive.hpp>
+#include <boost/archive/detail/iserializer.hpp>
+#include <boost/pfto.hpp>
+
+namespace boost {
+namespace archive {
+namespace detail {
+
+// note: referred to as Curiously Recurring Template Patter (CRTP)
+template<class Archive>
+class common_iarchive :
+ public basic_iarchive,
+ public interface_iarchive<Archive>
+{
+private:
+ virtual void vload(version_type & t){
+ * this->This() >> t;
+ }
+ virtual void vload(object_id_type & t){
+ * this->This() >> t;
+ }
+ virtual void vload(class_id_type & t){
+ * this->This() >> t;
+ }
+ virtual void vload(class_id_optional_type & t){
+ * this->This() >> t;
+ }
+ virtual void vload(tracking_type & t){
+ * this->This() >> t;
+ }
+ virtual void vload(class_name_type &s){
+ * this->This() >> s;
+ }
+protected:
+ // default processing - invoke serialization library
+ template<class T>
+ void load_override(T & t, BOOST_PFTO int){
+ archive::load(* this->This(), t);
+ }
+ // default implementations of functions which emit start/end tags for
+ // archive types that require them.
+ void load_start(const char *name){}
+ void load_end(const char *name){}
+ // default archive initialization
+ common_iarchive(unsigned int flags) :
+ basic_iarchive(flags),
+ interface_iarchive<Archive>()
+ {}
+};
+
+} // namespace detail
+} // namespace archive
+} // namespace boost
+
+#endif // BOOST_ARCHIVE_DETAIL_COMMON_IARCHIVE_HPP
+
diff --git a/boost/boost/archive/detail/common_oarchive.hpp b/boost/boost/archive/detail/common_oarchive.hpp
new file mode 100644
index 00000000000..77c4ed754c0
--- /dev/null
+++ b/boost/boost/archive/detail/common_oarchive.hpp
@@ -0,0 +1,77 @@
+#ifndef BOOST_ARCHIVE_DETAIL_COMMON_OARCHIVE_HPP
+#define BOOST_ARCHIVE_DETAIL_COMMON_OARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// common_oarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/archive/detail/basic_oarchive.hpp>
+#include <boost/archive/detail/interface_oarchive.hpp>
+#include <boost/archive/detail/oserializer.hpp>
+
+namespace boost {
+namespace archive {
+namespace detail {
+
+// note: referred to as Curiously Recurring Template Patter (CRTP)
+template<class Archive>
+class common_oarchive :
+ public basic_oarchive,
+ public interface_oarchive<Archive>
+{
+private:
+ virtual void vsave(const version_type t){
+ * this->This() << t;
+ }
+ virtual void vsave(const object_id_type t){
+ * this->This() << t;
+ }
+ virtual void vsave(const object_reference_type t){
+ * this->This() << t;
+ }
+ virtual void vsave(const class_id_type t){
+ * this->This() << t;
+ }
+ virtual void vsave(const class_id_reference_type t){
+ * this->This() << t;
+ }
+ virtual void vsave(const class_id_optional_type t){
+ * this->This() << t;
+ }
+ virtual void vsave(const class_name_type & t){
+ * this->This() << t;
+ }
+ virtual void vsave(const tracking_type t){
+ * this->This() << t;
+ }
+protected:
+ // default processing - invoke serialization library
+ template<class T>
+ void save_override(T & t, BOOST_PFTO int){
+ archive::save(* this->This(), t);
+ }
+
+ void save_start(const char *name){}
+ void save_end(const char *name){}
+ common_oarchive(unsigned int flags) :
+ basic_oarchive(flags),
+ interface_oarchive<Archive>()
+ {}
+};
+
+} // namespace detail
+} // namespace archive
+} // namespace boost
+
+#endif // BOOST_ARCHIVE_DETAIL_COMMON_OARCHIVE_HPP
diff --git a/boost/boost/archive/detail/decl.hpp b/boost/boost/archive/detail/decl.hpp
new file mode 100644
index 00000000000..d30e71b39d6
--- /dev/null
+++ b/boost/boost/archive/detail/decl.hpp
@@ -0,0 +1,79 @@
+#ifndef BOOST_ARCHIVE_DETAIL_DECL_HPP
+#define BOOST_ARCHIVE_DETAIL_DECL_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2///////// 3/////////4/////////5/////////6/////////7/////////8
+// decl.hpp
+//
+// © Copyright Robert Ramey 2004
+// Use, modification, and distribution is 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)
+
+// See library home page at http://www.boost.org/libs/serialization
+
+//----------------------------------------------------------------------------//
+
+// This header implements separate compilation features as described in
+// http://www.boost.org/more/separate_compilation.html
+
+#include <boost/config.hpp>
+#include <boost/preprocessor/facilities/empty.hpp>
+
+#if defined(BOOST_HAS_DECLSPEC)
+ #if (defined(BOOST_ALL_DYN_LINK) || defined(BOOST_SERIALIZATION_DYN_LINK))
+ #if defined(BOOST_ARCHIVE_SOURCE)
+ #if defined(__BORLANDC__)
+ #define BOOST_ARCHIVE_DECL(T) T __export
+ #define BOOST_ARCHIVE_OR_WARCHIVE_DECL(T) T __export
+ #else
+ #define BOOST_ARCHIVE_DECL(T) __declspec(dllexport) T
+ #define BOOST_ARCHIVE_OR_WARCHIVE_DECL(T) __declspec(dllexport) T
+ #endif
+ #else
+ #if defined(__BORLANDC__)
+ #define BOOST_ARCHIVE_DECL(T) T __import
+ #else
+ #define BOOST_ARCHIVE_DECL(T) __declspec(dllimport) T
+ #endif
+ #endif
+ #if defined(BOOST_WARCHIVE_SOURCE)
+ #if defined(__BORLANDC__)
+ #define BOOST_WARCHIVE_DECL(T) T __export
+ #define BOOST_ARCHIVE_OR_WARCHIVE_DECL(T) T __export
+ #else
+ #define BOOST_WARCHIVE_DECL(T) __declspec(dllexport) T
+ #define BOOST_ARCHIVE_OR_WARCHIVE_DECL(T) __declspec(dllexport) T
+ #endif
+ #else
+ #if defined(__BORLANDC__)
+ #define BOOST_WARCHIVE_DECL(T) T __import
+ #else
+ #define BOOST_WARCHIVE_DECL(T) __declspec(dllimport) T
+ #endif
+ #endif
+ #if !defined(BOOST_WARCHIVE_SOURCE) && !defined(BOOST_ARCHIVE_SOURCE)
+ #if defined(__BORLANDC__)
+ #define BOOST_ARCHIVE_OR_WARCHIVE_DECL(T) T __import
+ #else
+ #define BOOST_ARCHIVE_OR_WARCHIVE_DECL(T) __declspec(dllimport) T
+ #endif
+ #endif
+ #endif
+#endif // BOOST_HAS_DECLSPEC
+
+#if ! defined(BOOST_ARCHIVE_DECL)
+ #define BOOST_ARCHIVE_DECL(T) T
+#endif
+#if ! defined(BOOST_WARCHIVE_DECL)
+ #define BOOST_WARCHIVE_DECL(T) T
+#endif
+#if ! defined(BOOST_ARCHIVE_OR_WARCHIVE_DECL)
+ #define BOOST_ARCHIVE_OR_WARCHIVE_DECL(T) T
+#endif
+
+#endif // BOOST_ARCHIVE_DETAIL_DECL_HPP
diff --git a/boost/boost/archive/detail/interface_iarchive.hpp b/boost/boost/archive/detail/interface_iarchive.hpp
new file mode 100644
index 00000000000..1a823cf51ef
--- /dev/null
+++ b/boost/boost/archive/detail/interface_iarchive.hpp
@@ -0,0 +1,94 @@
+#ifndef BOOST_ARCHIVE_DETAIL_INTERFACE_IARCHIVE_HPP
+#define BOOST_ARCHIVE_DETAIL_INTERFACE_IARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// interface_iarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+#include <string>
+#include <boost/cstdint.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/archive/detail/auto_link_archive.hpp>
+#include <boost/archive/detail/iserializer.hpp>
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+namespace boost {
+template<class T>
+class shared_ptr;
+namespace serialization {
+ class extended_type_info;
+} // namespace serialization
+namespace archive {
+namespace detail {
+
+class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_pointer_iserializer;
+
+template<class Archive>
+class interface_iarchive
+{
+protected:
+ interface_iarchive(){};
+public:
+ /////////////////////////////////////////////////////////
+ // archive public interface
+ typedef mpl::bool_<true> is_loading;
+ typedef mpl::bool_<false> is_saving;
+
+ // return a pointer to the most derived class
+ Archive * This(){
+ return static_cast<Archive *>(this);
+ }
+
+ template<class T>
+ const basic_pointer_iserializer * register_type(T * = NULL){
+ const basic_pointer_iserializer & bpis =
+ instantiate_pointer_iserializer(
+ static_cast<Archive *>(NULL),
+ static_cast<T *>(NULL)
+ );
+ this->This()->register_basic_serializer(bpis.get_basic_serializer());
+ return & bpis;
+ }
+ void lookup_helper(
+ const boost::serialization::extended_type_info * const eti,
+ boost::shared_ptr<void> & sph
+ ){
+ this->This()->lookup_basic_helper(eti, sph);
+ }
+
+ void insert_helper(
+ const boost::serialization::extended_type_info * const eti,
+ shared_ptr<void> & sph
+ ){
+ this->This()->insert_basic_helper(eti, sph);
+ }
+ template<class T>
+ Archive & operator>>(T & t){
+ this->This()->load_override(t, 0);
+ return * this->This();
+ }
+
+ // the & operator
+ template<class T>
+ Archive & operator&(T & t){
+ return *(this->This()) >> t;
+ }
+};
+
+} // namespace detail
+} // namespace archive
+} // namespace boost
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // BOOST_ARCHIVE_DETAIL_INTERFACE_IARCHIVE_HPP
diff --git a/boost/boost/archive/detail/interface_oarchive.hpp b/boost/boost/archive/detail/interface_oarchive.hpp
new file mode 100644
index 00000000000..8b6aace442d
--- /dev/null
+++ b/boost/boost/archive/detail/interface_oarchive.hpp
@@ -0,0 +1,100 @@
+#ifndef BOOST_ARCHIVE_DETAIL_INTERFACE_OARCHIVE_HPP
+#define BOOST_ARCHIVE_DETAIL_INTERFACE_OARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// interface_oarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+#include <string>
+#include <boost/cstdint.hpp>
+#include <boost/mpl/bool.hpp>
+
+#include <boost/archive/detail/auto_link_archive.hpp>
+#include <boost/archive/detail/oserializer.hpp>
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+namespace boost {
+template<class T>
+class shared_ptr;
+namespace serialization {
+ class extended_type_info;
+} // namespace serialization
+namespace archive {
+namespace detail {
+
+class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_pointer_oserializer;
+
+template<class Archive>
+class interface_oarchive
+{
+protected:
+ interface_oarchive(){};
+public:
+ /////////////////////////////////////////////////////////
+ // archive public interface
+ typedef mpl::bool_<false> is_loading;
+ typedef mpl::bool_<true> is_saving;
+
+ // return a pointer to the most derived class
+ Archive * This(){
+ return static_cast<Archive *>(this);
+ }
+
+ template<class T>
+ const basic_pointer_oserializer * register_type(const T * = NULL){
+ const basic_pointer_oserializer & bpos =
+ instantiate_pointer_oserializer(
+ static_cast<Archive *>(NULL),
+ static_cast<T *>(NULL)
+ );
+ this->This()->register_basic_serializer(bpos.get_basic_serializer());
+ return & bpos;
+ }
+
+ void lookup_helper(
+ const boost::serialization::extended_type_info * const eti,
+ boost::shared_ptr<void> & sph
+ ){
+ this->This()->lookup_basic_helper(eti, sph);
+ }
+
+ void insert_helper(
+ const boost::serialization::extended_type_info * const eti,
+ shared_ptr<void> & sph
+ ){
+ this->This()->insert_basic_helper(eti, sph);
+ }
+ template<class T>
+ Archive & operator<<(T & t){
+ this->This()->save_override(t, 0);
+ return * this->This();
+ }
+
+ // the & operator
+ template<class T>
+ Archive & operator&(T & t){
+ #ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+ return * this->This() << const_cast<const T &>(t);
+ #else
+ return * this->This() << t;
+ #endif
+ }
+};
+
+} // namespace detail
+} // namespace archive
+} // namespace boost
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // BOOST_ARCHIVE_DETAIL_INTERFACE_IARCHIVE_HPP
diff --git a/boost/boost/archive/detail/iserializer.hpp b/boost/boost/archive/detail/iserializer.hpp
new file mode 100644
index 00000000000..da3cdc5bdd1
--- /dev/null
+++ b/boost/boost/archive/detail/iserializer.hpp
@@ -0,0 +1,608 @@
+#ifndef BOOST_ARCHIVE_DETAIL_ISERIALIZER_HPP
+#define BOOST_ARCHIVE_DETAIL_ISERIALIZER_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#pragma inline_depth(511)
+#pragma inline_recursion(on)
+#endif
+
+#if defined(__MWERKS__)
+#pragma inline_depth(511)
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// iserializer.hpp: interface for serialization system.
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <new> // for placement new
+#include <memory> // for auto_ptr
+#include <cstddef> // size_t
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::size_t;
+} // namespace std
+#endif
+#include <boost/throw_exception.hpp>
+#include <boost/smart_cast.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/static_warning.hpp>
+#include <boost/detail/no_exceptions_support.hpp>
+
+#include <boost/type_traits/is_pointer.hpp>
+#include <boost/type_traits/is_fundamental.hpp>
+#include <boost/type_traits/is_enum.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/serialization/is_abstract.hpp>
+
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/less.hpp>
+#include <boost/mpl/greater_equal.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/list.hpp>
+#include <boost/mpl/empty.hpp>
+#include <boost/mpl/not.hpp>
+
+ #ifndef BOOST_SERIALIZATION_DEFAULT_TYPE_INFO
+ #include <boost/serialization/extended_type_info_typeid.hpp>
+ #endif
+// the following is need only for dynamic cast of polymorphic pointers
+#include <boost/archive/detail/basic_iarchive.hpp>
+#include <boost/archive/detail/basic_iserializer.hpp>
+#include <boost/archive/detail/archive_pointer_iserializer.hpp>
+#include <boost/archive/archive_exception.hpp>
+
+#include <boost/serialization/force_include.hpp>
+#include <boost/serialization/serialization.hpp>
+#include <boost/serialization/version.hpp>
+#include <boost/serialization/level.hpp>
+#include <boost/serialization/tracking.hpp>
+#include <boost/serialization/type_info_implementation.hpp>
+#include <boost/serialization/nvp.hpp>
+#include <boost/serialization/binary_object.hpp>
+#include <boost/serialization/void_cast.hpp>
+
+namespace boost {
+
+namespace serialization {
+ class extended_type_info;
+} // namespace serialization
+
+namespace archive {
+
+// an accessor to permit friend access to archives. Needed because
+// some compilers don't handle friend templates completely
+class load_access {
+public:
+ template<class Archive, class T>
+ static void load_primitive(Archive &ar, T &t){
+ ar.load(t);
+ }
+};
+
+namespace detail {
+
+template<class Archive, class T>
+class iserializer : public basic_iserializer
+{
+private:
+ virtual void destroy(/*const*/ void *address) const {
+ boost::serialization::access::destroy(static_cast<T *>(address));
+ }
+ // private constructor to inhibit any existence other than the
+ // static one
+ explicit iserializer() :
+ basic_iserializer(
+ * boost::serialization::type_info_implementation<T>::type::get_instance()
+ )
+ {}
+public:
+ virtual BOOST_DLLEXPORT void load_object_data(
+ basic_iarchive & ar,
+ void *x,
+ const unsigned int file_version
+ ) const BOOST_USED ;
+ virtual bool class_info() const {
+ return boost::serialization::implementation_level<T>::value
+ >= boost::serialization::object_class_info;
+ }
+ virtual bool tracking(const unsigned int /* flags */) const {
+// if(0 != (flags & no_tracking))
+// return false;
+ return boost::serialization::tracking_level<T>::value
+ == boost::serialization::track_always
+ || boost::serialization::tracking_level<T>::value
+ == boost::serialization::track_selectivly
+ && serialized_as_pointer();
+ }
+ virtual unsigned int version() const {
+ return ::boost::serialization::version<T>::value;
+ }
+ virtual bool is_polymorphic() const {
+ typedef BOOST_DEDUCED_TYPENAME
+ boost::serialization::type_info_implementation<
+ T
+ >::type::is_polymorphic::type typex;
+ return typex::value;
+ }
+ static iserializer & instantiate(){
+ static iserializer instance;
+ return instance;
+ }
+ virtual ~iserializer(){};
+};
+
+template<class Archive, class T>
+BOOST_DLLEXPORT void iserializer<Archive, T>::load_object_data(
+ basic_iarchive & ar,
+ void *x,
+ const unsigned int file_version
+) const {
+ // make sure call is routed through the higest interface that might
+ // be specialized by the user.
+ boost::serialization::serialize_adl(
+ boost::smart_cast_reference<Archive &>(ar),
+ * static_cast<T *>(x),
+ file_version
+ );
+}
+
+// instantiation of this template creates a static object. Note inversion of
+// normal argument order to workaround bizarre error in MSVC 6.0 which only
+// manifests iftself during compiler time.
+template<class T, class Archive>
+class pointer_iserializer : public archive_pointer_iserializer<Archive>
+{
+private:
+ virtual const basic_iserializer & get_basic_serializer() const {
+ return iserializer<Archive, T>::instantiate();
+ }
+ virtual BOOST_DLLEXPORT void load_object_ptr(
+ basic_iarchive & ar,
+ void * & x,
+ const unsigned int file_version
+ ) const BOOST_USED;
+#if defined(__GNUC__) || ( defined(BOOST_MSVC) && (_MSC_VER <= 1300) )
+public:
+#endif
+ // private constructor to inhibit any existence other than the
+ // static one. Note GCC doesn't permit constructor to be private
+ explicit BOOST_DLLEXPORT pointer_iserializer() BOOST_USED;
+ static const pointer_iserializer instance;
+public:
+ // at least one compiler (CW) seems to require that serialize_adl
+ // be explicitly instantiated. Still under investigation.
+ #if ! BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
+ void (* const m)(Archive &, T &, const unsigned);
+ boost::serialization::extended_type_info * (* e)();
+ #endif
+ static BOOST_DLLEXPORT const pointer_iserializer & instantiate() BOOST_USED;
+ virtual ~pointer_iserializer(){};
+};
+
+template<class T, class Archive>
+BOOST_DLLEXPORT const pointer_iserializer<T, Archive> &
+pointer_iserializer<T, Archive>::instantiate() {
+ return instance;
+}
+
+// note: instances of this template to be constructed before the main
+// is called in order for things to be initialized properly. For this
+// reason, hiding the instance in a static function as was done above
+// won't work here so we created a free instance here.
+template<class T, class Archive>
+const pointer_iserializer<T, Archive> pointer_iserializer<T, Archive>::instance;
+
+// note trick to be sure that operator new is using class specific
+// version if such exists. Due to Peter Dimov.
+// note: the following fails if T has no default constructor.
+// otherwise it would have been ideal
+//struct heap_allocator : public T
+//{
+// T * invoke(){
+// return ::new(sizeof(T));
+// }
+//}
+
+// note: this should really be a member of the load_ptr function
+// below but some compilers still complain about this.
+template<class T>
+struct heap_allocator
+{
+ #if 0
+ // note: this fails on msvc 7.0 and gcc 3.2
+ template <class U, U x> struct test;
+ typedef char* yes;
+ typedef int* no;
+ template <class U>
+ yes has_op_new(U*, test<void* (*)(std::size_t), &U::operator new>* = 0);
+ no has_op_new(...);
+
+ template<class U>
+ T * new_operator(U);
+
+ T * new_operator(yes){
+ return (T::operator new)(sizeof(T));
+ }
+ T * new_operator(no){
+ return static_cast<T *>(operator new(sizeof(T)));
+ }
+ static T * invoke(){
+ return new_operator(has_op_new(static_cast<T *>(NULL)));
+ }
+ #else
+ // while this doesn't handle operator new overload for class T
+ static T * invoke(){
+ return static_cast<T *>(operator new(sizeof(T)));
+ }
+ #endif
+};
+
+// due to Martin Ecker
+template <typename T>
+class auto_ptr_with_deleter
+{
+public:
+ explicit auto_ptr_with_deleter(T* p) :
+ m_p(p)
+ {}
+ ~auto_ptr_with_deleter(){
+ if (m_p)
+ boost::serialization::access::destroy(m_p);
+ }
+ T* get() const {
+ return m_p;
+ }
+
+ T* release() {
+ T* p = m_p;
+ m_p = NULL;
+ return p;
+ }
+private:
+ T* m_p;
+};
+
+template<class T, class Archive>
+BOOST_DLLEXPORT void pointer_iserializer<T, Archive>::load_object_ptr(
+ basic_iarchive & ar,
+ void * & x,
+ const unsigned int file_version
+) const {
+ Archive & ar_impl = boost::smart_cast_reference<Archive &>(ar);
+
+// if(0 != (ar.get_flags() & no_object_creation)){
+// ar_impl >> boost::serialization::make_nvp(NULL, * static_cast<T *>(x));
+// return;
+// }
+
+ auto_ptr_with_deleter<T> ap(heap_allocator<T>::invoke());
+ if(NULL == ap.get())
+ boost::throw_exception(std::bad_alloc()) ;
+
+ T * t = ap.get();
+ x = t;
+
+ // catch exception during load_construct_data so that we don't
+ // automatically delete the t which is most likely not fully
+ // constructed
+ BOOST_TRY {
+ // this addresses an obscure situtation that occurs when
+ // load_constructor de-serializes something through a pointer.
+ ar.next_object_pointer(t);
+ boost::serialization::load_construct_data_adl<Archive, T>(
+ ar_impl,
+ t,
+ file_version
+ );
+ }
+ BOOST_CATCH(...){
+ BOOST_RETHROW;
+ }
+ BOOST_CATCH_END
+
+ ar_impl >> boost::serialization::make_nvp(NULL, * t);
+ ap.release();
+}
+
+template<class T, class Archive>
+#if ! BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
+BOOST_DLLEXPORT pointer_iserializer<T, Archive>::pointer_iserializer() :
+ archive_pointer_iserializer<Archive>(
+ * boost::serialization::type_info_implementation<T>::type::get_instance()
+ ),
+ m(boost::serialization::serialize_adl<Archive, T>),
+ e(boost::serialization::type_info_implementation<T>::type::get_instance)
+#else
+BOOST_DLLEXPORT pointer_iserializer<T, Archive>::pointer_iserializer() :
+ archive_pointer_iserializer<Archive>(
+ * boost::serialization::type_info_implementation<T>::type::get_instance()
+ )
+#endif
+{
+ iserializer<Archive, T> & bis = iserializer<Archive, T>::instantiate();
+ bis.set_bpis(this);
+}
+
+template<class Archive, class T>
+struct load_non_pointer_type {
+ // note this bounces the call right back to the archive
+ // with no runtime overhead
+ struct load_primitive {
+ static void invoke(Archive & ar, T & t){
+ load_access::load_primitive(ar, t);
+ }
+ };
+ // note this bounces the call right back to the archive
+ // with no runtime overhead
+ struct load_only {
+ static void invoke(Archive & ar, T & t){
+ // short cut to user's serializer
+ // make sure call is routed through the higest interface that might
+ // be specialized by the user.
+ boost::serialization::serialize_adl(
+ ar, t, boost::serialization::version<T>::value
+ );
+ }
+ };
+
+ // note this save class information including version
+ // and serialization level to the archive
+ struct load_standard {
+ static void invoke(Archive &ar, T &t){
+ //BOOST_STATIC_ASSERT(! boost::is_const<T>::value);
+ // borland - for some reason T is const here - even though
+ // its not called that way - so fix it her
+ typedef BOOST_DEDUCED_TYPENAME boost::remove_const<T>::type typex;
+ void * x = & const_cast<typex &>(t);
+ ar.load_object(x, iserializer<Archive, T>::instantiate());
+ }
+ };
+
+ struct load_conditional {
+ static void invoke(Archive &ar, T &t){
+ //if(0 == (ar.get_flags() & no_tracking))
+ load_standard::invoke(ar, t);
+ //else
+ // load_only::invoke(ar, t);
+ }
+ };
+
+ typedef BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ // if its primitive
+ mpl::equal_to<
+ boost::serialization::implementation_level<T>,
+ mpl::int_<boost::serialization::primitive_type>
+ >,
+ mpl::identity<load_primitive>,
+ // else
+ BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ // class info / version
+ mpl::greater_equal<
+ boost::serialization::implementation_level<T>,
+ mpl::int_<boost::serialization::object_class_info>
+ >,
+ // do standard load
+ mpl::identity<load_standard>,
+ // else
+ BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ // no tracking
+ mpl::equal_to<
+ boost::serialization::tracking_level<T>,
+ mpl::int_<boost::serialization::track_never>
+ >,
+ // do a fast load
+ mpl::identity<load_only>,
+ // else
+ // do a fast load only tracking is turned off
+ mpl::identity<load_conditional>
+ > > >::type typex;
+
+ static void invoke(Archive & ar, T &t){
+ BOOST_STATIC_ASSERT((
+ mpl::greater_equal<
+ boost::serialization::implementation_level<T>,
+ mpl::int_<boost::serialization::primitive_type>
+ >::value
+ ));
+ typex::invoke(ar, t);
+ }
+};
+
+template<class Archive, class Tptr>
+struct load_pointer_type {
+ template<class T>
+ struct abstract
+ {
+ static const basic_pointer_iserializer * register_type(Archive & /* ar */){
+ #if ! defined(__BORLANDC__)
+ typedef BOOST_DEDUCED_TYPENAME
+ boost::serialization::type_info_implementation<T>::type::is_polymorphic typex;
+ // it has? to be polymorphic
+ BOOST_STATIC_ASSERT(typex::value);
+ #endif
+ return static_cast<basic_pointer_iserializer *>(NULL);
+ }
+ };
+
+ template<class T>
+ struct non_abstract
+ {
+ static const basic_pointer_iserializer * register_type(Archive & ar){
+ return ar.register_type(static_cast<T *>(NULL));
+ }
+ };
+
+ template<class T>
+ static const basic_pointer_iserializer * register_type(Archive &ar, T & /*t*/){
+ // there should never be any need to load an abstract polymorphic
+ // class pointer. Inhibiting code generation for this
+ // permits abstract base classes to be used - note: exception
+ // virtual serialize functions used for plug-ins
+ typedef BOOST_DEDUCED_TYPENAME
+ mpl::eval_if<
+ serialization::is_abstract<T>,
+ mpl::identity<abstract<T> >,
+ mpl::identity<non_abstract<T> >
+ >::type typex;
+ return typex::register_type(ar);
+ }
+
+ template<class T>
+ static T * pointer_tweak(
+ const boost::serialization::extended_type_info & eti,
+ void * t,
+ T &
+ ) {
+ // tweak the pointer back to the base class
+ return static_cast<T *>(
+ boost::serialization::void_upcast(
+ eti,
+ * boost::serialization::type_info_implementation<T>::type::get_instance(),
+ t
+ )
+ );
+ }
+
+ static void invoke(Archive & ar, Tptr & t){
+ const basic_pointer_iserializer * bpis_ptr = register_type(ar, *t);
+ const basic_pointer_iserializer * newbpis_ptr = ar.load_pointer(
+ * reinterpret_cast<void **>(&t),
+ bpis_ptr,
+ archive_pointer_iserializer<Archive>::find
+ );
+ // if the pointer isn't that of the base class
+ if(newbpis_ptr != bpis_ptr){
+ t = pointer_tweak(newbpis_ptr->get_eti(), t, *t);
+ }
+ }
+};
+
+template<class Archive, class T>
+struct load_enum_type {
+ static void invoke(Archive &ar, T &t){
+ // convert integers to correct enum to load
+ int i;
+ ar >> boost::serialization::make_nvp(NULL, i);
+ t = static_cast<T>(i);
+ }
+};
+
+template<class Archive, class T>
+struct load_array_type {
+ static void invoke(Archive &ar, T &t){
+ // convert integers to correct enum to load
+ int current_count = sizeof(t) / (
+ static_cast<char *>(static_cast<void *>(&t[1]))
+ - static_cast<char *>(static_cast<void *>(&t[0]))
+ );
+ int count;
+ ar >> BOOST_SERIALIZATION_NVP(count);
+ if(count > current_count)
+ boost::throw_exception(archive::archive_exception(
+ boost::archive::archive_exception::array_size_too_short
+ ));
+ int i;
+ for(i = 0; i < count; ++i)
+ ar >> boost::serialization::make_nvp("item", t[i]);
+ }
+};
+
+// note bogus arguments to workaround msvc 6 silent runtime failure
+template<class Archive, class T>
+BOOST_DLLEXPORT
+inline const basic_pointer_iserializer &
+instantiate_pointer_iserializer(
+ Archive * /* ar = NULL */,
+ T * /* t = NULL */
+) BOOST_USED;
+
+template<class Archive, class T>
+BOOST_DLLEXPORT
+inline const basic_pointer_iserializer &
+instantiate_pointer_iserializer(
+ Archive * /* ar = NULL */,
+ T * /* t = NULL */
+){
+ // note: reversal of order of arguments to work around msvc 6.0 bug
+ // that manifests itself while trying to link.
+ return pointer_iserializer<T, Archive>::instantiate();
+}
+
+} // detail
+
+template<class Archive, class T>
+inline void load(Archive &ar, T &t){
+ // if this assertion trips. It means we're trying to load a
+ // const object with a compiler that doesn't have correct
+ // funtion template ordering. On other compilers, this is
+ // handled below.
+ BOOST_STATIC_ASSERT(! boost::is_const<T>::value);
+ typedef
+ BOOST_DEDUCED_TYPENAME mpl::eval_if<is_pointer<T>,
+ mpl::identity<detail::load_pointer_type<Archive, T> >
+ ,//else
+ BOOST_DEDUCED_TYPENAME mpl::eval_if<is_array<T>,
+ mpl::identity<detail::load_array_type<Archive, T> >
+ ,//else
+ BOOST_DEDUCED_TYPENAME mpl::eval_if<is_enum<T>,
+ mpl::identity<detail::load_enum_type<Archive, T> >
+ ,//else
+ mpl::identity<detail::load_non_pointer_type<Archive, T> >
+ >
+ >
+ >::type typex;
+ typex::invoke(ar, t);
+}
+
+// BORLAND
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x560))
+// borland has a couple fo problems
+// a) if function is partiall specialized - see below
+// const paramters are transformed to non-const ones
+// b) implementation of base_object can't be made to work
+// correctly which results in all base_object s being const.
+// So, strip off the const for borland. This breaks the trap
+// for loading const objects - but I see no alternative
+template<class Archive, class T>
+inline void load(Archive &ar, const T & t){
+ load(ar, const_cast<T &>(t));
+}
+#endif
+
+// let wrappers through. (Someday implement is_wrapper)
+#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+template<class Archive, class T>
+inline void load(Archive &ar, const serialization::nvp<T> &t){
+ boost::archive::load(ar, const_cast<serialization::nvp<T> &>(t));
+}
+template<class Archive>
+inline void load(Archive &ar, const serialization::binary_object &t){
+ boost::archive::load(ar, const_cast<serialization::binary_object &>(t));
+}
+
+//template<class Archive, class T>
+//inline void load(Archive &ar, const serialization::binary_object &t){
+// load(ar, const_cast<binary_object &>(t));
+//}
+#endif
+
+} // namespace archive
+} // namespace boost
+
+#endif // BOOST_ARCHIVE_DETAIL_ISERIALIZER_HPP
diff --git a/boost/boost/archive/detail/known_archive_types.hpp b/boost/boost/archive/detail/known_archive_types.hpp
new file mode 100644
index 00000000000..e8322b3bb09
--- /dev/null
+++ b/boost/boost/archive/detail/known_archive_types.hpp
@@ -0,0 +1,93 @@
+#ifndef BOOST_ARCHIVE_KNOWN_ARCHIVE_TYPES_HPP
+#define BOOST_ARCHIVE_KNOWN_ARCHIVE_TYPES_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// known_archive_types.hpp: set traits of classes to be serialized
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+// list of archive type shipped with the serialization system
+
+#include <boost/mpl/list.hpp>
+#include <boost/mpl/pop_front.hpp>
+
+namespace boost {
+namespace archive {
+
+// class text_oarchive;
+namespace detail {
+
+class null_type;
+
+struct known_archive_types {
+ typedef
+ mpl::pop_front<
+ mpl::list<
+ null_type
+ #if defined(BOOST_ARCHIVE_TEXT_OARCHIVE_HPP)
+ , boost::archive::text_oarchive
+ #endif
+ #if defined(BOOST_ARCHIVE_TEXT_IARCHIVE_HPP)
+ , boost::archive::text_iarchive
+ #endif
+ #if defined(BOOST_ARCHIVE_TEXT_WOARCHIVE_HPP)
+ , boost::archive::text_woarchive
+ #endif
+ #if defined(BOOST_ARCHIVE_TEXT_WIARCHIVE_HPP)
+ , boost::archive::text_wiarchive
+ #endif
+ #if defined(BOOST_ARCHIVE_BINARY_OARCHIVE_HPP)
+ , boost::archive::binary_oarchive
+ #endif
+ #if defined(BOOST_ARCHIVE_BINARY_IARCHIVE_HPP)
+ , boost::archive::binary_iarchive
+ #endif
+ #if defined(BOOST_ARCHIVE_BINARY_WOARCHIVE_HPP)
+ , boost::archive::binary_woarchive
+ #endif
+ #if defined(BOOST_ARCHIVE_BINARY_WIARCHIVE_HPP)
+ , boost::archive::binary_wiarchive
+ #endif
+ #if defined(BOOST_ARCHIVE_XML_OARCHIVE_HPP)
+ , boost::archive::xml_oarchive
+ #endif
+ #if defined(BOOST_ARCHIVE_XML_IARCHIVE_HPP)
+ , boost::archive::xml_iarchive
+ #endif
+ #if defined(BOOST_ARCHIVE_XML_WOARCHIVE_HPP)
+ , boost::archive::xml_woarchive
+ #endif
+ #if defined(BOOST_ARCHIVE_XML_WIARCHIVE_HPP)
+ , boost::archive::xml_wiarchive
+ #endif
+ #if defined(BOOST_ARCHIVE_POLYMORPHIC_OARCHIVE_HPP)
+ , boost::archive::polymorphic_oarchive
+ #endif
+ #if defined(BOOST_ARCHIVE_POLYMORPHIC_IARCHIVE_HPP)
+ , boost::archive::polymorphic_iarchive
+ #endif
+ #if defined(BOOST_ARCHIVE_CUSTOM_IARCHIVE_TYPES)
+ , BOOST_ARCHIVE_CUSTOM_IARCHIVE_TYPES
+ #endif
+ #if defined(BOOST_ARCHIVE_CUSTOM_OARCHIVE_TYPES)
+ , BOOST_ARCHIVE_CUSTOM_OARCHIVE_TYPES
+ #endif
+ >::type
+ >::type type;
+};
+
+} // namespace detail
+} // namespace archive
+} // namespace boost
+
+#endif // BOOST_ARCHIVE_KNOWN_ARCHIVE_TYPES_HPP
diff --git a/boost/boost/archive/detail/known_archive_types_fwd.hpp b/boost/boost/archive/detail/known_archive_types_fwd.hpp
new file mode 100644
index 00000000000..28893efdc96
--- /dev/null
+++ b/boost/boost/archive/detail/known_archive_types_fwd.hpp
@@ -0,0 +1,39 @@
+#ifndef BOOST_ARCHIVE_KNOWN_ARCHIVE_TYPES_FWD_HPP
+#define BOOST_ARCHIVE_KNOWN_ARCHIVE_TYPES_FWD_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// known_archive_types_fwd.hpp: set traits of classes to be serialized
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+// list of archive type shipped with the serialization system
+
+#include <boost/mpl/list.hpp>
+
+namespace boost {
+namespace archive {
+namespace detail {
+
+// default implementation of known_archive_types list - 0 elements
+// used to generate warning when a polymporhic pointer is serialized
+// to an unknown archive - export would otherwise fail silently
+template<bool>
+struct known_archive_types {
+ typedef mpl::list<> type;
+};
+
+} // namespace detail
+} // namespace archive
+} // namespace boost
+
+#endif // BOOST_ARCHIVE_KNOWN_ARCHIVE_TYPES_FWD
diff --git a/boost/boost/archive/detail/oserializer.hpp b/boost/boost/archive/detail/oserializer.hpp
new file mode 100644
index 00000000000..2e2fa6fc66c
--- /dev/null
+++ b/boost/boost/archive/detail/oserializer.hpp
@@ -0,0 +1,574 @@
+#ifndef BOOST_ARCHIVE_OSERIALIZER_HPP
+#define BOOST_ARCHIVE_OSERIALIZER_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#pragma inline_depth(511)
+#pragma inline_recursion(on)
+#endif
+
+#if defined(__MWERKS__)
+#pragma inline_depth(511)
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// oserializer.hpp: interface for serialization system.
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <cassert>
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/smart_cast.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/static_warning.hpp>
+
+#include <boost/type_traits/is_pointer.hpp>
+#include <boost/type_traits/is_fundamental.hpp>
+#include <boost/type_traits/is_enum.hpp>
+#include <boost/type_traits/is_volatile.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/serialization/is_abstract.hpp>
+
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/less.hpp>
+#include <boost/mpl/greater_equal.hpp>
+#include <boost/mpl/equal_to.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/list.hpp>
+#include <boost/mpl/empty.hpp>
+#include <boost/mpl/not.hpp>
+
+ #ifndef BOOST_SERIALIZATION_DEFAULT_TYPE_INFO
+ #include <boost/serialization/extended_type_info_typeid.hpp>
+ #endif
+// the following is need only for dynamic cast of polymorphic pointers
+#include <boost/archive/detail/basic_oarchive.hpp>
+#include <boost/archive/detail/basic_oserializer.hpp>
+#include <boost/archive/detail/archive_pointer_oserializer.hpp>
+
+#include <boost/serialization/force_include.hpp>
+#include <boost/serialization/serialization.hpp>
+#include <boost/serialization/version.hpp>
+#include <boost/serialization/level.hpp>
+#include <boost/serialization/tracking.hpp>
+#include <boost/serialization/type_info_implementation.hpp>
+#include <boost/serialization/nvp.hpp>
+#include <boost/serialization/void_cast.hpp>
+
+#include <boost/archive/archive_exception.hpp>
+
+namespace boost {
+
+namespace serialization {
+ class extended_type_info;
+} // namespace serialization
+
+namespace archive {
+
+// an accessor to permit friend access to archives. Needed because
+// some compilers don't handle friend templates completely
+class save_access {
+public:
+ template<class Archive>
+ static void end_preamble(Archive & ar){
+ ar.end_preamble();
+ }
+ template<class Archive, class T>
+ static void save_primitive(Archive & ar, const T & t){
+ ar.end_preamble();
+ ar.save(t);
+ }
+};
+
+namespace detail {
+
+template<class Archive, class T>
+class oserializer : public basic_oserializer
+{
+private:
+ // private constructor to inhibit any existence other than the
+ // static one
+ explicit oserializer() :
+ basic_oserializer(
+ * boost::serialization::type_info_implementation<T>::type::get_instance()
+ )
+ {}
+public:
+ virtual BOOST_DLLEXPORT void save_object_data(
+ basic_oarchive & ar,
+ const void *x
+ ) const BOOST_USED ;
+ virtual bool class_info() const {
+ return boost::serialization::implementation_level<T>::value
+ >= boost::serialization::object_class_info;
+ }
+ virtual bool tracking(const unsigned int /* flags */) const {
+// if(0 != (flags & no_tracking))
+// return false;
+ return boost::serialization::tracking_level<T>::value == boost::serialization::track_always
+ || boost::serialization::tracking_level<T>::value == boost::serialization::track_selectivly
+ && serialized_as_pointer();
+ }
+ virtual unsigned int version() const {
+ return ::boost::serialization::version<T>::value;
+ }
+ virtual bool is_polymorphic() const {
+ typedef BOOST_DEDUCED_TYPENAME boost::serialization::type_info_implementation<
+ T
+ >::type::is_polymorphic::type typex;
+ return typex::value;
+ }
+ static oserializer & instantiate(){
+ static oserializer instance;
+ return instance;
+ }
+ virtual ~oserializer(){}
+};
+
+template<class Archive, class T>
+BOOST_DLLEXPORT void oserializer<Archive, T>::save_object_data(
+ basic_oarchive & ar,
+ const void *x
+) const {
+ // make sure call is routed through the highest interface that might
+ // be specialized by the user.
+ boost::serialization::serialize_adl(
+ boost::smart_cast_reference<Archive &>(ar),
+ * static_cast<T *>(const_cast<void *>(x)),
+ version()
+ );
+}
+
+// instantiation of this template creates a static object. Note inversion of
+// normal argument order to workaround bizarre error in MSVC 6.0 which only
+// manifests iftself during compiler time.
+template<class T, class Archive>
+class pointer_oserializer : public archive_pointer_oserializer<Archive>
+{
+private:
+ virtual const basic_oserializer & get_basic_serializer() const {
+ return oserializer<Archive, T>::instantiate();
+ }
+ virtual BOOST_DLLEXPORT void save_object_ptr(
+ basic_oarchive & ar,
+ const void * x
+ ) const BOOST_USED ;
+#if defined(__GNUC__) || ( defined(BOOST_MSVC) && (_MSC_VER <= 1300) )
+public:
+#endif
+ // private constructor to inhibit any existence other than the
+ // static one. Note GCC doesn't permit constructor to be private
+ explicit BOOST_DLLEXPORT pointer_oserializer() BOOST_USED;
+ static const pointer_oserializer instance;
+public:
+ #if ! BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
+ // at least one compiler (CW) seems to require that serialize_adl
+ // be explicitly instantiated. Still under investigation.
+ void (* const m)(Archive &, T &, const unsigned);
+ boost::serialization::extended_type_info * (* e)();
+ #endif
+ static BOOST_DLLEXPORT const pointer_oserializer & instantiate() BOOST_USED;
+ virtual ~pointer_oserializer(){}
+};
+
+template<class T, class Archive>
+BOOST_DLLEXPORT const pointer_oserializer<T, Archive> &
+pointer_oserializer<T, Archive>::instantiate(){
+ return instance;
+}
+
+// note: instances of this template to be constructed before the main
+// is called in order for things to be initialized properly. For this
+// reason, hiding the instance in a static function as was done above
+// won't work here so we created a free instance here.
+template<class T, class Archive>
+const pointer_oserializer<T, Archive> pointer_oserializer<T, Archive>::instance;
+
+template<class T, class Archive>
+BOOST_DLLEXPORT void pointer_oserializer<T, Archive>::save_object_ptr(
+ basic_oarchive & ar,
+ const void * x
+) const {
+ assert(NULL != x);
+ // make sure call is routed through the highest interface that might
+ // be specialized by the user.
+ T * t = static_cast<T *>(const_cast<void *>(x));
+ const unsigned int file_version = boost::serialization::version<T>::value;
+ Archive & ar_impl = boost::smart_cast_reference<Archive &>(ar);
+ boost::serialization::save_construct_data_adl<Archive, T>(
+ ar_impl,
+ t,
+ file_version
+ );
+ ar_impl << boost::serialization::make_nvp(NULL, * t);
+}
+
+template<class T, class Archive>
+#if ! BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
+BOOST_DLLEXPORT pointer_oserializer<T, Archive>::pointer_oserializer() :
+ archive_pointer_oserializer<Archive>(
+ * boost::serialization::type_info_implementation<T>::type::get_instance()
+ ),
+ m(boost::serialization::serialize_adl<Archive, T>),
+ e(boost::serialization::type_info_implementation<T>::type::get_instance)
+#else
+BOOST_DLLEXPORT pointer_oserializer<T, Archive>::pointer_oserializer() :
+ archive_pointer_oserializer<Archive>(
+ * boost::serialization::type_info_implementation<T>::type::get_instance()
+ )
+#endif
+{
+ // make sure appropriate member function is instantiated
+ oserializer<Archive, T> & bos = oserializer<Archive, T>::instantiate();
+ bos.set_bpos(this);
+}
+
+template<class Archive, class T>
+struct save_non_pointer_type {
+ // note this bounces the call right back to the archive
+ // with no runtime overhead
+ struct save_primitive {
+ static void invoke(Archive & ar, const T & t){
+ save_access::save_primitive(ar, t);
+ }
+ };
+ // same as above but passes through serialization
+ struct save_only {
+ static void invoke(Archive & ar, const T & t){
+ // make sure call is routed through the highest interface that might
+ // be specialized by the user.
+ boost::serialization::serialize_adl(
+ ar,
+ const_cast<T &>(t),
+ ::boost::serialization::version<T>::value
+ );
+ }
+ };
+ // adds class information to the archive. This includes
+ // serialization level and class version
+ struct save_standard {
+ static void invoke(Archive &ar, const T & t){
+ ar.save_object(& t, oserializer<Archive, T>::instantiate());
+ }
+ };
+
+ // adds class information to the archive. This includes
+ // serialization level and class version
+ struct save_conditional {
+ static void invoke(Archive &ar, const T &t){
+ //if(0 == (ar.get_flags() & no_tracking))
+ save_standard::invoke(ar, t);
+ //else
+ // save_only::invoke(ar, t);
+ }
+ };
+
+ typedef
+ BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ // if its primitive
+ mpl::equal_to<
+ boost::serialization::implementation_level<T>,
+ mpl::int_<boost::serialization::primitive_type>
+ >,
+ mpl::identity<save_primitive>,
+ // else
+ BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ // class info / version
+ mpl::greater_equal<
+ boost::serialization::implementation_level<T>,
+ mpl::int_<boost::serialization::object_class_info>
+ >,
+ // do standard save
+ mpl::identity<save_standard>,
+ // else
+ BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ // no tracking
+ mpl::equal_to<
+ boost::serialization::tracking_level<T>,
+ mpl::int_<boost::serialization::track_never>
+ >,
+ // do a fast save
+ mpl::identity<save_only>,
+ // else
+ // do a fast save only tracking is turned off
+ mpl::identity<save_conditional>
+ > > >::type typex;
+
+ static void invoke(Archive & ar, const T & t){
+ // check that we're not trying to serialize something that
+ // has been marked not to be serialized. If this your program
+ // traps here, you've tried to serialize a class whose trait
+ // has been marked "non-serializable". Either reset the trait
+ // (see level.hpp) or change program not to serialize items of this class
+ BOOST_STATIC_ASSERT((
+ mpl::greater_equal<
+ boost::serialization::implementation_level<T>,
+ mpl::int_<boost::serialization::primitive_type>
+ >::value
+ ));
+ typex::invoke(ar, t);
+ };
+};
+
+template<class Archive, class TPtr>
+struct save_pointer_type {
+ template<class T>
+ struct abstract
+ {
+ static const basic_pointer_oserializer * register_type(Archive & /* ar */){
+ // it has? to be polymorphic
+ BOOST_STATIC_ASSERT(
+ boost::serialization::type_info_implementation<T>::type::is_polymorphic::value
+ );
+ return static_cast<const basic_pointer_oserializer *>(NULL);
+ }
+ };
+
+ template<class T>
+ struct non_abstract
+ {
+ static const basic_pointer_oserializer * register_type(Archive & ar){
+ return ar.register_type(static_cast<T *>(NULL));
+ }
+ };
+
+ template<class T>
+ static const basic_pointer_oserializer * register_type(Archive &ar, T & /*t*/){
+ // there should never be any need to save an abstract polymorphic
+ // class pointer. Inhibiting code generation for this
+ // permits abstract base classes to be used - note: exception
+ // virtual serialize functions used for plug-ins
+ typedef
+ BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ serialization::is_abstract<T>,
+ mpl::identity<abstract<T> >,
+ mpl::identity<non_abstract<T> >
+ >::type typex;
+ return typex::register_type(ar);
+ }
+
+ template<class T>
+ struct non_polymorphic
+ {
+ static void save(
+ Archive &ar,
+ const T & t,
+ const basic_pointer_oserializer * bpos_ptr
+ ){
+ // save the requested pointer type
+ ar.save_pointer(& t, bpos_ptr);
+ }
+ };
+
+ template<class T>
+ struct polymorphic
+ {
+ static void save(
+ Archive &ar,
+ const T & t,
+ const basic_pointer_oserializer * bpos_ptr
+ ){
+ const boost::serialization::extended_type_info * this_type
+ = boost::serialization::type_info_implementation<T>::type::get_instance();
+ // retrieve the true type of the object pointed to
+ // if this assertion fails its an error in this library
+ assert(NULL != this_type);
+ const boost::serialization::extended_type_info * true_type
+ = boost::serialization::type_info_implementation<T>::type::get_derived_extended_type_info(t);
+ // note:if this exception is thrown, be sure that derived pointer
+ // is either regsitered or exported.
+ if(NULL == true_type){
+ boost::throw_exception(
+ archive_exception(archive_exception::unregistered_class)
+ );
+ }
+
+ // if its not a pointer to a more derived type
+ const void *vp = static_cast<const void *>(&t);
+ if(*this_type == *true_type){
+ ar.save_pointer(vp, bpos_ptr);
+ return;
+ }
+ // convert pointer to more derived type. if this is thrown
+ // it means that the base/derived relationship hasn't be registered
+ vp = serialization::void_downcast(*true_type, *this_type, &t);
+ if(NULL == vp){
+ boost::throw_exception(
+ archive_exception(archive_exception::unregistered_cast)
+ );
+ }
+
+ // sice true_type is valid, and this only gets made if the
+ // pointer oserializer object has been created, this should never
+ // fail
+ bpos_ptr = archive_pointer_oserializer<Archive>::find(* true_type);
+ assert(NULL != bpos_ptr);
+ if(NULL == bpos_ptr)
+ boost::throw_exception(
+ archive_exception(archive_exception::unregistered_class)
+ );
+ ar.save_pointer(vp, bpos_ptr);
+ }
+ };
+
+ template<class T>
+ static void save(
+ Archive & ar,
+ const T &t,
+ const basic_pointer_oserializer * bpos_ptr
+ ){
+ typedef BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ BOOST_DEDUCED_TYPENAME boost::serialization::
+ type_info_implementation<T>::type::is_polymorphic,
+ mpl::identity<polymorphic<T> >,
+ mpl::identity<non_polymorphic<T> >
+ >::type typey;
+ typey::save(ar, const_cast<T &>(t), bpos_ptr);
+ }
+
+ template<class T>
+ static void const_check(T & t){
+ BOOST_STATIC_ASSERT(! boost::is_const<T>::value);
+ }
+
+ static void invoke(Archive &ar, const TPtr t){
+ #ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ // if your program traps here, its because you tried to do
+ // something like ar << t where t is a pointer to a const value
+ // void f3(A const* a, text_oarchive& oa)
+ // {
+ // oa << a;
+ // }
+ // with a compiler which doesn't support remove_const
+ // const_check(* t);
+ #else
+ // otherwise remove the const
+ #endif
+ const basic_pointer_oserializer * bpos_ptr = register_type(ar, * t);
+ if(NULL == t){
+ basic_oarchive & boa = boost::smart_cast_reference<basic_oarchive &>(ar);
+ boa.save_null_pointer();
+ save_access::end_preamble(ar);
+ return;
+ }
+ save(ar, * t, bpos_ptr);
+ };
+};
+
+template<class Archive, class T>
+struct save_enum_type
+{
+ static void invoke(Archive &ar, const T &t){
+ // convert enum to integers on save
+ const int i = static_cast<int>(t);
+ ar << boost::serialization::make_nvp(NULL, i);
+ }
+};
+
+template<class Archive, class T>
+struct save_array_type
+{
+ static void invoke(Archive &ar, const T &t){
+ save_access::end_preamble(ar);
+ // consider alignment
+ int count = sizeof(t) / (
+ static_cast<const char *>(static_cast<const void *>(&t[1]))
+ - static_cast<const char *>(static_cast<const void *>(&t[0]))
+ );
+ ar << BOOST_SERIALIZATION_NVP(count);
+ int i;
+ for(i = 0; i < count; ++i)
+ ar << boost::serialization::make_nvp("item", t[i]);
+ }
+};
+
+// note bogus arguments to workaround msvc 6 silent runtime failure
+// declaration to satisfy gcc
+template<class Archive, class T>
+BOOST_DLLEXPORT const basic_pointer_oserializer &
+instantiate_pointer_oserializer(
+ Archive * /* ar = NULL */,
+ T * /* t = NULL */
+) BOOST_USED ;
+// definition
+template<class Archive, class T>
+BOOST_DLLEXPORT const basic_pointer_oserializer &
+instantiate_pointer_oserializer(
+ Archive * /* ar = NULL */,
+ T * /* t = NULL */
+){
+ // note: reversal of order of arguments to work around msvc 6.0 bug
+ // that manifests itself while trying to link.
+ return pointer_oserializer<T, Archive>::instantiate();
+}
+
+} // detail
+
+template<class Archive, class T>
+inline void save(Archive & ar, const T &t){
+ typedef
+ BOOST_DEDUCED_TYPENAME mpl::eval_if<is_pointer<T>,
+ mpl::identity<detail::save_pointer_type<Archive, T> >,
+ //else
+ BOOST_DEDUCED_TYPENAME mpl::eval_if<is_enum<T>,
+ mpl::identity<detail::save_enum_type<Archive, T> >,
+ //else
+ BOOST_DEDUCED_TYPENAME mpl::eval_if<is_array<T>,
+ mpl::identity<detail::save_array_type<Archive, T> >,
+ //else
+ mpl::identity<detail::save_non_pointer_type<Archive, T> >
+ >
+ >
+ >::type typex;
+ typex::invoke(ar, t);
+}
+
+#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+template<class T>
+struct check_tracking {
+ typedef BOOST_DEDUCED_TYPENAME mpl::if_<
+ // if its never tracked.
+ BOOST_DEDUCED_TYPENAME mpl::equal_to<
+ serialization::tracking_level<T>,
+ mpl::int_<serialization::track_never>
+ >,
+ // it better not be a pointer
+ mpl::not_<is_pointer<T> >,
+ //else
+ // otherwise if it might be tracked. So there shouldn't
+ // be any problem making a const
+ is_const<T>
+ >::type typex;
+ BOOST_STATIC_CONSTANT(bool, value = typex::value);
+};
+
+template<class Archive, class T>
+inline void save(Archive & ar, T &t){
+ // if your program traps here, it indicates taht your doing one of the following:
+ // a) serializing an object of a type marked "track_never" through a pointer.
+ // b) saving an non-const object of a type not markd "track_never)
+ // Either of these conditions may be an indicator of an error usage of the
+ // serialization library and should be double checked. See documentation on
+ // object tracking.
+ BOOST_STATIC_ASSERT(check_tracking<T>::value);
+ save(ar, const_cast<const T &>(t));
+}
+#endif
+
+} // namespace archive
+} // namespace boost
+
+#endif // BOOST_ARCHIVE_OSERIALIZER_HPP
diff --git a/boost/boost/archive/detail/polymorphic_iarchive_impl.hpp b/boost/boost/archive/detail/polymorphic_iarchive_impl.hpp
new file mode 100644
index 00000000000..07c631363bc
--- /dev/null
+++ b/boost/boost/archive/detail/polymorphic_iarchive_impl.hpp
@@ -0,0 +1,209 @@
+#ifndef BOOST_ARCHIVE_DETAIL_POLYMORPHIC_IARCHIVE_IMPL_HPP
+#define BOOST_ARCHIVE_DETAIL_POLYMORPHIC_IARCHIVE_IMPL_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// polymorphic_iarchive_impl.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <cstddef>
+#include <string>
+#include <ostream>
+#include <boost/noncopyable.hpp>
+#include <boost/cstdint.hpp>
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::size_t;
+} // namespace std
+#endif
+
+#include <boost/archive/polymorphic_iarchive.hpp>
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+namespace boost {
+template<class T>
+class shared_ptr;
+namespace serialization {
+ class extended_type_info;
+} // namespace serialization
+namespace archive {
+namespace detail{
+
+class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_iserializer;
+class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_pointer_iserializer;
+
+template<class ArchiveImplementation>
+class polymorphic_iarchive_impl :
+ public polymorphic_iarchive,
+ // note: gcc dynamic cross cast fails if the the derivation below is
+ // not public. I think this is a mistake.
+ public /*protected*/ ArchiveImplementation,
+ private boost::noncopyable
+{
+private:
+ // these are used by the serialization library.
+ virtual void load_object(
+ void *t,
+ const basic_iserializer & bis
+ ){
+ ArchiveImplementation::load_object(t, bis);
+ }
+ virtual const basic_pointer_iserializer * load_pointer(
+ void * & t,
+ const basic_pointer_iserializer * bpis_ptr,
+ const basic_pointer_iserializer * (*finder)(
+ const boost::serialization::extended_type_info & type
+ )
+ ){
+ return ArchiveImplementation::load_pointer(t, bpis_ptr, finder);
+ }
+ virtual void set_library_version(unsigned int archive_library_version){
+ ArchiveImplementation::set_library_version(archive_library_version);
+ }
+ virtual unsigned int get_library_version() const{
+ return ArchiveImplementation::get_library_version();
+ }
+ virtual unsigned int get_flags() const {
+ return ArchiveImplementation::get_flags();
+ }
+ virtual void delete_created_pointers(){
+ ArchiveImplementation::delete_created_pointers();
+ }
+ virtual void reset_object_address(
+ const void * new_address,
+ const void * old_address
+ ){
+ ArchiveImplementation::reset_object_address(new_address, old_address);
+ }
+ virtual void load_binary(void * t, std::size_t size){
+ ArchiveImplementation::load_binary(t, size);
+ }
+ // primitive types the only ones permitted by polymorphic archives
+ virtual void load(bool & t){
+ ArchiveImplementation::load(t);
+ }
+ virtual void load(char & t){
+ ArchiveImplementation::load(t);
+ }
+ virtual void load(signed char & t){
+ ArchiveImplementation::load(t);
+ }
+ virtual void load(unsigned char & t){
+ ArchiveImplementation::load(t);
+ }
+ #ifndef BOOST_NO_CWCHAR
+ #ifndef BOOST_NO_INTRINSIC_WCHAR_T
+ virtual void load(wchar_t & t){
+ ArchiveImplementation::load(t);
+ }
+ #endif
+ #endif
+ virtual void load(short & t){
+ ArchiveImplementation::load(t);
+ }
+ virtual void load(unsigned short & t){
+ ArchiveImplementation::load(t);
+ }
+ virtual void load(int & t){
+ ArchiveImplementation::load(t);
+ }
+ virtual void load(unsigned int & t){
+ ArchiveImplementation::load(t);
+ }
+ virtual void load(long & t){
+ ArchiveImplementation::load(t);
+ }
+ virtual void load(unsigned long & t){
+ ArchiveImplementation::load(t);
+ }
+ #if !defined(BOOST_NO_INTRINSIC_INT64_T)
+ virtual void load(boost::int64_t & t){
+ ArchiveImplementation::load(t);
+ }
+ virtual void load(boost::uint64_t & t){
+ ArchiveImplementation::load(t);
+ }
+ #endif
+ virtual void load(float & t){
+ ArchiveImplementation::load(t);
+ }
+ virtual void load(double & t){
+ ArchiveImplementation::load(t);
+ }
+ virtual void load(std::string & t){
+ ArchiveImplementation::load(t);
+ }
+ #ifndef BOOST_NO_STD_WSTRING
+ virtual void load(std::wstring & t){
+ ArchiveImplementation::load(t);
+ }
+ #endif
+ // used for xml and other tagged formats default does nothing
+ virtual void load_start(const char * name){
+ ArchiveImplementation::load_start(name);
+ }
+ virtual void load_end(const char * name){
+ ArchiveImplementation::load_end(name);
+ }
+
+ virtual void register_basic_serializer(const basic_iserializer & bis){
+ ArchiveImplementation::register_basic_serializer(bis);
+ }
+ virtual void lookup_basic_helper(
+ const boost::serialization::extended_type_info * const eti,
+ boost::shared_ptr<void> & sph
+ ){
+ ArchiveImplementation::lookup_basic_helper(eti, sph);
+ }
+ virtual void insert_basic_helper(
+ const boost::serialization::extended_type_info * const eti,
+ boost::shared_ptr<void> & sph
+ ){
+ ArchiveImplementation::insert_basic_helper(eti, sph);
+ }
+public:
+ // this can't be inherited because they appear in mulitple
+ // parents
+ typedef mpl::bool_<true> is_loading;
+ typedef mpl::bool_<false> is_saving;
+ // the >> operator
+ template<class T>
+ polymorphic_iarchive & operator>>(T & t){
+ return polymorphic_iarchive::operator>>(t);
+ }
+
+ // the & operator
+ template<class T>
+ polymorphic_iarchive & operator&(T & t){
+ return polymorphic_iarchive::operator&(t);
+ }
+
+ // all current archives take a stream as constructor argument
+ template <class _Elem, class _Tr>
+ polymorphic_iarchive_impl(
+ std::basic_istream<_Elem, _Tr> & is,
+ unsigned int flags = 0
+ ) :
+ ArchiveImplementation(is, flags)
+ {}
+};
+
+} // namespace detail
+} // namespace archive
+} // namespace boost
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // BOOST_ARCHIVE_DETAIL_POLYMORPHIC_IARCHIVE_IMPL_HPP
diff --git a/boost/boost/archive/detail/polymorphic_oarchive_impl.hpp b/boost/boost/archive/detail/polymorphic_oarchive_impl.hpp
new file mode 100644
index 00000000000..cfa0a187e9e
--- /dev/null
+++ b/boost/boost/archive/detail/polymorphic_oarchive_impl.hpp
@@ -0,0 +1,197 @@
+#ifndef BOOST_ARCHIVE_DETAIL_POLYMORPHIC_OARCHIVE_IMPL_HPP
+#define BOOST_ARCHIVE_DETAIL_POLYMORPHIC_OARCHIVE_IMPL_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// polymorphic_oarchive_impl.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <string>
+#include <ostream>
+#include <boost/noncopyable.hpp>
+#include <boost/cstdint.hpp>
+#include <cstddef> // size_t
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::size_t;
+} // namespace std
+#endif
+
+#include <boost/archive/polymorphic_oarchive.hpp>
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+namespace boost {
+template<class T>
+class shared_ptr;
+namespace serialization {
+ class extended_type_info;
+} // namespace serialization
+namespace archive {
+namespace detail{
+
+class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_oserializer;
+class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_pointer_oserializer;
+
+template<class ArchiveImplementation>
+class polymorphic_oarchive_impl :
+ public polymorphic_oarchive,
+ // note: gcc dynamic cross cast fails if the the derivation below is
+ // not public. I think this is a mistake.
+ public /*protected*/ ArchiveImplementation,
+ private boost::noncopyable
+{
+private:
+ // these are used by the serialization library.
+ virtual void save_object(
+ const void *x,
+ const detail::basic_oserializer & bos
+ ){
+ ArchiveImplementation::save_object(x, bos);
+ }
+ virtual void save_pointer(
+ const void * t,
+ const detail::basic_pointer_oserializer * bpos_ptr
+ ){
+ ArchiveImplementation::save_pointer(t, bpos_ptr);
+ }
+ virtual void save_null_pointer(){
+ ArchiveImplementation::save_null_pointer();
+ }
+ // primitive types the only ones permitted by polymorphic archives
+ virtual void save(const bool t){
+ ArchiveImplementation::save(t);
+ }
+ virtual void save(const char t){
+ ArchiveImplementation::save(t);
+ }
+ virtual void save(const signed char t){
+ ArchiveImplementation::save(t);
+ }
+ virtual void save(const unsigned char t){
+ ArchiveImplementation::save(t);
+ }
+ #ifndef BOOST_NO_CWCHAR
+ #ifndef BOOST_NO_INTRINSIC_WCHAR_T
+ virtual void save(const wchar_t t){
+ ArchiveImplementation::save(t);
+ }
+ #endif
+ #endif
+ virtual void save(const short t){
+ ArchiveImplementation::save(t);
+ }
+ virtual void save(const unsigned short t){
+ ArchiveImplementation::save(t);
+ }
+ virtual void save(const int t){
+ ArchiveImplementation::save(t);
+ }
+ virtual void save(const unsigned int t){
+ ArchiveImplementation::save(t);
+ }
+ virtual void save(const long t){
+ ArchiveImplementation::save(t);
+ }
+ virtual void save(const unsigned long t){
+ ArchiveImplementation::save(t);
+ }
+ #if !defined(BOOST_NO_INTRINSIC_INT64_T)
+ virtual void save(const boost::int64_t t){
+ ArchiveImplementation::save(t);
+ }
+ virtual void save(const boost::uint64_t t){
+ ArchiveImplementation::save(t);
+ }
+ #endif
+ virtual void save(const float t){
+ ArchiveImplementation::save(t);
+ }
+ virtual void save(const double t){
+ ArchiveImplementation::save(t);
+ }
+ virtual void save(const std::string & t){
+ ArchiveImplementation::save(t);
+ }
+ #ifndef BOOST_NO_STD_WSTRING
+ virtual void save(const std::wstring & t){
+ ArchiveImplementation::save(t);
+ }
+ #endif
+ virtual unsigned int get_library_version() const{
+ return ArchiveImplementation::get_library_version();
+ }
+ virtual unsigned int get_flags() const {
+ return ArchiveImplementation::get_flags();
+ }
+ virtual void save_binary(const void * t, std::size_t size){
+ ArchiveImplementation::save_binary(t, size);
+ }
+ // used for xml and other tagged formats default does nothing
+ virtual void save_start(const char * name){
+ ArchiveImplementation::save_start(name);
+ }
+ virtual void save_end(const char * name){
+ ArchiveImplementation::save_end(name);
+ }
+ virtual void end_preamble(){
+ ArchiveImplementation::end_preamble();
+ }
+ virtual void register_basic_serializer(const detail::basic_oserializer & bos){
+ ArchiveImplementation::register_basic_serializer(bos);
+ }
+ virtual void lookup_basic_helper(
+ const boost::serialization::extended_type_info * const eti,
+ shared_ptr<void> & sph
+ ){
+ ArchiveImplementation::lookup_basic_helper(eti, sph);
+ }
+ virtual void insert_basic_helper(
+ const boost::serialization::extended_type_info * const eti,
+ shared_ptr<void> & sph
+ ){
+ ArchiveImplementation::insert_basic_helper(eti, sph);
+ }
+public:
+ // this can't be inherited because they appear in mulitple
+ // parents
+ typedef mpl::bool_<false> is_loading;
+ typedef mpl::bool_<true> is_saving;
+ // the << operator
+ template<class T>
+ polymorphic_oarchive & operator<<(T & t){
+ return polymorphic_oarchive::operator<<(t);
+ }
+ // the & operator
+ template<class T>
+ polymorphic_oarchive & operator&(T & t){
+ return polymorphic_oarchive::operator&(t);
+ }
+ // all current archives take a stream as constructor argument
+ template <class _Elem, class _Tr>
+ polymorphic_oarchive_impl(
+ std::basic_ostream<_Elem, _Tr> & os,
+ unsigned int flags = 0
+ ) :
+ ArchiveImplementation(os, flags)
+ {}
+};
+
+} // namespace detail
+} // namespace archive
+} // namespace boost
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // BOOST_ARCHIVE_DETAIL_POLYMORPHIC_OARCHIVE_IMPL_HPP
diff --git a/boost/boost/archive/detail/utf8_codecvt_facet.hpp b/boost/boost/archive/detail/utf8_codecvt_facet.hpp
new file mode 100644
index 00000000000..08b14420c00
--- /dev/null
+++ b/boost/boost/archive/detail/utf8_codecvt_facet.hpp
@@ -0,0 +1,22 @@
+// Copyright © 2001 Ronald Garcia, Indiana University (garcia@osl.iu.edu)
+// Andrew Lumsdaine, Indiana University (lums@osl.iu.edu). Permission to copy,
+// use, modify, sell and distribute this software is granted provided this
+// copyright notice appears in all copies. This software is provided "as is"
+// without express or implied warranty, and with no claim as to its suitability
+// for any purpose.
+
+#ifndef BOOST_ARCHIVE_DETAIL_UTF8_CODECVT_FACET_HPP
+#define BOOST_ARCHIVE_DETAIL_UTF8_CODECVT_FACET_HPP
+
+#define BOOST_UTF8_BEGIN_NAMESPACE \
+ namespace boost { namespace archive { namespace detail {
+#define BOOST_UTF8_DECL
+#define BOOST_UTF8_END_NAMESPACE }}}
+
+#include <boost/detail/utf8_codecvt_facet.hpp>
+
+#undef BOOST_UTF8_END_NAMESPACE
+#undef BOOST_UTF8_DECL
+#undef BOOST_UTF8_BEGIN_NAMESPACE
+
+#endif // BOOST_ARCHIVE_DETAIL_UTF8_CODECVT_FACET_HPP
diff --git a/boost/boost/archive/dinkumware.hpp b/boost/boost/archive/dinkumware.hpp
new file mode 100644
index 00000000000..bfa828d53d8
--- /dev/null
+++ b/boost/boost/archive/dinkumware.hpp
@@ -0,0 +1,224 @@
+#ifndef BOOST_ARCHIVE_DINKUMWARE_HPP
+#define BOOST_ARCHIVE_DINKUMWARE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// dinkumware.hpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+// this file adds a couple of things that are missing from the dinkumware
+// implementation of the standard library.
+
+#include <iterator>
+#include <string>
+
+#include <boost/config.hpp>
+#include <boost/cstdint.hpp>
+
+namespace std {
+
+// define i/o operators for 64 bit integers
+template<class CharType>
+basic_ostream<CharType> &
+operator<<(basic_ostream<CharType> & os, boost::uint64_t t){
+ // octal rendering of 64 bit number would be 22 octets + eos
+ CharType d[23];
+ unsigned int radix;
+
+ if(os.flags() & (int)std::ios_base::hex)
+ radix = 16;
+ else
+ if(os.flags() & (int)std::ios_base::oct)
+ radix = 8;
+ else
+ //if(s.flags() & (int)std::ios_base::dec)
+ radix = 10;
+ unsigned int i = 0;
+ do{
+ unsigned int j = t % radix;
+ d[i++] = j + ((j < 10) ? '0' : ('a' - 10));
+ t /= radix;
+ }
+ while(t > 0);
+ d[i--] = '\0';
+
+ // reverse digits
+ unsigned int j = 0;
+ while(j < i){
+ CharType k = d[i];
+ d[i] = d[j];
+ d[j] = k;
+ --i;++j;
+ }
+ os << d;
+ return os;
+
+}
+
+template<class CharType>
+basic_ostream<CharType> &
+operator<<(basic_ostream<CharType> &os, boost::int64_t t){
+ if(0 <= t){
+ os << static_cast<boost::uint64_t>(t);
+ }
+ else{
+ os.put('-');
+ os << -t;
+ }
+ return os;
+}
+
+template<class CharType>
+basic_istream<CharType> &
+operator>>(basic_istream<CharType> &is, boost::int64_t & t){
+ CharType d;
+ do{
+ d = is.get();
+ }
+ while(::isspace(d));
+ bool negative = (d == '-');
+ if(negative)
+ d = is.get();
+ unsigned int radix;
+ if(is.flags() & (int)std::ios_base::hex)
+ radix = 16;
+ else
+ if(is.flags() & (int)std::ios_base::oct)
+ radix = 8;
+ else
+ //if(s.flags() & (int)std::ios_base::dec)
+ radix = 10;
+ t = 0;
+ do{
+ if('0' <= d && d <= '9')
+ t = t * radix + (d - '0');
+ else
+ if('a' <= d && d <= 'f')
+ t = t * radix + (d - 'a' + 10);
+ else
+ break;
+ d = is.get();
+ }
+ while(!is.fail());
+ // restore the delimiter
+ is.putback(d);
+ is.clear();
+ if(negative)
+ t = -t;
+ return is;
+}
+
+template<class CharType>
+basic_istream<CharType> &
+operator>>(basic_istream<CharType> &is, boost::uint64_t & t){
+ boost::int64_t it;
+ is >> it;
+ t = it;
+ return is;
+}
+
+//#endif
+
+template<>
+class back_insert_iterator<basic_string<char> > : public
+ iterator<output_iterator_tag, char>
+{
+public:
+ typedef basic_string<char> container_type;
+ typedef container_type::reference reference;
+
+ explicit back_insert_iterator(container_type & s)
+ : container(& s)
+ {} // construct with container
+
+ back_insert_iterator<container_type> & operator=(
+ container_type::const_reference Val_
+ ){ // push value into container
+ //container->push_back(Val_);
+ *container += Val_;
+ return (*this);
+ }
+
+ back_insert_iterator<container_type> & operator*(){
+ return (*this);
+ }
+
+ back_insert_iterator<container_type> & operator++(){
+ // pretend to preincrement
+ return (*this);
+ }
+
+ back_insert_iterator<container_type> operator++(int){
+ // pretend to postincrement
+ return (*this);
+ }
+
+protected:
+ container_type *container; // pointer to container
+};
+
+template<char>
+inline back_insert_iterator<basic_string<char> > back_inserter(
+ basic_string<char> & s
+){
+ return (std::back_insert_iterator<basic_string<char> >(s));
+}
+
+template<>
+class back_insert_iterator<basic_string<wchar_t> > : public
+ iterator<output_iterator_tag, wchar_t>
+{
+public:
+ typedef basic_string<wchar_t> container_type;
+ typedef container_type::reference reference;
+
+ explicit back_insert_iterator(container_type & s)
+ : container(& s)
+ {} // construct with container
+
+ back_insert_iterator<container_type> & operator=(
+ container_type::const_reference Val_
+ ){ // push value into container
+ //container->push_back(Val_);
+ *container += Val_;
+ return (*this);
+ }
+
+ back_insert_iterator<container_type> & operator*(){
+ return (*this);
+ }
+
+ back_insert_iterator<container_type> & operator++(){
+ // pretend to preincrement
+ return (*this);
+ }
+
+ back_insert_iterator<container_type> operator++(int){
+ // pretend to postincrement
+ return (*this);
+ }
+
+protected:
+ container_type *container; // pointer to container
+};
+
+template<wchar_t>
+inline back_insert_iterator<basic_string<wchar_t> > back_inserter(
+ basic_string<wchar_t> & s
+){
+ return (std::back_insert_iterator<basic_string<wchar_t> >(s));
+}
+
+} // namespace std
+
+#endif //BOOST_ARCHIVE_DINKUMWARE_HPP
diff --git a/boost/boost/archive/impl/archive_pointer_iserializer.ipp b/boost/boost/archive/impl/archive_pointer_iserializer.ipp
new file mode 100644
index 00000000000..360e4777003
--- /dev/null
+++ b/boost/boost/archive/impl/archive_pointer_iserializer.ipp
@@ -0,0 +1,65 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// pointer_iserializer.ipp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <cassert>
+
+#include <boost/config.hpp> // msvc 6.0 needs this for warning suppression
+
+#include <boost/archive/detail/basic_serializer_map.hpp>
+#include <boost/archive/detail/archive_pointer_iserializer.hpp>
+
+namespace boost {
+namespace archive {
+namespace detail {
+
+template<class Archive>
+basic_serializer_map *
+iserializer_map(){
+ static bool deleted = false;
+ static basic_serializer_map map(deleted);
+ return deleted ? NULL : & map;
+}
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY())
+archive_pointer_iserializer<Archive>::archive_pointer_iserializer(
+ const boost::serialization::extended_type_info & eti
+) :
+ basic_pointer_iserializer(eti)
+{
+ basic_serializer_map *mp = iserializer_map<Archive>();
+ assert(NULL != mp);
+ mp->insert(this);
+}
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(const basic_pointer_iserializer *)
+archive_pointer_iserializer<Archive>::find(
+ const boost::serialization::extended_type_info & eti
+){
+ basic_serializer_map *mp = iserializer_map<Archive>();
+ assert(NULL != mp);
+ return static_cast<const basic_pointer_iserializer *>(mp->tfind(eti));
+}
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY())
+archive_pointer_iserializer<Archive>::~archive_pointer_iserializer(){
+ // note: we need to check that the map still exists as we can't depend
+ // on static variables being constructed in a specific sequence
+ basic_serializer_map *mp = iserializer_map<Archive>();
+ if(NULL == mp)
+ return;
+ mp->erase(this);
+}
+
+} // namespace detail
+} // namespace archive
+} // namespace boost
diff --git a/boost/boost/archive/impl/archive_pointer_oserializer.ipp b/boost/boost/archive/impl/archive_pointer_oserializer.ipp
new file mode 100644
index 00000000000..717d76ea99a
--- /dev/null
+++ b/boost/boost/archive/impl/archive_pointer_oserializer.ipp
@@ -0,0 +1,63 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// archive_pointer_oserializer.ipp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp> // msvc 6.0 needs this for warning suppression
+
+#include <boost/archive/detail/archive_pointer_oserializer.hpp>
+#include <boost/archive/detail/basic_serializer_map.hpp>
+
+namespace boost {
+namespace archive {
+namespace detail {
+
+template<class Archive>
+basic_serializer_map *
+oserializer_map(){
+ static bool deleted = false;
+ static basic_serializer_map map(deleted);
+ return deleted ? NULL : & map;
+}
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY())
+archive_pointer_oserializer<Archive>::archive_pointer_oserializer(
+ const boost::serialization::extended_type_info & eti
+) :
+ basic_pointer_oserializer(eti)
+{
+ basic_serializer_map *mp = oserializer_map<Archive>();
+ assert(NULL != mp);
+ mp->insert(this);
+}
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(const basic_pointer_oserializer *)
+archive_pointer_oserializer<Archive>::find(
+ const boost::serialization::extended_type_info & eti
+){
+ basic_serializer_map *mp = oserializer_map<Archive>();
+ assert(NULL != mp);
+ return static_cast<const basic_pointer_oserializer *>(mp->tfind(eti));
+}
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY())
+archive_pointer_oserializer<Archive>::~archive_pointer_oserializer(){
+ // note: we need to check that the map still exists as we can't depend
+ // on static variables being constructed in a specific sequence
+ basic_serializer_map *mp = oserializer_map<Archive>();
+ if(NULL == mp)
+ return;
+ mp->erase(this);
+}
+
+} // namespace detail
+} // namespace archive
+} // namespace boost
diff --git a/boost/boost/archive/impl/basic_binary_iarchive.ipp b/boost/boost/archive/impl/basic_binary_iarchive.ipp
new file mode 100644
index 00000000000..cb8c545a701
--- /dev/null
+++ b/boost/boost/archive/impl/basic_binary_iarchive.ipp
@@ -0,0 +1,80 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_binary_iarchive.ipp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+#include <string>
+#include <cassert>
+#include <algorithm>
+#include <cstring>
+
+#include <boost/config.hpp> // for BOOST_DEDUCED_TYPENAME
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::memcpy;
+}
+#endif
+
+#include <boost/detail/workaround.hpp>
+
+#include <boost/archive/basic_binary_iarchive.hpp>
+//#include <boost/serialization/extended_type_info.hpp>
+
+namespace boost {
+namespace archive {
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// implementation of binary_binary_archive
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+basic_binary_iarchive<Archive>::load_override(class_name_type & t, int){
+ std::string cn;
+ cn.reserve(BOOST_SERIALIZATION_MAX_KEY_SIZE);
+ load_override(cn, 0);
+ if(cn.size() > (BOOST_SERIALIZATION_MAX_KEY_SIZE - 1))
+ boost::throw_exception(
+ archive_exception(archive_exception::invalid_class_name)
+ );
+ std::memcpy(t, cn.data(), cn.size());
+ // borland tweak
+ t.t[cn.size()] = '\0';
+}
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+basic_binary_iarchive<Archive>::init(){
+ // read signature in an archive version independent manner
+ std::string file_signature;
+ * this->This() >> file_signature;
+ if(file_signature != ARCHIVE_SIGNATURE())
+ boost::throw_exception(
+ archive_exception(archive_exception::invalid_signature)
+ );
+
+ // make sure the version of the reading archive library can
+ // support the format of the archive being read
+ version_type input_library_version;
+ * this->This() >> input_library_version;
+
+ #if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3205))
+ this->set_library_version(input_library_version);
+ #else
+ #if ! BOOST_WORKAROUND(BOOST_MSVC, <= 1200)
+ detail::
+ #endif
+ basic_iarchive::set_library_version(input_library_version);
+ #endif
+
+ // extra little .t is to get around borland quirk
+ if(ARCHIVE_VERSION() < input_library_version.t)
+ boost::throw_exception(
+ archive_exception(archive_exception::unsupported_version)
+ );
+}
+
+} // namespace archive
+} // namespace boost
diff --git a/boost/boost/archive/impl/basic_binary_iprimitive.ipp b/boost/boost/archive/impl/basic_binary_iprimitive.ipp
new file mode 100644
index 00000000000..bd10dfe6814
--- /dev/null
+++ b/boost/boost/archive/impl/basic_binary_iprimitive.ipp
@@ -0,0 +1,190 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_binary_iprimitive.ipp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <cassert>
+#include <cstddef> // size_t
+#include <cstring> // memcpy
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::size_t;
+ using ::memcpy;
+} // namespace std
+#endif
+
+#include <boost/detail/workaround.hpp> // fixup for RogueWave
+
+#include <boost/throw_exception.hpp>
+#include <boost/scoped_ptr.hpp>
+
+#include <boost/archive/archive_exception.hpp>
+#include <boost/archive/codecvt_null.hpp>
+#include <boost/archive/add_facet.hpp>
+
+namespace boost {
+namespace archive {
+
+//////////////////////////////////////////////////////////////////////
+// implementation of basic_binary_iprimitive
+
+template<class Archive, class Elem, class Tr>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+basic_binary_iprimitive<Archive, Elem, Tr>::init()
+{
+ // Detect attempts to pass native binary archives across
+ // incompatible platforms. This is not fool proof but its
+ // better than nothing.
+ unsigned char size;
+ this->This()->load(size);
+ if(sizeof(int) != size)
+ boost::throw_exception(
+ archive_exception(archive_exception::incompatible_native_format)
+ );
+ this->This()->load(size);
+ if(sizeof(long) != size)
+ boost::throw_exception(
+ archive_exception(archive_exception::incompatible_native_format)
+ );
+ this->This()->load(size);
+ if(sizeof(float) != size)
+ boost::throw_exception(
+ archive_exception(archive_exception::incompatible_native_format)
+ );
+ this->This()->load(size);
+ if(sizeof(double) != size)
+ boost::throw_exception(
+ archive_exception(archive_exception::incompatible_native_format)
+ );
+
+ // for checking endian
+ int i;
+ this->This()->load(i);
+ if(1 != i)
+ boost::throw_exception(
+ archive_exception(archive_exception::incompatible_native_format)
+ );
+}
+
+template<class Archive, class Elem, class Tr>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+basic_binary_iprimitive<Archive, Elem, Tr>::load(wchar_t * ws)
+{
+ std::size_t l;
+ this->This()->load(l);
+ load_binary(ws, l);
+ ws[l / sizeof(wchar_t)] = L'\0';
+}
+
+template<class Archive, class Elem, class Tr>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+basic_binary_iprimitive<Archive, Elem, Tr>::load(std::string & s)
+{
+ std::size_t l;
+ this->This()->load(l);
+ // borland de-allocator fixup
+ #if BOOST_WORKAROUND(_RWSTD_VER, BOOST_TESTED_AT(20101))
+ if(NULL != s.data())
+ #endif
+ s.resize(l);
+ // note breaking a rule here - could be a problem on some platform
+ load_binary(const_cast<char *>(s.data()), l);
+}
+
+#ifndef BOOST_NO_CWCHAR
+template<class Archive, class Elem, class Tr>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+basic_binary_iprimitive<Archive, Elem, Tr>::load(char * s)
+{
+ std::size_t l;
+ this->This()->load(l);
+ load_binary(s, l);
+ s[l] = '\0';
+}
+#endif
+
+#ifndef BOOST_NO_STD_WSTRING
+template<class Archive, class Elem, class Tr>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+basic_binary_iprimitive<Archive, Elem, Tr>::load(std::wstring & ws)
+{
+ std::size_t l;
+ this->This()->load(l);
+ // borland de-allocator fixup
+ #if BOOST_WORKAROUND(_RWSTD_VER, BOOST_TESTED_AT(20101))
+ if(NULL != ws.data())
+ #endif
+ ws.resize(l);
+ // note breaking a rule here - is could be a problem on some platform
+ load_binary(const_cast<wchar_t *>(ws.data()), l * sizeof(wchar_t) / sizeof(char));
+}
+#endif
+
+template<class Archive, class Elem, class Tr>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY())
+basic_binary_iprimitive<Archive, Elem, Tr>::basic_binary_iprimitive(
+ std::basic_streambuf<Elem, Tr> & sb,
+ bool no_codecvt
+) :
+ m_sb(sb),
+ archive_locale(NULL),
+ locale_saver(m_sb)
+{
+ if(! no_codecvt){
+ archive_locale.reset(
+ boost::archive::add_facet(
+ std::locale::classic(),
+ new codecvt_null<Elem>
+ )
+ );
+ m_sb.pubimbue(* archive_locale);
+ }
+}
+
+// some libraries including stl and libcomo fail if the
+// buffer isn't flushed before the code_cvt facet is changed.
+// I think this is a bug. We explicity invoke sync to when
+// we're done with the streambuf to work around this problem.
+// Note that sync is a protected member of stream buff so we
+// have to invoke it through a contrived derived class.
+namespace detail {
+// note: use "using" to get past msvc bug
+using namespace std;
+template<class Elem, class Tr>
+class input_streambuf_access : public std::basic_streambuf<Elem, Tr> {
+ public:
+ virtual int sync(){
+#if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3206))
+ return this->basic_streambuf::sync();
+#else
+ return this->basic_streambuf<Elem, Tr>::sync();
+#endif
+ }
+};
+} // detail
+
+// scoped_ptr requires that archive_locale be a complete type at time of
+// destruction so define destructor here rather than in the header
+template<class Archive, class Elem, class Tr>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY())
+basic_binary_iprimitive<Archive, Elem, Tr>::~basic_binary_iprimitive(){
+ // push back unread characters
+ int result = static_cast<detail::input_streambuf_access<Elem, Tr> &>(
+ m_sb
+ ).sync();
+ if(0 != result){
+ boost::throw_exception(
+ archive_exception(archive_exception::stream_error)
+ );
+ }
+}
+
+} // namespace archive
+} // namespace boost
diff --git a/boost/boost/archive/impl/basic_binary_oarchive.ipp b/boost/boost/archive/impl/basic_binary_oarchive.ipp
new file mode 100644
index 00000000000..e0137c6fb58
--- /dev/null
+++ b/boost/boost/archive/impl/basic_binary_oarchive.ipp
@@ -0,0 +1,46 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_binary_oarchive.ipp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+#include <string>
+#include <cassert>
+#include <algorithm>
+#include <cstring>
+
+#include <boost/config.hpp> // for BOOST_DEDUCED_TYPENAME
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::memcpy;
+}
+#endif
+
+#include <boost/archive/basic_binary_oarchive.hpp>
+
+namespace boost {
+namespace archive {
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// implementation of binary_binary_oarchive
+
+template<class Archive>
+#if !defined(__BORLANDC__)
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+#else
+void
+#endif
+basic_binary_oarchive<Archive>::init(){
+ // write signature in an archive version independent manner
+ const std::string file_signature(ARCHIVE_SIGNATURE());
+ * this->This() << file_signature;
+ // write library version
+ const version_type v(ARCHIVE_VERSION());
+ * this->This() << v;
+}
+
+} // namespace archive
+} // namespace boost
diff --git a/boost/boost/archive/impl/basic_binary_oprimitive.ipp b/boost/boost/archive/impl/basic_binary_oprimitive.ipp
new file mode 100644
index 00000000000..ae4503a4005
--- /dev/null
+++ b/boost/boost/archive/impl/basic_binary_oprimitive.ipp
@@ -0,0 +1,160 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_binary_oprimitive.ipp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <ostream>
+#include <cstring>
+
+#include <boost/config.hpp>
+
+#if defined(BOOST_NO_STDC_NAMESPACE) && ! defined(__LIBCOMO__)
+namespace std{
+ using ::strlen;
+} // namespace std
+#endif
+
+
+#ifndef BOOST_NO_CWCHAR
+#include <cwchar>
+#ifdef BOOST_NO_STDC_NAMESPACE
+namespace std{ using ::wcslen; }
+#endif
+#endif
+
+#include <boost/detail/workaround.hpp>
+
+#include <boost/throw_exception.hpp>
+#include <boost/scoped_ptr.hpp>
+#include <boost/archive/archive_exception.hpp>
+#include <boost/archive/add_facet.hpp>
+#include <boost/archive/codecvt_null.hpp>
+
+namespace boost {
+namespace archive {
+
+//////////////////////////////////////////////////////////////////////
+// implementation of basic_binary_oprimitive
+
+template<class Archive, class Elem, class Tr>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+basic_binary_oprimitive<Archive, Elem, Tr>::init()
+{
+ // record native sizes of fundamental types
+ // this is to permit detection of attempts to pass
+ // native binary archives accross incompatible machines.
+ // This is not foolproof but its better than nothing.
+ this->This()->save(static_cast<unsigned char>(sizeof(int)));
+ this->This()->save(static_cast<unsigned char>(sizeof(long)));
+ this->This()->save(static_cast<unsigned char>(sizeof(float)));
+ this->This()->save(static_cast<unsigned char>(sizeof(double)));
+ // for checking endianness
+ this->This()->save(int(1));
+}
+
+template<class Archive, class Elem, class Tr>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+basic_binary_oprimitive<Archive, Elem, Tr>::save(const char * s)
+{
+ std::size_t l = std::strlen(s);
+ this->This()->save(l);
+ save_binary(s, l);
+}
+
+template<class Archive, class Elem, class Tr>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+basic_binary_oprimitive<Archive, Elem, Tr>::save(const std::string &s)
+{
+ std::size_t l = static_cast<unsigned int>(s.size());
+ this->This()->save(l);
+ save_binary(s.data(), l);
+}
+
+#ifndef BOOST_NO_CWCHAR
+template<class Archive, class Elem, class Tr>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+basic_binary_oprimitive<Archive, Elem, Tr>::save(const wchar_t * ws)
+{
+ std::size_t l = std::wcslen(ws);
+ this->This()->save(l);
+ save_binary(ws, l * sizeof(wchar_t) / sizeof(char));
+}
+
+#ifndef BOOST_NO_STD_WSTRING
+template<class Archive, class Elem, class Tr>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+basic_binary_oprimitive<Archive, Elem, Tr>::save(const std::wstring &ws)
+{
+ std::size_t l = ws.size();
+ this->This()->save(l);
+ save_binary(ws.data(), l * sizeof(wchar_t) / sizeof(char));
+}
+#endif
+#endif
+
+template<class Archive, class Elem, class Tr>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY())
+basic_binary_oprimitive<Archive, Elem, Tr>::basic_binary_oprimitive(
+ std::basic_streambuf<Elem, Tr> & sb,
+ bool no_codecvt
+) :
+ m_sb(sb),
+ archive_locale(NULL),
+ locale_saver(m_sb)
+{
+ if(! no_codecvt){
+ archive_locale.reset(
+ add_facet(
+ std::locale::classic(),
+ new codecvt_null<Elem>
+ )
+ );
+ m_sb.pubimbue(* archive_locale);
+ }
+}
+
+// some libraries including stl and libcomo fail if the
+// buffer isn't flushed before the code_cvt facet is changed.
+// I think this is a bug. We explicity invoke sync to when
+// we're done with the streambuf to work around this problem.
+// Note that sync is a protected member of stream buff so we
+// have to invoke it through a contrived derived class.
+namespace detail {
+// note: use "using" to get past msvc bug
+using namespace std;
+template<class Elem, class Tr>
+class output_streambuf_access : public std::basic_streambuf<Elem, Tr> {
+ public:
+ virtual int sync(){
+#if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3206))
+ return this->basic_streambuf::sync();
+#else
+ return this->basic_streambuf<Elem, Tr>::sync();
+#endif
+ }
+};
+} // detail
+
+// scoped_ptr requires that g be a complete type at time of
+// destruction so define destructor here rather than in the header
+template<class Archive, class Elem, class Tr>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY())
+basic_binary_oprimitive<Archive, Elem, Tr>::~basic_binary_oprimitive(){
+ // flush buffer
+ int result = static_cast<detail::output_streambuf_access<Elem, Tr> &>(
+ m_sb
+ ).sync();
+ if(0 != result){
+ boost::throw_exception(
+ archive_exception(archive_exception::stream_error)
+ );
+ }
+}
+
+} // namespace archive
+} // namespace boost
diff --git a/boost/boost/archive/impl/basic_text_iarchive.ipp b/boost/boost/archive/impl/basic_text_iarchive.ipp
new file mode 100644
index 00000000000..f570dbdeeb3
--- /dev/null
+++ b/boost/boost/archive/impl/basic_text_iarchive.ipp
@@ -0,0 +1,80 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_text_iarchive.ipp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+#include <string>
+#include <cassert>
+#include <algorithm>
+#include <cstring>
+
+#include <boost/config.hpp> // for BOOST_DEDUCED_TYPENAME
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::memcpy;
+}
+#endif
+
+#include <boost/detail/workaround.hpp>
+
+#include <boost/archive/basic_text_iarchive.hpp>
+//#include <boost/serialization/extended_type_info.hpp>
+
+namespace boost {
+namespace archive {
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// implementation of text_text_archive
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+basic_text_iarchive<Archive>::load_override(class_name_type & t, int){
+ std::string cn;
+ cn.reserve(BOOST_SERIALIZATION_MAX_KEY_SIZE);
+ load_override(cn, 0);
+ if(cn.size() > (BOOST_SERIALIZATION_MAX_KEY_SIZE - 1))
+ boost::throw_exception(
+ archive_exception(archive_exception::invalid_class_name)
+ );
+ std::memcpy(t, cn.data(), cn.size());
+ // borland tweak
+ t.t[cn.size()] = '\0';
+}
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+basic_text_iarchive<Archive>::init(void){
+ // read signature in an archive version independent manner
+ std::string file_signature;
+ * this->This() >> file_signature;
+ if(file_signature != ARCHIVE_SIGNATURE())
+ boost::throw_exception(
+ archive_exception(archive_exception::invalid_signature)
+ );
+
+ // make sure the version of the reading archive library can
+ // support the format of the archive being read
+ version_type input_library_version;
+ * this->This() >> input_library_version;
+
+ #if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3205))
+ this->set_library_version(input_library_version);
+ #else
+ #if ! BOOST_WORKAROUND(BOOST_MSVC, <= 1200)
+ detail::
+ #endif
+ basic_iarchive::set_library_version(input_library_version.t);
+ #endif
+
+ // extra little .t is to get around borland quirk
+ if(ARCHIVE_VERSION() < input_library_version.t)
+ boost::throw_exception(
+ archive_exception(archive_exception::unsupported_version)
+ );
+}
+
+} // namespace archive
+} // namespace boost
diff --git a/boost/boost/archive/impl/basic_text_iprimitive.ipp b/boost/boost/archive/impl/basic_text_iprimitive.ipp
new file mode 100644
index 00000000000..c834924db3e
--- /dev/null
+++ b/boost/boost/archive/impl/basic_text_iprimitive.ipp
@@ -0,0 +1,123 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_text_iprimitive.ipp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <cstddef> // size_t
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::size_t;
+} // namespace std
+#endif
+
+#include <boost/throw_exception.hpp>
+#include <boost/pfto.hpp>
+
+#include <boost/archive/basic_text_iprimitive.hpp>
+#include <boost/archive/codecvt_null.hpp>
+#include <boost/archive/add_facet.hpp>
+
+#include <boost/archive/iterators/remove_whitespace.hpp>
+#include <boost/archive/iterators/istream_iterator.hpp>
+#include <boost/archive/iterators/binary_from_base64.hpp>
+#include <boost/archive/iterators/transform_width.hpp>
+
+namespace boost {
+namespace archive {
+
+// translate base64 text into binary and copy into buffer
+// until buffer is full.
+template<class IStream>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+basic_text_iprimitive<IStream>::load_binary(
+ void *address,
+ std::size_t count
+){
+ typedef BOOST_DEDUCED_TYPENAME IStream::char_type CharType;
+
+ if(0 == count)
+ return;
+
+ assert(
+ static_cast<std::size_t>((std::numeric_limits<std::streamsize>::max)())
+ > (count + sizeof(CharType) - 1)/sizeof(CharType)
+ );
+
+ if(is.fail())
+ boost::throw_exception(archive_exception(archive_exception::stream_error));
+ // convert from base64 to binary
+ typedef BOOST_DEDUCED_TYPENAME
+ iterators::transform_width<
+ iterators::binary_from_base64<
+ iterators::remove_whitespace<
+ iterators::istream_iterator<CharType>
+ >
+ ,CharType
+ >
+ ,8
+ ,6
+ ,CharType
+ >
+ binary;
+
+ binary ti_begin = binary(
+ BOOST_MAKE_PFTO_WRAPPER(
+ iterators::istream_iterator<CharType>(is)
+ )
+ );
+
+ char * caddr = static_cast<char *>(address);
+ std::size_t padding = 2 - count % 3;
+
+ // take care that we don't increment anymore than necessary
+ while(--count > 0){
+ *caddr++ = static_cast<char>(*ti_begin);
+ ++ti_begin;
+ }
+ *caddr++ = static_cast<char>(*ti_begin);
+
+ if(padding > 1)
+ ++ti_begin;
+ if(padding > 2)
+ ++ti_begin;
+}
+
+template<class IStream>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY())
+basic_text_iprimitive<IStream>::basic_text_iprimitive(
+ IStream &is_,
+ bool no_codecvt
+) :
+ is(is_),
+ flags_saver(is_),
+ precision_saver(is_),
+ archive_locale(NULL),
+ locale_saver(is_)
+{
+ if(! no_codecvt){
+ archive_locale.reset(
+ add_facet(
+ std::locale::classic(),
+ new codecvt_null<BOOST_DEDUCED_TYPENAME IStream::char_type>
+ )
+ );
+ is.imbue(* archive_locale);
+ }
+ is >> std::noboolalpha;
+}
+
+template<class IStream>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY())
+basic_text_iprimitive<IStream>::~basic_text_iprimitive(){
+ is.sync();
+}
+
+} // namespace archive
+} // namespace boost
diff --git a/boost/boost/archive/impl/basic_text_oarchive.ipp b/boost/boost/archive/impl/basic_text_oarchive.ipp
new file mode 100644
index 00000000000..85940c64bb3
--- /dev/null
+++ b/boost/boost/archive/impl/basic_text_oarchive.ipp
@@ -0,0 +1,62 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_text_oarchive.ipp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+#include <string>
+#include <cassert>
+#include <cstring>
+
+#include <boost/config.hpp> // for BOOST_DEDUCED_TYPENAME
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::memcpy;
+}
+#endif
+
+#include <boost/archive/basic_text_oarchive.hpp>
+
+namespace boost {
+namespace archive {
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// implementation of basic_text_oarchive
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+basic_text_oarchive<Archive>::newtoken()
+{
+ switch(delimiter){
+ default:
+ assert(false);
+ break;
+ case eol:
+ this->This()->put('\n');
+ delimiter = space;
+ break;
+ case space:
+ this->This()->put(' ');
+ break;
+ case none:
+ delimiter = space;
+ break;
+ }
+}
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+basic_text_oarchive<Archive>::init(){
+ // write signature in an archive version independent manner
+ const std::string file_signature(ARCHIVE_SIGNATURE());
+ * this->This() << file_signature;
+ // write library version
+ const version_type v(ARCHIVE_VERSION());
+ * this->This() << v;
+}
+
+} // namespace archive
+} // namespace boost
diff --git a/boost/boost/archive/impl/basic_text_oprimitive.ipp b/boost/boost/archive/impl/basic_text_oprimitive.ipp
new file mode 100644
index 00000000000..b78fdbf380c
--- /dev/null
+++ b/boost/boost/archive/impl/basic_text_oprimitive.ipp
@@ -0,0 +1,103 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_text_oprimitive.ipp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/pfto.hpp>
+
+#include <boost/archive/basic_text_oprimitive.hpp>
+#include <boost/archive/codecvt_null.hpp>
+#include <boost/archive/add_facet.hpp>
+
+#include <boost/archive/iterators/base64_from_binary.hpp>
+#include <boost/archive/iterators/insert_linebreaks.hpp>
+#include <boost/archive/iterators/transform_width.hpp>
+#include <boost/archive/iterators/ostream_iterator.hpp>
+
+namespace boost {
+namespace archive {
+
+// translate to base64 and copy in to buffer.
+template<class OStream>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+basic_text_oprimitive<OStream>::save_binary(
+ const void *address,
+ std::size_t count
+){
+ typedef BOOST_DEDUCED_TYPENAME OStream::char_type CharType;
+
+ if(0 == count)
+ return;
+
+ if(os.fail())
+ boost::throw_exception(archive_exception(archive_exception::stream_error));
+
+ os.put('\n');
+
+ typedef
+ boost::archive::iterators::insert_linebreaks<
+ boost::archive::iterators::base64_from_binary<
+ boost::archive::iterators::transform_width<
+ const char *,
+ 6,
+ 8
+ >
+ >
+ ,72
+ ,const char // cwpro8 needs this
+ >
+ base64_text;
+
+ boost::archive::iterators::ostream_iterator<CharType> oi(os);
+ std::copy(
+ base64_text(BOOST_MAKE_PFTO_WRAPPER(static_cast<const char *>(address))),
+ base64_text(
+ BOOST_MAKE_PFTO_WRAPPER(static_cast<const char *>(address) + count)
+ ),
+ oi
+ );
+ std::size_t padding = 2 - count % 3;
+ if(padding > 1)
+ *oi = '=';
+ if(padding > 2)
+ *oi = '=';
+
+}
+
+template<class OStream>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY())
+basic_text_oprimitive<OStream>::basic_text_oprimitive(
+ OStream & os_,
+ bool no_codecvt
+) :
+ os(os_),
+ flags_saver(os_),
+ precision_saver(os_),
+ archive_locale(NULL),
+ locale_saver(os_)
+{
+ if(! no_codecvt){
+ archive_locale.reset(
+ add_facet(
+ std::locale::classic(),
+ new codecvt_null<BOOST_DEDUCED_TYPENAME OStream::char_type>
+ )
+ );
+ os.imbue(* archive_locale);
+ }
+ os << std::noboolalpha;
+}
+
+template<class OStream>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY())
+basic_text_oprimitive<OStream>::~basic_text_oprimitive(){
+ os << std::endl;
+}
+
+} //namespace boost
+} //namespace archive
diff --git a/boost/boost/archive/impl/basic_xml_grammar.hpp b/boost/boost/archive/impl/basic_xml_grammar.hpp
new file mode 100644
index 00000000000..071d6c035b2
--- /dev/null
+++ b/boost/boost/archive/impl/basic_xml_grammar.hpp
@@ -0,0 +1,191 @@
+#ifndef BOOST_ARCHIVE_BASIC_XML_GRAMMAR_HPP
+#define BOOST_ARCHIVE_BASIC_XML_GRAMMAR_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_xml_grammar.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+// this module is derived from simplexml.cpp - an example shipped as part of
+// the spirit parser. This example contains the following notice:
+/*=============================================================================
+ simplexml.cpp
+
+ Spirit V1.3
+ URL: http://spirit.sourceforge.net/
+
+ Copyright (c) 2001, Daniel C. Nuffer
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the copyright holder be held liable for
+ any damages arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute
+ it freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must
+ not claim that you wrote the original software. If you use this
+ software in a product, an acknowledgment in the product documentation
+ would be appreciated but is not required.
+
+ 2. Altered source versions must be plainly marked as such, and must
+ not be misrepresented as being the original software.
+
+ 3. This notice may not be removed or altered from any source
+ distribution.
+=============================================================================*/
+#include <string>
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+// supress noise
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1200)
+# pragma warning (disable : 4786) // too long name, harmless warning
+#endif
+
+//#define BOOST_SPIRIT_DEBUG
+//#include <boost/spirit/core.hpp>
+#include <boost/spirit/core/non_terminal/rule.hpp>
+#include <boost/spirit/core/non_terminal/grammar.hpp>
+
+// the following hack is to evade a bogus error generated by using the
+// word "arg" when bind.hpp has been included
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1200)
+#define arg xarg
+#endif
+
+#include <boost/spirit/utility/chset.hpp>
+
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1200)
+#undef arg
+#endif
+
+#include <boost/archive/basic_archive.hpp>
+#include <boost/serialization/tracking.hpp>
+#include <boost/serialization/version.hpp>
+
+namespace boost {
+namespace archive {
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// XML grammar parsing
+
+template<class CharType>
+class basic_xml_grammar : public boost::spirit::grammar<basic_xml_grammar<CharType> >
+{
+public:
+ // The following is not necessary according to DR45, but at least
+ // one compiler (Compaq C++ 6.5 in strict_ansi mode) chokes otherwise.
+ struct return_values;
+ friend struct return_values;
+
+private:
+ typedef BOOST_DEDUCED_TYPENAME std::basic_istream<CharType> IStream;
+ typedef BOOST_DEDUCED_TYPENAME std::basic_string<CharType> StringType;
+ typedef BOOST_DEDUCED_TYPENAME boost::spirit::chset<CharType> chset_t;
+ typedef BOOST_DEDUCED_TYPENAME boost::spirit::chlit<CharType> chlit_t;
+ typedef BOOST_DEDUCED_TYPENAME boost::spirit::scanner<
+ BOOST_DEDUCED_TYPENAME std::basic_string<CharType>::iterator
+ > scanner_t;
+ typedef BOOST_DEDUCED_TYPENAME boost::spirit::rule<scanner_t> rule_t;
+ // Start grammar definition
+ rule_t
+ Reference,
+ Eq,
+ STag,
+ ETag,
+ LetterOrUnderscoreOrColon,
+ AttValue,
+ CharRef1,
+ CharRef2,
+ CharRef,
+ AmpRef,
+ LTRef,
+ GTRef,
+ AposRef,
+ QuoteRef,
+ CharData,
+ CharDataChars,
+ content,
+ AmpName,
+ LTName,
+ GTName,
+ ClassNameChar,
+ ClassName,
+ Name,
+ XMLDecl,
+ XMLDeclChars,
+ DocTypeDecl,
+ DocTypeDeclChars,
+ ClassIDAttribute,
+ ObjectIDAttribute,
+ ClassNameAttribute,
+ TrackingAttribute,
+ VersionAttribute,
+ UnusedAttribute,
+ Attribute,
+ SignatureAttribute,
+ SerializationWrapper,
+ NameHead,
+ NameTail,
+ AttributeList,
+ S;
+
+ // XML Character classes
+ chset_t
+ BaseChar,
+ Ideographic,
+ Char,
+ Letter,
+ Digit,
+ CombiningChar,
+ Extender,
+ Sch,
+ NameChar;
+
+ void init_chset();
+
+ bool my_parse(
+ IStream & is,
+ const rule_t &rule_,
+ const CharType delimiter = L'>'
+ );
+public:
+ struct return_values {
+ StringType object_name;
+ StringType contents;
+ class_id_type class_id;
+ object_id_type object_id;
+ version_type version;
+ tracking_type tracking_level;
+ StringType class_name;
+ return_values() :
+ version(0),
+ tracking_level(false)
+ {}
+ } rv;
+ bool parse_start_tag(IStream & is) ;
+ bool parse_end_tag(IStream & is);
+ bool parse_string(IStream & is, StringType & s);
+ void init(IStream & is);
+ void windup(IStream & is);
+ basic_xml_grammar();
+};
+
+
+} // namespace archive
+} // namespace boost
+
+#endif // BOOST_ARCHIVE_BASIC_XML_GRAMMAR_HPP
diff --git a/boost/boost/archive/impl/basic_xml_iarchive.ipp b/boost/boost/archive/impl/basic_xml_iarchive.ipp
new file mode 100644
index 00000000000..0c803813acb
--- /dev/null
+++ b/boost/boost/archive/impl/basic_xml_iarchive.ipp
@@ -0,0 +1,111 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_xml_iarchive.ipp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <cassert>
+#include <algorithm>
+
+#include <boost/throw_exception.hpp>
+
+#include <boost/archive/basic_xml_iarchive.hpp>
+#include <boost/serialization/tracking.hpp>
+//#include <boost/serialization/extended_type_info.hpp>
+
+namespace boost {
+namespace archive {
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// implementation of xml_text_archive
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+basic_xml_iarchive<Archive>::load_start(const char *name){
+ // if there's no name
+ if(NULL == name)
+ return;
+ bool result = this->This()->gimpl->parse_start_tag(this->This()->get_is());
+ if(true != result){
+ boost::throw_exception(
+ archive_exception(archive_exception::stream_error)
+ );
+ }
+ // don't check start tag at highest level
+ ++depth;
+ return;
+}
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+basic_xml_iarchive<Archive>::load_end(const char *name){
+ // if there's no name
+ if(NULL == name)
+ return;
+ bool result = this->This()->gimpl->parse_end_tag(this->This()->get_is());
+ if(true != result){
+ boost::throw_exception(
+ archive_exception(archive_exception::stream_error)
+ );
+ }
+
+ // don't check start tag at highest level
+ if(0 == --depth)
+ return;
+
+ if(0 == (this->get_flags() & no_xml_tag_checking)){
+ // double check that the tag matches what is expected - useful for debug
+ if(0 != name[this->This()->gimpl->rv.object_name.size()]
+ || ! std::equal(
+ this->This()->gimpl->rv.object_name.begin(),
+ this->This()->gimpl->rv.object_name.end(),
+ name
+ )
+ ){
+ boost::throw_exception(
+ archive_exception(archive_exception::stream_error)
+ );
+ }
+ }
+}
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+basic_xml_iarchive<Archive>::load_override(object_id_type & t, int){
+ t = this->This()->gimpl->rv.object_id;
+}
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+basic_xml_iarchive<Archive>::load_override(version_type & t, int){
+ t = this->This()->gimpl->rv.version;
+}
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+basic_xml_iarchive<Archive>::load_override(class_id_type & t, int){
+ t = this->This()->gimpl->rv.class_id;
+}
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+basic_xml_iarchive<Archive>::load_override(tracking_type & t, int){
+ t = this->This()->gimpl->rv.tracking_level;
+}
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY())
+basic_xml_iarchive<Archive>::basic_xml_iarchive(unsigned int flags) :
+ detail::common_iarchive<Archive>(flags),
+ depth(0)
+{}
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY())
+basic_xml_iarchive<Archive>::~basic_xml_iarchive(){}
+
+} // namespace archive
+} // namespace boost
diff --git a/boost/boost/archive/impl/basic_xml_oarchive.ipp b/boost/boost/archive/impl/basic_xml_oarchive.ipp
new file mode 100644
index 00000000000..5f5dbef365f
--- /dev/null
+++ b/boost/boost/archive/impl/basic_xml_oarchive.ipp
@@ -0,0 +1,245 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_xml_oarchive.ipp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <algorithm>
+#include <cstring>
+#if defined(BOOST_NO_STDC_NAMESPACE) && ! defined(__LIBCOMO__)
+namespace std{
+ using ::strlen;
+} // namespace std
+#endif
+
+#include <boost/archive/basic_xml_archive.hpp>
+#include <boost/archive/basic_xml_oarchive.hpp>
+#include <boost/detail/no_exceptions_support.hpp>
+
+namespace boost {
+namespace archive {
+
+namespace detail {
+template<class CharType>
+struct XML_name {
+ void operator()(CharType t) const{
+ const unsigned char lookup_table[] = {
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0, // -.
+ 1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0, // 0-9
+ 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, // A-
+ 1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1, // -Z _
+ 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, // a-
+ 1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0, // -z
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+ };
+ if((unsigned)t > 127)
+ return;
+ if(0 == lookup_table[(unsigned)t])
+ boost::throw_exception(
+ xml_archive_exception(
+ xml_archive_exception::xml_archive_tag_name_error
+ )
+ );
+ }
+};
+
+} // namespace detail
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// implemenations of functions common to both types of xml output
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+basic_xml_oarchive<Archive>::write_attribute(
+ const char *attribute_name,
+ int t,
+ const char *conjunction
+){
+ this->This()->put(' ');
+ this->This()->put(attribute_name);
+ this->This()->put(conjunction);
+ this->This()->save(t);
+ this->This()->put('"');
+}
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+basic_xml_oarchive<Archive>::write_attribute(
+ const char *attribute_name,
+ const char *key
+){
+ this->This()->put(' ');
+ this->This()->put(attribute_name);
+ this->This()->put("=\"");
+ this->This()->put(key);
+ this->This()->put('"');
+}
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+basic_xml_oarchive<Archive>::indent(){
+ int i;
+ for(i = depth; i-- > 0;)
+ this->This()->put('\t');
+}
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+basic_xml_oarchive<Archive>::save_start(const char *name)
+{
+ if(NULL == name)
+ return;
+
+ // be sure name has no invalid characters
+ std::for_each(name, name + std::strlen(name), detail::XML_name<const char>());
+
+ end_preamble();
+ if(depth > 0){
+ this->This()->put('\n');
+ indent();
+ }
+ ++depth;
+ this->This()->put('<');
+ this->This()->save(name);
+ pending_preamble = true;
+ indent_next = false;
+}
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+basic_xml_oarchive<Archive>::save_end(const char *name)
+{
+ if(NULL == name)
+ return;
+
+ // be sure name has no invalid characters
+ std::for_each(name, name + std::strlen(name), detail::XML_name<const char>());
+
+ end_preamble();
+ --depth;
+ if(indent_next){
+ this->This()->put('\n');
+ indent();
+ }
+ indent_next = true;
+ this->This()->put("</");
+ this->This()->save(name);
+ this->This()->put('>');
+ if(0 == depth)
+ this->This()->put('\n');
+}
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+basic_xml_oarchive<Archive>::end_preamble(){
+ if(pending_preamble){
+ this->This()->put('>');
+ pending_preamble = false;
+ }
+}
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+basic_xml_oarchive<Archive>::save_override(const object_id_type & t, int)
+{
+ int i = t.t; // extra .t is for borland
+ write_attribute(OBJECT_ID(), i, "=\"_");
+}
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+basic_xml_oarchive<Archive>::save_override(
+ const object_reference_type & t,
+ int
+){
+ int i = t.t; // extra .t is for borland
+ write_attribute(OBJECT_REFERENCE(), i, "=\"_");
+}
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+basic_xml_oarchive<Archive>::save_override(const version_type & t, int)
+{
+ int i = t.t; // extra .t is for borland
+ write_attribute(VERSION(), i);
+}
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+basic_xml_oarchive<Archive>::save_override(const class_id_type & t, int)
+{
+ write_attribute(CLASS_ID(), t);
+}
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+basic_xml_oarchive<Archive>::save_override(
+ const class_id_reference_type & t,
+ int
+){
+ write_attribute(CLASS_ID_REFERENCE(), t);
+}
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+basic_xml_oarchive<Archive>::save_override(
+ const class_id_optional_type & t,
+ int
+){
+ write_attribute(CLASS_ID(), t);
+}
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+basic_xml_oarchive<Archive>::save_override(const class_name_type & t, int)
+{
+ const char * key = t;
+ if(NULL == key)
+ return;
+ write_attribute(CLASS_NAME(), key);
+}
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+basic_xml_oarchive<Archive>::save_override(const tracking_type & t, int)
+{
+ write_attribute(TRACKING(), t.t); // extra .t is for borland
+}
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
+basic_xml_oarchive<Archive>::init(){
+ // xml header
+ this->This()->put("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\" ?>\n");
+ this->This()->put("<!DOCTYPE boost_serialization>\n");
+ // xml document wrapper - outer root
+ this->This()->put("<boost_serialization");
+ write_attribute("signature", ARCHIVE_SIGNATURE());
+ write_attribute("version", ARCHIVE_VERSION());
+ this->This()->put(">\n");
+}
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY())
+basic_xml_oarchive<Archive>::basic_xml_oarchive(unsigned int flags) :
+ detail::common_oarchive<Archive>(flags),
+ depth(0),
+ indent_next(false),
+ pending_preamble(false)
+{
+}
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY())
+basic_xml_oarchive<Archive>::~basic_xml_oarchive(){
+ if(0 == (this->get_flags() & no_header)){
+ BOOST_TRY{
+ this->This()->put("</boost_serialization>");
+ }
+ BOOST_CATCH(...){}
+ BOOST_CATCH_END
+ }
+}
+
+} // namespace archive
+} // namespace boost
diff --git a/boost/boost/archive/impl/text_iarchive_impl.ipp b/boost/boost/archive/impl/text_iarchive_impl.ipp
new file mode 100644
index 00000000000..5d0c0a52388
--- /dev/null
+++ b/boost/boost/archive/impl/text_iarchive_impl.ipp
@@ -0,0 +1,127 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// text_iarchive_impl.ipp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+//////////////////////////////////////////////////////////////////////
+// implementation of basic_text_iprimitive overrides for the combination
+// of template parameters used to implement a text_iprimitive
+
+#include <cstddef> // size_t
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::size_t;
+} // namespace std
+#endif
+
+#include <boost/detail/workaround.hpp> // RogueWave
+
+#include <boost/archive/text_iarchive.hpp>
+
+namespace boost {
+namespace archive {
+
+template<class Archive>
+BOOST_ARCHIVE_DECL(void)
+text_iarchive_impl<Archive>::load(char *s)
+{
+ std::size_t size;
+ * this->This() >> size;
+ // skip separating space
+ is.get();
+ // Works on all tested platforms
+ is.read(s, size);
+ s[size] = '\0';
+}
+
+template<class Archive>
+BOOST_ARCHIVE_DECL(void)
+text_iarchive_impl<Archive>::load(std::string &s)
+{
+ std::size_t size;
+ * this->This() >> size;
+ // skip separating space
+ is.get();
+ // borland de-allocator fixup
+ #if BOOST_WORKAROUND(_RWSTD_VER, BOOST_TESTED_AT(20101))
+ if(NULL != s.data())
+ #endif
+ s.resize(size);
+ is.read(const_cast<char *>(s.data()), size);
+}
+
+#ifndef BOOST_NO_CWCHAR
+#ifndef BOOST_NO_INTRINSIC_WCHAR_T
+template<class Archive>
+BOOST_ARCHIVE_DECL(void)
+text_iarchive_impl<Archive>::load(wchar_t *ws)
+{
+ std::size_t size;
+ * this->This() >> size;
+ // skip separating space
+ is.get();
+ is.read((char *)ws, size * sizeof(wchar_t)/sizeof(char));
+ ws[size] = L'\0';
+}
+#endif // BOOST_NO_INTRINSIC_WCHAR_T
+
+#ifndef BOOST_NO_STD_WSTRING
+template<class Archive>
+BOOST_ARCHIVE_DECL(void)
+text_iarchive_impl<Archive>::load(std::wstring &ws)
+{
+ std::size_t size;
+ * this->This() >> size;
+ // borland de-allocator fixup
+ #if BOOST_WORKAROUND(_RWSTD_VER, BOOST_TESTED_AT(20101))
+ if(NULL != ws.data())
+ #endif
+ ws.resize(size);
+ // skip separating space
+ is.get();
+ is.read((char *)ws.data(), size * sizeof(wchar_t)/sizeof(char));
+}
+
+#endif // BOOST_NO_STD_WSTRING
+#endif // BOOST_NO_CWCHAR
+
+template<class Archive>
+BOOST_ARCHIVE_DECL(void)
+text_iarchive_impl<Archive>::load_override(class_name_type & t, int){
+ basic_text_iarchive<Archive>::load_override(t, 0);
+}
+
+template<class Archive>
+BOOST_ARCHIVE_DECL(void)
+text_iarchive_impl<Archive>::init(){
+ basic_text_iarchive<Archive>::init();
+}
+
+template<class Archive>
+BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY())
+text_iarchive_impl<Archive>::text_iarchive_impl(
+ std::istream & is,
+ unsigned int flags
+) :
+ basic_text_iprimitive<std::istream>(
+ is,
+ 0 != (flags & no_codecvt)
+ ),
+ basic_text_iarchive<Archive>(flags)
+{
+ if(0 == (flags & no_header))
+ #if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3205))
+ this->init();
+ #else
+ this->basic_text_iarchive<Archive>::init();
+ #endif
+}
+
+} // namespace archive
+} // namespace boost
diff --git a/boost/boost/archive/impl/text_oarchive_impl.ipp b/boost/boost/archive/impl/text_oarchive_impl.ipp
new file mode 100644
index 00000000000..2df0b46019a
--- /dev/null
+++ b/boost/boost/archive/impl/text_oarchive_impl.ipp
@@ -0,0 +1,124 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// text_oarchive_impl.ipp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <string>
+#include <boost/config.hpp>
+#include <locale>
+#include <cstddef> // size_t
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::size_t;
+} // namespace std
+#endif
+
+#ifndef BOOST_NO_CWCHAR
+#include <cwchar>
+#ifdef BOOST_NO_STDC_NAMESPACE
+namespace std{ using ::wcslen; }
+#endif
+#endif
+
+#include <boost/archive/add_facet.hpp>
+#include <boost/archive/text_oarchive.hpp>
+
+namespace boost {
+namespace archive {
+
+//////////////////////////////////////////////////////////////////////
+// implementation of basic_text_oprimitive overrides for the combination
+// of template parameters used to create a text_oprimitive
+
+template<class Archive>
+BOOST_ARCHIVE_DECL(void)
+text_oarchive_impl<Archive>::save(const char * s)
+{
+ const std::size_t len = std::ostream::traits_type::length(s);
+ *this->This() << len;
+ this->This()->newtoken();
+ os << s;
+}
+
+template<class Archive>
+BOOST_ARCHIVE_DECL(void)
+text_oarchive_impl<Archive>::save(const std::string &s)
+{
+ const std::size_t size = s.size();
+ *this->This() << size;
+ this->This()->newtoken();
+ os << s;
+}
+
+#ifndef BOOST_NO_CWCHAR
+#ifndef BOOST_NO_INTRINSIC_WCHAR_T
+template<class Archive>
+BOOST_ARCHIVE_DECL(void)
+text_oarchive_impl<Archive>::save(const wchar_t * ws)
+{
+ const std::size_t l = std::wcslen(ws);
+ * this->This() << l;
+ this->This()->newtoken();
+ os.write((const char *)ws, l * sizeof(wchar_t)/sizeof(char));
+}
+#endif
+
+#ifndef BOOST_NO_STD_WSTRING
+template<class Archive>
+BOOST_ARCHIVE_DECL(void)
+text_oarchive_impl<Archive>::save(const std::wstring &ws)
+{
+ const std::size_t l = ws.size();
+ * this->This() << l;
+ this->This()->newtoken();
+ os.write((const char *)(ws.data()), l * sizeof(wchar_t)/sizeof(char));
+}
+#endif
+#endif // BOOST_NO_CWCHAR
+
+template<class Archive>
+BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY())
+text_oarchive_impl<Archive>::text_oarchive_impl(
+ std::ostream & os,
+ unsigned int flags
+) :
+ basic_text_oprimitive<std::ostream>(
+ os,
+ 0 != (flags & no_codecvt)
+ ),
+ basic_text_oarchive<Archive>(flags)
+{
+ if(0 == (flags & no_header))
+ #if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3205))
+ this->init();
+ #else
+ this->basic_text_oarchive<Archive>::init();
+ #endif
+}
+
+template<class Archive>
+BOOST_ARCHIVE_DECL(void)
+text_oarchive_impl<Archive>::save_binary(const void *address, std::size_t count){
+ put('\n');
+ this->end_preamble();
+ #if ! defined(__MWERKS__)
+ this->basic_text_oprimitive<std::ostream>::save_binary(
+ #else
+ this->basic_text_oprimitive::save_binary(
+ #endif
+ address,
+ count
+ );
+ this->delimiter = this->eol;
+}
+
+} // namespace archive
+} // namespace boost
+
diff --git a/boost/boost/archive/impl/text_wiarchive_impl.ipp b/boost/boost/archive/impl/text_wiarchive_impl.ipp
new file mode 100644
index 00000000000..e838db044ce
--- /dev/null
+++ b/boost/boost/archive/impl/text_wiarchive_impl.ipp
@@ -0,0 +1,118 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// text_text_wiarchive_impl.ipp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <cstddef> // size_t
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::size_t;
+} // namespace std
+#endif
+
+#include <boost/detail/workaround.hpp> // fixup for RogueWave
+
+#ifndef BOOST_NO_STD_WSTREAMBUF
+#include <boost/archive/basic_text_iprimitive.hpp>
+
+namespace boost {
+namespace archive {
+
+//////////////////////////////////////////////////////////////////////
+// implementation of wiprimtives functions
+//
+template<class Archive>
+BOOST_WARCHIVE_DECL(void)
+text_wiarchive_impl<Archive>::load(char *s)
+{
+ std::size_t size;
+ * this->This() >> size;
+ // skip separating space
+ is.get();
+ while(size-- > 0){
+ *s++ = is.narrow(is.get(), '\0');
+ }
+ *s = '\0';
+}
+
+template<class Archive>
+BOOST_WARCHIVE_DECL(void)
+text_wiarchive_impl<Archive>::load(std::string &s)
+{
+ std::size_t size;
+ * this->This() >> size;
+ // skip separating space
+ is.get();
+ #if BOOST_WORKAROUND(_RWSTD_VER, BOOST_TESTED_AT(20101))
+ if(NULL != s.data())
+ #endif
+ s.resize(0);
+ s.reserve(size);
+ while(size-- > 0){
+ int x = is.narrow(is.get(), '\0');
+ s += x;
+ }
+}
+
+#ifndef BOOST_NO_INTRINSIC_WCHAR_T
+template<class Archive>
+BOOST_WARCHIVE_DECL(void)
+text_wiarchive_impl<Archive>::load(wchar_t *s)
+{
+ std::size_t size;
+ * this->This() >> size;
+ // skip separating space
+ is.get();
+ // Works on all tested platforms
+ is.read(s, size);
+ s[size] = L'\0';
+}
+#endif
+
+#ifndef BOOST_NO_STD_WSTRING
+template<class Archive>
+BOOST_WARCHIVE_DECL(void)
+text_wiarchive_impl<Archive>::load(std::wstring &ws)
+{
+ std::size_t size;
+ * this->This() >> size;
+ // skip separating space
+ is.get();
+ // borland complains about resize
+ // borland de-allocator fixup
+ #if BOOST_WORKAROUND(_RWSTD_VER, BOOST_TESTED_AT(20101))
+ if(NULL != ws.data())
+ #endif
+ ws.resize(size);
+ // note breaking a rule here - is this a problem on some platform
+ is.read(const_cast<wchar_t *>(ws.data()), size);
+}
+#endif
+
+template<class Archive>
+BOOST_WARCHIVE_DECL(BOOST_PP_EMPTY())
+text_wiarchive_impl<Archive>::text_wiarchive_impl(
+ std::wistream & is,
+ unsigned int flags
+) :
+ basic_text_iprimitive<std::wistream>(
+ is,
+ 0 != (flags & no_codecvt)
+ ),
+ basic_text_iarchive<Archive>(flags)
+{
+ if(0 == (flags & no_header))
+ basic_text_iarchive<Archive>::init();
+}
+
+} // archive
+} // boost
+
+#endif // BOOST_NO_STD_WSTREAMBUF
diff --git a/boost/boost/archive/impl/text_woarchive_impl.ipp b/boost/boost/archive/impl/text_woarchive_impl.ipp
new file mode 100644
index 00000000000..6683f528c03
--- /dev/null
+++ b/boost/boost/archive/impl/text_woarchive_impl.ipp
@@ -0,0 +1,85 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// text_woarchive_impl.ipp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+#ifndef BOOST_NO_STD_WSTREAMBUF
+
+#include <cstring>
+#include <cstddef> // size_t
+#if defined(BOOST_NO_STDC_NAMESPACE) && ! defined(__LIBCOMO__)
+namespace std{
+ using ::strlen;
+ using ::size_t;
+} // namespace std
+#endif
+
+#include <ostream>
+
+#include <boost/archive/text_woarchive.hpp>
+
+namespace boost {
+namespace archive {
+
+//////////////////////////////////////////////////////////////////////
+// implementation of woarchive functions
+//
+template<class Archive>
+BOOST_WARCHIVE_DECL(void)
+text_woarchive_impl<Archive>::save(const char *s)
+{
+ // note: superfluous local variable fixes borland warning
+ const std::size_t size = std::strlen(s);
+ * this->This() << size;
+ this->This()->newtoken();
+ while(*s != '\0')
+ os.put(os.widen(*s++));
+}
+
+template<class Archive>
+BOOST_WARCHIVE_DECL(void)
+text_woarchive_impl<Archive>::save(const std::string &s)
+{
+ const std::size_t size = s.size();
+ * this->This() << size;
+ this->This()->newtoken();
+ const char * cptr = s.data();
+ for(std::size_t i = size; i-- > 0;)
+ os.put(os.widen(*cptr++));
+}
+
+#ifndef BOOST_NO_INTRINSIC_WCHAR_T
+template<class Archive>
+BOOST_WARCHIVE_DECL(void)
+text_woarchive_impl<Archive>::save(const wchar_t *ws)
+{
+ const std::size_t size = std::wostream::traits_type::length(ws);
+ * this->This() << size;
+ this->This()->newtoken();
+ os.write(ws, size);
+}
+#endif
+
+#ifndef BOOST_NO_STD_WSTRING
+template<class Archive>
+BOOST_WARCHIVE_DECL(void)
+text_woarchive_impl<Archive>::save(const std::wstring &ws)
+{
+ const std::size_t size = ws.length();
+ * this->This() << size;
+ this->This()->newtoken();
+ os.write(ws.data(), size);
+}
+#endif
+
+} // namespace archive
+} // namespace boost
+
+#endif
+
diff --git a/boost/boost/archive/impl/xml_iarchive_impl.ipp b/boost/boost/archive/impl/xml_iarchive_impl.ipp
new file mode 100644
index 00000000000..99b94aff618
--- /dev/null
+++ b/boost/boost/archive/impl/xml_iarchive_impl.ipp
@@ -0,0 +1,199 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// xml_iarchive_impl.cpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+#include <cstring> // memcpy
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::memcpy;
+} // namespace std
+#endif
+
+#ifndef BOOST_NO_CWCHAR
+#include <cstdlib> // mbtowc
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::mbtowc;
+ } // namespace std
+#endif
+#endif // BOOST_NO_CWCHAR
+
+#include <boost/detail/workaround.hpp> // RogueWave and Dinkumware
+#if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1)
+#include <boost/archive/dinkumware.hpp>
+#endif
+
+#include <boost/detail/no_exceptions_support.hpp>
+
+#include <boost/archive/archive_exception.hpp>
+#include <boost/archive/iterators/dataflow_exception.hpp>
+#include <boost/archive/basic_xml_archive.hpp>
+#include <boost/archive/xml_iarchive.hpp>
+
+#include "basic_xml_grammar.hpp"
+
+namespace boost {
+namespace archive {
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// implemenations of functions specific to char archives
+
+// wide char stuff used by char archives
+
+#ifndef BOOST_NO_CWCHAR
+#ifndef BOOST_NO_STD_WSTRING
+template<class Archive>
+BOOST_ARCHIVE_DECL(void)
+xml_iarchive_impl<Archive>::load(std::wstring &ws){
+ std::string s;
+ bool result = gimpl->parse_string(is, s);
+ if(! result)
+ boost::throw_exception(
+ xml_archive_exception(xml_archive_exception::xml_archive_parsing_error)
+ );
+
+ #if BOOST_WORKAROUND(_RWSTD_VER, BOOST_TESTED_AT(20101))
+ if(NULL != ws.data())
+ #endif
+ ws.resize(0);
+ const char * start = s.data();
+ const char * end = start + s.size();
+ while(start < end){
+ wchar_t wc;
+ int resultx = std::mbtowc(&wc, start, end - start);
+ if(0 < resultx){
+ start += resultx;
+ ws += wc;
+ continue;
+ }
+ boost::throw_exception(
+ iterators::dataflow_exception(
+ iterators::dataflow_exception::invalid_conversion
+ )
+ );
+ }
+}
+#endif // BOOST_NO_STD_WSTRING
+
+#ifndef BOOST_NO_INTRINSIC_WCHAR_T
+template<class Archive>
+BOOST_ARCHIVE_DECL(void)
+xml_iarchive_impl<Archive>::load(wchar_t * ws){
+ std::string s;
+ bool result = gimpl->parse_string(is, s);
+ if(! result)
+ boost::throw_exception(
+ xml_archive_exception(xml_archive_exception::xml_archive_parsing_error)
+ );
+
+ const char * start = s.data();
+ const char * end = start + s.size();
+ while(start < end){
+ wchar_t wc;
+ int result = std::mbtowc(&wc, start, end - start);
+ if(0 < result){
+ start += result;
+ *ws++ = wc;
+ continue;
+ }
+ boost::throw_exception(
+ iterators::dataflow_exception(
+ iterators::dataflow_exception::invalid_conversion
+ )
+ );
+ }
+ *ws = L'\0';
+}
+#endif
+
+#endif // BOOST_NO_CWCHAR
+
+template<class Archive>
+BOOST_ARCHIVE_DECL(void)
+xml_iarchive_impl<Archive>::load(std::string &s){
+ bool result = gimpl->parse_string(is, s);
+ if(! result)
+ boost::throw_exception(
+ xml_archive_exception(xml_archive_exception::xml_archive_parsing_error)
+ );
+}
+
+template<class Archive>
+BOOST_ARCHIVE_DECL(void)
+xml_iarchive_impl<Archive>::load(char * s){
+ std::string tstring;
+ bool result = gimpl->parse_string(is, tstring);
+ if(! result)
+ boost::throw_exception(
+ xml_archive_exception(xml_archive_exception::xml_archive_parsing_error)
+ );
+ std::memcpy(s, tstring.data(), tstring.size());
+ s[tstring.size()] = 0;
+}
+
+template<class Archive>
+BOOST_ARCHIVE_DECL(void)
+xml_iarchive_impl<Archive>::load_override(class_name_type & t, int){
+ const std::string & s = gimpl->rv.class_name;
+ if(s.size() > BOOST_SERIALIZATION_MAX_KEY_SIZE - 1)
+ boost::throw_exception(archive_exception::invalid_class_name);
+ char * tptr = t;
+ std::memcpy(tptr, s.data(), s.size());
+ tptr[s.size()] = '\0';
+}
+
+template<class Archive>
+BOOST_ARCHIVE_DECL(void)
+xml_iarchive_impl<Archive>::init(){
+ gimpl->init(is);
+ this->set_library_version(gimpl->rv.version);
+}
+
+template<class Archive>
+BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY())
+xml_iarchive_impl<Archive>::xml_iarchive_impl(
+ std::istream &is_,
+ unsigned int flags
+) :
+ basic_text_iprimitive<std::istream>(
+ is_,
+ 0 != (flags & no_codecvt)
+ ),
+ basic_xml_iarchive<Archive>(flags),
+ gimpl(new xml_grammar())
+{
+ if(0 == (flags & no_header)){
+ BOOST_TRY{
+ init();
+ }
+ BOOST_CATCH(...){
+ delete gimpl;
+ #ifndef BOOST_NO_EXCEPTIONS
+ throw; // re-throw
+ #endif
+ }
+ BOOST_CATCH_END
+ }
+}
+
+template<class Archive>
+BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY())
+xml_iarchive_impl<Archive>::~xml_iarchive_impl(){
+ if(0 == (this->get_flags() & no_header)){
+ BOOST_TRY{
+ gimpl->windup(is);
+ }
+ BOOST_CATCH(...){}
+ BOOST_CATCH_END
+ }
+ delete gimpl;
+}
+} // namespace archive
+} // namespace boost
diff --git a/boost/boost/archive/impl/xml_oarchive_impl.ipp b/boost/boost/archive/impl/xml_oarchive_impl.ipp
new file mode 100644
index 00000000000..8ab954f4a34
--- /dev/null
+++ b/boost/boost/archive/impl/xml_oarchive_impl.ipp
@@ -0,0 +1,117 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// xml_oarchive_impl.ipp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <ostream>
+#include <iomanip>
+#include <algorithm>
+#include <string>
+
+#include <cstring> // strlen
+#include <boost/config.hpp> // msvc 6.0 needs this to suppress warnings
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::strlen;
+} // namespace std
+#endif
+
+#include <boost/archive/iterators/xml_escape.hpp>
+#include <boost/archive/iterators/ostream_iterator.hpp>
+
+#ifndef BOOST_NO_CWCHAR
+#include <boost/archive/wcslen.hpp>
+#include <boost/archive/iterators/mb_from_wchar.hpp>
+#endif
+
+namespace boost {
+namespace archive {
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// implemenations of functions specific to char archives
+
+// wide char stuff used by char archives
+#ifndef BOOST_NO_CWCHAR
+// copy chars to output escaping to xml and translating wide chars to mb chars
+template<class InputIterator>
+void save_iterator(std::ostream &os, InputIterator begin, InputIterator end){
+ typedef boost::archive::iterators::mb_from_wchar<
+ boost::archive::iterators::xml_escape<InputIterator>
+ > translator;
+ std::copy(
+ translator(BOOST_MAKE_PFTO_WRAPPER(begin)),
+ translator(BOOST_MAKE_PFTO_WRAPPER(end)),
+ boost::archive::iterators::ostream_iterator<char>(os)
+ );
+}
+
+#ifndef BOOST_NO_STD_WSTRING
+template<class Archive>
+BOOST_ARCHIVE_DECL(void)
+xml_oarchive_impl<Archive>::save(const std::wstring & ws){
+// at least one library doesn't typedef value_type for strings
+// so rather than using string directly make a pointer iterator out of it
+// save_iterator(os, ws.data(), ws.data() + std::wcslen(ws.data()));
+ save_iterator(os, ws.data(), ws.data() + ws.size());
+}
+#endif
+
+#ifndef BOOST_NO_INTRINSIC_WCHAR_T
+template<class Archive>
+BOOST_ARCHIVE_DECL(void)
+xml_oarchive_impl<Archive>::save(const wchar_t * ws){
+ save_iterator(os, ws, ws + std::wcslen(ws));
+}
+#endif
+
+#endif // BOOST_NO_CWCHAR
+
+template<class Archive>
+BOOST_ARCHIVE_DECL(void)
+xml_oarchive_impl<Archive>::save(const std::string & s){
+// at least one library doesn't typedef value_type for strings
+// so rather than using string directly make a pointer iterator out of it
+ typedef boost::archive::iterators::xml_escape<
+ const char *
+ > xml_escape_translator;
+ std::copy(
+ xml_escape_translator(BOOST_MAKE_PFTO_WRAPPER(s.data())),
+ xml_escape_translator(BOOST_MAKE_PFTO_WRAPPER(s.data()+ s.size())),
+ boost::archive::iterators::ostream_iterator<char>(os)
+ );
+}
+
+template<class Archive>
+BOOST_ARCHIVE_DECL(void)
+xml_oarchive_impl<Archive>::save(const char * s){
+ typedef boost::archive::iterators::xml_escape<
+ const char *
+ > xml_escape_translator;
+ std::copy(
+ xml_escape_translator(BOOST_MAKE_PFTO_WRAPPER(s)),
+ xml_escape_translator(BOOST_MAKE_PFTO_WRAPPER(s + std::strlen(s))),
+ boost::archive::iterators::ostream_iterator<char>(os)
+ );
+}
+
+template<class Archive>
+BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY())
+xml_oarchive_impl<Archive>::xml_oarchive_impl(
+ std::ostream & os_,
+ unsigned int flags
+) :
+ basic_text_oprimitive<std::ostream>(
+ os_,
+ 0 != (flags & no_codecvt)
+ ),
+ basic_xml_oarchive<Archive>(flags)
+{
+ if(0 == (flags & no_header))
+ this->init();
+}
+
+} // namespace archive
+} // namespace boost
diff --git a/boost/boost/archive/impl/xml_wiarchive_impl.ipp b/boost/boost/archive/impl/xml_wiarchive_impl.ipp
new file mode 100644
index 00000000000..14098ef9758
--- /dev/null
+++ b/boost/boost/archive/impl/xml_wiarchive_impl.ipp
@@ -0,0 +1,202 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// xml_wiprimitive.cpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp> // for BOOST_DEDUCED_TYPENAME
+
+#include <cstring>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::memcpy;
+} //std
+#endif
+
+#include <boost/config.hpp> // msvc 6.0 needs this to suppress warnings
+#ifndef BOOST_NO_STD_WSTREAMBUF
+
+#include <cassert>
+#include <algorithm>
+
+#include <boost/detail/workaround.hpp> // Dinkumware and RogueWave
+#if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1)
+#include <boost/archive/dinkumware.hpp>
+#endif
+
+#include <boost/io/ios_state.hpp>
+#include <boost/detail/no_exceptions_support.hpp>
+#include <boost/pfto.hpp>
+
+#include <boost/serialization/string.hpp>
+#include <boost/archive/add_facet.hpp>
+#include <boost/archive/archive_exception.hpp>
+#include <boost/archive/detail/utf8_codecvt_facet.hpp>
+
+#include <boost/archive/iterators/mb_from_wchar.hpp>
+
+#include <boost/archive/basic_xml_archive.hpp>
+#include <boost/archive/xml_wiarchive.hpp>
+
+#include "basic_xml_grammar.hpp"
+
+namespace boost {
+namespace archive {
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// implemenations of functions specific to wide char archives
+
+namespace { // anonymous
+
+void copy_to_ptr(char * s, const std::wstring & ws){
+ std::copy(
+ iterators::mb_from_wchar<std::wstring::const_iterator>(
+ BOOST_MAKE_PFTO_WRAPPER(ws.begin())
+ ),
+ iterators::mb_from_wchar<std::wstring::const_iterator>(
+ BOOST_MAKE_PFTO_WRAPPER(ws.end())
+ ),
+ s
+ );
+ s[ws.size()] = 0;
+}
+
+} // anonymous
+
+template<class Archive>
+BOOST_WARCHIVE_DECL(void)
+xml_wiarchive_impl<Archive>::load(std::string & s){
+ std::wstring ws;
+ bool result = gimpl->parse_string(is, ws);
+ if(! result)
+ boost::throw_exception(
+ xml_archive_exception(xml_archive_exception::xml_archive_parsing_error)
+ );
+ #if BOOST_WORKAROUND(_RWSTD_VER, BOOST_TESTED_AT(20101))
+ if(NULL != s.data())
+ #endif
+ s.resize(0);
+ s.reserve(ws.size());
+ std::copy(
+ iterators::mb_from_wchar<std::wstring::iterator>(
+ BOOST_MAKE_PFTO_WRAPPER(ws.begin())
+ ),
+ iterators::mb_from_wchar<std::wstring::iterator>(
+ BOOST_MAKE_PFTO_WRAPPER(ws.end())
+ ),
+ std::back_inserter(s)
+ );
+}
+
+#ifndef BOOST_NO_STD_WSTRING
+template<class Archive>
+BOOST_WARCHIVE_DECL(void)
+xml_wiarchive_impl<Archive>::load(std::wstring & ws){
+ bool result = gimpl->parse_string(is, ws);
+ if(! result)
+ boost::throw_exception(
+ xml_archive_exception(xml_archive_exception::xml_archive_parsing_error)
+ );
+}
+#endif
+
+template<class Archive>
+BOOST_WARCHIVE_DECL(void)
+xml_wiarchive_impl<Archive>::load(char * s){
+ std::wstring ws;
+ bool result = gimpl->parse_string(is, ws);
+ if(! result)
+ boost::throw_exception(
+ xml_archive_exception(xml_archive_exception::xml_archive_parsing_error)
+ );
+ copy_to_ptr(s, ws);
+}
+
+#ifndef BOOST_NO_INTRINSIC_WCHAR_T
+template<class Archive>
+BOOST_WARCHIVE_DECL(void)
+xml_wiarchive_impl<Archive>::load(wchar_t * ws){
+ std::wstring twstring;
+ bool result = gimpl->parse_string(is, twstring);
+ if(! result)
+ boost::throw_exception(
+ xml_archive_exception(xml_archive_exception::xml_archive_parsing_error)
+ );
+ std::memcpy(ws, twstring.c_str(), twstring.size());
+ ws[twstring.size()] = L'\0';
+}
+#endif
+
+template<class Archive>
+BOOST_WARCHIVE_DECL(void)
+xml_wiarchive_impl<Archive>::load_override(class_name_type & t, int){
+ const std::wstring & ws = gimpl->rv.class_name;
+ if(ws.size() > BOOST_SERIALIZATION_MAX_KEY_SIZE - 1)
+ boost::throw_exception(archive_exception::invalid_class_name);
+ copy_to_ptr(t, ws);
+}
+
+template<class Archive>
+BOOST_WARCHIVE_DECL(void)
+xml_wiarchive_impl<Archive>::init(){
+ gimpl->init(is);
+ this->set_library_version(gimpl->rv.version);
+}
+
+template<class Archive>
+BOOST_WARCHIVE_DECL(BOOST_PP_EMPTY())
+xml_wiarchive_impl<Archive>::xml_wiarchive_impl(
+ std::wistream &is_,
+ unsigned int flags
+) :
+ basic_text_iprimitive<std::wistream>(
+ is_,
+ true // don't change the codecvt - use the one below
+ ),
+ basic_xml_iarchive<Archive>(flags),
+ gimpl(new xml_wgrammar())
+{
+ if(0 == (flags & no_codecvt)){
+ archive_locale.reset(
+ add_facet(
+ std::locale::classic(),
+ new detail::utf8_codecvt_facet
+ )
+ );
+ is.imbue(* archive_locale);
+ }
+ if(0 == (flags & no_header)){
+ BOOST_TRY{
+ this->init();
+ }
+ BOOST_CATCH(...){
+ delete gimpl;
+ #ifndef BOOST_NO_EXCEPTIONS
+ throw; // re-throw
+ #endif
+ }
+ BOOST_CATCH_END
+ }
+}
+
+template<class Archive>
+BOOST_WARCHIVE_DECL(BOOST_PP_EMPTY())
+xml_wiarchive_impl<Archive>::~xml_wiarchive_impl(){
+ if(0 == (this->get_flags() & no_header)){
+ BOOST_TRY{
+ gimpl->windup(is);
+ }
+ BOOST_CATCH(...){}
+ BOOST_CATCH_END
+ }
+ delete gimpl;
+}
+
+} // namespace archive
+} // namespace boost
+
+#endif // BOOST_NO_STD_WSTREAMBUF
diff --git a/boost/boost/archive/impl/xml_woarchive_impl.ipp b/boost/boost/archive/impl/xml_woarchive_impl.ipp
new file mode 100644
index 00000000000..ab05f141772
--- /dev/null
+++ b/boost/boost/archive/impl/xml_woarchive_impl.ipp
@@ -0,0 +1,159 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// xml_woarchive_impl.ipp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/config.hpp>
+#ifndef BOOST_NO_STD_WSTREAMBUF
+
+#include <ostream>
+#include <string>
+#include <algorithm>
+#include <locale>
+
+#include <boost/config.hpp> // msvc 6.0 needs this to suppress warnings
+ // for BOOST_DEDUCED_TYPENAME
+#include <cstring> // strlen
+#include <cstdlib> // mbtowc
+#include <cwchar> // wcslen
+
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::strlen;
+ #if ! defined(BOOST_NO_INTRINSIC_WCHAR_T)
+ using ::mbtowc;
+ using ::wcslen;
+ #endif
+} // namespace std
+#endif
+
+#include <boost/throw_exception.hpp>
+#include <boost/pfto.hpp>
+
+#include <boost/archive/iterators/xml_escape.hpp>
+#include <boost/archive/iterators/wchar_from_mb.hpp>
+#include <boost/archive/iterators/ostream_iterator.hpp>
+#include <boost/archive/iterators/dataflow_exception.hpp>
+
+#include <boost/archive/add_facet.hpp>
+#include <boost/archive/detail/utf8_codecvt_facet.hpp>
+
+namespace boost {
+namespace archive {
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// implemenations of functions specific to wide char archives
+
+// copy chars to output escaping to xml and widening characters as we go
+template<class InputIterator>
+void save_iterator(std::wostream &os, InputIterator begin, InputIterator end){
+ typedef iterators::wchar_from_mb<
+ iterators::xml_escape<InputIterator>
+ > xmbtows;
+ std::copy(
+ xmbtows(BOOST_MAKE_PFTO_WRAPPER(begin)),
+ xmbtows(BOOST_MAKE_PFTO_WRAPPER(end)),
+ boost::archive::iterators::ostream_iterator<wchar_t>(os)
+ );
+}
+
+template<class Archive>
+BOOST_WARCHIVE_DECL(void)
+xml_woarchive_impl<Archive>::save(const std::string & s){
+ // note: we don't use s.begin() and s.end() because dinkumware
+ // doesn't have string::value_type defined. So use a wrapper
+ // around these values to implement the definitions.
+ const char * begin = s.data();
+ const char * end = begin + s.size();
+ save_iterator(os, begin, end);
+}
+
+#ifndef BOOST_NO_STD_WSTRING
+template<class Archive>
+BOOST_WARCHIVE_DECL(void)
+xml_woarchive_impl<Archive>::save(const std::wstring & ws){
+#if 0
+ typedef iterators::xml_escape<std::wstring::const_iterator> xmbtows;
+ std::copy(
+ xmbtows(BOOST_MAKE_PFTO_WRAPPER(ws.begin())),
+ xmbtows(BOOST_MAKE_PFTO_WRAPPER(ws.end())),
+ boost::archive::iterators::ostream_iterator<wchar_t>(os)
+ );
+#endif
+ typedef iterators::xml_escape<const wchar_t *> xmbtows;
+ std::copy(
+ xmbtows(BOOST_MAKE_PFTO_WRAPPER(ws.data())),
+ xmbtows(BOOST_MAKE_PFTO_WRAPPER(ws.data() + ws.size())),
+ boost::archive::iterators::ostream_iterator<wchar_t>(os)
+ );
+}
+#endif //BOOST_NO_STD_WSTRING
+
+template<class Archive>
+BOOST_WARCHIVE_DECL(void)
+xml_woarchive_impl<Archive>::save(const char * s){
+ save_iterator(os, s, s + std::strlen(s));
+}
+
+#ifndef BOOST_NO_INTRINSIC_WCHAR_T
+template<class Archive>
+BOOST_WARCHIVE_DECL(void)
+xml_woarchive_impl<Archive>::save(const wchar_t * ws){
+ os << ws;
+ typedef iterators::xml_escape<const wchar_t *> xmbtows;
+ std::copy(
+ xmbtows(BOOST_MAKE_PFTO_WRAPPER(ws)),
+ xmbtows(BOOST_MAKE_PFTO_WRAPPER(ws + std::wcslen(ws))),
+ boost::archive::iterators::ostream_iterator<wchar_t>(os)
+ );
+}
+#endif
+
+template<class Archive>
+BOOST_WARCHIVE_DECL(BOOST_PP_EMPTY())
+xml_woarchive_impl<Archive>::xml_woarchive_impl(
+ std::wostream & os_,
+ unsigned int flags
+) :
+ basic_text_oprimitive<std::wostream>(
+ os_,
+ true // don't change the codecvt - use the one below
+ ),
+ basic_xml_oarchive<Archive>(flags)
+{
+ // Standard behavior is that imbue can be called
+ // a) before output is invoked or
+ // b) after flush has been called. This prevents one-to-many
+ // transforms (such as one to many transforms from getting
+ // mixed up. Unfortunately, STLPort doesn't respect b) above
+ // so the restoration of the original archive locale done by
+ // the locale_saver doesn't get processed,
+ // before the current one is destroyed.
+ // so the codecvt doesn't get replaced with the orginal
+ // so closing the stream invokes codecvt::do_unshift
+ // so it crashes because the corresponding locale that contained
+ // the codecvt isn't around any more.
+ // we can hack around this by using a static codecvt that never
+ // gets destroyed.
+ if(0 == (flags & no_codecvt)){
+ detail::utf8_codecvt_facet *pfacet;
+ #if defined(__SGI_STL_PORT)
+ static detail::utf8_codecvt_facet facet(static_cast<size_t>(1));
+ pfacet = & facet;
+ #else
+ pfacet = new detail::utf8_codecvt_facet;
+ #endif
+ archive_locale.reset(add_facet(std::locale::classic(), pfacet));
+ os.imbue(* archive_locale);
+ }
+ if(0 == (flags & no_header))
+ this->init();
+}
+
+} // namespace archive
+} // namespace boost
+
+#endif //BOOST_NO_STD_WSTREAMBUF
diff --git a/boost/boost/archive/iterators/base64_exception.hpp b/boost/boost/archive/iterators/base64_exception.hpp
new file mode 100644
index 00000000000..eb2d2e1ba06
--- /dev/null
+++ b/boost/boost/archive/iterators/base64_exception.hpp
@@ -0,0 +1,68 @@
+#ifndef BOOST_ARCHIVE_ITERATORS_BASE64_EXCEPTION_HPP
+#define BOOST_ARCHIVE_ITERATORS_BASE64_EXCEPTION_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// base64_exception.hpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+#ifndef BOOST_NO_EXCEPTIONS
+#include <exception>
+
+#include <cassert>
+
+namespace boost {
+namespace archive {
+namespace iterators {
+
+//////////////////////////////////////////////////////////////////////
+// exceptions thrown by base64s
+//
+class base64_exception : public std::exception
+{
+public:
+ typedef enum {
+ invalid_code, // attempt to encode a value > 6 bits
+ invalid_character, // decode a value not in base64 char set
+ other_exception
+ } exception_code;
+ exception_code code;
+
+ base64_exception(exception_code c = other_exception) : code(c)
+ {}
+
+ virtual const char *what( ) const throw( )
+ {
+ const char *msg = "unknown exception code";
+ switch(code){
+ case invalid_code:
+ msg = "attempt to encode a value > 6 bits";
+ break;
+ case invalid_character:
+ msg = "attempt to decode a value not in base64 char set";
+ break;
+ default:
+ assert(false);
+ break;
+ }
+ return msg;
+ }
+};
+
+} // namespace iterators
+} // namespace archive
+} // namespace boost
+
+#endif //BOOST_NO_EXCEPTIONS
+#endif //BOOST_ARCHIVE_ITERATORS_ARCHIVE_EXCEPTION_HPP
diff --git a/boost/boost/archive/iterators/base64_from_binary.hpp b/boost/boost/archive/iterators/base64_from_binary.hpp
new file mode 100644
index 00000000000..a7796114432
--- /dev/null
+++ b/boost/boost/archive/iterators/base64_from_binary.hpp
@@ -0,0 +1,105 @@
+#ifndef BOOST_ARCHIVE_ITERATORS_BASE64_FROM_BINARY_HPP
+#define BOOST_ARCHIVE_ITERATORS_BASE64_FROM_BINARY_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// base64_from_binary.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <cassert>
+
+#include <boost/config.hpp> // for BOOST_DEDUCED_TYPENAME
+#include <boost/pfto.hpp>
+
+#include <boost/iterator/transform_iterator.hpp>
+#include <boost/archive/iterators/dataflow_exception.hpp>
+
+namespace boost {
+namespace archive {
+namespace iterators {
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// convert binary integers to base64 characters
+
+namespace detail {
+
+template<class CharType>
+struct from_6_bit {
+ typedef CharType result_type;
+ CharType operator()(CharType t) const{
+ const char * lookup_table =
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ "abcdefghijklmnopqrstuvwxyz"
+ "0123456789"
+ "+/";
+ assert(t < 64);
+ return lookup_table[t];
+ }
+};
+
+} // namespace detail
+
+// note: what we would like to do is
+// template<class Base, class CharType = BOOST_DEDUCED_TYPENAME Base::value_type>
+// typedef transform_iterator<
+// from_6_bit<CharType>,
+// transform_width<Base, 6, sizeof(Base::value_type) * 8, CharType>
+// > base64_from_binary;
+// but C++ won't accept this. Rather than using a "type generator" and
+// using a different syntax, make a derivation which should be equivalent.
+//
+// Another issue addressed here is that the transform_iterator doesn't have
+// a templated constructor. This makes it incompatible with the dataflow
+// ideal. This is also addressed here.
+
+//template<class Base, class CharType = BOOST_DEDUCED_TYPENAME Base::value_type>
+template<
+ class Base,
+ class CharType = BOOST_DEDUCED_TYPENAME boost::iterator_value<Base>::type
+>
+class base64_from_binary :
+ public transform_iterator<
+ detail::from_6_bit<CharType>,
+ Base
+ >
+{
+ friend class boost::iterator_core_access;
+ typedef transform_iterator<
+ BOOST_DEDUCED_TYPENAME detail::from_6_bit<CharType>,
+ Base
+ > super_t;
+
+public:
+ // make composible buy using templated constructor
+ template<class T>
+ base64_from_binary(BOOST_PFTO_WRAPPER(T) start) :
+ super_t(
+ Base(BOOST_MAKE_PFTO_WRAPPER(static_cast<T>(start))),
+ detail::from_6_bit<CharType>()
+ )
+ {}
+ // intel 7.1 doesn't like default copy constructor
+ base64_from_binary(const base64_from_binary & rhs) :
+ super_t(
+ Base(rhs.base_reference()),
+ detail::from_6_bit<CharType>()
+ )
+ {}
+// base64_from_binary(){};
+};
+
+} // namespace iterators
+} // namespace archive
+} // namespace boost
+
+#endif // BOOST_ARCHIVE_ITERATORS_BASE64_FROM_BINARY_HPP
diff --git a/boost/boost/archive/iterators/binary_from_base64.hpp b/boost/boost/archive/iterators/binary_from_base64.hpp
new file mode 100644
index 00000000000..15952fe08c9
--- /dev/null
+++ b/boost/boost/archive/iterators/binary_from_base64.hpp
@@ -0,0 +1,120 @@
+#ifndef BOOST_ARCHIVE_ITERATORS_BINARY_FROM_BASE64_HPP
+#define BOOST_ARCHIVE_ITERATORS_BINARY_FROM_BASE64_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// binary_from_base64.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <cassert>
+
+#include <boost/config.hpp> // for BOOST_DEDUCED_TYPENAME
+#include <boost/throw_exception.hpp>
+#include <boost/pfto.hpp>
+#include <boost/static_assert.hpp>
+
+#include <boost/iterator/transform_iterator.hpp>
+#include <boost/archive/iterators/dataflow_exception.hpp>
+
+namespace boost {
+namespace archive {
+namespace iterators {
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// convert base64 characters to binary data
+
+namespace detail {
+
+template<class CharType>
+struct to_6_bit {
+ typedef CharType result_type;
+ CharType operator()(CharType t) const{
+ const char lookup_table[] = {
+ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
+ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
+ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,62,-1,-1,-1,63,
+ 52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-1,-1,-1,
+ -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,
+ 15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,
+ -1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,
+ 41,42,43,44,45,46,47,48,49,50,51,-1,-1,-1,-1,-1
+ };
+ // metrowerks trips this assertion - how come?
+ #if ! defined(__MWERKS__)
+ BOOST_STATIC_ASSERT(128 == sizeof(lookup_table));
+ #endif
+ signed char value = -1;
+ if((unsigned)t <= 127)
+ value = lookup_table[(unsigned)t];
+ if(-1 == value)
+ boost::throw_exception(
+ dataflow_exception(dataflow_exception::invalid_base64_character)
+ );
+ return value;
+ }
+};
+
+} // namespace detail
+
+// note: what we would like to do is
+// template<class Base, class CharType = BOOST_DEDUCED_TYPENAME Base::value_type>
+// typedef transform_iterator<
+// from_6_bit<CharType>,
+// transform_width<Base, 6, sizeof(Base::value_type) * 8, CharType>
+// > base64_from_binary;
+// but C++ won't accept this. Rather than using a "type generator" and
+// using a different syntax, make a derivation which should be equivalent.
+//
+// Another issue addressed here is that the transform_iterator doesn't have
+// a templated constructor. This makes it incompatible with the dataflow
+// ideal. This is also addressed here.
+
+template<
+ class Base,
+ class CharType = BOOST_DEDUCED_TYPENAME boost::iterator_value<Base>::type
+>
+class binary_from_base64 : public
+ transform_iterator<
+ detail::to_6_bit<CharType>,
+ Base
+ >
+{
+ friend class boost::iterator_core_access;
+ typedef transform_iterator<
+ detail::to_6_bit<CharType>,
+ Base
+ > super_t;
+public:
+ // make composible buy using templated constructor
+ template<class T>
+ binary_from_base64(BOOST_PFTO_WRAPPER(T) start) :
+ super_t(
+ Base(BOOST_MAKE_PFTO_WRAPPER(static_cast<T>(start))),
+ detail::to_6_bit<CharType>()
+ )
+ {}
+ // intel 7.1 doesn't like default copy constructor
+ binary_from_base64(const binary_from_base64 & rhs) :
+ super_t(
+ Base(rhs.base_reference()),
+ detail::to_6_bit<CharType>()
+ )
+ {}
+// binary_from_base64(){};
+};
+
+} // namespace iterators
+} // namespace archive
+} // namespace boost
+
+#endif // BOOST_ARCHIVE_ITERATORS_BINARY_FROM_BASE64_HPP
diff --git a/boost/boost/archive/iterators/dataflow.hpp b/boost/boost/archive/iterators/dataflow.hpp
new file mode 100644
index 00000000000..a6f1ba3ac43
--- /dev/null
+++ b/boost/boost/archive/iterators/dataflow.hpp
@@ -0,0 +1,104 @@
+#ifndef BOOST_ARCHIVE_ITERATORS_DATAFLOW_HPP
+#define BOOST_ARCHIVE_ITERATORS_DATAFLOW_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// dataflow.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <cassert>
+
+#include <boost/config.hpp> // for BOOST_DEDUCED_TYPENAME
+
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/apply.hpp>
+#include <boost/mpl/plus.hpp>
+#include <boost/mpl/int.hpp>
+
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/type_traits/is_base_and_derived.hpp>
+#include <boost/type_traits/is_pointer.hpp>
+#include <boost/iterator/iterator_adaptor.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+#include <boost/static_assert.hpp>
+
+namespace boost {
+namespace archive {
+namespace iterators {
+
+// poor man's tri-state
+struct tri_state {
+ enum state_enum {
+ is_false = false,
+ is_true = true,
+ is_indeterminant,
+ } m_state;
+ // convert to bool
+ operator bool (){
+ assert(is_indeterminant != m_state);
+ return is_true == m_state ? true : false;
+ }
+ // assign from bool
+ tri_state & operator=(bool rhs) {
+ m_state = rhs ? is_true : is_false;
+ }
+ tri_state(bool rhs) :
+ m_state(rhs ? is_true : is_false)
+ {}
+ tri_state(state_enum state) :
+ m_state(state)
+ {}
+ bool operator==(const tri_state & rhs) const {
+ return m_state == rhs.m_state;
+ }
+ bool operator!=(const tri_state & rhs) const {
+ return m_state != rhs.m_state;
+ }
+};
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// implement functions common to dataflow iterators
+template<class Derived>
+class dataflow {
+ bool m_eoi;
+protected:
+ // test for iterator equality
+ tri_state equal(const Derived & rhs) const {
+ if(m_eoi && rhs.m_eoi)
+ return true;
+ if(m_eoi || rhs.m_eoi)
+ return false;
+ return tri_state(tri_state::is_indeterminant);
+ }
+ void eoi(bool tf){
+ m_eoi = tf;
+ }
+ bool eoi() const {
+ return m_eoi;
+ }
+public:
+ dataflow(bool tf) :
+ m_eoi(tf)
+ {}
+ dataflow() : // used for iterator end
+ m_eoi(true)
+ {}
+};
+
+} // namespace iterators
+} // namespace archive
+} // namespace boost
+
+#endif // BOOST_ARCHIVE_ITERATORS_DATAFLOW_HPP
diff --git a/boost/boost/archive/iterators/dataflow_exception.hpp b/boost/boost/archive/iterators/dataflow_exception.hpp
new file mode 100644
index 00000000000..0963f158b07
--- /dev/null
+++ b/boost/boost/archive/iterators/dataflow_exception.hpp
@@ -0,0 +1,80 @@
+#ifndef BOOST_ARCHIVE_ITERATORS_DATAFLOW_EXCEPTION_HPP
+#define BOOST_ARCHIVE_ITERATORS_DATAFLOW_EXCEPTION_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// dataflow_exception.hpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+#ifndef BOOST_NO_EXCEPTIONS
+#include <exception>
+
+#include <cassert>
+
+namespace boost {
+namespace archive {
+namespace iterators {
+
+//////////////////////////////////////////////////////////////////////
+// exceptions thrown by dataflows
+//
+class dataflow_exception : public std::exception
+{
+public:
+ typedef enum {
+ invalid_6_bitcode,
+ invalid_base64_character,
+ invalid_xml_escape_sequence,
+ comparison_not_permitted,
+ invalid_conversion,
+ other_exception
+ } exception_code;
+ exception_code code;
+
+ dataflow_exception(exception_code c = other_exception) : code(c)
+ {}
+
+ virtual const char *what( ) const throw( )
+ {
+ const char *msg = "unknown exception code";
+ switch(code){
+ case invalid_6_bitcode:
+ msg = "attempt to encode a value > 6 bits";
+ break;
+ case invalid_base64_character:
+ msg = "attempt to decode a value not in base64 char set";
+ break;
+ case invalid_xml_escape_sequence:
+ msg = "invalid xml escape_sequence";
+ break;
+ case comparison_not_permitted:
+ msg = "cannot invoke iterator comparison now";
+ break;
+ case invalid_conversion:
+ msg = "invalid multbyte/wide char conversion";
+ break;
+ default:
+ assert(false);
+ break;
+ }
+ return msg;
+ }
+};
+
+} // namespace iterators
+} // namespace archive
+} // namespace boost
+
+#endif //BOOST_NO_EXCEPTIONS
+#endif //BOOST_ARCHIVE_ITERATORS_DATAFLOW_EXCEPTION_HPP
diff --git a/boost/boost/archive/iterators/escape.hpp b/boost/boost/archive/iterators/escape.hpp
new file mode 100644
index 00000000000..972e943c9ff
--- /dev/null
+++ b/boost/boost/archive/iterators/escape.hpp
@@ -0,0 +1,114 @@
+#ifndef BOOST_ARCHIVE_ITERATORS_ESCAPE_HPP
+#define BOOST_ARCHIVE_ITERATORS_ESCAPE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// escape.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <cassert>
+
+#include <boost/config.hpp> // for BOOST_DEDUCED_TYPENAME
+#include <boost/iterator/iterator_adaptor.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+
+namespace boost {
+namespace archive {
+namespace iterators {
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// insert escapes into text
+
+template<class Derived, class Base>
+class escape :
+ public boost::iterator_adaptor<
+ Derived,
+ Base,
+ BOOST_DEDUCED_TYPENAME boost::iterator_value<Base>::type,
+ single_pass_traversal_tag,
+ BOOST_DEDUCED_TYPENAME boost::iterator_value<Base>::type
+ >
+{
+ typedef BOOST_DEDUCED_TYPENAME boost::iterator_value<Base>::type base_value_type;
+ typedef BOOST_DEDUCED_TYPENAME boost::iterator_reference<Base>::type reference_type;
+ friend class boost::iterator_core_access;
+
+ typedef BOOST_DEDUCED_TYPENAME boost::iterator_adaptor<
+ Derived,
+ Base,
+ base_value_type,
+ single_pass_traversal_tag,
+ base_value_type
+ > super_t;
+
+ typedef escape<Derived, Base> this_t;
+
+ void dereference_impl() {
+ m_current_value = static_cast<Derived *>(this)->fill(m_bnext, m_bend);
+ m_full = true;
+ }
+
+ //Access the value referred to
+ reference_type dereference() const {
+ if(!m_full)
+ const_cast<this_t *>(this)->dereference_impl();
+ return m_current_value;
+ }
+
+ bool equal(const this_t & rhs) const {
+ if(m_full){
+ if(! rhs.m_full)
+ const_cast<this_t *>(& rhs)->dereference_impl();
+ }
+ else{
+ if(rhs.m_full)
+ const_cast<this_t *>(this)->dereference_impl();
+ }
+ if(m_bnext != rhs.m_bnext)
+ return false;
+ if(this->base_reference() != rhs.base_reference())
+ return false;
+ return true;
+ }
+
+ void increment(){
+ if(++m_bnext < m_bend){
+ m_current_value = *m_bnext;
+ return;
+ }
+ ++(this->base_reference());
+ m_bnext = NULL;
+ m_bend = NULL;
+ m_full = false;
+ }
+
+ // buffer to handle pending characters
+ const base_value_type *m_bnext;
+ const base_value_type *m_bend;
+ bool m_full;
+ BOOST_DEDUCED_TYPENAME boost::iterator_value<Base>::type m_current_value;
+public:
+ escape(Base base) :
+ super_t(base),
+ m_bnext(NULL),
+ m_bend(NULL),
+ m_full(false)
+ {
+ }
+};
+
+} // namespace iterators
+} // namespace archive
+} // namespace boost
+
+#endif // BOOST_ARCHIVE_ITERATORS_ESCAPE_HPP
diff --git a/boost/boost/archive/iterators/head_iterator.hpp b/boost/boost/archive/iterators/head_iterator.hpp
new file mode 100644
index 00000000000..dc104510c6f
--- /dev/null
+++ b/boost/boost/archive/iterators/head_iterator.hpp
@@ -0,0 +1,81 @@
+#ifndef BOOST_ARCHIVE_ITERATORS_HEAD_ITERATOR_HPP
+#define BOOST_ARCHIVE_ITERATORS_HEAD_ITERATOR_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// head_iterator.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/type_traits/is_same.hpp>
+#include <boost/iterator/iterator_adaptor.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+
+namespace boost {
+namespace archive {
+namespace iterators {
+
+template<class Predicate, class Base>
+class head_iterator
+ : public boost::iterator_adaptor<
+ head_iterator<Predicate, Base>,
+ Base,
+ use_default,
+ single_pass_traversal_tag
+ >
+{
+private:
+ friend class iterator_core_access;
+ typedef boost::iterator_adaptor<
+ head_iterator<Predicate, Base>,
+ Base,
+ use_default,
+ single_pass_traversal_tag
+ > super_t;
+
+ typedef head_iterator<Predicate, Base> this_t;
+ typedef BOOST_DEDUCED_TYPENAME super_t::value_type value_type;
+ typedef BOOST_DEDUCED_TYPENAME super_t::reference reference_type;
+
+ reference_type dereference_impl(){
+ if(! m_end){
+ while(! m_predicate(* base_reference()))
+ ++ base_reference();
+ m_end = true;
+ }
+ return * base_reference();
+ }
+
+ reference_type dereference() const {
+ return const_cast<this_t *>(this)->dereference_impl();
+ }
+
+ void increment(){
+ ++base_reference();
+ }
+ Predicate m_predicate;
+ bool m_end;
+public:
+ template<class T>
+ head_iterator(Predicate f, T start) :
+ super_t(Base(start)),
+ m_predicate(f),
+ m_end(false)
+ {}
+
+};
+
+} // namespace iterators
+} // namespace archive
+} // namespace boost
+
+#endif // BOOST_ARCHIVE_ITERATORS_HEAD_ITERATOR_HPP
diff --git a/boost/boost/archive/iterators/insert_linebreaks.hpp b/boost/boost/archive/iterators/insert_linebreaks.hpp
new file mode 100644
index 00000000000..933b4a9ce90
--- /dev/null
+++ b/boost/boost/archive/iterators/insert_linebreaks.hpp
@@ -0,0 +1,101 @@
+#ifndef BOOST_ARCHIVE_ITERATORS_INSERT_LINEBREAKS_HPP
+#define BOOST_ARCHIVE_ITERATORS_INSERT_LINEBREAKS_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// binary_from_base64.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <cassert>
+
+#include <boost/config.hpp> // for BOOST_DEDUCED_TYPENAME
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{ using ::memcpy; }
+#endif
+
+#include <boost/pfto.hpp>
+
+#include <boost/iterator/iterator_adaptor.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+
+namespace boost {
+namespace archive {
+namespace iterators {
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// insert line break every N characters
+template<
+ class Base,
+ int N,
+ class CharType = BOOST_DEDUCED_TYPENAME boost::iterator_value<Base>::type
+>
+class insert_linebreaks :
+ public iterator_adaptor<
+ insert_linebreaks<Base, N, CharType>,
+ Base,
+ CharType,
+ single_pass_traversal_tag,
+ CharType
+ >
+{
+private:
+ friend class boost::iterator_core_access;
+ typedef iterator_adaptor<
+ insert_linebreaks<Base, N, CharType>,
+ Base,
+ CharType,
+ single_pass_traversal_tag,
+ CharType
+ > super_t;
+
+ bool equal(const insert_linebreaks<Base, N, CharType> & rhs) const {
+ return
+// m_count == rhs.m_count
+// && base_reference() == rhs.base_reference()
+ this->base_reference() == rhs.base_reference()
+ ;
+ }
+
+ void increment() {
+ if(m_count == N){
+ m_count = 0;
+ return;
+ }
+ ++m_count;
+ ++(this->base_reference());
+ }
+ CharType dereference() const {
+ if(m_count == N)
+ return '\n';
+ return * (this->base_reference());
+ }
+ unsigned int m_count;
+public:
+ // make composible buy using templated constructor
+ template<class T>
+ insert_linebreaks(BOOST_PFTO_WRAPPER(T) start) :
+ super_t(Base(BOOST_MAKE_PFTO_WRAPPER(static_cast<T>(start)))),
+ m_count(0)
+ {}
+ // intel 7.1 doesn't like default copy constructor
+ insert_linebreaks(const insert_linebreaks & rhs) :
+ super_t(rhs.base_reference()),
+ m_count(rhs.m_count)
+ {}
+};
+
+} // namespace iterators
+} // namespace archive
+} // namespace boost
+
+#endif // BOOST_ARCHIVE_ITERATORS_INSERT_LINEBREAKS_HPP
diff --git a/boost/boost/archive/iterators/istream_iterator.hpp b/boost/boost/archive/iterators/istream_iterator.hpp
new file mode 100644
index 00000000000..9071af3f0cc
--- /dev/null
+++ b/boost/boost/archive/iterators/istream_iterator.hpp
@@ -0,0 +1,94 @@
+#ifndef BOOST_ARCHIVE_ITERATORS_ISTREAM_ITERATOR_HPP
+#define BOOST_ARCHIVE_ITERATORS_ISTREAM_ITERATOR_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// istream_iterator.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+// note: this is a custom version of the standard istream_iterator.
+// This is necessary as the standard version doesn't work as expected
+// for wchar_t based streams on systems for which wchar_t not a true
+// type but rather a synonym for some integer type.
+
+#include <istream>
+#include <boost/iterator/iterator_facade.hpp>
+
+namespace boost {
+namespace archive {
+namespace iterators {
+
+// given a type, make an input iterator based on a pointer to that type
+template<class Elem = char>
+class istream_iterator :
+ public boost::iterator_facade<
+ istream_iterator<Elem>,
+ Elem,
+ std::input_iterator_tag,
+ Elem
+ >
+{
+ friend class boost::iterator_core_access;
+ typedef istream_iterator this_t ;
+ typedef BOOST_DEDUCED_TYPENAME boost::iterator_facade<
+ istream_iterator<Elem>,
+ Elem,
+ std::input_iterator_tag,
+ Elem
+ > super_t;
+ typedef BOOST_DEDUCED_TYPENAME std::basic_istream<Elem> istream_type;
+
+ //Access the value referred to
+ Elem dereference() const {
+ return m_current_value;
+ }
+
+ bool equal(const this_t & rhs) const {
+ // note: only works for comparison against end of stream
+ return m_istream == rhs.m_istream;
+ }
+
+ void increment(){
+ if(NULL != m_istream){
+ m_current_value = m_istream->get();
+ if(! m_istream->good()){
+ const_cast<this_t *>(this)->m_istream = NULL;
+ }
+ }
+ }
+
+ istream_type *m_istream;
+ Elem m_current_value;
+public:
+ istream_iterator(istream_type & is) :
+ m_istream(& is)
+ {
+ increment();
+ }
+
+ istream_iterator() :
+ m_istream(NULL)
+ {}
+
+ istream_iterator(const istream_iterator<Elem> & rhs) :
+ m_istream(rhs.m_istream),
+ m_current_value(rhs.m_current_value)
+ {}
+
+};
+
+} // namespace iterators
+} // namespace archive
+} // namespace boost
+
+#endif // BOOST_ARCHIVE_ITERATORS_ISTREAM_ITERATOR_HPP
diff --git a/boost/boost/archive/iterators/mb_from_wchar.hpp b/boost/boost/archive/iterators/mb_from_wchar.hpp
new file mode 100644
index 00000000000..6aea72c4c65
--- /dev/null
+++ b/boost/boost/archive/iterators/mb_from_wchar.hpp
@@ -0,0 +1,136 @@
+#ifndef BOOST_ARCHIVE_ITERATORS_MB_FROM_WCHAR_HPP
+#define BOOST_ARCHIVE_ITERATORS_MB_FROM_WCHAR_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// mb_from_wchar.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <cassert>
+#include <cstddef> // size_t
+#include <cstdlib> // for wctomb()
+
+#include <boost/config.hpp> // for BOOST_DEDUCED_TYPENAME
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::size_t;
+ using ::wctomb;
+} // namespace std
+#endif
+
+#include <boost/pfto.hpp>
+#include <boost/iterator/iterator_adaptor.hpp>
+
+namespace boost {
+namespace archive {
+namespace iterators {
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// class used by text archives to translate wide strings and to char
+// strings of the currently selected locale
+template<class Base> // the input iterator
+class mb_from_wchar
+ : public boost::iterator_adaptor<
+ mb_from_wchar<Base>,
+ Base,
+ wchar_t,
+ single_pass_traversal_tag,
+ char
+ >
+{
+ friend class boost::iterator_core_access;
+
+ typedef BOOST_DEDUCED_TYPENAME boost::iterator_adaptor<
+ mb_from_wchar<Base>,
+ Base,
+ wchar_t,
+ single_pass_traversal_tag,
+ char
+ > super_t;
+
+ typedef mb_from_wchar<Base> this_t;
+
+ char dereference_impl() {
+ if(! m_full){
+ fill();
+ m_full = true;
+ }
+ return m_buffer[m_bnext];
+ }
+ char dereference() const {
+ return (const_cast<this_t *>(this))->dereference_impl();
+ }
+
+ // test for iterator equality
+ bool equal(const mb_from_wchar<Base> & rhs) const {
+ // once the value is filled, the base_reference has been incremented
+ // so don't permit comparison anymore.
+ return
+ 0 == m_bend
+ && 0 == m_bnext
+ && this->base_reference() == rhs.base_reference()
+ ;
+ }
+
+ void fill(){
+ wchar_t value = * this->base_reference();
+ #if (defined(__MINGW32__) && ((__MINGW32_MAJOR_VERSION > 3) \
+ || ((__MINGW32_MAJOR_VERSION == 3) && (__MINGW32_MINOR_VERSION >= 8))))
+ m_bend = std::wcrtomb(m_buffer, value, 0);
+ #else
+ m_bend = std::wctomb(m_buffer, value);
+ #endif
+ assert(-1 != m_bend);
+ assert((std::size_t)m_bend <= sizeof(m_buffer));
+ assert(m_bend > 0);
+ m_bnext = 0;
+ }
+
+ void increment(){
+ if(++m_bnext < m_bend)
+ return;
+ m_bend =
+ m_bnext = 0;
+ ++(this->base_reference());
+ m_full = false;
+ }
+
+ // buffer to handle pending characters
+ int m_bend;
+ int m_bnext;
+ char m_buffer[9];
+ bool m_full;
+
+public:
+ // make composible buy using templated constructor
+ template<class T>
+ mb_from_wchar(BOOST_PFTO_WRAPPER(T) start) :
+ super_t(Base(BOOST_MAKE_PFTO_WRAPPER(static_cast<T>(start)))),
+ m_bend(0),
+ m_bnext(0),
+ m_full(false)
+ {}
+ // intel 7.1 doesn't like default copy constructor
+ mb_from_wchar(const mb_from_wchar & rhs) :
+ super_t(rhs.base_reference()),
+ m_bend(rhs.m_bend),
+ m_bnext(rhs.m_bnext),
+ m_full(rhs.m_full)
+ {}
+};
+
+} // namespace iterators
+} // namespace archive
+} // namespace boost
+
+#endif // BOOST_ARCHIVE_ITERATORS_MB_FROM_WCHAR_HPP
diff --git a/boost/boost/archive/iterators/ostream_iterator.hpp b/boost/boost/archive/iterators/ostream_iterator.hpp
new file mode 100644
index 00000000000..7c3203f1258
--- /dev/null
+++ b/boost/boost/archive/iterators/ostream_iterator.hpp
@@ -0,0 +1,83 @@
+#ifndef BOOST_ARCHIVE_ITERATORS_OSTREAM_ITERATOR_HPP
+#define BOOST_ARCHIVE_ITERATORS_OSTREAM_ITERATOR_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// ostream_iterator.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+// note: this is a custom version of the standard ostream_iterator.
+// This is necessary as the standard version doesn't work as expected
+// for wchar_t based streams on systems for which wchar_t not a true
+// type but rather a synonym for some integer type.
+
+#include <ostream>
+#include <boost/iterator/iterator_facade.hpp>
+
+namespace boost {
+namespace archive {
+namespace iterators {
+
+// given a type, make an input iterator based on a pointer to that type
+template<class Elem>
+class ostream_iterator :
+ public boost::iterator_facade<
+ ostream_iterator<Elem>,
+ Elem,
+ std::output_iterator_tag,
+ ostream_iterator<Elem> &
+ >
+{
+ friend class boost::iterator_core_access;
+ typedef ostream_iterator this_t ;
+ typedef Elem char_type;
+ typedef std::basic_ostream<char_type> ostream_type;
+
+ //emulate the behavior of std::ostream
+ ostream_iterator & dereference() const {
+ return const_cast<ostream_iterator &>(*this);
+ }
+ bool equal(const this_t & rhs) const {
+ return m_ostream == rhs.m_ostream;
+ }
+ void increment(){}
+protected:
+ ostream_type *m_ostream;
+ void put_val(char_type e){
+ if(NULL != m_ostream){
+ m_ostream->put(e);
+ if(! m_ostream->good())
+ m_ostream = NULL;
+ }
+ }
+public:
+ this_t & operator=(char_type c){
+ put_val(c);
+ return *this;
+ }
+ ostream_iterator(ostream_type & os) :
+ m_ostream (& os)
+ {}
+ ostream_iterator() :
+ m_ostream (NULL)
+ {}
+ ostream_iterator(const ostream_iterator & rhs) :
+ m_ostream (rhs.m_ostream)
+ {}
+};
+
+} // namespace iterators
+} // namespace archive
+} // namespace boost
+
+#endif // BOOST_ARCHIVE_ITERATORS_OSTREAM_ITERATOR_HPP
diff --git a/boost/boost/archive/iterators/remove_whitespace.hpp b/boost/boost/archive/iterators/remove_whitespace.hpp
new file mode 100644
index 00000000000..41ae7ea01ff
--- /dev/null
+++ b/boost/boost/archive/iterators/remove_whitespace.hpp
@@ -0,0 +1,169 @@
+#ifndef BOOST_ARCHIVE_ITERATORS_REMOVE_WHITESPACE_HPP
+#define BOOST_ARCHIVE_ITERATORS_REMOVE_WHITESPACE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// binary_from_base64.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <cassert>
+
+#include <boost/config.hpp> // for BOOST_DEDUCED_TYPENAME
+
+#include <boost/pfto.hpp>
+
+#include <boost/iterator/iterator_adaptor.hpp>
+#include <boost/iterator/filter_iterator.hpp>
+
+//#include <boost/detail/workaround.hpp>
+//#if ! BOOST_WORKAROUND(BOOST_MSVC, <=1300)
+
+// here is the default standard implementation of the functor used
+// by the filter iterator to remove spaces. Unfortunately usage
+// of this implementation in combination with spirit trips a bug
+// VC 6.5. The only way I can find to work around it is to
+// implement a special non-standard version for this platform
+
+#ifndef BOOST_NO_CWCTYPE
+#include <cwctype> // iswspace
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{ using ::iswspace; }
+#endif
+#endif
+
+#include <cctype> // isspace
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{ using ::isspace; }
+#endif
+
+#if defined(__STD_RWCOMPILER_H__) || defined(_RWSTD_VER)
+// this is required for the RW STL on Linux and Tru64.
+#undef isspace
+#undef iswspace
+#endif
+
+//#endif // BOOST_WORKAROUND
+
+namespace { // anonymous
+
+template<class CharType>
+struct remove_whitespace_predicate;
+
+template<>
+struct remove_whitespace_predicate<char>
+{
+ bool operator()(unsigned char t){
+ return ! std::isspace(t);
+ }
+};
+
+#ifndef BOOST_NO_CWCHAR
+template<>
+struct remove_whitespace_predicate<wchar_t>
+{
+ bool operator()(wchar_t t){
+ return ! std::iswspace(t);
+ }
+};
+#endif
+
+} // namespace anonymous
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// convert base64 file data (including whitespace and padding) to binary
+
+namespace boost {
+namespace archive {
+namespace iterators {
+
+// custom version of filter iterator which doesn't look ahead further than
+// necessary
+
+template<class Predicate, class Base>
+class filter_iterator
+ : public boost::iterator_adaptor<
+ filter_iterator<Predicate, Base>,
+ Base,
+ use_default,
+ single_pass_traversal_tag
+ >
+{
+ friend class boost::iterator_core_access;
+ typedef BOOST_DEDUCED_TYPENAME boost::iterator_adaptor<
+ filter_iterator<Predicate, Base>,
+ Base,
+ use_default,
+ single_pass_traversal_tag
+ > super_t;
+ typedef filter_iterator<Predicate, Base> this_t;
+ typedef BOOST_DEDUCED_TYPENAME super_t::reference reference_type;
+
+ reference_type dereference_impl(){
+ if(! m_full){
+ while(! m_predicate(* this->base_reference()))
+ ++(this->base_reference());
+ m_full = true;
+ }
+ return * this->base_reference();
+ }
+
+ reference_type dereference() const {
+ return const_cast<this_t *>(this)->dereference_impl();
+ }
+
+ Predicate m_predicate;
+ bool m_full;
+public:
+ // note: this function is public only because comeau compiler complained
+ // I don't know if this is because the compiler is wrong or what
+ void increment(){
+ m_full = false;
+ ++(this->base_reference());
+ }
+ filter_iterator(Base start) :
+ super_t(start),
+ m_full(false)
+ {}
+ filter_iterator(){}
+};
+
+template<class Base>
+class remove_whitespace :
+ public filter_iterator<
+ remove_whitespace_predicate<BOOST_DEDUCED_TYPENAME Base::value_type>,
+ Base
+ >
+{
+ friend class boost::iterator_core_access;
+ typedef filter_iterator<
+ remove_whitespace_predicate<BOOST_DEDUCED_TYPENAME Base::value_type>,
+ Base
+ > super_t;
+public:
+// remove_whitespace(){} // why is this needed?
+ // make composible buy using templated constructor
+ template<class T>
+ remove_whitespace(BOOST_PFTO_WRAPPER(T) start) :
+ super_t(Base(BOOST_MAKE_PFTO_WRAPPER(static_cast<T>(start))))
+ {}
+ // intel 7.1 doesn't like default copy constructor
+ remove_whitespace(const remove_whitespace & rhs) :
+ super_t(rhs.base_reference())
+ {}
+};
+
+} // namespace iterators
+} // namespace archive
+} // namespace boost
+
+#endif // BOOST_ARCHIVE_ITERATORS_REMOVE_WHITESPACE_HPP
diff --git a/boost/boost/archive/iterators/transform_width.hpp b/boost/boost/archive/iterators/transform_width.hpp
new file mode 100644
index 00000000000..3741a08afb7
--- /dev/null
+++ b/boost/boost/archive/iterators/transform_width.hpp
@@ -0,0 +1,168 @@
+#ifndef BOOST_ARCHIVE_ITERATORS_TRANSFORM_WIDTH_HPP
+#define BOOST_ARCHIVE_ITERATORS_TRANSFORM_WIDTH_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// transform_width.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+// iterator which takes elements of x bits and returns elements of y bits.
+// used to change streams of 8 bit characters into streams of 6 bit characters.
+// and vice-versa for implementing base64 encodeing/decoding. Be very careful
+// when using and end iterator. end is only reliable detected when the input
+// stream length is some common multiple of x and y. E.G. Base64 6 bit
+// character and 8 bit bytes. Lowest common multiple is 24 => 4 6 bit characters
+// or 3 8 bit characters
+
+#include <boost/config.hpp> // for BOOST_DEDUCED_TYPENAME & PTFO
+#include <boost/pfto.hpp>
+
+#include <boost/iterator/iterator_adaptor.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+
+namespace boost {
+namespace archive {
+namespace iterators {
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// class used by text archives to translate char strings to wchar_t
+// strings of the currently selected locale
+template<
+ class Base,
+ int BitsOut,
+ int BitsIn,
+ class CharType = BOOST_DEDUCED_TYPENAME boost::iterator_value<Base>::type // output character
+>
+class transform_width :
+ public boost::iterator_adaptor<
+ transform_width<Base, BitsOut, BitsIn, CharType>,
+ Base,
+ CharType,
+ single_pass_traversal_tag,
+ CharType
+ >
+{
+ friend class boost::iterator_core_access;
+ typedef BOOST_DEDUCED_TYPENAME boost::iterator_adaptor<
+ transform_width<Base, BitsOut, BitsIn, CharType>,
+ Base,
+ CharType,
+ single_pass_traversal_tag,
+ CharType
+ > super_t;
+
+ typedef transform_width<Base, BitsOut, BitsIn, CharType> this_t;
+ typedef BOOST_DEDUCED_TYPENAME iterator_value<Base>::type base_value_type;
+
+ CharType fill();
+
+ CharType dereference_impl(){
+ if(! m_full){
+ m_current_value = fill();
+ m_full = true;
+ }
+ return m_current_value;
+ }
+
+ CharType dereference() const {
+ return const_cast<this_t *>(this)->dereference_impl();
+ }
+
+ // test for iterator equality
+ bool equal(const this_t & rhs) const {
+ return
+ this->base_reference() == rhs.base_reference();
+ ;
+ }
+
+ void increment(){
+ m_displacement += BitsOut;
+
+ while(m_displacement >= BitsIn){
+ m_displacement -= BitsIn;
+ if(0 == m_displacement)
+ m_bufferfull = false;
+ if(! m_bufferfull){
+ // note: suspect that this is not invoked for borland
+ ++(this->base_reference());
+ }
+ }
+ m_full = false;
+ }
+
+ CharType m_current_value;
+ // number of bits left in current input character buffer
+ unsigned int m_displacement;
+ base_value_type m_buffer;
+ // flag to current output character is ready - just used to save time
+ bool m_full;
+ // flag to indicate that m_buffer has data
+ bool m_bufferfull;
+
+public:
+ // make composible buy using templated constructor
+ template<class T>
+ transform_width(BOOST_PFTO_WRAPPER(T) start) :
+ super_t(Base(BOOST_MAKE_PFTO_WRAPPER(static_cast<T>(start)))),
+ m_displacement(0),
+ m_full(false),
+ m_bufferfull(false)
+ {}
+ // intel 7.1 doesn't like default copy constructor
+ transform_width(const transform_width & rhs) :
+ super_t(rhs.base_reference()),
+ m_current_value(rhs.m_current_value),
+ m_displacement(rhs.m_displacement),
+ m_buffer(rhs.m_buffer),
+ m_full(rhs.m_full),
+ m_bufferfull(rhs.m_bufferfull)
+ {}
+};
+
+template<class Base, int BitsOut, int BitsIn, class CharType>
+CharType transform_width<Base, BitsOut, BitsIn, CharType>::fill(){
+ CharType retval = 0;
+ unsigned int missing_bits = BitsOut;
+ for(;;){
+ unsigned int bcount;
+ if(! m_bufferfull){
+ m_buffer = * this->base_reference();
+ m_bufferfull = true;
+ bcount = BitsIn;
+ }
+ else
+ bcount = BitsIn - m_displacement;
+ unsigned int i = (std::min)(bcount, missing_bits);
+ // shift interesting bits to least significant position
+ unsigned int j = m_buffer >> (bcount - i);
+ // strip off uninteresting bits
+ // (note presumption of two's complement arithmetic)
+ j &= ~(-(1 << i));
+ // append then interesting bits to the output value
+ retval <<= i;
+ retval |= j;
+ missing_bits -= i;
+ if(0 == missing_bits)
+ break;
+ // note: suspect that this is not invoked for borland 5.51
+ ++(this->base_reference());
+ m_bufferfull = false;
+ }
+ return retval;
+}
+
+} // namespace iterators
+} // namespace archive
+} // namespace boost
+
+#endif // BOOST_ARCHIVE_ITERATORS_TRANSFORM_WIDTH_HPP
diff --git a/boost/boost/archive/iterators/unescape.hpp b/boost/boost/archive/iterators/unescape.hpp
new file mode 100644
index 00000000000..e709138181e
--- /dev/null
+++ b/boost/boost/archive/iterators/unescape.hpp
@@ -0,0 +1,94 @@
+#ifndef BOOST_ARCHIVE_ITERATORS_UNESCAPE_HPP
+#define BOOST_ARCHIVE_ITERATORS_UNESCAPE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// unescape.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <cassert>
+
+#include <boost/config.hpp> // for BOOST_DEDUCED_TYPENAME
+#include <boost/iterator/iterator_adaptor.hpp>
+//#include <boost/iterator/iterator_traits.hpp>
+#include <boost/pointee.hpp>
+
+namespace boost {
+namespace archive {
+namespace iterators {
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// class used by text archives to translate char strings to wchar_t
+// strings of the currently selected locale
+template<class Derived, class Base>
+class unescape
+ : public boost::iterator_adaptor<
+ unescape<Derived, Base>,
+ Base,
+ BOOST_DEDUCED_TYPENAME pointee<Base>::type,
+ single_pass_traversal_tag,
+ BOOST_DEDUCED_TYPENAME pointee<Base>::type
+ >
+{
+ friend class boost::iterator_core_access;
+ typedef BOOST_DEDUCED_TYPENAME boost::iterator_adaptor<
+ unescape<Derived, Base>,
+ Base,
+ BOOST_DEDUCED_TYPENAME pointee<Base>::type,
+ single_pass_traversal_tag,
+ BOOST_DEDUCED_TYPENAME pointee<Base>::type
+ > super_t;
+
+ typedef unescape<Derived, Base> this_t;
+ typedef BOOST_DEDUCED_TYPENAME super_t::reference reference_type;
+public:
+ // gcc 3.4.1 - linux required that this be public
+ typedef BOOST_DEDUCED_TYPENAME super_t::value_type value_type;
+private:
+
+ reference_type dereference_impl() {
+ if(! m_full){
+ m_current_value = static_cast<Derived *>(this)->drain();
+ m_full = true;
+ }
+ return m_current_value;
+ }
+
+ reference_type dereference() const {
+ return const_cast<this_t *>(this)->dereference_impl();
+ }
+
+ // value_type is const char - can't be const fix later
+ value_type m_current_value;
+ bool m_full;
+
+ void increment(){
+ ++(this->base_reference());
+ dereference_impl();
+ m_full = false;
+ };
+
+public:
+
+ unescape(Base base) :
+ super_t(base),
+ m_full(false)
+ {}
+
+};
+
+} // namespace iterators
+} // namespace archive
+} // namespace boost
+
+#endif // BOOST_ARCHIVE_ITERATORS_UNESCAPE_HPP
diff --git a/boost/boost/archive/iterators/wchar_from_mb.hpp b/boost/boost/archive/iterators/wchar_from_mb.hpp
new file mode 100644
index 00000000000..efd65419852
--- /dev/null
+++ b/boost/boost/archive/iterators/wchar_from_mb.hpp
@@ -0,0 +1,129 @@
+#ifndef BOOST_ARCHIVE_ITERATORS_WCHAR_FROM_MB_HPP
+#define BOOST_ARCHIVE_ITERATORS_WCHAR_FROM_MB_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// wchar_from_mb.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <cassert>
+#include <cctype>
+#include <cstddef> // size_t
+#include <cstdlib> // mblen
+
+#include <boost/config.hpp> // for BOOST_DEDUCED_TYPENAME
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::mblen;
+ using ::mbtowc;
+} // namespace std
+#endif
+
+#include <boost/throw_exception.hpp>
+#include <boost/pfto.hpp>
+
+#include <boost/iterator/iterator_adaptor.hpp>
+#include <boost/archive/iterators/dataflow_exception.hpp>
+
+namespace boost {
+namespace archive {
+namespace iterators {
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// class used by text archives to translate char strings to wchar_t
+// strings of the currently selected locale
+template<class Base>
+class wchar_from_mb
+ : public boost::iterator_adaptor<
+ wchar_from_mb<Base>,
+ Base,
+ wchar_t,
+ single_pass_traversal_tag,
+ wchar_t
+ >
+{
+ friend class boost::iterator_core_access;
+ typedef BOOST_DEDUCED_TYPENAME boost::iterator_adaptor<
+ wchar_from_mb<Base>,
+ Base,
+ wchar_t,
+ single_pass_traversal_tag,
+ wchar_t
+ > super_t;
+
+ typedef wchar_from_mb<Base> this_t;
+
+ wchar_t drain();
+
+ wchar_t dereference_impl() {
+ if(! m_full){
+ m_current_value = drain();
+ m_full = true;
+ }
+ return m_current_value;
+ }
+
+ wchar_t dereference() const {
+ return const_cast<this_t *>(this)->dereference_impl();
+ }
+
+ void increment(){
+ dereference_impl();
+ m_full = false;
+ ++(this->base_reference());
+ };
+
+ wchar_t m_current_value;
+ bool m_full;
+
+public:
+ // make composible buy using templated constructor
+ template<class T>
+ wchar_from_mb(BOOST_PFTO_WRAPPER(T) start) :
+ super_t(Base(BOOST_MAKE_PFTO_WRAPPER(static_cast<T>(start)))),
+ m_full(false)
+ {}
+ // intel 7.1 doesn't like default copy constructor
+ wchar_from_mb(const wchar_from_mb & rhs) :
+ super_t(rhs.base_reference()),
+ m_full(rhs.m_full)
+ {}
+};
+
+template<class Base>
+wchar_t wchar_from_mb<Base>::drain(){
+ char buffer[9];
+ char * bptr = buffer;
+ char val;
+ for(std::size_t i = 0; i++ < (unsigned)MB_CUR_MAX;){
+ val = * this->base_reference();
+ *bptr++ = val;
+ int result = std::mblen(buffer, i);
+ if(-1 != result)
+ break;
+ ++(this->base_reference());
+ }
+ wchar_t retval;
+ int result = std::mbtowc(& retval, buffer, MB_CUR_MAX);
+ if(0 >= result)
+ boost::throw_exception(iterators::dataflow_exception(
+ iterators::dataflow_exception::invalid_conversion
+ ));
+ return retval;
+}
+
+} // namespace iterators
+} // namespace archive
+} // namespace boost
+
+#endif // BOOST_ARCHIVE_ITERATORS_WCHAR_FROM_MB_HPP
diff --git a/boost/boost/archive/iterators/xml_escape.hpp b/boost/boost/archive/iterators/xml_escape.hpp
new file mode 100644
index 00000000000..f1a461c49fa
--- /dev/null
+++ b/boost/boost/archive/iterators/xml_escape.hpp
@@ -0,0 +1,125 @@
+#ifndef BOOST_ARCHIVE_ITERATORS_XML_ESCAPE_HPP
+#define BOOST_ARCHIVE_ITERATORS_XML_ESCAPE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// xml_escape.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <cassert>
+
+#include <boost/config.hpp> // for BOOST_DEDUCED_TYPENAME
+#include <boost/pfto.hpp>
+
+#include <boost/archive/iterators/escape.hpp>
+
+namespace boost {
+namespace archive {
+namespace iterators {
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// insert escapes into xml text
+
+template<class Base>
+class xml_escape
+ : public escape<xml_escape<Base>, Base>
+{
+ friend class boost::iterator_core_access;
+
+ typedef escape<xml_escape<Base>, Base> super_t;
+
+public:
+ char fill(const char * & bstart, const char * & bend);
+ wchar_t fill(const wchar_t * & bstart, const wchar_t * & bend);
+
+ template<class T>
+ xml_escape(BOOST_PFTO_WRAPPER(T) start) :
+ super_t(Base(BOOST_MAKE_PFTO_WRAPPER(static_cast<T>(start))))
+ {}
+ // intel 7.1 doesn't like default copy constructor
+ xml_escape(const xml_escape & rhs) :
+ super_t(rhs.base_reference())
+ {}
+};
+
+template<class Base>
+char xml_escape<Base>::fill(
+ const char * & bstart,
+ const char * & bend
+){
+ char current_value = * this->base_reference();
+ switch(current_value){
+ case '<':
+ bstart = "&lt;";
+ bend = bstart + 4;
+ break;
+ case '>':
+ bstart = "&gt;";
+ bend = bstart + 4;
+ break;
+ case '&':
+ bstart = "&amp;";
+ bend = bstart + 5;
+ break;
+ case '"':
+ bstart = "&quot;";
+ bend = bstart + 6;
+ break;
+ case '\'':
+ bstart = "&apos;";
+ bend = bstart + 6;
+ break;
+ default:
+ return current_value;
+ }
+ return *bstart;
+}
+
+template<class Base>
+wchar_t xml_escape<Base>::fill(
+ const wchar_t * & bstart,
+ const wchar_t * & bend
+){
+ wchar_t current_value = * this->base_reference();
+ switch(current_value){
+ case '<':
+ bstart = L"&lt;";
+ bend = bstart + 4;
+ break;
+ case '>':
+ bstart = L"&gt;";
+ bend = bstart + 4;
+ break;
+ case '&':
+ bstart = L"&amp;";
+ bend = bstart + 5;
+ break;
+ case '"':
+ bstart = L"&quot;";
+ bend = bstart + 6;
+ break;
+ case '\'':
+ bstart = L"&apos;";
+ bend = bstart + 6;
+ break;
+ default:
+ return current_value;
+ }
+ return *bstart;
+}
+
+} // namespace iterators
+} // namespace archive
+} // namespace boost
+
+#endif // BOOST_ARCHIVE_ITERATORS_XML_ESCAPE_HPP
diff --git a/boost/boost/archive/iterators/xml_unescape.hpp b/boost/boost/archive/iterators/xml_unescape.hpp
new file mode 100644
index 00000000000..ad18d86ff0e
--- /dev/null
+++ b/boost/boost/archive/iterators/xml_unescape.hpp
@@ -0,0 +1,118 @@
+#ifndef BOOST_ARCHIVE_ITERATORS_XML_UNESCAPE_HPP
+#define BOOST_ARCHIVE_ITERATORS_XML_UNESCAPE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// xml_unescape.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <cassert>
+
+#include <boost/config.hpp> // for BOOST_DEDUCED_TYPENAME
+#include <boost/throw_exception.hpp>
+#include <boost/pfto.hpp>
+
+#include <boost/archive/iterators/unescape.hpp>
+#include <boost/archive/iterators/dataflow_exception.hpp>
+
+namespace boost {
+namespace archive {
+namespace iterators {
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// replace &??? xml escape sequences with the corresponding characters
+template<class Base>
+class xml_unescape
+ : public unescape<xml_unescape<Base>, Base>
+{
+ friend class boost::iterator_core_access;
+ typedef xml_unescape<Base> this_t;
+ typedef unescape<this_t, Base> super_t;
+ typedef BOOST_DEDUCED_TYPENAME boost::iterator_reference<this_t> reference_type;
+
+ reference_type dereference() const {
+ return unescape<xml_unescape<Base>, Base>::dereference();
+ }
+public:
+ void drain_residue(const char *literal);
+ int drain();
+
+ template<class T>
+ xml_unescape(BOOST_PFTO_WRAPPER(T) start) :
+ super_t(Base(BOOST_MAKE_PFTO_WRAPPER(static_cast<T>(start))))
+ {}
+ // intel 7.1 doesn't like default copy constructor
+ xml_unescape(const xml_unescape & rhs) :
+ super_t(rhs.base_reference())
+ {}
+};
+
+template<class Base>
+void xml_unescape<Base>::drain_residue(const char * literal){
+ do{
+ if(* literal != * ++(this->base_reference()))
+ boost::throw_exception(
+ dataflow_exception(
+ dataflow_exception::invalid_xml_escape_sequence
+ )
+ );
+ }
+ while('\0' != * ++literal);
+}
+
+// note key constraint on this function is that can't "look ahead" any
+// more than necessary into base iterator. Doing so would alter the base
+// iterator refenence which would make subsequent iterator comparisons
+// incorrect and thereby break the composiblity of iterators.
+template<class Base>
+int xml_unescape<Base>::drain(){
+ int retval = * this->base_reference();
+ if('&' != retval){
+ return retval;
+ }
+ retval = * ++(this->base_reference());
+ switch(retval){
+ case 'l': // &lt;
+ drain_residue("t;");
+ retval = '<';
+ break;
+ case 'g': // &gt;
+ drain_residue("t;");
+ retval = '>';
+ break;
+ case 'a':
+ retval = * ++(this->base_reference());
+ switch(retval){
+ case 'p': // &apos;
+ drain_residue("os;");
+ retval = '\'';
+ break;
+ case 'm': // &amp;
+ drain_residue("p;");
+ retval = '&';
+ break;
+ }
+ break;
+ case 'q':
+ drain_residue("uot;");
+ retval = '"';
+ break;
+ }
+ return retval;
+}
+
+} // namespace iterators
+} // namespace archive
+} // namespace boost
+
+#endif // BOOST_ARCHIVE_ITERATORS_XML_UNESCAPE_HPP
diff --git a/boost/boost/archive/iterators/xml_unescape_exception.hpp b/boost/boost/archive/iterators/xml_unescape_exception.hpp
new file mode 100644
index 00000000000..a141737347c
--- /dev/null
+++ b/boost/boost/archive/iterators/xml_unescape_exception.hpp
@@ -0,0 +1,49 @@
+#ifndef BOOST_ARCHIVE_ITERATORS_XML_UNESCAPE_EXCEPTION_HPP
+#define BOOST_ARCHIVE_ITERATORS_XML_UNESCAPE_EXCEPTION_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// xml_unescape_exception.hpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+#ifndef BOOST_NO_EXCEPTIONS
+#include <exception>
+
+#include <cassert>
+
+namespace boost {
+namespace archive {
+namespace iterators {
+
+//////////////////////////////////////////////////////////////////////
+// exceptions thrown by xml_unescapes
+//
+class xml_unescape_exception : public std::exception
+{
+public:
+ xml_unescape_exception()
+ {}
+
+ virtual const char *what( ) const throw( )
+ {
+ return "xml contained un-recognized escape code";
+ }
+};
+
+} // namespace iterators
+} // namespace archive
+} // namespace boost
+
+#endif //BOOST_NO_EXCEPTIONS
+#endif //BOOST_ARCHIVE_ITERATORS_XML_UNESCAPE_EXCEPTION_HPP
diff --git a/boost/boost/archive/polymorphic_binary_iarchive.hpp b/boost/boost/archive/polymorphic_binary_iarchive.hpp
new file mode 100644
index 00000000000..1ce80cfe24c
--- /dev/null
+++ b/boost/boost/archive/polymorphic_binary_iarchive.hpp
@@ -0,0 +1,42 @@
+#ifndef BOOST_ARCHIVE_POLYMORPHIC_BINARY_IARCHIVE_HPP
+#define BOOST_ARCHIVE_POLYMORPHIC_BINARY_IARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// polymorphic_binary_iarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+#include <boost/archive/binary_iarchive.hpp>
+#include <boost/archive/detail/polymorphic_iarchive_impl.hpp>
+
+namespace boost {
+namespace archive {
+
+typedef detail::polymorphic_iarchive_impl<
+ binary_iarchive_impl<
+ binary_iarchive, std::istream::char_type, std::istream::traits_type
+ >
+> polymorphic_binary_iarchive;
+
+} // namespace archive
+} // namespace boost
+
+// required by smart_cast for compilers not implementing
+// partial template specialization
+BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(
+ boost::archive::polymorphic_binary_iarchive
+)
+
+#endif // BOOST_ARCHIVE_POLYMORPHIC_BINARY_IARCHIVE_HPP
+
diff --git a/boost/boost/archive/polymorphic_binary_oarchive.hpp b/boost/boost/archive/polymorphic_binary_oarchive.hpp
new file mode 100644
index 00000000000..1c5254035b0
--- /dev/null
+++ b/boost/boost/archive/polymorphic_binary_oarchive.hpp
@@ -0,0 +1,42 @@
+#ifndef BOOST_ARCHIVE_POLYMORPHIC_BINARY_OARCHIVE_HPP
+#define BOOST_ARCHIVE_POLYMORPHIC_BINARY_OARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// polymorphic_binary_oarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+#include <boost/archive/binary_oarchive.hpp>
+#include <boost/archive/detail/polymorphic_oarchive_impl.hpp>
+
+namespace boost {
+namespace archive {
+
+typedef detail::polymorphic_oarchive_impl<
+ binary_oarchive_impl<
+ binary_oarchive, std::ostream::char_type, std::ostream::traits_type
+ >
+ > polymorphic_binary_oarchive;
+
+} // namespace archive
+} // namespace boost
+
+// required by smart_cast for compilers not implementing
+// partial template specialization
+BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(
+ boost::archive::polymorphic_binary_oarchive
+)
+
+#endif // BOOST_ARCHIVE_POLYMORPHIC_BINARY_OARCHIVE_HPP
+
diff --git a/boost/boost/archive/polymorphic_iarchive.hpp b/boost/boost/archive/polymorphic_iarchive.hpp
new file mode 100644
index 00000000000..330d42f4ba8
--- /dev/null
+++ b/boost/boost/archive/polymorphic_iarchive.hpp
@@ -0,0 +1,164 @@
+#ifndef BOOST_ARCHIVE_POLYMORPHIC_IARCHIVE_HPP
+#define BOOST_ARCHIVE_POLYMORPHIC_IARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// polymorphic_iarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <cstddef> // std::size_t
+#include <boost/config.hpp>
+
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::size_t;
+} // namespace std
+#endif
+
+#include <string>
+#include <boost/cstdint.hpp>
+
+#include <boost/pfto.hpp>
+#include <boost/archive/detail/iserializer.hpp>
+#include <boost/archive/detail/interface_iarchive.hpp>
+#include <boost/serialization/nvp.hpp>
+
+// determine if its necessary to handle (u)int64_t specifically
+// i.e. that its not a synonym for (unsigned) long
+// if there is no 64 bit int or if its the same as a long
+// we shouldn't define separate functions for int64 data types.
+#if defined(BOOST_NO_INT64_T) \
+ || (ULONG_MAX != 0xffffffff && ULONG_MAX == 18446744073709551615u) // 2**64 - 1
+# define BOOST_NO_INTRINSIC_INT64_T
+#endif
+
+namespace boost {
+template<class T>
+class shared_ptr;
+namespace serialization {
+ class extended_type_info;
+} // namespace serialization
+namespace archive {
+namespace detail {
+ class basic_iarchive;
+ class basic_iserializer;
+}
+
+class polymorphic_iarchive :
+ public detail::interface_iarchive<polymorphic_iarchive>
+{
+#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+public:
+#else
+ friend class detail::interface_iarchive<polymorphic_iarchive>;
+ friend class load_access;
+#endif
+ // primitive types the only ones permitted by polymorphic archives
+ virtual void load(bool & t) = 0;
+
+ virtual void load(char & t) = 0;
+ virtual void load(signed char & t) = 0;
+ virtual void load(unsigned char & t) = 0;
+ #ifndef BOOST_NO_CWCHAR
+ #ifndef BOOST_NO_INTRINSIC_WCHAR_T
+ virtual void load(wchar_t & t) = 0;
+ #endif
+ #endif
+ virtual void load(short & t) = 0;
+ virtual void load(unsigned short & t) = 0;
+ virtual void load(int & t) = 0;
+ virtual void load(unsigned int & t) = 0;
+ virtual void load(long & t) = 0;
+ virtual void load(unsigned long & t) = 0;
+
+ #if !defined(BOOST_NO_INTRINSIC_INT64_T)
+ virtual void load(boost::int64_t & t) = 0;
+ virtual void load(boost::uint64_t & t) = 0;
+ #endif
+ virtual void load(float & t) = 0;
+ virtual void load(double & t) = 0;
+
+ // string types are treated as primitives
+ virtual void load(std::string & t) = 0;
+ #ifndef BOOST_NO_STD_WSTRING
+ virtual void load(std::wstring & t) = 0;
+ #endif
+
+ // used for xml and other tagged formats
+ virtual void load_start(const char * name) = 0;
+ virtual void load_end(const char * name) = 0;
+ virtual void register_basic_serializer(const detail::basic_iserializer & bis) = 0;
+ virtual void lookup_basic_helper(
+ const boost::serialization::extended_type_info * const eti,
+ boost::shared_ptr<void> & sph
+ ) = 0;
+ virtual void insert_basic_helper(
+ const boost::serialization::extended_type_info * const eti,
+ boost::shared_ptr<void> & sph
+ ) = 0;
+
+ // msvc and borland won't automatically pass these to the base class so
+ // make it explicit here
+ template<class T>
+ void load_override(T & t, BOOST_PFTO int)
+ {
+ archive::load(* this, t);
+ }
+ // special treatment for name-value pairs.
+ template<class T>
+ void load_override(
+ #ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+ const
+ #endif
+ boost::serialization::nvp<T> & t,
+ int
+ ){
+ load_start(t.name());
+ archive::load(* this, t.value());
+ load_end(t.name());
+ }
+public:
+ // utility function implemented by all legal archives
+ virtual void set_library_version(unsigned int archive_library_version) = 0;
+ virtual unsigned int get_library_version() const = 0;
+ virtual unsigned int get_flags() const = 0;
+ virtual void delete_created_pointers() = 0;
+ virtual void reset_object_address(
+ const void * new_address,
+ const void * old_address
+ ) = 0;
+
+ virtual void load_binary(void * t, std::size_t size) = 0;
+
+ // these are used by the serialization library implementation.
+ virtual void load_object(
+ void *t,
+ const detail::basic_iserializer & bis
+ ) = 0;
+ virtual const detail::basic_pointer_iserializer * load_pointer(
+ void * & t,
+ const detail::basic_pointer_iserializer * bpis_ptr,
+ const detail::basic_pointer_iserializer * (*finder)(
+ const boost::serialization::extended_type_info & type
+ )
+ ) = 0;
+};
+
+} // namespace archive
+} // namespace boost
+
+// required by smart_cast for compilers not implementing
+// partial template specialization
+BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(boost::archive::polymorphic_iarchive)
+
+#endif // BOOST_ARCHIVE_POLYMORPHIC_IARCHIVE_HPP
diff --git a/boost/boost/archive/polymorphic_oarchive.hpp b/boost/boost/archive/polymorphic_oarchive.hpp
new file mode 100644
index 00000000000..f3ca3857e9d
--- /dev/null
+++ b/boost/boost/archive/polymorphic_oarchive.hpp
@@ -0,0 +1,153 @@
+#ifndef BOOST_ARCHIVE_POLYMORPHIC_OARCHIVE_HPP
+#define BOOST_ARCHIVE_POLYMORPHIC_OARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// polymorphic_oarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <cstddef> // size_t
+#include <string>
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::size_t;
+} // namespace std
+#endif
+
+#include <boost/cstdint.hpp>
+#include <boost/pfto.hpp>
+#include <boost/archive/detail/oserializer.hpp>
+#include <boost/archive/detail/interface_oarchive.hpp>
+#include <boost/serialization/nvp.hpp>
+
+// determine if its necessary to handle (u)int64_t specifically
+// i.e. that its not a synonym for (unsigned) long
+// if there is no 64 bit int or if its the same as a long
+// we shouldn't define separate functions for int64 data types.
+#if defined(BOOST_NO_INT64_T) \
+ || (ULONG_MAX != 0xffffffff && ULONG_MAX == 18446744073709551615u) // 2**64 - 1
+# define BOOST_NO_INTRINSIC_INT64_T
+#endif
+
+namespace boost {
+template<class T>
+class shared_ptr;
+namespace serialization {
+ class extended_type_info;
+} // namespace serialization
+namespace archive {
+namespace detail {
+ class basic_oarchive;
+ class basic_oserializer;
+}
+
+class polymorphic_oarchive :
+ public detail::interface_oarchive<polymorphic_oarchive>
+{
+#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+public:
+#else
+ friend class detail::interface_oarchive<polymorphic_oarchive>;
+ friend class save_access;
+#endif
+ // primitive types the only ones permitted by polymorphic archives
+ virtual void save(const bool t) = 0;
+
+ virtual void save(const char t) = 0;
+ virtual void save(const signed char t) = 0;
+ virtual void save(const unsigned char t) = 0;
+ #ifndef BOOST_NO_CWCHAR
+ #ifndef BOOST_NO_INTRINSIC_WCHAR_T
+ virtual void save(const wchar_t t) = 0;
+ #endif
+ #endif
+ virtual void save(const short t) = 0;
+ virtual void save(const unsigned short t) = 0;
+ virtual void save(const int t) = 0;
+ virtual void save(const unsigned int t) = 0;
+ virtual void save(const long t) = 0;
+ virtual void save(const unsigned long t) = 0;
+ #if !defined(BOOST_NO_INTRINSIC_INT64_T)
+ virtual void save(const boost::int64_t t) = 0;
+ virtual void save(const boost::uint64_t t) = 0;
+ #endif
+ virtual void save(const float t) = 0;
+ virtual void save(const double t) = 0;
+
+ // string types are treated as primitives
+ virtual void save(const std::string & t) = 0;
+ #ifndef BOOST_NO_STD_WSTRING
+ virtual void save(const std::wstring & t) = 0;
+ #endif
+
+ virtual void save_null_pointer() = 0;
+ // used for xml and other tagged formats
+ virtual void save_start(const char * name) = 0;
+ virtual void save_end(const char * name) = 0;
+ virtual void register_basic_serializer(const detail::basic_oserializer & bos) = 0;
+ virtual void lookup_basic_helper(
+ const boost::serialization::extended_type_info * const eti,
+ boost::shared_ptr<void> & sph
+ ) = 0;
+ virtual void insert_basic_helper(
+ const boost::serialization::extended_type_info * const eti,
+ shared_ptr<void> & sph
+ ) = 0;
+
+ virtual void end_preamble() = 0;
+
+ // msvc and borland won't automatically pass these to the base class so
+ // make it explicit here
+ template<class T>
+ void save_override(T & t, BOOST_PFTO int)
+ {
+ archive::save(* this, t);
+ }
+ // special treatment for name-value pairs.
+ template<class T>
+ void save_override(
+ #ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+ const
+ #endif
+ ::boost::serialization::nvp<T> & t, int
+ ){
+ save_start(t.name());
+ archive::save(* this, t.const_value());
+ save_end(t.name());
+ }
+public:
+ // utility functions implemented by all legal archives
+ virtual unsigned int get_flags() const = 0;
+ virtual unsigned int get_library_version() const = 0;
+ virtual void save_binary(const void * t, std::size_t size) = 0;
+
+ virtual void save_object(
+ const void *x,
+ const detail::basic_oserializer & bos
+ ) = 0;
+ virtual void save_pointer(
+ const void * t,
+ const detail::basic_pointer_oserializer * bpos_ptr
+ ) = 0;
+};
+
+} // namespace archive
+} // namespace boost
+
+// required by smart_cast for compilers not implementing
+// partial template specialization
+BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(boost::archive::polymorphic_oarchive)
+
+#endif // BOOST_ARCHIVE_POLYMORPHIC_OARCHIVE_HPP
diff --git a/boost/boost/archive/polymorphic_text_iarchive.hpp b/boost/boost/archive/polymorphic_text_iarchive.hpp
new file mode 100644
index 00000000000..c63fd418ea6
--- /dev/null
+++ b/boost/boost/archive/polymorphic_text_iarchive.hpp
@@ -0,0 +1,40 @@
+#ifndef BOOST_ARCHIVE_POLYMORPHIC_TEXT_IARCHIVE_HPP
+#define BOOST_ARCHIVE_POLYMORPHIC_TEXT_IARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// polymorphic_text_iarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+#include <boost/archive/text_iarchive.hpp>
+#include <boost/archive/detail/polymorphic_iarchive_impl.hpp>
+
+namespace boost {
+namespace archive {
+
+typedef detail::polymorphic_iarchive_impl<
+ text_iarchive_impl<text_iarchive>
+> polymorphic_text_iarchive;
+
+} // namespace archive
+} // namespace boost
+
+// required by smart_cast for compilers not implementing
+// partial template specialization
+BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(
+ boost::archive::polymorphic_text_iarchive
+)
+
+#endif // BOOST_ARCHIVE_POLYMORPHIC_TEXT_IARCHIVE_HPP
+
diff --git a/boost/boost/archive/polymorphic_text_oarchive.hpp b/boost/boost/archive/polymorphic_text_oarchive.hpp
new file mode 100644
index 00000000000..2cfe4679bb3
--- /dev/null
+++ b/boost/boost/archive/polymorphic_text_oarchive.hpp
@@ -0,0 +1,40 @@
+#ifndef BOOST_ARCHIVE_POLYMORPHIC_TEXT_OARCHIVE_HPP
+#define BOOST_ARCHIVE_POLYMORPHIC_TEXT_OARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// polymorphic_text_oarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+#include <boost/archive/text_oarchive.hpp>
+#include <boost/archive/detail/polymorphic_oarchive_impl.hpp>
+
+namespace boost {
+namespace archive {
+
+typedef detail::polymorphic_oarchive_impl<
+ text_oarchive_impl<text_oarchive>
+> polymorphic_text_oarchive;
+
+} // namespace archive
+} // namespace boost
+
+// required by smart_cast for compilers not implementing
+// partial template specialization
+BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(
+ boost::archive::polymorphic_text_oarchive
+)
+
+#endif // BOOST_ARCHIVE_POLYMORPHIC_TEXT_OARCHIVE_HPP
+
diff --git a/boost/boost/archive/polymorphic_text_wiarchive.hpp b/boost/boost/archive/polymorphic_text_wiarchive.hpp
new file mode 100644
index 00000000000..cb216b17113
--- /dev/null
+++ b/boost/boost/archive/polymorphic_text_wiarchive.hpp
@@ -0,0 +1,45 @@
+#ifndef BOOST_ARCHIVE_POLYMORPHIC_TEXT_WIARCHIVE_HPP
+#define BOOST_ARCHIVE_POLYMORPHIC_TEXT_WIARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// polymorphic_text_wiarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+#ifdef BOOST_NO_STD_WSTREAMBUF
+#error "wide char i/o not supported on this platform"
+#else
+
+#include <boost/archive/text_wiarchive.hpp>
+#include <boost/archive/detail/polymorphic_iarchive_impl.hpp>
+
+namespace boost {
+namespace archive {
+
+typedef detail::polymorphic_iarchive_impl<
+ text_wiarchive_impl<text_wiarchive>
+> polymorphic_text_wiarchive;
+
+} // namespace archive
+} // namespace boost
+
+// required by smart_cast for compilers not implementing
+// partial template specialization
+BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(
+ boost::archive::polymorphic_text_wiarchive
+)
+
+#endif // BOOST_NO_STD_WSTREAMBUF
+#endif // BOOST_ARCHIVE_POLYMORPHIC_TEXT_WIARCHIVE_HPP
+
diff --git a/boost/boost/archive/polymorphic_text_woarchive.hpp b/boost/boost/archive/polymorphic_text_woarchive.hpp
new file mode 100644
index 00000000000..988fc4bdeb6
--- /dev/null
+++ b/boost/boost/archive/polymorphic_text_woarchive.hpp
@@ -0,0 +1,45 @@
+#ifndef BOOST_ARCHIVE_POLYMORPHIC_TEXT_WOARCHIVE_HPP
+#define BOOST_ARCHIVE_POLYMORPHIC_TEXT_WOARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// polymorphic_text_oarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+#ifdef BOOST_NO_STD_WSTREAMBUF
+#error "wide char i/o not supported on this platform"
+#else
+
+#include <boost/archive/text_woarchive.hpp>
+#include <boost/archive/detail/polymorphic_oarchive_impl.hpp>
+
+namespace boost {
+namespace archive {
+
+typedef detail::polymorphic_oarchive_impl<
+ text_woarchive_impl<text_woarchive>
+> polymorphic_text_woarchive;
+
+} // namespace archive
+} // namespace boost
+
+// required by smart_cast for compilers not implementing
+// partial template specialization
+BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(
+ boost::archive::polymorphic_text_woarchive
+)
+
+#endif // BOOST_NO_STD_WSTREAMBUF
+#endif // BOOST_ARCHIVE_POLYMORPHIC_TEXT_WOARCHIVE_HPP
+
diff --git a/boost/boost/archive/polymorphic_xml_iarchive.hpp b/boost/boost/archive/polymorphic_xml_iarchive.hpp
new file mode 100644
index 00000000000..4afbe09c875
--- /dev/null
+++ b/boost/boost/archive/polymorphic_xml_iarchive.hpp
@@ -0,0 +1,40 @@
+#ifndef BOOST_ARCHIVE_POLYMORPHIC_XML_IARCHIVE_HPP
+#define BOOST_ARCHIVE_POLYMORPHIC_XML_IARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// polymorphic_xml_iarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+#include <boost/archive/xml_iarchive.hpp>
+#include <boost/archive/detail/polymorphic_iarchive_impl.hpp>
+
+namespace boost {
+namespace archive {
+
+typedef detail::polymorphic_iarchive_impl<
+ xml_iarchive_impl<xml_iarchive>
+> polymorphic_xml_iarchive;
+
+} // namespace archive
+} // namespace boost
+
+// required by smart_cast for compilers not implementing
+// partial template specialization
+BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(
+ boost::archive::polymorphic_xml_iarchive
+)
+
+#endif // BOOST_ARCHIVE_POLYMORPHIC_XML_IARCHIVE_HPP
+
diff --git a/boost/boost/archive/polymorphic_xml_oarchive.hpp b/boost/boost/archive/polymorphic_xml_oarchive.hpp
new file mode 100644
index 00000000000..e26f0fd65ab
--- /dev/null
+++ b/boost/boost/archive/polymorphic_xml_oarchive.hpp
@@ -0,0 +1,40 @@
+#ifndef BOOST_ARCHIVE_POLYMORPHIC_XML_OARCHIVE_HPP
+#define BOOST_ARCHIVE_POLYMORPHIC_XML_OARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// polymorphic_xml_oarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+#include <boost/archive/xml_oarchive.hpp>
+#include <boost/archive/detail/polymorphic_oarchive_impl.hpp>
+
+namespace boost {
+namespace archive {
+
+typedef detail::polymorphic_oarchive_impl<
+ xml_oarchive_impl<xml_oarchive>
+> polymorphic_xml_oarchive;
+
+} // namespace archive
+} // namespace boost
+
+// required by smart_cast for compilers not implementing
+// partial template specialization
+BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(
+ boost::archive::polymorphic_xml_oarchive
+)
+
+#endif // BOOST_ARCHIVE_POLYMORPHIC_XML_OARCHIVE_HPP
+
diff --git a/boost/boost/archive/polymorphic_xml_wiarchive.hpp b/boost/boost/archive/polymorphic_xml_wiarchive.hpp
new file mode 100644
index 00000000000..0ee943b0932
--- /dev/null
+++ b/boost/boost/archive/polymorphic_xml_wiarchive.hpp
@@ -0,0 +1,45 @@
+#ifndef BOOST_ARCHIVE_POLYMORPHIC_XML_WIARCHIVE_HPP
+#define BOOST_ARCHIVE_POLYMORPHIC_XML_WIARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// polymorphic_xml_wiarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+#ifdef BOOST_NO_STD_WSTREAMBUF
+#error "wide char i/o not supported on this platform"
+#else
+
+#include <boost/archive/xml_wiarchive.hpp>
+#include <boost/archive/detail/polymorphic_iarchive_impl.hpp>
+
+namespace boost {
+namespace archive {
+
+typedef detail::polymorphic_iarchive_impl<
+ xml_wiarchive_impl<xml_wiarchive>
+> polymorphic_xml_wiarchive;
+
+} // namespace archive
+} // namespace boost
+
+// required by smart_cast for compilers not implementing
+// partial template specialization
+BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(
+ boost::archive::polymorphic_xml_wiarchive
+)
+
+#endif // BOOST_NO_STD_WSTREAMBUF
+#endif // BOOST_ARCHIVE_POLYMORPHIC_XML_WIARCHIVE_HPP
+
diff --git a/boost/boost/archive/polymorphic_xml_woarchive.hpp b/boost/boost/archive/polymorphic_xml_woarchive.hpp
new file mode 100644
index 00000000000..446a3815dcc
--- /dev/null
+++ b/boost/boost/archive/polymorphic_xml_woarchive.hpp
@@ -0,0 +1,45 @@
+#ifndef BOOST_ARCHIVE_POLYMORPHIC_XML_WOARCHIVE_HPP
+#define BOOST_ARCHIVE_POLYMORPHIC_XML_WOARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// polymorphic_xml_oarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+#ifdef BOOST_NO_STD_WSTREAMBUF
+#error "wide char i/o not supported on this platform"
+#else
+
+#include <boost/archive/xml_woarchive.hpp>
+#include <boost/archive/detail/polymorphic_oarchive_impl.hpp>
+
+namespace boost {
+namespace archive {
+
+typedef detail::polymorphic_oarchive_impl<
+ xml_woarchive_impl<xml_woarchive>
+> polymorphic_xml_woarchive;
+
+} // namespace archive
+} // namespace boost
+
+// required by smart_cast for compilers not implementing
+// partial template specialization
+BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(
+ boost::archive::polymorphic_xml_woarchive
+)
+
+#endif // BOOST_NO_STD_WSTREAMBUF
+#endif // BOOST_ARCHIVE_POLYMORPHIC_XML_WOARCHIVE_HPP
+
diff --git a/boost/boost/archive/text_iarchive.hpp b/boost/boost/archive/text_iarchive.hpp
new file mode 100644
index 00000000000..70901bf1349
--- /dev/null
+++ b/boost/boost/archive/text_iarchive.hpp
@@ -0,0 +1,99 @@
+#ifndef BOOST_ARCHIVE_TEXT_IARCHIVE_HPP
+#define BOOST_ARCHIVE_TEXT_IARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// text_iarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <istream>
+
+#include <boost/archive/detail/auto_link_archive.hpp>
+#include <boost/archive/basic_text_iprimitive.hpp>
+#include <boost/archive/basic_text_iarchive.hpp>
+
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+namespace boost {
+namespace archive {
+
+template<class Archive>
+class text_iarchive_impl :
+ public basic_text_iprimitive<std::istream>,
+ public basic_text_iarchive<Archive>
+{
+#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+public:
+#else
+ friend class detail::interface_iarchive<Archive>;
+ friend class basic_text_iarchive<Archive>;
+ friend class load_access;
+protected:
+#endif
+ template<class T>
+ void load(T & t){
+ basic_text_iprimitive<std::istream>::load(t);
+ }
+ BOOST_ARCHIVE_DECL(void)
+ load(char * t);
+ #ifndef BOOST_NO_INTRINSIC_WCHAR_T
+ BOOST_ARCHIVE_DECL(void)
+ load(wchar_t * t);
+ #endif
+ BOOST_ARCHIVE_DECL(void)
+ load(std::string &s);
+ #ifndef BOOST_NO_STD_WSTRING
+ BOOST_ARCHIVE_DECL(void)
+ load(std::wstring &ws);
+ #endif
+ // note: the following should not needed - but one compiler (vc 7.1)
+ // fails to compile one test (test_shared_ptr) without it !!!
+ // make this protected so it can be called from a derived archive
+ template<class T>
+ void load_override(T & t, BOOST_PFTO int){
+ basic_text_iarchive<Archive>::load_override(t, 0);
+ }
+ BOOST_ARCHIVE_DECL(void)
+ load_override(class_name_type & t, int);
+ BOOST_ARCHIVE_DECL(void)
+ init();
+ BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY())
+ text_iarchive_impl(std::istream & is, unsigned int flags);
+ BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY())
+ ~text_iarchive_impl(){};
+};
+
+// do not derive from this class. If you want to extend this functionality
+// via inhertance, derived from text_iarchive_impl instead. This will
+// preserve correct static polymorphism.
+class text_iarchive :
+ public text_iarchive_impl<text_iarchive>
+{
+public:
+
+ text_iarchive(std::istream & is, unsigned int flags = 0) :
+ text_iarchive_impl<text_iarchive>(is, flags)
+ {}
+ ~text_iarchive(){}
+};
+
+} // namespace archive
+} // namespace boost
+
+// required by smart_cast for compilers not implementing
+// partial template specialization
+BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(boost::archive::text_iarchive)
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // BOOST_ARCHIVE_TEXT_IARCHIVE_HPP
diff --git a/boost/boost/archive/text_oarchive.hpp b/boost/boost/archive/text_oarchive.hpp
new file mode 100644
index 00000000000..bac87385c48
--- /dev/null
+++ b/boost/boost/archive/text_oarchive.hpp
@@ -0,0 +1,100 @@
+#ifndef BOOST_ARCHIVE_TEXT_OARCHIVE_HPP
+#define BOOST_ARCHIVE_TEXT_OARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// text_oarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <ostream>
+#include <cstddef> // std::size_t
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::size_t;
+} // namespace std
+#endif
+
+#include <boost/archive/detail/auto_link_archive.hpp>
+#include <boost/archive/basic_text_oprimitive.hpp>
+#include <boost/archive/basic_text_oarchive.hpp>
+
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+namespace boost {
+namespace archive {
+
+template<class Archive>
+class text_oarchive_impl :
+ /* protected ? */ public basic_text_oprimitive<std::ostream>,
+ public basic_text_oarchive<Archive>
+{
+#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+public:
+#else
+ friend class detail::interface_oarchive<Archive>;
+ friend class basic_text_oarchive<Archive>;
+ friend class save_access;
+protected:
+#endif
+ template<class T>
+ void save(const T & t){
+ this->newtoken();
+ basic_text_oprimitive<std::ostream>::save(t);
+ }
+ BOOST_ARCHIVE_DECL(void)
+ save(const char * t);
+ #ifndef BOOST_NO_INTRINSIC_WCHAR_T
+ BOOST_ARCHIVE_DECL(void)
+ save(const wchar_t * t);
+ #endif
+ BOOST_ARCHIVE_DECL(void)
+ save(const std::string &s);
+ #ifndef BOOST_NO_STD_WSTRING
+ BOOST_ARCHIVE_DECL(void)
+ save(const std::wstring &ws);
+ #endif
+ BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY())
+ text_oarchive_impl(std::ostream & os, unsigned int flags);
+ BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY())
+ ~text_oarchive_impl(){};
+public:
+ BOOST_ARCHIVE_DECL(void)
+ save_binary(const void *address, std::size_t count);
+};
+
+// do not derive from this class. If you want to extend this functionality
+// via inhertance, derived from text_oarchive_impl instead. This will
+// preserve correct static polymorphism.
+class text_oarchive :
+ public text_oarchive_impl<text_oarchive>
+{
+public:
+
+ text_oarchive(std::ostream & os, unsigned int flags = 0) :
+ text_oarchive_impl<text_oarchive>(os, flags)
+ {}
+ ~text_oarchive(){}
+};
+
+} // namespace archive
+} // namespace boost
+
+// required by smart_cast for compilers not implementing
+// partial template specialization
+BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(boost::archive::text_oarchive)
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // BOOST_ARCHIVE_TEXT_OARCHIVE_HPP
diff --git a/boost/boost/archive/text_wiarchive.hpp b/boost/boost/archive/text_wiarchive.hpp
new file mode 100644
index 00000000000..b687ca92098
--- /dev/null
+++ b/boost/boost/archive/text_wiarchive.hpp
@@ -0,0 +1,98 @@
+#ifndef BOOST_ARCHIVE_TEXT_WIARCHIVE_HPP
+#define BOOST_ARCHIVE_TEXT_WIARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// text_wiarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+#ifdef BOOST_NO_STD_WSTREAMBUF
+#error "wide char i/o not supported on this platform"
+#else
+
+#include <istream>
+
+#include <boost/archive/detail/auto_link_warchive.hpp>
+#include <boost/archive/basic_text_iprimitive.hpp>
+#include <boost/archive/basic_text_iarchive.hpp>
+
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+namespace boost {
+namespace archive {
+
+template<class Archive>
+class text_wiarchive_impl :
+ public basic_text_iprimitive<std::wistream>,
+ public basic_text_iarchive<Archive>
+{
+#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+public:
+#else
+ friend class detail::interface_iarchive<Archive>;
+ friend class basic_text_iarchive<Archive>;
+ friend class load_access;
+protected:
+#endif
+ template<class T>
+ void load(T & t){
+ basic_text_iprimitive<std::wistream>::load(t);
+ }
+ BOOST_WARCHIVE_DECL(void)
+ load(char * t);
+ #ifndef BOOST_NO_INTRINSIC_WCHAR_T
+ BOOST_WARCHIVE_DECL(void)
+ load(wchar_t * t);
+ #endif
+ BOOST_WARCHIVE_DECL(void)
+ load(std::string &s);
+ #ifndef BOOST_NO_STD_WSTRING
+ BOOST_WARCHIVE_DECL(void)
+ load(std::wstring &ws);
+ #endif
+ // note: the following should not needed - but one compiler (vc 7.1)
+ // fails to compile one test (test_shared_ptr) without it !!!
+ template<class T>
+ void load_override(T & t, BOOST_PFTO int){
+ basic_text_iarchive<Archive>::load_override(t, 0);
+ }
+ BOOST_WARCHIVE_DECL(BOOST_PP_EMPTY())
+ text_wiarchive_impl(std::wistream & is, unsigned int flags);
+ ~text_wiarchive_impl(){};
+};
+
+// do not derive from this class. If you want to extend this functionality
+// via inhertance, derived from text_wiarchive_impl instead. This will
+// preserve correct static polymorphism.
+class text_wiarchive :
+ public text_wiarchive_impl<text_wiarchive>
+{
+public:
+ text_wiarchive(std::wistream & is, unsigned int flags = 0) :
+ text_wiarchive_impl<text_wiarchive>(is, flags)
+ {}
+ ~text_wiarchive(){}
+};
+
+} // namespace archive
+} // namespace boost
+
+// required by smart_cast for compilers not implementing
+// partial template specialization
+BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(boost::archive::text_wiarchive)
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // BOOST_NO_STD_WSTREAMBUF
+#endif // BOOST_ARCHIVE_TEXT_WIARCHIVE_HPP
diff --git a/boost/boost/archive/text_woarchive.hpp b/boost/boost/archive/text_woarchive.hpp
new file mode 100644
index 00000000000..da6f0cabab0
--- /dev/null
+++ b/boost/boost/archive/text_woarchive.hpp
@@ -0,0 +1,127 @@
+#ifndef BOOST_ARCHIVE_TEXT_WOARCHIVE_HPP
+#define BOOST_ARCHIVE_TEXT_WOARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// text_woarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+
+#ifdef BOOST_NO_STD_WSTREAMBUF
+#error "wide char i/o not supported on this platform"
+#else
+
+#include <ostream>
+#include <cstddef> // size_t
+
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::size_t;
+} // namespace std
+#endif
+
+#include <boost/archive/detail/auto_link_warchive.hpp>
+#include <boost/archive/basic_text_oprimitive.hpp>
+#include <boost/archive/basic_text_oarchive.hpp>
+
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+namespace boost {
+namespace archive {
+
+template<class Archive>
+class text_woarchive_impl :
+ public basic_text_oprimitive<std::wostream>,
+ public basic_text_oarchive<Archive>
+{
+#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+public:
+#else
+ friend class detail::interface_oarchive<Archive>;
+ friend class basic_text_oarchive<Archive>;
+ friend class save_access;
+protected:
+#endif
+ template<class T>
+ void save(const T & t){
+ this->newtoken();
+ basic_text_oprimitive<std::wostream>::save(t);
+ }
+ BOOST_WARCHIVE_DECL(void)
+ save(const char * t);
+ #ifndef BOOST_NO_INTRINSIC_WCHAR_T
+ BOOST_WARCHIVE_DECL(void)
+ save(const wchar_t * t);
+ #endif
+ BOOST_WARCHIVE_DECL(void)
+ save(const std::string &s);
+ #ifndef BOOST_NO_STD_WSTRING
+ BOOST_WARCHIVE_DECL(void)
+ save(const std::wstring &ws);
+ #endif
+ text_woarchive_impl(std::wostream & os, unsigned int flags) :
+ basic_text_oprimitive<std::wostream>(
+ os,
+ 0 != (flags & no_codecvt)
+ ),
+ basic_text_oarchive<Archive>(flags)
+ {
+ if(0 == (flags & no_header))
+ basic_text_oarchive<Archive>::init();
+ }
+public:
+ void save_binary(const void *address, std::size_t count){
+ put(L'\n');
+ this->end_preamble();
+ #if ! defined(__MWERKS__)
+ this->basic_text_oprimitive<std::wostream>::save_binary(
+ #else
+ this->basic_text_oprimitive::save_binary(
+ #endif
+ address,
+ count
+ );
+ put(L'\n');
+ this->delimiter = this->none;
+ }
+
+};
+
+// we use the following because we can't use
+// typedef text_oarchive_impl<text_oarchive_impl<...> > text_oarchive;
+
+// do not derive from this class. If you want to extend this functionality
+// via inhertance, derived from text_oarchive_impl instead. This will
+// preserve correct static polymorphism.
+class text_woarchive :
+ public text_woarchive_impl<text_woarchive>
+{
+public:
+ text_woarchive(std::wostream & os, unsigned int flags = 0) :
+ text_woarchive_impl<text_woarchive>(os, flags)
+ {}
+ ~text_woarchive(){}
+};
+
+} // namespace archive
+} // namespace boost
+
+// required by smart_cast for compilers not implementing
+// partial template specialization
+BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(boost::archive::text_woarchive)
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // BOOST_NO_STD_WSTREAMBUF
+#endif // BOOST_ARCHIVE_TEXT_WOARCHIVE_HPP
diff --git a/boost/boost/archive/tmpdir.hpp b/boost/boost/archive/tmpdir.hpp
new file mode 100644
index 00000000000..1d842da9744
--- /dev/null
+++ b/boost/boost/archive/tmpdir.hpp
@@ -0,0 +1,49 @@
+#ifndef BOOST_ARCHIVE_TMPDIR_HPP
+#define BOOST_ARCHIVE_TMPDIR_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// tmpdir.hpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <cstdlib> // getenv
+#include <cassert>
+
+#include <boost/config.hpp>
+#ifdef BOOST_NO_STDC_NAMESPACE
+namespace std {
+ using ::getenv;
+}
+#endif
+
+namespace boost {
+namespace archive {
+
+inline char * tmpdir(){
+ char *dirname;
+ dirname = std::getenv("TMP");
+ if(NULL == dirname)
+ dirname = std::getenv("TMPDIR");
+ if(NULL == dirname)
+ dirname = std::getenv("TEMP");
+ if(NULL == dirname){
+ //assert(false); // no temp directory found
+ dirname = ".";
+ }
+ return dirname;
+}
+
+} // archive
+} // boost
+
+#endif // BOOST_ARCHIVE_TMPDIR_HPP
diff --git a/boost/boost/archive/wcslen.hpp b/boost/boost/archive/wcslen.hpp
new file mode 100644
index 00000000000..5c14acfff35
--- /dev/null
+++ b/boost/boost/archive/wcslen.hpp
@@ -0,0 +1,56 @@
+#ifndef BOOST_ARCHIVE_WCSLEN_HPP
+#define BOOST_ARCHIVE_WCSLEN_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// wcslen.hpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <cstddef> // size_t
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::size_t;
+} // namespace std
+#endif
+
+#ifndef BOOST_NO_CWCHAR
+
+// a couple of libraries which include wchar_t don't include
+// wcslen
+
+#if defined(BOOST_DINKUMWARE_STDLIB) && BOOST_DINKUMWARE_STDLIB < 306 \
+|| defined(__LIBCOMO__)
+
+namespace std {
+inline std::size_t wcslen(const wchar_t * ws)
+{
+ const wchar_t * eows = ws;
+ while(* eows != 0)
+ ++eows;
+ return eows - ws;
+}
+} // namespace std
+
+#else
+
+#include <cwchar>
+#ifdef BOOST_NO_STDC_NAMESPACE
+namespace std{ using ::wcslen; }
+#endif
+
+#endif // wcslen
+
+#endif //BOOST_NO_CWCHAR
+
+#endif //BOOST_ARCHIVE_WCSLEN_HPP
diff --git a/boost/boost/archive/xml_iarchive.hpp b/boost/boost/archive/xml_iarchive.hpp
new file mode 100644
index 00000000000..306044913aa
--- /dev/null
+++ b/boost/boost/archive/xml_iarchive.hpp
@@ -0,0 +1,111 @@
+#ifndef BOOST_ARCHIVE_XML_IARCHIVE_HPP
+#define BOOST_ARCHIVE_XML_IARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// xml_iarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <istream>
+
+//#include <boost/scoped_ptr.hpp>
+#include <boost/archive/detail/auto_link_archive.hpp>
+#include <boost/archive/basic_text_iprimitive.hpp>
+#include <boost/archive/basic_xml_iarchive.hpp>
+
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+namespace boost {
+namespace archive {
+
+template<class CharType>
+class basic_xml_grammar;
+typedef basic_xml_grammar<char> xml_grammar;
+
+template<class Archive>
+class xml_iarchive_impl :
+ public basic_text_iprimitive<std::istream>,
+ public basic_xml_iarchive<Archive>
+{
+#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+public:
+#else
+ friend class detail::interface_iarchive<Archive>;
+ friend class basic_xml_iarchive<Archive>;
+ friend class load_access;
+protected:
+#endif
+ // instances of micro xml parser to parse start preambles
+ // scoped_ptr doesn't play nice with borland - so use a naked pointer
+ // scoped_ptr<xml_grammar> gimpl;
+ xml_grammar *gimpl;
+
+ std::istream & get_is(){
+ return is;
+ }
+ template<class T>
+ void load(T & t){
+ basic_text_iprimitive<std::istream>::load(t);
+ }
+ BOOST_ARCHIVE_DECL(void)
+ load(char * t);
+ #ifndef BOOST_NO_INTRINSIC_WCHAR_T
+ BOOST_ARCHIVE_DECL(void)
+ load(wchar_t * t);
+ #endif
+ BOOST_ARCHIVE_DECL(void)
+ load(std::string &s);
+ #ifndef BOOST_NO_STD_WSTRING
+ BOOST_ARCHIVE_DECL(void)
+ load(std::wstring &ws);
+ #endif
+ template<class T>
+ void load_override(T & t, BOOST_PFTO int){
+ basic_xml_iarchive<Archive>::load_override(t, 0);
+ }
+ BOOST_ARCHIVE_DECL(void)
+ load_override(class_name_type & t, int);
+ BOOST_ARCHIVE_DECL(void)
+ init();
+ BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY())
+ xml_iarchive_impl(std::istream & is, unsigned int flags);
+ BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY())
+ ~xml_iarchive_impl();
+};
+
+// we use the following because we can't use
+// typedef xml_iarchive_impl<xml_iarchive_impl<...> > xml_iarchive;
+
+// do not derive from this class. If you want to extend this functionality
+// via inhertance, derived from xml_iarchive_impl instead. This will
+// preserve correct static polymorphism.
+class xml_iarchive :
+ public xml_iarchive_impl<xml_iarchive>
+{
+public:
+ xml_iarchive(std::istream & is, unsigned int flags = 0) :
+ xml_iarchive_impl<xml_iarchive>(is, flags)
+ {}
+ ~xml_iarchive(){};
+};
+
+} // namespace archive
+} // namespace boost
+
+// required by smart_cast for compilers not implementing
+// partial template specialization
+BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(boost::archive::xml_iarchive)
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // BOOST_ARCHIVE_XML_IARCHIVE_HPP
diff --git a/boost/boost/archive/xml_oarchive.hpp b/boost/boost/archive/xml_oarchive.hpp
new file mode 100644
index 00000000000..5dc90edfaeb
--- /dev/null
+++ b/boost/boost/archive/xml_oarchive.hpp
@@ -0,0 +1,113 @@
+#ifndef BOOST_ARCHIVE_XML_OARCHIVE_HPP
+#define BOOST_ARCHIVE_XML_OARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// xml_oarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <ostream>
+
+#include <cstddef> // size_t
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::size_t;
+} // namespace std
+#endif
+
+#include <boost/archive/detail/auto_link_archive.hpp>
+#include <boost/archive/basic_text_oprimitive.hpp>
+#include <boost/archive/basic_xml_oarchive.hpp>
+
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+namespace boost {
+namespace archive {
+
+template<class Archive>
+class xml_oarchive_impl :
+ public basic_text_oprimitive<std::ostream>,
+ public basic_xml_oarchive<Archive>
+{
+#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+public:
+#else
+ friend class detail::interface_oarchive<Archive>;
+ friend class basic_xml_oarchive<Archive>;
+ friend class save_access;
+protected:
+#endif
+ void end_preamble(){
+ basic_xml_oarchive<Archive>::end_preamble();
+ }
+ template<class T>
+ void save(const T & t){
+ basic_text_oprimitive<std::ostream>::save(t);
+ }
+ BOOST_ARCHIVE_DECL(void)
+ save(const char * t);
+ #ifndef BOOST_NO_INTRINSIC_WCHAR_T
+ BOOST_ARCHIVE_DECL(void)
+ save(const wchar_t * t);
+ #endif
+ BOOST_ARCHIVE_DECL(void)
+ save(const std::string &s);
+ #ifndef BOOST_NO_STD_WSTRING
+ BOOST_ARCHIVE_DECL(void)
+ save(const std::wstring &ws);
+ #endif
+ BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY())
+ xml_oarchive_impl(std::ostream & os, unsigned int flags);
+ ~xml_oarchive_impl(){}
+public:
+ void save_binary(const void *address, std::size_t count){
+ this->end_preamble();
+ #if ! defined(__MWERKS__)
+ this->basic_text_oprimitive<std::ostream>::save_binary(
+ #else
+ this->basic_text_oprimitive::save_binary(
+ #endif
+ address,
+ count
+ );
+ this->indent_next = true;
+ }
+};
+
+// we use the following because we can't use
+// typedef xml_oarchive_impl<xml_oarchive_impl<...> > xml_oarchive;
+
+// do not derive from this class. If you want to extend this functionality
+// via inhertance, derived from xml_oarchive_impl instead. This will
+// preserve correct static polymorphism.
+class xml_oarchive :
+ public xml_oarchive_impl<xml_oarchive>
+{
+public:
+ xml_oarchive(std::ostream & os, unsigned int flags = 0) :
+ xml_oarchive_impl<xml_oarchive>(os, flags)
+ {}
+ ~xml_oarchive(){}
+};
+
+} // namespace archive
+} // namespace boost
+
+// required by smart_cast for compilers not implementing
+// partial template specialization
+BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(boost::archive::xml_oarchive)
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // BOOST_ARCHIVE_XML_OARCHIVE_HPP
diff --git a/boost/boost/archive/xml_wiarchive.hpp b/boost/boost/archive/xml_wiarchive.hpp
new file mode 100644
index 00000000000..ebe398947fe
--- /dev/null
+++ b/boost/boost/archive/xml_wiarchive.hpp
@@ -0,0 +1,116 @@
+#ifndef BOOST_ARCHIVE_XML_WIARCHIVE_HPP
+#define BOOST_ARCHIVE_XML_WIARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// xml_wiarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+#ifdef BOOST_NO_STD_WSTREAMBUF
+#error "wide char i/o not supported on this platform"
+#else
+
+#include <istream>
+
+//#include <boost/scoped_ptr.hpp>
+#include <boost/archive/detail/auto_link_warchive.hpp>
+#include <boost/archive/basic_text_iprimitive.hpp>
+#include <boost/archive/basic_xml_iarchive.hpp>
+
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+namespace boost {
+namespace archive {
+
+template<class CharType>
+class basic_xml_grammar;
+typedef basic_xml_grammar<wchar_t> xml_wgrammar;
+
+template<class Archive>
+class xml_wiarchive_impl :
+ public basic_text_iprimitive<std::wistream>,
+ public basic_xml_iarchive<Archive>
+{
+#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+public:
+#else
+ friend class detail::interface_iarchive<Archive>;
+ friend class basic_xml_iarchive<Archive>;
+ friend class load_access;
+protected:
+#endif
+ // instances of micro xml parser to parse start preambles
+ // scoped_ptr doesn't play nice with borland - so use a naked pointer
+ // scoped_ptr<xml_wgrammar> gimpl;
+ xml_wgrammar *gimpl;
+ std::wistream & get_is(){
+ return is;
+ }
+ template<class T>
+ void load(T & t){
+ basic_text_iprimitive<std::wistream>::load(t);
+ }
+ BOOST_WARCHIVE_DECL(void)
+ load(char * t);
+ #ifndef BOOST_NO_INTRINSIC_WCHAR_T
+ BOOST_WARCHIVE_DECL(void)
+ load(wchar_t * t);
+ #endif
+ BOOST_WARCHIVE_DECL(void)
+ load(std::string &s);
+ #ifndef BOOST_NO_STD_WSTRING
+ BOOST_WARCHIVE_DECL(void)
+ load(std::wstring &ws);
+ #endif
+ template<class T>
+ void load_override(T & t, BOOST_PFTO int){
+ basic_xml_iarchive<Archive>::load_override(t, 0);
+ }
+ BOOST_WARCHIVE_DECL(void)
+ load_override(class_name_type & t, int);
+ BOOST_WARCHIVE_DECL(void)
+ init();
+ BOOST_WARCHIVE_DECL(BOOST_PP_EMPTY())
+ xml_wiarchive_impl(std::wistream & is, unsigned int flags) ;
+ BOOST_WARCHIVE_DECL(BOOST_PP_EMPTY())
+ ~xml_wiarchive_impl();
+};
+
+// we use the following because we can't use
+// typedef xml_wiarchive_impl<xml_wiarchive_impl<...> > xml_wiarchive;
+
+// do not derive from this class. If you want to extend this functionality
+// via inhertance, derived from xml_wiarchive_impl instead. This will
+// preserve correct static polymorphism.
+class xml_wiarchive :
+ public xml_wiarchive_impl<xml_wiarchive>
+{
+public:
+ xml_wiarchive(std::wistream & is, unsigned int flags = 0) :
+ xml_wiarchive_impl<xml_wiarchive>(is, flags)
+ {}
+ ~xml_wiarchive(){}
+};
+
+} // namespace archive
+} // namespace boost
+
+// required by smart_cast for compilers not implementing
+// partial template specialization
+BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(boost::archive::xml_wiarchive)
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // BOOST_NO_STD_WSTREAMBUF
+#endif // BOOST_ARCHIVE_XML_WIARCHIVE_HPP
diff --git a/boost/boost/archive/xml_woarchive.hpp b/boost/boost/archive/xml_woarchive.hpp
new file mode 100644
index 00000000000..9be6e5edfd7
--- /dev/null
+++ b/boost/boost/archive/xml_woarchive.hpp
@@ -0,0 +1,126 @@
+#ifndef BOOST_ARCHIVE_XML_WOARCHIVE_HPP
+#define BOOST_ARCHIVE_XML_WOARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// xml_woarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+#ifdef BOOST_NO_STD_WSTREAMBUF
+#error "wide char i/o not supported on this platform"
+#else
+
+#include <cstddef> // size_t
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::size_t;
+} // namespace std
+#endif
+
+#include <ostream>
+
+#include <boost/archive/detail/auto_link_warchive.hpp>
+#include <boost/archive/basic_text_oprimitive.hpp>
+#include <boost/archive/basic_xml_oarchive.hpp>
+
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+namespace boost {
+namespace archive {
+
+BOOST_WARCHIVE_DECL(std::wostream &)
+operator<<(std::wostream &os, const char *t);
+
+BOOST_WARCHIVE_DECL(std::wostream &)
+operator<<(std::wostream &os, const char t);
+
+template<class Archive>
+class xml_woarchive_impl :
+ public basic_text_oprimitive<std::wostream>,
+ public basic_xml_oarchive<Archive>
+{
+#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+public:
+#else
+ friend class detail::interface_oarchive<Archive>;
+ friend class basic_xml_oarchive<Archive>;
+ friend class save_access;
+protected:
+#endif
+ void end_preamble(){
+ basic_xml_oarchive<Archive>::end_preamble();
+ }
+ template<class T>
+ void
+ save(const T & t){
+ basic_text_oprimitive<std::wostream>::save(t);
+ }
+ BOOST_WARCHIVE_DECL(void)
+ save(const char * t);
+ #ifndef BOOST_NO_INTRINSIC_WCHAR_T
+ BOOST_WARCHIVE_DECL(void)
+ save(const wchar_t * t);
+ #endif
+ BOOST_WARCHIVE_DECL(void)
+ save(const std::string &s);
+ #ifndef BOOST_NO_STD_WSTRING
+ BOOST_WARCHIVE_DECL(void)
+ save(const std::wstring &ws);
+ #endif
+ BOOST_WARCHIVE_DECL(BOOST_PP_EMPTY())
+ xml_woarchive_impl(std::wostream & os, unsigned int flags);
+ ~xml_woarchive_impl(){}
+public:
+ void
+ save_binary(const void *address, std::size_t count){
+ this->end_preamble();
+ #if ! defined(__MWERKS__)
+ this->basic_text_oprimitive<std::wostream>::save_binary(
+ #else
+ this->basic_text_oprimitive::save_binary(
+ #endif
+ address,
+ count
+ );
+ this->indent_next = true;
+ }
+};
+
+// we use the following because we can't use
+// typedef xml_woarchive_impl<xml_woarchive_impl<...> > xml_woarchive;
+
+// do not derive from this class. If you want to extend this functionality
+// via inhertance, derived from xml_woarchive_impl instead. This will
+// preserve correct static polymorphism.
+class xml_woarchive :
+ public xml_woarchive_impl<xml_woarchive>
+{
+public:
+ xml_woarchive(std::wostream & os, unsigned int flags = 0) :
+ xml_woarchive_impl<xml_woarchive>(os, flags)
+ {}
+ ~xml_woarchive(){}
+};
+
+} // namespace archive
+} // namespace boost
+
+// required by smart_cast for compilers not implementing
+// partial template specialization
+BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(boost::archive::xml_woarchive)
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // BOOST_NO_STD_WSTREAMBUF
+#endif // BOOST_ARCHIVE_XML_OARCHIVE_HPP
diff --git a/boost/boost/array.hpp b/boost/boost/array.hpp
new file mode 100644
index 00000000000..b41c6561c91
--- /dev/null
+++ b/boost/boost/array.hpp
@@ -0,0 +1,321 @@
+/* The following code declares class array,
+ * an STL container (as wrapper) for arrays of constant size.
+ *
+ * See
+ * http://www.boost.org/libs/array/
+ * for documentation.
+ *
+ * The original author site is at: http://www.josuttis.com/
+ *
+ * (C) Copyright Nicolai M. Josuttis 2001.
+ *
+ * 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)
+ *
+ * 29 Jan 2004 - c_array() added, BOOST_NO_PRIVATE_IN_AGGREGATE removed (Nico Josuttis)
+ * 23 Aug 2002 - fix for Non-MSVC compilers combined with MSVC libraries.
+ * 05 Aug 2001 - minor update (Nico Josuttis)
+ * 20 Jan 2001 - STLport fix (Beman Dawes)
+ * 29 Sep 2000 - Initial Revision (Nico Josuttis)
+ *
+ * Jan 29, 2004
+ */
+#ifndef BOOST_ARRAY_HPP
+#define BOOST_ARRAY_HPP
+
+#include <cstddef>
+#include <stdexcept>
+#include <boost/assert.hpp>
+
+// Handles broken standard libraries better than <iterator>
+#include <boost/detail/iterator.hpp>
+#include <boost/throw_exception.hpp>
+#include <algorithm>
+
+// FIXES for broken compilers
+#include <boost/config.hpp>
+
+
+namespace boost {
+
+ template<class T, std::size_t N>
+ class array {
+ public:
+ T elems[N]; // fixed-size array of elements of type T
+
+ public:
+ // type definitions
+ typedef T value_type;
+ typedef T* iterator;
+ typedef const T* const_iterator;
+ typedef T& reference;
+ typedef const T& const_reference;
+ typedef std::size_t size_type;
+ typedef std::ptrdiff_t difference_type;
+
+ // iterator support
+ iterator begin() { return elems; }
+ const_iterator begin() const { return elems; }
+ iterator end() { return elems+N; }
+ const_iterator end() const { return elems+N; }
+
+ // reverse iterator support
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_MSVC_STD_ITERATOR) && !defined(BOOST_NO_STD_ITERATOR_TRAITS)
+ typedef std::reverse_iterator<iterator> reverse_iterator;
+ typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
+#elif defined(_MSC_VER) && (_MSC_VER == 1300) && defined(BOOST_DINKUMWARE_STDLIB) && (BOOST_DINKUMWARE_STDLIB == 310)
+ // workaround for broken reverse_iterator in VC7
+ typedef std::reverse_iterator<std::_Ptrit<value_type, difference_type, iterator,
+ reference, iterator, reference> > reverse_iterator;
+ typedef std::reverse_iterator<std::_Ptrit<value_type, difference_type, const_iterator,
+ const_reference, iterator, reference> > const_reverse_iterator;
+#else
+ // workaround for broken reverse_iterator implementations
+ typedef std::reverse_iterator<iterator,T> reverse_iterator;
+ typedef std::reverse_iterator<const_iterator,T> const_reverse_iterator;
+#endif
+
+ reverse_iterator rbegin() { return reverse_iterator(end()); }
+ const_reverse_iterator rbegin() const {
+ return const_reverse_iterator(end());
+ }
+ reverse_iterator rend() { return reverse_iterator(begin()); }
+ const_reverse_iterator rend() const {
+ return const_reverse_iterator(begin());
+ }
+
+ // operator[]
+ reference operator[](size_type i)
+ {
+ BOOST_ASSERT( i < N && "out of range" );
+ return elems[i];
+ }
+
+ const_reference operator[](size_type i) const
+ {
+ BOOST_ASSERT( i < N && "out of range" );
+ return elems[i];
+ }
+
+ // at() with range check
+ reference at(size_type i) { rangecheck(i); return elems[i]; }
+ const_reference at(size_type i) const { rangecheck(i); return elems[i]; }
+
+ // front() and back()
+ reference front()
+ {
+ return elems[0];
+ }
+
+ const_reference front() const
+ {
+ return elems[0];
+ }
+
+ reference back()
+ {
+ return elems[N-1];
+ }
+
+ const_reference back() const
+ {
+ return elems[N-1];
+ }
+
+ // size is constant
+ static size_type size() { return N; }
+ static bool empty() { return false; }
+ static size_type max_size() { return N; }
+ enum { static_size = N };
+
+ // swap (note: linear complexity)
+ void swap (array<T,N>& y) {
+ std::swap_ranges(begin(),end(),y.begin());
+ }
+
+ // direct access to data (read-only)
+ const T* data() const { return elems; }
+ T* data() { return elems; }
+
+ // use array as C array (direct read/write access to data)
+ T* c_array() { return elems; }
+
+ // assignment with type conversion
+ template <typename T2>
+ array<T,N>& operator= (const array<T2,N>& rhs) {
+ std::copy(rhs.begin(),rhs.end(), begin());
+ return *this;
+ }
+
+ // assign one value to all elements
+ void assign (const T& value)
+ {
+ std::fill_n(begin(),size(),value);
+ }
+
+ // check range (may be private because it is static)
+ static void rangecheck (size_type i) {
+ if (i >= size()) {
+ throw std::range_error("array<>: index out of range");
+ }
+ }
+
+ };
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+ template< class T >
+ class array< T, 0 > {
+
+ public:
+ // type definitions
+ typedef T value_type;
+ typedef T* iterator;
+ typedef const T* const_iterator;
+ typedef T& reference;
+ typedef const T& const_reference;
+ typedef std::size_t size_type;
+ typedef std::ptrdiff_t difference_type;
+
+ // iterator support
+ iterator begin() { return iterator( reinterpret_cast< T * >( this ) ); }
+ const_iterator begin() const { return const_iterator( reinterpret_cast< const T * >( this ) ); }
+ iterator end() { return begin(); }
+ const_iterator end() const { return begin(); }
+
+ // reverse iterator support
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_MSVC_STD_ITERATOR) && !defined(BOOST_NO_STD_ITERATOR_TRAITS)
+ typedef std::reverse_iterator<iterator> reverse_iterator;
+ typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
+#elif defined(_MSC_VER) && (_MSC_VER == 1300) && defined(BOOST_DINKUMWARE_STDLIB) && (BOOST_DINKUMWARE_STDLIB == 310)
+ // workaround for broken reverse_iterator in VC7
+ typedef std::reverse_iterator<std::_Ptrit<value_type, difference_type, iterator,
+ reference, iterator, reference> > reverse_iterator;
+ typedef std::reverse_iterator<std::_Ptrit<value_type, difference_type, const_iterator,
+ const_reference, iterator, reference> > const_reverse_iterator;
+#else
+ // workaround for broken reverse_iterator implementations
+ typedef std::reverse_iterator<iterator,T> reverse_iterator;
+ typedef std::reverse_iterator<const_iterator,T> const_reverse_iterator;
+#endif
+
+ reverse_iterator rbegin() { return reverse_iterator(end()); }
+ const_reverse_iterator rbegin() const {
+ return const_reverse_iterator(end());
+ }
+ reverse_iterator rend() { return reverse_iterator(begin()); }
+ const_reverse_iterator rend() const {
+ return const_reverse_iterator(begin());
+ }
+
+ // operator[]
+ reference operator[](size_type i)
+ {
+ return failed_rangecheck();
+ }
+
+ const_reference operator[](size_type i) const
+ {
+ return failed_rangecheck();
+ }
+
+ // at() with range check
+ reference at(size_type i) { return failed_rangecheck(); }
+ const_reference at(size_type i) const { return failed_rangecheck(); }
+
+ // front() and back()
+ reference front()
+ {
+ return failed_rangecheck();
+ }
+
+ const_reference front() const
+ {
+ return failed_rangecheck();
+ }
+
+ reference back()
+ {
+ return failed_rangecheck();
+ }
+
+ const_reference back() const
+ {
+ return failed_rangecheck();
+ }
+
+ // size is constant
+ static size_type size() { return 0; }
+ static bool empty() { return true; }
+ static size_type max_size() { return 0; }
+ enum { static_size = 0 };
+
+ void swap (array<T,0>& y) {
+ }
+
+ // direct access to data (read-only)
+ const T* data() const { return 0; }
+ T* data() { return 0; }
+
+ // use array as C array (direct read/write access to data)
+ T* c_array() { return 0; }
+
+ // assignment with type conversion
+ template <typename T2>
+ array<T,0>& operator= (const array<T2,0>& ) {
+ return *this;
+ }
+
+ // assign one value to all elements
+ void assign (const T& ) { }
+
+ // check range (may be private because it is static)
+ static reference failed_rangecheck () {
+ std::range_error e("attempt to access element of an empty array");
+ boost::throw_exception(e);
+ //
+ // We need to return something here to keep
+ // some compilers happy: however we will never
+ // actually get here....
+ //
+ static T placeholder;
+ return placeholder;
+ }
+ };
+#endif
+
+ // comparisons
+ template<class T, std::size_t N>
+ bool operator== (const array<T,N>& x, const array<T,N>& y) {
+ return std::equal(x.begin(), x.end(), y.begin());
+ }
+ template<class T, std::size_t N>
+ bool operator< (const array<T,N>& x, const array<T,N>& y) {
+ return std::lexicographical_compare(x.begin(),x.end(),y.begin(),y.end());
+ }
+ template<class T, std::size_t N>
+ bool operator!= (const array<T,N>& x, const array<T,N>& y) {
+ return !(x==y);
+ }
+ template<class T, std::size_t N>
+ bool operator> (const array<T,N>& x, const array<T,N>& y) {
+ return y<x;
+ }
+ template<class T, std::size_t N>
+ bool operator<= (const array<T,N>& x, const array<T,N>& y) {
+ return !(y<x);
+ }
+ template<class T, std::size_t N>
+ bool operator>= (const array<T,N>& x, const array<T,N>& y) {
+ return !(x<y);
+ }
+
+ // global swap()
+ template<class T, std::size_t N>
+ inline void swap (array<T,N>& x, array<T,N>& y) {
+ x.swap(y);
+ }
+
+} /* namespace boost */
+
+#endif /*BOOST_ARRAY_HPP*/
diff --git a/boost/boost/assert.hpp b/boost/boost/assert.hpp
new file mode 100644
index 00000000000..5619f29898e
--- /dev/null
+++ b/boost/boost/assert.hpp
@@ -0,0 +1,37 @@
+//
+// boost/assert.hpp - BOOST_ASSERT(expr)
+//
+// Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd.
+//
+// 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)
+//
+// Note: There are no include guards. This is intentional.
+//
+// See http://www.boost.org/libs/utility/assert.html for documentation.
+//
+
+#undef BOOST_ASSERT
+
+#if defined(BOOST_DISABLE_ASSERTS)
+
+# define BOOST_ASSERT(expr) ((void)0)
+
+#elif defined(BOOST_ENABLE_ASSERT_HANDLER)
+
+#include <boost/current_function.hpp>
+
+namespace boost
+{
+
+void assertion_failed(char const * expr, char const * function, char const * file, long line); // user defined
+
+} // namespace boost
+
+#define BOOST_ASSERT(expr) ((expr)? ((void)0): ::boost::assertion_failed(#expr, BOOST_CURRENT_FUNCTION, __FILE__, __LINE__))
+
+#else
+# include <assert.h> // .h to support old libraries w/o <cassert> - effect is the same
+# define BOOST_ASSERT(expr) assert(expr)
+#endif
diff --git a/boost/boost/assign.hpp b/boost/boost/assign.hpp
new file mode 100644
index 00000000000..d74a56601c4
--- /dev/null
+++ b/boost/boost/assign.hpp
@@ -0,0 +1,24 @@
+// Boost.Assign library
+//
+// Copyright Thorsten Ottosen 2003-2004. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/assign/
+//
+
+
+#ifndef BOOST_ASSIGN_HPP
+#define BOOST_ASSIGN_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/assign/std.hpp>
+#include <boost/assign/list_of.hpp>
+#include <boost/assign/list_inserter.hpp>
+#include <boost/assign/assignment_exception.hpp>
+
+#endif
diff --git a/boost/boost/assign/assignment_exception.hpp b/boost/boost/assign/assignment_exception.hpp
new file mode 100644
index 00000000000..e2471ca4b43
--- /dev/null
+++ b/boost/boost/assign/assignment_exception.hpp
@@ -0,0 +1,43 @@
+// Boost.Assign library
+//
+// Copyright Thorsten Ottosen 2003-2004. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/assign/
+//
+
+
+#ifndef BOOST_ASSIGN_ASSIGNMENT_EXCEPTION_HPP
+#define BOOST_ASSIGN_ASSIGNMENT_EXCEPTION_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <exception>
+
+namespace boost
+{
+ namespace assign
+ {
+ class assignment_exception : public std::exception
+ {
+ public:
+ assignment_exception( const char* what )
+ : what_( what )
+ { }
+
+ virtual const char* what() const throw()
+ {
+ return what_;
+ }
+
+ private:
+ const char* what_;
+ };
+ }
+}
+
+#endif
diff --git a/boost/boost/assign/list_inserter.hpp b/boost/boost/assign/list_inserter.hpp
new file mode 100644
index 00000000000..4e5cf8ae22e
--- /dev/null
+++ b/boost/boost/assign/list_inserter.hpp
@@ -0,0 +1,404 @@
+// Boost.Assign library
+//
+// Copyright Thorsten Ottosen 2003-2004. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/assign/
+//
+
+#ifndef BOOST_ASSIGN_LIST_INSERTER_HPP
+#define BOOST_ASSIGN_LIST_INSERTER_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/detail/workaround.hpp>
+
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/config.hpp>
+#include <cstddef>
+
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/iteration/local.hpp>
+#include <boost/preprocessor/arithmetic/inc.hpp>
+
+namespace boost
+{
+namespace assign_detail
+{
+ template< class T >
+ struct repeater
+ {
+ std::size_t sz;
+ T val;
+
+ repeater( std::size_t sz, T r ) : sz( sz ), val( r )
+ { }
+ };
+
+ template< class Fun >
+ struct fun_repeater
+ {
+ std::size_t sz;
+ Fun val;
+
+ fun_repeater( std::size_t sz, Fun r ) : sz( sz ), val( r )
+ { }
+ };
+
+ template< class C >
+ class call_push_back
+ {
+ C& c_;
+ public:
+ call_push_back( C& c ) : c_( c )
+ { }
+
+ template< class T >
+ void operator()( T r )
+ {
+ c_.push_back( r );
+ }
+ };
+
+ template< class C >
+ class call_push_front
+ {
+ C& c_;
+ public:
+ call_push_front( C& c ) : c_( c )
+ { }
+
+ template< class T >
+ void operator()( T r )
+ {
+ c_.push_front( r );
+ }
+ };
+
+ template< class C >
+ class call_push
+ {
+ C& c_;
+ public:
+ call_push( C& c ) : c_( c )
+ { }
+
+ template< class T >
+ void operator()( T r )
+ {
+ c_.push( r );
+ }
+ };
+
+ template< class C >
+ class call_insert
+ {
+ C& c_;
+ public:
+ call_insert( C& c ) : c_( c )
+ { }
+
+ template< class T >
+ void operator()( T r )
+ {
+ c_.insert( r );
+ }
+ };
+
+ template< class C >
+ class call_add_edge
+ {
+ C& c_;
+ public:
+ call_add_edge( C& c ) : c_(c)
+ { }
+
+ template< class T >
+ void operator()( T l, T r )
+ {
+ add_edge( l, r, c_ );
+ }
+
+ template< class T, class EP >
+ void operator()( T l, T r, const EP& ep )
+ {
+ add_edge( l, r, ep, c_ );
+ }
+
+ };
+
+ struct forward_n_arguments {};
+
+} // namespace 'assign_detail'
+
+namespace assign
+{
+
+ template< class T >
+ inline assign_detail::repeater<T>
+ repeat( std::size_t sz, T r )
+ {
+ return assign_detail::repeater<T>( sz, r );
+ }
+
+ template< class Function >
+ inline assign_detail::fun_repeater<Function>
+ repeat_fun( std::size_t sz, Function r )
+ {
+ return assign_detail::fun_repeater<Function>( sz, r );
+ }
+
+
+ template< class Function, class Argument = assign_detail::forward_n_arguments >
+ class list_inserter
+ {
+ struct single_arg_type {};
+ struct n_arg_type {};
+
+ typedef BOOST_DEDUCED_TYPENAME mpl::if_c< is_same<Argument,assign_detail::forward_n_arguments>::value,
+ n_arg_type,
+ single_arg_type >::type arg_type;
+
+ public:
+
+ list_inserter( Function fun ) : insert_( fun )
+ {}
+
+ template< class Function2, class Arg >
+ list_inserter( const list_inserter<Function2,Arg>& r )
+ : insert_( r.fun_private() )
+ {}
+
+ list_inserter( const list_inserter& r ) : insert_( r.insert_ )
+ {}
+
+ list_inserter& operator()()
+ {
+ insert_( Argument() );
+ return *this;
+ }
+
+ template< class T >
+ list_inserter& operator=( const T& r )
+ {
+ insert_( r );
+ return *this;
+ }
+
+ template< class T >
+ list_inserter& operator=( assign_detail::repeater<T> r )
+ {
+ return operator,( r );
+ }
+
+ template< class Nullary_function >
+ list_inserter& operator=( const assign_detail::fun_repeater<Nullary_function>& r )
+ {
+ //BOOST_STATIC_ASSERT( function_traits<Nullary_function>::arity == 0 );
+ //BOOST_STATIC_ASSERT( is_convertible< BOOST_DEDUCED_TYPENAME function_traits<
+ // Nullary_function>::result_type >,T>::value );
+
+ return operator,( r );
+ }
+
+ template< class T >
+ list_inserter& operator,( const T& r )
+ {
+ insert_( r );
+ return *this;
+ }
+
+#if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3205))
+ template< class T >
+ list_inserter& operator,( const assign_detail::repeater<T> & r )
+ {
+ return repeat( r.sz, r.val );
+ }
+#else
+ template< class T >
+ list_inserter& operator,( assign_detail::repeater<T> r )
+ {
+ return repeat( r.sz, r.val );
+ }
+#endif
+
+ template< class Nullary_function >
+ list_inserter& operator,( const assign_detail::fun_repeater<Nullary_function>& r )
+ {
+ return repeat_fun( r.sz, r.val );
+ }
+
+ template< class T >
+ list_inserter& repeat( std::size_t sz, T r )
+ {
+ std::size_t i = 0;
+ while( i++ != sz )
+ insert_( r );
+ return *this;
+ }
+
+ template< class Nullary_function >
+ list_inserter& repeat_fun( std::size_t sz, Nullary_function fun )
+ {
+ std::size_t i = 0;
+ while( i++ != sz )
+ insert_( fun() );
+ return *this;
+ }
+
+ template< class SinglePassIterator >
+ list_inserter& range( SinglePassIterator first,
+ SinglePassIterator last )
+ {
+ for( ; first != last; ++first )
+ insert_( *first );
+ return *this;
+ }
+
+ template< class SinglePassRange >
+ list_inserter& range( const SinglePassRange& r )
+ {
+ return range( boost::begin(r), boost::end(r) );
+ }
+
+ template< class T >
+ list_inserter& operator()( const T& t )
+ {
+ insert_( t );
+ return *this;
+ }
+
+#ifndef BOOST_ASSIGN_MAX_PARAMS // use user's value
+#define BOOST_ASSIGN_MAX_PARAMS 5
+#endif
+#define BOOST_ASSIGN_MAX_PARAMETERS (BOOST_ASSIGN_MAX_PARAMS - 1)
+#define BOOST_ASSIGN_PARAMS1(n) BOOST_PP_ENUM_PARAMS(n, class T)
+#define BOOST_ASSIGN_PARAMS2(n) BOOST_PP_ENUM_BINARY_PARAMS(n, T, const& t)
+#define BOOST_ASSIGN_PARAMS3(n) BOOST_PP_ENUM_PARAMS(n, t)
+
+#define BOOST_PP_LOCAL_LIMITS (1, BOOST_ASSIGN_MAX_PARAMETERS)
+#define BOOST_PP_LOCAL_MACRO(n) \
+ template< class T, BOOST_ASSIGN_PARAMS1(n) > \
+ list_inserter& operator()(T t, BOOST_ASSIGN_PARAMS2(n) ) \
+ { \
+ BOOST_PP_CAT(insert, BOOST_PP_INC(n))(t, BOOST_ASSIGN_PARAMS3(n), arg_type()); \
+ return *this; \
+ } \
+ /**/
+
+#include BOOST_PP_LOCAL_ITERATE()
+
+
+#define BOOST_PP_LOCAL_LIMITS (1, BOOST_ASSIGN_MAX_PARAMETERS)
+#define BOOST_PP_LOCAL_MACRO(n) \
+ template< class T, BOOST_ASSIGN_PARAMS1(n) > \
+ void BOOST_PP_CAT(insert, BOOST_PP_INC(n))(T const& t, BOOST_ASSIGN_PARAMS2(n), single_arg_type) \
+ { \
+ insert_( Argument(t, BOOST_ASSIGN_PARAMS3(n) )); \
+ } \
+ /**/
+
+#include BOOST_PP_LOCAL_ITERATE()
+
+#define BOOST_PP_LOCAL_LIMITS (1, BOOST_ASSIGN_MAX_PARAMETERS)
+#define BOOST_PP_LOCAL_MACRO(n) \
+ template< class T, BOOST_ASSIGN_PARAMS1(n) > \
+ void BOOST_PP_CAT(insert, BOOST_PP_INC(n))(T const& t, BOOST_ASSIGN_PARAMS2(n), n_arg_type) \
+ { \
+ insert_(t, BOOST_ASSIGN_PARAMS3(n) ); \
+ } \
+ /**/
+
+#include BOOST_PP_LOCAL_ITERATE()
+
+
+ Function fun_private() const
+ {
+ return insert_;
+ }
+
+ private:
+
+ list_inserter& operator=( const list_inserter& );
+ Function insert_;
+ };
+
+ template< class Function >
+ inline list_inserter< Function >
+ make_list_inserter( Function fun )
+ {
+ return list_inserter< Function >( fun );
+ }
+
+ template< class Function, class Argument >
+ inline list_inserter<Function,Argument>
+ make_list_inserter( Function fun, Argument* )
+ {
+ return list_inserter<Function,Argument>( fun );
+ }
+
+ template< class C >
+ inline list_inserter< assign_detail::call_push_back<C>,
+ BOOST_DEDUCED_TYPENAME C::value_type >
+ push_back( C& c )
+ {
+ static BOOST_DEDUCED_TYPENAME C::value_type* p = 0;
+ return make_list_inserter( assign_detail::call_push_back<C>( c ),
+ p );
+ }
+
+ template< class C >
+ inline list_inserter< assign_detail::call_push_front<C>,
+ BOOST_DEDUCED_TYPENAME C::value_type >
+ push_front( C& c )
+ {
+ static BOOST_DEDUCED_TYPENAME C::value_type* p = 0;
+ return make_list_inserter( assign_detail::call_push_front<C>( c ),
+ p );
+ }
+
+ template< class C >
+ inline list_inserter< assign_detail::call_insert<C>,
+ BOOST_DEDUCED_TYPENAME C::value_type >
+ insert( C& c )
+ {
+ static BOOST_DEDUCED_TYPENAME C::value_type* p = 0;
+ return make_list_inserter( assign_detail::call_insert<C>( c ),
+ p );
+ }
+
+ template< class C >
+ inline list_inserter< assign_detail::call_push<C>,
+ BOOST_DEDUCED_TYPENAME C::value_type >
+ push( C& c )
+ {
+ static BOOST_DEDUCED_TYPENAME C::value_type* p = 0;
+ return make_list_inserter( assign_detail::call_push<C>( c ),
+ p );
+ }
+
+ template< class C >
+ inline list_inserter< assign_detail::call_add_edge<C> >
+ add_edge( C& c )
+ {
+ return make_list_inserter( assign_detail::call_add_edge<C>( c ) );
+ }
+
+} // namespace 'assign'
+} // namespace 'boost'
+
+#undef BOOST_ASSIGN_PARAMS1
+#undef BOOST_ASSIGN_PARAMS2
+#undef BOOST_ASSIGN_PARAMS3
+#undef BOOST_ASSIGN_MAX_PARAMETERS
+
+#endif
diff --git a/boost/boost/assign/list_of.hpp b/boost/boost/assign/list_of.hpp
new file mode 100644
index 00000000000..b203ff3fb11
--- /dev/null
+++ b/boost/boost/assign/list_of.hpp
@@ -0,0 +1,593 @@
+// Boost.Assign library
+//
+// Copyright Thorsten Ottosen 2003-2004. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/assign/
+//
+
+
+#ifndef BOOST_ASSIGN_LIST_OF_HPP
+#define BOOST_ASSIGN_LIST_OF_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/assign/assignment_exception.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/config.hpp>
+#include <boost/tuple/tuple.hpp>
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/type_traits/is_reference.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/detail/yes_no_type.hpp>
+#include <boost/type_traits/decay.hpp>
+#include <boost/type_traits/is_array.hpp>
+#include <boost/mpl/if.hpp>
+#include <deque>
+#include <cstddef>
+#include <utility>
+
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/iteration/local.hpp>
+
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+// BCB requires full type definition for is_array<> to work correctly.
+#include <boost/array.hpp>
+#endif
+
+namespace boost
+{
+
+// this here is necessary to avoid compiler error in <boost/array.hpp>
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+ template< class T, std::size_t sz >
+ class array;
+#endif
+
+namespace assign_detail
+{
+ /////////////////////////////////////////////////////////////////////////
+ // Part 0: common conversion code
+ /////////////////////////////////////////////////////////////////////////
+
+ template< class T >
+ struct assign_decay
+ {
+ //
+ // Add constness to array parameters
+ // to support string literals properly
+ //
+ typedef BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ ::boost::is_array<T>,
+ ::boost::decay<const T>,
+ ::boost::decay<T> >::type type;
+ };
+
+ template< class T, std::size_t sz >
+ type_traits::yes_type assign_is_array( const array<T,sz>* );
+ type_traits::no_type assign_is_array( ... );
+ template< class T, class U >
+ type_traits::yes_type assign_is_pair( const std::pair<T,U>* );
+ type_traits::no_type assign_is_pair( ... );
+
+
+
+ struct array_type_tag
+ {
+ #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+ private:
+ char dummy_; // BCB would by default use 8 bytes
+ #endif
+ };
+ struct adapter_type_tag
+ {
+ #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+ private:
+ char dummy_; // BCB would by default use 8 bytes
+ #endif
+ };
+ struct pair_type_tag
+ {
+ #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+ private:
+ char dummy_; // BCB would by default use 8 bytes
+ #endif
+ };
+ struct default_type_tag
+ {
+ #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+ private:
+ char dummy_; // BCB would by default use 8 bytes
+ #endif
+ };
+
+
+
+ template< class DerivedTAssign >
+ class converter
+ {
+ public:
+
+ template< class Container >
+ Container convert_to_container() const
+ {
+ static Container* c = 0;
+ BOOST_STATIC_CONSTANT( bool, is_array_flag = sizeof( assign_detail::assign_is_array( c ) )
+ == sizeof( type_traits::yes_type ) );
+
+ typedef BOOST_DEDUCED_TYPENAME mpl::if_c< is_array_flag,
+ array_type_tag,
+ default_type_tag >::type tag_type;
+
+ return convert<Container>( c, tag_type() );
+ }
+
+ private:
+
+ template< class Container >
+ Container convert( const Container*, default_type_tag ) const
+ {
+
+#if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1)
+// old Dinkumware doesn't support iterator type as template
+ Container result;
+ BOOST_DEDUCED_TYPENAME DerivedTAssign::iterator
+ it = static_cast<const DerivedTAssign*>(this)->begin(),
+ end = static_cast<const DerivedTAssign*>(this)->end();
+ while( it != end )
+ {
+ result.insert( result.end(), *it );
+ ++it;
+ }
+ return result;
+#else
+ return Container( static_cast<const DerivedTAssign*>(this)->begin(),
+ static_cast<const DerivedTAssign*>(this)->end() );
+#endif
+ }
+
+ template< class Array >
+ Array convert( const Array*, array_type_tag ) const
+ {
+ typedef BOOST_DEDUCED_TYPENAME Array::value_type value_type;
+
+#if BOOST_WORKAROUND(BOOST_INTEL, <= 910 ) || BOOST_WORKAROUND(__SUNPRO_CC, <= 0x580 )
+ BOOST_DEDUCED_TYPENAME remove_const<Array>::type ar;
+#else
+ Array ar;
+#endif
+ const std::size_t sz = ar.size();
+ if( sz < static_cast<const DerivedTAssign*>(this)->size() )
+ throw assign::assignment_exception( "array initialized with too many elements" );
+ std::size_t n = 0;
+ BOOST_DEDUCED_TYPENAME DerivedTAssign::iterator
+ i = static_cast<const DerivedTAssign*>(this)->begin(),
+ end = static_cast<const DerivedTAssign*>(this)->end();
+ for( ; i != end; ++i, ++n )
+ ar[n] = *i;
+ for( ; n < sz; ++n )
+ ar[n] = value_type();
+ return ar;
+ }
+
+ template< class Adapter >
+ Adapter convert_to_adapter( const Adapter* = 0 ) const
+ {
+ Adapter a;
+ BOOST_DEDUCED_TYPENAME DerivedTAssign::iterator
+ i = static_cast<const DerivedTAssign*>(this)->begin(),
+ end = static_cast<const DerivedTAssign*>(this)->end();
+ for( ; i != end; ++i )
+ a.push( *i );
+ return a;
+ }
+
+ private:
+ struct adapter_converter;
+ friend struct adapter_converter;
+
+ struct adapter_converter
+ {
+ const converter& gl;
+ adapter_converter( const converter& this_ ) : gl( this_ )
+ {}
+
+ adapter_converter( const adapter_converter& r )
+ : gl( r.gl )
+ { }
+
+ template< class Adapter >
+ operator Adapter() const
+ {
+ return gl.convert_to_adapter<Adapter>();
+ }
+ };
+
+ public:
+ template< class Container >
+ Container to_container( Container& c ) const
+ {
+ return convert( &c, default_type_tag() );
+ }
+
+ adapter_converter to_adapter() const
+ {
+ return adapter_converter( *this );
+ }
+
+ template< class Adapter >
+ Adapter to_adapter( Adapter& a ) const
+ {
+ return this->convert_to_adapter( &a );
+ }
+
+ template< class Array >
+ Array to_array( Array& a ) const
+ {
+ return convert( &a, array_type_tag() );
+ }
+ };
+
+ /////////////////////////////////////////////////////////////////////////
+ // Part 1: flexible, but inefficient interface
+ /////////////////////////////////////////////////////////////////////////
+
+ template< class T >
+ class generic_list :
+ public converter< generic_list< BOOST_DEDUCED_TYPENAME assign_decay<T>::type > >
+ {
+ typedef converter< generic_list< BOOST_DEDUCED_TYPENAME assign_decay<T>::type > >
+ base_type;
+ typedef BOOST_DEDUCED_TYPENAME assign_decay<T>::type Ty;
+ typedef std::deque<Ty> impl_type;
+ mutable impl_type values_;
+
+ public:
+ typedef BOOST_DEDUCED_TYPENAME impl_type::iterator iterator;
+ typedef BOOST_DEDUCED_TYPENAME impl_type::const_iterator const_iterator;
+ typedef BOOST_DEDUCED_TYPENAME impl_type::value_type value_type;
+ typedef BOOST_DEDUCED_TYPENAME impl_type::size_type size_type;
+ typedef BOOST_DEDUCED_TYPENAME impl_type::difference_type difference_type;
+
+ public:
+ iterator begin() const { return values_.begin(); }
+ iterator end() const { return values_.end(); }
+ bool empty() const { return values_.empty(); }
+ size_type size() const { return values_.size(); }
+
+ private:
+ void push_back( value_type r ) { values_.push_back( r ); }
+
+ public:
+ generic_list& operator,( const Ty& u )
+ {
+ this->push_back( u );
+ return *this;
+ }
+
+ generic_list& operator()()
+ {
+ this->push_back( Ty() );
+ return *this;
+ }
+
+ generic_list& operator()( const Ty& u )
+ {
+ this->push_back( u );
+ return *this;
+ }
+
+
+#ifndef BOOST_ASSIGN_MAX_PARAMS // use user's value
+#define BOOST_ASSIGN_MAX_PARAMS 5
+#endif
+#define BOOST_ASSIGN_MAX_PARAMETERS (BOOST_ASSIGN_MAX_PARAMS - 1)
+#define BOOST_ASSIGN_PARAMS1(n) BOOST_PP_ENUM_PARAMS(n, class U)
+#define BOOST_ASSIGN_PARAMS2(n) BOOST_PP_ENUM_BINARY_PARAMS(n, U, const& u)
+#define BOOST_ASSIGN_PARAMS3(n) BOOST_PP_ENUM_PARAMS(n, u)
+#define BOOST_ASSIGN_PARAMS4(n) BOOST_PP_ENUM_PARAMS(n, U)
+#define BOOST_ASSIGN_PARAMS2_NO_REF(n) BOOST_PP_ENUM_BINARY_PARAMS(n, U, u)
+
+#define BOOST_PP_LOCAL_LIMITS (1, BOOST_ASSIGN_MAX_PARAMETERS)
+#define BOOST_PP_LOCAL_MACRO(n) \
+ template< class U, BOOST_ASSIGN_PARAMS1(n) > \
+ generic_list& operator()(U const& u, BOOST_ASSIGN_PARAMS2(n) ) \
+ { \
+ this->push_back( Ty(u, BOOST_ASSIGN_PARAMS3(n))); \
+ return *this; \
+ } \
+ /**/
+
+#include BOOST_PP_LOCAL_ITERATE()
+
+
+ template< class U >
+ generic_list& repeat( std::size_t sz, U u )
+ {
+ std::size_t i = 0;
+ while( i++ != sz )
+ this->push_back( u );
+ return *this;
+ }
+
+ template< class Nullary_function >
+ generic_list& repeat_fun( std::size_t sz, Nullary_function fun )
+ {
+ std::size_t i = 0;
+ while( i++ != sz )
+ this->push_back( fun() );
+ return *this;
+ }
+
+ template< class SinglePassIterator >
+ generic_list& range( SinglePassIterator first,
+ SinglePassIterator last )
+ {
+ for( ; first != last; ++first )
+ this->push_back( *first );
+ return *this;
+ }
+
+ template< class SinglePassRange >
+ generic_list& range( const SinglePassRange& r )
+ {
+ return range( boost::begin(r), boost::end(r) );
+ }
+
+ template< class Container >
+ operator Container() const
+ {
+ return this-> BOOST_NESTED_TEMPLATE convert_to_container<Container>();
+ }
+ };
+
+ /////////////////////////////////////////////////////////////////////////
+ // Part 2: efficient, but inconvenient interface
+ /////////////////////////////////////////////////////////////////////////
+
+ template< class T >
+ struct assign_reference
+ {
+ assign_reference()
+ { /* intentionally empty */ }
+
+ assign_reference( T& r ) : ref_(&r)
+ { }
+
+ void operator=( T& r )
+ {
+ ref_ = &r;
+ }
+
+ operator T&() const
+ {
+ return *ref_;
+ }
+
+ void swap( assign_reference& r )
+ {
+ std::swap( *ref_, *r.ref_ );
+ }
+
+ T& get_ref() const
+ {
+ return *ref_;
+ }
+
+ private:
+ T* ref_;
+
+ };
+
+ template< class T >
+ inline bool operator<( const assign_reference<T>& l,
+ const assign_reference<T>& r )
+ {
+ return l.get_ref() < r.get_ref();
+ }
+
+ template< class T >
+ inline bool operator>( const assign_reference<T>& l,
+ const assign_reference<T>& r )
+ {
+ return l.get_ref() > r.get_ref();
+ }
+
+ template< class T >
+ inline void swap( assign_reference<T>& l,
+ assign_reference<T>& r )
+ {
+ l.swap( r );
+ }
+
+
+
+ template< class T, int N >
+ struct static_generic_list :
+ public converter< static_generic_list<T,N> >
+ {
+ private:
+ typedef converter< static_generic_list<T,N> > base_class;
+ typedef T internal_value_type;
+
+ public:
+ typedef assign_reference<internal_value_type> value_type;
+ typedef value_type* iterator;
+ typedef const value_type* const_iterator;
+ typedef std::size_t size_type;
+ typedef std::ptrdiff_t difference_type;
+
+
+ static_generic_list( T& r ) :
+ current_(1)
+ {
+ refs_[0] = r;
+ }
+
+ static_generic_list& operator()( T& r )
+ {
+ insert( r );
+ return *this;
+ }
+
+ iterator begin() const
+ {
+ return &refs_[0];
+ }
+
+ iterator end() const
+ {
+ return &refs_[current_];
+ }
+
+ size_type size() const
+ {
+ return static_cast<size_type>( current_ );
+ }
+
+ bool empty() const
+ {
+ return false;
+ }
+
+ template< class ForwardIterator >
+ static_generic_list& range( ForwardIterator first,
+ ForwardIterator last )
+ {
+ for( ; first != last; ++first )
+ this->insert( *first );
+ return *this;
+ }
+
+ template< class ForwardRange >
+ static_generic_list& range( ForwardRange& r )
+ {
+ return range( boost::begin(r), boost::end(r) );
+ }
+
+ template< class ForwardRange >
+ static_generic_list& range( const ForwardRange& r )
+ {
+ return range( boost::begin(r), boost::end(r) );
+ }
+
+ template< class Container >
+ operator Container() const
+ {
+ return this-> BOOST_NESTED_TEMPLATE convert_to_container<Container>();
+ }
+
+ private:
+ void insert( T& r )
+ {
+ refs_[current_] = r;
+ ++current_;
+ }
+
+ static_generic_list();
+
+ mutable assign_reference<internal_value_type> refs_[N];
+ int current_;
+ };
+
+} // namespace 'assign_detail'
+
+namespace assign
+{
+ template< class T >
+ inline assign_detail::generic_list<T>
+ list_of()
+ {
+ return assign_detail::generic_list<T>()( T() );
+ }
+
+ template< class T >
+ inline assign_detail::generic_list<T>
+ list_of( const T& t )
+ {
+ return assign_detail::generic_list<T>()( t );
+ }
+
+ template< int N, class T >
+ inline assign_detail::static_generic_list< BOOST_DEDUCED_TYPENAME assign_detail::assign_decay<T>::type,N>
+ ref_list_of( T& t )
+ {
+ return assign_detail::static_generic_list<BOOST_DEDUCED_TYPENAME assign_detail::assign_decay<T>::type,N>( t );
+ }
+
+ template< int N, class T >
+ inline assign_detail::static_generic_list<const BOOST_DEDUCED_TYPENAME assign_detail::assign_decay<T>::type,N>
+ cref_list_of( const T& t )
+ {
+ return assign_detail::static_generic_list<const BOOST_DEDUCED_TYPENAME assign_detail::assign_decay<T>::type,N>( t );
+ }
+
+#define BOOST_PP_LOCAL_LIMITS (1, BOOST_ASSIGN_MAX_PARAMETERS)
+#define BOOST_PP_LOCAL_MACRO(n) \
+ template< class T, class U, BOOST_ASSIGN_PARAMS1(n) > \
+ inline assign_detail::generic_list<T> \
+ list_of(U const& u, BOOST_ASSIGN_PARAMS2(n) ) \
+ { \
+ return assign_detail::generic_list<T>()(u, BOOST_ASSIGN_PARAMS3(n)); \
+ } \
+ /**/
+
+#include BOOST_PP_LOCAL_ITERATE()
+
+#define BOOST_PP_LOCAL_LIMITS (1, BOOST_ASSIGN_MAX_PARAMETERS)
+#define BOOST_PP_LOCAL_MACRO(n) \
+ template< class U, BOOST_ASSIGN_PARAMS1(n) > \
+ inline assign_detail::generic_list< tuple<U, BOOST_ASSIGN_PARAMS4(n)> > \
+ tuple_list_of(U u, BOOST_ASSIGN_PARAMS2_NO_REF(n) ) \
+ { \
+ return assign_detail::generic_list< tuple<U, BOOST_ASSIGN_PARAMS4(n)> >()( tuple<U,BOOST_ASSIGN_PARAMS4(n)>( u, BOOST_ASSIGN_PARAMS3(n) )); \
+ } \
+ /**/
+
+#include BOOST_PP_LOCAL_ITERATE()
+
+
+ template< class Key, class T >
+ inline assign_detail::generic_list< std::pair
+ <
+ BOOST_DEDUCED_TYPENAME assign_detail::assign_decay<Key>::type,
+ BOOST_DEDUCED_TYPENAME assign_detail::assign_decay<T>::type
+ > >
+ map_list_of( const Key& k, const T& t )
+ {
+ typedef BOOST_DEDUCED_TYPENAME assign_detail::assign_decay<Key>::type k_type;
+ typedef BOOST_DEDUCED_TYPENAME assign_detail::assign_decay<T>::type t_type;
+ return assign_detail::generic_list< std::pair<k_type,t_type> >()( k, t );
+ }
+
+ template< class F, class S >
+ inline assign_detail::generic_list< std::pair
+ <
+ BOOST_DEDUCED_TYPENAME assign_detail::assign_decay<F>::type,
+ BOOST_DEDUCED_TYPENAME assign_detail::assign_decay<S>::type
+ > >
+ pair_list_of( const F& f, const S& s )
+ {
+ return map_list_of( f, s );
+ }
+
+
+} // namespace 'assign'
+} // namespace 'boost'
+
+
+#undef BOOST_ASSIGN_PARAMS1
+#undef BOOST_ASSIGN_PARAMS2
+#undef BOOST_ASSIGN_PARAMS3
+#undef BOOST_ASSIGN_PARAMS4
+#undef BOOST_ASSIGN_PARAMS2_NO_REF
+#undef BOOST_ASSIGN_MAX_PARAMETERS
+
+#endif
diff --git a/boost/boost/assign/ptr_list_inserter.hpp b/boost/boost/assign/ptr_list_inserter.hpp
new file mode 100644
index 00000000000..c2ac3d8bcbd
--- /dev/null
+++ b/boost/boost/assign/ptr_list_inserter.hpp
@@ -0,0 +1,164 @@
+// Boost.Assign library
+//
+// Copyright Thorsten Ottosen 2003-2005. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/assign/
+//
+
+#ifndef BOOST_ASSIGN_PTR_LIST_INSERTER_HPP
+#define BOOST_ASSIGN_PTR_LIST_INSERTER_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/assign/list_inserter.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/type_traits/remove_pointer.hpp>
+
+namespace boost
+{
+
+namespace assign
+{
+ template< class Function, class Obj >
+ class ptr_list_inserter
+ {
+ typedef BOOST_DEDUCED_TYPENAME
+ remove_pointer< BOOST_DEDUCED_TYPENAME
+ remove_reference<Obj>::type >::type
+ obj_type;
+ public:
+
+ ptr_list_inserter( Function fun ) : insert_( fun )
+ {}
+
+ template< class Function2, class Obj2 >
+ ptr_list_inserter( const ptr_list_inserter<Function2,Obj2>& r )
+ : insert_( r.fun_private() )
+ {}
+
+ ptr_list_inserter( const ptr_list_inserter& r ) : insert_( r.insert_ )
+ {}
+
+ ptr_list_inserter& operator()()
+ {
+ insert_( new obj_type() );
+ return *this;
+ }
+
+ template< class T >
+ ptr_list_inserter& operator()( const T& t )
+ {
+ insert_( new obj_type(t) );
+ return *this;
+ }
+
+#ifndef BOOST_ASSIGN_MAX_PARAMS // use user's value
+#define BOOST_ASSIGN_MAX_PARAMS 5
+#endif
+#define BOOST_ASSIGN_MAX_PARAMETERS (BOOST_ASSIGN_MAX_PARAMS - 1)
+#define BOOST_ASSIGN_PARAMS1(n) BOOST_PP_ENUM_PARAMS(n, class T)
+#define BOOST_ASSIGN_PARAMS2(n) BOOST_PP_ENUM_BINARY_PARAMS(n, T, const& t)
+#define BOOST_ASSIGN_PARAMS3(n) BOOST_PP_ENUM_PARAMS(n, t)
+
+#define BOOST_PP_LOCAL_LIMITS (1, BOOST_ASSIGN_MAX_PARAMETERS)
+#define BOOST_PP_LOCAL_MACRO(n) \
+ template< class T, BOOST_ASSIGN_PARAMS1(n) > \
+ ptr_list_inserter& operator()( const T& t, BOOST_ASSIGN_PARAMS2(n) ) \
+ { \
+ insert_( new obj_type(t, BOOST_ASSIGN_PARAMS3(n) )); \
+ return *this; \
+ } \
+ /**/
+
+#include BOOST_PP_LOCAL_ITERATE()
+
+ private:
+
+ ptr_list_inserter& operator=( const ptr_list_inserter& );
+ Function insert_;
+ };
+
+ template< class Obj, class Function >
+ inline ptr_list_inserter< Function, Obj >
+ make_ptr_list_inserter( Function fun )
+ {
+ return ptr_list_inserter< Function, Obj >( fun );
+ }
+
+ template< class C >
+ inline ptr_list_inserter< assign_detail::call_push_back<C>,
+ BOOST_DEDUCED_TYPENAME C::reference >
+ ptr_push_back( C& c )
+ {
+ return make_ptr_list_inserter<BOOST_DEDUCED_TYPENAME C::reference>
+ ( assign_detail::call_push_back<C>( c ) );
+ }
+
+#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+ template< class T, class C >
+ inline ptr_list_inserter< assign_detail::call_push_back<C>, T >
+ ptr_push_back( C& c )
+ {
+ return make_ptr_list_inserter<T>(
+ assign_detail::call_push_back<C>( c ) );
+ }
+
+#endif
+
+ template< class C >
+ inline ptr_list_inserter< assign_detail::call_push_front<C>,
+ BOOST_DEDUCED_TYPENAME C::reference >
+ ptr_push_front( C& c )
+ {
+ return make_ptr_list_inserter<BOOST_DEDUCED_TYPENAME C::reference>
+ ( assign_detail::call_push_front<C>( c ) );
+ }
+
+#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+ template< class T, class C >
+ inline ptr_list_inserter< assign_detail::call_push_front<C>, T >
+ ptr_push_front( C& c )
+ {
+ return make_ptr_list_inserter<T>(
+ assign_detail::call_push_front<C>( c ) );
+ }
+
+#endif
+
+ template< class C >
+ inline ptr_list_inserter< assign_detail::call_insert<C>,
+ BOOST_DEDUCED_TYPENAME C::reference>
+ ptr_insert( C& c )
+ {
+ return make_ptr_list_inserter<BOOST_DEDUCED_TYPENAME C::reference>
+ ( assign_detail::call_insert<C>( c ) );
+ }
+
+#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+ template< class T, class C >
+ inline ptr_list_inserter< assign_detail::call_insert<C>, T >
+ ptr_insert( C& c )
+ {
+ return make_ptr_list_inserter<T>( assign_detail::call_insert<C>( c ) );
+ }
+
+#endif
+
+
+} // namespace 'assign'
+} // namespace 'boost'
+
+#undef BOOST_ASSIGN_PARAMS1
+#undef BOOST_ASSIGN_PARAMS2
+#undef BOOST_ASSIGN_PARAMS3
+#undef BOOST_ASSIGN_MAX_PARAMETERS
+
+#endif
diff --git a/boost/boost/assign/ptr_list_of.hpp b/boost/boost/assign/ptr_list_of.hpp
new file mode 100644
index 00000000000..c06dbae677f
--- /dev/null
+++ b/boost/boost/assign/ptr_list_of.hpp
@@ -0,0 +1,185 @@
+// Boost.Assign library
+//
+// Copyright Thorsten Ottosen 2003-2005. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/assign/
+//
+
+
+#ifndef BOOST_ASSIGN_PTR_LIST_OF_HPP
+#define BOOST_ASSIGN_PTR_LIST_OF_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/assign/assignment_exception.hpp>
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/type_traits/is_reference.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/detail/yes_no_type.hpp>
+#include <boost/type_traits/decay.hpp>
+#include <boost/type_traits/is_array.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/ptr_container/ptr_vector.hpp>
+
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/iteration/local.hpp>
+
+namespace boost
+{
+
+namespace assign_detail
+{
+ /////////////////////////////////////////////////////////////////////////
+ // Part 0: flexible and efficient interface
+ /////////////////////////////////////////////////////////////////////////
+ template< class T >
+ class generic_ptr_list
+ {
+ protected:
+ typedef boost::ptr_vector<T> impl_type;
+ typedef std::auto_ptr<impl_type> release_type;
+ mutable impl_type values_;
+
+ public:
+ typedef BOOST_DEDUCED_TYPENAME impl_type::iterator iterator;
+ typedef BOOST_DEDUCED_TYPENAME impl_type::const_iterator const_iterator;
+ typedef BOOST_DEDUCED_TYPENAME impl_type::value_type value_type;
+ typedef BOOST_DEDUCED_TYPENAME impl_type::size_type size_type;
+ typedef BOOST_DEDUCED_TYPENAME impl_type::difference_type difference_type;
+ public:
+ generic_ptr_list() : values_( 32u )
+ { }
+
+ generic_ptr_list( const generic_ptr_list& r )
+ {
+ values_.swap(r.values_);
+ }
+
+ generic_ptr_list( release_type r ) : values_(r)
+ { }
+
+ release_type release()
+ {
+ return values_.release();
+ }
+
+ public:
+ iterator begin() const { return values_.begin(); }
+ iterator end() const { return values_.end(); }
+ bool empty() const { return values_.empty(); }
+ size_type size() const { return values_.size(); }
+
+ public:
+
+ template< class PtrContainer >
+ operator std::auto_ptr<PtrContainer>() const
+ {
+ PtrContainer* type = 0;
+ return convert( type );
+ }
+
+ template< class PtrContainer >
+ std::auto_ptr<PtrContainer> convert( const PtrContainer* c ) const
+ {
+ std::auto_ptr<PtrContainer> res( new PtrContainer() );
+ while( !empty() )
+ res->insert( res->end(),
+ values_.pop_back().release() );
+ return res;
+ }
+
+ template< class PtrContainer >
+ std::auto_ptr<PtrContainer> to_container( const PtrContainer& c ) const
+ {
+ return convert( &c );
+ }
+
+ protected:
+ void push_back( T* r ) { values_.push_back( r ); }
+
+ public:
+ generic_ptr_list& operator()()
+ {
+ this->push_back( new T() );
+ return *this;
+ }
+
+ template< class U >
+ generic_ptr_list& operator()( const U& u )
+ {
+ this->push_back( new T(u) );
+ return *this;
+ }
+
+
+#ifndef BOOST_ASSIGN_MAX_PARAMS // use user's value
+#define BOOST_ASSIGN_MAX_PARAMS 5
+#endif
+#define BOOST_ASSIGN_MAX_PARAMETERS (BOOST_ASSIGN_MAX_PARAMS - 1)
+#define BOOST_ASSIGN_PARAMS1(n) BOOST_PP_ENUM_PARAMS(n, class U)
+#define BOOST_ASSIGN_PARAMS2(n) BOOST_PP_ENUM_BINARY_PARAMS(n, U, const& u)
+#define BOOST_ASSIGN_PARAMS3(n) BOOST_PP_ENUM_PARAMS(n, u)
+
+#define BOOST_PP_LOCAL_LIMITS (1, BOOST_ASSIGN_MAX_PARAMETERS)
+#define BOOST_PP_LOCAL_MACRO(n) \
+ template< class U, BOOST_ASSIGN_PARAMS1(n) > \
+ generic_ptr_list& operator()(U const& u, BOOST_ASSIGN_PARAMS2(n) ) \
+ { \
+ this->push_back( new T(u, BOOST_ASSIGN_PARAMS3(n))); \
+ return *this; \
+ } \
+ /**/
+
+#include BOOST_PP_LOCAL_ITERATE()
+
+ }; // class 'generic_ptr_list'
+
+} // namespace 'assign_detail'
+
+namespace assign
+{
+ template< class T >
+ inline assign_detail::generic_ptr_list<T>
+ ptr_list_of()
+ {
+ return assign_detail::generic_ptr_list<T>()();
+ }
+
+ template< class T, class U >
+ inline assign_detail::generic_ptr_list<T>
+ ptr_list_of( const U& t )
+ {
+ return assign_detail::generic_ptr_list<T>()( t );
+ }
+
+
+#define BOOST_PP_LOCAL_LIMITS (1, BOOST_ASSIGN_MAX_PARAMETERS)
+#define BOOST_PP_LOCAL_MACRO(n) \
+ template< class T, class U, BOOST_ASSIGN_PARAMS1(n) > \
+ inline assign_detail::generic_ptr_list<T> \
+ ptr_list_of(U const& u, BOOST_ASSIGN_PARAMS2(n) ) \
+ { \
+ return assign_detail::generic_ptr_list<T>()(u, BOOST_ASSIGN_PARAMS3(n)); \
+ } \
+ /**/
+
+#include BOOST_PP_LOCAL_ITERATE()
+
+
+} // namespace 'assign'
+} // namespace 'boost'
+
+
+#undef BOOST_ASSIGN_PARAMS1
+#undef BOOST_ASSIGN_PARAMS2
+#undef BOOST_ASSIGN_PARAMS3
+#undef BOOST_ASSIGN_MAX_PARAMETERS
+
+#endif
diff --git a/boost/boost/assign/ptr_map_inserter.hpp b/boost/boost/assign/ptr_map_inserter.hpp
new file mode 100644
index 00000000000..c45aeb83515
--- /dev/null
+++ b/boost/boost/assign/ptr_map_inserter.hpp
@@ -0,0 +1,103 @@
+// Boost.Assign library
+//
+// Copyright Thorsten Ottosen 2006. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/assign/
+//
+
+#ifndef BOOST_ASSIGN_PTR_CONTAINER_PTR_MAP_INSERTER_HPP
+#define BOOST_ASSIGN_PTR_CONTAINER_PTR_MAP_INSERTER_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/assign/list_inserter.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/type_traits/remove_pointer.hpp>
+
+namespace boost
+{
+
+namespace assign
+{
+ template< class PtrMap, class Obj >
+ class ptr_map_inserter
+ {
+ typedef BOOST_DEDUCED_TYPENAME
+ remove_pointer< BOOST_DEDUCED_TYPENAME
+ remove_reference<Obj>::type >::type
+ obj_type;
+ typedef BOOST_DEDUCED_TYPENAME PtrMap::key_type
+ key_type;
+
+ public:
+
+ ptr_map_inserter( PtrMap& m ) : m_( m )
+ {}
+
+ template< class Key >
+ ptr_map_inserter& operator()( const Key& t )
+ {
+ key_type k(t);
+ m_.insert( k, new obj_type );
+ return *this;
+ }
+
+#ifndef BOOST_ASSIGN_MAX_PARAMS // use user's value
+#define BOOST_ASSIGN_MAX_PARAMS 6
+#endif
+#define BOOST_ASSIGN_MAX_PARAMETERS (BOOST_ASSIGN_MAX_PARAMS - 1)
+#define BOOST_ASSIGN_PARAMS1(n) BOOST_PP_ENUM_PARAMS(n, class T)
+#define BOOST_ASSIGN_PARAMS2(n) BOOST_PP_ENUM_BINARY_PARAMS(n, T, const& t)
+#define BOOST_ASSIGN_PARAMS3(n) BOOST_PP_ENUM_PARAMS(n, t)
+
+#define BOOST_PP_LOCAL_LIMITS (1, BOOST_ASSIGN_MAX_PARAMETERS)
+#define BOOST_PP_LOCAL_MACRO(n) \
+ template< class T, BOOST_ASSIGN_PARAMS1(n) > \
+ ptr_map_inserter& operator()( const T& t, BOOST_ASSIGN_PARAMS2(n) ) \
+ { \
+ key_type k(t); \
+ m_.insert( k, new obj_type( BOOST_ASSIGN_PARAMS3(n) ) ); \
+ return *this; \
+ } \
+ /**/
+
+#include BOOST_PP_LOCAL_ITERATE()
+
+ private:
+
+ ptr_map_inserter& operator=( const ptr_map_inserter& );
+ PtrMap& m_;
+ };
+
+ template< class PtrMap >
+ inline ptr_map_inserter< PtrMap, typename PtrMap::mapped_reference >
+ ptr_map_insert( PtrMap& m )
+ {
+ return ptr_map_inserter< PtrMap, typename PtrMap::mapped_reference >( m );
+ }
+
+#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+ template< class T, class PtrMap >
+ inline ptr_map_inserter< PtrMap, T >
+ ptr_map_insert( PtrMap& m )
+ {
+ return ptr_map_inserter< PtrMap, T >( m );
+ }
+
+#endif
+
+} // namespace 'assign'
+} // namespace 'boost'
+
+#undef BOOST_ASSIGN_PARAMS1
+#undef BOOST_ASSIGN_PARAMS2
+#undef BOOST_ASSIGN_PARAMS3
+#undef BOOST_ASSIGN_MAX_PARAMETERS
+
+#endif
diff --git a/boost/boost/assign/std.hpp b/boost/boost/assign/std.hpp
new file mode 100644
index 00000000000..2cdec96f6eb
--- /dev/null
+++ b/boost/boost/assign/std.hpp
@@ -0,0 +1,27 @@
+// Boost.Assign library
+//
+// Copyright Thorsten Ottosen 2003-2004. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/assign/
+//
+
+#ifndef BOOST_ASSIGN_STD_HPP
+#define BOOST_ASSIGN_STD_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/assign/std/vector.hpp>
+#include <boost/assign/std/deque.hpp>
+#include <boost/assign/std/list.hpp>
+#include <boost/assign/std/slist.hpp>
+#include <boost/assign/std/stack.hpp>
+#include <boost/assign/std/queue.hpp>
+#include <boost/assign/std/set.hpp>
+#include <boost/assign/std/map.hpp>
+
+#endif
diff --git a/boost/boost/assign/std/deque.hpp b/boost/boost/assign/std/deque.hpp
new file mode 100644
index 00000000000..3546a0fc78b
--- /dev/null
+++ b/boost/boost/assign/std/deque.hpp
@@ -0,0 +1,38 @@
+// Boost.Assign library
+//
+// Copyright Thorsten Ottosen 2003-2004. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/assign/
+//
+
+
+#ifndef BOOST_ASSIGN_STD_DEQUE_HPP
+#define BOOST_ASSIGN_STD_DEQUE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/assign/list_inserter.hpp>
+#include <boost/config.hpp>
+#include <deque>
+
+namespace boost
+{
+namespace assign
+{
+
+ template< class V, class A, class V2 >
+ inline list_inserter< assign_detail::call_push_back< std::deque<V,A> >, V >
+ operator+=( std::deque<V,A>& c, V2 v )
+ {
+ return push_back( c )( v );
+ }
+
+}
+}
+
+#endif
diff --git a/boost/boost/assign/std/list.hpp b/boost/boost/assign/std/list.hpp
new file mode 100644
index 00000000000..2404b04663d
--- /dev/null
+++ b/boost/boost/assign/std/list.hpp
@@ -0,0 +1,38 @@
+// Boost.Assign library
+//
+// Copyright Thorsten Ottosen 2003-2004. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/assign/
+//
+
+
+#ifndef BOOST_ASSIGN_STD_LIST_HPP
+#define BOOST_ASSIGN_STD_LIST_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/assign/list_inserter.hpp>
+#include <boost/config.hpp>
+#include <list>
+
+namespace boost
+{
+namespace assign
+{
+
+ template< class V, class A, class V2 >
+ inline list_inserter< assign_detail::call_push_back< std::list<V,A> >, V >
+ operator+=( std::list<V,A>& c, V2 v )
+ {
+ return push_back( c )( v );
+ }
+
+}
+}
+
+#endif
diff --git a/boost/boost/assign/std/map.hpp b/boost/boost/assign/std/map.hpp
new file mode 100644
index 00000000000..4937492c865
--- /dev/null
+++ b/boost/boost/assign/std/map.hpp
@@ -0,0 +1,45 @@
+// Boost.Assign library
+//
+// Copyright Thorsten Ottosen 2003-2004. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/assign/
+//
+
+
+#ifndef BOOST_ASSIGN_STD_MAP_HPP
+#define BOOST_ASSIGN_STD_MAP_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/assign/list_inserter.hpp>
+#include <boost/config.hpp>
+#include <map>
+
+namespace boost
+{
+namespace assign
+{
+
+ template< class K, class V, class C, class A, class P >
+ inline list_inserter< assign_detail::call_insert< std::map<K,V,C,A> >, P >
+ operator+=( std::map<K,V,C,A>& m, const P& p )
+ {
+ return insert( m )( p );
+ }
+
+ template< class K, class V, class C, class A, class P >
+ inline list_inserter< assign_detail::call_insert< std::multimap<K,V,C,A> >, P >
+ operator+=( std::multimap<K,V,C,A>& m, const P& p )
+ {
+ return insert( m )( p );
+ }
+
+}
+}
+
+#endif
diff --git a/boost/boost/assign/std/queue.hpp b/boost/boost/assign/std/queue.hpp
new file mode 100644
index 00000000000..a9dea3955d2
--- /dev/null
+++ b/boost/boost/assign/std/queue.hpp
@@ -0,0 +1,45 @@
+// Boost.Assign library
+//
+// Copyright Thorsten Ottosen 2003-2004. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/assign/
+//
+
+
+#ifndef BOOST_ASSIGN_STD_QUEUE_HPP
+#define BOOST_ASSIGN_STD_QUEUE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/assign/list_inserter.hpp>
+#include <boost/config.hpp>
+#include <queue>
+
+namespace boost
+{
+namespace assign
+{
+
+ template< class V, class C, class V2 >
+ inline list_inserter< assign_detail::call_push< std::queue<V,C> >, V >
+ operator+=( std::queue<V,C>& c, V2 v )
+ {
+ return push( c )( v );
+ }
+
+ template< class V, class C, class V2 >
+ inline list_inserter< assign_detail::call_push< std::priority_queue<V,C> >, V >
+ operator+=( std::priority_queue<V,C>& c, V2 v )
+ {
+ return push( c )( v );
+ }
+
+}
+}
+
+#endif
diff --git a/boost/boost/assign/std/set.hpp b/boost/boost/assign/std/set.hpp
new file mode 100644
index 00000000000..9ad79ef73a1
--- /dev/null
+++ b/boost/boost/assign/std/set.hpp
@@ -0,0 +1,44 @@
+// Boost.Assign library
+//
+// Copyright Thorsten Ottosen 2003-2004. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/assign/
+//
+
+
+#ifndef BOOST_ASSIGN_STD_SET_HPP
+#define BOOST_ASSIGN_STD_SET_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/assign/list_inserter.hpp>
+#include <boost/config.hpp>
+#include <set>
+
+namespace boost
+{
+namespace assign
+{
+ template< class K, class C, class A, class K2 >
+ inline list_inserter< assign_detail::call_insert< std::set<K,C,A> >, K >
+ operator+=( std::set<K,C,A>& c, K2 k )
+ {
+ return insert( c )( k );
+ }
+
+ template< class K, class C, class A, class K2 >
+ inline list_inserter< assign_detail::call_insert< std::multiset<K,C,A> >, K >
+ operator+=( std::multiset<K,C,A>& c, K2 k )
+ {
+ return insert( c )( k );
+ }
+
+}
+}
+
+#endif
diff --git a/boost/boost/assign/std/slist.hpp b/boost/boost/assign/std/slist.hpp
new file mode 100644
index 00000000000..6e20f78a821
--- /dev/null
+++ b/boost/boost/assign/std/slist.hpp
@@ -0,0 +1,45 @@
+// Boost.Assign library
+//
+// Copyright Thorsten Ottosen 2003-2004. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/assign/
+//
+
+#ifndef BOOST_ASSIGN_STD_SLIST_HPP
+#define BOOST_ASSIGN_STD_SLIST_HPP
+
+#include <boost/config.hpp>
+#ifdef BOOST_HAS_SLIST
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/assign/list_inserter.hpp>
+#ifdef BOOST_SLIST_HEADER
+# include BOOST_SLIST_HEADER
+#else
+# include <slist>
+#endif
+
+namespace boost
+{
+namespace assign
+{
+
+ template< class V, class A, class V2 >
+ inline list_inserter< assign_detail::call_push_back< BOOST_STD_EXTENSION_NAMESPACE::slist<V,A> >, V >
+ operator+=( BOOST_STD_EXTENSION_NAMESPACE::slist<V,A>& c, V2 v )
+ {
+ return push_back( c )( v );
+ }
+
+}
+}
+
+#endif // BOOST_HAS_SLIST
+
+#endif
diff --git a/boost/boost/assign/std/stack.hpp b/boost/boost/assign/std/stack.hpp
new file mode 100644
index 00000000000..89f58d96140
--- /dev/null
+++ b/boost/boost/assign/std/stack.hpp
@@ -0,0 +1,37 @@
+// Boost.Assign library
+//
+// Copyright Thorsten Ottosen 2003-2004. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/assign/
+//
+
+#ifndef BOOST_ASSIGN_STD_STACK_HPP
+#define BOOST_ASSIGN_STD_STACK_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/assign/list_inserter.hpp>
+#include <boost/config.hpp>
+#include <stack>
+
+namespace boost
+{
+namespace assign
+{
+
+ template< class V, class C, class V2 >
+ inline list_inserter< assign_detail::call_push< std::stack<V,C> >, V >
+ operator+=( std::stack<V,C>& c, V2 v )
+ {
+ return push( c )( v );
+ }
+
+}
+}
+
+#endif
diff --git a/boost/boost/assign/std/vector.hpp b/boost/boost/assign/std/vector.hpp
new file mode 100644
index 00000000000..e9f3b7981eb
--- /dev/null
+++ b/boost/boost/assign/std/vector.hpp
@@ -0,0 +1,37 @@
+// Boost.Assign library
+//
+// Copyright Thorsten Ottosen 2003-2004. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/assign/
+//
+
+#ifndef BOOST_ASSIGN_STD_VECTOR_HPP
+#define BOOST_ASSIGN_STD_VECTOR_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/assign/list_inserter.hpp>
+#include <boost/config.hpp>
+#include <vector>
+
+namespace boost
+{
+namespace assign
+{
+
+ template< class V, class A, class V2 >
+ inline list_inserter< assign_detail::call_push_back< std::vector<V,A> >, V >
+ operator+=( std::vector<V,A>& c, V2 v )
+ {
+ return push_back( c )( v );
+ }
+
+}
+}
+
+#endif
diff --git a/boost/boost/bind.hpp b/boost/boost/bind.hpp
new file mode 100644
index 00000000000..6979fecd057
--- /dev/null
+++ b/boost/boost/bind.hpp
@@ -0,0 +1,1651 @@
+#ifndef BOOST_BIND_HPP_INCLUDED
+#define BOOST_BIND_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+// bind.hpp - binds function objects to arguments
+//
+// Copyright (c) 2001-2004 Peter Dimov and Multi Media Ltd.
+// Copyright (c) 2001 David Abrahams
+// Copyright (c) 2005 Peter Dimov
+//
+// 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/bind/bind.html for documentation.
+//
+
+#include <boost/config.hpp>
+#include <boost/ref.hpp>
+#include <boost/mem_fn.hpp>
+#include <boost/type.hpp>
+#include <boost/bind/arg.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/visit_each.hpp>
+
+// Borland-specific bug, visit_each() silently fails to produce code
+
+#if defined(__BORLANDC__)
+# define BOOST_BIND_VISIT_EACH boost::visit_each
+#else
+# define BOOST_BIND_VISIT_EACH visit_each
+#endif
+
+#include <boost/bind/storage.hpp>
+
+#ifdef BOOST_MSVC
+# pragma warning(push)
+# pragma warning(disable: 4512) // assignment operator could not be generated
+#endif
+
+namespace boost
+{
+
+namespace _bi // implementation details
+{
+
+// result_traits
+
+template<class R, class F> struct result_traits
+{
+ typedef R type;
+};
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
+
+struct unspecified {};
+
+template<class F> struct result_traits<unspecified, F>
+{
+ typedef typename F::result_type type;
+};
+
+template<class F> struct result_traits< unspecified, reference_wrapper<F> >
+{
+ typedef typename F::result_type type;
+};
+
+#endif
+
+// ref_compare
+
+template<class T> bool ref_compare( T const & a, T const & b, long )
+{
+ return a == b;
+}
+
+template<int I> bool ref_compare( arg<I> const &, arg<I> const &, int )
+{
+ return true;
+}
+
+template<int I> bool ref_compare( arg<I> (*) (), arg<I> (*) (), int )
+{
+ return true;
+}
+
+template<class T> bool ref_compare( reference_wrapper<T> const & a, reference_wrapper<T> const & b, int )
+{
+ return a.get_pointer() == b.get_pointer();
+}
+
+// bind_t forward declaration for listN
+
+template<class R, class F, class L> class bind_t;
+
+// value
+
+template<class T> class value
+{
+public:
+
+ value(T const & t): t_(t) {}
+
+ T & get() { return t_; }
+ T const & get() const { return t_; }
+
+ bool operator==(value const & rhs) const
+ {
+ return t_ == rhs.t_;
+ }
+
+private:
+
+ T t_;
+};
+
+// type
+
+template<class T> class type {};
+
+// unwrap
+
+template<class F> struct unwrapper
+{
+ static inline F & unwrap( F & f, long )
+ {
+ return f;
+ }
+
+ template<class F2> static inline F2 & unwrap( reference_wrapper<F2> rf, int )
+ {
+ return rf.get();
+ }
+
+ template<class R, class T> static inline _mfi::dm<R, T> unwrap( R T::* pm, int )
+ {
+ return _mfi::dm<R, T>( pm );
+ }
+};
+
+// listN
+
+class list0
+{
+public:
+
+ list0() {}
+
+ template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }
+
+ template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }
+
+ template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
+
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
+
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
+
+ template<class R, class F, class A> R operator()(type<R>, F & f, A &, long)
+ {
+ return unwrapper<F>::unwrap(f, 0)();
+ }
+
+ template<class R, class F, class A> R operator()(type<R>, F const & f, A &, long) const
+ {
+ return unwrapper<F const>::unwrap(f, 0)();
+ }
+
+ template<class F, class A> void operator()(type<void>, F & f, A &, int)
+ {
+ unwrapper<F>::unwrap(f, 0)();
+ }
+
+ template<class F, class A> void operator()(type<void>, F const & f, A &, int) const
+ {
+ unwrapper<F const>::unwrap(f, 0)();
+ }
+
+ template<class V> void accept(V &) const
+ {
+ }
+
+ bool operator==(list0 const &) const
+ {
+ return true;
+ }
+};
+
+template< class A1 > class list1: private storage1< A1 >
+{
+private:
+
+ typedef storage1< A1 > base_type;
+
+public:
+
+ explicit list1( A1 a1 ): base_type( a1 ) {}
+
+ A1 operator[] (boost::arg<1>) const { return base_type::a1_; }
+
+ A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; }
+
+ template<class T> T & operator[] ( _bi::value<T> & v ) const { return v.get(); }
+
+ template<class T> T const & operator[] ( _bi::value<T> const & v ) const { return v.get(); }
+
+ template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
+
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
+
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
+
+ template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)
+ {
+ return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_]);
+ }
+
+ template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const
+ {
+ return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_]);
+ }
+
+ template<class F, class A> void operator()(type<void>, F & f, A & a, int)
+ {
+ unwrapper<F>::unwrap(f, 0)(a[base_type::a1_]);
+ }
+
+ template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const
+ {
+ unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_]);
+ }
+
+ template<class V> void accept(V & v) const
+ {
+ base_type::accept(v);
+ }
+
+ bool operator==(list1 const & rhs) const
+ {
+ return ref_compare(base_type::a1_, rhs.a1_, 0);
+ }
+};
+
+template< class A1, class A2 > class list2: private storage2< A1, A2 >
+{
+private:
+
+ typedef storage2< A1, A2 > base_type;
+
+public:
+
+ list2( A1 a1, A2 a2 ): base_type( a1, a2 ) {}
+
+ A1 operator[] (boost::arg<1>) const { return base_type::a1_; }
+ A2 operator[] (boost::arg<2>) const { return base_type::a2_; }
+
+ A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; }
+ A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; }
+
+ template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }
+
+ template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }
+
+ template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
+
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
+
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
+
+ template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)
+ {
+ return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_]);
+ }
+
+ template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const
+ {
+ return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_]);
+ }
+
+ template<class F, class A> void operator()(type<void>, F & f, A & a, int)
+ {
+ unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_]);
+ }
+
+ template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const
+ {
+ unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_]);
+ }
+
+ template<class V> void accept(V & v) const
+ {
+ base_type::accept(v);
+ }
+
+ bool operator==(list2 const & rhs) const
+ {
+ return ref_compare(base_type::a1_, rhs.a1_, 0) && ref_compare(base_type::a2_, rhs.a2_, 0);
+ }
+};
+
+template< class A1, class A2, class A3 > class list3: private storage3< A1, A2, A3 >
+{
+private:
+
+ typedef storage3< A1, A2, A3 > base_type;
+
+public:
+
+ list3( A1 a1, A2 a2, A3 a3 ): base_type( a1, a2, a3 ) {}
+
+ A1 operator[] (boost::arg<1>) const { return base_type::a1_; }
+ A2 operator[] (boost::arg<2>) const { return base_type::a2_; }
+ A3 operator[] (boost::arg<3>) const { return base_type::a3_; }
+
+ A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; }
+ A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; }
+ A3 operator[] (boost::arg<3> (*) ()) const { return base_type::a3_; }
+
+ template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }
+
+ template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }
+
+ template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
+
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
+
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
+
+ template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)
+ {
+ return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_]);
+ }
+
+ template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const
+ {
+ return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_]);
+ }
+
+ template<class F, class A> void operator()(type<void>, F & f, A & a, int)
+ {
+ unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_]);
+ }
+
+ template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const
+ {
+ unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_]);
+ }
+
+ template<class V> void accept(V & v) const
+ {
+ base_type::accept(v);
+ }
+
+ bool operator==(list3 const & rhs) const
+ {
+ return
+
+ ref_compare( base_type::a1_, rhs.a1_, 0 ) &&
+ ref_compare( base_type::a2_, rhs.a2_, 0 ) &&
+ ref_compare( base_type::a3_, rhs.a3_, 0 );
+ }
+};
+
+template< class A1, class A2, class A3, class A4 > class list4: private storage4< A1, A2, A3, A4 >
+{
+private:
+
+ typedef storage4< A1, A2, A3, A4 > base_type;
+
+public:
+
+ list4( A1 a1, A2 a2, A3 a3, A4 a4 ): base_type( a1, a2, a3, a4 ) {}
+
+ A1 operator[] (boost::arg<1>) const { return base_type::a1_; }
+ A2 operator[] (boost::arg<2>) const { return base_type::a2_; }
+ A3 operator[] (boost::arg<3>) const { return base_type::a3_; }
+ A4 operator[] (boost::arg<4>) const { return base_type::a4_; }
+
+ A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; }
+ A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; }
+ A3 operator[] (boost::arg<3> (*) ()) const { return base_type::a3_; }
+ A4 operator[] (boost::arg<4> (*) ()) const { return base_type::a4_; }
+
+ template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }
+
+ template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }
+
+ template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
+
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
+
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
+
+ template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)
+ {
+ return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_]);
+ }
+
+ template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const
+ {
+ return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_]);
+ }
+
+ template<class F, class A> void operator()(type<void>, F & f, A & a, int)
+ {
+ unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_]);
+ }
+
+ template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const
+ {
+ unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_]);
+ }
+
+ template<class V> void accept(V & v) const
+ {
+ base_type::accept(v);
+ }
+
+ bool operator==(list4 const & rhs) const
+ {
+ return
+
+ ref_compare( base_type::a1_, rhs.a1_, 0 ) &&
+ ref_compare( base_type::a2_, rhs.a2_, 0 ) &&
+ ref_compare( base_type::a3_, rhs.a3_, 0 ) &&
+ ref_compare( base_type::a4_, rhs.a4_, 0 );
+ }
+};
+
+template< class A1, class A2, class A3, class A4, class A5 > class list5: private storage5< A1, A2, A3, A4, A5 >
+{
+private:
+
+ typedef storage5< A1, A2, A3, A4, A5 > base_type;
+
+public:
+
+ list5( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5 ): base_type( a1, a2, a3, a4, a5 ) {}
+
+ A1 operator[] (boost::arg<1>) const { return base_type::a1_; }
+ A2 operator[] (boost::arg<2>) const { return base_type::a2_; }
+ A3 operator[] (boost::arg<3>) const { return base_type::a3_; }
+ A4 operator[] (boost::arg<4>) const { return base_type::a4_; }
+ A5 operator[] (boost::arg<5>) const { return base_type::a5_; }
+
+ A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; }
+ A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; }
+ A3 operator[] (boost::arg<3> (*) ()) const { return base_type::a3_; }
+ A4 operator[] (boost::arg<4> (*) ()) const { return base_type::a4_; }
+ A5 operator[] (boost::arg<5> (*) ()) const { return base_type::a5_; }
+
+ template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }
+
+ template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }
+
+ template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
+
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
+
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
+
+ template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)
+ {
+ return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_]);
+ }
+
+ template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const
+ {
+ return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_]);
+ }
+
+ template<class F, class A> void operator()(type<void>, F & f, A & a, int)
+ {
+ unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_]);
+ }
+
+ template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const
+ {
+ unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_]);
+ }
+
+ template<class V> void accept(V & v) const
+ {
+ base_type::accept(v);
+ }
+
+ bool operator==(list5 const & rhs) const
+ {
+ return
+
+ ref_compare( base_type::a1_, rhs.a1_, 0 ) &&
+ ref_compare( base_type::a2_, rhs.a2_, 0 ) &&
+ ref_compare( base_type::a3_, rhs.a3_, 0 ) &&
+ ref_compare( base_type::a4_, rhs.a4_, 0 ) &&
+ ref_compare( base_type::a5_, rhs.a5_, 0 );
+ }
+};
+
+template<class A1, class A2, class A3, class A4, class A5, class A6> class list6: private storage6< A1, A2, A3, A4, A5, A6 >
+{
+private:
+
+ typedef storage6< A1, A2, A3, A4, A5, A6 > base_type;
+
+public:
+
+ list6( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6 ): base_type( a1, a2, a3, a4, a5, a6 ) {}
+
+ A1 operator[] (boost::arg<1>) const { return base_type::a1_; }
+ A2 operator[] (boost::arg<2>) const { return base_type::a2_; }
+ A3 operator[] (boost::arg<3>) const { return base_type::a3_; }
+ A4 operator[] (boost::arg<4>) const { return base_type::a4_; }
+ A5 operator[] (boost::arg<5>) const { return base_type::a5_; }
+ A6 operator[] (boost::arg<6>) const { return base_type::a6_; }
+
+ A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; }
+ A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; }
+ A3 operator[] (boost::arg<3> (*) ()) const { return base_type::a3_; }
+ A4 operator[] (boost::arg<4> (*) ()) const { return base_type::a4_; }
+ A5 operator[] (boost::arg<5> (*) ()) const { return base_type::a5_; }
+ A6 operator[] (boost::arg<6> (*) ()) const { return base_type::a6_; }
+
+ template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }
+
+ template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }
+
+ template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
+
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
+
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
+
+ template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)
+ {
+ return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_]);
+ }
+
+ template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const
+ {
+ return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_]);
+ }
+
+ template<class F, class A> void operator()(type<void>, F & f, A & a, int)
+ {
+ unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_]);
+ }
+
+ template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const
+ {
+ unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_]);
+ }
+
+ template<class V> void accept(V & v) const
+ {
+ base_type::accept(v);
+ }
+
+ bool operator==(list6 const & rhs) const
+ {
+ return
+
+ ref_compare( base_type::a1_, rhs.a1_, 0 ) &&
+ ref_compare( base_type::a2_, rhs.a2_, 0 ) &&
+ ref_compare( base_type::a3_, rhs.a3_, 0 ) &&
+ ref_compare( base_type::a4_, rhs.a4_, 0 ) &&
+ ref_compare( base_type::a5_, rhs.a5_, 0 ) &&
+ ref_compare( base_type::a6_, rhs.a6_, 0 );
+ }
+};
+
+template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> class list7: private storage7< A1, A2, A3, A4, A5, A6, A7 >
+{
+private:
+
+ typedef storage7< A1, A2, A3, A4, A5, A6, A7 > base_type;
+
+public:
+
+ list7( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7 ): base_type( a1, a2, a3, a4, a5, a6, a7 ) {}
+
+ A1 operator[] (boost::arg<1>) const { return base_type::a1_; }
+ A2 operator[] (boost::arg<2>) const { return base_type::a2_; }
+ A3 operator[] (boost::arg<3>) const { return base_type::a3_; }
+ A4 operator[] (boost::arg<4>) const { return base_type::a4_; }
+ A5 operator[] (boost::arg<5>) const { return base_type::a5_; }
+ A6 operator[] (boost::arg<6>) const { return base_type::a6_; }
+ A7 operator[] (boost::arg<7>) const { return base_type::a7_; }
+
+ A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; }
+ A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; }
+ A3 operator[] (boost::arg<3> (*) ()) const { return base_type::a3_; }
+ A4 operator[] (boost::arg<4> (*) ()) const { return base_type::a4_; }
+ A5 operator[] (boost::arg<5> (*) ()) const { return base_type::a5_; }
+ A6 operator[] (boost::arg<6> (*) ()) const { return base_type::a6_; }
+ A7 operator[] (boost::arg<7> (*) ()) const { return base_type::a7_; }
+
+ template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }
+
+ template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }
+
+ template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
+
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
+
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
+
+ template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)
+ {
+ return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_]);
+ }
+
+ template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const
+ {
+ return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_]);
+ }
+
+ template<class F, class A> void operator()(type<void>, F & f, A & a, int)
+ {
+ unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_]);
+ }
+
+ template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const
+ {
+ unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_]);
+ }
+
+ template<class V> void accept(V & v) const
+ {
+ base_type::accept(v);
+ }
+
+ bool operator==(list7 const & rhs) const
+ {
+ return
+
+ ref_compare( base_type::a1_, rhs.a1_, 0 ) &&
+ ref_compare( base_type::a2_, rhs.a2_, 0 ) &&
+ ref_compare( base_type::a3_, rhs.a3_, 0 ) &&
+ ref_compare( base_type::a4_, rhs.a4_, 0 ) &&
+ ref_compare( base_type::a5_, rhs.a5_, 0 ) &&
+ ref_compare( base_type::a6_, rhs.a6_, 0 ) &&
+ ref_compare( base_type::a7_, rhs.a7_, 0 );
+ }
+};
+
+template< class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 > class list8: private storage8< A1, A2, A3, A4, A5, A6, A7, A8 >
+{
+private:
+
+ typedef storage8< A1, A2, A3, A4, A5, A6, A7, A8 > base_type;
+
+public:
+
+ list8( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8 ): base_type( a1, a2, a3, a4, a5, a6, a7, a8 ) {}
+
+ A1 operator[] (boost::arg<1>) const { return base_type::a1_; }
+ A2 operator[] (boost::arg<2>) const { return base_type::a2_; }
+ A3 operator[] (boost::arg<3>) const { return base_type::a3_; }
+ A4 operator[] (boost::arg<4>) const { return base_type::a4_; }
+ A5 operator[] (boost::arg<5>) const { return base_type::a5_; }
+ A6 operator[] (boost::arg<6>) const { return base_type::a6_; }
+ A7 operator[] (boost::arg<7>) const { return base_type::a7_; }
+ A8 operator[] (boost::arg<8>) const { return base_type::a8_; }
+
+ A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; }
+ A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; }
+ A3 operator[] (boost::arg<3> (*) ()) const { return base_type::a3_; }
+ A4 operator[] (boost::arg<4> (*) ()) const { return base_type::a4_; }
+ A5 operator[] (boost::arg<5> (*) ()) const { return base_type::a5_; }
+ A6 operator[] (boost::arg<6> (*) ()) const { return base_type::a6_; }
+ A7 operator[] (boost::arg<7> (*) ()) const { return base_type::a7_; }
+ A8 operator[] (boost::arg<8> (*) ()) const { return base_type::a8_; }
+
+ template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }
+
+ template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }
+
+ template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
+
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
+
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
+
+ template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)
+ {
+ return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_]);
+ }
+
+ template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const
+ {
+ return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_]);
+ }
+
+ template<class F, class A> void operator()(type<void>, F & f, A & a, int)
+ {
+ unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_]);
+ }
+
+ template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const
+ {
+ unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_]);
+ }
+
+ template<class V> void accept(V & v) const
+ {
+ base_type::accept(v);
+ }
+
+ bool operator==(list8 const & rhs) const
+ {
+ return
+
+ ref_compare( base_type::a1_, rhs.a1_, 0 ) &&
+ ref_compare( base_type::a2_, rhs.a2_, 0 ) &&
+ ref_compare( base_type::a3_, rhs.a3_, 0 ) &&
+ ref_compare( base_type::a4_, rhs.a4_, 0 ) &&
+ ref_compare( base_type::a5_, rhs.a5_, 0 ) &&
+ ref_compare( base_type::a6_, rhs.a6_, 0 ) &&
+ ref_compare( base_type::a7_, rhs.a7_, 0 ) &&
+ ref_compare( base_type::a8_, rhs.a8_, 0 );
+ }
+};
+
+template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> class list9: private storage9< A1, A2, A3, A4, A5, A6, A7, A8, A9 >
+{
+private:
+
+ typedef storage9< A1, A2, A3, A4, A5, A6, A7, A8, A9 > base_type;
+
+public:
+
+ list9( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9 ): base_type( a1, a2, a3, a4, a5, a6, a7, a8, a9 ) {}
+
+ A1 operator[] (boost::arg<1>) const { return base_type::a1_; }
+ A2 operator[] (boost::arg<2>) const { return base_type::a2_; }
+ A3 operator[] (boost::arg<3>) const { return base_type::a3_; }
+ A4 operator[] (boost::arg<4>) const { return base_type::a4_; }
+ A5 operator[] (boost::arg<5>) const { return base_type::a5_; }
+ A6 operator[] (boost::arg<6>) const { return base_type::a6_; }
+ A7 operator[] (boost::arg<7>) const { return base_type::a7_; }
+ A8 operator[] (boost::arg<8>) const { return base_type::a8_; }
+ A9 operator[] (boost::arg<9>) const { return base_type::a9_; }
+
+ A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; }
+ A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; }
+ A3 operator[] (boost::arg<3> (*) ()) const { return base_type::a3_; }
+ A4 operator[] (boost::arg<4> (*) ()) const { return base_type::a4_; }
+ A5 operator[] (boost::arg<5> (*) ()) const { return base_type::a5_; }
+ A6 operator[] (boost::arg<6> (*) ()) const { return base_type::a6_; }
+ A7 operator[] (boost::arg<7> (*) ()) const { return base_type::a7_; }
+ A8 operator[] (boost::arg<8> (*) ()) const { return base_type::a8_; }
+ A9 operator[] (boost::arg<9> (*) ()) const { return base_type::a9_; }
+
+ template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }
+
+ template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }
+
+ template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
+
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
+
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
+
+ template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)
+ {
+ return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_], a[base_type::a9_]);
+ }
+
+ template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const
+ {
+ return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_], a[base_type::a9_]);
+ }
+
+ template<class F, class A> void operator()(type<void>, F & f, A & a, int)
+ {
+ unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_], a[base_type::a9_]);
+ }
+
+ template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const
+ {
+ unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_], a[base_type::a9_]);
+ }
+
+ template<class V> void accept(V & v) const
+ {
+ base_type::accept(v);
+ }
+
+ bool operator==(list9 const & rhs) const
+ {
+ return
+
+ ref_compare( base_type::a1_, rhs.a1_, 0 ) &&
+ ref_compare( base_type::a2_, rhs.a2_, 0 ) &&
+ ref_compare( base_type::a3_, rhs.a3_, 0 ) &&
+ ref_compare( base_type::a4_, rhs.a4_, 0 ) &&
+ ref_compare( base_type::a5_, rhs.a5_, 0 ) &&
+ ref_compare( base_type::a6_, rhs.a6_, 0 ) &&
+ ref_compare( base_type::a7_, rhs.a7_, 0 ) &&
+ ref_compare( base_type::a8_, rhs.a8_, 0 ) &&
+ ref_compare( base_type::a9_, rhs.a9_, 0 );
+ }
+};
+
+// bind_t
+
+#ifndef BOOST_NO_VOID_RETURNS
+
+template<class R, class F, class L> class bind_t
+{
+public:
+
+ typedef bind_t this_type;
+
+ bind_t(F f, L const & l): f_(f), l_(l) {}
+
+#define BOOST_BIND_RETURN return
+#include <boost/bind/bind_template.hpp>
+#undef BOOST_BIND_RETURN
+
+};
+
+#else
+
+template<class R> struct bind_t_generator
+{
+
+template<class F, class L> class implementation
+{
+public:
+
+ typedef implementation this_type;
+
+ implementation(F f, L const & l): f_(f), l_(l) {}
+
+#define BOOST_BIND_RETURN return
+#include <boost/bind/bind_template.hpp>
+#undef BOOST_BIND_RETURN
+
+};
+
+};
+
+template<> struct bind_t_generator<void>
+{
+
+template<class F, class L> class implementation
+{
+private:
+
+ typedef void R;
+
+public:
+
+ typedef implementation this_type;
+
+ implementation(F f, L const & l): f_(f), l_(l) {}
+
+#define BOOST_BIND_RETURN
+#include <boost/bind/bind_template.hpp>
+#undef BOOST_BIND_RETURN
+
+};
+
+};
+
+template<class R2, class F, class L> class bind_t: public bind_t_generator<R2>::BOOST_NESTED_TEMPLATE implementation<F, L>
+{
+public:
+
+ bind_t(F f, L const & l): bind_t_generator<R2>::BOOST_NESTED_TEMPLATE implementation<F, L>(f, l) {}
+
+};
+
+#endif
+
+// function_equal
+
+#ifndef BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
+
+// put overloads in _bi, rely on ADL
+
+# ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+template<class R, class F, class L> bool function_equal( bind_t<R, F, L> const & a, bind_t<R, F, L> const & b )
+{
+ return a.compare(b);
+}
+
+# else
+
+template<class R, class F, class L> bool function_equal_impl( bind_t<R, F, L> const & a, bind_t<R, F, L> const & b, int )
+{
+ return a.compare(b);
+}
+
+# endif // #ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+#else // BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
+
+// put overloads in boost
+
+} // namespace _bi
+
+# ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+template<class R, class F, class L> bool function_equal( _bi::bind_t<R, F, L> const & a, _bi::bind_t<R, F, L> const & b )
+{
+ return a.compare(b);
+}
+
+# else
+
+template<class R, class F, class L> bool function_equal_impl( _bi::bind_t<R, F, L> const & a, _bi::bind_t<R, F, L> const & b, int )
+{
+ return a.compare(b);
+}
+
+# endif // #ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+namespace _bi
+{
+
+#endif // BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
+
+// add_value
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) || (__SUNPRO_CC >= 0x530)
+
+template<class T> struct add_value
+{
+ typedef _bi::value<T> type;
+};
+
+template<class T> struct add_value< value<T> >
+{
+ typedef _bi::value<T> type;
+};
+
+template<class T> struct add_value< reference_wrapper<T> >
+{
+ typedef reference_wrapper<T> type;
+};
+
+template<int I> struct add_value< arg<I> >
+{
+ typedef boost::arg<I> type;
+};
+
+template<int I> struct add_value< arg<I> (*) () >
+{
+ typedef boost::arg<I> (*type) ();
+};
+
+template<class R, class F, class L> struct add_value< bind_t<R, F, L> >
+{
+ typedef bind_t<R, F, L> type;
+};
+
+#else
+
+template<int I> struct _avt_0;
+
+template<> struct _avt_0<1>
+{
+ template<class T> struct inner
+ {
+ typedef T type;
+ };
+};
+
+template<> struct _avt_0<2>
+{
+ template<class T> struct inner
+ {
+ typedef value<T> type;
+ };
+};
+
+typedef char (&_avt_r1) [1];
+typedef char (&_avt_r2) [2];
+
+template<class T> _avt_r1 _avt_f(value<T>);
+template<class T> _avt_r1 _avt_f(reference_wrapper<T>);
+template<int I> _avt_r1 _avt_f(arg<I>);
+template<int I> _avt_r1 _avt_f(arg<I> (*) ());
+template<class R, class F, class L> _avt_r1 _avt_f(bind_t<R, F, L>);
+
+_avt_r2 _avt_f(...);
+
+template<class T> struct add_value
+{
+ static T t();
+ typedef typename _avt_0<sizeof(_avt_f(t()))>::template inner<T>::type type;
+};
+
+#endif
+
+// list_av_N
+
+template<class A1> struct list_av_1
+{
+ typedef typename add_value<A1>::type B1;
+ typedef list1<B1> type;
+};
+
+template<class A1, class A2> struct list_av_2
+{
+ typedef typename add_value<A1>::type B1;
+ typedef typename add_value<A2>::type B2;
+ typedef list2<B1, B2> type;
+};
+
+template<class A1, class A2, class A3> struct list_av_3
+{
+ typedef typename add_value<A1>::type B1;
+ typedef typename add_value<A2>::type B2;
+ typedef typename add_value<A3>::type B3;
+ typedef list3<B1, B2, B3> type;
+};
+
+template<class A1, class A2, class A3, class A4> struct list_av_4
+{
+ typedef typename add_value<A1>::type B1;
+ typedef typename add_value<A2>::type B2;
+ typedef typename add_value<A3>::type B3;
+ typedef typename add_value<A4>::type B4;
+ typedef list4<B1, B2, B3, B4> type;
+};
+
+template<class A1, class A2, class A3, class A4, class A5> struct list_av_5
+{
+ typedef typename add_value<A1>::type B1;
+ typedef typename add_value<A2>::type B2;
+ typedef typename add_value<A3>::type B3;
+ typedef typename add_value<A4>::type B4;
+ typedef typename add_value<A5>::type B5;
+ typedef list5<B1, B2, B3, B4, B5> type;
+};
+
+template<class A1, class A2, class A3, class A4, class A5, class A6> struct list_av_6
+{
+ typedef typename add_value<A1>::type B1;
+ typedef typename add_value<A2>::type B2;
+ typedef typename add_value<A3>::type B3;
+ typedef typename add_value<A4>::type B4;
+ typedef typename add_value<A5>::type B5;
+ typedef typename add_value<A6>::type B6;
+ typedef list6<B1, B2, B3, B4, B5, B6> type;
+};
+
+template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> struct list_av_7
+{
+ typedef typename add_value<A1>::type B1;
+ typedef typename add_value<A2>::type B2;
+ typedef typename add_value<A3>::type B3;
+ typedef typename add_value<A4>::type B4;
+ typedef typename add_value<A5>::type B5;
+ typedef typename add_value<A6>::type B6;
+ typedef typename add_value<A7>::type B7;
+ typedef list7<B1, B2, B3, B4, B5, B6, B7> type;
+};
+
+template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> struct list_av_8
+{
+ typedef typename add_value<A1>::type B1;
+ typedef typename add_value<A2>::type B2;
+ typedef typename add_value<A3>::type B3;
+ typedef typename add_value<A4>::type B4;
+ typedef typename add_value<A5>::type B5;
+ typedef typename add_value<A6>::type B6;
+ typedef typename add_value<A7>::type B7;
+ typedef typename add_value<A8>::type B8;
+ typedef list8<B1, B2, B3, B4, B5, B6, B7, B8> type;
+};
+
+template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> struct list_av_9
+{
+ typedef typename add_value<A1>::type B1;
+ typedef typename add_value<A2>::type B2;
+ typedef typename add_value<A3>::type B3;
+ typedef typename add_value<A4>::type B4;
+ typedef typename add_value<A5>::type B5;
+ typedef typename add_value<A6>::type B6;
+ typedef typename add_value<A7>::type B7;
+ typedef typename add_value<A8>::type B8;
+ typedef typename add_value<A9>::type B9;
+ typedef list9<B1, B2, B3, B4, B5, B6, B7, B8, B9> type;
+};
+
+// operator!
+
+struct logical_not
+{
+ template<class V> bool operator()(V const & v) const { return !v; }
+};
+
+template<class R, class F, class L>
+ bind_t< bool, logical_not, list1< bind_t<R, F, L> > >
+ operator! (bind_t<R, F, L> const & f)
+{
+ typedef list1< bind_t<R, F, L> > list_type;
+ return bind_t<bool, logical_not, list_type> ( logical_not(), list_type(f) );
+}
+
+// relational operators
+
+#define BOOST_BIND_OPERATOR( op, name ) \
+\
+struct name \
+{ \
+ template<class V, class W> bool operator()(V const & v, W const & w) const { return v op w; } \
+}; \
+ \
+template<class R, class F, class L, class A2> \
+ bind_t< bool, name, list2< bind_t<R, F, L>, typename add_value<A2>::type > > \
+ operator op (bind_t<R, F, L> const & f, A2 a2) \
+{ \
+ typedef typename add_value<A2>::type B2; \
+ typedef list2< bind_t<R, F, L>, B2> list_type; \
+ return bind_t<bool, name, list_type> ( name(), list_type(f, a2) ); \
+}
+
+BOOST_BIND_OPERATOR( ==, equal )
+BOOST_BIND_OPERATOR( !=, not_equal )
+
+BOOST_BIND_OPERATOR( <, less )
+BOOST_BIND_OPERATOR( <=, less_equal )
+
+BOOST_BIND_OPERATOR( >, greater )
+BOOST_BIND_OPERATOR( >=, greater_equal )
+
+#undef BOOST_BIND_OPERATOR
+
+#if defined(__GNUC__) && BOOST_WORKAROUND(__GNUC__, < 3)
+
+// resolve ambiguity with rel_ops
+
+#define BOOST_BIND_OPERATOR( op, name ) \
+\
+template<class R, class F, class L> \
+ bind_t< bool, name, list2< bind_t<R, F, L>, bind_t<R, F, L> > > \
+ operator op (bind_t<R, F, L> const & f, bind_t<R, F, L> const & g) \
+{ \
+ typedef list2< bind_t<R, F, L>, bind_t<R, F, L> > list_type; \
+ return bind_t<bool, name, list_type> ( name(), list_type(f, g) ); \
+}
+
+BOOST_BIND_OPERATOR( !=, not_equal )
+BOOST_BIND_OPERATOR( <=, less_equal )
+BOOST_BIND_OPERATOR( >, greater )
+BOOST_BIND_OPERATOR( >=, greater_equal )
+
+#endif
+
+// visit_each, ADL
+
+#if !defined( BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP ) && !defined( __BORLANDC__ ) \
+ && !(defined(__GNUC__) && __GNUC__ == 3 && __GNUC_MINOR__ <= 3)
+
+template<class V, class T> void visit_each( V & v, value<T> const & t, int )
+{
+ using boost::visit_each;
+ BOOST_BIND_VISIT_EACH( v, t.get(), 0 );
+}
+
+template<class V, class R, class F, class L> void visit_each( V & v, bind_t<R, F, L> const & t, int )
+{
+ t.accept( v );
+}
+
+#endif
+
+} // namespace _bi
+
+// visit_each, no ADL
+
+#if defined( BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP ) || defined( __BORLANDC__ ) \
+ || (defined(__GNUC__) && __GNUC__ == 3 && __GNUC_MINOR__ <= 3)
+
+template<class V, class T> void visit_each( V & v, _bi::value<T> const & t, int )
+{
+ BOOST_BIND_VISIT_EACH( v, t.get(), 0 );
+}
+
+template<class V, class R, class F, class L> void visit_each( V & v, _bi::bind_t<R, F, L> const & t, int )
+{
+ t.accept( v );
+}
+
+#endif
+
+// bind
+
+#ifndef BOOST_BIND
+#define BOOST_BIND bind
+#endif
+
+// generic function objects
+
+template<class R, class F>
+ _bi::bind_t<R, F, _bi::list0>
+ BOOST_BIND(F f)
+{
+ typedef _bi::list0 list_type;
+ return _bi::bind_t<R, F, list_type> (f, list_type());
+}
+
+template<class R, class F, class A1>
+ _bi::bind_t<R, F, typename _bi::list_av_1<A1>::type>
+ BOOST_BIND(F f, A1 a1)
+{
+ typedef typename _bi::list_av_1<A1>::type list_type;
+ return _bi::bind_t<R, F, list_type> (f, list_type(a1));
+}
+
+template<class R, class F, class A1, class A2>
+ _bi::bind_t<R, F, typename _bi::list_av_2<A1, A2>::type>
+ BOOST_BIND(F f, A1 a1, A2 a2)
+{
+ typedef typename _bi::list_av_2<A1, A2>::type list_type;
+ return _bi::bind_t<R, F, list_type> (f, list_type(a1, a2));
+}
+
+template<class R, class F, class A1, class A2, class A3>
+ _bi::bind_t<R, F, typename _bi::list_av_3<A1, A2, A3>::type>
+ BOOST_BIND(F f, A1 a1, A2 a2, A3 a3)
+{
+ typedef typename _bi::list_av_3<A1, A2, A3>::type list_type;
+ return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3));
+}
+
+template<class R, class F, class A1, class A2, class A3, class A4>
+ _bi::bind_t<R, F, typename _bi::list_av_4<A1, A2, A3, A4>::type>
+ BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4)
+{
+ typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type;
+ return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4));
+}
+
+template<class R, class F, class A1, class A2, class A3, class A4, class A5>
+ _bi::bind_t<R, F, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type>
+ BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)
+{
+ typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type;
+ return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5));
+}
+
+template<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6>
+ _bi::bind_t<R, F, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type>
+ BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)
+{
+ typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type;
+ return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6));
+}
+
+template<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7>
+ _bi::bind_t<R, F, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type>
+ BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)
+{
+ typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type;
+ return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7));
+}
+
+template<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
+ _bi::bind_t<R, F, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type>
+ BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)
+{
+ typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type;
+ return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8));
+}
+
+template<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>
+ _bi::bind_t<R, F, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type>
+ BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)
+{
+ typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type;
+ return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9));
+}
+
+// generic function objects, alternative syntax
+
+template<class R, class F>
+ _bi::bind_t<R, F, _bi::list0>
+ BOOST_BIND(boost::type<R>, F f)
+{
+ typedef _bi::list0 list_type;
+ return _bi::bind_t<R, F, list_type> (f, list_type());
+}
+
+template<class R, class F, class A1>
+ _bi::bind_t<R, F, typename _bi::list_av_1<A1>::type>
+ BOOST_BIND(boost::type<R>, F f, A1 a1)
+{
+ typedef typename _bi::list_av_1<A1>::type list_type;
+ return _bi::bind_t<R, F, list_type> (f, list_type(a1));
+}
+
+template<class R, class F, class A1, class A2>
+ _bi::bind_t<R, F, typename _bi::list_av_2<A1, A2>::type>
+ BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2)
+{
+ typedef typename _bi::list_av_2<A1, A2>::type list_type;
+ return _bi::bind_t<R, F, list_type> (f, list_type(a1, a2));
+}
+
+template<class R, class F, class A1, class A2, class A3>
+ _bi::bind_t<R, F, typename _bi::list_av_3<A1, A2, A3>::type>
+ BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2, A3 a3)
+{
+ typedef typename _bi::list_av_3<A1, A2, A3>::type list_type;
+ return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3));
+}
+
+template<class R, class F, class A1, class A2, class A3, class A4>
+ _bi::bind_t<R, F, typename _bi::list_av_4<A1, A2, A3, A4>::type>
+ BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2, A3 a3, A4 a4)
+{
+ typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type;
+ return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4));
+}
+
+template<class R, class F, class A1, class A2, class A3, class A4, class A5>
+ _bi::bind_t<R, F, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type>
+ BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)
+{
+ typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type;
+ return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5));
+}
+
+template<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6>
+ _bi::bind_t<R, F, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type>
+ BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)
+{
+ typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type;
+ return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6));
+}
+
+template<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7>
+ _bi::bind_t<R, F, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type>
+ BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)
+{
+ typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type;
+ return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7));
+}
+
+template<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
+ _bi::bind_t<R, F, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type>
+ BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)
+{
+ typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type;
+ return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8));
+}
+
+template<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>
+ _bi::bind_t<R, F, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type>
+ BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)
+{
+ typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type;
+ return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9));
+}
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
+
+// adaptable function objects
+
+template<class F>
+ _bi::bind_t<_bi::unspecified, F, _bi::list0>
+ BOOST_BIND(F f)
+{
+ typedef _bi::list0 list_type;
+ return _bi::bind_t<_bi::unspecified, F, list_type> (f, list_type());
+}
+
+template<class F, class A1>
+ _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_1<A1>::type>
+ BOOST_BIND(F f, A1 a1)
+{
+ typedef typename _bi::list_av_1<A1>::type list_type;
+ return _bi::bind_t<_bi::unspecified, F, list_type> (f, list_type(a1));
+}
+
+template<class F, class A1, class A2>
+ _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_2<A1, A2>::type>
+ BOOST_BIND(F f, A1 a1, A2 a2)
+{
+ typedef typename _bi::list_av_2<A1, A2>::type list_type;
+ return _bi::bind_t<_bi::unspecified, F, list_type> (f, list_type(a1, a2));
+}
+
+template<class F, class A1, class A2, class A3>
+ _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_3<A1, A2, A3>::type>
+ BOOST_BIND(F f, A1 a1, A2 a2, A3 a3)
+{
+ typedef typename _bi::list_av_3<A1, A2, A3>::type list_type;
+ return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3));
+}
+
+template<class F, class A1, class A2, class A3, class A4>
+ _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_4<A1, A2, A3, A4>::type>
+ BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4)
+{
+ typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type;
+ return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4));
+}
+
+template<class F, class A1, class A2, class A3, class A4, class A5>
+ _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type>
+ BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)
+{
+ typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type;
+ return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4, a5));
+}
+
+template<class F, class A1, class A2, class A3, class A4, class A5, class A6>
+ _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type>
+ BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)
+{
+ typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type;
+ return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6));
+}
+
+template<class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7>
+ _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type>
+ BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)
+{
+ typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type;
+ return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7));
+}
+
+template<class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
+ _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type>
+ BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)
+{
+ typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type;
+ return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8));
+}
+
+template<class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>
+ _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type>
+ BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)
+{
+ typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type;
+ return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9));
+}
+
+#endif // !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
+
+// function pointers
+
+#define BOOST_BIND_CC
+#define BOOST_BIND_ST
+
+#include <boost/bind/bind_cc.hpp>
+
+#undef BOOST_BIND_CC
+#undef BOOST_BIND_ST
+
+#ifdef BOOST_BIND_ENABLE_STDCALL
+
+#define BOOST_BIND_CC __stdcall
+#define BOOST_BIND_ST
+
+#include <boost/bind/bind_cc.hpp>
+
+#undef BOOST_BIND_CC
+#undef BOOST_BIND_ST
+
+#endif
+
+#ifdef BOOST_BIND_ENABLE_FASTCALL
+
+#define BOOST_BIND_CC __fastcall
+#define BOOST_BIND_ST
+
+#include <boost/bind/bind_cc.hpp>
+
+#undef BOOST_BIND_CC
+#undef BOOST_BIND_ST
+
+#endif
+
+#ifdef BOOST_BIND_ENABLE_PASCAL
+
+#define BOOST_BIND_ST pascal
+#define BOOST_BIND_CC
+
+#include <boost/bind/bind_cc.hpp>
+
+#undef BOOST_BIND_ST
+#undef BOOST_BIND_CC
+
+#endif
+
+// member function pointers
+
+#define BOOST_BIND_MF_NAME(X) X
+#define BOOST_BIND_MF_CC
+
+#include <boost/bind/bind_mf_cc.hpp>
+
+#undef BOOST_BIND_MF_NAME
+#undef BOOST_BIND_MF_CC
+
+#ifdef BOOST_MEM_FN_ENABLE_CDECL
+
+#define BOOST_BIND_MF_NAME(X) X##_cdecl
+#define BOOST_BIND_MF_CC __cdecl
+
+#include <boost/bind/bind_mf_cc.hpp>
+
+#undef BOOST_BIND_MF_NAME
+#undef BOOST_BIND_MF_CC
+
+#endif
+
+#ifdef BOOST_MEM_FN_ENABLE_STDCALL
+
+#define BOOST_BIND_MF_NAME(X) X##_stdcall
+#define BOOST_BIND_MF_CC __stdcall
+
+#include <boost/bind/bind_mf_cc.hpp>
+
+#undef BOOST_BIND_MF_NAME
+#undef BOOST_BIND_MF_CC
+
+#endif
+
+#ifdef BOOST_MEM_FN_ENABLE_FASTCALL
+
+#define BOOST_BIND_MF_NAME(X) X##_fastcall
+#define BOOST_BIND_MF_CC __fastcall
+
+#include <boost/bind/bind_mf_cc.hpp>
+
+#undef BOOST_BIND_MF_NAME
+#undef BOOST_BIND_MF_CC
+
+#endif
+
+// data member pointers
+
+#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) || defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \
+ || ( defined(__BORLANDC__) && BOOST_WORKAROUND( __BORLANDC__, < 0x600 ) )
+
+template<class R, class T, class A1>
+_bi::bind_t< R, _mfi::dm<R, T>, typename _bi::list_av_1<A1>::type >
+ BOOST_BIND(R T::*f, A1 a1)
+{
+ typedef _mfi::dm<R, T> F;
+ typedef typename _bi::list_av_1<A1>::type list_type;
+ return _bi::bind_t<R, F, list_type>( F(f), list_type(a1) );
+}
+
+#else
+
+namespace _bi
+{
+
+template< class Pm, int I > struct add_cref;
+
+template< class M, class T > struct add_cref< M T::*, 0 >
+{
+ typedef M type;
+};
+
+template< class M, class T > struct add_cref< M T::*, 1 >
+{
+ typedef M const & type;
+};
+
+template< class R, class T > struct add_cref< R (T::*) (), 1 >
+{
+ typedef void type;
+};
+
+#if !( defined(__IBMCPP__) && BOOST_WORKAROUND( __IBMCPP__, BOOST_TESTED_AT(600) ) )
+
+template< class R, class T > struct add_cref< R (T::*) () const, 1 >
+{
+ typedef void type;
+};
+
+#endif // __IBMCPP__
+
+template<class R> struct isref
+{
+ enum value_type { value = 0 };
+};
+
+template<class R> struct isref< R& >
+{
+ enum value_type { value = 1 };
+};
+
+template<class R> struct isref< R* >
+{
+ enum value_type { value = 1 };
+};
+
+template<class Pm, class A1> struct dm_result
+{
+ typedef typename add_cref< Pm, 1 >::type type;
+};
+
+template<class Pm, class R, class F, class L> struct dm_result< Pm, bind_t<R, F, L> >
+{
+ typedef typename bind_t<R, F, L>::result_type result_type;
+ typedef typename add_cref< Pm, isref< result_type >::value >::type type;
+};
+
+} // namespace _bi
+
+template< class A1, class M, class T >
+
+_bi::bind_t<
+ typename _bi::dm_result< M T::*, A1 >::type,
+ _mfi::dm<M, T>,
+ typename _bi::list_av_1<A1>::type
+>
+
+BOOST_BIND( M T::*f, A1 a1 )
+{
+ typedef typename _bi::dm_result< M T::*, A1 >::type result_type;
+ typedef _mfi::dm<M, T> F;
+ typedef typename _bi::list_av_1<A1>::type list_type;
+ return _bi::bind_t< result_type, F, list_type >( F( f ), list_type( a1 ) );
+}
+
+#endif
+
+} // namespace boost
+
+#ifndef BOOST_BIND_NO_PLACEHOLDERS
+
+# include <boost/bind/placeholders.hpp>
+
+#endif
+
+#ifdef BOOST_MSVC
+# pragma warning(default: 4512) // assignment operator could not be generated
+# pragma warning(pop)
+#endif
+
+#endif // #ifndef BOOST_BIND_HPP_INCLUDED
diff --git a/boost/boost/bind/apply.hpp b/boost/boost/bind/apply.hpp
new file mode 100644
index 00000000000..6a43a89ac85
--- /dev/null
+++ b/boost/boost/bind/apply.hpp
@@ -0,0 +1,74 @@
+#ifndef BOOST_BIND_APPLY_HPP_INCLUDED
+#define BOOST_BIND_APPLY_HPP_INCLUDED
+
+//
+// apply.hpp
+//
+// Copyright (c) 2002, 2003 Peter Dimov and Multi Media Ltd.
+//
+// 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)
+//
+
+namespace boost
+{
+
+template<class R> struct apply
+{
+ typedef R result_type;
+
+ template<class F> result_type operator()(F & f) const
+ {
+ return f();
+ }
+
+ template<class F, class A1> result_type operator()(F & f, A1 & a1) const
+ {
+ return f(a1);
+ }
+
+ template<class F, class A1, class A2> result_type operator()(F & f, A1 & a1, A2 & a2) const
+ {
+ return f(a1, a2);
+ }
+
+ template<class F, class A1, class A2, class A3> result_type operator()(F & f, A1 & a1, A2 & a2, A3 & a3) const
+ {
+ return f(a1, a2, a3);
+ }
+
+ template<class F, class A1, class A2, class A3, class A4> result_type operator()(F & f, A1 & a1, A2 & a2, A3 & a3, A4 & a4) const
+ {
+ return f(a1, a2, a3, a4);
+ }
+
+ template<class F, class A1, class A2, class A3, class A4, class A5> result_type operator()(F & f, A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5) const
+ {
+ return f(a1, a2, a3, a4, a5);
+ }
+
+ template<class F, class A1, class A2, class A3, class A4, class A5, class A6> result_type operator()(F & f, A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6) const
+ {
+ return f(a1, a2, a3, a4, a5, a6);
+ }
+
+ template<class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7> result_type operator()(F & f, A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7) const
+ {
+ return f(a1, a2, a3, a4, a5, a6, a7);
+ }
+
+ template<class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> result_type operator()(F & f, A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8) const
+ {
+ return f(a1, a2, a3, a4, a5, a6, a7, a8);
+ }
+
+ template<class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()(F & f, A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8, A9 & a9) const
+ {
+ return f(a1, a2, a3, a4, a5, a6, a7, a8, a9);
+ }
+};
+
+} // namespace boost
+
+#endif // #ifndef BOOST_BIND_APPLY_HPP_INCLUDED
diff --git a/boost/boost/bind/arg.hpp b/boost/boost/bind/arg.hpp
new file mode 100644
index 00000000000..90e966e5f4e
--- /dev/null
+++ b/boost/boost/bind/arg.hpp
@@ -0,0 +1,36 @@
+#ifndef BOOST_BIND_ARG_HPP_INCLUDED
+#define BOOST_BIND_ARG_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+// bind/arg.hpp
+//
+// Copyright (c) 2002 Peter Dimov and Multi Media Ltd.
+//
+// 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/bind/bind.html for documentation.
+//
+
+namespace boost
+{
+
+template<int I> class arg
+{
+};
+
+template<int I> bool operator==(arg<I> const &, arg<I> const &)
+{
+ return true;
+}
+
+} // namespace boost
+
+#endif // #ifndef BOOST_BIND_ARG_HPP_INCLUDED
diff --git a/boost/boost/bind/bind_cc.hpp b/boost/boost/bind/bind_cc.hpp
new file mode 100644
index 00000000000..35f8eceb9e5
--- /dev/null
+++ b/boost/boost/bind/bind_cc.hpp
@@ -0,0 +1,117 @@
+//
+// bind/bind_cc.hpp - support for different calling conventions
+//
+// Do not include this header directly.
+//
+// Copyright (c) 2001 Peter Dimov and Multi Media Ltd.
+//
+// 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/bind/bind.html for documentation.
+//
+
+template<class R>
+ _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (), _bi::list0>
+ BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) ())
+{
+ typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) ();
+ typedef _bi::list0 list_type;
+ return _bi::bind_t<R, F, list_type> (f, list_type());
+}
+
+template<class R, class B1, class A1>
+ _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1), typename _bi::list_av_1<A1>::type>
+ BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1), A1 a1)
+{
+ typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1);
+ typedef typename _bi::list_av_1<A1>::type list_type;
+ return _bi::bind_t<R, F, list_type> (f, list_type(a1));
+}
+
+template<class R, class B1, class B2, class A1, class A2>
+ _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2), typename _bi::list_av_2<A1, A2>::type>
+ BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2), A1 a1, A2 a2)
+{
+ typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2);
+ typedef typename _bi::list_av_2<A1, A2>::type list_type;
+ return _bi::bind_t<R, F, list_type> (f, list_type(a1, a2));
+}
+
+template<class R,
+ class B1, class B2, class B3,
+ class A1, class A2, class A3>
+ _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3), typename _bi::list_av_3<A1, A2, A3>::type>
+ BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3), A1 a1, A2 a2, A3 a3)
+{
+ typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3);
+ typedef typename _bi::list_av_3<A1, A2, A3>::type list_type;
+ return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3));
+}
+
+template<class R,
+ class B1, class B2, class B3, class B4,
+ class A1, class A2, class A3, class A4>
+ _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3, B4), typename _bi::list_av_4<A1, A2, A3, A4>::type>
+ BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4), A1 a1, A2 a2, A3 a3, A4 a4)
+{
+ typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4);
+ typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type;
+ return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4));
+}
+
+template<class R,
+ class B1, class B2, class B3, class B4, class B5,
+ class A1, class A2, class A3, class A4, class A5>
+ _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3, B4, B5), typename _bi::list_av_5<A1, A2, A3, A4, A5>::type>
+ BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)
+{
+ typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4, B5);
+ typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type;
+ return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5));
+}
+
+template<class R,
+ class B1, class B2, class B3, class B4, class B5, class B6,
+ class A1, class A2, class A3, class A4, class A5, class A6>
+ _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3, B4, B5, B6), typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type>
+ BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5, B6), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)
+{
+ typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4, B5, B6);
+ typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type;
+ return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6));
+}
+
+template<class R,
+ class B1, class B2, class B3, class B4, class B5, class B6, class B7,
+ class A1, class A2, class A3, class A4, class A5, class A6, class A7>
+ _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3, B4, B5, B6, B7), typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type>
+ BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5, B6, B7), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)
+{
+ typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4, B5, B6, B7);
+ typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type;
+ return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7));
+}
+
+template<class R,
+ class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8,
+ class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
+ _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3, B4, B5, B6, B7, B8), typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type>
+ BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5, B6, B7, B8), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)
+{
+ typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4, B5, B6, B7, B8);
+ typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type;
+ return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8));
+}
+
+template<class R,
+ class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8, class B9,
+ class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>
+ _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3, B4, B5, B6, B7, B8, B9), typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type>
+ BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5, B6, B7, B8, B9), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)
+{
+ typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4, B5, B6, B7, B8, B9);
+ typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type;
+ return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9));
+}
diff --git a/boost/boost/bind/bind_mf_cc.hpp b/boost/boost/bind/bind_mf_cc.hpp
new file mode 100644
index 00000000000..88be8222f39
--- /dev/null
+++ b/boost/boost/bind/bind_mf_cc.hpp
@@ -0,0 +1,227 @@
+//
+// bind/bind_mf_cc.hpp - support for different calling conventions
+//
+// Do not include this header directly.
+//
+// Copyright (c) 2001 Peter Dimov and Multi Media Ltd.
+//
+// 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/bind/bind.html for documentation.
+//
+
+// 0
+
+template<class R, class T,
+ class A1>
+ _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf0)<R, T>, typename _bi::list_av_1<A1>::type>
+ BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (), A1 a1)
+{
+ typedef _mfi::BOOST_BIND_MF_NAME(mf0)<R, T> F;
+ typedef typename _bi::list_av_1<A1>::type list_type;
+ return _bi::bind_t<R, F, list_type>(F(f), list_type(a1));
+}
+
+template<class R, class T,
+ class A1>
+ _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf0)<R, T>, typename _bi::list_av_1<A1>::type>
+ BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) () const, A1 a1)
+{
+ typedef _mfi::BOOST_BIND_MF_NAME(cmf0)<R, T> F;
+ typedef typename _bi::list_av_1<A1>::type list_type;
+ return _bi::bind_t<R, F, list_type>(F(f), list_type(a1));
+}
+
+// 1
+
+template<class R, class T,
+ class B1,
+ class A1, class A2>
+ _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf1)<R, T, B1>, typename _bi::list_av_2<A1, A2>::type>
+ BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1), A1 a1, A2 a2)
+{
+ typedef _mfi::BOOST_BIND_MF_NAME(mf1)<R, T, B1> F;
+ typedef typename _bi::list_av_2<A1, A2>::type list_type;
+ return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2));
+}
+
+template<class R, class T,
+ class B1,
+ class A1, class A2>
+ _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf1)<R, T, B1>, typename _bi::list_av_2<A1, A2>::type>
+ BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1) const, A1 a1, A2 a2)
+{
+ typedef _mfi::BOOST_BIND_MF_NAME(cmf1)<R, T, B1> F;
+ typedef typename _bi::list_av_2<A1, A2>::type list_type;
+ return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2));
+}
+
+// 2
+
+template<class R, class T,
+ class B1, class B2,
+ class A1, class A2, class A3>
+ _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf2)<R, T, B1, B2>, typename _bi::list_av_3<A1, A2, A3>::type>
+ BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2), A1 a1, A2 a2, A3 a3)
+{
+ typedef _mfi::BOOST_BIND_MF_NAME(mf2)<R, T, B1, B2> F;
+ typedef typename _bi::list_av_3<A1, A2, A3>::type list_type;
+ return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3));
+}
+
+template<class R, class T,
+ class B1, class B2,
+ class A1, class A2, class A3>
+ _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf2)<R, T, B1, B2>, typename _bi::list_av_3<A1, A2, A3>::type>
+ BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2) const, A1 a1, A2 a2, A3 a3)
+{
+ typedef _mfi::BOOST_BIND_MF_NAME(cmf2)<R, T, B1, B2> F;
+ typedef typename _bi::list_av_3<A1, A2, A3>::type list_type;
+ return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3));
+}
+
+// 3
+
+template<class R, class T,
+ class B1, class B2, class B3,
+ class A1, class A2, class A3, class A4>
+ _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf3)<R, T, B1, B2, B3>, typename _bi::list_av_4<A1, A2, A3, A4>::type>
+ BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3), A1 a1, A2 a2, A3 a3, A4 a4)
+{
+ typedef _mfi::BOOST_BIND_MF_NAME(mf3)<R, T, B1, B2, B3> F;
+ typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type;
+ return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4));
+}
+
+template<class R, class T,
+ class B1, class B2, class B3,
+ class A1, class A2, class A3, class A4>
+ _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf3)<R, T, B1, B2, B3>, typename _bi::list_av_4<A1, A2, A3, A4>::type>
+ BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3) const, A1 a1, A2 a2, A3 a3, A4 a4)
+{
+ typedef _mfi::BOOST_BIND_MF_NAME(cmf3)<R, T, B1, B2, B3> F;
+ typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type;
+ return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4));
+}
+
+// 4
+
+template<class R, class T,
+ class B1, class B2, class B3, class B4,
+ class A1, class A2, class A3, class A4, class A5>
+ _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf4)<R, T, B1, B2, B3, B4>, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type>
+ BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)
+{
+ typedef _mfi::BOOST_BIND_MF_NAME(mf4)<R, T, B1, B2, B3, B4> F;
+ typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type;
+ return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5));
+}
+
+template<class R, class T,
+ class B1, class B2, class B3, class B4,
+ class A1, class A2, class A3, class A4, class A5>
+ _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf4)<R, T, B1, B2, B3, B4>, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type>
+ BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)
+{
+ typedef _mfi::BOOST_BIND_MF_NAME(cmf4)<R, T, B1, B2, B3, B4> F;
+ typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type;
+ return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5));
+}
+
+// 5
+
+template<class R, class T,
+ class B1, class B2, class B3, class B4, class B5,
+ class A1, class A2, class A3, class A4, class A5, class A6>
+ _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf5)<R, T, B1, B2, B3, B4, B5>, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type>
+ BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)
+{
+ typedef _mfi::BOOST_BIND_MF_NAME(mf5)<R, T, B1, B2, B3, B4, B5> F;
+ typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type;
+ return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6));
+}
+
+template<class R, class T,
+ class B1, class B2, class B3, class B4, class B5,
+ class A1, class A2, class A3, class A4, class A5, class A6>
+ _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf5)<R, T, B1, B2, B3, B4, B5>, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type>
+ BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)
+{
+ typedef _mfi::BOOST_BIND_MF_NAME(cmf5)<R, T, B1, B2, B3, B4, B5> F;
+ typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type;
+ return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6));
+}
+
+// 6
+
+template<class R, class T,
+ class B1, class B2, class B3, class B4, class B5, class B6,
+ class A1, class A2, class A3, class A4, class A5, class A6, class A7>
+ _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf6)<R, T, B1, B2, B3, B4, B5, B6>, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type>
+ BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)
+{
+ typedef _mfi::BOOST_BIND_MF_NAME(mf6)<R, T, B1, B2, B3, B4, B5, B6> F;
+ typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type;
+ return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7));
+}
+
+template<class R, class T,
+ class B1, class B2, class B3, class B4, class B5, class B6,
+ class A1, class A2, class A3, class A4, class A5, class A6, class A7>
+ _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf6)<R, T, B1, B2, B3, B4, B5, B6>, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type>
+ BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)
+{
+ typedef _mfi::BOOST_BIND_MF_NAME(cmf6)<R, T, B1, B2, B3, B4, B5, B6> F;
+ typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type;
+ return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7));
+}
+
+// 7
+
+template<class R, class T,
+ class B1, class B2, class B3, class B4, class B5, class B6, class B7,
+ class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
+ _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf7)<R, T, B1, B2, B3, B4, B5, B6, B7>, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type>
+ BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)
+{
+ typedef _mfi::BOOST_BIND_MF_NAME(mf7)<R, T, B1, B2, B3, B4, B5, B6, B7> F;
+ typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type;
+ return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8));
+}
+
+template<class R, class T,
+ class B1, class B2, class B3, class B4, class B5, class B6, class B7,
+ class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
+ _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf7)<R, T, B1, B2, B3, B4, B5, B6, B7>, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type>
+ BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)
+{
+ typedef _mfi::BOOST_BIND_MF_NAME(cmf7)<R, T, B1, B2, B3, B4, B5, B6, B7> F;
+ typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type;
+ return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8));
+}
+
+// 8
+
+template<class R, class T,
+ class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8,
+ class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>
+ _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8>, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type>
+ BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7, B8), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)
+{
+ typedef _mfi::BOOST_BIND_MF_NAME(mf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8> F;
+ typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type;
+ return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9));
+}
+
+template<class R, class T,
+ class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8,
+ class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>
+ _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8>, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type>
+ BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7, B8) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)
+{
+ typedef _mfi::BOOST_BIND_MF_NAME(cmf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8> F;
+ typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type;
+ return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9));
+}
diff --git a/boost/boost/bind/bind_template.hpp b/boost/boost/bind/bind_template.hpp
new file mode 100644
index 00000000000..b2c295d2452
--- /dev/null
+++ b/boost/boost/bind/bind_template.hpp
@@ -0,0 +1,226 @@
+//
+// bind/bind_template.hpp
+//
+// Do not include this header directly.
+//
+// Copyright (c) 2001-2004 Peter Dimov and Multi Media Ltd.
+//
+// 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/bind/bind.html for documentation.
+//
+
+ typedef typename result_traits<R, F>::type result_type;
+
+ result_type operator()()
+ {
+ list0 a;
+ BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+ }
+
+ result_type operator()() const
+ {
+ list0 a;
+ BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+ }
+
+ template<class A1> result_type operator()(A1 & a1)
+ {
+ list1<A1 &> a(a1);
+ BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+ }
+
+ template<class A1> result_type operator()(A1 & a1) const
+ {
+ list1<A1 &> a(a1);
+ BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+ }
+
+#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \
+ && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)
+
+ template<class A1> result_type operator()(A1 const & a1)
+ {
+ list1<A1 const &> a(a1);
+ BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+ }
+
+ template<class A1> result_type operator()(A1 const & a1) const
+ {
+ list1<A1 const &> a(a1);
+ BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+ }
+
+#endif
+
+ template<class A1, class A2> result_type operator()(A1 & a1, A2 & a2)
+ {
+ list2<A1 &, A2 &> a(a1, a2);
+ BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+ }
+
+ template<class A1, class A2> result_type operator()(A1 & a1, A2 & a2) const
+ {
+ list2<A1 &, A2 &> a(a1, a2);
+ BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+ }
+
+#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \
+ && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)
+
+ template<class A1, class A2> result_type operator()(A1 const & a1, A2 & a2)
+ {
+ list2<A1 const &, A2 &> a(a1, a2);
+ BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+ }
+
+ template<class A1, class A2> result_type operator()(A1 const & a1, A2 & a2) const
+ {
+ list2<A1 const &, A2 &> a(a1, a2);
+ BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+ }
+
+
+ template<class A1, class A2> result_type operator()(A1 & a1, A2 const & a2)
+ {
+ list2<A1 &, A2 const &> a(a1, a2);
+ BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+ }
+
+ template<class A1, class A2> result_type operator()(A1 & a1, A2 const & a2) const
+ {
+ list2<A1 &, A2 const &> a(a1, a2);
+ BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+ }
+
+
+ template<class A1, class A2> result_type operator()(A1 const & a1, A2 const & a2)
+ {
+ list2<A1 const &, A2 const &> a(a1, a2);
+ BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+ }
+
+ template<class A1, class A2> result_type operator()(A1 const & a1, A2 const & a2) const
+ {
+ list2<A1 const &, A2 const &> a(a1, a2);
+ BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+ }
+
+#endif
+
+ template<class A1, class A2, class A3> result_type operator()(A1 & a1, A2 & a2, A3 & a3)
+ {
+ list3<A1 &, A2 &, A3 &> a(a1, a2, a3);
+ BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+ }
+
+ template<class A1, class A2, class A3> result_type operator()(A1 & a1, A2 & a2, A3 & a3) const
+ {
+ list3<A1 &, A2 &, A3 &> a(a1, a2, a3);
+ BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+ }
+
+ template<class A1, class A2, class A3, class A4> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4)
+ {
+ list4<A1 &, A2 &, A3 &, A4 &> a(a1, a2, a3, a4);
+ BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+ }
+
+ template<class A1, class A2, class A3, class A4> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4) const
+ {
+ list4<A1 &, A2 &, A3 &, A4 &> a(a1, a2, a3, a4);
+ BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+ }
+
+ template<class A1, class A2, class A3, class A4, class A5> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5)
+ {
+ list5<A1 &, A2 &, A3 &, A4 &, A5 &> a(a1, a2, a3, a4, a5);
+ BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+ }
+
+ template<class A1, class A2, class A3, class A4, class A5> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5) const
+ {
+ list5<A1 &, A2 &, A3 &, A4 &, A5 &> a(a1, a2, a3, a4, a5);
+ BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+ }
+
+ template<class A1, class A2, class A3, class A4, class A5, class A6> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6)
+ {
+ list6<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &> a(a1, a2, a3, a4, a5, a6);
+ BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+ }
+
+ template<class A1, class A2, class A3, class A4, class A5, class A6> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6) const
+ {
+ list6<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &> a(a1, a2, a3, a4, a5, a6);
+ BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+ }
+
+ template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7)
+ {
+ list7<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &> a(a1, a2, a3, a4, a5, a6, a7);
+ BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+ }
+
+ template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7) const
+ {
+ list7<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &> a(a1, a2, a3, a4, a5, a6, a7);
+ BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+ }
+
+ template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8)
+ {
+ list8<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &, A8 &> a(a1, a2, a3, a4, a5, a6, a7, a8);
+ BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+ }
+
+ template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8) const
+ {
+ list8<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &, A8 &> a(a1, a2, a3, a4, a5, a6, a7, a8);
+ BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+ }
+
+ template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8, A9 & a9)
+ {
+ list9<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &, A8 &, A9 &> a(a1, a2, a3, a4, a5, a6, a7, a8, a9);
+ BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+ }
+
+ template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8, A9 & a9) const
+ {
+ list9<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &, A8 &, A9 &> a(a1, a2, a3, a4, a5, a6, a7, a8, a9);
+ BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+ }
+
+ template<class A> result_type eval(A & a)
+ {
+ BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+ }
+
+ template<class A> result_type eval(A & a) const
+ {
+ BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+ }
+
+ template<class V> void accept(V & v) const
+ {
+#if !defined( BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP ) && !defined( __BORLANDC__ )
+
+ using boost::visit_each;
+
+#endif
+ BOOST_BIND_VISIT_EACH(v, f_, 0);
+ l_.accept(v);
+ }
+
+ bool compare(this_type const & rhs) const
+ {
+ return ref_compare(f_, rhs.f_, 0) && l_ == rhs.l_;
+ }
+
+private:
+
+ F f_;
+ L l_;
diff --git a/boost/boost/bind/make_adaptable.hpp b/boost/boost/bind/make_adaptable.hpp
new file mode 100644
index 00000000000..b9f083e307d
--- /dev/null
+++ b/boost/boost/bind/make_adaptable.hpp
@@ -0,0 +1,187 @@
+#ifndef BOOST_BIND_MAKE_ADAPTABLE_HPP_INCLUDED
+#define BOOST_BIND_MAKE_ADAPTABLE_HPP_INCLUDED
+
+//
+// make_adaptable.hpp
+//
+// Copyright (c) 2002 Peter Dimov and Multi Media Ltd.
+//
+// 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)
+//
+
+namespace boost
+{
+
+namespace _bi
+{
+
+template<class R, class F> class af0
+{
+public:
+
+ typedef R result_type;
+
+ explicit af0(F f): f_(f)
+ {
+ }
+
+ result_type operator()()
+ {
+ return f_();
+ }
+
+ result_type operator()() const
+ {
+ return f_();
+ }
+
+private:
+
+ F f_;
+};
+
+template<class R, class A1, class F> class af1
+{
+public:
+
+ typedef R result_type;
+ typedef A1 argument_type;
+ typedef A1 arg1_type;
+
+ explicit af1(F f): f_(f)
+ {
+ }
+
+ result_type operator()(A1 a1)
+ {
+ return f_(a1);
+ }
+
+ result_type operator()(A1 a1) const
+ {
+ return f_(a1);
+ }
+
+private:
+
+ F f_;
+};
+
+template<class R, class A1, class A2, class F> class af2
+{
+public:
+
+ typedef R result_type;
+ typedef A1 first_argument_type;
+ typedef A2 second_argument_type;
+ typedef A1 arg1_type;
+ typedef A2 arg2_type;
+
+ explicit af2(F f): f_(f)
+ {
+ }
+
+ result_type operator()(A1 a1, A2 a2)
+ {
+ return f_(a1, a2);
+ }
+
+ result_type operator()(A1 a1, A2 a2) const
+ {
+ return f_(a1, a2);
+ }
+
+private:
+
+ F f_;
+};
+
+template<class R, class A1, class A2, class A3, class F> class af3
+{
+public:
+
+ typedef R result_type;
+ typedef A1 arg1_type;
+ typedef A2 arg2_type;
+ typedef A3 arg3_type;
+
+ explicit af3(F f): f_(f)
+ {
+ }
+
+ result_type operator()(A1 a1, A2 a2, A3 a3)
+ {
+ return f_(a1, a2, a3);
+ }
+
+ result_type operator()(A1 a1, A2 a2, A3 a3) const
+ {
+ return f_(a1, a2, a3);
+ }
+
+private:
+
+ F f_;
+};
+
+template<class R, class A1, class A2, class A3, class A4, class F> class af4
+{
+public:
+
+ typedef R result_type;
+ typedef A1 arg1_type;
+ typedef A2 arg2_type;
+ typedef A3 arg3_type;
+ typedef A4 arg4_type;
+
+ explicit af4(F f): f_(f)
+ {
+ }
+
+ result_type operator()(A1 a1, A2 a2, A3 a3, A4 a4)
+ {
+ return f_(a1, a2, a3, a4);
+ }
+
+ result_type operator()(A1 a1, A2 a2, A3 a3, A4 a4) const
+ {
+ return f_(a1, a2, a3, a4);
+ }
+
+private:
+
+ F f_;
+};
+
+} // namespace _bi
+
+template<class R, class F> _bi::af0<R, F> make_adaptable(F f)
+{
+ return _bi::af0<R, F>(f);
+}
+
+template<class R, class A1, class F> _bi::af1<R, A1, F> make_adaptable(F f)
+{
+ return _bi::af1<R, A1, F>(f);
+}
+
+template<class R, class A1, class A2, class F> _bi::af2<R, A1, A2, F> make_adaptable(F f)
+{
+ return _bi::af2<R, A1, A2, F>(f);
+}
+
+template<class R, class A1, class A2, class A3, class F> _bi::af3<R, A1, A2, A3, F> make_adaptable(F f)
+{
+ return _bi::af3<R, A1, A2, A3, F>(f);
+}
+
+template<class R, class A1, class A2, class A3, class A4, class F> _bi::af4<R, A1, A2, A3, A4, F> make_adaptable(F f)
+{
+ return _bi::af4<R, A1, A2, A3, A4, F>(f);
+}
+
+} // namespace boost
+
+#endif // #ifndef BOOST_BIND_MAKE_ADAPTABLE_HPP_INCLUDED
diff --git a/boost/boost/bind/mem_fn_cc.hpp b/boost/boost/bind/mem_fn_cc.hpp
new file mode 100644
index 00000000000..8b6ea0ba13d
--- /dev/null
+++ b/boost/boost/bind/mem_fn_cc.hpp
@@ -0,0 +1,103 @@
+//
+// bind/mem_fn_cc.hpp - support for different calling conventions
+//
+// Do not include this header directly.
+//
+// Copyright (c) 2001 Peter Dimov and Multi Media Ltd.
+//
+// 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/bind/mem_fn.html for documentation.
+//
+
+template<class R, class T> _mfi::BOOST_MEM_FN_NAME(mf0)<R, T> mem_fn(R (BOOST_MEM_FN_CC T::*f) ())
+{
+ return _mfi::BOOST_MEM_FN_NAME(mf0)<R, T>(f);
+}
+
+template<class R, class T> _mfi::BOOST_MEM_FN_NAME(cmf0)<R, T> mem_fn(R (BOOST_MEM_FN_CC T::*f) () const)
+{
+ return _mfi::BOOST_MEM_FN_NAME(cmf0)<R, T>(f);
+}
+
+template<class R, class T, class A1> _mfi::BOOST_MEM_FN_NAME(mf1)<R, T, A1> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1))
+{
+ return _mfi::BOOST_MEM_FN_NAME(mf1)<R, T, A1>(f);
+}
+
+template<class R, class T, class A1> _mfi::BOOST_MEM_FN_NAME(cmf1)<R, T, A1> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1) const)
+{
+ return _mfi::BOOST_MEM_FN_NAME(cmf1)<R, T, A1>(f);
+}
+
+template<class R, class T, class A1, class A2> _mfi::BOOST_MEM_FN_NAME(mf2)<R, T, A1, A2> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2))
+{
+ return _mfi::BOOST_MEM_FN_NAME(mf2)<R, T, A1, A2>(f);
+}
+
+template<class R, class T, class A1, class A2> _mfi::BOOST_MEM_FN_NAME(cmf2)<R, T, A1, A2> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2) const)
+{
+ return _mfi::BOOST_MEM_FN_NAME(cmf2)<R, T, A1, A2>(f);
+}
+
+template<class R, class T, class A1, class A2, class A3> _mfi::BOOST_MEM_FN_NAME(mf3)<R, T, A1, A2, A3> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3))
+{
+ return _mfi::BOOST_MEM_FN_NAME(mf3)<R, T, A1, A2, A3>(f);
+}
+
+template<class R, class T, class A1, class A2, class A3> _mfi::BOOST_MEM_FN_NAME(cmf3)<R, T, A1, A2, A3> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3) const)
+{
+ return _mfi::BOOST_MEM_FN_NAME(cmf3)<R, T, A1, A2, A3>(f);
+}
+
+template<class R, class T, class A1, class A2, class A3, class A4> _mfi::BOOST_MEM_FN_NAME(mf4)<R, T, A1, A2, A3, A4> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4))
+{
+ return _mfi::BOOST_MEM_FN_NAME(mf4)<R, T, A1, A2, A3, A4>(f);
+}
+
+template<class R, class T, class A1, class A2, class A3, class A4> _mfi::BOOST_MEM_FN_NAME(cmf4)<R, T, A1, A2, A3, A4> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4) const)
+{
+ return _mfi::BOOST_MEM_FN_NAME(cmf4)<R, T, A1, A2, A3, A4>(f);
+}
+
+template<class R, class T, class A1, class A2, class A3, class A4, class A5> _mfi::BOOST_MEM_FN_NAME(mf5)<R, T, A1, A2, A3, A4, A5> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5))
+{
+ return _mfi::BOOST_MEM_FN_NAME(mf5)<R, T, A1, A2, A3, A4, A5>(f);
+}
+
+template<class R, class T, class A1, class A2, class A3, class A4, class A5> _mfi::BOOST_MEM_FN_NAME(cmf5)<R, T, A1, A2, A3, A4, A5> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5) const)
+{
+ return _mfi::BOOST_MEM_FN_NAME(cmf5)<R, T, A1, A2, A3, A4, A5>(f);
+}
+
+template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6> _mfi::BOOST_MEM_FN_NAME(mf6)<R, T, A1, A2, A3, A4, A5, A6> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5, A6))
+{
+ return _mfi::BOOST_MEM_FN_NAME(mf6)<R, T, A1, A2, A3, A4, A5, A6>(f);
+}
+
+template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6> _mfi::BOOST_MEM_FN_NAME(cmf6)<R, T, A1, A2, A3, A4, A5, A6> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5, A6) const)
+{
+ return _mfi::BOOST_MEM_FN_NAME(cmf6)<R, T, A1, A2, A3, A4, A5, A6>(f);
+}
+
+template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7> _mfi::BOOST_MEM_FN_NAME(mf7)<R, T, A1, A2, A3, A4, A5, A6, A7> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5, A6, A7))
+{
+ return _mfi::BOOST_MEM_FN_NAME(mf7)<R, T, A1, A2, A3, A4, A5, A6, A7>(f);
+}
+
+template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7> _mfi::BOOST_MEM_FN_NAME(cmf7)<R, T, A1, A2, A3, A4, A5, A6, A7> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5, A6, A7) const)
+{
+ return _mfi::BOOST_MEM_FN_NAME(cmf7)<R, T, A1, A2, A3, A4, A5, A6, A7>(f);
+}
+
+template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> _mfi::BOOST_MEM_FN_NAME(mf8)<R, T, A1, A2, A3, A4, A5, A6, A7, A8> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5, A6, A7, A8))
+{
+ return _mfi::BOOST_MEM_FN_NAME(mf8)<R, T, A1, A2, A3, A4, A5, A6, A7, A8>(f);
+}
+
+template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> _mfi::BOOST_MEM_FN_NAME(cmf8)<R, T, A1, A2, A3, A4, A5, A6, A7, A8> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5, A6, A7, A8) const)
+{
+ return _mfi::BOOST_MEM_FN_NAME(cmf8)<R, T, A1, A2, A3, A4, A5, A6, A7, A8>(f);
+}
diff --git a/boost/boost/bind/mem_fn_template.hpp b/boost/boost/bind/mem_fn_template.hpp
new file mode 100644
index 00000000000..1db0713b772
--- /dev/null
+++ b/boost/boost/bind/mem_fn_template.hpp
@@ -0,0 +1,1020 @@
+//
+// bind/mem_fn_template.hpp
+//
+// Do not include this header directly
+//
+// Copyright (c) 2001 Peter Dimov and Multi Media Ltd.
+//
+// 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/bind/mem_fn.html for documentation.
+//
+
+#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
+# define BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
+#endif
+
+// mf0
+
+template<class R, class T BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf0)
+{
+public:
+
+ typedef R result_type;
+ typedef T * argument_type;
+
+private:
+
+ BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) ())
+ F f_;
+
+ template<class U> R call(U & u, T const *) const
+ {
+ BOOST_MEM_FN_RETURN (u.*f_)();
+ }
+
+ template<class U> R call(U & u, void const *) const
+ {
+ BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)();
+ }
+
+public:
+
+ explicit BOOST_MEM_FN_NAME(mf0)(F f): f_(f) {}
+
+ R operator()(T * p) const
+ {
+ BOOST_MEM_FN_RETURN (p->*f_)();
+ }
+
+ template<class U> R operator()(U & u) const
+ {
+ BOOST_MEM_FN_RETURN call(u, &u);
+ }
+
+#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
+
+ template<class U> R operator()(U const & u) const
+ {
+ BOOST_MEM_FN_RETURN call(u, &u);
+ }
+
+#endif
+
+ R operator()(T & t) const
+ {
+ BOOST_MEM_FN_RETURN (t.*f_)();
+ }
+
+ bool operator==(BOOST_MEM_FN_NAME(mf0) const & rhs) const
+ {
+ return f_ == rhs.f_;
+ }
+
+ bool operator!=(BOOST_MEM_FN_NAME(mf0) const & rhs) const
+ {
+ return f_ != rhs.f_;
+ }
+};
+
+// cmf0
+
+template<class R, class T BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf0)
+{
+public:
+
+ typedef R result_type;
+ typedef T const * argument_type;
+
+private:
+
+ BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) () const)
+ F f_;
+
+ template<class U> R call(U & u, T const *) const
+ {
+ BOOST_MEM_FN_RETURN (u.*f_)();
+ }
+
+ template<class U> R call(U & u, void const *) const
+ {
+ BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)();
+ }
+
+public:
+
+ explicit BOOST_MEM_FN_NAME(cmf0)(F f): f_(f) {}
+
+ template<class U> R operator()(U const & u) const
+ {
+ BOOST_MEM_FN_RETURN call(u, &u);
+ }
+
+ R operator()(T const & t) const
+ {
+ BOOST_MEM_FN_RETURN (t.*f_)();
+ }
+
+ bool operator==(BOOST_MEM_FN_NAME(cmf0) const & rhs) const
+ {
+ return f_ == rhs.f_;
+ }
+
+ bool operator!=(BOOST_MEM_FN_NAME(cmf0) const & rhs) const
+ {
+ return f_ != rhs.f_;
+ }
+};
+
+// mf1
+
+template<class R, class T, class A1 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf1)
+{
+public:
+
+ typedef R result_type;
+ typedef T * first_argument_type;
+ typedef A1 second_argument_type;
+
+private:
+
+ BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1))
+ F f_;
+
+ template<class U, class B1> R call(U & u, T const *, B1 & b1) const
+ {
+ BOOST_MEM_FN_RETURN (u.*f_)(b1);
+ }
+
+ template<class U, class B1> R call(U & u, void const *, B1 & b1) const
+ {
+ BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1);
+ }
+
+public:
+
+ explicit BOOST_MEM_FN_NAME(mf1)(F f): f_(f) {}
+
+ R operator()(T * p, A1 a1) const
+ {
+ BOOST_MEM_FN_RETURN (p->*f_)(a1);
+ }
+
+ template<class U> R operator()(U & u, A1 a1) const
+ {
+ BOOST_MEM_FN_RETURN call(u, &u, a1);
+ }
+
+#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
+
+ template<class U> R operator()(U const & u, A1 a1) const
+ {
+ BOOST_MEM_FN_RETURN call(u, &u, a1);
+ }
+
+#endif
+
+ R operator()(T & t, A1 a1) const
+ {
+ BOOST_MEM_FN_RETURN (t.*f_)(a1);
+ }
+
+ bool operator==(BOOST_MEM_FN_NAME(mf1) const & rhs) const
+ {
+ return f_ == rhs.f_;
+ }
+
+ bool operator!=(BOOST_MEM_FN_NAME(mf1) const & rhs) const
+ {
+ return f_ != rhs.f_;
+ }
+};
+
+// cmf1
+
+template<class R, class T, class A1 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf1)
+{
+public:
+
+ typedef R result_type;
+ typedef T const * first_argument_type;
+ typedef A1 second_argument_type;
+
+private:
+
+ BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1) const)
+ F f_;
+
+ template<class U, class B1> R call(U & u, T const *, B1 & b1) const
+ {
+ BOOST_MEM_FN_RETURN (u.*f_)(b1);
+ }
+
+ template<class U, class B1> R call(U & u, void const *, B1 & b1) const
+ {
+ BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1);
+ }
+
+public:
+
+ explicit BOOST_MEM_FN_NAME(cmf1)(F f): f_(f) {}
+
+ template<class U> R operator()(U const & u, A1 a1) const
+ {
+ BOOST_MEM_FN_RETURN call(u, &u, a1);
+ }
+
+ R operator()(T const & t, A1 a1) const
+ {
+ BOOST_MEM_FN_RETURN (t.*f_)(a1);
+ }
+
+ bool operator==(BOOST_MEM_FN_NAME(cmf1) const & rhs) const
+ {
+ return f_ == rhs.f_;
+ }
+
+ bool operator!=(BOOST_MEM_FN_NAME(cmf1) const & rhs) const
+ {
+ return f_ != rhs.f_;
+ }
+};
+
+// mf2
+
+template<class R, class T, class A1, class A2 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf2)
+{
+public:
+
+ typedef R result_type;
+
+private:
+
+ BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2))
+ F f_;
+
+ template<class U, class B1, class B2> R call(U & u, T const *, B1 & b1, B2 & b2) const
+ {
+ BOOST_MEM_FN_RETURN (u.*f_)(b1, b2);
+ }
+
+ template<class U, class B1, class B2> R call(U & u, void const *, B1 & b1, B2 & b2) const
+ {
+ BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2);
+ }
+
+public:
+
+ explicit BOOST_MEM_FN_NAME(mf2)(F f): f_(f) {}
+
+ R operator()(T * p, A1 a1, A2 a2) const
+ {
+ BOOST_MEM_FN_RETURN (p->*f_)(a1, a2);
+ }
+
+ template<class U> R operator()(U & u, A1 a1, A2 a2) const
+ {
+ BOOST_MEM_FN_RETURN call(u, &u, a1, a2);
+ }
+
+#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
+
+ template<class U> R operator()(U const & u, A1 a1, A2 a2) const
+ {
+ BOOST_MEM_FN_RETURN call(u, &u, a1, a2);
+ }
+
+#endif
+
+ R operator()(T & t, A1 a1, A2 a2) const
+ {
+ BOOST_MEM_FN_RETURN (t.*f_)(a1, a2);
+ }
+
+ bool operator==(BOOST_MEM_FN_NAME(mf2) const & rhs) const
+ {
+ return f_ == rhs.f_;
+ }
+
+ bool operator!=(BOOST_MEM_FN_NAME(mf2) const & rhs) const
+ {
+ return f_ != rhs.f_;
+ }
+};
+
+// cmf2
+
+template<class R, class T, class A1, class A2 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf2)
+{
+public:
+
+ typedef R result_type;
+
+private:
+
+ BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2) const)
+ F f_;
+
+ template<class U, class B1, class B2> R call(U & u, T const *, B1 & b1, B2 & b2) const
+ {
+ BOOST_MEM_FN_RETURN (u.*f_)(b1, b2);
+ }
+
+ template<class U, class B1, class B2> R call(U & u, void const *, B1 & b1, B2 & b2) const
+ {
+ BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2);
+ }
+
+public:
+
+ explicit BOOST_MEM_FN_NAME(cmf2)(F f): f_(f) {}
+
+ template<class U> R operator()(U const & u, A1 a1, A2 a2) const
+ {
+ BOOST_MEM_FN_RETURN call(u, &u, a1, a2);
+ }
+
+ R operator()(T const & t, A1 a1, A2 a2) const
+ {
+ BOOST_MEM_FN_RETURN (t.*f_)(a1, a2);
+ }
+
+ bool operator==(BOOST_MEM_FN_NAME(cmf2) const & rhs) const
+ {
+ return f_ == rhs.f_;
+ }
+
+ bool operator!=(BOOST_MEM_FN_NAME(cmf2) const & rhs) const
+ {
+ return f_ != rhs.f_;
+ }
+};
+
+// mf3
+
+template<class R, class T, class A1, class A2, class A3 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf3)
+{
+public:
+
+ typedef R result_type;
+
+private:
+
+ BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3))
+ F f_;
+
+ template<class U, class B1, class B2, class B3> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3) const
+ {
+ BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3);
+ }
+
+ template<class U, class B1, class B2, class B3> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3) const
+ {
+ BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3);
+ }
+
+public:
+
+ explicit BOOST_MEM_FN_NAME(mf3)(F f): f_(f) {}
+
+ R operator()(T * p, A1 a1, A2 a2, A3 a3) const
+ {
+ BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3);
+ }
+
+ template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3) const
+ {
+ BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3);
+ }
+
+#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
+
+ template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3) const
+ {
+ BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3);
+ }
+
+#endif
+
+ R operator()(T & t, A1 a1, A2 a2, A3 a3) const
+ {
+ BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3);
+ }
+
+ bool operator==(BOOST_MEM_FN_NAME(mf3) const & rhs) const
+ {
+ return f_ == rhs.f_;
+ }
+
+ bool operator!=(BOOST_MEM_FN_NAME(mf3) const & rhs) const
+ {
+ return f_ != rhs.f_;
+ }
+};
+
+// cmf3
+
+template<class R, class T, class A1, class A2, class A3 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf3)
+{
+public:
+
+ typedef R result_type;
+
+private:
+
+ BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3) const)
+ F f_;
+
+ template<class U, class B1, class B2, class B3> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3) const
+ {
+ BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3);
+ }
+
+ template<class U, class B1, class B2, class B3> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3) const
+ {
+ BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3);
+ }
+
+public:
+
+ explicit BOOST_MEM_FN_NAME(cmf3)(F f): f_(f) {}
+
+ template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3) const
+ {
+ BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3);
+ }
+
+ R operator()(T const & t, A1 a1, A2 a2, A3 a3) const
+ {
+ BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3);
+ }
+
+ bool operator==(BOOST_MEM_FN_NAME(cmf3) const & rhs) const
+ {
+ return f_ == rhs.f_;
+ }
+
+ bool operator!=(BOOST_MEM_FN_NAME(cmf3) const & rhs) const
+ {
+ return f_ != rhs.f_;
+ }
+};
+
+// mf4
+
+template<class R, class T, class A1, class A2, class A3, class A4 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf4)
+{
+public:
+
+ typedef R result_type;
+
+private:
+
+ BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4))
+ F f_;
+
+ template<class U, class B1, class B2, class B3, class B4> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4) const
+ {
+ BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4);
+ }
+
+ template<class U, class B1, class B2, class B3, class B4> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4) const
+ {
+ BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4);
+ }
+
+public:
+
+ explicit BOOST_MEM_FN_NAME(mf4)(F f): f_(f) {}
+
+ R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4) const
+ {
+ BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4);
+ }
+
+ template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4) const
+ {
+ BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4);
+ }
+
+#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
+
+ template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4) const
+ {
+ BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4);
+ }
+
+#endif
+
+ R operator()(T & t, A1 a1, A2 a2, A3 a3, A4 a4) const
+ {
+ BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4);
+ }
+
+ bool operator==(BOOST_MEM_FN_NAME(mf4) const & rhs) const
+ {
+ return f_ == rhs.f_;
+ }
+
+ bool operator!=(BOOST_MEM_FN_NAME(mf4) const & rhs) const
+ {
+ return f_ != rhs.f_;
+ }
+};
+
+// cmf4
+
+template<class R, class T, class A1, class A2, class A3, class A4 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf4)
+{
+public:
+
+ typedef R result_type;
+
+private:
+
+ BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4) const)
+ F f_;
+
+ template<class U, class B1, class B2, class B3, class B4> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4) const
+ {
+ BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4);
+ }
+
+ template<class U, class B1, class B2, class B3, class B4> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4) const
+ {
+ BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4);
+ }
+
+public:
+
+ explicit BOOST_MEM_FN_NAME(cmf4)(F f): f_(f) {}
+
+ template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4) const
+ {
+ BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4);
+ }
+
+ R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4) const
+ {
+ BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4);
+ }
+
+ bool operator==(BOOST_MEM_FN_NAME(cmf4) const & rhs) const
+ {
+ return f_ == rhs.f_;
+ }
+
+ bool operator!=(BOOST_MEM_FN_NAME(cmf4) const & rhs) const
+ {
+ return f_ != rhs.f_;
+ }
+};
+
+// mf5
+
+template<class R, class T, class A1, class A2, class A3, class A4, class A5 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf5)
+{
+public:
+
+ typedef R result_type;
+
+private:
+
+ BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5))
+ F f_;
+
+ template<class U, class B1, class B2, class B3, class B4, class B5> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5) const
+ {
+ BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5);
+ }
+
+ template<class U, class B1, class B2, class B3, class B4, class B5> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5) const
+ {
+ BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5);
+ }
+
+public:
+
+ explicit BOOST_MEM_FN_NAME(mf5)(F f): f_(f) {}
+
+ R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const
+ {
+ BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4, a5);
+ }
+
+ template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const
+ {
+ BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5);
+ }
+
+#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
+
+ template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const
+ {
+ BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5);
+ }
+
+#endif
+
+ R operator()(T & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const
+ {
+ BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5);
+ }
+
+ bool operator==(BOOST_MEM_FN_NAME(mf5) const & rhs) const
+ {
+ return f_ == rhs.f_;
+ }
+
+ bool operator!=(BOOST_MEM_FN_NAME(mf5) const & rhs) const
+ {
+ return f_ != rhs.f_;
+ }
+};
+
+// cmf5
+
+template<class R, class T, class A1, class A2, class A3, class A4, class A5 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf5)
+{
+public:
+
+ typedef R result_type;
+
+private:
+
+ BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5) const)
+ F f_;
+
+ template<class U, class B1, class B2, class B3, class B4, class B5> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5) const
+ {
+ BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5);
+ }
+
+ template<class U, class B1, class B2, class B3, class B4, class B5> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5) const
+ {
+ BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5);
+ }
+
+public:
+
+ explicit BOOST_MEM_FN_NAME(cmf5)(F f): f_(f) {}
+
+ template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const
+ {
+ BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5);
+ }
+
+ R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const
+ {
+ BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5);
+ }
+
+ bool operator==(BOOST_MEM_FN_NAME(cmf5) const & rhs) const
+ {
+ return f_ == rhs.f_;
+ }
+
+ bool operator!=(BOOST_MEM_FN_NAME(cmf5) const & rhs) const
+ {
+ return f_ != rhs.f_;
+ }
+};
+
+// mf6
+
+template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf6)
+{
+public:
+
+ typedef R result_type;
+
+private:
+
+ BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6))
+ F f_;
+
+ template<class U, class B1, class B2, class B3, class B4, class B5, class B6> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6) const
+ {
+ BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6);
+ }
+
+ template<class U, class B1, class B2, class B3, class B4, class B5, class B6> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6) const
+ {
+ BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6);
+ }
+
+public:
+
+ explicit BOOST_MEM_FN_NAME(mf6)(F f): f_(f) {}
+
+ R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const
+ {
+ BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4, a5, a6);
+ }
+
+ template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const
+ {
+ BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5, a6);
+ }
+
+#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
+
+ template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const
+ {
+ BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5, a6);
+ }
+
+#endif
+
+ R operator()(T & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const
+ {
+ BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6);
+ }
+
+ bool operator==(BOOST_MEM_FN_NAME(mf6) const & rhs) const
+ {
+ return f_ == rhs.f_;
+ }
+
+ bool operator!=(BOOST_MEM_FN_NAME(mf6) const & rhs) const
+ {
+ return f_ != rhs.f_;
+ }
+};
+
+// cmf6
+
+template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf6)
+{
+public:
+
+ typedef R result_type;
+
+private:
+
+ BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6) const)
+ F f_;
+
+ template<class U, class B1, class B2, class B3, class B4, class B5, class B6> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6) const
+ {
+ BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6);
+ }
+
+ template<class U, class B1, class B2, class B3, class B4, class B5, class B6> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6) const
+ {
+ BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6);
+ }
+
+public:
+
+ explicit BOOST_MEM_FN_NAME(cmf6)(F f): f_(f) {}
+
+ template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const
+ {
+ BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5, a6);
+ }
+
+ R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const
+ {
+ BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6);
+ }
+
+ bool operator==(BOOST_MEM_FN_NAME(cmf6) const & rhs) const
+ {
+ return f_ == rhs.f_;
+ }
+
+ bool operator!=(BOOST_MEM_FN_NAME(cmf6) const & rhs) const
+ {
+ return f_ != rhs.f_;
+ }
+};
+
+// mf7
+
+template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf7)
+{
+public:
+
+ typedef R result_type;
+
+private:
+
+ BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7))
+ F f_;
+
+ template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7) const
+ {
+ BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6, b7);
+ }
+
+ template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7) const
+ {
+ BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6, b7);
+ }
+
+public:
+
+ explicit BOOST_MEM_FN_NAME(mf7)(F f): f_(f) {}
+
+ R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const
+ {
+ BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4, a5, a6, a7);
+ }
+
+ template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const
+ {
+ BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5, a6, a7);
+ }
+
+#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
+
+ template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const
+ {
+ BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5, a6, a7);
+ }
+
+#endif
+
+ R operator()(T & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const
+ {
+ BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6, a7);
+ }
+
+ bool operator==(BOOST_MEM_FN_NAME(mf7) const & rhs) const
+ {
+ return f_ == rhs.f_;
+ }
+
+ bool operator!=(BOOST_MEM_FN_NAME(mf7) const & rhs) const
+ {
+ return f_ != rhs.f_;
+ }
+};
+
+// cmf7
+
+template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf7)
+{
+public:
+
+ typedef R result_type;
+
+private:
+
+ BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7) const)
+ F f_;
+
+ template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7) const
+ {
+ BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6, b7);
+ }
+
+ template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7) const
+ {
+ BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6, b7);
+ }
+
+public:
+
+ explicit BOOST_MEM_FN_NAME(cmf7)(F f): f_(f) {}
+
+ template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const
+ {
+ BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5, a6, a7);
+ }
+
+ R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const
+ {
+ BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6, a7);
+ }
+
+ bool operator==(BOOST_MEM_FN_NAME(cmf7) const & rhs) const
+ {
+ return f_ == rhs.f_;
+ }
+
+ bool operator!=(BOOST_MEM_FN_NAME(cmf7) const & rhs) const
+ {
+ return f_ != rhs.f_;
+ }
+};
+
+// mf8
+
+template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf8)
+{
+public:
+
+ typedef R result_type;
+
+private:
+
+ BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7, A8))
+ F f_;
+
+ template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7, B8 & b8) const
+ {
+ BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6, b7, b8);
+ }
+
+ template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7, B8 & b8) const
+ {
+ BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6, b7, b8);
+ }
+
+public:
+
+ explicit BOOST_MEM_FN_NAME(mf8)(F f): f_(f) {}
+
+ R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const
+ {
+ BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4, a5, a6, a7, a8);
+ }
+
+ template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const
+ {
+ BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5, a6, a7, a8);
+ }
+
+#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
+
+ template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const
+ {
+ BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5, a6, a7, a8);
+ }
+
+#endif
+
+ R operator()(T & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const
+ {
+ BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6, a7, a8);
+ }
+
+ bool operator==(BOOST_MEM_FN_NAME(mf8) const & rhs) const
+ {
+ return f_ == rhs.f_;
+ }
+
+ bool operator!=(BOOST_MEM_FN_NAME(mf8) const & rhs) const
+ {
+ return f_ != rhs.f_;
+ }
+};
+
+// cmf8
+
+template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf8)
+{
+public:
+
+ typedef R result_type;
+
+private:
+
+ BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7, A8) const)
+ F f_;
+
+ template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7, B8 & b8) const
+ {
+ BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6, b7, b8);
+ }
+
+ template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7, B8 & b8) const
+ {
+ BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6, b7, b8);
+ }
+
+public:
+
+ explicit BOOST_MEM_FN_NAME(cmf8)(F f): f_(f) {}
+
+ R operator()(T const * p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const
+ {
+ BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4, a5, a6, a7, a8);
+ }
+
+ template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const
+ {
+ BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5, a6, a7, a8);
+ }
+
+ R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const
+ {
+ BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6, a7, a8);
+ }
+
+ bool operator==(BOOST_MEM_FN_NAME(cmf8) const & rhs) const
+ {
+ return f_ == rhs.f_;
+ }
+
+ bool operator!=(BOOST_MEM_FN_NAME(cmf8) const & rhs) const
+ {
+ return f_ != rhs.f_;
+ }
+};
+
+#undef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
diff --git a/boost/boost/bind/mem_fn_vw.hpp b/boost/boost/bind/mem_fn_vw.hpp
new file mode 100644
index 00000000000..f3fc58db04e
--- /dev/null
+++ b/boost/boost/bind/mem_fn_vw.hpp
@@ -0,0 +1,130 @@
+//
+// bind/mem_fn_vw.hpp - void return helper wrappers
+//
+// Do not include this header directly
+//
+// Copyright (c) 2001 Peter Dimov and Multi Media Ltd.
+//
+// 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/bind/mem_fn.html for documentation.
+//
+
+template<class R, class T> struct BOOST_MEM_FN_NAME(mf0): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf0)<R, T, R (BOOST_MEM_FN_CC T::*) ()>
+{
+ typedef R (BOOST_MEM_FN_CC T::*F) ();
+ explicit BOOST_MEM_FN_NAME(mf0)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf0)<R, T, F>(f) {}
+};
+
+template<class R, class T> struct BOOST_MEM_FN_NAME(cmf0): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf0)<R, T, R (BOOST_MEM_FN_CC T::*) () const>
+{
+ typedef R (BOOST_MEM_FN_CC T::*F) () const;
+ explicit BOOST_MEM_FN_NAME(cmf0)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf0)<R, T, F>(f) {}
+};
+
+
+template<class R, class T, class A1> struct BOOST_MEM_FN_NAME(mf1): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf1)<R, T, A1, R (BOOST_MEM_FN_CC T::*) (A1)>
+{
+ typedef R (BOOST_MEM_FN_CC T::*F) (A1);
+ explicit BOOST_MEM_FN_NAME(mf1)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf1)<R, T, A1, F>(f) {}
+};
+
+template<class R, class T, class A1> struct BOOST_MEM_FN_NAME(cmf1): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf1)<R, T, A1, R (BOOST_MEM_FN_CC T::*) (A1) const>
+{
+ typedef R (BOOST_MEM_FN_CC T::*F) (A1) const;
+ explicit BOOST_MEM_FN_NAME(cmf1)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf1)<R, T, A1, F>(f) {}
+};
+
+
+template<class R, class T, class A1, class A2> struct BOOST_MEM_FN_NAME(mf2): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf2)<R, T, A1, A2, R (BOOST_MEM_FN_CC T::*) (A1, A2)>
+{
+ typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2);
+ explicit BOOST_MEM_FN_NAME(mf2)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf2)<R, T, A1, A2, F>(f) {}
+};
+
+template<class R, class T, class A1, class A2> struct BOOST_MEM_FN_NAME(cmf2): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf2)<R, T, A1, A2, R (BOOST_MEM_FN_CC T::*) (A1, A2) const>
+{
+ typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2) const;
+ explicit BOOST_MEM_FN_NAME(cmf2)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf2)<R, T, A1, A2, F>(f) {}
+};
+
+
+template<class R, class T, class A1, class A2, class A3> struct BOOST_MEM_FN_NAME(mf3): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf3)<R, T, A1, A2, A3, R (BOOST_MEM_FN_CC T::*) (A1, A2, A3)>
+{
+ typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3);
+ explicit BOOST_MEM_FN_NAME(mf3)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf3)<R, T, A1, A2, A3, F>(f) {}
+};
+
+template<class R, class T, class A1, class A2, class A3> struct BOOST_MEM_FN_NAME(cmf3): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf3)<R, T, A1, A2, A3, R (BOOST_MEM_FN_CC T::*) (A1, A2, A3) const>
+{
+ typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3) const;
+ explicit BOOST_MEM_FN_NAME(cmf3)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf3)<R, T, A1, A2, A3, F>(f) {}
+};
+
+
+template<class R, class T, class A1, class A2, class A3, class A4> struct BOOST_MEM_FN_NAME(mf4): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf4)<R, T, A1, A2, A3, A4, R (BOOST_MEM_FN_CC T::*) (A1, A2, A3, A4)>
+{
+ typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4);
+ explicit BOOST_MEM_FN_NAME(mf4)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf4)<R, T, A1, A2, A3, A4, F>(f) {}
+};
+
+template<class R, class T, class A1, class A2, class A3, class A4> struct BOOST_MEM_FN_NAME(cmf4): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf4)<R, T, A1, A2, A3, A4, R (BOOST_MEM_FN_CC T::*) (A1, A2, A3, A4) const>
+{
+ typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4) const;
+ explicit BOOST_MEM_FN_NAME(cmf4)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf4)<R, T, A1, A2, A3, A4, F>(f) {}
+};
+
+
+template<class R, class T, class A1, class A2, class A3, class A4, class A5> struct BOOST_MEM_FN_NAME(mf5): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf5)<R, T, A1, A2, A3, A4, A5, R (BOOST_MEM_FN_CC T::*) (A1, A2, A3, A4, A5)>
+{
+ typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5);
+ explicit BOOST_MEM_FN_NAME(mf5)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf5)<R, T, A1, A2, A3, A4, A5, F>(f) {}
+};
+
+template<class R, class T, class A1, class A2, class A3, class A4, class A5> struct BOOST_MEM_FN_NAME(cmf5): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf5)<R, T, A1, A2, A3, A4, A5, R (BOOST_MEM_FN_CC T::*) (A1, A2, A3, A4, A5) const>
+{
+ typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5) const;
+ explicit BOOST_MEM_FN_NAME(cmf5)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf5)<R, T, A1, A2, A3, A4, A5, F>(f) {}
+};
+
+
+template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6> struct BOOST_MEM_FN_NAME(mf6): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf6)<R, T, A1, A2, A3, A4, A5, A6, R (BOOST_MEM_FN_CC T::*) (A1, A2, A3, A4, A5, A6)>
+{
+ typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6);
+ explicit BOOST_MEM_FN_NAME(mf6)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf6)<R, T, A1, A2, A3, A4, A5, A6, F>(f) {}
+};
+
+template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6> struct BOOST_MEM_FN_NAME(cmf6): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf6)<R, T, A1, A2, A3, A4, A5, A6, R (BOOST_MEM_FN_CC T::*) (A1, A2, A3, A4, A5, A6) const>
+{
+ typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6) const;
+ explicit BOOST_MEM_FN_NAME(cmf6)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf6)<R, T, A1, A2, A3, A4, A5, A6, F>(f) {}
+};
+
+
+template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7> struct BOOST_MEM_FN_NAME(mf7): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf7)<R, T, A1, A2, A3, A4, A5, A6, A7, R (BOOST_MEM_FN_CC T::*) (A1, A2, A3, A4, A5, A6, A7)>
+{
+ typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7);
+ explicit BOOST_MEM_FN_NAME(mf7)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf7)<R, T, A1, A2, A3, A4, A5, A6, A7, F>(f) {}
+};
+
+template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7> struct BOOST_MEM_FN_NAME(cmf7): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf7)<R, T, A1, A2, A3, A4, A5, A6, A7, R (BOOST_MEM_FN_CC T::*) (A1, A2, A3, A4, A5, A6, A7) const>
+{
+ typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7) const;
+ explicit BOOST_MEM_FN_NAME(cmf7)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf7)<R, T, A1, A2, A3, A4, A5, A6, A7, F>(f) {}
+};
+
+
+template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> struct BOOST_MEM_FN_NAME(mf8): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf8)<R, T, A1, A2, A3, A4, A5, A6, A7, A8, R (BOOST_MEM_FN_CC T::*) (A1, A2, A3, A4, A5, A6, A7, A8)>
+{
+ typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7, A8);
+ explicit BOOST_MEM_FN_NAME(mf8)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf8)<R, T, A1, A2, A3, A4, A5, A6, A7, A8, F>(f) {}
+};
+
+template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> struct BOOST_MEM_FN_NAME(cmf8): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf8)<R, T, A1, A2, A3, A4, A5, A6, A7, A8, R (BOOST_MEM_FN_CC T::*) (A1, A2, A3, A4, A5, A6, A7, A8) const>
+{
+ typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7, A8) const;
+ explicit BOOST_MEM_FN_NAME(cmf8)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf8)<R, T, A1, A2, A3, A4, A5, A6, A7, A8, F>(f) {}
+};
+
diff --git a/boost/boost/bind/placeholders.hpp b/boost/boost/bind/placeholders.hpp
new file mode 100644
index 00000000000..a8098a7b108
--- /dev/null
+++ b/boost/boost/bind/placeholders.hpp
@@ -0,0 +1,68 @@
+#ifndef BOOST_BIND_PLACEHOLDERS_HPP_INCLUDED
+#define BOOST_BIND_PLACEHOLDERS_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+// bind/placeholders.hpp - _N definitions
+//
+// Copyright (c) 2002 Peter Dimov and Multi Media Ltd.
+//
+// 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/bind/bind.html for documentation.
+//
+
+#include <boost/bind/arg.hpp>
+#include <boost/config.hpp>
+
+namespace
+{
+
+#if defined(__BORLANDC__) || defined(__GNUC__)
+
+static inline boost::arg<1> _1() { return boost::arg<1>(); }
+static inline boost::arg<2> _2() { return boost::arg<2>(); }
+static inline boost::arg<3> _3() { return boost::arg<3>(); }
+static inline boost::arg<4> _4() { return boost::arg<4>(); }
+static inline boost::arg<5> _5() { return boost::arg<5>(); }
+static inline boost::arg<6> _6() { return boost::arg<6>(); }
+static inline boost::arg<7> _7() { return boost::arg<7>(); }
+static inline boost::arg<8> _8() { return boost::arg<8>(); }
+static inline boost::arg<9> _9() { return boost::arg<9>(); }
+
+#elif defined(BOOST_MSVC) || (defined(__DECCXX_VER) && __DECCXX_VER <= 60590031) || defined(__MWERKS__)
+
+static boost::arg<1> _1;
+static boost::arg<2> _2;
+static boost::arg<3> _3;
+static boost::arg<4> _4;
+static boost::arg<5> _5;
+static boost::arg<6> _6;
+static boost::arg<7> _7;
+static boost::arg<8> _8;
+static boost::arg<9> _9;
+
+#else
+
+boost::arg<1> _1;
+boost::arg<2> _2;
+boost::arg<3> _3;
+boost::arg<4> _4;
+boost::arg<5> _5;
+boost::arg<6> _6;
+boost::arg<7> _7;
+boost::arg<8> _8;
+boost::arg<9> _9;
+
+#endif
+
+} // unnamed namespace
+
+#endif // #ifndef BOOST_BIND_PLACEHOLDERS_HPP_INCLUDED
diff --git a/boost/boost/bind/protect.hpp b/boost/boost/bind/protect.hpp
new file mode 100644
index 00000000000..b1ff2a2a8e9
--- /dev/null
+++ b/boost/boost/bind/protect.hpp
@@ -0,0 +1,144 @@
+#ifndef BOOST_BIND_PROTECT_HPP_INCLUDED
+#define BOOST_BIND_PROTECT_HPP_INCLUDED
+
+//
+// protect.hpp
+//
+// Copyright (c) 2002 Peter Dimov and Multi Media Ltd.
+//
+// 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)
+//
+
+namespace boost
+{
+
+namespace _bi
+{
+
+template<class F> class protected_bind_t
+{
+public:
+
+ typedef typename F::result_type result_type;
+
+ explicit protected_bind_t(F f): f_(f)
+ {
+ }
+
+ result_type operator()()
+ {
+ return f_();
+ }
+
+ result_type operator()() const
+ {
+ return f_();
+ }
+
+ template<class A1> result_type operator()(A1 & a1)
+ {
+ return f_(a1);
+ }
+
+ template<class A1> result_type operator()(A1 & a1) const
+ {
+ return f_(a1);
+ }
+
+ template<class A1, class A2> result_type operator()(A1 & a1, A2 & a2)
+ {
+ return f_(a1, a2);
+ }
+
+ template<class A1, class A2> result_type operator()(A1 & a1, A2 & a2) const
+ {
+ return f_(a1, a2);
+ }
+
+ template<class A1, class A2, class A3> result_type operator()(A1 & a1, A2 & a2, A3 & a3)
+ {
+ return f_(a1, a2, a3);
+ }
+
+ template<class A1, class A2, class A3> result_type operator()(A1 & a1, A2 & a2, A3 & a3) const
+ {
+ return f_(a1, a2, a3);
+ }
+
+ template<class A1, class A2, class A3, class A4> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4)
+ {
+ return f_(a1, a2, a3, a4);
+ }
+
+ template<class A1, class A2, class A3, class A4> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4) const
+ {
+ return f_(a1, a2, a3, a4);
+ }
+
+ template<class A1, class A2, class A3, class A4, class A5> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5)
+ {
+ return f_(a1, a2, a3, a4, a5);
+ }
+
+ template<class A1, class A2, class A3, class A4, class A5> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5) const
+ {
+ return f_(a1, a2, a3, a4, a5);
+ }
+
+ template<class A1, class A2, class A3, class A4, class A5, class A6> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6)
+ {
+ return f_(a1, a2, a3, a4, a5, a6);
+ }
+
+ template<class A1, class A2, class A3, class A4, class A5, class A6> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6) const
+ {
+ return f_(a1, a2, a3, a4, a5, a6);
+ }
+
+ template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7)
+ {
+ return f_(a1, a2, a3, a4, a5, a6, a7);
+ }
+
+ template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7) const
+ {
+ return f_(a1, a2, a3, a4, a5, a6, a7);
+ }
+
+ template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8)
+ {
+ return f_(a1, a2, a3, a4, a5, a6, a7, a8);
+ }
+
+ template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8) const
+ {
+ return f_(a1, a2, a3, a4, a5, a6, a7, a8);
+ }
+
+ template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8, A9 & a9)
+ {
+ return f_(a1, a2, a3, a4, a5, a6, a7, a8, a9);
+ }
+
+ template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8, A9 & a9) const
+ {
+ return f_(a1, a2, a3, a4, a5, a6, a7, a8, a9);
+ }
+
+private:
+
+ F f_;
+};
+
+} // namespace _bi
+
+template<class F> _bi::protected_bind_t<F> protect(F f)
+{
+ return _bi::protected_bind_t<F>(f);
+}
+
+} // namespace boost
+
+#endif // #ifndef BOOST_BIND_PROTECT_HPP_INCLUDED
diff --git a/boost/boost/bind/storage.hpp b/boost/boost/bind/storage.hpp
new file mode 100644
index 00000000000..be490b0f593
--- /dev/null
+++ b/boost/boost/bind/storage.hpp
@@ -0,0 +1,475 @@
+#ifndef BOOST_BIND_STORAGE_HPP_INCLUDED
+#define BOOST_BIND_STORAGE_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+// bind/storage.hpp
+//
+// boost/bind.hpp support header, optimized storage
+//
+// Copyright (c) 2006 Peter Dimov
+//
+// 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/bind/bind.html for documentation.
+//
+
+#include <boost/config.hpp>
+#include <boost/bind/arg.hpp>
+
+#ifdef BOOST_MSVC
+# pragma warning(push)
+# pragma warning(disable: 4512) // assignment operator could not be generated
+#endif
+
+namespace boost
+{
+
+namespace _bi
+{
+
+// 1
+
+template<class A1> struct storage1
+{
+ explicit storage1( A1 a1 ): a1_( a1 ) {}
+
+ template<class V> void accept(V & v) const
+ {
+ BOOST_BIND_VISIT_EACH(v, a1_, 0);
+ }
+
+ A1 a1_;
+};
+
+#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION ) && !defined( __BORLANDC__ )
+
+template<int I> struct storage1< boost::arg<I> >
+{
+ explicit storage1( boost::arg<I> ) {}
+
+ template<class V> void accept(V &) const { }
+
+ static boost::arg<I> a1_() { return boost::arg<I>(); }
+};
+
+template<int I> struct storage1< boost::arg<I> (*) () >
+{
+ explicit storage1( boost::arg<I> (*) () ) {}
+
+ template<class V> void accept(V &) const { }
+
+ static boost::arg<I> a1_() { return boost::arg<I>(); }
+};
+
+#endif
+
+// 2
+
+template<class A1, class A2> struct storage2: public storage1<A1>
+{
+ typedef storage1<A1> inherited;
+
+ storage2( A1 a1, A2 a2 ): storage1<A1>( a1 ), a2_( a2 ) {}
+
+ template<class V> void accept(V & v) const
+ {
+ inherited::accept(v);
+ BOOST_BIND_VISIT_EACH(v, a2_, 0);
+ }
+
+ A2 a2_;
+};
+
+#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )
+
+template<class A1, int I> struct storage2< A1, boost::arg<I> >: public storage1<A1>
+{
+ typedef storage1<A1> inherited;
+
+ storage2( A1 a1, boost::arg<I> ): storage1<A1>( a1 ) {}
+
+ template<class V> void accept(V & v) const
+ {
+ inherited::accept(v);
+ }
+
+ static boost::arg<I> a2_() { return boost::arg<I>(); }
+};
+
+template<class A1, int I> struct storage2< A1, boost::arg<I> (*) () >: public storage1<A1>
+{
+ typedef storage1<A1> inherited;
+
+ storage2( A1 a1, boost::arg<I> (*) () ): storage1<A1>( a1 ) {}
+
+ template<class V> void accept(V & v) const
+ {
+ inherited::accept(v);
+ }
+
+ static boost::arg<I> a2_() { return boost::arg<I>(); }
+};
+
+#endif
+
+// 3
+
+template<class A1, class A2, class A3> struct storage3: public storage2< A1, A2 >
+{
+ typedef storage2<A1, A2> inherited;
+
+ storage3( A1 a1, A2 a2, A3 a3 ): storage2<A1, A2>( a1, a2 ), a3_( a3 ) {}
+
+ template<class V> void accept(V & v) const
+ {
+ inherited::accept(v);
+ BOOST_BIND_VISIT_EACH(v, a3_, 0);
+ }
+
+ A3 a3_;
+};
+
+#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )
+
+template<class A1, class A2, int I> struct storage3< A1, A2, boost::arg<I> >: public storage2< A1, A2 >
+{
+ typedef storage2<A1, A2> inherited;
+
+ storage3( A1 a1, A2 a2, boost::arg<I> ): storage2<A1, A2>( a1, a2 ) {}
+
+ template<class V> void accept(V & v) const
+ {
+ inherited::accept(v);
+ }
+
+ static boost::arg<I> a3_() { return boost::arg<I>(); }
+};
+
+template<class A1, class A2, int I> struct storage3< A1, A2, boost::arg<I> (*) () >: public storage2< A1, A2 >
+{
+ typedef storage2<A1, A2> inherited;
+
+ storage3( A1 a1, A2 a2, boost::arg<I> (*) () ): storage2<A1, A2>( a1, a2 ) {}
+
+ template<class V> void accept(V & v) const
+ {
+ inherited::accept(v);
+ }
+
+ static boost::arg<I> a3_() { return boost::arg<I>(); }
+};
+
+#endif
+
+// 4
+
+template<class A1, class A2, class A3, class A4> struct storage4: public storage3< A1, A2, A3 >
+{
+ typedef storage3<A1, A2, A3> inherited;
+
+ storage4( A1 a1, A2 a2, A3 a3, A4 a4 ): storage3<A1, A2, A3>( a1, a2, a3 ), a4_( a4 ) {}
+
+ template<class V> void accept(V & v) const
+ {
+ inherited::accept(v);
+ BOOST_BIND_VISIT_EACH(v, a4_, 0);
+ }
+
+ A4 a4_;
+};
+
+#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )
+
+template<class A1, class A2, class A3, int I> struct storage4< A1, A2, A3, boost::arg<I> >: public storage3< A1, A2, A3 >
+{
+ typedef storage3<A1, A2, A3> inherited;
+
+ storage4( A1 a1, A2 a2, A3 a3, boost::arg<I> ): storage3<A1, A2, A3>( a1, a2, a3 ) {}
+
+ template<class V> void accept(V & v) const
+ {
+ inherited::accept(v);
+ }
+
+ static boost::arg<I> a4_() { return boost::arg<I>(); }
+};
+
+template<class A1, class A2, class A3, int I> struct storage4< A1, A2, A3, boost::arg<I> (*) () >: public storage3< A1, A2, A3 >
+{
+ typedef storage3<A1, A2, A3> inherited;
+
+ storage4( A1 a1, A2 a2, A3 a3, boost::arg<I> (*) () ): storage3<A1, A2, A3>( a1, a2, a3 ) {}
+
+ template<class V> void accept(V & v) const
+ {
+ inherited::accept(v);
+ }
+
+ static boost::arg<I> a4_() { return boost::arg<I>(); }
+};
+
+#endif
+
+// 5
+
+template<class A1, class A2, class A3, class A4, class A5> struct storage5: public storage4< A1, A2, A3, A4 >
+{
+ typedef storage4<A1, A2, A3, A4> inherited;
+
+ storage5( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5 ): storage4<A1, A2, A3, A4>( a1, a2, a3, a4 ), a5_( a5 ) {}
+
+ template<class V> void accept(V & v) const
+ {
+ inherited::accept(v);
+ BOOST_BIND_VISIT_EACH(v, a5_, 0);
+ }
+
+ A5 a5_;
+};
+
+#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )
+
+template<class A1, class A2, class A3, class A4, int I> struct storage5< A1, A2, A3, A4, boost::arg<I> >: public storage4< A1, A2, A3, A4 >
+{
+ typedef storage4<A1, A2, A3, A4> inherited;
+
+ storage5( A1 a1, A2 a2, A3 a3, A4 a4, boost::arg<I> ): storage4<A1, A2, A3, A4>( a1, a2, a3, a4 ) {}
+
+ template<class V> void accept(V & v) const
+ {
+ inherited::accept(v);
+ }
+
+ static boost::arg<I> a5_() { return boost::arg<I>(); }
+};
+
+template<class A1, class A2, class A3, class A4, int I> struct storage5< A1, A2, A3, A4, boost::arg<I> (*) () >: public storage4< A1, A2, A3, A4 >
+{
+ typedef storage4<A1, A2, A3, A4> inherited;
+
+ storage5( A1 a1, A2 a2, A3 a3, A4 a4, boost::arg<I> (*) () ): storage4<A1, A2, A3, A4>( a1, a2, a3, a4 ) {}
+
+ template<class V> void accept(V & v) const
+ {
+ inherited::accept(v);
+ }
+
+ static boost::arg<I> a5_() { return boost::arg<I>(); }
+};
+
+#endif
+
+// 6
+
+template<class A1, class A2, class A3, class A4, class A5, class A6> struct storage6: public storage5< A1, A2, A3, A4, A5 >
+{
+ typedef storage5<A1, A2, A3, A4, A5> inherited;
+
+ storage6( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6 ): storage5<A1, A2, A3, A4, A5>( a1, a2, a3, a4, a5 ), a6_( a6 ) {}
+
+ template<class V> void accept(V & v) const
+ {
+ inherited::accept(v);
+ BOOST_BIND_VISIT_EACH(v, a6_, 0);
+ }
+
+ A6 a6_;
+};
+
+#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )
+
+template<class A1, class A2, class A3, class A4, class A5, int I> struct storage6< A1, A2, A3, A4, A5, boost::arg<I> >: public storage5< A1, A2, A3, A4, A5 >
+{
+ typedef storage5<A1, A2, A3, A4, A5> inherited;
+
+ storage6( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, boost::arg<I> ): storage5<A1, A2, A3, A4, A5>( a1, a2, a3, a4, a5 ) {}
+
+ template<class V> void accept(V & v) const
+ {
+ inherited::accept(v);
+ }
+
+ static boost::arg<I> a6_() { return boost::arg<I>(); }
+};
+
+template<class A1, class A2, class A3, class A4, class A5, int I> struct storage6< A1, A2, A3, A4, A5, boost::arg<I> (*) () >: public storage5< A1, A2, A3, A4, A5 >
+{
+ typedef storage5<A1, A2, A3, A4, A5> inherited;
+
+ storage6( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, boost::arg<I> (*) () ): storage5<A1, A2, A3, A4, A5>( a1, a2, a3, a4, a5 ) {}
+
+ template<class V> void accept(V & v) const
+ {
+ inherited::accept(v);
+ }
+
+ static boost::arg<I> a6_() { return boost::arg<I>(); }
+};
+
+#endif
+
+// 7
+
+template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> struct storage7: public storage6< A1, A2, A3, A4, A5, A6 >
+{
+ typedef storage6<A1, A2, A3, A4, A5, A6> inherited;
+
+ storage7( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7 ): storage6<A1, A2, A3, A4, A5, A6>( a1, a2, a3, a4, a5, a6 ), a7_( a7 ) {}
+
+ template<class V> void accept(V & v) const
+ {
+ inherited::accept(v);
+ BOOST_BIND_VISIT_EACH(v, a7_, 0);
+ }
+
+ A7 a7_;
+};
+
+#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )
+
+template<class A1, class A2, class A3, class A4, class A5, class A6, int I> struct storage7< A1, A2, A3, A4, A5, A6, boost::arg<I> >: public storage6< A1, A2, A3, A4, A5, A6 >
+{
+ typedef storage6<A1, A2, A3, A4, A5, A6> inherited;
+
+ storage7( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, boost::arg<I> ): storage6<A1, A2, A3, A4, A5, A6>( a1, a2, a3, a4, a5, a6 ) {}
+
+ template<class V> void accept(V & v) const
+ {
+ inherited::accept(v);
+ }
+
+ static boost::arg<I> a7_() { return boost::arg<I>(); }
+};
+
+template<class A1, class A2, class A3, class A4, class A5, class A6, int I> struct storage7< A1, A2, A3, A4, A5, A6, boost::arg<I> (*) () >: public storage6< A1, A2, A3, A4, A5, A6 >
+{
+ typedef storage6<A1, A2, A3, A4, A5, A6> inherited;
+
+ storage7( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, boost::arg<I> (*) () ): storage6<A1, A2, A3, A4, A5, A6>( a1, a2, a3, a4, a5, a6 ) {}
+
+ template<class V> void accept(V & v) const
+ {
+ inherited::accept(v);
+ }
+
+ static boost::arg<I> a7_() { return boost::arg<I>(); }
+};
+
+#endif
+
+// 8
+
+template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> struct storage8: public storage7< A1, A2, A3, A4, A5, A6, A7 >
+{
+ typedef storage7<A1, A2, A3, A4, A5, A6, A7> inherited;
+
+ storage8( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8 ): storage7<A1, A2, A3, A4, A5, A6, A7>( a1, a2, a3, a4, a5, a6, a7 ), a8_( a8 ) {}
+
+ template<class V> void accept(V & v) const
+ {
+ inherited::accept(v);
+ BOOST_BIND_VISIT_EACH(v, a8_, 0);
+ }
+
+ A8 a8_;
+};
+
+#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )
+
+template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, int I> struct storage8< A1, A2, A3, A4, A5, A6, A7, boost::arg<I> >: public storage7< A1, A2, A3, A4, A5, A6, A7 >
+{
+ typedef storage7<A1, A2, A3, A4, A5, A6, A7> inherited;
+
+ storage8( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, boost::arg<I> ): storage7<A1, A2, A3, A4, A5, A6, A7>( a1, a2, a3, a4, a5, a6, a7 ) {}
+
+ template<class V> void accept(V & v) const
+ {
+ inherited::accept(v);
+ }
+
+ static boost::arg<I> a8_() { return boost::arg<I>(); }
+};
+
+template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, int I> struct storage8< A1, A2, A3, A4, A5, A6, A7, boost::arg<I> (*) () >: public storage7< A1, A2, A3, A4, A5, A6, A7 >
+{
+ typedef storage7<A1, A2, A3, A4, A5, A6, A7> inherited;
+
+ storage8( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, boost::arg<I> (*) () ): storage7<A1, A2, A3, A4, A5, A6, A7>( a1, a2, a3, a4, a5, a6, a7 ) {}
+
+ template<class V> void accept(V & v) const
+ {
+ inherited::accept(v);
+ }
+
+ static boost::arg<I> a8_() { return boost::arg<I>(); }
+};
+
+#endif
+
+// 9
+
+template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> struct storage9: public storage8< A1, A2, A3, A4, A5, A6, A7, A8 >
+{
+ typedef storage8<A1, A2, A3, A4, A5, A6, A7, A8> inherited;
+
+ storage9( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9 ): storage8<A1, A2, A3, A4, A5, A6, A7, A8>( a1, a2, a3, a4, a5, a6, a7, a8 ), a9_( a9 ) {}
+
+ template<class V> void accept(V & v) const
+ {
+ inherited::accept(v);
+ BOOST_BIND_VISIT_EACH(v, a9_, 0);
+ }
+
+ A9 a9_;
+};
+
+#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )
+
+template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, int I> struct storage9< A1, A2, A3, A4, A5, A6, A7, A8, boost::arg<I> >: public storage8< A1, A2, A3, A4, A5, A6, A7, A8 >
+{
+ typedef storage8<A1, A2, A3, A4, A5, A6, A7, A8> inherited;
+
+ storage9( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, boost::arg<I> ): storage8<A1, A2, A3, A4, A5, A6, A7, A8>( a1, a2, a3, a4, a5, a6, a7, a8 ) {}
+
+ template<class V> void accept(V & v) const
+ {
+ inherited::accept(v);
+ }
+
+ static boost::arg<I> a9_() { return boost::arg<I>(); }
+};
+
+template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, int I> struct storage9< A1, A2, A3, A4, A5, A6, A7, A8, boost::arg<I> (*) () >: public storage8< A1, A2, A3, A4, A5, A6, A7, A8 >
+{
+ typedef storage8<A1, A2, A3, A4, A5, A6, A7, A8> inherited;
+
+ storage9( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, boost::arg<I> (*) () ): storage8<A1, A2, A3, A4, A5, A6, A7, A8>( a1, a2, a3, a4, a5, a6, a7, a8 ) {}
+
+ template<class V> void accept(V & v) const
+ {
+ inherited::accept(v);
+ }
+
+ static boost::arg<I> a9_() { return boost::arg<I>(); }
+};
+
+#endif
+
+} // namespace _bi
+
+} // namespace boost
+
+#ifdef BOOST_MSVC
+# pragma warning(default: 4512) // assignment operator could not be generated
+# pragma warning(pop)
+#endif
+
+#endif // #ifndef BOOST_BIND_STORAGE_HPP_INCLUDED
diff --git a/boost/boost/blank.hpp b/boost/boost/blank.hpp
new file mode 100644
index 00000000000..f84f2d9ea0b
--- /dev/null
+++ b/boost/boost/blank.hpp
@@ -0,0 +1,100 @@
+//-----------------------------------------------------------------------------
+// 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"
+
+#include <iosfwd> // for std::basic_ostream forward declare
+
+#include "boost/detail/templated_streams.hpp"
+#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
+//
+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;
+}
+
+} // namespace boost
+
+#endif // BOOST_BLANK_HPP
diff --git a/boost/boost/blank_fwd.hpp b/boost/boost/blank_fwd.hpp
new file mode 100644
index 00000000000..8bfe97c4699
--- /dev/null
+++ b/boost/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/boost/boost/boost.sln b/boost/boost/boost.sln
new file mode 100644
index 00000000000..2e86839af2b
--- /dev/null
+++ b/boost/boost/boost.sln
@@ -0,0 +1,20 @@
+
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "boost", "boost.vcproj", "{B5B94CCD-0FE4-4DFD-9FE5-73DE0C0E161D}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {B5B94CCD-0FE4-4DFD-9FE5-73DE0C0E161D}.Debug|Win32.ActiveCfg = Debug|Win32
+ {B5B94CCD-0FE4-4DFD-9FE5-73DE0C0E161D}.Debug|Win32.Build.0 = Debug|Win32
+ {B5B94CCD-0FE4-4DFD-9FE5-73DE0C0E161D}.Release|Win32.ActiveCfg = Release|Win32
+ {B5B94CCD-0FE4-4DFD-9FE5-73DE0C0E161D}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/boost/boost/boost.vcproj b/boost/boost/boost.vcproj
new file mode 100644
index 00000000000..10ec9466e82
--- /dev/null
+++ b/boost/boost/boost.vcproj
@@ -0,0 +1,227 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="boost"
+ ProjectGUID="{B5B94CCD-0FE4-4DFD-9FE5-73DE0C0E161D}"
+ RootNamespace="boost"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="196613"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="4"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_LIB;BOOST_ALL_NO_LIB"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="4"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ EnableIntrinsicFunctions="true"
+ PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath="..\..\..\boostw\boost_1_34_1\libs\thread\src\barrier.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\boostw\boost_1_34_1\libs\thread\src\condition.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\boostw\boost_1_34_1\libs\thread\src\exceptions.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\boostw\boost_1_34_1\libs\thread\src\mutex.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\boostw\boost_1_34_1\libs\thread\src\once.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\boostw\boost_1_34_1\libs\thread\src\recursive_mutex.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\boostw\boost_1_34_1\libs\thread\src\thread.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\boostw\boost_1_34_1\libs\thread\src\timeconv.inl"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\boostw\boost_1_34_1\libs\thread\src\tss.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\boostw\boost_1_34_1\libs\thread\src\tss_dll.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\boostw\boost_1_34_1\libs\thread\src\tss_hooks.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\boostw\boost_1_34_1\libs\thread\src\tss_null.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\boostw\boost_1_34_1\libs\thread\src\tss_pe.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\boostw\boost_1_34_1\libs\thread\src\xtime.cpp"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+ >
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+ UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+ >
+ </Filter>
+ <File
+ RelativePath=".\ReadMe.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/boost/boost/boost.vcproj.Dwight-PC.Dwight Merriman.user b/boost/boost/boost.vcproj.Dwight-PC.Dwight Merriman.user
new file mode 100644
index 00000000000..6559311b730
--- /dev/null
+++ b/boost/boost/boost.vcproj.Dwight-PC.Dwight Merriman.user
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioUserFile
+ ProjectType="Visual C++"
+ Version="9.00"
+ ShowAllFiles="false"
+ >
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ >
+ <DebugSettings
+ Command=""
+ WorkingDirectory=""
+ CommandArguments=""
+ Attach="false"
+ DebuggerType="3"
+ Remote="1"
+ RemoteMachine="DWIGHT-PC"
+ RemoteCommand=""
+ HttpUrl=""
+ PDBPath=""
+ SQLDebugging=""
+ Environment=""
+ EnvironmentMerge="true"
+ DebuggerFlavor=""
+ MPIRunCommand=""
+ MPIRunArguments=""
+ MPIRunWorkingDirectory=""
+ ApplicationCommand=""
+ ApplicationArguments=""
+ ShimCommand=""
+ MPIAcceptMode=""
+ MPIAcceptFilter=""
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ >
+ <DebugSettings
+ Command=""
+ WorkingDirectory=""
+ CommandArguments=""
+ Attach="false"
+ DebuggerType="3"
+ Remote="1"
+ RemoteMachine="DWIGHT-PC"
+ RemoteCommand=""
+ HttpUrl=""
+ PDBPath=""
+ SQLDebugging=""
+ Environment=""
+ EnvironmentMerge="true"
+ DebuggerFlavor=""
+ MPIRunCommand=""
+ MPIRunArguments=""
+ MPIRunWorkingDirectory=""
+ ApplicationCommand=""
+ ApplicationArguments=""
+ ShimCommand=""
+ MPIAcceptMode=""
+ MPIAcceptFilter=""
+ />
+ </Configuration>
+ </Configurations>
+</VisualStudioUserFile>
diff --git a/boost/boost/call_traits.hpp b/boost/boost/call_traits.hpp
new file mode 100644
index 00000000000..5253a6de587
--- /dev/null
+++ b/boost/boost/call_traits.hpp
@@ -0,0 +1,24 @@
+// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/utility for most recent version including documentation.
+
+// See boost/detail/call_traits.hpp and boost/detail/ob_call_traits.hpp
+// for full copyright notices.
+
+#ifndef BOOST_CALL_TRAITS_HPP
+#define BOOST_CALL_TRAITS_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#include <boost/config.hpp>
+#endif
+
+#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#include <boost/detail/ob_call_traits.hpp>
+#else
+#include <boost/detail/call_traits.hpp>
+#endif
+
+#endif // BOOST_CALL_TRAITS_HPP
diff --git a/boost/boost/cast.hpp b/boost/boost/cast.hpp
new file mode 100644
index 00000000000..2615d183fad
--- /dev/null
+++ b/boost/boost/cast.hpp
@@ -0,0 +1,107 @@
+// boost cast.hpp header file ----------------------------------------------//
+
+// (C) Copyright Kevlin Henney and Dave Abrahams 1999.
+// 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/conversion for Documentation.
+
+// Revision History
+// 23 JUn 05 numeric_cast removed and redirected to the new verion (Fernando Cacciola)
+// 02 Apr 01 Removed BOOST_NO_LIMITS workarounds and included
+// <boost/limits.hpp> instead (the workaround did not
+// actually compile when BOOST_NO_LIMITS was defined in
+// any case, so we loose nothing). (John Maddock)
+// 21 Jan 01 Undid a bug I introduced yesterday. numeric_cast<> never
+// worked with stock GCC; trying to get it to do that broke
+// vc-stlport.
+// 20 Jan 01 Moved BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS to config.hpp.
+// Removed unused BOOST_EXPLICIT_TARGET macro. Moved
+// boost::detail::type to boost/type.hpp. Made it compile with
+// stock gcc again (Dave Abrahams)
+// 29 Nov 00 Remove nested namespace cast, cleanup spacing before Formal
+// Review (Beman Dawes)
+// 19 Oct 00 Fix numeric_cast for floating-point types (Dave Abrahams)
+// 15 Jul 00 Suppress numeric_cast warnings for GCC, Borland and MSVC
+// (Dave Abrahams)
+// 30 Jun 00 More MSVC6 wordarounds. See comments below. (Dave Abrahams)
+// 28 Jun 00 Removed implicit_cast<>. See comment below. (Beman Dawes)
+// 27 Jun 00 More MSVC6 workarounds
+// 15 Jun 00 Add workarounds for MSVC6
+// 2 Feb 00 Remove bad_numeric_cast ";" syntax error (Doncho Angelov)
+// 26 Jan 00 Add missing throw() to bad_numeric_cast::what(0 (Adam Levar)
+// 29 Dec 99 Change using declarations so usages in other namespaces work
+// correctly (Dave Abrahams)
+// 23 Sep 99 Change polymorphic_downcast assert to also detect M.I. errors
+// as suggested Darin Adler and improved by Valentin Bonnard.
+// 2 Sep 99 Remove controversial asserts, simplify, rename.
+// 30 Aug 99 Move to cast.hpp, replace value_cast with numeric_cast,
+// place in nested namespace.
+// 3 Aug 99 Initial version
+
+#ifndef BOOST_CAST_HPP
+#define BOOST_CAST_HPP
+
+# include <boost/config.hpp>
+# include <boost/assert.hpp>
+# include <typeinfo>
+# include <boost/type.hpp>
+# include <boost/limits.hpp>
+# include <boost/detail/select_type.hpp>
+
+// It has been demonstrated numerous times that MSVC 6.0 fails silently at link
+// time if you use a template function which has template parameters that don't
+// appear in the function's argument list.
+//
+// TODO: Add this to config.hpp?
+# if defined(BOOST_MSVC) && BOOST_MSVC < 1300
+# define BOOST_EXPLICIT_DEFAULT_TARGET , ::boost::type<Target>* = 0
+# else
+# define BOOST_EXPLICIT_DEFAULT_TARGET
+# endif
+
+namespace boost
+{
+// See the documentation for descriptions of how to choose between
+// static_cast<>, dynamic_cast<>, polymorphic_cast<> and polymorphic_downcast<>
+
+// polymorphic_cast --------------------------------------------------------//
+
+ // Runtime checked polymorphic downcasts and crosscasts.
+ // Suggested in The C++ Programming Language, 3rd Ed, Bjarne Stroustrup,
+ // section 15.8 exercise 1, page 425.
+
+ template <class Target, class Source>
+ inline Target polymorphic_cast(Source* x BOOST_EXPLICIT_DEFAULT_TARGET)
+ {
+ Target tmp = dynamic_cast<Target>(x);
+ if ( tmp == 0 ) throw std::bad_cast();
+ return tmp;
+ }
+
+// polymorphic_downcast ----------------------------------------------------//
+
+ // BOOST_ASSERT() checked polymorphic downcast. Crosscasts prohibited.
+
+ // WARNING: Because this cast uses BOOST_ASSERT(), it violates
+ // the One Definition Rule if used in multiple translation units
+ // where BOOST_DISABLE_ASSERTS, BOOST_ENABLE_ASSERT_HANDLER
+ // NDEBUG are defined inconsistently.
+
+ // Contributed by Dave Abrahams
+
+ template <class Target, class Source>
+ inline Target polymorphic_downcast(Source* x BOOST_EXPLICIT_DEFAULT_TARGET)
+ {
+ BOOST_ASSERT( dynamic_cast<Target>(x) == x ); // detect logic error
+ return static_cast<Target>(x);
+ }
+
+# undef BOOST_EXPLICIT_DEFAULT_TARGET
+
+} // namespace boost
+
+# include <boost/numeric/conversion/cast.hpp>
+
+#endif // BOOST_CAST_HPP
diff --git a/boost/boost/checked_delete.hpp b/boost/boost/checked_delete.hpp
new file mode 100644
index 00000000000..9bb84e8e1ba
--- /dev/null
+++ b/boost/boost/checked_delete.hpp
@@ -0,0 +1,69 @@
+#ifndef BOOST_CHECKED_DELETE_HPP_INCLUDED
+#define BOOST_CHECKED_DELETE_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+// boost/checked_delete.hpp
+//
+// Copyright (c) 2002, 2003 Peter Dimov
+// Copyright (c) 2003 Daniel Frey
+// Copyright (c) 2003 Howard Hinnant
+//
+// 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/utility/checked_delete.html for documentation.
+//
+
+namespace boost
+{
+
+// verify that types are complete for increased safety
+
+template<class T> inline void checked_delete(T * x)
+{
+ // intentionally complex - simplification causes regressions
+ typedef char type_must_be_complete[ sizeof(T)? 1: -1 ];
+ (void) sizeof(type_must_be_complete);
+ delete x;
+}
+
+template<class T> inline void checked_array_delete(T * x)
+{
+ typedef char type_must_be_complete[ sizeof(T)? 1: -1 ];
+ (void) sizeof(type_must_be_complete);
+ delete [] x;
+}
+
+template<class T> struct checked_deleter
+{
+ typedef void result_type;
+ typedef T * argument_type;
+
+ void operator()(T * x) const
+ {
+ // boost:: disables ADL
+ boost::checked_delete(x);
+ }
+};
+
+template<class T> struct checked_array_deleter
+{
+ typedef void result_type;
+ typedef T * argument_type;
+
+ void operator()(T * x) const
+ {
+ boost::checked_array_delete(x);
+ }
+};
+
+} // namespace boost
+
+#endif // #ifndef BOOST_CHECKED_DELETE_HPP_INCLUDED
diff --git a/boost/boost/compatibility/cpp_c_headers/cassert b/boost/boost/compatibility/cpp_c_headers/cassert
new file mode 100644
index 00000000000..5bc7329ddef
--- /dev/null
+++ b/boost/boost/compatibility/cpp_c_headers/cassert
@@ -0,0 +1,10 @@
+// This file is automatically generated. Do not edit.
+// ['../../libs/compatibility/generate_cpp_c_headers.py']
+// Wed Jul 23 12:11:19 2003 ('GMTST', 'GMTST')
+
+#ifndef __CASSERT_HEADER
+#define __CASSERT_HEADER
+
+#include <assert.h>
+
+#endif // CASSERT_HEADER
diff --git a/boost/boost/compatibility/cpp_c_headers/cctype b/boost/boost/compatibility/cpp_c_headers/cctype
new file mode 100644
index 00000000000..1ad03cb5ca8
--- /dev/null
+++ b/boost/boost/compatibility/cpp_c_headers/cctype
@@ -0,0 +1,26 @@
+// This file is automatically generated. Do not edit.
+// ['../../libs/compatibility/generate_cpp_c_headers.py']
+// Wed Jul 23 12:11:19 2003 ('GMTST', 'GMTST')
+
+#ifndef __CCTYPE_HEADER
+#define __CCTYPE_HEADER
+
+#include <ctype.h>
+
+namespace std {
+ using ::isalnum;
+ using ::isdigit;
+ using ::isprint;
+ using ::isupper;
+ using ::tolower;
+ using ::isalpha;
+ using ::isgraph;
+ using ::ispunct;
+ using ::isxdigit;
+ using ::toupper;
+ using ::iscntrl;
+ using ::islower;
+ using ::isspace;
+}
+
+#endif // CCTYPE_HEADER
diff --git a/boost/boost/compatibility/cpp_c_headers/cerrno b/boost/boost/compatibility/cpp_c_headers/cerrno
new file mode 100644
index 00000000000..4d57b808758
--- /dev/null
+++ b/boost/boost/compatibility/cpp_c_headers/cerrno
@@ -0,0 +1,10 @@
+// This file is automatically generated. Do not edit.
+// ['../../libs/compatibility/generate_cpp_c_headers.py']
+// Wed Jul 23 12:11:19 2003 ('GMTST', 'GMTST')
+
+#ifndef __CERRNO_HEADER
+#define __CERRNO_HEADER
+
+#include <errno.h>
+
+#endif // CERRNO_HEADER
diff --git a/boost/boost/compatibility/cpp_c_headers/cfloat b/boost/boost/compatibility/cpp_c_headers/cfloat
new file mode 100644
index 00000000000..9d3d53318c6
--- /dev/null
+++ b/boost/boost/compatibility/cpp_c_headers/cfloat
@@ -0,0 +1,10 @@
+// This file is automatically generated. Do not edit.
+// ['../../libs/compatibility/generate_cpp_c_headers.py']
+// Wed Jul 23 12:11:19 2003 ('GMTST', 'GMTST')
+
+#ifndef __CFLOAT_HEADER
+#define __CFLOAT_HEADER
+
+#include <float.h>
+
+#endif // CFLOAT_HEADER
diff --git a/boost/boost/compatibility/cpp_c_headers/climits b/boost/boost/compatibility/cpp_c_headers/climits
new file mode 100644
index 00000000000..b71b7f5eb49
--- /dev/null
+++ b/boost/boost/compatibility/cpp_c_headers/climits
@@ -0,0 +1,10 @@
+// This file is automatically generated. Do not edit.
+// ['../../libs/compatibility/generate_cpp_c_headers.py']
+// Wed Jul 23 12:11:19 2003 ('GMTST', 'GMTST')
+
+#ifndef __CLIMITS_HEADER
+#define __CLIMITS_HEADER
+
+#include <limits.h>
+
+#endif // CLIMITS_HEADER
diff --git a/boost/boost/compatibility/cpp_c_headers/clocale b/boost/boost/compatibility/cpp_c_headers/clocale
new file mode 100644
index 00000000000..b3ba3c859fa
--- /dev/null
+++ b/boost/boost/compatibility/cpp_c_headers/clocale
@@ -0,0 +1,16 @@
+// This file is automatically generated. Do not edit.
+// ['../../libs/compatibility/generate_cpp_c_headers.py']
+// Wed Jul 23 12:11:19 2003 ('GMTST', 'GMTST')
+
+#ifndef __CLOCALE_HEADER
+#define __CLOCALE_HEADER
+
+#include <locale.h>
+
+namespace std {
+ using ::lconv;
+ using ::localeconv;
+ using ::setlocale;
+}
+
+#endif // CLOCALE_HEADER
diff --git a/boost/boost/compatibility/cpp_c_headers/cmath b/boost/boost/compatibility/cpp_c_headers/cmath
new file mode 100644
index 00000000000..70dc8843ed2
--- /dev/null
+++ b/boost/boost/compatibility/cpp_c_headers/cmath
@@ -0,0 +1,35 @@
+// This file is automatically generated. Do not edit.
+// ['../../libs/compatibility/generate_cpp_c_headers.py']
+// Wed Jul 23 12:11:19 2003 ('GMTST', 'GMTST')
+
+#ifndef __CMATH_HEADER
+#define __CMATH_HEADER
+
+#include <math.h>
+
+namespace std {
+ using ::acos;
+ using ::cos;
+ using ::fmod;
+ using ::modf;
+ using ::tan;
+ using ::asin;
+ using ::cosh;
+ using ::frexp;
+ using ::pow;
+ using ::tanh;
+ using ::atan;
+ using ::exp;
+ using ::ldexp;
+ using ::sin;
+ using ::atan2;
+ using ::fabs;
+ using ::log;
+ using ::sinh;
+ using ::ceil;
+ using ::floor;
+ using ::log10;
+ using ::sqrt;
+}
+
+#endif // CMATH_HEADER
diff --git a/boost/boost/compatibility/cpp_c_headers/csetjmp b/boost/boost/compatibility/cpp_c_headers/csetjmp
new file mode 100644
index 00000000000..aa6a019dfe2
--- /dev/null
+++ b/boost/boost/compatibility/cpp_c_headers/csetjmp
@@ -0,0 +1,15 @@
+// This file is automatically generated. Do not edit.
+// ['../../libs/compatibility/generate_cpp_c_headers.py']
+// Wed Jul 23 12:11:19 2003 ('GMTST', 'GMTST')
+
+#ifndef __CSETJMP_HEADER
+#define __CSETJMP_HEADER
+
+#include <setjmp.h>
+
+namespace std {
+ using ::jmp_buf;
+ using ::longjmp;
+}
+
+#endif // CSETJMP_HEADER
diff --git a/boost/boost/compatibility/cpp_c_headers/csignal b/boost/boost/compatibility/cpp_c_headers/csignal
new file mode 100644
index 00000000000..37e11d9e4a3
--- /dev/null
+++ b/boost/boost/compatibility/cpp_c_headers/csignal
@@ -0,0 +1,16 @@
+// This file is automatically generated. Do not edit.
+// ['../../libs/compatibility/generate_cpp_c_headers.py']
+// Wed Jul 23 12:11:19 2003 ('GMTST', 'GMTST')
+
+#ifndef __CSIGNAL_HEADER
+#define __CSIGNAL_HEADER
+
+#include <signal.h>
+
+namespace std {
+ using ::sig_atomic_t;
+ using ::raise;
+ using ::signal;
+}
+
+#endif // CSIGNAL_HEADER
diff --git a/boost/boost/compatibility/cpp_c_headers/cstdarg b/boost/boost/compatibility/cpp_c_headers/cstdarg
new file mode 100644
index 00000000000..5e1dd749f0c
--- /dev/null
+++ b/boost/boost/compatibility/cpp_c_headers/cstdarg
@@ -0,0 +1,14 @@
+// This file is automatically generated. Do not edit.
+// ['../../libs/compatibility/generate_cpp_c_headers.py']
+// Wed Jul 23 12:11:19 2003 ('GMTST', 'GMTST')
+
+#ifndef __CSTDARG_HEADER
+#define __CSTDARG_HEADER
+
+#include <stdarg.h>
+
+namespace std {
+ using ::va_list;
+}
+
+#endif // CSTDARG_HEADER
diff --git a/boost/boost/compatibility/cpp_c_headers/cstddef b/boost/boost/compatibility/cpp_c_headers/cstddef
new file mode 100644
index 00000000000..c00a55c1f30
--- /dev/null
+++ b/boost/boost/compatibility/cpp_c_headers/cstddef
@@ -0,0 +1,15 @@
+// This file is automatically generated. Do not edit.
+// ['../../libs/compatibility/generate_cpp_c_headers.py']
+// Wed Jul 23 12:11:19 2003 ('GMTST', 'GMTST')
+
+#ifndef __CSTDDEF_HEADER
+#define __CSTDDEF_HEADER
+
+#include <stddef.h>
+
+namespace std {
+ using ::ptrdiff_t;
+ using ::size_t;
+}
+
+#endif // CSTDDEF_HEADER
diff --git a/boost/boost/compatibility/cpp_c_headers/cstdio b/boost/boost/compatibility/cpp_c_headers/cstdio
new file mode 100644
index 00000000000..8a48077ce3e
--- /dev/null
+++ b/boost/boost/compatibility/cpp_c_headers/cstdio
@@ -0,0 +1,57 @@
+// This file is automatically generated. Do not edit.
+// ['../../libs/compatibility/generate_cpp_c_headers.py']
+// Wed Jul 23 12:11:19 2003 ('GMTST', 'GMTST')
+
+#ifndef __CSTDIO_HEADER
+#define __CSTDIO_HEADER
+
+#include <stdio.h>
+
+namespace std {
+ using ::FILE;
+ using ::fpos_t;
+ using ::size_t;
+ using ::clearerr;
+ using ::fgets;
+ using ::fscanf;
+ using ::gets;
+ using ::rename;
+ using ::tmpfile;
+ using ::fclose;
+ using ::fopen;
+ using ::fseek;
+ using ::perror;
+ using ::rewind;
+ using ::tmpnam;
+ using ::feof;
+ using ::fprintf;
+ using ::fsetpos;
+ using ::printf;
+ using ::scanf;
+ using ::ungetc;
+ using ::ferror;
+ using ::fputc;
+ using ::ftell;
+ using ::putc;
+ using ::setbuf;
+ using ::vfprintf;
+ using ::fflush;
+ using ::fputs;
+ using ::fwrite;
+ using ::putchar;
+ using ::setvbuf;
+ using ::vprintf;
+ using ::fgetc;
+ using ::fread;
+ using ::getc;
+ using ::puts;
+ using ::sprintf;
+ using ::vsprintf;
+ using ::fgetpos;
+ using ::freopen;
+ using ::getchar;
+ using ::remove;
+ using ::sscanf;
+}
+
+#endif // CSTDIO_HEADER
diff --git a/boost/boost/compatibility/cpp_c_headers/cstdlib b/boost/boost/compatibility/cpp_c_headers/cstdlib
new file mode 100644
index 00000000000..7592ffcf3dd
--- /dev/null
+++ b/boost/boost/compatibility/cpp_c_headers/cstdlib
@@ -0,0 +1,43 @@
+// This file is automatically generated. Do not edit.
+// ['../../libs/compatibility/generate_cpp_c_headers.py']
+// Wed Jul 23 12:11:19 2003 ('GMTST', 'GMTST')
+
+#ifndef __CSTDLIB_HEADER
+#define __CSTDLIB_HEADER
+
+#include <stdlib.h>
+
+namespace std {
+ using ::abort;
+ using ::atexit;
+ using ::exit;
+ using ::getenv;
+ using ::system;
+ using ::calloc;
+ using ::malloc;
+ using ::free;
+ using ::realloc;
+ using ::atol;
+ using ::mblen;
+ using ::strtod;
+ using ::wctomb;
+ using ::atof;
+ using ::mbstowcs;
+ using ::strtol;
+ using ::wcstombs;
+ using ::atoi;
+ using ::mbtowc;
+ using ::strtoul;
+ using ::bsearch;
+ using ::qsort;
+ using ::div_t;
+ using ::ldiv_t;
+ using ::abs;
+ using ::labs;
+ using ::srand;
+ using ::div;
+ using ::ldiv;
+ using ::rand;
+}
+
+#endif // CSTDLIB_HEADER
diff --git a/boost/boost/compatibility/cpp_c_headers/cstring b/boost/boost/compatibility/cpp_c_headers/cstring
new file mode 100644
index 00000000000..e913597a64d
--- /dev/null
+++ b/boost/boost/compatibility/cpp_c_headers/cstring
@@ -0,0 +1,36 @@
+// This file is automatically generated. Do not edit.
+// ['../../libs/compatibility/generate_cpp_c_headers.py']
+// Wed Jul 23 12:11:19 2003 ('GMTST', 'GMTST')
+
+#ifndef __CSTRING_HEADER
+#define __CSTRING_HEADER
+
+#include <string.h>
+
+namespace std {
+ using ::size_t;
+ using ::memchr;
+ using ::strcat;
+ using ::strcspn;
+ using ::strncpy;
+ using ::strtok;
+ using ::memcmp;
+ using ::strchr;
+ using ::strerror;
+ using ::strpbrk;
+ using ::strxfrm;
+ using ::memcpy;
+ using ::strcmp;
+ using ::strlen;
+ using ::strrchr;
+ using ::memmove;
+ using ::strcoll;
+ using ::strncat;
+ using ::strspn;
+ using ::memset;
+ using ::strcpy;
+ using ::strncmp;
+ using ::strstr;
+}
+
+#endif // CSTRING_HEADER
diff --git a/boost/boost/compatibility/cpp_c_headers/ctime b/boost/boost/compatibility/cpp_c_headers/ctime
new file mode 100644
index 00000000000..0c8ac9abf29
--- /dev/null
+++ b/boost/boost/compatibility/cpp_c_headers/ctime
@@ -0,0 +1,26 @@
+// This file is automatically generated. Do not edit.
+// ['../../libs/compatibility/generate_cpp_c_headers.py']
+// Wed Jul 23 12:11:19 2003 ('GMTST', 'GMTST')
+
+#ifndef __CTIME_HEADER
+#define __CTIME_HEADER
+
+#include <time.h>
+
+namespace std {
+ using ::size_t;
+ using ::clock_t;
+ using ::time_t;
+ using ::tm;
+ using ::asctime;
+ using ::clock;
+ using ::difftime;
+ using ::localtime;
+ using ::strftime;
+ using ::ctime;
+ using ::gmtime;
+ using ::mktime;
+ using ::time;
+}
+
+#endif // CTIME_HEADER
diff --git a/boost/boost/compatibility/cpp_c_headers/cwchar b/boost/boost/compatibility/cpp_c_headers/cwchar
new file mode 100644
index 00000000000..f9fbd309556
--- /dev/null
+++ b/boost/boost/compatibility/cpp_c_headers/cwchar
@@ -0,0 +1,156 @@
+// This file is automatically generated. Do not edit.
+// ['../../libs/compatibility/generate_cpp_c_headers.py']
+// Wed Jul 23 12:11:19 2003 ('GMTST', 'GMTST')
+
+#ifndef __CWCHAR_HEADER
+#define __CWCHAR_HEADER
+
+#include <wchar.h>
+
+namespace std {
+ using ::mbstate_t;
+ using ::wint_t;
+ using ::size_t;
+#if !(defined(__sgi) && defined(_COMPILER_VERSION) && _COMPILER_VERSION <= 740)
+ using ::btowc;
+#endif
+#if !(defined(__linux) && defined(__DECCXX_VER) && __DECCXX_VER <= 60390005)
+ using ::getwchar;
+#endif
+#if !(defined(__linux) && defined(__DECCXX_VER) && __DECCXX_VER <= 60390005)
+ using ::ungetwc;
+#endif
+ using ::wcscpy;
+#if !(defined(__sgi) && defined(_COMPILER_VERSION) && _COMPILER_VERSION <= 740)
+ using ::wcsrtombs;
+#endif
+#if !(defined(__sgi) && defined(_COMPILER_VERSION) && _COMPILER_VERSION <= 740)
+ using ::wmemchr;
+#endif
+#if !(defined(__linux) && defined(__DECCXX_VER) && __DECCXX_VER <= 60390005)
+ using ::fgetwc;
+#endif
+#if !(defined(__sgi) && defined(_COMPILER_VERSION) && _COMPILER_VERSION <= 740)
+ using ::mbrlen;
+#endif
+#if !(defined(__linux) && defined(__DECCXX_VER) && __DECCXX_VER <= 60390005)
+#if !(defined(__sgi) && defined(_COMPILER_VERSION) && _COMPILER_VERSION <= 740)
+ using ::vfwprintf;
+#endif
+#endif
+ using ::wcscspn;
+ using ::wcsspn;
+#if !(defined(__sgi) && defined(_COMPILER_VERSION) && _COMPILER_VERSION <= 740)
+ using ::wmemcmp;
+#endif
+#if !(defined(__linux) && defined(__DECCXX_VER) && __DECCXX_VER <= 60390005)
+ using ::fgetws;
+#endif
+#if !(defined(__sgi) && defined(_COMPILER_VERSION) && _COMPILER_VERSION <= 740)
+ using ::mbrtowc;
+#endif
+#if !(defined(__linux) && defined(__DECCXX_VER) && __DECCXX_VER <= 60390005)
+#if !(defined(__sgi) && defined(_COMPILER_VERSION) && _COMPILER_VERSION <= 740)
+ using ::vswprintf;
+#endif
+#endif
+#if !(defined(__linux) && defined(__DECCXX_VER) && __DECCXX_VER <= 60390005)
+ using ::wcsftime;
+#endif
+ using ::wcsstr;
+#if !(defined(__sgi) && defined(_COMPILER_VERSION) && _COMPILER_VERSION <= 740)
+ using ::wmemcpy;
+#endif
+#if !(defined(__linux) && defined(__DECCXX_VER) && __DECCXX_VER <= 60390005)
+ using ::fputwc;
+#endif
+#if !(defined(__sgi) && defined(_COMPILER_VERSION) && _COMPILER_VERSION <= 740)
+ using ::mbsinit;
+#endif
+#if !(defined(__linux) && defined(__DECCXX_VER) && __DECCXX_VER <= 60390005)
+#if !(defined(__sgi) && defined(_COMPILER_VERSION) && _COMPILER_VERSION <= 740)
+ using ::vwprintf;
+#endif
+#endif
+ using ::wcslen;
+ using ::wcstod;
+#if !(defined(__sgi) && defined(_COMPILER_VERSION) && _COMPILER_VERSION <= 740)
+ using ::wmemmove;
+#endif
+#if !(defined(__linux) && defined(__DECCXX_VER) && __DECCXX_VER <= 60390005)
+ using ::fputws;
+#endif
+#if !(defined(__sgi) && defined(_COMPILER_VERSION) && _COMPILER_VERSION <= 740)
+ using ::mbsrtowcs;
+#endif
+#if !(defined(__sgi) && defined(_COMPILER_VERSION) && _COMPILER_VERSION <= 740)
+ using ::wcrtomb;
+#endif
+ using ::wcsncat;
+ using ::wcstok;
+#if !(defined(__sgi) && defined(_COMPILER_VERSION) && _COMPILER_VERSION <= 740)
+ using ::wmemset;
+#endif
+#if !(defined(__linux) && defined(__DECCXX_VER) && __DECCXX_VER <= 60390005)
+#if !(defined(__sgi) && defined(_COMPILER_VERSION) && _COMPILER_VERSION <= 740)
+#if !(defined(__DECCXX_VER) && __DECCXX_VER <= 60290024)
+ using ::fwide;
+#endif
+#endif
+#endif
+#if !(defined(__linux) && defined(__DECCXX_VER) && __DECCXX_VER <= 60390005)
+ using ::putwc;
+#endif
+ using ::wcscat;
+ using ::wcsncmp;
+ using ::wcstol;
+#if !(defined(__linux) && defined(__DECCXX_VER) && __DECCXX_VER <= 60390005)
+#if !(defined(__sgi) && defined(_COMPILER_VERSION) && _COMPILER_VERSION <= 740)
+ using ::wprintf;
+#endif
+#endif
+#if !(defined(__linux) && defined(__DECCXX_VER) && __DECCXX_VER <= 60390005)
+#if !(defined(__sgi) && defined(_COMPILER_VERSION) && _COMPILER_VERSION <= 740)
+ using ::fwprintf;
+#endif
+#endif
+#if !(defined(__linux) && defined(__DECCXX_VER) && __DECCXX_VER <= 60390005)
+ using ::putwchar;
+#endif
+ using ::wcschr;
+ using ::wcsncpy;
+ using ::wcstoul;
+#if !(defined(__linux) && defined(__DECCXX_VER) && __DECCXX_VER <= 60390005)
+#if !(defined(__sgi) && defined(_COMPILER_VERSION) && _COMPILER_VERSION <= 740)
+ using ::wscanf;
+#endif
+#endif
+#if !(defined(__linux) && defined(__DECCXX_VER) && __DECCXX_VER <= 60390005)
+#if !(defined(__sgi) && defined(_COMPILER_VERSION) && _COMPILER_VERSION <= 740)
+ using ::fwscanf;
+#endif
+#endif
+#if !(defined(__linux) && defined(__DECCXX_VER) && __DECCXX_VER <= 60390005)
+#if !(defined(__sgi) && defined(_COMPILER_VERSION) && _COMPILER_VERSION <= 740)
+ using ::swprintf;
+#endif
+#endif
+ using ::wcscmp;
+ using ::wcspbrk;
+ using ::wcsxfrm;
+#if !(defined(__linux) && defined(__DECCXX_VER) && __DECCXX_VER <= 60390005)
+ using ::getwc;
+#endif
+#if !(defined(__linux) && defined(__DECCXX_VER) && __DECCXX_VER <= 60390005)
+#if !(defined(__sgi) && defined(_COMPILER_VERSION) && _COMPILER_VERSION <= 740)
+ using ::swscanf;
+#endif
+#endif
+ using ::wcscoll;
+ using ::wcsrchr;
+#if !(defined(__sgi) && defined(_COMPILER_VERSION) && _COMPILER_VERSION <= 740)
+ using ::wctob;
+#endif
+}
+
+#endif // CWCHAR_HEADER
diff --git a/boost/boost/compatibility/cpp_c_headers/cwctype b/boost/boost/compatibility/cpp_c_headers/cwctype
new file mode 100644
index 00000000000..cf8f07b0748
--- /dev/null
+++ b/boost/boost/compatibility/cpp_c_headers/cwctype
@@ -0,0 +1,39 @@
+// This file is automatically generated. Do not edit.
+// ['../../libs/compatibility/generate_cpp_c_headers.py']
+// Wed Jul 23 12:11:19 2003 ('GMTST', 'GMTST')
+
+#ifndef __CWCTYPE_HEADER
+#define __CWCTYPE_HEADER
+
+#include <wctype.h>
+
+namespace std {
+#if !(defined(__sgi) && defined(_COMPILER_VERSION) && _COMPILER_VERSION <= 740)
+ using ::wctrans_t;
+#endif
+ using ::wctype_t;
+ using ::wint_t;
+ using ::iswalnum;
+ using ::iswctype;
+ using ::iswlower;
+ using ::iswspace;
+#if !(defined(__sgi) && defined(_COMPILER_VERSION) && _COMPILER_VERSION <= 740)
+ using ::towctrans;
+#endif
+#if !(defined(__sgi) && defined(_COMPILER_VERSION) && _COMPILER_VERSION <= 740)
+ using ::wctrans;
+#endif
+ using ::iswalpha;
+ using ::iswdigit;
+ using ::iswprint;
+ using ::iswupper;
+ using ::towlower;
+ using ::wctype;
+ using ::iswcntrl;
+ using ::iswgraph;
+ using ::iswpunct;
+ using ::iswxdigit;
+ using ::towupper;
+}
+
+#endif // CWCTYPE_HEADER
diff --git a/boost/boost/compressed_pair.hpp b/boost/boost/compressed_pair.hpp
new file mode 100644
index 00000000000..e6cd6a074a8
--- /dev/null
+++ b/boost/boost/compressed_pair.hpp
@@ -0,0 +1,24 @@
+// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/utility for most recent version including documentation.
+
+// See boost/detail/compressed_pair.hpp and boost/detail/ob_compressed_pair.hpp
+// for full copyright notices.
+
+#ifndef BOOST_COMPRESSED_PAIR_HPP
+#define BOOST_COMPRESSED_PAIR_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#include <boost/config.hpp>
+#endif
+
+#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#include <boost/detail/ob_compressed_pair.hpp>
+#else
+#include <boost/detail/compressed_pair.hpp>
+#endif
+
+#endif // BOOST_COMPRESSED_PAIR_HPP
diff --git a/boost/boost/concept_archetype.hpp b/boost/boost/concept_archetype.hpp
new file mode 100644
index 00000000000..f21c817384f
--- /dev/null
+++ b/boost/boost/concept_archetype.hpp
@@ -0,0 +1,669 @@
+//
+// (C) Copyright Jeremy Siek 2000.
+// 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)
+//
+// Revision History:
+//
+// 17 July 2001: Added const to some member functions. (Jeremy Siek)
+// 05 May 2001: Removed static dummy_cons object. (Jeremy Siek)
+
+// See http://www.boost.org/libs/concept_check for documentation.
+
+#ifndef BOOST_CONCEPT_ARCHETYPES_HPP
+#define BOOST_CONCEPT_ARCHETYPES_HPP
+
+#include <boost/config.hpp>
+#include <boost/iterator.hpp>
+#include <boost/mpl/identity.hpp>
+#include <functional>
+
+namespace boost {
+
+ //===========================================================================
+ // Basic Archetype Classes
+
+ namespace detail {
+ class dummy_constructor { };
+ }
+
+ // A type that models no concept. The template parameter
+ // is only there so that null_archetype types can be created
+ // that have different type.
+ template <class T = int>
+ class null_archetype {
+ private:
+ null_archetype() { }
+ null_archetype(const null_archetype&) { }
+ null_archetype& operator=(const null_archetype&) { return *this; }
+ public:
+ null_archetype(detail::dummy_constructor) { }
+#ifndef __MWERKS__
+ template <class TT>
+ friend void dummy_friend(); // just to avoid warnings
+#endif
+ };
+
+ // This is a helper class that provides a way to get a reference to
+ // an object. The get() function will never be called at run-time
+ // (nothing in this file will) so this seemingly very bad function
+ // is really quite innocent. The name of this class needs to be
+ // changed.
+ template <class T>
+ class static_object
+ {
+ public:
+ static T& get()
+ {
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+ return *reinterpret_cast<T*>(0);
+#else
+ static char d[sizeof(T)];
+ return *reinterpret_cast<T*>(d);
+#endif
+ }
+ };
+
+ template <class Base = null_archetype<> >
+ class default_constructible_archetype : public Base {
+ public:
+ default_constructible_archetype()
+ : Base(static_object<detail::dummy_constructor>::get()) { }
+ default_constructible_archetype(detail::dummy_constructor x) : Base(x) { }
+ };
+
+ template <class Base = null_archetype<> >
+ class assignable_archetype : public Base {
+ assignable_archetype() { }
+ assignable_archetype(const assignable_archetype&) { }
+ public:
+ assignable_archetype& operator=(const assignable_archetype&) {
+ return *this;
+ }
+ assignable_archetype(detail::dummy_constructor x) : Base(x) { }
+ };
+
+ template <class Base = null_archetype<> >
+ class copy_constructible_archetype : public Base {
+ public:
+ copy_constructible_archetype()
+ : Base(static_object<detail::dummy_constructor>::get()) { }
+ copy_constructible_archetype(const copy_constructible_archetype&)
+ : Base(static_object<detail::dummy_constructor>::get()) { }
+ copy_constructible_archetype(detail::dummy_constructor x) : Base(x) { }
+ };
+
+ template <class Base = null_archetype<> >
+ class sgi_assignable_archetype : public Base {
+ public:
+ sgi_assignable_archetype(const sgi_assignable_archetype&)
+ : Base(static_object<detail::dummy_constructor>::get()) { }
+ sgi_assignable_archetype& operator=(const sgi_assignable_archetype&) {
+ return *this;
+ }
+ sgi_assignable_archetype(const detail::dummy_constructor& x) : Base(x) { }
+ };
+
+ struct default_archetype_base {
+ default_archetype_base(detail::dummy_constructor) { }
+ };
+
+ // Careful, don't use same type for T and Base. That results in the
+ // conversion operator being invalid. Since T is often
+ // null_archetype, can't use null_archetype for Base.
+ template <class T, class Base = default_archetype_base>
+ class convertible_to_archetype : public Base {
+ private:
+ convertible_to_archetype() { }
+ convertible_to_archetype(const convertible_to_archetype& ) { }
+ convertible_to_archetype& operator=(const convertible_to_archetype&)
+ { return *this; }
+ public:
+ convertible_to_archetype(detail::dummy_constructor x) : Base(x) { }
+ operator const T&() const { return static_object<T>::get(); }
+ };
+
+ template <class T, class Base = default_archetype_base>
+ class convertible_from_archetype : public Base {
+ private:
+ convertible_from_archetype() { }
+ convertible_from_archetype(const convertible_from_archetype& ) { }
+ convertible_from_archetype& operator=(const convertible_from_archetype&)
+ { return *this; }
+ public:
+ convertible_from_archetype(detail::dummy_constructor x) : Base(x) { }
+ convertible_from_archetype(const T&) { }
+ convertible_from_archetype& operator=(const T&)
+ { return *this; }
+ };
+
+ class boolean_archetype {
+ public:
+ boolean_archetype(const boolean_archetype&) { }
+ operator bool() const { return true; }
+ boolean_archetype(detail::dummy_constructor) { }
+ private:
+ boolean_archetype() { }
+ boolean_archetype& operator=(const boolean_archetype&) { return *this; }
+ };
+
+ template <class Base = null_archetype<> >
+ class equality_comparable_archetype : public Base {
+ public:
+ equality_comparable_archetype(detail::dummy_constructor x) : Base(x) { }
+ };
+ template <class Base>
+ boolean_archetype
+ operator==(const equality_comparable_archetype<Base>&,
+ const equality_comparable_archetype<Base>&)
+ {
+ return boolean_archetype(static_object<detail::dummy_constructor>::get());
+ }
+ template <class Base>
+ boolean_archetype
+ operator!=(const equality_comparable_archetype<Base>&,
+ const equality_comparable_archetype<Base>&)
+ {
+ return boolean_archetype(static_object<detail::dummy_constructor>::get());
+ }
+
+
+ template <class Base = null_archetype<> >
+ class equality_comparable2_first_archetype : public Base {
+ public:
+ equality_comparable2_first_archetype(detail::dummy_constructor x)
+ : Base(x) { }
+ };
+ template <class Base = null_archetype<> >
+ class equality_comparable2_second_archetype : public Base {
+ public:
+ equality_comparable2_second_archetype(detail::dummy_constructor x)
+ : Base(x) { }
+ };
+ template <class Base1, class Base2>
+ boolean_archetype
+ operator==(const equality_comparable2_first_archetype<Base1>&,
+ const equality_comparable2_second_archetype<Base2>&)
+ {
+ return boolean_archetype(static_object<detail::dummy_constructor>::get());
+ }
+ template <class Base1, class Base2>
+ boolean_archetype
+ operator!=(const equality_comparable2_first_archetype<Base1>&,
+ const equality_comparable2_second_archetype<Base2>&)
+ {
+ return boolean_archetype(static_object<detail::dummy_constructor>::get());
+ }
+
+
+ template <class Base = null_archetype<> >
+ class less_than_comparable_archetype : public Base {
+ public:
+ less_than_comparable_archetype(detail::dummy_constructor x) : Base(x) { }
+ };
+ template <class Base>
+ boolean_archetype
+ operator<(const less_than_comparable_archetype<Base>&,
+ const less_than_comparable_archetype<Base>&)
+ {
+ return boolean_archetype(static_object<detail::dummy_constructor>::get());
+ }
+
+
+
+ template <class Base = null_archetype<> >
+ class comparable_archetype : public Base {
+ public:
+ comparable_archetype(detail::dummy_constructor x) : Base(x) { }
+ };
+ template <class Base>
+ boolean_archetype
+ operator<(const comparable_archetype<Base>&,
+ const comparable_archetype<Base>&)
+ {
+ return boolean_archetype(static_object<detail::dummy_constructor>::get());
+ }
+ template <class Base>
+ boolean_archetype
+ operator<=(const comparable_archetype<Base>&,
+ const comparable_archetype<Base>&)
+ {
+ return boolean_archetype(static_object<detail::dummy_constructor>::get());
+ }
+ template <class Base>
+ boolean_archetype
+ operator>(const comparable_archetype<Base>&,
+ const comparable_archetype<Base>&)
+ {
+ return boolean_archetype(static_object<detail::dummy_constructor>::get());
+ }
+ template <class Base>
+ boolean_archetype
+ operator>=(const comparable_archetype<Base>&,
+ const comparable_archetype<Base>&)
+ {
+ return boolean_archetype(static_object<detail::dummy_constructor>::get());
+ }
+
+
+ // The purpose of the optags is so that one can specify
+ // exactly which types the operator< is defined between.
+ // This is useful for allowing the operations:
+ //
+ // A a; B b;
+ // a < b
+ // b < a
+ //
+ // without also allowing the combinations:
+ //
+ // a < a
+ // b < b
+ //
+ struct optag1 { };
+ struct optag2 { };
+ struct optag3 { };
+
+#define BOOST_DEFINE_BINARY_PREDICATE_ARCHETYPE(OP, NAME) \
+ template <class Base = null_archetype<>, class Tag = optag1 > \
+ class NAME##_first_archetype : public Base { \
+ public: \
+ NAME##_first_archetype(detail::dummy_constructor x) : Base(x) { } \
+ }; \
+ \
+ template <class Base = null_archetype<>, class Tag = optag1 > \
+ class NAME##_second_archetype : public Base { \
+ public: \
+ NAME##_second_archetype(detail::dummy_constructor x) : Base(x) { } \
+ }; \
+ \
+ template <class BaseFirst, class BaseSecond, class Tag> \
+ boolean_archetype \
+ operator OP (const NAME##_first_archetype<BaseFirst, Tag>&, \
+ const NAME##_second_archetype<BaseSecond, Tag>&) \
+ { \
+ return boolean_archetype(static_object<detail::dummy_constructor>::get()); \
+ }
+
+ BOOST_DEFINE_BINARY_PREDICATE_ARCHETYPE(==, equal_op)
+ BOOST_DEFINE_BINARY_PREDICATE_ARCHETYPE(!=, not_equal_op)
+ BOOST_DEFINE_BINARY_PREDICATE_ARCHETYPE(<, less_than_op)
+ BOOST_DEFINE_BINARY_PREDICATE_ARCHETYPE(<=, less_equal_op)
+ BOOST_DEFINE_BINARY_PREDICATE_ARCHETYPE(>, greater_than_op)
+ BOOST_DEFINE_BINARY_PREDICATE_ARCHETYPE(>=, greater_equal_op)
+
+#define BOOST_DEFINE_OPERATOR_ARCHETYPE(OP, NAME) \
+ template <class Base = null_archetype<> > \
+ class NAME##_archetype : public Base { \
+ public: \
+ NAME##_archetype(detail::dummy_constructor x) : Base(x) { } \
+ NAME##_archetype(const NAME##_archetype&) \
+ : Base(static_object<detail::dummy_constructor>::get()) { } \
+ NAME##_archetype& operator=(const NAME##_archetype&) { return *this; } \
+ }; \
+ template <class Base> \
+ NAME##_archetype<Base> \
+ operator OP (const NAME##_archetype<Base>&,\
+ const NAME##_archetype<Base>&) \
+ { \
+ return \
+ NAME##_archetype<Base>(static_object<detail::dummy_constructor>::get()); \
+ }
+
+ BOOST_DEFINE_OPERATOR_ARCHETYPE(+, addable)
+ BOOST_DEFINE_OPERATOR_ARCHETYPE(-, subtractable)
+ BOOST_DEFINE_OPERATOR_ARCHETYPE(*, multipliable)
+ BOOST_DEFINE_OPERATOR_ARCHETYPE(/, dividable)
+ BOOST_DEFINE_OPERATOR_ARCHETYPE(%, modable)
+
+ // As is, these are useless because of the return type.
+ // Need to invent a better way...
+#define BOOST_DEFINE_BINARY_OPERATOR_ARCHETYPE(OP, NAME) \
+ template <class Return, class Base = null_archetype<> > \
+ class NAME##_first_archetype : public Base { \
+ public: \
+ NAME##_first_archetype(detail::dummy_constructor x) : Base(x) { } \
+ }; \
+ \
+ template <class Return, class Base = null_archetype<> > \
+ class NAME##_second_archetype : public Base { \
+ public: \
+ NAME##_second_archetype(detail::dummy_constructor x) : Base(x) { } \
+ }; \
+ \
+ template <class Return, class BaseFirst, class BaseSecond> \
+ Return \
+ operator OP (const NAME##_first_archetype<Return, BaseFirst>&, \
+ const NAME##_second_archetype<Return, BaseSecond>&) \
+ { \
+ return Return(static_object<detail::dummy_constructor>::get()); \
+ }
+
+ BOOST_DEFINE_BINARY_OPERATOR_ARCHETYPE(+, plus_op)
+ BOOST_DEFINE_BINARY_OPERATOR_ARCHETYPE(*, time_op)
+ BOOST_DEFINE_BINARY_OPERATOR_ARCHETYPE(/, divide_op)
+ BOOST_DEFINE_BINARY_OPERATOR_ARCHETYPE(-, subtract_op)
+ BOOST_DEFINE_BINARY_OPERATOR_ARCHETYPE(%, mod_op)
+
+ //===========================================================================
+ // Function Object Archetype Classes
+
+ template <class Return>
+ class generator_archetype {
+ public:
+ const Return& operator()() {
+ return static_object<Return>::get();
+ }
+ };
+
+ class void_generator_archetype {
+ public:
+ void operator()() { }
+ };
+
+ template <class Arg, class Return>
+ class unary_function_archetype {
+ private:
+ unary_function_archetype() { }
+ public:
+ unary_function_archetype(detail::dummy_constructor) { }
+ const Return& operator()(const Arg&) const {
+ return static_object<Return>::get();
+ }
+ };
+
+ template <class Arg1, class Arg2, class Return>
+ class binary_function_archetype {
+ private:
+ binary_function_archetype() { }
+ public:
+ binary_function_archetype(detail::dummy_constructor) { }
+ const Return& operator()(const Arg1&, const Arg2&) const {
+ return static_object<Return>::get();
+ }
+ };
+
+ template <class Arg>
+ class unary_predicate_archetype {
+ typedef boolean_archetype Return;
+ unary_predicate_archetype() { }
+ public:
+ unary_predicate_archetype(detail::dummy_constructor) { }
+ const Return& operator()(const Arg&) const {
+ return static_object<Return>::get();
+ }
+ };
+
+ template <class Arg1, class Arg2, class Base = null_archetype<> >
+ class binary_predicate_archetype {
+ typedef boolean_archetype Return;
+ binary_predicate_archetype() { }
+ public:
+ binary_predicate_archetype(detail::dummy_constructor) { }
+ const Return& operator()(const Arg1&, const Arg2&) const {
+ return static_object<Return>::get();
+ }
+ };
+
+ //===========================================================================
+ // Iterator Archetype Classes
+
+ template <class T, int I = 0>
+ class input_iterator_archetype
+ {
+ private:
+ typedef input_iterator_archetype self;
+ public:
+ typedef std::input_iterator_tag iterator_category;
+ typedef T value_type;
+ struct reference {
+ operator const value_type&() const { return static_object<T>::get(); }
+ };
+ typedef const T* pointer;
+ typedef std::ptrdiff_t difference_type;
+ self& operator=(const self&) { return *this; }
+ bool operator==(const self&) const { return true; }
+ bool operator!=(const self&) const { return true; }
+ reference operator*() const { return reference(); }
+ self& operator++() { return *this; }
+ self operator++(int) { return *this; }
+ };
+
+ template <class T>
+ class input_iterator_archetype_no_proxy
+ {
+ private:
+ typedef input_iterator_archetype_no_proxy self;
+ public:
+ typedef std::input_iterator_tag iterator_category;
+ typedef T value_type;
+ typedef const T& reference;
+ typedef const T* pointer;
+ typedef std::ptrdiff_t difference_type;
+ self& operator=(const self&) { return *this; }
+ bool operator==(const self&) const { return true; }
+ bool operator!=(const self&) const { return true; }
+ reference operator*() const { return static_object<T>::get(); }
+ self& operator++() { return *this; }
+ self operator++(int) { return *this; }
+ };
+
+ template <class T>
+ struct output_proxy {
+ output_proxy& operator=(const T&) { return *this; }
+ };
+
+ template <class T>
+ class output_iterator_archetype
+ {
+ public:
+ typedef output_iterator_archetype self;
+ public:
+ typedef std::output_iterator_tag iterator_category;
+ typedef output_proxy<T> value_type;
+ typedef output_proxy<T> reference;
+ typedef void pointer;
+ typedef void difference_type;
+ output_iterator_archetype(detail::dummy_constructor) { }
+ output_iterator_archetype(const self&) { }
+ self& operator=(const self&) { return *this; }
+ bool operator==(const self&) const { return true; }
+ bool operator!=(const self&) const { return true; }
+ reference operator*() const { return output_proxy<T>(); }
+ self& operator++() { return *this; }
+ self operator++(int) { return *this; }
+ private:
+ output_iterator_archetype() { }
+ };
+
+ template <class T>
+ class input_output_iterator_archetype
+ {
+ private:
+ typedef input_output_iterator_archetype self;
+ struct in_out_tag : public std::input_iterator_tag, public std::output_iterator_tag { };
+ public:
+ typedef in_out_tag iterator_category;
+ typedef T value_type;
+ struct reference {
+ reference& operator=(const T&) { return *this; }
+ operator value_type() { return static_object<T>::get(); }
+ };
+ typedef const T* pointer;
+ typedef std::ptrdiff_t difference_type;
+ input_output_iterator_archetype() { }
+ self& operator=(const self&) { return *this; }
+ bool operator==(const self&) const { return true; }
+ bool operator!=(const self&) const { return true; }
+ reference operator*() const { return reference(); }
+ self& operator++() { return *this; }
+ self operator++(int) { return *this; }
+ };
+
+ template <class T>
+ class forward_iterator_archetype
+ {
+ public:
+ typedef forward_iterator_archetype self;
+ public:
+ typedef std::forward_iterator_tag iterator_category;
+ typedef T value_type;
+ typedef const T& reference;
+ typedef T const* pointer;
+ typedef std::ptrdiff_t difference_type;
+ forward_iterator_archetype() { }
+ self& operator=(const self&) { return *this; }
+ bool operator==(const self&) const { return true; }
+ bool operator!=(const self&) const { return true; }
+ reference operator*() const { return static_object<T>::get(); }
+ self& operator++() { return *this; }
+ self operator++(int) { return *this; }
+ };
+
+ template <class T>
+ class mutable_forward_iterator_archetype
+ {
+ public:
+ typedef mutable_forward_iterator_archetype self;
+ public:
+ typedef std::forward_iterator_tag iterator_category;
+ typedef T value_type;
+ typedef T& reference;
+ typedef T* pointer;
+ typedef std::ptrdiff_t difference_type;
+ mutable_forward_iterator_archetype() { }
+ self& operator=(const self&) { return *this; }
+ bool operator==(const self&) const { return true; }
+ bool operator!=(const self&) const { return true; }
+ reference operator*() const { return static_object<T>::get(); }
+ self& operator++() { return *this; }
+ self operator++(int) { return *this; }
+ };
+
+ template <class T>
+ class bidirectional_iterator_archetype
+ {
+ public:
+ typedef bidirectional_iterator_archetype self;
+ public:
+ typedef std::bidirectional_iterator_tag iterator_category;
+ typedef T value_type;
+ typedef const T& reference;
+ typedef T* pointer;
+ typedef std::ptrdiff_t difference_type;
+ bidirectional_iterator_archetype() { }
+ self& operator=(const self&) { return *this; }
+ bool operator==(const self&) const { return true; }
+ bool operator!=(const self&) const { return true; }
+ reference operator*() const { return static_object<T>::get(); }
+ self& operator++() { return *this; }
+ self operator++(int) { return *this; }
+ self& operator--() { return *this; }
+ self operator--(int) { return *this; }
+ };
+
+ template <class T>
+ class mutable_bidirectional_iterator_archetype
+ {
+ public:
+ typedef mutable_bidirectional_iterator_archetype self;
+ public:
+ typedef std::bidirectional_iterator_tag iterator_category;
+ typedef T value_type;
+ typedef T& reference;
+ typedef T* pointer;
+ typedef std::ptrdiff_t difference_type;
+ mutable_bidirectional_iterator_archetype() { }
+ self& operator=(const self&) { return *this; }
+ bool operator==(const self&) const { return true; }
+ bool operator!=(const self&) const { return true; }
+ reference operator*() const { return static_object<T>::get(); }
+ self& operator++() { return *this; }
+ self operator++(int) { return *this; }
+ self& operator--() { return *this; }
+ self operator--(int) { return *this; }
+ };
+
+ template <class T>
+ class random_access_iterator_archetype
+ {
+ public:
+ typedef random_access_iterator_archetype self;
+ public:
+ typedef std::random_access_iterator_tag iterator_category;
+ typedef T value_type;
+ typedef const T& reference;
+ typedef T* pointer;
+ typedef std::ptrdiff_t difference_type;
+ random_access_iterator_archetype() { }
+ self& operator=(const self&) { return *this; }
+ bool operator==(const self&) const { return true; }
+ bool operator!=(const self&) const { return true; }
+ reference operator*() const { return static_object<T>::get(); }
+ self& operator++() { return *this; }
+ self operator++(int) { return *this; }
+ self& operator--() { return *this; }
+ self operator--(int) { return *this; }
+ reference operator[](difference_type) const
+ { return static_object<T>::get(); }
+ self& operator+=(difference_type) { return *this; }
+ self& operator-=(difference_type) { return *this; }
+ difference_type operator-(const self&) const
+ { return difference_type(); }
+ self operator+(difference_type) const { return *this; }
+ self operator-(difference_type) const { return *this; }
+ bool operator<(const self&) const { return true; }
+ bool operator<=(const self&) const { return true; }
+ bool operator>(const self&) const { return true; }
+ bool operator>=(const self&) const { return true; }
+ };
+ template <class T>
+ random_access_iterator_archetype<T>
+ operator+(typename random_access_iterator_archetype<T>::difference_type,
+ const random_access_iterator_archetype<T>& x)
+ { return x; }
+
+
+ template <class T>
+ class mutable_random_access_iterator_archetype
+ {
+ public:
+ typedef mutable_random_access_iterator_archetype self;
+ public:
+ typedef std::random_access_iterator_tag iterator_category;
+ typedef T value_type;
+ typedef T& reference;
+ typedef T* pointer;
+ typedef std::ptrdiff_t difference_type;
+ mutable_random_access_iterator_archetype() { }
+ self& operator=(const self&) { return *this; }
+ bool operator==(const self&) const { return true; }
+ bool operator!=(const self&) const { return true; }
+ reference operator*() const { return static_object<T>::get(); }
+ self& operator++() { return *this; }
+ self operator++(int) { return *this; }
+ self& operator--() { return *this; }
+ self operator--(int) { return *this; }
+ reference operator[](difference_type) const
+ { return static_object<T>::get(); }
+ self& operator+=(difference_type) { return *this; }
+ self& operator-=(difference_type) { return *this; }
+ difference_type operator-(const self&) const
+ { return difference_type(); }
+ self operator+(difference_type) const { return *this; }
+ self operator-(difference_type) const { return *this; }
+ bool operator<(const self&) const { return true; }
+ bool operator<=(const self&) const { return true; }
+ bool operator>(const self&) const { return true; }
+ bool operator>=(const self&) const { return true; }
+ };
+ template <class T>
+ mutable_random_access_iterator_archetype<T>
+ operator+
+ (typename mutable_random_access_iterator_archetype<T>::difference_type,
+ const mutable_random_access_iterator_archetype<T>& x)
+ { return x; }
+
+} // namespace boost
+
+#endif // BOOST_CONCEPT_ARCHETYPES_H
diff --git a/boost/boost/concept_check.hpp b/boost/boost/concept_check.hpp
new file mode 100644
index 00000000000..8b090d0232c
--- /dev/null
+++ b/boost/boost/concept_check.hpp
@@ -0,0 +1,1056 @@
+//
+// (C) Copyright Jeremy Siek 2000.
+// 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)
+//
+// Revision History:
+// 05 May 2001: Workarounds for HP aCC from Thomas Matelich. (Jeremy Siek)
+// 02 April 2001: Removed limits header altogether. (Jeremy Siek)
+// 01 April 2001: Modified to use new <boost/limits.hpp> header. (JMaddock)
+//
+
+// See http://www.boost.org/libs/concept_check for documentation.
+
+#ifndef BOOST_CONCEPT_CHECKS_HPP
+#define BOOST_CONCEPT_CHECKS_HPP
+
+#include <boost/config.hpp>
+#include <boost/iterator.hpp>
+#include <boost/type_traits/conversion_traits.hpp>
+#include <utility>
+#include <boost/type_traits/conversion_traits.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/mpl/identity.hpp>
+
+
+#if defined(BOOST_MSVC) && BOOST_MSVC <= 1300 || defined(__BORLANDC__)
+#define BOOST_FPTR
+#else
+#define BOOST_FPTR &
+#endif
+
+namespace boost {
+
+/*
+ "inline" is used for ignore_unused_variable_warning()
+ and function_requires() to make sure there is no
+ overhead with g++.
+ */
+
+template <class T> inline void ignore_unused_variable_warning(const T&) { }
+
+// the unused, defaulted parameter is a workaround for MSVC and Compaq C++
+template <class Concept>
+inline void function_requires(mpl::identity<Concept>* = 0)
+{
+#if !defined(NDEBUG)
+ void (Concept::*x)() = BOOST_FPTR Concept::constraints;
+ ignore_unused_variable_warning(x);
+#endif
+}
+
+#define BOOST_CLASS_REQUIRE(type_var, ns, concept) \
+ typedef void (ns::concept <type_var>::* func##type_var##concept)(); \
+ template <func##type_var##concept Tp1_> \
+ struct concept_checking_##type_var##concept { }; \
+ typedef concept_checking_##type_var##concept< \
+ BOOST_FPTR ns::concept<type_var>::constraints> \
+ concept_checking_typedef_##type_var##concept
+
+#define BOOST_CLASS_REQUIRE2(type_var1, type_var2, ns, concept) \
+ typedef void (ns::concept <type_var1,type_var2>::* \
+ func##type_var1##type_var2##concept)(); \
+ template <func##type_var1##type_var2##concept Tp1_> \
+ struct concept_checking_##type_var1##type_var2##concept { }; \
+ typedef concept_checking_##type_var1##type_var2##concept< \
+ BOOST_FPTR ns::concept<type_var1,type_var2>::constraints> \
+ concept_checking_typedef_##type_var1##type_var2##concept
+
+#define BOOST_CLASS_REQUIRE3(tv1, tv2, tv3, ns, concept) \
+ typedef void (ns::concept <tv1,tv2,tv3>::* \
+ func##tv1##tv2##tv3##concept)(); \
+ template <func##tv1##tv2##tv3##concept Tp1_> \
+ struct concept_checking_##tv1##tv2##tv3##concept { }; \
+ typedef concept_checking_##tv1##tv2##tv3##concept< \
+ BOOST_FPTR ns::concept<tv1,tv2,tv3>::constraints> \
+ concept_checking_typedef_##tv1##tv2##tv3##concept
+
+#define BOOST_CLASS_REQUIRE4(tv1, tv2, tv3, tv4, ns, concept) \
+ typedef void (ns::concept <tv1,tv2,tv3,tv4>::* \
+ func##tv1##tv2##tv3##tv4##concept)(); \
+ template <func##tv1##tv2##tv3##tv4##concept Tp1_> \
+ struct concept_checking_##tv1##tv2##tv3##tv4##concept { }; \
+ typedef concept_checking_##tv1##tv2##tv3##tv4##concept< \
+ BOOST_FPTR ns::concept<tv1,tv2,tv3,tv4>::constraints> \
+ concept_checking_typedef_##tv1##tv2##tv3##tv4##concept
+
+// NOTE: The BOOST_CLASS_REQUIRES (with an 'S' at the end) is deprecated.
+
+// The BOOST_CLASS_REQUIRES macros use function pointers as
+// template parameters, which VC++ does not support.
+
+#if defined(BOOST_NO_FUNCTION_PTR_TEMPLATE_PARAMETERS)
+
+#define BOOST_CLASS_REQUIRES(type_var, concept)
+#define BOOST_CLASS_REQUIRES2(type_var1, type_var2, concept)
+#define BOOST_CLASS_REQUIRES3(type_var1, type_var2, type_var3, concept)
+#define BOOST_CLASS_REQUIRES4(type_var1, type_var2, type_var3, type_var4, concept)
+
+#else
+
+#define BOOST_CLASS_REQUIRES(type_var, concept) \
+ typedef void (concept <type_var>::* func##type_var##concept)(); \
+ template <func##type_var##concept Tp1_> \
+ struct concept_checking_##type_var##concept { }; \
+ typedef concept_checking_##type_var##concept< \
+ BOOST_FPTR concept <type_var>::constraints> \
+ concept_checking_typedef_##type_var##concept
+
+#define BOOST_CLASS_REQUIRES2(type_var1, type_var2, concept) \
+ typedef void (concept <type_var1,type_var2>::* func##type_var1##type_var2##concept)(); \
+ template <func##type_var1##type_var2##concept Tp1_> \
+ struct concept_checking_##type_var1##type_var2##concept { }; \
+ typedef concept_checking_##type_var1##type_var2##concept< \
+ BOOST_FPTR concept <type_var1,type_var2>::constraints> \
+ concept_checking_typedef_##type_var1##type_var2##concept
+
+#define BOOST_CLASS_REQUIRES3(type_var1, type_var2, type_var3, concept) \
+ typedef void (concept <type_var1,type_var2,type_var3>::* func##type_var1##type_var2##type_var3##concept)(); \
+ template <func##type_var1##type_var2##type_var3##concept Tp1_> \
+ struct concept_checking_##type_var1##type_var2##type_var3##concept { }; \
+ typedef concept_checking_##type_var1##type_var2##type_var3##concept< \
+ BOOST_FPTR concept <type_var1,type_var2,type_var3>::constraints> \
+ concept_checking_typedef_##type_var1##type_var2##type_var3##concept
+
+#define BOOST_CLASS_REQUIRES4(type_var1, type_var2, type_var3, type_var4, concept) \
+ typedef void (concept <type_var1,type_var2,type_var3,type_var4>::* func##type_var1##type_var2##type_var3##type_var4##concept)(); \
+ template <func##type_var1##type_var2##type_var3##type_var4##concept Tp1_> \
+ struct concept_checking_##type_var1##type_var2##type_var3##type_var4##concept { }; \
+ typedef concept_checking_##type_var1##type_var2##type_var3##type_var4##concept< \
+ BOOST_FPTR concept <type_var1,type_var2,type_var3,type_var4>::constraints> \
+ concept_checking_typedef_##type_var1##type_var2##type_var3##type_var4##concept
+
+
+#endif
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+template <class T, class U>
+struct require_same { };
+
+template <class T>
+struct require_same<T,T> { typedef T type; };
+#else
+// This version does not perform checking, but will not do any harm.
+template <class T, class U>
+struct require_same { typedef T type; };
+#endif
+
+ template <class T>
+ struct IntegerConcept {
+ void constraints() {
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ x.error_type_must_be_an_integer_type();
+#endif
+ }
+ T x;
+ };
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ template <> struct IntegerConcept<short> { void constraints() {} };
+ template <> struct IntegerConcept<unsigned short> { void constraints() {} };
+ template <> struct IntegerConcept<int> { void constraints() {} };
+ template <> struct IntegerConcept<unsigned int> { void constraints() {} };
+ template <> struct IntegerConcept<long> { void constraints() {} };
+ template <> struct IntegerConcept<unsigned long> { void constraints() {} };
+ // etc.
+#endif
+
+ template <class T>
+ struct SignedIntegerConcept {
+ void constraints() {
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ x.error_type_must_be_a_signed_integer_type();
+#endif
+ }
+ T x;
+ };
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ template <> struct SignedIntegerConcept<short> { void constraints() {} };
+ template <> struct SignedIntegerConcept<int> { void constraints() {} };
+ template <> struct SignedIntegerConcept<long> { void constraints() {} };
+# if defined(BOOST_HAS_LONG_LONG)
+ template <> struct SignedIntegerConcept< ::boost::long_long_type> { void constraints() {} };
+# endif
+ // etc.
+#endif
+
+ template <class T>
+ struct UnsignedIntegerConcept {
+ void constraints() {
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ x.error_type_must_be_an_unsigned_integer_type();
+#endif
+ }
+ T x;
+ };
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ template <> struct UnsignedIntegerConcept<unsigned short>
+ { void constraints() {} };
+ template <> struct UnsignedIntegerConcept<unsigned int>
+ { void constraints() {} };
+ template <> struct UnsignedIntegerConcept<unsigned long>
+ { void constraints() {} };
+ // etc.
+#endif
+
+ //===========================================================================
+ // Basic Concepts
+
+ template <class TT>
+ struct DefaultConstructibleConcept
+ {
+ void constraints() {
+ TT a; // require default constructor
+ ignore_unused_variable_warning(a);
+ }
+ };
+
+ template <class TT>
+ struct AssignableConcept
+ {
+ void constraints() {
+#if !defined(_ITERATOR_) // back_insert_iterator broken for VC++ STL
+ a = a; // require assignment operator
+#endif
+ const_constraints(a);
+ }
+ void const_constraints(const TT& b) {
+#if !defined(_ITERATOR_) // back_insert_iterator broken for VC++ STL
+ a = b; // const required for argument to assignment
+#endif
+ }
+ TT a;
+ };
+
+ template <class TT>
+ struct CopyConstructibleConcept
+ {
+ void constraints() {
+ TT a(b); // require copy constructor
+ TT* ptr = &a; // require address of operator
+ const_constraints(a);
+ ignore_unused_variable_warning(ptr);
+ }
+ void const_constraints(const TT& a) {
+ TT c(a); // require const copy constructor
+ const TT* ptr = &a; // require const address of operator
+ ignore_unused_variable_warning(c);
+ ignore_unused_variable_warning(ptr);
+ }
+ TT b;
+ };
+
+ // The SGI STL version of Assignable requires copy constructor and operator=
+ template <class TT>
+ struct SGIAssignableConcept
+ {
+ void constraints() {
+ TT b(a);
+#if !defined(_ITERATOR_) // back_insert_iterator broken for VC++ STL
+ a = a; // require assignment operator
+#endif
+ const_constraints(a);
+ ignore_unused_variable_warning(b);
+ }
+ void const_constraints(const TT& b) {
+ TT c(b);
+#if !defined(_ITERATOR_) // back_insert_iterator broken for VC++ STL
+ a = b; // const required for argument to assignment
+#endif
+ ignore_unused_variable_warning(c);
+ }
+ TT a;
+ };
+
+ template <class X, class Y>
+ struct ConvertibleConcept
+ {
+ void constraints() {
+ Y y = x;
+ ignore_unused_variable_warning(y);
+ }
+ X x;
+ };
+
+ // The C++ standard requirements for many concepts talk about return
+ // types that must be "convertible to bool". The problem with this
+ // requirement is that it leaves the door open for evil proxies that
+ // define things like operator|| with strange return types. Two
+ // possible solutions are:
+ // 1) require the return type to be exactly bool
+ // 2) stay with convertible to bool, and also
+ // specify stuff about all the logical operators.
+ // For now we just test for convertible to bool.
+ template <class TT>
+ void require_boolean_expr(const TT& t) {
+ bool x = t;
+ ignore_unused_variable_warning(x);
+ }
+
+ template <class TT>
+ struct EqualityComparableConcept
+ {
+ void constraints() {
+ require_boolean_expr(a == b);
+ require_boolean_expr(a != b);
+ }
+ TT a, b;
+ };
+
+ template <class TT>
+ struct LessThanComparableConcept
+ {
+ void constraints() {
+ require_boolean_expr(a < b);
+ }
+ TT a, b;
+ };
+
+ // This is equivalent to SGI STL's LessThanComparable.
+ template <class TT>
+ struct ComparableConcept
+ {
+ void constraints() {
+ require_boolean_expr(a < b);
+ require_boolean_expr(a > b);
+ require_boolean_expr(a <= b);
+ require_boolean_expr(a >= b);
+ }
+ TT a, b;
+ };
+
+#define BOOST_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(OP,NAME) \
+ template <class First, class Second> \
+ struct NAME { \
+ void constraints() { (void)constraints_(); } \
+ bool constraints_() { \
+ return a OP b; \
+ } \
+ First a; \
+ Second b; \
+ }
+
+#define BOOST_DEFINE_BINARY_OPERATOR_CONSTRAINT(OP,NAME) \
+ template <class Ret, class First, class Second> \
+ struct NAME { \
+ void constraints() { (void)constraints_(); } \
+ Ret constraints_() { \
+ return a OP b; \
+ } \
+ First a; \
+ Second b; \
+ }
+
+ BOOST_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(==, EqualOpConcept);
+ BOOST_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(!=, NotEqualOpConcept);
+ BOOST_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(<, LessThanOpConcept);
+ BOOST_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(<=, LessEqualOpConcept);
+ BOOST_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(>, GreaterThanOpConcept);
+ BOOST_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(>=, GreaterEqualOpConcept);
+
+ BOOST_DEFINE_BINARY_OPERATOR_CONSTRAINT(+, PlusOpConcept);
+ BOOST_DEFINE_BINARY_OPERATOR_CONSTRAINT(*, TimesOpConcept);
+ BOOST_DEFINE_BINARY_OPERATOR_CONSTRAINT(/, DivideOpConcept);
+ BOOST_DEFINE_BINARY_OPERATOR_CONSTRAINT(-, SubtractOpConcept);
+ BOOST_DEFINE_BINARY_OPERATOR_CONSTRAINT(%, ModOpConcept);
+
+ //===========================================================================
+ // Function Object Concepts
+
+ template <class Func, class Return>
+ struct GeneratorConcept
+ {
+ void constraints() {
+ const Return& r = f(); // require operator() member function
+ ignore_unused_variable_warning(r);
+ }
+ Func f;
+ };
+
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ template <class Func>
+ struct GeneratorConcept<Func,void>
+ {
+ void constraints() {
+ f(); // require operator() member function
+ }
+ Func f;
+ };
+#endif
+
+ template <class Func, class Return, class Arg>
+ struct UnaryFunctionConcept
+ {
+ // required in case any of our template args are const-qualified:
+ UnaryFunctionConcept();
+
+ void constraints() {
+ r = f(arg); // require operator()
+ }
+ Func f;
+ Arg arg;
+ Return r;
+ };
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ template <class Func, class Arg>
+ struct UnaryFunctionConcept<Func, void, Arg> {
+ void constraints() {
+ f(arg); // require operator()
+ }
+ Func f;
+ Arg arg;
+ };
+#endif
+
+ template <class Func, class Return, class First, class Second>
+ struct BinaryFunctionConcept
+ {
+ void constraints() {
+ r = f(first, second); // require operator()
+ }
+ Func f;
+ First first;
+ Second second;
+ Return r;
+ };
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ template <class Func, class First, class Second>
+ struct BinaryFunctionConcept<Func, void, First, Second>
+ {
+ void constraints() {
+ f(first, second); // require operator()
+ }
+ Func f;
+ First first;
+ Second second;
+ };
+#endif
+
+ template <class Func, class Arg>
+ struct UnaryPredicateConcept
+ {
+ void constraints() {
+ require_boolean_expr(f(arg)); // require operator() returning bool
+ }
+ Func f;
+ Arg arg;
+ };
+
+ template <class Func, class First, class Second>
+ struct BinaryPredicateConcept
+ {
+ void constraints() {
+ require_boolean_expr(f(a, b)); // require operator() returning bool
+ }
+ Func f;
+ First a;
+ Second b;
+ };
+
+ // use this when functor is used inside a container class like std::set
+ template <class Func, class First, class Second>
+ struct Const_BinaryPredicateConcept {
+ void constraints() {
+ const_constraints(f);
+ }
+ void const_constraints(const Func& fun) {
+ function_requires<BinaryPredicateConcept<Func, First, Second> >();
+ // operator() must be a const member function
+ require_boolean_expr(fun(a, b));
+ }
+ Func f;
+ First a;
+ Second b;
+ };
+
+ template <class Func, class Return>
+ struct AdaptableGeneratorConcept
+ {
+ void constraints() {
+ typedef typename Func::result_type result_type;
+ BOOST_STATIC_ASSERT((is_convertible<result_type, Return>::value));
+ function_requires< GeneratorConcept<Func, result_type> >();
+ }
+ };
+
+ template <class Func, class Return, class Arg>
+ struct AdaptableUnaryFunctionConcept
+ {
+ void constraints() {
+ typedef typename Func::argument_type argument_type;
+ typedef typename Func::result_type result_type;
+ BOOST_STATIC_ASSERT((is_convertible<result_type, Return>::value));
+ BOOST_STATIC_ASSERT((is_convertible<Arg, argument_type>::value));
+ function_requires< UnaryFunctionConcept<Func, result_type, argument_type> >();
+ }
+ };
+
+ template <class Func, class Return, class First, class Second>
+ struct AdaptableBinaryFunctionConcept
+ {
+ void constraints() {
+ typedef typename Func::first_argument_type first_argument_type;
+ typedef typename Func::second_argument_type second_argument_type;
+ typedef typename Func::result_type result_type;
+ BOOST_STATIC_ASSERT((is_convertible<result_type, Return>::value));
+ BOOST_STATIC_ASSERT((is_convertible<First, first_argument_type>::value));
+ BOOST_STATIC_ASSERT((is_convertible<Second, second_argument_type>::value));
+ function_requires< BinaryFunctionConcept<Func, result_type,
+ first_argument_type, second_argument_type> >();
+ }
+ };
+
+ template <class Func, class Arg>
+ struct AdaptablePredicateConcept
+ {
+ void constraints() {
+ function_requires< UnaryPredicateConcept<Func, Arg> >();
+ function_requires< AdaptableUnaryFunctionConcept<Func, bool, Arg> >();
+ }
+ };
+
+ template <class Func, class First, class Second>
+ struct AdaptableBinaryPredicateConcept
+ {
+ void constraints() {
+ function_requires< BinaryPredicateConcept<Func, First, Second> >();
+ function_requires< AdaptableBinaryFunctionConcept<Func, bool, First, Second> >();
+ }
+ };
+
+ //===========================================================================
+ // Iterator Concepts
+
+ template <class TT>
+ struct InputIteratorConcept
+ {
+ void constraints() {
+ function_requires< AssignableConcept<TT> >();
+ function_requires< EqualityComparableConcept<TT> >();
+ TT j(i);
+ (void)*i; // require dereference operator
+#ifndef BOOST_NO_STD_ITERATOR_TRAITS
+ // require iterator_traits typedef's
+ typedef typename std::iterator_traits<TT>::difference_type D;
+ // Hmm, the following is a bit fragile
+ //function_requires< SignedIntegerConcept<D> >();
+ typedef typename std::iterator_traits<TT>::reference R;
+ typedef typename std::iterator_traits<TT>::pointer P;
+ typedef typename std::iterator_traits<TT>::iterator_category C;
+ function_requires< ConvertibleConcept<C, std::input_iterator_tag> >();
+#endif
+ ++j; // require preincrement operator
+ i++; // require postincrement operator
+ }
+ TT i;
+ };
+
+ template <class TT, class ValueT>
+ struct OutputIteratorConcept
+ {
+ void constraints() {
+ function_requires< AssignableConcept<TT> >();
+ ++i; // require preincrement operator
+ i++; // require postincrement operator
+ *i++ = t; // require postincrement and assignment
+ }
+ TT i, j;
+ ValueT t;
+ };
+
+ template <class TT>
+ struct ForwardIteratorConcept
+ {
+ void constraints() {
+ function_requires< InputIteratorConcept<TT> >();
+#ifndef BOOST_NO_STD_ITERATOR_TRAITS
+ typedef typename std::iterator_traits<TT>::iterator_category C;
+ function_requires< ConvertibleConcept<C, std::forward_iterator_tag> >();
+ typedef typename std::iterator_traits<TT>::reference reference;
+ reference r = *i;
+ ignore_unused_variable_warning(r);
+#endif
+ }
+ TT i;
+ };
+
+ template <class TT>
+ struct Mutable_ForwardIteratorConcept
+ {
+ void constraints() {
+ function_requires< ForwardIteratorConcept<TT> >();
+ *i++ = *i; // require postincrement and assignment
+ }
+ TT i;
+ };
+
+ template <class TT>
+ struct BidirectionalIteratorConcept
+ {
+ void constraints() {
+ function_requires< ForwardIteratorConcept<TT> >();
+#ifndef BOOST_NO_STD_ITERATOR_TRAITS
+ typedef typename std::iterator_traits<TT>::iterator_category C;
+ function_requires< ConvertibleConcept<C,
+ std::bidirectional_iterator_tag> >();
+#endif
+ --i; // require predecrement operator
+ i--; // require postdecrement operator
+ }
+ TT i;
+ };
+
+ template <class TT>
+ struct Mutable_BidirectionalIteratorConcept
+ {
+ void constraints() {
+ function_requires< BidirectionalIteratorConcept<TT> >();
+ function_requires< Mutable_ForwardIteratorConcept<TT> >();
+ *i-- = *i; // require postdecrement and assignment
+ }
+ TT i;
+ };
+
+
+ template <class TT>
+ struct RandomAccessIteratorConcept
+ {
+ void constraints() {
+ function_requires< BidirectionalIteratorConcept<TT> >();
+ function_requires< ComparableConcept<TT> >();
+#ifndef BOOST_NO_STD_ITERATOR_TRAITS
+ typedef typename std::iterator_traits<TT>::iterator_category C;
+ function_requires< ConvertibleConcept< C,
+ std::random_access_iterator_tag> >();
+ typedef typename std::iterator_traits<TT>::reference R;
+#endif
+
+ i += n; // require assignment addition operator
+ i = i + n; i = n + i; // require addition with difference type
+ i -= n; // require assignment subtraction operator
+ i = i - n; // require subtraction with difference type
+ n = i - j; // require difference operator
+ (void)i[n]; // require element access operator
+ }
+ TT a, b;
+ TT i, j;
+#ifndef BOOST_NO_STD_ITERATOR_TRAITS
+ typename std::iterator_traits<TT>::difference_type n;
+#else
+ std::ptrdiff_t n;
+#endif
+ };
+
+ template <class TT>
+ struct Mutable_RandomAccessIteratorConcept
+ {
+ void constraints() {
+ function_requires< RandomAccessIteratorConcept<TT> >();
+ function_requires< Mutable_BidirectionalIteratorConcept<TT> >();
+ i[n] = *i; // require element access and assignment
+ }
+ TT i;
+#ifndef BOOST_NO_STD_ITERATOR_TRAITS
+ typename std::iterator_traits<TT>::difference_type n;
+#else
+ std::ptrdiff_t n;
+#endif
+ };
+
+ //===========================================================================
+ // Container Concepts
+
+ template <class Container>
+ struct ContainerConcept
+ {
+ typedef typename Container::value_type value_type;
+ typedef typename Container::difference_type difference_type;
+ typedef typename Container::size_type size_type;
+ typedef typename Container::const_reference const_reference;
+ typedef typename Container::const_pointer const_pointer;
+ typedef typename Container::const_iterator const_iterator;
+
+ void constraints() {
+ function_requires< InputIteratorConcept<const_iterator> >();
+ function_requires< AssignableConcept<Container> >();
+ const_constraints(c);
+ }
+ void const_constraints(const Container& cc) {
+ i = cc.begin();
+ i = cc.end();
+ n = cc.size();
+ n = cc.max_size();
+ b = cc.empty();
+ }
+ Container c;
+ bool b;
+ const_iterator i;
+ size_type n;
+ };
+
+ template <class Container>
+ struct Mutable_ContainerConcept
+ {
+ typedef typename Container::value_type value_type;
+ typedef typename Container::reference reference;
+ typedef typename Container::iterator iterator;
+ typedef typename Container::pointer pointer;
+
+ void constraints() {
+ function_requires< ContainerConcept<Container> >();
+ function_requires< AssignableConcept<value_type> >();
+ function_requires< InputIteratorConcept<iterator> >();
+
+ i = c.begin();
+ i = c.end();
+ c.swap(c2);
+ }
+ iterator i;
+ Container c, c2;
+ };
+
+ template <class ForwardContainer>
+ struct ForwardContainerConcept
+ {
+ void constraints() {
+ function_requires< ContainerConcept<ForwardContainer> >();
+ typedef typename ForwardContainer::const_iterator const_iterator;
+ function_requires< ForwardIteratorConcept<const_iterator> >();
+ }
+ };
+
+ template <class ForwardContainer>
+ struct Mutable_ForwardContainerConcept
+ {
+ void constraints() {
+ function_requires< ForwardContainerConcept<ForwardContainer> >();
+ function_requires< Mutable_ContainerConcept<ForwardContainer> >();
+ typedef typename ForwardContainer::iterator iterator;
+ function_requires< Mutable_ForwardIteratorConcept<iterator> >();
+ }
+ };
+
+ template <class ReversibleContainer>
+ struct ReversibleContainerConcept
+ {
+ typedef typename ReversibleContainer::const_iterator const_iterator;
+ typedef typename ReversibleContainer::const_reverse_iterator
+ const_reverse_iterator;
+
+ void constraints() {
+ function_requires< ForwardContainerConcept<ReversibleContainer> >();
+ function_requires< BidirectionalIteratorConcept<const_iterator> >();
+ function_requires<
+ BidirectionalIteratorConcept<const_reverse_iterator> >();
+ const_constraints(c);
+ }
+ void const_constraints(const ReversibleContainer& cc) {
+ const_reverse_iterator i = cc.rbegin();
+ i = cc.rend();
+ }
+ ReversibleContainer c;
+ };
+
+ template <class ReversibleContainer>
+ struct Mutable_ReversibleContainerConcept
+ {
+ typedef typename ReversibleContainer::iterator iterator;
+ typedef typename ReversibleContainer::reverse_iterator reverse_iterator;
+
+ void constraints() {
+ function_requires< ReversibleContainerConcept<ReversibleContainer> >();
+ function_requires<
+ Mutable_ForwardContainerConcept<ReversibleContainer> >();
+ function_requires< Mutable_BidirectionalIteratorConcept<iterator> >();
+ function_requires<
+ Mutable_BidirectionalIteratorConcept<reverse_iterator> >();
+
+ reverse_iterator i = c.rbegin();
+ i = c.rend();
+ }
+ ReversibleContainer c;
+ };
+
+ template <class RandomAccessContainer>
+ struct RandomAccessContainerConcept
+ {
+ typedef typename RandomAccessContainer::size_type size_type;
+ typedef typename RandomAccessContainer::const_reference const_reference;
+ typedef typename RandomAccessContainer::const_iterator const_iterator;
+ typedef typename RandomAccessContainer::const_reverse_iterator
+ const_reverse_iterator;
+
+ void constraints() {
+ function_requires< ReversibleContainerConcept<RandomAccessContainer> >();
+ function_requires< RandomAccessIteratorConcept<const_iterator> >();
+ function_requires<
+ RandomAccessIteratorConcept<const_reverse_iterator> >();
+
+ const_constraints(c);
+ }
+ void const_constraints(const RandomAccessContainer& cc) {
+ const_reference r = cc[n];
+ ignore_unused_variable_warning(r);
+ }
+ RandomAccessContainer c;
+ size_type n;
+ };
+
+ template <class RandomAccessContainer>
+ struct Mutable_RandomAccessContainerConcept
+ {
+ typedef typename RandomAccessContainer::size_type size_type;
+ typedef typename RandomAccessContainer::reference reference;
+ typedef typename RandomAccessContainer::iterator iterator;
+ typedef typename RandomAccessContainer::reverse_iterator reverse_iterator;
+
+ void constraints() {
+ function_requires<
+ RandomAccessContainerConcept<RandomAccessContainer> >();
+ function_requires<
+ Mutable_ReversibleContainerConcept<RandomAccessContainer> >();
+ function_requires< Mutable_RandomAccessIteratorConcept<iterator> >();
+ function_requires<
+ Mutable_RandomAccessIteratorConcept<reverse_iterator> >();
+
+ reference r = c[i];
+ ignore_unused_variable_warning(r);
+ }
+ size_type i;
+ RandomAccessContainer c;
+ };
+
+ // A Sequence is inherently mutable
+ template <class Sequence>
+ struct SequenceConcept
+ {
+
+ typedef typename Sequence::reference reference;
+ typedef typename Sequence::const_reference const_reference;
+
+ void constraints() {
+ // Matt Austern's book puts DefaultConstructible here, the C++
+ // standard places it in Container
+ // function_requires< DefaultConstructible<Sequence> >();
+ function_requires< Mutable_ForwardContainerConcept<Sequence> >();
+ function_requires< DefaultConstructibleConcept<Sequence> >();
+
+ Sequence
+ c(n),
+ c2(n, t),
+ c3(first, last);
+
+ c.insert(p, t);
+ c.insert(p, n, t);
+ c.insert(p, first, last);
+
+ c.erase(p);
+ c.erase(p, q);
+
+ reference r = c.front();
+
+ ignore_unused_variable_warning(c);
+ ignore_unused_variable_warning(c2);
+ ignore_unused_variable_warning(c3);
+ ignore_unused_variable_warning(r);
+ const_constraints(c);
+ }
+ void const_constraints(const Sequence& c) {
+ const_reference r = c.front();
+ ignore_unused_variable_warning(r);
+ }
+ typename Sequence::value_type t;
+ typename Sequence::size_type n;
+ typename Sequence::value_type* first, *last;
+ typename Sequence::iterator p, q;
+ };
+
+ template <class FrontInsertionSequence>
+ struct FrontInsertionSequenceConcept
+ {
+ void constraints() {
+ function_requires< SequenceConcept<FrontInsertionSequence> >();
+
+ c.push_front(t);
+ c.pop_front();
+ }
+ FrontInsertionSequence c;
+ typename FrontInsertionSequence::value_type t;
+ };
+
+ template <class BackInsertionSequence>
+ struct BackInsertionSequenceConcept
+ {
+ typedef typename BackInsertionSequence::reference reference;
+ typedef typename BackInsertionSequence::const_reference const_reference;
+
+ void constraints() {
+ function_requires< SequenceConcept<BackInsertionSequence> >();
+
+ c.push_back(t);
+ c.pop_back();
+ reference r = c.back();
+ ignore_unused_variable_warning(r);
+ }
+ void const_constraints(const BackInsertionSequence& cc) {
+ const_reference r = cc.back();
+ ignore_unused_variable_warning(r);
+ };
+ BackInsertionSequence c;
+ typename BackInsertionSequence::value_type t;
+ };
+
+ template <class AssociativeContainer>
+ struct AssociativeContainerConcept
+ {
+ void constraints() {
+ function_requires< ForwardContainerConcept<AssociativeContainer> >();
+ function_requires< DefaultConstructibleConcept<AssociativeContainer> >();
+
+ i = c.find(k);
+ r = c.equal_range(k);
+ c.erase(k);
+ c.erase(i);
+ c.erase(r.first, r.second);
+ const_constraints(c);
+ }
+ void const_constraints(const AssociativeContainer& cc) {
+ ci = cc.find(k);
+ n = cc.count(k);
+ cr = cc.equal_range(k);
+ }
+ typedef typename AssociativeContainer::iterator iterator;
+ typedef typename AssociativeContainer::const_iterator const_iterator;
+
+ AssociativeContainer c;
+ iterator i;
+ std::pair<iterator,iterator> r;
+ const_iterator ci;
+ std::pair<const_iterator,const_iterator> cr;
+ typename AssociativeContainer::key_type k;
+ typename AssociativeContainer::size_type n;
+ };
+
+ template <class UniqueAssociativeContainer>
+ struct UniqueAssociativeContainerConcept
+ {
+ void constraints() {
+ function_requires< AssociativeContainerConcept<UniqueAssociativeContainer> >();
+
+ UniqueAssociativeContainer c(first, last);
+
+ pos_flag = c.insert(t);
+ c.insert(first, last);
+
+ ignore_unused_variable_warning(c);
+ }
+ std::pair<typename UniqueAssociativeContainer::iterator, bool> pos_flag;
+ typename UniqueAssociativeContainer::value_type t;
+ typename UniqueAssociativeContainer::value_type* first, *last;
+ };
+
+ template <class MultipleAssociativeContainer>
+ struct MultipleAssociativeContainerConcept
+ {
+ void constraints() {
+ function_requires< AssociativeContainerConcept<MultipleAssociativeContainer> >();
+
+ MultipleAssociativeContainer c(first, last);
+
+ pos = c.insert(t);
+ c.insert(first, last);
+
+ ignore_unused_variable_warning(c);
+ ignore_unused_variable_warning(pos);
+ }
+ typename MultipleAssociativeContainer::iterator pos;
+ typename MultipleAssociativeContainer::value_type t;
+ typename MultipleAssociativeContainer::value_type* first, *last;
+ };
+
+ template <class SimpleAssociativeContainer>
+ struct SimpleAssociativeContainerConcept
+ {
+ void constraints() {
+ function_requires< AssociativeContainerConcept<SimpleAssociativeContainer> >();
+ typedef typename SimpleAssociativeContainer::key_type key_type;
+ typedef typename SimpleAssociativeContainer::value_type value_type;
+ typedef typename require_same<key_type, value_type>::type req;
+ }
+ };
+
+ template <class SimpleAssociativeContainer>
+ struct PairAssociativeContainerConcept
+ {
+ void constraints() {
+ function_requires< AssociativeContainerConcept<SimpleAssociativeContainer> >();
+ typedef typename SimpleAssociativeContainer::key_type key_type;
+ typedef typename SimpleAssociativeContainer::value_type value_type;
+ typedef typename SimpleAssociativeContainer::mapped_type mapped_type;
+ typedef std::pair<const key_type, mapped_type> required_value_type;
+ typedef typename require_same<value_type, required_value_type>::type req;
+ }
+ };
+
+ template <class SortedAssociativeContainer>
+ struct SortedAssociativeContainerConcept
+ {
+ void constraints() {
+ function_requires< AssociativeContainerConcept<SortedAssociativeContainer> >();
+ function_requires< ReversibleContainerConcept<SortedAssociativeContainer> >();
+
+ SortedAssociativeContainer
+ c(kc),
+ c2(first, last),
+ c3(first, last, kc);
+
+ p = c.upper_bound(k);
+ p = c.lower_bound(k);
+ r = c.equal_range(k);
+
+ c.insert(p, t);
+
+ ignore_unused_variable_warning(c);
+ ignore_unused_variable_warning(c2);
+ ignore_unused_variable_warning(c3);
+ }
+ void const_constraints(const SortedAssociativeContainer& c) {
+ kc = c.key_comp();
+ vc = c.value_comp();
+
+ cp = c.upper_bound(k);
+ cp = c.lower_bound(k);
+ cr = c.equal_range(k);
+ }
+ typename SortedAssociativeContainer::key_compare kc;
+ typename SortedAssociativeContainer::value_compare vc;
+ typename SortedAssociativeContainer::value_type t;
+ typename SortedAssociativeContainer::key_type k;
+ typedef typename SortedAssociativeContainer::iterator iterator;
+ typedef typename SortedAssociativeContainer::const_iterator const_iterator;
+ iterator p;
+ const_iterator cp;
+ std::pair<iterator,iterator> r;
+ std::pair<const_iterator,const_iterator> cr;
+ typename SortedAssociativeContainer::value_type* first, *last;
+ };
+
+ // HashedAssociativeContainer
+
+} // namespace boost
+
+#endif // BOOST_CONCEPT_CHECKS_HPP
+
diff --git a/boost/boost/config.hpp b/boost/boost/config.hpp
new file mode 100644
index 00000000000..055a27855b1
--- /dev/null
+++ b/boost/boost/config.hpp
@@ -0,0 +1,70 @@
+// Boost config.hpp configuration header file ------------------------------//
+
+// (C) Copyright John Maddock 2002.
+// 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)
+
+// See http://www.boost.org/libs/config for most recent version.
+
+// Boost config.hpp policy and rationale documentation has been moved to
+// http://www.boost.org/libs/config
+//
+// CAUTION: This file is intended to be completely stable -
+// DO NOT MODIFY THIS FILE!
+//
+
+#ifndef BOOST_CONFIG_HPP
+#define BOOST_CONFIG_HPP
+
+// if we don't have a user config, then use the default location:
+#if !defined(BOOST_USER_CONFIG) && !defined(BOOST_NO_USER_CONFIG)
+# define BOOST_USER_CONFIG <boost/config/user.hpp>
+#endif
+// include it first:
+#ifdef BOOST_USER_CONFIG
+# include BOOST_USER_CONFIG
+#endif
+
+// if we don't have a compiler config set, try and find one:
+#if !defined(BOOST_COMPILER_CONFIG) && !defined(BOOST_NO_COMPILER_CONFIG) && !defined(BOOST_NO_CONFIG)
+# include <boost/config/select_compiler_config.hpp>
+#endif
+// if we have a compiler config, include it now:
+#ifdef BOOST_COMPILER_CONFIG
+# include BOOST_COMPILER_CONFIG
+#endif
+
+// if we don't have a std library config set, try and find one:
+#if !defined(BOOST_STDLIB_CONFIG) && !defined(BOOST_NO_STDLIB_CONFIG) && !defined(BOOST_NO_CONFIG)
+# include <boost/config/select_stdlib_config.hpp>
+#endif
+// if we have a std library config, include it now:
+#ifdef BOOST_STDLIB_CONFIG
+# include BOOST_STDLIB_CONFIG
+#endif
+
+// if we don't have a platform config set, try and find one:
+#if !defined(BOOST_PLATFORM_CONFIG) && !defined(BOOST_NO_PLATFORM_CONFIG) && !defined(BOOST_NO_CONFIG)
+# include <boost/config/select_platform_config.hpp>
+#endif
+// if we have a platform config, include it now:
+#ifdef BOOST_PLATFORM_CONFIG
+# include BOOST_PLATFORM_CONFIG
+#endif
+
+// get config suffix code:
+#include <boost/config/suffix.hpp>
+
+#endif // BOOST_CONFIG_HPP
+
+
+
+
+
+
+
+
+
+
+
diff --git a/boost/boost/config/abi/borland_prefix.hpp b/boost/boost/config/abi/borland_prefix.hpp
new file mode 100644
index 00000000000..49f42494999
--- /dev/null
+++ b/boost/boost/config/abi/borland_prefix.hpp
@@ -0,0 +1,27 @@
+// (C) Copyright John Maddock 2003.
+// 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)
+
+// for C++ Builder the following options effect the ABI:
+//
+// -b (on or off - effect emum sizes)
+// -Vx (on or off - empty members)
+// -Ve (on or off - empty base classes)
+// -aX (alignment - 5 options).
+// -pX (Calling convention - 4 options)
+// -VmX (member pointer size and layout - 5 options)
+// -VC (on or off, changes name mangling)
+// -Vl (on or off, changes struct layout).
+
+// In addition the following warnings are sufficiently annoying (and
+// unfixable) to have them turned off by default:
+//
+// 8027 - functions containing [for|while] loops are not expanded inline
+// 8026 - functions taking class by value arguments are not expanded inline
+
+#pragma nopushoptwarn
+# pragma option push -Vx -Ve -a8 -b -pc -Vmv -VC- -Vl- -w-8027 -w-8026
+
+
+
diff --git a/boost/boost/config/abi/borland_suffix.hpp b/boost/boost/config/abi/borland_suffix.hpp
new file mode 100644
index 00000000000..940535f3819
--- /dev/null
+++ b/boost/boost/config/abi/borland_suffix.hpp
@@ -0,0 +1,12 @@
+// (C) Copyright John Maddock 2003.
+// 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)
+
+# pragma option pop
+#pragma nopushoptwarn
+
+
+
+
+
diff --git a/boost/boost/config/abi/msvc_prefix.hpp b/boost/boost/config/abi/msvc_prefix.hpp
new file mode 100644
index 00000000000..3d3905c2148
--- /dev/null
+++ b/boost/boost/config/abi/msvc_prefix.hpp
@@ -0,0 +1,8 @@
+// (C) Copyright John Maddock 2003.
+// 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)
+
+#pragma pack(push,8)
+
+
diff --git a/boost/boost/config/abi/msvc_suffix.hpp b/boost/boost/config/abi/msvc_suffix.hpp
new file mode 100644
index 00000000000..a64d783eb0f
--- /dev/null
+++ b/boost/boost/config/abi/msvc_suffix.hpp
@@ -0,0 +1,8 @@
+// (C) Copyright John Maddock 2003.
+// 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)
+
+#pragma pack(pop)
+
+
diff --git a/boost/boost/config/abi_prefix.hpp b/boost/boost/config/abi_prefix.hpp
new file mode 100644
index 00000000000..1733dc036b6
--- /dev/null
+++ b/boost/boost/config/abi_prefix.hpp
@@ -0,0 +1,20 @@
+// abi_prefix header -------------------------------------------------------//
+
+// © Copyright John Maddock 2003
+
+// 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).
+
+#ifndef BOOST_CONFIG_ABI_PREFIX_HPP
+# define BOOST_CONFIG_ABI_PREFIX_HPP
+#else
+# error double inclusion of header boost/config/abi_prefix.hpp is an error
+#endif
+
+#include <boost/config.hpp>
+
+// this must occur after all other includes and before any code appears:
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
diff --git a/boost/boost/config/abi_suffix.hpp b/boost/boost/config/abi_suffix.hpp
new file mode 100644
index 00000000000..6339da63114
--- /dev/null
+++ b/boost/boost/config/abi_suffix.hpp
@@ -0,0 +1,23 @@
+// abi_sufffix header -------------------------------------------------------//
+
+// © Copyright John Maddock 2003
+
+// 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 header should be #included AFTER code that was preceded by a #include
+// <boost/config/abi_prefix.hpp>.
+
+#ifndef BOOST_CONFIG_ABI_PREFIX_HPP
+# error Header boost/config/abi_prefix.hpp must only be used after boost/config/abi_prefix.hpp
+#else
+# undef BOOST_CONFIG_ABI_PREFIX_HPP
+#endif
+
+// the suffix header occurs after all of our code:
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+
diff --git a/boost/boost/config/auto_link.hpp b/boost/boost/config/auto_link.hpp
new file mode 100644
index 00000000000..f4910427556
--- /dev/null
+++ b/boost/boost/config/auto_link.hpp
@@ -0,0 +1,363 @@
+// (C) Copyright John Maddock 2003.
+// 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)
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE auto_link.hpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: Automatic library inclusion for Borland/Microsoft compilers.
+ */
+
+/*************************************************************************
+
+USAGE:
+~~~~~~
+
+Before including this header you must define one or more of define the following macros:
+
+BOOST_LIB_NAME: Required: A string containing the basename of the library,
+ for example boost_regex.
+BOOST_LIB_TOOLSET: Optional: the base name of the toolset.
+BOOST_DYN_LINK: Optional: when set link to dll rather than static library.
+BOOST_LIB_DIAGNOSTIC: Optional: when set the header will print out the name
+ of the library selected (useful for debugging).
+BOOST_AUTO_LINK_NOMANGLE: Specifies that we should link to BOOST_LIB_NAME.lib,
+ rather than a mangled-name version.
+
+These macros will be undef'ed at the end of the header, further this header
+has no include guards - so be sure to include it only once from your library!
+
+Algorithm:
+~~~~~~~~~~
+
+Libraries for Borland and Microsoft compilers are automatically
+selected here, the name of the lib is selected according to the following
+formula:
+
+BOOST_LIB_PREFIX
+ + BOOST_LIB_NAME
+ + "_"
+ + BOOST_LIB_TOOLSET
+ + BOOST_LIB_THREAD_OPT
+ + BOOST_LIB_RT_OPT
+ "-"
+ + BOOST_LIB_VERSION
+
+These are defined as:
+
+BOOST_LIB_PREFIX: "lib" for static libraries otherwise "".
+
+BOOST_LIB_NAME: The base name of the lib ( for example boost_regex).
+
+BOOST_LIB_TOOLSET: The compiler toolset name (vc6, vc7, bcb5 etc).
+
+BOOST_LIB_THREAD_OPT: "-mt" for multithread builds, otherwise nothing.
+
+BOOST_LIB_RT_OPT: A suffix that indicates the runtime library used,
+ contains one or more of the following letters after
+ a hiphen:
+
+ s static runtime (dynamic if not present).
+ d debug build (release if not present).
+ g debug/diagnostic runtime (release if not present).
+ p STLPort Build.
+
+BOOST_LIB_VERSION: The Boost version, in the form x_y, for Boost version x.y.
+
+
+***************************************************************************/
+
+#ifdef __cplusplus
+# ifndef BOOST_CONFIG_HPP
+# include <boost/config.hpp>
+# endif
+#elif defined(_MSC_VER) && !defined(__MWERKS__) && !defined(__EDG_VERSION__)
+//
+// C language compatability (no, honestly)
+//
+# define BOOST_MSVC _MSC_VER
+# define BOOST_STRINGIZE(X) BOOST_DO_STRINGIZE(X)
+# define BOOST_DO_STRINGIZE(X) #X
+#endif
+//
+// Only include what follows for known and supported compilers:
+//
+#if defined(BOOST_MSVC) \
+ || defined(__BORLANDC__) \
+ || (defined(__MWERKS__) && defined(_WIN32) && (__MWERKS__ >= 0x3000)) \
+ || (defined(__ICL) && defined(_MSC_EXTENSIONS) && (_MSC_VER >= 1200))
+
+#ifndef BOOST_VERSION_HPP
+# include <boost/version.hpp>
+#endif
+
+#ifndef BOOST_LIB_NAME
+# error "Macro BOOST_LIB_NAME not set (internal error)"
+#endif
+
+//
+// error check:
+//
+#if defined(__MSVC_RUNTIME_CHECKS) && !defined(_DEBUG)
+# pragma message("Using the /RTC option without specifying a debug runtime will lead to linker errors")
+# pragma message("Hint: go to the code generation options and switch to one of the debugging runtimes")
+# error "Incompatible build options"
+#endif
+//
+// select toolset if not defined already:
+//
+#ifndef BOOST_LIB_TOOLSET
+// Note: no compilers before 1200 are supported
+#if defined(BOOST_MSVC) && (BOOST_MSVC < 1300)
+
+# ifdef UNDER_CE
+ // vc6:
+# define BOOST_LIB_TOOLSET "evc4"
+# else
+ // vc6:
+# define BOOST_LIB_TOOLSET "vc6"
+# endif
+
+#elif defined(BOOST_MSVC) && (BOOST_MSVC == 1300)
+
+ // vc7:
+# define BOOST_LIB_TOOLSET "vc7"
+
+#elif defined(BOOST_MSVC) && (BOOST_MSVC == 1310)
+
+ // vc71:
+# define BOOST_LIB_TOOLSET "vc71"
+
+#elif defined(BOOST_MSVC) && (BOOST_MSVC >= 1400)
+
+ // vc80:
+# define BOOST_LIB_TOOLSET "vc80"
+
+#elif defined(__BORLANDC__)
+
+ // CBuilder 6:
+# define BOOST_LIB_TOOLSET "bcb"
+
+#elif defined(__ICL)
+
+ // Intel C++, no version number:
+# define BOOST_LIB_TOOLSET "iw"
+
+#elif defined(__MWERKS__) && (__MWERKS__ <= 0x31FF )
+
+ // Metrowerks CodeWarrior 8.x
+# define BOOST_LIB_TOOLSET "cw8"
+
+#elif defined(__MWERKS__) && (__MWERKS__ <= 0x32FF )
+
+ // Metrowerks CodeWarrior 9.x
+# define BOOST_LIB_TOOLSET "cw9"
+
+#endif
+#endif // BOOST_LIB_TOOLSET
+
+//
+// select thread opt:
+//
+#if defined(_MT) || defined(__MT__)
+# define BOOST_LIB_THREAD_OPT "-mt"
+#else
+# define BOOST_LIB_THREAD_OPT
+#endif
+
+#if defined(_MSC_VER) || defined(__MWERKS__)
+
+# ifdef _DLL
+
+# if (defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)) && (defined(_STLP_OWN_IOSTREAMS) || defined(__STL_OWN_IOSTREAMS))
+
+# if defined(_DEBUG) && (defined(__STL_DEBUG) || defined(_STLP_DEBUG))
+# define BOOST_LIB_RT_OPT "-gdp"
+# elif defined(_DEBUG)
+# define BOOST_LIB_RT_OPT "-gdp"
+# pragma message("warning: STLPort debug versions are built with /D_STLP_DEBUG=1")
+# error "Build options aren't compatible with pre-built libraries"
+# else
+# define BOOST_LIB_RT_OPT "-p"
+# endif
+
+# elif defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)
+
+# if defined(_DEBUG) && (defined(__STL_DEBUG) || defined(_STLP_DEBUG))
+# define BOOST_LIB_RT_OPT "-gdpn"
+# elif defined(_DEBUG)
+# define BOOST_LIB_RT_OPT "-gdpn"
+# pragma message("warning: STLPort debug versions are built with /D_STLP_DEBUG=1")
+# error "Build options aren't compatible with pre-built libraries"
+# else
+# define BOOST_LIB_RT_OPT "-pn"
+# endif
+
+# else
+
+# if defined(_DEBUG)
+# define BOOST_LIB_RT_OPT "-gd"
+# else
+# define BOOST_LIB_RT_OPT
+# endif
+
+# endif
+
+# else
+
+# if (defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)) && (defined(_STLP_OWN_IOSTREAMS) || defined(__STL_OWN_IOSTREAMS))
+
+# if defined(_DEBUG) && (defined(__STL_DEBUG) || defined(_STLP_DEBUG))
+# define BOOST_LIB_RT_OPT "-sgdp"
+# elif defined(_DEBUG)
+# define BOOST_LIB_RT_OPT "-sgdp"
+# pragma message("warning: STLPort debug versions are built with /D_STLP_DEBUG=1")
+# error "Build options aren't compatible with pre-built libraries"
+# else
+# define BOOST_LIB_RT_OPT "-sp"
+# endif
+
+# elif defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)
+
+# if defined(_DEBUG) && (defined(__STL_DEBUG) || defined(_STLP_DEBUG))
+# define BOOST_LIB_RT_OPT "-sgdpn"
+# elif defined(_DEBUG)
+# define BOOST_LIB_RT_OPT "-sgdpn"
+# pragma message("warning: STLPort debug versions are built with /D_STLP_DEBUG=1")
+# error "Build options aren't compatible with pre-built libraries"
+# else
+# define BOOST_LIB_RT_OPT "-spn"
+# endif
+
+# else
+
+# if defined(_DEBUG)
+# define BOOST_LIB_RT_OPT "-sgd"
+# else
+# define BOOST_LIB_RT_OPT "-s"
+# endif
+
+# endif
+
+# endif
+
+#elif defined(__BORLANDC__)
+
+//
+// figure out whether we want the debug builds or not:
+//
+#if __BORLANDC__ > 0x561
+#pragma defineonoption BOOST_BORLAND_DEBUG -v
+#endif
+//
+// sanity check:
+//
+#if defined(__STL_DEBUG) || defined(_STLP_DEBUG)
+#error "Pre-built versions of the Boost libraries are not provided in STLPort-debug form"
+#endif
+
+# ifdef _RTLDLL
+
+# ifdef BOOST_BORLAND_DEBUG
+# define BOOST_LIB_RT_OPT "-d"
+# else
+# define BOOST_LIB_RT_OPT
+# endif
+
+# else
+
+# ifdef BOOST_BORLAND_DEBUG
+# define BOOST_LIB_RT_OPT "-sd"
+# else
+# define BOOST_LIB_RT_OPT "-s"
+# endif
+
+# endif
+
+#endif
+
+//
+// select linkage opt:
+//
+#if (defined(_DLL) || defined(_RTLDLL)) && defined(BOOST_DYN_LINK)
+# define BOOST_LIB_PREFIX
+#elif defined(BOOST_DYN_LINK)
+# error "Mixing a dll boost library with a static runtime is a really bad idea..."
+#else
+# define BOOST_LIB_PREFIX "lib"
+#endif
+
+//
+// now include the lib:
+//
+#if defined(BOOST_LIB_NAME) \
+ && defined(BOOST_LIB_PREFIX) \
+ && defined(BOOST_LIB_TOOLSET) \
+ && defined(BOOST_LIB_THREAD_OPT) \
+ && defined(BOOST_LIB_RT_OPT) \
+ && defined(BOOST_LIB_VERSION)
+
+#ifndef BOOST_AUTO_LINK_NOMANGLE
+# pragma comment(lib, BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) "-" BOOST_LIB_TOOLSET BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT "-" BOOST_LIB_VERSION ".lib")
+# ifdef BOOST_LIB_DIAGNOSTIC
+# pragma message ("Linking to lib file: " BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) "-" BOOST_LIB_TOOLSET BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT "-" BOOST_LIB_VERSION ".lib")
+# endif
+#else
+# pragma comment(lib, BOOST_STRINGIZE(BOOST_LIB_NAME) ".lib")
+# ifdef BOOST_LIB_DIAGNOSTIC
+# pragma message ("Linking to lib file: " BOOST_STRINGIZE(BOOST_LIB_NAME) ".lib")
+# endif
+#endif
+
+#else
+# error "some required macros where not defined (internal logic error)."
+#endif
+
+
+#endif // _MSC_VER || __BORLANDC__
+
+//
+// finally undef any macros we may have set:
+//
+#ifdef BOOST_LIB_PREFIX
+# undef BOOST_LIB_PREFIX
+#endif
+#if defined(BOOST_LIB_NAME)
+# undef BOOST_LIB_NAME
+#endif
+// Don't undef this one: it can be set by the user and should be the
+// same for all libraries:
+//#if defined(BOOST_LIB_TOOLSET)
+//# undef BOOST_LIB_TOOLSET
+//#endif
+#if defined(BOOST_LIB_THREAD_OPT)
+# undef BOOST_LIB_THREAD_OPT
+#endif
+#if defined(BOOST_LIB_RT_OPT)
+# undef BOOST_LIB_RT_OPT
+#endif
+#if defined(BOOST_LIB_LINK_OPT)
+# undef BOOST_LIB_LINK_OPT
+#endif
+#if defined(BOOST_LIB_DEBUG_OPT)
+# undef BOOST_LIB_DEBUG_OPT
+#endif
+#if defined(BOOST_DYN_LINK)
+# undef BOOST_DYN_LINK
+#endif
+#if defined(BOOST_AUTO_LINK_NOMANGLE)
+# undef BOOST_AUTO_LINK_NOMANGLE
+#endif
+
+
+
+
+
+
+
+
+
+
+
diff --git a/boost/boost/config/compiler/borland.hpp b/boost/boost/config/compiler/borland.hpp
new file mode 100644
index 00000000000..b0d6ab0b44a
--- /dev/null
+++ b/boost/boost/config/compiler/borland.hpp
@@ -0,0 +1,190 @@
+// (C) Copyright John Maddock 2001 - 2003.
+// (C) Copyright David Abrahams 2002 - 2003.
+// (C) Copyright Aleksey Gurtovoy 2002.
+// 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)
+
+// See http://www.boost.org for most recent version.
+
+// Borland C++ compiler setup:
+
+//
+// versions check:
+// we don't support Borland prior to version 5.4:
+#if __BORLANDC__ < 0x540
+# error "Compiler not supported or configured - please reconfigure"
+#elif __BORLANDC__ < 0x581
+# pragma message( "Support for Borland compilers older than BCB2006 is deprecated in Boost 1.34" )
+#endif
+
+// last known and checked version is 0x600 (Builder X preview)
+// Or 0x582 (Borland C++ Builder 2006 Update 1):
+#if (__BORLANDC__ > 0x582) && (__BORLANDC__ != 0x600)
+# if defined(BOOST_ASSERT_CONFIG)
+# error "Unknown compiler version - please run the configure tests and report the results"
+# else
+# pragma message( "Unknown compiler version - please run the configure tests and report the results")
+# endif
+#endif
+
+//
+// Support macros to help with standard library detection
+#if (__BORLANDC__ < 0x560) || defined(_USE_OLD_RW_STL)
+# define BOOST_BCB_WITH_ROGUE_WAVE
+#elif __BORLANDC__ < 0x570
+# define BOOST_BCB_WITH_STLPORT
+#else
+# define BOOST_BCB_WITH_DINKUMWARE
+#endif
+
+
+//
+// Version 5.0 and below:
+# if __BORLANDC__ <= 0x0550
+// Borland C++Builder 4 and 5:
+# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+# if __BORLANDC__ == 0x0550
+// Borland C++Builder 5, command-line compiler 5.5:
+# define BOOST_NO_OPERATORS_IN_NAMESPACE
+# endif
+# endif
+
+// Version 5.51 and below:
+#if (__BORLANDC__ <= 0x551)
+# define BOOST_NO_CV_SPECIALIZATIONS
+# define BOOST_NO_CV_VOID_SPECIALIZATIONS
+# define BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+# define BOOST_NO_DEDUCED_TYPENAME
+// workaround for missing WCHAR_MAX/WCHAR_MIN:
+#include <climits>
+#include <cwchar>
+#ifndef WCHAR_MAX
+# define WCHAR_MAX 0xffff
+#endif
+#ifndef WCHAR_MIN
+# define WCHAR_MIN 0
+#endif
+#endif
+
+// Borland C++ Builder 2006 Update 2 and below:
+#if (__BORLANDC__ <= 0x582)
+# define BOOST_NO_SFINAE
+# define BOOST_NO_INTEGRAL_INT64_T
+# define BOOST_NO_DEPENDENT_NESTED_DERIVATIONS
+# define BOOST_NO_PRIVATE_IN_AGGREGATE
+# define BOOST_NO_USING_TEMPLATE
+# define BOOST_BCB_PARTIAL_SPECIALIZATION_BUG
+# define BOOST_NO_TEMPLATE_TEMPLATES
+# define BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE
+# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+ // we shouldn't really need this - but too many things choke
+ // without it, this needs more investigation:
+# define BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+# define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL
+# define BOOST_NO_IS_ABSTRACT
+
+# ifdef NDEBUG
+ // fix broken <cstring> so that Boost.test works:
+# include <cstring>
+# undef strcmp
+# endif
+ // fix broken errno declaration:
+# include <errno.h>
+# ifndef errno
+# define errno errno
+# endif
+
+//
+// new bug in 5.61:
+#if (__BORLANDC__ >= 0x561) && (__BORLANDC__ <= 0x580)
+ // this seems to be needed by the command line compiler, but not the IDE:
+# define BOOST_NO_MEMBER_FUNCTION_SPECIALIZATIONS
+#endif
+
+# ifdef _WIN32
+# define BOOST_NO_SWPRINTF
+# elif defined(linux) || defined(__linux__) || defined(__linux)
+ // we should really be able to do without this
+ // but the wcs* functions aren't imported into std::
+# define BOOST_NO_STDC_NAMESPACE
+ // _CPPUNWIND doesn't get automatically set for some reason:
+# pragma defineonoption BOOST_CPPUNWIND -x
+# endif
+#endif
+
+//
+// Post 0x561 we have long long and stdint.h:
+#if __BORLANDC__ >= 0x561
+# ifndef __NO_LONG_LONG
+# define BOOST_HAS_LONG_LONG
+# endif
+ // On non-Win32 platforms let the platform config figure this out:
+# ifdef _WIN32
+# define BOOST_HAS_STDINT_H
+# endif
+#endif
+
+// Borland C++Builder 6 defaults to using STLPort. If _USE_OLD_RW_STL is
+// defined, then we have 0x560 or greater with the Rogue Wave implementation
+// which presumably has the std::DBL_MAX bug.
+#if defined( BOOST_BCB_WITH_ROGUE_WAVE )
+// <climits> is partly broken, some macros define symbols that are really in
+// namespace std, so you end up having to use illegal constructs like
+// std::DBL_MAX, as a fix we'll just include float.h and have done with:
+#include <float.h>
+#endif
+//
+// __int64:
+//
+#if (__BORLANDC__ >= 0x530) && !defined(__STRICT_ANSI__)
+# define BOOST_HAS_MS_INT64
+#endif
+//
+// check for exception handling support:
+//
+#if !defined(_CPPUNWIND) && !defined(BOOST_CPPUNWIND) && !defined(__EXCEPTIONS)
+# define BOOST_NO_EXCEPTIONS
+#endif
+//
+// all versions have a <dirent.h>:
+//
+#ifndef __STRICT_ANSI__
+# define BOOST_HAS_DIRENT_H
+#endif
+//
+// all versions support __declspec:
+//
+#ifndef __STRICT_ANSI__
+# define BOOST_HAS_DECLSPEC
+#endif
+//
+// ABI fixing headers:
+//
+#if __BORLANDC__ < 0x600 // not implemented for version 6 compiler yet
+#ifndef BOOST_ABI_PREFIX
+# define BOOST_ABI_PREFIX "boost/config/abi/borland_prefix.hpp"
+#endif
+#ifndef BOOST_ABI_SUFFIX
+# define BOOST_ABI_SUFFIX "boost/config/abi/borland_suffix.hpp"
+#endif
+#endif
+//
+// Disable Win32 support in ANSI mode:
+//
+#if __BORLANDC__ < 0x600
+# pragma defineonoption BOOST_DISABLE_WIN32 -A
+#elif defined(__STRICT_ANSI__)
+# define BOOST_DISABLE_WIN32
+#endif
+//
+// MSVC compatibility mode does some nasty things:
+// TODO: look up if this doesn't apply to the whole 12xx range
+//
+#if defined(_MSC_VER) && (_MSC_VER <= 1200)
+# define BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
+# define BOOST_NO_VOID_RETURNS
+#endif
+
+#define BOOST_COMPILER "Borland C++ version " BOOST_STRINGIZE(__BORLANDC__)
+
diff --git a/boost/boost/config/compiler/comeau.hpp b/boost/boost/config/compiler/comeau.hpp
new file mode 100644
index 00000000000..278222dcfdd
--- /dev/null
+++ b/boost/boost/config/compiler/comeau.hpp
@@ -0,0 +1,59 @@
+// (C) Copyright John Maddock 2001.
+// (C) Copyright Douglas Gregor 2001.
+// (C) Copyright Peter Dimov 2001.
+// (C) Copyright Aleksey Gurtovoy 2003.
+// (C) Copyright Beman Dawes 2003.
+// (C) Copyright Jens Maurer 2003.
+// 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)
+
+// See http://www.boost.org for most recent version.
+
+// Comeau C++ compiler setup:
+
+#include "boost/config/compiler/common_edg.hpp"
+
+#if (__COMO_VERSION__ <= 4245)
+
+# if defined(_MSC_VER) && _MSC_VER <= 1300
+# if _MSC_VER > 100
+ // only set this in non-strict mode:
+# define BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
+# endif
+# endif
+
+// Void returns don't work when emulating VC 6 (Peter Dimov)
+// TODO: look up if this doesn't apply to the whole 12xx range
+# if defined(_MSC_VER) && (_MSC_VER < 1300)
+# define BOOST_NO_VOID_RETURNS
+# endif
+
+#endif // version 4245
+
+//
+// enable __int64 support in VC emulation mode
+//
+# if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# define BOOST_HAS_MS_INT64
+# endif
+
+#define BOOST_COMPILER "Comeau compiler version " BOOST_STRINGIZE(__COMO_VERSION__)
+
+//
+// versions check:
+// we don't know Comeau prior to version 4245:
+#if __COMO_VERSION__ < 4245
+# error "Compiler not configured - please reconfigure"
+#endif
+//
+// last known and checked version is 4245:
+#if (__COMO_VERSION__ > 4245)
+# if defined(BOOST_ASSERT_CONFIG)
+# error "Unknown compiler version - please run the configure tests and report the results"
+# endif
+#endif
+
+
+
+
diff --git a/boost/boost/config/compiler/common_edg.hpp b/boost/boost/config/compiler/common_edg.hpp
new file mode 100644
index 00000000000..0443be1aea2
--- /dev/null
+++ b/boost/boost/config/compiler/common_edg.hpp
@@ -0,0 +1,62 @@
+// (C) Copyright John Maddock 2001 - 2002.
+// (C) Copyright Jens Maurer 2001.
+// (C) Copyright David Abrahams 2002.
+// (C) Copyright Aleksey Gurtovoy 2002.
+// (C) Copyright Markus Schoepflin 2005.
+// 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)
+
+// See http://www.boost.org for most recent version.
+
+//
+// Options common to all edg based compilers.
+//
+// This is included from within the individual compiler mini-configs.
+
+#ifndef __EDG_VERSION__
+# error This file requires that __EDG_VERSION__ be defined.
+#endif
+
+#if (__EDG_VERSION__ <= 238)
+# define BOOST_NO_INTEGRAL_INT64_T
+# define BOOST_NO_SFINAE
+#endif
+
+#if (__EDG_VERSION__ <= 240)
+# define BOOST_NO_VOID_RETURNS
+#endif
+
+#if (__EDG_VERSION__ <= 241) && !defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP)
+# define BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
+#endif
+
+#if (__EDG_VERSION__ <= 244) && !defined(BOOST_NO_TEMPLATE_TEMPLATES)
+# define BOOST_NO_TEMPLATE_TEMPLATES
+#endif
+
+#if (__EDG_VERSION__ < 300) && !defined(BOOST_NO_IS_ABSTRACT)
+# define BOOST_NO_IS_ABSTRACT
+#endif
+
+#if (__EDG_VERSION__ <= 303) && !defined(BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL)
+# define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL
+#endif
+
+// See also kai.hpp which checks a Kai-specific symbol for EH
+# if !defined(__KCC) && !defined(__EXCEPTIONS)
+# define BOOST_NO_EXCEPTIONS
+# endif
+
+# if !defined(__NO_LONG_LONG)
+# define BOOST_HAS_LONG_LONG
+# endif
+
+#ifdef c_plusplus
+// EDG has "long long" in non-strict mode
+// However, some libraries have insufficient "long long" support
+// #define BOOST_HAS_LONG_LONG
+#endif
+
+
+
diff --git a/boost/boost/config/compiler/compaq_cxx.hpp b/boost/boost/config/compiler/compaq_cxx.hpp
new file mode 100644
index 00000000000..a52e66a29cd
--- /dev/null
+++ b/boost/boost/config/compiler/compaq_cxx.hpp
@@ -0,0 +1,19 @@
+// (C) Copyright John Maddock 2001 - 2003.
+// 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)
+
+// See http://www.boost.org for most recent version.
+
+// Dec Alpha True64 C++ compiler setup:
+
+#define BOOST_COMPILER "Dec Alpha True64 " BOOST_STRINGIZE(__DECCXX_VER)
+
+#include "boost/config/compiler/common_edg.hpp"
+
+//
+// versions check:
+// Nothing to do here?
+
+
+
diff --git a/boost/boost/config/compiler/digitalmars.hpp b/boost/boost/config/compiler/digitalmars.hpp
new file mode 100644
index 00000000000..32fc71faf5a
--- /dev/null
+++ b/boost/boost/config/compiler/digitalmars.hpp
@@ -0,0 +1,49 @@
+// Copyright (C) Christof Meerwald 2003
+// Copyright (C) Dan Watkins 2003
+//
+// 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)
+
+// Digital Mars C++ compiler setup:
+#define BOOST_COMPILER __DMC_VERSION_STRING__
+
+#define BOOST_HAS_LONG_LONG
+#define BOOST_HAS_PRAGMA_ONCE
+
+#if (__DMC__ <= 0x833)
+#define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL
+#define BOOST_NO_TEMPLATE_TEMPLATES
+#define BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING
+#define BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS
+#define BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS
+#endif
+#if (__DMC__ <= 0x840) || !defined(BOOST_STRICT_CONFIG)
+#define BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS
+#define BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+#define BOOST_NO_OPERATORS_IN_NAMESPACE
+#define BOOST_NO_UNREACHABLE_RETURN_DETECTION
+#define BOOST_NO_SFINAE
+#define BOOST_NO_USING_TEMPLATE
+#define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL
+#endif
+
+//
+// has macros:
+#if (__DMC__ >= 0x840)
+#define BOOST_HAS_DIRENT_H
+#define BOOST_HAS_STDINT_H
+#define BOOST_HAS_WINTHREADS
+#endif
+
+
+// check for exception handling support:
+#ifndef _CPPUNWIND
+# define BOOST_NO_EXCEPTIONS
+#endif
+
+#if (__DMC__ < 0x840)
+# if defined(BOOST_ASSERT_CONFIG)
+# error "Unknown compiler version - please run the configure tests and report the results"
+# endif
+#endif
diff --git a/boost/boost/config/compiler/gcc.hpp b/boost/boost/config/compiler/gcc.hpp
new file mode 100644
index 00000000000..d94b16b7610
--- /dev/null
+++ b/boost/boost/config/compiler/gcc.hpp
@@ -0,0 +1,105 @@
+// (C) Copyright John Maddock 2001 - 2003.
+// (C) Copyright Darin Adler 2001 - 2002.
+// (C) Copyright Jens Maurer 2001 - 2002.
+// (C) Copyright Beman Dawes 2001 - 2003.
+// (C) Copyright Douglas Gregor 2002.
+// (C) Copyright David Abrahams 2002 - 2003.
+// (C) Copyright Synge Todo 2003.
+// 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)
+
+// See http://www.boost.org for most recent version.
+
+// GNU C++ compiler setup:
+
+#if __GNUC__ < 3
+# if __GNUC_MINOR__ == 91
+ // egcs 1.1 won't parse shared_ptr.hpp without this:
+# define BOOST_NO_AUTO_PTR
+# endif
+# if __GNUC_MINOR__ < 95
+ //
+ // Prior to gcc 2.95 member templates only partly
+ // work - define BOOST_MSVC6_MEMBER_TEMPLATES
+ // instead since inline member templates mostly work.
+ //
+# define BOOST_NO_MEMBER_TEMPLATES
+# if __GNUC_MINOR__ >= 9
+# define BOOST_MSVC6_MEMBER_TEMPLATES
+# endif
+# endif
+
+# if __GNUC_MINOR__ < 96
+# define BOOST_NO_SFINAE
+# endif
+
+# if __GNUC_MINOR__ <= 97
+# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+# define BOOST_NO_OPERATORS_IN_NAMESPACE
+# endif
+
+# define BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE
+# define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL
+# define BOOST_NO_IS_ABSTRACT
+#elif __GNUC__ == 3
+ //
+ // gcc-3.x problems:
+ //
+ // Bug specific to gcc 3.1 and 3.2:
+ //
+# if ((__GNUC_MINOR__ == 1) || (__GNUC_MINOR__ == 2))
+# define BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS
+# endif
+# if __GNUC_MINOR__ < 4
+# define BOOST_NO_IS_ABSTRACT
+# endif
+#endif
+
+#ifndef __EXCEPTIONS
+# define BOOST_NO_EXCEPTIONS
+#endif
+
+
+//
+// Threading support: Turn this on unconditionally here (except for
+// those platforms where we can know for sure). It will get turned off again
+// later if no threading API is detected.
+//
+#if !defined(__MINGW32__) && !defined(linux) && !defined(__linux) && !defined(__linux__)
+# define BOOST_HAS_THREADS
+#endif
+
+//
+// gcc has "long long"
+//
+#define BOOST_HAS_LONG_LONG
+
+//
+// gcc implements the named return value optimization since version 3.1
+//
+#if __GNUC__ > 3 || ( __GNUC__ == 3 && __GNUC_MINOR__ >= 1 )
+#define BOOST_HAS_NRVO
+#endif
+
+#define BOOST_COMPILER "GNU C++ version " __VERSION__
+
+//
+// versions check:
+// we don't know gcc prior to version 2.90:
+#if (__GNUC__ == 2) && (__GNUC_MINOR__ < 90)
+# error "Compiler not configured - please reconfigure"
+#endif
+//
+// last known and checked version is 4.0 (Pre-release):
+#if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ > 0))
+# if defined(BOOST_ASSERT_CONFIG)
+# error "Unknown compiler version - please run the configure tests and report the results"
+# else
+// we don't emit warnings here anymore since there are no defect macros defined for
+// gcc post 3.4, so any failures are gcc regressions...
+//# warning "Unknown compiler version - please run the configure tests and report the results"
+# endif
+#endif
+
+
diff --git a/boost/boost/config/compiler/gcc_xml.hpp b/boost/boost/config/compiler/gcc_xml.hpp
new file mode 100644
index 00000000000..5dd67c76040
--- /dev/null
+++ b/boost/boost/config/compiler/gcc_xml.hpp
@@ -0,0 +1,30 @@
+// (C) Copyright John Maddock 2006.
+// 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)
+
+// See http://www.boost.org for most recent version.
+
+// GCC-XML C++ compiler setup:
+
+# if !defined(__GCCXML_GNUC__) || ((__GCCXML_GNUC__ <= 3) && (__GCCXML_GNUC_MINOR__ <= 3))
+# define BOOST_NO_IS_ABSTRACT
+# endif
+
+//
+// Threading support: Turn this on unconditionally here (except for
+// those platforms where we can know for sure). It will get turned off again
+// later if no threading API is detected.
+//
+#if !defined(__MINGW32__) && !defined(_MSC_VER) && !defined(linux) && !defined(__linux) && !defined(__linux__)
+# define BOOST_HAS_THREADS
+#endif
+
+//
+// gcc has "long long"
+//
+#define BOOST_HAS_LONG_LONG
+
+#define BOOST_COMPILER "GCC-XML C++ version " __GCCXML__
+
+
diff --git a/boost/boost/config/compiler/greenhills.hpp b/boost/boost/config/compiler/greenhills.hpp
new file mode 100644
index 00000000000..038b6b2b52e
--- /dev/null
+++ b/boost/boost/config/compiler/greenhills.hpp
@@ -0,0 +1,28 @@
+// (C) Copyright John Maddock 2001.
+// 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)
+
+// See http://www.boost.org for most recent version.
+
+// Greenhills C++ compiler setup:
+
+#define BOOST_COMPILER "Greenhills C++ version " BOOST_STRINGIZE(__ghs)
+
+#include "boost/config/compiler/common_edg.hpp"
+
+//
+// versions check:
+// we don't support Greenhills prior to version 0:
+#if __ghs < 0
+# error "Compiler not supported or configured - please reconfigure"
+#endif
+//
+// last known and checked version is 0:
+#if (__ghs > 0)
+# if defined(BOOST_ASSERT_CONFIG)
+# error "Unknown compiler version - please run the configure tests and report the results"
+# endif
+#endif
+
+
diff --git a/boost/boost/config/compiler/hp_acc.hpp b/boost/boost/config/compiler/hp_acc.hpp
new file mode 100644
index 00000000000..79405fc49e8
--- /dev/null
+++ b/boost/boost/config/compiler/hp_acc.hpp
@@ -0,0 +1,72 @@
+// (C) Copyright John Maddock 2001 - 2003.
+// (C) Copyright Jens Maurer 2001 - 2003.
+// (C) Copyright John Maddock 2001 - 2003.
+// (C) Copyright Jens Maurer 2001 - 2003.
+// (C) Copyright Aleksey Gurtovoy 2002.
+// (C) Copyright David Abrahams 2002 - 2003.
+// (C) Copyright Toon Knapen 2003.
+// (C) Copyright Boris Gubenko 2006.
+// 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)
+
+// See http://www.boost.org for most recent version.
+
+// HP aCC C++ compiler setup:
+
+#if (__HP_aCC >= 61200) && defined(__EDG__)
+#include "boost/config/compiler/common_edg.hpp"
+#endif
+
+#if (__HP_aCC <= 33100)
+# define BOOST_NO_INTEGRAL_INT64_T
+# define BOOST_NO_OPERATORS_IN_NAMESPACE
+# if !defined(_NAMESPACE_STD)
+# define BOOST_NO_STD_LOCALE
+# define BOOST_NO_STRINGSTREAM
+# endif
+#endif
+
+#if (__HP_aCC <= 33300)
+// member templates are sufficiently broken that we disable them for now
+# define BOOST_NO_MEMBER_TEMPLATES
+# define BOOST_NO_DEPENDENT_NESTED_DERIVATIONS
+# define BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE
+#endif
+
+#if (__HP_aCC < 60000)
+# define BOOST_NO_UNREACHABLE_RETURN_DETECTION
+# define BOOST_NO_TEMPLATE_TEMPLATES
+# define BOOST_NO_SWPRINTF
+# define BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS
+# define BOOST_NO_IS_ABSTRACT
+# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+#endif
+
+// optional features rather than defects:
+#if (__HP_aCC >= 33900)
+# define BOOST_HAS_LONG_LONG
+# define BOOST_HAS_PARTIAL_STD_ALLOCATOR
+#endif
+
+#if (__HP_aCC >= 50000 ) && (__HP_aCC <= 53800 ) || (__HP_aCC < 31300 )
+# define BOOST_NO_MEMBER_TEMPLATE_KEYWORD
+#endif
+
+#define BOOST_COMPILER "HP aCC version " BOOST_STRINGIZE(__HP_aCC)
+
+//
+// versions check:
+// we don't support HP aCC prior to version 33000:
+#if __HP_aCC < 33000
+# error "Compiler not supported or configured - please reconfigure"
+#endif
+//
+// last known and checked version is 61300:
+#if (__HP_aCC > 61300)
+# if defined(BOOST_ASSERT_CONFIG)
+# error "Unknown compiler version - please run the configure tests and report the results"
+# endif
+#endif
+
+
diff --git a/boost/boost/config/compiler/intel.hpp b/boost/boost/config/compiler/intel.hpp
new file mode 100644
index 00000000000..87920e490b6
--- /dev/null
+++ b/boost/boost/config/compiler/intel.hpp
@@ -0,0 +1,158 @@
+// (C) Copyright John Maddock 2001.
+// (C) Copyright Peter Dimov 2001.
+// (C) Copyright Jens Maurer 2001.
+// (C) Copyright David Abrahams 2002 - 2003.
+// (C) Copyright Aleksey Gurtovoy 2002 - 2003.
+// (C) Copyright Guillaume Melquiond 2002 - 2003.
+// (C) Copyright Beman Dawes 2003.
+// (C) Copyright Martin Wille 2003.
+// 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)
+
+// See http://www.boost.org for most recent version.
+
+// Intel compiler setup:
+
+#include "boost/config/compiler/common_edg.hpp"
+
+#if defined(__INTEL_COMPILER)
+# define BOOST_INTEL_CXX_VERSION __INTEL_COMPILER
+#elif defined(__ICL)
+# define BOOST_INTEL_CXX_VERSION __ICL
+#elif defined(__ICC)
+# define BOOST_INTEL_CXX_VERSION __ICC
+#elif defined(__ECC)
+# define BOOST_INTEL_CXX_VERSION __ECC
+#endif
+
+#define BOOST_COMPILER "Intel C++ version " BOOST_STRINGIZE(BOOST_INTEL_CXX_VERSION)
+#define BOOST_INTEL BOOST_INTEL_CXX_VERSION
+
+#if defined(_WIN32) || defined(_WIN64)
+# define BOOST_INTEL_WIN BOOST_INTEL
+#else
+# define BOOST_INTEL_LINUX BOOST_INTEL
+#endif
+
+#if (BOOST_INTEL_CXX_VERSION <= 500) && defined(_MSC_VER)
+# define BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS
+# define BOOST_NO_TEMPLATE_TEMPLATES
+#endif
+
+#if (BOOST_INTEL_CXX_VERSION <= 600)
+
+# if defined(_MSC_VER) && (_MSC_VER <= 1300) // added check for <= VC 7 (Peter Dimov)
+
+// Boost libraries assume strong standard conformance unless otherwise
+// indicated by a config macro. As configured by Intel, the EDG front-end
+// requires certain compiler options be set to achieve that strong conformance.
+// Particularly /Qoption,c,--arg_dep_lookup (reported by Kirk Klobe & Thomas Witt)
+// and /Zc:wchar_t,forScope. See boost-root/tools/build/intel-win32-tools.jam for
+// details as they apply to particular versions of the compiler. When the
+// compiler does not predefine a macro indicating if an option has been set,
+// this config file simply assumes the option has been set.
+// Thus BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP will not be defined, even if
+// the compiler option is not enabled.
+
+# define BOOST_NO_SWPRINTF
+# endif
+
+// Void returns, 64 bit integrals don't work when emulating VC 6 (Peter Dimov)
+
+# if defined(_MSC_VER) && (_MSC_VER <= 1200)
+# define BOOST_NO_VOID_RETURNS
+# define BOOST_NO_INTEGRAL_INT64_T
+# endif
+
+#endif
+
+#if (BOOST_INTEL_CXX_VERSION <= 710) && defined(_WIN32)
+# define BOOST_NO_POINTER_TO_MEMBER_TEMPLATE_PARAMETERS
+#endif
+
+// See http://aspn.activestate.com/ASPN/Mail/Message/boost/1614864
+#if BOOST_INTEL_CXX_VERSION < 600
+# define BOOST_NO_INTRINSIC_WCHAR_T
+#else
+// We should test the macro _WCHAR_T_DEFINED to check if the compiler
+// supports wchar_t natively. *BUT* there is a problem here: the standard
+// headers define this macro if they typedef wchar_t. Anyway, we're lucky
+// because they define it without a value, while Intel C++ defines it
+// to 1. So we can check its value to see if the macro was defined natively
+// or not.
+// Under UNIX, the situation is exactly the same, but the macro _WCHAR_T
+// is used instead.
+# if ((_WCHAR_T_DEFINED + 0) == 0) && ((_WCHAR_T + 0) == 0)
+# define BOOST_NO_INTRINSIC_WCHAR_T
+# endif
+#endif
+
+#if defined(__GNUC__) && !defined(BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL)
+//
+// Figure out when Intel is emulating this gcc bug
+// (All Intel versions prior to 9.0.26, and versions
+// later than that if they are set up to emulate gcc 3.2
+// or earlier):
+//
+# if ((__GNUC__ == 3) && (__GNUC_MINOR__ <= 2)) || (BOOST_INTEL < 900) || (__INTEL_COMPILER_BUILD_DATE < 20050912)
+# define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL
+# endif
+#endif
+
+//
+// Verify that we have actually got BOOST_NO_INTRINSIC_WCHAR_T
+// set correctly, if we don't do this now, we will get errors later
+// in type_traits code among other things, getting this correct
+// for the Intel compiler is actually remarkably fragile and tricky:
+//
+#if defined(BOOST_NO_INTRINSIC_WCHAR_T)
+#include <cwchar>
+template< typename T > struct assert_no_intrinsic_wchar_t;
+template<> struct assert_no_intrinsic_wchar_t<wchar_t> { typedef void type; };
+// if you see an error here then you need to unset BOOST_NO_INTRINSIC_WCHAR_T
+// where it is defined above:
+typedef assert_no_intrinsic_wchar_t<unsigned short>::type assert_no_intrinsic_wchar_t_;
+#else
+template< typename T > struct assert_intrinsic_wchar_t;
+template<> struct assert_intrinsic_wchar_t<wchar_t> {};
+// if you see an error here then define BOOST_NO_INTRINSIC_WCHAR_T on the command line:
+template<> struct assert_intrinsic_wchar_t<unsigned short> {};
+#endif
+
+#if _MSC_VER+0 >= 1000
+# if _MSC_VER >= 1200
+# define BOOST_HAS_MS_INT64
+# endif
+# define BOOST_NO_SWPRINTF
+#elif defined(_WIN32)
+# define BOOST_DISABLE_WIN32
+#endif
+
+// I checked version 6.0 build 020312Z, it implements the NRVO.
+// Correct this as you find out which version of the compiler
+// implemented the NRVO first. (Daniel Frey)
+#if (BOOST_INTEL_CXX_VERSION >= 600)
+# define BOOST_HAS_NRVO
+#endif
+
+//
+// versions check:
+// we don't support Intel prior to version 5.0:
+#if BOOST_INTEL_CXX_VERSION < 500
+# error "Compiler not supported or configured - please reconfigure"
+#endif
+//
+// last known and checked version:
+#if (BOOST_INTEL_CXX_VERSION > 910)
+# if defined(BOOST_ASSERT_CONFIG)
+# error "Unknown compiler version - please run the configure tests and report the results"
+# elif defined(_MSC_VER)
+# pragma message("Unknown compiler version - please run the configure tests and report the results")
+# endif
+#endif
+
+
+
+
+
diff --git a/boost/boost/config/compiler/kai.hpp b/boost/boost/config/compiler/kai.hpp
new file mode 100644
index 00000000000..de16f1a6758
--- /dev/null
+++ b/boost/boost/config/compiler/kai.hpp
@@ -0,0 +1,35 @@
+// (C) Copyright John Maddock 2001.
+// (C) Copyright David Abrahams 2002.
+// (C) Copyright Aleksey Gurtovoy 2002.
+// 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)
+
+// See http://www.boost.org for most recent version.
+
+// Kai C++ compiler setup:
+
+#include "boost/config/compiler/common_edg.hpp"
+
+# if (__KCC_VERSION <= 4001) || !defined(BOOST_STRICT_CONFIG)
+ // at least on Sun, the contents of <cwchar> is not in namespace std
+# define BOOST_NO_STDC_NAMESPACE
+# endif
+
+// see also common_edg.hpp which needs a special check for __KCC
+# if !defined(_EXCEPTIONS)
+# define BOOST_NO_EXCEPTIONS
+# endif
+
+#define BOOST_COMPILER "Kai C++ version " BOOST_STRINGIZE(__KCC_VERSION)
+
+//
+// last known and checked version is 4001:
+#if (__KCC_VERSION > 4001)
+# if defined(BOOST_ASSERT_CONFIG)
+# error "Unknown compiler version - please run the configure tests and report the results"
+# endif
+#endif
+
+
+
diff --git a/boost/boost/config/compiler/metrowerks.hpp b/boost/boost/config/compiler/metrowerks.hpp
new file mode 100644
index 00000000000..f173295eb84
--- /dev/null
+++ b/boost/boost/config/compiler/metrowerks.hpp
@@ -0,0 +1,104 @@
+// (C) Copyright John Maddock 2001.
+// (C) Copyright Darin Adler 2001.
+// (C) Copyright Peter Dimov 2001.
+// (C) Copyright David Abrahams 2001 - 2002.
+// (C) Copyright Beman Dawes 2001 - 2003.
+// (C) Copyright Stefan Slapeta 2004.
+// 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)
+
+// See http://www.boost.org for most recent version.
+
+// Metrowerks C++ compiler setup:
+
+// locale support is disabled when linking with the dynamic runtime
+# ifdef _MSL_NO_LOCALE
+# define BOOST_NO_STD_LOCALE
+# endif
+
+# if __MWERKS__ <= 0x2301 // 5.3
+# define BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+# define BOOST_NO_POINTER_TO_MEMBER_CONST
+# define BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS
+# define BOOST_NO_MEMBER_TEMPLATE_KEYWORD
+# endif
+
+# if __MWERKS__ <= 0x2401 // 6.2
+//# define BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+# endif
+
+# if(__MWERKS__ <= 0x2407) // 7.x
+# define BOOST_NO_MEMBER_FUNCTION_SPECIALIZATIONS
+# define BOOST_NO_UNREACHABLE_RETURN_DETECTION
+# endif
+
+# if(__MWERKS__ <= 0x3003) // 8.x
+# define BOOST_NO_SFINAE
+# endif
+
+// the "|| !defined(BOOST_STRICT_CONFIG)" part should apply to the last
+// tested version *only*:
+# if(__MWERKS__ <= 0x3206) || !defined(BOOST_STRICT_CONFIG) // 9.5
+# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+# define BOOST_NO_IS_ABSTRACT
+# endif
+
+#if !__option(wchar_type)
+# define BOOST_NO_INTRINSIC_WCHAR_T
+#endif
+
+#if !__option(exceptions)
+# define BOOST_NO_EXCEPTIONS
+#endif
+
+#if (__INTEL__ && _WIN32) || (__POWERPC__ && macintosh)
+# if __MWERKS__ == 0x3000
+# define BOOST_COMPILER_VERSION 8.0
+# elif __MWERKS__ == 0x3001
+# define BOOST_COMPILER_VERSION 8.1
+# elif __MWERKS__ == 0x3002
+# define BOOST_COMPILER_VERSION 8.2
+# elif __MWERKS__ == 0x3003
+# define BOOST_COMPILER_VERSION 8.3
+# elif __MWERKS__ == 0x3200
+# define BOOST_COMPILER_VERSION 9.0
+# elif __MWERKS__ == 0x3201
+# define BOOST_COMPILER_VERSION 9.1
+# elif __MWERKS__ == 0x3202
+# define BOOST_COMPILER_VERSION 9.2
+# elif __MWERKS__ == 0x3204
+# define BOOST_COMPILER_VERSION 9.3
+# elif __MWERKS__ == 0x3205
+# define BOOST_COMPILER_VERSION 9.4
+# elif __MWERKS__ == 0x3206
+# define BOOST_COMPILER_VERSION 9.5
+# else
+# define BOOST_COMPILER_VERSION __MWERKS__
+# endif
+#else
+# define BOOST_COMPILER_VERSION __MWERKS__
+#endif
+
+#define BOOST_COMPILER "Metrowerks CodeWarrior C++ version " BOOST_STRINGIZE(BOOST_COMPILER_VERSION)
+
+//
+// versions check:
+// we don't support Metrowerks prior to version 5.3:
+#if __MWERKS__ < 0x2301
+# error "Compiler not supported or configured - please reconfigure"
+#endif
+//
+// last known and checked version:
+#if (__MWERKS__ > 0x3205)
+# if defined(BOOST_ASSERT_CONFIG)
+# error "Unknown compiler version - please run the configure tests and report the results"
+# endif
+#endif
+
+
+
+
+
+
+
diff --git a/boost/boost/config/compiler/mpw.hpp b/boost/boost/config/compiler/mpw.hpp
new file mode 100644
index 00000000000..8ab2aacb6e7
--- /dev/null
+++ b/boost/boost/config/compiler/mpw.hpp
@@ -0,0 +1,51 @@
+// (C) Copyright John Maddock 2001 - 2002.
+// (C) Copyright Aleksey Gurtovoy 2002.
+// 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)
+
+// See http://www.boost.org for most recent version.
+
+// MPW C++ compilers setup:
+
+# if defined(__SC__)
+# define BOOST_COMPILER "MPW SCpp version " BOOST_STRINGIZE(__SC__)
+# elif defined(__MRC__)
+# define BOOST_COMPILER "MPW MrCpp version " BOOST_STRINGIZE(__MRC__)
+# else
+# error "Using MPW compiler configuration by mistake. Please update."
+# endif
+
+//
+// MPW 8.90:
+//
+#if (MPW_CPLUS <= 0x890) || !defined(BOOST_STRICT_CONFIG)
+# define BOOST_NO_CV_SPECIALIZATIONS
+# define BOOST_NO_DEPENDENT_NESTED_DERIVATIONS
+# define BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS
+# define BOOST_NO_INCLASS_MEMBER_INITIALIZATION
+# define BOOST_NO_INTRINSIC_WCHAR_T
+# define BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+# define BOOST_NO_USING_TEMPLATE
+
+# define BOOST_NO_CWCHAR
+# define BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+
+# define BOOST_NO_STD_ALLOCATOR /* actually a bug with const reference overloading */
+#endif
+
+//
+// versions check:
+// we don't support MPW prior to version 8.9:
+#if MPW_CPLUS < 0x890
+# error "Compiler not supported or configured - please reconfigure"
+#endif
+//
+// last known and checked version is 0x890:
+#if (MPW_CPLUS > 0x890)
+# if defined(BOOST_ASSERT_CONFIG)
+# error "Unknown compiler version - please run the configure tests and report the results"
+# endif
+#endif
+
+
diff --git a/boost/boost/config/compiler/sgi_mipspro.hpp b/boost/boost/config/compiler/sgi_mipspro.hpp
new file mode 100644
index 00000000000..689b67eeb18
--- /dev/null
+++ b/boost/boost/config/compiler/sgi_mipspro.hpp
@@ -0,0 +1,24 @@
+// (C) Copyright John Maddock 2001 - 2002.
+// 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)
+
+// See http://www.boost.org for most recent version.
+
+// SGI C++ compiler setup:
+
+#define BOOST_COMPILER "SGI Irix compiler version " BOOST_STRINGIZE(_COMPILER_VERSION)
+
+#include "boost/config/compiler/common_edg.hpp"
+
+//
+// Threading support:
+// Turn this on unconditionally here, it will get turned off again later
+// if no threading API is detected.
+//
+#define BOOST_HAS_THREADS
+//
+// version check:
+// probably nothing to do here?
+
+
diff --git a/boost/boost/config/compiler/sunpro_cc.hpp b/boost/boost/config/compiler/sunpro_cc.hpp
new file mode 100644
index 00000000000..b256d843a7f
--- /dev/null
+++ b/boost/boost/config/compiler/sunpro_cc.hpp
@@ -0,0 +1,92 @@
+// (C) Copyright John Maddock 2001.
+// (C) Copyright Jens Maurer 2001 - 2003.
+// (C) Copyright Peter Dimov 2002.
+// (C) Copyright Aleksey Gurtovoy 2002 - 2003.
+// (C) Copyright David Abrahams 2002.
+// 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)
+
+// See http://www.boost.org for most recent version.
+
+// Sun C++ compiler setup:
+
+# if __SUNPRO_CC <= 0x500
+# define BOOST_NO_MEMBER_TEMPLATES
+# define BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+# endif
+
+# if (__SUNPRO_CC <= 0x520)
+ //
+ // Sunpro 5.2 and earler:
+ //
+ // although sunpro 5.2 supports the syntax for
+ // inline initialization it often gets the value
+ // wrong, especially where the value is computed
+ // from other constants (J Maddock 6th May 2001)
+# define BOOST_NO_INCLASS_MEMBER_INITIALIZATION
+
+ // Although sunpro 5.2 supports the syntax for
+ // partial specialization, it often seems to
+ // bind to the wrong specialization. Better
+ // to disable it until suppport becomes more stable
+ // (J Maddock 6th May 2001).
+# define BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+# endif
+
+# if (__SUNPRO_CC <= 0x530)
+ // Requesting debug info (-g) with Boost.Python results
+ // in an internal compiler error for "static const"
+ // initialized in-class.
+ // >> Assertion: (../links/dbg_cstabs.cc, line 611)
+ // while processing ../test.cpp at line 0.
+ // (Jens Maurer according to Gottfried Ganßauge 04 Mar 2002)
+# define BOOST_NO_INCLASS_MEMBER_INITIALIZATION
+
+ // SunPro 5.3 has better support for partial specialization,
+ // but breaks when compiling std::less<shared_ptr<T> >
+ // (Jens Maurer 4 Nov 2001).
+
+ // std::less specialization fixed as reported by George
+ // Heintzelman; partial specialization re-enabled
+ // (Peter Dimov 17 Jan 2002)
+
+//# define BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+ // integral constant expressions with 64 bit numbers fail
+# define BOOST_NO_INTEGRAL_INT64_T
+# endif
+
+# if (__SUNPRO_CC < 0x570)
+# define BOOST_NO_TEMPLATE_TEMPLATES
+ // see http://lists.boost.org/MailArchives/boost/msg47184.php
+ // and http://lists.boost.org/MailArchives/boost/msg47220.php
+# define BOOST_NO_INCLASS_MEMBER_INITIALIZATION
+# define BOOST_NO_SFINAE
+# define BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS
+# endif
+# if (__SUNPRO_CC <= 0x580)
+# define BOOST_NO_IS_ABSTRACT
+# endif
+
+#define BOOST_COMPILER "Sun compiler version " BOOST_STRINGIZE(__SUNPRO_CC)
+
+//
+// versions check:
+// we don't support sunpro prior to version 4:
+#if __SUNPRO_CC < 0x400
+#error "Compiler not supported or configured - please reconfigure"
+#endif
+//
+// last known and checked version is 0x570:
+#if (__SUNPRO_CC > 0x580)
+# if defined(BOOST_ASSERT_CONFIG)
+# error "Unknown compiler version - please run the configure tests and report the results"
+# endif
+#endif
+
+
+
+
+
+
diff --git a/boost/boost/config/compiler/vacpp.hpp b/boost/boost/config/compiler/vacpp.hpp
new file mode 100644
index 00000000000..e085a60d2d5
--- /dev/null
+++ b/boost/boost/config/compiler/vacpp.hpp
@@ -0,0 +1,57 @@
+// (C) Copyright John Maddock 2001 - 2003.
+// (C) Copyright Toon Knapen 2001 - 2003.
+// (C) Copyright Lie-Quan Lee 2001.
+// (C) Copyright Markus Schöpflin 2002 - 2003.
+// (C) Copyright Beman Dawes 2002 - 2003.
+// 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)
+
+// See http://www.boost.org for most recent version.
+
+// Visual Age (IBM) C++ compiler setup:
+
+#if __IBMCPP__ <= 501
+# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+# define BOOST_NO_MEMBER_FUNCTION_SPECIALIZATIONS
+#endif
+
+#if (__IBMCPP__ <= 502)
+// Actually the compiler supports inclass member initialization but it
+// requires a definition for the class member and it doesn't recognize
+// it as an integral constant expression when used as a template argument.
+# define BOOST_NO_INCLASS_MEMBER_INITIALIZATION
+# define BOOST_NO_INTEGRAL_INT64_T
+# define BOOST_NO_MEMBER_TEMPLATE_KEYWORD
+#endif
+
+#if (__IBMCPP__ <= 600) || !defined(BOOST_STRICT_CONFIG)
+# define BOOST_NO_POINTER_TO_MEMBER_TEMPLATE_PARAMETERS
+#endif
+
+//
+// On AIX thread support seems to be indicated by _THREAD_SAFE:
+//
+#ifdef _THREAD_SAFE
+# define BOOST_HAS_THREADS
+#endif
+
+#define BOOST_COMPILER "IBM Visual Age version " BOOST_STRINGIZE(__IBMCPP__)
+
+//
+// versions check:
+// we don't support Visual age prior to version 5:
+#if __IBMCPP__ < 500
+#error "Compiler not supported or configured - please reconfigure"
+#endif
+//
+// last known and checked version is 600:
+#if (__IBMCPP__ > 600)
+# if defined(BOOST_ASSERT_CONFIG)
+# error "Unknown compiler version - please run the configure tests and report the results"
+# endif
+#endif
+
+
+
+
diff --git a/boost/boost/config/compiler/visualc.hpp b/boost/boost/config/compiler/visualc.hpp
new file mode 100644
index 00000000000..2885a418ba9
--- /dev/null
+++ b/boost/boost/config/compiler/visualc.hpp
@@ -0,0 +1,178 @@
+// (C) Copyright John Maddock 2001 - 2003.
+// (C) Copyright Darin Adler 2001 - 2002.
+// (C) Copyright Peter Dimov 2001.
+// (C) Copyright Aleksey Gurtovoy 2002.
+// (C) Copyright David Abrahams 2002 - 2003.
+// (C) Copyright Beman Dawes 2002 - 2003.
+// 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)
+
+// See http://www.boost.org for most recent version.
+
+// Microsoft Visual C++ compiler setup:
+
+#define BOOST_MSVC _MSC_VER
+
+// turn off the warnings before we #include anything
+#pragma warning( disable : 4503 ) // warning: decorated name length exceeded
+
+#if _MSC_VER < 1300 // 1200 == VC++ 6.0, 1200-1202 == eVC++4
+# pragma warning( disable : 4786 ) // ident trunc to '255' chars in debug info
+# define BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS
+# define BOOST_NO_VOID_RETURNS
+# define BOOST_NO_EXCEPTION_STD_NAMESPACE
+ // disable min/max macro defines on vc6:
+ //
+#endif
+
+#if (_MSC_VER <= 1300) // 1300 == VC++ 7.0
+
+# if !defined(_MSC_EXTENSIONS) && !defined(BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS) // VC7 bug with /Za
+# define BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS
+# endif
+
+# define BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS
+# define BOOST_NO_INCLASS_MEMBER_INITIALIZATION
+# define BOOST_NO_PRIVATE_IN_AGGREGATE
+# define BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
+# define BOOST_NO_INTEGRAL_INT64_T
+# define BOOST_NO_DEDUCED_TYPENAME
+# define BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE
+
+// VC++ 6/7 has member templates but they have numerous problems including
+// cases of silent failure, so for safety we define:
+# define BOOST_NO_MEMBER_TEMPLATES
+// For VC++ experts wishing to attempt workarounds, we define:
+# define BOOST_MSVC6_MEMBER_TEMPLATES
+
+# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+# define BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+# define BOOST_NO_CV_VOID_SPECIALIZATIONS
+# define BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+# define BOOST_NO_USING_TEMPLATE
+# define BOOST_NO_SWPRINTF
+# define BOOST_NO_TEMPLATE_TEMPLATES
+# define BOOST_NO_SFINAE
+# define BOOST_NO_POINTER_TO_MEMBER_TEMPLATE_PARAMETERS
+# define BOOST_NO_IS_ABSTRACT
+// TODO: what version is meant here? Have there really been any fixes in cl 12.01 (as e.g. shipped with eVC4)?
+# if (_MSC_VER > 1200)
+# define BOOST_NO_MEMBER_FUNCTION_SPECIALIZATIONS
+# endif
+
+#endif
+
+#if _MSC_VER < 1400
+// although a conforming signature for swprint exists in VC7.1
+// it appears not to actually work:
+# define BOOST_NO_SWPRINTF
+#endif
+
+#if _MSC_VER <= 1400 // 1400 == VC++ 8.0
+# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+#endif
+
+#ifndef _NATIVE_WCHAR_T_DEFINED
+# define BOOST_NO_INTRINSIC_WCHAR_T
+#endif
+
+#ifdef _WIN32_WCE
+# define BOOST_NO_THREADEX
+# define BOOST_NO_GETSYSTEMTIMEASFILETIME
+#endif
+
+//
+// check for exception handling support:
+#ifndef _CPPUNWIND
+# define BOOST_NO_EXCEPTIONS
+#endif
+
+//
+// __int64 support:
+//
+#if (_MSC_VER >= 1200)
+# define BOOST_HAS_MS_INT64
+#endif
+#if (_MSC_VER >= 1310) && defined(_MSC_EXTENSIONS)
+# define BOOST_HAS_LONG_LONG
+#endif
+#if (_MSC_VER >= 1400) && !defined(_DEBUG)
+# define BOOST_HAS_NRVO
+#endif
+//
+// disable Win32 API's if compiler extentions are
+// turned off:
+//
+#ifndef _MSC_EXTENSIONS
+# define BOOST_DISABLE_WIN32
+#endif
+
+//
+// all versions support __declspec:
+//
+#define BOOST_HAS_DECLSPEC
+//
+// prefix and suffix headers:
+//
+#ifndef BOOST_ABI_PREFIX
+# define BOOST_ABI_PREFIX "boost/config/abi/msvc_prefix.hpp"
+#endif
+#ifndef BOOST_ABI_SUFFIX
+# define BOOST_ABI_SUFFIX "boost/config/abi/msvc_suffix.hpp"
+#endif
+
+// TODO:
+// these things are mostly bogus. 1200 means version 12.0 of the compiler. The
+// artificial versions assigned to them only refer to the versions of some IDE
+// these compilers have been shipped with, and even that is not all of it. Some
+// were shipped with freely downloadable SDKs, others as crosscompilers in eVC.
+// IOW, you can't use these 'versions' in any sensible way. Sorry.
+# if defined(UNDER_CE)
+# if _MSC_VER < 1200
+ // Note: these are so far off, they are not really supported
+# elif _MSC_VER < 1300 // eVC++ 4 comes with 1200-1202
+# define BOOST_COMPILER_VERSION evc4.0
+# elif _MSC_VER == 1400
+# define BOOST_COMPILER_VERSION evc8
+# else
+# if defined(BOOST_ASSERT_CONFIG)
+# error "Unknown EVC++ compiler version - please run the configure tests and report the results"
+# else
+# pragma message("Unknown EVC++ compiler version - please run the configure tests and report the results")
+# endif
+# endif
+# else
+# if _MSC_VER < 1200
+ // Note: these are so far off, they are not really supported
+# define BOOST_COMPILER_VERSION 5.0
+# elif _MSC_VER < 1300
+# define BOOST_COMPILER_VERSION 6.0
+# elif _MSC_VER == 1300
+# define BOOST_COMPILER_VERSION 7.0
+# elif _MSC_VER == 1310
+# define BOOST_COMPILER_VERSION 7.1
+# elif _MSC_VER == 1400
+# define BOOST_COMPILER_VERSION 8.0
+# else
+# define BOOST_COMPILER_VERSION _MSC_VER
+# endif
+# endif
+
+#define BOOST_COMPILER "Microsoft Visual C++ version " BOOST_STRINGIZE(BOOST_COMPILER_VERSION)
+
+//
+// versions check:
+// we don't support Visual C++ prior to version 6:
+#if _MSC_VER < 1200
+#error "Compiler not supported or configured - please reconfigure"
+#endif
+//
+// last known and checked version is 1400 (VC8):
+#if (_MSC_VER > 1400)
+# if defined(BOOST_ASSERT_CONFIG)
+# error "Unknown compiler version - please run the configure tests and report the results"
+# else
+# pragma message("Unknown compiler version - please run the configure tests and report the results")
+# endif
+#endif
diff --git a/boost/boost/config/no_tr1/complex.hpp b/boost/boost/config/no_tr1/complex.hpp
new file mode 100644
index 00000000000..ca200922b3c
--- /dev/null
+++ b/boost/boost/config/no_tr1/complex.hpp
@@ -0,0 +1,28 @@
+// (C) Copyright John Maddock 2005.
+// 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)
+//
+// The aim of this header is just to include <complex> but to do
+// so in a way that does not result in recursive inclusion of
+// the Boost TR1 components if boost/tr1/tr1/complex is in the
+// include search path. We have to do this to avoid circular
+// dependencies:
+//
+
+#ifndef BOOST_CONFIG_COMPLEX
+# define BOOST_CONFIG_COMPLEX
+
+# ifndef BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_RECURSION
+# define BOOST_CONFIG_NO_COMPLEX_RECURSION
+# endif
+
+# include <complex>
+
+# ifdef BOOST_CONFIG_NO_COMPLEX_RECURSION
+# undef BOOST_TR1_NO_RECURSION
+# undef BOOST_CONFIG_NO_COMPLEX_RECURSION
+# endif
+
+#endif
diff --git a/boost/boost/config/no_tr1/functional.hpp b/boost/boost/config/no_tr1/functional.hpp
new file mode 100644
index 00000000000..e395efc1977
--- /dev/null
+++ b/boost/boost/config/no_tr1/functional.hpp
@@ -0,0 +1,28 @@
+// (C) Copyright John Maddock 2005.
+// 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)
+//
+// The aim of this header is just to include <functional> but to do
+// so in a way that does not result in recursive inclusion of
+// the Boost TR1 components if boost/tr1/tr1/functional is in the
+// include search path. We have to do this to avoid circular
+// dependencies:
+//
+
+#ifndef BOOST_CONFIG_FUNCTIONAL
+# define BOOST_CONFIG_FUNCTIONAL
+
+# ifndef BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_RECURSION
+# define BOOST_CONFIG_NO_FUNCTIONAL_RECURSION
+# endif
+
+# include <functional>
+
+# ifdef BOOST_CONFIG_NO_FUNCTIONAL_RECURSION
+# undef BOOST_TR1_NO_RECURSION
+# undef BOOST_CONFIG_NO_FUNCTIONAL_RECURSION
+# endif
+
+#endif
diff --git a/boost/boost/config/no_tr1/memory.hpp b/boost/boost/config/no_tr1/memory.hpp
new file mode 100644
index 00000000000..2b5d2080272
--- /dev/null
+++ b/boost/boost/config/no_tr1/memory.hpp
@@ -0,0 +1,28 @@
+// (C) Copyright John Maddock 2005.
+// 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)
+//
+// The aim of this header is just to include <memory> but to do
+// so in a way that does not result in recursive inclusion of
+// the Boost TR1 components if boost/tr1/tr1/memory is in the
+// include search path. We have to do this to avoid circular
+// dependencies:
+//
+
+#ifndef BOOST_CONFIG_MEMORY
+# define BOOST_CONFIG_MEMORY
+
+# ifndef BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_RECURSION
+# define BOOST_CONFIG_NO_MEMORY_RECURSION
+# endif
+
+# include <memory>
+
+# ifdef BOOST_CONFIG_NO_MEMORY_RECURSION
+# undef BOOST_TR1_NO_RECURSION
+# undef BOOST_CONFIG_NO_MEMORY_RECURSION
+# endif
+
+#endif
diff --git a/boost/boost/config/no_tr1/utility.hpp b/boost/boost/config/no_tr1/utility.hpp
new file mode 100644
index 00000000000..dea8f115bce
--- /dev/null
+++ b/boost/boost/config/no_tr1/utility.hpp
@@ -0,0 +1,28 @@
+// (C) Copyright John Maddock 2005.
+// 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)
+//
+// The aim of this header is just to include <utility> but to do
+// so in a way that does not result in recursive inclusion of
+// the Boost TR1 components if boost/tr1/tr1/utility is in the
+// include search path. We have to do this to avoid circular
+// dependencies:
+//
+
+#ifndef BOOST_CONFIG_UTILITY
+# define BOOST_CONFIG_UTILITY
+
+# ifndef BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_RECURSION
+# define BOOST_CONFIG_NO_UTILITY_RECURSION
+# endif
+
+# include <utility>
+
+# ifdef BOOST_CONFIG_NO_UTILITY_RECURSION
+# undef BOOST_TR1_NO_RECURSION
+# undef BOOST_CONFIG_NO_UTILITY_RECURSION
+# endif
+
+#endif
diff --git a/boost/boost/config/platform/aix.hpp b/boost/boost/config/platform/aix.hpp
new file mode 100644
index 00000000000..894ef42ce91
--- /dev/null
+++ b/boost/boost/config/platform/aix.hpp
@@ -0,0 +1,33 @@
+// (C) Copyright John Maddock 2001 - 2002.
+// 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)
+
+// See http://www.boost.org for most recent version.
+
+// IBM/Aix specific config options:
+
+#define BOOST_PLATFORM "IBM Aix"
+
+#define BOOST_HAS_UNISTD_H
+#define BOOST_HAS_NL_TYPES_H
+#define BOOST_HAS_NANOSLEEP
+#define BOOST_HAS_CLOCK_GETTIME
+
+// This needs support in "boost/cstdint.hpp" exactly like FreeBSD.
+// This platform has header named <inttypes.h> which includes all
+// the things needed.
+#define BOOST_HAS_STDINT_H
+
+// Threading API's:
+#define BOOST_HAS_PTHREADS
+#define BOOST_HAS_PTHREAD_DELAY_NP
+#define BOOST_HAS_SCHED_YIELD
+//#define BOOST_HAS_PTHREAD_YIELD
+
+// boilerplate code:
+#include <boost/config/posix_features.hpp>
+
+
+
+
diff --git a/boost/boost/config/platform/amigaos.hpp b/boost/boost/config/platform/amigaos.hpp
new file mode 100644
index 00000000000..34bcf4128b7
--- /dev/null
+++ b/boost/boost/config/platform/amigaos.hpp
@@ -0,0 +1,15 @@
+// (C) Copyright John Maddock 2002.
+// 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)
+
+// See http://www.boost.org for most recent version.
+
+#define BOOST_PLATFORM "AmigaOS"
+
+#define BOOST_DISABLE_THREADS
+#define BOOST_NO_CWCHAR
+#define BOOST_NO_STD_WSTRING
+#define BOOST_NO_INTRINSIC_WCHAR_T
+
+
diff --git a/boost/boost/config/platform/beos.hpp b/boost/boost/config/platform/beos.hpp
new file mode 100644
index 00000000000..48c3d8dc5ba
--- /dev/null
+++ b/boost/boost/config/platform/beos.hpp
@@ -0,0 +1,26 @@
+// (C) Copyright John Maddock 2001.
+// 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)
+
+// See http://www.boost.org for most recent version.
+
+// BeOS specific config options:
+
+#define BOOST_PLATFORM "BeOS"
+
+#define BOOST_NO_CWCHAR
+#define BOOST_NO_CWCTYPE
+#define BOOST_HAS_UNISTD_H
+
+#define BOOST_HAS_BETHREADS
+
+#ifndef BOOST_DISABLE_THREADS
+# define BOOST_HAS_THREADS
+#endif
+
+// boilerplate code:
+#include <boost/config/posix_features.hpp>
+
+
+
diff --git a/boost/boost/config/platform/bsd.hpp b/boost/boost/config/platform/bsd.hpp
new file mode 100644
index 00000000000..df2308503ed
--- /dev/null
+++ b/boost/boost/config/platform/bsd.hpp
@@ -0,0 +1,73 @@
+// (C) Copyright John Maddock 2001 - 2003.
+// (C) Copyright Darin Adler 2001.
+// (C) Copyright Douglas Gregor 2002.
+// 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)
+
+// See http://www.boost.org for most recent version.
+
+// generic BSD config options:
+
+#if !defined(__FreeBSD__) && !defined(__NetBSD__) && !defined(__OpenBSD__) && !defined(__DragonFly__)
+#error "This platform is not BSD"
+#endif
+
+#ifdef __FreeBSD__
+#define BOOST_PLATFORM "FreeBSD " BOOST_STRINGIZE(__FreeBSD__)
+#elif defined(__NetBSD__)
+#define BOOST_PLATFORM "NetBSD " BOOST_STRINGIZE(__NetBSD__)
+#elif defined(__OpenBSD__)
+#define BOOST_PLATFORM "OpenBSD " BOOST_STRINGIZE(__OpenBSD__)
+#elif defined(__DragonFly__)
+#define BOOST_PLATFORM "DragonFly " BOOST_STRINGIZE(__DragonFly__)
+#endif
+
+//
+// is this the correct version check?
+// FreeBSD has <nl_types.h> but does not
+// advertise the fact in <unistd.h>:
+//
+#if (defined(__FreeBSD__) && (__FreeBSD__ >= 3)) || defined(__DragonFly__)
+# define BOOST_HAS_NL_TYPES_H
+#endif
+
+//
+// FreeBSD 3.x has pthreads support, but defines _POSIX_THREADS in <pthread.h>
+// and not in <unistd.h>
+//
+#if (defined(__FreeBSD__) && (__FreeBSD__ <= 3)) || defined(__OpenBSD__)
+# define BOOST_HAS_PTHREADS
+#endif
+
+//
+// No wide character support in the BSD header files:
+//
+#if !(defined(__FreeBSD__) && (__FreeBSD__ >= 5))
+# define BOOST_NO_CWCHAR
+#endif
+//
+// The BSD <ctype.h> has macros only, no functions:
+//
+#if !defined(__OpenBSD__)
+# define BOOST_NO_CTYPE_FUNCTIONS
+#endif
+
+//
+// thread API's not auto detected:
+//
+#define BOOST_HAS_SCHED_YIELD
+#define BOOST_HAS_NANOSLEEP
+#define BOOST_HAS_GETTIMEOFDAY
+#define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE
+#define BOOST_HAS_SIGACTION
+
+// boilerplate code:
+#define BOOST_HAS_UNISTD_H
+#include <boost/config/posix_features.hpp>
+
+
+
+
+
+
diff --git a/boost/boost/config/platform/cygwin.hpp b/boost/boost/config/platform/cygwin.hpp
new file mode 100644
index 00000000000..0fd2ebe2d87
--- /dev/null
+++ b/boost/boost/config/platform/cygwin.hpp
@@ -0,0 +1,48 @@
+// (C) Copyright John Maddock 2001 - 2003.
+// 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)
+
+// See http://www.boost.org for most recent version.
+
+// cygwin specific config options:
+
+#define BOOST_PLATFORM "Cygwin"
+#define BOOST_NO_CWCTYPE
+#define BOOST_NO_CWCHAR
+#define BOOST_NO_SWPRINTF
+#define BOOST_HAS_DIRENT_H
+
+//
+// Threading API:
+// See if we have POSIX threads, if we do use them, otherwise
+// revert to native Win threads.
+#define BOOST_HAS_UNISTD_H
+#include <unistd.h>
+#if defined(_POSIX_THREADS) && (_POSIX_THREADS+0 >= 0) && !defined(BOOST_HAS_WINTHREADS)
+# define BOOST_HAS_PTHREADS
+# define BOOST_HAS_SCHED_YIELD
+# define BOOST_HAS_GETTIMEOFDAY
+# define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE
+# define BOOST_HAS_SIGACTION
+#else
+# if !defined(BOOST_HAS_WINTHREADS)
+# define BOOST_HAS_WINTHREADS
+# endif
+# define BOOST_HAS_FTIME
+#endif
+
+//
+// find out if we have a stdint.h, there should be a better way to do this:
+//
+#include <sys/types.h>
+#ifdef _STDINT_H
+#define BOOST_HAS_STDINT_H
+#endif
+
+// boilerplate code:
+#include <boost/config/posix_features.hpp>
+
+
+
+
diff --git a/boost/boost/config/platform/hpux.hpp b/boost/boost/config/platform/hpux.hpp
new file mode 100644
index 00000000000..57566b70157
--- /dev/null
+++ b/boost/boost/config/platform/hpux.hpp
@@ -0,0 +1,85 @@
+// (C) Copyright John Maddock 2001 - 2003.
+// (C) Copyright Jens Maurer 2001 - 2003.
+// (C) Copyright David Abrahams 2002.
+// (C) Copyright Toon Knapen 2003.
+// (C) Copyright Boris Gubenko 2006.
+// 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)
+
+// See http://www.boost.org for most recent version.
+
+// hpux specific config options:
+
+#define BOOST_PLATFORM "HP-UX"
+
+// In principle, HP-UX has a nice <stdint.h> under the name <inttypes.h>
+// However, it has the following problem:
+// Use of UINT32_C(0) results in "0u l" for the preprocessed source
+// (verifyable with gcc 2.95.3)
+#if (defined(__GNUC__) && (__GNUC__ >= 3)) || defined(__HP_aCC)
+# define BOOST_HAS_STDINT_H
+#endif
+
+#if !(defined(__HP_aCC) || !defined(_INCLUDE__STDC_A1_SOURCE))
+# define BOOST_NO_SWPRINTF
+# define BOOST_NO_CWCTYPE
+#endif
+
+#if defined(__GNUC__)
+# if (__GNUC__ < 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ < 3))
+ // GNU C on HP-UX does not support threads (checked up to gcc 3.3)
+# define BOOST_DISABLE_THREADS
+# elif !defined(BOOST_DISABLE_THREADS)
+ // threads supported from gcc-3.3 onwards:
+# define BOOST_HAS_THREADS
+# define BOOST_HAS_PTHREADS
+# endif
+#elif defined(__HP_aCC) && !defined(BOOST_DISABLE_THREADS)
+# define BOOST_HAS_PTHREADS
+#endif
+
+// boilerplate code:
+#define BOOST_HAS_UNISTD_H
+#include <boost/config/posix_features.hpp>
+
+// the following are always available:
+#ifndef BOOST_HAS_GETTIMEOFDAY
+# define BOOST_HAS_GETTIMEOFDAY
+#endif
+#ifndef BOOST_HAS_SCHED_YIELD
+# define BOOST_HAS_SCHED_YIELD
+#endif
+#ifndef BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE
+# define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE
+#endif
+#ifndef BOOST_HAS_NL_TYPES_H
+# define BOOST_HAS_NL_TYPES_H
+#endif
+#ifndef BOOST_HAS_NANOSLEEP
+# define BOOST_HAS_NANOSLEEP
+#endif
+#ifndef BOOST_HAS_GETTIMEOFDAY
+# define BOOST_HAS_GETTIMEOFDAY
+#endif
+#ifndef BOOST_HAS_DIRENT_H
+# define BOOST_HAS_DIRENT_H
+#endif
+#ifndef BOOST_HAS_CLOCK_GETTIME
+# define BOOST_HAS_CLOCK_GETTIME
+#endif
+#ifndef BOOST_HAS_SIGACTION
+# define BOOST_HAS_SIGACTION
+#endif
+#ifndef BOOST_HAS_NRVO
+# define BOOST_HAS_NRVO
+#endif
+#ifndef BOOST_HAS_LOG1P
+# define BOOST_HAS_LOG1P
+#endif
+#ifndef BOOST_HAS_EXPM1
+# define BOOST_HAS_EXPM1
+#endif
+
+
+
diff --git a/boost/boost/config/platform/irix.hpp b/boost/boost/config/platform/irix.hpp
new file mode 100644
index 00000000000..aeae49c8b49
--- /dev/null
+++ b/boost/boost/config/platform/irix.hpp
@@ -0,0 +1,31 @@
+// (C) Copyright John Maddock 2001 - 2003.
+// (C) Copyright Jens Maurer 2003.
+// 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)
+
+
+// See http://www.boost.org for most recent version.
+
+// SGI Irix specific config options:
+
+#define BOOST_PLATFORM "SGI Irix"
+
+#define BOOST_NO_SWPRINTF
+//
+// these are not auto detected by POSIX feature tests:
+//
+#define BOOST_HAS_GETTIMEOFDAY
+#define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE
+
+#ifdef __GNUC__
+ // GNU C on IRIX does not support threads (checked up to gcc 3.3)
+# define BOOST_DISABLE_THREADS
+#endif
+
+// boilerplate code:
+#define BOOST_HAS_UNISTD_H
+#include <boost/config/posix_features.hpp>
+
+
+
diff --git a/boost/boost/config/platform/linux.hpp b/boost/boost/config/platform/linux.hpp
new file mode 100644
index 00000000000..51ae13347cd
--- /dev/null
+++ b/boost/boost/config/platform/linux.hpp
@@ -0,0 +1,98 @@
+// (C) Copyright John Maddock 2001 - 2003.
+// (C) Copyright Jens Maurer 2001 - 2003.
+// 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)
+
+// See http://www.boost.org for most recent version.
+
+// linux specific config options:
+
+#define BOOST_PLATFORM "linux"
+
+// make sure we have __GLIBC_PREREQ if available at all
+#include <cstdlib>
+
+//
+// <stdint.h> added to glibc 2.1.1
+// We can only test for 2.1 though:
+//
+#if defined(__GLIBC__) && ((__GLIBC__ > 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ >= 1)))
+ // <stdint.h> defines int64_t unconditionally, but <sys/types.h> defines
+ // int64_t only if __GNUC__. Thus, assume a fully usable <stdint.h>
+ // only when using GCC.
+# if defined __GNUC__
+# define BOOST_HAS_STDINT_H
+# endif
+#endif
+
+#if defined(__LIBCOMO__)
+ //
+ // como on linux doesn't have std:: c functions:
+ // NOTE: versions of libcomo prior to beta28 have octal version numbering,
+ // e.g. version 25 is 21 (dec)
+ //
+# if __LIBCOMO_VERSION__ <= 20
+# define BOOST_NO_STDC_NAMESPACE
+# endif
+
+# if __LIBCOMO_VERSION__ <= 21
+# define BOOST_NO_SWPRINTF
+# endif
+
+#endif
+
+//
+// If glibc is past version 2 then we definitely have
+// gettimeofday, earlier versions may or may not have it:
+//
+#if defined(__GLIBC__) && (__GLIBC__ >= 2)
+# define BOOST_HAS_GETTIMEOFDAY
+#endif
+
+#ifdef __USE_POSIX199309
+# define BOOST_HAS_NANOSLEEP
+#endif
+
+#if defined(__GLIBC__) && defined(__GLIBC_PREREQ)
+// __GLIBC_PREREQ is available since 2.1.2
+
+ // swprintf is available since glibc 2.2.0
+# if !__GLIBC_PREREQ(2,2) || (!defined(__USE_ISOC99) && !defined(__USE_UNIX98))
+# define BOOST_NO_SWPRINTF
+# endif
+#else
+# define BOOST_NO_SWPRINTF
+#endif
+
+// boilerplate code:
+#define BOOST_HAS_UNISTD_H
+#include <boost/config/posix_features.hpp>
+
+#ifndef __GNUC__
+//
+// if the compiler is not gcc we still need to be able to parse
+// the GNU system headers, some of which (mainly <stdint.h>)
+// use GNU specific extensions:
+//
+# ifndef __extension__
+# define __extension__
+# endif
+# ifndef __const__
+# define __const__ const
+# endif
+# ifndef __volatile__
+# define __volatile__ volatile
+# endif
+# ifndef __signed__
+# define __signed__ signed
+# endif
+# ifndef __typeof__
+# define __typeof__ typeof
+# endif
+# ifndef __inline__
+# define __inline__ inline
+# endif
+#endif
+
+
diff --git a/boost/boost/config/platform/macos.hpp b/boost/boost/config/platform/macos.hpp
new file mode 100644
index 00000000000..d6877d31127
--- /dev/null
+++ b/boost/boost/config/platform/macos.hpp
@@ -0,0 +1,78 @@
+// (C) Copyright John Maddock 2001 - 2003.
+// (C) Copyright Darin Adler 2001 - 2002.
+// (C) Copyright Bill Kempf 2002.
+// 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)
+
+// See http://www.boost.org for most recent version.
+
+// Mac OS specific config options:
+
+#define BOOST_PLATFORM "Mac OS"
+
+#if __MACH__ && !defined(_MSL_USING_MSL_C)
+
+// Using the Mac OS X system BSD-style C library.
+
+# ifndef BOOST_HAS_UNISTD_H
+# define BOOST_HAS_UNISTD_H
+# endif
+//
+// Begin by including our boilerplate code for POSIX
+// feature detection, this is safe even when using
+// the MSL as Metrowerks supply their own <unistd.h>
+// to replace the platform-native BSD one. G++ users
+// should also always be able to do this on MaxOS X.
+//
+# include <boost/config/posix_features.hpp>
+# ifndef BOOST_HAS_STDINT_H
+# define BOOST_HAS_STDINT_H
+# endif
+
+//
+// BSD runtime has pthreads, sigaction, sched_yield and gettimeofday,
+// of these only pthreads are advertised in <unistd.h>, so set the
+// other options explicitly:
+//
+# define BOOST_HAS_SCHED_YIELD
+# define BOOST_HAS_GETTIMEOFDAY
+# define BOOST_HAS_SIGACTION
+
+# if (__GNUC__ < 3) && !defined( __APPLE_CC__)
+
+// GCC strange "ignore std" mode works better if you pretend everything
+// is in the std namespace, for the most part.
+
+# define BOOST_NO_STDC_NAMESPACE
+# endif
+
+#else
+
+// Using the MSL C library.
+
+// We will eventually support threads in non-Carbon builds, but we do
+// not support this yet.
+# if ( defined(TARGET_API_MAC_CARBON) && TARGET_API_MAC_CARBON ) || ( defined(TARGET_CARBON) && TARGET_CARBON )
+
+# if !defined(BOOST_HAS_PTHREADS)
+# define BOOST_HAS_MPTASKS
+# elif ( __dest_os == __mac_os_x )
+// We are doing a Carbon/Mach-O/MSL build which has pthreads, but only the
+// gettimeofday and no posix.
+# define BOOST_HAS_GETTIMEOFDAY
+# endif
+
+// The MP task implementation of Boost Threads aims to replace MP-unsafe
+// parts of the MSL, so we turn on threads unconditionally.
+# define BOOST_HAS_THREADS
+
+// The remote call manager depends on this.
+# define BOOST_BIND_ENABLE_PASCAL
+
+# endif
+
+#endif
+
+
+
diff --git a/boost/boost/config/platform/qnxnto.hpp b/boost/boost/config/platform/qnxnto.hpp
new file mode 100644
index 00000000000..b1377c8d2c3
--- /dev/null
+++ b/boost/boost/config/platform/qnxnto.hpp
@@ -0,0 +1,31 @@
+// (C) Copyright Jim Douglas 2005.
+// 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)
+
+// See http://www.boost.org for most recent version.
+
+// QNX specific config options:
+
+#define BOOST_PLATFORM "QNX"
+
+#define BOOST_HAS_UNISTD_H
+#include <boost/config/posix_features.hpp>
+
+// QNX claims XOpen version 5 compatibility, but doesn't have an nl_types.h
+// or log1p and expm1:
+#undef BOOST_HAS_NL_TYPES_H
+#undef BOOST_HAS_LOG1P
+#undef BOOST_HAS_EXPM1
+
+#define BOOST_HAS_PTHREADS
+#define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE
+
+#define BOOST_HAS_GETTIMEOFDAY
+#define BOOST_HAS_CLOCK_GETTIME
+#define BOOST_HAS_NANOSLEEP
+
+
+
+
+
diff --git a/boost/boost/config/platform/solaris.hpp b/boost/boost/config/platform/solaris.hpp
new file mode 100644
index 00000000000..700dc3ce67f
--- /dev/null
+++ b/boost/boost/config/platform/solaris.hpp
@@ -0,0 +1,21 @@
+// (C) Copyright John Maddock 2001 - 2003.
+// (C) Copyright Jens Maurer 2003.
+// 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)
+
+// See http://www.boost.org for most recent version.
+
+// sun specific config options:
+
+#define BOOST_PLATFORM "Sun Solaris"
+
+#define BOOST_HAS_GETTIMEOFDAY
+
+// boilerplate code:
+#define BOOST_HAS_UNISTD_H
+#include <boost/config/posix_features.hpp>
+
+
+
+
diff --git a/boost/boost/config/platform/win32.hpp b/boost/boost/config/platform/win32.hpp
new file mode 100644
index 00000000000..9344818f87a
--- /dev/null
+++ b/boost/boost/config/platform/win32.hpp
@@ -0,0 +1,58 @@
+// (C) Copyright John Maddock 2001 - 2003.
+// (C) Copyright Bill Kempf 2001.
+// (C) Copyright Aleksey Gurtovoy 2003.
+// (C) Copyright Rene Rivera 2005.
+// 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)
+
+// See http://www.boost.org for most recent version.
+
+// Win32 specific config options:
+
+#define BOOST_PLATFORM "Win32"
+
+// Get the information about the MinGW runtime, i.e. __MINGW32_*VERSION.
+#if defined(__MINGW32__)
+# include <_mingw.h>
+#endif
+
+#if defined(__GNUC__) && !defined(BOOST_NO_SWPRINTF)
+# define BOOST_NO_SWPRINTF
+#endif
+
+#if !defined(__GNUC__) && !defined(BOOST_HAS_DECLSPEC)
+# define BOOST_HAS_DECLSPEC
+#endif
+
+#if defined(__MINGW32__) && ((__MINGW32_MAJOR_VERSION > 2) || ((__MINGW32_MAJOR_VERSION == 2) && (__MINGW32_MINOR_VERSION >= 0)))
+# define BOOST_HAS_STDINT_H
+# define __STDC_LIMIT_MACROS
+# define BOOST_HAS_DIRENT_H
+# define BOOST_HAS_UNISTD_H
+#endif
+
+//
+// Win32 will normally be using native Win32 threads,
+// but there is a pthread library avaliable as an option,
+// we used to disable this when BOOST_DISABLE_WIN32 was
+// defined but no longer - this should allow some
+// files to be compiled in strict mode - while maintaining
+// a consistent setting of BOOST_HAS_THREADS across
+// all translation units (needed for shared_ptr etc).
+//
+
+#ifdef _WIN32_WCE
+# define BOOST_NO_ANSI_APIS
+#endif
+
+#ifndef BOOST_HAS_PTHREADS
+# define BOOST_HAS_WINTHREADS
+#endif
+
+#ifndef BOOST_DISABLE_WIN32
+// WEK: Added
+#define BOOST_HAS_FTIME
+#define BOOST_WINDOWS 1
+
+#endif
diff --git a/boost/boost/config/posix_features.hpp b/boost/boost/config/posix_features.hpp
new file mode 100644
index 00000000000..d12954797f9
--- /dev/null
+++ b/boost/boost/config/posix_features.hpp
@@ -0,0 +1,95 @@
+// (C) Copyright John Maddock 2001 - 2003.
+// 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)
+
+
+// See http://www.boost.org for most recent version.
+
+// All POSIX feature tests go in this file,
+// Note that we test _POSIX_C_SOURCE and _XOPEN_SOURCE as well
+// _POSIX_VERSION and _XOPEN_VERSION: on some systems POSIX API's
+// may be present but none-functional unless _POSIX_C_SOURCE and
+// _XOPEN_SOURCE have been defined to the right value (it's up
+// to the user to do this *before* including any header, although
+// in most cases the compiler will do this for you).
+
+# if defined(BOOST_HAS_UNISTD_H)
+# include <unistd.h>
+
+ // XOpen has <nl_types.h>, but is this the correct version check?
+# if defined(_XOPEN_VERSION) && (_XOPEN_VERSION >= 3)
+# define BOOST_HAS_NL_TYPES_H
+# endif
+
+ // POSIX version 6 requires <stdint.h>
+# if defined(_POSIX_VERSION) && (_POSIX_VERSION >= 200100)
+# define BOOST_HAS_STDINT_H
+# endif
+
+ // POSIX version 2 requires <dirent.h>
+# if defined(_POSIX_VERSION) && (_POSIX_VERSION >= 199009L)
+# define BOOST_HAS_DIRENT_H
+# endif
+
+ // POSIX version 3 requires <signal.h> to have sigaction:
+# if defined(_POSIX_VERSION) && (_POSIX_VERSION >= 199506L)
+# define BOOST_HAS_SIGACTION
+# endif
+ // POSIX defines _POSIX_THREADS > 0 for pthread support,
+ // however some platforms define _POSIX_THREADS without
+ // a value, hence the (_POSIX_THREADS+0 >= 0) check.
+ // Strictly speaking this may catch platforms with a
+ // non-functioning stub <pthreads.h>, but such occurrences should
+ // occur very rarely if at all.
+# if defined(_POSIX_THREADS) && (_POSIX_THREADS+0 >= 0) && !defined(BOOST_HAS_WINTHREADS) && !defined(BOOST_HAS_MPTASKS)
+# define BOOST_HAS_PTHREADS
+# endif
+
+ // BOOST_HAS_NANOSLEEP:
+ // This is predicated on _POSIX_TIMERS or _XOPEN_REALTIME:
+# if (defined(_POSIX_TIMERS) && (_POSIX_TIMERS+0 >= 0)) \
+ || (defined(_XOPEN_REALTIME) && (_XOPEN_REALTIME+0 >= 0))
+# define BOOST_HAS_NANOSLEEP
+# endif
+
+ // BOOST_HAS_CLOCK_GETTIME:
+ // This is predicated on _POSIX_TIMERS (also on _XOPEN_REALTIME
+ // but at least one platform - linux - defines that flag without
+ // defining clock_gettime):
+# if (defined(_POSIX_TIMERS) && (_POSIX_TIMERS+0 >= 0))
+# define BOOST_HAS_CLOCK_GETTIME
+# endif
+
+ // BOOST_HAS_SCHED_YIELD:
+ // This is predicated on _POSIX_PRIORITY_SCHEDULING or
+ // on _POSIX_THREAD_PRIORITY_SCHEDULING or on _XOPEN_REALTIME.
+# if defined(_POSIX_PRIORITY_SCHEDULING) && (_POSIX_PRIORITY_SCHEDULING+0 > 0)\
+ || (defined(_POSIX_THREAD_PRIORITY_SCHEDULING) && (_POSIX_THREAD_PRIORITY_SCHEDULING+0 > 0))\
+ || (defined(_XOPEN_REALTIME) && (_XOPEN_REALTIME+0 >= 0))
+# define BOOST_HAS_SCHED_YIELD
+# endif
+
+ // BOOST_HAS_GETTIMEOFDAY:
+ // BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE:
+ // These are predicated on _XOPEN_VERSION, and appears to be first released
+ // in issue 4, version 2 (_XOPEN_VERSION > 500).
+ // Likewise for the functions log1p and expm1.
+# if defined(_XOPEN_VERSION) && (_XOPEN_VERSION+0 >= 500)
+# define BOOST_HAS_GETTIMEOFDAY
+# if defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE+0 >= 500)
+# define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE
+# endif
+# ifndef BOOST_HAS_LOG1P
+# define BOOST_HAS_LOG1P
+# endif
+# ifndef BOOST_HAS_EXPM1
+# define BOOST_HAS_EXPM1
+# endif
+# endif
+
+# endif
+
+
+
+
diff --git a/boost/boost/config/requires_threads.hpp b/boost/boost/config/requires_threads.hpp
new file mode 100644
index 00000000000..cfaff23027c
--- /dev/null
+++ b/boost/boost/config/requires_threads.hpp
@@ -0,0 +1,92 @@
+// (C) Copyright John Maddock 2003.
+// 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)
+
+
+#ifndef BOOST_CONFIG_REQUIRES_THREADS_HPP
+#define BOOST_CONFIG_REQUIRES_THREADS_HPP
+
+#ifndef BOOST_CONFIG_HPP
+# include <boost/config.hpp>
+#endif
+
+#if defined(BOOST_DISABLE_THREADS)
+
+//
+// special case to handle versions of gcc which don't currently support threads:
+//
+#if defined(__GNUC__) && ((__GNUC__ < 3) || (__GNUC_MINOR__ <= 3) || !defined(BOOST_STRICT_CONFIG))
+//
+// this is checked up to gcc 3.3:
+//
+#if defined(__sgi) || defined(__hpux)
+# error "Multi-threaded programs are not supported by gcc on HPUX or Irix (last checked with gcc 3.3)"
+#endif
+
+#endif
+
+# error "Threading support unavaliable: it has been explicitly disabled with BOOST_DISABLE_THREADS"
+
+#elif !defined(BOOST_HAS_THREADS)
+
+# if defined __COMO__
+// Comeau C++
+# error "Compiler threading support is not turned on. Please set the correct command line options for threading: -D_MT (Windows) or -D_REENTRANT (Unix)"
+
+#elif defined(__INTEL_COMPILER) || defined(__ICL) || defined(__ICC) || defined(__ECC)
+// Intel
+#ifdef _WIN32
+# error "Compiler threading support is not turned on. Please set the correct command line options for threading: either /MT /MTd /MD or /MDd"
+#else
+# error "Compiler threading support is not turned on. Please set the correct command line options for threading: -openmp"
+#endif
+
+# elif defined __GNUC__
+// GNU C++:
+# error "Compiler threading support is not turned on. Please set the correct command line options for threading: -pthread (Linux), -pthreads (Solaris) or -mthreads (Mingw32)"
+
+#elif defined __sgi
+// SGI MIPSpro C++
+# error "Compiler threading support is not turned on. Please set the correct command line options for threading: -D_SGI_MP_SOURCE"
+
+#elif defined __DECCXX
+// Compaq Tru64 Unix cxx
+# error "Compiler threading support is not turned on. Please set the correct command line options for threading: -pthread"
+
+#elif defined __BORLANDC__
+// Borland
+# error "Compiler threading support is not turned on. Please set the correct command line options for threading: -tWM"
+
+#elif defined __MWERKS__
+// Metrowerks CodeWarrior
+# error "Compiler threading support is not turned on. Please set the correct command line options for threading: either -runtime sm, -runtime smd, -runtime dm, or -runtime dmd"
+
+#elif defined __SUNPRO_CC
+// Sun Workshop Compiler C++
+# error "Compiler threading support is not turned on. Please set the correct command line options for threading: -mt"
+
+#elif defined __HP_aCC
+// HP aCC
+# error "Compiler threading support is not turned on. Please set the correct command line options for threading: -mt"
+
+#elif defined(__IBMCPP__)
+// IBM Visual Age
+# error "Compiler threading support is not turned on. Please compile the code with the xlC_r compiler"
+
+#elif defined _MSC_VER
+// Microsoft Visual C++
+//
+// Must remain the last #elif since some other vendors (Metrowerks, for
+// example) also #define _MSC_VER
+# error "Compiler threading support is not turned on. Please set the correct command line options for threading: either /MT /MTd /MD or /MDd"
+
+#else
+
+# error "Compiler threading support is not turned on. Please consult your compiler's documentation for the appropriate options to use"
+
+#endif // compilers
+
+#endif // BOOST_HAS_THREADS
+
+#endif // BOOST_CONFIG_REQUIRES_THREADS_HPP
diff --git a/boost/boost/config/select_compiler_config.hpp b/boost/boost/config/select_compiler_config.hpp
new file mode 100644
index 00000000000..3c960b3bdec
--- /dev/null
+++ b/boost/boost/config/select_compiler_config.hpp
@@ -0,0 +1,87 @@
+// Boost compiler configuration selection header file
+
+// (C) Copyright John Maddock 2001 - 2003.
+// (C) Copyright Martin Wille 2003.
+// (C) Copyright Guillaume Melquiond 2003.
+// 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)
+
+// See http://www.boost.org for most recent version.
+
+// locate which compiler we are using and define
+// BOOST_COMPILER_CONFIG as needed:
+
+#if defined(__GCCXML__)
+// GCC-XML emulates other compilers, it has to appear first here!
+# define BOOST_COMPILER_CONFIG "boost/config/compiler/gcc_xml.hpp"
+
+#elif defined __COMO__
+// Comeau C++
+# define BOOST_COMPILER_CONFIG "boost/config/compiler/comeau.hpp"
+
+#elif defined __DMC__
+// Digital Mars C++
+# define BOOST_COMPILER_CONFIG "boost/config/compiler/digitalmars.hpp"
+
+#elif defined(__INTEL_COMPILER) || defined(__ICL) || defined(__ICC) || defined(__ECC)
+// Intel
+# define BOOST_COMPILER_CONFIG "boost/config/compiler/intel.hpp"
+
+# elif defined __GNUC__
+// GNU C++:
+# define BOOST_COMPILER_CONFIG "boost/config/compiler/gcc.hpp"
+
+#elif defined __KCC
+// Kai C++
+# define BOOST_COMPILER_CONFIG "boost/config/compiler/kai.hpp"
+
+#elif defined __sgi
+// SGI MIPSpro C++
+# define BOOST_COMPILER_CONFIG "boost/config/compiler/sgi_mipspro.hpp"
+
+#elif defined __DECCXX
+// Compaq Tru64 Unix cxx
+# define BOOST_COMPILER_CONFIG "boost/config/compiler/compaq_cxx.hpp"
+
+#elif defined __ghs
+// Greenhills C++
+# define BOOST_COMPILER_CONFIG "boost/config/compiler/greenhills.hpp"
+
+#elif defined __BORLANDC__
+// Borland
+# define BOOST_COMPILER_CONFIG "boost/config/compiler/borland.hpp"
+
+#elif defined __MWERKS__
+// Metrowerks CodeWarrior
+# define BOOST_COMPILER_CONFIG "boost/config/compiler/metrowerks.hpp"
+
+#elif defined __SUNPRO_CC
+// Sun Workshop Compiler C++
+# define BOOST_COMPILER_CONFIG "boost/config/compiler/sunpro_cc.hpp"
+
+#elif defined __HP_aCC
+// HP aCC
+# define BOOST_COMPILER_CONFIG "boost/config/compiler/hp_acc.hpp"
+
+#elif defined(__MRC__) || defined(__SC__)
+// MPW MrCpp or SCpp
+# define BOOST_COMPILER_CONFIG "boost/config/compiler/mpw.hpp"
+
+#elif defined(__IBMCPP__)
+// IBM Visual Age
+# define BOOST_COMPILER_CONFIG "boost/config/compiler/vacpp.hpp"
+
+#elif defined _MSC_VER
+// Microsoft Visual C++
+//
+// Must remain the last #elif since some other vendors (Metrowerks, for
+// example) also #define _MSC_VER
+# define BOOST_COMPILER_CONFIG "boost/config/compiler/visualc.hpp"
+
+#elif defined (BOOST_ASSERT_CONFIG)
+// this must come last - generate an error if we don't
+// recognise the compiler:
+# error "Unknown compiler - please configure (http://www.boost.org/libs/config/config.htm#configuring) and report the results to the main boost mailing list (http://www.boost.org/more/mailing_lists.htm#main)"
+
+#endif
diff --git a/boost/boost/config/select_platform_config.hpp b/boost/boost/config/select_platform_config.hpp
new file mode 100644
index 00000000000..a4c7ad6a876
--- /dev/null
+++ b/boost/boost/config/select_platform_config.hpp
@@ -0,0 +1,90 @@
+// Boost compiler configuration selection header file
+
+// (C) Copyright John Maddock 2001 - 2002.
+// (C) Copyright Jens Maurer 2001.
+// 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)
+
+// See http://www.boost.org for most recent version.
+
+// locate which platform we are on and define BOOST_PLATFORM_CONFIG as needed.
+// Note that we define the headers to include using "header_name" not
+// <header_name> in order to prevent macro expansion within the header
+// name (for example "linux" is a macro on linux systems).
+
+#if defined(linux) || defined(__linux) || defined(__linux__)
+// linux:
+# define BOOST_PLATFORM_CONFIG "boost/config/platform/linux.hpp"
+
+#elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__)
+// BSD:
+# define BOOST_PLATFORM_CONFIG "boost/config/platform/bsd.hpp"
+
+#elif defined(sun) || defined(__sun)
+// solaris:
+# define BOOST_PLATFORM_CONFIG "boost/config/platform/solaris.hpp"
+
+#elif defined(__sgi)
+// SGI Irix:
+# define BOOST_PLATFORM_CONFIG "boost/config/platform/irix.hpp"
+
+#elif defined(__hpux)
+// hp unix:
+# define BOOST_PLATFORM_CONFIG "boost/config/platform/hpux.hpp"
+
+#elif defined(__CYGWIN__)
+// cygwin is not win32:
+# define BOOST_PLATFORM_CONFIG "boost/config/platform/cygwin.hpp"
+
+#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
+// win32:
+# define BOOST_PLATFORM_CONFIG "boost/config/platform/win32.hpp"
+
+#elif defined(__BEOS__)
+// BeOS
+# define BOOST_PLATFORM_CONFIG "boost/config/platform/beos.hpp"
+
+#elif defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__)
+// MacOS
+# define BOOST_PLATFORM_CONFIG "boost/config/platform/macos.hpp"
+
+#elif defined(__IBMCPP__) || defined(_AIX)
+// IBM
+# define BOOST_PLATFORM_CONFIG "boost/config/platform/aix.hpp"
+
+#elif defined(__amigaos__)
+// AmigaOS
+# define BOOST_PLATFORM_CONFIG "boost/config/platform/amigaos.hpp"
+
+#elif defined(__QNXNTO__)
+// QNX:
+# define BOOST_PLATFORM_CONFIG "boost/config/platform/qnxnto.hpp"
+
+#else
+
+# if defined(unix) \
+ || defined(__unix) \
+ || defined(_XOPEN_SOURCE) \
+ || defined(_POSIX_SOURCE)
+
+ // generic unix platform:
+
+# ifndef BOOST_HAS_UNISTD_H
+# define BOOST_HAS_UNISTD_H
+# endif
+
+# include <boost/config/posix_features.hpp>
+
+# endif
+
+# if defined (BOOST_ASSERT_CONFIG)
+ // this must come last - generate an error if we don't
+ // recognise the platform:
+# error "Unknown platform - please configure and report the results to boost.org"
+# endif
+
+#endif
+
+
+
diff --git a/boost/boost/config/select_stdlib_config.hpp b/boost/boost/config/select_stdlib_config.hpp
new file mode 100644
index 00000000000..13e5e4cef02
--- /dev/null
+++ b/boost/boost/config/select_stdlib_config.hpp
@@ -0,0 +1,68 @@
+// Boost compiler configuration selection header file
+
+// (C) Copyright John Maddock 2001 - 2003.
+// (C) Copyright Jens Maurer 2001 - 2002.
+// 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)
+
+
+// See http://www.boost.org for most recent version.
+
+// locate which std lib we are using and define BOOST_STDLIB_CONFIG as needed:
+
+// we need to include a std lib header here in order to detect which
+// library is in use, use <utility> as it's about the smallest
+// of the std lib headers - do not rely on this header being included -
+// users can short-circuit this header if they know whose std lib
+// they are using.
+
+#include <boost/config/no_tr1/utility.hpp>
+
+#if defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)
+// STLPort library; this _must_ come first, otherwise since
+// STLport typically sits on top of some other library, we
+// can end up detecting that first rather than STLport:
+# define BOOST_STDLIB_CONFIG "boost/config/stdlib/stlport.hpp"
+
+#elif defined(__LIBCOMO__)
+// Comeau STL:
+#define BOOST_STDLIB_CONFIG "boost/config/stdlib/libcomo.hpp"
+
+#elif defined(__STD_RWCOMPILER_H__) || defined(_RWSTD_VER)
+// Rogue Wave library:
+# define BOOST_STDLIB_CONFIG "boost/config/stdlib/roguewave.hpp"
+
+#elif defined(__GLIBCPP__) || defined(__GLIBCXX__)
+// GNU libstdc++ 3
+# define BOOST_STDLIB_CONFIG "boost/config/stdlib/libstdcpp3.hpp"
+
+#elif defined(__STL_CONFIG_H)
+// generic SGI STL
+# define BOOST_STDLIB_CONFIG "boost/config/stdlib/sgi.hpp"
+
+#elif defined(__MSL_CPP__)
+// MSL standard lib:
+# define BOOST_STDLIB_CONFIG "boost/config/stdlib/msl.hpp"
+
+#elif defined(__IBMCPP__)
+// take the default VACPP std lib
+# define BOOST_STDLIB_CONFIG "boost/config/stdlib/vacpp.hpp"
+
+#elif defined(MSIPL_COMPILE_H)
+// Modena C++ standard library
+# define BOOST_STDLIB_CONFIG "boost/config/stdlib/modena.hpp"
+
+#elif (defined(_YVALS) && !defined(__IBMCPP__)) || defined(_CPPLIB_VER)
+// Dinkumware Library (this has to appear after any possible replacement libraries):
+# define BOOST_STDLIB_CONFIG "boost/config/stdlib/dinkumware.hpp"
+
+#elif defined (BOOST_ASSERT_CONFIG)
+// this must come last - generate an error if we don't
+// recognise the library:
+# error "Unknown standard library - please configure and report the results to boost.org"
+
+#endif
+
+
+
diff --git a/boost/boost/config/stdlib/dinkumware.hpp b/boost/boost/config/stdlib/dinkumware.hpp
new file mode 100644
index 00000000000..01f1238d934
--- /dev/null
+++ b/boost/boost/config/stdlib/dinkumware.hpp
@@ -0,0 +1,106 @@
+// (C) Copyright John Maddock 2001 - 2003.
+// (C) Copyright Jens Maurer 2001.
+// (C) Copyright Peter Dimov 2001.
+// (C) Copyright David Abrahams 2002.
+// (C) Copyright Guillaume Melquiond 2003.
+// 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)
+
+// See http://www.boost.org for most recent version.
+
+// Dinkumware standard library config:
+
+#if !defined(_YVALS) && !defined(_CPPLIB_VER)
+#include <boost/config/no_tr1/utility.hpp>
+#if !defined(_YVALS) && !defined(_CPPLIB_VER)
+#error This is not the Dinkumware lib!
+#endif
+#endif
+
+
+#if defined(_CPPLIB_VER) && (_CPPLIB_VER >= 306)
+ // full dinkumware 3.06 and above
+ // fully conforming provided the compiler supports it:
+# if !(defined(_GLOBAL_USING) && (_GLOBAL_USING+0 > 0)) && !defined(__BORLANDC__) && !defined(_STD) && !(defined(__ICC) && (__ICC >= 700)) // can be defined in yvals.h
+# define BOOST_NO_STDC_NAMESPACE
+# endif
+# if !(defined(_HAS_MEMBER_TEMPLATES_REBIND) && (_HAS_MEMBER_TEMPLATES_REBIND+0 > 0)) && !(defined(_MSC_VER) && (_MSC_VER > 1300)) && defined(BOOST_MSVC)
+# define BOOST_NO_STD_ALLOCATOR
+# endif
+# define BOOST_HAS_PARTIAL_STD_ALLOCATOR
+# if defined(BOOST_MSVC) && (BOOST_MSVC < 1300)
+ // if this lib version is set up for vc6 then there is no std::use_facet:
+# define BOOST_NO_STD_USE_FACET
+# define BOOST_HAS_TWO_ARG_USE_FACET
+ // C lib functions aren't in namespace std either:
+# define BOOST_NO_STDC_NAMESPACE
+ // and nor is <exception>
+# define BOOST_NO_EXCEPTION_STD_NAMESPACE
+# endif
+// There's no numeric_limits<long long> support unless _LONGLONG is defined:
+# if !defined(_LONGLONG) && (_CPPLIB_VER <= 310)
+# define BOOST_NO_MS_INT64_NUMERIC_LIMITS
+# endif
+// 3.06 appears to have (non-sgi versions of) <hash_set> & <hash_map>,
+// and no <slist> at all
+#else
+# define BOOST_MSVC_STD_ITERATOR 1
+# define BOOST_NO_STD_ITERATOR
+# define BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS
+# define BOOST_NO_STD_ALLOCATOR
+# define BOOST_NO_STDC_NAMESPACE
+# define BOOST_NO_STD_USE_FACET
+# define BOOST_NO_STD_OUTPUT_ITERATOR_ASSIGN
+# define BOOST_HAS_MACRO_USE_FACET
+# ifndef _CPPLIB_VER
+ // Updated Dinkum library defines this, and provides
+ // its own min and max definitions.
+# define BOOST_NO_STD_MIN_MAX
+# define BOOST_NO_MS_INT64_NUMERIC_LIMITS
+# endif
+#endif
+
+//
+// std extension namespace is stdext for vc7.1 and later,
+// the same applies to other compilers that sit on top
+// of vc7.1 (Intel and Comeau):
+//
+#if defined(_MSC_VER) && (_MSC_VER >= 1310) && !defined(__BORLANDC__)
+# define BOOST_STD_EXTENSION_NAMESPACE stdext
+#endif
+
+
+#if (defined(_MSC_VER) && (_MSC_VER <= 1300) && !defined(__BORLANDC__)) || !defined(_CPPLIB_VER) || (_CPPLIB_VER < 306)
+ // if we're using a dinkum lib that's
+ // been configured for VC6/7 then there is
+ // no iterator traits (true even for icl)
+# define BOOST_NO_STD_ITERATOR_TRAITS
+#endif
+
+#if defined(__ICL) && (__ICL < 800) && defined(_CPPLIB_VER) && (_CPPLIB_VER <= 310)
+// Intel C++ chokes over any non-trivial use of <locale>
+// this may be an overly restrictive define, but regex fails without it:
+# define BOOST_NO_STD_LOCALE
+#endif
+
+#ifdef _CPPLIB_VER
+# define BOOST_DINKUMWARE_STDLIB _CPPLIB_VER
+#else
+# define BOOST_DINKUMWARE_STDLIB 1
+#endif
+
+#ifdef _CPPLIB_VER
+# define BOOST_STDLIB "Dinkumware standard library version " BOOST_STRINGIZE(_CPPLIB_VER)
+#else
+# define BOOST_STDLIB "Dinkumware standard library version 1.x"
+#endif
+
+
+
+
+
+
+
+
+
diff --git a/boost/boost/config/stdlib/libcomo.hpp b/boost/boost/config/stdlib/libcomo.hpp
new file mode 100644
index 00000000000..749781fecee
--- /dev/null
+++ b/boost/boost/config/stdlib/libcomo.hpp
@@ -0,0 +1,46 @@
+// (C) Copyright John Maddock 2002 - 2003.
+// (C) Copyright Jens Maurer 2002 - 2003.
+// (C) Copyright Beman Dawes 2002 - 2003.
+// 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)
+
+// See http://www.boost.org for most recent version.
+
+// Comeau STL:
+
+#if !defined(__LIBCOMO__)
+# include <boost/config/no_tr1/utility.hpp>
+# if !defined(__LIBCOMO__)
+# error "This is not the Comeau STL!"
+# endif
+#endif
+
+//
+// std::streambuf<wchar_t> is non-standard
+// NOTE: versions of libcomo prior to beta28 have octal version numbering,
+// e.g. version 25 is 21 (dec)
+#if __LIBCOMO_VERSION__ <= 22
+# define BOOST_NO_STD_WSTREAMBUF
+#endif
+
+#if (__LIBCOMO_VERSION__ <= 31) && defined(_WIN32)
+#define BOOST_NO_SWPRINTF
+#endif
+
+#if __LIBCOMO_VERSION__ >= 31
+# define BOOST_HAS_HASH
+# define BOOST_HAS_SLIST
+#endif
+
+//
+// Intrinsic type_traits support.
+// The SGI STL has it's own __type_traits class, which
+// has intrinsic compiler support with SGI's compilers.
+// Whatever map SGI style type traits to boost equivalents:
+//
+#define BOOST_HAS_SGI_TYPE_TRAITS
+
+#define BOOST_STDLIB "Comeau standard library " BOOST_STRINGIZE(__LIBCOMO_VERSION__)
+
+
diff --git a/boost/boost/config/stdlib/libstdcpp3.hpp b/boost/boost/config/stdlib/libstdcpp3.hpp
new file mode 100644
index 00000000000..7bbe604f7fd
--- /dev/null
+++ b/boost/boost/config/stdlib/libstdcpp3.hpp
@@ -0,0 +1,73 @@
+// (C) Copyright John Maddock 2001.
+// (C) Copyright Jens Maurer 2001.
+// 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)
+
+// See http://www.boost.org for most recent version.
+
+// config for libstdc++ v3
+// not much to go in here:
+
+#ifdef __GLIBCXX__
+#define BOOST_STDLIB "GNU libstdc++ version " BOOST_STRINGIZE(__GLIBCXX__)
+#else
+#define BOOST_STDLIB "GNU libstdc++ version " BOOST_STRINGIZE(__GLIBCPP__)
+#endif
+
+#if !defined(_GLIBCPP_USE_WCHAR_T) && !defined(_GLIBCXX_USE_WCHAR_T)
+# define BOOST_NO_CWCHAR
+# define BOOST_NO_CWCTYPE
+# define BOOST_NO_STD_WSTRING
+# define BOOST_NO_STD_WSTREAMBUF
+#endif
+
+#if defined(__osf__) && !defined(_REENTRANT) \
+ && ( defined(_GLIBCXX_HAVE_GTHR_DEFAULT) || defined(_GLIBCPP_HAVE_GTHR_DEFAULT) )
+// GCC 3 on Tru64 forces the definition of _REENTRANT when any std lib header
+// file is included, therefore for consistency we define it here as well.
+# define _REENTRANT
+#endif
+
+#ifdef __GLIBCXX__ // gcc 3.4 and greater:
+# if defined(_GLIBCXX_HAVE_GTHR_DEFAULT) \
+ || defined(_GLIBCXX__PTHREADS)
+ //
+ // If the std lib has thread support turned on, then turn it on in Boost
+ // as well. We do this because some gcc-3.4 std lib headers define _REENTANT
+ // while others do not...
+ //
+# define BOOST_HAS_THREADS
+# else
+# define BOOST_DISABLE_THREADS
+# endif
+#elif defined(__GLIBCPP__) \
+ && !defined(_GLIBCPP_HAVE_GTHR_DEFAULT) \
+ && !defined(_GLIBCPP__PTHREADS)
+ // disable thread support if the std lib was built single threaded:
+# define BOOST_DISABLE_THREADS
+#endif
+
+#if (defined(linux) || defined(__linux) || defined(__linux__)) && defined(__arm__) && defined(_GLIBCPP_HAVE_GTHR_DEFAULT)
+// linux on arm apparently doesn't define _REENTRANT
+// so just turn on threading support whenever the std lib is thread safe:
+# define BOOST_HAS_THREADS
+#endif
+
+
+#if !defined(_GLIBCPP_USE_LONG_LONG) \
+ && !defined(_GLIBCXX_USE_LONG_LONG)\
+ && defined(BOOST_HAS_LONG_LONG)
+// May have been set by compiler/*.hpp, but "long long" without library
+// support is useless.
+# undef BOOST_HAS_LONG_LONG
+#endif
+
+#if defined(__GLIBCXX__) || (defined(__GLIBCPP__) && __GLIBCPP__>=20020514) // GCC >= 3.1.0
+# define BOOST_STD_EXTENSION_NAMESPACE __gnu_cxx
+# define BOOST_HAS_SLIST
+# define BOOST_HAS_HASH
+# define BOOST_SLIST_HEADER <ext/slist>
+# define BOOST_HASH_SET_HEADER <ext/hash_set>
+# define BOOST_HASH_MAP_HEADER <ext/hash_map>
+#endif
diff --git a/boost/boost/config/stdlib/modena.hpp b/boost/boost/config/stdlib/modena.hpp
new file mode 100644
index 00000000000..3d0f76be9f3
--- /dev/null
+++ b/boost/boost/config/stdlib/modena.hpp
@@ -0,0 +1,30 @@
+// (C) Copyright Jens Maurer 2001.
+// 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)
+
+// See http://www.boost.org for most recent version.
+
+// Modena C++ standard library (comes with KAI C++)
+
+#if !defined(MSIPL_COMPILE_H)
+# include <boost/config/no_tr1/utility.hpp>
+# if !defined(__MSIPL_COMPILE_H)
+# error "This is not the Modena C++ library!"
+# endif
+#endif
+
+#ifndef MSIPL_NL_TYPES
+#define BOOST_NO_STD_MESSAGES
+#endif
+
+#ifndef MSIPL_WCHART
+#define BOOST_NO_STD_WSTRING
+#endif
+
+#define BOOST_STDLIB "Modena C++ standard library"
+
+
+
+
+
diff --git a/boost/boost/config/stdlib/msl.hpp b/boost/boost/config/stdlib/msl.hpp
new file mode 100644
index 00000000000..f8d8752bf77
--- /dev/null
+++ b/boost/boost/config/stdlib/msl.hpp
@@ -0,0 +1,59 @@
+// (C) Copyright John Maddock 2001.
+// (C) Copyright Darin Adler 2001.
+// 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)
+
+// See http://www.boost.org for most recent version.
+
+// Metrowerks standard library:
+
+#ifndef __MSL_CPP__
+# include <boost/config/no_tr1/utility.hpp>
+# ifndef __MSL_CPP__
+# error This is not the MSL standard library!
+# endif
+#endif
+
+#if __MSL_CPP__ >= 0x6000 // Pro 6
+# define BOOST_HAS_HASH
+# define BOOST_STD_EXTENSION_NAMESPACE Metrowerks
+#endif
+#define BOOST_HAS_SLIST
+
+#if __MSL_CPP__ < 0x6209
+# define BOOST_NO_STD_MESSAGES
+#endif
+
+// check C lib version for <stdint.h>
+#include <cstddef>
+
+#if defined(__MSL__) && (__MSL__ >= 0x5000)
+# define BOOST_HAS_STDINT_H
+# if !defined(__PALMOS_TRAPS__)
+# define BOOST_HAS_UNISTD_H
+# endif
+ // boilerplate code:
+# include <boost/config/posix_features.hpp>
+#endif
+
+#if defined(_MWMT) || _MSL_THREADSAFE
+# define BOOST_HAS_THREADS
+#endif
+
+#ifdef _MSL_NO_EXPLICIT_FUNC_TEMPLATE_ARG
+# define BOOST_NO_STD_USE_FACET
+# define BOOST_HAS_TWO_ARG_USE_FACET
+#endif
+
+
+#define BOOST_STDLIB "Metrowerks Standard Library version " BOOST_STRINGIZE(__MSL_CPP__)
+
+
+
+
+
+
+
+
+
diff --git a/boost/boost/config/stdlib/roguewave.hpp b/boost/boost/config/stdlib/roguewave.hpp
new file mode 100644
index 00000000000..49d0106dd27
--- /dev/null
+++ b/boost/boost/config/stdlib/roguewave.hpp
@@ -0,0 +1,127 @@
+// (C) Copyright John Maddock 2001 - 2003.
+// (C) Copyright Jens Maurer 2001.
+// (C) Copyright David Abrahams 2003.
+// 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)
+
+// See http://www.boost.org for most recent version.
+
+// Rogue Wave std lib:
+
+#if !defined(__STD_RWCOMPILER_H__) && !defined(_RWSTD_VER)
+# include <boost/config/no_tr1/utility.hpp>
+# if !defined(__STD_RWCOMPILER_H__) && !defined(_RWSTD_VER)
+# error This is not the Rogue Wave standard library
+# endif
+#endif
+//
+// figure out a consistent version number:
+//
+#ifndef _RWSTD_VER
+# define BOOST_RWSTD_VER 0x010000
+#elif _RWSTD_VER < 0x010000
+# define BOOST_RWSTD_VER (_RWSTD_VER << 8)
+#else
+# define BOOST_RWSTD_VER _RWSTD_VER
+#endif
+
+#ifndef _RWSTD_VER
+# define BOOST_STDLIB "Rogue Wave standard library version (Unknown version)"
+#else
+# define BOOST_STDLIB "Rogue Wave standard library version " BOOST_STRINGIZE(_RWSTD_VER)
+#endif
+
+//
+// Prior to version 2.2.0 the primary template for std::numeric_limits
+// does not have compile time constants, even though specializations of that
+// template do:
+//
+#if BOOST_RWSTD_VER < 0x020200
+# define BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+#endif
+
+// Sun CC 5.5 patch 113817-07 adds long long specialization, but does not change the
+// library version number (http://sunsolve6.sun.com/search/document.do?assetkey=1-21-113817):
+#if BOOST_RWSTD_VER <= 0x020101 && (!defined(__SUNPRO_CC) || (__SUNPRO_CC < 0x550))
+# define BOOST_NO_LONG_LONG_NUMERIC_LIMITS
+# endif
+
+//
+// Borland version of numeric_limits lacks __int64 specialisation:
+//
+#ifdef __BORLANDC__
+# define BOOST_NO_MS_INT64_NUMERIC_LIMITS
+#endif
+
+//
+// No std::iterator if it can't figure out default template args:
+//
+#if defined(_RWSTD_NO_SIMPLE_DEFAULT_TEMPLATES) || defined(RWSTD_NO_SIMPLE_DEFAULT_TEMPLATES) || (BOOST_RWSTD_VER < 0x020000)
+# define BOOST_NO_STD_ITERATOR
+#endif
+
+//
+// No iterator traits without partial specialization:
+//
+#if defined(_RWSTD_NO_CLASS_PARTIAL_SPEC) || defined(RWSTD_NO_CLASS_PARTIAL_SPEC)
+# define BOOST_NO_STD_ITERATOR_TRAITS
+#endif
+
+//
+// Prior to version 2.0, std::auto_ptr was buggy, and there were no
+// new-style iostreams, and no conformant std::allocator:
+//
+#if (BOOST_RWSTD_VER < 0x020000)
+# define BOOST_NO_AUTO_PTR
+# define BOOST_NO_STRINGSTREAM
+# define BOOST_NO_STD_ALLOCATOR
+# define BOOST_NO_STD_LOCALE
+#endif
+
+//
+// No template iterator constructors without member template support:
+//
+#if defined(RWSTD_NO_MEMBER_TEMPLATES) || defined(_RWSTD_NO_MEMBER_TEMPLATES)
+# define BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS
+#endif
+
+//
+// RW defines _RWSTD_ALLOCATOR if the allocator is conformant and in use
+// (the or _HPACC_ part is a hack - the library seems to define _RWSTD_ALLOCATOR
+// on HP aCC systems even though the allocator is in fact broken):
+//
+#if !defined(_RWSTD_ALLOCATOR) || (defined(__HP_aCC) && __HP_aCC <= 33100)
+# define BOOST_NO_STD_ALLOCATOR
+#endif
+
+//
+// If we have a std::locale, we still may not have std::use_facet:
+//
+#if defined(_RWSTD_NO_TEMPLATE_ON_RETURN_TYPE) && !defined(BOOST_NO_STD_LOCALE)
+# define BOOST_NO_STD_USE_FACET
+# define BOOST_HAS_TWO_ARG_USE_FACET
+#endif
+
+//
+// There's no std::distance prior to version 2, or without
+// partial specialization support:
+//
+#if (BOOST_RWSTD_VER < 0x020000) || defined(_RWSTD_NO_CLASS_PARTIAL_SPEC)
+ #define BOOST_NO_STD_DISTANCE
+#endif
+
+//
+// Some versions of the rogue wave library don't have assignable
+// OutputIterators:
+//
+#if BOOST_RWSTD_VER < 0x020100
+# define BOOST_NO_STD_OUTPUT_ITERATOR_ASSIGN
+#endif
+
+//
+// Disable BOOST_HAS_LONG_LONG when the library has no support for it.
+//
+#if !defined(_RWSTD_LONG_LONG) && defined(BOOST_HAS_LONG_LONG)
+# undef BOOST_HAS_LONG_LONG
+#endif
diff --git a/boost/boost/config/stdlib/sgi.hpp b/boost/boost/config/stdlib/sgi.hpp
new file mode 100644
index 00000000000..f3fa05b2603
--- /dev/null
+++ b/boost/boost/config/stdlib/sgi.hpp
@@ -0,0 +1,111 @@
+// (C) Copyright John Maddock 2001 - 2003.
+// (C) Copyright Darin Adler 2001.
+// (C) Copyright Jens Maurer 2001 - 2003.
+// 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)
+
+// See http://www.boost.org for most recent version.
+
+// generic SGI STL:
+
+#if !defined(__STL_CONFIG_H)
+# include <boost/config/no_tr1/utility.hpp>
+# if !defined(__STL_CONFIG_H)
+# error "This is not the SGI STL!"
+# endif
+#endif
+
+//
+// No std::iterator traits without partial specialisation:
+//
+#if !defined(__STL_CLASS_PARTIAL_SPECIALIZATION)
+# define BOOST_NO_STD_ITERATOR_TRAITS
+#endif
+
+//
+// No std::stringstream with gcc < 3
+//
+#if defined(__GNUC__) && (__GNUC__ < 3) && \
+ ((__GNUC_MINOR__ < 95) || (__GNUC_MINOR__ == 96)) && \
+ !defined(__STL_USE_NEW_IOSTREAMS) || \
+ defined(__APPLE_CC__)
+ // Note that we only set this for GNU C++ prior to 2.95 since the
+ // latest patches for that release do contain a minimal <sstream>
+ // If you are running a 2.95 release prior to 2.95.3 then this will need
+ // setting, but there is no way to detect that automatically (other
+ // than by running the configure script).
+ // Also, the unofficial GNU C++ 2.96 included in RedHat 7.1 doesn't
+ // have <sstream>.
+# define BOOST_NO_STRINGSTREAM
+#endif
+
+//
+// Assume no std::locale without own iostreams (this may be an
+// incorrect assumption in some cases):
+//
+#if !defined(__SGI_STL_OWN_IOSTREAMS) && !defined(__STL_USE_NEW_IOSTREAMS)
+# define BOOST_NO_STD_LOCALE
+#endif
+
+//
+// Original native SGI streams have non-standard std::messages facet:
+//
+#if defined(__sgi) && (_COMPILER_VERSION <= 650) && !defined(__SGI_STL_OWN_IOSTREAMS)
+# define BOOST_NO_STD_LOCALE
+#endif
+
+//
+// SGI's new iostreams have missing "const" in messages<>::open
+//
+#if defined(__sgi) && (_COMPILER_VERSION <= 740) && defined(__STL_USE_NEW_IOSTREAMS)
+# define BOOST_NO_STD_MESSAGES
+#endif
+
+//
+// No template iterator constructors, or std::allocator
+// without member templates:
+//
+#if !defined(__STL_MEMBER_TEMPLATES)
+# define BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS
+# define BOOST_NO_STD_ALLOCATOR
+#endif
+
+//
+// We always have SGI style hash_set, hash_map, and slist:
+//
+#define BOOST_HAS_HASH
+#define BOOST_HAS_SLIST
+
+//
+// If this is GNU libstdc++2, then no <limits> and no std::wstring:
+//
+#if (defined(__GNUC__) && (__GNUC__ < 3))
+# include <string>
+# if defined(__BASTRING__)
+# define BOOST_NO_LIMITS
+// Note: <boost/limits.hpp> will provide compile-time constants
+# undef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+# define BOOST_NO_STD_WSTRING
+# endif
+#endif
+
+//
+// There is no standard iterator unless we have namespace support:
+//
+#if !defined(__STL_USE_NAMESPACES)
+# define BOOST_NO_STD_ITERATOR
+#endif
+
+//
+// Intrinsic type_traits support.
+// The SGI STL has it's own __type_traits class, which
+// has intrinsic compiler support with SGI's compilers.
+// Whatever map SGI style type traits to boost equivalents:
+//
+#define BOOST_HAS_SGI_TYPE_TRAITS
+
+#define BOOST_STDLIB "SGI standard library"
+
+
+
diff --git a/boost/boost/config/stdlib/stlport.hpp b/boost/boost/config/stdlib/stlport.hpp
new file mode 100644
index 00000000000..98fdd43490f
--- /dev/null
+++ b/boost/boost/config/stdlib/stlport.hpp
@@ -0,0 +1,201 @@
+// (C) Copyright John Maddock 2001 - 2002.
+// (C) Copyright Darin Adler 2001.
+// (C) Copyright Jens Maurer 2001.
+// 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)
+
+// See http://www.boost.org for most recent version.
+
+// STLPort standard library config:
+
+#if !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION)
+# include <boost/config/no_tr1/utility.hpp>
+# if !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION)
+# error "This is not STLPort!"
+# endif
+#endif
+
+//
+// __STL_STATIC_CONST_INIT_BUG implies BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+// for versions prior to 4.1(beta)
+//
+#if (defined(__STL_STATIC_CONST_INIT_BUG) || defined(_STLP_STATIC_CONST_INIT_BUG)) && (__SGI_STL_PORT <= 0x400)
+# define BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+#endif
+
+//
+// If STLport thinks that there is no partial specialisation, then there is no
+// std::iterator traits:
+//
+#if !(defined(_STLP_CLASS_PARTIAL_SPECIALIZATION) || defined(__STL_CLASS_PARTIAL_SPECIALIZATION))
+# define BOOST_NO_STD_ITERATOR_TRAITS
+#endif
+
+//
+// No new style iostreams on GCC without STLport's iostreams enabled:
+//
+#if (defined(__GNUC__) && (__GNUC__ < 3)) && !(defined(__SGI_STL_OWN_IOSTREAMS) || defined(_STLP_OWN_IOSTREAMS))
+# define BOOST_NO_STRINGSTREAM
+#endif
+
+//
+// No new iostreams implies no std::locale, and no std::stringstream:
+//
+#if defined(__STL_NO_IOSTREAMS) || defined(__STL_NO_NEW_IOSTREAMS) || defined(_STLP_NO_IOSTREAMS) || defined(_STLP_NO_NEW_IOSTREAMS)
+# define BOOST_NO_STD_LOCALE
+# define BOOST_NO_STRINGSTREAM
+#endif
+
+//
+// If the streams are not native, and we have a "using ::x" compiler bug
+// then the io stream facets are not available in namespace std::
+//
+#ifdef _STLPORT_VERSION
+# if !(_STLPORT_VERSION >= 0x500) && !defined(_STLP_OWN_IOSTREAMS) && defined(_STLP_USE_NAMESPACES) && defined(BOOST_NO_USING_TEMPLATE) && !defined(__BORLANDC__)
+# define BOOST_NO_STD_LOCALE
+# endif
+#else
+# if !defined(__SGI_STL_OWN_IOSTREAMS) && defined(__STL_USE_NAMESPACES) && defined(BOOST_NO_USING_TEMPLATE) && !defined(__BORLANDC__)
+# define BOOST_NO_STD_LOCALE
+# endif
+#endif
+
+//
+// Without member template support enabled, their are no template
+// iterate constructors, and no std::allocator:
+//
+#if !(defined(__STL_MEMBER_TEMPLATES) || defined(_STLP_MEMBER_TEMPLATES))
+# define BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS
+# define BOOST_NO_STD_ALLOCATOR
+#endif
+//
+// however we always have at least a partial allocator:
+//
+#define BOOST_HAS_PARTIAL_STD_ALLOCATOR
+
+#if !defined(_STLP_MEMBER_TEMPLATE_CLASSES) || defined(_STLP_DONT_SUPPORT_REBIND_MEMBER_TEMPLATE)
+# define BOOST_NO_STD_ALLOCATOR
+#endif
+
+#if defined(_STLP_NO_MEMBER_TEMPLATE_KEYWORD) && defined(BOOST_MSVC) && (BOOST_MSVC <= 1300)
+# define BOOST_NO_STD_ALLOCATOR
+#endif
+
+//
+// If STLport thinks there is no wchar_t at all, then we have to disable
+// the support for the relevant specilazations of std:: templates.
+//
+#if !defined(_STLP_HAS_WCHAR_T) && !defined(_STLP_WCHAR_T_IS_USHORT)
+# ifndef BOOST_NO_STD_WSTRING
+# define BOOST_NO_STD_WSTRING
+# endif
+# ifndef BOOST_NO_STD_WSTREAMBUF
+# define BOOST_NO_STD_WSTREAMBUF
+# endif
+#endif
+
+//
+// We always have SGI style hash_set, hash_map, and slist:
+//
+#define BOOST_HAS_HASH
+#define BOOST_HAS_SLIST
+
+//
+// STLport does a good job of importing names into namespace std::,
+// but doesn't always get them all, define BOOST_NO_STDC_NAMESPACE, since our
+// workaround does not conflict with STLports:
+//
+//
+// Harold Howe says:
+// Borland switched to STLport in BCB6. Defining BOOST_NO_STDC_NAMESPACE with
+// BCB6 does cause problems. If we detect C++ Builder, then don't define
+// BOOST_NO_STDC_NAMESPACE
+//
+#if !defined(__BORLANDC__) && !defined(__DMC__)
+//
+// If STLport is using it's own namespace, and the real names are in
+// the global namespace, then we duplicate STLport's using declarations
+// (by defining BOOST_NO_STDC_NAMESPACE), we do this because STLport doesn't
+// necessarily import all the names we need into namespace std::
+//
+# if (defined(__STL_IMPORT_VENDOR_CSTD) \
+ || defined(__STL_USE_OWN_NAMESPACE) \
+ || defined(_STLP_IMPORT_VENDOR_CSTD) \
+ || defined(_STLP_USE_OWN_NAMESPACE)) \
+ && (defined(__STL_VENDOR_GLOBAL_CSTD) || defined (_STLP_VENDOR_GLOBAL_CSTD))
+# define BOOST_NO_STDC_NAMESPACE
+# define BOOST_NO_EXCEPTION_STD_NAMESPACE
+# endif
+#elif defined(__BORLANDC__) && __BORLANDC__ < 0x560
+// STLport doesn't import std::abs correctly:
+#include <stdlib.h>
+namespace std { using ::abs; }
+// and strcmp/strcpy don't get imported either ('cos they are macros)
+#include <string.h>
+#ifdef strcpy
+# undef strcpy
+#endif
+#ifdef strcmp
+# undef strcmp
+#endif
+#ifdef _STLP_VENDOR_CSTD
+namespace std{ using _STLP_VENDOR_CSTD::strcmp; using _STLP_VENDOR_CSTD::strcpy; }
+#endif
+#endif
+
+//
+// std::use_facet may be non-standard, uses a class instead:
+//
+#if defined(__STL_NO_EXPLICIT_FUNCTION_TMPL_ARGS) || defined(_STLP_NO_EXPLICIT_FUNCTION_TMPL_ARGS)
+# define BOOST_NO_STD_USE_FACET
+# define BOOST_HAS_STLP_USE_FACET
+#endif
+
+//
+// If STLport thinks there are no wide functions, <cwchar> etc. is not working; but
+// only if BOOST_NO_STDC_NAMESPACE is not defined (if it is then we do the import
+// into std:: ourselves).
+//
+#if defined(_STLP_NO_NATIVE_WIDE_FUNCTIONS) && !defined(BOOST_NO_STDC_NAMESPACE)
+# define BOOST_NO_CWCHAR
+# define BOOST_NO_CWCTYPE
+#endif
+
+//
+// If STLport for some reason was configured so that it thinks that wchar_t
+// is not an intrinsic type, then we have to disable the support for it as
+// well (we would be missing required specializations otherwise).
+//
+#if !defined( _STLP_HAS_WCHAR_T) || defined(_STLP_WCHAR_T_IS_USHORT)
+# undef BOOST_NO_INTRINSIC_WCHAR_T
+# define BOOST_NO_INTRINSIC_WCHAR_T
+#endif
+
+//
+// Borland ships a version of STLport with C++ Builder 6 that lacks
+// hashtables and the like:
+//
+#if defined(__BORLANDC__) && (__BORLANDC__ == 0x560)
+# undef BOOST_HAS_HASH
+#endif
+
+//
+// gcc-2.95.3/STLPort does not like the using declarations we use to get ADL with std::min/max
+//
+#if defined(__GNUC__) && (__GNUC__ < 3)
+# include <algorithm> // for std::min and std::max
+# define BOOST_USING_STD_MIN() ((void)0)
+# define BOOST_USING_STD_MAX() ((void)0)
+namespace boost { using std::min; using std::max; }
+#endif
+
+#define BOOST_STDLIB "STLPort standard library version " BOOST_STRINGIZE(__SGI_STL_PORT)
+
+
+
+
+
+
+
+
diff --git a/boost/boost/config/stdlib/vacpp.hpp b/boost/boost/config/stdlib/vacpp.hpp
new file mode 100644
index 00000000000..8321ee0ccf9
--- /dev/null
+++ b/boost/boost/config/stdlib/vacpp.hpp
@@ -0,0 +1,18 @@
+// (C) Copyright John Maddock 2001 - 2002.
+// 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)
+
+// See http://www.boost.org for most recent version.
+
+#if __IBMCPP__ <= 501
+# define BOOST_NO_STD_ALLOCATOR
+#endif
+
+#define BOOST_HAS_MACRO_USE_FACET
+#define BOOST_NO_STD_MESSAGES
+
+#define BOOST_STDLIB "Visual Age default standard library"
+
+
+
diff --git a/boost/boost/config/suffix.hpp b/boost/boost/config/suffix.hpp
new file mode 100644
index 00000000000..61a8d46a234
--- /dev/null
+++ b/boost/boost/config/suffix.hpp
@@ -0,0 +1,569 @@
+// Boost config.hpp configuration header file ------------------------------//
+
+// (C) Copyright John Maddock 2001 - 2003.
+// (C) Copyright Darin Adler 2001.
+// (C) Copyright Peter Dimov 2001.
+// (C) Copyright Bill Kempf 2002.
+// (C) Copyright Jens Maurer 2002.
+// (C) Copyright David Abrahams 2002 - 2003.
+// (C) Copyright Gennaro Prota 2003.
+// (C) Copyright Eric Friedman 2003.
+// 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)
+
+// See http://www.boost.org for most recent version.
+
+// Boost config.hpp policy and rationale documentation has been moved to
+// http://www.boost.org/libs/config
+//
+// This file is intended to be stable, and relatively unchanging.
+// It should contain boilerplate code only - no compiler specific
+// code unless it is unavoidable - no changes unless unavoidable.
+
+#ifndef BOOST_CONFIG_SUFFIX_HPP
+#define BOOST_CONFIG_SUFFIX_HPP
+
+//
+// look for long long by looking for the appropriate macros in <limits.h>.
+// Note that we use limits.h rather than climits for maximal portability,
+// remember that since these just declare a bunch of macros, there should be
+// no namespace issues from this.
+//
+#if !defined(BOOST_HAS_LONG_LONG) \
+ && !defined(BOOST_MSVC) && !defined(__BORLANDC__)
+# include <limits.h>
+# if (defined(ULLONG_MAX) || defined(ULONG_LONG_MAX) || defined(ULONGLONG_MAX))
+# define BOOST_HAS_LONG_LONG
+# endif
+#endif
+
+// GCC 3.x will clean up all of those nasty macro definitions that
+// BOOST_NO_CTYPE_FUNCTIONS is intended to help work around, so undefine
+// it under GCC 3.x.
+#if defined(__GNUC__) && (__GNUC__ >= 3) && defined(BOOST_NO_CTYPE_FUNCTIONS)
+# undef BOOST_NO_CTYPE_FUNCTIONS
+#endif
+
+
+//
+// Assume any extensions are in namespace std:: unless stated otherwise:
+//
+# ifndef BOOST_STD_EXTENSION_NAMESPACE
+# define BOOST_STD_EXTENSION_NAMESPACE std
+# endif
+
+//
+// If cv-qualified specializations are not allowed, then neither are cv-void ones:
+//
+# if defined(BOOST_NO_CV_SPECIALIZATIONS) \
+ && !defined(BOOST_NO_CV_VOID_SPECIALIZATIONS)
+# define BOOST_NO_CV_VOID_SPECIALIZATIONS
+# endif
+
+//
+// If there is no numeric_limits template, then it can't have any compile time
+// constants either!
+//
+# if defined(BOOST_NO_LIMITS) \
+ && !defined(BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS)
+# define BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+# define BOOST_NO_MS_INT64_NUMERIC_LIMITS
+# define BOOST_NO_LONG_LONG_NUMERIC_LIMITS
+# endif
+
+//
+// if there is no long long then there is no specialisation
+// for numeric_limits<long long> either:
+//
+#if !defined(BOOST_HAS_LONG_LONG) && !defined(BOOST_NO_LONG_LONG_NUMERIC_LIMITS)
+# define BOOST_NO_LONG_LONG_NUMERIC_LIMITS
+#endif
+
+//
+// if there is no __int64 then there is no specialisation
+// for numeric_limits<__int64> either:
+//
+#if !defined(BOOST_HAS_MS_INT64) && !defined(BOOST_NO_MS_INT64_NUMERIC_LIMITS)
+# define BOOST_NO_MS_INT64_NUMERIC_LIMITS
+#endif
+
+//
+// if member templates are supported then so is the
+// VC6 subset of member templates:
+//
+# if !defined(BOOST_NO_MEMBER_TEMPLATES) \
+ && !defined(BOOST_MSVC6_MEMBER_TEMPLATES)
+# define BOOST_MSVC6_MEMBER_TEMPLATES
+# endif
+
+//
+// Without partial specialization, can't test for partial specialisation bugs:
+//
+# if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
+ && !defined(BOOST_BCB_PARTIAL_SPECIALIZATION_BUG)
+# define BOOST_BCB_PARTIAL_SPECIALIZATION_BUG
+# endif
+
+//
+// Without partial specialization, we can't have array-type partial specialisations:
+//
+# if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
+ && !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)
+# define BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS
+# endif
+
+//
+// Without partial specialization, std::iterator_traits can't work:
+//
+# if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
+ && !defined(BOOST_NO_STD_ITERATOR_TRAITS)
+# define BOOST_NO_STD_ITERATOR_TRAITS
+# endif
+
+//
+// Without member template support, we can't have template constructors
+// in the standard library either:
+//
+# if defined(BOOST_NO_MEMBER_TEMPLATES) \
+ && !defined(BOOST_MSVC6_MEMBER_TEMPLATES) \
+ && !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS)
+# define BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS
+# endif
+
+//
+// Without member template support, we can't have a conforming
+// std::allocator template either:
+//
+# if defined(BOOST_NO_MEMBER_TEMPLATES) \
+ && !defined(BOOST_MSVC6_MEMBER_TEMPLATES) \
+ && !defined(BOOST_NO_STD_ALLOCATOR)
+# define BOOST_NO_STD_ALLOCATOR
+# endif
+
+//
+// without ADL support then using declarations will break ADL as well:
+//
+#if defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP) && !defined(BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL)
+# define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL
+#endif
+
+//
+// If we have a standard allocator, then we have a partial one as well:
+//
+#if !defined(BOOST_NO_STD_ALLOCATOR)
+# define BOOST_HAS_PARTIAL_STD_ALLOCATOR
+#endif
+
+//
+// We can't have a working std::use_facet if there is no std::locale:
+//
+# if defined(BOOST_NO_STD_LOCALE) && !defined(BOOST_NO_STD_USE_FACET)
+# define BOOST_NO_STD_USE_FACET
+# endif
+
+//
+// We can't have a std::messages facet if there is no std::locale:
+//
+# if defined(BOOST_NO_STD_LOCALE) && !defined(BOOST_NO_STD_MESSAGES)
+# define BOOST_NO_STD_MESSAGES
+# endif
+
+//
+// We can't have a working std::wstreambuf if there is no std::locale:
+//
+# if defined(BOOST_NO_STD_LOCALE) && !defined(BOOST_NO_STD_WSTREAMBUF)
+# define BOOST_NO_STD_WSTREAMBUF
+# endif
+
+//
+// We can't have a <cwctype> if there is no <cwchar>:
+//
+# if defined(BOOST_NO_CWCHAR) && !defined(BOOST_NO_CWCTYPE)
+# define BOOST_NO_CWCTYPE
+# endif
+
+//
+// We can't have a swprintf if there is no <cwchar>:
+//
+# if defined(BOOST_NO_CWCHAR) && !defined(BOOST_NO_SWPRINTF)
+# define BOOST_NO_SWPRINTF
+# endif
+
+//
+// If Win32 support is turned off, then we must turn off
+// threading support also, unless there is some other
+// thread API enabled:
+//
+#if defined(BOOST_DISABLE_WIN32) && defined(_WIN32) \
+ && !defined(BOOST_DISABLE_THREADS) && !defined(BOOST_HAS_PTHREADS)
+# define BOOST_DISABLE_THREADS
+#endif
+
+//
+// Turn on threading support if the compiler thinks that it's in
+// multithreaded mode. We put this here because there are only a
+// limited number of macros that identify this (if there's any missing
+// from here then add to the appropriate compiler section):
+//
+#if (defined(__MT__) || defined(_MT) || defined(_REENTRANT) \
+ || defined(_PTHREADS)) && !defined(BOOST_HAS_THREADS)
+# define BOOST_HAS_THREADS
+#endif
+
+//
+// Turn threading support off if BOOST_DISABLE_THREADS is defined:
+//
+#if defined(BOOST_DISABLE_THREADS) && defined(BOOST_HAS_THREADS)
+# undef BOOST_HAS_THREADS
+#endif
+
+//
+// Turn threading support off if we don't recognise the threading API:
+//
+#if defined(BOOST_HAS_THREADS) && !defined(BOOST_HAS_PTHREADS)\
+ && !defined(BOOST_HAS_WINTHREADS) && !defined(BOOST_HAS_BETHREADS)\
+ && !defined(BOOST_HAS_MPTASKS)
+# undef BOOST_HAS_THREADS
+#endif
+
+//
+// Turn threading detail macros off if we don't (want to) use threading
+//
+#ifndef BOOST_HAS_THREADS
+# undef BOOST_HAS_PTHREADS
+# undef BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE
+# undef BOOST_HAS_WINTHREADS
+# undef BOOST_HAS_BETHREADS
+# undef BOOST_HAS_MPTASKS
+#endif
+
+//
+// If the compiler claims to be C99 conformant, then it had better
+// have a <stdint.h>:
+//
+# if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901)
+# define BOOST_HAS_STDINT_H
+# ifndef BOOST_HAS_LOG1P
+# define BOOST_HAS_LOG1P
+# endif
+# ifndef BOOST_HAS_EXPM1
+# define BOOST_HAS_EXPM1
+# endif
+# endif
+
+//
+// Define BOOST_NO_SLIST and BOOST_NO_HASH if required.
+// Note that this is for backwards compatibility only.
+//
+# ifndef BOOST_HAS_SLIST
+# define BOOST_NO_SLIST
+# endif
+
+# ifndef BOOST_HAS_HASH
+# define BOOST_NO_HASH
+# endif
+
+//
+// Set BOOST_SLIST_HEADER if not set already:
+//
+#if defined(BOOST_HAS_SLIST) && !defined(BOOST_SLIST_HEADER)
+# define BOOST_SLIST_HEADER <slist>
+#endif
+
+//
+// Set BOOST_HASH_SET_HEADER if not set already:
+//
+#if defined(BOOST_HAS_HASH) && !defined(BOOST_HASH_SET_HEADER)
+# define BOOST_HASH_SET_HEADER <hash_set>
+#endif
+
+//
+// Set BOOST_HASH_MAP_HEADER if not set already:
+//
+#if defined(BOOST_HAS_HASH) && !defined(BOOST_HASH_MAP_HEADER)
+# define BOOST_HASH_MAP_HEADER <hash_map>
+#endif
+
+// BOOST_HAS_ABI_HEADERS
+// This macro gets set if we have headers that fix the ABI,
+// and prevent ODR violations when linking to external libraries:
+#if defined(BOOST_ABI_PREFIX) && defined(BOOST_ABI_SUFFIX) && !defined(BOOST_HAS_ABI_HEADERS)
+# define BOOST_HAS_ABI_HEADERS
+#endif
+
+#if defined(BOOST_HAS_ABI_HEADERS) && defined(BOOST_DISABLE_ABI_HEADERS)
+# undef BOOST_HAS_ABI_HEADERS
+#endif
+
+// BOOST_NO_STDC_NAMESPACE workaround --------------------------------------//
+// Because std::size_t usage is so common, even in boost headers which do not
+// otherwise use the C library, the <cstddef> workaround is included here so
+// that ugly workaround code need not appear in many other boost headers.
+// NOTE WELL: This is a workaround for non-conforming compilers; <cstddef>
+// must still be #included in the usual places so that <cstddef> inclusion
+// works as expected with standard conforming compilers. The resulting
+// double inclusion of <cstddef> is harmless.
+
+# ifdef BOOST_NO_STDC_NAMESPACE
+# include <cstddef>
+ namespace std { using ::ptrdiff_t; using ::size_t; }
+# endif
+
+// Workaround for the unfortunate min/max macros defined by some platform headers
+
+#define BOOST_PREVENT_MACRO_SUBSTITUTION
+
+#ifndef BOOST_USING_STD_MIN
+# define BOOST_USING_STD_MIN() using std::min
+#endif
+
+#ifndef BOOST_USING_STD_MAX
+# define BOOST_USING_STD_MAX() using std::max
+#endif
+
+// BOOST_NO_STD_MIN_MAX workaround -----------------------------------------//
+
+# ifdef BOOST_NO_STD_MIN_MAX
+
+namespace std {
+ template <class _Tp>
+ inline const _Tp& min BOOST_PREVENT_MACRO_SUBSTITUTION (const _Tp& __a, const _Tp& __b) {
+ return __b < __a ? __b : __a;
+ }
+ template <class _Tp>
+ inline const _Tp& max BOOST_PREVENT_MACRO_SUBSTITUTION (const _Tp& __a, const _Tp& __b) {
+ return __a < __b ? __b : __a;
+ }
+}
+
+# endif
+
+// BOOST_STATIC_CONSTANT workaround --------------------------------------- //
+// On compilers which don't allow in-class initialization of static integral
+// constant members, we must use enums as a workaround if we want the constants
+// to be available at compile-time. This macro gives us a convenient way to
+// declare such constants.
+
+# ifdef BOOST_NO_INCLASS_MEMBER_INITIALIZATION
+# define BOOST_STATIC_CONSTANT(type, assignment) enum { assignment }
+# else
+# define BOOST_STATIC_CONSTANT(type, assignment) static const type assignment
+# endif
+
+// BOOST_USE_FACET / HAS_FACET workaround ----------------------------------//
+// When the standard library does not have a conforming std::use_facet there
+// are various workarounds available, but they differ from library to library.
+// The same problem occurs with has_facet.
+// These macros provide a consistent way to access a locale's facets.
+// Usage:
+// replace
+// std::use_facet<Type>(loc);
+// with
+// BOOST_USE_FACET(Type, loc);
+// Note do not add a std:: prefix to the front of BOOST_USE_FACET!
+// Use for BOOST_HAS_FACET is analagous.
+
+#if defined(BOOST_NO_STD_USE_FACET)
+# ifdef BOOST_HAS_TWO_ARG_USE_FACET
+# define BOOST_USE_FACET(Type, loc) std::use_facet(loc, static_cast<Type*>(0))
+# define BOOST_HAS_FACET(Type, loc) std::has_facet(loc, static_cast<Type*>(0))
+# elif defined(BOOST_HAS_MACRO_USE_FACET)
+# define BOOST_USE_FACET(Type, loc) std::_USE(loc, Type)
+# define BOOST_HAS_FACET(Type, loc) std::_HAS(loc, Type)
+# elif defined(BOOST_HAS_STLP_USE_FACET)
+# define BOOST_USE_FACET(Type, loc) (*std::_Use_facet<Type >(loc))
+# define BOOST_HAS_FACET(Type, loc) std::has_facet< Type >(loc)
+# endif
+#else
+# define BOOST_USE_FACET(Type, loc) std::use_facet< Type >(loc)
+# define BOOST_HAS_FACET(Type, loc) std::has_facet< Type >(loc)
+#endif
+
+// BOOST_NESTED_TEMPLATE workaround ------------------------------------------//
+// Member templates are supported by some compilers even though they can't use
+// the A::template member<U> syntax, as a workaround replace:
+//
+// typedef typename A::template rebind<U> binder;
+//
+// with:
+//
+// typedef typename A::BOOST_NESTED_TEMPLATE rebind<U> binder;
+
+#ifndef BOOST_NO_MEMBER_TEMPLATE_KEYWORD
+# define BOOST_NESTED_TEMPLATE template
+#else
+# define BOOST_NESTED_TEMPLATE
+#endif
+
+// BOOST_UNREACHABLE_RETURN(x) workaround -------------------------------------//
+// Normally evaluates to nothing, unless BOOST_NO_UNREACHABLE_RETURN_DETECTION
+// is defined, in which case it evaluates to return x; Use when you have a return
+// statement that can never be reached.
+
+#ifdef BOOST_NO_UNREACHABLE_RETURN_DETECTION
+# define BOOST_UNREACHABLE_RETURN(x) return x;
+#else
+# define BOOST_UNREACHABLE_RETURN(x)
+#endif
+
+// BOOST_DEDUCED_TYPENAME workaround ------------------------------------------//
+//
+// Some compilers don't support the use of `typename' for dependent
+// types in deduced contexts, e.g.
+//
+// template <class T> void f(T, typename T::type);
+// ^^^^^^^^
+// Replace these declarations with:
+//
+// template <class T> void f(T, BOOST_DEDUCED_TYPENAME T::type);
+
+#ifndef BOOST_NO_DEDUCED_TYPENAME
+# define BOOST_DEDUCED_TYPENAME typename
+#else
+# define BOOST_DEDUCED_TYPENAME
+#endif
+
+// long long workaround ------------------------------------------//
+// On gcc (and maybe other compilers?) long long is alway supported
+// but it's use may generate either warnings (with -ansi), or errors
+// (with -pedantic -ansi) unless it's use is prefixed by __extension__
+//
+#if defined(BOOST_HAS_LONG_LONG)
+namespace boost{
+# ifdef __GNUC__
+ __extension__ typedef long long long_long_type;
+ __extension__ typedef unsigned long long ulong_long_type;
+# else
+ typedef long long long_long_type;
+ typedef unsigned long long ulong_long_type;
+# endif
+}
+#endif
+
+// BOOST_[APPEND_]EXPLICIT_TEMPLATE_[NON_]TYPE macros --------------------------//
+//
+// Some compilers have problems with function templates whose
+// template parameters don't appear in the function parameter
+// list (basically they just link one instantiation of the
+// template in the final executable). These macros provide a
+// uniform way to cope with the problem with no effects on the
+// calling syntax.
+
+// Example:
+//
+// #include <iostream>
+// #include <ostream>
+// #include <typeinfo>
+//
+// template <int n>
+// void f() { std::cout << n << ' '; }
+//
+// template <typename T>
+// void g() { std::cout << typeid(T).name() << ' '; }
+//
+// int main() {
+// f<1>();
+// f<2>();
+//
+// g<int>();
+// g<double>();
+// }
+//
+// With VC++ 6.0 the output is:
+//
+// 2 2 double double
+//
+// To fix it, write
+//
+// template <int n>
+// void f(BOOST_EXPLICIT_TEMPLATE_NON_TYPE(int, n)) { ... }
+//
+// template <typename T>
+// void g(BOOST_EXPLICIT_TEMPLATE_TYPE(T)) { ... }
+//
+
+
+#if defined BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS
+
+# include "boost/type.hpp"
+# include "boost/non_type.hpp"
+
+# define BOOST_EXPLICIT_TEMPLATE_TYPE(t) boost::type<t>* = 0
+# define BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(t) boost::type<t>*
+# define BOOST_EXPLICIT_TEMPLATE_NON_TYPE(t, v) boost::non_type<t, v>* = 0
+# define BOOST_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v) boost::non_type<t, v>*
+
+# define BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(t) \
+ , BOOST_EXPLICIT_TEMPLATE_TYPE(t)
+# define BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE_SPEC(t) \
+ , BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(t)
+# define BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(t, v) \
+ , BOOST_EXPLICIT_TEMPLATE_NON_TYPE(t, v)
+# define BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v) \
+ , BOOST_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v)
+
+#else
+
+// no workaround needed: expand to nothing
+
+# define BOOST_EXPLICIT_TEMPLATE_TYPE(t)
+# define BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(t)
+# define BOOST_EXPLICIT_TEMPLATE_NON_TYPE(t, v)
+# define BOOST_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v)
+
+# define BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(t)
+# define BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE_SPEC(t)
+# define BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(t, v)
+# define BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v)
+
+
+#endif // defined BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS
+
+
+// ---------------------------------------------------------------------------//
+
+//
+// Helper macro BOOST_STRINGIZE:
+// Converts the parameter X to a string after macro replacement
+// on X has been performed.
+//
+#define BOOST_STRINGIZE(X) BOOST_DO_STRINGIZE(X)
+#define BOOST_DO_STRINGIZE(X) #X
+
+//
+// Helper macro BOOST_JOIN:
+// The following piece of macro magic joins the two
+// arguments together, even when one of the arguments is
+// itself a macro (see 16.3.1 in C++ standard). The key
+// is that macro expansion of macro arguments does not
+// occur in BOOST_DO_JOIN2 but does in BOOST_DO_JOIN.
+//
+#define BOOST_JOIN( X, Y ) BOOST_DO_JOIN( X, Y )
+#define BOOST_DO_JOIN( X, Y ) BOOST_DO_JOIN2(X,Y)
+#define BOOST_DO_JOIN2( X, Y ) X##Y
+
+//
+// Set some default values for compiler/library/platform names.
+// These are for debugging config setup only:
+//
+# ifndef BOOST_COMPILER
+# define BOOST_COMPILER "Unknown ISO C++ Compiler"
+# endif
+# ifndef BOOST_STDLIB
+# define BOOST_STDLIB "Unknown ISO standard library"
+# endif
+# ifndef BOOST_PLATFORM
+# if defined(unix) || defined(__unix) || defined(_XOPEN_SOURCE) \
+ || defined(_POSIX_SOURCE)
+# define BOOST_PLATFORM "Generic Unix"
+# else
+# define BOOST_PLATFORM "Unknown"
+# endif
+# endif
+
+#endif
+
+
+
+
diff --git a/boost/boost/config/user.hpp b/boost/boost/config/user.hpp
new file mode 100644
index 00000000000..5a4a9d47762
--- /dev/null
+++ b/boost/boost/config/user.hpp
@@ -0,0 +1,124 @@
+// boost/config/user.hpp ---------------------------------------------------//
+
+// (C) Copyright John Maddock 2001.
+// 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)
+
+// Do not check in modified versions of this file,
+// This file may be customized by the end user, but not by boost.
+
+//
+// Use this file to define a site and compiler specific
+// configuration policy:
+//
+
+// define this to locate a compiler config file:
+// #define BOOST_COMPILER_CONFIG <myheader>
+
+// define this to locate a stdlib config file:
+// #define BOOST_STDLIB_CONFIG <myheader>
+
+// define this to locate a platform config file:
+// #define BOOST_PLATFORM_CONFIG <myheader>
+
+// define this to disable compiler config,
+// use if your compiler config has nothing to set:
+// #define BOOST_NO_COMPILER_CONFIG
+
+// define this to disable stdlib config,
+// use if your stdlib config has nothing to set:
+// #define BOOST_NO_STDLIB_CONFIG
+
+// define this to disable platform config,
+// use if your platform config has nothing to set:
+// #define BOOST_NO_PLATFORM_CONFIG
+
+// define this to disable all config options,
+// excluding the user config. Use if your
+// setup is fully ISO compliant, and has no
+// useful extensions, or for autoconf generated
+// setups:
+// #define BOOST_NO_CONFIG
+
+// define this to make the config "optimistic"
+// about unknown compiler versions. Normally
+// unknown compiler versions are assumed to have
+// all the defects of the last known version, however
+// setting this flag, causes the config to assume
+// that unknown compiler versions are fully conformant
+// with the standard:
+// #define BOOST_STRICT_CONFIG
+
+// define this to cause the config to halt compilation
+// with an #error if it encounters anything unknown --
+// either an unknown compiler version or an unknown
+// compiler/platform/library:
+// #define BOOST_ASSERT_CONFIG
+
+
+// define if you want to disable threading support, even
+// when available:
+// #define BOOST_DISABLE_THREADS
+
+// define when you want to disable Win32 specific features
+// even when available:
+// #define BOOST_DISABLE_WIN32
+
+// BOOST_DISABLE_ABI_HEADERS: Stops boost headers from including any
+// prefix/suffix headers that normally control things like struct
+// packing and alignment.
+// #define BOOST_DISABLE_ABI_HEADERS
+
+// BOOST_ABI_PREFIX: A prefix header to include in place of whatever
+// boost.config would normally select, any replacement should set up
+// struct packing and alignment options as required.
+// #define BOOST_ABI_PREFIX my-header-name
+
+// BOOST_ABI_SUFFIX: A suffix header to include in place of whatever
+// boost.config would normally select, any replacement should undo
+// the effects of the prefix header.
+// #define BOOST_ABI_SUFFIX my-header-name
+
+// BOOST_ALL_DYN_LINK: Forces all libraries that have separate source,
+// to be linked as dll's rather than static libraries on Microsoft Windows
+// (this macro is used to turn on __declspec(dllimport) modifiers, so that
+// the compiler knows which symbols to look for in a dll rather than in a
+// static library). Note that there may be some libraries that can only
+// be statically linked (Boost.Test for example) and others which may only
+// be dynamically linked (Boost.Threads for example), in these cases this
+// macro has no effect.
+// #define BOOST_ALL_DYN_LINK
+
+// BOOST_WHATEVER_DYN_LINK: Forces library "whatever" to be linked as a dll
+// rather than a static library on Microsoft Windows: replace the WHATEVER
+// part of the macro name with the name of the library that you want to
+// dynamically link to, for example use BOOST_DATE_TIME_DYN_LINK or
+// BOOST_REGEX_DYN_LINK etc (this macro is used to turn on __declspec(dllimport)
+// modifiers, so that the compiler knows which symbols to look for in a dll
+// rather than in a static library).
+// Note that there may be some libraries that can only be statically linked
+// (Boost.Test for example) and others which may only be dynamically linked
+// (Boost.Threads for example), in these cases this macro is unsupported.
+// #define BOOST_WHATEVER_DYN_LINK
+
+// BOOST_ALL_NO_LIB: Tells the config system not to automatically select
+// which libraries to link against.
+// Normally if a compiler supports #pragma lib, then the correct library
+// build variant will be automatically selected and linked against,
+// simply by the act of including one of that library's headers.
+// This macro turns that feature off.
+// #define BOOST_ALL_NO_LIB
+
+// BOOST_WHATEVER_NO_LIB: Tells the config system not to automatically
+// select which library to link against for library "whatever",
+// replace WHATEVER in the macro name with the name of the library;
+// for example BOOST_DATE_TIME_NO_LIB or BOOST_REGEX_NO_LIB.
+// Normally if a compiler supports #pragma lib, then the correct library
+// build variant will be automatically selected and linked against, simply
+// by the act of including one of that library's headers. This macro turns
+// that feature off.
+// #define BOOST_WHATEVER_NO_LIB
+
+
+
diff --git a/boost/boost/crc.hpp b/boost/boost/crc.hpp
new file mode 100644
index 00000000000..e70c8340337
--- /dev/null
+++ b/boost/boost/crc.hpp
@@ -0,0 +1,1106 @@
+// Boost CRC library crc.hpp header file -----------------------------------//
+
+// Copyright 2001, 2004 Daryle Walker. Use, modification, and distribution are
+// subject to the Boost Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or a copy at <http://www.boost.org/LICENSE_1_0.txt>.)
+
+// See <http://www.boost.org/libs/crc/> for the library's home page.
+
+#ifndef BOOST_CRC_HPP
+#define BOOST_CRC_HPP
+
+#include <boost/config.hpp> // for BOOST_STATIC_CONSTANT, etc.
+#include <boost/integer.hpp> // for boost::uint_t
+
+#include <climits> // for CHAR_BIT, etc.
+#include <cstddef> // for std::size_t
+
+#include <boost/limits.hpp> // for std::numeric_limits
+
+
+// The type of CRC parameters that can go in a template should be related
+// on the CRC's bit count. This macro expresses that type in a compact
+// form, but also allows an alternate type for compilers that don't support
+// dependent types (in template value-parameters).
+#if !(defined(BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS) || (defined(BOOST_MSVC) && (BOOST_MSVC <= 1300)))
+#define BOOST_CRC_PARM_TYPE typename ::boost::uint_t<Bits>::fast
+#else
+#define BOOST_CRC_PARM_TYPE unsigned long
+#endif
+
+// Some compilers [MS VC++ 6] cannot correctly set up several versions of a
+// function template unless every template argument can be unambiguously
+// deduced from the function arguments. (The bug is hidden if only one version
+// is needed.) Since all of the CRC function templates have this problem, the
+// workaround is to make up a dummy function argument that encodes the template
+// arguments. Calls to such template functions need all their template
+// arguments explicitly specified. At least one compiler that needs this
+// workaround also needs the default value for the dummy argument to be
+// specified in the definition.
+#if defined(__GNUC__) || !defined(BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS)
+#define BOOST_CRC_DUMMY_PARM_TYPE
+#define BOOST_CRC_DUMMY_INIT
+#define BOOST_ACRC_DUMMY_PARM_TYPE
+#define BOOST_ACRC_DUMMY_INIT
+#else
+namespace boost { namespace detail {
+ template < std::size_t Bits, BOOST_CRC_PARM_TYPE TruncPoly,
+ BOOST_CRC_PARM_TYPE InitRem, BOOST_CRC_PARM_TYPE FinalXor,
+ bool ReflectIn, bool ReflectRem >
+ struct dummy_crc_argument { };
+} }
+#define BOOST_CRC_DUMMY_PARM_TYPE , detail::dummy_crc_argument<Bits, \
+ TruncPoly, InitRem, FinalXor, ReflectIn, ReflectRem> *p_
+#define BOOST_CRC_DUMMY_INIT BOOST_CRC_DUMMY_PARM_TYPE = 0
+#define BOOST_ACRC_DUMMY_PARM_TYPE , detail::dummy_crc_argument<Bits, \
+ TruncPoly, 0, 0, false, false> *p_
+#define BOOST_ACRC_DUMMY_INIT BOOST_ACRC_DUMMY_PARM_TYPE = 0
+#endif
+
+
+namespace boost
+{
+
+
+// Forward declarations ----------------------------------------------------//
+
+template < std::size_t Bits >
+ class crc_basic;
+
+template < std::size_t Bits, BOOST_CRC_PARM_TYPE TruncPoly = 0u,
+ BOOST_CRC_PARM_TYPE InitRem = 0u,
+ BOOST_CRC_PARM_TYPE FinalXor = 0u, bool ReflectIn = false,
+ bool ReflectRem = false >
+ class crc_optimal;
+
+template < std::size_t Bits, BOOST_CRC_PARM_TYPE TruncPoly,
+ BOOST_CRC_PARM_TYPE InitRem, BOOST_CRC_PARM_TYPE FinalXor,
+ bool ReflectIn, bool ReflectRem >
+ typename uint_t<Bits>::fast crc( void const *buffer,
+ std::size_t byte_count
+ BOOST_CRC_DUMMY_PARM_TYPE );
+
+template < std::size_t Bits, BOOST_CRC_PARM_TYPE TruncPoly >
+ typename uint_t<Bits>::fast augmented_crc( void const *buffer,
+ std::size_t byte_count, typename uint_t<Bits>::fast initial_remainder
+ BOOST_ACRC_DUMMY_PARM_TYPE );
+
+template < std::size_t Bits, BOOST_CRC_PARM_TYPE TruncPoly >
+ typename uint_t<Bits>::fast augmented_crc( void const *buffer,
+ std::size_t byte_count
+ BOOST_ACRC_DUMMY_PARM_TYPE );
+
+typedef crc_optimal<16, 0x8005, 0, 0, true, true> crc_16_type;
+typedef crc_optimal<16, 0x1021, 0xFFFF, 0, false, false> crc_ccitt_type;
+typedef crc_optimal<16, 0x8408, 0, 0, true, true> crc_xmodem_type;
+
+typedef crc_optimal<32, 0x04C11DB7, 0xFFFFFFFF, 0xFFFFFFFF, true, true>
+ crc_32_type;
+
+
+// Forward declarations for implementation detail stuff --------------------//
+// (Just for the stuff that will be needed for the next two sections)
+
+namespace detail
+{
+ template < std::size_t Bits >
+ struct mask_uint_t;
+
+ template < >
+ struct mask_uint_t< std::numeric_limits<unsigned char>::digits >;
+
+ #if USHRT_MAX > UCHAR_MAX
+ template < >
+ struct mask_uint_t< std::numeric_limits<unsigned short>::digits >;
+ #endif
+
+ #if UINT_MAX > USHRT_MAX
+ template < >
+ struct mask_uint_t< std::numeric_limits<unsigned int>::digits >;
+ #endif
+
+ #if ULONG_MAX > UINT_MAX
+ template < >
+ struct mask_uint_t< std::numeric_limits<unsigned long>::digits >;
+ #endif
+
+ template < std::size_t Bits, BOOST_CRC_PARM_TYPE TruncPoly, bool Reflect >
+ struct crc_table_t;
+
+ template < std::size_t Bits, bool DoReflect >
+ class crc_helper;
+
+ #ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ template < std::size_t Bits >
+ class crc_helper< Bits, false >;
+ #endif
+
+} // namespace detail
+
+
+// Simple cyclic redundancy code (CRC) class declaration -------------------//
+
+template < std::size_t Bits >
+class crc_basic
+{
+ // Implementation type
+ typedef detail::mask_uint_t<Bits> masking_type;
+
+public:
+ // Type
+ typedef typename masking_type::least value_type;
+
+ // Constant for the template parameter
+ BOOST_STATIC_CONSTANT( std::size_t, bit_count = Bits );
+
+ // Constructor
+ explicit crc_basic( value_type truncated_polynominal,
+ value_type initial_remainder = 0, value_type final_xor_value = 0,
+ bool reflect_input = false, bool reflect_remainder = false );
+
+ // Internal Operations
+ value_type get_truncated_polynominal() const;
+ value_type get_initial_remainder() const;
+ value_type get_final_xor_value() const;
+ bool get_reflect_input() const;
+ bool get_reflect_remainder() const;
+
+ value_type get_interim_remainder() const;
+ void reset( value_type new_rem );
+ void reset();
+
+ // External Operations
+ void process_bit( bool bit );
+ void process_bits( unsigned char bits, std::size_t bit_count );
+ void process_byte( unsigned char byte );
+ void process_block( void const *bytes_begin, void const *bytes_end );
+ void process_bytes( void const *buffer, std::size_t byte_count );
+
+ value_type checksum() const;
+
+private:
+ // Member data
+ value_type rem_;
+ value_type poly_, init_, final_; // non-const to allow assignability
+ bool rft_in_, rft_out_; // non-const to allow assignability
+
+}; // boost::crc_basic
+
+
+// Optimized cyclic redundancy code (CRC) class declaration ----------------//
+
+template < std::size_t Bits, BOOST_CRC_PARM_TYPE TruncPoly,
+ BOOST_CRC_PARM_TYPE InitRem, BOOST_CRC_PARM_TYPE FinalXor,
+ bool ReflectIn, bool ReflectRem >
+class crc_optimal
+{
+ // Implementation type
+ typedef detail::mask_uint_t<Bits> masking_type;
+
+public:
+ // Type
+ typedef typename masking_type::fast value_type;
+
+ // Constants for the template parameters
+ BOOST_STATIC_CONSTANT( std::size_t, bit_count = Bits );
+ BOOST_STATIC_CONSTANT( value_type, truncated_polynominal = TruncPoly );
+ BOOST_STATIC_CONSTANT( value_type, initial_remainder = InitRem );
+ BOOST_STATIC_CONSTANT( value_type, final_xor_value = FinalXor );
+ BOOST_STATIC_CONSTANT( bool, reflect_input = ReflectIn );
+ BOOST_STATIC_CONSTANT( bool, reflect_remainder = ReflectRem );
+
+ // Constructor
+ explicit crc_optimal( value_type init_rem = InitRem );
+
+ // Internal Operations
+ value_type get_truncated_polynominal() const;
+ value_type get_initial_remainder() const;
+ value_type get_final_xor_value() const;
+ bool get_reflect_input() const;
+ bool get_reflect_remainder() const;
+
+ value_type get_interim_remainder() const;
+ void reset( value_type new_rem = InitRem );
+
+ // External Operations
+ void process_byte( unsigned char byte );
+ void process_block( void const *bytes_begin, void const *bytes_end );
+ void process_bytes( void const *buffer, std::size_t byte_count );
+
+ value_type checksum() const;
+
+ // Operators
+ void operator ()( unsigned char byte );
+ value_type operator ()() const;
+
+private:
+ // The implementation of output reflection depends on both reflect states.
+ BOOST_STATIC_CONSTANT( bool, reflect_output = (ReflectRem != ReflectIn) );
+
+ #ifndef __BORLANDC__
+ #define BOOST_CRC_REF_OUT_VAL reflect_output
+ #else
+ typedef crc_optimal self_type;
+ #define BOOST_CRC_REF_OUT_VAL (self_type::reflect_output)
+ #endif
+
+ // More implementation types
+ typedef detail::crc_table_t<Bits, TruncPoly, ReflectIn> crc_table_type;
+ typedef detail::crc_helper<Bits, ReflectIn> helper_type;
+ typedef detail::crc_helper<Bits, BOOST_CRC_REF_OUT_VAL> reflect_out_type;
+
+ #undef BOOST_CRC_REF_OUT_VAL
+
+ // Member data
+ value_type rem_;
+
+}; // boost::crc_optimal
+
+
+// Implementation detail stuff ---------------------------------------------//
+
+namespace detail
+{
+ // Forward declarations for more implementation details
+ template < std::size_t Bits >
+ struct high_uint_t;
+
+ template < std::size_t Bits >
+ struct reflector;
+
+
+ // Traits class for mask; given the bit number
+ // (1-based), get the mask for that bit by itself.
+ template < std::size_t Bits >
+ struct high_uint_t
+ : boost::uint_t< Bits >
+ {
+ typedef boost::uint_t<Bits> base_type;
+ typedef typename base_type::least least;
+ typedef typename base_type::fast fast;
+
+#if defined(__EDG_VERSION__) && __EDG_VERSION__ <= 243
+ static const least high_bit = 1ul << ( Bits - 1u );
+ static const fast high_bit_fast = 1ul << ( Bits - 1u );
+#else
+ BOOST_STATIC_CONSTANT( least, high_bit = (least( 1u ) << ( Bits
+ - 1u )) );
+ BOOST_STATIC_CONSTANT( fast, high_bit_fast = (fast( 1u ) << ( Bits
+ - 1u )) );
+#endif
+
+ }; // boost::detail::high_uint_t
+
+
+ // Reflection routine class wrapper
+ // (since MS VC++ 6 couldn't handle the unwrapped version)
+ template < std::size_t Bits >
+ struct reflector
+ {
+ typedef typename boost::uint_t<Bits>::fast value_type;
+
+ static value_type reflect( value_type x );
+
+ }; // boost::detail::reflector
+
+ // Function that reflects its argument
+ template < std::size_t Bits >
+ typename reflector<Bits>::value_type
+ reflector<Bits>::reflect
+ (
+ typename reflector<Bits>::value_type x
+ )
+ {
+ value_type reflection = 0;
+ value_type const one = 1;
+
+ for ( std::size_t i = 0 ; i < Bits ; ++i, x >>= 1 )
+ {
+ if ( x & one )
+ {
+ reflection |= ( one << (Bits - 1u - i) );
+ }
+ }
+
+ return reflection;
+ }
+
+
+ // Traits class for masks; given the bit number (1-based),
+ // get the mask for that bit and its lower bits.
+ template < std::size_t Bits >
+ struct mask_uint_t
+ : high_uint_t< Bits >
+ {
+ typedef high_uint_t<Bits> base_type;
+ typedef typename base_type::least least;
+ typedef typename base_type::fast fast;
+
+ #ifndef __BORLANDC__
+ using base_type::high_bit;
+ using base_type::high_bit_fast;
+ #else
+ BOOST_STATIC_CONSTANT( least, high_bit = base_type::high_bit );
+ BOOST_STATIC_CONSTANT( fast, high_bit_fast = base_type::high_bit_fast );
+ #endif
+
+#if defined(__EDG_VERSION__) && __EDG_VERSION__ <= 243
+ static const least sig_bits = (~( ~( 0ul ) << Bits )) ;
+#else
+ BOOST_STATIC_CONSTANT( least, sig_bits = (~( ~(least( 0u )) << Bits )) );
+#endif
+#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ == 0 && __GNUC_PATCHLEVEL__ == 2
+ // Work around a weird bug that ICEs the compiler in build_c_cast
+ BOOST_STATIC_CONSTANT( fast, sig_bits_fast = static_cast<fast>(sig_bits) );
+#else
+ BOOST_STATIC_CONSTANT( fast, sig_bits_fast = fast(sig_bits) );
+#endif
+ }; // boost::detail::mask_uint_t
+
+ template < >
+ struct mask_uint_t< std::numeric_limits<unsigned char>::digits >
+ : high_uint_t< std::numeric_limits<unsigned char>::digits >
+ {
+ typedef high_uint_t<std::numeric_limits<unsigned char>::digits>
+ base_type;
+ typedef base_type::least least;
+ typedef base_type::fast fast;
+
+ #ifndef __BORLANDC__
+ using base_type::high_bit;
+ using base_type::high_bit_fast;
+ #else
+ BOOST_STATIC_CONSTANT( least, high_bit = base_type::high_bit );
+ BOOST_STATIC_CONSTANT( fast, high_bit_fast = base_type::high_bit_fast );
+ #endif
+
+ BOOST_STATIC_CONSTANT( least, sig_bits = (~( least(0u) )) );
+ BOOST_STATIC_CONSTANT( fast, sig_bits_fast = fast(sig_bits) );
+
+ }; // boost::detail::mask_uint_t
+
+ #if USHRT_MAX > UCHAR_MAX
+ template < >
+ struct mask_uint_t< std::numeric_limits<unsigned short>::digits >
+ : high_uint_t< std::numeric_limits<unsigned short>::digits >
+ {
+ typedef high_uint_t<std::numeric_limits<unsigned short>::digits>
+ base_type;
+ typedef base_type::least least;
+ typedef base_type::fast fast;
+
+ #ifndef __BORLANDC__
+ using base_type::high_bit;
+ using base_type::high_bit_fast;
+ #else
+ BOOST_STATIC_CONSTANT( least, high_bit = base_type::high_bit );
+ BOOST_STATIC_CONSTANT( fast, high_bit_fast = base_type::high_bit_fast );
+ #endif
+
+ BOOST_STATIC_CONSTANT( least, sig_bits = (~( least(0u) )) );
+ BOOST_STATIC_CONSTANT( fast, sig_bits_fast = fast(sig_bits) );
+
+ }; // boost::detail::mask_uint_t
+ #endif
+
+ #if UINT_MAX > USHRT_MAX
+ template < >
+ struct mask_uint_t< std::numeric_limits<unsigned int>::digits >
+ : high_uint_t< std::numeric_limits<unsigned int>::digits >
+ {
+ typedef high_uint_t<std::numeric_limits<unsigned int>::digits>
+ base_type;
+ typedef base_type::least least;
+ typedef base_type::fast fast;
+
+ #ifndef __BORLANDC__
+ using base_type::high_bit;
+ using base_type::high_bit_fast;
+ #else
+ BOOST_STATIC_CONSTANT( least, high_bit = base_type::high_bit );
+ BOOST_STATIC_CONSTANT( fast, high_bit_fast = base_type::high_bit_fast );
+ #endif
+
+ BOOST_STATIC_CONSTANT( least, sig_bits = (~( least(0u) )) );
+ BOOST_STATIC_CONSTANT( fast, sig_bits_fast = fast(sig_bits) );
+
+ }; // boost::detail::mask_uint_t
+ #endif
+
+ #if ULONG_MAX > UINT_MAX
+ template < >
+ struct mask_uint_t< std::numeric_limits<unsigned long>::digits >
+ : high_uint_t< std::numeric_limits<unsigned long>::digits >
+ {
+ typedef high_uint_t<std::numeric_limits<unsigned long>::digits>
+ base_type;
+ typedef base_type::least least;
+ typedef base_type::fast fast;
+
+ #ifndef __BORLANDC__
+ using base_type::high_bit;
+ using base_type::high_bit_fast;
+ #else
+ BOOST_STATIC_CONSTANT( least, high_bit = base_type::high_bit );
+ BOOST_STATIC_CONSTANT( fast, high_bit_fast = base_type::high_bit_fast );
+ #endif
+
+ BOOST_STATIC_CONSTANT( least, sig_bits = (~( least(0u) )) );
+ BOOST_STATIC_CONSTANT( fast, sig_bits_fast = fast(sig_bits) );
+
+ }; // boost::detail::mask_uint_t
+ #endif
+
+
+ // CRC table generator
+ template < std::size_t Bits, BOOST_CRC_PARM_TYPE TruncPoly, bool Reflect >
+ struct crc_table_t
+ {
+ BOOST_STATIC_CONSTANT( std::size_t, byte_combos = (1ul << CHAR_BIT) );
+
+ typedef mask_uint_t<Bits> masking_type;
+ typedef typename masking_type::fast value_type;
+#if defined(__BORLANDC__) && defined(_M_IX86) && (__BORLANDC__ == 0x560)
+ // for some reason Borland's command line compiler (version 0x560)
+ // chokes over this unless we do the calculation for it:
+ typedef value_type table_type[ 0x100 ];
+#else
+ typedef value_type table_type[ byte_combos ];
+#endif
+
+ static void init_table();
+
+ static table_type table_;
+
+ }; // boost::detail::crc_table_t
+
+ // CRC table generator static data member definition
+ // (Some compilers [Borland C++] require the initializer to be present.)
+ template < std::size_t Bits, BOOST_CRC_PARM_TYPE TruncPoly, bool Reflect >
+ typename crc_table_t<Bits, TruncPoly, Reflect>::table_type
+ crc_table_t<Bits, TruncPoly, Reflect>::table_
+ = { 0 };
+
+ // Populate CRC lookup table
+ template < std::size_t Bits, BOOST_CRC_PARM_TYPE TruncPoly, bool Reflect >
+ void
+ crc_table_t<Bits, TruncPoly, Reflect>::init_table
+ (
+ )
+ {
+ // compute table only on the first run
+ static bool did_init = false;
+ if ( did_init ) return;
+
+ // factor-out constants to avoid recalculation
+ value_type const fast_hi_bit = masking_type::high_bit_fast;
+ unsigned char const byte_hi_bit = 1u << (CHAR_BIT - 1u);
+
+ // loop over every possible dividend value
+ unsigned char dividend = 0;
+ do
+ {
+ value_type remainder = 0;
+
+ // go through all the dividend's bits
+ for ( unsigned char mask = byte_hi_bit ; mask ; mask >>= 1 )
+ {
+ // check if divisor fits
+ if ( dividend & mask )
+ {
+ remainder ^= fast_hi_bit;
+ }
+
+ // do polynominal division
+ if ( remainder & fast_hi_bit )
+ {
+ remainder <<= 1;
+ remainder ^= TruncPoly;
+ }
+ else
+ {
+ remainder <<= 1;
+ }
+ }
+
+ table_[ crc_helper<CHAR_BIT, Reflect>::reflect(dividend) ]
+ = crc_helper<Bits, Reflect>::reflect( remainder );
+ }
+ while ( ++dividend );
+
+ did_init = true;
+ }
+
+ #ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ // Align the msb of the remainder to a byte
+ template < std::size_t Bits, bool RightShift >
+ class remainder
+ {
+ public:
+ typedef typename uint_t<Bits>::fast value_type;
+
+ static unsigned char align_msb( value_type rem )
+ { return rem >> (Bits - CHAR_BIT); }
+ };
+
+ // Specialization for the case that the remainder has less
+ // bits than a byte: align the remainder msb to the byte msb
+ template < std::size_t Bits >
+ class remainder< Bits, false >
+ {
+ public:
+ typedef typename uint_t<Bits>::fast value_type;
+
+ static unsigned char align_msb( value_type rem )
+ { return rem << (CHAR_BIT - Bits); }
+ };
+ #endif
+
+ // CRC helper routines
+ template < std::size_t Bits, bool DoReflect >
+ class crc_helper
+ {
+ public:
+ // Type
+ typedef typename uint_t<Bits>::fast value_type;
+
+ #ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ // Possibly reflect a remainder
+ static value_type reflect( value_type x )
+ { return detail::reflector<Bits>::reflect( x ); }
+
+ // Compare a byte to the remainder's highest byte
+ static unsigned char index( value_type rem, unsigned char x )
+ { return x ^ rem; }
+
+ // Shift out the remainder's highest byte
+ static value_type shift( value_type rem )
+ { return rem >> CHAR_BIT; }
+ #else
+ // Possibly reflect a remainder
+ static value_type reflect( value_type x )
+ { return DoReflect ? detail::reflector<Bits>::reflect( x ) : x; }
+
+ // Compare a byte to the remainder's highest byte
+ static unsigned char index( value_type rem, unsigned char x )
+ { return x ^ ( DoReflect ? rem :
+ ((Bits>CHAR_BIT)?( rem >> (Bits - CHAR_BIT) ) :
+ ( rem << (CHAR_BIT - Bits) ))); }
+
+ // Shift out the remainder's highest byte
+ static value_type shift( value_type rem )
+ { return DoReflect ? rem >> CHAR_BIT : rem << CHAR_BIT; }
+ #endif
+
+ }; // boost::detail::crc_helper
+
+ #ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ template < std::size_t Bits >
+ class crc_helper<Bits, false>
+ {
+ public:
+ // Type
+ typedef typename uint_t<Bits>::fast value_type;
+
+ // Possibly reflect a remainder
+ static value_type reflect( value_type x )
+ { return x; }
+
+ // Compare a byte to the remainder's highest byte
+ static unsigned char index( value_type rem, unsigned char x )
+ { return x ^ remainder<Bits,(Bits>CHAR_BIT)>::align_msb( rem ); }
+
+ // Shift out the remainder's highest byte
+ static value_type shift( value_type rem )
+ { return rem << CHAR_BIT; }
+
+ }; // boost::detail::crc_helper
+ #endif
+
+
+} // namespace detail
+
+
+// Simple CRC class function definitions -----------------------------------//
+
+template < std::size_t Bits >
+inline
+crc_basic<Bits>::crc_basic
+(
+ typename crc_basic<Bits>::value_type truncated_polynominal,
+ typename crc_basic<Bits>::value_type initial_remainder, // = 0
+ typename crc_basic<Bits>::value_type final_xor_value, // = 0
+ bool reflect_input, // = false
+ bool reflect_remainder // = false
+)
+ : rem_( initial_remainder ), poly_( truncated_polynominal )
+ , init_( initial_remainder ), final_( final_xor_value )
+ , rft_in_( reflect_input ), rft_out_( reflect_remainder )
+{
+}
+
+template < std::size_t Bits >
+inline
+typename crc_basic<Bits>::value_type
+crc_basic<Bits>::get_truncated_polynominal
+(
+) const
+{
+ return poly_;
+}
+
+template < std::size_t Bits >
+inline
+typename crc_basic<Bits>::value_type
+crc_basic<Bits>::get_initial_remainder
+(
+) const
+{
+ return init_;
+}
+
+template < std::size_t Bits >
+inline
+typename crc_basic<Bits>::value_type
+crc_basic<Bits>::get_final_xor_value
+(
+) const
+{
+ return final_;
+}
+
+template < std::size_t Bits >
+inline
+bool
+crc_basic<Bits>::get_reflect_input
+(
+) const
+{
+ return rft_in_;
+}
+
+template < std::size_t Bits >
+inline
+bool
+crc_basic<Bits>::get_reflect_remainder
+(
+) const
+{
+ return rft_out_;
+}
+
+template < std::size_t Bits >
+inline
+typename crc_basic<Bits>::value_type
+crc_basic<Bits>::get_interim_remainder
+(
+) const
+{
+ return rem_ & masking_type::sig_bits;
+}
+
+template < std::size_t Bits >
+inline
+void
+crc_basic<Bits>::reset
+(
+ typename crc_basic<Bits>::value_type new_rem
+)
+{
+ rem_ = new_rem;
+}
+
+template < std::size_t Bits >
+inline
+void
+crc_basic<Bits>::reset
+(
+)
+{
+ this->reset( this->get_initial_remainder() );
+}
+
+template < std::size_t Bits >
+inline
+void
+crc_basic<Bits>::process_bit
+(
+ bool bit
+)
+{
+ value_type const high_bit_mask = masking_type::high_bit;
+
+ // compare the new bit with the remainder's highest
+ rem_ ^= ( bit ? high_bit_mask : 0u );
+
+ // a full polynominal division step is done when the highest bit is one
+ bool const do_poly_div = static_cast<bool>( rem_ & high_bit_mask );
+
+ // shift out the highest bit
+ rem_ <<= 1;
+
+ // carry out the division, if needed
+ if ( do_poly_div )
+ {
+ rem_ ^= poly_;
+ }
+}
+
+template < std::size_t Bits >
+void
+crc_basic<Bits>::process_bits
+(
+ unsigned char bits,
+ std::size_t bit_count
+)
+{
+ // ignore the bits above the ones we want
+ bits <<= CHAR_BIT - bit_count;
+
+ // compute the CRC for each bit, starting with the upper ones
+ unsigned char const high_bit_mask = 1u << ( CHAR_BIT - 1u );
+ for ( std::size_t i = bit_count ; i > 0u ; --i, bits <<= 1u )
+ {
+ process_bit( static_cast<bool>(bits & high_bit_mask) );
+ }
+}
+
+template < std::size_t Bits >
+inline
+void
+crc_basic<Bits>::process_byte
+(
+ unsigned char byte
+)
+{
+ process_bits( (rft_in_ ? detail::reflector<CHAR_BIT>::reflect(byte)
+ : byte), CHAR_BIT );
+}
+
+template < std::size_t Bits >
+void
+crc_basic<Bits>::process_block
+(
+ void const * bytes_begin,
+ void const * bytes_end
+)
+{
+ for ( unsigned char const * p
+ = static_cast<unsigned char const *>(bytes_begin) ; p < bytes_end ; ++p )
+ {
+ process_byte( *p );
+ }
+}
+
+template < std::size_t Bits >
+inline
+void
+crc_basic<Bits>::process_bytes
+(
+ void const * buffer,
+ std::size_t byte_count
+)
+{
+ unsigned char const * const b = static_cast<unsigned char const *>(
+ buffer );
+
+ process_block( b, b + byte_count );
+}
+
+template < std::size_t Bits >
+inline
+typename crc_basic<Bits>::value_type
+crc_basic<Bits>::checksum
+(
+) const
+{
+ return ( (rft_out_ ? detail::reflector<Bits>::reflect( rem_ ) : rem_)
+ ^ final_ ) & masking_type::sig_bits;
+}
+
+
+// Optimized CRC class function definitions --------------------------------//
+
+// Macro to compact code
+#define BOOST_CRC_OPTIMAL_NAME crc_optimal<Bits, TruncPoly, InitRem, \
+ FinalXor, ReflectIn, ReflectRem>
+
+template < std::size_t Bits, BOOST_CRC_PARM_TYPE TruncPoly,
+ BOOST_CRC_PARM_TYPE InitRem, BOOST_CRC_PARM_TYPE FinalXor,
+ bool ReflectIn, bool ReflectRem >
+inline
+BOOST_CRC_OPTIMAL_NAME::crc_optimal
+(
+ typename BOOST_CRC_OPTIMAL_NAME::value_type init_rem // = InitRem
+)
+ : rem_( helper_type::reflect(init_rem) )
+{
+ crc_table_type::init_table();
+}
+
+template < std::size_t Bits, BOOST_CRC_PARM_TYPE TruncPoly,
+ BOOST_CRC_PARM_TYPE InitRem, BOOST_CRC_PARM_TYPE FinalXor,
+ bool ReflectIn, bool ReflectRem >
+inline
+typename BOOST_CRC_OPTIMAL_NAME::value_type
+BOOST_CRC_OPTIMAL_NAME::get_truncated_polynominal
+(
+) const
+{
+ return TruncPoly;
+}
+
+template < std::size_t Bits, BOOST_CRC_PARM_TYPE TruncPoly,
+ BOOST_CRC_PARM_TYPE InitRem, BOOST_CRC_PARM_TYPE FinalXor,
+ bool ReflectIn, bool ReflectRem >
+inline
+typename BOOST_CRC_OPTIMAL_NAME::value_type
+BOOST_CRC_OPTIMAL_NAME::get_initial_remainder
+(
+) const
+{
+ return InitRem;
+}
+
+template < std::size_t Bits, BOOST_CRC_PARM_TYPE TruncPoly,
+ BOOST_CRC_PARM_TYPE InitRem, BOOST_CRC_PARM_TYPE FinalXor,
+ bool ReflectIn, bool ReflectRem >
+inline
+typename BOOST_CRC_OPTIMAL_NAME::value_type
+BOOST_CRC_OPTIMAL_NAME::get_final_xor_value
+(
+) const
+{
+ return FinalXor;
+}
+
+template < std::size_t Bits, BOOST_CRC_PARM_TYPE TruncPoly,
+ BOOST_CRC_PARM_TYPE InitRem, BOOST_CRC_PARM_TYPE FinalXor,
+ bool ReflectIn, bool ReflectRem >
+inline
+bool
+BOOST_CRC_OPTIMAL_NAME::get_reflect_input
+(
+) const
+{
+ return ReflectIn;
+}
+
+template < std::size_t Bits, BOOST_CRC_PARM_TYPE TruncPoly,
+ BOOST_CRC_PARM_TYPE InitRem, BOOST_CRC_PARM_TYPE FinalXor,
+ bool ReflectIn, bool ReflectRem >
+inline
+bool
+BOOST_CRC_OPTIMAL_NAME::get_reflect_remainder
+(
+) const
+{
+ return ReflectRem;
+}
+
+template < std::size_t Bits, BOOST_CRC_PARM_TYPE TruncPoly,
+ BOOST_CRC_PARM_TYPE InitRem, BOOST_CRC_PARM_TYPE FinalXor,
+ bool ReflectIn, bool ReflectRem >
+inline
+typename BOOST_CRC_OPTIMAL_NAME::value_type
+BOOST_CRC_OPTIMAL_NAME::get_interim_remainder
+(
+) const
+{
+ // Interim remainder should be _un_-reflected, so we have to undo it.
+ return helper_type::reflect( rem_ ) & masking_type::sig_bits_fast;
+}
+
+template < std::size_t Bits, BOOST_CRC_PARM_TYPE TruncPoly,
+ BOOST_CRC_PARM_TYPE InitRem, BOOST_CRC_PARM_TYPE FinalXor,
+ bool ReflectIn, bool ReflectRem >
+inline
+void
+BOOST_CRC_OPTIMAL_NAME::reset
+(
+ typename BOOST_CRC_OPTIMAL_NAME::value_type new_rem // = InitRem
+)
+{
+ rem_ = helper_type::reflect( new_rem );
+}
+
+template < std::size_t Bits, BOOST_CRC_PARM_TYPE TruncPoly,
+ BOOST_CRC_PARM_TYPE InitRem, BOOST_CRC_PARM_TYPE FinalXor,
+ bool ReflectIn, bool ReflectRem >
+inline
+void
+BOOST_CRC_OPTIMAL_NAME::process_byte
+(
+ unsigned char byte
+)
+{
+ process_bytes( &byte, sizeof(byte) );
+}
+
+template < std::size_t Bits, BOOST_CRC_PARM_TYPE TruncPoly,
+ BOOST_CRC_PARM_TYPE InitRem, BOOST_CRC_PARM_TYPE FinalXor,
+ bool ReflectIn, bool ReflectRem >
+void
+BOOST_CRC_OPTIMAL_NAME::process_block
+(
+ void const * bytes_begin,
+ void const * bytes_end
+)
+{
+ // Recompute the CRC for each byte passed
+ for ( unsigned char const * p
+ = static_cast<unsigned char const *>(bytes_begin) ; p < bytes_end ; ++p )
+ {
+ // Compare the new byte with the remainder's higher bits to
+ // get the new bits, shift out the remainder's current higher
+ // bits, and update the remainder with the polynominal division
+ // of the new bits.
+ unsigned char const byte_index = helper_type::index( rem_, *p );
+ rem_ = helper_type::shift( rem_ );
+ rem_ ^= crc_table_type::table_[ byte_index ];
+ }
+}
+
+template < std::size_t Bits, BOOST_CRC_PARM_TYPE TruncPoly,
+ BOOST_CRC_PARM_TYPE InitRem, BOOST_CRC_PARM_TYPE FinalXor,
+ bool ReflectIn, bool ReflectRem >
+inline
+void
+BOOST_CRC_OPTIMAL_NAME::process_bytes
+(
+ void const * buffer,
+ std::size_t byte_count
+)
+{
+ unsigned char const * const b = static_cast<unsigned char const *>(
+ buffer );
+ process_block( b, b + byte_count );
+}
+
+template < std::size_t Bits, BOOST_CRC_PARM_TYPE TruncPoly,
+ BOOST_CRC_PARM_TYPE InitRem, BOOST_CRC_PARM_TYPE FinalXor,
+ bool ReflectIn, bool ReflectRem >
+inline
+typename BOOST_CRC_OPTIMAL_NAME::value_type
+BOOST_CRC_OPTIMAL_NAME::checksum
+(
+) const
+{
+ return ( reflect_out_type::reflect(rem_) ^ get_final_xor_value() )
+ & masking_type::sig_bits_fast;
+}
+
+template < std::size_t Bits, BOOST_CRC_PARM_TYPE TruncPoly,
+ BOOST_CRC_PARM_TYPE InitRem, BOOST_CRC_PARM_TYPE FinalXor,
+ bool ReflectIn, bool ReflectRem >
+inline
+void
+BOOST_CRC_OPTIMAL_NAME::operator ()
+(
+ unsigned char byte
+)
+{
+ process_byte( byte );
+}
+
+template < std::size_t Bits, BOOST_CRC_PARM_TYPE TruncPoly,
+ BOOST_CRC_PARM_TYPE InitRem, BOOST_CRC_PARM_TYPE FinalXor,
+ bool ReflectIn, bool ReflectRem >
+inline
+typename BOOST_CRC_OPTIMAL_NAME::value_type
+BOOST_CRC_OPTIMAL_NAME::operator ()
+(
+) const
+{
+ return checksum();
+}
+
+
+// CRC computation function definition -------------------------------------//
+
+template < std::size_t Bits, BOOST_CRC_PARM_TYPE TruncPoly,
+ BOOST_CRC_PARM_TYPE InitRem, BOOST_CRC_PARM_TYPE FinalXor,
+ bool ReflectIn, bool ReflectRem >
+inline
+typename uint_t<Bits>::fast
+crc
+(
+ void const * buffer,
+ std::size_t byte_count
+ BOOST_CRC_DUMMY_INIT
+)
+{
+ BOOST_CRC_OPTIMAL_NAME computer;
+ computer.process_bytes( buffer, byte_count );
+ return computer.checksum();
+}
+
+
+// Augmented-message CRC computation function definitions ------------------//
+
+template < std::size_t Bits, BOOST_CRC_PARM_TYPE TruncPoly >
+typename uint_t<Bits>::fast
+augmented_crc
+(
+ void const * buffer,
+ std::size_t byte_count,
+ typename uint_t<Bits>::fast initial_remainder
+ BOOST_ACRC_DUMMY_INIT
+)
+{
+ typedef unsigned char byte_type;
+ typedef detail::mask_uint_t<Bits> masking_type;
+ typedef detail::crc_table_t<Bits, TruncPoly, false> crc_table_type;
+
+ typename masking_type::fast rem = initial_remainder;
+ byte_type const * const b = static_cast<byte_type const *>( buffer );
+ byte_type const * const e = b + byte_count;
+
+ crc_table_type::init_table();
+ for ( byte_type const * p = b ; p < e ; ++p )
+ {
+ // Use the current top byte as the table index to the next
+ // "partial product." Shift out that top byte, shifting in
+ // the next augmented-message byte. Complete the division.
+ byte_type const byte_index = rem >> ( Bits - CHAR_BIT );
+ rem <<= CHAR_BIT;
+ rem |= *p;
+ rem ^= crc_table_type::table_[ byte_index ];
+ }
+
+ return rem & masking_type::sig_bits_fast;
+}
+
+template < std::size_t Bits, BOOST_CRC_PARM_TYPE TruncPoly >
+inline
+typename uint_t<Bits>::fast
+augmented_crc
+(
+ void const * buffer,
+ std::size_t byte_count
+ BOOST_ACRC_DUMMY_INIT
+)
+{
+ // The last function argument has its type specified so the other version of
+ // augmented_crc will be called. If the cast wasn't in place, and the
+ // BOOST_ACRC_DUMMY_INIT added a third argument (for a workaround), the "0"
+ // would match as that third argument, leading to infinite recursion.
+ return augmented_crc<Bits, TruncPoly>( buffer, byte_count,
+ static_cast<typename uint_t<Bits>::fast>(0) );
+}
+
+
+} // namespace boost
+
+
+// Undo header-private macros
+#undef BOOST_CRC_OPTIMAL_NAME
+#undef BOOST_ACRC_DUMMY_INIT
+#undef BOOST_ACRC_DUMMY_PARM_TYPE
+#undef BOOST_CRC_DUMMY_INIT
+#undef BOOST_CRC_DUMMY_PARM_TYPE
+#undef BOOST_CRC_PARM_TYPE
+
+
+#endif // BOOST_CRC_HPP
+
diff --git a/boost/boost/cregex.hpp b/boost/boost/cregex.hpp
new file mode 100644
index 00000000000..b7a918eb8ed
--- /dev/null
+++ b/boost/boost/cregex.hpp
@@ -0,0 +1,39 @@
+/*
+ *
+ * Copyright (c) 1998-2002
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org/libs/regex for most recent version.
+ * FILE cregex.cpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: Declares POSIX API functions
+ * + boost::RegEx high level wrapper.
+ */
+
+#ifndef BOOST_RE_CREGEX_HPP
+#define BOOST_RE_CREGEX_HPP
+
+#ifndef BOOST_REGEX_CONFIG_HPP
+#include <boost/regex/config.hpp>
+#endif
+
+#include <boost/regex/v4/cregex.hpp>
+
+#endif /* include guard */
+
+
+
+
+
+
+
+
+
+
diff --git a/boost/boost/cstdint.hpp b/boost/boost/cstdint.hpp
new file mode 100644
index 00000000000..31a432a886a
--- /dev/null
+++ b/boost/boost/cstdint.hpp
@@ -0,0 +1,446 @@
+// boost cstdint.hpp header file ------------------------------------------//
+
+// (C) Copyright Beman Dawes 1999.
+// (C) Copyright Jens Mauer 2001
+// (C) Copyright John Maddock 2001
+// 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/integer for documentation.
+
+// Revision History
+// 31 Oct 01 use BOOST_HAS_LONG_LONG to check for "long long" (Jens M.)
+// 16 Apr 01 check LONGLONG_MAX when looking for "long long" (Jens Maurer)
+// 23 Jan 01 prefer "long" over "int" for int32_t and intmax_t (Jens Maurer)
+// 12 Nov 00 Merged <boost/stdint.h> (Jens Maurer)
+// 23 Sep 00 Added INTXX_C macro support (John Maddock).
+// 22 Sep 00 Better 64-bit support (John Maddock)
+// 29 Jun 00 Reimplement to avoid including stdint.h within namespace boost
+// 8 Aug 99 Initial version (Beman Dawes)
+
+
+#ifndef BOOST_CSTDINT_HPP
+#define BOOST_CSTDINT_HPP
+
+#include <boost/config.hpp>
+
+
+#ifdef BOOST_HAS_STDINT_H
+
+// The following #include is an implementation artifact; not part of interface.
+# ifdef __hpux
+// HP-UX has a vaguely nice <stdint.h> in a non-standard location
+# include <inttypes.h>
+# ifdef __STDC_32_MODE__
+ // this is triggered with GCC, because it defines __cplusplus < 199707L
+# define BOOST_NO_INT64_T
+# endif
+# elif defined(__FreeBSD__) || defined(__IBMCPP__)
+# include <inttypes.h>
+# else
+# include <stdint.h>
+
+// There is a bug in Cygwin two _C macros
+# if defined(__STDC_CONSTANT_MACROS) && defined(__CYGWIN__)
+# undef INTMAX_C
+# undef UINTMAX_C
+# define INTMAX_C(c) c##LL
+# define UINTMAX_C(c) c##ULL
+# endif
+
+# endif
+
+#ifdef __QNX__
+
+// QNX (Dinkumware stdlib) defines these as non-standard names.
+// Reflect to the standard names.
+
+typedef ::intleast8_t int_least8_t;
+typedef ::intfast8_t int_fast8_t;
+typedef ::uintleast8_t uint_least8_t;
+typedef ::uintfast8_t uint_fast8_t;
+
+typedef ::intleast16_t int_least16_t;
+typedef ::intfast16_t int_fast16_t;
+typedef ::uintleast16_t uint_least16_t;
+typedef ::uintfast16_t uint_fast16_t;
+
+typedef ::intleast32_t int_least32_t;
+typedef ::intfast32_t int_fast32_t;
+typedef ::uintleast32_t uint_least32_t;
+typedef ::uintfast32_t uint_fast32_t;
+
+# ifndef BOOST_NO_INT64_T
+
+typedef ::intleast64_t int_least64_t;
+typedef ::intfast64_t int_fast64_t;
+typedef ::uintleast64_t uint_least64_t;
+typedef ::uintfast64_t uint_fast64_t;
+
+# endif
+
+#endif
+
+namespace boost
+{
+
+ using ::int8_t;
+ using ::int_least8_t;
+ using ::int_fast8_t;
+ using ::uint8_t;
+ using ::uint_least8_t;
+ using ::uint_fast8_t;
+
+ using ::int16_t;
+ using ::int_least16_t;
+ using ::int_fast16_t;
+ using ::uint16_t;
+ using ::uint_least16_t;
+ using ::uint_fast16_t;
+
+ using ::int32_t;
+ using ::int_least32_t;
+ using ::int_fast32_t;
+ using ::uint32_t;
+ using ::uint_least32_t;
+ using ::uint_fast32_t;
+
+# ifndef BOOST_NO_INT64_T
+
+ using ::int64_t;
+ using ::int_least64_t;
+ using ::int_fast64_t;
+ using ::uint64_t;
+ using ::uint_least64_t;
+ using ::uint_fast64_t;
+
+# endif
+
+ using ::intmax_t;
+ using ::uintmax_t;
+
+} // namespace boost
+
+#elif defined(__FreeBSD__) && (__FreeBSD__ <= 4) || defined(__osf__)
+// FreeBSD and Tru64 have an <inttypes.h> that contains much of what we need.
+# include <inttypes.h>
+
+namespace boost {
+
+ using ::int8_t;
+ typedef int8_t int_least8_t;
+ typedef int8_t int_fast8_t;
+ using ::uint8_t;
+ typedef uint8_t uint_least8_t;
+ typedef uint8_t uint_fast8_t;
+
+ using ::int16_t;
+ typedef int16_t int_least16_t;
+ typedef int16_t int_fast16_t;
+ using ::uint16_t;
+ typedef uint16_t uint_least16_t;
+ typedef uint16_t uint_fast16_t;
+
+ using ::int32_t;
+ typedef int32_t int_least32_t;
+ typedef int32_t int_fast32_t;
+ using ::uint32_t;
+ typedef uint32_t uint_least32_t;
+ typedef uint32_t uint_fast32_t;
+
+# ifndef BOOST_NO_INT64_T
+
+ using ::int64_t;
+ typedef int64_t int_least64_t;
+ typedef int64_t int_fast64_t;
+ using ::uint64_t;
+ typedef uint64_t uint_least64_t;
+ typedef uint64_t uint_fast64_t;
+
+ typedef int64_t intmax_t;
+ typedef uint64_t uintmax_t;
+
+# else
+
+ typedef int32_t intmax_t;
+ typedef uint32_t uintmax_t;
+
+# endif
+
+} // namespace boost
+
+#else // BOOST_HAS_STDINT_H
+
+# include <boost/limits.hpp> // implementation artifact; not part of interface
+# include <limits.h> // needed for limits macros
+
+
+namespace boost
+{
+
+// These are fairly safe guesses for some 16-bit, and most 32-bit and 64-bit
+// platforms. For other systems, they will have to be hand tailored.
+//
+// Because the fast types are assumed to be the same as the undecorated types,
+// it may be possible to hand tailor a more efficient implementation. Such
+// an optimization may be illusionary; on the Intel x86-family 386 on, for
+// example, byte arithmetic and load/stores are as fast as "int" sized ones.
+
+// 8-bit types ------------------------------------------------------------//
+
+# if UCHAR_MAX == 0xff
+ typedef signed char int8_t;
+ typedef signed char int_least8_t;
+ typedef signed char int_fast8_t;
+ typedef unsigned char uint8_t;
+ typedef unsigned char uint_least8_t;
+ typedef unsigned char uint_fast8_t;
+# else
+# error defaults not correct; you must hand modify boost/cstdint.hpp
+# endif
+
+// 16-bit types -----------------------------------------------------------//
+
+# if USHRT_MAX == 0xffff
+# if defined(__crayx1)
+ // The Cray X1 has a 16-bit short, however it is not recommend
+ // for use in performance critical code.
+ typedef short int16_t;
+ typedef short int_least16_t;
+ typedef int int_fast16_t;
+ typedef unsigned short uint16_t;
+ typedef unsigned short uint_least16_t;
+ typedef unsigned int uint_fast16_t;
+# else
+ typedef short int16_t;
+ typedef short int_least16_t;
+ typedef short int_fast16_t;
+ typedef unsigned short uint16_t;
+ typedef unsigned short uint_least16_t;
+ typedef unsigned short uint_fast16_t;
+# endif
+# elif (USHRT_MAX == 0xffffffff) && defined(CRAY)
+ // no 16-bit types on Cray:
+ typedef short int_least16_t;
+ typedef short int_fast16_t;
+ typedef unsigned short uint_least16_t;
+ typedef unsigned short uint_fast16_t;
+# else
+# error defaults not correct; you must hand modify boost/cstdint.hpp
+# endif
+
+// 32-bit types -----------------------------------------------------------//
+
+# if ULONG_MAX == 0xffffffff
+ typedef long int32_t;
+ typedef long int_least32_t;
+ typedef long int_fast32_t;
+ typedef unsigned long uint32_t;
+ typedef unsigned long uint_least32_t;
+ typedef unsigned long uint_fast32_t;
+# elif UINT_MAX == 0xffffffff
+ typedef int int32_t;
+ typedef int int_least32_t;
+ typedef int int_fast32_t;
+ typedef unsigned int uint32_t;
+ typedef unsigned int uint_least32_t;
+ typedef unsigned int uint_fast32_t;
+# else
+# error defaults not correct; you must hand modify boost/cstdint.hpp
+# endif
+
+// 64-bit types + intmax_t and uintmax_t ----------------------------------//
+
+# if defined(BOOST_HAS_LONG_LONG) && \
+ !defined(BOOST_MSVC) && !defined(__BORLANDC__) && \
+ (!defined(__GLIBCPP__) || defined(_GLIBCPP_USE_LONG_LONG)) && \
+ (defined(ULLONG_MAX) || defined(ULONG_LONG_MAX) || defined(ULONGLONG_MAX))
+# if defined(__hpux)
+ // HP-UX's value of ULONG_LONG_MAX is unusable in preprocessor expressions
+# elif (defined(ULLONG_MAX) && ULLONG_MAX == 18446744073709551615ULL) || (defined(ULONG_LONG_MAX) && ULONG_LONG_MAX == 18446744073709551615ULL) || (defined(ULONGLONG_MAX) && ULONGLONG_MAX == 18446744073709551615ULL)
+ // 2**64 - 1
+# else
+# error defaults not correct; you must hand modify boost/cstdint.hpp
+# endif
+
+ typedef ::boost::long_long_type intmax_t;
+ typedef ::boost::ulong_long_type uintmax_t;
+ typedef ::boost::long_long_type int64_t;
+ typedef ::boost::long_long_type int_least64_t;
+ typedef ::boost::long_long_type int_fast64_t;
+ typedef ::boost::ulong_long_type uint64_t;
+ typedef ::boost::ulong_long_type uint_least64_t;
+ typedef ::boost::ulong_long_type uint_fast64_t;
+
+# elif ULONG_MAX != 0xffffffff
+
+# if ULONG_MAX == 18446744073709551615 // 2**64 - 1
+ typedef long intmax_t;
+ typedef unsigned long uintmax_t;
+ typedef long int64_t;
+ typedef long int_least64_t;
+ typedef long int_fast64_t;
+ typedef unsigned long uint64_t;
+ typedef unsigned long uint_least64_t;
+ typedef unsigned long uint_fast64_t;
+# else
+# error defaults not correct; you must hand modify boost/cstdint.hpp
+# endif
+# elif defined(__GNUC__) && defined(BOOST_HAS_LONG_LONG)
+ __extension__ typedef long long intmax_t;
+ __extension__ typedef unsigned long long uintmax_t;
+ __extension__ typedef long long int64_t;
+ __extension__ typedef long long int_least64_t;
+ __extension__ typedef long long int_fast64_t;
+ __extension__ typedef unsigned long long uint64_t;
+ __extension__ typedef unsigned long long uint_least64_t;
+ __extension__ typedef unsigned long long uint_fast64_t;
+# elif defined(BOOST_HAS_MS_INT64)
+ //
+ // we have Borland/Intel/Microsoft __int64:
+ //
+ typedef __int64 intmax_t;
+ typedef unsigned __int64 uintmax_t;
+ typedef __int64 int64_t;
+ typedef __int64 int_least64_t;
+ typedef __int64 int_fast64_t;
+ typedef unsigned __int64 uint64_t;
+ typedef unsigned __int64 uint_least64_t;
+ typedef unsigned __int64 uint_fast64_t;
+# else // assume no 64-bit integers
+# define BOOST_NO_INT64_T
+ typedef int32_t intmax_t;
+ typedef uint32_t uintmax_t;
+# endif
+
+} // namespace boost
+
+
+#endif // BOOST_HAS_STDINT_H
+
+#endif // BOOST_CSTDINT_HPP
+
+
+/****************************************************
+
+Macro definition section:
+
+Define various INTXX_C macros only if
+__STDC_CONSTANT_MACROS is defined.
+
+Undefine the macros if __STDC_CONSTANT_MACROS is
+not defined and the macros are (cf <cassert>).
+
+Added 23rd September 2000 (John Maddock).
+Modified 11th September 2001 to be excluded when
+BOOST_HAS_STDINT_H is defined (John Maddock).
+
+******************************************************/
+
+#if defined(__STDC_CONSTANT_MACROS) && !defined(BOOST__STDC_CONSTANT_MACROS_DEFINED) && !defined(BOOST_HAS_STDINT_H)
+# define BOOST__STDC_CONSTANT_MACROS_DEFINED
+# if defined(BOOST_HAS_MS_INT64)
+//
+// Borland/Intel/Microsoft compilers have width specific suffixes:
+//
+# define INT8_C(value) value##i8
+# define INT16_C(value) value##i16
+# define INT32_C(value) value##i32
+# define INT64_C(value) value##i64
+# ifdef __BORLANDC__
+ // Borland bug: appending ui8 makes the type a signed char
+# define UINT8_C(value) static_cast<unsigned char>(value##u)
+# else
+# define UINT8_C(value) value##ui8
+# endif
+# define UINT16_C(value) value##ui16
+# define UINT32_C(value) value##ui32
+# define UINT64_C(value) value##ui64
+# define INTMAX_C(value) value##i64
+# define UINTMAX_C(value) value##ui64
+
+# else
+// do it the old fashioned way:
+
+// 8-bit types ------------------------------------------------------------//
+
+# if UCHAR_MAX == 0xff
+# define INT8_C(value) static_cast<boost::int8_t>(value)
+# define UINT8_C(value) static_cast<boost::uint8_t>(value##u)
+# endif
+
+// 16-bit types -----------------------------------------------------------//
+
+# if USHRT_MAX == 0xffff
+# define INT16_C(value) static_cast<boost::int16_t>(value)
+# define UINT16_C(value) static_cast<boost::uint16_t>(value##u)
+# endif
+
+// 32-bit types -----------------------------------------------------------//
+
+# if UINT_MAX == 0xffffffff
+# define INT32_C(value) value
+# define UINT32_C(value) value##u
+# elif ULONG_MAX == 0xffffffff
+# define INT32_C(value) value##L
+# define UINT32_C(value) value##uL
+# endif
+
+// 64-bit types + intmax_t and uintmax_t ----------------------------------//
+
+# if defined(BOOST_HAS_LONG_LONG) && \
+ (defined(ULLONG_MAX) || defined(ULONG_LONG_MAX) || defined(ULONGLONG_MAX))
+
+# if defined(__hpux)
+ // HP-UX's value of ULONG_LONG_MAX is unusable in preprocessor expressions
+# elif (defined(ULLONG_MAX) && ULLONG_MAX == 18446744073709551615U) || \
+ (defined(ULONG_LONG_MAX) && ULONG_LONG_MAX == 18446744073709551615U) || \
+ (defined(ULONGLONG_MAX) && ULONGLONG_MAX == 18446744073709551615U)
+
+# else
+# error defaults not correct; you must hand modify boost/cstdint.hpp
+# endif
+# define INT64_C(value) value##LL
+# define UINT64_C(value) value##uLL
+# elif ULONG_MAX != 0xffffffff
+
+# if ULONG_MAX == 18446744073709551615 // 2**64 - 1
+# define INT64_C(value) value##L
+# define UINT64_C(value) value##uL
+# else
+# error defaults not correct; you must hand modify boost/cstdint.hpp
+# endif
+# endif
+
+# ifdef BOOST_NO_INT64_T
+# define INTMAX_C(value) INT32_C(value)
+# define UINTMAX_C(value) UINT32_C(value)
+# else
+# define INTMAX_C(value) INT64_C(value)
+# define UINTMAX_C(value) UINT64_C(value)
+# endif
+
+# endif // Borland/Microsoft specific width suffixes
+
+
+#elif defined(BOOST__STDC_CONSTANT_MACROS_DEFINED) && !defined(__STDC_CONSTANT_MACROS) && !defined(BOOST_HAS_STDINT_H)
+//
+// undef all the macros:
+//
+# undef INT8_C
+# undef INT16_C
+# undef INT32_C
+# undef INT64_C
+# undef UINT8_C
+# undef UINT16_C
+# undef UINT32_C
+# undef UINT64_C
+# undef INTMAX_C
+# undef UINTMAX_C
+
+#endif // __STDC_CONSTANT_MACROS_DEFINED etc.
+
+
+
+
diff --git a/boost/boost/cstdlib.hpp b/boost/boost/cstdlib.hpp
new file mode 100644
index 00000000000..63221463542
--- /dev/null
+++ b/boost/boost/cstdlib.hpp
@@ -0,0 +1,41 @@
+// boost/cstdlib.hpp header ------------------------------------------------//
+
+// Copyright Beman Dawes 2001. 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/utility/cstdlib.html for documentation.
+
+// Revision History
+// 26 Feb 01 Initial version (Beman Dawes)
+
+#ifndef BOOST_CSTDLIB_HPP
+#define BOOST_CSTDLIB_HPP
+
+#include <cstdlib>
+
+namespace boost
+{
+ // The intent is to propose the following for addition to namespace std
+ // in the C++ Standard Library, and to then deprecate EXIT_SUCCESS and
+ // EXIT_FAILURE. As an implementation detail, this header defines the
+ // new constants in terms of EXIT_SUCCESS and EXIT_FAILURE. In a new
+ // standard, the constants would be implementation-defined, although it
+ // might be worthwhile to "suggest" (which a standard is allowed to do)
+ // values of 0 and 1 respectively.
+
+ // Rationale for having multiple failure values: some environments may
+ // wish to distinguish between different classes of errors.
+ // Rationale for choice of values: programs often use values < 100 for
+ // their own error reporting. Values > 255 are sometimes reserved for
+ // system detected errors. 200/201 were suggested to minimize conflict.
+
+ const int exit_success = EXIT_SUCCESS; // implementation-defined value
+ const int exit_failure = EXIT_FAILURE; // implementation-defined value
+ const int exit_exception_failure = 200; // otherwise uncaught exception
+ const int exit_test_failure = 201; // report_error or
+ // report_critical_error called.
+}
+
+#endif
+
diff --git a/boost/boost/current_function.hpp b/boost/boost/current_function.hpp
new file mode 100644
index 00000000000..40e3abdca25
--- /dev/null
+++ b/boost/boost/current_function.hpp
@@ -0,0 +1,63 @@
+#ifndef BOOST_CURRENT_FUNCTION_HPP_INCLUDED
+#define BOOST_CURRENT_FUNCTION_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+// boost/current_function.hpp - BOOST_CURRENT_FUNCTION
+//
+// Copyright (c) 2002 Peter Dimov and Multi Media Ltd.
+//
+// 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)
+//
+// http://www.boost.org/libs/utility/current_function.html
+//
+
+namespace boost
+{
+
+namespace detail
+{
+
+inline void current_function_helper()
+{
+
+#if defined(__GNUC__) || (defined(__MWERKS__) && (__MWERKS__ >= 0x3000)) || (defined(__ICC) && (__ICC >= 600))
+
+# define BOOST_CURRENT_FUNCTION __PRETTY_FUNCTION__
+
+#elif defined(__FUNCSIG__)
+
+# define BOOST_CURRENT_FUNCTION __FUNCSIG__
+
+#elif (defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 600)) || (defined(__IBMCPP__) && (__IBMCPP__ >= 500))
+
+# define BOOST_CURRENT_FUNCTION __FUNCTION__
+
+#elif defined(__BORLANDC__) && (__BORLANDC__ >= 0x550)
+
+# define BOOST_CURRENT_FUNCTION __FUNC__
+
+#elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901)
+
+# define BOOST_CURRENT_FUNCTION __func__
+
+#else
+
+# define BOOST_CURRENT_FUNCTION "(unknown)"
+
+#endif
+
+}
+
+} // namespace detail
+
+} // namespace boost
+
+#endif // #ifndef BOOST_CURRENT_FUNCTION_HPP_INCLUDED
diff --git a/boost/boost/date_time.hpp b/boost/boost/date_time.hpp
new file mode 100644
index 00000000000..33467ed1d8d
--- /dev/null
+++ b/boost/boost/date_time.hpp
@@ -0,0 +1,15 @@
+#ifndef BOOST_DATE_TIME_ALL_HPP___
+#define BOOST_DATE_TIME_ALL_HPP___
+
+/* Copyright (c) 2006 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland
+ * $Date: 2006/10/27 23:18:29 $
+ */
+
+//gregorian and posix time included by indirectly
+#include "boost/date_time/local_time/local_time.hpp"
+
+#endif // BOOST_DATE_TIME_ALL_HPP___
diff --git a/boost/boost/date_time/adjust_functors.hpp b/boost/boost/date_time/adjust_functors.hpp
new file mode 100644
index 00000000000..4f455944e33
--- /dev/null
+++ b/boost/boost/date_time/adjust_functors.hpp
@@ -0,0 +1,178 @@
+#ifndef _DATE_TIME_ADJUST_FUNCTORS_HPP___
+#define _DATE_TIME_ADJUST_FUNCTORS_HPP___
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2004/07/04 18:40:23 $
+ */
+
+#include "boost/date_time/date.hpp"
+#include "boost/date_time/wrapping_int.hpp"
+
+namespace boost {
+namespace date_time {
+
+
+ //! Functor to iterate a fixed number of days
+ template<class date_type>
+ class day_functor
+ {
+ public:
+ typedef typename date_type::duration_type duration_type;
+ day_functor(int f) : f_(f) {}
+ duration_type get_offset(const date_type& d) const
+ {
+ // why is 'd' a parameter???
+ // fix compiler warnings
+ d.year();
+ return duration_type(f_);
+ }
+ duration_type get_neg_offset(const date_type& d) const
+ {
+ // fix compiler warnings
+ d.year();
+ return duration_type(-f_);
+ }
+ private:
+ int f_;
+ };
+
+
+ //! Provides calculation to find next nth month given a date
+ /*! This adjustment function provides the logic for 'month-based'
+ * advancement on a ymd based calendar. The policy it uses
+ * to handle the non existant end of month days is to back
+ * up to the last day of the month. Also, if the starting
+ * date is the last day of a month, this functor will attempt
+ * to adjust to the end of the month.
+
+ */
+ template<class date_type>
+ class month_functor
+ {
+ public:
+ typedef typename date_type::duration_type duration_type;
+ typedef typename date_type::calendar_type cal_type;
+ typedef typename cal_type::ymd_type ymd_type;
+ typedef typename cal_type::day_type day_type;
+
+ month_functor(int f) : f_(f), origDayOfMonth_(0) {}
+ duration_type get_offset(const date_type& d) const
+ {
+ ymd_type ymd(d.year_month_day());
+ if (origDayOfMonth_ == 0) {
+ origDayOfMonth_ = ymd.day;
+ day_type endOfMonthDay(cal_type::end_of_month_day(ymd.year,ymd.month));
+ if (endOfMonthDay == ymd.day) {
+ origDayOfMonth_ = -1; //force the value to the end of month
+ }
+ }
+ typedef date_time::wrapping_int2<short,1,12> wrap_int2;
+ typedef typename wrap_int2::int_type int_type;
+ wrap_int2 wi(ymd.month);
+ //calc the year wrap around, add() returns 0 or 1 if wrapped
+ int_type year = wi.add(static_cast<int_type>(f_));
+ year = static_cast<int_type>(year + ymd.year); //calculate resulting year
+// std::cout << "trace wi: " << wi.as_int() << std::endl;
+// std::cout << "trace year: " << year << std::endl;
+ //find the last day for the new month
+ day_type resultingEndOfMonthDay(cal_type::end_of_month_day(year, wi.as_int()));
+ //original was the end of month -- force to last day of month
+ if (origDayOfMonth_ == -1) {
+ return date_type(year, wi.as_int(), resultingEndOfMonthDay) - d;
+ }
+ day_type dayOfMonth = origDayOfMonth_;
+ if (dayOfMonth > resultingEndOfMonthDay) {
+ dayOfMonth = resultingEndOfMonthDay;
+ }
+ return date_type(year, wi.as_int(), dayOfMonth) - d;
+ }
+ //! Returns a negative duration_type
+ duration_type get_neg_offset(const date_type& d) const
+ {
+ ymd_type ymd(d.year_month_day());
+ if (origDayOfMonth_ == 0) {
+ origDayOfMonth_ = ymd.day;
+ day_type endOfMonthDay(cal_type::end_of_month_day(ymd.year,ymd.month));
+ if (endOfMonthDay == ymd.day) {
+ origDayOfMonth_ = -1; //force the value to the end of month
+ }
+ }
+ typedef date_time::wrapping_int2<short,1,12> wrap_int2;
+ typedef typename wrap_int2::int_type int_type;
+ wrap_int2 wi(ymd.month);
+ //calc the year wrap around, add() returns 0 or 1 if wrapped
+ int_type year = wi.subtract(static_cast<int_type>(f_));
+ year = static_cast<int_type>(year + ymd.year); //calculate resulting year
+ //find the last day for the new month
+ day_type resultingEndOfMonthDay(cal_type::end_of_month_day(year, wi.as_int()));
+ //original was the end of month -- force to last day of month
+ if (origDayOfMonth_ == -1) {
+ return date_type(year, wi.as_int(), resultingEndOfMonthDay) - d;
+ }
+ day_type dayOfMonth = origDayOfMonth_;
+ if (dayOfMonth > resultingEndOfMonthDay) {
+ dayOfMonth = resultingEndOfMonthDay;
+ }
+ return date_type(year, wi.as_int(), dayOfMonth) - d;
+ }
+ private:
+ int f_;
+ mutable short origDayOfMonth_;
+ };
+
+
+ //! Functor to iterate a over weeks
+ template<class date_type>
+ class week_functor
+ {
+ public:
+ typedef typename date_type::duration_type duration_type;
+ typedef typename date_type::calendar_type calendar_type;
+ week_functor(int f) : f_(f) {}
+ duration_type get_offset(const date_type& d) const
+ {
+ // why is 'd' a parameter???
+ // fix compiler warnings
+ d.year();
+ return duration_type(f_*calendar_type::days_in_week());
+ }
+ duration_type get_neg_offset(const date_type& d) const
+ {
+ // fix compiler warnings
+ d.year();
+ return duration_type(-f_*calendar_type::days_in_week());
+ }
+ private:
+ int f_;
+ };
+
+ //! Functor to iterate by a year adjusting for leap years
+ template<class date_type>
+ class year_functor
+ {
+ public:
+ //typedef typename date_type::year_type year_type;
+ typedef typename date_type::duration_type duration_type;
+ year_functor(int f) : _mf(f * 12) {}
+ duration_type get_offset(const date_type& d) const
+ {
+ return _mf.get_offset(d);
+ }
+ duration_type get_neg_offset(const date_type& d) const
+ {
+ return _mf.get_neg_offset(d);
+ }
+ private:
+ month_functor<date_type> _mf;
+ };
+
+
+} }//namespace date_time
+
+
+#endif
+
diff --git a/boost/boost/date_time/c_local_time_adjustor.hpp b/boost/boost/date_time/c_local_time_adjustor.hpp
new file mode 100644
index 00000000000..98f470140fc
--- /dev/null
+++ b/boost/boost/date_time/c_local_time_adjustor.hpp
@@ -0,0 +1,64 @@
+#ifndef DATE_TIME_C_LOCAL_TIME_ADJUSTOR_HPP__
+#define DATE_TIME_C_LOCAL_TIME_ADJUSTOR_HPP__
+
+/* Copyright (c) 2002,2003,2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2005/03/19 21:39:58 $
+ */
+
+/*! @file c_local_time_adjustor.hpp
+ Time adjustment calculations based on machine
+*/
+
+#include <stdexcept>
+#include "boost/date_time/c_time.hpp"
+
+namespace boost {
+namespace date_time {
+
+ //! Adjust to / from utc using the C API
+ /*! Warning!!! This class assumes that timezone settings of the
+ * machine are correct. This can be a very dangerous assumption.
+ */
+ template<class time_type>
+ class c_local_adjustor {
+ public:
+ typedef typename time_type::time_duration_type time_duration_type;
+ typedef typename time_type::date_type date_type;
+ typedef typename date_type::duration_type date_duration_type;
+ //! Convert a utc time to local time
+ static time_type utc_to_local(const time_type& t)
+ {
+ date_type time_t_start_day(1970,1,1);
+ time_type time_t_start_time(time_t_start_day,time_duration_type(0,0,0));
+ if (t < time_t_start_time) {
+ throw std::out_of_range("Cannot convert dates prior to Jan 1, 1970");
+ }
+ date_duration_type dd = t.date() - time_t_start_day;
+ time_duration_type td = t.time_of_day();
+ std::time_t t2 = dd.days()*86400 + td.hours()*3600 + td.minutes()*60 + td.seconds();
+ std::tm tms, *tms_ptr;
+ tms_ptr = c_time::localtime(&t2, &tms);
+ //tms_ptr = std::localtime(&t2);
+ date_type d(static_cast<unsigned short>(tms_ptr->tm_year + 1900),
+ static_cast<unsigned short>(tms_ptr->tm_mon + 1),
+ static_cast<unsigned short>(tms_ptr->tm_mday));
+ time_duration_type td2(tms_ptr->tm_hour,
+ tms_ptr->tm_min,
+ tms_ptr->tm_sec,
+ t.time_of_day().fractional_seconds());
+
+ return time_type(d,td2);
+ }
+ };
+
+
+
+} } //namespace date_time
+
+
+
+#endif
diff --git a/boost/boost/date_time/c_time.hpp b/boost/boost/date_time/c_time.hpp
new file mode 100644
index 00000000000..8937e87cb65
--- /dev/null
+++ b/boost/boost/date_time/c_time.hpp
@@ -0,0 +1,91 @@
+#ifndef DATE_TIME_C_TIME_HPP___
+#define DATE_TIME_C_TIME_HPP___
+
+/* Copyright (c) 2002,2003,2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2005/10/25 02:42:43 $
+ */
+
+
+/*! @file c_time.hpp
+ Provide workarounds related to the ctime header
+*/
+
+#include "boost/date_time/compiler_config.hpp"
+#include <ctime>
+//Work around libraries that don't put time_t and time in namespace std
+
+#ifdef BOOST_NO_STDC_NAMESPACE
+namespace std { using ::time_t; using ::time; using ::localtime;
+ using ::tm; using ::gmtime; }
+#endif // BOOST_NO_STDC_NAMESPACE
+
+//The following is used to support high precision time clocks
+#ifdef BOOST_HAS_GETTIMEOFDAY
+#include <sys/time.h>
+#endif
+
+#ifdef BOOST_HAS_FTIME
+#include <time.h>
+#endif
+
+namespace boost {
+namespace date_time {
+ //! Provides a uniform interface to some 'ctime' functions
+ /*! Provides a uniform interface to some ctime functions and
+ * their '_r' counterparts. The '_r' functions require a pointer to a
+ * user created std::tm struct whereas the regular functions use a
+ * staticly created struct and return a pointer to that. These wrapper
+ * functions require the user to create a std::tm struct and send in a
+ * pointer to it. A pointer to the user created struct will be returned. */
+ struct c_time {
+ public:
+#if defined(BOOST_DATE_TIME_HAS_REENTRANT_STD_FUNCTIONS)
+ //! requires a pointer to a user created std::tm struct
+ inline
+ static std::tm* localtime(const std::time_t* t, std::tm* result)
+ {
+ // localtime_r() not in namespace std???
+ result = localtime_r(t, result);
+ return result;
+ }
+ //! requires a pointer to a user created std::tm struct
+ inline
+ static std::tm* gmtime(const std::time_t* t, std::tm* result)
+ {
+ // gmtime_r() not in namespace std???
+ result = gmtime_r(t, result);
+ return result;
+ }
+#else // BOOST_HAS_THREADS
+
+#if (defined(_MSC_VER) && (_MSC_VER >= 1400))
+#pragma warning(push) // preserve warning settings
+#pragma warning(disable : 4996) // disable depricated localtime/gmtime warning on vc8
+#endif // _MSC_VER >= 1400
+ //! requires a pointer to a user created std::tm struct
+ inline
+ static std::tm* localtime(const std::time_t* t, std::tm* result)
+ {
+ result = std::localtime(t);
+ return result;
+ }
+ //! requires a pointer to a user created std::tm struct
+ inline
+ static std::tm* gmtime(const std::time_t* t, std::tm* result)
+ {
+ result = std::gmtime(t);
+ return result;
+ }
+#if (defined(_MSC_VER) && (_MSC_VER >= 1400))
+#pragma warning(pop) // restore warnings to previous state
+#endif // _MSC_VER >= 1400
+
+#endif // BOOST_HAS_THREADS
+ };
+}} // namespaces
+
+#endif // DATE_TIME_C_TIME_HPP___
diff --git a/boost/boost/date_time/compiler_config.hpp b/boost/boost/date_time/compiler_config.hpp
new file mode 100644
index 00000000000..142f851c292
--- /dev/null
+++ b/boost/boost/date_time/compiler_config.hpp
@@ -0,0 +1,149 @@
+#ifndef DATE_TIME_COMPILER_CONFIG_HPP___
+#define DATE_TIME_COMPILER_CONFIG_HPP___
+
+/* Copyright (c) 2002-2004 CrystalClear Software, Inc.
+ * Subject to the Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2006/02/26 20:10:18 $
+ */
+
+ #include "boost/detail/workaround.hpp"
+
+// With boost release 1.33, date_time will be using a different,
+// more flexible, IO system. This new system is not compatible with
+// old compilers. The original date_time IO system remains for those
+// compilers. They must define this macro to use the legacy IO.
+// (defined(__BORLANDC__) && (__BORLANDC__ <= 0x0581) ) ) &&
+ #if( BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT(0x581) ) \
+ || BOOST_WORKAROUND( __GNUC__, < 3) \
+ || (BOOST_WORKAROUND( _MSC_VER, <= 1300) ) \
+ ) \
+ && !defined(USE_DATE_TIME_PRE_1_33_FACET_IO)
+# define USE_DATE_TIME_PRE_1_33_FACET_IO
+#endif
+
+
+// This file performs some local compiler configurations
+
+#include "boost/date_time/locale_config.hpp" //set up locale configurations
+
+//Set up a configuration parameter for platforms that have
+//GetTimeOfDay
+#if defined(BOOST_HAS_GETTIMEOFDAY) || defined(BOOST_HAS_FTIME)
+#define BOOST_DATE_TIME_HAS_HIGH_PRECISION_CLOCK
+#endif
+
+// To Force no default constructors for date & ptime, un-comment following
+//#define DATE_TIME_NO_DEFAULT_CONSTRUCTOR
+
+// Include extensions to date_duration - comment out to remove this feature
+#define BOOST_DATE_TIME_OPTIONAL_GREGORIAN_TYPES
+// these extensions are known to cause problems with gcc295
+#if defined(__GNUC__) && (__GNUC__ < 3)
+#undef BOOST_DATE_TIME_OPTIONAL_GREGORIAN_TYPES
+#endif
+
+#if (defined(BOOST_NO_INCLASS_MEMBER_INITIALIZATION) || BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT(0x581) ) )
+#define BOOST_DATE_TIME_NO_MEMBER_INIT
+#endif
+
+// include these types before we try to re-define them
+#include "boost/cstdint.hpp"
+
+//Define INT64_C for compilers that don't have it
+#if (!defined(INT64_C))
+#define INT64_C(value) int64_t(value)
+#endif
+
+
+/* Workaround for Borland iterator error. Error was "Cannot convert 'istream *' to 'wistream *' in function istream_iterator<>::istream_iterator() */
+#if defined(__BORLANDC__) && defined(BOOST_BCB_WITH_RW_LIB)
+#define BOOST_DATE_TIME_NO_WISTREAM_ITERATOR
+#endif
+
+
+// Borland v5.64 does not have the following in std namespace; v5.5.1 does
+#if defined(__BORLANDC__) && defined(BOOST_BCB_WITH_STLPORT)
+#include <locale>
+namespace std {
+ using stlport::tolower;
+ using stlport::ctype;
+ using stlport::use_facet;
+}
+#endif
+
+// workaround for errors associated with output for date classes
+// modifications and input streaming for time classes.
+// Compilers affected are:
+// gcc295, msvc (neither with STLPort), any borland
+//
+#if (((defined(__GNUC__) && (__GNUC__ < 3)) || \
+ (defined(_MSC_VER) && (_MSC_VER < 1300)) ) && \
+ !defined(_STLP_OWN_IOSTREAMS) ) || \
+ BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT(0x581) )
+#define BOOST_DATE_TIME_INCLUDE_LIMITED_HEADERS
+#endif
+
+/* The following handles the definition of the necessary macros
+ * for dll building on Win32 platforms.
+ *
+ * For code that will be placed in the date_time .dll,
+ * it must be properly prefixed with BOOST_DATE_TIME_DECL.
+ * The corresponding .cpp file must have BOOST_DATE_TIME_SOURCES
+ * defined before including its header. For examples see:
+ * greg_month.hpp & greg_month.cpp
+ *
+ */
+
+#ifdef BOOST_HAS_DECLSPEC // defined in config system
+ // we need to import/export our code only if the user has specifically
+ // asked for it by defining either BOOST_ALL_DYN_LINK if they want all boost
+ // libraries to be dynamically linked, or BOOST_DATE_TIME_DYN_LINK
+ // if they want just this one to be dynamically liked:
+# if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_DATE_TIME_DYN_LINK)
+ // export if this is our own source, otherwise import:
+# ifdef BOOST_DATE_TIME_SOURCE
+# define BOOST_DATE_TIME_DECL __declspec(dllexport)
+# else
+# define BOOST_DATE_TIME_DECL __declspec(dllimport)
+# endif // BOOST_DATE_TIME_SOURCE
+# endif // DYN_LINK
+#endif // BOOST_HAS_DECLSPEC
+//
+// if BOOST_WHATEVER_DECL isn't defined yet define it now:
+#ifndef BOOST_DATE_TIME_DECL
+# define BOOST_DATE_TIME_DECL
+#endif
+
+//
+// Automatically link to the correct build variant where possible.
+//
+#if !defined(BOOST_ALL_NO_LIB) && !defined(BOOST_DATE_TIME_NO_LIB) && !defined(BOOST_DATE_TIME_SOURCE)
+//
+// Set the name of our library, this will get undef'ed by auto_link.hpp
+// once it's done with it:
+//
+#define BOOST_LIB_NAME boost_date_time
+//
+// If we're importing code from a dll, then tell auto_link.hpp about it:
+//
+#if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_DATE_TIME_DYN_LINK)
+# define BOOST_DYN_LINK
+#endif
+//
+// And include the header that does the work:
+//
+#include <boost/config/auto_link.hpp>
+#endif // auto-linking disabled
+
+#if defined(BOOST_HAS_THREADS)
+# if defined(_MSC_VER) || defined(__MWERKS__) || defined(__MINGW32__) || defined(__BORLANDC__)
+ //no reentrant posix functions (eg: localtime_r)
+# else
+# define BOOST_DATE_TIME_HAS_REENTRANT_STD_FUNCTIONS
+# endif
+#endif
+
+
+#endif
diff --git a/boost/boost/date_time/constrained_value.hpp b/boost/boost/date_time/constrained_value.hpp
new file mode 100644
index 00000000000..28283ddc6e1
--- /dev/null
+++ b/boost/boost/date_time/constrained_value.hpp
@@ -0,0 +1,98 @@
+#ifndef CONSTRAINED_VALUE_HPP___
+#define CONSTRAINED_VALUE_HPP___
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland
+ * $Date: 2004/02/26 18:26:47 $
+ */
+
+#include <boost/config.hpp>
+
+namespace boost {
+
+//! Namespace containing constrained_value template and types
+namespace CV {
+ //! Represent a min or max violation type
+ enum violation_enum {min_violation, max_violation};
+
+ //! A template to specify a constrained basic value type
+ /*! This template provides a quick way to generate
+ * an integer type with a constrained range. The type
+ * provides for the ability to specify the min, max, and
+ * and error handling policy.
+ *
+ * <b>value policies</b>
+ * A class that provides the range limits via the min and
+ * max functions as well as a function on_error that
+ * determines how errors are handled. A common strategy
+ * would be to assert or throw and exception. The on_error
+ * is passed both the current value and the new value that
+ * is in error.
+ *
+ */
+ template<class value_policies>
+ class constrained_value {
+ public:
+ typedef typename value_policies::value_type value_type;
+ // typedef except_type exception_type;
+ constrained_value(value_type value)
+ {
+ assign(value);
+ };
+ constrained_value& operator=(value_type v)
+ {
+ assign(v);
+ return *this;
+ }
+ //! Return the max allowed value (traits method)
+ static value_type max BOOST_PREVENT_MACRO_SUBSTITUTION () {return (value_policies::max)();};
+ //! Return the min allowed value (traits method)
+ static value_type min BOOST_PREVENT_MACRO_SUBSTITUTION () {return (value_policies::min)();};
+ //! Coerce into the representation type
+ operator value_type() const {return value_;};
+ protected:
+ value_type value_;
+ private:
+ void assign(value_type value)
+ {
+ //adding 1 below gets rid of a compiler warning which occurs when the
+ //min_value is 0 and the type is unsigned....
+ if (value+1 < (min)()+1) {
+ value_policies::on_error(value_, value, min_violation);
+ return;
+ }
+ if (value > (max)()) {
+ value_policies::on_error(value_, value, max_violation);
+ return;
+ }
+ value_ = value;
+
+ }
+};
+
+ //! Template to shortcut the constrained_value policy creation process
+ template<typename rep_type, rep_type min_value,
+ rep_type max_value, class exception_type>
+ class simple_exception_policy
+ {
+ public:
+ typedef rep_type value_type;
+ static rep_type min BOOST_PREVENT_MACRO_SUBSTITUTION () { return min_value; };
+ static rep_type max BOOST_PREVENT_MACRO_SUBSTITUTION () { return max_value;};
+ static void on_error(rep_type, rep_type, violation_enum)
+ {
+ throw exception_type();
+ }
+ };
+
+
+
+} } //namespace CV
+
+
+
+
+#endif
diff --git a/boost/boost/date_time/date.hpp b/boost/boost/date_time/date.hpp
new file mode 100644
index 00000000000..2e0cb6cc92b
--- /dev/null
+++ b/boost/boost/date_time/date.hpp
@@ -0,0 +1,197 @@
+#ifndef DATE_TIME_DATE_HPP___
+#define DATE_TIME_DATE_HPP___
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2004/01/11 17:41:21 $
+ */
+
+#include "boost/date_time/year_month_day.hpp"
+#include "boost/date_time/special_defs.hpp"
+#include "boost/operators.hpp"
+
+namespace boost {
+namespace date_time {
+
+ //!Representation of timepoint at the one day level resolution.
+ /*!
+ The date template represents an interface shell for a date class
+ that is based on a year-month-day system such as the gregorian
+ or iso systems. It provides basic operations to enable calculation
+ and comparisons.
+
+ <b>Theory</b>
+
+ This date representation fundamentally departs from the C tm struct
+ approach. The goal for this type is to provide efficient date
+ operations (add, subtract) and storage (minimize space to represent)
+ in a concrete class. Thus, the date uses a count internally to
+ represent a particular date. The calendar parameter defines
+ the policies for converting the the year-month-day and internal
+ counted form here. Applications that need to perform heavy
+ formatting of the same date repeatedly will perform better
+ by using the year-month-day representation.
+
+ Internally the date uses a day number to represent the date.
+ This is a monotonic time representation. This representation
+ allows for fast comparison as well as simplifying
+ the creation of writing numeric operations. Essentially, the
+ internal day number is like adjusted julian day. The adjustment
+ is determined by the Epoch date which is represented as day 1 of
+ the calendar. Day 0 is reserved for negative infinity so that
+ any actual date is automatically greater than negative infinity.
+ When a date is constructed from a date or formatted for output,
+ the appropriate conversions are applied to create the year, month,
+ day representations.
+ */
+
+
+ template<class T, class calendar, class duration_type_>
+ class date : private
+ boost::less_than_comparable<T
+ , boost::equality_comparable<T
+ > >
+ {
+ public:
+ typedef T date_type;
+ typedef calendar calendar_type;
+ typedef typename calendar::date_traits_type traits_type;
+ typedef duration_type_ duration_type;
+ typedef typename calendar::year_type year_type;
+ typedef typename calendar::month_type month_type;
+ typedef typename calendar::day_type day_type;
+ typedef typename calendar::ymd_type ymd_type;
+ typedef typename calendar::date_rep_type date_rep_type;
+ typedef typename calendar::date_int_type date_int_type;
+ typedef typename calendar::day_of_week_type day_of_week_type;
+ date(year_type y, month_type m, day_type d)
+ : days_(calendar::day_number(ymd_type(y, m, d)))
+ {}
+ date(const ymd_type& ymd)
+ : days_(calendar::day_number(ymd))
+ {}
+ //let the compiler write copy, assignment, and destructor
+ year_type year() const
+ {
+ ymd_type ymd = calendar::from_day_number(days_);
+ return ymd.year;
+ }
+ month_type month() const
+ {
+ ymd_type ymd = calendar::from_day_number(days_);
+ return ymd.month;
+ }
+ day_type day() const
+ {
+ ymd_type ymd = calendar::from_day_number(days_);
+ return ymd.day;
+ }
+ day_of_week_type day_of_week() const
+ {
+ ymd_type ymd = calendar::from_day_number(days_);
+ return calendar::day_of_week(ymd);
+ }
+ ymd_type year_month_day() const
+ {
+ return calendar::from_day_number(days_);
+ }
+ bool operator<(const date_type& rhs) const
+ {
+ return days_ < rhs.days_;
+ }
+ bool operator==(const date_type& rhs) const
+ {
+ return days_ == rhs.days_;
+ }
+ //! check to see if date is a special value
+ bool is_special()const
+ {
+ return(is_not_a_date() || is_infinity());
+ }
+ //! check to see if date is not a value
+ bool is_not_a_date() const
+ {
+ return traits_type::is_not_a_number(days_);
+ }
+ //! check to see if date is one of the infinity values
+ bool is_infinity() const
+ {
+ return traits_type::is_inf(days_);
+ }
+ //! check to see if date is greater than all possible dates
+ bool is_pos_infinity() const
+ {
+ return traits_type::is_pos_inf(days_);
+ }
+ //! check to see if date is greater than all possible dates
+ bool is_neg_infinity() const
+ {
+ return traits_type::is_neg_inf(days_);
+ }
+ //! return as a special value or a not_special if a normal date
+ special_values as_special() const
+ {
+ return traits_type::to_special(days_);
+ }
+ duration_type operator-(const date_type& d) const
+ {
+ date_rep_type val = date_rep_type(days_) - date_rep_type(d.days_);
+ return duration_type(val.as_number());
+ }
+
+ date_type operator-(const duration_type& dd) const
+ {
+ if(dd.is_special())
+ {
+ return date_type(date_rep_type(days_) - dd.get_rep());
+ }
+ return date_type(date_rep_type(days_) - dd.days());
+ }
+ date_type operator-=(const duration_type& dd)
+ {
+ *this = *this - dd;
+ return date_type(days_);
+ }
+ date_rep_type day_count() const
+ {
+ return days_;
+ };
+ //allow internal access from operators
+ date_type operator+(const duration_type& dd) const
+ {
+ if(dd.is_special())
+ {
+ return date_type(date_rep_type(days_) + dd.get_rep());
+ }
+ return date_type(date_rep_type(days_) + dd.days());
+ }
+ date_type operator+=(const duration_type& dd)
+ {
+ *this = *this + dd;
+ return date_type(days_);
+ }
+
+ //see reference
+ protected:
+ /*! This is a private constructor which allows for the creation of new
+ dates. It is not exposed to users since that would require class
+ users to understand the inner workings of the date class.
+ */
+ explicit date(date_int_type days) : days_(days) {};
+ explicit date(date_rep_type days) : days_(days.as_number()) {};
+ date_int_type days_;
+
+ };
+
+
+
+
+} } // namespace date_time
+
+
+
+
+#endif
diff --git a/boost/boost/date_time/date_clock_device.hpp b/boost/boost/date_time/date_clock_device.hpp
new file mode 100644
index 00000000000..4dd25a549a0
--- /dev/null
+++ b/boost/boost/date_time/date_clock_device.hpp
@@ -0,0 +1,77 @@
+#ifndef DATE_CLOCK_DEVICE_HPP___
+#define DATE_CLOCK_DEVICE_HPP___
+
+/* Copyright (c) 2002,2003,2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2005/03/19 21:39:59 $
+ */
+
+#include "boost/date_time/c_time.hpp"
+
+
+namespace boost {
+namespace date_time {
+
+ //! A clock providing day level services based on C time_t capabilities
+ /*! This clock uses Posix interfaces as its implementation and hence
+ * uses the timezone settings of the operating system. Incorrect
+ * user settings will result in incorrect results for the calls
+ * to local_day.
+ */
+ template<class date_type>
+ class day_clock
+ {
+ public:
+ typedef typename date_type::ymd_type ymd_type;
+ //! Get the local day as a date type
+ static date_type local_day()
+ {
+ return date_type(local_day_ymd());
+ }
+ //! Get the local day as a ymd_type
+ static typename date_type::ymd_type local_day_ymd()
+ {
+ ::std::tm result;
+ ::std::tm* curr = get_local_time(result);
+ return ymd_type(curr->tm_year + 1900,
+ curr->tm_mon + 1,
+ curr->tm_mday);
+ }
+ //! Get the current day in universal date as a ymd_type
+ static typename date_type::ymd_type universal_day_ymd()
+ {
+ ::std::tm result;
+ ::std::tm* curr = get_universal_time(result);
+ return ymd_type(curr->tm_year + 1900,
+ curr->tm_mon + 1,
+ curr->tm_mday);
+ }
+ //! Get the UTC day as a date type
+ static date_type universal_day()
+ {
+ return date_type(universal_day_ymd());
+ }
+
+ private:
+ static ::std::tm* get_local_time(std::tm& result)
+ {
+ ::std::time_t t;
+ ::std::time(&t);
+ return c_time::localtime(&t, &result);
+ }
+ static ::std::tm* get_universal_time(std::tm& result)
+ {
+ ::std::time_t t;
+ ::std::time(&t);
+ return c_time::gmtime(&t, &result);
+ }
+
+ };
+
+} } //namespace date_time
+
+
+#endif
diff --git a/boost/boost/date_time/date_defs.hpp b/boost/boost/date_time/date_defs.hpp
new file mode 100644
index 00000000000..220bfa7cab6
--- /dev/null
+++ b/boost/boost/date_time/date_defs.hpp
@@ -0,0 +1,26 @@
+#ifndef DATE_TIME_DATE_DEFS_HPP
+#define DATE_TIME_DATE_DEFS_HPP
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland
+ * $Date: 2003/11/23 03:28:06 $
+ */
+
+
+namespace boost {
+namespace date_time {
+
+ //! An enumeration of weekday names
+ enum weekdays {Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday};
+
+ //! Simple enum to allow for nice programming with Jan, Feb, etc
+ enum months_of_year {Jan=1,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec,NotAMonth,NumMonths};
+
+} } //namespace date_time
+
+
+
+#endif
diff --git a/boost/boost/date_time/date_duration.hpp b/boost/boost/date_time/date_duration.hpp
new file mode 100644
index 00000000000..41a0102b389
--- /dev/null
+++ b/boost/boost/date_time/date_duration.hpp
@@ -0,0 +1,147 @@
+#ifndef DATE_TIME_DATE_DURATION__
+#define DATE_TIME_DATE_DURATION__
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2003/12/03 01:56:13 $
+ */
+
+
+#include <boost/operators.hpp>
+
+namespace boost {
+namespace date_time {
+
+
+ //! Duration type with date level resolution
+ template<class duration_rep_traits>
+ class date_duration : private
+ boost::less_than_comparable<date_duration< duration_rep_traits>
+ , boost::equality_comparable< date_duration< duration_rep_traits>
+ , boost::addable< date_duration< duration_rep_traits>
+ , boost::subtractable< date_duration< duration_rep_traits>
+ > > > >
+ {
+ public:
+ typedef typename duration_rep_traits::int_type duration_rep_type;
+ typedef typename duration_rep_traits::impl_type duration_rep;
+
+ //! Construct from a day count
+ explicit date_duration(duration_rep day_count) : days_(day_count) {};
+
+ /*! construct from special_values - only works when
+ * instantiated with duration_traits_adapted */
+ date_duration(special_values sv) :
+ days_(duration_rep::from_special(sv))
+ {}
+
+ // copy constructor required for addable<> & subtractable<>
+ //! Construct from another date_duration (Copy Constructor)
+ date_duration(const date_duration<duration_rep_traits>& other) :
+ days_(other.days_)
+ {}
+
+ //! returns days_ as it's instantiated type - used for streaming
+ duration_rep get_rep()const
+ {
+ return days_;
+ }
+ bool is_special()const
+ {
+ return days_.is_special();
+ }
+ //! returns days as value, not object.
+ duration_rep_type days() const
+ {
+ return duration_rep_traits::as_number(days_);
+ }
+ //! Returns the smallest duration -- used by to calculate 'end'
+ static date_duration unit()
+ {
+ return date_duration<duration_rep_traits>(1);
+ }
+ //! Equality
+ bool operator==(const date_duration& rhs) const
+ {
+ return days_ == rhs.days_;
+ }
+ //! Less
+ bool operator<(const date_duration& rhs) const
+ {
+ return days_ < rhs.days_;
+ }
+
+ /* For shortcut operators (+=, -=, etc) simply using
+ * "days_ += days_" may not work. If instantiated with
+ * an int_adapter, shortcut operators are not present,
+ * so this will not compile */
+
+ //! Subtract another duration -- result is signed
+ date_duration operator-=(const date_duration& rhs)
+ {
+ //days_ -= rhs.days_;
+ days_ = days_ - rhs.days_;
+ return *this;
+ }
+ //! Add a duration -- result is signed
+ date_duration operator+=(const date_duration& rhs)
+ {
+ days_ = days_ + rhs.days_;
+ return *this;
+ }
+
+ //! unary- Allows for dd = -date_duration(2); -> dd == -2
+ date_duration operator-()const
+ {
+ return date_duration<duration_rep_traits>(get_rep() * (-1));
+ }
+ //! Division operations on a duration with an integer.
+ date_duration<duration_rep_traits> operator/=(int divisor)
+ {
+ days_ = days_ / divisor;
+ return *this;
+ }
+ date_duration<duration_rep_traits> operator/(int divisor)
+ {
+ return date_duration<duration_rep_traits>(days_ / divisor);
+ }
+
+ //! return sign information
+ bool is_negative() const
+ {
+ return days_ < 0;
+ }
+ private:
+ duration_rep days_;
+ };
+
+
+ /*! Struct for instantiating date_duration with <b>NO</b> special values
+ * functionality. Allows for transparent implementation of either
+ * date_duration<long> or date_duration<int_adapter<long> > */
+ struct duration_traits_long
+ {
+ typedef long int_type;
+ typedef long impl_type;
+ static int_type as_number(impl_type i) { return i; };
+ };
+
+ /*! Struct for instantiating date_duration <b>WITH</b> special values
+ * functionality. Allows for transparent implementation of either
+ * date_duration<long> or date_duration<int_adapter<long> > */
+ struct duration_traits_adapted
+ {
+ typedef long int_type;
+ typedef boost::date_time::int_adapter<long> impl_type;
+ static int_type as_number(impl_type i) { return i.as_number(); };
+ };
+
+
+} } //namspace date_time
+
+
+#endif
+
diff --git a/boost/boost/date_time/date_duration_types.hpp b/boost/boost/date_time/date_duration_types.hpp
new file mode 100644
index 00000000000..66a6afd5da0
--- /dev/null
+++ b/boost/boost/date_time/date_duration_types.hpp
@@ -0,0 +1,269 @@
+#ifndef DATE_DURATION_TYPES_HPP___
+#define DATE_DURATION_TYPES_HPP___
+
+/* Copyright (c) 2004 CrystalClear Software, Inc.
+ * Subject to the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE-1.0 or
+ * http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2004/07/17 22:20:18 $
+ */
+
+#include <boost/date_time/int_adapter.hpp>
+#include <boost/date_time/special_defs.hpp>
+#include <boost/date_time/date_duration.hpp>
+
+namespace boost {
+namespace date_time {
+
+
+ //! Additional duration type that represents a number of n*7 days
+ template <class duration_config>
+ class weeks_duration : public date_duration<duration_config> {
+ public:
+ weeks_duration(typename duration_config::impl_type w)
+ : date_duration<duration_config>(w * 7) {}
+ weeks_duration(special_values sv)
+ : date_duration<duration_config>(sv) {}
+ };
+
+ // predeclare
+ template<class t>
+ class years_duration;
+
+ //! additional duration type that represents a logical month
+ /*! A logical month enables things like: "date(2002,Mar,2) + months(2) ->
+ * 2002-May2". If the date is a last day-of-the-month, the result will
+ * also be a last-day-of-the-month.
+ */
+ template<class base_config>
+ class months_duration
+ {
+ private:
+ typedef typename base_config::int_rep int_rep;
+ typedef typename int_rep::int_type int_type;
+ typedef typename base_config::date_type date_type;
+ typedef typename date_type::duration_type duration_type;
+ typedef typename base_config::month_adjustor_type month_adjustor_type;
+ typedef months_duration<base_config> months_type;
+ typedef years_duration<base_config> years_type;
+ public:
+ months_duration(int_rep num) : _m(num) {}
+ months_duration(special_values sv) : _m(sv)
+ {
+ _m = int_rep::from_special(sv);
+ }
+ int_rep number_of_months() const { return _m; }
+ //! returns a negative duration
+ duration_type get_neg_offset(const date_type& d) const
+ {
+ month_adjustor_type m_adj(_m.as_number());
+ return duration_type(m_adj.get_neg_offset(d));
+ }
+ duration_type get_offset(const date_type& d) const
+ {
+ month_adjustor_type m_adj(_m.as_number());
+ return duration_type(m_adj.get_offset(d));
+ }
+ bool operator==(const months_type& rhs) const
+ {
+ return(_m == rhs._m);
+ }
+ bool operator!=(const months_type& rhs) const
+ {
+ return(_m != rhs._m);
+ }
+ months_type operator+(const months_type& rhs)const
+ {
+ return months_type(_m + rhs._m);
+ }
+ months_type& operator+=(const months_type& rhs)
+ {
+ _m = _m + rhs._m;
+ return *this;
+ }
+ months_type operator-(const months_type& rhs)const
+ {
+ return months_type(_m - rhs._m);
+ }
+ months_type& operator-=(const months_type& rhs)
+ {
+ _m = _m - rhs._m;
+ return *this;
+ }
+ months_type operator*(const int_type rhs)const
+ {
+ return months_type(_m * rhs);
+ }
+ months_type& operator*=(const int_type rhs)
+ {
+ _m = _m * rhs;
+ return *this;
+ }
+ months_type operator/(const int_type rhs)const
+ {
+ return months_type(_m / rhs);
+ }
+ months_type& operator/=(const int_type rhs)
+ {
+ _m = _m / rhs;
+ return *this;
+ }
+ months_type operator+(const years_type& y)const
+ {
+ return months_type(y.number_of_years() * 12 + _m);
+ }
+ months_type& operator+=(const years_type& y)
+ {
+ _m = y.number_of_years() * 12 + _m;
+ return *this;
+ }
+ months_type operator-(const years_type& y) const
+ {
+ return months_type(_m - y.number_of_years() * 12);
+ }
+ months_type& operator-=(const years_type& y)
+ {
+ _m = _m - y.number_of_years() * 12;
+ return *this;
+ }
+
+ //
+ friend date_type operator+(const date_type& d, const months_type& m)
+ {
+ return d + m.get_offset(d);
+ }
+ friend date_type operator+=(date_type& d, const months_type& m)
+ {
+ return d += m.get_offset(d);
+ }
+ friend date_type operator-(const date_type& d, const months_type& m)
+ {
+ // get_neg_offset returns a negative duration, so we add
+ return d + m.get_neg_offset(d);
+ }
+ friend date_type operator-=(date_type& d, const months_type& m)
+ {
+ // get_neg_offset returns a negative duration, so we add
+ return d += m.get_neg_offset(d);
+ }
+
+ private:
+ int_rep _m;
+ };
+
+ //! additional duration type that represents a logical year
+ /*! A logical year enables things like: "date(2002,Mar,2) + years(2) ->
+ * 2004-Mar-2". If the date is a last day-of-the-month, the result will
+ * also be a last-day-of-the-month (ie date(2001-Feb-28) + years(3) ->
+ * 2004-Feb-29).
+ */
+ template<class base_config>
+ class years_duration
+ {
+ private:
+ typedef typename base_config::int_rep int_rep;
+ typedef typename int_rep::int_type int_type;
+ typedef typename base_config::date_type date_type;
+ typedef typename date_type::duration_type duration_type;
+ typedef typename base_config::month_adjustor_type month_adjustor_type;
+ typedef years_duration<base_config> years_type;
+ typedef months_duration<base_config> months_type;
+ public:
+ years_duration(int_rep num) : _y(num) {}
+ years_duration(special_values sv) : _y(sv)
+ {
+ _y = int_rep::from_special(sv);
+ }
+ int_rep number_of_years() const { return _y; }
+ //! returns a negative duration
+ duration_type get_neg_offset(const date_type& d) const
+ {
+ month_adjustor_type m_adj(_y.as_number() * 12);
+ return duration_type(m_adj.get_neg_offset(d));
+ }
+ duration_type get_offset(const date_type& d) const
+ {
+ month_adjustor_type m_adj(_y.as_number() * 12);
+ return duration_type(m_adj.get_offset(d));
+ }
+ bool operator==(const years_type& rhs) const
+ {
+ return(_y == rhs._y);
+ }
+ bool operator!=(const years_type& rhs) const
+ {
+ return(_y != rhs._y);
+ }
+ years_type operator+(const years_type& rhs)const
+ {
+ return years_type(_y + rhs._y);
+ }
+ years_type& operator+=(const years_type& rhs)
+ {
+ _y = _y + rhs._y;
+ return *this;
+ }
+ years_type operator-(const years_type& rhs)const
+ {
+ return years_type(_y - rhs._y);
+ }
+ years_type& operator-=(const years_type& rhs)
+ {
+ _y = _y - rhs._y;
+ return *this;
+ }
+ years_type operator*(const int_type rhs)const
+ {
+ return years_type(_y * rhs);
+ }
+ years_type& operator*=(const int_type rhs)
+ {
+ _y = _y * rhs;
+ return *this;
+ }
+ years_type operator/(const int_type rhs)const
+ {
+ return years_type(_y / rhs);
+ }
+ years_type& operator/=(const int_type rhs)
+ {
+ _y = _y / rhs;
+ return *this;
+ }
+ months_type operator+(const months_type& m) const
+ {
+ return(months_type(_y * 12 + m.number_of_months()));
+ }
+ months_type operator-(const months_type& m) const
+ {
+ return(months_type(_y * 12 - m.number_of_months()));
+ }
+
+ //
+ friend date_type operator+(const date_type& d, const years_type& y)
+ {
+ return d + y.get_offset(d);
+ }
+ friend date_type operator+=(date_type& d, const years_type& y)
+ {
+ return d += y.get_offset(d);
+ }
+ friend date_type operator-(const date_type& d, const years_type& y)
+ {
+ // get_neg_offset returns a negative duration, so we add
+ return d + y.get_neg_offset(d);
+ }
+ friend date_type operator-=(date_type& d, const years_type& y)
+ {
+ // get_neg_offset returns a negative duration, so we add
+ return d += y.get_neg_offset(d);
+ }
+
+ private:
+ int_rep _y;
+ };
+
+}} // namespace boost::date_time
+
+#endif // DATE_DURATION_TYPES_HPP___
diff --git a/boost/boost/date_time/date_facet.hpp b/boost/boost/date_time/date_facet.hpp
new file mode 100644
index 00000000000..d1bfcc0901b
--- /dev/null
+++ b/boost/boost/date_time/date_facet.hpp
@@ -0,0 +1,775 @@
+#ifndef _DATE_TIME_DATE_FACET__HPP___
+#define _DATE_TIME_DATE_FACET__HPP___
+
+/* Copyright (c) 2004-2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Martin Andrian, Jeff Garland, Bart Garst
+ * $Date: 2005/09/05 21:10:50 $
+ */
+
+
+#include "boost/algorithm/string/replace.hpp"
+#include "boost/date_time/period.hpp"
+#include "boost/date_time/special_values_formatter.hpp"
+#include "boost/date_time/period_formatter.hpp"
+#include "boost/date_time/period_parser.hpp"
+#include "boost/date_time/date_generator_formatter.hpp"
+#include "boost/date_time/date_generator_parser.hpp"
+#include "boost/date_time/format_date_parser.hpp"
+#include <string>
+#include <vector>
+
+namespace boost { namespace date_time {
+
+
+ /*! Class that provides format based I/O facet for date types.
+ *
+ * This class allows the formatting of dates by using format string.
+ * Format strings are:
+ *
+ * - %A => long_weekday_format - Full name Ex: Tuesday
+ * - %a => short_weekday_format - Three letter abbreviation Ex: Tue
+ * - %B => long_month_format - Full name Ex: October
+ * - %b => short_month_format - Three letter abbreviation Ex: Oct
+ * - %x => standard_format_specifier - defined by the locale
+ * - %Y-%b-%d => default_date_format - YYYY-Mon-dd
+ *
+ * Default month format == %b
+ * Default weekday format == %a
+ */
+ template <class date_type,
+ class CharT,
+ class OutItrT = std::ostreambuf_iterator<CharT, std::char_traits<CharT> > >
+ class date_facet : public std::locale::facet {
+ public:
+ typedef typename date_type::duration_type duration_type;
+ // greg_weekday is gregorian_calendar::day_of_week_type
+ typedef typename date_type::day_of_week_type day_of_week_type;
+ typedef typename date_type::day_type day_type;
+ typedef typename date_type::month_type month_type;
+ typedef boost::date_time::period<date_type,duration_type> period_type;
+ typedef std::basic_string<CharT> string_type;
+ typedef CharT char_type;
+ typedef boost::date_time::period_formatter<CharT> period_formatter_type;
+ typedef boost::date_time::special_values_formatter<CharT> special_values_formatter_type;
+ typedef std::vector<std::basic_string<CharT> > input_collection_type;
+ // used for the output of the date_generators
+ typedef date_generator_formatter<date_type, CharT> date_gen_formatter_type;
+ typedef partial_date<date_type> partial_date_type;
+ typedef nth_kday_of_month<date_type> nth_kday_type;
+ typedef first_kday_of_month<date_type> first_kday_type;
+ typedef last_kday_of_month<date_type> last_kday_type;
+ typedef first_kday_after<date_type> kday_after_type;
+ typedef first_kday_before<date_type> kday_before_type;
+ static const char_type long_weekday_format[3];
+ static const char_type short_weekday_format[3];
+ static const char_type long_month_format[3];
+ static const char_type short_month_format[3];
+ static const char_type default_period_separator[4];
+ static const char_type standard_format_specifier[3];
+ static const char_type iso_format_specifier[7];
+ static const char_type iso_format_extended_specifier[9];
+ static const char_type default_date_format[9]; // YYYY-Mon-DD
+ static std::locale::id id;
+
+#if defined (__SUNPRO_CC) && defined (_RWSTD_VER)
+ std::locale::id& __get_id (void) const { return id; }
+#endif
+
+ explicit date_facet(::size_t a_ref = 0)
+ : std::locale::facet(a_ref),
+ //m_format(standard_format_specifier)
+ m_format(default_date_format),
+ m_month_format(short_month_format),
+ m_weekday_format(short_weekday_format)
+ {}
+
+ explicit date_facet(const char_type* format_str,
+ const input_collection_type& short_names,
+ ::size_t ref_count = 0)
+ : std::locale::facet(ref_count),
+ m_format(format_str),
+ m_month_format(short_month_format),
+ m_weekday_format(short_weekday_format),
+ m_month_short_names(short_names)
+ {}
+
+
+ explicit date_facet(const char_type* format_str,
+ period_formatter_type per_formatter = period_formatter_type(),
+ special_values_formatter_type sv_formatter = special_values_formatter_type(),
+ date_gen_formatter_type dg_formatter = date_gen_formatter_type(),
+ ::size_t ref_count = 0)
+ : std::locale::facet(ref_count),
+ m_format(format_str),
+ m_month_format(short_month_format),
+ m_weekday_format(short_weekday_format),
+ m_period_formatter(per_formatter),
+ m_date_gen_formatter(dg_formatter),
+ m_special_values_formatter(sv_formatter)
+ {}
+ void format(const char_type* const format_str) {
+ m_format = format_str;
+ }
+ virtual void set_iso_format()
+ {
+ m_format = iso_format_specifier;
+ }
+ virtual void set_iso_extended_format()
+ {
+ m_format = iso_format_extended_specifier;
+ }
+ void month_format(const char_type* const format_str) {
+ m_month_format = format_str;
+ }
+ void weekday_format(const char_type* const format_str) {
+ m_weekday_format = format_str;
+ }
+
+ void period_formatter(period_formatter_type per_formatter) {
+ m_period_formatter= per_formatter;
+ }
+ void special_values_formatter(const special_values_formatter_type& svf)
+ {
+ m_special_values_formatter = svf;
+ }
+ void short_weekday_names(const input_collection_type& short_names)
+ {
+ m_weekday_short_names = short_names;
+ }
+ void long_weekday_names(const input_collection_type& long_names)
+ {
+ m_weekday_long_names = long_names;
+ }
+
+ void short_month_names(const input_collection_type& short_names)
+ {
+ m_month_short_names = short_names;
+ }
+
+ void long_month_names(const input_collection_type& long_names)
+ {
+ m_month_long_names = long_names;
+ }
+
+ void date_gen_phrase_strings(const input_collection_type& new_strings,
+ typename date_gen_formatter_type::phrase_elements beg_pos=date_gen_formatter_type::first)
+ {
+ m_date_gen_formatter.elements(new_strings, beg_pos);
+ }
+
+ OutItrT put(OutItrT next,
+ std::ios_base& a_ios,
+ char_type fill_char,
+ const date_type& d) const
+ {
+ if (d.is_special()) {
+ return do_put_special(next, a_ios, fill_char, d.as_special());
+ }
+ //The following line of code required the date to support a to_tm function
+ return do_put_tm(next, a_ios, fill_char, to_tm(d), m_format);
+ }
+
+ OutItrT put(OutItrT next,
+ std::ios_base& a_ios,
+ char_type fill_char,
+ const duration_type& dd) const
+ {
+ if (dd.is_special()) {
+ return do_put_special(next, a_ios, fill_char, dd.get_rep().as_special());
+ }
+
+ typedef std::num_put<CharT, OutItrT> num_put;
+ if (std::has_facet<num_put>(a_ios.getloc())) {
+ return std::use_facet<num_put>(a_ios.getloc()).put(next, a_ios, fill_char, dd.get_rep().as_number());
+ }
+ else {
+ num_put* f = new num_put();
+ std::locale l = std::locale(a_ios.getloc(), f);
+ a_ios.imbue(l);
+ return f->put(next, a_ios, fill_char, dd.get_rep().as_number());
+ }
+
+ }
+
+
+ OutItrT put(OutItrT next,
+ std::ios_base& a_ios,
+ char_type fill_char,
+ const month_type& m) const
+ {
+ //if (d.is_special()) {
+ // return do_put_special(next, a_ios, fill_char, d.as_special());
+ //}
+ //The following line of code required the date to support a to_tm function
+ tm dtm;
+ init_tm(dtm);
+ dtm.tm_mon = m -1;
+ return do_put_tm(next, a_ios, fill_char, dtm, m_month_format);
+ }
+
+ //! puts the day of month
+ OutItrT put(OutItrT next,
+ std::ios_base& a_ios,
+ char_type fill_char,
+ const day_type& day) const
+ {
+ tm dtm;
+ init_tm(dtm);
+ dtm.tm_mday = day.as_number();
+ char_type tmp[3] = {'%','d'};
+ string_type temp_format(tmp);
+ return do_put_tm(next, a_ios, fill_char, dtm, temp_format);
+ }
+
+ OutItrT put(OutItrT next,
+ std::ios_base& a_ios,
+ char_type fill_char,
+ const day_of_week_type& dow) const
+ {
+ //if (d.is_special()) {
+ // return do_put_special(next, a_ios, fill_char, d.as_special());
+ //}
+ //The following line of code required the date to support a to_tm function
+ tm dtm;
+ init_tm(dtm);
+ dtm.tm_wday = dow;
+ return do_put_tm(next, a_ios, fill_char, dtm, m_weekday_format);
+ }
+
+
+ OutItrT put(OutItrT next,
+ std::ios_base& a_ios,
+ char_type fill_char,
+ const period_type& p) const
+ {
+ return m_period_formatter.put_period(next, a_ios, fill_char, p, *this);
+ }
+
+ OutItrT put(OutItrT next,
+ std::ios_base& a_ios,
+ char_type fill_char,
+ const partial_date_type& pd) const
+ {
+ return m_date_gen_formatter.put_partial_date(next, a_ios, fill_char, pd, *this);
+ }
+
+ OutItrT put(OutItrT next,
+ std::ios_base& a_ios,
+ char_type fill_char,
+ const nth_kday_type& nkd) const
+ {
+ return m_date_gen_formatter.put_nth_kday(next, a_ios, fill_char, nkd, *this);
+ }
+
+ OutItrT put(OutItrT next,
+ std::ios_base& a_ios,
+ char_type fill_char,
+ const first_kday_type& fkd) const
+ {
+ return m_date_gen_formatter.put_first_kday(next, a_ios, fill_char, fkd, *this);
+ }
+
+ OutItrT put(OutItrT next,
+ std::ios_base& a_ios,
+ char_type fill_char,
+ const last_kday_type& lkd) const
+ {
+ return m_date_gen_formatter.put_last_kday(next, a_ios, fill_char, lkd, *this);
+ }
+
+ OutItrT put(OutItrT next,
+ std::ios_base& a_ios,
+ char_type fill_char,
+ const kday_before_type& fkb) const
+ {
+ return m_date_gen_formatter.put_kday_before(next, a_ios, fill_char, fkb, *this);
+ }
+
+ OutItrT put(OutItrT next,
+ std::ios_base& a_ios,
+ char_type fill_char,
+ const kday_after_type& fka) const
+ {
+ return m_date_gen_formatter.put_kday_after(next, a_ios, fill_char, fka, *this);
+ }
+
+ protected:
+ //! Helper function to initialize all fields in a tm struct
+ tm init_tm(tm& tm_value) const
+ {
+ tm_value.tm_sec = 0; /* seconds */
+ tm_value.tm_min = 0; /* minutes */
+ tm_value.tm_hour = 0; /* hours */
+ tm_value.tm_mday = 0; /* day of the month */
+ tm_value.tm_mon = 0; /* month */
+ tm_value.tm_year = 0; /* year */
+ tm_value.tm_wday = 0; /* day of the week */
+ tm_value.tm_yday = 0; /* day in the year */
+ tm_value.tm_isdst = 0; /* daylight saving time */
+ return tm_value;
+ }
+ virtual OutItrT do_put_special(OutItrT next,
+ std::ios_base& /*a_ios*/,
+ char_type /*fill_char*/,
+ const boost::date_time::special_values sv) const
+ {
+ m_special_values_formatter.put_special(next, sv);
+ return next;
+ }
+ virtual OutItrT do_put_tm(OutItrT next,
+ std::ios_base& a_ios,
+ char_type fill_char,
+ const tm& tm_value,
+ string_type a_format) const
+ {
+ // update format string with custom names
+ if (m_weekday_long_names.size()) {
+ boost::algorithm::replace_all(a_format,
+ long_weekday_format,
+ m_weekday_long_names[tm_value.tm_wday]);
+ }
+ if (m_weekday_short_names.size()) {
+ boost::algorithm::replace_all(a_format,
+ short_weekday_format,
+ m_weekday_short_names[tm_value.tm_wday]);
+
+ }
+ if (m_month_long_names.size()) {
+ boost::algorithm::replace_all(a_format,
+ long_month_format,
+ m_month_long_names[tm_value.tm_mon]);
+ }
+ if (m_month_short_names.size()) {
+ boost::algorithm::replace_all(a_format,
+ short_month_format,
+ m_month_short_names[tm_value.tm_mon]);
+ }
+ // use time_put facet to create final string
+ return std::use_facet<std::time_put<CharT> >(a_ios.getloc()).put(next, a_ios,
+ fill_char,
+ &tm_value,
+ &*a_format.begin(),
+ &*a_format.begin()+a_format.size());
+ }
+ protected:
+ string_type m_format;
+ string_type m_month_format;
+ string_type m_weekday_format;
+ period_formatter_type m_period_formatter;
+ date_gen_formatter_type m_date_gen_formatter;
+ special_values_formatter_type m_special_values_formatter;
+ input_collection_type m_month_short_names;
+ input_collection_type m_month_long_names;
+ input_collection_type m_weekday_short_names;
+ input_collection_type m_weekday_long_names;
+ private:
+ };
+
+ template <class date_type, class CharT, class OutItrT>
+ std::locale::id date_facet<date_type, CharT, OutItrT>::id;
+
+ template <class date_type, class CharT, class OutItrT>
+ const typename date_facet<date_type, CharT, OutItrT>::char_type
+ date_facet<date_type, CharT, OutItrT>::long_weekday_format[3] = {'%','A'};
+
+ template <class date_type, class CharT, class OutItrT>
+ const typename date_facet<date_type, CharT, OutItrT>::char_type
+ date_facet<date_type, CharT, OutItrT>::short_weekday_format[3] = {'%','a'};
+
+ template <class date_type, class CharT, class OutItrT>
+ const typename date_facet<date_type, CharT, OutItrT>::char_type
+ date_facet<date_type, CharT, OutItrT>::long_month_format[3] = {'%','B'};
+
+ template <class date_type, class CharT, class OutItrT>
+ const typename date_facet<date_type, CharT, OutItrT>::char_type
+ date_facet<date_type, CharT, OutItrT>::short_month_format[3] = {'%','b'};
+
+ template <class date_type, class CharT, class OutItrT>
+ const typename date_facet<date_type, CharT, OutItrT>::char_type
+ date_facet<date_type, CharT, OutItrT>::default_period_separator[4] = { ' ', '/', ' '};
+
+ template <class date_type, class CharT, class OutItrT>
+ const typename date_facet<date_type, CharT, OutItrT>::char_type
+ date_facet<date_type, CharT, OutItrT>::standard_format_specifier[3] =
+ {'%', 'x' };
+
+ template <class date_type, class CharT, class OutItrT>
+ const typename date_facet<date_type, CharT, OutItrT>::char_type
+ date_facet<date_type, CharT, OutItrT>::iso_format_specifier[7] =
+ {'%', 'Y', '%', 'm', '%', 'd' };
+
+ template <class date_type, class CharT, class OutItrT>
+ const typename date_facet<date_type, CharT, OutItrT>::char_type
+ date_facet<date_type, CharT, OutItrT>::iso_format_extended_specifier[9] =
+ {'%', 'Y', '-', '%', 'm', '-', '%', 'd' };
+
+ template <class date_type, class CharT, class OutItrT>
+ const typename date_facet<date_type, CharT, OutItrT>::char_type
+ date_facet<date_type, CharT, OutItrT>::default_date_format[9] =
+ {'%','Y','-','%','b','-','%','d'};
+
+
+
+ //! Input facet
+ template <class date_type,
+ class CharT,
+ class InItrT = std::istreambuf_iterator<CharT, std::char_traits<CharT> > >
+ class date_input_facet : public std::locale::facet {
+ public:
+ typedef typename date_type::duration_type duration_type;
+ // greg_weekday is gregorian_calendar::day_of_week_type
+ typedef typename date_type::day_of_week_type day_of_week_type;
+ typedef typename date_type::day_type day_type;
+ typedef typename date_type::month_type month_type;
+ typedef typename date_type::year_type year_type;
+ typedef boost::date_time::period<date_type,duration_type> period_type;
+ typedef std::basic_string<CharT> string_type;
+ typedef CharT char_type;
+ typedef boost::date_time::period_parser<date_type, CharT> period_parser_type;
+ typedef special_values_parser<date_type,CharT> special_values_parser_type;
+ typedef std::vector<std::basic_string<CharT> > input_collection_type;
+ typedef format_date_parser<date_type, CharT> format_date_parser_type;
+ // date_generators stuff goes here
+ typedef date_generator_parser<date_type, CharT> date_gen_parser_type;
+ typedef partial_date<date_type> partial_date_type;
+ typedef nth_kday_of_month<date_type> nth_kday_type;
+ typedef first_kday_of_month<date_type> first_kday_type;
+ typedef last_kday_of_month<date_type> last_kday_type;
+ typedef first_kday_after<date_type> kday_after_type;
+ typedef first_kday_before<date_type> kday_before_type;
+
+ static const char_type long_weekday_format[3];
+ static const char_type short_weekday_format[3];
+ static const char_type long_month_format[3];
+ static const char_type short_month_format[3];
+ static const char_type four_digit_year_format[3];
+ static const char_type two_digit_year_format[3];
+ static const char_type default_period_separator[4];
+ static const char_type standard_format_specifier[3];
+ static const char_type iso_format_specifier[7];
+ static const char_type iso_format_extended_specifier[9];
+ static const char_type default_date_format[9]; // YYYY-Mon-DD
+ static std::locale::id id;
+
+ explicit date_input_facet(::size_t a_ref = 0)
+ : std::locale::facet(a_ref),
+ m_format(default_date_format),
+ m_month_format(short_month_format),
+ m_weekday_format(short_weekday_format),
+ m_year_format(four_digit_year_format),
+ m_parser(m_format, std::locale::classic())
+ // default period_parser & special_values_parser used
+ {}
+
+ explicit date_input_facet(const string_type& format_str,
+ ::size_t a_ref = 0)
+ : std::locale::facet(a_ref),
+ m_format(format_str),
+ m_month_format(short_month_format),
+ m_weekday_format(short_weekday_format),
+ m_year_format(four_digit_year_format),
+ m_parser(m_format, std::locale::classic())
+ // default period_parser & special_values_parser used
+ {}
+
+ explicit date_input_facet(const string_type& format_str,
+ const format_date_parser_type& date_parser,
+ const special_values_parser_type& sv_parser,
+ const period_parser_type& per_parser,
+ const date_gen_parser_type& date_gen_parser,
+ ::size_t ref_count = 0)
+ : std::locale::facet(ref_count),
+ m_format(format_str),
+ m_month_format(short_month_format),
+ m_weekday_format(short_weekday_format),
+ m_year_format(four_digit_year_format),
+ m_parser(date_parser),
+ m_date_gen_parser(date_gen_parser),
+ m_period_parser(per_parser),
+ m_sv_parser(sv_parser)
+ {}
+
+
+ void format(const char_type* const format_str) {
+ m_format = format_str;
+ }
+ virtual void set_iso_format()
+ {
+ m_format = iso_format_specifier;
+ }
+ virtual void set_iso_extended_format()
+ {
+ m_format = iso_format_extended_specifier;
+ }
+ void month_format(const char_type* const format_str) {
+ m_month_format = format_str;
+ }
+ void weekday_format(const char_type* const format_str) {
+ m_weekday_format = format_str;
+ }
+ void year_format(const char_type* const format_str) {
+ m_year_format = format_str;
+ }
+
+ void period_parser(period_parser_type per_parser) {
+ m_period_parser = per_parser;
+ }
+ void short_weekday_names(const input_collection_type& weekday_names)
+ {
+ m_parser.short_weekday_names(weekday_names);
+ }
+ void long_weekday_names(const input_collection_type& weekday_names)
+ {
+ m_parser.long_weekday_names(weekday_names);
+ }
+
+ void short_month_names(const input_collection_type& month_names)
+ {
+ m_parser.short_month_names(month_names);
+ }
+
+ void long_month_names(const input_collection_type& month_names)
+ {
+ m_parser.long_month_names(month_names);
+ }
+
+ void date_gen_element_strings(const input_collection_type& col)
+ {
+ m_date_gen_parser.element_strings(col);
+ }
+ void date_gen_element_strings(const string_type& first,
+ const string_type& second,
+ const string_type& third,
+ const string_type& fourth,
+ const string_type& fifth,
+ const string_type& last,
+ const string_type& before,
+ const string_type& after,
+ const string_type& of)
+
+ {
+ m_date_gen_parser.element_strings(first,second,third,fourth,fifth,last,before,after,of);
+ }
+
+ void special_values_parser(special_values_parser_type sv_parser)
+ {
+ m_sv_parser = sv_parser;
+ }
+
+ InItrT get(InItrT& from,
+ InItrT& to,
+ std::ios_base& /*a_ios*/,
+ date_type& d) const
+ {
+ d = m_parser.parse_date(from, to, m_format, m_sv_parser);
+ return from;
+ }
+ InItrT get(InItrT& from,
+ InItrT& to,
+ std::ios_base& /*a_ios*/,
+ month_type& m) const
+ {
+ m = m_parser.parse_month(from, to, m_month_format);
+ return from;
+ }
+ InItrT get(InItrT& from,
+ InItrT& to,
+ std::ios_base& /*a_ios*/,
+ day_of_week_type& wd) const
+ {
+ wd = m_parser.parse_weekday(from, to, m_weekday_format);
+ return from;
+ }
+ //! Expects 1 or 2 digit day range: 1-31
+ InItrT get(InItrT& from,
+ InItrT& to,
+ std::ios_base& /*a_ios*/,
+ day_type& d) const
+ {
+ d = m_parser.parse_var_day_of_month(from, to);
+ return from;
+ }
+ InItrT get(InItrT& from,
+ InItrT& to,
+ std::ios_base& /*a_ios*/,
+ year_type& y) const
+ {
+ y = m_parser.parse_year(from, to, m_year_format);
+ return from;
+ }
+ InItrT get(InItrT& from,
+ InItrT& to,
+ std::ios_base& a_ios,
+ duration_type& dd) const
+ {
+ // skip leading whitespace
+ while(std::isspace(*from) && from != to) { ++from; }
+
+ /* num_get.get() will always consume the first character if it
+ * is a sign indicator (+/-). Special value strings may begin
+ * with one of these signs so we'll need a copy of it
+ * in case num_get.get() fails. */
+ char_type c = '\0';
+ // TODO Are these characters somewhere in the locale?
+ if(*from == '-' || *from == '+') {
+ c = *from;
+ }
+ typedef std::num_get<CharT, InItrT> num_get;
+ typename duration_type::duration_rep_type val = 0;
+ std::ios_base::iostate err = std::ios_base::goodbit;
+
+ if (std::has_facet<num_get>(a_ios.getloc())) {
+ from = std::use_facet<num_get>(a_ios.getloc()).get(from, to, a_ios, err, val);
+ }
+ else {
+ num_get* ng = new num_get();
+ std::locale l = std::locale(a_ios.getloc(), ng);
+ a_ios.imbue(l);
+ from = ng->get(from, to, a_ios, err, val);
+ }
+ if(err & std::ios_base::failbit){
+ typedef typename special_values_parser_type::match_results match_results;
+ match_results mr;
+ if(c == '-' || c == '+') { // was the first character consumed?
+ mr.cache += c;
+ }
+ m_sv_parser.match(from, to, mr);
+ if(mr.current_match == match_results::PARSE_ERROR) {
+ throw std::ios_base::failure("Parse failed. No match found for '" + mr.cache + "'");
+ }
+ dd = duration_type(static_cast<special_values>(mr.current_match));
+ }
+ else {
+ dd = duration_type(val);
+ }
+ return from;
+ }
+ InItrT get(InItrT& from,
+ InItrT& to,
+ std::ios_base& a_ios,
+ period_type& p) const
+ {
+ p = m_period_parser.get_period(from, to, a_ios, p, duration_type::unit(), *this);
+ return from;
+ }
+ InItrT get(InItrT& from,
+ InItrT& to,
+ std::ios_base& a_ios,
+ nth_kday_type& nkd) const
+ {
+ nkd = m_date_gen_parser.get_nth_kday_type(from, to, a_ios, *this);
+ return from;
+ }
+ InItrT get(InItrT& from,
+ InItrT& to,
+ std::ios_base& a_ios,
+ partial_date_type& pd) const
+ {
+
+ pd = m_date_gen_parser.get_partial_date_type(from, to, a_ios, *this);
+ return from;
+ }
+ InItrT get(InItrT& from,
+ InItrT& to,
+ std::ios_base& a_ios,
+ first_kday_type& fkd) const
+ {
+ fkd = m_date_gen_parser.get_first_kday_type(from, to, a_ios, *this);
+ return from;
+ }
+ InItrT get(InItrT& from,
+ InItrT& to,
+ std::ios_base& a_ios,
+ last_kday_type& lkd) const
+ {
+ lkd = m_date_gen_parser.get_last_kday_type(from, to, a_ios, *this);
+ return from;
+ }
+ InItrT get(InItrT& from,
+ InItrT& to,
+ std::ios_base& a_ios,
+ kday_before_type& fkb) const
+ {
+ fkb = m_date_gen_parser.get_kday_before_type(from, to, a_ios, *this);
+ return from;
+ }
+ InItrT get(InItrT& from,
+ InItrT& to,
+ std::ios_base& a_ios,
+ kday_after_type& fka) const
+ {
+ fka = m_date_gen_parser.get_kday_after_type(from, to, a_ios, *this);
+ return from;
+ }
+
+ protected:
+ string_type m_format;
+ string_type m_month_format;
+ string_type m_weekday_format;
+ string_type m_year_format;
+ format_date_parser_type m_parser;
+ date_gen_parser_type m_date_gen_parser;
+ period_parser_type m_period_parser;
+ special_values_parser_type m_sv_parser;
+ private:
+ };
+
+
+ template <class date_type, class CharT, class OutItrT>
+ std::locale::id date_input_facet<date_type, CharT, OutItrT>::id;
+
+ template <class date_type, class CharT, class OutItrT>
+ const typename date_input_facet<date_type, CharT, OutItrT>::char_type
+ date_input_facet<date_type, CharT, OutItrT>::long_weekday_format[3] = {'%','A'};
+
+ template <class date_type, class CharT, class OutItrT>
+ const typename date_input_facet<date_type, CharT, OutItrT>::char_type
+ date_input_facet<date_type, CharT, OutItrT>::short_weekday_format[3] = {'%','a'};
+
+ template <class date_type, class CharT, class OutItrT>
+ const typename date_input_facet<date_type, CharT, OutItrT>::char_type
+ date_input_facet<date_type, CharT, OutItrT>::long_month_format[3] = {'%','B'};
+
+ template <class date_type, class CharT, class OutItrT>
+ const typename date_input_facet<date_type, CharT, OutItrT>::char_type
+ date_input_facet<date_type, CharT, OutItrT>::short_month_format[3] = {'%','b'};
+
+ template <class date_type, class CharT, class OutItrT>
+ const typename date_input_facet<date_type, CharT, OutItrT>::char_type
+ date_input_facet<date_type, CharT, OutItrT>::four_digit_year_format[3] = {'%','Y'};
+
+ template <class date_type, class CharT, class OutItrT>
+ const typename date_input_facet<date_type, CharT, OutItrT>::char_type
+ date_input_facet<date_type, CharT, OutItrT>::two_digit_year_format[3] = {'%','y'};
+
+ template <class date_type, class CharT, class OutItrT>
+ const typename date_input_facet<date_type, CharT, OutItrT>::char_type
+ date_input_facet<date_type, CharT, OutItrT>::default_period_separator[4] = { ' ', '/', ' '};
+
+ template <class date_type, class CharT, class OutItrT>
+ const typename date_input_facet<date_type, CharT, OutItrT>::char_type
+ date_input_facet<date_type, CharT, OutItrT>::standard_format_specifier[3] =
+ {'%', 'x' };
+
+ template <class date_type, class CharT, class OutItrT>
+ const typename date_input_facet<date_type, CharT, OutItrT>::char_type
+ date_input_facet<date_type, CharT, OutItrT>::iso_format_specifier[7] =
+ {'%', 'Y', '%', 'm', '%', 'd' };
+
+ template <class date_type, class CharT, class OutItrT>
+ const typename date_input_facet<date_type, CharT, OutItrT>::char_type
+ date_input_facet<date_type, CharT, OutItrT>::iso_format_extended_specifier[9] =
+ {'%', 'Y', '-', '%', 'm', '-', '%', 'd' };
+
+ template <class date_type, class CharT, class OutItrT>
+ const typename date_input_facet<date_type, CharT, OutItrT>::char_type
+ date_input_facet<date_type, CharT, OutItrT>::default_date_format[9] =
+ {'%','Y','-','%','b','-','%','d'};
+
+} } // namespaces
+
+
+#endif
diff --git a/boost/boost/date_time/date_format_simple.hpp b/boost/boost/date_time/date_format_simple.hpp
new file mode 100644
index 00000000000..d7273b7dcbd
--- /dev/null
+++ b/boost/boost/date_time/date_format_simple.hpp
@@ -0,0 +1,159 @@
+#ifndef DATE_TIME_SIMPLE_FORMAT_HPP___
+#define DATE_TIME_SIMPLE_FORMAT_HPP___
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2004/08/29 19:31:11 $
+ */
+
+#include "boost/date_time/parse_format_base.hpp"
+
+namespace boost {
+namespace date_time {
+
+//! Class to provide simple basic formatting rules
+template<class charT>
+class simple_format {
+public:
+
+ //! String used printed is date is invalid
+ static const charT* not_a_date()
+ {
+ return "not-a-date-time";
+ }
+ //! String used to for positive infinity value
+ static const charT* pos_infinity()
+ {
+ return "+infinity";
+ }
+ //! String used to for positive infinity value
+ static const charT* neg_infinity()
+ {
+ return "-infinity";
+ }
+ //! Describe month format
+ static month_format_spec month_format()
+ {
+ return month_as_short_string;
+ }
+ static ymd_order_spec date_order()
+ {
+ return ymd_order_iso; //YYYY-MM-DD
+ }
+ //! This format uses '-' to separate date elements
+ static bool has_date_sep_chars()
+ {
+ return true;
+ }
+ //! Char to sep?
+ static charT year_sep_char()
+ {
+ return '-';
+ }
+ //! char between year-month
+ static charT month_sep_char()
+ {
+ return '-';
+ }
+ //! Char to separate month-day
+ static charT day_sep_char()
+ {
+ return '-';
+ }
+ //! char between date-hours
+ static charT hour_sep_char()
+ {
+ return ' ';
+ }
+ //! char between hour and minute
+ static charT minute_sep_char()
+ {
+ return ':';
+ }
+ //! char for second
+ static charT second_sep_char()
+ {
+ return ':';
+ }
+
+};
+
+#ifndef BOOST_NO_STD_WSTRING
+
+//! Specialization of formmating rules for wchar_t
+template<>
+class simple_format<wchar_t> {
+public:
+
+ //! String used printed is date is invalid
+ static const wchar_t* not_a_date()
+ {
+ return L"not-a-date-time";
+ }
+ //! String used to for positive infinity value
+ static const wchar_t* pos_infinity()
+ {
+ return L"+infinity";
+ }
+ //! String used to for positive infinity value
+ static const wchar_t* neg_infinity()
+ {
+ return L"-infinity";
+ }
+ //! Describe month format
+ static month_format_spec month_format()
+ {
+ return month_as_short_string;
+ }
+ static ymd_order_spec date_order()
+ {
+ return ymd_order_iso; //YYYY-MM-DD
+ }
+ //! This format uses '-' to separate date elements
+ static bool has_date_sep_chars()
+ {
+ return true;
+ }
+ //! Char to sep?
+ static wchar_t year_sep_char()
+ {
+ return '-';
+ }
+ //! char between year-month
+ static wchar_t month_sep_char()
+ {
+ return '-';
+ }
+ //! Char to separate month-day
+ static wchar_t day_sep_char()
+ {
+ return '-';
+ }
+ //! char between date-hours
+ static wchar_t hour_sep_char()
+ {
+ return ' ';
+ }
+ //! char between hour and minute
+ static wchar_t minute_sep_char()
+ {
+ return ':';
+ }
+ //! char for second
+ static wchar_t second_sep_char()
+ {
+ return ':';
+ }
+
+};
+
+#endif // BOOST_NO_STD_WSTRING
+} } //namespace date_time
+
+
+
+
+#endif
diff --git a/boost/boost/date_time/date_formatting.hpp b/boost/boost/date_time/date_formatting.hpp
new file mode 100644
index 00000000000..d35ab9550d3
--- /dev/null
+++ b/boost/boost/date_time/date_formatting.hpp
@@ -0,0 +1,127 @@
+#ifndef DATE_TIME_DATE_FORMATTING_HPP___
+#define DATE_TIME_DATE_FORMATTING_HPP___
+
+/* Copyright (c) 2002-2004 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2005/12/06 03:49:15 $
+ */
+
+#include "boost/date_time/iso_format.hpp"
+#include "boost/date_time/compiler_config.hpp"
+#include <string>
+#include <sstream>
+#include <iomanip>
+
+/* NOTE: "formatter" code for older compilers, ones that define
+ * BOOST_DATE_TIME_INCLUDE_LIMITED_HEADERS, is located in
+ * date_formatting_limited.hpp
+ */
+
+namespace boost {
+namespace date_time {
+
+ //! Formats a month as as string into an ostream
+ template<class month_type, class format_type, class charT=char>
+ class month_formatter
+ {
+ typedef std::basic_ostream<charT> ostream_type;
+ public:
+ //! Formats a month as as string into an ostream
+ /*! This function demands that month_type provide
+ * functions for converting to short and long strings
+ * if that capability is used.
+ */
+ static ostream_type& format_month(const month_type& month,
+ ostream_type &os)
+ {
+ switch (format_type::month_format())
+ {
+ case month_as_short_string:
+ {
+ os << month.as_short_string();
+ break;
+ }
+ case month_as_long_string:
+ {
+ os << month.as_long_string();
+ break;
+ }
+ case month_as_integer:
+ {
+ os << std::setw(2) << std::setfill(os.widen('0')) << month.as_number();
+ break;
+ }
+
+ }
+ return os;
+ } // format_month
+ };
+
+
+ //! Convert ymd to a standard string formatting policies
+ template<class ymd_type, class format_type, class charT=char>
+ class ymd_formatter
+ {
+ public:
+ //! Convert ymd to a standard string formatting policies
+ /*! This is standard code for handling date formatting with
+ * year-month-day based date information. This function
+ * uses the format_type to control whether the string will
+ * contain separator characters, and if so what the character
+ * will be. In addtion, it can format the month as either
+ * an integer or a string as controled by the formatting
+ * policy
+ */
+ static std::basic_string<charT> ymd_to_string(ymd_type ymd)
+ {
+ typedef typename ymd_type::month_type month_type;
+ std::basic_ostringstream<charT> ss;
+ ss << ymd.year;
+ if (format_type::has_date_sep_chars()) {
+ ss << format_type::month_sep_char();
+ }
+ //this name is a bit ugly, oh well....
+ month_formatter<month_type,format_type,charT>::format_month(ymd.month, ss);
+ if (format_type::has_date_sep_chars()) {
+ ss << format_type::day_sep_char();
+ }
+ ss << std::setw(2) << std::setfill(ss.widen('0'))
+ << ymd.day;
+ return ss.str();
+ }
+ };
+
+
+ //! Convert a date to string using format policies
+ template<class date_type, class format_type, class charT=char>
+ class date_formatter
+ {
+ public:
+ typedef std::basic_string<charT> string_type;
+ //! Convert to a date to standard string using format policies
+ static string_type date_to_string(date_type d)
+ {
+ typedef typename date_type::ymd_type ymd_type;
+ if (d.is_not_a_date()) {
+ return string_type(format_type::not_a_date());
+ }
+ if (d.is_neg_infinity()) {
+ return string_type(format_type::neg_infinity());
+ }
+ if (d.is_pos_infinity()) {
+ return string_type(format_type::pos_infinity());
+ }
+ ymd_type ymd = d.year_month_day();
+ return ymd_formatter<ymd_type, format_type, charT>::ymd_to_string(ymd);
+ }
+ };
+
+
+} } //namespace date_time
+
+
+#endif
+
diff --git a/boost/boost/date_time/date_formatting_limited.hpp b/boost/boost/date_time/date_formatting_limited.hpp
new file mode 100644
index 00000000000..430472b5f88
--- /dev/null
+++ b/boost/boost/date_time/date_formatting_limited.hpp
@@ -0,0 +1,121 @@
+#ifndef DATE_TIME_DATE_FORMATTING_LIMITED_HPP___
+#define DATE_TIME_DATE_FORMATTING_LIMITED_HPP___
+
+/* Copyright (c) 2002-2004 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2004/08/29 19:31:12 $
+ */
+
+#include "boost/date_time/iso_format.hpp"
+#include "boost/date_time/compiler_config.hpp"
+#include <string>
+#include <sstream>
+#include <iomanip>
+
+
+namespace boost {
+namespace date_time {
+
+ //! Formats a month as as string into an ostream
+ template<class month_type, class format_type>
+ class month_formatter
+ {
+ public:
+ //! Formats a month as as string into an ostream
+ /*! This function demands that month_type provide
+ * functions for converting to short and long strings
+ * if that capability is used.
+ */
+ static std::ostream& format_month(const month_type& month,
+ std::ostream& os)
+ {
+ switch (format_type::month_format())
+ {
+ case month_as_short_string:
+ {
+ os << month.as_short_string();
+ break;
+ }
+ case month_as_long_string:
+ {
+ os << month.as_long_string();
+ break;
+ }
+ case month_as_integer:
+ {
+ os << std::setw(2) << std::setfill('0') << month.as_number();
+ break;
+ }
+
+ }
+ return os;
+ } // format_month
+ };
+
+
+ //! Convert ymd to a standard string formatting policies
+ template<class ymd_type, class format_type>
+ class ymd_formatter
+ {
+ public:
+ //! Convert ymd to a standard string formatting policies
+ /*! This is standard code for handling date formatting with
+ * year-month-day based date information. This function
+ * uses the format_type to control whether the string will
+ * contain separator characters, and if so what the character
+ * will be. In addtion, it can format the month as either
+ * an integer or a string as controled by the formatting
+ * policy
+ */
+ static std::string ymd_to_string(ymd_type ymd)
+ {
+ typedef typename ymd_type::month_type month_type;
+ std::ostringstream ss;
+ ss << ymd.year;
+ if (format_type::has_date_sep_chars()) {
+ ss << format_type::month_sep_char();
+ }
+ //this name is a bit ugly, oh well....
+ month_formatter<month_type,format_type>::format_month(ymd.month, ss);
+ if (format_type::has_date_sep_chars()) {
+ ss << format_type::day_sep_char();
+ }
+ ss << std::setw(2) << std::setfill('0')
+ << ymd.day;
+ return ss.str();
+ }
+ };
+
+
+ //! Convert a date to string using format policies
+ template<class date_type, class format_type>
+ class date_formatter
+ {
+ public:
+ //! Convert to a date to standard string using format policies
+ static std::string date_to_string(date_type d)
+ {
+ typedef typename date_type::ymd_type ymd_type;
+ if (d.is_not_a_date()) {
+ return format_type::not_a_date();
+ }
+ if (d.is_neg_infinity()) {
+ return format_type::neg_infinity();
+ }
+ if (d.is_pos_infinity()) {
+ return format_type::pos_infinity();
+ }
+ ymd_type ymd = d.year_month_day();
+ return ymd_formatter<ymd_type, format_type>::ymd_to_string(ymd);
+ }
+ };
+
+
+} } //namespace date_time
+
+
+#endif
+
diff --git a/boost/boost/date_time/date_formatting_locales.hpp b/boost/boost/date_time/date_formatting_locales.hpp
new file mode 100644
index 00000000000..b863ae13014
--- /dev/null
+++ b/boost/boost/date_time/date_formatting_locales.hpp
@@ -0,0 +1,233 @@
+#ifndef DATE_TIME_DATE_FORMATTING_LOCALES_HPP___
+#define DATE_TIME_DATE_FORMATTING_LOCALES_HPP___
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2004/01/25 18:26:57 $
+ */
+
+
+#include "boost/date_time/locale_config.hpp" // set BOOST_DATE_TIME_NO_LOCALE
+
+#ifndef BOOST_DATE_TIME_NO_LOCALE
+
+#include "boost/date_time/iso_format.hpp"
+#include "boost/date_time/date_names_put.hpp"
+#include "boost/date_time/parse_format_base.hpp"
+//#include <string>
+#include <sstream>
+#include <iomanip>
+
+
+namespace boost {
+namespace date_time {
+
+ //! Formats a month as as string into an ostream
+ template<class facet_type,
+ class charT = char>
+ class ostream_month_formatter
+ {
+ public:
+ typedef typename facet_type::month_type month_type;
+ typedef std::basic_ostream<charT> ostream_type;
+
+ //! Formats a month as as string into an output iterator
+ static void format_month(const month_type& month,
+ ostream_type& os,
+ const facet_type& f)
+ {
+
+ switch (f.month_format())
+ {
+ case month_as_short_string:
+ {
+ std::ostreambuf_iterator<charT> oitr(os);
+ f.put_month_short(oitr, month.as_enum());
+ break;
+ }
+ case month_as_long_string:
+ {
+ std::ostreambuf_iterator<charT> oitr(os);
+ f.put_month_long(oitr, month.as_enum());
+ break;
+ }
+ case month_as_integer:
+ {
+ charT fill_char = '0';
+ os << std::setw(2) << std::setfill(fill_char) << month.as_number();
+ break;
+ }
+
+ }
+ } // format_month
+
+ };
+
+
+ //! Formats a weekday
+ template<class weekday_type,
+ class facet_type,
+ class charT = char>
+ class ostream_weekday_formatter
+ {
+ public:
+ typedef typename facet_type::month_type month_type;
+ typedef std::basic_ostream<charT> ostream_type;
+
+ //! Formats a month as as string into an output iterator
+ static void format_weekday(const weekday_type& wd,
+ ostream_type& os,
+ const facet_type& f,
+ bool as_long_string)
+ {
+
+ std::ostreambuf_iterator<charT> oitr(os);
+ if (as_long_string) {
+ f.put_weekday_long(oitr, wd.as_enum());
+ }
+ else {
+ f.put_weekday_short(oitr, wd.as_enum());
+ }
+
+ } // format_weekday
+
+ };
+
+
+ //! Convert ymd to a standard string formatting policies
+ template<class ymd_type,
+ class facet_type,
+ class charT = char>
+ class ostream_ymd_formatter
+ {
+ public:
+ typedef typename ymd_type::month_type month_type;
+ typedef ostream_month_formatter<facet_type, charT> month_formatter_type;
+ typedef std::basic_ostream<charT> ostream_type;
+ typedef std::basic_string<charT> foo_type;
+
+ //! Convert ymd to a standard string formatting policies
+ /*! This is standard code for handling date formatting with
+ * year-month-day based date information. This function
+ * uses the format_type to control whether the string will
+ * contain separator characters, and if so what the character
+ * will be. In addtion, it can format the month as either
+ * an integer or a string as controled by the formatting
+ * policy
+ */
+ // static string_type ymd_to_string(ymd_type ymd)
+// {
+// std::ostringstream ss;
+// facet_type dnp;
+// ymd_put(ymd, ss, dnp);
+// return ss.str();
+// }
+
+
+ // Put ymd to ostream -- part of ostream refactor
+ static void ymd_put(ymd_type ymd,
+ ostream_type& os,
+ const facet_type& f)
+ {
+ std::ostreambuf_iterator<charT> oitr(os);
+ charT fill_char = '0';
+ switch (f.date_order()) {
+ case ymd_order_iso: {
+ os << ymd.year;
+ if (f.has_date_sep_chars()) {
+ f.month_sep_char(oitr);
+ }
+ month_formatter_type::format_month(ymd.month, os, f);
+ if (f.has_date_sep_chars()) {
+ f.day_sep_char(oitr);
+ }
+ os << std::setw(2) << std::setfill(fill_char)
+ << ymd.day;
+ break;
+ }
+ case ymd_order_us: {
+ month_formatter_type::format_month(ymd.month, os, f);
+ if (f.has_date_sep_chars()) {
+ f.day_sep_char(oitr);
+ }
+ os << std::setw(2) << std::setfill(fill_char)
+ << ymd.day;
+ if (f.has_date_sep_chars()) {
+ f.month_sep_char(oitr);
+ }
+ os << ymd.year;
+ break;
+ }
+ case ymd_order_dmy: {
+ os << std::setw(2) << std::setfill(fill_char)
+ << ymd.day;
+ if (f.has_date_sep_chars()) {
+ f.day_sep_char(oitr);
+ }
+ month_formatter_type::format_month(ymd.month, os, f);
+ if (f.has_date_sep_chars()) {
+ f.month_sep_char(oitr);
+ }
+ os << ymd.year;
+ break;
+ }
+ }
+ }
+ };
+
+
+ //! Convert a date to string using format policies
+ template<class date_type,
+ class facet_type,
+ class charT = char>
+ class ostream_date_formatter
+ {
+ public:
+ typedef std::basic_ostream<charT> ostream_type;
+ typedef typename date_type::ymd_type ymd_type;
+
+ //! Put date into an ostream
+ static void date_put(const date_type& d,
+ ostream_type& os,
+ const facet_type& f)
+ {
+ special_values sv = d.as_special();
+ if (sv == not_special) {
+ ymd_type ymd = d.year_month_day();
+ ostream_ymd_formatter<ymd_type, facet_type, charT>::ymd_put(ymd, os, f);
+ }
+ else { // output a special value
+ std::ostreambuf_iterator<charT> coi(os);
+ f.put_special_value(coi, sv);
+ }
+ }
+
+
+ //! Put date into an ostream
+ static void date_put(const date_type& d,
+ ostream_type& os)
+ {
+ //retrieve the local from the ostream
+ std::locale locale = os.getloc();
+ if (std::has_facet<facet_type>(locale)) {
+ const facet_type& f = std::use_facet<facet_type>(locale);
+ date_put(d, os, f);
+ }
+ else {
+ //default to something sensible if no facet installed
+ facet_type default_facet;
+ date_put(d, os, default_facet);
+ }
+ } // date_to_ostream
+ }; //class date_formatter
+
+
+} } //namespace date_time
+
+#endif
+
+#endif
+
diff --git a/boost/boost/date_time/date_generator_formatter.hpp b/boost/boost/date_time/date_generator_formatter.hpp
new file mode 100644
index 00000000000..ee6d526a4d5
--- /dev/null
+++ b/boost/boost/date_time/date_generator_formatter.hpp
@@ -0,0 +1,263 @@
+#ifndef _DATE_TIME_DATE_GENERATOR_FORMATTER__HPP___
+#define _DATE_TIME_DATE_GENERATOR_FORMATTER__HPP___
+
+/* Copyright (c) 2004 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2005/03/28 14:27:09 $
+ */
+
+#include <iostream>
+#include <string>
+#include <vector>
+#include <algorithm>
+#include "boost/date_time/date_generators.hpp"
+
+namespace boost {
+namespace date_time {
+
+ //! Formats date_generators for output
+ /*! Formatting of date_generators follows specific orders for the
+ * various types of date_generators.
+ * - partial_date => "dd Month"
+ * - nth_day_of_the_week_in_month => "nth weekday of month"
+ * - first_day_of_the_week_in_month => "first weekday of month"
+ * - last_day_of_the_week_in_month => "last weekday of month"
+ * - first_day_of_the_week_after => "weekday after"
+ * - first_day_of_the_week_before => "weekday before"
+ * While the order of the elements in these phrases cannot be changed,
+ * the elements themselves can be. Weekday and Month get their formats
+ * and names from the date_facet. The remaining elements are stored in
+ * the date_generator_formatter and can be customized upon construction
+ * or via a member function. The default elements are those shown in the
+ * examples above.
+ */
+ template <class date_type, class CharT, class OutItrT = std::ostreambuf_iterator<CharT, std::char_traits<CharT> > >
+ class date_generator_formatter {
+ public:
+ typedef partial_date<date_type> partial_date_type;
+ typedef nth_kday_of_month<date_type> nth_kday_type;
+ typedef first_kday_of_month<date_type> first_kday_type;
+ typedef last_kday_of_month<date_type> last_kday_type;
+ typedef first_kday_after<date_type> kday_after_type;
+ typedef first_kday_before<date_type> kday_before_type;
+
+ typedef CharT char_type;
+ typedef std::basic_string<char_type> string_type;
+ typedef std::vector<string_type> collection_type;
+ static const char_type first_string[6];
+ static const char_type second_string[7];
+ static const char_type third_string[6];
+ static const char_type fourth_string[7];
+ static const char_type fifth_string[6];
+ static const char_type last_string[5];
+ static const char_type before_string[8];
+ static const char_type after_string[6];
+ static const char_type of_string[3];
+
+ enum phrase_elements {first=0, second, third, fourth, fifth, last,
+ before, after, of, number_of_phrase_elements};
+
+ //! Default format elements used
+ date_generator_formatter()
+ {
+ phrase_strings.push_back(string_type(first_string));
+ phrase_strings.push_back(string_type(second_string));
+ phrase_strings.push_back(string_type(third_string));
+ phrase_strings.push_back(string_type(fourth_string));
+ phrase_strings.push_back(string_type(fifth_string));
+ phrase_strings.push_back(string_type(last_string));
+ phrase_strings.push_back(string_type(before_string));
+ phrase_strings.push_back(string_type(after_string));
+ phrase_strings.push_back(string_type(of_string));
+ }
+
+ //! Constructor that allows for a custom set of phrase elements
+ date_generator_formatter(const string_type& first,
+ const string_type& second,
+ const string_type& third,
+ const string_type& fourth,
+ const string_type& fifth,
+ const string_type& last,
+ const string_type& before,
+ const string_type& after,
+ const string_type& of)
+ {
+ phrase_strings.push_back(string_type(first_string));
+ phrase_strings.push_back(string_type(second_string));
+ phrase_strings.push_back(string_type(third_string));
+ phrase_strings.push_back(string_type(fourth_string));
+ phrase_strings.push_back(string_type(fifth_string));
+ phrase_strings.push_back(string_type(last_string));
+ phrase_strings.push_back(string_type(before_string));
+ phrase_strings.push_back(string_type(after_string));
+ phrase_strings.push_back(string_type(of_string));
+ }
+
+ //! Replace the set of phrase elements with those contained in new_strings
+ /*! The order of the strings in the given collection is important.
+ * They must follow:
+ * - first, second, third, fourth, fifth, last, before, after, of.
+ *
+ * It is not necessary to send in a complete set if only a few
+ * elements are to be replaced as long as the correct beg_pos is used.
+ *
+ * Ex: To keep the default first through fifth elements, but replace
+ * the rest with a collection of:
+ * - "final", "prior", "following", "in".
+ * The beg_pos of date_generator_formatter::last would be used.
+ */
+ void elements(const collection_type& new_strings,
+ phrase_elements beg_pos=first)
+ {
+ if(beg_pos < number_of_phrase_elements) {
+ typename collection_type::iterator itr = phrase_strings.begin();
+ itr += beg_pos;
+ std::copy(new_strings.begin(), new_strings.end(),
+ itr);
+ //phrase_strings.begin());
+ }
+ }
+
+ //!Put a partial_date => "dd Month"
+ template<class facet_type>
+ OutItrT put_partial_date(OutItrT next, std::ios_base& a_ios,
+ CharT a_fill, const partial_date_type& pd,
+ const facet_type& facet) const
+ {
+ facet.put(next, a_ios, a_fill, pd.day());
+ next = a_fill; //TODO change this ???
+ facet.put(next, a_ios, a_fill, pd.month());
+ return next;
+ }
+
+ //! Put an nth_day_of_the_week_in_month => "nth weekday of month"
+ template<class facet_type>
+ OutItrT put_nth_kday(OutItrT next, std::ios_base& a_ios,
+ CharT a_fill, const nth_kday_type& nkd,
+ const facet_type& facet) const
+ {
+ put_string(next, phrase_strings[nkd.nth_week() -1]);
+ next = a_fill; //TODO change this ???
+ facet.put(next, a_ios, a_fill, nkd.day_of_week());
+ next = a_fill; //TODO change this ???
+ put_string(next, string_type(of_string));
+ next = a_fill; //TODO change this ???
+ facet.put(next, a_ios, a_fill, nkd.month());
+ return next;
+ }
+
+ //! Put a first_day_of_the_week_in_month => "first weekday of month"
+ template<class facet_type>
+ OutItrT put_first_kday(OutItrT next, std::ios_base& a_ios,
+ CharT a_fill, const first_kday_type& fkd,
+ const facet_type& facet) const
+ {
+ put_string(next, phrase_strings[first]);
+ next = a_fill; //TODO change this ???
+ facet.put(next, a_ios, a_fill, fkd.day_of_week());
+ next = a_fill; //TODO change this ???
+ put_string(next, string_type(of_string));
+ next = a_fill; //TODO change this ???
+ facet.put(next, a_ios, a_fill, fkd.month());
+ return next;
+ }
+
+ //! Put a last_day_of_the_week_in_month => "last weekday of month"
+ template<class facet_type>
+ OutItrT put_last_kday(OutItrT next, std::ios_base& a_ios,
+ CharT a_fill, const last_kday_type& lkd,
+ const facet_type& facet) const
+ {
+ put_string(next, phrase_strings[last]);
+ next = a_fill; //TODO change this ???
+ facet.put(next, a_ios, a_fill, lkd.day_of_week());
+ next = a_fill; //TODO change this ???
+ put_string(next, string_type(of_string));
+ next = a_fill; //TODO change this ???
+ facet.put(next, a_ios, a_fill, lkd.month());
+ return next;
+ }
+
+ //! Put a first_day_of_the_week_before => "weekday before"
+ template<class facet_type>
+ OutItrT put_kday_before(OutItrT next, std::ios_base& a_ios,
+ CharT a_fill, const kday_before_type& fkb,
+ const facet_type& facet) const
+ {
+ facet.put(next, a_ios, a_fill, fkb.day_of_week());
+ next = a_fill; //TODO change this ???
+ put_string(next, phrase_strings[before]);
+ return next;
+ }
+
+ //! Put a first_day_of_the_week_after => "weekday after"
+ template<class facet_type>
+ OutItrT put_kday_after(OutItrT next, std::ios_base& a_ios,
+ CharT a_fill, const kday_after_type& fka,
+ const facet_type& facet) const
+ {
+ facet.put(next, a_ios, a_fill, fka.day_of_week());
+ next = a_fill; //TODO change this ???
+ put_string(next, phrase_strings[after]);
+ return next;
+ }
+
+
+ private:
+ collection_type phrase_strings;
+
+ //! helper function to put the various member string into stream
+ OutItrT put_string(OutItrT next, const string_type& str) const
+ {
+ typename string_type::const_iterator itr = str.begin();
+ while(itr != str.end()) {
+ *next = *itr;
+ ++itr;
+ ++next;
+ }
+ return next;
+ }
+ };
+
+ template<class date_type, class CharT, class OutItrT>
+ const typename date_generator_formatter<date_type, CharT, OutItrT>::char_type
+ date_generator_formatter<date_type, CharT, OutItrT>::first_string[6] =
+ {'f','i','r','s','t'};
+ template<class date_type, class CharT, class OutItrT>
+ const typename date_generator_formatter<date_type, CharT, OutItrT>::char_type
+ date_generator_formatter<date_type, CharT, OutItrT>::second_string[7] =
+ {'s','e','c','o','n','d'};
+ template<class date_type, class CharT, class OutItrT>
+ const typename date_generator_formatter<date_type, CharT, OutItrT>::char_type
+ date_generator_formatter<date_type, CharT, OutItrT>::third_string[6] =
+ {'t','h','i','r','d'};
+ template<class date_type, class CharT, class OutItrT>
+ const typename date_generator_formatter<date_type, CharT, OutItrT>::char_type
+ date_generator_formatter<date_type, CharT, OutItrT>::fourth_string[7] =
+ {'f','o','u','r','t','h'};
+ template<class date_type, class CharT, class OutItrT>
+ const typename date_generator_formatter<date_type, CharT, OutItrT>::char_type
+ date_generator_formatter<date_type, CharT, OutItrT>::fifth_string[6] =
+ {'f','i','f','t','h'};
+ template<class date_type, class CharT, class OutItrT>
+ const typename date_generator_formatter<date_type, CharT, OutItrT>::char_type
+ date_generator_formatter<date_type, CharT, OutItrT>::last_string[5] =
+ {'l','a','s','t'};
+ template<class date_type, class CharT, class OutItrT>
+ const typename date_generator_formatter<date_type, CharT, OutItrT>::char_type
+ date_generator_formatter<date_type, CharT, OutItrT>::before_string[8] =
+ {'b','e','f','o','r','e'};
+ template<class date_type, class CharT, class OutItrT>
+ const typename date_generator_formatter<date_type, CharT, OutItrT>::char_type
+ date_generator_formatter<date_type, CharT, OutItrT>::after_string[6] =
+ {'a','f','t','e','r'};
+ template<class date_type, class CharT, class OutItrT>
+ const typename date_generator_formatter<date_type, CharT, OutItrT>::char_type
+ date_generator_formatter<date_type, CharT, OutItrT>::of_string[3] =
+ {'o','f'};
+} } // namespaces
+
+#endif // _DATE_TIME_DATE_GENERATOR_FORMATTER__HPP___
diff --git a/boost/boost/date_time/date_generator_parser.hpp b/boost/boost/date_time/date_generator_parser.hpp
new file mode 100644
index 00000000000..890883301fe
--- /dev/null
+++ b/boost/boost/date_time/date_generator_parser.hpp
@@ -0,0 +1,329 @@
+
+#ifndef DATE_TIME_DATE_GENERATOR_PARSER_HPP__
+#define DATE_TIME_DATE_GENERATOR_PARSER_HPP__
+
+/* Copyright (c) 2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2005/08/20 18:22:06 $
+ */
+
+
+#include "boost/date_time/string_parse_tree.hpp"
+#include "boost/date_time/date_generators.hpp"
+#include "boost/date_time/format_date_parser.hpp"
+#include <string>
+#include <vector>
+
+namespace boost { namespace date_time {
+
+ //! Class for date_generator parsing
+ /*! The elements of a date_generator "phrase" are parsed from the input stream in a
+ * particular order. All elements are required and the order in which they appear
+ * cannot change, however, the elements themselves can be changed. The default
+ * elements and their order are as follows:
+ *
+ * - partial_date => "dd Month"
+ * - nth_day_of_the_week_in_month => "nth weekday of month"
+ * - first_day_of_the_week_in_month => "first weekday of month"
+ * - last_day_of_the_week_in_month => "last weekday of month"
+ * - first_day_of_the_week_after => "weekday after"
+ * - first_day_of_the_week_before => "weekday before"
+ *
+ * Weekday and Month names and formats are handled via the date_input_facet.
+ *
+ */
+ template<class date_type, typename charT>
+ class date_generator_parser
+ {
+ public:
+ typedef std::basic_string<charT> string_type;
+ typedef std::istreambuf_iterator<charT> stream_itr_type;
+
+ typedef typename date_type::month_type month_type;
+ typedef typename date_type::day_of_week_type day_of_week_type;
+ typedef typename date_type::day_type day_type;
+
+ typedef string_parse_tree<charT> parse_tree_type;
+ typedef typename parse_tree_type::parse_match_result_type match_results;
+ typedef std::vector<std::basic_string<charT> > collection_type;
+
+ typedef partial_date<date_type> partial_date_type;
+ typedef nth_kday_of_month<date_type> nth_kday_type;
+ typedef first_kday_of_month<date_type> first_kday_type;
+ typedef last_kday_of_month<date_type> last_kday_type;
+ typedef first_kday_after<date_type> kday_after_type;
+ typedef first_kday_before<date_type> kday_before_type;
+
+ typedef charT char_type;
+ static const char_type first_string[6];
+ static const char_type second_string[7];
+ static const char_type third_string[6];
+ static const char_type fourth_string[7];
+ static const char_type fifth_string[6];
+ static const char_type last_string[5];
+ static const char_type before_string[8];
+ static const char_type after_string[6];
+ static const char_type of_string[3];
+
+ enum phrase_elements {first=0, second, third, fourth, fifth, last,
+ before, after, of, number_of_phrase_elements};
+
+ //! Creates a date_generator_parser with the default set of "element_strings"
+ date_generator_parser()
+ {
+ element_strings(string_type(first_string),
+ string_type(second_string),
+ string_type(third_string),
+ string_type(fourth_string),
+ string_type(fifth_string),
+ string_type(last_string),
+ string_type(before_string),
+ string_type(after_string),
+ string_type(of_string));
+ }
+
+ //! Creates a date_generator_parser using a user defined set of element strings
+ date_generator_parser(const string_type& first_str,
+ const string_type& second_str,
+ const string_type& third_str,
+ const string_type& fourth_str,
+ const string_type& fifth_str,
+ const string_type& last_str,
+ const string_type& before_str,
+ const string_type& after_str,
+ const string_type& of_str)
+ {
+ element_strings(first_str, second_str, third_str, fourth_str, fifth_str,
+ last_str, before_str, after_str, of_str);
+ }
+
+ //! Replace strings that determine nth week for generator
+ void element_strings(const string_type& first_str,
+ const string_type& second_str,
+ const string_type& third_str,
+ const string_type& fourth_str,
+ const string_type& fifth_str,
+ const string_type& last_str,
+ const string_type& before_str,
+ const string_type& after_str,
+ const string_type& of_str)
+ {
+ collection_type phrases;
+ phrases.push_back(first_str);
+ phrases.push_back(second_str);
+ phrases.push_back(third_str);
+ phrases.push_back(fourth_str);
+ phrases.push_back(fifth_str);
+ phrases.push_back(last_str);
+ phrases.push_back(before_str);
+ phrases.push_back(after_str);
+ phrases.push_back(of_str);
+ m_element_strings = parse_tree_type(phrases, this->first); // enum first
+ }
+
+ void element_strings(const collection_type& col)
+ {
+ m_element_strings = parse_tree_type(col, this->first); // enum first
+ }
+
+
+ //! returns partial_date parsed from stream
+ template<class facet_type>
+ partial_date_type
+ get_partial_date_type(stream_itr_type& sitr,
+ stream_itr_type& stream_end,
+ std::ios_base& a_ios,
+ const facet_type& facet) const
+ {
+ // skip leading whitespace
+ while(std::isspace(*sitr) && sitr != stream_end) { ++sitr; }
+
+ day_type d(1);
+ month_type m(1);
+ facet.get(sitr, stream_end, a_ios, d);
+ facet.get(sitr, stream_end, a_ios, m);
+
+ return partial_date_type(d,m);
+ }
+
+ //! returns nth_kday_of_week parsed from stream
+ template<class facet_type>
+ nth_kday_type
+ get_nth_kday_type(stream_itr_type& sitr,
+ stream_itr_type& stream_end,
+ std::ios_base& a_ios,
+ const facet_type& facet) const
+ {
+ // skip leading whitespace
+ while(std::isspace(*sitr) && sitr != stream_end) { ++sitr; }
+
+ typename nth_kday_type::week_num wn;
+ day_of_week_type wd(0); // no default constructor
+ month_type m(1); // no default constructor
+
+ match_results mr = m_element_strings.match(sitr, stream_end);
+ switch(mr.current_match) {
+ case first : { wn = nth_kday_type::first; break; }
+ case second : { wn = nth_kday_type::second; break; }
+ case third : { wn = nth_kday_type::third; break; }
+ case fourth : { wn = nth_kday_type::fourth; break; }
+ case fifth : { wn = nth_kday_type::fifth; break; }
+ default:
+ {
+ throw std::ios_base::failure("Parse failed. No match found for '" + mr.cache + "'");
+ break;
+ }
+ } // week num
+ facet.get(sitr, stream_end, a_ios, wd); // day_of_week
+ extract_element(sitr, stream_end, of); // "of" element
+ facet.get(sitr, stream_end, a_ios, m); // month
+
+ return nth_kday_type(wn, wd, m);
+ }
+
+ //! returns first_kday_of_week parsed from stream
+ template<class facet_type>
+ first_kday_type
+ get_first_kday_type(stream_itr_type& sitr,
+ stream_itr_type& stream_end,
+ std::ios_base& a_ios,
+ const facet_type& facet) const
+ {
+ // skip leading whitespace
+ while(std::isspace(*sitr) && sitr != stream_end) { ++sitr; }
+
+ day_of_week_type wd(0); // no default constructor
+ month_type m(1); // no default constructor
+
+ extract_element(sitr, stream_end, first); // "first" element
+ facet.get(sitr, stream_end, a_ios, wd); // day_of_week
+ extract_element(sitr, stream_end, of); // "of" element
+ facet.get(sitr, stream_end, a_ios, m); // month
+
+
+ return first_kday_type(wd, m);
+ }
+
+ //! returns last_kday_of_week parsed from stream
+ template<class facet_type>
+ last_kday_type
+ get_last_kday_type(stream_itr_type& sitr,
+ stream_itr_type& stream_end,
+ std::ios_base& a_ios,
+ const facet_type& facet) const
+ {
+ // skip leading whitespace
+ while(std::isspace(*sitr) && sitr != stream_end) { ++sitr; }
+
+ day_of_week_type wd(0); // no default constructor
+ month_type m(1); // no default constructor
+
+ extract_element(sitr, stream_end, last); // "last" element
+ facet.get(sitr, stream_end, a_ios, wd); // day_of_week
+ extract_element(sitr, stream_end, of); // "of" element
+ facet.get(sitr, stream_end, a_ios, m); // month
+
+
+ return last_kday_type(wd, m);
+ }
+
+ //! returns first_kday_of_week parsed from stream
+ template<class facet_type>
+ kday_before_type
+ get_kday_before_type(stream_itr_type& sitr,
+ stream_itr_type& stream_end,
+ std::ios_base& a_ios,
+ const facet_type& facet) const
+ {
+ // skip leading whitespace
+ while(std::isspace(*sitr) && sitr != stream_end) { ++sitr; }
+
+ day_of_week_type wd(0); // no default constructor
+
+ facet.get(sitr, stream_end, a_ios, wd); // day_of_week
+ extract_element(sitr, stream_end, before);// "before" element
+
+ return kday_before_type(wd);
+ }
+
+ //! returns first_kday_of_week parsed from stream
+ template<class facet_type>
+ kday_after_type
+ get_kday_after_type(stream_itr_type& sitr,
+ stream_itr_type& stream_end,
+ std::ios_base& a_ios,
+ const facet_type& facet) const
+ {
+ // skip leading whitespace
+ while(std::isspace(*sitr) && sitr != stream_end) { ++sitr; }
+
+ day_of_week_type wd(0); // no default constructor
+
+ facet.get(sitr, stream_end, a_ios, wd); // day_of_week
+ extract_element(sitr, stream_end, after); // "after" element
+
+ return kday_after_type(wd);
+ }
+
+ private:
+ parse_tree_type m_element_strings;
+
+ //! Extracts phrase element from input. Throws ios_base::failure on error.
+ void extract_element(stream_itr_type& sitr,
+ stream_itr_type& stream_end,
+ typename date_generator_parser::phrase_elements ele) const
+ {
+ // skip leading whitespace
+ while(std::isspace(*sitr) && sitr != stream_end) { ++sitr; }
+ match_results mr = m_element_strings.match(sitr, stream_end);
+ if(mr.current_match != ele) {
+ throw std::ios_base::failure("Parse failed. No match found for '" + mr.cache + "'");
+ }
+ }
+
+ };
+
+ template<class date_type, class CharT>
+ const typename date_generator_parser<date_type, CharT>::char_type
+ date_generator_parser<date_type, CharT>::first_string[6] =
+ {'f','i','r','s','t'};
+ template<class date_type, class CharT>
+ const typename date_generator_parser<date_type, CharT>::char_type
+ date_generator_parser<date_type, CharT>::second_string[7] =
+ {'s','e','c','o','n','d'};
+ template<class date_type, class CharT>
+ const typename date_generator_parser<date_type, CharT>::char_type
+ date_generator_parser<date_type, CharT>::third_string[6] =
+ {'t','h','i','r','d'};
+ template<class date_type, class CharT>
+ const typename date_generator_parser<date_type, CharT>::char_type
+ date_generator_parser<date_type, CharT>::fourth_string[7] =
+ {'f','o','u','r','t','h'};
+ template<class date_type, class CharT>
+ const typename date_generator_parser<date_type, CharT>::char_type
+ date_generator_parser<date_type, CharT>::fifth_string[6] =
+ {'f','i','f','t','h'};
+ template<class date_type, class CharT>
+ const typename date_generator_parser<date_type, CharT>::char_type
+ date_generator_parser<date_type, CharT>::last_string[5] =
+ {'l','a','s','t'};
+ template<class date_type, class CharT>
+ const typename date_generator_parser<date_type, CharT>::char_type
+ date_generator_parser<date_type, CharT>::before_string[8] =
+ {'b','e','f','o','r','e'};
+ template<class date_type, class CharT>
+ const typename date_generator_parser<date_type, CharT>::char_type
+ date_generator_parser<date_type, CharT>::after_string[6] =
+ {'a','f','t','e','r'};
+ template<class date_type, class CharT>
+ const typename date_generator_parser<date_type, CharT>::char_type
+ date_generator_parser<date_type, CharT>::of_string[3] =
+ {'o','f'};
+
+} } //namespace
+
+#endif // DATE_TIME_DATE_GENERATOR_PARSER_HPP__
+
diff --git a/boost/boost/date_time/date_generators.hpp b/boost/boost/date_time/date_generators.hpp
new file mode 100644
index 00000000000..d10a930e19f
--- /dev/null
+++ b/boost/boost/date_time/date_generators.hpp
@@ -0,0 +1,509 @@
+#ifndef DATE_TIME_DATE_GENERATORS_HPP__
+#define DATE_TIME_DATE_GENERATORS_HPP__
+
+/* Copyright (c) 2002,2003,2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2007/06/01 16:12:07 $
+ */
+
+/*! @file date_generators.hpp
+ Definition and implementation of date algorithm templates
+*/
+#include <stdexcept>
+#include <sstream>
+#include "boost/date_time/date.hpp"
+#include "boost/date_time/compiler_config.hpp"
+
+namespace boost {
+namespace date_time {
+
+ //! Base class for all generators that take a year and produce a date.
+ /*! This class is a base class for polymorphic function objects that take
+ a year and produce a concrete date.
+ @param date_type The type representing a date. This type must
+ export a calender_type which defines a year_type.
+ */
+ template<class date_type>
+ class year_based_generator
+ {
+ public:
+ typedef typename date_type::calendar_type calendar_type;
+ typedef typename calendar_type::year_type year_type;
+ year_based_generator() {};
+ virtual ~year_based_generator() {};
+ virtual date_type get_date(year_type y) const = 0;
+ //! Returns a string for use in a POSIX time_zone string
+ virtual std::string to_string() const =0;
+ };
+
+ //! Generates a date by applying the year to the given month and day.
+ /*!
+ Example usage:
+ @code
+ partial_date pd(1, Jan);
+ partial_date pd2(70);
+ date d = pd.get_date(2002); //2002-Jan-01
+ date d2 = pd2.get_date(2002); //2002-Mar-10
+ @endcode
+ \ingroup date_alg
+ */
+ template<class date_type>
+ class partial_date : public year_based_generator<date_type>
+ {
+ public:
+ typedef typename date_type::calendar_type calendar_type;
+ typedef typename calendar_type::day_type day_type;
+ typedef typename calendar_type::month_type month_type;
+ typedef typename calendar_type::year_type year_type;
+ typedef typename date_type::duration_type duration_type;
+ typedef typename duration_type::duration_rep duration_rep;
+ partial_date(day_type d, month_type m) :
+ day_(d),
+ month_(m)
+ {}
+ //! Partial date created from number of days into year. Range 1-366
+ /*! Allowable values range from 1 to 366. 1=Jan1, 366=Dec31. If argument
+ * exceeds range, partial_date will be created with closest in-range value.
+ * 60 will always be Feb29, if get_date() is called with a non-leap year
+ * an exception will be thrown */
+ partial_date(duration_rep days) :
+ day_(1), // default values
+ month_(1)
+ {
+ date_type d1(2000,1,1);
+ if(days > 1) {
+ if(days > 366) // prevents wrapping
+ {
+ days = 366;
+ }
+ days = days - 1;
+ duration_type dd(days);
+ d1 = d1 + dd;
+ }
+ day_ = d1.day();
+ month_ = d1.month();
+ }
+ //! Return a concrete date when provided with a year specific year.
+ /*! Will throw an 'invalid_argument' exception if a partial_date object,
+ * instantiated with Feb-29, has get_date called with a non-leap year.
+ * Example:
+ * @code
+ * partial_date pd(29, Feb);
+ * pd.get_date(2003); // throws invalid_argument exception
+ * pg.get_date(2000); // returns 2000-2-29
+ * @endcode
+ */
+ date_type get_date(year_type y) const
+ {
+ if((day_ == 29) && (month_ == 2) && !(calendar_type::is_leap_year(y))) {
+ std::stringstream ss("");
+ ss << "No Feb 29th in given year of " << y << ".";
+ throw std::invalid_argument(ss.str());
+ //return date_type(1,1,1); // should never reach
+ } else {
+ return date_type(y, month_, day_);
+ }
+ }
+ date_type operator()(year_type y) const
+ {
+ return get_date(y);
+ //return date_type(y, month_, day_);
+ }
+ bool operator==(const partial_date& rhs) const
+ {
+ return (month_ == rhs.month_) && (day_ == rhs.day_);
+ }
+ bool operator<(const partial_date& rhs) const
+ {
+ if (month_ < rhs.month_) return true;
+ if (month_ > rhs.month_) return false;
+ //months are equal
+ return (day_ < rhs.day_);
+ }
+
+ // added for streaming purposes
+ month_type month() const
+ {
+ return month_;
+ }
+ day_type day() const
+ {
+ return day_;
+ }
+
+ //! Returns string suitable for use in POSIX time zone string
+ /*! Returns string formatted with up to 3 digits:
+ * Jan-01 == "0"
+ * Feb-29 == "58"
+ * Dec-31 == "365" */
+ virtual std::string to_string() const
+ {
+ std::stringstream ss;
+ date_type d(2004, month_, day_);
+ unsigned short c = d.day_of_year();
+ c--; // numbered 0-365 while day_of_year is 1 based...
+ ss << c;
+ return ss.str();
+ }
+ private:
+ day_type day_;
+ month_type month_;
+ };
+
+ //! Returns nth arg as string. 1 -> "first", 2 -> "second", max is 5.
+ BOOST_DATE_TIME_DECL const char* nth_as_str(int n);
+
+ //! Useful generator functor for finding holidays
+ /*! Based on the idea in Cal. Calc. for finding holidays that are
+ * the 'first Monday of September'. When instantiated with
+ * 'fifth' kday of month, the result will be the last kday of month
+ * which can be the fourth or fifth depending on the structure of
+ * the month.
+ *
+ * The algorithm here basically guesses for the first
+ * day of the month. Then finds the first day of the correct
+ * type. That is, if the first of the month is a Tuesday
+ * and it needs Wenesday then we simply increment by a day
+ * and then we can add the length of a week until we get
+ * to the 'nth kday'. There are probably more efficient
+ * algorithms based on using a mod 7, but this one works
+ * reasonably well for basic applications.
+ * \ingroup date_alg
+ */
+ template<class date_type>
+ class nth_kday_of_month : public year_based_generator<date_type>
+ {
+ public:
+ typedef typename date_type::calendar_type calendar_type;
+ typedef typename calendar_type::day_of_week_type day_of_week_type;
+ typedef typename calendar_type::month_type month_type;
+ typedef typename calendar_type::year_type year_type;
+ typedef typename date_type::duration_type duration_type;
+ enum week_num {first=1, second, third, fourth, fifth};
+ nth_kday_of_month(week_num week_no,
+ day_of_week_type dow,
+ month_type m) :
+ month_(m),
+ wn_(week_no),
+ dow_(dow)
+ {}
+ //! Return a concrete date when provided with a year specific year.
+ date_type get_date(year_type y) const
+ {
+ date_type d(y, month_, 1); //first day of month
+ duration_type one_day(1);
+ duration_type one_week(7);
+ while (dow_ != d.day_of_week()) {
+ d = d + one_day;
+ }
+ int week = 1;
+ while (week < wn_) {
+ d = d + one_week;
+ week++;
+ }
+ // remove wrapping to next month behavior
+ if(d.month() != month_) {
+ d = d - one_week;
+ }
+ return d;
+ }
+ // added for streaming
+ month_type month() const
+ {
+ return month_;
+ }
+ week_num nth_week() const
+ {
+ return wn_;
+ }
+ day_of_week_type day_of_week() const
+ {
+ return dow_;
+ }
+ const char* nth_week_as_str() const
+ {
+ return nth_as_str(wn_);
+ }
+ //! Returns string suitable for use in POSIX time zone string
+ /*! Returns a string formatted as "M4.3.0" ==> 3rd Sunday in April. */
+ virtual std::string to_string() const
+ {
+ std::stringstream ss;
+ ss << 'M'
+ << static_cast<int>(month_) << '.'
+ << static_cast<int>(wn_) << '.'
+ << static_cast<int>(dow_);
+ return ss.str();
+ }
+ private:
+ month_type month_;
+ week_num wn_;
+ day_of_week_type dow_;
+ };
+
+
+ //! Useful generator functor for finding holidays and daylight savings
+ /*! Similar to nth_kday_of_month, but requires less paramters
+ * \ingroup date_alg
+ */
+ template<class date_type>
+ class first_kday_of_month : public year_based_generator<date_type>
+ {
+ public:
+ typedef typename date_type::calendar_type calendar_type;
+ typedef typename calendar_type::day_of_week_type day_of_week_type;
+ typedef typename calendar_type::month_type month_type;
+ typedef typename calendar_type::year_type year_type;
+ typedef typename date_type::duration_type duration_type;
+ //!Specify the first 'Sunday' in 'April' spec
+ /*!@param dow The day of week, eg: Sunday, Monday, etc
+ * @param m The month of the year, eg: Jan, Feb, Mar, etc
+ */
+ first_kday_of_month(day_of_week_type dow, month_type m) :
+ month_(m),
+ dow_(dow)
+ {}
+ //! Return a concrete date when provided with a year specific year.
+ date_type get_date(year_type year) const
+ {
+ date_type d(year, month_,1);
+ duration_type one_day(1);
+ while (dow_ != d.day_of_week()) {
+ d = d + one_day;
+ }
+ return d;
+ }
+ // added for streaming
+ month_type month() const
+ {
+ return month_;
+ }
+ day_of_week_type day_of_week() const
+ {
+ return dow_;
+ }
+ //! Returns string suitable for use in POSIX time zone string
+ /*! Returns a string formatted as "M4.1.0" ==> 1st Sunday in April. */
+ virtual std::string to_string() const
+ {
+ std::stringstream ss;
+ ss << 'M'
+ << static_cast<int>(month_) << '.'
+ << 1 << '.'
+ << static_cast<int>(dow_);
+ return ss.str();
+ }
+ private:
+ month_type month_;
+ day_of_week_type dow_;
+ };
+
+
+
+ //! Calculate something like Last Sunday of January
+ /*! Useful generator functor for finding holidays and daylight savings
+ * Get the last day of the month and then calculate the difference
+ * to the last previous day.
+ * @param date_type A date class that exports day_of_week, month_type, etc.
+ * \ingroup date_alg
+ */
+ template<class date_type>
+ class last_kday_of_month : public year_based_generator<date_type>
+ {
+ public:
+ typedef typename date_type::calendar_type calendar_type;
+ typedef typename calendar_type::day_of_week_type day_of_week_type;
+ typedef typename calendar_type::month_type month_type;
+ typedef typename calendar_type::year_type year_type;
+ typedef typename date_type::duration_type duration_type;
+ //!Specify the date spec like last 'Sunday' in 'April' spec
+ /*!@param dow The day of week, eg: Sunday, Monday, etc
+ * @param m The month of the year, eg: Jan, Feb, Mar, etc
+ */
+ last_kday_of_month(day_of_week_type dow, month_type m) :
+ month_(m),
+ dow_(dow)
+ {}
+ //! Return a concrete date when provided with a year specific year.
+ date_type get_date(year_type year) const
+ {
+ date_type d(year, month_, calendar_type::end_of_month_day(year,month_));
+ duration_type one_day(1);
+ while (dow_ != d.day_of_week()) {
+ d = d - one_day;
+ }
+ return d;
+ }
+ // added for streaming
+ month_type month() const
+ {
+ return month_;
+ }
+ day_of_week_type day_of_week() const
+ {
+ return dow_;
+ }
+ //! Returns string suitable for use in POSIX time zone string
+ /*! Returns a string formatted as "M4.5.0" ==> last Sunday in April. */
+ virtual std::string to_string() const
+ {
+ std::stringstream ss;
+ ss << 'M'
+ << static_cast<int>(month_) << '.'
+ << 5 << '.'
+ << static_cast<int>(dow_);
+ return ss.str();
+ }
+ private:
+ month_type month_;
+ day_of_week_type dow_;
+ };
+
+
+ //! Calculate something like "First Sunday after Jan 1,2002
+ /*! Date generator that takes a date and finds kday after
+ *@code
+ typedef boost::date_time::first_kday_after<date> firstkdayafter;
+ firstkdayafter fkaf(Monday);
+ fkaf.get_date(date(2002,Feb,1));
+ @endcode
+ * \ingroup date_alg
+ */
+ template<class date_type>
+ class first_kday_after
+ {
+ public:
+ typedef typename date_type::calendar_type calendar_type;
+ typedef typename calendar_type::day_of_week_type day_of_week_type;
+ typedef typename date_type::duration_type duration_type;
+ first_kday_after(day_of_week_type dow) :
+ dow_(dow)
+ {}
+ //! Return next kday given.
+ date_type get_date(date_type start_day) const
+ {
+ duration_type one_day(1);
+ date_type d = start_day + one_day;
+ while (dow_ != d.day_of_week()) {
+ d = d + one_day;
+ }
+ return d;
+ }
+ // added for streaming
+ day_of_week_type day_of_week() const
+ {
+ return dow_;
+ }
+ private:
+ day_of_week_type dow_;
+ };
+
+ //! Calculate something like "First Sunday before Jan 1,2002
+ /*! Date generator that takes a date and finds kday after
+ *@code
+ typedef boost::date_time::first_kday_before<date> firstkdaybefore;
+ firstkdaybefore fkbf(Monday);
+ fkbf.get_date(date(2002,Feb,1));
+ @endcode
+ * \ingroup date_alg
+ */
+ template<class date_type>
+ class first_kday_before
+ {
+ public:
+ typedef typename date_type::calendar_type calendar_type;
+ typedef typename calendar_type::day_of_week_type day_of_week_type;
+ typedef typename date_type::duration_type duration_type;
+ first_kday_before(day_of_week_type dow) :
+ dow_(dow)
+ {}
+ //! Return next kday given.
+ date_type get_date(date_type start_day) const
+ {
+ duration_type one_day(1);
+ date_type d = start_day - one_day;
+ while (dow_ != d.day_of_week()) {
+ d = d - one_day;
+ }
+ return d;
+ }
+ // added for streaming
+ day_of_week_type day_of_week() const
+ {
+ return dow_;
+ }
+ private:
+ day_of_week_type dow_;
+ };
+
+ //! Calculates the number of days until the next weekday
+ /*! Calculates the number of days until the next weekday.
+ * If the date given falls on a Sunday and the given weekday
+ * is Tuesday the result will be 2 days */
+ template<typename date_type, class weekday_type>
+ inline
+ typename date_type::duration_type days_until_weekday(const date_type& d, const weekday_type& wd)
+ {
+ typedef typename date_type::duration_type duration_type;
+ duration_type wks(0);
+ duration_type dd(wd.as_number() - d.day_of_week().as_number());
+ if(dd.is_negative()){
+ wks = duration_type(7);
+ }
+ return dd + wks;
+ }
+
+ //! Calculates the number of days since the previous weekday
+ /*! Calculates the number of days since the previous weekday
+ * If the date given falls on a Sunday and the given weekday
+ * is Tuesday the result will be 5 days. The answer will be a positive
+ * number because Tuesday is 5 days before Sunday, not -5 days before. */
+ template<typename date_type, class weekday_type>
+ inline
+ typename date_type::duration_type days_before_weekday(const date_type& d, const weekday_type& wd)
+ {
+ typedef typename date_type::duration_type duration_type;
+ duration_type wks(0);
+ duration_type dd(wd.as_number() - d.day_of_week().as_number());
+ if(dd.days() > 0){
+ wks = duration_type(7);
+ }
+ // we want a number of days, not an offset. The value returned must
+ // be zero or larger.
+ return (-dd + wks);
+ }
+
+ //! Generates a date object representing the date of the following weekday from the given date
+ /*! Generates a date object representing the date of the following
+ * weekday from the given date. If the date given is 2004-May-9
+ * (a Sunday) and the given weekday is Tuesday then the resulting date
+ * will be 2004-May-11. */
+ template<class date_type, class weekday_type>
+ inline
+ date_type next_weekday(const date_type& d, const weekday_type& wd)
+ {
+ return d + days_until_weekday(d, wd);
+ }
+
+ //! Generates a date object representing the date of the previous weekday from the given date
+ /*! Generates a date object representing the date of the previous
+ * weekday from the given date. If the date given is 2004-May-9
+ * (a Sunday) and the given weekday is Tuesday then the resulting date
+ * will be 2004-May-4. */
+ template<class date_type, class weekday_type>
+ inline
+ date_type previous_weekday(const date_type& d, const weekday_type& wd)
+ {
+ return d - days_before_weekday(d, wd);
+ }
+
+} } //namespace date_time
+
+
+
+
+#endif
+
diff --git a/boost/boost/date_time/date_iterator.hpp b/boost/boost/date_time/date_iterator.hpp
new file mode 100644
index 00000000000..6d1644f264b
--- /dev/null
+++ b/boost/boost/date_time/date_iterator.hpp
@@ -0,0 +1,101 @@
+#ifndef DATE_ITERATOR_HPP___
+#define DATE_ITERATOR_HPP___
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2003/11/23 03:29:56 $
+ */
+
+#include <iterator>
+
+namespace boost {
+namespace date_time {
+ //! An iterator over dates with varying resolution (day, week, month, year, etc)
+ enum date_resolutions {day, week, months, year, decade, century, NumDateResolutions};
+
+ //! Base date iterator type
+ /*! This class provides the skeleton for the creation of iterators.
+ * New and interesting interators can be created by plugging in a new
+ * function that derives the next value from the current state.
+ * generation of various types of -based information.
+ *
+ * <b>Template Parameters</b>
+ *
+ * <b>date_type</b>
+ *
+ * The date_type is a concrete date_type. The date_type must
+ * define a duration_type and a calendar_type.
+ */
+ template<class date_type>
+ class date_itr_base {
+ // works, but benefit unclear at the moment
+ // class date_itr_base : public std::iterator<std::input_iterator_tag,
+ // date_type, void, void, void>{
+ public:
+ typedef typename date_type::duration_type duration_type;
+ typedef date_type value_type;
+ typedef std::input_iterator_tag iterator_category;
+
+ date_itr_base(date_type d) : current_(d) {}
+ virtual ~date_itr_base() {};
+ date_itr_base& operator++()
+ {
+ current_ = current_ + get_offset(current_);
+ return *this;
+ }
+ date_itr_base& operator--()
+ {
+ current_ = current_ + get_neg_offset(current_);
+ return *this;
+ }
+ virtual duration_type get_offset(const date_type& current) const=0;
+ virtual duration_type get_neg_offset(const date_type& current) const=0;
+ date_type operator*() {return current_;};
+ date_type* operator->() {return &current_;};
+ bool operator< (const date_type& d) {return current_ < d;}
+ bool operator<= (const date_type& d) {return current_ <= d;}
+ bool operator> (const date_type& d) {return current_ > d;}
+ bool operator>= (const date_type& d) {return current_ >= d;}
+ bool operator== (const date_type& d) {return current_ == d;}
+ bool operator!= (const date_type& d) {return current_ != d;}
+ private:
+ date_type current_;
+ };
+
+ //! Overrides the base date iterator providing hook for functors
+ /*
+ * <b>offset_functor</b>
+ *
+ * The offset functor must define a get_offset function that takes the
+ * current point in time and calculates and offset.
+ *
+ */
+ template<class offset_functor, class date_type>
+ class date_itr : public date_itr_base<date_type> {
+ public:
+ typedef typename date_type::duration_type duration_type;
+ date_itr(date_type d, int factor=1) :
+ date_itr_base<date_type>(d),
+ of_(factor)
+ {}
+ private:
+ virtual duration_type get_offset(const date_type& current) const
+ {
+ return of_.get_offset(current);
+ }
+ virtual duration_type get_neg_offset(const date_type& current) const
+ {
+ return of_.get_neg_offset(current);
+ }
+ offset_functor of_;
+ };
+
+
+
+} } //namespace date_time
+
+
+#endif
diff --git a/boost/boost/date_time/date_names_put.hpp b/boost/boost/date_time/date_names_put.hpp
new file mode 100644
index 00000000000..f3418e20787
--- /dev/null
+++ b/boost/boost/date_time/date_names_put.hpp
@@ -0,0 +1,320 @@
+#ifndef DATE_TIME_DATE_NAMES_PUT_HPP___
+#define DATE_TIME_DATE_NAMES_PUT_HPP___
+
+/* Copyright (c) 2002-2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2005/04/16 18:59:51 $
+ */
+
+
+#include "boost/date_time/locale_config.hpp" // set BOOST_DATE_TIME_NO_LOCALE
+
+#ifndef BOOST_DATE_TIME_NO_LOCALE
+
+#include "boost/date_time/special_defs.hpp"
+#include "boost/date_time/date_defs.hpp"
+#include "boost/date_time/parse_format_base.hpp"
+#include "boost/lexical_cast.hpp"
+#include <locale>
+
+
+namespace boost {
+namespace date_time {
+
+ //! Output facet base class for gregorian dates.
+ /*! This class is a base class for date facets used to localize the
+ * names of months and the names of days in the week.
+ *
+ * Requirements of Config
+ * - define an enumeration month_enum that enumerates the months.
+ * The enumeration should be '1' based eg: Jan==1
+ * - define as_short_string and as_long_string
+ *
+ * (see langer & kreft p334).
+ *
+ */
+ template<class Config,
+ class charT = char,
+ class OutputIterator = std::ostreambuf_iterator<charT> >
+ class date_names_put : public std::locale::facet
+ {
+ public:
+ date_names_put() {};
+ typedef OutputIterator iter_type;
+ typedef typename Config::month_type month_type;
+ typedef typename Config::month_enum month_enum;
+ typedef typename Config::weekday_enum weekday_enum;
+ typedef typename Config::special_value_enum special_value_enum;
+ //typedef typename Config::format_type format_type;
+ typedef std::basic_string<charT> string_type;
+ typedef charT char_type;
+ static const char_type default_special_value_names[3][17];
+ static const char_type separator[2];
+
+ static std::locale::id id;
+
+#if defined (__SUNPRO_CC) && defined (_RWSTD_VER)
+ std::locale::id& __get_id (void) const { return id; }
+#endif
+
+ void put_special_value(iter_type& oitr, special_value_enum sv) const
+ {
+ do_put_special_value(oitr, sv);
+ }
+ void put_month_short(iter_type& oitr, month_enum moy) const
+ {
+ do_put_month_short(oitr, moy);
+ }
+ void put_month_long(iter_type& oitr, month_enum moy) const
+ {
+ do_put_month_long(oitr, moy);
+ }
+ void put_weekday_short(iter_type& oitr, weekday_enum wd) const
+ {
+ do_put_weekday_short(oitr, wd);
+ }
+ void put_weekday_long(iter_type& oitr, weekday_enum wd) const
+ {
+ do_put_weekday_long(oitr, wd);
+ }
+ bool has_date_sep_chars() const
+ {
+ return do_has_date_sep_chars();
+ }
+ void year_sep_char(iter_type& oitr) const
+ {
+ do_year_sep_char(oitr);
+ }
+ //! char between year-month
+ void month_sep_char(iter_type& oitr) const
+ {
+ do_month_sep_char(oitr);
+ }
+ //! Char to separate month-day
+ void day_sep_char(iter_type& oitr) const
+ {
+ do_day_sep_char(oitr);
+ }
+ //! Determines the order to put the date elements
+ ymd_order_spec date_order() const
+ {
+ return do_date_order();
+ }
+ //! Determines if month is displayed as integer, short or long string
+ month_format_spec month_format() const
+ {
+ return do_month_format();
+ }
+
+ protected:
+ //! Default facet implementation uses month_type defaults
+ virtual void do_put_month_short(iter_type& oitr, month_enum moy) const
+ {
+ month_type gm(moy);
+ charT c = '\0';
+ put_string(oitr, gm.as_short_string(c));
+ }
+ //! Default facet implementation uses month_type defaults
+ virtual void do_put_month_long(iter_type& oitr,
+ month_enum moy) const
+ {
+ month_type gm(moy);
+ charT c = '\0';
+ put_string(oitr, gm.as_long_string(c));
+ }
+ //! Default facet implementation for special value types
+ virtual void do_put_special_value(iter_type& oitr, special_value_enum sv) const
+ {
+ if(sv <= 2) { // only output not_a_date_time, neg_infin, or pos_infin
+ string_type s(default_special_value_names[sv]);
+ put_string(oitr, s);
+ }
+ }
+ virtual void do_put_weekday_short(iter_type&, weekday_enum) const
+ {
+ }
+ virtual void do_put_weekday_long(iter_type&, weekday_enum) const
+ {
+ }
+ virtual bool do_has_date_sep_chars() const
+ {
+ return true;
+ }
+ virtual void do_year_sep_char(iter_type& oitr) const
+ {
+ string_type s(separator);
+ put_string(oitr, s);
+ }
+ //! char between year-month
+ virtual void do_month_sep_char(iter_type& oitr) const
+ {
+ string_type s(separator);
+ put_string(oitr, s);
+ }
+ //! Char to separate month-day
+ virtual void do_day_sep_char(iter_type& oitr) const
+ {
+ string_type s(separator); //put in '-'
+ put_string(oitr, s);
+ }
+ //! Default for date order
+ virtual ymd_order_spec do_date_order() const
+ {
+ return ymd_order_iso;
+ }
+ //! Default month format
+ virtual month_format_spec do_month_format() const
+ {
+ return month_as_short_string;
+ }
+ void put_string(iter_type& oi, const charT* const s) const
+ {
+ string_type s1(boost::lexical_cast<string_type>(s));
+ typename string_type::iterator si,end;
+ for (si=s1.begin(), end=s1.end(); si!=end; si++, oi++) {
+ *oi = *si;
+ }
+ }
+ void put_string(iter_type& oi, const string_type& s1) const
+ {
+ typename string_type::const_iterator si,end;
+ for (si=s1.begin(), end=s1.end(); si!=end; si++, oi++) {
+ *oi = *si;
+ }
+ }
+ };
+
+ template<class Config, class charT, class OutputIterator>
+ const typename date_names_put<Config, charT, OutputIterator>::char_type
+ date_names_put<Config, charT, OutputIterator>::default_special_value_names[3][17] = {
+ {'n','o','t','-','a','-','d','a','t','e','-','t','i','m','e'},
+ {'-','i','n','f','i','n','i','t','y'},
+ {'+','i','n','f','i','n','i','t','y'} };
+
+ template<class Config, class charT, class OutputIterator>
+ const typename date_names_put<Config, charT, OutputIterator>::char_type
+ date_names_put<Config, charT, OutputIterator>::separator[2] =
+ {'-', '\0'} ;
+
+
+ //! Generate storage location for a std::locale::id
+ template<class Config, class charT, class OutputIterator>
+ std::locale::id date_names_put<Config, charT, OutputIterator>::id;
+
+ //! A date name output facet that takes an array of char* to define strings
+ template<class Config,
+ class charT = char,
+ class OutputIterator = std::ostreambuf_iterator<charT> >
+ class all_date_names_put : public date_names_put<Config, charT, OutputIterator>
+ {
+ public:
+ all_date_names_put(const charT* const month_short_names[],
+ const charT* const month_long_names[],
+ const charT* const special_value_names[],
+ const charT* const weekday_short_names[],
+ const charT* const weekday_long_names[],
+ charT separator_char = '-',
+ ymd_order_spec order_spec = ymd_order_iso,
+ month_format_spec month_format = month_as_short_string) :
+ month_short_names_(month_short_names),
+ month_long_names_(month_long_names),
+ special_value_names_(special_value_names),
+ weekday_short_names_(weekday_short_names),
+ weekday_long_names_(weekday_long_names),
+ order_spec_(order_spec),
+ month_format_spec_(month_format)
+ {
+ separator_char_[0] = separator_char;
+ separator_char_[1] = '\0';
+
+ };
+ typedef OutputIterator iter_type;
+ typedef typename Config::month_enum month_enum;
+ typedef typename Config::weekday_enum weekday_enum;
+ typedef typename Config::special_value_enum special_value_enum;
+
+ const charT* const* get_short_month_names() const
+ {
+ return month_short_names_;
+ }
+ const charT* const* get_long_month_names() const
+ {
+ return month_long_names_;
+ }
+ const charT* const* get_special_value_names() const
+ {
+ return special_value_names_;
+ }
+ const charT* const* get_short_weekday_names()const
+ {
+ return weekday_short_names_;
+ }
+ const charT* const* get_long_weekday_names()const
+ {
+ return weekday_long_names_;
+ }
+
+ protected:
+ //! Generic facet that takes array of chars
+ virtual void do_put_month_short(iter_type& oitr, month_enum moy) const
+ {
+ this->put_string(oitr, month_short_names_[moy-1]);
+ }
+ //! Long month names
+ virtual void do_put_month_long(iter_type& oitr, month_enum moy) const
+ {
+ this->put_string(oitr, month_long_names_[moy-1]);
+ }
+ //! Special values names
+ virtual void do_put_special_value(iter_type& oitr, special_value_enum sv) const
+ {
+ this->put_string(oitr, special_value_names_[sv]);
+ }
+ virtual void do_put_weekday_short(iter_type& oitr, weekday_enum wd) const
+ {
+ this->put_string(oitr, weekday_short_names_[wd]);
+ }
+ virtual void do_put_weekday_long(iter_type& oitr, weekday_enum wd) const
+ {
+ this->put_string(oitr, weekday_long_names_[wd]);
+ }
+ //! char between year-month
+ virtual void do_month_sep_char(iter_type& oitr) const
+ {
+ this->put_string(oitr, separator_char_);
+ }
+ //! Char to separate month-day
+ virtual void do_day_sep_char(iter_type& oitr) const
+ {
+ this->put_string(oitr, separator_char_);
+ }
+ //! Set the date ordering
+ virtual ymd_order_spec do_date_order() const
+ {
+ return order_spec_;
+ }
+ //! Set the date ordering
+ virtual month_format_spec do_month_format() const
+ {
+ return month_format_spec_;
+ }
+
+ private:
+ const charT* const* month_short_names_;
+ const charT* const* month_long_names_;
+ const charT* const* special_value_names_;
+ const charT* const* weekday_short_names_;
+ const charT* const* weekday_long_names_;
+ charT separator_char_[2];
+ ymd_order_spec order_spec_;
+ month_format_spec month_format_spec_;
+ };
+
+} } //namespace boost::date_time
+
+#endif //BOOST_NO_STD_LOCALE
+
+#endif
diff --git a/boost/boost/date_time/date_parsing.hpp b/boost/boost/date_time/date_parsing.hpp
new file mode 100644
index 00000000000..84c815c85ef
--- /dev/null
+++ b/boost/boost/date_time/date_parsing.hpp
@@ -0,0 +1,301 @@
+#ifndef _DATE_TIME_DATE_PARSING_HPP___
+#define _DATE_TIME_DATE_PARSING_HPP___
+
+/* Copyright (c) 2002,2003,2005 CrystalClear Software, Inc.
+ *
+ * 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)
+ *
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2006/07/17 03:48:31 $
+ */
+
+#include "boost/tokenizer.hpp"
+#include "boost/lexical_cast.hpp"
+#include "boost/date_time/compiler_config.hpp"
+#include "boost/date_time/parse_format_base.hpp"
+#include <string>
+#include <iterator>
+#include <algorithm>
+
+#if defined(BOOST_NO_STD_LOCALE)
+#include <cctype> // ::tolower(int)
+#else
+#include <locale> // std::tolower(char, locale)
+#endif
+
+namespace boost {
+namespace date_time {
+
+ //! A function to replace the std::transform( , , ,tolower) construct
+ /*! This function simply takes a string, and changes all the characters
+ * in that string to lowercase (according to the default system locale).
+ * In the event that a compiler does not support locales, the old
+ * C style tolower() is used.
+ */
+ inline
+ std::string
+ convert_to_lower(const std::string& inp) {
+ std::string tmp;
+ unsigned i = 0;
+#if defined(BOOST_NO_STD_LOCALE)
+ while(i < inp.length()) {
+ tmp += static_cast<char>(std::tolower(inp.at(i++)));
+#else
+ static const std::locale loc(std::locale::classic());
+ while(i < inp.length()) {
+ // tolower and others were brought in to std for borland >= v564
+ // in compiler_config.hpp
+ std::string::value_type c(inp.at(i++));
+ tmp += std::tolower(c, loc);
+#endif
+
+ }
+ return tmp;
+ }
+
+ //! Helper function for parse_date.
+ /* Used by-value parameter because we change the string and may
+ * want to preserve the original argument */
+ template<class month_type>
+ unsigned short
+ month_str_to_ushort(std::string s) {
+ if((s.at(0) >= '0') && (s.at(0) <= '9')) {
+ return boost::lexical_cast<unsigned short>(s);
+ }
+ else {
+ s = convert_to_lower(s);
+ typename month_type::month_map_ptr_type ptr = month_type::get_month_map_ptr();
+ typename month_type::month_map_type::iterator iter = ptr->find(s);
+ if(iter != ptr->end()) { // required for STLport
+ return iter->second;
+ }
+ }
+ return 13; // intentionally out of range - name not found
+ }
+
+ //! Find index of a string in either of 2 arrays
+ /*! find_match searches both arrays for a match to 's'. Indexing of the
+ * arrays is from 0 to 'limit'. The index of the match is returned.
+ * Ex. "Jan" returns 0, "Dec" returns 11, "Tue" returns 2.
+ * 'limit' can be sent in with: (greg_month::max)(),
+ * (greg_weekday::max)() or date_time::NumSpecialValues */
+ template<class charT>
+ short find_match(const charT* const* short_names,
+ const charT* const* long_names,
+ short limit,
+ const std::basic_string<charT>& s) {
+ for(short i = 0; i <= limit; ++i){
+ if(short_names[i] == s || long_names[i] == s){
+ return i;
+ }
+ }
+ return static_cast<short>(limit + 1); // not-found, return a value out of range
+ }
+
+ //! Generic function to parse a delimited date (eg: 2002-02-10)
+ /*! Accepted formats are: "2003-02-10" or " 2003-Feb-10" or
+ * "2003-Feburary-10"
+ * The order in which the Month, Day, & Year appear in the argument
+ * string can be accomodated by passing in the appropriate ymd_order_spec
+ */
+ template<class date_type>
+ date_type
+ parse_date(const std::string& s, int order_spec = ymd_order_iso) {
+ std::string spec_str("");
+ if(order_spec == ymd_order_iso) {
+ spec_str = "ymd";
+ }
+ else if(order_spec == ymd_order_dmy) {
+ spec_str = "dmy";
+ }
+ else { // (order_spec == ymd_order_us)
+ spec_str = "mdy";
+ }
+
+ typedef typename date_type::year_type year_type;
+ typedef typename date_type::month_type month_type;
+ unsigned pos = 0;
+ unsigned short year(0), month(0), day(0);
+ typedef typename std::basic_string<char>::traits_type traits_type;
+ typedef boost::char_separator<char, traits_type> char_separator_type;
+ typedef boost::tokenizer<char_separator_type,
+ std::basic_string<char>::const_iterator,
+ std::basic_string<char> > tokenizer;
+ typedef boost::tokenizer<char_separator_type,
+ std::basic_string<char>::const_iterator,
+ std::basic_string<char> >::iterator tokenizer_iterator;
+ // may need more delimiters, these work for the regression tests
+ const char sep_char[] = {',','-','.',' ','/','\0'};
+ char_separator_type sep(sep_char);
+ tokenizer tok(s,sep);
+ for(tokenizer_iterator beg=tok.begin();
+ beg!=tok.end() && pos < spec_str.size();
+ ++beg, ++pos) {
+ switch(spec_str.at(pos)) {
+ case 'y':
+ {
+ year = boost::lexical_cast<unsigned short>(*beg);
+ break;
+ }
+ case 'm':
+ {
+ month = month_str_to_ushort<month_type>(*beg);
+ break;
+ }
+ case 'd':
+ {
+ day = boost::lexical_cast<unsigned short>(*beg);
+ break;
+ }
+ } //switch
+ }
+ return date_type(year, month, day);
+ }
+
+ //! Generic function to parse undelimited date (eg: 20020201)
+ template<class date_type>
+ date_type
+ parse_undelimited_date(const std::string& s) {
+ int offsets[] = {4,2,2};
+ int pos = 0;
+ typedef typename date_type::year_type year_type;
+ //typename date_type::ymd_type ymd((year_type::min)(),1,1);
+ unsigned short y = 0, m = 0, d = 0;
+
+ /* The two bool arguments state that parsing will not wrap
+ * (only the first 8 characters will be parsed) and partial
+ * strings will not be parsed.
+ * Ex:
+ * "2005121" will parse 2005 & 12, but not the "1" */
+ boost::offset_separator osf(offsets, offsets+3, false, false);
+
+ typedef typename boost::tokenizer<boost::offset_separator,
+ std::basic_string<char>::const_iterator,
+ std::basic_string<char> > tokenizer_type;
+ tokenizer_type tok(s, osf);
+ for(typename tokenizer_type::iterator ti=tok.begin(); ti!=tok.end();++ti) {
+ unsigned short i = boost::lexical_cast<unsigned short>(*ti);
+ switch(pos) {
+ case 0: y = i; break;
+ case 1: m = i; break;
+ case 2: d = i; break;
+ }
+ pos++;
+ }
+ return date_type(y,m,d);
+ }
+
+ //! Helper function for 'date gregorian::from_stream()'
+ /*! Creates a string from the iterators that reference the
+ * begining & end of a char[] or string. All elements are
+ * used in output string */
+ template<class date_type, class iterator_type>
+ inline
+ date_type
+ from_stream_type(iterator_type& beg,
+ iterator_type& end,
+ char)
+ {
+ std::stringstream ss("");
+ while(beg != end) {
+ ss << *beg++;
+ }
+ return parse_date<date_type>(ss.str());
+ }
+
+ //! Helper function for 'date gregorian::from_stream()'
+ /*! Returns the first string found in the stream referenced by the
+ * begining & end iterators */
+ template<class date_type, class iterator_type>
+ inline
+ date_type
+ from_stream_type(iterator_type& beg,
+ iterator_type& end,
+ std::string)
+ {
+ return parse_date<date_type>(*beg);
+ }
+
+ /* I believe the wchar stuff would be best elsewhere, perhaps in
+ * parse_date<>()? In the mean time this gets us started... */
+ //! Helper function for 'date gregorian::from_stream()'
+ /*! Creates a string from the iterators that reference the
+ * begining & end of a wstring. All elements are
+ * used in output string */
+ template<class date_type, class iterator_type>
+ inline
+ date_type from_stream_type(iterator_type& beg,
+ iterator_type& end,
+ wchar_t)
+ {
+ std::stringstream ss("");
+ while(beg != end) {
+#if !defined(BOOST_DATE_TIME_NO_LOCALE)
+ ss << std::use_facet<std::ctype<wchar_t> >(std::locale()).narrow(*beg++, 'X'); // 'X' will cause exception to be thrown
+#else
+ ss << ss.narrow(*beg++, 'X');
+#endif
+ }
+ return parse_date<date_type>(ss.str());
+ }
+#ifndef BOOST_NO_STD_WSTRING
+ //! Helper function for 'date gregorian::from_stream()'
+ /*! Creates a string from the first wstring found in the stream
+ * referenced by the begining & end iterators */
+ template<class date_type, class iterator_type>
+ inline
+ date_type
+ from_stream_type(iterator_type& beg,
+ iterator_type& end,
+ std::wstring) {
+ std::wstring ws = *beg;
+ std::stringstream ss("");
+ std::wstring::iterator wsb = ws.begin(), wse = ws.end();
+ while(wsb != wse) {
+#if !defined(BOOST_DATE_TIME_NO_LOCALE)
+ ss << std::use_facet<std::ctype<wchar_t> >(std::locale()).narrow(*wsb++, 'X'); // 'X' will cause exception to be thrown
+#else
+ ss << ss.narrow(*wsb++, 'X'); // 'X' will cause exception to be thrown
+#endif
+ }
+ return parse_date<date_type>(ss.str());
+ }
+#endif // BOOST_NO_STD_WSTRING
+#if (defined(BOOST_MSVC) && (_MSC_VER < 1300))
+ // This function cannot be compiled with MSVC 6.0 due to internal compiler shorcomings
+#else
+ //! function called by wrapper functions: date_period_from_(w)string()
+ template<class date_type, class charT>
+ period<date_type, typename date_type::duration_type>
+ from_simple_string_type(const std::basic_string<charT>& s){
+ typedef typename std::basic_string<charT>::traits_type traits_type;
+ typedef typename boost::char_separator<charT, traits_type> char_separator;
+ typedef typename boost::tokenizer<char_separator,
+ typename std::basic_string<charT>::const_iterator,
+ std::basic_string<charT> > tokenizer;
+ const charT sep_list[4] = {'[','/',']','\0'};
+ char_separator sep(sep_list);
+ tokenizer tokens(s, sep);
+ typename tokenizer::iterator tok_it = tokens.begin();
+ std::basic_string<charT> date_string = *tok_it;
+ // get 2 string iterators and generate a date from them
+ typename std::basic_string<charT>::iterator date_string_start = date_string.begin(),
+ date_string_end = date_string.end();
+ typedef typename std::iterator_traits<typename std::basic_string<charT>::iterator>::value_type value_type;
+ date_type d1 = from_stream_type<date_type>(date_string_start, date_string_end, value_type());
+ date_string = *(++tok_it); // next token
+ date_string_start = date_string.begin(), date_string_end = date_string.end();
+ date_type d2 = from_stream_type<date_type>(date_string_start, date_string_end, value_type());
+ return period<date_type, typename date_type::duration_type>(d1, d2);
+ }
+#endif
+
+} } //namespace date_time
+
+
+
+
+#endif
+
diff --git a/boost/boost/date_time/dst_rules.hpp b/boost/boost/date_time/dst_rules.hpp
new file mode 100644
index 00000000000..e6b672740b9
--- /dev/null
+++ b/boost/boost/date_time/dst_rules.hpp
@@ -0,0 +1,391 @@
+#ifndef DATE_TIME_DST_RULES_HPP__
+#define DATE_TIME_DST_RULES_HPP__
+
+/* Copyright (c) 2002,2003, 2007 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2007/03/02 01:54:49 $
+ */
+
+/*! @file dst_rules.hpp
+ Contains template class to provide static dst rule calculations
+*/
+
+#include "boost/date_time/date_generators.hpp"
+#include "boost/date_time/period.hpp"
+#include "boost/date_time/date_defs.hpp"
+#include <stdexcept>
+
+namespace boost {
+ namespace date_time {
+
+ enum time_is_dst_result {is_not_in_dst, is_in_dst,
+ ambiguous, invalid_time_label};
+
+
+ //! Dynamic class used to caluclate dst transition information
+ template<class date_type_,
+ class time_duration_type_>
+ class dst_calculator
+ {
+ public:
+ typedef time_duration_type_ time_duration_type;
+ typedef date_type_ date_type;
+
+ //! Check the local time offset when on dst start day
+ /*! On this dst transition, the time label between
+ * the transition boundary and the boudary + the offset
+ * are invalid times. If before the boundary then still
+ * not in dst.
+ *@param time_of_day Time offset in the day for the local time
+ *@param dst_start_offset_minutes Local day offset for start of dst
+ *@param dst_length_minutes Number of minutes to adjust clock forward
+ *@retval status of time label w.r.t. dst
+ */
+ static time_is_dst_result
+ process_local_dst_start_day(const time_duration_type& time_of_day,
+ unsigned int dst_start_offset_minutes,
+ long dst_length_minutes)
+ {
+ //std::cout << "here" << std::endl;
+ if (time_of_day < time_duration_type(0,dst_start_offset_minutes,0)) {
+ return is_not_in_dst;
+ }
+ long offset = dst_start_offset_minutes + dst_length_minutes;
+ if (time_of_day >= time_duration_type(0,offset,0)) {
+ return is_in_dst;
+ }
+ return invalid_time_label;
+ }
+
+ //! Check the local time offset when on the last day of dst
+ /*! This is the calculation for the DST end day. On that day times
+ * prior to the conversion time - dst_length (1 am in US) are still
+ * in dst. Times between the above and the switch time are
+ * ambiguous. Times after the start_offset are not in dst.
+ *@param time_of_day Time offset in the day for the local time
+ *@param dst_end_offset_minutes Local time of day for end of dst
+ *@retval status of time label w.r.t. dst
+ */
+ static time_is_dst_result
+ process_local_dst_end_day(const time_duration_type& time_of_day,
+ unsigned int dst_end_offset_minutes,
+ long dst_length_minutes)
+ {
+ //in US this will be 60 so offset in day is 1,0,0
+ int offset = dst_end_offset_minutes-dst_length_minutes;
+ if (time_of_day < time_duration_type(0,offset,0)) {
+ return is_in_dst;
+ }
+ if (time_of_day >= time_duration_type(0,dst_end_offset_minutes,0)) {
+ return is_not_in_dst;
+ }
+ return ambiguous;
+ }
+
+ //! Calculates if the given local time is dst or not
+ /*! Determines if the time is really in DST or not. Also checks for
+ * invalid and ambiguous.
+ * @param current_day The day to check for dst
+ * @param time_of_day Time offset within the day to check
+ * @param dst_start_day Starting day of dst for the given locality
+ * @param dst_start_offset Time offset within day for dst boundary
+ * @param dst_end_day Ending day of dst for the given locality
+ * @param dst_end_offset Time offset within day given in dst for dst boundary
+ * @param dst_length lenght of dst adjusment
+ * @retval The time is either ambiguous, invalid, in dst, or not in dst
+ */
+ static time_is_dst_result
+ local_is_dst(const date_type& current_day,
+ const time_duration_type& time_of_day,
+ const date_type& dst_start_day,
+ const time_duration_type& dst_start_offset,
+ const date_type& dst_end_day,
+ const time_duration_type& dst_end_offset,
+ const time_duration_type& dst_length_minutes)
+ {
+ unsigned int start_minutes =
+ dst_start_offset.hours() * 60 + dst_start_offset.minutes();
+ unsigned int end_minutes =
+ dst_end_offset.hours() * 60 + dst_end_offset.minutes();
+ long length_minutes =
+ dst_length_minutes.hours() * 60 + dst_length_minutes.minutes();
+
+ return local_is_dst(current_day, time_of_day,
+ dst_start_day, start_minutes,
+ dst_end_day, end_minutes,
+ length_minutes);
+ }
+
+ //! Calculates if the given local time is dst or not
+ /*! Determines if the time is really in DST or not. Also checks for
+ * invalid and ambiguous.
+ * @param current_day The day to check for dst
+ * @param time_of_day Time offset within the day to check
+ * @param dst_start_day Starting day of dst for the given locality
+ * @param dst_start_offset_minutes Offset within day for dst
+ * boundary (eg 120 for US which is 02:00:00)
+ * @param dst_end_day Ending day of dst for the given locality
+ * @param dst_end_offset_minutes Offset within day given in dst for dst
+ * boundary (eg 120 for US which is 02:00:00)
+ * @param dst_length_minutes Length of dst adjusment (eg: 60 for US)
+ * @retval The time is either ambiguous, invalid, in dst, or not in dst
+ */
+ static time_is_dst_result
+ local_is_dst(const date_type& current_day,
+ const time_duration_type& time_of_day,
+ const date_type& dst_start_day,
+ unsigned int dst_start_offset_minutes,
+ const date_type& dst_end_day,
+ unsigned int dst_end_offset_minutes,
+ long dst_length_minutes)
+ {
+ //in northern hemisphere dst is in the middle of the year
+ if (dst_start_day < dst_end_day) {
+ if ((current_day > dst_start_day) && (current_day < dst_end_day)) {
+ return is_in_dst;
+ }
+ if ((current_day < dst_start_day) || (current_day > dst_end_day)) {
+ return is_not_in_dst;
+ }
+ }
+ else {//southern hemisphere dst is at begining /end of year
+ if ((current_day < dst_start_day) && (current_day > dst_end_day)) {
+ return is_not_in_dst;
+ }
+ if ((current_day > dst_start_day) || (current_day < dst_end_day)) {
+ return is_in_dst;
+ }
+ }
+
+ if (current_day == dst_start_day) {
+ return process_local_dst_start_day(time_of_day,
+ dst_start_offset_minutes,
+ dst_length_minutes);
+ }
+
+ if (current_day == dst_end_day) {
+ return process_local_dst_end_day(time_of_day,
+ dst_end_offset_minutes,
+ dst_length_minutes);
+ }
+ //you should never reach this statement
+ return invalid_time_label;
+ }
+
+ };
+
+
+ //! Compile-time configurable daylight savings time calculation engine
+ /* This template provides the ability to configure a daylight savings
+ * calculation at compile time covering all the cases. Unfortunately
+ * because of the number of dimensions related to daylight savings
+ * calculation the number of parameters is high. In addition, the
+ * start and end transition rules are complex types that specify
+ * an algorithm for calculation of the starting day and ending
+ * day of daylight savings time including the month and day
+ * specifications (eg: last sunday in October).
+ *
+ * @param date_type A type that represents dates, typically gregorian::date
+ * @param time_duration_type Used for the offset in the day calculations
+ * @param dst_traits A set of traits that define the rules of dst
+ * calculation. The dst_trait must include the following:
+ * start_rule_functor - Rule to calculate the starting date of a
+ * dst transition (eg: last_kday_of_month).
+ * start_day - static function that returns month of dst start for
+ * start_rule_functor
+ * start_month -static function that returns day or day of week for
+ * dst start of dst
+ * end_rule_functor - Rule to calculate the end of dst day.
+ * end_day - static fucntion that returns end day for end_rule_functor
+ * end_month - static function that returns end month for end_rule_functor
+ * dst_start_offset_minutes - number of minutes from start of day to transition to dst -- 120 (or 2:00 am) is typical for the U.S. and E.U.
+ * dst_start_offset_minutes - number of minutes from start of day to transition off of dst -- 180 (or 3:00 am) is typical for E.U.
+ * dst_length_minutes - number of minutes that dst shifts clock
+ */
+ template<class date_type,
+ class time_duration_type,
+ class dst_traits>
+ class dst_calc_engine
+ {
+ public:
+ typedef typename date_type::year_type year_type;
+ typedef typename date_type::calendar_type calendar_type;
+ typedef dst_calculator<date_type, time_duration_type> dstcalc;
+
+ //! Calculates if the given local time is dst or not
+ /*! Determines if the time is really in DST or not. Also checks for
+ * invalid and ambiguous.
+ * @retval The time is either ambiguous, invalid, in dst, or not in dst
+ */
+ static time_is_dst_result local_is_dst(const date_type& d,
+ const time_duration_type& td)
+ {
+
+ year_type y = d.year();
+ date_type dst_start = local_dst_start_day(y);
+ date_type dst_end = local_dst_end_day(y);
+ return dstcalc::local_is_dst(d,td,
+ dst_start,
+ dst_traits::dst_start_offset_minutes(),
+ dst_end,
+ dst_traits::dst_end_offset_minutes(),
+ dst_traits::dst_shift_length_minutes());
+
+ }
+
+ static bool is_dst_boundary_day(date_type d)
+ {
+ year_type y = d.year();
+ return ((d == local_dst_start_day(y)) ||
+ (d == local_dst_end_day(y)));
+ }
+
+ //! The time of day for the dst transition (eg: typically 01:00:00 or 02:00:00)
+ static time_duration_type dst_offset()
+ {
+ return time_duration_type(0,dst_traits::dst_shift_length_minutes(),0);
+ }
+
+ static date_type local_dst_start_day(year_type year)
+ {
+ return dst_traits::local_dst_start_day(year);
+ }
+
+ static date_type local_dst_end_day(year_type year)
+ {
+ return dst_traits::local_dst_end_day(year);
+ }
+
+
+ };
+
+ //! Depricated: Class to calculate dst boundaries for US time zones
+ /* Use dst_calc_engine instead.
+ * In 2007 US/Canada DST rules changed
+ * (http://en.wikipedia.org/wiki/Energy_Policy_Act_of_2005#Change_to_daylight_saving_time).
+ */
+ template<class date_type_,
+ class time_duration_type_,
+ unsigned int dst_start_offset_minutes=120, //from start of day
+ short dst_length_minutes=60> //1 hour == 60 min in US
+ class us_dst_rules
+ {
+ public:
+ typedef time_duration_type_ time_duration_type;
+ typedef date_type_ date_type;
+ typedef typename date_type::year_type year_type;
+ typedef typename date_type::calendar_type calendar_type;
+ typedef date_time::last_kday_of_month<date_type> lkday;
+ typedef date_time::first_kday_of_month<date_type> fkday;
+ typedef date_time::nth_kday_of_month<date_type> nkday;
+ typedef dst_calculator<date_type, time_duration_type> dstcalc;
+
+ //! Calculates if the given local time is dst or not
+ /*! Determines if the time is really in DST or not. Also checks for
+ * invalid and ambiguous.
+ * @retval The time is either ambiguous, invalid, in dst, or not in dst
+ */
+ static time_is_dst_result local_is_dst(const date_type& d,
+ const time_duration_type& td)
+ {
+
+ year_type y = d.year();
+ date_type dst_start = local_dst_start_day(y);
+ date_type dst_end = local_dst_end_day(y);
+ return dstcalc::local_is_dst(d,td,
+ dst_start,dst_start_offset_minutes,
+ dst_end, dst_start_offset_minutes,
+ dst_length_minutes);
+
+ }
+
+
+ static bool is_dst_boundary_day(date_type d)
+ {
+ year_type y = d.year();
+ return ((d == local_dst_start_day(y)) ||
+ (d == local_dst_end_day(y)));
+ }
+
+ static date_type local_dst_start_day(year_type year)
+ {
+ if (year >= year_type(2007)) {
+ //second sunday in march
+ nkday ssim(nkday::second, Sunday, gregorian::Mar);
+ return ssim.get_date(year);
+ } else {
+ //first sunday in april
+ fkday fsia(Sunday, gregorian::Apr);
+ return fsia.get_date(year);
+ }
+ }
+
+ static date_type local_dst_end_day(year_type year)
+ {
+ if (year >= year_type(2007)) {
+ //first sunday in november
+ fkday fsin(Sunday, gregorian::Nov);
+ return fsin.get_date(year);
+ } else {
+ //last sunday in october
+ lkday lsio(Sunday, gregorian::Oct);
+ return lsio.get_date(year);
+ }
+ }
+
+ static time_duration_type dst_offset()
+ {
+ return time_duration_type(0,dst_length_minutes,0);
+ }
+
+ private:
+
+
+ };
+
+ //! Used for local time adjustments in places that don't use dst
+ template<class date_type_, class time_duration_type_>
+ class null_dst_rules
+ {
+ public:
+ typedef time_duration_type_ time_duration_type;
+ typedef date_type_ date_type;
+
+
+ //! Calculates if the given local time is dst or not
+ /*! @retval Always is_not_in_dst since this is for zones without dst
+ */
+ static time_is_dst_result local_is_dst(const date_type&,
+ const time_duration_type&)
+ {
+ return is_not_in_dst;
+ }
+
+ //! Calculates if the given utc time is in dst
+ static time_is_dst_result utc_is_dst(const date_type&,
+ const time_duration_type&)
+ {
+ return is_not_in_dst;
+ }
+
+ static bool is_dst_boundary_day(date_type d)
+ {
+ return false;
+ }
+
+ static time_duration_type dst_offset()
+ {
+ return time_duration_type(0,0,0);
+ }
+
+ };
+
+
+ } } //namespace date_time
+
+
+
+#endif
diff --git a/boost/boost/date_time/dst_transition_generators.hpp b/boost/boost/date_time/dst_transition_generators.hpp
new file mode 100644
index 00000000000..2008c689a6d
--- /dev/null
+++ b/boost/boost/date_time/dst_transition_generators.hpp
@@ -0,0 +1,75 @@
+/* Copyright (c) 2002,2003,2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ */
+#ifndef DATE_TIME_DATE_DST_TRANSITION_DAY_GEN_HPP__
+#define DATE_TIME_DATE_DST_TRANSITION_DAY_GEN_HPP__
+
+
+
+namespace boost {
+namespace date_time {
+
+ //! Defines base interface for calculating start and end date of daylight savings
+ template<class date_type>
+ class dst_day_calc_rule
+ {
+ public:
+ typedef typename date_type::year_type year_type;
+ virtual ~dst_day_calc_rule() {};
+ virtual date_type start_day(year_type y) const=0;
+ virtual std::string start_rule_as_string() const=0;
+ virtual date_type end_day(year_type y) const=0;
+ virtual std::string end_rule_as_string() const=0;
+
+ };
+
+ //! Canonical form for a class that provides day rule calculation
+ /*! This class is used to generate specific sets of dst rules
+ *
+ *@param spec Provides a specifiction of the function object types used
+ * to generate start and end days of daylight savings as well
+ * as the date type.
+ */
+ template<class spec>
+ class day_calc_dst_rule : public dst_day_calc_rule<typename spec::date_type>
+ {
+ public:
+ typedef typename spec::date_type date_type;
+ typedef typename date_type::year_type year_type;
+ typedef typename spec::start_rule start_rule;
+ typedef typename spec::end_rule end_rule;
+ day_calc_dst_rule(start_rule dst_start,
+ end_rule dst_end) :
+ dst_start_(dst_start),
+ dst_end_(dst_end)
+ {}
+ virtual date_type start_day(year_type y) const
+ {
+ return dst_start_.get_date(y);
+ }
+ virtual std::string start_rule_as_string() const
+ {
+ return dst_start_.to_string();
+ }
+ virtual date_type end_day(year_type y) const
+ {
+ return dst_end_.get_date(y);
+ }
+ virtual std::string end_rule_as_string() const
+ {
+ return dst_end_.to_string();
+ }
+ private:
+ start_rule dst_start_;
+ end_rule dst_end_;
+ };
+
+
+} }//namespace
+
+
+
+#endif
diff --git a/boost/boost/date_time/filetime_functions.hpp b/boost/boost/date_time/filetime_functions.hpp
new file mode 100644
index 00000000000..d40aba279fa
--- /dev/null
+++ b/boost/boost/date_time/filetime_functions.hpp
@@ -0,0 +1,78 @@
+#ifndef DATE_TIME_FILETIME_FUNCTIONS_HPP__
+#define DATE_TIME_FILETIME_FUNCTIONS_HPP__
+
+/* Copyright (c) 2004 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2004/08/04 22:06:05 $
+ */
+
+/*! @file filetime_functions.hpp
+ * Function(s) for converting between a FILETIME structure and a
+ * time object. This file is only available on systems that have
+ * BOOST_HAS_FTIME defined.
+ */
+
+#include <boost/date_time/compiler_config.hpp>
+#if defined(BOOST_HAS_FTIME) // skip this file if no FILETIME
+#include <windows.h>
+#include <boost/cstdint.hpp>
+#include <boost/date_time/time.hpp>
+
+
+namespace boost {
+namespace date_time {
+
+
+ //! Create a time object from an initialized FILETIME struct.
+ /*! Create a time object from an initialized FILETIME struct.
+ * A FILETIME struct holds 100-nanosecond units (0.0000001). When
+ * built with microsecond resolution the FILETIME's sub second value
+ * will be truncated. Nanosecond resolution has no truncation. */
+ template<class time_type>
+ inline
+ time_type time_from_ftime(const FILETIME& ft){
+ typedef typename time_type::date_type date_type;
+ typedef typename time_type::date_duration_type date_duration_type;
+ typedef typename time_type::time_duration_type time_duration_type;
+
+ /* OFFSET is difference between 1970-Jan-01 & 1601-Jan-01
+ * in 100-nanosecond intervals */
+ uint64_t c1 = 27111902UL;
+ uint64_t c2 = 3577643008UL; // issues warning without 'UL'
+ const uint64_t OFFSET = (c1 << 32) + c2;
+ const long sec_pr_day = 86400; // seconds per day
+
+ uint64_t filetime = ft.dwHighDateTime;
+ filetime <<= 32;
+ filetime += ft.dwLowDateTime;
+ filetime -= OFFSET; // filetime is now 100-nanos since 1970-Jan-01
+
+ uint64_t sec = filetime / 10000000;
+#if defined(BOOST_DATE_TIME_POSIX_TIME_STD_CONFIG)
+ uint64_t sub_sec = (filetime % 10000000) * 100; // nanoseconds
+#else
+ uint64_t sub_sec = (filetime % 10000000) / 10; // truncate to microseconds
+#endif
+
+ // split sec into usable chunks: days, hours, minutes, & seconds
+ long _d = sec / sec_pr_day;
+ long tmp = sec % sec_pr_day;
+ long _h = tmp / 3600; // sec_pr_hour
+ tmp %= 3600;
+ long _m = tmp / 60; // sec_pr_min
+ tmp %= 60;
+ long _s = tmp; // seconds
+
+ date_duration_type dd(_d);
+ date_type d = date_type(1970, Jan, 01) + dd;
+ return time_type(d, time_duration_type(_h, _m, _s, sub_sec));
+ }
+
+}} // boost::date_time
+
+#endif // BOOST_HAS_FTIME
+
+#endif // DATE_TIME_FILETIME_FUNCTIONS_HPP__
diff --git a/boost/boost/date_time/format_date_parser.hpp b/boost/boost/date_time/format_date_parser.hpp
new file mode 100644
index 00000000000..855cab59d04
--- /dev/null
+++ b/boost/boost/date_time/format_date_parser.hpp
@@ -0,0 +1,731 @@
+
+#ifndef DATE_TIME_FORMAT_DATE_PARSER_HPP__
+#define DATE_TIME_FORMAT_DATE_PARSER_HPP__
+
+/* Copyright (c) 2004-2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2006/02/18 20:58:01 $
+ */
+
+
+#include "boost/lexical_cast.hpp"
+#include "boost/date_time/string_parse_tree.hpp"
+#include "boost/date_time/strings_from_facet.hpp"
+#include "boost/date_time/special_values_parser.hpp"
+#include <string>
+#include <vector>
+
+namespace boost { namespace date_time {
+
+//! Helper function for parsing fixed length strings into integers
+/*! Will consume 'length' number of characters from stream. Consumed
+ * character are transfered to parse_match_result struct.
+ * Returns '-1' if no number can be parsed or incorrect number of
+ * digits in stream. */
+template<typename int_type, typename charT>
+inline
+int_type
+fixed_string_to_int(std::istreambuf_iterator<charT>& itr,
+ std::istreambuf_iterator<charT>& stream_end,
+ parse_match_result<charT>& mr,
+ unsigned int length,
+ const charT& fill_char)
+{
+ //typedef std::basic_string<charT> string_type;
+ unsigned int j = 0;
+ //string_type s;
+ while (j < length && itr != stream_end &&
+ (std::isdigit(*itr) || *itr == fill_char)) {
+ if(*itr == fill_char) {
+ /* Since a fill_char can be anything, we convert it to a zero.
+ * lexical_cast will behave predictably when zero is used as fill. */
+ mr.cache += ('0');
+ }
+ else {
+ mr.cache += (*itr);
+ }
+ itr++;
+ j++;
+ }
+ int_type i = -1;
+ // mr.cache will hold leading zeros. size() tells us when input is too short.
+ if(mr.cache.size() < length) {
+ return i;
+ }
+ try {
+ i = boost::lexical_cast<int_type>(mr.cache);
+ }catch(bad_lexical_cast blc){
+ // we want to return -1 if the cast fails so nothing to do here
+ }
+ return i;
+}
+
+//! Helper function for parsing fixed length strings into integers
+/*! Will consume 'length' number of characters from stream. Consumed
+ * character are transfered to parse_match_result struct.
+ * Returns '-1' if no number can be parsed or incorrect number of
+ * digits in stream. */
+template<typename int_type, typename charT>
+inline
+int_type
+fixed_string_to_int(std::istreambuf_iterator<charT>& itr,
+ std::istreambuf_iterator<charT>& stream_end,
+ parse_match_result<charT>& mr,
+ unsigned int length)
+{
+ return fixed_string_to_int<int_type, charT>(itr, stream_end, mr, length, '0');
+}
+
+//! Helper function for parsing varied length strings into integers
+/*! Will consume 'max_length' characters from stream only if those
+ * characters are digits. Returns '-1' if no number can be parsed.
+ * Will not parse a number preceeded by a '+' or '-'. */
+template<typename int_type, typename charT>
+inline
+int_type
+var_string_to_int(std::istreambuf_iterator<charT>& itr,
+ std::istreambuf_iterator<charT>& stream_end,
+ unsigned int max_length)
+{
+ typedef std::basic_string<charT> string_type;
+ unsigned int j = 0;
+ string_type s;
+ while ((j < max_length) && std::isdigit(*itr)) {
+ s += (*itr);
+ itr++;
+ j++;
+ }
+ int_type i = -1;
+ if(s.length() != 0) {
+ i = boost::lexical_cast<int_type>(s);
+ }
+ return i;
+}
+
+
+//! Class with generic date parsing using a format string
+/*! The following is the set of recognized format specifiers
+ - %a - Short weekday name
+ - %A - Long weekday name
+ - %b - Abbreviated month name
+ - %B - Full month name
+ - %d - Day of the month as decimal 01 to 31
+ - %j - Day of year as decimal from 001 to 366
+ - %m - Month name as a decimal 01 to 12
+ - %U - Week number 00 to 53 with first Sunday as the first day of week 1?
+ - %w - Weekday as decimal number 0 to 6 where Sunday == 0
+ - %W - Week number 00 to 53 where Monday is first day of week 1
+ - %x - facet default date representation
+ - %y - Year without the century - eg: 04 for 2004
+ - %Y - Year with century
+
+ The weekday specifiers (%a and %A) do not add to the date construction,
+ but they provide a way to skip over the weekday names for formats that
+ provide them.
+
+ todo -- Another interesting feature that this approach could provide is
+ an option to fill in any missing fields with the current values
+ from the clock. So if you have %m-%d the parser would detect
+ the missing year value and fill it in using the clock.
+
+ todo -- What to do with the %x. %x in the classic facet is just bad...
+
+ */
+template<class date_type, typename charT>
+class format_date_parser
+{
+ public:
+ typedef std::basic_string<charT> string_type;
+ typedef std::basic_ostringstream<charT> stringstream_type;
+ typedef std::istreambuf_iterator<charT> stream_itr_type;
+ typedef typename string_type::const_iterator const_itr;
+ typedef typename date_type::year_type year_type;
+ typedef typename date_type::month_type month_type;
+ typedef typename date_type::day_type day_type;
+ typedef typename date_type::duration_type duration_type;
+ typedef typename date_type::day_of_week_type day_of_week_type;
+ typedef typename date_type::day_of_year_type day_of_year_type;
+ typedef string_parse_tree<charT> parse_tree_type;
+ typedef typename parse_tree_type::parse_match_result_type match_results;
+ typedef std::vector<std::basic_string<charT> > input_collection_type;
+
+ // TODO sv_parser uses its default constructor - write the others
+
+ format_date_parser(const string_type& format_str,
+ const input_collection_type& month_short_names,
+ const input_collection_type& month_long_names,
+ const input_collection_type& weekday_short_names,
+ const input_collection_type& weekday_long_names) :
+ m_format(format_str),
+ m_month_short_names(month_short_names, 1),
+ m_month_long_names(month_long_names, 1),
+ m_weekday_short_names(weekday_short_names),
+ m_weekday_long_names(weekday_long_names)
+ {}
+
+ format_date_parser(const string_type& format_str,
+ const std::locale& locale) :
+ m_format(format_str),
+ m_month_short_names(gather_month_strings<charT>(locale), 1),
+ m_month_long_names(gather_month_strings<charT>(locale, false), 1),
+ m_weekday_short_names(gather_weekday_strings<charT>(locale)),
+ m_weekday_long_names(gather_weekday_strings<charT>(locale, false))
+ {}
+
+ format_date_parser(const format_date_parser<date_type,charT>& fdp)
+ {
+ this->m_format = fdp.m_format;
+ this->m_month_short_names = fdp.m_month_short_names;
+ this->m_month_long_names = fdp.m_month_long_names;
+ this->m_weekday_short_names = fdp.m_weekday_short_names;
+ this->m_weekday_long_names = fdp.m_weekday_long_names;
+ }
+
+ string_type format() const
+ {
+ return m_format;
+ }
+
+ void format(string_type format_str)
+ {
+ m_format = format_str;
+ }
+
+ void short_month_names(const input_collection_type& month_names)
+ {
+ m_month_short_names = parse_tree_type(month_names, 1);
+ }
+ void long_month_names(const input_collection_type& month_names)
+ {
+ m_month_long_names = parse_tree_type(month_names, 1);
+ }
+ void short_weekday_names(const input_collection_type& weekday_names)
+ {
+ m_weekday_short_names = parse_tree_type(weekday_names);
+ }
+ void long_weekday_names(const input_collection_type& weekday_names)
+ {
+ m_weekday_long_names = parse_tree_type(weekday_names);
+ }
+
+ date_type
+ parse_date(const string_type& value,
+ const string_type& format_str,
+ const special_values_parser<date_type,charT>& sv_parser) const
+ {
+ stringstream_type ss;
+ ss << value;
+ stream_itr_type sitr(ss);
+ stream_itr_type stream_end;
+ return parse_date(sitr, stream_end, format_str, sv_parser);
+ }
+
+ date_type
+ parse_date(std::istreambuf_iterator<charT>& sitr,
+ std::istreambuf_iterator<charT>& stream_end,
+ const special_values_parser<date_type,charT>& sv_parser) const
+ {
+ return parse_date(sitr, stream_end, m_format, sv_parser);
+ }
+
+ /*! Of all the objects that the format_date_parser can parse, only a
+ * date can be a special value. Therefore, only parse_date checks
+ * for special_values. */
+ date_type
+ parse_date(std::istreambuf_iterator<charT>& sitr,
+ std::istreambuf_iterator<charT>& stream_end,
+ string_type format_str,
+ const special_values_parser<date_type,charT>& sv_parser) const
+ {
+ bool use_current_char = false;
+
+ // skip leading whitespace
+ while(std::isspace(*sitr) && sitr != stream_end) { ++sitr; }
+ charT current_char = *sitr;
+
+ short year(0), month(0), day(0), day_of_year(0);// wkday(0);
+ /* Initialized the following to their minimum values. These intermediate
+ * objects are used so we get specific exceptions when part of the input
+ * is unparsable.
+ * Ex: "205-Jan-15" will throw a bad_year, "2005-Jsn-15"- bad_month, etc.*/
+ year_type t_year(1400);
+ month_type t_month(1);
+ day_type t_day(1);
+ day_of_week_type wkday(0);
+
+
+ const_itr itr(format_str.begin());
+ while (itr != format_str.end() && (sitr != stream_end)) {
+ if (*itr == '%') {
+ itr++;
+ if (*itr != '%') {
+ switch(*itr) {
+ case 'a':
+ {
+ //this value is just throw away. It could be used for
+ //error checking potentially, but it isn't helpful in
+ //actually constructing the date - we just need to get it
+ //out of the stream
+ match_results mr = m_weekday_short_names.match(sitr, stream_end);
+ if(mr.current_match == match_results::PARSE_ERROR) {
+ // check special_values
+ if(sv_parser.match(sitr, stream_end, mr)) {
+ return date_type(static_cast<special_values>(mr.current_match));
+ }
+ }
+ wkday = mr.current_match;
+ if (mr.has_remaining()) {
+ current_char = mr.last_char();
+ use_current_char = true;
+ }
+ break;
+ }
+ case 'A':
+ {
+ //this value is just throw away. It could be used for
+ //error checking potentially, but it isn't helpful in
+ //actually constructing the date - we just need to get it
+ //out of the stream
+ match_results mr = m_weekday_long_names.match(sitr, stream_end);
+ if(mr.current_match == match_results::PARSE_ERROR) {
+ // check special_values
+ if(sv_parser.match(sitr, stream_end, mr)) {
+ return date_type(static_cast<special_values>(mr.current_match));
+ }
+ }
+ wkday = mr.current_match;
+ if (mr.has_remaining()) {
+ current_char = mr.last_char();
+ use_current_char = true;
+ }
+ break;
+ }
+ case 'b':
+ {
+ match_results mr = m_month_short_names.match(sitr, stream_end);
+ if(mr.current_match == match_results::PARSE_ERROR) {
+ // check special_values
+ if(sv_parser.match(sitr, stream_end, mr)) {
+ return date_type(static_cast<special_values>(mr.current_match));
+ }
+ }
+ t_month = month_type(mr.current_match);
+ if (mr.has_remaining()) {
+ current_char = mr.last_char();
+ use_current_char = true;
+ }
+ break;
+ }
+ case 'B':
+ {
+ match_results mr = m_month_long_names.match(sitr, stream_end);
+ if(mr.current_match == match_results::PARSE_ERROR) {
+ // check special_values
+ if(sv_parser.match(sitr, stream_end, mr)) {
+ return date_type(static_cast<special_values>(mr.current_match));
+ }
+ }
+ t_month = month_type(mr.current_match);
+ if (mr.has_remaining()) {
+ current_char = mr.last_char();
+ use_current_char = true;
+ }
+ break;
+ }
+ case 'd':
+ {
+ match_results mr;
+ day = fixed_string_to_int<short, charT>(sitr, stream_end, mr, 2);
+ if(day == -1) {
+ if(sv_parser.match(sitr, stream_end, mr)) {
+ return date_type(static_cast<special_values>(mr.current_match));
+ }
+ }
+ t_day = day_type(day);
+ break;
+ }
+ case 'e':
+ {
+ match_results mr;
+ day = fixed_string_to_int<short, charT>(sitr, stream_end, mr, 2, ' ');
+ if(day == -1) {
+ if(sv_parser.match(sitr, stream_end, mr)) {
+ return date_type(static_cast<special_values>(mr.current_match));
+ }
+ }
+ t_day = day_type(day);
+ break;
+ }
+ case 'j':
+ {
+ match_results mr;
+ day_of_year = fixed_string_to_int<short, charT>(sitr, stream_end, mr, 3);
+ if(day_of_year == -1) {
+ if(sv_parser.match(sitr, stream_end, mr)) {
+ return date_type(static_cast<special_values>(mr.current_match));
+ }
+ }
+ // these next two lines are so we get an exception with bad input
+ day_of_year_type t_day_of_year(1);
+ t_day_of_year = day_of_year_type(day_of_year);
+ break;
+ }
+ case 'm':
+ {
+ match_results mr;
+ month = fixed_string_to_int<short, charT>(sitr, stream_end, mr, 2);
+ if(month == -1) {
+ if(sv_parser.match(sitr, stream_end, mr)) {
+ return date_type(static_cast<special_values>(mr.current_match));
+ }
+ }
+ t_month = month_type(month);
+ break;
+ }
+ case 'Y':
+ {
+ match_results mr;
+ year = fixed_string_to_int<short, charT>(sitr, stream_end, mr, 4);
+ if(year == -1) {
+ if(sv_parser.match(sitr, stream_end, mr)) {
+ return date_type(static_cast<special_values>(mr.current_match));
+ }
+ }
+ t_year = year_type(year);
+ break;
+ }
+ case 'y':
+ {
+ match_results mr;
+ year = fixed_string_to_int<short, charT>(sitr, stream_end, mr, 2);
+ if(year == -1) {
+ if(sv_parser.match(sitr, stream_end, mr)) {
+ return date_type(static_cast<special_values>(mr.current_match));
+ }
+ }
+ year += 2000; //make 2 digit years in this century
+ t_year = year_type(year);
+ break;
+ }
+ default:
+ {} //ignore those we don't understand
+
+ }//switch
+
+ }
+ else { // itr == '%', second consecutive
+ sitr++;
+ }
+
+ itr++; //advance past format specifier
+ }
+ else { //skip past chars in format and in buffer
+ itr++;
+ if (use_current_char) {
+ use_current_char = false;
+ current_char = *sitr;
+ }
+ else {
+ sitr++;
+ }
+ }
+ }
+
+ if (day_of_year > 0) {
+ date_type d(static_cast<unsigned short>(year-1),12,31); //end of prior year
+ return d + duration_type(day_of_year);
+ }
+
+ return date_type(t_year, t_month, t_day); // exceptions were thrown earlier
+ // if input was no good
+ }
+
+ //! Throws bad_month if unable to parse
+ month_type
+ parse_month(std::istreambuf_iterator<charT>& sitr,
+ std::istreambuf_iterator<charT>& stream_end,
+ string_type format_str) const
+ {
+ match_results mr;
+ return parse_month(sitr, stream_end, format_str, mr);
+ }
+
+ //! Throws bad_month if unable to parse
+ month_type
+ parse_month(std::istreambuf_iterator<charT>& sitr,
+ std::istreambuf_iterator<charT>& stream_end,
+ string_type format_str,
+ match_results& mr) const
+ {
+ bool use_current_char = false;
+
+ // skip leading whitespace
+ while(std::isspace(*sitr) && sitr != stream_end) { ++sitr; }
+ charT current_char = *sitr;
+
+ short month(0);
+
+ const_itr itr(format_str.begin());
+ while (itr != format_str.end() && (sitr != stream_end)) {
+ if (*itr == '%') {
+ itr++;
+ if (*itr != '%') {
+ switch(*itr) {
+ case 'b':
+ {
+ mr = m_month_short_names.match(sitr, stream_end);
+ month = mr.current_match;
+ if (mr.has_remaining()) {
+ current_char = mr.last_char();
+ use_current_char = true;
+ }
+ break;
+ }
+ case 'B':
+ {
+ mr = m_month_long_names.match(sitr, stream_end);
+ month = mr.current_match;
+ if (mr.has_remaining()) {
+ current_char = mr.last_char();
+ use_current_char = true;
+ }
+ break;
+ }
+ case 'm':
+ {
+ month = var_string_to_int<short, charT>(sitr, stream_end, 2);
+ // var_string_to_int returns -1 if parse failed. That will
+ // cause a bad_month exception to be thrown so we do nothing here
+ break;
+ }
+ default:
+ {} //ignore those we don't understand
+
+ }//switch
+
+ }
+ else { // itr == '%', second consecutive
+ sitr++;
+ }
+
+ itr++; //advance past format specifier
+ }
+ else { //skip past chars in format and in buffer
+ itr++;
+ if (use_current_char) {
+ use_current_char = false;
+ current_char = *sitr;
+ }
+ else {
+ sitr++;
+ }
+ }
+ }
+
+ return month_type(month); // throws bad_month exception when values are zero
+ }
+
+ //! Expects 1 or 2 digits 1-31. Throws bad_day_of_month if unable to parse
+ day_type
+ parse_var_day_of_month(std::istreambuf_iterator<charT>& sitr,
+ std::istreambuf_iterator<charT>& stream_end) const
+ {
+ // skip leading whitespace
+ while(std::isspace(*sitr) && sitr != stream_end) { ++sitr; }
+
+ return day_type(var_string_to_int<short, charT>(sitr, stream_end, 2));
+ }
+ //! Expects 2 digits 01-31. Throws bad_day_of_month if unable to parse
+ day_type
+ parse_day_of_month(std::istreambuf_iterator<charT>& sitr,
+ std::istreambuf_iterator<charT>& stream_end) const
+ {
+ // skip leading whitespace
+ while(std::isspace(*sitr) && sitr != stream_end) { ++sitr; }
+
+ //return day_type(var_string_to_int<short, charT>(sitr, stream_end, 2));
+ match_results mr;
+ return day_type(fixed_string_to_int<short, charT>(sitr, stream_end, mr, 2));
+ }
+
+ day_of_week_type
+ parse_weekday(std::istreambuf_iterator<charT>& sitr,
+ std::istreambuf_iterator<charT>& stream_end,
+ string_type format_str) const
+ {
+ match_results mr;
+ return parse_weekday(sitr, stream_end, format_str, mr);
+ }
+ day_of_week_type
+ parse_weekday(std::istreambuf_iterator<charT>& sitr,
+ std::istreambuf_iterator<charT>& stream_end,
+ string_type format_str,
+ match_results& mr) const
+ {
+ bool use_current_char = false;
+
+ // skip leading whitespace
+ while(std::isspace(*sitr) && sitr != stream_end) { ++sitr; }
+ charT current_char = *sitr;
+
+ short wkday(0);
+
+ const_itr itr(format_str.begin());
+ while (itr != format_str.end() && (sitr != stream_end)) {
+ if (*itr == '%') {
+ itr++;
+ if (*itr != '%') {
+ switch(*itr) {
+ case 'a':
+ {
+ //this value is just throw away. It could be used for
+ //error checking potentially, but it isn't helpful in
+ //actually constructing the date - we just need to get it
+ //out of the stream
+ mr = m_weekday_short_names.match(sitr, stream_end);
+ wkday = mr.current_match;
+ if (mr.has_remaining()) {
+ current_char = mr.last_char();
+ use_current_char = true;
+ }
+ break;
+ }
+ case 'A':
+ {
+ //this value is just throw away. It could be used for
+ //error checking potentially, but it isn't helpful in
+ //actually constructing the date - we just need to get it
+ //out of the stream
+ mr = m_weekday_long_names.match(sitr, stream_end);
+ wkday = mr.current_match;
+ if (mr.has_remaining()) {
+ current_char = mr.last_char();
+ use_current_char = true;
+ }
+ break;
+ }
+ case 'w':
+ {
+ // weekday as number 0-6, Sunday == 0
+ wkday = var_string_to_int<short, charT>(sitr, stream_end, 2);
+ break;
+ }
+ default:
+ {} //ignore those we don't understand
+
+ }//switch
+
+ }
+ else { // itr == '%', second consecutive
+ sitr++;
+ }
+
+ itr++; //advance past format specifier
+ }
+ else { //skip past chars in format and in buffer
+ itr++;
+ if (use_current_char) {
+ use_current_char = false;
+ current_char = *sitr;
+ }
+ else {
+ sitr++;
+ }
+ }
+ }
+
+ return day_of_week_type(wkday); // throws bad_day_of_month exception
+ // when values are zero
+ }
+
+ //! throws bad_year if unable to parse
+ year_type
+ parse_year(std::istreambuf_iterator<charT>& sitr,
+ std::istreambuf_iterator<charT>& stream_end,
+ string_type format_str) const
+ {
+ match_results mr;
+ return parse_year(sitr, stream_end, format_str, mr);
+ }
+
+ //! throws bad_year if unable to parse
+ year_type
+ parse_year(std::istreambuf_iterator<charT>& sitr,
+ std::istreambuf_iterator<charT>& stream_end,
+ string_type format_str,
+ match_results& mr) const
+ {
+ bool use_current_char = false;
+
+ // skip leading whitespace
+ while(std::isspace(*sitr) && sitr != stream_end) { ++sitr; }
+ charT current_char = *sitr;
+
+ unsigned short year(0);
+
+ const_itr itr(format_str.begin());
+ while (itr != format_str.end() && (sitr != stream_end)) {
+ if (*itr == '%') {
+ itr++;
+ if (*itr != '%') {
+ //match_results mr;
+ switch(*itr) {
+ case 'Y':
+ {
+ // year from 4 digit string
+ year = fixed_string_to_int<short, charT>(sitr, stream_end, mr, 4);
+ break;
+ }
+ case 'y':
+ {
+ // year from 2 digit string (no century)
+ year = fixed_string_to_int<short, charT>(sitr, stream_end, mr, 2);
+ year += 2000; //make 2 digit years in this century
+ break;
+ }
+ default:
+ {} //ignore those we don't understand
+
+ }//switch
+
+ }
+ else { // itr == '%', second consecutive
+ sitr++;
+ }
+
+ itr++; //advance past format specifier
+ }
+ else { //skip past chars in format and in buffer
+ itr++;
+ if (use_current_char) {
+ use_current_char = false;
+ current_char = *sitr;
+ }
+ else {
+ sitr++;
+ }
+ }
+ }
+
+ return year_type(year); // throws bad_year exception when values are zero
+ }
+
+
+ private:
+ string_type m_format;
+ parse_tree_type m_month_short_names;
+ parse_tree_type m_month_long_names;
+ parse_tree_type m_weekday_short_names;
+ parse_tree_type m_weekday_long_names;
+
+};
+
+} } //namespace
+
+#endif
+
+
+
diff --git a/boost/boost/date_time/gregorian/conversion.hpp b/boost/boost/date_time/gregorian/conversion.hpp
new file mode 100644
index 00000000000..a5ef2bd6009
--- /dev/null
+++ b/boost/boost/date_time/gregorian/conversion.hpp
@@ -0,0 +1,73 @@
+#ifndef _GREGORIAN__CONVERSION_HPP___
+#define _GREGORIAN__CONVERSION_HPP___
+
+/* Copyright (c) 2004-2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2005/10/25 03:38:28 $
+ */
+
+#include <exception>
+#include "boost/date_time/gregorian/gregorian_types.hpp"
+#include "boost/date_time/c_time.hpp"
+#if defined(USE_DATE_TIME_PRE_1_33_FACET_IO)
+# if defined(BOOST_DATE_TIME_INCLUDE_LIMITED_HEADERS)
+# include "boost/date_time/gregorian/formatters_limited.hpp"
+# else
+# include "boost/date_time/gregorian/formatters.hpp"
+# endif // BOOST_DATE_TIME_INCLUDE_LIMITED_HEADERS
+#else
+# include <sstream>
+# include "boost/date_time/gregorian/gregorian_io.hpp"
+#endif // USE_DATE_TIME_PRE_1_33_FACET_IO
+
+namespace boost {
+
+namespace gregorian {
+
+
+ //! Converts a date to a tm struct. Throws out_of_range exception if date is a special value
+ inline
+ std::tm to_tm(const date& d)
+ {
+ if(d.is_pos_infinity() || d.is_neg_infinity() || d.is_not_a_date()){
+#if defined(USE_DATE_TIME_PRE_1_33_FACET_IO)
+ std::string s("tm unable to handle date value of " + to_simple_string(d));
+ throw std::out_of_range(s);
+#else
+ std::stringstream ss;
+ ss << "tm unable to handle date value of " << d;
+ throw std::out_of_range(ss.str());
+#endif // USE_DATE_TIME_PRE_1_33_FACET_IO
+ }
+ std::tm datetm;
+ boost::gregorian::date::ymd_type ymd = d.year_month_day();
+ datetm.tm_year = ymd.year-1900;
+ datetm.tm_mon = ymd.month-1;
+ datetm.tm_mday = ymd.day;
+ datetm.tm_wday = d.day_of_week();
+ datetm.tm_yday = d.day_of_year()-1;
+ datetm.tm_hour = datetm.tm_min = datetm.tm_sec = 0;
+ datetm.tm_isdst = -1; // negative because not enough info to set tm_isdst
+ return datetm;
+ }
+
+ //! Converts a tm structure into a date dropping the any time values.
+ inline
+ date date_from_tm(const std::tm& datetm)
+ {
+ return date(static_cast<unsigned short>(datetm.tm_year+1900),
+ static_cast<unsigned short>(datetm.tm_mon+1),
+ static_cast<unsigned short>(datetm.tm_mday));
+ }
+
+
+} } //namespace boost::gregorian
+
+
+
+
+#endif
+
diff --git a/boost/boost/date_time/gregorian/formatters.hpp b/boost/boost/date_time/gregorian/formatters.hpp
new file mode 100644
index 00000000000..b30667d3ded
--- /dev/null
+++ b/boost/boost/date_time/gregorian/formatters.hpp
@@ -0,0 +1,162 @@
+#ifndef GREGORIAN_FORMATTERS_HPP___
+#define GREGORIAN_FORMATTERS_HPP___
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2005/01/30 20:58:52 $
+ */
+
+#include "boost/date_time/compiler_config.hpp"
+#include "boost/date_time/gregorian/gregorian_types.hpp"
+#if defined(BOOST_DATE_TIME_INCLUDE_LIMITED_HEADERS)
+#include "boost/date_time/date_formatting_limited.hpp"
+#else
+#include "boost/date_time/date_formatting.hpp"
+#endif
+#include "boost/date_time/iso_format.hpp"
+#include "boost/date_time/date_format_simple.hpp"
+
+/* NOTE: "to_*_string" code for older compilers, ones that define
+ * BOOST_DATE_TIME_INCLUDE_LIMITED_HEADERS, is located in
+ * formatters_limited.hpp
+ */
+
+namespace boost {
+namespace gregorian {
+
+ // wrapper function for to_simple_(w)string(date)
+ template<class charT>
+ inline
+ std::basic_string<charT> to_simple_string_type(const date& d) {
+ return date_time::date_formatter<date,date_time::simple_format<charT>,charT>::date_to_string(d);
+ }
+ //! To YYYY-mmm-DD string where mmm 3 char month name. Example: 2002-Jan-01
+ /*!\ingroup date_format
+ */
+ inline std::string to_simple_string(const date& d) {
+ return to_simple_string_type<char>(d);
+ }
+
+
+ // wrapper function for to_simple_(w)string(date_period)
+ template<class charT>
+ inline std::basic_string<charT> to_simple_string_type(const date_period& d) {
+ typedef std::basic_string<charT> string_type;
+ charT b = '[', m = '/', e=']';
+
+ string_type d1(date_time::date_formatter<date,date_time::simple_format<charT>,charT>::date_to_string(d.begin()));
+ string_type d2(date_time::date_formatter<date,date_time::simple_format<charT>,charT>::date_to_string(d.last()));
+ return string_type(b + d1 + m + d2 + e);
+ }
+ //! Convert date period to simple string. Example: [2002-Jan-01/2002-Jan-02]
+ /*!\ingroup date_format
+ */
+ inline std::string to_simple_string(const date_period& d) {
+ return to_simple_string_type<char>(d);
+ }
+
+ // wrapper function for to_iso_(w)string(date_period)
+ template<class charT>
+ inline std::basic_string<charT> to_iso_string_type(const date_period& d) {
+ charT sep = '/';
+ std::basic_string<charT> s(date_time::date_formatter<date,date_time::iso_format<charT>,charT>::date_to_string(d.begin()));
+ return s + sep + date_time::date_formatter<date,date_time::iso_format<charT>,charT>::date_to_string(d.last());
+ }
+ //! Date period to iso standard format CCYYMMDD/CCYYMMDD. Example: 20021225/20021231
+ /*!\ingroup date_format
+ */
+ inline std::string to_iso_string(const date_period& d) {
+ return to_iso_string_type<char>(d);
+ }
+
+
+ // wrapper function for to_iso_extended_(w)string(date)
+ template<class charT>
+ inline std::basic_string<charT> to_iso_extended_string_type(const date& d) {
+ return date_time::date_formatter<date,date_time::iso_extended_format<charT>,charT>::date_to_string(d);
+ }
+ //! Convert to iso extended format string CCYY-MM-DD. Example 2002-12-31
+ /*!\ingroup date_format
+ */
+ inline std::string to_iso_extended_string(const date& d) {
+ return to_iso_extended_string_type<char>(d);
+ }
+
+ // wrapper function for to_iso_(w)string(date)
+ template<class charT>
+ inline std::basic_string<charT> to_iso_string_type(const date& d) {
+ return date_time::date_formatter<date,date_time::iso_format<charT>,charT>::date_to_string(d);
+ }
+ //! Convert to iso standard string YYYYMMDD. Example: 20021231
+ /*!\ingroup date_format
+ */
+ inline std::string to_iso_string(const date& d) {
+ return to_iso_string_type<char>(d);
+ }
+
+
+
+
+ // wrapper function for to_sql_(w)string(date)
+ template<class charT>
+ inline std::basic_string<charT> to_sql_string_type(const date& d)
+ {
+ date::ymd_type ymd = d.year_month_day();
+ std::basic_ostringstream<charT> ss;
+ ss << ymd.year << "-"
+ << std::setw(2) << std::setfill(ss.widen('0'))
+ << ymd.month.as_number() //solves problem with gcc 3.1 hanging
+ << "-"
+ << std::setw(2) << std::setfill(ss.widen('0'))
+ << ymd.day;
+ return ss.str();
+ }
+ inline std::string to_sql_string(const date& d) {
+ return to_sql_string_type<char>(d);
+ }
+
+
+#if !defined(BOOST_NO_STD_WSTRING)
+ //! Convert date period to simple string. Example: [2002-Jan-01/2002-Jan-02]
+ /*!\ingroup date_format
+ */
+ inline std::wstring to_simple_wstring(const date_period& d) {
+ return to_simple_string_type<wchar_t>(d);
+ }
+ //! To YYYY-mmm-DD string where mmm 3 char month name. Example: 2002-Jan-01
+ /*!\ingroup date_format
+ */
+ inline std::wstring to_simple_wstring(const date& d) {
+ return to_simple_string_type<wchar_t>(d);
+ }
+ //! Date period to iso standard format CCYYMMDD/CCYYMMDD. Example: 20021225/20021231
+ /*!\ingroup date_format
+ */
+ inline std::wstring to_iso_wstring(const date_period& d) {
+ return to_iso_string_type<wchar_t>(d);
+ }
+ //! Convert to iso extended format string CCYY-MM-DD. Example 2002-12-31
+ /*!\ingroup date_format
+ */
+ inline std::wstring to_iso_extended_wstring(const date& d) {
+ return to_iso_extended_string_type<wchar_t>(d);
+ }
+ //! Convert to iso standard string YYYYMMDD. Example: 20021231
+ /*!\ingroup date_format
+ */
+ inline std::wstring to_iso_wstring(const date& d) {
+ return to_iso_string_type<wchar_t>(d);
+ }
+ inline std::wstring to_sql_wstring(const date& d) {
+ return to_sql_string_type<wchar_t>(d);
+ }
+#endif // BOOST_NO_STD_WSTRING
+
+} } //namespace gregorian
+
+
+#endif
+
diff --git a/boost/boost/date_time/gregorian/formatters_limited.hpp b/boost/boost/date_time/gregorian/formatters_limited.hpp
new file mode 100644
index 00000000000..d75ee2a191b
--- /dev/null
+++ b/boost/boost/date_time/gregorian/formatters_limited.hpp
@@ -0,0 +1,81 @@
+#ifndef GREGORIAN_FORMATTERS_LIMITED_HPP___
+#define GREGORIAN_FORMATTERS_LIMITED_HPP___
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2005/01/30 20:58:52 $
+ */
+
+#include "boost/date_time/gregorian/gregorian_types.hpp"
+#include "boost/date_time/date_formatting_limited.hpp"
+#include "boost/date_time/iso_format.hpp"
+#include "boost/date_time/date_format_simple.hpp"
+#include "boost/date_time/compiler_config.hpp"
+
+namespace boost {
+namespace gregorian {
+
+ //! To YYYY-mmm-DD string where mmm 3 char month name. Example: 2002-Jan-01
+ /*!\ingroup date_format
+ */
+ inline std::string to_simple_string(const date& d) {
+ return date_time::date_formatter<date,date_time::simple_format<char> >::date_to_string(d);
+ }
+
+ //! Convert date period to simple string. Example: [2002-Jan-01/2002-Jan-02]
+ /*!\ingroup date_format
+ */
+ inline std::string to_simple_string(const date_period& d) {
+ std::string s("[");
+ std::string d1(date_time::date_formatter<date,date_time::simple_format<char> >::date_to_string(d.begin()));
+ std::string d2(date_time::date_formatter<date,date_time::simple_format<char> >::date_to_string(d.last()));
+ return std::string("[" + d1 + "/" + d2 + "]");
+ }
+
+ //! Date period to iso standard format CCYYMMDD/CCYYMMDD. Example: 20021225/20021231
+ /*!\ingroup date_format
+ */
+ inline std::string to_iso_string(const date_period& d) {
+ std::string s(date_time::date_formatter<date,date_time::iso_format<char> >::date_to_string(d.begin()));
+ return s + "/" + date_time::date_formatter<date,date_time::iso_format<char> >::date_to_string(d.last());
+ }
+
+
+ //! Convert to iso extended format string CCYY-MM-DD. Example 2002-12-31
+ /*!\ingroup date_format
+ */
+ inline std::string to_iso_extended_string(const date& d) {
+ return date_time::date_formatter<date,date_time::iso_extended_format<char> >::date_to_string(d);
+ }
+
+ //! Convert to iso standard string YYYYMMDD. Example: 20021231
+ /*!\ingroup date_format
+ */
+ inline std::string to_iso_string(const date& d) {
+ return date_time::date_formatter<date,date_time::iso_format<char> >::date_to_string(d);
+ }
+
+
+
+ inline std::string to_sql_string(const date& d)
+ {
+ date::ymd_type ymd = d.year_month_day();
+ std::ostringstream ss;
+ ss << ymd.year << "-"
+ << std::setw(2) << std::setfill('0')
+ << ymd.month.as_number() //solves problem with gcc 3.1 hanging
+ << "-"
+ << std::setw(2) << std::setfill('0')
+ << ymd.day;
+ return ss.str();
+ }
+
+
+} } //namespace gregorian
+
+
+#endif
+
diff --git a/boost/boost/date_time/gregorian/greg_calendar.hpp b/boost/boost/date_time/gregorian/greg_calendar.hpp
new file mode 100644
index 00000000000..19c624cf15e
--- /dev/null
+++ b/boost/boost/date_time/gregorian/greg_calendar.hpp
@@ -0,0 +1,47 @@
+#ifndef GREGORIAN_GREGORIAN_CALENDAR_HPP__
+#define GREGORIAN_GREGORIAN_CALENDAR_HPP__
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland
+ * $Date: 2003/11/23 02:27:09 $
+ */
+
+#include "boost/date_time/gregorian/greg_weekday.hpp"
+#include "boost/date_time/gregorian/greg_day_of_year.hpp"
+#include "boost/date_time/gregorian_calendar.hpp"
+#include "boost/date_time/gregorian/greg_ymd.hpp"
+#include "boost/date_time/int_adapter.hpp"
+
+namespace boost {
+namespace gregorian {
+
+ //!An internal date representation that includes infinities, not a date
+ typedef date_time::int_adapter<unsigned long> fancy_date_rep;
+
+ //! Gregorian calendar for this implementation, hard work in the base
+ class gregorian_calendar :
+ public date_time::gregorian_calendar_base<greg_year_month_day, fancy_date_rep::int_type> {
+ public:
+ //! Type to hold a weekday (eg: Sunday, Monday,...)
+ typedef greg_weekday day_of_week_type;
+ //! Counter type from 1 to 366 for gregorian dates.
+ typedef greg_day_of_year_rep day_of_year_type;
+ //! Internal date representation that handles infinity, not a date
+ typedef fancy_date_rep date_rep_type;
+ //! Date rep implements the traits stuff as well
+ typedef fancy_date_rep date_traits_type;
+
+
+ private:
+ };
+
+} } //namespace gregorian
+
+
+
+
+#endif
+
diff --git a/boost/boost/date_time/gregorian/greg_date.hpp b/boost/boost/date_time/gregorian/greg_date.hpp
new file mode 100644
index 00000000000..2ac2d5fe9cb
--- /dev/null
+++ b/boost/boost/date_time/gregorian/greg_date.hpp
@@ -0,0 +1,135 @@
+#ifndef GREG_DATE_HPP___
+#define GREG_DATE_HPP___
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland
+ * $Date: 2004/09/10 23:09:50 $
+ */
+
+#include "boost/date_time/date.hpp"
+#include "boost/date_time/special_defs.hpp"
+#include "boost/date_time/gregorian/greg_calendar.hpp"
+#include "boost/date_time/gregorian/greg_duration.hpp"
+
+namespace boost {
+namespace gregorian {
+
+ //bring special enum values into the namespace
+ using date_time::special_values;
+ using date_time::not_special;
+ using date_time::neg_infin;
+ using date_time::pos_infin;
+ using date_time::not_a_date_time;
+ using date_time::max_date_time;
+ using date_time::min_date_time;
+
+ //! A date type based on gregorian_calendar
+ /*! This class is the primary interface for programming with
+ greogorian dates. The is a lightweight type that can be
+ freely passed by value. All comparison operators are
+ supported.
+ \ingroup date_basics
+ */
+ class date : public date_time::date<date, gregorian_calendar, date_duration>
+ {
+ public:
+ typedef gregorian_calendar::year_type year_type;
+ typedef gregorian_calendar::month_type month_type;
+ typedef gregorian_calendar::day_type day_type;
+ typedef gregorian_calendar::day_of_year_type day_of_year_type;
+ typedef gregorian_calendar::ymd_type ymd_type;
+ typedef gregorian_calendar::date_rep_type date_rep_type;
+ typedef gregorian_calendar::date_int_type date_int_type;
+ typedef date_duration duration_type;
+#if !defined(DATE_TIME_NO_DEFAULT_CONSTRUCTOR)
+ //! Default constructor constructs with not_a_date_time
+ date():
+ date_time::date<date, gregorian_calendar, date_duration>(date_rep_type::from_special(not_a_date_time))
+ {}
+#endif // DATE_TIME_NO_DEFAULT_CONSTRUCTOR
+ //! Main constructor with year, month, day
+ date(year_type y, month_type m, day_type d)
+ : date_time::date<date, gregorian_calendar, date_duration>(y, m, d)
+ {
+ if (gregorian_calendar::end_of_month_day(y, m) < d) {
+ throw bad_day_of_month(std::string("Day of month is not valid for year"));
+ }
+ }
+ //! Constructor from a ymd_type structure
+ explicit date(const ymd_type& ymd)
+ : date_time::date<date, gregorian_calendar, date_duration>(ymd)
+ {}
+ //! Needed copy constructor
+ explicit date(const date_int_type& rhs):
+ date_time::date<date,gregorian_calendar, date_duration>(rhs)
+ {}
+ //! Needed copy constructor
+ explicit date(date_rep_type rhs):
+ date_time::date<date,gregorian_calendar, date_duration>(rhs)
+ {}
+ //! Constructor for infinities, not a date, max and min date
+ explicit date(special_values sv):
+ date_time::date<date, gregorian_calendar, date_duration>(date_rep_type::from_special(sv))
+ {
+ if (sv == min_date_time)
+ {
+ *this = date(1400, 1, 1);
+ }
+ if (sv == max_date_time)
+ {
+ *this = date(9999, 12, 31);
+ }
+
+ }
+ //!Return the Julian Day number for the date.
+ date_int_type julian_day() const
+ {
+ ymd_type ymd = year_month_day();
+ return gregorian_calendar::julian_day_number(ymd);
+ }
+ //!Return the day of year 1..365 or 1..366 (for leap year)
+ day_of_year_type day_of_year() const
+ {
+ date start_of_year(year(), 1, 1);
+ unsigned short doy = static_cast<unsigned short>((*this-start_of_year).days() + 1);
+ return day_of_year_type(doy);
+ }
+ //!Return the Modified Julian Day number for the date.
+ long modjulian_day() const
+ {
+ ymd_type ymd = year_month_day();
+ return gregorian_calendar::modjulian_day_number(ymd);
+ }
+ //!Return the iso 8601 week number 1..53
+ int week_number() const
+ {
+ ymd_type ymd = year_month_day();
+ return gregorian_calendar::week_number(ymd);
+ }
+ //! Return the day number from the calendar
+ date_int_type day_number() const
+ {
+ return days_;
+ }
+ //! Return the last day of the current month
+ date end_of_month() const
+ {
+ ymd_type ymd = year_month_day();
+ short eom_day = gregorian_calendar::end_of_month_day(ymd.year, ymd.month);
+ return date(ymd.year, ymd.month, eom_day);
+ }
+
+ private:
+
+ };
+
+
+
+} } //namespace gregorian
+
+
+
+#endif
diff --git a/boost/boost/date_time/gregorian/greg_day.hpp b/boost/boost/date_time/gregorian/greg_day.hpp
new file mode 100644
index 00000000000..f204deb9319
--- /dev/null
+++ b/boost/boost/date_time/gregorian/greg_day.hpp
@@ -0,0 +1,57 @@
+#ifndef GREG_DAY_HPP___
+#define GREG_DAY_HPP___
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland
+ * $Date: 2003/11/23 02:27:09 $
+ */
+
+#include "boost/date_time/constrained_value.hpp"
+#include <stdexcept>
+#include <string>
+
+namespace boost {
+namespace gregorian {
+
+ //! Exception type for gregorian day of month (1..31)
+ struct bad_day_of_month : public std::out_of_range
+ {
+ bad_day_of_month() :
+ std::out_of_range(std::string("Day of month value is out of range 1..31"))
+ {}
+ //! Allow other classes to throw with unique string for bad day like Feb 29
+ bad_day_of_month(const std::string& s) :
+ std::out_of_range(s)
+ {}
+ };
+ //! Policy class that declares error handling and day of month ranges
+ typedef CV::simple_exception_policy<unsigned short, 1, 31, bad_day_of_month> greg_day_policies;
+
+ //! Generated represetation for gregorian day of month
+ typedef CV::constrained_value<greg_day_policies> greg_day_rep;
+
+ //! Represent a day of the month (range 1 - 31)
+ /*! This small class allows for simple conversion an integer value into
+ a day of the month for a standard gregorian calendar. The type
+ is automatically range checked so values outside of the range 1-31
+ will cause a bad_day_of_month exception
+ */
+ class greg_day : public greg_day_rep {
+ public:
+ greg_day(unsigned short day_of_month) : greg_day_rep(day_of_month) {}
+ unsigned short as_number() const {return value_;}
+ operator unsigned short() const {return value_;}
+ private:
+
+ };
+
+
+
+} } //namespace gregorian
+
+
+
+#endif
diff --git a/boost/boost/date_time/gregorian/greg_day_of_year.hpp b/boost/boost/date_time/gregorian/greg_day_of_year.hpp
new file mode 100644
index 00000000000..2ba15927676
--- /dev/null
+++ b/boost/boost/date_time/gregorian/greg_day_of_year.hpp
@@ -0,0 +1,38 @@
+#ifndef GREG_DAY_OF_YEAR_HPP___
+#define GREG_DAY_OF_YEAR_HPP___
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland
+ * $Date: 2003/11/23 02:27:09 $
+ */
+
+#include "boost/date_time/constrained_value.hpp"
+#include <stdexcept>
+#include <string>
+
+namespace boost {
+namespace gregorian {
+
+ //! Exception type for day of year (1..366)
+ struct bad_day_of_year : public std::out_of_range
+ {
+ bad_day_of_year() :
+ std::out_of_range(std::string("Day of year value is out of range 1..366"))
+ {}
+ };
+
+ //! A day of the year range (1..366)
+ typedef CV::simple_exception_policy<unsigned short,1,366,bad_day_of_year> greg_day_of_year_policies;
+
+ //! Define a range representation type for the day of the year 1..366
+ typedef CV::constrained_value<greg_day_of_year_policies> greg_day_of_year_rep;
+
+
+} } //namespace gregorian
+
+
+
+#endif
diff --git a/boost/boost/date_time/gregorian/greg_duration.hpp b/boost/boost/date_time/gregorian/greg_duration.hpp
new file mode 100644
index 00000000000..a2dac665d48
--- /dev/null
+++ b/boost/boost/date_time/gregorian/greg_duration.hpp
@@ -0,0 +1,38 @@
+#ifndef GREG_DURATION_HPP___
+#define GREG_DURATION_HPP___
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2004/06/30 00:01:20 $
+ */
+
+#include "boost/date_time/date_duration.hpp"
+#if defined(BOOST_DATE_TIME_OPTIONAL_GREGORIAN_TYPES)
+#include "boost/date_time/date_duration_types.hpp"
+#endif
+#include "boost/date_time/int_adapter.hpp"
+
+
+namespace boost {
+namespace gregorian {
+
+
+ //!An internal date representation that includes infinities, not a date
+ typedef boost::date_time::duration_traits_adapted date_duration_rep;
+
+ //! Durations in days for gregorian system
+ /*! \ingroup date_basics
+ */
+ typedef date_time::date_duration<date_duration_rep> date_duration;
+
+ //! Shorthand for date_duration
+ typedef date_duration days;
+
+} } //namespace gregorian
+
+
+
+#endif
diff --git a/boost/boost/date_time/gregorian/greg_duration_types.hpp b/boost/boost/date_time/gregorian/greg_duration_types.hpp
new file mode 100644
index 00000000000..efe3afa5c71
--- /dev/null
+++ b/boost/boost/date_time/gregorian/greg_duration_types.hpp
@@ -0,0 +1,34 @@
+#ifndef GREG_DURATION_TYPES_HPP___
+#define GREG_DURATION_TYPES_HPP___
+
+/* Copyright (c) 2004 CrystalClear Software, Inc.
+ * Subject to Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2004/06/30 00:27:35 $
+ */
+
+
+#include "boost/date_time/gregorian/greg_date.hpp"
+#include "boost/date_time/int_adapter.hpp"
+#include "boost/date_time/adjust_functors.hpp"
+#include "boost/date_time/date_duration.hpp"
+#include "boost/date_time/date_duration_types.hpp"
+
+namespace boost {
+namespace gregorian {
+
+ //! config struct for additional duration types (ie months_duration<> & years_duration<>)
+ struct greg_durations_config {
+ typedef date date_type;
+ typedef date_time::int_adapter<int> int_rep;
+ typedef date_time::month_functor<date_type> month_adjustor_type;
+ };
+
+ typedef date_time::months_duration<greg_durations_config> months;
+ typedef date_time::years_duration<greg_durations_config> years;
+ typedef date_time::weeks_duration<date_time::duration_traits_adapted> weeks;
+
+}} // namespace boost::gregorian
+
+#endif // GREG_DURATION_TYPES_HPP___
diff --git a/boost/boost/date_time/gregorian/greg_facet.hpp b/boost/boost/date_time/gregorian/greg_facet.hpp
new file mode 100644
index 00000000000..18109f63aec
--- /dev/null
+++ b/boost/boost/date_time/gregorian/greg_facet.hpp
@@ -0,0 +1,351 @@
+#ifndef GREGORIAN_FACET_HPP___
+#define GREGORIAN_FACET_HPP___
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2005/04/12 13:16:24 $
+ */
+
+#include "boost/date_time/gregorian/gregorian_types.hpp"
+#include "boost/date_time/date_formatting_locales.hpp" // sets BOOST_DATE_TIME_NO_LOCALE
+#include "boost/date_time/gregorian/parsers.hpp"
+#include <string>
+#include <exception>
+
+//This file is basically commented out if locales are not supported
+#ifndef BOOST_DATE_TIME_NO_LOCALE
+
+
+namespace boost {
+namespace gregorian {
+
+ //! Configuration of the output facet template
+ struct greg_facet_config
+ {
+ typedef boost::gregorian::greg_month month_type;
+ typedef boost::date_time::special_values special_value_enum;
+ typedef boost::gregorian::months_of_year month_enum;
+ typedef boost::date_time::weekdays weekday_enum;
+ };
+
+#if defined(USE_DATE_TIME_PRE_1_33_FACET_IO)
+ //! Create the base facet type for gregorian::date
+ typedef boost::date_time::date_names_put<greg_facet_config> greg_base_facet;
+
+ //! ostream operator for gregorian::date
+ /*! Uses the date facet to determine various output parameters including:
+ * - string values for the month (eg: Jan, Feb, Mar) (default: English)
+ * - string values for special values (eg: not-a-date-time) (default: English)
+ * - selection of long, short strings, or numerical month representation (default: short string)
+ * - month day year order (default yyyy-mmm-dd)
+ */
+ template <class charT, class traits>
+ inline
+ std::basic_ostream<charT, traits>&
+ operator<<(std::basic_ostream<charT, traits>& os, const date& d)
+ {
+ typedef boost::date_time::date_names_put<greg_facet_config, charT> facet_def;
+ typedef boost::date_time::ostream_date_formatter<date, facet_def, charT> greg_ostream_formatter;
+ greg_ostream_formatter::date_put(d, os);
+ return os;
+ }
+
+ //! operator<< for gregorian::greg_month typically streaming: Jan, Feb, Mar...
+ /*! Uses the date facet to determine output string as well as selection of long or short strings.
+ * Default if no facet is installed is to output a 2 wide numeric value for the month
+ * eg: 01 == Jan, 02 == Feb, ... 12 == Dec.
+ */
+ template <class charT, class traits>
+ inline
+ std::basic_ostream<charT, traits>&
+ operator<<(std::basic_ostream<charT, traits>& os, const greg_month& m)
+ {
+ typedef boost::date_time::date_names_put<greg_facet_config, charT> facet_def;
+ typedef boost::date_time::ostream_month_formatter<facet_def, charT> greg_month_formatter;
+ std::locale locale = os.getloc();
+ if (std::has_facet<facet_def>(locale)) {
+ const facet_def& f = std::use_facet<facet_def>(locale);
+ greg_month_formatter::format_month(m, os, f);
+
+ }
+ else { //default to numeric
+ charT fill_char = '0';
+ os << std::setw(2) << std::setfill(fill_char) << m.as_number();
+ }
+
+ return os;
+ }
+
+ //! operator<< for gregorian::greg_weekday typically streaming: Sun, Mon, Tue, ...
+ /*! Uses the date facet to determine output string as well as selection of long or short string.
+ * Default if no facet is installed is to output a 3 char english string for the
+ * day of the week.
+ */
+ template <class charT, class traits>
+ inline
+ std::basic_ostream<charT, traits>&
+ operator<<(std::basic_ostream<charT, traits>& os, const greg_weekday& wd)
+ {
+ typedef boost::date_time::date_names_put<greg_facet_config, charT> facet_def;
+ typedef boost::date_time::ostream_weekday_formatter<greg_weekday, facet_def, charT> greg_weekday_formatter;
+ std::locale locale = os.getloc();
+ if (std::has_facet<facet_def>(locale)) {
+ const facet_def& f = std::use_facet<facet_def>(locale);
+ greg_weekday_formatter::format_weekday(wd.as_enum(), os, f, true);
+ }
+ else { //default to short English string eg: Sun, Mon, Tue, Wed...
+ os << wd.as_short_string();
+ }
+
+ return os;
+ }
+
+ //! operator<< for gregorian::date_period typical output: [2002-Jan-01/2002-Jan-31]
+ /*! Uses the date facet to determine output string as well as selection of long
+ * or short string fr dates.
+ * Default if no facet is installed is to output a 3 char english string for the
+ * day of the week.
+ */
+ template <class charT, class traits>
+ inline
+ std::basic_ostream<charT, traits>&
+ operator<<(std::basic_ostream<charT, traits>& os, const date_period& dp)
+ {
+ os << '['; //TODO: facet or manipulator for periods?
+ os << dp.begin();
+ os << '/'; //TODO: facet or manipulator for periods?
+ os << dp.last();
+ os << ']';
+ return os;
+ }
+
+ template <class charT, class traits>
+ inline
+ std::basic_ostream<charT, traits>&
+ operator<<(std::basic_ostream<charT, traits>& os, const date_duration& dd)
+ {
+ //os << dd.days();
+ os << dd.get_rep();
+ return os;
+ }
+
+ //! operator<< for gregorian::partial_date. Output: "Jan 1"
+ template <class charT, class traits>
+ inline
+ std::basic_ostream<charT, traits>&
+ operator<<(std::basic_ostream<charT, traits>& os, const partial_date& pd)
+ {
+ os << std::setw(2) << std::setfill('0') << pd.day() << ' '
+ << pd.month().as_short_string() ;
+ return os;
+ }
+
+ //! operator<< for gregorian::nth_kday_of_month. Output: "first Mon of Jun"
+ template <class charT, class traits>
+ inline
+ std::basic_ostream<charT, traits>&
+ operator<<(std::basic_ostream<charT, traits>& os,
+ const nth_kday_of_month& nkd)
+ {
+ os << nkd.nth_week_as_str() << ' '
+ << nkd.day_of_week() << " of "
+ << nkd.month().as_short_string() ;
+ return os;
+ }
+
+ //! operator<< for gregorian::first_kday_of_month. Output: "first Mon of Jun"
+ template <class charT, class traits>
+ inline
+ std::basic_ostream<charT, traits>&
+ operator<<(std::basic_ostream<charT, traits>& os,
+ const first_kday_of_month& fkd)
+ {
+ os << "first " << fkd.day_of_week() << " of "
+ << fkd.month().as_short_string() ;
+ return os;
+ }
+
+ //! operator<< for gregorian::last_kday_of_month. Output: "last Mon of Jun"
+ template <class charT, class traits>
+ inline
+ std::basic_ostream<charT, traits>&
+ operator<<(std::basic_ostream<charT, traits>& os,
+ const last_kday_of_month& lkd)
+ {
+ os << "last " << lkd.day_of_week() << " of "
+ << lkd.month().as_short_string() ;
+ return os;
+ }
+
+ //! operator<< for gregorian::first_kday_after. Output: "first Mon after"
+ template <class charT, class traits>
+ inline
+ std::basic_ostream<charT, traits>&
+ operator<<(std::basic_ostream<charT, traits>& os,
+ const first_kday_after& fka)
+ {
+ os << fka.day_of_week() << " after";
+ return os;
+ }
+
+ //! operator<< for gregorian::first_kday_before. Output: "first Mon before"
+ template <class charT, class traits>
+ inline
+ std::basic_ostream<charT, traits>&
+ operator<<(std::basic_ostream<charT, traits>& os,
+ const first_kday_before& fkb)
+ {
+ os << fkb.day_of_week() << " before";
+ return os;
+ }
+#endif // USE_DATE_TIME_PRE_1_33_FACET_IO
+ /**************** Input Streaming ******************/
+
+#if !defined(BOOST_NO_STD_ITERATOR_TRAITS)
+ //! operator>> for gregorian::date
+ template<class charT>
+ inline
+ std::basic_istream<charT>& operator>>(std::basic_istream<charT>& is, date& d)
+ {
+ std::istream_iterator<std::basic_string<charT>, charT> beg(is), eos;
+
+ typedef boost::date_time::all_date_names_put<greg_facet_config, charT> facet_def;
+ d = from_stream(beg, eos);
+ return is;
+ }
+#endif // BOOST_NO_STD_ITERATOR_TRAITS
+
+ //! operator>> for gregorian::date_duration
+ template<class charT>
+ inline
+ std::basic_istream<charT>& operator>>(std::basic_istream<charT>& is,
+ date_duration& dd)
+ {
+ long v;
+ is >> v;
+ dd = date_duration(v);
+ return is;
+ }
+
+ //! operator>> for gregorian::date_period
+ template<class charT>
+ inline
+ std::basic_istream<charT>& operator>>(std::basic_istream<charT>& is,
+ date_period& dp)
+ {
+ std::basic_string<charT> s;
+ is >> s;
+ dp = date_time::from_simple_string_type<date>(s);
+ return is;
+ }
+
+ //! generates a locale with the set of gregorian name-strings of type char*
+ BOOST_DATE_TIME_DECL std::locale generate_locale(std::locale& loc, char type);
+
+ //! Returns a pointer to a facet with a default set of names (English)
+ /* Necessary in the event an exception is thrown from op>> for
+ * weekday or month. See comments in those functions for more info */
+ BOOST_DATE_TIME_DECL boost::date_time::all_date_names_put<greg_facet_config, char>* create_facet_def(char type);
+
+#ifndef BOOST_NO_STD_WSTRING
+ //! generates a locale with the set of gregorian name-strings of type wchar_t*
+ BOOST_DATE_TIME_DECL std::locale generate_locale(std::locale& loc, wchar_t type);
+ //! Returns a pointer to a facet with a default set of names (English)
+ /* Necessary in the event an exception is thrown from op>> for
+ * weekday or month. See comments in those functions for more info */
+ BOOST_DATE_TIME_DECL boost::date_time::all_date_names_put<greg_facet_config, wchar_t>* create_facet_def(wchar_t type);
+#endif // BOOST_NO_STD_WSTRING
+
+ //! operator>> for gregorian::greg_month - throws exception if invalid month given
+ template<class charT>
+ inline
+ std::basic_istream<charT>& operator>>(std::basic_istream<charT>& is,greg_month& m)
+ {
+ typedef boost::date_time::all_date_names_put<greg_facet_config, charT> facet_def;
+
+ std::basic_string<charT> s;
+ is >> s;
+
+ if(!std::has_facet<facet_def>(is.getloc())) {
+ std::locale loc = is.getloc();
+ charT a = '\0';
+ is.imbue(generate_locale(loc, a));
+ }
+
+ short num = 0;
+
+ try{
+ const facet_def& f = std::use_facet<facet_def>(is.getloc());
+ num = date_time::find_match(f.get_short_month_names(),
+ f.get_long_month_names(),
+ (greg_month::max)(), s);
+ }
+ /* bad_cast will be thrown if the desired facet is not accessible
+ * so we can generate the facet. This has the drawback of using english
+ * names as a default. */
+ catch(std::bad_cast bc){
+ std::cout << "Month exception caught" << std::endl;
+ charT a = '\0';
+ const facet_def* f = create_facet_def(a);
+ num = date_time::find_match(f->get_short_month_names(),
+ f->get_long_month_names(),
+ (greg_month::max)(), s);
+ delete(f);
+ }
+
+ num += 1; // months numbered 1-12
+ m = greg_month(num);
+
+ return is;
+ }
+
+ //! operator>> for gregorian::greg_weekday - throws exception if invalid weekday given
+ template<class charT>
+ inline
+ std::basic_istream<charT>& operator>>(std::basic_istream<charT>& is,greg_weekday& wd)
+ {
+ typedef boost::date_time::all_date_names_put<greg_facet_config, charT> facet_def;
+
+ std::basic_string<charT> s;
+ is >> s;
+
+ if(!std::has_facet<facet_def>(is.getloc())) {
+ std::locale loc = is.getloc();
+ charT a = '\0';
+ is.imbue(generate_locale(loc, a));
+ }
+
+ short num = 0;
+ try{
+ const facet_def& f = std::use_facet<facet_def>(is.getloc());
+ num = date_time::find_match(f.get_short_weekday_names(),
+ f.get_long_weekday_names(),
+ (greg_weekday::max)(), s);
+ }
+ /* bad_cast will be thrown if the desired facet is not accessible
+ * so we can generate the facet. This has the drawback of using english
+ * names as a default. */
+ catch(std::bad_cast bc){
+ //std::cout << "Weekday exception caught" << std::endl;
+ charT a = '\0';
+ const facet_def* f = create_facet_def(a);
+ num = date_time::find_match(f->get_short_weekday_names(),
+ f->get_long_weekday_names(),
+ (greg_weekday::max)(), s);
+ delete(f);
+ }
+
+ wd = greg_weekday(num); // weekdays numbered 0-6
+ return is;
+ }
+
+} } //namespace gregorian
+
+#endif
+
+
+#endif
+
diff --git a/boost/boost/date_time/gregorian/greg_month.hpp b/boost/boost/date_time/gregorian/greg_month.hpp
new file mode 100644
index 00000000000..07720e55098
--- /dev/null
+++ b/boost/boost/date_time/gregorian/greg_month.hpp
@@ -0,0 +1,105 @@
+#ifndef GREG_MONTH_HPP___
+#define GREG_MONTH_HPP___
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2004/08/27 23:30:30 $
+ */
+
+#include "boost/date_time/constrained_value.hpp"
+#include "boost/date_time/date_defs.hpp"
+#include "boost/shared_ptr.hpp"
+#include "boost/date_time/compiler_config.hpp"
+#include <stdexcept>
+#include <string>
+#include <map>
+#include <algorithm>
+#include <cctype>
+
+namespace boost {
+namespace gregorian {
+
+ typedef date_time::months_of_year months_of_year;
+
+ //bring enum values into the namespace
+ using date_time::Jan;
+ using date_time::Feb;
+ using date_time::Mar;
+ using date_time::Apr;
+ using date_time::May;
+ using date_time::Jun;
+ using date_time::Jul;
+ using date_time::Aug;
+ using date_time::Sep;
+ using date_time::Oct;
+ using date_time::Nov;
+ using date_time::Dec;
+ using date_time::NotAMonth;
+ using date_time::NumMonths;
+
+ //! Exception thrown if a greg_month is constructed with a value out of range
+ struct bad_month : public std::out_of_range
+ {
+ bad_month() : std::out_of_range(std::string("Month number is out of range 1..12")) {}
+ };
+ //! Build a policy class for the greg_month_rep
+ typedef CV::simple_exception_policy<unsigned short, 1, 12, bad_month> greg_month_policies;
+ //! A constrained range that implements the gregorian_month rules
+ typedef CV::constrained_value<greg_month_policies> greg_month_rep;
+
+
+ //! Wrapper class to represent months in gregorian based calendar
+ class BOOST_DATE_TIME_DECL greg_month : public greg_month_rep {
+ public:
+ typedef date_time::months_of_year month_enum;
+ typedef std::map<std::string, unsigned short> month_map_type;
+ typedef boost::shared_ptr<month_map_type> month_map_ptr_type;
+ //! Construct a month from the months_of_year enumeration
+ greg_month(month_enum theMonth) :
+ greg_month_rep(static_cast<greg_month_rep::value_type>(theMonth)) {}
+ //! Construct from a short value
+ greg_month(unsigned short theMonth) : greg_month_rep(theMonth) {}
+ //! Convert the value back to a short
+ operator unsigned short() const {return value_;}
+ //! Returns month as number from 1 to 12
+ unsigned short as_number() const {return value_;}
+ month_enum as_enum() const {return static_cast<month_enum>(value_);}
+ const char* as_short_string() const;
+ const char* as_long_string() const;
+#ifndef BOOST_NO_STD_WSTRING
+ const wchar_t* as_short_wstring() const;
+ const wchar_t* as_long_wstring() const;
+#endif // BOOST_NO_STD_WSTRING
+ //! Shared pointer to a map of Month strings (Names & Abbrev) & numbers
+ static month_map_ptr_type get_month_map_ptr();
+
+ /* parameterized as_*_string functions are intended to be called
+ * from a template function: "... as_short_string(charT c='\0');" */
+ const char* as_short_string(char) const
+ {
+ return as_short_string();
+ }
+ const char* as_long_string(char) const
+ {
+ return as_long_string();
+ }
+#ifndef BOOST_NO_STD_WSTRING
+ const wchar_t* as_short_string(wchar_t) const
+ {
+ return as_short_wstring();
+ }
+ const wchar_t* as_long_string(wchar_t) const
+ {
+ return as_long_wstring();
+ }
+#endif // BOOST_NO_STD_WSTRING
+ };
+
+} } //namespace gregorian
+
+
+
+#endif
diff --git a/boost/boost/date_time/gregorian/greg_serialize.hpp b/boost/boost/date_time/gregorian/greg_serialize.hpp
new file mode 100644
index 00000000000..56a2738995e
--- /dev/null
+++ b/boost/boost/date_time/gregorian/greg_serialize.hpp
@@ -0,0 +1,489 @@
+#ifndef GREGORIAN_SERIALIZE_HPP___
+#define GREGORIAN_SERIALIZE_HPP___
+
+/* Copyright (c) 2004-2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2007/03/02 02:45:57 $
+ */
+
+#include "boost/date_time/gregorian/gregorian_types.hpp"
+#include "boost/date_time/gregorian/parsers.hpp"
+#include "boost/serialization/split_free.hpp"
+
+
+// macros to split serialize functions into save & load functions
+// An expanded version is below for gregorian::date
+// NOTE: these macros define template functions in the boost::serialization namespace.
+// They must be expanded *outside* of any namespace
+BOOST_SERIALIZATION_SPLIT_FREE(::boost::gregorian::date_duration)
+BOOST_SERIALIZATION_SPLIT_FREE(::boost::gregorian::date_duration::duration_rep)
+BOOST_SERIALIZATION_SPLIT_FREE(::boost::gregorian::date_period)
+BOOST_SERIALIZATION_SPLIT_FREE(::boost::gregorian::greg_month)
+BOOST_SERIALIZATION_SPLIT_FREE(::boost::gregorian::greg_day)
+BOOST_SERIALIZATION_SPLIT_FREE(::boost::gregorian::greg_weekday)
+BOOST_SERIALIZATION_SPLIT_FREE(::boost::gregorian::partial_date)
+BOOST_SERIALIZATION_SPLIT_FREE(::boost::gregorian::nth_kday_of_month)
+BOOST_SERIALIZATION_SPLIT_FREE(::boost::gregorian::first_kday_of_month)
+BOOST_SERIALIZATION_SPLIT_FREE(::boost::gregorian::last_kday_of_month)
+BOOST_SERIALIZATION_SPLIT_FREE(::boost::gregorian::first_kday_before)
+BOOST_SERIALIZATION_SPLIT_FREE(::boost::gregorian::first_kday_after)
+
+namespace boost {
+namespace serialization {
+
+/*! Method that does serialization for gregorian::date -- splits to load/save
+ */
+template<class Archive>
+inline void serialize(Archive & ar,
+ ::boost::gregorian::date & d,
+ const unsigned int file_version)
+{
+ split_free(ar, d, file_version);
+}
+
+//! Function to save gregorian::date objects using serialization lib
+/*! Dates are serialized into a string for transport and storage.
+ * While it would be more efficient to store the internal
+ * integer used to manipulate the dates, it is an unstable solution.
+ */
+template<class Archive>
+void save(Archive & ar,
+ const ::boost::gregorian::date & d,
+ unsigned int /* version */)
+{
+ std::string ds = to_iso_string(d);
+ ar & make_nvp("date", ds);
+}
+
+//! Function to load gregorian::date objects using serialization lib
+/*! Dates are serialized into a string for transport and storage.
+ * While it would be more efficient to store the internal
+ * integer used to manipulate the dates, it is an unstable solution.
+ */
+template<class Archive>
+void load(Archive & ar,
+ ::boost::gregorian::date & d,
+ unsigned int /*version*/)
+{
+ std::string ds;
+ ar & make_nvp("date", ds);
+ try{
+ d = ::boost::gregorian::from_undelimited_string(ds);
+ }catch(bad_lexical_cast be) {
+ gregorian::special_values sv = gregorian::special_value_from_string(ds);
+ if(sv == gregorian::not_special) {
+ throw(be); // no match found, rethrow original exception
+ }
+ else {
+ d = gregorian::date(sv);
+ }
+ }
+}
+
+
+//!override needed b/c no default constructor
+template<class Archive>
+inline void load_construct_data(Archive & ar,
+ ::boost::gregorian::date* dp,
+ const unsigned int /*file_version*/)
+{
+ // retrieve data from archive required to construct new
+ // invoke inplace constructor to initialize instance of date
+ ::new(dp) ::boost::gregorian::date(::boost::gregorian::not_a_date_time);
+}
+
+/**** date_duration ****/
+
+//! Function to save gregorian::date_duration objects using serialization lib
+template<class Archive>
+void save(Archive & ar, const gregorian::date_duration & dd,
+ unsigned int /*version*/)
+{
+ typename gregorian::date_duration::duration_rep dr = dd.get_rep();
+ ar & make_nvp("date_duration", dr);
+}
+//! Function to load gregorian::date_duration objects using serialization lib
+template<class Archive>
+void load(Archive & ar, gregorian::date_duration & dd, unsigned int /*version*/)
+{
+ typename gregorian::date_duration::duration_rep dr(0);
+ ar & make_nvp("date_duration", dr);
+ dd = gregorian::date_duration(dr);
+}
+//!override needed b/c no default constructor
+template<class Archive>
+inline void load_construct_data(Archive & ar, gregorian::date_duration* dd,
+ const unsigned int /*file_version*/)
+{
+ ::new(dd) gregorian::date_duration(gregorian::not_a_date_time);
+}
+
+/**** date_duration::duration_rep (most likely int_adapter) ****/
+
+//! helper unction to save date_duration objects using serialization lib
+template<class Archive>
+void save(Archive & ar, const gregorian::date_duration::duration_rep & dr,
+ unsigned int /*version*/)
+{
+ typename gregorian::date_duration::duration_rep::int_type it = dr.as_number();
+ ar & make_nvp("date_duration_duration_rep", it);
+}
+//! helper function to load date_duration objects using serialization lib
+template<class Archive>
+void load(Archive & ar, gregorian::date_duration::duration_rep & dr, unsigned int /*version*/)
+{
+ typename gregorian::date_duration::duration_rep::int_type it(0);
+ ar & make_nvp("date_duration_duration_rep", it);
+ dr = gregorian::date_duration::duration_rep::int_type(it);
+}
+//!override needed b/c no default constructor
+template<class Archive>
+inline void load_construct_data(Archive & ar, gregorian::date_duration::duration_rep* dr,
+ const unsigned int /*file_version*/)
+{
+ ::new(dr) gregorian::date_duration::duration_rep(0);
+}
+
+/**** date_period ****/
+
+//! Function to save gregorian::date_period objects using serialization lib
+/*! date_period objects are broken down into 2 parts for serialization:
+ * the begining date object and the end date object
+ */
+template<class Archive>
+void save(Archive & ar, const gregorian::date_period& dp,
+ unsigned int /*version*/)
+{
+ gregorian::date d1 = dp.begin();
+ gregorian::date d2 = dp.end();
+ ar & make_nvp("date_period_begin_date", d1);
+ ar & make_nvp("date_period_end_date", d2);
+}
+//! Function to load gregorian::date_period objects using serialization lib
+/*! date_period objects are broken down into 2 parts for serialization:
+ * the begining date object and the end date object
+ */
+template<class Archive>
+void load(Archive & ar, gregorian::date_period& dp, unsigned int /*version*/)
+{
+ gregorian::date d1(gregorian::not_a_date_time);
+ gregorian::date d2(gregorian::not_a_date_time);
+ ar & make_nvp("date_period_begin_date", d1);
+ ar & make_nvp("date_period_end_date", d2);
+ dp = gregorian::date_period(d1,d2);
+}
+//!override needed b/c no default constructor
+template<class Archive>
+inline void load_construct_data(Archive & ar, gregorian::date_period* dp,
+ const unsigned int /*file_version*/)
+{
+ gregorian::date d(gregorian::not_a_date_time);
+ gregorian::date_duration dd(1);
+ ::new(dp) gregorian::date_period(d,dd);
+}
+
+/**** greg_month ****/
+
+//! Function to save gregorian::greg_month objects using serialization lib
+template<class Archive>
+void save(Archive & ar, const gregorian::greg_month& gm,
+ unsigned int /*version*/)
+{
+ unsigned short us = gm.as_number();
+ ar & make_nvp("greg_month", us);
+}
+//! Function to load gregorian::greg_month objects using serialization lib
+template<class Archive>
+void load(Archive & ar, gregorian::greg_month& gm, unsigned int /*version*/)
+{
+ unsigned short us;
+ ar & make_nvp("greg_month", us);
+ gm = gregorian::greg_month(us);
+}
+//!override needed b/c no default constructor
+template<class Archive>
+inline void load_construct_data(Archive & ar, gregorian::greg_month* gm,
+ const unsigned int /*file_version*/)
+{
+ ::new(gm) gregorian::greg_month(1);
+}
+
+/**** greg_day ****/
+
+//! Function to save gregorian::greg_day objects using serialization lib
+template<class Archive>
+void save(Archive & ar, const gregorian::greg_day& gd,
+ unsigned int /*version*/)
+{
+ unsigned short us = gd.as_number();
+ ar & make_nvp("greg_day", us);
+}
+//! Function to load gregorian::greg_day objects using serialization lib
+template<class Archive>
+void load(Archive & ar, gregorian::greg_day& gd, unsigned int /*version*/)
+{
+ unsigned short us;
+ ar & make_nvp("greg_day", us);
+ gd = gregorian::greg_day(us);
+}
+//!override needed b/c no default constructor
+template<class Archive>
+inline void load_construct_data(Archive & ar, gregorian::greg_day* gd,
+ const unsigned int /*file_version*/)
+{
+ ::new(gd) gregorian::greg_day(1);
+}
+
+/**** greg_weekday ****/
+
+//! Function to save gregorian::greg_weekday objects using serialization lib
+template<class Archive>
+void save(Archive & ar, const gregorian::greg_weekday& gd,
+ unsigned int /*version*/)
+{
+ unsigned short us = gd.as_number();
+ ar & make_nvp("greg_weekday", us);
+}
+//! Function to load gregorian::greg_weekday objects using serialization lib
+template<class Archive>
+void load(Archive & ar, gregorian::greg_weekday& gd, unsigned int /*version*/)
+{
+ unsigned short us;
+ ar & make_nvp("greg_weekday", us);
+ gd = gregorian::greg_weekday(us);
+}
+//!override needed b/c no default constructor
+template<class Archive>
+inline void load_construct_data(Archive & ar, gregorian::greg_weekday* gd,
+ const unsigned int /*file_version*/)
+{
+ ::new(gd) gregorian::greg_weekday(1);
+}
+
+/**** date_generators ****/
+
+/**** partial_date ****/
+
+//! Function to save gregorian::partial_date objects using serialization lib
+/*! partial_date objects are broken down into 2 parts for serialization:
+ * the day (typically greg_day) and month (typically greg_month) objects
+ */
+template<class Archive>
+void save(Archive & ar, const gregorian::partial_date& pd,
+ unsigned int /*version*/)
+{
+ gregorian::greg_day gd(pd.day());
+ gregorian::greg_month gm(pd.month().as_number());
+ ar & make_nvp("partial_date_day", gd);
+ ar & make_nvp("partial_date_month", gm);
+}
+//! Function to load gregorian::partial_date objects using serialization lib
+/*! partial_date objects are broken down into 2 parts for serialization:
+ * the day (greg_day) and month (greg_month) objects
+ */
+template<class Archive>
+void load(Archive & ar, gregorian::partial_date& pd, unsigned int /*version*/)
+{
+ gregorian::greg_day gd(1);
+ gregorian::greg_month gm(1);
+ ar & make_nvp("partial_date_day", gd);
+ ar & make_nvp("partial_date_month", gm);
+ pd = gregorian::partial_date(gd,gm);
+}
+//!override needed b/c no default constructor
+template<class Archive>
+inline void load_construct_data(Archive & ar, gregorian::partial_date* pd,
+ const unsigned int /*file_version*/)
+{
+ gregorian::greg_month gm(1);
+ gregorian::greg_day gd(1);
+ ::new(pd) gregorian::partial_date(gd,gm);
+}
+
+/**** nth_kday_of_month ****/
+
+//! Function to save nth_day_of_the_week_in_month objects using serialization lib
+/*! nth_day_of_the_week_in_month objects are broken down into 3 parts for
+ * serialization: the week number, the day of the week, and the month
+ */
+template<class Archive>
+void save(Archive & ar, const gregorian::nth_kday_of_month& nkd,
+ unsigned int /*version*/)
+{
+ typename gregorian::nth_kday_of_month::week_num wn(nkd.nth_week());
+ typename gregorian::nth_kday_of_month::day_of_week_type d(nkd.day_of_week().as_number());
+ typename gregorian::nth_kday_of_month::month_type m(nkd.month().as_number());
+ ar & make_nvp("nth_kday_of_month_week_num", wn);
+ ar & make_nvp("nth_kday_of_month_day_of_week", d);
+ ar & make_nvp("nth_kday_of_month_month", m);
+}
+//! Function to load nth_day_of_the_week_in_month objects using serialization lib
+/*! nth_day_of_the_week_in_month objects are broken down into 3 parts for
+ * serialization: the week number, the day of the week, and the month
+ */
+template<class Archive>
+void load(Archive & ar, gregorian::nth_kday_of_month& nkd, unsigned int /*version*/)
+{
+ typename gregorian::nth_kday_of_month::week_num wn(gregorian::nth_kday_of_month::first);
+ typename gregorian::nth_kday_of_month::day_of_week_type d(gregorian::Monday);
+ typename gregorian::nth_kday_of_month::month_type m(gregorian::Jan);
+ ar & make_nvp("nth_kday_of_month_week_num", wn);
+ ar & make_nvp("nth_kday_of_month_day_of_week", d);
+ ar & make_nvp("nth_kday_of_month_month", m);
+
+ nkd = gregorian::nth_kday_of_month(wn,d,m);
+}
+//!override needed b/c no default constructor
+template<class Archive>
+inline void load_construct_data(Archive & ar,
+ gregorian::nth_kday_of_month* nkd,
+ const unsigned int /*file_version*/)
+{
+ // values used are not significant
+ ::new(nkd) gregorian::nth_kday_of_month(gregorian::nth_kday_of_month::first,
+ gregorian::Monday,gregorian::Jan);
+}
+
+/**** first_kday_of_month ****/
+
+//! Function to save first_day_of_the_week_in_month objects using serialization lib
+/*! first_day_of_the_week_in_month objects are broken down into 2 parts for
+ * serialization: the day of the week, and the month
+ */
+template<class Archive>
+void save(Archive & ar, const gregorian::first_kday_of_month& fkd,
+ unsigned int /*version*/)
+{
+ typename gregorian::first_kday_of_month::day_of_week_type d(fkd.day_of_week().as_number());
+ typename gregorian::first_kday_of_month::month_type m(fkd.month().as_number());
+ ar & make_nvp("first_kday_of_month_day_of_week", d);
+ ar & make_nvp("first_kday_of_month_month", m);
+}
+//! Function to load first_day_of_the_week_in_month objects using serialization lib
+/*! first_day_of_the_week_in_month objects are broken down into 2 parts for
+ * serialization: the day of the week, and the month
+ */
+template<class Archive>
+void load(Archive & ar, gregorian::first_kday_of_month& fkd, unsigned int /*version*/)
+{
+ typename gregorian::first_kday_of_month::day_of_week_type d(gregorian::Monday);
+ typename gregorian::first_kday_of_month::month_type m(gregorian::Jan);
+ ar & make_nvp("first_kday_of_month_day_of_week", d);
+ ar & make_nvp("first_kday_of_month_month", m);
+
+ fkd = gregorian::first_kday_of_month(d,m);
+}
+//!override needed b/c no default constructor
+template<class Archive>
+inline void load_construct_data(Archive & ar,
+ gregorian::first_kday_of_month* fkd,
+ const unsigned int /*file_version*/)
+{
+ // values used are not significant
+ ::new(fkd) gregorian::first_kday_of_month(gregorian::Monday,gregorian::Jan);
+}
+
+/**** last_kday_of_month ****/
+
+//! Function to save last_day_of_the_week_in_month objects using serialization lib
+/*! last_day_of_the_week_in_month objects are broken down into 2 parts for
+ * serialization: the day of the week, and the month
+ */
+template<class Archive>
+void save(Archive & ar, const gregorian::last_kday_of_month& lkd,
+ unsigned int /*version*/)
+{
+ typename gregorian::last_kday_of_month::day_of_week_type d(lkd.day_of_week().as_number());
+ typename gregorian::last_kday_of_month::month_type m(lkd.month().as_number());
+ ar & make_nvp("last_kday_of_month_day_of_week", d);
+ ar & make_nvp("last_kday_of_month_month", m);
+}
+//! Function to load last_day_of_the_week_in_month objects using serialization lib
+/*! last_day_of_the_week_in_month objects are broken down into 2 parts for
+ * serialization: the day of the week, and the month
+ */
+template<class Archive>
+void load(Archive & ar, gregorian::last_kday_of_month& lkd, unsigned int /*version*/)
+{
+ typename gregorian::last_kday_of_month::day_of_week_type d(gregorian::Monday);
+ typename gregorian::last_kday_of_month::month_type m(gregorian::Jan);
+ ar & make_nvp("last_kday_of_month_day_of_week", d);
+ ar & make_nvp("last_kday_of_month_month", m);
+
+ lkd = gregorian::last_kday_of_month(d,m);
+}
+//!override needed b/c no default constructor
+template<class Archive>
+inline void load_construct_data(Archive & ar,
+ gregorian::last_kday_of_month* lkd,
+ const unsigned int /*file_version*/)
+{
+ // values used are not significant
+ ::new(lkd) gregorian::last_kday_of_month(gregorian::Monday,gregorian::Jan);
+}
+
+/**** first_kday_before ****/
+
+//! Function to save first_day_of_the_week_before objects using serialization lib
+template<class Archive>
+void save(Archive & ar, const gregorian::first_kday_before& fkdb,
+ unsigned int /*version*/)
+{
+ typename gregorian::first_kday_before::day_of_week_type d(fkdb.day_of_week().as_number());
+ ar & make_nvp("first_kday_before_day_of_week", d);
+}
+//! Function to load first_day_of_the_week_before objects using serialization lib
+template<class Archive>
+void load(Archive & ar, gregorian::first_kday_before& fkdb, unsigned int /*version*/)
+{
+ typename gregorian::first_kday_before::day_of_week_type d(gregorian::Monday);
+ ar & make_nvp("first_kday_before_day_of_week", d);
+
+ fkdb = gregorian::first_kday_before(d);
+}
+//!override needed b/c no default constructor
+template<class Archive>
+inline void load_construct_data(Archive & ar,
+ gregorian::first_kday_before* fkdb,
+ const unsigned int /*file_version*/)
+{
+ // values used are not significant
+ ::new(fkdb) gregorian::first_kday_before(gregorian::Monday);
+}
+
+/**** first_kday_after ****/
+
+//! Function to save first_day_of_the_week_after objects using serialization lib
+template<class Archive>
+void save(Archive & ar, const gregorian::first_kday_after& fkda,
+ unsigned int /*version*/)
+{
+ typename gregorian::first_kday_after::day_of_week_type d(fkda.day_of_week().as_number());
+ ar & make_nvp("first_kday_after_day_of_week", d);
+}
+//! Function to load first_day_of_the_week_after objects using serialization lib
+template<class Archive>
+void load(Archive & ar, gregorian::first_kday_after& fkda, unsigned int /*version*/)
+{
+ typename gregorian::first_kday_after::day_of_week_type d(gregorian::Monday);
+ ar & make_nvp("first_kday_after_day_of_week", d);
+
+ fkda = gregorian::first_kday_after(d);
+}
+//!override needed b/c no default constructor
+template<class Archive>
+inline void load_construct_data(Archive & ar,
+ gregorian::first_kday_after* fkda,
+ const unsigned int /*file_version*/)
+{
+ // values used are not significant
+ ::new(fkda) gregorian::first_kday_after(gregorian::Monday);
+}
+
+} // namespace serialization
+} // namespace boost
+
+#endif
diff --git a/boost/boost/date_time/gregorian/greg_weekday.hpp b/boost/boost/date_time/gregorian/greg_weekday.hpp
new file mode 100644
index 00000000000..7ad0d278542
--- /dev/null
+++ b/boost/boost/date_time/gregorian/greg_weekday.hpp
@@ -0,0 +1,66 @@
+#ifndef GREG_WEEKDAY_HPP___
+#define GREG_WEEKDAY_HPP___
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2004/07/18 18:36:18 $
+ */
+
+#include "boost/date_time/constrained_value.hpp"
+#include "boost/date_time/date_defs.hpp"
+#include "boost/date_time/compiler_config.hpp"
+#include <stdexcept>
+#include <string>
+
+namespace boost {
+namespace gregorian {
+
+ //bring enum values into the namespace
+ using date_time::Sunday;
+ using date_time::Monday;
+ using date_time::Tuesday;
+ using date_time::Wednesday;
+ using date_time::Thursday;
+ using date_time::Friday;
+ using date_time::Saturday;
+
+
+ //! Exception that flags that a weekday number is incorrect
+ struct bad_weekday : public std::out_of_range
+ {
+ bad_weekday() : std::out_of_range(std::string("Weekday os out of range 0..6")) {}
+ };
+ typedef CV::simple_exception_policy<unsigned short, 0, 6, bad_weekday> greg_weekday_policies;
+ typedef CV::constrained_value<greg_weekday_policies> greg_weekday_rep;
+
+
+ //! Represent a day within a week (range 0==Sun to 6==Sat)
+ class BOOST_DATE_TIME_DECL greg_weekday : public greg_weekday_rep {
+ public:
+ typedef boost::date_time::weekdays weekday_enum;
+ greg_weekday(unsigned short day_of_week_num) :
+ greg_weekday_rep(day_of_week_num)
+ {}
+
+ unsigned short as_number() const {return value_;}
+ const char* as_short_string() const;
+ const char* as_long_string() const;
+#ifndef BOOST_NO_STD_WSTRING
+ const wchar_t* as_short_wstring() const;
+ const wchar_t* as_long_wstring() const;
+#endif // BOOST_NO_STD_WSTRING
+ weekday_enum as_enum() const {return static_cast<weekday_enum>(value_);}
+
+
+ };
+
+
+
+} } //namespace gregorian
+
+
+
+#endif
diff --git a/boost/boost/date_time/gregorian/greg_year.hpp b/boost/boost/date_time/gregorian/greg_year.hpp
new file mode 100644
index 00000000000..1747ed3fbcf
--- /dev/null
+++ b/boost/boost/date_time/gregorian/greg_year.hpp
@@ -0,0 +1,53 @@
+#ifndef GREG_YEAR_HPP___
+#define GREG_YEAR_HPP___
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland
+ * $Date: 2003/11/23 02:27:09 $
+ */
+
+#include "boost/date_time/constrained_value.hpp"
+#include <stdexcept>
+#include <string>
+
+namespace boost {
+namespace gregorian {
+
+ //! Exception type for gregorian year
+ struct bad_year : public std::out_of_range
+ {
+ bad_year() :
+ std::out_of_range(std::string("Year is out of valid range: 1400..10000"))
+ {}
+ };
+ //! Policy class that declares error handling gregorian year type
+ typedef CV::simple_exception_policy<unsigned short, 1400, 10000, bad_year> greg_year_policies;
+
+ //! Generated representation for gregorian year
+ typedef CV::constrained_value<greg_year_policies> greg_year_rep;
+
+ //! Represent a day of the month (range 1900 - 10000)
+ /*! This small class allows for simple conversion an integer value into
+ a year for the gregorian calendar. This currently only allows a
+ range of 1900 to 10000. Both ends of the range are a bit arbitrary
+ at the moment, but they are the limits of current testing of the
+ library. As such they may be increased in the future.
+ */
+ class greg_year : public greg_year_rep {
+ public:
+ greg_year(unsigned short year) : greg_year_rep(year) {}
+ operator unsigned short() const {return value_;}
+ private:
+
+ };
+
+
+
+} } //namespace gregorian
+
+
+
+#endif
diff --git a/boost/boost/date_time/gregorian/greg_ymd.hpp b/boost/boost/date_time/gregorian/greg_ymd.hpp
new file mode 100644
index 00000000000..7373d7b2c04
--- /dev/null
+++ b/boost/boost/date_time/gregorian/greg_ymd.hpp
@@ -0,0 +1,33 @@
+#ifndef DATE_TIME_GREG_YMD_HPP__
+#define DATE_TIME_GREG_YMD_HPP__
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland
+ * $Date: 2003/11/23 02:27:09 $
+ */
+
+#include "boost/date_time/year_month_day.hpp"
+#include "boost/date_time/special_defs.hpp"
+#include "boost/date_time/gregorian/greg_day.hpp"
+#include "boost/date_time/gregorian/greg_year.hpp"
+#include "boost/date_time/gregorian/greg_month.hpp"
+
+namespace boost {
+namespace gregorian {
+
+ typedef date_time::year_month_day_base<greg_year,
+ greg_month,
+ greg_day> greg_year_month_day;
+
+
+
+} } //namespace gregorian
+
+
+
+
+#endif
+
diff --git a/boost/boost/date_time/gregorian/gregorian.hpp b/boost/boost/date_time/gregorian/gregorian.hpp
new file mode 100644
index 00000000000..2a15adadf10
--- /dev/null
+++ b/boost/boost/date_time/gregorian/gregorian.hpp
@@ -0,0 +1,38 @@
+#ifndef GREGORIAN_HPP__
+#define GREGORIAN_HPP__
+
+/* Copyright (c) 2002-2004 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2005/01/30 20:58:52 $
+ */
+
+/*! @file gregorian.hpp
+ Single file header that provides overall include for all elements of
+ the gregorian date-time system. This includes the various types
+ defined, but also other functions for formatting and parsing.
+*/
+
+
+#include "boost/date_time/compiler_config.hpp"
+#include "boost/date_time/gregorian/gregorian_types.hpp"
+#include "boost/date_time/gregorian/conversion.hpp"
+#if defined(BOOST_DATE_TIME_INCLUDE_LIMITED_HEADERS)
+#include "boost/date_time/gregorian/formatters_limited.hpp"
+#else
+#include "boost/date_time/gregorian/formatters.hpp"
+#endif
+
+#if defined(USE_DATE_TIME_PRE_1_33_FACET_IO)
+#include "boost/date_time/gregorian/greg_facet.hpp"
+#else
+#include "boost/date_time/gregorian/gregorian_io.hpp"
+#endif // USE_DATE_TIME_PRE_1_33_FACET_IO
+
+#include "boost/date_time/gregorian/parsers.hpp"
+
+
+
+#endif
diff --git a/boost/boost/date_time/gregorian/gregorian_io.hpp b/boost/boost/date_time/gregorian/gregorian_io.hpp
new file mode 100644
index 00000000000..93e8265f17f
--- /dev/null
+++ b/boost/boost/date_time/gregorian/gregorian_io.hpp
@@ -0,0 +1,777 @@
+#ifndef DATE_TIME_GREGORIAN_IO_HPP__
+#define DATE_TIME_GREGORIAN_IO_HPP__
+
+/* Copyright (c) 2004-2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2006/03/26 21:29:10 $
+ */
+
+#include "boost/date_time/date_facet.hpp"
+#include "boost/io/ios_state.hpp"
+#include <iostream>
+#include <locale>
+
+namespace boost {
+namespace gregorian {
+
+
+ typedef boost::date_time::period_formatter<wchar_t> wperiod_formatter;
+ typedef boost::date_time::period_formatter<char> period_formatter;
+
+ typedef boost::date_time::date_facet<date,wchar_t> wdate_facet;
+ typedef boost::date_time::date_facet<date,char> date_facet;
+
+ typedef boost::date_time::period_parser<date,char> period_parser;
+ typedef boost::date_time::period_parser<date,wchar_t> wperiod_parser;
+
+ typedef boost::date_time::special_values_formatter<char> special_values_formatter;
+ typedef boost::date_time::special_values_formatter<wchar_t> wspecial_values_formatter;
+
+ typedef boost::date_time::special_values_parser<date,char> special_values_parser;
+ typedef boost::date_time::special_values_parser<date,wchar_t> wspecial_values_parser;
+
+ typedef boost::date_time::date_input_facet<date,char> date_input_facet;
+ typedef boost::date_time::date_input_facet<date,wchar_t> wdate_input_facet;
+
+ template <class CharT, class TraitsT>
+ inline std::basic_ostream<CharT, TraitsT>&
+ operator<<(std::basic_ostream<CharT, TraitsT>& os, const boost::gregorian::date& d) {
+ boost::io::ios_flags_saver iflags(os);
+ typedef boost::date_time::date_facet<date, CharT> custom_date_facet;
+ std::ostreambuf_iterator<CharT> output_itr(os);
+ if (std::has_facet<custom_date_facet>(os.getloc()))
+ std::use_facet<custom_date_facet>(os.getloc()).put(output_itr, os, os.fill(), d);
+ else {
+ //instantiate a custom facet for dealing with dates since the user
+ //has not put one in the stream so far. This is for efficiency
+ //since we would always need to reconstruct for every date
+ //if the locale did not already exist. Of course this will be overridden
+ //if the user imbues at some later point. With the default settings
+ //for the facet the resulting format will be the same as the
+ //std::time_facet settings.
+ custom_date_facet* f = new custom_date_facet();
+ std::locale l = std::locale(os.getloc(), f);
+ os.imbue(l);
+ f->put(output_itr, os, os.fill(), d);
+ }
+ return os;
+ }
+
+ //! input operator for date
+ template <class CharT, class Traits>
+ inline
+ std::basic_istream<CharT, Traits>&
+ operator>>(std::basic_istream<CharT, Traits>& is, date& d)
+ {
+ boost::io::ios_flags_saver iflags(is);
+ typename std::basic_istream<CharT, Traits>::sentry strm_sentry(is, false);
+ if (strm_sentry) {
+ try {
+ typedef typename date_time::date_input_facet<date, CharT> date_input_facet;
+
+ std::istreambuf_iterator<CharT,Traits> sit(is), str_end;
+ if(std::has_facet<date_input_facet>(is.getloc())) {
+ std::use_facet<date_input_facet>(is.getloc()).get(sit, str_end, is, d);
+ }
+ else {
+ date_input_facet* f = new date_input_facet();
+ std::locale l = std::locale(is.getloc(), f);
+ is.imbue(l);
+ f->get(sit, str_end, is, d);
+ }
+ }
+ catch(...) {
+ // mask tells us what exceptions are turned on
+ std::ios_base::iostate exception_mask = is.exceptions();
+ // if the user wants exceptions on failbit, we'll rethrow our
+ // date_time exception & set the failbit
+ if(std::ios_base::failbit & exception_mask) {
+ try { is.setstate(std::ios_base::failbit); }
+ catch(std::ios_base::failure&) {} // ignore this one
+ throw; // rethrow original exception
+ }
+ else {
+ // if the user want's to fail quietly, we simply set the failbit
+ is.setstate(std::ios_base::failbit);
+ }
+
+ }
+ }
+ return is;
+ }
+
+ template <class CharT, class TraitsT>
+ inline std::basic_ostream<CharT, TraitsT>&
+ operator<<(std::basic_ostream<CharT, TraitsT>& os, const boost::gregorian::date_duration& dd) {
+ boost::io::ios_flags_saver iflags(os);
+ typedef boost::date_time::date_facet<date, CharT> custom_date_facet;
+ std::ostreambuf_iterator<CharT> output_itr(os);
+ if (std::has_facet<custom_date_facet>(os.getloc()))
+ std::use_facet<custom_date_facet>(os.getloc()).put(output_itr, os, os.fill(), dd);
+ else {
+ custom_date_facet* f = new custom_date_facet();
+ std::locale l = std::locale(os.getloc(), f);
+ os.imbue(l);
+ f->put(output_itr, os, os.fill(), dd);
+
+ }
+ return os;
+ }
+
+ //! input operator for date_duration
+ template <class CharT, class Traits>
+ inline
+ std::basic_istream<CharT, Traits>&
+ operator>>(std::basic_istream<CharT, Traits>& is, date_duration& dd)
+ {
+ boost::io::ios_flags_saver iflags(is);
+ typename std::basic_istream<CharT, Traits>::sentry strm_sentry(is, false);
+ if (strm_sentry) {
+ try {
+ typedef typename date_time::date_input_facet<date, CharT> date_input_facet;
+
+ std::istreambuf_iterator<CharT,Traits> sit(is), str_end;
+ if(std::has_facet<date_input_facet>(is.getloc())) {
+ std::use_facet<date_input_facet>(is.getloc()).get(sit, str_end, is, dd);
+ }
+ else {
+ date_input_facet* f = new date_input_facet();
+ std::locale l = std::locale(is.getloc(), f);
+ is.imbue(l);
+ f->get(sit, str_end, is, dd);
+ }
+ }
+ catch(...) {
+ std::ios_base::iostate exception_mask = is.exceptions();
+ if(std::ios_base::failbit & exception_mask) {
+ try { is.setstate(std::ios_base::failbit); }
+ catch(std::ios_base::failure&) {}
+ throw; // rethrow original exception
+ }
+ else {
+ is.setstate(std::ios_base::failbit);
+ }
+
+ }
+ }
+ return is;
+ }
+
+ template <class CharT, class TraitsT>
+ inline std::basic_ostream<CharT, TraitsT>&
+ operator<<(std::basic_ostream<CharT, TraitsT>& os, const boost::gregorian::date_period& dp) {
+ boost::io::ios_flags_saver iflags(os);
+ typedef boost::date_time::date_facet<date, CharT> custom_date_facet;
+ std::ostreambuf_iterator<CharT> output_itr(os);
+ if (std::has_facet<custom_date_facet>(os.getloc()))
+ std::use_facet<custom_date_facet>(os.getloc()).put(output_itr, os, os.fill(), dp);
+ else {
+ //instantiate a custom facet for dealing with date periods since the user
+ //has not put one in the stream so far. This is for efficiency
+ //since we would always need to reconstruct for every time period
+ //if the local did not already exist. Of course this will be overridden
+ //if the user imbues at some later point. With the default settings
+ //for the facet the resulting format will be the same as the
+ //std::time_facet settings.
+ custom_date_facet* f = new custom_date_facet();
+ std::locale l = std::locale(os.getloc(), f);
+ os.imbue(l);
+ f->put(output_itr, os, os.fill(), dp);
+
+ }
+ return os;
+ }
+
+ //! input operator for date_period
+ template <class CharT, class Traits>
+ inline
+ std::basic_istream<CharT, Traits>&
+ operator>>(std::basic_istream<CharT, Traits>& is, date_period& dp)
+ {
+ boost::io::ios_flags_saver iflags(is);
+ typename std::basic_istream<CharT, Traits>::sentry strm_sentry(is, false);
+ if (strm_sentry) {
+ try {
+ typedef typename date_time::date_input_facet<date, CharT> date_input_facet;
+
+ std::istreambuf_iterator<CharT,Traits> sit(is), str_end;
+ if(std::has_facet<date_input_facet>(is.getloc())) {
+ std::use_facet<date_input_facet>(is.getloc()).get(sit, str_end, is, dp);
+ }
+ else {
+ date_input_facet* f = new date_input_facet();
+ std::locale l = std::locale(is.getloc(), f);
+ is.imbue(l);
+ f->get(sit, str_end, is, dp);
+ }
+ }
+ catch(...) {
+ std::ios_base::iostate exception_mask = is.exceptions();
+ if(std::ios_base::failbit & exception_mask) {
+ try { is.setstate(std::ios_base::failbit); }
+ catch(std::ios_base::failure&) {}
+ throw; // rethrow original exception
+ }
+ else {
+ is.setstate(std::ios_base::failbit);
+ }
+
+ }
+ }
+ return is;
+ }
+
+ /********** small gregorian types **********/
+
+ template <class CharT, class TraitsT>
+ inline std::basic_ostream<CharT, TraitsT>&
+ operator<<(std::basic_ostream<CharT, TraitsT>& os, const boost::gregorian::greg_month& gm) {
+ boost::io::ios_flags_saver iflags(os);
+ typedef boost::date_time::date_facet<date, CharT> custom_date_facet;
+ std::ostreambuf_iterator<CharT> output_itr(os);
+ if (std::has_facet<custom_date_facet>(os.getloc()))
+ std::use_facet<custom_date_facet>(os.getloc()).put(output_itr, os, os.fill(), gm);
+ else {
+ custom_date_facet* f = new custom_date_facet();//-> 10/1074199752/32 because year & day not initialized in put(...)
+ //custom_date_facet* f = new custom_date_facet("%B");
+ std::locale l = std::locale(os.getloc(), f);
+ os.imbue(l);
+ f->put(output_itr, os, os.fill(), gm);
+ }
+ return os;
+ }
+
+ //! input operator for greg_month
+ template <class CharT, class Traits>
+ inline
+ std::basic_istream<CharT, Traits>&
+ operator>>(std::basic_istream<CharT, Traits>& is, greg_month& m)
+ {
+ boost::io::ios_flags_saver iflags(is);
+ typename std::basic_istream<CharT, Traits>::sentry strm_sentry(is, false);
+ if (strm_sentry) {
+ try {
+ typedef typename date_time::date_input_facet<date, CharT> date_input_facet;
+
+ std::istreambuf_iterator<CharT,Traits> sit(is), str_end;
+ if(std::has_facet<date_input_facet>(is.getloc())) {
+ std::use_facet<date_input_facet>(is.getloc()).get(sit, str_end, is, m);
+ }
+ else {
+ date_input_facet* f = new date_input_facet();
+ std::locale l = std::locale(is.getloc(), f);
+ is.imbue(l);
+ f->get(sit, str_end, is, m);
+ }
+ }
+ catch(...) {
+ std::ios_base::iostate exception_mask = is.exceptions();
+ if(std::ios_base::failbit & exception_mask) {
+ try { is.setstate(std::ios_base::failbit); }
+ catch(std::ios_base::failure&) {}
+ throw; // rethrow original exception
+ }
+ else {
+ is.setstate(std::ios_base::failbit);
+ }
+
+ }
+ }
+ return is;
+ }
+
+
+ template <class CharT, class TraitsT>
+ inline std::basic_ostream<CharT, TraitsT>&
+ operator<<(std::basic_ostream<CharT, TraitsT>& os, const boost::gregorian::greg_weekday& gw) {
+ boost::io::ios_flags_saver iflags(os);
+ typedef boost::date_time::date_facet<date, CharT> custom_date_facet;
+ std::ostreambuf_iterator<CharT> output_itr(os);
+ if (std::has_facet<custom_date_facet>(os.getloc()))
+ std::use_facet<custom_date_facet>(os.getloc()).put(output_itr, os, os.fill(), gw);
+ else {
+ custom_date_facet* f = new custom_date_facet();
+ std::locale l = std::locale(os.getloc(), f);
+ os.imbue(l);
+ f->put(output_itr, os, os.fill(), gw);
+ }
+ return os;
+ }
+
+ //! input operator for greg_weekday
+ template <class CharT, class Traits>
+ inline
+ std::basic_istream<CharT, Traits>&
+ operator>>(std::basic_istream<CharT, Traits>& is, greg_weekday& wd)
+ {
+ boost::io::ios_flags_saver iflags(is);
+ typename std::basic_istream<CharT, Traits>::sentry strm_sentry(is, false);
+ if (strm_sentry) {
+ try {
+ typedef typename date_time::date_input_facet<date, CharT> date_input_facet;
+
+ std::istreambuf_iterator<CharT,Traits> sit(is), str_end;
+ if(std::has_facet<date_input_facet>(is.getloc())) {
+ std::use_facet<date_input_facet>(is.getloc()).get(sit, str_end, is, wd);
+ }
+ else {
+ date_input_facet* f = new date_input_facet();
+ std::locale l = std::locale(is.getloc(), f);
+ is.imbue(l);
+ f->get(sit, str_end, is, wd);
+ }
+ }
+ catch(...) {
+ std::ios_base::iostate exception_mask = is.exceptions();
+ if(std::ios_base::failbit & exception_mask) {
+ try { is.setstate(std::ios_base::failbit); }
+ catch(std::ios_base::failure&) {}
+ throw; // rethrow original exception
+ }
+ else {
+ is.setstate(std::ios_base::failbit);
+ }
+
+ }
+ }
+ return is;
+ }
+
+ //NOTE: output operator for greg_day was not necessary
+
+ //! input operator for greg_day
+ template <class CharT, class Traits>
+ inline
+ std::basic_istream<CharT, Traits>&
+ operator>>(std::basic_istream<CharT, Traits>& is, greg_day& gd)
+ {
+ boost::io::ios_flags_saver iflags(is);
+ typename std::basic_istream<CharT, Traits>::sentry strm_sentry(is, false);
+ if (strm_sentry) {
+ try {
+ typedef typename date_time::date_input_facet<date, CharT> date_input_facet;
+
+ std::istreambuf_iterator<CharT,Traits> sit(is), str_end;
+ if(std::has_facet<date_input_facet>(is.getloc())) {
+ std::use_facet<date_input_facet>(is.getloc()).get(sit, str_end, is, gd);
+ }
+ else {
+ date_input_facet* f = new date_input_facet();
+ std::locale l = std::locale(is.getloc(), f);
+ is.imbue(l);
+ f->get(sit, str_end, is, gd);
+ }
+ }
+ catch(...) {
+ std::ios_base::iostate exception_mask = is.exceptions();
+ if(std::ios_base::failbit & exception_mask) {
+ try { is.setstate(std::ios_base::failbit); }
+ catch(std::ios_base::failure&) {}
+ throw; // rethrow original exception
+ }
+ else {
+ is.setstate(std::ios_base::failbit);
+ }
+
+ }
+ }
+ return is;
+ }
+
+ //NOTE: output operator for greg_year was not necessary
+
+ //! input operator for greg_year
+ template <class CharT, class Traits>
+ inline
+ std::basic_istream<CharT, Traits>&
+ operator>>(std::basic_istream<CharT, Traits>& is, greg_year& gy)
+ {
+ boost::io::ios_flags_saver iflags(is);
+ typename std::basic_istream<CharT, Traits>::sentry strm_sentry(is, false);
+ if (strm_sentry) {
+ try {
+ typedef typename date_time::date_input_facet<date, CharT> date_input_facet;
+
+ std::istreambuf_iterator<CharT,Traits> sit(is), str_end;
+ if(std::has_facet<date_input_facet>(is.getloc())) {
+ std::use_facet<date_input_facet>(is.getloc()).get(sit, str_end, is, gy);
+ }
+ else {
+ date_input_facet* f = new date_input_facet();
+ std::locale l = std::locale(is.getloc(), f);
+ is.imbue(l);
+ f->get(sit, str_end, is, gy);
+ }
+ }
+ catch(...) {
+ std::ios_base::iostate exception_mask = is.exceptions();
+ if(std::ios_base::failbit & exception_mask) {
+ try { is.setstate(std::ios_base::failbit); }
+ catch(std::ios_base::failure&) {}
+ throw; // rethrow original exception
+ }
+ else {
+ is.setstate(std::ios_base::failbit);
+ }
+
+ }
+ }
+ return is;
+ }
+
+ /********** date generator types **********/
+
+ template <class CharT, class TraitsT>
+ inline std::basic_ostream<CharT, TraitsT>&
+ operator<<(std::basic_ostream<CharT, TraitsT>& os, const boost::gregorian::partial_date& pd) {
+ boost::io::ios_flags_saver iflags(os);
+ typedef boost::date_time::date_facet<date, CharT> custom_date_facet;
+ std::ostreambuf_iterator<CharT> output_itr(os);
+ if (std::has_facet<custom_date_facet>(os.getloc()))
+ std::use_facet<custom_date_facet>(os.getloc()).put(output_itr, os, os.fill(), pd);
+ else {
+ custom_date_facet* f = new custom_date_facet();
+ std::locale l = std::locale(os.getloc(), f);
+ os.imbue(l);
+ f->put(output_itr, os, os.fill(), pd);
+ }
+ return os;
+ }
+
+ //! input operator for partial_date
+ template <class CharT, class Traits>
+ inline
+ std::basic_istream<CharT, Traits>&
+ operator>>(std::basic_istream<CharT, Traits>& is, partial_date& pd)
+ {
+ boost::io::ios_flags_saver iflags(is);
+ typename std::basic_istream<CharT, Traits>::sentry strm_sentry(is, false);
+ if (strm_sentry) {
+ try {
+ typedef typename date_time::date_input_facet<date, CharT> date_input_facet;
+
+ std::istreambuf_iterator<CharT,Traits> sit(is), str_end;
+ if(std::has_facet<date_input_facet>(is.getloc())) {
+ std::use_facet<date_input_facet>(is.getloc()).get(sit, str_end, is, pd);
+ }
+ else {
+ date_input_facet* f = new date_input_facet();
+ std::locale l = std::locale(is.getloc(), f);
+ is.imbue(l);
+ f->get(sit, str_end, is, pd);
+ }
+ }
+ catch(...) {
+ std::ios_base::iostate exception_mask = is.exceptions();
+ if(std::ios_base::failbit & exception_mask) {
+ try { is.setstate(std::ios_base::failbit); }
+ catch(std::ios_base::failure&) {}
+ throw; // rethrow original exception
+ }
+ else {
+ is.setstate(std::ios_base::failbit);
+ }
+
+ }
+ }
+ return is;
+ }
+
+ template <class CharT, class TraitsT>
+ inline std::basic_ostream<CharT, TraitsT>&
+ operator<<(std::basic_ostream<CharT, TraitsT>& os, const boost::gregorian::nth_day_of_the_week_in_month& nkd) {
+ boost::io::ios_flags_saver iflags(os);
+ typedef boost::date_time::date_facet<date, CharT> custom_date_facet;
+ std::ostreambuf_iterator<CharT> output_itr(os);
+ if (std::has_facet<custom_date_facet>(os.getloc()))
+ std::use_facet<custom_date_facet>(os.getloc()).put(output_itr, os, os.fill(), nkd);
+ else {
+ custom_date_facet* f = new custom_date_facet();
+ std::locale l = std::locale(os.getloc(), f);
+ os.imbue(l);
+ f->put(output_itr, os, os.fill(), nkd);
+ }
+ return os;
+ }
+
+ //! input operator for nth_day_of_the_week_in_month
+ template <class CharT, class Traits>
+ inline
+ std::basic_istream<CharT, Traits>&
+ operator>>(std::basic_istream<CharT, Traits>& is,
+ nth_day_of_the_week_in_month& nday)
+ {
+ boost::io::ios_flags_saver iflags(is);
+ typename std::basic_istream<CharT, Traits>::sentry strm_sentry(is, false);
+ if (strm_sentry) {
+ try {
+ typedef typename date_time::date_input_facet<date, CharT> date_input_facet;
+
+ std::istreambuf_iterator<CharT,Traits> sit(is), str_end;
+ if(std::has_facet<date_input_facet>(is.getloc())) {
+ std::use_facet<date_input_facet>(is.getloc()).get(sit, str_end, is, nday);
+ }
+ else {
+ date_input_facet* f = new date_input_facet();
+ std::locale l = std::locale(is.getloc(), f);
+ is.imbue(l);
+ f->get(sit, str_end, is, nday);
+ }
+ }
+ catch(...) {
+ std::ios_base::iostate exception_mask = is.exceptions();
+ if(std::ios_base::failbit & exception_mask) {
+ try { is.setstate(std::ios_base::failbit); }
+ catch(std::ios_base::failure&) {}
+ throw; // rethrow original exception
+ }
+ else {
+ is.setstate(std::ios_base::failbit);
+ }
+
+ }
+ }
+ return is;
+ }
+
+
+ template <class CharT, class TraitsT>
+ inline std::basic_ostream<CharT, TraitsT>&
+ operator<<(std::basic_ostream<CharT, TraitsT>& os, const boost::gregorian::first_day_of_the_week_in_month& fkd) {
+ boost::io::ios_flags_saver iflags(os);
+ typedef boost::date_time::date_facet<date, CharT> custom_date_facet;
+ std::ostreambuf_iterator<CharT> output_itr(os);
+ if (std::has_facet<custom_date_facet>(os.getloc()))
+ std::use_facet<custom_date_facet>(os.getloc()).put(output_itr, os, os.fill(), fkd);
+ else {
+ custom_date_facet* f = new custom_date_facet();
+ std::locale l = std::locale(os.getloc(), f);
+ os.imbue(l);
+ f->put(output_itr, os, os.fill(), fkd);
+ }
+ return os;
+ }
+
+ //! input operator for first_day_of_the_week_in_month
+ template <class CharT, class Traits>
+ inline
+ std::basic_istream<CharT, Traits>&
+ operator>>(std::basic_istream<CharT, Traits>& is,
+ first_day_of_the_week_in_month& fkd)
+ {
+ boost::io::ios_flags_saver iflags(is);
+ typename std::basic_istream<CharT, Traits>::sentry strm_sentry(is, false);
+ if (strm_sentry) {
+ try {
+ typedef typename date_time::date_input_facet<date, CharT> date_input_facet;
+
+ std::istreambuf_iterator<CharT,Traits> sit(is), str_end;
+ if(std::has_facet<date_input_facet>(is.getloc())) {
+ std::use_facet<date_input_facet>(is.getloc()).get(sit, str_end, is, fkd);
+ }
+ else {
+ date_input_facet* f = new date_input_facet();
+ std::locale l = std::locale(is.getloc(), f);
+ is.imbue(l);
+ f->get(sit, str_end, is, fkd);
+ }
+ }
+ catch(...) {
+ std::ios_base::iostate exception_mask = is.exceptions();
+ if(std::ios_base::failbit & exception_mask) {
+ try { is.setstate(std::ios_base::failbit); }
+ catch(std::ios_base::failure&) {}
+ throw; // rethrow original exception
+ }
+ else {
+ is.setstate(std::ios_base::failbit);
+ }
+
+ }
+ }
+ return is;
+ }
+
+
+ template <class CharT, class TraitsT>
+ inline std::basic_ostream<CharT, TraitsT>&
+ operator<<(std::basic_ostream<CharT, TraitsT>& os, const boost::gregorian::last_day_of_the_week_in_month& lkd) {
+ boost::io::ios_flags_saver iflags(os);
+ typedef boost::date_time::date_facet<date, CharT> custom_date_facet;
+ std::ostreambuf_iterator<CharT> output_itr(os);
+ if (std::has_facet<custom_date_facet>(os.getloc()))
+ std::use_facet<custom_date_facet>(os.getloc()).put(output_itr, os, os.fill(), lkd);
+ else {
+ custom_date_facet* f = new custom_date_facet();
+ std::locale l = std::locale(os.getloc(), f);
+ os.imbue(l);
+ f->put(output_itr, os, os.fill(), lkd);
+ }
+ return os;
+ }
+
+ //! input operator for last_day_of_the_week_in_month
+ template <class CharT, class Traits>
+ inline
+ std::basic_istream<CharT, Traits>&
+ operator>>(std::basic_istream<CharT, Traits>& is,
+ last_day_of_the_week_in_month& lkd)
+ {
+ boost::io::ios_flags_saver iflags(is);
+ typename std::basic_istream<CharT, Traits>::sentry strm_sentry(is, false);
+ if (strm_sentry) {
+ try {
+ typedef typename date_time::date_input_facet<date, CharT> date_input_facet;
+
+ std::istreambuf_iterator<CharT,Traits> sit(is), str_end;
+ if(std::has_facet<date_input_facet>(is.getloc())) {
+ std::use_facet<date_input_facet>(is.getloc()).get(sit, str_end, is, lkd);
+ }
+ else {
+ date_input_facet* f = new date_input_facet();
+ std::locale l = std::locale(is.getloc(), f);
+ is.imbue(l);
+ f->get(sit, str_end, is, lkd);
+ }
+ }
+ catch(...) {
+ std::ios_base::iostate exception_mask = is.exceptions();
+ if(std::ios_base::failbit & exception_mask) {
+ try { is.setstate(std::ios_base::failbit); }
+ catch(std::ios_base::failure&) {}
+ throw; // rethrow original exception
+ }
+ else {
+ is.setstate(std::ios_base::failbit);
+ }
+
+ }
+ }
+ return is;
+ }
+
+
+ template <class CharT, class TraitsT>
+ inline std::basic_ostream<CharT, TraitsT>&
+ operator<<(std::basic_ostream<CharT, TraitsT>& os, const boost::gregorian::first_day_of_the_week_after& fda) {
+ boost::io::ios_flags_saver iflags(os);
+ typedef boost::date_time::date_facet<date, CharT> custom_date_facet;
+ std::ostreambuf_iterator<CharT> output_itr(os);
+ if (std::has_facet<custom_date_facet>(os.getloc())) {
+ std::use_facet<custom_date_facet>(os.getloc()).put(output_itr, os, os.fill(), fda);
+ }
+ else {
+ custom_date_facet* f = new custom_date_facet();
+ std::locale l = std::locale(os.getloc(), f);
+ os.imbue(l);
+ f->put(output_itr, os, os.fill(), fda);
+ }
+ return os;
+ }
+
+ //! input operator for first_day_of_the_week_after
+ template <class CharT, class Traits>
+ inline
+ std::basic_istream<CharT, Traits>&
+ operator>>(std::basic_istream<CharT, Traits>& is,
+ first_day_of_the_week_after& fka)
+ {
+ boost::io::ios_flags_saver iflags(is);
+ typename std::basic_istream<CharT, Traits>::sentry strm_sentry(is, false);
+ if (strm_sentry) {
+ try {
+ typedef typename date_time::date_input_facet<date, CharT> date_input_facet;
+
+ std::istreambuf_iterator<CharT,Traits> sit(is), str_end;
+ if(std::has_facet<date_input_facet>(is.getloc())) {
+ std::use_facet<date_input_facet>(is.getloc()).get(sit, str_end, is, fka);
+ }
+ else {
+ date_input_facet* f = new date_input_facet();
+ std::locale l = std::locale(is.getloc(), f);
+ is.imbue(l);
+ f->get(sit, str_end, is, fka);
+ }
+ }
+ catch(...) {
+ std::ios_base::iostate exception_mask = is.exceptions();
+ if(std::ios_base::failbit & exception_mask) {
+ try { is.setstate(std::ios_base::failbit); }
+ catch(std::ios_base::failure&) {}
+ throw; // rethrow original exception
+ }
+ else {
+ is.setstate(std::ios_base::failbit);
+ }
+
+ }
+ }
+ return is;
+ }
+
+
+ template <class CharT, class TraitsT>
+ inline std::basic_ostream<CharT, TraitsT>&
+ operator<<(std::basic_ostream<CharT, TraitsT>& os, const boost::gregorian::first_day_of_the_week_before& fdb) {
+ boost::io::ios_flags_saver iflags(os);
+ typedef boost::date_time::date_facet<date, CharT> custom_date_facet;
+ std::ostreambuf_iterator<CharT> output_itr(os);
+ if (std::has_facet<custom_date_facet>(os.getloc())) {
+ std::use_facet<custom_date_facet>(os.getloc()).put(output_itr, os, os.fill(), fdb);
+ }
+ else {
+ custom_date_facet* f = new custom_date_facet();
+ std::locale l = std::locale(os.getloc(), f);
+ os.imbue(l);
+ f->put(output_itr, os, os.fill(), fdb);
+ }
+ return os;
+ }
+
+ //! input operator for first_day_of_the_week_before
+ template <class CharT, class Traits>
+ inline
+ std::basic_istream<CharT, Traits>&
+ operator>>(std::basic_istream<CharT, Traits>& is,
+ first_day_of_the_week_before& fkb)
+ {
+ boost::io::ios_flags_saver iflags(is);
+ typename std::basic_istream<CharT, Traits>::sentry strm_sentry(is, false);
+ if (strm_sentry) {
+ try {
+ typedef typename date_time::date_input_facet<date, CharT> date_input_facet;
+
+ std::istreambuf_iterator<CharT,Traits> sit(is), str_end;
+ if(std::has_facet<date_input_facet>(is.getloc())) {
+ std::use_facet<date_input_facet>(is.getloc()).get(sit, str_end, is, fkb);
+ }
+ else {
+ date_input_facet* f = new date_input_facet();
+ std::locale l = std::locale(is.getloc(), f);
+ is.imbue(l);
+ f->get(sit, str_end, is, fkb);
+ }
+ }
+ catch(...) {
+ std::ios_base::iostate exception_mask = is.exceptions();
+ if(std::ios_base::failbit & exception_mask) {
+ try { is.setstate(std::ios_base::failbit); }
+ catch(std::ios_base::failure&) {}
+ throw; // rethrow original exception
+ }
+ else {
+ is.setstate(std::ios_base::failbit);
+ }
+
+ }
+ }
+ return is;
+ }
+
+
+} } // namespaces
+
+#endif // DATE_TIME_GREGORIAN_IO_HPP__
diff --git a/boost/boost/date_time/gregorian/gregorian_types.hpp b/boost/boost/date_time/gregorian/gregorian_types.hpp
new file mode 100644
index 00000000000..35216a36e6b
--- /dev/null
+++ b/boost/boost/date_time/gregorian/gregorian_types.hpp
@@ -0,0 +1,109 @@
+#ifndef _GREGORIAN_TYPES_HPP__
+#define _GREGORIAN_TYPES_HPP__
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2004/06/29 16:29:21 $
+ */
+
+/*! @file gregorian_types.hpp
+ Single file header that defines most of the types for the gregorian
+ date-time system.
+*/
+
+#include "boost/date_time/date.hpp"
+#include "boost/date_time/period.hpp"
+#include "boost/date_time/gregorian/greg_calendar.hpp"
+#include "boost/date_time/gregorian/greg_duration.hpp"
+#if defined(BOOST_DATE_TIME_OPTIONAL_GREGORIAN_TYPES)
+#include "boost/date_time/gregorian/greg_duration_types.hpp"
+#endif
+#include "boost/date_time/gregorian/greg_date.hpp"
+#include "boost/date_time/date_generators.hpp"
+#include "boost/date_time/date_clock_device.hpp"
+#include "boost/date_time/date_iterator.hpp"
+#include "boost/date_time/adjust_functors.hpp"
+
+namespace boost {
+
+//! Gregorian date system based on date_time components
+/*! This date system defines a full complement of types including
+ * a date, date_duration, date_period, day_clock, and a
+ * day_iterator.
+ */
+namespace gregorian {
+ //! Date periods for the gregorian system
+ /*!\ingroup date_basics
+ */
+ typedef date_time::period<date, date_duration> date_period;
+
+ //! A unifying date_generator base type
+ /*! A unifying date_generator base type for:
+ * partial_date, nth_day_of_the_week_in_month,
+ * first_day_of_the_week_in_month, and last_day_of_the_week_in_month
+ */
+ typedef date_time::year_based_generator<date> year_based_generator;
+
+ //! A date generation object type
+ typedef date_time::partial_date<date> partial_date;
+
+ typedef date_time::nth_kday_of_month<date> nth_kday_of_month;
+ typedef nth_kday_of_month nth_day_of_the_week_in_month;
+
+ typedef date_time::first_kday_of_month<date> first_kday_of_month;
+ typedef first_kday_of_month first_day_of_the_week_in_month;
+
+ typedef date_time::last_kday_of_month<date> last_kday_of_month;
+ typedef last_kday_of_month last_day_of_the_week_in_month;
+
+ typedef date_time::first_kday_after<date> first_kday_after;
+ typedef first_kday_after first_day_of_the_week_after;
+
+ typedef date_time::first_kday_before<date> first_kday_before;
+ typedef first_kday_before first_day_of_the_week_before;
+
+ //! A clock to get the current day from the local computer
+ /*!\ingroup date_basics
+ */
+ typedef date_time::day_clock<date> day_clock;
+
+ //! Base date_iterator type for gregorian types.
+ /*!\ingroup date_basics
+ */
+ typedef date_time::date_itr_base<date> date_iterator;
+
+ //! A day level iterator
+ /*!\ingroup date_basics
+ */
+ typedef date_time::date_itr<date_time::day_functor<date>,
+ date> day_iterator;
+ //! A week level iterator
+ /*!\ingroup date_basics
+ */
+ typedef date_time::date_itr<date_time::week_functor<date>,
+ date> week_iterator;
+ //! A month level iterator
+ /*!\ingroup date_basics
+ */
+ typedef date_time::date_itr<date_time::month_functor<date>,
+ date> month_iterator;
+ //! A year level iterator
+ /*!\ingroup date_basics
+ */
+ typedef date_time::date_itr<date_time::year_functor<date>,
+ date> year_iterator;
+
+ // bring in these date_generator functions from date_time namespace
+ using date_time::days_until_weekday;
+ using date_time::days_before_weekday;
+ using date_time::next_weekday;
+ using date_time::previous_weekday;
+
+} } //namespace gregorian
+
+
+
+#endif
diff --git a/boost/boost/date_time/gregorian/parsers.hpp b/boost/boost/date_time/gregorian/parsers.hpp
new file mode 100644
index 00000000000..319daa23a94
--- /dev/null
+++ b/boost/boost/date_time/gregorian/parsers.hpp
@@ -0,0 +1,91 @@
+#ifndef GREGORIAN_PARSERS_HPP___
+#define GREGORIAN_PARSERS_HPP___
+
+/* Copyright (c) 2002,2003,2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2005/11/28 13:21:54 $
+ */
+
+#include "boost/date_time/gregorian/gregorian_types.hpp"
+#include "boost/date_time/date_parsing.hpp"
+#include "boost/date_time/compiler_config.hpp"
+#include "boost/date_time/parse_format_base.hpp"
+#include <string>
+#include <sstream>
+
+namespace boost {
+namespace gregorian {
+
+ //! Return special_value from string argument
+ /*! Return special_value from string argument. If argument is
+ * not one of the special value names (defined in src/gregorian/names.hpp),
+ * return 'not_special' */
+ BOOST_DATE_TIME_DECL special_values special_value_from_string(const std::string& s);
+
+ //! Deprecated: Use from_simple_string
+ inline date from_string(std::string s) {
+ return date_time::parse_date<date>(s);
+ }
+
+ //! From delimited date string where with order year-month-day eg: 2002-1-25 or 2003-Jan-25 (full month name is also accepted)
+ inline date from_simple_string(std::string s) {
+ return date_time::parse_date<date>(s, date_time::ymd_order_iso);
+ }
+
+ //! From delimited date string where with order year-month-day eg: 1-25-2003 or Jan-25-2003 (full month name is also accepted)
+ inline date from_us_string(std::string s) {
+ return date_time::parse_date<date>(s, date_time::ymd_order_us);
+ }
+
+ //! From delimited date string where with order day-month-year eg: 25-1-2002 or 25-Jan-2003 (full month name is also accepted)
+ inline date from_uk_string(std::string s) {
+ return date_time::parse_date<date>(s, date_time::ymd_order_dmy);
+ }
+
+ //! From iso type date string where with order year-month-day eg: 20020125
+ inline date from_undelimited_string(std::string s) {
+ return date_time::parse_undelimited_date<date>(s);
+ }
+
+ //! From iso type date string where with order year-month-day eg: 20020125
+ inline date date_from_iso_string(const std::string& s) {
+ return date_time::parse_undelimited_date<date>(s);
+ }
+
+#if !(defined(BOOST_NO_STD_ITERATOR_TRAITS))
+ //! Stream should hold a date in the form of: 2002-1-25. Month number, abbrev, or name are accepted
+ /* Arguments passed in by-value for convertability of char[]
+ * to iterator_type. Calls to from_stream_type are by-reference
+ * since conversion is already done */
+ template<class iterator_type>
+ inline date from_stream(iterator_type beg, iterator_type end) {
+ if(beg == end)
+ {
+ return date(not_a_date_time);
+ }
+ typedef typename std::iterator_traits<iterator_type>::value_type value_type;
+ return date_time::from_stream_type<date>(beg, end, value_type());
+ }
+#endif //BOOST_NO_STD_ITERATOR_TRAITS
+
+#if (defined(_MSC_VER) && (_MSC_VER < 1300))
+ // This function cannot be compiled with MSVC 6.0 due to internal compiler shorcomings
+#else
+ //! Function to parse a date_period from a string (eg: [2003-Oct-31/2003-Dec-25])
+ inline date_period date_period_from_string(const std::string& s){
+ return date_time::from_simple_string_type<date,char>(s);
+ }
+# if !defined(BOOST_NO_STD_WSTRING)
+ //! Function to parse a date_period from a wstring (eg: [2003-Oct-31/2003-Dec-25])
+ inline date_period date_period_from_wstring(const std::wstring& s){
+ return date_time::from_simple_string_type<date,wchar_t>(s);
+ }
+# endif // BOOST_NO_STD_WSTRING
+#endif
+
+} } //namespace gregorian
+
+#endif
diff --git a/boost/boost/date_time/gregorian_calendar.hpp b/boost/boost/date_time/gregorian_calendar.hpp
new file mode 100644
index 00000000000..57ea63e4b4a
--- /dev/null
+++ b/boost/boost/date_time/gregorian_calendar.hpp
@@ -0,0 +1,70 @@
+#ifndef DATE_TIME_GREGORIAN_CALENDAR_HPP__
+#define DATE_TIME_GREGORIAN_CALENDAR_HPP__
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland
+ * $Date: 2003/12/14 13:59:58 $
+ */
+
+
+namespace boost {
+namespace date_time {
+
+
+ //! An implementation of the Gregorian calendar
+ /*! This is a parameterized implementation of a proleptic Gregorian Calendar that
+ can be used in the creation of date systems or just to perform calculations.
+ All the methods of this class are static functions, so the intent is to
+ never create instances of this class.
+ @param ymd_type_ Struct type representing the year, month, day. The ymd_type must
+ define a of types for the year, month, and day. These types need to be
+ arithmetic types.
+ @param date_int_type_ Underlying type for the date count. Must be an arithmetic type.
+ */
+ template<typename ymd_type_, typename date_int_type_>
+ class gregorian_calendar_base {
+ public:
+ //! define a type a date split into components
+ typedef ymd_type_ ymd_type;
+ //! define a type for representing months
+ typedef typename ymd_type::month_type month_type;
+ //! define a type for representing days
+ typedef typename ymd_type::day_type day_type;
+ //! Type to hold a stand alone year value (eg: 2002)
+ typedef typename ymd_type::year_type year_type;
+ //! Define the integer type to use for internal calculations
+ typedef date_int_type_ date_int_type;
+
+
+ static unsigned short day_of_week(const ymd_type& ymd);
+ static int week_number(const ymd_type&ymd);
+ //static unsigned short day_of_year(date_int_type);
+ static date_int_type day_number(const ymd_type& ymd);
+ static date_int_type julian_day_number(const ymd_type& ymd);
+ static long modjulian_day_number(const ymd_type& ymd);
+ static ymd_type from_day_number(date_int_type);
+ static ymd_type from_julian_day_number(date_int_type);
+ static ymd_type from_modjulian_day_number(long);
+ static bool is_leap_year(year_type);
+ static unsigned short end_of_month_day(year_type y, month_type m);
+ static ymd_type epoch();
+ static unsigned short days_in_week();
+
+ };
+
+
+
+} } //namespace
+
+#ifndef NO_BOOST_DATE_TIME_INLINE
+#include "boost/date_time/gregorian_calendar.ipp"
+#endif
+
+
+
+#endif
+
+
diff --git a/boost/boost/date_time/gregorian_calendar.ipp b/boost/boost/date_time/gregorian_calendar.ipp
new file mode 100644
index 00000000000..862d659da2f
--- /dev/null
+++ b/boost/boost/date_time/gregorian_calendar.ipp
@@ -0,0 +1,219 @@
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2003/12/03 02:28:02 $
+ */
+
+#ifndef NO_BOOST_DATE_TIME_INLINE
+ #undef BOOST_DATE_TIME_INLINE
+ #define BOOST_DATE_TIME_INLINE inline
+#endif
+
+namespace boost {
+namespace date_time {
+ //! Return the day of the week (0==Sunday, 1==Monday, etc)
+ /*! Converts a the year-month-day into a day of the week number
+ */
+ template<typename ymd_type_, typename date_int_type_>
+ BOOST_DATE_TIME_INLINE
+ unsigned short
+ gregorian_calendar_base<ymd_type_,date_int_type_>::day_of_week(const ymd_type& ymd) {
+ unsigned short a = static_cast<unsigned short>((14-ymd.month)/12);
+ unsigned short y = static_cast<unsigned short>(ymd.year - a);
+ unsigned short m = static_cast<unsigned short>(ymd.month + 12*a - 2);
+ unsigned short d = static_cast<unsigned short>((ymd.day + y + (y/4) - (y/100) + (y/400) + (31*m)/12) % 7);
+ //std::cout << year << "-" << month << "-" << day << " is day: " << d << "\n";
+ return d;
+ }
+
+ //!Return the iso week number for the date
+ /*!Implements the rules associated with the iso 8601 week number.
+ Basically the rule is that Week 1 of the year is the week that contains
+ January 4th or the week that contains the first Thursday in January.
+ Reference for this algorithm is the Calendar FAQ by Claus Tondering, April 2000.
+ */
+ template<typename ymd_type_, typename date_int_type_>
+ BOOST_DATE_TIME_INLINE
+ int
+ gregorian_calendar_base<ymd_type_,date_int_type_>::week_number(const ymd_type& ymd) {
+ unsigned long julianbegin = julian_day_number(ymd_type(ymd.year,1,1));
+ unsigned long juliantoday = julian_day_number(ymd);
+ unsigned long day = (julianbegin + 3) % 7;
+ unsigned long week = (juliantoday + day - julianbegin + 4)/7;
+
+ if ((week >= 1) && (week <= 52)) {
+ return week;
+ }
+
+ if ((week == 53)) {
+ if((day==6) ||(day == 5 && is_leap_year(ymd.year))) {
+ return week; //under these circumstances week == 53.
+ } else {
+ return 1; //monday - wednesday is in week 1 of next year
+ }
+ }
+ //if the week is not in current year recalculate using the previous year as the beginning year
+ else if (week == 0) {
+ julianbegin = julian_day_number(ymd_type(static_cast<unsigned short>(ymd.year-1),1,1));
+ juliantoday = julian_day_number(ymd);
+ day = (julianbegin + 3) % 7;
+ week = (juliantoday + day - julianbegin + 4)/7;
+ return week;
+ }
+
+ return week; //not reachable -- well except if day == 5 and is_leap_year != true
+
+ }
+
+ //! Convert a ymd_type into a day number
+ /*! The day number is an absolute number of days since the start of count
+ */
+ template<typename ymd_type_, typename date_int_type_>
+ BOOST_DATE_TIME_INLINE
+ date_int_type_
+ gregorian_calendar_base<ymd_type_,date_int_type_>::day_number(const ymd_type& ymd)
+ {
+ unsigned short a = static_cast<unsigned short>((14-ymd.month)/12);
+ unsigned short y = static_cast<unsigned short>(ymd.year + 4800 - a);
+ unsigned short m = static_cast<unsigned short>(ymd.month + 12*a - 3);
+ unsigned long d = ymd.day + ((153*m + 2)/5) + 365*y + (y/4) - (y/100) + (y/400) - 32045;
+ return d;
+ }
+
+ //! Convert a year-month-day into the julian day number
+ /*! Since this implementation uses julian day internally, this is the same as the day_number.
+ */
+ template<typename ymd_type_, typename date_int_type_>
+ BOOST_DATE_TIME_INLINE
+ date_int_type_
+ gregorian_calendar_base<ymd_type_,date_int_type_>::julian_day_number(const ymd_type& ymd)
+ {
+ return day_number(ymd);
+ }
+
+ //! Convert year-month-day into a modified julian day number
+ /*! The day number is an absolute number of days.
+ * MJD 0 thus started on 17 Nov 1858(Gregorian) at 00:00:00 UTC
+ */
+ template<typename ymd_type_, typename date_int_type_>
+ BOOST_DATE_TIME_INLINE
+ long
+ gregorian_calendar_base<ymd_type_,date_int_type_>::modjulian_day_number(const ymd_type& ymd)
+ {
+ return julian_day_number(ymd)-2400001; //prerounded
+ }
+
+ //! Change a day number into a year-month-day
+ template<typename ymd_type_, typename date_int_type_>
+ BOOST_DATE_TIME_INLINE
+ ymd_type_
+ gregorian_calendar_base<ymd_type_,date_int_type_>::from_day_number(date_int_type dayNumber)
+ {
+ date_int_type a = dayNumber + 32044;
+ date_int_type b = (4*a + 3)/146097;
+ date_int_type c = a-((146097*b)/4);
+ date_int_type d = (4*c + 3)/1461;
+ date_int_type e = c - (1461*d)/4;
+ date_int_type m = (5*e + 2)/153;
+ unsigned short day = static_cast<unsigned short>(e - ((153*m + 2)/5) + 1);
+ unsigned short month = static_cast<unsigned short>(m + 3 - 12 * (m/10));
+ year_type year = static_cast<unsigned short>(100*b + d - 4800 + (m/10));
+ //std::cout << year << "-" << month << "-" << day << "\n";
+
+ return ymd_type(static_cast<unsigned short>(year),month,day);
+ }
+
+ //! Change a day number into a year-month-day
+ template<typename ymd_type_, typename date_int_type_>
+ BOOST_DATE_TIME_INLINE
+ ymd_type_
+ gregorian_calendar_base<ymd_type_,date_int_type_>::from_julian_day_number(date_int_type dayNumber)
+ {
+ date_int_type a = dayNumber + 32044;
+ date_int_type b = (4*a+3)/146097;
+ date_int_type c = a - ((146097*b)/4);
+ date_int_type d = (4*c + 3)/1461;
+ date_int_type e = c - ((1461*d)/4);
+ date_int_type m = (5*e + 2)/153;
+ unsigned short day = static_cast<unsigned short>(e - ((153*m + 2)/5) + 1);
+ unsigned short month = static_cast<unsigned short>(m + 3 - 12 * (m/10));
+ year_type year = static_cast<year_type>(100*b + d - 4800 + (m/10));
+ //std::cout << year << "-" << month << "-" << day << "\n";
+
+ return ymd_type(year,month,day);
+ }
+
+ //! Change a modified julian day number into a year-month-day
+ template<typename ymd_type_, typename date_int_type_>
+ BOOST_DATE_TIME_INLINE
+ ymd_type_
+ gregorian_calendar_base<ymd_type_,date_int_type_>::from_modjulian_day_number(long dayNumber) {
+ date_int_type jd = dayNumber + 2400001; //is 2400000.5 prerounded
+ return from_julian_day_number(jd);
+ }
+
+ //! Determine if the provided year is a leap year
+ /*!
+ *@return true if year is a leap year, false otherwise
+ */
+ template<typename ymd_type_, typename date_int_type_>
+ BOOST_DATE_TIME_INLINE
+ bool
+ gregorian_calendar_base<ymd_type_,date_int_type_>::is_leap_year(year_type year)
+ {
+ //divisible by 4, not if divisible by 100, but true if divisible by 400
+ return (!(year % 4)) && ((year % 100) || (!(year % 400)));
+ }
+
+ //! Calculate the last day of the month
+ /*! Find the day which is the end of the month given year and month
+ * No error checking is performed.
+ */
+ template<typename ymd_type_, typename date_int_type_>
+ BOOST_DATE_TIME_INLINE
+ unsigned short
+ gregorian_calendar_base<ymd_type_,date_int_type_>::end_of_month_day(year_type year,
+ month_type month)
+ {
+ switch (month) {
+ case 2:
+ if (is_leap_year(year)) {
+ return 29;
+ } else {
+ return 28;
+ };
+ case 4:
+ case 6:
+ case 9:
+ case 11:
+ return 30;
+ default:
+ return 31;
+ };
+
+ }
+
+ //! Provide the ymd_type specification for the calandar start
+ template<typename ymd_type_, typename date_int_type_>
+ BOOST_DATE_TIME_INLINE
+ ymd_type_
+ gregorian_calendar_base<ymd_type_,date_int_type_>::epoch()
+ {
+ return ymd_type(1400,1,1);
+ }
+
+ //! Defines length of a week for week calculations
+ template<typename ymd_type_, typename date_int_type_>
+ BOOST_DATE_TIME_INLINE
+ unsigned short
+ gregorian_calendar_base<ymd_type_,date_int_type_>::days_in_week()
+ {
+ return 7;
+ }
+
+
+} } //namespace gregorian
+
+
diff --git a/boost/boost/date_time/int_adapter.hpp b/boost/boost/date_time/int_adapter.hpp
new file mode 100644
index 00000000000..32a12f7d542
--- /dev/null
+++ b/boost/boost/date_time/int_adapter.hpp
@@ -0,0 +1,507 @@
+#ifndef _DATE_TIME_INT_ADAPTER_HPP__
+#define _DATE_TIME_INT_ADAPTER_HPP__
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2004/02/26 18:26:47 $
+ */
+
+
+#include "boost/config.hpp"
+#include "boost/limits.hpp" //work around compilers without limits
+#include "boost/date_time/special_defs.hpp"
+#include "boost/date_time/locale_config.hpp"
+#include <iostream>
+
+namespace boost {
+namespace date_time {
+
+
+//! Adapter to create integer types with +-infinity, and not a value
+/*! This class is used internally in counted date/time representations.
+ * It adds the floating point like features of infinities and
+ * not a number. It also provides mathmatical operations with
+ * consideration to special values following these rules:
+ *@code
+ * +infinity - infinity == Not A Number (NAN)
+ * infinity * non-zero == infinity
+ * infinity * zero == NAN
+ * +infinity * -integer == -infinity
+ * infinity / infinity == NAN
+ * infinity * infinity == infinity
+ *@endcode
+ */
+template<typename int_type_>
+class int_adapter {
+public:
+ typedef int_type_ int_type;
+ int_adapter(int_type v) :
+ value_(v)
+ {}
+ static bool has_infinity()
+ {
+ return true;
+ }
+ static const int_adapter pos_infinity()
+ {
+ return (::std::numeric_limits<int_type>::max)();
+ }
+ static const int_adapter neg_infinity()
+ {
+ return (::std::numeric_limits<int_type>::min)();
+ }
+ static const int_adapter not_a_number()
+ {
+ return (::std::numeric_limits<int_type>::max)()-1;
+ }
+ static int_adapter max BOOST_PREVENT_MACRO_SUBSTITUTION ()
+ {
+ return (::std::numeric_limits<int_type>::max)()-2;
+ }
+ static int_adapter min BOOST_PREVENT_MACRO_SUBSTITUTION ()
+ {
+ return (::std::numeric_limits<int_type>::min)()+1;
+ }
+ static int_adapter from_special(special_values sv)
+ {
+ switch (sv) {
+ case not_a_date_time: return not_a_number();
+ case neg_infin: return neg_infinity();
+ case pos_infin: return pos_infinity();
+ case max_date_time: return (max)();
+ case min_date_time: return (min)();
+ default: return not_a_number();
+ }
+ }
+ static bool is_inf(int_type v)
+ {
+ return (v == neg_infinity().as_number() ||
+ v == pos_infinity().as_number());
+ }
+ static bool is_neg_inf(int_type v)
+ {
+ return (v == neg_infinity().as_number());
+ }
+ static bool is_pos_inf(int_type v)
+ {
+ return (v == pos_infinity().as_number());
+ }
+ static bool is_not_a_number(int_type v)
+ {
+ return (v == not_a_number().as_number());
+ }
+ //! Returns either special value type or is_not_special
+ static special_values to_special(int_type v)
+ {
+ if (is_not_a_number(v)) return not_a_date_time;
+ if (is_neg_inf(v)) return neg_infin;
+ if (is_pos_inf(v)) return pos_infin;
+ return not_special;
+ }
+
+ //-3 leaves room for representations of infinity and not a date
+ static int_type maxcount()
+ {
+ return (::std::numeric_limits<int_type>::max)()-3;
+ }
+ bool is_infinity() const
+ {
+ return (value_ == neg_infinity().as_number() ||
+ value_ == pos_infinity().as_number());
+ }
+ bool is_pos_infinity()const
+ {
+ return(value_ == pos_infinity().as_number());
+ }
+ bool is_neg_infinity()const
+ {
+ return(value_ == neg_infinity().as_number());
+ }
+ bool is_nan() const
+ {
+ return (value_ == not_a_number().as_number());
+ }
+ bool is_special() const
+ {
+ return(is_infinity() || is_nan());
+ }
+ bool operator==(const int_adapter& rhs) const
+ {
+ return (compare(rhs) == 0);
+ }
+ bool operator==(const int& rhs) const
+ {
+ // quiets compiler warnings
+ bool is_signed = std::numeric_limits<int_type>::is_signed;
+ if(!is_signed)
+ {
+ if(is_neg_inf(value_) && rhs == 0)
+ {
+ return false;
+ }
+ }
+ return (compare(rhs) == 0);
+ }
+ bool operator!=(const int_adapter& rhs) const
+ {
+ return (compare(rhs) != 0);
+ }
+ bool operator!=(const int& rhs) const
+ {
+ // quiets compiler warnings
+ bool is_signed = std::numeric_limits<int_type>::is_signed;
+ if(!is_signed)
+ {
+ if(is_neg_inf(value_) && rhs == 0)
+ {
+ return true;
+ }
+ }
+ return (compare(rhs) != 0);
+ }
+ bool operator<(const int_adapter& rhs) const
+ {
+ return (compare(rhs) == -1);
+ }
+ bool operator<(const int& rhs) const
+ {
+ // quiets compiler warnings
+ bool is_signed = std::numeric_limits<int_type>::is_signed;
+ if(!is_signed)
+ {
+ if(is_neg_inf(value_) && rhs == 0)
+ {
+ return true;
+ }
+ }
+ return (compare(rhs) == -1);
+ }
+ bool operator>(const int_adapter& rhs) const
+ {
+ return (compare(rhs) == 1);
+ }
+ int_type as_number() const
+ {
+ return value_;
+ }
+ //! Returns either special value type or is_not_special
+ special_values as_special() const
+ {
+ return int_adapter::to_special(value_);
+ }
+ //creates nasty ambiguities
+// operator int_type() const
+// {
+// return value_;
+// }
+
+ /*! Operator allows for adding dissimilar int_adapter types.
+ * The return type will match that of the the calling object's type */
+ template<class rhs_type>
+ inline
+ int_adapter operator+(const int_adapter<rhs_type>& rhs) const
+ {
+ if(is_special() || rhs.is_special())
+ {
+ if (is_nan() || rhs.is_nan())
+ {
+ return int_adapter::not_a_number();
+ }
+ if((is_pos_inf(value_) && rhs.is_neg_inf(rhs.as_number())) ||
+ (is_neg_inf(value_) && rhs.is_pos_inf(rhs.as_number())) )
+ {
+ return int_adapter::not_a_number();
+ }
+ if (is_infinity())
+ {
+ return *this;
+ }
+ if (rhs.is_pos_inf(rhs.as_number()))
+ {
+ return int_adapter::pos_infinity();
+ }
+ if (rhs.is_neg_inf(rhs.as_number()))
+ {
+ return int_adapter::neg_infinity();
+ }
+ }
+ return int_adapter<int_type>(value_ + rhs.as_number());
+ }
+
+ int_adapter operator+(const int_type rhs) const
+ {
+ if(is_special())
+ {
+ if (is_nan())
+ {
+ return int_adapter<int_type>(not_a_number());
+ }
+ if (is_infinity())
+ {
+ return *this;
+ }
+ }
+ return int_adapter<int_type>(value_ + rhs);
+ }
+
+ /*! Operator allows for subtracting dissimilar int_adapter types.
+ * The return type will match that of the the calling object's type */
+ template<class rhs_type>
+ inline
+ int_adapter operator-(const int_adapter<rhs_type>& rhs)const
+ {
+ if(is_special() || rhs.is_special())
+ {
+ if (is_nan() || rhs.is_nan())
+ {
+ return int_adapter::not_a_number();
+ }
+ if((is_pos_inf(value_) && rhs.is_pos_inf(rhs.as_number())) ||
+ (is_neg_inf(value_) && rhs.is_neg_inf(rhs.as_number())) )
+ {
+ return int_adapter::not_a_number();
+ }
+ if (is_infinity())
+ {
+ return *this;
+ }
+ if (rhs.is_pos_inf(rhs.as_number()))
+ {
+ return int_adapter::neg_infinity();
+ }
+ if (rhs.is_neg_inf(rhs.as_number()))
+ {
+ return int_adapter::pos_infinity();
+ }
+ }
+ return int_adapter<int_type>(value_ - rhs.as_number());
+ }
+ int_adapter operator-(const int_type rhs) const
+ {
+ if(is_special())
+ {
+ if (is_nan())
+ {
+ return int_adapter<int_type>(not_a_number());
+ }
+ if (is_infinity())
+ {
+ return *this;
+ }
+ }
+ return int_adapter<int_type>(value_ - rhs);
+ }
+
+ // should templatize this to be consistant with op +-
+ int_adapter operator*(const int_adapter& rhs)const
+ {
+ if(this->is_special() || rhs.is_special())
+ {
+ return mult_div_specials(rhs);
+ }
+ return int_adapter<int_type>(value_ * rhs.value_);
+ }
+ /*! Provided for cases when automatic conversion from
+ * 'int' to 'int_adapter' causes incorrect results. */
+ int_adapter operator*(const int rhs) const
+ {
+ if(is_special())
+ {
+ return mult_div_specials(rhs);
+ }
+ return int_adapter<int_type>(value_ * rhs);
+ }
+
+ // should templatize this to be consistant with op +-
+ int_adapter operator/(const int_adapter& rhs)const
+ {
+ if(this->is_special() || rhs.is_special())
+ {
+ if(is_infinity() && rhs.is_infinity())
+ {
+ return int_adapter<int_type>(not_a_number());
+ }
+ if(rhs != 0)
+ {
+ return mult_div_specials(rhs);
+ }
+ else { // let divide by zero blow itself up
+ return int_adapter<int_type>(value_ / rhs.value_);
+ }
+ }
+ return int_adapter<int_type>(value_ / rhs.value_);
+ }
+ /*! Provided for cases when automatic conversion from
+ * 'int' to 'int_adapter' causes incorrect results. */
+ int_adapter operator/(const int rhs) const
+ {
+ if(is_special() && rhs != 0)
+ {
+ return mult_div_specials(rhs);
+ }
+ return int_adapter<int_type>(value_ / rhs);
+ }
+
+ // should templatize this to be consistant with op +-
+ int_adapter operator%(const int_adapter& rhs)const
+ {
+ if(this->is_special() || rhs.is_special())
+ {
+ if(is_infinity() && rhs.is_infinity())
+ {
+ return int_adapter<int_type>(not_a_number());
+ }
+ if(rhs != 0)
+ {
+ return mult_div_specials(rhs);
+ }
+ else { // let divide by zero blow itself up
+ return int_adapter<int_type>(value_ % rhs.value_);
+ }
+ }
+ return int_adapter<int_type>(value_ % rhs.value_);
+ }
+ /*! Provided for cases when automatic conversion from
+ * 'int' to 'int_adapter' causes incorrect results. */
+ int_adapter operator%(const int rhs) const
+ {
+ if(is_special() && rhs != 0)
+ {
+ return mult_div_specials(rhs);
+ }
+ return int_adapter<int_type>(value_ % rhs);
+ }
+private:
+ int_type value_;
+
+ //! returns -1, 0, 1, or 2 if 'this' is <, ==, >, or 'nan comparison' rhs
+ int compare(const int_adapter& rhs)const
+ {
+ if(this->is_special() || rhs.is_special())
+ {
+ if(this->is_nan() || rhs.is_nan()) {
+ if(this->is_nan() && rhs.is_nan()) {
+ return 0; // equal
+ }
+ else {
+ return 2; // nan
+ }
+ }
+ if((is_neg_inf(value_) && !is_neg_inf(rhs.value_)) ||
+ (is_pos_inf(rhs.value_) && !is_pos_inf(value_)) )
+ {
+ return -1; // less than
+ }
+ if((is_pos_inf(value_) && !is_pos_inf(rhs.value_)) ||
+ (is_neg_inf(rhs.value_) && !is_neg_inf(value_)) ) {
+ return 1; // greater than
+ }
+ }
+ if(value_ < rhs.value_) return -1;
+ if(value_ > rhs.value_) return 1;
+ // implied-> if(value_ == rhs.value_)
+ return 0;
+ }
+ /* When multiplying and dividing with at least 1 special value
+ * very simmilar rules apply. In those cases where the rules
+ * are different, they are handled in the respective operator
+ * function. */
+ //! Assumes at least 'this' or 'rhs' is a special value
+ int_adapter mult_div_specials(const int_adapter& rhs)const
+ {
+ int min_value;
+ // quiets compiler warnings
+ bool is_signed = std::numeric_limits<int_type>::is_signed;
+ if(is_signed) {
+ min_value = 0;
+ }
+ else {
+ min_value = 1;// there is no zero with unsigned
+ }
+ if(this->is_nan() || rhs.is_nan()) {
+ return int_adapter<int_type>(not_a_number());
+ }
+ if((*this > 0 && rhs > 0) || (*this < min_value && rhs < min_value)) {
+ return int_adapter<int_type>(pos_infinity());
+ }
+ if((*this > 0 && rhs < min_value) || (*this < min_value && rhs > 0)) {
+ return int_adapter<int_type>(neg_infinity());
+ }
+ //implied -> if(this->value_ == 0 || rhs.value_ == 0)
+ return int_adapter<int_type>(not_a_number());
+ }
+ /* Overloaded function necessary because of special
+ * situation where int_adapter is instantiated with
+ * 'unsigned' and func is called with negative int.
+ * It would produce incorrect results since 'unsigned'
+ * wraps around when initialized with a negative value */
+ //! Assumes 'this' is a special value
+ int_adapter mult_div_specials(const int& rhs) const
+ {
+ int min_value;
+ // quiets compiler warnings
+ bool is_signed = std::numeric_limits<int_type>::is_signed;
+ if(is_signed) {
+ min_value = 0;
+ }
+ else {
+ min_value = 1;// there is no zero with unsigned
+ }
+ if(this->is_nan()) {
+ return int_adapter<int_type>(not_a_number());
+ }
+ if((*this > 0 && rhs > 0) || (*this < min_value && rhs < 0)) {
+ return int_adapter<int_type>(pos_infinity());
+ }
+ if((*this > 0 && rhs < 0) || (*this < min_value && rhs > 0)) {
+ return int_adapter<int_type>(neg_infinity());
+ }
+ //implied -> if(this->value_ == 0 || rhs.value_ == 0)
+ return int_adapter<int_type>(not_a_number());
+ }
+
+};
+
+#ifndef BOOST_DATE_TIME_NO_LOCALE
+ /*! Expected output is either a numeric representation
+ * or a special values representation.<BR>
+ * Ex. "12", "+infinity", "not-a-number", etc. */
+ //template<class charT = char, class traits = std::traits<charT>, typename int_type>
+ template<class charT, class traits, typename int_type>
+ inline
+ std::basic_ostream<charT, traits>&
+ operator<<(std::basic_ostream<charT, traits>& os, const int_adapter<int_type>& ia)
+ {
+ if(ia.is_special()) {
+ // switch copied from date_names_put.hpp
+ switch(ia.as_special())
+ {
+ case not_a_date_time:
+ os << "not-a-number";
+ break;
+ case pos_infin:
+ os << "+infinity";
+ break;
+ case neg_infin:
+ os << "-infinity";
+ break;
+ default:
+ os << "";
+ }
+ }
+ else {
+ os << ia.as_number();
+ }
+ return os;
+ }
+#endif
+
+
+} } //namespace date_time
+
+
+
+#endif
diff --git a/boost/boost/date_time/iso_format.hpp b/boost/boost/date_time/iso_format.hpp
new file mode 100644
index 00000000000..7815c392060
--- /dev/null
+++ b/boost/boost/date_time/iso_format.hpp
@@ -0,0 +1,303 @@
+#ifndef ISO_FORMAT_HPP___
+#define ISO_FORMAT_HPP___
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2004/08/29 19:31:12 $
+ */
+
+#include "boost/date_time/parse_format_base.hpp"
+
+namespace boost {
+namespace date_time {
+
+//! Class to provide common iso formatting spec
+template<class charT>
+class iso_format_base {
+public:
+ //! Describe month format -- its an integer in iso format
+ static month_format_spec month_format()
+ {
+ return month_as_integer;
+ }
+
+ //! String used printed is date is invalid
+ static const charT* not_a_date()
+ {
+ return "not-a-date-time";
+ }
+ //! String used to for positive infinity value
+ static const charT* pos_infinity()
+ {
+ return "+infinity";
+ }
+ //! String used to for positive infinity value
+ static const charT* neg_infinity()
+ {
+ return "-infinity";
+ }
+
+ //! ISO char for a year -- used in durations
+ static charT year_sep_char()
+ {
+ return 'Y';
+ }
+ //! ISO char for a month
+ static charT month_sep_char()
+ {
+ return '-';
+ }
+ //! ISO char for a day
+ static charT day_sep_char()
+ {
+ return '-';
+ }
+ //! char for minute
+ static charT hour_sep_char()
+ {
+ return ':';
+ }
+ //! char for minute
+ static charT minute_sep_char()
+ {
+ return ':';
+ }
+ //! char for second
+ static charT second_sep_char()
+ {
+ return ':';
+ }
+ //! ISO char for a period
+ static charT period_start_char()
+ {
+ return 'P';
+ }
+ //! Used in time in mixed strings to set start of time
+ static charT time_start_char()
+ {
+ return 'T';
+ }
+
+ //! Used in mixed strings to identify start of a week number
+ static charT week_start_char()
+ {
+ return 'W';
+ }
+
+ //! Separators for periods
+ static charT period_sep_char()
+ {
+ return '/';
+ }
+ //! Separator for hh:mm:ss
+ static charT time_sep_char()
+ {
+ return ':';
+ }
+ //! Preferred Separator for hh:mm:ss,decimal_fraction
+ static charT fractional_time_sep_char()
+ {
+ return ',';
+ }
+
+ static bool is_component_sep(charT sep)
+ {
+ switch(sep) {
+ case 'H':
+ case 'M':
+ case 'S':
+ case 'W':
+ case 'T':
+ case 'Y':
+ case 'D':return true;
+ default:
+ return false;
+ }
+ }
+
+ static bool is_fractional_time_sep(charT sep)
+ {
+ switch(sep) {
+ case ',':
+ case '.': return true;
+ default: return false;
+ }
+ }
+ static bool is_timezone_sep(charT sep)
+ {
+ switch(sep) {
+ case '+':
+ case '-': return true;
+ default: return false;
+ }
+ }
+ static charT element_sep_char()
+ {
+ return '-';
+ }
+
+};
+
+#ifndef BOOST_NO_STD_WSTRING
+
+//! Class to provide common iso formatting spec
+template<>
+class iso_format_base<wchar_t> {
+public:
+ //! Describe month format -- its an integer in iso format
+ static month_format_spec month_format()
+ {
+ return month_as_integer;
+ }
+
+ //! String used printed is date is invalid
+ static const wchar_t* not_a_date()
+ {
+ return L"not-a-date-time";
+ }
+ //! String used to for positive infinity value
+ static const wchar_t* pos_infinity()
+ {
+ return L"+infinity";
+ }
+ //! String used to for positive infinity value
+ static const wchar_t* neg_infinity()
+ {
+ return L"-infinity";
+ }
+
+ //! ISO char for a year -- used in durations
+ static wchar_t year_sep_char()
+ {
+ return 'Y';
+ }
+ //! ISO char for a month
+ static wchar_t month_sep_char()
+ {
+ return '-';
+ }
+ //! ISO char for a day
+ static wchar_t day_sep_char()
+ {
+ return '-';
+ }
+ //! char for minute
+ static wchar_t hour_sep_char()
+ {
+ return ':';
+ }
+ //! char for minute
+ static wchar_t minute_sep_char()
+ {
+ return ':';
+ }
+ //! char for second
+ static wchar_t second_sep_char()
+ {
+ return ':';
+ }
+ //! ISO char for a period
+ static wchar_t period_start_char()
+ {
+ return 'P';
+ }
+ //! Used in time in mixed strings to set start of time
+ static wchar_t time_start_char()
+ {
+ return 'T';
+ }
+
+ //! Used in mixed strings to identify start of a week number
+ static wchar_t week_start_char()
+ {
+ return 'W';
+ }
+
+ //! Separators for periods
+ static wchar_t period_sep_char()
+ {
+ return '/';
+ }
+ //! Separator for hh:mm:ss
+ static wchar_t time_sep_char()
+ {
+ return ':';
+ }
+ //! Preferred Separator for hh:mm:ss,decimal_fraction
+ static wchar_t fractional_time_sep_char()
+ {
+ return ',';
+ }
+
+ static bool is_component_sep(wchar_t sep)
+ {
+ switch(sep) {
+ case 'H':
+ case 'M':
+ case 'S':
+ case 'W':
+ case 'T':
+ case 'Y':
+ case 'D':return true;
+ default:
+ return false;
+ }
+ }
+
+ static bool is_fractional_time_sep(wchar_t sep)
+ {
+ switch(sep) {
+ case ',':
+ case '.': return true;
+ default: return false;
+ }
+ }
+ static bool is_timezone_sep(wchar_t sep)
+ {
+ switch(sep) {
+ case '+':
+ case '-': return true;
+ default: return false;
+ }
+ }
+ static wchar_t element_sep_char()
+ {
+ return '-';
+ }
+
+};
+
+#endif // BOOST_NO_STD_WSTRING
+
+//! Format description for iso normal YYYYMMDD
+template<class charT>
+class iso_format : public iso_format_base<charT> {
+public:
+ //! The ios standard format doesn't use char separators
+ static bool has_date_sep_chars()
+ {
+ return false;
+ }
+};
+
+//! Extended format uses seperators YYYY-MM-DD
+template<class charT>
+class iso_extended_format : public iso_format_base<charT> {
+public:
+ //! Extended format needs char separators
+ static bool has_date_sep_chars()
+ {
+ return true;
+ }
+
+};
+
+} } //namespace date_time
+
+
+
+
+#endif
diff --git a/boost/boost/date_time/local_time/conversion.hpp b/boost/boost/date_time/local_time/conversion.hpp
new file mode 100644
index 00000000000..74dc6afc181
--- /dev/null
+++ b/boost/boost/date_time/local_time/conversion.hpp
@@ -0,0 +1,35 @@
+#ifndef DATE_TIME_LOCAL_TIME_CONVERSION_HPP__
+#define DATE_TIME_LOCAL_TIME_CONVERSION_HPP__
+
+/* Copyright (c) 2003-2004 CrystalClear Software, Inc.
+ * Subject to the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2004/10/07 22:28:21 $
+ */
+
+
+#include "boost/date_time/posix_time/conversion.hpp"
+#include "boost/date_time/c_time.hpp"
+#include "boost/date_time/local_time/local_date_time.hpp"
+
+namespace boost {
+namespace local_time {
+
+//! Function that creates a tm struct from a local_date_time
+inline
+tm to_tm(const local_date_time& lt) {
+ tm lt_tm;
+ lt_tm = posix_time::to_tm(lt.local_time());
+ if(lt.is_dst()){
+ lt_tm.tm_isdst = 1;
+ }
+ else{
+ lt_tm.tm_isdst = 0;
+ }
+ return lt_tm;
+}
+
+
+}} // namespaces
+#endif // DATE_TIME_LOCAL_TIME_CONVERSION_HPP__
diff --git a/boost/boost/date_time/local_time/custom_time_zone.hpp b/boost/boost/date_time/local_time/custom_time_zone.hpp
new file mode 100644
index 00000000000..43ef11c8827
--- /dev/null
+++ b/boost/boost/date_time/local_time/custom_time_zone.hpp
@@ -0,0 +1,169 @@
+#ifndef LOCAL_TIME_CUSTOM_TIME_ZONE_HPP__
+#define LOCAL_TIME_CUSTOM_TIME_ZONE_HPP__
+
+/* Copyright (c) 2003-2005 CrystalClear Software, Inc.
+ * Subject to the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2005/10/23 20:15:06 $
+ */
+
+#include "boost/date_time/time_zone_base.hpp"
+#include "boost/date_time/time_zone_names.hpp"
+#include "boost/date_time/posix_time/posix_time.hpp"
+#include "boost/date_time/local_time/dst_transition_day_rules.hpp"
+#include "boost/date_time/string_convert.hpp"
+//#include "boost/date_time/special_defs.hpp"
+#include "boost/shared_ptr.hpp"
+
+namespace boost {
+namespace local_time {
+
+ //typedef boost::date_time::time_zone_names time_zone_names;
+ typedef boost::date_time::dst_adjustment_offsets<boost::posix_time::time_duration> dst_adjustment_offsets;
+ //typedef boost::date_time::time_zone_base<boost::posix_time::ptime> time_zone;
+ typedef boost::shared_ptr<dst_calc_rule> dst_calc_rule_ptr;
+
+ //! A real time zone
+ template<class CharT>
+ class custom_time_zone_base : public date_time::time_zone_base<posix_time::ptime,CharT> {
+ public:
+ typedef boost::posix_time::time_duration time_duration_type;
+ typedef date_time::time_zone_base<posix_time::ptime,CharT> base_type;
+ typedef typename base_type::string_type string_type;
+ typedef typename base_type::stringstream_type stringstream_type;
+ typedef date_time::time_zone_names_base<CharT> time_zone_names;
+ typedef CharT char_type;
+
+ custom_time_zone_base(const time_zone_names& zone_names,
+ const time_duration_type& utc_offset,
+ const dst_adjustment_offsets& dst_shift,
+ boost::shared_ptr<dst_calc_rule> calc_rule) :
+ zone_names_(zone_names),
+ base_utc_offset_(utc_offset),
+ dst_offsets_(dst_shift),
+ dst_calc_rules_(calc_rule)
+ {};
+ virtual ~custom_time_zone_base() {};
+ virtual string_type dst_zone_abbrev() const
+ {
+ return zone_names_.dst_zone_abbrev();
+ }
+ virtual string_type std_zone_abbrev() const
+ {
+ return zone_names_.std_zone_abbrev();
+ }
+ virtual string_type dst_zone_name() const
+ {
+ return zone_names_.dst_zone_name();
+ }
+ virtual string_type std_zone_name() const
+ {
+ return zone_names_.std_zone_name();
+ }
+ //! True if zone uses daylight savings adjustments
+ virtual bool has_dst() const
+ {
+ return (dst_calc_rules_); //if calc_rule is set the tz has dst
+ }
+ //! Local time that DST starts -- NADT if has_dst is false
+ virtual posix_time::ptime dst_local_start_time(gregorian::greg_year y) const
+ {
+ gregorian::date d(gregorian::not_a_date_time);
+ if (dst_calc_rules_) {
+ d = dst_calc_rules_->start_day(y);
+ }
+ return posix_time::ptime(d, dst_offsets_.dst_start_offset_);
+ }
+ //! Local time that DST ends -- NADT if has_dst is false
+ virtual posix_time::ptime dst_local_end_time(gregorian::greg_year y) const
+ {
+ gregorian::date d(gregorian::not_a_date_time);
+ if (dst_calc_rules_) {
+ d = dst_calc_rules_->end_day(y);
+ }
+ return posix_time::ptime(d, dst_offsets_.dst_end_offset_);
+ }
+ //! Base offset from UTC for zone (eg: -07:30:00)
+ virtual time_duration_type base_utc_offset() const
+ {
+ return base_utc_offset_;
+ }
+ //! Adjustment forward or back made while DST is in effect
+ virtual time_duration_type dst_offset() const
+ {
+ return dst_offsets_.dst_adjust_;
+ }
+ //! Returns a POSIX time_zone string for this object
+ virtual string_type to_posix_string() const
+ {
+ // std offset dst [offset],start[/time],end[/time] - w/o spaces
+ stringstream_type ss;
+ ss.fill('0');
+ boost::shared_ptr<dst_calc_rule> no_rules;
+ // std
+ ss << std_zone_abbrev();
+ // offset
+ if(base_utc_offset().is_negative()) {
+ // inverting the sign guarantees we get two digits
+ ss << '-' << std::setw(2) << base_utc_offset().invert_sign().hours();
+ }
+ else {
+ ss << '+' << std::setw(2) << base_utc_offset().hours();
+ }
+ if(base_utc_offset().minutes() != 0 || base_utc_offset().seconds() != 0) {
+ ss << ':' << std::setw(2) << base_utc_offset().minutes();
+ if(base_utc_offset().seconds() != 0) {
+ ss << ':' << std::setw(2) << base_utc_offset().seconds();
+ }
+ }
+ if(dst_calc_rules_ != no_rules) {
+ // dst
+ ss << dst_zone_abbrev();
+ // dst offset
+ if(dst_offset().is_negative()) {
+ // inverting the sign guarantees we get two digits
+ ss << '-' << std::setw(2) << dst_offset().invert_sign().hours();
+ }
+ else {
+ ss << '+' << std::setw(2) << dst_offset().hours();
+ }
+ if(dst_offset().minutes() != 0 || dst_offset().seconds() != 0) {
+ ss << ':' << std::setw(2) << dst_offset().minutes();
+ if(dst_offset().seconds() != 0) {
+ ss << ':' << std::setw(2) << dst_offset().seconds();
+ }
+ }
+ // start/time
+ ss << ',' << date_time::convert_string_type<char, char_type>(dst_calc_rules_->start_rule_as_string()) << '/'
+ << std::setw(2) << dst_offsets_.dst_start_offset_.hours() << ':'
+ << std::setw(2) << dst_offsets_.dst_start_offset_.minutes();
+ if(dst_offsets_.dst_start_offset_.seconds() != 0) {
+ ss << ':' << std::setw(2) << dst_offsets_.dst_start_offset_.seconds();
+ }
+ // end/time
+ ss << ',' << date_time::convert_string_type<char, char_type>(dst_calc_rules_->end_rule_as_string()) << '/'
+ << std::setw(2) << dst_offsets_.dst_end_offset_.hours() << ':'
+ << std::setw(2) << dst_offsets_.dst_end_offset_.minutes();
+ if(dst_offsets_.dst_end_offset_.seconds() != 0) {
+ ss << ':' << std::setw(2) << dst_offsets_.dst_end_offset_.seconds();
+ }
+ }
+
+ return ss.str();
+ }
+ private:
+ time_zone_names zone_names_;
+ bool has_dst_;
+ time_duration_type base_utc_offset_;
+ dst_adjustment_offsets dst_offsets_;
+ boost::shared_ptr<dst_calc_rule> dst_calc_rules_;
+ };
+
+ typedef custom_time_zone_base<char> custom_time_zone;
+
+} }//namespace
+
+
+
+#endif
diff --git a/boost/boost/date_time/local_time/date_duration_operators.hpp b/boost/boost/date_time/local_time/date_duration_operators.hpp
new file mode 100644
index 00000000000..cdce73678f0
--- /dev/null
+++ b/boost/boost/date_time/local_time/date_duration_operators.hpp
@@ -0,0 +1,115 @@
+#ifndef LOCAL_TIME_DATE_DURATION_OPERATORS_HPP___
+#define LOCAL_TIME_DATE_DURATION_OPERATORS_HPP___
+
+/* Copyright (c) 2004 CrystalClear Software, Inc.
+ * Subject to the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE-1.0 or
+ * http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2005/01/09 20:23:48 $
+ */
+
+#include "boost/date_time/gregorian/greg_duration_types.hpp"
+#include "boost/date_time/local_time/local_date_time.hpp"
+
+namespace boost {
+namespace local_time {
+
+ /*!@file date_duration_operators.hpp Operators for local_date_time and
+ * optional gregorian types. Operators use snap-to-end-of-month behavior.
+ * Further details on this behavior can be found in reference for
+ * date_time/date_duration_types.hpp and documentation for
+ * month and year iterators.
+ */
+
+
+ /*! Adds a months object and a local_date_time. Result will be same
+ * day-of-month as local_date_time unless original day was the last day of month.
+ * see date_time::months_duration for more details */
+ inline
+ local_date_time
+ operator+(const local_date_time& t, const boost::gregorian::months& m)
+ {
+ return t + m.get_offset(t.utc_time().date());
+ }
+
+ /*! Adds a months object to a local_date_time. Result will be same
+ * day-of-month as local_date_time unless original day was the last day of month.
+ * see date_time::months_duration for more details */
+ inline
+ local_date_time
+ operator+=(local_date_time& t, const boost::gregorian::months& m)
+ {
+ return t += m.get_offset(t.utc_time().date());
+ }
+
+ /*! Subtracts a months object and a local_date_time. Result will be same
+ * day-of-month as local_date_time unless original day was the last day of month.
+ * see date_time::months_duration for more details */
+ inline
+ local_date_time
+ operator-(const local_date_time& t, const boost::gregorian::months& m)
+ {
+ // get_neg_offset returns a negative duration, so we add
+ return t + m.get_neg_offset(t.utc_time().date());
+ }
+
+ /*! Subtracts a months object from a local_date_time. Result will be same
+ * day-of-month as local_date_time unless original day was the last day of month.
+ * see date_time::months_duration for more details */
+ inline
+ local_date_time
+ operator-=(local_date_time& t, const boost::gregorian::months& m)
+ {
+ // get_neg_offset returns a negative duration, so we add
+ return t += m.get_neg_offset(t.utc_time().date());
+ }
+
+ // local_date_time & years
+
+ /*! Adds a years object and a local_date_time. Result will be same
+ * month and day-of-month as local_date_time unless original day was the
+ * last day of month. see date_time::years_duration for more details */
+ inline
+ local_date_time
+ operator+(const local_date_time& t, const boost::gregorian::years& y)
+ {
+ return t + y.get_offset(t.utc_time().date());
+ }
+
+ /*! Adds a years object to a local_date_time. Result will be same
+ * month and day-of-month as local_date_time unless original day was the
+ * last day of month. see date_time::years_duration for more details */
+ inline
+ local_date_time
+ operator+=(local_date_time& t, const boost::gregorian::years& y)
+ {
+ return t += y.get_offset(t.utc_time().date());
+ }
+
+ /*! Subtracts a years object and a local_date_time. Result will be same
+ * month and day-of-month as local_date_time unless original day was the
+ * last day of month. see date_time::years_duration for more details */
+ inline
+ local_date_time
+ operator-(const local_date_time& t, const boost::gregorian::years& y)
+ {
+ // get_neg_offset returns a negative duration, so we add
+ return t + y.get_neg_offset(t.utc_time().date());
+ }
+
+ /*! Subtracts a years object from a local_date_time. Result will be same
+ * month and day-of-month as local_date_time unless original day was the
+ * last day of month. see date_time::years_duration for more details */
+ inline
+ local_date_time
+ operator-=(local_date_time& t, const boost::gregorian::years& y)
+ {
+ // get_neg_offset returns a negative duration, so we add
+ return t += y.get_neg_offset(t.utc_time().date());
+ }
+
+
+}} // namespaces
+
+#endif // LOCAL_TIME_DATE_DURATION_OPERATORS_HPP___
diff --git a/boost/boost/date_time/local_time/dst_transition_day_rules.hpp b/boost/boost/date_time/local_time/dst_transition_day_rules.hpp
new file mode 100644
index 00000000000..baeb447779c
--- /dev/null
+++ b/boost/boost/date_time/local_time/dst_transition_day_rules.hpp
@@ -0,0 +1,77 @@
+#ifndef LOCAL_TIME_DST_TRANSITION_DAY_RULES_HPP__
+#define LOCAL_TIME_DST_TRANSITION_DAY_RULES_HPP__
+
+/* Copyright (c) 2003-2004 CrystalClear Software, Inc.
+ * Subject to the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2005/02/02 02:34:44 $
+ */
+
+
+#include "boost/date_time/gregorian/gregorian_types.hpp"
+#include "boost/date_time/dst_transition_generators.hpp"
+
+namespace boost {
+namespace local_time {
+
+ //! Provides rule of the form starting Apr 30 ending Oct 21
+ typedef date_time::dst_day_calc_rule<gregorian::date> dst_calc_rule;
+
+ struct partial_date_rule_spec
+ {
+ typedef gregorian::date date_type;
+ typedef gregorian::partial_date start_rule;
+ typedef gregorian::partial_date end_rule;
+ };
+
+ //! Provides rule of the form first Sunday in April, last Saturday in Oct
+ typedef date_time::day_calc_dst_rule<partial_date_rule_spec> partial_date_dst_rule;
+
+ struct first_last_rule_spec
+ {
+ typedef gregorian::date date_type;
+ typedef gregorian::first_kday_of_month start_rule;
+ typedef gregorian::last_kday_of_month end_rule;
+ };
+
+ //! Provides rule of the form first Sunday in April, last Saturday in Oct
+ typedef date_time::day_calc_dst_rule<first_last_rule_spec> first_last_dst_rule;
+
+ struct last_last_rule_spec
+ {
+ typedef gregorian::date date_type;
+ typedef gregorian::last_kday_of_month start_rule;
+ typedef gregorian::last_kday_of_month end_rule;
+ };
+
+ //! Provides rule of the form last Sunday in April, last Saturday in Oct
+ typedef date_time::day_calc_dst_rule<last_last_rule_spec> last_last_dst_rule;
+
+ struct nth_last_rule_spec
+ {
+ typedef gregorian::date date_type;
+ typedef gregorian::nth_kday_of_month start_rule;
+ typedef gregorian::last_kday_of_month end_rule;
+ };
+
+ //! Provides rule in form of [1st|2nd|3rd|4th] Sunday in April, last Sunday in Oct
+ typedef date_time::day_calc_dst_rule<nth_last_rule_spec> nth_last_dst_rule;
+
+ struct nth_kday_rule_spec
+ {
+ typedef gregorian::date date_type;
+ typedef gregorian::nth_kday_of_month start_rule;
+ typedef gregorian::nth_kday_of_month end_rule;
+ };
+
+ //! Provides rule in form of [1st|2nd|3rd|4th] Sunday in April/October
+ typedef date_time::day_calc_dst_rule<nth_kday_rule_spec> nth_kday_dst_rule;
+ //! Provides rule in form of [1st|2nd|3rd|4th] Sunday in April/October
+ typedef date_time::day_calc_dst_rule<nth_kday_rule_spec> nth_day_of_the_week_in_month_dst_rule;
+
+
+} }//namespace
+
+
+#endif
diff --git a/boost/boost/date_time/local_time/local_date_time.hpp b/boost/boost/date_time/local_time/local_date_time.hpp
new file mode 100644
index 00000000000..c706c244e99
--- /dev/null
+++ b/boost/boost/date_time/local_time/local_date_time.hpp
@@ -0,0 +1,525 @@
+#ifndef LOCAL_TIME_LOCAL_DATE_TIME_HPP__
+#define LOCAL_TIME_LOCAL_DATE_TIME_HPP__
+
+/* Copyright (c) 2003-2005 CrystalClear Software, Inc.
+ * Subject to the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2005/10/23 20:15:06 $
+ */
+
+
+#include "boost/date_time/time.hpp"
+#include "boost/date_time/posix_time/posix_time.hpp" //todo remove?
+#include "boost/shared_ptr.hpp"
+#include "boost/date_time/dst_rules.hpp"
+#include "boost/date_time/time_zone_base.hpp"
+#include "boost/date_time/special_defs.hpp"
+#include <string>
+#include <sstream>
+
+namespace boost {
+namespace local_time {
+
+ //! simple exception for reporting when STD or DST cannot be determined
+ struct ambiguous_result : public std::logic_error
+ {
+ ambiguous_result (std::string _msg="") :
+ std::logic_error(std::string("Daylight Savings Results are ambiguous: " + _msg)) {}
+ };
+ //! simple exception for when time label given cannot exist
+ struct time_label_invalid : public std::logic_error
+ {
+ time_label_invalid (std::string _msg="") :
+ std::logic_error(std::string("Time label given is invalid: " + _msg)) {}
+ };
+ struct dst_not_valid: public std::logic_error
+ {
+ dst_not_valid(std::string _msg="") :
+ std::logic_error(std::string("is_dst flag does not match resulting dst for time label given: " + _msg)) {}
+ };
+
+ //TODO: I think these should be in local_date_time_base and not
+ // necessarily brought into the namespace
+ using date_time::time_is_dst_result;
+ using date_time::is_in_dst;
+ using date_time::is_not_in_dst;
+ using date_time::ambiguous;
+ using date_time::invalid_time_label;
+
+ //! Representation of "wall-clock" time in a particular time zone
+ /*! Representation of "wall-clock" time in a particular time zone
+ * Local_date_time_base holds a time value (date and time offset from 00:00)
+ * along with a time zone. The time value is stored as UTC and conversions
+ * to wall clock time are made as needed. This approach allows for
+ * operations between wall-clock times in different time zones, and
+ * daylight savings time considerations, to be made. Time zones are
+ * required to be in the form of a boost::shared_ptr<time_zone_base>.
+ */
+ template<class utc_time_=posix_time::ptime,
+ class tz_type=date_time::time_zone_base<utc_time_,char> >
+ class local_date_time_base : public date_time::base_time<utc_time_,
+ boost::posix_time::posix_time_system> {
+ public:
+ typedef utc_time_ utc_time_type;
+ typedef typename utc_time_type::time_duration_type time_duration_type;
+ typedef typename utc_time_type::date_type date_type;
+ typedef typename date_type::duration_type date_duration_type;
+ typedef typename utc_time_type::time_system_type time_system_type;
+ /*! This constructor interprets the passed time as a UTC time.
+ * So, for example, if the passed timezone is UTC-5 then the
+ * time will be adjusted back 5 hours. The time zone allows for
+ * automatic calculation of whether the particular time is adjusted for
+ * daylight savings, etc.
+ * If the time zone shared pointer is null then time stays unadjusted.
+ *@param t A UTC time
+ *@param tz Timezone for to adjust the UTC time to.
+ */
+ local_date_time_base(utc_time_type t,
+ boost::shared_ptr<tz_type> tz) :
+ date_time::base_time<utc_time_type, time_system_type>(t),
+ zone_(tz)
+ {
+ // param was already utc so nothing more to do
+ }
+
+ /*! This constructs a local time -- the passed time information
+ * understood to be in the passed tz. The DST flag must be passed
+ * to indicate whether the time is in daylight savings or not.
+ * @throws -- time_label_invalid if the time passed does not exist in
+ * the given locale. The non-existent case occurs typically
+ * during the shift-back from daylight savings time. When
+ * the clock is shifted forward a range of times
+ * (2 am to 3 am in the US) is skipped and hence is invalid.
+ * @throws -- dst_not_valid if the DST flag is passed for a period
+ * where DST is not active.
+ */
+ local_date_time_base(date_type d,
+ time_duration_type td,
+ boost::shared_ptr<tz_type> tz,
+ bool dst_flag) : //necessary for constr_adj()
+ date_time::base_time<utc_time_type,time_system_type>(construction_adjustment(utc_time_type(d, td), tz, dst_flag)),
+ zone_(tz)
+ {
+ if(tz != boost::shared_ptr<tz_type>() && tz->has_dst()){
+
+ // d & td are already local so we use them
+ time_is_dst_result result = check_dst(d, td, tz);
+ bool in_dst = (result == is_in_dst); // less processing than is_dst()
+
+ // ambig occurs at end, invalid at start
+ if(result == invalid_time_label){
+ // Ex: 2:15am local on trans-in day in nyc, dst_flag irrelevant
+ std::stringstream ss;
+ ss << "time given: " << d << ' ' << td;
+ throw time_label_invalid(ss.str());
+ }
+ else if(result != ambiguous && in_dst != dst_flag){
+ // is dst_flag accurate?
+ // Ex: false flag in NYC in June
+ std::stringstream ss;
+ ss << "flag given: " << (dst_flag ? "dst=true" : "dst=false")
+ << ", dst calculated: " << (in_dst ? "dst=true" : "dst=false");
+ throw dst_not_valid(ss.str());
+ }
+
+ // everything checks out and conversion to utc already done
+ }
+ }
+
+ //TODO maybe not the right set...Ignore the last 2 for now...
+ enum DST_CALC_OPTIONS { EXCEPTION_ON_ERROR, NOT_DATE_TIME_ON_ERROR };
+ //ASSUME_DST_ON_ERROR, ASSUME_NOT_DST_ON_ERROR };
+
+ /*! This constructs a local time -- the passed time information
+ * understood to be in the passed tz. The DST flag is calculated
+ * according to the specified rule.
+ */
+ local_date_time_base(date_type d,
+ time_duration_type td,
+ boost::shared_ptr<tz_type> tz,
+ DST_CALC_OPTIONS calc_option) :
+ // dummy value - time_ is set in constructor code
+ date_time::base_time<utc_time_type,time_system_type>(utc_time_type(d,td)),
+ zone_(tz)
+ {
+ time_is_dst_result result = check_dst(d, td, tz);
+ if(result == ambiguous) {
+ if(calc_option == EXCEPTION_ON_ERROR){
+ std::stringstream ss;
+ ss << "time given: " << d << ' ' << td;
+ throw ambiguous_result(ss.str());
+ }
+ else{ // NADT on error
+ this->time_ = posix_time::posix_time_system::get_time_rep(date_type(date_time::not_a_date_time), time_duration_type(date_time::not_a_date_time));
+ }
+ }
+ else if(result == invalid_time_label){
+ if(calc_option == EXCEPTION_ON_ERROR){
+ std::stringstream ss;
+ ss << "time given: " << d << ' ' << td;
+ throw time_label_invalid(ss.str());
+ }
+ else{ // NADT on error
+ this->time_ = posix_time::posix_time_system::get_time_rep(date_type(date_time::not_a_date_time), time_duration_type(date_time::not_a_date_time));
+ }
+ }
+ else if(result == is_in_dst){
+ utc_time_type t =
+ construction_adjustment(utc_time_type(d, td), tz, true);
+ this->time_ = posix_time::posix_time_system::get_time_rep(t.date(),
+ t.time_of_day());
+ }
+ else{
+ utc_time_type t =
+ construction_adjustment(utc_time_type(d, td), tz, false);
+ this->time_ = posix_time::posix_time_system::get_time_rep(t.date(),
+ t.time_of_day());
+ }
+ }
+
+
+ //! Determines if given time label is in daylight savings for given zone
+ /*! Determines if given time label is in daylight savings for given zone.
+ * Takes a date and time_duration representing a local time, along
+ * with time zone, and returns a time_is_dst_result object as result.
+ */
+ static time_is_dst_result check_dst(date_type d,
+ time_duration_type td,
+ boost::shared_ptr<tz_type> tz)
+ {
+ if(tz != boost::shared_ptr<tz_type>() && tz->has_dst()) {
+ typedef typename date_time::dst_calculator<date_type, time_duration_type> dst_calculator;
+ return dst_calculator::local_is_dst(
+ d, td,
+ tz->dst_local_start_time(d.year()).date(),
+ tz->dst_local_start_time(d.year()).time_of_day(),
+ tz->dst_local_end_time(d.year()).date(),
+ tz->dst_local_end_time(d.year()).time_of_day(),
+ tz->dst_offset()
+ );
+ }
+ else{
+ return is_not_in_dst;
+ }
+ }
+
+ //! Simple destructor, releases time zone if last referrer
+ ~local_date_time_base() {};
+
+ //! Copy constructor
+ local_date_time_base(const local_date_time_base& rhs) :
+ date_time::base_time<utc_time_type, time_system_type>(rhs),
+ zone_(rhs.zone_)
+ {}
+
+ //! Special values constructor
+ explicit local_date_time_base(const boost::date_time::special_values sv,
+ boost::shared_ptr<tz_type> tz = boost::shared_ptr<tz_type>()) :
+ date_time::base_time<utc_time_type, time_system_type>(utc_time_type(sv)),
+ zone_(tz)
+ {}
+
+ //! returns time zone associated with calling instance
+ boost::shared_ptr<tz_type> zone() const
+ {
+ return zone_;
+ }
+ //! returns false is time_zone is NULL and if time value is a special_value
+ bool is_dst() const
+ {
+ if(zone_ != boost::shared_ptr<tz_type>() && zone_->has_dst() && !this->is_special()) {
+ // check_dst takes a local time, *this is utc
+ utc_time_type lt(this->time_);
+ lt += zone_->base_utc_offset();
+ // dst_offset only needs to be considered with ambiguous time labels
+ // make that adjustment there
+
+ switch(check_dst(lt.date(), lt.time_of_day(), zone_)){
+ case is_not_in_dst:
+ return false;
+ case is_in_dst:
+ return true;
+ case ambiguous:
+ if(lt + zone_->dst_offset() < zone_->dst_local_end_time(lt.date().year())) {
+ return true;
+ }
+ break;
+ case invalid_time_label:
+ if(lt >= zone_->dst_local_start_time(lt.date().year())) {
+ return true;
+ }
+ break;
+ }
+ }
+ return false;
+ }
+ //! Returns object's time value as a utc representation
+ utc_time_type utc_time() const
+ {
+ return utc_time_type(this->time_);
+ }
+ //! Returns object's time value as a local representation
+ utc_time_type local_time() const
+ {
+ if(zone_ != boost::shared_ptr<tz_type>()){
+ utc_time_type lt = this->utc_time() + zone_->base_utc_offset();
+ if (is_dst()) {
+ lt += zone_->dst_offset();
+ }
+ return lt;
+ }
+ return utc_time_type(this->time_);
+ }
+ //! Returns string in the form "2003-Aug-20 05:00:00 EDT"
+ /*! Returns string in the form "2003-Aug-20 05:00:00 EDT". If
+ * time_zone is NULL the time zone abbreviation will be "UTC". The time
+ * zone abbrev will not be included if calling object is a special_value*/
+ std::string to_string() const
+ {
+ //TODO is this a temporary function ???
+ std::stringstream ss;
+ if(this->is_special()){
+ ss << utc_time();
+ return ss.str();
+ }
+ if(zone_ == boost::shared_ptr<tz_type>()) {
+ ss << utc_time() << " UTC";
+ return ss.str();
+ }
+ bool is_dst_ = is_dst();
+ utc_time_type lt = this->utc_time() + zone_->base_utc_offset();
+ if (is_dst_) {
+ lt += zone_->dst_offset();
+ }
+ ss << local_time() << " ";
+ if (is_dst()) {
+ ss << zone_->dst_zone_abbrev();
+ }
+ else {
+ ss << zone_->std_zone_abbrev();
+ }
+ return ss.str();
+ }
+ /*! returns a local_date_time_base in the given time zone with the
+ * optional time_duration added. */
+ local_date_time_base local_time_in(boost::shared_ptr<tz_type> new_tz,
+ time_duration_type td=time_duration_type(0,0,0)) const
+ {
+ return local_date_time_base(utc_time_type(this->time_) + td, new_tz);
+ }
+
+ //! Returns name of associated time zone or "Coordinated Universal Time".
+ /*! Optional bool parameter will return time zone as an offset
+ * (ie "+07:00" extended iso format). Empty string is returned for
+ * classes that do not use a time_zone */
+ std::string zone_name(bool as_offset=false) const
+ {
+ if(zone_ == boost::shared_ptr<tz_type>()) {
+ if(as_offset) {
+ return std::string("Z");
+ }
+ else {
+ return std::string("Coordinated Universal Time");
+ }
+ }
+ if (is_dst()) {
+ if(as_offset) {
+ time_duration_type td = zone_->base_utc_offset();
+ td += zone_->dst_offset();
+ return zone_as_offset(td, ":");
+ }
+ else {
+ return zone_->dst_zone_name();
+ }
+ }
+ else {
+ if(as_offset) {
+ time_duration_type td = zone_->base_utc_offset();
+ return zone_as_offset(td, ":");
+ }
+ else {
+ return zone_->std_zone_name();
+ }
+ }
+ }
+ //! Returns abbreviation of associated time zone or "UTC".
+ /*! Optional bool parameter will return time zone as an offset
+ * (ie "+0700" iso format). Empty string is returned for classes
+ * that do not use a time_zone */
+ std::string zone_abbrev(bool as_offset=false) const
+ {
+ if(zone_ == boost::shared_ptr<tz_type>()) {
+ if(as_offset) {
+ return std::string("Z");
+ }
+ else {
+ return std::string("UTC");
+ }
+ }
+ if (is_dst()) {
+ if(as_offset) {
+ time_duration_type td = zone_->base_utc_offset();
+ td += zone_->dst_offset();
+ return zone_as_offset(td, "");
+ }
+ else {
+ return zone_->dst_zone_abbrev();
+ }
+ }
+ else {
+ if(as_offset) {
+ time_duration_type td = zone_->base_utc_offset();
+ return zone_as_offset(td, "");
+ }
+ else {
+ return zone_->std_zone_abbrev();
+ }
+ }
+ }
+
+ //! returns a posix_time_zone string for the associated time_zone. If no time_zone, "UTC+00" is returned.
+ std::string zone_as_posix_string() const
+ {
+ if(zone_ == shared_ptr<tz_type>()) {
+ return std::string("UTC+00");
+ }
+ return zone_->to_posix_string();
+ }
+
+ //! Equality comparison operator
+ /*bool operator==(const date_time::base_time<boost::posix_time::ptime,boost::posix_time::posix_time_system>& rhs) const
+ { // fails due to rhs.time_ being protected
+ return date_time::base_time<boost::posix_time::ptime,boost::posix_time::posix_time_system>::operator==(rhs);
+ //return this->time_ == rhs.time_;
+ }*/
+ //! Equality comparison operator
+ bool operator==(const local_date_time_base& rhs) const
+ {
+ return time_system_type::is_equal(this->time_, rhs.time_);
+ }
+ //! Non-Equality comparison operator
+ bool operator!=(const local_date_time_base& rhs) const
+ {
+ return !(*this == rhs);
+ }
+ //! Less than comparison operator
+ bool operator<(const local_date_time_base& rhs) const
+ {
+ return time_system_type::is_less(this->time_, rhs.time_);
+ }
+ //! Less than or equal to comparison operator
+ bool operator<=(const local_date_time_base& rhs) const
+ {
+ return (*this < rhs || *this == rhs);
+ }
+ //! Greater than comparison operator
+ bool operator>(const local_date_time_base& rhs) const
+ {
+ return !(*this <= rhs);
+ }
+ //! Greater than or equal to comparison operator
+ bool operator>=(const local_date_time_base& rhs) const
+ {
+ return (*this > rhs || *this == rhs);
+ }
+
+ //! Local_date_time + date_duration
+ local_date_time_base operator+(const date_duration_type& dd) const
+ {
+ return local_date_time_base(time_system_type::add_days(this->time_,dd), zone_);
+ }
+ //! Local_date_time += date_duration
+ local_date_time_base operator+=(const date_duration_type& dd)
+ {
+ this->time_ = time_system_type::add_days(this->time_,dd);
+ return *this;
+ }
+ //! Local_date_time - date_duration
+ local_date_time_base operator-(const date_duration_type& dd) const
+ {
+ return local_date_time_base(time_system_type::subtract_days(this->time_,dd), zone_);
+ }
+ //! Local_date_time -= date_duration
+ local_date_time_base operator-=(const date_duration_type& dd)
+ {
+ this->time_ = time_system_type::subtract_days(this->time_,dd);
+ return *this;
+ }
+ //! Local_date_time + time_duration
+ local_date_time_base operator+(const time_duration_type& td) const
+ {
+ return local_date_time_base(time_system_type::add_time_duration(this->time_,td), zone_);
+ }
+ //! Local_date_time += time_duration
+ local_date_time_base operator+=(const time_duration_type& td)
+ {
+ this->time_ = time_system_type::add_time_duration(this->time_,td);
+ return *this;
+ }
+ //! Local_date_time - time_duration
+ local_date_time_base operator-(const time_duration_type& td) const
+ {
+ return local_date_time_base(time_system_type::subtract_time_duration(this->time_,td), zone_);
+ }
+ //! Local_date_time -= time_duration
+ local_date_time_base operator-=(const time_duration_type& td)
+ {
+ this->time_ = time_system_type::subtract_time_duration(this->time_,td);
+ return *this;
+ }
+ //! local_date_time -= local_date_time --> time_duration_type
+ time_duration_type operator-(const local_date_time_base& rhs) const
+ {
+ return utc_time_type(this->time_) - utc_time_type(rhs.time_);
+ }
+ private:
+ boost::shared_ptr<tz_type> zone_;
+ //bool is_dst_;
+
+ /*! Adjust the passed in time to UTC?
+ */
+ utc_time_type construction_adjustment(utc_time_type t,
+ boost::shared_ptr<tz_type> z,
+ bool dst_flag)
+ {
+ if(z != boost::shared_ptr<tz_type>()) {
+ if(dst_flag && z->has_dst()) {
+ t -= z->dst_offset();
+ } // else no adjust
+ t -= z->base_utc_offset();
+ }
+ return t;
+ }
+
+ /*! Simple formatting code -- todo remove this?
+ */
+ std::string zone_as_offset(const time_duration_type& td,
+ const std::string& separator) const
+ {
+ std::stringstream ss;
+ if(td.is_negative()) {
+ // a negative duration is represented as "-[h]h:mm"
+ // we require two digits for the hour. A positive duration
+ // with the %H flag will always give two digits
+ ss << "-";
+ }
+ else {
+ ss << "+";
+ }
+ ss << std::setw(2) << std::setfill('0')
+ << date_time::absolute_value(td.hours())
+ << separator
+ << std::setw(2) << std::setfill('0')
+ << date_time::absolute_value(td.minutes());
+ return ss.str();
+ }
+ };
+
+ //!Use the default parameters to define local_date_time
+ typedef local_date_time_base<> local_date_time;
+
+} }
+
+
+#endif
diff --git a/boost/boost/date_time/local_time/local_time.hpp b/boost/boost/date_time/local_time/local_time.hpp
new file mode 100644
index 00000000000..dd3928d441e
--- /dev/null
+++ b/boost/boost/date_time/local_time/local_time.hpp
@@ -0,0 +1,24 @@
+#ifndef LOCAL_TIME_LOCAL_TIME_HPP__
+#define LOCAL_TIME_LOCAL_TIME_HPP__
+
+/* Copyright (c) 2003-2004 CrystalClear Software, Inc.
+ * Subject to the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2005/05/03 14:27:52 $
+ */
+
+#include "boost/date_time/posix_time/posix_time.hpp"
+#include "boost/date_time/local_time/local_date_time.hpp"
+#include "boost/date_time/local_time/local_time_types.hpp"
+#if !defined(USE_DATE_TIME_PRE_1_33_FACET_IO)
+#include "boost/date_time/local_time/local_time_io.hpp"
+#endif // USE_DATE_TIME_PRE_1_33_FACET_IO
+#include "boost/date_time/local_time/posix_time_zone.hpp"
+#include "boost/date_time/local_time/custom_time_zone.hpp"
+#include "boost/date_time/local_time/tz_database.hpp"
+#include "boost/date_time/local_time/conversion.hpp"
+#include "boost/date_time/time_zone_base.hpp"
+
+
+#endif
diff --git a/boost/boost/date_time/local_time/local_time_io.hpp b/boost/boost/date_time/local_time/local_time_io.hpp
new file mode 100644
index 00000000000..5cec69d2ebd
--- /dev/null
+++ b/boost/boost/date_time/local_time/local_time_io.hpp
@@ -0,0 +1,118 @@
+#ifndef BOOST_DATE_TIME_LOCAL_TIME_IO_HPP__
+#define BOOST_DATE_TIME_LOCAL_TIME_IO_HPP__
+
+/* Copyright (c) 2003-2004 CrystalClear Software, Inc.
+ * Subject to the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2005/06/28 13:11:45 $
+ */
+
+#include <iostream>
+#include "boost/date_time/local_time/local_date_time.hpp"
+#include "boost/date_time/local_time/posix_time_zone.hpp"
+#include "boost/date_time/time_facet.hpp"
+#include "boost/date_time/string_convert.hpp"
+#include "boost/io/ios_state.hpp"
+
+namespace boost {
+namespace local_time {
+
+ typedef boost::date_time::time_facet<local_date_time, wchar_t> wlocal_time_facet;
+ typedef boost::date_time::time_facet<local_date_time, char> local_time_facet;
+
+ typedef boost::date_time::time_input_facet<local_date_time::utc_time_type,wchar_t> wlocal_time_input_facet;
+ typedef boost::date_time::time_input_facet<local_date_time::utc_time_type,char> local_time_input_facet;
+
+ //! operator<< for local_date_time - see local_time docs for formatting details
+ template<class CharT, class TraitsT>
+ inline
+ std::basic_ostream<CharT, TraitsT>&
+ operator<<(std::basic_ostream<CharT, TraitsT>& os, const local_date_time& ldt)
+ {
+ boost::io::ios_flags_saver iflags(os);
+ typedef local_date_time time_type;//::utc_time_type typename
+ typedef date_time::time_facet<time_type, CharT> custom_time_facet;
+ typedef std::time_put<CharT> std_time_facet;
+ std::ostreambuf_iterator<CharT> oitr(os);
+
+ if(std::has_facet<custom_time_facet>(os.getloc())) {
+ std::use_facet<custom_time_facet>(os.getloc()).put(oitr,
+ os,
+ os.fill(),
+ ldt);
+ }
+ else {
+ custom_time_facet* f = new custom_time_facet();
+ std::locale l = std::locale(os.getloc(), f);
+ os.imbue(l);
+ f->put(oitr, os, os.fill(), ldt);
+ }
+
+ return os;
+ }
+
+
+ //! input operator for local_date_time
+ template <class CharT, class Traits>
+ inline
+ std::basic_istream<CharT, Traits>&
+ operator>>(std::basic_istream<CharT, Traits>& is, local_date_time& ldt)
+ {
+ boost::io::ios_flags_saver iflags(is);
+ typename std::basic_istream<CharT, Traits>::sentry strm_sentry(is, false);
+ if (strm_sentry) {
+ try {
+ typedef typename local_date_time::utc_time_type utc_time_type;
+ typedef typename date_time::time_input_facet<utc_time_type, CharT> time_input_facet;
+
+ // intermediate objects
+ std::basic_string<CharT> tz_str;
+ utc_time_type pt(not_a_date_time);
+
+ std::istreambuf_iterator<CharT,Traits> sit(is), str_end;
+ if(std::has_facet<time_input_facet>(is.getloc())) {
+ std::use_facet<time_input_facet>(is.getloc()).get_local_time(sit, str_end, is, pt, tz_str);
+ }
+ else {
+ time_input_facet* f = new time_input_facet();
+ std::locale l = std::locale(is.getloc(), f);
+ is.imbue(l);
+ f->get_local_time(sit, str_end, is, pt, tz_str);
+ }
+ if(tz_str.empty()) {
+ time_zone_ptr null_ptr;
+ // a null time_zone_ptr creates a local_date_time that is UTC
+ ldt = local_date_time(pt, null_ptr);
+ }
+ else {
+ time_zone_ptr tz_ptr(new posix_time_zone(date_time::convert_string_type<CharT,char>(tz_str)));
+ // the "date & time" constructor expects the time label to *not* be utc.
+ // a posix_tz_string also expects the time label to *not* be utc.
+ ldt = local_date_time(pt.date(), pt.time_of_day(), tz_ptr, local_date_time::EXCEPTION_ON_ERROR);
+ }
+ }
+ catch(...) {
+ // mask tells us what exceptions are turned on
+ std::ios_base::iostate exception_mask = is.exceptions();
+ // if the user wants exceptions on failbit, we'll rethrow our
+ // date_time exception & set the failbit
+ if(std::ios_base::failbit & exception_mask) {
+ try { is.setstate(std::ios_base::failbit); }
+ catch(std::ios_base::failure&) {} // ignore this one
+ throw; // rethrow original exception
+ }
+ else {
+ // if the user want's to fail quietly, we simply set the failbit
+ is.setstate(std::ios_base::failbit);
+ }
+
+ }
+ }
+ return is;
+ }
+
+
+} } // namespaces
+
+#endif // BOOST_DATE_TIME_LOCAL_TIME_IO_HPP__
diff --git a/boost/boost/date_time/local_time/local_time_types.hpp b/boost/boost/date_time/local_time/local_time_types.hpp
new file mode 100644
index 00000000000..78c1578c590
--- /dev/null
+++ b/boost/boost/date_time/local_time/local_time_types.hpp
@@ -0,0 +1,52 @@
+#ifndef LOCAL_TIME_LOCAL_TIME_TYPES_HPP__
+#define LOCAL_TIME_LOCAL_TIME_TYPES_HPP__
+
+/* Copyright (c) 2003-2004 CrystalClear Software, Inc.
+ * Subject to the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2005/10/23 20:15:07 $
+ */
+
+#include "boost/date_time/local_time/local_date_time.hpp"
+#include "boost/date_time/period.hpp"
+#include "boost/date_time/time_iterator.hpp"
+#include "boost/date_time/compiler_config.hpp"
+#if defined(BOOST_DATE_TIME_OPTIONAL_GREGORIAN_TYPES)
+#include "boost/date_time/local_time/date_duration_operators.hpp"
+#endif //BOOST_DATE_TIME_OPTIONAL_GREGORIAN_TYPES
+#include "boost/date_time/local_time/custom_time_zone.hpp"
+
+namespace boost {
+namespace local_time {
+
+ typedef boost::date_time::period<local_date_time,
+ boost::posix_time::time_duration> local_time_period;
+
+ typedef date_time::time_itr<local_date_time> local_time_iterator;
+
+ typedef date_time::second_clock<local_date_time> local_sec_clock;
+ typedef date_time::microsec_clock<local_date_time> local_microsec_clock;
+
+ typedef date_time::time_zone_base<posix_time::ptime, char> time_zone;
+ typedef date_time::time_zone_base<posix_time::ptime, wchar_t> wtime_zone;
+
+ //! Shared Pointer for custom_time_zone and posix_time_zone objects
+ typedef boost::shared_ptr<time_zone> time_zone_ptr;
+ typedef boost::shared_ptr<wtime_zone> wtime_zone_ptr;
+
+ typedef date_time::time_zone_names_base<char> time_zone_names;
+ typedef date_time::time_zone_names_base<wchar_t> wtime_zone_names;
+
+ //bring special enum values into the namespace
+ using date_time::special_values;
+ using date_time::not_special;
+ using date_time::neg_infin;
+ using date_time::pos_infin;
+ using date_time::not_a_date_time;
+ using date_time::max_date_time;
+ using date_time::min_date_time;
+
+}} // namespaces
+
+#endif // LOCAL_TIME_LOCAL_TIME_TYPES_HPP__
diff --git a/boost/boost/date_time/local_time/posix_time_zone.hpp b/boost/boost/date_time/local_time/posix_time_zone.hpp
new file mode 100644
index 00000000000..b8d4715af26
--- /dev/null
+++ b/boost/boost/date_time/local_time/posix_time_zone.hpp
@@ -0,0 +1,443 @@
+#ifndef _DATE_TIME_POSIX_TIME_ZONE__
+#define _DATE_TIME_POSIX_TIME_ZONE__
+
+/* Copyright (c) 2003-2005 CrystalClear Software, Inc.
+ * Subject to the Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2005/10/23 20:15:07 $
+ */
+
+#include <string>
+#include <sstream>
+#include "boost/date_time/gregorian/gregorian.hpp"
+#include "boost/date_time/time_zone_names.hpp"
+#include "boost/date_time/time_zone_base.hpp"
+#include "boost/date_time/local_time/dst_transition_day_rules.hpp"
+#include "boost/date_time/posix_time/posix_time.hpp"
+#include "boost/date_time/string_convert.hpp"
+#include "boost/date_time/time_parsing.hpp"
+#include "boost/tokenizer.hpp"
+#include <stdexcept>
+
+namespace boost{
+namespace local_time{
+
+ //! simple exception for UTC and Daylight savings start/end offsets
+ struct bad_offset : public std::out_of_range
+ {
+ bad_offset(std::string _msg="") : std::out_of_range(std::string("Offset out of range: " + _msg)) {}
+ };
+ //! simple exception for UTC daylight savings adjustment
+ struct bad_adjustment : public std::out_of_range
+ {
+ bad_adjustment(std::string _msg="") : std::out_of_range(std::string("Adjustment out of range: " + _msg)) {}
+ };
+
+ typedef boost::date_time::dst_adjustment_offsets<boost::posix_time::time_duration> dst_adjustment_offsets;
+
+ //! A time zone class constructed from a POSIX time zone string
+ /*! A POSIX time zone string takes the form of:<br>
+ * "std offset dst [offset],start[/time],end[/time]" (w/no spaces)
+ * 'std' specifies the abbrev of the time zone.<br>
+ * 'offset' is the offset from UTC.<br>
+ * 'dst' specifies the abbrev of the time zone during daylight savings time.<br>
+ * The second offset is how many hours changed during DST. Default=1<br>
+ * 'start' and'end' are the dates when DST goes into (and out of) effect.<br>
+ * 'offset' takes the form of: [+|-]hh[:mm[:ss]] {h=0-23, m/s=0-59}<br>
+ * 'time' and 'offset' take the same form. Time defaults=02:00:00<br>
+ * 'start' and 'end' can be one of three forms:<br>
+ * Mm.w.d {month=1-12, week=1-5 (5 is always last), day=0-6}<br>
+ * Jn {n=1-365 Feb29 is never counted}<br>
+ * n {n=0-365 Feb29 is counted in leap years}<br>
+ * Example "PST-5PDT01:00:00,M4.1.0/02:00:00,M10.1.0/02:00:00"
+ * <br>
+ * Exceptions will be thrown under these conditions:<br>
+ * An invalid date spec (see date class)<br>
+ * A boost::local_time::bad_offset exception will be thrown for:<br>
+ * A DST start or end offset that is negative or more than 24 hours<br>
+ * A UTC zone that is greater than +12 or less than -12 hours<br>
+ * A boost::local_time::bad_adjustment exception will be thrown for:<br>
+ * A DST adjustment that is 24 hours or more (positive or negative)<br>
+ */
+ template<class CharT>
+ class posix_time_zone_base : public date_time::time_zone_base<posix_time::ptime,CharT> {
+ public:
+ typedef boost::posix_time::time_duration time_duration_type;
+ typedef date_time::time_zone_names_base<CharT> time_zone_names;
+ typedef date_time::time_zone_base<posix_time::ptime,CharT> base_type;
+ typedef typename base_type::string_type string_type;
+ typedef CharT char_type;
+ typedef typename base_type::stringstream_type stringstream_type;
+ typedef boost::char_separator<char_type, std::char_traits<char_type> > char_separator_type;
+ typedef boost::tokenizer<char_separator_type,
+ typename string_type::const_iterator,
+ string_type> tokenizer_type;
+ typedef typename boost::tokenizer<char_separator_type,
+ typename string_type::const_iterator,
+ string_type>::iterator tokenizer_iterator_type;
+
+ //! Construct from a POSIX time zone string
+ posix_time_zone_base(const string_type& s) :
+ //zone_names_("std_name","std_abbrev","no-dst","no-dst"),
+ zone_names_(),
+ has_dst_(false),
+ base_utc_offset_(posix_time::hours(0)),
+ dst_offsets_(posix_time::hours(0),posix_time::hours(0),posix_time::hours(0)),
+ dst_calc_rules_()
+ {
+ const char_type sep_chars[2] = {','};
+ char_separator_type sep(sep_chars);
+ tokenizer_type tokens(s, sep);
+ tokenizer_iterator_type it = tokens.begin();
+ calc_zone(*it++);
+ if(has_dst_){
+ string_type tmp_str = *it++;
+ calc_rules(tmp_str, *it);
+ }
+ }
+ virtual ~posix_time_zone_base() {};
+ //!String for the zone when not in daylight savings (eg: EST)
+ virtual string_type std_zone_abbrev()const
+ {
+ return zone_names_.std_zone_abbrev();
+ }
+ //!String for the timezone when in daylight savings (eg: EDT)
+ /*! For those time zones that have no DST, an empty string is used */
+ virtual string_type dst_zone_abbrev() const
+ {
+ return zone_names_.dst_zone_abbrev();
+ }
+ //!String for the zone when not in daylight savings (eg: Eastern Standard Time)
+ /*! The full STD name is not extracted from the posix time zone string.
+ * Therefore, the STD abbreviation is used in it's place */
+ virtual string_type std_zone_name()const
+ {
+ return zone_names_.std_zone_name();
+ }
+ //!String for the timezone when in daylight savings (eg: Eastern Daylight Time)
+ /*! The full DST name is not extracted from the posix time zone string.
+ * Therefore, the STD abbreviation is used in it's place. For time zones
+ * that have no DST, an empty string is used */
+ virtual string_type dst_zone_name()const
+ {
+ return zone_names_.dst_zone_name();
+ }
+ //! True if zone uses daylight savings adjustments otherwise false
+ virtual bool has_dst()const
+ {
+ return has_dst_;
+ }
+ //! Local time that DST starts -- NADT if has_dst is false
+ virtual posix_time::ptime dst_local_start_time(gregorian::greg_year y)const
+ {
+ gregorian::date d(gregorian::not_a_date_time);
+ if(has_dst_)
+ {
+ d = dst_calc_rules_->start_day(y);
+ }
+ return posix_time::ptime(d, dst_offsets_.dst_start_offset_);
+ }
+ //! Local time that DST ends -- NADT if has_dst is false
+ virtual posix_time::ptime dst_local_end_time(gregorian::greg_year y)const
+ {
+ gregorian::date d(gregorian::not_a_date_time);
+ if(has_dst_)
+ {
+ d = dst_calc_rules_->end_day(y);
+ }
+ return posix_time::ptime(d, dst_offsets_.dst_end_offset_);
+ }
+ //! Base offset from UTC for zone (eg: -07:30:00)
+ virtual time_duration_type base_utc_offset()const
+ {
+ return base_utc_offset_;
+ }
+ //! Adjustment forward or back made while DST is in effect
+ virtual time_duration_type dst_offset()const
+ {
+ return dst_offsets_.dst_adjust_;
+ }
+
+ //! Returns a POSIX time_zone string for this object
+ virtual string_type to_posix_string() const
+ {
+ // std offset dst [offset],start[/time],end[/time] - w/o spaces
+ stringstream_type ss;
+ ss.fill('0');
+ boost::shared_ptr<dst_calc_rule> no_rules;
+ // std
+ ss << std_zone_abbrev();
+ // offset
+ if(base_utc_offset().is_negative()) {
+ // inverting the sign guarantees we get two digits
+ ss << '-' << std::setw(2) << base_utc_offset().invert_sign().hours();
+ }
+ else {
+ ss << '+' << std::setw(2) << base_utc_offset().hours();
+ }
+ if(base_utc_offset().minutes() != 0 || base_utc_offset().seconds() != 0) {
+ ss << ':' << std::setw(2) << base_utc_offset().minutes();
+ if(base_utc_offset().seconds() != 0) {
+ ss << ':' << std::setw(2) << base_utc_offset().seconds();
+ }
+ }
+ if(dst_calc_rules_ != no_rules) {
+ // dst
+ ss << dst_zone_abbrev();
+ // dst offset
+ if(dst_offset().is_negative()) {
+ // inverting the sign guarantees we get two digits
+ ss << '-' << std::setw(2) << dst_offset().invert_sign().hours();
+ }
+ else {
+ ss << '+' << std::setw(2) << dst_offset().hours();
+ }
+ if(dst_offset().minutes() != 0 || dst_offset().seconds() != 0) {
+ ss << ':' << std::setw(2) << dst_offset().minutes();
+ if(dst_offset().seconds() != 0) {
+ ss << ':' << std::setw(2) << dst_offset().seconds();
+ }
+ }
+ // start/time
+ ss << ',' << date_time::convert_string_type<char, char_type>(dst_calc_rules_->start_rule_as_string()) << '/'
+ << std::setw(2) << dst_offsets_.dst_start_offset_.hours() << ':'
+ << std::setw(2) << dst_offsets_.dst_start_offset_.minutes();
+ if(dst_offsets_.dst_start_offset_.seconds() != 0) {
+ ss << ':' << std::setw(2) << dst_offsets_.dst_start_offset_.seconds();
+ }
+ // end/time
+ ss << ',' << date_time::convert_string_type<char, char_type>(dst_calc_rules_->end_rule_as_string()) << '/'
+ << std::setw(2) << dst_offsets_.dst_end_offset_.hours() << ':'
+ << std::setw(2) << dst_offsets_.dst_end_offset_.minutes();
+ if(dst_offsets_.dst_end_offset_.seconds() != 0) {
+ ss << ':' << std::setw(2) << dst_offsets_.dst_end_offset_.seconds();
+ }
+ }
+
+ return ss.str();
+ }
+ private:
+ time_zone_names zone_names_;
+ bool has_dst_;
+ time_duration_type base_utc_offset_;
+ dst_adjustment_offsets dst_offsets_;
+ boost::shared_ptr<dst_calc_rule> dst_calc_rules_;
+
+ /*! Extract time zone abbreviations for STD & DST as well
+ * as the offsets for the time shift that occurs and how
+ * much of a shift. At this time full time zone names are
+ * NOT extracted so the abbreviations are used in their place */
+ void calc_zone(const string_type& obj){
+ const char_type empty_string[2] = {'\0'};
+ stringstream_type ss(empty_string);
+ typename string_type::const_iterator sit = obj.begin();
+ string_type l_std_zone_abbrev, l_dst_zone_abbrev;
+
+ // get 'std' name/abbrev
+ while(std::isalpha(*sit)){
+ ss << *sit++;
+ }
+ l_std_zone_abbrev = ss.str();
+ ss.str(empty_string);
+
+ // get UTC offset
+ if(sit != obj.end()){
+ // get duration
+ while(sit != obj.end() && !std::isalpha(*sit)){
+ ss << *sit++;
+ }
+ base_utc_offset_ = date_time::str_from_delimited_time_duration<time_duration_type,char_type>(ss.str());
+ ss.str(empty_string);
+
+ // base offset must be within range of -12 hours to +12 hours
+ if(base_utc_offset_ < time_duration_type(-12,0,0) ||
+ base_utc_offset_ > time_duration_type(12,0,0))
+ {
+ throw bad_offset(posix_time::to_simple_string(base_utc_offset_));
+ }
+ }
+
+ // get DST data if given
+ if(sit != obj.end()){
+ has_dst_ = true;
+
+ // get 'dst' name/abbrev
+ while(sit != obj.end() && std::isalpha(*sit)){
+ ss << *sit++;
+ }
+ l_dst_zone_abbrev = ss.str();
+ ss.str(empty_string);
+
+ // get DST offset if given
+ if(sit != obj.end()){
+ // get duration
+ while(sit != obj.end() && !std::isalpha(*sit)){
+ ss << *sit++;
+ }
+ dst_offsets_.dst_adjust_ = date_time::str_from_delimited_time_duration<time_duration_type,char_type>(ss.str());
+ ss.str(empty_string);
+ }
+ else{ // default DST offset
+ dst_offsets_.dst_adjust_ = posix_time::hours(1);
+ }
+
+ // adjustment must be within +|- 1 day
+ if(dst_offsets_.dst_adjust_ <= time_duration_type(-24,0,0) ||
+ dst_offsets_.dst_adjust_ >= time_duration_type(24,0,0))
+ {
+ throw bad_adjustment(posix_time::to_simple_string(dst_offsets_.dst_adjust_));
+ }
+ }
+ // full names not extracted so abbrevs used in their place
+ zone_names_ = time_zone_names(l_std_zone_abbrev, l_std_zone_abbrev, l_dst_zone_abbrev, l_dst_zone_abbrev);
+ }
+
+ void calc_rules(const string_type& start, const string_type& end){
+ const char_type sep_chars[2] = {'/'};
+ char_separator_type sep(sep_chars);
+ tokenizer_type st_tok(start, sep);
+ tokenizer_type et_tok(end, sep);
+ tokenizer_iterator_type sit = st_tok.begin();
+ tokenizer_iterator_type eit = et_tok.begin();
+
+ // generate date spec
+ char_type x = string_type(*sit).at(0);
+ if(x == 'M'){
+ M_func(*sit, *eit);
+ }
+ else if(x == 'J'){
+ julian_no_leap(*sit, *eit);
+ }
+ else{
+ julian_day(*sit, *eit);
+ }
+
+ ++sit;
+ ++eit;
+ // generate durations
+ // starting offset
+ if(sit != st_tok.end()){
+ dst_offsets_.dst_start_offset_ = date_time::str_from_delimited_time_duration<time_duration_type,char_type>(*sit);
+ }
+ else{
+ // default
+ dst_offsets_.dst_start_offset_ = posix_time::hours(2);
+ }
+ // start/end offsets must fall on given date
+ if(dst_offsets_.dst_start_offset_ < time_duration_type(0,0,0) ||
+ dst_offsets_.dst_start_offset_ >= time_duration_type(24,0,0))
+ {
+ throw bad_offset(posix_time::to_simple_string(dst_offsets_.dst_start_offset_));
+ }
+
+ // ending offset
+ if(eit != et_tok.end()){
+ dst_offsets_.dst_end_offset_ = date_time::str_from_delimited_time_duration<time_duration_type,char_type>(*eit);
+ }
+ else{
+ // default
+ dst_offsets_.dst_end_offset_ = posix_time::hours(2);
+ }
+ // start/end offsets must fall on given date
+ if(dst_offsets_.dst_end_offset_ < time_duration_type(0,0,0) ||
+ dst_offsets_.dst_end_offset_ >= time_duration_type(24,0,0))
+ {
+ throw bad_offset(posix_time::to_simple_string(dst_offsets_.dst_end_offset_));
+ }
+ }
+
+ /* Parses out a start/end date spec from a posix time zone string.
+ * Date specs come in three possible formats, this function handles
+ * the 'M' spec. Ex "M2.2.4" => 2nd month, 2nd week, 4th day .
+ */
+ void M_func(const string_type& s, const string_type& e){
+ typedef gregorian::nth_kday_of_month nkday;
+ unsigned short sm=0,sw=0,sd=0,em=0,ew=0,ed=0; // start/end month,week,day
+ const char_type sep_chars[3] = {'M','.'};
+ char_separator_type sep(sep_chars);
+ tokenizer_type stok(s, sep), etok(e, sep);
+
+ tokenizer_iterator_type it = stok.begin();
+ sm = lexical_cast<unsigned short>(*it++);
+ sw = lexical_cast<unsigned short>(*it++);
+ sd = lexical_cast<unsigned short>(*it);
+
+ it = etok.begin();
+ em = lexical_cast<unsigned short>(*it++);
+ ew = lexical_cast<unsigned short>(*it++);
+ ed = lexical_cast<unsigned short>(*it);
+
+ dst_calc_rules_ = shared_ptr<dst_calc_rule>(
+ new nth_kday_dst_rule(
+ nth_last_dst_rule::start_rule(
+ static_cast<nkday::week_num>(sw),sd,sm),
+ nth_last_dst_rule::start_rule(
+ static_cast<nkday::week_num>(ew),ed,em)
+ )
+ );
+ }
+
+ //! Julian day. Feb29 is never counted, even in leap years
+ // expects range of 1-365
+ void julian_no_leap(const string_type& s, const string_type& e){
+ typedef gregorian::gregorian_calendar calendar;
+ const unsigned short year = 2001; // Non-leap year
+ unsigned short sm=1;
+ int sd=0;
+ sd = lexical_cast<int>(s.substr(1)); // skip 'J'
+ while(sd >= calendar::end_of_month_day(year,sm)){
+ sd -= calendar::end_of_month_day(year,sm++);
+ }
+ unsigned short em=1;
+ int ed=0;
+ ed = lexical_cast<int>(e.substr(1)); // skip 'J'
+ while(ed > calendar::end_of_month_day(year,em)){
+ ed -= calendar::end_of_month_day(year,em++);
+ }
+
+ dst_calc_rules_ = shared_ptr<dst_calc_rule>(
+ new partial_date_dst_rule(
+ partial_date_dst_rule::start_rule(
+ sd, static_cast<date_time::months_of_year>(sm)),
+ partial_date_dst_rule::end_rule(
+ ed, static_cast<date_time::months_of_year>(em))
+ )
+ );
+ }
+
+ //! Julian day. Feb29 is always counted, but exception thrown in non-leap years
+ // expects range of 0-365
+ void julian_day(const string_type& s, const string_type& e){
+ int sd=0, ed=0;
+ sd = lexical_cast<int>(s);
+ ed = lexical_cast<int>(e);
+ dst_calc_rules_ = shared_ptr<dst_calc_rule>(
+ new partial_date_dst_rule(
+ partial_date_dst_rule::start_rule(++sd),// args are 0-365
+ partial_date_dst_rule::end_rule(++ed) // pd expects 1-366
+ )
+ );
+ }
+
+ //! helper function used when throwing exceptions
+ static std::string td_as_string(const time_duration_type& td)
+ {
+ std::string s;
+#if defined(USE_DATE_TIME_PRE_1_33_FACET_IO)
+ s = posix_time::to_simple_string(td);
+#else
+ std::stringstream ss;
+ ss << td;
+ s = ss.str();
+#endif
+ return s;
+ }
+ };
+
+ typedef posix_time_zone_base<char> posix_time_zone;
+
+} } // namespace boost::local_time
+
+
+#endif // _DATE_TIME_POSIX_TIME_ZONE__
diff --git a/boost/boost/date_time/local_time/tz_database.hpp b/boost/boost/date_time/local_time/tz_database.hpp
new file mode 100644
index 00000000000..df982e3c46d
--- /dev/null
+++ b/boost/boost/date_time/local_time/tz_database.hpp
@@ -0,0 +1,32 @@
+#ifndef BOOST_DATE_TIME_TZ_DATABASE_HPP__
+#define BOOST_DATE_TIME_TZ_DATABASE_HPP__
+
+/* Copyright (c) 2003-2004 CrystalClear Software, Inc.
+ * Subject to the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2005/05/03 14:27:53 $
+ */
+
+#include <string>
+#include "boost/date_time/local_time/custom_time_zone.hpp"
+#include "boost/date_time/local_time/dst_transition_day_rules.hpp"
+#include "boost/date_time/tz_db_base.hpp"
+
+
+namespace boost {
+namespace local_time {
+
+ using date_time::data_not_accessible;
+ using date_time::bad_field_count;
+
+ //! Object populated with boost::shared_ptr<time_zone_base> objects
+ /*! Object populated with boost::shared_ptr<time_zone_base> objects
+ * Database is populated from specs stored in external csv file. See
+ * date_time::tz_db_base for greater detail */
+ typedef date_time::tz_db_base<custom_time_zone, nth_kday_dst_rule> tz_database;
+
+}} // namespace
+
+#endif // BOOST_DATE_TIME_TZ_DATABASE_HPP__
+
diff --git a/boost/boost/date_time/local_time_adjustor.hpp b/boost/boost/date_time/local_time_adjustor.hpp
new file mode 100644
index 00000000000..e705b5b4c72
--- /dev/null
+++ b/boost/boost/date_time/local_time_adjustor.hpp
@@ -0,0 +1,213 @@
+#ifndef DATE_TIME_LOCAL_TIME_ADJUSTOR_HPP__
+#define DATE_TIME_LOCAL_TIME_ADJUSTOR_HPP__
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland
+ * $Date: 2003/11/23 03:29:56 $
+ */
+
+/*! @file local_time_adjustor.hpp
+ Time adjustment calculations for local times
+*/
+
+#include "boost/date_time/date_generators.hpp"
+#include "boost/date_time/dst_rules.hpp"
+#include <stdexcept>
+
+namespace boost {
+ namespace date_time {
+
+
+ //! Provides a base offset adjustment from utc
+ template<class time_duration_type,
+ short hours, unsigned short minutes = 0>
+ class utc_adjustment
+ {
+ public:
+ static time_duration_type local_to_utc_base_offset()
+ {
+ time_duration_type td(hours,minutes,0);
+ return td.invert_sign();
+ }
+ static time_duration_type utc_to_local_base_offset()
+ {
+ return time_duration_type(hours,minutes,0);
+ }
+ };
+
+
+
+ //! Allow sliding utc adjustment with fixed dst rules
+ template<class time_type, class dst_rules>
+ class dynamic_local_time_adjustor : public dst_rules
+ {
+ public:
+ typedef typename time_type::time_duration_type time_duration_type;
+ typedef typename time_type::date_type date_type;
+
+ dynamic_local_time_adjustor(time_duration_type utc_offset) :
+ utc_offset_(utc_offset)
+ {}
+
+ //! Presumes local time
+ time_duration_type utc_offset(bool is_dst)
+ {
+ if (is_dst) {
+ return utc_offset_ + this->dst_offset();
+ }
+ else {
+ return utc_offset_;
+ }
+
+ }
+ private:
+ time_duration_type utc_offset_;
+
+ };
+
+
+
+ //! Embed the rules for local time adjustments at compile time
+ template<class time_type, class dst_rules, class utc_offset_rules>
+ class static_local_time_adjustor: public dst_rules, public utc_offset_rules
+ {
+ public:
+ typedef typename time_type::time_duration_type time_duration_type;
+ typedef typename time_type::date_type date_type;
+
+ //! Calculates the offset from a utc time to local based on dst and utc offset
+ /*! @param t UTC time to calculate offset to local time
+ * This adjustment depends on the following observations about the
+ * workings of the DST boundary offset. Since UTC time labels are
+ * monotonically increasing we can determine if a given local time
+ * is in DST or not and therefore adjust the offset appropriately.
+ *
+ * The logic is as follows. Starting with UTC time use the offset to
+ * create a label for an non-dst adjusted local time. Then call
+ * dst_rules::local_is_dst with the non adjust local time. The
+ * results of this function will either unabiguously decide that
+ * the initial local time is in dst or return an illegal or
+ * ambiguous result. An illegal result only occurs at the end
+ * of dst (where labels are skipped) and indicates that dst has
+ * ended. An ambiguous result means that we need to recheck by
+ * making a dst adjustment and then rechecking. If the dst offset
+ * is added to the utc time and the recheck proves non-ambiguous
+ * then we are past the boundary. If it is still ambiguous then
+ * we are ahead of the boundary and dst is still in effect.
+ *
+ * TODO -- check if all dst offsets are positive. If not then
+ * the algorithm needs to check for this and reverse the
+ * illegal/ambiguous logic.
+ */
+ static time_duration_type utc_to_local_offset(const time_type& t)
+ {
+ //get initial local time guess by applying utc offset
+ time_type initial = t + utc_offset_rules::utc_to_local_base_offset();
+ time_is_dst_result dst_flag =
+ dst_rules::local_is_dst(initial.date(), initial.time_of_day());
+ switch(dst_flag) {
+ case is_in_dst: return utc_offset_rules::utc_to_local_base_offset() + dst_rules::dst_offset();
+ case is_not_in_dst: return utc_offset_rules::utc_to_local_base_offset();
+ case invalid_time_label:return utc_offset_rules::utc_to_local_base_offset() + dst_rules::dst_offset();
+ case ambiguous: {
+ time_type retry = initial + dst_rules::dst_offset();
+ dst_flag = dst_rules::local_is_dst(retry.date(), retry.time_of_day());
+ //if still ambibuous then the utc time still translates to a dst time
+ if (dst_flag == ambiguous) {
+ return utc_offset_rules::utc_to_local_base_offset() + dst_rules::dst_offset();
+ }
+ // we are past the dst boundary
+ else {
+ return utc_offset_rules::utc_to_local_base_offset();
+ }
+ }
+ }//case
+ //TODO better excpetion type
+ throw std::out_of_range("Unreachable case");
+
+ }
+
+ //! Get the offset to UTC given a local time
+ static time_duration_type local_to_utc_offset(const time_type& t,
+ date_time::dst_flags dst=date_time::calculate)
+ {
+ switch (dst) {
+ case is_dst:
+ return utc_offset_rules::local_to_utc_base_offset() - dst_rules::dst_offset();
+ case not_dst:
+ return utc_offset_rules::local_to_utc_base_offset();
+ case calculate:
+ time_is_dst_result res =
+ dst_rules::local_is_dst(t.date(), t.time_of_day());
+ switch(res) {
+ case is_in_dst: return utc_offset_rules::local_to_utc_base_offset() - dst_rules::dst_offset();
+ case is_not_in_dst: return utc_offset_rules::local_to_utc_base_offset();
+ case ambiguous: return utc_offset_rules::local_to_utc_base_offset();
+ case invalid_time_label: throw std::out_of_range("Time label invalid");
+ }
+ }
+ throw std::out_of_range("Time label invalid");
+ }
+
+
+ private:
+
+ };
+
+ void dummy_to_prevent_msvc6_ice(); //why ask why?
+
+ //! Template that simplifies the creation of local time calculator
+ /*! Use this template to create the timezone to utc convertors as required.
+ *
+ * This class will also work for other regions that don't use dst and
+ * have a utc offset which is an integral number of hours.
+ *
+ * <b>Template Parameters</b>
+ * -time_type -- Time class to use
+ * -utc_offset -- Number hours local time is adjust from utc
+ * -use_dst -- true (default) if region uses dst, false otherwise
+ * For example:
+ * @code
+ * //eastern timezone is utc-5
+ typedef date_time::local_adjustor<ptime, -5, us_dst> us_eastern;
+ typedef date_time::local_adjustor<ptime, -6, us_dst> us_central;
+ typedef date_time::local_adjustor<ptime, -7, us_dst> us_mountain;
+ typedef date_time::local_adjustor<ptime, -8, us_dst> us_pacific;
+ typedef date_time::local_adjustor<ptime, -7, no_dst> us_arizona;
+ @endcode
+
+ */
+ template<class time_type, short utc_offset, class dst_rule>
+ class local_adjustor
+ {
+ public:
+ typedef typename time_type::time_duration_type time_duration_type;
+ typedef typename time_type::date_type date_type;
+ typedef static_local_time_adjustor<time_type,
+ dst_rule,
+ utc_adjustment<time_duration_type,
+ utc_offset> > dst_adjustor;
+ //! Convert a utc time to local time
+ static time_type utc_to_local(const time_type& t)
+ {
+ time_duration_type td = dst_adjustor::utc_to_local_offset(t);
+ return t + td;
+ }
+ //! Convert a local time to utc
+ static time_type local_to_utc(const time_type& t,
+ date_time::dst_flags dst=date_time::calculate)
+ {
+ time_duration_type td = dst_adjustor::local_to_utc_offset(t, dst);
+ return t + td;
+ }
+ };
+
+
+ } } //namespace date_time
+
+
+
+#endif
diff --git a/boost/boost/date_time/local_timezone_defs.hpp b/boost/boost/date_time/local_timezone_defs.hpp
new file mode 100644
index 00000000000..ac4209f489d
--- /dev/null
+++ b/boost/boost/date_time/local_timezone_defs.hpp
@@ -0,0 +1,193 @@
+#ifndef DATE_TIME_LOCAL_TIMEZONE_DEFS_HPP__
+#define DATE_TIME_LOCAL_TIMEZONE_DEFS_HPP__
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland
+ * $Date: 2007/03/02 05:16:59 $
+ */
+
+#include "boost/date_time/dst_rules.hpp"
+
+namespace boost {
+ namespace date_time {
+
+ // Configurations for common dst rules cases:
+ // See http://www.wharton.co.uk/Support/sup_dst.htm for more
+ // information on how various locales use dst rules
+
+ //! Specification for daylight savings start rules in US
+ /*! This class is used to configure dst_calc_engine template typically
+ as follows:
+ @code
+ using namespace boost::gregorian;
+ using namespace boost::posix_time;
+ typedef us_dst_trait<date> us_dst_traits;
+ typedef boost::date_time::dst_calc_engine<date, time_duration,
+ us_dst_traits>
+ us_dst_calc;
+ //calculate the 2002 transition day of USA April 7 2002
+ date dst_start = us_dst_calc::local_dst_start_day(2002);
+
+ //calculate the 2002 transition day of USA Oct 27 2002
+ date dst_end = us_dst_calc::local_dst_end_day(2002);
+
+ //check if a local time is in dst or not -- posible answers
+ //are yes, no, invalid time label, ambiguous
+ ptime t(...some time...);
+ if (us_dst::local_is_dst(t.date(), t.time_of_day())
+ == boost::date_time::is_not_in_dst)
+ {
+
+ }
+
+ @endcode
+ This generates a type suitable for the calculation of dst
+ transitions for the United States. Of course other templates
+ can be used for other locales.
+
+ */
+
+ template<class date_type>
+ struct us_dst_trait
+ {
+ typedef typename date_type::day_of_week_type day_of_week_type;
+ typedef typename date_type::month_type month_type;
+ typedef typename date_type::year_type year_type;
+ typedef date_time::nth_kday_of_month<date_type> start_rule_functor;
+ typedef date_time::first_kday_of_month<date_type> end_rule_functor;
+ typedef date_time::first_kday_of_month<date_type> start_rule_functor_pre2007;
+ typedef date_time::last_kday_of_month<date_type> end_rule_functor_pre2007;
+ static day_of_week_type start_day(year_type) {return Sunday;}
+ static month_type start_month(year_type y)
+ {
+ if (y < 2007) return Apr;
+ return Mar;
+ }
+ static day_of_week_type end_day(year_type y) {return Sunday;}
+ static month_type end_month(year_type y)
+ {
+ if (y < 2007) return Oct;
+ return Nov;
+ }
+ static date_type local_dst_start_day(year_type year)
+ {
+ if (year < 2007) {
+ start_rule_functor_pre2007 start1(start_day(year),
+ start_month(year));
+ return start1.get_date(year);
+ }
+ start_rule_functor start(start_rule_functor::second,
+ start_day(year),
+ start_month(year));
+ return start.get_date(year);
+
+ }
+ static date_type local_dst_end_day(year_type year)
+ {
+ if (year < 2007) {
+ end_rule_functor_pre2007 end_rule(end_day(year),
+ end_month(year));
+ return end_rule.get_date(year);
+ }
+ end_rule_functor end(end_day(year),
+ end_month(year));
+ return end.get_date(year);
+ }
+ static int dst_start_offset_minutes() { return 120;}
+ static int dst_end_offset_minutes() { return 120; }
+ static int dst_shift_length_minutes() { return 60; }
+ };
+
+ //!Rules for daylight savings start in the EU (Last Sun in Mar)
+ /*!These amount to the following:
+ - Start of dst day is last Sunday in March
+ - End day of dst is last Sunday in Oct
+ - Going forward switch time is 2:00 am (offset 120 minutes)
+ - Going back switch time is 3:00 am (off set 180 minutes)
+ - Shift duration is one hour (60 minutes)
+ */
+ template<class date_type>
+ struct eu_dst_trait
+ {
+ typedef typename date_type::day_of_week_type day_of_week_type;
+ typedef typename date_type::month_type month_type;
+ typedef typename date_type::year_type year_type;
+ typedef date_time::last_kday_of_month<date_type> start_rule_functor;
+ typedef date_time::last_kday_of_month<date_type> end_rule_functor;
+ static day_of_week_type start_day(year_type) {return Sunday;}
+ static month_type start_month(year_type) {return Mar;}
+ static day_of_week_type end_day(year_type) {return Sunday;}
+ static month_type end_month(year_type) {return Oct;}
+ static int dst_start_offset_minutes() { return 120;}
+ static int dst_end_offset_minutes() { return 180; }
+ static int dst_shift_length_minutes() { return 60; }
+ static date_type local_dst_start_day(year_type year)
+ {
+ start_rule_functor start(start_day(year),
+ start_month(year));
+ return start.get_date(year);
+ }
+ static date_type local_dst_end_day(year_type year)
+ {
+ end_rule_functor end(end_day(year),
+ end_month(year));
+ return end.get_date(year);
+ }
+ };
+
+ //! Alternative dst traits for some parts of the United Kingdom
+ /* Several places in the UK use EU start and end rules for the
+ day, but different local conversion times (eg: forward change at 1:00
+ am local and backward change at 2:00 am dst instead of 2:00am
+ forward and 3:00am back for the EU).
+ */
+ template<class date_type>
+ struct uk_dst_trait : public eu_dst_trait<date_type>
+ {
+ static int dst_start_offset_minutes() { return 60;}
+ static int dst_end_offset_minutes() { return 120; }
+ static int dst_shift_length_minutes() { return 60; }
+ };
+
+ //Rules for Adelaide Australia
+ template<class date_type>
+ struct acst_dst_trait
+ {
+ typedef typename date_type::day_of_week_type day_of_week_type;
+ typedef typename date_type::month_type month_type;
+ typedef typename date_type::year_type year_type;
+ typedef date_time::last_kday_of_month<date_type> start_rule_functor;
+ typedef date_time::last_kday_of_month<date_type> end_rule_functor;
+ static day_of_week_type start_day(year_type) {return Sunday;}
+ static month_type start_month(year_type) {return Oct;}
+ static day_of_week_type end_day(year_type) {return Sunday;}
+ static month_type end_month(year_type) {return Mar;}
+ static int dst_start_offset_minutes() { return 120;}
+ static int dst_end_offset_minutes() { return 180; }
+ static int dst_shift_length_minutes() { return 60; }
+ static date_type local_dst_start_day(year_type year)
+ {
+ start_rule_functor start(start_day(year),
+ start_month(year));
+ return start.get_date(year);
+ }
+ static date_type local_dst_end_day(year_type year)
+ {
+ end_rule_functor end(end_day(year),
+ end_month(year));
+ return end.get_date(year);
+ }
+ };
+
+
+
+
+
+
+} } //namespace boost::date_time
+
+
+#endif
diff --git a/boost/boost/date_time/locale_config.hpp b/boost/boost/date_time/locale_config.hpp
new file mode 100644
index 00000000000..f5408d19829
--- /dev/null
+++ b/boost/boost/date_time/locale_config.hpp
@@ -0,0 +1,31 @@
+#ifndef DATE_TIME_LOCALE_CONFIG_HPP___
+#define DATE_TIME_LOCALE_CONFIG_HPP___
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland
+ * $Date: 2006/05/23 14:33:55 $
+ */
+
+// This file configures whether the library will support locales and hence
+// iostream based i/o. Even if a compiler has some support for locales,
+// any failure to be compatible gets the compiler on the exclusion list.
+//
+// At the moment this is defined for MSVC 6 and any compiler that
+// defines BOOST_NO_STD_LOCALE (gcc 2.95.x)
+
+#include "boost/config.hpp" //sets BOOST_NO_STD_LOCALE
+#include "boost/detail/workaround.hpp"
+
+//This file basically becomes a noop if locales are not properly supported
+#if (defined(BOOST_NO_STD_LOCALE) \
+ || (BOOST_WORKAROUND( BOOST_MSVC, < 1300)) \
+ || (BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT( 0x581 )) ) )
+#define BOOST_DATE_TIME_NO_LOCALE
+#endif
+
+
+#endif
+
diff --git a/boost/boost/date_time/microsec_time_clock.hpp b/boost/boost/date_time/microsec_time_clock.hpp
new file mode 100644
index 00000000000..aee6044d32b
--- /dev/null
+++ b/boost/boost/date_time/microsec_time_clock.hpp
@@ -0,0 +1,196 @@
+#ifndef DATE_TIME_HIGHRES_TIME_CLOCK_HPP___
+#define DATE_TIME_HIGHRES_TIME_CLOCK_HPP___
+
+/* Copyright (c) 2002,2003,2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2006/03/18 16:47:55 $
+ */
+
+
+/*! @file microsec_time_clock.hpp
+ This file contains a high resolution time clock implementation.
+*/
+
+#include <boost/detail/workaround.hpp>
+#include "boost/date_time/c_time.hpp"
+#include "boost/cstdint.hpp"
+#include "boost/shared_ptr.hpp"
+
+#ifdef BOOST_HAS_FTIME
+#include <windows.h>
+#endif
+
+#ifdef BOOST_DATE_TIME_HAS_HIGH_PRECISION_CLOCK
+
+namespace boost {
+namespace date_time {
+
+
+ //! A clock providing microsecond level resolution
+ /*! A high precision clock that measures the local time
+ * at a resolution up to microseconds and adjusts to the
+ * resolution of the time system. For example, for the
+ * a library configuration with nano second resolution,
+ * the last 3 places of the fractional seconds will always
+ * be 000 since there are 1000 nano-seconds in a micro second.
+ */
+ template<class time_type>
+ class microsec_clock
+ {
+ public:
+ typedef typename time_type::date_type date_type;
+ typedef typename time_type::time_duration_type time_duration_type;
+ typedef typename time_duration_type::rep_type resolution_traits_type;
+
+ //! return a local time object for the given zone, based on computer clock
+ //JKG -- looks like we could rewrite this against universal_time
+ template<class time_zone_type>
+ static time_type local_time(shared_ptr<time_zone_type> tz_ptr) {
+ typedef typename time_type::utc_time_type utc_time_type;
+ typedef second_clock<utc_time_type> second_clock;
+ // we'll need to know the utc_offset this machine has
+ // in order to get a utc_time_type set to utc
+ utc_time_type utc_time = second_clock::universal_time();
+ time_duration_type utc_offset = second_clock::local_time() - utc_time;
+ // use micro clock to get a local time with sub seconds
+ // and adjust it to get a true utc time reading with sub seconds
+ utc_time = microsec_clock<utc_time_type>::local_time() - utc_offset;
+ return time_type(utc_time, tz_ptr);
+ }
+
+
+ private:
+ // we want this enum available for both platforms yet still private
+ enum TZ_FOR_CREATE { LOCAL, GMT };
+
+ public:
+
+#ifdef BOOST_HAS_GETTIMEOFDAY
+ //! Return the local time based on computer clock settings
+ static time_type local_time() {
+ return create_time(LOCAL);
+ }
+
+ //! Get the current day in universal date as a ymd_type
+ static time_type universal_time()
+ {
+ return create_time(GMT);
+ }
+
+ private:
+ static time_type create_time(TZ_FOR_CREATE tz) {
+ timeval tv;
+ gettimeofday(&tv, 0); //gettimeofday does not support TZ adjust on Linux.
+ std::time_t t = tv.tv_sec;
+ boost::uint32_t fs = tv.tv_usec;
+ std::tm curr, *curr_ptr = 0;
+ if (tz == LOCAL) {
+ curr_ptr = c_time::localtime(&t, &curr);
+ } else {
+ curr_ptr = c_time::gmtime(&t, &curr);
+ }
+ date_type d(curr_ptr->tm_year + 1900,
+ curr_ptr->tm_mon + 1,
+ curr_ptr->tm_mday);
+ //The following line will adjusts the fractional second tick in terms
+ //of the current time system. For example, if the time system
+ //doesn't support fractional seconds then res_adjust returns 0
+ //and all the fractional seconds return 0.
+ int adjust = resolution_traits_type::res_adjust()/1000000;
+
+ time_duration_type td(curr_ptr->tm_hour,
+ curr_ptr->tm_min,
+ curr_ptr->tm_sec,
+ fs*adjust);
+ return time_type(d,td);
+
+ }
+#endif // BOOST_HAS_GETTIMEOFDAY
+
+#ifdef BOOST_HAS_FTIME
+ //! Return the local time based on computer clock settings
+ static time_type local_time() {
+ FILETIME ft;
+ #if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3205))
+ // Some runtime library implementations expect local times as the norm for ctime.
+ FILETIME ft_utc;
+ GetSystemTimeAsFileTime(&ft_utc);
+ FileTimeToLocalFileTime(&ft_utc,&ft);
+ #else
+ GetSystemTimeAsFileTime(&ft);
+ #endif
+ return create_time(ft, LOCAL);
+ }
+
+ //! Return the UTC time based on computer settings
+ static time_type universal_time() {
+ FILETIME ft;
+ #if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3205))
+ // Some runtime library implementations expect local times as the norm for ctime.
+ FILETIME ft_utc;
+ GetSystemTimeAsFileTime(&ft_utc);
+ FileTimeToLocalFileTime(&ft_utc,&ft);
+ #else
+ GetSystemTimeAsFileTime(&ft);
+ #endif
+ return create_time(ft, GMT);
+ }
+
+ private:
+ static time_type create_time(FILETIME& ft, TZ_FOR_CREATE tz) {
+ // offset is difference (in 100-nanoseconds) from
+ // 1970-Jan-01 to 1601-Jan-01
+ boost::uint64_t c1 = 27111902;
+ boost::uint64_t c2 = 3577643008UL; // 'UL' removes compiler warnings
+ const boost::uint64_t OFFSET = (c1 << 32) + c2;
+
+ boost::uint64_t filetime = ft.dwHighDateTime;
+ filetime = filetime << 32;
+ filetime += ft.dwLowDateTime;
+ filetime -= OFFSET;
+ // filetime now holds 100-nanoseconds since 1970-Jan-01
+
+ // microseconds -- static casts supress warnings
+ boost::uint32_t sub_sec = static_cast<boost::uint32_t>((filetime % 10000000) / 10);
+
+ std::time_t t = static_cast<time_t>(filetime / 10000000); // seconds since epoch
+
+ std::tm curr, *curr_ptr = 0;
+ if (tz == LOCAL) {
+ curr_ptr = c_time::localtime(&t, &curr);
+ }
+ else {
+ curr_ptr = c_time::gmtime(&t, &curr);
+ }
+ date_type d(curr_ptr->tm_year + 1900,
+ curr_ptr->tm_mon + 1,
+ curr_ptr->tm_mday);
+
+ //The following line will adjusts the fractional second tick in terms
+ //of the current time system. For example, if the time system
+ //doesn't support fractional seconds then res_adjust returns 0
+ //and all the fractional seconds return 0.
+ int adjust = static_cast<int>(resolution_traits_type::res_adjust()/1000000);
+
+ time_duration_type td(curr_ptr->tm_hour,
+ curr_ptr->tm_min,
+ curr_ptr->tm_sec,
+ sub_sec * adjust);
+ //st.wMilliseconds * adjust);
+ return time_type(d,td);
+
+ }
+#endif // BOOST_HAS_FTIME
+ };
+
+
+} } //namespace date_time
+
+#endif //BOOST_DATE_TIME_HAS_HIGH_PRECISION_CLOCK
+
+
+#endif
+
diff --git a/boost/boost/date_time/parse_format_base.hpp b/boost/boost/date_time/parse_format_base.hpp
new file mode 100644
index 00000000000..64aa3fa0562
--- /dev/null
+++ b/boost/boost/date_time/parse_format_base.hpp
@@ -0,0 +1,29 @@
+#ifndef DATE_TIME_PARSE_FORMAT_BASE__
+#define DATE_TIME_PARSE_FORMAT_BASE__
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland
+ * $Date: 2003/11/25 03:51:20 $
+ */
+
+namespace boost {
+namespace date_time {
+
+ //! Enum for distinguishing parsing and formatting options
+ enum month_format_spec {month_as_integer, month_as_short_string,
+ month_as_long_string};
+
+ //! Enum for distinguishing the order of Month, Day, & Year.
+ /*! Enum for distinguishing the order in which Month, Day, & Year
+ * will appear in a date string */
+ enum ymd_order_spec {ymd_order_iso, //order is year-month-day
+ ymd_order_dmy, //day-month-year
+ ymd_order_us}; //order is month-day-year
+
+
+} }//namespace date_time
+
+#endif
diff --git a/boost/boost/date_time/period.hpp b/boost/boost/date_time/period.hpp
new file mode 100644
index 00000000000..4fe97589878
--- /dev/null
+++ b/boost/boost/date_time/period.hpp
@@ -0,0 +1,352 @@
+#ifndef DATE_TIME_PERIOD_HPP___
+#define DATE_TIME_PERIOD_HPP___
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ *
+ * 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)
+ *
+ *
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2006/07/17 03:56:05 $
+ */
+
+/*! \file period.hpp
+ This file contain the implementation of the period abstraction. This is
+ basically the same idea as a range. Although this class is intended for
+ use in the time library, it is pretty close to general enough for other
+ numeric uses.
+
+*/
+
+#include "boost/operators.hpp"
+
+
+namespace boost {
+namespace date_time {
+ //!Provides generalized period type useful in date-time systems
+ /*!This template uses a class to represent a time point within the period
+ and another class to represent a duration. As a result, this class is
+ not appropriate for use when the number and duration representation
+ are the same (eg: in the regular number domain).
+
+ A period can be specified by providing either the begining point and
+ a duration or the begining point and the end point( end is NOT part
+ of the period but 1 unit past it. A period will be "invalid" if either
+ end_point <= begin_point or the given duration is <= 0. Any valid period
+ will return false for is_null().
+
+ Zero length periods are also considered invalid. Zero length periods are
+ periods where the begining and end points are the same, or, the given
+ duration is zero. For a zero length period, the last point will be one
+ unit less than the begining point.
+
+ In the case that the begin and last are the same, the period has a
+ length of one unit.
+
+ The best way to handle periods is usually to provide a begining point and
+ a duration. So, day1 + 7 days is a week period which includes all of the
+ first day and 6 more days (eg: Sun to Sat).
+
+ */
+ template<class point_rep, class duration_rep>
+ class period : private
+ boost::less_than_comparable<period<point_rep, duration_rep>
+ , boost::equality_comparable< period<point_rep, duration_rep>
+ > >
+ {
+ public:
+ typedef point_rep point_type;
+ typedef duration_rep duration_type;
+
+ period(point_rep first_point, point_rep end_point);
+ period(point_rep first_point, duration_rep len);
+ point_rep begin() const;
+ point_rep end() const;
+ point_rep last() const;
+ duration_rep length() const;
+ bool is_null() const;
+ bool operator==(const period& rhs) const;
+ bool operator<(const period& rhs) const;
+ void shift(const duration_rep& d);
+ bool contains(const point_rep& point) const;
+ bool contains(const period& other) const;
+ bool intersects(const period& other) const;
+ bool is_adjacent(const period& other) const;
+ bool is_before(const point_rep& point) const;
+ bool is_after(const point_rep& point) const;
+ period intersection(const period& other) const;
+ period merge(const period& other) const;
+ period span(const period& other) const;
+ private:
+ point_rep begin_;
+ point_rep last_;
+ };
+
+ //! create a period from begin to last eg: [begin,end)
+ /*! If end <= begin then the period will be invalid
+ */
+ template<class point_rep, class duration_rep>
+ inline
+ period<point_rep,duration_rep>::period(point_rep first_point,
+ point_rep end_point) :
+ begin_(first_point),
+ last_(end_point - duration_rep::unit())
+ {}
+
+ //! create a period as [begin, begin+len)
+ /*! If len is <= 0 then the period will be invalid
+ */
+ template<class point_rep, class duration_rep>
+ inline
+ period<point_rep,duration_rep>::period(point_rep first_point, duration_rep len) :
+ begin_(first_point),
+ last_(first_point + len-duration_rep::unit())
+ { }
+
+
+ //! Return the first element in the period
+ template<class point_rep, class duration_rep>
+ inline
+ point_rep period<point_rep,duration_rep>::begin() const
+ {
+ return begin_;
+ }
+
+ //! Return one past the last element
+ template<class point_rep, class duration_rep>
+ inline
+ point_rep period<point_rep,duration_rep>::end() const
+ {
+ return last_ + duration_rep::unit();
+ }
+
+ //! Return the last item in the period
+ template<class point_rep, class duration_rep>
+ inline
+ point_rep period<point_rep,duration_rep>::last() const
+ {
+ return last_;
+ }
+
+ //! True if period is ill formed (length is zero or less)
+ template<class point_rep, class duration_rep>
+ inline
+ bool period<point_rep,duration_rep>::is_null() const
+ {
+ return end() <= begin_;
+ }
+
+ //! Return the length of the period
+ template<class point_rep, class duration_rep>
+ inline
+ duration_rep period<point_rep,duration_rep>::length() const
+ {
+ if(last_ < begin_){ // invalid period
+ return last_+duration_rep::unit() - begin_;
+ }
+ else{
+ return end() - begin_; // normal case
+ }
+ }
+
+ //! Equality operator
+ template<class point_rep, class duration_rep>
+ inline
+ bool period<point_rep,duration_rep>::operator==(const period& rhs) const
+ {
+ return ((begin_ == rhs.begin_) &&
+ (last_ == rhs.last_));
+ }
+
+ //! Strict as defined by rhs.last <= lhs.last
+ template<class point_rep, class duration_rep>
+ inline
+ bool period<point_rep,duration_rep>::operator<(const period& rhs) const
+ {
+ return (last_ < rhs.begin_);
+ }
+
+
+ //! Shift the start and end by the specified amount
+ template<class point_rep, class duration_rep>
+ inline
+ void period<point_rep,duration_rep>::shift(const duration_rep& d)
+ {
+ begin_ = begin_ + d;
+ last_ = last_ + d;
+ }
+
+ //! True if the point is inside the period, zero length periods contain no points
+ template<class point_rep, class duration_rep>
+ inline
+ bool period<point_rep,duration_rep>::contains(const point_rep& point) const
+ {
+ return ((point >= begin_) &&
+ (point <= last_));
+ }
+
+
+ //! True if this period fully contains (or equals) the other period
+ template<class point_rep, class duration_rep>
+ inline
+ bool period<point_rep,duration_rep>::contains(const period<point_rep,duration_rep>& other) const
+ {
+ return ((begin_ <= other.begin_) && (last_ >= other.last_));
+ }
+
+
+ //! True if periods are next to each other without a gap.
+ /* In the example below, p1 and p2 are adjacent, but p3 is not adjacent
+ * with either of p1 or p2.
+ *@code
+ * [-p1-)
+ * [-p2-)
+ * [-p3-)
+ *@endcode
+ */
+ template<class point_rep, class duration_rep>
+ inline
+ bool
+ period<point_rep,duration_rep>::is_adjacent(const period<point_rep,duration_rep>& other) const
+ {
+ return (other.begin() == end() ||
+ begin_ == other.end());
+ }
+
+
+ //! True if all of the period is prior or t < start
+ /* In the example below only point 1 would evaluate to true.
+ *@code
+ * [---------])
+ * ^ ^ ^ ^ ^
+ * 1 2 3 4 5
+ *
+ *@endcode
+ */
+ template<class point_rep, class duration_rep>
+ inline
+ bool
+ period<point_rep,duration_rep>::is_after(const point_rep& t) const
+ {
+ if (is_null())
+ {
+ return false; //null period isn't after
+ }
+
+ return t < begin_;
+ }
+
+ //! True if all of the period is prior to the passed point or end <= t
+ /* In the example below points 4 and 5 return true.
+ *@code
+ * [---------])
+ * ^ ^ ^ ^ ^
+ * 1 2 3 4 5
+ *
+ *@endcode
+ */
+ template<class point_rep, class duration_rep>
+ inline
+ bool
+ period<point_rep,duration_rep>::is_before(const point_rep& t) const
+ {
+ if (is_null())
+ {
+ return false; //null period isn't before anything
+ }
+
+ return last_ < t;
+ }
+
+
+ //! True if the periods overlap in any way
+ /* In the example below p1 intersects with p2, p4, and p6.
+ *@code
+ * [---p1---)
+ * [---p2---)
+ * [---p3---)
+ * [---p4---)
+ * [-p5-)
+ * [-p6-)
+ *@endcode
+ */
+ template<class point_rep, class duration_rep>
+ inline
+ bool period<point_rep,duration_rep>::intersects(const period<point_rep,duration_rep>& other) const
+ {
+ return ( contains(other.begin_) ||
+ other.contains(begin_) ||
+ ((other.begin_ < begin_) && (other.last_ >= begin_)));
+ }
+
+ //! Returns the period of intersection or invalid range no intersection
+ template<class point_rep, class duration_rep>
+ inline
+ period<point_rep,duration_rep>
+ period<point_rep,duration_rep>::intersection(const period<point_rep,duration_rep>& other) const
+ {
+ if (begin_ > other.begin_) {
+ if (last_ <= other.last_) { //case2
+ return *this;
+ }
+ //case 1
+ return period<point_rep,duration_rep>(begin_, other.end());
+ }
+ else {
+ if (last_ <= other.last_) { //case3
+ return period<point_rep,duration_rep>(other.begin_, this->end());
+ }
+ //case4
+ return other;
+ }
+ //unreachable
+ }
+
+ //! Returns the union of intersecting periods -- or null period
+ /*!
+ */
+ template<class point_rep, class duration_rep>
+ inline
+ period<point_rep,duration_rep>
+ period<point_rep,duration_rep>::merge(const period<point_rep,duration_rep>& other) const
+ {
+ if (this->intersects(other)) {
+ if (begin_ < other.begin_) {
+ return period<point_rep,duration_rep>(begin_, last_ > other.last_ ? this->end() : other.end());
+ }
+
+ return period<point_rep,duration_rep>(other.begin_, last_ > other.last_ ? this->end() : other.end());
+
+ }
+ return period<point_rep,duration_rep>(begin_,begin_); // no intersect return null
+ }
+
+ //! Combine two periods with earliest start and latest end.
+ /*! Combines two periods and any gap between them such that
+ * start = minimum(p1.start, p2.start)
+ * end = maximum(p1.end , p2.end)
+ *@code
+ * [---p1---)
+ * [---p2---)
+ * result:
+ * [-----------p3----------)
+ *@endcode
+ */
+ template<class point_rep, class duration_rep>
+ inline
+ period<point_rep,duration_rep>
+ period<point_rep,duration_rep>::span(const period<point_rep,duration_rep>& other) const
+ {
+ point_rep start((begin_ < other.begin_) ? begin() : other.begin());
+ point_rep newend((last_ < other.last_) ? other.end() : this->end());
+ return period<point_rep,duration_rep>(start, newend);
+ }
+
+
+} } //namespace date_time
+
+
+
+#endif
diff --git a/boost/boost/date_time/period_formatter.hpp b/boost/boost/date_time/period_formatter.hpp
new file mode 100644
index 00000000000..11a6ddac8c3
--- /dev/null
+++ b/boost/boost/date_time/period_formatter.hpp
@@ -0,0 +1,196 @@
+
+#ifndef DATETIME_PERIOD_FORMATTER_HPP___
+#define DATETIME_PERIOD_FORMATTER_HPP___
+
+/* Copyright (c) 2002-2004 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2006/03/20 13:29:16 $
+ */
+
+
+
+namespace boost { namespace date_time {
+
+
+ //! Not a facet, but a class used to specify and control period formats
+ /*! Provides settings for the following:
+ * - period_separator -- default '/'
+ * - period_open_start_delimeter -- default '['
+ * - period_open_range_end_delimeter -- default ')'
+ * - period_closed_range_end_delimeter -- default ']'
+ * - display_as_open_range, display_as_closed_range -- default closed_range
+ *
+ * Thus the default formatting for a period is as follows:
+ *@code
+ * [period.start()/period.last()]
+ *@endcode
+ * So for a typical date_period this would be
+ *@code
+ * [2004-Jan-04/2004-Feb-01]
+ *@endcode
+ * where the date formatting is controlled by the date facet
+ */
+ template <class CharT, class OutItrT = std::ostreambuf_iterator<CharT, std::char_traits<CharT> > >
+ class period_formatter {
+ public:
+ typedef std::basic_string<CharT> string_type;
+ typedef CharT char_type;
+ typedef typename std::basic_string<char_type>::const_iterator const_itr_type;
+ typedef std::vector<std::basic_string<CharT> > collection_type;
+
+ static const char_type default_period_separator[2];
+ static const char_type default_period_start_delimeter[2];
+ static const char_type default_period_open_range_end_delimeter[2];
+ static const char_type default_period_closed_range_end_delimeter[2];
+
+ enum range_display_options { AS_OPEN_RANGE, AS_CLOSED_RANGE };
+
+ //! Constructor that sets up period formatter options -- default should suffice most cases.
+ period_formatter(range_display_options range_option_in = AS_CLOSED_RANGE,
+ const char_type* const period_separator = default_period_separator,
+ const char_type* const period_start_delimeter = default_period_start_delimeter,
+ const char_type* const period_open_range_end_delimeter = default_period_open_range_end_delimeter,
+ const char_type* const period_closed_range_end_delimeter = default_period_closed_range_end_delimeter) :
+ m_range_option(range_option_in),
+ m_period_separator(period_separator),
+ m_period_start_delimeter(period_start_delimeter),
+ m_open_range_end_delimeter(period_open_range_end_delimeter),
+ m_closed_range_end_delimeter(period_closed_range_end_delimeter)
+ {}
+
+ //! Puts the characters between period elements into stream -- default is /
+ OutItrT put_period_separator(OutItrT& oitr) const
+ {
+ const_itr_type ci = m_period_separator.begin();
+ while (ci != m_period_separator.end()) {
+ *oitr = *ci;
+ ci++;
+ }
+ return oitr;
+ }
+
+ //! Puts the period start characters into stream -- default is [
+ OutItrT put_period_start_delimeter(OutItrT& oitr) const
+ {
+ const_itr_type ci = m_period_start_delimeter.begin();
+ while (ci != m_period_start_delimeter.end()) {
+ *oitr = *ci;
+ ci++;
+ }
+ return oitr;
+ }
+
+ //! Puts the period end characters into stream as controled by open/closed range setting.
+ OutItrT put_period_end_delimeter(OutItrT& oitr) const
+ {
+
+ const_itr_type ci, end;
+ if (m_range_option == AS_OPEN_RANGE) {
+ ci = m_open_range_end_delimeter.begin();
+ end = m_open_range_end_delimeter.end();
+ }
+ else {
+ ci = m_closed_range_end_delimeter.begin();
+ end = m_closed_range_end_delimeter.end();
+ }
+ while (ci != end) {
+ *oitr = *ci;
+ ci++;
+ }
+ return oitr;
+ }
+
+ range_display_options range_option() const
+ {
+ return m_range_option;
+ }
+
+ //! Reset the range_option control
+ void
+ range_option(range_display_options option) const
+ {
+ m_range_option = option;
+ }
+ void delimiter_strings(const string_type& separator,
+ const string_type& start_delim,
+ const string_type& open_end_delim,
+ const string_type& closed_end_delim)
+ {
+ m_period_separator;
+ m_period_start_delimeter;
+ m_open_range_end_delimeter;
+ m_closed_range_end_delimeter;
+ }
+
+
+ //! Generic code to output a period -- no matter the period type.
+ /*! This generic code will output any period using a facet to
+ * to output the 'elements'. For example, in the case of a date_period
+ * the elements will be instances of a date which will be formatted
+ * according the to setup in the passed facet parameter.
+ *
+ * The steps for formatting a period are always the same:
+ * - put the start delimiter
+ * - put start element
+ * - put the separator
+ * - put either last or end element depending on range settings
+ * - put end delimeter depending on range settings
+ *
+ * Thus for a typical date period the result might look like this:
+ *@code
+ *
+ * [March 01, 2004/June 07, 2004] <-- closed range
+ * [March 01, 2004/June 08, 2004) <-- open range
+ *
+ *@endcode
+ */
+ template<class period_type, class facet_type>
+ OutItrT put_period(OutItrT next,
+ std::ios_base& a_ios,
+ char_type a_fill,
+ const period_type& p,
+ const facet_type& facet) const {
+ put_period_start_delimeter(next);
+ next = facet.put(next, a_ios, a_fill, p.begin());
+ put_period_separator(next);
+ if (m_range_option == AS_CLOSED_RANGE) {
+ facet.put(next, a_ios, a_fill, p.last());
+ }
+ else {
+ facet.put(next, a_ios, a_fill, p.end());
+ }
+ put_period_end_delimeter(next);
+ return next;
+ }
+
+
+ private:
+ range_display_options m_range_option;
+ string_type m_period_separator;
+ string_type m_period_start_delimeter;
+ string_type m_open_range_end_delimeter;
+ string_type m_closed_range_end_delimeter;
+ };
+
+ template <class CharT, class OutItrT>
+ const typename period_formatter<CharT, OutItrT>::char_type
+ period_formatter<CharT, OutItrT>::default_period_separator[2] = {'/'};
+
+ template <class CharT, class OutItrT>
+ const typename period_formatter<CharT, OutItrT>::char_type
+ period_formatter<CharT, OutItrT>::default_period_start_delimeter[2] = {'['};
+
+ template <class CharT, class OutItrT>
+ const typename period_formatter<CharT, OutItrT>::char_type
+ period_formatter<CharT, OutItrT>::default_period_open_range_end_delimeter[2] = {')'};
+
+ template <class CharT, class OutItrT>
+ const typename period_formatter<CharT, OutItrT>::char_type
+ period_formatter<CharT, OutItrT>::default_period_closed_range_end_delimeter[2] = {']'};
+
+ } } //namespace boost::date_time
+
+#endif
diff --git a/boost/boost/date_time/period_parser.hpp b/boost/boost/date_time/period_parser.hpp
new file mode 100644
index 00000000000..3b0ef1a8742
--- /dev/null
+++ b/boost/boost/date_time/period_parser.hpp
@@ -0,0 +1,196 @@
+
+#ifndef DATETIME_PERIOD_PARSER_HPP___
+#define DATETIME_PERIOD_PARSER_HPP___
+
+/* Copyright (c) 2002-2004 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2005/06/06 10:36:46 $
+ */
+
+#include "boost/date_time/string_parse_tree.hpp"
+#include "boost/date_time/string_convert.hpp"
+
+
+namespace boost { namespace date_time {
+
+
+ //! Not a facet, but a class used to specify and control period parsing
+ /*! Provides settings for the following:
+ * - period_separator -- default '/'
+ * - period_open_start_delimeter -- default '['
+ * - period_open_range_end_delimeter -- default ')'
+ * - period_closed_range_end_delimeter -- default ']'
+ * - display_as_open_range, display_as_closed_range -- default closed_range
+ *
+ * For a typical date_period, the contents of the input stream would be
+ *@code
+ * [2004-Jan-04/2004-Feb-01]
+ *@endcode
+ * where the date format is controlled by the date facet
+ */
+ template<class date_type, typename CharT>
+ class period_parser {
+ public:
+ typedef std::basic_string<CharT> string_type;
+ typedef CharT char_type;
+ //typedef typename std::basic_string<char_type>::const_iterator const_itr_type;
+ typedef std::istreambuf_iterator<CharT> stream_itr_type;
+ typedef string_parse_tree<CharT> parse_tree_type;
+ typedef typename parse_tree_type::parse_match_result_type match_results;
+ typedef std::vector<std::basic_string<CharT> > collection_type;
+
+ static const char_type default_period_separator[2];
+ static const char_type default_period_start_delimeter[2];
+ static const char_type default_period_open_range_end_delimeter[2];
+ static const char_type default_period_closed_range_end_delimeter[2];
+
+ enum period_range_option { AS_OPEN_RANGE, AS_CLOSED_RANGE };
+
+ //! Constructor that sets up period parser options
+ period_parser(period_range_option range_option = AS_CLOSED_RANGE,
+ const char_type* const period_separator = default_period_separator,
+ const char_type* const period_start_delimeter = default_period_start_delimeter,
+ const char_type* const period_open_range_end_delimeter = default_period_open_range_end_delimeter,
+ const char_type* const period_closed_range_end_delimeter = default_period_closed_range_end_delimeter)
+ : m_range_option(range_option)
+ {
+ delimiters.push_back(string_type(period_separator));
+ delimiters.push_back(string_type(period_start_delimeter));
+ delimiters.push_back(string_type(period_open_range_end_delimeter));
+ delimiters.push_back(string_type(period_closed_range_end_delimeter));
+ }
+
+ period_parser(const period_parser<date_type,CharT>& p_parser)
+ {
+ this->delimiters = p_parser.delimiters;
+ this->m_range_option = p_parser.m_range_option;
+ }
+
+ period_range_option range_option() const
+ {
+ return m_range_option;
+ }
+ void range_option(period_range_option option)
+ {
+ m_range_option = option;
+ }
+ collection_type delimiter_strings() const
+ {
+ return delimiters;
+ }
+ void delimiter_strings(const string_type& separator,
+ const string_type& start_delim,
+ const string_type& open_end_delim,
+ const string_type& closed_end_delim)
+ {
+ delimiters.clear();
+ delimiters.push_back(separator);
+ delimiters.push_back(start_delim);
+ delimiters.push_back(open_end_delim);
+ delimiters.push_back(closed_end_delim);
+ }
+
+ //! Generic code to parse a period -- no matter the period type.
+ /*! This generic code will parse any period using a facet to
+ * to get the 'elements'. For example, in the case of a date_period
+ * the elements will be instances of a date which will be parsed
+ * according the to setup in the passed facet parameter.
+ *
+ * The steps for parsing a period are always the same:
+ * - consume the start delimiter
+ * - get start element
+ * - consume the separator
+ * - get either last or end element depending on range settings
+ * - consume the end delimeter depending on range settings
+ *
+ * Thus for a typical date period the contents of the input stream
+ * might look like this:
+ *@code
+ *
+ * [March 01, 2004/June 07, 2004] <-- closed range
+ * [March 01, 2004/June 08, 2004) <-- open range
+ *
+ *@endcode
+ */
+ template<class period_type, class duration_type, class facet_type>
+ period_type get_period(stream_itr_type& sitr,
+ stream_itr_type& stream_end,
+ std::ios_base& a_ios,
+ const period_type& p,
+ const duration_type& dur_unit,
+ const facet_type& facet) const
+ {
+ // skip leading whitespace
+ while(std::isspace(*sitr) && sitr != stream_end) { ++sitr; }
+
+ typedef typename period_type::point_type point_type;
+ point_type p1(not_a_date_time), p2(not_a_date_time);
+
+
+ consume_delim(sitr, stream_end, delimiters[START]); // start delim
+ facet.get(sitr, stream_end, a_ios, p1); // first point
+ consume_delim(sitr, stream_end, delimiters[SEPARATOR]); // separator
+ facet.get(sitr, stream_end, a_ios, p2); // second point
+
+ // period construction parameters are always open range [begin, end)
+ if (m_range_option == AS_CLOSED_RANGE) {
+ consume_delim(sitr, stream_end, delimiters[CLOSED_END]);// end delim
+ // add 1 duration unit to p2 to make range open
+ p2 += dur_unit;
+ }
+ else {
+ consume_delim(sitr, stream_end, delimiters[OPEN_END]); // end delim
+ }
+
+ return period_type(p1, p2);
+ }
+
+ private:
+ collection_type delimiters;
+ period_range_option m_range_option;
+
+ enum delim_ids { SEPARATOR, START, OPEN_END, CLOSED_END };
+
+ //! throws ios_base::failure if delimiter and parsed data do not match
+ void consume_delim(stream_itr_type& sitr,
+ stream_itr_type& stream_end,
+ const string_type& delim) const
+ {
+ /* string_parse_tree will not parse a string of punctuation characters
+ * without knowing exactly how many characters to process
+ * Ex [2000. Will not parse out the '[' string without knowing
+ * to process only one character. By using length of the delimiter
+ * string we can safely iterate past it. */
+ string_type s;
+ for(unsigned int i = 0; i < delim.length() && sitr != stream_end; ++i) {
+ s += *sitr;
+ ++sitr;
+ }
+ if(s != delim) {
+ throw std::ios_base::failure("Parse failed. Expected '" + convert_string_type<char_type,char>(delim) + "' but found '" + convert_string_type<char_type,char>(s) + "'");
+ }
+ }
+ };
+
+ template <class date_type, class char_type>
+ const typename period_parser<date_type, char_type>::char_type
+ period_parser<date_type, char_type>::default_period_separator[2] = {'/'};
+
+ template <class date_type, class char_type>
+ const typename period_parser<date_type, char_type>::char_type
+ period_parser<date_type, char_type>::default_period_start_delimeter[2] = {'['};
+
+ template <class date_type, class char_type>
+ const typename period_parser<date_type, char_type>::char_type
+ period_parser<date_type, char_type>::default_period_open_range_end_delimeter[2] = {')'};
+
+ template <class date_type, class char_type>
+ const typename period_parser<date_type, char_type>::char_type
+ period_parser<date_type, char_type>::default_period_closed_range_end_delimeter[2] = {']'};
+
+ } } //namespace boost::date_time
+
+#endif // DATETIME_PERIOD_PARSER_HPP___
diff --git a/boost/boost/date_time/posix_time/conversion.hpp b/boost/boost/date_time/posix_time/conversion.hpp
new file mode 100644
index 00000000000..4750b13ab8e
--- /dev/null
+++ b/boost/boost/date_time/posix_time/conversion.hpp
@@ -0,0 +1,93 @@
+#ifndef POSIX_TIME_CONVERSION_HPP___
+#define POSIX_TIME_CONVERSION_HPP___
+
+/* Copyright (c) 2002-2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2005/11/01 04:27:29 $
+ */
+
+#include "boost/date_time/posix_time/ptime.hpp"
+#include "boost/date_time/posix_time/posix_time_duration.hpp"
+#include "boost/date_time/filetime_functions.hpp"
+#include "boost/date_time/c_time.hpp"
+#include "boost/date_time/gregorian/conversion.hpp"
+
+namespace boost {
+
+namespace posix_time {
+
+
+ //! Function that converts a time_t into a ptime.
+ inline
+ ptime from_time_t(std::time_t t)
+ {
+ ptime start(gregorian::date(1970,1,1));
+ return start + seconds(static_cast<long>(t));
+ }
+
+ //! Convert a time to a tm structure truncating any fractional seconds
+ inline
+ std::tm to_tm(const boost::posix_time::ptime& t) {
+ std::tm timetm = boost::gregorian::to_tm(t.date());
+ boost::posix_time::time_duration td = t.time_of_day();
+ timetm.tm_hour = td.hours();
+ timetm.tm_min = td.minutes();
+ timetm.tm_sec = td.seconds();
+ timetm.tm_isdst = -1; // -1 used when dst info is unknown
+ return timetm;
+ }
+ //! Convert a time_duration to a tm structure truncating any fractional seconds and zeroing fields for date components
+ inline
+ std::tm to_tm(const boost::posix_time::time_duration& td) {
+ std::tm timetm;
+ timetm.tm_year = 0;
+ timetm.tm_mon = 0;
+ timetm.tm_mday = 0;
+ timetm.tm_wday = 0;
+ timetm.tm_yday = 0;
+
+ timetm.tm_hour = date_time::absolute_value(td.hours());
+ timetm.tm_min = date_time::absolute_value(td.minutes());
+ timetm.tm_sec = date_time::absolute_value(td.seconds());
+ timetm.tm_isdst = -1; // -1 used when dst info is unknown
+ return timetm;
+ }
+
+ //! Convert a tm struct to a ptime ignoring is_dst flag
+ inline
+ ptime ptime_from_tm(const std::tm& timetm) {
+ boost::gregorian::date d = boost::gregorian::date_from_tm(timetm);
+ return ptime(d, time_duration(timetm.tm_hour, timetm.tm_min, timetm.tm_sec));
+ }
+
+
+#if defined(BOOST_HAS_FTIME)
+
+ //! Function to create a time object from an initialized FILETIME struct.
+ /*! Function to create a time object from an initialized FILETIME struct.
+ * A FILETIME struct holds 100-nanosecond units (0.0000001). When
+ * built with microsecond resolution the FILETIME's sub second value
+ * will be truncated. Nanosecond resolution has no truncation.
+ *
+ * Note ftime is part of the Win32 API, so it is not portable to non-windows
+ * platforms.
+ */
+ template<class time_type>
+ inline
+ time_type from_ftime(const FILETIME& ft)
+ {
+ return boost::date_time::time_from_ftime<time_type>(ft);
+ }
+
+#endif // BOOST_HAS_FTIME
+
+} } //namespace boost::posix_time
+
+
+
+
+#endif
+
diff --git a/boost/boost/date_time/posix_time/date_duration_operators.hpp b/boost/boost/date_time/posix_time/date_duration_operators.hpp
new file mode 100644
index 00000000000..1fb2e6fabb7
--- /dev/null
+++ b/boost/boost/date_time/posix_time/date_duration_operators.hpp
@@ -0,0 +1,114 @@
+#ifndef DATE_DURATION_OPERATORS_HPP___
+#define DATE_DURATION_OPERATORS_HPP___
+
+/* Copyright (c) 2004 CrystalClear Software, Inc.
+ * Subject to the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE-1.0 or
+ * http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2004/08/16 21:59:53 $
+ */
+
+#include "boost/date_time/gregorian/greg_duration_types.hpp"
+#include "boost/date_time/posix_time/ptime.hpp"
+
+namespace boost {
+namespace posix_time {
+
+ /*!@file date_duration_operators.hpp Operators for ptime and
+ * optional gregorian types. Operators use snap-to-end-of-month behavior.
+ * Further details on this behavior can be found in reference for
+ * date_time/date_duration_types.hpp and documentation for
+ * month and year iterators.
+ */
+
+
+ /*! Adds a months object and a ptime. Result will be same
+ * day-of-month as ptime unless original day was the last day of month.
+ * see date_time::months_duration for more details */
+ inline
+ ptime
+ operator+(const ptime& t, const boost::gregorian::months& m)
+ {
+ return t + m.get_offset(t.date());
+ }
+
+ /*! Adds a months object to a ptime. Result will be same
+ * day-of-month as ptime unless original day was the last day of month.
+ * see date_time::months_duration for more details */
+ inline
+ ptime
+ operator+=(ptime& t, const boost::gregorian::months& m)
+ {
+ // get_neg_offset returns a negative duration, so we add
+ return t += m.get_offset(t.date());
+ }
+
+ /*! Subtracts a months object and a ptime. Result will be same
+ * day-of-month as ptime unless original day was the last day of month.
+ * see date_time::months_duration for more details */
+ inline
+ ptime
+ operator-(const ptime& t, const boost::gregorian::months& m)
+ {
+ // get_neg_offset returns a negative duration, so we add
+ return t + m.get_neg_offset(t.date());
+ }
+
+ /*! Subtracts a months object from a ptime. Result will be same
+ * day-of-month as ptime unless original day was the last day of month.
+ * see date_time::months_duration for more details */
+ inline
+ ptime
+ operator-=(ptime& t, const boost::gregorian::months& m)
+ {
+ return t += m.get_neg_offset(t.date());
+ }
+
+ // ptime & years
+
+ /*! Adds a years object and a ptime. Result will be same
+ * month and day-of-month as ptime unless original day was the
+ * last day of month. see date_time::years_duration for more details */
+ inline
+ ptime
+ operator+(const ptime& t, const boost::gregorian::years& y)
+ {
+ return t + y.get_offset(t.date());
+ }
+
+ /*! Adds a years object to a ptime. Result will be same
+ * month and day-of-month as ptime unless original day was the
+ * last day of month. see date_time::years_duration for more details */
+ inline
+ ptime
+ operator+=(ptime& t, const boost::gregorian::years& y)
+ {
+ return t += y.get_offset(t.date());
+ }
+
+ /*! Subtracts a years object and a ptime. Result will be same
+ * month and day-of-month as ptime unless original day was the
+ * last day of month. see date_time::years_duration for more details */
+ inline
+ ptime
+ operator-(const ptime& t, const boost::gregorian::years& y)
+ {
+ // get_neg_offset returns a negative duration, so we add
+ return t + y.get_neg_offset(t.date());
+ }
+
+ /*! Subtracts a years object from a ptime. Result will be same
+ * month and day-of-month as ptime unless original day was the
+ * last day of month. see date_time::years_duration for more details */
+ inline
+ ptime
+ operator-=(ptime& t, const boost::gregorian::years& y)
+ {
+ // get_neg_offset returns a negative duration, so we add
+ return t += y.get_neg_offset(t.date());
+ }
+
+}} // namespaces
+
+#endif // DATE_DURATION_OPERATORS_HPP___
diff --git a/boost/boost/date_time/posix_time/posix_time.hpp b/boost/boost/date_time/posix_time/posix_time.hpp
new file mode 100644
index 00000000000..576346fc5e9
--- /dev/null
+++ b/boost/boost/date_time/posix_time/posix_time.hpp
@@ -0,0 +1,39 @@
+#ifndef POSIX_TIME_HPP___
+#define POSIX_TIME_HPP___
+
+/* Copyright (c) 2002-2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2005/01/30 20:58:52 $
+ */
+/*!@file posix_time.hpp Global header file to get all of posix time types
+ */
+
+#include "boost/date_time/compiler_config.hpp"
+#include "boost/date_time/posix_time/ptime.hpp"
+#if defined(BOOST_DATE_TIME_OPTIONAL_GREGORIAN_TYPES)
+#include "boost/date_time/posix_time/date_duration_operators.hpp"
+#endif
+
+// output functions
+#if defined(BOOST_DATE_TIME_INCLUDE_LIMITED_HEADERS)
+#include "boost/date_time/posix_time/time_formatters_limited.hpp"
+#else
+#include "boost/date_time/posix_time/time_formatters.hpp"
+#endif // BOOST_DATE_TIME_INCLUDE_LIMITED_HEADERS
+
+// streaming operators
+#if defined(USE_DATE_TIME_PRE_1_33_FACET_IO)
+#include "boost/date_time/posix_time/posix_time_legacy_io.hpp"
+#else
+#include "boost/date_time/posix_time/posix_time_io.hpp"
+#endif // USE_DATE_TIME_PRE_1_33_FACET_IO
+
+#include "boost/date_time/posix_time/time_parsers.hpp"
+#include "boost/date_time/posix_time/conversion.hpp"
+
+
+#endif
+
diff --git a/boost/boost/date_time/posix_time/posix_time_config.hpp b/boost/boost/date_time/posix_time/posix_time_config.hpp
new file mode 100644
index 00000000000..c97b9e3e28a
--- /dev/null
+++ b/boost/boost/date_time/posix_time/posix_time_config.hpp
@@ -0,0 +1,178 @@
+#ifndef POSIX_TIME_CONFIG_HPP___
+#define POSIX_TIME_CONFIG_HPP___
+
+/* Copyright (c) 2002,2003,2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2005/04/24 01:35:19 $
+ */
+
+#include "boost/date_time/time_duration.hpp"
+#include "boost/date_time/time_resolution_traits.hpp"
+#include "boost/date_time/gregorian/gregorian_types.hpp"
+#include "boost/date_time/wrapping_int.hpp"
+#include "boost/limits.hpp"
+#include "boost/date_time/compiler_config.hpp"
+#include "boost/cstdint.hpp"
+#include <cmath>
+#include <cstdlib> //for MCW 7.2 std::abs(long long)
+
+namespace boost {
+namespace posix_time {
+
+//Remove the following line if you want 64 bit millisecond resolution time
+//#define BOOST_GDTL_POSIX_TIME_STD_CONFIG
+
+#ifdef BOOST_DATE_TIME_POSIX_TIME_STD_CONFIG
+ // set up conditional test compilations
+#define BOOST_DATE_TIME_HAS_MILLISECONDS
+#define BOOST_DATE_TIME_HAS_MICROSECONDS
+#define BOOST_DATE_TIME_HAS_NANOSECONDS
+ typedef date_time::time_resolution_traits<boost::date_time::time_resolution_traits_adapted64_impl, boost::date_time::nano,
+ 1000000000, 9 > time_res_traits;
+#else
+ // set up conditional test compilations
+#define BOOST_DATE_TIME_HAS_MILLISECONDS
+#define BOOST_DATE_TIME_HAS_MICROSECONDS
+#undef BOOST_DATE_TIME_HAS_NANOSECONDS
+ typedef date_time::time_resolution_traits<
+ boost::date_time::time_resolution_traits_adapted64_impl, boost::date_time::micro,
+ 1000000, 6 > time_res_traits;
+
+
+// #undef BOOST_DATE_TIME_HAS_MILLISECONDS
+// #undef BOOST_DATE_TIME_HAS_MICROSECONDS
+// #undef BOOST_DATE_TIME_HAS_NANOSECONDS
+// typedef date_time::time_resolution_traits<boost::int64_t, boost::date_time::tenth,
+// 10, 0 > time_res_traits;
+
+#endif
+
+
+ //! Base time duration type
+ /*! \ingroup time_basics
+ */
+ class time_duration :
+ public date_time::time_duration<time_duration, time_res_traits>
+ {
+ public:
+ typedef time_res_traits rep_type;
+ typedef time_res_traits::day_type day_type;
+ typedef time_res_traits::hour_type hour_type;
+ typedef time_res_traits::min_type min_type;
+ typedef time_res_traits::sec_type sec_type;
+ typedef time_res_traits::fractional_seconds_type fractional_seconds_type;
+ typedef time_res_traits::tick_type tick_type;
+ typedef time_res_traits::impl_type impl_type;
+ time_duration(hour_type hour,
+ min_type min,
+ sec_type sec,
+ fractional_seconds_type fs=0) :
+ date_time::time_duration<time_duration, time_res_traits>(hour,min,sec,fs)
+ {}
+ time_duration() :
+ date_time::time_duration<time_duration, time_res_traits>(0,0,0)
+ {}
+ //! Construct from special_values
+ time_duration(boost::date_time::special_values sv) :
+ date_time::time_duration<time_duration, time_res_traits>(sv)
+ {}
+ //Give duration access to ticks constructor -- hide from users
+ friend class date_time::time_duration<time_duration, time_res_traits>;
+ private:
+ explicit time_duration(impl_type ticks) :
+ date_time::time_duration<time_duration, time_res_traits>(ticks)
+ {}
+ };
+
+#ifdef BOOST_DATE_TIME_POSIX_TIME_STD_CONFIG
+
+ //! Simple implementation for the time rep
+ struct simple_time_rep
+ {
+ typedef gregorian::date date_type;
+ typedef time_duration time_duration_type;
+ simple_time_rep(date_type d, time_duration_type tod) :
+ day(d),
+ time_of_day(tod)
+ {
+ // make sure we have sane values for date & time
+ if(!day.is_special() && !time_of_day.is_special()){
+ if(time_of_day >= time_duration_type(24,0,0)) {
+ while(time_of_day >= time_duration_type(24,0,0)) {
+ day += date_type::duration_type(1);
+ time_of_day -= time_duration_type(24,0,0);
+ }
+ }
+ else if(time_of_day.is_negative()) {
+ while(time_of_day.is_negative()) {
+ day -= date_type::duration_type(1);
+ time_of_day += time_duration_type(24,0,0);
+ }
+ }
+ }
+ }
+ date_type day;
+ time_duration_type time_of_day;
+ bool is_special()const
+ {
+ return(is_pos_infinity() || is_neg_infinity() || is_not_a_date_time());
+ }
+ bool is_pos_infinity()const
+ {
+ return(day.is_pos_infinity() || time_of_day.is_pos_infinity());
+ }
+ bool is_neg_infinity()const
+ {
+ return(day.is_neg_infinity() || time_of_day.is_neg_infinity());
+ }
+ bool is_not_a_date_time()const
+ {
+ return(day.is_not_a_date() || time_of_day.is_not_a_date_time());
+ }
+ };
+
+ class posix_time_system_config
+ {
+ public:
+ typedef simple_time_rep time_rep_type;
+ typedef gregorian::date date_type;
+ typedef gregorian::date_duration date_duration_type;
+ typedef time_duration time_duration_type;
+ typedef time_res_traits::tick_type int_type;
+ typedef time_res_traits resolution_traits;
+#if (defined(BOOST_DATE_TIME_NO_MEMBER_INIT)) //help bad compilers
+#else
+ BOOST_STATIC_CONSTANT(boost::int64_t, tick_per_second = 1000000000);
+#endif
+ };
+
+#else
+
+ class millisec_posix_time_system_config
+ {
+ public:
+ typedef boost::int64_t time_rep_type;
+ //typedef time_res_traits::tick_type time_rep_type;
+ typedef gregorian::date date_type;
+ typedef gregorian::date_duration date_duration_type;
+ typedef time_duration time_duration_type;
+ typedef time_res_traits::tick_type int_type;
+ typedef time_res_traits::impl_type impl_type;
+ typedef time_res_traits resolution_traits;
+#if (defined(BOOST_DATE_TIME_NO_MEMBER_INIT)) //help bad compilers
+#else
+ BOOST_STATIC_CONSTANT(boost::int64_t, tick_per_second = 1000000);
+#endif
+ };
+
+#endif
+
+} }//namespace posix_time
+
+
+#endif
+
+
diff --git a/boost/boost/date_time/posix_time/posix_time_duration.hpp b/boost/boost/date_time/posix_time/posix_time_duration.hpp
new file mode 100644
index 00000000000..c06f88a1e76
--- /dev/null
+++ b/boost/boost/date_time/posix_time/posix_time_duration.hpp
@@ -0,0 +1,82 @@
+#ifndef POSIX_TIME_DURATION_HPP___
+#define POSIX_TIME_DURATION_HPP___
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland
+ * $Date: 2003/11/23 02:37:57 $
+ */
+
+#include "boost/date_time/posix_time/posix_time_config.hpp"
+
+namespace boost {
+namespace posix_time {
+
+ //! Allows expression of durations as an hour count
+ /*! \ingroup time_basics
+ */
+ class hours : public time_duration
+ {
+ public:
+ explicit hours(long h) :
+ time_duration(h,0,0)
+ {}
+ };
+
+ //! Allows expression of durations as a minute count
+ /*! \ingroup time_basics
+ */
+ class minutes : public time_duration
+ {
+ public:
+ explicit minutes(long m) :
+ time_duration(0,m,0)
+ {}
+ };
+
+ //! Allows expression of durations as a seconds count
+ /*! \ingroup time_basics
+ */
+ class seconds : public time_duration
+ {
+ public:
+ explicit seconds(long s) :
+ time_duration(0,0,s)
+ {}
+ };
+
+
+ //! Allows expression of durations as milli seconds
+ /*! \ingroup time_basics
+ */
+ typedef date_time::subsecond_duration<time_duration,1000> millisec;
+ typedef date_time::subsecond_duration<time_duration,1000> milliseconds;
+
+ //! Allows expression of durations as micro seconds
+ /*! \ingroup time_basics
+ */
+ typedef date_time::subsecond_duration<time_duration,1000000> microsec;
+ typedef date_time::subsecond_duration<time_duration,1000000> microseconds;
+
+ //This is probably not needed anymore...
+#if defined(BOOST_DATE_TIME_HAS_NANOSECONDS)
+
+ //! Allows expression of durations as nano seconds
+ /*! \ingroup time_basics
+ */
+ typedef date_time::subsecond_duration<time_duration,1000000000> nanosec;
+ typedef date_time::subsecond_duration<time_duration,1000000000> nanoseconds;
+
+
+#endif
+
+
+
+
+} }//namespace posix_time
+
+
+#endif
+
diff --git a/boost/boost/date_time/posix_time/posix_time_io.hpp b/boost/boost/date_time/posix_time/posix_time_io.hpp
new file mode 100644
index 00000000000..2857eeb05b3
--- /dev/null
+++ b/boost/boost/date_time/posix_time/posix_time_io.hpp
@@ -0,0 +1,246 @@
+#ifndef DATE_TIME_POSIX_TIME_IO_HPP__
+#define DATE_TIME_POSIX_TIME_IO_HPP__
+
+/* Copyright (c) 2004-2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2005/06/28 13:11:46 $
+ */
+
+#include "boost/date_time/time_facet.hpp"
+#include "boost/date_time/period_formatter.hpp"
+#include "boost/date_time/posix_time/time_period.hpp"
+#include "boost/date_time/posix_time/posix_time_duration.hpp"
+//#include "boost/date_time/gregorian/gregorian_io.hpp"
+#include "boost/io/ios_state.hpp"
+#include <iostream>
+#include <locale>
+
+namespace boost {
+namespace posix_time {
+
+
+ //! wptime_facet is depricated and will be phased out. use wtime_facet instead
+ //typedef boost::date_time::time_facet<ptime, wchar_t> wptime_facet;
+ //! ptime_facet is depricated and will be phased out. use time_facet instead
+ //typedef boost::date_time::time_facet<ptime, char> ptime_facet;
+
+ //! wptime_input_facet is depricated and will be phased out. use wtime_input_facet instead
+ //typedef boost::date_time::time_input_facet<ptime,wchar_t> wptime_input_facet;
+ //! ptime_input_facet is depricated and will be phased out. use time_input_facet instead
+ //typedef boost::date_time::time_input_facet<ptime,char> ptime_input_facet;
+
+ typedef boost::date_time::time_facet<ptime, wchar_t> wtime_facet;
+ typedef boost::date_time::time_facet<ptime, char> time_facet;
+
+ typedef boost::date_time::time_input_facet<ptime, wchar_t> wtime_input_facet;
+ typedef boost::date_time::time_input_facet<ptime, char> time_input_facet;
+
+ template <class CharT, class TraitsT>
+ inline
+ std::basic_ostream<CharT, TraitsT>&
+ operator<<(std::basic_ostream<CharT, TraitsT>& os,
+ const ptime& p) {
+ boost::io::ios_flags_saver iflags(os);
+ typedef boost::date_time::time_facet<ptime, CharT> custom_ptime_facet;
+ typedef std::time_put<CharT> std_ptime_facet;
+ std::ostreambuf_iterator<CharT> oitr(os);
+ if (std::has_facet<custom_ptime_facet>(os.getloc()))
+ std::use_facet<custom_ptime_facet>(os.getloc()).put(oitr, os, os.fill(), p);
+ else {
+ //instantiate a custom facet for dealing with times since the user
+ //has not put one in the stream so far. This is for efficiency
+ //since we would always need to reconstruct for every time period
+ //if the locale did not already exist. Of course this will be overridden
+ //if the user imbues as some later point.
+ std::ostreambuf_iterator<CharT> oitr(os);
+ custom_ptime_facet* f = new custom_ptime_facet();
+ std::locale l = std::locale(os.getloc(), f);
+ os.imbue(l);
+ f->put(oitr, os, os.fill(), p);
+ }
+ return os;
+ }
+
+ //! input operator for ptime
+ template <class CharT, class Traits>
+ inline
+ std::basic_istream<CharT, Traits>&
+ operator>>(std::basic_istream<CharT, Traits>& is, ptime& pt)
+ {
+ boost::io::ios_flags_saver iflags(is);
+ typename std::basic_istream<CharT, Traits>::sentry strm_sentry(is, false);
+ if (strm_sentry) {
+ try {
+ typedef typename date_time::time_input_facet<ptime, CharT> time_input_facet;
+
+ std::istreambuf_iterator<CharT,Traits> sit(is), str_end;
+ if(std::has_facet<time_input_facet>(is.getloc())) {
+ std::use_facet<time_input_facet>(is.getloc()).get(sit, str_end, is, pt);
+ }
+ else {
+ time_input_facet* f = new time_input_facet();
+ std::locale l = std::locale(is.getloc(), f);
+ is.imbue(l);
+ f->get(sit, str_end, is, pt);
+ }
+ }
+ catch(...) {
+ // mask tells us what exceptions are turned on
+ std::ios_base::iostate exception_mask = is.exceptions();
+ // if the user wants exceptions on failbit, we'll rethrow our
+ // date_time exception & set the failbit
+ if(std::ios_base::failbit & exception_mask) {
+ try { is.setstate(std::ios_base::failbit); }
+ catch(std::ios_base::failure&) {} // ignore this one
+ throw; // rethrow original exception
+ }
+ else {
+ // if the user want's to fail quietly, we simply set the failbit
+ is.setstate(std::ios_base::failbit);
+ }
+
+ }
+ }
+ return is;
+ }
+
+
+ template <class CharT, class TraitsT>
+ inline
+ std::basic_ostream<CharT, TraitsT>&
+ operator<<(std::basic_ostream<CharT, TraitsT>& os,
+ const boost::posix_time::time_period& p) {
+ boost::io::ios_flags_saver iflags(os);
+ typedef boost::date_time::time_facet<ptime, CharT> custom_ptime_facet;
+ typedef std::time_put<CharT> std_time_facet;
+ std::ostreambuf_iterator<CharT> oitr(os);
+ if (std::has_facet<custom_ptime_facet>(os.getloc())) {
+ std::use_facet<custom_ptime_facet>(os.getloc()).put(oitr, os, os.fill(), p);
+ }
+ else {
+ //instantiate a custom facet for dealing with periods since the user
+ //has not put one in the stream so far. This is for efficiency
+ //since we would always need to reconstruct for every time period
+ //if the local did not already exist. Of course this will be overridden
+ //if the user imbues as some later point.
+ std::ostreambuf_iterator<CharT> oitr(os);
+ custom_ptime_facet* f = new custom_ptime_facet();
+ std::locale l = std::locale(os.getloc(), f);
+ os.imbue(l);
+ f->put(oitr, os, os.fill(), p);
+ }
+ return os;
+ }
+
+ //! input operator for time_period
+ template <class CharT, class Traits>
+ inline
+ std::basic_istream<CharT, Traits>&
+ operator>>(std::basic_istream<CharT, Traits>& is, time_period& tp)
+ {
+ boost::io::ios_flags_saver iflags(is);
+ typename std::basic_istream<CharT, Traits>::sentry strm_sentry(is, false);
+ if (strm_sentry) {
+ try {
+ typedef typename date_time::time_input_facet<ptime, CharT> time_input_facet;
+
+ std::istreambuf_iterator<CharT,Traits> sit(is), str_end;
+ if(std::has_facet<time_input_facet>(is.getloc())) {
+ std::use_facet<time_input_facet>(is.getloc()).get(sit, str_end, is, tp);
+ }
+ else {
+ time_input_facet* f = new time_input_facet();
+ std::locale l = std::locale(is.getloc(), f);
+ is.imbue(l);
+ f->get(sit, str_end, is, tp);
+ }
+ }
+ catch(...) {
+ std::ios_base::iostate exception_mask = is.exceptions();
+ if(std::ios_base::failbit & exception_mask) {
+ try { is.setstate(std::ios_base::failbit); }
+ catch(std::ios_base::failure&) {}
+ throw; // rethrow original exception
+ }
+ else {
+ is.setstate(std::ios_base::failbit);
+ }
+
+ }
+ }
+ return is;
+ }
+
+
+ //! ostream operator for posix_time::time_duration
+ // todo fix to use facet -- place holder for now...
+ template <class CharT, class Traits>
+ inline
+ std::basic_ostream<CharT, Traits>&
+ operator<<(std::basic_ostream<CharT, Traits>& os, const time_duration& td)
+ {
+ boost::io::ios_flags_saver iflags(os);
+ typedef boost::date_time::time_facet<ptime, CharT> custom_ptime_facet;
+ typedef std::time_put<CharT> std_ptime_facet;
+ std::ostreambuf_iterator<CharT> oitr(os);
+ if (std::has_facet<custom_ptime_facet>(os.getloc()))
+ std::use_facet<custom_ptime_facet>(os.getloc()).put(oitr, os, os.fill(), td);
+ else {
+ //instantiate a custom facet for dealing with times since the user
+ //has not put one in the stream so far. This is for efficiency
+ //since we would always need to reconstruct for every time period
+ //if the locale did not already exist. Of course this will be overridden
+ //if the user imbues as some later point.
+ std::ostreambuf_iterator<CharT> oitr(os);
+ custom_ptime_facet* f = new custom_ptime_facet();
+ std::locale l = std::locale(os.getloc(), f);
+ os.imbue(l);
+ f->put(oitr, os, os.fill(), td);
+ }
+ return os;
+ }
+
+ //! input operator for time_duration
+ template <class CharT, class Traits>
+ inline
+ std::basic_istream<CharT, Traits>&
+ operator>>(std::basic_istream<CharT, Traits>& is, time_duration& td)
+ {
+ boost::io::ios_flags_saver iflags(is);
+ typename std::basic_istream<CharT, Traits>::sentry strm_sentry(is, false);
+ if (strm_sentry) {
+ try {
+ typedef typename date_time::time_input_facet<ptime, CharT> time_input_facet;
+
+ std::istreambuf_iterator<CharT,Traits> sit(is), str_end;
+ if(std::has_facet<time_input_facet>(is.getloc())) {
+ std::use_facet<time_input_facet>(is.getloc()).get(sit, str_end, is, td);
+ }
+ else {
+ time_input_facet* f = new time_input_facet();
+ std::locale l = std::locale(is.getloc(), f);
+ is.imbue(l);
+ f->get(sit, str_end, is, td);
+ }
+ }
+ catch(...) {
+ std::ios_base::iostate exception_mask = is.exceptions();
+ if(std::ios_base::failbit & exception_mask) {
+ try { is.setstate(std::ios_base::failbit); }
+ catch(std::ios_base::failure&) {}
+ throw; // rethrow original exception
+ }
+ else {
+ is.setstate(std::ios_base::failbit);
+ }
+
+ }
+ }
+ return is;
+ }
+
+} } // namespaces
+#endif // DATE_TIME_POSIX_TIME_IO_HPP__
diff --git a/boost/boost/date_time/posix_time/posix_time_legacy_io.hpp b/boost/boost/date_time/posix_time/posix_time_legacy_io.hpp
new file mode 100644
index 00000000000..7220be386c5
--- /dev/null
+++ b/boost/boost/date_time/posix_time/posix_time_legacy_io.hpp
@@ -0,0 +1,153 @@
+#ifndef POSIX_TIME_PRE133_OPERATORS_HPP___
+#define POSIX_TIME_PRE133_OPERATORS_HPP___
+
+/* Copyright (c) 2002-2004 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2005/05/09 03:37:09 $
+ */
+
+/*! @file posix_time_pre133_operators.hpp
+ * These input and output operators are for use with the
+ * pre 1.33 version of the date_time libraries io facet code.
+ * The operators used in version 1.33 and later can be found
+ * in posix_time_io.hpp */
+
+#include <iostream>
+#include <string>
+#include <sstream>
+#include "boost/date_time/compiler_config.hpp"
+#include "boost/date_time/gregorian/gregorian.hpp"
+#include "boost/date_time/posix_time/posix_time_duration.hpp"
+#include "boost/date_time/posix_time/ptime.hpp"
+#include "boost/date_time/posix_time/time_period.hpp"
+#include "boost/date_time/time_parsing.hpp"
+
+namespace boost {
+namespace posix_time {
+
+
+//The following code is removed for configurations with poor std::locale support (eg: MSVC6, gcc 2.9x)
+#ifndef BOOST_DATE_TIME_NO_LOCALE
+#if defined(USE_DATE_TIME_PRE_1_33_FACET_IO)
+ //! ostream operator for posix_time::time_duration
+ template <class charT, class traits>
+ inline
+ std::basic_ostream<charT, traits>&
+ operator<<(std::basic_ostream<charT, traits>& os, const time_duration& td)
+ {
+ typedef boost::date_time::ostream_time_duration_formatter<time_duration, charT> duration_formatter;
+ duration_formatter::duration_put(td, os);
+ return os;
+ }
+
+ //! ostream operator for posix_time::ptime
+ template <class charT, class traits>
+ inline
+ std::basic_ostream<charT, traits>&
+ operator<<(std::basic_ostream<charT, traits>& os, const ptime& t)
+ {
+ typedef boost::date_time::ostream_time_formatter<ptime, charT> time_formatter;
+ time_formatter::time_put(t, os);
+ return os;
+ }
+
+ //! ostream operator for posix_time::time_period
+ template <class charT, class traits>
+ inline
+ std::basic_ostream<charT, traits>&
+ operator<<(std::basic_ostream<charT, traits>& os, const time_period& tp)
+ {
+ typedef boost::date_time::ostream_time_period_formatter<time_period, charT> period_formatter;
+ period_formatter::period_put(tp, os);
+ return os;
+ }
+#endif // USE_DATE_TIME_PRE_1_33_FACET_IO
+/******** input streaming ********/
+ template<class charT>
+ inline
+ std::basic_istream<charT>& operator>>(std::basic_istream<charT>& is, time_duration& td)
+ {
+ // need to create a std::string and parse it
+ std::basic_string<charT> inp_s;
+ std::stringstream out_ss;
+ is >> inp_s;
+ typename std::basic_string<charT>::iterator b = inp_s.begin();
+ // need to use both iterators because there is no requirement
+ // for the data held by a std::basic_string<> be terminated with
+ // any marker (such as '\0').
+ typename std::basic_string<charT>::iterator e = inp_s.end();
+ while(b != e){
+ out_ss << out_ss.narrow(*b, 0);
+ ++b;
+ }
+
+ td = date_time::parse_delimited_time_duration<time_duration>(out_ss.str());
+ return is;
+ }
+
+ template<class charT>
+ inline
+ std::basic_istream<charT>& operator>>(std::basic_istream<charT>& is, ptime& pt)
+ {
+ gregorian::date d(not_a_date_time);
+ time_duration td(0,0,0);
+ is >> d >> td;
+ pt = ptime(d, td);
+
+ return is;
+ }
+
+ /** operator>> for time_period. time_period must be in
+ * "[date time_duration/date time_duration]" format. */
+ template<class charT>
+ inline
+ std::basic_istream<charT>& operator>>(std::basic_istream<charT>& is, time_period& tp)
+ {
+ gregorian::date d(not_a_date_time);
+ time_duration td(0,0,0);
+ ptime beg(d, td);
+ ptime end(beg);
+ std::basic_string<charT> s;
+ // get first date string and remove leading '['
+ is >> s;
+ {
+ std::basic_stringstream<charT> ss;
+ ss << s.substr(s.find('[')+1);
+ ss >> d;
+ }
+ // get first time_duration & second date string, remove the '/'
+ // and split into 2 strings
+ is >> s;
+ {
+ std::basic_stringstream<charT> ss;
+ ss << s.substr(0, s.find('/'));
+ ss >> td;
+ }
+ beg = ptime(d, td);
+ {
+ std::basic_stringstream<charT> ss;
+ ss << s.substr(s.find('/')+1);
+ ss >> d;
+ }
+ // get last time_duration and remove the trailing ']'
+ is >> s;
+ {
+ std::basic_stringstream<charT> ss;
+ ss << s.substr(0, s.find(']'));
+ ss >> td;
+ }
+ end = ptime(d, td);
+
+ tp = time_period(beg,end);
+ return is;
+ }
+
+
+#endif //BOOST_DATE_TIME_NO_LOCALE
+
+} } // namespaces
+
+#endif // POSIX_TIME_PRE133_OPERATORS_HPP___
diff --git a/boost/boost/date_time/posix_time/posix_time_system.hpp b/boost/boost/date_time/posix_time/posix_time_system.hpp
new file mode 100644
index 00000000000..294b852bd32
--- /dev/null
+++ b/boost/boost/date_time/posix_time/posix_time_system.hpp
@@ -0,0 +1,68 @@
+#ifndef POSIX_TIME_SYSTEM_HPP___
+#define POSIX_TIME_SYSTEM_HPP___
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland
+ * $Date: 2003/11/23 02:37:57 $
+ */
+
+
+#include "boost/date_time/posix_time/posix_time_config.hpp"
+#include "boost/date_time/time_system_split.hpp"
+#include "boost/date_time/time_system_counted.hpp"
+#include "boost/date_time/compiler_config.hpp"
+
+
+namespace boost {
+namespace posix_time {
+
+#ifdef BOOST_DATE_TIME_POSIX_TIME_STD_CONFIG
+
+#if (defined(BOOST_DATE_TIME_NO_MEMBER_INIT)) //help bad compilers
+ typedef date_time::split_timedate_system<posix_time_system_config, 1000000000> posix_time_system;
+#else
+ typedef date_time::split_timedate_system<posix_time_system_config> posix_time_system;
+#endif
+
+#else
+
+ typedef date_time::counted_time_rep<millisec_posix_time_system_config> int64_time_rep;
+ typedef date_time::counted_time_system<int64_time_rep> posix_time_system;
+
+#endif
+
+} }//namespace posix_time
+
+
+#endif
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/boost/boost/date_time/posix_time/posix_time_types.hpp b/boost/boost/date_time/posix_time/posix_time_types.hpp
new file mode 100644
index 00000000000..6b8fd9197b1
--- /dev/null
+++ b/boost/boost/date_time/posix_time/posix_time_types.hpp
@@ -0,0 +1,55 @@
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland
+ */
+#ifndef POSIX_TIME_TYPES_HPP___
+#define POSIX_TIME_TYPES_HPP___
+
+#include "boost/date_time/time_clock.hpp"
+#include "boost/date_time/microsec_time_clock.hpp"
+#include "boost/date_time/posix_time/ptime.hpp"
+#if defined(BOOST_DATE_TIME_OPTIONAL_GREGORIAN_TYPES)
+#include "boost/date_time/posix_time/date_duration_operators.hpp"
+#endif
+#include "boost/date_time/posix_time/posix_time_duration.hpp"
+#include "boost/date_time/posix_time/posix_time_system.hpp"
+#include "boost/date_time/posix_time/time_period.hpp"
+#include "boost/date_time/time_iterator.hpp"
+#include "boost/date_time/dst_rules.hpp"
+
+namespace boost {
+
+//!Defines a non-adjusted time system with nano-second resolution and stable calculation properties
+namespace posix_time {
+
+ //! Iterator over a defined time duration
+ /*! \ingroup time_basics
+ */
+ typedef date_time::time_itr<ptime> time_iterator;
+ //! A time clock that has a resolution of one second
+ /*! \ingroup time_basics
+ */
+ typedef date_time::second_clock<ptime> second_clock;
+
+#ifdef BOOST_DATE_TIME_HAS_HIGH_PRECISION_CLOCK
+ //! A time clock that has a resolution of one microsecond
+ /*! \ingroup time_basics
+ */
+ typedef date_time::microsec_clock<ptime> microsec_clock;
+#endif
+
+ //! Define a dst null dst rule for the posix_time system
+ typedef date_time::null_dst_rules<ptime::date_type, time_duration> no_dst;
+ //! Define US dst rule calculator for the posix_time system
+ typedef date_time::us_dst_rules<ptime::date_type, time_duration> us_dst;
+
+
+} } //namespace posix_time
+
+
+
+
+#endif
+
diff --git a/boost/boost/date_time/posix_time/ptime.hpp b/boost/boost/date_time/posix_time/ptime.hpp
new file mode 100644
index 00000000000..733b8312192
--- /dev/null
+++ b/boost/boost/date_time/posix_time/ptime.hpp
@@ -0,0 +1,65 @@
+#ifndef POSIX_PTIME_HPP___
+#define POSIX_PTIME_HPP___
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland
+ * $Date: 2004/10/01 02:29:49 $
+ */
+
+#include "boost/date_time/posix_time/posix_time_system.hpp"
+#include "boost/date_time/time.hpp"
+
+namespace boost {
+
+namespace posix_time {
+
+ //bring special enum values into the namespace
+ using date_time::special_values;
+ using date_time::not_special;
+ using date_time::neg_infin;
+ using date_time::pos_infin;
+ using date_time::not_a_date_time;
+ using date_time::max_date_time;
+ using date_time::min_date_time;
+
+ //! Time type with no timezone or other adjustments
+ /*! \ingroup time_basics
+ */
+ class ptime : public date_time::base_time<ptime, posix_time_system>
+ {
+ public:
+ typedef posix_time_system time_system_type;
+ typedef time_system_type::time_rep_type time_rep_type;
+ typedef time_system_type::time_duration_type time_duration_type;
+ typedef ptime time_type;
+ //! Construct with date and offset in day
+ ptime(gregorian::date d,time_duration_type td) : date_time::base_time<time_type,time_system_type>(d,td)
+ {}
+ //! Construct a time at start of the given day (midnight)
+ explicit ptime(gregorian::date d) : date_time::base_time<time_type,time_system_type>(d,time_duration_type(0,0,0))
+ {}
+ //! Copy from time_rep
+ ptime(const time_rep_type& rhs):
+ date_time::base_time<time_type,time_system_type>(rhs)
+ {}
+ //! Construct from special value
+ ptime(const special_values sv) : date_time::base_time<time_type,time_system_type>(sv)
+ {}
+#if !defined(DATE_TIME_NO_DEFAULT_CONSTRUCTOR)
+ // Default constructor constructs to not_a_date_time
+ ptime() : date_time::base_time<time_type,time_system_type>(gregorian::date(not_a_date_time), time_duration_type(not_a_date_time))
+ {}
+#endif // DATE_TIME_NO_DEFAULT_CONSTRUCTOR
+
+ };
+
+
+
+} }//namespace posix_time
+
+
+#endif
+
diff --git a/boost/boost/date_time/posix_time/time_formatters.hpp b/boost/boost/date_time/posix_time/time_formatters.hpp
new file mode 100644
index 00000000000..9eb64ef5e27
--- /dev/null
+++ b/boost/boost/date_time/posix_time/time_formatters.hpp
@@ -0,0 +1,289 @@
+#ifndef POSIXTIME_FORMATTERS_HPP___
+#define POSIXTIME_FORMATTERS_HPP___
+
+/* Copyright (c) 2002-2004 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2005/08/25 16:27:20 $
+ */
+
+#include "boost/date_time/gregorian/gregorian.hpp"
+#include "boost/date_time/compiler_config.hpp"
+#include "boost/date_time/iso_format.hpp"
+#include "boost/date_time/date_format_simple.hpp"
+#include "boost/date_time/posix_time/posix_time_types.hpp"
+#include "boost/date_time/time_formatting_streams.hpp"
+
+#include "boost/date_time/time_parsing.hpp"
+
+/* NOTE: The "to_*_string" code for older compilers, ones that define
+ * BOOST_DATE_TIME_INCLUDE_LIMITED_HEADERS, is located in
+ * formatters_limited.hpp
+ */
+
+namespace boost {
+
+namespace posix_time {
+
+ // template function called by wrapper functions:
+ // to_*_string(time_duration) & to_*_wstring(time_duration)
+ template<class charT>
+ inline std::basic_string<charT> to_simple_string_type(time_duration td) {
+ std::basic_ostringstream<charT> ss;
+ if(td.is_special()) {
+ /* simply using 'ss << td.get_rep()' won't work on compilers
+ * that don't support locales. This way does. */
+ // switch copied from date_names_put.hpp
+ switch(td.get_rep().as_special())
+ {
+ case not_a_date_time:
+ //ss << "not-a-number";
+ ss << "not-a-date-time";
+ break;
+ case pos_infin:
+ ss << "+infinity";
+ break;
+ case neg_infin:
+ ss << "-infinity";
+ break;
+ default:
+ ss << "";
+ }
+ }
+ else {
+ charT fill_char = '0';
+ if(td.is_negative()) {
+ ss << '-';
+ }
+ ss << std::setw(2) << std::setfill(fill_char)
+ << date_time::absolute_value(td.hours()) << ":";
+ ss << std::setw(2) << std::setfill(fill_char)
+ << date_time::absolute_value(td.minutes()) << ":";
+ ss << std::setw(2) << std::setfill(fill_char)
+ << date_time::absolute_value(td.seconds());
+ //TODO the following is totally non-generic, yelling FIXME
+#if (defined(BOOST_MSVC) && (_MSC_VER < 1300))
+ boost::int64_t frac_sec =
+ date_time::absolute_value(td.fractional_seconds());
+ // JDG [7/6/02 VC++ compatibility]
+ charT buff[32];
+ _i64toa(frac_sec, buff, 10);
+#else
+ time_duration::fractional_seconds_type frac_sec =
+ date_time::absolute_value(td.fractional_seconds());
+#endif
+ if (frac_sec != 0) {
+ ss << "." << std::setw(time_duration::num_fractional_digits())
+ << std::setfill(fill_char)
+
+ // JDG [7/6/02 VC++ compatibility]
+#if (defined(BOOST_MSVC) && (_MSC_VER < 1300))
+ << buff;
+#else
+ << frac_sec;
+#endif
+ }
+ }// else
+ return ss.str();
+ }
+ //! Time duration to string -hh::mm::ss.fffffff. Example: 10:09:03.0123456
+ /*!\ingroup time_format
+ */
+ inline std::string to_simple_string(time_duration td) {
+ return to_simple_string_type<char>(td);
+ }
+
+
+ // template function called by wrapper functions:
+ // to_*_string(time_duration) & to_*_wstring(time_duration)
+ template<class charT>
+ inline std::basic_string<charT> to_iso_string_type(time_duration td)
+ {
+ std::basic_ostringstream<charT> ss;
+ if(td.is_special()) {
+ /* simply using 'ss << td.get_rep()' won't work on compilers
+ * that don't support locales. This way does. */
+ // switch copied from date_names_put.hpp
+ switch(td.get_rep().as_special()) {
+ case not_a_date_time:
+ //ss << "not-a-number";
+ ss << "not-a-date-time";
+ break;
+ case pos_infin:
+ ss << "+infinity";
+ break;
+ case neg_infin:
+ ss << "-infinity";
+ break;
+ default:
+ ss << "";
+ }
+ }
+ else {
+ charT fill_char = '0';
+ if(td.is_negative()) {
+ ss << '-';
+ }
+ ss << std::setw(2) << std::setfill(fill_char)
+ << date_time::absolute_value(td.hours());
+ ss << std::setw(2) << std::setfill(fill_char)
+ << date_time::absolute_value(td.minutes());
+ ss << std::setw(2) << std::setfill(fill_char)
+ << date_time::absolute_value(td.seconds());
+ //TODO the following is totally non-generic, yelling FIXME
+#if (defined(BOOST_MSVC) && (_MSC_VER < 1300))
+ boost::int64_t frac_sec =
+ date_time::absolute_value(td.fractional_seconds());
+ // JDG [7/6/02 VC++ compatibility]
+ charT buff[32];
+ _i64toa(frac_sec, buff, 10);
+#else
+ time_duration::fractional_seconds_type frac_sec =
+ date_time::absolute_value(td.fractional_seconds());
+#endif
+ if (frac_sec != 0) {
+ ss << "." << std::setw(time_duration::num_fractional_digits())
+ << std::setfill(fill_char)
+
+ // JDG [7/6/02 VC++ compatibility]
+#if (defined(BOOST_MSVC) && (_MSC_VER < 1300))
+ << buff;
+#else
+ << frac_sec;
+#endif
+ }
+ }// else
+ return ss.str();
+ }
+ //! Time duration in iso format -hhmmss,fffffff Example: 10:09:03,0123456
+ /*!\ingroup time_format
+ */
+ inline std::string to_iso_string(time_duration td){
+ return to_iso_string_type<char>(td);
+ }
+
+ //! Time to simple format CCYY-mmm-dd hh:mm:ss.fffffff
+ /*!\ingroup time_format
+ */
+ template<class charT>
+ inline std::basic_string<charT> to_simple_string_type(ptime t)
+ {
+ // can't use this w/gcc295, no to_simple_string_type<>(td) available
+ std::basic_string<charT> ts = gregorian::to_simple_string_type<charT>(t.date());// + " ";
+ if(!t.time_of_day().is_special()) {
+ charT space = ' ';
+ return ts + space + to_simple_string_type<charT>(t.time_of_day());
+ }
+ else {
+ return ts;
+ }
+ }
+ inline std::string to_simple_string(ptime t){
+ return to_simple_string_type<char>(t);
+ }
+
+ // function called by wrapper functions to_*_string(time_period)
+ // & to_*_wstring(time_period)
+ template<class charT>
+ inline std::basic_string<charT> to_simple_string_type(time_period tp)
+ {
+ charT beg = '[', mid = '/', end = ']';
+ std::basic_string<charT> d1(to_simple_string_type<charT>(tp.begin()));
+ std::basic_string<charT> d2(to_simple_string_type<charT>(tp.last()));
+ return std::basic_string<charT>(beg + d1 + mid + d2 + end);
+ }
+ //! Convert to string of form [YYYY-mmm-DD HH:MM::SS.ffffff/YYYY-mmm-DD HH:MM::SS.fffffff]
+ /*!\ingroup time_format
+ */
+ inline std::string to_simple_string(time_period tp){
+ return to_simple_string_type<char>(tp);
+ }
+
+ // function called by wrapper functions to_*_string(time_period)
+ // & to_*_wstring(time_period)
+ template<class charT>
+ inline std::basic_string<charT> to_iso_string_type(ptime t)
+ {
+ std::basic_string<charT> ts = gregorian::to_iso_string_type<charT>(t.date());// + "T";
+ if(!t.time_of_day().is_special()) {
+ charT sep = 'T';
+ return ts + sep + to_iso_string_type<charT>(t.time_of_day());
+ }
+ else {
+ return ts;
+ }
+ }
+ //! Convert iso short form YYYYMMDDTHHMMSS where T is the date-time separator
+ /*!\ingroup time_format
+ */
+ inline std::string to_iso_string(ptime t){
+ return to_iso_string_type<char>(t);
+ }
+
+
+ // function called by wrapper functions to_*_string(time_period)
+ // & to_*_wstring(time_period)
+ template<class charT>
+ inline std::basic_string<charT> to_iso_extended_string_type(ptime t)
+ {
+ std::basic_string<charT> ts = gregorian::to_iso_extended_string_type<charT>(t.date());// + "T";
+ if(!t.time_of_day().is_special()) {
+ charT sep = 'T';
+ return ts + sep + to_simple_string_type<charT>(t.time_of_day());
+ }
+ else {
+ return ts;
+ }
+ }
+ //! Convert to form YYYY-MM-DDTHH:MM:SS where T is the date-time separator
+ /*!\ingroup time_format
+ */
+ inline std::string to_iso_extended_string(ptime t){
+ return to_iso_extended_string_type<char>(t);
+ }
+
+#if !defined(BOOST_NO_STD_WSTRING)
+ //! Time duration to wstring -hh::mm::ss.fffffff. Example: 10:09:03.0123456
+ /*!\ingroup time_format
+ */
+ inline std::wstring to_simple_wstring(time_duration td) {
+ return to_simple_string_type<wchar_t>(td);
+ }
+ //! Time duration in iso format -hhmmss,fffffff Example: 10:09:03,0123456
+ /*!\ingroup time_format
+ */
+ inline std::wstring to_iso_wstring(time_duration td){
+ return to_iso_string_type<wchar_t>(td);
+ }
+ inline std::wstring to_simple_wstring(ptime t){
+ return to_simple_string_type<wchar_t>(t);
+ }
+ //! Convert to wstring of form [YYYY-mmm-DD HH:MM::SS.ffffff/YYYY-mmm-DD HH:MM::SS.fffffff]
+ /*!\ingroup time_format
+ */
+ inline std::wstring to_simple_wstring(time_period tp){
+ return to_simple_string_type<wchar_t>(tp);
+ }
+ //! Convert iso short form YYYYMMDDTHHMMSS where T is the date-time separator
+ /*!\ingroup time_format
+ */
+ inline std::wstring to_iso_wstring(ptime t){
+ return to_iso_string_type<wchar_t>(t);
+ }
+ //! Convert to form YYYY-MM-DDTHH:MM:SS where T is the date-time separator
+ /*!\ingroup time_format
+ */
+ inline std::wstring to_iso_extended_wstring(ptime t){
+ return to_iso_extended_string_type<wchar_t>(t);
+ }
+
+#endif // BOOST_NO_STD_WSTRING
+
+
+} } //namespace posix_time
+
+
+#endif
+
diff --git a/boost/boost/date_time/posix_time/time_formatters_limited.hpp b/boost/boost/date_time/posix_time/time_formatters_limited.hpp
new file mode 100644
index 00000000000..4b6200c1512
--- /dev/null
+++ b/boost/boost/date_time/posix_time/time_formatters_limited.hpp
@@ -0,0 +1,211 @@
+#ifndef POSIXTIME_FORMATTERS_LIMITED_HPP___
+#define POSIXTIME_FORMATTERS_LIMITED_HPP___
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2005/08/25 16:27:20 $
+ */
+
+#include "boost/date_time/gregorian/gregorian.hpp"
+#include "boost/date_time/compiler_config.hpp"
+#include "boost/date_time/iso_format.hpp"
+#include "boost/date_time/date_format_simple.hpp"
+#include "boost/date_time/posix_time/posix_time_types.hpp"
+#include "boost/date_time/time_formatting_streams.hpp"
+
+namespace boost {
+
+namespace posix_time {
+
+ //! Time duration to string -hh::mm::ss.fffffff. Example: 10:09:03.0123456
+ /*!\ingroup time_format
+ */
+ inline std::string to_simple_string(time_duration td) {
+ std::ostringstream ss;
+ if(td.is_special()) {
+ /* simply using 'ss << td.get_rep()' won't work on compilers
+ * that don't support locales. This way does. */
+ // switch copied from date_names_put.hpp
+ switch(td.get_rep().as_special())
+ {
+ case not_a_date_time:
+ //ss << "not-a-number";
+ ss << "not-a-date-time";
+ break;
+ case pos_infin:
+ ss << "+infinity";
+ break;
+ case neg_infin:
+ ss << "-infinity";
+ break;
+ default:
+ ss << "";
+ }
+ }
+ else {
+ if(td.is_negative()) {
+ ss << '-';
+ }
+ ss << std::setw(2) << std::setfill('0')
+ << date_time::absolute_value(td.hours()) << ":";
+ ss << std::setw(2) << std::setfill('0')
+ << date_time::absolute_value(td.minutes()) << ":";
+ ss << std::setw(2) << std::setfill('0')
+ << date_time::absolute_value(td.seconds());
+ //TODO the following is totally non-generic, yelling FIXME
+#if (defined(BOOST_MSVC) && (_MSC_VER < 1300))
+ boost::int64_t frac_sec =
+ date_time::absolute_value(td.fractional_seconds());
+ // JDG [7/6/02 VC++ compatibility]
+ char buff[32];
+ _i64toa(frac_sec, buff, 10);
+#else
+ time_duration::fractional_seconds_type frac_sec =
+ date_time::absolute_value(td.fractional_seconds());
+#endif
+ if (frac_sec != 0) {
+ ss << "." << std::setw(time_duration::num_fractional_digits())
+ << std::setfill('0')
+
+ // JDG [7/6/02 VC++ compatibility]
+#if (defined(BOOST_MSVC) && (_MSC_VER < 1300))
+ << buff;
+#else
+ << frac_sec;
+#endif
+ }
+ }// else
+ return ss.str();
+ }
+
+ //! Time duration in iso format -hhmmss,fffffff Example: 10:09:03,0123456
+ /*!\ingroup time_format
+ */
+ inline
+ std::string
+ to_iso_string(time_duration td)
+ {
+ std::ostringstream ss;
+ if(td.is_special()) {
+ /* simply using 'ss << td.get_rep()' won't work on compilers
+ * that don't support locales. This way does. */
+ // switch copied from date_names_put.hpp
+ switch(td.get_rep().as_special()) {
+ case not_a_date_time:
+ //ss << "not-a-number";
+ ss << "not-a-date-time";
+ break;
+ case pos_infin:
+ ss << "+infinity";
+ break;
+ case neg_infin:
+ ss << "-infinity";
+ break;
+ default:
+ ss << "";
+ }
+ }
+ else {
+ if(td.is_negative()) {
+ ss << '-';
+ }
+ ss << std::setw(2) << std::setfill('0')
+ << date_time::absolute_value(td.hours());
+ ss << std::setw(2) << std::setfill('0')
+ << date_time::absolute_value(td.minutes());
+ ss << std::setw(2) << std::setfill('0')
+ << date_time::absolute_value(td.seconds());
+ //TODO the following is totally non-generic, yelling FIXME
+#if (defined(BOOST_MSVC) && (_MSC_VER < 1300))
+ boost::int64_t frac_sec =
+ date_time::absolute_value(td.fractional_seconds());
+ // JDG [7/6/02 VC++ compatibility]
+ char buff[32];
+ _i64toa(frac_sec, buff, 10);
+#else
+ time_duration::fractional_seconds_type frac_sec =
+ date_time::absolute_value(td.fractional_seconds());
+#endif
+ if (frac_sec != 0) {
+ ss << "." << std::setw(time_duration::num_fractional_digits())
+ << std::setfill('0')
+
+ // JDG [7/6/02 VC++ compatibility]
+#if (defined(BOOST_MSVC) && (_MSC_VER < 1300))
+ << buff;
+#else
+ << frac_sec;
+#endif
+ }
+ }// else
+ return ss.str();
+ }
+
+ //! Time to simple format CCYY-mmm-dd hh:mm:ss.fffffff
+ /*!\ingroup time_format
+ */
+ inline
+ std::string
+ to_simple_string(ptime t)
+ {
+ std::string ts = gregorian::to_simple_string(t.date());// + " ";
+ if(!t.time_of_day().is_special()) {
+ return ts + " " + to_simple_string(t.time_of_day());
+ }
+ else {
+ return ts;
+ }
+ }
+
+ //! Convert to string of form [YYYY-mmm-DD HH:MM::SS.ffffff/YYYY-mmm-DD HH:MM::SS.fffffff]
+ /*!\ingroup time_format
+ */
+ inline
+ std::string
+ to_simple_string(time_period tp)
+ {
+ std::string d1(to_simple_string(tp.begin()));
+ std::string d2(to_simple_string(tp.last()));
+ return std::string("[" + d1 + "/" + d2 +"]");
+ }
+
+ //! Convert iso short form YYYYMMDDTHHMMSS where T is the date-time separator
+ /*!\ingroup time_format
+ */
+ inline
+ std::string to_iso_string(ptime t)
+ {
+ std::string ts = gregorian::to_iso_string(t.date());// + "T";
+ if(!t.time_of_day().is_special()) {
+ return ts + "T" + to_iso_string(t.time_of_day());
+ }
+ else {
+ return ts;
+ }
+ }
+
+ //! Convert to form YYYY-MM-DDTHH:MM:SS where T is the date-time separator
+ /*!\ingroup time_format
+ */
+ inline
+ std::string
+ to_iso_extended_string(ptime t)
+ {
+ std::string ts = gregorian::to_iso_extended_string(t.date());// + "T";
+ if(!t.time_of_day().is_special()) {
+ return ts + "T" + to_simple_string(t.time_of_day());
+ }
+ else {
+ return ts;
+ }
+ }
+
+
+} } //namespace posix_time
+
+
+#endif
+
diff --git a/boost/boost/date_time/posix_time/time_parsers.hpp b/boost/boost/date_time/posix_time/time_parsers.hpp
new file mode 100644
index 00000000000..89db5f2b236
--- /dev/null
+++ b/boost/boost/date_time/posix_time/time_parsers.hpp
@@ -0,0 +1,44 @@
+#ifndef POSIXTIME_PARSERS_HPP___
+#define POSIXTIME_PARSERS_HPP___
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland
+ * $Date: 2003/11/23 02:37:57 $
+ */
+
+#include "boost/date_time/gregorian/gregorian.hpp"
+#include "boost/date_time/time_parsing.hpp"
+#include "boost/date_time/posix_time/posix_time_types.hpp"
+
+
+namespace boost {
+
+namespace posix_time {
+
+ //! Creates a time_duration object from a delimited string
+ /*! Expected format for string is "[-]h[h][:mm][:ss][.fff]".
+ * A negative duration will be created if the first character in
+ * string is a '-', all other '-' will be treated as delimiters.
+ * Accepted delimiters are "-:,.". */
+ inline time_duration duration_from_string(const std::string& s) {
+ return date_time::parse_delimited_time_duration<time_duration>(s);
+ }
+
+ inline ptime time_from_string(const std::string& s) {
+ return date_time::parse_delimited_time<ptime>(s, ' ');
+ }
+
+ inline ptime from_iso_string(const std::string& s) {
+ return date_time::parse_iso_time<ptime>(s, 'T');
+ }
+
+
+
+} } //namespace posix_time
+
+
+#endif
+
diff --git a/boost/boost/date_time/posix_time/time_period.hpp b/boost/boost/date_time/posix_time/time_period.hpp
new file mode 100644
index 00000000000..c53c1d7cda9
--- /dev/null
+++ b/boost/boost/date_time/posix_time/time_period.hpp
@@ -0,0 +1,29 @@
+#ifndef POSIX_TIME_PERIOD_HPP___
+#define POSIX_TIME_PERIOD_HPP___
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland
+ * $Date: 2003/11/23 02:37:57 $
+ */
+
+#include "boost/date_time/period.hpp"
+#include "boost/date_time/posix_time/posix_time_duration.hpp"
+#include "boost/date_time/posix_time/ptime.hpp"
+
+namespace boost {
+namespace posix_time {
+
+ //! Time period type
+ /*! \ingroup time_basics
+ */
+ typedef date_time::period<ptime, time_duration> time_period;
+
+
+} }//namespace posix_time
+
+
+#endif
+
diff --git a/boost/boost/date_time/posix_time/time_serialize.hpp b/boost/boost/date_time/posix_time/time_serialize.hpp
new file mode 100644
index 00000000000..f9c3439fd4d
--- /dev/null
+++ b/boost/boost/date_time/posix_time/time_serialize.hpp
@@ -0,0 +1,200 @@
+#ifndef POSIX_TIME_SERIALIZE_HPP___
+#define POSIX_TIME_SERIALIZE_HPP___
+
+/* Copyright (c) 2004-2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2007/03/02 02:45:57 $
+ */
+
+#include "boost/date_time/posix_time/posix_time.hpp"
+#include "boost/date_time/gregorian/greg_serialize.hpp"
+#include "boost/serialization/split_free.hpp"
+
+
+// macros to split serialize functions into save & load functions
+// NOTE: these macros define template functions in the boost::serialization namespace.
+// They must be expanded *outside* of any namespace
+BOOST_SERIALIZATION_SPLIT_FREE(boost::posix_time::ptime)
+BOOST_SERIALIZATION_SPLIT_FREE(boost::posix_time::time_duration)
+BOOST_SERIALIZATION_SPLIT_FREE(boost::posix_time::time_period)
+
+namespace boost {
+namespace serialization {
+
+
+/*** time_duration ***/
+
+//! Function to save posix_time::time_duration objects using serialization lib
+/*! time_duration objects are broken down into 4 parts for serialization:
+ * types are hour_type, min_type, sec_type, and fractional_seconds_type
+ * as defined in the time_duration class
+ */
+template<class Archive>
+void save(Archive & ar,
+ const posix_time::time_duration& td,
+ unsigned int /*version*/)
+{
+ // serialize a bool so we know how to read this back in later
+ bool is_special = td.is_special();
+ ar & make_nvp("is_special", is_special);
+ if(is_special) {
+ std::string s = to_simple_string(td);
+ ar & make_nvp("sv_time_duration", s);
+ }
+ else {
+ typename posix_time::time_duration::hour_type h = td.hours();
+ typename posix_time::time_duration::min_type m = td.minutes();
+ typename posix_time::time_duration::sec_type s = td.seconds();
+ typename posix_time::time_duration::fractional_seconds_type fs = td.fractional_seconds();
+ ar & make_nvp("time_duration_hours", h);
+ ar & make_nvp("time_duration_minutes", m);
+ ar & make_nvp("time_duration_seconds", s);
+ ar & make_nvp("time_duration_fractional_seconds", fs);
+ }
+}
+
+//! Function to load posix_time::time_duration objects using serialization lib
+/*! time_duration objects are broken down into 4 parts for serialization:
+ * types are hour_type, min_type, sec_type, and fractional_seconds_type
+ * as defined in the time_duration class
+ */
+template<class Archive>
+void load(Archive & ar,
+ posix_time::time_duration & td,
+ unsigned int /*version*/)
+{
+ bool is_special = false;
+ ar & make_nvp("is_special", is_special);
+ if(is_special) {
+ std::string s;
+ ar & make_nvp("sv_time_duration", s);
+ posix_time::special_values sv = gregorian::special_value_from_string(s);
+ td = posix_time::time_duration(sv);
+ }
+ else {
+ typename posix_time::time_duration::hour_type h(0);
+ typename posix_time::time_duration::min_type m(0);
+ typename posix_time::time_duration::sec_type s(0);
+ typename posix_time::time_duration::fractional_seconds_type fs(0);
+ ar & make_nvp("time_duration_hours", h);
+ ar & make_nvp("time_duration_minutes", m);
+ ar & make_nvp("time_duration_seconds", s);
+ ar & make_nvp("time_duration_fractional_seconds", fs);
+ td = posix_time::time_duration(h,m,s,fs);
+ }
+}
+
+// no load_construct_data function provided as time_duration provides a
+// default constructor
+
+/*** ptime ***/
+
+//! Function to save posix_time::ptime objects using serialization lib
+/*! ptime objects are broken down into 2 parts for serialization:
+ * a date object and a time_duration onject
+ */
+template<class Archive>
+void save(Archive & ar,
+ const posix_time::ptime& pt,
+ unsigned int /*version*/)
+{
+ // from_iso_string does not include fractional seconds
+ // therefore date and time_duration are used
+ typename posix_time::ptime::date_type d = pt.date();
+ ar & make_nvp("ptime_date", d);
+ if(!pt.is_special()) {
+ typename posix_time::ptime::time_duration_type td = pt.time_of_day();
+ ar & make_nvp("ptime_time_duration", td);
+ }
+}
+
+//! Function to load posix_time::ptime objects using serialization lib
+/*! ptime objects are broken down into 2 parts for serialization:
+ * a date object and a time_duration onject
+ */
+template<class Archive>
+void load(Archive & ar,
+ posix_time::ptime & pt,
+ unsigned int /*version*/)
+{
+ // from_iso_string does not include fractional seconds
+ // therefore date and time_duration are used
+ typename posix_time::ptime::date_type d(posix_time::not_a_date_time);
+ typename posix_time::ptime::time_duration_type td;
+ ar & make_nvp("ptime_date", d);
+ if(!d.is_special()) {
+ ar & make_nvp("ptime_time_duration", td);
+ pt = boost::posix_time::ptime(d,td);
+ }
+ else {
+ pt = boost::posix_time::ptime(d.as_special());
+ }
+
+}
+
+//!override needed b/c no default constructor
+template<class Archive>
+inline void load_construct_data(Archive & ar,
+ posix_time::ptime* pt,
+ const unsigned int /*file_version*/)
+{
+ // retrieve data from archive required to construct new
+ // invoke inplace constructor to initialize instance of date
+ new(pt) boost::posix_time::ptime(boost::posix_time::not_a_date_time);
+}
+
+/*** time_period ***/
+
+//! Function to save posix_time::time_period objects using serialization lib
+/*! time_period objects are broken down into 2 parts for serialization:
+ * a begining ptime object and an ending ptime object
+ */
+template<class Archive>
+void save(Archive & ar,
+ const posix_time::time_period& tp,
+ unsigned int /*version*/)
+{
+ posix_time::ptime beg(tp.begin().date(), tp.begin().time_of_day());
+ posix_time::ptime end(tp.end().date(), tp.end().time_of_day());
+ ar & make_nvp("time_period_begin", beg);
+ ar & make_nvp("time_period_end", end);
+}
+
+//! Function to load posix_time::time_period objects using serialization lib
+/*! time_period objects are broken down into 2 parts for serialization:
+ * a begining ptime object and an ending ptime object
+ */
+template<class Archive>
+void load(Archive & ar,
+ boost::posix_time::time_period & tp,
+ unsigned int /*version*/)
+{
+ posix_time::time_duration td(1,0,0);
+ gregorian::date d(gregorian::not_a_date_time);
+ posix_time::ptime beg(d,td);
+ posix_time::ptime end(d,td);
+ ar & make_nvp("time_period_begin", beg);
+ ar & make_nvp("time_period_end", end);
+ tp = boost::posix_time::time_period(beg, end);
+}
+
+//!override needed b/c no default constructor
+template<class Archive>
+inline void load_construct_data(Archive & ar,
+ boost::posix_time::time_period* tp,
+ const unsigned int /*file_version*/)
+{
+ posix_time::time_duration td(1,0,0);
+ gregorian::date d(gregorian::not_a_date_time);
+ posix_time::ptime beg(d,td);
+ posix_time::ptime end(d,td);
+ new(tp) boost::posix_time::time_period(beg,end);
+}
+
+} // namespace serialization
+} // namespace boost
+
+#endif
diff --git a/boost/boost/date_time/special_defs.hpp b/boost/boost/date_time/special_defs.hpp
new file mode 100644
index 00000000000..d63da60eceb
--- /dev/null
+++ b/boost/boost/date_time/special_defs.hpp
@@ -0,0 +1,25 @@
+#ifndef DATE_TIME_SPECIAL_DEFS_HPP__
+#define DATE_TIME_SPECIAL_DEFS_HPP__
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland
+ * $Date: 2004/07/01 02:27:04 $
+ */
+
+namespace boost {
+namespace date_time {
+
+ enum special_values {not_a_date_time,
+ neg_infin, pos_infin,
+ min_date_time, max_date_time,
+ not_special, NumSpecialValues};
+
+
+} } //namespace date_time
+
+
+#endif
+
diff --git a/boost/boost/date_time/special_values_formatter.hpp b/boost/boost/date_time/special_values_formatter.hpp
new file mode 100644
index 00000000000..50af4bbef7c
--- /dev/null
+++ b/boost/boost/date_time/special_values_formatter.hpp
@@ -0,0 +1,96 @@
+
+#ifndef DATETIME_SPECIAL_VALUE_FORMATTER_HPP___
+#define DATETIME_SPECIAL_VALUE_FORMATTER_HPP___
+
+/* Copyright (c) 2004 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland
+ * $Date: 2005/05/03 14:27:51 $
+ */
+
+#include <vector>
+#include <string>
+#include "boost/date_time/special_defs.hpp"
+
+namespace boost { namespace date_time {
+
+
+ //! Class that provides generic formmatting ostream formatting for special values
+ /*! This class provides for the formmating of special values to an output stream.
+ * In particular, it produces strings for the values of negative and positive
+ * infinity as well as not_a_date_time.
+ *
+ * While not a facet, this class is used by the date and time facets for formatting
+ * special value types.
+ *
+ */
+ template <class CharT, class OutItrT = std::ostreambuf_iterator<CharT, std::char_traits<CharT> > >
+ class special_values_formatter
+ {
+ public:
+ typedef std::basic_string<CharT> string_type;
+ typedef CharT char_type;
+ typedef std::vector<string_type> collection_type;
+ static const char_type default_special_value_names[3][17];
+
+ //! Construct special values formatter using default strings.
+ /*! Default strings are not-a-date-time -infinity +infinity
+ */
+ special_values_formatter()
+ {
+ std::copy(&default_special_value_names[0],
+ &default_special_value_names[3],
+ std::back_inserter(m_special_value_names));
+ }
+
+ //! Construct special values formatter from array of strings
+ /*! This constructor will take pair of iterators from an array of strings
+ * that represent the special values and copy them for use in formatting
+ * special values.
+ *@code
+ * const char* const special_value_names[]={"nadt","-inf","+inf" };
+ *
+ * special_value_formatter svf(&special_value_names[0], &special_value_names[3]);
+ *@endcode
+ */
+ special_values_formatter(const char_type* const* begin, const char_type* const* end)
+ {
+ std::copy(begin, end, std::back_inserter(m_special_value_names));
+ }
+ special_values_formatter(typename collection_type::iterator beg, typename collection_type::iterator end)
+ {
+ std::copy(beg, end, std::back_inserter(m_special_value_names));
+ }
+
+ OutItrT put_special(OutItrT next,
+ const boost::date_time::special_values& value) const
+ {
+
+ unsigned int index = value;
+ if (index < m_special_value_names.size()) {
+ std::copy(m_special_value_names[index].begin(),
+ m_special_value_names[index].end(),
+ next);
+ }
+ return next;
+ }
+ protected:
+ collection_type m_special_value_names;
+ };
+
+ //! Storage for the strings used to indicate special values
+ /* using c_strings to initialize these worked fine in testing, however,
+ * a project that compiled its objects separately, then linked in a separate
+ * step wound up with redefinition errors for the values in this array.
+ * Initializing individual characters eliminated this problem */
+ template <class CharT, class OutItrT>
+ const typename special_values_formatter<CharT, OutItrT>::char_type special_values_formatter<CharT, OutItrT>::default_special_value_names[3][17] = {
+ {'n','o','t','-','a','-','d','a','t','e','-','t','i','m','e'},
+ {'-','i','n','f','i','n','i','t','y'},
+ {'+','i','n','f','i','n','i','t','y'} };
+
+ } } //namespace boost::date_time
+
+#endif
diff --git a/boost/boost/date_time/special_values_parser.hpp b/boost/boost/date_time/special_values_parser.hpp
new file mode 100644
index 00000000000..00112fc9825
--- /dev/null
+++ b/boost/boost/date_time/special_values_parser.hpp
@@ -0,0 +1,159 @@
+
+#ifndef DATE_TIME_SPECIAL_VALUES_PARSER_HPP__
+#define DATE_TIME_SPECIAL_VALUES_PARSER_HPP__
+
+/* Copyright (c) 2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date:
+ */
+
+
+#include "boost/date_time/string_parse_tree.hpp"
+#include "boost/date_time/special_defs.hpp"
+#include <string>
+#include <vector>
+
+namespace boost { namespace date_time {
+
+ //! Class for special_value parsing
+ /*!
+ * TODO: add doc-comments for which elements can be changed
+ * Parses input stream for strings representing special_values.
+ * Special values parsed are:
+ * - not_a_date_time
+ * - neg_infin
+ * - pod_infin
+ * - min_date_time
+ * - max_date_time
+ */
+ template<class date_type, typename charT>
+ class special_values_parser
+ {
+ public:
+ typedef std::basic_string<charT> string_type;
+ //typedef std::basic_stringstream<charT> stringstream_type;
+ typedef std::istreambuf_iterator<charT> stream_itr_type;
+ //typedef typename string_type::const_iterator const_itr;
+ //typedef typename date_type::year_type year_type;
+ //typedef typename date_type::month_type month_type;
+ typedef typename date_type::duration_type duration_type;
+ //typedef typename date_type::day_of_week_type day_of_week_type;
+ //typedef typename date_type::day_type day_type;
+ typedef string_parse_tree<charT> parse_tree_type;
+ typedef typename parse_tree_type::parse_match_result_type match_results;
+ typedef std::vector<std::basic_string<charT> > collection_type;
+
+ typedef charT char_type;
+ static const char_type nadt_string[16];
+ static const char_type neg_inf_string[10];
+ static const char_type pos_inf_string[10];
+ static const char_type min_date_time_string[18];
+ static const char_type max_date_time_string[18];
+
+ //! Creates a special_values_parser with the default set of "sv_strings"
+ special_values_parser()
+ {
+ sv_strings(string_type(nadt_string),
+ string_type(neg_inf_string),
+ string_type(pos_inf_string),
+ string_type(min_date_time_string),
+ string_type(max_date_time_string));
+ }
+
+ //! Creates a special_values_parser using a user defined set of element strings
+ special_values_parser(const string_type& nadt_str,
+ const string_type& neg_inf_str,
+ const string_type& pos_inf_str,
+ const string_type& min_dt_str,
+ const string_type& max_dt_str)
+ {
+ sv_strings(nadt_str, neg_inf_str, pos_inf_str, min_dt_str, max_dt_str);
+ }
+
+ special_values_parser(typename collection_type::iterator beg, typename collection_type::iterator end)
+ {
+ collection_type phrases;
+ std::copy(beg, end, std::back_inserter(phrases));
+ m_sv_strings = parse_tree_type(phrases, static_cast<int>(not_a_date_time));
+ }
+
+ special_values_parser(const special_values_parser<date_type,charT>& svp)
+ {
+ this->m_sv_strings = svp.m_sv_strings;
+ }
+
+ //! Replace special value strings
+ void sv_strings(const string_type& nadt_str,
+ const string_type& neg_inf_str,
+ const string_type& pos_inf_str,
+ const string_type& min_dt_str,
+ const string_type& max_dt_str)
+ {
+ collection_type phrases;
+ phrases.push_back(nadt_str);
+ phrases.push_back(neg_inf_str);
+ phrases.push_back(pos_inf_str);
+ phrases.push_back(min_dt_str);
+ phrases.push_back(max_dt_str);
+ m_sv_strings = parse_tree_type(phrases, static_cast<int>(not_a_date_time));
+ }
+
+ /* Does not return a special_value because if the parsing fails,
+ * the return value will always be not_a_date_time
+ * (mr.current_match retains its default value of -1 on a failed
+ * parse and that casts to not_a_date_time). */
+ //! Sets match_results.current_match to the corresponding special_value or -1
+ bool match(stream_itr_type& sitr,
+ stream_itr_type& str_end,
+ match_results& mr) const
+ {
+ unsigned int level = 0;
+ m_sv_strings.match(sitr, str_end, mr, level);
+ return (mr.current_match != match_results::PARSE_ERROR);
+ }
+ /*special_values match(stream_itr_type& sitr,
+ stream_itr_type& str_end,
+ match_results& mr) const
+ {
+ unsigned int level = 0;
+ m_sv_strings.match(sitr, str_end, mr, level);
+ if(mr.current_match == match_results::PARSE_ERROR) {
+ throw std::ios_base::failure("Parse failed. No match found for '" + mr.cache + "'");
+ }
+ return static_cast<special_values>(mr.current_match);
+ }*/
+
+
+ private:
+ parse_tree_type m_sv_strings;
+
+ };
+
+ template<class date_type, class CharT>
+ const typename special_values_parser<date_type, CharT>::char_type
+ special_values_parser<date_type, CharT>::nadt_string[16] =
+ {'n','o','t','-','a','-','d','a','t','e','-','t','i','m','e'};
+ template<class date_type, class CharT>
+ const typename special_values_parser<date_type, CharT>::char_type
+ special_values_parser<date_type, CharT>::neg_inf_string[10] =
+ {'-','i','n','f','i','n','i','t','y'};
+ template<class date_type, class CharT>
+ const typename special_values_parser<date_type, CharT>::char_type
+ special_values_parser<date_type, CharT>::pos_inf_string[10] =
+ {'+','i','n','f','i','n','i','t','y'};
+ template<class date_type, class CharT>
+ const typename special_values_parser<date_type, CharT>::char_type
+ special_values_parser<date_type, CharT>::min_date_time_string[18] =
+ {'m','i','n','i','m','u','m','-','d','a','t','e','-','t','i','m','e'};
+ template<class date_type, class CharT>
+ const typename special_values_parser<date_type, CharT>::char_type
+ special_values_parser<date_type, CharT>::max_date_time_string[18] =
+ {'m','a','x','i','m','u','m','-','d','a','t','e','-','t','i','m','e'};
+
+} } //namespace
+
+#endif // DATE_TIME_SPECIAL_VALUES_PARSER_HPP__
+
diff --git a/boost/boost/date_time/string_convert.hpp b/boost/boost/date_time/string_convert.hpp
new file mode 100644
index 00000000000..c2b22c3d17a
--- /dev/null
+++ b/boost/boost/date_time/string_convert.hpp
@@ -0,0 +1,33 @@
+#ifndef _STRING_CONVERT_HPP___
+#define _STRING_CONVERT_HPP___
+
+/* Copyright (c) 2005 CrystalClear Software, Inc.
+ * Subject to the Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2005/04/23 05:39:52 $
+ */
+
+#include "boost/date_time/compiler_config.hpp"
+#include <string>
+
+namespace boost {
+namespace date_time {
+
+ //! Converts a string from one value_type to another
+ /*! Converts a wstring to a string (or a string to wstring). If both template parameters
+ * are of same type, a copy of the input string is returned. */
+ template<class InputT, class OutputT>
+ inline
+ std::basic_string<OutputT> convert_string_type(const std::basic_string<InputT>& inp_str)
+ {
+ typedef std::basic_string<InputT> input_type;
+ typedef std::basic_string<OutputT> output_type;
+ output_type result;
+ result.insert(result.begin(), inp_str.begin(), inp_str.end());
+ return result;
+ }
+
+}} // namespace boost::date_time
+
+#endif // _STRING_CONVERT_HPP___
diff --git a/boost/boost/date_time/string_parse_tree.hpp b/boost/boost/date_time/string_parse_tree.hpp
new file mode 100644
index 00000000000..690b0c7b28e
--- /dev/null
+++ b/boost/boost/date_time/string_parse_tree.hpp
@@ -0,0 +1,278 @@
+#ifndef BOOST_DATE_TIME_STRING_PARSE_TREE___HPP__
+#define BOOST_DATE_TIME_STRING_PARSE_TREE___HPP__
+
+/* Copyright (c) 2004-2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2006/06/23 17:55:18 $
+ */
+
+
+#include "boost/lexical_cast.hpp" //error without?
+#include "boost/algorithm/string/case_conv.hpp"
+#include <map>
+#include <string>
+#include <vector>
+#include <algorithm>
+
+namespace boost { namespace date_time {
+
+
+template<typename charT>
+struct parse_match_result
+{
+ parse_match_result() :
+ match_depth(0),
+ current_match(-1)// -1 is match_not-found value
+ {}
+ typedef std::basic_string<charT> string_type;
+ string_type remaining() const
+ {
+ if (match_depth == cache.size()) {
+ return string_type();
+ }
+ if (current_match == -1) {
+ return cache;
+ }
+ //some of the cache was used return the rest
+ return string_type(cache, match_depth);
+ }
+ charT last_char() const
+ {
+ return cache[cache.size()-1];
+ }
+ //! Returns true if more characters were parsed than was necessary
+ /*! Should be used in conjunction with last_char()
+ * to get the remaining character.
+ */
+ bool has_remaining() const
+ {
+ return (cache.size() > match_depth);
+ }
+
+ // cache will hold characters that have been read from the stream
+ string_type cache;
+ unsigned short match_depth;
+ short current_match;
+ enum PARSE_STATE { PARSE_ERROR= -1 };
+};
+
+ //for debug -- really only char streams...
+template<typename charT>
+std::basic_ostream<charT>&
+operator<<(std::basic_ostream<charT>& os, parse_match_result<charT>& mr)
+{
+ os << "cm: " << mr.current_match
+ << " C: '" << mr.cache
+ << "' md: " << mr.match_depth
+ << " R: " << mr.remaining();
+ return os;
+}
+
+
+
+//! Recursive data structure to allow efficient parsing of various strings
+/*! This class provides a quick lookup by building what amounts to a
+ * tree data structure. It also features a match function which can
+ * can handle nasty input interators by caching values as it recurses
+ * the tree so that it can backtrack as needed.
+ */
+template<typename charT>
+struct string_parse_tree
+{
+#if BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT(0x581) )
+ typedef std::multimap<charT, string_parse_tree< charT> > ptree_coll;
+#else
+ typedef std::multimap<charT, string_parse_tree > ptree_coll;
+#endif
+ typedef typename ptree_coll::value_type value_type;
+ typedef typename ptree_coll::iterator iterator;
+ typedef typename ptree_coll::const_iterator const_iterator;
+ typedef std::basic_string<charT> string_type;
+ typedef std::vector<std::basic_string<charT> > collection_type;
+ typedef parse_match_result<charT> parse_match_result_type;
+
+ /*! Parameter "starting_point" desingates where the numbering begins.
+ * A starting_point of zero will start the numbering at zero
+ * (Sun=0, Mon=1, ...) were a starting_point of one starts the
+ * numbering at one (Jan=1, Feb=2, ...). The default is zero,
+ * negative vaules are not allowed */
+ string_parse_tree(collection_type names, unsigned int starting_point=0)
+ {
+ // iterate thru all the elements and build the tree
+ unsigned short index = 0;
+ while (index != names.size() ) {
+ string_type s = boost::algorithm::to_lower_copy(names[index]);
+ insert(s, static_cast<unsigned short>(index + starting_point));
+ index++;
+ }
+ //set the last tree node = index+1 indicating a value
+ index++;
+ }
+
+
+ string_parse_tree(short value = -1) :
+ m_value(value)
+ {}
+ ptree_coll m_next_chars;
+ short m_value;
+
+ void insert(const string_type& s, unsigned short value)
+ {
+ unsigned int i = 0;
+ iterator ti;
+ while(i < s.size()) {
+ if (i==0) {
+ if (i == (s.size()-1)) {
+ ti = m_next_chars.insert(value_type(s[i],
+ string_parse_tree<charT>(value)));
+ }
+ else {
+ ti = m_next_chars.insert(value_type(s[i],
+ string_parse_tree<charT>()));
+ }
+ }
+ else {
+ if (i == (s.size()-1)) {
+ ti = ti->second.m_next_chars.insert(value_type(s[i],
+ string_parse_tree<charT>(value)));
+ }
+
+ else {
+ ti = ti->second.m_next_chars.insert(value_type(s[i],
+ string_parse_tree<charT>()));
+ }
+
+ }
+ i++;
+ }
+ }
+
+
+ //! Recursive function that finds a matching string in the tree.
+ /*! Must check match_results::has_remaining() after match() is
+ * called. This is required so the user can determine if
+ * stream iterator is already pointing to the expected
+ * character or not (match() might advance sitr to next char in stream).
+ *
+ * A parse_match_result that has been returned from a failed match
+ * attempt can be sent in to the match function of a different
+ * string_parse_tree to attempt a match there. Use the iterators
+ * for the partially consumed stream, the parse_match_result object,
+ * and '0' for the level parameter. */
+ short
+ match(std::istreambuf_iterator<charT>& sitr,
+ std::istreambuf_iterator<charT>& stream_end,
+ parse_match_result_type& result,
+ unsigned int& level) const
+ {
+
+ level++;
+ charT c;
+ // if we conditionally advance sitr, we won't have
+ // to consume the next character past the input
+ bool adv_itr = true;
+ if (level > result.cache.size()) {
+ if (sitr == stream_end) return 0; //bail - input exhausted
+ c = static_cast<charT>(std::tolower(*sitr));
+ //result.cache += c;
+ //sitr++;
+ }
+ else {
+ // if we're looking for characters from the cache,
+ // we don't want to increment sitr
+ adv_itr = false;
+ c = static_cast<charT>(std::tolower(result.cache[level-1]));
+ }
+ const_iterator litr = m_next_chars.lower_bound(c);
+ const_iterator uitr = m_next_chars.upper_bound(c);
+ while (litr != uitr) { // equal if not found
+ if(adv_itr) {
+ sitr++;
+ result.cache += c;
+ }
+ if (litr->second.m_value != -1) { // -1 is default value
+ if (result.match_depth < level) {
+ result.current_match = litr->second.m_value;
+ result.match_depth = static_cast<unsigned short>(level);
+ }
+ litr->second.match(sitr, stream_end,
+ result, level);
+ level--;
+ }
+ else {
+ litr->second.match(sitr, stream_end,
+ result, level);
+ level--;
+ }
+
+ if(level <= result.cache.size()) {
+ adv_itr = false;
+ }
+
+ litr++;
+ }
+ return result.current_match;
+
+ }
+
+ /*! Must check match_results::has_remaining() after match() is
+ * called. This is required so the user can determine if
+ * stream iterator is already pointing to the expected
+ * character or not (match() might advance sitr to next char in stream).
+ */
+ parse_match_result_type
+ match(std::istreambuf_iterator<charT>& sitr,
+ std::istreambuf_iterator<charT>& stream_end) const
+ {
+ // lookup to_lower of char in tree.
+ unsigned int level = 0;
+ // string_type cache;
+ parse_match_result_type result;
+ match(sitr, stream_end, result, level);
+ return result;
+ }
+
+ void printme(std::ostream& os, int& level)
+ {
+ level++;
+ iterator itr = m_next_chars.begin();
+ iterator end = m_next_chars.end();
+ // os << "starting level: " << level << std::endl;
+ while (itr != end) {
+ os << "level: " << level
+ << " node: " << itr->first
+ << " value: " << itr->second.m_value
+ << std::endl;
+ itr->second.printme(os, level);
+ itr++;
+ }
+ level--;
+ }
+
+ void print(std::ostream& os)
+ {
+ int level = 0;
+ printme(os, level);
+ }
+
+ void printmatch(std::ostream& os, charT c)
+ {
+ iterator litr = m_next_chars.lower_bound(c);
+ iterator uitr = m_next_chars.upper_bound(c);
+ os << "matches for: " << c << std::endl;
+ while (litr != uitr) {
+ os << " node: " << litr->first
+ << " value: " << litr->second.m_value
+ << std::endl;
+ litr++;
+ }
+ }
+
+};
+
+
+} } //namespace
+#endif
diff --git a/boost/boost/date_time/strings_from_facet.hpp b/boost/boost/date_time/strings_from_facet.hpp
new file mode 100644
index 00000000000..bd0b56a1f81
--- /dev/null
+++ b/boost/boost/date_time/strings_from_facet.hpp
@@ -0,0 +1,123 @@
+#ifndef DATE_TIME_STRINGS_FROM_FACET__HPP___
+#define DATE_TIME_STRINGS_FROM_FACET__HPP___
+
+/* Copyright (c) 2004 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland
+ * $Date: 2006/02/18 20:58:01 $
+ */
+
+#include <sstream>
+#include <string>
+#include <vector>
+#include <locale>
+
+namespace boost { namespace date_time {
+
+//! This function gathers up all the month strings from a std::locale
+/*! Using the time_put facet, this function creates a collection of
+ * all the month strings from a locale. This is handy when building
+ * custom date parsers or formatters that need to be localized.
+ *
+ *@param charT The type of char to use when gathering typically char
+ * or wchar_t.
+ *@param locale The locale to use when gathering the strings
+ *@param short_strings True(default) to gather short strings,
+ * false for long strings.
+ *@return A vector of strings containing the strings in order. eg:
+ * Jan, Feb, Mar, etc.
+ */
+template<typename charT>
+std::vector<std::basic_string<charT> >
+gather_month_strings(const std::locale& locale, bool short_strings=true)
+{
+ typedef std::basic_string<charT> string_type;
+ typedef std::vector<string_type> collection_type;
+ typedef std::basic_ostringstream<charT> ostream_type;
+ typedef std::ostreambuf_iterator<charT> ostream_iter_type;
+ typedef std::basic_ostringstream<charT> stringstream_type;
+ typedef std::time_put<charT> time_put_facet_type;
+ charT short_fmt[3] = { '%', 'b' };
+ charT long_fmt[3] = { '%', 'B' };
+ collection_type months;
+ string_type outfmt(short_fmt);
+ if (!short_strings) {
+ outfmt = long_fmt;
+ }
+ {
+ //grab the needed strings by using the locale to
+ //output each month
+ for (int m=0; m < 12; m++) {
+ tm tm_value;
+ tm_value.tm_mon = m;
+ stringstream_type ss;
+ ostream_iter_type oitr(ss);
+ std::use_facet<time_put_facet_type>(locale).put(oitr, ss, ss.fill(),
+ &tm_value,
+ &*outfmt.begin(),
+ &*outfmt.begin()+outfmt.size());
+ months.push_back(ss.str());
+ }
+ }
+ return months;
+}
+
+//! This function gathers up all the weekday strings from a std::locale
+/*! Using the time_put facet, this function creates a collection of
+ * all the weekday strings from a locale starting with the string for
+ * 'Sunday'. This is handy when building custom date parsers or
+ * formatters that need to be localized.
+ *
+ *@param charT The type of char to use when gathering typically char
+ * or wchar_t.
+ *@param locale The locale to use when gathering the strings
+ *@param short_strings True(default) to gather short strings,
+ * false for long strings.
+ *@return A vector of strings containing the weekdays in order. eg:
+ * Sun, Mon, Tue, Wed, Thu, Fri, Sat
+ */
+template<typename charT>
+std::vector<std::basic_string<charT> >
+gather_weekday_strings(const std::locale& locale, bool short_strings=true)
+{
+ typedef std::basic_string<charT> string_type;
+ typedef std::vector<string_type> collection_type;
+ typedef std::basic_ostringstream<charT> ostream_type;
+ typedef std::ostreambuf_iterator<charT> ostream_iter_type;
+ typedef std::basic_ostringstream<charT> stringstream_type;
+ typedef std::time_put<charT> time_put_facet_type;
+ charT short_fmt[3] = { '%', 'a' };
+ charT long_fmt[3] = { '%', 'A' };
+
+ collection_type weekdays;
+
+
+ string_type outfmt(short_fmt);
+ if (!short_strings) {
+ outfmt = long_fmt;
+ }
+ {
+ //grab the needed strings by using the locale to
+ //output each month / weekday
+ for (int i=0; i < 7; i++) {
+ tm tm_value;
+ tm_value.tm_wday = i;
+ stringstream_type ss;
+ ostream_iter_type oitr(ss);
+ std::use_facet<time_put_facet_type>(locale).put(oitr, ss, ss.fill(),
+ &tm_value,
+ &*outfmt.begin(),
+ &*outfmt.begin()+outfmt.size());
+
+ weekdays.push_back(ss.str());
+ }
+ }
+ return weekdays;
+}
+
+} } //namespace
+
+
+#endif
diff --git a/boost/boost/date_time/testfrmwk.hpp b/boost/boost/date_time/testfrmwk.hpp
new file mode 100644
index 00000000000..96add447fb5
--- /dev/null
+++ b/boost/boost/date_time/testfrmwk.hpp
@@ -0,0 +1,66 @@
+
+#ifndef TEST_FRMWK_HPP___
+#define TEST_FRMWK_HPP___
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * $Date: 2003/11/23 03:29:56 $
+ */
+
+
+#include <iostream>
+#include <string>
+
+//! Really simple test framework for counting and printing
+class TestStats
+{
+public:
+ static TestStats& instance() {static TestStats ts; return ts;}
+ void addPassingTest() {testcount_++; passcount_++;}
+ void addFailingTest() {testcount_++;}
+ unsigned int testcount() const {return testcount_;}
+ unsigned int passcount() const {return passcount_;}
+ void print(std::ostream& out = std::cout) const
+ {
+ out << testcount_ << " Tests Executed: " ;
+ if (passcount() != testcount()) {
+ out << (testcount() - passcount()) << " FAILURES";
+ }
+ else {
+ out << "All Succeeded" << std::endl;
+ }
+ out << std::endl;
+ }
+private:
+ TestStats() : testcount_(0), passcount_(0) {}
+ unsigned int testcount_;
+ unsigned int passcount_;
+};
+
+
+bool check(const std::string& testname, bool testcond)
+{
+ TestStats& stat = TestStats::instance();
+ if (testcond) {
+ std::cout << "Pass :: " << testname << " " << std::endl;
+ stat.addPassingTest();
+ return true;
+ }
+ else {
+ stat.addFailingTest();
+ std::cout << "FAIL :: " << testname << " " << std::endl;
+ return false;
+ }
+}
+
+
+int printTestStats()
+{
+ TestStats& stat = TestStats::instance();
+ stat.print();
+ return stat.testcount() - stat.passcount();
+}
+
+#endif
diff --git a/boost/boost/date_time/time.hpp b/boost/boost/date_time/time.hpp
new file mode 100644
index 00000000000..9d7c07c2fee
--- /dev/null
+++ b/boost/boost/date_time/time.hpp
@@ -0,0 +1,190 @@
+#ifndef DATE_TIME_TIME_HPP___
+#define DATE_TIME_TIME_HPP___
+
+/* Copyright (c) 2002,2003,2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2005/04/23 05:39:52 $
+ */
+
+
+/*! @file time.hpp
+ This file contains the interface for the time associated classes.
+*/
+#include "boost/date_time/time_defs.hpp"
+#include "boost/operators.hpp"
+#include <string>
+
+namespace boost {
+namespace date_time {
+
+ //! Representation of a precise moment in time, including the date.
+ /*!
+ This class is a skeleton for the interface of a temporal type
+ with a resolution that is higher than a day. It is intended that
+ this class be the base class and that the actual time
+ class be derived using the BN pattern. In this way, the derived
+ class can make decisions such as 'should there be a default constructor'
+ and what should it set its value to, should there be optional constructors
+ say allowing only an time_durations that generate a time from a clock,etc.
+ So, in fact multiple time types can be created for a time_system with
+ different construction policies, and all of them can perform basic
+ operations by only writing a copy constructor. Finally, compiler
+ errors are also shorter.
+
+ The real behavior of the time class is provided by the time_system
+ template parameter. This class must provide all the logic
+ for addition, subtraction, as well as define all the interface
+ types.
+
+ */
+
+ template <class T, class time_system>
+ class base_time : private
+ boost::less_than_comparable<T
+ , boost::equality_comparable<T
+ > >
+ {
+ public:
+ typedef T time_type;
+ typedef typename time_system::time_rep_type time_rep_type;
+ typedef typename time_system::date_type date_type;
+ typedef typename time_system::date_duration_type date_duration_type;
+ typedef typename time_system::time_duration_type time_duration_type;
+ //typedef typename time_system::hms_type hms_type;
+
+ base_time(const date_type& day,
+ const time_duration_type& td,
+ dst_flags dst=not_dst) :
+ time_(time_system::get_time_rep(day, td, dst))
+ {}
+ base_time(special_values sv) :
+ time_(time_system::get_time_rep(sv))
+ {}
+ base_time(const time_rep_type& rhs) :
+ time_(rhs)
+ {}
+ date_type date() const
+ {
+ return time_system::get_date(time_);
+ }
+ time_duration_type time_of_day() const
+ {
+ return time_system::get_time_of_day(time_);
+ }
+ /*! Optional bool parameter will return time zone as an offset
+ * (ie "+07:00"). Empty string is returned for classes that do
+ * not use a time_zone */
+ std::string zone_name(bool as_offset=false) const
+ {
+ return time_system::zone_name(time_);
+ }
+ /*! Optional bool parameter will return time zone as an offset
+ * (ie "+07:00"). Empty string is returned for classes that do
+ * not use a time_zone */
+ std::string zone_abbrev(bool as_offset=false) const
+ {
+ return time_system::zone_name(time_);
+ }
+ //! An empty string is returned for classes that do not use a time_zone
+ std::string zone_as_posix_string() const
+ {
+ return std::string("");
+ }
+
+ //! check to see if date is not a value
+ bool is_not_a_date_time() const
+ {
+ return time_.is_not_a_date_time();
+ }
+ //! check to see if date is one of the infinity values
+ bool is_infinity() const
+ {
+ return (is_pos_infinity() || is_neg_infinity());
+ }
+ //! check to see if date is greater than all possible dates
+ bool is_pos_infinity() const
+ {
+ return time_.is_pos_infinity();
+ }
+ //! check to see if date is greater than all possible dates
+ bool is_neg_infinity() const
+ {
+ return time_.is_neg_infinity();
+ }
+ //! check to see if time is a special value
+ bool is_special() const
+ {
+ return(is_not_a_date_time() || is_infinity());
+ }
+ //!Equality operator -- others generated by boost::equality_comparable
+ bool operator==(const time_type& rhs) const
+ {
+ return time_system::is_equal(time_,rhs.time_);
+ }
+ //!Equality operator -- others generated by boost::less_than_comparable
+ bool operator<(const time_type& rhs) const
+ {
+ return time_system::is_less(time_,rhs.time_);
+ }
+ //! difference between two times
+ time_duration_type operator-(const time_type& rhs) const
+ {
+ return time_system::subtract_times(time_, rhs.time_);
+ }
+ //! add date durations
+ time_type operator+(const date_duration_type& dd) const
+ {
+ return time_system::add_days(time_, dd);
+ }
+ time_type operator+=(const date_duration_type& dd)
+ {
+ time_ = (time_system::get_time_rep(date() + dd, time_of_day()));
+ return time_type(time_);
+ }
+ //! subtract date durations
+ time_type operator-(const date_duration_type& dd) const
+ {
+ return time_system::subtract_days(time_, dd);
+ }
+ time_type operator-=(const date_duration_type& dd)
+ {
+ time_ = (time_system::get_time_rep(date() - dd, time_of_day()));
+ return time_type(time_);
+ }
+ //! add time durations
+ time_type operator+(const time_duration_type& td) const
+ {
+ return time_type(time_system::add_time_duration(time_, td));
+ }
+ time_type operator+=(const time_duration_type& td)
+ {
+ time_ = (time_system::get_time_rep(date(), time_of_day() + td));
+ return time_type(time_);
+ }
+ //! subtract time durations
+ time_type operator-(const time_duration_type& rhs) const
+ {
+ return time_system::subtract_time_duration(time_, rhs);
+ }
+ time_type operator-=(const time_duration_type& td)
+ {
+ time_ = (time_system::get_time_rep(date(), time_of_day() - td));
+ return time_type(time_);
+ }
+
+ protected:
+ time_rep_type time_;
+ };
+
+
+
+
+
+} } //namespace date_time::boost
+
+
+#endif
+
diff --git a/boost/boost/date_time/time_clock.hpp b/boost/boost/date_time/time_clock.hpp
new file mode 100644
index 00000000000..8184ac77472
--- /dev/null
+++ b/boost/boost/date_time/time_clock.hpp
@@ -0,0 +1,83 @@
+#ifndef DATE_TIME_TIME_CLOCK_HPP___
+#define DATE_TIME_TIME_CLOCK_HPP___
+
+/* Copyright (c) 2002,2003,2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2005/03/19 21:39:59 $
+ */
+
+/*! @file time_clock.hpp
+ This file contains the interface for clock devices.
+*/
+
+#include "boost/date_time/c_time.hpp"
+#include "boost/shared_ptr.hpp"
+
+namespace boost {
+namespace date_time {
+
+
+ //! A clock providing time level services based on C time_t capabilities
+ /*! This clock provides resolution to the 1 second level
+ */
+ template<class time_type>
+ class second_clock
+ {
+ public:
+ typedef typename time_type::date_type date_type;
+ typedef typename time_type::time_duration_type time_duration_type;
+
+ static time_type local_time()
+ {
+ ::std::time_t t;
+ ::std::time(&t);
+ ::std::tm curr, *curr_ptr;
+ //curr_ptr = ::std::localtime(&t);
+ curr_ptr = c_time::localtime(&t, &curr);
+ return create_time(curr_ptr);
+ }
+
+
+ //! Get the current day in universal date as a ymd_type
+ static time_type universal_time()
+ {
+
+ ::std::time_t t;
+ ::std::time(&t);
+ ::std::tm curr, *curr_ptr;
+ //curr_ptr = ::std::gmtime(&t);
+ curr_ptr = c_time::gmtime(&t, &curr);
+ return create_time(curr_ptr);
+ }
+
+ template<class time_zone_type>
+ static time_type local_time(boost::shared_ptr<time_zone_type> tz_ptr)
+ {
+ typedef typename time_type::utc_time_type utc_time_type;
+ utc_time_type utc_time = second_clock<utc_time_type>::universal_time();
+ return time_type(utc_time, tz_ptr);
+ }
+
+
+ private:
+ static time_type create_time(::std::tm* current)
+ {
+ date_type d(static_cast<unsigned short>(current->tm_year + 1900),
+ static_cast<unsigned short>(current->tm_mon + 1),
+ static_cast<unsigned short>(current->tm_mday));
+ time_duration_type td(current->tm_hour,
+ current->tm_min,
+ current->tm_sec);
+ return time_type(d,td);
+ }
+
+ };
+
+
+} } //namespace date_time
+
+
+#endif
diff --git a/boost/boost/date_time/time_defs.hpp b/boost/boost/date_time/time_defs.hpp
new file mode 100644
index 00000000000..f8432648f25
--- /dev/null
+++ b/boost/boost/date_time/time_defs.hpp
@@ -0,0 +1,33 @@
+#ifndef DATE_TIME_TIME_PRECISION_LIMITS_HPP
+#define DATE_TIME_TIME_PRECISION_LIMITS_HPP
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland
+ * $Date: 2003/11/23 03:31:27 $
+ */
+
+
+
+/*! \file time_defs.hpp
+ This file contains nice definitions for handling the resoluion of various time
+ reprsentations.
+*/
+
+namespace boost {
+namespace date_time {
+
+ //!Defines some nice types for handling time level resolutions
+ enum time_resolutions {sec, tenth, hundreth, milli, ten_thousandth, micro, nano, NumResolutions };
+
+ //! Flags for daylight savings or summer time
+ enum dst_flags {not_dst, is_dst, calculate};
+
+
+} } //namespace date_time
+
+
+
+#endif
diff --git a/boost/boost/date_time/time_duration.hpp b/boost/boost/date_time/time_duration.hpp
new file mode 100644
index 00000000000..59d35c3eb6d
--- /dev/null
+++ b/boost/boost/date_time/time_duration.hpp
@@ -0,0 +1,281 @@
+#ifndef DATE_TIME_TIME_DURATION_HPP___
+#define DATE_TIME_TIME_DURATION_HPP___
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2006/03/20 13:29:15 $
+ */
+
+#include "boost/operators.hpp"
+#include "boost/date_time/time_defs.hpp"
+#include "boost/date_time/special_defs.hpp"
+#include "boost/date_time/compiler_config.hpp"
+
+namespace boost {
+namespace date_time {
+
+
+ //! Represents some amount of elapsed time measure to a given resolution
+ /*! This class represents a standard set of capabilities for all
+ counted time durations. Time duration implementations should derive
+ from this class passing their type as the first template parameter.
+ This design allows the subclass duration types to provide custom
+ construction policies or other custom features not provided here.
+
+ @param T The subclass type
+ @param rep_type The time resolution traits for this duration type.
+ */
+ template<class T, typename rep_type>
+ class time_duration : private
+ boost::less_than_comparable<T
+ , boost::equality_comparable<T
+ > >
+ /* dividable, addable, and subtractable operator templates
+ * won't work with this class (MSVC++ 6.0). return type
+ * from '+=' is different than expected return type
+ * from '+'. multipliable probably wont work
+ * either (haven't tried) */
+ {
+ public:
+ typedef T duration_type; //the subclass
+ typedef rep_type traits_type;
+ typedef typename rep_type::day_type day_type;
+ typedef typename rep_type::hour_type hour_type;
+ typedef typename rep_type::min_type min_type;
+ typedef typename rep_type::sec_type sec_type;
+ typedef typename rep_type::fractional_seconds_type fractional_seconds_type;
+ typedef typename rep_type::tick_type tick_type;
+ typedef typename rep_type::impl_type impl_type;
+
+ time_duration() : ticks_(0) {}
+ time_duration(hour_type hours_in,
+ min_type minutes_in,
+ sec_type seconds_in=0,
+ fractional_seconds_type frac_sec_in = 0) :
+ ticks_(rep_type::to_tick_count(hours_in,minutes_in,seconds_in,frac_sec_in))
+ {}
+ // copy constructor required for dividable<>
+ //! Construct from another time_duration (Copy constructor)
+ time_duration(const time_duration<T, rep_type>& other)
+ : ticks_(other.ticks_)
+ {}
+ //! Construct from special_values
+ time_duration(special_values sv) : ticks_(impl_type::from_special(sv))
+ {}
+ //! Returns smallest representable duration
+ static duration_type unit()
+ {
+ return duration_type(0,0,0,1);
+ }
+ //! Return the number of ticks in a second
+ static tick_type ticks_per_second()
+ {
+ return rep_type::res_adjust();
+ }
+ //! Provide the resolution of this duration type
+ static time_resolutions resolution()
+ {
+ return rep_type::resolution();
+ }
+ //! Returns number of hours in the duration
+ hour_type hours() const
+ {
+ return static_cast<hour_type>(ticks() / (3600*ticks_per_second()));
+ }
+ //! Returns normalized number of minutes
+ min_type minutes() const
+ {
+ return static_cast<min_type>((ticks() / (60*ticks_per_second())) % 60);
+ }
+ //! Returns normalized number of seconds (0..60)
+ sec_type seconds() const
+ {
+ return static_cast<sec_type>((ticks()/ticks_per_second()) % 60);
+ }
+ //! Returns total number of seconds truncating any fractional seconds
+ sec_type total_seconds() const
+ {
+ return static_cast<sec_type>(ticks() / ticks_per_second());
+ }
+ //! Returns total number of milliseconds truncating any fractional seconds
+ tick_type total_milliseconds() const
+ {
+ if (ticks_per_second() < 1000) {
+ return ticks() * (static_cast<tick_type>(1000) / ticks_per_second());
+ }
+ return ticks() / (ticks_per_second() / static_cast<tick_type>(1000)) ;
+ }
+ //! Returns total number of nanoseconds truncating any sub millisecond values
+ tick_type total_nanoseconds() const
+ {
+ if (ticks_per_second() < 1000000000) {
+ return ticks() * (static_cast<tick_type>(1000000000) / ticks_per_second());
+ }
+ return ticks() / (ticks_per_second() / static_cast<tick_type>(1000000000)) ;
+ }
+ //! Returns total number of microseconds truncating any sub microsecond values
+ tick_type total_microseconds() const
+ {
+ if (ticks_per_second() < 1000000) {
+ return ticks() * (static_cast<tick_type>(1000000) / ticks_per_second());
+ }
+ return ticks() / (ticks_per_second() / static_cast<tick_type>(1000000)) ;
+ }
+ //! Returns count of fractional seconds at given resolution
+ fractional_seconds_type fractional_seconds() const
+ {
+ return (ticks() % ticks_per_second());
+ }
+ //! Returns number of possible digits in fractional seconds
+ static unsigned short num_fractional_digits()
+ {
+ return rep_type::num_fractional_digits();
+ }
+ duration_type invert_sign() const
+ {
+ return duration_type(ticks_ * (-1));
+ }
+ bool is_negative() const
+ {
+ return ticks_ < 0;
+ }
+ bool operator<(const time_duration& rhs) const
+ {
+ return ticks_ < rhs.ticks_;
+ }
+ bool operator==(const time_duration& rhs) const
+ {
+ return ticks_ == rhs.ticks_;
+ }
+ //! unary- Allows for time_duration td = -td1
+ duration_type operator-()const
+ {
+ return duration_type(ticks_ * (-1));
+ }
+ duration_type operator-(const duration_type& d) const
+ {
+ return duration_type(ticks_ - d.ticks_);
+ }
+ duration_type operator+(const duration_type& d) const
+ {
+ return duration_type(ticks_ + d.ticks_);
+ }
+ duration_type operator/(int divisor) const
+ {
+ return duration_type(ticks_ / divisor);
+ }
+ duration_type operator-=(const duration_type& d)
+ {
+ ticks_ = ticks_ - d.ticks_;
+ return duration_type(ticks_);
+ }
+ duration_type operator+=(const duration_type& d)
+ {
+ ticks_ = ticks_ + d.ticks_;
+ return duration_type(ticks_);
+ }
+ //! Division operations on a duration with an integer.
+ duration_type operator/=(int divisor)
+ {
+ ticks_ = ticks_ / divisor;
+ return duration_type(ticks_);
+ }
+ //! Multiplication operations an a duration with an integer
+ duration_type operator*(int rhs) const
+ {
+ return duration_type(ticks_ * rhs);
+ }
+ duration_type operator*=(int divisor)
+ {
+ ticks_ = ticks_ * divisor;
+ return duration_type(ticks_);
+ }
+ tick_type ticks() const
+ {
+ return traits_type::as_number(ticks_);
+ }
+
+ //! Is ticks_ a special value?
+ bool is_special()const
+ {
+ if(traits_type::is_adapted())
+ {
+ return ticks_.is_special();
+ }
+ else{
+ return false;
+ }
+ }
+ //! Is duration pos-infinity
+ bool is_pos_infinity()const
+ {
+ if(traits_type::is_adapted())
+ {
+ return ticks_.is_pos_infinity();
+ }
+ else{
+ return false;
+ }
+ }
+ //! Is duration neg-infinity
+ bool is_neg_infinity()const
+ {
+ if(traits_type::is_adapted())
+ {
+ return ticks_.is_neg_infinity();
+ }
+ else{
+ return false;
+ }
+ }
+ //! Is duration not-a-date-time
+ bool is_not_a_date_time()const
+ {
+ if(traits_type::is_adapted())
+ {
+ return ticks_.is_nan();
+ }
+ else{
+ return false;
+ }
+ }
+
+ //! Used for special_values output
+ impl_type get_rep()const
+ {
+ return ticks_;
+ }
+
+ protected:
+ explicit time_duration(impl_type in) : ticks_(in) {};
+ impl_type ticks_;
+ };
+
+
+
+ //! Template for instantiating derived adjusting durations
+ /* These templates are designed to work with multiples of
+ * 10 for frac_of_second and resoultion adjustment
+ */
+ template<class base_duration, boost::int64_t frac_of_second>
+ class subsecond_duration : public base_duration
+ {
+ public:
+ typedef typename base_duration::traits_type traits_type;
+ explicit subsecond_duration(boost::int64_t ss) :
+ base_duration(0,0,0,ss*traits_type::res_adjust()/frac_of_second)
+ {}
+ };
+
+
+
+} } //namespace date_time
+
+
+
+
+#endif
+
diff --git a/boost/boost/date_time/time_facet.hpp b/boost/boost/date_time/time_facet.hpp
new file mode 100644
index 00000000000..15a62dae637
--- /dev/null
+++ b/boost/boost/date_time/time_facet.hpp
@@ -0,0 +1,1263 @@
+
+#ifndef _DATE_TIME_FACET__HPP__
+#define _DATE_TIME_FACET__HPP__
+
+/* Copyright (c) 2004-2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Martin Andrian, Jeff Garland, Bart Garst
+ * $Date: 2006/02/18 20:58:01 $
+ */
+
+#include "boost/date_time/date_facet.hpp"
+#include "boost/date_time/string_convert.hpp"
+#include "boost/algorithm/string/erase.hpp"
+#include <sstream>
+#include <iomanip>
+#include <exception>
+
+namespace boost {
+namespace date_time {
+
+ template <class CharT>
+ struct time_formats {
+ public:
+ typedef CharT char_type;
+ static const char_type fractional_seconds_format[3]; // f
+ static const char_type fractional_seconds_or_none_format[3]; // F
+ static const char_type seconds_with_fractional_seconds_format[3]; // s
+ static const char_type seconds_format[3]; // S
+ static const char_type standard_format[9]; // x X
+ static const char_type zone_abbrev_format[3]; // z
+ static const char_type zone_name_format[3]; // Z
+ static const char_type zone_iso_format[3]; // q
+ static const char_type zone_iso_extended_format[3]; // Q
+ static const char_type posix_zone_string_format[4]; // ZP
+ static const char_type duration_sign_negative_only[3]; // -
+ static const char_type duration_sign_always[3]; // +
+ static const char_type duration_seperator[2];
+ static const char_type negative_sign[2]; //-
+ static const char_type positive_sign[2]; //+
+ static const char_type iso_time_format_specifier[18];
+ static const char_type iso_time_format_extended_specifier[22];
+ //default ptime format is YYYY-Mon-DD HH:MM:SS[.fff...][ zzz]
+ static const char_type default_time_format[23];
+ // default_time_input_format uses a posix_time_zone_string instead of a time zone abbrev
+ static const char_type default_time_input_format[24];
+ //default time_duration format is HH:MM:SS[.fff...]
+ static const char_type default_time_duration_format[11];
+ };
+
+ template <class CharT>
+ const typename time_formats<CharT>::char_type
+ time_formats<CharT>::fractional_seconds_format[3] = {'%','f'};
+
+ template <class CharT>
+ const typename time_formats<CharT>::char_type
+ time_formats<CharT>::fractional_seconds_or_none_format[3] = {'%','F'};
+
+ template <class CharT>
+ const typename time_formats<CharT>::char_type
+ time_formats<CharT>::seconds_with_fractional_seconds_format[3] =
+ {'%','s'};
+
+ template <class CharT>
+ const typename time_formats<CharT>::char_type
+ time_formats<CharT>::seconds_format[3] = {'%','S'};
+
+ template <class CharT>
+ const typename time_formats<CharT>::char_type
+ //time_formats<CharT>::standard_format[5] = {'%','c',' ','%','z'};
+ time_formats<CharT>::standard_format[9] = {'%','x',' ','%','X',' ','%','z'};
+
+ template <class CharT>
+ const typename time_formats<CharT>::char_type
+ time_formats<CharT>::zone_abbrev_format[3] = {'%','z'};
+
+ template <class CharT>
+ const typename time_formats<CharT>::char_type
+ time_formats<CharT>::zone_name_format[3] = {'%','Z'};
+
+ template <class CharT>
+ const typename time_formats<CharT>::char_type
+ time_formats<CharT>::zone_iso_format[3] = {'%','q'};
+
+ template <class CharT>
+ const typename time_formats<CharT>::char_type
+ time_formats<CharT>::zone_iso_extended_format[3] ={'%','Q'};
+
+ template <class CharT>
+ const typename time_formats<CharT>::char_type
+ time_formats<CharT>::posix_zone_string_format[4] ={'%','Z','P'};
+
+ template <class CharT>
+ const typename time_formats<CharT>::char_type
+ time_formats<CharT>::duration_seperator[2] = {':'};
+
+ template <class CharT>
+ const typename time_formats<CharT>::char_type
+ time_formats<CharT>::negative_sign[2] = {'-'};
+
+ template <class CharT>
+ const typename time_formats<CharT>::char_type
+ time_formats<CharT>::positive_sign[2] = {'+'};
+
+ template <class CharT>
+ const typename time_formats<CharT>::char_type
+ time_formats<CharT>::duration_sign_negative_only[3] ={'%','-'};
+
+ template <class CharT>
+ const typename time_formats<CharT>::char_type
+ time_formats<CharT>::duration_sign_always[3] ={'%','+'};
+
+ template <class CharT>
+ const typename time_formats<CharT>::char_type
+ time_formats<CharT>::iso_time_format_specifier[18] =
+ {'%', 'Y', '%', 'm', '%', 'd', 'T',
+ '%', 'H', '%', 'M', '%', 'S', '%', 'F', '%','q' };
+
+ template <class CharT>
+ const typename time_formats<CharT>::char_type
+ time_formats<CharT>::iso_time_format_extended_specifier[22] =
+ {'%', 'Y', '-', '%', 'm', '-', '%', 'd', ' ',
+ '%', 'H', ':', '%', 'M', ':', '%', 'S', '%', 'F','%','Q'};
+
+ template <class CharT>
+ const typename time_formats<CharT>::char_type
+ time_formats<CharT>::default_time_format[23] =
+ {'%','Y','-','%','b','-','%','d',' ',
+ '%','H',':','%','M',':','%','S','%','F',' ','%','z'};
+
+ template <class CharT>
+ const typename time_formats<CharT>::char_type
+ time_formats<CharT>::default_time_input_format[24] =
+ {'%','Y','-','%','b','-','%','d',' ',
+ '%','H',':','%','M',':','%','S','%','F',' ','%','Z','P'};
+
+ template <class CharT>
+ const typename time_formats<CharT>::char_type
+ time_formats<CharT>::default_time_duration_format[11] =
+ {'%','H',':','%','M',':','%','S','%','F'};
+
+
+
+ /*! Facet used for format-based output of time types
+ * This class provides for the use of format strings to output times. In addition
+ * to the flags for formatting date elements, the following are the allowed format flags:
+ * - %x %X => default format - enables addition of more flags to default (ie. "%x %X %z")
+ * - %f => fractional seconds ".123456"
+ * - %F => fractional seconds or none: like frac sec but empty if frac sec == 0
+ * - %s => seconds w/ fractional sec "02.123" (this is the same as "%S%f)
+ * - %S => seconds "02"
+ * - %z => abbreviated time zone "EDT"
+ * - %Z => full time zone name "Eastern Daylight Time"
+ */
+ template <class time_type,
+ class CharT,
+ class OutItrT = std::ostreambuf_iterator<CharT, std::char_traits<CharT> > >
+ class time_facet :
+ public boost::date_time::date_facet<typename time_type::date_type , CharT, OutItrT> {
+ public:
+ typedef typename time_type::date_type date_type;
+ typedef typename time_type::time_duration_type time_duration_type;
+ typedef boost::date_time::period<time_type,time_duration_type> period_type;
+ typedef boost::date_time::date_facet<typename time_type::date_type, CharT, OutItrT> base_type;
+ typedef typename base_type::string_type string_type;
+ typedef typename base_type::char_type char_type;
+ typedef typename base_type::period_formatter_type period_formatter_type;
+ typedef typename base_type::special_values_formatter_type special_values_formatter_type;
+ typedef typename base_type::date_gen_formatter_type date_gen_formatter_type;
+ static const char_type* fractional_seconds_format; // %f
+ static const char_type* fractional_seconds_or_none_format; // %F
+ static const char_type* seconds_with_fractional_seconds_format; // %s
+ static const char_type* seconds_format; // %S
+ static const char_type* standard_format; // %x X
+ static const char_type* zone_abbrev_format; // %z
+ static const char_type* zone_name_format; // %Z
+ static const char_type* zone_iso_format; // %q
+ static const char_type* zone_iso_extended_format; // %Q
+ static const char_type* posix_zone_string_format; // %ZP
+ static const char_type* duration_seperator;
+ static const char_type* duration_sign_always; // %+
+ static const char_type* duration_sign_negative_only; // %-
+ static const char_type* negative_sign; //-
+ static const char_type* positive_sign; //+
+ static const char_type* iso_time_format_specifier;
+ static const char_type* iso_time_format_extended_specifier;
+
+ //default ptime format is YYYY-Mon-DD HH:MM:SS[.fff...][ zzz]
+ static const char_type* default_time_format;
+ //default time_duration format is HH:MM:SS[.fff...]
+ static const char_type* default_time_duration_format;
+ static std::locale::id id;
+
+#if defined (__SUNPRO_CC) && defined (_RWSTD_VER)
+ std::locale::id& __get_id (void) const { return id; }
+#endif
+
+ //! sets default formats for ptime, local_date_time, and time_duration
+ explicit time_facet(::size_t a_ref = 0)
+ //: base_type(standard_format),
+ : base_type(default_time_format),
+ m_time_duration_format(string_type(duration_sign_negative_only) + default_time_duration_format)
+ {}
+
+ //! Construct the facet with an explicitly specified format
+ explicit time_facet(const char_type* a_format,
+ period_formatter_type period_formatter = period_formatter_type(),
+ const special_values_formatter_type& special_value_formatter = special_values_formatter_type(),
+ date_gen_formatter_type dg_formatter = date_gen_formatter_type(),
+ ::size_t a_ref = 0)
+ : base_type(a_format,
+ period_formatter,
+ special_value_formatter,
+ dg_formatter,
+ a_ref),
+ m_time_duration_format(string_type(duration_sign_negative_only) + default_time_duration_format)
+ {}
+
+ //! Changes format for time_duration
+ void time_duration_format(const char_type* const format)
+ {
+ m_time_duration_format = format;
+ }
+
+ virtual void set_iso_format()
+ {
+ this->m_format = iso_time_format_specifier;
+ }
+ virtual void set_iso_extended_format()
+ {
+ this->m_format = iso_time_format_extended_specifier;
+ }
+
+ OutItrT put(OutItrT a_next,
+ std::ios_base& a_ios,
+ char_type a_fill,
+ const time_type& a_time) const
+ {
+ if (a_time.is_special()) {
+ return this->do_put_special(a_next, a_ios, a_fill,
+ a_time.date().as_special());
+ }
+ string_type format(this->m_format);
+ string_type frac_str;
+ if (format.find(seconds_with_fractional_seconds_format) != string_type::npos) {
+ // replace %s with %S.nnn
+ frac_str =
+ fractional_seconds_as_string(a_time.time_of_day(), false);
+ char_type sep = std::use_facet<std::numpunct<char_type> >(a_ios.getloc()).decimal_point();
+
+ string_type replace_string(seconds_format);
+ replace_string += sep;
+ replace_string += frac_str;
+ boost::algorithm::replace_all(format,
+ seconds_with_fractional_seconds_format,
+ replace_string);
+ }
+ /* NOTE: replacing posix_zone_string_format must be done BEFORE
+ * zone_name_format: "%ZP" & "%Z", if Z is checked first it will
+ * incorrectly replace a zone_name where a posix_string should go */
+ if (format.find(posix_zone_string_format) != string_type::npos) {
+ if(a_time.zone_abbrev().empty()) {
+ // if zone_abbrev() returns an empty string, we want to
+ // erase posix_zone_string_format from format
+ boost::algorithm::replace_all(format,
+ posix_zone_string_format,
+ "");
+ }
+ else{
+ boost::algorithm::replace_all(format,
+ posix_zone_string_format,
+ a_time.zone_as_posix_string());
+ }
+ }
+ if (format.find(zone_name_format) != string_type::npos) {
+ if(a_time.zone_name().empty()) {
+ /* TODO: this'll probably create problems if a user places
+ * the zone_*_format flag in the format with a ptime. This
+ * code removes the flag from the default formats */
+
+ // if zone_name() returns an empty string, we want to
+ // erase zone_name_format & one preceeding space
+ std::basic_ostringstream<char_type> ss;
+ ss << ' ' << zone_name_format;
+ boost::algorithm::replace_all(format,
+ ss.str(),
+ "");
+ }
+ else{
+ boost::algorithm::replace_all(format,
+ zone_name_format,
+ a_time.zone_name());
+ }
+ }
+ if (format.find(zone_abbrev_format) != string_type::npos) {
+ if(a_time.zone_abbrev(false).empty()) {
+ /* TODO: this'll probably create problems if a user places
+ * the zone_*_format flag in the format with a ptime. This
+ * code removes the flag from the default formats */
+
+ // if zone_abbrev() returns an empty string, we want to
+ // erase zone_abbrev_format & one preceeding space
+ std::basic_ostringstream<char_type> ss;
+ ss << ' ' << zone_abbrev_format;
+ boost::algorithm::replace_all(format,
+ ss.str(),
+ "");
+ }
+ else{
+ boost::algorithm::replace_all(format,
+ zone_abbrev_format,
+ a_time.zone_abbrev(false));
+ }
+ }
+ if (format.find(zone_iso_extended_format) != string_type::npos) {
+ if(a_time.zone_name(true).empty()) {
+ /* TODO: this'll probably create problems if a user places
+ * the zone_*_format flag in the format with a ptime. This
+ * code removes the flag from the default formats */
+
+ // if zone_name() returns an empty string, we want to
+ // erase zone_iso_extended_format from format
+ boost::algorithm::replace_all(format,
+ zone_iso_extended_format,
+ "");
+ }
+ else{
+ boost::algorithm::replace_all(format,
+ zone_iso_extended_format,
+ a_time.zone_name(true));
+ }
+ }
+
+ if (format.find(zone_iso_format) != string_type::npos) {
+ if(a_time.zone_abbrev(true).empty()) {
+ /* TODO: this'll probably create problems if a user places
+ * the zone_*_format flag in the format with a ptime. This
+ * code removes the flag from the default formats */
+
+ // if zone_abbrev() returns an empty string, we want to
+ // erase zone_iso_format from format
+ boost::algorithm::replace_all(format,
+ zone_iso_format,
+ "");
+ }
+ else{
+ boost::algorithm::replace_all(format,
+ zone_iso_format,
+ a_time.zone_abbrev(true));
+ }
+ }
+ if (format.find(fractional_seconds_format) != string_type::npos) {
+ // replace %f with nnnnnnn
+ if (!frac_str.size()) {
+ frac_str = fractional_seconds_as_string(a_time.time_of_day(), false);
+ }
+ boost::algorithm::replace_all(format,
+ fractional_seconds_format,
+ frac_str);
+ }
+
+ if (format.find(fractional_seconds_or_none_format) != string_type::npos) {
+ // replace %F with nnnnnnn or nothing if fs == 0
+ frac_str =
+ fractional_seconds_as_string(a_time.time_of_day(), true);
+ if (frac_str.size()) {
+ char_type sep = std::use_facet<std::numpunct<char_type> >(a_ios.getloc()).decimal_point();
+ string_type replace_string;
+ replace_string += sep;
+ replace_string += frac_str;
+ boost::algorithm::replace_all(format,
+ fractional_seconds_or_none_format,
+ replace_string);
+ }
+ else {
+ boost::algorithm::erase_all(format,
+ fractional_seconds_or_none_format);
+ }
+ }
+
+ return this->do_put_tm(a_next, a_ios, a_fill,
+ to_tm(a_time), format);
+ }
+
+ //! put function for time_duration
+ OutItrT put(OutItrT a_next,
+ std::ios_base& a_ios,
+ char_type a_fill,
+ const time_duration_type& a_time_dur) const
+ {
+ if (a_time_dur.is_special()) {
+ return this->do_put_special(a_next, a_ios, a_fill,
+ a_time_dur.get_rep().as_special());
+ }
+
+ string_type format(m_time_duration_format);
+ if (a_time_dur.is_negative()) {
+ // replace %- with minus sign. Should we use the numpunct facet?
+ boost::algorithm::replace_all(format,
+ duration_sign_negative_only,
+ negative_sign);
+ // remove all the %+ in the string with '-'
+ boost::algorithm::replace_all(format,
+ duration_sign_always,
+ negative_sign);
+ }
+ else { //duration is positive
+ // remove all the %- combos from the string
+ boost::algorithm::replace_all(format,
+ duration_sign_negative_only,
+ "");
+ // remove all the %+ in the string with '+'
+ boost::algorithm::replace_all(format,
+ duration_sign_always,
+ positive_sign);
+ }
+
+ string_type frac_str;
+ if (format.find(seconds_with_fractional_seconds_format) != string_type::npos) {
+ // replace %s with %S.nnn
+ frac_str =
+ fractional_seconds_as_string(a_time_dur, false);
+ char_type sep = std::use_facet<std::numpunct<char_type> >(a_ios.getloc()).decimal_point();
+
+ string_type replace_string(seconds_format);
+ replace_string += sep;
+ replace_string += frac_str;
+ boost::algorithm::replace_all(format,
+ seconds_with_fractional_seconds_format,
+ replace_string);
+ }
+ if (format.find(fractional_seconds_format) != string_type::npos) {
+ // replace %f with nnnnnnn
+ if (!frac_str.size()) {
+ frac_str = fractional_seconds_as_string(a_time_dur, false);
+ }
+ boost::algorithm::replace_all(format,
+ fractional_seconds_format,
+ frac_str);
+ }
+
+ if (format.find(fractional_seconds_or_none_format) != string_type::npos) {
+ // replace %F with nnnnnnn or nothing if fs == 0
+ frac_str =
+ fractional_seconds_as_string(a_time_dur, true);
+ if (frac_str.size()) {
+ char_type sep = std::use_facet<std::numpunct<char_type> >(a_ios.getloc()).decimal_point();
+ string_type replace_string;
+ replace_string += sep;
+ replace_string += frac_str;
+ boost::algorithm::replace_all(format,
+ fractional_seconds_or_none_format,
+ replace_string);
+ }
+ else {
+ boost::algorithm::erase_all(format,
+ fractional_seconds_or_none_format);
+ }
+ }
+
+ return this->do_put_tm(a_next, a_ios, a_fill,
+ to_tm(a_time_dur), format);
+ }
+
+ OutItrT put(OutItrT next, std::ios_base& a_ios,
+ char_type fill, const period_type& p) const
+ {
+ return this->m_period_formatter.put_period(next, a_ios, fill,p,*this);
+ }
+
+
+ protected:
+
+ static
+ string_type
+ fractional_seconds_as_string(const time_duration_type& a_time,
+ bool null_when_zero)
+ {
+ typename time_duration_type::fractional_seconds_type frac_sec =
+ a_time.fractional_seconds();
+
+ if (null_when_zero && (frac_sec == 0)) {
+ return string_type();
+ }
+
+ //make sure there is no sign
+ frac_sec = date_time::absolute_value(frac_sec);
+ std::basic_ostringstream<char_type> ss;
+ ss.imbue(std::locale::classic()); // don't want any formatting
+ ss << std::setw(time_duration_type::num_fractional_digits())
+ << std::setfill(static_cast<char_type>('0'));
+#if (defined(BOOST_MSVC) && (_MSC_VER < 1300))
+ // JDG [7/6/02 VC++ compatibility]
+ char_type buff[34];
+ ss << _i64toa(static_cast<boost::int64_t>(frac_sec), buff, 10);
+#else
+ ss << frac_sec;
+#endif
+ return ss.str();
+ }
+
+ private:
+ string_type m_time_duration_format;
+
+ };
+
+ template <class time_type, class CharT, class OutItrT>
+ std::locale::id time_facet<time_type, CharT, OutItrT>::id;
+
+ template <class time_type, class CharT, class OutItrT>
+ const typename time_facet<time_type, CharT, OutItrT>::char_type*
+ time_facet<time_type, CharT, OutItrT>::fractional_seconds_format = time_formats<CharT>::fractional_seconds_format;
+
+ template <class time_type, class CharT, class OutItrT>
+ const typename time_facet<time_type, CharT, OutItrT>::char_type*
+ time_facet<time_type, CharT, OutItrT>::fractional_seconds_or_none_format = time_formats<CharT>::fractional_seconds_or_none_format;
+
+ template <class time_type, class CharT, class OutItrT>
+ const typename time_facet<time_type, CharT, OutItrT>::char_type*
+ time_facet<time_type, CharT, OutItrT>::seconds_with_fractional_seconds_format =
+ time_formats<CharT>::seconds_with_fractional_seconds_format;
+
+
+ template <class time_type, class CharT, class OutItrT>
+ const typename time_facet<time_type, CharT, OutItrT>::char_type*
+ time_facet<time_type, CharT, OutItrT>::zone_name_format = time_formats<CharT>::zone_name_format;
+
+ template <class time_type, class CharT, class OutItrT>
+ const typename time_facet<time_type, CharT, OutItrT>::char_type*
+ time_facet<time_type, CharT, OutItrT>::zone_abbrev_format = time_formats<CharT>::zone_abbrev_format;
+
+ template <class time_type, class CharT, class OutItrT>
+ const typename time_facet<time_type, CharT, OutItrT>::char_type*
+ time_facet<time_type, CharT, OutItrT>::zone_iso_extended_format =time_formats<CharT>::zone_iso_extended_format;
+
+ template <class time_type, class CharT, class OutItrT>
+ const typename time_facet<time_type, CharT, OutItrT>::char_type*
+ time_facet<time_type, CharT, OutItrT>::posix_zone_string_format =time_formats<CharT>::posix_zone_string_format;
+
+ template <class time_type, class CharT, class OutItrT>
+ const typename time_facet<time_type, CharT, OutItrT>::char_type*
+ time_facet<time_type, CharT, OutItrT>::zone_iso_format = time_formats<CharT>::zone_iso_format;
+
+ template <class time_type, class CharT, class OutItrT>
+ const typename time_facet<time_type, CharT, OutItrT>::char_type*
+ time_facet<time_type, CharT, OutItrT>::seconds_format = time_formats<CharT>::seconds_format;
+
+ template <class time_type, class CharT, class OutItrT>
+ const typename time_facet<time_type, CharT, OutItrT>::char_type*
+ time_facet<time_type, CharT, OutItrT>::standard_format = time_formats<CharT>::standard_format;
+
+ template <class time_type, class CharT, class OutItrT>
+ const typename time_facet<time_type, CharT, OutItrT>::char_type*
+ time_facet<time_type, CharT, OutItrT>::duration_seperator = time_formats<CharT>::duration_seperator;
+
+ template <class time_type, class CharT, class OutItrT>
+ const typename time_facet<time_type, CharT, OutItrT>::char_type*
+ time_facet<time_type, CharT, OutItrT>::negative_sign = time_formats<CharT>::negative_sign;
+
+ template <class time_type, class CharT, class OutItrT>
+ const typename time_facet<time_type, CharT, OutItrT>::char_type*
+ time_facet<time_type, CharT, OutItrT>::positive_sign = time_formats<CharT>::positive_sign;
+
+ template <class time_type, class CharT, class OutItrT>
+ const typename time_facet<time_type, CharT, OutItrT>::char_type*
+ time_facet<time_type, CharT, OutItrT>::duration_sign_negative_only = time_formats<CharT>::duration_sign_negative_only;
+
+ template <class time_type, class CharT, class OutItrT>
+ const typename time_facet<time_type, CharT, OutItrT>::char_type*
+ time_facet<time_type, CharT, OutItrT>::duration_sign_always = time_formats<CharT>::duration_sign_always;
+
+ template <class time_type, class CharT, class OutItrT>
+ const typename time_facet<time_type,CharT, OutItrT>::char_type*
+ time_facet<time_type,CharT, OutItrT>::iso_time_format_specifier = time_formats<CharT>::iso_time_format_specifier;
+
+ template <class time_type, class CharT, class OutItrT>
+ const typename time_facet<time_type, CharT, OutItrT>::char_type*
+ time_facet<time_type, CharT, OutItrT>::iso_time_format_extended_specifier = time_formats<CharT>::iso_time_format_extended_specifier;
+
+ template <class time_type, class CharT, class OutItrT>
+ const typename time_facet<time_type, CharT, OutItrT>::char_type*
+ time_facet<time_type, CharT, OutItrT>::default_time_format =
+ time_formats<CharT>::default_time_format;
+
+ template <class time_type, class CharT, class OutItrT>
+ const typename time_facet<time_type, CharT, OutItrT>::char_type*
+ time_facet<time_type, CharT, OutItrT>::default_time_duration_format =
+ time_formats<CharT>::default_time_duration_format;
+
+
+ //! Facet for format-based input.
+ /*!
+ */
+ template <class time_type,
+ class CharT,
+ class InItrT = std::istreambuf_iterator<CharT, std::char_traits<CharT> > >
+ class time_input_facet :
+ public boost::date_time::date_input_facet<typename time_type::date_type , CharT, InItrT> {
+ public:
+ typedef typename time_type::date_type date_type;
+ typedef typename time_type::time_duration_type time_duration_type;
+ typedef typename time_duration_type::fractional_seconds_type fracional_seconds_type;
+ typedef boost::date_time::period<time_type,time_duration_type> period_type;
+ typedef boost::date_time::date_input_facet<typename time_type::date_type, CharT, InItrT> base_type;
+ typedef typename base_type::duration_type date_duration_type;
+ typedef typename base_type::year_type year_type;
+ typedef typename base_type::month_type month_type;
+ typedef typename base_type::day_type day_type;
+ typedef typename base_type::string_type string_type;
+ typedef typename string_type::const_iterator const_itr;
+ typedef typename base_type::char_type char_type;
+ typedef typename base_type::format_date_parser_type format_date_parser_type;
+ typedef typename base_type::period_parser_type period_parser_type;
+ typedef typename base_type::special_values_parser_type special_values_parser_type;
+ typedef typename base_type::date_gen_parser_type date_gen_parser_type;
+ typedef typename base_type::special_values_parser_type::match_results match_results;
+
+ static const char_type* fractional_seconds_format; // f
+ static const char_type* fractional_seconds_or_none_format; // F
+ static const char_type* seconds_with_fractional_seconds_format; // s
+ static const char_type* seconds_format; // S
+ static const char_type* standard_format; // x X
+ static const char_type* zone_abbrev_format; // z
+ static const char_type* zone_name_format; // Z
+ static const char_type* zone_iso_format; // q
+ static const char_type* zone_iso_extended_format; // Q
+ static const char_type* duration_seperator;
+ static const char_type* iso_time_format_specifier;
+ static const char_type* iso_time_format_extended_specifier;
+ static const char_type* default_time_input_format;
+ static const char_type* default_time_duration_format;
+ static std::locale::id id;
+
+ //! Constructor that takes a format string for a ptime
+ explicit time_input_facet(const string_type& format, ::size_t a_ref = 0)
+ : base_type(format, a_ref),
+ m_time_duration_format(default_time_duration_format)
+ { }
+
+ explicit time_input_facet(const string_type& format,
+ const format_date_parser_type& date_parser,
+ const special_values_parser_type& sv_parser,
+ const period_parser_type& per_parser,
+ const date_gen_parser_type& date_gen_parser,
+ ::size_t a_ref = 0)
+ : base_type(format,
+ date_parser,
+ sv_parser,
+ per_parser,
+ date_gen_parser,
+ a_ref),
+ m_time_duration_format(default_time_duration_format)
+ {}
+
+ //! sets default formats for ptime, local_date_time, and time_duration
+ explicit time_input_facet(::size_t a_ref = 0)
+ : base_type(default_time_input_format, a_ref),
+ m_time_duration_format(default_time_duration_format)
+ { }
+
+ //! Set the format for time_duration
+ void time_duration_format(const char_type* const format) {
+ m_time_duration_format = format;
+ }
+ virtual void set_iso_format()
+ {
+ this->m_format = iso_time_format_specifier;
+ }
+ virtual void set_iso_extended_format()
+ {
+ this->m_format = iso_time_format_extended_specifier;
+ }
+
+ InItrT get(InItrT& sitr,
+ InItrT& stream_end,
+ std::ios_base& a_ios,
+ period_type& p) const
+ {
+ p = this->m_period_parser.get_period(sitr,
+ stream_end,
+ a_ios,
+ p,
+ time_duration_type::unit(),
+ *this);
+ return sitr;
+ }
+
+ //default ptime format is YYYY-Mon-DD HH:MM:SS[.fff...][ zzz]
+ //default time_duration format is %H:%M:%S%F HH:MM:SS[.fff...]
+
+ InItrT get(InItrT& sitr,
+ InItrT& stream_end,
+ std::ios_base& a_ios,
+ time_duration_type& td) const
+ {
+ // skip leading whitespace
+ while((sitr != stream_end) && std::isspace(*sitr)) { ++sitr; }
+
+ bool use_current_char = false;
+
+ // num_get will consume the +/-, we may need a copy if special_value
+ char_type c = '\0';
+ if((sitr != stream_end) && (*sitr == '-' || *sitr == '+')) {
+ c = *sitr;
+ }
+
+ long hour = 0;
+ long min = 0;
+ long sec = 0;
+ typename time_duration_type::fractional_seconds_type frac(0);
+
+ typedef std::num_get<CharT, InItrT> num_get;
+ if(!std::has_facet<num_get>(a_ios.getloc())) {
+ num_get* ng = new num_get();
+ std::locale loc = std::locale(a_ios.getloc(), ng);
+ a_ios.imbue(loc);
+ }
+
+ const_itr itr(m_time_duration_format.begin());
+ while (itr != m_time_duration_format.end() && (sitr != stream_end)) {
+ if (*itr == '%') {
+ itr++;
+ if (*itr != '%') {
+ switch(*itr) {
+ case 'H':
+ {
+ match_results mr;
+ hour = fixed_string_to_int<short, CharT>(sitr, stream_end, mr, 2);
+ if(hour == -1){
+ return check_special_value(sitr, stream_end, td, c);
+ }
+ break;
+ }
+ case 'M':
+ {
+ match_results mr;
+ min = fixed_string_to_int<short, CharT>(sitr, stream_end, mr, 2);
+ if(min == -1){
+ return check_special_value(sitr, stream_end, td, c);
+ }
+ break;
+ }
+ case 'S':
+ {
+ match_results mr;
+ sec = fixed_string_to_int<short, CharT>(sitr, stream_end, mr, 2);
+ if(sec == -1){
+ return check_special_value(sitr, stream_end, td, c);
+ }
+ break;
+ }
+ case 's':
+ {
+ match_results mr;
+ sec = fixed_string_to_int<short, CharT>(sitr, stream_end, mr, 2);
+ if(sec == -1){
+ return check_special_value(sitr, stream_end, td, c);
+ }
+ // %s is the same as %S%f so we drop through into %f
+ //break;
+ }
+ case 'f':
+ {
+ // check for decimal, check special_values if missing
+ if(*sitr == '.') {
+ ++sitr;
+ parse_frac_type(sitr, stream_end, frac);
+ // sitr will point to next expected char after this parsing
+ // is complete so no need to advance it
+ use_current_char = true;
+ }
+ else {
+ return check_special_value(sitr, stream_end, td, c);
+ }
+ break;
+ }
+ case 'F':
+ {
+ // check for decimal, skip if missing
+ if(*sitr == '.') {
+ ++sitr;
+ parse_frac_type(sitr, stream_end, frac);
+ // sitr will point to next expected char after this parsing
+ // is complete so no need to advance it
+ use_current_char = true;
+ }
+ else {
+ // nothing was parsed so we don't want to advance sitr
+ use_current_char = true;
+ }
+ break;
+ }
+ default:
+ {} // ignore what we don't understand?
+ }// switch
+ }
+ else { // itr == '%', second consecutive
+ sitr++;
+ }
+
+ itr++; //advance past format specifier
+ }
+ else { //skip past chars in format and in buffer
+ itr++;
+ // set use_current_char when sitr is already
+ // pointing at the next character to process
+ if (use_current_char) {
+ use_current_char = false;
+ }
+ else {
+ sitr++;
+ }
+ }
+ }
+
+ td = time_duration_type(hour, min, sec, frac);
+ return sitr;
+ }
+
+
+ //! Parses a time object from the input stream
+ InItrT get(InItrT& sitr,
+ InItrT& stream_end,
+ std::ios_base& a_ios,
+ time_type& t) const
+ {
+ string_type tz_str;
+ return get(sitr, stream_end, a_ios, t, tz_str, false);
+ }
+ //! Expects a time_zone in the input stream
+ InItrT get_local_time(InItrT& sitr,
+ InItrT& stream_end,
+ std::ios_base& a_ios,
+ time_type& t,
+ string_type& tz_str) const
+ {
+ return get(sitr, stream_end, a_ios, t, tz_str, true);
+ }
+
+ protected:
+
+ InItrT get(InItrT& sitr,
+ InItrT& stream_end,
+ std::ios_base& a_ios,
+ time_type& t,
+ string_type& tz_str,
+ bool time_is_local) const
+ {
+ // skip leading whitespace
+ while((sitr != stream_end) && std::isspace(*sitr)) { ++sitr; }
+
+ bool use_current_char = false;
+ bool use_current_format_char = false; // used whith two character flags
+
+ // num_get will consume the +/-, we may need a copy if special_value
+ char_type c = '\0';
+ if((sitr != stream_end) && (*sitr == '-' || *sitr == '+')) {
+ c = *sitr;
+ }
+
+ // time elements
+ long hour = 0;
+ long min = 0;
+ long sec = 0;
+ typename time_duration_type::fractional_seconds_type frac(0);
+ // date elements
+ short day_of_year(0);
+ /* Initialized the following to their minimum values. These intermediate
+ * objects are used so we get specific exceptions when part of the input
+ * is unparsable.
+ * Ex: "205-Jan-15" will throw a bad_year, "2005-Jsn-15"- bad_month, etc.*/
+ year_type t_year(1400);
+ month_type t_month(1);
+ day_type t_day(1);
+
+ typedef std::num_get<CharT, InItrT> num_get;
+ if(!std::has_facet<num_get>(a_ios.getloc())) {
+ num_get* ng = new num_get();
+ std::locale loc = std::locale(a_ios.getloc(), ng);
+ a_ios.imbue(loc);
+ }
+
+ const_itr itr(this->m_format.begin());
+ while (itr != this->m_format.end() && (sitr != stream_end)) {
+ if (*itr == '%') {
+ itr++;
+ if (*itr != '%') {
+ // the cases are grouped by date & time flags - not alphabetical order
+ switch(*itr) {
+ // date flags
+ case 'Y':
+ case 'y':
+ {
+ char_type cs[3] = { '%', *itr };
+ string_type s(cs);
+ match_results mr;
+ try {
+ t_year = this->m_parser.parse_year(sitr, stream_end, s, mr);
+ }
+ catch(std::out_of_range bad_year) { // base class for bad_year exception
+ if(this->m_sv_parser.match(sitr, stream_end, mr)) {
+ t = time_type(static_cast<special_values>(mr.current_match));
+ return sitr;
+ }
+ else {
+ throw; // rethrow bad_year
+ }
+ }
+ break;
+ }
+ case 'B':
+ case 'b':
+ case 'm':
+ {
+ char_type cs[3] = { '%', *itr };
+ string_type s(cs);
+ match_results mr;
+ try {
+ t_month = this->m_parser.parse_month(sitr, stream_end, s, mr);
+ }
+ catch(std::out_of_range bad_month) { // base class for bad_month exception
+ if(this->m_sv_parser.match(sitr, stream_end, mr)) {
+ t = time_type(static_cast<special_values>(mr.current_match));
+ return sitr;
+ }
+ else {
+ throw; // rethrow bad_year
+ }
+ }
+ // did m_parser already advance sitr to next char?
+ if(mr.has_remaining()) {
+ use_current_char = true;
+ }
+ break;
+ }
+ case 'a':
+ case 'A':
+ case 'w':
+ {
+ // weekday is not used in construction but we need to get it out of the stream
+ char_type cs[3] = { '%', *itr };
+ string_type s(cs);
+ match_results mr;
+ typename date_type::day_of_week_type wd(0);
+ try {
+ wd = this->m_parser.parse_weekday(sitr, stream_end, s, mr);
+ }
+ catch(std::out_of_range bad_weekday) { // base class for bad_weekday exception
+ if(this->m_sv_parser.match(sitr, stream_end, mr)) {
+ t = time_type(static_cast<special_values>(mr.current_match));
+ return sitr;
+ }
+ else {
+ throw; // rethrow bad_weekday
+ }
+ }
+ // did m_parser already advance sitr to next char?
+ if(mr.has_remaining()) {
+ use_current_char = true;
+ }
+ break;
+ }
+ case 'j':
+ {
+ // code that gets julian day (from format_date_parser)
+ match_results mr;
+ day_of_year = fixed_string_to_int<unsigned short, CharT>(sitr, stream_end, mr, 3);
+ if(day_of_year == -1) {
+ if(this->m_sv_parser.match(sitr, stream_end, mr)) {
+ t = time_type(static_cast<special_values>(mr.current_match));
+ return sitr;
+ }
+ }
+ // these next two lines are so we get an exception with bad input
+ typedef typename time_type::date_type::day_of_year_type day_of_year_type;
+ day_of_year_type t_day_of_year(day_of_year);
+ break;
+ }
+ case 'd':
+ {
+ try {
+ t_day = this->m_parser.parse_day_of_month(sitr, stream_end);
+ }
+ catch(std::out_of_range bad_day_of_month) { // base class for exception
+ match_results mr;
+ if(this->m_sv_parser.match(sitr, stream_end, mr)) {
+ t = time_type(static_cast<special_values>(mr.current_match));
+ return sitr;
+ }
+ else {
+ throw; // rethrow bad_year
+ }
+ }
+ break;
+ }
+ // time flags
+ case 'H':
+ {
+ match_results mr;
+ hour = fixed_string_to_int<short, CharT>(sitr, stream_end, mr, 2);
+ if(hour == -1){
+ return check_special_value(sitr, stream_end, t, c);
+ }
+ break;
+ }
+ case 'M':
+ {
+ match_results mr;
+ min = fixed_string_to_int<short, CharT>(sitr, stream_end, mr, 2);
+ if(min == -1){
+ return check_special_value(sitr, stream_end, t, c);
+ }
+ break;
+ }
+ case 'S':
+ {
+ match_results mr;
+ sec = fixed_string_to_int<short, CharT>(sitr, stream_end, mr, 2);
+ if(sec == -1){
+ return check_special_value(sitr, stream_end, t, c);
+ }
+ break;
+ }
+ case 's':
+ {
+ match_results mr;
+ sec = fixed_string_to_int<short, CharT>(sitr, stream_end, mr, 2);
+ if(sec == -1){
+ return check_special_value(sitr, stream_end, t, c);
+ }
+ // %s is the same as %S%f so we drop through into %f
+ //break;
+ }
+ case 'f':
+ {
+ // check for decimal, check SV if missing
+ if(*sitr == '.') {
+ ++sitr;
+ parse_frac_type(sitr, stream_end, frac);
+ // sitr will point to next expected char after this parsing
+ // is complete so no need to advance it
+ use_current_char = true;
+ }
+ else {
+ return check_special_value(sitr, stream_end, t, c);
+ }
+ break;
+ }
+ case 'F':
+ {
+ // check for decimal, skip if missing
+ if(*sitr == '.') {
+ ++sitr;
+ parse_frac_type(sitr, stream_end, frac);
+ // sitr will point to next expected char after this parsing
+ // is complete so no need to advance it
+ use_current_char = true;
+ }
+ else {
+ // nothing was parsed so we don't want to advance sitr
+ use_current_char = true;
+ }
+ break;
+ }
+ // time_zone flags
+ //case 'q':
+ //case 'Q':
+ //case 'z':
+ case 'Z':
+ {
+ if(time_is_local) { // skip if 't' is a ptime
+ ++itr;
+ if(*itr == 'P') {
+ // skip leading whitespace
+ while((sitr != stream_end) && std::isspace(*sitr)) { ++sitr; }
+ // parse zone
+ while((sitr != stream_end) && (!std::isspace(*sitr))) {
+ tz_str += *sitr;
+ ++sitr;
+ }
+ }
+ else {
+ use_current_format_char = true;
+ }
+
+ }
+ else {
+ // nothing was parsed so we don't want to advance sitr
+ use_current_char = true;
+ }
+
+ break;
+ }
+ default:
+ {} // ignore what we don't understand?
+ }// switch
+ }
+ else { // itr == '%', second consecutive
+ sitr++;
+ }
+
+ if(use_current_format_char) {
+ use_current_format_char = false;
+ }
+ else {
+ itr++; //advance past format specifier
+ }
+
+ }
+ else { //skip past chars in format and in buffer
+ itr++;
+ // set use_current_char when sitr is already
+ // pointing at the next character to process
+ if (use_current_char) {
+ use_current_char = false;
+ }
+ else {
+ sitr++;
+ }
+ }
+ }
+
+ date_type d(not_a_date_time);
+ if (day_of_year > 0) {
+ d = date_type(static_cast<unsigned short>(t_year-1),12,31) + date_duration_type(day_of_year);
+ }
+ else {
+ d = date_type(t_year, t_month, t_day);
+ }
+
+ time_duration_type td(hour, min, sec, frac);
+ t = time_type(d, td);
+ return sitr;
+ }
+
+ //! Helper function to check for special_value
+ /*! First character may have been consumed during original parse
+ * attempt. Parameter 'c' should be a copy of that character.
+ * Throws ios_base::failure if parse fails. */
+ template<class temporal_type>
+ inline
+ InItrT check_special_value(InItrT& sitr,InItrT& stream_end, temporal_type& tt, char_type c='\0') const
+ {
+ match_results mr;
+ if((c == '-' || c == '+') && (*sitr != c)) { // was the first character consumed?
+ mr.cache += c;
+ }
+ this->m_sv_parser.match(sitr, stream_end, mr);
+ if(mr.current_match == match_results::PARSE_ERROR) {
+ std::string tmp = convert_string_type<char_type, char>(mr.cache);
+ throw std::ios_base::failure("Parse failed. No match found for '" + tmp + "'");
+ }
+ tt = temporal_type(static_cast<special_values>(mr.current_match));
+ return sitr;
+ }
+
+ //! Helper function for parsing a fractional second type from the stream
+ void parse_frac_type(InItrT& sitr,
+ InItrT& stream_end,
+ fracional_seconds_type& frac) const
+ {
+ string_type cache;
+ while((sitr != stream_end) && std::isdigit(*sitr)) {
+ cache += *sitr;
+ ++sitr;
+ }
+ if(cache.size() > 0) {
+ unsigned short precision = time_duration_type::num_fractional_digits();
+ // input may be only the first few decimal places
+ if(cache.size() < precision) {
+ frac = lexical_cast<fracional_seconds_type>(cache);
+ frac = decimal_adjust(frac, static_cast<unsigned short>(precision - cache.size()));
+ }
+ else {
+ // if input has too many decimal places, drop excess digits
+ frac = lexical_cast<fracional_seconds_type>(cache.substr(0, precision));
+ }
+ }
+ }
+
+ private:
+ string_type m_time_duration_format;
+
+ //! Helper function to adjust trailing zeros when parsing fractional digits
+ template<class int_type>
+ inline
+ int_type decimal_adjust(int_type val, const unsigned short places) const
+ {
+ unsigned long factor = 1;
+ for(int i = 0; i < places; ++i){
+ factor *= 10; // shift decimal to the right
+ }
+ return val * factor;
+ }
+
+ };
+
+template <class time_type, class CharT, class InItrT>
+ std::locale::id time_input_facet<time_type, CharT, InItrT>::id;
+
+template <class time_type, class CharT, class InItrT>
+ const typename time_input_facet<time_type, CharT, InItrT>::char_type*
+ time_input_facet<time_type, CharT, InItrT>::fractional_seconds_format = time_formats<CharT>::fractional_seconds_format;
+
+ template <class time_type, class CharT, class InItrT>
+ const typename time_input_facet<time_type, CharT, InItrT>::char_type*
+ time_input_facet<time_type, CharT, InItrT>::fractional_seconds_or_none_format = time_formats<CharT>::fractional_seconds_or_none_format;
+
+ template <class time_type, class CharT, class InItrT>
+ const typename time_input_facet<time_type, CharT, InItrT>::char_type*
+ time_input_facet<time_type, CharT, InItrT>::seconds_with_fractional_seconds_format = time_formats<CharT>::seconds_with_fractional_seconds_format;
+
+ template <class time_type, class CharT, class InItrT>
+ const typename time_input_facet<time_type, CharT, InItrT>::char_type*
+ time_input_facet<time_type, CharT, InItrT>::seconds_format = time_formats<CharT>::seconds_format;
+
+ template <class time_type, class CharT, class InItrT>
+ const typename time_input_facet<time_type, CharT, InItrT>::char_type*
+ time_input_facet<time_type, CharT, InItrT>::standard_format = time_formats<CharT>::standard_format;
+
+ template <class time_type, class CharT, class InItrT>
+ const typename time_input_facet<time_type, CharT, InItrT>::char_type*
+ time_input_facet<time_type, CharT, InItrT>::zone_abbrev_format = time_formats<CharT>::zone_abbrev_format;
+
+ template <class time_type, class CharT, class InItrT>
+ const typename time_input_facet<time_type, CharT, InItrT>::char_type*
+ time_input_facet<time_type, CharT, InItrT>::zone_name_format = time_formats<CharT>::zone_name_format;
+
+ template <class time_type, class CharT, class InItrT>
+ const typename time_input_facet<time_type, CharT, InItrT>::char_type*
+ time_input_facet<time_type, CharT, InItrT>::zone_iso_format = time_formats<CharT>::zone_iso_format;
+
+ template <class time_type, class CharT, class InItrT>
+ const typename time_input_facet<time_type, CharT, InItrT>::char_type*
+ time_input_facet<time_type, CharT, InItrT>::zone_iso_extended_format = time_formats<CharT>::zone_iso_extended_format;
+
+ template <class time_type, class CharT, class InItrT>
+ const typename time_input_facet<time_type, CharT, InItrT>::char_type*
+ time_input_facet<time_type, CharT, InItrT>::duration_seperator = time_formats<CharT>::duration_seperator;
+
+ template <class time_type, class CharT, class InItrT>
+ const typename time_input_facet<time_type, CharT, InItrT>::char_type*
+ time_input_facet<time_type, CharT, InItrT>::iso_time_format_specifier = time_formats<CharT>::iso_time_format_specifier;
+
+ template <class time_type, class CharT, class InItrT>
+ const typename time_input_facet<time_type, CharT, InItrT>::char_type*
+ time_input_facet<time_type, CharT, InItrT>::iso_time_format_extended_specifier = time_formats<CharT>::iso_time_format_extended_specifier;
+
+ template <class time_type, class CharT, class InItrT>
+ const typename time_input_facet<time_type, CharT, InItrT>::char_type*
+ time_input_facet<time_type, CharT, InItrT>::default_time_input_format = time_formats<CharT>::default_time_input_format;
+
+ template <class time_type, class CharT, class InItrT>
+ const typename time_input_facet<time_type, CharT, InItrT>::char_type*
+ time_input_facet<time_type, CharT, InItrT>::default_time_duration_format = time_formats<CharT>::default_time_duration_format;
+
+
+} } // namespaces
+
+
+#endif
+
diff --git a/boost/boost/date_time/time_formatting_streams.hpp b/boost/boost/date_time/time_formatting_streams.hpp
new file mode 100644
index 00000000000..8742c9a4408
--- /dev/null
+++ b/boost/boost/date_time/time_formatting_streams.hpp
@@ -0,0 +1,119 @@
+#ifndef DATE_TIME_TIME_FORMATTING_STREAMS_HPP___
+#define DATE_TIME_TIME_FORMATTING_STREAMS_HPP___
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2004/07/17 22:20:18 $
+ */
+
+
+#include "boost/date_time/date_formatting_locales.hpp"
+#include "boost/date_time/time_resolution_traits.hpp"
+
+#ifndef BOOST_DATE_TIME_NO_LOCALE
+
+namespace boost {
+namespace date_time {
+
+
+ //! Put a time type into a stream using appropriate facets
+ template<class time_duration_type,
+ class charT = char>
+ class ostream_time_duration_formatter
+ {
+ public:
+ typedef std::basic_ostream<charT> ostream_type;
+ typedef typename time_duration_type::fractional_seconds_type fractional_seconds_type;
+
+ //! Put time into an ostream
+ static void duration_put(const time_duration_type& td,
+ ostream_type& os)
+ {
+ if(td.is_special()) {
+ os << td.get_rep();
+ }
+ else {
+ charT fill_char = '0';
+ if(td.is_negative()) {
+ os << '-';
+ }
+ os << std::setw(2) << std::setfill(fill_char)
+ << absolute_value(td.hours()) << ":";
+ os << std::setw(2) << std::setfill(fill_char)
+ << absolute_value(td.minutes()) << ":";
+ os << std::setw(2) << std::setfill(fill_char)
+ << absolute_value(td.seconds());
+ fractional_seconds_type frac_sec =
+ absolute_value(td.fractional_seconds());
+ if (frac_sec != 0) {
+ os << "."
+ << std::setw(time_duration_type::num_fractional_digits())
+ << std::setfill(fill_char)
+ << frac_sec;
+ }
+ } // else
+ } // duration_put
+ }; //class ostream_time_duration_formatter
+
+ //! Put a time type into a stream using appropriate facets
+ template<class time_type,
+ class charT = char>
+ class ostream_time_formatter
+ {
+ public:
+ typedef std::basic_ostream<charT> ostream_type;
+ typedef typename time_type::date_type date_type;
+ typedef typename time_type::time_duration_type time_duration_type;
+ typedef ostream_time_duration_formatter<time_duration_type, charT> duration_formatter;
+
+ //! Put time into an ostream
+ static void time_put(const time_type& t,
+ ostream_type& os)
+ {
+ date_type d = t.date();
+ os << d;
+ if(!d.is_infinity() && !d.is_not_a_date())
+ {
+ os << " "; //TODO: fix the separator here.
+ duration_formatter::duration_put(t.time_of_day(), os);
+ }
+
+ } // time_to_ostream
+ }; //class ostream_time_formatter
+
+
+ //! Put a time period into a stream using appropriate facets
+ template<class time_period_type,
+ class charT = char>
+ class ostream_time_period_formatter
+ {
+ public:
+ typedef std::basic_ostream<charT> ostream_type;
+ typedef typename time_period_type::point_type time_type;
+ typedef ostream_time_formatter<time_type, charT> time_formatter;
+
+ //! Put time into an ostream
+ static void period_put(const time_period_type& tp,
+ ostream_type& os)
+ {
+ os << '['; //TODO: facet or manipulator for periods?
+ time_formatter::time_put(tp.begin(), os);
+ os << '/'; //TODO: facet or manipulator for periods?
+ time_formatter::time_put(tp.last(), os);
+ os << ']';
+
+ } // period_put
+
+ }; //class ostream_time_period_formatter
+
+
+
+} } //namespace date_time
+
+#endif //BOOST_DATE_TIME_NO_LOCALE
+
+#endif
+
diff --git a/boost/boost/date_time/time_iterator.hpp b/boost/boost/date_time/time_iterator.hpp
new file mode 100644
index 00000000000..72623bfa5a8
--- /dev/null
+++ b/boost/boost/date_time/time_iterator.hpp
@@ -0,0 +1,52 @@
+#ifndef DATE_TIME_TIME_ITERATOR_HPP___
+#define DATE_TIME_TIME_ITERATOR_HPP___
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2003/11/23 03:31:27 $
+ */
+
+
+namespace boost {
+namespace date_time {
+
+
+ //! Simple time iterator skeleton class
+ template<class time_type>
+ class time_itr {
+ public:
+ typedef typename time_type::time_duration_type time_duration_type;
+ time_itr(time_type t, time_duration_type d) : current_(t), offset_(d) {};
+ time_itr& operator++()
+ {
+ current_ = current_ + offset_;
+ return *this;
+ }
+ time_itr& operator--()
+ {
+ current_ = current_ - offset_;
+ return *this;
+ }
+ time_type operator*() {return current_;};
+ time_type* operator->() {return &current_;};
+ bool operator< (const time_type& t) {return current_ < t;};
+ bool operator<= (const time_type& t) {return current_ <= t;};
+ bool operator!= (const time_type& t) {return current_ != t;};
+ bool operator== (const time_type& t) {return current_ == t;};
+ bool operator> (const time_type& t) {return current_ > t;};
+ bool operator>= (const time_type& t) {return current_ >= t;};
+
+ private:
+ time_type current_;
+ time_duration_type offset_;
+ };
+
+
+
+} }//namespace date_time
+
+
+#endif
diff --git a/boost/boost/date_time/time_parsing.hpp b/boost/boost/date_time/time_parsing.hpp
new file mode 100644
index 00000000000..6f2d9b85f2c
--- /dev/null
+++ b/boost/boost/date_time/time_parsing.hpp
@@ -0,0 +1,321 @@
+#ifndef _DATE_TIME_TIME_PARSING_HPP___
+#define _DATE_TIME_TIME_PARSING_HPP___
+
+/* Copyright (c) 2002,2003,2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2005/10/23 20:15:06 $
+ */
+
+#include "boost/tokenizer.hpp"
+#include "boost/lexical_cast.hpp"
+#include "boost/date_time/date_parsing.hpp"
+#include "boost/cstdint.hpp"
+#include <iostream>
+
+namespace boost {
+namespace date_time {
+
+ //! computes exponential math like 2^8 => 256, only works with positive integers
+ //Not general purpose, but needed b/c std::pow is not available
+ //everywehere. Hasn't been tested with negatives and zeros
+ template<class int_type>
+ inline
+ int_type power(int_type base, int_type exponent)
+ {
+ int_type result = 1;
+ for(int i = 0; i < exponent; ++i){
+ result *= base;
+ }
+ return result;
+ }
+
+ //! Creates a time_duration object from a delimited string
+ /*! Expected format for string is "[-]h[h][:mm][:ss][.fff]".
+ * If the number of fractional digits provided is greater than the
+ * precision of the time duration type then the extra digits are
+ * truncated.
+ *
+ * A negative duration will be created if the first character in
+ * string is a '-', all other '-' will be treated as delimiters.
+ * Accepted delimiters are "-:,.".
+ */
+ template<class time_duration, class char_type>
+ inline
+ time_duration
+ str_from_delimited_time_duration(const std::basic_string<char_type>& s)
+ {
+ unsigned short min=0, sec =0;
+ int hour =0;
+ bool is_neg = (s.at(0) == '-');
+ boost::int64_t fs=0;
+ int pos = 0;
+
+ typedef typename std::basic_string<char_type>::traits_type traits_type;
+ typedef boost::char_separator<char_type, traits_type> char_separator_type;
+ typedef boost::tokenizer<char_separator_type,
+ typename std::basic_string<char_type>::const_iterator,
+ std::basic_string<char_type> > tokenizer;
+ typedef typename boost::tokenizer<char_separator_type,
+ typename std::basic_string<char_type>::const_iterator,
+ typename std::basic_string<char_type> >::iterator tokenizer_iterator;
+
+ char_type sep_chars[5] = {'-',':',',','.'};
+ char_separator_type sep(sep_chars);
+ tokenizer tok(s,sep);
+ for(tokenizer_iterator beg=tok.begin(); beg!=tok.end();++beg){
+ switch(pos) {
+ case 0: {
+ hour = boost::lexical_cast<int>(*beg);
+ break;
+ }
+ case 1: {
+ min = boost::lexical_cast<unsigned short>(*beg);
+ break;
+ }
+ case 2: {
+ sec = boost::lexical_cast<unsigned short>(*beg);
+ break;
+ };
+ case 3: {
+ int digits = static_cast<int>(beg->length());
+ //Works around a bug in MSVC 6 library that does not support
+ //operator>> thus meaning lexical_cast will fail to compile.
+#if (defined(BOOST_MSVC) && (_MSC_VER < 1300))
+ // msvc wouldn't compile 'time_duration::num_fractional_digits()'
+ // (required template argument list) as a workaround a temp
+ // time_duration object was used
+ time_duration td(hour,min,sec,fs);
+ int precision = td.num_fractional_digits();
+ // _atoi64 is an MS specific function
+ if(digits >= precision) {
+ // drop excess digits
+ fs = _atoi64(beg->substr(0, precision).c_str());
+ }
+ else {
+ fs = _atoi64(beg->c_str());
+ }
+#else
+ int precision = time_duration::num_fractional_digits();
+ if(digits >= precision) {
+ // drop excess digits
+ fs = boost::lexical_cast<boost::int64_t>(beg->substr(0, precision));
+ }
+ else {
+ fs = boost::lexical_cast<boost::int64_t>(*beg);
+ }
+#endif
+ if(digits < precision){
+ // trailing zeros get dropped from the string,
+ // "1:01:01.1" would yield .000001 instead of .100000
+ // the power() compensates for the missing decimal places
+ fs *= power(10, precision - digits);
+ }
+
+ break;
+ }
+ }//switch
+ pos++;
+ }
+ if(is_neg) {
+ return -time_duration(hour, min, sec, fs);
+ }
+ else {
+ return time_duration(hour, min, sec, fs);
+ }
+ }
+
+ //! Creates a time_duration object from a delimited string
+ /*! Expected format for string is "[-]h[h][:mm][:ss][.fff]".
+ * If the number of fractional digits provided is greater than the
+ * precision of the time duration type then the extra digits are
+ * truncated.
+ *
+ * A negative duration will be created if the first character in
+ * string is a '-', all other '-' will be treated as delimiters.
+ * Accepted delimiters are "-:,.".
+ */
+ template<class time_duration>
+ inline
+ time_duration
+ parse_delimited_time_duration(const std::string& s)
+ {
+ return str_from_delimited_time_duration<time_duration,char>(s);
+ }
+
+ //! Utility function to split appart string
+ inline
+ bool
+ split(const std::string& s,
+ char sep,
+ std::string& first,
+ std::string& second)
+ {
+ int sep_pos = static_cast<int>(s.find(sep));
+ first = s.substr(0,sep_pos);
+ second = s.substr(sep_pos+1);
+ return true;
+ }
+
+
+ template<class time_type>
+ inline
+ time_type
+ parse_delimited_time(const std::string& s, char sep)
+ {
+ typedef typename time_type::time_duration_type time_duration;
+ typedef typename time_type::date_type date_type;
+
+ //split date/time on a unique delimiter char such as ' ' or 'T'
+ std::string date_string, tod_string;
+ split(s, sep, date_string, tod_string);
+ //call parse_date with first string
+ date_type d = parse_date<date_type>(date_string);
+ //call parse_time_duration with remaining string
+ time_duration td = parse_delimited_time_duration<time_duration>(tod_string);
+ //construct a time
+ return time_type(d, td);
+
+ }
+
+ //! Parse time duration part of an iso time of form: [-]hhmmss[.fff...] (eg: 120259.123 is 12 hours, 2 min, 59 seconds, 123000 microseconds)
+ template<class time_duration>
+ inline
+ time_duration
+ parse_undelimited_time_duration(const std::string& s)
+ {
+ int precision = 0;
+ {
+ // msvc wouldn't compile 'time_duration::num_fractional_digits()'
+ // (required template argument list) as a workaround, a temp
+ // time_duration object was used
+ time_duration tmp(0,0,0,1);
+ precision = tmp.num_fractional_digits();
+ }
+ // 'precision+1' is so we grab all digits, plus the decimal
+ int offsets[] = {2,2,2, precision+1};
+ int pos = 0, sign = 0;
+ int hours = 0;
+ short min=0, sec=0;
+ boost::int64_t fs=0;
+ // increment one position if the string was "signed"
+ if(s.at(sign) == '-')
+ {
+ ++sign;
+ }
+ // stlport choked when passing s.substr() to tokenizer
+ // using a new string fixed the error
+ std::string remain = s.substr(sign);
+ /* We do not want the offset_separator to wrap the offsets, we
+ * will never want to process more than:
+ * 2 char, 2 char, 2 char, frac_sec length.
+ * We *do* want the offset_separator to give us a partial for the
+ * last characters if there were not enough provided in the input string. */
+ bool wrap_off = false;
+ bool ret_part = true;
+ boost::offset_separator osf(offsets, offsets+4, wrap_off, ret_part);
+ typedef boost::tokenizer<boost::offset_separator,
+ std::basic_string<char>::const_iterator,
+ std::basic_string<char> > tokenizer;
+ typedef boost::tokenizer<boost::offset_separator,
+ std::basic_string<char>::const_iterator,
+ std::basic_string<char> >::iterator tokenizer_iterator;
+ tokenizer tok(remain, osf);
+ for(tokenizer_iterator ti=tok.begin(); ti!=tok.end();++ti){
+ switch(pos) {
+ case 0:
+ {
+ hours = boost::lexical_cast<int>(*ti);
+ break;
+ }
+ case 1:
+ {
+ min = boost::lexical_cast<short>(*ti);
+ break;
+ }
+ case 2:
+ {
+ sec = boost::lexical_cast<short>(*ti);
+ break;
+ }
+ case 3:
+ {
+ std::string char_digits(ti->substr(1)); // digits w/no decimal
+ int digits = static_cast<int>(char_digits.length());
+
+ //Works around a bug in MSVC 6 library that does not support
+ //operator>> thus meaning lexical_cast will fail to compile.
+#if (defined(BOOST_MSVC) && (_MSC_VER <= 1200)) // 1200 == VC++ 6.0
+ // _atoi64 is an MS specific function
+ if(digits >= precision) {
+ // drop excess digits
+ fs = _atoi64(char_digits.substr(0, precision).c_str());
+ }
+ else if(digits == 0) {
+ fs = 0; // just in case _atoi64 doesn't like an empty string
+ }
+ else {
+ fs = _atoi64(char_digits.c_str());
+ }
+#else
+ if(digits >= precision) {
+ // drop excess digits
+ fs = boost::lexical_cast<boost::int64_t>(char_digits.substr(0, precision));
+ }
+ else if(digits == 0) {
+ fs = 0; // lexical_cast doesn't like empty strings
+ }
+ else {
+ fs = boost::lexical_cast<boost::int64_t>(char_digits);
+ }
+#endif
+ if(digits < precision){
+ // trailing zeros get dropped from the string,
+ // "1:01:01.1" would yield .000001 instead of .100000
+ // the power() compensates for the missing decimal places
+ fs *= power(10, precision - digits);
+ }
+
+ break;
+ }
+ };
+ pos++;
+ }
+ if(sign) {
+ return -time_duration(hours, min, sec, fs);
+ }
+ else {
+ return time_duration(hours, min, sec, fs);
+ }
+ }
+
+ //! Parse time string of form YYYYMMDDThhmmss where T is delimeter between date and time
+ template<class time_type>
+ inline
+ time_type
+ parse_iso_time(const std::string& s, char sep)
+ {
+ typedef typename time_type::time_duration_type time_duration;
+ typedef typename time_type::date_type date_type;
+
+ //split date/time on a unique delimiter char such as ' ' or 'T'
+ std::string date_string, tod_string;
+ split(s, sep, date_string, tod_string);
+ //call parse_date with first string
+ date_type d = parse_undelimited_date<date_type>(date_string);
+ //call parse_time_duration with remaining string
+ time_duration td = parse_undelimited_time_duration<time_duration>(tod_string);
+ //construct a time
+ return time_type(d, td);
+ }
+
+
+
+} }//namespace date_time
+
+
+
+
+#endif
diff --git a/boost/boost/date_time/time_resolution_traits.hpp b/boost/boost/date_time/time_resolution_traits.hpp
new file mode 100644
index 00000000000..b8287728769
--- /dev/null
+++ b/boost/boost/date_time/time_resolution_traits.hpp
@@ -0,0 +1,140 @@
+#ifndef DATE_TIME_TIME_RESOLUTION_TRAITS_HPP
+#define DATE_TIME_TIME_RESOLUTION_TRAITS_HPP
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2007/05/25 19:58:16 $
+ */
+
+
+#include "boost/date_time/time_defs.hpp"
+#include "boost/date_time/int_adapter.hpp"
+#include "boost/cstdint.hpp"
+
+namespace boost {
+namespace date_time {
+
+ //! Simple function to calculate absolute value of a numeric type
+ template <typename T>
+ // JDG [7/6/02 made a template],
+ // moved here from time_duration.hpp 2003-Sept-4.
+ inline T absolute_value(T x)
+ {
+ return x < 0 ? -x : x;
+ }
+
+ //! traits struct for time_resolution_traits implementation type
+ struct time_resolution_traits_bi32_impl {
+ typedef boost::int32_t int_type;
+ typedef boost::int32_t impl_type;
+ static int_type as_number(impl_type i){ return i;}
+ //! Used to determine if implemented type is int_adapter or int
+ static bool is_adapted() { return false;}
+ };
+ //! traits struct for time_resolution_traits implementation type
+ struct time_resolution_traits_adapted32_impl {
+ typedef boost::int32_t int_type;
+ typedef boost::date_time::int_adapter<boost::int32_t> impl_type;
+ static int_type as_number(impl_type i){ return i.as_number();}
+ //! Used to determine if implemented type is int_adapter or int
+ static bool is_adapted() { return true;}
+ };
+ //! traits struct for time_resolution_traits implementation type
+ struct time_resolution_traits_bi64_impl {
+ typedef boost::int64_t int_type;
+ typedef boost::int64_t impl_type;
+ static int_type as_number(impl_type i){ return i;}
+ //! Used to determine if implemented type is int_adapter or int
+ static bool is_adapted() { return false;}
+ };
+ //! traits struct for time_resolution_traits implementation type
+ struct time_resolution_traits_adapted64_impl {
+ typedef boost::int64_t int_type;
+ typedef boost::date_time::int_adapter<boost::int64_t> impl_type;
+ static int_type as_number(impl_type i){ return i.as_number();}
+ //! Used to determine if implemented type is int_adapter or int
+ static bool is_adapted() { return true;}
+ };
+
+ template<typename frac_sec_type,
+ time_resolutions res,
+#if (defined(BOOST_MSVC) && (_MSC_VER < 1300))
+ boost::int64_t resolution_adjust,
+#else
+ typename frac_sec_type::int_type resolution_adjust,
+#endif
+ unsigned short frac_digits,
+ typename v_type = boost::int32_t >
+ class time_resolution_traits {
+ public:
+ typedef typename frac_sec_type::int_type fractional_seconds_type;
+ typedef typename frac_sec_type::int_type tick_type;
+ typedef typename frac_sec_type::impl_type impl_type;
+ typedef v_type day_type;
+ typedef v_type hour_type;
+ typedef v_type min_type;
+ typedef v_type sec_type;
+
+ // bring in function from frac_sec_type traits structs
+ static typename frac_sec_type::int_type as_number(typename frac_sec_type::impl_type i)
+ {
+ return frac_sec_type::as_number(i);
+ }
+ static bool is_adapted()
+ {
+ return frac_sec_type::is_adapted();
+ }
+
+ //Would like this to be frac_sec_type, but some compilers complain
+ BOOST_STATIC_CONSTANT(int, ticks_per_second = resolution_adjust);
+ // static const boost::int32_t ticks_per_second = resolution_adjust;
+
+ static time_resolutions resolution()
+ {
+ return res;
+ }
+ static unsigned short num_fractional_digits()
+ {
+ return frac_digits;
+ }
+ static fractional_seconds_type res_adjust()
+ {
+ return resolution_adjust;
+ }
+ //! Any negative argument results in a negative tick_count
+ static tick_type to_tick_count(hour_type hours,
+ min_type minutes,
+ sec_type seconds,
+ fractional_seconds_type fs)
+ {
+ if(hours < 0 || minutes < 0 || seconds < 0 || fs < 0)
+ {
+ hours = absolute_value(hours);
+ minutes = absolute_value(minutes);
+ seconds = absolute_value(seconds);
+ fs = absolute_value(fs);
+ return (((((fractional_seconds_type(hours)*3600)
+ + (fractional_seconds_type(minutes)*60)
+ + seconds)*res_adjust()) + fs) * -1);
+ }
+
+ return (((fractional_seconds_type(hours)*3600)
+ + (fractional_seconds_type(minutes)*60)
+ + seconds)*res_adjust()) + fs;
+ }
+
+ };
+
+ typedef time_resolution_traits<time_resolution_traits_adapted32_impl, milli, 1000, 3 > milli_res;
+ typedef time_resolution_traits<time_resolution_traits_adapted64_impl, micro, 1000000, 6 > micro_res;
+ typedef time_resolution_traits<time_resolution_traits_adapted64_impl, nano, 1000000000, 9 > nano_res;
+
+
+} } //namespace date_time
+
+
+
+#endif
diff --git a/boost/boost/date_time/time_system_counted.hpp b/boost/boost/date_time/time_system_counted.hpp
new file mode 100644
index 00000000000..cb0d2029bb3
--- /dev/null
+++ b/boost/boost/date_time/time_system_counted.hpp
@@ -0,0 +1,254 @@
+#ifndef DATE_TIME_TIME_SYSTEM_COUNTED_HPP
+#define DATE_TIME_TIME_SYSTEM_COUNTED_HPP
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2006/03/20 13:29:16 $
+ */
+
+
+
+#include "boost/date_time/time_defs.hpp"
+#include <string>
+
+
+namespace boost {
+namespace date_time {
+
+ //! Time representation that uses a single integer count
+ template<class config>
+ struct counted_time_rep
+ {
+ typedef typename config::int_type int_type;
+ typedef typename config::date_type date_type;
+ typedef typename config::impl_type impl_type;
+ typedef typename date_type::duration_type date_duration_type;
+ typedef typename date_type::calendar_type calendar_type;
+ typedef typename date_type::ymd_type ymd_type;
+ typedef typename config::time_duration_type time_duration_type;
+ typedef typename config::resolution_traits resolution_traits;
+
+ counted_time_rep(const date_type& d, const time_duration_type& time_of_day)
+ : time_count_(1)
+ {
+ if(d.is_infinity() || d.is_not_a_date() || time_of_day.is_special()) {
+ time_count_ = time_of_day.get_rep() + d.day_count();
+ //std::cout << time_count_ << std::endl;
+ }
+ else {
+ time_count_ = (d.day_number() * frac_sec_per_day()) + time_of_day.ticks();
+ }
+ }
+ explicit counted_time_rep(int_type count) :
+ time_count_(count)
+ {}
+ explicit counted_time_rep(impl_type count) :
+ time_count_(count)
+ {}
+ date_type date() const
+ {
+ if(time_count_.is_special()) {
+ return date_type(time_count_.as_special());
+ }
+ else {
+ typename calendar_type::date_int_type dc = day_count();
+ //std::cout << "time_rep here:" << dc << std::endl;
+ ymd_type ymd = calendar_type::from_day_number(dc);
+ return date_type(ymd);
+ }
+ }
+ //int_type day_count() const
+ unsigned long day_count() const
+ {
+ /* resolution_traits::as_number returns a boost::int64_t &
+ * frac_sec_per_day is also a boost::int64_t so, naturally,
+ * the division operation returns a boost::int64_t.
+ * The static_cast to an unsigned long is ok (results in no data loss)
+ * because frac_sec_per_day is either the number of
+ * microseconds per day, or the number of nanoseconds per day.
+ * Worst case scenario: resolution_traits::as_number returns the
+ * maximum value an int64_t can hold and frac_sec_per_day
+ * is microseconds per day (lowest possible value).
+ * The division operation will then return a value of 106751991 -
+ * easily fitting in an unsigned long.
+ */
+ return static_cast<unsigned long>(resolution_traits::as_number(time_count_) / frac_sec_per_day());
+ }
+ int_type time_count() const
+ {
+ return resolution_traits::as_number(time_count_);
+ }
+ int_type tod() const
+ {
+ return resolution_traits::as_number(time_count_) % frac_sec_per_day();
+ }
+ static int_type frac_sec_per_day()
+ {
+ int_type seconds_per_day = 60*60*24;
+ int_type fractional_sec_per_sec(resolution_traits::res_adjust());
+ return seconds_per_day*fractional_sec_per_sec;
+ }
+ bool is_pos_infinity()const
+ {
+ return impl_type::is_pos_inf(time_count_.as_number());
+ }
+ bool is_neg_infinity()const
+ {
+ return impl_type::is_neg_inf(time_count_.as_number());
+ }
+ bool is_not_a_date_time()const
+ {
+ return impl_type::is_not_a_number(time_count_.as_number());
+ }
+ bool is_special()const
+ {
+ return time_count_.is_special();
+ }
+ impl_type get_rep()const
+ {
+ return time_count_;
+ }
+ private:
+ impl_type time_count_;
+ };
+
+ //! An unadjusted time system implementation.
+ template<class time_rep>
+ class counted_time_system
+ {
+ public:
+ typedef time_rep time_rep_type;
+ typedef typename time_rep_type::impl_type impl_type;
+ typedef typename time_rep_type::time_duration_type time_duration_type;
+ typedef typename time_duration_type::fractional_seconds_type fractional_seconds_type;
+ typedef typename time_rep_type::date_type date_type;
+ typedef typename time_rep_type::date_duration_type date_duration_type;
+
+
+ template<class T> static void unused_var(const T&) {}
+
+ static time_rep_type get_time_rep(const date_type& day,
+ const time_duration_type& tod,
+ date_time::dst_flags dst=not_dst)
+ {
+ unused_var(dst);
+ return time_rep_type(day, tod);
+ }
+
+ static time_rep_type get_time_rep(special_values sv)
+ {
+ switch (sv) {
+ case not_a_date_time:
+ return time_rep_type(date_type(not_a_date_time),
+ time_duration_type(not_a_date_time));
+ case pos_infin:
+ return time_rep_type(date_type(pos_infin),
+ time_duration_type(pos_infin));
+ case neg_infin:
+ return time_rep_type(date_type(neg_infin),
+ time_duration_type(neg_infin));
+ case max_date_time: {
+ time_duration_type td = time_duration_type(24,0,0,0) - time_duration_type(0,0,0,1);
+ return time_rep_type(date_type(max_date_time), td);
+ }
+ case min_date_time:
+ return time_rep_type(date_type(min_date_time), time_duration_type(0,0,0,0));
+
+ default:
+ return time_rep_type(date_type(not_a_date_time),
+ time_duration_type(not_a_date_time));
+
+ }
+
+ }
+
+ static date_type get_date(const time_rep_type& val)
+ {
+ return val.date();
+ }
+ static time_duration_type get_time_of_day(const time_rep_type& val)
+ {
+ if(val.is_special()) {
+ return time_duration_type(val.get_rep().as_special());
+ }
+ else{
+ return time_duration_type(0,0,0,val.tod());
+ }
+ }
+ static std::string zone_name(const time_rep_type&)
+ {
+ return "";
+ }
+ static bool is_equal(const time_rep_type& lhs, const time_rep_type& rhs)
+ {
+ return (lhs.time_count() == rhs.time_count());
+ }
+ static bool is_less(const time_rep_type& lhs, const time_rep_type& rhs)
+ {
+ return (lhs.time_count() < rhs.time_count());
+ }
+ static time_rep_type add_days(const time_rep_type& base,
+ const date_duration_type& dd)
+ {
+ if(base.is_special() || dd.is_special()) {
+ return(time_rep_type(base.get_rep() + dd.get_rep()));
+ }
+ else {
+ return time_rep_type(base.time_count() + (dd.days() * time_rep_type::frac_sec_per_day()));
+ }
+ }
+ static time_rep_type subtract_days(const time_rep_type& base,
+ const date_duration_type& dd)
+ {
+ if(base.is_special() || dd.is_special()) {
+ return(time_rep_type(base.get_rep() - dd.get_rep()));
+ }
+ else{
+ return time_rep_type(base.time_count() - (dd.days() * time_rep_type::frac_sec_per_day()));
+ }
+ }
+ static time_rep_type subtract_time_duration(const time_rep_type& base,
+ const time_duration_type& td)
+ {
+ if(base.is_special() || td.is_special()) {
+ return(time_rep_type(base.get_rep() - td.get_rep()));
+ }
+ else {
+ return time_rep_type(base.time_count() - td.ticks());
+ }
+ }
+ static time_rep_type add_time_duration(const time_rep_type& base,
+ time_duration_type td)
+ {
+ if(base.is_special() || td.is_special()) {
+ return(time_rep_type(base.get_rep() + td.get_rep()));
+ }
+ else {
+ return time_rep_type(base.time_count() + td.ticks());
+ }
+ }
+ static time_duration_type subtract_times(const time_rep_type& lhs,
+ const time_rep_type& rhs)
+ {
+ if(lhs.is_special() || rhs.is_special()) {
+ return(time_duration_type(
+ impl_type::to_special((lhs.get_rep() - rhs.get_rep()).as_number())));
+ }
+ else {
+ fractional_seconds_type fs = lhs.time_count() - rhs.time_count();
+ return time_duration_type(0,0,0,fs);
+ }
+ }
+
+ };
+
+
+} } //namespace date_time
+
+
+
+#endif
+
diff --git a/boost/boost/date_time/time_system_split.hpp b/boost/boost/date_time/time_system_split.hpp
new file mode 100644
index 00000000000..48cd0fd9688
--- /dev/null
+++ b/boost/boost/date_time/time_system_split.hpp
@@ -0,0 +1,213 @@
+#ifndef DATE_TIME_TIME_SYSTEM_SPLIT_HPP
+#define DATE_TIME_TIME_SYSTEM_SPLIT_HPP
+
+/* Copyright (c) 2002,2003,2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2006/02/26 20:10:18 $
+ */
+
+
+#include <string>
+#include "boost/date_time/compiler_config.hpp"
+#include "boost/date_time/special_defs.hpp"
+
+namespace boost {
+namespace date_time {
+
+ //! An unadjusted time system implementation.
+#if (defined(BOOST_DATE_TIME_NO_MEMBER_INIT))
+ template<typename config, boost::int32_t ticks_per_second>
+#else
+ template<typename config>
+#endif
+ class split_timedate_system
+ {
+ public:
+ typedef typename config::time_rep_type time_rep_type;
+ typedef typename config::date_type date_type;
+ typedef typename config::time_duration_type time_duration_type;
+ typedef typename config::date_duration_type date_duration_type;
+ typedef typename config::int_type int_type;
+ typedef typename config::resolution_traits resolution_traits;
+
+ //86400 is number of seconds in a day...
+#if (defined(BOOST_DATE_TIME_NO_MEMBER_INIT))
+ typedef date_time::wrapping_int<int_type, INT64_C(86400) * ticks_per_second > wrap_int_type;
+#else
+ private:
+ BOOST_STATIC_CONSTANT(int_type, ticks_per_day = INT64_C(86400) * config::tick_per_second);
+ public:
+# if BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT(0X581) )
+ typedef date_time::wrapping_int< split_timedate_system::int_type, split_timedate_system::ticks_per_day> wrap_int_type;
+# else
+ typedef date_time::wrapping_int<int_type, ticks_per_day> wrap_int_type;
+#endif
+#endif
+
+ static time_rep_type get_time_rep(special_values sv)
+ {
+ switch (sv) {
+ case not_a_date_time:
+ return time_rep_type(date_type(not_a_date_time),
+ time_duration_type(not_a_date_time));
+ case pos_infin:
+ return time_rep_type(date_type(pos_infin),
+ time_duration_type(pos_infin));
+ case neg_infin:
+ return time_rep_type(date_type(neg_infin),
+ time_duration_type(neg_infin));
+ case max_date_time: {
+ time_duration_type td = time_duration_type(24,0,0,0) - time_duration_type(0,0,0,1);
+ return time_rep_type(date_type(max_date_time), td);
+ }
+ case min_date_time:
+ return time_rep_type(date_type(min_date_time), time_duration_type(0,0,0,0));
+
+ default:
+ return time_rep_type(date_type(not_a_date_time),
+ time_duration_type(not_a_date_time));
+
+ }
+
+ }
+
+ static time_rep_type get_time_rep(const date_type& day,
+ const time_duration_type& tod,
+ date_time::dst_flags dst=not_dst)
+ {
+ if(day.is_special() || tod.is_special()) {
+ if(day.is_not_a_date() || tod.is_not_a_date_time()) {
+ return time_rep_type(date_type(not_a_date_time),
+ time_duration_type(not_a_date_time));
+ }
+ else if(day.is_pos_infinity()) {
+ if(tod.is_neg_infinity()) {
+ return time_rep_type(date_type(not_a_date_time),
+ time_duration_type(not_a_date_time));
+ }
+ else {
+ return time_rep_type(day, time_duration_type(pos_infin));
+ }
+ }
+ else if(day.is_neg_infinity()) {
+ if(tod.is_pos_infinity()) {
+ return time_rep_type(date_type(not_a_date_time),
+ time_duration_type(not_a_date_time));
+ }
+ else {
+ return time_rep_type(day, time_duration_type(neg_infin));
+ }
+ }
+ else if(tod.is_pos_infinity()) {
+ if(day.is_neg_infinity()) {
+ return time_rep_type(date_type(not_a_date_time),
+ time_duration_type(not_a_date_time));
+ }
+ else {
+ return time_rep_type(date_type(pos_infin), tod);
+ }
+ }
+ else if(tod.is_neg_infinity()) {
+ if(day.is_pos_infinity()) {
+ return time_rep_type(date_type(not_a_date_time),
+ time_duration_type(not_a_date_time));
+ }
+ else {
+ return time_rep_type(date_type(neg_infin), tod);
+ }
+ }
+ }
+ return time_rep_type(day, tod);
+ }
+ static date_type get_date(const time_rep_type& val)
+ {
+ return date_type(val.day);
+ }
+ static time_duration_type get_time_of_day(const time_rep_type& val)
+ {
+ return time_duration_type(val.time_of_day);
+ }
+ static std::string zone_name(const time_rep_type&)
+ {
+ return "";
+ }
+ static bool is_equal(const time_rep_type& lhs, const time_rep_type& rhs)
+ {
+ return ((lhs.day == rhs.day) && (lhs.time_of_day == rhs.time_of_day));
+ }
+ static bool is_less(const time_rep_type& lhs, const time_rep_type& rhs)
+ {
+ if (lhs.day < rhs.day) return true;
+ if (lhs.day > rhs.day) return false;
+ return (lhs.time_of_day < rhs.time_of_day);
+ }
+ static time_rep_type add_days(const time_rep_type& base,
+ const date_duration_type& dd)
+ {
+ return time_rep_type(base.day+dd, base.time_of_day);
+ }
+ static time_rep_type subtract_days(const time_rep_type& base,
+ const date_duration_type& dd)
+ {
+ return split_timedate_system::get_time_rep(base.day-dd, base.time_of_day);
+ }
+ static time_rep_type subtract_time_duration(const time_rep_type& base,
+ const time_duration_type& td)
+ {
+ if(base.day.is_special() || td.is_special())
+ {
+ return split_timedate_system::get_time_rep(base.day, -td);
+ }
+ if (td.is_negative()) {
+ time_duration_type td1 = td.invert_sign();
+ return add_time_duration(base,td1);
+ }
+
+ //std::cout << td.ticks() << std::endl;
+ wrap_int_type day_offset(base.time_of_day.ticks());
+ date_duration_type day_overflow(static_cast<typename date_duration_type::duration_rep_type>(day_offset.subtract(td.ticks())));
+// std::cout << "sub: " << base.time_of_day.ticks() << "|"
+// << day_offset.as_int() << "|"
+// << day_overflow.days() << std::endl;
+ return time_rep_type(base.day-day_overflow,
+ time_duration_type(0,0,0,day_offset.as_int()));
+ }
+ static time_rep_type add_time_duration(const time_rep_type& base,
+ time_duration_type td)
+ {
+ if(base.day.is_special() || td.is_special()) {
+ return split_timedate_system::get_time_rep(base.day, td);
+ }
+ if (td.is_negative()) {
+ time_duration_type td1 = td.invert_sign();
+ return subtract_time_duration(base,td1);
+ }
+ wrap_int_type day_offset(base.time_of_day.ticks());
+ typename date_duration_type::duration_rep_type doff = day_offset.add(td.ticks());
+// std::cout << "day overflow: " << doff << std::endl;
+// std::cout << "ticks: " << td.ticks() << std::endl;
+ date_duration_type day_overflow(doff);
+// std::cout << "base: " << to_simple_string(base.day) << std::endl;
+// std::cout << "overflow " << day_overflow.days() << std::endl;
+ return time_rep_type(base.day+day_overflow,
+ time_duration_type(0,0,0,day_offset.as_int()));
+ }
+ static time_duration_type subtract_times(const time_rep_type& lhs,
+ const time_rep_type& rhs)
+ {
+ date_duration_type dd = lhs.day - rhs.day;
+ time_duration_type td(dd.days()*24,0,0); //days * 24 hours
+ time_duration_type td2 = lhs.time_of_day - rhs.time_of_day;
+ return td+td2;
+ // return time_rep_type(base.day-dd, base.time_of_day);
+ }
+
+ };
+
+} } //namespace date_time
+
+
+#endif
diff --git a/boost/boost/date_time/time_zone_base.hpp b/boost/boost/date_time/time_zone_base.hpp
new file mode 100644
index 00000000000..2f4f854aee5
--- /dev/null
+++ b/boost/boost/date_time/time_zone_base.hpp
@@ -0,0 +1,99 @@
+#ifndef _DATE_TIME_TIME_ZONE_BASE__
+#define _DATE_TIME_TIME_ZONE_BASE__
+
+/* Copyright (c) 2003-2005 CrystalClear Software, Inc.
+ * Subject to the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2007/02/23 15:29:16 $
+ */
+
+
+#include <string>
+#include <sstream>
+
+namespace boost {
+namespace date_time {
+
+
+
+ //! Interface class for dynamic time zones.
+ /*! This class represents the base interface for all timezone
+ * representations. Subclasses may provide different systems
+ * for identifying a particular zone. For example some may
+ * provide a geographical based zone construction while others
+ * may specify the offset from GMT. Another possible implementation
+ * would be to convert from POSIX timezone strings. Regardless of
+ * the construction technique, this is the interface that these
+ * time zone types must provide.
+ *
+ * Note that this class is intended to be used as a shared
+ * resource (hence the derivation from boost::counted_base.
+ */
+ template<typename time_type, typename CharT>
+ class time_zone_base {
+ public:
+ typedef CharT char_type;
+ typedef std::basic_string<CharT> string_type;
+ typedef std::basic_ostringstream<CharT> stringstream_type;
+ typedef typename time_type::date_type::year_type year_type;
+ typedef typename time_type::time_duration_type time_duration_type;
+
+ time_zone_base() {};
+ virtual ~time_zone_base() {};
+ //!String for the timezone when in daylight savings (eg: EDT)
+ virtual string_type dst_zone_abbrev() const=0;
+ //!String for the zone when not in daylight savings (eg: EST)
+ virtual string_type std_zone_abbrev() const=0;
+ //!String for the timezone when in daylight savings (eg: Eastern Daylight Time)
+ virtual string_type dst_zone_name() const=0;
+ //!String for the zone when not in daylight savings (eg: Eastern Standard Time)
+ virtual string_type std_zone_name() const=0;
+ //! True if zone uses daylight savings adjustments otherwise false
+ virtual bool has_dst() const=0;
+ //! Local time that DST starts -- undefined if has_dst is false
+ virtual time_type dst_local_start_time(year_type y) const=0;
+ //! Local time that DST ends -- undefined if has_dst is false
+ virtual time_type dst_local_end_time(year_type y) const=0;
+ //! Base offset from UTC for zone (eg: -07:30:00)
+ virtual time_duration_type base_utc_offset() const=0;
+ //! Adjustment forward or back made while DST is in effect
+ virtual time_duration_type dst_offset() const=0;
+ //! Returns a POSIX time_zone string for this object
+ virtual string_type to_posix_string() const =0;
+
+ private:
+
+ };
+
+
+ //! Structure which holds the time offsets associated with daylight savings time
+ /*!
+ *@param time_duration_type A type used to represent the offset
+ */
+ template<class time_duration_type>
+ class dst_adjustment_offsets
+ {
+ public:
+ dst_adjustment_offsets(const time_duration_type& dst_adjust,
+ const time_duration_type& dst_start_offset,
+ const time_duration_type& dst_end_offset) :
+ dst_adjust_(dst_adjust),
+ dst_start_offset_(dst_start_offset),
+ dst_end_offset_(dst_end_offset)
+ {}
+
+ //! Amount DST adjusts the clock eg: plus one hour
+ time_duration_type dst_adjust_;
+ //! Time past midnight on start transition day that dst starts
+ time_duration_type dst_start_offset_;
+ //! Time past midnight on end transition day that dst ends
+ time_duration_type dst_end_offset_;
+ };
+
+
+} } //namespace date_time
+
+
+
+#endif
diff --git a/boost/boost/date_time/time_zone_names.hpp b/boost/boost/date_time/time_zone_names.hpp
new file mode 100644
index 00000000000..2f7d8a3a7c8
--- /dev/null
+++ b/boost/boost/date_time/time_zone_names.hpp
@@ -0,0 +1,98 @@
+#ifndef DATE_TIME_TIME_ZONE_NAMES_HPP__
+#define DATE_TIME_TIME_ZONE_NAMES_HPP__
+
+/* Copyright (c) 2002-2003,2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland
+ * $Date: 2005/10/23 20:15:06 $
+ */
+
+#include <string>
+
+namespace boost {
+namespace date_time {
+
+ template<class CharT>
+ struct default_zone_names {
+ public:
+ typedef CharT char_type;
+ static const char_type standard_name[9];
+ static const char_type standard_abbrev[11];
+ static const char_type non_dst_identifier[7];
+ };
+ template <class CharT>
+ const typename default_zone_names<CharT>::char_type
+ default_zone_names<CharT>::standard_name[9] =
+ {'s','t','d','_','n','a','m','e'};
+
+ template <class CharT>
+ const typename default_zone_names<CharT>::char_type
+ default_zone_names<CharT>::standard_abbrev[11] =
+ {'s','t','d','_','a','b','b','r','e','v'};
+
+ template <class CharT>
+ const typename default_zone_names<CharT>::char_type
+ default_zone_names<CharT>::non_dst_identifier[7] =
+ {'n','o','-','d','s','t'};
+
+ //! Base type that holds various string names for timezone output.
+ /*! Class that holds various types of strings used for timezones.
+ * For example, for the western United States there is the full
+ * name: Pacific Standard Time and the abbreviated name: PST.
+ * During daylight savings there are additional names:
+ * Pacific Daylight Time and PDT.
+ *@parm CharT Allows class to support different character types
+ */
+ template<class CharT>
+ class time_zone_names_base
+ {
+ public:
+ typedef std::basic_string<CharT> string_type;
+ time_zone_names_base() :
+ std_zone_name_(default_zone_names<CharT>::standard_name),
+ std_zone_abbrev_(default_zone_names<CharT>::standard_abbrev),
+ dst_zone_name_(default_zone_names<CharT>::non_dst_identifier),
+ dst_zone_abbrev_(default_zone_names<CharT>::non_dst_identifier)
+ {}
+ time_zone_names_base(const string_type& std_zone_name_str,
+ const string_type& std_zone_abbrev_str,
+ const string_type& dst_zone_name_str,
+ const string_type& dst_zone_abbrev_str) :
+ std_zone_name_(std_zone_name_str),
+ std_zone_abbrev_(std_zone_abbrev_str),
+ dst_zone_name_(dst_zone_name_str),
+ dst_zone_abbrev_(dst_zone_abbrev_str)
+ {}
+ string_type dst_zone_abbrev() const
+ {
+ return dst_zone_abbrev_;
+ }
+ string_type std_zone_abbrev() const
+ {
+ return std_zone_abbrev_;
+ }
+ string_type dst_zone_name() const
+ {
+ return dst_zone_name_;
+ }
+ string_type std_zone_name() const
+ {
+ return std_zone_name_;
+ }
+ private:
+ string_type std_zone_name_;
+ string_type std_zone_abbrev_;
+ string_type dst_zone_name_;
+ string_type dst_zone_abbrev_;
+
+ };
+
+ //! Specialization of timezone names for standard char.
+ //typedef time_zone_names_base<char> time_zone_names;
+
+} } //namespace
+
+
+#endif
diff --git a/boost/boost/date_time/tz_db_base.hpp b/boost/boost/date_time/tz_db_base.hpp
new file mode 100644
index 00000000000..5031e52d5e5
--- /dev/null
+++ b/boost/boost/date_time/tz_db_base.hpp
@@ -0,0 +1,376 @@
+#ifndef DATE_TIME_TZ_DB_BASE_HPP__
+#define DATE_TIME_TZ_DB_BASE_HPP__
+
+/* Copyright (c) 2003-2005 CrystalClear Software, Inc.
+ * Subject to the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2005/10/23 20:15:06 $
+ */
+
+#include "boost/shared_ptr.hpp"
+#include "boost/date_time/time_zone_names.hpp"
+#include "boost/date_time/time_zone_base.hpp"
+#include "boost/date_time/time_parsing.hpp"
+#include "boost/tokenizer.hpp"
+#include <string>
+#include <sstream>
+#include <map>
+#include <vector>
+#include <stdexcept>
+#include <fstream>
+
+namespace boost {
+ namespace date_time {
+
+ //! Exception thrown when tz database cannot locate requested data file
+ class data_not_accessible : public std::logic_error
+ {
+ public:
+ data_not_accessible() :
+ std::logic_error(std::string("Unable to locate or access the required datafile."))
+ {}
+ data_not_accessible(const std::string& filespec) :
+ std::logic_error(std::string("Unable to locate or access the required datafile. Filespec: " + filespec))
+ {}
+ };
+
+ //! Exception thrown when tz database locates incorrect field structure in data file
+ class bad_field_count : public std::out_of_range
+ {
+ public:
+ bad_field_count(const std::string& s) :
+ std::out_of_range(s)
+ {}
+ };
+
+ //! Creates a database of time_zones from csv datafile
+ /*! The csv file containing the zone_specs used by the
+ * tz_db_base is intended to be customized by the
+ * library user. When customizing this file (or creating your own) the
+ * file must follow a specific format.
+ *
+ * This first line is expected to contain column headings and is therefore
+ * not processed by the tz_db_base.
+ *
+ * Each record (line) must have eleven fields. Some of those fields can
+ * be empty. Every field (even empty ones) must be enclosed in
+ * double-quotes.
+ * Ex:
+ * @code
+ * "America/Phoenix" <- string enclosed in quotes
+ * "" <- empty field
+ * @endcode
+ *
+ * Some fields represent a length of time. The format of these fields
+ * must be:
+ * @code
+ * "{+|-}hh:mm[:ss]" <- length-of-time format
+ * @endcode
+ * Where the plus or minus is mandatory and the seconds are optional.
+ *
+ * Since some time zones do not use daylight savings it is not always
+ * necessary for every field in a zone_spec to contain a value. All
+ * zone_specs must have at least ID and GMT offset. Zones that use
+ * daylight savings must have all fields filled except:
+ * STD ABBR, STD NAME, DST NAME. You should take note
+ * that DST ABBR is mandatory for zones that use daylight savings
+ * (see field descriptions for further details).
+ *
+ * ******* Fields and their description/details *********
+ *
+ * ID:
+ * Contains the identifying string for the zone_spec. Any string will
+ * do as long as it's unique. No two ID's can be the same.
+ *
+ * STD ABBR:
+ * STD NAME:
+ * DST ABBR:
+ * DST NAME:
+ * These four are all the names and abbreviations used by the time
+ * zone being described. While any string will do in these fields,
+ * care should be taken. These fields hold the strings that will be
+ * used in the output of many of the local_time classes.
+ * Ex:
+ * @code
+ * time_zone nyc = tz_db.time_zone_from_region("America/New_York");
+ * local_time ny_time(date(2004, Aug, 30), IS_DST, nyc);
+ * cout << ny_time.to_long_string() << endl;
+ * // 2004-Aug-30 00:00:00 Eastern Daylight Time
+ * cout << ny_time.to_short_string() << endl;
+ * // 2004-Aug-30 00:00:00 EDT
+ * @endcode
+ *
+ * NOTE: The exact format/function names may vary - see local_time
+ * documentation for further details.
+ *
+ * GMT offset:
+ * This is the number of hours added to utc to get the local time
+ * before any daylight savings adjustments are made. Some examples
+ * are: America/New_York offset -5 hours, & Africa/Cairo offset +2 hours.
+ * The format must follow the length-of-time format described above.
+ *
+ * DST adjustment:
+ * The amount of time added to gmt_offset when daylight savings is in
+ * effect. The format must follow the length-of-time format described
+ * above.
+ *
+ * DST Start Date rule:
+ * This is a specially formatted string that describes the day of year
+ * in which the transition take place. It holds three fields of it's own,
+ * separated by semicolons.
+ * The first field indicates the "nth" weekday of the month. The possible
+ * values are: 1 (first), 2 (second), 3 (third), 4 (fourth), 5 (fifth),
+ * and -1 (last).
+ * The second field indicates the day-of-week from 0-6 (Sun=0).
+ * The third field indicates the month from 1-12 (Jan=1).
+ *
+ * Examples are: "-1;5;9"="Last Friday of September",
+ * "2;1;3"="Second Monday of March"
+ *
+ * Start time:
+ * Start time is the number of hours past midnight, on the day of the
+ * start transition, the transition takes place. More simply put, the
+ * time of day the transition is made (in 24 hours format). The format
+ * must follow the length-of-time format described above with the
+ * exception that it must always be positive.
+ *
+ * DST End date rule:
+ * See DST Start date rule. The difference here is this is the day
+ * daylight savings ends (transition to STD).
+ *
+ * End time:
+ * Same as Start time.
+ */
+ template<class time_zone_type, class rule_type>
+ class tz_db_base {
+ public:
+ /* Having CharT as a template parameter created problems
+ * with posix_time::duration_from_string. Templatizing
+ * duration_from_string was not possible at this time, however,
+ * it should be possible in the future (when poor compilers get
+ * fixed or stop being used).
+ * Since this class was designed to use CharT as a parameter it
+ * is simply typedef'd here to ease converting in back to a
+ * parameter the future */
+ typedef char char_type;
+
+ typedef typename time_zone_type::base_type time_zone_base_type;
+ typedef typename time_zone_type::time_duration_type time_duration_type;
+ typedef time_zone_names_base<char_type> time_zone_names;
+ typedef dst_adjustment_offsets<time_duration_type> dst_adjustment_offsets;
+ typedef std::basic_string<char_type> string_type;
+
+ //! Constructs an empty database
+ tz_db_base() {}
+
+ //! Process csv data file, may throw exceptions
+ /*! May throw data_not_accessible, or bad_field_count exceptions */
+ void load_from_file(const std::string& pathspec)
+ {
+ string_type in_str;
+ std::string buff;
+
+ std::ifstream ifs(pathspec.c_str());
+ if(!ifs){
+ throw data_not_accessible(pathspec);
+ }
+ std::getline(ifs, buff); // first line is column headings
+
+ while( std::getline(ifs, buff)) {
+ parse_string(buff);
+ }
+ }
+
+ //! returns true if record successfully added to map
+ /*! Takes an id string in the form of "America/Phoenix", and a
+ * time_zone object for that region. The id string must be a unique
+ * name that does not already exist in the database. */
+ bool add_record(const string_type& id,
+ boost::shared_ptr<time_zone_base_type> tz)
+ {
+ typename map_type::value_type p(id, tz);
+ return (m_zone_map.insert(p)).second;
+ }
+
+ //! Returns a time_zone object built from the specs for the given region
+ /*! Returns a time_zone object built from the specs for the given
+ * region. If region does not exist a local_time::record_not_found
+ * exception will be thrown */
+ boost::shared_ptr<time_zone_base_type>
+ time_zone_from_region(const string_type& region) const
+ {
+ // get the record
+ typename map_type::const_iterator record = m_zone_map.find(region);
+ if(record == m_zone_map.end()){
+ return boost::shared_ptr<time_zone_base_type>(); //null pointer
+ }
+ return record->second;
+ }
+
+ //! Returns a vector of strings holding the time zone regions in the database
+ std::vector<std::string> region_list() const
+ {
+ typedef std::vector<std::string> vector_type;
+ vector_type regions;
+ typename map_type::const_iterator itr = m_zone_map.begin();
+ while(itr != m_zone_map.end()) {
+ regions.push_back(itr->first);
+ ++itr;
+ }
+ return regions;
+ }
+
+ private:
+ typedef std::map<string_type, boost::shared_ptr<time_zone_base_type> > map_type;
+ map_type m_zone_map;
+
+ // start and end rule are of the same type
+ typedef typename rule_type::start_rule::week_num week_num;
+
+ /* TODO: mechanisms need to be put in place to handle different
+ * types of rule specs. parse_rules() only handles nth_kday
+ * rule types. */
+
+ //! parses rule specs for transition day rules
+ rule_type* parse_rules(const string_type& sr, const string_type& er) const
+ {
+ using namespace gregorian;
+ // start and end rule are of the same type,
+ // both are included here for readability
+ typedef typename rule_type::start_rule start_rule;
+ typedef typename rule_type::end_rule end_rule;
+
+ // these are: [start|end] nth, day, month
+ int s_nth = 0, s_d = 0, s_m = 0;
+ int e_nth = 0, e_d = 0, e_m = 0;
+ split_rule_spec(s_nth, s_d, s_m, sr);
+ split_rule_spec(e_nth, e_d, e_m, er);
+
+ typename start_rule::week_num s_wn, e_wn;
+ s_wn = get_week_num(s_nth);
+ e_wn = get_week_num(e_nth);
+
+
+ return new rule_type(start_rule(s_wn, s_d, s_m),
+ end_rule(e_wn, e_d, e_m));
+ }
+ //! helper function for parse_rules()
+ week_num get_week_num(int nth) const
+ {
+ typedef typename rule_type::start_rule start_rule;
+ switch(nth){
+ case 1:
+ return start_rule::first;
+ case 2:
+ return start_rule::second;
+ case 3:
+ return start_rule::third;
+ case 4:
+ return start_rule::fourth;
+ case 5:
+ case -1:
+ return start_rule::fifth;
+ default:
+ // shouldn't get here - add error handling later
+ break;
+ }
+ return start_rule::fifth; // silence warnings
+ }
+
+ //! splits the [start|end]_date_rule string into 3 ints
+ void split_rule_spec(int& nth, int& d, int& m, string_type rule) const
+ {
+ typedef boost::char_separator<char_type, std::char_traits<char_type> > char_separator_type;
+ typedef boost::tokenizer<char_separator_type,
+ std::basic_string<char_type>::const_iterator,
+ std::basic_string<char_type> > tokenizer;
+ typedef boost::tokenizer<char_separator_type,
+ std::basic_string<char_type>::const_iterator,
+ std::basic_string<char_type> >::iterator tokenizer_iterator;
+
+ const char_type sep_char[] = { ';', '\0'};
+ char_separator_type sep(sep_char);
+ tokenizer tokens(rule, sep); // 3 fields
+
+ tokenizer_iterator tok_iter = tokens.begin();
+ nth = std::atoi(tok_iter->c_str()); ++tok_iter;
+ d = std::atoi(tok_iter->c_str()); ++tok_iter;
+ m = std::atoi(tok_iter->c_str());
+ }
+
+
+ //! Take a line from the csv, turn it into a time_zone_type.
+ /*! Take a line from the csv, turn it into a time_zone_type,
+ * and add it to the map. Zone_specs in csv file are expected to
+ * have eleven fields that describe the time zone. Returns true if
+ * zone_spec successfully added to database */
+ bool parse_string(string_type& s)
+ {
+
+ std::vector<string_type> result;
+ typedef boost::token_iterator_generator<boost::escaped_list_separator<char_type>, string_type::const_iterator, string_type >::type token_iter_type;
+
+ token_iter_type i = boost::make_token_iterator<string_type>(s.begin(), s.end(),boost::escaped_list_separator<char_type>());
+
+ token_iter_type end;
+ while (i != end) {
+ result.push_back(*i);
+ i++;
+ }
+
+ enum db_fields { ID, STDABBR, STDNAME, DSTABBR, DSTNAME, GMTOFFSET,
+ DSTADJUST, START_DATE_RULE, START_TIME, END_DATE_RULE,
+ END_TIME, FIELD_COUNT };
+
+ //take a shot at fixing gcc 4.x error
+ const unsigned int expected_fields = static_cast<unsigned int>(FIELD_COUNT);
+ if (result.size() != expected_fields) {
+ std::stringstream msg;
+ msg << "Expecting " << FIELD_COUNT << " fields, got "
+ << result.size() << " fields in line: " << s;
+ throw bad_field_count(msg.str());
+ }
+
+ // initializations
+ bool has_dst = true;
+ if(result[DSTABBR] == std::string()){
+ has_dst = false;
+ }
+
+
+ // start building components of a time_zone
+ time_zone_names names(result[STDNAME], result[STDABBR],
+ result[DSTNAME], result[DSTABBR]);
+
+ time_duration_type utc_offset =
+ str_from_delimited_time_duration<time_duration_type,char_type>(result[GMTOFFSET]);
+
+ dst_adjustment_offsets adjust(time_duration_type(0,0,0),
+ time_duration_type(0,0,0),
+ time_duration_type(0,0,0));
+
+ boost::shared_ptr<rule_type> rules;
+
+ if(has_dst){
+ adjust = dst_adjustment_offsets(
+ str_from_delimited_time_duration<time_duration_type,char_type>(result[DSTADJUST]),
+ str_from_delimited_time_duration<time_duration_type,char_type>(result[START_TIME]),
+ str_from_delimited_time_duration<time_duration_type,char_type>(result[END_TIME])
+ );
+
+ rules =
+ boost::shared_ptr<rule_type>(parse_rules(result[START_DATE_RULE],
+ result[END_DATE_RULE]));
+ }
+ string_type id(result[ID]);
+ boost::shared_ptr<time_zone_base_type> zone(new time_zone_type(names, utc_offset, adjust, rules));
+ return (add_record(id, zone));
+
+ }
+
+ };
+
+} } // namespace
+
+#endif // DATE_TIME_TZ_DB_BASE_HPP__
diff --git a/boost/boost/date_time/wrapping_int.hpp b/boost/boost/date_time/wrapping_int.hpp
new file mode 100644
index 00000000000..514281ba9a0
--- /dev/null
+++ b/boost/boost/date_time/wrapping_int.hpp
@@ -0,0 +1,163 @@
+#ifndef _DATE_TIME_WRAPPING_INT_HPP__
+#define _DATE_TIME_WRAPPING_INT_HPP__
+
+/* Copyright (c) 2002,2003,2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland, Bart Garst
+ * $Date: 2005/10/25 12:42:20 $
+ */
+
+
+namespace boost {
+namespace date_time {
+
+//! A wrapping integer used to support time durations (WARNING: only instantiate with a signed type)
+/*! In composite date and time types this type is used to
+ * wrap at the day boundary.
+ * Ex:
+ * A wrapping_int<short, 10> will roll over after nine, and
+ * roll under below zero. This gives a range of [0,9]
+ *
+ * NOTE: it is strongly recommended that wrapping_int2 be used
+ * instead of wrapping_int as wrapping_int is to be depricated
+ * at some point soon.
+ *
+ * Also Note that warnings will occur if instantiated with an
+ * unsigned type. Only a signed type should be used!
+ */
+template<typename int_type_, int_type_ wrap_val>
+class wrapping_int {
+public:
+ typedef int_type_ int_type;
+ //typedef overflow_type_ overflow_type;
+ static int_type wrap_value() {return wrap_val;}
+ //!Add, return true if wrapped
+ wrapping_int(int_type v) : value_(v) {};
+ //! Explicit converion method
+ int_type as_int() const {return value_;}
+ operator int_type() const {return value_;}
+ //!Add, return number of wraps performed
+ /*! The sign of the returned value will indicate which direction the
+ * wraps went. Ex: add a negative number and wrapping under could occur,
+ * this would be indicated by a negative return value. If wrapping over
+ * took place, a positive value would be returned */
+ int_type add(int_type v)
+ {
+ int_type remainder = static_cast<int_type>(v % (wrap_val));
+ int_type overflow = static_cast<int_type>(v / (wrap_val));
+ value_ = static_cast<int_type>(value_ + remainder);
+ return calculate_wrap(overflow);
+ }
+ //! Subtract will return '+d' if wrapping under took place ('d' is the number of wraps)
+ /*! The sign of the returned value will indicate which direction the
+ * wraps went (positive indicates wrap under, negative indicates wrap over).
+ * Ex: subtract a negative number and wrapping over could
+ * occur, this would be indicated by a negative return value. If
+ * wrapping under took place, a positive value would be returned. */
+ int_type subtract(int_type v)
+ {
+ int_type remainder = static_cast<int_type>(v % (wrap_val));
+ int_type underflow = static_cast<int_type>(-(v / (wrap_val)));
+ value_ = static_cast<int_type>(value_ - remainder);
+ return calculate_wrap(underflow) * -1;
+ }
+private:
+ int_type value_;
+
+ int_type calculate_wrap(int_type wrap)
+ {
+ if ((value_) >= wrap_val)
+ {
+ wrap++;
+ value_ -= (wrap_val);
+ }
+ else if(value_ < 0)
+ {
+ wrap--;
+ value_ += (wrap_val);
+ }
+ return wrap;
+ }
+
+};
+
+
+//! A wrapping integer used to wrap around at the top (WARNING: only instantiate with a signed type)
+/*! Bad name, quick impl to fix a bug -- fix later!!
+ * This allows the wrap to restart at a value other than 0.
+ */
+template<typename int_type_, int_type_ wrap_min, int_type_ wrap_max>
+class wrapping_int2 {
+public:
+ typedef int_type_ int_type;
+ static int_type wrap_value() {return wrap_max;}
+ static int_type min_value() {return wrap_min;}
+ /*! If initializing value is out of range of [wrap_min, wrap_max],
+ * value will be initialized to closest of min or max */
+ wrapping_int2(int_type v) : value_(v) {
+ if(value_ < wrap_min)
+ {
+ value_ = wrap_min;
+ }
+ if(value_ > wrap_max)
+ {
+ value_ = wrap_max;
+ }
+ }
+ //! Explicit converion method
+ int_type as_int() const {return value_;}
+ operator int_type() const {return value_;}
+ //!Add, return number of wraps performed
+ /*! The sign of the returned value will indicate which direction the
+ * wraps went. Ex: add a negative number and wrapping under could occur,
+ * this would be indicated by a negative return value. If wrapping over
+ * took place, a positive value would be returned */
+ int_type add(int_type v)
+ {
+ int_type remainder = static_cast<int_type>(v % (wrap_max - wrap_min + 1));
+ int_type overflow = static_cast<int_type>(v / (wrap_max - wrap_min + 1));
+ value_ = static_cast<int_type>(value_ + remainder);
+ return calculate_wrap(overflow);
+ }
+ //! Subtract will return '-d' if wrapping under took place ('d' is the number of wraps)
+ /*! The sign of the returned value will indicate which direction the
+ * wraps went. Ex: subtract a negative number and wrapping over could
+ * occur, this would be indicated by a positive return value. If
+ * wrapping under took place, a negative value would be returned */
+ int_type subtract(int_type v)
+ {
+ int_type remainder = static_cast<int_type>(v % (wrap_max - wrap_min + 1));
+ int_type underflow = static_cast<int_type>(-(v / (wrap_max - wrap_min + 1)));
+ value_ = static_cast<int_type>(value_ - remainder);
+ return calculate_wrap(underflow);
+ }
+
+private:
+ int_type value_;
+
+ int_type calculate_wrap(int_type wrap)
+ {
+ if ((value_) > wrap_max)
+ {
+ wrap++;
+ value_ -= (wrap_max - wrap_min + 1);
+ }
+ else if((value_) < wrap_min)
+ {
+ wrap--;
+ value_ += (wrap_max - wrap_min + 1);
+ }
+ return wrap;
+ }
+};
+
+
+
+} } //namespace date_time
+
+
+
+#endif
+
diff --git a/boost/boost/date_time/year_month_day.hpp b/boost/boost/date_time/year_month_day.hpp
new file mode 100644
index 00000000000..10c654236f9
--- /dev/null
+++ b/boost/boost/date_time/year_month_day.hpp
@@ -0,0 +1,45 @@
+#ifndef YearMonthDayBase_HPP__
+#define YearMonthDayBase_HPP__
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
+ * Author: Jeff Garland
+ * $Date: 2003/11/23 03:31:27 $
+ */
+
+namespace boost {
+namespace date_time {
+
+ //! Allow rapid creation of ymd triples of different types
+ template<typename YearType, typename MonthType, typename DayType>
+ struct year_month_day_base {
+ year_month_day_base(YearType year,
+ MonthType month,
+ DayType day);
+ YearType year;
+ MonthType month;
+ DayType day;
+ typedef YearType year_type;
+ typedef MonthType month_type;
+ typedef DayType day_type;
+ };
+
+
+ //! A basic constructor
+ template<typename YearType, typename MonthType, typename DayType>
+ inline
+ year_month_day_base<YearType,MonthType,DayType>::year_month_day_base(YearType y,
+ MonthType m,
+ DayType d) :
+ year(y),
+ month(m),
+ day(d)
+ {}
+
+} }//namespace date_time
+
+
+#endif
+
diff --git a/boost/boost/detail/algorithm.hpp b/boost/boost/detail/algorithm.hpp
new file mode 100644
index 00000000000..376baeddac9
--- /dev/null
+++ b/boost/boost/detail/algorithm.hpp
@@ -0,0 +1,236 @@
+// (C) Copyright Jeremy Siek 2001.
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+/*
+ *
+ * Copyright (c) 1994
+ * Hewlett-Packard Company
+ *
+ * Permission to use, copy, modify, distribute and sell this software
+ * and its documentation for any purpose is hereby granted without fee,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear
+ * in supporting documentation. Hewlett-Packard Company makes no
+ * representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ *
+ * Copyright (c) 1996
+ * Silicon Graphics Computer Systems, Inc.
+ *
+ * Permission to use, copy, modify, distribute and sell this software
+ * and its documentation for any purpose is hereby granted without fee,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear
+ * in supporting documentation. Silicon Graphics makes no
+ * representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ */
+
+#ifndef BOOST_ALGORITHM_HPP
+# define BOOST_ALGORITHM_HPP
+# include <boost/detail/iterator.hpp>
+// Algorithms on sequences
+//
+// The functions in this file have not yet gone through formal
+// review, and are subject to change. This is a work in progress.
+// They have been checked into the detail directory because
+// there are some graph algorithms that use these functions.
+
+#include <algorithm>
+#include <vector>
+
+namespace boost {
+
+ template <typename Iter1, typename Iter2>
+ Iter1 begin(const std::pair<Iter1, Iter2>& p) { return p.first; }
+
+ template <typename Iter1, typename Iter2>
+ Iter2 end(const std::pair<Iter1, Iter2>& p) { return p.second; }
+
+ template <typename Iter1, typename Iter2>
+ typename boost::detail::iterator_traits<Iter1>::difference_type
+ size(const std::pair<Iter1, Iter2>& p) {
+ return std::distance(p.first, p.second);
+ }
+
+#if 0
+ // These seem to interfere with the std::pair overloads :(
+ template <typename Container>
+ typename Container::iterator
+ begin(Container& c) { return c.begin(); }
+
+ template <typename Container>
+ typename Container::const_iterator
+ begin(const Container& c) { return c.begin(); }
+
+ template <typename Container>
+ typename Container::iterator
+ end(Container& c) { return c.end(); }
+
+ template <typename Container>
+ typename Container::const_iterator
+ end(const Container& c) { return c.end(); }
+
+ template <typename Container>
+ typename Container::size_type
+ size(const Container& c) { return c.size(); }
+#else
+ template <typename T>
+ typename std::vector<T>::iterator
+ begin(std::vector<T>& c) { return c.begin(); }
+
+ template <typename T>
+ typename std::vector<T>::const_iterator
+ begin(const std::vector<T>& c) { return c.begin(); }
+
+ template <typename T>
+ typename std::vector<T>::iterator
+ end(std::vector<T>& c) { return c.end(); }
+
+ template <typename T>
+ typename std::vector<T>::const_iterator
+ end(const std::vector<T>& c) { return c.end(); }
+
+ template <typename T>
+ typename std::vector<T>::size_type
+ size(const std::vector<T>& c) { return c.size(); }
+#endif
+
+ template <class ForwardIterator, class T>
+ void iota(ForwardIterator first, ForwardIterator last, T value)
+ {
+ for (; first != last; ++first, ++value)
+ *first = value;
+ }
+ template <typename Container, typename T>
+ void iota(Container& c, const T& value)
+ {
+ iota(begin(c), end(c), value);
+ }
+
+ // Also do version with 2nd container?
+ template <typename Container, typename OutIter>
+ OutIter copy(const Container& c, OutIter result) {
+ return std::copy(begin(c), end(c), result);
+ }
+
+ template <typename Container1, typename Container2>
+ bool equal(const Container1& c1, const Container2& c2)
+ {
+ if (size(c1) != size(c2))
+ return false;
+ return std::equal(begin(c1), end(c1), begin(c2));
+ }
+
+ template <typename Container>
+ void sort(Container& c) { std::sort(begin(c), end(c)); }
+
+ template <typename Container, typename Predicate>
+ void sort(Container& c, const Predicate& p) {
+ std::sort(begin(c), end(c), p);
+ }
+
+ template <typename Container>
+ void stable_sort(Container& c) { std::stable_sort(begin(c), end(c)); }
+
+ template <typename Container, typename Predicate>
+ void stable_sort(Container& c, const Predicate& p) {
+ std::stable_sort(begin(c), end(c), p);
+ }
+
+ template <typename InputIterator, typename Predicate>
+ bool any_if(InputIterator first, InputIterator last, Predicate p)
+ {
+ return std::find_if(first, last, p) != last;
+ }
+ template <typename Container, typename Predicate>
+ bool any_if(const Container& c, Predicate p)
+ {
+ return any_if(begin(c), end(c), p);
+ }
+
+ template <typename InputIterator, typename T>
+ bool contains(InputIterator first, InputIterator last, T value)
+ {
+ return std::find(first, last, value) != last;
+ }
+ template <typename Container, typename T>
+ bool contains(const Container& c, const T& value)
+ {
+ return contains(begin(c), end(c), value);
+ }
+
+ template <typename InputIterator, typename Predicate>
+ bool all(InputIterator first, InputIterator last, Predicate p)
+ {
+ for (; first != last; ++first)
+ if (!p(*first))
+ return false;
+ return true;
+ }
+ template <typename Container, typename Predicate>
+ bool all(const Container& c, Predicate p)
+ {
+ return all(begin(c), end(c), p);
+ }
+
+ template <typename Container, typename T>
+ std::size_t count(const Container& c, const T& value)
+ {
+ return std::count(begin(c), end(c), value);
+ }
+
+ template <typename Container, typename Predicate>
+ std::size_t count_if(const Container& c, Predicate p)
+ {
+ return std::count_if(begin(c), end(c), p);
+ }
+
+ template <typename ForwardIterator>
+ bool is_sorted(ForwardIterator first, ForwardIterator last)
+ {
+ if (first == last)
+ return true;
+
+ ForwardIterator next = first;
+ for (++next; next != last; first = next, ++next) {
+ if (*next < *first)
+ return false;
+ }
+
+ return true;
+ }
+
+ template <typename ForwardIterator, typename StrictWeakOrdering>
+ bool is_sorted(ForwardIterator first, ForwardIterator last,
+ StrictWeakOrdering comp)
+ {
+ if (first == last)
+ return true;
+
+ ForwardIterator next = first;
+ for (++next; next != last; first = next, ++next) {
+ if (comp(*next, *first))
+ return false;
+ }
+
+ return true;
+ }
+
+ template <typename Container>
+ bool is_sorted(const Container& c)
+ {
+ return is_sorted(begin(c), end(c));
+ }
+
+ template <typename Container, typename StrictWeakOrdering>
+ bool is_sorted(const Container& c, StrictWeakOrdering comp)
+ {
+ return is_sorted(begin(c), end(c), comp);
+ }
+
+} // namespace boost
+
+#endif // BOOST_ALGORITHM_HPP
diff --git a/boost/boost/detail/allocator_utilities.hpp b/boost/boost/detail/allocator_utilities.hpp
new file mode 100644
index 00000000000..69290878f64
--- /dev/null
+++ b/boost/boost/detail/allocator_utilities.hpp
@@ -0,0 +1,185 @@
+/* Copyright 2003-2005 Joaquín M López Muñoz.
+ * 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 Boost website at http://www.boost.org/
+ */
+
+#ifndef BOOST_DETAIL_ALLOCATOR_UTILITIES_HPP
+#define BOOST_DETAIL_ALLOCATOR_UTILITIES_HPP
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/detail/workaround.hpp>
+#include <boost/mpl/aux_/msvc_never_true.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <cstddef>
+#include <memory>
+#include <new>
+
+namespace boost{
+
+namespace detail{
+
+/* Allocator adaption layer. Some stdlibs provide allocators without rebind
+ * and template ctors. These facilities are simulated with the external
+ * template class rebind_to and the aid of partial_std_allocator_wrapper.
+ */
+
+namespace allocator{
+
+/* partial_std_allocator_wrapper inherits the functionality of a std
+ * allocator while providing a templatized ctor.
+ */
+
+template<typename Type>
+class partial_std_allocator_wrapper:public std::allocator<Type>
+{
+public:
+ partial_std_allocator_wrapper(){};
+
+ template<typename Other>
+ partial_std_allocator_wrapper(const partial_std_allocator_wrapper<Other>&){}
+
+ partial_std_allocator_wrapper(const std::allocator<Type>& x):
+ std::allocator<Type>(x)
+ {
+ };
+
+#if defined(BOOST_DINKUMWARE_STDLIB)
+ /* Dinkumware guys didn't provide a means to call allocate() without
+ * supplying a hint, in disagreement with the standard.
+ */
+
+ Type* allocate(std::size_t n,const void* hint=0)
+ {
+ std::allocator<Type>& a=*this;
+ return a.allocate(n,hint);
+ }
+#endif
+
+};
+
+/* Detects whether a given allocator belongs to a defective stdlib not
+ * having the required member templates.
+ * Note that it does not suffice to check the Boost.Config stdlib
+ * macros, as the user might have passed a custom, compliant allocator.
+ * The checks also considers partial_std_allocator_wrapper to be
+ * a standard defective allocator.
+ */
+
+#if defined(BOOST_NO_STD_ALLOCATOR)&&\
+ (defined(BOOST_HAS_PARTIAL_STD_ALLOCATOR)||defined(BOOST_DINKUMWARE_STDLIB))
+
+template<typename Allocator>
+struct is_partial_std_allocator
+{
+ BOOST_STATIC_CONSTANT(bool,
+ value=
+ (is_same<
+ std::allocator<BOOST_DEDUCED_TYPENAME Allocator::value_type>,
+ Allocator
+ >::value)||
+ (is_same<
+ partial_std_allocator_wrapper<
+ BOOST_DEDUCED_TYPENAME Allocator::value_type>,
+ Allocator
+ >::value));
+};
+
+#else
+
+template<typename Allocator>
+struct is_partial_std_allocator
+{
+ BOOST_STATIC_CONSTANT(bool,value=false);
+};
+
+#endif
+
+/* rebind operations for defective std allocators */
+
+template<typename Allocator,typename Type>
+struct partial_std_allocator_rebind_to
+{
+ typedef partial_std_allocator_wrapper<Type> type;
+};
+
+/* rebind operation in all other cases */
+
+#if BOOST_WORKAROUND(BOOST_MSVC,<1300)
+/* Workaround for a problem in MSVC with dependent template typedefs
+ * when doing rebinding of allocators.
+ * Modeled after <boost/mpl/aux_/msvc_dtw.hpp> (thanks, Aleksey!)
+ */
+
+template<typename Allocator>
+struct rebinder
+{
+ template<bool> struct fake_allocator:Allocator{};
+ template<> struct fake_allocator<true>
+ {
+ template<typename Type> struct rebind{};
+ };
+
+ template<typename Type>
+ struct result:
+ fake_allocator<mpl::aux::msvc_never_true<Allocator>::value>::
+ template rebind<Type>
+ {
+ };
+};
+#else
+template<typename Allocator>
+struct rebinder
+{
+ template<typename Type>
+ struct result
+ {
+ typedef typename Allocator::BOOST_NESTED_TEMPLATE
+ rebind<Type>::other other;
+ };
+};
+#endif
+
+template<typename Allocator,typename Type>
+struct compliant_allocator_rebind_to
+{
+ typedef typename rebinder<Allocator>::
+ BOOST_NESTED_TEMPLATE result<Type>::other type;
+};
+
+/* rebind front-end */
+
+template<typename Allocator,typename Type>
+struct rebind_to:
+ mpl::eval_if_c<
+ is_partial_std_allocator<Allocator>::value,
+ partial_std_allocator_rebind_to<Allocator,Type>,
+ compliant_allocator_rebind_to<Allocator,Type>
+ >
+{
+};
+
+/* allocator-independent versions of construct and destroy */
+
+template<typename Type>
+void construct(void* p,const Type& t)
+{
+ new (p) Type(t);
+}
+
+template<typename Type>
+void destroy(const Type* p)
+{
+ p->~Type();
+}
+
+} /* namespace boost::detail::allocator */
+
+} /* namespace boost::detail */
+
+} /* namespace boost */
+
+#endif
diff --git a/boost/boost/detail/atomic_count.hpp b/boost/boost/detail/atomic_count.hpp
new file mode 100644
index 00000000000..9985b2cede5
--- /dev/null
+++ b/boost/boost/detail/atomic_count.hpp
@@ -0,0 +1,108 @@
+#ifndef BOOST_DETAIL_ATOMIC_COUNT_HPP_INCLUDED
+#define BOOST_DETAIL_ATOMIC_COUNT_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+// boost/detail/atomic_count.hpp - thread/SMP safe reference counter
+//
+// Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd.
+//
+// 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)
+//
+// typedef <implementation-defined> boost::detail::atomic_count;
+//
+// atomic_count a(n);
+//
+// (n is convertible to long)
+//
+// Effects: Constructs an atomic_count with an initial value of n
+//
+// a;
+//
+// Returns: (long) the current value of a
+//
+// ++a;
+//
+// Effects: Atomically increments the value of a
+// Returns: nothing
+//
+// --a;
+//
+// Effects: Atomically decrements the value of a
+// Returns: (long) zero if the new value of a is zero,
+// unspecified non-zero value otherwise (usually the new value)
+//
+// Important note: when --a returns zero, it must act as a
+// read memory barrier (RMB); i.e. the calling thread must
+// have a synchronized view of the memory
+//
+// On Intel IA-32 (x86) memory is always synchronized, so this
+// is not a problem.
+//
+// On many architectures the atomic instructions already act as
+// a memory barrier.
+//
+// This property is necessary for proper reference counting, since
+// a thread can update the contents of a shared object, then
+// release its reference, and another thread may immediately
+// release the last reference causing object destruction.
+//
+// The destructor needs to have a synchronized view of the
+// object to perform proper cleanup.
+//
+// Original example by Alexander Terekhov:
+//
+// Given:
+//
+// - a mutable shared object OBJ;
+// - two threads THREAD1 and THREAD2 each holding
+// a private smart_ptr object pointing to that OBJ.
+//
+// t1: THREAD1 updates OBJ (thread-safe via some synchronization)
+// and a few cycles later (after "unlock") destroys smart_ptr;
+//
+// t2: THREAD2 destroys smart_ptr WITHOUT doing any synchronization
+// with respect to shared mutable object OBJ; OBJ destructors
+// are called driven by smart_ptr interface...
+//
+
+#include <boost/config.hpp>
+
+#ifndef BOOST_HAS_THREADS
+
+namespace boost
+{
+
+namespace detail
+{
+
+typedef long atomic_count;
+
+}
+
+}
+
+#elif defined(BOOST_AC_USE_PTHREADS)
+# include <boost/detail/atomic_count_pthreads.hpp>
+#elif defined(WIN32) || defined(_WIN32) || defined(__WIN32__)
+# include <boost/detail/atomic_count_win32.hpp>
+#elif defined(__GLIBCPP__) || defined(__GLIBCXX__)
+# include <boost/detail/atomic_count_gcc.hpp>
+#elif defined(BOOST_HAS_PTHREADS)
+# define BOOST_AC_USE_PTHREADS
+# include <boost/detail/atomic_count_pthreads.hpp>
+#else
+
+// Use #define BOOST_DISABLE_THREADS to avoid the error
+#error Unrecognized threading platform
+
+#endif
+
+#endif // #ifndef BOOST_DETAIL_ATOMIC_COUNT_HPP_INCLUDED
diff --git a/boost/boost/detail/atomic_count_gcc.hpp b/boost/boost/detail/atomic_count_gcc.hpp
new file mode 100644
index 00000000000..9a1820d0de0
--- /dev/null
+++ b/boost/boost/detail/atomic_count_gcc.hpp
@@ -0,0 +1,72 @@
+#ifndef BOOST_DETAIL_ATOMIC_COUNT_GCC_HPP_INCLUDED
+#define BOOST_DETAIL_ATOMIC_COUNT_GCC_HPP_INCLUDED
+
+//
+// boost/detail/atomic_count_gcc.hpp
+//
+// atomic_count for GNU libstdc++ v3
+//
+// http://gcc.gnu.org/onlinedocs/porting/Thread-safety.html
+//
+// Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd.
+// Copyright (c) 2002 Lars Gullik Bjønnes <larsbj@lyx.org>
+// Copyright 2003-2005 Peter Dimov
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 2))
+# include <ext/atomicity.h>
+#else
+# include <bits/atomicity.h>
+#endif
+
+namespace boost
+{
+
+namespace detail
+{
+
+#if defined(__GLIBCXX__) // g++ 3.4+
+
+using __gnu_cxx::__atomic_add;
+using __gnu_cxx::__exchange_and_add;
+
+#endif
+
+class atomic_count
+{
+public:
+
+ explicit atomic_count(long v) : value_(v) {}
+
+ void operator++()
+ {
+ __atomic_add(&value_, 1);
+ }
+
+ long operator--()
+ {
+ return __exchange_and_add(&value_, -1) - 1;
+ }
+
+ operator long() const
+ {
+ return __exchange_and_add(&value_, 0);
+ }
+
+private:
+
+ atomic_count(atomic_count const &);
+ atomic_count & operator=(atomic_count const &);
+
+ mutable _Atomic_word value_;
+};
+
+} // namespace detail
+
+} // namespace boost
+
+#endif // #ifndef BOOST_DETAIL_ATOMIC_COUNT_GCC_HPP_INCLUDED
diff --git a/boost/boost/detail/atomic_count_pthreads.hpp b/boost/boost/detail/atomic_count_pthreads.hpp
new file mode 100644
index 00000000000..7ed055f7d69
--- /dev/null
+++ b/boost/boost/detail/atomic_count_pthreads.hpp
@@ -0,0 +1,96 @@
+#ifndef BOOST_DETAIL_ATOMIC_COUNT_PTHREADS_HPP_INCLUDED
+#define BOOST_DETAIL_ATOMIC_COUNT_PTHREADS_HPP_INCLUDED
+
+//
+// boost/detail/atomic_count_pthreads.hpp
+//
+// Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd.
+//
+// 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)
+//
+
+#include <pthread.h>
+
+//
+// The generic pthread_mutex-based implementation sometimes leads to
+// inefficiencies. Example: a class with two atomic_count members
+// can get away with a single mutex.
+//
+// Users can detect this situation by checking BOOST_AC_USE_PTHREADS.
+//
+
+namespace boost
+{
+
+namespace detail
+{
+
+class atomic_count
+{
+private:
+
+ class scoped_lock
+ {
+ public:
+
+ scoped_lock(pthread_mutex_t & m): m_(m)
+ {
+ pthread_mutex_lock(&m_);
+ }
+
+ ~scoped_lock()
+ {
+ pthread_mutex_unlock(&m_);
+ }
+
+ private:
+
+ pthread_mutex_t & m_;
+ };
+
+public:
+
+ explicit atomic_count(long v): value_(v)
+ {
+ pthread_mutex_init(&mutex_, 0);
+ }
+
+ ~atomic_count()
+ {
+ pthread_mutex_destroy(&mutex_);
+ }
+
+ void operator++()
+ {
+ scoped_lock lock(mutex_);
+ ++value_;
+ }
+
+ long operator--()
+ {
+ scoped_lock lock(mutex_);
+ return --value_;
+ }
+
+ operator long() const
+ {
+ scoped_lock lock(mutex_);
+ return value_;
+ }
+
+private:
+
+ atomic_count(atomic_count const &);
+ atomic_count & operator=(atomic_count const &);
+
+ mutable pthread_mutex_t mutex_;
+ long value_;
+};
+
+} // namespace detail
+
+} // namespace boost
+
+#endif // #ifndef BOOST_DETAIL_ATOMIC_COUNT_PTHREADS_HPP_INCLUDED
diff --git a/boost/boost/detail/atomic_count_win32.hpp b/boost/boost/detail/atomic_count_win32.hpp
new file mode 100644
index 00000000000..0de25377fa5
--- /dev/null
+++ b/boost/boost/detail/atomic_count_win32.hpp
@@ -0,0 +1,63 @@
+#ifndef BOOST_DETAIL_ATOMIC_COUNT_WIN32_HPP_INCLUDED
+#define BOOST_DETAIL_ATOMIC_COUNT_WIN32_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+// boost/detail/atomic_count_win32.hpp
+//
+// Copyright (c) 2001-2005 Peter Dimov
+//
+// 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)
+//
+
+#include <boost/detail/interlocked.hpp>
+
+namespace boost
+{
+
+namespace detail
+{
+
+class atomic_count
+{
+public:
+
+ explicit atomic_count( long v ): value_( v )
+ {
+ }
+
+ long operator++()
+ {
+ return BOOST_INTERLOCKED_INCREMENT( &value_ );
+ }
+
+ long operator--()
+ {
+ return BOOST_INTERLOCKED_DECREMENT( &value_ );
+ }
+
+ operator long() const
+ {
+ return static_cast<long const volatile &>( value_ );
+ }
+
+private:
+
+ atomic_count( atomic_count const & );
+ atomic_count & operator=( atomic_count const & );
+
+ long value_;
+};
+
+} // namespace detail
+
+} // namespace boost
+
+#endif // #ifndef BOOST_DETAIL_ATOMIC_COUNT_WIN32_HPP_INCLUDED
diff --git a/boost/boost/detail/bad_weak_ptr.hpp b/boost/boost/detail/bad_weak_ptr.hpp
new file mode 100644
index 00000000000..93ecec9b69e
--- /dev/null
+++ b/boost/boost/detail/bad_weak_ptr.hpp
@@ -0,0 +1,59 @@
+#ifndef BOOST_BAD_WEAK_PTR_HPP_INCLUDED
+#define BOOST_BAD_WEAK_PTR_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+// detail/bad_weak_ptr.hpp
+//
+// Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.
+//
+// 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)
+//
+
+#include <exception>
+
+#ifdef __BORLANDC__
+# pragma warn -8026 // Functions with excep. spec. are not expanded inline
+#endif
+
+namespace boost
+{
+
+// The standard library that comes with Borland C++ 5.5.1, 5.6.4
+// defines std::exception and its members as having C calling
+// convention (-pc). When the definition of bad_weak_ptr
+// is compiled with -ps, the compiler issues an error.
+// Hence, the temporary #pragma option -pc below.
+
+#if defined(__BORLANDC__) && __BORLANDC__ <= 0x564
+# pragma option push -pc
+#endif
+
+class bad_weak_ptr: public std::exception
+{
+public:
+
+ virtual char const * what() const throw()
+ {
+ return "tr1::bad_weak_ptr";
+ }
+};
+
+#if defined(__BORLANDC__) && __BORLANDC__ <= 0x564
+# pragma option pop
+#endif
+
+} // namespace boost
+
+#ifdef __BORLANDC__
+# pragma warn .8026 // Functions with excep. spec. are not expanded inline
+#endif
+
+#endif // #ifndef BOOST_BAD_WEAK_PTR_HPP_INCLUDED
diff --git a/boost/boost/detail/binary_search.hpp b/boost/boost/detail/binary_search.hpp
new file mode 100644
index 00000000000..3dca9b65092
--- /dev/null
+++ b/boost/boost/detail/binary_search.hpp
@@ -0,0 +1,216 @@
+// Copyright (c) 2000 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)
+//
+// Copyright (c) 1994
+// Hewlett-Packard Company
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without fee,
+// provided that the above copyright notice appear in all copies and
+// that both that copyright notice and this permission notice appear
+// in supporting documentation. Hewlett-Packard Company makes no
+// representations about the suitability of this software for any
+// purpose. It is provided "as is" without express or implied warranty.
+//
+// Copyright (c) 1996
+// Silicon Graphics Computer Systems, Inc.
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without fee,
+// provided that the above copyright notice appear in all copies and
+// that both that copyright notice and this permission notice appear
+// in supporting documentation. Silicon Graphics makes no
+// representations about the suitability of this software for any
+// purpose. It is provided "as is" without express or implied warranty.
+//
+#ifndef BINARY_SEARCH_DWA_122600_H_
+# define BINARY_SEARCH_DWA_122600_H_
+
+# include <boost/detail/iterator.hpp>
+# include <utility>
+
+namespace boost { namespace detail {
+
+template <class ForwardIter, class Tp>
+ForwardIter lower_bound(ForwardIter first, ForwardIter last,
+ const Tp& val)
+{
+ typedef detail::iterator_traits<ForwardIter> traits;
+
+ typename traits::difference_type len = boost::detail::distance(first, last);
+ typename traits::difference_type half;
+ ForwardIter middle;
+
+ while (len > 0) {
+ half = len >> 1;
+ middle = first;
+ std::advance(middle, half);
+ if (*middle < val) {
+ first = middle;
+ ++first;
+ len = len - half - 1;
+ }
+ else
+ len = half;
+ }
+ return first;
+}
+
+template <class ForwardIter, class Tp, class Compare>
+ForwardIter lower_bound(ForwardIter first, ForwardIter last,
+ const Tp& val, Compare comp)
+{
+ typedef detail::iterator_traits<ForwardIter> traits;
+
+ typename traits::difference_type len = boost::detail::distance(first, last);
+ typename traits::difference_type half;
+ ForwardIter middle;
+
+ while (len > 0) {
+ half = len >> 1;
+ middle = first;
+ std::advance(middle, half);
+ if (comp(*middle, val)) {
+ first = middle;
+ ++first;
+ len = len - half - 1;
+ }
+ else
+ len = half;
+ }
+ return first;
+}
+
+template <class ForwardIter, class Tp>
+ForwardIter upper_bound(ForwardIter first, ForwardIter last,
+ const Tp& val)
+{
+ typedef detail::iterator_traits<ForwardIter> traits;
+
+ typename traits::difference_type len = boost::detail::distance(first, last);
+ typename traits::difference_type half;
+ ForwardIter middle;
+
+ while (len > 0) {
+ half = len >> 1;
+ middle = first;
+ std::advance(middle, half);
+ if (val < *middle)
+ len = half;
+ else {
+ first = middle;
+ ++first;
+ len = len - half - 1;
+ }
+ }
+ return first;
+}
+
+template <class ForwardIter, class Tp, class Compare>
+ForwardIter upper_bound(ForwardIter first, ForwardIter last,
+ const Tp& val, Compare comp)
+{
+ typedef detail::iterator_traits<ForwardIter> traits;
+
+ typename traits::difference_type len = boost::detail::distance(first, last);
+ typename traits::difference_type half;
+ ForwardIter middle;
+
+ while (len > 0) {
+ half = len >> 1;
+ middle = first;
+ std::advance(middle, half);
+ if (comp(val, *middle))
+ len = half;
+ else {
+ first = middle;
+ ++first;
+ len = len - half - 1;
+ }
+ }
+ return first;
+}
+
+template <class ForwardIter, class Tp>
+std::pair<ForwardIter, ForwardIter>
+equal_range(ForwardIter first, ForwardIter last, const Tp& val)
+{
+ typedef detail::iterator_traits<ForwardIter> traits;
+
+ typename traits::difference_type len = boost::detail::distance(first, last);
+ typename traits::difference_type half;
+ ForwardIter middle, left, right;
+
+ while (len > 0) {
+ half = len >> 1;
+ middle = first;
+ std::advance(middle, half);
+ if (*middle < val) {
+ first = middle;
+ ++first;
+ len = len - half - 1;
+ }
+ else if (val < *middle)
+ len = half;
+ else {
+ left = boost::detail::lower_bound(first, middle, val);
+ std::advance(first, len);
+ right = boost::detail::upper_bound(++middle, first, val);
+ return std::pair<ForwardIter, ForwardIter>(left, right);
+ }
+ }
+ return std::pair<ForwardIter, ForwardIter>(first, first);
+}
+
+template <class ForwardIter, class Tp, class Compare>
+std::pair<ForwardIter, ForwardIter>
+equal_range(ForwardIter first, ForwardIter last, const Tp& val,
+ Compare comp)
+{
+ typedef detail::iterator_traits<ForwardIter> traits;
+
+ typename traits::difference_type len = boost::detail::distance(first, last);
+ typename traits::difference_type half;
+ ForwardIter middle, left, right;
+
+ while (len > 0) {
+ half = len >> 1;
+ middle = first;
+ std::advance(middle, half);
+ if (comp(*middle, val)) {
+ first = middle;
+ ++first;
+ len = len - half - 1;
+ }
+ else if (comp(val, *middle))
+ len = half;
+ else {
+ left = boost::detail::lower_bound(first, middle, val, comp);
+ std::advance(first, len);
+ right = boost::detail::upper_bound(++middle, first, val, comp);
+ return std::pair<ForwardIter, ForwardIter>(left, right);
+ }
+ }
+ return std::pair<ForwardIter, ForwardIter>(first, first);
+}
+
+template <class ForwardIter, class Tp>
+bool binary_search(ForwardIter first, ForwardIter last,
+ const Tp& val) {
+ ForwardIter i = boost::detail::lower_bound(first, last, val);
+ return i != last && !(val < *i);
+}
+
+template <class ForwardIter, class Tp, class Compare>
+bool binary_search(ForwardIter first, ForwardIter last,
+ const Tp& val,
+ Compare comp) {
+ ForwardIter i = boost::detail::lower_bound(first, last, val, comp);
+ return i != last && !comp(val, *i);
+}
+
+}} // namespace boost::detail
+
+#endif // BINARY_SEARCH_DWA_122600_H_
diff --git a/boost/boost/detail/call_traits.hpp b/boost/boost/detail/call_traits.hpp
new file mode 100644
index 00000000000..54d441c5699
--- /dev/null
+++ b/boost/boost/detail/call_traits.hpp
@@ -0,0 +1,164 @@
+// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/utility for most recent version including documentation.
+
+// call_traits: defines typedefs for function usage
+// (see libs/utility/call_traits.htm)
+
+/* Release notes:
+ 23rd July 2000:
+ Fixed array specialization. (JM)
+ Added Borland specific fixes for reference types
+ (issue raised by Steve Cleary).
+*/
+
+#ifndef BOOST_DETAIL_CALL_TRAITS_HPP
+#define BOOST_DETAIL_CALL_TRAITS_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#include <boost/config.hpp>
+#endif
+#include <cstddef>
+
+#include <boost/type_traits/is_arithmetic.hpp>
+#include <boost/type_traits/is_pointer.hpp>
+#include <boost/detail/workaround.hpp>
+
+namespace boost{
+
+namespace detail{
+
+template <typename T, bool small_>
+struct ct_imp2
+{
+ typedef const T& param_type;
+};
+
+template <typename T>
+struct ct_imp2<T, true>
+{
+ typedef const T param_type;
+};
+
+template <typename T, bool isp, bool b1>
+struct ct_imp
+{
+ typedef const T& param_type;
+};
+
+template <typename T, bool isp>
+struct ct_imp<T, isp, true>
+{
+ typedef typename ct_imp2<T, sizeof(T) <= sizeof(void*)>::param_type param_type;
+};
+
+template <typename T, bool b1>
+struct ct_imp<T, true, b1>
+{
+ typedef const T param_type;
+};
+
+}
+
+template <typename T>
+struct call_traits
+{
+public:
+ typedef T value_type;
+ typedef T& reference;
+ typedef const T& const_reference;
+ //
+ // C++ Builder workaround: we should be able to define a compile time
+ // constant and pass that as a single template parameter to ct_imp<T,bool>,
+ // however compiler bugs prevent this - instead pass three bool's to
+ // ct_imp<T,bool,bool,bool> and add an extra partial specialisation
+ // of ct_imp to handle the logic. (JM)
+ typedef typename boost::detail::ct_imp<
+ T,
+ ::boost::is_pointer<T>::value,
+ ::boost::is_arithmetic<T>::value
+ >::param_type param_type;
+};
+
+template <typename T>
+struct call_traits<T&>
+{
+ typedef T& value_type;
+ typedef T& reference;
+ typedef const T& const_reference;
+ typedef T& param_type; // hh removed const
+};
+
+#if BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT( 0x581 ) )
+// these are illegal specialisations; cv-qualifies applied to
+// references have no effect according to [8.3.2p1],
+// C++ Builder requires them though as it treats cv-qualified
+// references as distinct types...
+template <typename T>
+struct call_traits<T&const>
+{
+ typedef T& value_type;
+ typedef T& reference;
+ typedef const T& const_reference;
+ typedef T& param_type; // hh removed const
+};
+template <typename T>
+struct call_traits<T&volatile>
+{
+ typedef T& value_type;
+ typedef T& reference;
+ typedef const T& const_reference;
+ typedef T& param_type; // hh removed const
+};
+template <typename T>
+struct call_traits<T&const volatile>
+{
+ typedef T& value_type;
+ typedef T& reference;
+ typedef const T& const_reference;
+ typedef T& param_type; // hh removed const
+};
+
+template <typename T>
+struct call_traits< T * >
+{
+ typedef T * value_type;
+ typedef T * & reference;
+ typedef T * const & const_reference;
+ typedef T * const param_type; // hh removed const
+};
+#endif
+#if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)
+template <typename T, std::size_t N>
+struct call_traits<T [N]>
+{
+private:
+ typedef T array_type[N];
+public:
+ // degrades array to pointer:
+ typedef const T* value_type;
+ typedef array_type& reference;
+ typedef const array_type& const_reference;
+ typedef const T* const param_type;
+};
+
+template <typename T, std::size_t N>
+struct call_traits<const T [N]>
+{
+private:
+ typedef const T array_type[N];
+public:
+ // degrades array to pointer:
+ typedef const T* value_type;
+ typedef array_type& reference;
+ typedef const array_type& const_reference;
+ typedef const T* const param_type;
+};
+#endif
+
+}
+
+#endif // BOOST_DETAIL_CALL_TRAITS_HPP
diff --git a/boost/boost/detail/catch_exceptions.hpp b/boost/boost/detail/catch_exceptions.hpp
new file mode 100644
index 00000000000..b1a3c76b2a8
--- /dev/null
+++ b/boost/boost/detail/catch_exceptions.hpp
@@ -0,0 +1,146 @@
+// boost/catch_exceptions.hpp -----------------------------------------------//
+
+// Copyright Beman Dawes 1995-2001. 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/test for documentation.
+
+// Revision History
+// 13 Jun 01 report_exception() made inline. (John Maddock, Jesse Jones)
+// 26 Feb 01 Numerous changes suggested during formal review. (Beman)
+// 25 Jan 01 catch_exceptions.hpp code factored out of cpp_main.cpp.
+// 22 Jan 01 Remove test_tools dependencies to reduce coupling.
+// 5 Nov 00 Initial boost version (Beman Dawes)
+
+#ifndef BOOST_CATCH_EXCEPTIONS_HPP
+#define BOOST_CATCH_EXCEPTIONS_HPP
+
+// header dependencies are deliberately restricted to the standard library
+// to reduce coupling to other boost libraries.
+#include <string> // for string
+#include <new> // for bad_alloc
+#include <typeinfo> // for bad_cast, bad_typeid
+#include <exception> // for exception, bad_exception
+#include <stdexcept> // for std exception hierarchy
+#include <boost/cstdlib.hpp> // for exit codes
+# if __GNUC__ != 2 || __GNUC_MINOR__ > 96
+# include <ostream> // for ostream
+# else
+# include <iostream> // workaround GNU missing ostream header
+# endif
+
+# if defined(__BORLANDC__) && (__BORLANDC__ <= 0x0551)
+# define BOOST_BUILT_IN_EXCEPTIONS_MISSING_WHAT
+# endif
+
+#if defined(MPW_CPLUS) && (MPW_CPLUS <= 0x890)
+# define BOOST_BUILT_IN_EXCEPTIONS_MISSING_WHAT
+ namespace std { class bad_typeid { }; }
+# endif
+
+namespace boost
+{
+
+ namespace detail
+ {
+ // A separate reporting function was requested during formal review.
+ inline void report_exception( std::ostream & os,
+ const char * name, const char * info )
+ { os << "\n** uncaught exception: " << name << " " << info << std::endl; }
+ }
+
+ // catch_exceptions ------------------------------------------------------//
+
+ template< class Generator > // Generator is function object returning int
+ int catch_exceptions( Generator function_object,
+ std::ostream & out, std::ostream & err )
+ {
+ int result = 0; // quiet compiler warnings
+ bool exception_thrown = true; // avoid setting result for each excptn type
+
+#ifndef BOOST_NO_EXCEPTIONS
+ try
+ {
+#endif
+ result = function_object();
+ exception_thrown = false;
+#ifndef BOOST_NO_EXCEPTIONS
+ }
+
+ // As a result of hard experience with strangely interleaved output
+ // under some compilers, there is a lot of use of endl in the code below
+ // where a simple '\n' might appear to do.
+
+ // The rules for catch & arguments are a bit different from function
+ // arguments (ISO 15.3 paragraphs 18 & 19). Apparently const isn't
+ // required, but it doesn't hurt and some programmers ask for it.
+
+ catch ( const char * ex )
+ { detail::report_exception( out, "", ex ); }
+ catch ( const std::string & ex )
+ { detail::report_exception( out, "", ex.c_str() ); }
+
+ // std:: exceptions
+ catch ( const std::bad_alloc & ex )
+ { detail::report_exception( out, "std::bad_alloc:", ex.what() ); }
+
+# ifndef BOOST_BUILT_IN_EXCEPTIONS_MISSING_WHAT
+ catch ( const std::bad_cast & ex )
+ { detail::report_exception( out, "std::bad_cast:", ex.what() ); }
+ catch ( const std::bad_typeid & ex )
+ { detail::report_exception( out, "std::bad_typeid:", ex.what() ); }
+# else
+ catch ( const std::bad_cast & )
+ { detail::report_exception( out, "std::bad_cast", "" ); }
+ catch ( const std::bad_typeid & )
+ { detail::report_exception( out, "std::bad_typeid", "" ); }
+# endif
+
+ catch ( const std::bad_exception & ex )
+ { detail::report_exception( out, "std::bad_exception:", ex.what() ); }
+ catch ( const std::domain_error & ex )
+ { detail::report_exception( out, "std::domain_error:", ex.what() ); }
+ catch ( const std::invalid_argument & ex )
+ { detail::report_exception( out, "std::invalid_argument:", ex.what() ); }
+ catch ( const std::length_error & ex )
+ { detail::report_exception( out, "std::length_error:", ex.what() ); }
+ catch ( const std::out_of_range & ex )
+ { detail::report_exception( out, "std::out_of_range:", ex.what() ); }
+ catch ( const std::range_error & ex )
+ { detail::report_exception( out, "std::range_error:", ex.what() ); }
+ catch ( const std::overflow_error & ex )
+ { detail::report_exception( out, "std::overflow_error:", ex.what() ); }
+ catch ( const std::underflow_error & ex )
+ { detail::report_exception( out, "std::underflow_error:", ex.what() ); }
+ catch ( const std::logic_error & ex )
+ { detail::report_exception( out, "std::logic_error:", ex.what() ); }
+ catch ( const std::runtime_error & ex )
+ { detail::report_exception( out, "std::runtime_error:", ex.what() ); }
+ catch ( const std::exception & ex )
+ { detail::report_exception( out, "std::exception:", ex.what() ); }
+
+ catch ( ... )
+ { detail::report_exception( out, "unknown exception", "" ); }
+#endif // BOOST_NO_EXCEPTIONS
+
+ if ( exception_thrown ) result = boost::exit_exception_failure;
+
+ if ( result != 0 && result != exit_success )
+ {
+ out << std::endl << "**** returning with error code "
+ << result << std::endl;
+ err
+ << "********** errors detected; see stdout for details ***********"
+ << std::endl;
+ }
+#if !defined(BOOST_NO_CPP_MAIN_SUCCESS_MESSAGE)
+ else { out << std::flush << "no errors detected" << std::endl; }
+#endif
+ return result;
+ } // catch_exceptions
+
+} // boost
+
+#endif // BOOST_CATCH_EXCEPTIONS_HPP
+
diff --git a/boost/boost/detail/compressed_pair.hpp b/boost/boost/detail/compressed_pair.hpp
new file mode 100644
index 00000000000..3f326456ce7
--- /dev/null
+++ b/boost/boost/detail/compressed_pair.hpp
@@ -0,0 +1,443 @@
+// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/utility for most recent version including documentation.
+
+// compressed_pair: pair that "compresses" empty members
+// (see libs/utility/compressed_pair.htm)
+//
+// JM changes 25 Jan 2004:
+// For the case where T1 == T2 and both are empty, then first() and second()
+// should return different objects.
+// JM changes 25 Jan 2000:
+// Removed default arguments from compressed_pair_switch to get
+// C++ Builder 4 to accept them
+// rewriten swap to get gcc and C++ builder to compile.
+// added partial specialisations for case T1 == T2 to avoid duplicate constructor defs.
+
+#ifndef BOOST_DETAIL_COMPRESSED_PAIR_HPP
+#define BOOST_DETAIL_COMPRESSED_PAIR_HPP
+
+#include <algorithm>
+
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/is_empty.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/call_traits.hpp>
+
+#ifdef BOOST_MSVC
+# pragma warning(push)
+# pragma warning(disable:4512)
+#endif
+namespace boost
+{
+
+template <class T1, class T2>
+class compressed_pair;
+
+
+// compressed_pair
+
+namespace details
+{
+ // JM altered 26 Jan 2000:
+ template <class T1, class T2, bool IsSame, bool FirstEmpty, bool SecondEmpty>
+ struct compressed_pair_switch;
+
+ template <class T1, class T2>
+ struct compressed_pair_switch<T1, T2, false, false, false>
+ {static const int value = 0;};
+
+ template <class T1, class T2>
+ struct compressed_pair_switch<T1, T2, false, true, true>
+ {static const int value = 3;};
+
+ template <class T1, class T2>
+ struct compressed_pair_switch<T1, T2, false, true, false>
+ {static const int value = 1;};
+
+ template <class T1, class T2>
+ struct compressed_pair_switch<T1, T2, false, false, true>
+ {static const int value = 2;};
+
+ template <class T1, class T2>
+ struct compressed_pair_switch<T1, T2, true, true, true>
+ {static const int value = 4;};
+
+ template <class T1, class T2>
+ struct compressed_pair_switch<T1, T2, true, false, false>
+ {static const int value = 5;};
+
+ template <class T1, class T2, int Version> class compressed_pair_imp;
+
+#ifdef __GNUC__
+ // workaround for GCC (JM):
+ using std::swap;
+#endif
+ //
+ // can't call unqualified swap from within classname::swap
+ // as Koenig lookup rules will find only the classname::swap
+ // member function not the global declaration, so use cp_swap
+ // as a forwarding function (JM):
+ template <typename T>
+ inline void cp_swap(T& t1, T& t2)
+ {
+#ifndef __GNUC__
+ using std::swap;
+#endif
+ swap(t1, t2);
+ }
+
+ // 0 derive from neither
+
+ template <class T1, class T2>
+ class compressed_pair_imp<T1, T2, 0>
+ {
+ public:
+ typedef T1 first_type;
+ typedef T2 second_type;
+ typedef typename call_traits<first_type>::param_type first_param_type;
+ typedef typename call_traits<second_type>::param_type second_param_type;
+ typedef typename call_traits<first_type>::reference first_reference;
+ typedef typename call_traits<second_type>::reference second_reference;
+ typedef typename call_traits<first_type>::const_reference first_const_reference;
+ typedef typename call_traits<second_type>::const_reference second_const_reference;
+
+ compressed_pair_imp() {}
+
+ compressed_pair_imp(first_param_type x, second_param_type y)
+ : first_(x), second_(y) {}
+
+ compressed_pair_imp(first_param_type x)
+ : first_(x) {}
+
+ compressed_pair_imp(second_param_type y)
+ : second_(y) {}
+
+ first_reference first() {return first_;}
+ first_const_reference first() const {return first_;}
+
+ second_reference second() {return second_;}
+ second_const_reference second() const {return second_;}
+
+ void swap(::boost::compressed_pair<T1, T2>& y)
+ {
+ cp_swap(first_, y.first());
+ cp_swap(second_, y.second());
+ }
+ private:
+ first_type first_;
+ second_type second_;
+ };
+
+ // 1 derive from T1
+
+ template <class T1, class T2>
+ class compressed_pair_imp<T1, T2, 1>
+ : protected ::boost::remove_cv<T1>::type
+ {
+ public:
+ typedef T1 first_type;
+ typedef T2 second_type;
+ typedef typename call_traits<first_type>::param_type first_param_type;
+ typedef typename call_traits<second_type>::param_type second_param_type;
+ typedef typename call_traits<first_type>::reference first_reference;
+ typedef typename call_traits<second_type>::reference second_reference;
+ typedef typename call_traits<first_type>::const_reference first_const_reference;
+ typedef typename call_traits<second_type>::const_reference second_const_reference;
+
+ compressed_pair_imp() {}
+
+ compressed_pair_imp(first_param_type x, second_param_type y)
+ : first_type(x), second_(y) {}
+
+ compressed_pair_imp(first_param_type x)
+ : first_type(x) {}
+
+ compressed_pair_imp(second_param_type y)
+ : second_(y) {}
+
+ first_reference first() {return *this;}
+ first_const_reference first() const {return *this;}
+
+ second_reference second() {return second_;}
+ second_const_reference second() const {return second_;}
+
+ void swap(::boost::compressed_pair<T1,T2>& y)
+ {
+ // no need to swap empty base class:
+ cp_swap(second_, y.second());
+ }
+ private:
+ second_type second_;
+ };
+
+ // 2 derive from T2
+
+ template <class T1, class T2>
+ class compressed_pair_imp<T1, T2, 2>
+ : protected ::boost::remove_cv<T2>::type
+ {
+ public:
+ typedef T1 first_type;
+ typedef T2 second_type;
+ typedef typename call_traits<first_type>::param_type first_param_type;
+ typedef typename call_traits<second_type>::param_type second_param_type;
+ typedef typename call_traits<first_type>::reference first_reference;
+ typedef typename call_traits<second_type>::reference second_reference;
+ typedef typename call_traits<first_type>::const_reference first_const_reference;
+ typedef typename call_traits<second_type>::const_reference second_const_reference;
+
+ compressed_pair_imp() {}
+
+ compressed_pair_imp(first_param_type x, second_param_type y)
+ : second_type(y), first_(x) {}
+
+ compressed_pair_imp(first_param_type x)
+ : first_(x) {}
+
+ compressed_pair_imp(second_param_type y)
+ : second_type(y) {}
+
+ first_reference first() {return first_;}
+ first_const_reference first() const {return first_;}
+
+ second_reference second() {return *this;}
+ second_const_reference second() const {return *this;}
+
+ void swap(::boost::compressed_pair<T1,T2>& y)
+ {
+ // no need to swap empty base class:
+ cp_swap(first_, y.first());
+ }
+
+ private:
+ first_type first_;
+ };
+
+ // 3 derive from T1 and T2
+
+ template <class T1, class T2>
+ class compressed_pair_imp<T1, T2, 3>
+ : protected ::boost::remove_cv<T1>::type,
+ protected ::boost::remove_cv<T2>::type
+ {
+ public:
+ typedef T1 first_type;
+ typedef T2 second_type;
+ typedef typename call_traits<first_type>::param_type first_param_type;
+ typedef typename call_traits<second_type>::param_type second_param_type;
+ typedef typename call_traits<first_type>::reference first_reference;
+ typedef typename call_traits<second_type>::reference second_reference;
+ typedef typename call_traits<first_type>::const_reference first_const_reference;
+ typedef typename call_traits<second_type>::const_reference second_const_reference;
+
+ compressed_pair_imp() {}
+
+ compressed_pair_imp(first_param_type x, second_param_type y)
+ : first_type(x), second_type(y) {}
+
+ compressed_pair_imp(first_param_type x)
+ : first_type(x) {}
+
+ compressed_pair_imp(second_param_type y)
+ : second_type(y) {}
+
+ first_reference first() {return *this;}
+ first_const_reference first() const {return *this;}
+
+ second_reference second() {return *this;}
+ second_const_reference second() const {return *this;}
+ //
+ // no need to swap empty bases:
+ void swap(::boost::compressed_pair<T1,T2>&) {}
+ };
+
+ // JM
+ // 4 T1 == T2, T1 and T2 both empty
+ // Originally this did not store an instance of T2 at all
+ // but that led to problems beause it meant &x.first() == &x.second()
+ // which is not true for any other kind of pair, so now we store an instance
+ // of T2 just in case the user is relying on first() and second() returning
+ // different objects (albeit both empty).
+ template <class T1, class T2>
+ class compressed_pair_imp<T1, T2, 4>
+ : protected ::boost::remove_cv<T1>::type
+ {
+ public:
+ typedef T1 first_type;
+ typedef T2 second_type;
+ typedef typename call_traits<first_type>::param_type first_param_type;
+ typedef typename call_traits<second_type>::param_type second_param_type;
+ typedef typename call_traits<first_type>::reference first_reference;
+ typedef typename call_traits<second_type>::reference second_reference;
+ typedef typename call_traits<first_type>::const_reference first_const_reference;
+ typedef typename call_traits<second_type>::const_reference second_const_reference;
+
+ compressed_pair_imp() {}
+
+ compressed_pair_imp(first_param_type x, second_param_type y)
+ : first_type(x), m_second(y) {}
+
+ compressed_pair_imp(first_param_type x)
+ : first_type(x), m_second(x) {}
+
+ first_reference first() {return *this;}
+ first_const_reference first() const {return *this;}
+
+ second_reference second() {return m_second;}
+ second_const_reference second() const {return m_second;}
+
+ void swap(::boost::compressed_pair<T1,T2>&) {}
+ private:
+ T2 m_second;
+ };
+
+ // 5 T1 == T2 and are not empty: //JM
+
+ template <class T1, class T2>
+ class compressed_pair_imp<T1, T2, 5>
+ {
+ public:
+ typedef T1 first_type;
+ typedef T2 second_type;
+ typedef typename call_traits<first_type>::param_type first_param_type;
+ typedef typename call_traits<second_type>::param_type second_param_type;
+ typedef typename call_traits<first_type>::reference first_reference;
+ typedef typename call_traits<second_type>::reference second_reference;
+ typedef typename call_traits<first_type>::const_reference first_const_reference;
+ typedef typename call_traits<second_type>::const_reference second_const_reference;
+
+ compressed_pair_imp() {}
+
+ compressed_pair_imp(first_param_type x, second_param_type y)
+ : first_(x), second_(y) {}
+
+ compressed_pair_imp(first_param_type x)
+ : first_(x), second_(x) {}
+
+ first_reference first() {return first_;}
+ first_const_reference first() const {return first_;}
+
+ second_reference second() {return second_;}
+ second_const_reference second() const {return second_;}
+
+ void swap(::boost::compressed_pair<T1, T2>& y)
+ {
+ cp_swap(first_, y.first());
+ cp_swap(second_, y.second());
+ }
+ private:
+ first_type first_;
+ second_type second_;
+ };
+
+} // details
+
+template <class T1, class T2>
+class compressed_pair
+ : private ::boost::details::compressed_pair_imp<T1, T2,
+ ::boost::details::compressed_pair_switch<
+ T1,
+ T2,
+ ::boost::is_same<typename remove_cv<T1>::type, typename remove_cv<T2>::type>::value,
+ ::boost::is_empty<T1>::value,
+ ::boost::is_empty<T2>::value>::value>
+{
+private:
+ typedef details::compressed_pair_imp<T1, T2,
+ ::boost::details::compressed_pair_switch<
+ T1,
+ T2,
+ ::boost::is_same<typename remove_cv<T1>::type, typename remove_cv<T2>::type>::value,
+ ::boost::is_empty<T1>::value,
+ ::boost::is_empty<T2>::value>::value> base;
+public:
+ typedef T1 first_type;
+ typedef T2 second_type;
+ typedef typename call_traits<first_type>::param_type first_param_type;
+ typedef typename call_traits<second_type>::param_type second_param_type;
+ typedef typename call_traits<first_type>::reference first_reference;
+ typedef typename call_traits<second_type>::reference second_reference;
+ typedef typename call_traits<first_type>::const_reference first_const_reference;
+ typedef typename call_traits<second_type>::const_reference second_const_reference;
+
+ compressed_pair() : base() {}
+ compressed_pair(first_param_type x, second_param_type y) : base(x, y) {}
+ explicit compressed_pair(first_param_type x) : base(x) {}
+ explicit compressed_pair(second_param_type y) : base(y) {}
+
+ first_reference first() {return base::first();}
+ first_const_reference first() const {return base::first();}
+
+ second_reference second() {return base::second();}
+ second_const_reference second() const {return base::second();}
+
+ void swap(compressed_pair& y) { base::swap(y); }
+};
+
+// JM
+// Partial specialisation for case where T1 == T2:
+//
+template <class T>
+class compressed_pair<T, T>
+ : private details::compressed_pair_imp<T, T,
+ ::boost::details::compressed_pair_switch<
+ T,
+ T,
+ ::boost::is_same<typename remove_cv<T>::type, typename remove_cv<T>::type>::value,
+ ::boost::is_empty<T>::value,
+ ::boost::is_empty<T>::value>::value>
+{
+private:
+ typedef details::compressed_pair_imp<T, T,
+ ::boost::details::compressed_pair_switch<
+ T,
+ T,
+ ::boost::is_same<typename remove_cv<T>::type, typename remove_cv<T>::type>::value,
+ ::boost::is_empty<T>::value,
+ ::boost::is_empty<T>::value>::value> base;
+public:
+ typedef T first_type;
+ typedef T second_type;
+ typedef typename call_traits<first_type>::param_type first_param_type;
+ typedef typename call_traits<second_type>::param_type second_param_type;
+ typedef typename call_traits<first_type>::reference first_reference;
+ typedef typename call_traits<second_type>::reference second_reference;
+ typedef typename call_traits<first_type>::const_reference first_const_reference;
+ typedef typename call_traits<second_type>::const_reference second_const_reference;
+
+ compressed_pair() : base() {}
+ compressed_pair(first_param_type x, second_param_type y) : base(x, y) {}
+#if !(defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x530))
+ explicit
+#endif
+ compressed_pair(first_param_type x) : base(x) {}
+
+ first_reference first() {return base::first();}
+ first_const_reference first() const {return base::first();}
+
+ second_reference second() {return base::second();}
+ second_const_reference second() const {return base::second();}
+
+ void swap(::boost::compressed_pair<T,T>& y) { base::swap(y); }
+};
+
+template <class T1, class T2>
+inline
+void
+swap(compressed_pair<T1, T2>& x, compressed_pair<T1, T2>& y)
+{
+ x.swap(y);
+}
+
+} // boost
+
+#ifdef BOOST_MSVC
+# pragma warning(pop)
+#endif
+
+#endif // BOOST_DETAIL_COMPRESSED_PAIR_HPP
+
diff --git a/boost/boost/detail/dynamic_bitset.hpp b/boost/boost/detail/dynamic_bitset.hpp
new file mode 100644
index 00000000000..94a40ef0dff
--- /dev/null
+++ b/boost/boost/detail/dynamic_bitset.hpp
@@ -0,0 +1,168 @@
+// --------------------------------------------------
+//
+// (C) Copyright Chuck Allison and Jeremy Siek 2001 - 2002.
+// (C) Copyright Gennaro Prota 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/dynamic_bitset for documentation.
+
+
+#ifndef BOOST_DETAIL_DYNAMIC_BITSET_HPP
+#define BOOST_DETAIL_DYNAMIC_BITSET_HPP
+
+#include <cstddef> // for std::size_t
+#include "boost/config.hpp"
+#include "boost/detail/workaround.hpp"
+//#include "boost/static_assert.hpp" // gps
+
+
+namespace boost {
+
+ namespace detail {
+
+ // Gives (read-)access to the object representation
+ // of an object of type T (3.9p4). CANNOT be used
+ // on a base sub-object
+ //
+ template <typename T>
+ inline const unsigned char * object_representation (T* p)
+ {
+ return static_cast<const unsigned char *>(static_cast<const void *>(p));
+ }
+
+
+ // ------- count function implementation --------------
+
+ namespace dynamic_bitset_count_impl {
+
+ typedef unsigned char byte_type;
+
+ enum mode { access_by_bytes, access_by_blocks };
+
+ template <mode> struct mode_to_type {};
+
+ // the table: wrapped in a class template, so
+ // that it is only instantiated if/when needed
+ //
+ template <bool dummy_name = true>
+ struct count_table { static const byte_type table[]; };
+
+ template <>
+ struct count_table<false> { /* no table */ };
+
+
+ const unsigned int table_width = 8;
+ template <bool b>
+ const byte_type count_table<b>::table[] =
+ {
+ // Automatically generated by GPTableGen.exe v.1.0
+ //
+ 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
+ 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
+ 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
+ 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
+ 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
+ 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
+ 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
+ 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8
+ };
+
+
+ // overload for access by bytes
+ //
+
+ template <typename Iterator>
+ inline std::size_t do_count(Iterator first, std::size_t length,
+ int /*dummy param*/,
+ mode_to_type<access_by_bytes>* )
+ {
+ std::size_t num = 0;
+ if (length)
+ {
+ const byte_type * p = object_representation(&*first);
+ length *= sizeof(*first);
+
+ do {
+ num += count_table<>::table[*p];
+ ++p;
+ --length;
+
+ } while (length);
+ }
+
+ return num;
+ }
+
+
+ // overload for access by blocks
+ //
+ template <typename Iterator, typename ValueType>
+ inline std::size_t do_count(Iterator first, std::size_t length, ValueType,
+ mode_to_type<access_by_blocks>*)
+ {
+ std::size_t num = 0;
+ while (length){
+
+ ValueType value = *first;
+ while (value) {
+ num += count_table<>::table[value & ((1u<<table_width) - 1)];
+ value >>= table_width;
+ }
+
+ ++first;
+ --length;
+ }
+
+ return num;
+ }
+
+
+ } // dynamic_bitset_count_impl
+ // -------------------------------------------------------
+
+
+ // Some library implementations simply return a dummy
+ // value such as
+ //
+ // size_type(-1) / sizeof(T)
+ //
+ // from vector<>::max_size. This tries to get out more
+ // meaningful info.
+ //
+ template <typename T>
+ typename T::size_type vector_max_size_workaround(const T & v) {
+
+ typedef typename T::allocator_type allocator_type;
+
+ const typename allocator_type::size_type alloc_max =
+ v.get_allocator().max_size();
+ const typename T::size_type container_max = v.max_size();
+
+ return alloc_max < container_max?
+ alloc_max :
+ container_max;
+ }
+
+ // for static_asserts
+ template <typename T>
+ struct dynamic_bitset_allowed_block_type {
+ enum { value = (T(-1) > 0) }; // ensure T has no sign
+ };
+
+ template <>
+ struct dynamic_bitset_allowed_block_type<bool> {
+ enum { value = false };
+ };
+
+
+ } // namespace detail
+
+} // namespace boost
+
+#endif // include guard
+
diff --git a/boost/boost/detail/endian.hpp b/boost/boost/detail/endian.hpp
new file mode 100644
index 00000000000..6936dba0f35
--- /dev/null
+++ b/boost/boost/detail/endian.hpp
@@ -0,0 +1,73 @@
+// Copyright 2005 Caleb Epstein
+// Copyright 2006 John Maddock
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+/*
+ * Copyright (c) 1997
+ * Silicon Graphics Computer Systems, Inc.
+ *
+ * Permission to use, copy, modify, distribute and sell this software
+ * and its documentation for any purpose is hereby granted without fee,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear
+ * in supporting documentation. Silicon Graphics makes no
+ * representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ */
+
+/*
+ * Copyright notice reproduced from <boost/detail/limits.hpp>, from
+ * which this code was originally taken.
+ *
+ * Modified by Caleb Epstein to use <endian.h> with GNU libc and to
+ * defined the BOOST_ENDIAN macro.
+ */
+
+#ifndef BOOST_DETAIL_ENDIAN_HPP
+#define BOOST_DETAIL_ENDIAN_HPP
+
+// GNU libc offers the helpful header <endian.h> which defines
+// __BYTE_ORDER
+
+#if defined (__GLIBC__)
+# include <endian.h>
+# if (__BYTE_ORDER == __LITTLE_ENDIAN)
+# define BOOST_LITTLE_ENDIAN
+# elif (__BYTE_ORDER == __BIG_ENDIAN)
+# define BOOST_BIG_ENDIAN
+# elif (__BYTE_ORDER == __PDP_ENDIAN)
+# define BOOST_PDP_ENDIAN
+# else
+# error Unknown machine endianness detected.
+# endif
+# define BOOST_BYTE_ORDER __BYTE_ORDER
+#elif defined(_BIG_ENDIAN)
+# define BOOST_BIG_ENDIAN
+# define BOOST_BYTE_ORDER 4321
+#elif defined(_LITTLE_ENDIAN)
+# define BOOST_LITTLE_ENDIAN
+# define BOOST_BYTE_ORDER 1234
+#elif defined(__sparc) || defined(__sparc__) \
+ || defined(_POWER) || defined(__powerpc__) \
+ || defined(__ppc__) || defined(__hpux) \
+ || defined(_MIPSEB) || defined(_POWER) \
+ || defined(__s390__)
+# define BOOST_BIG_ENDIAN
+# define BOOST_BYTE_ORDER 4321
+#elif defined(__i386__) || defined(__alpha__) \
+ || defined(__ia64) || defined(__ia64__) \
+ || defined(_M_IX86) || defined(_M_IA64) \
+ || defined(_M_ALPHA) || defined(__amd64) \
+ || defined(__amd64__) || defined(_M_AMD64) \
+ || defined(__x86_64) || defined(__x86_64__) \
+ || defined(_M_X64)
+
+# define BOOST_LITTLE_ENDIAN
+# define BOOST_BYTE_ORDER 1234
+#else
+# error The file boost/detail/endian.hpp needs to be set up for your CPU type.
+#endif
+
+
+#endif
diff --git a/boost/boost/detail/indirect_traits.hpp b/boost/boost/detail/indirect_traits.hpp
new file mode 100644
index 00000000000..9b22d6b1792
--- /dev/null
+++ b/boost/boost/detail/indirect_traits.hpp
@@ -0,0 +1,487 @@
+// Copyright David Abrahams 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)
+#ifndef INDIRECT_TRAITS_DWA2002131_HPP
+# define INDIRECT_TRAITS_DWA2002131_HPP
+# include <boost/type_traits/is_function.hpp>
+# include <boost/type_traits/is_reference.hpp>
+# include <boost/type_traits/is_pointer.hpp>
+# include <boost/type_traits/is_class.hpp>
+# include <boost/type_traits/is_const.hpp>
+# include <boost/type_traits/is_volatile.hpp>
+# include <boost/type_traits/is_member_function_pointer.hpp>
+# include <boost/type_traits/is_member_pointer.hpp>
+# include <boost/type_traits/remove_cv.hpp>
+# include <boost/type_traits/remove_reference.hpp>
+# include <boost/type_traits/remove_pointer.hpp>
+
+# include <boost/type_traits/detail/ice_and.hpp>
+# include <boost/detail/workaround.hpp>
+
+# include <boost/mpl/eval_if.hpp>
+# include <boost/mpl/if.hpp>
+# include <boost/mpl/bool.hpp>
+# include <boost/mpl/and.hpp>
+# include <boost/mpl/not.hpp>
+# include <boost/mpl/aux_/lambda_support.hpp>
+
+# ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+# include <boost/detail/is_function_ref_tester.hpp>
+# endif
+
+namespace boost { namespace detail {
+
+namespace indirect_traits {
+
+# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+template <class T>
+struct is_reference_to_const : mpl::false_
+{
+};
+
+template <class T>
+struct is_reference_to_const<T const&> : mpl::true_
+{
+};
+
+# if defined(BOOST_MSVC) && _MSC_FULL_VER <= 13102140 // vc7.01 alpha workaround
+template<class T>
+struct is_reference_to_const<T const volatile&> : mpl::true_
+{
+};
+# endif
+
+template <class T>
+struct is_reference_to_function : mpl::false_
+{
+};
+
+template <class T>
+struct is_reference_to_function<T&> : is_function<T>
+{
+};
+
+template <class T>
+struct is_pointer_to_function : mpl::false_
+{
+};
+
+// There's no such thing as a pointer-to-cv-function, so we don't need
+// specializations for those
+template <class T>
+struct is_pointer_to_function<T*> : is_function<T>
+{
+};
+
+template <class T>
+struct is_reference_to_member_function_pointer_impl : mpl::false_
+{
+};
+
+template <class T>
+struct is_reference_to_member_function_pointer_impl<T&>
+ : is_member_function_pointer<typename remove_cv<T>::type>
+{
+};
+
+
+template <class T>
+struct is_reference_to_member_function_pointer
+ : is_reference_to_member_function_pointer_impl<T>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_reference_to_member_function_pointer,(T))
+};
+
+template <class T>
+struct is_reference_to_function_pointer_aux
+ : mpl::and_<
+ is_reference<T>
+ , is_pointer_to_function<
+ typename remove_cv<
+ typename remove_reference<T>::type
+ >::type
+ >
+ >
+{
+ // There's no such thing as a pointer-to-cv-function, so we don't need specializations for those
+};
+
+template <class T>
+struct is_reference_to_function_pointer
+ : mpl::if_<
+ is_reference_to_function<T>
+ , mpl::false_
+ , is_reference_to_function_pointer_aux<T>
+ >::type
+{
+};
+
+template <class T>
+struct is_reference_to_non_const
+ : mpl::and_<
+ is_reference<T>
+ , mpl::not_<
+ is_reference_to_const<T>
+ >
+ >
+{
+};
+
+template <class T>
+struct is_reference_to_volatile : mpl::false_
+{
+};
+
+template <class T>
+struct is_reference_to_volatile<T volatile&> : mpl::true_
+{
+};
+
+# if defined(BOOST_MSVC) && _MSC_FULL_VER <= 13102140 // vc7.01 alpha workaround
+template <class T>
+struct is_reference_to_volatile<T const volatile&> : mpl::true_
+{
+};
+# endif
+
+
+template <class T>
+struct is_reference_to_pointer : mpl::false_
+{
+};
+
+template <class T>
+struct is_reference_to_pointer<T*&> : mpl::true_
+{
+};
+
+template <class T>
+struct is_reference_to_pointer<T* const&> : mpl::true_
+{
+};
+
+template <class T>
+struct is_reference_to_pointer<T* volatile&> : mpl::true_
+{
+};
+
+template <class T>
+struct is_reference_to_pointer<T* const volatile&> : mpl::true_
+{
+};
+
+template <class T>
+struct is_reference_to_class
+ : mpl::and_<
+ is_reference<T>
+ , is_class<
+ typename remove_cv<
+ typename remove_reference<T>::type
+ >::type
+ >
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_reference_to_class,(T))
+};
+
+template <class T>
+struct is_pointer_to_class
+ : mpl::and_<
+ is_pointer<T>
+ , is_class<
+ typename remove_cv<
+ typename remove_pointer<T>::type
+ >::type
+ >
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_pointer_to_class,(T))
+};
+
+# else
+
+using namespace boost::detail::is_function_ref_tester_;
+
+typedef char (&inner_yes_type)[3];
+typedef char (&inner_no_type)[2];
+typedef char (&outer_no_type)[1];
+
+template <typename V>
+struct is_const_help
+{
+ typedef typename mpl::if_<
+ is_const<V>
+ , inner_yes_type
+ , inner_no_type
+ >::type type;
+};
+
+template <typename V>
+struct is_volatile_help
+{
+ typedef typename mpl::if_<
+ is_volatile<V>
+ , inner_yes_type
+ , inner_no_type
+ >::type type;
+};
+
+template <typename V>
+struct is_pointer_help
+{
+ typedef typename mpl::if_<
+ is_pointer<V>
+ , inner_yes_type
+ , inner_no_type
+ >::type type;
+};
+
+template <typename V>
+struct is_class_help
+{
+ typedef typename mpl::if_<
+ is_class<V>
+ , inner_yes_type
+ , inner_no_type
+ >::type type;
+};
+
+template <class T>
+struct is_reference_to_function_aux
+{
+ static T t;
+ BOOST_STATIC_CONSTANT(
+ bool, value = sizeof(detail::is_function_ref_tester(t,0)) == sizeof(::boost::type_traits::yes_type));
+ typedef mpl::bool_<value> type;
+ };
+
+template <class T>
+struct is_reference_to_function
+ : mpl::if_<is_reference<T>, is_reference_to_function_aux<T>, mpl::bool_<false> >::type
+{
+};
+
+template <class T>
+struct is_pointer_to_function_aux
+{
+ static T t;
+ BOOST_STATIC_CONSTANT(
+ bool, value
+ = sizeof(::boost::type_traits::is_function_ptr_tester(t)) == sizeof(::boost::type_traits::yes_type));
+ typedef mpl::bool_<value> type;
+};
+
+template <class T>
+struct is_pointer_to_function
+ : mpl::if_<is_pointer<T>, is_pointer_to_function_aux<T>, mpl::bool_<false> >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_pointer_to_function,(T))
+};
+
+struct false_helper1
+{
+ template <class T>
+ struct apply : mpl::false_
+ {
+ };
+};
+
+template <typename V>
+typename is_const_help<V>::type reference_to_const_helper(V&);
+outer_no_type
+reference_to_const_helper(...);
+
+struct true_helper1
+{
+ template <class T>
+ struct apply
+ {
+ static T t;
+ BOOST_STATIC_CONSTANT(
+ bool, value
+ = sizeof(reference_to_const_helper(t)) == sizeof(inner_yes_type));
+ typedef mpl::bool_<value> type;
+ };
+};
+
+template <bool ref = true>
+struct is_reference_to_const_helper1 : true_helper1
+{
+};
+
+template <>
+struct is_reference_to_const_helper1<false> : false_helper1
+{
+};
+
+
+template <class T>
+struct is_reference_to_const
+ : is_reference_to_const_helper1<is_reference<T>::value>::template apply<T>
+{
+};
+
+
+template <bool ref = true>
+struct is_reference_to_non_const_helper1
+{
+ template <class T>
+ struct apply
+ {
+ static T t;
+ BOOST_STATIC_CONSTANT(
+ bool, value
+ = sizeof(reference_to_const_helper(t)) == sizeof(inner_no_type));
+
+ typedef mpl::bool_<value> type;
+ };
+};
+
+template <>
+struct is_reference_to_non_const_helper1<false> : false_helper1
+{
+};
+
+
+template <class T>
+struct is_reference_to_non_const
+ : is_reference_to_non_const_helper1<is_reference<T>::value>::template apply<T>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_reference_to_non_const,(T))
+};
+
+
+template <typename V>
+typename is_volatile_help<V>::type reference_to_volatile_helper(V&);
+outer_no_type
+reference_to_volatile_helper(...);
+
+template <bool ref = true>
+struct is_reference_to_volatile_helper1
+{
+ template <class T>
+ struct apply
+ {
+ static T t;
+ BOOST_STATIC_CONSTANT(
+ bool, value
+ = sizeof(reference_to_volatile_helper(t)) == sizeof(inner_yes_type));
+ typedef mpl::bool_<value> type;
+ };
+};
+
+template <>
+struct is_reference_to_volatile_helper1<false> : false_helper1
+{
+};
+
+
+template <class T>
+struct is_reference_to_volatile
+ : is_reference_to_volatile_helper1<is_reference<T>::value>::template apply<T>
+{
+};
+
+template <typename V>
+typename is_pointer_help<V>::type reference_to_pointer_helper(V&);
+outer_no_type reference_to_pointer_helper(...);
+
+template <class T>
+struct reference_to_pointer_impl
+{
+ static T t;
+ BOOST_STATIC_CONSTANT(
+ bool, value
+ = (sizeof((reference_to_pointer_helper)(t)) == sizeof(inner_yes_type))
+ );
+
+ typedef mpl::bool_<value> type;
+};
+
+template <class T>
+struct is_reference_to_pointer
+ : mpl::eval_if<is_reference<T>, reference_to_pointer_impl<T>, mpl::false_>::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_reference_to_pointer,(T))
+};
+
+template <class T>
+struct is_reference_to_function_pointer
+ : mpl::eval_if<is_reference<T>, is_pointer_to_function_aux<T>, mpl::false_>::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_reference_to_function_pointer,(T))
+};
+
+
+template <class T>
+struct is_member_function_pointer_help
+ : mpl::if_<is_member_function_pointer<T>, inner_yes_type, inner_no_type>
+{};
+
+template <typename V>
+typename is_member_function_pointer_help<V>::type member_function_pointer_helper(V&);
+outer_no_type member_function_pointer_helper(...);
+
+template <class T>
+struct is_pointer_to_member_function_aux
+{
+ static T t;
+ BOOST_STATIC_CONSTANT(
+ bool, value
+ = sizeof((member_function_pointer_helper)(t)) == sizeof(inner_yes_type));
+ typedef mpl::bool_<value> type;
+};
+
+template <class T>
+struct is_reference_to_member_function_pointer
+ : mpl::if_<
+ is_reference<T>
+ , is_pointer_to_member_function_aux<T>
+ , mpl::bool_<false>
+ >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_reference_to_member_function_pointer,(T))
+};
+
+template <typename V>
+typename is_class_help<V>::type reference_to_class_helper(V const volatile&);
+outer_no_type reference_to_class_helper(...);
+
+template <class T>
+struct is_reference_to_class
+{
+ static T t;
+ BOOST_STATIC_CONSTANT(
+ bool, value
+ = (is_reference<T>::value
+ & (sizeof(reference_to_class_helper(t)) == sizeof(inner_yes_type)))
+ );
+ typedef mpl::bool_<value> type;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_reference_to_class,(T))
+};
+
+template <typename V>
+typename is_class_help<V>::type pointer_to_class_helper(V const volatile*);
+outer_no_type pointer_to_class_helper(...);
+
+template <class T>
+struct is_pointer_to_class
+{
+ static T t;
+ BOOST_STATIC_CONSTANT(
+ bool, value
+ = (is_pointer<T>::value
+ && sizeof(pointer_to_class_helper(t)) == sizeof(inner_yes_type))
+ );
+ typedef mpl::bool_<value> type;
+};
+# endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+}
+
+using namespace indirect_traits;
+
+}} // namespace boost::python::detail
+
+#endif // INDIRECT_TRAITS_DWA2002131_HPP
diff --git a/boost/boost/detail/interlocked.hpp b/boost/boost/detail/interlocked.hpp
new file mode 100644
index 00000000000..76a24c34d0e
--- /dev/null
+++ b/boost/boost/detail/interlocked.hpp
@@ -0,0 +1,125 @@
+#ifndef BOOST_DETAIL_INTERLOCKED_HPP_INCLUDED
+#define BOOST_DETAIL_INTERLOCKED_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+// boost/detail/interlocked.hpp
+//
+// Copyright 2005 Peter Dimov
+//
+// 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)
+//
+
+#include <boost/config.hpp>
+
+#if defined( BOOST_USE_WINDOWS_H )
+
+# include <windows.h>
+
+# define BOOST_INTERLOCKED_INCREMENT InterlockedIncrement
+# define BOOST_INTERLOCKED_DECREMENT InterlockedDecrement
+# define BOOST_INTERLOCKED_COMPARE_EXCHANGE InterlockedCompareExchange
+# define BOOST_INTERLOCKED_EXCHANGE InterlockedExchange
+# define BOOST_INTERLOCKED_EXCHANGE_ADD InterlockedExchangeAdd
+# define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER InterlockedCompareExchangePointer
+# define BOOST_INTERLOCKED_EXCHANGE_POINTER InterlockedExchangePointer
+
+#elif defined(_WIN32_WCE)
+
+// under Windows CE we still have old-style Interlocked* functions
+
+extern "C" long __cdecl InterlockedIncrement( long* );
+extern "C" long __cdecl InterlockedDecrement( long* );
+extern "C" long __cdecl InterlockedCompareExchange( long*, long, long );
+extern "C" long __cdecl InterlockedExchange( long*, long );
+extern "C" long __cdecl InterlockedExchangeAdd( long*, long );
+
+# define BOOST_INTERLOCKED_INCREMENT InterlockedIncrement
+# define BOOST_INTERLOCKED_DECREMENT InterlockedDecrement
+# define BOOST_INTERLOCKED_COMPARE_EXCHANGE InterlockedCompareExchange
+# define BOOST_INTERLOCKED_EXCHANGE InterlockedExchange
+# define BOOST_INTERLOCKED_EXCHANGE_ADD InterlockedExchangeAdd
+
+#elif defined( BOOST_MSVC ) || defined( BOOST_INTEL_WIN )
+
+extern "C" long __cdecl _InterlockedIncrement( long volatile * );
+extern "C" long __cdecl _InterlockedDecrement( long volatile * );
+extern "C" long __cdecl _InterlockedCompareExchange( long volatile *, long, long );
+extern "C" long __cdecl _InterlockedExchange( long volatile *, long);
+extern "C" long __cdecl _InterlockedExchangeAdd( long volatile *, long);
+
+# pragma intrinsic( _InterlockedIncrement )
+# pragma intrinsic( _InterlockedDecrement )
+# pragma intrinsic( _InterlockedCompareExchange )
+# pragma intrinsic( _InterlockedExchange )
+# pragma intrinsic( _InterlockedExchangeAdd )
+
+# if defined(_M_IA64) || defined(_M_AMD64)
+
+extern "C" void* __cdecl _InterlockedCompareExchangePointer( void* volatile *, void*, void* );
+extern "C" void* __cdecl _InterlockedExchangePointer( void* volatile *, void* );
+
+# pragma intrinsic( _InterlockedCompareExchangePointer )
+# pragma intrinsic( _InterlockedExchangePointer )
+
+# define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER _InterlockedCompareExchangePointer
+# define BOOST_INTERLOCKED_EXCHANGE_POINTER _InterlockedExchangePointer
+
+# else
+
+# define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER(dest,exchange,compare) \
+ ((void*)BOOST_INTERLOCKED_COMPARE_EXCHANGE((long volatile*)(dest),(long)(exchange),(long)(compare)))
+# define BOOST_INTERLOCKED_EXCHANGE_POINTER(dest,exchange) \
+ ((void*)BOOST_INTERLOCKED_EXCHANGE((long volatile*)(dest),(long)(exchange)))
+
+# endif
+
+# define BOOST_INTERLOCKED_INCREMENT _InterlockedIncrement
+# define BOOST_INTERLOCKED_DECREMENT _InterlockedDecrement
+# define BOOST_INTERLOCKED_COMPARE_EXCHANGE _InterlockedCompareExchange
+# define BOOST_INTERLOCKED_EXCHANGE _InterlockedExchange
+# define BOOST_INTERLOCKED_EXCHANGE_ADD _InterlockedExchangeAdd
+
+#elif defined( WIN32 ) || defined( _WIN32 ) || defined( __WIN32__ )
+
+namespace boost
+{
+
+namespace detail
+{
+
+extern "C" __declspec(dllimport) long __stdcall InterlockedIncrement( long volatile * );
+extern "C" __declspec(dllimport) long __stdcall InterlockedDecrement( long volatile * );
+extern "C" __declspec(dllimport) long __stdcall InterlockedCompareExchange( long volatile *, long, long );
+extern "C" __declspec(dllimport) long __stdcall InterlockedExchange( long volatile *, long );
+extern "C" __declspec(dllimport) long __stdcall InterlockedExchangeAdd( long volatile *, long );
+
+} // namespace detail
+
+} // namespace boost
+
+# define BOOST_INTERLOCKED_INCREMENT ::boost::detail::InterlockedIncrement
+# define BOOST_INTERLOCKED_DECREMENT ::boost::detail::InterlockedDecrement
+# define BOOST_INTERLOCKED_COMPARE_EXCHANGE ::boost::detail::InterlockedCompareExchange
+# define BOOST_INTERLOCKED_EXCHANGE ::boost::detail::InterlockedExchange
+# define BOOST_INTERLOCKED_EXCHANGE_ADD ::boost::detail::InterlockedExchangeAdd
+
+# define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER(dest,exchange,compare) \
+ ((void*)BOOST_INTERLOCKED_COMPARE_EXCHANGE((long volatile*)(dest),(long)(exchange),(long)(compare)))
+# define BOOST_INTERLOCKED_EXCHANGE_POINTER(dest,exchange) \
+ ((void*)BOOST_INTERLOCKED_EXCHANGE((long volatile*)(dest),(long)(exchange)))
+
+#else
+
+# error "Interlocked intrinsics not available"
+
+#endif
+
+#endif // #ifndef BOOST_DETAIL_INTERLOCKED_HPP_INCLUDED
diff --git a/boost/boost/detail/is_function_ref_tester.hpp b/boost/boost/detail/is_function_ref_tester.hpp
new file mode 100644
index 00000000000..5f367ea8189
--- /dev/null
+++ b/boost/boost/detail/is_function_ref_tester.hpp
@@ -0,0 +1,135 @@
+
+// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes,
+// Aleksey Gurtovoy, Howard Hinnant & John Maddock 2000.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_PP_IS_ITERATING)
+
+///// header body
+
+#ifndef BOOST_DETAIL_IS_FUNCTION_REF_TESTER_HPP_INCLUDED
+#define BOOST_DETAIL_IS_FUNCTION_REF_TESTER_HPP_INCLUDED
+
+#include "boost/type_traits/detail/yes_no_type.hpp"
+#include "boost/type_traits/config.hpp"
+
+#if defined(BOOST_TT_PREPROCESSING_MODE)
+# include "boost/preprocessor/iterate.hpp"
+# include "boost/preprocessor/enum_params.hpp"
+# include "boost/preprocessor/comma_if.hpp"
+#endif
+
+namespace boost {
+namespace detail {
+namespace is_function_ref_tester_ {
+
+template <class T>
+boost::type_traits::no_type BOOST_TT_DECL is_function_ref_tester(T& ...);
+
+#if !defined(BOOST_TT_PREPROCESSING_MODE)
+// preprocessor-generated part, don't edit by hand!
+
+template <class R>
+boost::type_traits::yes_type is_function_ref_tester(R (&)(), int);
+
+template <class R,class T0 >
+boost::type_traits::yes_type is_function_ref_tester(R (&)(T0), int);
+
+template <class R,class T0,class T1 >
+boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1), int);
+
+template <class R,class T0,class T1,class T2 >
+boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2), int);
+
+template <class R,class T0,class T1,class T2,class T3 >
+boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3), int);
+
+template <class R,class T0,class T1,class T2,class T3,class T4 >
+boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4), int);
+
+template <class R,class T0,class T1,class T2,class T3,class T4,class T5 >
+boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5), int);
+
+template <class R,class T0,class T1,class T2,class T3,class T4,class T5,class T6 >
+boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6), int);
+
+template <class R,class T0,class T1,class T2,class T3,class T4,class T5,class T6,class T7 >
+boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7), int);
+
+template <class R,class T0,class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8 >
+boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8), int);
+
+template <class R,class T0,class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9 >
+boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9), int);
+
+template <class R,class T0,class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9,class T10 >
+boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10), int);
+
+template <class R,class T0,class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9,class T10,class T11 >
+boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11), int);
+
+template <class R,class T0,class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9,class T10,class T11,class T12 >
+boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12), int);
+
+template <class R,class T0,class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9,class T10,class T11,class T12,class T13 >
+boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13), int);
+
+template <class R,class T0,class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9,class T10,class T11,class T12,class T13,class T14 >
+boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14), int);
+
+template <class R,class T0,class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9,class T10,class T11,class T12,class T13,class T14,class T15 >
+boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15), int);
+
+template <class R,class T0,class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9,class T10,class T11,class T12,class T13,class T14,class T15,class T16 >
+boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16), int);
+
+template <class R,class T0,class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9,class T10,class T11,class T12,class T13,class T14,class T15,class T16,class T17 >
+boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17), int);
+
+template <class R,class T0,class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9,class T10,class T11,class T12,class T13,class T14,class T15,class T16,class T17,class T18 >
+boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18), int);
+
+template <class R,class T0,class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9,class T10,class T11,class T12,class T13,class T14,class T15,class T16,class T17,class T18,class T19 >
+boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19), int);
+
+template <class R,class T0,class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9,class T10,class T11,class T12,class T13,class T14,class T15,class T16,class T17,class T18,class T19,class T20 >
+boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20), int);
+
+template <class R,class T0,class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9,class T10,class T11,class T12,class T13,class T14,class T15,class T16,class T17,class T18,class T19,class T20,class T21 >
+boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21), int);
+
+template <class R,class T0,class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9,class T10,class T11,class T12,class T13,class T14,class T15,class T16,class T17,class T18,class T19,class T20,class T21,class T22 >
+boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22), int);
+
+template <class R,class T0,class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9,class T10,class T11,class T12,class T13,class T14,class T15,class T16,class T17,class T18,class T19,class T20,class T21,class T22,class T23 >
+boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23), int);
+
+template <class R,class T0,class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9,class T10,class T11,class T12,class T13,class T14,class T15,class T16,class T17,class T18,class T19,class T20,class T21,class T22,class T23,class T24 >
+boost::type_traits::yes_type is_function_ref_tester(R (&)(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24), int);
+
+#else
+
+#define BOOST_PP_ITERATION_PARAMS_1 \
+ (3, (0, 25, "boost/type_traits/detail/is_function_ref_tester.hpp"))
+#include BOOST_PP_ITERATE()
+
+#endif // BOOST_TT_PREPROCESSING_MODE
+
+} // namespace detail
+} // namespace python
+} // namespace boost
+
+#endif // BOOST_DETAIL_IS_FUNCTION_REF_TESTER_HPP_INCLUDED
+
+///// iteration
+
+#else
+#define i BOOST_PP_FRAME_ITERATION(1)
+
+template <class R BOOST_PP_COMMA_IF(i) BOOST_PP_ENUM_PARAMS(i,class T) >
+boost::type_traits::yes_type is_function_ref_tester(R (&)(BOOST_PP_ENUM_PARAMS(i,T)), int);
+
+#undef i
+#endif // BOOST_PP_IS_ITERATING
diff --git a/boost/boost/detail/is_incrementable.hpp b/boost/boost/detail/is_incrementable.hpp
new file mode 100644
index 00000000000..cb7d7a7b59d
--- /dev/null
+++ b/boost/boost/detail/is_incrementable.hpp
@@ -0,0 +1,124 @@
+// Copyright David Abrahams 2004. Use, modification and distribution is
+// 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)
+#ifndef IS_INCREMENTABLE_DWA200415_HPP
+# define IS_INCREMENTABLE_DWA200415_HPP
+
+# include <boost/type_traits/detail/template_arity_spec.hpp>
+# include <boost/type_traits/remove_cv.hpp>
+# include <boost/mpl/aux_/lambda_support.hpp>
+# include <boost/mpl/bool.hpp>
+# include <boost/detail/workaround.hpp>
+
+// Must be the last include
+# include <boost/type_traits/detail/bool_trait_def.hpp>
+
+namespace boost { namespace detail {
+
+// is_incrementable<T> metafunction
+//
+// Requires: Given x of type T&, if the expression ++x is well-formed
+// it must have complete type; otherwise, it must neither be ambiguous
+// nor violate access.
+
+// This namespace ensures that ADL doesn't mess things up.
+namespace is_incrementable_
+{
+ // a type returned from operator++ when no increment is found in the
+ // type's own namespace
+ struct tag {};
+
+ // any soaks up implicit conversions and makes the following
+ // operator++ less-preferred than any other such operator that
+ // might be found via ADL.
+ struct any { template <class T> any(T const&); };
+
+ // This is a last-resort operator++ for when none other is found
+# if BOOST_WORKAROUND(__GNUC__, == 4) && __GNUC_MINOR__ == 0 && __GNUC_PATCHLEVEL__ == 2
+
+}
+
+namespace is_incrementable_2
+{
+ is_incrementable_::tag operator++(is_incrementable_::any const&);
+ is_incrementable_::tag operator++(is_incrementable_::any const&,int);
+}
+using namespace is_incrementable_2;
+
+namespace is_incrementable_
+{
+
+# else
+
+ tag operator++(any const&);
+ tag operator++(any const&,int);
+
+# endif
+
+# if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3202)) \
+ || BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+# define BOOST_comma(a,b) (a)
+# else
+ // In case an operator++ is found that returns void, we'll use ++x,0
+ tag operator,(tag,int);
+# define BOOST_comma(a,b) (a,b)
+# endif
+
+ // two check overloads help us identify which operator++ was picked
+ char (& check(tag) )[2];
+
+ template <class T>
+ char check(T const&);
+
+
+ template <class T>
+ struct impl
+ {
+ static typename boost::remove_cv<T>::type& x;
+
+ BOOST_STATIC_CONSTANT(
+ bool
+ , value = sizeof(is_incrementable_::check(BOOST_comma(++x,0))) == 1
+ );
+ };
+
+ template <class T>
+ struct postfix_impl
+ {
+ static typename boost::remove_cv<T>::type& x;
+
+ BOOST_STATIC_CONSTANT(
+ bool
+ , value = sizeof(is_incrementable_::check(BOOST_comma(x++,0))) == 1
+ );
+ };
+}
+
+# undef BOOST_comma
+
+template<typename T>
+struct is_incrementable
+BOOST_TT_AUX_BOOL_C_BASE(::boost::detail::is_incrementable_::impl<T>::value)
+{
+ BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(::boost::detail::is_incrementable_::impl<T>::value)
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_incrementable,(T))
+};
+
+template<typename T>
+struct is_postfix_incrementable
+BOOST_TT_AUX_BOOL_C_BASE(::boost::detail::is_incrementable_::impl<T>::value)
+{
+ BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(::boost::detail::is_incrementable_::postfix_impl<T>::value)
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_postfix_incrementable,(T))
+};
+
+} // namespace detail
+
+BOOST_TT_AUX_TEMPLATE_ARITY_SPEC(1, ::boost::detail::is_incrementable)
+BOOST_TT_AUX_TEMPLATE_ARITY_SPEC(1, ::boost::detail::is_postfix_incrementable)
+
+} // namespace boost
+
+# include <boost/type_traits/detail/bool_trait_undef.hpp>
+
+#endif // IS_INCREMENTABLE_DWA200415_HPP
diff --git a/boost/boost/detail/is_xxx.hpp b/boost/boost/detail/is_xxx.hpp
new file mode 100644
index 00000000000..cb64fb32b81
--- /dev/null
+++ b/boost/boost/detail/is_xxx.hpp
@@ -0,0 +1,61 @@
+// Copyright David Abrahams 2005. 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_IS_XXX_DWA20051011_HPP
+# define BOOST_DETAIL_IS_XXX_DWA20051011_HPP
+
+# include <boost/config.hpp>
+# include <boost/mpl/bool.hpp>
+# include <boost/preprocessor/enum_params.hpp>
+
+# if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+# include <boost/type_traits/is_reference.hpp>
+# include <boost/type_traits/add_reference.hpp>
+
+# define BOOST_DETAIL_IS_XXX_DEF(name, qualified_name, nargs) \
+template <class X_> \
+struct is_##name \
+{ \
+ typedef char yes; \
+ typedef char (&no)[2]; \
+ \
+ static typename add_reference<X_>::type dummy; \
+ \
+ struct helpers \
+ { \
+ template < BOOST_PP_ENUM_PARAMS_Z(1, nargs, class U) > \
+ static yes test( \
+ qualified_name< BOOST_PP_ENUM_PARAMS_Z(1, nargs, U) >&, int \
+ ); \
+ \
+ template <class U> \
+ static no test(U&, ...); \
+ }; \
+ \
+ BOOST_STATIC_CONSTANT( \
+ bool, value \
+ = !is_reference<X_>::value \
+ & (sizeof(helpers::test(dummy, 0)) == sizeof(yes))); \
+ \
+ typedef mpl::bool_<value> type; \
+};
+
+# else
+
+# define BOOST_DETAIL_IS_XXX_DEF(name, qualified_name, nargs) \
+template <class T> \
+struct is_##name : mpl::false_ \
+{ \
+}; \
+ \
+template < BOOST_PP_ENUM_PARAMS_Z(1, nargs, class T) > \
+struct is_##name< \
+ qualified_name< BOOST_PP_ENUM_PARAMS_Z(1, nargs, T) > \
+> \
+ : mpl::true_ \
+{ \
+};
+
+# endif
+
+#endif // BOOST_DETAIL_IS_XXX_DWA20051011_HPP
diff --git a/boost/boost/detail/iterator.hpp b/boost/boost/detail/iterator.hpp
new file mode 100644
index 00000000000..5bb9c6269cf
--- /dev/null
+++ b/boost/boost/detail/iterator.hpp
@@ -0,0 +1,494 @@
+// (C) Copyright David Abrahams 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)
+
+// Boost versions of
+//
+// std::iterator_traits<>::iterator_category
+// std::iterator_traits<>::difference_type
+// std::distance()
+//
+// ...for all compilers and iterators
+//
+// Additionally, if X is a pointer
+// std::iterator_traits<X>::pointer
+
+// Otherwise, if partial specialization is supported or X is not a pointer
+// std::iterator_traits<X>::value_type
+// std::iterator_traits<X>::pointer
+// std::iterator_traits<X>::reference
+//
+// See http://www.boost.org for most recent version including documentation.
+
+// Revision History
+// 04 Mar 2001 - More attempted fixes for Intel C++ (David Abrahams)
+// 03 Mar 2001 - Put all implementation into namespace
+// boost::detail::iterator_traits_. Some progress made on fixes
+// for Intel compiler. (David Abrahams)
+// 02 Mar 2001 - Changed BOOST_MSVC to BOOST_MSVC_STD_ITERATOR in a few
+// places. (Jeremy Siek)
+// 19 Feb 2001 - Improved workarounds for stock MSVC6; use yes_type and
+// no_type from type_traits.hpp; stopped trying to remove_cv
+// before detecting is_pointer, in honor of the new type_traits
+// semantics. (David Abrahams)
+// 13 Feb 2001 - Make it work with nearly all standard-conforming iterators
+// under raw VC6. The one category remaining which will fail is
+// that of iterators derived from std::iterator but not
+// boost::iterator and which redefine difference_type.
+// 11 Feb 2001 - Clean away code which can never be used (David Abrahams)
+// 09 Feb 2001 - Always have a definition for each traits member, even if it
+// can't be properly deduced. These will be incomplete types in
+// some cases (undefined<void>), but it helps suppress MSVC errors
+// elsewhere (David Abrahams)
+// 07 Feb 2001 - Support for more of the traits members where possible, making
+// this useful as a replacement for std::iterator_traits<T> when
+// used as a default template parameter.
+// 06 Feb 2001 - Removed useless #includes of standard library headers
+// (David Abrahams)
+
+#ifndef ITERATOR_DWA122600_HPP_
+# define ITERATOR_DWA122600_HPP_
+
+# include <boost/config.hpp>
+# include <iterator>
+
+// STLPort 4.0 and betas have a bug when debugging is enabled and there is no
+// partial specialization: instead of an iterator_category typedef, the standard
+// container iterators have _Iterator_category.
+//
+// Also, whether debugging is enabled or not, there is a broken specialization
+// of std::iterator<output_iterator_tag,void,void,void,void> which has no
+// typedefs but iterator_category.
+# if defined(__SGI_STL_PORT)
+
+# if (__SGI_STL_PORT <= 0x410) && !defined(__STL_CLASS_PARTIAL_SPECIALIZATION) && defined(__STL_DEBUG)
+# define BOOST_BAD_CONTAINER_ITERATOR_CATEGORY_TYPEDEF
+# endif
+
+# define BOOST_BAD_OUTPUT_ITERATOR_SPECIALIZATION
+
+# endif // STLPort <= 4.1b4 && no partial specialization
+
+# if !defined(BOOST_NO_STD_ITERATOR_TRAITS) \
+ && !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
+ && !defined(BOOST_MSVC_STD_ITERATOR)
+
+namespace boost { namespace detail {
+
+// Define a new template so it can be specialized
+template <class Iterator>
+struct iterator_traits
+ : std::iterator_traits<Iterator>
+{};
+using std::distance;
+
+}} // namespace boost::detail
+
+# else
+
+# if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
+ && !defined(BOOST_MSVC_STD_ITERATOR)
+
+// This is the case where everything conforms except BOOST_NO_STD_ITERATOR_TRAITS
+
+namespace boost { namespace detail {
+
+// Rogue Wave Standard Library fools itself into thinking partial
+// specialization is missing on some platforms (e.g. Sun), so fails to
+// supply iterator_traits!
+template <class Iterator>
+struct iterator_traits
+{
+ typedef typename Iterator::value_type value_type;
+ typedef typename Iterator::reference reference;
+ typedef typename Iterator::pointer pointer;
+ typedef typename Iterator::difference_type difference_type;
+ typedef typename Iterator::iterator_category iterator_category;
+};
+
+template <class T>
+struct iterator_traits<T*>
+{
+ typedef T value_type;
+ typedef T& reference;
+ typedef T* pointer;
+ typedef std::ptrdiff_t difference_type;
+ typedef std::random_access_iterator_tag iterator_category;
+};
+
+template <class T>
+struct iterator_traits<T const*>
+{
+ typedef T value_type;
+ typedef T const& reference;
+ typedef T const* pointer;
+ typedef std::ptrdiff_t difference_type;
+ typedef std::random_access_iterator_tag iterator_category;
+};
+
+}} // namespace boost::detail
+
+# else
+
+# include <boost/type_traits/remove_const.hpp>
+# include <boost/type_traits/detail/yes_no_type.hpp>
+# include <boost/type_traits/is_pointer.hpp>
+
+# ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+# include <boost/type_traits/is_same.hpp>
+# include <boost/type_traits/remove_pointer.hpp>
+# endif
+# ifdef BOOST_BAD_OUTPUT_ITERATOR_SPECIALIZATION
+# include <boost/type_traits/is_base_and_derived.hpp>
+# endif
+
+# include <boost/mpl/if.hpp>
+# include <boost/mpl/has_xxx.hpp>
+# include <cstddef>
+
+// should be the last #include
+# include "boost/type_traits/detail/bool_trait_def.hpp"
+
+namespace boost { namespace detail {
+
+BOOST_MPL_HAS_XXX_TRAIT_DEF(value_type)
+BOOST_MPL_HAS_XXX_TRAIT_DEF(reference)
+BOOST_MPL_HAS_XXX_TRAIT_DEF(pointer)
+BOOST_MPL_HAS_XXX_TRAIT_DEF(difference_type)
+BOOST_MPL_HAS_XXX_TRAIT_DEF(iterator_category)
+
+// is_mutable_iterator --
+//
+// A metafunction returning true iff T is a mutable iterator type
+// with a nested value_type. Will only work portably with iterators
+// whose operator* returns a reference, but that seems to be OK for
+// the iterators supplied by Dinkumware. Some input iterators may
+// compile-time if they arrive here, and if the compiler is strict
+// about not taking the address of an rvalue.
+
+// This one detects ordinary mutable iterators - the result of
+// operator* is convertible to the value_type.
+template <class T>
+type_traits::yes_type is_mutable_iterator_helper(T const*, BOOST_DEDUCED_TYPENAME T::value_type*);
+
+// Since you can't take the address of an rvalue, the guts of
+// is_mutable_iterator_impl will fail if we use &*t directly. This
+// makes sure we can still work with non-lvalue iterators.
+template <class T> T* mutable_iterator_lvalue_helper(T& x);
+int mutable_iterator_lvalue_helper(...);
+
+
+// This one detects output iterators such as ostream_iterator which
+// return references to themselves.
+template <class T>
+type_traits::yes_type is_mutable_iterator_helper(T const*, T const*);
+
+type_traits::no_type is_mutable_iterator_helper(...);
+
+template <class T>
+struct is_mutable_iterator_impl
+{
+ static T t;
+
+ BOOST_STATIC_CONSTANT(
+ bool, value = sizeof(
+ detail::is_mutable_iterator_helper(
+ (T*)0
+ , mutable_iterator_lvalue_helper(*t) // like &*t
+ ))
+ == sizeof(type_traits::yes_type)
+ );
+};
+
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(
+ is_mutable_iterator,T,::boost::detail::is_mutable_iterator_impl<T>::value)
+
+
+// is_full_iterator_traits --
+//
+// A metafunction returning true iff T has all the requisite nested
+// types to satisfy the requirements for a fully-conforming
+// iterator_traits implementation.
+template <class T>
+struct is_full_iterator_traits_impl
+{
+ enum { value =
+ has_value_type<T>::value
+ & has_reference<T>::value
+ & has_pointer<T>::value
+ & has_difference_type<T>::value
+ & has_iterator_category<T>::value
+ };
+};
+
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(
+ is_full_iterator_traits,T,::boost::detail::is_full_iterator_traits_impl<T>::value)
+
+
+# ifdef BOOST_BAD_CONTAINER_ITERATOR_CATEGORY_TYPEDEF
+BOOST_MPL_HAS_XXX_TRAIT_DEF(_Iterator_category)
+
+// is_stlport_40_debug_iterator --
+//
+// A metafunction returning true iff T has all the requisite nested
+// types to satisfy the requirements of an STLPort 4.0 debug iterator
+// iterator_traits implementation.
+template <class T>
+struct is_stlport_40_debug_iterator_impl
+{
+ enum { value =
+ has_value_type<T>::value
+ & has_reference<T>::value
+ & has_pointer<T>::value
+ & has_difference_type<T>::value
+ & has__Iterator_category<T>::value
+ };
+};
+
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(
+ is_stlport_40_debug_iterator,T,::boost::detail::is_stlport_40_debug_iterator_impl<T>::value)
+
+template <class T>
+struct stlport_40_debug_iterator_traits
+{
+ typedef typename T::value_type value_type;
+ typedef typename T::reference reference;
+ typedef typename T::pointer pointer;
+ typedef typename T::difference_type difference_type;
+ typedef typename T::_Iterator_category iterator_category;
+};
+# endif // BOOST_BAD_CONTAINER_ITERATOR_CATEGORY_TYPEDEF
+
+template <class T> struct pointer_iterator_traits;
+
+# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+template <class T>
+struct pointer_iterator_traits<T*>
+{
+ typedef typename remove_const<T>::type value_type;
+ typedef T* pointer;
+ typedef T& reference;
+ typedef std::random_access_iterator_tag iterator_category;
+ typedef std::ptrdiff_t difference_type;
+};
+# else
+
+// In case of no template partial specialization, and if T is a
+// pointer, iterator_traits<T>::value_type can still be computed. For
+// some basic types, remove_pointer is manually defined in
+// type_traits/broken_compiler_spec.hpp. For others, do it yourself.
+
+template<class P> class please_invoke_BOOST_TT_BROKEN_COMPILER_SPEC_on_cv_unqualified_pointee;
+
+template<class P>
+struct pointer_value_type
+ : mpl::if_<
+ is_same<P, typename remove_pointer<P>::type>
+ , please_invoke_BOOST_TT_BROKEN_COMPILER_SPEC_on_cv_unqualified_pointee<P>
+ , typename remove_const<
+ typename remove_pointer<P>::type
+ >::type
+ >
+{
+};
+
+
+template<class P>
+struct pointer_reference
+ : mpl::if_<
+ is_same<P, typename remove_pointer<P>::type>
+ , please_invoke_BOOST_TT_BROKEN_COMPILER_SPEC_on_cv_unqualified_pointee<P>
+ , typename remove_pointer<P>::type&
+ >
+{
+};
+
+template <class T>
+struct pointer_iterator_traits
+{
+ typedef T pointer;
+ typedef std::random_access_iterator_tag iterator_category;
+ typedef std::ptrdiff_t difference_type;
+
+ typedef typename pointer_value_type<T>::type value_type;
+ typedef typename pointer_reference<T>::type reference;
+};
+
+# endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+// We'll sort iterator types into one of these classifications, from which we
+// can determine the difference_type, pointer, reference, and value_type
+template <class Iterator>
+struct standard_iterator_traits
+{
+ typedef typename Iterator::difference_type difference_type;
+ typedef typename Iterator::value_type value_type;
+ typedef typename Iterator::pointer pointer;
+ typedef typename Iterator::reference reference;
+ typedef typename Iterator::iterator_category iterator_category;
+};
+
+template <class Iterator>
+struct msvc_stdlib_mutable_traits
+ : std::iterator_traits<Iterator>
+{
+ typedef typename std::iterator_traits<Iterator>::distance_type difference_type;
+ typedef typename std::iterator_traits<Iterator>::value_type* pointer;
+ typedef typename std::iterator_traits<Iterator>::value_type& reference;
+};
+
+template <class Iterator>
+struct msvc_stdlib_const_traits
+ : std::iterator_traits<Iterator>
+{
+ typedef typename std::iterator_traits<Iterator>::distance_type difference_type;
+ typedef const typename std::iterator_traits<Iterator>::value_type* pointer;
+ typedef const typename std::iterator_traits<Iterator>::value_type& reference;
+};
+
+# ifdef BOOST_BAD_OUTPUT_ITERATOR_SPECIALIZATION
+template <class Iterator>
+struct is_bad_output_iterator
+ : is_base_and_derived<
+ std::iterator<std::output_iterator_tag,void,void,void,void>
+ , Iterator>
+{
+};
+
+struct bad_output_iterator_traits
+{
+ typedef void value_type;
+ typedef void difference_type;
+ typedef std::output_iterator_tag iterator_category;
+ typedef void pointer;
+ typedef void reference;
+};
+# endif
+
+// If we're looking at an MSVC6 (old Dinkumware) ``standard''
+// iterator, this will generate an appropriate traits class.
+template <class Iterator>
+struct msvc_stdlib_iterator_traits
+ : mpl::if_<
+ is_mutable_iterator<Iterator>
+ , msvc_stdlib_mutable_traits<Iterator>
+ , msvc_stdlib_const_traits<Iterator>
+ >::type
+{};
+
+template <class Iterator>
+struct non_pointer_iterator_traits
+ : mpl::if_<
+ // if the iterator contains all the right nested types...
+ is_full_iterator_traits<Iterator>
+ // Use a standard iterator_traits implementation
+ , standard_iterator_traits<Iterator>
+# ifdef BOOST_BAD_CONTAINER_ITERATOR_CATEGORY_TYPEDEF
+ // Check for STLPort 4.0 broken _Iterator_category type
+ , mpl::if_<
+ is_stlport_40_debug_iterator<Iterator>
+ , stlport_40_debug_iterator_traits<Iterator>
+# endif
+ // Otherwise, assume it's a Dinkum iterator
+ , msvc_stdlib_iterator_traits<Iterator>
+# ifdef BOOST_BAD_CONTAINER_ITERATOR_CATEGORY_TYPEDEF
+ >::type
+# endif
+ >::type
+{
+};
+
+template <class Iterator>
+struct iterator_traits_aux
+ : mpl::if_<
+ is_pointer<Iterator>
+ , pointer_iterator_traits<Iterator>
+ , non_pointer_iterator_traits<Iterator>
+ >::type
+{
+};
+
+template <class Iterator>
+struct iterator_traits
+{
+ // Explicit forwarding from base class needed to keep MSVC6 happy
+ // under some circumstances.
+ private:
+# ifdef BOOST_BAD_OUTPUT_ITERATOR_SPECIALIZATION
+ typedef
+ typename mpl::if_<
+ is_bad_output_iterator<Iterator>
+ , bad_output_iterator_traits
+ , iterator_traits_aux<Iterator>
+ >::type base;
+# else
+ typedef iterator_traits_aux<Iterator> base;
+# endif
+ public:
+ typedef typename base::value_type value_type;
+ typedef typename base::pointer pointer;
+ typedef typename base::reference reference;
+ typedef typename base::difference_type difference_type;
+ typedef typename base::iterator_category iterator_category;
+};
+
+// This specialization cuts off ETI (Early Template Instantiation) for MSVC.
+template <> struct iterator_traits<int>
+{
+ typedef int value_type;
+ typedef int pointer;
+ typedef int reference;
+ typedef int difference_type;
+ typedef int iterator_category;
+};
+
+}} // namespace boost::detail
+
+# endif // workarounds
+
+namespace boost { namespace detail {
+
+namespace iterator_traits_
+{
+ template <class Iterator, class Difference>
+ struct distance_select
+ {
+ static Difference execute(Iterator i1, const Iterator i2, ...)
+ {
+ Difference result = 0;
+ while (i1 != i2)
+ {
+ ++i1;
+ ++result;
+ }
+ return result;
+ }
+
+ static Difference execute(Iterator i1, const Iterator i2, std::random_access_iterator_tag*)
+ {
+ return i2 - i1;
+ }
+ };
+} // namespace boost::detail::iterator_traits_
+
+template <class Iterator>
+inline typename iterator_traits<Iterator>::difference_type
+distance(Iterator first, Iterator last)
+{
+ typedef typename iterator_traits<Iterator>::difference_type diff_t;
+ typedef typename ::boost::detail::iterator_traits<Iterator>::iterator_category iterator_category;
+
+ return iterator_traits_::distance_select<Iterator,diff_t>::execute(
+ first, last, (iterator_category*)0);
+}
+
+}}
+
+# endif
+
+
+# undef BOOST_BAD_CONTAINER_ITERATOR_CATEGORY_TYPEDEF
+# undef BOOST_BAD_OUTPUT_ITERATOR_SPECIALIZATION
+
+#endif // ITERATOR_DWA122600_HPP_
diff --git a/boost/boost/detail/lightweight_mutex.hpp b/boost/boost/detail/lightweight_mutex.hpp
new file mode 100644
index 00000000000..a0936cbb95a
--- /dev/null
+++ b/boost/boost/detail/lightweight_mutex.hpp
@@ -0,0 +1,42 @@
+#ifndef BOOST_DETAIL_LIGHTWEIGHT_MUTEX_HPP_INCLUDED
+#define BOOST_DETAIL_LIGHTWEIGHT_MUTEX_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+// boost/detail/lightweight_mutex.hpp - lightweight mutex
+//
+// Copyright (c) 2002, 2003 Peter Dimov and Multi Media Ltd.
+//
+// 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)
+//
+// typedef <unspecified> boost::detail::lightweight_mutex;
+//
+// boost::detail::lightweight_mutex is a header-only implementation of
+// a subset of the Mutex concept requirements:
+//
+// http://www.boost.org/doc/html/threads/concepts.html#threads.concepts.Mutex
+//
+// It maps to a CRITICAL_SECTION on Windows or a pthread_mutex on POSIX.
+//
+
+#include <boost/config.hpp>
+
+#if !defined(BOOST_HAS_THREADS)
+# include <boost/detail/lwm_nop.hpp>
+#elif defined(WIN32) || defined(_WIN32) || defined(__WIN32__)
+# include <boost/detail/lwm_win32_cs.hpp>
+#elif defined(BOOST_HAS_PTHREADS)
+# include <boost/detail/lwm_pthreads.hpp>
+#else
+// Use #define BOOST_DISABLE_THREADS to avoid the error
+# error Unrecognized threading platform
+#endif
+
+#endif // #ifndef BOOST_DETAIL_LIGHTWEIGHT_MUTEX_HPP_INCLUDED
diff --git a/boost/boost/detail/lightweight_test.hpp b/boost/boost/detail/lightweight_test.hpp
new file mode 100644
index 00000000000..b651e0e335a
--- /dev/null
+++ b/boost/boost/detail/lightweight_test.hpp
@@ -0,0 +1,75 @@
+#ifndef BOOST_DETAIL_LIGHTWEIGHT_TEST_HPP_INCLUDED
+#define BOOST_DETAIL_LIGHTWEIGHT_TEST_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+// boost/detail/lightweight_test.hpp - lightweight test library
+//
+// Copyright (c) 2002 Peter Dimov and Multi Media Ltd.
+//
+// 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)
+//
+// BOOST_TEST(expression)
+// BOOST_ERROR(message)
+//
+// int boost::report_errors()
+//
+
+#include <boost/current_function.hpp>
+#include <iostream>
+
+namespace boost
+{
+
+namespace detail
+{
+
+inline int & test_errors()
+{
+ static int x = 0;
+ return x;
+}
+
+inline void test_failed_impl(char const * expr, char const * file, int line, char const * function)
+{
+ std::cerr << file << "(" << line << "): test '" << expr << "' failed in function '" << function << "'" << std::endl;
+ ++test_errors();
+}
+
+inline void error_impl(char const * msg, char const * file, int line, char const * function)
+{
+ std::cerr << file << "(" << line << "): " << msg << " in function '" << function << "'" << std::endl;
+ ++test_errors();
+}
+
+} // namespace detail
+
+inline int report_errors()
+{
+ int errors = detail::test_errors();
+
+ if(errors == 0)
+ {
+ std::cerr << "No errors detected." << std::endl;
+ return 0;
+ }
+ else
+ {
+ std::cerr << errors << " error" << (errors == 1? "": "s") << " detected." << std::endl;
+ return 1;
+ }
+}
+
+} // namespace boost
+
+#define BOOST_TEST(expr) ((expr)? (void)0: ::boost::detail::test_failed_impl(#expr, __FILE__, __LINE__, BOOST_CURRENT_FUNCTION))
+#define BOOST_ERROR(msg) ::boost::detail::error_impl(msg, __FILE__, __LINE__, BOOST_CURRENT_FUNCTION)
+
+#endif // #ifndef BOOST_DETAIL_LIGHTWEIGHT_TEST_HPP_INCLUDED
diff --git a/boost/boost/detail/limits.hpp b/boost/boost/detail/limits.hpp
new file mode 100644
index 00000000000..6f018dfaca7
--- /dev/null
+++ b/boost/boost/detail/limits.hpp
@@ -0,0 +1,449 @@
+// Copyright 2001 John Maddock
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+/*
+ * Copyright (c) 1997
+ * Silicon Graphics Computer Systems, Inc.
+ *
+ * Permission to use, copy, modify, distribute and sell this software
+ * and its documentation for any purpose is hereby granted without fee,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear
+ * in supporting documentation. Silicon Graphics makes no
+ * representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ */
+
+/* NOTE: This is not portable code. Parts of numeric_limits<> are
+ * inherently machine-dependent, and this file is written for the MIPS
+ * architecture and the SGI MIPSpro C++ compiler. Parts of it (in
+ * particular, some of the characteristics of floating-point types)
+ * are almost certainly incorrect for any other platform.
+ */
+
+/* The above comment is almost certainly out of date. This file works
+ * on systems other than SGI MIPSpro C++ now.
+ */
+
+/*
+ * Revision history:
+ * 21 Sep 2001:
+ * Only include <cwchar> if BOOST_NO_CWCHAR is defined. (Darin Adler)
+ * 10 Aug 2001:
+ * Added MIPS (big endian) to the big endian family. (Jens Maurer)
+ * 13 Apr 2001:
+ * Added powerpc to the big endian family. (Jeremy Siek)
+ * 5 Apr 2001:
+ * Added sparc (big endian) processor support (John Maddock).
+ * Initial sub:
+ * Modified by Jens Maurer for gcc 2.95 on x86.
+ */
+
+#ifndef BOOST_SGI_CPP_LIMITS
+#define BOOST_SGI_CPP_LIMITS
+
+#include <climits>
+#include <cfloat>
+#include <boost/config.hpp>
+#include <boost/detail/endian.hpp>
+
+#ifndef BOOST_NO_CWCHAR
+#include <cwchar> // for WCHAR_MIN and WCHAR_MAX
+#endif
+
+namespace std {
+
+enum float_round_style {
+ round_indeterminate = -1,
+ round_toward_zero = 0,
+ round_to_nearest = 1,
+ round_toward_infinity = 2,
+ round_toward_neg_infinity = 3
+};
+
+enum float_denorm_style {
+ denorm_indeterminate = -1,
+ denorm_absent = 0,
+ denorm_present = 1
+};
+
+// The C++ standard (section 18.2.1) requires that some of the members of
+// numeric_limits be static const data members that are given constant-
+// initializers within the class declaration. On compilers where the
+// BOOST_NO_INCLASS_MEMBER_INITIALIZATION macro is defined, it is impossible to write
+// a standard-conforming numeric_limits class.
+//
+// There are two possible workarounds: either initialize the data
+// members outside the class, or change them from data members to
+// enums. Neither workaround is satisfactory: the former makes it
+// impossible to use the data members in constant-expressions, and the
+// latter means they have the wrong type and that it is impossible to
+// take their addresses. We choose the former workaround.
+
+#ifdef BOOST_NO_INCLASS_MEMBER_INITIALIZATION
+# define BOOST_STL_DECLARE_LIMITS_MEMBER(__mem_type, __mem_name, __mem_value) \
+ enum { __mem_name = __mem_value }
+#else /* BOOST_NO_INCLASS_MEMBER_INITIALIZATION */
+# define BOOST_STL_DECLARE_LIMITS_MEMBER(__mem_type, __mem_name, __mem_value) \
+ static const __mem_type __mem_name = __mem_value
+#endif /* BOOST_NO_INCLASS_MEMBER_INITIALIZATION */
+
+// Base class for all specializations of numeric_limits.
+template <class __number>
+class _Numeric_limits_base {
+public:
+ BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_specialized, false);
+
+ static __number min BOOST_PREVENT_MACRO_SUBSTITUTION () throw() { return __number(); }
+ static __number max BOOST_PREVENT_MACRO_SUBSTITUTION () throw() { return __number(); }
+
+ BOOST_STL_DECLARE_LIMITS_MEMBER(int, digits, 0);
+ BOOST_STL_DECLARE_LIMITS_MEMBER(int, digits10, 0);
+
+ BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_signed, false);
+ BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_integer, false);
+ BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_exact, false);
+
+ BOOST_STL_DECLARE_LIMITS_MEMBER(int, radix, 0);
+
+ static __number epsilon() throw() { return __number(); }
+ static __number round_error() throw() { return __number(); }
+
+ BOOST_STL_DECLARE_LIMITS_MEMBER(int, min_exponent, 0);
+ BOOST_STL_DECLARE_LIMITS_MEMBER(int, min_exponent10, 0);
+ BOOST_STL_DECLARE_LIMITS_MEMBER(int, max_exponent, 0);
+ BOOST_STL_DECLARE_LIMITS_MEMBER(int, max_exponent10, 0);
+
+ BOOST_STL_DECLARE_LIMITS_MEMBER(bool, has_infinity, false);
+ BOOST_STL_DECLARE_LIMITS_MEMBER(bool, has_quiet_NaN, false);
+ BOOST_STL_DECLARE_LIMITS_MEMBER(bool, has_signaling_NaN, false);
+ BOOST_STL_DECLARE_LIMITS_MEMBER(float_denorm_style,
+ has_denorm,
+ denorm_absent);
+ BOOST_STL_DECLARE_LIMITS_MEMBER(bool, has_denorm_loss, false);
+
+ static __number infinity() throw() { return __number(); }
+ static __number quiet_NaN() throw() { return __number(); }
+ static __number signaling_NaN() throw() { return __number(); }
+ static __number denorm_min() throw() { return __number(); }
+
+ BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_iec559, false);
+ BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_bounded, false);
+ BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_modulo, false);
+
+ BOOST_STL_DECLARE_LIMITS_MEMBER(bool, traps, false);
+ BOOST_STL_DECLARE_LIMITS_MEMBER(bool, tinyness_before, false);
+ BOOST_STL_DECLARE_LIMITS_MEMBER(float_round_style,
+ round_style,
+ round_toward_zero);
+};
+
+// Base class for integers.
+
+template <class _Int,
+ _Int __imin,
+ _Int __imax,
+ int __idigits = -1>
+class _Integer_limits : public _Numeric_limits_base<_Int>
+{
+public:
+ BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_specialized, true);
+
+ static _Int min BOOST_PREVENT_MACRO_SUBSTITUTION () throw() { return __imin; }
+ static _Int max BOOST_PREVENT_MACRO_SUBSTITUTION () throw() { return __imax; }
+
+ BOOST_STL_DECLARE_LIMITS_MEMBER(int,
+ digits,
+ (__idigits < 0) ? (int)(sizeof(_Int) * CHAR_BIT)
+ - (__imin == 0 ? 0 : 1)
+ : __idigits);
+ BOOST_STL_DECLARE_LIMITS_MEMBER(int, digits10, (digits * 301) / 1000);
+ // log 2 = 0.301029995664...
+
+ BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_signed, __imin != 0);
+ BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_integer, true);
+ BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_exact, true);
+ BOOST_STL_DECLARE_LIMITS_MEMBER(int, radix, 2);
+
+ BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_bounded, true);
+ BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_modulo, true);
+};
+
+#if defined(BOOST_BIG_ENDIAN)
+
+ template<class Number, unsigned int Word>
+ struct float_helper{
+ static Number get_word() throw() {
+ // sizeof(long double) == 16
+ const unsigned int _S_word[4] = { Word, 0, 0, 0 };
+ return *reinterpret_cast<const Number*>(&_S_word);
+ }
+};
+
+#else
+
+ template<class Number, unsigned int Word>
+ struct float_helper{
+ static Number get_word() throw() {
+ // sizeof(long double) == 12, but only 10 bytes significant
+ const unsigned int _S_word[4] = { 0, 0, 0, Word };
+ return *reinterpret_cast<const Number*>(
+ reinterpret_cast<const char *>(&_S_word)+16-
+ (sizeof(Number) == 12 ? 10 : sizeof(Number)));
+ }
+};
+
+#endif
+
+// Base class for floating-point numbers.
+template <class __number,
+ int __Digits, int __Digits10,
+ int __MinExp, int __MaxExp,
+ int __MinExp10, int __MaxExp10,
+ unsigned int __InfinityWord,
+ unsigned int __QNaNWord, unsigned int __SNaNWord,
+ bool __IsIEC559,
+ float_round_style __RoundStyle>
+class _Floating_limits : public _Numeric_limits_base<__number>
+{
+public:
+ BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_specialized, true);
+
+ BOOST_STL_DECLARE_LIMITS_MEMBER(int, digits, __Digits);
+ BOOST_STL_DECLARE_LIMITS_MEMBER(int, digits10, __Digits10);
+
+ BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_signed, true);
+
+ BOOST_STL_DECLARE_LIMITS_MEMBER(int, radix, 2);
+
+ BOOST_STL_DECLARE_LIMITS_MEMBER(int, min_exponent, __MinExp);
+ BOOST_STL_DECLARE_LIMITS_MEMBER(int, max_exponent, __MaxExp);
+ BOOST_STL_DECLARE_LIMITS_MEMBER(int, min_exponent10, __MinExp10);
+ BOOST_STL_DECLARE_LIMITS_MEMBER(int, max_exponent10, __MaxExp10);
+
+ BOOST_STL_DECLARE_LIMITS_MEMBER(bool, has_infinity, true);
+ BOOST_STL_DECLARE_LIMITS_MEMBER(bool, has_quiet_NaN, true);
+ BOOST_STL_DECLARE_LIMITS_MEMBER(bool, has_signaling_NaN, true);
+ BOOST_STL_DECLARE_LIMITS_MEMBER(float_denorm_style,
+ has_denorm,
+ denorm_indeterminate);
+ BOOST_STL_DECLARE_LIMITS_MEMBER(bool, has_denorm_loss, false);
+
+
+ static __number infinity() throw() {
+ return float_helper<__number, __InfinityWord>::get_word();
+ }
+ static __number quiet_NaN() throw() {
+ return float_helper<__number,__QNaNWord>::get_word();
+ }
+ static __number signaling_NaN() throw() {
+ return float_helper<__number,__SNaNWord>::get_word();
+ }
+
+ BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_iec559, __IsIEC559);
+ BOOST_STL_DECLARE_LIMITS_MEMBER(bool, is_bounded, true);
+ BOOST_STL_DECLARE_LIMITS_MEMBER(bool, traps, false /* was: true */ );
+ BOOST_STL_DECLARE_LIMITS_MEMBER(bool, tinyness_before, false);
+
+ BOOST_STL_DECLARE_LIMITS_MEMBER(float_round_style, round_style, __RoundStyle);
+};
+
+// Class numeric_limits
+
+// The unspecialized class.
+
+template<class T>
+class numeric_limits : public _Numeric_limits_base<T> {};
+
+// Specializations for all built-in integral types.
+
+template<>
+class numeric_limits<bool>
+ : public _Integer_limits<bool, false, true, 0>
+{};
+
+template<>
+class numeric_limits<char>
+ : public _Integer_limits<char, CHAR_MIN, CHAR_MAX>
+{};
+
+template<>
+class numeric_limits<signed char>
+ : public _Integer_limits<signed char, SCHAR_MIN, SCHAR_MAX>
+{};
+
+template<>
+class numeric_limits<unsigned char>
+ : public _Integer_limits<unsigned char, 0, UCHAR_MAX>
+{};
+
+#ifndef BOOST_NO_INTRINSIC_WCHAR_T
+template<>
+class numeric_limits<wchar_t>
+#if !defined(WCHAR_MAX) || !defined(WCHAR_MIN)
+#if defined(_WIN32) || defined(__CYGWIN__)
+ : public _Integer_limits<wchar_t, 0, USHRT_MAX>
+#elif defined(__hppa)
+// wchar_t has "unsigned int" as the underlying type
+ : public _Integer_limits<wchar_t, 0, UINT_MAX>
+#else
+// assume that wchar_t has "int" as the underlying type
+ : public _Integer_limits<wchar_t, INT_MIN, INT_MAX>
+#endif
+#else
+// we have WCHAR_MIN and WCHAR_MAX defined, so use it
+ : public _Integer_limits<wchar_t, WCHAR_MIN, WCHAR_MAX>
+#endif
+{};
+#endif
+
+template<>
+class numeric_limits<short>
+ : public _Integer_limits<short, SHRT_MIN, SHRT_MAX>
+{};
+
+template<>
+class numeric_limits<unsigned short>
+ : public _Integer_limits<unsigned short, 0, USHRT_MAX>
+{};
+
+template<>
+class numeric_limits<int>
+ : public _Integer_limits<int, INT_MIN, INT_MAX>
+{};
+
+template<>
+class numeric_limits<unsigned int>
+ : public _Integer_limits<unsigned int, 0, UINT_MAX>
+{};
+
+template<>
+class numeric_limits<long>
+ : public _Integer_limits<long, LONG_MIN, LONG_MAX>
+{};
+
+template<>
+class numeric_limits<unsigned long>
+ : public _Integer_limits<unsigned long, 0, ULONG_MAX>
+{};
+
+#ifdef __GNUC__
+
+// Some compilers have long long, but don't define the
+// LONGLONG_MIN and LONGLONG_MAX macros in limits.h. This
+// assumes that long long is 64 bits.
+#if !defined(LONGLONG_MAX) && !defined(ULONGLONG_MAX)
+
+# define ULONGLONG_MAX 0xffffffffffffffffLLU
+# define LONGLONG_MAX 0x7fffffffffffffffLL
+
+#endif
+
+#if !defined(LONGLONG_MIN)
+# define LONGLONG_MIN (-LONGLONG_MAX - 1)
+#endif
+
+
+#if !defined(ULONGLONG_MIN)
+# define ULONGLONG_MIN 0
+#endif
+
+#endif /* __GNUC__ */
+
+// Specializations for all built-in floating-point type.
+
+template<> class numeric_limits<float>
+ : public _Floating_limits<float,
+ FLT_MANT_DIG, // Binary digits of precision
+ FLT_DIG, // Decimal digits of precision
+ FLT_MIN_EXP, // Minimum exponent
+ FLT_MAX_EXP, // Maximum exponent
+ FLT_MIN_10_EXP, // Minimum base 10 exponent
+ FLT_MAX_10_EXP, // Maximum base 10 exponent
+#if defined(BOOST_BIG_ENDIAN)
+ 0x7f80 << (sizeof(int)*CHAR_BIT-16), // Last word of +infinity
+ 0x7f81 << (sizeof(int)*CHAR_BIT-16), // Last word of quiet NaN
+ 0x7fc1 << (sizeof(int)*CHAR_BIT-16), // Last word of signaling NaN
+#else
+ 0x7f800000u, // Last word of +infinity
+ 0x7f810000u, // Last word of quiet NaN
+ 0x7fc10000u, // Last word of signaling NaN
+#endif
+ true, // conforms to iec559
+ round_to_nearest>
+{
+public:
+ static float min BOOST_PREVENT_MACRO_SUBSTITUTION () throw() { return FLT_MIN; }
+ static float denorm_min() throw() { return FLT_MIN; }
+ static float max BOOST_PREVENT_MACRO_SUBSTITUTION () throw() { return FLT_MAX; }
+ static float epsilon() throw() { return FLT_EPSILON; }
+ static float round_error() throw() { return 0.5f; } // Units: ulps.
+};
+
+template<> class numeric_limits<double>
+ : public _Floating_limits<double,
+ DBL_MANT_DIG, // Binary digits of precision
+ DBL_DIG, // Decimal digits of precision
+ DBL_MIN_EXP, // Minimum exponent
+ DBL_MAX_EXP, // Maximum exponent
+ DBL_MIN_10_EXP, // Minimum base 10 exponent
+ DBL_MAX_10_EXP, // Maximum base 10 exponent
+#if defined(BOOST_BIG_ENDIAN)
+ 0x7ff0 << (sizeof(int)*CHAR_BIT-16), // Last word of +infinity
+ 0x7ff1 << (sizeof(int)*CHAR_BIT-16), // Last word of quiet NaN
+ 0x7ff9 << (sizeof(int)*CHAR_BIT-16), // Last word of signaling NaN
+#else
+ 0x7ff00000u, // Last word of +infinity
+ 0x7ff10000u, // Last word of quiet NaN
+ 0x7ff90000u, // Last word of signaling NaN
+#endif
+ true, // conforms to iec559
+ round_to_nearest>
+{
+public:
+ static double min BOOST_PREVENT_MACRO_SUBSTITUTION () throw() { return DBL_MIN; }
+ static double denorm_min() throw() { return DBL_MIN; }
+ static double max BOOST_PREVENT_MACRO_SUBSTITUTION () throw() { return DBL_MAX; }
+ static double epsilon() throw() { return DBL_EPSILON; }
+ static double round_error() throw() { return 0.5; } // Units: ulps.
+};
+
+template<> class numeric_limits<long double>
+ : public _Floating_limits<long double,
+ LDBL_MANT_DIG, // Binary digits of precision
+ LDBL_DIG, // Decimal digits of precision
+ LDBL_MIN_EXP, // Minimum exponent
+ LDBL_MAX_EXP, // Maximum exponent
+ LDBL_MIN_10_EXP,// Minimum base 10 exponent
+ LDBL_MAX_10_EXP,// Maximum base 10 exponent
+#if defined(BOOST_BIG_ENDIAN)
+ 0x7ff0 << (sizeof(int)*CHAR_BIT-16), // Last word of +infinity
+ 0x7ff1 << (sizeof(int)*CHAR_BIT-16), // Last word of quiet NaN
+ 0x7ff9 << (sizeof(int)*CHAR_BIT-16), // Last word of signaling NaN
+#else
+ 0x7fff8000u, // Last word of +infinity
+ 0x7fffc000u, // Last word of quiet NaN
+ 0x7fff9000u, // Last word of signaling NaN
+#endif
+ false, // Doesn't conform to iec559
+ round_to_nearest>
+{
+public:
+ static long double min BOOST_PREVENT_MACRO_SUBSTITUTION () throw() { return LDBL_MIN; }
+ static long double denorm_min() throw() { return LDBL_MIN; }
+ static long double max BOOST_PREVENT_MACRO_SUBSTITUTION () throw() { return LDBL_MAX; }
+ static long double epsilon() throw() { return LDBL_EPSILON; }
+ static long double round_error() throw() { return 4; } // Units: ulps.
+};
+
+} // namespace std
+
+#endif /* BOOST_SGI_CPP_LIMITS */
+
+// Local Variables:
+// mode:C++
+// End:
+
+
+
diff --git a/boost/boost/detail/lwm_nop.hpp b/boost/boost/detail/lwm_nop.hpp
new file mode 100644
index 00000000000..c73ab68f5ee
--- /dev/null
+++ b/boost/boost/detail/lwm_nop.hpp
@@ -0,0 +1,37 @@
+#ifndef BOOST_DETAIL_LWM_NOP_HPP_INCLUDED
+#define BOOST_DETAIL_LWM_NOP_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+// boost/detail/lwm_nop.hpp
+//
+// Copyright (c) 2002 Peter Dimov and Multi Media Ltd.
+//
+// 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)
+//
+
+namespace boost
+{
+
+namespace detail
+{
+
+class lightweight_mutex
+{
+public:
+
+ typedef lightweight_mutex scoped_lock;
+};
+
+} // namespace detail
+
+} // namespace boost
+
+#endif // #ifndef BOOST_DETAIL_LWM_NOP_HPP_INCLUDED
diff --git a/boost/boost/detail/lwm_pthreads.hpp b/boost/boost/detail/lwm_pthreads.hpp
new file mode 100644
index 00000000000..a5bf75bde73
--- /dev/null
+++ b/boost/boost/detail/lwm_pthreads.hpp
@@ -0,0 +1,86 @@
+#ifndef BOOST_DETAIL_LWM_PTHREADS_HPP_INCLUDED
+#define BOOST_DETAIL_LWM_PTHREADS_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+// boost/detail/lwm_pthreads.hpp
+//
+// Copyright (c) 2002 Peter Dimov and Multi Media Ltd.
+//
+// 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)
+//
+
+#include <pthread.h>
+
+namespace boost
+{
+
+namespace detail
+{
+
+class lightweight_mutex
+{
+private:
+
+ pthread_mutex_t m_;
+
+ lightweight_mutex(lightweight_mutex const &);
+ lightweight_mutex & operator=(lightweight_mutex const &);
+
+public:
+
+ lightweight_mutex()
+ {
+
+// HPUX 10.20 / DCE has a nonstandard pthread_mutex_init
+
+#if defined(__hpux) && defined(_DECTHREADS_)
+ pthread_mutex_init(&m_, pthread_mutexattr_default);
+#else
+ pthread_mutex_init(&m_, 0);
+#endif
+ }
+
+ ~lightweight_mutex()
+ {
+ pthread_mutex_destroy(&m_);
+ }
+
+ class scoped_lock;
+ friend class scoped_lock;
+
+ class scoped_lock
+ {
+ private:
+
+ pthread_mutex_t & m_;
+
+ scoped_lock(scoped_lock const &);
+ scoped_lock & operator=(scoped_lock const &);
+
+ public:
+
+ scoped_lock(lightweight_mutex & m): m_(m.m_)
+ {
+ pthread_mutex_lock(&m_);
+ }
+
+ ~scoped_lock()
+ {
+ pthread_mutex_unlock(&m_);
+ }
+ };
+};
+
+} // namespace detail
+
+} // namespace boost
+
+#endif // #ifndef BOOST_DETAIL_LWM_PTHREADS_HPP_INCLUDED
diff --git a/boost/boost/detail/lwm_win32_cs.hpp b/boost/boost/detail/lwm_win32_cs.hpp
new file mode 100644
index 00000000000..4ee0a71ca23
--- /dev/null
+++ b/boost/boost/detail/lwm_win32_cs.hpp
@@ -0,0 +1,104 @@
+#ifndef BOOST_DETAIL_LWM_WIN32_CS_HPP_INCLUDED
+#define BOOST_DETAIL_LWM_WIN32_CS_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+// boost/detail/lwm_win32_cs.hpp
+//
+// Copyright (c) 2002, 2003 Peter Dimov
+//
+// 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)
+//
+
+#ifdef BOOST_USE_WINDOWS_H
+# include <windows.h>
+#endif
+
+namespace boost
+{
+
+namespace detail
+{
+
+#ifndef BOOST_USE_WINDOWS_H
+
+struct CRITICAL_SECTION
+{
+ struct critical_section_debug * DebugInfo;
+ long LockCount;
+ long RecursionCount;
+ void * OwningThread;
+ void * LockSemaphore;
+#if defined(_WIN64)
+ unsigned __int64 SpinCount;
+#else
+ unsigned long SpinCount;
+#endif
+};
+
+extern "C" __declspec(dllimport) void __stdcall InitializeCriticalSection(CRITICAL_SECTION *);
+extern "C" __declspec(dllimport) void __stdcall EnterCriticalSection(CRITICAL_SECTION *);
+extern "C" __declspec(dllimport) void __stdcall LeaveCriticalSection(CRITICAL_SECTION *);
+extern "C" __declspec(dllimport) void __stdcall DeleteCriticalSection(CRITICAL_SECTION *);
+
+#endif // #ifndef BOOST_USE_WINDOWS_H
+
+class lightweight_mutex
+{
+private:
+
+ CRITICAL_SECTION cs_;
+
+ lightweight_mutex(lightweight_mutex const &);
+ lightweight_mutex & operator=(lightweight_mutex const &);
+
+public:
+
+ lightweight_mutex()
+ {
+ InitializeCriticalSection(&cs_);
+ }
+
+ ~lightweight_mutex()
+ {
+ DeleteCriticalSection(&cs_);
+ }
+
+ class scoped_lock;
+ friend class scoped_lock;
+
+ class scoped_lock
+ {
+ private:
+
+ lightweight_mutex & m_;
+
+ scoped_lock(scoped_lock const &);
+ scoped_lock & operator=(scoped_lock const &);
+
+ public:
+
+ explicit scoped_lock(lightweight_mutex & m): m_(m)
+ {
+ EnterCriticalSection(&m_.cs_);
+ }
+
+ ~scoped_lock()
+ {
+ LeaveCriticalSection(&m_.cs_);
+ }
+ };
+};
+
+} // namespace detail
+
+} // namespace boost
+
+#endif // #ifndef BOOST_DETAIL_LWM_WIN32_CS_HPP_INCLUDED
diff --git a/boost/boost/detail/named_template_params.hpp b/boost/boost/detail/named_template_params.hpp
new file mode 100644
index 00000000000..e7cb0794330
--- /dev/null
+++ b/boost/boost/detail/named_template_params.hpp
@@ -0,0 +1,177 @@
+// (C) Copyright Jeremy Siek 2001.
+// 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)
+
+// Revision History:
+
+// 04 Oct 2001 David Abrahams
+// Changed name of "bind" to "select" to avoid problems with MSVC.
+
+#ifndef BOOST_DETAIL_NAMED_TEMPLATE_PARAMS_HPP
+#define BOOST_DETAIL_NAMED_TEMPLATE_PARAMS_HPP
+
+#include <boost/type_traits/conversion_traits.hpp>
+#include <boost/type_traits/composite_traits.hpp> // for is_reference
+#if defined(__BORLANDC__)
+#include <boost/type_traits/ice.hpp>
+#endif
+
+namespace boost {
+ namespace detail {
+
+ struct default_argument { };
+
+ struct dummy_default_gen {
+ template <class Base, class Traits>
+ struct select {
+ typedef default_argument type;
+ };
+ };
+
+ // This class template is a workaround for MSVC.
+ template <class Gen> struct default_generator {
+ typedef detail::dummy_default_gen type;
+ };
+
+ template <class T> struct is_default {
+ enum { value = false };
+ typedef type_traits::no_type type;
+ };
+ template <> struct is_default<default_argument> {
+ enum { value = true };
+ typedef type_traits::yes_type type;
+ };
+
+ struct choose_default {
+ template <class Arg, class DefaultGen, class Base, class Traits>
+ struct select {
+ typedef typename default_generator<DefaultGen>::type Gen;
+ typedef typename Gen::template select<Base,Traits>::type type;
+ };
+ };
+ struct choose_arg {
+ template <class Arg, class DefaultGen, class Base, class Traits>
+ struct select {
+ typedef Arg type;
+ };
+ };
+
+#if defined(__BORLANDC__)
+ template <class UseDefault>
+ struct choose_arg_or_default { typedef choose_arg type; };
+ template <>
+ struct choose_arg_or_default<type_traits::yes_type> {
+ typedef choose_default type;
+ };
+#else
+ template <bool UseDefault>
+ struct choose_arg_or_default { typedef choose_arg type; };
+ template <>
+ struct choose_arg_or_default<true> {
+ typedef choose_default type;
+ };
+#endif
+
+ template <class Arg, class DefaultGen, class Base, class Traits>
+ class resolve_default {
+#if defined(__BORLANDC__)
+ typedef typename choose_arg_or_default<typename is_default<Arg>::type>::type Selector;
+#else
+ // This usually works for Borland, but I'm seeing weird errors in
+ // iterator_adaptor_test.cpp when using this method.
+ enum { is_def = is_default<Arg>::value };
+ typedef typename choose_arg_or_default<is_def>::type Selector;
+#endif
+ public:
+ typedef typename Selector
+ ::template select<Arg, DefaultGen, Base, Traits>::type type;
+ };
+
+ // To differentiate an unnamed parameter from a traits generator
+ // we use is_convertible<X, iter_traits_gen_base>.
+ struct named_template_param_base { };
+
+ template <class X>
+ struct is_named_param_list {
+ enum { value = is_convertible<X, named_template_param_base>::value };
+ };
+
+ struct choose_named_params {
+ template <class Prev> struct select { typedef Prev type; };
+ };
+ struct choose_default_arg {
+ template <class Prev> struct select {
+ typedef detail::default_argument type;
+ };
+ };
+
+ template <bool Named> struct choose_default_dispatch_;
+ template <> struct choose_default_dispatch_<true> {
+ typedef choose_named_params type;
+ };
+ template <> struct choose_default_dispatch_<false> {
+ typedef choose_default_arg type;
+ };
+ // The use of inheritance here is a Solaris Forte 6 workaround.
+ template <bool Named> struct choose_default_dispatch
+ : public choose_default_dispatch_<Named> { };
+
+ template <class PreviousArg>
+ struct choose_default_argument {
+ enum { is_named = is_named_param_list<PreviousArg>::value };
+ typedef typename choose_default_dispatch<is_named>::type Selector;
+ typedef typename Selector::template select<PreviousArg>::type type;
+ };
+
+ // This macro assumes that there is a class named default_##TYPE
+ // defined before the application of the macro. This class should
+ // have a single member class template named "select" with two
+ // template parameters: the type of the class being created (e.g.,
+ // the iterator_adaptor type when creating iterator adaptors) and
+ // a traits class. The select class should have a single typedef
+ // named "type" that produces the default for TYPE. See
+ // boost/iterator_adaptors.hpp for an example usage. Also,
+ // applications of this macro must be placed in namespace
+ // boost::detail.
+
+#define BOOST_NAMED_TEMPLATE_PARAM(TYPE) \
+ struct get_##TYPE##_from_named { \
+ template <class Base, class NamedParams, class Traits> \
+ struct select { \
+ typedef typename NamedParams::traits NamedTraits; \
+ typedef typename NamedTraits::TYPE TYPE; \
+ typedef typename resolve_default<TYPE, \
+ default_##TYPE, Base, NamedTraits>::type type; \
+ }; \
+ }; \
+ struct pass_thru_##TYPE { \
+ template <class Base, class Arg, class Traits> struct select { \
+ typedef typename resolve_default<Arg, \
+ default_##TYPE, Base, Traits>::type type; \
+ };\
+ }; \
+ template <int NamedParam> \
+ struct get_##TYPE##_dispatch { }; \
+ template <> struct get_##TYPE##_dispatch<1> { \
+ typedef get_##TYPE##_from_named type; \
+ }; \
+ template <> struct get_##TYPE##_dispatch<0> { \
+ typedef pass_thru_##TYPE type; \
+ }; \
+ template <class Base, class X, class Traits> \
+ class get_##TYPE { \
+ enum { is_named = is_named_param_list<X>::value }; \
+ typedef typename get_##TYPE##_dispatch<is_named>::type Selector; \
+ public: \
+ typedef typename Selector::template select<Base, X, Traits>::type type; \
+ }; \
+ template <> struct default_generator<default_##TYPE> { \
+ typedef default_##TYPE type; \
+ }
+
+
+ } // namespace detail
+} // namespace boost
+
+#endif // BOOST_DETAIL_NAMED_TEMPLATE_PARAMS_HPP
diff --git a/boost/boost/detail/no_exceptions_support.hpp b/boost/boost/detail/no_exceptions_support.hpp
new file mode 100644
index 00000000000..d94e35834f7
--- /dev/null
+++ b/boost/boost/detail/no_exceptions_support.hpp
@@ -0,0 +1,87 @@
+#ifndef BOOST_DETAIL_NO_EXCEPTIONS_SUPPORT_HPP_
+#define BOOST_DETAIL_NO_EXCEPTIONS_SUPPORT_HPP_
+
+#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif
+
+//----------------------------------------------------------------------
+// (C) Copyright 2004 Pavel Vozenilek.
+// Use, modification and distribution is 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 contains helper macros used when exception support may be
+// disabled (as indicated by macro BOOST_NO_EXCEPTIONS).
+//
+// Before picking up these macros you may consider using RAII techniques
+// to deal with exceptions - their syntax can be always the same with
+// or without exception support enabled.
+//
+
+/* Example of use:
+
+void foo() {
+ BOOST_TRY {
+ ...
+ } BOOST_CATCH(const std::bad_alloc&) {
+ ...
+ BOOST_RETHROW
+ } BOOST_CATCH(const std::exception& e) {
+ ...
+ }
+ BOOST_CATCH_END
+}
+
+With exception support enabled it will expand into:
+
+void foo() {
+ { try {
+ ...
+ } catch (const std::bad_alloc&) {
+ ...
+ throw;
+ } catch (const std::exception& e) {
+ ...
+ }
+ }
+}
+
+With exception support disabled it will expand into:
+
+void foo() {
+ { if(true) {
+ ...
+ } else if (false) {
+ ...
+ } else if (false) {
+ ...
+ }
+ }
+}
+*/
+//----------------------------------------------------------------------
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+#if !(defined BOOST_NO_EXCEPTIONS)
+# define BOOST_TRY { try
+# define BOOST_CATCH(x) catch(x)
+# define BOOST_RETHROW throw;
+# define BOOST_CATCH_END }
+#else
+# if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+# define BOOST_TRY { if ("")
+# define BOOST_CATCH(x) else if (!"")
+# else
+# define BOOST_TRY { if (true)
+# define BOOST_CATCH(x) else if (false)
+# endif
+# define BOOST_RETHROW
+# define BOOST_CATCH_END }
+#endif
+
+
+#endif
diff --git a/boost/boost/detail/none_t.hpp b/boost/boost/detail/none_t.hpp
new file mode 100644
index 00000000000..76ba97a02f5
--- /dev/null
+++ b/boost/boost/detail/none_t.hpp
@@ -0,0 +1,28 @@
+// Copyright (C) 2003, Fernando Luis Cacciola Carballal.
+//
+// Use, modification, and distribution is 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)
+//
+// See http://www.boost.org/lib/optional for documentation.
+//
+// You are welcome to contact the author at:
+// fernando_cacciola@hotmail.com
+//
+#ifndef BOOST_DETAIL_NONE_T_17SEP2003_HPP
+#define BOOST_DETAIL_NONE_T_17SEP2003_HPP
+
+namespace boost {
+
+namespace detail {
+
+struct none_helper{};
+
+typedef int none_helper::*none_t ;
+
+} // namespace detail
+
+} // namespace boost
+
+#endif
+
diff --git a/boost/boost/detail/numeric_traits.hpp b/boost/boost/detail/numeric_traits.hpp
new file mode 100644
index 00000000000..6325d70cb00
--- /dev/null
+++ b/boost/boost/detail/numeric_traits.hpp
@@ -0,0 +1,191 @@
+// (C) Copyright David Abrahams 2001, Howard Hinnant 2001.
+//
+// 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)
+//
+// Template class numeric_traits<Number> --
+//
+// Supplies:
+//
+// typedef difference_type -- a type used to represent the difference
+// between any two values of Number.
+//
+// Support:
+// 1. Not all specializations are supplied
+//
+// 2. Use of specializations that are not supplied will cause a
+// compile-time error
+//
+// 3. Users are free to specialize numeric_traits for any type.
+//
+// 4. Right now, specializations are only supplied for integer types.
+//
+// 5. On implementations which do not supply compile-time constants in
+// std::numeric_limits<>, only specializations for built-in integer types
+// are supplied.
+//
+// 6. Handling of numbers whose range of representation is at least as
+// great as boost::intmax_t can cause some differences to be
+// unrepresentable in difference_type:
+//
+// Number difference_type
+// ------ ---------------
+// signed Number
+// unsigned intmax_t
+//
+// template <class Number> typename numeric_traits<Number>::difference_type
+// numeric_distance(Number x, Number y)
+// computes (y - x), attempting to avoid overflows.
+//
+
+// See http://www.boost.org for most recent version including documentation.
+
+// Revision History
+// 11 Feb 2001 - Use BOOST_STATIC_CONSTANT (David Abrahams)
+// 11 Feb 2001 - Rolled back ineffective Borland-specific code
+// (David Abrahams)
+// 10 Feb 2001 - Rolled in supposed Borland fixes from John Maddock, but
+// not seeing any improvement yet (David Abrahams)
+// 06 Feb 2001 - Factored if_true out into boost/detail/select_type.hpp
+// (David Abrahams)
+// 23 Jan 2001 - Fixed logic of difference_type selection, which was
+// completely wack. In the process, added digit_traits<>
+// to compute the number of digits in intmax_t even when
+// not supplied by numeric_limits<>. (David Abrahams)
+// 21 Jan 2001 - Created (David Abrahams)
+
+#ifndef BOOST_NUMERIC_TRAITS_HPP_DWA20001901
+# define BOOST_NUMERIC_TRAITS_HPP_DWA20001901
+
+# include <boost/config.hpp>
+# include <boost/cstdint.hpp>
+# include <boost/static_assert.hpp>
+# include <boost/type_traits.hpp>
+# include <boost/detail/select_type.hpp>
+# include <boost/limits.hpp>
+
+namespace boost { namespace detail {
+
+ // Template class is_signed -- determine whether a numeric type is signed
+ // Requires that T is constructable from the literals -1 and 0. Compile-time
+ // error results if that requirement is not met (and thus signedness is not
+ // likely to have meaning for that type).
+ template <class Number>
+ struct is_signed
+ {
+#if defined(BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS) || defined(BOOST_MSVC) && BOOST_MSVC <= 1300
+ BOOST_STATIC_CONSTANT(bool, value = (Number(-1) < Number(0)));
+#else
+ BOOST_STATIC_CONSTANT(bool, value = std::numeric_limits<Number>::is_signed);
+#endif
+ };
+
+# ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+ // digit_traits - compute the number of digits in a built-in integer
+ // type. Needed for implementations on which numeric_limits is not specialized
+ // for intmax_t (e.g. VC6).
+ template <bool is_specialized> struct digit_traits_select;
+
+ // numeric_limits is specialized; just select that version of digits
+ template <> struct digit_traits_select<true>
+ {
+ template <class T> struct traits
+ {
+ BOOST_STATIC_CONSTANT(int, digits = std::numeric_limits<T>::digits);
+ };
+ };
+
+ // numeric_limits is not specialized; compute digits from sizeof(T)
+ template <> struct digit_traits_select<false>
+ {
+ template <class T> struct traits
+ {
+ BOOST_STATIC_CONSTANT(int, digits = (
+ sizeof(T) * std::numeric_limits<unsigned char>::digits
+ - (is_signed<T>::value ? 1 : 0))
+ );
+ };
+ };
+
+ // here's the "usable" template
+ template <class T> struct digit_traits
+ {
+ typedef digit_traits_select<
+ ::std::numeric_limits<T>::is_specialized> selector;
+ typedef typename selector::template traits<T> traits;
+ BOOST_STATIC_CONSTANT(int, digits = traits::digits);
+ };
+#endif
+
+ // Template class integer_traits<Integer> -- traits of various integer types
+ // This should probably be rolled into boost::integer_traits one day, but I
+ // need it to work without <limits>
+ template <class Integer>
+ struct integer_traits
+ {
+# ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+ private:
+ typedef Integer integer_type;
+ typedef std::numeric_limits<integer_type> x;
+# if defined(BOOST_MSVC) && BOOST_MSVC <= 1300
+ // for some reason, MSVC asserts when it shouldn't unless we make these
+ // local definitions
+ BOOST_STATIC_CONSTANT(bool, is_integer = x::is_integer);
+ BOOST_STATIC_CONSTANT(bool, is_specialized = x::is_specialized);
+
+ BOOST_STATIC_ASSERT(is_integer);
+ BOOST_STATIC_ASSERT(is_specialized);
+# endif
+ public:
+ typedef typename
+ if_true<(int(x::is_signed)
+ && (!int(x::is_bounded)
+ // digits is the number of no-sign bits
+ || (int(x::digits) + 1 >= digit_traits<boost::intmax_t>::digits)))>::template then<
+ Integer,
+
+ typename if_true<(int(x::digits) + 1 < digit_traits<signed int>::digits)>::template then<
+ signed int,
+
+ typename if_true<(int(x::digits) + 1 < digit_traits<signed long>::digits)>::template then<
+ signed long,
+
+ // else
+ intmax_t
+ >::type>::type>::type difference_type;
+#else
+ BOOST_STATIC_ASSERT(boost::is_integral<Integer>::value);
+
+ typedef typename
+ if_true<(sizeof(Integer) >= sizeof(intmax_t))>::template then<
+
+ typename if_true<(is_signed<Integer>::value)>::template then<
+ Integer,
+ intmax_t
+ >::type,
+
+ typename if_true<(sizeof(Integer) < sizeof(std::ptrdiff_t))>::template then<
+ std::ptrdiff_t,
+ intmax_t
+ >::type
+ >::type difference_type;
+# endif
+ };
+
+ // Right now, only supports integers, but should be expanded.
+ template <class Number>
+ struct numeric_traits
+ {
+ typedef typename integer_traits<Number>::difference_type difference_type;
+ };
+
+ template <class Number>
+ typename numeric_traits<Number>::difference_type numeric_distance(Number x, Number y)
+ {
+ typedef typename numeric_traits<Number>::difference_type difference_type;
+ return difference_type(y) - difference_type(x);
+ }
+}}
+
+#endif // BOOST_NUMERIC_TRAITS_HPP_DWA20001901
diff --git a/boost/boost/detail/ob_call_traits.hpp b/boost/boost/detail/ob_call_traits.hpp
new file mode 100644
index 00000000000..eb4df7a30f1
--- /dev/null
+++ b/boost/boost/detail/ob_call_traits.hpp
@@ -0,0 +1,168 @@
+// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/utility for most recent version including documentation.
+//
+// Crippled version for crippled compilers:
+// see libs/utility/call_traits.htm
+//
+
+/* Release notes:
+ 01st October 2000:
+ Fixed call_traits on VC6, using "poor man's partial specialisation",
+ using ideas taken from "Generative programming" by Krzysztof Czarnecki
+ & Ulrich Eisenecker.
+*/
+
+#ifndef BOOST_OB_CALL_TRAITS_HPP
+#define BOOST_OB_CALL_TRAITS_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#include <boost/config.hpp>
+#endif
+
+#ifndef BOOST_ARITHMETIC_TYPE_TRAITS_HPP
+#include <boost/type_traits/arithmetic_traits.hpp>
+#endif
+#ifndef BOOST_COMPOSITE_TYPE_TRAITS_HPP
+#include <boost/type_traits/composite_traits.hpp>
+#endif
+
+namespace boost{
+
+#ifdef BOOST_MSVC6_MEMBER_TEMPLATES
+//
+// use member templates to emulate
+// partial specialisation:
+//
+namespace detail{
+
+template <class T>
+struct standard_call_traits
+{
+ typedef T value_type;
+ typedef T& reference;
+ typedef const T& const_reference;
+ typedef const T& param_type;
+};
+template <class T>
+struct simple_call_traits
+{
+ typedef T value_type;
+ typedef T& reference;
+ typedef const T& const_reference;
+ typedef const T param_type;
+};
+template <class T>
+struct reference_call_traits
+{
+ typedef T value_type;
+ typedef T reference;
+ typedef T const_reference;
+ typedef T param_type;
+};
+
+template <bool pointer, bool arithmetic, bool reference>
+struct call_traits_chooser
+{
+ template <class T>
+ struct rebind
+ {
+ typedef standard_call_traits<T> type;
+ };
+};
+
+template <>
+struct call_traits_chooser<true, false, false>
+{
+ template <class T>
+ struct rebind
+ {
+ typedef simple_call_traits<T> type;
+ };
+};
+
+template <>
+struct call_traits_chooser<false, false, true>
+{
+ template <class T>
+ struct rebind
+ {
+ typedef reference_call_traits<T> type;
+ };
+};
+
+template <bool size_is_small>
+struct call_traits_sizeof_chooser2
+{
+ template <class T>
+ struct small_rebind
+ {
+ typedef simple_call_traits<T> small_type;
+ };
+};
+
+template<>
+struct call_traits_sizeof_chooser2<false>
+{
+ template <class T>
+ struct small_rebind
+ {
+ typedef standard_call_traits<T> small_type;
+ };
+};
+
+template <>
+struct call_traits_chooser<false, true, false>
+{
+ template <class T>
+ struct rebind
+ {
+ enum { sizeof_choice = (sizeof(T) <= sizeof(void*)) };
+ typedef call_traits_sizeof_chooser2<(sizeof(T) <= sizeof(void*))> chooser;
+ typedef typename chooser::template small_rebind<T> bound_type;
+ typedef typename bound_type::small_type type;
+ };
+};
+
+} // namespace detail
+template <typename T>
+struct call_traits
+{
+private:
+ typedef detail::call_traits_chooser<
+ ::boost::is_pointer<T>::value,
+ ::boost::is_arithmetic<T>::value,
+ ::boost::is_reference<T>::value
+ > chooser;
+ typedef typename chooser::template rebind<T> bound_type;
+ typedef typename bound_type::type call_traits_type;
+public:
+ typedef typename call_traits_type::value_type value_type;
+ typedef typename call_traits_type::reference reference;
+ typedef typename call_traits_type::const_reference const_reference;
+ typedef typename call_traits_type::param_type param_type;
+};
+
+#else
+//
+// sorry call_traits is completely non-functional
+// blame your broken compiler:
+//
+
+template <typename T>
+struct call_traits
+{
+ typedef T value_type;
+ typedef T& reference;
+ typedef const T& const_reference;
+ typedef const T& param_type;
+};
+
+#endif // member templates
+
+}
+
+#endif // BOOST_OB_CALL_TRAITS_HPP
diff --git a/boost/boost/detail/ob_compressed_pair.hpp b/boost/boost/detail/ob_compressed_pair.hpp
new file mode 100644
index 00000000000..727acab6da4
--- /dev/null
+++ b/boost/boost/detail/ob_compressed_pair.hpp
@@ -0,0 +1,510 @@
+// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/utility for most recent version including documentation.
+// see libs/utility/compressed_pair.hpp
+//
+/* Release notes:
+ 20 Jan 2001:
+ Fixed obvious bugs (David Abrahams)
+ 07 Oct 2000:
+ Added better single argument constructor support.
+ 03 Oct 2000:
+ Added VC6 support (JM).
+ 23rd July 2000:
+ Additional comments added. (JM)
+ Jan 2000:
+ Original version: this version crippled for use with crippled compilers
+ - John Maddock Jan 2000.
+*/
+
+
+#ifndef BOOST_OB_COMPRESSED_PAIR_HPP
+#define BOOST_OB_COMPRESSED_PAIR_HPP
+
+#include <algorithm>
+#ifndef BOOST_OBJECT_TYPE_TRAITS_HPP
+#include <boost/type_traits/object_traits.hpp>
+#endif
+#ifndef BOOST_SAME_TRAITS_HPP
+#include <boost/type_traits/same_traits.hpp>
+#endif
+#ifndef BOOST_CALL_TRAITS_HPP
+#include <boost/call_traits.hpp>
+#endif
+
+namespace boost
+{
+#ifdef BOOST_MSVC6_MEMBER_TEMPLATES
+//
+// use member templates to emulate
+// partial specialisation. Note that due to
+// problems with overload resolution with VC6
+// each of the compressed_pair versions that follow
+// have one template single-argument constructor
+// in place of two specific constructors:
+//
+
+template <class T1, class T2>
+class compressed_pair;
+
+namespace detail{
+
+template <class A, class T1, class T2>
+struct best_conversion_traits
+{
+ typedef char one;
+ typedef char (&two)[2];
+ static A a;
+ static one test(T1);
+ static two test(T2);
+
+ enum { value = sizeof(test(a)) };
+};
+
+template <int>
+struct init_one;
+
+template <>
+struct init_one<1>
+{
+ template <class A, class T1, class T2>
+ static void init(const A& a, T1* p1, T2*)
+ {
+ *p1 = a;
+ }
+};
+
+template <>
+struct init_one<2>
+{
+ template <class A, class T1, class T2>
+ static void init(const A& a, T1*, T2* p2)
+ {
+ *p2 = a;
+ }
+};
+
+
+// T1 != T2, both non-empty
+template <class T1, class T2>
+class compressed_pair_0
+{
+private:
+ T1 _first;
+ T2 _second;
+public:
+ typedef T1 first_type;
+ typedef T2 second_type;
+ typedef typename call_traits<first_type>::param_type first_param_type;
+ typedef typename call_traits<second_type>::param_type second_param_type;
+ typedef typename call_traits<first_type>::reference first_reference;
+ typedef typename call_traits<second_type>::reference second_reference;
+ typedef typename call_traits<first_type>::const_reference first_const_reference;
+ typedef typename call_traits<second_type>::const_reference second_const_reference;
+
+ compressed_pair_0() : _first(), _second() {}
+ compressed_pair_0(first_param_type x, second_param_type y) : _first(x), _second(y) {}
+ template <class A>
+ explicit compressed_pair_0(const A& val)
+ {
+ init_one<best_conversion_traits<A, T1, T2>::value>::init(val, &_first, &_second);
+ }
+ compressed_pair_0(const ::boost::compressed_pair<T1,T2>& x)
+ : _first(x.first()), _second(x.second()) {}
+
+#if 0
+ compressed_pair_0& operator=(const compressed_pair_0& x) {
+ cout << "assigning compressed pair 0" << endl;
+ _first = x._first;
+ _second = x._second;
+ cout << "finished assigning compressed pair 0" << endl;
+ return *this;
+ }
+#endif
+
+ first_reference first() { return _first; }
+ first_const_reference first() const { return _first; }
+
+ second_reference second() { return _second; }
+ second_const_reference second() const { return _second; }
+
+ void swap(compressed_pair_0& y)
+ {
+ using std::swap;
+ swap(_first, y._first);
+ swap(_second, y._second);
+ }
+};
+
+// T1 != T2, T2 empty
+template <class T1, class T2>
+class compressed_pair_1 : T2
+{
+private:
+ T1 _first;
+public:
+ typedef T1 first_type;
+ typedef T2 second_type;
+ typedef typename call_traits<first_type>::param_type first_param_type;
+ typedef typename call_traits<second_type>::param_type second_param_type;
+ typedef typename call_traits<first_type>::reference first_reference;
+ typedef typename call_traits<second_type>::reference second_reference;
+ typedef typename call_traits<first_type>::const_reference first_const_reference;
+ typedef typename call_traits<second_type>::const_reference second_const_reference;
+
+ compressed_pair_1() : T2(), _first() {}
+ compressed_pair_1(first_param_type x, second_param_type y) : T2(y), _first(x) {}
+
+ template <class A>
+ explicit compressed_pair_1(const A& val)
+ {
+ init_one<best_conversion_traits<A, T1, T2>::value>::init(val, &_first, static_cast<T2*>(this));
+ }
+
+ compressed_pair_1(const ::boost::compressed_pair<T1,T2>& x)
+ : T2(x.second()), _first(x.first()) {}
+
+#if defined(BOOST_MSVC) && BOOST_MSVC <= 1300
+ // Total weirdness. If the assignment to _first is moved after
+ // the call to the inherited operator=, then this breaks graph/test/graph.cpp
+ // by way of iterator_adaptor.
+ compressed_pair_1& operator=(const compressed_pair_1& x) {
+ _first = x._first;
+ T2::operator=(x);
+ return *this;
+ }
+#endif
+
+ first_reference first() { return _first; }
+ first_const_reference first() const { return _first; }
+
+ second_reference second() { return *this; }
+ second_const_reference second() const { return *this; }
+
+ void swap(compressed_pair_1& y)
+ {
+ // no need to swap empty base class:
+ using std::swap;
+ swap(_first, y._first);
+ }
+};
+
+// T1 != T2, T1 empty
+template <class T1, class T2>
+class compressed_pair_2 : T1
+{
+private:
+ T2 _second;
+public:
+ typedef T1 first_type;
+ typedef T2 second_type;
+ typedef typename call_traits<first_type>::param_type first_param_type;
+ typedef typename call_traits<second_type>::param_type second_param_type;
+ typedef typename call_traits<first_type>::reference first_reference;
+ typedef typename call_traits<second_type>::reference second_reference;
+ typedef typename call_traits<first_type>::const_reference first_const_reference;
+ typedef typename call_traits<second_type>::const_reference second_const_reference;
+
+ compressed_pair_2() : T1(), _second() {}
+ compressed_pair_2(first_param_type x, second_param_type y) : T1(x), _second(y) {}
+ template <class A>
+ explicit compressed_pair_2(const A& val)
+ {
+ init_one<best_conversion_traits<A, T1, T2>::value>::init(val, static_cast<T1*>(this), &_second);
+ }
+ compressed_pair_2(const ::boost::compressed_pair<T1,T2>& x)
+ : T1(x.first()), _second(x.second()) {}
+
+#if 0
+ compressed_pair_2& operator=(const compressed_pair_2& x) {
+ cout << "assigning compressed pair 2" << endl;
+ T1::operator=(x);
+ _second = x._second;
+ cout << "finished assigning compressed pair 2" << endl;
+ return *this;
+ }
+#endif
+ first_reference first() { return *this; }
+ first_const_reference first() const { return *this; }
+
+ second_reference second() { return _second; }
+ second_const_reference second() const { return _second; }
+
+ void swap(compressed_pair_2& y)
+ {
+ // no need to swap empty base class:
+ using std::swap;
+ swap(_second, y._second);
+ }
+};
+
+// T1 != T2, both empty
+template <class T1, class T2>
+class compressed_pair_3 : T1, T2
+{
+public:
+ typedef T1 first_type;
+ typedef T2 second_type;
+ typedef typename call_traits<first_type>::param_type first_param_type;
+ typedef typename call_traits<second_type>::param_type second_param_type;
+ typedef typename call_traits<first_type>::reference first_reference;
+ typedef typename call_traits<second_type>::reference second_reference;
+ typedef typename call_traits<first_type>::const_reference first_const_reference;
+ typedef typename call_traits<second_type>::const_reference second_const_reference;
+
+ compressed_pair_3() : T1(), T2() {}
+ compressed_pair_3(first_param_type x, second_param_type y) : T1(x), T2(y) {}
+ template <class A>
+ explicit compressed_pair_3(const A& val)
+ {
+ init_one<best_conversion_traits<A, T1, T2>::value>::init(val, static_cast<T1*>(this), static_cast<T2*>(this));
+ }
+ compressed_pair_3(const ::boost::compressed_pair<T1,T2>& x)
+ : T1(x.first()), T2(x.second()) {}
+
+ first_reference first() { return *this; }
+ first_const_reference first() const { return *this; }
+
+ second_reference second() { return *this; }
+ second_const_reference second() const { return *this; }
+
+ void swap(compressed_pair_3& y)
+ {
+ // no need to swap empty base classes:
+ }
+};
+
+// T1 == T2, and empty
+template <class T1, class T2>
+class compressed_pair_4 : T1
+{
+public:
+ typedef T1 first_type;
+ typedef T2 second_type;
+ typedef typename call_traits<first_type>::param_type first_param_type;
+ typedef typename call_traits<second_type>::param_type second_param_type;
+ typedef typename call_traits<first_type>::reference first_reference;
+ typedef typename call_traits<second_type>::reference second_reference;
+ typedef typename call_traits<first_type>::const_reference first_const_reference;
+ typedef typename call_traits<second_type>::const_reference second_const_reference;
+
+ compressed_pair_4() : T1() {}
+ compressed_pair_4(first_param_type x, second_param_type y) : T1(x), m_second(y) {}
+ // only one single argument constructor since T1 == T2
+ explicit compressed_pair_4(first_param_type x) : T1(x), m_second(x) {}
+ compressed_pair_4(const ::boost::compressed_pair<T1,T2>& x)
+ : T1(x.first()), m_second(x.second()) {}
+
+ first_reference first() { return *this; }
+ first_const_reference first() const { return *this; }
+
+ second_reference second() { return m_second; }
+ second_const_reference second() const { return m_second; }
+
+ void swap(compressed_pair_4& y)
+ {
+ // no need to swap empty base classes:
+ }
+private:
+ T2 m_second;
+};
+
+// T1 == T2, not empty
+template <class T1, class T2>
+class compressed_pair_5
+{
+private:
+ T1 _first;
+ T2 _second;
+public:
+ typedef T1 first_type;
+ typedef T2 second_type;
+ typedef typename call_traits<first_type>::param_type first_param_type;
+ typedef typename call_traits<second_type>::param_type second_param_type;
+ typedef typename call_traits<first_type>::reference first_reference;
+ typedef typename call_traits<second_type>::reference second_reference;
+ typedef typename call_traits<first_type>::const_reference first_const_reference;
+ typedef typename call_traits<second_type>::const_reference second_const_reference;
+
+ compressed_pair_5() : _first(), _second() {}
+ compressed_pair_5(first_param_type x, second_param_type y) : _first(x), _second(y) {}
+ // only one single argument constructor since T1 == T2
+ explicit compressed_pair_5(first_param_type x) : _first(x), _second(x) {}
+ compressed_pair_5(const ::boost::compressed_pair<T1,T2>& c)
+ : _first(c.first()), _second(c.second()) {}
+
+ first_reference first() { return _first; }
+ first_const_reference first() const { return _first; }
+
+ second_reference second() { return _second; }
+ second_const_reference second() const { return _second; }
+
+ void swap(compressed_pair_5& y)
+ {
+ using std::swap;
+ swap(_first, y._first);
+ swap(_second, y._second);
+ }
+};
+
+template <bool e1, bool e2, bool same>
+struct compressed_pair_chooser
+{
+ template <class T1, class T2>
+ struct rebind
+ {
+ typedef compressed_pair_0<T1, T2> type;
+ };
+};
+
+template <>
+struct compressed_pair_chooser<false, true, false>
+{
+ template <class T1, class T2>
+ struct rebind
+ {
+ typedef compressed_pair_1<T1, T2> type;
+ };
+};
+
+template <>
+struct compressed_pair_chooser<true, false, false>
+{
+ template <class T1, class T2>
+ struct rebind
+ {
+ typedef compressed_pair_2<T1, T2> type;
+ };
+};
+
+template <>
+struct compressed_pair_chooser<true, true, false>
+{
+ template <class T1, class T2>
+ struct rebind
+ {
+ typedef compressed_pair_3<T1, T2> type;
+ };
+};
+
+template <>
+struct compressed_pair_chooser<true, true, true>
+{
+ template <class T1, class T2>
+ struct rebind
+ {
+ typedef compressed_pair_4<T1, T2> type;
+ };
+};
+
+template <>
+struct compressed_pair_chooser<false, false, true>
+{
+ template <class T1, class T2>
+ struct rebind
+ {
+ typedef compressed_pair_5<T1, T2> type;
+ };
+};
+
+template <class T1, class T2>
+struct compressed_pair_traits
+{
+private:
+ typedef compressed_pair_chooser<is_empty<T1>::value, is_empty<T2>::value, is_same<T1,T2>::value> chooser;
+ typedef typename chooser::template rebind<T1, T2> bound_type;
+public:
+ typedef typename bound_type::type type;
+};
+
+} // namespace detail
+
+template <class T1, class T2>
+class compressed_pair : public detail::compressed_pair_traits<T1, T2>::type
+{
+private:
+ typedef typename detail::compressed_pair_traits<T1, T2>::type base_type;
+public:
+ typedef T1 first_type;
+ typedef T2 second_type;
+ typedef typename call_traits<first_type>::param_type first_param_type;
+ typedef typename call_traits<second_type>::param_type second_param_type;
+ typedef typename call_traits<first_type>::reference first_reference;
+ typedef typename call_traits<second_type>::reference second_reference;
+ typedef typename call_traits<first_type>::const_reference first_const_reference;
+ typedef typename call_traits<second_type>::const_reference second_const_reference;
+
+ compressed_pair() : base_type() {}
+ compressed_pair(first_param_type x, second_param_type y) : base_type(x, y) {}
+ template <class A>
+ explicit compressed_pair(const A& x) : base_type(x){}
+
+ first_reference first() { return base_type::first(); }
+ first_const_reference first() const { return base_type::first(); }
+
+ second_reference second() { return base_type::second(); }
+ second_const_reference second() const { return base_type::second(); }
+};
+
+template <class T1, class T2>
+inline void swap(compressed_pair<T1, T2>& x, compressed_pair<T1, T2>& y)
+{
+ x.swap(y);
+}
+
+#else
+// no partial specialisation, no member templates:
+
+template <class T1, class T2>
+class compressed_pair
+{
+private:
+ T1 _first;
+ T2 _second;
+public:
+ typedef T1 first_type;
+ typedef T2 second_type;
+ typedef typename call_traits<first_type>::param_type first_param_type;
+ typedef typename call_traits<second_type>::param_type second_param_type;
+ typedef typename call_traits<first_type>::reference first_reference;
+ typedef typename call_traits<second_type>::reference second_reference;
+ typedef typename call_traits<first_type>::const_reference first_const_reference;
+ typedef typename call_traits<second_type>::const_reference second_const_reference;
+
+ compressed_pair() : _first(), _second() {}
+ compressed_pair(first_param_type x, second_param_type y) : _first(x), _second(y) {}
+ explicit compressed_pair(first_param_type x) : _first(x), _second() {}
+ // can't define this in case T1 == T2:
+ // explicit compressed_pair(second_param_type y) : _first(), _second(y) {}
+
+ first_reference first() { return _first; }
+ first_const_reference first() const { return _first; }
+
+ second_reference second() { return _second; }
+ second_const_reference second() const { return _second; }
+
+ void swap(compressed_pair& y)
+ {
+ using std::swap;
+ swap(_first, y._first);
+ swap(_second, y._second);
+ }
+};
+
+template <class T1, class T2>
+inline void swap(compressed_pair<T1, T2>& x, compressed_pair<T1, T2>& y)
+{
+ x.swap(y);
+}
+
+#endif
+
+} // boost
+
+#endif // BOOST_OB_COMPRESSED_PAIR_HPP
+
+
+
diff --git a/boost/boost/detail/quick_allocator.hpp b/boost/boost/detail/quick_allocator.hpp
new file mode 100644
index 00000000000..ddb0a7616c0
--- /dev/null
+++ b/boost/boost/detail/quick_allocator.hpp
@@ -0,0 +1,198 @@
+#ifndef BOOST_DETAIL_QUICK_ALLOCATOR_HPP_INCLUDED
+#define BOOST_DETAIL_QUICK_ALLOCATOR_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+// detail/quick_allocator.hpp
+//
+// Copyright (c) 2003 David Abrahams
+// Copyright (c) 2003 Peter Dimov
+//
+// 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)
+//
+
+#include <boost/config.hpp>
+
+#include <boost/detail/lightweight_mutex.hpp>
+#include <boost/type_traits/type_with_alignment.hpp>
+#include <boost/type_traits/alignment_of.hpp>
+
+#include <new> // ::operator new, ::operator delete
+#include <cstddef> // std::size_t
+
+namespace boost
+{
+
+namespace detail
+{
+
+template<unsigned size, unsigned align_> union freeblock
+{
+ typedef typename boost::type_with_alignment<align_>::type aligner_type;
+ aligner_type aligner;
+ char bytes[size];
+ freeblock * next;
+};
+
+template<unsigned size, unsigned align_> struct allocator_impl
+{
+ typedef freeblock<size, align_> block;
+
+ // It may seem odd to use such small pages.
+ //
+ // However, on a typical Windows implementation that uses
+ // the OS allocator, "normal size" pages interact with the
+ // "ordinary" operator new, slowing it down dramatically.
+ //
+ // 512 byte pages are handled by the small object allocator,
+ // and don't interfere with ::new.
+ //
+ // The other alternative is to use much bigger pages (1M.)
+ //
+ // It is surprisingly easy to hit pathological behavior by
+ // varying the page size. g++ 2.96 on Red Hat Linux 7.2,
+ // for example, passionately dislikes 496. 512 seems OK.
+
+#if defined(BOOST_QA_PAGE_SIZE)
+
+ enum { items_per_page = BOOST_QA_PAGE_SIZE / size };
+
+#else
+
+ enum { items_per_page = 512 / size }; // 1048560 / size
+
+#endif
+
+#ifdef BOOST_HAS_THREADS
+
+ static lightweight_mutex & mutex()
+ {
+ static lightweight_mutex m;
+ return m;
+ }
+
+ static lightweight_mutex * mutex_init;
+
+#endif
+
+ static block * free;
+ static block * page;
+ static unsigned last;
+
+ static inline void * alloc()
+ {
+#ifdef BOOST_HAS_THREADS
+ lightweight_mutex::scoped_lock lock( mutex() );
+#endif
+ if(block * x = free)
+ {
+ free = x->next;
+ return x;
+ }
+ else
+ {
+ if(last == items_per_page)
+ {
+ // "Listen to me carefully: there is no memory leak"
+ // -- Scott Meyers, Eff C++ 2nd Ed Item 10
+ page = ::new block[items_per_page];
+ last = 0;
+ }
+
+ return &page[last++];
+ }
+ }
+
+ static inline void * alloc(std::size_t n)
+ {
+ if(n != size) // class-specific new called for a derived object
+ {
+ return ::operator new(n);
+ }
+ else
+ {
+#ifdef BOOST_HAS_THREADS
+ lightweight_mutex::scoped_lock lock( mutex() );
+#endif
+ if(block * x = free)
+ {
+ free = x->next;
+ return x;
+ }
+ else
+ {
+ if(last == items_per_page)
+ {
+ page = ::new block[items_per_page];
+ last = 0;
+ }
+
+ return &page[last++];
+ }
+ }
+ }
+
+ static inline void dealloc(void * pv)
+ {
+ if(pv != 0) // 18.4.1.1/13
+ {
+#ifdef BOOST_HAS_THREADS
+ lightweight_mutex::scoped_lock lock( mutex() );
+#endif
+ block * pb = static_cast<block *>(pv);
+ pb->next = free;
+ free = pb;
+ }
+ }
+
+ static inline void dealloc(void * pv, std::size_t n)
+ {
+ if(n != size) // class-specific delete called for a derived object
+ {
+ ::operator delete(pv);
+ }
+ else if(pv != 0) // 18.4.1.1/13
+ {
+#ifdef BOOST_HAS_THREADS
+ lightweight_mutex::scoped_lock lock( mutex() );
+#endif
+ block * pb = static_cast<block *>(pv);
+ pb->next = free;
+ free = pb;
+ }
+ }
+};
+
+#ifdef BOOST_HAS_THREADS
+
+template<unsigned size, unsigned align_>
+ lightweight_mutex * allocator_impl<size, align_>::mutex_init = &allocator_impl<size, align_>::mutex();
+
+#endif
+
+template<unsigned size, unsigned align_>
+ freeblock<size, align_> * allocator_impl<size, align_>::free = 0;
+
+template<unsigned size, unsigned align_>
+ freeblock<size, align_> * allocator_impl<size, align_>::page = 0;
+
+template<unsigned size, unsigned align_>
+ unsigned allocator_impl<size, align_>::last = allocator_impl<size, align_>::items_per_page;
+
+template<class T>
+struct quick_allocator: public allocator_impl< sizeof(T), boost::alignment_of<T>::value >
+{
+};
+
+} // namespace detail
+
+} // namespace boost
+
+#endif // #ifndef BOOST_DETAIL_QUICK_ALLOCATOR_HPP_INCLUDED
diff --git a/boost/boost/detail/reference_content.hpp b/boost/boost/detail/reference_content.hpp
new file mode 100644
index 00000000000..daf56a8b193
--- /dev/null
+++ b/boost/boost/detail/reference_content.hpp
@@ -0,0 +1,141 @@
+//-----------------------------------------------------------------------------
+// boost detail/reference_content.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_REFERENCE_CONTENT_HPP
+#define BOOST_DETAIL_REFERENCE_CONTENT_HPP
+
+#include "boost/config.hpp"
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+# include "boost/mpl/bool.hpp"
+# include "boost/type_traits/has_nothrow_copy.hpp"
+#else
+# include "boost/mpl/if.hpp"
+# include "boost/type_traits/is_reference.hpp"
+#endif
+
+#include "boost/mpl/void.hpp"
+
+namespace boost {
+
+namespace detail {
+
+///////////////////////////////////////////////////////////////////////////////
+// (detail) class template reference_content
+//
+// Non-Assignable wrapper for references.
+//
+template <typename RefT>
+class reference_content
+{
+private: // representation
+
+ RefT content_;
+
+public: // structors
+
+ ~reference_content()
+ {
+ }
+
+ reference_content(RefT r)
+ : content_( r )
+ {
+ }
+
+ reference_content(const reference_content& operand)
+ : content_( operand.content_ )
+ {
+ }
+
+private: // non-Assignable
+
+ reference_content& operator=(const reference_content&);
+
+public: // queries
+
+ RefT get() const
+ {
+ return content_;
+ }
+
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// (detail) metafunction make_reference_content
+//
+// Wraps with reference_content if specified type is reference.
+//
+
+template <typename T = mpl::void_> struct make_reference_content;
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template <typename T>
+struct make_reference_content
+{
+ typedef T type;
+};
+
+template <typename T>
+struct make_reference_content< T& >
+{
+ typedef reference_content<T&> type;
+};
+
+#else // defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template <typename T>
+struct make_reference_content
+ : mpl::if_<
+ is_reference<T>
+ , reference_content<T>
+ , T
+ >
+{
+};
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION workaround
+
+template <>
+struct make_reference_content< mpl::void_ >
+{
+ template <typename T>
+ struct apply
+ : make_reference_content<T>
+ {
+ };
+
+ typedef mpl::void_ type;
+};
+
+} // namespace detail
+
+///////////////////////////////////////////////////////////////////////////////
+// reference_content<T&> type traits specializations
+//
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template <typename T>
+struct has_nothrow_copy<
+ ::boost::detail::reference_content< T& >
+ >
+ : mpl::true_
+{
+};
+
+#endif // !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+} // namespace boost
+
+#endif // BOOST_DETAIL_REFERENCE_CONTENT_HPP
diff --git a/boost/boost/detail/select_type.hpp b/boost/boost/detail/select_type.hpp
new file mode 100644
index 00000000000..c13946f3384
--- /dev/null
+++ b/boost/boost/detail/select_type.hpp
@@ -0,0 +1,36 @@
+// (C) Copyright David Abrahams 2001.
+// 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.
+
+// Revision History
+// 09 Feb 01 Applied John Maddock's Borland patch Moving <true>
+// specialization to unspecialized template (David Abrahams)
+// 06 Feb 01 Created (David Abrahams)
+
+#ifndef SELECT_TYPE_DWA20010206_HPP
+# define SELECT_TYPE_DWA20010206_HPP
+
+namespace boost { namespace detail {
+
+ // Template class if_true -- select among 2 types based on a bool constant expression
+ // Usage:
+ // typename if_true<(bool_const_expression)>::template then<true_type, false_type>::type
+
+ // HP aCC cannot deal with missing names for template value parameters
+ template <bool b> struct if_true
+ {
+ template <class T, class F>
+ struct then { typedef T type; };
+ };
+
+ template <>
+ struct if_true<false>
+ {
+ template <class T, class F>
+ struct then { typedef F type; };
+ };
+}}
+#endif // SELECT_TYPE_DWA20010206_HPP
diff --git a/boost/boost/detail/shared_array_nmt.hpp b/boost/boost/detail/shared_array_nmt.hpp
new file mode 100644
index 00000000000..13ca6aca151
--- /dev/null
+++ b/boost/boost/detail/shared_array_nmt.hpp
@@ -0,0 +1,151 @@
+#ifndef BOOST_DETAIL_SHARED_ARRAY_NMT_HPP_INCLUDED
+#define BOOST_DETAIL_SHARED_ARRAY_NMT_HPP_INCLUDED
+
+//
+// detail/shared_array_nmt.hpp - shared_array.hpp without member templates
+//
+// (C) Copyright Greg Colvin and Beman Dawes 1998, 1999.
+// Copyright (c) 2001, 2002 Peter Dimov
+//
+// 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/smart_ptr/shared_array.htm for documentation.
+//
+
+#include <boost/assert.hpp>
+#include <boost/checked_delete.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/detail/atomic_count.hpp>
+
+#include <cstddef> // for std::ptrdiff_t
+#include <algorithm> // for std::swap
+#include <functional> // for std::less
+#include <new> // for std::bad_alloc
+
+namespace boost
+{
+
+template<class T> class shared_array
+{
+private:
+
+ typedef detail::atomic_count count_type;
+
+public:
+
+ typedef T element_type;
+
+ explicit shared_array(T * p = 0): px(p)
+ {
+#ifndef BOOST_NO_EXCEPTIONS
+
+ try // prevent leak if new throws
+ {
+ pn = new count_type(1);
+ }
+ catch(...)
+ {
+ boost::checked_array_delete(p);
+ throw;
+ }
+
+#else
+
+ pn = new count_type(1);
+
+ if(pn == 0)
+ {
+ boost::checked_array_delete(p);
+ boost::throw_exception(std::bad_alloc());
+ }
+
+#endif
+ }
+
+ ~shared_array()
+ {
+ if(--*pn == 0)
+ {
+ boost::checked_array_delete(px);
+ delete pn;
+ }
+ }
+
+ shared_array(shared_array const & r) : px(r.px) // never throws
+ {
+ pn = r.pn;
+ ++*pn;
+ }
+
+ shared_array & operator=(shared_array const & r)
+ {
+ shared_array(r).swap(*this);
+ return *this;
+ }
+
+ void reset(T * p = 0)
+ {
+ BOOST_ASSERT(p == 0 || p != px);
+ shared_array(p).swap(*this);
+ }
+
+ T * get() const // never throws
+ {
+ return px;
+ }
+
+ T & operator[](std::ptrdiff_t i) const // never throws
+ {
+ BOOST_ASSERT(px != 0);
+ BOOST_ASSERT(i >= 0);
+ return px[i];
+ }
+
+ long use_count() const // never throws
+ {
+ return *pn;
+ }
+
+ bool unique() const // never throws
+ {
+ return *pn == 1;
+ }
+
+ void swap(shared_array<T> & other) // never throws
+ {
+ std::swap(px, other.px);
+ std::swap(pn, other.pn);
+ }
+
+private:
+
+ T * px; // contained pointer
+ count_type * pn; // ptr to reference counter
+
+}; // shared_array
+
+template<class T, class U> inline bool operator==(shared_array<T> const & a, shared_array<U> const & b)
+{
+ return a.get() == b.get();
+}
+
+template<class T, class U> inline bool operator!=(shared_array<T> const & a, shared_array<U> const & b)
+{
+ return a.get() != b.get();
+}
+
+template<class T> inline bool operator<(shared_array<T> const & a, shared_array<T> const & b)
+{
+ return std::less<T*>()(a.get(), b.get());
+}
+
+template<class T> void swap(shared_array<T> & a, shared_array<T> & b)
+{
+ a.swap(b);
+}
+
+} // namespace boost
+
+#endif // #ifndef BOOST_DETAIL_SHARED_ARRAY_NMT_HPP_INCLUDED
diff --git a/boost/boost/detail/shared_count.hpp b/boost/boost/detail/shared_count.hpp
new file mode 100644
index 00000000000..e139a7d138c
--- /dev/null
+++ b/boost/boost/detail/shared_count.hpp
@@ -0,0 +1,376 @@
+#ifndef BOOST_DETAIL_SHARED_COUNT_HPP_INCLUDED
+#define BOOST_DETAIL_SHARED_COUNT_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+// detail/shared_count.hpp
+//
+// Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.
+// Copyright 2004-2005 Peter Dimov
+//
+// 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)
+//
+
+#ifdef __BORLANDC__
+# pragma warn -8027 // Functions containing try are not expanded inline
+#endif
+
+#include <boost/config.hpp>
+#include <boost/checked_delete.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/detail/bad_weak_ptr.hpp>
+#include <boost/detail/sp_counted_base.hpp>
+#include <boost/detail/sp_counted_impl.hpp>
+
+#include <memory> // std::auto_ptr
+#include <functional> // std::less
+#include <new> // std::bad_alloc
+#include <typeinfo> // std::type_info in get_deleter
+
+namespace boost
+{
+
+namespace detail
+{
+
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+
+int const shared_count_id = 0x2C35F101;
+int const weak_count_id = 0x298C38A4;
+
+#endif
+
+class weak_count;
+
+class shared_count
+{
+private:
+
+ sp_counted_base * pi_;
+
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+ int id_;
+#endif
+
+ friend class weak_count;
+
+public:
+
+ shared_count(): pi_(0) // nothrow
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+ , id_(shared_count_id)
+#endif
+ {
+ }
+
+ template<class Y> explicit shared_count( Y * p ): pi_( 0 )
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+ , id_(shared_count_id)
+#endif
+ {
+#ifndef BOOST_NO_EXCEPTIONS
+
+ try
+ {
+ pi_ = new sp_counted_impl_p<Y>( p );
+ }
+ catch(...)
+ {
+ boost::checked_delete( p );
+ throw;
+ }
+
+#else
+
+ pi_ = new sp_counted_impl_p<Y>( p );
+
+ if( pi_ == 0 )
+ {
+ boost::checked_delete( p );
+ boost::throw_exception( std::bad_alloc() );
+ }
+
+#endif
+ }
+
+ template<class P, class D> shared_count(P p, D d): pi_(0)
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+ , id_(shared_count_id)
+#endif
+ {
+#ifndef BOOST_NO_EXCEPTIONS
+
+ try
+ {
+ pi_ = new sp_counted_impl_pd<P, D>(p, d);
+ }
+ catch(...)
+ {
+ d(p); // delete p
+ throw;
+ }
+
+#else
+
+ pi_ = new sp_counted_impl_pd<P, D>(p, d);
+
+ if(pi_ == 0)
+ {
+ d(p); // delete p
+ boost::throw_exception(std::bad_alloc());
+ }
+
+#endif
+ }
+
+ template<class P, class D, class A> shared_count( P p, D d, A a ): pi_( 0 )
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+ , id_(shared_count_id)
+#endif
+ {
+ typedef sp_counted_impl_pda<P, D, A> impl_type;
+ typedef typename A::template rebind< impl_type >::other A2;
+
+ A2 a2( a );
+
+#ifndef BOOST_NO_EXCEPTIONS
+
+ try
+ {
+ pi_ = a2.allocate( 1, static_cast< impl_type* >( 0 ) );
+ new( static_cast< void* >( pi_ ) ) impl_type( p, d, a );
+ }
+ catch(...)
+ {
+ d( p );
+
+ if( pi_ != 0 )
+ {
+ a2.deallocate( static_cast< impl_type* >( pi_ ), 1 );
+ }
+
+ throw;
+ }
+
+#else
+
+ pi_ = a2.allocate( 1, static_cast< impl_type* >( 0 ) );
+
+ if( pi_ != 0 )
+ {
+ new( static_cast< void* >( pi_ ) ) impl_type( p, d, a );
+ }
+ else
+ {
+ d( p );
+ boost::throw_exception( std::bad_alloc() );
+ }
+
+#endif
+ }
+
+#ifndef BOOST_NO_AUTO_PTR
+
+ // auto_ptr<Y> is special cased to provide the strong guarantee
+
+ template<class Y>
+ explicit shared_count( std::auto_ptr<Y> & r ): pi_( new sp_counted_impl_p<Y>( r.get() ) )
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+ , id_(shared_count_id)
+#endif
+ {
+#ifdef BOOST_NO_EXCEPTIONS
+
+ if( pi_ == 0 )
+ {
+ boost::throw_exception(std::bad_alloc());
+ }
+
+#endif
+
+ r.release();
+ }
+
+#endif
+
+ ~shared_count() // nothrow
+ {
+ if( pi_ != 0 ) pi_->release();
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+ id_ = 0;
+#endif
+ }
+
+ shared_count(shared_count const & r): pi_(r.pi_) // nothrow
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+ , id_(shared_count_id)
+#endif
+ {
+ if( pi_ != 0 ) pi_->add_ref_copy();
+ }
+
+ explicit shared_count(weak_count const & r); // throws bad_weak_ptr when r.use_count() == 0
+
+ shared_count & operator= (shared_count const & r) // nothrow
+ {
+ sp_counted_base * tmp = r.pi_;
+
+ if( tmp != pi_ )
+ {
+ if( tmp != 0 ) tmp->add_ref_copy();
+ if( pi_ != 0 ) pi_->release();
+ pi_ = tmp;
+ }
+
+ return *this;
+ }
+
+ void swap(shared_count & r) // nothrow
+ {
+ sp_counted_base * tmp = r.pi_;
+ r.pi_ = pi_;
+ pi_ = tmp;
+ }
+
+ long use_count() const // nothrow
+ {
+ return pi_ != 0? pi_->use_count(): 0;
+ }
+
+ bool unique() const // nothrow
+ {
+ return use_count() == 1;
+ }
+
+ friend inline bool operator==(shared_count const & a, shared_count const & b)
+ {
+ return a.pi_ == b.pi_;
+ }
+
+ friend inline bool operator<(shared_count const & a, shared_count const & b)
+ {
+ return std::less<sp_counted_base *>()( a.pi_, b.pi_ );
+ }
+
+ void * get_deleter(std::type_info const & ti) const
+ {
+ return pi_? pi_->get_deleter( ti ): 0;
+ }
+};
+
+
+class weak_count
+{
+private:
+
+ sp_counted_base * pi_;
+
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+ int id_;
+#endif
+
+ friend class shared_count;
+
+public:
+
+ weak_count(): pi_(0) // nothrow
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+ , id_(weak_count_id)
+#endif
+ {
+ }
+
+ weak_count(shared_count const & r): pi_(r.pi_) // nothrow
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+ , id_(shared_count_id)
+#endif
+ {
+ if(pi_ != 0) pi_->weak_add_ref();
+ }
+
+ weak_count(weak_count const & r): pi_(r.pi_) // nothrow
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+ , id_(shared_count_id)
+#endif
+ {
+ if(pi_ != 0) pi_->weak_add_ref();
+ }
+
+ ~weak_count() // nothrow
+ {
+ if(pi_ != 0) pi_->weak_release();
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+ id_ = 0;
+#endif
+ }
+
+ weak_count & operator= (shared_count const & r) // nothrow
+ {
+ sp_counted_base * tmp = r.pi_;
+ if(tmp != 0) tmp->weak_add_ref();
+ if(pi_ != 0) pi_->weak_release();
+ pi_ = tmp;
+
+ return *this;
+ }
+
+ weak_count & operator= (weak_count const & r) // nothrow
+ {
+ sp_counted_base * tmp = r.pi_;
+ if(tmp != 0) tmp->weak_add_ref();
+ if(pi_ != 0) pi_->weak_release();
+ pi_ = tmp;
+
+ return *this;
+ }
+
+ void swap(weak_count & r) // nothrow
+ {
+ sp_counted_base * tmp = r.pi_;
+ r.pi_ = pi_;
+ pi_ = tmp;
+ }
+
+ long use_count() const // nothrow
+ {
+ return pi_ != 0? pi_->use_count(): 0;
+ }
+
+ friend inline bool operator==(weak_count const & a, weak_count const & b)
+ {
+ return a.pi_ == b.pi_;
+ }
+
+ friend inline bool operator<(weak_count const & a, weak_count const & b)
+ {
+ return std::less<sp_counted_base *>()(a.pi_, b.pi_);
+ }
+};
+
+inline shared_count::shared_count( weak_count const & r ): pi_( r.pi_ )
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+ , id_(shared_count_id)
+#endif
+{
+ if( pi_ == 0 || !pi_->add_ref_lock() )
+ {
+ boost::throw_exception( boost::bad_weak_ptr() );
+ }
+}
+
+} // namespace detail
+
+} // namespace boost
+
+#ifdef __BORLANDC__
+# pragma warn .8027 // Functions containing try are not expanded inline
+#endif
+
+#endif // #ifndef BOOST_DETAIL_SHARED_COUNT_HPP_INCLUDED
diff --git a/boost/boost/detail/shared_ptr_nmt.hpp b/boost/boost/detail/shared_ptr_nmt.hpp
new file mode 100644
index 00000000000..0780e305b59
--- /dev/null
+++ b/boost/boost/detail/shared_ptr_nmt.hpp
@@ -0,0 +1,182 @@
+#ifndef BOOST_DETAIL_SHARED_PTR_NMT_HPP_INCLUDED
+#define BOOST_DETAIL_SHARED_PTR_NMT_HPP_INCLUDED
+
+//
+// detail/shared_ptr_nmt.hpp - shared_ptr.hpp without member templates
+//
+// (C) Copyright Greg Colvin and Beman Dawes 1998, 1999.
+// Copyright (c) 2001, 2002 Peter Dimov
+//
+// 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/smart_ptr/shared_ptr.htm for documentation.
+//
+
+#include <boost/assert.hpp>
+#include <boost/checked_delete.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/detail/atomic_count.hpp>
+
+#ifndef BOOST_NO_AUTO_PTR
+# include <memory> // for std::auto_ptr
+#endif
+
+#include <algorithm> // for std::swap
+#include <functional> // for std::less
+#include <new> // for std::bad_alloc
+
+namespace boost
+{
+
+template<class T> class shared_ptr
+{
+private:
+
+ typedef detail::atomic_count count_type;
+
+public:
+
+ typedef T element_type;
+ typedef T value_type;
+
+ explicit shared_ptr(T * p = 0): px(p)
+ {
+#ifndef BOOST_NO_EXCEPTIONS
+
+ try // prevent leak if new throws
+ {
+ pn = new count_type(1);
+ }
+ catch(...)
+ {
+ boost::checked_delete(p);
+ throw;
+ }
+
+#else
+
+ pn = new count_type(1);
+
+ if(pn == 0)
+ {
+ boost::checked_delete(p);
+ boost::throw_exception(std::bad_alloc());
+ }
+
+#endif
+ }
+
+ ~shared_ptr()
+ {
+ if(--*pn == 0)
+ {
+ boost::checked_delete(px);
+ delete pn;
+ }
+ }
+
+ shared_ptr(shared_ptr const & r): px(r.px) // never throws
+ {
+ pn = r.pn;
+ ++*pn;
+ }
+
+ shared_ptr & operator=(shared_ptr const & r)
+ {
+ shared_ptr(r).swap(*this);
+ return *this;
+ }
+
+#ifndef BOOST_NO_AUTO_PTR
+
+ explicit shared_ptr(std::auto_ptr<T> & r)
+ {
+ pn = new count_type(1); // may throw
+ px = r.release(); // fix: moved here to stop leak if new throws
+ }
+
+ shared_ptr & operator=(std::auto_ptr<T> & r)
+ {
+ shared_ptr(r).swap(*this);
+ return *this;
+ }
+
+#endif
+
+ void reset(T * p = 0)
+ {
+ BOOST_ASSERT(p == 0 || p != px);
+ shared_ptr(p).swap(*this);
+ }
+
+ T & operator*() const // never throws
+ {
+ BOOST_ASSERT(px != 0);
+ return *px;
+ }
+
+ T * operator->() const // never throws
+ {
+ BOOST_ASSERT(px != 0);
+ return px;
+ }
+
+ T * get() const // never throws
+ {
+ return px;
+ }
+
+ long use_count() const // never throws
+ {
+ return *pn;
+ }
+
+ bool unique() const // never throws
+ {
+ return *pn == 1;
+ }
+
+ void swap(shared_ptr<T> & other) // never throws
+ {
+ std::swap(px, other.px);
+ std::swap(pn, other.pn);
+ }
+
+private:
+
+ T * px; // contained pointer
+ count_type * pn; // ptr to reference counter
+};
+
+template<class T, class U> inline bool operator==(shared_ptr<T> const & a, shared_ptr<U> const & b)
+{
+ return a.get() == b.get();
+}
+
+template<class T, class U> inline bool operator!=(shared_ptr<T> const & a, shared_ptr<U> const & b)
+{
+ return a.get() != b.get();
+}
+
+template<class T> inline bool operator<(shared_ptr<T> const & a, shared_ptr<T> const & b)
+{
+ return std::less<T*>()(a.get(), b.get());
+}
+
+template<class T> void swap(shared_ptr<T> & a, shared_ptr<T> & b)
+{
+ a.swap(b);
+}
+
+// get_pointer() enables boost::mem_fn to recognize shared_ptr
+
+template<class T> inline T * get_pointer(shared_ptr<T> const & p)
+{
+ return p.get();
+}
+
+} // namespace boost
+
+#endif // #ifndef BOOST_DETAIL_SHARED_PTR_NMT_HPP_INCLUDED
diff --git a/boost/boost/detail/sp_counted_base.hpp b/boost/boost/detail/sp_counted_base.hpp
new file mode 100644
index 00000000000..bc170caf035
--- /dev/null
+++ b/boost/boost/detail/sp_counted_base.hpp
@@ -0,0 +1,69 @@
+#ifndef BOOST_DETAIL_SP_COUNTED_BASE_HPP_INCLUDED
+#define BOOST_DETAIL_SP_COUNTED_BASE_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+// detail/sp_counted_base.hpp
+//
+// Copyright 2005 Peter Dimov
+//
+// 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)
+//
+
+#include <boost/config.hpp>
+
+#if defined( BOOST_SP_DISABLE_THREADS )
+
+# include <boost/detail/sp_counted_base_nt.hpp>
+
+#elif defined( BOOST_SP_USE_PTHREADS )
+
+# include <boost/detail/sp_counted_base_pt.hpp>
+
+#elif defined( __GNUC__ ) && ( defined( __i386__ ) || defined( __x86_64__ ) )
+
+# include <boost/detail/sp_counted_base_gcc_x86.hpp>
+
+//~ #elif defined( __MWERKS__ ) && ( defined( __i386__ ) || defined( __x86_64__ ) )
+
+//~ # include <boost/detail/sp_counted_base_cw_x86.hpp>
+
+#elif defined( __GNUC__ ) && defined( __ia64__ ) && !defined( __INTEL_COMPILER )
+
+# include <boost/detail/sp_counted_base_gcc_ia64.hpp>
+
+#elif defined( __MWERKS__ ) && defined( __POWERPC__ )
+
+# include <boost/detail/sp_counted_base_cw_ppc.hpp>
+
+#elif defined( __GNUC__ ) && ( defined( __powerpc__ ) || defined( __ppc__ ) )
+
+# include <boost/detail/sp_counted_base_gcc_ppc.hpp>
+
+#elif defined( WIN32 ) || defined( _WIN32 ) || defined( __WIN32__ )
+
+# include <boost/detail/sp_counted_base_w32.hpp>
+
+#elif !defined( BOOST_HAS_THREADS )
+
+# include <boost/detail/sp_counted_base_nt.hpp>
+
+#elif defined( BOOST_HAS_PTHREADS )
+
+# include <boost/detail/sp_counted_base_pt.hpp>
+
+#else
+
+// Use #define BOOST_DISABLE_THREADS to avoid the error
+# error Unrecognized threading platform
+
+#endif
+
+#endif // #ifndef BOOST_DETAIL_SP_COUNTED_BASE_HPP_INCLUDED
diff --git a/boost/boost/detail/sp_counted_base_cw_ppc.hpp b/boost/boost/detail/sp_counted_base_cw_ppc.hpp
new file mode 100644
index 00000000000..c56a56268a7
--- /dev/null
+++ b/boost/boost/detail/sp_counted_base_cw_ppc.hpp
@@ -0,0 +1,170 @@
+#ifndef BOOST_DETAIL_SP_COUNTED_BASE_CW_PPC_HPP_INCLUDED
+#define BOOST_DETAIL_SP_COUNTED_BASE_CW_PPC_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+// detail/sp_counted_base_cw_ppc.hpp - CodeWarrior on PowerPC
+//
+// Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.
+// Copyright 2004-2005 Peter Dimov
+//
+// 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)
+//
+//
+// Lock-free algorithm by Alexander Terekhov
+//
+// Thanks to Ben Hitchings for the #weak + (#shared != 0)
+// formulation
+//
+
+#include <typeinfo>
+
+namespace boost
+{
+
+namespace detail
+{
+
+inline void atomic_increment( register long * pw )
+{
+ register int a;
+
+ asm
+ {
+loop:
+
+ lwarx a, 0, pw
+ addi a, a, 1
+ stwcx. a, 0, pw
+ bne- loop
+ }
+}
+
+inline long atomic_decrement( register long * pw )
+{
+ register int a;
+
+ asm
+ {
+ sync
+
+loop:
+
+ lwarx a, 0, pw
+ addi a, a, -1
+ stwcx. a, 0, pw
+ bne- loop
+
+ isync
+ }
+
+ return a;
+}
+
+inline long atomic_conditional_increment( register long * pw )
+{
+ register int a;
+
+ asm
+ {
+loop:
+
+ lwarx a, 0, pw
+ cmpwi a, 0
+ beq store
+
+ addi a, a, 1
+
+store:
+
+ stwcx. a, 0, pw
+ bne- loop
+ }
+
+ return a;
+}
+
+class sp_counted_base
+{
+private:
+
+ sp_counted_base( sp_counted_base const & );
+ sp_counted_base & operator= ( sp_counted_base const & );
+
+ long use_count_; // #shared
+ long weak_count_; // #weak + (#shared != 0)
+
+public:
+
+ sp_counted_base(): use_count_( 1 ), weak_count_( 1 )
+ {
+ }
+
+ virtual ~sp_counted_base() // nothrow
+ {
+ }
+
+ // dispose() is called when use_count_ drops to zero, to release
+ // the resources managed by *this.
+
+ virtual void dispose() = 0; // nothrow
+
+ // destroy() is called when weak_count_ drops to zero.
+
+ virtual void destroy() // nothrow
+ {
+ delete this;
+ }
+
+ virtual void * get_deleter( std::type_info const & ti ) = 0;
+
+ void add_ref_copy()
+ {
+ atomic_increment( &use_count_ );
+ }
+
+ bool add_ref_lock() // true on success
+ {
+ return atomic_conditional_increment( &use_count_ ) != 0;
+ }
+
+ void release() // nothrow
+ {
+ if( atomic_decrement( &use_count_ ) == 0 )
+ {
+ dispose();
+ weak_release();
+ }
+ }
+
+ void weak_add_ref() // nothrow
+ {
+ atomic_increment( &weak_count_ );
+ }
+
+ void weak_release() // nothrow
+ {
+ if( atomic_decrement( &weak_count_ ) == 0 )
+ {
+ destroy();
+ }
+ }
+
+ long use_count() const // nothrow
+ {
+ return static_cast<long const volatile &>( use_count_ );
+ }
+};
+
+} // namespace detail
+
+} // namespace boost
+
+#endif // #ifndef BOOST_DETAIL_SP_COUNTED_BASE_CW_PPC_HPP_INCLUDED
diff --git a/boost/boost/detail/sp_counted_base_cw_x86.hpp b/boost/boost/detail/sp_counted_base_cw_x86.hpp
new file mode 100644
index 00000000000..63c9fa204c0
--- /dev/null
+++ b/boost/boost/detail/sp_counted_base_cw_x86.hpp
@@ -0,0 +1,158 @@
+#ifndef BOOST_DETAIL_SP_COUNTED_BASE_CW_X86_HPP_INCLUDED
+#define BOOST_DETAIL_SP_COUNTED_BASE_CW_X86_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+// detail/sp_counted_base_cw_x86.hpp - CodeWarrion on 486+
+//
+// Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.
+// Copyright 2004-2005 Peter Dimov
+// Copyright 2005 Rene Rivera
+//
+// 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)
+//
+//
+// Lock-free algorithm by Alexander Terekhov
+//
+// Thanks to Ben Hitchings for the #weak + (#shared != 0)
+// formulation
+//
+
+#include <typeinfo>
+
+namespace boost
+{
+
+namespace detail
+{
+
+inline int atomic_exchange_and_add( int * pw, int dv )
+{
+ // int r = *pw;
+ // *pw += dv;
+ // return r;
+
+ asm
+ {
+ mov esi, [pw]
+ mov eax, dv
+ lock xadd dword ptr [esi], eax
+ }
+}
+
+inline void atomic_increment( int * pw )
+{
+ //atomic_exchange_and_add( pw, 1 );
+
+ asm
+ {
+ mov esi, [pw]
+ lock inc dword ptr [esi]
+ }
+}
+
+inline int atomic_conditional_increment( int * pw )
+{
+ // int rv = *pw;
+ // if( rv != 0 ) ++*pw;
+ // return rv;
+
+ asm
+ {
+ mov esi, [pw]
+ mov eax, dword ptr [esi]
+ L0:
+ test eax, eax
+ je L1
+ mov ebx, eax
+ inc ebx
+ lock cmpxchg dword ptr [esi], ebx
+ jne L0
+ L1:
+ }
+}
+
+class sp_counted_base
+{
+private:
+
+ sp_counted_base( sp_counted_base const & );
+ sp_counted_base & operator= ( sp_counted_base const & );
+
+ int use_count_; // #shared
+ int weak_count_; // #weak + (#shared != 0)
+
+public:
+
+ sp_counted_base(): use_count_( 1 ), weak_count_( 1 )
+ {
+ }
+
+ virtual ~sp_counted_base() // nothrow
+ {
+ }
+
+ // dispose() is called when use_count_ drops to zero, to release
+ // the resources managed by *this.
+
+ virtual void dispose() = 0; // nothrow
+
+ // destroy() is called when weak_count_ drops to zero.
+
+ virtual void destroy() // nothrow
+ {
+ delete this;
+ }
+
+ virtual void * get_deleter( std::type_info const & ti ) = 0;
+
+ void add_ref_copy()
+ {
+ atomic_increment( &use_count_ );
+ }
+
+ bool add_ref_lock() // true on success
+ {
+ return atomic_conditional_increment( &use_count_ ) != 0;
+ }
+
+ void release() // nothrow
+ {
+ if( atomic_exchange_and_add( &use_count_, -1 ) == 1 )
+ {
+ dispose();
+ weak_release();
+ }
+ }
+
+ void weak_add_ref() // nothrow
+ {
+ atomic_increment( &weak_count_ );
+ }
+
+ void weak_release() // nothrow
+ {
+ if( atomic_exchange_and_add( &weak_count_, -1 ) == 1 )
+ {
+ destroy();
+ }
+ }
+
+ long use_count() const // nothrow
+ {
+ return static_cast<int const volatile &>( use_count_ );
+ }
+};
+
+} // namespace detail
+
+} // namespace boost
+
+#endif // #ifndef BOOST_DETAIL_SP_COUNTED_BASE_GCC_X86_HPP_INCLUDED
diff --git a/boost/boost/detail/sp_counted_base_gcc_ia64.hpp b/boost/boost/detail/sp_counted_base_gcc_ia64.hpp
new file mode 100644
index 00000000000..7f4bd252d31
--- /dev/null
+++ b/boost/boost/detail/sp_counted_base_gcc_ia64.hpp
@@ -0,0 +1,157 @@
+#ifndef BOOST_DETAIL_SP_COUNTED_BASE_GCC_IA64_HPP_INCLUDED
+#define BOOST_DETAIL_SP_COUNTED_BASE_GCC_IA64_HPP_INCLUDED
+
+//
+// detail/sp_counted_base_gcc_ia64.hpp - g++ on IA64
+//
+// Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.
+// Copyright 2004-2006 Peter Dimov
+// Copyright 2005 Ben Hutchings
+//
+// 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)
+//
+//
+// Lock-free algorithm by Alexander Terekhov
+//
+
+#include <typeinfo>
+
+namespace boost
+{
+
+namespace detail
+{
+
+inline void atomic_increment( int * pw )
+{
+ // ++*pw;
+
+ int tmp;
+
+ // No barrier is required here but fetchadd always has an acquire or
+ // release barrier associated with it. We choose release as it should be
+ // cheaper.
+ __asm__ ("fetchadd4.rel %0=%1,1" :
+ "=r"(tmp), "=m"(*pw) :
+ "m"( *pw ));
+}
+
+inline int atomic_decrement( int * pw )
+{
+ // return --*pw;
+
+ int rv;
+
+ __asm__ (" fetchadd4.rel %0=%1,-1 ;; \n"
+ " cmp.eq p7,p0=1,%0 ;; \n"
+ "(p7) ld4.acq %0=%1 " :
+ "=&r"(rv), "=m"(*pw) :
+ "m"( *pw ) :
+ "p7");
+
+ return rv;
+}
+
+inline int atomic_conditional_increment( int * pw )
+{
+ // if( *pw != 0 ) ++*pw;
+ // return *pw;
+
+ int rv, tmp, tmp2;
+
+ __asm__ ("0: ld4 %0=%3 ;; \n"
+ " cmp.eq p7,p0=0,%0 ;; \n"
+ "(p7) br.cond.spnt 1f \n"
+ " mov ar.ccv=%0 \n"
+ " add %1=1,%0 ;; \n"
+ " cmpxchg4.acq %2=%3,%1,ar.ccv ;; \n"
+ " cmp.ne p7,p0=%0,%2 ;; \n"
+ "(p7) br.cond.spnt 0b \n"
+ " mov %0=%1 ;; \n"
+ "1:" :
+ "=&r"(rv), "=&r"(tmp), "=&r"(tmp2), "=m"(*pw) :
+ "m"( *pw ) :
+ "ar.ccv", "p7");
+
+ return rv;
+}
+
+class sp_counted_base
+{
+private:
+
+ sp_counted_base( sp_counted_base const & );
+ sp_counted_base & operator= ( sp_counted_base const & );
+
+ int use_count_; // #shared
+ int weak_count_; // #weak + (#shared != 0)
+
+public:
+
+ sp_counted_base(): use_count_( 1 ), weak_count_( 1 )
+ {
+ }
+
+ virtual ~sp_counted_base() // nothrow
+ {
+ }
+
+ // dispose() is called when use_count_ drops to zero, to release
+ // the resources managed by *this.
+
+ virtual void dispose() = 0; // nothrow
+
+ // destroy() is called when weak_count_ drops to zero.
+
+ virtual void destroy() // nothrow
+ {
+ delete this;
+ }
+
+ virtual void * get_deleter( std::type_info const & ti ) = 0;
+
+ void add_ref_copy()
+ {
+ atomic_increment( &use_count_ );
+ }
+
+ bool add_ref_lock() // true on success
+ {
+ return atomic_conditional_increment( &use_count_ ) != 0;
+ }
+
+ void release() // nothrow
+ {
+ if( atomic_decrement( &use_count_ ) == 0 )
+ {
+ dispose();
+ weak_release();
+ }
+ }
+
+ void weak_add_ref() // nothrow
+ {
+ atomic_increment( &weak_count_ );
+ }
+
+ void weak_release() // nothrow
+ {
+ if( atomic_decrement( &weak_count_ ) == 0 )
+ {
+ destroy();
+ }
+ }
+
+ long use_count() const // nothrow
+ {
+ return static_cast<int const volatile &>( use_count_ ); // TODO use ld.acq here
+ }
+};
+
+} // namespace detail
+
+} // namespace boost
+
+#endif // #ifndef BOOST_DETAIL_SP_COUNTED_BASE_GCC_IA64_HPP_INCLUDED
diff --git a/boost/boost/detail/sp_counted_base_gcc_ppc.hpp b/boost/boost/detail/sp_counted_base_gcc_ppc.hpp
new file mode 100644
index 00000000000..ca5cf2b39c1
--- /dev/null
+++ b/boost/boost/detail/sp_counted_base_gcc_ppc.hpp
@@ -0,0 +1,181 @@
+#ifndef BOOST_DETAIL_SP_COUNTED_BASE_GCC_PPC_HPP_INCLUDED
+#define BOOST_DETAIL_SP_COUNTED_BASE_GCC_PPC_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+// detail/sp_counted_base_gcc_ppc.hpp - g++ on PowerPC
+//
+// Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.
+// Copyright 2004-2005 Peter Dimov
+//
+// 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)
+//
+//
+// Lock-free algorithm by Alexander Terekhov
+//
+// Thanks to Ben Hitchings for the #weak + (#shared != 0)
+// formulation
+//
+
+#include <typeinfo>
+
+namespace boost
+{
+
+namespace detail
+{
+
+inline void atomic_increment( int * pw )
+{
+ // ++*pw;
+
+ int tmp;
+
+ __asm__
+ (
+ "0:\n\t"
+ "lwarx %1, 0, %2\n\t"
+ "addi %1, %1, 1\n\t"
+ "stwcx. %1, 0, %2\n\t"
+ "bne- 0b":
+
+ "=m"( *pw ), "=&b"( tmp ):
+ "r"( pw ), "m"( *pw ):
+ "cc"
+ );
+}
+
+inline int atomic_decrement( int * pw )
+{
+ // return --*pw;
+
+ int rv;
+
+ __asm__ __volatile__
+ (
+ "sync\n\t"
+ "0:\n\t"
+ "lwarx %1, 0, %2\n\t"
+ "addi %1, %1, -1\n\t"
+ "stwcx. %1, 0, %2\n\t"
+ "bne- 0b\n\t"
+ "isync":
+
+ "=m"( *pw ), "=&b"( rv ):
+ "r"( pw ), "m"( *pw ):
+ "memory", "cc"
+ );
+
+ return rv;
+}
+
+inline int atomic_conditional_increment( int * pw )
+{
+ // if( *pw != 0 ) ++*pw;
+ // return *pw;
+
+ int rv;
+
+ __asm__
+ (
+ "0:\n\t"
+ "lwarx %1, 0, %2\n\t"
+ "cmpwi %1, 0\n\t"
+ "beq 1f\n\t"
+ "addi %1, %1, 1\n\t"
+ "1:\n\t"
+ "stwcx. %1, 0, %2\n\t"
+ "bne- 0b":
+
+ "=m"( *pw ), "=&b"( rv ):
+ "r"( pw ), "m"( *pw ):
+ "cc"
+ );
+
+ return rv;
+}
+
+class sp_counted_base
+{
+private:
+
+ sp_counted_base( sp_counted_base const & );
+ sp_counted_base & operator= ( sp_counted_base const & );
+
+ int use_count_; // #shared
+ int weak_count_; // #weak + (#shared != 0)
+
+public:
+
+ sp_counted_base(): use_count_( 1 ), weak_count_( 1 )
+ {
+ }
+
+ virtual ~sp_counted_base() // nothrow
+ {
+ }
+
+ // dispose() is called when use_count_ drops to zero, to release
+ // the resources managed by *this.
+
+ virtual void dispose() = 0; // nothrow
+
+ // destroy() is called when weak_count_ drops to zero.
+
+ virtual void destroy() // nothrow
+ {
+ delete this;
+ }
+
+ virtual void * get_deleter( std::type_info const & ti ) = 0;
+
+ void add_ref_copy()
+ {
+ atomic_increment( &use_count_ );
+ }
+
+ bool add_ref_lock() // true on success
+ {
+ return atomic_conditional_increment( &use_count_ ) != 0;
+ }
+
+ void release() // nothrow
+ {
+ if( atomic_decrement( &use_count_ ) == 0 )
+ {
+ dispose();
+ weak_release();
+ }
+ }
+
+ void weak_add_ref() // nothrow
+ {
+ atomic_increment( &weak_count_ );
+ }
+
+ void weak_release() // nothrow
+ {
+ if( atomic_decrement( &weak_count_ ) == 0 )
+ {
+ destroy();
+ }
+ }
+
+ long use_count() const // nothrow
+ {
+ return static_cast<int const volatile &>( use_count_ );
+ }
+};
+
+} // namespace detail
+
+} // namespace boost
+
+#endif // #ifndef BOOST_DETAIL_SP_COUNTED_BASE_GCC_PPC_HPP_INCLUDED
diff --git a/boost/boost/detail/sp_counted_base_gcc_x86.hpp b/boost/boost/detail/sp_counted_base_gcc_x86.hpp
new file mode 100644
index 00000000000..0a8e189b586
--- /dev/null
+++ b/boost/boost/detail/sp_counted_base_gcc_x86.hpp
@@ -0,0 +1,173 @@
+#ifndef BOOST_DETAIL_SP_COUNTED_BASE_GCC_X86_HPP_INCLUDED
+#define BOOST_DETAIL_SP_COUNTED_BASE_GCC_X86_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+// detail/sp_counted_base_gcc_x86.hpp - g++ on 486+ or AMD64
+//
+// Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.
+// Copyright 2004-2005 Peter Dimov
+//
+// 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)
+//
+//
+// Lock-free algorithm by Alexander Terekhov
+//
+// Thanks to Ben Hitchings for the #weak + (#shared != 0)
+// formulation
+//
+
+#include <typeinfo>
+
+namespace boost
+{
+
+namespace detail
+{
+
+inline int atomic_exchange_and_add( int * pw, int dv )
+{
+ // int r = *pw;
+ // *pw += dv;
+ // return r;
+
+ int r;
+
+ __asm__ __volatile__
+ (
+ "lock\n\t"
+ "xadd %1, %0":
+ "=m"( *pw ), "=r"( r ): // outputs (%0, %1)
+ "m"( *pw ), "1"( dv ): // inputs (%2, %3 == %1)
+ "memory", "cc" // clobbers
+ );
+
+ return r;
+}
+
+inline void atomic_increment( int * pw )
+{
+ //atomic_exchange_and_add( pw, 1 );
+
+ __asm__
+ (
+ "lock\n\t"
+ "incl %0":
+ "=m"( *pw ): // output (%0)
+ "m"( *pw ): // input (%1)
+ "cc" // clobbers
+ );
+}
+
+inline int atomic_conditional_increment( int * pw )
+{
+ // int rv = *pw;
+ // if( rv != 0 ) ++*pw;
+ // return rv;
+
+ int rv, tmp;
+
+ __asm__
+ (
+ "movl %0, %%eax\n\t"
+ "0:\n\t"
+ "test %%eax, %%eax\n\t"
+ "je 1f\n\t"
+ "movl %%eax, %2\n\t"
+ "incl %2\n\t"
+ "lock\n\t"
+ "cmpxchgl %2, %0\n\t"
+ "jne 0b\n\t"
+ "1:":
+ "=m"( *pw ), "=&a"( rv ), "=&r"( tmp ): // outputs (%0, %1, %2)
+ "m"( *pw ): // input (%3)
+ "cc" // clobbers
+ );
+
+ return rv;
+}
+
+class sp_counted_base
+{
+private:
+
+ sp_counted_base( sp_counted_base const & );
+ sp_counted_base & operator= ( sp_counted_base const & );
+
+ int use_count_; // #shared
+ int weak_count_; // #weak + (#shared != 0)
+
+public:
+
+ sp_counted_base(): use_count_( 1 ), weak_count_( 1 )
+ {
+ }
+
+ virtual ~sp_counted_base() // nothrow
+ {
+ }
+
+ // dispose() is called when use_count_ drops to zero, to release
+ // the resources managed by *this.
+
+ virtual void dispose() = 0; // nothrow
+
+ // destroy() is called when weak_count_ drops to zero.
+
+ virtual void destroy() // nothrow
+ {
+ delete this;
+ }
+
+ virtual void * get_deleter( std::type_info const & ti ) = 0;
+
+ void add_ref_copy()
+ {
+ atomic_increment( &use_count_ );
+ }
+
+ bool add_ref_lock() // true on success
+ {
+ return atomic_conditional_increment( &use_count_ ) != 0;
+ }
+
+ void release() // nothrow
+ {
+ if( atomic_exchange_and_add( &use_count_, -1 ) == 1 )
+ {
+ dispose();
+ weak_release();
+ }
+ }
+
+ void weak_add_ref() // nothrow
+ {
+ atomic_increment( &weak_count_ );
+ }
+
+ void weak_release() // nothrow
+ {
+ if( atomic_exchange_and_add( &weak_count_, -1 ) == 1 )
+ {
+ destroy();
+ }
+ }
+
+ long use_count() const // nothrow
+ {
+ return static_cast<int const volatile &>( use_count_ );
+ }
+};
+
+} // namespace detail
+
+} // namespace boost
+
+#endif // #ifndef BOOST_DETAIL_SP_COUNTED_BASE_GCC_X86_HPP_INCLUDED
diff --git a/boost/boost/detail/sp_counted_base_nt.hpp b/boost/boost/detail/sp_counted_base_nt.hpp
new file mode 100644
index 00000000000..4a4401d7ae1
--- /dev/null
+++ b/boost/boost/detail/sp_counted_base_nt.hpp
@@ -0,0 +1,107 @@
+#ifndef BOOST_DETAIL_SP_COUNTED_BASE_NT_HPP_INCLUDED
+#define BOOST_DETAIL_SP_COUNTED_BASE_NT_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+// detail/sp_counted_base_nt.hpp
+//
+// Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.
+// Copyright 2004-2005 Peter Dimov
+//
+// 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)
+//
+
+#include <typeinfo>
+
+namespace boost
+{
+
+namespace detail
+{
+
+class sp_counted_base
+{
+private:
+
+ sp_counted_base( sp_counted_base const & );
+ sp_counted_base & operator= ( sp_counted_base const & );
+
+ long use_count_; // #shared
+ long weak_count_; // #weak + (#shared != 0)
+
+public:
+
+ sp_counted_base(): use_count_( 1 ), weak_count_( 1 )
+ {
+ }
+
+ virtual ~sp_counted_base() // nothrow
+ {
+ }
+
+ // dispose() is called when use_count_ drops to zero, to release
+ // the resources managed by *this.
+
+ virtual void dispose() = 0; // nothrow
+
+ // destroy() is called when weak_count_ drops to zero.
+
+ virtual void destroy() // nothrow
+ {
+ delete this;
+ }
+
+ virtual void * get_deleter( std::type_info const & ti ) = 0;
+
+ void add_ref_copy()
+ {
+ ++use_count_;
+ }
+
+ bool add_ref_lock() // true on success
+ {
+ if( use_count_ == 0 ) return false;
+ ++use_count_;
+ return true;
+ }
+
+ void release() // nothrow
+ {
+ if( --use_count_ == 0 )
+ {
+ dispose();
+ weak_release();
+ }
+ }
+
+ void weak_add_ref() // nothrow
+ {
+ ++weak_count_;
+ }
+
+ void weak_release() // nothrow
+ {
+ if( --weak_count_ == 0 )
+ {
+ destroy();
+ }
+ }
+
+ long use_count() const // nothrow
+ {
+ return use_count_;
+ }
+};
+
+} // namespace detail
+
+} // namespace boost
+
+#endif // #ifndef BOOST_DETAIL_SP_COUNTED_BASE_NT_HPP_INCLUDED
diff --git a/boost/boost/detail/sp_counted_base_pt.hpp b/boost/boost/detail/sp_counted_base_pt.hpp
new file mode 100644
index 00000000000..191064f59f9
--- /dev/null
+++ b/boost/boost/detail/sp_counted_base_pt.hpp
@@ -0,0 +1,135 @@
+#ifndef BOOST_DETAIL_SP_COUNTED_BASE_PT_HPP_INCLUDED
+#define BOOST_DETAIL_SP_COUNTED_BASE_PT_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+// detail/sp_counted_base_pt.hpp
+//
+// Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.
+// Copyright 2004-2005 Peter Dimov
+//
+// 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)
+//
+
+#include <typeinfo>
+#include <pthread.h>
+
+namespace boost
+{
+
+namespace detail
+{
+
+class sp_counted_base
+{
+private:
+
+ sp_counted_base( sp_counted_base const & );
+ sp_counted_base & operator= ( sp_counted_base const & );
+
+ long use_count_; // #shared
+ long weak_count_; // #weak + (#shared != 0)
+
+ mutable pthread_mutex_t m_;
+
+public:
+
+ sp_counted_base(): use_count_( 1 ), weak_count_( 1 )
+ {
+// HPUX 10.20 / DCE has a nonstandard pthread_mutex_init
+
+#if defined(__hpux) && defined(_DECTHREADS_)
+ pthread_mutex_init( &m_, pthread_mutexattr_default );
+#else
+ pthread_mutex_init( &m_, 0 );
+#endif
+ }
+
+ virtual ~sp_counted_base() // nothrow
+ {
+ pthread_mutex_destroy( &m_ );
+ }
+
+ // dispose() is called when use_count_ drops to zero, to release
+ // the resources managed by *this.
+
+ virtual void dispose() = 0; // nothrow
+
+ // destroy() is called when weak_count_ drops to zero.
+
+ virtual void destroy() // nothrow
+ {
+ delete this;
+ }
+
+ virtual void * get_deleter( std::type_info const & ti ) = 0;
+
+ void add_ref_copy()
+ {
+ pthread_mutex_lock( &m_ );
+ ++use_count_;
+ pthread_mutex_unlock( &m_ );
+ }
+
+ bool add_ref_lock() // true on success
+ {
+ pthread_mutex_lock( &m_ );
+ bool r = use_count_ == 0? false: ( ++use_count_, true );
+ pthread_mutex_unlock( &m_ );
+ return r;
+ }
+
+ void release() // nothrow
+ {
+ pthread_mutex_lock( &m_ );
+ long new_use_count = --use_count_;
+ pthread_mutex_unlock( &m_ );
+
+ if( new_use_count == 0 )
+ {
+ dispose();
+ weak_release();
+ }
+ }
+
+ void weak_add_ref() // nothrow
+ {
+ pthread_mutex_lock( &m_ );
+ ++weak_count_;
+ pthread_mutex_unlock( &m_ );
+ }
+
+ void weak_release() // nothrow
+ {
+ pthread_mutex_lock( &m_ );
+ long new_weak_count = --weak_count_;
+ pthread_mutex_unlock( &m_ );
+
+ if( new_weak_count == 0 )
+ {
+ destroy();
+ }
+ }
+
+ long use_count() const // nothrow
+ {
+ pthread_mutex_lock( &m_ );
+ long r = use_count_;
+ pthread_mutex_unlock( &m_ );
+
+ return r;
+ }
+};
+
+} // namespace detail
+
+} // namespace boost
+
+#endif // #ifndef BOOST_DETAIL_SP_COUNTED_BASE_PT_HPP_INCLUDED
diff --git a/boost/boost/detail/sp_counted_base_w32.hpp b/boost/boost/detail/sp_counted_base_w32.hpp
new file mode 100644
index 00000000000..fb42c4e1cfb
--- /dev/null
+++ b/boost/boost/detail/sp_counted_base_w32.hpp
@@ -0,0 +1,130 @@
+#ifndef BOOST_DETAIL_SP_COUNTED_BASE_W32_HPP_INCLUDED
+#define BOOST_DETAIL_SP_COUNTED_BASE_W32_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+// detail/sp_counted_base_w32.hpp
+//
+// Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.
+// Copyright 2004-2005 Peter Dimov
+//
+// 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)
+//
+//
+// Lock-free algorithm by Alexander Terekhov
+//
+// Thanks to Ben Hitchings for the #weak + (#shared != 0)
+// formulation
+//
+
+#include <boost/detail/interlocked.hpp>
+#include <boost/detail/workaround.hpp>
+#include <typeinfo>
+
+namespace boost
+{
+
+namespace detail
+{
+
+class sp_counted_base
+{
+private:
+
+ sp_counted_base( sp_counted_base const & );
+ sp_counted_base & operator= ( sp_counted_base const & );
+
+ long use_count_; // #shared
+ long weak_count_; // #weak + (#shared != 0)
+
+public:
+
+ sp_counted_base(): use_count_( 1 ), weak_count_( 1 )
+ {
+ }
+
+ virtual ~sp_counted_base() // nothrow
+ {
+ }
+
+ // dispose() is called when use_count_ drops to zero, to release
+ // the resources managed by *this.
+
+ virtual void dispose() = 0; // nothrow
+
+ // destroy() is called when weak_count_ drops to zero.
+
+ virtual void destroy() // nothrow
+ {
+ delete this;
+ }
+
+ virtual void * get_deleter( std::type_info const & ti ) = 0;
+
+ void add_ref_copy()
+ {
+ BOOST_INTERLOCKED_INCREMENT( &use_count_ );
+ }
+
+ bool add_ref_lock() // true on success
+ {
+ for( ;; )
+ {
+ long tmp = static_cast< long const volatile& >( use_count_ );
+ if( tmp == 0 ) return false;
+
+#if defined( BOOST_MSVC ) && BOOST_WORKAROUND( BOOST_MSVC, == 1200 )
+
+ // work around a code generation bug
+
+ long tmp2 = tmp + 1;
+ if( BOOST_INTERLOCKED_COMPARE_EXCHANGE( &use_count_, tmp2, tmp ) == tmp2 - 1 ) return true;
+
+#else
+
+ if( BOOST_INTERLOCKED_COMPARE_EXCHANGE( &use_count_, tmp + 1, tmp ) == tmp ) return true;
+
+#endif
+ }
+ }
+
+ void release() // nothrow
+ {
+ if( BOOST_INTERLOCKED_DECREMENT( &use_count_ ) == 0 )
+ {
+ dispose();
+ weak_release();
+ }
+ }
+
+ void weak_add_ref() // nothrow
+ {
+ BOOST_INTERLOCKED_INCREMENT( &weak_count_ );
+ }
+
+ void weak_release() // nothrow
+ {
+ if( BOOST_INTERLOCKED_DECREMENT( &weak_count_ ) == 0 )
+ {
+ destroy();
+ }
+ }
+
+ long use_count() const // nothrow
+ {
+ return static_cast<long const volatile &>( use_count_ );
+ }
+};
+
+} // namespace detail
+
+} // namespace boost
+
+#endif // #ifndef BOOST_DETAIL_SP_COUNTED_BASE_W32_HPP_INCLUDED
diff --git a/boost/boost/detail/sp_counted_impl.hpp b/boost/boost/detail/sp_counted_impl.hpp
new file mode 100644
index 00000000000..6963f59590a
--- /dev/null
+++ b/boost/boost/detail/sp_counted_impl.hpp
@@ -0,0 +1,232 @@
+#ifndef BOOST_DETAIL_SP_COUNTED_IMPL_HPP_INCLUDED
+#define BOOST_DETAIL_SP_COUNTED_IMPL_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+// detail/sp_counted_impl.hpp
+//
+// Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.
+// Copyright 2004-2005 Peter Dimov
+//
+// 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)
+//
+
+#include <boost/config.hpp>
+
+#if defined(BOOST_SP_USE_STD_ALLOCATOR) && defined(BOOST_SP_USE_QUICK_ALLOCATOR)
+# error BOOST_SP_USE_STD_ALLOCATOR and BOOST_SP_USE_QUICK_ALLOCATOR are incompatible.
+#endif
+
+#include <boost/checked_delete.hpp>
+#include <boost/detail/sp_counted_base.hpp>
+
+#if defined(BOOST_SP_USE_QUICK_ALLOCATOR)
+#include <boost/detail/quick_allocator.hpp>
+#endif
+
+#if defined(BOOST_SP_USE_STD_ALLOCATOR)
+#include <memory> // std::allocator
+#endif
+
+#include <typeinfo> // std::type_info in get_deleter
+#include <cstddef> // std::size_t
+
+namespace boost
+{
+
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+
+void sp_scalar_constructor_hook( void * px, std::size_t size, void * pn );
+void sp_scalar_destructor_hook( void * px, std::size_t size, void * pn );
+
+#endif
+
+namespace detail
+{
+
+template<class X> class sp_counted_impl_p: public sp_counted_base
+{
+private:
+
+ X * px_;
+
+ sp_counted_impl_p( sp_counted_impl_p const & );
+ sp_counted_impl_p & operator= ( sp_counted_impl_p const & );
+
+ typedef sp_counted_impl_p<X> this_type;
+
+public:
+
+ explicit sp_counted_impl_p( X * px ): px_( px )
+ {
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+ boost::sp_scalar_constructor_hook( px, sizeof(X), this );
+#endif
+ }
+
+ virtual void dispose() // nothrow
+ {
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+ boost::sp_scalar_destructor_hook( px_, sizeof(X), this );
+#endif
+ boost::checked_delete( px_ );
+ }
+
+ virtual void * get_deleter( std::type_info const & )
+ {
+ return 0;
+ }
+
+#if defined(BOOST_SP_USE_STD_ALLOCATOR)
+
+ void * operator new( std::size_t )
+ {
+ return std::allocator<this_type>().allocate( 1, static_cast<this_type *>(0) );
+ }
+
+ void operator delete( void * p )
+ {
+ std::allocator<this_type>().deallocate( static_cast<this_type *>(p), 1 );
+ }
+
+#endif
+
+#if defined(BOOST_SP_USE_QUICK_ALLOCATOR)
+
+ void * operator new( std::size_t )
+ {
+ return quick_allocator<this_type>::alloc();
+ }
+
+ void operator delete( void * p )
+ {
+ quick_allocator<this_type>::dealloc( p );
+ }
+
+#endif
+};
+
+//
+// Borland's Codeguard trips up over the -Vx- option here:
+//
+#ifdef __CODEGUARD__
+# pragma option push -Vx-
+#endif
+
+template<class P, class D> class sp_counted_impl_pd: public sp_counted_base
+{
+private:
+
+ P ptr; // copy constructor must not throw
+ D del; // copy constructor must not throw
+
+ sp_counted_impl_pd( sp_counted_impl_pd const & );
+ sp_counted_impl_pd & operator= ( sp_counted_impl_pd const & );
+
+ typedef sp_counted_impl_pd<P, D> this_type;
+
+public:
+
+ // pre: d(p) must not throw
+
+ sp_counted_impl_pd( P p, D d ): ptr(p), del(d)
+ {
+ }
+
+ virtual void dispose() // nothrow
+ {
+ del( ptr );
+ }
+
+ virtual void * get_deleter( std::type_info const & ti )
+ {
+ return ti == typeid(D)? &del: 0;
+ }
+
+#if defined(BOOST_SP_USE_STD_ALLOCATOR)
+
+ void * operator new( std::size_t )
+ {
+ return std::allocator<this_type>().allocate( 1, static_cast<this_type *>(0) );
+ }
+
+ void operator delete( void * p )
+ {
+ std::allocator<this_type>().deallocate( static_cast<this_type *>(p), 1 );
+ }
+
+#endif
+
+#if defined(BOOST_SP_USE_QUICK_ALLOCATOR)
+
+ void * operator new( std::size_t )
+ {
+ return quick_allocator<this_type>::alloc();
+ }
+
+ void operator delete( void * p )
+ {
+ quick_allocator<this_type>::dealloc( p );
+ }
+
+#endif
+};
+
+template<class P, class D, class A> class sp_counted_impl_pda: public sp_counted_base
+{
+private:
+
+ P p_; // copy constructor must not throw
+ D d_; // copy constructor must not throw
+ A a_; // copy constructor must not throw
+
+ sp_counted_impl_pda( sp_counted_impl_pda const & );
+ sp_counted_impl_pda & operator= ( sp_counted_impl_pda const & );
+
+ typedef sp_counted_impl_pda<P, D, A> this_type;
+
+public:
+
+ // pre: d( p ) must not throw
+
+ sp_counted_impl_pda( P p, D d, A a ): p_( p ), d_( d ), a_( a )
+ {
+ }
+
+ virtual void dispose() // nothrow
+ {
+ d_( p_ );
+ }
+
+ virtual void destroy() // nothrow
+ {
+ typedef typename A::template rebind< this_type >::other A2;
+
+ A2 a2( a_ );
+
+ this->~this_type();
+ a2.deallocate( this, 1 );
+ }
+
+ virtual void * get_deleter( std::type_info const & ti )
+ {
+ return ti == typeid( D )? &d_: 0;
+ }
+};
+
+#ifdef __CODEGUARD__
+# pragma option pop
+#endif
+
+} // namespace detail
+
+} // namespace boost
+
+#endif // #ifndef BOOST_DETAIL_SP_COUNTED_IMPL_HPP_INCLUDED
diff --git a/boost/boost/detail/templated_streams.hpp b/boost/boost/detail/templated_streams.hpp
new file mode 100644
index 00000000000..1fa6ee35343
--- /dev/null
+++ b/boost/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/boost/boost/detail/utf8_codecvt_facet.hpp b/boost/boost/detail/utf8_codecvt_facet.hpp
new file mode 100644
index 00000000000..3826ee65e50
--- /dev/null
+++ b/boost/boost/detail/utf8_codecvt_facet.hpp
@@ -0,0 +1,197 @@
+// Copyright © 2001 Ronald Garcia, Indiana University (garcia@osl.iu.edu)
+// Andrew Lumsdaine, Indiana University (lums@osl.iu.edu).
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_UTF8_CODECVT_FACET_HPP
+#define BOOST_UTF8_CODECVT_FACET_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// utf8_codecvt_facet.hpp
+
+// This header defines class utf8_codecvt_facet, derived fro
+// std::codecvt<wchar_t, char>, which can be used to convert utf8 data in
+// files into wchar_t strings in the application.
+//
+// The header is NOT STANDALONE, and is not to be included by the USER.
+// There are at least two libraries which want to use this functionality, and
+// we want to avoid code duplication. It would be possible to create utf8
+// library, but:
+// - this requires review process first
+// - in the case, when linking the a library which uses utf8
+// (say 'program_options'), user should also link to the utf8 library.
+// This seems inconvenient, and asking a user to link to an unrevieved
+// library is strange.
+// Until the above points are fixed, a library which wants to use utf8 must:
+// - include this header from one of it's headers or sources
+// - include the corresponding .cpp file from one of the sources
+// - before including either file, the library must define
+// - BOOST_UTF8_BEGIN_NAMESPACE to the namespace declaration that must be used
+// - BOOST_UTF8_END_NAMESPACE to the code to close the previous namespace
+// - declaration.
+// - BOOST_UTF8_DECL -- to the code which must be used for all 'exportable'
+// symbols.
+//
+// For example, program_options library might contain:
+// #define BOOST_UTF8_BEGIN_NAMESPACE <backslash character>
+// namespace boost { namespace program_options {
+// #define BOOST_UTF8_END_NAMESPACE }}
+// #define BOOST_UTF8_DECL BOOST_PROGRAM_OPTIONS_DECL
+// #include "../../detail/utf8/utf8_codecvt.cpp"
+//
+// Essentially, each library will have its own copy of utf8 code, in
+// different namespaces.
+
+// Note:(Robert Ramey). I have made the following alterations in the original
+// code.
+// a) Rendered utf8_codecvt<wchar_t, char> with using templates
+// b) Move longer functions outside class definition to prevent inlining
+// and make code smaller
+// c) added on a derived class to permit translation to/from current
+// locale to utf8
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+// archives stored as text - note these ar templated on the basic
+// stream templates to accommodate wide (and other?) kind of characters
+//
+// note the fact that on libraries without wide characters, ostream is
+// is not a specialization of basic_ostream which in fact is not defined
+// in such cases. So we can't use basic_ostream<OStream::char_type> but rather
+// use two template parameters
+//
+// utf8_codecvt_facet
+// This is an implementation of a std::codecvt facet for translating
+// from UTF-8 externally to UCS-4. Note that this is not tied to
+// any specific types in order to allow customization on platforms
+// where wchar_t is not big enough.
+//
+// NOTES: The current implementation jumps through some unpleasant hoops in
+// order to deal with signed character types. As a std::codecvt_base::result,
+// it is necessary for the ExternType to be convertible to unsigned char.
+// I chose not to tie the extern_type explicitly to char. But if any combination
+// of types other than <wchar_t,char_t> is used, then std::codecvt must be
+// specialized on those types for this to work.
+
+#include <locale>
+// for mbstate_t
+#include <wchar.h>
+// for std::size_t
+#include <cstddef>
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+namespace std {
+ #if defined(__LIBCOMO__)
+ using ::mbstate_t;
+ #elif defined(BOOST_DINKUMWARE_STDLIB) && !defined(__BORLANDC__)
+ using ::mbstate_t;
+ #elif defined(__SGI_STL_PORT)
+ #elif defined(BOOST_NO_STDC_NAMESPACE)
+ using ::mbstate_t;
+ using ::codecvt;
+ #endif
+} // namespace std
+
+#if !defined(__MSL_CPP__) && !defined(__LIBCOMO__)
+ #define BOOST_CODECVT_DO_LENGTH_CONST const
+#else
+ #define BOOST_CODECVT_DO_LENGTH_CONST
+#endif
+
+// maximum lenght of a multibyte string
+#define MB_LENGTH_MAX 8
+
+BOOST_UTF8_BEGIN_NAMESPACE
+
+struct BOOST_UTF8_DECL utf8_codecvt_facet :
+ public std::codecvt<wchar_t, char, std::mbstate_t>
+{
+public:
+ explicit utf8_codecvt_facet(std::size_t no_locale_manage=0)
+ : std::codecvt<wchar_t, char, std::mbstate_t>(no_locale_manage)
+ {}
+protected:
+ virtual std::codecvt_base::result do_in(
+ std::mbstate_t& state,
+ const char * from,
+ const char * from_end,
+ const char * & from_next,
+ wchar_t * to,
+ wchar_t * to_end,
+ wchar_t*& to_next
+ ) const;
+
+ virtual std::codecvt_base::result do_out(
+ std::mbstate_t & state, const wchar_t * from,
+ const wchar_t * from_end, const wchar_t* & from_next,
+ char * to, char * to_end, char * & to_next
+ ) const;
+
+ bool invalid_continuing_octet(unsigned char octet_1) const {
+ return (octet_1 < 0x80|| 0xbf< octet_1);
+ }
+
+ bool invalid_leading_octet(unsigned char octet_1) const {
+ return (0x7f < octet_1 && octet_1 < 0xc0) ||
+ (octet_1 > 0xfd);
+ }
+
+ // continuing octets = octets except for the leading octet
+ static unsigned int get_cont_octet_count(unsigned char lead_octet) {
+ return get_octet_count(lead_octet) - 1;
+ }
+
+ static unsigned int get_octet_count(unsigned char lead_octet);
+
+ // How many "continuing octets" will be needed for this word
+ // == total octets - 1.
+ int get_cont_octet_out_count(wchar_t word) const ;
+
+ virtual bool do_always_noconv() const throw() { return false; }
+
+ // UTF-8 isn't really stateful since we rewind on partial conversions
+ virtual std::codecvt_base::result do_unshift(
+ std::mbstate_t&,
+ char * from,
+ char * /*to*/,
+ char * & next
+ ) const
+ {
+ next = from;
+ return ok;
+ }
+
+ virtual int do_encoding() const throw() {
+ const int variable_byte_external_encoding=0;
+ return variable_byte_external_encoding;
+ }
+
+ // How many char objects can I process to get <= max_limit
+ // wchar_t objects?
+ virtual int do_length(
+ BOOST_CODECVT_DO_LENGTH_CONST std::mbstate_t &,
+ const char * from,
+ const char * from_end,
+ std::size_t max_limit
+#if BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600))
+ ) const throw();
+#else
+ ) const;
+#endif
+
+ // Largest possible value do_length(state,from,from_end,1) could return.
+ virtual int do_max_length() const throw () {
+ return 6; // largest UTF-8 encoding of a UCS-4 character
+ }
+};
+
+BOOST_UTF8_END_NAMESPACE
+
+#endif // BOOST_UTF8_CODECVT_FACET_HPP
diff --git a/boost/boost/detail/workaround.hpp b/boost/boost/detail/workaround.hpp
new file mode 100644
index 00000000000..b10f9b58d52
--- /dev/null
+++ b/boost/boost/detail/workaround.hpp
@@ -0,0 +1,74 @@
+// Copyright David Abrahams 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)
+#ifndef WORKAROUND_DWA2002126_HPP
+# define WORKAROUND_DWA2002126_HPP
+
+// Compiler/library version workaround macro
+//
+// Usage:
+//
+// #if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+// // workaround for eVC4 and VC6
+// ... // workaround code here
+// #endif
+//
+// When BOOST_STRICT_CONFIG is defined, expands to 0. Otherwise, the
+// first argument must be undefined or expand to a numeric
+// value. The above expands to:
+//
+// (BOOST_MSVC) != 0 && (BOOST_MSVC) < 1300
+//
+// When used for workarounds that apply to the latest known version
+// and all earlier versions of a compiler, the following convention
+// should be observed:
+//
+// #if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1301))
+//
+// The version number in this case corresponds to the last version in
+// which the workaround was known to have been required. When
+// BOOST_DETECT_OUTDATED_WORKAROUNDS is not the defined, the macro
+// BOOST_TESTED_AT(x) expands to "!= 0", which effectively activates
+// the workaround for any version of the compiler. When
+// BOOST_DETECT_OUTDATED_WORKAROUNDS is defined, a compiler warning or
+// error will be issued if the compiler version exceeds the argument
+// to BOOST_TESTED_AT(). This can be used to locate workarounds which
+// may be obsoleted by newer versions.
+
+# ifndef BOOST_STRICT_CONFIG
+
+# define BOOST_WORKAROUND(symbol, test) \
+ ((symbol != 0) && (1 % (( (symbol test) ) + 1)))
+// ^ ^ ^ ^
+// The extra level of parenthesis nesting above, along with the
+// BOOST_OPEN_PAREN indirection below, is required to satisfy the
+// broken preprocessor in MWCW 8.3 and earlier.
+//
+// The basic mechanism works as follows:
+// (symbol test) + 1 => if (symbol test) then 2 else 1
+// 1 % ((symbol test) + 1) => if (symbol test) then 1 else 0
+//
+// The complication with % is for cooperation with BOOST_TESTED_AT().
+// When "test" is BOOST_TESTED_AT(x) and
+// BOOST_DETECT_OUTDATED_WORKAROUNDS is #defined,
+//
+// symbol test => if (symbol <= x) then 1 else -1
+// (symbol test) + 1 => if (symbol <= x) then 2 else 0
+// 1 % ((symbol test) + 1) => if (symbol <= x) then 1 else divide-by-zero
+//
+
+# ifdef BOOST_DETECT_OUTDATED_WORKAROUNDS
+# define BOOST_OPEN_PAREN (
+# define BOOST_TESTED_AT(value) > value) ?(-1): BOOST_OPEN_PAREN 1
+# else
+# define BOOST_TESTED_AT(value) != ((value)-(value))
+# endif
+
+# else
+
+# define BOOST_WORKAROUND(symbol, test) 0
+
+# endif
+
+#endif // WORKAROUND_DWA2002126_HPP
diff --git a/boost/boost/dynamic_bitset.hpp b/boost/boost/dynamic_bitset.hpp
new file mode 100644
index 00000000000..6486186afc7
--- /dev/null
+++ b/boost/boost/dynamic_bitset.hpp
@@ -0,0 +1,19 @@
+// --------------------------------------------------
+//
+// (C) Copyright Chuck Allison and Jeremy Siek 2001 - 2002.
+// (C) Copyright Gennaro Prota 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/dynamic_bitset for documentation.
+
+#ifndef BOOST_DYNAMIC_BITSET_HPP
+#define BOOST_DYNAMIC_BITSET_HPP
+
+#include "boost/dynamic_bitset/dynamic_bitset.hpp"
+
+#endif // include guard
diff --git a/boost/boost/dynamic_bitset/config.hpp b/boost/boost/dynamic_bitset/config.hpp
new file mode 100644
index 00000000000..01d3b49a84f
--- /dev/null
+++ b/boost/boost/dynamic_bitset/config.hpp
@@ -0,0 +1,81 @@
+// --------------------------------------------------
+//
+// (C) Copyright Chuck Allison and Jeremy Siek 2001 - 2002.
+// (C) Copyright Gennaro Prota 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/dynamic_bitset for documentation.
+
+
+#ifndef BOOST_DYNAMIC_BITSET_CONFIG_HPP_GP_20040424
+#define BOOST_DYNAMIC_BITSET_CONFIG_HPP_GP_20040424
+
+#include "boost/config.hpp"
+#include "boost/detail/workaround.hpp"
+
+// support for pre 3.0 libstdc++ - thanks Phil Edwards!
+#if defined (__STL_CONFIG_H) && !defined (__STL_USE_NEW_IOSTREAMS)
+# define BOOST_OLD_IOSTREAMS
+#endif
+
+// this should be in the config system some day
+// see http://lists.boost.org/MailArchives/boost/msg62291.php
+#define BOOST_DYNAMIC_BITSET_GNUC_VERSION ( __GNUC__ * 100 * 100 \
+ + __GNUC_MINOR__ * 100)
+
+// workaround for gcc bug c++/8419 - gps
+
+namespace boost { namespace detail {
+ template <typename T> T make_non_const(T t) { return t; }
+}}
+
+#if defined(__GNUC__) && BOOST_WORKAROUND(BOOST_DYNAMIC_BITSET_GNUC_VERSION, \
+ BOOST_TESTED_AT(30300))
+# define BOOST_DYNAMIC_BITSET_WRAP_CONSTANT(expr) \
+ (boost::detail::make_non_const(expr))
+#else
+# define BOOST_DYNAMIC_BITSET_WRAP_CONSTANT(expr) (expr)
+#endif
+
+//
+#if (defined __BORLANDC__ && BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))) \
+ || (defined BOOST_NO_MEMBER_TEMPLATE_FRIENDS)
+#define BOOST_DYNAMIC_BITSET_DONT_USE_FRIENDS
+#endif
+
+// if we can't use friends then private members are exposed
+//
+#if defined(BOOST_DYNAMIC_BITSET_DONT_USE_FRIENDS)
+#define BOOST_DYNAMIC_BITSET_PRIVATE public
+#else
+#define BOOST_DYNAMIC_BITSET_PRIVATE private
+#endif
+
+// A couple of macros to cope with libraries without locale
+// support. The first macro must be used to declare a reference
+// to a ctype facet. The second one to widen a char by using
+// that ctype object. If facets and locales aren't available
+// the first macro is a no-op and the second one just expands
+// to its parameter c.
+//
+#if defined (BOOST_USE_FACET)
+
+#define BOOST_DYNAMIC_BITSET_CTYPE_FACET(ch, name, loc) \
+ const std::ctype<ch> & name = \
+ BOOST_USE_FACET(std::ctype<ch>, loc) /**/
+
+#define BOOST_DYNAMIC_BITSET_WIDEN_CHAR(fac, c) \
+ (fac.widen(c))
+#else
+
+#define BOOST_DYNAMIC_BITSET_CTYPE_FACET(ch, name, loc) /**/
+#define BOOST_DYNAMIC_BITSET_WIDEN_CHAR(fac, c) c
+
+#endif
+
+#endif // include guard
diff --git a/boost/boost/dynamic_bitset/dynamic_bitset.hpp b/boost/boost/dynamic_bitset/dynamic_bitset.hpp
new file mode 100644
index 00000000000..e4fad81dd1e
--- /dev/null
+++ b/boost/boost/dynamic_bitset/dynamic_bitset.hpp
@@ -0,0 +1,1800 @@
+// --------------------------------------------------
+//
+// (C) Copyright Chuck Allison and Jeremy Siek 2001 - 2002.
+// (C) Copyright Gennaro Prota 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/dynamic_bitset for documentation.
+
+
+
+#ifndef BOOST_DYNAMIC_BITSET_DYNAMIC_BITSET_HPP
+#define BOOST_DYNAMIC_BITSET_DYNAMIC_BITSET_HPP
+
+#include <cassert>
+#include <string>
+#include <stdexcept> // for std::overflow_error
+#include <algorithm> // for std::swap, std::min, std::copy, std::fill
+#include <vector>
+#include <climits> // for CHAR_BIT
+
+#include "boost/dynamic_bitset/config.hpp"
+
+#ifndef BOOST_NO_STD_LOCALE
+# include <locale> // G.P.S
+#endif
+
+#if defined(BOOST_OLD_IOSTREAMS)
+# include <iostream.h>
+# include <ctype.h> // for isspace
+#else
+# include <istream>
+# include <ostream>
+#endif
+
+#include "boost/dynamic_bitset_fwd.hpp"
+#include "boost/detail/dynamic_bitset.hpp"
+#include "boost/detail/iterator.hpp" // used to implement append(Iter, Iter)
+#include "boost/static_assert.hpp"
+#include "boost/limits.hpp"
+#include "boost/pending/lowest_bit.hpp" // used by find_first/next
+
+
+namespace boost {
+
+template
+
+#if defined(BOOST_MSVC) && BOOST_WORKAROUND(BOOST_MSVC, <= 1300) // 1300 == VC++ 7.0
+ // VC++ (up to 7.0) wants the default arguments again
+ <typename Block = unsigned long, typename Allocator = std::allocator<Block> >
+# else
+ <typename Block, typename Allocator>
+# endif
+
+class dynamic_bitset
+{
+ // Portability note: member function templates are defined inside
+ // this class definition to avoid problems with VC++. Similarly,
+ // with the member functions of nested classes.
+
+ BOOST_STATIC_ASSERT(detail::dynamic_bitset_allowed_block_type<Block>::value);
+
+public:
+ typedef Block block_type;
+ typedef Allocator allocator_type;
+ typedef std::size_t size_type;
+ typedef int block_width_type; // gps
+
+ BOOST_STATIC_CONSTANT(block_width_type, bits_per_block = (std::numeric_limits<Block>::digits));
+ BOOST_STATIC_CONSTANT(size_type, npos = static_cast<size_type>(-1));
+
+
+public:
+
+ // A proxy class to simulate lvalues of bit type.
+ // Shouldn't it be private? [gps]
+ //
+ class reference
+ {
+ friend class dynamic_bitset<Block, Allocator>;
+
+
+ // the one and only non-copy ctor
+ reference(block_type & b, int pos)
+ :m_block(b), m_mask(block_type(1) << pos)
+ {}
+
+ void operator&(); // left undefined
+
+ public:
+
+ // copy constructor: compiler generated
+
+ operator bool() const { return (m_block & m_mask) != 0; }
+ bool operator~() const { return (m_block & m_mask) == 0; }
+
+ reference& flip() { do_flip(); return *this; }
+
+ reference& operator=(bool x) { do_assign(x); return *this; } // for b[i] = x
+ reference& operator=(const reference& rhs) { do_assign(rhs); return *this; } // for b[i] = b[j]
+
+ reference& operator|=(bool x) { if (x) do_set(); return *this; }
+ reference& operator&=(bool x) { if (!x) do_reset(); return *this; }
+ reference& operator^=(bool x) { if (x) do_flip(); return *this; }
+ reference& operator-=(bool x) { if (x) do_reset(); return *this; }
+
+ private:
+ block_type & m_block;
+ const block_type m_mask;
+
+ void do_set() { m_block |= m_mask; }
+ void do_reset() { m_block &= ~m_mask; }
+ void do_flip() { m_block ^= m_mask; }
+ void do_assign(bool x) { x? do_set() : do_reset(); }
+ };
+
+ typedef bool const_reference;
+
+ // constructors, etc.
+ explicit
+ dynamic_bitset(const Allocator& alloc = Allocator());
+
+ explicit
+ dynamic_bitset(size_type num_bits, unsigned long value = 0,
+ const Allocator& alloc = Allocator());
+
+
+ // The presence of this constructor is a concession to ease of
+ // use, especially for the novice user. A conversion from string
+ // is, in most cases, formatting, and should be done by the standard
+ // formatting convention: operator>>.
+ //
+ // NOTE:
+ // Leave the parentheses around std::basic_string<CharT, Traits, Alloc>::npos.
+ // g++ 3.2 requires them and probably the standard will - see core issue 325
+ // NOTE 2:
+ // split into two constructors because of bugs in MSVC 6.0sp5 with STLport
+
+ template <typename CharT, typename Traits, typename Alloc>
+ dynamic_bitset(const std::basic_string<CharT, Traits, Alloc>& s,
+ typename std::basic_string<CharT, Traits, Alloc>::size_type pos,
+ typename std::basic_string<CharT, Traits, Alloc>::size_type n,
+ size_type num_bits = npos,
+ const Allocator& alloc = Allocator())
+
+ :m_bits(alloc),
+ m_num_bits(0)
+ {
+ init_from_string(s, pos, n, num_bits, alloc);
+ }
+
+ template <typename CharT, typename Traits, typename Alloc>
+ explicit
+ dynamic_bitset(const std::basic_string<CharT, Traits, Alloc>& s,
+ typename std::basic_string<CharT, Traits, Alloc>::size_type pos = 0)
+
+ :m_bits(Allocator()),
+ m_num_bits(0)
+ {
+ init_from_string(s, pos, (std::basic_string<CharT, Traits, Alloc>::npos),
+ npos, Allocator());
+ }
+
+ // The first bit in *first is the least significant bit, and the
+ // last bit in the block just before *last is the most significant bit.
+ template <typename BlockInputIterator>
+ dynamic_bitset(BlockInputIterator first, BlockInputIterator last,
+ const Allocator& alloc = Allocator())
+
+ :m_bits(first, last, alloc),
+ m_num_bits(m_bits.size() * bits_per_block)
+ {}
+
+
+ // copy constructor
+ dynamic_bitset(const dynamic_bitset& b);
+
+ ~dynamic_bitset();
+
+ void swap(dynamic_bitset& b);
+ dynamic_bitset& operator=(const dynamic_bitset& b);
+
+ allocator_type get_allocator() const;
+
+ // size changing operations
+ void resize(size_type num_bits, bool value = false);
+ void clear();
+ void push_back(bool bit);
+ void append(Block block);
+
+ template <typename BlockInputIterator>
+ void m_append(BlockInputIterator first, BlockInputIterator last, std::input_iterator_tag)
+ {
+ std::vector<Block, Allocator> v(first, last);
+ m_append(v.begin(), v.end(), std::random_access_iterator_tag());
+ }
+ template <typename BlockInputIterator>
+ void m_append(BlockInputIterator first, BlockInputIterator last, std::forward_iterator_tag)
+ {
+ assert(first != last);
+ block_width_type r = count_extra_bits();
+ std::size_t d = boost::detail::distance(first, last);
+ m_bits.reserve(num_blocks() + d);
+ if (r == 0) {
+ for( ; first != last; ++first)
+ m_bits.push_back(*first); // could use vector<>::insert()
+ }
+ else {
+ m_highest_block() |= (*first << r);
+ do {
+ Block b = *first >> (bits_per_block - r);
+ ++first;
+ m_bits.push_back(b | (first==last? 0 : *first << r));
+ } while (first != last);
+ }
+ m_num_bits += bits_per_block * d;
+ }
+ template <typename BlockInputIterator>
+ void append(BlockInputIterator first, BlockInputIterator last) // strong guarantee
+ {
+ if (first != last) {
+ typename detail::iterator_traits<BlockInputIterator>::iterator_category cat;
+ m_append(first, last, cat);
+ }
+ }
+
+
+ // bitset operations
+ dynamic_bitset& operator&=(const dynamic_bitset& b);
+ dynamic_bitset& operator|=(const dynamic_bitset& b);
+ dynamic_bitset& operator^=(const dynamic_bitset& b);
+ dynamic_bitset& operator-=(const dynamic_bitset& b);
+ dynamic_bitset& operator<<=(size_type n);
+ dynamic_bitset& operator>>=(size_type n);
+ dynamic_bitset operator<<(size_type n) const;
+ dynamic_bitset operator>>(size_type n) const;
+
+ // basic bit operations
+ dynamic_bitset& set(size_type n, bool val = true);
+ dynamic_bitset& set();
+ dynamic_bitset& reset(size_type n);
+ dynamic_bitset& reset();
+ dynamic_bitset& flip(size_type n);
+ dynamic_bitset& flip();
+ bool test(size_type n) const;
+ bool any() const;
+ bool none() const;
+ dynamic_bitset operator~() const;
+ size_type count() const;
+
+ // subscript
+ reference operator[](size_type pos) {
+ return reference(m_bits[block_index(pos)], bit_index(pos));
+ }
+ bool operator[](size_type pos) const { return test(pos); }
+
+ unsigned long to_ulong() const;
+
+ size_type size() const;
+ size_type num_blocks() const;
+ size_type max_size() const;
+ bool empty() const;
+#if 0 // gps
+ void reserve(size_type n);
+ size_type capacity() const;
+#endif
+
+ bool is_subset_of(const dynamic_bitset& a) const;
+ bool is_proper_subset_of(const dynamic_bitset& a) const;
+ bool intersects(const dynamic_bitset & a) const;
+
+ // lookup
+ size_type find_first() const;
+ size_type find_next(size_type pos) const;
+
+
+#if !defined BOOST_DYNAMIC_BITSET_DONT_USE_FRIENDS
+ // lexicographical comparison
+ template <typename B, typename A>
+ friend bool operator==(const dynamic_bitset<B, A>& a,
+ const dynamic_bitset<B, A>& b);
+
+ template <typename B, typename A>
+ friend bool operator<(const dynamic_bitset<B, A>& a,
+ const dynamic_bitset<B, A>& b);
+
+
+ template <typename B, typename A, typename BlockOutputIterator>
+ friend void to_block_range(const dynamic_bitset<B, A>& b,
+ BlockOutputIterator result);
+
+ template <typename BlockIterator, typename B, typename A>
+ friend void from_block_range(BlockIterator first, BlockIterator last,
+ dynamic_bitset<B, A>& result);
+
+
+ template <typename CharT, typename Traits, typename B, typename A>
+ friend std::basic_istream<CharT, Traits>& operator>>(std::basic_istream<CharT, Traits>& is,
+ dynamic_bitset<B, A>& b);
+
+ template <typename B, typename A, typename stringT>
+ friend void to_string_helper(const dynamic_bitset<B, A> & b, stringT & s, bool dump_all);
+
+
+#endif
+
+
+private:
+ BOOST_STATIC_CONSTANT(block_width_type, ulong_width = std::numeric_limits<unsigned long>::digits);
+ typedef std::vector<block_type, allocator_type> buffer_type;
+
+ void m_zero_unused_bits();
+ bool m_check_invariants() const;
+
+ size_type m_do_find_from(size_type first_block) const;
+
+ block_width_type count_extra_bits() const { return bit_index(size()); }
+ static size_type block_index(size_type pos) { return pos / bits_per_block; }
+ static block_width_type bit_index(size_type pos) { return static_cast<int>(pos % bits_per_block); }
+ static Block bit_mask(size_type pos) { return Block(1) << bit_index(pos); }
+
+ template <typename CharT, typename Traits, typename Alloc>
+ void init_from_string(const std::basic_string<CharT, Traits, Alloc>& s,
+ typename std::basic_string<CharT, Traits, Alloc>::size_type pos,
+ typename std::basic_string<CharT, Traits, Alloc>::size_type n,
+ size_type num_bits,
+ const Allocator& alloc)
+ {
+ assert(pos <= s.size());
+
+ typedef typename std::basic_string<CharT, Traits, Alloc> StrT;
+ typedef typename StrT::traits_type Tr;
+
+ const typename StrT::size_type rlen = (std::min)(n, s.size() - pos); // gps
+ const size_type sz = ( num_bits != npos? num_bits : rlen);
+ m_bits.resize(calc_num_blocks(sz));
+ m_num_bits = sz;
+
+
+ BOOST_DYNAMIC_BITSET_CTYPE_FACET(CharT, fac, std::locale());
+ const CharT one = BOOST_DYNAMIC_BITSET_WIDEN_CHAR(fac, '1');
+
+ const size_type m = num_bits < rlen ? num_bits : rlen; // [gps]
+ typename StrT::size_type i = 0;
+ for( ; i < m; ++i) {
+
+ const CharT c = s[(pos + m - 1) - i];
+
+ assert( Tr::eq(c, one)
+ || Tr::eq(c, BOOST_DYNAMIC_BITSET_WIDEN_CHAR(fac, '0')) );
+
+ if (Tr::eq(c, one))
+ set(i);
+
+ }
+
+ }
+
+BOOST_DYNAMIC_BITSET_PRIVATE:
+
+ bool m_unchecked_test(size_type pos) const;
+ static size_type calc_num_blocks(size_type num_bits);
+
+ Block& m_highest_block();
+ const Block& m_highest_block() const;
+
+ buffer_type m_bits; // [gps] to be renamed
+ size_type m_num_bits;
+
+
+ class bit_appender;
+ friend class bit_appender;
+ class bit_appender {
+ // helper for stream >>
+ // Supplies to the lack of an efficient append at the less
+ // significant end: bits are actually appended "at left" but
+ // rearranged in the destructor. Everything works just as if
+ // dynamic_bitset<> had an append_at_right() function (which
+ // threw, in case, the same exceptions as push_back) except
+ // that the function is actually called bit_appender::do_append().
+ //
+ dynamic_bitset & bs;
+ size_type n;
+ Block mask;
+ Block * current;
+ public:
+ bit_appender(dynamic_bitset & r) : bs(r), n(0), mask(0), current(0) {}
+ ~bit_appender() {
+ // reverse the order of blocks, shift
+ // if needed, and then resize
+ //
+ std::reverse(bs.m_bits.begin(), bs.m_bits.end());
+ const block_width_type offs = bit_index(n);
+ if (offs)
+ bs >>= (bits_per_block - offs);
+ bs.resize(n); // doesn't enlarge, so can't throw
+ assert(bs.m_check_invariants());
+ }
+ inline void do_append(bool value) {
+
+ if (mask == 0) {
+ bs.append(Block(0));
+ current = &bs.m_highest_block();
+ mask = Block(1) << (bits_per_block - 1);
+ }
+
+ if(value)
+ *current |= mask;
+
+ mask /= 2;
+ ++n;
+ }
+ size_type get_count() const { return n; }
+ };
+
+};
+
+#if BOOST_WORKAROUND( __IBMCPP__, <=600 )
+
+// Workaround for IBM's AIX platform.
+// See http://comments.gmane.org/gmane.comp.lib.boost.user/15331
+
+template<typename Block, typename Allocator>
+dynamic_bitset<Block, Allocator>::block_width_type const
+dynamic_bitset<Block, Allocator>::bits_per_block;
+
+template<typename Block, typename Allocator>
+dynamic_bitset<Block, Allocator>::block_width_type const
+dynamic_bitset<Block, Allocator>::ulong_width;
+
+#endif
+
+// Global Functions:
+
+// comparison
+template <typename Block, typename Allocator>
+bool operator!=(const dynamic_bitset<Block, Allocator>& a,
+ const dynamic_bitset<Block, Allocator>& b);
+
+template <typename Block, typename Allocator>
+bool operator<=(const dynamic_bitset<Block, Allocator>& a,
+ const dynamic_bitset<Block, Allocator>& b);
+
+template <typename Block, typename Allocator>
+bool operator>(const dynamic_bitset<Block, Allocator>& a,
+ const dynamic_bitset<Block, Allocator>& b);
+
+template <typename Block, typename Allocator>
+bool operator>=(const dynamic_bitset<Block, Allocator>& a,
+ const dynamic_bitset<Block, Allocator>& b);
+
+// stream operators
+#ifdef BOOST_OLD_IOSTREAMS
+template <typename Block, typename Allocator>
+std::ostream& operator<<(std::ostream& os,
+ const dynamic_bitset<Block, Allocator>& b);
+
+template <typename Block, typename Allocator>
+std::istream& operator>>(std::istream& is, dynamic_bitset<Block,Allocator>& b);
+#else
+// NOTE: Digital Mars wants the same template parameter names
+// here and in the definition! [last tested: 8.48.10]
+//
+template <typename Ch, typename Tr, typename Block, typename Alloc>
+std::basic_ostream<Ch, Tr>&
+operator<<(std::basic_ostream<Ch, Tr>& os,
+ const dynamic_bitset<Block, Alloc>& b);
+
+template <typename Ch, typename Tr, typename Block, typename Alloc>
+std::basic_istream<Ch, Tr>&
+operator>>(std::basic_istream<Ch, Tr>& is,
+ dynamic_bitset<Block, Alloc>& b);
+#endif
+
+// bitset operations
+template <typename Block, typename Allocator>
+dynamic_bitset<Block, Allocator>
+operator&(const dynamic_bitset<Block, Allocator>& b1,
+ const dynamic_bitset<Block, Allocator>& b2);
+
+template <typename Block, typename Allocator>
+dynamic_bitset<Block, Allocator>
+operator|(const dynamic_bitset<Block, Allocator>& b1,
+ const dynamic_bitset<Block, Allocator>& b2);
+
+template <typename Block, typename Allocator>
+dynamic_bitset<Block, Allocator>
+operator^(const dynamic_bitset<Block, Allocator>& b1,
+ const dynamic_bitset<Block, Allocator>& b2);
+
+template <typename Block, typename Allocator>
+dynamic_bitset<Block, Allocator>
+operator-(const dynamic_bitset<Block, Allocator>& b1,
+ const dynamic_bitset<Block, Allocator>& b2);
+
+// namespace scope swap
+template<typename Block, typename Allocator>
+void swap(dynamic_bitset<Block, Allocator>& b1,
+ dynamic_bitset<Block, Allocator>& b2);
+
+
+template <typename Block, typename Allocator, typename stringT>
+void
+to_string(const dynamic_bitset<Block, Allocator>& b, stringT & s); // gps
+
+template <typename Block, typename Allocator, typename BlockOutputIterator>
+void
+to_block_range(const dynamic_bitset<Block, Allocator>& b,
+ BlockOutputIterator result);
+
+
+// gps - check docs with Jeremy
+//
+template <typename BlockIterator, typename B, typename A>
+inline void
+from_block_range(BlockIterator first, BlockIterator last,
+ dynamic_bitset<B, A>& result)
+{
+ // PRE: distance(first, last) <= numblocks()
+ std::copy (first, last, result.m_bits.begin()); //[gps]
+}
+
+//=============================================================================
+// dynamic_bitset implementation
+
+
+//-----------------------------------------------------------------------------
+// constructors, etc.
+
+template <typename Block, typename Allocator>
+dynamic_bitset<Block, Allocator>::dynamic_bitset(const Allocator& alloc)
+ : m_bits(alloc), m_num_bits(0)
+{
+
+}
+
+template <typename Block, typename Allocator>
+dynamic_bitset<Block, Allocator>::
+dynamic_bitset(size_type num_bits, unsigned long value, const Allocator& alloc)
+ : m_bits(calc_num_blocks(num_bits), Block(0), alloc),
+ m_num_bits(num_bits)
+{
+
+ if (num_bits == 0)
+ return;
+
+ typedef unsigned long num_type;
+
+ // cut off all bits in value that have pos >= num_bits, if any
+ if (num_bits < static_cast<size_type>(ulong_width)) {
+ const num_type mask = (num_type(1) << num_bits) - 1;
+ value &= mask;
+ }
+
+ if (bits_per_block >= ulong_width) {
+ m_bits[0] = static_cast<block_type>(value);
+ }
+ else {
+ for(size_type i = 0; value != 0; ++i) {
+
+ m_bits[i] = static_cast<block_type>(value);
+ value >>= BOOST_DYNAMIC_BITSET_WRAP_CONSTANT(bits_per_block);
+ }
+ }
+
+}
+
+// copy constructor
+template <typename Block, typename Allocator>
+inline dynamic_bitset<Block, Allocator>::
+dynamic_bitset(const dynamic_bitset& b)
+ : m_bits(b.m_bits), m_num_bits(b.m_num_bits) // [gps]
+{
+
+}
+
+template <typename Block, typename Allocator>
+inline dynamic_bitset<Block, Allocator>::
+~dynamic_bitset()
+{
+ assert(m_check_invariants());
+}
+
+template <typename Block, typename Allocator>
+inline void dynamic_bitset<Block, Allocator>::
+swap(dynamic_bitset<Block, Allocator>& b) // no throw
+{
+ std::swap(m_bits, b.m_bits);
+ std::swap(m_num_bits, b.m_num_bits);
+}
+
+template <typename Block, typename Allocator>
+dynamic_bitset<Block, Allocator>& dynamic_bitset<Block, Allocator>::
+operator=(const dynamic_bitset<Block, Allocator>& b)
+{
+#if 0 // gps
+ dynamic_bitset<Block, Allocator> tmp(b);
+ this->swap(tmp);
+ return *this;
+#else
+ m_bits = b.m_bits;
+ m_num_bits = b.m_num_bits;
+ return *this;
+#endif
+}
+
+template <typename Block, typename Allocator>
+inline typename dynamic_bitset<Block, Allocator>::allocator_type
+dynamic_bitset<Block, Allocator>::get_allocator() const
+{
+ return m_bits.get_allocator();
+}
+
+//-----------------------------------------------------------------------------
+// size changing operations
+
+template <typename Block, typename Allocator>
+void dynamic_bitset<Block, Allocator>::
+resize(size_type num_bits, bool value) // strong guarantee
+{
+
+ const size_type old_num_blocks = num_blocks();
+ const size_type required_blocks = calc_num_blocks(num_bits);
+
+ const block_type v = value? ~Block(0) : Block(0);
+
+ if (required_blocks != old_num_blocks) {
+ m_bits.resize(required_blocks, v); // s.g. (copy) [gps]
+ }
+
+
+ // At this point:
+ //
+ // - if the buffer was shrunk, there's nothing to do, except
+ // a call to m_zero_unused_bits()
+ //
+ // - if it it is enlarged, all the (used) bits in the new blocks have
+ // the correct value, but we should also take care of the bits,
+ // if any, that were 'unused bits' before enlarging: if value == true,
+ // they must be set.
+
+ if (value && (num_bits > m_num_bits)) {
+
+ const size_type extra_bits = count_extra_bits(); // gps
+ if (extra_bits) {
+ assert(old_num_blocks >= 1 && old_num_blocks <= m_bits.size());
+
+ // Set them.
+ m_bits[old_num_blocks - 1] |= (v << extra_bits); // gps
+ }
+
+ }
+
+
+
+ m_num_bits = num_bits;
+ m_zero_unused_bits();
+
+}
+
+template <typename Block, typename Allocator>
+void dynamic_bitset<Block, Allocator>::
+clear() // no throw
+{
+ m_bits.clear();
+ m_num_bits = 0;
+}
+
+
+template <typename Block, typename Allocator>
+void dynamic_bitset<Block, Allocator>::
+push_back(bool bit)
+{
+ resize(size() + 1);
+ set(size() - 1, bit);
+}
+
+template <typename Block, typename Allocator>
+void dynamic_bitset<Block, Allocator>::
+append(Block value) // strong guarantee
+{
+ // G.P.S. to be reviewed...
+
+ const block_width_type r = count_extra_bits();
+
+ if (r == 0) {
+ // the buffer is empty, or all blocks are filled
+ m_bits.push_back(value);
+ }
+ else {
+ m_bits.push_back(value >> (bits_per_block - r));
+ m_bits[m_bits.size() - 2] |= (value << r); // m_bits.size() >= 2
+ }
+
+ m_num_bits += bits_per_block;
+ assert(m_check_invariants());
+
+}
+
+
+//-----------------------------------------------------------------------------
+// bitset operations
+template <typename Block, typename Allocator>
+dynamic_bitset<Block, Allocator>&
+dynamic_bitset<Block, Allocator>::operator&=(const dynamic_bitset& rhs)
+{
+ assert(size() == rhs.size());
+ for (size_type i = 0; i < num_blocks(); ++i)
+ m_bits[i] &= rhs.m_bits[i];
+ return *this;
+}
+
+template <typename Block, typename Allocator>
+dynamic_bitset<Block, Allocator>&
+dynamic_bitset<Block, Allocator>::operator|=(const dynamic_bitset& rhs)
+{
+ assert(size() == rhs.size());
+ for (size_type i = 0; i < num_blocks(); ++i)
+ m_bits[i] |= rhs.m_bits[i];
+ //m_zero_unused_bits();
+ return *this;
+}
+
+template <typename Block, typename Allocator>
+dynamic_bitset<Block, Allocator>&
+dynamic_bitset<Block, Allocator>::operator^=(const dynamic_bitset& rhs)
+{
+ assert(size() == rhs.size());
+ for (size_type i = 0; i < this->num_blocks(); ++i)
+ m_bits[i] ^= rhs.m_bits[i];
+ //m_zero_unused_bits();
+ return *this;
+}
+
+template <typename Block, typename Allocator>
+dynamic_bitset<Block, Allocator>&
+dynamic_bitset<Block, Allocator>::operator-=(const dynamic_bitset& rhs)
+{
+ assert(size() == rhs.size());
+ for (size_type i = 0; i < num_blocks(); ++i)
+ m_bits[i] &= ~rhs.m_bits[i];
+ //m_zero_unused_bits();
+ return *this;
+}
+
+//
+// NOTE:
+// Note that the 'if (r != 0)' is crucial to avoid undefined
+// behavior when the left hand operand of >> isn't promoted to a
+// wider type (because rs would be too large).
+//
+template <typename Block, typename Allocator>
+dynamic_bitset<Block, Allocator>&
+dynamic_bitset<Block, Allocator>::operator<<=(size_type n)
+{
+ if (n >= m_num_bits)
+ return reset();
+ //else
+ if (n > 0) {
+
+ size_type const last = num_blocks() - 1; // num_blocks() is >= 1
+ size_type const div = n / bits_per_block; // div is <= last
+ block_width_type const r = bit_index(n);
+ block_type * const b = &m_bits[0];
+
+ if (r != 0) {
+
+ block_width_type const rs = bits_per_block - r;
+
+ for (size_type i = last-div; i>0; --i) {
+ b[i+div] = (b[i] << r) | (b[i-1] >> rs);
+ }
+ b[div] = b[0] << r;
+
+ }
+ else {
+ for (size_type i = last-div; i>0; --i) {
+ b[i+div] = b[i];
+ }
+ b[div] = b[0];
+ }
+
+
+ // zero out div blocks at the less significant end
+ std::fill_n(b, div, static_cast<block_type>(0));
+
+ // zero out any 1 bit that flowed into the unused part
+ m_zero_unused_bits(); // thanks to Lester Gong
+
+
+ }
+
+ return *this;
+
+
+}
+
+
+//
+// NOTE:
+// see the comments to operator <<=
+//
+template <typename B, typename A>
+dynamic_bitset<B, A> & dynamic_bitset<B, A>::operator>>=(size_type n) {
+ if (n >= m_num_bits) {
+ return reset();
+ }
+ //else
+ if (n>0) {
+
+ size_type const last = num_blocks() - 1; // num_blocks() is >= 1
+ size_type const div = n / bits_per_block; // div is <= last
+ block_width_type const r = bit_index(n);
+ block_type * const b = &m_bits[0];
+
+
+ if (r != 0) {
+
+ block_width_type const ls = bits_per_block - r;
+
+ for (size_type i = div; i < last; ++i) {
+ b[i-div] = (b[i] >> r) | (b[i+1] << ls);
+ }
+ // r bits go to zero
+ b[last-div] = b[last] >> r;
+ }
+
+ else {
+ for (size_type i = div; i <= last; ++i) {
+ b[i-div] = b[i];
+ }
+ // note the '<=': the last iteration 'absorbs'
+ // b[last-div] = b[last] >> 0;
+ }
+
+
+
+ // div blocks are zero filled at the most significant end
+ std::fill_n(b + (num_blocks()-div), div, static_cast<block_type>(0));
+ }
+
+ return *this;
+}
+
+
+template <typename Block, typename Allocator>
+dynamic_bitset<Block, Allocator>
+dynamic_bitset<Block, Allocator>::operator<<(size_type n) const
+{
+ dynamic_bitset r(*this);
+ return r <<= n;
+}
+
+template <typename Block, typename Allocator>
+dynamic_bitset<Block, Allocator>
+dynamic_bitset<Block, Allocator>::operator>>(size_type n) const
+{
+ dynamic_bitset r(*this);
+ return r >>= n;
+}
+
+
+//-----------------------------------------------------------------------------
+// basic bit operations
+
+template <typename Block, typename Allocator>
+dynamic_bitset<Block, Allocator>&
+dynamic_bitset<Block, Allocator>::set(size_type pos, bool val)
+{
+ // [gps]
+ //
+ // Below we have no set(size_type) function to call when
+ // value == true; instead of using a helper, I think
+ // overloading set (rather than giving it a default bool
+ // argument) would be more elegant.
+
+ assert(pos < m_num_bits);
+
+ if (val)
+ m_bits[block_index(pos)] |= bit_mask(pos);
+ else
+ reset(pos);
+
+ return *this;
+}
+
+template <typename Block, typename Allocator>
+dynamic_bitset<Block, Allocator>&
+dynamic_bitset<Block, Allocator>::set()
+{
+ std::fill(m_bits.begin(), m_bits.end(), ~Block(0));
+ m_zero_unused_bits();
+ return *this;
+}
+
+template <typename Block, typename Allocator>
+dynamic_bitset<Block, Allocator>&
+dynamic_bitset<Block, Allocator>::reset(size_type pos)
+{
+ assert(pos < m_num_bits);
+ #if BOOST_WORKAROUND(__MWERKS__, <= 0x3003) // 8.x
+ // CodeWarrior 8 generates incorrect code when the &=~ is compiled,
+ // use the |^ variation instead.. <grafik>
+ m_bits[block_index(pos)] |= bit_mask(pos);
+ m_bits[block_index(pos)] ^= bit_mask(pos);
+ #else
+ m_bits[block_index(pos)] &= ~bit_mask(pos);
+ #endif
+ return *this;
+}
+
+template <typename Block, typename Allocator>
+dynamic_bitset<Block, Allocator>&
+dynamic_bitset<Block, Allocator>::reset()
+{
+ std::fill(m_bits.begin(), m_bits.end(), Block(0));
+ return *this;
+}
+
+template <typename Block, typename Allocator>
+dynamic_bitset<Block, Allocator>&
+dynamic_bitset<Block, Allocator>::flip(size_type pos)
+{
+ assert(pos < m_num_bits);
+ m_bits[block_index(pos)] ^= bit_mask(pos);
+ return *this;
+}
+
+template <typename Block, typename Allocator>
+dynamic_bitset<Block, Allocator>&
+dynamic_bitset<Block, Allocator>::flip()
+{
+ for (size_type i = 0; i < num_blocks(); ++i)
+ m_bits[i] = ~m_bits[i];
+ m_zero_unused_bits();
+ return *this;
+}
+
+template <typename Block, typename Allocator>
+bool dynamic_bitset<Block, Allocator>::m_unchecked_test(size_type pos) const
+{
+ return (m_bits[block_index(pos)] & bit_mask(pos)) != 0;
+}
+
+template <typename Block, typename Allocator>
+bool dynamic_bitset<Block, Allocator>::test(size_type pos) const
+{
+ assert(pos < m_num_bits);
+ return m_unchecked_test(pos);
+}
+
+template <typename Block, typename Allocator>
+bool dynamic_bitset<Block, Allocator>::any() const
+{
+ for (size_type i = 0; i < num_blocks(); ++i)
+ if (m_bits[i])
+ return true;
+ return false;
+}
+
+template <typename Block, typename Allocator>
+inline bool dynamic_bitset<Block, Allocator>::none() const
+{
+ return !any();
+}
+
+template <typename Block, typename Allocator>
+dynamic_bitset<Block, Allocator>
+dynamic_bitset<Block, Allocator>::operator~() const
+{
+ dynamic_bitset b(*this);
+ b.flip();
+ return b;
+}
+
+
+/*
+
+The following is the straightforward implementation of count(), which
+we leave here in a comment for documentation purposes.
+
+template <typename Block, typename Allocator>
+typename dynamic_bitset<Block, Allocator>::size_type
+dynamic_bitset<Block, Allocator>::count() const
+{
+ size_type sum = 0;
+ for (size_type i = 0; i != this->m_num_bits; ++i)
+ if (test(i))
+ ++sum;
+ return sum;
+}
+
+The actual algorithm uses a lookup table.
+
+
+ The basic idea of the method is to pick up X bits at a time
+ from the internal array of blocks and consider those bits as
+ the binary representation of a number N. Then, to use a table
+ of 1<<X elements where table[N] is the number of '1' digits
+ in the binary representation of N (i.e. in our X bits).
+
+
+ In this implementation X is 8 (but can be easily changed: you
+ just have to modify the definition of table_width and shrink/enlarge
+ the table accordingly - it could be useful, for instance, to expand
+ the table to 512 elements on an implementation with 9-bit bytes) and
+ the internal array of blocks is seen, if possible, as an array of bytes.
+ In practice the "reinterpretation" as array of bytes is possible if and
+ only if X >= CHAR_BIT and Block has no padding bits (that would be counted
+ together with the "real ones" if we saw the array as array of bytes).
+ Otherwise we simply 'extract' X bits at a time from each Block.
+
+*/
+
+
+template <typename Block, typename Allocator>
+typename dynamic_bitset<Block, Allocator>::size_type
+dynamic_bitset<Block, Allocator>::count() const
+{
+ using namespace detail::dynamic_bitset_count_impl;
+
+ const bool no_padding = bits_per_block == CHAR_BIT * sizeof(Block);
+ const bool enough_table_width = table_width >= CHAR_BIT;
+
+ typedef mode_to_type< (no_padding && enough_table_width ?
+ access_by_bytes : access_by_blocks) > m;
+
+ return do_count(m_bits.begin(), num_blocks(), Block(0), static_cast<m*>(0));
+
+}
+
+
+//-----------------------------------------------------------------------------
+// conversions
+
+
+template <typename B, typename A, typename stringT>
+void to_string_helper(const dynamic_bitset<B, A> & b, stringT & s,
+ bool dump_all)
+{
+ typedef typename stringT::traits_type Tr;
+ typedef typename stringT::value_type Ch;
+
+ BOOST_DYNAMIC_BITSET_CTYPE_FACET(Ch, fac, std::locale());
+ const Ch zero = BOOST_DYNAMIC_BITSET_WIDEN_CHAR(fac, '0');
+ const Ch one = BOOST_DYNAMIC_BITSET_WIDEN_CHAR(fac, '1');
+
+ // Note that this function may access (when
+ // dump_all == true) bits beyond position size() - 1
+
+ typedef typename dynamic_bitset<B, A>::size_type size_type;
+
+ const size_type len = dump_all?
+ dynamic_bitset<B, A>::bits_per_block * b.num_blocks():
+ b.size();
+ s.assign (len, zero);
+
+ for (size_type i = 0; i < len; ++i) {
+ if (b.m_unchecked_test(i))
+ Tr::assign(s[len - 1 - i], one);
+
+ }
+
+}
+
+
+// A comment similar to the one about the constructor from
+// basic_string can be done here. Thanks to James Kanze for
+// making me (Gennaro) realize this important separation of
+// concerns issue, as well as many things about i18n.
+//
+template <typename Block, typename Allocator, typename stringT> // G.P.S.
+inline void
+to_string(const dynamic_bitset<Block, Allocator>& b, stringT& s)
+{
+ to_string_helper(b, s, false);
+}
+
+
+// Differently from to_string this function dumps out
+// every bit of the internal representation (may be
+// useful for debugging purposes)
+//
+template <typename B, typename A, typename stringT>
+inline void
+dump_to_string(const dynamic_bitset<B, A>& b, stringT& s) // G.P.S.
+{
+ to_string_helper(b, s, true /* =dump_all*/);
+}
+
+template <typename Block, typename Allocator, typename BlockOutputIterator>
+inline void
+to_block_range(const dynamic_bitset<Block, Allocator>& b,
+ BlockOutputIterator result)
+{
+ // note how this copies *all* bits, including the
+ // unused ones in the last block (which are zero)
+ std::copy(b.m_bits.begin(), b.m_bits.end(), result); // [gps]
+}
+
+template <typename Block, typename Allocator>
+unsigned long dynamic_bitset<Block, Allocator>::
+to_ulong() const
+{
+
+ if (m_num_bits == 0)
+ return 0; // convention
+
+ // Check for overflows. This may be a performance burden on very
+ // large bitsets but is required by the specification, sorry
+ if (find_next(ulong_width - 1) != npos)
+ throw std::overflow_error("boost::dynamic_bitset::to_ulong overflow");
+
+
+ // Ok, from now on we can be sure there's no "on" bit beyond
+ // the allowed positions
+
+ if (bits_per_block >= ulong_width)
+ return m_bits[0];
+
+
+ size_type last_block = block_index((std::min)(m_num_bits-1, // gps
+ (size_type)(ulong_width-1)));
+ unsigned long result = 0;
+ for (size_type i = 0; i <= last_block; ++i) {
+
+ assert((size_type)bits_per_block * i < (size_type)ulong_width); // gps
+
+ unsigned long piece = m_bits[i];
+ result |= (piece << (bits_per_block * i));
+ }
+
+ return result;
+
+}
+
+
+template <typename Block, typename Allocator>
+inline typename dynamic_bitset<Block, Allocator>::size_type
+dynamic_bitset<Block, Allocator>::size() const
+{
+ return m_num_bits;
+}
+
+template <typename Block, typename Allocator>
+inline typename dynamic_bitset<Block, Allocator>::size_type
+dynamic_bitset<Block, Allocator>::num_blocks() const
+{
+ return m_bits.size();
+}
+
+template <typename Block, typename Allocator>
+inline typename dynamic_bitset<Block, Allocator>::size_type
+dynamic_bitset<Block, Allocator>::max_size() const
+{
+ // Semantics of vector<>::max_size() aren't very clear
+ // (see lib issue 197) and many library implementations
+ // simply return dummy values, _unrelated_ to the underlying
+ // allocator.
+ //
+ // Given these problems, I was tempted to not provide this
+ // function at all but the user could need it if he provides
+ // his own allocator.
+ //
+
+ const size_type m = detail::vector_max_size_workaround(m_bits);
+
+ return m <= (size_type(-1)/bits_per_block) ?
+ m * bits_per_block :
+ size_type(-1);
+}
+
+template <typename Block, typename Allocator>
+inline bool dynamic_bitset<Block, Allocator>::empty() const
+{
+ return size() == 0;
+}
+
+#if 0 // gps
+template <typename Block, typename Allocator>
+inline void dynamic_bitset<Block, Allocator>::reserve(size_type n)
+{
+ assert(n <= max_size()); // PRE - G.P.S.
+ m_bits.reserve(calc_num_blocks(n));
+}
+
+template <typename Block, typename Allocator>
+typename dynamic_bitset<Block, Allocator>::size_type
+dynamic_bitset<Block, Allocator>::capacity() const
+{
+ // capacity is m_bits.capacity() * bits_per_block
+ // unless that one overflows
+ const size_type m = static_cast<size_type>(-1);
+ const size_type q = m / bits_per_block;
+
+ const size_type c = m_bits.capacity();
+
+ return c <= q ?
+ c * bits_per_block :
+ m;
+}
+#endif
+
+template <typename Block, typename Allocator>
+bool dynamic_bitset<Block, Allocator>::
+is_subset_of(const dynamic_bitset<Block, Allocator>& a) const
+{
+ assert(size() == a.size());
+ for (size_type i = 0; i < num_blocks(); ++i)
+ if (m_bits[i] & ~a.m_bits[i])
+ return false;
+ return true;
+}
+
+template <typename Block, typename Allocator>
+bool dynamic_bitset<Block, Allocator>::
+is_proper_subset_of(const dynamic_bitset<Block, Allocator>& a) const
+{
+ assert(size() == a.size());
+ bool proper = false;
+ for (size_type i = 0; i < num_blocks(); ++i) {
+ Block bt = m_bits[i], ba = a.m_bits[i];
+ if (ba & ~bt)
+ proper = true;
+ if (bt & ~ba)
+ return false;
+ }
+ return proper;
+}
+
+template <typename Block, typename Allocator>
+bool dynamic_bitset<Block, Allocator>::intersects(const dynamic_bitset & b) const
+{
+ size_type common_blocks = num_blocks() < b.num_blocks()
+ ? num_blocks() : b.num_blocks();
+
+ for(size_type i = 0; i < common_blocks; ++i) {
+ if(m_bits[i] & b.m_bits[i])
+ return true;
+ }
+ return false;
+}
+
+// --------------------------------
+// lookup
+
+
+// look for the first bit "on", starting
+// from the block with index first_block
+//
+template <typename Block, typename Allocator>
+typename dynamic_bitset<Block, Allocator>::size_type
+dynamic_bitset<Block, Allocator>::m_do_find_from(size_type first_block) const
+{
+ size_type i = first_block;
+
+ // skip null blocks
+ while (i < num_blocks() && m_bits[i] == 0)
+ ++i;
+
+ if (i >= num_blocks())
+ return npos; // not found
+
+ return i * bits_per_block + boost::lowest_bit(m_bits[i]);
+
+}
+
+
+template <typename Block, typename Allocator>
+typename dynamic_bitset<Block, Allocator>::size_type
+dynamic_bitset<Block, Allocator>::find_first() const
+{
+ return m_do_find_from(0);
+}
+
+
+template <typename Block, typename Allocator>
+typename dynamic_bitset<Block, Allocator>::size_type
+dynamic_bitset<Block, Allocator>::find_next(size_type pos) const
+{
+
+ const size_type sz = size();
+ if (pos >= (sz-1) || sz == 0)
+ return npos;
+
+ ++pos;
+
+ const size_type blk = block_index(pos);
+ const block_width_type ind = bit_index(pos);
+
+ // mask out bits before pos
+ const Block fore = m_bits[blk] & ( ~Block(0) << ind );
+
+ return fore?
+ blk * bits_per_block + lowest_bit(fore)
+ :
+ m_do_find_from(blk + 1);
+
+}
+
+
+
+//-----------------------------------------------------------------------------
+// comparison
+
+template <typename Block, typename Allocator>
+bool operator==(const dynamic_bitset<Block, Allocator>& a,
+ const dynamic_bitset<Block, Allocator>& b)
+{
+ return (a.m_num_bits == b.m_num_bits)
+ && (a.m_bits == b.m_bits); // [gps]
+}
+
+template <typename Block, typename Allocator>
+inline bool operator!=(const dynamic_bitset<Block, Allocator>& a,
+ const dynamic_bitset<Block, Allocator>& b)
+{
+ return !(a == b);
+}
+
+template <typename Block, typename Allocator>
+bool operator<(const dynamic_bitset<Block, Allocator>& a,
+ const dynamic_bitset<Block, Allocator>& b)
+{
+ assert(a.size() == b.size());
+ typedef typename dynamic_bitset<Block, Allocator>::size_type size_type;
+
+ if (a.size() == 0)
+ return false;
+
+ // Since we are storing the most significant bit
+ // at pos == size() - 1, we need to do the comparisons in reverse.
+
+ // Compare a block at a time
+ for (size_type i = a.num_blocks() - 1; i > 0; --i)
+ if (a.m_bits[i] < b.m_bits[i])
+ return true;
+ else if (a.m_bits[i] > b.m_bits[i])
+ return false;
+
+ if (a.m_bits[0] < b.m_bits[0])
+ return true;
+ else
+ return false;
+}
+
+template <typename Block, typename Allocator>
+inline bool operator<=(const dynamic_bitset<Block, Allocator>& a,
+ const dynamic_bitset<Block, Allocator>& b)
+{
+ return !(a > b);
+}
+
+template <typename Block, typename Allocator>
+inline bool operator>(const dynamic_bitset<Block, Allocator>& a,
+ const dynamic_bitset<Block, Allocator>& b)
+{
+ return b < a;
+}
+
+template <typename Block, typename Allocator>
+inline bool operator>=(const dynamic_bitset<Block, Allocator>& a,
+ const dynamic_bitset<Block, Allocator>& b)
+{
+ return !(a < b);
+}
+
+//-----------------------------------------------------------------------------
+// stream operations
+
+#ifdef BOOST_OLD_IOSTREAMS
+template < typename Block, typename Alloc>
+std::ostream&
+operator<<(std::ostream& os, const dynamic_bitset<Block, Alloc>& b)
+{
+ // NOTE: since this is aimed at "classic" iostreams, exception
+ // masks on the stream are not supported. The library that
+ // ships with gcc 2.95 has an exceptions() member function but
+ // nothing is actually implemented; not even the class ios::failure.
+
+ using namespace std;
+
+ const ios::iostate ok = ios::goodbit;
+ ios::iostate err = ok;
+
+ if (os.opfx()) { // gps
+
+ //try
+ typedef typename dynamic_bitset<Block, Alloc>::size_type bitsetsize_type;
+
+ const bitsetsize_type sz = b.size();
+ std::streambuf * buf = os.rdbuf();
+ size_t npad = os.width() <= 0 // careful: os.width() is signed (and can be < 0)
+ || (bitsetsize_type) os.width() <= sz? 0 : os.width() - sz; //- gps
+
+ const char fill_char = os.fill();
+ const ios::fmtflags adjustfield = os.flags() & ios::adjustfield;
+
+ // if needed fill at left; pad is decresed along the way
+ if (adjustfield != ios::left) {
+ for (; 0 < npad; --npad)
+ if (fill_char != buf->sputc(fill_char)) {
+ err |= ios::failbit; // gps
+ break;
+ }
+ }
+
+ if (err == ok) {
+ // output the bitset
+ for (bitsetsize_type i = b.size(); 0 < i; --i) {// G.P.S.
+ const char dig = b.test(i-1)? '1' : '0';
+ if (EOF == buf->sputc(dig)) { // ok?? gps
+ err |= ios::failbit;
+ break;
+ }
+ }
+ }
+
+ if (err == ok) {
+ // if needed fill at right
+ for (; 0 < npad; --npad) {
+ if (fill_char != buf->sputc(fill_char)) {
+ err |= ios::failbit;
+ break;
+ }
+ }
+ }
+
+ os.osfx();
+ os.width(0);
+
+ } // if opfx
+
+ if(err != ok)
+ os.setstate(err); // assume this does NOT throw - gps
+ return os;
+
+}
+#else
+
+template <typename Ch, typename Tr, typename Block, typename Alloc>
+std::basic_ostream<Ch, Tr>&
+operator<<(std::basic_ostream<Ch, Tr>& os,
+ const dynamic_bitset<Block, Alloc>& b)
+{
+
+ using namespace std;
+
+ const ios_base::iostate ok = ios_base::goodbit;
+ ios_base::iostate err = ok;
+
+ typename basic_ostream<Ch, Tr>::sentry cerberos(os);
+ if (cerberos) {
+
+ BOOST_DYNAMIC_BITSET_CTYPE_FACET(Ch, fac, os.getloc());
+ const Ch zero = BOOST_DYNAMIC_BITSET_WIDEN_CHAR(fac, '0');
+ const Ch one = BOOST_DYNAMIC_BITSET_WIDEN_CHAR(fac, '1');
+
+ try {
+
+ typedef typename dynamic_bitset<Block, Alloc>::size_type bitsetsize_type;
+ typedef basic_streambuf<Ch, Tr> buffer_type; // G.P.S.
+
+ buffer_type * buf = os.rdbuf();
+ size_t npad = os.width() <= 0 // careful: os.width() is signed (and can be < 0)
+ || (bitsetsize_type) os.width() <= b.size()? 0 : os.width() - b.size(); //- G.P.S.
+
+ const Ch fill_char = os.fill();
+ const ios_base::fmtflags adjustfield = os.flags() & ios_base::adjustfield;
+
+ // if needed fill at left; pad is decresed along the way
+ if (adjustfield != ios_base::left) {
+ for (; 0 < npad; --npad)
+ if (Tr::eq_int_type(Tr::eof(), buf->sputc(fill_char))) {
+ err |= ios_base::failbit; // G.P.S.
+ break;
+ }
+ }
+
+ if (err == ok) {
+ // output the bitset
+ for (bitsetsize_type i = b.size(); 0 < i; --i) {// G.P.S.
+ typename buffer_type::int_type
+ ret = buf->sputc(b.test(i-1)? one : zero);
+ if (Tr::eq_int_type(Tr::eof(), ret)) {
+ err |= ios_base::failbit;
+ break;
+ }
+ }
+ }
+
+ if (err == ok) {
+ // if needed fill at right
+ for (; 0 < npad; --npad) {
+ if (Tr::eq_int_type(Tr::eof(), buf->sputc(fill_char))) {
+ err |= ios_base::failbit;
+ break;
+ }
+ }
+ }
+
+
+ os.width(0);
+
+ } catch (...) { // see std 27.6.1.1/4
+ bool rethrow = false;
+ try { os.setstate(ios_base::failbit); } catch (...) { rethrow = true; }
+
+ if (rethrow)
+ throw;
+ }
+ }
+
+ if(err != ok)
+ os.setstate(err); // may throw exception
+ return os;
+
+}
+#endif
+
+
+#ifdef BOOST_OLD_IOSTREAMS
+
+ // gps - A sentry-like class that calls isfx in its
+ // destructor. Necessary because bit_appender::do_append may throw.
+ class pseudo_sentry {
+ std::istream & m_r;
+ const bool m_ok;
+ public:
+ explicit pseudo_sentry(std::istream & r) : m_r(r), m_ok(r.ipfx(0)) { }
+ ~pseudo_sentry() { m_r.isfx(); }
+ operator bool() const { return m_ok; }
+ };
+
+template <typename Block, typename Alloc>
+std::istream&
+operator>>(std::istream& is, dynamic_bitset<Block, Alloc>& b)
+{
+
+// Extractor for classic IO streams (libstdc++ < 3.0)
+// ----------------------------------------------------//
+// It's assumed that the stream buffer functions, and
+// the stream's setstate() _cannot_ throw.
+
+
+ typedef dynamic_bitset<Block, Alloc> bitset_type;
+ typedef typename bitset_type::size_type size_type;
+
+ std::ios::iostate err = std::ios::goodbit; // gps
+ pseudo_sentry cerberos(is); // skips whitespaces
+ if(cerberos) {
+
+ b.clear();
+
+ const std::streamsize w = is.width();
+ const size_type limit = w > 0 && static_cast<size_type>(w) < b.max_size()// gps
+ ? w : b.max_size();
+ typename bitset_type::bit_appender appender(b);
+ std::streambuf * buf = is.rdbuf();
+ for(int c = buf->sgetc(); appender.get_count() < limit; c = buf->snextc() ) {
+
+ if (c == EOF) {
+ err |= std::ios::eofbit; // G.P.S.
+ break;
+ }
+ else if (char(c) != '0' && char(c) != '1')
+ break; // non digit character
+
+ else {
+ try {
+ //throw std::bad_alloc(); // gps
+ appender.do_append(char(c) == '1');
+ }
+ catch(...) {
+ is.setstate(std::ios::failbit); // assume this can't throw
+ throw;
+ }
+ }
+
+ } // for
+ }
+
+ is.width(0); // gps
+ if (b.size() == 0)
+ err |= std::ios::failbit;
+ if (err != std::ios::goodbit) // gps
+ is.setstate (err); // may throw
+
+ return is;
+}
+
+#else // BOOST_OLD_IOSTREAMS
+
+template <typename Ch, typename Tr, typename Block, typename Alloc>
+std::basic_istream<Ch, Tr>&
+operator>>(std::basic_istream<Ch, Tr>& is, dynamic_bitset<Block, Alloc>& b)
+{
+
+ using namespace std;
+
+ typedef dynamic_bitset<Block, Alloc> bitset_type;
+ typedef typename bitset_type::size_type size_type;
+
+ const streamsize w = is.width();
+ const size_type limit = 0 < w && static_cast<size_type>(w) < b.max_size()? // gps
+ w : b.max_size();
+
+ ios_base::iostate err = ios_base::goodbit; // gps
+ typename basic_istream<Ch, Tr>::sentry cerberos(is); // skips whitespaces
+ if(cerberos) {
+
+ // in accordance with prop. resol. of lib DR 303 [last checked 4 Feb 2004]
+ BOOST_DYNAMIC_BITSET_CTYPE_FACET(Ch, fac, is.getloc());
+ const Ch zero = BOOST_DYNAMIC_BITSET_WIDEN_CHAR(fac, '0');
+ const Ch one = BOOST_DYNAMIC_BITSET_WIDEN_CHAR(fac, '1');
+
+ b.clear();
+ try {
+ typename bitset_type::bit_appender appender(b);
+ basic_streambuf <Ch, Tr> * buf = is.rdbuf();
+ typename Tr::int_type c = buf->sgetc(); // G.P.S.
+ for( ; appender.get_count() < limit; c = buf->snextc() ) {
+
+ if (Tr::eq_int_type(Tr::eof(), c)) {
+ err |= ios_base::eofbit; // G.P.S.
+ break;
+ }
+ else {
+ const Ch to_c = Tr::to_char_type(c);
+ const bool is_one = Tr::eq(to_c, one);
+
+ if (!is_one && !Tr::eq(to_c, zero))
+ break; // non digit character
+
+ appender.do_append(is_one);
+
+ }
+
+ } // for
+ }
+ catch (...) {
+ // catches from stream buf, or from vector:
+ //
+ // bits_stored bits have been extracted and stored, and
+ // either no further character is extractable or we can't
+ // append to the underlying vector (out of memory) gps
+
+ bool rethrow = false; // see std 27.6.1.1/4
+ try { is.setstate(ios_base::badbit); }
+ catch(...) { rethrow = true; }
+
+ if (rethrow)
+ throw;
+
+ }
+ }
+
+ is.width(0); // gps
+ if (b.size() == 0 /*|| !cerberos*/)
+ err |= ios_base::failbit;
+ if (err != ios_base::goodbit) // gps
+ is.setstate (err); // may throw
+
+ return is;
+
+}
+
+
+#endif
+
+
+//-----------------------------------------------------------------------------
+// bitset operations
+
+template <typename Block, typename Allocator>
+dynamic_bitset<Block, Allocator>
+operator&(const dynamic_bitset<Block, Allocator>& x,
+ const dynamic_bitset<Block, Allocator>& y)
+{
+ dynamic_bitset<Block, Allocator> b(x);
+ return b &= y;
+}
+
+template <typename Block, typename Allocator>
+dynamic_bitset<Block, Allocator>
+operator|(const dynamic_bitset<Block, Allocator>& x,
+ const dynamic_bitset<Block, Allocator>& y)
+{
+ dynamic_bitset<Block, Allocator> b(x);
+ return b |= y;
+}
+
+template <typename Block, typename Allocator>
+dynamic_bitset<Block, Allocator>
+operator^(const dynamic_bitset<Block, Allocator>& x,
+ const dynamic_bitset<Block, Allocator>& y)
+{
+ dynamic_bitset<Block, Allocator> b(x);
+ return b ^= y;
+}
+
+template <typename Block, typename Allocator>
+dynamic_bitset<Block, Allocator>
+operator-(const dynamic_bitset<Block, Allocator>& x,
+ const dynamic_bitset<Block, Allocator>& y)
+{
+ dynamic_bitset<Block, Allocator> b(x);
+ return b -= y;
+}
+
+//-----------------------------------------------------------------------------
+// namespace scope swap
+
+template<typename Block, typename Allocator>
+inline void
+swap(dynamic_bitset<Block, Allocator>& left,
+ dynamic_bitset<Block, Allocator>& right) // no throw
+{
+ left.swap(right); // gps
+}
+
+
+//-----------------------------------------------------------------------------
+// private (on conforming compilers) member functions
+
+
+template <typename Block, typename Allocator>
+inline typename dynamic_bitset<Block, Allocator>::size_type
+dynamic_bitset<Block, Allocator>::calc_num_blocks(size_type num_bits)
+{
+ return num_bits / bits_per_block
+ + static_cast<int>( num_bits % bits_per_block != 0 );
+}
+
+// gives a reference to the highest block
+//
+template <typename Block, typename Allocator>
+inline Block& dynamic_bitset<Block, Allocator>::m_highest_block()
+{
+ return const_cast<Block &>
+ (static_cast<const dynamic_bitset *>(this)->m_highest_block());
+}
+
+// gives a const-reference to the highest block
+//
+template <typename Block, typename Allocator>
+inline const Block& dynamic_bitset<Block, Allocator>::m_highest_block() const
+{
+ assert(size() > 0 && num_blocks() > 0);
+ return m_bits.back();
+}
+
+
+// If size() is not a multiple of bits_per_block
+// then not all the bits in the last block are used.
+// This function resets the unused bits (convenient
+// for the implementation of many member functions)
+//
+template <typename Block, typename Allocator>
+inline void dynamic_bitset<Block, Allocator>::m_zero_unused_bits()
+{
+ assert (num_blocks() == calc_num_blocks(m_num_bits));
+
+ // if != 0 this is the number of bits used in the last block
+ const block_width_type extra_bits = count_extra_bits();
+
+ if (extra_bits != 0)
+ m_highest_block() &= ~(~static_cast<Block>(0) << extra_bits);
+
+}
+
+// check class invariants
+template <typename Block, typename Allocator>
+bool dynamic_bitset<Block, Allocator>::m_check_invariants() const
+{
+ const block_width_type extra_bits = count_extra_bits();
+ if (extra_bits > 0) {
+ block_type const mask = (~static_cast<Block>(0) << extra_bits);
+ if ((m_highest_block() & mask) != 0)
+ return false;
+ }
+ if (m_bits.size() > m_bits.capacity() || num_blocks() != calc_num_blocks(size()))
+ return false;
+
+ return true;
+
+}
+
+
+} // namespace boost
+
+
+#undef BOOST_BITSET_CHAR
+
+#endif // include guard
+
diff --git a/boost/boost/dynamic_bitset_fwd.hpp b/boost/boost/dynamic_bitset_fwd.hpp
new file mode 100644
index 00000000000..9062cfa0635
--- /dev/null
+++ b/boost/boost/dynamic_bitset_fwd.hpp
@@ -0,0 +1,28 @@
+// --------------------------------------------------
+//
+// (C) Copyright Chuck Allison and Jeremy Siek 2001 - 2002.
+// (C) Copyright Gennaro Prota 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/dynamic_bitset for documentation.
+
+
+#ifndef BOOST_DYNAMIC_BITSET_FWD_HPP
+#define BOOST_DYNAMIC_BITSET_FWD_HPP
+
+#include <memory>
+
+namespace boost {
+
+template <typename Block = unsigned long,
+ typename Allocator = std::allocator<Block> >
+class dynamic_bitset;
+
+} // namespace boost
+
+#endif // include guard
diff --git a/boost/boost/dynamic_property_map.hpp b/boost/boost/dynamic_property_map.hpp
new file mode 100644
index 00000000000..f968833a3f0
--- /dev/null
+++ b/boost/boost/dynamic_property_map.hpp
@@ -0,0 +1,362 @@
+#ifndef DYNAMIC_PROPERTY_MAP_RG09302004_HPP
+#define DYNAMIC_PROPERTY_MAP_RG09302004_HPP
+
+// Copyright 2004-5 The Trustees of Indiana University.
+
+// Use, modification and distribution is 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)
+
+// dynamic_property_map.hpp -
+// Support for runtime-polymorphic property maps. This header is factored
+// out of Doug Gregor's routines for reading GraphML files for use in reading
+// GraphViz graph files.
+
+// Authors: Doug Gregor
+// Ronald Garcia
+//
+
+
+#include <boost/config.hpp>
+#include <boost/property_map.hpp>
+#include <boost/lexical_cast.hpp>
+#include <boost/any.hpp>
+#include <boost/function/function3.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <typeinfo>
+#include <boost/mpl/bool.hpp>
+#include <stdexcept>
+#include <sstream>
+#include <map>
+#include <boost/type.hpp>
+
+namespace boost {
+
+namespace detail {
+
+ // read_value -
+ // A wrapper around lexical_cast, which does not behave as
+ // desired for std::string types.
+ template<typename Value>
+ inline Value read_value(const std::string& value)
+ { return boost::lexical_cast<Value>(value); }
+
+ template<>
+ inline std::string read_value<std::string>(const std::string& value)
+ { return value; }
+
+}
+
+
+// dynamic_property_map -
+// This interface supports polymorphic manipulation of property maps.
+class dynamic_property_map
+{
+public:
+ virtual ~dynamic_property_map() { }
+
+ virtual boost::any get(const any& key) = 0;
+ virtual std::string get_string(const any& key) = 0;
+ virtual void put(const any& key, const any& value) = 0;
+ virtual const std::type_info& key() const = 0;
+ virtual const std::type_info& value() const = 0;
+};
+
+
+//////////////////////////////////////////////////////////////////////
+// Property map exceptions
+//////////////////////////////////////////////////////////////////////
+
+struct dynamic_property_exception : public std::exception {
+ virtual ~dynamic_property_exception() throw() {}
+ virtual const char* what() const throw() = 0;
+};
+
+struct property_not_found : public dynamic_property_exception {
+ std::string property;
+ mutable std::string statement;
+ property_not_found(const std::string& property) : property(property) {}
+ virtual ~property_not_found() throw() {}
+
+ const char* what() const throw() {
+ if(statement.empty())
+ statement =
+ std::string("Property not found: ") + property + ".";
+
+ return statement.c_str();
+ }
+};
+
+struct dynamic_get_failure : public dynamic_property_exception {
+ std::string property;
+ mutable std::string statement;
+ dynamic_get_failure(const std::string& property) : property(property) {}
+ virtual ~dynamic_get_failure() throw() {}
+
+ const char* what() const throw() {
+ if(statement.empty())
+ statement =
+ std::string(
+ "dynamic property get cannot retrieve value for property: ")
+ + property + ".";
+
+ return statement.c_str();
+ }
+};
+
+struct dynamic_const_put_error : public dynamic_property_exception {
+ virtual ~dynamic_const_put_error() throw() {}
+
+ const char* what() const throw() {
+ return "Attempt to put a value into a const property map: ";
+ }
+};
+
+
+namespace detail {
+
+//
+// dynamic_property_map_adaptor -
+// property-map adaptor to support runtime polymorphism.
+template<typename PropertyMap>
+class dynamic_property_map_adaptor : public dynamic_property_map
+{
+ typedef typename property_traits<PropertyMap>::key_type key_type;
+ typedef typename property_traits<PropertyMap>::value_type value_type;
+ typedef typename property_traits<PropertyMap>::category category;
+
+ // do_put - overloaded dispatches from the put() member function.
+ // Attempts to "put" to a property map that does not model
+ // WritablePropertyMap result in a runtime exception.
+
+ // in_value must either hold an object of value_type or a string that
+ // can be converted to value_type via iostreams.
+ void do_put(const any& in_key, const any& in_value, mpl::bool_<true>)
+ {
+#if !(defined(__GNUC__) && (__GNUC__ == 2) && (__GNUC_MINOR__ == 95))
+ using boost::put;
+#endif
+
+ key_type key = any_cast<key_type>(in_key);
+ if (in_value.type() == typeid(value_type)) {
+#if defined(__GNUC__) && (__GNUC__ == 2) && (__GNUC_MINOR__ == 95)
+ boost::put(property_map, key, any_cast<value_type>(in_value));
+#else
+ put(property_map, key, any_cast<value_type>(in_value));
+#endif
+ } else {
+ // if in_value is an empty string, put a default constructed value_type.
+ std::string v = any_cast<std::string>(in_value);
+ if (v.empty()) {
+#if defined(__GNUC__) && (__GNUC__ == 2) && (__GNUC_MINOR__ == 95)
+ boost::put(property_map, key, value_type());
+#else
+ put(property_map, key, value_type());
+#endif
+ } else {
+#if defined(__GNUC__) && (__GNUC__ == 2) && (__GNUC_MINOR__ == 95)
+ boost::put(property_map, key, detail::read_value<value_type>(v));
+#else
+ put(property_map, key, detail::read_value<value_type>(v));
+#endif
+ }
+ }
+ }
+
+ void do_put(const any&, const any&, mpl::bool_<false>)
+ {
+ throw dynamic_const_put_error();
+ }
+
+public:
+ explicit dynamic_property_map_adaptor(const PropertyMap& property_map)
+ : property_map(property_map) { }
+
+ virtual boost::any get(const any& key)
+ {
+#if defined(__GNUC__) && (__GNUC__ == 2) && (__GNUC_MINOR__ == 95)
+ return boost::get(property_map, any_cast<key_type>(key));
+#else
+ using boost::get;
+
+ return get(property_map, any_cast<key_type>(key));
+#endif
+ }
+
+ virtual std::string get_string(const any& key)
+ {
+#if defined(__GNUC__) && (__GNUC__ == 2) && (__GNUC_MINOR__ == 95)
+ std::ostringstream out;
+ out << boost::get(property_map, any_cast<key_type>(key));
+ return out.str();
+#else
+ using boost::get;
+
+ std::ostringstream out;
+ out << get(property_map, any_cast<key_type>(key));
+ return out.str();
+#endif
+ }
+
+ virtual void put(const any& in_key, const any& in_value)
+ {
+ do_put(in_key, in_value,
+ mpl::bool_<(is_convertible<category*,
+ writable_property_map_tag*>::value)>());
+ }
+
+ virtual const std::type_info& key() const { return typeid(key_type); }
+ virtual const std::type_info& value() const { return typeid(value_type); }
+
+ PropertyMap& base() { return property_map; }
+ const PropertyMap& base() const { return property_map; }
+
+private:
+ PropertyMap property_map;
+};
+
+} // namespace detail
+
+//
+// dynamic_properties -
+// container for dynamic property maps
+//
+struct dynamic_properties
+{
+ typedef std::multimap<std::string, dynamic_property_map*>
+ property_maps_type;
+ typedef boost::function3<std::auto_ptr<dynamic_property_map>,
+ const std::string&,
+ const boost::any&,
+ const boost::any&> generate_fn_type;
+public:
+
+ typedef property_maps_type::iterator iterator;
+ typedef property_maps_type::const_iterator const_iterator;
+
+ dynamic_properties() : generate_fn() { }
+ dynamic_properties(const generate_fn_type& g) : generate_fn(g) {}
+
+ ~dynamic_properties()
+ {
+ for (property_maps_type::iterator i = property_maps.begin();
+ i != property_maps.end(); ++i) {
+ delete i->second;
+ }
+ }
+
+ template<typename PropertyMap>
+ dynamic_properties&
+ property(const std::string& name, PropertyMap property_map)
+ {
+ // Tbd: exception safety
+ std::auto_ptr<dynamic_property_map> pm(
+ new detail::dynamic_property_map_adaptor<PropertyMap>(property_map));
+ property_maps_type::iterator i =
+ property_maps.insert(property_maps_type::value_type(name, 0));
+ i->second = pm.release();
+
+ return *this;
+ }
+
+ iterator begin() { return property_maps.begin(); }
+ const_iterator begin() const { return property_maps.begin(); }
+ iterator end() { return property_maps.end(); }
+ const_iterator end() const { return property_maps.end(); }
+
+ iterator lower_bound(const std::string& name)
+ { return property_maps.lower_bound(name); }
+
+ const_iterator lower_bound(const std::string& name) const
+ { return property_maps.lower_bound(name); }
+
+ void
+ insert(const std::string& name, std::auto_ptr<dynamic_property_map> pm)
+ {
+ property_maps.insert(property_maps_type::value_type(name, pm.release()));
+ }
+
+ template<typename Key, typename Value>
+ std::auto_ptr<dynamic_property_map>
+ generate(const std::string& name, const Key& key, const Value& value)
+ {
+ if(!generate_fn) {
+ throw property_not_found(name);
+ } else {
+ return generate_fn(name,key,value);
+ }
+ }
+
+private:
+ property_maps_type property_maps;
+ generate_fn_type generate_fn;
+};
+
+template<typename Key, typename Value>
+bool
+put(const std::string& name, dynamic_properties& dp, const Key& key,
+ const Value& value)
+{
+ for (dynamic_properties::iterator i = dp.lower_bound(name);
+ i != dp.end() && i->first == name; ++i) {
+ if (i->second->key() == typeid(key)) {
+ i->second->put(key, value);
+ return true;
+ }
+ }
+
+ std::auto_ptr<dynamic_property_map> new_map = dp.generate(name, key, value);
+ if (new_map.get()) {
+ new_map->put(key, value);
+ dp.insert(name, new_map);
+ return true;
+ } else {
+ return false;
+ }
+}
+
+#ifndef BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS
+template<typename Value, typename Key>
+Value
+get(const std::string& name, const dynamic_properties& dp, const Key& key)
+{
+ for (dynamic_properties::const_iterator i = dp.lower_bound(name);
+ i != dp.end() && i->first == name; ++i) {
+ if (i->second->key() == typeid(key))
+ return any_cast<Value>(i->second->get(key));
+ }
+
+ throw dynamic_get_failure(name);
+}
+#endif
+
+template<typename Value, typename Key>
+Value
+get(const std::string& name, const dynamic_properties& dp, const Key& key, type<Value>)
+{
+ for (dynamic_properties::const_iterator i = dp.lower_bound(name);
+ i != dp.end() && i->first == name; ++i) {
+ if (i->second->key() == typeid(key))
+ return any_cast<Value>(i->second->get(key));
+ }
+
+ throw dynamic_get_failure(name);
+}
+
+template<typename Key>
+std::string
+get(const std::string& name, const dynamic_properties& dp, const Key& key)
+{
+ for (dynamic_properties::const_iterator i = dp.lower_bound(name);
+ i != dp.end() && i->first == name; ++i) {
+ if (i->second->key() == typeid(key))
+ return i->second->get_string(key);
+ }
+
+ throw dynamic_get_failure(name);
+}
+
+
+}
+
+#endif // DYNAMIC_PROPERTY_MAP_RG09302004_HPP
diff --git a/boost/boost/enable_shared_from_this.hpp b/boost/boost/enable_shared_from_this.hpp
new file mode 100644
index 00000000000..4e49f1f73ba
--- /dev/null
+++ b/boost/boost/enable_shared_from_this.hpp
@@ -0,0 +1,73 @@
+#ifndef BOOST_ENABLE_SHARED_FROM_THIS_HPP_INCLUDED
+#define BOOST_ENABLE_SHARED_FROM_THIS_HPP_INCLUDED
+
+//
+// enable_shared_from_this.hpp
+//
+// Copyright (c) 2002 Peter Dimov
+//
+// 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)
+//
+// http://www.boost.org/libs/smart_ptr/enable_shared_from_this.html
+//
+
+#include <boost/weak_ptr.hpp>
+#include <boost/shared_ptr.hpp>
+#include <boost/assert.hpp>
+#include <boost/config.hpp>
+
+namespace boost
+{
+
+template<class T> class enable_shared_from_this
+{
+protected:
+
+ enable_shared_from_this()
+ {
+ }
+
+ enable_shared_from_this(enable_shared_from_this const &)
+ {
+ }
+
+ enable_shared_from_this & operator=(enable_shared_from_this const &)
+ {
+ return *this;
+ }
+
+ ~enable_shared_from_this()
+ {
+ }
+
+public:
+
+ shared_ptr<T> shared_from_this()
+ {
+ shared_ptr<T> p(_internal_weak_this);
+ BOOST_ASSERT(p.get() == this);
+ return p;
+ }
+
+ shared_ptr<T const> shared_from_this() const
+ {
+ shared_ptr<T const> p(_internal_weak_this);
+ BOOST_ASSERT(p.get() == this);
+ return p;
+ }
+
+// Note: No, you don't need to initialize _internal_weak_this
+//
+// Please read the documentation, not the code
+//
+// http://www.boost.org/libs/smart_ptr/enable_shared_from_this.html
+
+ typedef T _internal_element_type; // for bcc 5.5.1
+ mutable weak_ptr<_internal_element_type> _internal_weak_this;
+};
+
+} // namespace boost
+
+#endif // #ifndef BOOST_ENABLE_SHARED_FROM_THIS_HPP_INCLUDED
diff --git a/boost/boost/filesystem.hpp b/boost/boost/filesystem.hpp
new file mode 100644
index 00000000000..aa65b2119a6
--- /dev/null
+++ b/boost/boost/filesystem.hpp
@@ -0,0 +1,20 @@
+// boost/filesystem/filesystem.hpp -----------------------------------------//
+
+// Copyright Beman Dawes 2005
+
+// Use, modification, and distribution is 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)
+
+// See library home page at http://www.boost.org/libs/filesystem
+
+//----------------------------------------------------------------------------//
+
+#ifndef BOOST_FILESYSTEM_FILESYSTEM_HPP
+#define BOOST_FILESYSTEM_FILESYSTEM_HPP
+
+#include <boost/filesystem/operations.hpp> // includes path.hpp
+#include <boost/filesystem/convenience.hpp>
+
+#endif
+
diff --git a/boost/boost/filesystem/cerrno.hpp b/boost/boost/filesystem/cerrno.hpp
new file mode 100644
index 00000000000..9f5391ae26a
--- /dev/null
+++ b/boost/boost/filesystem/cerrno.hpp
@@ -0,0 +1,23 @@
+// Boost Filesystem cerrno.hpp header --------------------------------------//
+
+// Copyright Beman Dawes 2005.
+// Use, modification, and distribution is 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)
+
+// See library home page at http://www.boost.org/libs/filesystem
+
+#ifndef BOOST_FILESYSTEM_CERRNO_HPP
+#define BOOST_FILESYSTEM_CERRNO_HPP
+
+#include <cerrno>
+
+#if defined __BORLANDC__
+#define ENOSYS 9997
+#endif
+
+#define EBADHANDLE 9998 // bad handle
+#define EOTHER 9999 // Other error not translatable
+ // to a POSIX errno value
+
+#endif // include guard
diff --git a/boost/boost/filesystem/config.hpp b/boost/boost/filesystem/config.hpp
new file mode 100644
index 00000000000..4b81bbc841d
--- /dev/null
+++ b/boost/boost/filesystem/config.hpp
@@ -0,0 +1,112 @@
+// boost/filesystem/config.hpp ---------------------------------------------//
+
+// Copyright Beman Dawes 2003
+// Use, modification, and distribution is 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)
+
+// See library home page at http://www.boost.org/libs/filesystem
+
+//----------------------------------------------------------------------------//
+
+#ifndef BOOST_FILESYSTEM_CONFIG_HPP
+#define BOOST_FILESYSTEM_CONFIG_HPP
+
+#define BOOST_FILESYSTEM_I18N // aid users wishing to compile several versions
+
+// ability to change namespace aids path_table.cpp ------------------------//
+#ifndef BOOST_FILESYSTEM_NAMESPACE
+# define BOOST_FILESYSTEM_NAMESPACE filesystem
+#endif
+
+// This header implements separate compilation features as described in
+// http://www.boost.org/more/separate_compilation.html
+
+#include <boost/config.hpp>
+
+// determine platform ------------------------------------------------------//
+
+// BOOST_CYGWIN_PATH implies BOOST_WINDOWS_PATH and BOOST_POSIX_API
+
+# if defined(BOOST_CYGWIN_PATH)
+# if defined(BOOST_POSIX_PATH)
+# error BOOST_POSIX_PATH is invalid when BOOST_CYGWIN_PATH is defined
+# endif
+# if defined(BOOST_WINDOWS_API)
+# error BOOST_WINDOWS_API is invalid when BOOST_CYGWIN_PATH is defined
+# endif
+# define BOOST_WINDOWS_PATH
+# define BOOST_POSIX_API
+# endif
+
+// BOOST_POSIX_API or BOOST_WINDOWS_API specify which API to use
+
+# if defined( BOOST_WINDOWS_API ) && defined( BOOST_POSIX_API )
+# error both BOOST_WINDOWS_API and BOOST_POSIX_API are defined
+# elif !defined( BOOST_WINDOWS_API ) && !defined( BOOST_POSIX_API )
+# if defined(_WIN32) || defined(__WIN32__) || defined(WIN32) || defined(__CYGWIN__)
+# define BOOST_WINDOWS_API
+# else
+# define BOOST_POSIX_API
+# endif
+# endif
+
+// BOOST_WINDOWS_PATH enables Windows path syntax recognition
+
+# if !defined(BOOST_POSIX_PATH) && (defined(_WIN32) || defined(__WIN32__) || defined(WIN32) || defined(__CYGWIN__))
+# define BOOST_WINDOWS_PATH
+# endif
+
+// narrow support only for badly broken compilers or libraries -------------//
+
+# if defined(BOOST_NO_STD_WSTRING) || defined(BOOST_NO_SFINAE) || defined(BOOST_NO_STD_LOCALE)
+# define BOOST_FILESYSTEM_NARROW_ONLY
+# endif
+
+// enable dynamic linking on Windows ---------------------------------------//
+
+# if (defined(BOOST_ALL_DYN_LINK) || defined(BOOST_FILESYSTEM_DYN_LINK)) && defined(__BORLANDC__) && defined(__WIN32__)
+# error Dynamic linking Boost.Filesystem does not work for Borland; use static linking instead
+# endif
+
+#ifdef BOOST_HAS_DECLSPEC // defined in config system
+// we need to import/export our code only if the user has specifically
+// asked for it by defining either BOOST_ALL_DYN_LINK if they want all boost
+// libraries to be dynamically linked, or BOOST_FILESYSTEM_DYN_LINK
+// if they want just this one to be dynamically liked:
+#if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_FILESYSTEM_DYN_LINK)
+// export if this is our own source, otherwise import:
+#ifdef BOOST_FILESYSTEM_SOURCE
+# define BOOST_FILESYSTEM_DECL __declspec(dllexport)
+#else
+# define BOOST_FILESYSTEM_DECL __declspec(dllimport)
+#endif // BOOST_FILESYSTEM_SOURCE
+#endif // DYN_LINK
+#endif // BOOST_HAS_DECLSPEC
+//
+// if BOOST_FILESYSTEM_DECL isn't defined yet define it now:
+#ifndef BOOST_FILESYSTEM_DECL
+#define BOOST_FILESYSTEM_DECL
+#endif
+
+// enable automatic library variant selection ------------------------------//
+
+#if !defined(BOOST_FILESYSTEM_SOURCE) && !defined(BOOST_ALL_NO_LIB) && !defined(BOOST_FILESYSTEM_NO_LIB)
+//
+// Set the name of our library, this will get undef'ed by auto_link.hpp
+// once it's done with it:
+//
+#define BOOST_LIB_NAME boost_filesystem
+//
+// If we're importing code from a dll, then tell auto_link.hpp about it:
+//
+#if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_FILESYSTEM_DYN_LINK)
+# define BOOST_DYN_LINK
+#endif
+//
+// And include the header that does the work:
+//
+#include <boost/config/auto_link.hpp>
+#endif // auto-linking disabled
+
+#endif // BOOST_FILESYSTEM_CONFIG_HPP
diff --git a/boost/boost/filesystem/convenience.hpp b/boost/boost/filesystem/convenience.hpp
new file mode 100644
index 00000000000..a11d85e523f
--- /dev/null
+++ b/boost/boost/filesystem/convenience.hpp
@@ -0,0 +1,331 @@
+// boost/filesystem/convenience.hpp ----------------------------------------//
+
+// Copyright Beman Dawes, 2002-2005
+// Copyright Vladimir Prus, 2002
+// Use, modification, and distribution is 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)
+
+// See library home page at http://www.boost.org/libs/filesystem
+
+//----------------------------------------------------------------------------//
+
+#ifndef BOOST_FILESYSTEM_CONVENIENCE_HPP
+#define BOOST_FILESYSTEM_CONVENIENCE_HPP
+
+#include <boost/filesystem/operations.hpp>
+#include <vector>
+#include <stack>
+
+#include <boost/config/abi_prefix.hpp> // must be the last #include
+
+# ifndef BOOST_FILESYSTEM_NARROW_ONLY
+# define BOOST_FS_FUNC(BOOST_FS_TYPE) \
+ template<class Path> typename boost::enable_if<is_basic_path<Path>, \
+ BOOST_FS_TYPE>::type
+# define BOOST_FS_FUNC_STRING BOOST_FS_FUNC(typename Path::string_type)
+# define BOOST_FS_TYPENAME typename
+# else
+# define BOOST_FS_FUNC(BOOST_FS_TYPE) inline BOOST_FS_TYPE
+ typedef boost::filesystem::path Path;
+# define BOOST_FS_FUNC_STRING std::string
+# define BOOST_FS_TYPENAME
+# endif
+
+namespace boost
+{
+ namespace filesystem
+ {
+
+ BOOST_FS_FUNC(bool) create_directories(const Path& ph)
+ {
+ if (ph.empty() || exists(ph))
+ {
+ if ( !ph.empty() && !is_directory(ph) )
+ boost::throw_exception( basic_filesystem_error<Path>(
+ "boost::filesystem::create_directories", ph, -1 ) );
+ return false;
+ }
+
+ // First create branch, by calling ourself recursively
+ create_directories(ph.branch_path());
+ // Now that parent's path exists, create the directory
+ create_directory(ph);
+ return true;
+ }
+
+ BOOST_FS_FUNC_STRING extension(const Path& ph)
+ {
+ typedef BOOST_FS_TYPENAME Path::string_type string_type;
+ string_type leaf = ph.leaf();
+
+ BOOST_FS_TYPENAME string_type::size_type n = leaf.rfind('.');
+ if (n != string_type::npos)
+ return leaf.substr(n);
+ else
+ return string_type();
+ }
+
+ BOOST_FS_FUNC_STRING basename(const Path& ph)
+ {
+ typedef BOOST_FS_TYPENAME Path::string_type string_type;
+ string_type leaf = ph.leaf();
+ BOOST_FS_TYPENAME string_type::size_type n = leaf.rfind('.');
+ return leaf.substr(0, n);
+ }
+
+ BOOST_FS_FUNC(Path) change_extension( const Path & ph,
+ const BOOST_FS_TYPENAME Path::string_type & new_extension )
+ { return ph.branch_path() / (basename(ph) + new_extension); }
+
+# ifndef BOOST_FILESYSTEM_NARROW_ONLY
+
+ // "do-the-right-thing" overloads ---------------------------------------//
+
+ inline bool create_directories(const path& ph)
+ { return create_directories<path>(ph); }
+ inline bool create_directories(const wpath& ph)
+ { return create_directories<wpath>(ph); }
+
+ inline std::string extension(const path& ph)
+ { return extension<path>(ph); }
+ inline std::wstring extension(const wpath& ph)
+ { return extension<wpath>(ph); }
+
+ inline std::string basename(const path& ph)
+ { return basename<path>( ph ); }
+ inline std::wstring basename(const wpath& ph)
+ { return basename<wpath>( ph ); }
+
+ inline path change_extension( const path & ph, const std::string& new_ex )
+ { return change_extension<path>( ph, new_ex ); }
+ inline wpath change_extension( const wpath & ph, const std::wstring& new_ex )
+ { return change_extension<wpath>( ph, new_ex ); }
+
+# endif
+
+
+ // basic_recursive_directory_iterator helpers --------------------------//
+
+ namespace detail
+ {
+ template< class Path >
+ struct recur_dir_itr_imp
+ {
+ typedef basic_directory_iterator< Path > element_type;
+ std::stack< element_type, std::vector< element_type > > m_stack;
+ int m_level;
+ bool m_no_push;
+ bool m_no_throw;
+
+ recur_dir_itr_imp() : m_level(0), m_no_push(false), m_no_throw(false) {}
+ };
+
+ } // namespace detail
+
+ // basic_recursive_directory_iterator ----------------------------------//
+
+ template< class Path >
+ class basic_recursive_directory_iterator
+ : public boost::iterator_facade<
+ basic_recursive_directory_iterator<Path>,
+ basic_directory_entry<Path>,
+ boost::single_pass_traversal_tag >
+ {
+ public:
+ typedef Path path_type;
+
+ basic_recursive_directory_iterator(){} // creates the "end" iterator
+
+ explicit basic_recursive_directory_iterator( const Path & dir_path );
+ basic_recursive_directory_iterator( const Path & dir_path, system_error_type & ec );
+
+ int level() const { return m_imp->m_level; }
+
+ void pop();
+ void no_push()
+ {
+ BOOST_ASSERT( m_imp.get() && "attempt to no_push() on end iterator" );
+ m_imp->m_no_push = true;
+ }
+
+ file_status status() const
+ {
+ BOOST_ASSERT( m_imp.get()
+ && "attempt to call status() on end recursive_iterator" );
+ return m_imp->m_stack.top()->status();
+ }
+
+ file_status symlink_status() const
+ {
+ BOOST_ASSERT( m_imp.get()
+ && "attempt to call symlink_status() on end recursive_iterator" );
+ return m_imp->m_stack.top()->symlink_status();
+ }
+
+ private:
+
+ // shared_ptr provides shallow-copy semantics required for InputIterators.
+ // m_imp.get()==0 indicates the end iterator.
+ boost::shared_ptr< detail::recur_dir_itr_imp< Path > > m_imp;
+
+ friend class boost::iterator_core_access;
+
+ typename boost::iterator_facade<
+ basic_recursive_directory_iterator<Path>,
+ basic_directory_entry<Path>,
+ boost::single_pass_traversal_tag >::reference
+ dereference() const
+ {
+ BOOST_ASSERT( m_imp.get() && "attempt to dereference end iterator" );
+ return *m_imp->m_stack.top();
+ }
+
+ void increment();
+
+ bool equal( const basic_recursive_directory_iterator & rhs ) const
+ { return m_imp == rhs.m_imp; }
+ };
+
+ typedef basic_recursive_directory_iterator<path> recursive_directory_iterator;
+# ifndef BOOST_FILESYSTEM_NARROW_ONLY
+ typedef basic_recursive_directory_iterator<wpath> wrecursive_directory_iterator;
+# endif
+
+ // basic_recursive_directory_iterator implementation -------------------//
+
+ // constructors
+ template<class Path>
+ basic_recursive_directory_iterator<Path>::
+ basic_recursive_directory_iterator( const Path & dir_path )
+ : m_imp( new detail::recur_dir_itr_imp<Path> )
+ {
+ m_imp->m_stack.push( basic_directory_iterator<Path>( dir_path ) );
+ }
+
+ template<class Path>
+ basic_recursive_directory_iterator<Path>::
+ basic_recursive_directory_iterator( const Path & dir_path, system_error_type & ec )
+ : m_imp( new detail::recur_dir_itr_imp<Path> )
+ {
+ m_imp->m_stack.push( basic_directory_iterator<Path>( dir_path, std::nothrow ) );
+ m_imp->m_no_throw = true;
+ }
+
+ // increment
+ template<class Path>
+ void basic_recursive_directory_iterator<Path>::increment()
+ {
+ BOOST_ASSERT( m_imp.get() && "increment on end iterator" );
+
+ static const basic_directory_iterator<Path> end_itr;
+
+ if ( m_imp->m_no_push ) m_imp->m_no_push = false;
+ else if ( is_directory( m_imp->m_stack.top()->status() ) )
+ {
+ system_error_type ec;
+ m_imp->m_stack.push(
+ m_imp->m_no_throw
+ ? basic_directory_iterator<Path>( *m_imp->m_stack.top(), ec )
+ : basic_directory_iterator<Path>( *m_imp->m_stack.top() )
+ );
+ if ( m_imp->m_stack.top() != end_itr )
+ {
+ ++m_imp->m_level;
+ return;
+ }
+ m_imp->m_stack.pop();
+ }
+
+ while ( !m_imp->m_stack.empty()
+ && ++m_imp->m_stack.top() == end_itr )
+ {
+ m_imp->m_stack.pop();
+ --m_imp->m_level;
+ }
+
+ if ( m_imp->m_stack.empty() ) m_imp.reset(); // done, so make end iterator
+ }
+
+ // pop
+ template<class Path>
+ void basic_recursive_directory_iterator<Path>::pop()
+ {
+ BOOST_ASSERT( m_imp.get() && "pop on end iterator" );
+ BOOST_ASSERT( m_imp->m_level > 0 && "pop with level < 1" );
+
+ m_imp->m_stack.pop();
+ --m_imp->m_level;
+ }
+
+ // what() basic_filesystem_error_decoder -------------------------------//
+
+ namespace detail
+ {
+
+# if BOOST_WORKAROUND(__BORLANDC__,BOOST_TESTED_AT(0x581))
+ using boost::filesystem::system_message;
+# endif
+
+ inline void decode_system_message( system_error_type ec, std::string & target )
+ {
+ system_message( ec, target );
+ }
+
+# if defined(BOOST_WINDOWS_API) && !defined(BOOST_FILESYSTEM_NARROW_ONLY)
+ inline void decode_system_message( system_error_type ec, std::wstring & target )
+ {
+ system_message( ec, target );
+ }
+# endif
+
+ template<class String>
+ void decode_system_message( system_error_type ec, String & target )
+ {
+ std::string temp;
+ system_message( ec, temp );
+ for ( const char * p = temp.c_str(); *p != 0; ++p )
+ { target += static_cast<typename String::value_type>( *p ); }
+ }
+ }
+
+ template<class Path>
+ typename Path::string_type what( const basic_filesystem_error<Path> & ex )
+ {
+ typename Path::string_type s;
+ for ( const char * p = ex.what(); *p != 0; ++p )
+ { s += static_cast<typename Path::string_type::value_type>( *p ); }
+
+ if ( !ex.path1().empty() )
+ {
+ s += static_cast<typename Path::string_type::value_type>( ':' );
+ s += static_cast<typename Path::string_type::value_type>( ' ' );
+ s += static_cast<typename Path::string_type::value_type>( '\"' );
+ s += ex.path1().file_string();
+ s += static_cast<typename Path::string_type::value_type>( '\"' );
+ }
+ if ( !ex.path2().empty() )
+ {
+ s += static_cast<typename Path::string_type::value_type>( ',' );
+ s += static_cast<typename Path::string_type::value_type>( ' ' );
+ s += static_cast<typename Path::string_type::value_type>( '\"' );
+ s += ex.path2().file_string();
+ s += static_cast<typename Path::string_type::value_type>( '\"' );
+ }
+ if ( ex.system_error() )
+ {
+ s += static_cast<typename Path::string_type::value_type>( ' ' );
+
+ detail::decode_system_message( ex.system_error(), s );
+ }
+ return s;
+ }
+
+ } // namespace filesystem
+} // namespace boost
+
+#undef BOOST_FS_FUNC_STRING
+#undef BOOST_FS_FUNC
+
+#include <boost/config/abi_suffix.hpp> // pops abi_prefix.hpp pragmas
+#endif // BOOST_FILESYSTEM_CONVENIENCE_HPP
diff --git a/boost/boost/filesystem/exception.hpp b/boost/boost/filesystem/exception.hpp
new file mode 100644
index 00000000000..edea663b1fa
--- /dev/null
+++ b/boost/boost/filesystem/exception.hpp
@@ -0,0 +1,9 @@
+// boost/filesystem/exception.hpp -------------------------------------------//
+
+// Copyright Beman Dawes 2003
+// Use, modification, and distribution is 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 header is no long used. The contents have been moved to path.hpp.
+// It is provided so that user code #includes do not have to be changed.
diff --git a/boost/boost/filesystem/fstream.hpp b/boost/boost/filesystem/fstream.hpp
new file mode 100644
index 00000000000..bdba8f051c9
--- /dev/null
+++ b/boost/boost/filesystem/fstream.hpp
@@ -0,0 +1,584 @@
+// boost/filesystem/fstream.hpp --------------------------------------------//
+
+// Copyright Beman Dawes 2002.
+// Use, modification, and distribution is 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)
+
+// See library home page at http://www.boost.org/libs/filesystem
+
+//----------------------------------------------------------------------------//
+
+#ifndef BOOST_FILESYSTEM_FSTREAM_HPP
+#define BOOST_FILESYSTEM_FSTREAM_HPP
+
+#include <boost/filesystem/operations.hpp> // for 8.3 hack (see below)
+#include <boost/utility/enable_if.hpp>
+#include <boost/detail/workaround.hpp>
+
+#include <iosfwd>
+#include <fstream>
+
+#include <boost/config/abi_prefix.hpp> // must be the last #include
+
+// NOTE: fstream.hpp for Boost 1.32.0 and earlier supplied workarounds for
+// various compiler problems. They have been removed to ease development of the
+// basic i18n functionality. Once the new interface is stable, the workarounds
+// will be reinstated for any compilers that otherwise can support the rest of
+// the library after internationalization.
+
+namespace boost
+{
+ namespace filesystem
+ {
+ namespace detail
+ {
+# if defined(BOOST_WINDOWS_API) && !defined(BOOST_FILESYSTEM_NARROW_ONLY)
+# if !defined(BOOST_DINKUMWARE_STDLIB) || BOOST_DINKUMWARE_STDLIB < 405
+ // The 8.3 hack:
+ // C++98 does not supply a wchar_t open, so try to get an equivalent
+ // narrow char name based on the short, so-called 8.3, name.
+ // Not needed for Dinkumware 405 and later as they do supply wchar_t open.
+ BOOST_FILESYSTEM_DECL bool create_file_api( const std::wstring & ph,
+ std::ios_base::openmode mode ); // true if succeeds
+ BOOST_FILESYSTEM_DECL std::string narrow_path_api(
+ const std::wstring & ph ); // return is empty if fails
+
+ inline std::string path_proxy( const std::wstring & file_ph,
+ std::ios_base::openmode mode )
+ // Return a non-existant path if cannot supply narrow short path.
+ // An empty path doesn't work because some Dinkumware versions
+ // assert the path is non-empty.
+ {
+ std::string narrow_ph;
+ bool created_file( false );
+ if ( !exists( file_ph )
+ && (mode & std::ios_base::out) != 0
+ && create_file_api( file_ph, mode ) )
+ {
+ created_file = true;
+ }
+ narrow_ph = narrow_path_api( file_ph );
+ if ( narrow_ph.empty() )
+ {
+ if ( created_file ) remove_api( file_ph );
+ narrow_ph = "\x01";
+ }
+ return narrow_ph;
+ }
+# else
+ // Dinkumware 405 and later does supply wchar_t functions
+ inline const std::wstring & path_proxy( const std::wstring & file_ph,
+ std::ios_base::openmode )
+ { return file_ph; }
+# endif
+# endif
+
+ inline const std::string & path_proxy( const std::string & file_ph,
+ std::ios_base::openmode )
+ { return file_ph; }
+
+ } // namespace detail
+
+ template < class charT, class traits = std::char_traits<charT> >
+ class basic_filebuf : public std::basic_filebuf<charT,traits>
+ {
+ private: // disallow copying
+ basic_filebuf( const basic_filebuf & );
+ const basic_filebuf & operator=( const basic_filebuf & );
+ public:
+ basic_filebuf() {}
+ virtual ~basic_filebuf() {}
+
+# ifndef BOOST_FILESYSTEM_NARROW_ONLY
+ template<class Path>
+ typename boost::enable_if<is_basic_path<Path>,
+ basic_filebuf<charT,traits> *>::type
+ open( const Path & file_ph, std::ios_base::openmode mode );
+
+ basic_filebuf<charT,traits> *
+ open( const wpath & file_ph, std::ios_base::openmode mode );
+# endif
+
+# if !BOOST_WORKAROUND( BOOST_MSVC, <= 1200 ) // VC++ 6.0 can't handle this
+ basic_filebuf<charT,traits> *
+ open( const path & file_ph, std::ios_base::openmode mode );
+# endif
+ };
+
+ template < class charT, class traits = std::char_traits<charT> >
+ class basic_ifstream : public std::basic_ifstream<charT,traits>
+ {
+ private: // disallow copying
+ basic_ifstream( const basic_ifstream & );
+ const basic_ifstream & operator=( const basic_ifstream & );
+ public:
+ basic_ifstream() {}
+
+ // use two signatures, rather than one signature with default second
+ // argument, to workaround VC++ 7.1 bug (ID VSWhidbey 38416)
+
+# ifndef BOOST_FILESYSTEM_NARROW_ONLY
+ template<class Path>
+ explicit basic_ifstream( const Path & file_ph,
+ typename boost::enable_if<is_basic_path<Path> >::type* dummy = 0 );
+
+ template<class Path>
+ basic_ifstream( const Path & file_ph, std::ios_base::openmode mode,
+ typename boost::enable_if<is_basic_path<Path> >::type* dummy = 0 );
+
+ template<class Path>
+ typename boost::enable_if<is_basic_path<Path>, void>::type
+ open( const Path & file_ph );
+
+ template<class Path>
+ typename boost::enable_if<is_basic_path<Path>, void>::type
+ open( const Path & file_ph, std::ios_base::openmode mode );
+
+ explicit basic_ifstream( const wpath & file_ph );
+ basic_ifstream( const wpath & file_ph, std::ios_base::openmode mode );
+ void open( const wpath & file_ph );
+ void open( const wpath & file_ph, std::ios_base::openmode mode );
+# endif
+
+ explicit basic_ifstream( const path & file_ph );
+ basic_ifstream( const path & file_ph, std::ios_base::openmode mode );
+# if !BOOST_WORKAROUND( BOOST_MSVC, <= 1200 ) // VC++ 6.0 can't handle this
+ void open( const path & file_ph );
+ void open( const path & file_ph, std::ios_base::openmode mode );
+# endif
+ virtual ~basic_ifstream() {}
+ };
+
+ template < class charT, class traits = std::char_traits<charT> >
+ class basic_ofstream : public std::basic_ofstream<charT,traits>
+ {
+ private: // disallow copying
+ basic_ofstream( const basic_ofstream & );
+ const basic_ofstream & operator=( const basic_ofstream & );
+ public:
+ basic_ofstream() {}
+
+ // use two signatures, rather than one signature with default second
+ // argument, to workaround VC++ 7.1 bug (ID VSWhidbey 38416)
+
+# ifndef BOOST_FILESYSTEM_NARROW_ONLY
+
+ template<class Path>
+ explicit basic_ofstream( const Path & file_ph,
+ typename boost::enable_if<is_basic_path<Path> >::type* dummy = 0 );
+ explicit basic_ofstream( const wpath & file_ph );
+
+ template<class Path>
+ basic_ofstream( const Path & file_ph, std::ios_base::openmode mode,
+ typename boost::enable_if<is_basic_path<Path> >::type* dummy = 0 );
+ basic_ofstream( const wpath & file_ph, std::ios_base::openmode mode );
+
+ template<class Path>
+ typename boost::enable_if<is_basic_path<Path>, void>::type
+ open( const Path & file_ph );
+ void open( const wpath & file_ph );
+
+ template<class Path>
+ typename boost::enable_if<is_basic_path<Path>, void>::type
+ open( const Path & file_ph, std::ios_base::openmode mode );
+ void open( const wpath & file_ph, std::ios_base::openmode mode );
+
+# endif
+
+ explicit basic_ofstream( const path & file_ph );
+ basic_ofstream( const path & file_ph, std::ios_base::openmode mode );
+# if !BOOST_WORKAROUND( BOOST_MSVC, <= 1200 ) // VC++ 6.0 can't handle this
+ void open( const path & file_ph );
+ void open( const path & file_ph, std::ios_base::openmode mode );
+# endif
+ virtual ~basic_ofstream() {}
+ };
+
+ template < class charT, class traits = std::char_traits<charT> >
+ class basic_fstream : public std::basic_fstream<charT,traits>
+ {
+ private: // disallow copying
+ basic_fstream( const basic_fstream & );
+ const basic_fstream & operator=( const basic_fstream & );
+ public:
+ basic_fstream() {}
+
+ // use two signatures, rather than one signature with default second
+ // argument, to workaround VC++ 7.1 bug (ID VSWhidbey 38416)
+
+# ifndef BOOST_FILESYSTEM_NARROW_ONLY
+
+ template<class Path>
+ explicit basic_fstream( const Path & file_ph,
+ typename boost::enable_if<is_basic_path<Path> >::type* dummy = 0 );
+ explicit basic_fstream( const wpath & file_ph );
+
+ template<class Path>
+ basic_fstream( const Path & file_ph, std::ios_base::openmode mode,
+ typename boost::enable_if<is_basic_path<Path> >::type* dummy = 0 );
+ basic_fstream( const wpath & file_ph, std::ios_base::openmode mode );
+
+ template<class Path>
+ typename boost::enable_if<is_basic_path<Path>, void>::type
+ open( const Path & file_ph );
+ void open( const wpath & file_ph );
+
+ template<class Path>
+ typename boost::enable_if<is_basic_path<Path>, void>::type
+ open( const Path & file_ph, std::ios_base::openmode mode );
+ void open( const wpath & file_ph, std::ios_base::openmode mode );
+
+# endif
+
+ explicit basic_fstream( const path & file_ph );
+ basic_fstream( const path & file_ph, std::ios_base::openmode mode );
+# if !BOOST_WORKAROUND( BOOST_MSVC, <= 1200 ) // VC++ 6.0 can't handle this
+ void open( const path & file_ph );
+ void open( const path & file_ph, std::ios_base::openmode mode );
+# endif
+ virtual ~basic_fstream() {}
+
+ };
+
+ typedef basic_filebuf<char> filebuf;
+ typedef basic_ifstream<char> ifstream;
+ typedef basic_ofstream<char> ofstream;
+ typedef basic_fstream<char> fstream;
+
+# ifndef BOOST_FILESYSTEM_NARROW_ONLY
+ typedef basic_filebuf<wchar_t> wfilebuf;
+ typedef basic_ifstream<wchar_t> wifstream;
+ typedef basic_fstream<wchar_t> wfstream;
+ typedef basic_ofstream<wchar_t> wofstream;
+# endif
+
+# ifndef BOOST_FILESYSTEM_NARROW_ONLY
+
+// basic_filebuf definitions -----------------------------------------------//
+
+ template <class charT, class traits>
+ template<class Path>
+ typename boost::enable_if<is_basic_path<Path>,
+ basic_filebuf<charT,traits> *>::type
+ basic_filebuf<charT,traits>::open( const Path & file_ph,
+ std::ios_base::openmode mode )
+ {
+ return (std::basic_filebuf<charT,traits>::open( detail::path_proxy(
+ file_ph.external_file_string(), mode ).c_str(), mode )
+ == 0) ? 0 : this;
+ }
+
+ template <class charT, class traits>
+ basic_filebuf<charT,traits> *
+ basic_filebuf<charT, traits>::open( const wpath & file_ph,
+ std::ios_base::openmode mode )
+ {
+ return this->BOOST_NESTED_TEMPLATE open<wpath>( file_ph, mode );
+ }
+
+// basic_ifstream definitions ----------------------------------------------//
+
+ template <class charT, class traits> template<class Path>
+ basic_ifstream<charT,traits>::basic_ifstream(const Path & file_ph,
+ typename boost::enable_if<is_basic_path<Path> >::type* )
+ : std::basic_ifstream<charT,traits>(
+ detail::path_proxy( file_ph.external_file_string(),
+ std::ios_base::in ).c_str(), std::ios_base::in ) {}
+
+ template <class charT, class traits>
+ basic_ifstream<charT,traits>::basic_ifstream( const wpath & file_ph )
+ : std::basic_ifstream<charT,traits>(
+ detail::path_proxy( file_ph.external_file_string(),
+ std::ios_base::in ).c_str(), std::ios_base::in ) {}
+
+ template <class charT, class traits> template<class Path>
+ basic_ifstream<charT,traits>::basic_ifstream( const Path & file_ph,
+ std::ios_base::openmode mode,
+ typename boost::enable_if<is_basic_path<Path> >::type* )
+ : std::basic_ifstream<charT,traits>(
+ detail::path_proxy( file_ph.external_file_string(),
+ mode ).c_str(), mode | std::ios_base::in ) {}
+
+ template <class charT, class traits>
+ basic_ifstream<charT,traits>::basic_ifstream( const wpath & file_ph,
+ std::ios_base::openmode mode )
+ : std::basic_ifstream<charT,traits>(
+ detail::path_proxy( file_ph.external_file_string(),
+ mode ).c_str(), mode | std::ios_base::in ) {}
+
+ template <class charT, class traits> template<class Path>
+ typename boost::enable_if<is_basic_path<Path>, void>::type
+ basic_ifstream<charT,traits>::open( const Path & file_ph )
+ {
+ std::basic_ifstream<charT,traits>::open(
+ detail::path_proxy( file_ph.external_file_string(),
+ std::ios_base::in ).c_str(), std::ios_base::in );
+ }
+
+ template <class charT, class traits>
+ void basic_ifstream<charT,traits>::open( const wpath & file_ph )
+ {
+ std::basic_ifstream<charT,traits>::open(
+ detail::path_proxy( file_ph.external_file_string(),
+ std::ios_base::in ).c_str(), std::ios_base::in );
+ }
+
+ template <class charT, class traits> template<class Path>
+ typename boost::enable_if<is_basic_path<Path>, void>::type
+ basic_ifstream<charT,traits>::open( const Path & file_ph,
+ std::ios_base::openmode mode )
+ {
+ std::basic_ifstream<charT,traits>::open(
+ detail::path_proxy( file_ph.external_file_string(),
+ mode ).c_str(), mode | std::ios_base::in );
+ }
+
+ template <class charT, class traits>
+ void basic_ifstream<charT,traits>::open( const wpath & file_ph,
+ std::ios_base::openmode mode )
+ {
+ std::basic_ifstream<charT,traits>::open(
+ detail::path_proxy( file_ph.external_file_string(),
+ mode ).c_str(), mode | std::ios_base::in );
+ }
+
+// basic_ofstream definitions ----------------------------------------------//
+
+ template <class charT, class traits> template<class Path>
+ basic_ofstream<charT,traits>::basic_ofstream(const Path & file_ph,
+ typename boost::enable_if<is_basic_path<Path> >::type* )
+ : std::basic_ofstream<charT,traits>(
+ detail::path_proxy( file_ph.external_file_string(),
+ std::ios_base::out ).c_str(), std::ios_base::out ) {}
+
+ template <class charT, class traits>
+ basic_ofstream<charT,traits>::basic_ofstream( const wpath & file_ph )
+ : std::basic_ofstream<charT,traits>(
+ detail::path_proxy( file_ph.external_file_string(),
+ std::ios_base::out ).c_str(), std::ios_base::out ) {}
+
+ template <class charT, class traits> template<class Path>
+ basic_ofstream<charT,traits>::basic_ofstream( const Path & file_ph,
+ std::ios_base::openmode mode,
+ typename boost::enable_if<is_basic_path<Path> >::type* )
+ : std::basic_ofstream<charT,traits>(
+ detail::path_proxy( file_ph.external_file_string(),
+ mode ).c_str(), mode | std::ios_base::out ) {}
+
+ template <class charT, class traits>
+ basic_ofstream<charT,traits>::basic_ofstream( const wpath & file_ph,
+ std::ios_base::openmode mode )
+ : std::basic_ofstream<charT,traits>(
+ detail::path_proxy( file_ph.external_file_string(),
+ mode ).c_str(), mode | std::ios_base::out ) {}
+
+ template <class charT, class traits> template<class Path>
+ typename boost::enable_if<is_basic_path<Path>, void>::type
+ basic_ofstream<charT,traits>::open( const Path & file_ph )
+ {
+ std::basic_ofstream<charT,traits>::open(
+ detail::path_proxy( file_ph.external_file_string(),
+ std::ios_base::out ).c_str(), std::ios_base::out );
+ }
+
+ template <class charT, class traits>
+ void basic_ofstream<charT,traits>::open( const wpath & file_ph )
+ {
+ std::basic_ofstream<charT,traits>::open(
+ detail::path_proxy( file_ph.external_file_string(),
+ std::ios_base::out ).c_str(), std::ios_base::out );
+ }
+
+ template <class charT, class traits> template<class Path>
+ typename boost::enable_if<is_basic_path<Path>, void>::type
+ basic_ofstream<charT,traits>::open( const Path & file_ph,
+ std::ios_base::openmode mode )
+ {
+ std::basic_ofstream<charT,traits>::open(
+ detail::path_proxy( file_ph.external_file_string(),
+ mode ).c_str(), mode | std::ios_base::out );
+ }
+
+ template <class charT, class traits>
+ void basic_ofstream<charT,traits>::open( const wpath & file_ph,
+ std::ios_base::openmode mode )
+ {
+ std::basic_ofstream<charT,traits>::open(
+ detail::path_proxy( file_ph.external_file_string(),
+ mode ).c_str(), mode | std::ios_base::out );
+ }
+
+// basic_fstream definitions -----------------------------------------------//
+
+ template <class charT, class traits> template<class Path>
+ basic_fstream<charT,traits>::basic_fstream(const Path & file_ph,
+ typename boost::enable_if<is_basic_path<Path> >::type* )
+ : std::basic_fstream<charT,traits>(
+ detail::path_proxy( file_ph.external_file_string(),
+ std::ios_base::in|std::ios_base::out ).c_str(),
+ std::ios_base::in|std::ios_base::out ) {}
+
+ template <class charT, class traits>
+ basic_fstream<charT,traits>::basic_fstream( const wpath & file_ph )
+ : std::basic_fstream<charT,traits>(
+ detail::path_proxy( file_ph.external_file_string(),
+ std::ios_base::in|std::ios_base::out ).c_str(),
+ std::ios_base::in|std::ios_base::out ) {}
+
+ template <class charT, class traits> template<class Path>
+ basic_fstream<charT,traits>::basic_fstream( const Path & file_ph,
+ std::ios_base::openmode mode,
+ typename boost::enable_if<is_basic_path<Path> >::type* )
+ : std::basic_fstream<charT,traits>(
+ detail::path_proxy( file_ph.external_file_string(),
+ mode ).c_str(), mode | std::ios_base::in | std::ios_base::out ) {}
+
+ template <class charT, class traits>
+ basic_fstream<charT,traits>::basic_fstream( const wpath & file_ph,
+ std::ios_base::openmode mode )
+ : std::basic_fstream<charT,traits>(
+ detail::path_proxy( file_ph.external_file_string(),
+ mode ).c_str(), mode | std::ios_base::in | std::ios_base::out ) {}
+
+ template <class charT, class traits> template<class Path>
+ typename boost::enable_if<is_basic_path<Path>, void>::type
+ basic_fstream<charT,traits>::open( const Path & file_ph )
+ {
+ std::basic_fstream<charT,traits>::open(
+ detail::path_proxy( file_ph.external_file_string(),
+ std::ios_base::in|std::ios_base::out ).c_str(),
+ std::ios_base::in|std::ios_base::out );
+ }
+
+ template <class charT, class traits>
+ void basic_fstream<charT,traits>::open( const wpath & file_ph )
+ {
+ std::basic_fstream<charT,traits>::open(
+ detail::path_proxy( file_ph.external_file_string(),
+ std::ios_base::in|std::ios_base::out ).c_str(),
+ std::ios_base::in|std::ios_base::out );
+ }
+
+ template <class charT, class traits> template<class Path>
+ typename boost::enable_if<is_basic_path<Path>, void>::type
+ basic_fstream<charT,traits>::open( const Path & file_ph,
+ std::ios_base::openmode mode )
+ {
+ std::basic_fstream<charT,traits>::open(
+ detail::path_proxy( file_ph.external_file_string(),
+ mode ).c_str(), mode | std::ios_base::in | std::ios_base::out );
+ }
+
+ template <class charT, class traits>
+ void basic_fstream<charT,traits>::open( const wpath & file_ph,
+ std::ios_base::openmode mode )
+ {
+ std::basic_fstream<charT,traits>::open(
+ detail::path_proxy( file_ph.external_file_string(),
+ mode ).c_str(), mode | std::ios_base::in | std::ios_base::out );
+ }
+
+# endif
+
+# if !BOOST_WORKAROUND( BOOST_MSVC, <= 1200 ) // VC++ 6.0 can't handle this
+ template <class charT, class traits>
+ basic_filebuf<charT,traits> *
+ basic_filebuf<charT, traits>::open( const path & file_ph,
+ std::ios_base::openmode mode )
+ {
+ return std::basic_filebuf<charT,traits>::open(
+ file_ph.file_string().c_str(), mode ) == 0 ? 0 : this;
+ }
+# endif
+
+ template <class charT, class traits>
+ basic_ifstream<charT,traits>::basic_ifstream( const path & file_ph )
+ : std::basic_ifstream<charT,traits>(
+ file_ph.file_string().c_str(), std::ios_base::in ) {}
+
+ template <class charT, class traits>
+ basic_ifstream<charT,traits>::basic_ifstream( const path & file_ph,
+ std::ios_base::openmode mode )
+ : std::basic_ifstream<charT,traits>(
+ file_ph.file_string().c_str(), mode ) {}
+
+# if !BOOST_WORKAROUND( BOOST_MSVC, <= 1200 ) // VC++ 6.0 can't handle this
+ template <class charT, class traits>
+ void basic_ifstream<charT,traits>::open( const path & file_ph )
+ {
+ std::basic_ifstream<charT,traits>::open(
+ file_ph.file_string().c_str(), std::ios_base::in );
+ }
+
+ template <class charT, class traits>
+ void basic_ifstream<charT,traits>::open( const path & file_ph,
+ std::ios_base::openmode mode )
+ {
+ std::basic_ifstream<charT,traits>::open(
+ file_ph.file_string().c_str(), mode );
+ }
+# endif
+
+ template <class charT, class traits>
+ basic_ofstream<charT,traits>::basic_ofstream( const path & file_ph )
+ : std::basic_ofstream<charT,traits>(
+ file_ph.file_string().c_str(), std::ios_base::out ) {}
+
+ template <class charT, class traits>
+ basic_ofstream<charT,traits>::basic_ofstream( const path & file_ph,
+ std::ios_base::openmode mode )
+ : std::basic_ofstream<charT,traits>(
+ file_ph.file_string().c_str(), mode ) {}
+
+# if !BOOST_WORKAROUND( BOOST_MSVC, <= 1200 ) // VC++ 6.0 can't handle this
+ template <class charT, class traits>
+ void basic_ofstream<charT,traits>::open( const path & file_ph )
+ {
+ std::basic_ofstream<charT,traits>::open(
+ file_ph.file_string().c_str(), std::ios_base::out );
+ }
+
+ template <class charT, class traits>
+ void basic_ofstream<charT,traits>::open( const path & file_ph,
+ std::ios_base::openmode mode )
+ {
+ std::basic_ofstream<charT,traits>::open(
+ file_ph.file_string().c_str(), mode );
+ }
+# endif
+
+ template <class charT, class traits>
+ basic_fstream<charT,traits>::basic_fstream( const path & file_ph )
+ : std::basic_fstream<charT,traits>(
+ file_ph.file_string().c_str(),
+ std::ios_base::in|std::ios_base::out ) {}
+
+
+ template <class charT, class traits>
+ basic_fstream<charT,traits>::basic_fstream( const path & file_ph,
+ std::ios_base::openmode mode )
+ : std::basic_fstream<charT,traits>(
+ file_ph.file_string().c_str(), mode ) {}
+
+# if !BOOST_WORKAROUND( BOOST_MSVC, <= 1200 ) // VC++ 6.0 can't handle this
+ template <class charT, class traits>
+ void basic_fstream<charT,traits>::open( const path & file_ph )
+ {
+ std::basic_fstream<charT,traits>::open(
+ file_ph.file_string().c_str(), std::ios_base::in|std::ios_base::out );
+ }
+
+ template <class charT, class traits>
+ void basic_fstream<charT,traits>::open( const path & file_ph,
+ std::ios_base::openmode mode )
+ {
+ std::basic_fstream<charT,traits>::open(
+ file_ph.file_string().c_str(), mode );
+ }
+# endif
+ } // namespace filesystem
+} // namespace boost
+
+#include <boost/config/abi_suffix.hpp> // pops abi_prefix.hpp pragmas
+#endif // BOOST_FILESYSTEM_FSTREAM_HPP
diff --git a/boost/boost/filesystem/operations.hpp b/boost/boost/filesystem/operations.hpp
new file mode 100644
index 00000000000..a5daa9d6cb0
--- /dev/null
+++ b/boost/boost/filesystem/operations.hpp
@@ -0,0 +1,1099 @@
+// boost/filesystem/operations.hpp -----------------------------------------//
+
+// Copyright 2002-2005 Beman Dawes
+// Copyright 2002 Jan Langer
+// Copyright 2001 Dietmar Kuehl
+//
+// Use, modification, and distribution is 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)
+
+// See library home page at http://www.boost.org/libs/filesystem
+
+//----------------------------------------------------------------------------//
+
+#ifndef BOOST_FILESYSTEM_OPERATIONS_HPP
+#define BOOST_FILESYSTEM_OPERATIONS_HPP
+
+#include <boost/filesystem/path.hpp> // includes <boost/filesystem/config.hpp>
+
+#include <boost/shared_ptr.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/iterator.hpp>
+#include <boost/cstdint.hpp>
+#include <boost/assert.hpp>
+
+#include <string>
+#include <utility> // for pair
+#include <ctime>
+
+#ifdef BOOST_WINDOWS_API
+# include <fstream>
+# if !defined(_WIN32_WINNT) || _WIN32_WINNT >= 0x0500
+# define BOOST_FS_HARD_LINK // Default for Windows 2K or later
+# endif
+#endif
+
+#include <boost/config/abi_prefix.hpp> // must be the last #include
+
+# ifdef BOOST_NO_STDC_NAMESPACE
+ namespace std { using ::time_t; }
+# endif
+
+# ifndef BOOST_FILESYSTEM_NARROW_ONLY
+# define BOOST_FS_FUNC(BOOST_FS_TYPE) \
+ template<class Path> typename boost::enable_if<is_basic_path<Path>, \
+ BOOST_FS_TYPE>::type
+# define BOOST_INLINE_FS_FUNC(BOOST_FS_TYPE) \
+ template<class Path> inline typename boost::enable_if<is_basic_path<Path>, \
+ BOOST_FS_TYPE>::type
+# define BOOST_FS_TYPENAME typename
+# else
+# define BOOST_FS_FUNC(BOOST_FS_TYPE) inline BOOST_FS_TYPE
+# define BOOST_INLINE_FS_FUNC(BOOST_FS_TYPE) inline BOOST_FS_TYPE
+ typedef boost::filesystem::path Path;
+# define BOOST_FS_TYPENAME
+# endif
+
+//----------------------------------------------------------------------------//
+
+namespace boost
+{
+ namespace filesystem
+ {
+ template<class Path> class basic_directory_iterator;
+
+ // BOOST_FILESYSTEM_NARROW_ONLY needs this:
+ typedef basic_directory_iterator<path> directory_iterator;
+
+ template<class Path> class basic_directory_entry;
+
+ enum file_type
+ {
+ status_unknown,
+ file_not_found,
+ regular_file,
+ directory_file,
+ // the following will never be reported by some operating or file systems
+ symlink_file,
+ block_file,
+ character_file,
+ fifo_file,
+ socket_file,
+ type_unknown // file does exist, but isn't one of the above types
+ };
+
+ class file_status
+ {
+ public:
+ explicit file_status( file_type v = status_unknown ) : m_value(v) {}
+
+ void type( file_type v ) { m_value = v; }
+ file_type type() const { return m_value; }
+
+ private:
+ // the internal representation is unspecified so that additional state
+ // information such as permissions can be added in the future; this
+ // implementation just uses status_type as the internal representation
+
+ file_type m_value;
+ };
+
+ inline bool status_known( file_status f ) { return f.type() != status_unknown; }
+ inline bool exists( file_status f ) { return f.type() != status_unknown && f.type() != file_not_found; }
+ inline bool is_regular( file_status f ) { return f.type() == regular_file; }
+ inline bool is_directory( file_status f ) { return f.type() == directory_file; }
+ inline bool is_symlink( file_status f ) { return f.type() == symlink_file; }
+ inline bool is_other( file_status f ) { return exists(f) && !is_regular(f) && !is_directory(f) && !is_symlink(f); }
+
+ struct space_info
+ {
+ // all values are byte counts
+ boost::uintmax_t capacity;
+ boost::uintmax_t free; // <= capacity
+ boost::uintmax_t available; // <= free
+ };
+
+ namespace detail
+ {
+ typedef std::pair< boost::filesystem::system_error_type, bool >
+ query_pair;
+
+ typedef std::pair< boost::filesystem::system_error_type, boost::uintmax_t >
+ uintmax_pair;
+
+ typedef std::pair< boost::filesystem::system_error_type, std::time_t >
+ time_pair;
+
+ typedef std::pair< boost::filesystem::system_error_type, space_info >
+ space_pair;
+
+ template< class Path >
+ struct directory_pair
+ {
+ typedef std::pair< boost::filesystem::system_error_type,
+ typename Path::external_string_type > type;
+ };
+
+# ifndef BOOST_FILESYSTEM_NO_DEPRECATED
+ BOOST_FILESYSTEM_DECL bool
+ symbolic_link_exists_api( const std::string & ); // deprecated
+# endif
+
+ BOOST_FILESYSTEM_DECL file_status
+ status_api( const std::string & ph, system_error_type & ec );
+# ifndef BOOST_WINDOWS_API
+ BOOST_FILESYSTEM_DECL file_status
+ symlink_status_api( const std::string & ph, system_error_type & ec );
+# endif
+ BOOST_FILESYSTEM_DECL query_pair
+ is_empty_api( const std::string & ph );
+ BOOST_FILESYSTEM_DECL query_pair
+ equivalent_api( const std::string & ph1, const std::string & ph2 );
+ BOOST_FILESYSTEM_DECL uintmax_pair
+ file_size_api( const std::string & ph );
+ BOOST_FILESYSTEM_DECL space_pair
+ space_api( const std::string & ph );
+ BOOST_FILESYSTEM_DECL time_pair
+ last_write_time_api( const std::string & ph );
+ BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ last_write_time_api( const std::string & ph, std::time_t new_value );
+ BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ get_current_path_api( std::string & ph );
+ BOOST_FILESYSTEM_DECL query_pair
+ create_directory_api( const std::string & ph );
+ BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ create_hard_link_api( const std::string & to_ph,
+ const std::string & from_ph );
+ BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ create_symlink_api( const std::string & to_ph,
+ const std::string & from_ph );
+ BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ remove_api( const std::string & ph );
+ BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ rename_api( const std::string & from, const std::string & to );
+ BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ copy_file_api( const std::string & from, const std::string & to );
+
+# if defined(BOOST_WINDOWS_API)
+
+ BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ get_full_path_name_api( const std::string & ph, std::string & target );
+
+# if !defined(BOOST_FILESYSTEM_NARROW_ONLY)
+
+ BOOST_FILESYSTEM_DECL boost::filesystem::file_status
+ status_api( const std::wstring & ph, system_error_type & ec );
+ BOOST_FILESYSTEM_DECL query_pair
+ is_empty_api( const std::wstring & ph );
+ BOOST_FILESYSTEM_DECL query_pair
+ equivalent_api( const std::wstring & ph1, const std::wstring & ph2 );
+ BOOST_FILESYSTEM_DECL uintmax_pair
+ file_size_api( const std::wstring & ph );
+ BOOST_FILESYSTEM_DECL space_pair
+ space_api( const std::wstring & ph );
+ BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ get_full_path_name_api( const std::wstring & ph, std::wstring & target );
+ BOOST_FILESYSTEM_DECL time_pair
+ last_write_time_api( const std::wstring & ph );
+ BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ last_write_time_api( const std::wstring & ph, std::time_t new_value );
+ BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ get_current_path_api( std::wstring & ph );
+ BOOST_FILESYSTEM_DECL query_pair
+ create_directory_api( const std::wstring & ph );
+# ifdef BOOST_FS_HARD_LINK
+ BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ create_hard_link_api( const std::wstring & existing_ph,
+ const std::wstring & new_ph );
+# endif
+ BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ create_symlink_api( const std::wstring & to_ph,
+ const std::wstring & from_ph );
+ BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ remove_api( const std::wstring & ph );
+ BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ rename_api( const std::wstring & from, const std::wstring & to );
+ BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ copy_file_api( const std::wstring & from, const std::wstring & to );
+
+# endif
+# endif
+
+ template<class Path>
+ unsigned long remove_all_aux( const Path & ph );
+
+ } // namespace detail
+
+// operations functions ----------------------------------------------------//
+
+ // The non-template overloads enable automatic conversion from std and
+ // C-style strings. See basic_path constructors. The enable_if for the
+ // templates implements the famous "do-the-right-thing" rule.
+
+// query functions ---------------------------------------------------------//
+
+ BOOST_INLINE_FS_FUNC(file_status)
+ status( const Path & ph, system_error_type & ec )
+ { return detail::status_api( ph.external_file_string(), ec ); }
+
+ BOOST_FS_FUNC(file_status)
+ status( const Path & ph )
+ {
+ system_error_type ec;
+ file_status result( detail::status_api( ph.external_file_string(), ec ) );
+ if ( ec )
+ boost::throw_exception( basic_filesystem_error<Path>(
+ "boost::filesystem::status", ph, ec ) );
+ return result;
+ }
+
+ BOOST_INLINE_FS_FUNC(file_status)
+ symlink_status( const Path & ph, system_error_type & ec )
+# ifdef BOOST_WINDOWS_API
+ { return detail::status_api( ph.external_file_string(), ec ); }
+# else
+ { return detail::symlink_status_api( ph.external_file_string(), ec ); }
+# endif
+
+ BOOST_FS_FUNC(file_status)
+ symlink_status( const Path & ph )
+ {
+ system_error_type ec;
+ file_status result( symlink_status( ph, ec ) );
+ if ( ec )
+ boost::throw_exception( basic_filesystem_error<Path>(
+ "boost::filesystem::symlink_status", ph, ec ) );
+ return result;
+ }
+
+# ifndef BOOST_FILESYSTEM_NO_DEPRECATED
+ inline bool symbolic_link_exists( const path & ph )
+ { return is_symlink( symlink_status(ph) ); }
+#endif
+
+ BOOST_FS_FUNC(bool) exists( const Path & ph )
+ {
+ system_error_type ec;
+ file_status result( detail::status_api( ph.external_file_string(), ec ) );
+ if ( ec )
+ boost::throw_exception( basic_filesystem_error<Path>(
+ "boost::filesystem::exists", ph, ec ) );
+ return exists( result );
+ }
+
+ BOOST_FS_FUNC(bool) is_directory( const Path & ph )
+ {
+ system_error_type ec;
+ file_status result( detail::status_api( ph.external_file_string(), ec ) );
+ if ( ec )
+ boost::throw_exception( basic_filesystem_error<Path>(
+ "boost::filesystem::is_directory", ph, ec ) );
+ return is_directory( result );
+ }
+
+ BOOST_FS_FUNC(bool) is_regular( const Path & ph )
+ {
+ system_error_type ec;
+ file_status result( detail::status_api( ph.external_file_string(), ec ) );
+ if ( ec )
+ boost::throw_exception( basic_filesystem_error<Path>(
+ "boost::filesystem::is_regular", ph, ec ) );
+ return is_regular( result );
+ }
+
+ BOOST_FS_FUNC(bool) is_other( const Path & ph )
+ {
+ system_error_type ec;
+ file_status result( detail::status_api( ph.external_file_string(), ec ) );
+ if ( ec )
+ boost::throw_exception( basic_filesystem_error<Path>(
+ "boost::filesystem::is_other", ph, ec ) );
+ return is_other( result );
+ }
+
+ BOOST_FS_FUNC(bool) is_symlink(
+# ifdef BOOST_WINDOWS_API
+ const Path & )
+ {
+ return false;
+# else
+ const Path & ph)
+ {
+ system_error_type ec;
+ file_status result( detail::symlink_status_api( ph.external_file_string(), ec ) );
+ if ( ec )
+ boost::throw_exception( basic_filesystem_error<Path>(
+ "boost::filesystem::is_symlink", ph, ec ) );
+ return is_symlink( result );
+# endif
+ }
+
+ // VC++ 7.0 and earlier has a serious namespace bug that causes a clash
+ // between boost::filesystem::is_empty and the unrelated type trait
+ // boost::is_empty.
+
+# if !defined( BOOST_MSVC ) || BOOST_MSVC > 1300
+ BOOST_FS_FUNC(bool) is_empty( const Path & ph )
+# else
+ BOOST_FS_FUNC(bool) _is_empty( const Path & ph )
+# endif
+ {
+ detail::query_pair result = detail::is_empty_api( ph.external_file_string() );
+ if ( result.first != 0 )
+ boost::throw_exception( basic_filesystem_error<Path>(
+ "boost::filesystem::is_empty", ph, result.first ) );
+ return result.second;
+ }
+
+ BOOST_FS_FUNC(bool) equivalent( const Path & ph1, const Path & ph2 )
+ {
+ detail::query_pair result = detail::equivalent_api(
+ ph1.external_file_string(), ph2.external_file_string() );
+ if ( result.first != 0 )
+ boost::throw_exception( basic_filesystem_error<Path>(
+ "boost::filesystem::equivalent", ph1, ph2, result.first ) );
+ return result.second;
+ }
+
+ BOOST_FS_FUNC(boost::uintmax_t) file_size( const Path & ph )
+ {
+ detail::uintmax_pair result
+ = detail::file_size_api( ph.external_file_string() );
+ if ( result.first != 0 )
+ boost::throw_exception( basic_filesystem_error<Path>(
+ "boost::filesystem::file_size", ph, result.first ) );
+ return result.second;
+ }
+
+ BOOST_FS_FUNC(space_info) space( const Path & ph )
+ {
+ detail::space_pair result
+ = detail::space_api( ph.external_file_string() );
+ if ( result.first != 0 )
+ boost::throw_exception( basic_filesystem_error<Path>(
+ "boost::filesystem::space", ph, result.first ) );
+ return result.second;
+ }
+
+ BOOST_FS_FUNC(std::time_t) last_write_time( const Path & ph )
+ {
+ detail::time_pair result
+ = detail::last_write_time_api( ph.external_file_string() );
+ if ( result.first != 0 )
+ boost::throw_exception( basic_filesystem_error<Path>(
+ "boost::filesystem::last_write_time", ph, result.first ) );
+ return result.second;
+ }
+
+
+// operations --------------------------------------------------------------//
+
+ BOOST_FS_FUNC(bool) create_directory( const Path & dir_ph )
+ {
+ detail::query_pair result(
+ detail::create_directory_api( dir_ph.external_directory_string() ) );
+ if ( result.first != 0 )
+ boost::throw_exception( basic_filesystem_error<Path>(
+ "boost::filesystem::create_directory",
+ dir_ph, result.first ) );
+ return result.second;
+ }
+
+#if !defined(BOOST_WINDOWS_API) || defined(BOOST_FS_HARD_LINK)
+ BOOST_FS_FUNC(void)
+ create_hard_link( const Path & to_ph, const Path & from_ph )
+ {
+ system_error_type result(
+ detail::create_hard_link_api(
+ to_ph.external_file_string(),
+ from_ph.external_file_string() ) );
+ if ( result != 0 )
+ boost::throw_exception( basic_filesystem_error<Path>(
+ "boost::filesystem::create_hard_link",
+ to_ph, from_ph, result ) );
+ }
+
+ BOOST_FS_FUNC(system_error_type)
+ create_hard_link( const Path & to_ph, const Path & from_ph,
+ system_error_type & ec )
+ {
+ ec = detail::create_hard_link_api(
+ to_ph.external_file_string(),
+ from_ph.external_file_string() );
+ return ec;
+ }
+#endif
+
+ BOOST_FS_FUNC(void)
+ create_symlink( const Path & to_ph, const Path & from_ph )
+ {
+ system_error_type result(
+ detail::create_symlink_api(
+ to_ph.external_file_string(),
+ from_ph.external_file_string() ) );
+ if ( result )
+ boost::throw_exception( basic_filesystem_error<Path>(
+ "boost::filesystem::create_symlink",
+ to_ph, from_ph, result ) );
+ }
+
+ BOOST_FS_FUNC(system_error_type)
+ create_symlink( const Path & to_ph, const Path & from_ph,
+ system_error_type & ec )
+ {
+ ec = detail::create_symlink_api(
+ to_ph.external_file_string(),
+ from_ph.external_file_string() );
+ return ec;
+ }
+
+ BOOST_FS_FUNC(bool) remove( const Path & ph )
+ {
+ if ( exists( ph )
+ || is_symlink( ph ) ) // handle dangling symbolic links
+ // note that the POSIX behavior for symbolic links is what we want;
+ // the link rather than what it points to is deleted. Windows behavior
+ // doesn't matter; is_symlink() is always false on Windows.
+ {
+ system_error_type result = detail::remove_api( ph.external_file_string() );
+ if ( result != 0 )
+ boost::throw_exception( basic_filesystem_error<Path>(
+ "boost::filesystem::remove",
+ ph, result ) );
+ return true;
+ }
+ return false;
+ }
+
+ BOOST_FS_FUNC(unsigned long) remove_all( const Path & ph )
+ {
+ return exists( ph )|| is_symlink( ph )
+ ? detail::remove_all_aux( ph ) : 0;
+ }
+
+ BOOST_FS_FUNC(void) rename( const Path & from_path, const Path & to_path )
+ {
+ system_error_type result = detail::rename_api(
+ from_path.external_directory_string(),
+ to_path.external_directory_string() );
+ if ( result != 0 )
+ boost::throw_exception( basic_filesystem_error<Path>(
+ "boost::filesystem::rename",
+ from_path, to_path, result ) );
+ }
+
+ BOOST_FS_FUNC(void) copy_file( const Path & from_path, const Path & to_path )
+ {
+ system_error_type result = detail::copy_file_api(
+ from_path.external_directory_string(),
+ to_path.external_directory_string() );
+ if ( result != 0 )
+ boost::throw_exception( basic_filesystem_error<Path>(
+ "boost::filesystem::copy_file",
+ from_path, to_path, result ) );
+ }
+
+ template< class Path >
+ Path current_path()
+ {
+ typename Path::external_string_type ph;
+ boost::filesystem::system_error_type result;
+ if ( (result = detail::get_current_path_api( ph )) != 0 )
+ boost::throw_exception( basic_filesystem_error<Path>(
+ "boost::filesystem::current_path", result ) );
+ return Path( Path::traits_type::to_internal( ph ) );
+ }
+
+ template< class Path >
+ const Path & initial_path()
+ {
+ static Path init_path;
+ if ( init_path.empty() ) init_path = current_path<Path>();
+ return init_path;
+ }
+
+# ifndef BOOST_FILESYSTEM_NO_DEPRECATED
+ // legacy support
+ inline path current_path() // overload supports pre-i18n apps
+ { return current_path<boost::filesystem::path>(); }
+ inline const path & initial_path() // overload supports pre-i18n apps
+ { return initial_path<boost::filesystem::path>(); }
+# endif
+
+ BOOST_FS_FUNC(Path) system_complete( const Path & ph )
+ {
+# ifdef BOOST_WINDOWS_API
+ if ( ph.empty() ) return ph;
+ BOOST_FS_TYPENAME Path::external_string_type sys_ph;
+ boost::filesystem::system_error_type result;
+ if ( (result = detail::get_full_path_name_api( ph.external_file_string(),
+ sys_ph )) != 0 )
+ boost::throw_exception( basic_filesystem_error<Path>(
+ "boost::filesystem::system_complete", ph, result ) );
+ return Path( Path::traits_type::to_internal( sys_ph ) );
+# else
+ return (ph.empty() || ph.is_complete())
+ ? ph : current_path<Path>() / ph;
+# endif
+ }
+
+ BOOST_FS_FUNC(Path)
+ complete( const Path & ph,
+ const Path & base/* = initial_path<Path>() */)
+ {
+ BOOST_ASSERT( base.is_complete()
+ && (ph.is_complete() || !ph.has_root_name())
+ && "boost::filesystem::complete() precondition not met" );
+# ifdef BOOST_WINDOWS_PATH
+ if (ph.empty() || ph.is_complete()) return ph;
+ if ( !ph.has_root_name() )
+ return ph.has_root_directory()
+ ? Path( base.root_name() ) / ph
+ : base / ph;
+ return base / ph;
+# else
+ return (ph.empty() || ph.is_complete()) ? ph : base / ph;
+# endif
+ }
+
+ // VC++ 7.1 had trouble with default arguments, so separate one argument
+ // signatures are provided as workarounds; the effect is the same.
+ BOOST_FS_FUNC(Path) complete( const Path & ph )
+ { return complete( ph, initial_path<Path>() ); }
+
+ BOOST_FS_FUNC(void)
+ last_write_time( const Path & ph, const std::time_t new_time )
+ {
+ boost::filesystem::system_error_type result;
+ if ( (result = detail::last_write_time_api( ph.external_file_string(),
+ new_time )) != 0 )
+ boost::throw_exception( basic_filesystem_error<Path>(
+ "boost::filesystem::last_write_time", ph, result ) );
+ }
+
+# ifndef BOOST_FILESYSTEM_NARROW_ONLY
+
+ // "do-the-right-thing" overloads ---------------------------------------//
+
+ inline file_status status( const path & ph )
+ { return status<path>( ph ); }
+ inline file_status status( const wpath & ph )
+ { return status<wpath>( ph ); }
+
+ inline file_status status( const path & ph, system_error_type & ec )
+ { return status<path>( ph, ec ); }
+ inline file_status status( const wpath & ph, system_error_type & ec )
+ { return status<wpath>( ph, ec ); }
+
+ inline file_status symlink_status( const path & ph )
+ { return symlink_status<path>( ph ); }
+ inline file_status symlink_status( const wpath & ph )
+ { return symlink_status<wpath>( ph ); }
+
+ inline file_status symlink_status( const path & ph, system_error_type & ec )
+ { return symlink_status<path>( ph, ec ); }
+ inline file_status symlink_status( const wpath & ph, system_error_type & ec )
+ { return symlink_status<wpath>( ph, ec ); }
+
+ inline bool exists( const path & ph ) { return exists<path>( ph ); }
+ inline bool exists( const wpath & ph ) { return exists<wpath>( ph ); }
+
+ inline bool is_directory( const path & ph )
+ { return is_directory<path>( ph ); }
+ inline bool is_directory( const wpath & ph )
+ { return is_directory<wpath>( ph ); }
+
+ inline bool is_regular( const path & ph )
+ { return is_regular<path>( ph ); }
+ inline bool is_regular( const wpath & ph )
+ { return is_regular<wpath>( ph ); }
+
+ inline bool is_other( const path & ph )
+ { return is_other<path>( ph ); }
+ inline bool is_other( const wpath & ph )
+ { return is_other<wpath>( ph ); }
+
+ inline bool is_symlink( const path & ph )
+ { return is_symlink<path>( ph ); }
+ inline bool is_symlink( const wpath & ph )
+ { return is_symlink<wpath>( ph ); }
+
+ inline bool is_empty( const path & ph )
+ { return is_empty<path>( ph ); }
+ inline bool is_empty( const wpath & ph )
+ { return is_empty<wpath>( ph ); }
+
+ inline bool equivalent( const path & ph1, const path & ph2 )
+ { return equivalent<path>( ph1, ph2 ); }
+ inline bool equivalent( const wpath & ph1, const wpath & ph2 )
+ { return equivalent<wpath>( ph1, ph2 ); }
+
+ inline boost::uintmax_t file_size( const path & ph )
+ { return file_size<path>( ph ); }
+ inline boost::uintmax_t file_size( const wpath & ph )
+ { return file_size<wpath>( ph ); }
+
+ inline space_info space( const path & ph )
+ { return space<path>( ph ); }
+ inline space_info space( const wpath & ph )
+ { return space<wpath>( ph ); }
+
+ inline std::time_t last_write_time( const path & ph )
+ { return last_write_time<path>( ph ); }
+ inline std::time_t last_write_time( const wpath & ph )
+ { return last_write_time<wpath>( ph ); }
+
+ inline bool create_directory( const path & dir_ph )
+ { return create_directory<path>( dir_ph ); }
+ inline bool create_directory( const wpath & dir_ph )
+ { return create_directory<wpath>( dir_ph ); }
+
+#if !defined(BOOST_WINDOWS_API) || defined(BOOST_FS_HARD_LINK)
+ inline void create_hard_link( const path & to_ph,
+ const path & from_ph )
+ { return create_hard_link<path>( to_ph, from_ph ); }
+ inline void create_hard_link( const wpath & to_ph,
+ const wpath & from_ph )
+ { return create_hard_link<wpath>( to_ph, from_ph ); }
+
+ inline system_error_type create_hard_link( const path & to_ph,
+ const path & from_ph, system_error_type & ec )
+ { return create_hard_link<path>( to_ph, from_ph, ec ); }
+ inline system_error_type create_hard_link( const wpath & to_ph,
+ const wpath & from_ph, system_error_type & ec )
+ { return create_hard_link<wpath>( to_ph, from_ph, ec ); }
+#endif
+
+ inline void create_symlink( const path & to_ph,
+ const path & from_ph )
+ { return create_symlink<path>( to_ph, from_ph ); }
+ inline void create_symlink( const wpath & to_ph,
+ const wpath & from_ph )
+ { return create_symlink<wpath>( to_ph, from_ph ); }
+
+ inline system_error_type create_symlink( const path & to_ph,
+ const path & from_ph, system_error_type & ec )
+ { return create_symlink<path>( to_ph, from_ph, ec ); }
+ inline system_error_type create_symlink( const wpath & to_ph,
+ const wpath & from_ph, system_error_type & ec )
+ { return create_symlink<wpath>( to_ph, from_ph, ec ); }
+
+ inline bool remove( const path & ph )
+ { return remove<path>( ph ); }
+ inline bool remove( const wpath & ph )
+ { return remove<wpath>( ph ); }
+
+ inline unsigned long remove_all( const path & ph )
+ { return remove_all<path>( ph ); }
+ inline unsigned long remove_all( const wpath & ph )
+ { return remove_all<wpath>( ph ); }
+
+ inline void rename( const path & from_path, const path & to_path )
+ { return rename<path>( from_path, to_path ); }
+ inline void rename( const wpath & from_path, const wpath & to_path )
+ { return rename<wpath>( from_path, to_path ); }
+
+ inline void copy_file( const path & from_path, const path & to_path )
+ { return copy_file<path>( from_path, to_path ); }
+ inline void copy_file( const wpath & from_path, const wpath & to_path )
+ { return copy_file<wpath>( from_path, to_path ); }
+
+ inline path system_complete( const path & ph )
+ { return system_complete<path>( ph ); }
+ inline wpath system_complete( const wpath & ph )
+ { return system_complete<wpath>( ph ); }
+
+ inline path complete( const path & ph,
+ const path & base/* = initial_path<path>()*/ )
+ { return complete<path>( ph, base ); }
+ inline wpath complete( const wpath & ph,
+ const wpath & base/* = initial_path<wpath>()*/ )
+ { return complete<wpath>( ph, base ); }
+
+ inline path complete( const path & ph )
+ { return complete<path>( ph, initial_path<path>() ); }
+ inline wpath complete( const wpath & ph )
+ { return complete<wpath>( ph, initial_path<wpath>() ); }
+
+ inline void last_write_time( const path & ph, const std::time_t new_time )
+ { last_write_time<path>( ph, new_time ); }
+ inline void last_write_time( const wpath & ph, const std::time_t new_time )
+ { last_write_time<wpath>( ph, new_time ); }
+
+# endif // BOOST_FILESYSTEM_NARROW_ONLY
+
+ namespace detail
+ {
+ template<class Path>
+ unsigned long remove_all_aux( const Path & ph )
+ {
+ static const boost::filesystem::basic_directory_iterator<Path> end_itr;
+ unsigned long count = 1;
+ if ( !boost::filesystem::is_symlink( ph ) // don't recurse symbolic links
+ && boost::filesystem::is_directory( ph ) )
+ {
+ for ( boost::filesystem::basic_directory_iterator<Path> itr( ph );
+ itr != end_itr; ++itr )
+ {
+ count += remove_all_aux( itr->path() );
+ }
+ }
+ boost::filesystem::remove( ph );
+ return count;
+ }
+
+// test helper -------------------------------------------------------------//
+
+ // not part of the documented interface because false positives are possible;
+ // there is no law that says that an OS that has large stat.st_size
+ // actually supports large file sizes.
+ BOOST_FILESYSTEM_DECL bool possible_large_file_size_support();
+
+// directory_iterator helpers ----------------------------------------------//
+
+// forwarding functions avoid need for BOOST_FILESYSTEM_DECL for class
+// basic_directory_iterator, and so avoid iterator_facade DLL template
+// problems. They also overload to the proper external path character type.
+
+ BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ dir_itr_first( void *& handle,
+#if defined(BOOST_POSIX_API)
+ void *& buffer,
+#endif
+ const std::string & dir_path,
+ std::string & target, file_status & fs, file_status & symlink_fs );
+ // eof: return==0 && handle==0
+
+ BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ dir_itr_increment( void *& handle,
+#if defined(BOOST_POSIX_API)
+ void *& buffer,
+#endif
+ std::string & target, file_status & fs, file_status & symlink_fs );
+ // eof: return==0 && handle==0
+
+ BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ dir_itr_close( void *& handle
+#if defined(BOOST_POSIX_API)
+ , void *& buffer
+#endif
+ );
+ // Effects: none if handle==0, otherwise close handle, set handle=0
+
+# if defined(BOOST_WINDOWS_API) && !defined(BOOST_FILESYSTEM_NARROW_ONLY)
+ BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ dir_itr_first( void *& handle, const std::wstring & ph,
+ std::wstring & target, file_status & fs, file_status & symlink_fs );
+ BOOST_FILESYSTEM_DECL boost::filesystem::system_error_type
+ dir_itr_increment( void *& handle, std::wstring & target,
+ file_status & fs, file_status & symlink_fs );
+# endif
+
+ template< class Path >
+ class dir_itr_imp
+ {
+ public:
+ basic_directory_entry<Path> m_directory_entry;
+ void * m_handle;
+# ifdef BOOST_POSIX_API
+ void * m_buffer; // see dir_itr_increment implementation
+# endif
+ dir_itr_imp() : m_handle(0)
+# ifdef BOOST_POSIX_API
+ , m_buffer(0)
+# endif
+ {}
+
+ ~dir_itr_imp() { dir_itr_close( m_handle
+#if defined(BOOST_POSIX_API)
+ , m_buffer
+#endif
+ ); }
+ };
+
+ BOOST_FILESYSTEM_DECL extern system_error_type not_found_error;
+ } // namespace detail
+
+// basic_directory_iterator ------------------------------------------------//
+
+ template< class Path >
+ class basic_directory_iterator
+ : public boost::iterator_facade<
+ basic_directory_iterator<Path>,
+ basic_directory_entry<Path>,
+ boost::single_pass_traversal_tag >
+ {
+ public:
+ typedef Path path_type;
+
+ basic_directory_iterator(){} // creates the "end" iterator
+
+ explicit basic_directory_iterator( const Path & dir_path );
+ basic_directory_iterator( const Path & dir_path, system_error_type & ec );
+
+ private:
+
+ // shared_ptr provides shallow-copy semantics required for InputIterators.
+ // m_imp.get()==0 indicates the end iterator.
+ boost::shared_ptr< detail::dir_itr_imp< Path > > m_imp;
+
+ friend class boost::iterator_core_access;
+
+ typename boost::iterator_facade<
+ basic_directory_iterator<Path>,
+ basic_directory_entry<Path>,
+ boost::single_pass_traversal_tag >::reference dereference() const
+ {
+ BOOST_ASSERT( m_imp.get() && "attempt to dereference end iterator" );
+ return m_imp->m_directory_entry;
+ }
+
+ void increment();
+
+ bool equal( const basic_directory_iterator & rhs ) const
+ { return m_imp == rhs.m_imp; }
+
+ system_error_type m_init( const Path & dir_path );
+ };
+
+ typedef basic_directory_iterator< path > directory_iterator;
+# ifndef BOOST_FILESYSTEM_NARROW_ONLY
+ typedef basic_directory_iterator< wpath > wdirectory_iterator;
+# endif
+
+ // basic_directory_iterator implementation ---------------------------//
+
+ template<class Path>
+ system_error_type basic_directory_iterator<Path>::m_init(
+ const Path & dir_path )
+ {
+ if ( dir_path.empty() )
+ {
+ m_imp.reset();
+ return detail::not_found_error;
+ }
+ system_error_type sys_err;
+ typename Path::external_string_type name;
+ file_status fs, symlink_fs;
+
+ if ( (sys_err = detail::dir_itr_first( m_imp->m_handle,
+#if defined(BOOST_POSIX_API)
+ m_imp->m_buffer,
+#endif
+ dir_path.external_directory_string(),
+ name, fs, symlink_fs )) != 0 )
+ {
+ m_imp.reset();
+ return sys_err;
+ }
+
+ if ( m_imp->m_handle == 0 ) m_imp.reset(); // eof, so make end iterator
+ else // not eof
+ {
+ m_imp->m_directory_entry.assign( dir_path
+ / Path::traits_type::to_internal( name ), fs, symlink_fs );
+ if ( name[0] == dot<Path>::value // dot or dot-dot
+ && (name.size() == 1
+ || (name[1] == dot<Path>::value
+ && name.size() == 2)) )
+ { increment(); }
+ }
+ return 0;
+ }
+
+ template<class Path>
+ basic_directory_iterator<Path>::basic_directory_iterator(
+ const Path & dir_path )
+ : m_imp( new detail::dir_itr_imp<Path> )
+ {
+ system_error_type ec( m_init(dir_path) );
+ if ( ec != 0 )
+ {
+ boost::throw_exception( basic_filesystem_error<Path>(
+ "boost::filesystem::basic_directory_iterator constructor",
+ dir_path, ec ) );
+ }
+ }
+
+ template<class Path>
+ basic_directory_iterator<Path>::basic_directory_iterator(
+ const Path & dir_path, system_error_type & ec )
+ : m_imp( new detail::dir_itr_imp<Path> )
+ {
+ ec = m_init(dir_path);
+ }
+
+ template<class Path>
+ void basic_directory_iterator<Path>::increment()
+ {
+ BOOST_ASSERT( m_imp.get() && "attempt to increment end iterator" );
+ BOOST_ASSERT( m_imp->m_handle != 0 && "internal program error" );
+
+ system_error_type sys_err(0);
+ typename Path::external_string_type name;
+ file_status fs, symlink_fs;
+
+ for (;;)
+ {
+ if ( (sys_err = detail::dir_itr_increment( m_imp->m_handle,
+#if defined(BOOST_POSIX_API)
+ m_imp->m_buffer,
+#endif
+ name, fs, symlink_fs )) != 0 )
+ {
+ boost::throw_exception( basic_filesystem_error<Path>(
+ "boost::filesystem::basic_directory_iterator increment",
+ m_imp->m_directory_entry.path().branch_path(), sys_err ) );
+ }
+ if ( m_imp->m_handle == 0 ) { m_imp.reset(); return; } // eof, make end
+ if ( !(name[0] == dot<Path>::value // !(dot or dot-dot)
+ && (name.size() == 1
+ || (name[1] == dot<Path>::value
+ && name.size() == 2))) )
+ {
+ m_imp->m_directory_entry.replace_leaf(
+ Path::traits_type::to_internal( name ), fs, symlink_fs );
+ return;
+ }
+ }
+ }
+
+ // basic_directory_entry -----------------------------------------------//
+
+ template<class Path>
+ class basic_directory_entry
+ {
+ public:
+ typedef Path path_type;
+ typedef typename Path::string_type string_type;
+
+ // compiler generated copy-ctor, copy assignment, and destructor apply
+
+ basic_directory_entry() {}
+ explicit basic_directory_entry( const path_type & p,
+ file_status st = file_status(), file_status symlink_st=file_status() )
+ : m_path(p), m_status(st), m_symlink_status(symlink_st)
+ {}
+
+ void assign( const path_type & p,
+ file_status st, file_status symlink_st )
+ { m_path = p; m_status = st; m_symlink_status = symlink_st; }
+
+ void replace_leaf( const string_type & s,
+ file_status st, file_status symlink_st )
+ {
+ m_path.remove_leaf();
+ m_path /= s;
+ m_status = st;
+ m_symlink_status = symlink_st;
+ }
+
+ const Path & path() const { return m_path; }
+ file_status status() const;
+ file_status status( system_error_type & ec ) const;
+ file_status symlink_status() const;
+ file_status symlink_status( system_error_type & ec ) const;
+
+ // conversion simplifies the most common use of basic_directory_entry
+ operator const path_type &() const { return m_path; }
+
+# ifndef BOOST_FILESYSTEM_NO_DEPRECATED
+ // deprecated functions preserve common use cases in legacy code
+ typename Path::string_type leaf() const
+ {
+ return path().leaf();
+ }
+ typename Path::string_type string() const
+ {
+ return path().string();
+ }
+# endif
+
+ private:
+ path_type m_path;
+ mutable file_status m_status; // stat()-like
+ mutable file_status m_symlink_status; // lstat()-like
+ // note: m_symlink_status is not used by Windows implementation
+
+ }; // basic_directory_status
+
+ typedef basic_directory_entry<path> directory_entry;
+# ifndef BOOST_FILESYSTEM_NARROW_ONLY
+ typedef basic_directory_entry<wpath> wdirectory_entry;
+# endif
+
+ // basic_directory_entry implementation --------------------------------//
+
+ template<class Path>
+ file_status
+ basic_directory_entry<Path>::status() const
+ {
+ if ( !status_known( m_status ) )
+ {
+# ifndef BOOST_WINDOWS_API
+ if ( status_known( m_symlink_status )
+ && !is_symlink( m_symlink_status ) )
+ { m_status = m_symlink_status; }
+ else { m_status = boost::filesystem::status( m_path ); }
+# else
+ m_status = boost::filesystem::status( m_path );
+# endif
+ }
+ return m_status;
+ }
+
+ template<class Path>
+ file_status
+ basic_directory_entry<Path>::status( system_error_type & ec ) const
+ {
+ if ( !status_known( m_status ) )
+ {
+# ifndef BOOST_WINDOWS_API
+ if ( status_known( m_symlink_status )
+ && !is_symlink( m_symlink_status ) )
+ { ec = 0; m_status = m_symlink_status; }
+ else { m_status = boost::filesystem::status( m_path, ec ); }
+# else
+ m_status = boost::filesystem::status( m_path, ec );
+# endif
+ }
+ else ec = 0;
+ return m_status;
+ }
+
+ template<class Path>
+ file_status
+ basic_directory_entry<Path>::symlink_status() const
+ {
+# ifndef BOOST_WINDOWS_API
+ if ( !status_known( m_symlink_status ) )
+ { m_symlink_status = boost::filesystem::symlink_status( m_path ); }
+ return m_symlink_status;
+# else
+ return status();
+# endif
+ }
+
+ template<class Path>
+ file_status
+ basic_directory_entry<Path>::symlink_status( system_error_type & ec ) const
+ {
+# ifndef BOOST_WINDOWS_API
+ if ( !status_known( m_symlink_status ) )
+ { m_symlink_status = boost::filesystem::symlink_status( m_path, ec ); }
+ else ec = 0;
+ return m_symlink_status;
+# else
+ return status( ec );
+# endif
+ }
+ } // namespace filesystem
+} // namespace boost
+
+#undef BOOST_FS_FUNC
+
+
+#include <boost/config/abi_suffix.hpp> // pops abi_prefix.hpp pragmas
+#endif // BOOST_FILESYSTEM_OPERATIONS_HPP
diff --git a/boost/boost/filesystem/path.hpp b/boost/boost/filesystem/path.hpp
new file mode 100644
index 00000000000..c1d3aaef6e6
--- /dev/null
+++ b/boost/boost/filesystem/path.hpp
@@ -0,0 +1,1423 @@
+// boost/filesystem/path.hpp -----------------------------------------------//
+
+// Copyright Beman Dawes 2002-2005
+// Use, modification, and distribution is 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)
+
+// See library home page at http://www.boost.org/libs/filesystem
+
+//----------------------------------------------------------------------------//
+
+#ifndef BOOST_FILESYSTEM_PATH_HPP
+#define BOOST_FILESYSTEM_PATH_HPP
+
+#include <boost/filesystem/config.hpp>
+#include <boost/iterator/iterator_facade.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/shared_ptr.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/static_assert.hpp>
+
+#include <string>
+#include <algorithm> // for lexicographical_compare
+#include <iosfwd> // needed by basic_path inserter and extractor
+#include <stdexcept>
+#include <cassert>
+
+# ifndef BOOST_FILESYSTEM_NARROW_ONLY
+# include <locale>
+# endif
+
+#include <boost/config/abi_prefix.hpp> // must be the last #include
+
+//----------------------------------------------------------------------------//
+
+namespace boost
+{
+ namespace BOOST_FILESYSTEM_NAMESPACE
+ {
+ template<class String, class Traits> class basic_path;
+
+ struct path_traits;
+ typedef basic_path< std::string, path_traits > path;
+
+ struct path_traits
+ {
+ typedef std::string internal_string_type;
+ typedef std::string external_string_type;
+ static external_string_type to_external( const path &,
+ const internal_string_type & src ) { return src; }
+ static internal_string_type to_internal(
+ const external_string_type & src ) { return src; }
+ };
+
+# ifndef BOOST_FILESYSTEM_NARROW_ONLY
+
+ struct wpath_traits;
+
+ typedef basic_path< std::wstring, wpath_traits > wpath;
+
+ struct wpath_traits
+ {
+ typedef std::wstring internal_string_type;
+# ifdef BOOST_WINDOWS_API
+ typedef std::wstring external_string_type;
+ static external_string_type to_external( const wpath &,
+ const internal_string_type & src ) { return src; }
+ static internal_string_type to_internal(
+ const external_string_type & src ) { return src; }
+# else
+ typedef std::string external_string_type;
+ static external_string_type to_external( const wpath & ph,
+ const internal_string_type & src );
+ static internal_string_type to_internal(
+ const external_string_type & src );
+# endif
+ static void imbue( const std::locale & loc );
+ static bool imbue( const std::locale & loc, const std::nothrow_t & );
+ };
+
+# endif // ifndef BOOST_FILESYSTEM_NARROW_ONLY
+
+// error reporting support -------------------------------------------------//
+
+ typedef int errno_type; // determined by C standard
+
+# ifdef BOOST_WINDOWS_API
+ typedef unsigned system_error_type;
+
+ BOOST_FILESYSTEM_DECL
+ errno_type lookup_errno( system_error_type sys_err_code );
+# else
+ typedef int system_error_type;
+
+ inline errno_type lookup_errno( system_error_type sys_err_code )
+ { return sys_err_code; }
+# endif
+
+ // deprecated support for legacy function name
+ inline errno_type lookup_error_code( system_error_type sys_err_code )
+ { return lookup_errno( sys_err_code ); }
+
+ BOOST_FILESYSTEM_DECL
+ void system_message( system_error_type sys_err_code, std::string & target );
+ // Effects: appends error message to target
+
+# if defined(BOOST_WINDOWS_API) && !defined(BOOST_FILESYSTEM_NARROW_ONLY)
+ BOOST_FILESYSTEM_DECL void
+ system_message( system_error_type sys_err_code, std::wstring & target );
+# endif
+
+ // filesystem_error ----------------------------------------------------//
+
+ class filesystem_error : public std::runtime_error
+ // see http://www.boost.org/more/error_handling.html for design rationale
+ {
+ public:
+ filesystem_error()
+ : std::runtime_error("filesystem error"), m_sys_err(0) {}
+ explicit filesystem_error(
+ const std::string & what_arg, system_error_type sys_ec = 0 )
+ : std::runtime_error(what_arg), m_sys_err(sys_ec) {}
+
+ system_error_type system_error() const { return m_sys_err; }
+ // Note: system_error() == 0 implies a library (rather than system) error
+
+ private:
+ system_error_type m_sys_err;
+ };
+
+ // basic_filesystem_error ----------------------------------------------//
+
+ template<class Path>
+ class basic_filesystem_error : public filesystem_error
+ {
+ // see http://www.boost.org/more/error_handling.html for design rationale
+ public:
+ // compiler generates copy constructor and copy assignment
+
+ typedef Path path_type;
+
+ basic_filesystem_error( const std::string & what,
+ system_error_type sys_err_code );
+
+ basic_filesystem_error( const std::string & what,
+ const path_type & path1, system_error_type sys_err_code );
+
+ basic_filesystem_error( const std::string & what, const path_type & path1,
+ const path_type & path2, system_error_type sys_err_code );
+
+ ~basic_filesystem_error() throw() {}
+
+ const path_type & path1() const
+ {
+ static const path_type empty_path;
+ return m_imp_ptr.get() ? m_imp_ptr->m_path1 : empty_path ;
+ }
+ const path_type & path2() const
+ {
+ static const path_type empty_path;
+ return m_imp_ptr.get() ? m_imp_ptr->m_path2 : empty_path ;
+ }
+
+ private:
+ struct m_imp
+ {
+ path_type m_path1; // may be empty()
+ path_type m_path2; // may be empty()
+ };
+ boost::shared_ptr<m_imp> m_imp_ptr;
+ };
+
+ typedef basic_filesystem_error<path> filesystem_path_error;
+
+# ifndef BOOST_FILESYSTEM_NARROW_ONLY
+ typedef basic_filesystem_error<wpath> filesystem_wpath_error;
+# endif
+
+ // path traits ---------------------------------------------------------//
+
+ template<class Path> struct is_basic_path
+ { BOOST_STATIC_CONSTANT( bool, value = false ); };
+ template<> struct is_basic_path<path>
+ { BOOST_STATIC_CONSTANT( bool, value = true ); };
+# ifndef BOOST_FILESYSTEM_NARROW_ONLY
+ template<> struct is_basic_path<wpath>
+ { BOOST_STATIC_CONSTANT( bool, value = true ); };
+# endif
+
+ // these only have to be specialized if Path::string_type::value_type
+ // is not convertible from char
+ template<class Path> struct slash
+ { BOOST_STATIC_CONSTANT( char, value = '/' ); };
+
+ template<class Path> struct dot
+ { BOOST_STATIC_CONSTANT( char, value = '.' ); };
+
+ template<class Path> struct colon
+ { BOOST_STATIC_CONSTANT( char, value = ':' ); };
+
+# ifdef BOOST_WINDOWS_PATH
+ template<class Path> struct path_alt_separator
+ { BOOST_STATIC_CONSTANT( char, value = '\\' ); };
+# endif
+
+ // workaround for VC++ 7.0 and earlier issues with nested classes
+ namespace detail
+ {
+ template<class Path>
+ class iterator_helper
+ {
+ public:
+ typedef typename Path::iterator iterator;
+ static void do_increment( iterator & ph );
+ static void do_decrement( iterator & ph );
+ };
+ }
+
+ // basic_path ----------------------------------------------------------//
+
+ template<class String, class Traits>
+ class basic_path
+ {
+ // invariant: m_path valid according to the portable generic path grammar
+
+ // validate template arguments
+// TODO: get these working
+// BOOST_STATIC_ASSERT( ::boost::is_same<String,typename Traits::internal_string_type>::value );
+// BOOST_STATIC_ASSERT( ::boost::is_same<typename Traits::external_string_type,std::string>::value || ::boost::is_same<typename Traits::external_string_type,std::wstring>::value );
+
+ public:
+ // compiler generates copy constructor and copy assignment
+
+ typedef basic_path<String, Traits> path_type;
+ typedef String string_type;
+ typedef typename String::value_type value_type;
+ typedef Traits traits_type;
+ typedef typename Traits::external_string_type external_string_type;
+
+ // constructors/destructor
+ basic_path() {}
+ basic_path( const string_type & s ) { operator/=( s ); }
+ basic_path( const value_type * s ) { operator/=( s ); }
+# ifndef BOOST_NO_MEMBER_TEMPLATES
+ template <class InputIterator>
+ basic_path( InputIterator first, InputIterator last )
+ { append( first, last ); }
+# endif
+ ~basic_path() {}
+
+ // assignments
+ basic_path & operator=( const string_type & s )
+ {
+# if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, >= 310)
+ m_path.clear();
+# else
+ m_path.erase( m_path.begin(), m_path.end() );
+# endif
+ operator/=( s );
+ return *this;
+ }
+ basic_path & operator=( const value_type * s )
+ {
+# if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, >= 310)
+ m_path.clear();
+# else
+ m_path.erase( m_path.begin(), m_path.end() );
+# endif
+ operator/=( s );
+ return *this;
+ }
+# ifndef BOOST_NO_MEMBER_TEMPLATES
+ template <class InputIterator>
+ basic_path & assign( InputIterator first, InputIterator last )
+ { m_path.clear(); append( first, last ); return *this; }
+# endif
+
+ // modifiers
+ basic_path & operator/=( const basic_path & rhs ) { return operator /=( rhs.string().c_str() ); }
+ basic_path & operator/=( const string_type & rhs ) { return operator /=( rhs.c_str() ); }
+ basic_path & operator/=( const value_type * s );
+# ifndef BOOST_NO_MEMBER_TEMPLATES
+ template <class InputIterator>
+ basic_path & append( InputIterator first, InputIterator last );
+# endif
+
+ void swap( basic_path & rhs )
+ {
+ m_path.swap( rhs.m_path );
+# ifdef BOOST_CYGWIN_PATH
+ std::swap( m_cygwin_root, rhs.m_cygwin_root );
+# endif
+ }
+
+ basic_path & remove_leaf();
+
+ // observers
+ const string_type & string() const { return m_path; }
+ const string_type file_string() const;
+ const string_type directory_string() const { return file_string(); }
+
+ const external_string_type external_file_string() const { return Traits::to_external( *this, file_string() ); }
+ const external_string_type external_directory_string() const { return Traits::to_external( *this, directory_string() ); }
+
+ basic_path root_path() const;
+ string_type root_name() const;
+ string_type root_directory() const;
+ basic_path relative_path() const;
+ string_type leaf() const;
+ basic_path branch_path() const;
+
+ bool empty() const { return m_path.empty(); } // name consistent with std containers
+ bool is_complete() const;
+ bool has_root_path() const;
+ bool has_root_name() const;
+ bool has_root_directory() const;
+ bool has_relative_path() const { return !relative_path().empty(); }
+ bool has_leaf() const { return !m_path.empty(); }
+ bool has_branch_path() const { return !branch_path().empty(); }
+
+ // iterators
+ class iterator : public boost::iterator_facade<
+ iterator,
+ string_type const,
+ boost::bidirectional_traversal_tag >
+ {
+ private:
+ friend class boost::iterator_core_access;
+ friend class boost::BOOST_FILESYSTEM_NAMESPACE::basic_path<String, Traits>;
+
+ const string_type & dereference() const
+ { return m_name; }
+ bool equal( const iterator & rhs ) const
+ { return m_path_ptr == rhs.m_path_ptr && m_pos == rhs.m_pos; }
+
+ friend class boost::BOOST_FILESYSTEM_NAMESPACE::detail::iterator_helper<path_type>;
+
+ void increment()
+ {
+ boost::BOOST_FILESYSTEM_NAMESPACE::detail::iterator_helper<path_type>::do_increment(
+ *this );
+ }
+ void decrement()
+ {
+ boost::BOOST_FILESYSTEM_NAMESPACE::detail::iterator_helper<path_type>::do_decrement(
+ *this );
+ }
+
+ string_type m_name; // current element
+ const basic_path * m_path_ptr; // path being iterated over
+ typename string_type::size_type m_pos; // position of name in
+ // path_ptr->string(). The
+ // end() iterator is indicated by
+ // pos == path_ptr->m_path.size()
+ }; // iterator
+
+ typedef iterator const_iterator;
+
+ iterator begin() const;
+ iterator end() const;
+
+ private:
+ // Note: This is an implementation for POSIX and Windows, where there
+ // are only minor differences between generic and native path grammars.
+ // Private members might be quite different in other implementations,
+ // particularly where there were wide differences between portable and
+ // native path formats, or between file_string() and
+ // directory_string() formats, or simply that the implementation
+ // was willing expend additional memory to achieve greater speed for
+ // some operations at the expense of other operations.
+
+ string_type m_path; // invariant: portable path grammar
+ // on Windows, backslashes converted to slashes
+
+# ifdef BOOST_CYGWIN_PATH
+ bool m_cygwin_root; // if present, m_path[0] was slash. note: initialization
+ // done by append
+# endif
+
+ void m_append_separator_if_needed();
+ void m_append( value_type value ); // converts Windows alt_separator
+
+ // Was qualified; como433beta8 reports:
+ // warning #427-D: qualified name is not allowed in member declaration
+ friend class iterator;
+ friend class boost::BOOST_FILESYSTEM_NAMESPACE::detail::iterator_helper<path_type>;
+
+ // Deprecated features ease transition for existing code. Don't use these
+ // in new code.
+# ifndef BOOST_FILESYSTEM_NO_DEPRECATED
+ public:
+ typedef bool (*name_check)( const std::string & name );
+ basic_path( const string_type & str, name_check ) { operator/=( str ); }
+ basic_path( const typename string_type::value_type * s, name_check )
+ { operator/=( s );}
+ string_type native_file_string() const { return file_string(); }
+ string_type native_directory_string() const { return directory_string(); }
+ static bool default_name_check_writable() { return false; }
+ static void default_name_check( name_check ) {}
+ static name_check default_name_check() { return 0; }
+ basic_path & canonize();
+ basic_path & normalize();
+# endif
+ };
+
+ // basic_path non-member functions ---------------------------------------//
+
+ template< class String, class Traits >
+ inline void swap( basic_path<String, Traits> & lhs,
+ basic_path<String, Traits> & rhs ) { lhs.swap( rhs ); }
+
+ template< class String, class Traits >
+ bool operator<( const basic_path<String, Traits> & lhs, const basic_path<String, Traits> & rhs )
+ {
+ return std::lexicographical_compare(
+ lhs.begin(), lhs.end(), rhs.begin(), rhs.end() );
+ }
+
+ template< class String, class Traits >
+ bool operator<( const typename basic_path<String, Traits>::string_type::value_type * lhs,
+ const basic_path<String, Traits> & rhs )
+ {
+ basic_path<String, Traits> tmp( lhs );
+ return std::lexicographical_compare(
+ tmp.begin(), tmp.end(), rhs.begin(), rhs.end() );
+ }
+
+ template< class String, class Traits >
+ bool operator<( const typename basic_path<String, Traits>::string_type & lhs,
+ const basic_path<String, Traits> & rhs )
+ {
+ basic_path<String, Traits> tmp( lhs );
+ return std::lexicographical_compare(
+ tmp.begin(), tmp.end(), rhs.begin(), rhs.end() );
+ }
+
+ template< class String, class Traits >
+ bool operator<( const basic_path<String, Traits> & lhs,
+ const typename basic_path<String, Traits>::string_type::value_type * rhs )
+ {
+ basic_path<String, Traits> tmp( rhs );
+ return std::lexicographical_compare(
+ lhs.begin(), lhs.end(), tmp.begin(), tmp.end() );
+ }
+
+ template< class String, class Traits >
+ bool operator<( const basic_path<String, Traits> & lhs,
+ const typename basic_path<String, Traits>::string_type & rhs )
+ {
+ basic_path<String, Traits> tmp( rhs );
+ return std::lexicographical_compare(
+ lhs.begin(), lhs.end(), tmp.begin(), tmp.end() );
+ }
+
+ template< class String, class Traits >
+ inline bool operator==( const basic_path<String, Traits> & lhs, const basic_path<String, Traits> & rhs )
+ {
+ return !(lhs < rhs) && !(rhs < lhs);
+ }
+
+ template< class String, class Traits >
+ inline bool operator==( const typename basic_path<String, Traits>::string_type::value_type * lhs,
+ const basic_path<String, Traits> & rhs )
+ {
+ basic_path<String, Traits> tmp( lhs );
+ return !(tmp < rhs) && !(rhs < tmp);
+ }
+
+ template< class String, class Traits >
+ inline bool operator==( const typename basic_path<String, Traits>::string_type & lhs,
+ const basic_path<String, Traits> & rhs )
+ {
+ basic_path<String, Traits> tmp( lhs );
+ return !(tmp < rhs) && !(rhs < tmp);
+ }
+
+ template< class String, class Traits >
+ inline bool operator==( const basic_path<String, Traits> & lhs,
+ const typename basic_path<String, Traits>::string_type::value_type * rhs )
+ {
+ basic_path<String, Traits> tmp( rhs );
+ return !(lhs < tmp) && !(tmp < lhs);
+ }
+
+ template< class String, class Traits >
+ inline bool operator==( const basic_path<String, Traits> & lhs,
+ const typename basic_path<String, Traits>::string_type & rhs )
+ {
+ basic_path<String, Traits> tmp( rhs );
+ return !(lhs < tmp) && !(tmp < lhs);
+ }
+
+ template< class String, class Traits >
+ inline bool operator!=( const basic_path<String, Traits> & lhs, const basic_path<String, Traits> & rhs ) { return !(lhs == rhs); }
+
+ template< class String, class Traits >
+ inline bool operator!=( const typename basic_path<String, Traits>::string_type::value_type * lhs,
+ const basic_path<String, Traits> & rhs ) { return !(basic_path<String, Traits>(lhs) == rhs); }
+
+ template< class String, class Traits >
+ inline bool operator!=( const typename basic_path<String, Traits>::string_type & lhs,
+ const basic_path<String, Traits> & rhs ) { return !(basic_path<String, Traits>(lhs) == rhs); }
+
+ template< class String, class Traits >
+ inline bool operator!=( const basic_path<String, Traits> & lhs,
+ const typename basic_path<String, Traits>::string_type::value_type * rhs )
+ { return !(lhs == basic_path<String, Traits>(rhs)); }
+
+ template< class String, class Traits >
+ inline bool operator!=( const basic_path<String, Traits> & lhs,
+ const typename basic_path<String, Traits>::string_type & rhs )
+ { return !(lhs == basic_path<String, Traits>(rhs)); }
+
+ template< class String, class Traits >
+ inline bool operator>( const basic_path<String, Traits> & lhs, const basic_path<String, Traits> & rhs ) { return rhs < lhs; }
+
+ template< class String, class Traits >
+ inline bool operator>( const typename basic_path<String, Traits>::string_type::value_type * lhs,
+ const basic_path<String, Traits> & rhs ) { return rhs < basic_path<String, Traits>(lhs); }
+
+ template< class String, class Traits >
+ inline bool operator>( const typename basic_path<String, Traits>::string_type & lhs,
+ const basic_path<String, Traits> & rhs ) { return rhs < basic_path<String, Traits>(lhs); }
+
+ template< class String, class Traits >
+ inline bool operator>( const basic_path<String, Traits> & lhs,
+ const typename basic_path<String, Traits>::string_type::value_type * rhs )
+ { return basic_path<String, Traits>(rhs) < lhs; }
+
+ template< class String, class Traits >
+ inline bool operator>( const basic_path<String, Traits> & lhs,
+ const typename basic_path<String, Traits>::string_type & rhs )
+ { return basic_path<String, Traits>(rhs) < lhs; }
+
+ template< class String, class Traits >
+ inline bool operator<=( const basic_path<String, Traits> & lhs, const basic_path<String, Traits> & rhs ) { return !(rhs < lhs); }
+
+ template< class String, class Traits >
+ inline bool operator<=( const typename basic_path<String, Traits>::string_type::value_type * lhs,
+ const basic_path<String, Traits> & rhs ) { return !(rhs < basic_path<String, Traits>(lhs)); }
+
+ template< class String, class Traits >
+ inline bool operator<=( const typename basic_path<String, Traits>::string_type & lhs,
+ const basic_path<String, Traits> & rhs ) { return !(rhs < basic_path<String, Traits>(lhs)); }
+
+ template< class String, class Traits >
+ inline bool operator<=( const basic_path<String, Traits> & lhs,
+ const typename basic_path<String, Traits>::string_type::value_type * rhs )
+ { return !(basic_path<String, Traits>(rhs) < lhs); }
+
+ template< class String, class Traits >
+ inline bool operator<=( const basic_path<String, Traits> & lhs,
+ const typename basic_path<String, Traits>::string_type & rhs )
+ { return !(basic_path<String, Traits>(rhs) < lhs); }
+
+ template< class String, class Traits >
+ inline bool operator>=( const basic_path<String, Traits> & lhs, const basic_path<String, Traits> & rhs ) { return !(lhs < rhs); }
+
+ template< class String, class Traits >
+ inline bool operator>=( const typename basic_path<String, Traits>::string_type::value_type * lhs,
+ const basic_path<String, Traits> & rhs ) { return !(lhs < basic_path<String, Traits>(rhs)); }
+
+ template< class String, class Traits >
+ inline bool operator>=( const typename basic_path<String, Traits>::string_type & lhs,
+ const basic_path<String, Traits> & rhs ) { return !(lhs < basic_path<String, Traits>(rhs)); }
+
+ template< class String, class Traits >
+ inline bool operator>=( const basic_path<String, Traits> & lhs,
+ const typename basic_path<String, Traits>::string_type::value_type * rhs )
+ { return !(basic_path<String, Traits>(lhs) < rhs); }
+
+ template< class String, class Traits >
+ inline bool operator>=( const basic_path<String, Traits> & lhs,
+ const typename basic_path<String, Traits>::string_type & rhs )
+ { return !(basic_path<String, Traits>(lhs) < rhs); }
+
+ // operator /
+
+ template< class String, class Traits >
+ inline basic_path<String, Traits> operator/(
+ const basic_path<String, Traits> & lhs,
+ const basic_path<String, Traits> & rhs )
+ { return basic_path<String, Traits>( lhs ) /= rhs; }
+
+ template< class String, class Traits >
+ inline basic_path<String, Traits> operator/(
+ const basic_path<String, Traits> & lhs,
+ const typename String::value_type * rhs )
+ { return basic_path<String, Traits>( lhs ) /=
+ basic_path<String, Traits>( rhs ); }
+
+ template< class String, class Traits >
+ inline basic_path<String, Traits> operator/(
+ const basic_path<String, Traits> & lhs, const String & rhs )
+ { return basic_path<String, Traits>( lhs ) /=
+ basic_path<String, Traits>( rhs ); }
+
+ template< class String, class Traits >
+ inline basic_path<String, Traits> operator/(
+ const typename String::value_type * lhs,
+ const basic_path<String, Traits> & rhs )
+ { return basic_path<String, Traits>( lhs ) /= rhs; }
+
+ template< class String, class Traits >
+ inline basic_path<String, Traits> operator/(
+ const String & lhs, const basic_path<String, Traits> & rhs )
+ { return basic_path<String, Traits>( lhs ) /= rhs; }
+
+ // inserters and extractors --------------------------------------------//
+
+// bypass VC++ 7.0 and earlier, and broken Borland compilers
+# if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) && !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+ template< class Path >
+ std::basic_ostream< typename Path::string_type::value_type,
+ typename Path::string_type::traits_type > &
+ operator<<
+ ( std::basic_ostream< typename Path::string_type::value_type,
+ typename Path::string_type::traits_type >& os, const Path & ph )
+ {
+ os << ph.string();
+ return os;
+ }
+
+ template< class Path >
+ std::basic_istream< typename Path::string_type::value_type,
+ typename Path::string_type::traits_type > &
+ operator>>
+ ( std::basic_istream< typename Path::string_type::value_type,
+ typename Path::string_type::traits_type >& is, Path & ph )
+ {
+ typename Path::string_type str;
+ is >> str;
+ ph = str;
+ return is;
+ }
+# elif BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+ template< class String, class Traits >
+ std::basic_ostream< BOOST_DEDUCED_TYPENAME String::value_type,
+ BOOST_DEDUCED_TYPENAME String::traits_type > &
+ operator<<
+ ( std::basic_ostream< BOOST_DEDUCED_TYPENAME String::value_type,
+ BOOST_DEDUCED_TYPENAME String::traits_type >& os,
+ const basic_path< String, Traits > & ph )
+ {
+ os << ph.string();
+ return os;
+ }
+
+ template< class String, class Traits >
+ std::basic_istream< BOOST_DEDUCED_TYPENAME String::value_type,
+ BOOST_DEDUCED_TYPENAME String::traits_type > &
+ operator>>
+ ( std::basic_istream< BOOST_DEDUCED_TYPENAME String::value_type,
+ BOOST_DEDUCED_TYPENAME String::traits_type> & is,
+ basic_path< String, Traits > & ph )
+ {
+ String str;
+ is >> str;
+ ph = str;
+ return is;
+ }
+# endif
+
+ // path::name_checks -----------------------------------------------------//
+
+ BOOST_FILESYSTEM_DECL bool portable_posix_name( const std::string & name );
+ BOOST_FILESYSTEM_DECL bool windows_name( const std::string & name );
+ BOOST_FILESYSTEM_DECL bool portable_name( const std::string & name );
+ BOOST_FILESYSTEM_DECL bool portable_directory_name( const std::string & name );
+ BOOST_FILESYSTEM_DECL bool portable_file_name( const std::string & name );
+ BOOST_FILESYSTEM_DECL bool native( const std::string & name );
+ inline bool no_check( const std::string & )
+ { return true; }
+
+// implementation -----------------------------------------------------------//
+
+ namespace detail
+ {
+
+ // is_separator helper ------------------------------------------------//
+
+ template<class Path>
+ inline bool is_separator( typename Path::string_type::value_type c )
+ {
+ return c == slash<Path>::value
+# ifdef BOOST_WINDOWS_PATH
+ || c == path_alt_separator<Path>::value
+# endif
+ ;
+ }
+
+ // leaf_pos helper ----------------------------------------------------//
+
+ template<class String, class Traits>
+ typename String::size_type leaf_pos(
+ const String & str, // precondition: portable generic path grammar
+ typename String::size_type end_pos ) // end_pos is past-the-end position
+ // return 0 if str itself is leaf (or empty)
+ {
+ typedef typename
+ boost::BOOST_FILESYSTEM_NAMESPACE::basic_path<String, Traits> path_type;
+
+ // case: "//"
+ if ( end_pos == 2
+ && str[0] == slash<path_type>::value
+ && str[1] == slash<path_type>::value ) return 0;
+
+ // case: ends in "/"
+ if ( end_pos && str[end_pos-1] == slash<path_type>::value )
+ return end_pos-1;
+
+ // set pos to start of last element
+ typename String::size_type pos(
+ str.find_last_of( slash<path_type>::value, end_pos-1 ) );
+# ifdef BOOST_WINDOWS_PATH
+ if ( pos == String::npos )
+ pos = str.find_last_of( path_alt_separator<path_type>::value, end_pos-1 );
+ if ( pos == String::npos )
+ pos = str.find_last_of( colon<path_type>::value, end_pos-2 );
+# endif
+
+ return ( pos == String::npos // path itself must be a leaf (or empty)
+ || (pos == 1 && str[0] == slash<path_type>::value) ) // or net
+ ? 0 // so leaf is entire string
+ : pos + 1; // or starts after delimiter
+ }
+
+ // first_element helper -----------------------------------------------//
+ // sets pos and len of first element, excluding extra separators
+ // if src.empty(), sets pos,len, to 0,0.
+
+ template<class String, class Traits>
+ void first_element(
+ const String & src, // precondition: portable generic path grammar
+ typename String::size_type & element_pos,
+ typename String::size_type & element_size,
+# if !BOOST_WORKAROUND( BOOST_MSVC, <= 1310 ) // VC++ 7.1
+ typename String::size_type size = String::npos
+# else
+ typename String::size_type size = -1
+# endif
+ )
+ {
+ if ( size == String::npos ) size = src.size();
+ element_pos = 0;
+ element_size = 0;
+ if ( src.empty() ) return;
+
+ typedef typename boost::BOOST_FILESYSTEM_NAMESPACE::basic_path<String, Traits> path_type;
+
+ typename String::size_type cur(0);
+
+ // deal with // [network]
+ if ( size >= 2 && src[0] == slash<path_type>::value
+ && src[1] == slash<path_type>::value
+ && (size == 2
+ || src[2] != slash<path_type>::value) )
+ {
+ cur += 2;
+ element_size += 2;
+ }
+
+ // leading (not non-network) separator
+ else if ( src[0] == slash<path_type>::value )
+ {
+ ++element_size;
+ // bypass extra leading separators
+ while ( cur+1 < size
+ && src[cur+1] == slash<path_type>::value )
+ {
+ ++cur;
+ ++element_pos;
+ }
+ return;
+ }
+
+ // at this point, we have either a plain name, a network name,
+ // or (on Windows only) a device name
+
+ // find the end
+ while ( cur < size
+# ifdef BOOST_WINDOWS_PATH
+ && src[cur] != colon<path_type>::value
+# endif
+ && src[cur] != slash<path_type>::value )
+ {
+ ++cur;
+ ++element_size;
+ }
+
+# ifdef BOOST_WINDOWS_PATH
+ if ( cur == size ) return;
+ // include device delimiter
+ if ( src[cur] == colon<path_type>::value )
+ { ++element_size; }
+# endif
+
+ return;
+ }
+
+ // root_directory_start helper ----------------------------------------//
+
+ template<class String, class Traits>
+ typename String::size_type root_directory_start(
+ const String & s, // precondition: portable generic path grammar
+ typename String::size_type size )
+ // return npos if no root_directory found
+ {
+ typedef typename boost::BOOST_FILESYSTEM_NAMESPACE::basic_path<String, Traits> path_type;
+
+# ifdef BOOST_WINDOWS_PATH
+ // case "c:/"
+ if ( size > 2
+ && s[1] == colon<path_type>::value
+ && s[2] == slash<path_type>::value ) return 2;
+# endif
+
+ // case "//"
+ if ( size == 2
+ && s[0] == slash<path_type>::value
+ && s[1] == slash<path_type>::value ) return String::npos;
+
+ // case "//net {/}"
+ if ( size > 3
+ && s[0] == slash<path_type>::value
+ && s[1] == slash<path_type>::value
+ && s[2] != slash<path_type>::value )
+ {
+ typename String::size_type pos(
+ s.find( slash<path_type>::value, 2 ) );
+ return pos < size ? pos : String::npos;
+ }
+
+ // case "/"
+ if ( size > 0 && s[0] == slash<path_type>::value ) return 0;
+
+ return String::npos;
+ }
+
+ // is_non_root_slash helper -------------------------------------------//
+
+ template<class String, class Traits>
+ bool is_non_root_slash( const String & str,
+ typename String::size_type pos ) // pos is position of the slash
+ {
+ typedef typename
+ boost::BOOST_FILESYSTEM_NAMESPACE::basic_path<String, Traits>
+ path_type;
+
+ assert( !str.empty() && str[pos] == slash<path_type>::value
+ && "precondition violation" );
+
+ // subsequent logic expects pos to be for leftmost slash of a set
+ while ( pos > 0 && str[pos-1] == slash<path_type>::value )
+ --pos;
+
+ return pos != 0
+ && (pos <= 2 || str[1] != slash<path_type>::value
+ || str.find( slash<path_type>::value, 2 ) != pos)
+# ifdef BOOST_WINDOWS_PATH
+ && (pos !=2 || str[1] != colon<path_type>::value)
+# endif
+ ;
+ }
+ } // namespace detail
+
+ // decomposition functions ----------------------------------------------//
+
+ template<class String, class Traits>
+ String basic_path<String, Traits>::leaf() const
+ {
+ typename String::size_type end_pos(
+ detail::leaf_pos<String, Traits>( m_path, m_path.size() ) );
+ return (m_path.size()
+ && end_pos
+ && m_path[end_pos] == slash<path_type>::value
+ && detail::is_non_root_slash< String, Traits >(m_path, end_pos))
+ ? String( 1, dot<path_type>::value )
+ : m_path.substr( end_pos );
+ }
+
+ template<class String, class Traits>
+ basic_path<String, Traits> basic_path<String, Traits>::branch_path() const
+ {
+ typename String::size_type end_pos(
+ detail::leaf_pos<String, Traits>( m_path, m_path.size() ) );
+
+ bool leaf_was_separator( m_path.size()
+ && m_path[end_pos] == slash<path_type>::value );
+
+ // skip separators unless root directory
+ typename string_type::size_type root_dir_pos( detail::root_directory_start
+ <string_type, traits_type>( m_path, end_pos ) );
+ for ( ;
+ end_pos > 0
+ && (end_pos-1) != root_dir_pos
+ && m_path[end_pos-1] == slash<path_type>::value
+ ;
+ --end_pos ) {}
+
+ return (end_pos == 1 && root_dir_pos == 0 && leaf_was_separator)
+ ? path_type()
+ : path_type( m_path.substr( 0, end_pos ) );
+ }
+
+ template<class String, class Traits>
+ basic_path<String, Traits> basic_path<String, Traits>::relative_path() const
+ {
+ iterator itr( begin() );
+ for ( ; itr.m_pos != m_path.size()
+ && (itr.m_name[0] == slash<path_type>::value
+# ifdef BOOST_WINDOWS_PATH
+ || itr.m_name[itr.m_name.size()-1]
+ == colon<path_type>::value
+# endif
+ ); ++itr ) {}
+
+ return basic_path<String, Traits>( m_path.substr( itr.m_pos ) );
+ }
+
+ template<class String, class Traits>
+ String basic_path<String, Traits>::root_name() const
+ {
+ iterator itr( begin() );
+
+ return ( itr.m_pos != m_path.size()
+ && (
+ ( itr.m_name.size() > 1
+ && itr.m_name[0] == slash<path_type>::value
+ && itr.m_name[1] == slash<path_type>::value
+ )
+# ifdef BOOST_WINDOWS_PATH
+ || itr.m_name[itr.m_name.size()-1]
+ == colon<path_type>::value
+# endif
+ ) )
+ ? *itr
+ : String();
+ }
+
+ template<class String, class Traits>
+ String basic_path<String, Traits>::root_directory() const
+ {
+ typename string_type::size_type start(
+ detail::root_directory_start<String, Traits>( m_path, m_path.size() ) );
+
+ return start == string_type::npos
+ ? string_type()
+ : m_path.substr( start, 1 );
+ }
+
+ template<class String, class Traits>
+ basic_path<String, Traits> basic_path<String, Traits>::root_path() const
+ {
+ // even on POSIX, root_name() is non-empty() on network paths
+ return basic_path<String, Traits>( root_name() ) /= root_directory();
+ }
+
+ // path query functions -------------------------------------------------//
+
+ template<class String, class Traits>
+ inline bool basic_path<String, Traits>::is_complete() const
+ {
+# ifdef BOOST_WINDOWS_PATH
+ return has_root_name() && has_root_directory();
+# else
+ return has_root_directory();
+# endif
+ }
+
+ template<class String, class Traits>
+ inline bool basic_path<String, Traits>::has_root_path() const
+ {
+ return !root_path().empty();
+ }
+
+ template<class String, class Traits>
+ inline bool basic_path<String, Traits>::has_root_name() const
+ {
+ return !root_name().empty();
+ }
+
+ template<class String, class Traits>
+ inline bool basic_path<String, Traits>::has_root_directory() const
+ {
+ return !root_directory().empty();
+ }
+
+ // append ---------------------------------------------------------------//
+
+ template<class String, class Traits>
+ void basic_path<String, Traits>::m_append_separator_if_needed()
+ // requires: !empty()
+ {
+ if (
+# ifdef BOOST_WINDOWS_PATH
+ *(m_path.end()-1) != colon<path_type>::value &&
+# endif
+ *(m_path.end()-1) != slash<path_type>::value )
+ {
+ m_path += slash<path_type>::value;
+ }
+ }
+
+ template<class String, class Traits>
+ void basic_path<String, Traits>::m_append( value_type value )
+ {
+# ifdef BOOST_CYGWIN_PATH
+ if ( m_path.empty() ) m_cygwin_root = (value == slash<path_type>::value);
+# endif
+
+# ifdef BOOST_WINDOWS_PATH
+ // for BOOST_WINDOWS_PATH, convert alt_separator ('\') to separator ('/')
+ m_path += ( value == path_alt_separator<path_type>::value
+ ? slash<path_type>::value
+ : value );
+# else
+ m_path += value;
+# endif
+ }
+
+ // except that it wouldn't work for BOOST_NO_MEMBER_TEMPLATES compilers,
+ // the append() member template could replace this code.
+ template<class String, class Traits>
+ basic_path<String, Traits> & basic_path<String, Traits>::operator /=
+ ( const value_type * next_p )
+ {
+ // ignore escape sequence on POSIX or Windows
+ if ( *next_p == slash<path_type>::value
+ && *(next_p+1) == slash<path_type>::value
+ && *(next_p+2) == colon<path_type>::value ) next_p += 3;
+
+ // append slash<path_type>::value if needed
+ if ( !empty() && *next_p != 0
+ && !detail::is_separator<path_type>( *next_p ) )
+ { m_append_separator_if_needed(); }
+
+ for ( ; *next_p != 0; ++next_p ) m_append( *next_p );
+ return *this;
+ }
+
+# ifndef BOOST_NO_MEMBER_TEMPLATES
+ template<class String, class Traits> template <class InputIterator>
+ basic_path<String, Traits> & basic_path<String, Traits>::append(
+ InputIterator first, InputIterator last )
+ {
+ // append slash<path_type>::value if needed
+ if ( !empty() && first != last
+ && !detail::is_separator<path_type>( *first ) )
+ { m_append_separator_if_needed(); }
+
+ // song-and-dance to avoid violating InputIterator requirements
+ // (which prohibit lookahead) in detecting a possible escape sequence
+ // (escape sequences are simply ignored on POSIX and Windows)
+ bool was_escape_sequence(true);
+ std::size_t append_count(0);
+ typename String::size_type initial_pos( m_path.size() );
+
+ for ( ; first != last && *first; ++first )
+ {
+ if ( append_count == 0 && *first != slash<path_type>::value )
+ was_escape_sequence = false;
+ if ( append_count == 1 && *first != slash<path_type>::value )
+ was_escape_sequence = false;
+ if ( append_count == 2 && *first != colon<path_type>::value )
+ was_escape_sequence = false;
+ m_append( *first );
+ ++append_count;
+ }
+
+ // erase escape sequence if any
+ if ( was_escape_sequence && append_count >= 3 )
+ m_path.erase( initial_pos, 3 );
+
+ return *this;
+ }
+# endif
+
+# ifndef BOOST_FILESYSTEM_NO_DEPRECATED
+
+ // canonize ------------------------------------------------------------//
+
+ template<class String, class Traits>
+ basic_path<String, Traits> & basic_path<String, Traits>::canonize()
+ {
+ static const typename string_type::value_type dot_str[]
+ = { dot<path_type>::value, 0 };
+
+ if ( m_path.empty() ) return *this;
+
+ path_type temp;
+
+ for ( iterator itr( begin() ); itr != end(); ++itr )
+ {
+ temp /= *itr;
+ };
+
+ if ( temp.empty() ) temp /= dot_str;
+ m_path = temp.m_path;
+ return *this;
+ }
+
+ // normalize ------------------------------------------------------------//
+
+ template<class String, class Traits>
+ basic_path<String, Traits> & basic_path<String, Traits>::normalize()
+ {
+ static const typename string_type::value_type dot_str[]
+ = { dot<path_type>::value, 0 };
+
+ if ( m_path.empty() ) return *this;
+
+ path_type temp;
+ iterator start( begin() );
+ iterator last( end() );
+ iterator stop( last-- );
+ for ( iterator itr( start ); itr != stop; ++itr )
+ {
+ // ignore "." except at start and last
+ if ( itr->size() == 1
+ && (*itr)[0] == dot<path_type>::value
+ && itr != start
+ && itr != last ) continue;
+
+ // ignore a name and following ".."
+ if ( !temp.empty()
+ && itr->size() == 2
+ && (*itr)[0] == dot<path_type>::value
+ && (*itr)[1] == dot<path_type>::value ) // dot dot
+ {
+ string_type lf( temp.leaf() );
+ if ( lf.size() > 0
+ && (lf.size() != 1
+ || (lf[0] != dot<path_type>::value
+ && lf[0] != slash<path_type>::value))
+ && (lf.size() != 2
+ || (lf[0] != dot<path_type>::value
+ && lf[1] != dot<path_type>::value
+# ifdef BOOST_WINDOWS_PATH
+ && lf[1] != colon<path_type>::value
+# endif
+ )
+ )
+ )
+ {
+ temp.remove_leaf();
+ // if not root directory, must also remove "/" if any
+ if ( temp.m_path.size() > 0
+ && temp.m_path[temp.m_path.size()-1]
+ == slash<path_type>::value )
+ {
+ typename string_type::size_type rds(
+ detail::root_directory_start<String,Traits>( temp.m_path,
+ temp.m_path.size() ) );
+ if ( rds == string_type::npos
+ || rds != temp.m_path.size()-1 )
+ { temp.m_path.erase( temp.m_path.size()-1 ); }
+ }
+
+ iterator next( itr );
+ if ( temp.empty() && ++next != stop
+ && next == last && *last == dot_str ) temp /= dot_str;
+ continue;
+ }
+ }
+
+ temp /= *itr;
+ };
+
+ if ( temp.empty() ) temp /= dot_str;
+ m_path = temp.m_path;
+ return *this;
+ }
+
+# endif
+
+ // remove_leaf ----------------------------------------------------------//
+
+ template<class String, class Traits>
+ basic_path<String, Traits> & basic_path<String, Traits>::remove_leaf()
+ {
+ m_path.erase(
+ detail::leaf_pos<String, Traits>( m_path, m_path.size() ) );
+ return *this;
+ }
+
+ // path conversion functions --------------------------------------------//
+
+ template<class String, class Traits>
+ const String
+ basic_path<String, Traits>::file_string() const
+ {
+# ifdef BOOST_WINDOWS_PATH
+ // for Windows, use the alternate separator, and bypass extra
+ // root separators
+
+ typename string_type::size_type root_dir_start(
+ detail::root_directory_start<String, Traits>( m_path, m_path.size() ) );
+ bool in_root( root_dir_start != string_type::npos );
+ String s;
+ for ( typename string_type::size_type pos( 0 );
+ pos != m_path.size(); ++pos )
+ {
+ // special case // [net]
+ if ( pos == 0 && m_path.size() > 1
+ && m_path[0] == slash<path_type>::value
+ && m_path[1] == slash<path_type>::value
+ && ( m_path.size() == 2
+ || !detail::is_separator<path_type>( m_path[2] )
+ ) )
+ {
+ ++pos;
+ s += path_alt_separator<path_type>::value;
+ s += path_alt_separator<path_type>::value;
+ continue;
+ }
+
+ // bypass extra root separators
+ if ( in_root )
+ {
+ if ( s.size() > 0
+ && s[s.size()-1] == path_alt_separator<path_type>::value
+ && m_path[pos] == slash<path_type>::value
+ ) continue;
+ }
+
+ if ( m_path[pos] == slash<path_type>::value )
+ s += path_alt_separator<path_type>::value;
+ else
+ s += m_path[pos];
+
+ if ( pos > root_dir_start
+ && m_path[pos] == slash<path_type>::value )
+ { in_root = false; }
+ }
+# ifdef BOOST_CYGWIN_PATH
+ if ( m_cygwin_root ) s[0] = slash<path_type>::value;
+# endif
+ return s;
+# else
+ return m_path;
+# endif
+ }
+
+ // iterator functions ---------------------------------------------------//
+
+ template<class String, class Traits>
+ typename basic_path<String, Traits>::iterator basic_path<String, Traits>::begin() const
+ {
+ iterator itr;
+ itr.m_path_ptr = this;
+ typename string_type::size_type element_size;
+ detail::first_element<String, Traits>( m_path, itr.m_pos, element_size );
+ itr.m_name = m_path.substr( itr.m_pos, element_size );
+ return itr;
+ }
+
+ template<class String, class Traits>
+ typename basic_path<String, Traits>::iterator basic_path<String, Traits>::end() const
+ {
+ iterator itr;
+ itr.m_path_ptr = this;
+ itr.m_pos = m_path.size();
+ return itr;
+ }
+
+ namespace detail
+ {
+ // do_increment ------------------------------------------------------//
+
+ template<class Path>
+ void iterator_helper<Path>::do_increment( iterator & itr )
+ {
+ typedef typename Path::string_type string_type;
+ typedef typename Path::traits_type traits_type;
+
+ assert( itr.m_pos < itr.m_path_ptr->m_path.size() && "basic_path::iterator increment past end()" );
+
+ bool was_net( itr.m_name.size() > 2
+ && itr.m_name[0] == slash<Path>::value
+ && itr.m_name[1] == slash<Path>::value
+ && itr.m_name[2] != slash<Path>::value );
+
+ // increment to position past current element
+ itr.m_pos += itr.m_name.size();
+
+ // if end reached, create end iterator
+ if ( itr.m_pos == itr.m_path_ptr->m_path.size() )
+ {
+ itr.m_name.erase( itr.m_name.begin(), itr.m_name.end() ); // VC++ 6.0 lib didn't supply clear()
+ return;
+ }
+
+ // process separator (Windows drive spec is only case not a separator)
+ if ( itr.m_path_ptr->m_path[itr.m_pos] == slash<Path>::value )
+ {
+ // detect root directory
+ if ( was_net
+ # ifdef BOOST_WINDOWS_PATH
+ // case "c:/"
+ || itr.m_name[itr.m_name.size()-1] == colon<Path>::value
+ # endif
+ )
+ {
+ itr.m_name = slash<Path>::value;
+ return;
+ }
+
+ // bypass separators
+ while ( itr.m_pos != itr.m_path_ptr->m_path.size()
+ && itr.m_path_ptr->m_path[itr.m_pos] == slash<Path>::value )
+ { ++itr.m_pos; }
+
+ // detect trailing separator, and treat it as ".", per POSIX spec
+ if ( itr.m_pos == itr.m_path_ptr->m_path.size()
+ && detail::is_non_root_slash< string_type, traits_type >(
+ itr.m_path_ptr->m_path, itr.m_pos-1 ) )
+ {
+ --itr.m_pos;
+ itr.m_name = dot<Path>::value;
+ return;
+ }
+ }
+
+ // get next element
+ typename string_type::size_type end_pos(
+ itr.m_path_ptr->m_path.find( slash<Path>::value, itr.m_pos ) );
+ itr.m_name = itr.m_path_ptr->m_path.substr( itr.m_pos, end_pos - itr.m_pos );
+ }
+
+ // do_decrement ------------------------------------------------------//
+
+ template<class Path>
+ void iterator_helper<Path>::do_decrement( iterator & itr )
+ {
+ assert( itr.m_pos && "basic_path::iterator decrement past begin()" );
+
+ typedef typename Path::string_type string_type;
+ typedef typename Path::traits_type traits_type;
+
+ typename string_type::size_type end_pos( itr.m_pos );
+
+ typename string_type::size_type root_dir_pos(
+ detail::root_directory_start<string_type, traits_type>(
+ itr.m_path_ptr->m_path, end_pos ) );
+
+ // if at end and there was a trailing non-root '/', return "."
+ if ( itr.m_pos == itr.m_path_ptr->m_path.size()
+ && itr.m_path_ptr->m_path.size() > 1
+ && itr.m_path_ptr->m_path[itr.m_pos-1] == slash<Path>::value
+ && detail::is_non_root_slash< string_type, traits_type >(
+ itr.m_path_ptr->m_path, itr.m_pos-1 )
+ )
+ {
+ --itr.m_pos;
+ itr.m_name = dot<Path>::value;
+ return;
+ }
+
+ // skip separators unless root directory
+ for (
+ ;
+ end_pos > 0
+ && (end_pos-1) != root_dir_pos
+ && itr.m_path_ptr->m_path[end_pos-1] == slash<Path>::value
+ ;
+ --end_pos ) {}
+
+ itr.m_pos = detail::leaf_pos<string_type, traits_type>
+ ( itr.m_path_ptr->m_path, end_pos );
+ itr.m_name = itr.m_path_ptr->m_path.substr( itr.m_pos, end_pos - itr.m_pos );
+ }
+ } // namespace detail
+
+ // basic_filesystem_error implementation --------------------------------//
+
+ template<class Path>
+ basic_filesystem_error<Path>::basic_filesystem_error(
+ const std::string & what, system_error_type sys_err_code )
+ : filesystem_error(what, sys_err_code)
+ {
+ try
+ {
+ m_imp_ptr.reset( new m_imp );
+ }
+ catch (...) { m_imp_ptr.reset(); }
+ }
+
+ template<class Path>
+ basic_filesystem_error<Path>::basic_filesystem_error(
+ const std::string & what, const path_type & path1,
+ system_error_type sys_err_code )
+ : filesystem_error(what, sys_err_code)
+ {
+ try
+ {
+ m_imp_ptr.reset( new m_imp );
+ m_imp_ptr->m_path1 = path1;
+ }
+ catch (...) { m_imp_ptr.reset(); }
+ }
+
+ template<class Path>
+ basic_filesystem_error<Path>::basic_filesystem_error(
+ const std::string & what, const path_type & path1,
+ const path_type & path2, system_error_type sys_err_code )
+ : filesystem_error(what, sys_err_code)
+ {
+ try
+ {
+ m_imp_ptr.reset( new m_imp );
+ m_imp_ptr->m_path1 = path1;
+ m_imp_ptr->m_path2 = path2;
+ }
+ catch (...) { m_imp_ptr.reset(); }
+ }
+
+ } // namespace BOOST_FILESYSTEM_NAMESPACE
+} // namespace boost
+
+#include <boost/config/abi_suffix.hpp> // pops abi_prefix.hpp pragmas
+
+#endif // BOOST_FILESYSTEM_PATH_HPP
diff --git a/boost/boost/foreach.hpp b/boost/boost/foreach.hpp
new file mode 100644
index 00000000000..b9018f83f06
--- /dev/null
+++ b/boost/boost/foreach.hpp
@@ -0,0 +1,812 @@
+///////////////////////////////////////////////////////////////////////////////
+// foreach.hpp header file
+//
+// Copyright 2004 Eric Niebler.
+// 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)
+//
+// Credits:
+// Anson Tsao - for the initial inspiration and several good suggestions.
+// Thorsten Ottosen - for Boost.Range, and for suggesting a way to detect
+// const-qualified rvalues at compile time on VC7.1+
+// Russell Hind - For help porting to Borland
+// Alisdair Meredith - For help porting to Borland
+// Stefan Slapeta - For help porting to Intel
+
+#ifndef BOOST_FOREACH
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <cstddef>
+#include <utility> // for std::pair
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+// Some compilers let us detect even const-qualified rvalues at compile-time
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1310) \
+ || (BOOST_WORKAROUND(__GNUC__, >= 4) && !defined(BOOST_INTEL)) \
+ || (BOOST_WORKAROUND(__GNUC__, == 3) && (__GNUC_MINOR__ >= 4) && !defined(BOOST_INTEL))
+# define BOOST_FOREACH_COMPILE_TIME_CONST_RVALUE_DETECTION
+#else
+// Some compilers allow temporaries to be bound to non-const references.
+// These compilers make it impossible to for BOOST_FOREACH to detect
+// temporaries and avoid reevaluation of the collection expression.
+# if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \
+ || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) \
+ || (BOOST_WORKAROUND(BOOST_INTEL_CXX_VERSION, <= 700) && defined(_MSC_VER)) \
+ || BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x570)) \
+ || BOOST_WORKAROUND(__DECCXX_VER, BOOST_TESTED_AT(60590042))
+# define BOOST_FOREACH_NO_RVALUE_DETECTION
+# endif
+// Some compilers do not correctly implement the lvalue/rvalue conversion
+// rules of the ternary conditional operator.
+# if defined(BOOST_FOREACH_NO_RVALUE_DETECTION) \
+ || defined(BOOST_NO_SFINAE) \
+ || BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) \
+ || BOOST_WORKAROUND(BOOST_INTEL_WIN, <= 810) \
+ || BOOST_WORKAROUND(__GNUC__, < 3) \
+ || (BOOST_WORKAROUND(__GNUC__, == 3) && (__GNUC_MINOR__ <= 2)) \
+ || (BOOST_WORKAROUND(__GNUC__, == 3) && (__GNUC_MINOR__ <= 3) && defined(__APPLE_CC__)) \
+ || BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600)) \
+ || BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3206))
+# define BOOST_FOREACH_NO_CONST_RVALUE_DETECTION
+# else
+# define BOOST_FOREACH_RUN_TIME_CONST_RVALUE_DETECTION
+# endif
+#endif
+
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/logical.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/noncopyable.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/result_iterator.hpp>
+#include <boost/type_traits/is_array.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/is_abstract.hpp>
+#include <boost/type_traits/is_base_and_derived.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+#include <boost/utility/addressof.hpp>
+
+#ifdef BOOST_FOREACH_RUN_TIME_CONST_RVALUE_DETECTION
+# include <new>
+# include <boost/aligned_storage.hpp>
+# include <boost/utility/enable_if.hpp>
+# include <boost/type_traits/remove_const.hpp>
+#endif
+
+// This must be at global scope, hence the uglified name
+enum boost_foreach_argument_dependent_lookup_hack
+{
+ boost_foreach_argument_dependent_lookup_hack_value
+};
+
+namespace boost
+{
+
+// forward declarations for iterator_range
+template<typename T>
+class iterator_range;
+
+// forward declarations for sub_range
+template<typename T>
+class sub_range;
+
+namespace foreach
+{
+ ///////////////////////////////////////////////////////////////////////////////
+ // in_range
+ //
+ template<typename T>
+ inline std::pair<T, T> in_range(T begin, T end)
+ {
+ return std::make_pair(begin, end);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // boost::foreach::tag
+ //
+ typedef boost_foreach_argument_dependent_lookup_hack tag;
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // boost::foreach::is_lightweight_proxy
+ // Specialize this for user-defined collection types if they are inexpensive to copy.
+ // This tells BOOST_FOREACH it can avoid the rvalue/lvalue detection stuff.
+ template<typename T>
+ struct is_lightweight_proxy
+ : boost::mpl::false_
+ {
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // boost::foreach::is_noncopyable
+ // Specialize this for user-defined collection types if they cannot be copied.
+ // This also tells BOOST_FOREACH to avoid the rvalue/lvalue detection stuff.
+ template<typename T>
+ struct is_noncopyable
+ #if !defined(BOOST_BROKEN_IS_BASE_AND_DERIVED) && !defined(BOOST_NO_IS_ABSTRACT)
+ : boost::mpl::or_<
+ boost::is_abstract<T>
+ , boost::is_base_and_derived<boost::noncopyable, T>
+ >
+ #elif !defined(BOOST_BROKEN_IS_BASE_AND_DERIVED)
+ : boost::is_base_and_derived<boost::noncopyable, T>
+ #elif !defined(BOOST_NO_IS_ABSTRACT)
+ : boost::is_abstract<T>
+ #else
+ : boost::mpl::false_
+ #endif
+ {
+ };
+
+} // namespace foreach
+
+} // namespace boost
+
+// vc6/7 needs help ordering the following overloads
+#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+# define BOOST_FOREACH_TAG_DEFAULT ...
+#else
+# define BOOST_FOREACH_TAG_DEFAULT boost::foreach::tag
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// boost_foreach_is_lightweight_proxy
+// Another customization point for the is_lightweight_proxy optimization,
+// this one works on legacy compilers. Overload boost_foreach_is_lightweight_proxy
+// at the global namespace for your type.
+template<typename T>
+inline boost::foreach::is_lightweight_proxy<T> *
+boost_foreach_is_lightweight_proxy(T *&, BOOST_FOREACH_TAG_DEFAULT) { return 0; }
+
+template<typename T>
+inline boost::mpl::true_ *
+boost_foreach_is_lightweight_proxy(std::pair<T, T> *&, boost::foreach::tag) { return 0; }
+
+template<typename T>
+inline boost::mpl::true_ *
+boost_foreach_is_lightweight_proxy(boost::iterator_range<T> *&, boost::foreach::tag) { return 0; }
+
+template<typename T>
+inline boost::mpl::true_ *
+boost_foreach_is_lightweight_proxy(boost::sub_range<T> *&, boost::foreach::tag) { return 0; }
+
+template<typename T>
+inline boost::mpl::true_ *
+boost_foreach_is_lightweight_proxy(T **&, boost::foreach::tag) { return 0; }
+
+///////////////////////////////////////////////////////////////////////////////
+// boost_foreach_is_noncopyable
+// Another customization point for the is_noncopyable trait,
+// this one works on legacy compilers. Overload boost_foreach_is_noncopyable
+// at the global namespace for your type.
+template<typename T>
+inline boost::foreach::is_noncopyable<T> *
+boost_foreach_is_noncopyable(T *&, BOOST_FOREACH_TAG_DEFAULT) { return 0; }
+
+namespace boost
+{
+
+namespace foreach_detail_
+{
+
+///////////////////////////////////////////////////////////////////////////////
+// Define some utilities for assessing the properties of expressions
+//
+typedef char yes_type;
+typedef char (&no_type)[2];
+yes_type is_true(boost::mpl::true_ *);
+no_type is_true(boost::mpl::false_ *);
+
+// Extracts the desired property from the expression without evaluating it
+#define BOOST_FOREACH_PROTECT(expr) \
+ (static_cast<boost::mpl::bool_<1 == sizeof(boost::foreach_detail_::is_true(expr))> *>(0))
+
+template<typename Bool1, typename Bool2>
+inline boost::mpl::and_<Bool1, Bool2> *and_(Bool1 *, Bool2 *) { return 0; }
+
+template<typename Bool1, typename Bool2, typename Bool3>
+inline boost::mpl::and_<Bool1, Bool2, Bool3> *and_(Bool1 *, Bool2 *, Bool3 *) { return 0; }
+
+template<typename Bool1, typename Bool2>
+inline boost::mpl::or_<Bool1, Bool2> *or_(Bool1 *, Bool2 *) { return 0; }
+
+template<typename Bool1, typename Bool2, typename Bool3>
+inline boost::mpl::or_<Bool1, Bool2, Bool3> *or_(Bool1 *, Bool2 *, Bool3 *) { return 0; }
+
+template<typename Bool>
+inline boost::mpl::not_<Bool> *not_(Bool *) { return 0; }
+
+template<typename T>
+inline boost::mpl::false_ *is_rvalue_(T &, int) { return 0; }
+
+template<typename T>
+inline boost::mpl::true_ *is_rvalue_(T const &, ...) { return 0; }
+
+template<typename T>
+inline boost::is_array<T> *is_array_(T const &) { return 0; }
+
+template<typename T>
+inline boost::is_const<T> *is_const_(T &) { return 0; }
+
+#ifndef BOOST_FOREACH_NO_RVALUE_DETECTION
+template<typename T>
+inline boost::mpl::true_ *is_const_(T const &) { return 0; }
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// auto_any_t/auto_any
+// General utility for putting an object of any type into automatic storage
+struct auto_any_base
+{
+ // auto_any_base must evaluate to false in boolean context so that
+ // they can be declared in if() statements.
+ operator bool() const
+ {
+ return false;
+ }
+};
+
+template<typename T>
+struct auto_any : auto_any_base
+{
+ auto_any(T const &t)
+ : item(t)
+ {
+ }
+
+ // temporaries of type auto_any will be bound to const auto_any_base
+ // references, but we still want to be able to mutate the stored
+ // data, so declare it as mutable.
+ mutable T item;
+};
+
+typedef auto_any_base const &auto_any_t;
+
+template<typename T, typename C>
+inline BOOST_DEDUCED_TYPENAME boost::mpl::if_<C, T const, T>::type &auto_any_cast(auto_any_t a)
+{
+ return static_cast<auto_any<T> const &>(a).item;
+}
+
+typedef boost::mpl::true_ const_;
+
+///////////////////////////////////////////////////////////////////////////////
+// type2type
+//
+template<typename T, typename C = boost::mpl::false_>
+struct type2type
+ : boost::mpl::if_<C, T const, T>
+{
+};
+
+template<typename T, typename C = boost::mpl::false_>
+struct foreach_iterator
+{
+ typedef BOOST_DEDUCED_TYPENAME boost::mpl::eval_if<
+ C
+ , range_const_iterator<T>
+ , range_iterator<T>
+ >::type type;
+};
+
+template<typename T, typename C = boost::mpl::false_>
+struct foreach_reference
+ : iterator_reference<BOOST_DEDUCED_TYPENAME foreach_iterator<T, C>::type>
+{
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// encode_type
+//
+template<typename T>
+inline type2type<T> *encode_type(T &, boost::mpl::false_ *) { return 0; }
+
+template<typename T>
+inline type2type<T, const_> *encode_type(T const &, boost::mpl::true_ *) { return 0; }
+
+///////////////////////////////////////////////////////////////////////////////
+// set_false
+//
+inline bool set_false(bool &b) { return b = false; }
+
+///////////////////////////////////////////////////////////////////////////////
+// to_ptr
+//
+template<typename T>
+inline T *&to_ptr(T const &)
+{
+ static T *t = 0;
+ return t;
+}
+
+// Borland needs a little extra help with arrays
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+template<typename T,std::size_t N>
+inline T (*&to_ptr(T (&)[N]))[N]
+{
+ static T (*t)[N] = 0;
+ return t;
+}
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// derefof
+//
+template<typename T>
+inline T &derefof(T *t)
+{
+ // This is a work-around for a compiler bug in Borland. If T* is a pointer to array type U(*)[N],
+ // then dereferencing it results in a U* instead of U(&)[N]. The cast forces the issue.
+ return reinterpret_cast<T &>(
+ *const_cast<char *>(
+ reinterpret_cast<char const volatile *>(t)
+ )
+ );
+}
+
+#ifdef BOOST_FOREACH_COMPILE_TIME_CONST_RVALUE_DETECTION
+///////////////////////////////////////////////////////////////////////////////
+// Detect at compile-time whether an expression yields an rvalue or
+// an lvalue. This is rather non-standard, but some popular compilers
+// accept it.
+///////////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////////////////////////
+// rvalue_probe
+//
+template<typename T>
+struct rvalue_probe
+{
+ struct private_type_ {};
+ // can't ever return an array by value
+ typedef BOOST_DEDUCED_TYPENAME boost::mpl::if_<
+ boost::mpl::or_<boost::is_abstract<T>, boost::is_array<T> >, private_type_, T
+ >::type value_type;
+ operator value_type();
+ operator T &() const;
+};
+
+template<typename T>
+rvalue_probe<T> const make_probe(T const &t);
+
+# define BOOST_FOREACH_IS_RVALUE(COL) \
+ boost::foreach_detail_::and_( \
+ boost::foreach_detail_::not_(boost::foreach_detail_::is_array_(COL)) \
+ , BOOST_FOREACH_PROTECT(boost::foreach_detail_::is_rvalue_( \
+ (true ? boost::foreach_detail_::make_probe(COL) : (COL)), 0)))
+
+#elif defined(BOOST_FOREACH_RUN_TIME_CONST_RVALUE_DETECTION)
+///////////////////////////////////////////////////////////////////////////////
+// Detect at run-time whether an expression yields an rvalue
+// or an lvalue. This is 100% standard C++, but not all compilers
+// accept it. Also, it causes FOREACH to break when used with non-
+// copyable collection types.
+///////////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////////////////////////
+// rvalue_probe
+//
+template<typename T>
+struct rvalue_probe
+{
+ rvalue_probe(T &t, bool &b)
+ : value(t)
+ , is_rvalue(b)
+ {
+ }
+
+ struct private_type_ {};
+ // can't ever return an array or an abstract type by value
+ #ifdef BOOST_NO_IS_ABSTRACT
+ typedef BOOST_DEDUCED_TYPENAME boost::mpl::if_<
+ boost::is_array<T>, private_type_, T
+ >::type value_type;
+ #else
+ typedef BOOST_DEDUCED_TYPENAME boost::mpl::if_<
+ boost::mpl::or_<boost::is_abstract<T>, boost::is_array<T> >, private_type_, T
+ >::type value_type;
+ #endif
+
+ operator value_type()
+ {
+ this->is_rvalue = true;
+ return this->value;
+ }
+
+ operator T &() const
+ {
+ return this->value;
+ }
+
+private:
+ T &value;
+ bool &is_rvalue;
+};
+
+template<typename T>
+rvalue_probe<T> make_probe(T &t, bool &b) { return rvalue_probe<T>(t, b); }
+
+template<typename T>
+rvalue_probe<T const> make_probe(T const &t, bool &b) { return rvalue_probe<T const>(t, b); }
+
+///////////////////////////////////////////////////////////////////////////////
+// simple_variant
+// holds either a T or a T const*
+template<typename T>
+struct simple_variant
+{
+ simple_variant(T const *t)
+ : is_rvalue(false)
+ {
+ *static_cast<T const **>(this->data.address()) = t;
+ }
+
+ simple_variant(T const &t)
+ : is_rvalue(true)
+ {
+ ::new(this->data.address()) T(t);
+ }
+
+ simple_variant(simple_variant const &that)
+ : is_rvalue(that.is_rvalue)
+ {
+ if(this->is_rvalue)
+ ::new(this->data.address()) T(*that.get());
+ else
+ *static_cast<T const **>(this->data.address()) = that.get();
+ }
+
+ ~simple_variant()
+ {
+ if(this->is_rvalue)
+ this->get()->~T();
+ }
+
+ T const *get() const
+ {
+ if(this->is_rvalue)
+ return static_cast<T const *>(this->data.address());
+ else
+ return *static_cast<T const * const *>(this->data.address());
+ }
+
+private:
+ enum size_type { size = sizeof(T) > sizeof(T*) ? sizeof(T) : sizeof(T*) };
+ simple_variant &operator =(simple_variant const &);
+ bool const is_rvalue;
+ aligned_storage<size> data;
+};
+
+// If the collection is an array or is noncopyable, it must be an lvalue.
+// If the collection is a lightweight proxy, treat it as an rvalue
+// BUGBUG what about a noncopyable proxy?
+template<typename LValue, typename IsProxy>
+inline BOOST_DEDUCED_TYPENAME boost::enable_if<boost::mpl::or_<LValue, IsProxy>, IsProxy>::type *
+should_copy_impl(LValue *, IsProxy *, bool *)
+{
+ return 0;
+}
+
+// Otherwise, we must determine at runtime whether it's an lvalue or rvalue
+inline bool *
+should_copy_impl(boost::mpl::false_ *, boost::mpl::false_ *, bool *is_rvalue)
+{
+ return is_rvalue;
+}
+
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// contain
+//
+template<typename T>
+inline auto_any<T> contain(T const &t, boost::mpl::true_ *) // rvalue
+{
+ return t;
+}
+
+template<typename T>
+inline auto_any<T *> contain(T &t, boost::mpl::false_ *) // lvalue
+{
+ // Cannot seem to get sunpro to handle addressof() with array types.
+ #if BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x570))
+ return &t;
+ #else
+ return boost::addressof(t);
+ #endif
+}
+
+#ifdef BOOST_FOREACH_RUN_TIME_CONST_RVALUE_DETECTION
+template<typename T>
+auto_any<simple_variant<T> >
+contain(T const &t, bool *rvalue)
+{
+ return *rvalue ? simple_variant<T>(t) : simple_variant<T>(&t);
+}
+#endif
+
+/////////////////////////////////////////////////////////////////////////////
+// begin
+//
+template<typename T, typename C>
+inline auto_any<BOOST_DEDUCED_TYPENAME foreach_iterator<T, C>::type>
+begin(auto_any_t col, type2type<T, C> *, boost::mpl::true_ *) // rvalue
+{
+ return boost::begin(auto_any_cast<T, C>(col));
+}
+
+template<typename T, typename C>
+inline auto_any<BOOST_DEDUCED_TYPENAME foreach_iterator<T, C>::type>
+begin(auto_any_t col, type2type<T, C> *, boost::mpl::false_ *) // lvalue
+{
+ typedef BOOST_DEDUCED_TYPENAME type2type<T, C>::type type;
+ typedef BOOST_DEDUCED_TYPENAME foreach_iterator<T, C>::type iterator;
+ return iterator(boost::begin(derefof(auto_any_cast<type *, boost::mpl::false_>(col))));
+}
+
+#ifdef BOOST_FOREACH_RUN_TIME_CONST_RVALUE_DETECTION
+template<typename T>
+auto_any<BOOST_DEDUCED_TYPENAME foreach_iterator<T, const_>::type>
+begin(auto_any_t col, type2type<T, const_> *, bool *)
+{
+ return boost::begin(*auto_any_cast<simple_variant<T>, boost::mpl::false_>(col).get());
+}
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// end
+//
+template<typename T, typename C>
+inline auto_any<BOOST_DEDUCED_TYPENAME foreach_iterator<T, C>::type>
+end(auto_any_t col, type2type<T, C> *, boost::mpl::true_ *) // rvalue
+{
+ return boost::end(auto_any_cast<T, C>(col));
+}
+
+template<typename T, typename C>
+inline auto_any<BOOST_DEDUCED_TYPENAME foreach_iterator<T, C>::type>
+end(auto_any_t col, type2type<T, C> *, boost::mpl::false_ *) // lvalue
+{
+ typedef BOOST_DEDUCED_TYPENAME type2type<T, C>::type type;
+ typedef BOOST_DEDUCED_TYPENAME foreach_iterator<T, C>::type iterator;
+ return iterator(boost::end(derefof(auto_any_cast<type *, boost::mpl::false_>(col))));
+}
+
+#ifdef BOOST_FOREACH_RUN_TIME_CONST_RVALUE_DETECTION
+template<typename T>
+auto_any<BOOST_DEDUCED_TYPENAME foreach_iterator<T, const_>::type>
+end(auto_any_t col, type2type<T, const_> *, bool *)
+{
+ return boost::end(*auto_any_cast<simple_variant<T>, boost::mpl::false_>(col).get());
+}
+#endif
+
+#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+template<typename T, typename C>
+inline auto_any<int>
+end(auto_any_t col, type2type<T *, C> *, boost::mpl::true_ *) // null-terminated C-style strings
+{
+ return 0; // not used
+}
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// done
+//
+template<typename T, typename C>
+inline bool done(auto_any_t cur, auto_any_t end, type2type<T, C> *)
+{
+ typedef BOOST_DEDUCED_TYPENAME foreach_iterator<T, C>::type iter_t;
+ return auto_any_cast<iter_t, boost::mpl::false_>(cur) == auto_any_cast<iter_t, boost::mpl::false_>(end);
+}
+
+#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+template<typename T, typename C>
+inline bool done(auto_any_t cur, auto_any_t, type2type<T *, C> *) // null-terminated C-style strings
+{
+ return ! *auto_any_cast<T *, boost::mpl::false_>(cur);
+}
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// next
+//
+template<typename T, typename C>
+inline void next(auto_any_t cur, type2type<T, C> *)
+{
+ typedef BOOST_DEDUCED_TYPENAME foreach_iterator<T, C>::type iter_t;
+ ++auto_any_cast<iter_t, boost::mpl::false_>(cur);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// deref
+//
+template<typename T, typename C>
+inline BOOST_DEDUCED_TYPENAME foreach_reference<T, C>::type
+deref(auto_any_t cur, type2type<T, C> *)
+{
+ typedef BOOST_DEDUCED_TYPENAME foreach_iterator<T, C>::type iter_t;
+ return *auto_any_cast<iter_t, boost::mpl::false_>(cur);
+}
+
+} // namespace foreach_detail_
+} // namespace boost
+
+// A sneaky way to get the type of the collection without evaluating the expression
+#define BOOST_FOREACH_TYPEOF(COL) \
+ (true ? 0 : boost::foreach_detail_::encode_type(COL, boost::foreach_detail_::is_const_(COL)))
+
+// returns true_* if the type is noncopyable
+#define BOOST_FOREACH_IS_NONCOPYABLE(COL) \
+ boost_foreach_is_noncopyable( \
+ boost::foreach_detail_::to_ptr(COL) \
+ , boost_foreach_argument_dependent_lookup_hack_value)
+
+// returns true_* if the type is a lightweight proxy (and is not noncopyable)
+#define BOOST_FOREACH_IS_LIGHTWEIGHT_PROXY(COL) \
+ boost::foreach_detail_::and_( \
+ boost::foreach_detail_::not_(BOOST_FOREACH_IS_NONCOPYABLE(COL)) \
+ , boost_foreach_is_lightweight_proxy( \
+ boost::foreach_detail_::to_ptr(COL) \
+ , boost_foreach_argument_dependent_lookup_hack_value))
+
+#ifdef BOOST_FOREACH_COMPILE_TIME_CONST_RVALUE_DETECTION
+///////////////////////////////////////////////////////////////////////////////
+// R-values and const R-values supported here with zero runtime overhead
+///////////////////////////////////////////////////////////////////////////////
+
+// No variable is needed to track the rvalue-ness of the collection expression
+# define BOOST_FOREACH_PREAMBLE() \
+ /**/
+
+// Evaluate the collection expression
+# define BOOST_FOREACH_EVALUATE(COL) \
+ (COL)
+
+# define BOOST_FOREACH_SHOULD_COPY(COL) \
+ (true ? 0 : boost::foreach_detail_::or_( \
+ BOOST_FOREACH_IS_RVALUE(COL) \
+ , BOOST_FOREACH_IS_LIGHTWEIGHT_PROXY(COL)))
+
+#elif defined(BOOST_FOREACH_RUN_TIME_CONST_RVALUE_DETECTION)
+///////////////////////////////////////////////////////////////////////////////
+// R-values and const R-values supported here
+///////////////////////////////////////////////////////////////////////////////
+
+// Declare a variable to track the rvalue-ness of the collection expression
+# define BOOST_FOREACH_PREAMBLE() \
+ if (bool _foreach_is_rvalue = false) {} else
+
+// Evaluate the collection expression, and detect if it is an lvalue or and rvalue
+# define BOOST_FOREACH_EVALUATE(COL) \
+ (true ? boost::foreach_detail_::make_probe((COL), _foreach_is_rvalue) : (COL))
+
+// The rvalue/lvalue-ness of the collection expression is determined dynamically, unless
+// type type is an array or is noncopyable or is non-const, in which case we know it's an lvalue.
+// If the type happens to be a lightweight proxy, always make a copy.
+# define BOOST_FOREACH_SHOULD_COPY(COL) \
+ (boost::foreach_detail_::should_copy_impl( \
+ true ? 0 : boost::foreach_detail_::or_( \
+ boost::foreach_detail_::is_array_(COL) \
+ , BOOST_FOREACH_IS_NONCOPYABLE(COL) \
+ , boost::foreach_detail_::not_(boost::foreach_detail_::is_const_(COL))) \
+ , true ? 0 : BOOST_FOREACH_IS_LIGHTWEIGHT_PROXY(COL) \
+ , &_foreach_is_rvalue))
+
+#elif !defined(BOOST_FOREACH_NO_RVALUE_DETECTION)
+///////////////////////////////////////////////////////////////////////////////
+// R-values supported here, const R-values NOT supported here
+///////////////////////////////////////////////////////////////////////////////
+
+// No variable is needed to track the rvalue-ness of the collection expression
+# define BOOST_FOREACH_PREAMBLE() \
+ /**/
+
+// Evaluate the collection expression
+# define BOOST_FOREACH_EVALUATE(COL) \
+ (COL)
+
+// Determine whether the collection expression is an lvalue or an rvalue.
+// NOTE: this gets the answer wrong for const rvalues.
+# define BOOST_FOREACH_SHOULD_COPY(COL) \
+ (true ? 0 : boost::foreach_detail_::or_( \
+ boost::foreach_detail_::is_rvalue_((COL), 0) \
+ , BOOST_FOREACH_IS_LIGHTWEIGHT_PROXY(COL)))
+
+#else
+///////////////////////////////////////////////////////////////////////////////
+// R-values NOT supported here
+///////////////////////////////////////////////////////////////////////////////
+
+// No variable is needed to track the rvalue-ness of the collection expression
+# define BOOST_FOREACH_PREAMBLE() \
+ /**/
+
+// Evaluate the collection expression
+# define BOOST_FOREACH_EVALUATE(COL) \
+ (COL)
+
+// Can't use rvalues with BOOST_FOREACH (unless they are lightweight proxies)
+# define BOOST_FOREACH_SHOULD_COPY(COL) \
+ (true ? 0 : BOOST_FOREACH_IS_LIGHTWEIGHT_PROXY(COL))
+
+#endif
+
+#define BOOST_FOREACH_CONTAIN(COL) \
+ boost::foreach_detail_::contain( \
+ BOOST_FOREACH_EVALUATE(COL) \
+ , BOOST_FOREACH_SHOULD_COPY(COL))
+
+#define BOOST_FOREACH_BEGIN(COL) \
+ boost::foreach_detail_::begin( \
+ _foreach_col \
+ , BOOST_FOREACH_TYPEOF(COL) \
+ , BOOST_FOREACH_SHOULD_COPY(COL))
+
+#define BOOST_FOREACH_END(COL) \
+ boost::foreach_detail_::end( \
+ _foreach_col \
+ , BOOST_FOREACH_TYPEOF(COL) \
+ , BOOST_FOREACH_SHOULD_COPY(COL))
+
+#define BOOST_FOREACH_DONE(COL) \
+ boost::foreach_detail_::done( \
+ _foreach_cur \
+ , _foreach_end \
+ , BOOST_FOREACH_TYPEOF(COL))
+
+#define BOOST_FOREACH_NEXT(COL) \
+ boost::foreach_detail_::next( \
+ _foreach_cur \
+ , BOOST_FOREACH_TYPEOF(COL))
+
+#define BOOST_FOREACH_DEREF(COL) \
+ boost::foreach_detail_::deref( \
+ _foreach_cur \
+ , BOOST_FOREACH_TYPEOF(COL))
+
+///////////////////////////////////////////////////////////////////////////////
+// BOOST_FOREACH
+//
+// For iterating over collections. Collections can be
+// arrays, null-terminated strings, or STL containers.
+// The loop variable can be a value or reference. For
+// example:
+//
+// std::list<int> int_list(/*stuff*/);
+// BOOST_FOREACH(int &i, int_list)
+// {
+// /*
+// * loop body goes here.
+// * i is a reference to the int in int_list.
+// */
+// }
+//
+// Alternately, you can declare the loop variable first,
+// so you can access it after the loop finishes. Obviously,
+// if you do it this way, then the loop variable cannot be
+// a reference.
+//
+// int i;
+// BOOST_FOREACH(i, int_list)
+// { ... }
+//
+#define BOOST_FOREACH(VAR, COL) \
+ BOOST_FOREACH_PREAMBLE() \
+ if (boost::foreach_detail_::auto_any_t _foreach_col = BOOST_FOREACH_CONTAIN(COL)) {} else \
+ if (boost::foreach_detail_::auto_any_t _foreach_cur = BOOST_FOREACH_BEGIN(COL)) {} else \
+ if (boost::foreach_detail_::auto_any_t _foreach_end = BOOST_FOREACH_END(COL)) {} else \
+ for (bool _foreach_continue = true; \
+ _foreach_continue && !BOOST_FOREACH_DONE(COL); \
+ _foreach_continue ? BOOST_FOREACH_NEXT(COL) : (void)0) \
+ if (boost::foreach_detail_::set_false(_foreach_continue)) {} else \
+ for (VAR = BOOST_FOREACH_DEREF(COL); !_foreach_continue; _foreach_continue = true)
+
+#endif
diff --git a/boost/boost/format.hpp b/boost/boost/format.hpp
new file mode 100644
index 00000000000..73464a819f8
--- /dev/null
+++ b/boost/boost/format.hpp
@@ -0,0 +1,59 @@
+// ----------------------------------------------------------------------------
+// format.hpp : primary header
+// ----------------------------------------------------------------------------
+
+// Copyright Samuel Krempp 2003. 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)
+
+// See http://www.boost.org/libs/format for library home page
+
+
+// ----------------------------------------------------------------------------
+
+#ifndef BOOST_FORMAT_HPP
+#define BOOST_FORMAT_HPP
+
+#include <vector>
+#include <string>
+#include <boost/detail/workaround.hpp>
+#include <boost/config.hpp>
+
+#ifndef BOOST_NO_STD_LOCALE
+#include <locale>
+#endif
+
+// *** Compatibility framework
+#include <boost/format/detail/compat_workarounds.hpp>
+
+#ifdef BOOST_NO_LOCALE_ISIDIGIT
+#include <cctype> // we'll use the non-locale <cctype>'s std::isdigit(int)
+#endif
+
+// **** Forward declarations ----------------------------------
+#include <boost/format/format_fwd.hpp> // basic_format<Ch,Tr>, and other frontends
+#include <boost/format/internals_fwd.hpp> // misc forward declarations for internal use
+
+// **** Auxiliary structs (stream_format_state<Ch,Tr> , and format_item<Ch,Tr> )
+#include <boost/format/internals.hpp>
+
+// **** Format class interface --------------------------------
+#include <boost/format/format_class.hpp>
+
+// **** Exceptions -----------------------------------------------
+#include <boost/format/exceptions.hpp>
+
+// **** Implementation -------------------------------------------
+#include <boost/format/format_implementation.hpp> // member functions
+#include <boost/format/group.hpp> // class for grouping arguments
+#include <boost/format/feed_args.hpp> // argument-feeding functions
+#include <boost/format/parsing.hpp> // format-string parsing (member-)functions
+
+// **** Implementation of the free functions ----------------------
+#include <boost/format/free_funcs.hpp>
+
+
+// *** Undefine 'local' macros :
+#include <boost/format/detail/unset_macros.hpp>
+
+#endif // BOOST_FORMAT_HPP
diff --git a/boost/boost/format/alt_sstream.hpp b/boost/boost/format/alt_sstream.hpp
new file mode 100644
index 00000000000..e236be35266
--- /dev/null
+++ b/boost/boost/format/alt_sstream.hpp
@@ -0,0 +1,176 @@
+// ----------------------------------------------------------------------------
+// alt_sstream.hpp : alternative stringstream
+// ----------------------------------------------------------------------------
+
+// Copyright Samuel Krempp 2003. 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)
+
+// See http://www.boost.org/libs/format for library home page
+
+// ----------------------------------------------------------------------------
+
+
+
+#ifndef BOOST_SK_ALT_SSTREAM_HPP
+#define BOOST_SK_ALT_SSTREAM_HPP
+
+#include <string>
+#include <boost/format/detail/compat_workarounds.hpp>
+#include <boost/utility/base_from_member.hpp>
+#include <boost/shared_ptr.hpp>
+#include <boost/assert.hpp>
+
+namespace boost {
+ namespace io {
+
+ template<class Ch, class Tr=::std::char_traits<Ch>,
+ class Alloc=::std::allocator<Ch> >
+ class basic_altstringbuf;
+
+ template<class Ch, class Tr =::std::char_traits<Ch>,
+ class Alloc=::std::allocator<Ch> >
+ class basic_oaltstringstream;
+
+
+ template<class Ch, class Tr, class Alloc>
+ class basic_altstringbuf
+ : public ::std::basic_streambuf<Ch, Tr>
+ {
+ typedef ::std::basic_streambuf<Ch, Tr> streambuf_t;
+ typedef typename CompatAlloc<Alloc>::compatible_type compat_allocator_type;
+ typedef typename CompatTraits<Tr>::compatible_type compat_traits_type;
+ public:
+ typedef Ch char_type;
+ typedef Tr traits_type;
+ typedef typename compat_traits_type::int_type int_type;
+ typedef typename compat_traits_type::pos_type pos_type;
+ typedef typename compat_traits_type::off_type off_type;
+ typedef Alloc allocator_type;
+ typedef ::std::basic_string<Ch, Tr, Alloc> string_type;
+ typedef typename string_type::size_type size_type;
+
+ typedef ::std::streamsize streamsize;
+
+
+ explicit basic_altstringbuf(std::ios_base::openmode mode
+ = std::ios_base::in | std::ios_base::out)
+ : putend_(NULL), is_allocated_(false), mode_(mode)
+ {}
+ explicit basic_altstringbuf(const string_type& s,
+ ::std::ios_base::openmode mode
+ = ::std::ios_base::in | ::std::ios_base::out)
+ : putend_(NULL), is_allocated_(false), mode_(mode)
+ { dealloc(); str(s); }
+ virtual ~basic_altstringbuf()
+ { dealloc(); }
+ using streambuf_t::pbase;
+ using streambuf_t::pptr;
+ using streambuf_t::epptr;
+ using streambuf_t::eback;
+ using streambuf_t::gptr;
+ using streambuf_t::egptr;
+
+ void clear_buffer();
+ void str(const string_type& s);
+
+ // 0-copy access :
+ Ch * begin() const;
+ size_type size() const;
+ size_type cur_size() const; // stop at current pointer
+ Ch * pend() const // the highest position reached by pptr() since creation
+ { return ((putend_ < pptr()) ? pptr() : putend_); }
+ size_type pcount() const
+ { return static_cast<size_type>( pptr() - pbase()) ;}
+
+ // copy buffer to string :
+ string_type str() const
+ { return string_type(begin(), size()); }
+ string_type cur_str() const
+ { return string_type(begin(), cur_size()); }
+ protected:
+ explicit basic_altstringbuf (basic_altstringbuf * s,
+ ::std::ios_base::openmode mode
+ = ::std::ios_base::in | ::std::ios_base::out)
+ : putend_(NULL), is_allocated_(false), mode_(mode)
+ { dealloc(); str(s); }
+
+ virtual pos_type seekoff(off_type off, ::std::ios_base::seekdir way,
+ ::std::ios_base::openmode which
+ = ::std::ios_base::in | ::std::ios_base::out);
+ virtual pos_type seekpos (pos_type pos,
+ ::std::ios_base::openmode which
+ = ::std::ios_base::in | ::std::ios_base::out);
+ virtual int_type underflow();
+ virtual int_type pbackfail(int_type meta = compat_traits_type::eof());
+ virtual int_type overflow(int_type meta = compat_traits_type::eof());
+ void dealloc();
+ private:
+ enum { alloc_min = 256}; // minimum size of allocations
+
+ Ch *putend_; // remembers (over seeks) the highest value of pptr()
+ bool is_allocated_;
+ ::std::ios_base::openmode mode_;
+ compat_allocator_type alloc_; // the allocator object
+ };
+
+
+// --- class basic_oaltstringstream ----------------------------------------
+ template <class Ch, class Tr, class Alloc>
+ class basic_oaltstringstream
+ : private base_from_member< shared_ptr< basic_altstringbuf< Ch, Tr, Alloc> > >,
+ public ::std::basic_ostream<Ch, Tr>
+ {
+ class No_Op {
+ // used as no-op deleter for (not-owner) shared_pointers
+ public:
+ template<class T>
+ const T & operator()(const T & arg) { return arg; }
+ };
+ typedef ::std::basic_ostream<Ch, Tr> stream_t;
+ typedef boost::base_from_member<boost::shared_ptr<
+ basic_altstringbuf<Ch,Tr, Alloc> > >
+ pbase_type;
+ typedef ::std::basic_string<Ch, Tr, Alloc> string_type;
+ typedef typename string_type::size_type size_type;
+ typedef basic_altstringbuf<Ch, Tr, Alloc> stringbuf_t;
+ public:
+ typedef Alloc allocator_type;
+ basic_oaltstringstream()
+ : pbase_type(new stringbuf_t), stream_t(rdbuf())
+ { }
+ basic_oaltstringstream(::boost::shared_ptr<stringbuf_t> buf)
+ : pbase_type(buf), stream_t(rdbuf())
+ { }
+ basic_oaltstringstream(stringbuf_t * buf)
+ : pbase_type(buf, No_Op() ), stream_t(rdbuf())
+ { }
+ stringbuf_t * rdbuf() const
+ { return pbase_type::member.get(); }
+ void clear_buffer()
+ { rdbuf()->clear_buffer(); }
+
+ // 0-copy access :
+ Ch * begin() const
+ { return rdbuf()->begin(); }
+ size_type size() const
+ { return rdbuf()->size(); }
+ size_type cur_size() const // stops at current position
+ { return rdbuf()->cur_size(); }
+
+ // copy buffer to string :
+ string_type str() const // [pbase, epptr[
+ { return rdbuf()->str(); }
+ string_type cur_str() const // [pbase, pptr[
+ { return rdbuf()->cur_str(); }
+ void str(const string_type& s)
+ { rdbuf()->str(s); }
+ };
+
+ } // N.S. io
+} // N.S. boost
+
+#include <boost/format/alt_sstream_impl.hpp>
+
+#endif // include guard
+
diff --git a/boost/boost/format/alt_sstream_impl.hpp b/boost/boost/format/alt_sstream_impl.hpp
new file mode 100644
index 00000000000..ee9c3abd1ea
--- /dev/null
+++ b/boost/boost/format/alt_sstream_impl.hpp
@@ -0,0 +1,296 @@
+// ----------------------------------------------------------------------------
+// alt_sstream_impl.hpp : alternative stringstream, templates implementation
+// ----------------------------------------------------------------------------
+
+// Copyright Samuel Krempp 2003. 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)
+
+// See http://www.boost.org/libs/format for library home page
+
+// ----------------------------------------------------------------------------
+
+#ifndef BOOST_SK_ALT_SSTREAM_IMPL_HPP
+#define BOOST_SK_ALT_SSTREAM_IMPL_HPP
+
+namespace boost {
+ namespace io {
+// --- Implementation ------------------------------------------------------//
+
+ template<class Ch, class Tr, class Alloc>
+ void basic_altstringbuf<Ch, Tr, Alloc>::
+ clear_buffer () {
+ const Ch * p = pptr();
+ const Ch * b = pbase();
+ if(p != NULL && p != b) {
+ seekpos(0, ::std::ios_base::out);
+ }
+ p = gptr();
+ b = eback();
+ if(p != NULL && p != b) {
+ seekpos(0, ::std::ios_base::in);
+ }
+ }
+
+ template<class Ch, class Tr, class Alloc>
+ void basic_altstringbuf<Ch, Tr, Alloc>::
+ str (const string_type& s) {
+ size_type sz=s.size();
+ if(sz != 0 && mode_ & (::std::ios_base::in | ::std::ios_base::out) ) {
+ Ch *new_ptr = alloc_.allocate(sz, is_allocated_? eback() : 0);
+ // if this didnt throw, we're safe, update the buffer
+ dealloc();
+ sz = s.copy(new_ptr, sz);
+ putend_ = new_ptr + sz;
+ if(mode_ & ::std::ios_base::in)
+ streambuf_t::setg(new_ptr, new_ptr, new_ptr + sz);
+ if(mode_ & ::std::ios_base::out) {
+ streambuf_t::setp(new_ptr, new_ptr + sz);
+ if(mode_ & (::std::ios_base::app | ::std::ios_base::ate))
+ streambuf_t::pbump(static_cast<int>(sz));
+ if(gptr() == NULL)
+ streambuf_t::setg(new_ptr, NULL, new_ptr);
+ }
+ is_allocated_ = true;
+ }
+ else
+ dealloc();
+ }
+ template<class Ch, class Tr, class Alloc>
+ Ch* basic_altstringbuf<Ch, Tr, Alloc>::
+ begin () const {
+ if(mode_ & ::std::ios_base::out && pptr() != NULL)
+ return pbase();
+ else if(mode_ & ::std::ios_base::in && gptr() != NULL)
+ return eback();
+ return NULL;
+ }
+
+ template<class Ch, class Tr, class Alloc>
+ typename std::basic_string<Ch,Tr,Alloc>::size_type
+ basic_altstringbuf<Ch, Tr, Alloc>::
+ size () const {
+ if(mode_ & ::std::ios_base::out && pptr())
+ return static_cast<size_type>(pend() - pbase());
+ else if(mode_ & ::std::ios_base::in && gptr())
+ return static_cast<size_type>(egptr() - eback());
+ else
+ return 0;
+ }
+
+ template<class Ch, class Tr, class Alloc>
+ typename std::basic_string<Ch,Tr,Alloc>::size_type
+ basic_altstringbuf<Ch, Tr, Alloc>::
+ cur_size () const {
+ if(mode_ & ::std::ios_base::out && pptr())
+ return static_cast<streamsize>( pptr() - pbase());
+ else if(mode_ & ::std::ios_base::in && gptr())
+ return static_cast<streamsize>( gptr() - eback());
+ else
+ return 0;
+ }
+
+ template<class Ch, class Tr, class Alloc>
+ typename basic_altstringbuf<Ch, Tr, Alloc>::pos_type
+ basic_altstringbuf<Ch, Tr, Alloc>::
+ seekoff (off_type off, ::std::ios_base::seekdir way, ::std::ios_base::openmode which) {
+ if(pptr() != NULL && putend_ < pptr())
+ putend_ = pptr();
+ if(which & ::std::ios_base::in && gptr() != NULL) {
+ // get area
+ if(way == ::std::ios_base::end)
+ off += static_cast<off_type>(putend_ - gptr());
+ else if(way == ::std::ios_base::beg)
+ off += static_cast<off_type>(eback() - gptr());
+ else if(way != ::std::ios_base::cur || (which & ::std::ios_base::out) )
+ // (altering in&out is only supported if way is beg or end, not cur)
+ return pos_type(off_type(-1));
+ if(eback() <= off+gptr() && off+gptr() <= putend_ ) {
+ // set gptr
+ streambuf_t::gbump(off);
+ if(which & ::std::ios_base::out && pptr() != NULL)
+ // update pptr to match gptr
+ streambuf_t::pbump(static_cast<int>(gptr()-pptr()));
+ }
+ else
+ off = off_type(-1);
+ }
+ else if(which & ::std::ios_base::out && pptr() != NULL) {
+ // put area
+ if(way == ::std::ios_base::end)
+ off += static_cast<off_type>(putend_ - pptr());
+ else if(way == ::std::ios_base::beg)
+ off += static_cast<off_type>(pbase() - pptr());
+ else if(way != ::std::ios_base::beg)
+ return pos_type(off_type(-1));
+ if(pbase() <= off+pptr() && off+pptr() <= putend_)
+ // set pptr
+ streambuf_t::pbump(off);
+ else
+ off = off_type(-1);
+ }
+ else // neither in nor out
+ off = off_type(-1);
+ return (pos_type(off));
+ }
+ //- end seekoff(..)
+
+
+ template<class Ch, class Tr, class Alloc>
+ typename basic_altstringbuf<Ch, Tr, Alloc>::pos_type
+ basic_altstringbuf<Ch, Tr, Alloc>::
+ seekpos (pos_type pos, ::std::ios_base::openmode which) {
+ off_type off = off_type(pos); // operation guaranteed by §27.4.3.2 table 88
+ if(pptr() != NULL && putend_ < pptr())
+ putend_ = pptr();
+ if(off != off_type(-1)) {
+ if(which & ::std::ios_base::in && gptr() != NULL) {
+ // get area
+ if(0 <= off && off <= putend_ - eback()) {
+ streambuf_t::gbump(static_cast<int>(eback() - gptr() + off));
+ if(which & ::std::ios_base::out && pptr() != NULL) {
+ // update pptr to match gptr
+ streambuf_t::pbump(static_cast<int>(gptr()-pptr()));
+ }
+ }
+ else
+ off = off_type(-1);
+ }
+ else if(which & ::std::ios_base::out && pptr() != NULL) {
+ // put area
+ if(0 <= off && off <= putend_ - eback())
+ streambuf_t::pbump(static_cast<int>(eback() - pptr() + off));
+ else
+ off = off_type(-1);
+ }
+ else // neither in nor out
+ off = off_type(-1);
+ return (pos_type(off));
+ }
+ else {
+ BOOST_ASSERT(0); // §27.4.3.2 allows undefined-behaviour here
+ return pos_type(off_type(-1));
+ }
+ }
+ // -end seekpos(..)
+
+
+ template<class Ch, class Tr, class Alloc>
+ typename basic_altstringbuf<Ch, Tr, Alloc>::int_type
+ basic_altstringbuf<Ch, Tr, Alloc>::
+ underflow () {
+ if(gptr() == NULL) // no get area -> nothing to get.
+ return (compat_traits_type::eof());
+ else if(gptr() < egptr()) // ok, in buffer
+ return (compat_traits_type::to_int_type(*gptr()));
+ else if(mode_ & ::std::ios_base::in && pptr() != NULL
+ && (gptr() < pptr() || gptr() < putend_) )
+ { // expand get area
+ if(putend_ < pptr())
+ putend_ = pptr(); // remember pptr reached this far
+ streambuf_t::setg(eback(), gptr(), putend_);
+ return (compat_traits_type::to_int_type(*gptr()));
+ }
+ else // couldnt get anything. EOF.
+ return (compat_traits_type::eof());
+ }
+ // -end underflow(..)
+
+
+ template<class Ch, class Tr, class Alloc>
+ typename basic_altstringbuf<Ch, Tr, Alloc>::int_type
+ basic_altstringbuf<Ch, Tr, Alloc>::
+ pbackfail (int_type meta) {
+ if(gptr() != NULL && (eback() < gptr())
+ && (mode_ & (::std::ios_base::out)
+ || compat_traits_type::eq_int_type(compat_traits_type::eof(), meta)
+ || compat_traits_type::eq(compat_traits_type::to_char_type(meta), gptr()[-1]) ) ) {
+ streambuf_t::gbump(-1); // back one character
+ if(!compat_traits_type::eq_int_type(compat_traits_type::eof(), meta))
+ // put-back meta into get area
+ *gptr() = compat_traits_type::to_char_type(meta);
+ return (compat_traits_type::not_eof(meta));
+ }
+ else
+ return (compat_traits_type::eof()); // failed putback
+ }
+ // -end pbackfail(..)
+
+
+ template<class Ch, class Tr, class Alloc>
+ typename basic_altstringbuf<Ch, Tr, Alloc>::int_type
+ basic_altstringbuf<Ch, Tr, Alloc>::
+ overflow (int_type meta) {
+ if(compat_traits_type::eq_int_type(compat_traits_type::eof(), meta))
+ return compat_traits_type::not_eof(meta); // nothing to do
+ else if(pptr() != NULL && pptr() < epptr()) {
+ streambuf_t::sputc(compat_traits_type::to_char_type(meta));
+ return meta;
+ }
+ else if(! (mode_ & ::std::ios_base::out))
+ // no write position, and cant make one
+ return compat_traits_type::eof();
+ else { // make a write position available
+ std::size_t prev_size = pptr() == NULL ? 0 : epptr() - eback();
+ std::size_t new_size = prev_size;
+ // exponential growth : size *= 1.5
+ std::size_t add_size = new_size / 2;
+ if(add_size < alloc_min)
+ add_size = alloc_min;
+ Ch * newptr = NULL, *oldptr = eback();
+
+ // make sure adding add_size wont overflow size_t
+ while (0 < add_size && ((std::numeric_limits<std::size_t>::max)()
+ - add_size < new_size) )
+ add_size /= 2;
+ if(0 < add_size) {
+ new_size += add_size;
+ newptr = alloc_.allocate(new_size, is_allocated_? oldptr : 0);
+ }
+
+ if(0 < prev_size)
+ compat_traits_type::copy(newptr, oldptr, prev_size);
+ if(is_allocated_)
+ alloc_.deallocate(oldptr, prev_size);
+ is_allocated_=true;
+
+ if(prev_size == 0) { // first allocation
+ putend_ = newptr;
+ streambuf_t::setp(newptr, newptr + new_size);
+ if(mode_ & ::std::ios_base::in)
+ streambuf_t::setg(newptr, newptr, newptr + 1);
+ else
+ streambuf_t::setg(newptr, 0, newptr);
+ }
+ else { // update pointers
+ putend_ = putend_ - oldptr + newptr;
+ int pptr_count = static_cast<int>(pptr()-pbase());
+ int gptr_count = static_cast<int>(gptr()-eback());
+ streambuf_t::setp(pbase() - oldptr + newptr, newptr + new_size);
+ streambuf_t::pbump(pptr_count);
+ if(mode_ & ::std::ios_base::in)
+ streambuf_t::setg(newptr, newptr + gptr_count, pptr() + 1);
+ else
+ streambuf_t::setg(newptr, 0, newptr);
+ }
+ streambuf_t::sputc(compat_traits_type::to_char_type(meta));
+ return meta;
+ }
+ }
+ // -end overflow(..)
+
+ template<class Ch, class Tr, class Alloc>
+ void basic_altstringbuf<Ch, Tr, Alloc>:: dealloc() {
+ if(is_allocated_)
+ alloc_.deallocate(eback(), (pptr() != NULL ? epptr() : egptr()) - eback());
+ is_allocated_ = false;
+ streambuf_t::setg(0, 0, 0);
+ streambuf_t::setp(0, 0);
+ putend_ = NULL;
+ }
+
+ }// N.S. io
+} // N.S. boost
+
+#endif // include guard
+
diff --git a/boost/boost/format/detail/compat_workarounds.hpp b/boost/boost/format/detail/compat_workarounds.hpp
new file mode 100644
index 00000000000..8e51514f3ef
--- /dev/null
+++ b/boost/boost/format/detail/compat_workarounds.hpp
@@ -0,0 +1,86 @@
+// ----------------------------------------------------------------------------
+// compat_workarounds : general framework for non-conformance workarounds
+// ----------------------------------------------------------------------------
+
+// Copyright Samuel Krempp 2003. 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)
+
+// see http://www.boost.org/libs/format for library home page
+
+// ----------------------------------------------------------------------------
+
+
+// this file defines wrapper classes to hide non-conforming
+// std::char_traits<> and std::allocator<> traits
+// and Includes : config_macros.hpp (defines config macros
+// and compiler-specific switches)
+
+// Non-conformant Std-libs fail to supply conformant traits (std::char_traits,
+// std::allocator) and/or the std::string doesnt support them.
+// We don't want to have hundreds of #ifdef workarounds, so we define
+// replacement traits.
+// But both char_traits and allocator traits are visible in the interface,
+// (inside the final string type), thus we need to keep both
+// the replacement type (typedefed to 'compatible_type') for real use,
+// and the original stdlib type (typedef to 'type_for_string') for interface
+// visibility. This is what Compat* classes do (as well as be transparent
+// when good allocator and char traits are present)
+
+#ifndef BOOST_FORMAT_COMPAT_WORKAROUNDS_HPP
+#define BOOST_FORMAT_COMPAT_WORKAROUNDS_HPP
+
+namespace boost {
+ namespace io {
+
+ // gcc-2.95 char traits (non-conformantly named string_char_traits)
+ // lack several functions so we extend them in a replacement class.
+ template<class Tr>
+ class CompatTraits;
+
+ // std::allocator<Ch> in gcc-2.95 is ok, but basic_string only works
+ // with plain 'std::alloc' still, alt_stringbuf requires a functionnal
+ // alloc template argument, so we need a replacement allocator
+ template<class Alloc>
+ class CompatAlloc;
+ } // N.S. io
+}// N.S. boost
+
+
+#include <boost/format/detail/config_macros.hpp>
+ // sets-up macros and load compiler-specific workarounds headers.
+
+#if !defined(BOOST_FORMAT_STREAMBUF_DEFINED)
+// workarounds-gcc-2.95 might have defined own streambuf
+#include <streambuf>
+#endif
+
+#if !defined(BOOST_FORMAT_OSTREAM_DEFINED)
+// workarounds-gcc-2.95 might already have included <iostream>
+#include <ostream>
+#endif
+
+
+
+namespace boost {
+ namespace io {
+
+ // **** CompatTraits general definitions : ----------------------------
+ template<class Tr>
+ class CompatTraits
+ { // general case : be transparent
+ public:
+ typedef Tr compatible_type;
+ };
+
+ // **** CompatAlloc general definitions : -----------------------------
+ template<class Alloc>
+ class CompatAlloc
+ { // general case : be transparent
+ public:
+ typedef Alloc compatible_type;
+ };
+
+ } //N.S. io
+} // N.S. boost
+#endif // include guard
diff --git a/boost/boost/format/detail/config_macros.hpp b/boost/boost/format/detail/config_macros.hpp
new file mode 100644
index 00000000000..1f01b1789bd
--- /dev/null
+++ b/boost/boost/format/detail/config_macros.hpp
@@ -0,0 +1,97 @@
+// -*- C++ -*-
+// ----------------------------------------------------------------------------
+// config_macros.hpp : configuration macros for the format library
+// only BOOST_IO_STD is absolutely needed (it should be 'std::' in general)
+// others are compiler-specific workaround macros used in #ifdef switches
+// ----------------------------------------------------------------------------
+
+// Copyright Samuel Krempp 2003. 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)
+
+// see http://www.boost.org/libs/format for library home page
+
+
+// ----------------------------------------------------------------------------
+
+#ifndef BOOST_FORMAT_CONFIG_MACROS_HPP
+#define BOOST_FORMAT_CONFIG_MACROS_HPP
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+// make sure our local macros wont override something :
+#if defined(BOOST_NO_LOCALE_ISDIGIT) || defined(BOOST_OVERLOAD_FOR_NON_CONST) \
+ || defined(BOOST_IO_STD) || defined( BOOST_IO_NEEDS_USING_DECLARATION ) \
+ || defined(BOOST_NO_TEMPLATE_STD_STREAM) \
+ || defined(BOOST_FORMAT_STREAMBUF_DEFINED) || defined(BOOST_FORMAT_OSTREAM_DEFINED)
+#error "boost::format uses a local macro that is already defined."
+#endif
+
+// specific workarounds. each header can define BOOS_IO_STD if it
+// needs. (e.g. because of IO_NEEDS_USING_DECLARATION)
+#include <boost/format/detail/workarounds_gcc-2_95.hpp>
+#include <boost/format/detail/workarounds_stlport.hpp>
+
+#ifndef BOOST_IO_STD
+# define BOOST_IO_STD ::std::
+#endif
+
+#if defined(BOOST_NO_STD_LOCALE) || \
+ ( BOOST_WORKAROUND(__BORLANDC__, <= 0x564) \
+ || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT( 0x570 ) ) )
+// some future __BORLANDC__ >0x564 versions might not need this
+// 0x570 is Borland's kylix branch
+#define BOOST_NO_LOCALE_ISDIGIT
+#endif
+
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x570) ) || BOOST_WORKAROUND( BOOST_MSVC, BOOST_TESTED_AT(1300))
+#define BOOST_NO_OVERLOAD_FOR_NON_CONST
+#endif
+
+// gcc-2.95's native stringstream is not usable
+#if BOOST_WORKAROUND(__GNUC__, < 3) && !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION)
+#define BOOST_FORMAT_IGNORE_STRINGSTREAM
+#endif
+
+
+// **** Workaround for io streams, stlport and msvc.
+#ifdef BOOST_IO_NEEDS_USING_DECLARATION
+namespace boost {
+ using std::char_traits;
+ using std::basic_ostream;
+ namespace io {
+ using std::basic_ostream;
+ namespace detail {
+ using std::basic_ios;
+ using std::basic_ostream;
+ }
+ }
+#if ! defined(BOOST_NO_STD_LOCALE)
+ using std::locale;
+ namespace io {
+ using std::locale;
+ namespace detail {
+ using std::locale;
+ }
+ }
+#endif // locale
+}
+ // -end N.S. boost
+#endif // needs_using_declaration
+
+
+// *** hide std::locale if it doesnt exist.
+// this typedef is either std::locale or int, avoids placing ifdefs everywhere
+namespace boost { namespace io { namespace detail {
+#if ! defined(BOOST_NO_STD_LOCALE)
+ typedef BOOST_IO_STD locale locale_t;
+#else
+ typedef int locale_t;
+#endif
+} } }
+
+
+// ----------------------------------------------------------------------------
+
+#endif // BOOST_FORMAT_MACROS_DEFAULT_HPP
diff --git a/boost/boost/format/detail/msvc_disambiguater.hpp b/boost/boost/format/detail/msvc_disambiguater.hpp
new file mode 100644
index 00000000000..f12e5e97b21
--- /dev/null
+++ b/boost/boost/format/detail/msvc_disambiguater.hpp
@@ -0,0 +1,56 @@
+// ----------------------------------------------------------------------------
+// msvc_disambiguater.hpp : msvc workarounds. (for put_{head|last} overloads)
+// the trick was described in boost's list by Aleksey Gurtovoy
+// ----------------------------------------------------------------------------
+
+// Copyright Samuel Krempp 2003. 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)
+
+// see http://www.boost.org/libs/format for library home page
+
+// ----------------------------------------------------------------------------
+
+#ifndef BOOST_MSVC_DISAMBIGUATER_HPP
+#define BOOST_MSVC_DISAMBIGUATER_HPP
+
+#if BOOST_WORKAROUND( BOOST_MSVC, <= 1300) || \
+ BOOST_WORKAROUND(__DECCXX_VER, BOOST_TESTED_AT(60590042))
+ // this whole header is specifically for msvc up to 7.0
+
+#include <boost/format/group.hpp>
+#include <ostream>
+
+namespace boost {
+namespace io {
+namespace detail {
+
+template< class Ch, class Tr, class T >
+struct disambiguater
+{
+ template< typename U >
+ static void put_head(BOOST_IO_STD basic_ostream<Ch, Tr>& os, group1<U> const& x, long)
+ {
+ os << group_head(x.a1_);
+ }
+ static void put_head(BOOST_IO_STD basic_ostream<Ch, Tr>& os, T const& x, int)
+ {
+ }
+ template< typename U >
+ static void put_last(BOOST_IO_STD basic_ostream<Ch, Tr>& os, group1<U> const& x, long)
+ {
+ os << group_last(x.a1_);
+ }
+ static void put_last(BOOST_IO_STD basic_ostream<Ch, Tr>& os, T const& x, int)
+ {
+ os << x;
+ }
+};
+
+} // namespace detail
+} // namespace io
+} // namespace boost
+
+#endif // -BOOST_MSVC
+
+#endif // -BOOST_MSVC_DISAMBIGUATER_HPP
diff --git a/boost/boost/format/detail/unset_macros.hpp b/boost/boost/format/detail/unset_macros.hpp
new file mode 100644
index 00000000000..b3ac47b42be
--- /dev/null
+++ b/boost/boost/format/detail/unset_macros.hpp
@@ -0,0 +1,34 @@
+// ----------------------------------------------------------------------------
+// unset_macros.hpp
+// ----------------------------------------------------------------------------
+
+// Copyright Samuel Krempp 2003. 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)
+
+// See http://www.boost.org/libs/format for library home page
+
+// ----------------------------------------------------------------------------
+
+// *** Undefine 'local' macros :
+#ifdef BOOST_NO_OVERLOAD_FOR_NON_CONST
+#undef BOOST_NO_OVERLOAD_FOR_NON_CONST
+#endif
+#ifdef BOOST_NO_LOCALE_ISDIGIT
+#undef BOOST_NO_LOCALE_ISDIGIT
+#endif
+#ifdef BOOST_IO_STD
+#undef BOOST_IO_STD
+#endif
+#ifdef BOOST_IO_NEEDS_USING_DECLARATION
+#undef BOOST_IO_NEEDS_USING_DECLARATION
+#endif
+#ifdef BOOST_NO_TEMPLATE_STD_STREAM
+#undef BOOST_NO_TEMPLATE_STD_STREAM
+#endif
+#ifdef BOOST_FORMAT_STREAMBUF_DEFINED
+#undef BOOST_FORMAT_STREAMBUF_DEFINED
+#endif
+#ifdef BOOST_FORMAT_OSTREAM_DEFINED
+#undef BOOST_FORMAT_OSTREAM_DEFINED
+#endif
diff --git a/boost/boost/format/detail/workarounds_gcc-2_95.hpp b/boost/boost/format/detail/workarounds_gcc-2_95.hpp
new file mode 100644
index 00000000000..8c49d42d02c
--- /dev/null
+++ b/boost/boost/format/detail/workarounds_gcc-2_95.hpp
@@ -0,0 +1,162 @@
+// ----------------------------------------------------------------------------
+// workarounds for gcc < 3.0.
+// ----------------------------------------------------------------------------
+
+// Copyright Samuel Krempp 2003. 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)
+
+// See http://www.boost.org/libs/format for library home page
+
+
+// ----------------------------------------------------------------------------
+
+// There's a lot to do, the stdlib shipped with gcc prior to 3.x
+// was terribly non-conforming.
+// . defines macros switches
+// . supplies template classes basic_foo<char,Tr> where gcc only supplies foo.
+// i.e :
+// - basic_ios<char, Tr> from ios
+// - basic_ostream<char, Tr> from ostream
+// - basic_srteambuf<char, Tr> from streambuf
+// these can be used transparently. (it obviously does not work for wchar_t)
+// . specialise CompatAlloc and CompatTraits to wrap gcc-2.95's
+// string_char_traits and std::alloc
+
+#if BOOST_WORKAROUND(__GNUC__, < 3) && !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION)
+ // only for gcc-2.95's native stdlib
+
+#ifndef BOOST_FORMAT_WORKAROUNDS_GCC295_H
+#define BOOST_FORMAT_WORKAROUNDS_GCC295_H
+
+// SGI STL doesnt have <ostream> and others, so we need iostream.
+#include <iostream>
+#define BOOST_FORMAT_OSTREAM_DEFINED
+
+#include <streambuf.h>
+#define BOOST_FORMAT_STREAMBUF_DEFINED
+
+#define BOOST_NO_TEMPLATE_STD_STREAM
+
+#ifndef BOOST_IO_STD
+# define BOOST_IO_STD std::
+#endif
+
+
+
+// ***
+// gcc's simple classes turned into standard-like template classes :
+
+namespace std {
+
+
+ // gcc has string_char_traits, it's incomplete.
+ // we declare a std::char_traits, and specialize CompatTraits<..> on it
+ // to do what is required
+ template<class Ch>
+ class char_traits; // no definition here, we will just use it as a tag.
+
+ template <class Ch, class Tr>
+ class basic_streambuf;
+
+ template <class Tr>
+ class basic_streambuf<char, Tr> : public streambuf {
+ };
+
+ template <class Ch, class Tr=::std::char_traits<Ch> >
+ class basic_ios;
+
+ template <class Tr>
+ class basic_ios<char, Tr> : public ostream {
+ public:
+ basic_ios(streambuf * p) : ostream(p) {};
+ char fill() const { return ios::fill(); } // gcc returns wchar..
+ char fill(char c) { return ios::fill(c); } // gcc takes wchar..
+ char widen(char c) { return c; }
+ char narrow(char c, char def) { return c; }
+ basic_ios& copyfmt(const ios& right) {
+ fill(right.fill());
+ flags(right.flags() );
+ exceptions(right.exceptions());
+ width(right.width());
+ precision(right.precision());
+ return *this;
+ }
+ };
+
+
+ typedef ios ios_base;
+
+ template <class Ch, class Tr>
+ class basic_ostream;
+
+ template <class Tr>
+ class basic_ostream<char, Tr> : public basic_ios<char, Tr>
+ {
+ public:
+ basic_ostream(streambuf * p) : basic_ios<char,Tr> (p) {}
+ };
+
+} // namespace std
+
+
+namespace boost {
+ namespace io {
+
+
+ // ** CompatTraits gcc2.95 specialisations ----------------------------
+ template<class Ch>
+ class CompatTraits< ::std::string_char_traits<Ch> >
+ : public ::std::string_char_traits<Ch>
+ {
+ public:
+ typedef CompatTraits compatible_type;
+
+ typedef Ch char_type;
+ typedef int int_type;
+ typedef ::std::streampos pos_type;
+ typedef ::std::streamoff off_type;
+
+ static char_type
+ to_char_type(const int_type& meta) {
+ return static_cast<char_type>(meta); }
+ static int_type
+ to_int_type(const char_type& ch) {
+ return static_cast<int_type>(static_cast<unsigned char>(ch) );}
+ static bool
+ eq_int_type(const int_type& left, const int_type& right) {
+ return left == right; }
+ static int_type
+ eof() {
+ return static_cast<int_type>(EOF);
+ }
+ static int_type
+ not_eof(const int_type& meta) {
+ return (meta == eof()) ? 0 : meta;
+ }
+ };
+
+ template<class Ch>
+ class CompatTraits< ::std::char_traits<Ch> > {
+ public:
+ typedef CompatTraits< ::std::string_char_traits<Ch> > compatible_type;
+ };
+
+ // ** CompatAlloc gcc-2.95 specialisations ---------------------------
+ template<>
+ class CompatAlloc< ::std::alloc>
+ {
+ public:
+ typedef ::std::allocator<char> compatible_type;
+ };
+
+ } // N.S. io
+} // N.S. boost
+
+
+
+
+
+#endif // include guard
+
+#endif // if workaround
diff --git a/boost/boost/format/detail/workarounds_stlport.hpp b/boost/boost/format/detail/workarounds_stlport.hpp
new file mode 100644
index 00000000000..eb35dc17089
--- /dev/null
+++ b/boost/boost/format/detail/workarounds_stlport.hpp
@@ -0,0 +1,42 @@
+// ----------------------------------------------------------------------------
+// workarounds_stlport.hpp : workaround STLport issues
+// ----------------------------------------------------------------------------
+
+// Copyright Samuel Krempp 2003. 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)
+
+// see http://www.boost.org/libs/format for library home page
+
+// ----------------------------------------------------------------------------
+
+#ifndef BOOST_MACROS_STLPORT_HPP
+#define BOOST_MACROS_STLPORT_HPP
+
+#if defined(_STLPORT_VERSION) && BOOST_WORKAROUND( BOOST_MSVC, <= 1300)
+// msvc-6-stlport fails to find basic_string::append( iterator, iterator) when linking
+// might affect other MSwindows compilers
+#define BOOST_NO_STRING_APPEND
+#endif
+
+// *** This should go to "boost/config/stdlib/stlport.hpp".
+
+// If the streams are not native and there are problems with using templates
+// accross namespaces, we define some macros to enable a workaround for this.
+
+// STLport 4.5
+#if !defined(_STLP_OWN_IOSTREAMS) && defined(_STLP_USE_NAMESPACES) && defined(BOOST_NO_USING_TEMPLATE)
+# define BOOST_IO_STD
+# define BOOST_IO_NEEDS_USING_DECLARATION
+#endif
+
+// STLport 4.0
+#if !defined(__SGI_STL_OWN_IOSTREAMS) && defined(__STL_USE_OWN_NAMESPACE) && defined(BOOST_NO_USING_TEMPLATE)
+# define BOOST_IO_STD
+# define BOOST_IO_NEEDS_USING_DECLARATION
+#endif
+
+
+// ----------------------------------------------------------------------------
+
+#endif // BOOST_MACROS_STLPORT_HPP
diff --git a/boost/boost/format/exceptions.hpp b/boost/boost/format/exceptions.hpp
new file mode 100644
index 00000000000..9b2de834cf7
--- /dev/null
+++ b/boost/boost/format/exceptions.hpp
@@ -0,0 +1,103 @@
+// ----------------------------------------------------------------------------
+// boost/format/exceptions.hpp
+// ----------------------------------------------------------------------------
+
+// Copyright Samuel Krempp 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/format/ for library home page
+
+// ----------------------------------------------------------------------------
+
+#ifndef BOOST_FORMAT_EXCEPTIONS_HPP
+#define BOOST_FORMAT_EXCEPTIONS_HPP
+
+
+#include <stdexcept>
+
+
+namespace boost {
+
+ namespace io {
+
+// **** exceptions -----------------------------------------------
+
+ class format_error : public std::exception
+ {
+ public:
+ format_error() {}
+ virtual const char *what() const throw() {
+ return "boost::format_error: "
+ "format generic failure";
+ }
+ };
+
+ class bad_format_string : public format_error
+ {
+ std::size_t pos_, next_;
+ public:
+ bad_format_string(std::size_t pos, std::size_t size)
+ : pos_(pos), next_(size) {}
+ std::size_t get_pos() const { return pos_; }
+ std::size_t get_next() const { return next_; }
+ virtual const char *what() const throw() {
+ return "boost::bad_format_string: format-string is ill-formed";
+ }
+ };
+
+ class too_few_args : public format_error
+ {
+ std::size_t cur_, expected_;
+ public:
+ too_few_args(std::size_t cur, std::size_t expected)
+ : cur_(cur), expected_(expected) {}
+ std::size_t get_cur() const { return cur_; }
+ std::size_t get_expected() const { return expected_; }
+ virtual const char *what() const throw() {
+ return "boost::too_few_args: "
+ "format-string referred to more arguments than were passed";
+ }
+ };
+
+ class too_many_args : public format_error
+ {
+ std::size_t cur_, expected_;
+ public:
+ too_many_args(std::size_t cur, std::size_t expected)
+ : cur_(cur), expected_(expected) {}
+ std::size_t get_cur() const { return cur_; }
+ std::size_t get_expected() const { return expected_; }
+ virtual const char *what() const throw() {
+ return "boost::too_many_args: "
+ "format-string referred to less arguments than were passed";
+ }
+ };
+
+
+ class out_of_range : public format_error
+ {
+ int index_, beg_, end_; // range is [ beg, end [
+ public:
+ out_of_range(int index, int beg, int end)
+ : index_(index), beg_(beg), end_(end) {}
+ int get_index() const { return index_; }
+ int get_beg() const { return beg_; }
+ int get_end() const { return end_; }
+ virtual const char *what() const throw() {
+ return "boost::out_of_range: "
+ "tried to refer to an argument (or item) number which"
+ " is out of range, according to the format string";
+ }
+ };
+
+
+ } // namespace io
+
+} // namespace boost
+
+
+#endif // BOOST_FORMAT_EXCEPTIONS_HPP
diff --git a/boost/boost/format/feed_args.hpp b/boost/boost/format/feed_args.hpp
new file mode 100644
index 00000000000..6e3d6747b9b
--- /dev/null
+++ b/boost/boost/format/feed_args.hpp
@@ -0,0 +1,267 @@
+// ----------------------------------------------------------------------------
+// feed_args.hpp : functions for processing each argument
+// (feed, feed_manip, and distribute)
+// ----------------------------------------------------------------------------
+
+// Copyright Samuel Krempp 2003. 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)
+
+// See http://www.boost.org/libs/format for library home page
+
+// ----------------------------------------------------------------------------
+
+#ifndef BOOST_FORMAT_FEED_ARGS_HPP
+#define BOOST_FORMAT_FEED_ARGS_HPP
+
+#include <boost/config.hpp>
+#include <boost/assert.hpp>
+#include <boost/throw_exception.hpp>
+
+#include <boost/format/format_class.hpp>
+#include <boost/format/group.hpp>
+#include <boost/format/detail/msvc_disambiguater.hpp>
+
+namespace boost {
+namespace io {
+namespace detail {
+
+ template<class Ch, class Tr, class Alloc>
+ void mk_str( std::basic_string<Ch,Tr, Alloc> & res,
+ const Ch * beg,
+ typename std::basic_string<Ch,Tr,Alloc>::size_type size,
+ std::streamsize w,
+ const Ch fill_char,
+ std::ios_base::fmtflags f,
+ const Ch prefix_space, // 0 if no space-padding
+ bool center)
+ // applies centered/left/right padding to the string [beg, beg+size[
+ // Effects : the result is placed in res.
+ {
+ typedef typename std::basic_string<Ch,Tr,Alloc>::size_type size_type;
+ res.resize(0);
+ if(w<=0 || static_cast<size_type>(w) <=size) {
+ // no need to pad.
+ res.reserve(size + !!prefix_space);
+ if(prefix_space)
+ res.append(1, prefix_space);
+ if (size)
+ res.append(beg, size);
+ }
+ else {
+ std::streamsize n=static_cast<std::streamsize>(w-size-!!prefix_space);
+ std::streamsize n_after = 0, n_before = 0;
+ res.reserve(w); // allocate once for the 2 inserts
+ if(center)
+ n_after = n/2, n_before = n - n_after;
+ else
+ if(f & std::ios_base::left)
+ n_after = n;
+ else
+ n_before = n;
+ // now make the res string :
+ if(n_before) res.append(n_before, fill_char);
+ if(prefix_space)
+ res.append(1, prefix_space);
+ if (size)
+ res.append(beg, size);
+ if(n_after) res.append(n_after, fill_char);
+ }
+ } // -mk_str(..)
+
+
+#if BOOST_WORKAROUND( BOOST_MSVC, <= 1300) || \
+ BOOST_WORKAROUND(__DECCXX_VER, BOOST_TESTED_AT(60590042))
+// MSVC needs to be tricked to disambiguate this simple overload..
+// the trick is in "boost/format/msvc_disambiguater.hpp"
+
+ template< class Ch, class Tr, class T> inline
+ void put_head (BOOST_IO_STD basic_ostream<Ch, Tr> & os, const T& x ) {
+ disambiguater<Ch, Tr, T>::put_head(os, x, 1L);
+ }
+ template< class Ch, class Tr, class T> inline
+ void put_last (BOOST_IO_STD basic_ostream<Ch, Tr> & os, const T& x ) {
+ disambiguater<Ch, Tr, T>::put_last(os, x, 1L);
+ }
+
+#else
+
+ template< class Ch, class Tr, class T> inline
+ void put_head (BOOST_IO_STD basic_ostream<Ch, Tr> &, const T& ) {
+ }
+
+ template< class Ch, class Tr, class T> inline
+ void put_head( BOOST_IO_STD basic_ostream<Ch, Tr> & os, const group1<T>& x ) {
+ os << group_head(x.a1_); // send the first N-1 items, not the last
+ }
+
+ template< class Ch, class Tr, class T> inline
+ void put_last( BOOST_IO_STD basic_ostream<Ch, Tr> & os, const T& x ) {
+ os << x ;
+ }
+
+ template< class Ch, class Tr, class T> inline
+ void put_last( BOOST_IO_STD basic_ostream<Ch, Tr> & os, const group1<T>& x ) {
+ os << group_last(x.a1_); // this selects the last element
+ }
+
+#ifndef BOOST_NO_OVERLOAD_FOR_NON_CONST
+ template< class Ch, class Tr, class T> inline
+ void put_head( BOOST_IO_STD basic_ostream<Ch, Tr> &, T& ) {
+ }
+
+ template< class Ch, class Tr, class T> inline
+ void put_last( BOOST_IO_STD basic_ostream<Ch, Tr> & os, T& x) {
+ os << x ;
+ }
+#endif
+#endif // -msvc workaround
+
+
+ template< class Ch, class Tr, class Alloc, class T>
+ void put( T x,
+ const format_item<Ch, Tr, Alloc>& specs,
+ typename basic_format<Ch, Tr, Alloc>::string_type& res,
+ typename basic_format<Ch, Tr, Alloc>::internal_streambuf_t & buf,
+ io::detail::locale_t *loc_p = NULL)
+ {
+ // does the actual conversion of x, with given params, into a string
+ // using the supplied stringbuf.
+
+ typedef typename basic_format<Ch, Tr, Alloc>::string_type string_type;
+ typedef typename basic_format<Ch, Tr, Alloc>::format_item_t format_item_t;
+ typedef typename string_type::size_type size_type;
+
+ basic_oaltstringstream<Ch, Tr, Alloc> oss( &buf);
+ specs.fmtstate_.apply_on(oss, loc_p);
+
+ // the stream format state can be modified by manipulators in the argument :
+ put_head( oss, x );
+ // in case x is a group, apply the manip part of it,
+ // in order to find width
+
+ const std::ios_base::fmtflags fl=oss.flags();
+ const bool internal = (fl & std::ios_base::internal) != 0;
+ const std::streamsize w = oss.width();
+ const bool two_stepped_padding= internal && (w!=0);
+
+ res.resize(0);
+ if(! two_stepped_padding) {
+ if(w>0) // handle padding via mk_str, not natively in stream
+ oss.width(0);
+ put_last( oss, x);
+ const Ch * res_beg = buf.pbase();
+ Ch prefix_space = 0;
+ if(specs.pad_scheme_ & format_item_t::spacepad)
+ if(buf.pcount()== 0 ||
+ (res_beg[0] !=oss.widen('+') && res_beg[0] !=oss.widen('-') ))
+ prefix_space = oss.widen(' ');
+ size_type res_size = (std::min)(
+ static_cast<size_type>(specs.truncate_ - !!prefix_space),
+ buf.pcount() );
+ mk_str(res, res_beg, res_size, w, oss.fill(), fl,
+ prefix_space, (specs.pad_scheme_ & format_item_t::centered) !=0 );
+ }
+ else { // 2-stepped padding
+ // internal can be implied by zeropad, or user-set.
+ // left, right, and centered alignment overrule internal,
+ // but spacepad or truncate might be mixed with internal (using manipulator)
+ put_last( oss, x); // may pad
+ const Ch * res_beg = buf.pbase();
+ size_type res_size = buf.pcount();
+ bool prefix_space=false;
+ if(specs.pad_scheme_ & format_item_t::spacepad)
+ if(buf.pcount()== 0 ||
+ (res_beg[0] !=oss.widen('+') && res_beg[0] !=oss.widen('-') ))
+ prefix_space = true;
+ if(res_size == static_cast<size_type>(w) && w<=specs.truncate_ && !prefix_space) {
+ // okay, only one thing was printed and padded, so res is fine
+ res.assign(res_beg, res_size);
+ }
+ else { // length w exceeded
+ // either it was multi-output with first output padding up all width..
+ // either it was one big arg and we are fine.
+ // Note that res_size<w is possible (in case of bad user-defined formatting)
+ res.assign(res_beg, res_size);
+ res_beg=NULL; // invalidate pointers.
+
+ // make a new stream, to start re-formatting from scratch :
+ buf.clear_buffer();
+ basic_oaltstringstream<Ch, Tr, Alloc> oss2( &buf);
+ specs.fmtstate_.apply_on(oss2, loc_p);
+ put_head( oss2, x );
+
+ oss2.width(0);
+ if(prefix_space)
+ oss2 << ' ';
+ put_last(oss2, x );
+ if(buf.pcount()==0 && specs.pad_scheme_ & format_item_t::spacepad) {
+ prefix_space =true;
+ oss2 << ' ';
+ }
+ // we now have the minimal-length output
+ const Ch * tmp_beg = buf.pbase();
+ size_type tmp_size = (std::min)(static_cast<size_type>(specs.truncate_),
+ buf.pcount() );
+
+
+ if(static_cast<size_type>(w) <= tmp_size) {
+ // minimal length is already >= w, so no padding (cool!)
+ res.assign(tmp_beg, tmp_size);
+ }
+ else { // hum.. we need to pad (multi_output, or spacepad present)
+ //find where we should pad
+ size_type sz = (std::min)(res_size+prefix_space, tmp_size);
+ size_type i = prefix_space;
+ for(; i<sz && tmp_beg[i] == res[i-prefix_space]; ++i) {}
+ if(i>=tmp_size) i=prefix_space;
+ res.assign(tmp_beg, i);
+ std::streamsize d = w - static_cast<std::streamsize>(tmp_size);
+ BOOST_ASSERT(d>0);
+ res.append(static_cast<size_type>( d ), oss2.fill());
+ res.append(tmp_beg+i, tmp_size-i);
+ BOOST_ASSERT(i+(tmp_size-i)+(std::max)(d,(std::streamsize)0)
+ == static_cast<size_type>(w));
+ BOOST_ASSERT(res.size() == static_cast<size_type>(w));
+ }
+ }
+ }
+ buf.clear_buffer();
+ } // end- put(..)
+
+
+ template< class Ch, class Tr, class Alloc, class T>
+ void distribute (basic_format<Ch,Tr, Alloc>& self, T x) {
+ // call put(x, ..) on every occurence of the current argument :
+ if(self.cur_arg_ >= self.num_args_) {
+ if( self.exceptions() & too_many_args_bit )
+ boost::throw_exception(too_many_args(self.cur_arg_, self.num_args_));
+ else return;
+ }
+ for(unsigned long i=0; i < self.items_.size(); ++i) {
+ if(self.items_[i].argN_ == self.cur_arg_) {
+ put<Ch, Tr, Alloc, T> (x, self.items_[i], self.items_[i].res_,
+ self.buf_, boost::get_pointer(self.loc_) );
+ }
+ }
+ }
+
+ template<class Ch, class Tr, class Alloc, class T>
+ basic_format<Ch, Tr, Alloc>&
+ feed (basic_format<Ch,Tr, Alloc>& self, T x) {
+ if(self.dumped_) self.clear();
+ distribute<Ch, Tr, Alloc, T> (self, x);
+ ++self.cur_arg_;
+ if(self.bound_.size() != 0) {
+ while( self.cur_arg_ < self.num_args_ && self.bound_[self.cur_arg_] )
+ ++self.cur_arg_;
+ }
+ return self;
+ }
+
+} // namespace detail
+} // namespace io
+} // namespace boost
+
+
+#endif // BOOST_FORMAT_FEED_ARGS_HPP
diff --git a/boost/boost/format/format_class.hpp b/boost/boost/format/format_class.hpp
new file mode 100644
index 00000000000..d776d95146f
--- /dev/null
+++ b/boost/boost/format/format_class.hpp
@@ -0,0 +1,143 @@
+// ----------------------------------------------------------------------------
+// format_class.hpp : class interface
+// ----------------------------------------------------------------------------
+
+// Copyright Samuel Krempp 2003. 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)
+
+// See http://www.boost.org/libs/format for library home page
+
+// ----------------------------------------------------------------------------
+
+#ifndef BOOST_FORMAT_CLASS_HPP
+#define BOOST_FORMAT_CLASS_HPP
+
+
+#include <vector>
+#include <string>
+
+#include <boost/optional.hpp> // to store locale when needed
+
+#include <boost/format/format_fwd.hpp>
+#include <boost/format/internals_fwd.hpp>
+#include <boost/format/internals.hpp>
+#include <boost/format/alt_sstream.hpp>
+
+namespace boost {
+
+ template<class Ch, class Tr, class Alloc>
+ class basic_format
+ {
+ typedef typename io::CompatTraits<Tr>::compatible_type compat_traits;
+ public:
+ typedef Ch CharT; // borland fails in operator% if we use Ch and Tr directly
+ typedef std::basic_string<Ch, Tr, Alloc> string_type;
+ typedef typename string_type::size_type size_type;
+ typedef io::detail::format_item<Ch, Tr, Alloc> format_item_t;
+ typedef io::basic_altstringbuf<Ch, Tr, Alloc> internal_streambuf_t;
+
+
+ explicit basic_format(const Ch* str=NULL);
+ explicit basic_format(const string_type& s);
+ basic_format(const basic_format& x);
+ basic_format& operator= (const basic_format& x);
+ void swap(basic_format& x);
+
+#if !defined(BOOST_NO_STD_LOCALE)
+ explicit basic_format(const Ch* str, const std::locale & loc);
+ explicit basic_format(const string_type& s, const std::locale & loc);
+#endif
+ io::detail::locale_t getloc() const;
+
+ basic_format& clear(); // empty all converted string buffers (except bound items)
+ basic_format& clear_binds(); // unbind all bound items, and call clear()
+ basic_format& parse(const string_type&); // resets buffers and parse a new format string
+
+ // ** formatted result ** //
+ size_type size() const; // sum of the current string pieces sizes
+ string_type str() const; // final string
+
+ // ** arguments passing ** //
+ template<class T>
+ basic_format& operator%(const T& x)
+ { return io::detail::feed<CharT, Tr, Alloc, const T&>(*this,x); }
+
+#ifndef BOOST_NO_OVERLOAD_FOR_NON_CONST
+ template<class T> basic_format& operator%(T& x)
+ { return io::detail::feed<CharT, Tr, Alloc, T&>(*this,x); }
+#endif
+
+ // ** object modifying **//
+ template<class T>
+ basic_format& bind_arg(int argN, const T& val)
+ { return io::detail::bind_arg_body(*this, argN, val); }
+ basic_format& clear_bind(int argN);
+ template<class T>
+ basic_format& modify_item(int itemN, T manipulator)
+ { return io::detail::modify_item_body<Ch,Tr, Alloc, T> (*this, itemN, manipulator);}
+
+ // Choosing which errors will throw exceptions :
+ unsigned char exceptions() const;
+ unsigned char exceptions(unsigned char newexcept);
+
+#if !defined( BOOST_NO_MEMBER_TEMPLATE_FRIENDS ) \
+ && !BOOST_WORKAROUND(__BORLANDC__, <= 0x570) \
+ && !BOOST_WORKAROUND( _CRAYC, != 0) \
+ && !BOOST_WORKAROUND(__DECCXX_VER, BOOST_TESTED_AT(60590042))
+ // use friend templates and private members only if supported
+
+#ifndef BOOST_NO_TEMPLATE_STD_STREAM
+ template<class Ch2, class Tr2, class Alloc2>
+ friend std::basic_ostream<Ch2, Tr2> &
+ operator<<( std::basic_ostream<Ch2, Tr2> & ,
+ const basic_format<Ch2, Tr2, Alloc2>& );
+#else
+ template<class Ch2, class Tr2, class Alloc2>
+ friend std::ostream &
+ operator<<( std::ostream & ,
+ const basic_format<Ch2, Tr2, Alloc2>& );
+#endif
+
+ template<class Ch2, class Tr2, class Alloc2, class T>
+ friend basic_format<Ch2, Tr2, Alloc2>&
+ io::detail::feed (basic_format<Ch2, Tr2, Alloc2>&, T);
+
+ template<class Ch2, class Tr2, class Alloc2, class T> friend
+ void io::detail::distribute (basic_format<Ch2, Tr2, Alloc2>&, T);
+
+ template<class Ch2, class Tr2, class Alloc2, class T> friend
+ basic_format<Ch2, Tr2, Alloc2>&
+ io::detail::modify_item_body (basic_format<Ch2, Tr2, Alloc2>&, int, T);
+
+ template<class Ch2, class Tr2, class Alloc2, class T> friend
+ basic_format<Ch2, Tr2, Alloc2>&
+ io::detail::bind_arg_body (basic_format<Ch2, Tr2, Alloc2>&, int, const T&);
+
+ private:
+#endif
+ typedef io::detail::stream_format_state<Ch, Tr> stream_format_state;
+ // flag bits, used for style_
+ enum style_values { ordered = 1, // set only if all directives are positional
+ special_needs = 4 };
+
+ void make_or_reuse_data(std::size_t nbitems);// used for (re-)initialisation
+
+ // member data --------------------------------------------//
+ std::vector<format_item_t> items_; // each '%..' directive leads to a format_item
+ std::vector<bool> bound_; // stores which arguments were bound. size() == 0 || num_args
+
+ int style_; // style of format-string : positional or not, etc
+ int cur_arg_; // keep track of wich argument is current
+ int num_args_; // number of expected arguments
+ mutable bool dumped_; // true only after call to str() or <<
+ string_type prefix_; // piece of string to insert before first item
+ unsigned char exceptions_;
+ internal_streambuf_t buf_; // the internal stream buffer.
+ boost::optional<io::detail::locale_t> loc_;
+ }; // class basic_format
+
+} // namespace boost
+
+
+#endif // BOOST_FORMAT_CLASS_HPP
diff --git a/boost/boost/format/format_fwd.hpp b/boost/boost/format/format_fwd.hpp
new file mode 100644
index 00000000000..be3228af3c7
--- /dev/null
+++ b/boost/boost/format/format_fwd.hpp
@@ -0,0 +1,49 @@
+// ----------------------------------------------------------------------------
+// format_fwd.hpp : forward declarations
+// ----------------------------------------------------------------------------
+
+// Copyright Samuel Krempp 2003. 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)
+
+// See http://www.boost.org/libs/format for library home page
+
+// ----------------------------------------------------------------------------
+
+#ifndef BOOST_FORMAT_FWD_HPP
+#define BOOST_FORMAT_FWD_HPP
+
+#include <string>
+#include <iosfwd>
+
+#include <boost/format/detail/compat_workarounds.hpp>
+
+namespace boost {
+
+ template <class Ch,
+#if !( BOOST_WORKAROUND(__GNUC__, <3) && !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION) )
+ // gcc-2.95's native stdlid needs special treatment
+ class Tr = BOOST_IO_STD char_traits<Ch>, class Alloc = std::allocator<Ch> >
+#else
+ class Tr = std::string_char_traits<Ch>, class Alloc = std::alloc >
+#endif
+ class basic_format;
+
+ typedef basic_format<char > format;
+
+#if !defined(BOOST_NO_STD_WSTRING) && !defined(BOOST_NO_STD_WSTREAMBUF) \
+ && !defined(BOOST_FORMAT_IGNORE_STRINGSTREAM)
+ typedef basic_format<wchar_t > wformat;
+#endif
+
+ namespace io {
+ enum format_error_bits { bad_format_string_bit = 1,
+ too_few_args_bit = 2, too_many_args_bit = 4,
+ out_of_range_bit = 8,
+ all_error_bits = 255, no_error_bits=0 };
+
+ } // namespace io
+
+} // namespace boost
+
+#endif // BOOST_FORMAT_FWD_HPP
diff --git a/boost/boost/format/format_implementation.hpp b/boost/boost/format/format_implementation.hpp
new file mode 100644
index 00000000000..3dd68e78d22
--- /dev/null
+++ b/boost/boost/format/format_implementation.hpp
@@ -0,0 +1,277 @@
+// ----------------------------------------------------------------------------
+// format_implementation.hpp Implementation of the basic_format class
+// ----------------------------------------------------------------------------
+
+// Copyright Samuel Krempp 2003. 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)
+
+// See http://www.boost.org/libs/format for library home page
+
+
+// ----------------------------------------------------------------------------
+
+#ifndef BOOST_FORMAT_IMPLEMENTATION_HPP
+#define BOOST_FORMAT_IMPLEMENTATION_HPP
+
+#include <boost/config.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/assert.hpp>
+#include <boost/format/format_class.hpp>
+#include <algorithm> // std::swap
+
+namespace boost {
+
+// --- basic_format implementation -----------------------------------------//
+
+ template< class Ch, class Tr, class Alloc>
+ basic_format<Ch, Tr, Alloc>:: basic_format(const Ch* str)
+ : style_(0), cur_arg_(0), num_args_(0), dumped_(false),
+ exceptions_(io::all_error_bits)
+ {
+ if( str)
+ parse( str );
+ }
+
+#if !defined(BOOST_NO_STD_LOCALE)
+ template< class Ch, class Tr, class Alloc>
+ basic_format<Ch, Tr, Alloc>:: basic_format(const Ch* str, const std::locale & loc)
+ : style_(0), cur_arg_(0), num_args_(0), dumped_(false),
+ loc_(loc), exceptions_(io::all_error_bits)
+ {
+ if(str) parse( str );
+ }
+
+ template< class Ch, class Tr, class Alloc>
+ basic_format<Ch, Tr, Alloc>:: basic_format(const string_type& s, const std::locale & loc)
+ : style_(0), cur_arg_(0), num_args_(0), dumped_(false),
+ loc_(loc), exceptions_(io::all_error_bits)
+ {
+ parse(s);
+ }
+#endif // ! BOOST_NO_STD_LOCALE
+ template< class Ch, class Tr, class Alloc>
+ io::detail::locale_t basic_format<Ch, Tr, Alloc>::
+ getloc() const {
+ return loc_ ? loc_.get() : io::detail::locale_t();
+ }
+
+ template< class Ch, class Tr, class Alloc>
+ basic_format<Ch, Tr, Alloc>:: basic_format(const string_type& s)
+ : style_(0), cur_arg_(0), num_args_(0), dumped_(false),
+ exceptions_(io::all_error_bits)
+ {
+ parse(s);
+ }
+
+ template< class Ch, class Tr, class Alloc> // just don't copy the buf_ member
+ basic_format<Ch, Tr, Alloc>:: basic_format(const basic_format& x)
+ : items_(x.items_), bound_(x.bound_), style_(x.style_),
+ cur_arg_(x.cur_arg_), num_args_(x.num_args_), dumped_(false),
+ prefix_(x.prefix_), exceptions_(x.exceptions_), loc_(x.loc_)
+ {
+ }
+
+ template< class Ch, class Tr, class Alloc> // just don't copy the buf_ member
+ basic_format<Ch, Tr, Alloc>& basic_format<Ch, Tr, Alloc>::
+ operator= (const basic_format& x) {
+ if(this == &x)
+ return *this;
+ (basic_format<Ch, Tr, Alloc>(x)).swap(*this);
+ return *this;
+ }
+ template< class Ch, class Tr, class Alloc>
+ void basic_format<Ch, Tr, Alloc>::
+ swap (basic_format & x) {
+ std::swap(exceptions_, x.exceptions_);
+ std::swap(style_, x.style_);
+ std::swap(cur_arg_, x.cur_arg_);
+ std::swap(num_args_, x.num_args_);
+ std::swap(dumped_, x.dumped_);
+
+ items_.swap(x.items_);
+ prefix_.swap(x.prefix_);
+ bound_.swap(x.bound_);
+ }
+
+ template< class Ch, class Tr, class Alloc>
+ unsigned char basic_format<Ch,Tr, Alloc>:: exceptions() const {
+ return exceptions_;
+ }
+
+ template< class Ch, class Tr, class Alloc>
+ unsigned char basic_format<Ch,Tr, Alloc>:: exceptions(unsigned char newexcept) {
+ unsigned char swp = exceptions_;
+ exceptions_ = newexcept;
+ return swp;
+ }
+
+ template<class Ch, class Tr, class Alloc>
+ void basic_format<Ch, Tr, Alloc>::
+ make_or_reuse_data (std::size_t nbitems) {
+#if !defined(BOOST_NO_STD_LOCALE)
+ Ch fill = ( BOOST_USE_FACET(std::ctype<Ch>, getloc()) ). widen(' ');
+#else
+ Ch fill = ' ';
+#endif
+ if(items_.size() == 0)
+ items_.assign( nbitems, format_item_t(fill) );
+ else {
+ if(nbitems>items_.size())
+ items_.resize(nbitems, format_item_t(fill));
+ bound_.resize(0);
+ for(std::size_t i=0; i < nbitems; ++i)
+ items_[i].reset(fill); // strings are resized, instead of reallocated
+ }
+ }
+
+ template< class Ch, class Tr, class Alloc>
+ basic_format<Ch,Tr, Alloc>& basic_format<Ch,Tr, Alloc>::
+ clear () {
+ // empty the string buffers (except bound arguments)
+ // and make the format object ready for formatting a new set of arguments
+
+ BOOST_ASSERT( bound_.size()==0 || num_args_ == static_cast<int>(bound_.size()) );
+
+ for(unsigned long i=0; i<items_.size(); ++i) {
+ // clear converted strings only if the corresponding argument is not bound :
+ if( bound_.size()==0 || items_[i].argN_<0 || !bound_[ items_[i].argN_ ] )
+ items_[i].res_.resize(0);
+ }
+ cur_arg_=0; dumped_=false;
+ // maybe first arg is bound:
+ if(bound_.size() != 0) {
+ for(; cur_arg_ < num_args_ && bound_[cur_arg_]; ++cur_arg_)
+ {}
+ }
+ return *this;
+ }
+
+ template< class Ch, class Tr, class Alloc>
+ basic_format<Ch,Tr, Alloc>& basic_format<Ch,Tr, Alloc>::
+ clear_binds () {
+ // remove all binds, then clear()
+ bound_.resize(0);
+ clear();
+ return *this;
+ }
+
+ template< class Ch, class Tr, class Alloc>
+ basic_format<Ch,Tr, Alloc>& basic_format<Ch,Tr, Alloc>::
+ clear_bind (int argN) {
+ // remove the bind of ONE argument then clear()
+ if(argN<1 || argN > num_args_ || bound_.size()==0 || !bound_[argN-1] ) {
+ if( exceptions() & io::out_of_range_bit)
+ boost::throw_exception(io::out_of_range(argN, 1, num_args_+1 ) );
+ else return *this;
+ }
+ bound_[argN-1]=false;
+ clear();
+ return *this;
+ }
+
+ template< class Ch, class Tr, class Alloc>
+ typename basic_format<Ch, Tr, Alloc>::string_type
+ basic_format<Ch,Tr, Alloc>::
+ str () const {
+ if(items_.size()==0)
+ return prefix_;
+ if( cur_arg_ < num_args_)
+ if( exceptions() & io::too_few_args_bit )
+ // not enough variables supplied
+ boost::throw_exception(io::too_few_args(cur_arg_, num_args_));
+
+ unsigned long i;
+ string_type res;
+ res.reserve(size());
+ res += prefix_;
+ for(i=0; i < items_.size(); ++i) {
+ const format_item_t& item = items_[i];
+ res += item.res_;
+ if( item.argN_ == format_item_t::argN_tabulation) {
+ BOOST_ASSERT( item.pad_scheme_ & format_item_t::tabulation);
+ if( static_cast<size_type>(item.fmtstate_.width_) > res.size() )
+ res.append( static_cast<size_type>(item.fmtstate_.width_) - res.size(),
+ item.fmtstate_.fill_ );
+ }
+ res += item.appendix_;
+ }
+ dumped_=true;
+ return res;
+ }
+ template< class Ch, class Tr, class Alloc>
+ typename std::basic_string<Ch, Tr, Alloc>::size_type basic_format<Ch,Tr, Alloc>::
+ size () const {
+ BOOST_USING_STD_MAX();
+ size_type sz = prefix_.size();
+ unsigned long i;
+ for(i=0; i < items_.size(); ++i) {
+ const format_item_t& item = items_[i];
+ sz += item.res_.size();
+ if( item.argN_ == format_item_t::argN_tabulation)
+ sz = max BOOST_PREVENT_MACRO_SUBSTITUTION (sz,
+ static_cast<size_type>(item.fmtstate_.width_) );
+ sz += item.appendix_.size();
+ }
+ return sz;
+ }
+
+namespace io {
+namespace detail {
+
+ template<class Ch, class Tr, class Alloc, class T>
+ basic_format<Ch, Tr, Alloc>&
+ bind_arg_body (basic_format<Ch, Tr, Alloc>& self, int argN, const T& val) {
+ // bind one argument to a fixed value
+ // this is persistent over clear() calls, thus also over str() and <<
+ if(self.dumped_)
+ self.clear(); // needed because we will modify cur_arg_
+ if(argN<1 || argN > self.num_args_) {
+ if( self.exceptions() & io::out_of_range_bit )
+ boost::throw_exception(io::out_of_range(argN, 1, self.num_args_+1 ) );
+ else return self;
+ }
+ if(self.bound_.size()==0)
+ self.bound_.assign(self.num_args_,false);
+ else
+ BOOST_ASSERT( self.num_args_ == static_cast<signed int>(self.bound_.size()) );
+ int o_cur_arg = self.cur_arg_;
+ self.cur_arg_ = argN-1; // arrays begin at 0
+
+ self.bound_[self.cur_arg_]=false; // if already set, we unset and re-sets..
+ self.operator%(val); // put val at the right place, because cur_arg is set
+
+
+ // Now re-position cur_arg before leaving :
+ self.cur_arg_ = o_cur_arg;
+ self.bound_[argN-1]=true;
+ if(self.cur_arg_ == argN-1 ) {
+ // hum, now this arg is bound, so move to next free arg
+ while(self.cur_arg_ < self.num_args_ && self.bound_[self.cur_arg_])
+ ++self.cur_arg_;
+ }
+ // In any case, we either have all args, or are on a non-binded arg :
+ BOOST_ASSERT( self.cur_arg_ >= self.num_args_ || ! self.bound_[self.cur_arg_]);
+ return self;
+ }
+
+ template<class Ch, class Tr, class Alloc, class T> basic_format<Ch, Tr, Alloc>&
+ modify_item_body (basic_format<Ch, Tr, Alloc>& self, int itemN, T manipulator) {
+ // applies a manipulator to the format_item describing a given directive.
+ // this is a permanent change, clear or reset won't cancel that.
+ if(itemN<1 || itemN > static_cast<signed int>(self.items_.size() )) {
+ if( self.exceptions() & io::out_of_range_bit )
+ boost::throw_exception(io::out_of_range(itemN, 1, self.items_.size() ));
+ else return self;
+ }
+ self.items_[itemN-1].fmtstate_. template apply_manip<T> ( manipulator );
+ return self;
+ }
+
+} // namespace detail
+} // namespace io
+} // namespace boost
+
+
+
+#endif // BOOST_FORMAT_IMPLEMENTATION_HPP
diff --git a/boost/boost/format/free_funcs.hpp b/boost/boost/format/free_funcs.hpp
new file mode 100644
index 00000000000..3a51545526f
--- /dev/null
+++ b/boost/boost/format/free_funcs.hpp
@@ -0,0 +1,70 @@
+// ----------------------------------------------------------------------------
+// free_funcs.hpp : implementation of the free functions of boost::format
+// ----------------------------------------------------------------------------
+
+// Copyright Samuel Krempp 2003. 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)
+
+// See http://www.boost.org/libs/format for library home page
+
+// ----------------------------------------------------------------------------
+
+#ifndef BOOST_FORMAT_FUNCS_HPP
+#define BOOST_FORMAT_FUNCS_HPP
+
+#include <boost/format/format_class.hpp>
+#include <boost/throw_exception.hpp>
+
+namespace boost {
+
+ template<class Ch, class Tr, class Alloc> inline
+ std::basic_string<Ch, Tr, Alloc> str(const basic_format<Ch, Tr, Alloc>& f) {
+ // adds up all pieces of strings and converted items, and return the formatted string
+ return f.str();
+ }
+ namespace io {
+ using ::boost::str; // keep compatibility with when it was defined in this N.S.
+ } // - namespace io
+
+#ifndef BOOST_NO_TEMPLATE_STD_STREAM
+ template<class Ch, class Tr, class Alloc>
+ std::basic_ostream<Ch, Tr> &
+ operator<<( std::basic_ostream<Ch, Tr> & os,
+ const basic_format<Ch, Tr, Alloc>& f)
+#else
+ template<class Ch, class Tr, class Alloc>
+ std::ostream &
+ operator<<( std::ostream & os,
+ const basic_format<Ch, Tr, Alloc>& f)
+#endif
+ // effect: "return os << str(f);" but we can do it faster
+ {
+ typedef boost::basic_format<Ch, Tr, Alloc> format_t;
+ if(f.items_.size()==0)
+ os << f.prefix_;
+ else {
+ if(f.cur_arg_ < f.num_args_)
+ if( f.exceptions() & io::too_few_args_bit )
+ // not enough variables supplied
+ boost::throw_exception(io::too_few_args(f.cur_arg_, f.num_args_));
+ if(f.style_ & format_t::special_needs)
+ os << f.str();
+ else {
+ // else we dont have to count chars output, so we dump directly to os :
+ os << f.prefix_;
+ for(unsigned long i=0; i<f.items_.size(); ++i) {
+ const typename format_t::format_item_t& item = f.items_[i];
+ os << item.res_;
+ os << item.appendix_;
+ }
+ }
+ }
+ f.dumped_=true;
+ return os;
+ }
+
+} // namespace boost
+
+
+#endif // BOOST_FORMAT_FUNCS_HPP
diff --git a/boost/boost/format/group.hpp b/boost/boost/format/group.hpp
new file mode 100644
index 00000000000..a1a2c5b0e34
--- /dev/null
+++ b/boost/boost/format/group.hpp
@@ -0,0 +1,676 @@
+
+// ----------------------------------------------------------------------------
+// group.hpp : encapsulates a group of manipulators along with an argument
+// ----------------------------------------------------------------------------
+
+// Copyright Samuel Krempp 2003. 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)
+
+// See http://www.boost.org/libs/format for library home page
+
+// ----------------------------------------------------------------------------
+
+
+// group_head : cut the last element of a group out.
+// (is overloaded below on each type of group)
+
+// group_last : returns the last element of a group
+// (is overloaded below on each type of group)
+// ----------------------------------------------------------------------------
+
+
+#ifndef BOOST_FORMAT_GROUP_HPP
+#define BOOST_FORMAT_GROUP_HPP
+
+#include <boost/config.hpp>
+
+
+namespace boost {
+namespace io {
+
+
+namespace detail {
+
+
+// empty group, but useful even though.
+struct group0
+{
+ group0() {}
+};
+
+template <class Ch, class Tr>
+inline
+BOOST_IO_STD basic_ostream<Ch, Tr>&
+operator << ( BOOST_IO_STD basic_ostream<Ch, Tr>& os,
+ const group0& )
+{
+ return os;
+}
+
+template <class T1>
+struct group1
+{
+ T1 a1_;
+ group1(T1 a1)
+ : a1_(a1)
+ {}
+};
+
+template <class Ch, class Tr, class T1>
+inline
+BOOST_IO_STD basic_ostream<Ch, Tr>&
+operator << (BOOST_IO_STD basic_ostream<Ch, Tr>& os,
+ const group1<T1>& x)
+{
+ os << x.a1_;
+ return os;
+}
+
+
+
+
+template <class T1,class T2>
+struct group2
+{
+ T1 a1_;
+ T2 a2_;
+ group2(T1 a1,T2 a2)
+ : a1_(a1),a2_(a2)
+ {}
+};
+
+template <class Ch, class Tr, class T1,class T2>
+inline
+BOOST_IO_STD basic_ostream<Ch, Tr>&
+operator << (BOOST_IO_STD basic_ostream<Ch, Tr>& os,
+ const group2<T1,T2>& x)
+{
+ os << x.a1_<< x.a2_;
+ return os;
+}
+
+template <class T1,class T2,class T3>
+struct group3
+{
+ T1 a1_;
+ T2 a2_;
+ T3 a3_;
+ group3(T1 a1,T2 a2,T3 a3)
+ : a1_(a1),a2_(a2),a3_(a3)
+ {}
+};
+
+template <class Ch, class Tr, class T1,class T2,class T3>
+inline
+BOOST_IO_STD basic_ostream<Ch, Tr>&
+operator << (BOOST_IO_STD basic_ostream<Ch, Tr>& os,
+ const group3<T1,T2,T3>& x)
+{
+ os << x.a1_<< x.a2_<< x.a3_;
+ return os;
+}
+
+template <class T1,class T2,class T3,class T4>
+struct group4
+{
+ T1 a1_;
+ T2 a2_;
+ T3 a3_;
+ T4 a4_;
+ group4(T1 a1,T2 a2,T3 a3,T4 a4)
+ : a1_(a1),a2_(a2),a3_(a3),a4_(a4)
+ {}
+};
+
+template <class Ch, class Tr, class T1,class T2,class T3,class T4>
+inline
+BOOST_IO_STD basic_ostream<Ch, Tr>&
+operator << (BOOST_IO_STD basic_ostream<Ch, Tr>& os,
+ const group4<T1,T2,T3,T4>& x)
+{
+ os << x.a1_<< x.a2_<< x.a3_<< x.a4_;
+ return os;
+}
+
+template <class T1,class T2,class T3,class T4,class T5>
+struct group5
+{
+ T1 a1_;
+ T2 a2_;
+ T3 a3_;
+ T4 a4_;
+ T5 a5_;
+ group5(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5)
+ : a1_(a1),a2_(a2),a3_(a3),a4_(a4),a5_(a5)
+ {}
+};
+
+template <class Ch, class Tr, class T1,class T2,class T3,class T4,class T5>
+inline
+BOOST_IO_STD basic_ostream<Ch, Tr>&
+operator << (BOOST_IO_STD basic_ostream<Ch, Tr>& os,
+ const group5<T1,T2,T3,T4,T5>& x)
+{
+ os << x.a1_<< x.a2_<< x.a3_<< x.a4_<< x.a5_;
+ return os;
+}
+
+template <class T1,class T2,class T3,class T4,class T5,class T6>
+struct group6
+{
+ T1 a1_;
+ T2 a2_;
+ T3 a3_;
+ T4 a4_;
+ T5 a5_;
+ T6 a6_;
+ group6(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6)
+ : a1_(a1),a2_(a2),a3_(a3),a4_(a4),a5_(a5),a6_(a6)
+ {}
+};
+
+template <class Ch, class Tr, class T1,class T2,class T3,class T4,class T5,class T6>
+inline
+BOOST_IO_STD basic_ostream<Ch, Tr>&
+operator << (BOOST_IO_STD basic_ostream<Ch, Tr>& os,
+ const group6<T1,T2,T3,T4,T5,T6>& x)
+{
+ os << x.a1_<< x.a2_<< x.a3_<< x.a4_<< x.a5_<< x.a6_;
+ return os;
+}
+
+template <class T1,class T2,class T3,class T4,class T5,class T6,class T7>
+struct group7
+{
+ T1 a1_;
+ T2 a2_;
+ T3 a3_;
+ T4 a4_;
+ T5 a5_;
+ T6 a6_;
+ T7 a7_;
+ group7(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7)
+ : a1_(a1),a2_(a2),a3_(a3),a4_(a4),a5_(a5),a6_(a6),a7_(a7)
+ {}
+};
+
+template <class Ch, class Tr, class T1,class T2,class T3,class T4,class T5,class T6,class T7>
+inline
+BOOST_IO_STD basic_ostream<Ch, Tr>&
+operator << (BOOST_IO_STD basic_ostream<Ch, Tr>& os,
+ const group7<T1,T2,T3,T4,T5,T6,T7>& x)
+{
+ os << x.a1_<< x.a2_<< x.a3_<< x.a4_<< x.a5_<< x.a6_<< x.a7_;
+ return os;
+}
+
+template <class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8>
+struct group8
+{
+ T1 a1_;
+ T2 a2_;
+ T3 a3_;
+ T4 a4_;
+ T5 a5_;
+ T6 a6_;
+ T7 a7_;
+ T8 a8_;
+ group8(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8)
+ : a1_(a1),a2_(a2),a3_(a3),a4_(a4),a5_(a5),a6_(a6),a7_(a7),a8_(a8)
+ {}
+};
+
+template <class Ch, class Tr, class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8>
+inline
+BOOST_IO_STD basic_ostream<Ch, Tr>&
+operator << (BOOST_IO_STD basic_ostream<Ch, Tr>& os,
+ const group8<T1,T2,T3,T4,T5,T6,T7,T8>& x)
+{
+ os << x.a1_<< x.a2_<< x.a3_<< x.a4_<< x.a5_<< x.a6_<< x.a7_<< x.a8_;
+ return os;
+}
+
+template <class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9>
+struct group9
+{
+ T1 a1_;
+ T2 a2_;
+ T3 a3_;
+ T4 a4_;
+ T5 a5_;
+ T6 a6_;
+ T7 a7_;
+ T8 a8_;
+ T9 a9_;
+ group9(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8,T9 a9)
+ : a1_(a1),a2_(a2),a3_(a3),a4_(a4),a5_(a5),a6_(a6),a7_(a7),a8_(a8),a9_(a9)
+ {}
+};
+
+template <class Ch, class Tr, class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9>
+inline
+BOOST_IO_STD basic_ostream<Ch, Tr>&
+operator << (BOOST_IO_STD basic_ostream<Ch, Tr>& os,
+ const group9<T1,T2,T3,T4,T5,T6,T7,T8,T9>& x)
+{
+ os << x.a1_<< x.a2_<< x.a3_<< x.a4_<< x.a5_<< x.a6_<< x.a7_<< x.a8_<< x.a9_;
+ return os;
+}
+
+template <class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9,class T10>
+struct group10
+{
+ T1 a1_;
+ T2 a2_;
+ T3 a3_;
+ T4 a4_;
+ T5 a5_;
+ T6 a6_;
+ T7 a7_;
+ T8 a8_;
+ T9 a9_;
+ T10 a10_;
+ group10(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8,T9 a9,T10 a10)
+ : a1_(a1),a2_(a2),a3_(a3),a4_(a4),a5_(a5),a6_(a6),a7_(a7),a8_(a8),a9_(a9),a10_(a10)
+ {}
+};
+
+template <class Ch, class Tr, class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9,class T10>
+inline
+BOOST_IO_STD basic_ostream<Ch, Tr>&
+operator << (BOOST_IO_STD basic_ostream<Ch, Tr>& os,
+ const group10<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10>& x)
+{
+ os << x.a1_<< x.a2_<< x.a3_<< x.a4_<< x.a5_<< x.a6_<< x.a7_<< x.a8_<< x.a9_<< x.a10_;
+ return os;
+}
+
+
+
+
+template <class T1,class T2>
+inline
+group1<T1>
+group_head( group2<T1,T2> const& x)
+{
+ return group1<T1> (x.a1_);
+}
+
+template <class T1,class T2>
+inline
+group1<T2>
+group_last( group2<T1,T2> const& x)
+{
+ return group1<T2> (x.a2_);
+}
+
+
+
+template <class T1,class T2,class T3>
+inline
+group2<T1,T2>
+group_head( group3<T1,T2,T3> const& x)
+{
+ return group2<T1,T2> (x.a1_,x.a2_);
+}
+
+template <class T1,class T2,class T3>
+inline
+group1<T3>
+group_last( group3<T1,T2,T3> const& x)
+{
+ return group1<T3> (x.a3_);
+}
+
+
+
+template <class T1,class T2,class T3,class T4>
+inline
+group3<T1,T2,T3>
+group_head( group4<T1,T2,T3,T4> const& x)
+{
+ return group3<T1,T2,T3> (x.a1_,x.a2_,x.a3_);
+}
+
+template <class T1,class T2,class T3,class T4>
+inline
+group1<T4>
+group_last( group4<T1,T2,T3,T4> const& x)
+{
+ return group1<T4> (x.a4_);
+}
+
+
+
+template <class T1,class T2,class T3,class T4,class T5>
+inline
+group4<T1,T2,T3,T4>
+group_head( group5<T1,T2,T3,T4,T5> const& x)
+{
+ return group4<T1,T2,T3,T4> (x.a1_,x.a2_,x.a3_,x.a4_);
+}
+
+template <class T1,class T2,class T3,class T4,class T5>
+inline
+group1<T5>
+group_last( group5<T1,T2,T3,T4,T5> const& x)
+{
+ return group1<T5> (x.a5_);
+}
+
+
+
+template <class T1,class T2,class T3,class T4,class T5,class T6>
+inline
+group5<T1,T2,T3,T4,T5>
+group_head( group6<T1,T2,T3,T4,T5,T6> const& x)
+{
+ return group5<T1,T2,T3,T4,T5> (x.a1_,x.a2_,x.a3_,x.a4_,x.a5_);
+}
+
+template <class T1,class T2,class T3,class T4,class T5,class T6>
+inline
+group1<T6>
+group_last( group6<T1,T2,T3,T4,T5,T6> const& x)
+{
+ return group1<T6> (x.a6_);
+}
+
+
+
+template <class T1,class T2,class T3,class T4,class T5,class T6,class T7>
+inline
+group6<T1,T2,T3,T4,T5,T6>
+group_head( group7<T1,T2,T3,T4,T5,T6,T7> const& x)
+{
+ return group6<T1,T2,T3,T4,T5,T6> (x.a1_,x.a2_,x.a3_,x.a4_,x.a5_,x.a6_);
+}
+
+template <class T1,class T2,class T3,class T4,class T5,class T6,class T7>
+inline
+group1<T7>
+group_last( group7<T1,T2,T3,T4,T5,T6,T7> const& x)
+{
+ return group1<T7> (x.a7_);
+}
+
+
+
+template <class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8>
+inline
+group7<T1,T2,T3,T4,T5,T6,T7>
+group_head( group8<T1,T2,T3,T4,T5,T6,T7,T8> const& x)
+{
+ return group7<T1,T2,T3,T4,T5,T6,T7> (x.a1_,x.a2_,x.a3_,x.a4_,x.a5_,x.a6_,x.a7_);
+}
+
+template <class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8>
+inline
+group1<T8>
+group_last( group8<T1,T2,T3,T4,T5,T6,T7,T8> const& x)
+{
+ return group1<T8> (x.a8_);
+}
+
+
+
+template <class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9>
+inline
+group8<T1,T2,T3,T4,T5,T6,T7,T8>
+group_head( group9<T1,T2,T3,T4,T5,T6,T7,T8,T9> const& x)
+{
+ return group8<T1,T2,T3,T4,T5,T6,T7,T8> (x.a1_,x.a2_,x.a3_,x.a4_,x.a5_,x.a6_,x.a7_,x.a8_);
+}
+
+template <class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9>
+inline
+group1<T9>
+group_last( group9<T1,T2,T3,T4,T5,T6,T7,T8,T9> const& x)
+{
+ return group1<T9> (x.a9_);
+}
+
+
+
+template <class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9,class T10>
+inline
+group9<T1,T2,T3,T4,T5,T6,T7,T8,T9>
+group_head( group10<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10> const& x)
+{
+ return group9<T1,T2,T3,T4,T5,T6,T7,T8,T9> (x.a1_,x.a2_,x.a3_,x.a4_,x.a5_,x.a6_,x.a7_,x.a8_,x.a9_);
+}
+
+template <class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9,class T10>
+inline
+group1<T10>
+group_last( group10<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10> const& x)
+{
+ return group1<T10> (x.a10_);
+}
+
+
+
+
+
+} // namespace detail
+
+
+
+// helper functions
+
+
+inline detail::group1< detail::group0 >
+group() { return detail::group1< detail::group0 > ( detail::group0() ); }
+
+template <class T1, class Var>
+inline
+detail::group1< detail::group2<T1, Var const&> >
+ group(T1 a1, Var const& var)
+{
+ return detail::group1< detail::group2<T1, Var const&> >
+ ( detail::group2<T1, Var const&>
+ (a1, var)
+ );
+}
+
+template <class T1,class T2, class Var>
+inline
+detail::group1< detail::group3<T1,T2, Var const&> >
+ group(T1 a1,T2 a2, Var const& var)
+{
+ return detail::group1< detail::group3<T1,T2, Var const&> >
+ ( detail::group3<T1,T2, Var const&>
+ (a1,a2, var)
+ );
+}
+
+template <class T1,class T2,class T3, class Var>
+inline
+detail::group1< detail::group4<T1,T2,T3, Var const&> >
+ group(T1 a1,T2 a2,T3 a3, Var const& var)
+{
+ return detail::group1< detail::group4<T1,T2,T3, Var const&> >
+ ( detail::group4<T1,T2,T3, Var const&>
+ (a1,a2,a3, var)
+ );
+}
+
+template <class T1,class T2,class T3,class T4, class Var>
+inline
+detail::group1< detail::group5<T1,T2,T3,T4, Var const&> >
+ group(T1 a1,T2 a2,T3 a3,T4 a4, Var const& var)
+{
+ return detail::group1< detail::group5<T1,T2,T3,T4, Var const&> >
+ ( detail::group5<T1,T2,T3,T4, Var const&>
+ (a1,a2,a3,a4, var)
+ );
+}
+
+template <class T1,class T2,class T3,class T4,class T5, class Var>
+inline
+detail::group1< detail::group6<T1,T2,T3,T4,T5, Var const&> >
+ group(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5, Var const& var)
+{
+ return detail::group1< detail::group6<T1,T2,T3,T4,T5, Var const&> >
+ ( detail::group6<T1,T2,T3,T4,T5, Var const&>
+ (a1,a2,a3,a4,a5, var)
+ );
+}
+
+template <class T1,class T2,class T3,class T4,class T5,class T6, class Var>
+inline
+detail::group1< detail::group7<T1,T2,T3,T4,T5,T6, Var const&> >
+ group(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6, Var const& var)
+{
+ return detail::group1< detail::group7<T1,T2,T3,T4,T5,T6, Var const&> >
+ ( detail::group7<T1,T2,T3,T4,T5,T6, Var const&>
+ (a1,a2,a3,a4,a5,a6, var)
+ );
+}
+
+template <class T1,class T2,class T3,class T4,class T5,class T6,class T7, class Var>
+inline
+detail::group1< detail::group8<T1,T2,T3,T4,T5,T6,T7, Var const&> >
+ group(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7, Var const& var)
+{
+ return detail::group1< detail::group8<T1,T2,T3,T4,T5,T6,T7, Var const&> >
+ ( detail::group8<T1,T2,T3,T4,T5,T6,T7, Var const&>
+ (a1,a2,a3,a4,a5,a6,a7, var)
+ );
+}
+
+template <class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8, class Var>
+inline
+detail::group1< detail::group9<T1,T2,T3,T4,T5,T6,T7,T8, Var const&> >
+ group(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8, Var const& var)
+{
+ return detail::group1< detail::group9<T1,T2,T3,T4,T5,T6,T7,T8, Var const&> >
+ ( detail::group9<T1,T2,T3,T4,T5,T6,T7,T8, Var const&>
+ (a1,a2,a3,a4,a5,a6,a7,a8, var)
+ );
+}
+
+template <class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9, class Var>
+inline
+detail::group1< detail::group10<T1,T2,T3,T4,T5,T6,T7,T8,T9, Var const&> >
+ group(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8,T9 a9, Var const& var)
+{
+ return detail::group1< detail::group10<T1,T2,T3,T4,T5,T6,T7,T8,T9, Var const&> >
+ ( detail::group10<T1,T2,T3,T4,T5,T6,T7,T8,T9, Var const&>
+ (a1,a2,a3,a4,a5,a6,a7,a8,a9, var)
+ );
+}
+
+
+#ifndef BOOST_NO_OVERLOAD_FOR_NON_CONST
+
+template <class T1, class Var>
+inline
+detail::group1< detail::group2<T1, Var&> >
+ group(T1 a1, Var& var)
+{
+ return detail::group1< detail::group2<T1, Var&> >
+ ( detail::group2<T1, Var&>
+ (a1, var)
+ );
+}
+
+template <class T1,class T2, class Var>
+inline
+detail::group1< detail::group3<T1,T2, Var&> >
+ group(T1 a1,T2 a2, Var& var)
+{
+ return detail::group1< detail::group3<T1,T2, Var&> >
+ ( detail::group3<T1,T2, Var&>
+ (a1,a2, var)
+ );
+}
+
+template <class T1,class T2,class T3, class Var>
+inline
+detail::group1< detail::group4<T1,T2,T3, Var&> >
+ group(T1 a1,T2 a2,T3 a3, Var& var)
+{
+ return detail::group1< detail::group4<T1,T2,T3, Var&> >
+ ( detail::group4<T1,T2,T3, Var&>
+ (a1,a2,a3, var)
+ );
+}
+
+template <class T1,class T2,class T3,class T4, class Var>
+inline
+detail::group1< detail::group5<T1,T2,T3,T4, Var&> >
+ group(T1 a1,T2 a2,T3 a3,T4 a4, Var& var)
+{
+ return detail::group1< detail::group5<T1,T2,T3,T4, Var&> >
+ ( detail::group5<T1,T2,T3,T4, Var&>
+ (a1,a2,a3,a4, var)
+ );
+}
+
+template <class T1,class T2,class T3,class T4,class T5, class Var>
+inline
+detail::group1< detail::group6<T1,T2,T3,T4,T5, Var&> >
+ group(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5, Var& var)
+{
+ return detail::group1< detail::group6<T1,T2,T3,T4,T5, Var&> >
+ ( detail::group6<T1,T2,T3,T4,T5, Var&>
+ (a1,a2,a3,a4,a5, var)
+ );
+}
+
+template <class T1,class T2,class T3,class T4,class T5,class T6, class Var>
+inline
+detail::group1< detail::group7<T1,T2,T3,T4,T5,T6, Var&> >
+ group(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6, Var& var)
+{
+ return detail::group1< detail::group7<T1,T2,T3,T4,T5,T6, Var&> >
+ ( detail::group7<T1,T2,T3,T4,T5,T6, Var&>
+ (a1,a2,a3,a4,a5,a6, var)
+ );
+}
+
+template <class T1,class T2,class T3,class T4,class T5,class T6,class T7, class Var>
+inline
+detail::group1< detail::group8<T1,T2,T3,T4,T5,T6,T7, Var&> >
+ group(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7, Var& var)
+{
+ return detail::group1< detail::group8<T1,T2,T3,T4,T5,T6,T7, Var&> >
+ ( detail::group8<T1,T2,T3,T4,T5,T6,T7, Var&>
+ (a1,a2,a3,a4,a5,a6,a7, var)
+ );
+}
+
+template <class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8, class Var>
+inline
+detail::group1< detail::group9<T1,T2,T3,T4,T5,T6,T7,T8, Var&> >
+ group(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8, Var& var)
+{
+ return detail::group1< detail::group9<T1,T2,T3,T4,T5,T6,T7,T8, Var&> >
+ ( detail::group9<T1,T2,T3,T4,T5,T6,T7,T8, Var&>
+ (a1,a2,a3,a4,a5,a6,a7,a8, var)
+ );
+}
+
+template <class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9, class Var>
+inline
+detail::group1< detail::group10<T1,T2,T3,T4,T5,T6,T7,T8,T9, Var&> >
+ group(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8,T9 a9, Var& var)
+{
+ return detail::group1< detail::group10<T1,T2,T3,T4,T5,T6,T7,T8,T9, Var&> >
+ ( detail::group10<T1,T2,T3,T4,T5,T6,T7,T8,T9, Var&>
+ (a1,a2,a3,a4,a5,a6,a7,a8,a9, var)
+ );
+}
+
+
+#endif // - BOOST_NO_OVERLOAD_FOR_NON_CONST
+
+
+} // namespace io
+
+} // namespace boost
+
+
+#endif // BOOST_FORMAT_GROUP_HPP
diff --git a/boost/boost/format/internals.hpp b/boost/boost/format/internals.hpp
new file mode 100644
index 00000000000..7c561cd0cb8
--- /dev/null
+++ b/boost/boost/format/internals.hpp
@@ -0,0 +1,199 @@
+// ----------------------------------------------------------------------------
+// internals.hpp : internal structs : stream_format_state, format_item.
+// included by format.hpp
+// ----------------------------------------------------------------------------
+
+// Copyright Samuel Krempp 2003. 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)
+
+// See http://www.boost.org/libs/format for library home page
+
+// ----------------------------------------------------------------------------
+
+#ifndef BOOST_FORMAT_INTERNALS_HPP
+#define BOOST_FORMAT_INTERNALS_HPP
+
+
+#include <string>
+#include <boost/assert.hpp>
+#include <boost/optional.hpp>
+#include <boost/limits.hpp>
+#include <boost/format/detail/compat_workarounds.hpp>
+#include <boost/format/alt_sstream.hpp> // used as a dummy stream
+
+namespace boost {
+namespace io {
+namespace detail {
+
+
+//---- stream_format_state --------------------------------------------------//
+
+// set of params that define the format state of a stream
+ template<class Ch, class Tr>
+ struct stream_format_state
+ {
+ typedef BOOST_IO_STD basic_ios<Ch, Tr> basic_ios;
+
+ stream_format_state(Ch fill) { reset(fill); }
+// stream_format_state(const basic_ios& os) { set_by_stream(os); }
+
+ void reset(Ch fill); //- sets to default state.
+ void set_by_stream(const basic_ios& os); //- sets to os's state.
+ void apply_on(basic_ios & os, //- applies format_state to the stream
+ boost::io::detail::locale_t * loc_default = 0) const;
+ template<class T>
+ void apply_manip(T manipulator) //- modifies state by applying manipulator
+ { apply_manip_body<Ch, Tr, T>( *this, manipulator) ; }
+
+ // --- data ---
+ std::streamsize width_;
+ std::streamsize precision_;
+ Ch fill_;
+ std::ios_base::fmtflags flags_;
+ std::ios_base::iostate rdstate_;
+ std::ios_base::iostate exceptions_;
+ boost::optional<boost::io::detail::locale_t> loc_;
+ };
+
+
+//---- format_item ---------------------------------------------------------//
+
+// stores all parameters that can be specified in format strings
+ template<class Ch, class Tr, class Alloc>
+ struct format_item
+ {
+ enum pad_values { zeropad = 1, spacepad =2, centered=4, tabulation = 8 };
+ // 1. if zeropad is set, all other bits are not,
+ // 2. if tabulation is set, all others are not.
+ // centered and spacepad can be mixed freely.
+ enum arg_values { argN_no_posit = -1, // non-positional directive. will set argN later
+ argN_tabulation = -2, // tabulation directive. (no argument read)
+ argN_ignored = -3 // ignored directive. (no argument read)
+ };
+ typedef BOOST_IO_STD basic_ios<Ch, Tr> basic_ios;
+ typedef detail::stream_format_state<Ch, Tr> stream_format_state;
+ typedef ::std::basic_string<Ch, Tr, Alloc> string_type;
+
+ format_item(Ch fill) :argN_(argN_no_posit), fmtstate_(fill),
+ truncate_(max_streamsize()), pad_scheme_(0) {}
+ void reset(Ch fill);
+ void compute_states(); // sets states according to truncate and pad_scheme.
+
+ static std::streamsize max_streamsize() {
+ return (std::numeric_limits<std::streamsize>::max)();
+ }
+
+ // --- data ---
+ int argN_; //- argument number (starts at 0, eg : %1 => argN=0)
+ // negative values for items that don't process an argument
+ string_type res_; //- result of the formatting of this item
+ string_type appendix_; //- piece of string between this item and the next
+
+ stream_format_state fmtstate_;// set by parsing, is only affected by modify_item
+
+ std::streamsize truncate_;//- is set for directives like %.5s that ask truncation
+ unsigned int pad_scheme_;//- several possible padding schemes can mix. see pad_values
+ };
+
+
+
+//--- Definitions ------------------------------------------------------------
+
+// - stream_format_state:: -------------------------------------------------
+ template<class Ch, class Tr>
+ void stream_format_state<Ch,Tr>:: apply_on (basic_ios & os,
+ boost::io::detail::locale_t * loc_default) const {
+ // set the state of this stream according to our params
+ if(width_ != -1)
+ os.width(width_);
+ if(precision_ != -1)
+ os.precision(precision_);
+ if(fill_ != 0)
+ os.fill(fill_);
+ os.flags(flags_);
+ os.clear(rdstate_);
+ os.exceptions(exceptions_);
+#if !defined(BOOST_NO_STD_LOCALE)
+ if(loc_)
+ os.imbue(loc_.get());
+ else if(loc_default)
+ os.imbue(*loc_default);
+#endif
+ }
+
+ template<class Ch, class Tr>
+ void stream_format_state<Ch,Tr>:: set_by_stream(const basic_ios& os) {
+ // set our params according to the state of this stream
+ flags_ = os.flags();
+ width_ = os.width();
+ precision_ = os.precision();
+ fill_ = os.fill();
+ rdstate_ = os.rdstate();
+ exceptions_ = os.exceptions();
+ }
+
+
+ template<class Ch, class Tr, class T>
+ void apply_manip_body( stream_format_state<Ch, Tr>& self,
+ T manipulator) {
+ // modify our params according to the manipulator
+ basic_oaltstringstream<Ch, Tr> ss;
+ self.apply_on( ss );
+ ss << manipulator;
+ self.set_by_stream( ss );
+ }
+
+ template<class Ch, class Tr> inline
+ void stream_format_state<Ch,Tr>:: reset(Ch fill) {
+ // set our params to standard's default state. cf § 27.4.4.1 of the C++ norm
+ width_=0; precision_=6;
+ fill_=fill; // default is widen(' '), but we cant compute it without the locale
+ flags_ = std::ios_base::dec | std::ios_base::skipws;
+ // the adjust_field part is left equal to 0, which means right.
+ exceptions_ = std::ios_base::goodbit;
+ rdstate_ = std::ios_base::goodbit;
+ }
+
+
+// --- format_item:: --------------------------------------------------------
+
+ template<class Ch, class Tr, class Alloc>
+ void format_item<Ch, Tr, Alloc>::
+ reset (Ch fill) {
+ argN_=argN_no_posit; truncate_ = max_streamsize(); pad_scheme_ =0;
+ res_.resize(0); appendix_.resize(0);
+ fmtstate_.reset(fill);
+ }
+
+ template<class Ch, class Tr, class Alloc>
+ void format_item<Ch, Tr, Alloc>::
+ compute_states() {
+ // reflect pad_scheme_ on fmt_state_
+ // because some pad_schemes has complex consequences on several state params.
+ if(pad_scheme_ & zeropad) {
+ // ignore zeropad in left alignment :
+ if(fmtstate_.flags_ & std::ios_base::left) {
+ BOOST_ASSERT(!(fmtstate_.flags_ &(std::ios_base::adjustfield ^std::ios_base::left)));
+ // only left bit might be set. (not right, nor internal)
+ pad_scheme_ = pad_scheme_ & (~zeropad);
+ }
+ else {
+ pad_scheme_ &= ~spacepad; // printf ignores spacepad when zeropadding
+ fmtstate_.fill_='0';
+ fmtstate_.flags_ = (fmtstate_.flags_ & ~std::ios_base::adjustfield)
+ | std::ios_base::internal;
+ // removes all adjustfield bits, and adds internal.
+ }
+ }
+ if(pad_scheme_ & spacepad) {
+ if(fmtstate_.flags_ & std::ios_base::showpos)
+ pad_scheme_ &= ~spacepad;
+ }
+ }
+
+
+} } } // namespaces boost :: io :: detail
+
+
+#endif // BOOST_FORMAT_INTERNALS_HPP
diff --git a/boost/boost/format/internals_fwd.hpp b/boost/boost/format/internals_fwd.hpp
new file mode 100644
index 00000000000..e44eb3c1324
--- /dev/null
+++ b/boost/boost/format/internals_fwd.hpp
@@ -0,0 +1,60 @@
+// ----------------------------------------------------------------------------
+// internals_fwd.hpp : forward declarations, for internal headers
+// ----------------------------------------------------------------------------
+
+// Copyright Samuel Krempp 2003. 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)
+
+// See http://www.boost.org/libs/format for library home page
+
+// ----------------------------------------------------------------------------
+
+#ifndef BOOST_FORMAT_INTERNAL_FWD_HPP
+#define BOOST_FORMAT_INTERNAL_FWD_HPP
+
+#include <boost/format/format_fwd.hpp>
+#include <boost/config.hpp>
+
+
+namespace boost {
+namespace io {
+
+namespace detail {
+ template<class Ch, class Tr> struct stream_format_state;
+ template<class Ch, class Tr, class Alloc> struct format_item;
+
+
+ // these functions were intended as methods,
+ // but MSVC have problems with template member functions :
+ // defined in format_implementation.hpp :
+ template<class Ch, class Tr, class Alloc, class T>
+ basic_format<Ch, Tr, Alloc>&
+ modify_item_body (basic_format<Ch, Tr, Alloc>& self,
+ int itemN, T manipulator);
+
+ template<class Ch, class Tr, class Alloc, class T>
+ basic_format<Ch, Tr, Alloc>&
+ bind_arg_body (basic_format<Ch, Tr, Alloc>& self,
+ int argN, const T& val);
+
+ // in internals.hpp :
+ template<class Ch, class Tr, class T>
+ void apply_manip_body (stream_format_state<Ch, Tr>& self,
+ T manipulator);
+
+ // argument feeding (defined in feed_args.hpp ) :
+ template<class Ch, class Tr, class Alloc, class T>
+ void distribute (basic_format<Ch,Tr, Alloc>& self, T x);
+
+ template<class Ch, class Tr, class Alloc, class T>
+ basic_format<Ch, Tr, Alloc>&
+ feed (basic_format<Ch,Tr, Alloc>& self, T x);
+
+} // namespace detail
+
+} // namespace io
+} // namespace boost
+
+
+#endif // BOOST_FORMAT_INTERNAL_FWD_HPP
diff --git a/boost/boost/format/parsing.hpp b/boost/boost/format/parsing.hpp
new file mode 100644
index 00000000000..0bd15d56f32
--- /dev/null
+++ b/boost/boost/format/parsing.hpp
@@ -0,0 +1,491 @@
+// ----------------------------------------------------------------------------
+// parsing.hpp : implementation of the parsing member functions
+// ( parse, parse_printf_directive)
+// ----------------------------------------------------------------------------
+
+// Copyright Samuel Krempp 2003. 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)
+
+// see http://www.boost.org/libs/format for library home page
+
+// ----------------------------------------------------------------------------
+
+#ifndef BOOST_FORMAT_PARSING_HPP
+#define BOOST_FORMAT_PARSING_HPP
+
+
+#include <boost/format/format_class.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/assert.hpp>
+
+
+namespace boost {
+namespace io {
+namespace detail {
+
+#if defined(BOOST_NO_STD_LOCALE)
+ // streams will be used for narrow / widen. but these methods are not const
+ template<class T>
+ T& const_or_not(const T& x) {
+ return const_cast<T&> (x);
+ }
+#else
+ template<class T>
+ const T& const_or_not(const T& x) {
+ return x;
+ }
+#endif
+
+ template<class Ch, class Facet> inline
+ char wrap_narrow(const Facet& fac, Ch c, char deflt) {
+ return const_or_not(fac).narrow(c, deflt);
+ }
+
+ template<class Ch, class Facet> inline
+ bool wrap_isdigit(const Facet& fac, Ch c) {
+#if ! defined( BOOST_NO_LOCALE_ISDIGIT )
+ return fac.is(std::ctype<Ch>::digit, c);
+# else
+ using namespace std;
+ return isdigit(c);
+#endif
+ }
+
+ template<class Iter, class Facet>
+ Iter wrap_scan_notdigit(const Facet & fac, Iter beg, Iter end) {
+ using namespace std;
+ for( ; beg!=end && wrap_isdigit(fac, *beg); ++beg) ;
+ return beg;
+ }
+
+
+ // Input : [start, last) iterators range and a
+ // a Facet to use its widen/narrow member function
+ // Effects : read sequence and convert digits into integral n, of type Res
+ // Returns : n
+ template<class Res, class Iter, class Facet>
+ Iter str2int (const Iter & start, const Iter & last, Res & res,
+ const Facet& fac)
+ {
+ using namespace std;
+ Iter it;
+ res=0;
+ for(it=start; it != last && wrap_isdigit(fac, *it); ++it ) {
+ char cur_ch = wrap_narrow(fac, *it, 0); // cant fail.
+ res *= 10;
+ res += cur_ch - '0'; // 22.2.1.1.2.13 of the C++ standard
+ }
+ return it;
+ }
+
+ // skip printf's "asterisk-fields" directives in the format-string buf
+ // Input : char string, with starting index *pos_p
+ // a Facet merely to use its widen/narrow member function
+ // Effects : advance *pos_p by skipping printf's asterisk fields.
+ // Returns : nothing
+ template<class Iter, class Facet>
+ Iter skip_asterisk(Iter start, Iter last, const Facet& fac)
+ {
+ using namespace std;
+ ++ start;
+ start = wrap_scan_notdigit(fac, start, last);
+ if(start!=last && *start== const_or_not(fac).widen( '$') )
+ ++start;
+ return start;
+ }
+
+
+ // auxiliary func called by parse_printf_directive
+ // for centralising error handling
+ // it either throws if user sets the corresponding flag, or does nothing.
+ inline void maybe_throw_exception(unsigned char exceptions,
+ std::size_t pos, std::size_t size)
+ {
+ if(exceptions & io::bad_format_string_bit)
+ boost::throw_exception(io::bad_format_string(pos, size) );
+ }
+
+
+ // Input: the position of a printf-directive in the format-string
+ // a basic_ios& merely to use its widen/narrow member function
+ // a bitset'exceptions' telling whether to throw exceptions on errors.
+ // Returns:
+ // true if parse succeeded (ignore some errors if exceptions disabled)
+ // false if it failed so bad that the directive should be printed verbatim
+ // Effects:
+ // start is incremented so that *start is the first char after
+ // this directive
+ // *fpar is set with the parameters read in the directive
+ template<class Ch, class Tr, class Alloc, class Iter, class Facet>
+ bool parse_printf_directive(Iter & start, const Iter& last,
+ detail::format_item<Ch, Tr, Alloc> * fpar,
+ const Facet& fac,
+ std::size_t offset, unsigned char exceptions)
+ {
+ typedef typename basic_format<Ch, Tr, Alloc>::format_item_t format_item_t;
+
+ fpar->argN_ = format_item_t::argN_no_posit; // if no positional-directive
+ bool precision_set = false;
+ bool in_brackets=false;
+ Iter start0 = start;
+ std::size_t fstring_size = last-start0+offset;
+ if(*start== const_or_not(fac).widen( '|')) {
+ in_brackets=true;
+ if( ++start >= last ) {
+ maybe_throw_exception(exceptions, start-start0 + offset, fstring_size);
+ return false;
+ }
+ }
+
+ // the flag '0' would be picked as a digit for argument order, but here it's a flag :
+ if(*start== const_or_not(fac).widen( '0'))
+ goto parse_flags;
+
+ // handle argument order (%2$d) or possibly width specification: %2d
+ if(wrap_isdigit(fac, *start)) {
+ int n;
+ start = str2int(start, last, n, fac);
+ if( start >= last ) {
+ maybe_throw_exception(exceptions, start-start0+offset, fstring_size);
+ return false;
+ }
+
+ // %N% case : this is already the end of the directive
+ if( *start == const_or_not(fac).widen( '%') ) {
+ fpar->argN_ = n-1;
+ ++start;
+ if( in_brackets)
+ maybe_throw_exception(exceptions, start-start0+offset, fstring_size);
+ // but don't return. maybe "%" was used in lieu of '$', so we go on.
+ else
+ return true;
+ }
+
+ if ( *start== const_or_not(fac).widen( '$') ) {
+ fpar->argN_ = n-1;
+ ++start;
+ }
+ else {
+ // non-positionnal directive
+ fpar->fmtstate_.width_ = n;
+ fpar->argN_ = format_item_t::argN_no_posit;
+ goto parse_precision;
+ }
+ }
+
+ parse_flags:
+ // handle flags
+ while ( start != last) { // as long as char is one of + - = _ # 0 l h or ' '
+ // misc switches
+ switch ( wrap_narrow(fac, *start, 0)) {
+ case '\'' : break; // no effect yet. (painful to implement)
+ case 'l':
+ case 'h': // short/long modifier : for printf-comaptibility (no action needed)
+ break;
+ case '-':
+ fpar->fmtstate_.flags_ |= std::ios_base::left;
+ break;
+ case '=':
+ fpar->pad_scheme_ |= format_item_t::centered;
+ break;
+ case '_':
+ fpar->fmtstate_.flags_ |= std::ios_base::internal;
+ break;
+ case ' ':
+ fpar->pad_scheme_ |= format_item_t::spacepad;
+ break;
+ case '+':
+ fpar->fmtstate_.flags_ |= std::ios_base::showpos;
+ break;
+ case '0':
+ fpar->pad_scheme_ |= format_item_t::zeropad;
+ // need to know alignment before really setting flags,
+ // so just add 'zeropad' flag for now, it will be processed later.
+ break;
+ case '#':
+ fpar->fmtstate_.flags_ |= std::ios_base::showpoint | std::ios_base::showbase;
+ break;
+ default:
+ goto parse_width;
+ }
+ ++start;
+ } // loop on flag.
+
+ if( start>=last) {
+ maybe_throw_exception(exceptions, start-start0+offset, fstring_size);
+ return true;
+ }
+ parse_width:
+ // handle width spec
+ // first skip 'asterisk fields' : *, or *N$
+ if(*start == const_or_not(fac).widen( '*') )
+ start = skip_asterisk(start, last, fac);
+ if(start!=last && wrap_isdigit(fac, *start))
+ start = str2int(start, last, fpar->fmtstate_.width_, fac);
+
+ parse_precision:
+ if( start>= last) {
+ maybe_throw_exception(exceptions, start-start0+offset, fstring_size);
+ return true;
+ }
+ // handle precision spec
+ if (*start== const_or_not(fac).widen( '.')) {
+ ++start;
+ if(start != last && *start == const_or_not(fac).widen( '*') )
+ start = skip_asterisk(start, last, fac);
+ if(start != last && wrap_isdigit(fac, *start)) {
+ start = str2int(start, last, fpar->fmtstate_.precision_, fac);
+ precision_set = true;
+ }
+ else
+ fpar->fmtstate_.precision_ =0;
+ }
+
+ // handle formatting-type flags :
+ while( start != last && ( *start== const_or_not(fac).widen( 'l')
+ || *start== const_or_not(fac).widen( 'L')
+ || *start== const_or_not(fac).widen( 'h')) )
+ ++start;
+ if( start>=last) {
+ maybe_throw_exception(exceptions, start-start0+offset, fstring_size);
+ return true;
+ }
+
+ if( in_brackets && *start== const_or_not(fac).widen( '|') ) {
+ ++start;
+ return true;
+ }
+ switch ( wrap_narrow(fac, *start, 0) ) {
+ case 'X':
+ fpar->fmtstate_.flags_ |= std::ios_base::uppercase;
+ case 'p': // pointer => set hex.
+ case 'x':
+ fpar->fmtstate_.flags_ &= ~std::ios_base::basefield;
+ fpar->fmtstate_.flags_ |= std::ios_base::hex;
+ break;
+
+ case 'o':
+ fpar->fmtstate_.flags_ &= ~std::ios_base::basefield;
+ fpar->fmtstate_.flags_ |= std::ios_base::oct;
+ break;
+
+ case 'E':
+ fpar->fmtstate_.flags_ |= std::ios_base::uppercase;
+ case 'e':
+ fpar->fmtstate_.flags_ &= ~std::ios_base::floatfield;
+ fpar->fmtstate_.flags_ |= std::ios_base::scientific;
+
+ fpar->fmtstate_.flags_ &= ~std::ios_base::basefield;
+ fpar->fmtstate_.flags_ |= std::ios_base::dec;
+ break;
+
+ case 'f':
+ fpar->fmtstate_.flags_ &= ~std::ios_base::floatfield;
+ fpar->fmtstate_.flags_ |= std::ios_base::fixed;
+ case 'u':
+ case 'd':
+ case 'i':
+ fpar->fmtstate_.flags_ &= ~std::ios_base::basefield;
+ fpar->fmtstate_.flags_ |= std::ios_base::dec;
+ break;
+
+ case 'T':
+ ++start;
+ if( start >= last)
+ maybe_throw_exception(exceptions, start-start0+offset, fstring_size);
+ else
+ fpar->fmtstate_.fill_ = *start;
+ fpar->pad_scheme_ |= format_item_t::tabulation;
+ fpar->argN_ = format_item_t::argN_tabulation;
+ break;
+ case 't':
+ fpar->fmtstate_.fill_ = const_or_not(fac).widen( ' ');
+ fpar->pad_scheme_ |= format_item_t::tabulation;
+ fpar->argN_ = format_item_t::argN_tabulation;
+ break;
+
+ case 'G':
+ fpar->fmtstate_.flags_ |= std::ios_base::uppercase;
+ break;
+ case 'g': // 'g' conversion is default for floats.
+ fpar->fmtstate_.flags_ &= ~std::ios_base::basefield;
+ fpar->fmtstate_.flags_ |= std::ios_base::dec;
+
+ // CLEAR all floatield flags, so stream will CHOOSE
+ fpar->fmtstate_.flags_ &= ~std::ios_base::floatfield;
+ break;
+
+ case 'C':
+ case 'c':
+ fpar->truncate_ = 1;
+ break;
+ case 'S':
+ case 's':
+ if(precision_set) // handle truncation manually, with own parameter.
+ fpar->truncate_ = fpar->fmtstate_.precision_;
+ fpar->fmtstate_.precision_ = 6; // default stream precision.
+ break;
+ case 'n' :
+ fpar->argN_ = format_item_t::argN_ignored;
+ break;
+ default:
+ maybe_throw_exception(exceptions, start-start0+offset, fstring_size);
+ }
+ ++start;
+
+ if( in_brackets ) {
+ if( start != last && *start== const_or_not(fac).widen( '|') ) {
+ ++start;
+ return true;
+ }
+ else maybe_throw_exception(exceptions, start-start0+offset, fstring_size);
+ }
+ return true;
+ }
+ // -end parse_printf_directive()
+
+ template<class String, class Facet>
+ int upper_bound_from_fstring(const String& buf,
+ const typename String::value_type arg_mark,
+ const Facet& fac,
+ unsigned char exceptions)
+ {
+ // quick-parsing of the format-string to count arguments mark (arg_mark, '%')
+ // returns : upper bound on the number of format items in the format strings
+ using namespace boost::io;
+ typename String::size_type i1=0;
+ int num_items=0;
+ while( (i1=buf.find(arg_mark,i1)) != String::npos ) {
+ if( i1+1 >= buf.size() ) {
+ if(exceptions & bad_format_string_bit)
+ boost::throw_exception(bad_format_string(i1, buf.size() )); // must not end in ".. %"
+ else break; // stop there, ignore last '%'
+ }
+ if(buf[i1+1] == buf[i1] ) {// escaped "%%"
+ i1+=2; continue;
+ }
+
+ ++i1;
+ // in case of %N% directives, dont count it double (wastes allocations..) :
+ i1 = detail::wrap_scan_notdigit(fac, buf.begin()+i1, buf.end()) - buf.begin();
+ if( i1 < buf.size() && buf[i1] == arg_mark )
+ ++i1;
+ ++num_items;
+ }
+ return num_items;
+ }
+ template<class String> inline
+ void append_string(String& dst, const String& src,
+ const typename String::size_type beg,
+ const typename String::size_type end) {
+#if !defined(BOOST_NO_STRING_APPEND)
+ dst.append(src.begin()+beg, src.begin()+end);
+#else
+ dst += src.substr(beg, end-beg);
+#endif
+ }
+
+} // detail namespace
+} // io namespace
+
+
+
+// -----------------------------------------------
+// format :: parse(..)
+
+ template<class Ch, class Tr, class Alloc>
+ basic_format<Ch, Tr, Alloc>& basic_format<Ch, Tr, Alloc>::
+ parse (const string_type& buf) {
+ // parse the format-string
+ using namespace std;
+#if !defined(BOOST_NO_STD_LOCALE)
+ const std::ctype<Ch> & fac = BOOST_USE_FACET( std::ctype<Ch>, getloc());
+#else
+ io::basic_oaltstringstream<Ch, Tr, Alloc> fac;
+ //has widen and narrow even on compilers without locale
+#endif
+
+ const Ch arg_mark = io::detail::const_or_not(fac).widen( '%');
+ bool ordered_args=true;
+ int max_argN=-1;
+
+ // A: find upper_bound on num_items and allocates arrays
+ int num_items = io::detail::upper_bound_from_fstring(buf, arg_mark, fac, exceptions());
+ make_or_reuse_data(num_items);
+
+ // B: Now the real parsing of the format string :
+ num_items=0;
+ typename string_type::size_type i0=0, i1=0;
+ typename string_type::const_iterator it;
+ bool special_things=false;
+ int cur_item=0;
+ while( (i1=buf.find(arg_mark,i1)) != string_type::npos ) {
+ string_type & piece = (cur_item==0) ? prefix_ : items_[cur_item-1].appendix_;
+ if( buf[i1+1] == buf[i1] ) { // escaped mark, '%%'
+ io::detail::append_string(piece, buf, i0, i1+1);
+ i1+=2; i0=i1;
+ continue;
+ }
+ BOOST_ASSERT( static_cast<unsigned int>(cur_item) < items_.size() || cur_item==0);
+
+ if(i1!=i0)
+ io::detail::append_string(piece, buf, i0, i1);
+ ++i1;
+ it = buf.begin()+i1;
+ bool parse_ok = io::detail::parse_printf_directive(
+ it, buf.end(), &items_[cur_item], fac, i1, exceptions());
+ i1 = it - buf.begin();
+ if( ! parse_ok ) // the directive will be printed verbatim
+ continue;
+ i0=i1;
+ items_[cur_item].compute_states(); // process complex options, like zeropad, into params
+
+ int argN=items_[cur_item].argN_;
+ if(argN == format_item_t::argN_ignored)
+ continue;
+ if(argN ==format_item_t::argN_no_posit)
+ ordered_args=false;
+ else if(argN == format_item_t::argN_tabulation) special_things=true;
+ else if(argN > max_argN) max_argN = argN;
+ ++num_items;
+ ++cur_item;
+ } // loop on %'s
+ BOOST_ASSERT(cur_item == num_items);
+
+ // store the final piece of string
+ {
+ string_type & piece = (cur_item==0) ? prefix_ : items_[cur_item-1].appendix_;
+ io::detail::append_string(piece, buf, i0, buf.size());
+ }
+
+ if( !ordered_args) {
+ if(max_argN >= 0 ) { // dont mix positional with non-positionnal directives
+ if(exceptions() & io::bad_format_string_bit)
+ boost::throw_exception(io::bad_format_string(max_argN, 0));
+ // else do nothing. => positionnal arguments are processed as non-positionnal
+ }
+ // set things like it would have been with positional directives :
+ int non_ordered_items = 0;
+ for(int i=0; i< num_items; ++i)
+ if(items_[i].argN_ == format_item_t::argN_no_posit) {
+ items_[i].argN_ = non_ordered_items;
+ ++non_ordered_items;
+ }
+ max_argN = non_ordered_items-1;
+ }
+
+ // C: set some member data :
+ items_.resize(num_items, format_item_t(io::detail::const_or_not(fac).widen( ' ')) );
+
+ if(special_things) style_ |= special_needs;
+ num_args_ = max_argN + 1;
+ if(ordered_args) style_ |= ordered;
+ else style_ &= ~ordered;
+ return *this;
+ }
+
+} // namespace boost
+
+
+#endif // BOOST_FORMAT_PARSING_HPP
diff --git a/boost/boost/function.hpp b/boost/boost/function.hpp
new file mode 100644
index 00000000000..c3f3572a98b
--- /dev/null
+++ b/boost/boost/function.hpp
@@ -0,0 +1,64 @@
+// Boost.Function library
+
+// Copyright Douglas Gregor 2001-2003. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org/libs/function
+
+// William Kempf, Jesse Jones and Karl Nelson were all very helpful in the
+// design of this library.
+
+#include <boost/preprocessor/iterate.hpp>
+#include <boost/detail/workaround.hpp>
+
+#ifndef BOOST_FUNCTION_MAX_ARGS
+# define BOOST_FUNCTION_MAX_ARGS 10
+#endif // BOOST_FUNCTION_MAX_ARGS
+
+// Include the prologue here so that the use of file-level iteration
+// in anything that may be included by function_template.hpp doesn't break
+#include <boost/function/detail/prologue.hpp>
+
+// Older versions of the IBM C++ compiler do not handle file iterations well
+#if BOOST_WORKAROUND(__IBMCPP__, >= 500) && BOOST_WORKAROUND(__IBMCPP__, < 800)
+# if BOOST_FUNCTION_MAX_ARGS >= 0
+# include <boost/function/function0.hpp>
+# endif
+# if BOOST_FUNCTION_MAX_ARGS >= 1
+# include <boost/function/function1.hpp>
+# endif
+# if BOOST_FUNCTION_MAX_ARGS >= 2
+# include <boost/function/function2.hpp>
+# endif
+# if BOOST_FUNCTION_MAX_ARGS >= 3
+# include <boost/function/function3.hpp>
+# endif
+# if BOOST_FUNCTION_MAX_ARGS >= 4
+# include <boost/function/function4.hpp>
+# endif
+# if BOOST_FUNCTION_MAX_ARGS >= 5
+# include <boost/function/function5.hpp>
+# endif
+# if BOOST_FUNCTION_MAX_ARGS >= 6
+# include <boost/function/function6.hpp>
+# endif
+# if BOOST_FUNCTION_MAX_ARGS >= 7
+# include <boost/function/function7.hpp>
+# endif
+# if BOOST_FUNCTION_MAX_ARGS >= 8
+# include <boost/function/function8.hpp>
+# endif
+# if BOOST_FUNCTION_MAX_ARGS >= 9
+# include <boost/function/function9.hpp>
+# endif
+# if BOOST_FUNCTION_MAX_ARGS >= 10
+# include <boost/function/function10.hpp>
+# endif
+#else
+// What is the '3' for?
+# define BOOST_PP_ITERATION_PARAMS_1 (3,(0,BOOST_FUNCTION_MAX_ARGS,<boost/function/detail/function_iterate.hpp>))
+# include BOOST_PP_ITERATE()
+# undef BOOST_PP_ITERATION_PARAMS_1
+#endif
diff --git a/boost/boost/function/detail/function_iterate.hpp b/boost/boost/function/detail/function_iterate.hpp
new file mode 100644
index 00000000000..5370b36aac5
--- /dev/null
+++ b/boost/boost/function/detail/function_iterate.hpp
@@ -0,0 +1,16 @@
+// Boost.Function library
+
+// Copyright Douglas Gregor 2003. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+#if !defined(BOOST_PP_IS_ITERATING)
+# error Boost.Function - do not include this file!
+#endif
+
+#define BOOST_FUNCTION_NUM_ARGS BOOST_PP_ITERATION()
+#include <boost/function/detail/maybe_include.hpp>
+#undef BOOST_FUNCTION_NUM_ARGS
+
diff --git a/boost/boost/function/detail/gen_maybe_include.pl b/boost/boost/function/detail/gen_maybe_include.pl
new file mode 100644
index 00000000000..d0629205e10
--- /dev/null
+++ b/boost/boost/function/detail/gen_maybe_include.pl
@@ -0,0 +1,37 @@
+#!/usr/bin/perl -w
+#
+# Boost.Function library
+#
+# Copyright (C) 2001-2003 Douglas Gregor (gregod@cs.rpi.edu)
+#
+# Permission to copy, use, sell and distribute this software is granted
+# provided this copyright notice appears in all copies.
+# Permission to modify the code and to distribute modified code is granted
+# provided this copyright notice appears in all copies, and a notice
+# that the code was modified is included with the copyright notice.
+#
+# This software is provided "as is" without express or implied warranty,
+# and with no claim as to its suitability for any purpose.
+#
+# For more information, see http://www.boost.org
+use English;
+
+$max_args = $ARGV[0];
+
+open (OUT, ">maybe_include.hpp") or die("Cannot write to maybe_include.hpp");
+for($on_arg = 0; $on_arg <= $max_args; ++$on_arg) {
+ if ($on_arg == 0) {
+ print OUT "#if";
+ }
+ else {
+ print OUT "#elif";
+ }
+ print OUT " BOOST_FUNCTION_NUM_ARGS == $on_arg\n";
+ print OUT "# ifndef BOOST_FUNCTION_$on_arg\n";
+ print OUT "# define BOOST_FUNCTION_$on_arg\n";
+ print OUT "# include <boost/function/function_template.hpp>\n";
+ print OUT "# endif\n";
+}
+print OUT "#else\n";
+print OUT "# error Cannot handle Boost.Function objects that accept more than $max_args arguments!\n";
+print OUT "#endif\n";
diff --git a/boost/boost/function/detail/maybe_include.hpp b/boost/boost/function/detail/maybe_include.hpp
new file mode 100644
index 00000000000..92f71bb2273
--- /dev/null
+++ b/boost/boost/function/detail/maybe_include.hpp
@@ -0,0 +1,267 @@
+// Boost.Function library
+
+// Copyright Douglas Gregor 2003. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#if BOOST_FUNCTION_NUM_ARGS == 0
+# ifndef BOOST_FUNCTION_0
+# define BOOST_FUNCTION_0
+# include <boost/function/function_template.hpp>
+# endif
+#elif BOOST_FUNCTION_NUM_ARGS == 1
+# ifndef BOOST_FUNCTION_1
+# define BOOST_FUNCTION_1
+# include <boost/function/function_template.hpp>
+# endif
+#elif BOOST_FUNCTION_NUM_ARGS == 2
+# ifndef BOOST_FUNCTION_2
+# define BOOST_FUNCTION_2
+# include <boost/function/function_template.hpp>
+# endif
+#elif BOOST_FUNCTION_NUM_ARGS == 3
+# ifndef BOOST_FUNCTION_3
+# define BOOST_FUNCTION_3
+# include <boost/function/function_template.hpp>
+# endif
+#elif BOOST_FUNCTION_NUM_ARGS == 4
+# ifndef BOOST_FUNCTION_4
+# define BOOST_FUNCTION_4
+# include <boost/function/function_template.hpp>
+# endif
+#elif BOOST_FUNCTION_NUM_ARGS == 5
+# ifndef BOOST_FUNCTION_5
+# define BOOST_FUNCTION_5
+# include <boost/function/function_template.hpp>
+# endif
+#elif BOOST_FUNCTION_NUM_ARGS == 6
+# ifndef BOOST_FUNCTION_6
+# define BOOST_FUNCTION_6
+# include <boost/function/function_template.hpp>
+# endif
+#elif BOOST_FUNCTION_NUM_ARGS == 7
+# ifndef BOOST_FUNCTION_7
+# define BOOST_FUNCTION_7
+# include <boost/function/function_template.hpp>
+# endif
+#elif BOOST_FUNCTION_NUM_ARGS == 8
+# ifndef BOOST_FUNCTION_8
+# define BOOST_FUNCTION_8
+# include <boost/function/function_template.hpp>
+# endif
+#elif BOOST_FUNCTION_NUM_ARGS == 9
+# ifndef BOOST_FUNCTION_9
+# define BOOST_FUNCTION_9
+# include <boost/function/function_template.hpp>
+# endif
+#elif BOOST_FUNCTION_NUM_ARGS == 10
+# ifndef BOOST_FUNCTION_10
+# define BOOST_FUNCTION_10
+# include <boost/function/function_template.hpp>
+# endif
+#elif BOOST_FUNCTION_NUM_ARGS == 11
+# ifndef BOOST_FUNCTION_11
+# define BOOST_FUNCTION_11
+# include <boost/function/function_template.hpp>
+# endif
+#elif BOOST_FUNCTION_NUM_ARGS == 12
+# ifndef BOOST_FUNCTION_12
+# define BOOST_FUNCTION_12
+# include <boost/function/function_template.hpp>
+# endif
+#elif BOOST_FUNCTION_NUM_ARGS == 13
+# ifndef BOOST_FUNCTION_13
+# define BOOST_FUNCTION_13
+# include <boost/function/function_template.hpp>
+# endif
+#elif BOOST_FUNCTION_NUM_ARGS == 14
+# ifndef BOOST_FUNCTION_14
+# define BOOST_FUNCTION_14
+# include <boost/function/function_template.hpp>
+# endif
+#elif BOOST_FUNCTION_NUM_ARGS == 15
+# ifndef BOOST_FUNCTION_15
+# define BOOST_FUNCTION_15
+# include <boost/function/function_template.hpp>
+# endif
+#elif BOOST_FUNCTION_NUM_ARGS == 16
+# ifndef BOOST_FUNCTION_16
+# define BOOST_FUNCTION_16
+# include <boost/function/function_template.hpp>
+# endif
+#elif BOOST_FUNCTION_NUM_ARGS == 17
+# ifndef BOOST_FUNCTION_17
+# define BOOST_FUNCTION_17
+# include <boost/function/function_template.hpp>
+# endif
+#elif BOOST_FUNCTION_NUM_ARGS == 18
+# ifndef BOOST_FUNCTION_18
+# define BOOST_FUNCTION_18
+# include <boost/function/function_template.hpp>
+# endif
+#elif BOOST_FUNCTION_NUM_ARGS == 19
+# ifndef BOOST_FUNCTION_19
+# define BOOST_FUNCTION_19
+# include <boost/function/function_template.hpp>
+# endif
+#elif BOOST_FUNCTION_NUM_ARGS == 20
+# ifndef BOOST_FUNCTION_20
+# define BOOST_FUNCTION_20
+# include <boost/function/function_template.hpp>
+# endif
+#elif BOOST_FUNCTION_NUM_ARGS == 21
+# ifndef BOOST_FUNCTION_21
+# define BOOST_FUNCTION_21
+# include <boost/function/function_template.hpp>
+# endif
+#elif BOOST_FUNCTION_NUM_ARGS == 22
+# ifndef BOOST_FUNCTION_22
+# define BOOST_FUNCTION_22
+# include <boost/function/function_template.hpp>
+# endif
+#elif BOOST_FUNCTION_NUM_ARGS == 23
+# ifndef BOOST_FUNCTION_23
+# define BOOST_FUNCTION_23
+# include <boost/function/function_template.hpp>
+# endif
+#elif BOOST_FUNCTION_NUM_ARGS == 24
+# ifndef BOOST_FUNCTION_24
+# define BOOST_FUNCTION_24
+# include <boost/function/function_template.hpp>
+# endif
+#elif BOOST_FUNCTION_NUM_ARGS == 25
+# ifndef BOOST_FUNCTION_25
+# define BOOST_FUNCTION_25
+# include <boost/function/function_template.hpp>
+# endif
+#elif BOOST_FUNCTION_NUM_ARGS == 26
+# ifndef BOOST_FUNCTION_26
+# define BOOST_FUNCTION_26
+# include <boost/function/function_template.hpp>
+# endif
+#elif BOOST_FUNCTION_NUM_ARGS == 27
+# ifndef BOOST_FUNCTION_27
+# define BOOST_FUNCTION_27
+# include <boost/function/function_template.hpp>
+# endif
+#elif BOOST_FUNCTION_NUM_ARGS == 28
+# ifndef BOOST_FUNCTION_28
+# define BOOST_FUNCTION_28
+# include <boost/function/function_template.hpp>
+# endif
+#elif BOOST_FUNCTION_NUM_ARGS == 29
+# ifndef BOOST_FUNCTION_29
+# define BOOST_FUNCTION_29
+# include <boost/function/function_template.hpp>
+# endif
+#elif BOOST_FUNCTION_NUM_ARGS == 30
+# ifndef BOOST_FUNCTION_30
+# define BOOST_FUNCTION_30
+# include <boost/function/function_template.hpp>
+# endif
+#elif BOOST_FUNCTION_NUM_ARGS == 31
+# ifndef BOOST_FUNCTION_31
+# define BOOST_FUNCTION_31
+# include <boost/function/function_template.hpp>
+# endif
+#elif BOOST_FUNCTION_NUM_ARGS == 32
+# ifndef BOOST_FUNCTION_32
+# define BOOST_FUNCTION_32
+# include <boost/function/function_template.hpp>
+# endif
+#elif BOOST_FUNCTION_NUM_ARGS == 33
+# ifndef BOOST_FUNCTION_33
+# define BOOST_FUNCTION_33
+# include <boost/function/function_template.hpp>
+# endif
+#elif BOOST_FUNCTION_NUM_ARGS == 34
+# ifndef BOOST_FUNCTION_34
+# define BOOST_FUNCTION_34
+# include <boost/function/function_template.hpp>
+# endif
+#elif BOOST_FUNCTION_NUM_ARGS == 35
+# ifndef BOOST_FUNCTION_35
+# define BOOST_FUNCTION_35
+# include <boost/function/function_template.hpp>
+# endif
+#elif BOOST_FUNCTION_NUM_ARGS == 36
+# ifndef BOOST_FUNCTION_36
+# define BOOST_FUNCTION_36
+# include <boost/function/function_template.hpp>
+# endif
+#elif BOOST_FUNCTION_NUM_ARGS == 37
+# ifndef BOOST_FUNCTION_37
+# define BOOST_FUNCTION_37
+# include <boost/function/function_template.hpp>
+# endif
+#elif BOOST_FUNCTION_NUM_ARGS == 38
+# ifndef BOOST_FUNCTION_38
+# define BOOST_FUNCTION_38
+# include <boost/function/function_template.hpp>
+# endif
+#elif BOOST_FUNCTION_NUM_ARGS == 39
+# ifndef BOOST_FUNCTION_39
+# define BOOST_FUNCTION_39
+# include <boost/function/function_template.hpp>
+# endif
+#elif BOOST_FUNCTION_NUM_ARGS == 40
+# ifndef BOOST_FUNCTION_40
+# define BOOST_FUNCTION_40
+# include <boost/function/function_template.hpp>
+# endif
+#elif BOOST_FUNCTION_NUM_ARGS == 41
+# ifndef BOOST_FUNCTION_41
+# define BOOST_FUNCTION_41
+# include <boost/function/function_template.hpp>
+# endif
+#elif BOOST_FUNCTION_NUM_ARGS == 42
+# ifndef BOOST_FUNCTION_42
+# define BOOST_FUNCTION_42
+# include <boost/function/function_template.hpp>
+# endif
+#elif BOOST_FUNCTION_NUM_ARGS == 43
+# ifndef BOOST_FUNCTION_43
+# define BOOST_FUNCTION_43
+# include <boost/function/function_template.hpp>
+# endif
+#elif BOOST_FUNCTION_NUM_ARGS == 44
+# ifndef BOOST_FUNCTION_44
+# define BOOST_FUNCTION_44
+# include <boost/function/function_template.hpp>
+# endif
+#elif BOOST_FUNCTION_NUM_ARGS == 45
+# ifndef BOOST_FUNCTION_45
+# define BOOST_FUNCTION_45
+# include <boost/function/function_template.hpp>
+# endif
+#elif BOOST_FUNCTION_NUM_ARGS == 46
+# ifndef BOOST_FUNCTION_46
+# define BOOST_FUNCTION_46
+# include <boost/function/function_template.hpp>
+# endif
+#elif BOOST_FUNCTION_NUM_ARGS == 47
+# ifndef BOOST_FUNCTION_47
+# define BOOST_FUNCTION_47
+# include <boost/function/function_template.hpp>
+# endif
+#elif BOOST_FUNCTION_NUM_ARGS == 48
+# ifndef BOOST_FUNCTION_48
+# define BOOST_FUNCTION_48
+# include <boost/function/function_template.hpp>
+# endif
+#elif BOOST_FUNCTION_NUM_ARGS == 49
+# ifndef BOOST_FUNCTION_49
+# define BOOST_FUNCTION_49
+# include <boost/function/function_template.hpp>
+# endif
+#elif BOOST_FUNCTION_NUM_ARGS == 50
+# ifndef BOOST_FUNCTION_50
+# define BOOST_FUNCTION_50
+# include <boost/function/function_template.hpp>
+# endif
+#else
+# error Cannot handle Boost.Function objects that accept more than 50 arguments!
+#endif
diff --git a/boost/boost/function/detail/prologue.hpp b/boost/boost/function/detail/prologue.hpp
new file mode 100644
index 00000000000..1ef5f6e3127
--- /dev/null
+++ b/boost/boost/function/detail/prologue.hpp
@@ -0,0 +1,24 @@
+// Boost.Function library
+
+// Copyright Douglas Gregor 2002-2003. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#ifndef BOOST_FUNCTION_PROLOGUE_HPP
+#define BOOST_FUNCTION_PROLOGUE_HPP
+# include <cassert>
+# include <algorithm>
+# include <boost/throw_exception.hpp>
+# include <boost/config.hpp>
+# include <boost/function/function_base.hpp>
+# include <boost/mem_fn.hpp>
+# include <boost/type_traits/is_integral.hpp>
+# include <boost/preprocessor/enum.hpp>
+# include <boost/preprocessor/enum_params.hpp>
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/repeat.hpp>
+# include <boost/preprocessor/inc.hpp>
+#endif // BOOST_FUNCTION_PROLOGUE_HPP
diff --git a/boost/boost/function/function0.hpp b/boost/boost/function/function0.hpp
new file mode 100644
index 00000000000..65a02e5facb
--- /dev/null
+++ b/boost/boost/function/function0.hpp
@@ -0,0 +1,12 @@
+// Boost.Function library
+
+// Copyright Douglas Gregor 2002-2003. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_FUNCTION_NUM_ARGS 0
+#include <boost/function/detail/maybe_include.hpp>
+#undef BOOST_FUNCTION_NUM_ARGS
diff --git a/boost/boost/function/function1.hpp b/boost/boost/function/function1.hpp
new file mode 100644
index 00000000000..9089715155c
--- /dev/null
+++ b/boost/boost/function/function1.hpp
@@ -0,0 +1,12 @@
+// Boost.Function library
+
+// Copyright Douglas Gregor 2002-2003. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_FUNCTION_NUM_ARGS 1
+#include <boost/function/detail/maybe_include.hpp>
+#undef BOOST_FUNCTION_NUM_ARGS
diff --git a/boost/boost/function/function10.hpp b/boost/boost/function/function10.hpp
new file mode 100644
index 00000000000..65627248496
--- /dev/null
+++ b/boost/boost/function/function10.hpp
@@ -0,0 +1,12 @@
+// Boost.Function library
+
+// Copyright Douglas Gregor 2002-2003. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_FUNCTION_NUM_ARGS 10
+#include <boost/function/detail/maybe_include.hpp>
+#undef BOOST_FUNCTION_NUM_ARGS
diff --git a/boost/boost/function/function2.hpp b/boost/boost/function/function2.hpp
new file mode 100644
index 00000000000..dc8bf97521d
--- /dev/null
+++ b/boost/boost/function/function2.hpp
@@ -0,0 +1,12 @@
+// Boost.Function library
+
+// Copyright Douglas Gregor 2002-2003. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_FUNCTION_NUM_ARGS 2
+#include <boost/function/detail/maybe_include.hpp>
+#undef BOOST_FUNCTION_NUM_ARGS
diff --git a/boost/boost/function/function3.hpp b/boost/boost/function/function3.hpp
new file mode 100644
index 00000000000..19d1a49dd5a
--- /dev/null
+++ b/boost/boost/function/function3.hpp
@@ -0,0 +1,12 @@
+// Boost.Function library
+
+// Copyright Douglas Gregor 2002-2003. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_FUNCTION_NUM_ARGS 3
+#include <boost/function/detail/maybe_include.hpp>
+#undef BOOST_FUNCTION_NUM_ARGS
diff --git a/boost/boost/function/function4.hpp b/boost/boost/function/function4.hpp
new file mode 100644
index 00000000000..f3349e2dc97
--- /dev/null
+++ b/boost/boost/function/function4.hpp
@@ -0,0 +1,12 @@
+// Boost.Function library
+
+// Copyright Douglas Gregor 2002-2003. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_FUNCTION_NUM_ARGS 4
+#include <boost/function/detail/maybe_include.hpp>
+#undef BOOST_FUNCTION_NUM_ARGS
diff --git a/boost/boost/function/function5.hpp b/boost/boost/function/function5.hpp
new file mode 100644
index 00000000000..a1305eb5ce2
--- /dev/null
+++ b/boost/boost/function/function5.hpp
@@ -0,0 +1,12 @@
+// Boost.Function library
+
+// Copyright Douglas Gregor 2002-2003. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_FUNCTION_NUM_ARGS 5
+#include <boost/function/detail/maybe_include.hpp>
+#undef BOOST_FUNCTION_NUM_ARGS
diff --git a/boost/boost/function/function6.hpp b/boost/boost/function/function6.hpp
new file mode 100644
index 00000000000..1f609149196
--- /dev/null
+++ b/boost/boost/function/function6.hpp
@@ -0,0 +1,12 @@
+// Boost.Function library
+
+// Copyright Douglas Gregor 2002-2003. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_FUNCTION_NUM_ARGS 6
+#include <boost/function/detail/maybe_include.hpp>
+#undef BOOST_FUNCTION_NUM_ARGS
diff --git a/boost/boost/function/function7.hpp b/boost/boost/function/function7.hpp
new file mode 100644
index 00000000000..68542ed46aa
--- /dev/null
+++ b/boost/boost/function/function7.hpp
@@ -0,0 +1,12 @@
+// Boost.Function library
+
+// Copyright Douglas Gregor 2002-2003. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_FUNCTION_NUM_ARGS 7
+#include <boost/function/detail/maybe_include.hpp>
+#undef BOOST_FUNCTION_NUM_ARGS
diff --git a/boost/boost/function/function8.hpp b/boost/boost/function/function8.hpp
new file mode 100644
index 00000000000..cf2c37661f7
--- /dev/null
+++ b/boost/boost/function/function8.hpp
@@ -0,0 +1,12 @@
+// Boost.Function library
+
+// Copyright Douglas Gregor 2002-2003. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_FUNCTION_NUM_ARGS 8
+#include <boost/function/detail/maybe_include.hpp>
+#undef BOOST_FUNCTION_NUM_ARGS
diff --git a/boost/boost/function/function9.hpp b/boost/boost/function/function9.hpp
new file mode 100644
index 00000000000..590e0883d78
--- /dev/null
+++ b/boost/boost/function/function9.hpp
@@ -0,0 +1,12 @@
+// Boost.Function library
+
+// Copyright Douglas Gregor 2002-2003. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_FUNCTION_NUM_ARGS 9
+#include <boost/function/detail/maybe_include.hpp>
+#undef BOOST_FUNCTION_NUM_ARGS
diff --git a/boost/boost/function/function_base.hpp b/boost/boost/function/function_base.hpp
new file mode 100644
index 00000000000..7165434c0ff
--- /dev/null
+++ b/boost/boost/function/function_base.hpp
@@ -0,0 +1,736 @@
+// Boost.Function library
+
+// Copyright Douglas Gregor 2001-2006. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#ifndef BOOST_FUNCTION_BASE_HEADER
+#define BOOST_FUNCTION_BASE_HEADER
+
+#include <stdexcept>
+#include <string>
+#include <memory>
+#include <new>
+#include <typeinfo>
+#include <boost/config.hpp>
+#include <boost/assert.hpp>
+#include <boost/type_traits/is_integral.hpp>
+#include <boost/type_traits/composite_traits.hpp>
+#include <boost/ref.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/type_traits/alignment_of.hpp>
+#ifndef BOOST_NO_SFINAE
+# include "boost/utility/enable_if.hpp"
+#else
+# include "boost/mpl/bool.hpp"
+#endif
+#include <boost/function_equal.hpp>
+
+// Borrowed from Boost.Python library: determines the cases where we
+// need to use std::type_info::name to compare instead of operator==.
+# if (defined(__GNUC__) && __GNUC__ >= 3) \
+ || defined(_AIX) \
+ || ( defined(__sgi) && defined(__host_mips))
+# include <cstring>
+# define BOOST_FUNCTION_COMPARE_TYPE_ID(X,Y) \
+ (std::strcmp((X).name(),(Y).name()) == 0)
+# else
+# define BOOST_FUNCTION_COMPARE_TYPE_ID(X,Y) ((X)==(Y))
+#endif
+
+#if defined(BOOST_MSVC) && BOOST_MSVC <= 1300 || defined(__ICL) && __ICL <= 600 || defined(__MWERKS__) && __MWERKS__ < 0x2406 && !defined(BOOST_STRICT_CONFIG)
+# define BOOST_FUNCTION_TARGET_FIX(x) x
+#else
+# define BOOST_FUNCTION_TARGET_FIX(x)
+#endif // not MSVC
+
+#if defined(__sgi) && defined(_COMPILER_VERSION) && _COMPILER_VERSION <= 730 && !defined(BOOST_STRICT_CONFIG)
+// Work around a compiler bug.
+// boost::python::objects::function has to be seen by the compiler before the
+// boost::function class template.
+namespace boost { namespace python { namespace objects {
+ class function;
+}}}
+#endif
+
+#if defined (BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
+ || defined(BOOST_BCB_PARTIAL_SPECIALIZATION_BUG) \
+ || !(BOOST_STRICT_CONFIG || !defined(__SUNPRO_CC) || __SUNPRO_CC > 0x540)
+# define BOOST_FUNCTION_NO_FUNCTION_TYPE_SYNTAX
+#endif
+
+#if !BOOST_WORKAROUND(__BORLANDC__, < 0x600)
+# define BOOST_FUNCTION_ENABLE_IF_NOT_INTEGRAL(Functor,Type) \
+ typename ::boost::enable_if_c<(::boost::type_traits::ice_not< \
+ (::boost::is_integral<Functor>::value)>::value), \
+ Type>::type
+#else
+// BCC doesn't recognize this depends on a template argument and complains
+// about the use of 'typename'
+# define BOOST_FUNCTION_ENABLE_IF_NOT_INTEGRAL(Functor,Type) \
+ ::boost::enable_if_c<(::boost::type_traits::ice_not< \
+ (::boost::is_integral<Functor>::value)>::value), \
+ Type>::type
+#endif
+
+#if !defined(BOOST_FUNCTION_NO_FUNCTION_TYPE_SYNTAX)
+namespace boost {
+
+#if defined(__sgi) && defined(_COMPILER_VERSION) && _COMPILER_VERSION <= 730 && !defined(BOOST_STRICT_CONFIG)
+// The library shipping with MIPSpro 7.3.1.3m has a broken allocator<void>
+class function_base;
+
+template<typename Signature,
+ typename Allocator = std::allocator<function_base> >
+class function;
+#else
+template<typename Signature, typename Allocator = std::allocator<void> >
+class function;
+#endif
+
+template<typename Signature, typename Allocator>
+inline void swap(function<Signature, Allocator>& f1,
+ function<Signature, Allocator>& f2)
+{
+ f1.swap(f2);
+}
+
+} // end namespace boost
+#endif // have partial specialization
+
+namespace boost {
+ namespace detail {
+ namespace function {
+ class X;
+
+ /**
+ * A buffer used to store small function objects in
+ * boost::function. It is a union containing function pointers,
+ * object pointers, and a structure that resembles a bound
+ * member function pointer.
+ */
+ union function_buffer
+ {
+ // For pointers to function objects
+ void* obj_ptr;
+
+ // For pointers to std::type_info objects
+ // (get_functor_type_tag, check_functor_type_tag).
+ const void* const_obj_ptr;
+
+ // For function pointers of all kinds
+ mutable void (*func_ptr)();
+
+ // For bound member pointers
+ struct bound_memfunc_ptr_t {
+ void (X::*memfunc_ptr)(int);
+ void* obj_ptr;
+ } bound_memfunc_ptr;
+
+ // To relax aliasing constraints
+ mutable char data;
+ };
+
+ /**
+ * The unusable class is a placeholder for unused function arguments
+ * It is also completely unusable except that it constructable from
+ * anything. This helps compilers without partial specialization to
+ * handle Boost.Function objects returning void.
+ */
+ struct unusable
+ {
+ unusable() {}
+ template<typename T> unusable(const T&) {}
+ };
+
+ /* Determine the return type. This supports compilers that do not support
+ * void returns or partial specialization by silently changing the return
+ * type to "unusable".
+ */
+ template<typename T> struct function_return_type { typedef T type; };
+
+ template<>
+ struct function_return_type<void>
+ {
+ typedef unusable type;
+ };
+
+ // The operation type to perform on the given functor/function pointer
+ enum functor_manager_operation_type {
+ clone_functor_tag,
+ destroy_functor_tag,
+ check_functor_type_tag,
+ get_functor_type_tag
+ };
+
+ // Tags used to decide between different types of functions
+ struct function_ptr_tag {};
+ struct function_obj_tag {};
+ struct member_ptr_tag {};
+ struct function_obj_ref_tag {};
+
+ template<typename F>
+ class get_function_tag
+ {
+ typedef typename mpl::if_c<(is_pointer<F>::value),
+ function_ptr_tag,
+ function_obj_tag>::type ptr_or_obj_tag;
+
+ typedef typename mpl::if_c<(is_member_pointer<F>::value),
+ member_ptr_tag,
+ ptr_or_obj_tag>::type ptr_or_obj_or_mem_tag;
+
+ typedef typename mpl::if_c<(is_reference_wrapper<F>::value),
+ function_obj_ref_tag,
+ ptr_or_obj_or_mem_tag>::type or_ref_tag;
+
+ public:
+ typedef or_ref_tag type;
+ };
+
+ // The trivial manager does nothing but return the same pointer (if we
+ // are cloning) or return the null pointer (if we are deleting).
+ template<typename F>
+ struct reference_manager
+ {
+ static inline void
+ get(const function_buffer& in_buffer, function_buffer& out_buffer,
+ functor_manager_operation_type op)
+ {
+ switch (op) {
+ case clone_functor_tag:
+ out_buffer.obj_ptr = in_buffer.obj_ptr;
+ return;
+
+ case destroy_functor_tag:
+ out_buffer.obj_ptr = 0;
+ return;
+
+ case check_functor_type_tag:
+ {
+ // DPG TBD: Since we're only storing a pointer, it's
+ // possible that the user could ask for a base class or
+ // derived class. Is that okay?
+ const std::type_info& check_type =
+ *static_cast<const std::type_info*>(out_buffer.const_obj_ptr);
+ if (BOOST_FUNCTION_COMPARE_TYPE_ID(check_type, typeid(F)))
+ out_buffer.obj_ptr = in_buffer.obj_ptr;
+ else
+ out_buffer.obj_ptr = 0;
+ }
+ return;
+
+ case get_functor_type_tag:
+ out_buffer.const_obj_ptr = &typeid(F);
+ return;
+ }
+ }
+ };
+
+ /**
+ * Determine if boost::function can use the small-object
+ * optimization with the function object type F.
+ */
+ template<typename F>
+ struct function_allows_small_object_optimization
+ {
+ BOOST_STATIC_CONSTANT
+ (bool,
+ value = ((sizeof(F) <= sizeof(function_buffer) &&
+ (alignment_of<function_buffer>::value
+ % alignment_of<F>::value == 0))));
+ };
+
+ /**
+ * The functor_manager class contains a static function "manage" which
+ * can clone or destroy the given function/function object pointer.
+ */
+ template<typename Functor, typename Allocator>
+ struct functor_manager
+ {
+ private:
+ typedef Functor functor_type;
+
+ // For function pointers, the manager is trivial
+ static inline void
+ manager(const function_buffer& in_buffer, function_buffer& out_buffer,
+ functor_manager_operation_type op, function_ptr_tag)
+ {
+ if (op == clone_functor_tag)
+ out_buffer.func_ptr = in_buffer.func_ptr;
+ else if (op == destroy_functor_tag)
+ out_buffer.func_ptr = 0;
+ else /* op == check_functor_type_tag */ {
+ const std::type_info& check_type =
+ *static_cast<const std::type_info*>(out_buffer.const_obj_ptr);
+ if (BOOST_FUNCTION_COMPARE_TYPE_ID(check_type, typeid(Functor)))
+ out_buffer.obj_ptr = &in_buffer.func_ptr;
+ else
+ out_buffer.obj_ptr = 0;
+ }
+ }
+
+ // Function objects that fit in the small-object buffer.
+ static inline void
+ manager(const function_buffer& in_buffer, function_buffer& out_buffer,
+ functor_manager_operation_type op, mpl::true_)
+ {
+ if (op == clone_functor_tag) {
+ const functor_type* in_functor =
+ reinterpret_cast<const functor_type*>(&in_buffer.data);
+ new ((void*)&out_buffer.data) functor_type(*in_functor);
+ } else if (op == destroy_functor_tag) {
+ // Some compilers (Borland, vc6, ...) are unhappy with ~functor_type.
+ reinterpret_cast<functor_type*>(&out_buffer.data)->~Functor();
+ } else /* op == check_functor_type_tag */ {
+ const std::type_info& check_type =
+ *static_cast<const std::type_info*>(out_buffer.const_obj_ptr);
+ if (BOOST_FUNCTION_COMPARE_TYPE_ID(check_type, typeid(Functor)))
+ out_buffer.obj_ptr = &in_buffer.data;
+ else
+ out_buffer.obj_ptr = 0;
+ }
+ }
+
+ // Function objects that require heap allocation
+ static inline void
+ manager(const function_buffer& in_buffer, function_buffer& out_buffer,
+ functor_manager_operation_type op, mpl::false_)
+ {
+#ifndef BOOST_NO_STD_ALLOCATOR
+ typedef typename Allocator::template rebind<functor_type>::other
+ allocator_type;
+ typedef typename allocator_type::pointer pointer_type;
+#else
+ typedef functor_type* pointer_type;
+#endif // BOOST_NO_STD_ALLOCATOR
+
+# ifndef BOOST_NO_STD_ALLOCATOR
+ allocator_type allocator;
+# endif // BOOST_NO_STD_ALLOCATOR
+
+ if (op == clone_functor_tag) {
+ // GCC 2.95.3 gets the CV qualifiers wrong here, so we
+ // can't do the static_cast that we should do.
+ const functor_type* f =
+ (const functor_type*)(in_buffer.obj_ptr);
+
+ // Clone the functor
+# ifndef BOOST_NO_STD_ALLOCATOR
+ pointer_type copy = allocator.allocate(1);
+ allocator.construct(copy, *f);
+
+ // Get back to the original pointer type
+ functor_type* new_f = static_cast<functor_type*>(copy);
+# else
+ functor_type* new_f = new functor_type(*f);
+# endif // BOOST_NO_STD_ALLOCATOR
+ out_buffer.obj_ptr = new_f;
+ } else if (op == destroy_functor_tag) {
+ /* Cast from the void pointer to the functor pointer type */
+ functor_type* f =
+ static_cast<functor_type*>(out_buffer.obj_ptr);
+
+# ifndef BOOST_NO_STD_ALLOCATOR
+ /* Cast from the functor pointer type to the allocator's pointer
+ type */
+ pointer_type victim = static_cast<pointer_type>(f);
+
+ // Destroy and deallocate the functor
+ allocator.destroy(victim);
+ allocator.deallocate(victim, 1);
+# else
+ delete f;
+# endif // BOOST_NO_STD_ALLOCATOR
+ out_buffer.obj_ptr = 0;
+ } else /* op == check_functor_type_tag */ {
+ const std::type_info& check_type =
+ *static_cast<const std::type_info*>(out_buffer.const_obj_ptr);
+ if (BOOST_FUNCTION_COMPARE_TYPE_ID(check_type, typeid(Functor)))
+ out_buffer.obj_ptr = in_buffer.obj_ptr;
+ else
+ out_buffer.obj_ptr = 0;
+ }
+ }
+
+ // For function objects, we determine whether the function
+ // object can use the small-object optimization buffer or
+ // whether we need to allocate it on the heap.
+ static inline void
+ manager(const function_buffer& in_buffer, function_buffer& out_buffer,
+ functor_manager_operation_type op, function_obj_tag)
+ {
+ manager(in_buffer, out_buffer, op,
+ mpl::bool_<(function_allows_small_object_optimization<functor_type>::value)>());
+ }
+
+ public:
+ /* Dispatch to an appropriate manager based on whether we have a
+ function pointer or a function object pointer. */
+ static inline void
+ manage(const function_buffer& in_buffer, function_buffer& out_buffer,
+ functor_manager_operation_type op)
+ {
+ typedef typename get_function_tag<functor_type>::type tag_type;
+ switch (op) {
+ case get_functor_type_tag:
+ out_buffer.const_obj_ptr = &typeid(functor_type);
+ return;
+
+ default:
+ manager(in_buffer, out_buffer, op, tag_type());
+ return;
+ }
+ }
+ };
+
+ // A type that is only used for comparisons against zero
+ struct useless_clear_type {};
+
+#ifdef BOOST_NO_SFINAE
+ // These routines perform comparisons between a Boost.Function
+ // object and an arbitrary function object (when the last
+ // parameter is mpl::bool_<false>) or against zero (when the
+ // last parameter is mpl::bool_<true>). They are only necessary
+ // for compilers that don't support SFINAE.
+ template<typename Function, typename Functor>
+ bool
+ compare_equal(const Function& f, const Functor&, int, mpl::bool_<true>)
+ { return f.empty(); }
+
+ template<typename Function, typename Functor>
+ bool
+ compare_not_equal(const Function& f, const Functor&, int,
+ mpl::bool_<true>)
+ { return !f.empty(); }
+
+ template<typename Function, typename Functor>
+ bool
+ compare_equal(const Function& f, const Functor& g, long,
+ mpl::bool_<false>)
+ {
+ if (const Functor* fp = f.template target<Functor>())
+ return function_equal(*fp, g);
+ else return false;
+ }
+
+ template<typename Function, typename Functor>
+ bool
+ compare_equal(const Function& f, const reference_wrapper<Functor>& g,
+ int, mpl::bool_<false>)
+ {
+ if (const Functor* fp = f.template target<Functor>())
+ return fp == g.get_pointer();
+ else return false;
+ }
+
+ template<typename Function, typename Functor>
+ bool
+ compare_not_equal(const Function& f, const Functor& g, long,
+ mpl::bool_<false>)
+ {
+ if (const Functor* fp = f.template target<Functor>())
+ return !function_equal(*fp, g);
+ else return true;
+ }
+
+ template<typename Function, typename Functor>
+ bool
+ compare_not_equal(const Function& f,
+ const reference_wrapper<Functor>& g, int,
+ mpl::bool_<false>)
+ {
+ if (const Functor* fp = f.template target<Functor>())
+ return fp != g.get_pointer();
+ else return true;
+ }
+#endif // BOOST_NO_SFINAE
+
+ /**
+ * Stores the "manager" portion of the vtable for a
+ * boost::function object.
+ */
+ struct vtable_base
+ {
+ vtable_base() : manager(0) { }
+ void (*manager)(const function_buffer& in_buffer,
+ function_buffer& out_buffer,
+ functor_manager_operation_type op);
+ };
+ } // end namespace function
+ } // end namespace detail
+
+/**
+ * The function_base class contains the basic elements needed for the
+ * function1, function2, function3, etc. classes. It is common to all
+ * functions (and as such can be used to tell if we have one of the
+ * functionN objects).
+ */
+class function_base
+{
+public:
+ function_base() : vtable(0) { }
+
+ /** Determine if the function is empty (i.e., has no target). */
+ bool empty() const { return !vtable; }
+
+ /** Retrieve the type of the stored function object, or typeid(void)
+ if this is empty. */
+ const std::type_info& target_type() const
+ {
+ if (!vtable) return typeid(void);
+
+ detail::function::function_buffer type;
+ vtable->manager(functor, type, detail::function::get_functor_type_tag);
+ return *static_cast<const std::type_info*>(type.const_obj_ptr);
+ }
+
+ template<typename Functor>
+ Functor* target()
+ {
+ if (!vtable) return 0;
+
+ detail::function::function_buffer type_result;
+ type_result.const_obj_ptr = &typeid(Functor);
+ vtable->manager(functor, type_result,
+ detail::function::check_functor_type_tag);
+ return static_cast<Functor*>(type_result.obj_ptr);
+ }
+
+ template<typename Functor>
+#if defined(BOOST_MSVC) && BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ const Functor* target( Functor * = 0 ) const
+#else
+ const Functor* target() const
+#endif
+ {
+ if (!vtable) return 0;
+
+ detail::function::function_buffer type_result;
+ type_result.const_obj_ptr = &typeid(Functor);
+ vtable->manager(functor, type_result,
+ detail::function::check_functor_type_tag);
+ // GCC 2.95.3 gets the CV qualifiers wrong here, so we
+ // can't do the static_cast that we should do.
+ return (const Functor*)(type_result.obj_ptr);
+ }
+
+ template<typename F>
+ bool contains(const F& f) const
+ {
+#if defined(BOOST_MSVC) && BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ if (const F* fp = this->target( (F*)0 ))
+#else
+ if (const F* fp = this->template target<F>())
+#endif
+ {
+ return function_equal(*fp, f);
+ } else {
+ return false;
+ }
+ }
+
+#if defined(__GNUC__) && __GNUC__ == 3 && __GNUC_MINOR__ <= 3
+ // GCC 3.3 and newer cannot copy with the global operator==, due to
+ // problems with instantiation of function return types before it
+ // has been verified that the argument types match up.
+ template<typename Functor>
+ BOOST_FUNCTION_ENABLE_IF_NOT_INTEGRAL(Functor, bool)
+ operator==(Functor g) const
+ {
+ if (const Functor* fp = target<Functor>())
+ return function_equal(*fp, g);
+ else return false;
+ }
+
+ template<typename Functor>
+ BOOST_FUNCTION_ENABLE_IF_NOT_INTEGRAL(Functor, bool)
+ operator!=(Functor g) const
+ {
+ if (const Functor* fp = target<Functor>())
+ return !function_equal(*fp, g);
+ else return true;
+ }
+#endif
+
+public: // should be protected, but GCC 2.95.3 will fail to allow access
+ detail::function::vtable_base* vtable;
+ mutable detail::function::function_buffer functor;
+};
+
+/**
+ * The bad_function_call exception class is thrown when a boost::function
+ * object is invoked
+ */
+class bad_function_call : public std::runtime_error
+{
+public:
+ bad_function_call() : std::runtime_error("call to empty boost::function") {}
+};
+
+#ifndef BOOST_NO_SFINAE
+inline bool operator==(const function_base& f,
+ detail::function::useless_clear_type*)
+{
+ return f.empty();
+}
+
+inline bool operator!=(const function_base& f,
+ detail::function::useless_clear_type*)
+{
+ return !f.empty();
+}
+
+inline bool operator==(detail::function::useless_clear_type*,
+ const function_base& f)
+{
+ return f.empty();
+}
+
+inline bool operator!=(detail::function::useless_clear_type*,
+ const function_base& f)
+{
+ return !f.empty();
+}
+#endif
+
+#ifdef BOOST_NO_SFINAE
+// Comparisons between boost::function objects and arbitrary function objects
+template<typename Functor>
+ inline bool operator==(const function_base& f, Functor g)
+ {
+ typedef mpl::bool_<(is_integral<Functor>::value)> integral;
+ return detail::function::compare_equal(f, g, 0, integral());
+ }
+
+template<typename Functor>
+ inline bool operator==(Functor g, const function_base& f)
+ {
+ typedef mpl::bool_<(is_integral<Functor>::value)> integral;
+ return detail::function::compare_equal(f, g, 0, integral());
+ }
+
+template<typename Functor>
+ inline bool operator!=(const function_base& f, Functor g)
+ {
+ typedef mpl::bool_<(is_integral<Functor>::value)> integral;
+ return detail::function::compare_not_equal(f, g, 0, integral());
+ }
+
+template<typename Functor>
+ inline bool operator!=(Functor g, const function_base& f)
+ {
+ typedef mpl::bool_<(is_integral<Functor>::value)> integral;
+ return detail::function::compare_not_equal(f, g, 0, integral());
+ }
+#else
+
+# if !(defined(__GNUC__) && __GNUC__ == 3 && __GNUC_MINOR__ <= 3)
+// Comparisons between boost::function objects and arbitrary function
+// objects. GCC 3.3 and before has an obnoxious bug that prevents this
+// from working.
+template<typename Functor>
+ BOOST_FUNCTION_ENABLE_IF_NOT_INTEGRAL(Functor, bool)
+ operator==(const function_base& f, Functor g)
+ {
+ if (const Functor* fp = f.template target<Functor>())
+ return function_equal(*fp, g);
+ else return false;
+ }
+
+template<typename Functor>
+ BOOST_FUNCTION_ENABLE_IF_NOT_INTEGRAL(Functor, bool)
+ operator==(Functor g, const function_base& f)
+ {
+ if (const Functor* fp = f.template target<Functor>())
+ return function_equal(g, *fp);
+ else return false;
+ }
+
+template<typename Functor>
+ BOOST_FUNCTION_ENABLE_IF_NOT_INTEGRAL(Functor, bool)
+ operator!=(const function_base& f, Functor g)
+ {
+ if (const Functor* fp = f.template target<Functor>())
+ return !function_equal(*fp, g);
+ else return true;
+ }
+
+template<typename Functor>
+ BOOST_FUNCTION_ENABLE_IF_NOT_INTEGRAL(Functor, bool)
+ operator!=(Functor g, const function_base& f)
+ {
+ if (const Functor* fp = f.template target<Functor>())
+ return !function_equal(g, *fp);
+ else return true;
+ }
+# endif
+
+template<typename Functor>
+ BOOST_FUNCTION_ENABLE_IF_NOT_INTEGRAL(Functor, bool)
+ operator==(const function_base& f, reference_wrapper<Functor> g)
+ {
+ if (const Functor* fp = f.template target<Functor>())
+ return fp == g.get_pointer();
+ else return false;
+ }
+
+template<typename Functor>
+ BOOST_FUNCTION_ENABLE_IF_NOT_INTEGRAL(Functor, bool)
+ operator==(reference_wrapper<Functor> g, const function_base& f)
+ {
+ if (const Functor* fp = f.template target<Functor>())
+ return g.get_pointer() == fp;
+ else return false;
+ }
+
+template<typename Functor>
+ BOOST_FUNCTION_ENABLE_IF_NOT_INTEGRAL(Functor, bool)
+ operator!=(const function_base& f, reference_wrapper<Functor> g)
+ {
+ if (const Functor* fp = f.template target<Functor>())
+ return fp != g.get_pointer();
+ else return true;
+ }
+
+template<typename Functor>
+ BOOST_FUNCTION_ENABLE_IF_NOT_INTEGRAL(Functor, bool)
+ operator!=(reference_wrapper<Functor> g, const function_base& f)
+ {
+ if (const Functor* fp = f.template target<Functor>())
+ return g.get_pointer() != fp;
+ else return true;
+ }
+
+#endif // Compiler supporting SFINAE
+
+namespace detail {
+ namespace function {
+ inline bool has_empty_target(const function_base* f)
+ {
+ return f->empty();
+ }
+
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1310)
+ inline bool has_empty_target(const void*)
+ {
+ return false;
+ }
+#else
+ inline bool has_empty_target(...)
+ {
+ return false;
+ }
+#endif
+ } // end namespace function
+} // end namespace detail
+} // end namespace boost
+
+#undef BOOST_FUNCTION_ENABLE_IF_NOT_INTEGRAL
+#undef BOOST_FUNCTION_COMPARE_TYPE_ID
+
+#endif // BOOST_FUNCTION_BASE_HEADER
diff --git a/boost/boost/function/function_template.hpp b/boost/boost/function/function_template.hpp
new file mode 100644
index 00000000000..b6f786cd82f
--- /dev/null
+++ b/boost/boost/function/function_template.hpp
@@ -0,0 +1,837 @@
+// Boost.Function library
+
+// Copyright Douglas Gregor 2001-2006. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+// Note: this header is a header template and must NOT have multiple-inclusion
+// protection.
+#include <boost/function/detail/prologue.hpp>
+
+#define BOOST_FUNCTION_TEMPLATE_PARMS BOOST_PP_ENUM_PARAMS(BOOST_FUNCTION_NUM_ARGS, typename T)
+
+#define BOOST_FUNCTION_TEMPLATE_ARGS BOOST_PP_ENUM_PARAMS(BOOST_FUNCTION_NUM_ARGS, T)
+
+#define BOOST_FUNCTION_PARM(J,I,D) BOOST_PP_CAT(T,I) BOOST_PP_CAT(a,I)
+
+#define BOOST_FUNCTION_PARMS BOOST_PP_ENUM(BOOST_FUNCTION_NUM_ARGS,BOOST_FUNCTION_PARM,BOOST_PP_EMPTY)
+
+#define BOOST_FUNCTION_ARGS BOOST_PP_ENUM_PARAMS(BOOST_FUNCTION_NUM_ARGS, a)
+
+#define BOOST_FUNCTION_ARG_TYPE(J,I,D) \
+ typedef BOOST_PP_CAT(T,I) BOOST_PP_CAT(BOOST_PP_CAT(arg, BOOST_PP_INC(I)),_type);
+
+#define BOOST_FUNCTION_ARG_TYPES BOOST_PP_REPEAT(BOOST_FUNCTION_NUM_ARGS,BOOST_FUNCTION_ARG_TYPE,BOOST_PP_EMPTY)
+
+// Type of the default allocator
+#ifndef BOOST_NO_STD_ALLOCATOR
+# define BOOST_FUNCTION_DEFAULT_ALLOCATOR std::allocator<function_base>
+#else
+# define BOOST_FUNCTION_DEFAULT_ALLOCATOR int
+#endif // BOOST_NO_STD_ALLOCATOR
+
+// Comma if nonzero number of arguments
+#if BOOST_FUNCTION_NUM_ARGS == 0
+# define BOOST_FUNCTION_COMMA
+#else
+# define BOOST_FUNCTION_COMMA ,
+#endif // BOOST_FUNCTION_NUM_ARGS > 0
+
+// Class names used in this version of the code
+#define BOOST_FUNCTION_FUNCTION BOOST_JOIN(function,BOOST_FUNCTION_NUM_ARGS)
+#define BOOST_FUNCTION_FUNCTION_INVOKER \
+ BOOST_JOIN(function_invoker,BOOST_FUNCTION_NUM_ARGS)
+#define BOOST_FUNCTION_VOID_FUNCTION_INVOKER \
+ BOOST_JOIN(void_function_invoker,BOOST_FUNCTION_NUM_ARGS)
+#define BOOST_FUNCTION_FUNCTION_OBJ_INVOKER \
+ BOOST_JOIN(function_obj_invoker,BOOST_FUNCTION_NUM_ARGS)
+#define BOOST_FUNCTION_VOID_FUNCTION_OBJ_INVOKER \
+ BOOST_JOIN(void_function_obj_invoker,BOOST_FUNCTION_NUM_ARGS)
+#define BOOST_FUNCTION_FUNCTION_REF_INVOKER \
+ BOOST_JOIN(function_ref_invoker,BOOST_FUNCTION_NUM_ARGS)
+#define BOOST_FUNCTION_VOID_FUNCTION_REF_INVOKER \
+ BOOST_JOIN(void_function_ref_invoker,BOOST_FUNCTION_NUM_ARGS)
+#define BOOST_FUNCTION_GET_FUNCTION_INVOKER \
+ BOOST_JOIN(get_function_invoker,BOOST_FUNCTION_NUM_ARGS)
+#define BOOST_FUNCTION_GET_FUNCTION_OBJ_INVOKER \
+ BOOST_JOIN(get_function_obj_invoker,BOOST_FUNCTION_NUM_ARGS)
+#define BOOST_FUNCTION_GET_FUNCTION_REF_INVOKER \
+ BOOST_JOIN(get_function_ref_invoker,BOOST_FUNCTION_NUM_ARGS)
+#define BOOST_FUNCTION_VTABLE BOOST_JOIN(basic_vtable,BOOST_FUNCTION_NUM_ARGS)
+
+#ifndef BOOST_NO_VOID_RETURNS
+# define BOOST_FUNCTION_VOID_RETURN_TYPE void
+# define BOOST_FUNCTION_RETURN(X) X
+#else
+# define BOOST_FUNCTION_VOID_RETURN_TYPE boost::detail::function::unusable
+# define BOOST_FUNCTION_RETURN(X) X; return BOOST_FUNCTION_VOID_RETURN_TYPE ()
+#endif
+
+#ifdef BOOST_MSVC
+# pragma warning(push)
+# pragma warning(disable: 4127) // conditional expression is constant.
+#endif
+
+#ifdef BOOST_MSVC
+# pragma warning(push)
+# pragma warning(disable: 4127) // conditional expression is constant.
+#endif
+
+namespace boost {
+ namespace detail {
+ namespace function {
+ template<
+ typename FunctionPtr,
+ typename R BOOST_FUNCTION_COMMA
+ BOOST_FUNCTION_TEMPLATE_PARMS
+ >
+ struct BOOST_FUNCTION_FUNCTION_INVOKER
+ {
+ static R invoke(function_buffer& function_ptr BOOST_FUNCTION_COMMA
+ BOOST_FUNCTION_PARMS)
+ {
+ FunctionPtr f = reinterpret_cast<FunctionPtr>(function_ptr.func_ptr);
+ return f(BOOST_FUNCTION_ARGS);
+ }
+ };
+
+ template<
+ typename FunctionPtr,
+ typename R BOOST_FUNCTION_COMMA
+ BOOST_FUNCTION_TEMPLATE_PARMS
+ >
+ struct BOOST_FUNCTION_VOID_FUNCTION_INVOKER
+ {
+ static BOOST_FUNCTION_VOID_RETURN_TYPE
+ invoke(function_buffer& function_ptr BOOST_FUNCTION_COMMA
+ BOOST_FUNCTION_PARMS)
+
+ {
+ FunctionPtr f = reinterpret_cast<FunctionPtr>(function_ptr.func_ptr);
+ BOOST_FUNCTION_RETURN(f(BOOST_FUNCTION_ARGS));
+ }
+ };
+
+ template<
+ typename FunctionObj,
+ typename R BOOST_FUNCTION_COMMA
+ BOOST_FUNCTION_TEMPLATE_PARMS
+ >
+ struct BOOST_FUNCTION_FUNCTION_OBJ_INVOKER
+ {
+ static R invoke(function_buffer& function_obj_ptr BOOST_FUNCTION_COMMA
+ BOOST_FUNCTION_PARMS)
+
+ {
+ FunctionObj* f;
+ if (function_allows_small_object_optimization<FunctionObj>::value)
+ f = reinterpret_cast<FunctionObj*>(&function_obj_ptr.data);
+ else
+ f = reinterpret_cast<FunctionObj*>(function_obj_ptr.obj_ptr);
+ return (*f)(BOOST_FUNCTION_ARGS);
+ }
+ };
+
+ template<
+ typename FunctionObj,
+ typename R BOOST_FUNCTION_COMMA
+ BOOST_FUNCTION_TEMPLATE_PARMS
+ >
+ struct BOOST_FUNCTION_VOID_FUNCTION_OBJ_INVOKER
+ {
+ static BOOST_FUNCTION_VOID_RETURN_TYPE
+ invoke(function_buffer& function_obj_ptr BOOST_FUNCTION_COMMA
+ BOOST_FUNCTION_PARMS)
+
+ {
+ FunctionObj* f;
+ if (function_allows_small_object_optimization<FunctionObj>::value)
+ f = reinterpret_cast<FunctionObj*>(&function_obj_ptr.data);
+ else
+ f = reinterpret_cast<FunctionObj*>(function_obj_ptr.obj_ptr);
+ BOOST_FUNCTION_RETURN((*f)(BOOST_FUNCTION_ARGS));
+ }
+ };
+
+ template<
+ typename FunctionObj,
+ typename R BOOST_FUNCTION_COMMA
+ BOOST_FUNCTION_TEMPLATE_PARMS
+ >
+ struct BOOST_FUNCTION_FUNCTION_REF_INVOKER
+ {
+ static R invoke(function_buffer& function_obj_ptr BOOST_FUNCTION_COMMA
+ BOOST_FUNCTION_PARMS)
+
+ {
+ FunctionObj* f =
+ reinterpret_cast<FunctionObj*>(function_obj_ptr.obj_ptr);
+ return (*f)(BOOST_FUNCTION_ARGS);
+ }
+ };
+
+ template<
+ typename FunctionObj,
+ typename R BOOST_FUNCTION_COMMA
+ BOOST_FUNCTION_TEMPLATE_PARMS
+ >
+ struct BOOST_FUNCTION_VOID_FUNCTION_REF_INVOKER
+ {
+ static BOOST_FUNCTION_VOID_RETURN_TYPE
+ invoke(function_buffer& function_obj_ptr BOOST_FUNCTION_COMMA
+ BOOST_FUNCTION_PARMS)
+
+ {
+ FunctionObj* f =
+ reinterpret_cast<FunctionObj*>(function_obj_ptr.obj_ptr);
+ BOOST_FUNCTION_RETURN((*f)(BOOST_FUNCTION_ARGS));
+ }
+ };
+
+ template<
+ typename FunctionPtr,
+ typename R BOOST_FUNCTION_COMMA
+ BOOST_FUNCTION_TEMPLATE_PARMS
+ >
+ struct BOOST_FUNCTION_GET_FUNCTION_INVOKER
+ {
+ typedef typename mpl::if_c<(is_void<R>::value),
+ BOOST_FUNCTION_VOID_FUNCTION_INVOKER<
+ FunctionPtr,
+ R BOOST_FUNCTION_COMMA
+ BOOST_FUNCTION_TEMPLATE_ARGS
+ >,
+ BOOST_FUNCTION_FUNCTION_INVOKER<
+ FunctionPtr,
+ R BOOST_FUNCTION_COMMA
+ BOOST_FUNCTION_TEMPLATE_ARGS
+ >
+ >::type type;
+ };
+
+ template<
+ typename FunctionObj,
+ typename R BOOST_FUNCTION_COMMA
+ BOOST_FUNCTION_TEMPLATE_PARMS
+ >
+ struct BOOST_FUNCTION_GET_FUNCTION_OBJ_INVOKER
+ {
+ typedef typename mpl::if_c<(is_void<R>::value),
+ BOOST_FUNCTION_VOID_FUNCTION_OBJ_INVOKER<
+ FunctionObj,
+ R BOOST_FUNCTION_COMMA
+ BOOST_FUNCTION_TEMPLATE_ARGS
+ >,
+ BOOST_FUNCTION_FUNCTION_OBJ_INVOKER<
+ FunctionObj,
+ R BOOST_FUNCTION_COMMA
+ BOOST_FUNCTION_TEMPLATE_ARGS
+ >
+ >::type type;
+ };
+
+ template<
+ typename FunctionObj,
+ typename R BOOST_FUNCTION_COMMA
+ BOOST_FUNCTION_TEMPLATE_PARMS
+ >
+ struct BOOST_FUNCTION_GET_FUNCTION_REF_INVOKER
+ {
+ typedef typename mpl::if_c<(is_void<R>::value),
+ BOOST_FUNCTION_VOID_FUNCTION_REF_INVOKER<
+ FunctionObj,
+ R BOOST_FUNCTION_COMMA
+ BOOST_FUNCTION_TEMPLATE_ARGS
+ >,
+ BOOST_FUNCTION_FUNCTION_REF_INVOKER<
+ FunctionObj,
+ R BOOST_FUNCTION_COMMA
+ BOOST_FUNCTION_TEMPLATE_ARGS
+ >
+ >::type type;
+ };
+
+ /**
+ * vtable for a specific boost::function instance.
+ */
+ template<typename R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_PARMS,
+ typename Allocator>
+ struct BOOST_FUNCTION_VTABLE : vtable_base
+ {
+#ifndef BOOST_NO_VOID_RETURNS
+ typedef R result_type;
+#else
+ typedef typename function_return_type<R>::type result_type;
+#endif // BOOST_NO_VOID_RETURNS
+
+ typedef result_type (*invoker_type)(function_buffer&
+ BOOST_FUNCTION_COMMA
+ BOOST_FUNCTION_TEMPLATE_ARGS);
+
+ template<typename F>
+ BOOST_FUNCTION_VTABLE(F f) : vtable_base(), invoker(0)
+ {
+ init(f);
+ }
+
+ template<typename F>
+ bool assign_to(F f, function_buffer& functor)
+ {
+ typedef typename get_function_tag<F>::type tag;
+ return assign_to(f, functor, tag());
+ }
+
+ void clear(function_buffer& functor)
+ {
+ if (manager)
+ manager(functor, functor, destroy_functor_tag);
+ }
+
+ private:
+ template<typename F>
+ void init(F f)
+ {
+ typedef typename get_function_tag<F>::type tag;
+ init(f, tag());
+ }
+
+ // Function pointers
+ template<typename FunctionPtr>
+ void init(FunctionPtr /*f*/, function_ptr_tag)
+ {
+ typedef typename BOOST_FUNCTION_GET_FUNCTION_INVOKER<
+ FunctionPtr,
+ R BOOST_FUNCTION_COMMA
+ BOOST_FUNCTION_TEMPLATE_ARGS
+ >::type
+ actual_invoker_type;
+
+ invoker = &actual_invoker_type::invoke;
+ manager = &functor_manager<FunctionPtr, Allocator>::manage;
+ }
+
+ template<typename FunctionPtr>
+ bool
+ assign_to(FunctionPtr f, function_buffer& functor, function_ptr_tag)
+ {
+ this->clear(functor);
+ if (f) {
+ // should be a reinterpret cast, but some compilers insist
+ // on giving cv-qualifiers to free functions
+ functor.func_ptr = (void (*)())(f);
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ // Member pointers
+#if BOOST_FUNCTION_NUM_ARGS > 0
+ template<typename MemberPtr>
+ void init(MemberPtr f, member_ptr_tag)
+ {
+ // DPG TBD: Add explicit support for member function
+ // objects, so we invoke through mem_fn() but we retain the
+ // right target_type() values.
+ this->init(mem_fn(f));
+ }
+
+ template<typename MemberPtr>
+ bool assign_to(MemberPtr f, function_buffer& functor, member_ptr_tag)
+ {
+ // DPG TBD: Add explicit support for member function
+ // objects, so we invoke through mem_fn() but we retain the
+ // right target_type() values.
+ if (f) {
+ this->assign_to(mem_fn(f), functor);
+ return true;
+ } else {
+ return false;
+ }
+ }
+#endif // BOOST_FUNCTION_NUM_ARGS > 0
+
+ // Function objects
+ template<typename FunctionObj>
+ void init(FunctionObj /*f*/, function_obj_tag)
+ {
+ typedef typename BOOST_FUNCTION_GET_FUNCTION_OBJ_INVOKER<
+ FunctionObj,
+ R BOOST_FUNCTION_COMMA
+ BOOST_FUNCTION_TEMPLATE_ARGS
+ >::type
+ actual_invoker_type;
+
+ invoker = &actual_invoker_type::invoke;
+ manager = &functor_manager<FunctionObj, Allocator>::manage;
+ }
+
+ // Assign to a function object using the small object optimization
+ template<typename FunctionObj>
+ void
+ assign_functor(FunctionObj f, function_buffer& functor, mpl::true_)
+ {
+ new ((void*)&functor.data) FunctionObj(f);
+ }
+
+ // Assign to a function object allocated on the heap.
+ template<typename FunctionObj>
+ void
+ assign_functor(FunctionObj f, function_buffer& functor, mpl::false_)
+ {
+#ifndef BOOST_NO_STD_ALLOCATOR
+ typedef typename Allocator::template rebind<FunctionObj>::other
+ allocator_type;
+ typedef typename allocator_type::pointer pointer_type;
+
+ allocator_type allocator;
+ pointer_type copy = allocator.allocate(1);
+ allocator.construct(copy, f);
+
+ // Get back to the original pointer type
+ functor.obj_ptr = static_cast<FunctionObj*>(copy);
+# else
+ functor.obj_ptr = new FunctionObj(f);
+# endif // BOOST_NO_STD_ALLOCATOR
+ }
+
+ template<typename FunctionObj>
+ bool
+ assign_to(FunctionObj f, function_buffer& functor, function_obj_tag)
+ {
+ if (!boost::detail::function::has_empty_target(boost::addressof(f))) {
+ assign_functor(f, functor,
+ mpl::bool_<(function_allows_small_object_optimization<FunctionObj>::value)>());
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ // Reference to a function object
+ template<typename FunctionObj>
+ void
+ init(const reference_wrapper<FunctionObj>& /*f*/, function_obj_ref_tag)
+ {
+ typedef typename BOOST_FUNCTION_GET_FUNCTION_REF_INVOKER<
+ FunctionObj,
+ R BOOST_FUNCTION_COMMA
+ BOOST_FUNCTION_TEMPLATE_ARGS
+ >::type
+ actual_invoker_type;
+
+ invoker = &actual_invoker_type::invoke;
+ manager = &reference_manager<FunctionObj>::get;
+ }
+
+ template<typename FunctionObj>
+ bool
+ assign_to(const reference_wrapper<FunctionObj>& f,
+ function_buffer& functor, function_obj_ref_tag)
+ {
+ if (!boost::detail::function::has_empty_target(f.get_pointer())) {
+ // DPG TBD: We might need to detect constness of
+ // FunctionObj to assign into obj_ptr or const_obj_ptr to
+ // be truly legit, but no platform in existence makes
+ // const void* different from void*.
+ functor.const_obj_ptr = f.get_pointer();
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ public:
+ invoker_type invoker;
+ };
+ } // end namespace function
+ } // end namespace detail
+
+ template<
+ typename R BOOST_FUNCTION_COMMA
+ BOOST_FUNCTION_TEMPLATE_PARMS,
+ typename Allocator = BOOST_FUNCTION_DEFAULT_ALLOCATOR
+ >
+ class BOOST_FUNCTION_FUNCTION : public function_base
+ {
+ public:
+#ifndef BOOST_NO_VOID_RETURNS
+ typedef R result_type;
+#else
+ typedef typename boost::detail::function::function_return_type<R>::type
+ result_type;
+#endif // BOOST_NO_VOID_RETURNS
+
+ private:
+ typedef boost::detail::function::BOOST_FUNCTION_VTABLE<
+ R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_ARGS, Allocator>
+ vtable_type;
+
+ struct clear_type {};
+
+ public:
+ BOOST_STATIC_CONSTANT(int, args = BOOST_FUNCTION_NUM_ARGS);
+
+ // add signature for boost::lambda
+ template<typename Args>
+ struct sig
+ {
+ typedef result_type type;
+ };
+
+#if BOOST_FUNCTION_NUM_ARGS == 1
+ typedef T0 argument_type;
+#elif BOOST_FUNCTION_NUM_ARGS == 2
+ typedef T0 first_argument_type;
+ typedef T1 second_argument_type;
+#endif
+
+ BOOST_STATIC_CONSTANT(int, arity = BOOST_FUNCTION_NUM_ARGS);
+ BOOST_FUNCTION_ARG_TYPES
+
+ typedef Allocator allocator_type;
+ typedef BOOST_FUNCTION_FUNCTION self_type;
+
+ BOOST_FUNCTION_FUNCTION() : function_base() { }
+
+ // MSVC chokes if the following two constructors are collapsed into
+ // one with a default parameter.
+ template<typename Functor>
+ BOOST_FUNCTION_FUNCTION(Functor BOOST_FUNCTION_TARGET_FIX(const &) f
+#ifndef BOOST_NO_SFINAE
+ ,typename enable_if_c<
+ (boost::type_traits::ice_not<
+ (is_integral<Functor>::value)>::value),
+ int>::type = 0
+#endif // BOOST_NO_SFINAE
+ ) :
+ function_base()
+ {
+ this->assign_to(f);
+ }
+
+#ifndef BOOST_NO_SFINAE
+ BOOST_FUNCTION_FUNCTION(clear_type*) : function_base() { }
+#else
+ BOOST_FUNCTION_FUNCTION(int zero) : function_base()
+ {
+ BOOST_ASSERT(zero == 0);
+ }
+#endif
+
+ BOOST_FUNCTION_FUNCTION(const BOOST_FUNCTION_FUNCTION& f) : function_base()
+ {
+ this->assign_to_own(f);
+ }
+
+ ~BOOST_FUNCTION_FUNCTION() { clear(); }
+
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ // MSVC 6.0 and prior require all definitions to be inline, but
+ // these definitions can become very costly.
+ result_type operator()(BOOST_FUNCTION_PARMS) const
+ {
+ if (this->empty())
+ boost::throw_exception(bad_function_call());
+
+ return static_cast<vtable_type*>(vtable)->invoker
+ (this->functor BOOST_FUNCTION_COMMA BOOST_FUNCTION_ARGS);
+ }
+#else
+ result_type operator()(BOOST_FUNCTION_PARMS) const;
+#endif
+
+ // The distinction between when to use BOOST_FUNCTION_FUNCTION and
+ // when to use self_type is obnoxious. MSVC cannot handle self_type as
+ // the return type of these assignment operators, but Borland C++ cannot
+ // handle BOOST_FUNCTION_FUNCTION as the type of the temporary to
+ // construct.
+ template<typename Functor>
+#ifndef BOOST_NO_SFINAE
+ typename enable_if_c<
+ (boost::type_traits::ice_not<
+ (is_integral<Functor>::value)>::value),
+ BOOST_FUNCTION_FUNCTION&>::type
+#else
+ BOOST_FUNCTION_FUNCTION&
+#endif
+ operator=(Functor BOOST_FUNCTION_TARGET_FIX(const &) f)
+ {
+ this->clear();
+ try {
+ this->assign_to(f);
+ } catch (...) {
+ vtable = 0;
+ throw;
+ }
+ return *this;
+ }
+
+#ifndef BOOST_NO_SFINAE
+ BOOST_FUNCTION_FUNCTION& operator=(clear_type*)
+ {
+ this->clear();
+ return *this;
+ }
+#else
+ BOOST_FUNCTION_FUNCTION& operator=(int zero)
+ {
+ BOOST_ASSERT(zero == 0);
+ this->clear();
+ return *this;
+ }
+#endif
+
+ // Assignment from another BOOST_FUNCTION_FUNCTION
+ BOOST_FUNCTION_FUNCTION& operator=(const BOOST_FUNCTION_FUNCTION& f)
+ {
+ if (&f == this)
+ return *this;
+
+ this->clear();
+ try {
+ this->assign_to_own(f);
+ } catch (...) {
+ vtable = 0;
+ throw;
+ }
+ return *this;
+ }
+
+ void swap(BOOST_FUNCTION_FUNCTION& other)
+ {
+ if (&other == this)
+ return;
+
+ BOOST_FUNCTION_FUNCTION tmp = *this;
+ *this = other;
+ other = tmp;
+ }
+
+ // Clear out a target, if there is one
+ void clear()
+ {
+ if (vtable) {
+ static_cast<vtable_type*>(vtable)->clear(this->functor);
+ vtable = 0;
+ }
+ }
+
+#if (defined __SUNPRO_CC) && (__SUNPRO_CC <= 0x530) && !(defined BOOST_NO_COMPILER_CONFIG)
+ // Sun C++ 5.3 can't handle the safe_bool idiom, so don't use it
+ operator bool () const { return !this->empty(); }
+#else
+ private:
+ struct dummy {
+ void nonnull() {};
+ };
+
+ typedef void (dummy::*safe_bool)();
+
+ public:
+ operator safe_bool () const
+ { return (this->empty())? 0 : &dummy::nonnull; }
+
+ bool operator!() const
+ { return this->empty(); }
+#endif
+
+ private:
+ void assign_to_own(const BOOST_FUNCTION_FUNCTION& f)
+ {
+ if (!f.empty()) {
+ this->vtable = f.vtable;
+ f.vtable->manager(f.functor, this->functor,
+ boost::detail::function::clone_functor_tag);
+ }
+ }
+
+ template<typename Functor>
+ void assign_to(Functor f)
+ {
+ static vtable_type stored_vtable(f);
+ if (stored_vtable.assign_to(f, functor)) vtable = &stored_vtable;
+ else vtable = 0;
+ }
+ };
+
+ template<typename R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_PARMS ,
+ typename Allocator>
+ inline void swap(BOOST_FUNCTION_FUNCTION<
+ R BOOST_FUNCTION_COMMA
+ BOOST_FUNCTION_TEMPLATE_ARGS ,
+ Allocator
+ >& f1,
+ BOOST_FUNCTION_FUNCTION<
+ R BOOST_FUNCTION_COMMA
+ BOOST_FUNCTION_TEMPLATE_ARGS,
+ Allocator
+ >& f2)
+ {
+ f1.swap(f2);
+ }
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ template<typename R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_PARMS,
+ typename Allocator>
+ typename BOOST_FUNCTION_FUNCTION<
+ R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_ARGS,
+ Allocator>::result_type
+ BOOST_FUNCTION_FUNCTION<R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_ARGS,
+
+ Allocator>
+ ::operator()(BOOST_FUNCTION_PARMS) const
+ {
+ if (this->empty())
+ boost::throw_exception(bad_function_call());
+
+ return static_cast<vtable_type*>(vtable)->invoker
+ (this->functor BOOST_FUNCTION_COMMA BOOST_FUNCTION_ARGS);
+ }
+#endif
+
+// Poison comparisons between boost::function objects of the same type.
+template<typename R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_PARMS ,
+ typename Allocator>
+ void operator==(const BOOST_FUNCTION_FUNCTION<
+ R BOOST_FUNCTION_COMMA
+ BOOST_FUNCTION_TEMPLATE_ARGS ,
+ Allocator>&,
+ const BOOST_FUNCTION_FUNCTION<
+ R BOOST_FUNCTION_COMMA
+ BOOST_FUNCTION_TEMPLATE_ARGS ,
+ Allocator>&);
+template<typename R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_PARMS ,
+ typename Allocator>
+ void operator!=(const BOOST_FUNCTION_FUNCTION<
+ R BOOST_FUNCTION_COMMA
+ BOOST_FUNCTION_TEMPLATE_ARGS ,
+ Allocator>&,
+ const BOOST_FUNCTION_FUNCTION<
+ R BOOST_FUNCTION_COMMA
+ BOOST_FUNCTION_TEMPLATE_ARGS ,
+ Allocator>&);
+
+#if !defined(BOOST_FUNCTION_NO_FUNCTION_TYPE_SYNTAX)
+
+#if BOOST_FUNCTION_NUM_ARGS == 0
+#define BOOST_FUNCTION_PARTIAL_SPEC R (void)
+#else
+#define BOOST_FUNCTION_PARTIAL_SPEC R (BOOST_PP_ENUM_PARAMS(BOOST_FUNCTION_NUM_ARGS,T))
+#endif
+
+template<typename R BOOST_FUNCTION_COMMA
+ BOOST_FUNCTION_TEMPLATE_PARMS,
+ typename Allocator>
+class function<BOOST_FUNCTION_PARTIAL_SPEC, Allocator>
+ : public BOOST_FUNCTION_FUNCTION<R, BOOST_FUNCTION_TEMPLATE_ARGS
+ BOOST_FUNCTION_COMMA Allocator>
+{
+ typedef BOOST_FUNCTION_FUNCTION<R, BOOST_FUNCTION_TEMPLATE_ARGS
+ BOOST_FUNCTION_COMMA Allocator> base_type;
+ typedef function self_type;
+
+ struct clear_type {};
+
+public:
+ typedef typename base_type::allocator_type allocator_type;
+
+ function() : base_type() {}
+
+ template<typename Functor>
+ function(Functor f
+#ifndef BOOST_NO_SFINAE
+ ,typename enable_if_c<
+ (boost::type_traits::ice_not<
+ (is_integral<Functor>::value)>::value),
+ int>::type = 0
+#endif
+ ) :
+ base_type(f)
+ {
+ }
+
+#ifndef BOOST_NO_SFINAE
+ function(clear_type*) : base_type() {}
+#endif
+
+ function(const self_type& f) : base_type(static_cast<const base_type&>(f)){}
+
+ function(const base_type& f) : base_type(static_cast<const base_type&>(f)){}
+
+ self_type& operator=(const self_type& f)
+ {
+ self_type(f).swap(*this);
+ return *this;
+ }
+
+ template<typename Functor>
+#ifndef BOOST_NO_SFINAE
+ typename enable_if_c<
+ (boost::type_traits::ice_not<
+ (is_integral<Functor>::value)>::value),
+ self_type&>::type
+#else
+ self_type&
+#endif
+ operator=(Functor f)
+ {
+ self_type(f).swap(*this);
+ return *this;
+ }
+
+#ifndef BOOST_NO_SFINAE
+ self_type& operator=(clear_type*)
+ {
+ this->clear();
+ return *this;
+ }
+#endif
+
+ self_type& operator=(const base_type& f)
+ {
+ self_type(f).swap(*this);
+ return *this;
+ }
+};
+
+#ifdef BOOST_MSVC
+# pragma warning(pop)
+#endif
+
+#undef BOOST_FUNCTION_PARTIAL_SPEC
+#endif // have partial specialization
+
+} // end namespace boost
+
+#ifdef BOOST_MSVC
+# pragma warning(pop)
+#endif
+
+// Cleanup after ourselves...
+#undef BOOST_FUNCTION_VTABLE
+#undef BOOST_FUNCTION_DEFAULT_ALLOCATOR
+#undef BOOST_FUNCTION_COMMA
+#undef BOOST_FUNCTION_FUNCTION
+#undef BOOST_FUNCTION_FUNCTION_INVOKER
+#undef BOOST_FUNCTION_VOID_FUNCTION_INVOKER
+#undef BOOST_FUNCTION_FUNCTION_OBJ_INVOKER
+#undef BOOST_FUNCTION_VOID_FUNCTION_OBJ_INVOKER
+#undef BOOST_FUNCTION_FUNCTION_REF_INVOKER
+#undef BOOST_FUNCTION_VOID_FUNCTION_REF_INVOKER
+#undef BOOST_FUNCTION_GET_FUNCTION_INVOKER
+#undef BOOST_FUNCTION_GET_FUNCTION_OBJ_INVOKER
+#undef BOOST_FUNCTION_GET_FUNCTION_REF_INVOKER
+#undef BOOST_FUNCTION_GET_MEM_FUNCTION_INVOKER
+#undef BOOST_FUNCTION_TEMPLATE_PARMS
+#undef BOOST_FUNCTION_TEMPLATE_ARGS
+#undef BOOST_FUNCTION_PARMS
+#undef BOOST_FUNCTION_PARM
+#undef BOOST_FUNCTION_ARGS
+#undef BOOST_FUNCTION_ARG_TYPE
+#undef BOOST_FUNCTION_ARG_TYPES
+#undef BOOST_FUNCTION_VOID_RETURN_TYPE
+#undef BOOST_FUNCTION_RETURN
diff --git a/boost/boost/function/gen_function_N.pl b/boost/boost/function/gen_function_N.pl
new file mode 100644
index 00000000000..d8f1249b07a
--- /dev/null
+++ b/boost/boost/function/gen_function_N.pl
@@ -0,0 +1,26 @@
+#!/usr/bin/perl -w
+#
+# Boost.Function library
+#
+# Copyright Douglas Gregor 2001-2003. Use, modification and
+# distribution is 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)
+#
+# For more information, see http://www.boost.org
+use English;
+
+if ($#ARGV < 0) {
+ print "Usage: perl gen_function_N <number of arguments>\n";
+ exit;
+}
+
+
+$totalNumArgs = $ARGV[0];
+for ($numArgs = 0; $numArgs <= $totalNumArgs; ++$numArgs) {
+ open OUT, ">function$numArgs.hpp";
+ print OUT "#define BOOST_FUNCTION_NUM_ARGS $numArgs\n";
+ print OUT "#include <boost/function/detail/maybe_include.hpp>\n";
+ print OUT "#undef BOOST_FUNCTION_NUM_ARGS\n";
+ close OUT;
+}
diff --git a/boost/boost/function_equal.hpp b/boost/boost/function_equal.hpp
new file mode 100644
index 00000000000..2d76c75bc90
--- /dev/null
+++ b/boost/boost/function_equal.hpp
@@ -0,0 +1,28 @@
+// Copyright Douglas Gregor 2004.
+// Copyright 2005 Peter Dimov
+
+// Use, modification and distribution is 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)
+
+// For more information, see http://www.boost.org
+#ifndef BOOST_FUNCTION_EQUAL_HPP
+#define BOOST_FUNCTION_EQUAL_HPP
+
+namespace boost {
+
+template<typename F, typename G>
+ bool function_equal_impl(const F& f, const G& g, long)
+ { return f == g; }
+
+// function_equal_impl needs to be unqualified to pick
+// user overloads on two-phase compilers
+
+template<typename F, typename G>
+ bool function_equal(const F& f, const G& g)
+ { return function_equal_impl(f, g, 0); }
+
+} // end namespace boost
+
+#endif // BOOST_FUNCTION_EQUAL_HPP
diff --git a/boost/boost/function_output_iterator.hpp b/boost/boost/function_output_iterator.hpp
new file mode 100644
index 00000000000..9720f3f3d19
--- /dev/null
+++ b/boost/boost/function_output_iterator.hpp
@@ -0,0 +1,56 @@
+// (C) Copyright Jeremy Siek 2001.
+// 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)
+
+// Revision History:
+
+// 27 Feb 2001 Jeremy Siek
+// Initial checkin.
+
+#ifndef BOOST_FUNCTION_OUTPUT_ITERATOR_HPP
+#define BOOST_FUNCTION_OUTPUT_ITERATOR_HPP
+
+#include <iterator>
+
+namespace boost {
+
+ template <class UnaryFunction>
+ class function_output_iterator {
+ typedef function_output_iterator self;
+ public:
+ typedef std::output_iterator_tag iterator_category;
+ typedef void value_type;
+ typedef void difference_type;
+ typedef void pointer;
+ typedef void reference;
+
+ explicit function_output_iterator() {}
+
+ explicit function_output_iterator(const UnaryFunction& f)
+ : m_f(f) {}
+
+ struct output_proxy {
+ output_proxy(UnaryFunction& f) : m_f(f) { }
+ template <class T> output_proxy& operator=(const T& value) {
+ m_f(value);
+ return *this;
+ }
+ UnaryFunction& m_f;
+ };
+ output_proxy operator*() { return output_proxy(m_f); }
+ self& operator++() { return *this; }
+ self& operator++(int) { return *this; }
+ private:
+ UnaryFunction m_f;
+ };
+
+ template <class UnaryFunction>
+ inline function_output_iterator<UnaryFunction>
+ make_function_output_iterator(const UnaryFunction& f = UnaryFunction()) {
+ return function_output_iterator<UnaryFunction>(f);
+ }
+
+} // namespace boost
+
+#endif // BOOST_FUNCTION_OUTPUT_ITERATOR_HPP
diff --git a/boost/boost/functional.hpp b/boost/boost/functional.hpp
new file mode 100644
index 00000000000..b60d139ad50
--- /dev/null
+++ b/boost/boost/functional.hpp
@@ -0,0 +1,548 @@
+// ------------------------------------------------------------------------------
+// Copyright (c) 2000 Cadenza New Zealand Ltd
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+// ------------------------------------------------------------------------------
+// Boost functional.hpp header file
+// See http://www.boost.org/libs/functional for documentation.
+// ------------------------------------------------------------------------------
+// $Id: functional.hpp,v 1.4.20.1 2006/12/02 14:17:26 andreas_huber69 Exp $
+// ------------------------------------------------------------------------------
+
+#ifndef BOOST_FUNCTIONAL_HPP
+#define BOOST_FUNCTIONAL_HPP
+
+#include <boost/config.hpp>
+#include <boost/call_traits.hpp>
+#include <functional>
+
+namespace boost
+{
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ // --------------------------------------------------------------------------
+ // The following traits classes allow us to avoid the need for ptr_fun
+ // because the types of arguments and the result of a function can be
+ // deduced.
+ //
+ // In addition to the standard types defined in unary_function and
+ // binary_function, we add
+ //
+ // - function_type, the type of the function or function object itself.
+ //
+ // - param_type, the type that should be used for passing the function or
+ // function object as an argument.
+ // --------------------------------------------------------------------------
+ namespace detail
+ {
+ template <class Operation>
+ struct unary_traits_imp;
+
+ template <class Operation>
+ struct unary_traits_imp<Operation*>
+ {
+ typedef Operation function_type;
+ typedef const function_type & param_type;
+ typedef typename Operation::result_type result_type;
+ typedef typename Operation::argument_type argument_type;
+ };
+
+ template <class R, class A>
+ struct unary_traits_imp<R(*)(A)>
+ {
+ typedef R (*function_type)(A);
+ typedef R (*param_type)(A);
+ typedef R result_type;
+ typedef A argument_type;
+ };
+
+ template <class Operation>
+ struct binary_traits_imp;
+
+ template <class Operation>
+ struct binary_traits_imp<Operation*>
+ {
+ typedef Operation function_type;
+ typedef const function_type & param_type;
+ typedef typename Operation::result_type result_type;
+ typedef typename Operation::first_argument_type first_argument_type;
+ typedef typename Operation::second_argument_type second_argument_type;
+ };
+
+ template <class R, class A1, class A2>
+ struct binary_traits_imp<R(*)(A1,A2)>
+ {
+ typedef R (*function_type)(A1,A2);
+ typedef R (*param_type)(A1,A2);
+ typedef R result_type;
+ typedef A1 first_argument_type;
+ typedef A2 second_argument_type;
+ };
+ } // namespace detail
+
+ template <class Operation>
+ struct unary_traits
+ {
+ typedef typename detail::unary_traits_imp<Operation*>::function_type function_type;
+ typedef typename detail::unary_traits_imp<Operation*>::param_type param_type;
+ typedef typename detail::unary_traits_imp<Operation*>::result_type result_type;
+ typedef typename detail::unary_traits_imp<Operation*>::argument_type argument_type;
+ };
+
+ template <class R, class A>
+ struct unary_traits<R(*)(A)>
+ {
+ typedef R (*function_type)(A);
+ typedef R (*param_type)(A);
+ typedef R result_type;
+ typedef A argument_type;
+ };
+
+ template <class Operation>
+ struct binary_traits
+ {
+ typedef typename detail::binary_traits_imp<Operation*>::function_type function_type;
+ typedef typename detail::binary_traits_imp<Operation*>::param_type param_type;
+ typedef typename detail::binary_traits_imp<Operation*>::result_type result_type;
+ typedef typename detail::binary_traits_imp<Operation*>::first_argument_type first_argument_type;
+ typedef typename detail::binary_traits_imp<Operation*>::second_argument_type second_argument_type;
+ };
+
+ template <class R, class A1, class A2>
+ struct binary_traits<R(*)(A1,A2)>
+ {
+ typedef R (*function_type)(A1,A2);
+ typedef R (*param_type)(A1,A2);
+ typedef R result_type;
+ typedef A1 first_argument_type;
+ typedef A2 second_argument_type;
+ };
+#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ // --------------------------------------------------------------------------
+ // If we have no partial specialisation available, decay to a situation
+ // that is no worse than in the Standard, i.e., ptr_fun will be required.
+ // --------------------------------------------------------------------------
+
+ template <class Operation>
+ struct unary_traits
+ {
+ typedef Operation function_type;
+ typedef const Operation& param_type;
+ typedef typename Operation::result_type result_type;
+ typedef typename Operation::argument_type argument_type;
+ };
+
+ template <class Operation>
+ struct binary_traits
+ {
+ typedef Operation function_type;
+ typedef const Operation & param_type;
+ typedef typename Operation::result_type result_type;
+ typedef typename Operation::first_argument_type first_argument_type;
+ typedef typename Operation::second_argument_type second_argument_type;
+ };
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+ // --------------------------------------------------------------------------
+ // unary_negate, not1
+ // --------------------------------------------------------------------------
+ template <class Predicate>
+ class unary_negate
+ : public std::unary_function<typename unary_traits<Predicate>::argument_type,bool>
+ {
+ public:
+ explicit unary_negate(typename unary_traits<Predicate>::param_type x)
+ :
+ pred(x)
+ {}
+ bool operator()(typename call_traits<typename unary_traits<Predicate>::argument_type>::param_type x) const
+ {
+ return !pred(x);
+ }
+ private:
+ typename unary_traits<Predicate>::function_type pred;
+ };
+
+ template <class Predicate>
+ unary_negate<Predicate> not1(const Predicate &pred)
+ {
+ // The cast is to placate Borland C++Builder in certain circumstances.
+ // I don't think it should be necessary.
+ return unary_negate<Predicate>((typename unary_traits<Predicate>::param_type)pred);
+ }
+
+ template <class Predicate>
+ unary_negate<Predicate> not1(Predicate &pred)
+ {
+ return unary_negate<Predicate>(pred);
+ }
+
+ // --------------------------------------------------------------------------
+ // binary_negate, not2
+ // --------------------------------------------------------------------------
+ template <class Predicate>
+ class binary_negate
+ : public std::binary_function<typename binary_traits<Predicate>::first_argument_type,
+ typename binary_traits<Predicate>::second_argument_type,
+ bool>
+ {
+ public:
+ explicit binary_negate(typename binary_traits<Predicate>::param_type x)
+ :
+ pred(x)
+ {}
+ bool operator()(typename call_traits<typename binary_traits<Predicate>::first_argument_type>::param_type x,
+ typename call_traits<typename binary_traits<Predicate>::second_argument_type>::param_type y) const
+ {
+ return !pred(x,y);
+ }
+ private:
+ typename binary_traits<Predicate>::function_type pred;
+ };
+
+ template <class Predicate>
+ binary_negate<Predicate> not2(const Predicate &pred)
+ {
+ // The cast is to placate Borland C++Builder in certain circumstances.
+ // I don't think it should be necessary.
+ return binary_negate<Predicate>((typename binary_traits<Predicate>::param_type)pred);
+ }
+
+ template <class Predicate>
+ binary_negate<Predicate> not2(Predicate &pred)
+ {
+ return binary_negate<Predicate>(pred);
+ }
+
+ // --------------------------------------------------------------------------
+ // binder1st, bind1st
+ // --------------------------------------------------------------------------
+ template <class Operation>
+ class binder1st
+ : public std::unary_function<typename binary_traits<Operation>::second_argument_type,
+ typename binary_traits<Operation>::result_type>
+ {
+ public:
+ binder1st(typename binary_traits<Operation>::param_type x,
+ typename call_traits<typename binary_traits<Operation>::first_argument_type>::param_type y)
+ :
+ op(x), value(y)
+ {}
+
+ typename binary_traits<Operation>::result_type
+ operator()(typename call_traits<typename binary_traits<Operation>::second_argument_type>::param_type x) const
+ {
+ return op(value, x);
+ }
+
+ protected:
+ typename binary_traits<Operation>::function_type op;
+ typename binary_traits<Operation>::first_argument_type value;
+ };
+
+ template <class Operation>
+ inline binder1st<Operation> bind1st(const Operation &op,
+ typename call_traits<
+ typename binary_traits<Operation>::first_argument_type
+ >::param_type x)
+ {
+ // The cast is to placate Borland C++Builder in certain circumstances.
+ // I don't think it should be necessary.
+ return binder1st<Operation>((typename binary_traits<Operation>::param_type)op, x);
+ }
+
+ template <class Operation>
+ inline binder1st<Operation> bind1st(Operation &op,
+ typename call_traits<
+ typename binary_traits<Operation>::first_argument_type
+ >::param_type x)
+ {
+ return binder1st<Operation>(op, x);
+ }
+
+ // --------------------------------------------------------------------------
+ // binder2nd, bind2nd
+ // --------------------------------------------------------------------------
+ template <class Operation>
+ class binder2nd
+ : public std::unary_function<typename binary_traits<Operation>::first_argument_type,
+ typename binary_traits<Operation>::result_type>
+ {
+ public:
+ binder2nd(typename binary_traits<Operation>::param_type x,
+ typename call_traits<typename binary_traits<Operation>::second_argument_type>::param_type y)
+ :
+ op(x), value(y)
+ {}
+
+ typename binary_traits<Operation>::result_type
+ operator()(typename call_traits<typename binary_traits<Operation>::first_argument_type>::param_type x) const
+ {
+ return op(x, value);
+ }
+
+ protected:
+ typename binary_traits<Operation>::function_type op;
+ typename binary_traits<Operation>::second_argument_type value;
+ };
+
+ template <class Operation>
+ inline binder2nd<Operation> bind2nd(const Operation &op,
+ typename call_traits<
+ typename binary_traits<Operation>::second_argument_type
+ >::param_type x)
+ {
+ // The cast is to placate Borland C++Builder in certain circumstances.
+ // I don't think it should be necessary.
+ return binder2nd<Operation>((typename binary_traits<Operation>::param_type)op, x);
+ }
+
+ template <class Operation>
+ inline binder2nd<Operation> bind2nd(Operation &op,
+ typename call_traits<
+ typename binary_traits<Operation>::second_argument_type
+ >::param_type x)
+ {
+ return binder2nd<Operation>(op, x);
+ }
+
+ // --------------------------------------------------------------------------
+ // mem_fun, etc
+ // --------------------------------------------------------------------------
+ template <class S, class T>
+ class mem_fun_t : public std::unary_function<T*, S>
+ {
+ public:
+ explicit mem_fun_t(S (T::*p)())
+ :
+ ptr(p)
+ {}
+ S operator()(T* p) const
+ {
+ return (p->*ptr)();
+ }
+ private:
+ S (T::*ptr)();
+ };
+
+ template <class S, class T, class A>
+ class mem_fun1_t : public std::binary_function<T*, A, S>
+ {
+ public:
+ explicit mem_fun1_t(S (T::*p)(A))
+ :
+ ptr(p)
+ {}
+ S operator()(T* p, typename call_traits<A>::param_type x) const
+ {
+ return (p->*ptr)(x);
+ }
+ private:
+ S (T::*ptr)(A);
+ };
+
+ template <class S, class T>
+ class const_mem_fun_t : public std::unary_function<const T*, S>
+ {
+ public:
+ explicit const_mem_fun_t(S (T::*p)() const)
+ :
+ ptr(p)
+ {}
+ S operator()(const T* p) const
+ {
+ return (p->*ptr)();
+ }
+ private:
+ S (T::*ptr)() const;
+ };
+
+ template <class S, class T, class A>
+ class const_mem_fun1_t : public std::binary_function<const T*, A, S>
+ {
+ public:
+ explicit const_mem_fun1_t(S (T::*p)(A) const)
+ :
+ ptr(p)
+ {}
+ S operator()(const T* p, typename call_traits<A>::param_type x) const
+ {
+ return (p->*ptr)(x);
+ }
+ private:
+ S (T::*ptr)(A) const;
+ };
+
+ template<class S, class T>
+ inline mem_fun_t<S,T> mem_fun(S (T::*f)())
+ {
+ return mem_fun_t<S,T>(f);
+ }
+
+ template<class S, class T, class A>
+ inline mem_fun1_t<S,T,A> mem_fun(S (T::*f)(A))
+ {
+ return mem_fun1_t<S,T,A>(f);
+ }
+
+#ifndef BOOST_NO_POINTER_TO_MEMBER_CONST
+ template<class S, class T>
+ inline const_mem_fun_t<S,T> mem_fun(S (T::*f)() const)
+ {
+ return const_mem_fun_t<S,T>(f);
+ }
+
+ template<class S, class T, class A>
+ inline const_mem_fun1_t<S,T,A> mem_fun(S (T::*f)(A) const)
+ {
+ return const_mem_fun1_t<S,T,A>(f);
+ }
+#endif // BOOST_NO_POINTER_TO_MEMBER_CONST
+
+ // --------------------------------------------------------------------------
+ // mem_fun_ref, etc
+ // --------------------------------------------------------------------------
+ template <class S, class T>
+ class mem_fun_ref_t : public std::unary_function<T&, S>
+ {
+ public:
+ explicit mem_fun_ref_t(S (T::*p)())
+ :
+ ptr(p)
+ {}
+ S operator()(T& p) const
+ {
+ return (p.*ptr)();
+ }
+ private:
+ S (T::*ptr)();
+ };
+
+ template <class S, class T, class A>
+ class mem_fun1_ref_t : public std::binary_function<T&, A, S>
+ {
+ public:
+ explicit mem_fun1_ref_t(S (T::*p)(A))
+ :
+ ptr(p)
+ {}
+ S operator()(T& p, typename call_traits<A>::param_type x) const
+ {
+ return (p.*ptr)(x);
+ }
+ private:
+ S (T::*ptr)(A);
+ };
+
+ template <class S, class T>
+ class const_mem_fun_ref_t : public std::unary_function<const T&, S>
+ {
+ public:
+ explicit const_mem_fun_ref_t(S (T::*p)() const)
+ :
+ ptr(p)
+ {}
+
+ S operator()(const T &p) const
+ {
+ return (p.*ptr)();
+ }
+ private:
+ S (T::*ptr)() const;
+ };
+
+ template <class S, class T, class A>
+ class const_mem_fun1_ref_t : public std::binary_function<const T&, A, S>
+ {
+ public:
+ explicit const_mem_fun1_ref_t(S (T::*p)(A) const)
+ :
+ ptr(p)
+ {}
+
+ S operator()(const T& p, typename call_traits<A>::param_type x) const
+ {
+ return (p.*ptr)(x);
+ }
+ private:
+ S (T::*ptr)(A) const;
+ };
+
+ template<class S, class T>
+ inline mem_fun_ref_t<S,T> mem_fun_ref(S (T::*f)())
+ {
+ return mem_fun_ref_t<S,T>(f);
+ }
+
+ template<class S, class T, class A>
+ inline mem_fun1_ref_t<S,T,A> mem_fun_ref(S (T::*f)(A))
+ {
+ return mem_fun1_ref_t<S,T,A>(f);
+ }
+
+#ifndef BOOST_NO_POINTER_TO_MEMBER_CONST
+ template<class S, class T>
+ inline const_mem_fun_ref_t<S,T> mem_fun_ref(S (T::*f)() const)
+ {
+ return const_mem_fun_ref_t<S,T>(f);
+ }
+
+ template<class S, class T, class A>
+ inline const_mem_fun1_ref_t<S,T,A> mem_fun_ref(S (T::*f)(A) const)
+ {
+ return const_mem_fun1_ref_t<S,T,A>(f);
+ }
+#endif // BOOST_NO_POINTER_TO_MEMBER_CONST
+
+ // --------------------------------------------------------------------------
+ // ptr_fun
+ // --------------------------------------------------------------------------
+ template <class Arg, class Result>
+ class pointer_to_unary_function : public std::unary_function<Arg,Result>
+ {
+ public:
+ explicit pointer_to_unary_function(Result (*f)(Arg))
+ :
+ func(f)
+ {}
+
+ Result operator()(typename call_traits<Arg>::param_type x) const
+ {
+ return func(x);
+ }
+
+ private:
+ Result (*func)(Arg);
+ };
+
+ template <class Arg, class Result>
+ inline pointer_to_unary_function<Arg,Result> ptr_fun(Result (*f)(Arg))
+ {
+ return pointer_to_unary_function<Arg,Result>(f);
+ }
+
+ template <class Arg1, class Arg2, class Result>
+ class pointer_to_binary_function : public std::binary_function<Arg1,Arg2,Result>
+ {
+ public:
+ explicit pointer_to_binary_function(Result (*f)(Arg1, Arg2))
+ :
+ func(f)
+ {}
+
+ Result operator()(typename call_traits<Arg1>::param_type x, typename call_traits<Arg2>::param_type y) const
+ {
+ return func(x,y);
+ }
+
+ private:
+ Result (*func)(Arg1, Arg2);
+ };
+
+ template <class Arg1, class Arg2, class Result>
+ inline pointer_to_binary_function<Arg1,Arg2,Result> ptr_fun(Result (*f)(Arg1, Arg2))
+ {
+ return pointer_to_binary_function<Arg1,Arg2,Result>(f);
+ }
+} // namespace boost
+
+#endif
diff --git a/boost/boost/functional/detail/container_fwd.hpp b/boost/boost/functional/detail/container_fwd.hpp
new file mode 100644
index 00000000000..d30bef3d4f7
--- /dev/null
+++ b/boost/boost/functional/detail/container_fwd.hpp
@@ -0,0 +1,95 @@
+
+// Copyright Daniel James 2005-2006. 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)
+
+#if !defined(BOOST_DETAIL_CONTAINER_FWD_HPP)
+#define BOOST_DETAIL_CONTAINER_FWD_HPP
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+#if BOOST_WORKAROUND(__GNUC__, < 3) && !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION)
+#define BOOST_HASH_CHAR_TRAITS string_char_traits
+#else
+#define BOOST_HASH_CHAR_TRAITS char_traits
+#endif
+
+#if (defined(__GLIBCXX__) && defined(_GLIBCXX_DEBUG)) \
+ || BOOST_WORKAROUND(__BORLANDC__, > 0x551) \
+ || BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x842)) \
+ || (defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION))
+
+#include <deque>
+#include <list>
+#include <vector>
+#include <map>
+#include <set>
+#include <bitset>
+#include <string>
+#include <complex>
+
+#else
+
+#include <cstddef>
+
+#if !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION) && \
+ defined(__STL_CONFIG_H)
+
+#define BOOST_CONTAINER_FWD_BAD_BITSET
+
+#if !defined(__STL_NON_TYPE_TMPL_PARAM_BUG)
+#define BOOST_CONTAINER_FWD_BAD_DEQUE
+#endif
+
+#endif
+
+#if defined(BOOST_CONTAINER_FWD_BAD_DEQUE)
+#include <deque>
+#endif
+
+#if defined(BOOST_CONTAINER_FWD_BAD_BITSET)
+#include <bitset>
+#endif
+
+#if defined(BOOST_MSVC)
+#pragma warning(push)
+#pragma warning(disable:4099) // struct/class mismatch in fwd declarations
+#endif
+
+namespace std
+{
+ template <class T> class allocator;
+ template <class charT, class traits, class Allocator> class basic_string;
+ template <class charT> struct BOOST_HASH_CHAR_TRAITS;
+ template <class T> class complex;
+}
+
+// gcc 3.4 and greater
+namespace std
+{
+#if !defined(BOOST_CONTAINER_FWD_BAD_DEQUE)
+ template <class T, class Allocator> class deque;
+#endif
+
+ template <class T, class Allocator> class list;
+ template <class T, class Allocator> class vector;
+ template <class Key, class T, class Compare, class Allocator> class map;
+ template <class Key, class T, class Compare, class Allocator>
+ class multimap;
+ template <class Key, class Compare, class Allocator> class set;
+ template <class Key, class Compare, class Allocator> class multiset;
+
+#if !defined(BOOST_CONTAINER_FWD_BAD_BITSET)
+ template <size_t N> class bitset;
+#endif
+ template <class T1, class T2> struct pair;
+}
+
+#if defined(BOOST_MSVC)
+#pragma warning(pop)
+#endif
+
+#endif
+
+#endif
diff --git a/boost/boost/functional/detail/float_functions.hpp b/boost/boost/functional/detail/float_functions.hpp
new file mode 100644
index 00000000000..34b8251f6f3
--- /dev/null
+++ b/boost/boost/functional/detail/float_functions.hpp
@@ -0,0 +1,154 @@
+
+// Copyright Daniel James 2005-2006. 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)
+
+#if !defined(BOOST_FUNCTIONAL_DETAIL_FLOAT_FUNCTIONS_HPP)
+#define BOOST_FUNCTIONAL_DETAIL_FLOAT_FUNCTIONS_HPP
+
+#include <cmath>
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+// The C++ standard requires that the C float functions are overloarded
+// for float, double and long double in the std namespace, but some of the older
+// library implementations don't support this. On some that don't, the C99
+// float functions (frexpf, frexpl, etc.) are available.
+//
+// Some of this is based on guess work. If I don't know any better I assume that
+// the standard C++ overloaded functions are available. If they're not then this
+// means that the argument is cast to a double and back, which is inefficient
+// and will give pretty bad results for long doubles - so if you know better
+// let me know.
+
+// STLport:
+#if defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)
+# if (defined(__GNUC__) && __GNUC__ < 3 && (defined(linux) || defined(__linux) || defined(__linux__))) || defined(__DMC__)
+# define BOOST_HASH_USE_C99_FLOAT_FUNCS
+# elif defined(BOOST_MSVC) && BOOST_MSVC < 1300
+# define BOOST_HASH_USE_C99_FLOAT_FUNCS
+# else
+# define BOOST_HASH_USE_OVERLOAD_FLOAT_FUNCS
+# endif
+
+// Roguewave:
+//
+// On borland 5.51, with roguewave 2.1.1 the standard C++ overloads aren't
+// defined, but for the same version of roguewave on sunpro they are.
+#elif defined(_RWSTD_VER)
+# if defined(__BORLANDC__)
+# define BOOST_HASH_USE_C99_FLOAT_FUNCS
+# define BOOST_HASH_C99_NO_FLOAT_FUNCS
+# elif defined(__DECCXX)
+# define BOOST_HASH_USE_C99_FLOAT_FUNCS
+# else
+# define BOOST_HASH_USE_OVERLOAD_FLOAT_FUNCS
+# endif
+
+// libstdc++ (gcc 3.0 onwards, I think)
+#elif defined(__GLIBCPP__) || defined(__GLIBCXX__)
+# define BOOST_HASH_USE_OVERLOAD_FLOAT_FUNCS
+
+// SGI:
+#elif defined(__STL_CONFIG_H)
+# if defined(linux) || defined(__linux) || defined(__linux__)
+# define BOOST_HASH_USE_C99_FLOAT_FUNCS
+# else
+# define BOOST_HASH_USE_OVERLOAD_FLOAT_FUNCS
+# endif
+
+// Dinkumware.
+#elif (defined(_YVALS) && !defined(__IBMCPP__)) || defined(_CPPLIB_VER)
+// Overloaded float functions were probably introduced in an earlier version
+// than this.
+# if defined(_CPPLIB_VER) && (_CPPLIB_VER >= 402)
+# define BOOST_HASH_USE_OVERLOAD_FLOAT_FUNCS
+# else
+# define BOOST_HASH_USE_C99_FLOAT_FUNCS
+# endif
+
+// Digital Mars
+#elif defined(__DMC__)
+# define BOOST_HASH_USE_C99_FLOAT_FUNCS
+
+// Use overloaded float functions by default.
+#else
+# define BOOST_HASH_USE_OVERLOAD_FLOAT_FUNCS
+#endif
+
+namespace boost
+{
+ namespace hash_detail
+ {
+
+ inline float call_ldexp(float v, int exp)
+ {
+ using namespace std;
+#if defined(BOOST_HASH_USE_OVERLOAD_FLOAT_FUNCS) || \
+ defined(BOOST_HASH_C99_NO_FLOAT_FUNCS)
+ return ldexp(v, exp);
+#else
+ return ldexpf(v, exp);
+#endif
+ }
+
+ inline double call_ldexp(double v, int exp)
+ {
+ using namespace std;
+ return ldexp(v, exp);
+ }
+
+ inline long double call_ldexp(long double v, int exp)
+ {
+ using namespace std;
+#if defined(BOOST_HASH_USE_OVERLOAD_FLOAT_FUNCS)
+ return ldexp(v, exp);
+#else
+ return ldexpl(v, exp);
+#endif
+ }
+
+ inline float call_frexp(float v, int* exp)
+ {
+ using namespace std;
+#if defined(BOOST_HASH_USE_OVERLOAD_FLOAT_FUNCS) || \
+ defined(BOOST_HASH_C99_NO_FLOAT_FUNCS)
+ return frexp(v, exp);
+#else
+ return frexpf(v, exp);
+#endif
+ }
+
+ inline double call_frexp(double v, int* exp)
+ {
+ using namespace std;
+ return frexp(v, exp);
+ }
+
+ inline long double call_frexp(long double v, int* exp)
+ {
+ using namespace std;
+#if defined(BOOST_HASH_USE_OVERLOAD_FLOAT_FUNCS)
+ return frexp(v, exp);
+#else
+ return frexpl(v, exp);
+#endif
+ }
+ }
+}
+
+#if defined(BOOST_HASH_USE_C99_FLOAT_FUNCS)
+#undef BOOST_HASH_USE_C99_FLOAT_FUNCS
+#endif
+
+#if defined(BOOST_HASH_USE_OVERLOAD_FLOAT_FUNCS)
+#undef BOOST_HASH_USE_OVERLOAD_FLOAT_FUNCS
+#endif
+
+#if defined(BOOST_HASH_C99_NO_FLOAT_FUNCS)
+#undef BOOST_HASH_C99_NO_FLOAT_FUNCS
+#endif
+
+#endif
diff --git a/boost/boost/functional/detail/hash_float.hpp b/boost/boost/functional/detail/hash_float.hpp
new file mode 100644
index 00000000000..07d19c30406
--- /dev/null
+++ b/boost/boost/functional/detail/hash_float.hpp
@@ -0,0 +1,123 @@
+
+// Copyright Daniel James 2005-2006. 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)
+
+// Based on Peter Dimov's proposal
+// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2005/n1756.pdf
+// issue 6.18.
+
+#if !defined(BOOST_FUNCTIONAL_DETAIL_HASH_FLOAT_HEADER)
+#define BOOST_FUNCTIONAL_DETAIL_HASH_FLOAT_HEADER
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/functional/detail/float_functions.hpp>
+#include <boost/limits.hpp>
+#include <boost/assert.hpp>
+#include <errno.h>
+
+// Don't use fpclassify or _fpclass for stlport.
+#if !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION)
+# if defined(__GLIBCPP__) || defined(__GLIBCXX__)
+// GNU libstdc++ 3
+# if (defined(__USE_ISOC99) || defined(_GLIBCXX_USE_C99_MATH)) && \
+ !(defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__))
+# define BOOST_HASH_USE_FPCLASSIFY
+# endif
+# elif (defined(_YVALS) && !defined(__IBMCPP__)) || defined(_CPPLIB_VER)
+// Dinkumware Library, on Visual C++
+# if defined(BOOST_MSVC)
+# define BOOST_HASH_USE_FPCLASS
+# endif
+# endif
+#endif
+
+namespace boost
+{
+ namespace hash_detail
+ {
+ inline void hash_float_combine(std::size_t& seed, std::size_t value)
+ {
+ seed ^= value + (seed<<6) + (seed>>2);
+ }
+
+ template <class T>
+ inline std::size_t float_hash_impl(T v)
+ {
+ int exp = 0;
+ errno = 0;
+ v = boost::hash_detail::call_frexp(v, &exp);
+ if(errno) return 0;
+
+ std::size_t seed = 0;
+
+ std::size_t const length
+ = (std::numeric_limits<T>::digits +
+ std::numeric_limits<int>::digits - 1)
+ / std::numeric_limits<int>::digits;
+
+ for(std::size_t i = 0; i < length; ++i)
+ {
+ v = boost::hash_detail::call_ldexp(v, std::numeric_limits<int>::digits);
+ int const part = static_cast<int>(v);
+ v -= part;
+ hash_float_combine(seed, part);
+ }
+
+ hash_float_combine(seed, exp);
+
+ return seed;
+ }
+
+ template <class T>
+ inline std::size_t float_hash_value(T v)
+ {
+#if defined(BOOST_HASH_USE_FPCLASSIFY)
+ using namespace std;
+ switch (fpclassify(v)) {
+ case FP_ZERO:
+ return 0;
+ case FP_INFINITE:
+ return (std::size_t)(v > 0 ? -1 : -2);
+ case FP_NAN:
+ return (std::size_t)(-3);
+ case FP_NORMAL:
+ case FP_SUBNORMAL:
+ return float_hash_impl(v);
+ default:
+ BOOST_ASSERT(0);
+ return 0;
+ }
+#elif defined(BOOST_HASH_USE_FPCLASS)
+ switch(_fpclass(v)) {
+ case _FPCLASS_NZ:
+ case _FPCLASS_PZ:
+ return 0;
+ case _FPCLASS_PINF:
+ return (std::size_t)(-1);
+ case _FPCLASS_NINF:
+ return (std::size_t)(-2);
+ case _FPCLASS_SNAN:
+ case _FPCLASS_QNAN:
+ return (std::size_t)(-3);
+ case _FPCLASS_NN:
+ case _FPCLASS_ND:
+ return float_hash_impl(v);
+ case _FPCLASS_PD:
+ case _FPCLASS_PN:
+ return float_hash_impl(v);
+ default:
+ BOOST_ASSERT(0);
+ return 0;
+ }
+#else
+ return float_hash_impl(v);
+#endif
+ }
+ }
+}
+
+#endif
diff --git a/boost/boost/functional/hash.hpp b/boost/boost/functional/hash.hpp
new file mode 100644
index 00000000000..65e19b1a77b
--- /dev/null
+++ b/boost/boost/functional/hash.hpp
@@ -0,0 +1,10 @@
+
+// Copyright Daniel James 2005-2006. 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)
+
+// Based on Peter Dimov's proposal
+// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2005/n1756.pdf
+// issue 6.18.
+
+#include <boost/functional/hash/hash.hpp>
diff --git a/boost/boost/functional/hash/deque.hpp b/boost/boost/functional/hash/deque.hpp
new file mode 100644
index 00000000000..0f688cd6b7b
--- /dev/null
+++ b/boost/boost/functional/hash/deque.hpp
@@ -0,0 +1,21 @@
+
+// Copyright Daniel James 2005-2006. 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)
+
+// Based on Peter Dimov's proposal
+// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2005/n1756.pdf
+// issue 6.18.
+
+#if !defined(BOOST_FUNCTIONAL_HASH_DEQUE_HPP)
+#define BOOST_FUNCTIONAL_HASH_DEQUE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#warning "boost/functional/hash/deque.hpp is deprecated, use boost/functional/hash.hpp instead."
+#include <boost/functional/hash.hpp>
+
+#endif
+
diff --git a/boost/boost/functional/hash/hash.hpp b/boost/boost/functional/hash/hash.hpp
new file mode 100644
index 00000000000..993977eb850
--- /dev/null
+++ b/boost/boost/functional/hash/hash.hpp
@@ -0,0 +1,602 @@
+
+// Copyright Daniel James 2005-2007. 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)
+
+// Based on Peter Dimov's proposal
+// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2005/n1756.pdf
+// issue 6.18.
+
+#if !defined(BOOST_FUNCTIONAL_HASH_HASH_HPP)
+#define BOOST_FUNCTIONAL_HASH_HASH_HPP
+
+#include <boost/functional/hash_fwd.hpp>
+#include <functional>
+#include <boost/functional/detail/hash_float.hpp>
+#include <boost/functional/detail/container_fwd.hpp>
+#include <string>
+
+#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+#include <boost/type_traits/is_pointer.hpp>
+#endif
+
+#if defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
+#include <boost/type_traits/is_array.hpp>
+#endif
+
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+#include <boost/type_traits/is_const.hpp>
+#endif
+
+#if defined(BOOST_MSVC)
+# pragma warning(push)
+# pragma warning(disable:4267)
+#endif
+
+namespace boost
+{
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))
+ // Borland complains about an ambiguous function overload
+ // when compiling boost::hash<bool>.
+ std::size_t hash_value(bool);
+#endif
+
+ std::size_t hash_value(int);
+ std::size_t hash_value(unsigned int);
+ std::size_t hash_value(long);
+ std::size_t hash_value(unsigned long);
+
+#if defined(BOOST_HAS_LONG_LONG) && defined(_M_X64) && defined(_WIN64)
+ // On 64-bit windows std::size_t is a typedef for unsigned long long, which
+ // isn't due to be supported until Boost 1.35. So add support here.
+ // (Technically, Boost.Hash isn't actually documented as supporting
+ // std::size_t. But it would be pretty silly not to).
+ std::size_t hash_value(long long);
+ std::size_t hash_value(unsigned long long);
+#endif
+
+#if !BOOST_WORKAROUND(__DMC__, <= 0x848)
+ template <class T> std::size_t hash_value(T* const&);
+#else
+ template <class T> std::size_t hash_value(T*);
+#endif
+
+#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
+ template< class T, unsigned N >
+ std::size_t hash_value(const T (&array)[N]);
+
+ template< class T, unsigned N >
+ std::size_t hash_value(T (&array)[N]);
+#endif
+
+ std::size_t hash_value(float v);
+ std::size_t hash_value(double v);
+ std::size_t hash_value(long double v);
+
+ template <class Ch, class A>
+ std::size_t hash_value(std::basic_string<Ch, std::BOOST_HASH_CHAR_TRAITS<Ch>, A> const&);
+
+ template <class A, class B>
+ std::size_t hash_value(std::pair<A, B> const&);
+ template <class T, class A>
+ std::size_t hash_value(std::vector<T, A> const&);
+ template <class T, class A>
+ std::size_t hash_value(std::list<T, A> const& v);
+ template <class T, class A>
+ std::size_t hash_value(std::deque<T, A> const& v);
+ template <class K, class C, class A>
+ std::size_t hash_value(std::set<K, C, A> const& v);
+ template <class K, class C, class A>
+ std::size_t hash_value(std::multiset<K, C, A> const& v);
+ template <class K, class T, class C, class A>
+ std::size_t hash_value(std::map<K, T, C, A> const& v);
+ template <class K, class T, class C, class A>
+ std::size_t hash_value(std::multimap<K, T, C, A> const& v);
+
+ // Implementation
+
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))
+ inline std::size_t hash_value(bool v)
+ {
+ return static_cast<std::size_t>(v);
+ }
+#endif
+
+ inline std::size_t hash_value(int v)
+ {
+ return static_cast<std::size_t>(v);
+ }
+
+ inline std::size_t hash_value(unsigned int v)
+ {
+ return static_cast<std::size_t>(v);
+ }
+
+ inline std::size_t hash_value(long v)
+ {
+ return static_cast<std::size_t>(v);
+ }
+
+ inline std::size_t hash_value(unsigned long v)
+ {
+ return static_cast<std::size_t>(v);
+ }
+
+#if defined(BOOST_HAS_LONG_LONG) && defined(_M_X64) && defined(_WIN64)
+ inline std::size_t hash_value(long long v)
+ {
+ return v;
+ }
+
+ inline std::size_t hash_value(unsigned long long v)
+ {
+ return v;
+ }
+#endif
+
+ // Implementation by Alberto Barbati and Dave Harris.
+#if !BOOST_WORKAROUND(__DMC__, <= 0x848)
+ template <class T> std::size_t hash_value(T* const& v)
+#else
+ template <class T> std::size_t hash_value(T* v)
+#endif
+ {
+ std::size_t x = static_cast<std::size_t>(
+ reinterpret_cast<std::ptrdiff_t>(v));
+ return x + (x >> 3);
+ }
+
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ template <class T>
+ inline void hash_combine(std::size_t& seed, T& v)
+#else
+ template <class T>
+ inline void hash_combine(std::size_t& seed, T const& v)
+#endif
+ {
+ boost::hash<T> hasher;
+ seed ^= hasher(v) + 0x9e3779b9 + (seed<<6) + (seed>>2);
+ }
+
+ template <class It>
+ inline std::size_t hash_range(It first, It last)
+ {
+ std::size_t seed = 0;
+
+ for(; first != last; ++first)
+ {
+ hash_combine(seed, *first);
+ }
+
+ return seed;
+ }
+
+ template <class It>
+ inline void hash_range(std::size_t& seed, It first, It last)
+ {
+ for(; first != last; ++first)
+ {
+ hash_combine(seed, *first);
+ }
+ }
+
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))
+ template <class T>
+ inline std::size_t hash_range(T* first, T* last)
+ {
+ std::size_t seed = 0;
+
+ for(; first != last; ++first)
+ {
+ boost::hash<T> hasher;
+ seed ^= hasher(*first) + 0x9e3779b9 + (seed<<6) + (seed>>2);
+ }
+
+ return seed;
+ }
+
+ template <class T>
+ inline void hash_range(std::size_t& seed, T* first, T* last)
+ {
+ for(; first != last; ++first)
+ {
+ boost::hash<T> hasher;
+ seed ^= hasher(*first) + 0x9e3779b9 + (seed<<6) + (seed>>2);
+ }
+ }
+#endif
+
+#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
+ template< class T, unsigned N >
+ inline std::size_t hash_value(const T (&array)[N])
+ {
+ return hash_range(array, array + N);
+ }
+
+ template< class T, unsigned N >
+ inline std::size_t hash_value(T (&array)[N])
+ {
+ return hash_range(array, array + N);
+ }
+#endif
+
+ template <class Ch, class A>
+ inline std::size_t hash_value(std::basic_string<Ch, std::BOOST_HASH_CHAR_TRAITS<Ch>, A> const& v)
+ {
+ return hash_range(v.begin(), v.end());
+ }
+
+ inline std::size_t hash_value(float v)
+ {
+ return boost::hash_detail::float_hash_value(v);
+ }
+
+ inline std::size_t hash_value(double v)
+ {
+ return boost::hash_detail::float_hash_value(v);
+ }
+
+ inline std::size_t hash_value(long double v)
+ {
+ return boost::hash_detail::float_hash_value(v);
+ }
+
+ template <class A, class B>
+ std::size_t hash_value(std::pair<A, B> const& v)
+ {
+ std::size_t seed = 0;
+ hash_combine(seed, v.first);
+ hash_combine(seed, v.second);
+ return seed;
+ }
+
+ template <class T, class A>
+ std::size_t hash_value(std::vector<T, A> const& v)
+ {
+ return hash_range(v.begin(), v.end());
+ }
+
+ template <class T, class A>
+ std::size_t hash_value(std::list<T, A> const& v)
+ {
+ return hash_range(v.begin(), v.end());
+ }
+
+ template <class T, class A>
+ std::size_t hash_value(std::deque<T, A> const& v)
+ {
+ return hash_range(v.begin(), v.end());
+ }
+
+ template <class K, class C, class A>
+ std::size_t hash_value(std::set<K, C, A> const& v)
+ {
+ return hash_range(v.begin(), v.end());
+ }
+
+ template <class K, class C, class A>
+ std::size_t hash_value(std::multiset<K, C, A> const& v)
+ {
+ return hash_range(v.begin(), v.end());
+ }
+
+ template <class K, class T, class C, class A>
+ std::size_t hash_value(std::map<K, T, C, A> const& v)
+ {
+ return hash_range(v.begin(), v.end());
+ }
+
+ template <class K, class T, class C, class A>
+ std::size_t hash_value(std::multimap<K, T, C, A> const& v)
+ {
+ return hash_range(v.begin(), v.end());
+ }
+
+ //
+ // boost::hash
+ //
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+#define BOOST_HASH_SPECIALIZE(type) \
+ template <> struct hash<type> \
+ : public std::unary_function<type, std::size_t> \
+ { \
+ std::size_t operator()(type v) const \
+ { \
+ return boost::hash_value(v); \
+ } \
+ };
+
+#define BOOST_HASH_SPECIALIZE_REF(type) \
+ template <> struct hash<type> \
+ : public std::unary_function<type, std::size_t> \
+ { \
+ std::size_t operator()(type const& v) const \
+ { \
+ return boost::hash_value(v); \
+ } \
+ };
+#else
+#define BOOST_HASH_SPECIALIZE(type) \
+ template <> struct hash<type> \
+ : public std::unary_function<type, std::size_t> \
+ { \
+ std::size_t operator()(type v) const \
+ { \
+ return boost::hash_value(v); \
+ } \
+ }; \
+ \
+ template <> struct hash<const type> \
+ : public std::unary_function<const type, std::size_t> \
+ { \
+ std::size_t operator()(const type v) const \
+ { \
+ return boost::hash_value(v); \
+ } \
+ };
+
+#define BOOST_HASH_SPECIALIZE_REF(type) \
+ template <> struct hash<type> \
+ : public std::unary_function<type, std::size_t> \
+ { \
+ std::size_t operator()(type const& v) const \
+ { \
+ return boost::hash_value(v); \
+ } \
+ }; \
+ \
+ template <> struct hash<const type> \
+ : public std::unary_function<const type, std::size_t> \
+ { \
+ std::size_t operator()(type const& v) const \
+ { \
+ return boost::hash_value(v); \
+ } \
+ };
+#endif
+
+ BOOST_HASH_SPECIALIZE(bool)
+ BOOST_HASH_SPECIALIZE(char)
+ BOOST_HASH_SPECIALIZE(signed char)
+ BOOST_HASH_SPECIALIZE(unsigned char)
+#if !defined(BOOST_NO_INTRINSIC_WCHAR_T)
+ BOOST_HASH_SPECIALIZE(wchar_t)
+#endif
+ BOOST_HASH_SPECIALIZE(short)
+ BOOST_HASH_SPECIALIZE(unsigned short)
+ BOOST_HASH_SPECIALIZE(int)
+ BOOST_HASH_SPECIALIZE(unsigned int)
+ BOOST_HASH_SPECIALIZE(long)
+ BOOST_HASH_SPECIALIZE(unsigned long)
+
+ BOOST_HASH_SPECIALIZE(float)
+ BOOST_HASH_SPECIALIZE(double)
+ BOOST_HASH_SPECIALIZE(long double)
+
+ BOOST_HASH_SPECIALIZE_REF(std::string)
+#if !defined(BOOST_NO_STD_WSTRING)
+ BOOST_HASH_SPECIALIZE_REF(std::wstring)
+#endif
+
+#undef BOOST_HASH_SPECIALIZE
+#undef BOOST_HASH_SPECIALIZE_REF
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+ template <class T>
+ struct hash<T*>
+ : public std::unary_function<T*, std::size_t>
+ {
+ std::size_t operator()(T* v) const \
+ { \
+ return boost::hash_value(v); \
+ } \
+ };
+#else
+ namespace hash_detail
+ {
+ template <bool IsPointer>
+ struct hash_impl;
+
+ template <>
+ struct hash_impl<true>
+ {
+ template <class T>
+ struct inner
+ : public std::unary_function<T, std::size_t>
+ {
+ std::size_t operator()(T val) const
+ {
+ return boost::hash_value(val);
+ }
+ };
+ };
+ }
+
+ template <class T> struct hash
+ : public boost::hash_detail::hash_impl<boost::is_pointer<T>::value>
+ ::BOOST_NESTED_TEMPLATE inner<T>
+ {
+ };
+#endif
+}
+
+#endif // BOOST_FUNCTIONAL_HASH_HASH_HPP
+
+////////////////////////////////////////////////////////////////////////////////
+
+#if !defined(BOOST_HASH_NO_EXTENSIONS) \
+ && !defined(BOOST_FUNCTIONAL_HASH_EXTENSIONS_HPP)
+#define BOOST_FUNCTIONAL_HASH_EXTENSIONS_HPP
+
+namespace boost
+{
+
+#if defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
+ namespace hash_detail
+ {
+ template <bool IsArray>
+ struct call_hash_impl
+ {
+ template <class T>
+ struct inner
+ {
+ static std::size_t call(T const& v)
+ {
+ using namespace boost;
+ return hash_value(v);
+ }
+ };
+ };
+
+ template <>
+ struct call_hash_impl<true>
+ {
+ template <class Array>
+ struct inner
+ {
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ static std::size_t call(Array const& v)
+#else
+ static std::size_t call(Array& v)
+#endif
+ {
+ const int size = sizeof(v) / sizeof(*v);
+ return boost::hash_range(v, v + size);
+ }
+ };
+ };
+
+ template <class T>
+ struct call_hash
+ : public call_hash_impl<boost::is_array<T>::value>
+ ::BOOST_NESTED_TEMPLATE inner<T>
+ {
+ };
+ }
+#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+ template <class T> struct hash
+ : std::unary_function<T, std::size_t>
+ {
+#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
+ std::size_t operator()(T const& val) const
+ {
+ return hash_value(val);
+ }
+#else
+ std::size_t operator()(T const& val) const
+ {
+ return hash_detail::call_hash<T>::call(val);
+ }
+#endif
+ };
+
+#if BOOST_WORKAROUND(__DMC__, <= 0x848)
+ template <class T, unsigned int n> struct hash<T[n]>
+ : std::unary_function<T[n], std::size_t>
+ {
+ std::size_t operator()(const T* val) const
+ {
+ return boost::hash_range(val, val+n);
+ }
+ };
+#endif
+
+#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+ // On compilers without partial specialization, boost::hash<T>
+ // has already been declared to deal with pointers, so just
+ // need to supply the non-pointer version.
+
+ namespace hash_detail
+ {
+ template <bool IsPointer>
+ struct hash_impl;
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+
+ template <>
+ struct hash_impl<false>
+ {
+ template <class T>
+ struct inner
+ : std::unary_function<T, std::size_t>
+ {
+#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
+ std::size_t operator()(T const& val) const
+ {
+ return hash_value(val);
+ }
+#else
+ std::size_t operator()(T const& val) const
+ {
+ return hash_detail::call_hash<T>::call(val);
+ }
+#endif
+ };
+ };
+
+#else // Visual C++ 6.5
+
+ // There's probably a more elegant way to Visual C++ 6.5 to work
+ // but I don't know what it is.
+
+ template <bool IsConst>
+ struct hash_impl_msvc
+ {
+ template <class T>
+ struct inner
+ : public std::unary_function<T, std::size_t>
+ {
+ std::size_t operator()(T const& val) const
+ {
+ return hash_detail::call_hash<T const>::call(val);
+ }
+
+ std::size_t operator()(T& val) const
+ {
+ return hash_detail::call_hash<T>::call(val);
+ }
+ };
+ };
+
+ template <>
+ struct hash_impl_msvc<true>
+ {
+ template <class T>
+ struct inner
+ : public std::unary_function<T, std::size_t>
+ {
+ std::size_t operator()(T& val) const
+ {
+ return hash_detail::call_hash<T>::call(val);
+ }
+ };
+ };
+
+ template <class T>
+ struct hash_impl_msvc2
+ : public hash_impl_msvc<boost::is_const<T>::value>
+ ::BOOST_NESTED_TEMPLATE inner<T> {};
+
+ template <>
+ struct hash_impl<false>
+ {
+ template <class T>
+ struct inner : public hash_impl_msvc2<T> {};
+ };
+
+#endif // Visual C++ 6.5
+ }
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+}
+
+#if defined(BOOST_MSVC)
+# pragma warning(pop)
+#endif
+
+#endif
+
diff --git a/boost/boost/functional/hash/list.hpp b/boost/boost/functional/hash/list.hpp
new file mode 100644
index 00000000000..f3324623263
--- /dev/null
+++ b/boost/boost/functional/hash/list.hpp
@@ -0,0 +1,21 @@
+
+// Copyright Daniel James 2005-2006. 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)
+
+// Based on Peter Dimov's proposal
+// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2005/n1756.pdf
+// issue 6.18.
+
+#if !defined(BOOST_FUNCTIONAL_HASH_LIST_HPP)
+#define BOOST_FUNCTIONAL_HASH_LIST_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#warning "boost/functional/hash/list.hpp is deprecated, use boost/functional/hash.hpp instead."
+#include <boost/functional/hash.hpp>
+
+#endif
+
diff --git a/boost/boost/functional/hash/map.hpp b/boost/boost/functional/hash/map.hpp
new file mode 100644
index 00000000000..10526a171d5
--- /dev/null
+++ b/boost/boost/functional/hash/map.hpp
@@ -0,0 +1,22 @@
+
+// Copyright Daniel James 2005-2006. 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)
+
+// Based on Peter Dimov's proposal
+// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2005/n1756.pdf
+// issue 6.18.
+
+#if !defined(BOOST_FUNCTIONAL_HASH_MAP_HPP)
+#define BOOST_FUNCTIONAL_HASH_MAP_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#warning "boost/functional/hash/map.hpp is deprecated, use boost/functional/hash.hpp instead."
+#include <boost/functional/hash.hpp>
+
+#endif
+
+
diff --git a/boost/boost/functional/hash/pair.hpp b/boost/boost/functional/hash/pair.hpp
new file mode 100644
index 00000000000..9c546714581
--- /dev/null
+++ b/boost/boost/functional/hash/pair.hpp
@@ -0,0 +1,20 @@
+
+// Copyright Daniel James 2005-2006. 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)
+
+// Based on Peter Dimov's proposal
+// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2005/n1756.pdf
+// issue 6.18.
+
+#if !defined(BOOST_FUNCTIONAL_HASH_PAIR_HPP)
+#define BOOST_FUNCTIONAL_HASH_PAIR_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#warning "boost/functional/hash/pair.hpp is deprecated, use boost/functional/hash.hpp instead."
+#include <boost/functional/hash.hpp>
+
+#endif
diff --git a/boost/boost/functional/hash/set.hpp b/boost/boost/functional/hash/set.hpp
new file mode 100644
index 00000000000..53923e1d27a
--- /dev/null
+++ b/boost/boost/functional/hash/set.hpp
@@ -0,0 +1,21 @@
+
+// Copyright Daniel James 2005-2006. 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)
+
+// Based on Peter Dimov's proposal
+// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2005/n1756.pdf
+// issue 6.18.
+
+#if !defined(BOOST_FUNCTIONAL_HASH_SET_HPP)
+#define BOOST_FUNCTIONAL_HASH_SET_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#warning "boost/functional/hash/set.hpp is deprecated, use boost/functional/hash.hpp instead."
+#include <boost/functional/hash.hpp>
+
+#endif
+
diff --git a/boost/boost/functional/hash/vector.hpp b/boost/boost/functional/hash/vector.hpp
new file mode 100644
index 00000000000..5a75f8cb436
--- /dev/null
+++ b/boost/boost/functional/hash/vector.hpp
@@ -0,0 +1,20 @@
+
+// Copyright Daniel James 2005-2006. 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)
+
+// Based on Peter Dimov's proposal
+// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2005/n1756.pdf
+// issue 6.18.
+
+#if !defined(BOOST_FUNCTIONAL_HASH_VECTOR_HPP)
+#define BOOST_FUNCTIONAL_HASH_VECTOR_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#warning "boost/functional/hash/vector.hpp is deprecated, use boost/functional/hash.hpp instead."
+#include <boost/functional/hash.hpp>
+
+#endif
diff --git a/boost/boost/functional/hash_fwd.hpp b/boost/boost/functional/hash_fwd.hpp
new file mode 100644
index 00000000000..dcbe659f45e
--- /dev/null
+++ b/boost/boost/functional/hash_fwd.hpp
@@ -0,0 +1,40 @@
+
+// Copyright Daniel James 2005-2006. 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)
+
+// Based on Peter Dimov's proposal
+// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2005/n1756.pdf
+// issue 6.18.
+
+#if !defined(BOOST_FUNCTIONAL_HASH_FWD_HPP)
+#define BOOST_FUNCTIONAL_HASH_FWD_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp>
+#include <cstddef>
+#include <boost/detail/workaround.hpp>
+
+namespace boost
+{
+ template <class T> struct hash;
+
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ template <class T> void hash_combine(std::size_t& seed, T& v);
+#else
+ template <class T> void hash_combine(std::size_t& seed, T const& v);
+#endif
+
+ template <class It> std::size_t hash_range(It, It);
+ template <class It> void hash_range(std::size_t&, It, It);
+
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))
+ template <class T> inline std::size_t hash_range(T*, T*);
+ template <class T> inline void hash_range(std::size_t&, T*, T*);
+#endif
+}
+
+#endif
diff --git a/boost/boost/generator_iterator.hpp b/boost/boost/generator_iterator.hpp
new file mode 100644
index 00000000000..ebf478b25b7
--- /dev/null
+++ b/boost/boost/generator_iterator.hpp
@@ -0,0 +1,80 @@
+// (C) Copyright Jens Maurer 2001.
+// 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)
+//
+// Revision History:
+
+// 15 Nov 2001 Jens Maurer
+// created.
+
+// See http://www.boost.org/libs/utility/iterator_adaptors.htm for documentation.
+
+#ifndef BOOST_ITERATOR_ADAPTOR_GENERATOR_ITERATOR_HPP
+#define BOOST_ITERATOR_ADAPTOR_GENERATOR_ITERATOR_HPP
+
+#include <boost/iterator/iterator_facade.hpp>
+#include <boost/ref.hpp>
+
+namespace boost {
+
+template<class Generator>
+class generator_iterator
+ : public iterator_facade<
+ generator_iterator<Generator>
+ , typename Generator::result_type
+ , single_pass_traversal_tag
+ , typename Generator::result_type const&
+ >
+{
+ typedef iterator_facade<
+ generator_iterator<Generator>
+ , typename Generator::result_type
+ , single_pass_traversal_tag
+ , typename Generator::result_type const&
+ > super_t;
+
+ public:
+ generator_iterator() {}
+ generator_iterator(Generator* g) : m_g(g), m_value((*m_g)()) {}
+
+ void increment()
+ {
+ m_value = (*m_g)();
+ }
+
+ const typename Generator::result_type&
+ dereference() const
+ {
+ return m_value;
+ }
+
+ bool equal(generator_iterator const& y) const
+ {
+ return this->m_g == y.m_g && this->m_value == y.m_value;
+ }
+
+ private:
+ Generator* m_g;
+ typename Generator::result_type m_value;
+};
+
+template<class Generator>
+struct generator_iterator_generator
+{
+ typedef generator_iterator<Generator> type;
+};
+
+template <class Generator>
+inline generator_iterator<Generator>
+make_generator_iterator(Generator & gen)
+{
+ typedef generator_iterator<Generator> result_t;
+ return result_t(&gen);
+}
+
+} // namespace boost
+
+
+#endif // BOOST_ITERATOR_ADAPTOR_GENERATOR_ITERATOR_HPP
+
diff --git a/boost/boost/get_pointer.hpp b/boost/boost/get_pointer.hpp
new file mode 100644
index 00000000000..17d11b8fef7
--- /dev/null
+++ b/boost/boost/get_pointer.hpp
@@ -0,0 +1,29 @@
+// Copyright Peter Dimov and David Abrahams 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)
+#ifndef GET_POINTER_DWA20021219_HPP
+# define GET_POINTER_DWA20021219_HPP
+
+# include <memory>
+
+namespace boost {
+
+// get_pointer(p) extracts a ->* capable pointer from p
+
+template<class T> T * get_pointer(T * p)
+{
+ return p;
+}
+
+// get_pointer(shared_ptr<T> const & p) has been moved to shared_ptr.hpp
+
+template<class T> T * get_pointer(std::auto_ptr<T> const& p)
+{
+ return p.get();
+}
+
+
+} // namespace boost
+
+#endif // GET_POINTER_DWA20021219_HPP
diff --git a/boost/boost/graph/adj_list_serialize.hpp b/boost/boost/graph/adj_list_serialize.hpp
new file mode 100644
index 00000000000..de6ce5c3670
--- /dev/null
+++ b/boost/boost/graph/adj_list_serialize.hpp
@@ -0,0 +1,114 @@
+//=======================================================================
+// Copyright 2005 Jeremy G. Siek
+// Authors: Jeremy G. Siek
+//
+// 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 ADJ_LIST_SERIALIZE_HPP
+#define ADJ_LIST_SERIALIZE_HPP
+
+#include <boost/graph/adjacency_list.hpp>
+#include <boost/pending/property_serialize.hpp>
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+#include <boost/serialization/collections_save_imp.hpp>
+#include <boost/serialization/collections_load_imp.hpp>
+#include <boost/serialization/split_free.hpp>
+
+namespace boost {
+
+namespace serialization {
+
+// Turn off tracking for adjacency_list. It's not polymorphic, and we
+// need to do this to enable saving of non-const adjacency lists.
+template<class OEL, class VL, class D, class VP, class EP, class GP, class EL>
+struct tracking_level<boost::adjacency_list<OEL,VL,D,VP,EP,GP,EL> > {
+ typedef mpl::integral_c_tag tag;
+ typedef mpl::int_<track_never> type;
+ BOOST_STATIC_CONSTANT(int, value = tracking_level::type::value);
+};
+
+template<class Archive, class OEL, class VL, class D,
+ class VP, class EP, class GP, class EL>
+inline void save(
+ Archive & ar,
+ const boost::adjacency_list<OEL,VL,D,VP,EP,GP,EL> &graph,
+ const unsigned int /* file_version */
+){
+ typedef adjacency_list<OEL,VL,D,VP,EP,GP,EL> Graph;
+ typedef typename graph_traits<Graph>::vertex_descriptor Vertex;
+
+ int V = num_vertices(graph);
+ int E = num_edges(graph);
+ ar << BOOST_SERIALIZATION_NVP(V);
+ ar << BOOST_SERIALIZATION_NVP(E);
+
+ // assign indices to vertices
+ std::map<Vertex,int> indices;
+ int num = 0;
+ typename graph_traits<Graph>::vertex_iterator vi;
+ for (vi = vertices(graph).first; vi != vertices(graph).second; ++vi) {
+ indices[*vi] = num++;
+ ar << serialization::make_nvp("vertex_property", get(vertex_all_t(), graph, *vi) );
+ }
+
+ // write edges
+ typename graph_traits<Graph>::edge_iterator ei;
+ for (ei = edges(graph).first; ei != edges(graph).second; ++ei){
+ ar << serialization::make_nvp("u" , indices[source(*ei,graph)]);
+ ar << serialization::make_nvp("v" , indices[target(*ei,graph)]);
+ ar << serialization::make_nvp("edge_property", get(edge_all_t(), graph, *ei) );
+ }
+}
+
+
+template<class Archive, class OEL, class VL, class D,
+ class VP, class EP, class GP, class EL>
+inline void load(
+ Archive & ar,
+ boost::adjacency_list<OEL,VL,D,VP,EP,GP,EL> &graph,
+ const unsigned int /* file_version */
+){
+ typedef adjacency_list<OEL,VL,D,VP,EP,GP,EL> Graph;
+ typedef typename graph_traits<Graph>::vertex_descriptor Vertex;
+ typedef typename graph_traits<Graph>::edge_descriptor Edge;
+
+ unsigned int V;
+ ar >> BOOST_SERIALIZATION_NVP(V);
+ unsigned int E;
+ ar >> BOOST_SERIALIZATION_NVP(E);
+
+ std::vector<Vertex> verts(V);
+ int i = 0;
+ while(V-- > 0){
+ Vertex v = add_vertex(graph);
+ verts[i++] = v;
+ ar >> serialization::make_nvp("vertex_property", get(vertex_all_t(), graph, v) );
+ }
+ while(E-- > 0){
+ int u; int v;
+ ar >> BOOST_SERIALIZATION_NVP(u);
+ ar >> BOOST_SERIALIZATION_NVP(v);
+ Edge e; bool inserted;
+ tie(e,inserted) = add_edge(verts[u], verts[v], graph);
+ ar >> serialization::make_nvp("edge_property", get(edge_all_t(), graph, e) );
+ }
+}
+
+template<class Archive, class OEL, class VL, class D, class VP, class EP, class GP, class EL>
+inline void serialize(
+ Archive & ar,
+ boost::adjacency_list<OEL,VL,D,VP,EP,GP,EL> &graph,
+ const unsigned int file_version
+){
+ boost::serialization::split_free(ar, graph, file_version);
+}
+
+}//serialization
+}//boost
+
+
+#endif // ADJ_LIST_SERIALIZE_HPP
diff --git a/boost/boost/graph/adjacency_iterator.hpp b/boost/boost/graph/adjacency_iterator.hpp
new file mode 100644
index 00000000000..d5006064433
--- /dev/null
+++ b/boost/boost/graph/adjacency_iterator.hpp
@@ -0,0 +1,102 @@
+//=======================================================================
+// Copyright 2002 Indiana University.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// 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_ADJACENCY_ITERATOR_HPP
+#define BOOST_ADJACENCY_ITERATOR_HPP
+
+#include <boost/iterator/iterator_adaptor.hpp>
+#include <boost/graph/graph_traits.hpp>
+
+namespace boost
+{
+
+ template <class Graph, class Vertex, class OutEdgeIter, class Difference>
+ struct adjacency_iterator
+ : iterator_adaptor<
+ adjacency_iterator<Graph,Vertex,OutEdgeIter,Difference>
+ , OutEdgeIter
+ , Vertex
+ , use_default
+ , Vertex
+ , Difference
+ >
+ {
+ typedef iterator_adaptor<
+ adjacency_iterator<Graph,Vertex,OutEdgeIter,Difference>
+ , OutEdgeIter
+ , Vertex
+ , use_default
+ , Vertex
+ , Difference
+ > super_t;
+
+ inline adjacency_iterator() {}
+ inline adjacency_iterator(OutEdgeIter const& i, const Graph* g) : super_t(i), m_g(g) { }
+
+ inline Vertex
+ dereference() const
+ { return target(*this->base(), *m_g); }
+
+ const Graph* m_g;
+ };
+
+ template <class Graph,
+ class Vertex = typename graph_traits<Graph>::vertex_descriptor,
+ class OutEdgeIter=typename graph_traits<Graph>::out_edge_iterator>
+ class adjacency_iterator_generator
+ {
+ typedef typename boost::detail::iterator_traits<OutEdgeIter>
+ ::difference_type difference_type;
+ public:
+ typedef adjacency_iterator<Graph,Vertex,OutEdgeIter,difference_type> type;
+ };
+
+ template <class Graph, class Vertex, class InEdgeIter, class Difference>
+ struct inv_adjacency_iterator
+ : iterator_adaptor<
+ inv_adjacency_iterator<Graph,Vertex,InEdgeIter,Difference>
+ , InEdgeIter
+ , Vertex
+ , use_default
+ , Vertex
+ , Difference
+ >
+ {
+ typedef iterator_adaptor<
+ inv_adjacency_iterator<Graph,Vertex,InEdgeIter,Difference>
+ , InEdgeIter
+ , Vertex
+ , use_default
+ , Vertex
+ , Difference
+ > super_t;
+
+ inline inv_adjacency_iterator() { }
+ inline inv_adjacency_iterator(InEdgeIter const& i, const Graph* g) : super_t(i), m_g(g) { }
+
+ inline Vertex
+ dereference() const
+ { return source(*this->base(), *m_g); }
+
+ const Graph* m_g;
+ };
+
+ template <class Graph,
+ class Vertex = typename graph_traits<Graph>::vertex_descriptor,
+ class InEdgeIter = typename graph_traits<Graph>::in_edge_iterator>
+ class inv_adjacency_iterator_generator {
+ typedef typename boost::detail::iterator_traits<InEdgeIter>
+ ::difference_type difference_type;
+ public:
+ typedef inv_adjacency_iterator<Graph, Vertex, InEdgeIter, difference_type> type;
+ };
+
+} // namespace boost
+
+#endif // BOOST_DETAIL_ADJACENCY_ITERATOR_HPP
diff --git a/boost/boost/graph/adjacency_list.hpp b/boost/boost/graph/adjacency_list.hpp
new file mode 100644
index 00000000000..197ef54f3ef
--- /dev/null
+++ b/boost/boost/graph/adjacency_list.hpp
@@ -0,0 +1,544 @@
+//=======================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// 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_GRAPH_ADJACENCY_LIST_HPP
+#define BOOST_GRAPH_ADJACENCY_LIST_HPP
+
+
+#include <boost/config.hpp>
+
+#include <vector>
+#include <list>
+#include <set>
+
+#if !defined BOOST_NO_HASH
+# ifdef BOOST_HASH_SET_HEADER
+# include BOOST_HASH_SET_HEADER
+# else
+# include <hash_set>
+# endif
+#endif
+
+#if !defined BOOST_NO_SLIST
+# ifdef BOOST_SLIST_HEADER
+# include BOOST_SLIST_HEADER
+# else
+# include <slist>
+# endif
+#endif
+
+#include <boost/graph/graph_traits.hpp>
+#include <boost/graph/graph_selectors.hpp>
+#include <boost/property_map.hpp>
+#include <boost/pending/ct_if.hpp>
+#include <boost/graph/detail/edge.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/graph/properties.hpp>
+
+namespace boost {
+
+ //===========================================================================
+ // Selectors for the VertexList and EdgeList template parameters of
+ // adjacency_list, and the container_gen traits class which is used
+ // to map the selectors to the container type used to implement the
+ // graph.
+ //
+ // The main container_gen traits class uses partial specialization,
+ // so we also include a workaround.
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#if !defined BOOST_NO_SLIST
+ struct slistS {};
+#endif
+
+ struct vecS { };
+ struct listS { };
+ struct setS { };
+ struct multisetS { };
+ struct mapS { };
+#if !defined BOOST_NO_HASH
+ struct hash_mapS { };
+ struct hash_setS { };
+#endif
+
+ template <class Selector, class ValueType>
+ struct container_gen { };
+
+ template <class ValueType>
+ struct container_gen<listS, ValueType> {
+ typedef std::list<ValueType> type;
+ };
+#if !defined BOOST_NO_SLIST
+ template <class ValueType>
+ struct container_gen<slistS, ValueType> {
+ typedef BOOST_STD_EXTENSION_NAMESPACE::slist<ValueType> type;
+ };
+#endif
+ template <class ValueType>
+ struct container_gen<vecS, ValueType> {
+ typedef std::vector<ValueType> type;
+ };
+
+ template <class ValueType>
+ struct container_gen<mapS, ValueType> {
+ typedef std::set<ValueType> type;
+ };
+
+ template <class ValueType>
+ struct container_gen<setS, ValueType> {
+ typedef std::set<ValueType> type;
+ };
+
+ template <class ValueType>
+ struct container_gen<multisetS, ValueType> {
+ typedef std::multiset<ValueType> type;
+ };
+
+#if !defined BOOST_NO_HASH
+ template <class ValueType>
+ struct container_gen<hash_mapS, ValueType> {
+ typedef BOOST_STD_EXTENSION_NAMESPACE::hash_set<ValueType> type;
+ };
+
+ template <class ValueType>
+ struct container_gen<hash_setS, ValueType> {
+ typedef BOOST_STD_EXTENSION_NAMESPACE::hash_set<ValueType> type;
+ };
+#endif
+
+#else // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#if !defined BOOST_NO_SLIST
+ struct slistS {
+ template <class T>
+ struct bind_ { typedef BOOST_STD_EXTENSION_NAMESPACE::slist<T> type; };
+ };
+#endif
+
+ struct vecS {
+ template <class T>
+ struct bind_ { typedef std::vector<T> type; };
+ };
+
+ struct listS {
+ template <class T>
+ struct bind_ { typedef std::list<T> type; };
+ };
+
+ struct setS {
+ template <class T>
+ struct bind_ { typedef std::set<T, std::less<T> > type; };
+ };
+
+ struct multisetS {
+ template <class T>
+ struct bind_ { typedef std::multiset<T, std::less<T> > type; };
+ };
+
+#if !defined BOOST_NO_HASH
+ struct hash_setS {
+ template <class T>
+ struct bind_ { typedef BOOST_STD_EXTENSION_NAMESPACE::hash_set<T, std::less<T> > type; };
+ };
+#endif
+
+ struct mapS {
+ template <class T>
+ struct bind_ { typedef std::set<T, std::less<T> > type; };
+ };
+
+#if !defined BOOST_NO_HASH
+ struct hash_mapS {
+ template <class T>
+ struct bind_ { typedef BOOST_STD_EXTENSION_NAMESPACE::hash_set<T, std::less<T> > type; };
+ };
+#endif
+
+ template <class Selector> struct container_selector {
+ typedef vecS type;
+ };
+
+#define BOOST_CONTAINER_SELECTOR(NAME) \
+ template <> struct container_selector<NAME> { \
+ typedef NAME type; \
+ }
+
+ BOOST_CONTAINER_SELECTOR(vecS);
+ BOOST_CONTAINER_SELECTOR(listS);
+ BOOST_CONTAINER_SELECTOR(mapS);
+ BOOST_CONTAINER_SELECTOR(setS);
+ BOOST_CONTAINER_SELECTOR(multisetS);
+#if !defined BOOST_NO_HASH
+ BOOST_CONTAINER_SELECTOR(hash_mapS);
+#endif
+#if !defined BOOST_NO_SLIST
+ BOOST_CONTAINER_SELECTOR(slistS);
+#endif
+
+ template <class Selector, class ValueType>
+ struct container_gen {
+ typedef typename container_selector<Selector>::type Select;
+ typedef typename Select:: template bind_<ValueType>::type type;
+ };
+
+#endif // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+ template <class StorageSelector>
+ struct parallel_edge_traits { };
+
+ template <>
+ struct parallel_edge_traits<vecS> {
+ typedef allow_parallel_edge_tag type; };
+
+ template <>
+ struct parallel_edge_traits<listS> {
+ typedef allow_parallel_edge_tag type; };
+
+#if !defined BOOST_NO_SLIST
+ template <>
+ struct parallel_edge_traits<slistS> {
+ typedef allow_parallel_edge_tag type; };
+#endif
+
+ template <>
+ struct parallel_edge_traits<setS> {
+ typedef disallow_parallel_edge_tag type; };
+
+ template <>
+ struct parallel_edge_traits<multisetS> {
+ typedef allow_parallel_edge_tag type; };
+
+#if !defined BOOST_NO_HASH
+ template <>
+ struct parallel_edge_traits<hash_setS> {
+ typedef disallow_parallel_edge_tag type;
+ };
+#endif
+
+ // mapS is obsolete, replaced with setS
+ template <>
+ struct parallel_edge_traits<mapS> {
+ typedef disallow_parallel_edge_tag type; };
+
+#if !defined BOOST_NO_HASH
+ template <>
+ struct parallel_edge_traits<hash_mapS> {
+ typedef disallow_parallel_edge_tag type;
+ };
+#endif
+
+ namespace detail {
+ template <class Directed> struct is_random_access {
+ enum { value = false};
+ typedef false_type type;
+ };
+ template <>
+ struct is_random_access<vecS> {
+ enum { value = true };
+ typedef true_type type;
+ };
+
+ } // namespace detail
+
+
+
+ //===========================================================================
+ // The adjacency_list_traits class, which provides a way to access
+ // some of the associated types of an adjacency_list type without
+ // having to first create the adjacency_list type. This is useful
+ // when trying to create interior vertex or edge properties who's
+ // value type is a vertex or edge descriptor.
+
+ template <class OutEdgeListS = vecS,
+ class VertexListS = vecS,
+ class DirectedS = directedS>
+ struct adjacency_list_traits
+ {
+ typedef typename detail::is_random_access<VertexListS>::type
+ is_rand_access;
+ typedef typename DirectedS::is_bidir_t is_bidir;
+ typedef typename DirectedS::is_directed_t is_directed;
+
+ typedef typename boost::ct_if_t<is_bidir,
+ bidirectional_tag,
+ typename boost::ct_if_t<is_directed,
+ directed_tag, undirected_tag
+ >::type
+ >::type directed_category;
+
+ typedef typename parallel_edge_traits<OutEdgeListS>::type
+ edge_parallel_category;
+
+ typedef void* vertex_ptr;
+ typedef typename boost::ct_if_t<is_rand_access,
+ std::size_t, vertex_ptr>::type vertex_descriptor;
+ typedef detail::edge_desc_impl<directed_category, vertex_descriptor>
+ edge_descriptor;
+ };
+
+} // namespace boost
+
+#include <boost/graph/detail/adjacency_list.hpp>
+
+namespace boost {
+
+ //===========================================================================
+ // The adjacency_list class.
+ //
+
+ template <class OutEdgeListS = vecS, // a Sequence or an AssociativeContainer
+ class VertexListS = vecS, // a Sequence or a RandomAccessContainer
+ class DirectedS = directedS,
+ class VertexProperty = no_property,
+ class EdgeProperty = no_property,
+ class GraphProperty = no_property,
+ class EdgeListS = listS>
+ class adjacency_list
+ : public detail::adj_list_gen<
+ adjacency_list<OutEdgeListS,VertexListS,DirectedS,
+ VertexProperty,EdgeProperty,GraphProperty,EdgeListS>,
+ VertexListS, OutEdgeListS, DirectedS,
+#if !defined(BOOST_GRAPH_NO_BUNDLED_PROPERTIES)
+ typename detail::retag_property_list<vertex_bundle_t,
+ VertexProperty>::type,
+ typename detail::retag_property_list<edge_bundle_t, EdgeProperty>::type,
+#else
+ VertexProperty, EdgeProperty,
+#endif
+ GraphProperty, EdgeListS>::type
+ {
+#if !defined(BOOST_GRAPH_NO_BUNDLED_PROPERTIES)
+ typedef typename detail::retag_property_list<vertex_bundle_t,
+ VertexProperty>::retagged
+ maybe_vertex_bundled;
+
+ typedef typename detail::retag_property_list<edge_bundle_t,
+ EdgeProperty>::retagged
+ maybe_edge_bundled;
+#endif
+
+ public:
+#if !defined(BOOST_GRAPH_NO_BUNDLED_PROPERTIES)
+ typedef typename detail::retag_property_list<vertex_bundle_t,
+ VertexProperty>::type
+ vertex_property_type;
+ typedef typename detail::retag_property_list<edge_bundle_t,
+ EdgeProperty>::type
+ edge_property_type;
+
+ // The types that are actually bundled
+ typedef typename ct_if<(is_same<maybe_vertex_bundled, no_property>::value),
+ no_vertex_bundle,
+ maybe_vertex_bundled>::type vertex_bundled;
+ typedef typename ct_if<(is_same<maybe_edge_bundled, no_property>::value),
+ no_edge_bundle,
+ maybe_edge_bundled>::type edge_bundled;
+#else
+ typedef VertexProperty vertex_property_type;
+ typedef EdgeProperty edge_property_type;
+ typedef no_vertex_bundle vertex_bundled;
+ typedef no_edge_bundle edge_bundled;
+#endif
+
+ private:
+ typedef adjacency_list self;
+ typedef typename detail::adj_list_gen<
+ self, VertexListS, OutEdgeListS, DirectedS,
+ vertex_property_type, edge_property_type, GraphProperty, EdgeListS
+ >::type Base;
+
+ public:
+ typedef typename Base::stored_vertex stored_vertex;
+ typedef typename Base::vertices_size_type vertices_size_type;
+ typedef typename Base::edges_size_type edges_size_type;
+ typedef typename Base::degree_size_type degree_size_type;
+ typedef typename Base::vertex_descriptor vertex_descriptor;
+ typedef typename Base::edge_descriptor edge_descriptor;
+ typedef OutEdgeListS out_edge_list_selector;
+ typedef VertexListS vertex_list_selector;
+ typedef DirectedS directed_selector;
+ typedef EdgeListS edge_list_selector;
+
+ typedef GraphProperty graph_property_type;
+
+ inline adjacency_list(const GraphProperty& p = GraphProperty())
+ : m_property(p) { }
+
+ inline adjacency_list(const adjacency_list& x)
+ : Base(x), m_property(x.m_property) { }
+
+ inline adjacency_list& operator=(const adjacency_list& x) {
+ // TBD: probably should give the strong guarantee
+ if (&x != this) {
+ Base::operator=(x);
+ m_property = x.m_property;
+ }
+ return *this;
+ }
+
+ // Required by Mutable Graph
+ inline adjacency_list(vertices_size_type num_vertices,
+ const GraphProperty& p = GraphProperty())
+ : Base(num_vertices), m_property(p) { }
+
+#if !defined(BOOST_MSVC) || BOOST_MSVC >= 1300
+ // Required by Iterator Constructible Graph
+ template <class EdgeIterator>
+ inline adjacency_list(EdgeIterator first, EdgeIterator last,
+ vertices_size_type n,
+ edges_size_type = 0,
+ const GraphProperty& p = GraphProperty())
+ : Base(n, first, last), m_property(p) { }
+
+ template <class EdgeIterator, class EdgePropertyIterator>
+ inline adjacency_list(EdgeIterator first, EdgeIterator last,
+ EdgePropertyIterator ep_iter,
+ vertices_size_type n,
+ edges_size_type = 0,
+ const GraphProperty& p = GraphProperty())
+ : Base(n, first, last, ep_iter), m_property(p) { }
+#endif
+
+ void swap(adjacency_list& x) {
+ // Is there a more efficient way to do this?
+ adjacency_list tmp(x);
+ x = *this;
+ *this = tmp;
+ }
+
+#ifndef BOOST_GRAPH_NO_BUNDLED_PROPERTIES
+ // Directly access a vertex or edge bundle
+ vertex_bundled& operator[](vertex_descriptor v)
+ { return get(vertex_bundle, *this)[v]; }
+
+ const vertex_bundled& operator[](vertex_descriptor v) const
+ { return get(vertex_bundle, *this)[v]; }
+
+ edge_bundled& operator[](edge_descriptor e)
+ { return get(edge_bundle, *this)[e]; }
+
+ const edge_bundled& operator[](edge_descriptor e) const
+ { return get(edge_bundle, *this)[e]; }
+#endif
+
+ // protected: (would be protected if friends were more portable)
+ GraphProperty m_property;
+ };
+
+ template <class OEL, class VL, class DirS, class VP,class EP, class GP,
+ class EL, class Tag, class Value>
+ inline void
+ set_property(adjacency_list<OEL,VL,DirS,VP,EP,GP,EL>& g, Tag,
+ const Value& value) {
+ get_property_value(g.m_property, Tag()) = value;;
+ }
+
+ template <class OEL, class VL, class DirS, class VP, class EP, class GP,
+ class Tag, class EL>
+ inline
+ typename graph_property<adjacency_list<OEL,VL,DirS,VP,EP,GP,EL>, Tag>::type&
+ get_property(adjacency_list<OEL,VL,DirS,VP,EP,GP,EL>& g, Tag) {
+ return get_property_value(g.m_property, Tag());
+ }
+
+ template <class OEL, class VL, class DirS, class VP, class EP, class GP,
+ class Tag, class EL>
+ inline
+ const
+ typename graph_property<adjacency_list<OEL,VL,DirS,VP,EP,GP,EL>, Tag>::type&
+ get_property(const adjacency_list<OEL,VL,DirS,VP,EP,GP,EL>& g, Tag) {
+ return get_property_value(g.m_property, Tag());
+ }
+
+ // dwa 09/25/00 - needed to be more explicit so reverse_graph would work.
+ template <class Directed, class Vertex,
+ class OutEdgeListS,
+ class VertexListS,
+ class DirectedS,
+ class VertexProperty,
+ class EdgeProperty,
+ class GraphProperty, class EdgeListS>
+ inline Vertex
+ source(const detail::edge_base<Directed,Vertex>& e,
+ const adjacency_list<OutEdgeListS, VertexListS, DirectedS,
+ VertexProperty, EdgeProperty, GraphProperty, EdgeListS>&)
+ {
+ return e.m_source;
+ }
+
+ template <class Directed, class Vertex, class OutEdgeListS,
+ class VertexListS, class DirectedS, class VertexProperty,
+ class EdgeProperty, class GraphProperty, class EdgeListS>
+ inline Vertex
+ target(const detail::edge_base<Directed,Vertex>& e,
+ const adjacency_list<OutEdgeListS, VertexListS, DirectedS,
+ VertexProperty, EdgeProperty, GraphProperty, EdgeListS>&)
+ {
+ return e.m_target;
+ }
+
+ // Support for bundled properties
+#ifndef BOOST_GRAPH_NO_BUNDLED_PROPERTIES
+ template<typename OutEdgeListS, typename VertexListS, typename DirectedS, typename VertexProperty,
+ typename EdgeProperty, typename GraphProperty, typename EdgeListS, typename T, typename Bundle>
+ inline
+ typename property_map<adjacency_list<OutEdgeListS, VertexListS, DirectedS, VertexProperty, EdgeProperty,
+ GraphProperty, EdgeListS>, T Bundle::*>::type
+ get(T Bundle::* p, adjacency_list<OutEdgeListS, VertexListS, DirectedS, VertexProperty, EdgeProperty,
+ GraphProperty, EdgeListS>& g)
+ {
+ typedef typename property_map<adjacency_list<OutEdgeListS, VertexListS, DirectedS, VertexProperty,
+ EdgeProperty, GraphProperty, EdgeListS>, T Bundle::*>::type
+ result_type;
+ return result_type(&g, p);
+ }
+
+ template<typename OutEdgeListS, typename VertexListS, typename DirectedS, typename VertexProperty,
+ typename EdgeProperty, typename GraphProperty, typename EdgeListS, typename T, typename Bundle>
+ inline
+ typename property_map<adjacency_list<OutEdgeListS, VertexListS, DirectedS, VertexProperty, EdgeProperty,
+ GraphProperty, EdgeListS>, T Bundle::*>::const_type
+ get(T Bundle::* p, adjacency_list<OutEdgeListS, VertexListS, DirectedS, VertexProperty, EdgeProperty,
+ GraphProperty, EdgeListS> const & g)
+ {
+ typedef typename property_map<adjacency_list<OutEdgeListS, VertexListS, DirectedS, VertexProperty,
+ EdgeProperty, GraphProperty, EdgeListS>, T Bundle::*>::const_type
+ result_type;
+ return result_type(&g, p);
+ }
+
+ template<typename OutEdgeListS, typename VertexListS, typename DirectedS, typename VertexProperty,
+ typename EdgeProperty, typename GraphProperty, typename EdgeListS, typename T, typename Bundle,
+ typename Key>
+ inline T
+ get(T Bundle::* p, adjacency_list<OutEdgeListS, VertexListS, DirectedS, VertexProperty, EdgeProperty,
+ GraphProperty, EdgeListS> const & g, const Key& key)
+ {
+ return get(get(p, g), key);
+ }
+
+ template<typename OutEdgeListS, typename VertexListS, typename DirectedS, typename VertexProperty,
+ typename EdgeProperty, typename GraphProperty, typename EdgeListS, typename T, typename Bundle,
+ typename Key>
+ inline void
+ put(T Bundle::* p, adjacency_list<OutEdgeListS, VertexListS, DirectedS, VertexProperty, EdgeProperty,
+ GraphProperty, EdgeListS>& g, const Key& key, const T& value)
+ {
+ put(get(p, g), key, value);
+ }
+
+#endif
+
+
+} // namespace boost
+
+
+#endif // BOOST_GRAPH_ADJACENCY_LIST_HPP
diff --git a/boost/boost/graph/adjacency_list_io.hpp b/boost/boost/graph/adjacency_list_io.hpp
new file mode 100644
index 00000000000..fb762fe0162
--- /dev/null
+++ b/boost/boost/graph/adjacency_list_io.hpp
@@ -0,0 +1,408 @@
+//=======================================================================
+// Copyright 2001 Universite Joseph Fourier, Grenoble.
+// Author: François Faure
+//
+// 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_GRAPH_ADJACENCY_LIST_IO_HPP
+#define BOOST_GRAPH_ADJACENCY_LIST_IO_HPP
+
+#include <iostream>
+#include <vector>
+#include <boost/graph/adjacency_list.hpp>
+#include <cctype>
+
+// Method read to parse an adjacency list from an input stream. Examples:
+// cin >> read( G );
+// cin >> read( G, NodePropertySubset(), EdgepropertySubset() );
+//
+// Method write to print an adjacency list to an output stream. Examples:
+// cout << write( G );
+// cout << write( G, NodePropertySubset(), EdgepropertySubset() );
+
+namespace boost {
+
+/* outline
+ - basic property input
+ - get property subset
+ - graph parser
+ - property printer
+ - graph printer
+ - user methods
+*/
+
+//===========================================================================
+// basic property input
+
+template<class Tag, class Value, class Next>
+std::istream& operator >> ( std::istream& in, property<Tag,Value,Next>& p )
+{
+ in >> p.m_value >> *(static_cast<Next*>(&p)); // houpla !!
+ return in;
+}
+
+template<class Tag, class Value>
+std::istream& operator >> ( std::istream& in, property<Tag,Value,no_property>& p )
+{
+ in >> p.m_value;
+ return in;
+}
+
+inline std::istream& operator >> ( std::istream& in, no_property& )
+{
+ return in;
+}
+
+// basic property input
+//===========================================================================
+// get property subsets
+
+// get a single property tagged Stag
+template<class Tag, class Value, class Next, class V, class Stag>
+void get
+( property<Tag,Value,Next>& p, const V& v, Stag s )
+{
+ get( *(static_cast<Next*>(&p)),v,s );
+}
+
+template<class Value, class Next, class V, class Stag>
+void get
+( property<Stag,Value,Next>& p, const V& v, Stag )
+{
+ p.m_value = v;
+}
+
+// get a subset of properties tagged Stag
+template<class Tag, class Value, class Next,
+ class Stag, class Svalue, class Snext>
+void getSubset
+( property<Tag,Value,Next>& p, const property<Stag,Svalue,Snext>& s )
+{
+ get( p, s.m_value, Stag() );
+ getSubset( p, Snext(s) );
+}
+
+template<class Tag, class Value, class Next,
+ class Stag, class Svalue>
+void getSubset
+( property<Tag,Value,Next>& p, const property<Stag,Svalue,no_property>& s)
+{
+ get( p, s.m_value, Stag() );
+}
+
+inline void getSubset
+( no_property& p, const no_property& s )
+{
+}
+
+#if !defined(BOOST_GRAPH_NO_BUNDLED_PROPERTIES)
+template<typename T, typename U>
+void getSubset(T& p, const U& s)
+{
+ p = s;
+}
+
+template<typename T>
+void getSubset(T&, const no_property&)
+{
+}
+
+
+#endif
+
+// get property subset
+//===========================================================================
+// graph parser
+typedef enum{ PARSE_NUM_NODES, PARSE_VERTEX, PARSE_EDGE } GraphParserState;
+
+template<class Graph_t, class VertexProperty, class EdgeProperty, class VertexPropertySubset,
+class EdgePropertySubset>
+struct GraphParser
+{
+
+ typedef Graph_t Graph;
+
+ GraphParser( Graph* g ): graph(g)
+ {}
+
+ GraphParser& operator () ( std::istream& in )
+ {
+ typedef typename graph_traits<Graph>::vertex_descriptor Vertex;
+ std::vector<Vertex> nodes;
+
+ GraphParserState state = PARSE_VERTEX;
+
+ unsigned int numLine = 1;
+ char c;
+ while ( in.get(c) )
+ {
+ if( c== '#' ) skip(in);
+ else if( c== 'n' ) state = PARSE_NUM_NODES;
+ else if( c== 'v' ) state = PARSE_VERTEX;
+ else if( c== 'e' ) state = PARSE_EDGE;
+ else if( c== '\n' ) numLine++;
+ else if( !std::isspace(c) ){
+ in.putback(c);
+ if( state == PARSE_VERTEX ){
+ VertexPropertySubset readProp;
+ if( in >> readProp )
+ {
+ VertexProperty vp;
+ getSubset( vp, readProp );
+ nodes.push_back( add_vertex(vp, *graph) );
+ }
+ else
+ std::cerr<<"read vertex, parse error at line"<<numLine<<std::endl;
+ }
+ else if( state == PARSE_EDGE ) {
+ int source, target;
+ EdgePropertySubset readProp;
+ in >> source >> target;
+ if( in >> readProp )
+ {
+ EdgeProperty ep;
+ getSubset( ep, readProp );
+ add_edge(nodes[source], nodes[target], ep, *graph);
+ }
+ else
+ std::cerr<<"read edge, parse error at line"<<numLine<<std::endl;
+ }
+ else { // state == PARSE_NUM_NODES
+ int n;
+ if( in >> n ){
+ for( int i=0; i<n; ++i )
+ nodes.push_back( add_vertex( *graph ));
+ }
+ else
+ std::cerr<<"read num_nodes, parse error at line "<< numLine << std::endl;
+ }
+ }
+ }
+ return (*this);
+ }
+
+
+protected:
+
+ Graph* graph;
+
+ void skip( std::istream& in )
+ {
+ char c = 0;
+ while( c!='\n' && !in.eof() )
+ in.get(c);
+ in.putback(c);
+ }
+};
+
+// parser
+//=======================================================================
+// property printer
+
+#if defined(BOOST_GRAPH_NO_BUNDLED_PROPERTIES)
+template<class Graph, class Property>
+struct PropertyPrinter
+{
+ typedef typename Property::value_type Value;
+ typedef typename Property::tag_type Tag;
+ typedef typename Property::next_type Next;
+
+ PropertyPrinter( const Graph& g ):graph(&g){}
+
+ template<class Iterator>
+ PropertyPrinter& operator () ( std::ostream& out, Iterator it )
+ {
+ typename property_map<Graph,Tag>::type ps = get(Tag(), *graph);
+ out << ps[ *it ] <<" ";
+ PropertyPrinter<Graph,Next> print(*graph);
+ print(out, it);
+ return (*this);
+ }
+private:
+ const Graph* graph;
+};
+#else
+template<class Graph, typename Property>
+struct PropertyPrinter
+{
+ PropertyPrinter( const Graph& g ):graph(&g){}
+
+ template<class Iterator>
+ PropertyPrinter& operator () ( std::ostream& out, Iterator it )
+ {
+ out << (*graph)[ *it ] <<" ";
+ return (*this);
+ }
+private:
+ const Graph* graph;
+};
+
+template<class Graph, typename Tag, typename Value, typename Next>
+struct PropertyPrinter<Graph, property<Tag, Value, Next> >
+{
+ PropertyPrinter( const Graph& g ):graph(&g){}
+
+ template<class Iterator>
+ PropertyPrinter& operator () ( std::ostream& out, Iterator it )
+ {
+ typename property_map<Graph,Tag>::type ps = get(Tag(), *graph);
+ out << ps[ *it ] <<" ";
+ PropertyPrinter<Graph,Next> print(*graph);
+ print(out, it);
+ return (*this);
+ }
+private:
+ const Graph* graph;
+};
+#endif
+
+template<class Graph>
+struct PropertyPrinter<Graph, no_property>
+{
+ PropertyPrinter( const Graph& ){}
+
+ template<class Iterator>
+ PropertyPrinter& operator () ( std::ostream&, Iterator it ){ return *this; }
+};
+
+// property printer
+//=========================================================================
+// graph printer
+
+template<class Graph_t, class EdgeProperty>
+struct EdgePrinter
+{
+
+ typedef Graph_t Graph;
+ typedef typename graph_traits<Graph>::vertex_descriptor Vertex;
+
+ EdgePrinter( const Graph& g )
+ : graph(g)
+ {}
+
+ const EdgePrinter& operator () ( std::ostream& out ) const
+ {
+ // assign indices to vertices
+ std::map<Vertex,int> indices;
+ int num = 0;
+ typename graph_traits<Graph>::vertex_iterator vi;
+ for (vi = vertices(graph).first; vi != vertices(graph).second; ++vi){
+ indices[*vi] = num++;
+ }
+
+ // write edges
+ PropertyPrinter<Graph, EdgeProperty> print_Edge(graph);
+ out << "e" << std::endl;
+ typename graph_traits<Graph>::edge_iterator ei;
+ for (ei = edges(graph).first; ei != edges(graph).second; ++ei){
+ out << indices[source(*ei,graph)] << " " << indices[target(*ei,graph)] << " ";
+ print_Edge(out,ei);
+ out << std::endl;
+ }
+ out << std::endl;
+ return (*this);
+ }
+
+protected:
+
+ const Graph& graph;
+
+};
+
+template<class Graph, class V, class E>
+struct GraphPrinter: public EdgePrinter<Graph,E>
+{
+ GraphPrinter( const Graph& g )
+ : EdgePrinter<Graph,E>(g)
+ {}
+
+ const GraphPrinter& operator () ( std::ostream& out ) const
+ {
+ PropertyPrinter<Graph, V> printNode(this->graph);
+ out << "v"<<std::endl;
+ typename graph_traits<Graph>::vertex_iterator vi;
+ for (vi = vertices(this->graph).first; vi != vertices(this->graph).second; ++vi){
+ printNode(out,vi);
+ out << std::endl;
+ }
+
+ EdgePrinter<Graph,E>::operator ()( out );
+ return (*this);
+ }
+};
+
+template<class Graph, class E>
+struct GraphPrinter<Graph,no_property,E>
+ : public EdgePrinter<Graph,E>
+{
+ GraphPrinter( const Graph& g )
+ : EdgePrinter<Graph,E>(g)
+ {}
+
+ const GraphPrinter& operator () ( std::ostream& out ) const
+ {
+ out << "n "<< num_vertices(this->graph) << std::endl;
+ EdgePrinter<Graph,E>::operator ()( out );
+ return (*this);
+ }
+};
+
+// graph printer
+//=========================================================================
+// user methods
+
+/// input stream for reading a graph
+template<class Graph, class VP, class EP, class VPS, class EPS>
+std::istream& operator >> ( std::istream& in, GraphParser<Graph,VP,EP,VPS,EPS> gp )
+{
+ gp(in);
+ return in;
+}
+
+/// graph parser for given subsets of internal vertex and edge properties
+template<class EL, class VL, class D, class VP, class EP, class GP, class VPS, class EPS>
+GraphParser<adjacency_list<EL,VL,D,VP,EP,GP>,VP,EP,VPS,EPS>
+read( adjacency_list<EL,VL,D,VP,EP,GP>& g, VPS vps, EPS eps )
+{
+ return GraphParser<adjacency_list<EL,VL,D,VP,EP,GP>,VP,EP,VPS,EPS>(&g);
+}
+
+/// graph parser for all internal vertex and edge properties
+template<class EL, class VL, class D, class VP, class EP, class GP>
+GraphParser<adjacency_list<EL,VL,D,VP,EP,GP>,VP,EP,VP,EP>
+read( adjacency_list<EL,VL,D,VP,EP,GP>& g )
+{
+ return GraphParser<adjacency_list<EL,VL,D,VP,EP,GP>,VP,EP,VP,EP>(&g);
+}
+
+
+/// output stream for writing a graph
+template<class Graph, class VP, class EP>
+std::ostream& operator << ( std::ostream& out, const GraphPrinter<Graph,VP,EP>& gp )
+{
+ gp(out);
+ return out;
+}
+
+/// write the graph with given property subsets
+template<class EL, class VL, class D, class VP, class EP, class GP, class VPS, class EPS>
+GraphPrinter<adjacency_list<EL,VL,D,VP,EP,GP>,VPS,EPS>
+write( const adjacency_list<EL,VL,D,VP,EP,GP>& g, VPS, EPS )
+{
+ return GraphPrinter<adjacency_list<EL,VL,D,VP,EP,GP>,VPS,EPS>(g);
+}
+
+/// write the graph with all internal vertex and edge properties
+template<class EL, class VL, class D, class VP, class EP, class GP>
+GraphPrinter<adjacency_list<EL,VL,D,VP,EP,GP>,VP,EP>
+write( const adjacency_list<EL,VL,D,VP,EP,GP>& g )
+{
+ return GraphPrinter<adjacency_list<EL,VL,D,VP,EP,GP>,VP,EP>(g);
+}
+
+// user methods
+//=========================================================================
+}// boost
+#endif
diff --git a/boost/boost/graph/adjacency_matrix.hpp b/boost/boost/graph/adjacency_matrix.hpp
new file mode 100644
index 00000000000..5be3829fdb2
--- /dev/null
+++ b/boost/boost/graph/adjacency_matrix.hpp
@@ -0,0 +1,1278 @@
+//=======================================================================
+// Copyright 2001 University of Notre Dame.
+// Copyright 2006 Trustees of Indiana University
+// Authors: Jeremy G. Siek and Douglas Gregor <dgregor@cs.indiana.edu>
+//
+// 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_ADJACENCY_MATRIX_HPP
+#define BOOST_ADJACENCY_MATRIX_HPP
+
+#include <boost/config.hpp>
+#include <vector>
+#include <memory>
+#include <cassert>
+#include <boost/limits.hpp>
+#include <boost/iterator.hpp>
+#include <boost/graph/graph_traits.hpp>
+#include <boost/graph/graph_selectors.hpp>
+#include <boost/pending/ct_if.hpp>
+#include <boost/graph/adjacency_iterator.hpp>
+#include <boost/graph/detail/edge.hpp>
+#include <boost/iterator/iterator_adaptor.hpp>
+#include <boost/iterator/filter_iterator.hpp>
+#include <boost/pending/integer_range.hpp>
+#include <boost/graph/properties.hpp>
+#include <boost/tuple/tuple.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/ice.hpp>
+
+namespace boost {
+
+ namespace detail {
+
+ template <class Directed, class Vertex>
+ class matrix_edge_desc_impl : public edge_desc_impl<Directed,Vertex>
+ {
+ typedef edge_desc_impl<Directed,Vertex> Base;
+ public:
+ matrix_edge_desc_impl() { }
+ matrix_edge_desc_impl(bool exists, Vertex s, Vertex d,
+ const void* ep = 0)
+ : Base(s, d, ep), m_exists(exists) { }
+ bool exists() const { return m_exists; }
+ private:
+ bool m_exists;
+ };
+
+ struct does_edge_exist {
+ template <class Edge>
+ bool operator()(const Edge& e) const { return e.exists(); }
+ };
+
+ template <typename EdgeProperty>
+ bool get_edge_exists(const std::pair<bool, EdgeProperty>& stored_edge, int) {
+ return stored_edge.first;
+ }
+ template <typename EdgeProperty>
+ void set_edge_exists(
+ std::pair<bool, EdgeProperty>& stored_edge,
+ bool flag,
+ int
+ ) {
+ stored_edge.first = flag;
+ }
+
+ template <typename EdgeProxy>
+ bool get_edge_exists(const EdgeProxy& edge_proxy, ...) {
+ return edge_proxy;
+ }
+ template <typename EdgeProxy>
+ EdgeProxy& set_edge_exists(EdgeProxy& edge_proxy, bool flag, ...) {
+ edge_proxy = flag;
+ return edge_proxy; // just to avoid never used warning
+ }
+
+
+
+ template <typename EdgeProperty>
+ const EdgeProperty&
+ get_property(const std::pair<bool, EdgeProperty>& stored_edge) {
+ return stored_edge.second;
+ }
+ template <typename EdgeProperty>
+ EdgeProperty&
+ get_property(std::pair<bool, EdgeProperty>& stored_edge) {
+ return stored_edge.second;
+ }
+
+ template <typename StoredEdgeProperty, typename EdgeProperty>
+ inline void
+ set_property(std::pair<bool, StoredEdgeProperty>& stored_edge,
+ const EdgeProperty& ep, int) {
+ stored_edge.second = ep;
+ }
+
+ inline const no_property& get_property(const char&) {
+ static no_property s_prop;
+ return s_prop;
+ }
+ inline no_property& get_property(char&) {
+ static no_property s_prop;
+ return s_prop;
+ }
+ template <typename EdgeProxy, typename EdgeProperty>
+ inline void
+ set_property(EdgeProxy, const EdgeProperty&, ...) {}
+
+ //=======================================================================
+ // Directed Out Edge Iterator
+
+ template <
+ typename VertexDescriptor, typename MatrixIter
+ , typename VerticesSizeType, typename EdgeDescriptor
+ >
+ struct dir_adj_matrix_out_edge_iter
+ : iterator_adaptor<
+ dir_adj_matrix_out_edge_iter<VertexDescriptor, MatrixIter, VerticesSizeType, EdgeDescriptor>
+ , MatrixIter
+ , EdgeDescriptor
+ , use_default
+ , EdgeDescriptor
+ , std::ptrdiff_t
+ >
+ {
+ typedef iterator_adaptor<
+ dir_adj_matrix_out_edge_iter<VertexDescriptor, MatrixIter, VerticesSizeType, EdgeDescriptor>
+ , MatrixIter
+ , EdgeDescriptor
+ , use_default
+ , EdgeDescriptor
+ , std::ptrdiff_t
+ > super_t;
+
+ dir_adj_matrix_out_edge_iter() { }
+
+ dir_adj_matrix_out_edge_iter(
+ const MatrixIter& i
+ , const VertexDescriptor& src
+ , const VerticesSizeType& n
+ )
+ : super_t(i), m_src(src), m_targ(0), m_n(n)
+ { }
+
+ void increment() {
+ ++this->base_reference();
+ ++m_targ;
+ }
+
+ inline EdgeDescriptor
+ dereference() const
+ {
+ return EdgeDescriptor(get_edge_exists(*this->base(), 0), m_src, m_targ,
+ &get_property(*this->base()));
+ }
+ VertexDescriptor m_src, m_targ;
+ VerticesSizeType m_n;
+ };
+
+ //=======================================================================
+ // Directed In Edge Iterator
+
+ template <
+ typename VertexDescriptor, typename MatrixIter
+ , typename VerticesSizeType, typename EdgeDescriptor
+ >
+ struct dir_adj_matrix_in_edge_iter
+ : iterator_adaptor<
+ dir_adj_matrix_in_edge_iter<VertexDescriptor, MatrixIter, VerticesSizeType, EdgeDescriptor>
+ , MatrixIter
+ , EdgeDescriptor
+ , use_default
+ , EdgeDescriptor
+ , std::ptrdiff_t
+ >
+ {
+ typedef iterator_adaptor<
+ dir_adj_matrix_in_edge_iter<VertexDescriptor, MatrixIter, VerticesSizeType, EdgeDescriptor>
+ , MatrixIter
+ , EdgeDescriptor
+ , use_default
+ , EdgeDescriptor
+ , std::ptrdiff_t
+ > super_t;
+
+ dir_adj_matrix_in_edge_iter() { }
+
+ dir_adj_matrix_in_edge_iter(
+ const MatrixIter& i
+ , const MatrixIter& last
+ , const VertexDescriptor& tgt
+ , const VerticesSizeType& n
+ )
+ : super_t(i), m_last(last), m_src(0), m_targ(tgt), m_n(n)
+ { }
+
+ void increment() {
+ if (VerticesSizeType(m_last - this->base_reference()) >= m_n) {
+ this->base_reference() += m_n;
+ ++m_src;
+ } else {
+ this->base_reference() = m_last;
+ }
+ }
+
+ inline EdgeDescriptor
+ dereference() const
+ {
+ return EdgeDescriptor(get_edge_exists(*this->base(), 0), m_src, m_targ,
+ &get_property(*this->base()));
+ }
+ MatrixIter m_last;
+ VertexDescriptor m_src, m_targ;
+ VerticesSizeType m_n;
+ };
+
+ //=======================================================================
+ // Undirected Out Edge Iterator
+
+ template <
+ typename VertexDescriptor, typename MatrixIter
+ , typename VerticesSizeType, typename EdgeDescriptor
+ >
+ struct undir_adj_matrix_out_edge_iter
+ : iterator_adaptor<
+ undir_adj_matrix_out_edge_iter<VertexDescriptor, MatrixIter, VerticesSizeType, EdgeDescriptor>
+ , MatrixIter
+ , EdgeDescriptor
+ , use_default
+ , EdgeDescriptor
+ , std::ptrdiff_t
+ >
+ {
+ typedef iterator_adaptor<
+ undir_adj_matrix_out_edge_iter<VertexDescriptor, MatrixIter, VerticesSizeType, EdgeDescriptor>
+ , MatrixIter
+ , EdgeDescriptor
+ , use_default
+ , EdgeDescriptor
+ , std::ptrdiff_t
+ > super_t;
+
+ undir_adj_matrix_out_edge_iter() { }
+
+ undir_adj_matrix_out_edge_iter(
+ const MatrixIter& i
+ , const VertexDescriptor& src
+ , const VerticesSizeType& n
+ )
+ : super_t(i), m_src(src), m_inc(src), m_targ(0), m_n(n)
+ {}
+
+ void increment()
+ {
+ if (m_targ < m_src) // first half
+ {
+ ++this->base_reference();
+ }
+ else if (m_targ < m_n - 1)
+ { // second half
+ ++m_inc;
+ this->base_reference() += m_inc;
+ }
+ else
+ { // past-the-end
+ this->base_reference() += m_n - m_src;
+ }
+ ++m_targ;
+ }
+
+ inline EdgeDescriptor
+ dereference() const
+ {
+ return EdgeDescriptor(
+ get_edge_exists(*this->base(), 0), m_src, m_targ
+ , &get_property(*this->base())
+ );
+ }
+
+ VertexDescriptor m_src, m_inc, m_targ;
+ VerticesSizeType m_n;
+ };
+
+ //=======================================================================
+ // Undirected In Edge Iterator
+
+ template <
+ typename VertexDescriptor, typename MatrixIter
+ , typename VerticesSizeType, typename EdgeDescriptor
+ >
+ struct undir_adj_matrix_in_edge_iter
+ : iterator_adaptor<
+ undir_adj_matrix_in_edge_iter<VertexDescriptor, MatrixIter, VerticesSizeType, EdgeDescriptor>
+ , MatrixIter
+ , EdgeDescriptor
+ , use_default
+ , EdgeDescriptor
+ , std::ptrdiff_t
+ >
+ {
+ typedef iterator_adaptor<
+ undir_adj_matrix_in_edge_iter<VertexDescriptor, MatrixIter, VerticesSizeType, EdgeDescriptor>
+ , MatrixIter
+ , EdgeDescriptor
+ , use_default
+ , EdgeDescriptor
+ , std::ptrdiff_t
+ > super_t;
+
+ undir_adj_matrix_in_edge_iter() { }
+
+ undir_adj_matrix_in_edge_iter(
+ const MatrixIter& i
+ , const VertexDescriptor& src
+ , const VerticesSizeType& n
+ )
+ : super_t(i), m_src(src), m_inc(src), m_targ(0), m_n(n)
+ {}
+
+ void increment()
+ {
+ if (m_targ < m_src) // first half
+ {
+ ++this->base_reference();
+ }
+ else if (m_targ < m_n - 1)
+ { // second half
+ ++m_inc;
+ this->base_reference() += m_inc;
+ }
+ else
+ { // past-the-end
+ this->base_reference() += m_n - m_src;
+ }
+ ++m_targ;
+ }
+
+ inline EdgeDescriptor
+ dereference() const
+ {
+ return EdgeDescriptor(
+ get_edge_exists(*this->base(), 0), m_targ, m_src
+ , &get_property(*this->base())
+ );
+ }
+
+ VertexDescriptor m_src, m_inc, m_targ;
+ VerticesSizeType m_n;
+ };
+
+ //=======================================================================
+ // Edge Iterator
+
+ template <typename Directed, typename MatrixIter,
+ typename VerticesSizeType, typename EdgeDescriptor>
+ struct adj_matrix_edge_iter
+ : iterator_adaptor<
+ adj_matrix_edge_iter<Directed, MatrixIter, VerticesSizeType, EdgeDescriptor>
+ , MatrixIter
+ , EdgeDescriptor
+ , use_default
+ , EdgeDescriptor
+ , std::ptrdiff_t
+ >
+ {
+ typedef iterator_adaptor<
+ adj_matrix_edge_iter<Directed, MatrixIter, VerticesSizeType, EdgeDescriptor>
+ , MatrixIter
+ , EdgeDescriptor
+ , use_default
+ , EdgeDescriptor
+ , std::ptrdiff_t
+ > super_t;
+
+ adj_matrix_edge_iter() { }
+
+ adj_matrix_edge_iter(const MatrixIter& i, const MatrixIter& start, const VerticesSizeType& n)
+ : super_t(i), m_start(start), m_src(0), m_targ(0), m_n(n) { }
+
+ void increment()
+ {
+ increment_dispatch(this->base_reference(), Directed());
+ }
+
+ void increment_dispatch(MatrixIter& i, directedS)
+ {
+ ++i;
+ if (m_targ == m_n - 1)
+ {
+ m_targ = 0;
+ ++m_src;
+ }
+ else
+ {
+ ++m_targ;
+ }
+ }
+
+ void increment_dispatch(MatrixIter& i, undirectedS)
+ {
+ ++i;
+ if (m_targ == m_src)
+ {
+ m_targ = 0;
+ ++m_src;
+ }
+ else
+ {
+ ++m_targ;
+ }
+ }
+
+ inline EdgeDescriptor
+ dereference() const
+ {
+ return EdgeDescriptor(
+ get_edge_exists(
+ *this->base(), 0), m_src, m_targ, &get_property(*this->base())
+ );
+ }
+
+ MatrixIter m_start;
+ VerticesSizeType m_src, m_targ, m_n;
+ };
+
+ } // namespace detail
+
+ //=========================================================================
+ // Adjacency Matrix Traits
+ template <typename Directed = directedS>
+ class adjacency_matrix_traits {
+ typedef typename Directed::is_directed_t is_directed;
+ public:
+ // The bidirectionalS tag is not allowed with the adjacency_matrix
+ // graph type. Instead, use directedS, which also provides the
+ // functionality required for a Bidirectional Graph (in_edges,
+ // in_degree, etc.).
+#if !defined(_MSC_VER) || _MSC_VER > 1300
+ BOOST_STATIC_ASSERT(type_traits::ice_not<(is_same<Directed, bidirectionalS>::value)>::value);
+#endif
+
+ typedef typename boost::ct_if_t<is_directed,
+ bidirectional_tag, undirected_tag>::type
+ directed_category;
+
+ typedef disallow_parallel_edge_tag edge_parallel_category;
+
+ typedef std::size_t vertex_descriptor;
+
+ typedef detail::matrix_edge_desc_impl<directed_category,
+ vertex_descriptor> edge_descriptor;
+ };
+
+ struct adjacency_matrix_class_tag { };
+
+ struct adj_matrix_traversal_tag :
+ public virtual adjacency_matrix_tag,
+ public virtual vertex_list_graph_tag,
+ public virtual incidence_graph_tag,
+ public virtual adjacency_graph_tag,
+ public virtual edge_list_graph_tag { };
+
+ //=========================================================================
+ // Adjacency Matrix Class
+ template <typename Directed = directedS,
+ typename VertexProperty = no_property,
+ typename EdgeProperty = no_property,
+ typename GraphProperty = no_property,
+ typename Allocator = std::allocator<bool> >
+ class adjacency_matrix {
+ typedef adjacency_matrix self;
+ typedef adjacency_matrix_traits<Directed> Traits;
+
+ public:
+#if !defined(BOOST_MSVC) || BOOST_MSVC > 1300
+ // The bidirectionalS tag is not allowed with the adjacency_matrix
+ // graph type. Instead, use directedS, which also provides the
+ // functionality required for a Bidirectional Graph (in_edges,
+ // in_degree, etc.).
+ BOOST_STATIC_ASSERT(!(is_same<Directed, bidirectionalS>::value));
+#endif
+
+#ifndef BOOST_GRAPH_NO_BUNDLED_PROPERTIES
+ typedef typename detail::retag_property_list<vertex_bundle_t, VertexProperty>::type
+ vertex_property_type;
+ typedef typename detail::retag_property_list<edge_bundle_t, EdgeProperty>::type
+ edge_property_type;
+
+ private:
+ typedef typename detail::retag_property_list<vertex_bundle_t, VertexProperty>::retagged
+ maybe_vertex_bundled;
+
+ typedef typename detail::retag_property_list<edge_bundle_t, EdgeProperty>::retagged
+ maybe_edge_bundled;
+
+ public:
+ // The types that are actually bundled
+ typedef typename ct_if<(is_same<maybe_vertex_bundled, no_property>::value),
+ no_vertex_bundle,
+ maybe_vertex_bundled>::type vertex_bundled;
+ typedef typename ct_if<(is_same<maybe_edge_bundled, no_property>::value),
+ no_edge_bundle,
+ maybe_edge_bundled>::type edge_bundled;
+#else
+ typedef EdgeProperty edge_property_type;
+ typedef VertexProperty vertex_property_type;
+ typedef no_vertex_bundle vertex_bundled;
+ typedef no_edge_bundle edge_bundled;
+#endif
+
+ public: // should be private
+ typedef typename ct_if_t<typename has_property<edge_property_type>::type,
+ std::pair<bool, edge_property_type>, char>::type StoredEdge;
+#if (defined(BOOST_MSVC) && BOOST_MSVC <= 1300) || defined(BOOST_NO_STD_ALLOCATOR)
+ typedef std::vector<StoredEdge> Matrix;
+#else
+ // This causes internal compiler error for MSVC
+ typedef typename Allocator::template rebind<StoredEdge>::other Alloc;
+ typedef std::vector<StoredEdge, Alloc> Matrix;
+#endif
+ typedef typename Matrix::iterator MatrixIter;
+ typedef typename Matrix::size_type size_type;
+ public:
+ // Graph concept required types
+ typedef typename Traits::vertex_descriptor vertex_descriptor;
+ typedef typename Traits::edge_descriptor edge_descriptor;
+ typedef typename Traits::directed_category directed_category;
+ typedef typename Traits::edge_parallel_category edge_parallel_category;
+ typedef adj_matrix_traversal_tag traversal_category;
+
+ static vertex_descriptor null_vertex()
+ {
+ return (std::numeric_limits<vertex_descriptor>::max)();
+ }
+
+ //private: if friends worked, these would be private
+
+ typedef detail::dir_adj_matrix_out_edge_iter<
+ vertex_descriptor, MatrixIter, size_type, edge_descriptor
+ > DirOutEdgeIter;
+
+ typedef detail::undir_adj_matrix_out_edge_iter<
+ vertex_descriptor, MatrixIter, size_type, edge_descriptor
+ > UnDirOutEdgeIter;
+
+ typedef typename ct_if_t<
+ typename Directed::is_directed_t, DirOutEdgeIter, UnDirOutEdgeIter
+ >::type unfiltered_out_edge_iter;
+
+ typedef detail::dir_adj_matrix_in_edge_iter<
+ vertex_descriptor, MatrixIter, size_type, edge_descriptor
+ > DirInEdgeIter;
+
+ typedef detail::undir_adj_matrix_in_edge_iter<
+ vertex_descriptor, MatrixIter, size_type, edge_descriptor
+ > UnDirInEdgeIter;
+
+ typedef typename ct_if_t<
+ typename Directed::is_directed_t, DirInEdgeIter, UnDirInEdgeIter
+ >::type unfiltered_in_edge_iter;
+
+ typedef detail::adj_matrix_edge_iter<
+ Directed, MatrixIter, size_type, edge_descriptor
+ > unfiltered_edge_iter;
+
+ public:
+
+ // IncidenceGraph concept required types
+ typedef filter_iterator<detail::does_edge_exist, unfiltered_out_edge_iter>
+ out_edge_iterator;
+
+ typedef size_type degree_size_type;
+
+ // BidirectionalGraph required types
+ typedef filter_iterator<detail::does_edge_exist, unfiltered_in_edge_iter>
+ in_edge_iterator;
+
+ // AdjacencyGraph required types
+ typedef typename adjacency_iterator_generator<self,
+ vertex_descriptor, out_edge_iterator>::type adjacency_iterator;
+
+ // VertexListGraph required types
+ typedef size_type vertices_size_type;
+ typedef integer_range<vertex_descriptor> VertexList;
+ typedef typename VertexList::iterator vertex_iterator;
+
+ // EdgeListGraph required types
+ typedef size_type edges_size_type;
+ typedef filter_iterator<
+ detail::does_edge_exist, unfiltered_edge_iter
+ > edge_iterator;
+
+ // PropertyGraph required types
+ typedef adjacency_matrix_class_tag graph_tag;
+
+ // Constructor required by MutableGraph
+ adjacency_matrix(vertices_size_type n_vertices)
+ : m_matrix(Directed::is_directed ?
+ (n_vertices * n_vertices)
+ : (n_vertices * (n_vertices + 1) / 2)),
+ m_vertex_set(0, n_vertices),
+ m_vertex_properties(n_vertices),
+ m_num_edges(0) { }
+
+#ifndef BOOST_GRAPH_NO_BUNDLED_PROPERTIES
+ // Directly access a vertex or edge bundle
+ vertex_bundled& operator[](vertex_descriptor v)
+ { return get(vertex_bundle, *this)[v]; }
+
+ const vertex_bundled& operator[](vertex_descriptor v) const
+ { return get(vertex_bundle, *this)[v]; }
+
+ edge_bundled& operator[](edge_descriptor e)
+ { return get(edge_bundle, *this)[e]; }
+
+ const edge_bundled& operator[](edge_descriptor e) const
+ { return get(edge_bundle, *this)[e]; }
+#endif
+
+ //private: if friends worked, these would be private
+
+ typename Matrix::const_reference
+ get_edge(vertex_descriptor u, vertex_descriptor v) const {
+ if (Directed::is_directed)
+ return m_matrix[u * m_vertex_set.size() + v];
+ else {
+ if (v > u)
+ std::swap(u, v);
+ return m_matrix[u * (u + 1)/2 + v];
+ }
+ }
+ typename Matrix::reference
+ get_edge(vertex_descriptor u, vertex_descriptor v) {
+ if (Directed::is_directed)
+ return m_matrix[u * m_vertex_set.size() + v];
+ else {
+ if (v > u)
+ std::swap(u, v);
+ return m_matrix[u * (u + 1)/2 + v];
+ }
+ }
+
+ Matrix m_matrix;
+ VertexList m_vertex_set;
+ std::vector<vertex_property_type> m_vertex_properties;
+ size_type m_num_edges;
+ };
+
+ //=========================================================================
+ // Functions required by the AdjacencyMatrix concept
+
+ template <typename D, typename VP, typename EP, typename GP, typename A>
+ std::pair<typename adjacency_matrix<D,VP,EP,GP,A>::edge_descriptor,
+ bool>
+ edge(typename adjacency_matrix<D,VP,EP,GP,A>::vertex_descriptor u,
+ typename adjacency_matrix<D,VP,EP,GP,A>::vertex_descriptor v,
+ const adjacency_matrix<D,VP,EP,GP,A>& g)
+ {
+ bool exists = detail::get_edge_exists(g.get_edge(u,v), 0);
+ typename adjacency_matrix<D,VP,EP,GP,A>::edge_descriptor
+ e(exists, u, v, &detail::get_property(g.get_edge(u,v)));
+ return std::make_pair(e, exists);
+ }
+
+ //=========================================================================
+ // Functions required by the IncidenceGraph concept
+
+ // O(1)
+ template <typename VP, typename EP, typename GP, typename A>
+ std::pair<typename adjacency_matrix<directedS,VP,EP,GP,A>::out_edge_iterator,
+ typename adjacency_matrix<directedS,VP,EP,GP,A>::out_edge_iterator>
+ out_edges
+ (typename adjacency_matrix<directedS,VP,EP,GP,A>::vertex_descriptor u,
+ const adjacency_matrix<directedS,VP,EP,GP,A>& g_)
+ {
+ typedef adjacency_matrix<directedS,VP,EP,GP,A> Graph;
+ Graph& g = const_cast<Graph&>(g_);
+ typename Graph::vertices_size_type offset = u * g.m_vertex_set.size();
+ typename Graph::MatrixIter f = g.m_matrix.begin() + offset;
+ typename Graph::MatrixIter l = f + g.m_vertex_set.size();
+ typename Graph::unfiltered_out_edge_iter
+ first(f, u, g.m_vertex_set.size())
+ , last(l, u, g.m_vertex_set.size());
+ detail::does_edge_exist pred;
+ typedef typename Graph::out_edge_iterator out_edge_iterator;
+ return std::make_pair(out_edge_iterator(pred, first, last),
+ out_edge_iterator(pred, last, last));
+ }
+
+ // O(1)
+ template <typename VP, typename EP, typename GP, typename A>
+ std::pair<
+ typename adjacency_matrix<undirectedS,VP,EP,GP,A>::out_edge_iterator,
+ typename adjacency_matrix<undirectedS,VP,EP,GP,A>::out_edge_iterator>
+ out_edges
+ (typename adjacency_matrix<undirectedS,VP,EP,GP,A>::vertex_descriptor u,
+ const adjacency_matrix<undirectedS,VP,EP,GP,A>& g_)
+ {
+ typedef adjacency_matrix<undirectedS,VP,EP,GP,A> Graph;
+ Graph& g = const_cast<Graph&>(g_);
+ typename Graph::vertices_size_type offset = u * (u + 1) / 2;
+ typename Graph::MatrixIter f = g.m_matrix.begin() + offset;
+ typename Graph::MatrixIter l = g.m_matrix.end();
+
+ typename Graph::unfiltered_out_edge_iter
+ first(f, u, g.m_vertex_set.size())
+ , last(l, u, g.m_vertex_set.size());
+
+ detail::does_edge_exist pred;
+ typedef typename Graph::out_edge_iterator out_edge_iterator;
+ return std::make_pair(out_edge_iterator(pred, first, last),
+ out_edge_iterator(pred, last, last));
+ }
+
+ // O(N)
+ template <typename D, typename VP, typename EP, typename GP, typename A>
+ typename adjacency_matrix<D,VP,EP,GP,A>::degree_size_type
+ out_degree(typename adjacency_matrix<D,VP,EP,GP,A>::vertex_descriptor u,
+ const adjacency_matrix<D,VP,EP,GP,A>& g)
+ {
+ typename adjacency_matrix<D,VP,EP,GP,A>::degree_size_type n = 0;
+ typename adjacency_matrix<D,VP,EP,GP,A>::out_edge_iterator f, l;
+ for (tie(f, l) = out_edges(u, g); f != l; ++f)
+ ++n;
+ return n;
+ }
+
+ // O(1)
+ template <typename D, typename VP, typename EP, typename GP, typename A,
+ typename Dir, typename Vertex>
+ typename adjacency_matrix<D,VP,EP,GP,A>::vertex_descriptor
+ source(const detail::matrix_edge_desc_impl<Dir,Vertex>& e,
+ const adjacency_matrix<D,VP,EP,GP,A>&)
+ {
+ return e.m_source;
+ }
+
+ // O(1)
+ template <typename D, typename VP, typename EP, typename GP, typename A,
+ typename Dir, typename Vertex>
+ typename adjacency_matrix<D,VP,EP,GP,A>::vertex_descriptor
+ target(const detail::matrix_edge_desc_impl<Dir,Vertex>& e,
+ const adjacency_matrix<D,VP,EP,GP,A>&)
+ {
+ return e.m_target;
+ }
+
+ //=========================================================================
+ // Functions required by the BidirectionalGraph concept
+
+ // O(1)
+ template <typename VP, typename EP, typename GP, typename A>
+ std::pair<typename adjacency_matrix<directedS,VP,EP,GP,A>::in_edge_iterator,
+ typename adjacency_matrix<directedS,VP,EP,GP,A>::in_edge_iterator>
+ in_edges
+ (typename adjacency_matrix<directedS,VP,EP,GP,A>::vertex_descriptor u,
+ const adjacency_matrix<directedS,VP,EP,GP,A>& g_)
+ {
+ typedef adjacency_matrix<directedS,VP,EP,GP,A> Graph;
+ Graph& g = const_cast<Graph&>(g_);
+ typename Graph::MatrixIter f = g.m_matrix.begin() + u;
+ typename Graph::MatrixIter l = g.m_matrix.end();
+ typename Graph::unfiltered_in_edge_iter
+ first(f, l, u, g.m_vertex_set.size())
+ , last(l, l, u, g.m_vertex_set.size());
+ detail::does_edge_exist pred;
+ typedef typename Graph::in_edge_iterator in_edge_iterator;
+ return std::make_pair(in_edge_iterator(pred, first, last),
+ in_edge_iterator(pred, last, last));
+ }
+
+ // O(1)
+ template <typename VP, typename EP, typename GP, typename A>
+ std::pair<
+ typename adjacency_matrix<undirectedS,VP,EP,GP,A>::in_edge_iterator,
+ typename adjacency_matrix<undirectedS,VP,EP,GP,A>::in_edge_iterator>
+ in_edges
+ (typename adjacency_matrix<undirectedS,VP,EP,GP,A>::vertex_descriptor u,
+ const adjacency_matrix<undirectedS,VP,EP,GP,A>& g_)
+ {
+ typedef adjacency_matrix<undirectedS,VP,EP,GP,A> Graph;
+ Graph& g = const_cast<Graph&>(g_);
+ typename Graph::vertices_size_type offset = u * (u + 1) / 2;
+ typename Graph::MatrixIter f = g.m_matrix.begin() + offset;
+ typename Graph::MatrixIter l = g.m_matrix.end();
+
+ typename Graph::unfiltered_in_edge_iter
+ first(f, u, g.m_vertex_set.size())
+ , last(l, u, g.m_vertex_set.size());
+
+ detail::does_edge_exist pred;
+ typedef typename Graph::in_edge_iterator in_edge_iterator;
+ return std::make_pair(in_edge_iterator(pred, first, last),
+ in_edge_iterator(pred, last, last));
+ }
+
+ // O(N)
+ template <typename D, typename VP, typename EP, typename GP, typename A>
+ typename adjacency_matrix<D,VP,EP,GP,A>::degree_size_type
+ in_degree(typename adjacency_matrix<D,VP,EP,GP,A>::vertex_descriptor u,
+ const adjacency_matrix<D,VP,EP,GP,A>& g)
+ {
+ typename adjacency_matrix<D,VP,EP,GP,A>::degree_size_type n = 0;
+ typename adjacency_matrix<D,VP,EP,GP,A>::in_edge_iterator f, l;
+ for (tie(f, l) = in_edges(u, g); f != l; ++f)
+ ++n;
+ return n;
+ }
+
+ //=========================================================================
+ // Functions required by the AdjacencyGraph concept
+
+ template <typename D, typename VP, typename EP, typename GP, typename A>
+ std::pair<typename adjacency_matrix<D,VP,EP,GP,A>::adjacency_iterator,
+ typename adjacency_matrix<D,VP,EP,GP,A>::adjacency_iterator>
+ adjacent_vertices
+ (typename adjacency_matrix<D,VP,EP,GP,A>::vertex_descriptor u,
+ const adjacency_matrix<D,VP,EP,GP,A>& g_)
+ {
+ typedef adjacency_matrix<D,VP,EP,GP,A> Graph;
+ const Graph& cg = static_cast<const Graph&>(g_);
+ Graph& g = const_cast<Graph&>(cg);
+ typedef typename Graph::adjacency_iterator adjacency_iterator;
+ typename Graph::out_edge_iterator first, last;
+ boost::tie(first, last) = out_edges(u, g);
+ return std::make_pair(adjacency_iterator(first, &g),
+ adjacency_iterator(last, &g));
+ }
+
+ //=========================================================================
+ // Functions required by the VertexListGraph concept
+
+ template <typename D, typename VP, typename EP, typename GP, typename A>
+ std::pair<typename adjacency_matrix<D,VP,EP,GP,A>::vertex_iterator,
+ typename adjacency_matrix<D,VP,EP,GP,A>::vertex_iterator>
+ vertices(const adjacency_matrix<D,VP,EP,GP,A>& g_) {
+ typedef adjacency_matrix<D,VP,EP,GP,A> Graph;
+ Graph& g = const_cast<Graph&>(g_);
+ return std::make_pair(g.m_vertex_set.begin(), g.m_vertex_set.end());
+ }
+
+ template <typename D, typename VP, typename EP, typename GP, typename A>
+ typename adjacency_matrix<D,VP,EP,GP,A>::vertices_size_type
+ num_vertices(const adjacency_matrix<D,VP,EP,GP,A>& g) {
+ return g.m_vertex_set.size();
+ }
+
+ //=========================================================================
+ // Functions required by the EdgeListGraph concept
+
+ template <typename D, typename VP, typename EP, typename GP, typename A>
+ std::pair<typename adjacency_matrix<D,VP,EP,GP,A>::edge_iterator,
+ typename adjacency_matrix<D,VP,EP,GP,A>::edge_iterator>
+ edges(const adjacency_matrix<D,VP,EP,GP,A>& g_)
+ {
+ typedef adjacency_matrix<D,VP,EP,GP,A> Graph;
+ Graph& g = const_cast<Graph&>(g_);
+
+ typename Graph::unfiltered_edge_iter
+ first(g.m_matrix.begin(), g.m_matrix.begin(),
+ g.m_vertex_set.size()),
+ last(g.m_matrix.end(), g.m_matrix.begin(),
+ g.m_vertex_set.size());
+ detail::does_edge_exist pred;
+ typedef typename Graph::edge_iterator edge_iterator;
+ return std::make_pair(edge_iterator(pred, first, last),
+ edge_iterator(pred, last, last));
+ }
+
+ // O(1)
+ template <typename D, typename VP, typename EP, typename GP, typename A>
+ typename adjacency_matrix<D,VP,EP,GP,A>::edges_size_type
+ num_edges(const adjacency_matrix<D,VP,EP,GP,A>& g)
+ {
+ return g.m_num_edges;
+ }
+
+ //=========================================================================
+ // Functions required by the MutableGraph concept
+
+ // O(1)
+ template <typename D, typename VP, typename EP, typename GP, typename A>
+ std::pair<typename adjacency_matrix<D,VP,EP,GP,A>::edge_descriptor, bool>
+ add_edge(typename adjacency_matrix<D,VP,EP,GP,A>::vertex_descriptor u,
+ typename adjacency_matrix<D,VP,EP,GP,A>::vertex_descriptor v,
+ const EP& ep,
+ adjacency_matrix<D,VP,EP,GP,A>& g)
+ {
+ typedef typename adjacency_matrix<D,VP,EP,GP,A>::edge_descriptor
+ edge_descriptor;
+ if (detail::get_edge_exists(g.get_edge(u,v), 0) == false) {
+ ++(g.m_num_edges);
+ detail::set_property(g.get_edge(u,v), ep, 0);
+ detail::set_edge_exists(g.get_edge(u,v), true, 0);
+ return std::make_pair
+ (edge_descriptor(true, u, v, &detail::get_property(g.get_edge(u,v))),
+ true);
+ } else
+ return std::make_pair
+ (edge_descriptor(true, u, v, &detail::get_property(g.get_edge(u,v))),
+ false);
+ }
+ // O(1)
+ template <typename D, typename VP, typename EP, typename GP, typename A>
+ std::pair<typename adjacency_matrix<D,VP,EP,GP,A>::edge_descriptor, bool>
+ add_edge(typename adjacency_matrix<D,VP,EP,GP,A>::vertex_descriptor u,
+ typename adjacency_matrix<D,VP,EP,GP,A>::vertex_descriptor v,
+ adjacency_matrix<D,VP,EP,GP,A>& g)
+ {
+ EP ep;
+ return add_edge(u, v, ep, g);
+ }
+
+ // O(1)
+ template <typename D, typename VP, typename EP, typename GP, typename A>
+ void
+ remove_edge(typename adjacency_matrix<D,VP,EP,GP,A>::vertex_descriptor u,
+ typename adjacency_matrix<D,VP,EP,GP,A>::vertex_descriptor v,
+ adjacency_matrix<D,VP,EP,GP,A>& g)
+ {
+ --(g.m_num_edges);
+ detail::set_edge_exists(g.get_edge(u,v), false, 0);
+ }
+
+ // O(1)
+ template <typename D, typename VP, typename EP, typename GP, typename A>
+ void
+ remove_edge(typename adjacency_matrix<D,VP,EP,GP,A>::edge_descriptor e,
+ adjacency_matrix<D,VP,EP,GP,A>& g)
+ {
+ remove_edge(source(e, g), target(e, g), g);
+ }
+
+
+ template <typename D, typename VP, typename EP, typename GP, typename A>
+ inline typename adjacency_matrix<D,VP,EP,GP,A>::vertex_descriptor
+ add_vertex(adjacency_matrix<D,VP,EP,GP,A>& g) {
+ // UNDER CONSTRUCTION
+ assert(false);
+ return *vertices(g).first;
+ }
+
+ template <typename D, typename VP, typename EP, typename GP, typename A>
+ inline typename adjacency_matrix<D,VP,EP,GP,A>::vertex_descriptor
+ add_vertex(const VP& vp, adjacency_matrix<D,VP,EP,GP,A>& g) {
+ // UNDER CONSTRUCTION
+ assert(false);
+ return *vertices(g).first;
+ }
+
+ template <typename D, typename VP, typename EP, typename GP, typename A>
+ inline void
+ remove_vertex(typename adjacency_matrix<D,VP,EP,GP,A>::vertex_descriptor u,
+ adjacency_matrix<D,VP,EP,GP,A>& g)
+ {
+ // UNDER CONSTRUCTION
+ assert(false);
+ }
+
+ // O(V)
+ template <typename VP, typename EP, typename GP, typename A>
+ void
+ clear_vertex
+ (typename adjacency_matrix<directedS,VP,EP,GP,A>::vertex_descriptor u,
+ adjacency_matrix<directedS,VP,EP,GP,A>& g)
+ {
+ typename adjacency_matrix<directedS,VP,EP,GP,A>::vertex_iterator
+ vi, vi_end;
+ for (tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
+ remove_edge(u, *vi, g);
+ for (tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
+ remove_edge(*vi, u, g);
+ }
+
+ // O(V)
+ template <typename VP, typename EP, typename GP, typename A>
+ void
+ clear_vertex
+ (typename adjacency_matrix<undirectedS,VP,EP,GP,A>::vertex_descriptor u,
+ adjacency_matrix<undirectedS,VP,EP,GP,A>& g)
+ {
+ typename adjacency_matrix<undirectedS,VP,EP,GP,A>::vertex_iterator
+ vi, vi_end;
+ for (tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
+ remove_edge(u, *vi, g);
+ }
+
+ //=========================================================================
+ // Vertex Property Map
+
+ template <typename GraphPtr, typename Vertex, typename T, typename R,
+ typename Tag>
+ class adj_matrix_vertex_property_map
+ : public put_get_helper<R,
+ adj_matrix_vertex_property_map<GraphPtr, Vertex, T, R, Tag> >
+ {
+ public:
+ typedef T value_type;
+ typedef R reference;
+ typedef Vertex key_type;
+ typedef boost::lvalue_property_map_tag category;
+ adj_matrix_vertex_property_map() { }
+ adj_matrix_vertex_property_map(GraphPtr g) : m_g(g) { }
+ inline reference operator[](key_type v) const {
+ return get_property_value(m_g->m_vertex_properties[v], Tag());
+ }
+ GraphPtr m_g;
+ };
+
+ template <class Property, class Vertex>
+ struct adj_matrix_vertex_id_map
+ : public boost::put_get_helper<Vertex,
+ adj_matrix_vertex_id_map<Property, Vertex> >
+ {
+ typedef Vertex value_type;
+ typedef Vertex reference;
+ typedef Vertex key_type;
+ typedef boost::readable_property_map_tag category;
+ adj_matrix_vertex_id_map() { }
+ template <class Graph>
+ inline adj_matrix_vertex_id_map(const Graph&) { }
+ inline value_type operator[](key_type v) const { return v; }
+ };
+
+ namespace detail {
+
+ struct adj_matrix_any_vertex_pa {
+ template <class Tag, class Graph, class Property>
+ struct bind_ {
+ typedef typename property_value<Property,Tag>::type Value;
+ typedef typename boost::graph_traits<Graph>::vertex_descriptor Vertex;
+
+ typedef adj_matrix_vertex_property_map<Graph*, Vertex, Value, Value&,
+ Tag> type;
+ typedef adj_matrix_vertex_property_map<const Graph*, Vertex, Value,
+ const Value&, Tag> const_type;
+ };
+ };
+ struct adj_matrix_id_vertex_pa {
+ template <class Tag, class Graph, class Property>
+ struct bind_ {
+ typedef typename Graph::vertex_descriptor Vertex;
+ typedef adj_matrix_vertex_id_map<Property, Vertex> type;
+ typedef adj_matrix_vertex_id_map<Property, Vertex> const_type;
+ };
+ };
+
+ template <class Tag>
+ struct adj_matrix_choose_vertex_pa_helper {
+ typedef adj_matrix_any_vertex_pa type;
+ };
+ template <>
+ struct adj_matrix_choose_vertex_pa_helper<vertex_index_t> {
+ typedef adj_matrix_id_vertex_pa type;
+ };
+
+ template <class Tag, class Graph, class Property>
+ struct adj_matrix_choose_vertex_pa {
+ typedef typename adj_matrix_choose_vertex_pa_helper<Tag>::type Helper;
+ typedef typename Helper::template bind_<Tag,Graph,Property> Bind;
+ typedef typename Bind::type type;
+ typedef typename Bind::const_type const_type;
+ };
+
+ struct adj_matrix_vertex_property_selector {
+ template <class Graph, class Property, class Tag>
+ struct bind_ {
+ typedef adj_matrix_choose_vertex_pa<Tag,Graph,Property> Choice;
+ typedef typename Choice::type type;
+ typedef typename Choice::const_type const_type;
+ };
+ };
+
+ } // namespace detail
+
+ template <>
+ struct vertex_property_selector<adjacency_matrix_class_tag> {
+ typedef detail::adj_matrix_vertex_property_selector type;
+ };
+
+ //=========================================================================
+ // Edge Property Map
+
+
+ template <typename Directed, typename Property, typename Vertex,
+ typename T, typename R, typename Tag>
+ class adj_matrix_edge_property_map
+ : public put_get_helper<R,
+ adj_matrix_edge_property_map<Directed, Property, Vertex, T, R, Tag> >
+ {
+ public:
+ typedef T value_type;
+ typedef R reference;
+ typedef detail::matrix_edge_desc_impl<Directed, Vertex> key_type;
+ typedef boost::lvalue_property_map_tag category;
+ inline reference operator[](key_type e) const {
+ Property& p = *(Property*)e.get_property();
+ return get_property_value(p, Tag());
+ }
+ };
+ struct adj_matrix_edge_property_selector {
+ template <class Graph, class Property, class Tag>
+ struct bind_ {
+ typedef typename property_value<Property,Tag>::type T;
+ typedef typename Graph::vertex_descriptor Vertex;
+ typedef adj_matrix_edge_property_map<typename Graph::directed_category,
+ Property, Vertex, T, T&, Tag> type;
+ typedef adj_matrix_edge_property_map<typename Graph::directed_category,
+ Property, Vertex, T, const T&, Tag> const_type;
+ };
+ };
+ template <>
+ struct edge_property_selector<adjacency_matrix_class_tag> {
+ typedef adj_matrix_edge_property_selector type;
+ };
+
+ //=========================================================================
+ // Functions required by PropertyGraph
+
+ namespace detail {
+
+ template <typename Property, typename D, typename VP, typename EP,
+ typename GP, typename A>
+ typename boost::property_map<adjacency_matrix<D,VP,EP,GP,A>,
+ Property>::type
+ get_dispatch(adjacency_matrix<D,VP,EP,GP,A>& g, Property,
+ vertex_property_tag)
+ {
+ typedef adjacency_matrix<D,VP,EP,GP,A> Graph;
+ typedef typename boost::property_map<adjacency_matrix<D,VP,EP,GP,A>,
+ Property>::type PA;
+ return PA(&g);
+ }
+ template <typename Property, typename D, typename VP, typename EP,
+ typename GP, typename A>
+ typename boost::property_map<adjacency_matrix<D,VP,EP,GP,A>,
+ Property>::type
+ get_dispatch(adjacency_matrix<D,VP,EP,GP,A>&, Property,
+ edge_property_tag)
+ {
+ typedef typename boost::property_map<adjacency_matrix<D,VP,EP,GP,A>,
+ Property>::type PA;
+ return PA();
+ }
+ template <typename Property, typename D, typename VP, typename EP,
+ typename GP, typename A>
+ typename boost::property_map<adjacency_matrix<D,VP,EP,GP,A>,
+ Property>::const_type
+ get_dispatch(const adjacency_matrix<D,VP,EP,GP,A>& g, Property,
+ vertex_property_tag)
+ {
+ typedef adjacency_matrix<D,VP,EP,GP,A> Graph;
+ typedef typename boost::property_map<adjacency_matrix<D,VP,EP,GP,A>,
+ Property>::const_type PA;
+ return PA(&g);
+ }
+ template <typename Property, typename D, typename VP, typename EP,
+ typename GP, typename A>
+ typename boost::property_map<adjacency_matrix<D,VP,EP,GP,A>,
+ Property>::const_type
+ get_dispatch(const adjacency_matrix<D,VP,EP,GP,A>&, Property,
+ edge_property_tag)
+ {
+ typedef typename boost::property_map<adjacency_matrix<D,VP,EP,GP,A>,
+ Property>::const_type PA;
+ return PA();
+ }
+
+ } // namespace detail
+
+ template <typename Property, typename D, typename VP, typename EP,
+ typename GP, typename A>
+ inline
+ typename property_map<adjacency_matrix<D,VP,EP,GP,A>, Property>::type
+ get(Property p, adjacency_matrix<D,VP,EP,GP,A>& g)
+ {
+ typedef typename property_kind<Property>::type Kind;
+ return detail::get_dispatch(g, p, Kind());
+ }
+
+ template <typename Property, typename D, typename VP, typename EP,
+ typename GP, typename A>
+ inline
+ typename property_map<adjacency_matrix<D,VP,EP,GP,A>, Property>::const_type
+ get(Property p, const adjacency_matrix<D,VP,EP,GP,A>& g)
+ {
+ typedef typename property_kind<Property>::type Kind;
+ return detail::get_dispatch(g, p, Kind());
+ }
+
+ template <typename Property, typename D, typename VP, typename EP,
+ typename GP, typename A, typename Key>
+ inline
+ typename property_traits<
+ typename property_map<adjacency_matrix<D,VP,EP,GP,A>, Property>::const_type
+ >::value_type
+ get(Property p, const adjacency_matrix<D,VP,EP,GP,A>& g,
+ const Key& key)
+ {
+ return get(get(p, g), key);
+ }
+
+ template <typename Property, typename D, typename VP, typename EP,
+ typename GP, typename A, typename Key, typename Value>
+ inline void
+ put(Property p, adjacency_matrix<D,VP,EP,GP,A>& g,
+ const Key& key, const Value& value)
+ {
+ typedef adjacency_matrix<D,VP,EP,GP,A> Graph;
+ typedef typename boost::property_map<Graph, Property>::type Map;
+ Map pmap = get(p, g);
+ put(pmap, key, value);
+ }
+
+ //=========================================================================
+ // Other Functions
+
+ template <typename D, typename VP, typename EP, typename GP, typename A>
+ typename adjacency_matrix<D,VP,EP,GP,A>::vertex_descriptor
+ vertex(typename adjacency_matrix<D,VP,EP,GP,A>::vertices_size_type n,
+ const adjacency_matrix<D,VP,EP,GP,A>& g)
+ {
+ return n;
+ }
+
+ // Support for bundled properties
+#ifndef BOOST_GRAPH_NO_BUNDLED_PROPERTIES
+ template <typename Directed, typename VertexProperty, typename EdgeProperty, typename GraphProperty,
+ typename Allocator, typename T, typename Bundle>
+ inline
+ typename property_map<adjacency_matrix<Directed, VertexProperty, EdgeProperty, GraphProperty, Allocator>,
+ T Bundle::*>::type
+ get(T Bundle::* p, adjacency_matrix<Directed, VertexProperty, EdgeProperty, GraphProperty, Allocator>& g)
+ {
+ typedef typename property_map<adjacency_matrix<Directed, VertexProperty, EdgeProperty, GraphProperty, Allocator>,
+ T Bundle::*>::type
+ result_type;
+ return result_type(&g, p);
+ }
+
+ template <typename Directed, typename VertexProperty, typename EdgeProperty, typename GraphProperty,
+ typename Allocator, typename T, typename Bundle>
+ inline
+ typename property_map<adjacency_matrix<Directed, VertexProperty, EdgeProperty, GraphProperty, Allocator>,
+ T Bundle::*>::const_type
+ get(T Bundle::* p, adjacency_matrix<Directed, VertexProperty, EdgeProperty, GraphProperty, Allocator> const & g)
+ {
+ typedef typename property_map<adjacency_matrix<Directed, VertexProperty, EdgeProperty, GraphProperty, Allocator>,
+ T Bundle::*>::const_type
+ result_type;
+ return result_type(&g, p);
+ }
+
+ template <typename Directed, typename VertexProperty, typename EdgeProperty, typename GraphProperty,
+ typename Allocator, typename T, typename Bundle, typename Key>
+ inline T
+ get(T Bundle::* p, adjacency_matrix<Directed, VertexProperty, EdgeProperty, GraphProperty, Allocator> const & g,
+ const Key& key)
+ {
+ return get(get(p, g), key);
+ }
+
+ template <typename Directed, typename VertexProperty, typename EdgeProperty, typename GraphProperty,
+ typename Allocator, typename T, typename Bundle, typename Key>
+ inline void
+ put(T Bundle::* p, adjacency_matrix<Directed, VertexProperty, EdgeProperty, GraphProperty, Allocator>& g,
+ const Key& key, const T& value)
+ {
+ put(get(p, g), key, value);
+ }
+
+#endif
+
+} // namespace boost
+
+#endif // BOOST_ADJACENCY_MATRIX_HPP
diff --git a/boost/boost/graph/astar_search.hpp b/boost/boost/graph/astar_search.hpp
new file mode 100644
index 00000000000..e1b95c4aaab
--- /dev/null
+++ b/boost/boost/graph/astar_search.hpp
@@ -0,0 +1,407 @@
+
+
+//
+//=======================================================================
+// Copyright (c) 2004 Kristopher Beevers
+//
+// 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_GRAPH_ASTAR_SEARCH_HPP
+#define BOOST_GRAPH_ASTAR_SEARCH_HPP
+
+
+#include <functional>
+#include <boost/limits.hpp>
+#include <boost/graph/named_function_params.hpp>
+#include <boost/pending/mutable_queue.hpp>
+#include <boost/graph/relax.hpp>
+#include <boost/pending/indirect_cmp.hpp>
+#include <boost/graph/exception.hpp>
+#include <boost/graph/breadth_first_search.hpp>
+
+
+namespace boost {
+
+
+ template <class Heuristic, class Graph>
+ struct AStarHeuristicConcept {
+ void constraints()
+ {
+ function_requires< CopyConstructibleConcept<Heuristic> >();
+ h(u);
+ }
+ Heuristic h;
+ typename graph_traits<Graph>::vertex_descriptor u;
+ };
+
+
+ template <class Graph, class CostType>
+ class astar_heuristic : public std::unary_function<
+ typename graph_traits<Graph>::vertex_descriptor, CostType>
+ {
+ public:
+ typedef typename graph_traits<Graph>::vertex_descriptor Vertex;
+ astar_heuristic() {}
+ CostType operator()(Vertex u) { return static_cast<CostType>(0); }
+ };
+
+
+
+ template <class Visitor, class Graph>
+ struct AStarVisitorConcept {
+ void constraints()
+ {
+ function_requires< CopyConstructibleConcept<Visitor> >();
+ vis.initialize_vertex(u, g);
+ vis.discover_vertex(u, g);
+ vis.examine_vertex(u, g);
+ vis.examine_edge(e, g);
+ vis.edge_relaxed(e, g);
+ vis.edge_not_relaxed(e, g);
+ vis.black_target(e, g);
+ vis.finish_vertex(u, g);
+ }
+ Visitor vis;
+ Graph g;
+ typename graph_traits<Graph>::vertex_descriptor u;
+ typename graph_traits<Graph>::edge_descriptor e;
+ };
+
+
+ template <class Visitors = null_visitor>
+ class astar_visitor : public bfs_visitor<Visitors> {
+ public:
+ astar_visitor() {}
+ astar_visitor(Visitors vis)
+ : bfs_visitor<Visitors>(vis) {}
+
+ template <class Edge, class Graph>
+ void edge_relaxed(Edge e, Graph& g) {
+ invoke_visitors(this->m_vis, e, g, on_edge_relaxed());
+ }
+ template <class Edge, class Graph>
+ void edge_not_relaxed(Edge e, Graph& g) {
+ invoke_visitors(this->m_vis, e, g, on_edge_not_relaxed());
+ }
+ private:
+ template <class Edge, class Graph>
+ void tree_edge(Edge e, Graph& g) {}
+ template <class Edge, class Graph>
+ void non_tree_edge(Edge e, Graph& g) {}
+ };
+ template <class Visitors>
+ astar_visitor<Visitors>
+ make_astar_visitor(Visitors vis) {
+ return astar_visitor<Visitors>(vis);
+ }
+ typedef astar_visitor<> default_astar_visitor;
+
+
+ namespace detail {
+
+ template <class AStarHeuristic, class UniformCostVisitor,
+ class UpdatableQueue, class PredecessorMap,
+ class CostMap, class DistanceMap, class WeightMap,
+ class ColorMap, class BinaryFunction,
+ class BinaryPredicate>
+ struct astar_bfs_visitor
+ {
+
+ typedef typename property_traits<CostMap>::value_type C;
+ typedef typename property_traits<ColorMap>::value_type ColorValue;
+ typedef color_traits<ColorValue> Color;
+ typedef typename property_traits<DistanceMap>::value_type distance_type;
+
+ astar_bfs_visitor(AStarHeuristic h, UniformCostVisitor vis,
+ UpdatableQueue& Q, PredecessorMap p,
+ CostMap c, DistanceMap d, WeightMap w,
+ ColorMap col, BinaryFunction combine,
+ BinaryPredicate compare, C zero)
+ : m_h(h), m_vis(vis), m_Q(Q), m_predecessor(p), m_cost(c),
+ m_distance(d), m_weight(w), m_color(col),
+ m_combine(combine), m_compare(compare), m_zero(zero) {}
+
+
+ template <class Vertex, class Graph>
+ void initialize_vertex(Vertex u, Graph& g) {
+ m_vis.initialize_vertex(u, g);
+ }
+ template <class Vertex, class Graph>
+ void discover_vertex(Vertex u, Graph& g) {
+ m_vis.discover_vertex(u, g);
+ }
+ template <class Vertex, class Graph>
+ void examine_vertex(Vertex u, Graph& g) {
+ m_vis.examine_vertex(u, g);
+ }
+ template <class Vertex, class Graph>
+ void finish_vertex(Vertex u, Graph& g) {
+ m_vis.finish_vertex(u, g);
+ }
+ template <class Edge, class Graph>
+ void examine_edge(Edge e, Graph& g) {
+ if (m_compare(get(m_weight, e), m_zero))
+ throw negative_edge();
+ m_vis.examine_edge(e, g);
+ }
+ template <class Edge, class Graph>
+ void non_tree_edge(Edge, Graph&) {}
+
+
+
+ template <class Edge, class Graph>
+ void tree_edge(Edge e, Graph& g) {
+ m_decreased = relax(e, g, m_weight, m_predecessor, m_distance,
+ m_combine, m_compare);
+
+ if(m_decreased) {
+ m_vis.edge_relaxed(e, g);
+ put(m_cost, target(e, g),
+ m_combine(get(m_distance, target(e, g)),
+ m_h(target(e, g))));
+ } else
+ m_vis.edge_not_relaxed(e, g);
+ }
+
+
+ template <class Edge, class Graph>
+ void gray_target(Edge e, Graph& g) {
+ distance_type old_distance = get(m_distance, target(e, g));
+
+ m_decreased = relax(e, g, m_weight, m_predecessor, m_distance,
+ m_combine, m_compare);
+
+ /* On x86 Linux with optimization, we sometimes get into a
+ horrible case where m_decreased is true but the distance hasn't
+ actually changed. This occurs when the comparison inside
+ relax() occurs with the 80-bit precision of the x87 floating
+ point unit, but the difference is lost when the resulting
+ values are written back to lower-precision memory (e.g., a
+ double). With the eager Dijkstra's implementation, this results
+ in looping. */
+ if(m_decreased && old_distance != get(m_distance, target(e, g))) {
+ put(m_cost, target(e, g),
+ m_combine(get(m_distance, target(e, g)),
+ m_h(target(e, g))));
+ m_Q.update(target(e, g));
+ m_vis.edge_relaxed(e, g);
+ } else
+ m_vis.edge_not_relaxed(e, g);
+ }
+
+
+ template <class Edge, class Graph>
+ void black_target(Edge e, Graph& g) {
+ distance_type old_distance = get(m_distance, target(e, g));
+
+ m_decreased = relax(e, g, m_weight, m_predecessor, m_distance,
+ m_combine, m_compare);
+
+ /* See comment in gray_target */
+ if(m_decreased && old_distance != get(m_distance, target(e, g))) {
+ m_vis.edge_relaxed(e, g);
+ put(m_cost, target(e, g),
+ m_combine(get(m_distance, target(e, g)),
+ m_h(target(e, g))));
+ m_Q.push(target(e, g));
+ put(m_color, target(e, g), Color::gray());
+ m_vis.black_target(e, g);
+ } else
+ m_vis.edge_not_relaxed(e, g);
+ }
+
+
+
+ AStarHeuristic m_h;
+ UniformCostVisitor m_vis;
+ UpdatableQueue& m_Q;
+ PredecessorMap m_predecessor;
+ CostMap m_cost;
+ DistanceMap m_distance;
+ WeightMap m_weight;
+ ColorMap m_color;
+ BinaryFunction m_combine;
+ BinaryPredicate m_compare;
+ bool m_decreased;
+ C m_zero;
+
+ };
+
+ } // namespace detail
+
+
+
+ template <typename VertexListGraph, typename AStarHeuristic,
+ typename AStarVisitor, typename PredecessorMap,
+ typename CostMap, typename DistanceMap,
+ typename WeightMap, typename ColorMap,
+ typename VertexIndexMap,
+ typename CompareFunction, typename CombineFunction,
+ typename CostInf, typename CostZero>
+ inline void
+ astar_search_no_init
+ (VertexListGraph &g,
+ typename graph_traits<VertexListGraph>::vertex_descriptor s,
+ AStarHeuristic h, AStarVisitor vis,
+ PredecessorMap predecessor, CostMap cost,
+ DistanceMap distance, WeightMap weight,
+ ColorMap color, VertexIndexMap index_map,
+ CompareFunction compare, CombineFunction combine,
+ CostInf inf, CostZero zero)
+ {
+ typedef indirect_cmp<CostMap, CompareFunction> IndirectCmp;
+ IndirectCmp icmp(cost, compare);
+
+ typedef typename graph_traits<VertexListGraph>::vertex_descriptor
+ Vertex;
+ typedef mutable_queue<Vertex, std::vector<Vertex>,
+ IndirectCmp, VertexIndexMap>
+ MutableQueue;
+ MutableQueue Q(num_vertices(g), icmp, index_map);
+
+ detail::astar_bfs_visitor<AStarHeuristic, AStarVisitor,
+ MutableQueue, PredecessorMap, CostMap, DistanceMap,
+ WeightMap, ColorMap, CombineFunction, CompareFunction>
+ bfs_vis(h, vis, Q, predecessor, cost, distance, weight,
+ color, combine, compare, zero);
+
+ breadth_first_visit(g, s, Q, bfs_vis, color);
+ }
+
+
+ // Non-named parameter interface
+ template <typename VertexListGraph, typename AStarHeuristic,
+ typename AStarVisitor, typename PredecessorMap,
+ typename CostMap, typename DistanceMap,
+ typename WeightMap, typename VertexIndexMap,
+ typename ColorMap,
+ typename CompareFunction, typename CombineFunction,
+ typename CostInf, typename CostZero>
+ inline void
+ astar_search
+ (VertexListGraph &g,
+ typename graph_traits<VertexListGraph>::vertex_descriptor s,
+ AStarHeuristic h, AStarVisitor vis,
+ PredecessorMap predecessor, CostMap cost,
+ DistanceMap distance, WeightMap weight,
+ VertexIndexMap index_map, ColorMap color,
+ CompareFunction compare, CombineFunction combine,
+ CostInf inf, CostZero zero)
+ {
+
+ typedef typename property_traits<ColorMap>::value_type ColorValue;
+ typedef color_traits<ColorValue> Color;
+ typename graph_traits<VertexListGraph>::vertex_iterator ui, ui_end;
+ for (tie(ui, ui_end) = vertices(g); ui != ui_end; ++ui) {
+ put(color, *ui, Color::white());
+ put(distance, *ui, inf);
+ put(cost, *ui, inf);
+ put(predecessor, *ui, *ui);
+ vis.initialize_vertex(*ui, g);
+ }
+ put(distance, s, zero);
+ put(cost, s, h(s));
+
+ astar_search_no_init
+ (g, s, h, vis, predecessor, cost, distance, weight,
+ color, index_map, compare, combine, inf, zero);
+
+ }
+
+
+
+ namespace detail {
+ template <class VertexListGraph, class AStarHeuristic,
+ class CostMap, class DistanceMap, class WeightMap,
+ class IndexMap, class ColorMap, class Params>
+ inline void
+ astar_dispatch2
+ (VertexListGraph& g,
+ typename graph_traits<VertexListGraph>::vertex_descriptor s,
+ AStarHeuristic h, CostMap cost, DistanceMap distance,
+ WeightMap weight, IndexMap index_map, ColorMap color,
+ const Params& params)
+ {
+ dummy_property_map p_map;
+ typedef typename property_traits<CostMap>::value_type C;
+ astar_search
+ (g, s, h,
+ choose_param(get_param(params, graph_visitor),
+ make_astar_visitor(null_visitor())),
+ choose_param(get_param(params, vertex_predecessor), p_map),
+ cost, distance, weight, index_map, color,
+ choose_param(get_param(params, distance_compare_t()),
+ std::less<C>()),
+ choose_param(get_param(params, distance_combine_t()),
+ closed_plus<C>()),
+ choose_param(get_param(params, distance_inf_t()),
+ std::numeric_limits<C>::max BOOST_PREVENT_MACRO_SUBSTITUTION ()),
+ choose_param(get_param(params, distance_zero_t()),
+ C()));
+ }
+
+ template <class VertexListGraph, class AStarHeuristic,
+ class CostMap, class DistanceMap, class WeightMap,
+ class IndexMap, class ColorMap, class Params>
+ inline void
+ astar_dispatch1
+ (VertexListGraph& g,
+ typename graph_traits<VertexListGraph>::vertex_descriptor s,
+ AStarHeuristic h, CostMap cost, DistanceMap distance,
+ WeightMap weight, IndexMap index_map, ColorMap color,
+ const Params& params)
+ {
+ typedef typename property_traits<WeightMap>::value_type D;
+ typename std::vector<D>::size_type
+ n = is_default_param(distance) ? num_vertices(g) : 1;
+ std::vector<D> distance_map(n);
+ n = is_default_param(cost) ? num_vertices(g) : 1;
+ std::vector<D> cost_map(n);
+ std::vector<default_color_type> color_map(num_vertices(g));
+ default_color_type c = white_color;
+
+ detail::astar_dispatch2
+ (g, s, h,
+ choose_param(cost, make_iterator_property_map
+ (cost_map.begin(), index_map,
+ cost_map[0])),
+ choose_param(distance, make_iterator_property_map
+ (distance_map.begin(), index_map,
+ distance_map[0])),
+ weight, index_map,
+ choose_param(color, make_iterator_property_map
+ (color_map.begin(), index_map, c)),
+ params);
+ }
+ } // namespace detail
+
+
+ // Named parameter interface
+ template <typename VertexListGraph,
+ typename AStarHeuristic,
+ typename P, typename T, typename R>
+ void
+ astar_search
+ (VertexListGraph &g,
+ typename graph_traits<VertexListGraph>::vertex_descriptor s,
+ AStarHeuristic h, const bgl_named_params<P, T, R>& params)
+ {
+
+ detail::astar_dispatch1
+ (g, s, h,
+ get_param(params, vertex_rank),
+ get_param(params, vertex_distance),
+ choose_const_pmap(get_param(params, edge_weight), g, edge_weight),
+ choose_const_pmap(get_param(params, vertex_index), g, vertex_index),
+ get_param(params, vertex_color),
+ params);
+
+ }
+
+} // namespace boost
+
+#endif // BOOST_GRAPH_ASTAR_SEARCH_HPP
diff --git a/boost/boost/graph/bandwidth.hpp b/boost/boost/graph/bandwidth.hpp
new file mode 100644
index 00000000000..ea44b31791b
--- /dev/null
+++ b/boost/boost/graph/bandwidth.hpp
@@ -0,0 +1,83 @@
+// Copyright (c) Jeremy Siek 2001, Marc Wintermantel 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)
+
+#ifndef BOOST_GRAPH_BANDWIDTH_HPP
+#define BOOST_GRAPH_BANDWIDTH_HPP
+
+#include <algorithm> // for std::min and std::max
+#include <boost/config.hpp>
+#include <boost/graph/graph_traits.hpp>
+#include <boost/detail/numeric_traits.hpp>
+
+namespace boost {
+
+ template <typename Graph, typename VertexIndexMap>
+ typename graph_traits<Graph>::vertices_size_type
+ ith_bandwidth(typename graph_traits<Graph>::vertex_descriptor i,
+ const Graph& g,
+ VertexIndexMap index)
+ {
+ BOOST_USING_STD_MAX();
+ typedef typename graph_traits<Graph>::vertices_size_type size_type;
+ size_type b = 0;
+ typename graph_traits<Graph>::out_edge_iterator e, end;
+ for (tie(e, end) = out_edges(i, g); e != end; ++e) {
+ int f_i = get(index, i);
+ int f_j = get(index, target(*e, g));
+ using namespace std; // to call abs() unqualified
+ if(f_i > f_j)
+ b = max BOOST_PREVENT_MACRO_SUBSTITUTION (b, size_type(f_i - f_j));
+ }
+ return b;
+ }
+
+ template <typename Graph>
+ typename graph_traits<Graph>::vertices_size_type
+ ith_bandwidth(typename graph_traits<Graph>::vertex_descriptor i,
+ const Graph& g)
+ {
+ return ith_bandwidth(i, g, get(vertex_index, g));
+ }
+
+ template <typename Graph, typename VertexIndexMap>
+ typename graph_traits<Graph>::vertices_size_type
+ bandwidth(const Graph& g, VertexIndexMap index)
+ {
+ BOOST_USING_STD_MAX();
+ typename graph_traits<Graph>::vertices_size_type b = 0;
+ typename graph_traits<Graph>::vertex_iterator i, end;
+ for (tie(i, end) = vertices(g); i != end; ++i)
+ b = max BOOST_PREVENT_MACRO_SUBSTITUTION (b, ith_bandwidth(*i, g, index));
+ return b;
+ }
+
+ template <typename Graph>
+ typename graph_traits<Graph>::vertices_size_type
+ bandwidth(const Graph& g)
+ {
+ return bandwidth(g, get(vertex_index, g));
+ }
+
+ template <typename Graph, typename VertexIndexMap>
+ typename graph_traits<Graph>::vertices_size_type
+ edgesum(const Graph& g, VertexIndexMap index_map)
+ {
+ typedef typename graph_traits<Graph>::vertices_size_type size_type;
+ typedef typename detail::numeric_traits<size_type>::difference_type diff_t;
+ size_type sum = 0;
+ typename graph_traits<Graph>::edge_iterator i, end;
+ for (tie(i, end) = edges(g); i != end; ++i) {
+ diff_t f_u = get(index_map, source(*i, g));
+ diff_t f_v = get(index_map, target(*i, g));
+ using namespace std; // to call abs() unqualified
+ sum += abs(f_u - f_v);
+ }
+ return sum;
+ }
+
+} // namespace boost
+
+#endif // BOOST_GRAPH_BANDWIDTH_HPP
diff --git a/boost/boost/graph/bc_clustering.hpp b/boost/boost/graph/bc_clustering.hpp
new file mode 100644
index 00000000000..eb438c1425f
--- /dev/null
+++ b/boost/boost/graph/bc_clustering.hpp
@@ -0,0 +1,164 @@
+// Copyright 2004 The Trustees of Indiana University.
+
+// 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)
+
+// Authors: Douglas Gregor
+// Andrew Lumsdaine
+#ifndef BOOST_GRAPH_BETWEENNESS_CENTRALITY_CLUSTERING_HPP
+#define BOOST_GRAPH_BETWEENNESS_CENTRALITY_CLUSTERING_HPP
+
+#include <boost/graph/betweenness_centrality.hpp>
+#include <boost/graph/graph_traits.hpp>
+#include <boost/pending/indirect_cmp.hpp>
+#include <algorithm>
+#include <vector>
+#include <boost/property_map.hpp>
+
+namespace boost {
+
+/** Threshold termination function for the betweenness centrality
+ * clustering algorithm.
+ */
+template<typename T>
+struct bc_clustering_threshold
+{
+ typedef T centrality_type;
+
+ /// Terminate clustering when maximum absolute edge centrality is
+ /// below the given threshold.
+ explicit bc_clustering_threshold(T threshold)
+ : threshold(threshold), dividend(1.0) {}
+
+ /**
+ * Terminate clustering when the maximum edge centrality is below
+ * the given threshold.
+ *
+ * @param threshold the threshold value
+ *
+ * @param g the graph on which the threshold will be calculated
+ *
+ * @param normalize when true, the threshold is compared against the
+ * normalized edge centrality based on the input graph; otherwise,
+ * the threshold is compared against the absolute edge centrality.
+ */
+ template<typename Graph>
+ bc_clustering_threshold(T threshold, const Graph& g, bool normalize = true)
+ : threshold(threshold), dividend(1.0)
+ {
+ if (normalize) {
+ typename graph_traits<Graph>::vertices_size_type n = num_vertices(g);
+ dividend = T((n - 1) * (n - 2)) / T(2);
+ }
+ }
+
+ /** Returns true when the given maximum edge centrality (potentially
+ * normalized) falls below the threshold.
+ */
+ template<typename Graph, typename Edge>
+ bool operator()(T max_centrality, Edge, const Graph&)
+ {
+ return (max_centrality / dividend) < threshold;
+ }
+
+ protected:
+ T threshold;
+ T dividend;
+};
+
+/** Graph clustering based on edge betweenness centrality.
+ *
+ * This algorithm implements graph clustering based on edge
+ * betweenness centrality. It is an iterative algorithm, where in each
+ * step it compute the edge betweenness centrality (via @ref
+ * brandes_betweenness_centrality) and removes the edge with the
+ * maximum betweenness centrality. The @p done function object
+ * determines when the algorithm terminates (the edge found when the
+ * algorithm terminates will not be removed).
+ *
+ * @param g The graph on which clustering will be performed. The type
+ * of this parameter (@c MutableGraph) must be a model of the
+ * VertexListGraph, IncidenceGraph, EdgeListGraph, and Mutable Graph
+ * concepts.
+ *
+ * @param done The function object that indicates termination of the
+ * algorithm. It must be a ternary function object thats accepts the
+ * maximum centrality, the descriptor of the edge that will be
+ * removed, and the graph @p g.
+ *
+ * @param edge_centrality (UTIL/OUT) The property map that will store
+ * the betweenness centrality for each edge. When the algorithm
+ * terminates, it will contain the edge centralities for the
+ * graph. The type of this property map must model the
+ * ReadWritePropertyMap concept. Defaults to an @c
+ * iterator_property_map whose value type is
+ * @c Done::centrality_type and using @c get(edge_index, g) for the
+ * index map.
+ *
+ * @param vertex_index (IN) The property map that maps vertices to
+ * indices in the range @c [0, num_vertices(g)). This type of this
+ * property map must model the ReadablePropertyMap concept and its
+ * value type must be an integral type. Defaults to
+ * @c get(vertex_index, g).
+ */
+template<typename MutableGraph, typename Done, typename EdgeCentralityMap,
+ typename VertexIndexMap>
+void
+betweenness_centrality_clustering(MutableGraph& g, Done done,
+ EdgeCentralityMap edge_centrality,
+ VertexIndexMap vertex_index)
+{
+ typedef typename property_traits<EdgeCentralityMap>::value_type
+ centrality_type;
+ typedef typename graph_traits<MutableGraph>::edge_iterator edge_iterator;
+ typedef typename graph_traits<MutableGraph>::edge_descriptor edge_descriptor;
+ typedef typename graph_traits<MutableGraph>::vertices_size_type
+ vertices_size_type;
+
+ if (edges(g).first == edges(g).second) return;
+
+ // Function object that compares the centrality of edges
+ indirect_cmp<EdgeCentralityMap, std::less<centrality_type> >
+ cmp(edge_centrality);
+
+ bool is_done;
+ do {
+ brandes_betweenness_centrality(g,
+ edge_centrality_map(edge_centrality)
+ .vertex_index_map(vertex_index));
+ edge_descriptor e = *max_element(edges(g).first, edges(g).second, cmp);
+ is_done = done(get(edge_centrality, e), e, g);
+ if (!is_done) remove_edge(e, g);
+ } while (!is_done && edges(g).first != edges(g).second);
+}
+
+/**
+ * \overload
+ */
+template<typename MutableGraph, typename Done, typename EdgeCentralityMap>
+void
+betweenness_centrality_clustering(MutableGraph& g, Done done,
+ EdgeCentralityMap edge_centrality)
+{
+ betweenness_centrality_clustering(g, done, edge_centrality,
+ get(vertex_index, g));
+}
+
+/**
+ * \overload
+ */
+template<typename MutableGraph, typename Done>
+void
+betweenness_centrality_clustering(MutableGraph& g, Done done)
+{
+ typedef typename Done::centrality_type centrality_type;
+ std::vector<centrality_type> edge_centrality(num_edges(g));
+ betweenness_centrality_clustering(g, done,
+ make_iterator_property_map(edge_centrality.begin(), get(edge_index, g)),
+ get(vertex_index, g));
+}
+
+} // end namespace boost
+
+#endif // BOOST_GRAPH_BETWEENNESS_CENTRALITY_CLUSTERING_HPP
diff --git a/boost/boost/graph/bellman_ford_shortest_paths.hpp b/boost/boost/graph/bellman_ford_shortest_paths.hpp
new file mode 100644
index 00000000000..4001c288e76
--- /dev/null
+++ b/boost/boost/graph/bellman_ford_shortest_paths.hpp
@@ -0,0 +1,241 @@
+//
+//=======================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//=======================================================================
+//
+
+/*
+ This file implements the function
+
+ template <class EdgeListGraph, class Size, class P, class T, class R>
+ bool bellman_ford_shortest_paths(EdgeListGraph& g, Size N,
+ const bgl_named_params<P, T, R>& params)
+
+ */
+
+
+#ifndef BOOST_GRAPH_BELLMAN_FORD_SHORTEST_PATHS_HPP
+#define BOOST_GRAPH_BELLMAN_FORD_SHORTEST_PATHS_HPP
+
+#include <boost/config.hpp>
+#include <boost/graph/graph_traits.hpp>
+#include <boost/graph/graph_concepts.hpp>
+#include <boost/graph/properties.hpp>
+#include <boost/graph/relax.hpp>
+#include <boost/graph/visitors.hpp>
+#include <boost/graph/named_function_params.hpp>
+
+namespace boost {
+
+ template <class Visitor, class Graph>
+ struct BellmanFordVisitorConcept {
+ void constraints() {
+ function_requires< CopyConstructibleConcept<Visitor> >();
+ vis.examine_edge(e, g);
+ vis.edge_relaxed(e, g);
+ vis.edge_not_relaxed(e, g);
+ vis.edge_minimized(e, g);
+ vis.edge_not_minimized(e, g);
+ }
+ Visitor vis;
+ Graph g;
+ typename graph_traits<Graph>::edge_descriptor e;
+ };
+
+ template <class Visitors = null_visitor>
+ class bellman_visitor {
+ public:
+ bellman_visitor() { }
+ bellman_visitor(Visitors vis) : m_vis(vis) { }
+
+ template <class Edge, class Graph>
+ void examine_edge(Edge u, Graph& g) {
+ invoke_visitors(m_vis, u, g, on_examine_edge());
+ }
+ template <class Edge, class Graph>
+ void edge_relaxed(Edge u, Graph& g) {
+ invoke_visitors(m_vis, u, g, on_edge_relaxed());
+ }
+ template <class Edge, class Graph>
+ void edge_not_relaxed(Edge u, Graph& g) {
+ invoke_visitors(m_vis, u, g, on_edge_not_relaxed());
+ }
+ template <class Edge, class Graph>
+ void edge_minimized(Edge u, Graph& g) {
+ invoke_visitors(m_vis, u, g, on_edge_minimized());
+ }
+ template <class Edge, class Graph>
+ void edge_not_minimized(Edge u, Graph& g) {
+ invoke_visitors(m_vis, u, g, on_edge_not_minimized());
+ }
+ protected:
+ Visitors m_vis;
+ };
+ template <class Visitors>
+ bellman_visitor<Visitors>
+ make_bellman_visitor(Visitors vis) {
+ return bellman_visitor<Visitors>(vis);
+ }
+ typedef bellman_visitor<> default_bellman_visitor;
+
+ template <class EdgeListGraph, class Size, class WeightMap,
+ class PredecessorMap, class DistanceMap,
+ class BinaryFunction, class BinaryPredicate,
+ class BellmanFordVisitor>
+ bool bellman_ford_shortest_paths(EdgeListGraph& g, Size N,
+ WeightMap weight,
+ PredecessorMap pred,
+ DistanceMap distance,
+ BinaryFunction combine,
+ BinaryPredicate compare,
+ BellmanFordVisitor v)
+ {
+ function_requires<EdgeListGraphConcept<EdgeListGraph> >();
+ typedef graph_traits<EdgeListGraph> GTraits;
+ typedef typename GTraits::edge_descriptor Edge;
+ typedef typename GTraits::vertex_descriptor Vertex;
+ function_requires<ReadWritePropertyMapConcept<DistanceMap, Vertex> >();
+ function_requires<ReadablePropertyMapConcept<WeightMap, Edge> >();
+ typedef typename property_traits<DistanceMap>::value_type D_value;
+ typedef typename property_traits<WeightMap>::value_type W_value;
+
+ typename GTraits::edge_iterator i, end;
+
+ for (Size k = 0; k < N; ++k) {
+ bool at_least_one_edge_relaxed = false;
+ for (tie(i, end) = edges(g); i != end; ++i) {
+ v.examine_edge(*i, g);
+ if (relax(*i, g, weight, pred, distance, combine, compare)) {
+ at_least_one_edge_relaxed = true;
+ v.edge_relaxed(*i, g);
+ } else
+ v.edge_not_relaxed(*i, g);
+ }
+ if (!at_least_one_edge_relaxed)
+ break;
+ }
+
+ for (tie(i, end) = edges(g); i != end; ++i)
+ if (compare(combine(get(distance, source(*i, g)), get(weight, *i)),
+ get(distance, target(*i,g))))
+ {
+ v.edge_not_minimized(*i, g);
+ return false;
+ } else
+ v.edge_minimized(*i, g);
+
+ return true;
+ }
+
+ namespace detail {
+
+ template<typename VertexAndEdgeListGraph, typename Size,
+ typename WeightMap, typename PredecessorMap, typename DistanceMap,
+ typename P, typename T, typename R>
+ bool
+ bellman_dispatch2
+ (VertexAndEdgeListGraph& g,
+ typename graph_traits<VertexAndEdgeListGraph>::vertex_descriptor s,
+ Size N, WeightMap weight, PredecessorMap pred, DistanceMap distance,
+ const bgl_named_params<P, T, R>& params)
+ {
+ typedef typename property_traits<DistanceMap>::value_type D;
+ bellman_visitor<> null_vis;
+ typedef typename property_traits<WeightMap>::value_type weight_type;
+ typename graph_traits<VertexAndEdgeListGraph>::vertex_iterator v, v_end;
+ for (tie(v, v_end) = vertices(g); v != v_end; ++v) {
+ put(distance, *v, (std::numeric_limits<weight_type>::max)());
+ put(pred, *v, *v);
+ }
+ put(distance, s, weight_type(0));
+ return bellman_ford_shortest_paths
+ (g, N, weight, pred, distance,
+ choose_param(get_param(params, distance_combine_t()),
+ closed_plus<D>()),
+ choose_param(get_param(params, distance_compare_t()),
+ std::less<D>()),
+ choose_param(get_param(params, graph_visitor),
+ null_vis)
+ );
+ }
+
+ template<typename VertexAndEdgeListGraph, typename Size,
+ typename WeightMap, typename PredecessorMap, typename DistanceMap,
+ typename P, typename T, typename R>
+ bool
+ bellman_dispatch2
+ (VertexAndEdgeListGraph& g,
+ detail::error_property_not_found,
+ Size N, WeightMap weight, PredecessorMap pred, DistanceMap distance,
+ const bgl_named_params<P, T, R>& params)
+ {
+ typedef typename property_traits<DistanceMap>::value_type D;
+ bellman_visitor<> null_vis;
+ return bellman_ford_shortest_paths
+ (g, N, weight, pred, distance,
+ choose_param(get_param(params, distance_combine_t()),
+ closed_plus<D>()),
+ choose_param(get_param(params, distance_compare_t()),
+ std::less<D>()),
+ choose_param(get_param(params, graph_visitor),
+ null_vis)
+ );
+ }
+
+ template <class EdgeListGraph, class Size, class WeightMap,
+ class DistanceMap, class P, class T, class R>
+ bool bellman_dispatch(EdgeListGraph& g, Size N,
+ WeightMap weight, DistanceMap distance,
+ const bgl_named_params<P, T, R>& params)
+ {
+ dummy_property_map dummy_pred;
+ return
+ detail::bellman_dispatch2
+ (g,
+ get_param(params, root_vertex_t()),
+ N, weight,
+ choose_param(get_param(params, vertex_predecessor), dummy_pred),
+ distance,
+ params);
+ }
+ } // namespace detail
+
+ template <class EdgeListGraph, class Size, class P, class T, class R>
+ bool bellman_ford_shortest_paths
+ (EdgeListGraph& g, Size N,
+ const bgl_named_params<P, T, R>& params)
+ {
+ return detail::bellman_dispatch
+ (g, N,
+ choose_const_pmap(get_param(params, edge_weight), g, edge_weight),
+ choose_pmap(get_param(params, vertex_distance), g, vertex_distance),
+ params);
+ }
+
+ template <class EdgeListGraph, class Size>
+ bool bellman_ford_shortest_paths(EdgeListGraph& g, Size N)
+ {
+ bgl_named_params<int,int> params(0);
+ return bellman_ford_shortest_paths(g, N, params);
+ }
+
+ template <class VertexAndEdgeListGraph, class P, class T, class R>
+ bool bellman_ford_shortest_paths
+ (VertexAndEdgeListGraph& g,
+ const bgl_named_params<P, T, R>& params)
+ {
+ function_requires<VertexListGraphConcept<VertexAndEdgeListGraph> >();
+ return detail::bellman_dispatch
+ (g, num_vertices(g),
+ choose_const_pmap(get_param(params, edge_weight), g, edge_weight),
+ choose_pmap(get_param(params, vertex_distance), g, vertex_distance),
+ params);
+ }
+} // namespace boost
+
+#endif // BOOST_GRAPH_BELLMAN_FORD_SHORTEST_PATHS_HPP
diff --git a/boost/boost/graph/betweenness_centrality.hpp b/boost/boost/graph/betweenness_centrality.hpp
new file mode 100644
index 00000000000..890103f3689
--- /dev/null
+++ b/boost/boost/graph/betweenness_centrality.hpp
@@ -0,0 +1,599 @@
+// Copyright 2004 The Trustees of Indiana University.
+
+// 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)
+
+// Authors: Douglas Gregor
+// Andrew Lumsdaine
+#ifndef BOOST_GRAPH_BRANDES_BETWEENNESS_CENTRALITY_HPP
+#define BOOST_GRAPH_BRANDES_BETWEENNESS_CENTRALITY_HPP
+
+#include <stack>
+#include <vector>
+#include <boost/graph/dijkstra_shortest_paths.hpp>
+#include <boost/graph/breadth_first_search.hpp>
+#include <boost/graph/relax.hpp>
+#include <boost/graph/graph_traits.hpp>
+#include <boost/tuple/tuple.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/property_map.hpp>
+#include <boost/graph/named_function_params.hpp>
+#include <algorithm>
+
+namespace boost {
+
+namespace detail { namespace graph {
+
+ /**
+ * Customized visitor passed to Dijkstra's algorithm by Brandes'
+ * betweenness centrality algorithm. This visitor is responsible for
+ * keeping track of the order in which vertices are discovered, the
+ * predecessors on the shortest path(s) to a vertex, and the number
+ * of shortest paths.
+ */
+ template<typename Graph, typename WeightMap, typename IncomingMap,
+ typename DistanceMap, typename PathCountMap>
+ struct brandes_dijkstra_visitor : public bfs_visitor<>
+ {
+ typedef typename graph_traits<Graph>::vertex_descriptor vertex_descriptor;
+ typedef typename graph_traits<Graph>::edge_descriptor edge_descriptor;
+
+ brandes_dijkstra_visitor(std::stack<vertex_descriptor>& ordered_vertices,
+ WeightMap weight,
+ IncomingMap incoming,
+ DistanceMap distance,
+ PathCountMap path_count)
+ : ordered_vertices(ordered_vertices), weight(weight),
+ incoming(incoming), distance(distance),
+ path_count(path_count)
+ { }
+
+ /**
+ * Whenever an edge e = (v, w) is relaxed, the incoming edge list
+ * for w is set to {(v, w)} and the shortest path count of w is set to
+ * the number of paths that reach {v}.
+ */
+ void edge_relaxed(edge_descriptor e, const Graph& g)
+ {
+ vertex_descriptor v = source(e, g), w = target(e, g);
+ incoming[w].clear();
+ incoming[w].push_back(e);
+ put(path_count, w, get(path_count, v));
+ }
+
+ /**
+ * If an edge e = (v, w) was not relaxed, it may still be the case
+ * that we've found more equally-short paths, so include {(v, w)} in the
+ * incoming edges of w and add all of the shortest paths to v to the
+ * shortest path count of w.
+ */
+ void edge_not_relaxed(edge_descriptor e, const Graph& g)
+ {
+ typedef typename property_traits<WeightMap>::value_type weight_type;
+ typedef typename property_traits<DistanceMap>::value_type distance_type;
+ vertex_descriptor v = source(e, g), w = target(e, g);
+ distance_type d_v = get(distance, v), d_w = get(distance, w);
+ weight_type w_e = get(weight, e);
+
+ closed_plus<distance_type> combine;
+ if (d_w == combine(d_v, w_e)) {
+ put(path_count, w, get(path_count, w) + get(path_count, v));
+ incoming[w].push_back(e);
+ }
+ }
+
+ /// Keep track of vertices as they are reached
+ void examine_vertex(vertex_descriptor w, const Graph&)
+ {
+ ordered_vertices.push(w);
+ }
+
+ private:
+ std::stack<vertex_descriptor>& ordered_vertices;
+ WeightMap weight;
+ IncomingMap incoming;
+ DistanceMap distance;
+ PathCountMap path_count;
+ };
+
+ /**
+ * Function object that calls Dijkstra's shortest paths algorithm
+ * using the Dijkstra visitor for the Brandes betweenness centrality
+ * algorithm.
+ */
+ template<typename WeightMap>
+ struct brandes_dijkstra_shortest_paths
+ {
+ brandes_dijkstra_shortest_paths(WeightMap weight_map)
+ : weight_map(weight_map) { }
+
+ template<typename Graph, typename IncomingMap, typename DistanceMap,
+ typename PathCountMap, typename VertexIndexMap>
+ void
+ operator()(Graph& g,
+ typename graph_traits<Graph>::vertex_descriptor s,
+ std::stack<typename graph_traits<Graph>::vertex_descriptor>& ov,
+ IncomingMap incoming,
+ DistanceMap distance,
+ PathCountMap path_count,
+ VertexIndexMap vertex_index)
+ {
+ typedef brandes_dijkstra_visitor<Graph, WeightMap, IncomingMap,
+ DistanceMap, PathCountMap> visitor_type;
+ visitor_type visitor(ov, weight_map, incoming, distance, path_count);
+
+ dijkstra_shortest_paths(g, s,
+ boost::weight_map(weight_map)
+ .vertex_index_map(vertex_index)
+ .distance_map(distance)
+ .visitor(visitor));
+ }
+
+ private:
+ WeightMap weight_map;
+ };
+
+ /**
+ * Function object that invokes breadth-first search for the
+ * unweighted form of the Brandes betweenness centrality algorithm.
+ */
+ struct brandes_unweighted_shortest_paths
+ {
+ /**
+ * Customized visitor passed to breadth-first search, which
+ * records predecessor and the number of shortest paths to each
+ * vertex.
+ */
+ template<typename Graph, typename IncomingMap, typename DistanceMap,
+ typename PathCountMap>
+ struct visitor_type : public bfs_visitor<>
+ {
+ typedef typename graph_traits<Graph>::edge_descriptor edge_descriptor;
+ typedef typename graph_traits<Graph>::vertex_descriptor
+ vertex_descriptor;
+
+ visitor_type(IncomingMap incoming, DistanceMap distance,
+ PathCountMap path_count,
+ std::stack<vertex_descriptor>& ordered_vertices)
+ : incoming(incoming), distance(distance),
+ path_count(path_count), ordered_vertices(ordered_vertices) { }
+
+ /// Keep track of vertices as they are reached
+ void examine_vertex(vertex_descriptor v, Graph&)
+ {
+ ordered_vertices.push(v);
+ }
+
+ /**
+ * Whenever an edge e = (v, w) is labelled a tree edge, the
+ * incoming edge list for w is set to {(v, w)} and the shortest
+ * path count of w is set to the number of paths that reach {v}.
+ */
+ void tree_edge(edge_descriptor e, Graph& g)
+ {
+ vertex_descriptor v = source(e, g);
+ vertex_descriptor w = target(e, g);
+ put(distance, w, get(distance, v) + 1);
+
+ put(path_count, w, get(path_count, v));
+ incoming[w].push_back(e);
+ }
+
+ /**
+ * If an edge e = (v, w) is not a tree edge, it may still be the
+ * case that we've found more equally-short paths, so include (v, w)
+ * in the incoming edge list of w and add all of the shortest
+ * paths to v to the shortest path count of w.
+ */
+ void non_tree_edge(edge_descriptor e, Graph& g)
+ {
+ vertex_descriptor v = source(e, g);
+ vertex_descriptor w = target(e, g);
+ if (get(distance, w) == get(distance, v) + 1) {
+ put(path_count, w, get(path_count, w) + get(path_count, v));
+ incoming[w].push_back(e);
+ }
+ }
+
+ private:
+ IncomingMap incoming;
+ DistanceMap distance;
+ PathCountMap path_count;
+ std::stack<vertex_descriptor>& ordered_vertices;
+ };
+
+ template<typename Graph, typename IncomingMap, typename DistanceMap,
+ typename PathCountMap, typename VertexIndexMap>
+ void
+ operator()(Graph& g,
+ typename graph_traits<Graph>::vertex_descriptor s,
+ std::stack<typename graph_traits<Graph>::vertex_descriptor>& ov,
+ IncomingMap incoming,
+ DistanceMap distance,
+ PathCountMap path_count,
+ VertexIndexMap vertex_index)
+ {
+ typedef typename graph_traits<Graph>::vertex_descriptor
+ vertex_descriptor;
+
+ visitor_type<Graph, IncomingMap, DistanceMap, PathCountMap>
+ visitor(incoming, distance, path_count, ov);
+
+ std::vector<default_color_type>
+ colors(num_vertices(g), color_traits<default_color_type>::white());
+ boost::queue<vertex_descriptor> Q;
+ breadth_first_visit(g, s, Q, visitor,
+ make_iterator_property_map(colors.begin(),
+ vertex_index));
+ }
+ };
+
+ // When the edge centrality map is a dummy property map, no
+ // initialization is needed.
+ template<typename Iter>
+ inline void
+ init_centrality_map(std::pair<Iter, Iter>, dummy_property_map) { }
+
+ // When we have a real edge centrality map, initialize all of the
+ // centralities to zero.
+ template<typename Iter, typename Centrality>
+ void
+ init_centrality_map(std::pair<Iter, Iter> keys, Centrality centrality_map)
+ {
+ typedef typename property_traits<Centrality>::value_type
+ centrality_type;
+ while (keys.first != keys.second) {
+ put(centrality_map, *keys.first, centrality_type(0));
+ ++keys.first;
+ }
+ }
+
+ // When the edge centrality map is a dummy property map, no update
+ // is performed.
+ template<typename Key, typename T>
+ inline void
+ update_centrality(dummy_property_map, const Key&, const T&) { }
+
+ // When we have a real edge centrality map, add the value to the map
+ template<typename CentralityMap, typename Key, typename T>
+ inline void
+ update_centrality(CentralityMap centrality_map, Key k, const T& x)
+ { put(centrality_map, k, get(centrality_map, k) + x); }
+
+ template<typename Iter>
+ inline void
+ divide_centrality_by_two(std::pair<Iter, Iter>, dummy_property_map) {}
+
+ template<typename Iter, typename CentralityMap>
+ inline void
+ divide_centrality_by_two(std::pair<Iter, Iter> keys,
+ CentralityMap centrality_map)
+ {
+ typename property_traits<CentralityMap>::value_type two(2);
+ while (keys.first != keys.second) {
+ put(centrality_map, *keys.first, get(centrality_map, *keys.first) / two);
+ ++keys.first;
+ }
+ }
+
+ template<typename Graph, typename CentralityMap, typename EdgeCentralityMap,
+ typename IncomingMap, typename DistanceMap,
+ typename DependencyMap, typename PathCountMap,
+ typename VertexIndexMap, typename ShortestPaths>
+ void
+ brandes_betweenness_centrality_impl(const Graph& g,
+ CentralityMap centrality, // C_B
+ EdgeCentralityMap edge_centrality_map,
+ IncomingMap incoming, // P
+ DistanceMap distance, // d
+ DependencyMap dependency, // delta
+ PathCountMap path_count, // sigma
+ VertexIndexMap vertex_index,
+ ShortestPaths shortest_paths)
+ {
+ typedef typename graph_traits<Graph>::vertex_iterator vertex_iterator;
+ typedef typename graph_traits<Graph>::edge_iterator edge_iterator;
+ typedef typename graph_traits<Graph>::vertex_descriptor vertex_descriptor;
+
+ // Initialize centrality
+ init_centrality_map(vertices(g), centrality);
+ init_centrality_map(edges(g), edge_centrality_map);
+
+ std::stack<vertex_descriptor> ordered_vertices;
+ vertex_iterator s, s_end;
+ for (tie(s, s_end) = vertices(g); s != s_end; ++s) {
+ // Initialize for this iteration
+ vertex_iterator w, w_end;
+ for (tie(w, w_end) = vertices(g); w != w_end; ++w) {
+ incoming[*w].clear();
+ put(path_count, *w, 0);
+ put(dependency, *w, 0);
+ }
+ put(path_count, *s, 1);
+
+ // Execute the shortest paths algorithm. This will be either
+ // Dijkstra's algorithm or a customized breadth-first search,
+ // depending on whether the graph is weighted or unweighted.
+ shortest_paths(g, *s, ordered_vertices, incoming, distance,
+ path_count, vertex_index);
+
+ while (!ordered_vertices.empty()) {
+ vertex_descriptor w = ordered_vertices.top();
+ ordered_vertices.pop();
+
+ typedef typename property_traits<IncomingMap>::value_type
+ incoming_type;
+ typedef typename incoming_type::iterator incoming_iterator;
+ typedef typename property_traits<DependencyMap>::value_type
+ dependency_type;
+
+ for (incoming_iterator vw = incoming[w].begin();
+ vw != incoming[w].end(); ++vw) {
+ vertex_descriptor v = source(*vw, g);
+ dependency_type factor = dependency_type(get(path_count, v))
+ / dependency_type(get(path_count, w));
+ factor *= (dependency_type(1) + get(dependency, w));
+ put(dependency, v, get(dependency, v) + factor);
+ update_centrality(edge_centrality_map, *vw, factor);
+ }
+
+ if (w != *s) {
+ update_centrality(centrality, w, get(dependency, w));
+ }
+ }
+ }
+
+ typedef typename graph_traits<Graph>::directed_category directed_category;
+ const bool is_undirected =
+ is_convertible<directed_category*, undirected_tag*>::value;
+ if (is_undirected) {
+ divide_centrality_by_two(vertices(g), centrality);
+ divide_centrality_by_two(edges(g), edge_centrality_map);
+ }
+ }
+
+} } // end namespace detail::graph
+
+template<typename Graph, typename CentralityMap, typename EdgeCentralityMap,
+ typename IncomingMap, typename DistanceMap,
+ typename DependencyMap, typename PathCountMap,
+ typename VertexIndexMap>
+void
+brandes_betweenness_centrality(const Graph& g,
+ CentralityMap centrality, // C_B
+ EdgeCentralityMap edge_centrality_map,
+ IncomingMap incoming, // P
+ DistanceMap distance, // d
+ DependencyMap dependency, // delta
+ PathCountMap path_count, // sigma
+ VertexIndexMap vertex_index)
+{
+ detail::graph::brandes_unweighted_shortest_paths shortest_paths;
+
+ detail::graph::brandes_betweenness_centrality_impl(g, centrality,
+ edge_centrality_map,
+ incoming, distance,
+ dependency, path_count,
+ vertex_index,
+ shortest_paths);
+}
+
+template<typename Graph, typename CentralityMap, typename EdgeCentralityMap,
+ typename IncomingMap, typename DistanceMap,
+ typename DependencyMap, typename PathCountMap,
+ typename VertexIndexMap, typename WeightMap>
+void
+brandes_betweenness_centrality(const Graph& g,
+ CentralityMap centrality, // C_B
+ EdgeCentralityMap edge_centrality_map,
+ IncomingMap incoming, // P
+ DistanceMap distance, // d
+ DependencyMap dependency, // delta
+ PathCountMap path_count, // sigma
+ VertexIndexMap vertex_index,
+ WeightMap weight_map)
+{
+ detail::graph::brandes_dijkstra_shortest_paths<WeightMap>
+ shortest_paths(weight_map);
+
+ detail::graph::brandes_betweenness_centrality_impl(g, centrality,
+ edge_centrality_map,
+ incoming, distance,
+ dependency, path_count,
+ vertex_index,
+ shortest_paths);
+}
+
+namespace detail { namespace graph {
+ template<typename Graph, typename CentralityMap, typename EdgeCentralityMap,
+ typename WeightMap, typename VertexIndexMap>
+ void
+ brandes_betweenness_centrality_dispatch2(const Graph& g,
+ CentralityMap centrality,
+ EdgeCentralityMap edge_centrality_map,
+ WeightMap weight_map,
+ VertexIndexMap vertex_index)
+ {
+ typedef typename graph_traits<Graph>::degree_size_type degree_size_type;
+ typedef typename graph_traits<Graph>::vertex_descriptor vertex_descriptor;
+ typedef typename graph_traits<Graph>::edge_descriptor edge_descriptor;
+ typedef typename mpl::if_c<(is_same<CentralityMap,
+ dummy_property_map>::value),
+ EdgeCentralityMap,
+ CentralityMap>::type a_centrality_map;
+ typedef typename property_traits<a_centrality_map>::value_type
+ centrality_type;
+
+ typename graph_traits<Graph>::vertices_size_type V = num_vertices(g);
+
+ std::vector<std::vector<edge_descriptor> > incoming(V);
+ std::vector<centrality_type> distance(V);
+ std::vector<centrality_type> dependency(V);
+ std::vector<degree_size_type> path_count(V);
+
+ brandes_betweenness_centrality(
+ g, centrality, edge_centrality_map,
+ make_iterator_property_map(incoming.begin(), vertex_index),
+ make_iterator_property_map(distance.begin(), vertex_index),
+ make_iterator_property_map(dependency.begin(), vertex_index),
+ make_iterator_property_map(path_count.begin(), vertex_index),
+ vertex_index,
+ weight_map);
+ }
+
+
+ template<typename Graph, typename CentralityMap, typename EdgeCentralityMap,
+ typename VertexIndexMap>
+ void
+ brandes_betweenness_centrality_dispatch2(const Graph& g,
+ CentralityMap centrality,
+ EdgeCentralityMap edge_centrality_map,
+ VertexIndexMap vertex_index)
+ {
+ typedef typename graph_traits<Graph>::degree_size_type degree_size_type;
+ typedef typename graph_traits<Graph>::vertex_descriptor vertex_descriptor;
+ typedef typename graph_traits<Graph>::edge_descriptor edge_descriptor;
+ typedef typename mpl::if_c<(is_same<CentralityMap,
+ dummy_property_map>::value),
+ EdgeCentralityMap,
+ CentralityMap>::type a_centrality_map;
+ typedef typename property_traits<a_centrality_map>::value_type
+ centrality_type;
+
+ typename graph_traits<Graph>::vertices_size_type V = num_vertices(g);
+
+ std::vector<std::vector<edge_descriptor> > incoming(V);
+ std::vector<centrality_type> distance(V);
+ std::vector<centrality_type> dependency(V);
+ std::vector<degree_size_type> path_count(V);
+
+ brandes_betweenness_centrality(
+ g, centrality, edge_centrality_map,
+ make_iterator_property_map(incoming.begin(), vertex_index),
+ make_iterator_property_map(distance.begin(), vertex_index),
+ make_iterator_property_map(dependency.begin(), vertex_index),
+ make_iterator_property_map(path_count.begin(), vertex_index),
+ vertex_index);
+ }
+
+ template<typename WeightMap>
+ struct brandes_betweenness_centrality_dispatch1
+ {
+ template<typename Graph, typename CentralityMap,
+ typename EdgeCentralityMap, typename VertexIndexMap>
+ static void
+ run(const Graph& g, CentralityMap centrality,
+ EdgeCentralityMap edge_centrality_map, VertexIndexMap vertex_index,
+ WeightMap weight_map)
+ {
+ brandes_betweenness_centrality_dispatch2(g, centrality, edge_centrality_map,
+ weight_map, vertex_index);
+ }
+ };
+
+ template<>
+ struct brandes_betweenness_centrality_dispatch1<error_property_not_found>
+ {
+ template<typename Graph, typename CentralityMap,
+ typename EdgeCentralityMap, typename VertexIndexMap>
+ static void
+ run(const Graph& g, CentralityMap centrality,
+ EdgeCentralityMap edge_centrality_map, VertexIndexMap vertex_index,
+ error_property_not_found)
+ {
+ brandes_betweenness_centrality_dispatch2(g, centrality, edge_centrality_map,
+ vertex_index);
+ }
+ };
+
+} } // end namespace detail::graph
+
+template<typename Graph, typename Param, typename Tag, typename Rest>
+void
+brandes_betweenness_centrality(const Graph& g,
+ const bgl_named_params<Param,Tag,Rest>& params)
+{
+ typedef bgl_named_params<Param,Tag,Rest> named_params;
+
+ typedef typename property_value<named_params, edge_weight_t>::type ew;
+ detail::graph::brandes_betweenness_centrality_dispatch1<ew>::run(
+ g,
+ choose_param(get_param(params, vertex_centrality),
+ dummy_property_map()),
+ choose_param(get_param(params, edge_centrality),
+ dummy_property_map()),
+ choose_const_pmap(get_param(params, vertex_index), g, vertex_index),
+ get_param(params, edge_weight));
+}
+
+template<typename Graph, typename CentralityMap>
+void
+brandes_betweenness_centrality(const Graph& g, CentralityMap centrality)
+{
+ detail::graph::brandes_betweenness_centrality_dispatch2(
+ g, centrality, dummy_property_map(), get(vertex_index, g));
+}
+
+template<typename Graph, typename CentralityMap, typename EdgeCentralityMap>
+void
+brandes_betweenness_centrality(const Graph& g, CentralityMap centrality,
+ EdgeCentralityMap edge_centrality_map)
+{
+ detail::graph::brandes_betweenness_centrality_dispatch2(
+ g, centrality, edge_centrality_map, get(vertex_index, g));
+}
+
+/**
+ * Converts "absolute" betweenness centrality (as computed by the
+ * brandes_betweenness_centrality algorithm) in the centrality map
+ * into "relative" centrality. The result is placed back into the
+ * given centrality map.
+ */
+template<typename Graph, typename CentralityMap>
+void
+relative_betweenness_centrality(const Graph& g, CentralityMap centrality)
+{
+ typedef typename graph_traits<Graph>::vertex_iterator vertex_iterator;
+ typedef typename property_traits<CentralityMap>::value_type centrality_type;
+
+ typename graph_traits<Graph>::vertices_size_type n = num_vertices(g);
+ centrality_type factor = centrality_type(2)/centrality_type(n*n - 3*n + 2);
+ vertex_iterator v, v_end;
+ for (tie(v, v_end) = vertices(g); v != v_end; ++v) {
+ put(centrality, *v, factor * get(centrality, *v));
+ }
+}
+
+// Compute the central point dominance of a graph.
+template<typename Graph, typename CentralityMap>
+typename property_traits<CentralityMap>::value_type
+central_point_dominance(const Graph& g, CentralityMap centrality)
+{
+ using std::max;
+
+ typedef typename graph_traits<Graph>::vertex_iterator vertex_iterator;
+ typedef typename property_traits<CentralityMap>::value_type centrality_type;
+
+ typename graph_traits<Graph>::vertices_size_type n = num_vertices(g);
+
+ // Find max centrality
+ centrality_type max_centrality(0);
+ vertex_iterator v, v_end;
+ for (tie(v, v_end) = vertices(g); v != v_end; ++v) {
+ max_centrality = (max)(max_centrality, get(centrality, *v));
+ }
+
+ // Compute central point dominance
+ centrality_type sum(0);
+ for (tie(v, v_end) = vertices(g); v != v_end; ++v) {
+ sum += (max_centrality - get(centrality, *v));
+ }
+ return sum/(n-1);
+}
+
+} // end namespace boost
+
+#endif // BOOST_GRAPH_BRANDES_BETWEENNESS_CENTRALITY_HPP
diff --git a/boost/boost/graph/biconnected_components.hpp b/boost/boost/graph/biconnected_components.hpp
new file mode 100644
index 00000000000..2d8b271d885
--- /dev/null
+++ b/boost/boost/graph/biconnected_components.hpp
@@ -0,0 +1,415 @@
+// Copyright (c) Jeremy Siek 2001
+// Copyright (c) Douglas Gregor 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)
+
+// NOTE: this final is generated by libs/graph/doc/biconnected_components.w
+
+#ifndef BOOST_GRAPH_BICONNECTED_COMPONENTS_HPP
+#define BOOST_GRAPH_BICONNECTED_COMPONENTS_HPP
+
+#include <stack>
+#include <vector>
+#include <algorithm> // for std::min and std::max
+#include <boost/config.hpp>
+#include <boost/limits.hpp>
+#include <boost/graph/graph_traits.hpp>
+#include <boost/graph/graph_concepts.hpp>
+#include <boost/property_map.hpp>
+#include <boost/graph/depth_first_search.hpp>
+#include <boost/graph/graph_utility.hpp>
+
+namespace boost
+{
+ namespace detail
+ {
+ template<typename ComponentMap, typename DiscoverTimeMap,
+ typename LowPointMap, typename PredecessorMap,
+ typename OutputIterator, typename Stack,
+ typename DFSVisitor>
+ struct biconnected_components_visitor : public dfs_visitor<>
+ {
+ biconnected_components_visitor
+ (ComponentMap comp, std::size_t& c, DiscoverTimeMap dtm,
+ std::size_t& dfs_time, LowPointMap lowpt, PredecessorMap pred,
+ OutputIterator out, Stack& S, DFSVisitor vis)
+ : comp(comp), c(c), dtm(dtm), dfs_time(dfs_time), lowpt(lowpt),
+ pred(pred), out(out), S(S), vis(vis) { }
+
+ template <typename Vertex, typename Graph>
+ void initialize_vertex(const Vertex& u, Graph& g)
+ {
+ vis.initialize_vertex(u, g);
+ }
+
+ template <typename Vertex, typename Graph>
+ void start_vertex(const Vertex& u, Graph& g)
+ {
+ put(pred, u, u);
+ vis.start_vertex(u, g);
+ }
+
+ template <typename Vertex, typename Graph>
+ void discover_vertex(const Vertex& u, Graph& g)
+ {
+ put(dtm, u, ++dfs_time);
+ put(lowpt, u, get(dtm, u));
+ vis.discover_vertex(u, g);
+ }
+
+ template <typename Edge, typename Graph>
+ void examine_edge(const Edge& e, Graph& g)
+ {
+ vis.examine_edge(e, g);
+ }
+
+ template <typename Edge, typename Graph>
+ void tree_edge(const Edge& e, Graph& g)
+ {
+ S.push(e);
+ put(pred, target(e, g), source(e, g));
+ vis.tree_edge(e, g);
+ }
+
+ template <typename Edge, typename Graph>
+ void back_edge(const Edge& e, Graph& g)
+ {
+ BOOST_USING_STD_MIN();
+
+ if ( target(e, g) != get(pred, source(e, g)) ) {
+ S.push(e);
+ put(lowpt, source(e, g),
+ min BOOST_PREVENT_MACRO_SUBSTITUTION(get(lowpt, source(e, g)),
+ get(dtm, target(e, g))));
+ vis.back_edge(e, g);
+ }
+ }
+
+ template <typename Edge, typename Graph>
+ void forward_or_cross_edge(const Edge& e, Graph& g)
+ {
+ vis.forward_or_cross_edge(e, g);
+ }
+
+ template <typename Vertex, typename Graph>
+ void finish_vertex(const Vertex& u, Graph& g)
+ {
+ BOOST_USING_STD_MIN();
+ Vertex parent = get(pred, u);
+ const std::size_t dtm_of_dubious_parent = get(dtm, parent);
+ bool is_art_point = false;
+ if ( dtm_of_dubious_parent > get(dtm, u) ) {
+ parent = get(pred, parent);
+ is_art_point = true;
+ put(pred, get(pred, u), u);
+ put(pred, u, parent);
+ }
+
+ if ( parent == u ) { // at top
+ if ( get(dtm, u) + 1 == dtm_of_dubious_parent )
+ is_art_point = false;
+ } else {
+ put(lowpt, parent,
+ min BOOST_PREVENT_MACRO_SUBSTITUTION(get(lowpt, parent),
+ get(lowpt, u)));
+
+ if (get(lowpt, u) >= get(dtm, parent)) {
+ if ( get(dtm, parent) > get(dtm, get(pred, parent)) ) {
+ put(pred, u, get(pred, parent));
+ put(pred, parent, u);
+ }
+
+ while ( get(dtm, source(S.top(), g)) >= get(dtm, u) ) {
+ put(comp, S.top(), c);
+ S.pop();
+ }
+ put(comp, S.top(), c);
+ S.pop();
+ ++c;
+ if ( S.empty() ) {
+ put(pred, u, parent);
+ put(pred, parent, u);
+ }
+ }
+ }
+ if ( is_art_point )
+ *out++ = u;
+ vis.finish_vertex(u, g);
+ }
+
+ ComponentMap comp;
+ std::size_t& c;
+ DiscoverTimeMap dtm;
+ std::size_t& dfs_time;
+ LowPointMap lowpt;
+ PredecessorMap pred;
+ OutputIterator out;
+ Stack& S;
+ DFSVisitor vis;
+ };
+
+ template<typename Graph, typename ComponentMap, typename OutputIterator,
+ typename VertexIndexMap, typename DiscoverTimeMap, typename LowPointMap,
+ typename PredecessorMap, typename DFSVisitor>
+ std::pair<std::size_t, OutputIterator>
+ biconnected_components_impl(const Graph & g, ComponentMap comp,
+ OutputIterator out, VertexIndexMap index_map, DiscoverTimeMap dtm,
+ LowPointMap lowpt, PredecessorMap pred, DFSVisitor dfs_vis)
+ {
+ typedef typename graph_traits<Graph>::vertex_descriptor vertex_t;
+ typedef typename graph_traits<Graph>::edge_descriptor edge_t;
+ function_requires<VertexListGraphConcept<Graph> >();
+ function_requires<IncidenceGraphConcept<Graph> >();
+ function_requires<WritablePropertyMapConcept<ComponentMap, edge_t> >();
+ function_requires<ReadWritePropertyMapConcept<DiscoverTimeMap,
+ vertex_t> >();
+ function_requires<ReadWritePropertyMapConcept<LowPointMap, vertex_t > >();
+ function_requires<ReadWritePropertyMapConcept<PredecessorMap,
+ vertex_t> >();
+
+ std::size_t num_components = 0;
+ std::size_t dfs_time = 0;
+ std::stack<edge_t> S;
+
+ biconnected_components_visitor<ComponentMap, DiscoverTimeMap,
+ LowPointMap, PredecessorMap, OutputIterator, std::stack<edge_t>,
+ DFSVisitor>
+ vis(comp, num_components, dtm, dfs_time, lowpt, pred, out,
+ S, dfs_vis);
+
+ depth_first_search(g, visitor(vis).vertex_index_map(index_map));
+
+ return std::pair<std::size_t, OutputIterator>(num_components, vis.out);
+ }
+
+ template <typename PredecessorMap>
+ struct bicomp_dispatch3
+ {
+ template<typename Graph, typename ComponentMap, typename OutputIterator,
+ typename VertexIndexMap, typename DiscoverTimeMap,
+ typename LowPointMap, class P, class T, class R>
+ static std::pair<std::size_t, OutputIterator> apply (const Graph & g,
+ ComponentMap comp, OutputIterator out, VertexIndexMap index_map,
+ DiscoverTimeMap dtm, LowPointMap lowpt,
+ const bgl_named_params<P, T, R>& params, PredecessorMap pred)
+ {
+ return biconnected_components_impl
+ (g, comp, out, index_map, dtm, lowpt, pred,
+ choose_param(get_param(params, graph_visitor),
+ make_dfs_visitor(null_visitor())));
+ }
+ };
+
+ template <>
+ struct bicomp_dispatch3<error_property_not_found>
+ {
+ template<typename Graph, typename ComponentMap, typename OutputIterator,
+ typename VertexIndexMap, typename DiscoverTimeMap,
+ typename LowPointMap, class P, class T, class R>
+ static std::pair<std::size_t, OutputIterator> apply (const Graph & g,
+ ComponentMap comp, OutputIterator out, VertexIndexMap index_map,
+ DiscoverTimeMap dtm, LowPointMap lowpt,
+ const bgl_named_params<P, T, R>& params,
+ error_property_not_found)
+ {
+ typedef typename graph_traits<Graph>::vertex_descriptor vertex_t;
+ std::vector<vertex_t> pred(num_vertices(g));
+ vertex_t vert = graph_traits<Graph>::null_vertex();
+
+ return biconnected_components_impl
+ (g, comp, out, index_map, dtm, lowpt,
+ make_iterator_property_map(pred.begin(), index_map, vert),
+ choose_param(get_param(params, graph_visitor),
+ make_dfs_visitor(null_visitor())));
+ }
+ };
+
+ template <typename LowPointMap>
+ struct bicomp_dispatch2
+ {
+ template<typename Graph, typename ComponentMap, typename OutputIterator,
+ typename VertexIndexMap, typename DiscoverTimeMap,
+ typename P, typename T, typename R>
+ static std::pair<std::size_t, OutputIterator> apply (const Graph& g,
+ ComponentMap comp, OutputIterator out, VertexIndexMap index_map,
+ DiscoverTimeMap dtm, const bgl_named_params<P, T, R>& params,
+ LowPointMap lowpt)
+ {
+ typedef typename property_value< bgl_named_params<P,T,R>,
+ vertex_predecessor_t>::type dispatch_type;
+
+ return bicomp_dispatch3<dispatch_type>::apply
+ (g, comp, out, index_map, dtm, lowpt, params,
+ get_param(params, vertex_predecessor));
+ }
+ };
+
+
+ template <>
+ struct bicomp_dispatch2<error_property_not_found>
+ {
+ template<typename Graph, typename ComponentMap, typename OutputIterator,
+ typename VertexIndexMap, typename DiscoverTimeMap,
+ typename P, typename T, typename R>
+ static std::pair<std::size_t, OutputIterator> apply (const Graph& g,
+ ComponentMap comp, OutputIterator out, VertexIndexMap index_map,
+ DiscoverTimeMap dtm, const bgl_named_params<P, T, R>& params,
+ error_property_not_found)
+ {
+ typedef typename graph_traits<Graph>::vertices_size_type
+ vertices_size_type;
+ std::vector<vertices_size_type> lowpt(num_vertices(g));
+ vertices_size_type vst(0);
+
+ typedef typename property_value< bgl_named_params<P,T,R>,
+ vertex_predecessor_t>::type dispatch_type;
+
+ return bicomp_dispatch3<dispatch_type>::apply
+ (g, comp, out, index_map, dtm,
+ make_iterator_property_map(lowpt.begin(), index_map, vst),
+ params, get_param(params, vertex_predecessor));
+ }
+ };
+
+ template <typename DiscoverTimeMap>
+ struct bicomp_dispatch1
+ {
+ template<typename Graph, typename ComponentMap, typename OutputIterator,
+ typename VertexIndexMap, class P, class T, class R>
+ static std::pair<std::size_t, OutputIterator> apply(const Graph& g,
+ ComponentMap comp, OutputIterator out, VertexIndexMap index_map,
+ const bgl_named_params<P, T, R>& params, DiscoverTimeMap dtm)
+ {
+ typedef typename property_value< bgl_named_params<P,T,R>,
+ vertex_lowpoint_t>::type dispatch_type;
+
+ return bicomp_dispatch2<dispatch_type>::apply
+ (g, comp, out, index_map, dtm, params,
+ get_param(params, vertex_lowpoint));
+ }
+ };
+
+ template <>
+ struct bicomp_dispatch1<error_property_not_found>
+ {
+ template<typename Graph, typename ComponentMap, typename OutputIterator,
+ typename VertexIndexMap, class P, class T, class R>
+ static std::pair<std::size_t, OutputIterator> apply(const Graph& g,
+ ComponentMap comp, OutputIterator out, VertexIndexMap index_map,
+ const bgl_named_params<P, T, R>& params, error_property_not_found)
+ {
+ typedef typename graph_traits<Graph>::vertices_size_type
+ vertices_size_type;
+ std::vector<vertices_size_type> discover_time(num_vertices(g));
+ vertices_size_type vst(0);
+
+ typedef typename property_value< bgl_named_params<P,T,R>,
+ vertex_lowpoint_t>::type dispatch_type;
+
+ return bicomp_dispatch2<dispatch_type>::apply
+ (g, comp, out, index_map,
+ make_iterator_property_map(discover_time.begin(), index_map, vst),
+ params, get_param(params, vertex_lowpoint));
+ }
+ };
+
+ }
+
+ template<typename Graph, typename ComponentMap, typename OutputIterator,
+ typename DiscoverTimeMap, typename LowPointMap>
+ std::pair<std::size_t, OutputIterator>
+ biconnected_components(const Graph& g, ComponentMap comp,
+ OutputIterator out, DiscoverTimeMap dtm, LowPointMap lowpt)
+ {
+ typedef detail::error_property_not_found dispatch_type;
+
+ return detail::bicomp_dispatch3<dispatch_type>::apply
+ (g, comp, out,
+ get(vertex_index, g),
+ dtm, lowpt,
+ bgl_named_params<int, buffer_param_t>(0),
+ detail::error_property_not_found());
+ }
+
+ template <typename Graph, typename ComponentMap, typename OutputIterator,
+ typename P, typename T, typename R>
+ std::pair<std::size_t, OutputIterator>
+ biconnected_components(const Graph& g, ComponentMap comp, OutputIterator out,
+ const bgl_named_params<P, T, R>& params)
+ {
+ typedef typename property_value< bgl_named_params<P,T,R>,
+ vertex_discover_time_t>::type dispatch_type;
+
+ return detail::bicomp_dispatch1<dispatch_type>::apply(g, comp, out,
+ choose_const_pmap(get_param(params, vertex_index), g, vertex_index),
+ params, get_param(params, vertex_discover_time));
+ }
+
+ template < typename Graph, typename ComponentMap, typename OutputIterator>
+ std::pair<std::size_t, OutputIterator>
+ biconnected_components(const Graph& g, ComponentMap comp, OutputIterator out)
+ {
+ return biconnected_components(g, comp, out,
+ bgl_named_params<int, buffer_param_t>(0));
+ }
+
+ namespace graph_detail {
+ struct dummy_output_iterator
+ {
+ typedef std::output_iterator_tag iterator_category;
+ typedef void value_type;
+ typedef void pointer;
+ typedef void difference_type;
+
+ struct reference {
+ template<typename T>
+ reference& operator=(const T&) { return *this; }
+ };
+
+ reference operator*() const { return reference(); }
+ dummy_output_iterator& operator++() { return *this; }
+ dummy_output_iterator operator++(int) { return *this; }
+ };
+ } // end namespace graph_detail
+
+ template <typename Graph, typename ComponentMap,
+ typename P, typename T, typename R>
+ std::size_t
+ biconnected_components(const Graph& g, ComponentMap comp,
+ const bgl_named_params<P, T, R>& params)
+ {
+ return biconnected_components(g, comp,
+ graph_detail::dummy_output_iterator(), params).first;
+ }
+
+ template <typename Graph, typename ComponentMap>
+ std::size_t
+ biconnected_components(const Graph& g, ComponentMap comp)
+ {
+ return biconnected_components(g, comp,
+ graph_detail::dummy_output_iterator()).first;
+ }
+
+ template<typename Graph, typename OutputIterator,
+ typename P, typename T, typename R>
+ OutputIterator
+ articulation_points(const Graph& g, OutputIterator out,
+ const bgl_named_params<P, T, R>& params)
+ {
+ return biconnected_components(g, dummy_property_map(), out,
+ params).second;
+ }
+
+ template<typename Graph, typename OutputIterator>
+ OutputIterator
+ articulation_points(const Graph& g, OutputIterator out)
+ {
+ return biconnected_components(g, dummy_property_map(), out,
+ bgl_named_params<int, buffer_param_t>(0)).second;
+ }
+
+} // namespace boost
+
+#endif /* BOOST_GRAPH_BICONNECTED_COMPONENTS_HPP */
diff --git a/boost/boost/graph/breadth_first_search.hpp b/boost/boost/graph/breadth_first_search.hpp
new file mode 100644
index 00000000000..d8ffd7fed57
--- /dev/null
+++ b/boost/boost/graph/breadth_first_search.hpp
@@ -0,0 +1,293 @@
+//
+//=======================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// 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_GRAPH_BREADTH_FIRST_SEARCH_HPP
+#define BOOST_GRAPH_BREADTH_FIRST_SEARCH_HPP
+
+/*
+ Breadth First Search Algorithm (Cormen, Leiserson, and Rivest p. 470)
+*/
+#include <boost/config.hpp>
+#include <vector>
+#include <boost/pending/queue.hpp>
+#include <boost/graph/graph_traits.hpp>
+#include <boost/graph/graph_concepts.hpp>
+#include <boost/graph/visitors.hpp>
+#include <boost/graph/named_function_params.hpp>
+
+namespace boost {
+
+ template <class Visitor, class Graph>
+ struct BFSVisitorConcept {
+ void constraints() {
+ function_requires< CopyConstructibleConcept<Visitor> >();
+ vis.initialize_vertex(u, g);
+ vis.discover_vertex(u, g);
+ vis.examine_vertex(u, g);
+ vis.examine_edge(e, g);
+ vis.tree_edge(e, g);
+ vis.non_tree_edge(e, g);
+ vis.gray_target(e, g);
+ vis.black_target(e, g);
+ vis.finish_vertex(u, g);
+ }
+ Visitor vis;
+ Graph g;
+ typename graph_traits<Graph>::vertex_descriptor u;
+ typename graph_traits<Graph>::edge_descriptor e;
+ };
+
+
+ template <class IncidenceGraph, class Buffer, class BFSVisitor,
+ class ColorMap>
+ void breadth_first_visit
+ (const IncidenceGraph& g,
+ typename graph_traits<IncidenceGraph>::vertex_descriptor s,
+ Buffer& Q, BFSVisitor vis, ColorMap color)
+ {
+ function_requires< IncidenceGraphConcept<IncidenceGraph> >();
+ typedef graph_traits<IncidenceGraph> GTraits;
+ typedef typename GTraits::vertex_descriptor Vertex;
+ typedef typename GTraits::edge_descriptor Edge;
+ function_requires< BFSVisitorConcept<BFSVisitor, IncidenceGraph> >();
+ function_requires< ReadWritePropertyMapConcept<ColorMap, Vertex> >();
+ typedef typename property_traits<ColorMap>::value_type ColorValue;
+ typedef color_traits<ColorValue> Color;
+ typename GTraits::out_edge_iterator ei, ei_end;
+
+ put(color, s, Color::gray()); vis.discover_vertex(s, g);
+ Q.push(s);
+ while (! Q.empty()) {
+ Vertex u = Q.top(); Q.pop(); vis.examine_vertex(u, g);
+ for (tie(ei, ei_end) = out_edges(u, g); ei != ei_end; ++ei) {
+ Vertex v = target(*ei, g); vis.examine_edge(*ei, g);
+ ColorValue v_color = get(color, v);
+ if (v_color == Color::white()) { vis.tree_edge(*ei, g);
+ put(color, v, Color::gray()); vis.discover_vertex(v, g);
+ Q.push(v);
+ } else { vis.non_tree_edge(*ei, g);
+ if (v_color == Color::gray()) vis.gray_target(*ei, g);
+ else vis.black_target(*ei, g);
+ }
+ } // end for
+ put(color, u, Color::black()); vis.finish_vertex(u, g);
+ } // end while
+ } // breadth_first_visit
+
+
+ template <class VertexListGraph, class Buffer, class BFSVisitor,
+ class ColorMap>
+ void breadth_first_search
+ (const VertexListGraph& g,
+ typename graph_traits<VertexListGraph>::vertex_descriptor s,
+ Buffer& Q, BFSVisitor vis, ColorMap color)
+ {
+ // Initialization
+ typedef typename property_traits<ColorMap>::value_type ColorValue;
+ typedef color_traits<ColorValue> Color;
+ typename boost::graph_traits<VertexListGraph>::vertex_iterator i, i_end;
+ for (tie(i, i_end) = vertices(g); i != i_end; ++i) {
+ vis.initialize_vertex(*i, g);
+ put(color, *i, Color::white());
+ }
+ breadth_first_visit(g, s, Q, vis, color);
+ }
+
+
+ template <class Visitors = null_visitor>
+ class bfs_visitor {
+ public:
+ bfs_visitor() { }
+ bfs_visitor(Visitors vis) : m_vis(vis) { }
+
+ template <class Vertex, class Graph>
+ void initialize_vertex(Vertex u, Graph& g) {
+ invoke_visitors(m_vis, u, g, ::boost::on_initialize_vertex());
+ }
+ template <class Vertex, class Graph>
+ void discover_vertex(Vertex u, Graph& g) {
+ invoke_visitors(m_vis, u, g, ::boost::on_discover_vertex());
+ }
+ template <class Vertex, class Graph>
+ void examine_vertex(Vertex u, Graph& g) {
+ invoke_visitors(m_vis, u, g, ::boost::on_examine_vertex());
+ }
+ template <class Edge, class Graph>
+ void examine_edge(Edge e, Graph& g) {
+ invoke_visitors(m_vis, e, g, ::boost::on_examine_edge());
+ }
+ template <class Edge, class Graph>
+ void tree_edge(Edge e, Graph& g) {
+ invoke_visitors(m_vis, e, g, ::boost::on_tree_edge());
+ }
+ template <class Edge, class Graph>
+ void non_tree_edge(Edge e, Graph& g) {
+ invoke_visitors(m_vis, e, g, ::boost::on_non_tree_edge());
+ }
+ template <class Edge, class Graph>
+ void gray_target(Edge e, Graph& g) {
+ invoke_visitors(m_vis, e, g, ::boost::on_gray_target());
+ }
+ template <class Edge, class Graph>
+ void black_target(Edge e, Graph& g) {
+ invoke_visitors(m_vis, e, g, ::boost::on_black_target());
+ }
+ template <class Vertex, class Graph>
+ void finish_vertex(Vertex u, Graph& g) {
+ invoke_visitors(m_vis, u, g, ::boost::on_finish_vertex());
+ }
+
+ BOOST_GRAPH_EVENT_STUB(on_initialize_vertex,bfs)
+ BOOST_GRAPH_EVENT_STUB(on_discover_vertex,bfs)
+ BOOST_GRAPH_EVENT_STUB(on_examine_vertex,bfs)
+ BOOST_GRAPH_EVENT_STUB(on_examine_edge,bfs)
+ BOOST_GRAPH_EVENT_STUB(on_tree_edge,bfs)
+ BOOST_GRAPH_EVENT_STUB(on_non_tree_edge,bfs)
+ BOOST_GRAPH_EVENT_STUB(on_gray_target,bfs)
+ BOOST_GRAPH_EVENT_STUB(on_black_target,bfs)
+ BOOST_GRAPH_EVENT_STUB(on_finish_vertex,bfs)
+
+ protected:
+ Visitors m_vis;
+ };
+ template <class Visitors>
+ bfs_visitor<Visitors>
+ make_bfs_visitor(Visitors vis) {
+ return bfs_visitor<Visitors>(vis);
+ }
+ typedef bfs_visitor<> default_bfs_visitor;
+
+
+ namespace detail {
+
+ template <class VertexListGraph, class ColorMap, class BFSVisitor,
+ class P, class T, class R>
+ void bfs_helper
+ (VertexListGraph& g,
+ typename graph_traits<VertexListGraph>::vertex_descriptor s,
+ ColorMap color,
+ BFSVisitor vis,
+ const bgl_named_params<P, T, R>& params)
+ {
+ typedef graph_traits<VertexListGraph> Traits;
+ // Buffer default
+ typedef typename Traits::vertex_descriptor Vertex;
+ typedef boost::queue<Vertex> queue_t;
+ queue_t Q;
+ detail::wrap_ref<queue_t> Qref(Q);
+ breadth_first_search
+ (g, s,
+ choose_param(get_param(params, buffer_param_t()), Qref).ref,
+ vis, color);
+ }
+
+ //-------------------------------------------------------------------------
+ // Choose between default color and color parameters. Using
+ // function dispatching so that we don't require vertex index if
+ // the color default is not being used.
+
+ template <class ColorMap>
+ struct bfs_dispatch {
+ template <class VertexListGraph, class P, class T, class R>
+ static void apply
+ (VertexListGraph& g,
+ typename graph_traits<VertexListGraph>::vertex_descriptor s,
+ const bgl_named_params<P, T, R>& params,
+ ColorMap color)
+ {
+ bfs_helper
+ (g, s, color,
+ choose_param(get_param(params, graph_visitor),
+ make_bfs_visitor(null_visitor())),
+ params);
+ }
+ };
+
+ template <>
+ struct bfs_dispatch<detail::error_property_not_found> {
+ template <class VertexListGraph, class P, class T, class R>
+ static void apply
+ (VertexListGraph& g,
+ typename graph_traits<VertexListGraph>::vertex_descriptor s,
+ const bgl_named_params<P, T, R>& params,
+ detail::error_property_not_found)
+ {
+ std::vector<default_color_type> color_vec(num_vertices(g));
+ default_color_type c = white_color;
+ null_visitor null_vis;
+
+ bfs_helper
+ (g, s,
+ make_iterator_property_map
+ (color_vec.begin(),
+ choose_const_pmap(get_param(params, vertex_index),
+ g, vertex_index), c),
+ choose_param(get_param(params, graph_visitor),
+ make_bfs_visitor(null_vis)),
+ params);
+ }
+ };
+
+ } // namespace detail
+
+
+ // Named Parameter Variant
+ template <class VertexListGraph, class P, class T, class R>
+ void breadth_first_search
+ (const VertexListGraph& g,
+ typename graph_traits<VertexListGraph>::vertex_descriptor s,
+ const bgl_named_params<P, T, R>& params)
+ {
+ // The graph is passed by *const* reference so that graph adaptors
+ // (temporaries) can be passed into this function. However, the
+ // graph is not really const since we may write to property maps
+ // of the graph.
+ VertexListGraph& ng = const_cast<VertexListGraph&>(g);
+ typedef typename property_value< bgl_named_params<P,T,R>,
+ vertex_color_t>::type C;
+ detail::bfs_dispatch<C>::apply(ng, s, params,
+ get_param(params, vertex_color));
+ }
+
+
+ // This version does not initialize colors, user has to.
+
+ template <class IncidenceGraph, class P, class T, class R>
+ void breadth_first_visit
+ (const IncidenceGraph& g,
+ typename graph_traits<IncidenceGraph>::vertex_descriptor s,
+ const bgl_named_params<P, T, R>& params)
+ {
+ // The graph is passed by *const* reference so that graph adaptors
+ // (temporaries) can be passed into this function. However, the
+ // graph is not really const since we may write to property maps
+ // of the graph.
+ IncidenceGraph& ng = const_cast<IncidenceGraph&>(g);
+
+ typedef graph_traits<IncidenceGraph> Traits;
+ // Buffer default
+ typedef typename Traits::vertex_descriptor vertex_descriptor;
+ typedef boost::queue<vertex_descriptor> queue_t;
+ queue_t Q;
+ detail::wrap_ref<queue_t> Qref(Q);
+
+ breadth_first_visit
+ (ng, s,
+ choose_param(get_param(params, buffer_param_t()), Qref).ref,
+ choose_param(get_param(params, graph_visitor),
+ make_bfs_visitor(null_visitor())),
+ choose_pmap(get_param(params, vertex_color), ng, vertex_color)
+ );
+ }
+
+} // namespace boost
+
+#endif // BOOST_GRAPH_BREADTH_FIRST_SEARCH_HPP
+
diff --git a/boost/boost/graph/circle_layout.hpp b/boost/boost/graph/circle_layout.hpp
new file mode 100644
index 00000000000..b63f8165c38
--- /dev/null
+++ b/boost/boost/graph/circle_layout.hpp
@@ -0,0 +1,55 @@
+// Copyright 2004 The Trustees of Indiana University.
+
+// 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)
+
+// Authors: Douglas Gregor
+// Andrew Lumsdaine
+#ifndef BOOST_GRAPH_CIRCLE_LAYOUT_HPP
+#define BOOST_GRAPH_CIRCLE_LAYOUT_HPP
+#include <cmath>
+#include <utility>
+#include <boost/graph/graph_traits.hpp>
+
+namespace boost {
+ /**
+ * \brief Layout the graph with the vertices at the points of a regular
+ * n-polygon.
+ *
+ * The distance from the center of the polygon to each point is
+ * determined by the @p radius parameter. The @p position parameter
+ * must be an Lvalue Property Map whose value type is a class type
+ * containing @c x and @c y members that will be set to the @c x and
+ * @c y coordinates.
+ */
+ template<typename VertexListGraph, typename PositionMap, typename Radius>
+ void
+ circle_graph_layout(const VertexListGraph& g, PositionMap position,
+ Radius radius)
+ {
+ const double pi = 3.14159;
+
+#ifndef BOOST_NO_STDC_NAMESPACE
+ using std::sin;
+ using std::cos;
+#endif // BOOST_NO_STDC_NAMESPACE
+
+ typedef typename graph_traits<VertexListGraph>::vertices_size_type
+ vertices_size_type;
+
+ vertices_size_type n = num_vertices(g);
+
+ typedef typename graph_traits<VertexListGraph>::vertex_iterator
+ vertex_iterator;
+
+ vertices_size_type i = 0;
+ for(std::pair<vertex_iterator, vertex_iterator> v = vertices(g);
+ v.first != v.second; ++v.first, ++i) {
+ position[*v.first].x = radius * cos(i * 2 * pi / n);
+ position[*v.first].y = radius * sin(i * 2 * pi / n);
+ }
+ }
+} // end namespace boost
+
+#endif // BOOST_GRAPH_CIRCLE_LAYOUT_HPP
diff --git a/boost/boost/graph/compressed_sparse_row_graph.hpp b/boost/boost/graph/compressed_sparse_row_graph.hpp
new file mode 100644
index 00000000000..161929cd7f7
--- /dev/null
+++ b/boost/boost/graph/compressed_sparse_row_graph.hpp
@@ -0,0 +1,799 @@
+// Copyright 2005-2006 The Trustees of Indiana University.
+
+// 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)
+
+// Authors: Jeremiah Willcock
+// Douglas Gregor
+// Andrew Lumsdaine
+
+// Compressed sparse row graph type
+
+#ifndef BOOST_GRAPH_COMPRESSED_SPARSE_ROW_GRAPH_HPP
+#define BOOST_GRAPH_COMPRESSED_SPARSE_ROW_GRAPH_HPP
+
+#include <vector>
+#include <utility>
+#include <algorithm>
+#include <climits>
+#include <iterator>
+#include <boost/graph/graph_traits.hpp>
+#include <boost/graph/properties.hpp>
+#include <boost/graph/detail/indexed_properties.hpp>
+#include <boost/iterator/counting_iterator.hpp>
+#include <boost/integer.hpp>
+#include <boost/iterator/iterator_facade.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/graph/graph_selectors.hpp>
+#include <boost/static_assert.hpp>
+
+#ifdef BOOST_GRAPH_NO_BUNDLED_PROPERTIES
+# error The Compressed Sparse Row graph only supports bundled properties.
+# error You will need a compiler that conforms better to the C++ standard.
+#endif
+
+namespace boost {
+
+// A tag type indicating that the graph in question is a compressed
+// sparse row graph. This is an internal detail of the BGL.
+struct csr_graph_tag;
+
+/****************************************************************************
+ * Local helper macros to reduce typing and clutter later on. *
+ ****************************************************************************/
+#define BOOST_CSR_GRAPH_TEMPLATE_PARMS \
+ typename Directed, typename VertexProperty, typename EdgeProperty, \
+ typename GraphProperty, typename Vertex, typename EdgeIndex
+#define BOOST_CSR_GRAPH_TYPE \
+ compressed_sparse_row_graph<Directed, VertexProperty, EdgeProperty, \
+ GraphProperty, Vertex, EdgeIndex>
+
+// Forward declaration of CSR edge descriptor type, needed to pass to
+// indexed_edge_properties.
+template<typename Vertex, typename EdgeIndex>
+class csr_edge_descriptor;
+
+/** Compressed sparse row graph.
+ *
+ * Vertex and EdgeIndex should be unsigned integral types and should
+ * specialize numeric_limits.
+ */
+template<typename Directed = directedS,
+ typename VertexProperty = void,
+ typename EdgeProperty = void,
+ typename GraphProperty = no_property,
+ typename Vertex = std::size_t,
+ typename EdgeIndex = Vertex>
+class compressed_sparse_row_graph
+ : public detail::indexed_vertex_properties<BOOST_CSR_GRAPH_TYPE, VertexProperty,
+ Vertex>,
+ public detail::indexed_edge_properties<BOOST_CSR_GRAPH_TYPE, EdgeProperty,
+ csr_edge_descriptor<Vertex,
+ EdgeIndex> >
+
+{
+ typedef detail::indexed_vertex_properties<compressed_sparse_row_graph,
+ VertexProperty, Vertex>
+ inherited_vertex_properties;
+
+ typedef detail::indexed_edge_properties<BOOST_CSR_GRAPH_TYPE, EdgeProperty,
+ csr_edge_descriptor<Vertex, EdgeIndex> >
+ inherited_edge_properties;
+
+ public:
+ // For Property Graph
+ typedef GraphProperty graph_property_type;
+
+ protected:
+ template<typename InputIterator>
+ void
+ maybe_reserve_edge_list_storage(InputIterator, InputIterator,
+ std::input_iterator_tag)
+ {
+ // Do nothing: we have no idea how much storage to reserve.
+ }
+
+ template<typename InputIterator>
+ void
+ maybe_reserve_edge_list_storage(InputIterator first, InputIterator last,
+ std::forward_iterator_tag)
+ {
+ using std::distance;
+ typename std::iterator_traits<InputIterator>::difference_type n =
+ distance(first, last);
+ m_column.reserve(n);
+ inherited_edge_properties::reserve(n);
+ }
+
+ public:
+ /* At this time, the compressed sparse row graph can only be used to
+ * create a directed graph. In the future, bidirectional and
+ * undirected CSR graphs will also be supported.
+ */
+ BOOST_STATIC_ASSERT((is_same<Directed, directedS>::value));
+
+ // Concept requirements:
+ // For Graph
+ typedef Vertex vertex_descriptor;
+ typedef csr_edge_descriptor<Vertex, EdgeIndex> edge_descriptor;
+ typedef directed_tag directed_category;
+ typedef allow_parallel_edge_tag edge_parallel_category;
+
+ class traversal_category: public incidence_graph_tag,
+ public adjacency_graph_tag,
+ public vertex_list_graph_tag,
+ public edge_list_graph_tag {};
+
+ static vertex_descriptor null_vertex() { return vertex_descriptor(-1); }
+
+ // For VertexListGraph
+ typedef counting_iterator<Vertex> vertex_iterator;
+ typedef Vertex vertices_size_type;
+
+ // For EdgeListGraph
+ typedef EdgeIndex edges_size_type;
+
+ // For IncidenceGraph
+ class out_edge_iterator;
+ typedef EdgeIndex degree_size_type;
+
+ // For AdjacencyGraph
+ typedef typename std::vector<Vertex>::const_iterator adjacency_iterator;
+
+ // For EdgeListGraph
+ class edge_iterator;
+
+ // For BidirectionalGraph (not implemented)
+ typedef void in_edge_iterator;
+
+ // For internal use
+ typedef csr_graph_tag graph_tag;
+
+ // Constructors
+
+ // Default constructor: an empty graph.
+ compressed_sparse_row_graph()
+ : m_rowstart(1, EdgeIndex(0)), m_column(0), m_property(),
+ m_last_source(0) {}
+
+ // From number of vertices and sorted list of edges
+ template<typename InputIterator>
+ compressed_sparse_row_graph(InputIterator edge_begin, InputIterator edge_end,
+ vertices_size_type numverts,
+ edges_size_type numedges = 0,
+ const GraphProperty& prop = GraphProperty())
+ : inherited_vertex_properties(numverts), m_rowstart(numverts + 1),
+ m_column(0), m_property(prop), m_last_source(numverts)
+ {
+ // Reserving storage in advance can save us lots of time and
+ // memory, but it can only be done if we have forward iterators or
+ // the user has supplied the number of edges.
+ if (numedges == 0) {
+ typedef typename std::iterator_traits<InputIterator>::iterator_category
+ category;
+ maybe_reserve_edge_list_storage(edge_begin, edge_end, category());
+ } else {
+ m_column.reserve(numedges);
+ }
+
+ EdgeIndex current_edge = 0;
+ Vertex current_vertex_plus_one = 1;
+ m_rowstart[0] = 0;
+ for (InputIterator ei = edge_begin; ei != edge_end; ++ei) {
+ Vertex src = ei->first;
+ Vertex tgt = ei->second;
+ for (; current_vertex_plus_one != src + 1; ++current_vertex_plus_one)
+ m_rowstart[current_vertex_plus_one] = current_edge;
+ m_column.push_back(tgt);
+ ++current_edge;
+ }
+
+ // The remaining vertices have no edges
+ for (; current_vertex_plus_one != numverts + 1; ++current_vertex_plus_one)
+ m_rowstart[current_vertex_plus_one] = current_edge;
+
+ // Default-construct properties for edges
+ inherited_edge_properties::resize(m_column.size());
+ }
+
+ // From number of vertices and sorted list of edges
+ template<typename InputIterator, typename EdgePropertyIterator>
+ compressed_sparse_row_graph(InputIterator edge_begin, InputIterator edge_end,
+ EdgePropertyIterator ep_iter,
+ vertices_size_type numverts,
+ edges_size_type numedges = 0,
+ const GraphProperty& prop = GraphProperty())
+ : inherited_vertex_properties(numverts), m_rowstart(numverts + 1),
+ m_column(0), m_property(prop), m_last_source(numverts)
+ {
+ // Reserving storage in advance can save us lots of time and
+ // memory, but it can only be done if we have forward iterators or
+ // the user has supplied the number of edges.
+ if (numedges == 0) {
+ typedef typename std::iterator_traits<InputIterator>::iterator_category
+ category;
+ maybe_reserve_edge_list_storage(edge_begin, edge_end, category());
+ } else {
+ m_column.reserve(numedges);
+ }
+
+ EdgeIndex current_edge = 0;
+ Vertex current_vertex_plus_one = 1;
+ m_rowstart[0] = 0;
+ for (InputIterator ei = edge_begin; ei != edge_end; ++ei, ++ep_iter) {
+ Vertex src = ei->first;
+ Vertex tgt = ei->second;
+ for (; current_vertex_plus_one != src + 1; ++current_vertex_plus_one)
+ m_rowstart[current_vertex_plus_one] = current_edge;
+ m_column.push_back(tgt);
+ inherited_edge_properties::push_back(*ep_iter);
+ ++current_edge;
+ }
+
+ // The remaining vertices have no edges
+ for (; current_vertex_plus_one != numverts + 1; ++current_vertex_plus_one)
+ m_rowstart[current_vertex_plus_one] = current_edge;
+ }
+
+ // Requires IncidenceGraph, a vertex index map, and a vertex(n, g) function
+ template<typename Graph, typename VertexIndexMap>
+ compressed_sparse_row_graph(const Graph& g, const VertexIndexMap& vi,
+ vertices_size_type numverts,
+ edges_size_type numedges)
+ : m_property(), m_last_source(0)
+ {
+ assign(g, vi, numverts, numedges);
+ }
+
+ // Requires VertexListGraph and EdgeListGraph
+ template<typename Graph, typename VertexIndexMap>
+ compressed_sparse_row_graph(const Graph& g, const VertexIndexMap& vi)
+ : m_property(), m_last_source(0)
+ {
+ assign(g, vi, num_vertices(g), num_edges(g));
+ }
+
+ // Requires vertex index map plus requirements of previous constructor
+ template<typename Graph>
+ explicit compressed_sparse_row_graph(const Graph& g)
+ : m_property(), m_last_source(0)
+ {
+ assign(g, get(vertex_index, g), num_vertices(g), num_edges(g));
+ }
+
+ // From any graph (slow and uses a lot of memory)
+ // Requires IncidenceGraph, a vertex index map, and a vertex(n, g) function
+ // Internal helper function
+ template<typename Graph, typename VertexIndexMap>
+ void
+ assign(const Graph& g, const VertexIndexMap& vi,
+ vertices_size_type numverts, edges_size_type numedges)
+ {
+ inherited_vertex_properties::resize(numverts);
+ m_rowstart.resize(numverts + 1);
+ m_column.resize(numedges);
+ EdgeIndex current_edge = 0;
+ typedef typename boost::graph_traits<Graph>::vertex_descriptor g_vertex;
+ typedef typename boost::graph_traits<Graph>::edge_descriptor g_edge;
+ typedef typename boost::graph_traits<Graph>::out_edge_iterator
+ g_out_edge_iter;
+
+ for (Vertex i = 0; i != numverts; ++i) {
+ m_rowstart[i] = current_edge;
+ g_vertex v = vertex(i, g);
+ EdgeIndex num_edges_before_this_vertex = current_edge;
+ g_out_edge_iter ei, ei_end;
+ for (tie(ei, ei_end) = out_edges(v, g); ei != ei_end; ++ei) {
+ m_column[current_edge++] = get(vi, target(*ei, g));
+ }
+ std::sort(m_column.begin() + num_edges_before_this_vertex,
+ m_column.begin() + current_edge);
+ }
+ m_rowstart[numverts] = current_edge;
+ m_last_source = numverts;
+ }
+
+ // Requires the above, plus VertexListGraph and EdgeListGraph
+ template<typename Graph, typename VertexIndexMap>
+ void assign(const Graph& g, const VertexIndexMap& vi)
+ {
+ assign(g, vi, num_vertices(g), num_edges(g));
+ }
+
+ // Requires the above, plus a vertex_index map.
+ template<typename Graph>
+ void assign(const Graph& g)
+ {
+ assign(g, get(vertex_index, g), num_vertices(g), num_edges(g));
+ }
+
+ using inherited_vertex_properties::operator[];
+ using inherited_edge_properties::operator[];
+
+ // private: non-portable, requires friend templates
+ inherited_vertex_properties& vertex_properties() {return *this;}
+ const inherited_vertex_properties& vertex_properties() const {return *this;}
+ inherited_edge_properties& edge_properties() { return *this; }
+ const inherited_edge_properties& edge_properties() const { return *this; }
+
+ std::vector<EdgeIndex> m_rowstart;
+ std::vector<Vertex> m_column;
+ GraphProperty m_property;
+ Vertex m_last_source; // Last source of added edge, plus one
+};
+
+template<typename Vertex, typename EdgeIndex>
+class csr_edge_descriptor
+{
+ public:
+ Vertex src;
+ EdgeIndex idx;
+
+ csr_edge_descriptor(Vertex src, EdgeIndex idx): src(src), idx(idx) {}
+ csr_edge_descriptor(): src(0), idx(0) {}
+
+ bool operator==(const csr_edge_descriptor& e) const {return idx == e.idx;}
+ bool operator!=(const csr_edge_descriptor& e) const {return idx != e.idx;}
+ bool operator<(const csr_edge_descriptor& e) const {return idx < e.idx;}
+ bool operator>(const csr_edge_descriptor& e) const {return idx > e.idx;}
+ bool operator<=(const csr_edge_descriptor& e) const {return idx <= e.idx;}
+ bool operator>=(const csr_edge_descriptor& e) const {return idx >= e.idx;}
+};
+
+// Construction functions
+template<BOOST_CSR_GRAPH_TEMPLATE_PARMS>
+inline Vertex
+add_vertex(BOOST_CSR_GRAPH_TYPE& g) {
+ Vertex old_num_verts_plus_one = g.m_rowstart.size();
+ g.m_rowstart.push_back(EdgeIndex(0));
+ return old_num_verts_plus_one - 1;
+}
+
+template<BOOST_CSR_GRAPH_TEMPLATE_PARMS>
+inline Vertex
+add_vertices(typename BOOST_CSR_GRAPH_TYPE::vertices_size_type count, BOOST_CSR_GRAPH_TYPE& g) {
+ Vertex old_num_verts_plus_one = g.m_rowstart.size();
+ g.m_rowstart.resize(old_num_verts_plus_one + count, EdgeIndex(0));
+ return old_num_verts_plus_one - 1;
+}
+
+// This function requires that (src, tgt) be lexicographically at least as
+// large as the largest edge in the graph so far
+template<BOOST_CSR_GRAPH_TEMPLATE_PARMS>
+inline typename BOOST_CSR_GRAPH_TYPE::edge_descriptor
+add_edge(Vertex src, Vertex tgt, BOOST_CSR_GRAPH_TYPE& g) {
+ assert ((g.m_last_source == 0 || src >= g.m_last_source - 1) &&
+ src < num_vertices(g));
+ EdgeIndex num_edges_orig = g.m_column.size();
+ for (; g.m_last_source <= src; ++g.m_last_source)
+ g.m_rowstart[g.m_last_source] = num_edges_orig;
+ g.m_rowstart[src + 1] = num_edges_orig + 1;
+ g.m_column.push_back(tgt);
+ typedef typename BOOST_CSR_GRAPH_TYPE::edge_push_back_type push_back_type;
+ g.edge_properties().push_back(push_back_type());
+ return typename BOOST_CSR_GRAPH_TYPE::edge_descriptor(src, num_edges_orig);
+}
+
+// This function requires that (src, tgt) be lexicographically at least as
+// large as the largest edge in the graph so far
+template<BOOST_CSR_GRAPH_TEMPLATE_PARMS>
+inline typename BOOST_CSR_GRAPH_TYPE::edge_descriptor
+add_edge(Vertex src, Vertex tgt,
+ typename BOOST_CSR_GRAPH_TYPE::edge_bundled const& p,
+ BOOST_CSR_GRAPH_TYPE& g) {
+ assert ((g.m_last_source == 0 || src >= g.m_last_source - 1) &&
+ src < num_vertices(g));
+ EdgeIndex num_edges_orig = g.m_column.size();
+ for (; g.m_last_source <= src; ++g.m_last_source)
+ g.m_rowstart[g.m_last_source] = num_edges_orig;
+ g.m_rowstart[src + 1] = num_edges_orig + 1;
+ g.m_column.push_back(tgt);
+ g.edge_properties().push_back(p);
+ return typename BOOST_CSR_GRAPH_TYPE::edge_descriptor(src, num_edges_orig);
+}
+
+
+// From VertexListGraph
+template<BOOST_CSR_GRAPH_TEMPLATE_PARMS>
+inline Vertex
+num_vertices(const BOOST_CSR_GRAPH_TYPE& g) {
+ return g.m_rowstart.size() - 1;
+}
+
+template<BOOST_CSR_GRAPH_TEMPLATE_PARMS>
+std::pair<counting_iterator<Vertex>, counting_iterator<Vertex> >
+inline vertices(const BOOST_CSR_GRAPH_TYPE& g) {
+ return std::make_pair(counting_iterator<Vertex>(0),
+ counting_iterator<Vertex>(num_vertices(g)));
+}
+
+// From IncidenceGraph
+template<BOOST_CSR_GRAPH_TEMPLATE_PARMS>
+class BOOST_CSR_GRAPH_TYPE::out_edge_iterator
+ : public iterator_facade<typename BOOST_CSR_GRAPH_TYPE::out_edge_iterator,
+ typename BOOST_CSR_GRAPH_TYPE::edge_descriptor,
+ std::random_access_iterator_tag,
+ const typename BOOST_CSR_GRAPH_TYPE::edge_descriptor&,
+ typename int_t<CHAR_BIT * sizeof(EdgeIndex)>::fast>
+{
+ public:
+ typedef typename int_t<CHAR_BIT * sizeof(EdgeIndex)>::fast difference_type;
+
+ out_edge_iterator() {}
+ // Implicit copy constructor OK
+ explicit out_edge_iterator(edge_descriptor edge) : m_edge(edge) { }
+
+ private:
+ // iterator_facade requirements
+ const edge_descriptor& dereference() const { return m_edge; }
+
+ bool equal(const out_edge_iterator& other) const
+ { return m_edge == other.m_edge; }
+
+ void increment() { ++m_edge.idx; }
+ void decrement() { ++m_edge.idx; }
+ void advance(difference_type n) { m_edge.idx += n; }
+
+ difference_type distance_to(const out_edge_iterator& other) const
+ { return other.m_edge.idx - m_edge.idx; }
+
+ edge_descriptor m_edge;
+
+ friend class iterator_core_access;
+};
+
+template<BOOST_CSR_GRAPH_TEMPLATE_PARMS>
+inline Vertex
+source(typename BOOST_CSR_GRAPH_TYPE::edge_descriptor e,
+ const BOOST_CSR_GRAPH_TYPE&)
+{
+ return e.src;
+}
+
+template<BOOST_CSR_GRAPH_TEMPLATE_PARMS>
+inline Vertex
+target(typename BOOST_CSR_GRAPH_TYPE::edge_descriptor e,
+ const BOOST_CSR_GRAPH_TYPE& g)
+{
+ return g.m_column[e.idx];
+}
+
+template<BOOST_CSR_GRAPH_TEMPLATE_PARMS>
+inline std::pair<typename BOOST_CSR_GRAPH_TYPE::out_edge_iterator,
+ typename BOOST_CSR_GRAPH_TYPE::out_edge_iterator>
+out_edges(Vertex v, const BOOST_CSR_GRAPH_TYPE& g)
+{
+ typedef typename BOOST_CSR_GRAPH_TYPE::edge_descriptor ed;
+ typedef typename BOOST_CSR_GRAPH_TYPE::out_edge_iterator it;
+ EdgeIndex v_row_start = g.m_rowstart[v];
+ EdgeIndex next_row_start = g.m_rowstart[v + 1];
+ return std::make_pair(it(ed(v, v_row_start)),
+ it(ed(v, (std::max)(v_row_start, next_row_start))));
+}
+
+template<BOOST_CSR_GRAPH_TEMPLATE_PARMS>
+inline EdgeIndex
+out_degree(Vertex v, const BOOST_CSR_GRAPH_TYPE& g)
+{
+ EdgeIndex v_row_start = g.m_rowstart[v];
+ EdgeIndex next_row_start = g.m_rowstart[v + 1];
+ return (std::max)(v_row_start, next_row_start) - v_row_start;
+}
+
+// From AdjacencyGraph
+template<BOOST_CSR_GRAPH_TEMPLATE_PARMS>
+inline std::pair<typename BOOST_CSR_GRAPH_TYPE::adjacency_iterator,
+ typename BOOST_CSR_GRAPH_TYPE::adjacency_iterator>
+adjacent_vertices(Vertex v, const BOOST_CSR_GRAPH_TYPE& g)
+{
+ EdgeIndex v_row_start = g.m_rowstart[v];
+ EdgeIndex next_row_start = g.m_rowstart[v + 1];
+ return std::make_pair(g.m_column.begin() + v_row_start,
+ g.m_column.begin() +
+ (std::max)(v_row_start, next_row_start));
+}
+
+// Extra, common functions
+template<BOOST_CSR_GRAPH_TEMPLATE_PARMS>
+inline typename graph_traits<BOOST_CSR_GRAPH_TYPE>::vertex_descriptor
+vertex(typename graph_traits<BOOST_CSR_GRAPH_TYPE>::vertex_descriptor i,
+ const BOOST_CSR_GRAPH_TYPE&)
+{
+ return i;
+}
+
+// Unlike for an adjacency_matrix, edge_range and edge take lg(out_degree(i))
+// time
+template<BOOST_CSR_GRAPH_TEMPLATE_PARMS>
+inline std::pair<typename BOOST_CSR_GRAPH_TYPE::out_edge_iterator,
+ typename BOOST_CSR_GRAPH_TYPE::out_edge_iterator>
+edge_range(Vertex i, Vertex j, const BOOST_CSR_GRAPH_TYPE& g)
+{
+ typedef typename std::vector<Vertex>::const_iterator adj_iter;
+ typedef typename BOOST_CSR_GRAPH_TYPE::out_edge_iterator out_edge_iter;
+ typedef typename BOOST_CSR_GRAPH_TYPE::edge_descriptor edge_desc;
+ std::pair<adj_iter, adj_iter> raw_adjacencies = adjacent_vertices(i, g);
+ std::pair<adj_iter, adj_iter> adjacencies =
+ std::equal_range(raw_adjacencies.first, raw_adjacencies.second, j);
+ EdgeIndex idx_begin = adjacencies.first - g.m_column.begin();
+ EdgeIndex idx_end = adjacencies.second - g.m_column.begin();
+ return std::make_pair(out_edge_iter(edge_desc(i, idx_begin)),
+ out_edge_iter(edge_desc(i, idx_end)));
+}
+
+template<BOOST_CSR_GRAPH_TEMPLATE_PARMS>
+inline std::pair<typename BOOST_CSR_GRAPH_TYPE::edge_descriptor, bool>
+edge(Vertex i, Vertex j, const BOOST_CSR_GRAPH_TYPE& g)
+{
+ typedef typename BOOST_CSR_GRAPH_TYPE::out_edge_iterator out_edge_iter;
+ std::pair<out_edge_iter, out_edge_iter> range = edge_range(i, j, g);
+ if (range.first == range.second)
+ return std::make_pair(typename BOOST_CSR_GRAPH_TYPE::edge_descriptor(),
+ false);
+ else
+ return std::make_pair(*range.first, true);
+}
+
+// Find an edge given its index in the graph
+template<BOOST_CSR_GRAPH_TEMPLATE_PARMS>
+inline typename BOOST_CSR_GRAPH_TYPE::edge_descriptor
+edge_from_index(EdgeIndex idx, const BOOST_CSR_GRAPH_TYPE& g)
+{
+ typedef typename std::vector<EdgeIndex>::const_iterator row_start_iter;
+ assert (idx < num_edges(g));
+ row_start_iter src_plus_1 =
+ std::upper_bound(g.m_rowstart.begin(),
+ g.m_rowstart.begin() + g.m_last_source + 1,
+ idx);
+ // Get last source whose rowstart is at most idx
+ // upper_bound returns this position plus 1
+ Vertex src = (src_plus_1 - g.m_rowstart.begin()) - 1;
+ return typename BOOST_CSR_GRAPH_TYPE::edge_descriptor(src, idx);
+}
+
+// From EdgeListGraph
+template<BOOST_CSR_GRAPH_TEMPLATE_PARMS>
+class BOOST_CSR_GRAPH_TYPE::edge_iterator
+{
+ public:
+ typedef std::forward_iterator_tag iterator_category;
+ typedef edge_descriptor value_type;
+
+ typedef const edge_descriptor* pointer;
+
+ typedef edge_descriptor reference;
+ typedef typename int_t<CHAR_BIT * sizeof(EdgeIndex)>::fast difference_type;
+
+ edge_iterator() : rowstart_array(0), current_edge(), end_of_this_vertex(0) {}
+
+ edge_iterator(const compressed_sparse_row_graph& graph,
+ edge_descriptor current_edge,
+ EdgeIndex end_of_this_vertex)
+ : rowstart_array(&graph.m_rowstart[0]), current_edge(current_edge),
+ end_of_this_vertex(end_of_this_vertex) {}
+
+ // From InputIterator
+ reference operator*() const { return current_edge; }
+ pointer operator->() const { return &current_edge; }
+
+ bool operator==(const edge_iterator& o) const {
+ return current_edge == o.current_edge;
+ }
+ bool operator!=(const edge_iterator& o) const {
+ return current_edge != o.current_edge;
+ }
+
+ edge_iterator& operator++() {
+ ++current_edge.idx;
+ while (current_edge.idx == end_of_this_vertex) {
+ ++current_edge.src;
+ end_of_this_vertex = rowstart_array[current_edge.src + 1];
+ }
+ return *this;
+ }
+
+ edge_iterator operator++(int) {
+ edge_iterator temp = *this;
+ ++*this;
+ return temp;
+ }
+
+ private:
+ const EdgeIndex* rowstart_array;
+ edge_descriptor current_edge;
+ EdgeIndex end_of_this_vertex;
+};
+
+template<BOOST_CSR_GRAPH_TEMPLATE_PARMS>
+inline EdgeIndex
+num_edges(const BOOST_CSR_GRAPH_TYPE& g)
+{
+ return g.m_column.size();
+}
+
+template<BOOST_CSR_GRAPH_TEMPLATE_PARMS>
+std::pair<typename BOOST_CSR_GRAPH_TYPE::edge_iterator,
+ typename BOOST_CSR_GRAPH_TYPE::edge_iterator>
+edges(const BOOST_CSR_GRAPH_TYPE& g)
+{
+ typedef typename BOOST_CSR_GRAPH_TYPE::edge_iterator ei;
+ typedef typename BOOST_CSR_GRAPH_TYPE::edge_descriptor edgedesc;
+ if (g.m_rowstart.size() == 1 || g.m_column.empty()) {
+ return std::make_pair(ei(), ei());
+ } else {
+ // Find the first vertex that has outgoing edges
+ Vertex src = 0;
+ while (g.m_rowstart[src + 1] == 0) ++src;
+ return std::make_pair(ei(g, edgedesc(src, 0), g.m_rowstart[src + 1]),
+ ei(g, edgedesc(num_vertices(g), g.m_column.size()), 0));
+ }
+}
+
+// For Property Graph
+
+// Graph properties
+template<BOOST_CSR_GRAPH_TEMPLATE_PARMS, class Tag, class Value>
+inline void
+set_property(BOOST_CSR_GRAPH_TYPE& g, Tag, const Value& value)
+{
+ get_property_value(g.m_property, Tag()) = value;
+}
+
+template<BOOST_CSR_GRAPH_TEMPLATE_PARMS, class Tag>
+inline
+typename graph_property<BOOST_CSR_GRAPH_TYPE, Tag>::type&
+get_property(BOOST_CSR_GRAPH_TYPE& g, Tag)
+{
+ return get_property_value(g.m_property, Tag());
+}
+
+template<BOOST_CSR_GRAPH_TEMPLATE_PARMS, class Tag>
+inline
+const
+typename graph_property<BOOST_CSR_GRAPH_TYPE, Tag>::type&
+get_property(const BOOST_CSR_GRAPH_TYPE& g, Tag)
+{
+ return get_property_value(g.m_property, Tag());
+}
+
+// Add edge_index property map
+template<typename Index, typename Descriptor>
+struct csr_edge_index_map
+{
+ typedef Index value_type;
+ typedef Index reference;
+ typedef Descriptor key_type;
+ typedef readable_property_map_tag category;
+};
+
+template<typename Index, typename Descriptor>
+inline Index
+get(const csr_edge_index_map<Index, Descriptor>&,
+ const typename csr_edge_index_map<Index, Descriptor>::key_type& key)
+{
+ return key.idx;
+}
+
+// Doing the right thing here (by unifying with vertex_index_t and
+// edge_index_t) breaks GCC.
+template<BOOST_CSR_GRAPH_TEMPLATE_PARMS, typename Tag>
+struct property_map<BOOST_CSR_GRAPH_TYPE, Tag>
+{
+private:
+ typedef identity_property_map vertex_index_type;
+ typedef typename graph_traits<BOOST_CSR_GRAPH_TYPE>::edge_descriptor
+ edge_descriptor;
+ typedef csr_edge_index_map<EdgeIndex, edge_descriptor> edge_index_type;
+
+ typedef typename mpl::if_<is_same<Tag, edge_index_t>,
+ edge_index_type,
+ detail::error_property_not_found>::type
+ edge_or_none;
+
+public:
+ typedef typename mpl::if_<is_same<Tag, vertex_index_t>,
+ vertex_index_type,
+ edge_or_none>::type type;
+
+ typedef type const_type;
+};
+
+template<BOOST_CSR_GRAPH_TEMPLATE_PARMS>
+inline identity_property_map
+get(vertex_index_t, const BOOST_CSR_GRAPH_TYPE&)
+{
+ return identity_property_map();
+}
+
+template<BOOST_CSR_GRAPH_TEMPLATE_PARMS>
+inline Vertex
+get(vertex_index_t,
+ const BOOST_CSR_GRAPH_TYPE&, Vertex v)
+{
+ return v;
+}
+
+template<BOOST_CSR_GRAPH_TEMPLATE_PARMS>
+inline typename property_map<BOOST_CSR_GRAPH_TYPE, edge_index_t>::const_type
+get(edge_index_t, const BOOST_CSR_GRAPH_TYPE&)
+{
+ typedef typename property_map<BOOST_CSR_GRAPH_TYPE, edge_index_t>::const_type
+ result_type;
+ return result_type();
+}
+
+template<BOOST_CSR_GRAPH_TEMPLATE_PARMS>
+inline EdgeIndex
+get(edge_index_t, const BOOST_CSR_GRAPH_TYPE&,
+ typename BOOST_CSR_GRAPH_TYPE::edge_descriptor e)
+{
+ return e.idx;
+}
+
+// Support for bundled properties
+template<BOOST_CSR_GRAPH_TEMPLATE_PARMS, typename T, typename Bundle>
+struct property_map<BOOST_CSR_GRAPH_TYPE, T Bundle::*>
+{
+private:
+ typedef graph_traits<BOOST_CSR_GRAPH_TYPE> traits;
+ typedef VertexProperty vertex_bundled;
+ typedef EdgeProperty edge_bundled;
+ typedef typename ct_if<(detail::is_vertex_bundle<vertex_bundled, edge_bundled, Bundle>::value),
+ typename traits::vertex_descriptor,
+ typename traits::edge_descriptor>::type
+ descriptor;
+
+public:
+ typedef bundle_property_map<BOOST_CSR_GRAPH_TYPE, descriptor, Bundle, T>
+ type;
+ typedef bundle_property_map<const BOOST_CSR_GRAPH_TYPE, descriptor, Bundle,
+ const T> const_type;
+};
+
+template<BOOST_CSR_GRAPH_TEMPLATE_PARMS, typename T, typename Bundle>
+inline
+typename property_map<BOOST_CSR_GRAPH_TYPE, T Bundle::*>::type
+get(T Bundle::* p, BOOST_CSR_GRAPH_TYPE& g)
+{
+ typedef typename property_map<BOOST_CSR_GRAPH_TYPE,
+ T Bundle::*>::type
+ result_type;
+ return result_type(&g, p);
+}
+
+template<BOOST_CSR_GRAPH_TEMPLATE_PARMS, typename T, typename Bundle>
+inline
+typename property_map<BOOST_CSR_GRAPH_TYPE, T Bundle::*>::const_type
+get(T Bundle::* p, BOOST_CSR_GRAPH_TYPE const & g)
+{
+ typedef typename property_map<BOOST_CSR_GRAPH_TYPE,
+ T Bundle::*>::const_type
+ result_type;
+ return result_type(&g, p);
+}
+
+template<BOOST_CSR_GRAPH_TEMPLATE_PARMS, typename T, typename Bundle,
+ typename Key>
+inline T
+get(T Bundle::* p, BOOST_CSR_GRAPH_TYPE const & g,
+ const Key& key)
+{
+ return get(get(p, g), key);
+}
+
+template<BOOST_CSR_GRAPH_TEMPLATE_PARMS, typename T, typename Bundle,
+ typename Key>
+inline void
+put(T Bundle::* p, BOOST_CSR_GRAPH_TYPE& g,
+ const Key& key, const T& value)
+{
+ put(get(p, g), key, value);
+}
+
+#undef BOOST_CSR_GRAPH_TYPE
+#undef BOOST_CSR_GRAPH_TEMPLATE_PARMS
+
+} // end namespace boost
+
+#endif // BOOST_GRAPH_COMPRESSED_SPARSE_ROW_GRAPH_HPP
diff --git a/boost/boost/graph/connected_components.hpp b/boost/boost/graph/connected_components.hpp
new file mode 100644
index 00000000000..df9084ce360
--- /dev/null
+++ b/boost/boost/graph/connected_components.hpp
@@ -0,0 +1,101 @@
+//
+//=======================================================================
+// Copyright 1997-2001 University of Notre Dame.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// 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_GRAPH_CONNECTED_COMPONENTS_HPP
+#define BOOST_GRAPH_CONNECTED_COMPONENTS_HPP
+
+#include <boost/config.hpp>
+#include <boost/graph/depth_first_search.hpp>
+#include <boost/graph/properties.hpp>
+#include <boost/graph/graph_concepts.hpp>
+
+#include <boost/static_assert.hpp>
+
+namespace boost {
+
+ namespace detail {
+
+ // This visitor is used both in the connected_components algorithm
+ // and in the kosaraju strong components algorithm during the
+ // second DFS traversal.
+ template <class ComponentsMap>
+ class components_recorder : public dfs_visitor<>
+ {
+ typedef typename property_traits<ComponentsMap>::value_type comp_type;
+ public:
+ components_recorder(ComponentsMap c,
+ comp_type& c_count)
+ : m_component(c), m_count(c_count) {}
+
+ template <class Vertex, class Graph>
+ void start_vertex(Vertex, Graph&) {
+ if (m_count == (std::numeric_limits<comp_type>::max)())
+ m_count = 0; // start counting components at zero
+ else
+ ++m_count;
+ }
+ template <class Vertex, class Graph>
+ void discover_vertex(Vertex u, Graph&) {
+ put(m_component, u, m_count);
+ }
+ protected:
+ ComponentsMap m_component;
+ comp_type& m_count;
+ };
+
+ } // namespace detail
+
+ // This function computes the connected components of an undirected
+ // graph using a single application of depth first search.
+
+ template <class Graph, class ComponentMap, class P, class T, class R>
+ inline typename property_traits<ComponentMap>::value_type
+ connected_components(const Graph& g, ComponentMap c,
+ const bgl_named_params<P, T, R>& params)
+ {
+ if (num_vertices(g) == 0) return 0;
+
+ typedef typename graph_traits<Graph>::vertex_descriptor Vertex;
+ function_requires< WritablePropertyMapConcept<ComponentMap, Vertex> >();
+ typedef typename boost::graph_traits<Graph>::directed_category directed;
+ BOOST_STATIC_ASSERT((boost::is_same<directed, undirected_tag>::value));
+
+ typedef typename property_traits<ComponentMap>::value_type comp_type;
+ // c_count initialized to "nil" (with nil represented by (max)())
+ comp_type c_count((std::numeric_limits<comp_type>::max)());
+ detail::components_recorder<ComponentMap> vis(c, c_count);
+ depth_first_search(g, params.visitor(vis));
+ return c_count + 1;
+ }
+
+ template <class Graph, class ComponentMap>
+ inline typename property_traits<ComponentMap>::value_type
+ connected_components(const Graph& g, ComponentMap c)
+ {
+ if (num_vertices(g) == 0) return 0;
+
+ typedef typename graph_traits<Graph>::vertex_descriptor Vertex;
+ function_requires< WritablePropertyMapConcept<ComponentMap, Vertex> >();
+ typedef typename boost::graph_traits<Graph>::directed_category directed;
+ BOOST_STATIC_ASSERT((boost::is_same<directed, undirected_tag>::value));
+
+ typedef typename property_traits<ComponentMap>::value_type comp_type;
+ // c_count initialized to "nil" (with nil represented by (max)())
+ comp_type c_count((std::numeric_limits<comp_type>::max)());
+ detail::components_recorder<ComponentMap> vis(c, c_count);
+ depth_first_search(g, visitor(vis));
+ return c_count + 1;
+ }
+
+
+} // namespace boost
+
+
+#endif // BOOST_GRAPH_CONNECTED_COMPONENTS_HPP
diff --git a/boost/boost/graph/copy.hpp b/boost/boost/graph/copy.hpp
new file mode 100644
index 00000000000..fd98a426a42
--- /dev/null
+++ b/boost/boost/graph/copy.hpp
@@ -0,0 +1,450 @@
+//
+//=======================================================================
+// Copyright 1997-2001 University of Notre Dame.
+// Authors: Jeremy G. Siek, Lie-Quan Lee, Andrew Lumsdaine
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//=======================================================================
+//
+
+/*
+ This file implements the following functions:
+
+
+ template <typename VertexListGraph, typename MutableGraph>
+ void copy_graph(const VertexListGraph& g_in, MutableGraph& g_out)
+
+ template <typename VertexListGraph, typename MutableGraph,
+ class P, class T, class R>
+ void copy_graph(const VertexListGraph& g_in, MutableGraph& g_out,
+ const bgl_named_params<P, T, R>& params)
+
+
+ template <typename IncidenceGraph, typename MutableGraph>
+ typename graph_traits<MutableGraph>::vertex_descriptor
+ copy_component(IncidenceGraph& g_in,
+ typename graph_traits<IncidenceGraph>::vertex_descriptor src,
+ MutableGraph& g_out)
+
+ template <typename IncidenceGraph, typename MutableGraph,
+ typename P, typename T, typename R>
+ typename graph_traits<MutableGraph>::vertex_descriptor
+ copy_component(IncidenceGraph& g_in,
+ typename graph_traits<IncidenceGraph>::vertex_descriptor src,
+ MutableGraph& g_out,
+ const bgl_named_params<P, T, R>& params)
+ */
+
+
+#ifndef BOOST_GRAPH_COPY_HPP
+#define BOOST_GRAPH_COPY_HPP
+
+#include <boost/config.hpp>
+#include <vector>
+#include <boost/graph/graph_traits.hpp>
+#include <boost/property_map.hpp>
+#include <boost/graph/named_function_params.hpp>
+#include <boost/graph/breadth_first_search.hpp>
+#include <boost/type_traits/conversion_traits.hpp>
+
+namespace boost {
+
+ namespace detail {
+
+ // Default edge and vertex property copiers
+
+ template <typename Graph1, typename Graph2>
+ struct edge_copier {
+ edge_copier(const Graph1& g1, Graph2& g2)
+ : edge_all_map1(get(edge_all, g1)),
+ edge_all_map2(get(edge_all, g2)) { }
+
+ template <typename Edge1, typename Edge2>
+ void operator()(const Edge1& e1, Edge2& e2) const {
+ put(edge_all_map2, e2, get(edge_all_map1, e1));
+ }
+ typename property_map<Graph1, edge_all_t>::const_type edge_all_map1;
+ mutable typename property_map<Graph2, edge_all_t>::type edge_all_map2;
+ };
+ template <typename Graph1, typename Graph2>
+ inline edge_copier<Graph1,Graph2>
+ make_edge_copier(const Graph1& g1, Graph2& g2)
+ {
+ return edge_copier<Graph1,Graph2>(g1, g2);
+ }
+
+ template <typename Graph1, typename Graph2>
+ struct vertex_copier {
+ vertex_copier(const Graph1& g1, Graph2& g2)
+ : vertex_all_map1(get(vertex_all, g1)),
+ vertex_all_map2(get(vertex_all, g2)) { }
+
+ template <typename Vertex1, typename Vertex2>
+ void operator()(const Vertex1& v1, Vertex2& v2) const {
+ put(vertex_all_map2, v2, get(vertex_all_map1, v1));
+ }
+ typename property_map<Graph1, vertex_all_t>::const_type vertex_all_map1;
+ mutable typename property_map<Graph2, vertex_all_t>::type
+ vertex_all_map2;
+ };
+ template <typename Graph1, typename Graph2>
+ inline vertex_copier<Graph1,Graph2>
+ make_vertex_copier(const Graph1& g1, Graph2& g2)
+ {
+ return vertex_copier<Graph1,Graph2>(g1, g2);
+ }
+
+ // Copy all the vertices and edges of graph g_in into graph g_out.
+ // The copy_vertex and copy_edge function objects control how vertex
+ // and edge properties are copied.
+
+ template <int Version>
+ struct copy_graph_impl { };
+
+ template <> struct copy_graph_impl<0>
+ {
+ template <typename Graph, typename MutableGraph,
+ typename CopyVertex, typename CopyEdge, typename IndexMap,
+ typename Orig2CopyVertexIndexMap>
+ static void apply(const Graph& g_in, MutableGraph& g_out,
+ CopyVertex copy_vertex, CopyEdge copy_edge,
+ Orig2CopyVertexIndexMap orig2copy, IndexMap)
+ {
+ typename graph_traits<Graph>::vertex_iterator vi, vi_end;
+ for (tie(vi, vi_end) = vertices(g_in); vi != vi_end; ++vi) {
+ typename graph_traits<MutableGraph>::vertex_descriptor
+ new_v = add_vertex(g_out);
+ put(orig2copy, *vi, new_v);
+ copy_vertex(*vi, new_v);
+ }
+ typename graph_traits<Graph>::edge_iterator ei, ei_end;
+ for (tie(ei, ei_end) = edges(g_in); ei != ei_end; ++ei) {
+ typename graph_traits<MutableGraph>::edge_descriptor new_e;
+ bool inserted;
+ tie(new_e, inserted) = add_edge(get(orig2copy, source(*ei, g_in)),
+ get(orig2copy, target(*ei, g_in)),
+ g_out);
+ copy_edge(*ei, new_e);
+ }
+ }
+ };
+
+ // for directed graphs
+ template <> struct copy_graph_impl<1>
+ {
+ template <typename Graph, typename MutableGraph,
+ typename CopyVertex, typename CopyEdge, typename IndexMap,
+ typename Orig2CopyVertexIndexMap>
+ static void apply(const Graph& g_in, MutableGraph& g_out,
+ CopyVertex copy_vertex, CopyEdge copy_edge,
+ Orig2CopyVertexIndexMap orig2copy, IndexMap)
+ {
+ typename graph_traits<Graph>::vertex_iterator vi, vi_end;
+ for (tie(vi, vi_end) = vertices(g_in); vi != vi_end; ++vi) {
+ typename graph_traits<MutableGraph>::vertex_descriptor
+ new_v = add_vertex(g_out);
+ put(orig2copy, *vi, new_v);
+ copy_vertex(*vi, new_v);
+ }
+ for (tie(vi, vi_end) = vertices(g_in); vi != vi_end; ++vi) {
+ typename graph_traits<Graph>::out_edge_iterator ei, ei_end;
+ for (tie(ei, ei_end) = out_edges(*vi, g_in); ei != ei_end; ++ei) {
+ typename graph_traits<MutableGraph>::edge_descriptor new_e;
+ bool inserted;
+ tie(new_e, inserted) = add_edge(get(orig2copy, source(*ei, g_in)),
+ get(orig2copy, target(*ei, g_in)),
+ g_out);
+ copy_edge(*ei, new_e);
+ }
+ }
+ }
+ };
+
+ // for undirected graphs
+ template <> struct copy_graph_impl<2>
+ {
+ template <typename Graph, typename MutableGraph,
+ typename CopyVertex, typename CopyEdge, typename IndexMap,
+ typename Orig2CopyVertexIndexMap>
+ static void apply(const Graph& g_in, MutableGraph& g_out,
+ CopyVertex copy_vertex, CopyEdge copy_edge,
+ Orig2CopyVertexIndexMap orig2copy,
+ IndexMap index_map)
+ {
+ typedef color_traits<default_color_type> Color;
+ std::vector<default_color_type>
+ color(num_vertices(g_in), Color::white());
+ typename graph_traits<Graph>::vertex_iterator vi, vi_end;
+ for (tie(vi, vi_end) = vertices(g_in); vi != vi_end; ++vi) {
+ typename graph_traits<MutableGraph>::vertex_descriptor
+ new_v = add_vertex(g_out);
+ put(orig2copy, *vi, new_v);
+ copy_vertex(*vi, new_v);
+ }
+ for (tie(vi, vi_end) = vertices(g_in); vi != vi_end; ++vi) {
+ typename graph_traits<Graph>::out_edge_iterator ei, ei_end;
+ for (tie(ei, ei_end) = out_edges(*vi, g_in); ei != ei_end; ++ei) {
+ typename graph_traits<MutableGraph>::edge_descriptor new_e;
+ bool inserted;
+ if (color[get(index_map, target(*ei, g_in))] == Color::white()) {
+ tie(new_e, inserted) = add_edge(get(orig2copy, source(*ei,g_in)),
+ get(orig2copy, target(*ei,g_in)),
+ g_out);
+ copy_edge(*ei, new_e);
+ }
+ }
+ color[get(index_map, *vi)] = Color::black();
+ }
+ }
+ };
+
+ template <class Graph>
+ struct choose_graph_copy {
+ typedef typename Graph::traversal_category Trv;
+ typedef typename Graph::directed_category Dr;
+ enum { algo =
+ (is_convertible<Trv, vertex_list_graph_tag>::value
+ && is_convertible<Trv, edge_list_graph_tag>::value)
+ ? 0 : is_convertible<Dr, directed_tag>::value ? 1 : 2 };
+ typedef copy_graph_impl<algo> type;
+ };
+
+ //-------------------------------------------------------------------------
+ struct choose_copier_parameter {
+ template <class P, class G1, class G2>
+ struct bind_ {
+ typedef const P& result_type;
+ static result_type apply(const P& p, const G1&, G2&)
+ { return p; }
+ };
+ };
+ struct choose_default_edge_copier {
+ template <class P, class G1, class G2>
+ struct bind_ {
+ typedef edge_copier<G1, G2> result_type;
+ static result_type apply(const P&, const G1& g1, G2& g2) {
+ return result_type(g1, g2);
+ }
+ };
+ };
+ template <class Param>
+ struct choose_edge_copy {
+ typedef choose_copier_parameter type;
+ };
+ template <>
+ struct choose_edge_copy<detail::error_property_not_found> {
+ typedef choose_default_edge_copier type;
+ };
+ template <class Param, class G1, class G2>
+ struct choose_edge_copier_helper {
+ typedef typename choose_edge_copy<Param>::type Selector;
+ typedef typename Selector:: template bind_<Param, G1, G2> Bind;
+ typedef Bind type;
+ typedef typename Bind::result_type result_type;
+ };
+ template <typename Param, typename G1, typename G2>
+ typename detail::choose_edge_copier_helper<Param,G1,G2>::result_type
+ choose_edge_copier(const Param& params, const G1& g_in, G2& g_out)
+ {
+ typedef typename
+ detail::choose_edge_copier_helper<Param,G1,G2>::type Choice;
+ return Choice::apply(params, g_in, g_out);
+ }
+
+
+ struct choose_default_vertex_copier {
+ template <class P, class G1, class G2>
+ struct bind_ {
+ typedef vertex_copier<G1, G2> result_type;
+ static result_type apply(const P&, const G1& g1, G2& g2) {
+ return result_type(g1, g2);
+ }
+ };
+ };
+ template <class Param>
+ struct choose_vertex_copy {
+ typedef choose_copier_parameter type;
+ };
+ template <>
+ struct choose_vertex_copy<detail::error_property_not_found> {
+ typedef choose_default_vertex_copier type;
+ };
+ template <class Param, class G1, class G2>
+ struct choose_vertex_copier_helper {
+ typedef typename choose_vertex_copy<Param>::type Selector;
+ typedef typename Selector:: template bind_<Param, G1, G2> Bind;
+ typedef Bind type;
+ typedef typename Bind::result_type result_type;
+ };
+ template <typename Param, typename G1, typename G2>
+ typename detail::choose_vertex_copier_helper<Param,G1,G2>::result_type
+ choose_vertex_copier(const Param& params, const G1& g_in, G2& g_out)
+ {
+ typedef typename
+ detail::choose_vertex_copier_helper<Param,G1,G2>::type Choice;
+ return Choice::apply(params, g_in, g_out);
+ }
+
+ } // namespace detail
+
+
+ template <typename VertexListGraph, typename MutableGraph>
+ void copy_graph(const VertexListGraph& g_in, MutableGraph& g_out)
+ {
+ if (num_vertices(g_in) == 0)
+ return;
+ typedef typename graph_traits<MutableGraph>::vertex_descriptor vertex_t;
+ std::vector<vertex_t> orig2copy(num_vertices(g_in));
+ typedef typename detail::choose_graph_copy<VertexListGraph>::type
+ copy_impl;
+ copy_impl::apply
+ (g_in, g_out,
+ detail::make_vertex_copier(g_in, g_out),
+ detail::make_edge_copier(g_in, g_out),
+ make_iterator_property_map(orig2copy.begin(),
+ get(vertex_index, g_in), orig2copy[0]),
+ get(vertex_index, g_in)
+ );
+ }
+
+ template <typename VertexListGraph, typename MutableGraph,
+ class P, class T, class R>
+ void copy_graph(const VertexListGraph& g_in, MutableGraph& g_out,
+ const bgl_named_params<P, T, R>& params)
+ {
+ typename std::vector<T>::size_type n;
+ n = is_default_param(get_param(params, orig_to_copy_t()))
+ ? num_vertices(g_in) : 1;
+ if (n == 0)
+ return;
+ std::vector<BOOST_DEDUCED_TYPENAME graph_traits<MutableGraph>::vertex_descriptor>
+ orig2copy(n);
+
+ typedef typename detail::choose_graph_copy<VertexListGraph>::type
+ copy_impl;
+ copy_impl::apply
+ (g_in, g_out,
+ detail::choose_vertex_copier(get_param(params, vertex_copy_t()),
+ g_in, g_out),
+ detail::choose_edge_copier(get_param(params, edge_copy_t()),
+ g_in, g_out),
+ choose_param(get_param(params, orig_to_copy_t()),
+ make_iterator_property_map
+ (orig2copy.begin(),
+ choose_const_pmap(get_param(params, vertex_index),
+ g_in, vertex_index), orig2copy[0])),
+ choose_const_pmap(get_param(params, vertex_index), g_in, vertex_index)
+ );
+ }
+
+ namespace detail {
+
+ template <class NewGraph, class Copy2OrigIndexMap,
+ class CopyVertex, class CopyEdge>
+ struct graph_copy_visitor : public bfs_visitor<>
+ {
+ graph_copy_visitor(NewGraph& graph, Copy2OrigIndexMap c,
+ CopyVertex cv, CopyEdge ce)
+ : g_out(graph), orig2copy(c), copy_vertex(cv), copy_edge(ce) { }
+
+ template <class Vertex, class Graph>
+ void examine_vertex(Vertex u, const Graph& g_in) const {
+ typename graph_traits<NewGraph>::vertex_descriptor
+ new_u = add_vertex(g_out);
+ put(orig2copy, u, new_u);
+ copy_vertex(u, new_u);
+ }
+
+ template <class Edge, class Graph>
+ void examine_edge(Edge e, const Graph& g_in) const {
+ typename graph_traits<NewGraph>::edge_descriptor new_e;
+ bool inserted;
+ tie(new_e, inserted) = add_edge(get(orig2copy, source(e, g_in)),
+ get(orig2copy, target(e, g_in)),
+ g_out);
+ copy_edge(e, new_e);
+ }
+ private:
+ NewGraph& g_out;
+ Copy2OrigIndexMap orig2copy;
+ CopyVertex copy_vertex;
+ CopyEdge copy_edge;
+ };
+
+ template <typename Graph, typename MutableGraph,
+ typename CopyVertex, typename CopyEdge,
+ typename Orig2CopyVertexIndexMap, typename Params>
+ typename graph_traits<MutableGraph>::vertex_descriptor
+ copy_component_impl
+ (const Graph& g_in,
+ typename graph_traits<Graph>::vertex_descriptor src,
+ MutableGraph& g_out,
+ CopyVertex copy_vertex, CopyEdge copy_edge,
+ Orig2CopyVertexIndexMap orig2copy,
+ const Params& params)
+ {
+ graph_copy_visitor<MutableGraph, Orig2CopyVertexIndexMap,
+ CopyVertex, CopyEdge> vis(g_out, orig2copy, copy_vertex, copy_edge);
+ breadth_first_search(g_in, src, params.visitor(vis));
+ return get(orig2copy, src);
+ }
+
+ } // namespace detail
+
+
+ // Copy all the vertices and edges of graph g_in that are reachable
+ // from the source vertex into graph g_out. Return the vertex
+ // in g_out that matches the source vertex of g_in.
+ template <typename IncidenceGraph, typename MutableGraph,
+ typename P, typename T, typename R>
+ typename graph_traits<MutableGraph>::vertex_descriptor
+ copy_component(IncidenceGraph& g_in,
+ typename graph_traits<IncidenceGraph>::vertex_descriptor src,
+ MutableGraph& g_out,
+ const bgl_named_params<P, T, R>& params)
+ {
+ typename std::vector<T>::size_type n;
+ n = is_default_param(get_param(params, orig_to_copy_t()))
+ ? num_vertices(g_in) : 1;
+ std::vector<typename graph_traits<IncidenceGraph>::vertex_descriptor>
+ orig2copy(n);
+
+ return detail::copy_component_impl
+ (g_in, src, g_out,
+ detail::choose_vertex_copier(get_param(params, vertex_copy_t()),
+ g_in, g_out),
+ detail::choose_edge_copier(get_param(params, edge_copy_t()),
+ g_in, g_out),
+ choose_param(get_param(params, orig_to_copy_t()),
+ make_iterator_property_map
+ (orig2copy.begin(),
+ choose_pmap(get_param(params, vertex_index),
+ g_in, vertex_index), orig2copy[0])),
+ params
+ );
+ }
+
+ template <typename IncidenceGraph, typename MutableGraph>
+ typename graph_traits<MutableGraph>::vertex_descriptor
+ copy_component(IncidenceGraph& g_in,
+ typename graph_traits<IncidenceGraph>::vertex_descriptor src,
+ MutableGraph& g_out)
+ {
+ std::vector<typename graph_traits<IncidenceGraph>::vertex_descriptor>
+ orig2copy(num_vertices(g_in));
+
+ return detail::copy_component_impl
+ (g_in, src, g_out,
+ make_vertex_copier(g_in, g_out),
+ make_edge_copier(g_in, g_out),
+ make_iterator_property_map(orig2copy.begin(),
+ get(vertex_index, g_in), orig2copy[0]),
+ bgl_named_params<char,char>('x') // dummy param object
+ );
+ }
+
+} // namespace boost
+
+#endif // BOOST_GRAPH_COPY_HPP
diff --git a/boost/boost/graph/create_condensation_graph.hpp b/boost/boost/graph/create_condensation_graph.hpp
new file mode 100644
index 00000000000..f3d1113a3dc
--- /dev/null
+++ b/boost/boost/graph/create_condensation_graph.hpp
@@ -0,0 +1,83 @@
+//=======================================================================
+// Copyright 2002 Indiana University.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// 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_CREATE_CONDENSATION_GRAPH_HPP
+#define BOOST_CREATE_CONDENSATION_GRAPH_HPP
+
+#include <boost/graph/graph_traits.hpp>
+#include <boost/property_map.hpp>
+
+namespace boost {
+
+ template <typename Graph, typename ComponentLists,
+ typename ComponentNumberMap,
+ typename CondensationGraph, typename EdgeMultiplicityMap>
+ void create_condensation_graph(const Graph& g,
+ const ComponentLists& components,
+ ComponentNumberMap component_number,
+ CondensationGraph& cg,
+ EdgeMultiplicityMap edge_mult_map)
+ {
+ typedef typename graph_traits<Graph>::vertex_descriptor vertex;
+ typedef typename graph_traits<Graph>::vertices_size_type size_type;
+ typedef typename graph_traits<CondensationGraph>::vertex_descriptor
+ cg_vertex;
+ std::vector<cg_vertex> to_cg_vertex(components.size());
+ for (size_type s = 0; s < components.size(); ++s)
+ to_cg_vertex[s] = add_vertex(cg);
+
+ for (size_type si = 0; si < components.size(); ++si) {
+ cg_vertex s = to_cg_vertex[si];
+ std::vector<cg_vertex> adj;
+ for (size_type i = 0; i < components[si].size(); ++i) {
+ vertex u = components[s][i];
+ typename graph_traits<Graph>::adjacency_iterator v, v_end;
+ for (tie(v, v_end) = adjacent_vertices(u, g); v != v_end; ++v) {
+ cg_vertex t = to_cg_vertex[component_number[*v]];
+ if (s != t) // Avoid loops in the condensation graph
+ adj.push_back(t);
+ }
+ }
+ std::sort(adj.begin(), adj.end());
+ if (! adj.empty()) {
+ size_type i = 0;
+ cg_vertex t = adj[i];
+ typename graph_traits<CondensationGraph>::edge_descriptor e;
+ bool inserted;
+ tie(e, inserted) = add_edge(s, t, cg);
+ put(edge_mult_map, e, 1);
+ ++i;
+ while (i < adj.size()) {
+ if (adj[i] == t)
+ put(edge_mult_map, e, get(edge_mult_map, e) + 1);
+ else {
+ t = adj[i];
+ tie(e, inserted) = add_edge(s, t, cg);
+ put(edge_mult_map, e, 1);
+ }
+ ++i;
+ }
+ }
+ }
+ }
+
+ template <typename Graph, typename ComponentLists,
+ typename ComponentNumberMap, typename CondensationGraph>
+ void create_condensation_graph(const Graph& g,
+ const ComponentLists& components,
+ ComponentNumberMap component_number,
+ CondensationGraph& cg)
+ {
+ create_condensation_graph(g, components, component_number, cg,
+ dummy_property_map());
+ }
+
+} // namespace boost
+
+#endif // BOOST_CREATE_CONDENSATION_GRAPH_HPP
diff --git a/boost/boost/graph/cuthill_mckee_ordering.hpp b/boost/boost/graph/cuthill_mckee_ordering.hpp
new file mode 100644
index 00000000000..61336ab1770
--- /dev/null
+++ b/boost/boost/graph/cuthill_mckee_ordering.hpp
@@ -0,0 +1,190 @@
+//=======================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Copyright 2004, 2005 Trustees of Indiana University
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek,
+// Doug Gregor, D. Kevin McGrath
+//
+// 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_GRAPH_CUTHILL_MCKEE_HPP
+#define BOOST_GRAPH_CUTHILL_MCKEE_HPP
+
+#include <boost/config.hpp>
+#include <boost/graph/detail/sparse_ordering.hpp>
+#include <algorithm>
+
+
+/*
+ (Reverse) Cuthill-McKee Algorithm for matrix reordering
+*/
+
+namespace boost {
+
+ namespace detail {
+
+
+
+ template < typename OutputIterator, typename Buffer, typename DegreeMap >
+ class bfs_rcm_visitor:public default_bfs_visitor
+ {
+ public:
+ bfs_rcm_visitor(OutputIterator *iter, Buffer *b, DegreeMap deg):
+ permutation(iter), Qptr(b), degree(deg) { }
+ template <class Vertex, class Graph>
+ void examine_vertex(Vertex u, Graph&) {
+ *(*permutation)++ = u;
+ index_begin = Qptr->size();
+ }
+ template <class Vertex, class Graph>
+ void finish_vertex(Vertex, Graph&) {
+ using std::sort;
+
+ typedef typename property_traits<DegreeMap>::value_type ds_type;
+
+ typedef indirect_cmp<DegreeMap, std::less<ds_type> > Compare;
+ Compare comp(degree);
+
+ sort(Qptr->begin()+index_begin, Qptr->end(), comp);
+ }
+ protected:
+ OutputIterator *permutation;
+ int index_begin;
+ Buffer *Qptr;
+ DegreeMap degree;
+ };
+
+ } // namespace detail
+
+
+ // Reverse Cuthill-McKee algorithm with a given starting Vertex.
+ //
+ // If user provides a reverse iterator, this will be a reverse-cuthill-mckee
+ // algorithm, otherwise it will be a standard CM algorithm
+
+ template <class Graph, class OutputIterator,
+ class ColorMap, class DegreeMap>
+ OutputIterator
+ cuthill_mckee_ordering(const Graph& g,
+ std::deque< typename
+ graph_traits<Graph>::vertex_descriptor > vertex_queue,
+ OutputIterator permutation,
+ ColorMap color, DegreeMap degree)
+ {
+
+ //create queue, visitor...don't forget namespaces!
+ typedef typename property_traits<DegreeMap>::value_type ds_type;
+ typedef typename graph_traits<Graph>::vertex_descriptor Vertex;
+ typedef typename boost::sparse::sparse_ordering_queue<Vertex> queue;
+ typedef typename detail::bfs_rcm_visitor<OutputIterator, queue, DegreeMap> Visitor;
+ typedef typename property_traits<ColorMap>::value_type ColorValue;
+ typedef color_traits<ColorValue> Color;
+
+
+ queue Q;
+
+ //create a bfs_rcm_visitor as defined above
+ Visitor vis(&permutation, &Q, degree);
+
+ typename graph_traits<Graph>::vertex_iterator ui, ui_end;
+
+ // Copy degree to pseudo_degree
+ // initialize the color map
+ for (tie(ui, ui_end) = vertices(g); ui != ui_end; ++ui){
+ put(color, *ui, Color::white());
+ }
+
+
+ while( !vertex_queue.empty() ) {
+ Vertex s = vertex_queue.front();
+ vertex_queue.pop_front();
+
+ //call BFS with visitor
+ breadth_first_visit(g, s, Q, vis, color);
+ }
+ return permutation;
+ }
+
+
+ // This is the case where only a single starting vertex is supplied.
+ template <class Graph, class OutputIterator,
+ class ColorMap, class DegreeMap>
+ OutputIterator
+ cuthill_mckee_ordering(const Graph& g,
+ typename graph_traits<Graph>::vertex_descriptor s,
+ OutputIterator permutation,
+ ColorMap color, DegreeMap degree)
+ {
+
+ std::deque< typename graph_traits<Graph>::vertex_descriptor > vertex_queue;
+ vertex_queue.push_front( s );
+
+ return cuthill_mckee_ordering(g, vertex_queue, permutation, color, degree);
+
+ }
+
+
+ // This is the version of CM which selects its own starting vertex
+ template < class Graph, class OutputIterator,
+ class ColorMap, class DegreeMap>
+ OutputIterator
+ cuthill_mckee_ordering(const Graph& G, OutputIterator permutation,
+ ColorMap color, DegreeMap degree)
+ {
+ if (vertices(G).first == vertices(G).second)
+ return permutation;
+
+ typedef typename boost::graph_traits<Graph>::vertex_descriptor Vertex;
+ typedef typename boost::graph_traits<Graph>::vertex_iterator VerIter;
+ typedef typename property_traits<ColorMap>::value_type ColorValue;
+ typedef color_traits<ColorValue> Color;
+
+ std::deque<Vertex> vertex_queue;
+
+ // Mark everything white
+ BGL_FORALL_VERTICES_T(v, G, Graph) put(color, v, Color::white());
+
+ // Find one vertex from each connected component
+ BGL_FORALL_VERTICES_T(v, G, Graph) {
+ if (get(color, v) == Color::white()) {
+ depth_first_visit(G, v, dfs_visitor<>(), color);
+ vertex_queue.push_back(v);
+ }
+ }
+
+ // Find starting nodes for all vertices
+ // TBD: How to do this with a directed graph?
+ for (typename std::deque<Vertex>::iterator i = vertex_queue.begin();
+ i != vertex_queue.end(); ++i)
+ *i = find_starting_node(G, *i, color, degree);
+
+ return cuthill_mckee_ordering(G, vertex_queue, permutation,
+ color, degree);
+ }
+
+ template<typename Graph, typename OutputIterator, typename VertexIndexMap>
+ OutputIterator
+ cuthill_mckee_ordering(const Graph& G, OutputIterator permutation,
+ VertexIndexMap index_map)
+ {
+ if (vertices(G).first == vertices(G).second)
+ return permutation;
+
+ typedef out_degree_property_map<Graph> DegreeMap;
+ std::vector<default_color_type> colors(num_vertices(G));
+ return cuthill_mckee_ordering(G, permutation,
+ make_iterator_property_map(&colors[0],
+ index_map,
+ colors[0]),
+ make_out_degree_map(G));
+ }
+
+ template<typename Graph, typename OutputIterator>
+ inline OutputIterator
+ cuthill_mckee_ordering(const Graph& G, OutputIterator permutation)
+ { return cuthill_mckee_ordering(G, permutation, get(vertex_index, G)); }
+} // namespace boost
+
+
+#endif // BOOST_GRAPH_CUTHILL_MCKEE_HPP
diff --git a/boost/boost/graph/dag_shortest_paths.hpp b/boost/boost/graph/dag_shortest_paths.hpp
new file mode 100644
index 00000000000..cc071de1f3c
--- /dev/null
+++ b/boost/boost/graph/dag_shortest_paths.hpp
@@ -0,0 +1,157 @@
+//=======================================================================
+// Copyright 2002 Indiana University.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// 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_GRAPH_DAG_SHORTEST_PATHS_HPP
+#define BOOST_GRAPH_DAG_SHORTEST_PATHS_HPP
+
+#include <boost/graph/topological_sort.hpp>
+#include <boost/graph/dijkstra_shortest_paths.hpp>
+
+// single-source shortest paths for a Directed Acyclic Graph (DAG)
+
+namespace boost {
+
+ // Initalize distances and call depth first search
+ template <class VertexListGraph, class DijkstraVisitor,
+ class DistanceMap, class WeightMap, class ColorMap,
+ class PredecessorMap,
+ class Compare, class Combine,
+ class DistInf, class DistZero>
+ inline void
+ dag_shortest_paths
+ (const VertexListGraph& g,
+ typename graph_traits<VertexListGraph>::vertex_descriptor s,
+ DistanceMap distance, WeightMap weight, ColorMap color,
+ PredecessorMap pred,
+ DijkstraVisitor vis, Compare compare, Combine combine,
+ DistInf inf, DistZero zero)
+ {
+ typedef typename graph_traits<VertexListGraph>::vertex_descriptor Vertex;
+ std::vector<Vertex> rev_topo_order;
+ rev_topo_order.reserve(num_vertices(g));
+
+ // Call 'depth_first_visit', not 'topological_sort', because we don't
+ // want to traverse the entire graph, only vertices reachable from 's',
+ // and 'topological_sort' will traverse everything. The logic below
+ // is the same as for 'topological_sort', only we call 'depth_first_visit'
+ // and 'topological_sort' calls 'depth_first_search'.
+ topo_sort_visitor<std::back_insert_iterator<std::vector<Vertex> > >
+ topo_visitor(std::back_inserter(rev_topo_order));
+ depth_first_visit(g, s, topo_visitor, color);
+
+ typename graph_traits<VertexListGraph>::vertex_iterator ui, ui_end;
+ for (tie(ui, ui_end) = vertices(g); ui != ui_end; ++ui) {
+ put(distance, *ui, inf);
+ put(pred, *ui, *ui);
+ }
+
+ put(distance, s, zero);
+ vis.discover_vertex(s, g);
+ typename std::vector<Vertex>::reverse_iterator i;
+ for (i = rev_topo_order.rbegin(); i != rev_topo_order.rend(); ++i) {
+ Vertex u = *i;
+ vis.examine_vertex(u, g);
+ typename graph_traits<VertexListGraph>::out_edge_iterator e, e_end;
+ for (tie(e, e_end) = out_edges(u, g); e != e_end; ++e) {
+ vis.discover_vertex(target(*e, g), g);
+ bool decreased = relax(*e, g, weight, pred, distance,
+ combine, compare);
+ if (decreased)
+ vis.edge_relaxed(*e, g);
+ else
+ vis.edge_not_relaxed(*e, g);
+ }
+ vis.finish_vertex(u, g);
+ }
+ }
+
+ namespace detail {
+
+ // Defaults are the same as Dijkstra's algorithm
+
+ // Handle Distance Compare, Combine, Inf and Zero defaults
+ template <class VertexListGraph, class DijkstraVisitor,
+ class DistanceMap, class WeightMap, class ColorMap,
+ class IndexMap, class Params>
+ inline void
+ dag_sp_dispatch2
+ (const VertexListGraph& g,
+ typename graph_traits<VertexListGraph>::vertex_descriptor s,
+ DistanceMap distance, WeightMap weight, ColorMap color, IndexMap id,
+ DijkstraVisitor vis, const Params& params)
+ {
+ typedef typename property_traits<DistanceMap>::value_type D;
+ dummy_property_map p_map;
+ dag_shortest_paths
+ (g, s, distance, weight, color,
+ choose_param(get_param(params, vertex_predecessor), p_map),
+ vis,
+ choose_param(get_param(params, distance_compare_t()), std::less<D>()),
+ choose_param(get_param(params, distance_combine_t()), closed_plus<D>()),
+ choose_param(get_param(params, distance_inf_t()),
+ (std::numeric_limits<D>::max)()),
+ choose_param(get_param(params, distance_zero_t()),
+ D()));
+ }
+
+ // Handle DistanceMap and ColorMap defaults
+ template <class VertexListGraph, class DijkstraVisitor,
+ class DistanceMap, class WeightMap, class ColorMap,
+ class IndexMap, class Params>
+ inline void
+ dag_sp_dispatch1
+ (const VertexListGraph& g,
+ typename graph_traits<VertexListGraph>::vertex_descriptor s,
+ DistanceMap distance, WeightMap weight, ColorMap color, IndexMap id,
+ DijkstraVisitor vis, const Params& params)
+ {
+ typedef typename property_traits<WeightMap>::value_type T;
+ typename std::vector<T>::size_type n;
+ n = is_default_param(distance) ? num_vertices(g) : 1;
+ std::vector<T> distance_map(n);
+ n = is_default_param(color) ? num_vertices(g) : 1;
+ std::vector<default_color_type> color_map(n);
+
+ dag_sp_dispatch2
+ (g, s,
+ choose_param(distance,
+ make_iterator_property_map(distance_map.begin(), id,
+ distance_map[0])),
+ weight,
+ choose_param(color,
+ make_iterator_property_map(color_map.begin(), id,
+ color_map[0])),
+ id, vis, params);
+ }
+
+ } // namespace detail
+
+ template <class VertexListGraph, class Param, class Tag, class Rest>
+ inline void
+ dag_shortest_paths
+ (const VertexListGraph& g,
+ typename graph_traits<VertexListGraph>::vertex_descriptor s,
+ const bgl_named_params<Param,Tag,Rest>& params)
+ {
+ // assert that the graph is directed...
+ null_visitor null_vis;
+ detail::dag_sp_dispatch1
+ (g, s,
+ get_param(params, vertex_distance),
+ choose_const_pmap(get_param(params, edge_weight), g, edge_weight),
+ get_param(params, vertex_color),
+ choose_const_pmap(get_param(params, vertex_index), g, vertex_index),
+ choose_param(get_param(params, graph_visitor),
+ make_dijkstra_visitor(null_vis)),
+ params);
+ }
+
+} // namespace boost
+
+#endif // BOOST_GRAPH_DAG_SHORTEST_PATHS_HPP
diff --git a/boost/boost/graph/depth_first_search.hpp b/boost/boost/graph/depth_first_search.hpp
new file mode 100644
index 00000000000..6a0abb9a6a9
--- /dev/null
+++ b/boost/boost/graph/depth_first_search.hpp
@@ -0,0 +1,365 @@
+//=======================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Copyright 2003 Bruce Barr
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// 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)
+//=======================================================================
+
+// Nonrecursive implementation of depth_first_visit_impl submitted by
+// Bruce Barr, schmoost <at> yahoo.com, May/June 2003.
+#ifndef BOOST_GRAPH_RECURSIVE_DFS_HPP
+#define BOOST_GRAPH_RECURSIVE_DFS_HPP
+
+#include <boost/config.hpp>
+#include <boost/graph/graph_traits.hpp>
+#include <boost/graph/graph_concepts.hpp>
+#include <boost/graph/properties.hpp>
+#include <boost/graph/visitors.hpp>
+#include <boost/graph/named_function_params.hpp>
+
+#include <boost/ref.hpp>
+#include <boost/implicit_cast.hpp>
+
+#include <vector>
+#include <utility>
+
+namespace boost {
+
+ template <class Visitor, class Graph>
+ class DFSVisitorConcept {
+ public:
+ void constraints() {
+ function_requires< CopyConstructibleConcept<Visitor> >();
+ vis.initialize_vertex(u, g);
+ vis.start_vertex(u, g);
+ vis.discover_vertex(u, g);
+ vis.examine_edge(e, g);
+ vis.tree_edge(e, g);
+ vis.back_edge(e, g);
+ vis.forward_or_cross_edge(e, g);
+ vis.finish_vertex(u, g);
+ }
+ private:
+ Visitor vis;
+ Graph g;
+ typename graph_traits<Graph>::vertex_descriptor u;
+ typename graph_traits<Graph>::edge_descriptor e;
+ };
+
+ namespace detail {
+
+ struct nontruth2 {
+ template<class T, class T2>
+ bool operator()(const T&, const T2&) const { return false; }
+ };
+
+
+// Define BOOST_RECURSIVE_DFS to use older, recursive version.
+// It is retained for a while in order to perform performance
+// comparison.
+#ifndef BOOST_RECURSIVE_DFS
+
+ // If the vertex u and the iterators ei and ei_end are thought of as the
+ // context of the algorithm, each push and pop from the stack could
+ // be thought of as a context shift.
+ // Each pass through "while (ei != ei_end)" may refer to the out-edges of
+ // an entirely different vertex, because the context of the algorithm
+ // shifts every time a white adjacent vertex is discovered.
+ // The corresponding context shift back from the adjacent vertex occurs
+ // after all of its out-edges have been examined.
+ //
+ // See http://lists.boost.org/MailArchives/boost/msg48752.php for FAQ.
+
+ template <class IncidenceGraph, class DFSVisitor, class ColorMap,
+ class TerminatorFunc>
+ void depth_first_visit_impl
+ (const IncidenceGraph& g,
+ typename graph_traits<IncidenceGraph>::vertex_descriptor u,
+ DFSVisitor& vis,
+ ColorMap color, TerminatorFunc func = TerminatorFunc())
+ {
+ function_requires<IncidenceGraphConcept<IncidenceGraph> >();
+ function_requires<DFSVisitorConcept<DFSVisitor, IncidenceGraph> >();
+ typedef typename graph_traits<IncidenceGraph>::vertex_descriptor Vertex;
+ function_requires< ReadWritePropertyMapConcept<ColorMap, Vertex> >();
+ typedef typename property_traits<ColorMap>::value_type ColorValue;
+ function_requires< ColorValueConcept<ColorValue> >();
+ typedef color_traits<ColorValue> Color;
+ typedef typename graph_traits<IncidenceGraph>::out_edge_iterator Iter;
+ typedef std::pair<Vertex, std::pair<Iter, Iter> > VertexInfo;
+
+ Iter ei, ei_end;
+ std::vector<VertexInfo> stack;
+
+ // Possible optimization for vector
+ //stack.reserve(num_vertices(g));
+
+ typedef typename unwrap_reference<TerminatorFunc>::type TF;
+
+ put(color, u, Color::gray());
+ vis.discover_vertex(u, g);
+ tie(ei, ei_end) = out_edges(u, g);
+ // Variable is needed to workaround a borland bug.
+ TF& fn = static_cast<TF&>(func);
+ if (fn(u, g)) {
+ // If this vertex terminates the search, we push empty range
+ stack.push_back(std::make_pair(u, std::make_pair(ei_end, ei_end)));
+ } else {
+ stack.push_back(std::make_pair(u, std::make_pair(ei, ei_end)));
+ }
+ while (!stack.empty()) {
+ VertexInfo& back = stack.back();
+ u = back.first;
+ tie(ei, ei_end) = back.second;
+ stack.pop_back();
+ while (ei != ei_end) {
+ Vertex v = target(*ei, g);
+ vis.examine_edge(*ei, g);
+ ColorValue v_color = get(color, v);
+ if (v_color == Color::white()) {
+ vis.tree_edge(*ei, g);
+ stack.push_back(std::make_pair(u, std::make_pair(++ei, ei_end)));
+ u = v;
+ put(color, u, Color::gray());
+ vis.discover_vertex(u, g);
+ tie(ei, ei_end) = out_edges(u, g);
+ if (fn(u, g)) {
+ ei = ei_end;
+ }
+ } else if (v_color == Color::gray()) {
+ vis.back_edge(*ei, g);
+ ++ei;
+ } else {
+ vis.forward_or_cross_edge(*ei, g);
+ ++ei;
+ }
+ }
+ put(color, u, Color::black());
+ vis.finish_vertex(u, g);
+ }
+ }
+
+#else // BOOST_RECURSIVE_DFS is defined
+
+ template <class IncidenceGraph, class DFSVisitor, class ColorMap,
+ class TerminatorFunc>
+ void depth_first_visit_impl
+ (const IncidenceGraph& g,
+ typename graph_traits<IncidenceGraph>::vertex_descriptor u,
+ DFSVisitor& vis, // pass-by-reference here, important!
+ ColorMap color, TerminatorFunc func)
+ {
+ function_requires<IncidenceGraphConcept<IncidenceGraph> >();
+ function_requires<DFSVisitorConcept<DFSVisitor, IncidenceGraph> >();
+ typedef typename graph_traits<IncidenceGraph>::vertex_descriptor Vertex;
+ function_requires< ReadWritePropertyMapConcept<ColorMap, Vertex> >();
+ typedef typename property_traits<ColorMap>::value_type ColorValue;
+ function_requires< ColorValueConcept<ColorValue> >();
+ typedef color_traits<ColorValue> Color;
+ typename graph_traits<IncidenceGraph>::out_edge_iterator ei, ei_end;
+
+ put(color, u, Color::gray()); vis.discover_vertex(u, g);
+
+ typedef typename unwrap_reference<TerminatorFunc>::type TF;
+ // Variable is needed to workaround a borland bug.
+ TF& fn = static_cast<TF&>(func);
+ if (!fn(u, g))
+ for (tie(ei, ei_end) = out_edges(u, g); ei != ei_end; ++ei) {
+ Vertex v = target(*ei, g); vis.examine_edge(*ei, g);
+ ColorValue v_color = get(color, v);
+ if (v_color == Color::white()) { vis.tree_edge(*ei, g);
+ depth_first_visit_impl(g, v, vis, color, func);
+ } else if (v_color == Color::gray()) vis.back_edge(*ei, g);
+ else vis.forward_or_cross_edge(*ei, g);
+ }
+ put(color, u, Color::black()); vis.finish_vertex(u, g);
+ }
+
+#endif
+
+ } // namespace detail
+
+ template <class VertexListGraph, class DFSVisitor, class ColorMap>
+ void
+ depth_first_search(const VertexListGraph& g, DFSVisitor vis, ColorMap color,
+ typename graph_traits<VertexListGraph>::vertex_descriptor start_vertex)
+ {
+ typedef typename graph_traits<VertexListGraph>::vertex_descriptor Vertex;
+ function_requires<DFSVisitorConcept<DFSVisitor, VertexListGraph> >();
+ typedef typename property_traits<ColorMap>::value_type ColorValue;
+ typedef color_traits<ColorValue> Color;
+
+ typename graph_traits<VertexListGraph>::vertex_iterator ui, ui_end;
+ for (tie(ui, ui_end) = vertices(g); ui != ui_end; ++ui) {
+ put(color, *ui, Color::white()); vis.initialize_vertex(*ui, g);
+ }
+
+ if (start_vertex != implicit_cast<Vertex>(*vertices(g).first)){ vis.start_vertex(start_vertex, g);
+ detail::depth_first_visit_impl(g, start_vertex, vis, color,
+ detail::nontruth2());
+ }
+
+ for (tie(ui, ui_end) = vertices(g); ui != ui_end; ++ui) {
+ ColorValue u_color = get(color, *ui);
+ if (u_color == Color::white()) { vis.start_vertex(*ui, g);
+ detail::depth_first_visit_impl(g, *ui, vis, color, detail::nontruth2());
+ }
+ }
+ }
+
+ template <class VertexListGraph, class DFSVisitor, class ColorMap>
+ void
+ depth_first_search(const VertexListGraph& g, DFSVisitor vis, ColorMap color)
+ {
+ if (vertices(g).first == vertices(g).second)
+ return;
+
+ depth_first_search(g, vis, color, *vertices(g).first);
+ }
+
+ namespace detail {
+ template <class ColorMap>
+ struct dfs_dispatch {
+
+ template <class VertexListGraph, class Vertex, class DFSVisitor,
+ class P, class T, class R>
+ static void
+ apply(const VertexListGraph& g, DFSVisitor vis, Vertex start_vertex,
+ const bgl_named_params<P, T, R>&,
+ ColorMap color)
+ {
+ depth_first_search(g, vis, color, start_vertex);
+ }
+ };
+
+ template <>
+ struct dfs_dispatch<detail::error_property_not_found> {
+ template <class VertexListGraph, class Vertex, class DFSVisitor,
+ class P, class T, class R>
+ static void
+ apply(const VertexListGraph& g, DFSVisitor vis, Vertex start_vertex,
+ const bgl_named_params<P, T, R>& params,
+ detail::error_property_not_found)
+ {
+ std::vector<default_color_type> color_vec(num_vertices(g));
+ default_color_type c = white_color; // avoid warning about un-init
+ depth_first_search
+ (g, vis, make_iterator_property_map
+ (color_vec.begin(),
+ choose_const_pmap(get_param(params, vertex_index),
+ g, vertex_index), c),
+ start_vertex);
+ }
+ };
+ } // namespace detail
+
+
+ template <class Visitors = null_visitor>
+ class dfs_visitor {
+ public:
+ dfs_visitor() { }
+ dfs_visitor(Visitors vis) : m_vis(vis) { }
+
+ template <class Vertex, class Graph>
+ void initialize_vertex(Vertex u, const Graph& g) {
+ invoke_visitors(m_vis, u, g, ::boost::on_initialize_vertex());
+ }
+ template <class Vertex, class Graph>
+ void start_vertex(Vertex u, const Graph& g) {
+ invoke_visitors(m_vis, u, g, ::boost::on_start_vertex());
+ }
+ template <class Vertex, class Graph>
+ void discover_vertex(Vertex u, const Graph& g) {
+ invoke_visitors(m_vis, u, g, ::boost::on_discover_vertex());
+ }
+ template <class Edge, class Graph>
+ void examine_edge(Edge u, const Graph& g) {
+ invoke_visitors(m_vis, u, g, ::boost::on_examine_edge());
+ }
+ template <class Edge, class Graph>
+ void tree_edge(Edge u, const Graph& g) {
+ invoke_visitors(m_vis, u, g, ::boost::on_tree_edge());
+ }
+ template <class Edge, class Graph>
+ void back_edge(Edge u, const Graph& g) {
+ invoke_visitors(m_vis, u, g, ::boost::on_back_edge());
+ }
+ template <class Edge, class Graph>
+ void forward_or_cross_edge(Edge u, const Graph& g) {
+ invoke_visitors(m_vis, u, g, ::boost::on_forward_or_cross_edge());
+ }
+ template <class Vertex, class Graph>
+ void finish_vertex(Vertex u, const Graph& g) {
+ invoke_visitors(m_vis, u, g, ::boost::on_finish_vertex());
+ }
+
+ BOOST_GRAPH_EVENT_STUB(on_initialize_vertex,dfs)
+ BOOST_GRAPH_EVENT_STUB(on_start_vertex,dfs)
+ BOOST_GRAPH_EVENT_STUB(on_discover_vertex,dfs)
+ BOOST_GRAPH_EVENT_STUB(on_examine_edge,dfs)
+ BOOST_GRAPH_EVENT_STUB(on_tree_edge,dfs)
+ BOOST_GRAPH_EVENT_STUB(on_back_edge,dfs)
+ BOOST_GRAPH_EVENT_STUB(on_forward_or_cross_edge,dfs)
+ BOOST_GRAPH_EVENT_STUB(on_finish_vertex,dfs)
+
+ protected:
+ Visitors m_vis;
+ };
+ template <class Visitors>
+ dfs_visitor<Visitors>
+ make_dfs_visitor(Visitors vis) {
+ return dfs_visitor<Visitors>(vis);
+ }
+ typedef dfs_visitor<> default_dfs_visitor;
+
+
+ // Named Parameter Variant
+ template <class VertexListGraph, class P, class T, class R>
+ void
+ depth_first_search(const VertexListGraph& g,
+ const bgl_named_params<P, T, R>& params)
+ {
+ typedef typename property_value< bgl_named_params<P, T, R>,
+ vertex_color_t>::type C;
+ if (vertices(g).first == vertices(g).second)
+ return;
+ detail::dfs_dispatch<C>::apply
+ (g,
+ choose_param(get_param(params, graph_visitor),
+ make_dfs_visitor(null_visitor())),
+ choose_param(get_param(params, root_vertex_t()),
+ *vertices(g).first),
+ params,
+ get_param(params, vertex_color)
+ );
+ }
+
+ template <class IncidenceGraph, class DFSVisitor, class ColorMap>
+ void depth_first_visit
+ (const IncidenceGraph& g,
+ typename graph_traits<IncidenceGraph>::vertex_descriptor u,
+ DFSVisitor vis, ColorMap color)
+ {
+ vis.start_vertex(u, g);
+ detail::depth_first_visit_impl(g, u, vis, color, detail::nontruth2());
+ }
+
+ template <class IncidenceGraph, class DFSVisitor, class ColorMap,
+ class TerminatorFunc>
+ void depth_first_visit
+ (const IncidenceGraph& g,
+ typename graph_traits<IncidenceGraph>::vertex_descriptor u,
+ DFSVisitor vis, ColorMap color, TerminatorFunc func = TerminatorFunc())
+ {
+ vis.start_vertex(u, g);
+ detail::depth_first_visit_impl(g, u, vis, color, func);
+ }
+
+
+} // namespace boost
+
+
+#endif
diff --git a/boost/boost/graph/detail/adj_list_edge_iterator.hpp b/boost/boost/graph/detail/adj_list_edge_iterator.hpp
new file mode 100644
index 00000000000..12cb6ee97a9
--- /dev/null
+++ b/boost/boost/graph/detail/adj_list_edge_iterator.hpp
@@ -0,0 +1,117 @@
+//
+//=======================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// 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_GRAPH_DETAIL_ADJ_LIST_EDGE_ITERATOR_HPP
+#define BOOST_GRAPH_DETAIL_ADJ_LIST_EDGE_ITERATOR_HPP
+
+#include <iterator>
+#include <utility>
+#include <boost/detail/workaround.hpp>
+
+#if BOOST_WORKAROUND( __IBMCPP__, <= 600 )
+# define BOOST_GRAPH_NO_OPTIONAL
+#endif
+
+#ifdef BOOST_GRAPH_NO_OPTIONAL
+# define BOOST_GRAPH_MEMBER .
+#else
+# define BOOST_GRAPH_MEMBER ->
+# include <boost/optional.hpp>
+#endif // ndef BOOST_GRAPH_NO_OPTIONAL
+
+namespace boost {
+
+ namespace detail {
+
+ template <class VertexIterator, class OutEdgeIterator, class Graph>
+ class adj_list_edge_iterator {
+ typedef adj_list_edge_iterator self;
+ public:
+ typedef std::forward_iterator_tag iterator_category;
+ typedef typename OutEdgeIterator::value_type value_type;
+ typedef typename OutEdgeIterator::reference reference;
+ typedef typename OutEdgeIterator::pointer pointer;
+ typedef typename OutEdgeIterator::difference_type difference_type;
+ typedef difference_type distance_type;
+
+ inline adj_list_edge_iterator() {}
+
+ inline adj_list_edge_iterator(const self& x)
+ : vBegin(x.vBegin), vCurr(x.vCurr), vEnd(x.vEnd),
+ edges(x.edges), m_g(x.m_g) { }
+
+ template <class G>
+ inline adj_list_edge_iterator(VertexIterator b,
+ VertexIterator c,
+ VertexIterator e,
+ const G& g)
+ : vBegin(b), vCurr(c), vEnd(e), m_g(&g) {
+ if ( vCurr != vEnd ) {
+ while ( vCurr != vEnd && out_degree(*vCurr, *m_g) == 0 )
+ ++vCurr;
+ if ( vCurr != vEnd )
+ edges = out_edges(*vCurr, *m_g);
+ }
+ }
+
+ /*Note:
+ In the directed graph cases, it is fine.
+ For undirected graphs, one edge go through twice.
+ */
+ inline self& operator++() {
+ ++edges BOOST_GRAPH_MEMBER first;
+ if (edges BOOST_GRAPH_MEMBER first == edges BOOST_GRAPH_MEMBER second)
+ {
+ ++vCurr;
+ while ( vCurr != vEnd && out_degree(*vCurr, *m_g) == 0 )
+ ++vCurr;
+ if ( vCurr != vEnd )
+ edges = out_edges(*vCurr, *m_g);
+ }
+ return *this;
+ }
+ inline self operator++(int) {
+ self tmp = *this;
+ ++(*this);
+ return tmp;
+ }
+ inline value_type operator*() const
+ { return *edges BOOST_GRAPH_MEMBER first; }
+ inline bool operator==(const self& x) const {
+ return vCurr == x.vCurr
+ && (vCurr == vEnd
+ || edges BOOST_GRAPH_MEMBER first == x.edges BOOST_GRAPH_MEMBER first);
+ }
+ inline bool operator!=(const self& x) const {
+ return vCurr != x.vCurr
+ || (vCurr != vEnd
+ && edges BOOST_GRAPH_MEMBER first != x.edges BOOST_GRAPH_MEMBER first);
+ }
+ protected:
+ VertexIterator vBegin;
+ VertexIterator vCurr;
+ VertexIterator vEnd;
+
+#ifdef BOOST_GRAPH_NO_OPTIONAL
+ std::pair<OutEdgeIterator, OutEdgeIterator> edges;
+#else
+ boost::optional<std::pair<OutEdgeIterator, OutEdgeIterator> >
+ edges;
+#endif // ndef BOOST_GRAPH_NO_OPTIONAL
+ const Graph* m_g;
+ };
+
+ } // namespace detail
+
+}
+
+#undef BOOST_GRAPH_MEMBER
+
+#endif // BOOST_GRAPH_DETAIL_ADJ_LIST_EDGE_ITERATOR_HPP
diff --git a/boost/boost/graph/detail/adjacency_list.hpp b/boost/boost/graph/detail/adjacency_list.hpp
new file mode 100644
index 00000000000..46b4ea81808
--- /dev/null
+++ b/boost/boost/graph/detail/adjacency_list.hpp
@@ -0,0 +1,2832 @@
+// -*- c++ -*-
+//=======================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// 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_GRAPH_DETAIL_ADJACENCY_LIST_HPP
+#define BOOST_GRAPH_DETAIL_ADJACENCY_LIST_HPP
+
+#include <map> // for vertex_map in copy_impl
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/operators.hpp>
+#include <boost/property_map.hpp>
+#include <boost/pending/integer_range.hpp>
+#include <boost/graph/graph_traits.hpp>
+#include <memory>
+#include <algorithm>
+#include <boost/limits.hpp>
+
+#include <boost/iterator/iterator_adaptor.hpp>
+
+#include <boost/pending/ct_if.hpp>
+#include <boost/graph/graph_concepts.hpp>
+#include <boost/pending/container_traits.hpp>
+#include <boost/graph/detail/adj_list_edge_iterator.hpp>
+#include <boost/graph/properties.hpp>
+#include <boost/pending/property.hpp>
+#include <boost/graph/adjacency_iterator.hpp>
+#include <boost/static_assert.hpp>
+
+// Symbol truncation problems with MSVC, trying to shorten names.
+#define stored_edge se_
+#define stored_edge_property sep_
+#define stored_edge_iter sei_
+
+/*
+ Outline for this file:
+
+ out_edge_iterator and in_edge_iterator implementation
+ edge_iterator for undirected graph
+ stored edge types (these object live in the out-edge/in-edge lists)
+ directed edges helper class
+ directed graph helper class
+ undirected graph helper class
+ bidirectional graph helper class
+ bidirectional graph helper class (without edge properties)
+ bidirectional graph helper class (with edge properties)
+ adjacency_list helper class
+ adj_list_impl class
+ vec_adj_list_impl class
+ adj_list_gen class
+ vertex property map
+ edge property map
+
+
+ Note: it would be nice to merge some of the undirected and
+ bidirectional code... it is awful similar.
+ */
+
+
+namespace boost {
+
+ namespace detail {
+
+ template <typename DirectedS>
+ struct directed_category_traits {
+ typedef directed_tag directed_category;
+ };
+
+ template <>
+ struct directed_category_traits<directedS> {
+ typedef directed_tag directed_category;
+ };
+ template <>
+ struct directed_category_traits<undirectedS> {
+ typedef undirected_tag directed_category;
+ };
+ template <>
+ struct directed_category_traits<bidirectionalS> {
+ typedef bidirectional_tag directed_category;
+ };
+
+ template <class Vertex>
+ struct target_is {
+ target_is(const Vertex& v) : m_target(v) { }
+ template <class StoredEdge>
+ bool operator()(const StoredEdge& e) const {
+ return e.get_target() == m_target;
+ }
+ Vertex m_target;
+ };
+
+ // O(E/V)
+ template <class EdgeList, class vertex_descriptor>
+ void erase_from_incidence_list(EdgeList& el, vertex_descriptor v,
+ allow_parallel_edge_tag)
+ {
+ boost::graph_detail::erase_if(el, detail::target_is<vertex_descriptor>(v));
+ }
+ // O(log(E/V))
+ template <class EdgeList, class vertex_descriptor>
+ void erase_from_incidence_list(EdgeList& el, vertex_descriptor v,
+ disallow_parallel_edge_tag)
+ {
+ typedef typename EdgeList::value_type StoredEdge;
+ el.erase(StoredEdge(v));
+ }
+
+ //=========================================================================
+ // Out-Edge and In-Edge Iterator Implementation
+
+ template <class BaseIter, class VertexDescriptor, class EdgeDescriptor, class Difference>
+ struct out_edge_iter
+ : iterator_adaptor<
+ out_edge_iter<BaseIter, VertexDescriptor, EdgeDescriptor, Difference>
+ , BaseIter
+ , EdgeDescriptor
+ , use_default
+ , EdgeDescriptor
+ , Difference
+ >
+ {
+ typedef iterator_adaptor<
+ out_edge_iter<BaseIter, VertexDescriptor, EdgeDescriptor, Difference>
+ , BaseIter
+ , EdgeDescriptor
+ , use_default
+ , EdgeDescriptor
+ , Difference
+ > super_t;
+
+ inline out_edge_iter() { }
+ inline out_edge_iter(const BaseIter& i, const VertexDescriptor& src)
+ : super_t(i), m_src(src) { }
+
+ inline EdgeDescriptor
+ dereference() const
+ {
+ return EdgeDescriptor(m_src, (*this->base()).get_target(),
+ &(*this->base()).get_property());
+ }
+ VertexDescriptor m_src;
+ };
+
+ template <class BaseIter, class VertexDescriptor, class EdgeDescriptor, class Difference>
+ struct in_edge_iter
+ : iterator_adaptor<
+ in_edge_iter<BaseIter, VertexDescriptor, EdgeDescriptor, Difference>
+ , BaseIter
+ , EdgeDescriptor
+ , use_default
+ , EdgeDescriptor
+ , Difference
+ >
+ {
+ typedef iterator_adaptor<
+ in_edge_iter<BaseIter, VertexDescriptor, EdgeDescriptor, Difference>
+ , BaseIter
+ , EdgeDescriptor
+ , use_default
+ , EdgeDescriptor
+ , Difference
+ > super_t;
+
+ inline in_edge_iter() { }
+ inline in_edge_iter(const BaseIter& i, const VertexDescriptor& src)
+ : super_t(i), m_src(src) { }
+
+ inline EdgeDescriptor
+ dereference() const
+ {
+ return EdgeDescriptor((*this->base()).get_target(), m_src,
+ &this->base()->get_property());
+ }
+ VertexDescriptor m_src;
+ };
+
+ //=========================================================================
+ // Undirected Edge Iterator Implementation
+
+ template <class EdgeIter, class EdgeDescriptor, class Difference>
+ struct undirected_edge_iter
+ : iterator_adaptor<
+ undirected_edge_iter<EdgeIter, EdgeDescriptor, Difference>
+ , EdgeIter
+ , EdgeDescriptor
+ , use_default
+ , EdgeDescriptor
+ , Difference
+ >
+ {
+ typedef iterator_adaptor<
+ undirected_edge_iter<EdgeIter, EdgeDescriptor, Difference>
+ , EdgeIter
+ , EdgeDescriptor
+ , use_default
+ , EdgeDescriptor
+ , Difference
+ > super_t;
+
+ undirected_edge_iter() {}
+
+ explicit undirected_edge_iter(EdgeIter i)
+ : super_t(i) {}
+
+ inline EdgeDescriptor
+ dereference() const {
+ return EdgeDescriptor(
+ (*this->base()).m_source
+ , (*this->base()).m_target
+ , &this->base()->get_property());
+ }
+ };
+
+ //=========================================================================
+ // Edge Storage Types (stored in the out-edge/in-edge lists)
+
+ template <class Vertex>
+ class stored_edge
+ : public boost::equality_comparable1< stored_edge<Vertex>,
+ boost::less_than_comparable1< stored_edge<Vertex> > >
+ {
+ public:
+ typedef no_property property_type;
+ inline stored_edge() { }
+ inline stored_edge(Vertex target, const no_property& = no_property())
+ : m_target(target) { }
+ // Need to write this explicitly so stored_edge_property can
+ // invoke Base::operator= (at least, for SGI MIPSPro compiler)
+ inline stored_edge& operator=(const stored_edge& x) {
+ m_target = x.m_target;
+ return *this;
+ }
+ inline Vertex& get_target() const { return m_target; }
+ inline const no_property& get_property() const { return s_prop; }
+ inline bool operator==(const stored_edge& x) const
+ { return m_target == x.get_target(); }
+ inline bool operator<(const stored_edge& x) const
+ { return m_target < x.get_target(); }
+ //protected: need to add hash<> as a friend
+ static no_property s_prop;
+ // Sometimes target not used as key in the set, and in that case
+ // it is ok to change the target.
+ mutable Vertex m_target;
+ };
+ template <class Vertex>
+ no_property stored_edge<Vertex>::s_prop;
+
+ template <class Vertex, class Property>
+ class stored_edge_property : public stored_edge<Vertex> {
+ typedef stored_edge_property self;
+ typedef stored_edge<Vertex> Base;
+ public:
+ typedef Property property_type;
+ inline stored_edge_property() { }
+ inline stored_edge_property(Vertex target,
+ const Property& p = Property())
+ : stored_edge<Vertex>(target), m_property(new Property(p)) { }
+ stored_edge_property(const self& x)
+ : Base(x), m_property(const_cast<self&>(x).m_property) { }
+ self& operator=(const self& x) {
+ Base::operator=(x);
+ m_property = const_cast<self&>(x).m_property;
+ return *this;
+ }
+ inline Property& get_property() { return *m_property; }
+ inline const Property& get_property() const { return *m_property; }
+ protected:
+ // Holding the property by-value causes edge-descriptor
+ // invalidation for add_edge() with EdgeList=vecS. Instead we
+ // hold a pointer to the property. std::auto_ptr is not
+ // a perfect fit for the job, but it is darn close.
+ std::auto_ptr<Property> m_property;
+ };
+
+
+ template <class Vertex, class Iter, class Property>
+ class stored_edge_iter
+ : public stored_edge<Vertex>
+ {
+ public:
+ typedef Property property_type;
+ inline stored_edge_iter() { }
+ inline stored_edge_iter(Vertex v)
+ : stored_edge<Vertex>(v) { }
+ inline stored_edge_iter(Vertex v, Iter i, void* = 0)
+ : stored_edge<Vertex>(v), m_iter(i) { }
+ inline Property& get_property() { return m_iter->get_property(); }
+ inline const Property& get_property() const {
+ return m_iter->get_property();
+ }
+ inline Iter get_iter() const { return m_iter; }
+ protected:
+ Iter m_iter;
+ };
+
+ // For when the EdgeList is a std::vector.
+ // Want to make the iterator stable, so use an offset
+ // instead of an iterator into a std::vector
+ template <class Vertex, class EdgeVec, class Property>
+ class stored_ra_edge_iter
+ : public stored_edge<Vertex>
+ {
+ typedef typename EdgeVec::iterator Iter;
+ public:
+ typedef Property property_type;
+ inline stored_ra_edge_iter() { }
+ inline stored_ra_edge_iter(Vertex v, Iter i = Iter(),
+ EdgeVec* edge_vec = 0)
+ : stored_edge<Vertex>(v), m_i(i - edge_vec->begin()), m_vec(edge_vec){ }
+ inline Property& get_property() { return (*m_vec)[m_i].get_property(); }
+ inline const Property& get_property() const {
+ return (*m_vec)[m_i].get_property();
+ }
+ inline Iter get_iter() const { return m_vec->begin() + m_i; }
+ protected:
+ std::size_t m_i;
+ EdgeVec* m_vec;
+ };
+
+ } // namespace detail
+
+ template <class Tag, class Vertex, class Property>
+ const typename property_value<Property,Tag>::type&
+ get(Tag property_tag,
+ const detail::stored_edge_property<Vertex, Property>& e)
+ {
+ return get_property_value(e.get_property(), property_tag);
+ }
+
+ template <class Tag, class Vertex, class Iter, class Property>
+ const typename property_value<Property,Tag>::type&
+ get(Tag property_tag,
+ const detail::stored_edge_iter<Vertex, Iter, Property>& e)
+ {
+ return get_property_value(e.get_property(), property_tag);
+ }
+
+ template <class Tag, class Vertex, class EdgeVec, class Property>
+ const typename property_value<Property,Tag>::type&
+ get(Tag property_tag,
+ const detail::stored_ra_edge_iter<Vertex, EdgeVec, Property>& e)
+ {
+ return get_property_value(e.get_property(), property_tag);
+ }
+
+ //=========================================================================
+ // Directed Edges Helper Class
+
+ namespace detail {
+
+ // O(E/V)
+ template <class edge_descriptor, class EdgeList, class StoredProperty>
+ inline void
+ remove_directed_edge_dispatch(edge_descriptor, EdgeList& el,
+ StoredProperty& p)
+ {
+ for (typename EdgeList::iterator i = el.begin();
+ i != el.end(); ++i)
+ if (&(*i).get_property() == &p) {
+ el.erase(i);
+ return;
+ }
+ }
+
+ template <class incidence_iterator, class EdgeList, class Predicate>
+ inline void
+ remove_directed_edge_if_dispatch(incidence_iterator first,
+ incidence_iterator last,
+ EdgeList& el, Predicate pred,
+ boost::allow_parallel_edge_tag)
+ {
+ // remove_if
+ while (first != last && !pred(*first))
+ ++first;
+ incidence_iterator i = first;
+ if (first != last)
+ for (; i != last; ++i)
+ if (!pred(*i)) {
+ *first.base() = *i.base();
+ ++first;
+ }
+ el.erase(first.base(), el.end());
+ }
+ template <class incidence_iterator, class EdgeList, class Predicate>
+ inline void
+ remove_directed_edge_if_dispatch(incidence_iterator first,
+ incidence_iterator last,
+ EdgeList& el,
+ Predicate pred,
+ boost::disallow_parallel_edge_tag)
+ {
+ for (incidence_iterator next = first;
+ first != last; first = next) {
+ ++next;
+ if (pred(*first))
+ el.erase( first.base() );
+ }
+ }
+
+ template <class PropT, class Graph, class incidence_iterator,
+ class EdgeList, class Predicate>
+ inline void
+ undirected_remove_out_edge_if_dispatch(Graph& g,
+ incidence_iterator first,
+ incidence_iterator last,
+ EdgeList& el, Predicate pred,
+ boost::allow_parallel_edge_tag)
+ {
+ typedef typename Graph::global_edgelist_selector EdgeListS;
+ BOOST_STATIC_ASSERT((!is_same<EdgeListS, vecS>::value));
+
+ // remove_if
+ while (first != last && !pred(*first))
+ ++first;
+ incidence_iterator i = first;
+ bool self_loop_removed = false;
+ if (first != last)
+ for (; i != last; ++i) {
+ if (self_loop_removed) {
+ /* With self loops, the descriptor will show up
+ * twice. The first time it will be removed, and now it
+ * will be skipped.
+ */
+ self_loop_removed = false;
+ }
+ else if (!pred(*i)) {
+ *first.base() = *i.base();
+ ++first;
+ } else {
+ if (source(*i, g) == target(*i, g)) self_loop_removed = true;
+ else {
+ // Remove the edge from the target
+ detail::remove_directed_edge_dispatch
+ (*i,
+ g.out_edge_list(target(*i, g)),
+ *(PropT*)(*i).get_property());
+ }
+
+ // Erase the edge property
+ g.m_edges.erase( (*i.base()).get_iter() );
+ }
+ }
+ el.erase(first.base(), el.end());
+ }
+ template <class PropT, class Graph, class incidence_iterator,
+ class EdgeList, class Predicate>
+ inline void
+ undirected_remove_out_edge_if_dispatch(Graph& g,
+ incidence_iterator first,
+ incidence_iterator last,
+ EdgeList& el,
+ Predicate pred,
+ boost::disallow_parallel_edge_tag)
+ {
+ typedef typename Graph::global_edgelist_selector EdgeListS;
+ BOOST_STATIC_ASSERT((!is_same<EdgeListS, vecS>::value));
+
+ for (incidence_iterator next = first;
+ first != last; first = next) {
+ ++next;
+ if (pred(*first)) {
+ if (source(*first, g) != target(*first, g)) {
+ // Remove the edge from the target
+ detail::remove_directed_edge_dispatch
+ (*first,
+ g.out_edge_list(target(*first, g)),
+ *(PropT*)(*first).get_property());
+ }
+
+ // Erase the edge property
+ g.m_edges.erase( (*first.base()).get_iter() );
+
+ // Erase the edge in the source
+ el.erase( first.base() );
+ }
+ }
+ }
+
+ // O(E/V)
+ template <class edge_descriptor, class EdgeList, class StoredProperty>
+ inline void
+ remove_directed_edge_dispatch(edge_descriptor e, EdgeList& el,
+ no_property&)
+ {
+ for (typename EdgeList::iterator i = el.begin();
+ i != el.end(); ++i)
+ if ((*i).get_target() == e.m_target) {
+ el.erase(i);
+ return;
+ }
+ }
+
+ } // namespace detail
+
+ template <class Config>
+ struct directed_edges_helper {
+
+ // Placement of these overloaded remove_edge() functions
+ // inside the class avoids a VC++ bug.
+
+ // O(E/V)
+ inline void
+ remove_edge(typename Config::edge_descriptor e)
+ {
+ typedef typename Config::graph_type graph_type;
+ graph_type& g = static_cast<graph_type&>(*this);
+ typename Config::OutEdgeList& el = g.out_edge_list(source(e, g));
+ typedef typename Config::OutEdgeList::value_type::property_type PType;
+ detail::remove_directed_edge_dispatch(e, el,
+ *(PType*)e.get_property());
+ }
+
+ // O(1)
+ inline void
+ remove_edge(typename Config::out_edge_iterator iter)
+ {
+ typedef typename Config::graph_type graph_type;
+ graph_type& g = static_cast<graph_type&>(*this);
+ typename Config::edge_descriptor e = *iter;
+ typename Config::OutEdgeList& el = g.out_edge_list(source(e, g));
+ el.erase(iter.base());
+ }
+
+ };
+
+ // O(1)
+ template <class Config>
+ inline std::pair<typename Config::edge_iterator,
+ typename Config::edge_iterator>
+ edges(const directed_edges_helper<Config>& g_)
+ {
+ typedef typename Config::graph_type graph_type;
+ typedef typename Config::edge_iterator edge_iterator;
+ const graph_type& cg = static_cast<const graph_type&>(g_);
+ graph_type& g = const_cast<graph_type&>(cg);
+ return std::make_pair( edge_iterator(g.vertex_set().begin(),
+ g.vertex_set().begin(),
+ g.vertex_set().end(), g),
+ edge_iterator(g.vertex_set().begin(),
+ g.vertex_set().end(),
+ g.vertex_set().end(), g) );
+ }
+
+ //=========================================================================
+ // Directed Graph Helper Class
+
+ struct adj_list_dir_traversal_tag :
+ public virtual vertex_list_graph_tag,
+ public virtual incidence_graph_tag,
+ public virtual adjacency_graph_tag,
+ public virtual edge_list_graph_tag { };
+
+ template <class Config>
+ struct directed_graph_helper
+ : public directed_edges_helper<Config> {
+ typedef typename Config::edge_descriptor edge_descriptor;
+ typedef adj_list_dir_traversal_tag traversal_category;
+ };
+
+ // O(E/V)
+ template <class Config>
+ inline void
+ remove_edge(typename Config::vertex_descriptor u,
+ typename Config::vertex_descriptor v,
+ directed_graph_helper<Config>& g_)
+ {
+ typedef typename Config::graph_type graph_type;
+ typedef typename Config::edge_parallel_category Cat;
+ graph_type& g = static_cast<graph_type&>(g_);
+ detail::erase_from_incidence_list(g.out_edge_list(u), v, Cat());
+ }
+
+ template <class Config, class Predicate>
+ inline void
+ remove_out_edge_if(typename Config::vertex_descriptor u, Predicate pred,
+ directed_graph_helper<Config>& g_)
+ {
+ typedef typename Config::graph_type graph_type;
+ graph_type& g = static_cast<graph_type&>(g_);
+ typename Config::out_edge_iterator first, last;
+ tie(first, last) = out_edges(u, g);
+ typedef typename Config::edge_parallel_category edge_parallel_category;
+ detail::remove_directed_edge_if_dispatch
+ (first, last, g.out_edge_list(u), pred, edge_parallel_category());
+ }
+
+ template <class Config, class Predicate>
+ inline void
+ remove_edge_if(Predicate pred, directed_graph_helper<Config>& g_)
+ {
+ typedef typename Config::graph_type graph_type;
+ graph_type& g = static_cast<graph_type&>(g_);
+
+ typename Config::vertex_iterator vi, vi_end;
+ for (tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
+ remove_out_edge_if(*vi, pred, g);
+ }
+
+ template <class EdgeOrIter, class Config>
+ inline void
+ remove_edge(EdgeOrIter e_or_iter, directed_graph_helper<Config>& g_)
+ {
+ g_.remove_edge(e_or_iter);
+ }
+
+ // O(V + E) for allow_parallel_edges
+ // O(V * log(E/V)) for disallow_parallel_edges
+ template <class Config>
+ inline void
+ clear_vertex(typename Config::vertex_descriptor u,
+ directed_graph_helper<Config>& g_)
+ {
+ typedef typename Config::graph_type graph_type;
+ typedef typename Config::edge_parallel_category Cat;
+ graph_type& g = static_cast<graph_type&>(g_);
+ typename Config::vertex_iterator vi, viend;
+ for (boost::tie(vi, viend) = vertices(g); vi != viend; ++vi)
+ detail::erase_from_incidence_list(g.out_edge_list(*vi), u, Cat());
+ g.out_edge_list(u).clear();
+ // clear() should be a req of Sequence and AssociativeContainer,
+ // or maybe just Container
+ }
+
+ template <class Config>
+ inline void
+ clear_out_edges(typename Config::vertex_descriptor u,
+ directed_graph_helper<Config>& g_)
+ {
+ typedef typename Config::graph_type graph_type;
+ typedef typename Config::edge_parallel_category Cat;
+ graph_type& g = static_cast<graph_type&>(g_);
+ g.out_edge_list(u).clear();
+ // clear() should be a req of Sequence and AssociativeContainer,
+ // or maybe just Container
+ }
+
+ // O(V), could do better...
+ template <class Config>
+ inline typename Config::edges_size_type
+ num_edges(const directed_graph_helper<Config>& g_)
+ {
+ typedef typename Config::graph_type graph_type;
+ const graph_type& g = static_cast<const graph_type&>(g_);
+ typename Config::edges_size_type num_e = 0;
+ typename Config::vertex_iterator vi, vi_end;
+ for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
+ num_e += out_degree(*vi, g);
+ return num_e;
+ }
+ // O(1) for allow_parallel_edge_tag
+ // O(log(E/V)) for disallow_parallel_edge_tag
+ template <class Config>
+ inline std::pair<typename directed_graph_helper<Config>::edge_descriptor, bool>
+ add_edge(typename Config::vertex_descriptor u,
+ typename Config::vertex_descriptor v,
+ const typename Config::edge_property_type& p,
+ directed_graph_helper<Config>& g_)
+ {
+ typedef typename Config::edge_descriptor edge_descriptor;
+ typedef typename Config::graph_type graph_type;
+ typedef typename Config::StoredEdge StoredEdge;
+ graph_type& g = static_cast<graph_type&>(g_);
+ typename Config::OutEdgeList::iterator i;
+ bool inserted;
+ boost::tie(i, inserted) = boost::graph_detail::push(g.out_edge_list(u),
+ StoredEdge(v, p));
+ return std::make_pair(edge_descriptor(u, v, &(*i).get_property()),
+ inserted);
+ }
+ // Did not use default argument here because that
+ // causes Visual C++ to get confused.
+ template <class Config>
+ inline std::pair<typename Config::edge_descriptor, bool>
+ add_edge(typename Config::vertex_descriptor u,
+ typename Config::vertex_descriptor v,
+ directed_graph_helper<Config>& g_)
+ {
+ typename Config::edge_property_type p;
+ return add_edge(u, v, p, g_);
+ }
+ //=========================================================================
+ // Undirected Graph Helper Class
+
+ template <class Config>
+ struct undirected_graph_helper;
+
+ struct undir_adj_list_traversal_tag :
+ public virtual vertex_list_graph_tag,
+ public virtual incidence_graph_tag,
+ public virtual adjacency_graph_tag,
+ public virtual edge_list_graph_tag,
+ public virtual bidirectional_graph_tag { };
+
+ namespace detail {
+
+ // using class with specialization for dispatch is a VC++ workaround.
+ template <class StoredProperty>
+ struct remove_undirected_edge_dispatch {
+
+ // O(E/V)
+ template <class edge_descriptor, class Config>
+ static void
+ apply(edge_descriptor e,
+ undirected_graph_helper<Config>& g_,
+ StoredProperty& p)
+ {
+ typedef typename Config::global_edgelist_selector EdgeListS;
+ BOOST_STATIC_ASSERT((!is_same<EdgeListS, vecS>::value));
+
+ typedef typename Config::graph_type graph_type;
+ graph_type& g = static_cast<graph_type&>(g_);
+
+ typename Config::OutEdgeList& out_el = g.out_edge_list(source(e, g));
+ typename Config::OutEdgeList::iterator out_i = out_el.begin();
+ for (; out_i != out_el.end(); ++out_i)
+ if (&(*out_i).get_property() == &p) {
+ out_el.erase(out_i);
+ break;
+ }
+ typename Config::OutEdgeList& in_el = g.out_edge_list(target(e, g));
+ typename Config::OutEdgeList::iterator in_i = in_el.begin();
+ for (; in_i != in_el.end(); ++in_i)
+ if (&(*in_i).get_property() == &p) {
+ g.m_edges.erase((*in_i).get_iter());
+ in_el.erase(in_i);
+ return;
+ }
+ }
+ };
+
+ template <>
+ struct remove_undirected_edge_dispatch<no_property> {
+ // O(E/V)
+ template <class edge_descriptor, class Config>
+ static void
+ apply(edge_descriptor e,
+ undirected_graph_helper<Config>& g_,
+ no_property&)
+ {
+ typedef typename Config::global_edgelist_selector EdgeListS;
+ BOOST_STATIC_ASSERT((!is_same<EdgeListS, vecS>::value));
+
+ typedef typename Config::graph_type graph_type;
+ graph_type& g = static_cast<graph_type&>(g_);
+ no_property* p = (no_property*)e.get_property();
+ typename Config::OutEdgeList& out_el = g.out_edge_list(source(e, g));
+ typename Config::OutEdgeList::iterator out_i = out_el.begin();
+ for (; out_i != out_el.end(); ++out_i)
+ if (&(*out_i).get_property() == p) {
+ out_el.erase(out_i);
+ break;
+ }
+ typename Config::OutEdgeList& in_el = g.out_edge_list(target(e, g));
+ typename Config::OutEdgeList::iterator in_i = in_el.begin();
+ for (; in_i != in_el.end(); ++in_i)
+ if (&(*in_i).get_property() == p) {
+ g.m_edges.erase((*in_i).get_iter());
+ in_el.erase(in_i);
+ return;
+ }
+ }
+ };
+
+ // O(E/V)
+ template <class Graph, class EdgeList, class Vertex>
+ inline void
+ remove_edge_and_property(Graph& g, EdgeList& el, Vertex v,
+ boost::allow_parallel_edge_tag cat)
+ {
+ typedef typename Graph::global_edgelist_selector EdgeListS;
+ BOOST_STATIC_ASSERT((!is_same<EdgeListS, vecS>::value));
+
+ typedef typename EdgeList::value_type StoredEdge;
+ typename EdgeList::iterator i = el.begin(), end = el.end();
+ for (; i != end; ++i)
+ if ((*i).get_target() == v)
+ g.m_edges.erase((*i).get_iter());
+ detail::erase_from_incidence_list(el, v, cat);
+ }
+ // O(log(E/V))
+ template <class Graph, class EdgeList, class Vertex>
+ inline void
+ remove_edge_and_property(Graph& g, EdgeList& el, Vertex v,
+ boost::disallow_parallel_edge_tag)
+ {
+ typedef typename Graph::global_edgelist_selector EdgeListS;
+ BOOST_STATIC_ASSERT((!is_same<EdgeListS, vecS>::value));
+
+ typedef typename EdgeList::value_type StoredEdge;
+ typename EdgeList::iterator i = el.find(StoredEdge(v)), end = el.end();
+ if (i != end) {
+ g.m_edges.erase((*i).get_iter());
+ el.erase(i);
+ }
+ }
+
+ } // namespace detail
+
+ template <class Vertex, class EdgeProperty>
+ struct list_edge // short name due to VC++ truncation and linker problems
+ : public boost::detail::edge_base<boost::undirected_tag, Vertex>
+ {
+ typedef EdgeProperty property_type;
+ typedef boost::detail::edge_base<boost::undirected_tag, Vertex> Base;
+ list_edge(Vertex u, Vertex v, const EdgeProperty& p = EdgeProperty())
+ : Base(u, v), m_property(p) { }
+ EdgeProperty& get_property() { return m_property; }
+ const EdgeProperty& get_property() const { return m_property; }
+ // the following methods should never be used, but are needed
+ // to make SGI MIPSpro C++ happy
+ list_edge() { }
+ bool operator==(const list_edge&) const { return false; }
+ bool operator<(const list_edge&) const { return false; }
+ EdgeProperty m_property;
+ };
+
+ template <class Config>
+ struct undirected_graph_helper {
+
+ typedef undir_adj_list_traversal_tag traversal_category;
+
+ // Placement of these overloaded remove_edge() functions
+ // inside the class avoids a VC++ bug.
+
+ // O(E/V)
+ inline void
+ remove_edge(typename Config::edge_descriptor e)
+ {
+ typedef typename Config::global_edgelist_selector EdgeListS;
+ BOOST_STATIC_ASSERT((!is_same<EdgeListS, vecS>::value));
+
+ typedef typename Config::OutEdgeList::value_type::property_type PType;
+ detail::remove_undirected_edge_dispatch<PType>::apply
+ (e, *this, *(PType*)e.get_property());
+ }
+ // O(E/V)
+ inline void
+ remove_edge(typename Config::out_edge_iterator iter)
+ {
+ this->remove_edge(*iter);
+ }
+ };
+
+ // Had to make these non-members to avoid accidental instantiation
+ // on SGI MIPSpro C++
+ template <class C>
+ inline typename C::InEdgeList&
+ in_edge_list(undirected_graph_helper<C>&,
+ typename C::vertex_descriptor v)
+ {
+ typename C::stored_vertex* sv = (typename C::stored_vertex*)v;
+ return sv->m_out_edges;
+ }
+ template <class C>
+ inline const typename C::InEdgeList&
+ in_edge_list(const undirected_graph_helper<C>&,
+ typename C::vertex_descriptor v) {
+ typename C::stored_vertex* sv = (typename C::stored_vertex*)v;
+ return sv->m_out_edges;
+ }
+
+ // O(E/V)
+ template <class EdgeOrIter, class Config>
+ inline void
+ remove_edge(EdgeOrIter e, undirected_graph_helper<Config>& g_)
+ {
+ typedef typename Config::global_edgelist_selector EdgeListS;
+ BOOST_STATIC_ASSERT((!is_same<EdgeListS, vecS>::value));
+
+ g_.remove_edge(e);
+ }
+
+ // O(E/V) or O(log(E/V))
+ template <class Config>
+ void
+ remove_edge(typename Config::vertex_descriptor u,
+ typename Config::vertex_descriptor v,
+ undirected_graph_helper<Config>& g_)
+ {
+ typedef typename Config::global_edgelist_selector EdgeListS;
+ BOOST_STATIC_ASSERT((!is_same<EdgeListS, vecS>::value));
+
+ typedef typename Config::graph_type graph_type;
+ graph_type& g = static_cast<graph_type&>(g_);
+ typedef typename Config::edge_parallel_category Cat;
+ detail::remove_edge_and_property(g, g.out_edge_list(u), v, Cat());
+ detail::erase_from_incidence_list(g.out_edge_list(v), u, Cat());
+ }
+
+ template <class Config, class Predicate>
+ void
+ remove_out_edge_if(typename Config::vertex_descriptor u, Predicate pred,
+ undirected_graph_helper<Config>& g_)
+ {
+ typedef typename Config::global_edgelist_selector EdgeListS;
+ BOOST_STATIC_ASSERT((!is_same<EdgeListS, vecS>::value));
+
+ typedef typename Config::graph_type graph_type;
+ typedef typename Config::OutEdgeList::value_type::property_type PropT;
+ graph_type& g = static_cast<graph_type&>(g_);
+ typename Config::out_edge_iterator first, last;
+ tie(first, last) = out_edges(u, g);
+ typedef typename Config::edge_parallel_category Cat;
+ detail::undirected_remove_out_edge_if_dispatch<PropT>
+ (g, first, last, g.out_edge_list(u), pred, Cat());
+ }
+ template <class Config, class Predicate>
+ void
+ remove_in_edge_if(typename Config::vertex_descriptor u, Predicate pred,
+ undirected_graph_helper<Config>& g_)
+ {
+ typedef typename Config::global_edgelist_selector EdgeListS;
+ BOOST_STATIC_ASSERT((!is_same<EdgeListS, vecS>::value));
+
+ remove_out_edge_if(u, pred, g_);
+ }
+
+ // O(E/V * E) or O(log(E/V) * E)
+ template <class Predicate, class Config>
+ void
+ remove_edge_if(Predicate pred, undirected_graph_helper<Config>& g_)
+ {
+ typedef typename Config::global_edgelist_selector EdgeListS;
+ BOOST_STATIC_ASSERT((!is_same<EdgeListS, vecS>::value));
+
+ typedef typename Config::graph_type graph_type;
+ graph_type& g = static_cast<graph_type&>(g_);
+ typename Config::edge_iterator ei, ei_end, next;
+ tie(ei, ei_end) = edges(g);
+ for (next = ei; ei != ei_end; ei = next) {
+ ++next;
+ if (pred(*ei))
+ remove_edge(*ei, g);
+ }
+ }
+
+ // O(1)
+ template <class Config>
+ inline std::pair<typename Config::edge_iterator,
+ typename Config::edge_iterator>
+ edges(const undirected_graph_helper<Config>& g_)
+ {
+ typedef typename Config::graph_type graph_type;
+ typedef typename Config::edge_iterator edge_iterator;
+ const graph_type& cg = static_cast<const graph_type&>(g_);
+ graph_type& g = const_cast<graph_type&>(cg);
+ return std::make_pair( edge_iterator(g.m_edges.begin()),
+ edge_iterator(g.m_edges.end()) );
+ }
+ // O(1)
+ template <class Config>
+ inline typename Config::edges_size_type
+ num_edges(const undirected_graph_helper<Config>& g_)
+ {
+ typedef typename Config::graph_type graph_type;
+ const graph_type& g = static_cast<const graph_type&>(g_);
+ return g.m_edges.size();
+ }
+ // O(E/V * E/V)
+ template <class Config>
+ inline void
+ clear_vertex(typename Config::vertex_descriptor u,
+ undirected_graph_helper<Config>& g_)
+ {
+ typedef typename Config::global_edgelist_selector EdgeListS;
+ BOOST_STATIC_ASSERT((!is_same<EdgeListS, vecS>::value));
+
+ typedef typename Config::graph_type graph_type;
+ typedef typename Config::edge_parallel_category Cat;
+ graph_type& g = static_cast<graph_type&>(g_);
+ typename Config::OutEdgeList& el = g.out_edge_list(u);
+ typename Config::OutEdgeList::iterator
+ ei = el.begin(), ei_end = el.end();
+ for (; ei != ei_end; ++ei) {
+ detail::erase_from_incidence_list
+ (g.out_edge_list((*ei).get_target()), u, Cat());
+ g.m_edges.erase((*ei).get_iter());
+ }
+ g.out_edge_list(u).clear();
+ }
+ // O(1) for allow_parallel_edge_tag
+ // O(log(E/V)) for disallow_parallel_edge_tag
+ template <class Config>
+ inline std::pair<typename Config::edge_descriptor, bool>
+ add_edge(typename Config::vertex_descriptor u,
+ typename Config::vertex_descriptor v,
+ const typename Config::edge_property_type& p,
+ undirected_graph_helper<Config>& g_)
+ {
+ typedef typename Config::StoredEdge StoredEdge;
+ typedef typename Config::edge_descriptor edge_descriptor;
+ typedef typename Config::graph_type graph_type;
+ graph_type& g = static_cast<graph_type&>(g_);
+
+ bool inserted;
+ typename Config::EdgeContainer::value_type e(u, v, p);
+ typename Config::EdgeContainer::iterator p_iter
+ = graph_detail::push(g.m_edges, e).first;
+
+ typename Config::OutEdgeList::iterator i;
+ boost::tie(i, inserted) = boost::graph_detail::push(g.out_edge_list(u),
+ StoredEdge(v, p_iter, &g.m_edges));
+ if (inserted) {
+ boost::graph_detail::push(g.out_edge_list(v), StoredEdge(u, p_iter, &g.m_edges));
+ return std::make_pair(edge_descriptor(u, v, &p_iter->get_property()),
+ true);
+ } else {
+ g.m_edges.erase(p_iter);
+ return std::make_pair
+ (edge_descriptor(u, v, &i->get_iter()->get_property()), false);
+ }
+ }
+ template <class Config>
+ inline std::pair<typename Config::edge_descriptor, bool>
+ add_edge(typename Config::vertex_descriptor u,
+ typename Config::vertex_descriptor v,
+ undirected_graph_helper<Config>& g_)
+ {
+ typename Config::edge_property_type p;
+ return add_edge(u, v, p, g_);
+ }
+
+ // O(1)
+ template <class Config>
+ inline typename Config::degree_size_type
+ degree(typename Config::vertex_descriptor u,
+ const undirected_graph_helper<Config>& g_)
+ {
+ typedef typename Config::graph_type Graph;
+ const Graph& g = static_cast<const Graph&>(g_);
+ return out_degree(u, g);
+ }
+
+ template <class Config>
+ inline std::pair<typename Config::in_edge_iterator,
+ typename Config::in_edge_iterator>
+ in_edges(typename Config::vertex_descriptor u,
+ const undirected_graph_helper<Config>& g_)
+ {
+ typedef typename Config::graph_type Graph;
+ const Graph& cg = static_cast<const Graph&>(g_);
+ Graph& g = const_cast<Graph&>(cg);
+ typedef typename Config::in_edge_iterator in_edge_iterator;
+ return
+ std::make_pair(in_edge_iterator(g.out_edge_list(u).begin(), u),
+ in_edge_iterator(g.out_edge_list(u).end(), u));
+ }
+
+ template <class Config>
+ inline typename Config::degree_size_type
+ in_degree(typename Config::vertex_descriptor u,
+ const undirected_graph_helper<Config>& g_)
+ { return degree(u, g_); }
+
+ //=========================================================================
+ // Bidirectional Graph Helper Class
+
+ struct bidir_adj_list_traversal_tag :
+ public virtual vertex_list_graph_tag,
+ public virtual incidence_graph_tag,
+ public virtual adjacency_graph_tag,
+ public virtual edge_list_graph_tag,
+ public virtual bidirectional_graph_tag { };
+
+ template <class Config>
+ struct bidirectional_graph_helper
+ : public directed_edges_helper<Config> {
+ typedef bidir_adj_list_traversal_tag traversal_category;
+ };
+
+ // Had to make these non-members to avoid accidental instantiation
+ // on SGI MIPSpro C++
+ template <class C>
+ inline typename C::InEdgeList&
+ in_edge_list(bidirectional_graph_helper<C>&,
+ typename C::vertex_descriptor v)
+ {
+ typename C::stored_vertex* sv = (typename C::stored_vertex*)v;
+ return sv->m_in_edges;
+ }
+ template <class C>
+ inline const typename C::InEdgeList&
+ in_edge_list(const bidirectional_graph_helper<C>&,
+ typename C::vertex_descriptor v) {
+ typename C::stored_vertex* sv = (typename C::stored_vertex*)v;
+ return sv->m_in_edges;
+ }
+
+ template <class Predicate, class Config>
+ inline void
+ remove_edge_if(Predicate pred, bidirectional_graph_helper<Config>& g_)
+ {
+ typedef typename Config::global_edgelist_selector EdgeListS;
+ BOOST_STATIC_ASSERT((!is_same<EdgeListS, vecS>::value));
+
+ typedef typename Config::graph_type graph_type;
+ graph_type& g = static_cast<graph_type&>(g_);
+ typename Config::edge_iterator ei, ei_end, next;
+ tie(ei, ei_end) = edges(g);
+ for (next = ei; ei != ei_end; ei = next) {
+ ++next;
+ if (pred(*ei))
+ remove_edge(*ei, g);
+ }
+ }
+
+ template <class Config>
+ inline std::pair<typename Config::in_edge_iterator,
+ typename Config::in_edge_iterator>
+ in_edges(typename Config::vertex_descriptor u,
+ const bidirectional_graph_helper<Config>& g_)
+ {
+ typedef typename Config::graph_type graph_type;
+ const graph_type& cg = static_cast<const graph_type&>(g_);
+ graph_type& g = const_cast<graph_type&>(cg);
+ typedef typename Config::in_edge_iterator in_edge_iterator;
+ return
+ std::make_pair(in_edge_iterator(in_edge_list(g, u).begin(), u),
+ in_edge_iterator(in_edge_list(g, u).end(), u));
+ }
+
+ // O(1)
+ template <class Config>
+ inline std::pair<typename Config::edge_iterator,
+ typename Config::edge_iterator>
+ edges(const bidirectional_graph_helper<Config>& g_)
+ {
+ typedef typename Config::graph_type graph_type;
+ typedef typename Config::edge_iterator edge_iterator;
+ const graph_type& cg = static_cast<const graph_type&>(g_);
+ graph_type& g = const_cast<graph_type&>(cg);
+ return std::make_pair( edge_iterator(g.m_edges.begin()),
+ edge_iterator(g.m_edges.end()) );
+ }
+
+ //=========================================================================
+ // Bidirectional Graph Helper Class (with edge properties)
+
+
+ template <class Config>
+ struct bidirectional_graph_helper_with_property
+ : public bidirectional_graph_helper<Config>
+ {
+ typedef typename Config::graph_type graph_type;
+ typedef typename Config::out_edge_iterator out_edge_iterator;
+
+ std::pair<out_edge_iterator, out_edge_iterator>
+ get_parallel_edge_sublist(typename Config::edge_descriptor e,
+ const graph_type& g,
+ void*)
+ { return out_edges(source(e, g), g); }
+
+ std::pair<out_edge_iterator, out_edge_iterator>
+ get_parallel_edge_sublist(typename Config::edge_descriptor e,
+ const graph_type& g,
+ setS*)
+ { return edge_range(source(e, g), target(e, g), g); }
+
+ std::pair<out_edge_iterator, out_edge_iterator>
+ get_parallel_edge_sublist(typename Config::edge_descriptor e,
+ const graph_type& g,
+ multisetS*)
+ { return edge_range(source(e, g), target(e, g), g); }
+
+#if !defined BOOST_NO_HASH
+ std::pair<out_edge_iterator, out_edge_iterator>
+ get_parallel_edge_sublist(typename Config::edge_descriptor e,
+ const graph_type& g,
+ hash_setS*)
+ { return edge_range(source(e, g), target(e, g), g); }
+#endif
+
+ // Placement of these overloaded remove_edge() functions
+ // inside the class avoids a VC++ bug.
+
+ // O(E/V) or O(log(E/V))
+ void
+ remove_edge(typename Config::edge_descriptor e)
+ {
+ typedef typename Config::global_edgelist_selector EdgeListS;
+ BOOST_STATIC_ASSERT((!is_same<EdgeListS, vecS>::value));
+
+ graph_type& g = static_cast<graph_type&>(*this);
+
+ typedef typename Config::edgelist_selector OutEdgeListS;
+
+ std::pair<out_edge_iterator, out_edge_iterator> rng =
+ get_parallel_edge_sublist(e, g, (OutEdgeListS*)(0));
+ rng.first = std::find(rng.first, rng.second, e);
+ assert(rng.first != rng.second);
+ remove_edge(rng.first);
+ }
+
+ inline void
+ remove_edge(typename Config::out_edge_iterator iter)
+ {
+ typedef typename Config::global_edgelist_selector EdgeListS;
+ BOOST_STATIC_ASSERT((!is_same<EdgeListS, vecS>::value));
+
+ typedef typename Config::graph_type graph_type;
+ graph_type& g = static_cast<graph_type&>(*this);
+ typename Config::edge_descriptor e = *iter;
+ typename Config::OutEdgeList& oel = g.out_edge_list(source(e, g));
+ typename Config::InEdgeList& iel = in_edge_list(g, target(e, g));
+ typedef typename Config::OutEdgeList::value_type::property_type PType;
+ PType& p = *(PType*)e.get_property();
+ detail::remove_directed_edge_dispatch(*iter, iel, p);
+ g.m_edges.erase(iter.base()->get_iter());
+ oel.erase(iter.base());
+ }
+ };
+
+ // O(E/V) for allow_parallel_edge_tag
+ // O(log(E/V)) for disallow_parallel_edge_tag
+ template <class Config>
+ inline void
+ remove_edge(typename Config::vertex_descriptor u,
+ typename Config::vertex_descriptor v,
+ bidirectional_graph_helper_with_property<Config>& g_)
+ {
+ typedef typename Config::global_edgelist_selector EdgeListS;
+ BOOST_STATIC_ASSERT((!is_same<EdgeListS, vecS>::value));
+
+ typedef typename Config::graph_type graph_type;
+ graph_type& g = static_cast<graph_type&>(g_);
+ typedef typename Config::edge_parallel_category Cat;
+ detail::remove_edge_and_property(g, g.out_edge_list(u), v, Cat());
+ detail::erase_from_incidence_list(in_edge_list(g, v), u, Cat());
+ }
+
+ // O(E/V) or O(log(E/V))
+ template <class EdgeOrIter, class Config>
+ inline void
+ remove_edge(EdgeOrIter e,
+ bidirectional_graph_helper_with_property<Config>& g_)
+ {
+ typedef typename Config::global_edgelist_selector EdgeListS;
+ BOOST_STATIC_ASSERT((!is_same<EdgeListS, vecS>::value));
+
+ g_.remove_edge(e);
+ }
+
+ template <class Config, class Predicate>
+ inline void
+ remove_out_edge_if(typename Config::vertex_descriptor u, Predicate pred,
+ bidirectional_graph_helper_with_property<Config>& g_)
+ {
+ typedef typename Config::global_edgelist_selector EdgeListS;
+ BOOST_STATIC_ASSERT((!is_same<EdgeListS, vecS>::value));
+
+ typedef typename Config::graph_type graph_type;
+ typedef typename Config::OutEdgeList::value_type::property_type PropT;
+ graph_type& g = static_cast<graph_type&>(g_);
+
+ typedef typename Config::EdgeIter EdgeIter;
+ typedef std::vector<EdgeIter> Garbage;
+ Garbage garbage;
+
+ // First remove the edges from the targets' in-edge lists and
+ // from the graph's edge set list.
+ typename Config::out_edge_iterator out_i, out_end;
+ for (tie(out_i, out_end) = out_edges(u, g); out_i != out_end; ++out_i)
+ if (pred(*out_i)) {
+ detail::remove_directed_edge_dispatch
+ (*out_i, in_edge_list(g, target(*out_i, g)),
+ *(PropT*)(*out_i).get_property());
+ // Put in garbage to delete later. Will need the properties
+ // for the remove_if of the out-edges.
+ garbage.push_back((*out_i.base()).get_iter());
+ }
+
+ // Now remove the edges from this out-edge list.
+ typename Config::out_edge_iterator first, last;
+ tie(first, last) = out_edges(u, g);
+ typedef typename Config::edge_parallel_category Cat;
+ detail::remove_directed_edge_if_dispatch
+ (first, last, g.out_edge_list(u), pred, Cat());
+
+ // Now delete the edge properties from the g.m_edges list
+ for (typename Garbage::iterator i = garbage.begin();
+ i != garbage.end(); ++i)
+ g.m_edges.erase(*i);
+ }
+ template <class Config, class Predicate>
+ inline void
+ remove_in_edge_if(typename Config::vertex_descriptor v, Predicate pred,
+ bidirectional_graph_helper_with_property<Config>& g_)
+ {
+ typedef typename Config::global_edgelist_selector EdgeListS;
+ BOOST_STATIC_ASSERT((!is_same<EdgeListS, vecS>::value));
+
+ typedef typename Config::graph_type graph_type;
+ typedef typename Config::OutEdgeList::value_type::property_type PropT;
+ graph_type& g = static_cast<graph_type&>(g_);
+
+ typedef typename Config::EdgeIter EdgeIter;
+ typedef std::vector<EdgeIter> Garbage;
+ Garbage garbage;
+
+ // First remove the edges from the sources' out-edge lists and
+ // from the graph's edge set list.
+ typename Config::in_edge_iterator in_i, in_end;
+ for (tie(in_i, in_end) = in_edges(v, g); in_i != in_end; ++in_i)
+ if (pred(*in_i)) {
+ typename Config::vertex_descriptor u = source(*in_i, g);
+ detail::remove_directed_edge_dispatch
+ (*in_i, g.out_edge_list(u), *(PropT*)(*in_i).get_property());
+ // Put in garbage to delete later. Will need the properties
+ // for the remove_if of the out-edges.
+ garbage.push_back((*in_i.base()).get_iter());
+ }
+ // Now remove the edges from this in-edge list.
+ typename Config::in_edge_iterator first, last;
+ tie(first, last) = in_edges(v, g);
+ typedef typename Config::edge_parallel_category Cat;
+ detail::remove_directed_edge_if_dispatch
+ (first, last, in_edge_list(g, v), pred, Cat());
+
+ // Now delete the edge properties from the g.m_edges list
+ for (typename Garbage::iterator i = garbage.begin();
+ i != garbage.end(); ++i)
+ g.m_edges.erase(*i);
+ }
+
+ // O(1)
+ template <class Config>
+ inline typename Config::edges_size_type
+ num_edges(const bidirectional_graph_helper_with_property<Config>& g_)
+ {
+ typedef typename Config::graph_type graph_type;
+ const graph_type& g = static_cast<const graph_type&>(g_);
+ return g.m_edges.size();
+ }
+ // O(E/V * E/V) for allow_parallel_edge_tag
+ // O(E/V * log(E/V)) for disallow_parallel_edge_tag
+ template <class Config>
+ inline void
+ clear_vertex(typename Config::vertex_descriptor u,
+ bidirectional_graph_helper_with_property<Config>& g_)
+ {
+ typedef typename Config::global_edgelist_selector EdgeListS;
+ BOOST_STATIC_ASSERT((!is_same<EdgeListS, vecS>::value));
+
+ typedef typename Config::graph_type graph_type;
+ typedef typename Config::edge_parallel_category Cat;
+ graph_type& g = static_cast<graph_type&>(g_);
+ typename Config::OutEdgeList& el = g.out_edge_list(u);
+ typename Config::OutEdgeList::iterator
+ ei = el.begin(), ei_end = el.end();
+ for (; ei != ei_end; ++ei) {
+ detail::erase_from_incidence_list
+ (in_edge_list(g, (*ei).get_target()), u, Cat());
+ g.m_edges.erase((*ei).get_iter());
+ }
+ typename Config::InEdgeList& in_el = in_edge_list(g, u);
+ typename Config::InEdgeList::iterator
+ in_ei = in_el.begin(), in_ei_end = in_el.end();
+ for (; in_ei != in_ei_end; ++in_ei) {
+ detail::erase_from_incidence_list
+ (g.out_edge_list((*in_ei).get_target()), u, Cat());
+ g.m_edges.erase((*in_ei).get_iter());
+ }
+ g.out_edge_list(u).clear();
+ in_edge_list(g, u).clear();
+ }
+
+ template <class Config>
+ inline void
+ clear_out_edges(typename Config::vertex_descriptor u,
+ bidirectional_graph_helper_with_property<Config>& g_)
+ {
+ typedef typename Config::global_edgelist_selector EdgeListS;
+ BOOST_STATIC_ASSERT((!is_same<EdgeListS, vecS>::value));
+
+ typedef typename Config::graph_type graph_type;
+ typedef typename Config::edge_parallel_category Cat;
+ graph_type& g = static_cast<graph_type&>(g_);
+ typename Config::OutEdgeList& el = g.out_edge_list(u);
+ typename Config::OutEdgeList::iterator
+ ei = el.begin(), ei_end = el.end();
+ for (; ei != ei_end; ++ei) {
+ detail::erase_from_incidence_list
+ (in_edge_list(g, (*ei).get_target()), u, Cat());
+ g.m_edges.erase((*ei).get_iter());
+ }
+ g.out_edge_list(u).clear();
+ }
+
+ template <class Config>
+ inline void
+ clear_in_edges(typename Config::vertex_descriptor u,
+ bidirectional_graph_helper_with_property<Config>& g_)
+ {
+ typedef typename Config::global_edgelist_selector EdgeListS;
+ BOOST_STATIC_ASSERT((!is_same<EdgeListS, vecS>::value));
+
+ typedef typename Config::graph_type graph_type;
+ typedef typename Config::edge_parallel_category Cat;
+ graph_type& g = static_cast<graph_type&>(g_);
+ typename Config::InEdgeList& in_el = in_edge_list(g, u);
+ typename Config::InEdgeList::iterator
+ in_ei = in_el.begin(), in_ei_end = in_el.end();
+ for (; in_ei != in_ei_end; ++in_ei) {
+ detail::erase_from_incidence_list
+ (g.out_edge_list((*in_ei).get_target()), u, Cat());
+ g.m_edges.erase((*in_ei).get_iter());
+ }
+ in_edge_list(g, u).clear();
+ }
+
+ // O(1) for allow_parallel_edge_tag
+ // O(log(E/V)) for disallow_parallel_edge_tag
+ template <class Config>
+ inline std::pair<typename Config::edge_descriptor, bool>
+ add_edge(typename Config::vertex_descriptor u,
+ typename Config::vertex_descriptor v,
+ const typename Config::edge_property_type& p,
+ bidirectional_graph_helper_with_property<Config>& g_)
+ {
+ typedef typename Config::graph_type graph_type;
+ graph_type& g = static_cast<graph_type&>(g_);
+ typedef typename Config::edge_descriptor edge_descriptor;
+ typedef typename Config::StoredEdge StoredEdge;
+ bool inserted;
+ typename Config::EdgeContainer::value_type e(u, v, p);
+ typename Config::EdgeContainer::iterator p_iter
+ = graph_detail::push(g.m_edges, e).first;
+ typename Config::OutEdgeList::iterator i;
+ boost::tie(i, inserted) = boost::graph_detail::push(g.out_edge_list(u),
+ StoredEdge(v, p_iter, &g.m_edges));
+ if (inserted) {
+ boost::graph_detail::push(in_edge_list(g, v), StoredEdge(u, p_iter, &g.m_edges));
+ return std::make_pair(edge_descriptor(u, v, &p_iter->m_property),
+ true);
+ } else {
+ g.m_edges.erase(p_iter);
+ return std::make_pair(edge_descriptor(u, v,
+ &i->get_iter()->get_property()),
+ false);
+ }
+ }
+
+ template <class Config>
+ inline std::pair<typename Config::edge_descriptor, bool>
+ add_edge(typename Config::vertex_descriptor u,
+ typename Config::vertex_descriptor v,
+ bidirectional_graph_helper_with_property<Config>& g_)
+ {
+ typename Config::edge_property_type p;
+ return add_edge(u, v, p, g_);
+ }
+ // O(1)
+ template <class Config>
+ inline typename Config::degree_size_type
+ degree(typename Config::vertex_descriptor u,
+ const bidirectional_graph_helper_with_property<Config>& g_)
+ {
+ typedef typename Config::graph_type graph_type;
+ const graph_type& g = static_cast<const graph_type&>(g_);
+ return in_degree(u, g) + out_degree(u, g);
+ }
+
+ //=========================================================================
+ // Adjacency List Helper Class
+
+ template <class Config, class Base>
+ struct adj_list_helper : public Base
+ {
+ typedef typename Config::graph_type AdjList;
+ typedef typename Config::vertex_descriptor vertex_descriptor;
+ typedef typename Config::edge_descriptor edge_descriptor;
+ typedef typename Config::out_edge_iterator out_edge_iterator;
+ typedef typename Config::in_edge_iterator in_edge_iterator;
+ typedef typename Config::adjacency_iterator adjacency_iterator;
+ typedef typename Config::inv_adjacency_iterator inv_adjacency_iterator;
+ typedef typename Config::vertex_iterator vertex_iterator;
+ typedef typename Config::edge_iterator edge_iterator;
+ typedef typename Config::directed_category directed_category;
+ typedef typename Config::edge_parallel_category edge_parallel_category;
+ typedef typename Config::vertices_size_type vertices_size_type;
+ typedef typename Config::edges_size_type edges_size_type;
+ typedef typename Config::degree_size_type degree_size_type;
+ typedef typename Config::StoredEdge StoredEdge;
+ typedef typename Config::edge_property_type edge_property_type;
+
+ typedef typename Config::global_edgelist_selector
+ global_edgelist_selector;
+
+ // protected:
+
+ // The edge_dispatch() functions should be static, but
+ // Borland gets confused about constness.
+
+ // O(E/V)
+ inline std::pair<edge_descriptor,bool>
+ edge_dispatch(const AdjList& g,
+ vertex_descriptor u, vertex_descriptor v,
+ boost::allow_parallel_edge_tag) const
+ {
+ bool found;
+ const typename Config::OutEdgeList& el = g.out_edge_list(u);
+ typename Config::OutEdgeList::const_iterator
+ i = std::find_if(el.begin(), el.end(),
+ detail::target_is<vertex_descriptor>(v));
+ found = (i != g.out_edge_list(u).end());
+ if (found)
+ return std::make_pair(edge_descriptor(u, v, &(*i).get_property()),
+ true);
+ else
+ return std::make_pair(edge_descriptor(u, v, 0), false);
+ }
+ // O(log(E/V))
+ inline std::pair<edge_descriptor,bool>
+ edge_dispatch(const AdjList& g,
+ vertex_descriptor u, vertex_descriptor v,
+ boost::disallow_parallel_edge_tag) const
+ {
+ bool found;
+ /* According to the standard, this should be iterator, not const_iterator,
+ but the VC++ std::set::find() const returns const_iterator.
+ And since iterator should be convertible to const_iterator, the
+ following should work everywhere. -Jeremy */
+ typename Config::OutEdgeList::const_iterator
+ i = g.out_edge_list(u).find(StoredEdge(v)),
+ end = g.out_edge_list(u).end();
+ found = (i != end);
+ if (found)
+ return std::make_pair(edge_descriptor(u, v, &(*i).get_property()),
+ true);
+ else
+ return std::make_pair(edge_descriptor(u, v, 0), false);
+ }
+ };
+
+ template <class Config, class Base>
+ inline std::pair<typename Config::adjacency_iterator,
+ typename Config::adjacency_iterator>
+ adjacent_vertices(typename Config::vertex_descriptor u,
+ const adj_list_helper<Config, Base>& g_)
+ {
+ typedef typename Config::graph_type AdjList;
+ const AdjList& cg = static_cast<const AdjList&>(g_);
+ AdjList& g = const_cast<AdjList&>(cg);
+ typedef typename Config::adjacency_iterator adjacency_iterator;
+ typename Config::out_edge_iterator first, last;
+ boost::tie(first, last) = out_edges(u, g);
+ return std::make_pair(adjacency_iterator(first, &g),
+ adjacency_iterator(last, &g));
+ }
+ template <class Config, class Base>
+ inline std::pair<typename Config::inv_adjacency_iterator,
+ typename Config::inv_adjacency_iterator>
+ inv_adjacent_vertices(typename Config::vertex_descriptor u,
+ const adj_list_helper<Config, Base>& g_)
+ {
+ typedef typename Config::graph_type AdjList;
+ const AdjList& cg = static_cast<const AdjList&>(g_);
+ AdjList& g = const_cast<AdjList&>(cg);
+ typedef typename Config::inv_adjacency_iterator inv_adjacency_iterator;
+ typename Config::in_edge_iterator first, last;
+ boost::tie(first, last) = in_edges(u, g);
+ return std::make_pair(inv_adjacency_iterator(first, &g),
+ inv_adjacency_iterator(last, &g));
+ }
+ template <class Config, class Base>
+ inline std::pair<typename Config::out_edge_iterator,
+ typename Config::out_edge_iterator>
+ out_edges(typename Config::vertex_descriptor u,
+ const adj_list_helper<Config, Base>& g_)
+ {
+ typedef typename Config::graph_type AdjList;
+ typedef typename Config::out_edge_iterator out_edge_iterator;
+ const AdjList& cg = static_cast<const AdjList&>(g_);
+ AdjList& g = const_cast<AdjList&>(cg);
+ return
+ std::make_pair(out_edge_iterator(g.out_edge_list(u).begin(), u),
+ out_edge_iterator(g.out_edge_list(u).end(), u));
+ }
+ template <class Config, class Base>
+ inline std::pair<typename Config::vertex_iterator,
+ typename Config::vertex_iterator>
+ vertices(const adj_list_helper<Config, Base>& g_)
+ {
+ typedef typename Config::graph_type AdjList;
+ const AdjList& cg = static_cast<const AdjList&>(g_);
+ AdjList& g = const_cast<AdjList&>(cg);
+ return std::make_pair( g.vertex_set().begin(), g.vertex_set().end() );
+ }
+ template <class Config, class Base>
+ inline typename Config::vertices_size_type
+ num_vertices(const adj_list_helper<Config, Base>& g_)
+ {
+ typedef typename Config::graph_type AdjList;
+ const AdjList& g = static_cast<const AdjList&>(g_);
+ return g.vertex_set().size();
+ }
+ template <class Config, class Base>
+ inline typename Config::degree_size_type
+ out_degree(typename Config::vertex_descriptor u,
+ const adj_list_helper<Config, Base>& g_)
+ {
+ typedef typename Config::graph_type AdjList;
+ const AdjList& g = static_cast<const AdjList&>(g_);
+ return g.out_edge_list(u).size();
+ }
+ template <class Config, class Base>
+ inline std::pair<typename Config::edge_descriptor, bool>
+ edge(typename Config::vertex_descriptor u,
+ typename Config::vertex_descriptor v,
+ const adj_list_helper<Config, Base>& g_)
+ {
+ typedef typename Config::graph_type Graph;
+ typedef typename Config::edge_parallel_category Cat;
+ const Graph& g = static_cast<const Graph&>(g_);
+ return g_.edge_dispatch(g, u, v, Cat());
+ }
+ template <class Config, class Base>
+ inline std::pair<typename Config::out_edge_iterator,
+ typename Config::out_edge_iterator>
+ edge_range(typename Config::vertex_descriptor u,
+ typename Config::vertex_descriptor v,
+ const adj_list_helper<Config, Base>& g_)
+ {
+ typedef typename Config::graph_type Graph;
+ typedef typename Config::StoredEdge StoredEdge;
+ const Graph& cg = static_cast<const Graph&>(g_);
+ Graph& g = const_cast<Graph&>(cg);
+ typedef typename Config::out_edge_iterator out_edge_iterator;
+ typename Config::OutEdgeList& el = g.out_edge_list(u);
+ typename Config::OutEdgeList::iterator first, last;
+ typename Config::EdgeContainer fake_edge_container;
+ tie(first, last) =
+ std::equal_range(el.begin(), el.end(),
+ StoredEdge(v, fake_edge_container.end(),
+ &fake_edge_container));
+ return std::make_pair(out_edge_iterator(first, u),
+ out_edge_iterator(last, u));
+ }
+
+ template <class Config>
+ inline typename Config::degree_size_type
+ in_degree(typename Config::vertex_descriptor u,
+ const directed_edges_helper<Config>& g_)
+ {
+ typedef typename Config::graph_type Graph;
+ const Graph& cg = static_cast<const Graph&>(g_);
+ Graph& g = const_cast<Graph&>(cg);
+ return in_edge_list(g, u).size();
+ }
+
+ namespace detail {
+ template <class Config, class Base, class Property>
+ inline
+ typename boost::property_map<typename Config::graph_type,
+ Property>::type
+ get_dispatch(adj_list_helper<Config,Base>&, Property,
+ boost::edge_property_tag) {
+ typedef typename Config::graph_type Graph;
+ typedef typename boost::property_map<Graph, Property>::type PA;
+ return PA();
+ }
+ template <class Config, class Base, class Property>
+ inline
+ typename boost::property_map<typename Config::graph_type,
+ Property>::const_type
+ get_dispatch(const adj_list_helper<Config,Base>&, Property,
+ boost::edge_property_tag) {
+ typedef typename Config::graph_type Graph;
+ typedef typename boost::property_map<Graph, Property>::const_type PA;
+ return PA();
+ }
+
+ template <class Config, class Base, class Property>
+ inline
+ typename boost::property_map<typename Config::graph_type,
+ Property>::type
+ get_dispatch(adj_list_helper<Config,Base>& g, Property,
+ boost::vertex_property_tag) {
+ typedef typename Config::graph_type Graph;
+ typedef typename boost::property_map<Graph, Property>::type PA;
+ return PA(&static_cast<Graph&>(g));
+ }
+ template <class Config, class Base, class Property>
+ inline
+ typename boost::property_map<typename Config::graph_type,
+ Property>::const_type
+ get_dispatch(const adj_list_helper<Config, Base>& g, Property,
+ boost::vertex_property_tag) {
+ typedef typename Config::graph_type Graph;
+ typedef typename boost::property_map<Graph, Property>::const_type PA;
+ const Graph& cg = static_cast<const Graph&>(g);
+ return PA(&cg);
+ }
+
+ } // namespace detail
+
+ // Implementation of the PropertyGraph interface
+ template <class Config, class Base, class Property>
+ inline
+ typename boost::property_map<typename Config::graph_type, Property>::type
+ get(Property p, adj_list_helper<Config, Base>& g) {
+ typedef typename property_kind<Property>::type Kind;
+ return detail::get_dispatch(g, p, Kind());
+ }
+ template <class Config, class Base, class Property>
+ inline
+ typename boost::property_map<typename Config::graph_type,
+ Property>::const_type
+ get(Property p, const adj_list_helper<Config, Base>& g) {
+ typedef typename property_kind<Property>::type Kind;
+ return detail::get_dispatch(g, p, Kind());
+ }
+
+ template <class Config, class Base, class Property, class Key>
+ inline
+ typename boost::property_traits<
+ typename boost::property_map<typename Config::graph_type,
+ Property>::type
+ >::reference
+ get(Property p, adj_list_helper<Config, Base>& g, const Key& key) {
+ return get(get(p, g), key);
+ }
+
+ template <class Config, class Base, class Property, class Key>
+ inline
+ typename boost::property_traits<
+ typename boost::property_map<typename Config::graph_type,
+ Property>::const_type
+ >::reference
+ get(Property p, const adj_list_helper<Config, Base>& g, const Key& key) {
+ return get(get(p, g), key);
+ }
+
+ template <class Config, class Base, class Property, class Key,class Value>
+ inline void
+ put(Property p, adj_list_helper<Config, Base>& g,
+ const Key& key, const Value& value)
+ {
+ typedef typename Config::graph_type Graph;
+ typedef typename boost::property_map<Graph, Property>::type Map;
+ Map pmap = get(p, static_cast<Graph&>(g));
+ put(pmap, key, value);
+ }
+
+
+ //=========================================================================
+ // Generalize Adjacency List Implementation
+
+ struct adj_list_tag { };
+
+ template <class Derived, class Config, class Base>
+ class adj_list_impl
+ : public adj_list_helper<Config, Base>
+ {
+ typedef typename Config::OutEdgeList OutEdgeList;
+ typedef typename Config::InEdgeList InEdgeList;
+ typedef typename Config::StoredVertexList StoredVertexList;
+ public:
+ typedef typename Config::stored_vertex stored_vertex;
+ typedef typename Config::EdgeContainer EdgeContainer;
+ typedef typename Config::vertex_descriptor vertex_descriptor;
+ typedef typename Config::edge_descriptor edge_descriptor;
+ typedef typename Config::vertex_iterator vertex_iterator;
+ typedef typename Config::edge_iterator edge_iterator;
+ typedef typename Config::edge_parallel_category edge_parallel_category;
+ typedef typename Config::vertices_size_type vertices_size_type;
+ typedef typename Config::edges_size_type edges_size_type;
+ typedef typename Config::degree_size_type degree_size_type;
+ typedef typename Config::edge_property_type edge_property_type;
+ typedef adj_list_tag graph_tag;
+
+ static vertex_descriptor null_vertex()
+ {
+ return 0;
+ }
+
+ inline adj_list_impl() { }
+
+ inline adj_list_impl(const adj_list_impl& x) {
+ copy_impl(x);
+ }
+ inline adj_list_impl& operator=(const adj_list_impl& x) {
+ this->clear();
+ copy_impl(x);
+ return *this;
+ }
+ inline void clear() {
+ for (typename StoredVertexList::iterator i = m_vertices.begin();
+ i != m_vertices.end(); ++i)
+ delete (stored_vertex*)*i;
+ m_vertices.clear();
+ m_edges.clear();
+ }
+ inline adj_list_impl(vertices_size_type num_vertices) {
+ for (vertices_size_type i = 0; i < num_vertices; ++i)
+ add_vertex(static_cast<Derived&>(*this));
+ }
+ template <class EdgeIterator>
+ inline adj_list_impl(vertices_size_type num_vertices,
+ EdgeIterator first, EdgeIterator last)
+ {
+ vertex_descriptor* v = new vertex_descriptor[num_vertices];
+ for (vertices_size_type i = 0; i < num_vertices; ++i)
+ v[i] = add_vertex(static_cast<Derived&>(*this));
+
+ while (first != last) {
+ add_edge(v[(*first).first], v[(*first).second], *this);
+ ++first;
+ }
+ delete [] v;
+ }
+ template <class EdgeIterator, class EdgePropertyIterator>
+ inline adj_list_impl(vertices_size_type num_vertices,
+ EdgeIterator first, EdgeIterator last,
+ EdgePropertyIterator ep_iter)
+ {
+ vertex_descriptor* v = new vertex_descriptor[num_vertices];
+ for (vertices_size_type i = 0; i < num_vertices; ++i)
+ v[i] = add_vertex(static_cast<Derived&>(*this));
+
+ while (first != last) {
+ add_edge(v[(*first).first], v[(*first).second], *ep_iter, *this);
+ ++first;
+ ++ep_iter;
+ }
+ delete [] v;
+ }
+ ~adj_list_impl() {
+ for (typename StoredVertexList::iterator i = m_vertices.begin();
+ i != m_vertices.end(); ++i)
+ delete (stored_vertex*)*i;
+ }
+ // protected:
+ inline OutEdgeList& out_edge_list(vertex_descriptor v) {
+ stored_vertex* sv = (stored_vertex*)v;
+ return sv->m_out_edges;
+ }
+ inline const OutEdgeList& out_edge_list(vertex_descriptor v) const {
+ stored_vertex* sv = (stored_vertex*)v;
+ return sv->m_out_edges;
+ }
+ inline StoredVertexList& vertex_set() { return m_vertices; }
+ inline const StoredVertexList& vertex_set() const { return m_vertices; }
+
+ inline void copy_impl(const adj_list_impl& x_)
+ {
+ const Derived& x = static_cast<const Derived&>(x_);
+
+ // Would be better to have a constant time way to get from
+ // vertices in x to the corresponding vertices in *this.
+ std::map<stored_vertex*,stored_vertex*> vertex_map;
+
+ // Copy the stored vertex objects by adding each vertex
+ // and copying its property object.
+ vertex_iterator vi, vi_end;
+ for (tie(vi, vi_end) = vertices(x); vi != vi_end; ++vi) {
+ stored_vertex* v = (stored_vertex*)add_vertex(*this);
+ v->m_property = ((stored_vertex*)*vi)->m_property;
+ vertex_map[(stored_vertex*)*vi] = v;
+ }
+ // Copy the edges by adding each edge and copying its
+ // property object.
+ edge_iterator ei, ei_end;
+ for (tie(ei, ei_end) = edges(x); ei != ei_end; ++ei) {
+ edge_descriptor e;
+ bool inserted;
+ vertex_descriptor s = source(*ei,x), t = target(*ei,x);
+ tie(e, inserted) = add_edge(vertex_map[(stored_vertex*)s],
+ vertex_map[(stored_vertex*)t], *this);
+ *((edge_property_type*)e.m_eproperty)
+ = *((edge_property_type*)(*ei).m_eproperty);
+ }
+ }
+
+
+ typename Config::EdgeContainer m_edges;
+ StoredVertexList m_vertices;
+ };
+
+ // O(1)
+ template <class Derived, class Config, class Base>
+ inline typename Config::vertex_descriptor
+ add_vertex(adj_list_impl<Derived, Config, Base>& g_)
+ {
+ Derived& g = static_cast<Derived&>(g_);
+ typedef typename Config::stored_vertex stored_vertex;
+ stored_vertex* v = new stored_vertex;
+ typename Config::StoredVertexList::iterator pos;
+ bool inserted;
+ boost::tie(pos,inserted) = boost::graph_detail::push(g.m_vertices, v);
+ v->m_position = pos;
+ return v;
+ }
+ // O(1)
+ template <class Derived, class Config, class Base>
+ inline typename Config::vertex_descriptor
+ add_vertex(const typename Config::vertex_property_type& p,
+ adj_list_impl<Derived, Config, Base>& g_)
+ {
+ Derived& g = static_cast<Derived&>(g_);
+ typedef typename Config::stored_vertex stored_vertex;
+ stored_vertex* v = new stored_vertex(p);
+ typename Config::StoredVertexList::iterator pos;
+ bool inserted;
+ boost::tie(pos,inserted) = boost::graph_detail::push(g.m_vertices, v);
+ v->m_position = pos;
+ return v;
+ }
+ // O(1)
+ template <class Derived, class Config, class Base>
+ inline void remove_vertex(typename Config::vertex_descriptor u,
+ adj_list_impl<Derived, Config, Base>& g_)
+ {
+ typedef typename Config::stored_vertex stored_vertex;
+ Derived& g = static_cast<Derived&>(g_);
+ stored_vertex* su = (stored_vertex*)u;
+ g.m_vertices.erase(su->m_position);
+ delete su;
+ }
+ // O(V)
+ template <class Derived, class Config, class Base>
+ inline typename Config::vertex_descriptor
+ vertex(typename Config::vertices_size_type n,
+ const adj_list_impl<Derived, Config, Base>& g_)
+ {
+ const Derived& g = static_cast<const Derived&>(g_);
+ typename Config::vertex_iterator i = vertices(g).first;
+ while (n--) ++i; // std::advance(i, n); (not VC++ portable)
+ return *i;
+ }
+
+ //=========================================================================
+ // Vector-Backbone Adjacency List Implementation
+
+ namespace detail {
+
+ template <class Graph, class vertex_descriptor>
+ inline void
+ remove_vertex_dispatch(Graph& g, vertex_descriptor u,
+ boost::directed_tag)
+ {
+ typedef typename Graph::edge_parallel_category edge_parallel_category;
+ g.m_vertices.erase(g.m_vertices.begin() + u);
+ vertex_descriptor V = num_vertices(g);
+ if (u != V) {
+ for (vertex_descriptor v = 0; v < V; ++v)
+ reindex_edge_list(g.out_edge_list(v), u, edge_parallel_category());
+ }
+ }
+
+ template <class Graph, class vertex_descriptor>
+ inline void
+ remove_vertex_dispatch(Graph& g, vertex_descriptor u,
+ boost::undirected_tag)
+ {
+ typedef typename Graph::global_edgelist_selector EdgeListS;
+ BOOST_STATIC_ASSERT((!is_same<EdgeListS, vecS>::value));
+
+ typedef typename Graph::edge_parallel_category edge_parallel_category;
+ g.m_vertices.erase(g.m_vertices.begin() + u);
+ vertex_descriptor V = num_vertices(g);
+ for (vertex_descriptor v = 0; v < V; ++v)
+ reindex_edge_list(g.out_edge_list(v), u,
+ edge_parallel_category());
+ typedef typename Graph::EdgeContainer Container;
+ typedef typename Container::iterator Iter;
+ Iter ei = g.m_edges.begin(), ei_end = g.m_edges.end();
+ for (; ei != ei_end; ++ei) {
+ if (ei->m_source > u)
+ --ei->m_source;
+ if (ei->m_target > u)
+ --ei->m_target;
+ }
+ }
+ template <class Graph, class vertex_descriptor>
+ inline void
+ remove_vertex_dispatch(Graph& g, vertex_descriptor u,
+ boost::bidirectional_tag)
+ {
+ typedef typename Graph::global_edgelist_selector EdgeListS;
+ BOOST_STATIC_ASSERT((!is_same<EdgeListS, vecS>::value));
+
+ typedef typename Graph::edge_parallel_category edge_parallel_category;
+ g.m_vertices.erase(g.m_vertices.begin() + u);
+ vertex_descriptor V = num_vertices(g);
+ vertex_descriptor v;
+ if (u != V) {
+ for (v = 0; v < V; ++v)
+ reindex_edge_list(g.out_edge_list(v), u,
+ edge_parallel_category());
+ for (v = 0; v < V; ++v)
+ reindex_edge_list(in_edge_list(g, v), u,
+ edge_parallel_category());
+
+ typedef typename Graph::EdgeContainer Container;
+ typedef typename Container::iterator Iter;
+ Iter ei = g.m_edges.begin(), ei_end = g.m_edges.end();
+ for (; ei != ei_end; ++ei) {
+ if (ei->m_source > u)
+ --ei->m_source;
+ if (ei->m_target > u)
+ --ei->m_target;
+ }
+ }
+ }
+
+ template <class EdgeList, class vertex_descriptor>
+ inline void
+ reindex_edge_list(EdgeList& el, vertex_descriptor u,
+ boost::allow_parallel_edge_tag)
+ {
+ typename EdgeList::iterator ei = el.begin(), e_end = el.end();
+ for (; ei != e_end; ++ei)
+ if ((*ei).get_target() > u)
+ --(*ei).get_target();
+ }
+ template <class EdgeList, class vertex_descriptor>
+ inline void
+ reindex_edge_list(EdgeList& el, vertex_descriptor u,
+ boost::disallow_parallel_edge_tag)
+ {
+ typename EdgeList::iterator ei = el.begin(), e_end = el.end();
+ while (ei != e_end) {
+ typename EdgeList::value_type ce = *ei;
+ ++ei;
+ if (ce.get_target() > u) {
+ el.erase(ce);
+ --ce.get_target();
+ el.insert(ce);
+ }
+ }
+ }
+ } // namespace detail
+
+ struct vec_adj_list_tag { };
+
+ template <class Graph, class Config, class Base>
+ class vec_adj_list_impl
+ : public adj_list_helper<Config, Base>
+ {
+ typedef typename Config::OutEdgeList OutEdgeList;
+ typedef typename Config::InEdgeList InEdgeList;
+ typedef typename Config::StoredVertexList StoredVertexList;
+ public:
+ typedef typename Config::vertex_descriptor vertex_descriptor;
+ typedef typename Config::edge_descriptor edge_descriptor;
+ typedef typename Config::out_edge_iterator out_edge_iterator;
+ typedef typename Config::edge_iterator edge_iterator;
+ typedef typename Config::directed_category directed_category;
+ typedef typename Config::vertices_size_type vertices_size_type;
+ typedef typename Config::edges_size_type edges_size_type;
+ typedef typename Config::degree_size_type degree_size_type;
+ typedef typename Config::StoredEdge StoredEdge;
+ typedef typename Config::stored_vertex stored_vertex;
+ typedef typename Config::EdgeContainer EdgeContainer;
+ typedef typename Config::edge_property_type edge_property_type;
+ typedef vec_adj_list_tag graph_tag;
+
+ static vertex_descriptor null_vertex()
+ {
+ return (std::numeric_limits<vertex_descriptor>::max)();
+ }
+
+ inline vec_adj_list_impl() { }
+
+ inline vec_adj_list_impl(const vec_adj_list_impl& x) {
+ copy_impl(x);
+ }
+ inline vec_adj_list_impl& operator=(const vec_adj_list_impl& x) {
+ this->clear();
+ copy_impl(x);
+ return *this;
+ }
+ inline void clear() {
+ m_vertices.clear();
+ m_edges.clear();
+ }
+
+ inline vec_adj_list_impl(vertices_size_type _num_vertices)
+ : m_vertices(_num_vertices) { }
+
+ template <class EdgeIterator>
+ inline vec_adj_list_impl(vertices_size_type num_vertices,
+ EdgeIterator first, EdgeIterator last)
+ : m_vertices(num_vertices)
+ {
+ while (first != last) {
+ add_edge((*first).first, (*first).second,
+ static_cast<Graph&>(*this));
+ ++first;
+ }
+ }
+ template <class EdgeIterator, class EdgePropertyIterator>
+ inline vec_adj_list_impl(vertices_size_type num_vertices,
+ EdgeIterator first, EdgeIterator last,
+ EdgePropertyIterator ep_iter)
+ : m_vertices(num_vertices)
+ {
+ while (first != last) {
+ add_edge((*first).first, (*first).second, *ep_iter,
+ static_cast<Graph&>(*this));
+ ++first;
+ ++ep_iter;
+ }
+ }
+
+ // protected:
+ inline boost::integer_range<vertex_descriptor> vertex_set() const {
+ return boost::integer_range<vertex_descriptor>(0, m_vertices.size());
+ }
+ inline OutEdgeList& out_edge_list(vertex_descriptor v) {
+ return m_vertices[v].m_out_edges;
+ }
+ inline const OutEdgeList& out_edge_list(vertex_descriptor v) const {
+ return m_vertices[v].m_out_edges;
+ }
+ inline void copy_impl(const vec_adj_list_impl& x_)
+ {
+ const Graph& x = static_cast<const Graph&>(x_);
+ // Copy the stored vertex objects by adding each vertex
+ // and copying its property object.
+ for (vertices_size_type i = 0; i < num_vertices(x); ++i) {
+ vertex_descriptor v = add_vertex(*this);
+ m_vertices[v].m_property = x.m_vertices[i].m_property;
+ }
+ // Copy the edges by adding each edge and copying its
+ // property object.
+ edge_iterator ei, ei_end;
+ for (tie(ei, ei_end) = edges(x); ei != ei_end; ++ei) {
+ edge_descriptor e;
+ bool inserted;
+ tie(e, inserted) = add_edge(source(*ei,x), target(*ei,x) , *this);
+ *((edge_property_type*)e.m_eproperty)
+ = *((edge_property_type*)(*ei).m_eproperty);
+ }
+ }
+ typename Config::EdgeContainer m_edges;
+ StoredVertexList m_vertices;
+ };
+ // Had to make these non-members to avoid accidental instantiation
+ // on SGI MIPSpro C++
+ template <class G, class C, class B>
+ inline typename C::InEdgeList&
+ in_edge_list(vec_adj_list_impl<G,C,B>& g,
+ typename C::vertex_descriptor v) {
+ return g.m_vertices[v].m_in_edges;
+ }
+ template <class G, class C, class B>
+ inline const typename C::InEdgeList&
+ in_edge_list(const vec_adj_list_impl<G,C,B>& g,
+ typename C::vertex_descriptor v) {
+ return g.m_vertices[v].m_in_edges;
+ }
+
+ // O(1)
+ template <class Graph, class Config, class Base>
+ inline typename Config::vertex_descriptor
+ add_vertex(vec_adj_list_impl<Graph, Config, Base>& g_) {
+ Graph& g = static_cast<Graph&>(g_);
+ g.m_vertices.resize(g.m_vertices.size() + 1);
+ return g.m_vertices.size() - 1;
+ }
+
+ template <class Graph, class Config, class Base>
+ inline typename Config::vertex_descriptor
+ add_vertex(const typename Config::vertex_property_type& p,
+ vec_adj_list_impl<Graph, Config, Base>& g_) {
+ Graph& g = static_cast<Graph&>(g_);
+ typedef typename Config::stored_vertex stored_vertex;
+ g.m_vertices.push_back(stored_vertex(p));
+ return g.m_vertices.size() - 1;
+ }
+
+ // Here we override the directed_graph_helper add_edge() function
+ // so that the number of vertices is automatically changed if
+ // either u or v is greater than the number of vertices.
+ template <class Graph, class Config, class Base>
+ inline std::pair<typename Config::edge_descriptor, bool>
+ add_edge(typename Config::vertex_descriptor u,
+ typename Config::vertex_descriptor v,
+ const typename Config::edge_property_type& p,
+ vec_adj_list_impl<Graph, Config, Base>& g_)
+ {
+ BOOST_USING_STD_MAX();
+ typename Config::vertex_descriptor x = max BOOST_PREVENT_MACRO_SUBSTITUTION(u, v);
+ if (x >= num_vertices(g_))
+ g_.m_vertices.resize(x + 1);
+ adj_list_helper<Config, Base>& g = g_;
+ return add_edge(u, v, p, g);
+ }
+ template <class Graph, class Config, class Base>
+ inline std::pair<typename Config::edge_descriptor, bool>
+ add_edge(typename Config::vertex_descriptor u,
+ typename Config::vertex_descriptor v,
+ vec_adj_list_impl<Graph, Config, Base>& g_)
+ {
+ typename Config::edge_property_type p;
+ return add_edge(u, v, p, g_);
+ }
+
+
+ // O(V + E)
+ template <class Graph, class Config, class Base>
+ inline void remove_vertex(typename Config::vertex_descriptor v,
+ vec_adj_list_impl<Graph, Config, Base>& g_)
+ {
+ typedef typename Config::directed_category Cat;
+ Graph& g = static_cast<Graph&>(g_);
+ detail::remove_vertex_dispatch(g, v, Cat());
+ }
+ // O(1)
+ template <class Graph, class Config, class Base>
+ inline typename Config::vertex_descriptor
+ vertex(typename Config::vertices_size_type n,
+ const vec_adj_list_impl<Graph, Config, Base>&)
+ {
+ return n;
+ }
+
+
+ namespace detail {
+
+ //=========================================================================
+ // Adjacency List Generator
+
+ template <class Graph, class VertexListS, class OutEdgeListS,
+ class DirectedS, class VertexProperty, class EdgeProperty,
+ class GraphProperty, class EdgeListS>
+ struct adj_list_gen
+ {
+ typedef typename detail::is_random_access<VertexListS>::type
+ is_rand_access;
+ typedef typename has_property<EdgeProperty>::type has_edge_property;
+ typedef typename DirectedS::is_directed_t DirectedT;
+ typedef typename DirectedS::is_bidir_t BidirectionalT;
+
+ struct config
+ {
+ typedef OutEdgeListS edgelist_selector;
+ typedef EdgeListS global_edgelist_selector;
+
+ typedef Graph graph_type;
+ typedef EdgeProperty edge_property_type;
+ typedef VertexProperty vertex_property_type;
+ typedef GraphProperty graph_property_type;
+ typedef std::size_t vertices_size_type;
+
+ typedef adjacency_list_traits<OutEdgeListS, VertexListS, DirectedS>
+ Traits;
+
+ typedef typename Traits::directed_category directed_category;
+ typedef typename Traits::edge_parallel_category edge_parallel_category;
+ typedef typename Traits::vertex_descriptor vertex_descriptor;
+ typedef typename Traits::edge_descriptor edge_descriptor;
+
+ typedef void* vertex_ptr;
+
+ // need to reorganize this to avoid instantiating stuff
+ // that doesn't get used -JGS
+
+ // VertexList and vertex_iterator
+ typedef typename container_gen<VertexListS,
+ vertex_ptr>::type SeqVertexList;
+ typedef boost::integer_range<std::size_t> RandVertexList;
+ typedef typename boost::ct_if_t<is_rand_access,
+ RandVertexList, SeqVertexList>::type VertexList;
+
+ typedef typename VertexList::iterator vertex_iterator;
+
+ // EdgeContainer and StoredEdge
+
+ typedef typename container_gen<EdgeListS,
+ list_edge<vertex_descriptor, EdgeProperty> >::type EdgeContainer;
+
+ typedef typename ct_and<DirectedT,
+ typename ct_not<BidirectionalT>::type >::type on_edge_storage;
+
+ typedef typename boost::ct_if_t<on_edge_storage,
+ std::size_t, typename EdgeContainer::size_type
+ >::type edges_size_type;
+
+ typedef typename EdgeContainer::iterator EdgeIter;
+
+ typedef typename detail::is_random_access<EdgeListS>::type is_edge_ra;
+
+ typedef typename boost::ct_if_t<on_edge_storage,
+ stored_edge_property<vertex_descriptor, EdgeProperty>,
+ typename boost::ct_if_t<is_edge_ra,
+ stored_ra_edge_iter<vertex_descriptor, EdgeContainer, EdgeProperty>,
+ stored_edge_iter<vertex_descriptor, EdgeIter, EdgeProperty>
+ >::type
+ >::type StoredEdge;
+
+ // Adjacency Types
+
+ typedef typename container_gen<OutEdgeListS, StoredEdge>::type
+ OutEdgeList;
+ typedef typename OutEdgeList::size_type degree_size_type;
+ typedef typename OutEdgeList::iterator OutEdgeIter;
+
+ typedef boost::detail::iterator_traits<OutEdgeIter> OutEdgeIterTraits;
+ typedef typename OutEdgeIterTraits::iterator_category OutEdgeIterCat;
+ typedef typename OutEdgeIterTraits::difference_type OutEdgeIterDiff;
+
+ typedef out_edge_iter<
+ OutEdgeIter, vertex_descriptor, edge_descriptor, OutEdgeIterDiff
+ > out_edge_iterator;
+
+ typedef typename adjacency_iterator_generator<graph_type,
+ vertex_descriptor, out_edge_iterator>::type adjacency_iterator;
+
+ typedef OutEdgeList InEdgeList;
+ typedef OutEdgeIter InEdgeIter;
+ typedef OutEdgeIterCat InEdgeIterCat;
+ typedef OutEdgeIterDiff InEdgeIterDiff;
+
+ typedef in_edge_iter<
+ InEdgeIter, vertex_descriptor, edge_descriptor, InEdgeIterDiff
+ > in_edge_iterator;
+
+ typedef typename inv_adjacency_iterator_generator<graph_type,
+ vertex_descriptor, in_edge_iterator>::type inv_adjacency_iterator;
+
+ // Edge Iterator
+
+ typedef boost::detail::iterator_traits<EdgeIter> EdgeIterTraits;
+ typedef typename EdgeIterTraits::iterator_category EdgeIterCat;
+ typedef typename EdgeIterTraits::difference_type EdgeIterDiff;
+
+ typedef undirected_edge_iter<
+ EdgeIter
+ , edge_descriptor
+ , EdgeIterDiff
+ > UndirectedEdgeIter; // also used for bidirectional
+
+ typedef adj_list_edge_iterator<vertex_iterator, out_edge_iterator,
+ graph_type> DirectedEdgeIter;
+
+ typedef typename boost::ct_if_t<on_edge_storage,
+ DirectedEdgeIter, UndirectedEdgeIter>::type edge_iterator;
+
+ // stored_vertex and StoredVertexList
+ typedef typename container_gen<VertexListS, vertex_ptr>::type
+ SeqStoredVertexList;
+ struct seq_stored_vertex {
+ seq_stored_vertex() { }
+ seq_stored_vertex(const VertexProperty& p) : m_property(p) { }
+ OutEdgeList m_out_edges;
+ VertexProperty m_property;
+ typename SeqStoredVertexList::iterator m_position;
+ };
+ struct bidir_seq_stored_vertex {
+ bidir_seq_stored_vertex() { }
+ bidir_seq_stored_vertex(const VertexProperty& p) : m_property(p) { }
+ OutEdgeList m_out_edges;
+ InEdgeList m_in_edges;
+ VertexProperty m_property;
+ typename SeqStoredVertexList::iterator m_position;
+ };
+ struct rand_stored_vertex {
+ rand_stored_vertex() { }
+ rand_stored_vertex(const VertexProperty& p) : m_property(p) { }
+ OutEdgeList m_out_edges;
+ VertexProperty m_property;
+ };
+ struct bidir_rand_stored_vertex {
+ bidir_rand_stored_vertex() { }
+ bidir_rand_stored_vertex(const VertexProperty& p) : m_property(p) { }
+ OutEdgeList m_out_edges;
+ InEdgeList m_in_edges;
+ VertexProperty m_property;
+ };
+ typedef typename boost::ct_if_t<is_rand_access,
+ typename boost::ct_if_t<BidirectionalT,
+ bidir_rand_stored_vertex, rand_stored_vertex>::type,
+ typename boost::ct_if_t<BidirectionalT,
+ bidir_seq_stored_vertex, seq_stored_vertex>::type
+ >::type StoredVertex;
+ struct stored_vertex : public StoredVertex {
+ stored_vertex() { }
+ stored_vertex(const VertexProperty& p) : StoredVertex(p) { }
+ };
+
+ typedef typename container_gen<VertexListS, stored_vertex>::type
+ RandStoredVertexList;
+ typedef typename boost::ct_if_t< is_rand_access,
+ RandStoredVertexList, SeqStoredVertexList>::type StoredVertexList;
+ }; // end of config
+
+
+ typedef typename boost::ct_if_t<BidirectionalT,
+ bidirectional_graph_helper_with_property<config>,
+ typename boost::ct_if_t<DirectedT,
+ directed_graph_helper<config>,
+ undirected_graph_helper<config>
+ >::type
+ >::type DirectedHelper;
+
+ typedef typename boost::ct_if_t<is_rand_access,
+ vec_adj_list_impl<Graph, config, DirectedHelper>,
+ adj_list_impl<Graph, config, DirectedHelper>
+ >::type type;
+
+ };
+
+ } // namespace detail
+
+ //=========================================================================
+ // Vertex Property Maps
+
+ template <class Graph, class ValueType, class Reference, class Tag>
+ struct adj_list_vertex_property_map
+ : public boost::put_get_helper<
+ Reference,
+ adj_list_vertex_property_map<Graph, ValueType, Reference, Tag>
+ >
+ {
+ typedef typename Graph::stored_vertex StoredVertex;
+ typedef ValueType value_type;
+ typedef Reference reference;
+ typedef typename Graph::vertex_descriptor key_type;
+ typedef boost::lvalue_property_map_tag category;
+ inline adj_list_vertex_property_map() { }
+ inline adj_list_vertex_property_map(const Graph*) { }
+ inline Reference operator[](key_type v) const {
+ StoredVertex* sv = (StoredVertex*)v;
+ return get_property_value(sv->m_property, Tag());
+ }
+ inline Reference operator()(key_type v) const {
+ return this->operator[](v);
+ }
+ };
+
+ template <class Graph, class Property, class PropRef>
+ struct adj_list_vertex_all_properties_map
+ : public boost::put_get_helper<PropRef,
+ adj_list_vertex_all_properties_map<Graph, Property, PropRef>
+ >
+ {
+ typedef typename Graph::stored_vertex StoredVertex;
+ typedef Property value_type;
+ typedef PropRef reference;
+ typedef typename Graph::vertex_descriptor key_type;
+ typedef boost::lvalue_property_map_tag category;
+ inline adj_list_vertex_all_properties_map() { }
+ inline adj_list_vertex_all_properties_map(const Graph*) { }
+ inline PropRef operator[](key_type v) const {
+ StoredVertex* sv = (StoredVertex*)v;
+ return sv->m_property;
+ }
+ inline PropRef operator()(key_type v) const {
+ return this->operator[](v);
+ }
+ };
+
+ template <class Graph, class GraphPtr, class ValueType, class Reference,
+ class Tag>
+ struct vec_adj_list_vertex_property_map
+ : public boost::put_get_helper<
+ Reference,
+ vec_adj_list_vertex_property_map<Graph,GraphPtr,ValueType,Reference,
+ Tag>
+ >
+ {
+ typedef ValueType value_type;
+ typedef Reference reference;
+ typedef typename boost::graph_traits<Graph>::vertex_descriptor key_type;
+ typedef boost::lvalue_property_map_tag category;
+ vec_adj_list_vertex_property_map() { }
+ vec_adj_list_vertex_property_map(GraphPtr g) : m_g(g) { }
+ inline Reference operator[](key_type v) const {
+ return get_property_value(m_g->m_vertices[v].m_property, Tag());
+ }
+ inline Reference operator()(key_type v) const {
+ return this->operator[](v);
+ }
+ GraphPtr m_g;
+ };
+
+ template <class Graph, class GraphPtr, class Property, class PropertyRef>
+ struct vec_adj_list_vertex_all_properties_map
+ : public boost::put_get_helper<PropertyRef,
+ vec_adj_list_vertex_all_properties_map<Graph,GraphPtr,Property,
+ PropertyRef>
+ >
+ {
+ typedef Property value_type;
+ typedef PropertyRef reference;
+ typedef typename boost::graph_traits<Graph>::vertex_descriptor key_type;
+ typedef boost::lvalue_property_map_tag category;
+ vec_adj_list_vertex_all_properties_map() { }
+ vec_adj_list_vertex_all_properties_map(GraphPtr g) : m_g(g) { }
+ inline PropertyRef operator[](key_type v) const {
+ return m_g->m_vertices[v].m_property;
+ }
+ inline PropertyRef operator()(key_type v) const {
+ return this->operator[](v);
+ }
+ GraphPtr m_g;
+ };
+
+ struct adj_list_any_vertex_pa {
+ template <class Tag, class Graph, class Property>
+ struct bind_ {
+ typedef typename property_value<Property, Tag>::type value_type;
+ typedef value_type& reference;
+ typedef const value_type& const_reference;
+
+ typedef adj_list_vertex_property_map
+ <Graph, value_type, reference, Tag> type;
+ typedef adj_list_vertex_property_map
+ <Graph, value_type, const_reference, Tag> const_type;
+ };
+ };
+ struct adj_list_all_vertex_pa {
+ template <class Tag, class Graph, class Property>
+ struct bind_ {
+ typedef typename Graph::vertex_descriptor Vertex;
+ typedef adj_list_vertex_all_properties_map<Graph,Property,
+ Property&> type;
+ typedef adj_list_vertex_all_properties_map<Graph,Property,
+ const Property&> const_type;
+ };
+ };
+
+ template <class Property, class Vertex>
+ struct vec_adj_list_vertex_id_map
+ : public boost::put_get_helper<
+ Vertex, vec_adj_list_vertex_id_map<Property, Vertex>
+ >
+ {
+ typedef Vertex value_type;
+ typedef Vertex key_type;
+ typedef Vertex reference;
+ typedef boost::readable_property_map_tag category;
+ inline vec_adj_list_vertex_id_map() { }
+ template <class Graph>
+ inline vec_adj_list_vertex_id_map(const Graph&) { }
+ inline value_type operator[](key_type v) const { return v; }
+ inline value_type operator()(key_type v) const { return v; }
+ };
+
+ struct vec_adj_list_any_vertex_pa {
+ template <class Tag, class Graph, class Property>
+ struct bind_ {
+ typedef typename property_value<Property, Tag>::type value_type;
+ typedef value_type& reference;
+ typedef const value_type& const_reference;
+
+ typedef vec_adj_list_vertex_property_map
+ <Graph, Graph*, value_type, reference, Tag> type;
+ typedef vec_adj_list_vertex_property_map
+ <Graph, const Graph*, value_type, const_reference, Tag> const_type;
+ };
+ };
+ struct vec_adj_list_id_vertex_pa {
+ template <class Tag, class Graph, class Property>
+ struct bind_ {
+ typedef typename Graph::vertex_descriptor Vertex;
+ typedef vec_adj_list_vertex_id_map<Property, Vertex> type;
+ typedef vec_adj_list_vertex_id_map<Property, Vertex> const_type;
+ };
+ };
+ struct vec_adj_list_all_vertex_pa {
+ template <class Tag, class Graph, class Property>
+ struct bind_ {
+ typedef typename Graph::vertex_descriptor Vertex;
+ typedef vec_adj_list_vertex_all_properties_map
+ <Graph, Graph*, Property, Property&> type;
+ typedef vec_adj_list_vertex_all_properties_map
+ <Graph, const Graph*, Property, const Property&> const_type;
+ };
+ };
+ namespace detail {
+ template <class Tag>
+ struct adj_list_choose_vertex_pa_helper {
+ typedef adj_list_any_vertex_pa type;
+ };
+ template <>
+ struct adj_list_choose_vertex_pa_helper<vertex_all_t> {
+ typedef adj_list_all_vertex_pa type;
+ };
+ template <class Tag, class Graph, class Property>
+ struct adj_list_choose_vertex_pa {
+ typedef typename adj_list_choose_vertex_pa_helper<Tag>::type Helper;
+ typedef typename Helper::template bind_<Tag,Graph,Property> Bind;
+ typedef typename Bind::type type;
+ typedef typename Bind::const_type const_type;
+ };
+
+
+ template <class Tag>
+ struct vec_adj_list_choose_vertex_pa_helper {
+ typedef vec_adj_list_any_vertex_pa type;
+ };
+ template <>
+ struct vec_adj_list_choose_vertex_pa_helper<vertex_index_t> {
+ typedef vec_adj_list_id_vertex_pa type;
+ };
+ template <>
+ struct vec_adj_list_choose_vertex_pa_helper<vertex_all_t> {
+ typedef vec_adj_list_all_vertex_pa type;
+ };
+ template <class Tag, class Graph, class Property>
+ struct vec_adj_list_choose_vertex_pa {
+ typedef typename vec_adj_list_choose_vertex_pa_helper<Tag>::type Helper;
+ typedef typename Helper::template bind_<Tag,Graph,Property> Bind;
+ typedef typename Bind::type type;
+ typedef typename Bind::const_type const_type;
+ };
+ } // namespace detail
+
+ //=========================================================================
+ // Edge Property Map
+
+ template <class Directed, class Value, class Ref, class Vertex,
+ class Property, class Tag>
+ struct adj_list_edge_property_map
+ : public put_get_helper<
+ Ref,
+ adj_list_edge_property_map<Directed, Value, Ref, Vertex, Property,
+ Tag>
+ >
+ {
+ typedef Value value_type;
+ typedef Ref reference;
+ typedef detail::edge_desc_impl<Directed, Vertex> key_type;
+ typedef boost::lvalue_property_map_tag category;
+ inline Ref operator[](key_type e) const {
+ Property& p = *(Property*)e.get_property();
+ return get_property_value(p, Tag());
+ }
+ inline Ref operator()(key_type e) const {
+ return this->operator[](e);
+ }
+ };
+
+ template <class Directed, class Property, class PropRef, class PropPtr,
+ class Vertex>
+ struct adj_list_edge_all_properties_map
+ : public put_get_helper<PropRef,
+ adj_list_edge_all_properties_map<Directed, Property, PropRef,
+ PropPtr, Vertex>
+ >
+ {
+ typedef Property value_type;
+ typedef PropRef reference;
+ typedef detail::edge_desc_impl<Directed, Vertex> key_type;
+ typedef boost::lvalue_property_map_tag category;
+ inline PropRef operator[](key_type e) const {
+ return *(PropPtr)e.get_property();
+ }
+ inline PropRef operator()(key_type e) const {
+ return this->operator[](e);
+ }
+ };
+
+ // Edge Property Maps
+
+ namespace detail {
+ struct adj_list_any_edge_pmap {
+ template <class Graph, class Property, class Tag>
+ struct bind_ {
+ typedef typename property_value<Property,Tag>::type value_type;
+ typedef value_type& reference;
+ typedef const value_type& const_reference;
+
+ typedef adj_list_edge_property_map
+ <typename Graph::directed_category, value_type, reference,
+ typename Graph::vertex_descriptor,Property,Tag> type;
+ typedef adj_list_edge_property_map
+ <typename Graph::directed_category, value_type, const_reference,
+ typename Graph::vertex_descriptor,const Property, Tag> const_type;
+ };
+ };
+ struct adj_list_all_edge_pmap {
+ template <class Graph, class Property, class Tag>
+ struct bind_ {
+ typedef adj_list_edge_all_properties_map
+ <typename Graph::directed_category, Property, Property&, Property*,
+ typename Graph::vertex_descriptor> type;
+ typedef adj_list_edge_all_properties_map
+ <typename Graph::directed_category, Property, const Property&,
+ const Property*, typename Graph::vertex_descriptor> const_type;
+ };
+ };
+
+ template <class Tag>
+ struct adj_list_choose_edge_pmap_helper {
+ typedef adj_list_any_edge_pmap type;
+ };
+ template <>
+ struct adj_list_choose_edge_pmap_helper<edge_all_t> {
+ typedef adj_list_all_edge_pmap type;
+ };
+ template <class Tag, class Graph, class Property>
+ struct adj_list_choose_edge_pmap {
+ typedef typename adj_list_choose_edge_pmap_helper<Tag>::type Helper;
+ typedef typename Helper::template bind_<Graph,Property,Tag> Bind;
+ typedef typename Bind::type type;
+ typedef typename Bind::const_type const_type;
+ };
+ struct adj_list_edge_property_selector {
+ template <class Graph, class Property, class Tag>
+ struct bind_ {
+ typedef adj_list_choose_edge_pmap<Tag,Graph,Property> Choice;
+ typedef typename Choice::type type;
+ typedef typename Choice::const_type const_type;
+ };
+ };
+ } // namespace detail
+
+ template <>
+ struct edge_property_selector<adj_list_tag> {
+ typedef detail::adj_list_edge_property_selector type;
+ };
+ template <>
+ struct edge_property_selector<vec_adj_list_tag> {
+ typedef detail::adj_list_edge_property_selector type;
+ };
+
+ // Vertex Property Maps
+
+ struct adj_list_vertex_property_selector {
+ template <class Graph, class Property, class Tag>
+ struct bind_ {
+ typedef detail::adj_list_choose_vertex_pa<Tag,Graph,Property> Choice;
+ typedef typename Choice::type type;
+ typedef typename Choice::const_type const_type;
+ };
+ };
+ template <>
+ struct vertex_property_selector<adj_list_tag> {
+ typedef adj_list_vertex_property_selector type;
+ };
+
+ struct vec_adj_list_vertex_property_selector {
+ template <class Graph, class Property, class Tag>
+ struct bind_ {
+ typedef detail::vec_adj_list_choose_vertex_pa<Tag,Graph,Property> Choice;
+ typedef typename Choice::type type;
+ typedef typename Choice::const_type const_type;
+ };
+ };
+ template <>
+ struct vertex_property_selector<vec_adj_list_tag> {
+ typedef vec_adj_list_vertex_property_selector type;
+ };
+
+} // namespace boost
+
+#if !defined(BOOST_NO_HASH) && !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+namespace BOOST_STD_EXTENSION_NAMESPACE {
+
+ #if BOOST_WORKAROUND( _STLPORT_VERSION, >= 0x500 )
+ // STLport 5 already defines a hash<void*> specialization.
+ #else
+ template <>
+ struct hash< void* > // Need this when vertex_descriptor=void*
+ {
+ std::size_t
+ operator()(void* v) const { return (std::size_t)v; }
+ };
+ #endif
+
+ template <typename V>
+ struct hash< boost::detail::stored_edge<V> >
+ {
+ std::size_t
+ operator()(const boost::detail::stored_edge<V>& e) const
+ {
+ return hash<V>()(e.m_target);
+ }
+ };
+
+ template <typename V, typename P>
+ struct hash< boost::detail::stored_edge_property <V,P> >
+ {
+ std::size_t
+ operator()(const boost::detail::stored_edge_property<V,P>& e) const
+ {
+ return hash<V>()(e.m_target);
+ }
+ };
+
+ template <typename V, typename I, typename P>
+ struct hash< boost::detail::stored_edge_iter<V,I, P> >
+ {
+ std::size_t
+ operator()(const boost::detail::stored_edge_iter<V,I,P>& e) const
+ {
+ return hash<V>()(e.m_target);
+ }
+ };
+
+}
+#endif
+
+
+#undef stored_edge
+#undef stored_edge_property
+#undef stored_edge_iter
+
+#endif // BOOST_GRAPH_DETAIL_DETAIL_ADJACENCY_LIST_CCT
+
+/*
+ Implementation Notes:
+
+ Many of the public interface functions in this file would have been
+ more conveniently implemented as inline friend functions.
+ However there are a few compiler bugs that make that approach
+ non-portable.
+
+ 1. g++ inline friend in namespace bug
+ 2. g++ using clause doesn't work with inline friends
+ 3. VC++ doesn't have Koenig lookup
+
+ For these reasons, the functions were all written as non-inline free
+ functions, and static cast was used to convert from the helper
+ class to the adjacency_list derived class.
+
+ Looking back, it might have been better to write out all functions
+ in terms of the adjacency_list, and then use a tag to dispatch
+ to the various helpers instead of using inheritance.
+
+ */
diff --git a/boost/boost/graph/detail/array_binary_tree.hpp b/boost/boost/graph/detail/array_binary_tree.hpp
new file mode 100644
index 00000000000..6f337e91218
--- /dev/null
+++ b/boost/boost/graph/detail/array_binary_tree.hpp
@@ -0,0 +1,182 @@
+//
+//=======================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// 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 ADSTL_ARRAY_BINARY_TREE_HPP
+#define ADSTL_ARRAY_BINARY_TREE_HPP
+
+#include <iterator>
+#include <functional>
+#include <boost/config.hpp>
+
+namespace adstl {
+ /*
+ Note: array_binary_tree is a completey balanced binary tree
+ */
+
+#if !defined BOOST_NO_STD_ITERATOR_TRAITS
+ template <class RandomAccessIterator, class ID>
+#else
+ template <class RandomAccessIterator, class ValueType, class ID>
+#endif
+class array_binary_tree_node {
+public:
+ typedef array_binary_tree_node ArrayBinaryTreeNode;
+ typedef RandomAccessIterator rep_iterator;
+#if !defined BOOST_NO_STD_ITERATOR_TRAITS
+ typedef typename std::iterator_traits<RandomAccessIterator>::difference_type
+ difference_type;
+ typedef typename std::iterator_traits<RandomAccessIterator>::value_type
+ value_type;
+#else
+ typedef int difference_type;
+ typedef ValueType value_type;
+#endif
+ typedef difference_type size_type;
+
+ struct children_type {
+ struct iterator
+ : boost::iterator<std::bidirectional_iterator_tag, ArrayBinaryTreeNode,
+ difference_type, array_binary_tree_node*, ArrayBinaryTreeNode&>
+ { // replace with iterator_adaptor implementation -JGS
+
+ inline iterator() : i(0), n(0) { }
+ inline iterator(const iterator& x) : r(x.r), i(x.i), n(x.n), id(x.id) { }
+ inline iterator& operator=(const iterator& x) {
+ r = x.r; i = x.i; n = x.n;
+ /*egcs generate a warning*/
+ id = x.id;
+ return *this;
+ }
+ inline iterator(rep_iterator rr,
+ size_type ii,
+ size_type nn,
+ const ID& _id) : r(rr), i(ii), n(nn), id(_id) { }
+ inline array_binary_tree_node operator*() {
+ return ArrayBinaryTreeNode(r, i, n, id); }
+ inline iterator& operator++() { ++i; return *this; }
+ inline iterator operator++(int)
+ { iterator t = *this; ++(*this); return t; }
+ inline bool operator==(const iterator& x) const { return i == x.i; }
+ inline bool operator!=(const iterator& x) const
+ { return !(*this == x); }
+ rep_iterator r;
+ size_type i;
+ size_type n;
+ ID id;
+ };
+ inline children_type() : i(0), n(0) { }
+ inline children_type(const children_type& x)
+ : r(x.r), i(x.i), n(x.n), id(x.id) { }
+ inline children_type& operator=(const children_type& x) {
+ r = x.r; i = x.i; n = x.n;
+ /*egcs generate a warning*/
+ id = x.id;
+ return *this;
+ }
+ inline children_type(rep_iterator rr,
+ size_type ii,
+ size_type nn,
+ const ID& _id) : r(rr), i(ii), n(nn), id(_id) { }
+ inline iterator begin() { return iterator(r, 2 * i + 1, n, id); }
+ inline iterator end() { return iterator(r, 2 * i + 1 + size(), n, id); }
+ inline size_type size() const {
+ size_type c = 2 * i + 1;
+ size_type s;
+ if (c + 1 < n) s = 2;
+ else if (c < n) s = 1;
+ else s = 0;
+ return s;
+ }
+ rep_iterator r;
+ size_type i;
+ size_type n;
+ ID id;
+ };
+ inline array_binary_tree_node() : i(0), n(0) { }
+ inline array_binary_tree_node(const array_binary_tree_node& x)
+ : r(x.r), i(x.i), n(x.n), id(x.id) { }
+ inline ArrayBinaryTreeNode& operator=(const ArrayBinaryTreeNode& x) {
+ r = x.r;
+ i = x.i;
+ n = x.n;
+ /*egcs generate a warning*/
+ id = x.id;
+ return *this;
+ }
+ inline array_binary_tree_node(rep_iterator start,
+ rep_iterator end,
+ rep_iterator pos, const ID& _id)
+ : r(start), i(pos - start), n(end - start), id(_id) { }
+ inline array_binary_tree_node(rep_iterator rr,
+ size_type ii,
+ size_type nn, const ID& _id)
+ : r(rr), i(ii), n(nn), id(_id) { }
+ inline value_type& value() { return *(r + i); }
+ inline const value_type& value() const { return *(r + i); }
+ inline ArrayBinaryTreeNode parent() const {
+ return ArrayBinaryTreeNode(r, (i - 1) / 2, n, id);
+ }
+ inline bool has_parent() const { return i != 0; }
+ inline children_type children() { return children_type(r, i, n, id); }
+ /*
+ inline void swap(array_binary_tree_node x) {
+ value_type tmp = x.value();
+ x.value() = value();
+ value() = tmp;
+ i = x.i;
+ }
+ */
+ template <class ExternalData>
+ inline void swap(ArrayBinaryTreeNode x, ExternalData& edata ) {
+ using boost::get;
+
+ value_type tmp = x.value();
+
+ /*swap external data*/
+ edata[ get(id, tmp) ] = i;
+ edata[ get(id, value()) ] = x.i;
+
+ x.value() = value();
+ value() = tmp;
+ i = x.i;
+ }
+ inline const children_type children() const {
+ return children_type(r, i, n);
+ }
+ inline size_type index() const { return i; }
+ rep_iterator r;
+ size_type i;
+ size_type n;
+ ID id;
+};
+
+template <class RandomAccessContainer,
+ class Compare = std::less<typename RandomAccessContainer::value_type> >
+struct compare_array_node {
+ typedef typename RandomAccessContainer::value_type value_type;
+ compare_array_node(const Compare& x) : comp(x) {}
+ compare_array_node(const compare_array_node& x) : comp(x.comp) {}
+
+ template< class node_type >
+ inline bool operator()(const node_type& x, const node_type& y) {
+ return comp(x.value(), y.value());
+ }
+
+ template< class node_type >
+ inline bool operator()(const node_type& x, const node_type& y) const {
+ return comp(x.value(), y.value());
+ }
+ Compare comp;
+};
+
+
+} /* namespace adstl */
+
+#endif /* ADSTL_ARRAY_BINARY_TREE_H */
diff --git a/boost/boost/graph/detail/bitset.hpp b/boost/boost/graph/detail/bitset.hpp
new file mode 100644
index 00000000000..c6ebf223232
--- /dev/null
+++ b/boost/boost/graph/detail/bitset.hpp
@@ -0,0 +1,910 @@
+//=======================================================================
+// Copyright 2001 Jeremy G. Siek
+// Authors: Jeremy G. Siek
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//=======================================================================
+
+/*
+ * Copyright (c) 1998
+ * Silicon Graphics Computer Systems, Inc.
+ *
+ * Permission to use, copy, modify, distribute and sell this software
+ * and its documentation for any purpose is hereby granted without fee,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear
+ * in supporting documentation. Silicon Graphics makes no
+ * representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ */
+
+#include <boost/config.hpp>
+#include <memory>
+#include <stdexcept>
+#include <algorithm>
+#include <string>
+#include <boost/config.hpp>
+#include <boost/pending/ct_if.hpp>
+#include <boost/graph/detail/bitset_adaptor.hpp>
+
+// This provides versions of std::bitset with both static and dynamic size.
+
+// UNDER CONSTRUCTION
+
+
+// replace this later
+#include <cassert>
+#define BOOST_ASSERT_THROW(expr, except) assert(expr)
+
+namespace boost {
+
+ namespace detail {
+ // structure to aid in counting bits
+ template<bool dummy = true>
+ struct bit_count {
+ static unsigned char value[256];
+ };
+
+ // Mapping from 8 bit unsigned integers to the index of the first bit
+ template<bool dummy = true>
+ struct first_bit_location {
+ static unsigned char value[256];
+ };
+
+ template <typename WordType> // this size is in bits
+ struct word_traits {
+ typedef WordType word_type;
+ static const std::size_t word_size = CHAR_BIT * sizeof(word_type);
+ };
+
+ //=========================================================================
+ template <class WordTraits, class SizeType, class Derived>
+ class bitset_base
+ : public bitset_adaptor< SizeType,
+ bitset_base<WordTraits, SizeType, Derived> >
+ {
+ // private:
+ public:
+ typedef SizeType size_type;
+ typedef typename WordTraits::word_type word_type;
+
+ static size_type s_which_word(size_type pos) {
+ return pos / WordTraits::word_size;
+ }
+ static size_type s_which_byte(size_type pos) {
+ return (pos % WordTraits::word_size) / CHAR_BIT;
+ }
+ static size_type s_which_bit(size_type pos) {
+ return pos % WordTraits::word_size;
+ }
+ static word_type s_mask_bit(size_type pos) {
+ return (static_cast<word_type>(1)) << s_which_bit(pos);
+ }
+ word_type& m_get_word(size_type pos) {
+ return data()[s_which_word(pos)];
+ }
+ word_type m_get_word(size_type pos) const {
+ return data()[s_which_word(pos)];
+ }
+ word_type& m_hi_word() { return data()[num_words() - 1]; }
+ word_type m_hi_word() const { return data()[num_words() - 1]; }
+
+ void m_sanitize_highest() {
+ size_type extra_bits = size() % WordTraits::word_size;
+ if (extra_bits)
+ m_hi_word() &= ~((~static_cast<word_type>(0)) << extra_bits);
+ }
+ public:
+
+ class reference {
+ friend class bitset_base;
+
+ word_type *m_word_ptr;
+ size_type m_bit_pos;
+
+ // left undefined
+ reference();
+
+ reference(bitset_base& b, size_type pos ) {
+ m_word_ptr = &b.m_get_word(pos);
+ m_bit_pos = s_which_bit(pos);
+ }
+
+ public:
+ ~reference() {}
+
+ // for b[i] = x;
+ reference& operator=(bool x) {
+ if ( x )
+ *m_word_ptr |= s_mask_bit(m_bit_pos);
+ else
+ *m_word_ptr &= ~s_mask_bit(m_bit_pos);
+
+ return *this;
+ }
+ // for b[i] = b[j];
+ reference& operator=(const reference& j) {
+ if ( (*(j.m_word_ptr) & s_mask_bit(j.m_bit_pos)) )
+ *m_word_ptr |= s_mask_bit(m_bit_pos);
+ else
+ *m_word_ptr &= ~s_mask_bit(m_bit_pos);
+
+ return *this;
+ }
+ // flips the bit
+ bool operator~() const {
+ return (*(m_word_ptr) & s_mask_bit(m_bit_pos)) == 0;
+ }
+ // for x = b[i];
+ operator bool() const {
+ return (*(m_word_ptr) & s_mask_bit(m_bit_pos)) != 0;
+ }
+ // for b[i].flip();
+ reference& flip() {
+ *m_word_ptr ^= s_mask_bit(m_bit_pos);
+ return *this;
+ }
+ };
+
+ void init_from_ulong(unsigned long val) {
+ reset();
+ const size_type n = (std::min)(sizeof(unsigned long) * CHAR_BIT,
+ WordTraits::word_size * num_words());
+ for(size_type i = 0; i < n; ++i, val >>= 1)
+ if ( val & 0x1 )
+ m_get_word(i) |= s_mask_bit(i);
+ }
+
+ // intersection: this = this & x
+ Derived& operator&=(const Derived& x) {
+ for (size_type i = 0; i < num_words(); ++i)
+ data()[i] &= x.data()[i];
+ return static_cast<Derived&>(*this);
+ }
+ // union: this = this | x
+ Derived& operator|=(const Derived& x) {
+ for (size_type i = 0; i < num_words(); ++i)
+ data()[i] |= x.data()[i];
+ return static_cast<Derived&>(*this);
+ }
+ // exclusive or: this = this ^ x
+ Derived& operator^=(const Derived& x) {
+ for (size_type i = 0; i < num_words(); ++i)
+ data()[i] ^= x.data()[i];
+ return static_cast<Derived&>(*this);
+ }
+ // left shift
+ Derived& operator<<=(size_type pos);
+
+ // right shift
+ Derived& operator>>=(size_type pos);
+
+ Derived& set() {
+ for (size_type i = 0; i < num_words(); ++i)
+ data()[i] = ~static_cast<word_type>(0);
+ m_sanitize_highest();
+ return static_cast<Derived&>(*this);
+ }
+
+ Derived& set(size_type pos, int val = true)
+ {
+ BOOST_ASSERT_THROW(pos < size(), std::out_of_range("boost::bitset::set(pos,value)"));
+ if (val)
+ m_get_word(pos) |= s_mask_bit(pos);
+ else
+ m_get_word(pos) &= ~s_mask_bit(pos);
+ return static_cast<Derived&>(*this);
+ }
+
+ Derived& reset() {
+ for (size_type i = 0; i < num_words(); ++i)
+ data()[i] = 0;
+ return static_cast<Derived&>(*this);
+ }
+
+ Derived& reset(size_type pos) {
+ BOOST_ASSERT_THROW(pos < size(), std::out_of_range("boost::bitset::reset(pos)"));
+ m_get_word(pos) &= ~s_mask_bit(pos);
+ return static_cast<Derived&>(*this);
+ }
+
+ // compliment
+ Derived operator~() const {
+ return Derived(static_cast<const Derived&>(*this)).flip();
+ }
+
+ Derived& flip() {
+ for (size_type i = 0; i < num_words(); ++i)
+ data()[i] = ~data()[i];
+ m_sanitize_highest();
+ return static_cast<Derived&>(*this);
+ }
+ Derived& flip(size_type pos) {
+ BOOST_ASSERT_THROW(pos < size(), std::out_of_range("boost::bitset::flip(pos)"));
+ m_get_word(pos) ^= s_mask_bit(pos);
+ return static_cast<Derived&>(*this);
+ }
+
+ // element access
+ reference operator[](size_type pos) { return reference(*this, pos); }
+ bool operator[](size_type pos) const { return test(pos); }
+
+ unsigned long to_ulong() const;
+
+ // to_string
+
+
+ size_type count() const {
+ size_type result = 0;
+ const unsigned char* byte_ptr = (const unsigned char*)data();
+ const unsigned char* end_ptr =
+ (const unsigned char*)(data() + num_words());
+ while ( byte_ptr < end_ptr ) {
+ result += bit_count<>::value[*byte_ptr];
+ byte_ptr++;
+ }
+ return result;
+ }
+
+ // size() must be provided by Derived class
+
+ bool operator==(const Derived& x) const {
+ return std::equal(data(), data() + num_words(), x.data());
+ }
+
+ bool operator!=(const Derived& x) const {
+ return ! this->operator==(x);
+ }
+
+ bool test(size_type pos) const {
+ BOOST_ASSERT_THROW(pos < size(), std::out_of_range("boost::bitset::test(pos)"));
+ return (m_get_word(pos) & s_mask_bit(pos))
+ != static_cast<word_type>(0);
+ }
+
+ bool any() const {
+ for (size_type i = 0; i < num_words(); ++i) {
+ if ( data()[i] != static_cast<word_type>(0) )
+ return true;
+ }
+ return false;
+ }
+ bool none() const {
+ return !any();
+ }
+
+ Derived operator<<(size_type pos) const
+ { return Derived(static_cast<const Derived&>(*this)) <<= pos; }
+
+ Derived operator>>(size_type pos) const
+ { return Derived(static_cast<const Derived&>(*this)) >>= pos; }
+
+ template <class CharT, class Traits, class Alloc>
+ void m_copy_from_string(const basic_string<CharT,Traits,Alloc>& s,
+ size_type pos, size_type n)
+ {
+ reset();
+ const size_type nbits = (std::min)(size(), (std::min)(n, s.size() - pos));
+ for (size_type i = 0; i < nbits; ++i) {
+ switch(s[pos + nbits - i - 1]) {
+ case '0':
+ break;
+ case '1':
+ this->set(i);
+ break;
+ default:
+ throw std::invalid_argument
+ ("boost::bitset_base::m_copy_from_string(s, pos, n)");
+ }
+ }
+ }
+
+ template <class CharT, class Traits, class Alloc>
+ void m_copy_to_string(basic_string<CharT, Traits, Alloc>& s) const
+ {
+ s.assign(size(), '0');
+
+ for (size_type i = 0; i < size(); ++i)
+ if (test(i))
+ s[size() - 1 - i] = '1';
+ }
+
+ //-----------------------------------------------------------------------
+ // Stuff not in std::bitset
+
+ // difference: this = this - x
+ Derived& operator-=(const Derived& x) {
+ for (size_type i = 0; i < num_words(); ++i)
+ data()[i] &= ~x.data()[i];
+ return static_cast<Derived&>(*this);
+ }
+
+ // this wasn't working, why?
+ int compare_3way(const Derived& x) const {
+ return std::lexicographical_compare_3way
+ (data(), data() + num_words(), x.data(), x.data() + x.num_words());
+ }
+
+ // less-than compare
+ bool operator<(const Derived& x) const {
+ return std::lexicographical_compare
+ (data(), data() + num_words(), x.data(), x.data() + x.num_words());
+ }
+
+ // find the index of the first "on" bit
+ size_type find_first() const;
+
+ // find the index of the next "on" bit after prev
+ size_type find_next(size_type prev) const;
+
+
+ size_type _Find_first() const { return find_first(); }
+
+ // find the index of the next "on" bit after prev
+ size_type _Find_next(size_type prev) const { return find_next(prev); }
+
+ // private:
+ word_type* data()
+ { return static_cast<Derived*>(this)->data(); }
+
+ const word_type* data() const
+ { return static_cast<const Derived*>(this)->data(); }
+
+ size_type num_words() const
+ { return static_cast<const Derived*>(this)->num_words(); }
+
+ size_type size() const
+ { return static_cast<const Derived*>(this)->size(); }
+ };
+
+ // 23.3.5.3 bitset operations:
+ template <class W, class S, class D>
+ inline D operator&(const bitset_base<W,S,D>& x,
+ const bitset_base<W,S,D>& y) {
+ D result(static_cast<const D&>(x));
+ result &= static_cast<const D&>(y);
+ return result;
+ }
+
+ template <class W, class S, class D>
+ inline D operator|(const bitset_base<W,S,D>& x,
+ const bitset_base<W,S,D>& y) {
+ D result(static_cast<const D&>(x));
+ result |= static_cast<const D&>(y);
+ return result;
+ }
+
+ template <class W, class S, class D>
+ inline D operator^(const bitset_base<W,S,D>& x,
+ const bitset_base<W,S,D>& y) {
+ D result(static_cast<const D&>(x));
+ result ^= static_cast<const D&>(y);
+ return result;
+ }
+
+ // this one is an extension
+ template <class W, class S, class D>
+ inline D operator-(const bitset_base<W,S,D>& x,
+ const bitset_base<W,S,D>& y) {
+ D result(static_cast<const D&>(x));
+ result -= static_cast<const D&>(y);
+ return result;
+ }
+
+ template <class W, class S, class D>
+ inline int compare_3way(const bitset_base<W,S,D>& x,
+ const bitset_base<W,S,D>& y) {
+ return std::lexicographical_compare_3way
+ (x.data(), x.data() + x.num_words(),
+ y.data(), y.data() + y.num_words());
+ }
+
+
+ template <class W, class S, class D>
+ std::istream&
+ operator>>(std::istream& is, bitset_base<W,S,D>& x) {
+ std::string tmp;
+ tmp.reserve(x.size());
+
+ // In new templatized iostreams, use istream::sentry
+ if (is.flags() & ios::skipws) {
+ char c;
+ do
+ is.get(c);
+ while (is && isspace(c));
+ if (is)
+ is.putback(c);
+ }
+
+ for (S i = 0; i < x.size(); ++i) {
+ char c;
+ is.get(c);
+
+ if (!is)
+ break;
+ else if (c != '0' && c != '1') {
+ is.putback(c);
+ break;
+ }
+ else
+ // tmp.push_back(c);
+ tmp += c;
+ }
+
+ if (tmp.empty())
+ is.clear(is.rdstate() | ios::failbit);
+ else
+ x.m_copy_from_string(tmp, static_cast<S>(0), x.size());
+
+ return is;
+ }
+
+ template <class W, class S, class D>
+ std::ostream& operator<<(std::ostream& os,
+ const bitset_base<W,S,D>& x) {
+ std::string tmp;
+ x.m_copy_to_string(tmp);
+ return os << tmp;
+ }
+
+ //=========================================================================
+ template <typename WordType = unsigned long,
+ typename SizeType = std::size_t,
+ typename Allocator = std::allocator<WordType>
+ >
+ class dyn_size_bitset
+ : public bitset_base<word_traits<WordType>, SizeType,
+ dyn_size_bitset<WordType,SizeType,Allocator> >
+ {
+ typedef dyn_size_bitset self;
+ public:
+ typedef SizeType size_type;
+ private:
+ typedef word_traits<WordType> WordTraits;
+ static const size_type word_size = WordTraits::word_size;
+
+ public:
+ dyn_size_bitset(unsigned long val,
+ size_type n,
+ const Allocator& alloc = Allocator())
+ : m_data(alloc.allocate((n + word_size - 1) / word_size)),
+ m_size(n),
+ m_num_words((n + word_size - 1) / word_size),
+ m_alloc(alloc)
+ {
+ init_from_ulong(val);
+ }
+
+ dyn_size_bitset(size_type n, // size of the set's "universe"
+ const Allocator& alloc = Allocator())
+ : m_data(alloc.allocate((n + word_size - 1) / word_size)),
+ m_size(n), m_num_words((n + word_size - 1) / word_size),
+ m_alloc(alloc)
+ { }
+
+ template<class CharT, class Traits, class Alloc>
+ explicit dyn_size_bitset
+ (const basic_string<CharT,Traits,Alloc>& s,
+ std::size_t pos = 0,
+ std::size_t n = std::size_t(basic_string<CharT,Traits,Alloc>::npos),
+ const Allocator& alloc = Allocator())
+ : m_data(alloc.allocate((n + word_size - 1) / word_size)),
+ m_size(n), m_num_words((n + word_size - 1) / word_size),
+ m_alloc(alloc)
+ {
+ BOOST_ASSERT_THROW(pos < s.size(), std::out_of_range("dyn_size_bitset::dyn_size_bitset(s,pos,n,alloc)"));
+ m_copy_from_string(s, pos, n);
+ }
+
+ template <typename InputIterator>
+ explicit dyn_size_bitset
+ (InputIterator first, InputIterator last,
+ size_type n, // size of the set's "universe"
+ const Allocator& alloc = Allocator())
+ : m_data(alloc.allocate((n + word_size - 1) / word_size)),
+ m_size(N), m_num_words((n + word_size - 1) / word_size),
+ m_alloc(alloc)
+ {
+ while (first != last)
+ this->set(*first++);
+ }
+
+ ~dyn_size_bitset() {
+ m_alloc.deallocate(m_data, m_num_words);
+ }
+
+ size_type size() const { return m_size; }
+
+ // protected:
+ size_type num_words() const { return m_num_words; }
+
+ word_type* data() { return m_data; }
+ const word_type* data() const { return m_data; }
+
+ protected:
+ word_type* m_data;
+ SizeType m_size;
+ SizeType m_num_words;
+ Allocator m_alloc;
+ };
+
+ //=========================================================================
+ template <std::size_t N, typename WordType = unsigned long,
+ typename SizeType = std::size_t>
+ class bitset
+ : public bitset_base<word_traits<WordType>, SizeType,
+ bitset<N, WordType, SizeType> >
+ {
+ typedef bitset self;
+ static const std::size_t word_size = word_traits<WordType>::word_size;
+ public:
+ // 23.3.5.1 constructors:
+ bitset() {
+#if defined(__GNUC__)
+ for (size_type i = 0; i < num_words(); ++i)
+ m_data[i] = static_cast<WordType>(0);
+#endif
+ }
+
+ bitset(unsigned long val) {
+ init_from_ulong(val);
+ }
+
+ template<class CharT, class Traits, class Alloc>
+ explicit bitset
+ (const basic_string<CharT,Traits,Alloc>& s,
+ std::size_t pos = 0,
+ std::size_t n = std::size_t(basic_string<CharT,Traits,Alloc>::npos))
+ {
+ BOOST_ASSERT_THROW
+ (pos < s.size(), std::out_of_range("bitset::bitset(s,pos,n)"));
+ m_copy_from_string(s, pos, n);
+ }
+
+ size_type size() const { return N; }
+
+ // protected:
+ size_type num_words() const { return (N + word_size - 1) / word_size; }
+
+ word_type* data() { return m_data; }
+ const word_type* data() const { return m_data; }
+ protected:
+ word_type m_data[(N + word_size - 1) / word_size];
+ };
+
+ //=========================================================================
+ struct select_static_bitset {
+ template <std::size_t N, typename WordT, typename SizeT, typename Alloc>
+ struct bind_ {
+ typedef bitset<N, WordT, SizeT> type;
+ };
+ };
+ struct select_dyn_size_bitset {
+ template <std::size_t N, typename WordT, typename SizeT, typename Alloc>
+ struct bind_ {
+ typedef dyn_size_bitset<WordT, SizeT, Alloc> type;
+ };
+ };
+
+ template <std::size_t N = 0, // 0 means use dynamic
+ typename WordType = unsigned long,
+ typename Size_type = std::size_t,
+ typename Allocator = std::allocator<WordType>
+ >
+ class bitset_generator {
+ typedef typename ct_if<N, select_dyn_size_bitset,
+ select_static_bitset>::type selector;
+ public:
+ typedef typename selector
+ ::template bind_<N, WordType, SizeType, Allocator>::type type;
+ };
+
+
+ //=========================================================================
+ // bitset_base non-inline member function implementations
+
+ template <class WordTraits, class SizeType, class Derived>
+ Derived&
+ bitset_base<WordTraits, SizeType, Derived>::
+ operator<<=(size_type shift)
+ {
+ typedef typename WordTraits::word_type word_type;
+ typedef SizeType size_type;
+ if (shift != 0) {
+ const size_type wshift = shift / WordTraits::word_size;
+ const size_type offset = shift % WordTraits::word_size;
+ const size_type sub_offset = WordTraits::word_size - offset;
+ size_type n = num_words() - 1;
+ for ( ; n > wshift; --n)
+ data()[n] = (data()[n - wshift] << offset) |
+ (data()[n - wshift - 1] >> sub_offset);
+ if (n == wshift)
+ data()[n] = data()[0] << offset;
+ for (size_type n1 = 0; n1 < n; ++n1)
+ data()[n1] = static_cast<word_type>(0);
+ }
+ m_sanitize_highest();
+ return static_cast<Derived&>(*this);
+ } // end operator<<=
+
+
+ template <class WordTraits, class SizeType, class Derived>
+ Derived&
+ bitset_base<WordTraits, SizeType, Derived>::
+ operator>>=(size_type shift)
+ {
+ typedef typename WordTraits::word_type word_type;
+ typedef SizeType size_type;
+ if (shift != 0) {
+ const size_type wshift = shift / WordTraits::word_size;
+ const size_type offset = shift % WordTraits::word_size;
+ const size_type sub_offset = WordTraits::word_size - offset;
+ const size_type limit = num_words() - wshift - 1;
+ size_type n = 0;
+ for ( ; n < limit; ++n)
+ data()[n] = (data()[n + wshift] >> offset) |
+ (data()[n + wshift + 1] << sub_offset);
+ data()[limit] = data()[num_words()-1] >> offset;
+ for (size_type n1 = limit + 1; n1 < num_words(); ++n1)
+ data()[n1] = static_cast<word_type>(0);
+ }
+ m_sanitize_highest();
+ return static_cast<Derived&>(*this);
+ } // end operator>>=
+
+
+ template <class WordTraits, class SizeType, class Derived>
+ unsigned long bitset_base<WordTraits, SizeType, Derived>::
+ to_ulong() const
+ {
+ typedef typename WordTraits::word_type word_type;
+ typedef SizeType size_type;
+ const std::overflow_error
+ overflow("boost::bit_set::operator unsigned long()");
+
+ if (sizeof(word_type) >= sizeof(unsigned long)) {
+ for (size_type i = 1; i < num_words(); ++i)
+ BOOST_ASSERT_THROW(! data()[i], overflow);
+
+ const word_type mask
+ = static_cast<word_type>(static_cast<unsigned long>(-1));
+ BOOST_ASSERT_THROW(! (data()[0] & ~mask), overflow);
+
+ return static_cast<unsigned long>(data()[0] & mask);
+ }
+ else { // sizeof(word_type) < sizeof(unsigned long).
+ const size_type nwords =
+ (sizeof(unsigned long) + sizeof(word_type) - 1) / sizeof(word_type);
+
+ size_type min_nwords = nwords;
+ if (num_words() > nwords) {
+ for (size_type i = nwords; i < num_words(); ++i)
+ BOOST_ASSERT_THROW(!data()[i], overflow);
+ }
+ else
+ min_nwords = num_words();
+
+ // If unsigned long is 8 bytes and word_type is 6 bytes, then
+ // an unsigned long consists of all of one word plus 2 bytes
+ // from another word.
+ const size_type part = sizeof(unsigned long) % sizeof(word_type);
+
+#if 0
+ // bug in here?
+ // >> to far?
+ BOOST_ASSERT_THROW((part != 0
+ && nwords <= num_words()
+ && (data()[min_nwords - 1] >>
+ ((sizeof(word_type) - part) * CHAR_BIT)) != 0),
+ overflow);
+#endif
+
+ unsigned long result = 0;
+ for (size_type i = 0; i < min_nwords; ++i) {
+ result |= static_cast<unsigned long>(
+ data()[i]) << (i * sizeof(word_type) * CHAR_BIT);
+ }
+ return result;
+ }
+ }// end operator unsigned long()
+
+
+ template <class WordTraits, class SizeType, class Derived>
+ SizeType bitset_base<WordTraits,SizeType,Derived>::
+ find_first() const
+ {
+ SizeType not_found = size();
+ for (size_type i = 0; i < num_words(); i++ ) {
+ word_type thisword = data()[i];
+ if ( thisword != static_cast<word_type>(0) ) {
+ // find byte within word
+ for ( std::size_t j = 0; j < sizeof(word_type); j++ ) {
+ unsigned char this_byte
+ = static_cast<unsigned char>(thisword & (~(unsigned char)0));
+ if ( this_byte )
+ return i * WordTraits::word_size + j * CHAR_BIT +
+ first_bit_location<>::value[this_byte];
+
+ thisword >>= CHAR_BIT;
+ }
+ }
+ }
+ // not found, so return an indication of failure.
+ return not_found;
+ }
+
+ template <class WordTraits, class SizeType, class Derived>
+ SizeType bitset_base<WordTraits, SizeType, Derived>::
+ bitset_base<WordTraits,SizeType,Derived>::
+ find_next(size_type prev) const
+ {
+ SizeType not_found = size();
+ // make bound inclusive
+ ++prev;
+
+ // check out of bounds
+ if ( prev >= num_words() * WordTraits::word_size )
+ return not_found;
+
+ // search first word
+ size_type i = s_which_word(prev);
+ word_type thisword = data()[i];
+
+ // mask off bits below bound
+ thisword &= (~static_cast<word_type>(0)) << s_which_bit(prev);
+
+ if ( thisword != static_cast<word_type>(0) ) {
+ // find byte within word
+ // get first byte into place
+ thisword >>= s_which_byte(prev) * CHAR_BIT;
+ for ( size_type j = s_which_byte(prev); j < sizeof(word_type); j++ ) {
+ unsigned char this_byte
+ = static_cast<unsigned char>(thisword & (~(unsigned char)0));
+ if ( this_byte )
+ return i * WordTraits::word_size + j * CHAR_BIT +
+ first_bit_location<>::value[this_byte];
+
+ thisword >>= CHAR_BIT;
+ }
+ }
+
+ // check subsequent words
+ i++;
+ for ( ; i < num_words(); i++ ) {
+ word_type thisword = data()[i];
+ if ( thisword != static_cast<word_type>(0) ) {
+ // find byte within word
+ for ( size_type j = 0; j < sizeof(word_type); j++ ) {
+ unsigned char this_byte
+ = static_cast<unsigned char>(thisword & (~(unsigned char)0));
+ if ( this_byte )
+ return i * WordTraits::word_size + j * CHAR_BIT +
+ first_bit_location<>::value[this_byte];
+
+ thisword >>= CHAR_BIT;
+ }
+ }
+ }
+
+ // not found, so return an indication of failure.
+ return not_found;
+ } // end find_next
+
+
+ template <bool dummy>
+ unsigned char bit_count<dummy>::value[] = {
+ 0, /* 0 */ 1, /* 1 */ 1, /* 2 */ 2, /* 3 */ 1, /* 4 */
+ 2, /* 5 */ 2, /* 6 */ 3, /* 7 */ 1, /* 8 */ 2, /* 9 */
+ 2, /* 10 */ 3, /* 11 */ 2, /* 12 */ 3, /* 13 */ 3, /* 14 */
+ 4, /* 15 */ 1, /* 16 */ 2, /* 17 */ 2, /* 18 */ 3, /* 19 */
+ 2, /* 20 */ 3, /* 21 */ 3, /* 22 */ 4, /* 23 */ 2, /* 24 */
+ 3, /* 25 */ 3, /* 26 */ 4, /* 27 */ 3, /* 28 */ 4, /* 29 */
+ 4, /* 30 */ 5, /* 31 */ 1, /* 32 */ 2, /* 33 */ 2, /* 34 */
+ 3, /* 35 */ 2, /* 36 */ 3, /* 37 */ 3, /* 38 */ 4, /* 39 */
+ 2, /* 40 */ 3, /* 41 */ 3, /* 42 */ 4, /* 43 */ 3, /* 44 */
+ 4, /* 45 */ 4, /* 46 */ 5, /* 47 */ 2, /* 48 */ 3, /* 49 */
+ 3, /* 50 */ 4, /* 51 */ 3, /* 52 */ 4, /* 53 */ 4, /* 54 */
+ 5, /* 55 */ 3, /* 56 */ 4, /* 57 */ 4, /* 58 */ 5, /* 59 */
+ 4, /* 60 */ 5, /* 61 */ 5, /* 62 */ 6, /* 63 */ 1, /* 64 */
+ 2, /* 65 */ 2, /* 66 */ 3, /* 67 */ 2, /* 68 */ 3, /* 69 */
+ 3, /* 70 */ 4, /* 71 */ 2, /* 72 */ 3, /* 73 */ 3, /* 74 */
+ 4, /* 75 */ 3, /* 76 */ 4, /* 77 */ 4, /* 78 */ 5, /* 79 */
+ 2, /* 80 */ 3, /* 81 */ 3, /* 82 */ 4, /* 83 */ 3, /* 84 */
+ 4, /* 85 */ 4, /* 86 */ 5, /* 87 */ 3, /* 88 */ 4, /* 89 */
+ 4, /* 90 */ 5, /* 91 */ 4, /* 92 */ 5, /* 93 */ 5, /* 94 */
+ 6, /* 95 */ 2, /* 96 */ 3, /* 97 */ 3, /* 98 */ 4, /* 99 */
+ 3, /* 100 */ 4, /* 101 */ 4, /* 102 */ 5, /* 103 */ 3, /* 104 */
+ 4, /* 105 */ 4, /* 106 */ 5, /* 107 */ 4, /* 108 */ 5, /* 109 */
+ 5, /* 110 */ 6, /* 111 */ 3, /* 112 */ 4, /* 113 */ 4, /* 114 */
+ 5, /* 115 */ 4, /* 116 */ 5, /* 117 */ 5, /* 118 */ 6, /* 119 */
+ 4, /* 120 */ 5, /* 121 */ 5, /* 122 */ 6, /* 123 */ 5, /* 124 */
+ 6, /* 125 */ 6, /* 126 */ 7, /* 127 */ 1, /* 128 */ 2, /* 129 */
+ 2, /* 130 */ 3, /* 131 */ 2, /* 132 */ 3, /* 133 */ 3, /* 134 */
+ 4, /* 135 */ 2, /* 136 */ 3, /* 137 */ 3, /* 138 */ 4, /* 139 */
+ 3, /* 140 */ 4, /* 141 */ 4, /* 142 */ 5, /* 143 */ 2, /* 144 */
+ 3, /* 145 */ 3, /* 146 */ 4, /* 147 */ 3, /* 148 */ 4, /* 149 */
+ 4, /* 150 */ 5, /* 151 */ 3, /* 152 */ 4, /* 153 */ 4, /* 154 */
+ 5, /* 155 */ 4, /* 156 */ 5, /* 157 */ 5, /* 158 */ 6, /* 159 */
+ 2, /* 160 */ 3, /* 161 */ 3, /* 162 */ 4, /* 163 */ 3, /* 164 */
+ 4, /* 165 */ 4, /* 166 */ 5, /* 167 */ 3, /* 168 */ 4, /* 169 */
+ 4, /* 170 */ 5, /* 171 */ 4, /* 172 */ 5, /* 173 */ 5, /* 174 */
+ 6, /* 175 */ 3, /* 176 */ 4, /* 177 */ 4, /* 178 */ 5, /* 179 */
+ 4, /* 180 */ 5, /* 181 */ 5, /* 182 */ 6, /* 183 */ 4, /* 184 */
+ 5, /* 185 */ 5, /* 186 */ 6, /* 187 */ 5, /* 188 */ 6, /* 189 */
+ 6, /* 190 */ 7, /* 191 */ 2, /* 192 */ 3, /* 193 */ 3, /* 194 */
+ 4, /* 195 */ 3, /* 196 */ 4, /* 197 */ 4, /* 198 */ 5, /* 199 */
+ 3, /* 200 */ 4, /* 201 */ 4, /* 202 */ 5, /* 203 */ 4, /* 204 */
+ 5, /* 205 */ 5, /* 206 */ 6, /* 207 */ 3, /* 208 */ 4, /* 209 */
+ 4, /* 210 */ 5, /* 211 */ 4, /* 212 */ 5, /* 213 */ 5, /* 214 */
+ 6, /* 215 */ 4, /* 216 */ 5, /* 217 */ 5, /* 218 */ 6, /* 219 */
+ 5, /* 220 */ 6, /* 221 */ 6, /* 222 */ 7, /* 223 */ 3, /* 224 */
+ 4, /* 225 */ 4, /* 226 */ 5, /* 227 */ 4, /* 228 */ 5, /* 229 */
+ 5, /* 230 */ 6, /* 231 */ 4, /* 232 */ 5, /* 233 */ 5, /* 234 */
+ 6, /* 235 */ 5, /* 236 */ 6, /* 237 */ 6, /* 238 */ 7, /* 239 */
+ 4, /* 240 */ 5, /* 241 */ 5, /* 242 */ 6, /* 243 */ 5, /* 244 */
+ 6, /* 245 */ 6, /* 246 */ 7, /* 247 */ 5, /* 248 */ 6, /* 249 */
+ 6, /* 250 */ 7, /* 251 */ 6, /* 252 */ 7, /* 253 */ 7, /* 254 */
+ 8 /* 255 */
+ }; // end _Bit_count
+
+ template <bool dummy>
+ unsigned char first_bit_location<dummy>::value[] = {
+ 0, /* 0 */ 0, /* 1 */ 1, /* 2 */ 0, /* 3 */ 2, /* 4 */
+ 0, /* 5 */ 1, /* 6 */ 0, /* 7 */ 3, /* 8 */ 0, /* 9 */
+ 1, /* 10 */ 0, /* 11 */ 2, /* 12 */ 0, /* 13 */ 1, /* 14 */
+ 0, /* 15 */ 4, /* 16 */ 0, /* 17 */ 1, /* 18 */ 0, /* 19 */
+ 2, /* 20 */ 0, /* 21 */ 1, /* 22 */ 0, /* 23 */ 3, /* 24 */
+ 0, /* 25 */ 1, /* 26 */ 0, /* 27 */ 2, /* 28 */ 0, /* 29 */
+ 1, /* 30 */ 0, /* 31 */ 5, /* 32 */ 0, /* 33 */ 1, /* 34 */
+ 0, /* 35 */ 2, /* 36 */ 0, /* 37 */ 1, /* 38 */ 0, /* 39 */
+ 3, /* 40 */ 0, /* 41 */ 1, /* 42 */ 0, /* 43 */ 2, /* 44 */
+ 0, /* 45 */ 1, /* 46 */ 0, /* 47 */ 4, /* 48 */ 0, /* 49 */
+ 1, /* 50 */ 0, /* 51 */ 2, /* 52 */ 0, /* 53 */ 1, /* 54 */
+ 0, /* 55 */ 3, /* 56 */ 0, /* 57 */ 1, /* 58 */ 0, /* 59 */
+ 2, /* 60 */ 0, /* 61 */ 1, /* 62 */ 0, /* 63 */ 6, /* 64 */
+ 0, /* 65 */ 1, /* 66 */ 0, /* 67 */ 2, /* 68 */ 0, /* 69 */
+ 1, /* 70 */ 0, /* 71 */ 3, /* 72 */ 0, /* 73 */ 1, /* 74 */
+ 0, /* 75 */ 2, /* 76 */ 0, /* 77 */ 1, /* 78 */ 0, /* 79 */
+ 4, /* 80 */ 0, /* 81 */ 1, /* 82 */ 0, /* 83 */ 2, /* 84 */
+ 0, /* 85 */ 1, /* 86 */ 0, /* 87 */ 3, /* 88 */ 0, /* 89 */
+ 1, /* 90 */ 0, /* 91 */ 2, /* 92 */ 0, /* 93 */ 1, /* 94 */
+ 0, /* 95 */ 5, /* 96 */ 0, /* 97 */ 1, /* 98 */ 0, /* 99 */
+ 2, /* 100 */ 0, /* 101 */ 1, /* 102 */ 0, /* 103 */ 3, /* 104 */
+ 0, /* 105 */ 1, /* 106 */ 0, /* 107 */ 2, /* 108 */ 0, /* 109 */
+ 1, /* 110 */ 0, /* 111 */ 4, /* 112 */ 0, /* 113 */ 1, /* 114 */
+ 0, /* 115 */ 2, /* 116 */ 0, /* 117 */ 1, /* 118 */ 0, /* 119 */
+ 3, /* 120 */ 0, /* 121 */ 1, /* 122 */ 0, /* 123 */ 2, /* 124 */
+ 0, /* 125 */ 1, /* 126 */ 0, /* 127 */ 7, /* 128 */ 0, /* 129 */
+ 1, /* 130 */ 0, /* 131 */ 2, /* 132 */ 0, /* 133 */ 1, /* 134 */
+ 0, /* 135 */ 3, /* 136 */ 0, /* 137 */ 1, /* 138 */ 0, /* 139 */
+ 2, /* 140 */ 0, /* 141 */ 1, /* 142 */ 0, /* 143 */ 4, /* 144 */
+ 0, /* 145 */ 1, /* 146 */ 0, /* 147 */ 2, /* 148 */ 0, /* 149 */
+ 1, /* 150 */ 0, /* 151 */ 3, /* 152 */ 0, /* 153 */ 1, /* 154 */
+ 0, /* 155 */ 2, /* 156 */ 0, /* 157 */ 1, /* 158 */ 0, /* 159 */
+ 5, /* 160 */ 0, /* 161 */ 1, /* 162 */ 0, /* 163 */ 2, /* 164 */
+ 0, /* 165 */ 1, /* 166 */ 0, /* 167 */ 3, /* 168 */ 0, /* 169 */
+ 1, /* 170 */ 0, /* 171 */ 2, /* 172 */ 0, /* 173 */ 1, /* 174 */
+ 0, /* 175 */ 4, /* 176 */ 0, /* 177 */ 1, /* 178 */ 0, /* 179 */
+ 2, /* 180 */ 0, /* 181 */ 1, /* 182 */ 0, /* 183 */ 3, /* 184 */
+ 0, /* 185 */ 1, /* 186 */ 0, /* 187 */ 2, /* 188 */ 0, /* 189 */
+ 1, /* 190 */ 0, /* 191 */ 6, /* 192 */ 0, /* 193 */ 1, /* 194 */
+ 0, /* 195 */ 2, /* 196 */ 0, /* 197 */ 1, /* 198 */ 0, /* 199 */
+ 3, /* 200 */ 0, /* 201 */ 1, /* 202 */ 0, /* 203 */ 2, /* 204 */
+ 0, /* 205 */ 1, /* 206 */ 0, /* 207 */ 4, /* 208 */ 0, /* 209 */
+ 1, /* 210 */ 0, /* 211 */ 2, /* 212 */ 0, /* 213 */ 1, /* 214 */
+ 0, /* 215 */ 3, /* 216 */ 0, /* 217 */ 1, /* 218 */ 0, /* 219 */
+ 2, /* 220 */ 0, /* 221 */ 1, /* 222 */ 0, /* 223 */ 5, /* 224 */
+ 0, /* 225 */ 1, /* 226 */ 0, /* 227 */ 2, /* 228 */ 0, /* 229 */
+ 1, /* 230 */ 0, /* 231 */ 3, /* 232 */ 0, /* 233 */ 1, /* 234 */
+ 0, /* 235 */ 2, /* 236 */ 0, /* 237 */ 1, /* 238 */ 0, /* 239 */
+ 4, /* 240 */ 0, /* 241 */ 1, /* 242 */ 0, /* 243 */ 2, /* 244 */
+ 0, /* 245 */ 1, /* 246 */ 0, /* 247 */ 3, /* 248 */ 0, /* 249 */
+ 1, /* 250 */ 0, /* 251 */ 2, /* 252 */ 0, /* 253 */ 1, /* 254 */
+ 0, /* 255 */
+ }; // end _First_one
+
+ } // namespace detail
+
+} // namespace boost
diff --git a/boost/boost/graph/detail/bitset_adaptor.hpp b/boost/boost/graph/detail/bitset_adaptor.hpp
new file mode 100644
index 00000000000..d301b7d623d
--- /dev/null
+++ b/boost/boost/graph/detail/bitset_adaptor.hpp
@@ -0,0 +1,90 @@
+//=======================================================================
+// Copyright 2002 Indiana University.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// 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_BITSET_ADAPTOR_HPP
+#define BOOST_BITSET_ADAPTOR_HPP
+
+ template <class T, class Derived>
+ struct bitset_adaptor {
+ Derived& derived() { return static_cast<Derived&>(*this); }
+ const Derived& derived() const {
+ return static_cast<const Derived&>(*this);
+ }
+ };
+
+ template <class T, class D, class V>
+ bool set_contains(const bitset_adaptor<T,D>& s, const V& x) {
+ return s.derived().test(x);
+ }
+
+ template <class T, class D>
+ bool set_equal(const bitset_adaptor<T,D>& x,
+ const bitset_adaptor<T,D>& y) {
+ return x.derived() == y.derived();
+ }
+
+ template <class T, class D>
+ int set_lex_order(const bitset_adaptor<T,D>& x,
+ const bitset_adaptor<T,D>& y) {
+ return compare_3way(x.derived(), y.derived());
+ }
+
+ template <class T, class D>
+ void set_clear(bitset_adaptor<T,D>& x) {
+ x.derived().reset();
+ }
+
+ template <class T, class D>
+ bool set_empty(const bitset_adaptor<T,D>& x) {
+ return x.derived().none();
+ }
+
+ template <class T, class D, class V>
+ void set_insert(bitset_adaptor<T,D>& x, const V& a) {
+ x.derived().set(a);
+ }
+
+ template <class T, class D, class V>
+ void set_remove(bitset_adaptor<T,D>& x, const V& a) {
+ x.derived().set(a, false);
+ }
+
+ template <class T, class D>
+ void set_intersect(const bitset_adaptor<T,D>& x,
+ const bitset_adaptor<T,D>& y,
+ bitset_adaptor<T,D>& z)
+ {
+ z.derived() = x.derived() & y.derived();
+ }
+
+ template <class T, class D>
+ void set_union(const bitset_adaptor<T,D>& x,
+ const bitset_adaptor<T,D>& y,
+ bitset_adaptor<T,D>& z)
+ {
+ z.derived() = x.derived() | y.derived();
+ }
+
+ template <class T, class D>
+ void set_difference(const bitset_adaptor<T,D>& x,
+ const bitset_adaptor<T,D>& y,
+ bitset_adaptor<T,D>& z)
+ {
+ z.derived() = x.derived() - y.derived();
+ }
+
+ template <class T, class D>
+ void set_compliment(const bitset_adaptor<T,D>& x,
+ bitset_adaptor<T,D>& z)
+ {
+ z.derived() = x.derived();
+ z.derived().flip();
+ }
+
+#endif // BOOST_BITSET_ADAPTOR_HPP
diff --git a/boost/boost/graph/detail/connected_components.hpp b/boost/boost/graph/detail/connected_components.hpp
new file mode 100644
index 00000000000..0af77460121
--- /dev/null
+++ b/boost/boost/graph/detail/connected_components.hpp
@@ -0,0 +1,208 @@
+//=======================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// 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_GRAPH_DETAIL_CONNECTED_COMPONENTS_HPP
+#define BOOST_GRAPH_DETAIL_CONNECTED_COMPONENTS_HPP
+
+#if defined(__sgi) && !defined(__GNUC__)
+#pragma set woff 1234
+#endif
+
+#include <boost/operators.hpp>
+
+namespace boost {
+
+ namespace detail {
+
+ //=========================================================================
+ // Implementation details of connected_components
+
+ // This is used both in the connected_components algorithm and in
+ // the kosaraju strong components algorithm during the second DFS
+ // traversal.
+ template <class ComponentsPA, class DFSVisitor>
+ class components_recorder : public DFSVisitor
+ {
+ typedef typename property_traits<ComponentsPA>::value_type comp_type;
+ public:
+ components_recorder(ComponentsPA c,
+ comp_type& c_count,
+ DFSVisitor v)
+ : DFSVisitor(v), m_component(c), m_count(c_count) {}
+
+ template <class Vertex, class Graph>
+ void start_vertex(Vertex u, Graph& g) {
+ ++m_count;
+ DFSVisitor::start_vertex(u, g);
+ }
+ template <class Vertex, class Graph>
+ void discover_vertex(Vertex u, Graph& g) {
+ put(m_component, u, m_count);
+ DFSVisitor::discover_vertex(u, g);
+ }
+ protected:
+ ComponentsPA m_component;
+ comp_type& m_count;
+ };
+
+ template <class DiscoverTimeMap, class FinishTimeMap, class TimeT,
+ class DFSVisitor>
+ class time_recorder : public DFSVisitor
+ {
+ public:
+ time_recorder(DiscoverTimeMap d, FinishTimeMap f, TimeT& t, DFSVisitor v)
+ : DFSVisitor(v), m_discover_time(d), m_finish_time(f), m_t(t) {}
+
+ template <class Vertex, class Graph>
+ void discover_vertex(Vertex u, Graph& g) {
+ put(m_discover_time, u, ++m_t);
+ DFSVisitor::discover_vertex(u, g);
+ }
+ template <class Vertex, class Graph>
+ void finish_vertex(Vertex u, Graph& g) {
+ put(m_finish_time, u, ++m_t);
+ DFSVisitor::discover_vertex(u, g);
+ }
+ protected:
+ DiscoverTimeMap m_discover_time;
+ FinishTimeMap m_finish_time;
+ TimeT m_t;
+ };
+ template <class DiscoverTimeMap, class FinishTimeMap, class TimeT,
+ class DFSVisitor>
+ time_recorder<DiscoverTimeMap, FinishTimeMap, TimeT, DFSVisitor>
+ record_times(DiscoverTimeMap d, FinishTimeMap f, TimeT& t, DFSVisitor vis)
+ {
+ return time_recorder<DiscoverTimeMap, FinishTimeMap, TimeT, DFSVisitor>
+ (d, f, t, vis);
+ }
+
+ //=========================================================================
+ // Implementation detail of dynamic_components
+
+
+ //-------------------------------------------------------------------------
+ // Helper functions for the component_index class
+
+ // Record the representative vertices in the header array.
+ // Representative vertices now point to the component number.
+
+ template <class Parent, class OutputIterator, class Integer>
+ inline void
+ build_components_header(Parent p,
+ OutputIterator header,
+ Integer num_nodes)
+ {
+ Parent component = p;
+ Integer component_num = 0;
+ for (Integer v = 0; v != num_nodes; ++v)
+ if (p[v] == v) {
+ *header++ = v;
+ component[v] = component_num++;
+ }
+ }
+
+
+ // Pushes x onto the front of the list. The list is represented in
+ // an array.
+ template <class Next, class T, class V>
+ inline void push_front(Next next, T& head, V x)
+ {
+ T tmp = head;
+ head = x;
+ next[x] = tmp;
+ }
+
+
+ // Create a linked list of the vertices in each component
+ // by reusing the representative array.
+ template <class Parent1, class Parent2,
+ class Integer>
+ void
+ link_components(Parent1 component, Parent2 header,
+ Integer num_nodes, Integer num_components)
+ {
+ // Make the non-representative vertices point to their component
+ Parent1 representative = component;
+ for (Integer v = 0; v != num_nodes; ++v)
+ if (component[v] >= num_components || header[component[v]] != v)
+ component[v] = component[representative[v]];
+
+ // initialize the "head" of the lists to "NULL"
+ std::fill_n(header, num_components, num_nodes);
+
+ // Add each vertex to the linked list for its component
+ Parent1 next = component;
+ for (Integer k = 0; k != num_nodes; ++k)
+ push_front(next, header[component[k]], k);
+ }
+
+
+
+ template <class IndexContainer, class HeaderContainer>
+ void
+ construct_component_index(IndexContainer& index, HeaderContainer& header)
+ {
+ build_components_header(index.begin(),
+ std::back_inserter(header),
+ index.end() - index.begin());
+
+ link_components(index.begin(), header.begin(),
+ index.end() - index.begin(),
+ header.end() - header.begin());
+ }
+
+
+
+ template <class IndexIterator, class Integer, class Distance>
+ class component_iterator
+ : boost::forward_iterator_helper<
+ component_iterator<IndexIterator,Integer,Distance>,
+ Integer, Distance,Integer*, Integer&>
+ {
+ public:
+ typedef component_iterator self;
+
+ IndexIterator next;
+ Integer node;
+
+ typedef std::forward_iterator_tag iterator_category;
+ typedef Integer value_type;
+ typedef Integer& reference;
+ typedef Integer* pointer;
+ typedef Distance difference_type;
+
+ component_iterator() {}
+ component_iterator(IndexIterator x, Integer i)
+ : next(x), node(i) {}
+ Integer operator*() const {
+ return node;
+ }
+ self& operator++() {
+ node = next[node];
+ return *this;
+ }
+ };
+
+ template <class IndexIterator, class Integer, class Distance>
+ inline bool
+ operator==(const component_iterator<IndexIterator, Integer, Distance>& x,
+ const component_iterator<IndexIterator, Integer, Distance>& y)
+ {
+ return x.node == y.node;
+ }
+
+ } // namespace detail
+
+} // namespace detail
+
+#if defined(__sgi) && !defined(__GNUC__)
+#pragma reset woff 1234
+#endif
+
+#endif
diff --git a/boost/boost/graph/detail/edge.hpp b/boost/boost/graph/detail/edge.hpp
new file mode 100644
index 00000000000..8ab375f064c
--- /dev/null
+++ b/boost/boost/graph/detail/edge.hpp
@@ -0,0 +1,94 @@
+//
+//=======================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// 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_GRAPH_DETAIL_EDGE_HPP
+#define BOOST_GRAPH_DETAIL_EDGE_HPP
+
+#if __GNUC__ < 3
+#include <iostream>
+#else
+#include <iosfwd>
+#endif
+
+namespace boost {
+
+ namespace detail {
+
+ template <typename Directed, typename Vertex>
+ struct edge_base
+ {
+ inline edge_base() {}
+ inline edge_base(Vertex s, Vertex d)
+ : m_source(s), m_target(d) { }
+ Vertex m_source;
+ Vertex m_target;
+ };
+
+ template <typename Directed, typename Vertex>
+ class edge_desc_impl : public edge_base<Directed,Vertex> {
+ typedef edge_desc_impl self;
+ typedef edge_base<Directed,Vertex> Base;
+ public:
+ typedef void property_type;
+
+ inline edge_desc_impl() : m_eproperty(0) {}
+
+ inline edge_desc_impl(Vertex s, Vertex d, const property_type* eplug)
+ : Base(s,d), m_eproperty(const_cast<property_type*>(eplug)) { }
+
+ property_type* get_property() { return m_eproperty; }
+ const property_type* get_property() const { return m_eproperty; }
+
+ // protected:
+ property_type* m_eproperty;
+ };
+
+ template <class D, class V>
+ inline bool
+ operator==(const detail::edge_desc_impl<D,V>& a,
+ const detail::edge_desc_impl<D,V>& b)
+ {
+ return a.get_property() == b.get_property();
+ }
+ template <class D, class V>
+ inline bool
+ operator!=(const detail::edge_desc_impl<D,V>& a,
+ const detail::edge_desc_impl<D,V>& b)
+ {
+ return ! (a.get_property() == b.get_property());
+ }
+
+ } //namespace detail
+
+} // namespace boost
+
+namespace std {
+
+#if __GNUC__ < 3
+ template <class D, class V>
+ std::ostream&
+ operator<<(std::ostream& os, const boost::detail::edge_desc_impl<D,V>& e)
+ {
+ return os << "(" << e.m_source << "," << e.m_target << ")";
+ }
+#else
+ template <class Char, class Traits, class D, class V>
+ std::basic_ostream<Char, Traits>&
+ operator<<(std::basic_ostream<Char, Traits>& os,
+ const boost::detail::edge_desc_impl<D,V>& e)
+ {
+ return os << "(" << e.m_source << "," << e.m_target << ")";
+ }
+#endif
+
+}
+
+
+#endif // BOOST_GRAPH_DETAIL_DETAIL_EDGE_HPP
diff --git a/boost/boost/graph/detail/incidence_iterator.hpp b/boost/boost/graph/detail/incidence_iterator.hpp
new file mode 100644
index 00000000000..836ad152667
--- /dev/null
+++ b/boost/boost/graph/detail/incidence_iterator.hpp
@@ -0,0 +1,79 @@
+//
+//=======================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// 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_GRAPH_DETAIL_INCIDENCE_ITERATOR_HPP
+#define BOOST_GRAPH_DETAIL_INCIDENCE_ITERATOR_HPP
+
+#include <utility>
+#include <iterator>
+
+// OBSOLETE
+
+namespace boost {
+
+ namespace detail {
+ // EdgeDir tags
+ struct in_edge_tag { };
+ struct out_edge_tag { };
+
+ template <class Vertex, class Edge, class Iterator1D, class EdgeDir>
+ struct bidir_incidence_iterator {
+ typedef bidir_incidence_iterator self;
+ typedef Edge edge_type;
+ typedef typename Edge::property_type EdgeProperty;
+ public:
+ typedef int difference_type;
+ typedef std::forward_iterator_tag iterator_category;
+ typedef edge_type reference;
+ typedef edge_type value_type;
+ typedef value_type* pointer;
+ inline bidir_incidence_iterator() {}
+ inline bidir_incidence_iterator(Iterator1D ii, Vertex src)
+ : i(ii), _src(src) { }
+
+ inline self& operator++() { ++i; return *this; }
+ inline self operator++(int) { self tmp = *this; ++(*this); return tmp; }
+
+ inline reference operator*() const {
+ return deref_helper(EdgeDir());
+ }
+ inline self* operator->() { return this; }
+
+ Iterator1D& iter() { return i; }
+ const Iterator1D& iter() const { return i; }
+
+ Iterator1D i;
+ Vertex _src;
+ protected:
+ inline reference deref_helper(out_edge_tag) const {
+ return edge_type( _src, (*i).get_target(), &(*i).get_property() );
+ }
+ inline reference deref_helper(in_edge_tag) const {
+ return edge_type((*i).get_target(), _src, &(*i).get_property() );
+ }
+ };
+
+ template <class V, class E, class Iter, class Dir>
+ inline bool operator==(const bidir_incidence_iterator<V,E,Iter,Dir>& x,
+ const bidir_incidence_iterator<V,E,Iter,Dir>& y)
+ {
+ return x.i == y.i;
+ }
+ template <class V, class E, class Iter, class Dir>
+ inline bool operator!=(const bidir_incidence_iterator<V,E,Iter,Dir>& x,
+ const bidir_incidence_iterator<V,E,Iter,Dir>& y)
+ {
+ return x.i != y.i;
+ }
+
+
+ }
+}
+#endif
diff --git a/boost/boost/graph/detail/incremental_components.hpp b/boost/boost/graph/detail/incremental_components.hpp
new file mode 100644
index 00000000000..cf08bea0912
--- /dev/null
+++ b/boost/boost/graph/detail/incremental_components.hpp
@@ -0,0 +1,141 @@
+//=======================================================================
+// Copyright 2002 Indiana University.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// 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_GRAPH_DETAIL_INCREMENTAL_COMPONENTS_HPP
+#define BOOST_GRAPH_DETAIL_INCREMENTAL_COMPONENTS_HPP
+
+#include <boost/operators.hpp>
+#include <boost/pending/disjoint_sets.hpp>
+
+namespace boost {
+
+ namespace detail {
+
+ //=========================================================================
+ // Implementation detail of incremental_components
+
+
+ //-------------------------------------------------------------------------
+ // Helper functions for the component_index class
+
+ // Record the representative vertices in the header array.
+ // Representative vertices now point to the component number.
+
+ template <class Parent, class OutputIterator, class Integer>
+ inline void
+ build_components_header(Parent p,
+ OutputIterator header,
+ Integer num_nodes)
+ {
+ Parent component = p;
+ Integer component_num = 0;
+ for (Integer v = 0; v != num_nodes; ++v)
+ if (p[v] == v) {
+ *header++ = v;
+ component[v] = component_num++;
+ }
+ }
+
+
+ // Pushes x onto the front of the list. The list is represented in
+ // an array.
+ template <class Next, class T, class V>
+ inline void array_push_front(Next next, T& head, V x)
+ {
+ T tmp = head;
+ head = x;
+ next[x] = tmp;
+ }
+
+
+ // Create a linked list of the vertices in each component
+ // by reusing the representative array.
+ template <class Parent1, class Parent2,
+ class Integer>
+ void
+ link_components(Parent1 component, Parent2 header,
+ Integer num_nodes, Integer num_components)
+ {
+ // Make the non-representative vertices point to their component
+ Parent1 representative = component;
+ for (Integer v = 0; v != num_nodes; ++v)
+ if (component[v] >= num_components
+ || header[component[v]] != v)
+ component[v] = component[representative[v]];
+
+ // initialize the "head" of the lists to "NULL"
+ std::fill_n(header, num_components, num_nodes);
+
+ // Add each vertex to the linked list for its component
+ Parent1 next = component;
+ for (Integer k = 0; k != num_nodes; ++k)
+ array_push_front(next, header[component[k]], k);
+ }
+
+
+
+ template <class IndexContainer, class HeaderContainer>
+ void
+ construct_component_index(IndexContainer& index, HeaderContainer& header)
+ {
+ typedef typename IndexContainer::value_type Integer;
+ build_components_header(index.begin(),
+ std::back_inserter(header),
+ Integer(index.end() - index.begin()));
+
+ link_components(index.begin(), header.begin(),
+ Integer(index.end() - index.begin()),
+ Integer(header.end() - header.begin()));
+ }
+
+
+
+ template <class IndexIterator, class Integer, class Distance>
+ class component_iterator
+ : boost::forward_iterator_helper<
+ component_iterator<IndexIterator,Integer,Distance>,
+ Integer, Distance,Integer*, Integer&>
+ {
+ public:
+ typedef component_iterator self;
+
+ IndexIterator next;
+ Integer node;
+
+ typedef std::forward_iterator_tag iterator_category;
+ typedef Integer value_type;
+ typedef Integer& reference;
+ typedef Integer* pointer;
+ typedef Distance difference_type;
+
+ component_iterator() {}
+ component_iterator(IndexIterator x, Integer i)
+ : next(x), node(i) {}
+ Integer operator*() const {
+ return node;
+ }
+ self& operator++() {
+ node = next[node];
+ return *this;
+ }
+ };
+
+ template <class IndexIterator, class Integer, class Distance>
+ inline bool
+ operator==(const component_iterator<IndexIterator, Integer, Distance>& x,
+ const component_iterator<IndexIterator, Integer, Distance>& y)
+ {
+ return x.node == y.node;
+ }
+
+ } // namespace detail
+
+} // namespace detail
+
+#endif // BOOST_GRAPH_DETAIL_INCREMENTAL_COMPONENTS_HPP
diff --git a/boost/boost/graph/detail/indexed_properties.hpp b/boost/boost/graph/detail/indexed_properties.hpp
new file mode 100644
index 00000000000..e5fdb71c5d7
--- /dev/null
+++ b/boost/boost/graph/detail/indexed_properties.hpp
@@ -0,0 +1,177 @@
+// Copyright 2005 The Trustees of Indiana University.
+
+// 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)
+
+// Authors: Jeremiah Willcock
+// Douglas Gregor
+// Andrew Lumsdaine
+
+// Indexed properties -- used for CSR and CSR-like graphs
+
+#ifndef BOOST_GRAPH_INDEXED_PROPERTIES_HPP
+#define BOOST_GRAPH_INDEXED_PROPERTIES_HPP
+
+#include <vector>
+#include <utility>
+#include <algorithm>
+#include <climits>
+#include <iterator>
+#include <boost/graph/graph_traits.hpp>
+#include <boost/graph/properties.hpp>
+#include <boost/iterator/counting_iterator.hpp>
+#include <boost/integer.hpp>
+#include <boost/iterator/iterator_facade.hpp>
+#include <boost/mpl/if.hpp>
+
+namespace boost {
+namespace detail {
+
+template<typename Derived, typename Property, typename Descriptor>
+class indexed_vertex_properties
+{
+public:
+ typedef no_property vertex_property_type;
+ typedef Property vertex_bundled;
+
+ // Directly access a vertex or edge bundle
+ Property& operator[](Descriptor v)
+ { return m_vertex_properties[get(vertex_index, derived(), v)]; }
+
+ const Property& operator[](Descriptor v) const
+ { return m_vertex_properties[get(vertex_index, derived(), v)]; }
+
+protected:
+ // Default-construct with no property values
+ indexed_vertex_properties() {}
+
+ // Initialize with n default-constructed property values
+ indexed_vertex_properties(std::size_t n) : m_vertex_properties(n) { }
+
+ // Resize the properties vector
+ void resize(std::size_t n)
+ {
+ m_vertex_properties.resize(n);
+ }
+
+ // Reserve space in the vector of properties
+ void reserve(std::size_t n)
+ {
+ m_vertex_properties.reserve(n);
+ }
+
+ // Add a new property value to the back
+ void push_back(const Property& prop)
+ {
+ m_vertex_properties.push_back(prop);
+ }
+
+ // Access to the derived object
+ Derived& derived() { return *static_cast<Derived*>(this); }
+
+ const Derived& derived() const
+ { return *static_cast<const Derived*>(this); }
+
+public: // should be private, but friend templates not portable
+ std::vector<Property> m_vertex_properties;
+};
+
+template<typename Derived, typename Descriptor>
+class indexed_vertex_properties<Derived, void, Descriptor>
+{
+ struct secret {};
+
+ public:
+ typedef no_property vertex_property_type;
+ typedef void vertex_bundled;
+
+ secret operator[](secret) { return secret(); }
+
+ protected:
+ // All operations do nothing.
+ indexed_vertex_properties() { }
+ indexed_vertex_properties(std::size_t) { }
+ void resize(std::size_t) { }
+ void reserve(std::size_t) { }
+};
+
+template<typename Derived, typename Property, typename Descriptor>
+class indexed_edge_properties
+{
+public:
+ typedef no_property edge_property_type;
+ typedef Property edge_bundled;
+ typedef Property edge_push_back_type;
+
+ // Directly access a edge or edge bundle
+ Property& operator[](Descriptor v)
+ { return m_edge_properties[get(edge_index, derived(), v)]; }
+
+ const Property& operator[](Descriptor v) const
+ { return m_edge_properties[get(edge_index, derived(), v)]; }
+
+protected:
+ // Default-construct with no property values
+ indexed_edge_properties() {}
+
+ // Initialize with n default-constructed property values
+ indexed_edge_properties(std::size_t n) : m_edge_properties(n) { }
+
+ // Resize the properties vector
+ void resize(std::size_t n)
+ {
+ m_edge_properties.resize(n);
+ }
+
+ // Reserve space in the vector of properties
+ void reserve(std::size_t n)
+ {
+ m_edge_properties.reserve(n);
+ }
+
+ public:
+ // Add a new property value to the back
+ void push_back(const Property& prop)
+ {
+ m_edge_properties.push_back(prop);
+ }
+
+ private:
+ // Access to the derived object
+ Derived& derived() { return *static_cast<Derived*>(this); }
+
+ const Derived& derived() const
+ { return *static_cast<const Derived*>(this); }
+
+public: // should be private, but friend templates not portable
+ std::vector<Property> m_edge_properties;
+};
+
+template<typename Derived, typename Descriptor>
+class indexed_edge_properties<Derived, void, Descriptor>
+{
+ struct secret {};
+
+ public:
+ typedef no_property edge_property_type;
+ typedef void edge_bundled;
+ typedef void* edge_push_back_type;
+
+ secret operator[](secret) { return secret(); }
+
+ protected:
+ // All operations do nothing.
+ indexed_edge_properties() { }
+ indexed_edge_properties(std::size_t) { }
+ void resize(std::size_t) { }
+ void reserve(std::size_t) { }
+
+ public:
+ void push_back(const edge_push_back_type&) { }
+};
+
+}
+}
+
+#endif // BOOST_GRAPH_INDEXED_PROPERTIES_HPP
diff --git a/boost/boost/graph/detail/is_same.hpp b/boost/boost/graph/detail/is_same.hpp
new file mode 100644
index 00000000000..cda8d561147
--- /dev/null
+++ b/boost/boost/graph/detail/is_same.hpp
@@ -0,0 +1,40 @@
+//=======================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// 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_GRAPH_DETAIL_IS_SAME_HPP
+#define BOOST_GRAPH_DETAIL_IS_SAME_HPP
+
+#include <boost/pending/ct_if.hpp>
+
+namespace boost {
+ struct false_tag;
+ struct true_tag;
+
+ namespace graph_detail {
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ template <class U, class V>
+ struct is_same {
+ typedef boost::false_tag is_same_tag;
+ };
+ template <class U>
+ struct is_same<U, U> {
+ typedef boost::true_tag is_same_tag;
+ };
+#else
+ template <class U, class V>
+ struct is_same {
+ enum { Unum = U::num, Vnum = V::num };
+ typedef typename boost::ct_if< (Unum == Vnum),
+ boost::true_tag, boost::false_tag>::type is_same_tag;
+ };
+#endif
+ } // namespace graph_detail
+} // namespace boost
+
+#endif
diff --git a/boost/boost/graph/detail/list_base.hpp b/boost/boost/graph/detail/list_base.hpp
new file mode 100644
index 00000000000..88d831650b3
--- /dev/null
+++ b/boost/boost/graph/detail/list_base.hpp
@@ -0,0 +1,220 @@
+//=======================================================================
+// Copyright 2002 Indiana University.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// 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_LIST_BASE_HPP
+#define BOOST_LIST_BASE_HPP
+
+#include <boost/iterator_adaptors.hpp>
+
+// Perhaps this should go through formal review, and move to <boost/>.
+
+/*
+ An alternate interface idea:
+ Extend the std::list functionality by creating remove/insert
+ functions that do not require the container object!
+ */
+
+namespace boost {
+ namespace detail {
+
+ //=========================================================================
+ // Linked-List Generic Implementation Functions
+
+ template <class Node, class Next>
+ inline Node
+ slist_insert_after(Node pos, Node x,
+ Next next)
+ {
+ next(x) = next(pos);
+ next(pos) = x;
+ return x;
+ }
+
+ // return next(pos) or next(next(pos)) ?
+ template <class Node, class Next>
+ inline Node
+ slist_remove_after(Node pos,
+ Next next)
+ {
+ Node n = next(pos);
+ next(pos) = next(n);
+ return n;
+ }
+
+ template <class Node, class Next>
+ inline Node
+ slist_remove_range(Node before_first, Node last,
+ Next next)
+ {
+ next(before_first) = last;
+ return last;
+ }
+
+ template <class Node, class Next>
+ inline Node
+ slist_previous(Node head, Node x, Node nil,
+ Next next)
+ {
+ while (head != nil && next(head) != x)
+ head = next(head);
+ return head;
+ }
+
+ template<class Node, class Next>
+ inline void
+ slist_splice_after(Node pos, Node before_first, Node before_last,
+ Next next)
+ {
+ if (pos != before_first && pos != before_last) {
+ Node first = next(before_first);
+ Node after = next(pos);
+ next(before_first) = next(before_last);
+ next(pos) = first;
+ next(before_last) = after;
+ }
+ }
+
+ template <class Node, class Next>
+ inline Node
+ slist_reverse(Node node, Node nil,
+ Next next)
+ {
+ Node result = node;
+ node = next(node);
+ next(result) = nil;
+ while(node) {
+ Node next = next(node);
+ next(node) = result;
+ result = node;
+ node = next;
+ }
+ return result;
+ }
+
+ template <class Node, class Next>
+ inline std::size_t
+ slist_size(Node head, Node nil,
+ Next next)
+ {
+ std::size_t s = 0;
+ for ( ; head != nil; head = next(head))
+ ++s;
+ return s;
+ }
+
+ template <class Next, class Data>
+ class slist_iterator_policies
+ {
+ public:
+ explicit slist_iterator_policies(const Next& n, const Data& d)
+ : m_next(n), m_data(d) { }
+
+ template <class Reference, class Node>
+ Reference dereference(type<Reference>, const Node& x) const
+ { return m_data(x); }
+
+ template <class Node>
+ void increment(Node& x) const
+ { x = m_next(x); }
+
+ template <class Node>
+ bool equal(Node& x, Node& y) const
+ { return x == y; }
+
+ protected:
+ Next m_next;
+ Data m_data;
+ };
+
+ //===========================================================================
+ // Doubly-Linked List Generic Implementation Functions
+
+ template <class Node, class Next, class Prev>
+ inline void
+ dlist_insert_before(Node pos, Node x,
+ Next next, Prev prev)
+ {
+ next(x) = pos;
+ prev(x) = prev(pos);
+ next(prev(pos)) = x;
+ prev(pos) = x;
+ }
+
+ template <class Node, class Next, class Prev>
+ void
+ dlist_remove(Node pos,
+ Next next, Prev prev)
+ {
+ Node next_node = next(pos);
+ Node prev_node = prev(pos);
+ next(prev_node) = next_node;
+ prev(next_node) = prev_node;
+ }
+
+ // This deletes every node in the list except the
+ // sentinel node.
+ template <class Node, class Delete>
+ inline void
+ dlist_clear(Node sentinel, Delete del)
+ {
+ Node i, tmp;
+ i = next(sentinel);
+ while (i != sentinel) {
+ tmp = i;
+ i = next(i);
+ del(tmp);
+ }
+ }
+
+ template <class Node>
+ inline bool
+ dlist_empty(Node dummy)
+ {
+ return next(dummy) == dummy;
+ }
+
+ template <class Node, class Next, class Prev>
+ void
+ dlist_transfer(Node pos, Node first, Node last,
+ Next next, Prev prev)
+ {
+ if (pos != last) {
+ // Remove [first,last) from its old position
+ next(prev(last)) = pos;
+ next(prev(first)) = last;
+ next(prev(pos)) = first;
+
+ // Splice [first,last) into its new position
+ Node tmp = prev(pos);
+ prev(pos) = prev(last);
+ prev(last) = prev(first);
+ prev(first) = tmp;
+ }
+ }
+
+ template <class Next, class Prev, class Data>
+ class dlist_iterator_policies
+ : public slist_iterator_policies<Next, Data>
+ {
+ typedef slist_iterator_policies<Next, Data> Base;
+ public:
+ template <class Node>
+ void decrement(Node& x) const
+ { x = m_prev(x); }
+
+ dlist_iterator_policies(Next n, Prev p, Data d)
+ : Base(n,d), m_prev(p) { }
+ protected:
+ Prev m_prev;
+ };
+
+ } // namespace detail
+} // namespace boost
+
+#endif // BOOST_LIST_BASE_HPP
diff --git a/boost/boost/graph/detail/permutation.hpp b/boost/boost/graph/detail/permutation.hpp
new file mode 100644
index 00000000000..f1db906ab12
--- /dev/null
+++ b/boost/boost/graph/detail/permutation.hpp
@@ -0,0 +1,205 @@
+// (C) Copyright Jeremy Siek 2001.
+// 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_PERMUTATION_HPP
+#define BOOST_PERMUTATION_HPP
+
+#include <vector>
+#include <memory>
+#include <functional>
+#include <algorithm>
+#include <boost/graph/detail/shadow_iterator.hpp>
+
+namespace boost {
+
+template <class Iter1, class Iter2>
+void permute_serial(Iter1 permuter, Iter1 last, Iter2 result)
+{
+#ifdef BOOST_NO_STD_ITERATOR_TRAITS
+ typedef std::ptrdiff_t D:
+#else
+ typedef typename std::iterator_traits<Iter1>::difference_type D;
+#endif
+
+ D n = 0;
+ while (permuter != last) {
+ std::swap(result[n], result[*permuter]);
+ ++n;
+ ++permuter;
+ }
+}
+
+template <class InIter, class RandIterP, class RandIterR>
+void permute_copy(InIter first, InIter last, RandIterP p, RandIterR result)
+{
+#ifdef BOOST_NO_STD_ITERATOR_TRAITS
+ typedef std::ptrdiff_t i = 0;
+#else
+ typename std::iterator_traits<RandIterP>::difference_type i = 0;
+#endif
+ for (; first != last; ++first, ++i)
+ result[p[i]] = *first;
+}
+
+namespace detail {
+
+template <class RandIter, class RandIterPerm, class D, class T>
+void permute_helper(RandIter first, RandIter last, RandIterPerm p, D, T)
+{
+ D i = 0, pi, n = last - first, cycle_start;
+ T tmp;
+ std::vector<int> visited(n, false);
+
+ while (i != n) { // continue until all elements have been processed
+ cycle_start = i;
+ tmp = first[i];
+ do { // walk around a cycle
+ pi = p[i];
+ visited[pi] = true;
+ std::swap(tmp, first[pi]);
+ i = pi;
+ } while (i != cycle_start);
+
+ // find the next cycle
+ for (i = 0; i < n; ++i)
+ if (visited[i] == false)
+ break;
+ }
+}
+
+} // namespace detail
+
+template <class RandIter, class RandIterPerm>
+void permute(RandIter first, RandIter last, RandIterPerm p)
+{
+ detail::permute_helper(first, last, p, last - first, *first);
+}
+
+
+// Knuth 1.3.3, Vol. 1 p 176
+// modified for zero-based arrays
+// time complexity?
+//
+// WARNING: T must be a signed integer!
+template <class PermIter>
+void invert_permutation(PermIter X, PermIter Xend)
+{
+#ifdef BOOST_NO_STD_ITERATOR_TRAITS
+ typedef std::ptrdiff_t T:
+#else
+ typedef typename std::iterator_traits<PermIter>::value_type T;
+#endif
+ T n = Xend - X;
+ T m = n;
+ T j = -1;
+
+ while (m > 0) {
+ T i = X[m-1] + 1;
+ if (i > 0) {
+ do {
+ X[m-1] = j - 1;
+ j = -m;
+ m = i;
+ i = X[m-1] + 1;
+ } while (i > 0);
+ i = j;
+ }
+ X[m-1] = -i - 1;
+ --m;
+ }
+}
+
+// Takes a "normal" permutation array (and its inverse), and turns it
+// into a BLAS-style permutation array (which can be thought of as a
+// serialized permutation).
+template <class Iter1, class Iter2, class Iter3>
+inline void serialize_permutation(Iter1 q, Iter1 q_end, Iter2 q_inv, Iter3 p)
+{
+#ifdef BOOST_NO_STD_ITERATOR_TRAITS
+ typedef std::ptrdiff_t P1;
+ typedef std::ptrdiff_t P2;
+ typedef std::ptrdiff_t D;
+#else
+ typedef typename std::iterator_traits<Iter1>::value_type P1;
+ typedef typename std::iterator_traits<Iter2>::value_type P2;
+ typedef typename std::iterator_traits<Iter1>::difference_type D;
+#endif
+ D n = q_end - q;
+ for (D i = 0; i < n; ++i) {
+ P1 qi = q[i];
+ P2 qii = q_inv[i];
+ *p++ = qii;
+ std::swap(q[i], q[qii]);
+ std::swap(q_inv[i], q_inv[qi]);
+ }
+}
+
+// Not used anymore, leaving it here for future reference.
+template <typename Iter, typename Compare>
+void merge_sort(Iter first, Iter last, Compare cmp)
+{
+ if (first + 1 < last) {
+ Iter mid = first + (last - first)/2;
+ merge_sort(first, mid, cmp);
+ merge_sort(mid, last, cmp);
+ std::inplace_merge(first, mid, last, cmp);
+ }
+}
+
+
+// time: N log N + 3N + ?
+// space: 2N
+template <class Iter, class IterP, class Cmp, class Alloc>
+inline void sortp(Iter first, Iter last, IterP p, Cmp cmp, Alloc alloc)
+{
+ typedef typename std::iterator_traits<IterP>::value_type P;
+ typedef typename std::iterator_traits<IterP>::difference_type D;
+ D n = last - first;
+ std::vector<P, Alloc> q(n);
+ for (D i = 0; i < n; ++i)
+ q[i] = i;
+ std::sort(make_shadow_iter(first, q.begin()),
+ make_shadow_iter(last, q.end()),
+ shadow_cmp<Cmp>(cmp));
+ invert_permutation(q.begin(), q.end());
+ std::copy(q.begin(), q.end(), p);
+}
+
+template <class Iter, class IterP, class Cmp>
+inline void sortp(Iter first, Iter last, IterP p, Cmp cmp)
+{
+ typedef typename std::iterator_traits<IterP>::value_type P;
+ sortp(first, last, p, cmp, std::allocator<P>());
+}
+
+template <class Iter, class IterP>
+inline void sortp(Iter first, Iter last, IterP p)
+{
+ typedef typename std::iterator_traits<Iter>::value_type T;
+ typedef typename std::iterator_traits<IterP>::value_type P;
+ sortp(first, last, p, std::less<T>(), std::allocator<P>());
+}
+
+template <class Iter, class IterP, class Cmp, class Alloc>
+inline void sortv(Iter first, Iter last, IterP p, Cmp cmp, Alloc alloc)
+{
+ typedef typename std::iterator_traits<IterP>::value_type P;
+ typedef typename std::iterator_traits<IterP>::difference_type D;
+ D n = last - first;
+ std::vector<P, Alloc> q(n), q_inv(n);
+ for (D i = 0; i < n; ++i)
+ q_inv[i] = i;
+ std::sort(make_shadow_iter(first, q_inv.begin()),
+ make_shadow_iter(last, q_inv.end()),
+ shadow_cmp<Cmp>(cmp));
+ std::copy(q_inv, q_inv.end(), q.begin());
+ invert_permutation(q.begin(), q.end());
+ serialize_permutation(q.begin(), q.end(), q_inv.end(), p);
+}
+
+
+} // namespace boost
+
+#endif // BOOST_PERMUTATION_HPP
diff --git a/boost/boost/graph/detail/read_graphviz_spirit.hpp b/boost/boost/graph/detail/read_graphviz_spirit.hpp
new file mode 100644
index 00000000000..56bd4f8c044
--- /dev/null
+++ b/boost/boost/graph/detail/read_graphviz_spirit.hpp
@@ -0,0 +1,583 @@
+// Copyright 2004-5 Trustees of Indiana University
+
+// 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)
+
+//
+// read_graphviz_spirit.hpp -
+// Initialize a model of the BGL's MutableGraph concept and an associated
+// collection of property maps using a graph expressed in the GraphViz
+// DOT Language.
+//
+// Based on the grammar found at:
+// http://www.graphviz.org/cvs/doc/info/lang.html
+//
+// See documentation for this code at:
+// http://www.boost.org/libs/graph/doc/read-graphviz.html
+//
+
+// Author: Ronald Garcia
+//
+
+#ifndef BOOST_READ_GRAPHVIZ_SPIRIT_HPP
+#define BOOST_READ_GRAPHVIZ_SPIRIT_HPP
+
+// Phoenix/Spirit set these limits to 3, but I need more.
+#define PHOENIX_LIMIT 6
+#define BOOST_SPIRIT_CLOSURE_LIMIT 6
+
+
+#include <boost/spirit/iterator/multi_pass.hpp>
+#include <boost/spirit/core.hpp>
+#include <boost/spirit/utility/confix.hpp>
+#include <boost/spirit/utility/distinct.hpp>
+#include <boost/spirit/utility/lists.hpp>
+#include <boost/spirit/utility/escape_char.hpp>
+#include <boost/spirit/attribute.hpp>
+#include <boost/spirit/dynamic.hpp>
+#include <boost/spirit/actor.hpp>
+#include <boost/spirit/phoenix.hpp>
+#include <boost/spirit/phoenix/binders.hpp>
+#include <boost/ref.hpp>
+#include <boost/function/function2.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/dynamic_property_map.hpp>
+#include <boost/graph/graph_traits.hpp>
+#include <boost/detail/workaround.hpp>
+#include <algorithm>
+#include <exception> // for std::exception
+#include <string>
+#include <vector>
+#include <set>
+#include <utility>
+#include <map>
+#include <boost/graph/graphviz.hpp>
+
+namespace phoenix {
+// Workaround: std::map::operator[] uses a different return type than all
+// other standard containers. Phoenix doesn't account for that.
+template <typename TK, typename T0, typename T1>
+struct binary_operator<index_op, std::map<TK,T0>, T1>
+{
+ typedef typename std::map<TK,T0>::mapped_type& result_type;
+ static result_type eval(std::map<TK,T0>& container, T1 const& index)
+ { return container[index]; }
+};
+} // namespace phoenix
+
+namespace boost {
+namespace detail {
+namespace graph {
+
+
+/////////////////////////////////////////////////////////////////////////////
+// Application-specific type definitions
+/////////////////////////////////////////////////////////////////////////////
+
+typedef std::set<edge_t> edges_t;
+typedef std::set<node_t> nodes_t;
+typedef std::set<id_t> ids_t;
+typedef std::map<edge_t,ids_t> edge_map_t;
+typedef std::map<node_t,ids_t> node_map_t;
+typedef std::map<id_t,id_t> props_t;
+typedef std::map<id_t,props_t> subgraph_props_t;
+typedef boost::function2<void, id_t const&, id_t const&> actor_t;
+typedef std::vector<edge_t> edge_stack_t;
+typedef std::map<id_t,nodes_t> subgraph_nodes_t;
+typedef std::map<id_t,edges_t> subgraph_edges_t;
+
+
+
+/////////////////////////////////////////////////////////////////////////////
+// Stack frames used by semantic actions
+/////////////////////////////////////////////////////////////////////////////
+struct id_closure : boost::spirit::closure<id_closure, node_t> {
+ member1 name;
+};
+
+
+struct node_id_closure : boost::spirit::closure<node_id_closure, node_t> {
+ member1 name;
+};
+
+struct attr_list_closure : boost::spirit::closure<attr_list_closure, actor_t> {
+ member1 prop_actor;
+};
+
+struct property_closure : boost::spirit::closure<property_closure, id_t, id_t> {
+ member1 key;
+ member2 value;
+};
+
+struct data_stmt_closure : boost::spirit::closure<data_stmt_closure,
+ nodes_t,nodes_t,edge_stack_t,bool,node_t> {
+ member1 sources;
+ member2 dests;
+ member3 edge_stack;
+ member4 saw_node;
+ member5 active_node;
+};
+
+struct subgraph_closure : boost::spirit::closure<subgraph_closure,
+ nodes_t, edges_t, node_t> {
+ member1 nodes;
+ member2 edges;
+ member3 name;
+};
+
+/////////////////////////////////////////////////////////////////////////////
+// Grammar and Actions for the DOT Language
+/////////////////////////////////////////////////////////////////////////////
+
+// Grammar for a dot file.
+struct dot_grammar : public boost::spirit::grammar<dot_grammar> {
+ mutate_graph& graph_;
+ explicit dot_grammar(mutate_graph& graph) : graph_(graph) { }
+
+ template <class ScannerT>
+ struct definition {
+
+ definition(dot_grammar const& self) : self(self), subgraph_depth(0),
+ keyword_p("0-9a-zA-Z_") {
+ using namespace boost::spirit;
+ using namespace phoenix;
+
+ // RG - Future Work
+ // - Handle multi-line strings using \ line continuation
+ // - Make keywords case insensitive
+ ID
+ = ( lexeme_d[((alpha_p | ch_p('_')) >> *(alnum_p | ch_p('_')))]
+ | real_p
+ | confix_p('"', *c_escape_ch_p, '"')
+ | comment_nest_p('<', '>')
+ )[ID.name = construct_<std::string>(arg1,arg2)]
+ ;
+
+ a_list
+ = list_p( ID[(a_list.key = arg1),
+ (a_list.value = "true")
+ ]
+ >> !( ch_p('=')
+ >> ID[a_list.value = arg1])
+ [phoenix::bind(&definition::call_prop_actor)
+ (var(*this),a_list.key,a_list.value)],ch_p(','));
+
+ attr_list = +(ch_p('[') >> !a_list >> ch_p(']'));
+
+ // RG - disregard port id's for now.
+ port_location
+ = (ch_p(':') >> ID)
+ | (ch_p(':') >> ch_p('(') >> ID >> ch_p(',') >> ID >> ch_p(')'))
+ ;
+
+ port_angle = ch_p('@') >> ID;
+
+ port
+ = port_location >> (!port_angle)
+ | port_angle >> (!port_location);
+
+
+ node_id
+ = ( ID[node_id.name = arg1] >> (!port) )
+ [phoenix::bind(&definition::memoize_node)(var(*this))];
+
+ attr_stmt
+ = (as_lower_d[keyword_p("graph")]
+ >> attr_list(actor_t(phoenix::bind(&definition::default_graph_prop)
+ (var(*this),arg1,arg2))))
+ | (as_lower_d[keyword_p("node")]
+ >> attr_list(actor_t(phoenix::bind(&definition::default_node_prop)
+ (var(*this),arg1,arg2))))
+ | (as_lower_d[keyword_p("edge")]
+ >> attr_list(actor_t(phoenix::bind(&definition::default_edge_prop)
+ (var(*this),arg1,arg2))))
+ ;
+
+ // edge_head is set depending on the graph type (directed/undirected)
+ edgeop = ch_p('-') >> ch_p(boost::ref(edge_head));
+
+ edgeRHS
+ = +( edgeop[(data_stmt.sources = data_stmt.dests),
+ (data_stmt.dests = construct_<nodes_t>())]
+ >> ( subgraph[data_stmt.dests = arg1]
+ | node_id[phoenix::bind(&definition::insert_node)
+ (var(*this),data_stmt.dests,arg1)]
+ )
+ [phoenix::bind(&definition::activate_edge)
+ (var(*this),data_stmt.sources,data_stmt.dests,
+ var(edges), var(default_edge_props))]
+ );
+
+
+ // To avoid backtracking, edge, node, and subgraph statements are
+ // processed as one nonterminal.
+ data_stmt
+ = ( subgraph[(data_stmt.dests = arg1),// will get moved in rhs
+ (data_stmt.saw_node = false)]
+ | node_id[(phoenix::bind(&definition::insert_node)
+ (var(*this),data_stmt.dests,arg1)),
+ (data_stmt.saw_node = true),
+#ifdef BOOST_GRAPH_DEBUG
+ (std::cout << val("AcTive Node: ") << arg1 << "\n"),
+#endif // BOOST_GRAPH_DEBUG
+ (data_stmt.active_node = arg1)]
+ ) >> if_p(edgeRHS)[
+ !attr_list(
+ actor_t(phoenix::bind(&definition::edge_prop)
+ (var(*this),arg1,arg2)))
+ ].else_p[
+ if_p(data_stmt.saw_node)[
+ !attr_list(
+ actor_t(phoenix::bind(&definition::node_prop)
+ (var(*this),arg1,arg2)))
+ ] // otherwise it's a subgraph, nothing more to do.
+ ];
+
+
+ stmt
+ = (ID >> ch_p('=') >> ID) // Graph property -- ignore.
+ | attr_stmt
+ | data_stmt
+ ;
+
+ stmt_list = *( stmt >> !ch_p(';') );
+
+ subgraph
+ = !( as_lower_d[keyword_p("subgraph")]
+ >> (!ID[(subgraph.name = arg1),
+ (subgraph.nodes = (var(subgraph_nodes))[arg1]),
+ (subgraph.edges = (var(subgraph_edges))[arg1])])
+ )
+ >> ch_p('{')[++var(subgraph_depth)]
+ >> stmt_list
+ >> ch_p('}')[--var(subgraph_depth)]
+ [(var(subgraph_nodes))[subgraph.name] = subgraph.nodes]
+ [(var(subgraph_edges))[subgraph.name] = subgraph.edges]
+
+ | as_lower_d[keyword_p("subgraph")]
+ >> ID[(subgraph.nodes = (var(subgraph_nodes))[arg1]),
+ (subgraph.edges = (var(subgraph_edges))[arg1])]
+ ;
+
+ the_grammar
+ = (!as_lower_d[keyword_p("strict")])
+ >> ( as_lower_d[keyword_p("graph")][
+ (var(edge_head) = '-'),
+ (phoenix::bind(&definition::check_undirected)(var(*this)))]
+ | as_lower_d[keyword_p("digraph")][
+ (var(edge_head) = '>'),
+ (phoenix::bind(&definition::check_directed)(var(*this)))]
+ )
+ >> (!ID) >> ch_p('{') >> stmt_list >> ch_p('}');
+
+ } // definition()
+
+ typedef boost::spirit::rule<ScannerT> rule_t;
+
+ rule_t const& start() const { return the_grammar; }
+
+
+ //
+ // Semantic actions
+ //
+
+ void check_undirected() {
+ if(self.graph_.is_directed())
+ throw boost::undirected_graph_error();
+ }
+
+ void check_directed() {
+ if(!self.graph_.is_directed())
+ throw boost::directed_graph_error();
+ }
+
+ void memoize_node() {
+ id_t const& node = node_id.name();
+ props_t& node_props = default_node_props;
+
+ if(nodes.find(node) == nodes.end()) {
+ nodes.insert(node);
+ self.graph_.do_add_vertex(node);
+
+ node_map.insert(std::make_pair(node,ids_t()));
+
+#ifdef BOOST_GRAPH_DEBUG
+ std::cout << "Add new node " << node << std::endl;
+#endif // BOOST_GRAPH_DEBUG
+ // Set the default properties for this edge
+ // RG: Here I would actually set the properties
+ for(props_t::iterator i = node_props.begin();
+ i != node_props.end(); ++i) {
+ set_node_property(node,i->first,i->second);
+ }
+ if(subgraph_depth > 0) {
+ subgraph.nodes().insert(node);
+ // Set the subgraph's default properties as well
+ props_t& props = subgraph_node_props[subgraph.name()];
+ for(props_t::iterator i = props.begin(); i != props.end(); ++i) {
+ set_node_property(node,i->first,i->second);
+ }
+ }
+ } else {
+#ifdef BOOST_GRAPH_DEBUG
+ std::cout << "See node " << node << std::endl;
+#endif // BOOST_GRAPH_DEBUG
+ }
+ }
+
+ void activate_edge(nodes_t& sources, nodes_t& dests, edges_t& edges,
+ props_t& edge_props) {
+ edge_stack_t& edge_stack = data_stmt.edge_stack();
+ for(nodes_t::iterator i = sources.begin(); i != sources.end(); ++i) {
+ for(nodes_t::iterator j = dests.begin(); j != dests.end(); ++j) {
+ // Create the edge and and push onto the edge stack.
+#ifdef BOOST_GRAPH_DEBUG
+ std::cout << "Edge " << *i << " to " << *j << std::endl;
+#endif // BOOST_GRAPH_DEBUG
+
+ edge_t edge = edge_t::new_edge();
+ edge_stack.push_back(edge);
+ edges.insert(edge);
+ edge_map.insert(std::make_pair(edge,ids_t()));
+
+ // Add the real edge.
+ self.graph_.do_add_edge(edge, *i, *j);
+
+ // Set the default properties for this edge
+ for(props_t::iterator k = edge_props.begin();
+ k != edge_props.end(); ++k) {
+ set_edge_property(edge,k->first,k->second);
+ }
+ if(subgraph_depth > 0) {
+ subgraph.edges().insert(edge);
+ // Set the subgraph's default properties as well
+ props_t& props = subgraph_edge_props[subgraph.name()];
+ for(props_t::iterator k = props.begin(); k != props.end(); ++k) {
+ set_edge_property(edge,k->first,k->second);
+ }
+ }
+ }
+ }
+ }
+
+ // node_prop - Assign the property for the current active node.
+ void node_prop(id_t const& key, id_t const& value) {
+ node_t& active_object = data_stmt.active_node();
+ set_node_property(active_object, key, value);
+ }
+
+ // edge_prop - Assign the property for the current active edges.
+ void edge_prop(id_t const& key, id_t const& value) {
+ edge_stack_t const& active_edges_ = data_stmt.edge_stack();
+ for (edge_stack_t::const_iterator i = active_edges_.begin();
+ i != active_edges_.end(); ++i) {
+ set_edge_property(*i,key,value);
+ }
+ }
+
+ // default_graph_prop - Just ignore graph properties.
+ void default_graph_prop(id_t const&, id_t const&) { }
+
+ // default_node_prop - declare default properties for any future new nodes
+ void default_node_prop(id_t const& key, id_t const& value) {
+ nodes_t& nodes_ =
+ subgraph_depth == 0 ? nodes : subgraph.nodes();
+ props_t& node_props_ =
+ subgraph_depth == 0 ?
+ default_node_props :
+ subgraph_node_props[subgraph.name()];
+
+ // add this to the selected list of default node properties.
+ node_props_[key] = value;
+ // for each node, set its property to default-constructed value
+ // if it hasn't been set already.
+ // set the dynamic property map value
+ for(nodes_t::iterator i = nodes_.begin(); i != nodes_.end(); ++i)
+ if(node_map[*i].find(key) == node_map[*i].end()) {
+ set_node_property(*i,key,id_t());
+ }
+ }
+
+ // default_edge_prop - declare default properties for any future new edges
+ void default_edge_prop(id_t const& key, id_t const& value) {
+ edges_t& edges_ =
+ subgraph_depth == 0 ? edges : subgraph.edges();
+ props_t& edge_props_ =
+ subgraph_depth == 0 ?
+ default_edge_props :
+ subgraph_edge_props[subgraph.name()];
+
+ // add this to the list of default edge properties.
+ edge_props_[key] = value;
+ // for each edge, set its property to be empty string
+ // set the dynamic property map value
+ for(edges_t::iterator i = edges_.begin(); i != edges_.end(); ++i)
+ if(edge_map[*i].find(key) == edge_map[*i].end())
+ set_edge_property(*i,key,id_t());
+ }
+
+ // helper function
+ void insert_node(nodes_t& nodes, id_t const& name) {
+ nodes.insert(name);
+ }
+
+ void call_prop_actor(std::string const& lhs, std::string const& rhs) {
+ actor_t& actor = attr_list.prop_actor();
+ // If first and last characters of the rhs are double-quotes,
+ // remove them.
+ if (!rhs.empty() && rhs[0] == '"' && rhs[rhs.size() - 1] == '"')
+ actor(lhs, rhs.substr(1, rhs.size()-2));
+ else
+ actor(lhs,rhs);
+ }
+
+ void set_node_property(node_t const& node, id_t const& key,
+ id_t const& value) {
+
+ // Add the property key to the "set" table to avoid default overwrite
+ node_map[node].insert(key);
+ // Set the user's property map
+ self.graph_.set_node_property(key, node, value);
+#ifdef BOOST_GRAPH_DEBUG
+ // Tell the world
+ std::cout << node << ": " << key << " = " << value << std::endl;
+#endif // BOOST_GRAPH_DEBUG
+ }
+
+ void set_edge_property(edge_t const& edge, id_t const& key,
+ id_t const& value) {
+
+ // Add the property key to the "set" table to avoid default overwrite
+ edge_map[edge].insert(key);
+ // Set the user's property map
+ self.graph_.set_edge_property(key, edge, value);
+#ifdef BOOST_GRAPH_DEBUG
+ // Tell the world
+ std::cout << "(" << edge.first << "," << edge.second << "): "
+ << key << " = " << value << std::endl;
+#endif // BOOST_GRAPH_DEBUG
+ }
+
+ // Variables explicitly initialized
+ dot_grammar const& self;
+ // if subgraph_depth > 0, then we're processing a subgraph.
+ int subgraph_depth;
+
+ // Keywords;
+ const boost::spirit::distinct_parser<> keyword_p;
+ //
+ // rules that make up the grammar
+ //
+ boost::spirit::rule<ScannerT,id_closure::context_t> ID;
+ boost::spirit::rule<ScannerT,property_closure::context_t> a_list;
+ boost::spirit::rule<ScannerT,attr_list_closure::context_t> attr_list;
+ rule_t port_location;
+ rule_t port_angle;
+ rule_t port;
+ boost::spirit::rule<ScannerT,node_id_closure::context_t> node_id;
+ rule_t attr_stmt;
+ boost::spirit::rule<ScannerT,data_stmt_closure::context_t> data_stmt;
+ boost::spirit::rule<ScannerT,subgraph_closure::context_t> subgraph;
+ rule_t edgeop;
+ rule_t edgeRHS;
+ rule_t stmt;
+ rule_t stmt_list;
+ rule_t the_grammar;
+
+
+ // The grammar uses edge_head to dynamically set the syntax for edges
+ // directed graphs: edge_head = '>', and so edgeop = "->"
+ // undirected graphs: edge_head = '-', and so edgeop = "--"
+ char edge_head;
+
+
+ //
+ // Support data structures
+ //
+
+ nodes_t nodes; // list of node names seen
+ edges_t edges; // list of edges seen
+ node_map_t node_map; // remember the properties set for each node
+ edge_map_t edge_map; // remember the properties set for each edge
+
+ subgraph_nodes_t subgraph_nodes; // per-subgraph lists of nodes
+ subgraph_edges_t subgraph_edges; // per-subgraph lists of edges
+
+ props_t default_node_props; // global default node properties
+ props_t default_edge_props; // global default edge properties
+ subgraph_props_t subgraph_node_props; // per-subgraph default node properties
+ subgraph_props_t subgraph_edge_props; // per-subgraph default edge properties
+ }; // struct definition
+}; // struct dot_grammar
+
+
+
+//
+// dot_skipper - GraphViz whitespace and comment skipper
+//
+struct dot_skipper : public boost::spirit::grammar<dot_skipper>
+{
+ dot_skipper() {}
+
+ template <typename ScannerT>
+ struct definition
+ {
+ definition(dot_skipper const& /*self*/) {
+ using namespace boost::spirit;
+ using namespace phoenix;
+ // comment forms
+ skip = space_p
+ | comment_p("//")
+ | comment_p("#")
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1400)
+ | confix_p(str_p("/*") ,*anychar_p, str_p("*/"))
+#else
+ | confix_p("/*" ,*anychar_p, "*/")
+#endif
+ ;
+
+#ifdef BOOST_SPIRIT_DEBUG
+ BOOST_SPIRIT_DEBUG_RULE(skip);
+#endif
+ }
+
+ boost::spirit::rule<ScannerT> skip;
+ boost::spirit::rule<ScannerT> const&
+ start() const { return skip; }
+ }; // definition
+}; // dot_skipper
+
+} // namespace graph
+} // namespace detail
+
+template <typename MultiPassIterator, typename MutableGraph>
+bool read_graphviz(MultiPassIterator begin, MultiPassIterator end,
+ MutableGraph& graph, dynamic_properties& dp,
+ std::string const& node_id = "node_id") {
+ using namespace boost;
+ using namespace boost::spirit;
+
+ typedef MultiPassIterator iterator_t;
+ typedef skip_parser_iteration_policy< boost::detail::graph::dot_skipper>
+ iter_policy_t;
+ typedef scanner_policies<iter_policy_t> scanner_policies_t;
+ typedef scanner<iterator_t, scanner_policies_t> scanner_t;
+
+ ::boost::detail::graph::mutate_graph_impl<MutableGraph>
+ m_graph(graph, dp, node_id);
+
+ ::boost::detail::graph::dot_grammar p(m_graph);
+ ::boost::detail::graph::dot_skipper skip_p;
+
+ iter_policy_t iter_policy(skip_p);
+ scanner_policies_t policies(iter_policy);
+
+ scanner_t scan(begin, end, policies);
+
+ return p.parse(scan);
+}
+
+} // namespace boost
+
+#endif // BOOST_READ_GRAPHVIZ_SPIRIT_HPP
diff --git a/boost/boost/graph/detail/self_avoiding_walk.hpp b/boost/boost/graph/detail/self_avoiding_walk.hpp
new file mode 100644
index 00000000000..def0c6eef2a
--- /dev/null
+++ b/boost/boost/graph/detail/self_avoiding_walk.hpp
@@ -0,0 +1,418 @@
+//=======================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// 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_SELF_AVOIDING_WALK_HPP
+#define BOOST_SELF_AVOIDING_WALK_HPP
+
+/*
+ This file defines necessary components for SAW.
+
+ mesh language: (defined by myself to clearify what is what)
+ A triangle in mesh is called an triangle.
+ An edge in mesh is called an line.
+ A vertex in mesh is called a point.
+
+ A triangular mesh corresponds to a graph in which a vertex is a
+ triangle and an edge(u, v) stands for triangle u and triangle v
+ share an line.
+
+ After this point, a vertex always refers to vertex in graph,
+ therefore it is a traingle in mesh.
+
+ */
+
+#include <utility>
+#include <boost/config.hpp>
+#include <boost/graph/graph_traits.hpp>
+#include <boost/property_map.hpp>
+
+#define SAW_SENTINAL -1
+
+namespace boost {
+
+ template <class T1, class T2, class T3>
+ struct triple {
+ T1 first;
+ T2 second;
+ T3 third;
+ triple(const T1& a, const T2& b, const T3& c) : first(a), second(b), third(c) {}
+ triple() : first(SAW_SENTINAL), second(SAW_SENTINAL), third(SAW_SENTINAL) {}
+ };
+
+ typedef triple<int, int, int> Triple;
+
+ /* Define a vertex property which has a triangle inside. Triangle is
+ represented by a triple. */
+ struct triangle_tag { enum { num = 100 }; };
+ typedef property<triangle_tag,Triple> triangle_property;
+
+ /* Define an edge property with a line. A line is represented by a
+ pair. This is not required for SAW though.
+ */
+ struct line_tag { enum { num = 101 }; };
+ template <class T> struct line_property
+ : public property<line_tag, std::pair<T,T> > { };
+
+ /*Precondition: Points in a Triangle are in order */
+ template <class Triangle, class Line>
+ inline void get_sharing(const Triangle& a, const Triangle& b, Line& l)
+ {
+ l.first = SAW_SENTINAL;
+ l.second = SAW_SENTINAL;
+
+ if ( a.first == b.first ) {
+ l.first = a.first;
+ if ( a.second == b.second || a.second == b.third )
+ l.second = a.second;
+ else if ( a.third == b.second || a.third == b.third )
+ l.second = a.third;
+
+ } else if ( a.first == b.second ) {
+ l.first = a.first;
+ if ( a.second == b.third )
+ l.second = a.second;
+ else if ( a.third == b.third )
+ l.second = a.third;
+
+ } else if ( a.first == b.third ) {
+ l.first = a.first;
+
+
+ } else if ( a.second == b.first ) {
+ l.first = a.second;
+ if ( a.third == b.second || a.third == b.third )
+ l.second = a.third;
+
+ } else if ( a.second == b.second ) {
+ l.first = a.second;
+ if ( a.third == b.third )
+ l.second = a.third;
+
+ } else if ( a.second == b.third ) {
+ l.first = a.second;
+
+
+ } else if ( a.third == b.first
+ || a.third == b.second
+ || a.third == b.third )
+ l.first = a.third;
+
+ /*Make it in order*/
+ if ( l.first > l.second ) {
+ typename Line::first_type i = l.first;
+ l.first = l.second;
+ l.second = i;
+ }
+
+ }
+
+ template <class TriangleDecorator, class Vertex, class Line>
+ struct get_vertex_sharing {
+ typedef std::pair<Vertex, Line> Pair;
+ get_vertex_sharing(const TriangleDecorator& _td) : td(_td) {}
+ inline Line operator()(const Vertex& u, const Vertex& v) const {
+ Line l;
+ get_sharing(td[u], td[v], l);
+ return l;
+ }
+ inline Line operator()(const Pair& u, const Vertex& v) const {
+ Line l;
+ get_sharing(td[u.first], td[v], l);
+ return l;
+ }
+ inline Line operator()(const Pair& u, const Pair& v) const {
+ Line l;
+ get_sharing(td[u.first], td[v.first], l);
+ return l;
+ }
+ TriangleDecorator td;
+ };
+
+ /* HList has to be a handle of data holder so that pass-by-value is
+ * in right logic.
+ *
+ * The element of HList is a pair of vertex and line. (remember a
+ * line is a pair of two ints.). That indicates the walk w from
+ * current vertex is across line. (If the first of line is -1, it is
+ * a point though.
+ */
+ template < class TriangleDecorator, class HList, class IteratorD>
+ class SAW_visitor
+ : public bfs_visitor<>, public dfs_visitor<>
+ {
+ typedef typename boost::property_traits<IteratorD>::value_type iter;
+ /*use boost shared_ptr*/
+ typedef typename HList::element_type::value_type::second_type Line;
+ public:
+
+ typedef tree_edge_tag category;
+
+ inline SAW_visitor(TriangleDecorator _td, HList _hlist, IteratorD ia)
+ : td(_td), hlist(_hlist), iter_d(ia) {}
+
+ template <class Vertex, class Graph>
+ inline void start_vertex(Vertex v, Graph&) {
+ Line l1;
+ l1.first = SAW_SENTINAL;
+ l1.second = SAW_SENTINAL;
+ hlist->push_front(std::make_pair(v, l1));
+ iter_d[v] = hlist->begin();
+ }
+
+ /*Several symbols:
+ w(i): i-th triangle in walk w
+ w(i) |- w(i+1): w enter w(i+1) from w(i) over a line
+ w(i) ~> w(i+1): w enter w(i+1) from w(i) over a point
+ w(i) -> w(i+1): w enter w(i+1) from w(i)
+ w(i) ^ w(i+1): the line or point w go over from w(i) to w(i+1)
+ */
+ template <class Edge, class Graph>
+ bool tree_edge(Edge e, Graph& G) {
+ using std::make_pair;
+ typedef typename boost::graph_traits<Graph>::vertex_descriptor Vertex;
+ Vertex tau = target(e, G);
+ Vertex i = source(e, G);
+
+ get_vertex_sharing<TriangleDecorator, Vertex, Line> get_sharing_line(td);
+
+ Line tau_i = get_sharing_line(tau, i);
+
+ iter w_end = hlist->end();
+
+ iter w_i = iter_d[i];
+
+ iter w_i_m_1 = w_i;
+ iter w_i_p_1 = w_i;
+
+ /*----------------------------------------------------------
+ * true false
+ *==========================================================
+ *a w(i-1) |- w(i) w(i-1) ~> w(i) or w(i-1) is null
+ *----------------------------------------------------------
+ *b w(i) |- w(i+1) w(i) ~> w(i+1) or no w(i+1) yet
+ *----------------------------------------------------------
+ */
+
+ bool a = false, b = false;
+
+ --w_i_m_1;
+ ++w_i_p_1;
+ b = ( w_i->second.first != SAW_SENTINAL );
+
+ if ( w_i_m_1 != w_end ) {
+ a = ( w_i_m_1->second.first != SAW_SENTINAL );
+ }
+
+ if ( a ) {
+
+ if ( b ) {
+ /*Case 1:
+
+ w(i-1) |- w(i) |- w(i+1)
+ */
+ Line l1 = get_sharing_line(*w_i_m_1, tau);
+
+ iter w_i_m_2 = w_i_m_1;
+ --w_i_m_2;
+
+ bool c = true;
+
+ if ( w_i_m_2 != w_end ) {
+ c = w_i_m_2->second != l1;
+ }
+
+ if ( c ) { /* w(i-1) ^ tau != w(i-2) ^ w(i-1) */
+ /*extension: w(i-1) -> tau |- w(i) */
+ w_i_m_1->second = l1;
+ /*insert(pos, const T&) is to insert before pos*/
+ iter_d[tau] = hlist->insert(w_i, make_pair(tau, tau_i));
+
+ } else { /* w(i-1) ^ tau == w(i-2) ^ w(i-1) */
+ /*must be w(i-2) ~> w(i-1) */
+
+ bool d = true;
+ //need to handle the case when w_i_p_1 is null
+ Line l3 = get_sharing_line(*w_i_p_1, tau);
+ if ( w_i_p_1 != w_end )
+ d = w_i_p_1->second != l3;
+ if ( d ) { /* w(i+1) ^ tau != w(i+1) ^ w(i+2) */
+ /*extension: w(i) |- tau -> w(i+1) */
+ w_i->second = tau_i;
+ iter_d[tau] = hlist->insert(w_i_p_1, make_pair(tau, l3));
+ } else { /* w(i+1) ^ tau == w(i+1) ^ w(i+2) */
+ /*must be w(1+1) ~> w(i+2) */
+ Line l5 = get_sharing_line(*w_i_m_1, *w_i_p_1);
+ if ( l5 != w_i_p_1->second ) { /* w(i-1) ^ w(i+1) != w(i+1) ^ w(i+2) */
+ /*extension: w(i-2) -> tau |- w(i) |- w(i-1) -> w(i+1) */
+ w_i_m_2->second = get_sharing_line(*w_i_m_2, tau);
+ iter_d[tau] = hlist->insert(w_i, make_pair(tau, tau_i));
+ w_i->second = w_i_m_1->second;
+ w_i_m_1->second = l5;
+ iter_d[w_i_m_1->first] = hlist->insert(w_i_p_1, *w_i_m_1);
+ hlist->erase(w_i_m_1);
+ } else {
+ /*mesh is tetrahedral*/
+ // dont know what that means.
+ ;
+ }
+ }
+
+ }
+ } else {
+ /*Case 2:
+
+ w(i-1) |- w(i) ~> w(1+1)
+ */
+
+ if ( w_i->second.second == tau_i.first
+ || w_i->second.second == tau_i.second ) { /*w(i) ^ w(i+1) < w(i) ^ tau*/
+ /*extension: w(i) |- tau -> w(i+1) */
+ w_i->second = tau_i;
+ Line l1 = get_sharing_line(*w_i_p_1, tau);
+ iter_d[tau] = hlist->insert(w_i_p_1, make_pair(tau, l1));
+ } else { /*w(i) ^ w(i+1) !< w(i) ^ tau*/
+ Line l1 = get_sharing_line(*w_i_m_1, tau);
+ bool c = true;
+ iter w_i_m_2 = w_i_m_1;
+ --w_i_m_2;
+ if ( w_i_m_2 != w_end )
+ c = l1 != w_i_m_2->second;
+ if (c) { /*w(i-1) ^ tau != w(i-2) ^ w(i-1)*/
+ /*extension: w(i-1) -> tau |- w(i)*/
+ w_i_m_1->second = l1;
+ iter_d[tau] = hlist->insert(w_i, make_pair(tau, tau_i));
+ } else { /*w(i-1) ^ tau == w(i-2) ^ w(i-1)*/
+ /*must be w(i-2)~>w(i-1)*/
+ /*extension: w(i-2) -> tau |- w(i) |- w(i-1) -> w(i+1)*/
+ w_i_m_2->second = get_sharing_line(*w_i_m_2, tau);
+ iter_d[tau] = hlist->insert(w_i, make_pair(tau, tau_i));
+ w_i->second = w_i_m_1->second;
+ w_i_m_1->second = get_sharing_line(*w_i_m_1, *w_i_p_1);
+ iter_d[w_i_m_1->first] = hlist->insert(w_i_p_1, *w_i_m_1);
+ hlist->erase(w_i_m_1);
+ }
+
+ }
+
+ }
+
+ } else {
+
+ if ( b ) {
+ /*Case 3:
+
+ w(i-1) ~> w(i) |- w(i+1)
+ */
+ bool c = false;
+ if ( w_i_m_1 != w_end )
+ c = ( w_i_m_1->second.second == tau_i.first)
+ || ( w_i_m_1->second.second == tau_i.second);
+
+ if ( c ) { /*w(i-1) ^ w(i) < w(i) ^ tau*/
+ /* extension: w(i-1) -> tau |- w(i) */
+ if ( w_i_m_1 != w_end )
+ w_i_m_1->second = get_sharing_line(*w_i_m_1, tau);
+ iter_d[tau] = hlist->insert(w_i, make_pair(tau, tau_i));
+ } else {
+ bool d = true;
+ Line l1;
+ l1.first = SAW_SENTINAL;
+ l1.second = SAW_SENTINAL;
+ if ( w_i_p_1 != w_end ) {
+ l1 = get_sharing_line(*w_i_p_1, tau);
+ d = l1 != w_i_p_1->second;
+ }
+ if (d) { /*w(i+1) ^ tau != w(i+1) ^ w(i+2)*/
+ /*extension: w(i) |- tau -> w(i+1) */
+ w_i->second = tau_i;
+ iter_d[tau] = hlist->insert(w_i_p_1, make_pair(tau, l1));
+ } else {
+ /*must be w(i+1) ~> w(i+2)*/
+ /*extension: w(i-1) -> w(i+1) |- w(i) |- tau -> w(i+2) */
+ iter w_i_p_2 = w_i_p_1;
+ ++w_i_p_2;
+
+ w_i_p_1->second = w_i->second;
+ iter_d[i] = hlist->insert(w_i_p_2, make_pair(i, tau_i));
+ hlist->erase(w_i);
+ Line l2 = get_sharing_line(*w_i_p_2, tau);
+ iter_d[tau] = hlist->insert(w_i_p_2, make_pair(tau, l2));
+ }
+ }
+
+ } else {
+ /*Case 4:
+
+ w(i-1) ~> w(i) ~> w(i+1)
+
+ */
+ bool c = false;
+ if ( w_i_m_1 != w_end ) {
+ c = (w_i_m_1->second.second == tau_i.first)
+ || (w_i_m_1->second.second == tau_i.second);
+ }
+ if ( c ) { /*w(i-1) ^ w(i) < w(i) ^ tau */
+ /*extension: w(i-1) -> tau |- w(i) */
+ if ( w_i_m_1 != w_end )
+ w_i_m_1->second = get_sharing_line(*w_i_m_1, tau);
+ iter_d[tau] = hlist->insert(w_i, make_pair(tau, tau_i));
+ } else {
+ /*extension: w(i) |- tau -> w(i+1) */
+ w_i->second = tau_i;
+ Line l1;
+ l1.first = SAW_SENTINAL;
+ l1.second = SAW_SENTINAL;
+ if ( w_i_p_1 != w_end )
+ l1 = get_sharing_line(*w_i_p_1, tau);
+ iter_d[tau] = hlist->insert(w_i_p_1, make_pair(tau, l1));
+ }
+ }
+
+ }
+
+ return true;
+ }
+
+ protected:
+ TriangleDecorator td; /*a decorator for vertex*/
+ HList hlist;
+ /*This must be a handle of list to record the SAW
+ The element type of the list is pair<Vertex, Line>
+ */
+
+ IteratorD iter_d;
+ /*Problem statement: Need a fast access to w for triangle i.
+ *Possible solution: mantain an array to record.
+ iter_d[i] will return an iterator
+ which points to w(i), where i is a vertex
+ representing triangle i.
+ */
+ };
+
+ template <class Triangle, class HList, class Iterator>
+ inline
+ SAW_visitor<Triangle, HList, Iterator>
+ visit_SAW(Triangle t, HList hl, Iterator i) {
+ return SAW_visitor<Triangle, HList, Iterator>(t, hl, i);
+ }
+
+ template <class Tri, class HList, class Iter>
+ inline
+ SAW_visitor< random_access_iterator_property_map<Tri*,Tri,Tri&>,
+ HList, random_access_iterator_property_map<Iter*,Iter,Iter&> >
+ visit_SAW_ptr(Tri* t, HList hl, Iter* i) {
+ typedef random_access_iterator_property_map<Tri*,Tri,Tri&> TriD;
+ typedef random_access_iterator_property_map<Iter*,Iter,Iter&> IterD;
+ return SAW_visitor<TriD, HList, IterD>(t, hl, i);
+ }
+
+ // should also have combo's of pointers, and also const :(
+
+}
+
+#endif /*BOOST_SAW_H*/
diff --git a/boost/boost/graph/detail/set_adaptor.hpp b/boost/boost/graph/detail/set_adaptor.hpp
new file mode 100644
index 00000000000..eb81dbba86f
--- /dev/null
+++ b/boost/boost/graph/detail/set_adaptor.hpp
@@ -0,0 +1,117 @@
+// (C) Copyright Jeremy Siek 2001.
+// 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_SET_ADAPTOR_HPP
+#define BOOST_SET_ADAPTOR_HPP
+
+#include <set>
+
+namespace boost {
+
+ template <class K, class C, class A, class T>
+ bool set_contains(const std::set<K,C,A>& s, const T& x) {
+ return s.find(x) != s.end();
+ }
+
+ template <class K, class C, class A>
+ bool set_equal(const std::set<K,C,A>& x,
+ const std::set<K,C,A>& y)
+ {
+ return x == y;
+ }
+
+ // Not the same as lexicographical_compare_3way applied to std::set.
+ // this is equivalent semantically to bitset::operator<()
+ template <class K, class C, class A>
+ int set_lex_order(const std::set<K,C,A>& x,
+ const std::set<K,C,A>& y)
+ {
+ typename std::set<K,C,A>::iterator
+ xi = x.begin(), yi = y.begin(), xend = x.end(), yend = y.end();
+ for (; xi != xend && yi != yend; ++xi, ++yi) {
+ if (*xi < *yi)
+ return 1;
+ else if (*yi < *xi)
+ return -1;
+ }
+ if (xi == xend)
+ return (yi == yend) ? 0 : -1;
+ else
+ return 1;
+ }
+
+ template <class K, class C, class A>
+ void set_clear(std::set<K,C,A>& x) {
+ x.clear();
+ }
+
+ template <class K, class C, class A>
+ bool set_empty(const std::set<K,C,A>& x) {
+ return x.empty();
+ }
+
+ template <class K, class C, class A, class T>
+ void set_insert(std::set<K,C,A>& x, const T& a) {
+ x.insert(a);
+ }
+
+ template <class K, class C, class A, class T>
+ void set_remove(std::set<K,C,A>& x, const T& a) {
+ x.erase(a);
+ }
+
+ template <class K, class C, class A>
+ void set_intersect(const std::set<K,C,A>& x,
+ const std::set<K,C,A>& y,
+ std::set<K,C,A>& z)
+ {
+ z.clear();
+ std::set_intersection(x.begin(), x.end(),
+ y.begin(), y.end(),
+ std::inserter(z));
+ }
+
+ template <class K, class C, class A>
+ void set_union(const std::set<K,C,A>& x,
+ const std::set<K,C,A>& y,
+ std::set<K,C,A>& z)
+ {
+ z.clear();
+ std::set_union(x.begin(), x.end(),
+ y.begin(), y.end(),
+ std::inserter(z));
+ }
+
+ template <class K, class C, class A>
+ void set_difference(const std::set<K,C,A>& x,
+ const std::set<K,C,A>& y,
+ std::set<K,C,A>& z)
+ {
+ z.clear();
+ std::set_difference(x.begin(), x.end(),
+ y.begin(), y.end(),
+ std::inserter(z, z.begin()));
+ }
+
+ template <class K, class C, class A>
+ bool set_subset(const std::set<K,C,A>& x,
+ const std::set<K,C,A>& y)
+ {
+ return std::includes(x.begin(), x.end(), y.begin(), y.end());
+ }
+
+ // Shit, can't implement this without knowing the size of the
+ // universe.
+ template <class K, class C, class A>
+ void set_compliment(const std::set<K,C,A>& x,
+ std::set<K,C,A>& z)
+ {
+ z.clear();
+
+ }
+
+} // namespace boost
+
+#endif // BOOST_SET_ADAPTOR_HPP
diff --git a/boost/boost/graph/detail/shadow_iterator.hpp b/boost/boost/graph/detail/shadow_iterator.hpp
new file mode 100644
index 00000000000..6cd15384fc2
--- /dev/null
+++ b/boost/boost/graph/detail/shadow_iterator.hpp
@@ -0,0 +1,139 @@
+// (C) Copyright Jeremy Siek 2001.
+// 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_SHADOW_ITERATOR_HPP
+#define BOOST_SHADOW_ITERATOR_HPP
+
+#include <boost/iterator_adaptors.hpp>
+#include <boost/operators.hpp>
+
+namespace boost {
+
+ namespace detail {
+
+ template <class A, class B, class D>
+ class shadow_proxy
+ : boost::operators< shadow_proxy<A,B,D> >
+ {
+ typedef shadow_proxy self;
+ public:
+ inline shadow_proxy(A aa, B bb) : a(aa), b(bb) { }
+ inline shadow_proxy(const self& x) : a(x.a), b(x.b) { }
+ template <class Self>
+ inline shadow_proxy(Self x) : a(x.a), b(x.b) { }
+ inline self& operator=(const self& x) { a = x.a; b = x.b; return *this; }
+ inline self& operator++() { ++a; return *this; }
+ inline self& operator--() { --a; return *this; }
+ inline self& operator+=(const self& x) { a += x.a; return *this; }
+ inline self& operator-=(const self& x) { a -= x.a; return *this; }
+ inline self& operator*=(const self& x) { a *= x.a; return *this; }
+ inline self& operator/=(const self& x) { a /= x.a; return *this; }
+ inline self& operator%=(const self& x) { return *this; } // JGS
+ inline self& operator&=(const self& x) { return *this; } // JGS
+ inline self& operator|=(const self& x) { return *this; } // JGS
+ inline self& operator^=(const self& x) { return *this; } // JGS
+ inline friend D operator-(const self& x, const self& y) {
+ return x.a - y.a;
+ }
+ inline bool operator==(const self& x) const { return a == x.a; }
+ inline bool operator<(const self& x) const { return a < x.a; }
+ // protected:
+ A a;
+ B b;
+ };
+
+ struct shadow_iterator_policies
+ {
+ template <typename iter_pair>
+ void initialize(const iter_pair&) { }
+
+ template <typename Iter>
+ typename Iter::reference dereference(const Iter& i) const {
+ typedef typename Iter::reference R;
+ return R(*i.base().first, *i.base().second);
+ }
+ template <typename Iter>
+ bool equal(const Iter& p1, const Iter& p2) const {
+ return p1.base().first == p2.base().first;
+ }
+ template <typename Iter>
+ void increment(Iter& i) { ++i.base().first; ++i.base().second; }
+
+ template <typename Iter>
+ void decrement(Iter& i) { --i.base().first; --i.base().second; }
+
+ template <typename Iter>
+ bool less(const Iter& x, const Iter& y) const {
+ return x.base().first < y.base().first;
+ }
+ template <typename Iter>
+ typename Iter::difference_type
+ distance(const Iter& x, const Iter& y) const {
+ return y.base().first - x.base().first;
+ }
+ template <typename D, typename Iter>
+ void advance(Iter& p, D n) { p.base().first += n; p.base().second += n; }
+ };
+
+ } // namespace detail
+
+ template <typename IterA, typename IterB>
+ struct shadow_iterator_generator {
+
+ // To use the iterator_adaptor we can't derive from
+ // random_access_iterator because we don't have a real reference.
+ // However, we want the STL algorithms to treat the shadow
+ // iterator like a random access iterator.
+ struct shadow_iterator_tag : public std::input_iterator_tag {
+ operator std::random_access_iterator_tag() {
+ return std::random_access_iterator_tag();
+ };
+ };
+ typedef typename std::iterator_traits<IterA>::value_type Aval;
+ typedef typename std::iterator_traits<IterB>::value_type Bval;
+ typedef typename std::iterator_traits<IterA>::reference Aref;
+ typedef typename std::iterator_traits<IterB>::reference Bref;
+ typedef typename std::iterator_traits<IterA>::difference_type D;
+ typedef detail::shadow_proxy<Aval,Bval,Aval> V;
+ typedef detail::shadow_proxy<Aref,Bref,Aval> R;
+ typedef iterator_adaptor< std::pair<IterA, IterB>,
+ detail::shadow_iterator_policies,
+ V, R, V*, shadow_iterator_tag,
+ D> type;
+ };
+
+ // short cut for creating a shadow iterator
+ template <class IterA, class IterB>
+ inline typename shadow_iterator_generator<IterA,IterB>::type
+ make_shadow_iter(IterA a, IterB b) {
+ typedef typename shadow_iterator_generator<IterA,IterB>::type Iter;
+ return Iter(std::make_pair(a,b));
+ }
+
+ template <class Cmp>
+ struct shadow_cmp {
+ inline shadow_cmp(const Cmp& c) : cmp(c) { }
+ template <class ShadowProxy1, class ShadowProxy2>
+ inline bool operator()(const ShadowProxy1& x, const ShadowProxy2& y) const
+ {
+ return cmp(x.a, y.a);
+ }
+ Cmp cmp;
+ };
+
+} // namespace boost
+
+namespace std {
+ template <class A1, class B1, class D1,
+ class A2, class B2, class D2>
+ void swap(boost::detail::shadow_proxy<A1&,B1&,D1> x,
+ boost::detail::shadow_proxy<A2&,B2&,D2> y)
+ {
+ std::swap(x.a, y.a);
+ std::swap(x.b, y.b);
+ }
+}
+
+#endif // BOOST_SHADOW_ITERATOR_HPP
diff --git a/boost/boost/graph/detail/sparse_ordering.hpp b/boost/boost/graph/detail/sparse_ordering.hpp
new file mode 100644
index 00000000000..cf4bbb0beee
--- /dev/null
+++ b/boost/boost/graph/detail/sparse_ordering.hpp
@@ -0,0 +1,198 @@
+//=======================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Copyright 2004, 2005 Trustees of Indiana University
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek,
+// Doug Gregor, D. Kevin McGrath
+//
+// 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_GRAPH_DETAIL_SPARSE_ORDERING_HPP
+#define BOOST_GRAPH_DETAIL_SPARSE_ORDERING_HPP
+
+#include <boost/config.hpp>
+#include <vector>
+#include <queue>
+#include <boost/pending/queue.hpp>
+#include <boost/pending/mutable_queue.hpp>
+#include <boost/graph/graph_traits.hpp>
+#include <boost/graph/breadth_first_search.hpp>
+#include <boost/graph/properties.hpp>
+#include <boost/pending/indirect_cmp.hpp>
+#include <boost/property_map.hpp>
+#include <boost/bind.hpp>
+#include <boost/graph/iteration_macros.hpp>
+#include <boost/graph/depth_first_search.hpp>
+
+namespace boost {
+
+ namespace sparse {
+
+ // rcm_queue
+ //
+ // This is a custom queue type used in the
+ // *_ordering algorithms.
+ // In addition to the normal queue operations, the
+ // rcm_queue provides:
+ //
+ // int eccentricity() const;
+ // value_type spouse() const;
+ //
+
+ // yes, it's a bad name...but it works, so use it
+ template < class Vertex, class DegreeMap,
+ class Container = std::deque<Vertex> >
+ class rcm_queue : public std::queue<Vertex, Container> {
+ typedef std::queue<Vertex> base;
+ public:
+ typedef typename base::value_type value_type;
+ typedef typename base::size_type size_type;
+
+ /* SGI queue has not had a contructor queue(const Container&) */
+ inline rcm_queue(DegreeMap deg)
+ : _size(0), Qsize(1), eccen(-1), degree(deg) { }
+
+ inline void pop() {
+ if ( !_size )
+ Qsize = base::size();
+
+ base::pop();
+ if ( _size == Qsize-1 ) {
+ _size = 0;
+ ++eccen;
+ } else
+ ++_size;
+
+ }
+
+ inline value_type& front() {
+ value_type& u = base::front();
+ if ( _size == 0 )
+ w = u;
+ else if (get(degree,u) < get(degree,w) )
+ w = u;
+ return u;
+ }
+
+ inline const value_type& front() const {
+ const value_type& u = base::front();
+ if ( _size == 0 )
+ w = u;
+ else if (get(degree,u) < get(degree,w) )
+ w = u;
+ return u;
+ }
+
+ inline value_type& top() { return front(); }
+ inline const value_type& top() const { return front(); }
+
+ inline size_type size() const { return base::size(); }
+
+ inline size_type eccentricity() const { return eccen; }
+ inline value_type spouse() const { return w; }
+
+ protected:
+ size_type _size;
+ size_type Qsize;
+ int eccen;
+ mutable value_type w;
+ DegreeMap degree;
+ };
+
+
+ template <typename Tp, typename Sequence = std::deque<Tp> >
+ class sparse_ordering_queue : public boost::queue<Tp, Sequence>{
+ public:
+ typedef typename Sequence::iterator iterator;
+ typedef typename Sequence::reverse_iterator reverse_iterator;
+ typedef queue<Tp,Sequence> base;
+ typedef typename Sequence::size_type size_type;
+
+ inline iterator begin() { return this->c.begin(); }
+ inline reverse_iterator rbegin() { return this->c.rbegin(); }
+ inline iterator end() { return this->c.end(); }
+ inline reverse_iterator rend() { return this->c.rend(); }
+ inline Tp &operator[](int n) { return this->c[n]; }
+ inline size_type size() {return this->c.size(); }
+ protected:
+ //nothing
+ };
+
+ } // namespace sparse
+
+ // Compute Pseudo peripheral
+ //
+ // To compute an approximated peripheral for a given vertex.
+ // Used in <tt>king_ordering</tt> algorithm.
+ //
+ template <class Graph, class Vertex, class ColorMap, class DegreeMap>
+ Vertex
+ pseudo_peripheral_pair(Graph& G, const Vertex& u, int& ecc,
+ ColorMap color, DegreeMap degree)
+ {
+ typedef typename property_traits<ColorMap>::value_type ColorValue;
+ typedef color_traits<ColorValue> Color;
+
+ sparse::rcm_queue<Vertex, DegreeMap> Q(degree);
+
+ typename boost::graph_traits<Graph>::vertex_iterator ui, ui_end;
+ for (tie(ui, ui_end) = vertices(G); ui != ui_end; ++ui)
+ if (get(color, *ui) != Color::red()) put(color, *ui, Color::white());
+ breadth_first_visit(G, u, buffer(Q).color_map(color));
+
+ ecc = Q.eccentricity();
+ return Q.spouse();
+ }
+
+ // Find a good starting node
+ //
+ // This is to find a good starting node for the
+ // king_ordering algorithm. "good" is in the sense
+ // of the ordering generated by RCM.
+ //
+ template <class Graph, class Vertex, class Color, class Degree>
+ Vertex find_starting_node(Graph& G, Vertex r, Color color, Degree degree)
+ {
+ Vertex x, y;
+ int eccen_r, eccen_x;
+
+ x = pseudo_peripheral_pair(G, r, eccen_r, color, degree);
+ y = pseudo_peripheral_pair(G, x, eccen_x, color, degree);
+
+ while (eccen_x > eccen_r) {
+ r = x;
+ eccen_r = eccen_x;
+ x = y;
+ y = pseudo_peripheral_pair(G, x, eccen_x, color, degree);
+ }
+ return x;
+ }
+
+template <typename Graph>
+class out_degree_property_map
+ : public put_get_helper<typename graph_traits<Graph>::degree_size_type,
+ out_degree_property_map<Graph> >
+{
+public:
+ typedef typename graph_traits<Graph>::vertex_descriptor key_type;
+ typedef typename graph_traits<Graph>::degree_size_type value_type;
+ typedef value_type reference;
+ typedef readable_property_map_tag category;
+ out_degree_property_map(const Graph& g) : m_g(g) { }
+ value_type operator[](const key_type& v) const {
+ return out_degree(v, m_g);
+ }
+private:
+ const Graph& m_g;
+};
+template <typename Graph>
+inline out_degree_property_map<Graph>
+make_out_degree_map(const Graph& g) {
+ return out_degree_property_map<Graph>(g);
+}
+
+} // namespace boost
+
+
+#endif // BOOST_GRAPH_KING_HPP
diff --git a/boost/boost/graph/dijkstra_shortest_paths.hpp b/boost/boost/graph/dijkstra_shortest_paths.hpp
new file mode 100644
index 00000000000..ef6b824c92d
--- /dev/null
+++ b/boost/boost/graph/dijkstra_shortest_paths.hpp
@@ -0,0 +1,347 @@
+//=======================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// 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_GRAPH_DIJKSTRA_HPP
+#define BOOST_GRAPH_DIJKSTRA_HPP
+
+#include <functional>
+#include <boost/limits.hpp>
+#include <boost/graph/named_function_params.hpp>
+#include <boost/graph/breadth_first_search.hpp>
+#include <boost/graph/relax.hpp>
+#include <boost/pending/indirect_cmp.hpp>
+#include <boost/graph/exception.hpp>
+#include <boost/pending/relaxed_heap.hpp>
+
+#ifdef BOOST_GRAPH_DIJKSTRA_TESTING
+# include <boost/pending/mutable_queue.hpp>
+#endif // BOOST_GRAPH_DIJKSTRA_TESTING
+
+namespace boost {
+
+#ifdef BOOST_GRAPH_DIJKSTRA_TESTING
+ static bool dijkstra_relaxed_heap = true;
+#endif
+
+ template <class Visitor, class Graph>
+ struct DijkstraVisitorConcept {
+ void constraints() {
+ function_requires< CopyConstructibleConcept<Visitor> >();
+ vis.initialize_vertex(u, g);
+ vis.discover_vertex(u, g);
+ vis.examine_vertex(u, g);
+ vis.examine_edge(e, g);
+ vis.edge_relaxed(e, g);
+ vis.edge_not_relaxed(e, g);
+ vis.finish_vertex(u, g);
+ }
+ Visitor vis;
+ Graph g;
+ typename graph_traits<Graph>::vertex_descriptor u;
+ typename graph_traits<Graph>::edge_descriptor e;
+ };
+
+ template <class Visitors = null_visitor>
+ class dijkstra_visitor : public bfs_visitor<Visitors> {
+ public:
+ dijkstra_visitor() { }
+ dijkstra_visitor(Visitors vis)
+ : bfs_visitor<Visitors>(vis) { }
+
+ template <class Edge, class Graph>
+ void edge_relaxed(Edge e, Graph& g) {
+ invoke_visitors(this->m_vis, e, g, on_edge_relaxed());
+ }
+ template <class Edge, class Graph>
+ void edge_not_relaxed(Edge e, Graph& g) {
+ invoke_visitors(this->m_vis, e, g, on_edge_not_relaxed());
+ }
+ private:
+ template <class Edge, class Graph>
+ void tree_edge(Edge u, Graph& g) { }
+ };
+ template <class Visitors>
+ dijkstra_visitor<Visitors>
+ make_dijkstra_visitor(Visitors vis) {
+ return dijkstra_visitor<Visitors>(vis);
+ }
+ typedef dijkstra_visitor<> default_dijkstra_visitor;
+
+ namespace detail {
+
+ template <class UniformCostVisitor, class UpdatableQueue,
+ class WeightMap, class PredecessorMap, class DistanceMap,
+ class BinaryFunction, class BinaryPredicate>
+ struct dijkstra_bfs_visitor
+ {
+ typedef typename property_traits<DistanceMap>::value_type D;
+
+ dijkstra_bfs_visitor(UniformCostVisitor vis, UpdatableQueue& Q,
+ WeightMap w, PredecessorMap p, DistanceMap d,
+ BinaryFunction combine, BinaryPredicate compare,
+ D zero)
+ : m_vis(vis), m_Q(Q), m_weight(w), m_predecessor(p), m_distance(d),
+ m_combine(combine), m_compare(compare), m_zero(zero) { }
+
+ template <class Edge, class Graph>
+ void tree_edge(Edge e, Graph& g) {
+ m_decreased = relax(e, g, m_weight, m_predecessor, m_distance,
+ m_combine, m_compare);
+ if (m_decreased)
+ m_vis.edge_relaxed(e, g);
+ else
+ m_vis.edge_not_relaxed(e, g);
+ }
+ template <class Edge, class Graph>
+ void gray_target(Edge e, Graph& g) {
+ m_decreased = relax(e, g, m_weight, m_predecessor, m_distance,
+ m_combine, m_compare);
+ if (m_decreased) {
+ m_Q.update(target(e, g));
+ m_vis.edge_relaxed(e, g);
+ } else
+ m_vis.edge_not_relaxed(e, g);
+ }
+
+ template <class Vertex, class Graph>
+ void initialize_vertex(Vertex u, Graph& g) { }
+ template <class Edge, class Graph>
+ void non_tree_edge(Edge, Graph&) { }
+ template <class Vertex, class Graph>
+ void discover_vertex(Vertex u, Graph& g) { m_vis.discover_vertex(u, g); }
+ template <class Vertex, class Graph>
+ void examine_vertex(Vertex u, Graph& g) { m_vis.examine_vertex(u, g); }
+ template <class Edge, class Graph>
+ void examine_edge(Edge e, Graph& g) {
+ if (m_compare(get(m_weight, e), m_zero))
+ throw negative_edge();
+ m_vis.examine_edge(e, g);
+ }
+ template <class Edge, class Graph>
+ void black_target(Edge, Graph&) { }
+ template <class Vertex, class Graph>
+ void finish_vertex(Vertex u, Graph& g) { m_vis.finish_vertex(u, g); }
+
+ UniformCostVisitor m_vis;
+ UpdatableQueue& m_Q;
+ WeightMap m_weight;
+ PredecessorMap m_predecessor;
+ DistanceMap m_distance;
+ BinaryFunction m_combine;
+ BinaryPredicate m_compare;
+ bool m_decreased;
+ D m_zero;
+ };
+
+ } // namespace detail
+
+ // Call breadth first search with default color map.
+ template <class VertexListGraph, class DijkstraVisitor,
+ class PredecessorMap, class DistanceMap,
+ class WeightMap, class IndexMap, class Compare, class Combine,
+ class DistZero>
+ inline void
+ dijkstra_shortest_paths_no_init
+ (const VertexListGraph& g,
+ typename graph_traits<VertexListGraph>::vertex_descriptor s,
+ PredecessorMap predecessor, DistanceMap distance, WeightMap weight,
+ IndexMap index_map,
+ Compare compare, Combine combine, DistZero zero,
+ DijkstraVisitor vis)
+ {
+ std::vector<default_color_type> color(num_vertices(g));
+ default_color_type c = white_color;
+ dijkstra_shortest_paths_no_init( g, s, predecessor, distance, weight,
+ index_map, compare, combine, zero, vis,
+ make_iterator_property_map(&color[0], index_map, c));
+ }
+
+ // Call breadth first search
+ template <class VertexListGraph, class DijkstraVisitor,
+ class PredecessorMap, class DistanceMap,
+ class WeightMap, class IndexMap, class Compare, class Combine,
+ class DistZero, class ColorMap>
+ inline void
+ dijkstra_shortest_paths_no_init
+ (const VertexListGraph& g,
+ typename graph_traits<VertexListGraph>::vertex_descriptor s,
+ PredecessorMap predecessor, DistanceMap distance, WeightMap weight,
+ IndexMap index_map,
+ Compare compare, Combine combine, DistZero zero,
+ DijkstraVisitor vis, ColorMap color)
+ {
+ typedef indirect_cmp<DistanceMap, Compare> IndirectCmp;
+ IndirectCmp icmp(distance, compare);
+
+ typedef typename graph_traits<VertexListGraph>::vertex_descriptor Vertex;
+
+#ifdef BOOST_GRAPH_DIJKSTRA_TESTING
+ if (!dijkstra_relaxed_heap) {
+ typedef mutable_queue<Vertex, std::vector<Vertex>, IndirectCmp, IndexMap>
+ MutableQueue;
+
+ MutableQueue Q(num_vertices(g), icmp, index_map);
+
+ detail::dijkstra_bfs_visitor<DijkstraVisitor, MutableQueue, WeightMap,
+ PredecessorMap, DistanceMap, Combine, Compare>
+ bfs_vis(vis, Q, weight, predecessor, distance, combine, compare, zero);
+
+ breadth_first_visit(g, s, Q, bfs_vis, color);
+ return;
+ }
+#endif // BOOST_GRAPH_DIJKSTRA_TESTING
+
+ typedef relaxed_heap<Vertex, IndirectCmp, IndexMap> MutableQueue;
+
+ MutableQueue Q(num_vertices(g), icmp, index_map);
+
+ detail::dijkstra_bfs_visitor<DijkstraVisitor, MutableQueue, WeightMap,
+ PredecessorMap, DistanceMap, Combine, Compare>
+ bfs_vis(vis, Q, weight, predecessor, distance, combine, compare, zero);
+
+ breadth_first_visit(g, s, Q, bfs_vis, color);
+ }
+
+ // Initialize distances and call breadth first search with default color map
+ template <class VertexListGraph, class DijkstraVisitor,
+ class PredecessorMap, class DistanceMap,
+ class WeightMap, class IndexMap, class Compare, class Combine,
+ class DistInf, class DistZero>
+ inline void
+ dijkstra_shortest_paths
+ (const VertexListGraph& g,
+ typename graph_traits<VertexListGraph>::vertex_descriptor s,
+ PredecessorMap predecessor, DistanceMap distance, WeightMap weight,
+ IndexMap index_map,
+ Compare compare, Combine combine, DistInf inf, DistZero zero,
+ DijkstraVisitor vis)
+ {
+ std::vector<default_color_type> color(num_vertices(g));
+ default_color_type c = white_color;
+ dijkstra_shortest_paths(g, s, predecessor, distance, weight, index_map,
+ compare, combine, inf, zero, vis,
+ make_iterator_property_map(&color[0], index_map,
+ c));
+ }
+
+ // Initialize distances and call breadth first search
+ template <class VertexListGraph, class DijkstraVisitor,
+ class PredecessorMap, class DistanceMap,
+ class WeightMap, class IndexMap, class Compare, class Combine,
+ class DistInf, class DistZero, class ColorMap>
+ inline void
+ dijkstra_shortest_paths
+ (const VertexListGraph& g,
+ typename graph_traits<VertexListGraph>::vertex_descriptor s,
+ PredecessorMap predecessor, DistanceMap distance, WeightMap weight,
+ IndexMap index_map,
+ Compare compare, Combine combine, DistInf inf, DistZero zero,
+ DijkstraVisitor vis, ColorMap color)
+ {
+ typedef typename property_traits<ColorMap>::value_type ColorValue;
+ typedef color_traits<ColorValue> Color;
+ typename graph_traits<VertexListGraph>::vertex_iterator ui, ui_end;
+ for (tie(ui, ui_end) = vertices(g); ui != ui_end; ++ui) {
+ vis.initialize_vertex(*ui, g);
+ put(distance, *ui, inf);
+ put(predecessor, *ui, *ui);
+ put(color, *ui, Color::white());
+ }
+ put(distance, s, zero);
+
+ dijkstra_shortest_paths_no_init(g, s, predecessor, distance, weight,
+ index_map, compare, combine, zero, vis, color);
+ }
+
+ namespace detail {
+
+ // Handle defaults for PredecessorMap and
+ // Distance Compare, Combine, Inf and Zero
+ template <class VertexListGraph, class DistanceMap, class WeightMap,
+ class IndexMap, class Params, class ColorMap>
+ inline void
+ dijkstra_dispatch2
+ (const VertexListGraph& g,
+ typename graph_traits<VertexListGraph>::vertex_descriptor s,
+ DistanceMap distance, WeightMap weight, IndexMap index_map,
+ const Params& params, ColorMap color)
+ {
+ // Default for predecessor map
+ dummy_property_map p_map;
+
+ typedef typename property_traits<DistanceMap>::value_type D;
+ dijkstra_shortest_paths
+ (g, s,
+ choose_param(get_param(params, vertex_predecessor), p_map),
+ distance, weight, index_map,
+ choose_param(get_param(params, distance_compare_t()),
+ std::less<D>()),
+ choose_param(get_param(params, distance_combine_t()),
+ closed_plus<D>()),
+ choose_param(get_param(params, distance_inf_t()),
+ (std::numeric_limits<D>::max)()),
+ choose_param(get_param(params, distance_zero_t()),
+ D()),
+ choose_param(get_param(params, graph_visitor),
+ make_dijkstra_visitor(null_visitor())),
+ color);
+ }
+
+ template <class VertexListGraph, class DistanceMap, class WeightMap,
+ class IndexMap, class Params, class ColorMap>
+ inline void
+ dijkstra_dispatch1
+ (const VertexListGraph& g,
+ typename graph_traits<VertexListGraph>::vertex_descriptor s,
+ DistanceMap distance, WeightMap weight, IndexMap index_map,
+ const Params& params, ColorMap color)
+ {
+ // Default for distance map
+ typedef typename property_traits<WeightMap>::value_type D;
+ typename std::vector<D>::size_type
+ n = is_default_param(distance) ? num_vertices(g) : 1;
+ std::vector<D> distance_map(n);
+
+ // Default for color map
+ typename std::vector<default_color_type>::size_type
+ m = is_default_param(color) ? num_vertices(g) : 1;
+ std::vector<default_color_type> color_map(m);
+
+ detail::dijkstra_dispatch2
+ (g, s, choose_param(distance, make_iterator_property_map
+ (distance_map.begin(), index_map,
+ distance_map[0])),
+ weight, index_map, params,
+ choose_param(color, make_iterator_property_map
+ (color_map.begin(), index_map,
+ color_map[0])));
+ }
+ } // namespace detail
+
+ // Named Parameter Variant
+ template <class VertexListGraph, class Param, class Tag, class Rest>
+ inline void
+ dijkstra_shortest_paths
+ (const VertexListGraph& g,
+ typename graph_traits<VertexListGraph>::vertex_descriptor s,
+ const bgl_named_params<Param,Tag,Rest>& params)
+ {
+ // Default for edge weight and vertex index map is to ask for them
+ // from the graph. Default for the visitor is null_visitor.
+ detail::dijkstra_dispatch1
+ (g, s,
+ get_param(params, vertex_distance),
+ choose_const_pmap(get_param(params, edge_weight), g, edge_weight),
+ choose_const_pmap(get_param(params, vertex_index), g, vertex_index),
+ params,
+ get_param(params, vertex_color));
+ }
+
+} // namespace boost
+
+#endif // BOOST_GRAPH_DIJKSTRA_HPP
diff --git a/boost/boost/graph/dominator_tree.hpp b/boost/boost/graph/dominator_tree.hpp
new file mode 100644
index 00000000000..bb34bbe96af
--- /dev/null
+++ b/boost/boost/graph/dominator_tree.hpp
@@ -0,0 +1,488 @@
+//=======================================================================
+// Copyright (C) 2005 Jong Soo Park <jongsoo.park -at- gmail.com>
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//=======================================================================
+// Dominator tree computation
+#ifndef BOOST_GRAPH_DOMINATOR_HPP
+#define BOOST_GRAPH_DOMINATOR_HPP
+
+#include <boost/config.hpp>
+#include <deque>
+#include <set>
+#include <boost/graph/depth_first_search.hpp>
+
+namespace boost {
+ namespace detail {
+ /**
+ * An extended time_stamper which also records vertices for each dfs number
+ */
+ template<class TimeMap, class VertexVector, class TimeT, class Tag>
+ class time_stamper_with_vertex_vector
+ : public base_visitor<
+ time_stamper_with_vertex_vector<TimeMap, VertexVector, TimeT, Tag> >
+ {
+ public :
+ typedef Tag event_filter;
+ time_stamper_with_vertex_vector(TimeMap timeMap, VertexVector& v,
+ TimeT& t)
+ : timeStamper_(timeMap, t), v_(v) { }
+
+ template<class Graph>
+ void
+ operator()(const typename property_traits<TimeMap>::key_type& v,
+ const Graph& g)
+ {
+ timeStamper_(v, g);
+ v_[timeStamper_.m_time] = v;
+ }
+
+ private :
+ time_stamper<TimeMap, TimeT, Tag> timeStamper_;
+ VertexVector& v_;
+ };
+
+ /**
+ * A convenient way to create a time_stamper_with_vertex_vector
+ */
+ template<class TimeMap, class VertexVector, class TimeT, class Tag>
+ time_stamper_with_vertex_vector<TimeMap, VertexVector, TimeT, Tag>
+ stamp_times_with_vertex_vector(TimeMap timeMap, VertexVector& v, TimeT& t,
+ Tag)
+ {
+ return time_stamper_with_vertex_vector<TimeMap, VertexVector, TimeT,
+ Tag>(timeMap, v, t);
+ }
+
+ template<class Graph, class IndexMap, class TimeMap, class PredMap,
+ class DomTreePredMap>
+ class dominator_visitor
+ {
+ typedef typename graph_traits<Graph>::vertex_descriptor Vertex;
+ typedef typename graph_traits<Graph>::vertices_size_type VerticesSizeType;
+
+ public :
+ /**
+ * @param g [in] the target graph of the dominator tree
+ * @param entry [in] the entry node of g
+ * @param domTreePredMap [out] the immediate dominator map
+ * (parent map in dominator tree)
+ */
+ dominator_visitor(const Graph& g, const Vertex& entry,
+ DomTreePredMap domTreePredMap)
+ : semi_(num_vertices(g)),
+ ancestor_(num_vertices(g), graph_traits<Graph>::null_vertex()),
+ samedom_(ancestor_),
+ best_(semi_),
+ semiMap_(make_iterator_property_map(semi_.begin(),
+ get(vertex_index, g))),
+ ancestorMap_(make_iterator_property_map(ancestor_.begin(),
+ get(vertex_index, g))),
+ bestMap_(make_iterator_property_map(best_.begin(),
+ get(vertex_index, g))),
+ buckets_(num_vertices(g)),
+ bucketMap_(make_iterator_property_map(buckets_.begin(),
+ get(vertex_index, g))),
+ entry_(entry),
+ domTreePredMap_(domTreePredMap),
+ samedomMap(make_iterator_property_map(samedom_.begin(),
+ get(vertex_index, g)))
+ {
+ }
+
+ void
+ operator()(const Vertex& n, const TimeMap& dfnumMap,
+ const PredMap& parentMap, const Graph& g)
+ {
+ if (n == entry_) return;
+
+ const VerticesSizeType numOfVertices = num_vertices(g);
+ const Vertex p(get(parentMap, n));
+ Vertex s(p);
+
+ // 1. Calculate the semidominator of n,
+ // based on the semidominator thm.
+ // * Semidominator thm. : To find the semidominator of a node n,
+ // consider all predecessors v of n in the CFG (Control Flow Graph).
+ // - If v is a proper ancestor of n in the spanning tree
+ // (so dfnum(v) < dfnum(n)), then v is a candidate for semi(n)
+ // - If v is a non-ancestor of n (so dfnum(v) > dfnum(n))
+ // then for each u that is an ancestor of v (or u = v),
+ // Let semi(u) be a candidate for semi(n)
+ // of all these candidates, the one with lowest dfnum is
+ // the semidominator of n.
+
+ // For each predecessor of n
+ typename graph_traits<Graph>::in_edge_iterator inItr, inEnd;
+ for (tie(inItr, inEnd) = in_edges(n, g); inItr != inEnd; ++inItr)
+ {
+ const Vertex v = source(*inItr, g);
+ // To deal with unreachable nodes
+ if (get(dfnumMap, v) < 0 || get(dfnumMap, v) >= numOfVertices)
+ continue;
+
+ Vertex s2;
+ if (get(dfnumMap, v) <= get(dfnumMap, n))
+ s2 = v;
+ else
+ s2 = get(semiMap_, ancestor_with_lowest_semi_(v, dfnumMap));
+
+ if (get(dfnumMap, s2) < get(dfnumMap, s))
+ s = s2;
+ }
+ put(semiMap_, n, s);
+
+ // 2. Calculation of n's dominator is deferred until
+ // the path from s to n has been linked into the forest
+ get(bucketMap_, s).push_back(n);
+ get(ancestorMap_, n) = p;
+ get(bestMap_, n) = n;
+
+ // 3. Now that the path from p to v has been linked into
+ // the spanning forest, these lines calculate the dominator of v,
+ // based on the dominator thm., or else defer the calculation
+ // until y's dominator is known
+ // * Dominator thm. : On the spanning-tree path below semi(n) and
+ // above or including n, let y be the node
+ // with the smallest-numbered semidominator. Then,
+ //
+ // idom(n) = semi(n) if semi(y)=semi(n) or
+ // idom(y) if semi(y) != semi(n)
+ typename std::deque<Vertex>::iterator buckItr;
+ for (buckItr = get(bucketMap_, p).begin();
+ buckItr != get(bucketMap_, p).end();
+ ++buckItr)
+ {
+ const Vertex v(*buckItr);
+ const Vertex y(ancestor_with_lowest_semi_(v, dfnumMap));
+ if (get(semiMap_, y) == get(semiMap_, v))
+ put(domTreePredMap_, v, p);
+ else
+ put(samedomMap, v, y);
+ }
+
+ get(bucketMap_, p).clear();
+ }
+
+ protected :
+
+ /**
+ * Evaluate function in Tarjan's path compression
+ */
+ const Vertex
+ ancestor_with_lowest_semi_(const Vertex& v, const TimeMap& dfnumMap)
+ {
+ const Vertex a(get(ancestorMap_, v));
+
+ if (get(ancestorMap_, a) != graph_traits<Graph>::null_vertex())
+ {
+ const Vertex b(ancestor_with_lowest_semi_(a, dfnumMap));
+
+ put(ancestorMap_, v, get(ancestorMap_, a));
+
+ if (get(dfnumMap, get(semiMap_, b)) <
+ get(dfnumMap, get(semiMap_, get(bestMap_, v))))
+ put(bestMap_, v, b);
+ }
+
+ return get(bestMap_, v);
+ }
+
+ std::vector<Vertex> semi_, ancestor_, samedom_, best_;
+ PredMap semiMap_, ancestorMap_, bestMap_;
+ std::vector< std::deque<Vertex> > buckets_;
+
+ iterator_property_map<typename std::vector<std::deque<Vertex> >::iterator,
+ IndexMap> bucketMap_;
+
+ const Vertex& entry_;
+ DomTreePredMap domTreePredMap_;
+
+ public :
+
+ PredMap samedomMap;
+ };
+
+ } // namespace detail
+
+ /**
+ * @brief Build dominator tree using Lengauer-Tarjan algorithm.
+ * It takes O((V+E)log(V+E)) time.
+ *
+ * @pre dfnumMap, parentMap and verticesByDFNum have dfs results corresponding
+ * indexMap.
+ * If dfs has already run before,
+ * this function would be good for saving computations.
+ * @pre Unreachable nodes must be masked as
+ * graph_traits<Graph>::null_vertex in parentMap.
+ * @pre Unreachable nodes must be masked as
+ * (std::numeric_limits<VerticesSizeType>::max)() in dfnumMap.
+ *
+ * @param domTreePredMap [out] : immediate dominator map (parent map
+ * in dom. tree)
+ *
+ * @note reference Appel. p. 452~453. algorithm 19.9, 19.10.
+ *
+ * @todo : Optimization in Finding Dominators in Practice, Loukas Georgiadis
+ */
+ template<class Graph, class IndexMap, class TimeMap, class PredMap,
+ class VertexVector, class DomTreePredMap>
+ void
+ lengauer_tarjan_dominator_tree_without_dfs
+ (const Graph& g,
+ const typename graph_traits<Graph>::vertex_descriptor& entry,
+ const IndexMap& indexMap,
+ TimeMap dfnumMap, PredMap parentMap, VertexVector& verticesByDFNum,
+ DomTreePredMap domTreePredMap)
+ {
+ // Typedefs and concept check
+ typedef typename graph_traits<Graph>::vertex_descriptor Vertex;
+ typedef typename graph_traits<Graph>::vertices_size_type VerticesSizeType;
+
+ function_requires< BidirectionalGraphConcept<Graph> >();
+
+ const VerticesSizeType numOfVertices = num_vertices(g);
+ if (numOfVertices == 0) return;
+
+ // 1. Visit each vertex in reverse post order and calculate sdom.
+ detail::dominator_visitor<Graph, IndexMap, TimeMap, PredMap, DomTreePredMap>
+ visitor(g, entry, domTreePredMap);
+
+ VerticesSizeType i;
+ for (i = 0; i < numOfVertices; ++i)
+ {
+ const Vertex u(verticesByDFNum[numOfVertices - 1 - i]);
+ if (u != graph_traits<Graph>::null_vertex())
+ visitor(u, dfnumMap, parentMap, g);
+ }
+
+ // 2. Now all the deferred dominator calculations,
+ // based on the second clause of the dominator thm., are performed
+ for (i = 0; i < numOfVertices; ++i)
+ {
+ const Vertex n(verticesByDFNum[i]);
+
+ if (n == entry || n == graph_traits<Graph>::null_vertex())
+ continue;
+
+ Vertex u = get(visitor.samedomMap, n);
+ if (u != graph_traits<Graph>::null_vertex())
+ {
+ put(domTreePredMap, n, get(domTreePredMap, u));
+ }
+ }
+ }
+
+ /**
+ * Unlike lengauer_tarjan_dominator_tree_without_dfs,
+ * dfs is run in this function and
+ * the result is written to dfnumMap, parentMap, vertices.
+ *
+ * If the result of dfs required after this algorithm,
+ * this function can eliminate the need of rerunning dfs.
+ */
+ template<class Graph, class IndexMap, class TimeMap, class PredMap,
+ class VertexVector, class DomTreePredMap>
+ void
+ lengauer_tarjan_dominator_tree
+ (const Graph& g,
+ const typename graph_traits<Graph>::vertex_descriptor& entry,
+ const IndexMap& indexMap,
+ TimeMap dfnumMap, PredMap parentMap, VertexVector& verticesByDFNum,
+ DomTreePredMap domTreePredMap)
+ {
+ // Typedefs and concept check
+ typedef typename graph_traits<Graph>::vertices_size_type VerticesSizeType;
+
+ function_requires< BidirectionalGraphConcept<Graph> >();
+
+ // 1. Depth first visit
+ const VerticesSizeType numOfVertices = num_vertices(g);
+ if (numOfVertices == 0) return;
+
+ VerticesSizeType time =
+ (std::numeric_limits<VerticesSizeType>::max)();
+ std::vector<default_color_type>
+ colors(numOfVertices, color_traits<default_color_type>::white());
+ depth_first_visit
+ (g, entry,
+ make_dfs_visitor
+ (make_pair(record_predecessors(parentMap, on_tree_edge()),
+ detail::stamp_times_with_vertex_vector
+ (dfnumMap, verticesByDFNum, time, on_discover_vertex()))),
+ make_iterator_property_map(colors.begin(), indexMap));
+
+ // 2. Run main algorithm.
+ lengauer_tarjan_dominator_tree_without_dfs(g, entry, indexMap, dfnumMap,
+ parentMap, verticesByDFNum,
+ domTreePredMap);
+ }
+
+ /**
+ * Use vertex_index as IndexMap and make dfnumMap, parentMap, verticesByDFNum
+ * internally.
+ * If we don't need the result of dfs (dfnumMap, parentMap, verticesByDFNum),
+ * this function would be more convenient one.
+ */
+ template<class Graph, class DomTreePredMap>
+ void
+ lengauer_tarjan_dominator_tree
+ (const Graph& g,
+ const typename graph_traits<Graph>::vertex_descriptor& entry,
+ DomTreePredMap domTreePredMap)
+ {
+ // typedefs
+ typedef typename graph_traits<Graph>::vertex_descriptor Vertex;
+ typedef typename graph_traits<Graph>::vertices_size_type VerticesSizeType;
+ typedef typename property_map<Graph, vertex_index_t>::const_type IndexMap;
+ typedef
+ iterator_property_map<typename std::vector<VerticesSizeType>::iterator,
+ IndexMap> TimeMap;
+ typedef
+ iterator_property_map<typename std::vector<Vertex>::iterator, IndexMap>
+ PredMap;
+
+ // Make property maps
+ const VerticesSizeType numOfVertices = num_vertices(g);
+ if (numOfVertices == 0) return;
+
+ const IndexMap indexMap = get(vertex_index, g);
+
+ std::vector<VerticesSizeType> dfnum(numOfVertices, 0);
+ TimeMap dfnumMap(make_iterator_property_map(dfnum.begin(), indexMap));
+
+ std::vector<Vertex> parent(numOfVertices,
+ graph_traits<Graph>::null_vertex());
+ PredMap parentMap(make_iterator_property_map(parent.begin(), indexMap));
+
+ std::vector<Vertex> verticesByDFNum(parent);
+
+ // Run main algorithm
+ lengauer_tarjan_dominator_tree(g, entry,
+ indexMap, dfnumMap, parentMap,
+ verticesByDFNum, domTreePredMap);
+ }
+
+ /**
+ * Muchnick. p. 182, 184
+ *
+ * using iterative bit vector analysis
+ */
+ template<class Graph, class IndexMap, class DomTreePredMap>
+ void
+ iterative_bit_vector_dominator_tree
+ (const Graph& g,
+ const typename graph_traits<Graph>::vertex_descriptor& entry,
+ const IndexMap& indexMap,
+ DomTreePredMap domTreePredMap)
+ {
+ typedef typename graph_traits<Graph>::vertex_descriptor Vertex;
+ typedef typename graph_traits<Graph>::vertex_iterator vertexItr;
+ typedef typename graph_traits<Graph>::vertices_size_type VerticesSizeType;
+ typedef
+ iterator_property_map<typename std::vector< std::set<Vertex> >::iterator,
+ IndexMap> vertexSetMap;
+
+ function_requires<BidirectionalGraphConcept<Graph> >();
+
+ // 1. Finding dominator
+ // 1.1. Initialize
+ const VerticesSizeType numOfVertices = num_vertices(g);
+ if (numOfVertices == 0) return;
+
+ vertexItr vi, viend;
+ tie(vi, viend) = vertices(g);
+ const std::set<Vertex> N(vi, viend);
+
+ bool change = true;
+
+ std::vector< std::set<Vertex> > dom(numOfVertices, N);
+ vertexSetMap domMap(make_iterator_property_map(dom.begin(), indexMap));
+ get(domMap, entry).clear();
+ get(domMap, entry).insert(entry);
+
+ while (change)
+ {
+ change = false;
+ for (tie(vi, viend) = vertices(g); vi != viend; ++vi)
+ {
+ if (*vi == entry) continue;
+
+ std::set<Vertex> T(N);
+
+ typename graph_traits<Graph>::in_edge_iterator inItr, inEnd;
+ for (tie(inItr, inEnd) = in_edges(*vi, g); inItr != inEnd; ++inItr)
+ {
+ const Vertex p = source(*inItr, g);
+
+ std::set<Vertex> tempSet;
+ std::set_intersection(T.begin(), T.end(),
+ get(domMap, p).begin(),
+ get(domMap, p).end(),
+ std::inserter(tempSet, tempSet.begin()));
+ T.swap(tempSet);
+ }
+
+ T.insert(*vi);
+ if (T != get(domMap, *vi))
+ {
+ change = true;
+ get(domMap, *vi).swap(T);
+ }
+ } // end of for (tie(vi, viend) = vertices(g)
+ } // end of while(change)
+
+ // 2. Build dominator tree
+ for (tie(vi, viend) = vertices(g); vi != viend; ++vi)
+ get(domMap, *vi).erase(*vi);
+
+ Graph domTree(numOfVertices);
+
+ for (tie(vi, viend) = vertices(g); vi != viend; ++vi)
+ {
+ if (*vi == entry) continue;
+
+ // We have to iterate through copied dominator set
+ const std::set<Vertex> tempSet(get(domMap, *vi));
+ typename std::set<Vertex>::const_iterator s;
+ for (s = tempSet.begin(); s != tempSet.end(); ++s)
+ {
+ typename std::set<Vertex>::iterator t;
+ for (t = get(domMap, *vi).begin(); t != get(domMap, *vi).end(); )
+ {
+ typename std::set<Vertex>::iterator old_t = t;
+ ++t; // Done early because t may become invalid
+ if (*old_t == *s) continue;
+ if (get(domMap, *s).find(*old_t) != get(domMap, *s).end())
+ get(domMap, *vi).erase(old_t);
+ }
+ }
+ }
+
+ for (tie(vi, viend) = vertices(g); vi != viend; ++vi)
+ {
+ if (*vi != entry && get(domMap, *vi).size() == 1)
+ {
+ Vertex temp = *get(domMap, *vi).begin();
+ put(domTreePredMap, *vi, temp);
+ }
+ }
+ }
+
+ template<class Graph, class DomTreePredMap>
+ void
+ iterative_bit_vector_dominator_tree
+ (const Graph& g,
+ const typename graph_traits<Graph>::vertex_descriptor& entry,
+ DomTreePredMap domTreePredMap)
+ {
+ typename property_map<Graph, vertex_index_t>::const_type
+ indexMap = get(vertex_index, g);
+
+ iterative_bit_vector_dominator_tree(g, entry, indexMap, domTreePredMap);
+ }
+} // namespace boost
+
+#endif // BOOST_GRAPH_DOMINATOR_HPP
diff --git a/boost/boost/graph/edge_connectivity.hpp b/boost/boost/graph/edge_connectivity.hpp
new file mode 100644
index 00000000000..d78e3ee41a3
--- /dev/null
+++ b/boost/boost/graph/edge_connectivity.hpp
@@ -0,0 +1,181 @@
+//=======================================================================
+// Copyright 2000 University of Notre Dame.
+// Authors: Jeremy G. Siek, Andrew Lumsdaine, Lie-Quan Lee
+//
+// 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_EDGE_CONNECTIVITY
+#define BOOST_EDGE_CONNECTIVITY
+
+// WARNING: not-yet fully tested!
+
+#include <boost/config.hpp>
+#include <vector>
+#include <set>
+#include <algorithm>
+#include <boost/graph/edmunds_karp_max_flow.hpp>
+
+namespace boost {
+
+ namespace detail {
+
+ template <class Graph>
+ inline
+ std::pair<typename graph_traits<Graph>::vertex_descriptor,
+ typename graph_traits<Graph>::degree_size_type>
+ min_degree_vertex(Graph& g)
+ {
+ typedef graph_traits<Graph> Traits;
+ typename Traits::vertex_descriptor p;
+ typedef typename Traits::degree_size_type size_type;
+ size_type delta = (std::numeric_limits<size_type>::max)();
+
+ typename Traits::vertex_iterator i, iend;
+ for (tie(i, iend) = vertices(g); i != iend; ++i)
+ if (degree(*i, g) < delta) {
+ delta = degree(*i, g);
+ p = *i;
+ }
+ return std::make_pair(p, delta);
+ }
+
+ template <class Graph, class OutputIterator>
+ void neighbors(const Graph& g,
+ typename graph_traits<Graph>::vertex_descriptor u,
+ OutputIterator result)
+ {
+ typename graph_traits<Graph>::adjacency_iterator ai, aend;
+ for (tie(ai, aend) = adjacent_vertices(u, g); ai != aend; ++ai)
+ *result++ = *ai;
+ }
+
+ template <class Graph, class VertexIterator, class OutputIterator>
+ void neighbors(const Graph& g,
+ VertexIterator first, VertexIterator last,
+ OutputIterator result)
+ {
+ for (; first != last; ++first)
+ neighbors(g, *first, result);
+ }
+
+ } // namespace detail
+
+ // O(m n)
+ template <class VertexListGraph, class OutputIterator>
+ typename graph_traits<VertexListGraph>::degree_size_type
+ edge_connectivity(VertexListGraph& g, OutputIterator disconnecting_set)
+ {
+ //-------------------------------------------------------------------------
+ // Type Definitions
+ typedef graph_traits<VertexListGraph> Traits;
+ typedef typename Traits::vertex_iterator vertex_iterator;
+ typedef typename Traits::edge_iterator edge_iterator;
+ typedef typename Traits::out_edge_iterator out_edge_iterator;
+ typedef typename Traits::vertex_descriptor vertex_descriptor;
+ typedef typename Traits::degree_size_type degree_size_type;
+ typedef color_traits<default_color_type> Color;
+
+ typedef adjacency_list_traits<vecS, vecS, directedS> Tr;
+ typedef typename Tr::edge_descriptor Tr_edge_desc;
+ typedef adjacency_list<vecS, vecS, directedS, no_property,
+ property<edge_capacity_t, degree_size_type,
+ property<edge_residual_capacity_t, degree_size_type,
+ property<edge_reverse_t, Tr_edge_desc> > > >
+ FlowGraph;
+ typedef typename graph_traits<FlowGraph>::edge_descriptor edge_descriptor;
+
+ //-------------------------------------------------------------------------
+ // Variable Declarations
+ vertex_descriptor u, v, p, k;
+ edge_descriptor e1, e2;
+ bool inserted;
+ vertex_iterator vi, vi_end;
+ edge_iterator ei, ei_end;
+ degree_size_type delta, alpha_star, alpha_S_k;
+ std::set<vertex_descriptor> S, neighbor_S;
+ std::vector<vertex_descriptor> S_star, non_neighbor_S;
+ std::vector<default_color_type> color(num_vertices(g));
+ std::vector<edge_descriptor> pred(num_vertices(g));
+
+ //-------------------------------------------------------------------------
+ // Create a network flow graph out of the undirected graph
+ FlowGraph flow_g(num_vertices(g));
+
+ typename property_map<FlowGraph, edge_capacity_t>::type
+ cap = get(edge_capacity, flow_g);
+ typename property_map<FlowGraph, edge_residual_capacity_t>::type
+ res_cap = get(edge_residual_capacity, flow_g);
+ typename property_map<FlowGraph, edge_reverse_t>::type
+ rev_edge = get(edge_reverse, flow_g);
+
+ for (tie(ei, ei_end) = edges(g); ei != ei_end; ++ei) {
+ u = source(*ei, g), v = target(*ei, g);
+ tie(e1, inserted) = add_edge(u, v, flow_g);
+ cap[e1] = 1;
+ tie(e2, inserted) = add_edge(v, u, flow_g);
+ cap[e2] = 1; // not sure about this
+ rev_edge[e1] = e2;
+ rev_edge[e2] = e1;
+ }
+
+ //-------------------------------------------------------------------------
+ // The Algorithm
+
+ tie(p, delta) = detail::min_degree_vertex(g);
+ S_star.push_back(p);
+ alpha_star = delta;
+ S.insert(p);
+ neighbor_S.insert(p);
+ detail::neighbors(g, S.begin(), S.end(),
+ std::inserter(neighbor_S, neighbor_S.begin()));
+
+ std::set_difference(vertices(g).first, vertices(g).second,
+ neighbor_S.begin(), neighbor_S.end(),
+ std::back_inserter(non_neighbor_S));
+
+ while (!non_neighbor_S.empty()) { // at most n - 1 times
+ k = non_neighbor_S.front();
+
+ alpha_S_k = edmunds_karp_max_flow
+ (flow_g, p, k, cap, res_cap, rev_edge, &color[0], &pred[0]);
+
+ if (alpha_S_k < alpha_star) {
+ alpha_star = alpha_S_k;
+ S_star.clear();
+ for (tie(vi, vi_end) = vertices(flow_g); vi != vi_end; ++vi)
+ if (color[*vi] != Color::white())
+ S_star.push_back(*vi);
+ }
+ S.insert(k);
+ neighbor_S.insert(k);
+ detail::neighbors(g, k, std::inserter(neighbor_S, neighbor_S.begin()));
+ non_neighbor_S.clear();
+ std::set_difference(vertices(g).first, vertices(g).second,
+ neighbor_S.begin(), neighbor_S.end(),
+ std::back_inserter(non_neighbor_S));
+ }
+ //-------------------------------------------------------------------------
+ // Compute edges of the cut [S*, ~S*]
+ std::vector<bool> in_S_star(num_vertices(g), false);
+ typename std::vector<vertex_descriptor>::iterator si;
+ for (si = S_star.begin(); si != S_star.end(); ++si)
+ in_S_star[*si] = true;
+
+ degree_size_type c = 0;
+ for (si = S_star.begin(); si != S_star.end(); ++si) {
+ out_edge_iterator ei, ei_end;
+ for (tie(ei, ei_end) = out_edges(*si, g); ei != ei_end; ++ei)
+ if (!in_S_star[target(*ei, g)]) {
+ *disconnecting_set++ = *ei;
+ ++c;
+ }
+ }
+ return c;
+ }
+
+} // namespace boost
+
+#endif // BOOST_EDGE_CONNECTIVITY
diff --git a/boost/boost/graph/edge_list.hpp b/boost/boost/graph/edge_list.hpp
new file mode 100644
index 00000000000..46fdde69eed
--- /dev/null
+++ b/boost/boost/graph/edge_list.hpp
@@ -0,0 +1,303 @@
+//=======================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// 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_GRAPH_EDGE_LIST_HPP
+#define BOOST_GRAPH_EDGE_LIST_HPP
+
+#include <iterator>
+#include <boost/config.hpp>
+#include <boost/pending/ct_if.hpp>
+#include <boost/pending/integer_range.hpp>
+#include <boost/graph/graph_traits.hpp>
+#include <boost/graph/properties.hpp>
+
+namespace boost {
+
+ //
+ // The edge_list class is an EdgeListGraph module that is constructed
+ // from a pair of iterators whose value type is a pair of vertex
+ // descriptors.
+ //
+ // For example:
+ //
+ // typedef std::pair<int,int> E;
+ // list<E> elist;
+ // ...
+ // typedef edge_list<list<E>::iterator> Graph;
+ // Graph g(elist.begin(), elist.end());
+ //
+ // If the iterators are random access, then Graph::edge_descriptor
+ // is of Integral type, otherwise it is a struct, though it is
+ // convertible to an Integral type.
+ //
+
+ struct edge_list_tag { };
+
+ // The implementation class for edge_list.
+ template <class G, class EdgeIter, class T, class D>
+ class edge_list_impl
+ {
+ public:
+ typedef D edge_id;
+ typedef T Vpair;
+ typedef typename Vpair::first_type V;
+ typedef V vertex_descriptor;
+ typedef edge_list_tag graph_tag;
+ typedef void edge_property_type;
+
+ struct edge_descriptor
+ {
+ edge_descriptor() { }
+ edge_descriptor(EdgeIter p, edge_id id) : _ptr(p), _id(id) { }
+ operator edge_id() { return _id; }
+ EdgeIter _ptr;
+ edge_id _id;
+ };
+ typedef edge_descriptor E;
+
+ struct edge_iterator
+ {
+ typedef edge_iterator self;
+ typedef E value_type;
+ typedef E& reference;
+ typedef E* pointer;
+ typedef std::ptrdiff_t difference_type;
+ typedef std::input_iterator_tag iterator_category;
+ edge_iterator() { }
+ edge_iterator(EdgeIter iter) : _iter(iter), _i(0) { }
+ E operator*() { return E(_iter, _i); }
+ self& operator++() { ++_iter; ++_i; return *this; }
+ self operator++(int) { self t = *this; ++(*this); return t; }
+ bool operator==(const self& x) { return _iter == x._iter; }
+ bool operator!=(const self& x) { return _iter != x._iter; }
+ EdgeIter _iter;
+ edge_id _i;
+ };
+ typedef void out_edge_iterator;
+ typedef void in_edge_iterator;
+ typedef void adjacency_iterator;
+ typedef void vertex_iterator;
+ };
+
+ template <class G, class EI, class T, class D>
+ std::pair<typename edge_list_impl<G,EI,T,D>::edge_iterator,
+ typename edge_list_impl<G,EI,T,D>::edge_iterator>
+ edges(const edge_list_impl<G,EI,T,D>& g_) {
+ const G& g = static_cast<const G&>(g_);
+ typedef typename edge_list_impl<G,EI,T,D>::edge_iterator edge_iterator;
+ return std::make_pair(edge_iterator(g._first), edge_iterator(g._last));
+ }
+ template <class G, class EI, class T, class D>
+ typename edge_list_impl<G,EI,T,D>::vertex_descriptor
+ source(typename edge_list_impl<G,EI,T,D>::edge_descriptor e,
+ const edge_list_impl<G,EI,T,D>&) {
+ return (*e._ptr).first;
+ }
+ template <class G, class EI, class T, class D>
+ typename edge_list_impl<G,EI,T,D>::vertex_descriptor
+ target(typename edge_list_impl<G,EI,T,D>::edge_descriptor e,
+ const edge_list_impl<G,EI,T,D>&) {
+ return (*e._ptr).second;
+ }
+
+ template <class D, class E>
+ class el_edge_property_map
+ : public put_get_helper<D, el_edge_property_map<D,E> >{
+ public:
+ typedef E key_type;
+ typedef D value_type;
+ typedef D reference;
+ typedef readable_property_map_tag category;
+
+ value_type operator[](key_type e) const {
+ return e._i;
+ }
+ };
+ struct edge_list_edge_property_selector {
+ template <class Graph, class Property, class Tag>
+ struct bind_ {
+ typedef el_edge_property_map<typename Graph::edge_id,
+ typename Graph::edge_descriptor> type;
+ typedef type const_type;
+ };
+ };
+ template <>
+ struct edge_property_selector<edge_list_tag> {
+ typedef edge_list_edge_property_selector type;
+ };
+
+ template <class G, class EI, class T, class D>
+ typename property_map< edge_list_impl<G,EI,T,D>, edge_index_t>::type
+ get(edge_index_t, const edge_list_impl<G,EI,T,D>&) {
+ typedef typename property_map< edge_list_impl<G,EI,T,D>,
+ edge_index_t>::type EdgeIndexMap;
+ return EdgeIndexMap();
+ }
+
+ template <class G, class EI, class T, class D>
+ inline D
+ get(edge_index_t, const edge_list_impl<G,EI,T,D>&,
+ typename edge_list_impl<G,EI,T,D>::edge_descriptor e) {
+ return e._i;
+ }
+
+ // A specialized implementation for when the iterators are random access.
+
+ struct edge_list_ra_tag { };
+
+ template <class G, class EdgeIter, class T, class D>
+ class edge_list_impl_ra
+ {
+ public:
+ typedef D edge_id;
+ typedef T Vpair;
+ typedef typename Vpair::first_type V;
+ typedef edge_list_ra_tag graph_tag;
+ typedef void edge_property_type;
+
+ typedef edge_id edge_descriptor;
+ typedef V vertex_descriptor;
+ typedef typename boost::integer_range<edge_id>::iterator edge_iterator;
+ typedef void out_edge_iterator;
+ typedef void in_edge_iterator;
+ typedef void adjacency_iterator;
+ typedef void vertex_iterator;
+ };
+
+ template <class G, class EI, class T, class D>
+ std::pair<typename edge_list_impl_ra<G,EI,T,D>::edge_iterator,
+ typename edge_list_impl_ra<G,EI,T,D>::edge_iterator>
+ edges(const edge_list_impl_ra<G,EI,T,D>& g_)
+ {
+ const G& g = static_cast<const G&>(g_);
+ typedef typename edge_list_impl_ra<G,EI,T,D>::edge_iterator edge_iterator;
+ return std::make_pair(edge_iterator(0), edge_iterator(g._last - g._first));
+ }
+ template <class G, class EI, class T, class D>
+ typename edge_list_impl_ra<G,EI,T,D>::vertex_descriptor
+ source(typename edge_list_impl_ra<G,EI,T,D>::edge_descriptor e,
+ const edge_list_impl_ra<G,EI,T,D>& g_)
+ {
+ const G& g = static_cast<const G&>(g_);
+ return g._first[e].first;
+ }
+ template <class G, class EI, class T, class D>
+ typename edge_list_impl_ra<G,EI,T,D>::vertex_descriptor
+ target(typename edge_list_impl_ra<G,EI,T,D>::edge_descriptor e,
+ const edge_list_impl_ra<G,EI,T,D>& g_)
+ {
+ const G& g = static_cast<const G&>(g_);
+ return g._first[e].second;
+ }
+ template <class E>
+ class el_ra_edge_property_map
+ : public put_get_helper<E, el_ra_edge_property_map<E> >{
+ public:
+ typedef E key_type;
+ typedef E value_type;
+ typedef E reference;
+ typedef readable_property_map_tag category;
+
+ value_type operator[](key_type e) const {
+ return e;
+ }
+ };
+ struct edge_list_ra_edge_property_selector {
+ template <class Graph, class Property, class Tag>
+ struct bind_ {
+ typedef el_ra_edge_property_map<typename Graph::edge_descriptor> type;
+ typedef type const_type;
+ };
+ };
+ template <>
+ struct edge_property_selector<edge_list_ra_tag> {
+ typedef edge_list_ra_edge_property_selector type;
+ };
+ template <class G, class EI, class T, class D>
+ inline
+ typename property_map< edge_list_impl_ra<G,EI,T,D>, edge_index_t>::type
+ get(edge_index_t, const edge_list_impl_ra<G,EI,T,D>&) {
+ typedef typename property_map< edge_list_impl_ra<G,EI,T,D>,
+ edge_index_t>::type EdgeIndexMap;
+ return EdgeIndexMap();
+ }
+
+ template <class G, class EI, class T, class D>
+ inline D
+ get(edge_index_t, const edge_list_impl_ra<G,EI,T,D>&,
+ typename edge_list_impl_ra<G,EI,T,D>::edge_descriptor e) {
+ return e;
+ }
+
+
+ // Some helper classes for determining if the iterators are random access
+ template <class Cat>
+ struct is_random {
+ enum { RET = false };
+ typedef false_type type;
+ };
+ template <>
+ struct is_random<std::random_access_iterator_tag> {
+ enum { RET = true }; typedef true_type type;
+ };
+
+ // The edge_list class conditionally inherits from one of the
+ // above two classes.
+
+ template <class EdgeIter,
+#if !defined BOOST_NO_STD_ITERATOR_TRAITS
+ class T = typename std::iterator_traits<EdgeIter>::value_type,
+ class D = typename std::iterator_traits<EdgeIter>::difference_type,
+ class Cat = typename std::iterator_traits<EdgeIter>::iterator_category>
+#else
+ class T,
+ class D,
+ class Cat>
+#endif
+ class edge_list
+ : public ct_if_t< typename is_random<Cat>::type,
+ edge_list_impl_ra< edge_list<EdgeIter,T,D,Cat>, EdgeIter,T,D>,
+ edge_list_impl< edge_list<EdgeIter,T,D,Cat>, EdgeIter,T,D>
+ >::type
+ {
+ public:
+ typedef directed_tag directed_category;
+ typedef allow_parallel_edge_tag edge_parallel_category;
+ typedef edge_list_graph_tag traversal_category;
+ typedef std::size_t edges_size_type;
+ typedef std::size_t vertices_size_type;
+ typedef std::size_t degree_size_type;
+ edge_list(EdgeIter first, EdgeIter last) : _first(first), _last(last) {
+ m_num_edges = std::distance(first, last);
+ }
+ edge_list(EdgeIter first, EdgeIter last, edges_size_type E)
+ : _first(first), _last(last), m_num_edges(E) { }
+
+ EdgeIter _first, _last;
+ edges_size_type m_num_edges;
+ };
+
+ template <class EdgeIter, class T, class D, class Cat>
+ std::size_t num_edges(const edge_list<EdgeIter, T, D, Cat>& el) {
+ return el.m_num_edges;
+ }
+
+#ifndef BOOST_NO_STD_ITERATOR_TRAITS
+ template <class EdgeIter>
+ inline edge_list<EdgeIter>
+ make_edge_list(EdgeIter first, EdgeIter last)
+ {
+ return edge_list<EdgeIter>(first, last);
+ }
+#endif
+
+} /* namespace boost */
+
+#endif /* BOOST_GRAPH_EDGE_LIST_HPP */
diff --git a/boost/boost/graph/edmunds_karp_max_flow.hpp b/boost/boost/graph/edmunds_karp_max_flow.hpp
new file mode 100644
index 00000000000..ddb49dc6d66
--- /dev/null
+++ b/boost/boost/graph/edmunds_karp_max_flow.hpp
@@ -0,0 +1,250 @@
+//=======================================================================
+// Copyright 2000 University of Notre Dame.
+// Authors: Jeremy G. Siek, Andrew Lumsdaine, Lie-Quan Lee
+//
+// 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 EDMUNDS_KARP_MAX_FLOW_HPP
+#define EDMUNDS_KARP_MAX_FLOW_HPP
+
+#include <boost/config.hpp>
+#include <vector>
+#include <algorithm> // for std::min and std::max
+#include <boost/config.hpp>
+#include <boost/pending/queue.hpp>
+#include <boost/property_map.hpp>
+#include <boost/graph/graph_traits.hpp>
+#include <boost/graph/properties.hpp>
+#include <boost/graph/filtered_graph.hpp>
+#include <boost/graph/breadth_first_search.hpp>
+
+namespace boost {
+
+ // The "labeling" algorithm from "Network Flows" by Ahuja, Magnanti,
+ // Orlin. I think this is the same as or very similar to the original
+ // Edmunds-Karp algorithm. This solves the maximum flow problem.
+
+ namespace detail {
+
+ template <class Graph, class ResCapMap>
+ filtered_graph<Graph, is_residual_edge<ResCapMap> >
+ residual_graph(Graph& g, ResCapMap residual_capacity) {
+ return filtered_graph<Graph, is_residual_edge<ResCapMap> >
+ (g, is_residual_edge<ResCapMap>(residual_capacity));
+ }
+
+ template <class Graph, class PredEdgeMap, class ResCapMap,
+ class RevEdgeMap>
+ inline void
+ augment(Graph& g,
+ typename graph_traits<Graph>::vertex_descriptor src,
+ typename graph_traits<Graph>::vertex_descriptor sink,
+ PredEdgeMap p,
+ ResCapMap residual_capacity,
+ RevEdgeMap reverse_edge)
+ {
+ typename graph_traits<Graph>::edge_descriptor e;
+ typename graph_traits<Graph>::vertex_descriptor u;
+ typedef typename property_traits<ResCapMap>::value_type FlowValue;
+
+ // find minimum residual capacity along the augmenting path
+ FlowValue delta = (std::numeric_limits<FlowValue>::max)();
+ e = p[sink];
+ do {
+ BOOST_USING_STD_MIN();
+ delta = min BOOST_PREVENT_MACRO_SUBSTITUTION(delta, residual_capacity[e]);
+ u = source(e, g);
+ e = p[u];
+ } while (u != src);
+
+ // push delta units of flow along the augmenting path
+ e = p[sink];
+ do {
+ residual_capacity[e] -= delta;
+ residual_capacity[reverse_edge[e]] += delta;
+ u = source(e, g);
+ e = p[u];
+ } while (u != src);
+ }
+
+ } // namespace detail
+
+ template <class Graph,
+ class CapacityEdgeMap, class ResidualCapacityEdgeMap,
+ class ReverseEdgeMap, class ColorMap, class PredEdgeMap>
+ typename property_traits<CapacityEdgeMap>::value_type
+ edmunds_karp_max_flow
+ (Graph& g,
+ typename graph_traits<Graph>::vertex_descriptor src,
+ typename graph_traits<Graph>::vertex_descriptor sink,
+ CapacityEdgeMap cap,
+ ResidualCapacityEdgeMap res,
+ ReverseEdgeMap rev,
+ ColorMap color,
+ PredEdgeMap pred)
+ {
+ typedef typename graph_traits<Graph>::vertex_descriptor vertex_t;
+ typedef typename property_traits<ColorMap>::value_type ColorValue;
+ typedef color_traits<ColorValue> Color;
+
+ typename graph_traits<Graph>::vertex_iterator u_iter, u_end;
+ typename graph_traits<Graph>::out_edge_iterator ei, e_end;
+ for (tie(u_iter, u_end) = vertices(g); u_iter != u_end; ++u_iter)
+ for (tie(ei, e_end) = out_edges(*u_iter, g); ei != e_end; ++ei)
+ res[*ei] = cap[*ei];
+
+ color[sink] = Color::gray();
+ while (color[sink] != Color::white()) {
+ boost::queue<vertex_t> Q;
+ breadth_first_search
+ (detail::residual_graph(g, res), src, Q,
+ make_bfs_visitor(record_edge_predecessors(pred, on_tree_edge())),
+ color);
+ if (color[sink] != Color::white())
+ detail::augment(g, src, sink, pred, res, rev);
+ } // while
+
+ typename property_traits<CapacityEdgeMap>::value_type flow = 0;
+ for (tie(ei, e_end) = out_edges(src, g); ei != e_end; ++ei)
+ flow += (cap[*ei] - res[*ei]);
+ return flow;
+ } // edmunds_karp_max_flow()
+
+ namespace detail {
+ //-------------------------------------------------------------------------
+ // Handle default for color property map
+
+ // use of class here is a VC++ workaround
+ template <class ColorMap>
+ struct edmunds_karp_dispatch2 {
+ template <class Graph, class PredMap, class P, class T, class R>
+ static typename edge_capacity_value<Graph, P, T, R>::type
+ apply
+ (Graph& g,
+ typename graph_traits<Graph>::vertex_descriptor src,
+ typename graph_traits<Graph>::vertex_descriptor sink,
+ PredMap pred,
+ const bgl_named_params<P, T, R>& params,
+ ColorMap color)
+ {
+ return edmunds_karp_max_flow
+ (g, src, sink,
+ choose_const_pmap(get_param(params, edge_capacity), g, edge_capacity),
+ choose_pmap(get_param(params, edge_residual_capacity),
+ g, edge_residual_capacity),
+ choose_const_pmap(get_param(params, edge_reverse), g, edge_reverse),
+ color, pred);
+ }
+ };
+ template<>
+ struct edmunds_karp_dispatch2<detail::error_property_not_found> {
+ template <class Graph, class PredMap, class P, class T, class R>
+ static typename edge_capacity_value<Graph, P, T, R>::type
+ apply
+ (Graph& g,
+ typename graph_traits<Graph>::vertex_descriptor src,
+ typename graph_traits<Graph>::vertex_descriptor sink,
+ PredMap pred,
+ const bgl_named_params<P, T, R>& params,
+ detail::error_property_not_found)
+ {
+ typedef typename graph_traits<Graph>::edge_descriptor edge_descriptor;
+ typedef typename graph_traits<Graph>::vertices_size_type size_type;
+ size_type n = is_default_param(get_param(params, vertex_color)) ?
+ num_vertices(g) : 1;
+ std::vector<default_color_type> color_vec(n);
+ return edmunds_karp_max_flow
+ (g, src, sink,
+ choose_const_pmap(get_param(params, edge_capacity), g, edge_capacity),
+ choose_pmap(get_param(params, edge_residual_capacity),
+ g, edge_residual_capacity),
+ choose_const_pmap(get_param(params, edge_reverse), g, edge_reverse),
+ make_iterator_property_map(color_vec.begin(), choose_const_pmap
+ (get_param(params, vertex_index),
+ g, vertex_index), color_vec[0]),
+ pred);
+ }
+ };
+
+ //-------------------------------------------------------------------------
+ // Handle default for predecessor property map
+
+ // use of class here is a VC++ workaround
+ template <class PredMap>
+ struct edmunds_karp_dispatch1 {
+ template <class Graph, class P, class T, class R>
+ static typename edge_capacity_value<Graph, P, T, R>::type
+ apply(Graph& g,
+ typename graph_traits<Graph>::vertex_descriptor src,
+ typename graph_traits<Graph>::vertex_descriptor sink,
+ const bgl_named_params<P, T, R>& params,
+ PredMap pred)
+ {
+ typedef typename property_value< bgl_named_params<P,T,R>, vertex_color_t>::type C;
+ return edmunds_karp_dispatch2<C>::apply
+ (g, src, sink, pred, params, get_param(params, vertex_color));
+ }
+ };
+ template<>
+ struct edmunds_karp_dispatch1<detail::error_property_not_found> {
+
+ template <class Graph, class P, class T, class R>
+ static typename edge_capacity_value<Graph, P, T, R>::type
+ apply
+ (Graph& g,
+ typename graph_traits<Graph>::vertex_descriptor src,
+ typename graph_traits<Graph>::vertex_descriptor sink,
+ const bgl_named_params<P, T, R>& params,
+ detail::error_property_not_found)
+ {
+ typedef typename graph_traits<Graph>::edge_descriptor edge_descriptor;
+ typedef typename graph_traits<Graph>::vertices_size_type size_type;
+ size_type n = is_default_param(get_param(params, vertex_predecessor)) ?
+ num_vertices(g) : 1;
+ std::vector<edge_descriptor> pred_vec(n);
+
+ typedef typename property_value< bgl_named_params<P,T,R>, vertex_color_t>::type C;
+ return edmunds_karp_dispatch2<C>::apply
+ (g, src, sink,
+ make_iterator_property_map(pred_vec.begin(), choose_const_pmap
+ (get_param(params, vertex_index),
+ g, vertex_index), pred_vec[0]),
+ params,
+ get_param(params, vertex_color));
+ }
+ };
+
+ } // namespace detail
+
+ template <class Graph, class P, class T, class R>
+ typename detail::edge_capacity_value<Graph, P, T, R>::type
+ edmunds_karp_max_flow
+ (Graph& g,
+ typename graph_traits<Graph>::vertex_descriptor src,
+ typename graph_traits<Graph>::vertex_descriptor sink,
+ const bgl_named_params<P, T, R>& params)
+ {
+ typedef typename property_value< bgl_named_params<P,T,R>, vertex_predecessor_t>::type Pred;
+ return detail::edmunds_karp_dispatch1<Pred>::apply
+ (g, src, sink, params, get_param(params, vertex_predecessor));
+ }
+
+ template <class Graph>
+ typename property_traits<
+ typename property_map<Graph, edge_capacity_t>::const_type
+ >::value_type
+ edmunds_karp_max_flow
+ (Graph& g,
+ typename graph_traits<Graph>::vertex_descriptor src,
+ typename graph_traits<Graph>::vertex_descriptor sink)
+ {
+ bgl_named_params<int, buffer_param_t> params(0);
+ return edmunds_karp_max_flow(g, src, sink, params);
+ }
+
+} // namespace boost
+
+#endif // EDMUNDS_KARP_MAX_FLOW_HPP
diff --git a/boost/boost/graph/erdos_renyi_generator.hpp b/boost/boost/graph/erdos_renyi_generator.hpp
new file mode 100644
index 00000000000..188a3f18e61
--- /dev/null
+++ b/boost/boost/graph/erdos_renyi_generator.hpp
@@ -0,0 +1,228 @@
+// Copyright 2004, 2005 The Trustees of Indiana University.
+
+// 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)
+
+// Authors: Jeremiah Willcock
+// Douglas Gregor
+// Andrew Lumsdaine
+#ifndef BOOST_GRAPH_ERDOS_RENYI_GENERATOR_HPP
+#define BOOST_GRAPH_ERDOS_RENYI_GENERATOR_HPP
+
+#include <cassert>
+#include <iterator>
+#include <utility>
+#include <boost/shared_ptr.hpp>
+#include <boost/random/uniform_int.hpp>
+#include <boost/graph/graph_traits.hpp>
+#include <boost/random/geometric_distribution.hpp>
+#include <boost/type_traits/is_base_and_derived.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <cmath>
+
+namespace boost {
+
+ template<typename RandomGenerator, typename Graph>
+ class erdos_renyi_iterator
+ {
+ typedef typename graph_traits<Graph>::directed_category directed_category;
+ typedef typename graph_traits<Graph>::vertices_size_type vertices_size_type;
+ typedef typename graph_traits<Graph>::edges_size_type edges_size_type;
+
+ BOOST_STATIC_CONSTANT
+ (bool,
+ is_undirected = (is_base_and_derived<undirected_tag,
+ directed_category>::value
+ || is_same<undirected_tag, directed_category>::value));
+
+ public:
+ typedef std::input_iterator_tag iterator_category;
+ typedef std::pair<vertices_size_type, vertices_size_type> value_type;
+ typedef const value_type& reference;
+ typedef const value_type* pointer;
+ typedef void difference_type;
+
+ erdos_renyi_iterator() : gen(), n(0), edges(0), allow_self_loops(false) {}
+ erdos_renyi_iterator(RandomGenerator& gen, vertices_size_type n,
+ double fraction = 0.0, bool allow_self_loops = false)
+ : gen(&gen), n(n), edges(edges_size_type(fraction * n * n)),
+ allow_self_loops(allow_self_loops)
+ {
+ if (is_undirected) edges = edges / 2;
+ next();
+ }
+
+ erdos_renyi_iterator(RandomGenerator& gen, vertices_size_type n,
+ edges_size_type m, bool allow_self_loops = false)
+ : gen(&gen), n(n), edges(m),
+ allow_self_loops(allow_self_loops)
+ {
+ next();
+ }
+
+ reference operator*() const { return current; }
+ pointer operator->() const { return &current; }
+
+ erdos_renyi_iterator& operator++()
+ {
+ --edges;
+ next();
+ return *this;
+ }
+
+ erdos_renyi_iterator operator++(int)
+ {
+ erdos_renyi_iterator temp(*this);
+ ++(*this);
+ return temp;
+ }
+
+ bool operator==(const erdos_renyi_iterator& other) const
+ { return edges == other.edges; }
+
+ bool operator!=(const erdos_renyi_iterator& other) const
+ { return !(*this == other); }
+
+ private:
+ void next()
+ {
+ uniform_int<vertices_size_type> rand_vertex(0, n-1);
+ current.first = rand_vertex(*gen);
+ do {
+ current.second = rand_vertex(*gen);
+ } while (current.first == current.second && !allow_self_loops);
+ }
+
+ RandomGenerator* gen;
+ vertices_size_type n;
+ edges_size_type edges;
+ bool allow_self_loops;
+ value_type current;
+ };
+
+ template<typename RandomGenerator, typename Graph>
+ class sorted_erdos_renyi_iterator
+ {
+ typedef typename graph_traits<Graph>::directed_category directed_category;
+ typedef typename graph_traits<Graph>::vertices_size_type vertices_size_type;
+ typedef typename graph_traits<Graph>::edges_size_type edges_size_type;
+
+ BOOST_STATIC_CONSTANT
+ (bool,
+ is_undirected = (is_base_and_derived<undirected_tag,
+ directed_category>::value
+ || is_same<undirected_tag, directed_category>::value));
+
+ public:
+ typedef std::input_iterator_tag iterator_category;
+ typedef std::pair<vertices_size_type, vertices_size_type> value_type;
+ typedef const value_type& reference;
+ typedef const value_type* pointer;
+ typedef void difference_type;
+
+ sorted_erdos_renyi_iterator()
+ : gen(), rand_vertex(0.5), n(0), allow_self_loops(false),
+ src((std::numeric_limits<vertices_size_type>::max)()), tgt(0), prob(0) {}
+ sorted_erdos_renyi_iterator(RandomGenerator& gen, vertices_size_type n,
+ double prob = 0.0,
+ bool allow_self_loops = false)
+ : gen(),
+ // The "1.0 - prob" in the next line is to work around a Boost.Random
+ // (and TR1) bug in the specification of geometric_distribution. It
+ // should be replaced by "prob" when the issue is fixed.
+ rand_vertex(1.0 - prob),
+ n(n), allow_self_loops(allow_self_loops), src(0), tgt(0), prob(prob)
+ {
+ this->gen.reset(new uniform_01<RandomGenerator>(gen));
+
+ if (prob == 0.0) {src = (std::numeric_limits<vertices_size_type>::max)(); return;}
+ next();
+ }
+
+ reference operator*() const { return current; }
+ pointer operator->() const { return &current; }
+
+ sorted_erdos_renyi_iterator& operator++()
+ {
+ next();
+ return *this;
+ }
+
+ sorted_erdos_renyi_iterator operator++(int)
+ {
+ sorted_erdos_renyi_iterator temp(*this);
+ ++(*this);
+ return temp;
+ }
+
+ bool operator==(const sorted_erdos_renyi_iterator& other) const
+ { return src == other.src && tgt == other.tgt; }
+
+ bool operator!=(const sorted_erdos_renyi_iterator& other) const
+ { return !(*this == other); }
+
+ private:
+ void next()
+ {
+ using std::sqrt;
+ using std::floor;
+
+ // In order to get the edges from the generator in sorted order, one
+ // effective (but slow) procedure would be to use a
+ // bernoulli_distribution for each legal (src, tgt) pair. Because of the
+ // O(n^2) cost of that, a geometric distribution is used. The geometric
+ // distribution tells how many times the bernoulli_distribution would
+ // need to be run until it returns true. Thus, this distribution can be
+ // used to step through the edges which are actually present. Everything
+ // beyond "tgt += increment" is done to effectively convert linear
+ // indexing (the partial sums of the geometric distribution output) into
+ // graph edges.
+ assert (src != (std::numeric_limits<vertices_size_type>::max)());
+ vertices_size_type increment = rand_vertex(*gen);
+ tgt += increment;
+ if (is_undirected) {
+ // Update src and tgt based on position of tgt
+ // Basically, we want the greatest src_increment such that (in \bbQ):
+ // src_increment * (src + allow_self_loops + src_increment - 1/2) <= tgt
+ // The result of the LHS of this, evaluated with the computed
+ // src_increment, is then subtracted from tgt
+ double src_minus_half = (src + allow_self_loops) - 0.5;
+ double disc = src_minus_half * src_minus_half + 2 * tgt;
+ double src_increment_fp = floor(sqrt(disc) - src_minus_half);
+ vertices_size_type src_increment = vertices_size_type(src_increment_fp);
+ if (src + src_increment >= n) {
+ src = n;
+ } else {
+ tgt -= (src + allow_self_loops) * src_increment +
+ src_increment * (src_increment - 1) / 2;
+ src += src_increment;
+ }
+ } else {
+ // Number of out edge positions possible from each vertex in this graph
+ vertices_size_type possible_out_edges = n - (allow_self_loops ? 0 : 1);
+ src += (std::min)(n - src, tgt / possible_out_edges);
+ tgt %= possible_out_edges;
+ }
+ // Set end of graph code so (src, tgt) will be the same as for the end
+ // sorted_erdos_renyi_iterator
+ if (src >= n) {src = (std::numeric_limits<vertices_size_type>::max)(); tgt = 0;}
+ // Copy (src, tgt) into current
+ current.first = src;
+ current.second = tgt;
+ // Adjust for (src, src) edge being forbidden
+ if (!allow_self_loops && tgt >= src) ++current.second;
+ }
+
+ shared_ptr<uniform_01<RandomGenerator> > gen;
+ geometric_distribution<vertices_size_type> rand_vertex;
+ vertices_size_type n;
+ bool allow_self_loops;
+ vertices_size_type src, tgt;
+ value_type current;
+ double prob;
+ };
+
+} // end namespace boost
+
+#endif // BOOST_GRAPH_ERDOS_RENYI_GENERATOR_HPP
diff --git a/boost/boost/graph/exception.hpp b/boost/boost/graph/exception.hpp
new file mode 100644
index 00000000000..09c82edc3c8
--- /dev/null
+++ b/boost/boost/graph/exception.hpp
@@ -0,0 +1,44 @@
+//=======================================================================
+// Copyright 2002 Indiana University.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// 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_GRAPH_EXCEPTION_HPP
+#define BOOST_GRAPH_EXCEPTION_HPP
+
+#include <stdexcept>
+#include <string>
+
+namespace boost {
+
+ struct bad_graph : public std::invalid_argument {
+ bad_graph(const std::string& what_arg)
+ : std::invalid_argument(what_arg) { }
+ };
+
+ struct not_a_dag : public bad_graph {
+ not_a_dag()
+ : bad_graph("The graph must be a DAG.") { }
+ };
+
+ struct negative_edge : public bad_graph {
+ negative_edge()
+ : bad_graph("The graph may not contain an edge with negative weight."){ }
+ };
+
+ struct negative_cycle : public bad_graph {
+ negative_cycle()
+ : bad_graph("The graph may not contain negative cycles.") { }
+ };
+ struct not_connected : public bad_graph {
+ not_connected()
+ : bad_graph("The graph must be connected.") { }
+ };
+
+} // namespace boost
+
+#endif // BOOST_GRAPH_EXCEPTION_HPP
diff --git a/boost/boost/graph/filtered_graph.hpp b/boost/boost/graph/filtered_graph.hpp
new file mode 100644
index 00000000000..2a30a7127c5
--- /dev/null
+++ b/boost/boost/graph/filtered_graph.hpp
@@ -0,0 +1,507 @@
+//=======================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// 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_FILTERED_GRAPH_HPP
+#define BOOST_FILTERED_GRAPH_HPP
+
+#include <boost/graph/graph_traits.hpp>
+#include <boost/graph/properties.hpp>
+#include <boost/graph/adjacency_iterator.hpp>
+#include <boost/iterator/filter_iterator.hpp>
+
+namespace boost {
+
+ //=========================================================================
+ // Some predicate classes.
+
+ struct keep_all {
+ template <typename T>
+ bool operator()(const T&) const { return true; }
+ };
+
+ // Keep residual edges (used in maximum-flow algorithms).
+ template <typename ResidualCapacityEdgeMap>
+ struct is_residual_edge {
+ is_residual_edge() { }
+ is_residual_edge(ResidualCapacityEdgeMap rcap) : m_rcap(rcap) { }
+ template <typename Edge>
+ bool operator()(const Edge& e) const {
+ return 0 < get(m_rcap, e);
+ }
+ ResidualCapacityEdgeMap m_rcap;
+ };
+
+ template <typename Set>
+ struct is_in_subset {
+ is_in_subset() : m_s(0) { }
+ is_in_subset(const Set& s) : m_s(&s) { }
+
+ template <typename Elt>
+ bool operator()(const Elt& x) const {
+ return set_contains(*m_s, x);
+ }
+ const Set* m_s;
+ };
+
+ template <typename Set>
+ struct is_not_in_subset {
+ is_not_in_subset() : m_s(0) { }
+ is_not_in_subset(const Set& s) : m_s(&s) { }
+
+ template <typename Elt>
+ bool operator()(const Elt& x) const {
+ return !set_contains(*m_s, x);
+ }
+ const Set* m_s;
+ };
+
+ namespace detail {
+
+ template <typename EdgePredicate, typename VertexPredicate, typename Graph>
+ struct out_edge_predicate {
+ out_edge_predicate() { }
+ out_edge_predicate(EdgePredicate ep, VertexPredicate vp,
+ const Graph& g)
+ : m_edge_pred(ep), m_vertex_pred(vp), m_g(&g) { }
+
+ template <typename Edge>
+ bool operator()(const Edge& e) const {
+ return m_edge_pred(e) && m_vertex_pred(target(e, *m_g));
+ }
+ EdgePredicate m_edge_pred;
+ VertexPredicate m_vertex_pred;
+ const Graph* m_g;
+ };
+
+ template <typename EdgePredicate, typename VertexPredicate, typename Graph>
+ struct in_edge_predicate {
+ in_edge_predicate() { }
+ in_edge_predicate(EdgePredicate ep, VertexPredicate vp,
+ const Graph& g)
+ : m_edge_pred(ep), m_vertex_pred(vp), m_g(&g) { }
+
+ template <typename Edge>
+ bool operator()(const Edge& e) const {
+ return m_edge_pred(e) && m_vertex_pred(source(e, *m_g));
+ }
+ EdgePredicate m_edge_pred;
+ VertexPredicate m_vertex_pred;
+ const Graph* m_g;
+ };
+
+ template <typename EdgePredicate, typename VertexPredicate, typename Graph>
+ struct edge_predicate {
+ edge_predicate() { }
+ edge_predicate(EdgePredicate ep, VertexPredicate vp,
+ const Graph& g)
+ : m_edge_pred(ep), m_vertex_pred(vp), m_g(&g) { }
+
+ template <typename Edge>
+ bool operator()(const Edge& e) const {
+ return m_edge_pred(e)
+ && m_vertex_pred(source(e, *m_g)) && m_vertex_pred(target(e, *m_g));
+ }
+ EdgePredicate m_edge_pred;
+ VertexPredicate m_vertex_pred;
+ const Graph* m_g;
+ };
+
+ } // namespace detail
+
+
+ //===========================================================================
+ // Filtered Graph
+
+ struct filtered_graph_tag { };
+
+ // This base class is a stupid hack to change overload resolution
+ // rules for the source and target functions so that they are a
+ // worse match than the source and target functions defined for
+ // pairs in graph_traits.hpp. I feel dirty. -JGS
+ template <class G>
+ struct filtered_graph_base {
+ typedef graph_traits<G> Traits;
+ typedef typename Traits::vertex_descriptor vertex_descriptor;
+ typedef typename Traits::edge_descriptor edge_descriptor;
+ filtered_graph_base(const G& g) : m_g(g) { }
+ //protected:
+ const G& m_g;
+ };
+
+ template <typename Graph,
+ typename EdgePredicate,
+ typename VertexPredicate = keep_all>
+ class filtered_graph : public filtered_graph_base<Graph> {
+ typedef filtered_graph_base<Graph> Base;
+ typedef graph_traits<Graph> Traits;
+ typedef filtered_graph self;
+ public:
+ typedef Graph graph_type;
+ typedef detail::out_edge_predicate<EdgePredicate,
+ VertexPredicate, self> OutEdgePred;
+ typedef detail::in_edge_predicate<EdgePredicate,
+ VertexPredicate, self> InEdgePred;
+ typedef detail::edge_predicate<EdgePredicate,
+ VertexPredicate, self> EdgePred;
+
+ // Constructors
+ filtered_graph(const Graph& g, EdgePredicate ep)
+ : Base(g), m_edge_pred(ep) { }
+
+ filtered_graph(const Graph& g, EdgePredicate ep, VertexPredicate vp)
+ : Base(g), m_edge_pred(ep), m_vertex_pred(vp) { }
+
+ // Graph requirements
+ typedef typename Traits::vertex_descriptor vertex_descriptor;
+ typedef typename Traits::edge_descriptor edge_descriptor;
+ typedef typename Traits::directed_category directed_category;
+ typedef typename Traits::edge_parallel_category edge_parallel_category;
+ typedef typename Traits::traversal_category traversal_category;
+
+ // IncidenceGraph requirements
+ typedef filter_iterator<
+ OutEdgePred, typename Traits::out_edge_iterator
+ > out_edge_iterator;
+
+ typedef typename Traits::degree_size_type degree_size_type;
+
+ // AdjacencyGraph requirements
+ typedef typename adjacency_iterator_generator<self,
+ vertex_descriptor, out_edge_iterator>::type adjacency_iterator;
+
+ // BidirectionalGraph requirements
+ typedef filter_iterator<
+ InEdgePred, typename Traits::in_edge_iterator
+ > in_edge_iterator;
+
+ // VertexListGraph requirements
+ typedef filter_iterator<
+ VertexPredicate, typename Traits::vertex_iterator
+ > vertex_iterator;
+ typedef typename Traits::vertices_size_type vertices_size_type;
+
+ // EdgeListGraph requirements
+ typedef filter_iterator<
+ EdgePred, typename Traits::edge_iterator
+ > edge_iterator;
+ typedef typename Traits::edges_size_type edges_size_type;
+
+ typedef typename ::boost::edge_property_type<Graph>::type edge_property_type;
+ typedef typename ::boost::vertex_property_type<Graph>::type vertex_property_type;
+ typedef filtered_graph_tag graph_tag;
+
+#ifndef BOOST_GRAPH_NO_BUNDLED_PROPERTIES
+ // Bundled properties support
+ template<typename Descriptor>
+ typename graph::detail::bundled_result<Graph, Descriptor>::type&
+ operator[](Descriptor x)
+ { return const_cast<Graph&>(this->m_g)[x]; }
+
+ template<typename Descriptor>
+ typename graph::detail::bundled_result<Graph, Descriptor>::type const&
+ operator[](Descriptor x) const
+ { return this->m_g[x]; }
+#endif // BOOST_GRAPH_NO_BUNDLED_PROPERTIES
+
+ static vertex_descriptor null_vertex()
+ {
+ return Graph::null_vertex();
+ }
+
+ //private:
+ EdgePredicate m_edge_pred;
+ VertexPredicate m_vertex_pred;
+ };
+
+#ifndef BOOST_GRAPH_NO_BUNDLED_PROPERTIES
+ template<typename Graph, typename EdgePredicate, typename VertexPredicate>
+ struct vertex_bundle_type<filtered_graph<Graph, EdgePredicate,
+ VertexPredicate> >
+ : vertex_bundle_type<Graph> { };
+
+ template<typename Graph, typename EdgePredicate, typename VertexPredicate>
+ struct edge_bundle_type<filtered_graph<Graph, EdgePredicate,
+ VertexPredicate> >
+ : edge_bundle_type<Graph> { };
+#endif // BOOST_GRAPH_NO_BUNDLED_PROPERTIES
+
+ //===========================================================================
+ // Non-member functions for the Filtered Edge Graph
+
+ // Helper functions
+ template <typename Graph, typename EdgePredicate>
+ inline filtered_graph<Graph, EdgePredicate>
+ make_filtered_graph(Graph& g, EdgePredicate ep) {
+ return filtered_graph<Graph, EdgePredicate>(g, ep);
+ }
+ template <typename Graph, typename EdgePredicate, typename VertexPredicate>
+ inline filtered_graph<Graph, EdgePredicate, VertexPredicate>
+ make_filtered_graph(Graph& g, EdgePredicate ep, VertexPredicate vp) {
+ return filtered_graph<Graph, EdgePredicate, VertexPredicate>(g, ep, vp);
+ }
+
+ template <typename Graph, typename EdgePredicate>
+ inline filtered_graph<const Graph, EdgePredicate>
+ make_filtered_graph(const Graph& g, EdgePredicate ep) {
+ return filtered_graph<const Graph, EdgePredicate>(g, ep);
+ }
+ template <typename Graph, typename EdgePredicate, typename VertexPredicate>
+ inline filtered_graph<const Graph, EdgePredicate, VertexPredicate>
+ make_filtered_graph(const Graph& g, EdgePredicate ep, VertexPredicate vp) {
+ return filtered_graph<const Graph, EdgePredicate, VertexPredicate>(g, ep, vp);
+ }
+
+ template <typename G, typename EP, typename VP>
+ std::pair<typename filtered_graph<G, EP, VP>::vertex_iterator,
+ typename filtered_graph<G, EP, VP>::vertex_iterator>
+ vertices(const filtered_graph<G, EP, VP>& g)
+ {
+ typedef filtered_graph<G, EP, VP> Graph;
+ typename graph_traits<G>::vertex_iterator f, l;
+ tie(f, l) = vertices(g.m_g);
+ typedef typename Graph::vertex_iterator iter;
+ return std::make_pair(iter(g.m_vertex_pred, f, l),
+ iter(g.m_vertex_pred, l, l));
+ }
+
+ template <typename G, typename EP, typename VP>
+ std::pair<typename filtered_graph<G, EP, VP>::edge_iterator,
+ typename filtered_graph<G, EP, VP>::edge_iterator>
+ edges(const filtered_graph<G, EP, VP>& g)
+ {
+ typedef filtered_graph<G, EP, VP> Graph;
+ typename Graph::EdgePred pred(g.m_edge_pred, g.m_vertex_pred, g);
+ typename graph_traits<G>::edge_iterator f, l;
+ tie(f, l) = edges(g.m_g);
+ typedef typename Graph::edge_iterator iter;
+ return std::make_pair(iter(pred, f, l), iter(pred, l, l));
+ }
+
+ // An alternative for num_vertices() and num_edges() would be to
+ // count the number in the filtered graph. This is problematic
+ // because of the interaction with the vertex indices... they would
+ // no longer go from 0 to num_vertices(), which would cause trouble
+ // for algorithms allocating property storage in an array. We could
+ // try to create a mapping to new recalibrated indices, but I don't
+ // see an efficient way to do this.
+ //
+ // However, the current solution is still unsatisfactory because
+ // the following semantic constraints no longer hold:
+ // tie(vi, viend) = vertices(g);
+ // assert(std::distance(vi, viend) == num_vertices(g));
+
+ template <typename G, typename EP, typename VP>
+ typename filtered_graph<G, EP, VP>::vertices_size_type
+ num_vertices(const filtered_graph<G, EP, VP>& g) {
+ return num_vertices(g.m_g);
+ }
+
+ template <typename G, typename EP, typename VP>
+ typename filtered_graph<G, EP, VP>::edges_size_type
+ num_edges(const filtered_graph<G, EP, VP>& g) {
+ return num_edges(g.m_g);
+ }
+
+ template <typename G>
+ typename filtered_graph_base<G>::vertex_descriptor
+ source(typename filtered_graph_base<G>::edge_descriptor e,
+ const filtered_graph_base<G>& g)
+ {
+ return source(e, g.m_g);
+ }
+
+ template <typename G>
+ typename filtered_graph_base<G>::vertex_descriptor
+ target(typename filtered_graph_base<G>::edge_descriptor e,
+ const filtered_graph_base<G>& g)
+ {
+ return target(e, g.m_g);
+ }
+
+ template <typename G, typename EP, typename VP>
+ std::pair<typename filtered_graph<G, EP, VP>::out_edge_iterator,
+ typename filtered_graph<G, EP, VP>::out_edge_iterator>
+ out_edges(typename filtered_graph<G, EP, VP>::vertex_descriptor u,
+ const filtered_graph<G, EP, VP>& g)
+ {
+ typedef filtered_graph<G, EP, VP> Graph;
+ typename Graph::OutEdgePred pred(g.m_edge_pred, g.m_vertex_pred, g);
+ typedef typename Graph::out_edge_iterator iter;
+ typename graph_traits<G>::out_edge_iterator f, l;
+ tie(f, l) = out_edges(u, g.m_g);
+ return std::make_pair(iter(pred, f, l), iter(pred, l, l));
+ }
+
+ template <typename G, typename EP, typename VP>
+ typename filtered_graph<G, EP, VP>::degree_size_type
+ out_degree(typename filtered_graph<G, EP, VP>::vertex_descriptor u,
+ const filtered_graph<G, EP, VP>& g)
+ {
+ typename filtered_graph<G, EP, VP>::degree_size_type n = 0;
+ typename filtered_graph<G, EP, VP>::out_edge_iterator f, l;
+ for (tie(f, l) = out_edges(u, g); f != l; ++f)
+ ++n;
+ return n;
+ }
+
+ template <typename G, typename EP, typename VP>
+ std::pair<typename filtered_graph<G, EP, VP>::adjacency_iterator,
+ typename filtered_graph<G, EP, VP>::adjacency_iterator>
+ adjacent_vertices(typename filtered_graph<G, EP, VP>::vertex_descriptor u,
+ const filtered_graph<G, EP, VP>& g)
+ {
+ typedef filtered_graph<G, EP, VP> Graph;
+ typedef typename Graph::adjacency_iterator adjacency_iterator;
+ typename Graph::out_edge_iterator f, l;
+ tie(f, l) = out_edges(u, g);
+ return std::make_pair(adjacency_iterator(f, const_cast<Graph*>(&g)),
+ adjacency_iterator(l, const_cast<Graph*>(&g)));
+ }
+
+ template <typename G, typename EP, typename VP>
+ std::pair<typename filtered_graph<G, EP, VP>::in_edge_iterator,
+ typename filtered_graph<G, EP, VP>::in_edge_iterator>
+ in_edges(typename filtered_graph<G, EP, VP>::vertex_descriptor u,
+ const filtered_graph<G, EP, VP>& g)
+ {
+ typedef filtered_graph<G, EP, VP> Graph;
+ typename Graph::InEdgePred pred(g.m_edge_pred, g.m_vertex_pred, g);
+ typedef typename Graph::in_edge_iterator iter;
+ typename graph_traits<G>::in_edge_iterator f, l;
+ tie(f, l) = in_edges(u, g.m_g);
+ return std::make_pair(iter(pred, f, l), iter(pred, l, l));
+ }
+
+ template <typename G, typename EP, typename VP>
+ typename filtered_graph<G, EP, VP>::degree_size_type
+ in_degree(typename filtered_graph<G, EP, VP>::vertex_descriptor u,
+ const filtered_graph<G, EP, VP>& g)
+ {
+ typename filtered_graph<G, EP, VP>::degree_size_type n = 0;
+ typename filtered_graph<G, EP, VP>::in_edge_iterator f, l;
+ for (tie(f, l) = in_edges(u, g); f != l; ++f)
+ ++n;
+ return n;
+ }
+
+ template <typename G, typename EP, typename VP>
+ std::pair<typename filtered_graph<G, EP, VP>::edge_descriptor, bool>
+ edge(typename filtered_graph<G, EP, VP>::vertex_descriptor u,
+ typename filtered_graph<G, EP, VP>::vertex_descriptor v,
+ const filtered_graph<G, EP, VP>& g)
+ {
+ typename graph_traits<G>::edge_descriptor e;
+ bool exists;
+ tie(e, exists) = edge(u, v, g.m_g);
+ return std::make_pair(e, exists && g.m_edge_pred(e));
+ }
+
+ template <typename G, typename EP, typename VP>
+ std::pair<typename filtered_graph<G, EP, VP>::out_edge_iterator,
+ typename filtered_graph<G, EP, VP>::out_edge_iterator>
+ edge_range(typename filtered_graph<G, EP, VP>::vertex_descriptor u,
+ typename filtered_graph<G, EP, VP>::vertex_descriptor v,
+ const filtered_graph<G, EP, VP>& g)
+ {
+ typedef filtered_graph<G, EP, VP> Graph;
+ typename Graph::OutEdgePred pred(g.m_edge_pred, g.m_vertex_pred, g);
+ typedef typename Graph::out_edge_iterator iter;
+ typename graph_traits<G>::out_edge_iterator f, l;
+ tie(f, l) = edge_range(u, v, g.m_g);
+ return std::make_pair(iter(pred, f, l), iter(pred, l, l));
+ }
+
+
+ //===========================================================================
+ // Property map
+
+ namespace detail {
+ struct filtered_graph_property_selector {
+ template <class FilteredGraph, class Property, class Tag>
+ struct bind_ {
+ typedef typename FilteredGraph::graph_type Graph;
+ typedef property_map<Graph, Tag> Map;
+ typedef typename Map::type type;
+ typedef typename Map::const_type const_type;
+ };
+ };
+ } // namespace detail
+
+ template <>
+ struct vertex_property_selector<filtered_graph_tag> {
+ typedef detail::filtered_graph_property_selector type;
+ };
+ template <>
+ struct edge_property_selector<filtered_graph_tag> {
+ typedef detail::filtered_graph_property_selector type;
+ };
+
+ template <typename G, typename EP, typename VP, typename Property>
+ typename property_map<G, Property>::type
+ get(Property p, filtered_graph<G, EP, VP>& g)
+ {
+ return get(p, const_cast<G&>(g.m_g));
+ }
+
+ template <typename G, typename EP, typename VP,typename Property>
+ typename property_map<G, Property>::const_type
+ get(Property p, const filtered_graph<G, EP, VP>& g)
+ {
+ return get(p, (const G&)g.m_g);
+ }
+
+ template <typename G, typename EP, typename VP, typename Property,
+ typename Key>
+ typename property_map_value<G, Property>::type
+ get(Property p, const filtered_graph<G, EP, VP>& g, const Key& k)
+ {
+ return get(p, (const G&)g.m_g, k);
+ }
+
+ template <typename G, typename EP, typename VP, typename Property,
+ typename Key, typename Value>
+ void
+ put(Property p, const filtered_graph<G, EP, VP>& g, const Key& k,
+ const Value& val)
+ {
+ put(p, const_cast<G&>(g.m_g), k, val);
+ }
+
+ //===========================================================================
+ // Some filtered subgraph specializations
+
+ template <typename Graph, typename Set>
+ struct vertex_subset_filter {
+ typedef filtered_graph<Graph, keep_all, is_in_subset<Set> > type;
+ };
+ template <typename Graph, typename Set>
+ inline typename vertex_subset_filter<Graph, Set>::type
+ make_vertex_subset_filter(Graph& g, const Set& s) {
+ typedef typename vertex_subset_filter<Graph, Set>::type Filter;
+ is_in_subset<Set> p(s);
+ return Filter(g, keep_all(), p);
+ }
+
+ template <typename Graph, typename Set>
+ struct vertex_subset_compliment_filter {
+ typedef filtered_graph<Graph, keep_all, is_not_in_subset<Set> > type;
+ };
+ template <typename Graph, typename Set>
+ inline typename vertex_subset_compliment_filter<Graph, Set>::type
+ make_vertex_subset_compliment_filter(Graph& g, const Set& s) {
+ typedef typename vertex_subset_compliment_filter<Graph, Set>::type Filter;
+ is_not_in_subset<Set> p(s);
+ return Filter(g, keep_all(), p);
+ }
+
+
+} // namespace boost
+
+
+#endif // BOOST_FILTERED_GRAPH_HPP
diff --git a/boost/boost/graph/floyd_warshall_shortest.hpp b/boost/boost/graph/floyd_warshall_shortest.hpp
new file mode 100644
index 00000000000..69c3e7edc70
--- /dev/null
+++ b/boost/boost/graph/floyd_warshall_shortest.hpp
@@ -0,0 +1,251 @@
+// Copyright 2002 Rensselaer Polytechnic Institute
+
+// 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)
+
+// Authors: Lauren Foutz
+// Scott Hill
+
+/*
+ This file implements the functions
+
+ template <class VertexListGraph, class DistanceMatrix,
+ class P, class T, class R>
+ bool floyd_warshall_initialized_all_pairs_shortest_paths(
+ const VertexListGraph& g, DistanceMatrix& d,
+ const bgl_named_params<P, T, R>& params)
+
+ AND
+
+ template <class VertexAndEdgeListGraph, class DistanceMatrix,
+ class P, class T, class R>
+ bool floyd_warshall_all_pairs_shortest_paths(
+ const VertexAndEdgeListGraph& g, DistanceMatrix& d,
+ const bgl_named_params<P, T, R>& params)
+*/
+
+
+#ifndef BOOST_GRAPH_FLOYD_WARSHALL_HPP
+#define BOOST_GRAPH_FLOYD_WARSHALL_HPP
+
+#include <boost/property_map.hpp>
+#include <boost/graph/graph_traits.hpp>
+#include <boost/graph/named_function_params.hpp>
+#include <boost/graph/graph_concepts.hpp>
+#include <boost/graph/relax.hpp>
+
+namespace boost
+{
+ namespace detail {
+ template<typename T, typename BinaryPredicate>
+ T min_with_compare(const T& x, const T& y, const BinaryPredicate& compare)
+ {
+ if (compare(x, y)) return x;
+ else return y;
+ }
+
+ template<typename VertexListGraph, typename DistanceMatrix,
+ typename BinaryPredicate, typename BinaryFunction,
+ typename Infinity, typename Zero>
+ bool floyd_warshall_dispatch(const VertexListGraph& g,
+ DistanceMatrix& d, const BinaryPredicate &compare,
+ const BinaryFunction &combine, const Infinity& inf,
+ const Zero& zero)
+ {
+ typename graph_traits<VertexListGraph>::vertex_iterator
+ i, lasti, j, lastj, k, lastk;
+
+
+ for (tie(k, lastk) = vertices(g); k != lastk; k++)
+ for (tie(i, lasti) = vertices(g); i != lasti; i++)
+ for (tie(j, lastj) = vertices(g); j != lastj; j++)
+ {
+ d[*i][*j] =
+ detail::min_with_compare(d[*i][*j],
+ combine(d[*i][*k], d[*k][*j]),
+ compare);
+ }
+
+
+ for (tie(i, lasti) = vertices(g); i != lasti; i++)
+ if (compare(d[*i][*i], zero))
+ return false;
+ return true;
+ }
+ }
+
+ template <typename VertexListGraph, typename DistanceMatrix,
+ typename BinaryPredicate, typename BinaryFunction,
+ typename Infinity, typename Zero>
+ bool floyd_warshall_initialized_all_pairs_shortest_paths(
+ const VertexListGraph& g, DistanceMatrix& d,
+ const BinaryPredicate& compare,
+ const BinaryFunction& combine, const Infinity& inf,
+ const Zero& zero)
+ {
+ function_requires<VertexListGraphConcept<VertexListGraph> >();
+
+ return detail::floyd_warshall_dispatch(g, d, compare, combine,
+ inf, zero);
+ }
+
+
+
+ template <typename VertexAndEdgeListGraph, typename DistanceMatrix,
+ typename WeightMap, typename BinaryPredicate,
+ typename BinaryFunction, typename Infinity, typename Zero>
+ bool floyd_warshall_all_pairs_shortest_paths(
+ const VertexAndEdgeListGraph& g,
+ DistanceMatrix& d, const WeightMap& w,
+ const BinaryPredicate& compare, const BinaryFunction& combine,
+ const Infinity& inf, const Zero& zero)
+ {
+ function_requires<VertexListGraphConcept<VertexAndEdgeListGraph> >();
+ function_requires<EdgeListGraphConcept<VertexAndEdgeListGraph> >();
+ function_requires<IncidenceGraphConcept<VertexAndEdgeListGraph> >();
+
+ typename graph_traits<VertexAndEdgeListGraph>::vertex_iterator
+ firstv, lastv, firstv2, lastv2;
+ typename graph_traits<VertexAndEdgeListGraph>::edge_iterator first, last;
+
+
+ for(tie(firstv, lastv) = vertices(g); firstv != lastv; firstv++)
+ for(tie(firstv2, lastv2) = vertices(g); firstv2 != lastv2; firstv2++)
+ d[*firstv][*firstv2] = inf;
+
+
+ for(tie(firstv, lastv) = vertices(g); firstv != lastv; firstv++)
+ d[*firstv][*firstv] = zero;
+
+
+ for(tie(first, last) = edges(g); first != last; first++)
+ {
+ if (d[source(*first, g)][target(*first, g)] != inf) {
+ d[source(*first, g)][target(*first, g)] =
+ detail::min_with_compare(
+ get(w, *first),
+ d[source(*first, g)][target(*first, g)],
+ compare);
+ } else
+ d[source(*first, g)][target(*first, g)] = get(w, *first);
+ }
+
+ bool is_undirected = is_same<typename
+ graph_traits<VertexAndEdgeListGraph>::directed_category,
+ undirected_tag>::value;
+ if (is_undirected)
+ {
+ for(tie(first, last) = edges(g); first != last; first++)
+ {
+ if (d[target(*first, g)][source(*first, g)] != inf)
+ d[target(*first, g)][source(*first, g)] =
+ detail::min_with_compare(
+ get(w, *first),
+ d[target(*first, g)][source(*first, g)],
+ compare);
+ else
+ d[target(*first, g)][source(*first, g)] = get(w, *first);
+ }
+ }
+
+
+ return detail::floyd_warshall_dispatch(g, d, compare, combine,
+ inf, zero);
+ }
+
+
+ namespace detail {
+ template <class VertexListGraph, class DistanceMatrix,
+ class WeightMap, class P, class T, class R>
+ bool floyd_warshall_init_dispatch(const VertexListGraph& g,
+ DistanceMatrix& d, WeightMap w,
+ const bgl_named_params<P, T, R>& params)
+ {
+ typedef typename property_traits<WeightMap>::value_type WM;
+
+ return floyd_warshall_initialized_all_pairs_shortest_paths(g, d,
+ choose_param(get_param(params, distance_compare_t()),
+ std::less<WM>()),
+ choose_param(get_param(params, distance_combine_t()),
+ closed_plus<WM>()),
+ choose_param(get_param(params, distance_inf_t()),
+ std::numeric_limits<WM>::max BOOST_PREVENT_MACRO_SUBSTITUTION()),
+ choose_param(get_param(params, distance_zero_t()),
+ WM()));
+ }
+
+
+
+ template <class VertexAndEdgeListGraph, class DistanceMatrix,
+ class WeightMap, class P, class T, class R>
+ bool floyd_warshall_noninit_dispatch(const VertexAndEdgeListGraph& g,
+ DistanceMatrix& d, WeightMap w,
+ const bgl_named_params<P, T, R>& params)
+ {
+ typedef typename property_traits<WeightMap>::value_type WM;
+
+ return floyd_warshall_all_pairs_shortest_paths(g, d, w,
+ choose_param(get_param(params, distance_compare_t()),
+ std::less<WM>()),
+ choose_param(get_param(params, distance_combine_t()),
+ closed_plus<WM>()),
+ choose_param(get_param(params, distance_inf_t()),
+ std::numeric_limits<WM>::max BOOST_PREVENT_MACRO_SUBSTITUTION()),
+ choose_param(get_param(params, distance_zero_t()),
+ WM()));
+ }
+
+
+ } // namespace detail
+
+
+
+ template <class VertexListGraph, class DistanceMatrix, class P,
+ class T, class R>
+ bool floyd_warshall_initialized_all_pairs_shortest_paths(
+ const VertexListGraph& g, DistanceMatrix& d,
+ const bgl_named_params<P, T, R>& params)
+ {
+ return detail::floyd_warshall_init_dispatch(g, d,
+ choose_const_pmap(get_param(params, edge_weight), g, edge_weight),
+ params);
+ }
+
+ template <class VertexListGraph, class DistanceMatrix>
+ bool floyd_warshall_initialized_all_pairs_shortest_paths(
+ const VertexListGraph& g, DistanceMatrix& d)
+ {
+ bgl_named_params<int,int> params(0);
+ return detail::floyd_warshall_init_dispatch(g, d,
+ get(edge_weight, g), params);
+ }
+
+
+
+
+ template <class VertexAndEdgeListGraph, class DistanceMatrix,
+ class P, class T, class R>
+ bool floyd_warshall_all_pairs_shortest_paths(
+ const VertexAndEdgeListGraph& g, DistanceMatrix& d,
+ const bgl_named_params<P, T, R>& params)
+ {
+ return detail::floyd_warshall_noninit_dispatch(g, d,
+ choose_const_pmap(get_param(params, edge_weight), g, edge_weight),
+ params);
+ }
+
+ template <class VertexAndEdgeListGraph, class DistanceMatrix>
+ bool floyd_warshall_all_pairs_shortest_paths(
+ const VertexAndEdgeListGraph& g, DistanceMatrix& d)
+ {
+ bgl_named_params<int,int> params(0);
+ return detail::floyd_warshall_noninit_dispatch(g, d,
+ get(edge_weight, g), params);
+ }
+
+
+} // namespace boost
+
+#endif
+
diff --git a/boost/boost/graph/fruchterman_reingold.hpp b/boost/boost/graph/fruchterman_reingold.hpp
new file mode 100644
index 00000000000..a93d2665cab
--- /dev/null
+++ b/boost/boost/graph/fruchterman_reingold.hpp
@@ -0,0 +1,420 @@
+// Copyright 2004 The Trustees of Indiana University.
+
+// 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)
+
+// Authors: Douglas Gregor
+// Andrew Lumsdaine
+#ifndef BOOST_GRAPH_FRUCHTERMAN_REINGOLD_FORCE_DIRECTED_LAYOUT_HPP
+#define BOOST_GRAPH_FRUCHTERMAN_REINGOLD_FORCE_DIRECTED_LAYOUT_HPP
+
+#include <cmath>
+#include <boost/graph/graph_traits.hpp>
+#include <boost/graph/named_function_params.hpp>
+#include <boost/graph/simple_point.hpp>
+#include <vector>
+#include <list>
+#include <algorithm> // for std::min and std::max
+
+namespace boost {
+
+struct square_distance_attractive_force {
+ template<typename Graph, typename T>
+ T
+ operator()(typename graph_traits<Graph>::edge_descriptor,
+ T k,
+ T d,
+ const Graph&) const
+ {
+ return d * d / k;
+ }
+};
+
+struct square_distance_repulsive_force {
+ template<typename Graph, typename T>
+ T
+ operator()(typename graph_traits<Graph>::vertex_descriptor,
+ typename graph_traits<Graph>::vertex_descriptor,
+ T k,
+ T d,
+ const Graph&) const
+ {
+ return k * k / d;
+ }
+};
+
+template<typename T>
+struct linear_cooling {
+ typedef T result_type;
+
+ linear_cooling(std::size_t iterations)
+ : temp(T(iterations) / T(10)), step(0.1) { }
+
+ linear_cooling(std::size_t iterations, T temp)
+ : temp(temp), step(temp / T(iterations)) { }
+
+ T operator()()
+ {
+ T old_temp = temp;
+ temp -= step;
+ if (temp < T(0)) temp = T(0);
+ return old_temp;
+ }
+
+ private:
+ T temp;
+ T step;
+};
+
+struct all_force_pairs
+{
+ template<typename Graph, typename ApplyForce >
+ void operator()(const Graph& g, ApplyForce apply_force)
+ {
+ typedef typename graph_traits<Graph>::vertex_iterator vertex_iterator;
+ vertex_iterator v, end;
+ for (tie(v, end) = vertices(g); v != end; ++v) {
+ vertex_iterator u = v;
+ for (++u; u != end; ++u) {
+ apply_force(*u, *v);
+ apply_force(*v, *u);
+ }
+ }
+ }
+};
+
+template<typename Dim, typename PositionMap>
+struct grid_force_pairs
+{
+ template<typename Graph>
+ explicit
+ grid_force_pairs(Dim width, Dim height, PositionMap position, const Graph& g)
+ : width(width), height(height), position(position)
+ {
+#ifndef BOOST_NO_STDC_NAMESPACE
+ using std::sqrt;
+#endif // BOOST_NO_STDC_NAMESPACE
+ two_k = Dim(2) * sqrt(width*height / num_vertices(g));
+ }
+
+ template<typename Graph, typename ApplyForce >
+ void operator()(const Graph& g, ApplyForce apply_force)
+ {
+ typedef typename graph_traits<Graph>::vertex_iterator vertex_iterator;
+ typedef typename graph_traits<Graph>::vertex_descriptor vertex_descriptor;
+ typedef std::list<vertex_descriptor> bucket_t;
+ typedef std::vector<bucket_t> buckets_t;
+
+ std::size_t columns = std::size_t(width / two_k + Dim(1));
+ std::size_t rows = std::size_t(height / two_k + Dim(1));
+ buckets_t buckets(rows * columns);
+ vertex_iterator v, v_end;
+ for (tie(v, v_end) = vertices(g); v != v_end; ++v) {
+ std::size_t column = std::size_t((position[*v].x + width / 2) / two_k);
+ std::size_t row = std::size_t((position[*v].y + height / 2) / two_k);
+
+ if (column >= columns) column = columns - 1;
+ if (row >= rows) row = rows - 1;
+ buckets[row * columns + column].push_back(*v);
+ }
+
+ for (std::size_t row = 0; row < rows; ++row)
+ for (std::size_t column = 0; column < columns; ++column) {
+ bucket_t& bucket = buckets[row * columns + column];
+ typedef typename bucket_t::iterator bucket_iterator;
+ for (bucket_iterator u = bucket.begin(); u != bucket.end(); ++u) {
+ // Repulse vertices in this bucket
+ bucket_iterator v = u;
+ for (++v; v != bucket.end(); ++v) {
+ apply_force(*u, *v);
+ apply_force(*v, *u);
+ }
+
+ std::size_t adj_start_row = row == 0? 0 : row - 1;
+ std::size_t adj_end_row = row == rows - 1? row : row + 1;
+ std::size_t adj_start_column = column == 0? 0 : column - 1;
+ std::size_t adj_end_column = column == columns - 1? column : column + 1;
+ for (std::size_t other_row = adj_start_row; other_row <= adj_end_row;
+ ++other_row)
+ for (std::size_t other_column = adj_start_column;
+ other_column <= adj_end_column; ++other_column)
+ if (other_row != row || other_column != column) {
+ // Repulse vertices in this bucket
+ bucket_t& other_bucket
+ = buckets[other_row * columns + other_column];
+ for (v = other_bucket.begin(); v != other_bucket.end(); ++v)
+ apply_force(*u, *v);
+ }
+ }
+ }
+ }
+
+ private:
+ Dim width;
+ Dim height;
+ PositionMap position;
+ Dim two_k;
+};
+
+template<typename Dim, typename PositionMap, typename Graph>
+inline grid_force_pairs<Dim, PositionMap>
+make_grid_force_pairs(Dim width, Dim height, const PositionMap& position,
+ const Graph& g)
+{ return grid_force_pairs<Dim, PositionMap>(width, height, position, g); }
+
+template<typename Graph, typename PositionMap, typename Dim>
+void
+scale_graph(const Graph& g, PositionMap position,
+ Dim left, Dim top, Dim right, Dim bottom)
+{
+ if (num_vertices(g) == 0) return;
+
+ if (bottom > top) {
+ using std::swap;
+ swap(bottom, top);
+ }
+
+ typedef typename graph_traits<Graph>::vertex_iterator vertex_iterator;
+
+ // Find min/max ranges
+ Dim minX = position[*vertices(g).first].x, maxX = minX;
+ Dim minY = position[*vertices(g).first].y, maxY = minY;
+ vertex_iterator vi, vi_end;
+ for (tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi) {
+ BOOST_USING_STD_MIN();
+ BOOST_USING_STD_MAX();
+ minX = min BOOST_PREVENT_MACRO_SUBSTITUTION (minX, position[*vi].x);
+ maxX = max BOOST_PREVENT_MACRO_SUBSTITUTION (maxX, position[*vi].x);
+ minY = min BOOST_PREVENT_MACRO_SUBSTITUTION (minY, position[*vi].y);
+ maxY = max BOOST_PREVENT_MACRO_SUBSTITUTION (maxY, position[*vi].y);
+ }
+
+ // Scale to bounding box provided
+ for (tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi) {
+ position[*vi].x = ((position[*vi].x - minX) / (maxX - minX))
+ * (right - left) + left;
+ position[*vi].y = ((position[*vi].y - minY) / (maxY - minY))
+ * (top - bottom) + bottom;
+ }
+}
+
+namespace detail {
+ template<typename PositionMap, typename DisplacementMap,
+ typename RepulsiveForce, typename Dim, typename Graph>
+ struct fr_apply_force
+ {
+ typedef typename graph_traits<Graph>::vertex_descriptor vertex_descriptor;
+
+ fr_apply_force(const PositionMap& position,
+ const DisplacementMap& displacement,
+ RepulsiveForce repulsive_force, Dim k, const Graph& g)
+ : position(position), displacement(displacement),
+ repulsive_force(repulsive_force), k(k), g(g)
+ { }
+
+ void operator()(vertex_descriptor u, vertex_descriptor v)
+ {
+#ifndef BOOST_NO_STDC_NAMESPACE
+ using std::sqrt;
+#endif // BOOST_NO_STDC_NAMESPACE
+ if (u != v) {
+ Dim delta_x = position[v].x - position[u].x;
+ Dim delta_y = position[v].y - position[u].y;
+ Dim dist = sqrt(delta_x * delta_x + delta_y * delta_y);
+ Dim fr = repulsive_force(u, v, k, dist, g);
+ displacement[v].x += delta_x / dist * fr;
+ displacement[v].y += delta_y / dist * fr;
+ }
+ }
+
+ private:
+ PositionMap position;
+ DisplacementMap displacement;
+ RepulsiveForce repulsive_force;
+ Dim k;
+ const Graph& g;
+ };
+
+} // end namespace detail
+
+template<typename Graph, typename PositionMap, typename Dim,
+ typename AttractiveForce, typename RepulsiveForce,
+ typename ForcePairs, typename Cooling, typename DisplacementMap>
+void
+fruchterman_reingold_force_directed_layout
+ (const Graph& g,
+ PositionMap position,
+ Dim width,
+ Dim height,
+ AttractiveForce attractive_force,
+ RepulsiveForce repulsive_force,
+ ForcePairs force_pairs,
+ Cooling cool,
+ DisplacementMap displacement)
+{
+ typedef typename graph_traits<Graph>::vertex_iterator vertex_iterator;
+ typedef typename graph_traits<Graph>::vertex_descriptor vertex_descriptor;
+ typedef typename graph_traits<Graph>::edge_iterator edge_iterator;
+
+#ifndef BOOST_NO_STDC_NAMESPACE
+ using std::sqrt;
+#endif // BOOST_NO_STDC_NAMESPACE
+
+ Dim area = width * height;
+ // assume positions are initialized randomly
+ Dim k = sqrt(area / num_vertices(g));
+
+ detail::fr_apply_force<PositionMap, DisplacementMap,
+ RepulsiveForce, Dim, Graph>
+ apply_force(position, displacement, repulsive_force, k, g);
+
+ Dim temp = cool();
+ if (temp) do {
+ // Calculate repulsive forces
+ vertex_iterator v, v_end;
+ for (tie(v, v_end) = vertices(g); v != v_end; ++v) {
+ displacement[*v].x = 0;
+ displacement[*v].y = 0;
+ }
+ force_pairs(g, apply_force);
+
+ // Calculate attractive forces
+ edge_iterator e, e_end;
+ for (tie(e, e_end) = edges(g); e != e_end; ++e) {
+ vertex_descriptor v = source(*e, g);
+ vertex_descriptor u = target(*e, g);
+ Dim delta_x = position[v].x - position[u].x;
+ Dim delta_y = position[v].y - position[u].y;
+ Dim dist = sqrt(delta_x * delta_x + delta_y * delta_y);
+ Dim fa = attractive_force(*e, k, dist, g);
+
+ displacement[v].x -= delta_x / dist * fa;
+ displacement[v].y -= delta_y / dist * fa;
+ displacement[u].x += delta_x / dist * fa;
+ displacement[u].y += delta_y / dist * fa;
+ }
+
+ // Update positions
+ for (tie(v, v_end) = vertices(g); v != v_end; ++v) {
+ BOOST_USING_STD_MIN();
+ BOOST_USING_STD_MAX();
+ Dim disp_size = sqrt(displacement[*v].x * displacement[*v].x
+ + displacement[*v].y * displacement[*v].y);
+ position[*v].x += displacement[*v].x / disp_size
+ * min BOOST_PREVENT_MACRO_SUBSTITUTION (disp_size, temp);
+ position[*v].y += displacement[*v].y / disp_size
+ * min BOOST_PREVENT_MACRO_SUBSTITUTION (disp_size, temp);
+ position[*v].x = min BOOST_PREVENT_MACRO_SUBSTITUTION
+ (width / 2,
+ max BOOST_PREVENT_MACRO_SUBSTITUTION(-width / 2,
+ position[*v].x));
+ position[*v].y = min BOOST_PREVENT_MACRO_SUBSTITUTION
+ (height / 2,
+ max BOOST_PREVENT_MACRO_SUBSTITUTION(-height / 2,
+ position[*v].y));
+ }
+ } while (temp = cool());
+}
+
+namespace detail {
+ template<typename DisplacementMap>
+ struct fr_force_directed_layout
+ {
+ template<typename Graph, typename PositionMap, typename Dim,
+ typename AttractiveForce, typename RepulsiveForce,
+ typename ForcePairs, typename Cooling,
+ typename Param, typename Tag, typename Rest>
+ static void
+ run(const Graph& g,
+ PositionMap position,
+ Dim width,
+ Dim height,
+ AttractiveForce attractive_force,
+ RepulsiveForce repulsive_force,
+ ForcePairs force_pairs,
+ Cooling cool,
+ DisplacementMap displacement,
+ const bgl_named_params<Param, Tag, Rest>&)
+ {
+ fruchterman_reingold_force_directed_layout
+ (g, position, width, height, attractive_force, repulsive_force,
+ force_pairs, cool, displacement);
+ }
+ };
+
+ template<>
+ struct fr_force_directed_layout<error_property_not_found>
+ {
+ template<typename Graph, typename PositionMap, typename Dim,
+ typename AttractiveForce, typename RepulsiveForce,
+ typename ForcePairs, typename Cooling,
+ typename Param, typename Tag, typename Rest>
+ static void
+ run(const Graph& g,
+ PositionMap position,
+ Dim width,
+ Dim height,
+ AttractiveForce attractive_force,
+ RepulsiveForce repulsive_force,
+ ForcePairs force_pairs,
+ Cooling cool,
+ error_property_not_found,
+ const bgl_named_params<Param, Tag, Rest>& params)
+ {
+ std::vector<simple_point<Dim> > displacements(num_vertices(g));
+ fruchterman_reingold_force_directed_layout
+ (g, position, width, height, attractive_force, repulsive_force,
+ force_pairs, cool,
+ make_iterator_property_map
+ (displacements.begin(),
+ choose_const_pmap(get_param(params, vertex_index), g,
+ vertex_index),
+ simple_point<Dim>()));
+ }
+ };
+
+} // end namespace detail
+
+template<typename Graph, typename PositionMap, typename Dim, typename Param,
+ typename Tag, typename Rest>
+void
+fruchterman_reingold_force_directed_layout
+ (const Graph& g,
+ PositionMap position,
+ Dim width,
+ Dim height,
+ const bgl_named_params<Param, Tag, Rest>& params)
+{
+ typedef typename property_value<bgl_named_params<Param,Tag,Rest>,
+ vertex_displacement_t>::type D;
+
+ detail::fr_force_directed_layout<D>::run
+ (g, position, width, height,
+ choose_param(get_param(params, attractive_force_t()),
+ square_distance_attractive_force()),
+ choose_param(get_param(params, repulsive_force_t()),
+ square_distance_repulsive_force()),
+ choose_param(get_param(params, force_pairs_t()),
+ make_grid_force_pairs(width, height, position, g)),
+ choose_param(get_param(params, cooling_t()),
+ linear_cooling<Dim>(100)),
+ get_param(params, vertex_displacement_t()),
+ params);
+}
+
+template<typename Graph, typename PositionMap, typename Dim>
+void
+fruchterman_reingold_force_directed_layout(const Graph& g,
+ PositionMap position,
+ Dim width,
+ Dim height)
+{
+ fruchterman_reingold_force_directed_layout
+ (g, position, width, height,
+ attractive_force(square_distance_attractive_force()));
+}
+
+} // end namespace boost
+
+#endif // BOOST_GRAPH_FRUCHTERMAN_REINGOLD_FORCE_DIRECTED_LAYOUT_HPP
diff --git a/boost/boost/graph/graph_archetypes.hpp b/boost/boost/graph/graph_archetypes.hpp
new file mode 100644
index 00000000000..ce4c85fd08f
--- /dev/null
+++ b/boost/boost/graph/graph_archetypes.hpp
@@ -0,0 +1,290 @@
+//=======================================================================
+// Copyright 2002 Indiana University.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// 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_GRAPH_ARCHETYPES_HPP
+#define BOOST_GRAPH_ARCHETYPES_HPP
+
+#include <boost/property_map.hpp>
+#include <boost/concept_archetype.hpp>
+
+namespace boost { // should use a different namespace for this
+
+ namespace detail {
+ struct null_graph_archetype : public null_archetype<> {
+ struct traversal_category { };
+ };
+ }
+
+ //===========================================================================
+ template <typename Vertex, typename Directed, typename ParallelCategory,
+ typename Base = detail::null_graph_archetype >
+ struct incidence_graph_archetype : public Base
+ {
+ typedef typename Base::traversal_category base_trav_cat;
+ struct traversal_category
+ : public incidence_graph_tag, public base_trav_cat { };
+#if 0
+ typedef immutable_graph_tag mutability_category;
+#endif
+ typedef Vertex vertex_descriptor;
+ typedef unsigned int degree_size_type;
+ typedef unsigned int vertices_size_type;
+ typedef unsigned int edges_size_type;
+ struct edge_descriptor {
+ edge_descriptor() { }
+ edge_descriptor(const detail::dummy_constructor&) { }
+ bool operator==(const edge_descriptor&) const { return false; }
+ bool operator!=(const edge_descriptor&) const { return false; }
+ };
+ typedef input_iterator_archetype<edge_descriptor> out_edge_iterator;
+
+ typedef Directed directed_category;
+ typedef ParallelCategory edge_parallel_category;
+
+ typedef void adjacency_iterator;
+ typedef void in_edge_iterator;
+ typedef void vertex_iterator;
+ typedef void edge_iterator;
+ };
+ template <typename V, typename D, typename P, typename B>
+ V source(const typename incidence_graph_archetype<V,D,P,B>::edge_descriptor&,
+ const incidence_graph_archetype<V,D,P,B>& )
+ {
+ return V(static_object<detail::dummy_constructor>::get());
+ }
+ template <typename V, typename D, typename P, typename B>
+ V target(const typename incidence_graph_archetype<V,D,P,B>::edge_descriptor&,
+ const incidence_graph_archetype<V,D,P,B>& )
+ {
+ return V(static_object<detail::dummy_constructor>::get());
+ }
+
+ template <typename V, typename D, typename P, typename B>
+ std::pair<typename incidence_graph_archetype<V,D,P,B>::out_edge_iterator,
+ typename incidence_graph_archetype<V,D,P,B>::out_edge_iterator>
+ out_edges(const V&, const incidence_graph_archetype<V,D,P,B>& )
+ {
+ typedef typename incidence_graph_archetype<V,D,P,B>::out_edge_iterator Iter;
+ return std::make_pair(Iter(), Iter());
+ }
+
+ template <typename V, typename D, typename P, typename B>
+ typename incidence_graph_archetype<V,D,P,B>::degree_size_type
+ out_degree(const V&, const incidence_graph_archetype<V,D,P,B>& )
+ {
+ return 0;
+ }
+
+ //===========================================================================
+ template <typename Vertex, typename Directed, typename ParallelCategory,
+ typename Base = detail::null_graph_archetype >
+ struct adjacency_graph_archetype : public Base
+ {
+ typedef typename Base::traversal_category base_trav_cat;
+ struct traversal_category
+ : public adjacency_graph_tag, public base_trav_cat { };
+ typedef Vertex vertex_descriptor;
+ typedef unsigned int degree_size_type;
+ typedef unsigned int vertices_size_type;
+ typedef unsigned int edges_size_type;
+ typedef void edge_descriptor;
+ typedef input_iterator_archetype<Vertex> adjacency_iterator;
+
+ typedef Directed directed_category;
+ typedef ParallelCategory edge_parallel_category;
+
+ typedef void in_edge_iterator;
+ typedef void out_edge_iterator;
+ typedef void vertex_iterator;
+ typedef void edge_iterator;
+ };
+
+ template <typename V, typename D, typename P, typename B>
+ std::pair<typename adjacency_graph_archetype<V,D,P,B>::adjacency_iterator,
+ typename adjacency_graph_archetype<V,D,P,B>::adjacency_iterator>
+ adjacent_vertices(const V&, const adjacency_graph_archetype<V,D,P,B>& )
+ {
+ typedef typename adjacency_graph_archetype<V,D,P,B>::adjacency_iterator Iter;
+ return std::make_pair(Iter(), Iter());
+ }
+
+ template <typename V, typename D, typename P, typename B>
+ typename adjacency_graph_archetype<V,D,P,B>::degree_size_type
+ out_degree(const V&, const adjacency_graph_archetype<V,D,P,B>& )
+ {
+ return 0;
+ }
+
+ //===========================================================================
+ template <typename Vertex, typename Directed, typename ParallelCategory,
+ typename Base = detail::null_graph_archetype >
+ struct vertex_list_graph_archetype : public Base
+ {
+ typedef incidence_graph_archetype<Vertex, Directed, ParallelCategory>
+ Incidence;
+ typedef adjacency_graph_archetype<Vertex, Directed, ParallelCategory>
+ Adjacency;
+
+ typedef typename Base::traversal_category base_trav_cat;
+ struct traversal_category
+ : public vertex_list_graph_tag, public base_trav_cat { };
+#if 0
+ typedef immutable_graph_tag mutability_category;
+#endif
+ typedef Vertex vertex_descriptor;
+ typedef unsigned int degree_size_type;
+ typedef typename Incidence::edge_descriptor edge_descriptor;
+ typedef typename Incidence::out_edge_iterator out_edge_iterator;
+ typedef typename Adjacency::adjacency_iterator adjacency_iterator;
+
+ typedef input_iterator_archetype<Vertex> vertex_iterator;
+ typedef unsigned int vertices_size_type;
+ typedef unsigned int edges_size_type;
+
+ typedef Directed directed_category;
+ typedef ParallelCategory edge_parallel_category;
+
+ typedef void in_edge_iterator;
+ typedef void edge_iterator;
+ };
+
+ template <typename V, typename D, typename P, typename B>
+ std::pair<typename vertex_list_graph_archetype<V,D,P,B>::vertex_iterator,
+ typename vertex_list_graph_archetype<V,D,P,B>::vertex_iterator>
+ vertices(const vertex_list_graph_archetype<V,D,P,B>& )
+ {
+ typedef typename vertex_list_graph_archetype<V,D,P,B>::vertex_iterator Iter;
+ return std::make_pair(Iter(), Iter());
+ }
+
+ template <typename V, typename D, typename P, typename B>
+ typename vertex_list_graph_archetype<V,D,P,B>::vertices_size_type
+ num_vertices(const vertex_list_graph_archetype<V,D,P,B>& )
+ {
+ return 0;
+ }
+
+ // ambiguously inherited from incidence graph and adjacency graph
+ template <typename V, typename D, typename P, typename B>
+ typename vertex_list_graph_archetype<V,D,P,B>::degree_size_type
+ out_degree(const V&, const vertex_list_graph_archetype<V,D,P,B>& )
+ {
+ return 0;
+ }
+
+ //===========================================================================
+
+ struct property_graph_archetype_tag { };
+
+ template <typename GraphArchetype, typename Property, typename ValueArch>
+ struct property_graph_archetype : public GraphArchetype
+ {
+ typedef property_graph_archetype_tag graph_tag;
+ typedef ValueArch vertex_property_type;
+ typedef ValueArch edge_property_type;
+ };
+
+ struct choose_edge_property_map_archetype {
+ template <typename Graph, typename Property, typename Tag>
+ struct bind_ {
+ typedef mutable_lvalue_property_map_archetype
+ <typename Graph::edge_descriptor, Property> type;
+ typedef lvalue_property_map_archetype
+ <typename Graph::edge_descriptor, Property> const_type;
+ };
+ };
+ template <>
+ struct edge_property_selector<property_graph_archetype_tag> {
+ typedef choose_edge_property_map_archetype type;
+ };
+
+ struct choose_vertex_property_map_archetype {
+ template <typename Graph, typename Property, typename Tag>
+ struct bind_ {
+ typedef mutable_lvalue_property_map_archetype
+ <typename Graph::vertex_descriptor, Property> type;
+ typedef lvalue_property_map_archetype
+ <typename Graph::vertex_descriptor, Property> const_type;
+ };
+ };
+
+ template <>
+ struct vertex_property_selector<property_graph_archetype_tag> {
+ typedef choose_vertex_property_map_archetype type;
+ };
+
+ template <typename G, typename P, typename V>
+ typename property_map<property_graph_archetype<G, P, V>, P>::type
+ get(P, property_graph_archetype<G, P, V>&) {
+ typename property_map<property_graph_archetype<G, P, V>, P>::type pmap;
+ return pmap;
+ }
+
+ template <typename G, typename P, typename V>
+ typename property_map<property_graph_archetype<G, P, V>, P>::const_type
+ get(P, const property_graph_archetype<G, P, V>&) {
+ typename property_map<property_graph_archetype<G, P, V>, P>::const_type pmap;
+ return pmap;
+ }
+
+ template <typename G, typename P, typename K, typename V>
+ typename property_traits<typename property_map<property_graph_archetype<G, P, V>, P>::const_type>::value_type
+ get(P p, const property_graph_archetype<G, P, V>& g, K k) {
+ return get( get(p, g), k);
+ }
+
+ template <typename G, typename P, typename V, typename Key>
+ void
+ put(P p, property_graph_archetype<G, P, V>& g,
+ const Key& key, const V& value)
+ {
+ typedef typename boost::property_map<property_graph_archetype<G, P, V>, P>::type Map;
+ Map pmap = get(p, g);
+ put(pmap, key, value);
+ }
+
+ struct color_value_archetype {
+ color_value_archetype() { }
+ color_value_archetype(detail::dummy_constructor) { }
+ bool operator==(const color_value_archetype& ) const { return true; }
+ bool operator!=(const color_value_archetype& ) const { return true; }
+ };
+ template <>
+ struct color_traits<color_value_archetype> {
+ static color_value_archetype white()
+ {
+ return color_value_archetype
+ (static_object<detail::dummy_constructor>::get());
+ }
+ static color_value_archetype gray()
+ {
+ return color_value_archetype
+ (static_object<detail::dummy_constructor>::get());
+ }
+ static color_value_archetype black()
+ {
+ return color_value_archetype
+ (static_object<detail::dummy_constructor>::get());
+ }
+ };
+
+ template <typename T>
+ class buffer_archetype {
+ public:
+ void push(const T&) {}
+ void pop() {}
+ T& top() { return static_object<T>::get(); }
+ const T& top() const { return static_object<T>::get(); }
+ bool empty() const { return true; }
+ };
+
+} // namespace boost
+
+
+#endif // BOOST_GRAPH_ARCHETYPES_HPP
diff --git a/boost/boost/graph/graph_as_tree.hpp b/boost/boost/graph/graph_as_tree.hpp
new file mode 100644
index 00000000000..7619dfcc0a4
--- /dev/null
+++ b/boost/boost/graph/graph_as_tree.hpp
@@ -0,0 +1,154 @@
+//
+//=======================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// 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_GRAPH_GRAPH_AS_TREE_HPP
+#define BOOST_GRAPH_GRAPH_AS_TREE_HPP
+
+#include <vector>
+#include <boost/config.hpp>
+#include <boost/property_map.hpp>
+#include <boost/graph/tree_traits.hpp>
+#include <boost/graph/graph_traits.hpp>
+#include <boost/graph/breadth_first_search.hpp>
+#include <boost/graph/visitors.hpp>
+
+namespace boost {
+
+ template <class Graph, class Node, class ChIt, class Derived>
+ class graph_as_tree_base
+ {
+ typedef Derived Tree;
+ public:
+ typedef Node node_descriptor;
+ typedef ChIt children_iterator;
+
+ graph_as_tree_base(Graph& g, Node root) : _g(g), _root(root) { }
+
+ friend Node root(const Tree& t) { return t._root; }
+
+ template <class N>
+ friend std::pair<ChIt,ChIt>
+ children(N n, const Tree& t) { return adjacent_vertices(n, t._g); }
+
+ template<class N>
+ friend Node parent(N n, const Tree& t) {
+ return boost::get(t.parent_pa(), n);
+ }
+
+ Graph& _g;
+ Node _root;
+ };
+
+ struct graph_as_tree_tag { };
+
+ template <class Graph, class ParentMap
+ , class Node
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ = typename graph_traits<Graph>::vertex_descriptor
+#endif
+ , class ChIt
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ = typename graph_traits<Graph>::adjacency_iterator
+#endif
+ >
+ class graph_as_tree
+ : public graph_as_tree_base<Graph, Node, ChIt,
+ graph_as_tree<Graph,ParentMap,Node,ChIt> >
+ {
+ typedef graph_as_tree self;
+ typedef graph_as_tree_base<Graph, Node, ChIt, self> super;
+ public:
+ graph_as_tree(Graph& g, Node root) : super(g, root) { }
+
+ graph_as_tree(Graph& g, Node root, ParentMap p) : super(g, root), _p(p) {
+ breadth_first_search(g, root,
+ visitor(make_bfs_visitor
+ (record_predecessors(p, boost::on_tree_edge()))));
+ }
+ ParentMap parent_pa() const { return _p; }
+ typedef graph_as_tree_tag graph_tag; // for property_map
+ protected:
+ ParentMap _p;
+ };
+
+
+ namespace detail {
+
+ struct graph_as_tree_vertex_property_selector {
+ template <typename GraphAsTree, typename Property, typename Tag>
+ struct bind_ {
+ typedef typename GraphAsTree::base_type Graph;
+ typedef property_map<Graph, Tag> PMap;
+ typedef typename PMap::type type;
+ typedef typename PMap::const_type const_type;
+ };
+ };
+
+ struct graph_as_tree_edge_property_selector {
+ template <typename GraphAsTree, typename Property, typename Tag>
+ struct bind_ {
+ typedef typename GraphAsTree::base_type Graph;
+ typedef property_map<Graph, Tag> PMap;
+ typedef typename PMap::type type;
+ typedef typename PMap::const_type const_type;
+ };
+ };
+
+ } // namespace detail
+
+ template <>
+ struct vertex_property_selector<graph_as_tree_tag> {
+ typedef detail::graph_as_tree_vertex_property_selector type;
+ };
+
+ template <>
+ struct edge_property_selector<graph_as_tree_tag> {
+ typedef detail::graph_as_tree_edge_property_selector type;
+ };
+
+ template <typename Graph, typename P, typename N, typename C,
+ typename Property>
+ typename property_map<Graph, Property>::type
+ get(Property p, graph_as_tree<Graph,P,N,C>& g)
+ {
+ return get(p, g._g);
+ }
+
+ template <typename Graph, typename P, typename N, typename C,
+ typename Property>
+ typename property_map<Graph, Property>::const_type
+ get(Property p, const graph_as_tree<Graph,P,N,C>& g)
+ {
+ const Graph& gref = g._g; // in case GRef is non-const
+ return get(p, gref);
+ }
+
+ template <typename Graph, typename P, typename N, typename C,
+ typename Property, typename Key>
+ typename property_traits<
+ typename property_map<Graph, Property>::const_type
+ >::value_type
+ get(Property p, const graph_as_tree<Graph,P,N,C>& g, const Key& k)
+ {
+ return get(p, g._g, k);
+ }
+
+ template <typename Graph, typename P, typename N, typename C,
+ typename Property, typename Key, typename Value>
+ void
+ put(Property p, const graph_as_tree<Graph,P,N,C>& g, const Key& k,
+ const Value& val)
+ {
+ put(p, g._g, k, val);
+ }
+
+} // namespace boost
+
+#endif // BOOST_GRAPH_GRAPH_AS_TREE_HPP
diff --git a/boost/boost/graph/graph_concepts.hpp b/boost/boost/graph/graph_concepts.hpp
new file mode 100644
index 00000000000..a4572650168
--- /dev/null
+++ b/boost/boost/graph/graph_concepts.hpp
@@ -0,0 +1,492 @@
+//
+//=======================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// 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_GRAPH_CONCEPTS_HPP
+#define BOOST_GRAPH_CONCEPTS_HPP
+
+#include <boost/config.hpp>
+#include <boost/graph/graph_traits.hpp>
+#include <boost/property_map.hpp>
+#include <boost/graph/properties.hpp>
+#include <boost/concept_check.hpp>
+#include <boost/detail/workaround.hpp>
+
+namespace boost {
+
+ template <class T>
+ struct MultiPassInputIteratorConcept {
+ void constraints() {
+ function_requires< InputIteratorConcept<T> >();
+ }
+ };
+
+ template <class G>
+ struct GraphConcept
+ {
+ typedef typename graph_traits<G>::vertex_descriptor vertex_descriptor;
+ typedef typename graph_traits<G>::directed_category directed_category;
+ typedef typename graph_traits<G>::edge_parallel_category
+ edge_parallel_category;
+ typedef typename graph_traits<G>::traversal_category
+ traversal_category;
+ void constraints() {
+ function_requires< DefaultConstructibleConcept<vertex_descriptor> >();
+ function_requires< EqualityComparableConcept<vertex_descriptor> >();
+ function_requires< AssignableConcept<vertex_descriptor> >();
+ }
+ G g;
+ };
+
+ template <class G>
+ struct IncidenceGraphConcept
+ {
+ typedef typename graph_traits<G>::edge_descriptor edge_descriptor;
+ typedef typename graph_traits<G>::out_edge_iterator
+ out_edge_iterator;
+ typedef typename graph_traits<G>::traversal_category
+ traversal_category;
+ void constraints() {
+ function_requires< GraphConcept<G> >();
+ function_requires< MultiPassInputIteratorConcept<out_edge_iterator> >();
+ function_requires< DefaultConstructibleConcept<edge_descriptor> >();
+ function_requires< EqualityComparableConcept<edge_descriptor> >();
+ function_requires< AssignableConcept<edge_descriptor> >();
+ function_requires< ConvertibleConcept<traversal_category,
+ incidence_graph_tag> >();
+
+ p = out_edges(u, g);
+ n = out_degree(u, g);
+ e = *p.first;
+ u = source(e, g);
+ v = target(e, g);
+ const_constraints(g);
+ }
+ void const_constraints(const G& cg) {
+ p = out_edges(u, cg);
+ n = out_degree(u, cg);
+ e = *p.first;
+ u = source(e, cg);
+ v = target(e, cg);
+ }
+ std::pair<out_edge_iterator, out_edge_iterator> p;
+ typename graph_traits<G>::vertex_descriptor u, v;
+ typename graph_traits<G>::edge_descriptor e;
+ typename graph_traits<G>::degree_size_type n;
+ G g;
+ };
+
+ template <class G>
+ struct BidirectionalGraphConcept
+ {
+ typedef typename graph_traits<G>::in_edge_iterator
+ in_edge_iterator;
+ typedef typename graph_traits<G>::traversal_category
+ traversal_category;
+ void constraints() {
+ function_requires< IncidenceGraphConcept<G> >();
+ function_requires< MultiPassInputIteratorConcept<in_edge_iterator> >();
+ function_requires< ConvertibleConcept<traversal_category,
+ bidirectional_graph_tag> >();
+
+ p = in_edges(v, g);
+ n = in_degree(v, g);
+ e = *p.first;
+ const_constraints(g);
+ }
+ void const_constraints(const G& cg) {
+ p = in_edges(v, cg);
+ n = in_degree(v, cg);
+ e = *p.first;
+ }
+ std::pair<in_edge_iterator, in_edge_iterator> p;
+ typename graph_traits<G>::vertex_descriptor v;
+ typename graph_traits<G>::edge_descriptor e;
+ typename graph_traits<G>::degree_size_type n;
+ G g;
+ };
+
+ template <class G>
+ struct AdjacencyGraphConcept
+ {
+ typedef typename graph_traits<G>::adjacency_iterator
+ adjacency_iterator;
+ typedef typename graph_traits<G>::traversal_category
+ traversal_category;
+ void constraints() {
+ function_requires< GraphConcept<G> >();
+ function_requires< MultiPassInputIteratorConcept<adjacency_iterator> >();
+ function_requires< ConvertibleConcept<traversal_category,
+ adjacency_graph_tag> >();
+
+ p = adjacent_vertices(v, g);
+ v = *p.first;
+ const_constraints(g);
+ }
+ void const_constraints(const G& cg) {
+ p = adjacent_vertices(v, cg);
+ }
+ std::pair<adjacency_iterator,adjacency_iterator> p;
+ typename graph_traits<G>::vertex_descriptor v;
+ G g;
+ };
+
+// dwa 2003/7/11 -- This clearly shouldn't be necessary, but if
+// you want to use vector_as_graph, it is! I'm sure the graph
+// library leaves these out all over the place. Probably a
+// redesign involving specializing a template with a static
+// member function is in order :(
+//
+// It is needed in order to allow us to write using boost::vertices as
+// needed for ADL when using vector_as_graph below.
+#if !defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP) \
+ && !BOOST_WORKAROUND(__GNUC__, <= 2) \
+ && !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+# define BOOST_VECTOR_AS_GRAPH_GRAPH_ADL_HACK
+#endif
+
+#ifdef BOOST_VECTOR_AS_GRAPH_GRAPH_ADL_HACK
+template <class T>
+typename T::ThereReallyIsNoMemberByThisNameInT vertices(T const&);
+#endif
+
+ template <class G>
+ struct VertexListGraphConcept
+ {
+ typedef typename graph_traits<G>::vertex_iterator vertex_iterator;
+ typedef typename graph_traits<G>::vertices_size_type vertices_size_type;
+ typedef typename graph_traits<G>::traversal_category
+ traversal_category;
+ void constraints() {
+ function_requires< GraphConcept<G> >();
+ function_requires< MultiPassInputIteratorConcept<vertex_iterator> >();
+ function_requires< ConvertibleConcept<traversal_category,
+ vertex_list_graph_tag> >();
+
+#ifdef BOOST_VECTOR_AS_GRAPH_GRAPH_ADL_HACK
+ // dwa 2003/7/11 -- This clearly shouldn't be necessary, but if
+ // you want to use vector_as_graph, it is! I'm sure the graph
+ // library leaves these out all over the place. Probably a
+ // redesign involving specializing a template with a static
+ // member function is in order :(
+ using boost::vertices;
+#endif
+ p = vertices(g);
+ v = *p.first;
+ const_constraints(g);
+ }
+ void const_constraints(const G& cg) {
+#ifdef BOOST_VECTOR_AS_GRAPH_GRAPH_ADL_HACK
+ // dwa 2003/7/11 -- This clearly shouldn't be necessary, but if
+ // you want to use vector_as_graph, it is! I'm sure the graph
+ // library leaves these out all over the place. Probably a
+ // redesign involving specializing a template with a static
+ // member function is in order :(
+ using boost::vertices;
+#endif
+
+ p = vertices(cg);
+ v = *p.first;
+ V = num_vertices(cg);
+ }
+ std::pair<vertex_iterator,vertex_iterator> p;
+ typename graph_traits<G>::vertex_descriptor v;
+ G g;
+ vertices_size_type V;
+ };
+
+ template <class G>
+ struct EdgeListGraphConcept
+ {
+ typedef typename graph_traits<G>::edge_descriptor edge_descriptor;
+ typedef typename graph_traits<G>::edge_iterator edge_iterator;
+ typedef typename graph_traits<G>::edges_size_type edges_size_type;
+ typedef typename graph_traits<G>::traversal_category
+ traversal_category;
+ void constraints() {
+ function_requires< GraphConcept<G> >();
+ function_requires< MultiPassInputIteratorConcept<edge_iterator> >();
+ function_requires< DefaultConstructibleConcept<edge_descriptor> >();
+ function_requires< EqualityComparableConcept<edge_descriptor> >();
+ function_requires< AssignableConcept<edge_descriptor> >();
+ function_requires< ConvertibleConcept<traversal_category,
+ edge_list_graph_tag> >();
+
+ p = edges(g);
+ e = *p.first;
+ u = source(e, g);
+ v = target(e, g);
+ const_constraints(g);
+ }
+ void const_constraints(const G& cg) {
+ p = edges(cg);
+ E = num_edges(cg);
+ e = *p.first;
+ u = source(e, cg);
+ v = target(e, cg);
+ }
+ std::pair<edge_iterator,edge_iterator> p;
+ typename graph_traits<G>::vertex_descriptor u, v;
+ typename graph_traits<G>::edge_descriptor e;
+ edges_size_type E;
+ G g;
+ };
+
+ template <class G>
+ struct VertexAndEdgeListGraphConcept
+ {
+ void constraints() {
+ function_requires< VertexListGraphConcept<G> >();
+ function_requires< EdgeListGraphConcept<G> >();
+ }
+ };
+
+ // Where to put the requirement for this constructor?
+ // G g(n_vertices);
+ // Not in mutable graph, then LEDA graph's can't be models of
+ // MutableGraph.
+
+ template <class G>
+ struct EdgeMutableGraphConcept
+ {
+ typedef typename graph_traits<G>::edge_descriptor edge_descriptor;
+ void constraints() {
+ p = add_edge(u, v, g);
+ remove_edge(u, v, g);
+ remove_edge(e, g);
+ clear_vertex(v, g);
+ }
+ G g;
+ edge_descriptor e;
+ std::pair<edge_descriptor, bool> p;
+ typename graph_traits<G>::vertex_descriptor u, v;
+ };
+
+ template <class G>
+ struct VertexMutableGraphConcept
+ {
+ void constraints() {
+ v = add_vertex(g);
+ remove_vertex(v, g);
+ }
+ G g;
+ typename graph_traits<G>::vertex_descriptor u, v;
+ };
+
+ template <class G>
+ struct MutableGraphConcept
+ {
+ void constraints() {
+ function_requires< EdgeMutableGraphConcept<G> >();
+ function_requires< VertexMutableGraphConcept<G> >();
+ }
+ };
+
+ template <class edge_descriptor>
+ struct dummy_edge_predicate {
+ bool operator()(const edge_descriptor&) const {
+ return false;
+ }
+ };
+
+ template <class G>
+ struct MutableIncidenceGraphConcept
+ {
+ void constraints() {
+ function_requires< MutableGraphConcept<G> >();
+ remove_edge(iter, g);
+ remove_out_edge_if(u, p, g);
+ }
+ G g;
+ typedef typename graph_traits<G>::edge_descriptor edge_descriptor;
+ dummy_edge_predicate<edge_descriptor> p;
+ typename boost::graph_traits<G>::vertex_descriptor u;
+ typename boost::graph_traits<G>::out_edge_iterator iter;
+ };
+
+ template <class G>
+ struct MutableBidirectionalGraphConcept
+ {
+ void constraints() {
+ function_requires< MutableIncidenceGraphConcept<G> >();
+ remove_in_edge_if(u, p, g);
+ }
+ G g;
+ typedef typename graph_traits<G>::edge_descriptor edge_descriptor;
+ dummy_edge_predicate<edge_descriptor> p;
+ typename boost::graph_traits<G>::vertex_descriptor u;
+ };
+
+ template <class G>
+ struct MutableEdgeListGraphConcept
+ {
+ void constraints() {
+ function_requires< EdgeMutableGraphConcept<G> >();
+ remove_edge_if(p, g);
+ }
+ G g;
+ typedef typename graph_traits<G>::edge_descriptor edge_descriptor;
+ dummy_edge_predicate<edge_descriptor> p;
+ };
+
+ template <class G>
+ struct VertexMutablePropertyGraphConcept
+ {
+ void constraints() {
+ function_requires< VertexMutableGraphConcept<G> >();
+ v = add_vertex(vp, g);
+ }
+ G g;
+ typename graph_traits<G>::vertex_descriptor v;
+ typename vertex_property<G>::type vp;
+ };
+
+ template <class G>
+ struct EdgeMutablePropertyGraphConcept
+ {
+ typedef typename graph_traits<G>::edge_descriptor edge_descriptor;
+ void constraints() {
+ function_requires< EdgeMutableGraphConcept<G> >();
+ p = add_edge(u, v, ep, g);
+ }
+ G g;
+ std::pair<edge_descriptor, bool> p;
+ typename graph_traits<G>::vertex_descriptor u, v;
+ typename edge_property<G>::type ep;
+ };
+
+ template <class G>
+ struct AdjacencyMatrixConcept
+ {
+ typedef typename graph_traits<G>::edge_descriptor edge_descriptor;
+ void constraints() {
+ function_requires< GraphConcept<G> >();
+
+ p = edge(u, v, g);
+ const_constraints(g);
+ }
+ void const_constraints(const G& cg) {
+ p = edge(u, v, cg);
+ }
+ typename graph_traits<G>::vertex_descriptor u, v;
+ std::pair<edge_descriptor, bool> p;
+ G g;
+ };
+
+ template <class G, class X, class Property>
+ struct ReadablePropertyGraphConcept
+ {
+ typedef typename property_map<G, Property>::const_type const_Map;
+ void constraints() {
+ function_requires< GraphConcept<G> >();
+ function_requires< ReadablePropertyMapConcept<const_Map, X> >();
+
+ const_constraints(g);
+ }
+ void const_constraints(const G& cg) {
+ const_Map pmap = get(Property(), cg);
+ pval = get(Property(), cg, x);
+ ignore_unused_variable_warning(pmap);
+ }
+ G g;
+ X x;
+ typename property_traits<const_Map>::value_type pval;
+ };
+
+ template <class G, class X, class Property>
+ struct PropertyGraphConcept
+ {
+ typedef typename property_map<G, Property>::type Map;
+ void constraints() {
+ function_requires< ReadablePropertyGraphConcept<G, X, Property> >();
+ function_requires< ReadWritePropertyMapConcept<Map, X> >();
+
+ Map pmap = get(Property(), g);
+ pval = get(Property(), g, x);
+ put(Property(), g, x, pval);
+ ignore_unused_variable_warning(pmap);
+ }
+ G g;
+ X x;
+ typename property_traits<Map>::value_type pval;
+ };
+
+ template <class G, class X, class Property>
+ struct LvaluePropertyGraphConcept
+ {
+ typedef typename property_map<G, Property>::type Map;
+ typedef typename property_map<G, Property>::const_type const_Map;
+ void constraints() {
+ function_requires< ReadablePropertyGraphConcept<G, X, Property> >();
+ function_requires< LvaluePropertyMapConcept<const_Map, X> >();
+
+ pval = get(Property(), g, x);
+ put(Property(), g, x, pval);
+ }
+ G g;
+ X x;
+ typename property_traits<Map>::value_type pval;
+ };
+
+ // This needs to move out of the graph library
+ template <class B>
+ struct BufferConcept
+ {
+ void constraints() {
+ b.push(t);
+ b.pop();
+ typename B::value_type& v = b.top();
+ const_constraints(b);
+ ignore_unused_variable_warning(v);
+ }
+ void const_constraints(const B& cb) {
+ const typename B::value_type& v = cb.top();
+ n = cb.size();
+ bool e = cb.empty();
+ ignore_unused_variable_warning(v);
+ ignore_unused_variable_warning(e);
+ }
+ typename B::size_type n;
+ typename B::value_type t;
+ B b;
+ };
+
+ template <class C>
+ struct ColorValueConcept
+ {
+ void constraints() {
+ function_requires< EqualityComparableConcept<C> >();
+ function_requires< DefaultConstructibleConcept<C> >();
+
+ c = color_traits<C>::white();
+ c = color_traits<C>::gray();
+ c = color_traits<C>::black();
+ }
+ C c;
+ };
+
+ template <class M, class I, class V>
+ struct BasicMatrixConcept
+ {
+ void constraints() {
+ V& elt = A[i][j];
+ const_constraints(A);
+ ignore_unused_variable_warning(elt);
+ }
+ void const_constraints(const M& cA) {
+ const V& elt = cA[i][j];
+ ignore_unused_variable_warning(elt);
+ }
+ M A;
+ I i, j;
+ };
+
+} // namespace boost
+
+#endif /* BOOST_GRAPH_CONCEPTS_H */
diff --git a/boost/boost/graph/graph_selectors.hpp b/boost/boost/graph/graph_selectors.hpp
new file mode 100644
index 00000000000..a3223c9b197
--- /dev/null
+++ b/boost/boost/graph/graph_selectors.hpp
@@ -0,0 +1,36 @@
+//=======================================================================
+// Copyright 2002 Indiana University.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// 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_GRAPH_SELECTORS_HPP
+#define BOOST_GRAPH_SELECTORS_HPP
+
+namespace boost {
+
+ //===========================================================================
+ // Selectors for the Directed template parameter of adjacency_list
+ // and adjacency_matrix.
+
+ struct directedS { enum { is_directed = true, is_bidir = false };
+ typedef true_type is_directed_t;
+ typedef false_type is_bidir_t;
+ };
+ struct undirectedS {
+ enum { is_directed = false, is_bidir = false };
+ typedef false_type is_directed_t;
+ typedef false_type is_bidir_t;
+ };
+ struct bidirectionalS {
+ enum { is_directed = true, is_bidir = true };
+ typedef true_type is_directed_t;
+ typedef true_type is_bidir_t;
+ };
+
+} // namespace boost
+
+#endif // BOOST_GRAPH_SELECTORS_HPP
diff --git a/boost/boost/graph/graph_test.hpp b/boost/boost/graph/graph_test.hpp
new file mode 100644
index 00000000000..37ded0c7336
--- /dev/null
+++ b/boost/boost/graph/graph_test.hpp
@@ -0,0 +1,382 @@
+//=======================================================================
+// Copyright 2002 Indiana University.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// 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_GRAPH_TEST_HPP
+#define BOOST_GRAPH_TEST_HPP
+
+#include <vector>
+#include <boost/test/minimal.hpp>
+#include <boost/graph/filtered_graph.hpp>
+#include <boost/graph/iteration_macros.hpp>
+#include <boost/graph/isomorphism.hpp>
+#include <boost/graph/copy.hpp>
+#include <boost/graph/graph_utility.hpp> // for connects
+
+
+// UNDER CONSTRUCTION
+
+namespace boost {
+
+ template <typename Graph>
+ struct graph_test
+ {
+
+ typedef typename graph_traits<Graph>::vertex_descriptor vertex_t;
+ typedef typename graph_traits<Graph>::edge_descriptor edge_t;
+ typedef typename graph_traits<Graph>::vertices_size_type v_size_t;
+ typedef typename graph_traits<Graph>::degree_size_type deg_size_t;
+ typedef typename graph_traits<Graph>::edges_size_type e_size_t;
+ typedef typename graph_traits<Graph>::out_edge_iterator out_edge_iter;
+ typedef typename property_map<Graph, vertex_index_t>::type index_map_t;
+ typedef iterator_property_map<typename std::vector<vertex_t>::iterator,
+ index_map_t,vertex_t,vertex_t&> IsoMap;
+
+ struct ignore_vertex {
+ ignore_vertex() { }
+ ignore_vertex(vertex_t v) : v(v) { }
+ bool operator()(vertex_t x) const { return x != v; }
+ vertex_t v;
+ };
+ struct ignore_edge {
+ ignore_edge() { }
+ ignore_edge(edge_t e) : e(e) { }
+ bool operator()(edge_t x) const { return x != e; }
+ edge_t e;
+ };
+ struct ignore_edges {
+ ignore_edges(vertex_t s, vertex_t t, const Graph& g)
+ : s(s), t(t), g(g) { }
+ bool operator()(edge_t x) const {
+ return !(source(x, g) == s && target(x, g) == t);
+ }
+ vertex_t s; vertex_t t; const Graph& g;
+ };
+
+ //=========================================================================
+ // Traversal Operations
+
+ void test_incidence_graph
+ (const std::vector<vertex_t>& vertex_set,
+ const std::vector< std::pair<vertex_t, vertex_t> >& edge_set,
+ const Graph& g)
+ {
+ typedef typename std::vector<vertex_t>::const_iterator vertex_iter;
+ typedef typename std::vector< std::pair<vertex_t, vertex_t> >
+ ::const_iterator edge_iter;
+ typedef typename graph_traits<Graph>::out_edge_iterator out_edge_iter;
+
+ for (vertex_iter ui = vertex_set.begin(); ui != vertex_set.end(); ++ui) {
+ vertex_t u = *ui;
+ std::vector<vertex_t> adj;
+ for (edge_iter e = edge_set.begin(); e != edge_set.end(); ++e)
+ if (e->first == u)
+ adj.push_back(e->second);
+
+ std::pair<out_edge_iter, out_edge_iter> p = out_edges(u, g);
+ BOOST_CHECK(out_degree(u, g) == adj.size());
+ BOOST_CHECK(deg_size_t(std::distance(p.first, p.second))
+ == out_degree(u, g));
+ for (; p.first != p.second; ++p.first) {
+ edge_t e = *p.first;
+ BOOST_CHECK(source(e, g) == u);
+ BOOST_CHECK(contains(adj, target(e, g)) == true);
+ }
+ }
+ }
+
+ void test_bidirectional_graph
+ (const std::vector<vertex_t>& vertex_set,
+ const std::vector< std::pair<vertex_t, vertex_t> >& edge_set,
+ const Graph& g)
+ {
+ typedef typename std::vector<vertex_t>::const_iterator vertex_iter;
+ typedef typename std::vector< std::pair<vertex_t, vertex_t> >
+ ::const_iterator edge_iter;
+ typedef typename graph_traits<Graph>::in_edge_iterator in_edge_iter;
+
+ for (vertex_iter vi = vertex_set.begin(); vi != vertex_set.end(); ++vi) {
+ vertex_t v = *vi;
+ std::vector<vertex_t> inv_adj;
+ for (edge_iter e = edge_set.begin(); e != edge_set.end(); ++e)
+ if (e->second == v)
+ inv_adj.push_back(e->first);
+
+ std::pair<in_edge_iter, in_edge_iter> p = in_edges(v, g);
+ BOOST_CHECK(in_degree(v, g) == inv_adj.size());
+ BOOST_CHECK(deg_size_t(std::distance(p.first, p.second))
+ == in_degree(v, g));
+ for (; p.first != p.second; ++p.first) {
+ edge_t e = *p.first;
+ BOOST_CHECK(target(e, g) == v);
+ BOOST_CHECK(contains(inv_adj, source(e, g)) == true);
+ }
+ }
+ }
+
+ void test_adjacency_graph
+ (const std::vector<vertex_t>& vertex_set,
+ const std::vector< std::pair<vertex_t,vertex_t> >& edge_set,
+ const Graph& g)
+ {
+ typedef typename std::vector<vertex_t>::const_iterator vertex_iter;
+ typedef typename std::vector<std::pair<vertex_t,vertex_t> >
+ ::const_iterator edge_iter;
+ typedef typename graph_traits<Graph>::adjacency_iterator adj_iter;
+
+ for (vertex_iter ui = vertex_set.begin(); ui != vertex_set.end(); ++ui) {
+ vertex_t u = *ui;
+ std::vector<vertex_t> adj;
+ for (edge_iter e = edge_set.begin(); e != edge_set.end(); ++e)
+ if (e->first == u)
+ adj.push_back(e->second);
+
+ std::pair<adj_iter, adj_iter> p = adjacent_vertices(u, g);
+ BOOST_CHECK(deg_size_t(std::distance(p.first, p.second)) == adj.size());
+ for (; p.first != p.second; ++p.first) {
+ vertex_t v = *p.first;
+ BOOST_CHECK(contains(adj, v) == true);
+ }
+ }
+ }
+
+ void test_vertex_list_graph
+ (const std::vector<vertex_t>& vertex_set, const Graph& g)
+ {
+ typedef typename graph_traits<Graph>::vertex_iterator v_iter;
+ std::pair<v_iter, v_iter> p = vertices(g);
+ BOOST_CHECK(num_vertices(g) == vertex_set.size());
+ v_size_t n = std::distance(p.first, p.second);
+ BOOST_CHECK(n == num_vertices(g));
+ for (; p.first != p.second; ++p.first) {
+ vertex_t v = *p.first;
+ BOOST_CHECK(contains(vertex_set, v) == true);
+ }
+ }
+
+ void test_edge_list_graph
+ (const std::vector<vertex_t>& vertex_set,
+ const std::vector< std::pair<vertex_t, vertex_t> >& edge_set,
+ const Graph& g)
+ {
+ typedef typename graph_traits<Graph>::edge_iterator e_iter;
+ std::pair<e_iter, e_iter> p = edges(g);
+ BOOST_CHECK(num_edges(g) == edge_set.size());
+ e_size_t m = std::distance(p.first, p.second);
+ BOOST_CHECK(m == num_edges(g));
+ for (; p.first != p.second; ++p.first) {
+ edge_t e = *p.first;
+ BOOST_CHECK(any_if(edge_set, connects(source(e, g), target(e, g), g)));
+ BOOST_CHECK(contains(vertex_set, source(e, g)) == true);
+ BOOST_CHECK(contains(vertex_set, target(e, g)) == true);
+ }
+ }
+
+ void test_adjacency_matrix
+ (const std::vector<vertex_t>& vertex_set,
+ const std::vector< std::pair<vertex_t, vertex_t> >& edge_set,
+ const Graph& g)
+ {
+ std::pair<edge_t, bool> p;
+ for (typename std::vector<std::pair<vertex_t, vertex_t> >
+ ::const_iterator i = edge_set.begin();
+ i != edge_set.end(); ++i) {
+ p = edge(i->first, i->second, g);
+ BOOST_CHECK(p.second == true);
+ BOOST_CHECK(source(p.first, g) == i->first);
+ BOOST_CHECK(target(p.first, g) == i->second);
+ }
+ typename std::vector<vertex_t>::const_iterator j, k;
+ for (j = vertex_set.begin(); j != vertex_set.end(); ++j)
+ for (k = vertex_set.begin(); k != vertex_set.end(); ++k) {
+ p = edge(*j, *k, g);
+ if (p.second == true)
+ BOOST_CHECK(any_if(edge_set,
+ connects(source(p.first, g), target(p.first, g), g)) == true);
+ }
+ }
+
+ //=========================================================================
+ // Mutating Operations
+
+ void test_add_vertex(Graph& g)
+ {
+ Graph cpy;
+ std::vector<vertex_t> iso_vec(num_vertices(g));
+ IsoMap iso_map(iso_vec.begin(), get(vertex_index, g));
+ copy_graph(g, cpy, orig_to_copy(iso_map));
+
+ assert((verify_isomorphism(g, cpy, iso_map)));
+
+ vertex_t v = add_vertex(g);
+
+ BOOST_CHECK(num_vertices(g) == num_vertices(cpy) + 1);
+
+ BOOST_CHECK(out_degree(v, g) == 0);
+
+ // Make sure the rest of the graph stayed the same
+ BOOST_CHECK((verify_isomorphism
+ (make_filtered_graph(g, keep_all(), ignore_vertex(v)), cpy,
+ iso_map)));
+ }
+
+ void test_add_edge(vertex_t u, vertex_t v, Graph& g)
+ {
+ Graph cpy;
+ std::vector<vertex_t> iso_vec(num_vertices(g));
+ IsoMap iso_map(iso_vec.begin(), get(vertex_index, g));
+ copy_graph(g, cpy, orig_to_copy(iso_map));
+
+ bool parallel_edge_exists = contains(adjacent_vertices(u, g), v);
+
+ std::pair<edge_t, bool> p = add_edge(u, v, g);
+ edge_t e = p.first;
+ bool added = p.second;
+
+ if (is_undirected(g) && u == v) // self edge
+ BOOST_CHECK(added == false);
+ else if (parallel_edge_exists)
+ BOOST_CHECK(allows_parallel_edges(g) && added == true
+ || !allows_parallel_edges(g) && added == false);
+ else
+ BOOST_CHECK(added == true);
+
+ if (p.second == true) { // edge added
+ BOOST_CHECK(num_edges(g) == num_edges(cpy) + 1);
+
+ BOOST_CHECK(contains(out_edges(u, g), e) == true);
+
+ BOOST_CHECK((verify_isomorphism
+ (make_filtered_graph(g, ignore_edge(e)), cpy, iso_map)));
+ }
+ else { // edge not added
+ if (! (is_undirected(g) && u == v)) {
+ // e should be a parallel edge
+ BOOST_CHECK(source(e, g) == u);
+ BOOST_CHECK(target(e, g) == v);
+ }
+ // The graph should not be changed.
+ BOOST_CHECK((verify_isomorphism(g, cpy, iso_map)));
+ }
+ } // test_add_edge()
+
+
+ void test_remove_edge(vertex_t u, vertex_t v, Graph& g)
+ {
+ Graph cpy;
+ std::vector<vertex_t> iso_vec(num_vertices(g));
+ IsoMap iso_map(iso_vec.begin(), get(vertex_index, g));
+ copy_graph(g, cpy, orig_to_copy(iso_map));
+
+ deg_size_t occurances = count(adjacent_vertices(u, g), v);
+
+ remove_edge(u, v, g);
+
+ BOOST_CHECK(num_edges(g) + occurances == num_edges(cpy));
+ BOOST_CHECK((verify_isomorphism
+ (g, make_filtered_graph(cpy, ignore_edges(u,v,cpy)),
+ iso_map)));
+ }
+
+ void test_remove_edge(edge_t e, Graph& g)
+ {
+ Graph cpy;
+ std::vector<vertex_t> iso_vec(num_vertices(g));
+ IsoMap iso_map(iso_vec.begin(), get(vertex_index, g));
+ copy_graph(g, cpy, orig_to_copy(iso_map));
+
+ vertex_t u = source(e, g), v = target(e, g);
+ deg_size_t occurances = count(adjacent_vertices(u, g), v);
+
+ remove_edge(e, g);
+
+ BOOST_CHECK(num_edges(g) + 1 == num_edges(cpy));
+ BOOST_CHECK(count(adjacent_vertices(u, g), v) + 1 == occurances);
+ BOOST_CHECK((verify_isomorphism
+ (g, make_filtered_graph(cpy, ignore_edge(e)),
+ iso_map)));
+ }
+
+ void test_clear_vertex(vertex_t v, Graph& g)
+ {
+ Graph cpy;
+ std::vector<vertex_t> iso_vec(num_vertices(g));
+ IsoMap iso_map(iso_vec.begin(), get(vertex_index, g));
+ copy_graph(g, cpy, orig_to_copy(iso_map));
+
+ clear_vertex(v, g);
+
+ BOOST_CHECK(out_degree(v, g) == 0);
+ BOOST_CHECK(num_vertices(g) == num_vertices(cpy));
+ BOOST_CHECK((verify_isomorphism
+ (g, make_filtered_graph(cpy, keep_all(), ignore_vertex(v)),
+ iso_map)));
+ }
+
+ //=========================================================================
+ // Property Map
+
+ template <typename PropVal, typename PropertyTag>
+ void test_readable_vertex_property_graph
+ (const std::vector<PropVal>& vertex_prop, PropertyTag, const Graph& g)
+ {
+ typedef typename property_map<Graph, PropertyTag>::const_type const_Map;
+ const_Map pmap = get(PropertyTag(), g);
+ typename std::vector<PropVal>::const_iterator i = vertex_prop.begin();
+
+ for (typename boost::graph_traits<Graph>::vertex_iterator
+ bgl_first_9 = vertices(g).first, bgl_last_9 = vertices(g).second;
+ bgl_first_9 != bgl_last_9; bgl_first_9 = bgl_last_9)
+ for (typename boost::graph_traits<Graph>::vertex_descriptor v;
+ bgl_first_9 != bgl_last_9 ? (v = *bgl_first_9, true) : false;
+ ++bgl_first_9) {
+ //BGL_FORALL_VERTICES_T(v, g, Graph) {
+ typename property_traits<const_Map>::value_type
+ pval1 = get(pmap, v), pval2 = get(PropertyTag(), g, v);
+ BOOST_CHECK(pval1 == pval2);
+ BOOST_CHECK(pval1 == *i++);
+ }
+ }
+
+ template <typename PropVal, typename PropertyTag>
+ void test_vertex_property_graph
+ (const std::vector<PropVal>& vertex_prop, PropertyTag tag, Graph& g)
+ {
+ typedef typename property_map<Graph, PropertyTag>::type PMap;
+ PMap pmap = get(PropertyTag(), g);
+ typename std::vector<PropVal>::const_iterator i = vertex_prop.begin();
+ for (typename boost::graph_traits<Graph>::vertex_iterator
+ bgl_first_9 = vertices(g).first, bgl_last_9 = vertices(g).second;
+ bgl_first_9 != bgl_last_9; bgl_first_9 = bgl_last_9)
+ for (typename boost::graph_traits<Graph>::vertex_descriptor v;
+ bgl_first_9 != bgl_last_9 ? (v = *bgl_first_9, true) : false;
+ ++bgl_first_9)
+ // BGL_FORALL_VERTICES_T(v, g, Graph)
+ put(pmap, v, *i++);
+
+ test_readable_vertex_property_graph(vertex_prop, tag, g);
+
+ BGL_FORALL_VERTICES_T(v, g, Graph)
+ put(pmap, v, vertex_prop[0]);
+
+ typename std::vector<PropVal>::const_iterator j = vertex_prop.begin();
+ BGL_FORALL_VERTICES_T(v, g, Graph)
+ put(PropertyTag(), g, v, *j++);
+
+ test_readable_vertex_property_graph(vertex_prop, tag, g);
+ }
+
+
+ };
+
+
+} // namespace boost
+
+#include <boost/graph/iteration_macros_undef.hpp>
+
+#endif // BOOST_GRAPH_TEST_HPP
diff --git a/boost/boost/graph/graph_traits.hpp b/boost/boost/graph/graph_traits.hpp
new file mode 100644
index 00000000000..1c5a26589b2
--- /dev/null
+++ b/boost/boost/graph/graph_traits.hpp
@@ -0,0 +1,168 @@
+//=======================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// 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_GRAPH_TRAITS_HPP
+#define BOOST_GRAPH_TRAITS_HPP
+
+#include <boost/config.hpp>
+#include <iterator>
+#include <boost/tuple/tuple.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/iterator/iterator_categories.hpp>
+#include <boost/iterator/iterator_adaptor.hpp>
+#include <boost/detail/workaround.hpp>
+
+namespace boost {
+
+ template <typename G>
+ struct graph_traits {
+ typedef typename G::vertex_descriptor vertex_descriptor;
+ typedef typename G::edge_descriptor edge_descriptor;
+ typedef typename G::adjacency_iterator adjacency_iterator;
+ typedef typename G::out_edge_iterator out_edge_iterator;
+ typedef typename G::in_edge_iterator in_edge_iterator;
+ typedef typename G::vertex_iterator vertex_iterator;
+ typedef typename G::edge_iterator edge_iterator;
+
+ typedef typename G::directed_category directed_category;
+ typedef typename G::edge_parallel_category edge_parallel_category;
+ typedef typename G::traversal_category traversal_category;
+
+ typedef typename G::vertices_size_type vertices_size_type;
+ typedef typename G::edges_size_type edges_size_type;
+ typedef typename G::degree_size_type degree_size_type;
+
+ static inline vertex_descriptor null_vertex();
+ };
+
+ template <typename G>
+ inline typename graph_traits<G>::vertex_descriptor
+ graph_traits<G>::null_vertex()
+ {
+ return G::null_vertex();
+ }
+
+ // directed_category tags
+ struct directed_tag { };
+ struct undirected_tag { };
+ struct bidirectional_tag : public directed_tag { };
+
+ namespace detail {
+ inline bool is_directed(directed_tag) { return true; }
+ inline bool is_directed(undirected_tag) { return false; }
+ }
+
+ template <typename Graph>
+ bool is_directed(const Graph&) {
+ typedef typename graph_traits<Graph>::directed_category Cat;
+ return detail::is_directed(Cat());
+ }
+ template <typename Graph>
+ bool is_undirected(const Graph& g) {
+ return ! is_directed(g);
+ }
+
+ // edge_parallel_category tags
+ struct allow_parallel_edge_tag {};
+ struct disallow_parallel_edge_tag {};
+
+ namespace detail {
+ inline bool allows_parallel(allow_parallel_edge_tag) { return true; }
+ inline bool allows_parallel(disallow_parallel_edge_tag) { return false; }
+ }
+
+ template <typename Graph>
+ bool allows_parallel_edges(const Graph&) {
+ typedef typename graph_traits<Graph>::edge_parallel_category Cat;
+ return detail::allows_parallel(Cat());
+ }
+
+ // traversal_category tags
+ struct incidence_graph_tag { };
+ struct adjacency_graph_tag { };
+ struct bidirectional_graph_tag :
+ public virtual incidence_graph_tag { };
+ struct vertex_list_graph_tag { };
+ struct edge_list_graph_tag { };
+ struct adjacency_matrix_tag { };
+
+ //?? not the right place ?? Lee
+ typedef boost::forward_traversal_tag multi_pass_input_iterator_tag;
+
+ template <typename G>
+ struct edge_property_type {
+ typedef typename G::edge_property_type type;
+ };
+ template <typename G>
+ struct vertex_property_type {
+ typedef typename G::vertex_property_type type;
+ };
+ template <typename G>
+ struct graph_property_type {
+ typedef typename G::graph_property_type type;
+ };
+
+ struct no_vertex_bundle {};
+ struct no_edge_bundle {};
+
+ template<typename G>
+ struct vertex_bundle_type
+ {
+ typedef typename G::vertex_bundled type;
+ };
+
+ template<typename G>
+ struct edge_bundle_type
+ {
+ typedef typename G::edge_bundled type;
+ };
+
+ namespace graph { namespace detail {
+ template<typename Graph, typename Descriptor>
+ class bundled_result
+ {
+ typedef typename graph_traits<Graph>::vertex_descriptor Vertex;
+ typedef typename mpl::if_c<(is_same<Descriptor, Vertex>::value),
+ vertex_bundle_type<Graph>,
+ edge_bundle_type<Graph> >::type bundler;
+
+ public:
+ typedef typename bundler::type type;
+ };
+ } } // end namespace graph::detail
+} // namespace boost
+
+// Since pair is in namespace std, Koenig lookup will find source and
+// target if they are also defined in namespace std. This is illegal,
+// but the alternative is to put source and target in the global
+// namespace which causes name conflicts with other libraries (like
+// SUIF).
+namespace std {
+
+ /* Some helper functions for dealing with pairs as edges */
+ template <class T, class G>
+ T source(pair<T,T> p, const G&) { return p.first; }
+
+ template <class T, class G>
+ T target(pair<T,T> p, const G&) { return p.second; }
+
+}
+
+#if defined(__GNUC__) && defined(__SGI_STL_PORT)
+// For some reason g++ with STLport does not see the above definition
+// of source() and target() unless we bring them into the boost
+// namespace.
+namespace boost {
+ using std::source;
+ using std::target;
+}
+#endif
+
+#endif // BOOST_GRAPH_TRAITS_HPP
diff --git a/boost/boost/graph/graph_utility.hpp b/boost/boost/graph/graph_utility.hpp
new file mode 100644
index 00000000000..a579156152e
--- /dev/null
+++ b/boost/boost/graph/graph_utility.hpp
@@ -0,0 +1,425 @@
+//
+//=======================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// 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_GRAPH_UTILITY_HPP
+#define BOOST_GRAPH_UTILITY_HPP
+
+#include <stdlib.h>
+#include <iostream>
+#include <algorithm>
+#include <assert.h>
+#include <boost/config.hpp>
+#include <boost/tuple/tuple.hpp>
+
+#if !defined BOOST_NO_SLIST
+# ifdef BOOST_SLIST_HEADER
+# include BOOST_SLIST_HEADER
+# else
+# include <slist>
+# endif
+#endif
+
+#include <boost/graph/graph_traits.hpp>
+#include <boost/graph/properties.hpp>
+#include <boost/pending/container_traits.hpp>
+#include <boost/graph/depth_first_search.hpp>
+// iota moved to detail/algorithm.hpp
+#include <boost/detail/algorithm.hpp>
+
+namespace boost {
+
+ // Provide an undirected graph interface alternative to the
+ // the source() and target() edge functions.
+ template <class UndirectedGraph>
+ inline
+ std::pair<typename graph_traits<UndirectedGraph>::vertex_descriptor,
+ typename graph_traits<UndirectedGraph>::vertex_descriptor>
+ incident(typename graph_traits<UndirectedGraph>::edge_descriptor e,
+ UndirectedGraph& g)
+ {
+ return std::make_pair(source(e,g), target(e,g));
+ }
+
+ // Provide an undirected graph interface alternative
+ // to the out_edges() function.
+ template <class Graph>
+ inline
+ std::pair<typename graph_traits<Graph>::out_edge_iterator,
+ typename graph_traits<Graph>::out_edge_iterator>
+ incident_edges(typename graph_traits<Graph>::vertex_descriptor u,
+ Graph& g)
+ {
+ return out_edges(u, g);
+ }
+
+ template <class Graph>
+ inline typename graph_traits<Graph>::vertex_descriptor
+ opposite(typename graph_traits<Graph>::edge_descriptor e,
+ typename graph_traits<Graph>::vertex_descriptor v,
+ const Graph& g)
+ {
+ typedef typename graph_traits<Graph>::vertex_descriptor vertex_descriptor;
+ if (v == source(e, g))
+ return target(e, g);
+ else if (v == target(e, g))
+ return source(e, g);
+ else
+ return vertex_descriptor();
+ }
+
+ //===========================================================================
+ // Some handy predicates
+
+ template <typename Vertex, typename Graph>
+ struct incident_from_predicate {
+ incident_from_predicate(Vertex u, const Graph& g)
+ : m_u(u), m_g(g) { }
+ template <class Edge>
+ bool operator()(const Edge& e) const {
+ return source(e, m_g) == m_u;
+ }
+ Vertex m_u;
+ const Graph& m_g;
+ };
+ template <typename Vertex, typename Graph>
+ inline incident_from_predicate<Vertex, Graph>
+ incident_from(Vertex u, const Graph& g) {
+ return incident_from_predicate<Vertex, Graph>(u, g);
+ }
+
+ template <typename Vertex, typename Graph>
+ struct incident_to_predicate {
+ incident_to_predicate(Vertex u, const Graph& g)
+ : m_u(u), m_g(g) { }
+ template <class Edge>
+ bool operator()(const Edge& e) const {
+ return target(e, m_g) == m_u;
+ }
+ Vertex m_u;
+ const Graph& m_g;
+ };
+ template <typename Vertex, typename Graph>
+ inline incident_to_predicate<Vertex, Graph>
+ incident_to(Vertex u, const Graph& g) {
+ return incident_to_predicate<Vertex, Graph>(u, g);
+ }
+
+ template <typename Vertex, typename Graph>
+ struct incident_on_predicate {
+ incident_on_predicate(Vertex u, const Graph& g)
+ : m_u(u), m_g(g) { }
+ template <class Edge>
+ bool operator()(const Edge& e) const {
+ return source(e, m_g) == m_u || target(e, m_g) == m_u;
+ }
+ Vertex m_u;
+ const Graph& m_g;
+ };
+ template <typename Vertex, typename Graph>
+ inline incident_on_predicate<Vertex, Graph>
+ incident_on(Vertex u, const Graph& g) {
+ return incident_on_predicate<Vertex, Graph>(u, g);
+ }
+
+ template <typename Vertex, typename Graph>
+ struct connects_predicate {
+ connects_predicate(Vertex u, Vertex v, const Graph& g)
+ : m_u(u), m_v(v), m_g(g) { }
+ template <class Edge>
+ bool operator()(const Edge& e) const {
+ if (is_directed(m_g))
+ return source(e, m_g) == m_u && target(e, m_g) == m_v;
+ else
+ return (source(e, m_g) == m_u && target(e, m_g) == m_v)
+ || (source(e, m_g) == m_v && target(e, m_g) == m_u);
+ }
+ Vertex m_u, m_v;
+ const Graph& m_g;
+ };
+ template <typename Vertex, typename Graph>
+ inline connects_predicate<Vertex, Graph>
+ connects(Vertex u, Vertex v, const Graph& g) {
+ return connects_predicate<Vertex, Graph>(u, v, g);
+ }
+
+
+ // Need to convert all of these printing functions to take an ostream object
+ // -JGS
+
+ template <class IncidenceGraph, class Name>
+ void print_in_edges(const IncidenceGraph& G, Name name)
+ {
+ typename graph_traits<IncidenceGraph>::vertex_iterator ui,ui_end;
+ for (tie(ui,ui_end) = vertices(G); ui != ui_end; ++ui) {
+ std::cout << get(name,*ui) << " <-- ";
+ typename graph_traits<IncidenceGraph>
+ ::in_edge_iterator ei, ei_end;
+ for(tie(ei,ei_end) = in_edges(*ui,G); ei != ei_end; ++ei)
+ std::cout << get(name,source(*ei,G)) << " ";
+ std::cout << std::endl;
+ }
+ }
+
+ template <class IncidenceGraph, class Name>
+ void print_graph_dispatch(const IncidenceGraph& G, Name name, directed_tag)
+ {
+ typename graph_traits<IncidenceGraph>::vertex_iterator ui,ui_end;
+ for (tie(ui,ui_end) = vertices(G); ui != ui_end; ++ui) {
+ std::cout << get(name,*ui) << " --> ";
+ typename graph_traits<IncidenceGraph>
+ ::out_edge_iterator ei, ei_end;
+ for(tie(ei,ei_end) = out_edges(*ui,G); ei != ei_end; ++ei)
+ std::cout << get(name,target(*ei,G)) << " ";
+ std::cout << std::endl;
+ }
+ }
+ template <class IncidenceGraph, class Name>
+ void print_graph_dispatch(const IncidenceGraph& G, Name name, undirected_tag)
+ {
+ typename graph_traits<IncidenceGraph>::vertex_iterator ui,ui_end;
+ for (tie(ui,ui_end) = vertices(G); ui != ui_end; ++ui) {
+ std::cout << get(name,*ui) << " <--> ";
+ typename graph_traits<IncidenceGraph>
+ ::out_edge_iterator ei, ei_end;
+ for(tie(ei,ei_end) = out_edges(*ui,G); ei != ei_end; ++ei)
+ std::cout << get(name,target(*ei,G)) << " ";
+ std::cout << std::endl;
+ }
+ }
+ template <class IncidenceGraph, class Name>
+ void print_graph(const IncidenceGraph& G, Name name)
+ {
+ typedef typename graph_traits<IncidenceGraph>
+ ::directed_category Cat;
+ print_graph_dispatch(G, name, Cat());
+ }
+ template <class IncidenceGraph>
+ void print_graph(const IncidenceGraph& G) {
+ print_graph(G, get(vertex_index, G));
+ }
+
+ template <class EdgeListGraph, class Name>
+ void print_edges(const EdgeListGraph& G, Name name)
+ {
+ typename graph_traits<EdgeListGraph>::edge_iterator ei, ei_end;
+ for (tie(ei, ei_end) = edges(G); ei != ei_end; ++ei)
+ std::cout << "(" << get(name, source(*ei, G))
+ << "," << get(name, target(*ei, G)) << ") ";
+ std::cout << std::endl;
+ }
+
+ template <class EdgeListGraph, class VertexName, class EdgeName>
+ void print_edges2(const EdgeListGraph& G, VertexName vname, EdgeName ename)
+ {
+ typename graph_traits<EdgeListGraph>::edge_iterator ei, ei_end;
+ for (tie(ei, ei_end) = edges(G); ei != ei_end; ++ei)
+ std::cout << get(ename, *ei) << "(" << get(vname, source(*ei, G))
+ << "," << get(vname, target(*ei, G)) << ") ";
+ std::cout << std::endl;
+ }
+
+ template <class VertexListGraph, class Name>
+ void print_vertices(const VertexListGraph& G, Name name)
+ {
+ typename graph_traits<VertexListGraph>::vertex_iterator vi,vi_end;
+ for (tie(vi,vi_end) = vertices(G); vi != vi_end; ++vi)
+ std::cout << get(name,*vi) << " ";
+ std::cout << std::endl;
+ }
+
+ template <class Graph, class Vertex>
+ bool is_adj_dispatch(Graph& g, Vertex a, Vertex b, bidirectional_tag)
+ {
+ typedef typename graph_traits<Graph>::edge_descriptor
+ edge_descriptor;
+ typename graph_traits<Graph>::adjacency_iterator vi, viend,
+ adj_found;
+ tie(vi, viend) = adjacent_vertices(a, g);
+ adj_found = std::find(vi, viend, b);
+ if (adj_found == viend)
+ return false;
+
+ typename graph_traits<Graph>::out_edge_iterator oi, oiend,
+ out_found;
+ tie(oi, oiend) = out_edges(a, g);
+ out_found = std::find_if(oi, oiend, incident_to(b, g));
+ if (out_found == oiend)
+ return false;
+
+ typename graph_traits<Graph>::in_edge_iterator ii, iiend,
+ in_found;
+ tie(ii, iiend) = in_edges(b, g);
+ in_found = std::find_if(ii, iiend, incident_from(a, g));
+ if (in_found == iiend)
+ return false;
+
+ return true;
+ }
+ template <class Graph, class Vertex>
+ bool is_adj_dispatch(Graph& g, Vertex a, Vertex b, directed_tag)
+ {
+ typedef typename graph_traits<Graph>::edge_descriptor
+ edge_descriptor;
+ typename graph_traits<Graph>::adjacency_iterator vi, viend, found;
+ tie(vi, viend) = adjacent_vertices(a, g);
+#if defined(BOOST_MSVC) && BOOST_MSVC <= 1300 && defined(__SGI_STL_PORT)
+ // Getting internal compiler error with std::find()
+ found = viend;
+ for (; vi != viend; ++vi)
+ if (*vi == b) {
+ found = vi;
+ break;
+ }
+#else
+ found = std::find(vi, viend, b);
+#endif
+ if ( found == viend )
+ return false;
+
+ typename graph_traits<Graph>::out_edge_iterator oi, oiend,
+ out_found;
+ tie(oi, oiend) = out_edges(a, g);
+
+#if defined(BOOST_MSVC) && BOOST_MSVC <= 1300 && defined(__SGI_STL_PORT)
+ // Getting internal compiler error with std::find()
+ out_found = oiend;
+ for (; oi != oiend; ++oi)
+ if (target(*oi, g) == b) {
+ out_found = oi;
+ break;
+ }
+#else
+ out_found = std::find_if(oi, oiend, incident_to(b, g));
+#endif
+ if (out_found == oiend)
+ return false;
+ return true;
+ }
+ template <class Graph, class Vertex>
+ bool is_adj_dispatch(Graph& g, Vertex a, Vertex b, undirected_tag)
+ {
+ return is_adj_dispatch(g, a, b, directed_tag());
+ }
+
+ template <class Graph, class Vertex>
+ bool is_adjacent(Graph& g, Vertex a, Vertex b) {
+ typedef typename graph_traits<Graph>::directed_category Cat;
+ return is_adj_dispatch(g, a, b, Cat());
+ }
+
+ template <class Graph, class Edge>
+ bool in_edge_set(Graph& g, Edge e)
+ {
+ typename Graph::edge_iterator ei, ei_end, found;
+ tie(ei, ei_end) = edges(g);
+ found = std::find(ei, ei_end, e);
+ return found != ei_end;
+ }
+
+ template <class Graph, class Vertex>
+ bool in_vertex_set(Graph& g, Vertex v)
+ {
+ typename Graph::vertex_iterator vi, vi_end, found;
+ tie(vi, vi_end) = vertices(g);
+ found = std::find(vi, vi_end, v);
+ return found != vi_end;
+ }
+
+ template <class Graph, class Vertex>
+ bool in_edge_set(Graph& g, Vertex u, Vertex v)
+ {
+ typename Graph::edge_iterator ei, ei_end;
+ for (tie(ei,ei_end) = edges(g); ei != ei_end; ++ei)
+ if (source(*ei,g) == u && target(*ei,g) == v)
+ return true;
+ return false;
+ }
+
+ // is x a descendant of y?
+ template <typename ParentMap>
+ inline bool is_descendant
+ (typename property_traits<ParentMap>::value_type x,
+ typename property_traits<ParentMap>::value_type y,
+ ParentMap parent)
+ {
+ if (get(parent, x) == x) // x is the root of the tree
+ return false;
+ else if (get(parent, x) == y)
+ return true;
+ else
+ return is_descendant(get(parent, x), y, parent);
+ }
+
+ // is y reachable from x?
+ template <typename IncidenceGraph, typename VertexColorMap>
+ inline bool is_reachable
+ (typename graph_traits<IncidenceGraph>::vertex_descriptor x,
+ typename graph_traits<IncidenceGraph>::vertex_descriptor y,
+ const IncidenceGraph& g,
+ VertexColorMap color) // should start out white for every vertex
+ {
+ typedef typename property_traits<VertexColorMap>::value_type ColorValue;
+ dfs_visitor<> vis;
+ depth_first_visit(g, x, vis, color);
+ return get(color, y) != color_traits<ColorValue>::white();
+ }
+
+ // Is the undirected graph connected?
+ // Is the directed graph strongly connected?
+ template <typename VertexListGraph, typename VertexColorMap>
+ inline bool is_connected(const VertexListGraph& g, VertexColorMap color)
+ {
+ typedef typename property_traits<VertexColorMap>::value_type ColorValue;
+ typedef color_traits<ColorValue> Color;
+ typename graph_traits<VertexListGraph>::vertex_iterator
+ ui, ui_end, vi, vi_end, ci, ci_end;
+ for (tie(ui, ui_end) = vertices(g); ui != ui_end; ++ui)
+ for (tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
+ if (*ui != *vi) {
+ for (tie(ci, ci_end) = vertices(g); ci != ci_end; ++ci)
+ put(color, *ci, Color::white());
+ if (! is_reachable(*ui, *vi, color))
+ return false;
+ }
+ return true;
+ }
+
+ template <typename Graph>
+ bool is_self_loop
+ (typename graph_traits<Graph>::edge_descriptor e,
+ const Graph& g)
+ {
+ return source(e, g) == target(e, g);
+ }
+
+
+ template <class T1, class T2>
+ std::pair<T1,T2>
+ make_list(const T1& t1, const T2& t2)
+ { return std::make_pair(t1, t2); }
+
+ template <class T1, class T2, class T3>
+ std::pair<T1,std::pair<T2,T3> >
+ make_list(const T1& t1, const T2& t2, const T3& t3)
+ { return std::make_pair(t1, std::make_pair(t2, t3)); }
+
+ template <class T1, class T2, class T3, class T4>
+ std::pair<T1,std::pair<T2,std::pair<T3,T4> > >
+ make_list(const T1& t1, const T2& t2, const T3& t3, const T4& t4)
+ { return std::make_pair(t1, std::make_pair(t2, std::make_pair(t3, t4))); }
+
+ template <class T1, class T2, class T3, class T4, class T5>
+ std::pair<T1,std::pair<T2,std::pair<T3,std::pair<T4,T5> > > >
+ make_list(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5)
+ { return std::make_pair(t1, std::make_pair(t2, std::make_pair(t3, std::make_pair(t4, t5)))); }
+
+} /* namespace boost */
+
+#endif /* BOOST_GRAPH_UTILITY_HPP*/
diff --git a/boost/boost/graph/graphviz.hpp b/boost/boost/graph/graphviz.hpp
new file mode 100644
index 00000000000..840c0d79be2
--- /dev/null
+++ b/boost/boost/graph/graphviz.hpp
@@ -0,0 +1,772 @@
+//=======================================================================
+// Copyright 2001 University of Notre Dame.
+// Copyright 2003 Jeremy Siek
+// Authors: Lie-Quan Lee and Jeremy Siek
+//
+// 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_GRAPHVIZ_HPP
+#define BOOST_GRAPHVIZ_HPP
+
+#include <boost/config.hpp>
+#include <string>
+#include <map>
+#include <iostream>
+#include <fstream>
+#include <stdio.h> // for FILE
+#include <boost/property_map.hpp>
+#include <boost/tuple/tuple.hpp>
+#include <boost/graph/graph_traits.hpp>
+#include <boost/graph/properties.hpp>
+#include <boost/graph/subgraph.hpp>
+#include <boost/graph/adjacency_list.hpp>
+#include <boost/dynamic_property_map.hpp>
+
+#ifdef BOOST_HAS_DECLSPEC
+# if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_GRAPH_DYN_LINK)
+# ifdef BOOST_GRAPH_SOURCE
+# define BOOST_GRAPH_DECL __declspec(dllexport)
+# else
+# define BOOST_GRAPH_DECL __declspec(dllimport)
+# endif // BOOST_GRAPH_SOURCE
+# endif // DYN_LINK
+#endif // BOOST_HAS_DECLSPEC
+
+#ifndef BOOST_GRAPH_DECL
+# define BOOST_GRAPH_DECL
+#endif
+
+namespace boost {
+
+ template <typename directed_category>
+ struct graphviz_io_traits {
+ static std::string name() {
+ return "digraph";
+ }
+ static std::string delimiter() {
+ return "->";
+ } };
+
+ template <>
+ struct graphviz_io_traits <undirected_tag> {
+ static std::string name() {
+ return "graph";
+ }
+ static std::string delimiter() {
+ return "--";
+ }
+ };
+
+ struct default_writer {
+ void operator()(std::ostream&) const {
+ }
+ template <class VorE>
+ void operator()(std::ostream&, const VorE&) const {
+ }
+ };
+
+ template <class Name>
+ class label_writer {
+ public:
+ label_writer(Name _name) : name(_name) {}
+ template <class VertexOrEdge>
+ void operator()(std::ostream& out, const VertexOrEdge& v) const {
+ out << "[label=\"" << get(name, v) << "\"]";
+ }
+ private:
+ Name name;
+ };
+ template <class Name>
+ inline label_writer<Name>
+ make_label_writer(Name n) {
+ return label_writer<Name>(n);
+ }
+
+ enum edge_attribute_t { edge_attribute = 1111 };
+ enum vertex_attribute_t { vertex_attribute = 2222 };
+ enum graph_graph_attribute_t { graph_graph_attribute = 3333 };
+ enum graph_vertex_attribute_t { graph_vertex_attribute = 4444 };
+ enum graph_edge_attribute_t { graph_edge_attribute = 5555 };
+
+ BOOST_INSTALL_PROPERTY(edge, attribute);
+ BOOST_INSTALL_PROPERTY(vertex, attribute);
+ BOOST_INSTALL_PROPERTY(graph, graph_attribute);
+ BOOST_INSTALL_PROPERTY(graph, vertex_attribute);
+ BOOST_INSTALL_PROPERTY(graph, edge_attribute);
+
+
+ template <class Attribute>
+ inline void write_attributes(const Attribute& attr, std::ostream& out) {
+ typename Attribute::const_iterator i, iend;
+ i = attr.begin();
+ iend = attr.end();
+
+ while ( i != iend ) {
+ out << i->first << "=\"" << i->second << "\"";
+ ++i;
+ if ( i != iend )
+ out << ", ";
+ }
+ }
+
+ template<typename Attributes>
+ inline void write_all_attributes(Attributes attributes,
+ const std::string& name,
+ std::ostream& out)
+ {
+ typename Attributes::const_iterator i = attributes.begin(),
+ end = attributes.end();
+ if (i != end) {
+ out << name << " [\n";
+ write_attributes(attributes, out);
+ out << "];\n";
+ }
+ }
+
+ inline void write_all_attributes(detail::error_property_not_found,
+ const std::string&,
+ std::ostream&)
+ {
+ // Do nothing - no attributes exist
+ }
+
+
+
+
+ template <typename GraphGraphAttributes,
+ typename GraphNodeAttributes,
+ typename GraphEdgeAttributes>
+ struct graph_attributes_writer
+ {
+ graph_attributes_writer(GraphGraphAttributes gg,
+ GraphNodeAttributes gn,
+ GraphEdgeAttributes ge)
+ : g_attributes(gg), n_attributes(gn), e_attributes(ge) { }
+
+ void operator()(std::ostream& out) const {
+ write_all_attributes(g_attributes, "graph", out);
+ write_all_attributes(n_attributes, "node", out);
+ write_all_attributes(e_attributes, "edge", out);
+ }
+ GraphGraphAttributes g_attributes;
+ GraphNodeAttributes n_attributes;
+ GraphEdgeAttributes e_attributes;
+ };
+
+ template <typename GAttrMap, typename NAttrMap, typename EAttrMap>
+ graph_attributes_writer<GAttrMap, NAttrMap, EAttrMap>
+ make_graph_attributes_writer(const GAttrMap& g_attr, const NAttrMap& n_attr,
+ const EAttrMap& e_attr) {
+ return graph_attributes_writer<GAttrMap, NAttrMap, EAttrMap>
+ (g_attr, n_attr, e_attr);
+ }
+
+
+ template <typename Graph>
+ graph_attributes_writer
+ <typename graph_property<Graph, graph_graph_attribute_t>::type,
+ typename graph_property<Graph, graph_vertex_attribute_t>::type,
+ typename graph_property<Graph, graph_edge_attribute_t>::type>
+ make_graph_attributes_writer(const Graph& g)
+ {
+ typedef typename graph_property<Graph, graph_graph_attribute_t>::type
+ GAttrMap;
+ typedef typename graph_property<Graph, graph_vertex_attribute_t>::type
+ NAttrMap;
+ typedef typename graph_property<Graph, graph_edge_attribute_t>::type
+ EAttrMap;
+ GAttrMap gam = get_property(g, graph_graph_attribute);
+ NAttrMap nam = get_property(g, graph_vertex_attribute);
+ EAttrMap eam = get_property(g, graph_edge_attribute);
+ graph_attributes_writer<GAttrMap, NAttrMap, EAttrMap> writer(gam, nam, eam);
+ return writer;
+ }
+
+ template <typename AttributeMap>
+ struct attributes_writer {
+ attributes_writer(AttributeMap attr)
+ : attributes(attr) { }
+
+ template <class VorE>
+ void operator()(std::ostream& out, const VorE& e) const {
+ this->write_attribute(out, attributes[e]);
+ }
+
+ private:
+ template<typename AttributeSequence>
+ void write_attribute(std::ostream& out,
+ const AttributeSequence& seq) const
+ {
+ if (!seq.empty()) {
+ out << "[";
+ write_attributes(seq, out);
+ out << "]";
+ }
+ }
+
+ void write_attribute(std::ostream&,
+ detail::error_property_not_found) const
+ {
+ }
+ AttributeMap attributes;
+ };
+
+ template <typename Graph>
+ attributes_writer
+ <typename property_map<Graph, edge_attribute_t>::const_type>
+ make_edge_attributes_writer(const Graph& g)
+ {
+ typedef typename property_map<Graph, edge_attribute_t>::const_type
+ EdgeAttributeMap;
+ return attributes_writer<EdgeAttributeMap>(get(edge_attribute, g));
+ }
+
+ template <typename Graph>
+ attributes_writer
+ <typename property_map<Graph, vertex_attribute_t>::const_type>
+ make_vertex_attributes_writer(const Graph& g)
+ {
+ typedef typename property_map<Graph, vertex_attribute_t>::const_type
+ VertexAttributeMap;
+ return attributes_writer<VertexAttributeMap>(get(vertex_attribute, g));
+ }
+
+ template <typename Graph, typename VertexPropertiesWriter,
+ typename EdgePropertiesWriter, typename GraphPropertiesWriter,
+ typename VertexID>
+ inline void write_graphviz(std::ostream& out, const Graph& g,
+ VertexPropertiesWriter vpw,
+ EdgePropertiesWriter epw,
+ GraphPropertiesWriter gpw,
+ VertexID vertex_id)
+ {
+ typedef typename graph_traits<Graph>::directed_category cat_type;
+ typedef graphviz_io_traits<cat_type> Traits;
+ std::string name = "G";
+ out << Traits::name() << " " << name << " {" << std::endl;
+
+ gpw(out); //print graph properties
+
+ typename graph_traits<Graph>::vertex_iterator i, end;
+
+ for(tie(i,end) = vertices(g); i != end; ++i) {
+ out << get(vertex_id, *i);
+ vpw(out, *i); //print vertex attributes
+ out << ";" << std::endl;
+ }
+ typename graph_traits<Graph>::edge_iterator ei, edge_end;
+ for(tie(ei, edge_end) = edges(g); ei != edge_end; ++ei) {
+ out << get(vertex_id, source(*ei, g)) << Traits::delimiter() << get(vertex_id, target(*ei, g)) << " ";
+ epw(out, *ei); //print edge attributes
+ out << ";" << std::endl;
+ }
+ out << "}" << std::endl;
+ }
+
+ template <typename Graph, typename VertexPropertiesWriter,
+ typename EdgePropertiesWriter, typename GraphPropertiesWriter>
+ inline void write_graphviz(std::ostream& out, const Graph& g,
+ VertexPropertiesWriter vpw,
+ EdgePropertiesWriter epw,
+ GraphPropertiesWriter gpw)
+ { write_graphviz(out, g, vpw, epw, gpw, get(vertex_index, g)); }
+
+#if !defined(BOOST_MSVC) || BOOST_MSVC > 1300
+ // ambiguous overload problem with VC++
+ template <typename Graph>
+ inline void
+ write_graphviz(std::ostream& out, const Graph& g) {
+ default_writer dw;
+ default_writer gw;
+ write_graphviz(out, g, dw, dw, gw);
+ }
+#endif
+
+ template <typename Graph, typename VertexWriter>
+ inline void
+ write_graphviz(std::ostream& out, const Graph& g, VertexWriter vw) {
+ default_writer dw;
+ default_writer gw;
+ write_graphviz(out, g, vw, dw, gw);
+ }
+
+ template <typename Graph, typename VertexWriter, typename EdgeWriter>
+ inline void
+ write_graphviz(std::ostream& out, const Graph& g,
+ VertexWriter vw, EdgeWriter ew) {
+ default_writer gw;
+ write_graphviz(out, g, vw, ew, gw);
+ }
+
+ namespace detail {
+
+ template <class Graph_, class RandomAccessIterator, class VertexID>
+ void write_graphviz_subgraph (std::ostream& out,
+ const subgraph<Graph_>& g,
+ RandomAccessIterator vertex_marker,
+ RandomAccessIterator edge_marker,
+ VertexID vertex_id)
+ {
+ typedef subgraph<Graph_> Graph;
+ typedef typename graph_traits<Graph>::vertex_descriptor Vertex;
+ typedef typename graph_traits<Graph>::directed_category cat_type;
+ typedef graphviz_io_traits<cat_type> Traits;
+
+ typedef typename graph_property<Graph, graph_name_t>::type NameType;
+ const NameType& g_name = get_property(g, graph_name);
+
+ if ( g.is_root() )
+ out << Traits::name() ;
+ else
+ out << "subgraph";
+
+ out << " " << g_name << " {" << std::endl;
+
+ typename Graph::const_children_iterator i_child, j_child;
+
+ //print graph/node/edge attributes
+#if defined(BOOST_MSVC) && BOOST_MSVC <= 1300
+ typedef typename graph_property<Graph, graph_graph_attribute_t>::type
+ GAttrMap;
+ typedef typename graph_property<Graph, graph_vertex_attribute_t>::type
+ NAttrMap;
+ typedef typename graph_property<Graph, graph_edge_attribute_t>::type
+ EAttrMap;
+ GAttrMap gam = get_property(g, graph_graph_attribute);
+ NAttrMap nam = get_property(g, graph_vertex_attribute);
+ EAttrMap eam = get_property(g, graph_edge_attribute);
+ graph_attributes_writer<GAttrMap, NAttrMap, EAttrMap> writer(gam, nam, eam);
+ writer(out);
+#else
+ make_graph_attributes_writer(g)(out);
+#endif
+
+ //print subgraph
+ for ( tie(i_child,j_child) = g.children();
+ i_child != j_child; ++i_child )
+ write_graphviz_subgraph(out, *i_child, vertex_marker, edge_marker,
+ vertex_id);
+
+ // Print out vertices and edges not in the subgraphs.
+
+ typename graph_traits<Graph>::vertex_iterator i, end;
+ typename graph_traits<Graph>::edge_iterator ei, edge_end;
+
+ for(tie(i,end) = vertices(g); i != end; ++i) {
+ Vertex v = g.local_to_global(*i);
+ int pos = get(vertex_id, v);
+ if ( vertex_marker[pos] ) {
+ vertex_marker[pos] = false;
+ out << pos;
+#if defined(BOOST_MSVC) && BOOST_MSVC <= 1300
+ typedef typename property_map<Graph, vertex_attribute_t>::const_type
+ VertexAttributeMap;
+ attributes_writer<VertexAttributeMap> vawriter(get(vertex_attribute,
+ g.root()));
+ vawriter(out, v);
+#else
+ make_vertex_attributes_writer(g.root())(out, v);
+#endif
+ out << ";" << std::endl;
+ }
+ }
+
+ for (tie(ei, edge_end) = edges(g); ei != edge_end; ++ei) {
+ Vertex u = g.local_to_global(source(*ei,g)),
+ v = g.local_to_global(target(*ei, g));
+ int pos = get(get(edge_index, g.root()), g.local_to_global(*ei));
+ if ( edge_marker[pos] ) {
+ edge_marker[pos] = false;
+ out << get(vertex_id, u) << " " << Traits::delimiter()
+ << " " << get(vertex_id, v);
+#if defined(BOOST_MSVC) && BOOST_MSVC <= 1300
+ typedef typename property_map<Graph, edge_attribute_t>::const_type
+ EdgeAttributeMap;
+ attributes_writer<EdgeAttributeMap> eawriter(get(edge_attribute, g));
+ eawriter(out, *ei);
+#else
+ make_edge_attributes_writer(g)(out, *ei); //print edge properties
+#endif
+ out << ";" << std::endl;
+ }
+ }
+ out << "}" << std::endl;
+ }
+ } // namespace detail
+
+ // requires graph_name graph property
+ template <typename Graph>
+ void write_graphviz(std::ostream& out, const subgraph<Graph>& g) {
+ std::vector<bool> edge_marker(num_edges(g), true);
+ std::vector<bool> vertex_marker(num_vertices(g), true);
+
+ detail::write_graphviz_subgraph(out, g,
+ vertex_marker.begin(),
+ edge_marker.begin(),
+ get(vertex_index, g));
+ }
+
+ template <typename Graph>
+ void write_graphviz(const std::string& filename, const subgraph<Graph>& g) {
+ std::ofstream out(filename.c_str());
+ std::vector<bool> edge_marker(num_edges(g), true);
+ std::vector<bool> vertex_marker(num_vertices(g), true);
+
+ detail::write_graphviz_subgraph(out, g,
+ vertex_marker.begin(),
+ edge_marker.begin(),
+ get(vertex_index, g));
+ }
+
+ template <typename Graph, typename VertexID>
+ void write_graphviz(std::ostream& out, const subgraph<Graph>& g,
+ VertexID vertex_id)
+ {
+ std::vector<bool> edge_marker(num_edges(g), true);
+ std::vector<bool> vertex_marker(num_vertices(g), true);
+
+ detail::write_graphviz_subgraph(out, g,
+ vertex_marker.begin(),
+ edge_marker.begin(),
+ vertex_id);
+ }
+
+ template <typename Graph, typename VertexID>
+ void write_graphviz(const std::string& filename, const subgraph<Graph>& g,
+ VertexID vertex_id)
+ {
+ std::ofstream out(filename.c_str());
+ std::vector<bool> edge_marker(num_edges(g), true);
+ std::vector<bool> vertex_marker(num_vertices(g), true);
+
+ detail::write_graphviz_subgraph(out, g,
+ vertex_marker.begin(),
+ edge_marker.begin(),
+ vertex_id);
+ }
+
+ typedef std::map<std::string, std::string> GraphvizAttrList;
+
+ typedef property<vertex_attribute_t, GraphvizAttrList>
+ GraphvizVertexProperty;
+
+ typedef property<edge_attribute_t, GraphvizAttrList,
+ property<edge_index_t, int> >
+ GraphvizEdgeProperty;
+
+ typedef property<graph_graph_attribute_t, GraphvizAttrList,
+ property<graph_vertex_attribute_t, GraphvizAttrList,
+ property<graph_edge_attribute_t, GraphvizAttrList,
+ property<graph_name_t, std::string> > > >
+ GraphvizGraphProperty;
+
+ typedef subgraph<adjacency_list<vecS,
+ vecS, directedS,
+ GraphvizVertexProperty,
+ GraphvizEdgeProperty,
+ GraphvizGraphProperty> >
+ GraphvizDigraph;
+
+ typedef subgraph<adjacency_list<vecS,
+ vecS, undirectedS,
+ GraphvizVertexProperty,
+ GraphvizEdgeProperty,
+ GraphvizGraphProperty> >
+ GraphvizGraph;
+
+
+ // These four require linking the BGL-Graphviz library: libbgl-viz.a
+ // from the /src directory.
+ extern void read_graphviz(const std::string& file, GraphvizDigraph& g);
+ extern void read_graphviz(FILE* file, GraphvizDigraph& g);
+
+ extern void read_graphviz(const std::string& file, GraphvizGraph& g);
+ extern void read_graphviz(FILE* file, GraphvizGraph& g);
+
+ class dynamic_properties_writer
+ {
+ public:
+ dynamic_properties_writer(const dynamic_properties& dp) : dp(&dp) { }
+
+ template<typename Descriptor>
+ void operator()(std::ostream& out, Descriptor key) const
+ {
+ bool first = true;
+ for (dynamic_properties::const_iterator i = dp->begin();
+ i != dp->end(); ++i) {
+ if (typeid(key) == i->second->key()) {
+ if (first) out << " [";
+ else out << ", ";
+ first = false;
+
+ out << i->first << "=\"" << i->second->get_string(key) << "\"";
+ }
+ }
+
+ if (!first) out << "]";
+ }
+
+ private:
+ const dynamic_properties* dp;
+ };
+
+ class dynamic_vertex_properties_writer
+ {
+ public:
+ dynamic_vertex_properties_writer(const dynamic_properties& dp,
+ const std::string& node_id)
+ : dp(&dp), node_id(&node_id) { }
+
+ template<typename Descriptor>
+ void operator()(std::ostream& out, Descriptor key) const
+ {
+ bool first = true;
+ for (dynamic_properties::const_iterator i = dp->begin();
+ i != dp->end(); ++i) {
+ if (typeid(key) == i->second->key()
+ && i->first != *node_id) {
+ if (first) out << " [";
+ else out << ", ";
+ first = false;
+
+ out << i->first << "=\"" << i->second->get_string(key) << "\"";
+ }
+ }
+
+ if (!first) out << "]";
+ }
+
+ private:
+ const dynamic_properties* dp;
+ const std::string* node_id;
+ };
+
+ namespace graph { namespace detail {
+
+ template<typename Vertex>
+ struct node_id_property_map
+ {
+ typedef std::string value_type;
+ typedef value_type reference;
+ typedef Vertex key_type;
+ typedef readable_property_map_tag category;
+
+ node_id_property_map() {}
+
+ node_id_property_map(const dynamic_properties& dp,
+ const std::string& node_id)
+ : dp(&dp), node_id(&node_id) { }
+
+ const dynamic_properties* dp;
+ const std::string* node_id;
+ };
+
+ template<typename Vertex>
+ inline std::string
+ get(node_id_property_map<Vertex> pm,
+ typename node_id_property_map<Vertex>::key_type v)
+ { return get(*pm.node_id, *pm.dp, v); }
+
+ } } // end namespace graph::detail
+
+ template<typename Graph>
+ inline void
+ write_graphviz(std::ostream& out, const Graph& g,
+ const dynamic_properties& dp,
+ const std::string& node_id = "node_id")
+ {
+ typedef typename graph_traits<Graph>::vertex_descriptor Vertex;
+ write_graphviz(out, g, dp, node_id,
+ graph::detail::node_id_property_map<Vertex>(dp, node_id));
+ }
+
+ template<typename Graph, typename VertexID>
+ void
+ write_graphviz(std::ostream& out, const Graph& g,
+ const dynamic_properties& dp, const std::string& node_id,
+ VertexID id)
+ {
+ write_graphviz
+ (out, g,
+ /*vertex_writer=*/dynamic_vertex_properties_writer(dp, node_id),
+ /*edge_writer=*/dynamic_properties_writer(dp),
+ /*graph_writer=*/default_writer(),
+ id);
+ }
+
+/////////////////////////////////////////////////////////////////////////////
+// Graph reader exceptions
+/////////////////////////////////////////////////////////////////////////////
+struct graph_exception : public std::exception {
+ virtual ~graph_exception() throw() {}
+ virtual const char* what() const throw() = 0;
+};
+
+struct bad_parallel_edge : public graph_exception {
+ std::string from;
+ std::string to;
+ mutable std::string statement;
+ bad_parallel_edge(const std::string& i, const std::string& j) :
+ from(i), to(j) {}
+
+ virtual ~bad_parallel_edge() throw() {}
+ const char* what() const throw() {
+ if(statement.empty())
+ statement =
+ std::string("Failed to add parallel edge: (")
+ + from + "," + to + ")\n";
+
+ return statement.c_str();
+ }
+};
+
+struct directed_graph_error : public graph_exception {
+ virtual ~directed_graph_error() throw() {}
+ virtual const char* what() const throw() {
+ return
+ "read_graphviz: "
+ "Tried to read a directed graph into an undirected graph.";
+ }
+};
+
+struct undirected_graph_error : public graph_exception {
+ virtual ~undirected_graph_error() throw() {}
+ virtual const char* what() const throw() {
+ return
+ "read_graphviz: "
+ "Tried to read an undirected graph into a directed graph.";
+ }
+};
+
+namespace detail { namespace graph {
+
+typedef std::string id_t;
+typedef id_t node_t;
+
+// edges are not uniquely determined by adjacent nodes
+class edge_t {
+ int idx_;
+ explicit edge_t(int i) : idx_(i) {}
+public:
+ static edge_t new_edge() {
+ static int idx = 0;
+ return edge_t(idx++);
+ };
+
+ bool operator==(const edge_t& rhs) const {
+ return idx_ == rhs.idx_;
+ }
+ bool operator<(const edge_t& rhs) const {
+ return idx_ < rhs.idx_;
+ }
+};
+
+class mutate_graph
+{
+ public:
+ virtual ~mutate_graph() {}
+ virtual bool is_directed() const = 0;
+ virtual void do_add_vertex(const node_t& node) = 0;
+
+ virtual void
+ do_add_edge(const edge_t& edge, const node_t& source, const node_t& target)
+ = 0;
+
+ virtual void
+ set_node_property(const id_t& key, const node_t& node, const id_t& value) = 0;
+
+ virtual void
+ set_edge_property(const id_t& key, const edge_t& edge, const id_t& value) = 0;
+};
+
+template<typename MutableGraph>
+class mutate_graph_impl : public mutate_graph
+{
+ typedef typename graph_traits<MutableGraph>::vertex_descriptor bgl_vertex_t;
+ typedef typename graph_traits<MutableGraph>::edge_descriptor bgl_edge_t;
+
+ public:
+ mutate_graph_impl(MutableGraph& graph, dynamic_properties& dp,
+ std::string node_id_prop)
+ : graph_(graph), dp_(dp), node_id_prop_(node_id_prop) { }
+
+ ~mutate_graph_impl() {}
+
+ bool is_directed() const
+ {
+ return
+ boost::is_convertible<
+ typename boost::graph_traits<MutableGraph>::directed_category,
+ boost::directed_tag>::value;
+ }
+
+ virtual void do_add_vertex(const node_t& node)
+ {
+ // Add the node to the graph.
+ bgl_vertex_t v = add_vertex(graph_);
+
+ // Set up a mapping from name to BGL vertex.
+ bgl_nodes.insert(std::make_pair(node, v));
+
+ // node_id_prop_ allows the caller to see the real id names for nodes.
+ put(node_id_prop_, dp_, v, node);
+ }
+
+ void
+ do_add_edge(const edge_t& edge, const node_t& source, const node_t& target)
+ {
+ std::pair<bgl_edge_t, bool> result =
+ add_edge(bgl_nodes[source], bgl_nodes[target], graph_);
+
+ if(!result.second) {
+ // In the case of no parallel edges allowed
+ throw bad_parallel_edge(source, target);
+ } else {
+ bgl_edges.insert(std::make_pair(edge, result.first));
+ }
+ }
+
+ void
+ set_node_property(const id_t& key, const node_t& node, const id_t& value)
+ {
+ put(key, dp_, bgl_nodes[node], value);
+ }
+
+ void
+ set_edge_property(const id_t& key, const edge_t& edge, const id_t& value)
+ {
+ put(key, dp_, bgl_edges[edge], value);
+ }
+
+ protected:
+ MutableGraph& graph_;
+ dynamic_properties& dp_;
+ std::string node_id_prop_;
+ std::map<node_t, bgl_vertex_t> bgl_nodes;
+ std::map<edge_t, bgl_edge_t> bgl_edges;
+};
+
+BOOST_GRAPH_DECL
+bool read_graphviz(std::istream& in, mutate_graph& graph);
+
+} } // end namespace detail::graph
+
+// Parse the passed stream as a GraphViz dot file.
+template <typename MutableGraph>
+bool read_graphviz(std::istream& in, MutableGraph& graph,
+ dynamic_properties& dp,
+ std::string const& node_id = "node_id")
+{
+ detail::graph::mutate_graph_impl<MutableGraph> m_graph(graph, dp, node_id);
+ return detail::graph::read_graphviz(in, m_graph);
+}
+
+} // namespace boost
+
+#ifdef BOOST_GRAPH_READ_GRAPHVIZ_ITERATORS
+# include <boost/graph/detail/read_graphviz_spirit.hpp>
+#endif // BOOST_GRAPH_READ_GRAPHVIZ_ITERATORS
+
+#endif // BOOST_GRAPHVIZ_HPP
diff --git a/boost/boost/graph/gursoy_atun_layout.hpp b/boost/boost/graph/gursoy_atun_layout.hpp
new file mode 100644
index 00000000000..3b6ccc5ed9a
--- /dev/null
+++ b/boost/boost/graph/gursoy_atun_layout.hpp
@@ -0,0 +1,631 @@
+// Copyright 2004 The Trustees of Indiana University.
+
+// 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)
+
+// Authors: Jeremiah Willcock
+// Douglas Gregor
+// Andrew Lumsdaine
+#ifndef BOOST_GRAPH_GURSOY_ATUN_LAYOUT_HPP
+#define BOOST_GRAPH_GURSOY_ATUN_LAYOUT_HPP
+
+// Gursoy-Atun graph layout, based on:
+// "Neighbourhood Preserving Load Balancing: A Self-Organizing Approach"
+// in EuroPar 2000, p. 234 of LNCS 1900
+// http://springerlink.metapress.com/link.asp?id=pcu07ew5rhexp9yt
+
+#include <cmath>
+#include <vector>
+#include <exception>
+#include <algorithm>
+
+#include <boost/graph/visitors.hpp>
+#include <boost/graph/properties.hpp>
+#include <boost/random/uniform_01.hpp>
+#include <boost/random/linear_congruential.hpp>
+#include <boost/shared_ptr.hpp>
+#include <boost/graph/breadth_first_search.hpp>
+#include <boost/graph/dijkstra_shortest_paths.hpp>
+#include <boost/graph/named_function_params.hpp>
+
+namespace boost {
+
+namespace detail {
+
+struct over_distance_limit : public std::exception {};
+
+template <typename PositionMap, typename NodeDistanceMap, typename Topology,
+ typename Graph>
+struct update_position_visitor {
+ typedef typename Topology::point_type Point;
+ PositionMap position_map;
+ NodeDistanceMap node_distance;
+ const Topology& space;
+ Point input_vector;
+ double distance_limit;
+ double learning_constant;
+ double falloff_ratio;
+
+ typedef boost::on_examine_vertex event_filter;
+
+ typedef typename graph_traits<Graph>::vertex_descriptor
+ vertex_descriptor;
+
+ update_position_visitor(PositionMap position_map,
+ NodeDistanceMap node_distance,
+ const Topology& space,
+ const Point& input_vector,
+ double distance_limit,
+ double learning_constant,
+ double falloff_ratio):
+ position_map(position_map), node_distance(node_distance),
+ space(space),
+ input_vector(input_vector), distance_limit(distance_limit),
+ learning_constant(learning_constant), falloff_ratio(falloff_ratio) {}
+
+ void operator()(vertex_descriptor v, const Graph&) const
+ {
+#ifndef BOOST_NO_STDC_NAMESPACE
+ using std::pow;
+#endif
+
+ if (get(node_distance, v) > distance_limit)
+ throw over_distance_limit();
+ Point old_position = get(position_map, v);
+ double distance = get(node_distance, v);
+ double fraction =
+ learning_constant * pow(falloff_ratio, distance * distance);
+ put(position_map, v,
+ space.move_position_toward(old_position, fraction, input_vector));
+ }
+};
+
+template<typename EdgeWeightMap>
+struct gursoy_shortest
+{
+ template<typename Graph, typename NodeDistanceMap, typename UpdatePosition>
+ static inline void
+ run(const Graph& g, typename graph_traits<Graph>::vertex_descriptor s,
+ NodeDistanceMap node_distance, UpdatePosition& update_position,
+ EdgeWeightMap weight)
+ {
+ boost::dijkstra_shortest_paths(g, s, weight_map(weight).
+ visitor(boost::make_dijkstra_visitor(std::make_pair(
+ boost::record_distances(node_distance, boost::on_edge_relaxed()),
+ update_position))));
+ }
+};
+
+template<>
+struct gursoy_shortest<dummy_property_map>
+{
+ template<typename Graph, typename NodeDistanceMap, typename UpdatePosition>
+ static inline void
+ run(const Graph& g, typename graph_traits<Graph>::vertex_descriptor s,
+ NodeDistanceMap node_distance, UpdatePosition& update_position,
+ dummy_property_map)
+ {
+ boost::breadth_first_search(g, s,
+ visitor(boost::make_bfs_visitor(std::make_pair(
+ boost::record_distances(node_distance, boost::on_tree_edge()),
+ update_position))));
+ }
+};
+
+} // namespace detail
+
+template <typename VertexListAndIncidenceGraph, typename Topology,
+ typename PositionMap, typename Diameter, typename VertexIndexMap,
+ typename EdgeWeightMap>
+void
+gursoy_atun_step
+ (const VertexListAndIncidenceGraph& graph,
+ const Topology& space,
+ PositionMap position,
+ Diameter diameter,
+ double learning_constant,
+ VertexIndexMap vertex_index_map,
+ EdgeWeightMap weight)
+{
+#ifndef BOOST_NO_STDC_NAMESPACE
+ using std::pow;
+ using std::exp;
+#endif
+
+ typedef typename graph_traits<VertexListAndIncidenceGraph>::vertex_iterator
+ vertex_iterator;
+ typedef typename graph_traits<VertexListAndIncidenceGraph>::vertex_descriptor
+ vertex_descriptor;
+ typedef typename Topology::point_type point_type;
+ vertex_iterator i, iend;
+ std::vector<double> distance_from_input_vector(num_vertices(graph));
+ typedef boost::iterator_property_map<std::vector<double>::iterator,
+ VertexIndexMap,
+ double, double&>
+ DistanceFromInputMap;
+ DistanceFromInputMap distance_from_input(distance_from_input_vector.begin(),
+ vertex_index_map);
+ std::vector<double> node_distance_map_vector(num_vertices(graph));
+ typedef boost::iterator_property_map<std::vector<double>::iterator,
+ VertexIndexMap,
+ double, double&>
+ NodeDistanceMap;
+ NodeDistanceMap node_distance(node_distance_map_vector.begin(),
+ vertex_index_map);
+ point_type input_vector = space.random_point();
+ vertex_descriptor min_distance_loc
+ = graph_traits<VertexListAndIncidenceGraph>::null_vertex();
+ double min_distance = 0.0;
+ bool min_distance_unset = true;
+ for (boost::tie(i, iend) = vertices(graph); i != iend; ++i) {
+ double this_distance = space.distance(get(position, *i), input_vector);
+ put(distance_from_input, *i, this_distance);
+ if (min_distance_unset || this_distance < min_distance) {
+ min_distance = this_distance;
+ min_distance_loc = *i;
+ }
+ min_distance_unset = false;
+ }
+ assert (!min_distance_unset); // Graph must have at least one vertex
+ boost::detail::update_position_visitor<
+ PositionMap, NodeDistanceMap, Topology,
+ VertexListAndIncidenceGraph>
+ update_position(position, node_distance, space,
+ input_vector, diameter, learning_constant,
+ exp(-1. / (2 * diameter * diameter)));
+ std::fill(node_distance_map_vector.begin(), node_distance_map_vector.end(), 0);
+ try {
+ typedef detail::gursoy_shortest<EdgeWeightMap> shortest;
+ shortest::run(graph, min_distance_loc, node_distance, update_position,
+ weight);
+ } catch (detail::over_distance_limit) {
+ /* Thrown to break out of BFS or Dijkstra early */
+ }
+}
+
+template <typename VertexListAndIncidenceGraph, typename Topology,
+ typename PositionMap, typename VertexIndexMap,
+ typename EdgeWeightMap>
+void gursoy_atun_refine(const VertexListAndIncidenceGraph& graph,
+ const Topology& space,
+ PositionMap position,
+ int nsteps,
+ double diameter_initial,
+ double diameter_final,
+ double learning_constant_initial,
+ double learning_constant_final,
+ VertexIndexMap vertex_index_map,
+ EdgeWeightMap weight)
+{
+#ifndef BOOST_NO_STDC_NAMESPACE
+ using std::pow;
+ using std::exp;
+#endif
+
+ typedef typename graph_traits<VertexListAndIncidenceGraph>::vertex_iterator
+ vertex_iterator;
+ typedef typename graph_traits<VertexListAndIncidenceGraph>::vertex_descriptor
+ vertex_descriptor;
+ typedef typename Topology::point_type point_type;
+ vertex_iterator i, iend;
+ double diameter_ratio = (double)diameter_final / diameter_initial;
+ double learning_constant_ratio =
+ learning_constant_final / learning_constant_initial;
+ std::vector<double> distance_from_input_vector(num_vertices(graph));
+ typedef boost::iterator_property_map<std::vector<double>::iterator,
+ VertexIndexMap,
+ double, double&>
+ DistanceFromInputMap;
+ DistanceFromInputMap distance_from_input(distance_from_input_vector.begin(),
+ vertex_index_map);
+ std::vector<int> node_distance_map_vector(num_vertices(graph));
+ typedef boost::iterator_property_map<std::vector<int>::iterator,
+ VertexIndexMap, double, double&>
+ NodeDistanceMap;
+ NodeDistanceMap node_distance(node_distance_map_vector.begin(),
+ vertex_index_map);
+ for (int round = 0; round < nsteps; ++round) {
+ double part_done = (double)round / (nsteps - 1);
+ int diameter = (int)(diameter_initial * pow(diameter_ratio, part_done));
+ double learning_constant =
+ learning_constant_initial * pow(learning_constant_ratio, part_done);
+ gursoy_atun_step(graph, space, position, diameter, learning_constant,
+ vertex_index_map, weight);
+ }
+}
+
+template <typename VertexListAndIncidenceGraph, typename Topology,
+ typename PositionMap, typename VertexIndexMap,
+ typename EdgeWeightMap>
+void gursoy_atun_layout(const VertexListAndIncidenceGraph& graph,
+ const Topology& space,
+ PositionMap position,
+ int nsteps,
+ double diameter_initial,
+ double diameter_final,
+ double learning_constant_initial,
+ double learning_constant_final,
+ VertexIndexMap vertex_index_map,
+ EdgeWeightMap weight)
+{
+ typedef typename graph_traits<VertexListAndIncidenceGraph>::vertex_iterator
+ vertex_iterator;
+ vertex_iterator i, iend;
+ for (boost::tie(i, iend) = vertices(graph); i != iend; ++i) {
+ put(position, *i, space.random_point());
+ }
+ gursoy_atun_refine(graph, space,
+ position, nsteps,
+ diameter_initial, diameter_final,
+ learning_constant_initial, learning_constant_final,
+ vertex_index_map, weight);
+}
+
+template <typename VertexListAndIncidenceGraph, typename Topology,
+ typename PositionMap, typename VertexIndexMap>
+void gursoy_atun_layout(const VertexListAndIncidenceGraph& graph,
+ const Topology& space,
+ PositionMap position,
+ int nsteps,
+ double diameter_initial,
+ double diameter_final,
+ double learning_constant_initial,
+ double learning_constant_final,
+ VertexIndexMap vertex_index_map)
+{
+ gursoy_atun_layout(graph, space, position, nsteps,
+ diameter_initial, diameter_final,
+ learning_constant_initial, learning_constant_final,
+ vertex_index_map, dummy_property_map());
+}
+
+template <typename VertexListAndIncidenceGraph, typename Topology,
+ typename PositionMap>
+void gursoy_atun_layout(const VertexListAndIncidenceGraph& graph,
+ const Topology& space,
+ PositionMap position,
+ int nsteps,
+ double diameter_initial,
+ double diameter_final = 1.0,
+ double learning_constant_initial = 0.8,
+ double learning_constant_final = 0.2)
+{
+ gursoy_atun_layout(graph, space, position, nsteps, diameter_initial,
+ diameter_final, learning_constant_initial,
+ learning_constant_final, get(vertex_index, graph));
+}
+
+template <typename VertexListAndIncidenceGraph, typename Topology,
+ typename PositionMap>
+void gursoy_atun_layout(const VertexListAndIncidenceGraph& graph,
+ const Topology& space,
+ PositionMap position,
+ int nsteps)
+{
+#ifndef BOOST_NO_STDC_NAMESPACE
+ using std::sqrt;
+#endif
+
+ gursoy_atun_layout(graph, space, position, nsteps,
+ sqrt((double)num_vertices(graph)));
+}
+
+template <typename VertexListAndIncidenceGraph, typename Topology,
+ typename PositionMap>
+void gursoy_atun_layout(const VertexListAndIncidenceGraph& graph,
+ const Topology& space,
+ PositionMap position)
+{
+ gursoy_atun_layout(graph, space, position, num_vertices(graph));
+}
+
+template<typename VertexListAndIncidenceGraph, typename Topology,
+ typename PositionMap, typename P, typename T, typename R>
+void
+gursoy_atun_layout(const VertexListAndIncidenceGraph& graph,
+ const Topology& space,
+ PositionMap position,
+ const bgl_named_params<P,T,R>& params)
+{
+#ifndef BOOST_NO_STDC_NAMESPACE
+ using std::sqrt;
+#endif
+
+ std::pair<double, double> diam(sqrt(double(num_vertices(graph))), 1.0);
+ std::pair<double, double> learn(0.8, 0.2);
+ gursoy_atun_layout(graph, space, position,
+ choose_param(get_param(params, iterations_t()),
+ num_vertices(graph)),
+ choose_param(get_param(params, diameter_range_t()),
+ diam).first,
+ choose_param(get_param(params, diameter_range_t()),
+ diam).second,
+ choose_param(get_param(params, learning_constant_range_t()),
+ learn).first,
+ choose_param(get_param(params, learning_constant_range_t()),
+ learn).second,
+ choose_const_pmap(get_param(params, vertex_index), graph,
+ vertex_index),
+ choose_param(get_param(params, edge_weight),
+ dummy_property_map()));
+}
+
+/***********************************************************
+ * Topologies *
+ ***********************************************************/
+template<std::size_t Dims>
+class convex_topology
+{
+ struct point
+ {
+ point() { }
+ double& operator[](std::size_t i) {return values[i];}
+ const double& operator[](std::size_t i) const {return values[i];}
+
+ private:
+ double values[Dims];
+ };
+
+ public:
+ typedef point point_type;
+
+ double distance(point a, point b) const
+ {
+ double dist = 0;
+ for (std::size_t i = 0; i < Dims; ++i) {
+ double diff = b[i] - a[i];
+ dist += diff * diff;
+ }
+ // Exact properties of the distance are not important, as long as
+ // < on what this returns matches real distances
+ return dist;
+ }
+
+ point move_position_toward(point a, double fraction, point b) const
+ {
+ point result;
+ for (std::size_t i = 0; i < Dims; ++i)
+ result[i] = a[i] + (b[i] - a[i]) * fraction;
+ return result;
+ }
+};
+
+template<std::size_t Dims,
+ typename RandomNumberGenerator = minstd_rand>
+class hypercube_topology : public convex_topology<Dims>
+{
+ typedef uniform_01<RandomNumberGenerator, double> rand_t;
+
+ public:
+ typedef typename convex_topology<Dims>::point_type point_type;
+
+ explicit hypercube_topology(double scaling = 1.0)
+ : gen_ptr(new RandomNumberGenerator), rand(new rand_t(*gen_ptr)),
+ scaling(scaling)
+ { }
+
+ hypercube_topology(RandomNumberGenerator& gen, double scaling = 1.0)
+ : gen_ptr(), rand(new rand_t(gen)), scaling(scaling) { }
+
+ point_type random_point() const
+ {
+ point_type p;
+ for (std::size_t i = 0; i < Dims; ++i)
+ p[i] = (*rand)() * scaling;
+ return p;
+ }
+
+ private:
+ shared_ptr<RandomNumberGenerator> gen_ptr;
+ shared_ptr<rand_t> rand;
+ double scaling;
+};
+
+template<typename RandomNumberGenerator = minstd_rand>
+class square_topology : public hypercube_topology<2, RandomNumberGenerator>
+{
+ typedef hypercube_topology<2, RandomNumberGenerator> inherited;
+
+ public:
+ explicit square_topology(double scaling = 1.0) : inherited(scaling) { }
+
+ square_topology(RandomNumberGenerator& gen, double scaling = 1.0)
+ : inherited(gen, scaling) { }
+};
+
+template<typename RandomNumberGenerator = minstd_rand>
+class cube_topology : public hypercube_topology<3, RandomNumberGenerator>
+{
+ typedef hypercube_topology<3, RandomNumberGenerator> inherited;
+
+ public:
+ explicit cube_topology(double scaling = 1.0) : inherited(scaling) { }
+
+ cube_topology(RandomNumberGenerator& gen, double scaling = 1.0)
+ : inherited(gen, scaling) { }
+};
+
+template<std::size_t Dims,
+ typename RandomNumberGenerator = minstd_rand>
+class ball_topology : public convex_topology<Dims>
+{
+ typedef uniform_01<RandomNumberGenerator, double> rand_t;
+
+ public:
+ typedef typename convex_topology<Dims>::point_type point_type;
+
+ explicit ball_topology(double radius = 1.0)
+ : gen_ptr(new RandomNumberGenerator), rand(new rand_t(*gen_ptr)),
+ radius(radius)
+ { }
+
+ ball_topology(RandomNumberGenerator& gen, double radius = 1.0)
+ : gen_ptr(), rand(new rand_t(gen)), radius(radius) { }
+
+ point_type random_point() const
+ {
+ point_type p;
+ double dist_sum;
+ do {
+ dist_sum = 0.0;
+ for (std::size_t i = 0; i < Dims; ++i) {
+ double x = (*rand)() * 2*radius - radius;
+ p[i] = x;
+ dist_sum += x * x;
+ }
+ } while (dist_sum > radius*radius);
+ return p;
+ }
+
+ private:
+ shared_ptr<RandomNumberGenerator> gen_ptr;
+ shared_ptr<rand_t> rand;
+ double radius;
+};
+
+template<typename RandomNumberGenerator = minstd_rand>
+class circle_topology : public ball_topology<2, RandomNumberGenerator>
+{
+ typedef ball_topology<2, RandomNumberGenerator> inherited;
+
+ public:
+ explicit circle_topology(double radius = 1.0) : inherited(radius) { }
+
+ circle_topology(RandomNumberGenerator& gen, double radius = 1.0)
+ : inherited(gen, radius) { }
+};
+
+template<typename RandomNumberGenerator = minstd_rand>
+class sphere_topology : public ball_topology<3, RandomNumberGenerator>
+{
+ typedef ball_topology<3, RandomNumberGenerator> inherited;
+
+ public:
+ explicit sphere_topology(double radius = 1.0) : inherited(radius) { }
+
+ sphere_topology(RandomNumberGenerator& gen, double radius = 1.0)
+ : inherited(gen, radius) { }
+};
+
+template<typename RandomNumberGenerator = minstd_rand>
+class heart_topology
+{
+ // Heart is defined as the union of three shapes:
+ // Square w/ corners (+-1000, -1000), (0, 0), (0, -2000)
+ // Circle centered at (-500, -500) radius 500*sqrt(2)
+ // Circle centered at (500, -500) radius 500*sqrt(2)
+ // Bounding box (-1000, -2000) - (1000, 500*(sqrt(2) - 1))
+
+ struct point
+ {
+ point() { values[0] = 0.0; values[1] = 0.0; }
+ point(double x, double y) { values[0] = x; values[1] = y; }
+
+ double& operator[](std::size_t i) { return values[i]; }
+ double operator[](std::size_t i) const { return values[i]; }
+
+ private:
+ double values[2];
+ };
+
+ bool in_heart(point p) const
+ {
+#ifndef BOOST_NO_STDC_NAMESPACE
+ using std::abs;
+ using std::pow;
+#endif
+
+ if (p[1] < abs(p[0]) - 2000) return false; // Bottom
+ if (p[1] <= -1000) return true; // Diagonal of square
+ if (pow(p[0] - -500, 2) + pow(p[1] - -500, 2) <= 500000)
+ return true; // Left circle
+ if (pow(p[0] - 500, 2) + pow(p[1] - -500, 2) <= 500000)
+ return true; // Right circle
+ return false;
+ }
+
+ bool segment_within_heart(point p1, point p2) const
+ {
+ // Assumes that p1 and p2 are within the heart
+ if ((p1[0] < 0) == (p2[0] < 0)) return true; // Same side of symmetry line
+ if (p1[0] == p2[0]) return true; // Vertical
+ double slope = (p2[1] - p1[1]) / (p2[0] - p1[0]);
+ double intercept = p1[1] - p1[0] * slope;
+ if (intercept > 0) return false; // Crosses between circles
+ return true;
+ }
+
+ typedef uniform_01<RandomNumberGenerator, double> rand_t;
+
+ public:
+ typedef point point_type;
+
+ heart_topology()
+ : gen_ptr(new RandomNumberGenerator), rand(new rand_t(*gen_ptr)) { }
+
+ heart_topology(RandomNumberGenerator& gen)
+ : gen_ptr(), rand(new rand_t(gen)) { }
+
+ point random_point() const
+ {
+#ifndef BOOST_NO_STDC_NAMESPACE
+ using std::sqrt;
+#endif
+
+ point result;
+ double sqrt2 = sqrt(2.);
+ do {
+ result[0] = (*rand)() * (1000 + 1000 * sqrt2) - (500 + 500 * sqrt2);
+ result[1] = (*rand)() * (2000 + 500 * (sqrt2 - 1)) - 2000;
+ } while (!in_heart(result));
+ return result;
+ }
+
+ double distance(point a, point b) const
+ {
+#ifndef BOOST_NO_STDC_NAMESPACE
+ using std::sqrt;
+#endif
+ if (segment_within_heart(a, b)) {
+ // Straight line
+ return sqrt((b[0] - a[0]) * (b[0] - a[0]) + (b[1] - a[1]) * (b[1] - a[1]));
+ } else {
+ // Straight line bending around (0, 0)
+ return sqrt(a[0] * a[0] + a[1] * a[1]) + sqrt(b[0] * b[0] + b[1] * b[1]);
+ }
+ }
+
+ point move_position_toward(point a, double fraction, point b) const
+ {
+#ifndef BOOST_NO_STDC_NAMESPACE
+ using std::sqrt;
+#endif
+
+ if (segment_within_heart(a, b)) {
+ // Straight line
+ return point(a[0] + (b[0] - a[0]) * fraction,
+ a[1] + (b[1] - a[1]) * fraction);
+ } else {
+ double distance_to_point_a = sqrt(a[0] * a[0] + a[1] * a[1]);
+ double distance_to_point_b = sqrt(b[0] * b[0] + b[1] * b[1]);
+ double location_of_point = distance_to_point_a /
+ (distance_to_point_a + distance_to_point_b);
+ if (fraction < location_of_point)
+ return point(a[0] * (1 - fraction / location_of_point),
+ a[1] * (1 - fraction / location_of_point));
+ else
+ return point(
+ b[0] * ((fraction - location_of_point) / (1 - location_of_point)),
+ b[1] * ((fraction - location_of_point) / (1 - location_of_point)));
+ }
+ }
+
+ private:
+ shared_ptr<RandomNumberGenerator> gen_ptr;
+ shared_ptr<rand_t> rand;
+};
+
+} // namespace boost
+
+#endif // BOOST_GRAPH_GURSOY_ATUN_LAYOUT_HPP
diff --git a/boost/boost/graph/incremental_components.hpp b/boost/boost/graph/incremental_components.hpp
new file mode 100644
index 00000000000..4cb571bb0b1
--- /dev/null
+++ b/boost/boost/graph/incremental_components.hpp
@@ -0,0 +1,170 @@
+//
+//=======================================================================
+// Copyright 1997-2001 University of Notre Dame.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// 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_INCREMENTAL_COMPONENTS_HPP
+#define BOOST_INCREMENTAL_COMPONENTS_HPP
+
+#include <boost/detail/iterator.hpp>
+#include <boost/graph/detail/incremental_components.hpp>
+
+namespace boost {
+
+ // A connected component algorithm for the case when dynamically
+ // adding (but not removing) edges is common. The
+ // incremental_components() function is a preparing operation. Call
+ // same_component to check whether two vertices are in the same
+ // component, or use disjoint_set::find_set to determine the
+ // representative for a vertex.
+
+ // This version of connected components does not require a full
+ // Graph. Instead, it just needs an edge list, where the vertices of
+ // each edge need to be of integer type. The edges are assumed to
+ // be undirected. The other difference is that the result is stored in
+ // a container, instead of just a decorator. The container should be
+ // empty before the algorithm is called. It will grow during the
+ // course of the algorithm. The container must be a model of
+ // BackInsertionSequence and RandomAccessContainer
+ // (std::vector is a good choice). After running the algorithm the
+ // index container will map each vertex to the representative
+ // vertex of the component to which it belongs.
+ //
+ // Adapted from an implementation by Alex Stepanov. The disjoint
+ // sets data structure is from Tarjan's "Data Structures and Network
+ // Algorithms", and the application to connected components is
+ // similar to the algorithm described in Ch. 22 of "Intro to
+ // Algorithms" by Cormen, et. all.
+ //
+ // RankContainer is a random accessable container (operator[] is
+ // defined) with a value type that can represent an integer part of
+ // a binary log of the value type of the corresponding
+ // ParentContainer (char is always enough) its size_type is no less
+ // than the size_type of the corresponding ParentContainer
+
+ // An implementation of disjoint sets can be found in
+ // boost/pending/disjoint_sets.hpp
+
+ template <class EdgeListGraph, class DisjointSets>
+ void incremental_components(EdgeListGraph& g, DisjointSets& ds)
+ {
+ typename graph_traits<EdgeListGraph>::edge_iterator e, end;
+ for (tie(e,end) = edges(g); e != end; ++e)
+ ds.union_set(source(*e,g),target(*e,g));
+ }
+
+ template <class ParentIterator>
+ void compress_components(ParentIterator first, ParentIterator last)
+ {
+ for (ParentIterator current = first; current != last; ++current)
+ detail::find_representative_with_full_compression(first, current-first);
+ }
+
+ template <class ParentIterator>
+ typename boost::detail::iterator_traits<ParentIterator>::difference_type
+ component_count(ParentIterator first, ParentIterator last)
+ {
+ std::ptrdiff_t count = 0;
+ for (ParentIterator current = first; current != last; ++current)
+ if (*current == current - first) ++count;
+ return count;
+ }
+
+ // This algorithm can be applied to the result container of the
+ // connected_components algorithm to normalize
+ // the components.
+ template <class ParentIterator>
+ void normalize_components(ParentIterator first, ParentIterator last)
+ {
+ for (ParentIterator current = first; current != last; ++current)
+ detail::normalize_node(first, current - first);
+ }
+
+ template <class VertexListGraph, class DisjointSets>
+ void initialize_incremental_components(VertexListGraph& G, DisjointSets& ds)
+ {
+ typename graph_traits<VertexListGraph>
+ ::vertex_iterator v, vend;
+ for (tie(v, vend) = vertices(G); v != vend; ++v)
+ ds.make_set(*v);
+ }
+
+ template <class Vertex, class DisjointSet>
+ inline bool same_component(Vertex u, Vertex v, DisjointSet& ds)
+ {
+ return ds.find_set(u) == ds.find_set(v);
+ }
+
+ // considering changing the so that it initializes with a pair of
+ // vertex iterators and a parent PA.
+
+ template <class IndexT>
+ class component_index
+ {
+ public://protected: (avoid friends for now)
+ typedef std::vector<IndexT> MyIndexContainer;
+ MyIndexContainer header;
+ MyIndexContainer index;
+ typedef typename MyIndexContainer::size_type SizeT;
+ typedef typename MyIndexContainer::const_iterator IndexIter;
+ public:
+ typedef detail::component_iterator<IndexIter, IndexT, SizeT>
+ component_iterator;
+ class component {
+ friend class component_index;
+ protected:
+ IndexT number;
+ const component_index<IndexT>* comp_ind_ptr;
+ component(IndexT i, const component_index<IndexT>* p)
+ : number(i), comp_ind_ptr(p) {}
+ public:
+ typedef component_iterator iterator;
+ typedef component_iterator const_iterator;
+ typedef IndexT value_type;
+ iterator begin() const {
+ return iterator( comp_ind_ptr->index.begin(),
+ (comp_ind_ptr->header)[number] );
+ }
+ iterator end() const {
+ return iterator( comp_ind_ptr->index.begin(),
+ comp_ind_ptr->index.size() );
+ }
+ };
+ typedef SizeT size_type;
+ typedef component value_type;
+
+#if defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS)
+ template <class Iterator>
+ component_index(Iterator first, Iterator last)
+ : index(std::distance(first, last))
+ {
+ std::copy(first, last, index.begin());
+ detail::construct_component_index(index, header);
+ }
+#else
+ template <class Iterator>
+ component_index(Iterator first, Iterator last)
+ : index(first, last)
+ {
+ detail::construct_component_index(index, header);
+ }
+#endif
+
+ component operator[](IndexT i) const {
+ return component(i, this);
+ }
+ SizeT size() const {
+ return header.size();
+ }
+
+ };
+
+} // namespace boost
+
+#endif // BOOST_INCREMENTAL_COMPONENTS_HPP
diff --git a/boost/boost/graph/isomorphism.hpp b/boost/boost/graph/isomorphism.hpp
new file mode 100644
index 00000000000..1b8fe790fa8
--- /dev/null
+++ b/boost/boost/graph/isomorphism.hpp
@@ -0,0 +1,467 @@
+// Copyright (C) 2001 Jeremy Siek, Douglas Gregor, Brian Osman
+//
+// 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_GRAPH_ISOMORPHISM_HPP
+#define BOOST_GRAPH_ISOMORPHISM_HPP
+
+#include <utility>
+#include <vector>
+#include <iterator>
+#include <algorithm>
+#include <boost/config.hpp>
+#include <boost/graph/depth_first_search.hpp>
+#include <boost/utility.hpp>
+#include <boost/detail/algorithm.hpp>
+#include <boost/pending/indirect_cmp.hpp> // for make_indirect_pmap
+
+#ifndef BOOST_GRAPH_ITERATION_MACROS_HPP
+#define BOOST_ISO_INCLUDED_ITER_MACROS // local macro, see bottom of file
+#include <boost/graph/iteration_macros.hpp>
+#endif
+
+namespace boost {
+
+ namespace detail {
+
+ template <typename Graph1, typename Graph2, typename IsoMapping,
+ typename Invariant1, typename Invariant2,
+ typename IndexMap1, typename IndexMap2>
+ class isomorphism_algo
+ {
+ typedef typename graph_traits<Graph1>::vertex_descriptor vertex1_t;
+ typedef typename graph_traits<Graph2>::vertex_descriptor vertex2_t;
+ typedef typename graph_traits<Graph1>::edge_descriptor edge1_t;
+ typedef typename graph_traits<Graph1>::vertices_size_type size_type;
+ typedef typename Invariant1::result_type invar1_value;
+ typedef typename Invariant2::result_type invar2_value;
+
+ const Graph1& G1;
+ const Graph2& G2;
+ IsoMapping f;
+ Invariant1 invariant1;
+ Invariant2 invariant2;
+ std::size_t max_invariant;
+ IndexMap1 index_map1;
+ IndexMap2 index_map2;
+
+ std::vector<vertex1_t> dfs_vertices;
+ typedef typename std::vector<vertex1_t>::iterator vertex_iter;
+ std::vector<int> dfs_num_vec;
+ typedef safe_iterator_property_map<typename std::vector<int>::iterator,
+ IndexMap1
+#ifdef BOOST_NO_STD_ITERATOR_TRAITS
+ , int, int&
+#endif /* BOOST_NO_STD_ITERATOR_TRAITS */
+ > DFSNumMap;
+ DFSNumMap dfs_num;
+ std::vector<edge1_t> ordered_edges;
+ typedef typename std::vector<edge1_t>::iterator edge_iter;
+
+ std::vector<char> in_S_vec;
+ typedef safe_iterator_property_map<typename std::vector<char>::iterator,
+ IndexMap2
+#ifdef BOOST_NO_STD_ITERATOR_TRAITS
+ , char, char&
+#endif /* BOOST_NO_STD_ITERATOR_TRAITS */
+ > InSMap;
+ InSMap in_S;
+
+ int num_edges_on_k;
+
+ friend struct compare_multiplicity;
+ struct compare_multiplicity
+ {
+ compare_multiplicity(Invariant1 invariant1, size_type* multiplicity)
+ : invariant1(invariant1), multiplicity(multiplicity) { }
+ bool operator()(const vertex1_t& x, const vertex1_t& y) const {
+ return multiplicity[invariant1(x)] < multiplicity[invariant1(y)];
+ }
+ Invariant1 invariant1;
+ size_type* multiplicity;
+ };
+
+ struct record_dfs_order : default_dfs_visitor
+ {
+ record_dfs_order(std::vector<vertex1_t>& v, std::vector<edge1_t>& e)
+ : vertices(v), edges(e) { }
+
+ void discover_vertex(vertex1_t v, const Graph1&) const {
+ vertices.push_back(v);
+ }
+ void examine_edge(edge1_t e, const Graph1& G1) const {
+ edges.push_back(e);
+ }
+ std::vector<vertex1_t>& vertices;
+ std::vector<edge1_t>& edges;
+ };
+
+ struct edge_cmp {
+ edge_cmp(const Graph1& G1, DFSNumMap dfs_num)
+ : G1(G1), dfs_num(dfs_num) { }
+ bool operator()(const edge1_t& e1, const edge1_t& e2) const {
+ using namespace std;
+ int u1 = dfs_num[source(e1,G1)], v1 = dfs_num[target(e1,G1)];
+ int u2 = dfs_num[source(e2,G1)], v2 = dfs_num[target(e2,G1)];
+ int m1 = (max)(u1, v1);
+ int m2 = (max)(u2, v2);
+ // lexicographical comparison
+ return std::make_pair(m1, std::make_pair(u1, v1))
+ < std::make_pair(m2, std::make_pair(u2, v2));
+ }
+ const Graph1& G1;
+ DFSNumMap dfs_num;
+ };
+
+ public:
+ isomorphism_algo(const Graph1& G1, const Graph2& G2, IsoMapping f,
+ Invariant1 invariant1, Invariant2 invariant2, std::size_t max_invariant,
+ IndexMap1 index_map1, IndexMap2 index_map2)
+ : G1(G1), G2(G2), f(f), invariant1(invariant1), invariant2(invariant2),
+ max_invariant(max_invariant),
+ index_map1(index_map1), index_map2(index_map2)
+ {
+ in_S_vec.resize(num_vertices(G1));
+ in_S = make_safe_iterator_property_map
+ (in_S_vec.begin(), in_S_vec.size(), index_map2
+#ifdef BOOST_NO_STD_ITERATOR_TRAITS
+ , in_S_vec.front()
+#endif /* BOOST_NO_STD_ITERATOR_TRAITS */
+ );
+ }
+
+ bool test_isomorphism()
+ {
+ {
+ std::vector<invar1_value> invar1_array;
+ BGL_FORALL_VERTICES_T(v, G1, Graph1)
+ invar1_array.push_back(invariant1(v));
+ sort(invar1_array);
+
+ std::vector<invar2_value> invar2_array;
+ BGL_FORALL_VERTICES_T(v, G2, Graph2)
+ invar2_array.push_back(invariant2(v));
+ sort(invar2_array);
+ if (! equal(invar1_array, invar2_array))
+ return false;
+ }
+
+ std::vector<vertex1_t> V_mult;
+ BGL_FORALL_VERTICES_T(v, G1, Graph1)
+ V_mult.push_back(v);
+ {
+ std::vector<size_type> multiplicity(max_invariant, 0);
+ BGL_FORALL_VERTICES_T(v, G1, Graph1)
+ ++multiplicity[invariant1(v)];
+ sort(V_mult, compare_multiplicity(invariant1, &multiplicity[0]));
+ }
+
+ std::vector<default_color_type> color_vec(num_vertices(G1));
+ safe_iterator_property_map<std::vector<default_color_type>::iterator,
+ IndexMap1
+#ifdef BOOST_NO_STD_ITERATOR_TRAITS
+ , default_color_type, default_color_type&
+#endif /* BOOST_NO_STD_ITERATOR_TRAITS */
+ >
+ color_map(color_vec.begin(), color_vec.size(), index_map1);
+ record_dfs_order dfs_visitor(dfs_vertices, ordered_edges);
+ typedef color_traits<default_color_type> Color;
+ for (vertex_iter u = V_mult.begin(); u != V_mult.end(); ++u) {
+ if (color_map[*u] == Color::white()) {
+ dfs_visitor.start_vertex(*u, G1);
+ depth_first_visit(G1, *u, dfs_visitor, color_map);
+ }
+ }
+ // Create the dfs_num array and dfs_num_map
+ dfs_num_vec.resize(num_vertices(G1));
+ dfs_num = make_safe_iterator_property_map(dfs_num_vec.begin(),
+ dfs_num_vec.size(),
+ index_map1
+#ifdef BOOST_NO_STD_ITERATOR_TRAITS
+ , dfs_num_vec.front()
+#endif /* BOOST_NO_STD_ITERATOR_TRAITS */
+ );
+ size_type n = 0;
+ for (vertex_iter v = dfs_vertices.begin(); v != dfs_vertices.end(); ++v)
+ dfs_num[*v] = n++;
+
+ sort(ordered_edges, edge_cmp(G1, dfs_num));
+
+
+ int dfs_num_k = -1;
+ return this->match(ordered_edges.begin(), dfs_num_k);
+ }
+
+ private:
+ bool match(edge_iter iter, int dfs_num_k)
+ {
+ if (iter != ordered_edges.end()) {
+ vertex1_t i = source(*iter, G1), j = target(*iter, G2);
+ if (dfs_num[i] > dfs_num_k) {
+ vertex1_t kp1 = dfs_vertices[dfs_num_k + 1];
+ BGL_FORALL_VERTICES_T(u, G2, Graph2) {
+ if (invariant1(kp1) == invariant2(u) && in_S[u] == false) {
+ f[kp1] = u;
+ in_S[u] = true;
+ num_edges_on_k = 0;
+
+ if (match(iter, dfs_num_k + 1))
+#if 0
+ // dwa 2003/7/11 -- this *HAS* to be a bug!
+ ;
+#endif
+ return true;
+
+ in_S[u] = false;
+ }
+ }
+
+ }
+ else if (dfs_num[j] > dfs_num_k) {
+ vertex1_t k = dfs_vertices[dfs_num_k];
+ num_edges_on_k -=
+ count_if(adjacent_vertices(f[k], G2), make_indirect_pmap(in_S));
+
+ for (int jj = 0; jj < dfs_num_k; ++jj) {
+ vertex1_t j = dfs_vertices[jj];
+ num_edges_on_k -= count(adjacent_vertices(f[j], G2), f[k]);
+ }
+
+ if (num_edges_on_k != 0)
+ return false;
+ BGL_FORALL_ADJ_T(f[i], v, G2, Graph2)
+ if (invariant2(v) == invariant1(j) && in_S[v] == false) {
+ f[j] = v;
+ in_S[v] = true;
+ num_edges_on_k = 1;
+ BOOST_USING_STD_MAX();
+ int next_k = max BOOST_PREVENT_MACRO_SUBSTITUTION(dfs_num_k, max BOOST_PREVENT_MACRO_SUBSTITUTION(dfs_num[i], dfs_num[j]));
+ if (match(next(iter), next_k))
+ return true;
+ in_S[v] = false;
+ }
+
+
+ }
+ else {
+ if (contains(adjacent_vertices(f[i], G2), f[j])) {
+ ++num_edges_on_k;
+ if (match(next(iter), dfs_num_k))
+ return true;
+ }
+
+ }
+ } else
+ return true;
+ return false;
+ }
+
+ };
+
+
+ template <typename Graph, typename InDegreeMap>
+ void compute_in_degree(const Graph& g, InDegreeMap in_degree_map)
+ {
+ BGL_FORALL_VERTICES_T(v, g, Graph)
+ put(in_degree_map, v, 0);
+
+ BGL_FORALL_VERTICES_T(u, g, Graph)
+ BGL_FORALL_ADJ_T(u, v, g, Graph)
+ put(in_degree_map, v, get(in_degree_map, v) + 1);
+ }
+
+ } // namespace detail
+
+
+ template <typename InDegreeMap, typename Graph>
+ class degree_vertex_invariant
+ {
+ typedef typename graph_traits<Graph>::vertex_descriptor vertex_t;
+ typedef typename graph_traits<Graph>::degree_size_type size_type;
+ public:
+ typedef vertex_t argument_type;
+ typedef size_type result_type;
+
+ degree_vertex_invariant(const InDegreeMap& in_degree_map, const Graph& g)
+ : m_in_degree_map(in_degree_map), m_g(g) { }
+
+ size_type operator()(vertex_t v) const {
+ return (num_vertices(m_g) + 1) * out_degree(v, m_g)
+ + get(m_in_degree_map, v);
+ }
+ // The largest possible vertex invariant number
+ size_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const {
+ return num_vertices(m_g) * num_vertices(m_g) + num_vertices(m_g);
+ }
+ private:
+ InDegreeMap m_in_degree_map;
+ const Graph& m_g;
+ };
+
+
+ template <typename Graph1, typename Graph2, typename IsoMapping,
+ typename Invariant1, typename Invariant2,
+ typename IndexMap1, typename IndexMap2>
+ bool isomorphism(const Graph1& G1, const Graph2& G2, IsoMapping f,
+ Invariant1 invariant1, Invariant2 invariant2,
+ std::size_t max_invariant,
+ IndexMap1 index_map1, IndexMap2 index_map2)
+
+ {
+ // Graph requirements
+ function_requires< VertexListGraphConcept<Graph1> >();
+ function_requires< EdgeListGraphConcept<Graph1> >();
+ function_requires< VertexListGraphConcept<Graph2> >();
+ function_requires< BidirectionalGraphConcept<Graph2> >();
+
+ typedef typename graph_traits<Graph1>::vertex_descriptor vertex1_t;
+ typedef typename graph_traits<Graph2>::vertex_descriptor vertex2_t;
+ typedef typename graph_traits<Graph1>::vertices_size_type size_type;
+
+ // Vertex invariant requirement
+ function_requires< AdaptableUnaryFunctionConcept<Invariant1,
+ size_type, vertex1_t> >();
+ function_requires< AdaptableUnaryFunctionConcept<Invariant2,
+ size_type, vertex2_t> >();
+
+ // Property map requirements
+ function_requires< ReadWritePropertyMapConcept<IsoMapping, vertex1_t> >();
+ typedef typename property_traits<IsoMapping>::value_type IsoMappingValue;
+ BOOST_STATIC_ASSERT((is_same<IsoMappingValue, vertex2_t>::value));
+
+ function_requires< ReadablePropertyMapConcept<IndexMap1, vertex1_t> >();
+ typedef typename property_traits<IndexMap1>::value_type IndexMap1Value;
+ BOOST_STATIC_ASSERT((is_convertible<IndexMap1Value, size_type>::value));
+
+ function_requires< ReadablePropertyMapConcept<IndexMap2, vertex2_t> >();
+ typedef typename property_traits<IndexMap2>::value_type IndexMap2Value;
+ BOOST_STATIC_ASSERT((is_convertible<IndexMap2Value, size_type>::value));
+
+ if (num_vertices(G1) != num_vertices(G2))
+ return false;
+ if (num_vertices(G1) == 0 && num_vertices(G2) == 0)
+ return true;
+
+ detail::isomorphism_algo<Graph1, Graph2, IsoMapping, Invariant1,
+ Invariant2, IndexMap1, IndexMap2>
+ algo(G1, G2, f, invariant1, invariant2, max_invariant,
+ index_map1, index_map2);
+ return algo.test_isomorphism();
+ }
+
+
+ namespace detail {
+
+ template <typename Graph1, typename Graph2,
+ typename IsoMapping,
+ typename IndexMap1, typename IndexMap2,
+ typename P, typename T, typename R>
+ bool isomorphism_impl(const Graph1& G1, const Graph2& G2,
+ IsoMapping f, IndexMap1 index_map1, IndexMap2 index_map2,
+ const bgl_named_params<P,T,R>& params)
+ {
+ std::vector<std::size_t> in_degree1_vec(num_vertices(G1));
+ typedef safe_iterator_property_map<std::vector<std::size_t>::iterator,
+ IndexMap1
+#ifdef BOOST_NO_STD_ITERATOR_TRAITS
+ , std::size_t, std::size_t&
+#endif /* BOOST_NO_STD_ITERATOR_TRAITS */
+ > InDeg1;
+ InDeg1 in_degree1(in_degree1_vec.begin(), in_degree1_vec.size(), index_map1);
+ compute_in_degree(G1, in_degree1);
+
+ std::vector<std::size_t> in_degree2_vec(num_vertices(G2));
+ typedef safe_iterator_property_map<std::vector<std::size_t>::iterator,
+ IndexMap2
+#ifdef BOOST_NO_STD_ITERATOR_TRAITS
+ , std::size_t, std::size_t&
+#endif /* BOOST_NO_STD_ITERATOR_TRAITS */
+ > InDeg2;
+ InDeg2 in_degree2(in_degree2_vec.begin(), in_degree2_vec.size(), index_map2);
+ compute_in_degree(G2, in_degree2);
+
+ degree_vertex_invariant<InDeg1, Graph1> invariant1(in_degree1, G1);
+ degree_vertex_invariant<InDeg2, Graph2> invariant2(in_degree2, G2);
+
+ return isomorphism(G1, G2, f,
+ choose_param(get_param(params, vertex_invariant1_t()), invariant1),
+ choose_param(get_param(params, vertex_invariant2_t()), invariant2),
+ choose_param(get_param(params, vertex_max_invariant_t()), (invariant2.max)()),
+ index_map1, index_map2
+ );
+ }
+
+ } // namespace detail
+
+
+ // Named parameter interface
+ template <typename Graph1, typename Graph2, class P, class T, class R>
+ bool isomorphism(const Graph1& g1,
+ const Graph2& g2,
+ const bgl_named_params<P,T,R>& params)
+ {
+ typedef typename graph_traits<Graph2>::vertex_descriptor vertex2_t;
+ typename std::vector<vertex2_t>::size_type n = num_vertices(g1);
+ std::vector<vertex2_t> f(n);
+ return detail::isomorphism_impl
+ (g1, g2,
+ choose_param(get_param(params, vertex_isomorphism_t()),
+ make_safe_iterator_property_map(f.begin(), f.size(),
+ choose_const_pmap(get_param(params, vertex_index1),
+ g1, vertex_index), vertex2_t())),
+ choose_const_pmap(get_param(params, vertex_index1), g1, vertex_index),
+ choose_const_pmap(get_param(params, vertex_index2), g2, vertex_index),
+ params
+ );
+ }
+
+ // All defaults interface
+ template <typename Graph1, typename Graph2>
+ bool isomorphism(const Graph1& g1, const Graph2& g2)
+ {
+ return isomorphism(g1, g2,
+ bgl_named_params<int, buffer_param_t>(0));// bogus named param
+ }
+
+
+ // Verify that the given mapping iso_map from the vertices of g1 to the
+ // vertices of g2 describes an isomorphism.
+ // Note: this could be made much faster by specializing based on the graph
+ // concepts modeled, but since we're verifying an O(n^(lg n)) algorithm,
+ // O(n^4) won't hurt us.
+ template<typename Graph1, typename Graph2, typename IsoMap>
+ inline bool verify_isomorphism(const Graph1& g1, const Graph2& g2, IsoMap iso_map)
+ {
+#if 0
+ // problematic for filtered_graph!
+ if (num_vertices(g1) != num_vertices(g2) || num_edges(g1) != num_edges(g2))
+ return false;
+#endif
+
+ for (typename graph_traits<Graph1>::edge_iterator e1 = edges(g1).first;
+ e1 != edges(g1).second; ++e1) {
+ bool found_edge = false;
+ for (typename graph_traits<Graph2>::edge_iterator e2 = edges(g2).first;
+ e2 != edges(g2).second && !found_edge; ++e2) {
+ if (source(*e2, g2) == get(iso_map, source(*e1, g1)) &&
+ target(*e2, g2) == get(iso_map, target(*e1, g1))) {
+ found_edge = true;
+ }
+ }
+
+ if (!found_edge)
+ return false;
+ }
+
+ return true;
+ }
+
+} // namespace boost
+
+#ifdef BOOST_ISO_INCLUDED_ITER_MACROS
+#undef BOOST_ISO_INCLUDED_ITER_MACROS
+#include <boost/graph/iteration_macros_undef.hpp>
+#endif
+
+#endif // BOOST_GRAPH_ISOMORPHISM_HPP
diff --git a/boost/boost/graph/iteration_macros.hpp b/boost/boost/graph/iteration_macros.hpp
new file mode 100644
index 00000000000..850e887518f
--- /dev/null
+++ b/boost/boost/graph/iteration_macros.hpp
@@ -0,0 +1,129 @@
+//=======================================================================
+// Copyright 2001 Indiana University
+// Author: Jeremy G. Siek
+//
+// 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_GRAPH_ITERATION_MACROS_HPP
+#define BOOST_GRAPH_ITERATION_MACROS_HPP
+
+#define BGL_CAT(x,y) x ## y
+#define BGL_FIRST(linenum) BGL_CAT(bgl_first_,linenum)
+#define BGL_LAST(linenum) BGL_CAT(bgl_last_,linenum)
+
+/*
+ BGL_FORALL_VERTICES_T(v, g, graph_t) // This is on line 9
+ expands to the following, but all on the same line
+
+ for (typename boost::graph_traits<graph_t>::vertex_iterator
+ bgl_first_9 = vertices(g).first, bgl_last_9 = vertices(g).second;
+ bgl_first_9 != bgl_last_9; bgl_first_9 = bgl_last_9)
+ for (typename boost::graph_traits<graph_t>::vertex_descriptor v;
+ bgl_first_9 != bgl_last ? (v = *bgl_first_9, true) : false;
+ ++bgl_first_9)
+
+ The purpose of having two for-loops is just to provide a place to
+ declare both the iterator and value variables. There is really only
+ one loop. The stopping condition gets executed two more times than it
+ usually would be, oh well. The reason for the bgl_first_9 = bgl_last_9
+ in the outer for-loop is in case the user puts a break statement
+ in the inner for-loop.
+
+ The other macros work in a similar fashion.
+
+ Use the _T versions when the graph type is a template parameter or
+ dependent on a template parameter. Otherwise use the non _T versions.
+
+ */
+
+
+#define BGL_FORALL_VERTICES_T(VNAME, GNAME, GraphType) \
+for (typename boost::graph_traits<GraphType>::vertex_iterator \
+ BGL_FIRST(__LINE__) = vertices(GNAME).first, BGL_LAST(__LINE__) = vertices(GNAME).second; \
+ BGL_FIRST(__LINE__) != BGL_LAST(__LINE__); BGL_FIRST(__LINE__) = BGL_LAST(__LINE__)) \
+ for (typename boost::graph_traits<GraphType>::vertex_descriptor VNAME; \
+ BGL_FIRST(__LINE__) != BGL_LAST(__LINE__) ? (VNAME = *BGL_FIRST(__LINE__), true):false; \
+ ++BGL_FIRST(__LINE__))
+
+#define BGL_FORALL_VERTICES(VNAME, GNAME, GraphType) \
+for (boost::graph_traits<GraphType>::vertex_iterator \
+ BGL_FIRST(__LINE__) = vertices(GNAME).first, BGL_LAST(__LINE__) = vertices(GNAME).second; \
+ BGL_FIRST(__LINE__) != BGL_LAST(__LINE__); BGL_FIRST(__LINE__) = BGL_LAST(__LINE__)) \
+ for (boost::graph_traits<GraphType>::vertex_descriptor VNAME; \
+ BGL_FIRST(__LINE__) != BGL_LAST(__LINE__) ? (VNAME = *BGL_FIRST(__LINE__), true):false; \
+ ++BGL_FIRST(__LINE__))
+
+#define BGL_FORALL_EDGES_T(ENAME, GNAME, GraphType) \
+for (typename boost::graph_traits<GraphType>::edge_iterator \
+ BGL_FIRST(__LINE__) = edges(GNAME).first, BGL_LAST(__LINE__) = edges(GNAME).second; \
+ BGL_FIRST(__LINE__) != BGL_LAST(__LINE__); BGL_FIRST(__LINE__) = BGL_LAST(__LINE__)) \
+ for (typename boost::graph_traits<GraphType>::edge_descriptor ENAME; \
+ BGL_FIRST(__LINE__) != BGL_LAST(__LINE__) ? (ENAME = *BGL_FIRST(__LINE__), true):false; \
+ ++BGL_FIRST(__LINE__))
+
+#define BGL_FORALL_EDGES(ENAME, GNAME, GraphType) \
+for (boost::graph_traits<GraphType>::edge_iterator \
+ BGL_FIRST(__LINE__) = edges(GNAME).first, BGL_LAST(__LINE__) = edges(GNAME).second; \
+ BGL_FIRST(__LINE__) != BGL_LAST(__LINE__); BGL_FIRST(__LINE__) = BGL_LAST(__LINE__)) \
+ for (boost::graph_traits<GraphType>::edge_descriptor ENAME; \
+ BGL_FIRST(__LINE__) != BGL_LAST(__LINE__) ? (ENAME = *BGL_FIRST(__LINE__), true):false; \
+ ++BGL_FIRST(__LINE__))
+
+#define BGL_FORALL_ADJ_T(UNAME, VNAME, GNAME, GraphType) \
+for (typename boost::graph_traits<GraphType>::adjacency_iterator \
+ BGL_FIRST(__LINE__) = adjacent_vertices(UNAME, GNAME).first,\
+ BGL_LAST(__LINE__) = adjacent_vertices(UNAME, GNAME).second; \
+ BGL_FIRST(__LINE__) != BGL_LAST(__LINE__); BGL_FIRST(__LINE__) = BGL_LAST(__LINE__)) \
+for (typename boost::graph_traits<GraphType>::vertex_descriptor VNAME; \
+ BGL_FIRST(__LINE__) != BGL_LAST(__LINE__) ? (VNAME = *BGL_FIRST(__LINE__), true) : false; \
+ ++BGL_FIRST(__LINE__))
+
+#define BGL_FORALL_ADJ(UNAME, VNAME, GNAME, GraphType) \
+for (boost::graph_traits<GraphType>::adjacency_iterator \
+ BGL_FIRST(__LINE__) = adjacent_vertices(UNAME, GNAME).first,\
+ BGL_LAST(__LINE__) = adjacent_vertices(UNAME, GNAME).second; \
+ BGL_FIRST(__LINE__) != BGL_LAST(__LINE__); BGL_FIRST(__LINE__) = BGL_LAST(__LINE__)) \
+for (boost::graph_traits<GraphType>::vertex_descriptor VNAME; \
+ BGL_FIRST(__LINE__) != BGL_LAST(__LINE__) ? (VNAME = *BGL_FIRST(__LINE__), true) : false; \
+ ++BGL_FIRST(__LINE__))
+
+#define BGL_FORALL_OUTEDGES_T(UNAME, ENAME, GNAME, GraphType) \
+for (typename boost::graph_traits<GraphType>::out_edge_iterator \
+ BGL_FIRST(__LINE__) = out_edges(UNAME, GNAME).first,\
+ BGL_LAST(__LINE__) = out_edges(UNAME, GNAME).second; \
+ BGL_FIRST(__LINE__) != BGL_LAST(__LINE__); BGL_FIRST(__LINE__) = BGL_LAST(__LINE__)) \
+for (typename boost::graph_traits<GraphType>::edge_descriptor ENAME; \
+ BGL_FIRST(__LINE__) != BGL_LAST(__LINE__) ? (ENAME = *BGL_FIRST(__LINE__), true) : false; \
+ ++BGL_FIRST(__LINE__))
+
+#define BGL_FORALL_OUTEDGES(UNAME, ENAME, GNAME, GraphType) \
+for (boost::graph_traits<GraphType>::out_edge_iterator \
+ BGL_FIRST(__LINE__) = out_edges(UNAME, GNAME).first,\
+ BGL_LAST(__LINE__) = out_edges(UNAME, GNAME).second; \
+ BGL_FIRST(__LINE__) != BGL_LAST(__LINE__); BGL_FIRST(__LINE__) = BGL_LAST(__LINE__)) \
+for (boost::graph_traits<GraphType>::edge_descriptor ENAME; \
+ BGL_FIRST(__LINE__) != BGL_LAST(__LINE__) ? (ENAME = *BGL_FIRST(__LINE__), true) : false; \
+ ++BGL_FIRST(__LINE__))
+
+#define BGL_FORALL_INEDGES_T(UNAME, ENAME, GNAME, GraphType) \
+for (typename boost::graph_traits<GraphType>::in_edge_iterator \
+ BGL_FIRST(__LINE__) = in_edges(UNAME, GNAME).first,\
+ BGL_LAST(__LINE__) = in_edges(UNAME, GNAME).second; \
+ BGL_FIRST(__LINE__) != BGL_LAST(__LINE__); BGL_FIRST(__LINE__) = BGL_LAST(__LINE__)) \
+for (typename boost::graph_traits<GraphType>::edge_descriptor ENAME; \
+ BGL_FIRST(__LINE__) != BGL_LAST(__LINE__) ? (ENAME = *BGL_FIRST(__LINE__), true) : false; \
+ ++BGL_FIRST(__LINE__))
+
+#define BGL_FORALL_INEDGES(UNAME, ENAME, GNAME, GraphType) \
+for (boost::graph_traits<GraphType>::in_edge_iterator \
+ BGL_FIRST(__LINE__) = in_edges(UNAME, GNAME).first,\
+ BGL_LAST(__LINE__) = in_edges(UNAME, GNAME).second; \
+ BGL_FIRST(__LINE__) != BGL_LAST(__LINE__); BGL_FIRST(__LINE__) = BGL_LAST(__LINE__)) \
+for (boost::graph_traits<GraphType>::edge_descriptor ENAME; \
+ BGL_FIRST(__LINE__) != BGL_LAST(__LINE__) ? (ENAME = *BGL_FIRST(__LINE__), true) : false; \
+ ++BGL_FIRST(__LINE__))
+
+#endif // BOOST_GRAPH_ITERATION_MACROS_HPP
diff --git a/boost/boost/graph/iteration_macros_undef.hpp b/boost/boost/graph/iteration_macros_undef.hpp
new file mode 100644
index 00000000000..0b3f4174df2
--- /dev/null
+++ b/boost/boost/graph/iteration_macros_undef.hpp
@@ -0,0 +1,22 @@
+//=======================================================================
+// Copyright 2002 Indiana University.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// 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)
+//=======================================================================
+
+#ifdef BOOST_GRAPH_ITERATION_MACROS_HPP
+
+#undef BOOST_GRAPH_ITERATION_MACROS_HPP
+#undef BGL_CAT
+#undef BGL_FIRST
+#undef BGL_LAST
+#undef BGL_FORALL_VERTICES
+#undef BGL_FORALL_EDGES
+#undef BGL_FORALL_ADJACENT
+#undef BGL_FORALL_OUTEDGES
+#undef BGL_FORALL_INEDGES
+
+#endif
diff --git a/boost/boost/graph/johnson_all_pairs_shortest.hpp b/boost/boost/graph/johnson_all_pairs_shortest.hpp
new file mode 100644
index 00000000000..5a89e033ddf
--- /dev/null
+++ b/boost/boost/graph/johnson_all_pairs_shortest.hpp
@@ -0,0 +1,206 @@
+//=======================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//=======================================================================
+
+/*
+ This file implements the function
+
+ template <class VertexAndEdgeListGraph, class DistanceMatrix,
+ class P, class T, class R>
+ bool
+ johnson_all_pairs_shortest_paths
+ (VertexAndEdgeListGraph& g,
+ DistanceMatrix& D,
+ const bgl_named_params<P, T, R>& params)
+ */
+
+#ifndef BOOST_GRAPH_JOHNSON_HPP
+#define BOOST_GRAPH_JOHNSON_HPP
+
+#include <boost/graph/graph_traits.hpp>
+#include <boost/property_map.hpp>
+#include <boost/graph/bellman_ford_shortest_paths.hpp>
+#include <boost/graph/dijkstra_shortest_paths.hpp>
+#include <boost/graph/adjacency_list.hpp>
+#include <boost/pending/ct_if.hpp>
+#include <boost/type_traits/same_traits.hpp>
+
+namespace boost {
+
+ template <class VertexAndEdgeListGraph, class DistanceMatrix,
+ class VertexID, class Weight, typename BinaryPredicate,
+ typename BinaryFunction, typename Infinity, class DistanceZero>
+ bool
+ johnson_all_pairs_shortest_paths(VertexAndEdgeListGraph& g1,
+ DistanceMatrix& D,
+ VertexID id1, Weight w1, const BinaryPredicate& compare,
+ const BinaryFunction& combine, const Infinity& inf,
+ DistanceZero zero)
+ {
+ typedef graph_traits<VertexAndEdgeListGraph> Traits1;
+ typedef typename property_traits<Weight>::value_type DT;
+ function_requires< BasicMatrixConcept<DistanceMatrix,
+ typename Traits1::vertices_size_type, DT> >();
+
+ typedef typename Traits1::directed_category DirCat;
+ bool is_undirected = is_same<DirCat, undirected_tag>::value;
+
+ typedef adjacency_list<vecS, vecS, directedS,
+ property< vertex_distance_t, DT>,
+ property< edge_weight_t, DT,
+ property< edge_weight2_t, DT > > > Graph2;
+ typedef graph_traits<Graph2> Traits2;
+
+ Graph2 g2(num_vertices(g1) + 1);
+ typename property_map<Graph2, edge_weight_t>::type
+ w = get(edge_weight, g2);
+ typename property_map<Graph2, edge_weight2_t>::type
+ w_hat = get(edge_weight2, g2);
+ typename property_map<Graph2, vertex_distance_t>::type
+ d = get(vertex_distance, g2);
+ typedef typename property_map<Graph2, vertex_index_t>::type VertexID2;
+ VertexID2 id2 = get(vertex_index, g2);
+
+ // Construct g2 where V[g2] = V[g1] U {s}
+ // and E[g2] = E[g1] U {(s,v)| v in V[g1]}
+ std::vector<typename Traits1::vertex_descriptor>
+ verts1(num_vertices(g1) + 1);
+ typename Traits2::vertex_descriptor s = *vertices(g2).first;
+ {
+ typename Traits1::vertex_iterator v, v_end;
+ int i = 1;
+ for (tie(v, v_end) = vertices(g1); v != v_end; ++v, ++i) {
+ typename Traits2::edge_descriptor e; bool z;
+ tie(e, z) = add_edge(s, get(id1, *v) + 1, g2);
+ put(w, e, zero);
+ verts1[i] = *v;
+ }
+ typename Traits1::edge_iterator e, e_end;
+ for (tie(e, e_end) = edges(g1); e != e_end; ++e) {
+ typename Traits2::edge_descriptor e2; bool z;
+ tie(e2, z) = add_edge(get(id1, source(*e, g1)) + 1,
+ get(id1, target(*e, g1)) + 1, g2);
+ put(w, e2, get(w1, *e));
+ if (is_undirected) {
+ tie(e2, z) = add_edge(get(id1, target(*e, g1)) + 1,
+ get(id1, source(*e, g1)) + 1, g2);
+ put(w, e2, get(w1, *e));
+ }
+ }
+ }
+ typename Traits2::vertex_iterator v, v_end, u, u_end;
+ typename Traits2::edge_iterator e, e_end;
+ std::vector<DT> h_vec(num_vertices(g2));
+ typedef typename std::vector<DT>::iterator iter_t;
+ iterator_property_map<iter_t,VertexID2,DT,DT&> h(h_vec.begin(), id2);
+
+ for (tie(v, v_end) = vertices(g2); v != v_end; ++v)
+ d[*v] = inf;
+
+ put(d, s, zero);
+ // Using the non-named parameter versions of bellman_ford and
+ // dijkstra for portability reasons.
+ dummy_property_map pred; bellman_visitor<> bvis;
+ if (bellman_ford_shortest_paths
+ (g2, num_vertices(g2), w, pred, d, combine, compare, bvis)) {
+ for (tie(v, v_end) = vertices(g2); v != v_end; ++v)
+ put(h, *v, get(d, *v));
+ // Reweight the edges to remove negatives
+ for (tie(e, e_end) = edges(g2); e != e_end; ++e) {
+ typename Traits2::vertex_descriptor a = source(*e, g2),
+ b = target(*e, g2);
+ put(w_hat, *e, get(w, *e) + get(h, a) - get(h, b));
+ }
+ for (tie(u, u_end) = vertices(g2); u != u_end; ++u) {
+ dijkstra_visitor<> dvis;
+ dijkstra_shortest_paths
+ (g2, *u, pred, d, w_hat, id2, compare, combine, inf, zero,dvis);
+ for (tie(v, v_end) = vertices(g2); v != v_end; ++v) {
+ if (*u != s && *v != s) {
+ typename Traits1::vertex_descriptor u1, v1;
+ u1 = verts1[id2[*u]]; v1 = verts1[id2[*v]];
+ D[id2[*u]-1][id2[*v]-1] = get(d, *v) + get(h, *v) - get(h, *u);
+ }
+ }
+ }
+ return true;
+ } else
+ return false;
+ }
+
+ template <class VertexAndEdgeListGraph, class DistanceMatrix,
+ class VertexID, class Weight, class DistanceZero>
+ bool
+ johnson_all_pairs_shortest_paths(VertexAndEdgeListGraph& g1,
+ DistanceMatrix& D,
+ VertexID id1, Weight w1, DistanceZero zero)
+ {
+ typedef typename property_traits<Weight>::value_type WT;
+ return johnson_all_pairs_shortest_paths(g1, D, id1, w1,
+ std::less<WT>(),
+ closed_plus<WT>(),
+ (std::numeric_limits<WT>::max)(),
+ zero);
+ }
+
+ namespace detail {
+
+ template <class VertexAndEdgeListGraph, class DistanceMatrix,
+ class P, class T, class R, class Weight,
+ class VertexID>
+ bool
+ johnson_dispatch(VertexAndEdgeListGraph& g,
+ DistanceMatrix& D,
+ const bgl_named_params<P, T, R>& params,
+ Weight w, VertexID id)
+ {
+ typedef typename property_traits<Weight>::value_type WT;
+
+ return johnson_all_pairs_shortest_paths
+ (g, D, id, w,
+ choose_param(get_param(params, distance_compare_t()),
+ std::less<WT>()),
+ choose_param(get_param(params, distance_combine_t()),
+ closed_plus<WT>()),
+ choose_param(get_param(params, distance_inf_t()),
+ std::numeric_limits<WT>::max BOOST_PREVENT_MACRO_SUBSTITUTION()),
+ choose_param(get_param(params, distance_zero_t()), WT()) );
+ }
+
+ } // namespace detail
+
+ template <class VertexAndEdgeListGraph, class DistanceMatrix,
+ class P, class T, class R>
+ bool
+ johnson_all_pairs_shortest_paths
+ (VertexAndEdgeListGraph& g,
+ DistanceMatrix& D,
+ const bgl_named_params<P, T, R>& params)
+ {
+ return detail::johnson_dispatch
+ (g, D, params,
+ choose_const_pmap(get_param(params, edge_weight), g, edge_weight),
+ choose_const_pmap(get_param(params, vertex_index), g, vertex_index)
+ );
+ }
+
+ template <class VertexAndEdgeListGraph, class DistanceMatrix>
+ bool
+ johnson_all_pairs_shortest_paths
+ (VertexAndEdgeListGraph& g, DistanceMatrix& D)
+ {
+ bgl_named_params<int,int> params(1);
+ return detail::johnson_dispatch
+ (g, D, params, get(edge_weight, g), get(vertex_index, g));
+ }
+
+} // namespace boost
+
+#endif // BOOST_GRAPH_JOHNSON_HPP
+
+
diff --git a/boost/boost/graph/kamada_kawai_spring_layout.hpp b/boost/boost/graph/kamada_kawai_spring_layout.hpp
new file mode 100644
index 00000000000..b210d49055f
--- /dev/null
+++ b/boost/boost/graph/kamada_kawai_spring_layout.hpp
@@ -0,0 +1,542 @@
+// Copyright 2004 The Trustees of Indiana University.
+
+// 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)
+
+// Authors: Douglas Gregor
+// Andrew Lumsdaine
+#ifndef BOOST_GRAPH_KAMADA_KAWAI_SPRING_LAYOUT_HPP
+#define BOOST_GRAPH_KAMADA_KAWAI_SPRING_LAYOUT_HPP
+
+#include <boost/graph/graph_traits.hpp>
+#include <boost/graph/johnson_all_pairs_shortest.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <utility>
+#include <iterator>
+#include <vector>
+#include <boost/limits.hpp>
+#include <cmath>
+
+namespace boost {
+ namespace detail { namespace graph {
+ /**
+ * Denotes an edge or display area side length used to scale a
+ * Kamada-Kawai drawing.
+ */
+ template<bool Edge, typename T>
+ struct edge_or_side
+ {
+ explicit edge_or_side(T value) : value(value) {}
+
+ T value;
+ };
+
+ /**
+ * Compute the edge length from an edge length. This is trivial.
+ */
+ template<typename Graph, typename DistanceMap, typename IndexMap,
+ typename T>
+ T compute_edge_length(const Graph&, DistanceMap, IndexMap,
+ edge_or_side<true, T> length)
+ { return length.value; }
+
+ /**
+ * Compute the edge length based on the display area side
+ length. We do this by dividing the side length by the largest
+ shortest distance between any two vertices in the graph.
+ */
+ template<typename Graph, typename DistanceMap, typename IndexMap,
+ typename T>
+ T
+ compute_edge_length(const Graph& g, DistanceMap distance, IndexMap index,
+ edge_or_side<false, T> length)
+ {
+ T result(0);
+
+ typedef typename graph_traits<Graph>::vertex_iterator vertex_iterator;
+
+ for (vertex_iterator ui = vertices(g).first, end = vertices(g).second;
+ ui != end; ++ui) {
+ vertex_iterator vi = ui;
+ for (++vi; vi != end; ++vi) {
+ T dij = distance[get(index, *ui)][get(index, *vi)];
+ if (dij > result) result = dij;
+ }
+ }
+ return length.value / result;
+ }
+
+ /**
+ * Implementation of the Kamada-Kawai spring layout algorithm.
+ */
+ template<typename Graph, typename PositionMap, typename WeightMap,
+ typename EdgeOrSideLength, typename Done,
+ typename VertexIndexMap, typename DistanceMatrix,
+ typename SpringStrengthMatrix, typename PartialDerivativeMap>
+ struct kamada_kawai_spring_layout_impl
+ {
+ typedef typename property_traits<WeightMap>::value_type weight_type;
+ typedef std::pair<weight_type, weight_type> deriv_type;
+ typedef typename graph_traits<Graph>::vertex_iterator vertex_iterator;
+ typedef typename graph_traits<Graph>::vertex_descriptor
+ vertex_descriptor;
+
+ kamada_kawai_spring_layout_impl(
+ const Graph& g,
+ PositionMap position,
+ WeightMap weight,
+ EdgeOrSideLength edge_or_side_length,
+ Done done,
+ weight_type spring_constant,
+ VertexIndexMap index,
+ DistanceMatrix distance,
+ SpringStrengthMatrix spring_strength,
+ PartialDerivativeMap partial_derivatives)
+ : g(g), position(position), weight(weight),
+ edge_or_side_length(edge_or_side_length), done(done),
+ spring_constant(spring_constant), index(index), distance(distance),
+ spring_strength(spring_strength),
+ partial_derivatives(partial_derivatives) {}
+
+ // Compute contribution of vertex i to the first partial
+ // derivatives (dE/dx_m, dE/dy_m) (for vertex m)
+ deriv_type
+ compute_partial_derivative(vertex_descriptor m, vertex_descriptor i)
+ {
+#ifndef BOOST_NO_STDC_NAMESPACE
+ using std::sqrt;
+#endif // BOOST_NO_STDC_NAMESPACE
+
+ deriv_type result(0, 0);
+ if (i != m) {
+ weight_type x_diff = position[m].x - position[i].x;
+ weight_type y_diff = position[m].y - position[i].y;
+ weight_type dist = sqrt(x_diff * x_diff + y_diff * y_diff);
+ result.first = spring_strength[get(index, m)][get(index, i)]
+ * (x_diff - distance[get(index, m)][get(index, i)]*x_diff/dist);
+ result.second = spring_strength[get(index, m)][get(index, i)]
+ * (y_diff - distance[get(index, m)][get(index, i)]*y_diff/dist);
+ }
+
+ return result;
+ }
+
+ // Compute partial derivatives dE/dx_m and dE/dy_m
+ deriv_type
+ compute_partial_derivatives(vertex_descriptor m)
+ {
+#ifndef BOOST_NO_STDC_NAMESPACE
+ using std::sqrt;
+#endif // BOOST_NO_STDC_NAMESPACE
+
+ deriv_type result(0, 0);
+
+ // TBD: looks like an accumulate to me
+ std::pair<vertex_iterator, vertex_iterator> verts = vertices(g);
+ for (/* no init */; verts.first != verts.second; ++verts.first) {
+ vertex_descriptor i = *verts.first;
+ deriv_type deriv = compute_partial_derivative(m, i);
+ result.first += deriv.first;
+ result.second += deriv.second;
+ }
+
+ return result;
+ }
+
+ // The actual Kamada-Kawai spring layout algorithm implementation
+ bool run()
+ {
+#ifndef BOOST_NO_STDC_NAMESPACE
+ using std::sqrt;
+#endif // BOOST_NO_STDC_NAMESPACE
+
+ // Compute d_{ij} and place it in the distance matrix
+ if (!johnson_all_pairs_shortest_paths(g, distance, index, weight,
+ weight_type(0)))
+ return false;
+
+ // Compute L based on side length (if needed), or retrieve L
+ weight_type edge_length =
+ detail::graph::compute_edge_length(g, distance, index,
+ edge_or_side_length);
+
+ // Compute l_{ij} and k_{ij}
+ const weight_type K = spring_constant;
+ vertex_iterator ui, end = vertices(g).second;
+ for (ui = vertices(g).first; ui != end; ++ui) {
+ vertex_iterator vi = ui;
+ for (++vi; vi != end; ++vi) {
+ weight_type dij = distance[get(index, *ui)][get(index, *vi)];
+ if (dij == (std::numeric_limits<weight_type>::max)())
+ return false;
+ distance[get(index, *ui)][get(index, *vi)] = edge_length * dij;
+ distance[get(index, *vi)][get(index, *ui)] = edge_length * dij;
+ spring_strength[get(index, *ui)][get(index, *vi)] = K/(dij*dij);
+ spring_strength[get(index, *vi)][get(index, *ui)] = K/(dij*dij);
+ }
+ }
+
+ // Compute Delta_i and find max
+ vertex_descriptor p = *vertices(g).first;
+ weight_type delta_p(0);
+
+ for (ui = vertices(g).first; ui != end; ++ui) {
+ deriv_type deriv = compute_partial_derivatives(*ui);
+ put(partial_derivatives, *ui, deriv);
+
+ weight_type delta =
+ sqrt(deriv.first*deriv.first + deriv.second*deriv.second);
+
+ if (delta > delta_p) {
+ p = *ui;
+ delta_p = delta;
+ }
+ }
+
+ while (!done(delta_p, p, g, true)) {
+ // The contribution p makes to the partial derivatives of
+ // each vertex. Computing this (at O(n) cost) allows us to
+ // update the delta_i values in O(n) time instead of O(n^2)
+ // time.
+ std::vector<deriv_type> p_partials(num_vertices(g));
+ for (ui = vertices(g).first; ui != end; ++ui) {
+ vertex_descriptor i = *ui;
+ p_partials[get(index, i)] = compute_partial_derivative(i, p);
+ }
+
+ do {
+ // Compute the 4 elements of the Jacobian
+ weight_type dE_dx_dx = 0, dE_dx_dy = 0, dE_dy_dx = 0, dE_dy_dy = 0;
+ for (ui = vertices(g).first; ui != end; ++ui) {
+ vertex_descriptor i = *ui;
+ if (i != p) {
+ weight_type x_diff = position[p].x - position[i].x;
+ weight_type y_diff = position[p].y - position[i].y;
+ weight_type dist = sqrt(x_diff * x_diff + y_diff * y_diff);
+ weight_type dist_cubed = dist * dist * dist;
+ weight_type k_mi = spring_strength[get(index,p)][get(index,i)];
+ weight_type l_mi = distance[get(index, p)][get(index, i)];
+ dE_dx_dx += k_mi * (1 - (l_mi * y_diff * y_diff)/dist_cubed);
+ dE_dx_dy += k_mi * l_mi * x_diff * y_diff / dist_cubed;
+ dE_dy_dx += k_mi * l_mi * x_diff * y_diff / dist_cubed;
+ dE_dy_dy += k_mi * (1 - (l_mi * x_diff * x_diff)/dist_cubed);
+ }
+ }
+
+ // Solve for delta_x and delta_y
+ weight_type dE_dx = get(partial_derivatives, p).first;
+ weight_type dE_dy = get(partial_derivatives, p).second;
+
+ weight_type delta_x =
+ (dE_dx_dy * dE_dy - dE_dy_dy * dE_dx)
+ / (dE_dx_dx * dE_dy_dy - dE_dx_dy * dE_dy_dx);
+
+ weight_type delta_y =
+ (dE_dx_dx * dE_dy - dE_dy_dx * dE_dx)
+ / (dE_dy_dx * dE_dx_dy - dE_dx_dx * dE_dy_dy);
+
+
+ // Move p by (delta_x, delta_y)
+ position[p].x += delta_x;
+ position[p].y += delta_y;
+
+ // Recompute partial derivatives and delta_p
+ deriv_type deriv = compute_partial_derivatives(p);
+ put(partial_derivatives, p, deriv);
+
+ delta_p =
+ sqrt(deriv.first*deriv.first + deriv.second*deriv.second);
+ } while (!done(delta_p, p, g, false));
+
+ // Select new p by updating each partial derivative and delta
+ vertex_descriptor old_p = p;
+ for (ui = vertices(g).first; ui != end; ++ui) {
+ deriv_type old_deriv_p = p_partials[get(index, *ui)];
+ deriv_type old_p_partial =
+ compute_partial_derivative(*ui, old_p);
+ deriv_type deriv = get(partial_derivatives, *ui);
+
+ deriv.first += old_p_partial.first - old_deriv_p.first;
+ deriv.second += old_p_partial.second - old_deriv_p.second;
+
+ put(partial_derivatives, *ui, deriv);
+ weight_type delta =
+ sqrt(deriv.first*deriv.first + deriv.second*deriv.second);
+
+ if (delta > delta_p) {
+ p = *ui;
+ delta_p = delta;
+ }
+ }
+ }
+
+ return true;
+ }
+
+ const Graph& g;
+ PositionMap position;
+ WeightMap weight;
+ EdgeOrSideLength edge_or_side_length;
+ Done done;
+ weight_type spring_constant;
+ VertexIndexMap index;
+ DistanceMatrix distance;
+ SpringStrengthMatrix spring_strength;
+ PartialDerivativeMap partial_derivatives;
+ };
+ } } // end namespace detail::graph
+
+ /// States that the given quantity is an edge length.
+ template<typename T>
+ inline detail::graph::edge_or_side<true, T>
+ edge_length(T x)
+ { return detail::graph::edge_or_side<true, T>(x); }
+
+ /// States that the given quantity is a display area side length.
+ template<typename T>
+ inline detail::graph::edge_or_side<false, T>
+ side_length(T x)
+ { return detail::graph::edge_or_side<false, T>(x); }
+
+ /**
+ * \brief Determines when to terminate layout of a particular graph based
+ * on a given relative tolerance.
+ */
+ template<typename T = double>
+ struct layout_tolerance
+ {
+ layout_tolerance(const T& tolerance = T(0.001))
+ : tolerance(tolerance), last_energy((std::numeric_limits<T>::max)()),
+ last_local_energy((std::numeric_limits<T>::max)()) { }
+
+ template<typename Graph>
+ bool
+ operator()(T delta_p,
+ typename boost::graph_traits<Graph>::vertex_descriptor p,
+ const Graph& g,
+ bool global)
+ {
+ if (global) {
+ if (last_energy == (std::numeric_limits<T>::max)()) {
+ last_energy = delta_p;
+ return false;
+ }
+
+ T diff = last_energy - delta_p;
+ if (diff < T(0)) diff = -diff;
+ bool done = (delta_p == T(0) || diff / last_energy < tolerance);
+ last_energy = delta_p;
+ return done;
+ } else {
+ if (last_local_energy == (std::numeric_limits<T>::max)()) {
+ last_local_energy = delta_p;
+ return delta_p == T(0);
+ }
+
+ T diff = last_local_energy - delta_p;
+ bool done = (delta_p == T(0) || (diff / last_local_energy) < tolerance);
+ last_local_energy = delta_p;
+ return done;
+ }
+ }
+
+ private:
+ T tolerance;
+ T last_energy;
+ T last_local_energy;
+ };
+
+ /** \brief Kamada-Kawai spring layout for undirected graphs.
+ *
+ * This algorithm performs graph layout (in two dimensions) for
+ * connected, undirected graphs. It operates by relating the layout
+ * of graphs to a dynamic spring system and minimizing the energy
+ * within that system. The strength of a spring between two vertices
+ * is inversely proportional to the square of the shortest distance
+ * (in graph terms) between those two vertices. Essentially,
+ * vertices that are closer in the graph-theoretic sense (i.e., by
+ * following edges) will have stronger springs and will therefore be
+ * placed closer together.
+ *
+ * Prior to invoking this algorithm, it is recommended that the
+ * vertices be placed along the vertices of a regular n-sided
+ * polygon.
+ *
+ * \param g (IN) must be a model of Vertex List Graph, Edge List
+ * Graph, and Incidence Graph and must be undirected.
+ *
+ * \param position (OUT) must be a model of Lvalue Property Map,
+ * where the value type is a class containing fields @c x and @c y
+ * that will be set to the @c x and @c y coordinates of each vertex.
+ *
+ * \param weight (IN) must be a model of Readable Property Map,
+ * which provides the weight of each edge in the graph @p g.
+ *
+ * \param edge_or_side_length (IN) provides either the unit length
+ * @c e of an edge in the layout or the length of a side @c s of the
+ * display area, and must be either @c boost::edge_length(e) or @c
+ * boost::side_length(s), respectively.
+ *
+ * \param done (IN) is a 4-argument function object that is passed
+ * the current value of delta_p (i.e., the energy of vertex @p p),
+ * the vertex @p p, the graph @p g, and a boolean flag indicating
+ * whether @p delta_p is the maximum energy in the system (when @c
+ * true) or the energy of the vertex being moved. Defaults to @c
+ * layout_tolerance instantiated over the value type of the weight
+ * map.
+ *
+ * \param spring_constant (IN) is the constant multiplied by each
+ * spring's strength. Larger values create systems with more energy
+ * that can take longer to stabilize; smaller values create systems
+ * with less energy that stabilize quickly but do not necessarily
+ * result in pleasing layouts. The default value is 1.
+ *
+ * \param index (IN) is a mapping from vertices to index values
+ * between 0 and @c num_vertices(g). The default is @c
+ * get(vertex_index,g).
+ *
+ * \param distance (UTIL/OUT) will be used to store the distance
+ * from every vertex to every other vertex, which is computed in the
+ * first stages of the algorithm. This value's type must be a model
+ * of BasicMatrix with value type equal to the value type of the
+ * weight map. The default is a a vector of vectors.
+ *
+ * \param spring_strength (UTIL/OUT) will be used to store the
+ * strength of the spring between every pair of vertices. This
+ * value's type must be a model of BasicMatrix with value type equal
+ * to the value type of the weight map. The default is a a vector of
+ * vectors.
+ *
+ * \param partial_derivatives (UTIL) will be used to store the
+ * partial derivates of each vertex with respect to the @c x and @c
+ * y coordinates. This must be a Read/Write Property Map whose value
+ * type is a pair with both types equivalent to the value type of
+ * the weight map. The default is an iterator property map.
+ *
+ * \returns @c true if layout was successful or @c false if a
+ * negative weight cycle was detected.
+ */
+ template<typename Graph, typename PositionMap, typename WeightMap,
+ typename T, bool EdgeOrSideLength, typename Done,
+ typename VertexIndexMap, typename DistanceMatrix,
+ typename SpringStrengthMatrix, typename PartialDerivativeMap>
+ bool
+ kamada_kawai_spring_layout(
+ const Graph& g,
+ PositionMap position,
+ WeightMap weight,
+ detail::graph::edge_or_side<EdgeOrSideLength, T> edge_or_side_length,
+ Done done,
+ typename property_traits<WeightMap>::value_type spring_constant,
+ VertexIndexMap index,
+ DistanceMatrix distance,
+ SpringStrengthMatrix spring_strength,
+ PartialDerivativeMap partial_derivatives)
+ {
+ BOOST_STATIC_ASSERT((is_convertible<
+ typename graph_traits<Graph>::directed_category*,
+ undirected_tag*
+ >::value));
+
+ detail::graph::kamada_kawai_spring_layout_impl<
+ Graph, PositionMap, WeightMap,
+ detail::graph::edge_or_side<EdgeOrSideLength, T>, Done, VertexIndexMap,
+ DistanceMatrix, SpringStrengthMatrix, PartialDerivativeMap>
+ alg(g, position, weight, edge_or_side_length, done, spring_constant,
+ index, distance, spring_strength, partial_derivatives);
+ return alg.run();
+ }
+
+ /**
+ * \overload
+ */
+ template<typename Graph, typename PositionMap, typename WeightMap,
+ typename T, bool EdgeOrSideLength, typename Done,
+ typename VertexIndexMap>
+ bool
+ kamada_kawai_spring_layout(
+ const Graph& g,
+ PositionMap position,
+ WeightMap weight,
+ detail::graph::edge_or_side<EdgeOrSideLength, T> edge_or_side_length,
+ Done done,
+ typename property_traits<WeightMap>::value_type spring_constant,
+ VertexIndexMap index)
+ {
+ typedef typename property_traits<WeightMap>::value_type weight_type;
+
+ typename graph_traits<Graph>::vertices_size_type n = num_vertices(g);
+ typedef std::vector<weight_type> weight_vec;
+
+ std::vector<weight_vec> distance(n, weight_vec(n));
+ std::vector<weight_vec> spring_strength(n, weight_vec(n));
+ std::vector<std::pair<weight_type, weight_type> > partial_derivatives(n);
+
+ return
+ kamada_kawai_spring_layout(
+ g, position, weight, edge_or_side_length, done, spring_constant, index,
+ distance.begin(),
+ spring_strength.begin(),
+ make_iterator_property_map(partial_derivatives.begin(), index,
+ std::pair<weight_type, weight_type>()));
+ }
+
+ /**
+ * \overload
+ */
+ template<typename Graph, typename PositionMap, typename WeightMap,
+ typename T, bool EdgeOrSideLength, typename Done>
+ bool
+ kamada_kawai_spring_layout(
+ const Graph& g,
+ PositionMap position,
+ WeightMap weight,
+ detail::graph::edge_or_side<EdgeOrSideLength, T> edge_or_side_length,
+ Done done,
+ typename property_traits<WeightMap>::value_type spring_constant)
+ {
+ return kamada_kawai_spring_layout(g, position, weight, edge_or_side_length,
+ done, spring_constant,
+ get(vertex_index, g));
+ }
+
+ /**
+ * \overload
+ */
+ template<typename Graph, typename PositionMap, typename WeightMap,
+ typename T, bool EdgeOrSideLength, typename Done>
+ bool
+ kamada_kawai_spring_layout(
+ const Graph& g,
+ PositionMap position,
+ WeightMap weight,
+ detail::graph::edge_or_side<EdgeOrSideLength, T> edge_or_side_length,
+ Done done)
+ {
+ typedef typename property_traits<WeightMap>::value_type weight_type;
+ return kamada_kawai_spring_layout(g, position, weight, edge_or_side_length,
+ done, weight_type(1));
+ }
+
+ /**
+ * \overload
+ */
+ template<typename Graph, typename PositionMap, typename WeightMap,
+ typename T, bool EdgeOrSideLength>
+ bool
+ kamada_kawai_spring_layout(
+ const Graph& g,
+ PositionMap position,
+ WeightMap weight,
+ detail::graph::edge_or_side<EdgeOrSideLength, T> edge_or_side_length)
+ {
+ typedef typename property_traits<WeightMap>::value_type weight_type;
+ return kamada_kawai_spring_layout(g, position, weight, edge_or_side_length,
+ layout_tolerance<weight_type>(),
+ weight_type(1.0),
+ get(vertex_index, g));
+ }
+} // end namespace boost
+
+#endif // BOOST_GRAPH_KAMADA_KAWAI_SPRING_LAYOUT_HPP
diff --git a/boost/boost/graph/king_ordering.hpp b/boost/boost/graph/king_ordering.hpp
new file mode 100644
index 00000000000..dadd963f861
--- /dev/null
+++ b/boost/boost/graph/king_ordering.hpp
@@ -0,0 +1,320 @@
+//=======================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Copyright 2004, 2005 Trustees of Indiana University
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek,
+// Doug Gregor, D. Kevin McGrath
+//
+// 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_GRAPH_KING_HPP
+#define BOOST_GRAPH_KING_HPP
+
+#include <boost/config.hpp>
+#include <boost/graph/detail/sparse_ordering.hpp>
+
+/*
+ King Algorithm for matrix reordering
+*/
+
+namespace boost {
+ namespace detail {
+ template<typename OutputIterator, typename Buffer, typename Compare,
+ typename PseudoDegreeMap, typename VecMap, typename VertexIndexMap>
+ class bfs_king_visitor:public default_bfs_visitor
+ {
+ public:
+ bfs_king_visitor(OutputIterator *iter, Buffer *b, Compare compare,
+ PseudoDegreeMap deg, std::vector<int> loc, VecMap color,
+ VertexIndexMap vertices):
+ permutation(iter), Qptr(b), degree(deg), comp(compare),
+ Qlocation(loc), colors(color), vertex_map(vertices) { }
+
+ template <typename Vertex, typename Graph>
+ void finish_vertex(Vertex, Graph& g) {
+ typename graph_traits<Graph>::out_edge_iterator ei, ei_end;
+ Vertex v, w;
+
+ typedef typename std::deque<Vertex>::iterator iterator;
+ typedef typename std::deque<Vertex>::reverse_iterator reverse_iterator;
+
+ reverse_iterator rend = Qptr->rend()-index_begin;
+ reverse_iterator rbegin = Qptr->rbegin();
+
+
+ //heap the vertices already there
+ std::make_heap(rbegin, rend, boost::bind<bool>(comp, _2, _1));
+
+ unsigned i = 0;
+
+ for(i = index_begin; i != Qptr->size(); ++i){
+ colors[get(vertex_map, (*Qptr)[i])] = 1;
+ Qlocation[get(vertex_map, (*Qptr)[i])] = i;
+ }
+
+ i = 0;
+
+ for( ; rbegin != rend; rend--){
+ percolate_down<Vertex>(i);
+ w = (*Qptr)[index_begin+i];
+ for (tie(ei, ei_end) = out_edges(w, g); ei != ei_end; ++ei) {
+ v = target(*ei, g);
+ put(degree, v, get(degree, v) - 1);
+
+ if (colors[get(vertex_map, v)] == 1) {
+ percolate_up<Vertex>(get(vertex_map, v), i);
+ }
+ }
+
+ colors[get(vertex_map, w)] = 0;
+ i++;
+ }
+ }
+
+ template <typename Vertex, typename Graph>
+ void examine_vertex(Vertex u, const Graph&) {
+
+ *(*permutation)++ = u;
+ index_begin = Qptr->size();
+
+ }
+ protected:
+
+
+ //this function replaces pop_heap, and tracks state information
+ template <typename Vertex>
+ void percolate_down(int offset){
+ typedef typename std::deque<Vertex>::reverse_iterator reverse_iterator;
+
+ int heap_last = index_begin + offset;
+ int heap_first = Qptr->size() - 1;
+
+ //pop_heap functionality:
+ //swap first, last
+ std::swap((*Qptr)[heap_last], (*Qptr)[heap_first]);
+
+ //swap in the location queue
+ std::swap(Qlocation[heap_first], Qlocation[heap_last]);
+
+ //set drifter, children
+ int drifter = heap_first;
+ int drifter_heap = Qptr->size() - drifter;
+
+ int right_child_heap = drifter_heap * 2 + 1;
+ int right_child = Qptr->size() - right_child_heap;
+
+ int left_child_heap = drifter_heap * 2;
+ int left_child = Qptr->size() - left_child_heap;
+
+ //check that we are staying in the heap
+ bool valid = (right_child < heap_last) ? false : true;
+
+ //pick smallest child of drifter, and keep in mind there might only be left child
+ int smallest_child = (valid && get(degree, (*Qptr)[left_child]) > get(degree,(*Qptr)[right_child])) ?
+ right_child : left_child;
+
+ while(valid && smallest_child < heap_last && comp((*Qptr)[drifter], (*Qptr)[smallest_child])){
+
+ //if smallest child smaller than drifter, swap them
+ std::swap((*Qptr)[smallest_child], (*Qptr)[drifter]);
+ std::swap(Qlocation[drifter], Qlocation[smallest_child]);
+
+ //update the values, run again, as necessary
+ drifter = smallest_child;
+ drifter_heap = Qptr->size() - drifter;
+
+ right_child_heap = drifter_heap * 2 + 1;
+ right_child = Qptr->size() - right_child_heap;
+
+ left_child_heap = drifter_heap * 2;
+ left_child = Qptr->size() - left_child_heap;
+
+ valid = (right_child < heap_last) ? false : true;
+
+ smallest_child = (valid && get(degree, (*Qptr)[left_child]) > get(degree,(*Qptr)[right_child])) ?
+ right_child : left_child;
+ }
+
+ }
+
+
+
+ // this is like percolate down, but we always compare against the
+ // parent, as there is only a single choice
+ template <typename Vertex>
+ void percolate_up(int vertex, int offset){
+
+ int child_location = Qlocation[vertex];
+ int heap_child_location = Qptr->size() - child_location;
+ int heap_parent_location = (int)(heap_child_location/2);
+ unsigned parent_location = Qptr->size() - heap_parent_location;
+
+ bool valid = (heap_parent_location != 0 && child_location > index_begin + offset &&
+ parent_location < Qptr->size());
+
+ while(valid && comp((*Qptr)[child_location], (*Qptr)[parent_location])){
+
+ //swap in the heap
+ std::swap((*Qptr)[child_location], (*Qptr)[parent_location]);
+
+ //swap in the location queue
+ std::swap(Qlocation[child_location], Qlocation[parent_location]);
+
+ child_location = parent_location;
+ heap_child_location = heap_parent_location;
+ heap_parent_location = (int)(heap_child_location/2);
+ parent_location = Qptr->size() - heap_parent_location;
+ valid = (heap_parent_location != 0 && child_location > index_begin + offset);
+ }
+ }
+
+ OutputIterator *permutation;
+ int index_begin;
+ Buffer *Qptr;
+ PseudoDegreeMap degree;
+ Compare comp;
+ std::vector<int> Qlocation;
+ VecMap colors;
+ VertexIndexMap vertex_map;
+ };
+
+
+ } // namespace detail
+
+
+ template<class Graph, class OutputIterator, class ColorMap, class DegreeMap,
+ typename VertexIndexMap>
+ OutputIterator
+ king_ordering(const Graph& g,
+ std::deque< typename graph_traits<Graph>::vertex_descriptor >
+ vertex_queue,
+ OutputIterator permutation,
+ ColorMap color, DegreeMap degree,
+ VertexIndexMap index_map)
+ {
+ typedef typename property_traits<DegreeMap>::value_type ds_type;
+ typedef typename property_traits<ColorMap>::value_type ColorValue;
+ typedef color_traits<ColorValue> Color;
+ typedef typename graph_traits<Graph>::vertex_descriptor Vertex;
+ typedef iterator_property_map<typename std::vector<ds_type>::iterator, VertexIndexMap, ds_type, ds_type&> PseudoDegreeMap;
+ typedef indirect_cmp<PseudoDegreeMap, std::less<ds_type> > Compare;
+ typedef typename boost::sparse::sparse_ordering_queue<Vertex> queue;
+ typedef typename detail::bfs_king_visitor<OutputIterator, queue, Compare,
+ PseudoDegreeMap, std::vector<int>, VertexIndexMap > Visitor;
+ typedef typename graph_traits<Graph>::vertices_size_type
+ vertices_size_type;
+ std::vector<ds_type> pseudo_degree_vec(num_vertices(g));
+ PseudoDegreeMap pseudo_degree(pseudo_degree_vec.begin(), index_map);
+
+ typename graph_traits<Graph>::vertex_iterator ui, ui_end;
+ queue Q;
+ // Copy degree to pseudo_degree
+ // initialize the color map
+ for (tie(ui, ui_end) = vertices(g); ui != ui_end; ++ui){
+ put(pseudo_degree, *ui, get(degree, *ui));
+ put(color, *ui, Color::white());
+ }
+
+ Compare comp(pseudo_degree);
+ std::vector<int> colors(num_vertices(g));
+
+ for(vertices_size_type i = 0; i < num_vertices(g); i++)
+ colors[i] = 0;
+
+ std::vector<int> loc(num_vertices(g));
+
+ //create the visitor
+ Visitor vis(&permutation, &Q, comp, pseudo_degree, loc, colors, index_map);
+
+ while( !vertex_queue.empty() ) {
+ Vertex s = vertex_queue.front();
+ vertex_queue.pop_front();
+
+ //call BFS with visitor
+ breadth_first_visit(g, s, Q, vis, color);
+ }
+
+ return permutation;
+ }
+
+
+ // This is the case where only a single starting vertex is supplied.
+ template <class Graph, class OutputIterator,
+ class ColorMap, class DegreeMap, typename VertexIndexMap>
+ OutputIterator
+ king_ordering(const Graph& g,
+ typename graph_traits<Graph>::vertex_descriptor s,
+ OutputIterator permutation,
+ ColorMap color, DegreeMap degree, VertexIndexMap index_map)
+ {
+
+ std::deque< typename graph_traits<Graph>::vertex_descriptor > vertex_queue;
+ vertex_queue.push_front( s );
+ return king_ordering(g, vertex_queue, permutation, color, degree,
+ index_map);
+ }
+
+
+ template < class Graph, class OutputIterator,
+ class ColorMap, class DegreeMap, class VertexIndexMap>
+ OutputIterator
+ king_ordering(const Graph& G, OutputIterator permutation,
+ ColorMap color, DegreeMap degree, VertexIndexMap index_map)
+ {
+ if (vertices(G).first == vertices(G).second)
+ return permutation;
+
+ typedef typename boost::graph_traits<Graph>::vertex_descriptor Vertex;
+ typedef typename boost::graph_traits<Graph>::vertex_iterator VerIter;
+ typedef typename property_traits<ColorMap>::value_type ColorValue;
+ typedef color_traits<ColorValue> Color;
+
+ std::deque<Vertex> vertex_queue;
+
+ // Mark everything white
+ BGL_FORALL_VERTICES_T(v, G, Graph) put(color, v, Color::white());
+
+ // Find one vertex from each connected component
+ BGL_FORALL_VERTICES_T(v, G, Graph) {
+ if (get(color, v) == Color::white()) {
+ depth_first_visit(G, v, dfs_visitor<>(), color);
+ vertex_queue.push_back(v);
+ }
+ }
+
+ // Find starting nodes for all vertices
+ // TBD: How to do this with a directed graph?
+ for (typename std::deque<Vertex>::iterator i = vertex_queue.begin();
+ i != vertex_queue.end(); ++i)
+ *i = find_starting_node(G, *i, color, degree);
+
+ return king_ordering(G, vertex_queue, permutation, color, degree,
+ index_map);
+ }
+
+ template<typename Graph, typename OutputIterator, typename VertexIndexMap>
+ OutputIterator
+ king_ordering(const Graph& G, OutputIterator permutation,
+ VertexIndexMap index_map)
+ {
+ if (vertices(G).first == vertices(G).second)
+ return permutation;
+
+ typedef out_degree_property_map<Graph> DegreeMap;
+ std::vector<default_color_type> colors(num_vertices(G));
+ return king_ordering(G, permutation,
+ make_iterator_property_map(&colors[0], index_map,
+ colors[0]),
+ make_out_degree_map(G), index_map);
+ }
+
+ template<typename Graph, typename OutputIterator>
+ inline OutputIterator
+ king_ordering(const Graph& G, OutputIterator permutation)
+ { return king_ordering(G, permutation, get(vertex_index, G)); }
+
+} // namespace boost
+
+
+#endif // BOOST_GRAPH_KING_HPP
diff --git a/boost/boost/graph/kruskal_min_spanning_tree.hpp b/boost/boost/graph/kruskal_min_spanning_tree.hpp
new file mode 100644
index 00000000000..50fc8049f8e
--- /dev/null
+++ b/boost/boost/graph/kruskal_min_spanning_tree.hpp
@@ -0,0 +1,155 @@
+//
+//=======================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// 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_GRAPH_MST_KRUSKAL_HPP
+#define BOOST_GRAPH_MST_KRUSKAL_HPP
+
+/*
+ *Minimum Spanning Tree
+ * Kruskal Algorithm
+ *
+ *Requirement:
+ * undirected graph
+ */
+
+#include <vector>
+#include <queue>
+#include <functional>
+
+#include <boost/property_map.hpp>
+#include <boost/graph/graph_concepts.hpp>
+#include <boost/graph/named_function_params.hpp>
+#include <boost/pending/disjoint_sets.hpp>
+#include <boost/pending/indirect_cmp.hpp>
+
+
+namespace boost {
+
+ // Kruskal's algorithm for Minimum Spanning Tree
+ //
+ // This is a greedy algorithm to calculate the Minimum Spanning Tree
+ // for an undirected graph with weighted edges. The output will be a
+ // set of edges.
+ //
+
+ namespace detail {
+
+ template <class Graph, class OutputIterator,
+ class Rank, class Parent, class Weight>
+ void
+ kruskal_mst_impl(const Graph& G,
+ OutputIterator spanning_tree_edges,
+ Rank rank, Parent parent, Weight weight)
+ {
+ if (num_vertices(G) == 0) return; // Nothing to do in this case
+ typedef typename graph_traits<Graph>::vertex_descriptor Vertex;
+ typedef typename graph_traits<Graph>::edge_descriptor Edge;
+ function_requires<VertexListGraphConcept<Graph> >();
+ function_requires<EdgeListGraphConcept<Graph> >();
+ function_requires<OutputIteratorConcept<OutputIterator, Edge> >();
+ function_requires<ReadWritePropertyMapConcept<Rank, Vertex> >();
+ function_requires<ReadWritePropertyMapConcept<Parent, Vertex> >();
+ function_requires<ReadablePropertyMapConcept<Weight, Edge> >();
+ typedef typename property_traits<Weight>::value_type W_value;
+ typedef typename property_traits<Rank>::value_type R_value;
+ typedef typename property_traits<Parent>::value_type P_value;
+ function_requires<ComparableConcept<W_value> >();
+ function_requires<ConvertibleConcept<P_value, Vertex> >();
+ function_requires<IntegerConcept<R_value> >();
+
+ disjoint_sets<Rank, Parent> dset(rank, parent);
+
+ typename graph_traits<Graph>::vertex_iterator ui, uiend;
+ for (boost::tie(ui, uiend) = vertices(G); ui != uiend; ++ui)
+ dset.make_set(*ui);
+
+ typedef indirect_cmp<Weight, std::greater<W_value> > weight_greater;
+ weight_greater wl(weight);
+ std::priority_queue<Edge, std::vector<Edge>, weight_greater> Q(wl);
+ /*push all edge into Q*/
+ typename graph_traits<Graph>::edge_iterator ei, eiend;
+ for (boost::tie(ei, eiend) = edges(G); ei != eiend; ++ei)
+ Q.push(*ei);
+
+ while (! Q.empty()) {
+ Edge e = Q.top();
+ Q.pop();
+ Vertex u = dset.find_set(source(e, G));
+ Vertex v = dset.find_set(target(e, G));
+ if ( u != v ) {
+ *spanning_tree_edges++ = e;
+ dset.link(u, v);
+ }
+ }
+ }
+
+ } // namespace detail
+
+ // Named Parameters Variants
+
+ template <class Graph, class OutputIterator>
+ inline void
+ kruskal_minimum_spanning_tree(const Graph& g,
+ OutputIterator spanning_tree_edges)
+ {
+ typedef typename graph_traits<Graph>::vertices_size_type size_type;
+ typedef typename graph_traits<Graph>::vertex_descriptor vertex_t;
+ typedef typename property_map<Graph, vertex_index_t>::type index_map_t;
+ if (num_vertices(g) == 0) return; // Nothing to do in this case
+ typename graph_traits<Graph>::vertices_size_type
+ n = num_vertices(g);
+ std::vector<size_type> rank_map(n);
+ std::vector<vertex_t> pred_map(n);
+
+ detail::kruskal_mst_impl
+ (g, spanning_tree_edges,
+ make_iterator_property_map(rank_map.begin(), get(vertex_index, g), rank_map[0]),
+ make_iterator_property_map(pred_map.begin(), get(vertex_index, g), pred_map[0]),
+ get(edge_weight, g));
+ }
+
+ template <class Graph, class OutputIterator, class P, class T, class R>
+ inline void
+ kruskal_minimum_spanning_tree(const Graph& g,
+ OutputIterator spanning_tree_edges,
+ const bgl_named_params<P, T, R>& params)
+ {
+ typedef typename graph_traits<Graph>::vertices_size_type size_type;
+ typedef typename graph_traits<Graph>::vertex_descriptor vertex_t;
+ if (num_vertices(g) == 0) return; // Nothing to do in this case
+ typename graph_traits<Graph>::vertices_size_type n;
+ n = is_default_param(get_param(params, vertex_rank))
+ ? num_vertices(g) : 1;
+ std::vector<size_type> rank_map(n);
+ n = is_default_param(get_param(params, vertex_predecessor))
+ ? num_vertices(g) : 1;
+ std::vector<vertex_t> pred_map(n);
+
+ detail::kruskal_mst_impl
+ (g, spanning_tree_edges,
+ choose_param
+ (get_param(params, vertex_rank),
+ make_iterator_property_map
+ (rank_map.begin(),
+ choose_pmap(get_param(params, vertex_index), g, vertex_index), rank_map[0])),
+ choose_param
+ (get_param(params, vertex_predecessor),
+ make_iterator_property_map
+ (pred_map.begin(),
+ choose_const_pmap(get_param(params, vertex_index), g, vertex_index),
+ pred_map[0])),
+ choose_const_pmap(get_param(params, edge_weight), g, edge_weight));
+ }
+
+} // namespace boost
+
+
+#endif // BOOST_GRAPH_MST_KRUSKAL_HPP
+
diff --git a/boost/boost/graph/leda_graph.hpp b/boost/boost/graph/leda_graph.hpp
new file mode 100644
index 00000000000..89c98ac26a2
--- /dev/null
+++ b/boost/boost/graph/leda_graph.hpp
@@ -0,0 +1,549 @@
+//=======================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Copyright 2004 The Trustees of Indiana University.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek, Douglas Gregor
+//
+// 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_GRAPH_LEDA_HPP
+#define BOOST_GRAPH_LEDA_HPP
+
+#include <boost/config.hpp>
+#include <boost/iterator/iterator_facade.hpp>
+#include <boost/graph/graph_traits.hpp>
+#include <boost/graph/properties.hpp>
+
+#include <LEDA/graph.h>
+#include <LEDA/node_array.h>
+#include <LEDA/node_map.h>
+
+// The functions and classes in this file allows the user to
+// treat a LEDA GRAPH object as a boost graph "as is". No
+// wrapper is needed for the GRAPH object.
+
+// Remember to define LEDA_PREFIX so that LEDA types such as
+// leda_edge show up as "leda_edge" and not just "edge".
+
+// Warning: this implementation relies on partial specialization
+// for the graph_traits class (so it won't compile with Visual C++)
+
+// Warning: this implementation is in alpha and has not been tested
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+namespace boost {
+
+ struct leda_graph_traversal_category :
+ public virtual bidirectional_graph_tag,
+ public virtual adjacency_graph_tag,
+ public virtual vertex_list_graph_tag { };
+
+ template <class vtype, class etype>
+ struct graph_traits< leda::GRAPH<vtype,etype> > {
+ typedef leda_node vertex_descriptor;
+ typedef leda_edge edge_descriptor;
+
+ class adjacency_iterator
+ : public iterator_facade<adjacency_iterator,
+ leda_node,
+ bidirectional_traversal_tag,
+ leda_node,
+ const leda_node*>
+ {
+ public:
+ explicit adjacency_iterator(leda_edge edge = 0) : base(edge) {}
+
+ private:
+ leda_node dereference() const { return leda::target(base); }
+
+ bool equal(const adjacency_iterator& other) const
+ { return base == other.base; }
+
+ void increment() { base = Succ_Adj_Edge(base, 0); }
+ void decrement() { base = Pred_Adj_Edge(base, 0); }
+
+ leda_edge base;
+
+ friend class iterator_core_access;
+ };
+
+ class out_edge_iterator
+ : public iterator_facade<out_edge_iterator,
+ leda_edge,
+ bidirectional_traversal_tag,
+ const leda_edge&,
+ const leda_edge*>
+ {
+ public:
+ explicit out_edge_iterator(leda_edge edge = 0) : base(edge) {}
+
+ private:
+ const leda_edge& dereference() const { return base; }
+
+ bool equal(const out_edge_iterator& other) const
+ { return base == other.base; }
+
+ void increment() { base = Succ_Adj_Edge(base, 0); }
+ void decrement() { base = Pred_Adj_Edge(base, 0); }
+
+ leda_edge base;
+
+ friend class iterator_core_access;
+ };
+
+ class in_edge_iterator
+ : public iterator_facade<in_edge_iterator,
+ leda_edge,
+ bidirectional_traversal_tag,
+ const leda_edge&,
+ const leda_edge*>
+ {
+ public:
+ explicit in_edge_iterator(leda_edge edge = 0) : base(edge) {}
+
+ private:
+ const leda_edge& dereference() const { return base; }
+
+ bool equal(const in_edge_iterator& other) const
+ { return base == other.base; }
+
+ void increment() { base = Succ_Adj_Edge(base, 1); }
+ void decrement() { base = Pred_Adj_Edge(base, 1); }
+
+ leda_edge base;
+
+ friend class iterator_core_access;
+ };
+
+ class vertex_iterator
+ : public iterator_facade<vertex_iterator,
+ leda_node,
+ bidirectional_traversal_tag,
+ const leda_node&,
+ const leda_node*>
+ {
+ public:
+ vertex_iterator(leda_node node = 0,
+ const leda::GRAPH<vtype, etype>* g = 0)
+ : base(node), g(g) {}
+
+ private:
+ const leda_node& dereference() const { return base; }
+
+ bool equal(const vertex_iterator& other) const
+ { return base == other.base; }
+
+ void increment() { base = g->succ_node(base); }
+ void decrement() { base = g->pred_node(base); }
+
+ leda_node base;
+ const leda::GRAPH<vtype, etype>* g;
+
+ friend class iterator_core_access;
+ };
+
+ typedef directed_tag directed_category;
+ typedef allow_parallel_edge_tag edge_parallel_category; // not sure here
+ typedef leda_graph_traversal_category traversal_category;
+ typedef int vertices_size_type;
+ typedef int edges_size_type;
+ typedef int degree_size_type;
+ };
+
+ template <class vtype, class etype>
+ struct vertex_property< leda::GRAPH<vtype,etype> > {
+ typedef vtype type;
+ };
+
+ template <class vtype, class etype>
+ struct edge_property< leda::GRAPH<vtype,etype> > {
+ typedef etype type;
+ };
+
+} // namespace boost
+#endif
+
+namespace boost {
+
+ template <class vtype, class etype>
+ typename graph_traits< leda::GRAPH<vtype,etype> >::vertex_descriptor
+ source(typename graph_traits< leda::GRAPH<vtype,etype> >::edge_descriptor e,
+ const leda::GRAPH<vtype,etype>& g)
+ {
+ return source(e);
+ }
+
+ template <class vtype, class etype>
+ typename graph_traits< leda::GRAPH<vtype,etype> >::vertex_descriptor
+ target(typename graph_traits< leda::GRAPH<vtype,etype> >::edge_descriptor e,
+ const leda::GRAPH<vtype,etype>& g)
+ {
+ return target(e);
+ }
+
+ template <class vtype, class etype>
+ inline std::pair<
+ typename graph_traits< leda::GRAPH<vtype,etype> >::vertex_iterator,
+ typename graph_traits< leda::GRAPH<vtype,etype> >::vertex_iterator >
+ vertices(const leda::GRAPH<vtype,etype>& g)
+ {
+ typedef typename graph_traits< leda::GRAPH<vtype,etype> >::vertex_iterator
+ Iter;
+ return std::make_pair( Iter(g.first_node(),&g), Iter(0,&g) );
+ }
+
+ // no edges(g) function
+
+ template <class vtype, class etype>
+ inline std::pair<
+ typename graph_traits< leda::GRAPH<vtype,etype> >::out_edge_iterator,
+ typename graph_traits< leda::GRAPH<vtype,etype> >::out_edge_iterator >
+ out_edges(
+ typename graph_traits< leda::GRAPH<vtype,etype> >::vertex_descriptor u,
+ const leda::GRAPH<vtype,etype>& g)
+ {
+ typedef typename graph_traits< leda::GRAPH<vtype,etype> >
+ ::out_edge_iterator Iter;
+ return std::make_pair( Iter(First_Adj_Edge(u,0)), Iter(0) );
+ }
+
+ template <class vtype, class etype>
+ inline std::pair<
+ typename graph_traits< leda::GRAPH<vtype,etype> >::in_edge_iterator,
+ typename graph_traits< leda::GRAPH<vtype,etype> >::in_edge_iterator >
+ in_edges(
+ typename graph_traits< leda::GRAPH<vtype,etype> >::vertex_descriptor u,
+ const leda::GRAPH<vtype,etype>& g)
+ {
+ typedef typename graph_traits< leda::GRAPH<vtype,etype> >
+ ::in_edge_iterator Iter;
+ return std::make_pair( Iter(First_Adj_Edge(u,1)), Iter(0) );
+ }
+
+ template <class vtype, class etype>
+ inline std::pair<
+ typename graph_traits< leda::GRAPH<vtype,etype> >::adjacency_iterator,
+ typename graph_traits< leda::GRAPH<vtype,etype> >::adjacency_iterator >
+ adjacent_vertices(
+ typename graph_traits< leda::GRAPH<vtype,etype> >::vertex_descriptor u,
+ const leda::GRAPH<vtype,etype>& g)
+ {
+ typedef typename graph_traits< leda::GRAPH<vtype,etype> >
+ ::adjacency_iterator Iter;
+ return std::make_pair( Iter(First_Adj_Edge(u,0)), Iter(0) );
+ }
+
+ template <class vtype, class etype>
+ typename graph_traits< leda::GRAPH<vtype,etype> >::vertices_size_type
+ num_vertices(const leda::GRAPH<vtype,etype>& g)
+ {
+ return g.number_of_nodes();
+ }
+
+ template <class vtype, class etype>
+ typename graph_traits< leda::GRAPH<vtype,etype> >::edges_size_type
+ num_edges(const leda::GRAPH<vtype,etype>& g)
+ {
+ return g.number_of_edges();
+ }
+
+ template <class vtype, class etype>
+ typename graph_traits< leda::GRAPH<vtype,etype> >::degree_size_type
+ out_degree(
+ typename graph_traits< leda::GRAPH<vtype,etype> >::vertex_descriptor u,
+ const leda::GRAPH<vtype,etype>&)
+ {
+ return outdeg(u);
+ }
+
+ template <class vtype, class etype>
+ typename graph_traits< leda::GRAPH<vtype,etype> >::degree_size_type
+ in_degree(
+ typename graph_traits< leda::GRAPH<vtype,etype> >::vertex_descriptor u,
+ const leda::GRAPH<vtype,etype>&)
+ {
+ return indeg(u);
+ }
+
+ template <class vtype, class etype>
+ typename graph_traits< leda::GRAPH<vtype,etype> >::degree_size_type
+ degree(
+ typename graph_traits< leda::GRAPH<vtype,etype> >::vertex_descriptor u,
+ const leda::GRAPH<vtype,etype>&)
+ {
+ return outdeg(u) + indeg(u);
+ }
+
+ template <class vtype, class etype>
+ typename graph_traits< leda::GRAPH<vtype,etype> >::vertex_descriptor
+ add_vertex(leda::GRAPH<vtype,etype>& g)
+ {
+ return g.new_node();
+ }
+
+ template <class vtype, class etype>
+ typename graph_traits< leda::GRAPH<vtype,etype> >::vertex_descriptor
+ add_vertex(const vtype& vp, leda::GRAPH<vtype,etype>& g)
+ {
+ return g.new_node(vp);
+ }
+
+ // Hmm, LEDA doesn't have the equivalent of clear_vertex() -JGS
+ // need to write an implementation
+ template <class vtype, class etype>
+ void clear_vertex(
+ typename graph_traits< leda::GRAPH<vtype,etype> >::vertex_descriptor u,
+ leda::GRAPH<vtype,etype>& g)
+ {
+ g.del_node(u);
+ }
+
+ template <class vtype, class etype>
+ void remove_vertex(
+ typename graph_traits< leda::GRAPH<vtype,etype> >::vertex_descriptor u,
+ leda::GRAPH<vtype,etype>& g)
+ {
+ g.del_node(u);
+ }
+
+ template <class vtype, class etype>
+ std::pair<
+ typename graph_traits< leda::GRAPH<vtype,etype> >::edge_descriptor,
+ bool>
+ add_edge(
+ typename graph_traits< leda::GRAPH<vtype,etype> >::vertex_descriptor u,
+ typename graph_traits< leda::GRAPH<vtype,etype> >::vertex_descriptor v,
+ leda::GRAPH<vtype,etype>& g)
+ {
+ return std::make_pair(g.new_edge(u, v), true);
+ }
+
+ template <class vtype, class etype>
+ std::pair<
+ typename graph_traits< leda::GRAPH<vtype,etype> >::edge_descriptor,
+ bool>
+ add_edge(
+ typename graph_traits< leda::GRAPH<vtype,etype> >::vertex_descriptor u,
+ typename graph_traits< leda::GRAPH<vtype,etype> >::vertex_descriptor v,
+ const etype& et,
+ leda::GRAPH<vtype,etype>& g)
+ {
+ return std::make_pair(g.new_edge(u, v, et), true);
+ }
+
+ template <class vtype, class etype>
+ void
+ remove_edge(
+ typename graph_traits< leda::GRAPH<vtype,etype> >::vertex_descriptor u,
+ typename graph_traits< leda::GRAPH<vtype,etype> >::vertex_descriptor v,
+ leda::GRAPH<vtype,etype>& g)
+ {
+ typename graph_traits< leda::GRAPH<vtype,etype> >::out_edge_iterator
+ i,iend;
+ for (boost::tie(i,iend) = out_edges(u,g); i != iend; ++i)
+ if (target(*i,g) == v)
+ g.del_edge(*i);
+ }
+
+ template <class vtype, class etype>
+ void
+ remove_edge(
+ typename graph_traits< leda::GRAPH<vtype,etype> >::edge_descriptor e,
+ leda::GRAPH<vtype,etype>& g)
+ {
+ g.del_edge(e);
+ }
+
+ //===========================================================================
+ // property maps
+
+ class leda_graph_id_map
+ : public put_get_helper<int, leda_graph_id_map>
+ {
+ public:
+ typedef readable_property_map_tag category;
+ typedef int value_type;
+ typedef int reference;
+ typedef leda_node key_type;
+ leda_graph_id_map() { }
+ template <class T>
+ long operator[](T x) const { return x->id(); }
+ };
+ template <class vtype, class etype>
+ inline leda_graph_id_map
+ get(vertex_index_t, const leda::GRAPH<vtype, etype>& g) {
+ return leda_graph_id_map();
+ }
+ template <class vtype, class etype>
+ inline leda_graph_id_map
+ get(edge_index_t, const leda::GRAPH<vtype, etype>& g) {
+ return leda_graph_id_map();
+ }
+
+ template <class Tag>
+ struct leda_property_map { };
+
+ template <>
+ struct leda_property_map<vertex_index_t> {
+ template <class vtype, class etype>
+ struct bind_ {
+ typedef leda_graph_id_map type;
+ typedef leda_graph_id_map const_type;
+ };
+ };
+ template <>
+ struct leda_property_map<edge_index_t> {
+ template <class vtype, class etype>
+ struct bind_ {
+ typedef leda_graph_id_map type;
+ typedef leda_graph_id_map const_type;
+ };
+ };
+
+
+ template <class Data, class DataRef, class GraphPtr>
+ class leda_graph_data_map
+ : public put_get_helper<DataRef,
+ leda_graph_data_map<Data,DataRef,GraphPtr> >
+ {
+ public:
+ typedef Data value_type;
+ typedef DataRef reference;
+ typedef void key_type;
+ typedef lvalue_property_map_tag category;
+ leda_graph_data_map(GraphPtr g) : m_g(g) { }
+ template <class NodeOrEdge>
+ DataRef operator[](NodeOrEdge x) const { return (*m_g)[x]; }
+ protected:
+ GraphPtr m_g;
+ };
+
+ template <>
+ struct leda_property_map<vertex_all_t> {
+ template <class vtype, class etype>
+ struct bind_ {
+ typedef leda_graph_data_map<vtype, vtype&, leda::GRAPH<vtype, etype>*> type;
+ typedef leda_graph_data_map<vtype, const vtype&,
+ const leda::GRAPH<vtype, etype>*> const_type;
+ };
+ };
+ template <class vtype, class etype >
+ inline typename property_map< leda::GRAPH<vtype, etype>, vertex_all_t>::type
+ get(vertex_all_t, leda::GRAPH<vtype, etype>& g) {
+ typedef typename property_map< leda::GRAPH<vtype, etype>, vertex_all_t>::type
+ pmap_type;
+ return pmap_type(&g);
+ }
+ template <class vtype, class etype >
+ inline typename property_map< leda::GRAPH<vtype, etype>, vertex_all_t>::const_type
+ get(vertex_all_t, const leda::GRAPH<vtype, etype>& g) {
+ typedef typename property_map< leda::GRAPH<vtype, etype>,
+ vertex_all_t>::const_type pmap_type;
+ return pmap_type(&g);
+ }
+
+ template <>
+ struct leda_property_map<edge_all_t> {
+ template <class vtype, class etype>
+ struct bind_ {
+ typedef leda_graph_data_map<etype, etype&, leda::GRAPH<vtype, etype>*> type;
+ typedef leda_graph_data_map<etype, const etype&,
+ const leda::GRAPH<vtype, etype>*> const_type;
+ };
+ };
+ template <class vtype, class etype >
+ inline typename property_map< leda::GRAPH<vtype, etype>, edge_all_t>::type
+ get(edge_all_t, leda::GRAPH<vtype, etype>& g) {
+ typedef typename property_map< leda::GRAPH<vtype, etype>, edge_all_t>::type
+ pmap_type;
+ return pmap_type(&g);
+ }
+ template <class vtype, class etype >
+ inline typename property_map< leda::GRAPH<vtype, etype>, edge_all_t>::const_type
+ get(edge_all_t, const leda::GRAPH<vtype, etype>& g) {
+ typedef typename property_map< leda::GRAPH<vtype, etype>,
+ edge_all_t>::const_type pmap_type;
+ return pmap_type(&g);
+ }
+
+ // property map interface to the LEDA node_array class
+
+ template <class E, class ERef, class NodeMapPtr>
+ class leda_node_property_map
+ : public put_get_helper<ERef, leda_node_property_map<E, ERef, NodeMapPtr> >
+ {
+ public:
+ typedef E value_type;
+ typedef ERef reference;
+ typedef leda_node key_type;
+ typedef lvalue_property_map_tag category;
+ leda_node_property_map(NodeMapPtr a) : m_array(a) { }
+ ERef operator[](leda_node n) const { return (*m_array)[n]; }
+ protected:
+ NodeMapPtr m_array;
+ };
+ template <class E>
+ leda_node_property_map<E, const E&, const leda_node_array<E>*>
+ make_leda_node_property_map(const leda_node_array<E>& a)
+ {
+ typedef leda_node_property_map<E, const E&, const leda_node_array<E>*>
+ pmap_type;
+ return pmap_type(&a);
+ }
+ template <class E>
+ leda_node_property_map<E, E&, leda_node_array<E>*>
+ make_leda_node_property_map(leda_node_array<E>& a)
+ {
+ typedef leda_node_property_map<E, E&, leda_node_array<E>*> pmap_type;
+ return pmap_type(&a);
+ }
+
+ template <class E>
+ leda_node_property_map<E, const E&, const leda_node_map<E>*>
+ make_leda_node_property_map(const leda_node_map<E>& a)
+ {
+ typedef leda_node_property_map<E,const E&,const leda_node_map<E>*>
+ pmap_type;
+ return pmap_type(&a);
+ }
+ template <class E>
+ leda_node_property_map<E, E&, leda_node_map<E>*>
+ make_leda_node_property_map(leda_node_map<E>& a)
+ {
+ typedef leda_node_property_map<E, E&, leda_node_map<E>*> pmap_type;
+ return pmap_type(&a);
+ }
+
+ // g++ 'enumeral_type' in template unification not implemented workaround
+ template <class vtype, class etype, class Tag>
+ struct property_map<leda::GRAPH<vtype, etype>, Tag> {
+ typedef typename
+ leda_property_map<Tag>::template bind_<vtype, etype> map_gen;
+ typedef typename map_gen::type type;
+ typedef typename map_gen::const_type const_type;
+ };
+
+ template <class vtype, class etype, class PropertyTag, class Key>
+ inline
+ typename boost::property_traits<
+ typename boost::property_map<leda::GRAPH<vtype, etype>,PropertyTag>::const_type
+ >::value_type
+ get(PropertyTag p, const leda::GRAPH<vtype, etype>& g, const Key& key) {
+ return get(get(p, g), key);
+ }
+
+ template <class vtype, class etype, class PropertyTag, class Key,class Value>
+ inline void
+ put(PropertyTag p, leda::GRAPH<vtype, etype>& g,
+ const Key& key, const Value& value)
+ {
+ typedef typename property_map<leda::GRAPH<vtype, etype>, PropertyTag>::type Map;
+ Map pmap = get(p, g);
+ put(pmap, key, value);
+ }
+
+} // namespace boost
+
+
+#endif // BOOST_GRAPH_LEDA_HPP
diff --git a/boost/boost/graph/matrix_as_graph.hpp b/boost/boost/graph/matrix_as_graph.hpp
new file mode 100644
index 00000000000..b39d126a236
--- /dev/null
+++ b/boost/boost/graph/matrix_as_graph.hpp
@@ -0,0 +1,127 @@
+//
+//=======================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// 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_GRAPH_MATRIX2GRAPH_HPP
+#define BOOST_GRAPH_MATRIX2GRAPH_HPP
+
+#include <utility>
+#include <boost/config.hpp>
+#include <boost/operators.hpp>
+#include <boost/int_iterator.hpp>
+#include <boost/graph/graph_traits.hpp>
+
+namespace boost {
+
+ template <class Iter, class Vertex>
+ class matrix_adj_iterator;
+
+ template <class Iter, class Vertex>
+ class matrix_incidence_iterator;
+
+}
+
+#define BOOST_GRAPH_ADAPT_MATRIX_TO_GRAPH(Matrix) \
+namespace boost { \
+ template <> \
+ struct graph_traits< Matrix > { \
+ typedef Matrix::OneD::const_iterator Iter; \
+ typedef Matrix::size_type V; \
+ typedef V vertex_descriptor; \
+ typedef Iter E; \
+ typedef E edge_descriptor; \
+ typedef boost::matrix_incidence_iterator<Iter, V> out_edge_iterator; \
+ typedef boost::matrix_adj_iterator<Iter, V> adjacency_iterator; \
+ typedef Matrix::size_type size_type; \
+ typedef boost::int_iterator<size_type> vertex_iterator; \
+ \
+ friend std::pair<vertex_iterator, vertex_iterator> \
+ vertices(const Matrix& g) { \
+ typedef vertex_iterator VIter; \
+ return std::make_pair(VIter(0), VIter(g.nrows())); \
+ } \
+ \
+ friend std::pair<out_edge_iterator, out_edge_iterator> \
+ out_edges(V v, const Matrix& g) { \
+ typedef out_edge_iterator IncIter; \
+ return std::make_pair(IncIter(g[v].begin()), \
+ IncIter(g[v].end())); \
+ } \
+ friend std::pair<adjacency_iterator, adjacency_iterator> \
+ adjacent_vertices(V v, const Matrix& g) { \
+ typedef adjacency_iterator AdjIter; \
+ return std::make_pair(AdjIter(g[v].begin()), \
+ AdjIter(g[v].end())); \
+ } \
+ friend vertex_descriptor \
+ source(E e, const Matrix& g) { \
+ return e.row(); \
+ } \
+ friend vertex_descriptor \
+ target(E e, const Matrix& g) { \
+ return e.column(); \
+ } \
+ friend size_type \
+ num_vertices(const Matrix& g) { \
+ return g.nrows(); \
+ } \
+ friend size_type \
+ num_edges(const Matrix& g) { \
+ return g.nnz(); \
+ } \
+ friend size_type \
+ out_degree(V i, const Matrix& g) { \
+ return g[i].nnz(); \
+ } \
+ }; \
+}
+
+namespace boost {
+
+ template <class Iter, class Vertex>
+ class matrix_adj_iterator
+ : public std::iterator<std::input_iterator_tag, Vertex >
+ {
+ typedef matrix_adj_iterator self;
+ public:
+ matrix_adj_iterator() { }
+ matrix_adj_iterator(Iter i) : _iter(i) { }
+ matrix_adj_iterator(const self& x) : _iter(x._iter) { }
+ self& operator=(const self& x) { _iter = x._iter; return *this; }
+ Vertex operator*() { return _iter.column(); }
+ self& operator++() { ++_iter; return *this; }
+ self operator++(int) { self t = *this; ++_iter; return t; }
+ bool operator==(const self& x) const { return _iter == x._iter; }
+ bool operator!=(const self& x) const { return _iter != x._iter; }
+ protected:
+ Iter _iter;
+ };
+
+ template <class Iter, class Vertex>
+ class matrix_incidence_iterator
+ : public std::iterator<std::input_iterator_tag, Iter >
+ {
+ typedef matrix_incidence_iterator self;
+ public:
+ matrix_incidence_iterator() { }
+ matrix_incidence_iterator(Iter i) : _iter(i) { }
+ matrix_incidence_iterator(const self& x) : _iter(x._iter) { }
+ self& operator=(const self& x) { _iter = x._iter; return *this; }
+ Iter operator*() { return _iter; }
+ self& operator++() { ++_iter; return *this; }
+ self operator++(int) { self t = *this; ++_iter; return t; }
+ bool operator==(const self& x) const { return _iter == x._iter; }
+ bool operator!=(const self& x) const { return _iter != x._iter; }
+ protected:
+ Iter _iter;
+ };
+
+} /* namespace boost */
+
+#endif /* BOOST_GRAPH_MATRIX2GRAPH_HPP*/
diff --git a/boost/boost/graph/max_cardinality_matching.hpp b/boost/boost/graph/max_cardinality_matching.hpp
new file mode 100644
index 00000000000..48cb053b81d
--- /dev/null
+++ b/boost/boost/graph/max_cardinality_matching.hpp
@@ -0,0 +1,876 @@
+//=======================================================================
+// Copyright (c) 2005 Aaron Windsor
+//
+// 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_GRAPH_MAXIMUM_CARDINALITY_MATCHING_HPP
+#define BOOST_GRAPH_MAXIMUM_CARDINALITY_MATCHING_HPP
+
+#include <vector>
+#include <list>
+#include <deque>
+#include <algorithm> // for std::sort and std::stable_sort
+#include <utility> // for std::pair
+#include <boost/property_map.hpp>
+#include <boost/utility.hpp> // for boost::tie
+#include <boost/graph/graph_traits.hpp>
+#include <boost/graph/visitors.hpp>
+#include <boost/graph/depth_first_search.hpp>
+#include <boost/graph/filtered_graph.hpp>
+#include <boost/pending/disjoint_sets.hpp>
+#include <boost/assert.hpp>
+
+
+namespace boost
+{
+ namespace graph { namespace detail {
+ enum { V_EVEN, V_ODD, V_UNREACHED };
+ } } // end namespace graph::detail
+
+ template <typename Graph, typename MateMap, typename VertexIndexMap>
+ typename graph_traits<Graph>::vertices_size_type
+ matching_size(const Graph& g, MateMap mate, VertexIndexMap vm)
+ {
+ typedef typename graph_traits<Graph>::vertex_iterator vertex_iterator_t;
+ typedef typename graph_traits<Graph>::vertex_descriptor
+ vertex_descriptor_t;
+ typedef typename graph_traits<Graph>::vertices_size_type v_size_t;
+
+ v_size_t size_of_matching = 0;
+ vertex_iterator_t vi, vi_end;
+
+ for(tie(vi,vi_end) = vertices(g); vi != vi_end; ++vi)
+ {
+ vertex_descriptor_t v = *vi;
+ if (get(mate,v) != graph_traits<Graph>::null_vertex()
+ && get(vm,v) < get(vm,get(mate,v)))
+ ++size_of_matching;
+ }
+ return size_of_matching;
+ }
+
+
+
+
+ template <typename Graph, typename MateMap>
+ inline typename graph_traits<Graph>::vertices_size_type
+ matching_size(const Graph& g, MateMap mate)
+ {
+ return matching_size(g, mate, get(vertex_index,g));
+ }
+
+
+
+
+ template <typename Graph, typename MateMap, typename VertexIndexMap>
+ bool is_a_matching(const Graph& g, MateMap mate, VertexIndexMap vm)
+ {
+ typedef typename graph_traits<Graph>::vertex_descriptor
+ vertex_descriptor_t;
+ typedef typename graph_traits<Graph>::vertex_iterator vertex_iterator_t;
+
+ vertex_iterator_t vi, vi_end;
+ for( tie(vi,vi_end) = vertices(g); vi != vi_end; ++vi)
+ {
+ vertex_descriptor_t v = *vi;
+ if (get(mate,v) != graph_traits<Graph>::null_vertex()
+ && v != get(mate,get(mate,v)))
+ return false;
+ }
+ return true;
+ }
+
+
+
+
+ template <typename Graph, typename MateMap>
+ inline bool is_a_matching(const Graph& g, MateMap mate)
+ {
+ return is_a_matching(g, mate, get(vertex_index,g));
+ }
+
+
+
+
+ //***************************************************************************
+ //***************************************************************************
+ // Maximum Cardinality Matching Functors
+ //***************************************************************************
+ //***************************************************************************
+
+ template <typename Graph, typename MateMap,
+ typename VertexIndexMap = dummy_property_map>
+ struct no_augmenting_path_finder
+ {
+ no_augmenting_path_finder(const Graph& g, MateMap mate, VertexIndexMap vm)
+ { }
+
+ inline bool augment_matching() { return false; }
+
+ template <typename PropertyMap>
+ void get_current_matching(PropertyMap p) {}
+ };
+
+
+
+
+ template <typename Graph, typename MateMap, typename VertexIndexMap>
+ class edmonds_augmenting_path_finder
+ {
+ // This implementation of Edmonds' matching algorithm closely
+ // follows Tarjan's description of the algorithm in "Data
+ // Structures and Network Algorithms."
+
+ public:
+
+ //generates the type of an iterator property map from vertices to type X
+ template <typename X>
+ struct map_vertex_to_
+ {
+ typedef boost::iterator_property_map<typename std::vector<X>::iterator,
+ VertexIndexMap> type;
+ };
+
+ typedef typename graph_traits<Graph>::vertex_descriptor
+ vertex_descriptor_t;
+ typedef typename std::pair< vertex_descriptor_t, vertex_descriptor_t >
+ vertex_pair_t;
+ typedef typename graph_traits<Graph>::edge_descriptor edge_descriptor_t;
+ typedef typename graph_traits<Graph>::vertices_size_type v_size_t;
+ typedef typename graph_traits<Graph>::edges_size_type e_size_t;
+ typedef typename graph_traits<Graph>::vertex_iterator vertex_iterator_t;
+ typedef typename graph_traits<Graph>::out_edge_iterator
+ out_edge_iterator_t;
+ typedef typename std::deque<vertex_descriptor_t> vertex_list_t;
+ typedef typename std::vector<edge_descriptor_t> edge_list_t;
+ typedef typename map_vertex_to_<vertex_descriptor_t>::type
+ vertex_to_vertex_map_t;
+ typedef typename map_vertex_to_<int>::type vertex_to_int_map_t;
+ typedef typename map_vertex_to_<vertex_pair_t>::type
+ vertex_to_vertex_pair_map_t;
+ typedef typename map_vertex_to_<v_size_t>::type vertex_to_vsize_map_t;
+ typedef typename map_vertex_to_<e_size_t>::type vertex_to_esize_map_t;
+
+
+
+
+ edmonds_augmenting_path_finder(const Graph& arg_g, MateMap arg_mate,
+ VertexIndexMap arg_vm) :
+ g(arg_g),
+ vm(arg_vm),
+ n_vertices(num_vertices(arg_g)),
+
+ mate_vector(n_vertices),
+ ancestor_of_v_vector(n_vertices),
+ ancestor_of_w_vector(n_vertices),
+ vertex_state_vector(n_vertices),
+ origin_vector(n_vertices),
+ pred_vector(n_vertices),
+ bridge_vector(n_vertices),
+ ds_parent_vector(n_vertices),
+ ds_rank_vector(n_vertices),
+
+ mate(mate_vector.begin(), vm),
+ ancestor_of_v(ancestor_of_v_vector.begin(), vm),
+ ancestor_of_w(ancestor_of_w_vector.begin(), vm),
+ vertex_state(vertex_state_vector.begin(), vm),
+ origin(origin_vector.begin(), vm),
+ pred(pred_vector.begin(), vm),
+ bridge(bridge_vector.begin(), vm),
+ ds_parent_map(ds_parent_vector.begin(), vm),
+ ds_rank_map(ds_rank_vector.begin(), vm),
+
+ ds(ds_rank_map, ds_parent_map)
+ {
+ vertex_iterator_t vi, vi_end;
+ for(tie(vi,vi_end) = vertices(g); vi != vi_end; ++vi)
+ mate[*vi] = get(arg_mate, *vi);
+ }
+
+
+
+
+ bool augment_matching()
+ {
+ //As an optimization, some of these values can be saved from one
+ //iteration to the next instead of being re-initialized each
+ //iteration, allowing for "lazy blossom expansion." This is not
+ //currently implemented.
+
+ e_size_t timestamp = 0;
+ even_edges.clear();
+
+ vertex_iterator_t vi, vi_end;
+ for(tie(vi,vi_end) = vertices(g); vi != vi_end; ++vi)
+ {
+ vertex_descriptor_t u = *vi;
+
+ origin[u] = u;
+ pred[u] = u;
+ ancestor_of_v[u] = 0;
+ ancestor_of_w[u] = 0;
+ ds.make_set(u);
+
+ if (mate[u] == graph_traits<Graph>::null_vertex())
+ {
+ vertex_state[u] = graph::detail::V_EVEN;
+ out_edge_iterator_t ei, ei_end;
+ for(tie(ei,ei_end) = out_edges(u,g); ei != ei_end; ++ei)
+ even_edges.push_back( *ei );
+ }
+ else
+ vertex_state[u] = graph::detail::V_UNREACHED;
+ }
+
+ //end initializations
+
+ vertex_descriptor_t v,w,w_free_ancestor,v_free_ancestor;
+ w_free_ancestor = graph_traits<Graph>::null_vertex();
+ v_free_ancestor = graph_traits<Graph>::null_vertex();
+ bool found_alternating_path = false;
+
+ while(!even_edges.empty() && !found_alternating_path)
+ {
+ // since we push even edges onto the back of the list as
+ // they're discovered, taking them off the back will search
+ // for augmenting paths depth-first.
+ edge_descriptor_t current_edge = even_edges.back();
+ even_edges.pop_back();
+
+ v = source(current_edge,g);
+ w = target(current_edge,g);
+
+ vertex_descriptor_t v_prime = origin[ds.find_set(v)];
+ vertex_descriptor_t w_prime = origin[ds.find_set(w)];
+
+ // because of the way we put all of the edges on the queue,
+ // v_prime should be labeled V_EVEN; the following is a
+ // little paranoid but it could happen...
+ if (vertex_state[v_prime] != graph::detail::V_EVEN)
+ {
+ std::swap(v_prime,w_prime);
+ std::swap(v,w);
+ }
+
+ if (vertex_state[w_prime] == graph::detail::V_UNREACHED)
+ {
+ vertex_state[w_prime] = graph::detail::V_ODD;
+ vertex_state[mate[w_prime]] = graph::detail::V_EVEN;
+ out_edge_iterator_t ei, ei_end;
+ for( tie(ei,ei_end) = out_edges(mate[w_prime], g); ei != ei_end; ++ei)
+ even_edges.push_back(*ei);
+ pred[w_prime] = v;
+ }
+ //w_prime == v_prime can happen below if we get an edge that has been
+ //shrunk into a blossom
+ else if (vertex_state[w_prime] == graph::detail::V_EVEN && w_prime != v_prime)
+ {
+ vertex_descriptor_t w_up = w_prime;
+ vertex_descriptor_t v_up = v_prime;
+ vertex_descriptor_t nearest_common_ancestor
+ = graph_traits<Graph>::null_vertex();
+ w_free_ancestor = graph_traits<Graph>::null_vertex();
+ v_free_ancestor = graph_traits<Graph>::null_vertex();
+
+ // We now need to distinguish between the case that
+ // w_prime and v_prime share an ancestor under the
+ // "parent" relation, in which case we've found a
+ // blossom and should shrink it, or the case that
+ // w_prime and v_prime both have distinct ancestors that
+ // are free, in which case we've found an alternating
+ // path between those two ancestors.
+
+ ++timestamp;
+
+ while (nearest_common_ancestor == graph_traits<Graph>::null_vertex() &&
+ (v_free_ancestor == graph_traits<Graph>::null_vertex() ||
+ w_free_ancestor == graph_traits<Graph>::null_vertex()
+ )
+ )
+ {
+ ancestor_of_w[w_up] = timestamp;
+ ancestor_of_v[v_up] = timestamp;
+
+ if (w_free_ancestor == graph_traits<Graph>::null_vertex())
+ w_up = parent(w_up);
+ if (v_free_ancestor == graph_traits<Graph>::null_vertex())
+ v_up = parent(v_up);
+
+ if (mate[v_up] == graph_traits<Graph>::null_vertex())
+ v_free_ancestor = v_up;
+ if (mate[w_up] == graph_traits<Graph>::null_vertex())
+ w_free_ancestor = w_up;
+
+ if (ancestor_of_w[v_up] == timestamp)
+ nearest_common_ancestor = v_up;
+ else if (ancestor_of_v[w_up] == timestamp)
+ nearest_common_ancestor = w_up;
+ else if (v_free_ancestor == w_free_ancestor &&
+ v_free_ancestor != graph_traits<Graph>::null_vertex())
+ nearest_common_ancestor = v_up;
+ }
+
+ if (nearest_common_ancestor == graph_traits<Graph>::null_vertex())
+ found_alternating_path = true; //to break out of the loop
+ else
+ {
+ //shrink the blossom
+ link_and_set_bridges(w_prime, nearest_common_ancestor, std::make_pair(w,v));
+ link_and_set_bridges(v_prime, nearest_common_ancestor, std::make_pair(v,w));
+ }
+ }
+ }
+
+ if (!found_alternating_path)
+ return false;
+
+ // retrieve the augmenting path and put it in aug_path
+ reversed_retrieve_augmenting_path(v, v_free_ancestor);
+ retrieve_augmenting_path(w, w_free_ancestor);
+
+ // augment the matching along aug_path
+ vertex_descriptor_t a,b;
+ while (!aug_path.empty())
+ {
+ a = aug_path.front();
+ aug_path.pop_front();
+ b = aug_path.front();
+ aug_path.pop_front();
+ mate[a] = b;
+ mate[b] = a;
+ }
+
+ return true;
+
+ }
+
+
+
+
+ template <typename PropertyMap>
+ void get_current_matching(PropertyMap pm)
+ {
+ vertex_iterator_t vi,vi_end;
+ for(tie(vi,vi_end) = vertices(g); vi != vi_end; ++vi)
+ put(pm, *vi, mate[*vi]);
+ }
+
+
+
+
+ template <typename PropertyMap>
+ void get_vertex_state_map(PropertyMap pm)
+ {
+ vertex_iterator_t vi,vi_end;
+ for(tie(vi,vi_end) = vertices(g); vi != vi_end; ++vi)
+ put(pm, *vi, vertex_state[origin[ds.find_set(*vi)]]);
+ }
+
+
+
+
+ private:
+
+ vertex_descriptor_t parent(vertex_descriptor_t x)
+ {
+ if (vertex_state[x] == graph::detail::V_EVEN
+ && mate[x] != graph_traits<Graph>::null_vertex())
+ return mate[x];
+ else if (vertex_state[x] == graph::detail::V_ODD)
+ return origin[ds.find_set(pred[x])];
+ else
+ return x;
+ }
+
+
+
+
+ void link_and_set_bridges(vertex_descriptor_t x,
+ vertex_descriptor_t stop_vertex,
+ vertex_pair_t the_bridge)
+ {
+ for(vertex_descriptor_t v = x; v != stop_vertex; v = parent(v))
+ {
+ ds.union_set(v, stop_vertex);
+ origin[ds.find_set(stop_vertex)] = stop_vertex;
+
+ if (vertex_state[v] == graph::detail::V_ODD)
+ {
+ bridge[v] = the_bridge;
+ out_edge_iterator_t oei, oei_end;
+ for(tie(oei, oei_end) = out_edges(v,g); oei != oei_end; ++oei)
+ even_edges.push_back(*oei);
+ }
+ }
+ }
+
+
+ // Since none of the STL containers support both constant-time
+ // concatenation and reversal, the process of expanding an
+ // augmenting path once we know one exists is a little more
+ // complicated than it has to be. If we know the path is from v to
+ // w, then the augmenting path is recursively defined as:
+ //
+ // path(v,w) = [v], if v = w
+ // = concat([v, mate[v]], path(pred[mate[v]], w),
+ // if v != w and vertex_state[v] == graph::detail::V_EVEN
+ // = concat([v], reverse(path(x,mate[v])), path(y,w)),
+ // if v != w, vertex_state[v] == graph::detail::V_ODD, and bridge[v] = (x,y)
+ //
+ // These next two mutually recursive functions implement this definition.
+
+ void retrieve_augmenting_path(vertex_descriptor_t v, vertex_descriptor_t w)
+ {
+ if (v == w)
+ aug_path.push_back(v);
+ else if (vertex_state[v] == graph::detail::V_EVEN)
+ {
+ aug_path.push_back(v);
+ aug_path.push_back(mate[v]);
+ retrieve_augmenting_path(pred[mate[v]], w);
+ }
+ else //vertex_state[v] == graph::detail::V_ODD
+ {
+ aug_path.push_back(v);
+ reversed_retrieve_augmenting_path(bridge[v].first, mate[v]);
+ retrieve_augmenting_path(bridge[v].second, w);
+ }
+ }
+
+
+ void reversed_retrieve_augmenting_path(vertex_descriptor_t v,
+ vertex_descriptor_t w)
+ {
+
+ if (v == w)
+ aug_path.push_back(v);
+ else if (vertex_state[v] == graph::detail::V_EVEN)
+ {
+ reversed_retrieve_augmenting_path(pred[mate[v]], w);
+ aug_path.push_back(mate[v]);
+ aug_path.push_back(v);
+ }
+ else //vertex_state[v] == graph::detail::V_ODD
+ {
+ reversed_retrieve_augmenting_path(bridge[v].second, w);
+ retrieve_augmenting_path(bridge[v].first, mate[v]);
+ aug_path.push_back(v);
+ }
+ }
+
+
+
+
+ //private data members
+
+ const Graph& g;
+ VertexIndexMap vm;
+ v_size_t n_vertices;
+
+ //storage for the property maps below
+ std::vector<vertex_descriptor_t> mate_vector;
+ std::vector<e_size_t> ancestor_of_v_vector;
+ std::vector<e_size_t> ancestor_of_w_vector;
+ std::vector<int> vertex_state_vector;
+ std::vector<vertex_descriptor_t> origin_vector;
+ std::vector<vertex_descriptor_t> pred_vector;
+ std::vector<vertex_pair_t> bridge_vector;
+ std::vector<vertex_descriptor_t> ds_parent_vector;
+ std::vector<v_size_t> ds_rank_vector;
+
+ //iterator property maps
+ vertex_to_vertex_map_t mate;
+ vertex_to_esize_map_t ancestor_of_v;
+ vertex_to_esize_map_t ancestor_of_w;
+ vertex_to_int_map_t vertex_state;
+ vertex_to_vertex_map_t origin;
+ vertex_to_vertex_map_t pred;
+ vertex_to_vertex_pair_map_t bridge;
+ vertex_to_vertex_map_t ds_parent_map;
+ vertex_to_vsize_map_t ds_rank_map;
+
+ vertex_list_t aug_path;
+ edge_list_t even_edges;
+ disjoint_sets< vertex_to_vsize_map_t, vertex_to_vertex_map_t > ds;
+
+ };
+
+
+
+
+ //***************************************************************************
+ //***************************************************************************
+ // Initial Matching Functors
+ //***************************************************************************
+ //***************************************************************************
+
+ template <typename Graph, typename MateMap>
+ struct greedy_matching
+ {
+ typedef typename graph_traits< Graph >::vertex_descriptor vertex_descriptor_t;
+ typedef typename graph_traits< Graph >::vertex_iterator vertex_iterator_t;
+ typedef typename graph_traits< Graph >::edge_descriptor edge_descriptor_t;
+ typedef typename graph_traits< Graph >::edge_iterator edge_iterator_t;
+
+ static void find_matching(const Graph& g, MateMap mate)
+ {
+ vertex_iterator_t vi, vi_end;
+ for(tie(vi,vi_end) = vertices(g); vi != vi_end; ++vi)
+ put(mate, *vi, graph_traits<Graph>::null_vertex());
+
+ edge_iterator_t ei, ei_end;
+ for( tie(ei, ei_end) = edges(g); ei != ei_end; ++ei)
+ {
+ edge_descriptor_t e = *ei;
+ vertex_descriptor_t u = source(e,g);
+ vertex_descriptor_t v = target(e,g);
+
+ if (get(mate,u) == get(mate,v))
+ //only way equality can hold is if
+ // mate[u] == mate[v] == null_vertex
+ {
+ put(mate,u,v);
+ put(mate,v,u);
+ }
+ }
+ }
+ };
+
+
+
+
+ template <typename Graph, typename MateMap>
+ struct extra_greedy_matching
+ {
+ // The "extra greedy matching" is formed by repeating the
+ // following procedure as many times as possible: Choose the
+ // unmatched vertex v of minimum non-zero degree. Choose the
+ // neighbor w of v which is unmatched and has minimum degree over
+ // all of v's neighbors. Add (u,v) to the matching. Ties for
+ // either choice are broken arbitrarily. This procedure takes time
+ // O(m log n), where m is the number of edges in the graph and n
+ // is the number of vertices.
+
+ typedef typename graph_traits< Graph >::vertex_descriptor
+ vertex_descriptor_t;
+ typedef typename graph_traits< Graph >::vertex_iterator vertex_iterator_t;
+ typedef typename graph_traits< Graph >::edge_descriptor edge_descriptor_t;
+ typedef typename graph_traits< Graph >::edge_iterator edge_iterator_t;
+ typedef std::pair<vertex_descriptor_t, vertex_descriptor_t> vertex_pair_t;
+
+ struct select_first
+ {
+ inline static vertex_descriptor_t select_vertex(const vertex_pair_t p)
+ {return p.first;}
+ };
+
+ struct select_second
+ {
+ inline static vertex_descriptor_t select_vertex(const vertex_pair_t p)
+ {return p.second;}
+ };
+
+ template <class PairSelector>
+ class less_than_by_degree
+ {
+ public:
+ less_than_by_degree(const Graph& g): m_g(g) {}
+ bool operator() (const vertex_pair_t x, const vertex_pair_t y)
+ {
+ return
+ out_degree(PairSelector::select_vertex(x), m_g)
+ < out_degree(PairSelector::select_vertex(y), m_g);
+ }
+ private:
+ const Graph& m_g;
+ };
+
+
+ static void find_matching(const Graph& g, MateMap mate)
+ {
+ typedef std::vector<std::pair<vertex_descriptor_t, vertex_descriptor_t> >
+ directed_edges_vector_t;
+
+ directed_edges_vector_t edge_list;
+ vertex_iterator_t vi, vi_end;
+ for(tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
+ put(mate, *vi, graph_traits<Graph>::null_vertex());
+
+ edge_iterator_t ei, ei_end;
+ for(tie(ei, ei_end) = edges(g); ei != ei_end; ++ei)
+ {
+ edge_descriptor_t e = *ei;
+ vertex_descriptor_t u = source(e,g);
+ vertex_descriptor_t v = target(e,g);
+ edge_list.push_back(std::make_pair(u,v));
+ edge_list.push_back(std::make_pair(v,u));
+ }
+
+ //sort the edges by the degree of the target, then (using a
+ //stable sort) by degree of the source
+ std::sort(edge_list.begin(), edge_list.end(),
+ less_than_by_degree<select_second>(g));
+ std::stable_sort(edge_list.begin(), edge_list.end(),
+ less_than_by_degree<select_first>(g));
+
+ //construct the extra greedy matching
+ for(typename directed_edges_vector_t::const_iterator itr = edge_list.begin(); itr != edge_list.end(); ++itr)
+ {
+ if (get(mate,itr->first) == get(mate,itr->second))
+ //only way equality can hold is if mate[itr->first] == mate[itr->second] == null_vertex
+ {
+ put(mate, itr->first, itr->second);
+ put(mate, itr->second, itr->first);
+ }
+ }
+ }
+ };
+
+
+
+
+ template <typename Graph, typename MateMap>
+ struct empty_matching
+ {
+ typedef typename graph_traits< Graph >::vertex_iterator vertex_iterator_t;
+
+ static void find_matching(const Graph& g, MateMap mate)
+ {
+ vertex_iterator_t vi, vi_end;
+ for(tie(vi,vi_end) = vertices(g); vi != vi_end; ++vi)
+ put(mate, *vi, graph_traits<Graph>::null_vertex());
+ }
+ };
+
+
+
+
+ //***************************************************************************
+ //***************************************************************************
+ // Matching Verifiers
+ //***************************************************************************
+ //***************************************************************************
+
+ namespace detail
+ {
+
+ template <typename SizeType>
+ class odd_components_counter : public dfs_visitor<>
+ // This depth-first search visitor will count the number of connected
+ // components with an odd number of vertices. It's used by
+ // maximum_matching_verifier.
+ {
+ public:
+ odd_components_counter(SizeType& c_count):
+ m_count(c_count)
+ {
+ m_count = 0;
+ }
+
+ template <class Vertex, class Graph>
+ void start_vertex(Vertex v, Graph&)
+ {
+ addend = -1;
+ }
+
+ template <class Vertex, class Graph>
+ void discover_vertex(Vertex u, Graph&)
+ {
+ addend *= -1;
+ m_count += addend;
+ }
+
+ protected:
+ SizeType& m_count;
+
+ private:
+ SizeType addend;
+
+ };
+
+ }//namespace detail
+
+
+
+
+ template <typename Graph, typename MateMap,
+ typename VertexIndexMap = dummy_property_map>
+ struct no_matching_verifier
+ {
+ inline static bool
+ verify_matching(const Graph& g, MateMap mate, VertexIndexMap vm)
+ { return true;}
+ };
+
+
+
+
+ template <typename Graph, typename MateMap, typename VertexIndexMap>
+ struct maximum_cardinality_matching_verifier
+ {
+
+ template <typename X>
+ struct map_vertex_to_
+ {
+ typedef boost::iterator_property_map<typename std::vector<X>::iterator,
+ VertexIndexMap> type;
+ };
+
+ typedef typename graph_traits<Graph>::vertex_descriptor
+ vertex_descriptor_t;
+ typedef typename graph_traits<Graph>::vertices_size_type v_size_t;
+ typedef typename graph_traits<Graph>::vertex_iterator vertex_iterator_t;
+ typedef typename map_vertex_to_<int>::type vertex_to_int_map_t;
+ typedef typename map_vertex_to_<vertex_descriptor_t>::type
+ vertex_to_vertex_map_t;
+
+ template <typename VertexStateMap>
+ struct non_odd_vertex {
+ //this predicate is used to create a filtered graph that
+ //excludes vertices labeled "graph::detail::V_ODD"
+ non_odd_vertex() : vertex_state(0) { }
+ non_odd_vertex(VertexStateMap* arg_vertex_state)
+ : vertex_state(arg_vertex_state) { }
+ template <typename Vertex>
+ bool operator()(const Vertex& v) const {
+ BOOST_ASSERT(vertex_state);
+ return get(*vertex_state, v) != graph::detail::V_ODD;
+ }
+ VertexStateMap* vertex_state;
+ };
+
+ static bool verify_matching(const Graph& g, MateMap mate, VertexIndexMap vm)
+ {
+ //For any graph G, let o(G) be the number of connected
+ //components in G of odd size. For a subset S of G's vertex set
+ //V(G), let (G - S) represent the subgraph of G induced by
+ //removing all vertices in S from G. Let M(G) be the size of the
+ //maximum cardinality matching in G. Then the Tutte-Berge
+ //formula guarantees that
+ //
+ // 2 * M(G) = min ( |V(G)| + |U| + o(G - U) )
+ //
+ //where the minimum is taken over all subsets U of
+ //V(G). Edmonds' algorithm finds a set U that achieves the
+ //minimum in the above formula, namely the vertices labeled
+ //"ODD." This function runs one iteration of Edmonds' algorithm
+ //to find U, then verifies that the size of the matching given
+ //by mate satisfies the Tutte-Berge formula.
+
+ //first, make sure it's a valid matching
+ if (!is_a_matching(g,mate,vm))
+ return false;
+
+ //We'll try to augment the matching once. This serves two
+ //purposes: first, if we find some augmenting path, the matching
+ //is obviously non-maximum. Second, running edmonds' algorithm
+ //on a graph with no augmenting path will create the
+ //Edmonds-Gallai decomposition that we need as a certificate of
+ //maximality - we can get it by looking at the vertex_state map
+ //that results.
+ edmonds_augmenting_path_finder<Graph,MateMap,VertexIndexMap>
+ augmentor(g,mate,vm);
+ if (augmentor.augment_matching())
+ return false;
+
+ std::vector<int> vertex_state_vector(num_vertices(g));
+ vertex_to_int_map_t vertex_state(vertex_state_vector.begin(), vm);
+ augmentor.get_vertex_state_map(vertex_state);
+
+ //count the number of graph::detail::V_ODD vertices
+ v_size_t num_odd_vertices = 0;
+ vertex_iterator_t vi, vi_end;
+ for(tie(vi,vi_end) = vertices(g); vi != vi_end; ++vi)
+ if (vertex_state[*vi] == graph::detail::V_ODD)
+ ++num_odd_vertices;
+
+ //count the number of connected components with odd cardinality
+ //in the graph without graph::detail::V_ODD vertices
+ non_odd_vertex<vertex_to_int_map_t> filter(&vertex_state);
+ filtered_graph<Graph, keep_all, non_odd_vertex<vertex_to_int_map_t> > fg(g, keep_all(), filter);
+
+ v_size_t num_odd_components;
+ detail::odd_components_counter<v_size_t> occ(num_odd_components);
+ depth_first_search(fg, visitor(occ).vertex_index_map(vm));
+
+ if (2 * matching_size(g,mate,vm) == num_vertices(g) + num_odd_vertices - num_odd_components)
+ return true;
+ else
+ return false;
+ }
+ };
+
+
+
+
+ template <typename Graph,
+ typename MateMap,
+ typename VertexIndexMap,
+ template <typename, typename, typename> class AugmentingPathFinder,
+ template <typename, typename> class InitialMatchingFinder,
+ template <typename, typename, typename> class MatchingVerifier>
+ bool matching(const Graph& g, MateMap mate, VertexIndexMap vm)
+ {
+
+ InitialMatchingFinder<Graph,MateMap>::find_matching(g,mate);
+
+ AugmentingPathFinder<Graph,MateMap,VertexIndexMap> augmentor(g,mate,vm);
+ bool not_maximum_yet = true;
+ while(not_maximum_yet)
+ {
+ not_maximum_yet = augmentor.augment_matching();
+ }
+ augmentor.get_current_matching(mate);
+
+ return MatchingVerifier<Graph,MateMap,VertexIndexMap>::verify_matching(g,mate,vm);
+
+ }
+
+
+
+
+ template <typename Graph, typename MateMap, typename VertexIndexMap>
+ inline bool checked_edmonds_maximum_cardinality_matching(const Graph& g, MateMap mate, VertexIndexMap vm)
+ {
+ return matching
+ < Graph, MateMap, VertexIndexMap,
+ edmonds_augmenting_path_finder, extra_greedy_matching, maximum_cardinality_matching_verifier>
+ (g, mate, vm);
+ }
+
+
+
+
+ template <typename Graph, typename MateMap>
+ inline bool checked_edmonds_maximum_cardinality_matching(const Graph& g, MateMap mate)
+ {
+ return checked_edmonds_maximum_cardinality_matching(g, mate, get(vertex_index,g));
+ }
+
+
+
+
+ template <typename Graph, typename MateMap, typename VertexIndexMap>
+ inline void edmonds_maximum_cardinality_matching(const Graph& g, MateMap mate, VertexIndexMap vm)
+ {
+ matching < Graph, MateMap, VertexIndexMap,
+ edmonds_augmenting_path_finder, extra_greedy_matching, no_matching_verifier>
+ (g, mate, vm);
+ }
+
+
+
+
+ template <typename Graph, typename MateMap>
+ inline void edmonds_maximum_cardinality_matching(const Graph& g, MateMap mate)
+ {
+ edmonds_maximum_cardinality_matching(g, mate, get(vertex_index,g));
+ }
+
+}//namespace boost
+
+#endif //BOOST_GRAPH_MAXIMUM_CARDINALITY_MATCHING_HPP
diff --git a/boost/boost/graph/minimum_degree_ordering.hpp b/boost/boost/graph/minimum_degree_ordering.hpp
new file mode 100644
index 00000000000..6aa242dcc58
--- /dev/null
+++ b/boost/boost/graph/minimum_degree_ordering.hpp
@@ -0,0 +1,655 @@
+//-*-c++-*-
+//=======================================================================
+// Copyright 1997-2001 University of Notre Dame.
+// Authors: Lie-Quan Lee, Jeremy Siek
+//
+// 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 MINIMUM_DEGREE_ORDERING_HPP
+#define MINIMUM_DEGREE_ORDERING_HPP
+
+#include <vector>
+#include <cassert>
+#include <boost/config.hpp>
+#include <boost/pending/bucket_sorter.hpp>
+#include <boost/detail/numeric_traits.hpp> // for integer_traits
+#include <boost/graph/graph_traits.hpp>
+#include <boost/property_map.hpp>
+
+namespace boost {
+
+ namespace detail {
+
+ //
+ // Given a set of n integers (where the integer values range from
+ // zero to n-1), we want to keep track of a collection of stacks
+ // of integers. It so happens that an integer will appear in at
+ // most one stack at a time, so the stacks form disjoint sets.
+ // Because of these restrictions, we can use one big array to
+ // store all the stacks, intertwined with one another.
+ // No allocation/deallocation happens in the push()/pop() methods
+ // so this is faster than using std::stack's.
+ //
+ template <class SignedInteger>
+ class Stacks {
+ typedef SignedInteger value_type;
+ typedef typename std::vector<value_type>::size_type size_type;
+ public:
+ Stacks(size_type n) : data(n) {}
+
+ //: stack
+ class stack {
+ typedef typename std::vector<value_type>::iterator Iterator;
+ public:
+ stack(Iterator _data, const value_type& head)
+ : data(_data), current(head) {}
+
+ // did not use default argument here to avoid internal compiler error
+ // in g++.
+ stack(Iterator _data)
+ : data(_data), current(-(std::numeric_limits<value_type>::max)()) {}
+
+ void pop() {
+ assert(! empty());
+ current = data[current];
+ }
+ void push(value_type v) {
+ data[v] = current;
+ current = v;
+ }
+ bool empty() {
+ return current == -(std::numeric_limits<value_type>::max)();
+ }
+ value_type& top() { return current; }
+ private:
+ Iterator data;
+ value_type current;
+ };
+
+ // To return a stack object
+ stack make_stack()
+ { return stack(data.begin()); }
+ protected:
+ std::vector<value_type> data;
+ };
+
+
+ // marker class, a generalization of coloring.
+ //
+ // This class is to provide a generalization of coloring which has
+ // complexity of amortized constant time to set all vertices' color
+ // back to be untagged. It implemented by increasing a tag.
+ //
+ // The colors are:
+ // not tagged
+ // tagged
+ // multiple_tagged
+ // done
+ //
+ template <class SignedInteger, class Vertex, class VertexIndexMap>
+ class Marker {
+ typedef SignedInteger value_type;
+ typedef typename std::vector<value_type>::size_type size_type;
+
+ static value_type done()
+ { return (std::numeric_limits<value_type>::max)()/2; }
+ public:
+ Marker(size_type _num, VertexIndexMap index_map)
+ : tag(1 - (std::numeric_limits<value_type>::max)()),
+ data(_num, - (std::numeric_limits<value_type>::max)()),
+ id(index_map) {}
+
+ void mark_done(Vertex node) { data[get(id, node)] = done(); }
+
+ bool is_done(Vertex node) { return data[get(id, node)] == done(); }
+
+ void mark_tagged(Vertex node) { data[get(id, node)] = tag; }
+
+ void mark_multiple_tagged(Vertex node) { data[get(id, node)] = multiple_tag; }
+
+ bool is_tagged(Vertex node) const { return data[get(id, node)] >= tag; }
+
+ bool is_not_tagged(Vertex node) const { return data[get(id, node)] < tag; }
+
+ bool is_multiple_tagged(Vertex node) const
+ { return data[get(id, node)] >= multiple_tag; }
+
+ void increment_tag() {
+ const size_type num = data.size();
+ ++tag;
+ if ( tag >= done() ) {
+ tag = 1 - (std::numeric_limits<value_type>::max)();
+ for (size_type i = 0; i < num; ++i)
+ if ( data[i] < done() )
+ data[i] = - (std::numeric_limits<value_type>::max)();
+ }
+ }
+
+ void set_multiple_tag(value_type mdeg0)
+ {
+ const size_type num = data.size();
+ multiple_tag = tag + mdeg0;
+
+ if ( multiple_tag >= done() ) {
+ tag = 1-(std::numeric_limits<value_type>::max)();
+
+ for (size_type i=0; i<num; i++)
+ if ( data[i] < done() )
+ data[i] = -(std::numeric_limits<value_type>::max)();
+
+ multiple_tag = tag + mdeg0;
+ }
+ }
+
+ void set_tag_as_multiple_tag() { tag = multiple_tag; }
+
+ protected:
+ value_type tag;
+ value_type multiple_tag;
+ std::vector<value_type> data;
+ VertexIndexMap id;
+ };
+
+ template< class Iterator, class SignedInteger,
+ class Vertex, class VertexIndexMap, int offset = 1 >
+ class Numbering {
+ typedef SignedInteger number_type;
+ number_type num; //start from 1 instead of zero
+ Iterator data;
+ number_type max_num;
+ VertexIndexMap id;
+ public:
+ Numbering(Iterator _data, number_type _max_num, VertexIndexMap id)
+ : num(1), data(_data), max_num(_max_num), id(id) {}
+ void operator()(Vertex node) { data[get(id, node)] = -num; }
+ bool all_done(number_type i = 0) const { return num + i > max_num; }
+ void increment(number_type i = 1) { num += i; }
+ bool is_numbered(Vertex node) const {
+ return data[get(id, node)] < 0;
+ }
+ void indistinguishable(Vertex i, Vertex j) {
+ data[get(id, i)] = - (get(id, j) + offset);
+ }
+ };
+
+ template <class SignedInteger, class Vertex, class VertexIndexMap>
+ class degreelists_marker {
+ public:
+ typedef SignedInteger value_type;
+ typedef typename std::vector<value_type>::size_type size_type;
+ degreelists_marker(size_type n, VertexIndexMap id)
+ : marks(n, 0), id(id) {}
+ void mark_need_update(Vertex i) { marks[get(id, i)] = 1; }
+ bool need_update(Vertex i) { return marks[get(id, i)] == 1; }
+ bool outmatched_or_done (Vertex i) { return marks[get(id, i)] == -1; }
+ void mark(Vertex i) { marks[get(id, i)] = -1; }
+ void unmark(Vertex i) { marks[get(id, i)] = 0; }
+ private:
+ std::vector<value_type> marks;
+ VertexIndexMap id;
+ };
+
+ // Helper function object for edge removal
+ template <class Graph, class MarkerP, class NumberD, class Stack,
+ class VertexIndexMap>
+ class predicateRemoveEdge1 {
+ typedef typename graph_traits<Graph>::vertex_descriptor vertex_t;
+ typedef typename graph_traits<Graph>::edge_descriptor edge_t;
+ public:
+ predicateRemoveEdge1(Graph& _g, MarkerP& _marker,
+ NumberD _numbering, Stack& n_e, VertexIndexMap id)
+ : g(&_g), marker(&_marker), numbering(_numbering),
+ neighbor_elements(&n_e), id(id) {}
+
+ bool operator()(edge_t e) {
+ vertex_t dist = target(e, *g);
+ if ( marker->is_tagged(dist) )
+ return true;
+ marker->mark_tagged(dist);
+ if (numbering.is_numbered(dist)) {
+ neighbor_elements->push(get(id, dist));
+ return true;
+ }
+ return false;
+ }
+ private:
+ Graph* g;
+ MarkerP* marker;
+ NumberD numbering;
+ Stack* neighbor_elements;
+ VertexIndexMap id;
+ };
+
+ // Helper function object for edge removal
+ template <class Graph, class MarkerP>
+ class predicate_remove_tagged_edges
+ {
+ typedef typename graph_traits<Graph>::vertex_descriptor vertex_t;
+ typedef typename graph_traits<Graph>::edge_descriptor edge_t;
+ public:
+ predicate_remove_tagged_edges(Graph& _g, MarkerP& _marker)
+ : g(&_g), marker(&_marker) {}
+
+ bool operator()(edge_t e) {
+ vertex_t dist = target(e, *g);
+ if ( marker->is_tagged(dist) )
+ return true;
+ return false;
+ }
+ private:
+ Graph* g;
+ MarkerP* marker;
+ };
+
+ template<class Graph, class DegreeMap,
+ class InversePermutationMap,
+ class PermutationMap,
+ class SuperNodeMap,
+ class VertexIndexMap>
+ class mmd_impl
+ {
+ // Typedefs
+ typedef graph_traits<Graph> Traits;
+ typedef typename Traits::vertices_size_type size_type;
+ typedef typename detail::integer_traits<size_type>::difference_type
+ diff_t;
+ typedef typename Traits::vertex_descriptor vertex_t;
+ typedef typename Traits::adjacency_iterator adj_iter;
+ typedef iterator_property_map<vertex_t*,
+ identity_property_map, vertex_t, vertex_t&> IndexVertexMap;
+ typedef detail::Stacks<diff_t> Workspace;
+ typedef bucket_sorter<size_type, vertex_t, DegreeMap, VertexIndexMap>
+ DegreeLists;
+ typedef Numbering<InversePermutationMap, diff_t, vertex_t,VertexIndexMap>
+ NumberingD;
+ typedef degreelists_marker<diff_t, vertex_t, VertexIndexMap>
+ DegreeListsMarker;
+ typedef Marker<diff_t, vertex_t, VertexIndexMap> MarkerP;
+
+ // Data Members
+
+ // input parameters
+ Graph& G;
+ int delta;
+ DegreeMap degree;
+ InversePermutationMap inverse_perm;
+ PermutationMap perm;
+ SuperNodeMap supernode_size;
+ VertexIndexMap vertex_index_map;
+
+ // internal data-structures
+ std::vector<vertex_t> index_vertex_vec;
+ size_type n;
+ IndexVertexMap index_vertex_map;
+ DegreeLists degreelists;
+ NumberingD numbering;
+ DegreeListsMarker degree_lists_marker;
+ MarkerP marker;
+ Workspace work_space;
+ public:
+ mmd_impl(Graph& g, size_type n_, int delta, DegreeMap degree,
+ InversePermutationMap inverse_perm,
+ PermutationMap perm,
+ SuperNodeMap supernode_size,
+ VertexIndexMap id)
+ : G(g), delta(delta), degree(degree),
+ inverse_perm(inverse_perm),
+ perm(perm),
+ supernode_size(supernode_size),
+ vertex_index_map(id),
+ index_vertex_vec(n_),
+ n(n_),
+ degreelists(n_ + 1, n_, degree, id),
+ numbering(inverse_perm, n_, vertex_index_map),
+ degree_lists_marker(n_, vertex_index_map),
+ marker(n_, vertex_index_map),
+ work_space(n_)
+ {
+ typename graph_traits<Graph>::vertex_iterator v, vend;
+ size_type vid = 0;
+ for (tie(v, vend) = vertices(G); v != vend; ++v, ++vid)
+ index_vertex_vec[vid] = *v;
+ index_vertex_map = IndexVertexMap(&index_vertex_vec[0]);
+
+ // Initialize degreelists. Degreelists organizes the nodes
+ // according to their degree.
+ for (tie(v, vend) = vertices(G); v != vend; ++v) {
+ put(degree, *v, out_degree(*v, G));
+ degreelists.push(*v);
+ }
+ }
+
+ void do_mmd()
+ {
+ // Eliminate the isolated nodes -- these are simply the nodes
+ // with no neighbors, which are accessible as a list (really, a
+ // stack) at location 0. Since these don't affect any other
+ // nodes, we can eliminate them without doing degree updates.
+ typename DegreeLists::stack list_isolated = degreelists[0];
+ while (!list_isolated.empty()) {
+ vertex_t node = list_isolated.top();
+ marker.mark_done(node);
+ numbering(node);
+ numbering.increment();
+ list_isolated.pop();
+ }
+ size_type min_degree = 1;
+ typename DegreeLists::stack list_min_degree = degreelists[min_degree];
+
+ while (list_min_degree.empty()) {
+ ++min_degree;
+ list_min_degree = degreelists[min_degree];
+ }
+
+ // check if the whole eliminating process is done
+ while (!numbering.all_done()) {
+
+ size_type min_degree_limit = min_degree + delta; // WARNING
+ typename Workspace::stack llist = work_space.make_stack();
+
+ // multiple elimination
+ while (delta >= 0) {
+
+ // Find the next non-empty degree
+ for (list_min_degree = degreelists[min_degree];
+ list_min_degree.empty() && min_degree <= min_degree_limit;
+ ++min_degree, list_min_degree = degreelists[min_degree])
+ ;
+ if (min_degree > min_degree_limit)
+ break;
+
+ const vertex_t node = list_min_degree.top();
+ const size_type node_id = get(vertex_index_map, node);
+ list_min_degree.pop();
+ numbering(node);
+
+ // check if node is the last one
+ if (numbering.all_done(supernode_size[node])) {
+ numbering.increment(supernode_size[node]);
+ break;
+ }
+ marker.increment_tag();
+ marker.mark_tagged(node);
+
+ this->eliminate(node);
+
+ numbering.increment(supernode_size[node]);
+ llist.push(node_id);
+ } // multiple elimination
+
+ if (numbering.all_done())
+ break;
+
+ this->update( llist, min_degree);
+ }
+
+ } // do_mmd()
+
+ void eliminate(vertex_t node)
+ {
+ typename Workspace::stack element_neighbor = work_space.make_stack();
+
+ // Create two function objects for edge removal
+ typedef typename Workspace::stack WorkStack;
+ predicateRemoveEdge1<Graph, MarkerP, NumberingD,
+ WorkStack, VertexIndexMap>
+ p(G, marker, numbering, element_neighbor, vertex_index_map);
+
+ predicate_remove_tagged_edges<Graph, MarkerP> p2(G, marker);
+
+ // Reconstruct the adjacent node list, push element neighbor in a List.
+ remove_out_edge_if(node, p, G);
+ //during removal element neighbors are collected.
+
+ while (!element_neighbor.empty()) {
+ // element absorb
+ size_type e_id = element_neighbor.top();
+ vertex_t element = get(index_vertex_map, e_id);
+ adj_iter i, i_end;
+ for (tie(i, i_end) = adjacent_vertices(element, G); i != i_end; ++i){
+ vertex_t i_node = *i;
+ if (!marker.is_tagged(i_node) && !numbering.is_numbered(i_node)) {
+ marker.mark_tagged(i_node);
+ add_edge(node, i_node, G);
+ }
+ }
+ element_neighbor.pop();
+ }
+ adj_iter v, ve;
+ for (tie(v, ve) = adjacent_vertices(node, G); v != ve; ++v) {
+ vertex_t v_node = *v;
+ if (!degree_lists_marker.need_update(v_node)
+ && !degree_lists_marker.outmatched_or_done(v_node)) {
+ degreelists.remove(v_node);
+ }
+ //update out edges of v_node
+ remove_out_edge_if(v_node, p2, G);
+
+ if ( out_degree(v_node, G) == 0 ) { // indistinguishable nodes
+ supernode_size[node] += supernode_size[v_node];
+ supernode_size[v_node] = 0;
+ numbering.indistinguishable(v_node, node);
+ marker.mark_done(v_node);
+ degree_lists_marker.mark(v_node);
+ } else { // not indistinguishable nodes
+ add_edge(v_node, node, G);
+ degree_lists_marker.mark_need_update(v_node);
+ }
+ }
+ } // eliminate()
+
+
+ template <class Stack>
+ void update(Stack llist, size_type& min_degree)
+ {
+ size_type min_degree0 = min_degree + delta + 1;
+
+ while (! llist.empty()) {
+ size_type deg, deg0 = 0;
+
+ marker.set_multiple_tag(min_degree0);
+ typename Workspace::stack q2list = work_space.make_stack();
+ typename Workspace::stack qxlist = work_space.make_stack();
+
+ vertex_t current = get(index_vertex_map, llist.top());
+ adj_iter i, ie;
+ for (tie(i,ie) = adjacent_vertices(current, G); i != ie; ++i) {
+ vertex_t i_node = *i;
+ const size_type i_id = get(vertex_index_map, i_node);
+ if (supernode_size[i_node] != 0) {
+ deg0 += supernode_size[i_node];
+ marker.mark_multiple_tagged(i_node);
+ if (degree_lists_marker.need_update(i_node)) {
+ if (out_degree(i_node, G) == 2)
+ q2list.push(i_id);
+ else
+ qxlist.push(i_id);
+ }
+ }
+ }
+
+ while (!q2list.empty()) {
+ const size_type u_id = q2list.top();
+ vertex_t u_node = get(index_vertex_map, u_id);
+ // if u_id is outmatched by others, no need to update degree
+ if (degree_lists_marker.outmatched_or_done(u_node)) {
+ q2list.pop();
+ continue;
+ }
+ marker.increment_tag();
+ deg = deg0;
+
+ adj_iter nu = adjacent_vertices(u_node, G).first;
+ vertex_t neighbor = *nu;
+ if (neighbor == u_node) {
+ ++nu;
+ neighbor = *nu;
+ }
+ if (numbering.is_numbered(neighbor)) {
+ adj_iter i, ie;
+ for (tie(i,ie) = adjacent_vertices(neighbor, G);
+ i != ie; ++i) {
+ const vertex_t i_node = *i;
+ if (i_node == u_node || supernode_size[i_node] == 0)
+ continue;
+ if (marker.is_tagged(i_node)) {
+ if (degree_lists_marker.need_update(i_node)) {
+ if ( out_degree(i_node, G) == 2 ) { // is indistinguishable
+ supernode_size[u_node] += supernode_size[i_node];
+ supernode_size[i_node] = 0;
+ numbering.indistinguishable(i_node, u_node);
+ marker.mark_done(i_node);
+ degree_lists_marker.mark(i_node);
+ } else // is outmatched
+ degree_lists_marker.mark(i_node);
+ }
+ } else {
+ marker.mark_tagged(i_node);
+ deg += supernode_size[i_node];
+ }
+ }
+ } else
+ deg += supernode_size[neighbor];
+
+ deg -= supernode_size[u_node];
+ degree[u_node] = deg; //update degree
+ degreelists[deg].push(u_node);
+ //u_id has been pushed back into degreelists
+ degree_lists_marker.unmark(u_node);
+ if (min_degree > deg)
+ min_degree = deg;
+ q2list.pop();
+ } // while (!q2list.empty())
+
+ while (!qxlist.empty()) {
+ const size_type u_id = qxlist.top();
+ const vertex_t u_node = get(index_vertex_map, u_id);
+
+ // if u_id is outmatched by others, no need to update degree
+ if (degree_lists_marker.outmatched_or_done(u_node)) {
+ qxlist.pop();
+ continue;
+ }
+ marker.increment_tag();
+ deg = deg0;
+ adj_iter i, ie;
+ for (tie(i, ie) = adjacent_vertices(u_node, G); i != ie; ++i) {
+ vertex_t i_node = *i;
+ if (marker.is_tagged(i_node))
+ continue;
+ marker.mark_tagged(i_node);
+
+ if (numbering.is_numbered(i_node)) {
+ adj_iter j, je;
+ for (tie(j, je) = adjacent_vertices(i_node, G); j != je; ++j) {
+ const vertex_t j_node = *j;
+ if (marker.is_not_tagged(j_node)) {
+ marker.mark_tagged(j_node);
+ deg += supernode_size[j_node];
+ }
+ }
+ } else
+ deg += supernode_size[i_node];
+ } // for adjacent vertices of u_node
+ deg -= supernode_size[u_node];
+ degree[u_node] = deg;
+ degreelists[deg].push(u_node);
+ // u_id has been pushed back into degreelists
+ degree_lists_marker.unmark(u_node);
+ if (min_degree > deg)
+ min_degree = deg;
+ qxlist.pop();
+ } // while (!qxlist.empty()) {
+
+ marker.set_tag_as_multiple_tag();
+ llist.pop();
+ } // while (! llist.empty())
+
+ } // update()
+
+
+ void build_permutation(InversePermutationMap next,
+ PermutationMap prev)
+ {
+ // collect the permutation info
+ size_type i;
+ for (i = 0; i < n; ++i) {
+ diff_t size = supernode_size[get(index_vertex_map, i)];
+ if ( size <= 0 ) {
+ prev[i] = next[i];
+ supernode_size[get(index_vertex_map, i)]
+ = next[i] + 1; // record the supernode info
+ } else
+ prev[i] = - next[i];
+ }
+ for (i = 1; i < n + 1; ++i) {
+ if ( prev[i-1] > 0 )
+ continue;
+ diff_t parent = i;
+ while ( prev[parent - 1] < 0 ) {
+ parent = - prev[parent - 1];
+ }
+
+ diff_t root = parent;
+ diff_t num = prev[root - 1] + 1;
+ next[i-1] = - num;
+ prev[root-1] = num;
+
+ parent = i;
+ diff_t next_node = - prev[parent - 1];
+ while (next_node > 0) {
+ prev[parent-1] = - root;
+ parent = next_node;
+ next_node = - prev[parent - 1];
+ }
+ }
+ for (i = 0; i < n; i++) {
+ diff_t num = - next[i] - 1;
+ next[i] = num;
+ prev[num] = i;
+ }
+ } // build_permutation()
+ };
+
+ } //namespace detail
+
+
+ // MMD algorithm
+ //
+ //The implementation presently includes the enhancements for mass
+ //elimination, incomplete degree update, multiple elimination, and
+ //external degree.
+ //
+ //Important Note: This implementation requires the BGL graph to be
+ //directed. Therefore, nonzero entry (i, j) in a symmetrical matrix
+ //A coresponds to two directed edges (i->j and j->i).
+ //
+ //see Alan George and Joseph W. H. Liu, The Evolution of the Minimum
+ //Degree Ordering Algorithm, SIAM Review, 31, 1989, Page 1-19
+ template<class Graph, class DegreeMap,
+ class InversePermutationMap,
+ class PermutationMap,
+ class SuperNodeMap, class VertexIndexMap>
+ void minimum_degree_ordering
+ (Graph& G,
+ DegreeMap degree,
+ InversePermutationMap inverse_perm,
+ PermutationMap perm,
+ SuperNodeMap supernode_size,
+ int delta,
+ VertexIndexMap vertex_index_map)
+ {
+ detail::mmd_impl<Graph,DegreeMap,InversePermutationMap,
+ PermutationMap, SuperNodeMap, VertexIndexMap>
+ impl(G, num_vertices(G), delta, degree, inverse_perm,
+ perm, supernode_size, vertex_index_map);
+ impl.do_mmd();
+ impl.build_permutation(inverse_perm, perm);
+ }
+
+} // namespace boost
+
+#endif // MINIMUM_DEGREE_ORDERING_HPP
diff --git a/boost/boost/graph/named_function_params.hpp b/boost/boost/graph/named_function_params.hpp
new file mode 100644
index 00000000000..e16584609bd
--- /dev/null
+++ b/boost/boost/graph/named_function_params.hpp
@@ -0,0 +1,753 @@
+//=======================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// 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_GRAPH_NAMED_FUNCTION_PARAMS_HPP
+#define BOOST_GRAPH_NAMED_FUNCTION_PARAMS_HPP
+
+#include <boost/graph/properties.hpp>
+
+namespace boost {
+
+ struct distance_compare_t { };
+ struct distance_combine_t { };
+ struct distance_inf_t { };
+ struct distance_zero_t { };
+ struct buffer_param_t { };
+ struct edge_copy_t { };
+ struct vertex_copy_t { };
+ struct vertex_isomorphism_t { };
+ struct vertex_invariant_t { };
+ struct vertex_invariant1_t { };
+ struct vertex_invariant2_t { };
+ struct edge_compare_t { };
+ struct vertex_max_invariant_t { };
+ struct orig_to_copy_t { };
+ struct root_vertex_t { };
+ struct attractive_force_t { };
+ struct repulsive_force_t { };
+ struct force_pairs_t { };
+ struct cooling_t { };
+ struct vertex_displacement_t { };
+ struct iterations_t { };
+ struct diameter_range_t { };
+ struct learning_constant_range_t { };
+
+ namespace detail {
+ template <class T>
+ struct wrap_ref {
+ wrap_ref(T& r) : ref(r) {}
+ T& ref;
+ };
+ }
+
+ template <typename T, typename Tag, typename Base = no_property>
+ struct bgl_named_params : public Base
+ {
+ typedef bgl_named_params self;
+ typedef Base next_type;
+ typedef Tag tag_type;
+ typedef T value_type;
+ bgl_named_params(T v) : m_value(v) { }
+ bgl_named_params(T v, const Base& b) : Base(b), m_value(v) { }
+ T m_value;
+
+ template <typename WeightMap>
+ bgl_named_params<WeightMap, edge_weight_t, self>
+ weight_map(const WeightMap& pmap) const {
+ typedef bgl_named_params<WeightMap, edge_weight_t, self> Params;
+ return Params(pmap, *this);
+ }
+
+ template <typename WeightMap>
+ bgl_named_params<WeightMap, edge_weight2_t, self>
+ weight_map2(const WeightMap& pmap) const {
+ typedef bgl_named_params<WeightMap, edge_weight2_t, self> Params;
+ return Params(pmap, *this);
+ }
+
+ template <typename DistanceMap>
+ bgl_named_params<DistanceMap, vertex_distance_t, self>
+ distance_map(const DistanceMap& pmap) const {
+ typedef bgl_named_params<DistanceMap, vertex_distance_t, self> Params;
+ return Params(pmap, *this);
+ }
+
+ template <typename PredecessorMap>
+ bgl_named_params<PredecessorMap, vertex_predecessor_t, self>
+ predecessor_map(const PredecessorMap& pmap) const {
+ typedef bgl_named_params<PredecessorMap, vertex_predecessor_t, self>
+ Params;
+ return Params(pmap, *this);
+ }
+
+ template <typename RankMap>
+ bgl_named_params<RankMap, vertex_rank_t, self>
+ rank_map(const RankMap& pmap) const {
+ typedef bgl_named_params<RankMap, vertex_rank_t, self>
+ Params;
+ return Params(pmap, *this);
+ }
+
+ template <typename RootMap>
+ bgl_named_params<RootMap, vertex_root_t, self>
+ root_map(const RootMap& pmap) const {
+ typedef bgl_named_params<RootMap, vertex_root_t, self>
+ Params;
+ return Params(pmap, *this);
+ }
+
+ template <typename Vertex>
+ bgl_named_params<Vertex, root_vertex_t, self>
+ root_vertex(const Vertex& r) const {
+ typedef bgl_named_params<Vertex, root_vertex_t, self> Params;
+ return Params(r, *this);
+ }
+
+ template <typename EdgeCentralityMap>
+ bgl_named_params<EdgeCentralityMap, edge_centrality_t, self>
+ edge_centrality_map(const EdgeCentralityMap& r) const {
+ typedef bgl_named_params<EdgeCentralityMap, edge_centrality_t, self> Params;
+ return Params(r, *this);
+ }
+
+ template <typename CentralityMap>
+ bgl_named_params<CentralityMap, vertex_centrality_t, self>
+ centrality_map(const CentralityMap& r) const {
+ typedef bgl_named_params<CentralityMap, vertex_centrality_t, self> Params;
+ return Params(r, *this);
+ }
+
+ template <typename ColorMap>
+ bgl_named_params<ColorMap, vertex_color_t, self>
+ color_map(const ColorMap& pmap) const {
+ typedef bgl_named_params<ColorMap, vertex_color_t, self> Params;
+ return Params(pmap, *this);
+ }
+
+ template <typename ColorMap>
+ bgl_named_params<ColorMap, vertex_color_t, self>
+ vertex_color_map(const ColorMap& pmap) const {
+ typedef bgl_named_params<ColorMap, vertex_color_t, self> Params;
+ return Params(pmap, *this);
+ }
+
+ template <typename ColorMap>
+ bgl_named_params<ColorMap, edge_color_t, self>
+ edge_color_map(const ColorMap& pmap) const {
+ typedef bgl_named_params<ColorMap, edge_color_t, self> Params;
+ return Params(pmap, *this);
+ }
+
+ template <typename CapacityMap>
+ bgl_named_params<CapacityMap, edge_capacity_t, self>
+ capacity_map(CapacityMap pmap) {
+ typedef bgl_named_params<CapacityMap, edge_capacity_t, self> Params;
+ return Params(pmap, *this);
+ }
+
+ template <typename Residual_CapacityMap>
+ bgl_named_params<Residual_CapacityMap, edge_residual_capacity_t, self>
+ residual_capacity_map(Residual_CapacityMap pmap) {
+ typedef bgl_named_params<Residual_CapacityMap,
+ edge_residual_capacity_t, self>
+ Params;
+ return Params(pmap, *this);
+ }
+
+ template <typename ReverseMap>
+ bgl_named_params<ReverseMap, edge_reverse_t, self>
+ reverse_edge_map(ReverseMap pmap) {
+ typedef bgl_named_params<ReverseMap,
+ edge_reverse_t, self>
+ Params;
+ return Params(pmap, *this);
+ }
+
+ template <typename DiscoverTimeMap>
+ bgl_named_params<DiscoverTimeMap, vertex_discover_time_t, self>
+ discover_time_map(const DiscoverTimeMap& pmap) const {
+ typedef bgl_named_params<DiscoverTimeMap, vertex_discover_time_t, self>
+ Params;
+ return Params(pmap, *this);
+ }
+
+ template <typename LowPointMap>
+ bgl_named_params<LowPointMap, vertex_lowpoint_t, self>
+ lowpoint_map(const LowPointMap& pmap) const {
+ typedef bgl_named_params<LowPointMap, vertex_lowpoint_t, self>
+ Params;
+ return Params(pmap, *this);
+ }
+
+ template <typename IndexMap>
+ bgl_named_params<IndexMap, vertex_index_t, self>
+ vertex_index_map(const IndexMap& pmap) const {
+ typedef bgl_named_params<IndexMap, vertex_index_t, self> Params;
+ return Params(pmap, *this);
+ }
+
+ template <typename IndexMap>
+ bgl_named_params<IndexMap, vertex_index1_t, self>
+ vertex_index1_map(const IndexMap& pmap) const {
+ typedef bgl_named_params<IndexMap, vertex_index1_t, self> Params;
+ return Params(pmap, *this);
+ }
+
+ template <typename IndexMap>
+ bgl_named_params<IndexMap, vertex_index2_t, self>
+ vertex_index2_map(const IndexMap& pmap) const {
+ typedef bgl_named_params<IndexMap, vertex_index2_t, self> Params;
+ return Params(pmap, *this);
+ }
+
+ template <typename Visitor>
+ bgl_named_params<Visitor, graph_visitor_t, self>
+ visitor(const Visitor& vis) const {
+ typedef bgl_named_params<Visitor, graph_visitor_t, self> Params;
+ return Params(vis, *this);
+ }
+
+ template <typename Compare>
+ bgl_named_params<Compare, distance_compare_t, self>
+ distance_compare(Compare cmp) const {
+ typedef bgl_named_params<Compare, distance_compare_t, self> Params;
+ return Params(cmp, *this);
+ }
+
+ template <typename Combine>
+ bgl_named_params<Combine, distance_combine_t, self>
+ distance_combine(Combine cmb) const {
+ typedef bgl_named_params<Combine, distance_combine_t, self> Params;
+ return Params(cmb, *this);
+ }
+
+ template <typename Init>
+ bgl_named_params<Init, distance_inf_t, self>
+ distance_inf(Init init) const {
+ typedef bgl_named_params<Init, distance_inf_t, self> Params;
+ return Params(init, *this);
+ }
+
+ template <typename Init>
+ bgl_named_params<Init, distance_zero_t, self>
+ distance_zero(Init init) const {
+ typedef bgl_named_params<Init, distance_zero_t, self> Params;
+ return Params(init, *this);
+ }
+
+ template <typename Buffer>
+ bgl_named_params<detail::wrap_ref<Buffer>, buffer_param_t, self>
+ buffer(Buffer& b) const {
+ typedef bgl_named_params<detail::wrap_ref<Buffer>, buffer_param_t, self>
+ Params;
+ return Params(detail::wrap_ref<Buffer>(b), *this);
+ }
+
+ template <typename Copier>
+ bgl_named_params<Copier, edge_copy_t, self>
+ edge_copy(const Copier& c) const {
+ typedef bgl_named_params<Copier, edge_copy_t, self> Params;
+ return Params(c, *this);
+ }
+
+ template <typename Copier>
+ bgl_named_params<Copier, vertex_copy_t, self>
+ vertex_copy(const Copier& c) const {
+ typedef bgl_named_params<Copier, vertex_copy_t, self> Params;
+ return Params(c, *this);
+ }
+
+ template <typename Orig2CopyMap>
+ bgl_named_params<Orig2CopyMap, orig_to_copy_t, self>
+ orig_to_copy(const Orig2CopyMap& c) const {
+ typedef bgl_named_params<Orig2CopyMap, orig_to_copy_t, self> Params;
+ return Params(c, *this);
+ }
+
+ template <typename IsoMap>
+ bgl_named_params<IsoMap, vertex_isomorphism_t, self>
+ isomorphism_map(const IsoMap& c) const {
+ typedef bgl_named_params<IsoMap, vertex_isomorphism_t, self> Params;
+ return Params(c, *this);
+ }
+
+ template <typename VertexInvar>
+ bgl_named_params<VertexInvar, vertex_invariant_t, self>
+ vertex_invariant(const VertexInvar& c) const {
+ typedef bgl_named_params<VertexInvar, vertex_invariant_t, self> Params;
+ return Params(c, *this);
+ }
+
+ template <typename VertexDisplacement>
+ bgl_named_params<VertexDisplacement, vertex_displacement_t, self>
+ displacement_map(const VertexDisplacement& c) const {
+ typedef bgl_named_params<VertexDisplacement, vertex_displacement_t, self> Params;
+ return Params(c, *this);
+ }
+
+ template <typename AttractiveForce>
+ bgl_named_params<AttractiveForce, attractive_force_t, self>
+ attractive_force(const AttractiveForce& c) {
+ typedef bgl_named_params<AttractiveForce, attractive_force_t, self> Params;
+ return Params(c, *this);
+ }
+
+ template <typename RepulsiveForce>
+ bgl_named_params<RepulsiveForce, repulsive_force_t, self>
+ repulsive_force(const RepulsiveForce& c) {
+ typedef bgl_named_params<RepulsiveForce, repulsive_force_t, self> Params;
+ return Params(c, *this);
+ }
+
+ template <typename ForcePairs>
+ bgl_named_params<ForcePairs, force_pairs_t, self>
+ force_pairs(const ForcePairs& c) {
+ typedef bgl_named_params<ForcePairs, force_pairs_t, self> Params;
+ return Params(c, *this);
+ }
+
+ template <typename Cooling>
+ bgl_named_params<Cooling, cooling_t, self>
+ cooling(const Cooling& c) {
+ typedef bgl_named_params<Cooling, cooling_t, self> Params;
+ return Params(c, *this);
+ }
+
+ template <typename TP>
+ bgl_named_params<TP, iterations_t, self>
+ iterations(const TP& c) {
+ typedef bgl_named_params<TP, iterations_t, self> Params;
+ return Params(c, *this);
+ }
+
+ template<typename TP>
+ bgl_named_params<std::pair<TP, TP>, diameter_range_t, self>
+ diameter_range(const std::pair<TP, TP>& c) {
+ typedef bgl_named_params<std::pair<TP, TP>, diameter_range_t, self> Params;
+ return Params(c, *this);
+ }
+
+ template<typename TP>
+ bgl_named_params<std::pair<TP, TP>, learning_constant_range_t, self>
+ learning_constant_range(const std::pair<TP, TP>& c) {
+ typedef bgl_named_params<std::pair<TP, TP>, learning_constant_range_t, self>
+ Params;
+ return Params(c, *this);
+ }
+ };
+
+ template <typename WeightMap>
+ bgl_named_params<WeightMap, edge_weight_t>
+ weight_map(WeightMap pmap) {
+ typedef bgl_named_params<WeightMap, edge_weight_t> Params;
+ return Params(pmap);
+ }
+
+ template <typename WeightMap>
+ bgl_named_params<WeightMap, edge_weight2_t>
+ weight_map2(WeightMap pmap) {
+ typedef bgl_named_params<WeightMap, edge_weight2_t> Params;
+ return Params(pmap);
+ }
+
+ template <typename DistanceMap>
+ bgl_named_params<DistanceMap, vertex_distance_t>
+ distance_map(DistanceMap pmap) {
+ typedef bgl_named_params<DistanceMap, vertex_distance_t> Params;
+ return Params(pmap);
+ }
+
+ template <typename PredecessorMap>
+ bgl_named_params<PredecessorMap, vertex_predecessor_t>
+ predecessor_map(PredecessorMap pmap) {
+ typedef bgl_named_params<PredecessorMap, vertex_predecessor_t> Params;
+ return Params(pmap);
+ }
+
+ template <typename RankMap>
+ bgl_named_params<RankMap, vertex_rank_t>
+ rank_map(RankMap pmap) {
+ typedef bgl_named_params<RankMap, vertex_rank_t> Params;
+ return Params(pmap);
+ }
+
+ template <typename RootMap>
+ bgl_named_params<RootMap, vertex_root_t>
+ root_map(RootMap pmap) {
+ typedef bgl_named_params<RootMap, vertex_root_t> Params;
+ return Params(pmap);
+ }
+
+ template <typename Vertex>
+ bgl_named_params<Vertex, root_vertex_t>
+ root_vertex(const Vertex& r) {
+ typedef bgl_named_params<Vertex, root_vertex_t> Params;
+ return Params(r);
+ }
+
+ template <typename EdgeCentralityMap>
+ bgl_named_params<EdgeCentralityMap, edge_centrality_t>
+ edge_centrality_map(const EdgeCentralityMap& r) {
+ typedef bgl_named_params<EdgeCentralityMap, edge_centrality_t> Params;
+ return Params(r);
+ }
+
+ template <typename CentralityMap>
+ bgl_named_params<CentralityMap, vertex_centrality_t>
+ centrality_map(const CentralityMap& r) {
+ typedef bgl_named_params<CentralityMap, vertex_centrality_t> Params;
+ return Params(r);
+ }
+
+ template <typename ColorMap>
+ bgl_named_params<ColorMap, vertex_color_t>
+ color_map(ColorMap pmap) {
+ typedef bgl_named_params<ColorMap, vertex_color_t> Params;
+ return Params(pmap);
+ }
+
+ template <typename CapacityMap>
+ bgl_named_params<CapacityMap, edge_capacity_t>
+ capacity_map(CapacityMap pmap) {
+ typedef bgl_named_params<CapacityMap, edge_capacity_t> Params;
+ return Params(pmap);
+ }
+
+ template <typename Residual_CapacityMap>
+ bgl_named_params<Residual_CapacityMap, edge_residual_capacity_t>
+ residual_capacity_map(Residual_CapacityMap pmap) {
+ typedef bgl_named_params<Residual_CapacityMap, edge_residual_capacity_t>
+ Params;
+ return Params(pmap);
+ }
+
+ template <typename ReverseMap>
+ bgl_named_params<ReverseMap, edge_reverse_t>
+ reverse_edge_map(ReverseMap pmap) {
+ typedef bgl_named_params<ReverseMap, edge_reverse_t>
+ Params;
+ return Params(pmap);
+ }
+
+ template <typename DiscoverTimeMap>
+ bgl_named_params<DiscoverTimeMap, vertex_discover_time_t>
+ discover_time_map(DiscoverTimeMap pmap) {
+ typedef bgl_named_params<DiscoverTimeMap, vertex_discover_time_t> Params;
+ return Params(pmap);
+ }
+
+ template <typename LowPointMap>
+ bgl_named_params<LowPointMap, vertex_lowpoint_t>
+ lowpoint_map(LowPointMap pmap) {
+ typedef bgl_named_params<LowPointMap, vertex_lowpoint_t> Params;
+ return Params(pmap);
+ }
+
+ template <typename IndexMap>
+ bgl_named_params<IndexMap, vertex_index_t>
+ vertex_index_map(IndexMap pmap) {
+ typedef bgl_named_params<IndexMap, vertex_index_t> Params;
+ return Params(pmap);
+ }
+
+ template <typename IndexMap>
+ bgl_named_params<IndexMap, vertex_index1_t>
+ vertex_index1_map(const IndexMap& pmap) {
+ typedef bgl_named_params<IndexMap, vertex_index1_t> Params;
+ return Params(pmap);
+ }
+
+ template <typename IndexMap>
+ bgl_named_params<IndexMap, vertex_index2_t>
+ vertex_index2_map(const IndexMap& pmap) {
+ typedef bgl_named_params<IndexMap, vertex_index2_t> Params;
+ return Params(pmap);
+ }
+
+ template <typename Visitor>
+ bgl_named_params<Visitor, graph_visitor_t>
+ visitor(const Visitor& vis) {
+ typedef bgl_named_params<Visitor, graph_visitor_t> Params;
+ return Params(vis);
+ }
+
+ template <typename Compare>
+ bgl_named_params<Compare, distance_compare_t>
+ distance_compare(Compare cmp) {
+ typedef bgl_named_params<Compare, distance_compare_t> Params;
+ return Params(cmp);
+ }
+
+ template <typename Combine>
+ bgl_named_params<Combine, distance_combine_t>
+ distance_combine(Combine cmb) {
+ typedef bgl_named_params<Combine, distance_combine_t> Params;
+ return Params(cmb);
+ }
+
+ template <typename Init>
+ bgl_named_params<Init, distance_inf_t>
+ distance_inf(Init init) {
+ typedef bgl_named_params<Init, distance_inf_t> Params;
+ return Params(init);
+ }
+
+ template <typename Init>
+ bgl_named_params<Init, distance_zero_t>
+ distance_zero(Init init) {
+ typedef bgl_named_params<Init, distance_zero_t> Params;
+ return Params(init);
+ }
+
+ template <typename Buffer>
+ bgl_named_params<detail::wrap_ref<Buffer>, buffer_param_t>
+ buffer(Buffer& b) {
+ typedef bgl_named_params<detail::wrap_ref<Buffer>, buffer_param_t> Params;
+ return Params(detail::wrap_ref<Buffer>(b));
+ }
+
+ template <typename Copier>
+ bgl_named_params<Copier, edge_copy_t>
+ edge_copy(const Copier& c) {
+ typedef bgl_named_params<Copier, edge_copy_t> Params;
+ return Params(c);
+ }
+
+ template <typename Copier>
+ bgl_named_params<Copier, vertex_copy_t>
+ vertex_copy(const Copier& c) {
+ typedef bgl_named_params<Copier, vertex_copy_t> Params;
+ return Params(c);
+ }
+
+ template <typename Orig2CopyMap>
+ bgl_named_params<Orig2CopyMap, orig_to_copy_t>
+ orig_to_copy(const Orig2CopyMap& c) {
+ typedef bgl_named_params<Orig2CopyMap, orig_to_copy_t> Params;
+ return Params(c);
+ }
+
+ template <typename IsoMap>
+ bgl_named_params<IsoMap, vertex_isomorphism_t>
+ isomorphism_map(const IsoMap& c) {
+ typedef bgl_named_params<IsoMap, vertex_isomorphism_t> Params;
+ return Params(c);
+ }
+
+ template <typename VertexInvar>
+ bgl_named_params<VertexInvar, vertex_invariant_t>
+ vertex_invariant(const VertexInvar& c) {
+ typedef bgl_named_params<VertexInvar, vertex_invariant_t> Params;
+ return Params(c);
+ }
+
+ template <typename VertexDisplacement>
+ bgl_named_params<VertexDisplacement, vertex_displacement_t>
+ displacement_map(const VertexDisplacement& c) {
+ typedef bgl_named_params<VertexDisplacement, vertex_displacement_t> Params;
+ return Params(c);
+ }
+
+ template <typename AttractiveForce>
+ bgl_named_params<AttractiveForce, attractive_force_t>
+ attractive_force(const AttractiveForce& c) {
+ typedef bgl_named_params<AttractiveForce, attractive_force_t> Params;
+ return Params(c);
+ }
+
+ template <typename RepulsiveForce>
+ bgl_named_params<RepulsiveForce, repulsive_force_t>
+ repulsive_force(const RepulsiveForce& c) {
+ typedef bgl_named_params<RepulsiveForce, repulsive_force_t> Params;
+ return Params(c);
+ }
+
+ template <typename ForcePairs>
+ bgl_named_params<ForcePairs, force_pairs_t>
+ force_pairs(const ForcePairs& c) {
+ typedef bgl_named_params<ForcePairs, force_pairs_t> Params;
+ return Params(c);
+ }
+
+ template <typename Cooling>
+ bgl_named_params<Cooling, cooling_t>
+ cooling(const Cooling& c) {
+ typedef bgl_named_params<Cooling, cooling_t> Params;
+ return Params(c);
+ }
+
+ template <typename T>
+ bgl_named_params<T, iterations_t>
+ iterations(const T& c) {
+ typedef bgl_named_params<T, iterations_t> Params;
+ return Params(c);
+ }
+
+ template<typename T>
+ bgl_named_params<std::pair<T, T>, diameter_range_t>
+ diameter_range(const std::pair<T, T>& c) {
+ typedef bgl_named_params<std::pair<T, T>, diameter_range_t> Params;
+ return Params(c);
+ }
+
+ template<typename T>
+ bgl_named_params<std::pair<T, T>, learning_constant_range_t>
+ learning_constant_range(const std::pair<T, T>& c) {
+ typedef bgl_named_params<std::pair<T, T>, learning_constant_range_t>
+ Params;
+ return Params(c);
+ }
+
+ //===========================================================================
+ // Functions for extracting parameters from bgl_named_params
+
+ template <class Tag1, class Tag2, class T1, class Base>
+ inline
+ typename property_value< bgl_named_params<T1,Tag1,Base>, Tag2>::type
+ get_param(const bgl_named_params<T1,Tag1,Base>& p, Tag2 tag2)
+ {
+ enum { match = detail::same_property<Tag1,Tag2>::value };
+ typedef typename
+ property_value< bgl_named_params<T1,Tag1,Base>, Tag2>::type T2;
+ T2* t2 = 0;
+ typedef detail::property_value_dispatch<match> Dispatcher;
+ return Dispatcher::const_get_value(p, t2, tag2);
+ }
+
+
+ namespace detail {
+ // MSVC++ workaround
+ template <class Param>
+ struct choose_param_helper {
+ template <class Default> struct result { typedef Param type; };
+ template <typename Default>
+ static const Param& apply(const Param& p, const Default&) { return p; }
+ };
+ template <>
+ struct choose_param_helper<error_property_not_found> {
+ template <class Default> struct result { typedef Default type; };
+ template <typename Default>
+ static const Default& apply(const error_property_not_found&, const Default& d)
+ { return d; }
+ };
+ } // namespace detail
+
+ template <class P, class Default>
+ const typename detail::choose_param_helper<P>::template result<Default>::type&
+ choose_param(const P& param, const Default& d) {
+ return detail::choose_param_helper<P>::apply(param, d);
+ }
+
+ template <typename T>
+ inline bool is_default_param(const T&) { return false; }
+
+ inline bool is_default_param(const detail::error_property_not_found&)
+ { return true; }
+
+ namespace detail {
+
+ struct choose_parameter {
+ template <class P, class Graph, class Tag>
+ struct bind_ {
+ typedef const P& const_result_type;
+ typedef const P& result_type;
+ typedef P type;
+ };
+
+ template <class P, class Graph, class Tag>
+ static typename bind_<P, Graph, Tag>::const_result_type
+ const_apply(const P& p, const Graph&, Tag&)
+ { return p; }
+
+ template <class P, class Graph, class Tag>
+ static typename bind_<P, Graph, Tag>::result_type
+ apply(const P& p, Graph&, Tag&)
+ { return p; }
+ };
+
+ struct choose_default_param {
+ template <class P, class Graph, class Tag>
+ struct bind_ {
+ typedef typename property_map<Graph, Tag>::type
+ result_type;
+ typedef typename property_map<Graph, Tag>::const_type
+ const_result_type;
+ typedef typename property_map<Graph, Tag>::const_type
+ type;
+ };
+
+ template <class P, class Graph, class Tag>
+ static typename bind_<P, Graph, Tag>::const_result_type
+ const_apply(const P&, const Graph& g, Tag tag) {
+ return get(tag, g);
+ }
+ template <class P, class Graph, class Tag>
+ static typename bind_<P, Graph, Tag>::result_type
+ apply(const P&, Graph& g, Tag tag) {
+ return get(tag, g);
+ }
+ };
+
+ template <class Param>
+ struct choose_property_map {
+ typedef choose_parameter type;
+ };
+ template <>
+ struct choose_property_map<detail::error_property_not_found> {
+ typedef choose_default_param type;
+ };
+
+ template <class Param, class Graph, class Tag>
+ struct choose_pmap_helper {
+ typedef typename choose_property_map<Param>::type Selector;
+ typedef typename Selector:: template bind_<Param, Graph, Tag> Bind;
+ typedef Bind type;
+ typedef typename Bind::result_type result_type;
+ typedef typename Bind::const_result_type const_result_type;
+ typedef typename Bind::type result;
+ };
+
+ // used in the max-flow algorithms
+ template <class Graph, class P, class T, class R>
+ struct edge_capacity_value
+ {
+ typedef bgl_named_params<P, T, R> Params;
+ typedef typename property_value< Params, edge_capacity_t>::type Param;
+ typedef typename detail::choose_pmap_helper<Param, Graph,
+ edge_capacity_t>::result CapacityEdgeMap;
+ typedef typename property_traits<CapacityEdgeMap>::value_type type;
+ };
+
+ } // namespace detail
+
+
+ // Use this function instead of choose_param() when you want
+ // to avoid requiring get(tag, g) when it is not used.
+ template <typename Param, typename Graph, typename PropertyTag>
+ typename
+ detail::choose_pmap_helper<Param,Graph,PropertyTag>::const_result_type
+ choose_const_pmap(const Param& p, const Graph& g, PropertyTag tag)
+ {
+ typedef typename
+ detail::choose_pmap_helper<Param,Graph,PropertyTag>::Selector Choice;
+ return Choice::const_apply(p, g, tag);
+ }
+
+ template <typename Param, typename Graph, typename PropertyTag>
+ typename detail::choose_pmap_helper<Param,Graph,PropertyTag>::result_type
+ choose_pmap(const Param& p, Graph& g, PropertyTag tag)
+ {
+ typedef typename
+ detail::choose_pmap_helper<Param,Graph,PropertyTag>::Selector Choice;
+ return Choice::apply(p, g, tag);
+ }
+
+} // namespace boost
+
+#endif // BOOST_GRAPH_NAMED_FUNCTION_PARAMS_HPP
diff --git a/boost/boost/graph/neighbor_bfs.hpp b/boost/boost/graph/neighbor_bfs.hpp
new file mode 100644
index 00000000000..1c7b9782ac5
--- /dev/null
+++ b/boost/boost/graph/neighbor_bfs.hpp
@@ -0,0 +1,323 @@
+//
+//=======================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// 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_GRAPH_NEIGHBOR_BREADTH_FIRST_SEARCH_HPP
+#define BOOST_GRAPH_NEIGHBOR_BREADTH_FIRST_SEARCH_HPP
+
+/*
+ Neighbor Breadth First Search
+ Like BFS, but traverses in-edges as well as out-edges.
+ (for directed graphs only. use normal BFS for undirected graphs)
+*/
+#include <boost/config.hpp>
+#include <vector>
+#include <boost/pending/queue.hpp>
+#include <boost/graph/graph_traits.hpp>
+#include <boost/graph/graph_concepts.hpp>
+#include <boost/graph/visitors.hpp>
+#include <boost/graph/named_function_params.hpp>
+
+namespace boost {
+
+ template <class Visitor, class Graph>
+ struct NeighborBFSVisitorConcept {
+ void constraints() {
+ function_requires< CopyConstructibleConcept<Visitor> >();
+ vis.initialize_vertex(u, g);
+ vis.discover_vertex(u, g);
+ vis.examine_vertex(u, g);
+ vis.examine_out_edge(e, g);
+ vis.examine_in_edge(e, g);
+ vis.tree_out_edge(e, g);
+ vis.tree_in_edge(e, g);
+ vis.non_tree_out_edge(e, g);
+ vis.non_tree_in_edge(e, g);
+ vis.gray_target(e, g);
+ vis.black_target(e, g);
+ vis.gray_source(e, g);
+ vis.black_source(e, g);
+ vis.finish_vertex(u, g);
+ }
+ Visitor vis;
+ Graph g;
+ typename graph_traits<Graph>::vertex_descriptor u;
+ typename graph_traits<Graph>::edge_descriptor e;
+ };
+
+ template <class Visitors = null_visitor>
+ class neighbor_bfs_visitor {
+ public:
+ neighbor_bfs_visitor(Visitors vis = Visitors()) : m_vis(vis) { }
+
+ template <class Vertex, class Graph>
+ void initialize_vertex(Vertex u, Graph& g) {
+ invoke_visitors(m_vis, u, g, on_initialize_vertex());
+ }
+ template <class Vertex, class Graph>
+ void discover_vertex(Vertex u, Graph& g) {
+ invoke_visitors(m_vis, u, g, on_discover_vertex());
+ }
+ template <class Vertex, class Graph>
+ void examine_vertex(Vertex u, Graph& g) {
+ invoke_visitors(m_vis, u, g, on_examine_vertex());
+ }
+ template <class Edge, class Graph>
+ void examine_out_edge(Edge e, Graph& g) {
+ invoke_visitors(m_vis, e, g, on_examine_edge());
+ }
+ template <class Edge, class Graph>
+ void tree_out_edge(Edge e, Graph& g) {
+ invoke_visitors(m_vis, e, g, on_tree_edge());
+ }
+ template <class Edge, class Graph>
+ void non_tree_out_edge(Edge e, Graph& g) {
+ invoke_visitors(m_vis, e, g, on_non_tree_edge());
+ }
+ template <class Edge, class Graph>
+ void gray_target(Edge e, Graph& g) {
+ invoke_visitors(m_vis, e, g, on_gray_target());
+ }
+ template <class Edge, class Graph>
+ void black_target(Edge e, Graph& g) {
+ invoke_visitors(m_vis, e, g, on_black_target());
+ }
+ template <class Edge, class Graph>
+ void examine_in_edge(Edge e, Graph& g) {
+ invoke_visitors(m_vis, e, g, on_examine_edge());
+ }
+ template <class Edge, class Graph>
+ void tree_in_edge(Edge e, Graph& g) {
+ invoke_visitors(m_vis, e, g, on_tree_edge());
+ }
+ template <class Edge, class Graph>
+ void non_tree_in_edge(Edge e, Graph& g) {
+ invoke_visitors(m_vis, e, g, on_non_tree_edge());
+ }
+ template <class Edge, class Graph>
+ void gray_source(Edge e, Graph& g) {
+ invoke_visitors(m_vis, e, g, on_gray_target());
+ }
+ template <class Edge, class Graph>
+ void black_source(Edge e, Graph& g) {
+ invoke_visitors(m_vis, e, g, on_black_target());
+ }
+ template <class Vertex, class Graph>
+ void finish_vertex(Vertex u, Graph& g) {
+ invoke_visitors(m_vis, u, g, on_finish_vertex());
+ }
+ protected:
+ Visitors m_vis;
+ };
+
+ template <class Visitors>
+ neighbor_bfs_visitor<Visitors>
+ make_neighbor_bfs_visitor(Visitors vis) {
+ return neighbor_bfs_visitor<Visitors>(vis);
+ }
+
+ namespace detail {
+
+ template <class BidirectionalGraph, class Buffer, class BFSVisitor,
+ class ColorMap>
+ void neighbor_bfs_impl
+ (const BidirectionalGraph& g,
+ typename graph_traits<BidirectionalGraph>::vertex_descriptor s,
+ Buffer& Q, BFSVisitor vis, ColorMap color)
+
+ {
+ function_requires< BidirectionalGraphConcept<BidirectionalGraph> >();
+ typedef graph_traits<BidirectionalGraph> GTraits;
+ typedef typename GTraits::vertex_descriptor Vertex;
+ typedef typename GTraits::edge_descriptor Edge;
+ function_requires<
+ NeighborBFSVisitorConcept<BFSVisitor, BidirectionalGraph> >();
+ function_requires< ReadWritePropertyMapConcept<ColorMap, Vertex> >();
+ typedef typename property_traits<ColorMap>::value_type ColorValue;
+ typedef color_traits<ColorValue> Color;
+
+ put(color, s, Color::gray());
+ vis.discover_vertex(s, g);
+ Q.push(s);
+ while (! Q.empty()) {
+ Vertex u = Q.top();
+ Q.pop(); // pop before push to avoid problem if Q is priority_queue.
+ vis.examine_vertex(u, g);
+
+ typename GTraits::out_edge_iterator ei, ei_end;
+ for (tie(ei, ei_end) = out_edges(u, g); ei != ei_end; ++ei) {
+ Edge e = *ei;
+ vis.examine_out_edge(e, g);
+ Vertex v = target(e, g);
+ ColorValue v_color = get(color, v);
+ if (v_color == Color::white()) {
+ vis.tree_out_edge(e, g);
+ put(color, v, Color::gray());
+ vis.discover_vertex(v, g);
+ Q.push(v);
+ } else {
+ vis.non_tree_out_edge(e, g);
+ if (v_color == Color::gray())
+ vis.gray_target(e, g);
+ else
+ vis.black_target(e, g);
+ }
+ } // for out-edges
+
+ typename GTraits::in_edge_iterator in_ei, in_ei_end;
+ for (tie(in_ei, in_ei_end) = in_edges(u, g);
+ in_ei != in_ei_end; ++in_ei) {
+ Edge e = *in_ei;
+ vis.examine_in_edge(e, g);
+ Vertex v = source(e, g);
+ ColorValue v_color = get(color, v);
+ if (v_color == Color::white()) {
+ vis.tree_in_edge(e, g);
+ put(color, v, Color::gray());
+ vis.discover_vertex(v, g);
+ Q.push(v);
+ } else {
+ vis.non_tree_in_edge(e, g);
+ if (v_color == Color::gray())
+ vis.gray_source(e, g);
+ else
+ vis.black_source(e, g);
+ }
+ } // for in-edges
+
+ put(color, u, Color::black());
+ vis.finish_vertex(u, g);
+ } // while
+ }
+
+
+ template <class VertexListGraph, class ColorMap, class BFSVisitor,
+ class P, class T, class R>
+ void neighbor_bfs_helper
+ (VertexListGraph& g,
+ typename graph_traits<VertexListGraph>::vertex_descriptor s,
+ ColorMap color,
+ BFSVisitor vis,
+ const bgl_named_params<P, T, R>& params)
+ {
+ typedef graph_traits<VertexListGraph> Traits;
+ // Buffer default
+ typedef typename Traits::vertex_descriptor Vertex;
+ typedef boost::queue<Vertex> queue_t;
+ queue_t Q;
+ detail::wrap_ref<queue_t> Qref(Q);
+ // Initialization
+ typedef typename property_traits<ColorMap>::value_type ColorValue;
+ typedef color_traits<ColorValue> Color;
+ typename boost::graph_traits<VertexListGraph>::vertex_iterator i, i_end;
+ for (tie(i, i_end) = vertices(g); i != i_end; ++i) {
+ put(color, *i, Color::white());
+ vis.initialize_vertex(*i, g);
+ }
+ neighbor_bfs_impl
+ (g, s,
+ choose_param(get_param(params, buffer_param_t()), Qref).ref,
+ vis, color);
+ }
+
+ //-------------------------------------------------------------------------
+ // Choose between default color and color parameters. Using
+ // function dispatching so that we don't require vertex index if
+ // the color default is not being used.
+
+ template <class ColorMap>
+ struct neighbor_bfs_dispatch {
+ template <class VertexListGraph, class P, class T, class R>
+ static void apply
+ (VertexListGraph& g,
+ typename graph_traits<VertexListGraph>::vertex_descriptor s,
+ const bgl_named_params<P, T, R>& params,
+ ColorMap color)
+ {
+ neighbor_bfs_helper
+ (g, s, color,
+ choose_param(get_param(params, graph_visitor),
+ make_neighbor_bfs_visitor(null_visitor())),
+ params);
+ }
+ };
+
+ template <>
+ struct neighbor_bfs_dispatch<detail::error_property_not_found> {
+ template <class VertexListGraph, class P, class T, class R>
+ static void apply
+ (VertexListGraph& g,
+ typename graph_traits<VertexListGraph>::vertex_descriptor s,
+ const bgl_named_params<P, T, R>& params,
+ detail::error_property_not_found)
+ {
+ std::vector<default_color_type> color_vec(num_vertices(g));
+ null_visitor null_vis;
+
+ neighbor_bfs_helper
+ (g, s,
+ make_iterator_property_map
+ (color_vec.begin(),
+ choose_const_pmap(get_param(params, vertex_index),
+ g, vertex_index), color_vec[0]),
+ choose_param(get_param(params, graph_visitor),
+ make_neighbor_bfs_visitor(null_vis)),
+ params);
+ }
+ };
+
+ } // namespace detail
+
+
+ // Named Parameter Variant
+ template <class VertexListGraph, class P, class T, class R>
+ void neighbor_breadth_first_search
+ (const VertexListGraph& g,
+ typename graph_traits<VertexListGraph>::vertex_descriptor s,
+ const bgl_named_params<P, T, R>& params)
+ {
+ // The graph is passed by *const* reference so that graph adaptors
+ // (temporaries) can be passed into this function. However, the
+ // graph is not really const since we may write to property maps
+ // of the graph.
+ VertexListGraph& ng = const_cast<VertexListGraph&>(g);
+ typedef typename property_value< bgl_named_params<P,T,R>,
+ vertex_color_t>::type C;
+ detail::neighbor_bfs_dispatch<C>::apply(ng, s, params,
+ get_param(params, vertex_color));
+ }
+
+
+ // This version does not initialize colors, user has to.
+
+ template <class IncidenceGraph, class P, class T, class R>
+ void neighbor_breadth_first_visit
+ (IncidenceGraph& g,
+ typename graph_traits<IncidenceGraph>::vertex_descriptor s,
+ const bgl_named_params<P, T, R>& params)
+ {
+ typedef graph_traits<IncidenceGraph> Traits;
+ // Buffer default
+ typedef boost::queue<typename Traits::vertex_descriptor> queue_t;
+ queue_t Q;
+ detail::wrap_ref<queue_t> Qref(Q);
+
+ detail::neighbor_bfs_impl
+ (g, s,
+ choose_param(get_param(params, buffer_param_t()), Qref).ref,
+ choose_param(get_param(params, graph_visitor),
+ make_neighbor_bfs_visitor(null_visitor())),
+ choose_pmap(get_param(params, vertex_color), g, vertex_color)
+ );
+ }
+
+} // namespace boost
+
+#endif // BOOST_GRAPH_NEIGHBOR_BREADTH_FIRST_SEARCH_HPP
+
diff --git a/boost/boost/graph/page_rank.hpp b/boost/boost/graph/page_rank.hpp
new file mode 100644
index 00000000000..8a4e14143b0
--- /dev/null
+++ b/boost/boost/graph/page_rank.hpp
@@ -0,0 +1,153 @@
+// Copyright 2004-5 The Trustees of Indiana University.
+// Copyright 2002 Brad King and Douglas Gregor
+
+// 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)
+
+// Authors: Douglas Gregor
+// Andrew Lumsdaine
+
+#ifndef BOOST_GRAPH_PAGE_RANK_HPP
+#define BOOST_GRAPH_PAGE_RANK_HPP
+
+#include <boost/property_map.hpp>
+#include <boost/graph/graph_traits.hpp>
+#include <boost/graph/properties.hpp>
+#include <boost/graph/iteration_macros.hpp>
+#include <vector>
+
+namespace boost { namespace graph {
+
+struct n_iterations
+{
+ explicit n_iterations(std::size_t n) : n(n) { }
+
+ template<typename RankMap, typename Graph>
+ bool
+ operator()(const RankMap&, const Graph&)
+ {
+ return n-- == 0;
+ }
+
+ private:
+ std::size_t n;
+};
+
+namespace detail {
+ template<typename Graph, typename RankMap, typename RankMap2>
+ void page_rank_step(const Graph& g, RankMap from_rank, RankMap2 to_rank,
+ typename property_traits<RankMap>::value_type damping,
+ incidence_graph_tag)
+ {
+ typedef typename property_traits<RankMap>::value_type rank_type;
+
+ // Set new rank maps
+ BGL_FORALL_VERTICES_T(v, g, Graph) put(to_rank, v, rank_type(1 - damping));
+
+ BGL_FORALL_VERTICES_T(u, g, Graph) {
+ rank_type u_rank_out = damping * get(from_rank, u) / out_degree(u, g);
+ BGL_FORALL_ADJ_T(u, v, g, Graph)
+ put(to_rank, v, get(to_rank, v) + u_rank_out);
+ }
+ }
+
+ template<typename Graph, typename RankMap, typename RankMap2>
+ void page_rank_step(const Graph& g, RankMap from_rank, RankMap2 to_rank,
+ typename property_traits<RankMap>::value_type damping,
+ bidirectional_graph_tag)
+ {
+ typedef typename property_traits<RankMap>::value_type damping_type;
+ BGL_FORALL_VERTICES_T(v, g, Graph) {
+ typename property_traits<RankMap>::value_type rank(0);
+ BGL_FORALL_INEDGES_T(v, e, g, Graph)
+ rank += get(from_rank, source(e, g)) / out_degree(source(e, g), g);
+ put(to_rank, v, (damping_type(1) - damping) + damping * rank);
+ }
+ }
+} // end namespace detail
+
+template<typename Graph, typename RankMap, typename Done, typename RankMap2>
+void
+page_rank(const Graph& g, RankMap rank_map, Done done,
+ typename property_traits<RankMap>::value_type damping,
+ typename graph_traits<Graph>::vertices_size_type n,
+ RankMap2 rank_map2)
+{
+ typedef typename property_traits<RankMap>::value_type rank_type;
+
+ rank_type initial_rank = rank_type(rank_type(1) / n);
+ BGL_FORALL_VERTICES_T(v, g, Graph) put(rank_map, v, initial_rank);
+
+ bool to_map_2 = true;
+ while ((to_map_2 && !done(rank_map, g)) ||
+ (!to_map_2 && !done(rank_map2, g))) {
+ typedef typename graph_traits<Graph>::traversal_category category;
+
+ if (to_map_2) {
+ detail::page_rank_step(g, rank_map, rank_map2, damping, category());
+ } else {
+ detail::page_rank_step(g, rank_map2, rank_map, damping, category());
+ }
+ to_map_2 = !to_map_2;
+ }
+
+ if (!to_map_2) {
+ BGL_FORALL_VERTICES_T(v, g, Graph) put(rank_map, v, get(rank_map2, v));
+ }
+}
+
+template<typename Graph, typename RankMap, typename Done>
+void
+page_rank(const Graph& g, RankMap rank_map, Done done,
+ typename property_traits<RankMap>::value_type damping,
+ typename graph_traits<Graph>::vertices_size_type n)
+{
+ typedef typename property_traits<RankMap>::value_type rank_type;
+
+ std::vector<rank_type> ranks2(num_vertices(g));
+ page_rank(g, rank_map, done, damping, n,
+ make_iterator_property_map(ranks2.begin(), get(vertex_index, g)));
+}
+
+template<typename Graph, typename RankMap, typename Done>
+inline void
+page_rank(const Graph& g, RankMap rank_map, Done done,
+ typename property_traits<RankMap>::value_type damping = 0.85)
+{
+ page_rank(g, rank_map, done, damping, num_vertices(g));
+}
+
+template<typename Graph, typename RankMap>
+inline void
+page_rank(const Graph& g, RankMap rank_map)
+{
+ page_rank(g, rank_map, n_iterations(20));
+}
+
+// TBD: this could be _much_ more efficient, using a queue to store
+// the vertices that should be reprocessed and keeping track of which
+// vertices are in the queue with a property map. Baah, this only
+// applies when we have a bidirectional graph.
+template<typename MutableGraph>
+void
+remove_dangling_links(MutableGraph& g)
+{
+ typename graph_traits<MutableGraph>::vertices_size_type old_n;
+ do {
+ old_n = num_vertices(g);
+
+ typename graph_traits<MutableGraph>::vertex_iterator vi, vi_end;
+ for (tie(vi, vi_end) = vertices(g); vi != vi_end; /* in loop */) {
+ typename graph_traits<MutableGraph>::vertex_descriptor v = *vi++;
+ if (out_degree(v, g) == 0) {
+ clear_vertex(v, g);
+ remove_vertex(v, g);
+ }
+ }
+ } while (num_vertices(g) < old_n);
+}
+
+} } // end namespace boost::graph
+
+#endif // BOOST_GRAPH_PAGE_RANK_HPP
diff --git a/boost/boost/graph/plod_generator.hpp b/boost/boost/graph/plod_generator.hpp
new file mode 100644
index 00000000000..a7800d045c3
--- /dev/null
+++ b/boost/boost/graph/plod_generator.hpp
@@ -0,0 +1,161 @@
+// Copyright 2004 The Trustees of Indiana University.
+
+// 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)
+
+// Authors: Douglas Gregor
+// Andrew Lumsdaine
+#ifndef BOOST_GRAPH_PLOD_GENERATOR_HPP
+#define BOOST_GRAPH_PLOD_GENERATOR_HPP
+
+#include <iterator>
+#include <utility>
+#include <boost/random/uniform_int.hpp>
+#include <boost/shared_ptr.hpp>
+#include <boost/graph/graph_traits.hpp>
+#include <vector>
+#include <map>
+#include <cmath>
+
+namespace boost {
+
+ template<typename RandomGenerator, typename Graph>
+ class plod_iterator
+ {
+ typedef std::vector<std::pair<std::size_t, std::size_t> > out_degrees_t;
+ typedef typename graph_traits<Graph>::directed_category directed_category;
+
+ public:
+ typedef std::input_iterator_tag iterator_category;
+ typedef std::pair<std::size_t, std::size_t> value_type;
+ typedef const value_type& reference;
+ typedef const value_type* pointer;
+ typedef void difference_type;
+
+ plod_iterator()
+ : gen(0), out_degrees(), degrees_left(0), allow_self_loops(false) { }
+
+ plod_iterator(RandomGenerator& gen, std::size_t n,
+ double alpha, double beta, bool allow_self_loops = false)
+ : gen(&gen), n(n), out_degrees(new out_degrees_t),
+ degrees_left(0), allow_self_loops(allow_self_loops)
+ {
+ using std::pow;
+
+ uniform_int<std::size_t> x(0, n-1);
+ for (std::size_t i = 0; i != n; ++i) {
+ std::size_t xv = x(gen);
+ std::size_t degree = (xv == 0? 0 : std::size_t(beta * pow(xv, -alpha)));
+ if (degree != 0) {
+ out_degrees->push_back(std::make_pair(i, degree));
+ }
+ degrees_left += degree;
+ }
+
+ next(directed_category());
+ }
+
+ reference operator*() const { return current; }
+ pointer operator->() const { return &current; }
+
+ plod_iterator& operator++()
+ {
+ next(directed_category());
+ return *this;
+ }
+
+ plod_iterator operator++(int)
+ {
+ plod_iterator temp(*this);
+ ++(*this);
+ return temp;
+ }
+
+ bool operator==(const plod_iterator& other) const
+ {
+ return degrees_left == other.degrees_left;
+ }
+
+ bool operator!=(const plod_iterator& other) const
+ { return !(*this == other); }
+
+ private:
+ void next(directed_tag)
+ {
+ uniform_int<std::size_t> x(0, out_degrees->size()-1);
+ std::size_t source;
+ do {
+ source = x(*gen);
+ } while ((*out_degrees)[source].second == 0);
+ current.first = (*out_degrees)[source].first;
+ do {
+ current.second = x(*gen);
+ } while (current.first == current.second && !allow_self_loops);
+ --degrees_left;
+ if (--(*out_degrees)[source].second == 0) {
+ (*out_degrees)[source] = out_degrees->back();
+ out_degrees->pop_back();
+ }
+ }
+
+ void next(undirected_tag)
+ {
+ std::size_t source, target;
+ while (true) {
+ /* We may get to the point where we can't actually find any
+ new edges, so we just add some random edge and set the
+ degrees left = 0 to signal termination. */
+ if (out_degrees->size() < 2) {
+ uniform_int<std::size_t> x(0, n);
+ current.first = x(*gen);
+ do {
+ current.second = x(*gen);
+ } while (current.first == current.second && !allow_self_loops);
+ degrees_left = 0;
+ out_degrees->clear();
+ return;
+ }
+
+ uniform_int<std::size_t> x(0, out_degrees->size()-1);
+
+ // Select source vertex
+ source = x(*gen);
+ if ((*out_degrees)[source].second == 0) {
+ (*out_degrees)[source] = out_degrees->back();
+ out_degrees->pop_back();
+ continue;
+ }
+
+ // Select target vertex
+ target = x(*gen);
+ if ((*out_degrees)[target].second == 0) {
+ (*out_degrees)[target] = out_degrees->back();
+ out_degrees->pop_back();
+ continue;
+ } else if (source != target
+ || (allow_self_loops && (*out_degrees)[source].second > 2)) {
+ break;
+ }
+ }
+
+ // Update degree counts
+ --(*out_degrees)[source].second;
+ --degrees_left;
+ --(*out_degrees)[target].second;
+ --degrees_left;
+ current.first = (*out_degrees)[source].first;
+ current.second = (*out_degrees)[target].first;
+ }
+
+ RandomGenerator* gen;
+ std::size_t n;
+ shared_ptr<out_degrees_t> out_degrees;
+ std::size_t degrees_left;
+ bool allow_self_loops;
+ value_type current;
+ };
+
+} // end namespace boost
+
+#endif // BOOST_GRAPH_PLOD_GENERATOR_HPP
diff --git a/boost/boost/graph/prim_minimum_spanning_tree.hpp b/boost/boost/graph/prim_minimum_spanning_tree.hpp
new file mode 100644
index 00000000000..79913b1a5cc
--- /dev/null
+++ b/boost/boost/graph/prim_minimum_spanning_tree.hpp
@@ -0,0 +1,91 @@
+//=======================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// 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_GRAPH_MST_PRIM_HPP
+#define BOOST_GRAPH_MST_PRIM_HPP
+
+#include <functional>
+#include <boost/graph/graph_traits.hpp>
+#include <boost/graph/dijkstra_shortest_paths.hpp>
+
+namespace boost {
+
+ namespace detail {
+ // this should be somewhere else in boost...
+ template <class U, class V> struct _project2nd {
+ V operator()(U, V v) const { return v; }
+ };
+ }
+
+ namespace detail {
+
+ // This is Prim's algorithm to calculate the Minimum Spanning Tree
+ // for an undirected graph with weighted edges.
+
+ template <class Graph, class P, class T, class R, class Weight>
+ inline void
+ prim_mst_impl(const Graph& G,
+ typename graph_traits<Graph>::vertex_descriptor s,
+ const bgl_named_params<P,T,R>& params,
+ Weight)
+ {
+ typedef typename property_traits<Weight>::value_type W;
+ std::less<W> compare;
+ detail::_project2nd<W,W> combine;
+ dijkstra_shortest_paths(G, s, params.distance_compare(compare).
+ distance_combine(combine));
+ }
+ } // namespace detail
+
+ template <class VertexListGraph, class DijkstraVisitor,
+ class PredecessorMap, class DistanceMap,
+ class WeightMap, class IndexMap>
+ inline void
+ prim_minimum_spanning_tree
+ (const VertexListGraph& g,
+ typename graph_traits<VertexListGraph>::vertex_descriptor s,
+ PredecessorMap predecessor, DistanceMap distance, WeightMap weight,
+ IndexMap index_map,
+ DijkstraVisitor vis)
+ {
+ typedef typename property_traits<WeightMap>::value_type W;
+ std::less<W> compare;
+ detail::_project2nd<W,W> combine;
+ dijkstra_shortest_paths(g, s, predecessor, distance, weight, index_map,
+ compare, combine, (std::numeric_limits<W>::max)(), 0,
+ vis);
+ }
+
+ template <class VertexListGraph, class PredecessorMap,
+ class P, class T, class R>
+ inline void prim_minimum_spanning_tree
+ (const VertexListGraph& g,
+ PredecessorMap p_map,
+ const bgl_named_params<P,T,R>& params)
+ {
+ detail::prim_mst_impl
+ (g,
+ choose_param(get_param(params, root_vertex_t()), *vertices(g).first),
+ params.predecessor_map(p_map),
+ choose_const_pmap(get_param(params, edge_weight), g, edge_weight));
+ }
+
+ template <class VertexListGraph, class PredecessorMap>
+ inline void prim_minimum_spanning_tree
+ (const VertexListGraph& g, PredecessorMap p_map)
+ {
+ detail::prim_mst_impl
+ (g, *vertices(g).first, predecessor_map(p_map).
+ weight_map(get(edge_weight, g)),
+ get(edge_weight, g));
+ }
+
+} // namespace boost
+
+#endif // BOOST_GRAPH_MST_PRIM_HPP
diff --git a/boost/boost/graph/profile.hpp b/boost/boost/graph/profile.hpp
new file mode 100644
index 00000000000..1ba2d2498db
--- /dev/null
+++ b/boost/boost/graph/profile.hpp
@@ -0,0 +1,43 @@
+//
+//=======================================================================
+// Copyright 2002 Marc Wintermantel (wintermantel@even-ag.ch)
+// ETH Zurich, Center of Structure Technologies (www.imes.ethz.ch/st)
+//
+// 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_GRAPH_PROFILE_HPP
+#define BOOST_GRAPH_PROFILE_HPP
+
+#include <boost/graph/graph_traits.hpp>
+#include <boost/detail/numeric_traits.hpp>
+#include <boost/graph/bandwidth.hpp>
+
+namespace boost {
+
+ template <typename Graph, typename VertexIndexMap>
+ typename graph_traits<Graph>::vertices_size_type
+ profile(const Graph& g, VertexIndexMap index)
+ {
+ typename graph_traits<Graph>::vertices_size_type b = 0;
+ typename graph_traits<Graph>::vertex_iterator i, end;
+ for (tie(i, end) = vertices(g); i != end; ++i){
+ b += ith_bandwidth(*i, g, index) + 1;
+ }
+
+ return b;
+ }
+
+ template <typename Graph>
+ typename graph_traits<Graph>::vertices_size_type
+ profile(const Graph& g)
+ {
+ return profile(g, get(vertex_index, g));
+ }
+
+
+} // namespace boost
+
+#endif // BOOST_GRAPH_PROFILE_HPP
diff --git a/boost/boost/graph/properties.hpp b/boost/boost/graph/properties.hpp
new file mode 100644
index 00000000000..5f10d04c873
--- /dev/null
+++ b/boost/boost/graph/properties.hpp
@@ -0,0 +1,375 @@
+//=======================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// 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_GRAPH_PROPERTIES_HPP
+#define BOOST_GRAPH_PROPERTIES_HPP
+
+#include <boost/config.hpp>
+#include <cassert>
+#include <boost/pending/property.hpp>
+#include <boost/property_map.hpp>
+#include <boost/graph/graph_traits.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+namespace boost {
+
+ enum default_color_type { white_color, gray_color, green_color, red_color, black_color };
+
+ template <class ColorValue>
+ struct color_traits {
+ static default_color_type white() { return white_color; }
+ static default_color_type gray() { return gray_color; }
+ static default_color_type green() { return green_color; }
+ static default_color_type red() { return red_color; }
+ static default_color_type black() { return black_color; }
+ };
+
+ // These functions are now obsolete, replaced by color_traits.
+ inline default_color_type white(default_color_type) { return white_color; }
+ inline default_color_type gray(default_color_type) { return gray_color; }
+ inline default_color_type green(default_color_type) { return green_color; }
+ inline default_color_type red(default_color_type) { return red_color; }
+ inline default_color_type black(default_color_type) { return black_color; }
+
+#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ template <>
+ struct property_traits<default_color_type*> {
+ typedef default_color_type value_type;
+ typedef std::ptrdiff_t key_type;
+ typedef default_color_type& reference;
+ typedef lvalue_property_map_tag category;
+ };
+ // get/put already defined for T*
+#endif
+
+ struct graph_property_tag { };
+ struct vertex_property_tag { };
+ struct edge_property_tag { };
+
+#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ // See examples/edge_property.cpp for how to use this.
+#define BOOST_INSTALL_PROPERTY(KIND, NAME) \
+ template <> struct property_kind<KIND##_##NAME##_t> { \
+ typedef KIND##_property_tag type; \
+ }
+#else
+#define BOOST_INSTALL_PROPERTY(KIND, NAME) \
+ template <> struct property_kind<KIND##_##NAME##_t> { \
+ typedef KIND##_property_tag type; \
+ }
+#endif
+
+#define BOOST_DEF_PROPERTY(KIND, NAME) \
+ enum KIND##_##NAME##_t { KIND##_##NAME }; \
+ BOOST_INSTALL_PROPERTY(KIND, NAME)
+
+ BOOST_DEF_PROPERTY(vertex, all);
+ BOOST_DEF_PROPERTY(edge, all);
+ BOOST_DEF_PROPERTY(graph, all);
+ BOOST_DEF_PROPERTY(vertex, index);
+ BOOST_DEF_PROPERTY(vertex, index1);
+ BOOST_DEF_PROPERTY(vertex, index2);
+ BOOST_DEF_PROPERTY(vertex, root);
+ BOOST_DEF_PROPERTY(edge, index);
+ BOOST_DEF_PROPERTY(edge, name);
+ BOOST_DEF_PROPERTY(edge, weight);
+ BOOST_DEF_PROPERTY(edge, weight2);
+ BOOST_DEF_PROPERTY(edge, color);
+ BOOST_DEF_PROPERTY(vertex, name);
+ BOOST_DEF_PROPERTY(graph, name);
+ BOOST_DEF_PROPERTY(vertex, distance);
+ BOOST_DEF_PROPERTY(vertex, color);
+ BOOST_DEF_PROPERTY(vertex, degree);
+ BOOST_DEF_PROPERTY(vertex, in_degree);
+ BOOST_DEF_PROPERTY(vertex, out_degree);
+ BOOST_DEF_PROPERTY(vertex, current_degree);
+ BOOST_DEF_PROPERTY(vertex, priority);
+ BOOST_DEF_PROPERTY(vertex, discover_time);
+ BOOST_DEF_PROPERTY(vertex, finish_time);
+ BOOST_DEF_PROPERTY(vertex, predecessor);
+ BOOST_DEF_PROPERTY(vertex, rank);
+ BOOST_DEF_PROPERTY(vertex, centrality);
+ BOOST_DEF_PROPERTY(vertex, lowpoint);
+ BOOST_DEF_PROPERTY(edge, reverse);
+ BOOST_DEF_PROPERTY(edge, capacity);
+ BOOST_DEF_PROPERTY(edge, residual_capacity);
+ BOOST_DEF_PROPERTY(edge, centrality);
+ BOOST_DEF_PROPERTY(graph, visitor);
+
+ // These tags are used for property bundles
+ BOOST_DEF_PROPERTY(vertex, bundle);
+ BOOST_DEF_PROPERTY(edge, bundle);
+
+#undef BOOST_DEF_PROPERTY
+
+ namespace detail {
+
+ struct dummy_edge_property_selector {
+ template <class Graph, class Property, class Tag>
+ struct bind_ {
+ typedef identity_property_map type;
+ typedef identity_property_map const_type;
+ };
+ };
+ struct dummy_vertex_property_selector {
+ template <class Graph, class Property, class Tag>
+ struct bind_ {
+ typedef identity_property_map type;
+ typedef identity_property_map const_type;
+ };
+ };
+
+ } // namespace detail
+
+ // Graph classes can either partially specialize property_map
+ // or they can specialize these two selector classes.
+ template <class GraphTag>
+ struct edge_property_selector {
+ typedef detail::dummy_edge_property_selector type;
+ };
+
+ template <class GraphTag>
+ struct vertex_property_selector {
+ typedef detail::dummy_vertex_property_selector type;
+ };
+
+ namespace detail {
+
+ template <class Graph, class PropertyTag>
+ struct edge_property_map {
+ typedef typename Graph::edge_property_type Property;
+ typedef typename Graph::graph_tag graph_tag;
+ typedef typename edge_property_selector<graph_tag>::type Selector;
+ typedef typename Selector::template bind_<Graph,Property,PropertyTag>
+ Bind;
+ typedef typename Bind::type type;
+ typedef typename Bind::const_type const_type;
+ };
+ template <class Graph, class PropertyTag>
+ class vertex_property_map {
+ typedef typename Graph::vertex_property_type Property;
+ typedef typename Graph::graph_tag graph_tag;
+ typedef typename vertex_property_selector<graph_tag>::type Selector;
+ typedef typename Selector::template bind_<Graph,Property,PropertyTag>
+ Bind;
+ public:
+ typedef typename Bind::type type;
+ typedef typename Bind::const_type const_type;
+ };
+
+ // This selects the kind of property map, whether is maps from
+ // edges or from vertices.
+ //
+ // It is overly complicated because it's a workaround for
+ // partial specialization.
+ struct choose_vertex_property_map {
+ template <class Graph, class Property>
+ struct bind_ {
+ typedef vertex_property_map<Graph, Property> type;
+ };
+ };
+ struct choose_edge_property_map {
+ template <class Graph, class Property>
+ struct bind_ {
+ typedef edge_property_map<Graph, Property> type;
+ };
+ };
+ template <class Kind>
+ struct property_map_kind_selector {
+ // VC++ gets confused if this isn't defined, even though
+ // this never gets used.
+ typedef choose_vertex_property_map type;
+ };
+ template <> struct property_map_kind_selector<vertex_property_tag> {
+ typedef choose_vertex_property_map type;
+ };
+ template <> struct property_map_kind_selector<edge_property_tag> {
+ typedef choose_edge_property_map type;
+ };
+ } // namespace detail
+
+ template <class Graph, class Property>
+ struct property_map {
+ private:
+ typedef typename property_kind<Property>::type Kind;
+ typedef typename detail::property_map_kind_selector<Kind>::type Selector;
+ typedef typename Selector::template bind_<Graph, Property> Bind;
+ typedef typename Bind::type Map;
+ public:
+ typedef typename Map::type type;
+ typedef typename Map::const_type const_type;
+ };
+
+ // shortcut for accessing the value type of the property map
+ template <class Graph, class Property>
+ class property_map_value {
+ typedef typename property_map<Graph, Property>::const_type PMap;
+ public:
+ typedef typename property_traits<PMap>::value_type type;
+ };
+
+ template <class Graph, class Property>
+ class graph_property {
+ public:
+ typedef typename property_value<typename Graph::graph_property_type,
+ Property>::type type;
+ };
+
+ template <class Graph>
+ class vertex_property {
+ public:
+ typedef typename Graph::vertex_property_type type;
+ };
+ template <class Graph>
+ class edge_property {
+ public:
+ typedef typename Graph::edge_property_type type;
+ };
+
+ template <typename Graph>
+ class degree_property_map
+ : public put_get_helper<typename graph_traits<Graph>::degree_size_type,
+ degree_property_map<Graph> >
+ {
+ public:
+ typedef typename graph_traits<Graph>::vertex_descriptor key_type;
+ typedef typename graph_traits<Graph>::degree_size_type value_type;
+ typedef value_type reference;
+ typedef readable_property_map_tag category;
+ degree_property_map(const Graph& g) : m_g(g) { }
+ value_type operator[](const key_type& v) const {
+ return degree(v, m_g);
+ }
+ private:
+ const Graph& m_g;
+ };
+ template <typename Graph>
+ inline degree_property_map<Graph>
+ make_degree_map(const Graph& g) {
+ return degree_property_map<Graph>(g);
+ }
+
+ //========================================================================
+ // Iterator Property Map Generating Functions contributed by
+ // Kevin Vanhorn. (see also the property map generating functions
+ // in boost/property_map.hpp)
+
+#if !defined(BOOST_NO_STD_ITERATOR_TRAITS)
+ // A helper function for creating a vertex property map out of a
+ // random access iterator and the internal vertex index map from a
+ // graph.
+ template <class PropertyGraph, class RandomAccessIterator>
+ inline
+ iterator_property_map<
+ RandomAccessIterator,
+ typename property_map<PropertyGraph, vertex_index_t>::type,
+ typename std::iterator_traits<RandomAccessIterator>::value_type,
+ typename std::iterator_traits<RandomAccessIterator>::reference
+ >
+ make_iterator_vertex_map(RandomAccessIterator iter, const PropertyGraph& g)
+ {
+ return make_iterator_property_map(iter, get(vertex_index, g));
+ }
+
+ // Use this next function when vertex_descriptor is known to be an
+ // integer type, with values ranging from 0 to num_vertices(g).
+ //
+ template <class RandomAccessIterator>
+ inline
+ iterator_property_map<
+ RandomAccessIterator,
+ identity_property_map,
+ typename std::iterator_traits<RandomAccessIterator>::value_type,
+ typename std::iterator_traits<RandomAccessIterator>::reference
+ >
+ make_iterator_vertex_map(RandomAccessIterator iter)
+ {
+ return make_iterator_property_map(iter, identity_property_map());
+ }
+#endif
+
+ template <class PropertyGraph, class RandomAccessContainer>
+ inline
+ iterator_property_map<
+ typename RandomAccessContainer::iterator,
+ typename property_map<PropertyGraph, vertex_index_t>::type,
+ typename RandomAccessContainer::value_type,
+ typename RandomAccessContainer::reference
+ >
+ make_container_vertex_map(RandomAccessContainer& c, const PropertyGraph& g)
+ {
+ assert(c.size() >= num_vertices(g));
+ return make_iterator_vertex_map(c.begin(), g);
+ }
+
+ template <class RandomAccessContainer> inline
+ iterator_property_map<
+ typename RandomAccessContainer::iterator,
+ identity_property_map,
+ typename RandomAccessContainer::value_type,
+ typename RandomAccessContainer::reference
+ >
+ make_container_vertex_map(RandomAccessContainer& c)
+ {
+ return make_iterator_vertex_map(c.begin());
+ }
+
+#if defined (BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+# define BOOST_GRAPH_NO_BUNDLED_PROPERTIES
+#endif
+
+#ifndef BOOST_GRAPH_NO_BUNDLED_PROPERTIES
+ template<typename Graph, typename Descriptor, typename Bundle, typename T>
+ struct bundle_property_map
+ : put_get_helper<T&, bundle_property_map<Graph, Descriptor, Bundle, T> >
+ {
+ typedef Descriptor key_type;
+ typedef T value_type;
+ typedef T& reference;
+ typedef lvalue_property_map_tag category;
+
+ bundle_property_map() { }
+ bundle_property_map(Graph* g_, T Bundle::* pm_) : g(g_), pm(pm_) {}
+
+ reference operator[](key_type k) const { return (*g)[k].*pm; }
+ private:
+ Graph* g;
+ T Bundle::* pm;
+ };
+
+ namespace detail {
+ template<typename VertexBundle, typename EdgeBundle, typename Bundle>
+ struct is_vertex_bundle : is_convertible<VertexBundle*, Bundle*> {};
+ }
+
+ template <typename Graph, typename T, typename Bundle>
+ struct property_map<Graph, T Bundle::*>
+ {
+ private:
+ typedef graph_traits<Graph> traits;
+ typedef typename Graph::vertex_bundled vertex_bundled;
+ typedef typename Graph::edge_bundled edge_bundled;
+ typedef typename ct_if<(detail::is_vertex_bundle<vertex_bundled, edge_bundled, Bundle>::value),
+ typename traits::vertex_descriptor,
+ typename traits::edge_descriptor>::type
+ descriptor;
+ typedef typename ct_if<(detail::is_vertex_bundle<vertex_bundled, edge_bundled, Bundle>::value),
+ vertex_bundled,
+ edge_bundled>::type
+ actual_bundle;
+
+ public:
+ typedef bundle_property_map<Graph, descriptor, actual_bundle, T> type;
+ typedef bundle_property_map<const Graph, descriptor, actual_bundle, const T>
+ const_type;
+ };
+#endif
+
+} // namespace boost
+
+#endif /* BOOST_GRAPH_PROPERTIES_HPPA */
diff --git a/boost/boost/graph/property_iter_range.hpp b/boost/boost/graph/property_iter_range.hpp
new file mode 100644
index 00000000000..1e93c384566
--- /dev/null
+++ b/boost/boost/graph/property_iter_range.hpp
@@ -0,0 +1,118 @@
+
+// (C) Copyright François Faure, iMAGIS-GRAVIR / UJF, 2001.
+//
+// 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)
+//
+// Revision History:
+// 03 May 2001 Jeremy Siek
+// Generalized the property map iterator and moved that
+// part to boost/property_map.hpp. Also modified to
+// differentiate between const/mutable graphs and
+// added a workaround to avoid partial specialization.
+
+// 02 May 2001 François Faure
+// Initial version.
+
+#ifndef BOOST_GRAPH_PROPERTY_ITER_RANGE_HPP
+#define BOOST_GRAPH_PROPERTY_ITER_RANGE_HPP
+
+#include <boost/property_map_iterator.hpp>
+#include <boost/graph/properties.hpp>
+#include <boost/pending/ct_if.hpp>
+#include <boost/type_traits/same_traits.hpp>
+
+namespace boost {
+
+//======================================================================
+// graph property iterator range
+
+ template <class Graph, class PropertyTag>
+ class graph_property_iter_range {
+ typedef typename property_map<Graph, PropertyTag>::type map_type;
+ typedef typename property_map<Graph, PropertyTag>::const_type
+ const_map_type;
+ typedef typename property_kind<PropertyTag>::type Kind;
+ typedef typename ct_if<is_same<Kind, vertex_property_tag>::value,
+ typename graph_traits<Graph>::vertex_iterator,
+ typename graph_traits<Graph>::edge_iterator>::type iter;
+ public:
+ typedef typename property_map_iterator_generator<map_type, iter>::type
+ iterator;
+ typedef typename property_map_iterator_generator<const_map_type, iter>
+ ::type const_iterator;
+ typedef std::pair<iterator, iterator> type;
+ typedef std::pair<const_iterator, const_iterator> const_type;
+ };
+
+ namespace detail {
+
+ template<class Graph,class Tag>
+ typename graph_property_iter_range<Graph,Tag>::type
+ get_property_iter_range_kind(Graph& graph, const Tag& tag,
+ const vertex_property_tag& )
+ {
+ typedef typename graph_property_iter_range<Graph,Tag>::iterator iter;
+ return std::make_pair(iter(vertices(graph).first, get(tag, graph)),
+ iter(vertices(graph).second, get(tag, graph)));
+ }
+
+ template<class Graph,class Tag>
+ typename graph_property_iter_range<Graph,Tag>::const_type
+ get_property_iter_range_kind(const Graph& graph, const Tag& tag,
+ const vertex_property_tag& )
+ {
+ typedef typename graph_property_iter_range<Graph,Tag>
+ ::const_iterator iter;
+ return std::make_pair(iter(vertices(graph).first, get(tag, graph)),
+ iter(vertices(graph).second, get(tag, graph)));
+ }
+
+
+ template<class Graph,class Tag>
+ typename graph_property_iter_range<Graph,Tag>::type
+ get_property_iter_range_kind(Graph& graph, const Tag& tag,
+ const edge_property_tag& )
+ {
+ typedef typename graph_property_iter_range<Graph,Tag>::iterator iter;
+ return std::make_pair(iter(edges(graph).first, get(tag, graph)),
+ iter(edges(graph).second, get(tag, graph)));
+ }
+
+ template<class Graph,class Tag>
+ typename graph_property_iter_range<Graph,Tag>::const_type
+ get_property_iter_range_kind(const Graph& graph, const Tag& tag,
+ const edge_property_tag& )
+ {
+ typedef typename graph_property_iter_range<Graph,Tag>
+ ::const_iterator iter;
+ return std::make_pair(iter(edges(graph).first, get(tag, graph)),
+ iter(edges(graph).second, get(tag, graph)));
+ }
+
+ } // namespace detail
+
+ //======================================================================
+ // get an iterator range of properties
+
+ template<class Graph, class Tag>
+ typename graph_property_iter_range<Graph, Tag>::type
+ get_property_iter_range(Graph& graph, const Tag& tag)
+ {
+ typedef typename property_kind<Tag>::type Kind;
+ return detail::get_property_iter_range_kind(graph, tag, Kind());
+ }
+
+ template<class Graph, class Tag>
+ typename graph_property_iter_range<Graph, Tag>::const_type
+ get_property_iter_range(const Graph& graph, const Tag& tag)
+ {
+ typedef typename property_kind<Tag>::type Kind;
+ return detail::get_property_iter_range_kind(graph, tag, Kind());
+ }
+
+} // namespace boost
+
+
+#endif // BOOST_GRAPH_PROPERTY_ITER_RANGE_HPP
diff --git a/boost/boost/graph/push_relabel_max_flow.hpp b/boost/boost/graph/push_relabel_max_flow.hpp
new file mode 100644
index 00000000000..987b8cfe4c6
--- /dev/null
+++ b/boost/boost/graph/push_relabel_max_flow.hpp
@@ -0,0 +1,727 @@
+//=======================================================================
+// Copyright 2000 University of Notre Dame.
+// Authors: Jeremy G. Siek, Andrew Lumsdaine, Lie-Quan Lee
+//
+// 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_PUSH_RELABEL_MAX_FLOW_HPP
+#define BOOST_PUSH_RELABEL_MAX_FLOW_HPP
+
+#include <boost/config.hpp>
+#include <cassert>
+#include <vector>
+#include <list>
+#include <iosfwd>
+#include <algorithm> // for std::min and std::max
+
+#include <boost/pending/queue.hpp>
+#include <boost/limits.hpp>
+#include <boost/graph/graph_concepts.hpp>
+#include <boost/graph/named_function_params.hpp>
+
+namespace boost {
+
+ namespace detail {
+
+ // This implementation is based on Goldberg's
+ // "On Implementing Push-Relabel Method for the Maximum Flow Problem"
+ // by B.V. Cherkassky and A.V. Goldberg, IPCO '95, pp. 157--171
+ // and on the h_prf.c and hi_pr.c code written by the above authors.
+
+ // This implements the highest-label version of the push-relabel method
+ // with the global relabeling and gap relabeling heuristics.
+
+ // The terms "rank", "distance", "height" are synonyms in
+ // Goldberg's implementation, paper and in the CLR. A "layer" is a
+ // group of vertices with the same distance. The vertices in each
+ // layer are categorized as active or inactive. An active vertex
+ // has positive excess flow and its distance is less than n (it is
+ // not blocked).
+
+ template <class Vertex>
+ struct preflow_layer {
+ std::list<Vertex> active_vertices;
+ std::list<Vertex> inactive_vertices;
+ };
+
+ template <class Graph,
+ class EdgeCapacityMap, // integer value type
+ class ResidualCapacityEdgeMap,
+ class ReverseEdgeMap,
+ class VertexIndexMap, // vertex_descriptor -> integer
+ class FlowValue>
+ class push_relabel
+ {
+ public:
+ typedef graph_traits<Graph> Traits;
+ typedef typename Traits::vertex_descriptor vertex_descriptor;
+ typedef typename Traits::edge_descriptor edge_descriptor;
+ typedef typename Traits::vertex_iterator vertex_iterator;
+ typedef typename Traits::out_edge_iterator out_edge_iterator;
+ typedef typename Traits::vertices_size_type vertices_size_type;
+ typedef typename Traits::edges_size_type edges_size_type;
+
+ typedef preflow_layer<vertex_descriptor> Layer;
+ typedef std::vector< Layer > LayerArray;
+ typedef typename LayerArray::iterator layer_iterator;
+ typedef typename LayerArray::size_type distance_size_type;
+
+ typedef color_traits<default_color_type> ColorTraits;
+
+ //=======================================================================
+ // Some helper predicates
+
+ inline bool is_admissible(vertex_descriptor u, vertex_descriptor v) {
+ return distance[u] == distance[v] + 1;
+ }
+ inline bool is_residual_edge(edge_descriptor a) {
+ return 0 < residual_capacity[a];
+ }
+ inline bool is_saturated(edge_descriptor a) {
+ return residual_capacity[a] == 0;
+ }
+
+ //=======================================================================
+ // Layer List Management Functions
+
+ typedef typename std::list<vertex_descriptor>::iterator list_iterator;
+
+ void add_to_active_list(vertex_descriptor u, Layer& layer) {
+ BOOST_USING_STD_MIN();
+ BOOST_USING_STD_MAX();
+ layer.active_vertices.push_front(u);
+ max_active = max BOOST_PREVENT_MACRO_SUBSTITUTION(distance[u], max_active);
+ min_active = min BOOST_PREVENT_MACRO_SUBSTITUTION(distance[u], min_active);
+ layer_list_ptr[u] = layer.active_vertices.begin();
+ }
+ void remove_from_active_list(vertex_descriptor u) {
+ layers[distance[u]].active_vertices.erase(layer_list_ptr[u]);
+ }
+
+ void add_to_inactive_list(vertex_descriptor u, Layer& layer) {
+ layer.inactive_vertices.push_front(u);
+ layer_list_ptr[u] = layer.inactive_vertices.begin();
+ }
+ void remove_from_inactive_list(vertex_descriptor u) {
+ layers[distance[u]].inactive_vertices.erase(layer_list_ptr[u]);
+ }
+
+ //=======================================================================
+ // initialization
+ push_relabel(Graph& g_,
+ EdgeCapacityMap cap,
+ ResidualCapacityEdgeMap res,
+ ReverseEdgeMap rev,
+ vertex_descriptor src_,
+ vertex_descriptor sink_,
+ VertexIndexMap idx)
+ : g(g_), n(num_vertices(g_)), capacity(cap), src(src_), sink(sink_),
+ index(idx),
+ excess_flow(num_vertices(g_)),
+ current(num_vertices(g_), out_edges(*vertices(g_).first, g_).second),
+ distance(num_vertices(g_)),
+ color(num_vertices(g_)),
+ reverse_edge(rev),
+ residual_capacity(res),
+ layers(num_vertices(g_)),
+ layer_list_ptr(num_vertices(g_),
+ layers.front().inactive_vertices.end()),
+ push_count(0), update_count(0), relabel_count(0),
+ gap_count(0), gap_node_count(0),
+ work_since_last_update(0)
+ {
+ vertex_iterator u_iter, u_end;
+ // Don't count the reverse edges
+ edges_size_type m = num_edges(g) / 2;
+ nm = alpha() * n + m;
+
+ // Initialize flow to zero which means initializing
+ // the residual capacity to equal the capacity.
+ out_edge_iterator ei, e_end;
+ for (tie(u_iter, u_end) = vertices(g); u_iter != u_end; ++u_iter)
+ for (tie(ei, e_end) = out_edges(*u_iter, g); ei != e_end; ++ei) {
+ residual_capacity[*ei] = capacity[*ei];
+ }
+
+ for (tie(u_iter, u_end) = vertices(g); u_iter != u_end; ++u_iter) {
+ vertex_descriptor u = *u_iter;
+ excess_flow[u] = 0;
+ current[u] = out_edges(u, g).first;
+ }
+
+ bool overflow_detected = false;
+ FlowValue test_excess = 0;
+
+ out_edge_iterator a_iter, a_end;
+ for (tie(a_iter, a_end) = out_edges(src, g); a_iter != a_end; ++a_iter)
+ if (target(*a_iter, g) != src)
+ test_excess += residual_capacity[*a_iter];
+ if (test_excess > (std::numeric_limits<FlowValue>::max)())
+ overflow_detected = true;
+
+ if (overflow_detected)
+ excess_flow[src] = (std::numeric_limits<FlowValue>::max)();
+ else {
+ excess_flow[src] = 0;
+ for (tie(a_iter, a_end) = out_edges(src, g);
+ a_iter != a_end; ++a_iter) {
+ edge_descriptor a = *a_iter;
+ if (target(a, g) != src) {
+ ++push_count;
+ FlowValue delta = residual_capacity[a];
+ residual_capacity[a] -= delta;
+ residual_capacity[reverse_edge[a]] += delta;
+ excess_flow[target(a, g)] += delta;
+ }
+ }
+ }
+ max_distance = num_vertices(g) - 1;
+ max_active = 0;
+ min_active = n;
+
+ for (tie(u_iter, u_end) = vertices(g); u_iter != u_end; ++u_iter) {
+ vertex_descriptor u = *u_iter;
+ if (u == sink) {
+ distance[u] = 0;
+ continue;
+ } else if (u == src && !overflow_detected)
+ distance[u] = n;
+ else
+ distance[u] = 1;
+
+ if (excess_flow[u] > 0)
+ add_to_active_list(u, layers[1]);
+ else if (distance[u] < n)
+ add_to_inactive_list(u, layers[1]);
+ }
+
+ } // push_relabel constructor
+
+ //=======================================================================
+ // This is a breadth-first search over the residual graph
+ // (well, actually the reverse of the residual graph).
+ // Would be cool to have a graph view adaptor for hiding certain
+ // edges, like the saturated (non-residual) edges in this case.
+ // Goldberg's implementation abused "distance" for the coloring.
+ void global_distance_update()
+ {
+ BOOST_USING_STD_MAX();
+ ++update_count;
+ vertex_iterator u_iter, u_end;
+ for (tie(u_iter,u_end) = vertices(g); u_iter != u_end; ++u_iter) {
+ color[*u_iter] = ColorTraits::white();
+ distance[*u_iter] = n;
+ }
+ color[sink] = ColorTraits::gray();
+ distance[sink] = 0;
+
+ for (distance_size_type l = 0; l <= max_distance; ++l) {
+ layers[l].active_vertices.clear();
+ layers[l].inactive_vertices.clear();
+ }
+
+ max_distance = max_active = 0;
+ min_active = n;
+
+ Q.push(sink);
+ while (! Q.empty()) {
+ vertex_descriptor u = Q.top();
+ Q.pop();
+ distance_size_type d_v = distance[u] + 1;
+
+ out_edge_iterator ai, a_end;
+ for (tie(ai, a_end) = out_edges(u, g); ai != a_end; ++ai) {
+ edge_descriptor a = *ai;
+ vertex_descriptor v = target(a, g);
+ if (color[v] == ColorTraits::white()
+ && is_residual_edge(reverse_edge[a])) {
+ distance[v] = d_v;
+ color[v] = ColorTraits::gray();
+ current[v] = out_edges(v, g).first;
+ max_distance = max BOOST_PREVENT_MACRO_SUBSTITUTION(d_v, max_distance);
+
+ if (excess_flow[v] > 0)
+ add_to_active_list(v, layers[d_v]);
+ else
+ add_to_inactive_list(v, layers[d_v]);
+
+ Q.push(v);
+ }
+ }
+ }
+ } // global_distance_update()
+
+ //=======================================================================
+ // This function is called "push" in Goldberg's h_prf implementation,
+ // but it is called "discharge" in the paper and in hi_pr.c.
+ void discharge(vertex_descriptor u)
+ {
+ assert(excess_flow[u] > 0);
+ while (1) {
+ out_edge_iterator ai, ai_end;
+ for (ai = current[u], ai_end = out_edges(u, g).second;
+ ai != ai_end; ++ai) {
+ edge_descriptor a = *ai;
+ if (is_residual_edge(a)) {
+ vertex_descriptor v = target(a, g);
+ if (is_admissible(u, v)) {
+ ++push_count;
+ if (v != sink && excess_flow[v] == 0) {
+ remove_from_inactive_list(v);
+ add_to_active_list(v, layers[distance[v]]);
+ }
+ push_flow(a);
+ if (excess_flow[u] == 0)
+ break;
+ }
+ }
+ } // for out_edges of i starting from current
+
+ Layer& layer = layers[distance[u]];
+ distance_size_type du = distance[u];
+
+ if (ai == ai_end) { // i must be relabeled
+ relabel_distance(u);
+ if (layer.active_vertices.empty()
+ && layer.inactive_vertices.empty())
+ gap(du);
+ if (distance[u] == n)
+ break;
+ } else { // i is no longer active
+ current[u] = ai;
+ add_to_inactive_list(u, layer);
+ break;
+ }
+ } // while (1)
+ } // discharge()
+
+ //=======================================================================
+ // This corresponds to the "push" update operation of the paper,
+ // not the "push" function in Goldberg's h_prf.c implementation.
+ // The idea is to push the excess flow from from vertex u to v.
+ void push_flow(edge_descriptor u_v)
+ {
+ vertex_descriptor
+ u = source(u_v, g),
+ v = target(u_v, g);
+
+ BOOST_USING_STD_MIN();
+ FlowValue flow_delta
+ = min BOOST_PREVENT_MACRO_SUBSTITUTION(excess_flow[u], residual_capacity[u_v]);
+
+ residual_capacity[u_v] -= flow_delta;
+ residual_capacity[reverse_edge[u_v]] += flow_delta;
+
+ excess_flow[u] -= flow_delta;
+ excess_flow[v] += flow_delta;
+ } // push_flow()
+
+ //=======================================================================
+ // The main purpose of this routine is to set distance[v]
+ // to the smallest value allowed by the valid labeling constraints,
+ // which are:
+ // distance[t] = 0
+ // distance[u] <= distance[v] + 1 for every residual edge (u,v)
+ //
+ distance_size_type relabel_distance(vertex_descriptor u)
+ {
+ BOOST_USING_STD_MAX();
+ ++relabel_count;
+ work_since_last_update += beta();
+
+ distance_size_type min_distance = num_vertices(g);
+ distance[u] = min_distance;
+
+ // Examine the residual out-edges of vertex i, choosing the
+ // edge whose target vertex has the minimal distance.
+ out_edge_iterator ai, a_end, min_edge_iter;
+ for (tie(ai, a_end) = out_edges(u, g); ai != a_end; ++ai) {
+ ++work_since_last_update;
+ edge_descriptor a = *ai;
+ vertex_descriptor v = target(a, g);
+ if (is_residual_edge(a) && distance[v] < min_distance) {
+ min_distance = distance[v];
+ min_edge_iter = ai;
+ }
+ }
+ ++min_distance;
+ if (min_distance < n) {
+ distance[u] = min_distance; // this is the main action
+ current[u] = min_edge_iter;
+ max_distance = max BOOST_PREVENT_MACRO_SUBSTITUTION(min_distance, max_distance);
+ }
+ return min_distance;
+ } // relabel_distance()
+
+ //=======================================================================
+ // cleanup beyond the gap
+ void gap(distance_size_type empty_distance)
+ {
+ ++gap_count;
+
+ distance_size_type r; // distance of layer before the current layer
+ r = empty_distance - 1;
+
+ // Set the distance for the vertices beyond the gap to "infinity".
+ for (layer_iterator l = layers.begin() + empty_distance + 1;
+ l < layers.begin() + max_distance; ++l) {
+ list_iterator i;
+ for (i = l->inactive_vertices.begin();
+ i != l->inactive_vertices.end(); ++i) {
+ distance[*i] = n;
+ ++gap_node_count;
+ }
+ l->inactive_vertices.clear();
+ }
+ max_distance = r;
+ max_active = r;
+ }
+
+ //=======================================================================
+ // This is the core part of the algorithm, "phase one".
+ FlowValue maximum_preflow()
+ {
+ work_since_last_update = 0;
+
+ while (max_active >= min_active) { // "main" loop
+
+ Layer& layer = layers[max_active];
+ list_iterator u_iter = layer.active_vertices.begin();
+
+ if (u_iter == layer.active_vertices.end())
+ --max_active;
+ else {
+ vertex_descriptor u = *u_iter;
+ remove_from_active_list(u);
+
+ discharge(u);
+
+ if (work_since_last_update * global_update_frequency() > nm) {
+ global_distance_update();
+ work_since_last_update = 0;
+ }
+ }
+ } // while (max_active >= min_active)
+
+ return excess_flow[sink];
+ } // maximum_preflow()
+
+ //=======================================================================
+ // remove excess flow, the "second phase"
+ // This does a DFS on the reverse flow graph of nodes with excess flow.
+ // If a cycle is found, cancel it.
+ // Return the nodes with excess flow in topological order.
+ //
+ // Unlike the prefl_to_flow() implementation, we use
+ // "color" instead of "distance" for the DFS labels
+ // "parent" instead of nl_prev for the DFS tree
+ // "topo_next" instead of nl_next for the topological ordering
+ void convert_preflow_to_flow()
+ {
+ vertex_iterator u_iter, u_end;
+ out_edge_iterator ai, a_end;
+
+ vertex_descriptor r, restart, u;
+
+ std::vector<vertex_descriptor> parent(n);
+ std::vector<vertex_descriptor> topo_next(n);
+
+ vertex_descriptor tos(parent[0]),
+ bos(parent[0]); // bogus initialization, just to avoid warning
+ bool bos_null = true;
+
+ // handle self-loops
+ for (tie(u_iter, u_end) = vertices(g); u_iter != u_end; ++u_iter)
+ for (tie(ai, a_end) = out_edges(*u_iter, g); ai != a_end; ++ai)
+ if (target(*ai, g) == *u_iter)
+ residual_capacity[*ai] = capacity[*ai];
+
+ // initialize
+ for (tie(u_iter, u_end) = vertices(g); u_iter != u_end; ++u_iter) {
+ u = *u_iter;
+ color[u] = ColorTraits::white();
+ parent[u] = u;
+ current[u] = out_edges(u, g).first;
+ }
+ // eliminate flow cycles and topologically order the vertices
+ for (tie(u_iter, u_end) = vertices(g); u_iter != u_end; ++u_iter) {
+ u = *u_iter;
+ if (color[u] == ColorTraits::white()
+ && excess_flow[u] > 0
+ && u != src && u != sink ) {
+ r = u;
+ color[r] = ColorTraits::gray();
+ while (1) {
+ for (; current[u] != out_edges(u, g).second; ++current[u]) {
+ edge_descriptor a = *current[u];
+ if (capacity[a] == 0 && is_residual_edge(a)) {
+ vertex_descriptor v = target(a, g);
+ if (color[v] == ColorTraits::white()) {
+ color[v] = ColorTraits::gray();
+ parent[v] = u;
+ u = v;
+ break;
+ } else if (color[v] == ColorTraits::gray()) {
+ // find minimum flow on the cycle
+ FlowValue delta = residual_capacity[a];
+ while (1) {
+ BOOST_USING_STD_MIN();
+ delta = min BOOST_PREVENT_MACRO_SUBSTITUTION(delta, residual_capacity[*current[v]]);
+ if (v == u)
+ break;
+ else
+ v = target(*current[v], g);
+ }
+ // remove delta flow units
+ v = u;
+ while (1) {
+ a = *current[v];
+ residual_capacity[a] -= delta;
+ residual_capacity[reverse_edge[a]] += delta;
+ v = target(a, g);
+ if (v == u)
+ break;
+ }
+
+ // back-out of DFS to the first saturated edge
+ restart = u;
+ for (v = target(*current[u], g); v != u; v = target(a, g)){
+ a = *current[v];
+ if (color[v] == ColorTraits::white()
+ || is_saturated(a)) {
+ color[target(*current[v], g)] = ColorTraits::white();
+ if (color[v] != ColorTraits::white())
+ restart = v;
+ }
+ }
+ if (restart != u) {
+ u = restart;
+ ++current[u];
+ break;
+ }
+ } // else if (color[v] == ColorTraits::gray())
+ } // if (capacity[a] == 0 ...
+ } // for out_edges(u, g) (though "u" changes during loop)
+
+ if (current[u] == out_edges(u, g).second) {
+ // scan of i is complete
+ color[u] = ColorTraits::black();
+ if (u != src) {
+ if (bos_null) {
+ bos = u;
+ bos_null = false;
+ tos = u;
+ } else {
+ topo_next[u] = tos;
+ tos = u;
+ }
+ }
+ if (u != r) {
+ u = parent[u];
+ ++current[u];
+ } else
+ break;
+ }
+ } // while (1)
+ } // if (color[u] == white && excess_flow[u] > 0 & ...)
+ } // for all vertices in g
+
+ // return excess flows
+ // note that the sink is not on the stack
+ if (! bos_null) {
+ for (u = tos; u != bos; u = topo_next[u]) {
+ ai = out_edges(u, g).first;
+ while (excess_flow[u] > 0 && ai != out_edges(u, g).second) {
+ if (capacity[*ai] == 0 && is_residual_edge(*ai))
+ push_flow(*ai);
+ ++ai;
+ }
+ }
+ // do the bottom
+ u = bos;
+ ai = out_edges(u, g).first;
+ while (excess_flow[u] > 0) {
+ if (capacity[*ai] == 0 && is_residual_edge(*ai))
+ push_flow(*ai);
+ ++ai;
+ }
+ }
+
+ } // convert_preflow_to_flow()
+
+ //=======================================================================
+ inline bool is_flow()
+ {
+ vertex_iterator u_iter, u_end;
+ out_edge_iterator ai, a_end;
+
+ // check edge flow values
+ for (tie(u_iter, u_end) = vertices(g); u_iter != u_end; ++u_iter) {
+ for (tie(ai, a_end) = out_edges(*u_iter, g); ai != a_end; ++ai) {
+ edge_descriptor a = *ai;
+ if (capacity[a] > 0)
+ if ((residual_capacity[a] + residual_capacity[reverse_edge[a]]
+ != capacity[a] + capacity[reverse_edge[a]])
+ || (residual_capacity[a] < 0)
+ || (residual_capacity[reverse_edge[a]] < 0))
+ return false;
+ }
+ }
+
+ // check conservation
+ FlowValue sum;
+ for (tie(u_iter, u_end) = vertices(g); u_iter != u_end; ++u_iter) {
+ vertex_descriptor u = *u_iter;
+ if (u != src && u != sink) {
+ if (excess_flow[u] != 0)
+ return false;
+ sum = 0;
+ for (tie(ai, a_end) = out_edges(u, g); ai != a_end; ++ai)
+ if (capacity[*ai] > 0)
+ sum -= capacity[*ai] - residual_capacity[*ai];
+ else
+ sum += residual_capacity[*ai];
+
+ if (excess_flow[u] != sum)
+ return false;
+ }
+ }
+
+ return true;
+ } // is_flow()
+
+ bool is_optimal() {
+ // check if mincut is saturated...
+ global_distance_update();
+ return distance[src] >= n;
+ }
+
+ void print_statistics(std::ostream& os) const {
+ os << "pushes: " << push_count << std::endl
+ << "relabels: " << relabel_count << std::endl
+ << "updates: " << update_count << std::endl
+ << "gaps: " << gap_count << std::endl
+ << "gap nodes: " << gap_node_count << std::endl
+ << std::endl;
+ }
+
+ void print_flow_values(std::ostream& os) const {
+ os << "flow values" << std::endl;
+ vertex_iterator u_iter, u_end;
+ out_edge_iterator ei, e_end;
+ for (tie(u_iter, u_end) = vertices(g); u_iter != u_end; ++u_iter)
+ for (tie(ei, e_end) = out_edges(*u_iter, g); ei != e_end; ++ei)
+ if (capacity[*ei] > 0)
+ os << *u_iter << " " << target(*ei, g) << " "
+ << (capacity[*ei] - residual_capacity[*ei]) << std::endl;
+ os << std::endl;
+ }
+
+ //=======================================================================
+
+ Graph& g;
+ vertices_size_type n;
+ vertices_size_type nm;
+ EdgeCapacityMap capacity;
+ vertex_descriptor src;
+ vertex_descriptor sink;
+ VertexIndexMap index;
+
+ // will need to use random_access_property_map with these
+ std::vector< FlowValue > excess_flow;
+ std::vector< out_edge_iterator > current;
+ std::vector< distance_size_type > distance;
+ std::vector< default_color_type > color;
+
+ // Edge Property Maps that must be interior to the graph
+ ReverseEdgeMap reverse_edge;
+ ResidualCapacityEdgeMap residual_capacity;
+
+ LayerArray layers;
+ std::vector< list_iterator > layer_list_ptr;
+ distance_size_type max_distance; // maximal distance
+ distance_size_type max_active; // maximal distance with active node
+ distance_size_type min_active; // minimal distance with active node
+ boost::queue<vertex_descriptor> Q;
+
+ // Statistics counters
+ long push_count;
+ long update_count;
+ long relabel_count;
+ long gap_count;
+ long gap_node_count;
+
+ inline double global_update_frequency() { return 0.5; }
+ inline vertices_size_type alpha() { return 6; }
+ inline long beta() { return 12; }
+
+ long work_since_last_update;
+ };
+
+ } // namespace detail
+
+ template <class Graph,
+ class CapacityEdgeMap, class ResidualCapacityEdgeMap,
+ class ReverseEdgeMap, class VertexIndexMap>
+ typename property_traits<CapacityEdgeMap>::value_type
+ push_relabel_max_flow
+ (Graph& g,
+ typename graph_traits<Graph>::vertex_descriptor src,
+ typename graph_traits<Graph>::vertex_descriptor sink,
+ CapacityEdgeMap cap, ResidualCapacityEdgeMap res,
+ ReverseEdgeMap rev, VertexIndexMap index_map)
+ {
+ typedef typename property_traits<CapacityEdgeMap>::value_type FlowValue;
+
+ detail::push_relabel<Graph, CapacityEdgeMap, ResidualCapacityEdgeMap,
+ ReverseEdgeMap, VertexIndexMap, FlowValue>
+ algo(g, cap, res, rev, src, sink, index_map);
+
+ FlowValue flow = algo.maximum_preflow();
+
+ algo.convert_preflow_to_flow();
+
+ assert(algo.is_flow());
+ assert(algo.is_optimal());
+
+ return flow;
+ } // push_relabel_max_flow()
+
+ template <class Graph, class P, class T, class R>
+ typename detail::edge_capacity_value<Graph, P, T, R>::type
+ push_relabel_max_flow
+ (Graph& g,
+ typename graph_traits<Graph>::vertex_descriptor src,
+ typename graph_traits<Graph>::vertex_descriptor sink,
+ const bgl_named_params<P, T, R>& params)
+ {
+ return push_relabel_max_flow
+ (g, src, sink,
+ choose_const_pmap(get_param(params, edge_capacity), g, edge_capacity),
+ choose_pmap(get_param(params, edge_residual_capacity),
+ g, edge_residual_capacity),
+ choose_const_pmap(get_param(params, edge_reverse), g, edge_reverse),
+ choose_const_pmap(get_param(params, vertex_index), g, vertex_index)
+ );
+ }
+
+ template <class Graph>
+ typename property_traits<
+ typename property_map<Graph, edge_capacity_t>::const_type
+ >::value_type
+ push_relabel_max_flow
+ (Graph& g,
+ typename graph_traits<Graph>::vertex_descriptor src,
+ typename graph_traits<Graph>::vertex_descriptor sink)
+ {
+ bgl_named_params<int, buffer_param_t> params(0); // bogus empty param
+ return push_relabel_max_flow(g, src, sink, params);
+ }
+
+} // namespace boost
+
+#endif // BOOST_PUSH_RELABEL_MAX_FLOW_HPP
+
diff --git a/boost/boost/graph/random.hpp b/boost/boost/graph/random.hpp
new file mode 100644
index 00000000000..4159a024552
--- /dev/null
+++ b/boost/boost/graph/random.hpp
@@ -0,0 +1,205 @@
+//=======================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Copyright (C) Vladimir Prus 2003
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// 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_GRAPH_RANDOM_HPP
+#define BOOST_GRAPH_RANDOM_HPP
+
+#include <boost/graph/graph_traits.hpp>
+#include <boost/random/uniform_int.hpp>
+#include <boost/random/variate_generator.hpp>
+
+#include <boost/pending/property.hpp>
+#include <boost/graph/properties.hpp>
+
+#include <boost/graph/adjacency_list.hpp>
+#include <boost/graph/copy.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+#include <iostream>
+
+namespace boost {
+
+ // grab a random vertex from the graph's vertex set
+ template <class Graph, class RandomNumGen>
+ typename graph_traits<Graph>::vertex_descriptor
+ random_vertex(Graph& g, RandomNumGen& gen)
+ {
+ if (num_vertices(g) > 1) {
+ #if BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT(0x581))
+ std::size_t n = std::random( num_vertices(g) );
+ #else
+ uniform_int<> distrib(0, num_vertices(g)-1);
+ variate_generator<RandomNumGen&, uniform_int<> > rand_gen(gen, distrib);
+ std::size_t n = rand_gen();
+ #endif
+ typename graph_traits<Graph>::vertex_iterator
+ i = vertices(g).first;
+ while (n-- > 0) ++i; // std::advance not VC++ portable
+ return *i;
+ } else
+ return *vertices(g).first;
+ }
+
+ template <class Graph, class RandomNumGen>
+ typename graph_traits<Graph>::edge_descriptor
+ random_edge(Graph& g, RandomNumGen& gen) {
+ if (num_edges(g) > 1) {
+ #if BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT(0x581))
+ typename graph_traits<Graph>::edges_size_type
+ n = std::random( num_edges(g) );
+ #else
+ uniform_int<> distrib(0, num_edges(g)-1);
+ variate_generator<RandomNumGen&, uniform_int<> > rand_gen(gen, distrib);
+ typename graph_traits<Graph>::edges_size_type
+ n = rand_gen();
+ #endif
+ typename graph_traits<Graph>::edge_iterator
+ i = edges(g).first;
+ while (n-- > 0) ++i; // std::advance not VC++ portable
+ return *i;
+ } else
+ return *edges(g).first;
+ }
+
+ namespace detail {
+ class dummy_property_copier {
+ public:
+ template<class V1, class V2>
+ void operator()(const V1&, const V2&) const {}
+ };
+ }
+
+ template <typename MutableGraph, class RandNumGen>
+ void generate_random_graph1
+ (MutableGraph& g,
+ typename graph_traits<MutableGraph>::vertices_size_type V,
+ typename graph_traits<MutableGraph>::vertices_size_type E,
+ RandNumGen& gen,
+ bool allow_parallel = true,
+ bool self_edges = false)
+ {
+ typedef graph_traits<MutableGraph> Traits;
+ typedef typename Traits::vertices_size_type v_size_t;
+ typedef typename Traits::edges_size_type e_size_t;
+ typedef typename Traits::vertex_descriptor vertex_descriptor;
+
+ // When parallel edges are not allowed, we create a new graph which
+ // does not allow parallel edges, construct it and copy back.
+ // This is not efficient if 'g' already disallow parallel edges,
+ // but that's task for later.
+ if (!allow_parallel) {
+
+ typedef typename boost::graph_traits<MutableGraph>::directed_category dir;
+ typedef typename mpl::if_<is_convertible<dir, directed_tag>,
+ directedS, undirectedS>::type select;
+ adjacency_list<setS, vecS, select> g2;
+ generate_random_graph1(g2, V, E, gen, true, self_edges);
+
+ copy_graph(g2, g, vertex_copy(detail::dummy_property_copier()).
+ edge_copy(detail::dummy_property_copier()));
+
+ } else {
+
+ for (v_size_t i = 0; i < V; ++i)
+ add_vertex(g);
+
+ for (e_size_t j = 0; j < E; ++j) {
+ vertex_descriptor a = random_vertex(g, gen), b;
+ do {
+ b = random_vertex(g, gen);
+ } while (self_edges == false && a == b);
+ add_edge(a, b, g);
+ }
+ }
+ }
+
+ template <typename MutableGraph, class RandNumGen>
+ void generate_random_graph
+ (MutableGraph& g,
+ typename graph_traits<MutableGraph>::vertices_size_type V,
+ typename graph_traits<MutableGraph>::vertices_size_type E,
+ RandNumGen& gen,
+ bool allow_parallel = true,
+ bool self_edges = false)
+ {
+ generate_random_graph1(g, V, E, gen, allow_parallel, self_edges);
+ }
+
+ template <typename MutableGraph, typename RandNumGen,
+ typename VertexOutputIterator, typename EdgeOutputIterator>
+ void generate_random_graph
+ (MutableGraph& g,
+ typename graph_traits<MutableGraph>::vertices_size_type V,
+ typename graph_traits<MutableGraph>::vertices_size_type E,
+ RandNumGen& gen,
+ VertexOutputIterator vertex_out,
+ EdgeOutputIterator edge_out,
+ bool self_edges = false)
+ {
+ typedef graph_traits<MutableGraph> Traits;
+ typedef typename Traits::vertices_size_type v_size_t;
+ typedef typename Traits::edges_size_type e_size_t;
+ typedef typename Traits::vertex_descriptor vertex_t;
+ typedef typename Traits::edge_descriptor edge_t;
+
+ for (v_size_t i = 0; i < V; ++i)
+ *vertex_out++ = add_vertex(g);
+
+ for (e_size_t j = 0; j < E; ++j) {
+ vertex_t a = random_vertex(g, gen), b;
+ do {
+ b = random_vertex(g, gen);
+ } while (self_edges == false && a == b);
+ edge_t e; bool inserted;
+ tie(e, inserted) = add_edge(a, b, g);
+ if (inserted)
+ *edge_out++ = std::make_pair(source(e, g), target(e, g));
+ }
+ }
+
+ namespace detail {
+
+ template<class Property, class G, class RandomGenerator>
+ void randomize_property(G& g, RandomGenerator& rg,
+ Property, vertex_property_tag)
+ {
+ typename property_map<G, Property>::type pm = get(Property(), g);
+ typename graph_traits<G>::vertex_iterator vi, ve;
+ for (tie(vi, ve) = vertices(g); vi != ve; ++vi) {
+ pm[*vi] = rg();
+ }
+ }
+
+ template<class Property, class G, class RandomGenerator>
+ void randomize_property(G& g, RandomGenerator& rg,
+ Property, edge_property_tag)
+ {
+ typename property_map<G, Property>::type pm = get(Property(), g);
+ typename graph_traits<G>::edge_iterator ei, ee;
+ for (tie(ei, ee) = edges(g); ei != ee; ++ei) {
+ pm[*ei] = rg();
+ }
+ }
+ }
+
+ template<class Property, class G, class RandomGenerator>
+ void randomize_property(G& g, RandomGenerator& rg)
+ {
+ detail::randomize_property
+ (g, rg, Property(), typename property_kind<Property>::type());
+ }
+
+
+
+
+}
+
+
+#endif
diff --git a/boost/boost/graph/random_layout.hpp b/boost/boost/graph/random_layout.hpp
new file mode 100644
index 00000000000..b65950d6b8c
--- /dev/null
+++ b/boost/boost/graph/random_layout.hpp
@@ -0,0 +1,49 @@
+// Copyright 2004 The Trustees of Indiana University.
+
+// 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)
+
+// Authors: Douglas Gregor
+// Andrew Lumsdaine
+#ifndef BOOST_GRAPH_RANDOM_LAYOUT_HPP
+#define BOOST_GRAPH_RANDOM_LAYOUT_HPP
+
+#include <boost/graph/graph_traits.hpp>
+#include <boost/random/uniform_int.hpp>
+#include <boost/random/uniform_01.hpp>
+#include <boost/random/uniform_real.hpp>
+#include <boost/type_traits/is_integral.hpp>
+#include <boost/mpl/if.hpp>
+
+namespace boost {
+
+template<typename Graph, typename PositionMap, typename Dimension,
+ typename RandomNumberGenerator>
+void
+random_graph_layout(const Graph& g, PositionMap position_map,
+ Dimension minX, Dimension maxX,
+ Dimension minY, Dimension maxY,
+ RandomNumberGenerator& gen)
+{
+ typedef typename mpl::if_<is_integral<Dimension>,
+ uniform_int<Dimension>,
+ uniform_real<Dimension> >::type distrib_t;
+ typedef typename mpl::if_<is_integral<Dimension>,
+ RandomNumberGenerator&,
+ uniform_01<RandomNumberGenerator, Dimension> >
+ ::type gen_t;
+
+ gen_t my_gen(gen);
+ distrib_t x(minX, maxX);
+ distrib_t y(minY, maxY);
+ typename graph_traits<Graph>::vertex_iterator vi, vi_end;
+ for(tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi) {
+ position_map[*vi].x = x(my_gen);
+ position_map[*vi].y = y(my_gen);
+ }
+}
+
+} // end namespace boost
+
+#endif // BOOST_GRAPH_RANDOM_LAYOUT_HPP
diff --git a/boost/boost/graph/read_dimacs.hpp b/boost/boost/graph/read_dimacs.hpp
new file mode 100644
index 00000000000..5f4cfe3ca1c
--- /dev/null
+++ b/boost/boost/graph/read_dimacs.hpp
@@ -0,0 +1,278 @@
+//=======================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Authors: Jeremy G. Siek, Andrew Lumsdaine, Lie-Quan Lee
+//
+// 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)
+//=======================================================================
+
+/*
+ Reads maximal flow problem in extended DIMACS format.
+
+ Reads from stdin.
+
+ This works, but could use some polishing.
+*/
+
+/* ----------------------------------------------------------------- */
+
+#include <vector>
+#include <stdio.h>
+
+namespace boost {
+
+template <class Graph, class CapacityMap, class ReverseEdgeMap>
+int read_dimacs_max_flow(Graph& g,
+ CapacityMap capacity,
+ ReverseEdgeMap reverse_edge,
+ typename graph_traits<Graph>::vertex_descriptor& src,
+ typename graph_traits<Graph>::vertex_descriptor& sink)
+{
+ // const int MAXLINE = 100; /* max line length in the input file */
+ const int ARC_FIELDS = 3; /* no of fields in arc line */
+ const int NODE_FIELDS = 2; /* no of fields in node line */
+ const int P_FIELDS = 3; /* no of fields in problem line */
+ const char* PROBLEM_TYPE = "max"; /* name of problem type*/
+
+ typedef typename graph_traits<Graph>::vertices_size_type vertices_size_type;
+ typedef typename graph_traits<Graph>::vertex_descriptor vertex_descriptor;
+ typedef typename graph_traits<Graph>::edge_descriptor edge_descriptor;
+
+ std::vector<vertex_descriptor> verts;
+
+ long m, n, /* number of edges and nodes */
+ i, head, tail, cap;
+
+ long no_lines=0, /* no of current input line */
+ no_plines=0, /* no of problem-lines */
+ no_nslines=0, /* no of node-source-lines */
+ no_nklines=0, /* no of node-source-lines */
+ no_alines=0; /* no of arc-lines */
+
+ std::string in_line; /* for reading input line */
+ char pr_type[3]; /* for reading type of the problem */
+ char nd; /* source (s) or sink (t) */
+
+ int k, /* temporary */
+ err_no; /* no of detected error */
+
+ /* -------------- error numbers & error messages ---------------- */
+ const int EN1 = 0;
+ const int EN2 = 1;
+ const int EN3 = 2;
+ const int EN4 = 3;
+ // const int EN6 = 4;
+ // const int EN10 = 5;
+ // const int EN7 = 6;
+ const int EN8 = 7;
+ const int EN9 = 8;
+ const int EN11 = 9;
+ const int EN12 = 10;
+ // const int EN13 = 11;
+ const int EN14 = 12;
+ const int EN16 = 13;
+ const int EN15 = 14;
+ const int EN17 = 15;
+ const int EN18 = 16;
+ const int EN21 = 17;
+ const int EN19 = 18;
+ const int EN20 = 19;
+ const int EN22 = 20;
+
+ static char *err_message[] =
+ {
+ /* 0*/ "more than one problem line.",
+ /* 1*/ "wrong number of parameters in the problem line.",
+ /* 2*/ "it is not a Max Flow problem line.",
+ /* 3*/ "bad value of a parameter in the problem line.",
+ /* 4*/ "can't obtain enough memory to solve this problem.",
+ /* 5*/ "more than one line with the problem name.",
+ /* 6*/ "can't read problem name.",
+ /* 7*/ "problem description must be before node description.",
+ /* 8*/ "this parser doesn't support multiply sources and sinks.",
+ /* 9*/ "wrong number of parameters in the node line.",
+ /*10*/ "wrong value of parameters in the node line.",
+ /*11*/ " ",
+ /*12*/ "source and sink descriptions must be before arc descriptions.",
+ /*13*/ "too many arcs in the input.",
+ /*14*/ "wrong number of parameters in the arc line.",
+ /*15*/ "wrong value of parameters in the arc line.",
+ /*16*/ "unknown line type in the input.",
+ /*17*/ "reading error.",
+ /*18*/ "not enough arcs in the input.",
+ /*19*/ "source or sink doesn't have incident arcs.",
+ /*20*/ "can't read anything from the input file."
+ };
+ /* --------------------------------------------------------------- */
+
+ /* The main loop:
+ - reads the line of the input,
+ - analyses its type,
+ - checks correctness of parameters,
+ - puts data to the arrays,
+ - does service functions
+ */
+
+ while (std::getline(std::cin, in_line)) {
+ ++no_lines;
+
+ switch (in_line[0]) {
+ case 'c': /* skip lines with comments */
+ case '\n': /* skip empty lines */
+ case '\0': /* skip empty lines at the end of file */
+ break;
+
+ case 'p': /* problem description */
+ if ( no_plines > 0 )
+ /* more than one problem line */
+ { err_no = EN1 ; goto error; }
+
+ no_plines = 1;
+
+ if (
+ /* reading problem line: type of problem, no of nodes, no of arcs */
+ sscanf ( in_line.c_str(), "%*c %3s %ld %ld", pr_type, &n, &m )
+ != P_FIELDS
+ )
+ /*wrong number of parameters in the problem line*/
+ { err_no = EN2; goto error; }
+
+ if ( strcmp ( pr_type, PROBLEM_TYPE ) )
+ /*wrong problem type*/
+ { err_no = EN3; goto error; }
+
+ if ( n <= 0 || m <= 0 )
+ /*wrong value of no of arcs or nodes*/
+ { err_no = EN4; goto error; }
+
+ {
+ for (long vi = 0; vi < n; ++vi)
+ verts.push_back(add_vertex(g));
+ }
+ break;
+
+ case 'n': /* source(s) description */
+ if ( no_plines == 0 )
+ /* there was not problem line above */
+ { err_no = EN8; goto error; }
+
+ /* reading source or sink */
+ k = sscanf ( in_line.c_str(),"%*c %ld %c", &i, &nd );
+ --i; // index from 0
+ if ( k < NODE_FIELDS )
+ /* node line is incorrect */
+ { err_no = EN11; goto error; }
+
+ if ( i < 0 || i > n )
+ /* wrong value of node */
+ { err_no = EN12; goto error; }
+
+ switch (nd) {
+ case 's': /* source line */
+
+ if ( no_nslines != 0)
+ /* more than one source line */
+ { err_no = EN9; goto error; }
+
+ no_nslines = 1;
+ src = verts[i];
+ break;
+
+ case 't': /* sink line */
+
+ if ( no_nklines != 0)
+ /* more than one sink line */
+ { err_no = EN9; goto error; }
+
+ no_nklines = 1;
+ sink = verts[i];
+ break;
+
+ default:
+ /* wrong type of node-line */
+ err_no = EN12; goto error;
+ }
+ break;
+
+ case 'a': /* arc description */
+ if ( no_nslines == 0 || no_nklines == 0 )
+ /* there was not source and sink description above */
+ { err_no = EN14; goto error; }
+
+ if ( no_alines >= m )
+ /*too many arcs on input*/
+ { err_no = EN16; goto error; }
+
+ if (
+ /* reading an arc description */
+ sscanf ( in_line.c_str(),"%*c %ld %ld %ld",
+ &tail, &head, &cap )
+ != ARC_FIELDS
+ )
+ /* arc description is not correct */
+ { err_no = EN15; goto error; }
+
+ --tail; // index from 0, not 1
+ --head;
+ if ( tail < 0 || tail > n ||
+ head < 0 || head > n
+ )
+ /* wrong value of nodes */
+ { err_no = EN17; goto error; }
+
+ {
+ edge_descriptor e1, e2;
+ bool in1, in2;
+ tie(e1, in1) = add_edge(verts[tail], verts[head], g);
+ tie(e2, in2) = add_edge(verts[head], verts[tail], g);
+ if (!in1 || !in2) {
+ std::cerr << "unable to add edge (" << head << "," << tail << ")"
+ << std::endl;
+ return -1;
+ }
+ capacity[e1] = cap;
+ capacity[e2] = 0;
+ reverse_edge[e1] = e2;
+ reverse_edge[e2] = e1;
+ }
+ ++no_alines;
+ break;
+
+ default:
+ /* unknown type of line */
+ err_no = EN18; goto error;
+
+ } /* end of switch */
+ } /* end of input loop */
+
+ /* ----- all is red or error while reading ----- */
+
+ if ( feof (stdin) == 0 ) /* reading error */
+ { err_no=EN21; goto error; }
+
+ if ( no_lines == 0 ) /* empty input */
+ { err_no = EN22; goto error; }
+
+ if ( no_alines < m ) /* not enough arcs */
+ { err_no = EN19; goto error; }
+
+ if ( out_degree(src, g) == 0 || out_degree(sink, g) == 0 )
+ /* no arc goes out of the source */
+ { err_no = EN20; goto error; }
+
+ /* Thanks God! all is done */
+ return (0);
+
+ /* ---------------------------------- */
+ error: /* error found reading input */
+
+ printf ( "\nline %ld of input - %s\n",
+ no_lines, err_message[err_no] );
+
+ exit (1);
+ return (0); /* to avoid warning */
+}
+/* -------------------- end of parser -------------------*/
+
+} // namespace boost
diff --git a/boost/boost/graph/relax.hpp b/boost/boost/graph/relax.hpp
new file mode 100644
index 00000000000..a3781d5ec47
--- /dev/null
+++ b/boost/boost/graph/relax.hpp
@@ -0,0 +1,77 @@
+//=======================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek,
+//
+// 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_GRAPH_RELAX_HPP
+#define BOOST_GRAPH_RELAX_HPP
+
+#include <functional>
+#include <boost/limits.hpp> // for numeric limits
+#include <boost/graph/graph_traits.hpp>
+#include <boost/property_map.hpp>
+
+namespace boost {
+
+ // The following version of the plus functor prevents
+ // problems due to overflow at positive infinity.
+
+ template <class T>
+ struct closed_plus
+ {
+ T operator()(const T& a, const T& b) const {
+ using namespace std;
+ T zero(0);
+ T result = a + b;
+ if (result < zero && a >= zero && b >= zero)
+ return (numeric_limits<T>::max)();
+ return result;
+ }
+ };
+
+ template <class Graph, class WeightMap,
+ class PredecessorMap, class DistanceMap,
+ class BinaryFunction, class BinaryPredicate>
+ bool relax(typename graph_traits<Graph>::edge_descriptor e,
+ const Graph& g, const WeightMap& w,
+ PredecessorMap& p, DistanceMap& d,
+ const BinaryFunction& combine, const BinaryPredicate& compare)
+ {
+ typedef typename graph_traits<Graph>::directed_category DirCat;
+ bool is_undirected = is_same<DirCat, undirected_tag>::value;
+ typedef typename graph_traits<Graph>::vertex_descriptor Vertex;
+ Vertex u = source(e, g), v = target(e, g);
+ typedef typename property_traits<DistanceMap>::value_type D;
+ typedef typename property_traits<WeightMap>::value_type W;
+ D d_u = get(d, u), d_v = get(d, v);
+ W w_e = get(w, e);
+
+ if ( compare(combine(d_u, w_e), d_v) ) {
+ put(d, v, combine(d_u, w_e));
+ put(p, v, u);
+ return true;
+ } else if (is_undirected && compare(combine(d_v, w_e), d_u)) {
+ put(d, u, combine(d_v, w_e));
+ put(p, u, v);
+ return true;
+ } else
+ return false;
+ }
+
+ template <class Graph, class WeightMap,
+ class PredecessorMap, class DistanceMap>
+ bool relax(typename graph_traits<Graph>::edge_descriptor e,
+ const Graph& g, WeightMap w, PredecessorMap p, DistanceMap d)
+ {
+ typedef typename property_traits<DistanceMap>::value_type D;
+ typedef closed_plus<D> Combine;
+ typedef std::less<D> Compare;
+ return relax(e, g, w, p, d, Combine(), Compare());
+ }
+
+} // namespace boost
+
+#endif /* BOOST_GRAPH_RELAX_HPP */
diff --git a/boost/boost/graph/reverse_graph.hpp b/boost/boost/graph/reverse_graph.hpp
new file mode 100644
index 00000000000..06c135ffb69
--- /dev/null
+++ b/boost/boost/graph/reverse_graph.hpp
@@ -0,0 +1,314 @@
+// (C) Copyright David Abrahams 2000.
+// 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 REVERSE_GRAPH_DWA092300_H_
+# define REVERSE_GRAPH_DWA092300_H_
+
+#include <boost/graph/adjacency_iterator.hpp>
+#include <boost/graph/properties.hpp>
+#include <boost/tuple/tuple.hpp>
+
+namespace boost {
+
+struct reverse_graph_tag { };
+
+ namespace detail {
+
+ template <bool isEdgeList> struct choose_rev_edge_iter { };
+ template <> struct choose_rev_edge_iter<true> {
+ template <class G> struct bind_ {
+ typedef typename graph_traits<G>::edge_iterator type;
+ };
+ };
+ template <> struct choose_rev_edge_iter<false> {
+ template <class G> struct bind_ {
+ typedef void type;
+ };
+ };
+
+ } // namespace detail
+
+template <class BidirectionalGraph, class GraphRef = const BidirectionalGraph&>
+class reverse_graph {
+ typedef reverse_graph<BidirectionalGraph, GraphRef> Self;
+ typedef graph_traits<BidirectionalGraph> Traits;
+ public:
+ typedef BidirectionalGraph base_type;
+
+ // Constructor
+ reverse_graph(GraphRef g) : m_g(g) {}
+
+ // Graph requirements
+ typedef typename Traits::vertex_descriptor vertex_descriptor;
+ typedef typename Traits::edge_descriptor edge_descriptor;
+ typedef typename Traits::directed_category directed_category;
+ typedef typename Traits::edge_parallel_category edge_parallel_category;
+ typedef typename Traits::traversal_category traversal_category;
+
+ // IncidenceGraph requirements
+ typedef typename Traits::in_edge_iterator out_edge_iterator;
+ typedef typename Traits::degree_size_type degree_size_type;
+
+ // BidirectionalGraph requirements
+ typedef typename Traits::out_edge_iterator in_edge_iterator;
+
+ // AdjacencyGraph requirements
+ typedef typename adjacency_iterator_generator<Self,
+ vertex_descriptor, out_edge_iterator>::type adjacency_iterator;
+
+ // VertexListGraph requirements
+ typedef typename Traits::vertex_iterator vertex_iterator;
+
+ // EdgeListGraph requirements
+ enum { is_edge_list = is_convertible<traversal_category,
+ edge_list_graph_tag>::value };
+ typedef detail::choose_rev_edge_iter<is_edge_list> ChooseEdgeIter;
+ typedef typename ChooseEdgeIter::
+ template bind_<BidirectionalGraph>::type edge_iterator;
+ typedef typename Traits::vertices_size_type vertices_size_type;
+ typedef typename Traits::edges_size_type edges_size_type;
+
+ // More typedefs used by detail::edge_property_map, vertex_property_map
+ typedef typename BidirectionalGraph::edge_property_type
+ edge_property_type;
+ typedef typename BidirectionalGraph::vertex_property_type
+ vertex_property_type;
+ typedef reverse_graph_tag graph_tag;
+
+#ifndef BOOST_GRAPH_NO_BUNDLED_PROPERTIES
+ // Bundled properties support
+ template<typename Descriptor>
+ typename graph::detail::bundled_result<BidirectionalGraph,
+ Descriptor>::type&
+ operator[](Descriptor x)
+ { return m_g[x]; }
+
+ template<typename Descriptor>
+ typename graph::detail::bundled_result<BidirectionalGraph,
+ Descriptor>::type const&
+ operator[](Descriptor x) const
+ { return m_g[x]; }
+#endif // BOOST_GRAPH_NO_BUNDLED_PROPERTIES
+
+ static vertex_descriptor null_vertex()
+ { return Traits::null_vertex(); }
+
+ // would be private, but template friends aren't portable enough.
+ // private:
+ GraphRef m_g;
+};
+
+#ifndef BOOST_GRAPH_NO_BUNDLED_PROPERTIES
+ template<typename Graph, typename GraphRef>
+ struct vertex_bundle_type<reverse_graph<Graph, GraphRef> >
+ : vertex_bundle_type<Graph> { };
+
+ template<typename Graph, typename GraphRef>
+ struct edge_bundle_type<reverse_graph<Graph, GraphRef> >
+ : edge_bundle_type<Graph> { };
+#endif // BOOST_GRAPH_NO_BUNDLED_PROPERTIES
+
+template <class BidirectionalGraph>
+inline reverse_graph<BidirectionalGraph>
+make_reverse_graph(const BidirectionalGraph& g)
+{
+ return reverse_graph<BidirectionalGraph>(g);
+}
+
+template <class BidirectionalGraph>
+inline reverse_graph<BidirectionalGraph, BidirectionalGraph&>
+make_reverse_graph(BidirectionalGraph& g)
+{
+ return reverse_graph<BidirectionalGraph, BidirectionalGraph&>(g);
+}
+
+template <class BidirectionalGraph, class GRef>
+std::pair<typename reverse_graph<BidirectionalGraph>::vertex_iterator,
+ typename reverse_graph<BidirectionalGraph>::vertex_iterator>
+vertices(const reverse_graph<BidirectionalGraph,GRef>& g)
+{
+ return vertices(g.m_g);
+}
+
+template <class BidirectionalGraph, class GRef>
+std::pair<typename reverse_graph<BidirectionalGraph>::edge_iterator,
+ typename reverse_graph<BidirectionalGraph>::edge_iterator>
+edges(const reverse_graph<BidirectionalGraph,GRef>& g)
+{
+ return edges(g.m_g);
+}
+
+template <class BidirectionalGraph, class GRef>
+inline std::pair<typename BidirectionalGraph::in_edge_iterator,
+ typename BidirectionalGraph::in_edge_iterator>
+out_edges(const typename BidirectionalGraph::vertex_descriptor u,
+ const reverse_graph<BidirectionalGraph,GRef>& g)
+{
+ return in_edges(u, g.m_g);
+}
+
+template <class BidirectionalGraph, class GRef>
+inline typename BidirectionalGraph::vertices_size_type
+num_vertices(const reverse_graph<BidirectionalGraph,GRef>& g)
+{
+ return num_vertices(g.m_g);
+}
+
+template <class BidirectionalGraph, class GRef>
+inline typename reverse_graph<BidirectionalGraph>::edges_size_type
+num_edges(const reverse_graph<BidirectionalGraph,GRef>& g)
+{
+ return num_edges(g.m_g);
+}
+
+template <class BidirectionalGraph, class GRef>
+inline typename BidirectionalGraph::degree_size_type
+out_degree(const typename BidirectionalGraph::vertex_descriptor u,
+ const reverse_graph<BidirectionalGraph,GRef>& g)
+{
+ return in_degree(u, g.m_g);
+}
+
+template <class BidirectionalGraph, class GRef>
+inline std::pair<typename BidirectionalGraph::edge_descriptor, bool>
+edge(const typename BidirectionalGraph::vertex_descriptor u,
+ const typename BidirectionalGraph::vertex_descriptor v,
+ const reverse_graph<BidirectionalGraph,GRef>& g)
+{
+ return edge(v, u, g.m_g);
+}
+
+template <class BidirectionalGraph, class GRef>
+inline std::pair<typename BidirectionalGraph::out_edge_iterator,
+ typename BidirectionalGraph::out_edge_iterator>
+in_edges(const typename BidirectionalGraph::vertex_descriptor u,
+ const reverse_graph<BidirectionalGraph,GRef>& g)
+{
+ return out_edges(u, g.m_g);
+}
+
+template <class BidirectionalGraph, class GRef>
+inline std::pair<typename reverse_graph<BidirectionalGraph,GRef>::adjacency_iterator,
+ typename reverse_graph<BidirectionalGraph,GRef>::adjacency_iterator>
+adjacent_vertices(const typename BidirectionalGraph::vertex_descriptor u,
+ const reverse_graph<BidirectionalGraph,GRef>& g)
+{
+ typedef reverse_graph<BidirectionalGraph,GRef> Graph;
+ typename Graph::out_edge_iterator first, last;
+ tie(first, last) = out_edges(u, g);
+ typedef typename Graph::adjacency_iterator adjacency_iterator;
+ return std::make_pair(adjacency_iterator(first, const_cast<Graph*>(&g)),
+ adjacency_iterator(last, const_cast<Graph*>(&g)));
+}
+
+template <class BidirectionalGraph, class GRef>
+inline typename BidirectionalGraph::degree_size_type
+in_degree(const typename BidirectionalGraph::vertex_descriptor u,
+ const reverse_graph<BidirectionalGraph,GRef>& g)
+{
+ return out_degree(u, g.m_g);
+}
+
+template <class Edge, class BidirectionalGraph, class GRef>
+inline typename graph_traits<BidirectionalGraph>::vertex_descriptor
+source(const Edge& e, const reverse_graph<BidirectionalGraph,GRef>& g)
+{
+ return target(e, g.m_g);
+}
+
+template <class Edge, class BidirectionalGraph, class GRef>
+inline typename graph_traits<BidirectionalGraph>::vertex_descriptor
+target(const Edge& e, const reverse_graph<BidirectionalGraph,GRef>& g)
+{
+ return source(e, g.m_g);
+}
+
+
+namespace detail {
+
+ struct reverse_graph_vertex_property_selector {
+ template <class ReverseGraph, class Property, class Tag>
+ struct bind_ {
+ typedef typename ReverseGraph::base_type Graph;
+ typedef property_map<Graph, Tag> PMap;
+ typedef typename PMap::type type;
+ typedef typename PMap::const_type const_type;
+ };
+ };
+
+ struct reverse_graph_edge_property_selector {
+ template <class ReverseGraph, class Property, class Tag>
+ struct bind_ {
+ typedef typename ReverseGraph::base_type Graph;
+ typedef property_map<Graph, Tag> PMap;
+ typedef typename PMap::type type;
+ typedef typename PMap::const_type const_type;
+ };
+ };
+
+} // namespace detail
+
+template <>
+struct vertex_property_selector<reverse_graph_tag> {
+ typedef detail::reverse_graph_vertex_property_selector type;
+};
+
+template <>
+struct edge_property_selector<reverse_graph_tag> {
+ typedef detail::reverse_graph_edge_property_selector type;
+};
+
+template <class BidirGraph, class GRef, class Property>
+typename property_map<BidirGraph, Property>::type
+get(Property p, reverse_graph<BidirGraph,GRef>& g)
+{
+ return get(p, g.m_g);
+}
+
+template <class BidirGraph, class GRef, class Property>
+typename property_map<BidirGraph, Property>::const_type
+get(Property p, const reverse_graph<BidirGraph,GRef>& g)
+{
+ const BidirGraph& gref = g.m_g; // in case GRef is non-const
+ return get(p, gref);
+}
+
+template <class BidirectionalGraph, class GRef, class Property, class Key>
+typename property_traits<
+ typename property_map<BidirectionalGraph, Property>::const_type
+>::value_type
+get(Property p, const reverse_graph<BidirectionalGraph,GRef>& g, const Key& k)
+{
+ return get(p, g.m_g, k);
+}
+
+template <class BidirectionalGraph, class GRef, class Property, class Key, class Value>
+void
+put(Property p, const reverse_graph<BidirectionalGraph,GRef>& g, const Key& k,
+ const Value& val)
+{
+ put(p, g.m_g, k, val);
+}
+
+template<typename BidirectionalGraph, typename GRef, typename Tag,
+ typename Value>
+inline void
+set_property(const reverse_graph<BidirectionalGraph,GRef>& g, Tag tag,
+ const Value& value)
+{
+ set_property(g.m_g, tag, value);
+}
+
+template<typename BidirectionalGraph, typename GRef, typename Tag>
+inline
+typename graph_property<BidirectionalGraph, Tag>::type
+get_property(const reverse_graph<BidirectionalGraph,GRef>& g, Tag tag)
+{
+ return get_property(g.m_g, tag);
+}
+
+} // namespace boost
+
+#endif
diff --git a/boost/boost/graph/sequential_vertex_coloring.hpp b/boost/boost/graph/sequential_vertex_coloring.hpp
new file mode 100644
index 00000000000..606f2e52d25
--- /dev/null
+++ b/boost/boost/graph/sequential_vertex_coloring.hpp
@@ -0,0 +1,124 @@
+//=======================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Copyright 2004 The Trustees of Indiana University
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// 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_GRAPH_SEQUENTIAL_VERTEX_COLORING_HPP
+#define BOOST_GRAPH_SEQUENTIAL_VERTEX_COLORING_HPP
+
+#include <vector>
+#include <boost/graph/graph_traits.hpp>
+#include <boost/tuple/tuple.hpp>
+#include <boost/property_map.hpp>
+#include <boost/limits.hpp>
+
+#ifdef BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS
+# include <iterator>
+#endif
+
+/* This algorithm is to find coloring of a graph
+
+ Algorithm:
+ Let G = (V,E) be a graph with vertices (somehow) ordered v_1, v_2, ...,
+ v_n. For k = 1, 2, ..., n the sequential algorithm assigns v_k to the
+ smallest possible color.
+
+ Reference:
+
+ Thomas F. Coleman and Jorge J. More, Estimation of sparse Jacobian
+ matrices and graph coloring problems. J. Numer. Anal. V20, P187-209, 1983
+
+ v_k is stored as o[k] here.
+
+ The color of the vertex v will be stored in color[v].
+ i.e., vertex v belongs to coloring color[v] */
+
+namespace boost {
+ template <class VertexListGraph, class OrderPA, class ColorMap>
+ typename property_traits<ColorMap>::value_type
+ sequential_vertex_coloring(const VertexListGraph& G, OrderPA order,
+ ColorMap color)
+ {
+ typedef graph_traits<VertexListGraph> GraphTraits;
+ typedef typename GraphTraits::vertex_descriptor Vertex;
+ typedef typename property_traits<ColorMap>::value_type size_type;
+
+ size_type max_color = 0;
+ const size_type V = num_vertices(G);
+
+ // We need to keep track of which colors are used by
+ // adjacent vertices. We do this by marking the colors
+ // that are used. The mark array contains the mark
+ // for each color. The length of mark is the
+ // number of vertices since the maximum possible number of colors
+ // is the number of vertices.
+ std::vector<size_type> mark(V,
+ std::numeric_limits<size_type>::max BOOST_PREVENT_MACRO_SUBSTITUTION());
+
+ //Initialize colors
+ typename GraphTraits::vertex_iterator v, vend;
+ for (tie(v, vend) = vertices(G); v != vend; ++v)
+ put(color, *v, V-1);
+
+ //Determine the color for every vertex one by one
+ for ( size_type i = 0; i < V; i++) {
+ Vertex current = get(order,i);
+ typename GraphTraits::adjacency_iterator v, vend;
+
+ //Mark the colors of vertices adjacent to current.
+ //i can be the value for marking since i increases successively
+ for (tie(v,vend) = adjacent_vertices(current, G); v != vend; ++v)
+ mark[get(color,*v)] = i;
+
+ //Next step is to assign the smallest un-marked color
+ //to the current vertex.
+ size_type j = 0;
+
+ //Scan through all useable colors, find the smallest possible
+ //color that is not used by neighbors. Note that if mark[j]
+ //is equal to i, color j is used by one of the current vertex's
+ //neighbors.
+ while ( j < max_color && mark[j] == i )
+ ++j;
+
+ if ( j == max_color ) //All colors are used up. Add one more color
+ ++max_color;
+
+ //At this point, j is the smallest possible color
+ put(color, current, j); //Save the color of vertex current
+ }
+
+ return max_color;
+ }
+
+ template<class VertexListGraph, class ColorMap>
+ typename property_traits<ColorMap>::value_type
+ sequential_vertex_coloring(const VertexListGraph& G, ColorMap color)
+ {
+ typedef typename graph_traits<VertexListGraph>::vertex_descriptor
+ vertex_descriptor;
+ typedef typename graph_traits<VertexListGraph>::vertex_iterator
+ vertex_iterator;
+
+ std::pair<vertex_iterator, vertex_iterator> v = vertices(G);
+#ifndef BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS
+ std::vector<vertex_descriptor> order(v.first, v.second);
+#else
+ std::vector<vertex_descriptor> order;
+ order.reserve(std::distance(v.first, v.second));
+ while (v.first != v.second) order.push_back(*v.first++);
+#endif
+ return sequential_vertex_coloring
+ (G,
+ make_iterator_property_map
+ (order.begin(), identity_property_map(),
+ graph_traits<VertexListGraph>::null_vertex()),
+ color);
+ }
+}
+
+#endif
diff --git a/boost/boost/graph/simple_point.hpp b/boost/boost/graph/simple_point.hpp
new file mode 100644
index 00000000000..5f19c75f78a
--- /dev/null
+++ b/boost/boost/graph/simple_point.hpp
@@ -0,0 +1,23 @@
+//=======================================================================
+// Copyright 2005 Trustees of Indiana University
+// Authors: Andrew Lumsdaine, Douglas Gregor
+//
+// 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_GRAPH_SIMPLE_POINT_HPP
+#define BOOST_GRAPH_SIMPLE_POINT_HPP
+
+namespace boost {
+
+template<typename T>
+struct simple_point
+{
+ T x;
+ T y;
+};
+
+} // end namespace boost
+
+#endif // BOOST_GRAPH_SIMPLE_POINT_HPP
diff --git a/boost/boost/graph/sloan_ordering.hpp b/boost/boost/graph/sloan_ordering.hpp
new file mode 100644
index 00000000000..b0855e5a1f0
--- /dev/null
+++ b/boost/boost/graph/sloan_ordering.hpp
@@ -0,0 +1,448 @@
+//
+//=======================================================================
+// Copyright 2002 Marc Wintermantel (wintermantel@even-ag.ch)
+// ETH Zurich, Center of Structure Technologies (www.imes.ethz.ch/st)
+//
+// 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_GRAPH_SLOAN_HPP
+#define BOOST_GRAPH_SLOAN_HPP
+
+#define WEIGHT1 1 //default weight for the distance in the Sloan algorithm
+#define WEIGHT2 2 //default weight for the degree in the Sloan algorithm
+#define MAXINT 2147483647 //Maximum value for a 32bit integer
+
+#include <boost/config.hpp>
+#include <vector>
+#include <queue>
+#include <boost/pending/queue.hpp>
+#include <boost/graph/graph_traits.hpp>
+#include <boost/graph/breadth_first_search.hpp>
+#include <boost/graph/properties.hpp>
+#include <boost/pending/indirect_cmp.hpp>
+#include <boost/property_map.hpp>
+#include <algorithm>
+#include <utility>
+#include <boost/graph/visitors.hpp>
+#include <boost/graph/adjacency_list.hpp>
+#include <boost/graph/cuthill_mckee_ordering.hpp>
+
+
+////////////////////////////////////////////////////////////
+//
+//Sloan-Algorithm for graph reordering
+//(optimzes profile and wavefront, not primiraly bandwidth
+//
+////////////////////////////////////////////////////////////
+
+namespace boost {
+
+ /////////////////////////////////////////////////////////////////////////
+ // Function that returns the maximum depth of
+ // a rooted level strucutre (RLS)
+ //
+ /////////////////////////////////////////////////////////////////////////
+ template<class Distance>
+ unsigned RLS_depth(Distance& d)
+ {
+ unsigned h_s = 0;
+ typename Distance::iterator iter;
+
+ for (iter = d.begin(); iter != d.end(); ++iter)
+ {
+ if(*iter > h_s)
+ {
+ h_s = *iter;
+ }
+ }
+
+ return h_s;
+ }
+
+
+
+ /////////////////////////////////////////////////////////////////////////
+ // Function that returns the width of the largest level of
+ // a rooted level strucutre (RLS)
+ //
+ /////////////////////////////////////////////////////////////////////////
+ template<class Distance, class my_int>
+ unsigned RLS_max_width(Distance& d, my_int depth)
+ {
+
+ //Searching for the maximum width of a level
+ std::vector<unsigned> dummy_width(depth+1, 0);
+ std::vector<unsigned>::iterator my_it;
+ typename Distance::iterator iter;
+ unsigned w_max = 0;
+
+ for (iter = d.begin(); iter != d.end(); ++iter)
+ {
+ dummy_width[*iter]++;
+ }
+
+ for(my_it = dummy_width.begin(); my_it != dummy_width.end(); ++my_it)
+ {
+ if(*my_it > w_max) w_max = *my_it;
+ }
+
+ return w_max;
+
+ }
+
+
+ /////////////////////////////////////////////////////////////////////////
+ // Function for finding a good starting node for Sloan algorithm
+ //
+ // This is to find a good starting node. "good" is in the sense
+ // of the ordering generated.
+ /////////////////////////////////////////////////////////////////////////
+ template <class Graph, class ColorMap, class DegreeMap>
+ typename graph_traits<Graph>::vertex_descriptor
+ sloan_start_end_vertices(Graph& G,
+ typename graph_traits<Graph>::vertex_descriptor &s,
+ ColorMap color,
+ DegreeMap degree)
+ {
+ typedef typename property_traits<DegreeMap>::value_type Degree;
+ typedef typename graph_traits<Graph>::vertex_descriptor Vertex;
+ typedef typename std::vector< typename graph_traits<Graph>::vertices_size_type>::iterator vec_iter;
+ typedef typename graph_traits<Graph>::vertices_size_type size_type;
+
+ typedef typename property_map<Graph, vertex_index_t>::const_type VertexID;
+
+ s = *(vertices(G).first);
+ Vertex e = s;
+ Vertex i;
+ unsigned my_degree = get(degree, s );
+ unsigned dummy, h_i, h_s, w_i, w_e;
+ bool new_start = true;
+ unsigned maximum_degree = 0;
+
+ //Creating a std-vector for storing the distance from the start vertex in dist
+ std::vector<typename graph_traits<Graph>::vertices_size_type> dist(num_vertices(G), 0);
+
+ //Wrap a property_map_iterator around the std::iterator
+ boost::iterator_property_map<vec_iter, VertexID, size_type, size_type&> dist_pmap(dist.begin(), get(vertex_index, G));
+
+ //Creating a property_map for the indices of a vertex
+ typename property_map<Graph, vertex_index_t>::type index_map = get(vertex_index, G);
+
+ //Creating a priority queue
+ typedef indirect_cmp<DegreeMap, std::greater<Degree> > Compare;
+ Compare comp(degree);
+ std::priority_queue<Vertex, std::vector<Vertex>, Compare> degree_queue(comp);
+
+ //step 1
+ //Scan for the vertex with the smallest degree and the maximum degree
+ typename graph_traits<Graph>::vertex_iterator ui, ui_end;
+ for (tie(ui, ui_end) = vertices(G); ui != ui_end; ++ui)
+ {
+ dummy = get(degree, *ui);
+
+ if(dummy < my_degree)
+ {
+ my_degree = dummy;
+ s = *ui;
+ }
+
+ if(dummy > maximum_degree)
+ {
+ maximum_degree = dummy;
+ }
+ }
+ //end 1
+
+ do{
+ new_start = false; //Setting the loop repetition status to false
+
+ //step 2
+ //initialize the the disance std-vector with 0
+ for(typename std::vector<typename graph_traits<Graph>::vertices_size_type>::iterator iter = dist.begin(); iter != dist.end(); ++iter) *iter = 0;
+
+ //generating the RLS (rooted level structure)
+ breadth_first_search
+ (G, s, visitor
+ (
+ make_bfs_visitor(record_distances(dist_pmap, on_tree_edge() ) )
+ )
+ );
+
+ //end 2
+
+ //step 3
+ //calculating the depth of the RLS
+ h_s = RLS_depth(dist);
+
+ //step 4
+ //pushing one node of each degree in an ascending manner into degree_queue
+ std::vector<bool> shrink_trace(maximum_degree, false);
+ for (tie(ui, ui_end) = vertices(G); ui != ui_end; ++ui)
+ {
+ dummy = get(degree, *ui);
+
+ if( (dist[index_map[*ui]] == h_s ) && ( !shrink_trace[ dummy ] ) )
+ {
+ degree_queue.push(*ui);
+ shrink_trace[ dummy ] = true;
+ }
+ }
+
+ //end 3 & 4
+
+
+ //step 5
+ //Initializing w
+ w_e = MAXINT;
+ //end 5
+
+
+ //step 6
+ //Testing for termination
+ while( !degree_queue.empty() )
+ {
+ i = degree_queue.top(); //getting the node with the lowest degree from the degree queue
+ degree_queue.pop(); //ereasing the node with the lowest degree from the degree queue
+
+ //generating a RLS
+ for(typename std::vector<typename graph_traits<Graph>::vertices_size_type>::iterator iter = dist.begin(); iter != dist.end(); ++iter) *iter = 0;
+
+ breadth_first_search
+ (G, i, boost::visitor
+ (
+ make_bfs_visitor(record_distances(dist_pmap, on_tree_edge() ) )
+ )
+ );
+
+ //Calculating depth and width of the rooted level
+ h_i = RLS_depth(dist);
+ w_i = RLS_max_width(dist, h_i);
+
+ //Testing for termination
+ if( (h_i > h_s) && (w_i < w_e) )
+ {
+ h_s = h_i;
+ s = i;
+ while(!degree_queue.empty()) degree_queue.pop();
+ new_start = true;
+ }
+ else if(w_i < w_e)
+ {
+ w_e = w_i;
+ e = i;
+ }
+ }
+ //end 6
+
+ }while(new_start);
+
+ return e;
+ }
+
+ //////////////////////////////////////////////////////////////////////////
+ // Sloan algorithm with a given starting Vertex.
+ //
+ // This algorithm requires user to provide a starting vertex to
+ // compute Sloan ordering.
+ //////////////////////////////////////////////////////////////////////////
+ template <class Graph, class OutputIterator,
+ class ColorMap, class DegreeMap,
+ class PriorityMap, class Weight>
+ OutputIterator
+ sloan_ordering(Graph& g,
+ typename graph_traits<Graph>::vertex_descriptor s,
+ typename graph_traits<Graph>::vertex_descriptor e,
+ OutputIterator permutation,
+ ColorMap color,
+ DegreeMap degree,
+ PriorityMap priority,
+ Weight W1,
+ Weight W2)
+ {
+ //typedef typename property_traits<DegreeMap>::value_type Degree;
+ typedef typename property_traits<PriorityMap>::value_type Degree;
+ typedef typename property_traits<ColorMap>::value_type ColorValue;
+ typedef color_traits<ColorValue> Color;
+ typedef typename graph_traits<Graph>::vertex_descriptor Vertex;
+ typedef typename std::vector<typename graph_traits<Graph>::vertices_size_type>::iterator vec_iter;
+ typedef typename graph_traits<Graph>::vertices_size_type size_type;
+
+ typedef typename property_map<Graph, vertex_index_t>::const_type VertexID;
+
+
+ //Creating a std-vector for storing the distance from the end vertex in it
+ typename std::vector<typename graph_traits<Graph>::vertices_size_type> dist(num_vertices(g), 0);
+
+ //Wrap a property_map_iterator around the std::iterator
+ boost::iterator_property_map<vec_iter, VertexID, size_type, size_type&> dist_pmap(dist.begin(), get(vertex_index, g));
+
+ breadth_first_search
+ (g, e, visitor
+ (
+ make_bfs_visitor(record_distances(dist_pmap, on_tree_edge() ) )
+ )
+ );
+
+ //Creating a property_map for the indices of a vertex
+ typename property_map<Graph, vertex_index_t>::type index_map = get(vertex_index, g);
+
+ //Sets the color and priority to their initial status
+ unsigned cdeg;
+ typename graph_traits<Graph>::vertex_iterator ui, ui_end;
+ for (tie(ui, ui_end) = vertices(g); ui != ui_end; ++ui)
+ {
+ put(color, *ui, Color::white());
+ cdeg=get(degree, *ui)+1;
+ put(priority, *ui, W1*dist[index_map[*ui]]-W2*cdeg );
+ }
+
+ //Priority list
+ typedef indirect_cmp<PriorityMap, std::greater<Degree> > Compare;
+ Compare comp(priority);
+ std::list<Vertex> priority_list;
+
+ //Some more declarations
+ typename graph_traits<Graph>::out_edge_iterator ei, ei_end, ei2, ei2_end;
+ Vertex u, v, w;
+
+ put(color, s, Color::green()); //Sets the color of the starting vertex to gray
+ priority_list.push_front(s); //Puts s into the priority_list
+
+ while ( !priority_list.empty() )
+ {
+ priority_list.sort(comp); //Orders the elements in the priority list in an ascending manner
+
+ u = priority_list.front(); //Accesses the last element in the priority list
+ priority_list.pop_front(); //Removes the last element in the priority list
+
+ if(get(color, u) == Color::green() )
+ {
+ //for-loop over all out-edges of vertex u
+ for (tie(ei, ei_end) = out_edges(u, g); ei != ei_end; ++ei)
+ {
+ v = target(*ei, g);
+
+ put( priority, v, get(priority, v) + W2 ); //updates the priority
+
+ if (get(color, v) == Color::white() ) //test if the vertex is inactive
+ {
+ put(color, v, Color::green() ); //giving the vertex a preactive status
+ priority_list.push_front(v); //writing the vertex in the priority_queue
+ }
+ }
+ }
+
+ //Here starts step 8
+ *permutation++ = u; //Puts u to the first position in the permutation-vector
+ put(color, u, Color::black() ); //Gives u an inactive status
+
+ //for loop over all the adjacent vertices of u
+ for (tie(ei, ei_end) = out_edges(u, g); ei != ei_end; ++ei) {
+
+ v = target(*ei, g);
+
+ if (get(color, v) == Color::green() ) { //tests if the vertex is inactive
+
+ put(color, v, Color::red() ); //giving the vertex an active status
+ put(priority, v, get(priority, v)+W2); //updates the priority
+
+ //for loop over alll adjacent vertices of v
+ for (tie(ei2, ei2_end) = out_edges(v, g); ei2 != ei2_end; ++ei2) {
+ w = target(*ei2, g);
+
+ if(get(color, w) != Color::black() ) { //tests if vertex is postactive
+
+ put(priority, w, get(priority, w)+W2); //updates the priority
+
+ if(get(color, w) == Color::white() ){
+
+ put(color, w, Color::green() ); // gives the vertex a preactive status
+ priority_list.push_front(w); // puts the vertex into the priority queue
+
+ } //end if
+
+ } //end if
+
+ } //end for
+
+ } //end if
+
+ } //end for
+
+ } //end while
+
+
+ return permutation;
+ }
+
+ /////////////////////////////////////////////////////////////////////////////////////////
+ // Same algorithm as before, but without the weights given (taking default weights
+ template <class Graph, class OutputIterator,
+ class ColorMap, class DegreeMap,
+ class PriorityMap>
+ OutputIterator
+ sloan_ordering(Graph& g,
+ typename graph_traits<Graph>::vertex_descriptor s,
+ typename graph_traits<Graph>::vertex_descriptor e,
+ OutputIterator permutation,
+ ColorMap color,
+ DegreeMap degree,
+ PriorityMap priority)
+ {
+ return sloan_ordering(g, s, e, permutation, color, degree, priority, WEIGHT1, WEIGHT2);
+ }
+
+
+ //////////////////////////////////////////////////////////////////////////
+ // Sloan algorithm without a given starting Vertex.
+ //
+ // This algorithm finds a good starting vertex itself to
+ // compute Sloan-ordering.
+ //////////////////////////////////////////////////////////////////////////
+
+
+
+ template < class Graph, class OutputIterator,
+ class Color, class Degree,
+ class Priority, class Weight>
+ inline OutputIterator
+ sloan_ordering(Graph& G,
+ OutputIterator permutation,
+ Color color,
+ Degree degree,
+ Priority priority,
+ Weight W1,
+ Weight W2 )
+ {
+ typedef typename boost::graph_traits<Graph>::vertex_descriptor Vertex;
+
+ Vertex s, e;
+ e = sloan_start_end_vertices(G, s, color, degree);
+
+ return sloan_ordering(G, s, e, permutation, color, degree, priority, W1, W2);
+ }
+
+ /////////////////////////////////////////////////////////////////////////////////////////
+ // Same as before, but without given weights (default weights are taken instead)
+ template < class Graph, class OutputIterator,
+ class Color, class Degree,
+ class Priority >
+ inline OutputIterator
+ sloan_ordering(Graph& G,
+ OutputIterator permutation,
+ Color color,
+ Degree degree,
+ Priority priority)
+ {
+ return sloan_ordering(G, permutation, color, degree, priority, WEIGHT1, WEIGHT2);
+ }
+
+
+} // namespace boost
+
+
+#endif // BOOST_GRAPH_SLOAN_HPP
diff --git a/boost/boost/graph/small_world_generator.hpp b/boost/boost/graph/small_world_generator.hpp
new file mode 100644
index 00000000000..ae266337193
--- /dev/null
+++ b/boost/boost/graph/small_world_generator.hpp
@@ -0,0 +1,114 @@
+// Copyright 2004 The Trustees of Indiana University.
+
+// 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)
+
+// Authors: Douglas Gregor
+// Andrew Lumsdaine
+#ifndef BOOST_GRAPH_SMALL_WORLD_GENERATOR_HPP
+#define BOOST_GRAPH_SMALL_WORLD_GENERATOR_HPP
+
+#include <iterator>
+#include <utility>
+#include <boost/random/uniform_01.hpp>
+#include <boost/random/uniform_int.hpp>
+
+namespace boost {
+
+ // Assumes undirected
+ template<typename RandomGenerator, typename Graph>
+ class small_world_iterator
+ {
+ typedef typename graph_traits<Graph>::vertices_size_type
+ vertices_size_type;
+
+ public:
+ typedef std::input_iterator_tag iterator_category;
+ typedef std::pair<vertices_size_type, vertices_size_type> value_type;
+ typedef const value_type& reference;
+ typedef const value_type* pointer;
+ typedef void difference_type;
+
+ small_world_iterator() : gen(0) {}
+ small_world_iterator(RandomGenerator& gen, vertices_size_type n,
+ vertices_size_type k, double prob = 0.0,
+ bool allow_self_loops = false)
+ : gen(&gen), n(n), k(k), prob(prob), source(0),
+ target(allow_self_loops? 0 : 1),
+ allow_self_loops(allow_self_loops),
+ current(0, allow_self_loops? 0 : 1)
+ { }
+
+ reference operator*() const { return current; }
+ pointer operator->() const { return &current; }
+
+ small_world_iterator& operator++()
+ {
+ target = (target + 1) % n;
+ if (target == (source + k/2 + 1) % n) {
+ ++source;
+ if (allow_self_loops) target = source;
+ else target = (source + 1) % n;
+ }
+ current.first = source;
+
+ uniform_01<RandomGenerator, double> rand01(*gen);
+ uniform_int<vertices_size_type> rand_vertex_gen(0, n-1);
+ double x = rand01();
+ *gen = rand01.base(); // GRRRR
+ if (x < prob) {
+ vertices_size_type lower = (source + n - k/2) % n;
+ vertices_size_type upper = (source + k/2) % n;
+ do {
+ current.second = rand_vertex_gen(*gen);
+ } while (current.second >= lower && current.second <= upper
+ || (upper < lower
+ && (current.second >= lower || current.second <= upper)));
+ } else {
+ current.second = target;
+ }
+ return *this;
+ }
+
+ small_world_iterator operator++(int)
+ {
+ small_world_iterator temp(*this);
+ ++(*this);
+ return temp;
+ }
+
+ bool operator==(const small_world_iterator& other) const
+ {
+ if (!gen && other.gen) return other == *this;
+ else if (gen && !other.gen) return source == n;
+ else if (!gen && !other.gen) return true;
+ return source == other.source && target == other.target;
+ }
+
+ bool operator!=(const small_world_iterator& other) const
+ { return !(*this == other); }
+
+ private:
+ void next()
+ {
+ uniform_int<vertices_size_type> rand_vertex(0, n-1);
+ current.first = rand_vertex(*gen);
+ do {
+ current.second = rand_vertex(*gen);
+ } while (current.first == current.second && !allow_self_loops);
+ }
+
+ RandomGenerator* gen;
+ vertices_size_type n;
+ vertices_size_type k;
+ double prob;
+ vertices_size_type source;
+ vertices_size_type target;
+ bool allow_self_loops;
+ value_type current;
+ };
+
+} // end namespace boost
+
+#endif // BOOST_GRAPH_SMALL_WORLD_GENERATOR_HPP
diff --git a/boost/boost/graph/smallest_last_ordering.hpp b/boost/boost/graph/smallest_last_ordering.hpp
new file mode 100644
index 00000000000..648efc61e88
--- /dev/null
+++ b/boost/boost/graph/smallest_last_ordering.hpp
@@ -0,0 +1,122 @@
+//=======================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// 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)
+//=======================================================================
+
+// Revision History:
+// 17 March 2006: Fixed a bug: when updating the degree a vertex
+// could be moved to a wrong bucket. (Roman Dementiev)
+//
+
+
+
+#ifndef BOOST_SMALLEST_LAST_VERTEX_ORDERING_HPP
+#define BOOST_SMALLEST_LAST_VERTEX_ORDERING_HPP
+/*
+ The smallest-last ordering is defined for the loopless graph G with
+ vertices a(j), j = 1,2,...,n where a(j) is the j-th column of A and
+ with edge (a(i),a(j)) if and only if columns i and j have a
+ non-zero in the same row position. The smallest-last ordering is
+ determined recursively by letting list(k), k = n,...,1 be a column
+ with least degree in the subgraph spanned by the un-ordered
+ columns.
+ */
+#include <vector>
+#include <algorithm>
+#include <boost/config.hpp>
+#include <boost/graph/graph_traits.hpp>
+#include <boost/pending/bucket_sorter.hpp>
+
+namespace boost {
+
+ template <class VertexListGraph, class Order, class Degree, class Marker>
+ void
+ smallest_last_vertex_ordering(const VertexListGraph& G, Order order,
+ Degree degree, Marker marker) {
+ typedef typename boost::graph_traits<VertexListGraph> GraphTraits;
+ typedef typename GraphTraits::vertex_descriptor Vertex;
+ //typedef typename GraphTraits::size_type size_type;
+ typedef std::size_t size_type;
+
+ const size_type num = num_vertices(G);
+
+ typedef typename boost::detail::vertex_property_map<VertexListGraph, vertex_index_t>::type ID;
+ typedef bucket_sorter<size_type, Vertex, Degree, ID> BucketSorter;
+
+ BucketSorter degree_bucket_sorter(num, num, degree,
+ get(vertex_index,G));
+
+ smallest_last_vertex_ordering(G, order, degree, marker, degree_bucket_sorter);
+ }
+
+ template <class VertexListGraph, class Order, class Degree,
+ class Marker, class BucketSorter>
+ void
+ smallest_last_vertex_ordering(const VertexListGraph& G, Order order,
+ Degree degree, Marker marker,
+ BucketSorter& degree_buckets) {
+ typedef typename boost::graph_traits<VertexListGraph> GraphTraits;
+ typedef typename GraphTraits::vertex_descriptor Vertex;
+ //typedef typename GraphTraits::size_type size_type;
+ typedef std::size_t size_type;
+
+ const size_type num = num_vertices(G);
+
+ typename GraphTraits::vertex_iterator v, vend;
+ for (boost::tie(v, vend) = vertices(G); v != vend; ++v) {
+ put(marker, *v, num);
+ put(degree, *v, out_degree(*v, G));
+ degree_buckets.push(*v);
+ }
+
+ size_type minimum_degree = 0;
+ size_type current_order = num - 1;
+
+ while ( 1 ) {
+ typedef typename BucketSorter::stack MDStack;
+ MDStack minimum_degree_stack = degree_buckets[minimum_degree];
+ while (minimum_degree_stack.empty())
+ minimum_degree_stack = degree_buckets[++minimum_degree];
+
+ Vertex node = minimum_degree_stack.top();
+ put(order, current_order, node);
+
+ if ( current_order == 0 ) //find all vertices
+ break;
+
+ minimum_degree_stack.pop();
+ put(marker, node, 0); //node has been ordered.
+
+ typename GraphTraits::adjacency_iterator v, vend;
+ for (boost::tie(v,vend) = adjacent_vertices(node, G); v != vend; ++v)
+
+ if ( get(marker,*v) > current_order ) { //*v is unordered vertex
+ put(marker, *v, current_order); //mark the columns adjacent to node
+
+ //delete *v from the bucket sorter
+ degree_buckets.remove(*v);
+
+ //It is possible minimum degree goes down
+ //Here we keep tracking it.
+ put(degree, *v, get(degree, *v) - 1);
+ BOOST_USING_STD_MIN();
+ minimum_degree = min BOOST_PREVENT_MACRO_SUBSTITUTION(minimum_degree, get(degree, *v));
+
+ //reinsert *v in the bucket sorter with the new degree
+ degree_buckets.push(*v);
+ }
+
+ current_order--;
+ }
+
+ //at this point, order[i] = v_i;
+ }
+
+}
+
+#endif
+
diff --git a/boost/boost/graph/stanford_graph.hpp b/boost/boost/graph/stanford_graph.hpp
new file mode 100644
index 00000000000..c98bba1167c
--- /dev/null
+++ b/boost/boost/graph/stanford_graph.hpp
@@ -0,0 +1,565 @@
+//=======================================================================
+// Copyright 1997-2001 University of Notre Dame.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// 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_GRAPH_SGB_GRAPH_HPP
+#define BOOST_GRAPH_SGB_GRAPH_HPP
+
+#include <boost/config.hpp>
+#include <boost/iterator.hpp>
+#include <boost/operators.hpp>
+#include <boost/property_map.hpp>
+#include <boost/graph/graph_traits.hpp>
+#include <boost/graph/properties.hpp>
+
+// Thanks to Andreas Scherer for numerous suggestions and fixes!
+
+// This file adapts a Stanford GraphBase (SGB) Graph pointer into a
+// VertexListGraph. Note that a graph adaptor class is not needed,
+// SGB's Graph* is used as is. The VertexListGraph concept is fulfilled by
+// defining the appropriate non-member functions for Graph*.
+//
+// The PROTOTYPES change file extensions to SGB must be applied so
+// that the SGB functions have real prototypes which are necessary for
+// the C++ compiler. To apply the PROTOTYPES extensions, before you do
+// "make tests install" for SGB do "ln -s PROTOTYPES/* ." to the SGB
+// root directory (or just copy all the files from the PROTOTYPES
+// directory to the SGB root directory).
+//
+extern "C" {
+ // We include all global definitions for the general stuff
+ // of The Stanford GraphBase and its various graph generator
+ // functions by reading all SGB headerfiles as in section 2 of
+ // the "test_sample" program.
+#include <gb_graph.h> /* SGB data structures */
+#include <gb_io.h> /* SGB input/output routines */
+#include <gb_flip.h> /* random number generator */
+#include <gb_dijk.h> /* routines for shortest paths */
+#include <gb_basic.h> /* the basic graph operations */
+#undef empty /* avoid name clash with C++ standard library */
+ inline Graph* empty( long n ) /* and provide workaround */
+ { return board(n,0L,0L,0L,2L,0L,0L); }
+#include <gb_books.h> /* graphs based on literature */
+#include <gb_econ.h> /* graphs based on economic data */
+#include <gb_games.h> /* graphs based on football scores */
+#include <gb_gates.h> /* graphs based on logic circuits */
+#undef val /* avoid name clash with g++ headerfile stl_tempbuf.h */
+ // val ==> Vertex::x.I
+#include <gb_lisa.h> /* graphs based on Mona Lisa */
+#include <gb_miles.h> /* graphs based on mileage data */
+#include <gb_plane.h> /* planar graphs */
+#include <gb_raman.h> /* Ramanujan graphs */
+#include <gb_rand.h> /* random graphs */
+#include <gb_roget.h> /* graphs based on Roget's Thesaurus */
+#include <gb_save.h> /* we save results in ASCII format */
+#include <gb_words.h> /* five-letter-word graphs */
+#undef weight /* avoid name clash with BGL parameter */
+ // weight ==> Vertex::u.I
+}
+
+namespace boost {
+ class sgb_edge;
+}
+
+class sgb_out_edge_iterator;
+class sgb_adj_iterator;
+class sgb_vertex_iterator;
+
+namespace boost {
+ typedef Graph* sgb_graph_ptr;
+ typedef const Graph* sgb_const_graph_ptr;
+
+ struct sgb_traversal_tag :
+ public virtual vertex_list_graph_tag,
+ public virtual incidence_graph_tag,
+ public virtual adjacency_graph_tag { };
+
+ template <> struct graph_traits<sgb_graph_ptr> {
+ typedef Vertex* vertex_descriptor;
+ typedef boost::sgb_edge edge_descriptor;
+ typedef sgb_out_edge_iterator out_edge_iterator;
+ typedef void in_edge_iterator;
+ typedef sgb_adj_iterator adjacency_iterator;
+ typedef sgb_vertex_iterator vertex_iterator;
+ typedef void edge_iterator;
+ typedef long vertices_size_type;
+ typedef long edge_size_type;
+ typedef long degree_size_type;
+ typedef directed_tag directed_category;
+ typedef sgb_traversal_tag traversal_category;
+ typedef allow_parallel_edge_tag edge_parallel_category;
+ };
+ template <> struct graph_traits<sgb_const_graph_ptr> {
+ typedef Vertex* vertex_descriptor;
+ typedef boost::sgb_edge edge_descriptor;
+ typedef sgb_out_edge_iterator out_edge_iterator;
+ typedef void in_edge_iterator;
+ typedef sgb_adj_iterator adjacency_iterator;
+ typedef sgb_vertex_iterator vertex_iterator;
+ typedef void edge_iterator;
+ typedef long vertices_size_type;
+ typedef long edge_size_type;
+ typedef long degree_size_type;
+ typedef directed_tag directed_category;
+ typedef sgb_traversal_tag traversal_category;
+ typedef allow_parallel_edge_tag edge_parallel_category;
+ };
+}
+
+namespace boost {
+
+ struct edge_length_t {
+ typedef edge_property_tag kind;
+ };
+
+ // We could just use Arc* as the edge descriptor type, but
+ // we want to add the source(e,g) function which requires
+ // that we carry along a pointer to the source vertex.
+ class sgb_edge {
+ typedef sgb_edge self;
+ public:
+ sgb_edge() : _arc(0), _src(0) { }
+ sgb_edge(Arc* a, Vertex* s) : _arc(a), _src(s) { }
+ friend Vertex* source(self e, sgb_const_graph_ptr) { return e._src; }
+ friend Vertex* target(self e, sgb_const_graph_ptr) { return e._arc->tip; }
+ friend bool operator==(const self& a, const self& b) {
+ return a._arc == b._arc; }
+ friend bool operator!=(const self& a, const self& b) {
+ return a._arc != b._arc; }
+#if !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS)
+ template <class Ref> friend class sgb_edge_length_map;
+ template <class Tag, class Ref> friend class sgb_edge_util_map;
+ friend long get(edge_length_t, const sgb_graph_ptr&, const sgb_edge& key);
+ friend long get(edge_length_t, const sgb_const_graph_ptr&, const sgb_edge& key);
+ friend void put(edge_length_t, sgb_graph_ptr&, const sgb_edge& key, long value);
+ protected:
+#endif
+ Arc* _arc;
+ Vertex* _src;
+ };
+} // namespace boost
+
+ class sgb_out_edge_iterator
+ : public boost::forward_iterator_helper<
+ sgb_out_edge_iterator, boost::sgb_edge,
+ std::ptrdiff_t, boost::sgb_edge*, boost::sgb_edge>
+ {
+ typedef sgb_out_edge_iterator self;
+ public:
+ sgb_out_edge_iterator() : _src(0), _arc(0) {}
+ sgb_out_edge_iterator(Vertex* s, Arc* d) : _src(s), _arc(d) {}
+ boost::sgb_edge operator*() { return boost::sgb_edge(_arc, _src); }
+ self& operator++() { _arc = _arc->next; return *this; }
+ friend bool operator==(const self& x, const self& y) {
+ return x._arc == y._arc; }
+ protected:
+ Vertex* _src;
+ Arc* _arc;
+ };
+
+ class sgb_adj_iterator
+ : public boost::forward_iterator_helper<
+ sgb_adj_iterator, Vertex*, std::ptrdiff_t, Vertex**,Vertex*>
+ {
+ typedef sgb_adj_iterator self;
+ public:
+ sgb_adj_iterator() : _arc(0) {}
+ sgb_adj_iterator(Arc* d) : _arc(d) {}
+ Vertex* operator*() { return _arc->tip; }
+ self& operator++() { _arc = _arc->next; return *this; }
+ friend bool operator==(const self& x, const self& y) {
+ return x._arc == y._arc; }
+ protected:
+ Arc* _arc;
+ };
+
+ // The reason we have this instead of just using Vertex* is that we
+ // want to use Vertex* as the vertex_descriptor instead of just
+ // Vertex, which avoids problems with boost passing vertex descriptors
+ // by value and how that interacts with the sgb_vertex_id_map.
+ class sgb_vertex_iterator
+ : public boost::forward_iterator_helper<
+ sgb_vertex_iterator, Vertex*, std::ptrdiff_t, Vertex**, Vertex*>
+ {
+ typedef sgb_vertex_iterator self;
+ public:
+ sgb_vertex_iterator() : _v(0) { }
+ sgb_vertex_iterator(Vertex* v) : _v(v) { }
+ Vertex* operator*() { return _v; }
+ self& operator++() { ++_v; return *this; }
+ friend bool operator==(const self& x, const self& y) {
+ return x._v == y._v; }
+ protected:
+ Vertex* _v;
+ };
+
+namespace boost {
+
+ inline std::pair<sgb_vertex_iterator,sgb_vertex_iterator>
+ vertices(sgb_const_graph_ptr g)
+ {
+ return std::make_pair(sgb_vertex_iterator(g->vertices),
+ sgb_vertex_iterator(g->vertices + g->n));
+ }
+
+ inline std::pair<sgb_out_edge_iterator,sgb_out_edge_iterator>
+ out_edges(Vertex* u, sgb_const_graph_ptr)
+ {
+ return std::make_pair( sgb_out_edge_iterator(u, u->arcs),
+ sgb_out_edge_iterator(u, 0) );
+ }
+
+ inline boost::graph_traits<sgb_graph_ptr>::degree_size_type
+ out_degree(Vertex* u, sgb_const_graph_ptr g)
+ {
+ boost::graph_traits<sgb_graph_ptr>::out_edge_iterator i, i_end;
+ boost::tie(i, i_end) = out_edges(u, g);
+ return std::distance(i, i_end);
+ }
+
+ // in_edges?
+
+ inline std::pair<sgb_adj_iterator,sgb_adj_iterator>
+ adjacent_vertices(Vertex* u, sgb_const_graph_ptr)
+ {
+ return std::make_pair( sgb_adj_iterator(u->arcs),
+ sgb_adj_iterator(0) );
+ }
+
+ inline long num_vertices(sgb_const_graph_ptr g) { return g->n; }
+ inline long num_edges(sgb_const_graph_ptr g) { return g->m; }
+
+ inline Vertex* vertex(long v, sgb_const_graph_ptr g)
+ { return g->vertices + v; }
+
+ // Various Property Maps
+
+ // Vertex ID
+ class sgb_vertex_id_map
+ : public boost::put_get_helper<long, sgb_vertex_id_map>
+ {
+ public:
+ typedef boost::readable_property_map_tag category;
+ typedef long value_type;
+ typedef long reference;
+ typedef Vertex* key_type;
+ sgb_vertex_id_map() : _g(0) { }
+ sgb_vertex_id_map(sgb_graph_ptr g) : _g(g) { }
+ long operator[](Vertex* v) const { return v - _g->vertices; }
+ protected:
+ sgb_graph_ptr _g;
+ };
+ inline sgb_vertex_id_map get(vertex_index_t, sgb_graph_ptr g) {
+ return sgb_vertex_id_map(g);
+ }
+
+ // Vertex Name
+ class sgb_vertex_name_map
+ : public boost::put_get_helper<char*, sgb_vertex_name_map>
+ {
+ public:
+ typedef boost::readable_property_map_tag category;
+ typedef char* value_type;
+ typedef char* reference;
+ typedef Vertex* key_type;
+ char* operator[](Vertex* v) const { return v->name; }
+ };
+ inline sgb_vertex_name_map get(vertex_name_t, sgb_graph_ptr) {
+ return sgb_vertex_name_map();
+ }
+
+ // Vertex Property Tags
+#define SGB_PROPERTY_TAG(KIND,TAG) \
+ template <class T> struct TAG##_property { \
+ typedef KIND##_property_tag kind; \
+ typedef T type; \
+ };
+ SGB_PROPERTY_TAG(vertex, u)
+ SGB_PROPERTY_TAG(vertex, v)
+ SGB_PROPERTY_TAG(vertex, w)
+ SGB_PROPERTY_TAG(vertex, x)
+ SGB_PROPERTY_TAG(vertex, y)
+ SGB_PROPERTY_TAG(vertex, z)
+
+ // Edge Property Tags
+ SGB_PROPERTY_TAG(edge, a)
+ SGB_PROPERTY_TAG(edge, b)
+
+ // Various Utility Maps
+
+ // helpers
+ inline Vertex*& get_util(util& u, Vertex*) { return u.V; }
+ inline Arc*& get_util(util& u, Arc*) { return u.A; }
+ inline sgb_graph_ptr& get_util(util& u, sgb_graph_ptr) { return u.G; }
+ inline char*& get_util(util& u, char*) { return u.S; }
+ inline long& get_util(util& u, long) { return u.I; }
+
+#define SGB_GET_UTIL_FIELD(KIND,X) \
+ template <class T> \
+ inline T& get_util_field(KIND* k, X##_property<T>) { \
+ return get_util(k->X, T()); }
+
+ SGB_GET_UTIL_FIELD(Vertex, u)
+ SGB_GET_UTIL_FIELD(Vertex, v)
+ SGB_GET_UTIL_FIELD(Vertex, w)
+ SGB_GET_UTIL_FIELD(Vertex, x)
+ SGB_GET_UTIL_FIELD(Vertex, y)
+ SGB_GET_UTIL_FIELD(Vertex, z)
+
+ SGB_GET_UTIL_FIELD(Arc, a)
+ SGB_GET_UTIL_FIELD(Arc, b)
+
+ // Vertex Utility Map
+ template <class Tag, class Ref>
+ class sgb_vertex_util_map
+ : public boost::put_get_helper<Ref, sgb_vertex_util_map<Tag, Ref> >
+ {
+ public:
+ typedef boost::lvalue_property_map_tag category;
+ typedef typename Tag::type value_type;
+ typedef Vertex* key_type;
+ typedef Ref reference;
+ reference operator[](Vertex* v) const {
+ return get_util_field(v, Tag());
+ }
+ };
+
+ // Edge Utility Map
+ template <class Tag, class Ref>
+ class sgb_edge_util_map
+ : public boost::put_get_helper<Ref, sgb_edge_util_map<Tag, Ref> >
+ {
+ public:
+ typedef boost::lvalue_property_map_tag category;
+ typedef typename Tag::type value_type;
+ typedef Vertex* key_type;
+ typedef Ref reference;
+ reference operator[](const sgb_edge& e) const {
+ return get_util_field(e._arc, Tag());
+ }
+ };
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+ template <class Tag>
+ inline sgb_vertex_util_map<Tag, const typename Tag::type&>
+ get_property_map(Tag, const sgb_graph_ptr& g, vertex_property_tag) {
+ return sgb_vertex_util_map<Tag, const typename Tag::type&>();
+ }
+ template <class Tag>
+ inline sgb_vertex_util_map<Tag, typename Tag::type&>
+ get_property_map(Tag, sgb_graph_ptr& g, vertex_property_tag) {
+ return sgb_vertex_util_map<Tag, typename Tag::type&>();
+ }
+
+ template <class Tag>
+ inline sgb_edge_util_map<Tag, const typename Tag::type&>
+ get_property_map(Tag, const sgb_graph_ptr& g, edge_property_tag) {
+ return sgb_edge_util_map<Tag, const typename Tag::type&>();
+ }
+ template <class Tag>
+ inline sgb_edge_util_map<Tag, typename Tag::type&>
+ get_property_map(Tag, sgb_graph_ptr& g, edge_property_tag) {
+ return sgb_edge_util_map<Tag, typename Tag::type&>();
+ }
+
+#endif // ! BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+ // Edge Length Access
+ template <class Ref>
+ class sgb_edge_length_map
+ : public boost::put_get_helper<Ref, sgb_edge_length_map<Ref> >
+ {
+ public:
+ typedef boost::lvalue_property_map_tag category;
+ typedef long value_type;
+ typedef sgb_edge key_type;
+ typedef Ref reference;
+ reference operator[](const sgb_edge& e) const {
+ return e._arc->len;
+ }
+ };
+
+ inline sgb_edge_length_map<const long&>
+ get(edge_length_t, const sgb_graph_ptr&) {
+ return sgb_edge_length_map<const long&>();
+ }
+ inline sgb_edge_length_map<const long&>
+ get(edge_length_t, const sgb_const_graph_ptr&) {
+ return sgb_edge_length_map<const long&>();
+ }
+ inline sgb_edge_length_map<long&>
+ get(edge_length_t, sgb_graph_ptr&) {
+ return sgb_edge_length_map<long&>();
+ }
+ inline long
+ get(edge_length_t, const sgb_graph_ptr&, const sgb_edge& key) {
+ return key._arc->len;
+ }
+ inline long
+ get(edge_length_t, const sgb_const_graph_ptr&, const sgb_edge& key) {
+ return key._arc->len;
+ }
+ inline void
+ put(edge_length_t, sgb_graph_ptr&, const sgb_edge& key, long value)
+ {
+ key._arc->len = value;
+ }
+
+ // Property Map Traits Classes
+ template <>
+ struct property_map<sgb_graph_ptr, edge_length_t> {
+ typedef sgb_edge_length_map<long&> type;
+ typedef sgb_edge_length_map<const long&> const_type;
+ };
+ template <>
+ struct property_map<sgb_graph_ptr, vertex_index_t> {
+ typedef sgb_vertex_id_map type;
+ typedef sgb_vertex_id_map const_type;
+ };
+ template <>
+ struct property_map<sgb_graph_ptr, vertex_name_t> {
+ typedef sgb_vertex_name_map type;
+ typedef sgb_vertex_name_map const_type;
+ };
+
+ template <>
+ struct property_map<sgb_const_graph_ptr, edge_length_t> {
+ typedef sgb_edge_length_map<const long&> const_type;
+ };
+ template <>
+ struct property_map<sgb_const_graph_ptr, vertex_index_t> {
+ typedef sgb_vertex_id_map const_type;
+ };
+ template <>
+ struct property_map<sgb_const_graph_ptr, vertex_name_t> {
+ typedef sgb_vertex_name_map const_type;
+ };
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+ namespace detail {
+ template <class Kind, class PropertyTag>
+ struct sgb_choose_property_map { };
+ template <class PropertyTag>
+ struct sgb_choose_property_map<vertex_property_tag, PropertyTag> {
+ typedef typename PropertyTag::type value_type;
+ typedef sgb_vertex_util_map<PropertyTag, value_type&> type;
+ typedef sgb_vertex_util_map<PropertyTag, const value_type&> const_type;
+ };
+ template <class PropertyTag>
+ struct sgb_choose_property_map<edge_property_tag, PropertyTag> {
+ typedef typename PropertyTag::type value_type;
+ typedef sgb_edge_util_map<PropertyTag, value_type&> type;
+ typedef sgb_edge_util_map<PropertyTag, const value_type&> const_type;
+ };
+ } // namespace detail
+ template <class PropertyTag>
+ struct property_map<sgb_graph_ptr, PropertyTag> {
+ typedef typename property_kind<PropertyTag>::type Kind;
+ typedef detail::sgb_choose_property_map<Kind, PropertyTag> Choice;
+ typedef typename Choice::type type;
+ typedef typename Choice::const_type const_type;
+ };
+ template <class PropertyTag>
+ struct property_map<sgb_const_graph_ptr, PropertyTag> {
+ typedef typename property_kind<PropertyTag>::type Kind;
+ typedef detail::sgb_choose_property_map<Kind, PropertyTag> Choice;
+ typedef typename Choice::const_type const_type;
+ };
+
+#define SGB_UTIL_ACCESSOR(KIND,X) \
+ template <class T> \
+ inline sgb_##KIND##_util_map< X##_property<T>, T&> \
+ get(X##_property<T>, sgb_graph_ptr&) { \
+ return sgb_##KIND##_util_map< X##_property<T>, T&>(); \
+ } \
+ template <class T> \
+ inline sgb_##KIND##_util_map< X##_property<T>, const T&> \
+ get(X##_property<T>, const sgb_graph_ptr&) { \
+ return sgb_##KIND##_util_map< X##_property<T>, const T&>(); \
+ } \
+ template <class T> \
+ inline sgb_##KIND##_util_map< X##_property<T>, const T&> \
+ get(X##_property<T>, const sgb_const_graph_ptr&) { \
+ return sgb_##KIND##_util_map< X##_property<T>, const T&>(); \
+ } \
+ template <class T, class Key> \
+ inline typename \
+ sgb_##KIND##_util_map< X##_property<T>, const T&>::value_type \
+ get(X##_property<T>, const sgb_graph_ptr&, const Key& key) { \
+ return sgb_##KIND##_util_map< X##_property<T>, const T&>()[key]; \
+ } \
+ template <class T, class Key> \
+ inline typename \
+ sgb_##KIND##_util_map< X##_property<T>, const T&>::value_type \
+ get(X##_property<T>, const sgb_const_graph_ptr&, const Key& key) { \
+ return sgb_##KIND##_util_map< X##_property<T>, const T&>()[key]; \
+ } \
+ template <class T, class Key, class Value> \
+ inline void \
+ put(X##_property<T>, sgb_graph_ptr&, const Key& key, const Value& value) { \
+ sgb_##KIND##_util_map< X##_property<T>, T&>()[key] = value; \
+ }
+
+#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#define SGB_UTIL_ACCESSOR_TYPE(KIND,TAG,TYPE) \
+ inline sgb_##KIND##_util_map< TAG<TYPE>, TYPE& > \
+ get(TAG<TYPE>, sgb_graph_ptr&) { \
+ return sgb_##KIND##_util_map< TAG<TYPE>, TYPE& >(); \
+ } \
+ inline sgb_##KIND##_util_map< TAG<TYPE>, const TYPE& > \
+ get(TAG<TYPE>, const sgb_graph_ptr&) { \
+ return sgb_##KIND##_util_map< TAG<TYPE>, const TYPE& >(); \
+ } \
+ inline sgb_##KIND##_util_map< TAG<TYPE>, const TYPE& > \
+ get(TAG<TYPE>, const sgb_const_graph_ptr&) { \
+ return sgb_##KIND##_util_map< TAG<TYPE>, const TYPE& >(); \
+ } \
+ template <class Key> \
+ inline typename sgb_##KIND##_util_map< TAG<TYPE>, const TYPE& >::value_type \
+ get(TAG<TYPE>, const sgb_graph_ptr&, const Key& key) { \
+ return sgb_##KIND##_util_map< TAG<TYPE>, const TYPE& >()[key]; \
+ } \
+ template <class Key> \
+ inline typename sgb_##KIND##_util_map< TAG<TYPE>, const TYPE& >::value_type \
+ get(TAG<TYPE>, const sgb_const_graph_ptr&, const Key& key) { \
+ return sgb_##KIND##_util_map< TAG<TYPE>, const TYPE& >()[key]; \
+ } \
+ template <class Key, class Value> \
+ inline void \
+ put(TAG<TYPE>, sgb_graph_ptr&, const Key& key, const Value& value) { \
+ sgb_##KIND##_util_map< TAG<TYPE>, TYPE& >()[key] = value; \
+ } \
+ template <> struct property_map<sgb_graph_ptr, TAG<TYPE> > { \
+ typedef sgb_##KIND##_util_map< TAG<TYPE>, TYPE&> type; \
+ typedef sgb_##KIND##_util_map< TAG<TYPE>, const TYPE&> const_type; \
+ }
+
+#define SGB_UTIL_ACCESSOR(KIND,TAG) \
+ SGB_UTIL_ACCESSOR_TYPE(KIND, TAG##_property, Vertex*); \
+ SGB_UTIL_ACCESSOR_TYPE(KIND, TAG##_property, Arc*); \
+ SGB_UTIL_ACCESSOR_TYPE(KIND, TAG##_property, sgb_graph_ptr); \
+ SGB_UTIL_ACCESSOR_TYPE(KIND, TAG##_property, long); \
+ SGB_UTIL_ACCESSOR_TYPE(KIND, TAG##_property, char*);
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+ SGB_UTIL_ACCESSOR(vertex, u)
+ SGB_UTIL_ACCESSOR(vertex, v)
+ SGB_UTIL_ACCESSOR(vertex, w)
+ SGB_UTIL_ACCESSOR(vertex, x)
+ SGB_UTIL_ACCESSOR(vertex, y)
+ SGB_UTIL_ACCESSOR(vertex, z)
+
+ SGB_UTIL_ACCESSOR(edge, a)
+ SGB_UTIL_ACCESSOR(edge, b)
+
+} // namespace boost
+
+#endif // BOOST_GRAPH_SGB_GRAPH_HPP
diff --git a/boost/boost/graph/strong_components.hpp b/boost/boost/graph/strong_components.hpp
new file mode 100644
index 00000000000..0ed0b4a19b1
--- /dev/null
+++ b/boost/boost/graph/strong_components.hpp
@@ -0,0 +1,334 @@
+//
+//=======================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// 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_GRAPH_STRONG_COMPONENTS_HPP
+#define BOOST_GRAPH_STRONG_COMPONENTS_HPP
+
+#include <stack>
+#include <boost/config.hpp>
+#include <boost/graph/depth_first_search.hpp>
+#include <boost/type_traits/conversion_traits.hpp>
+#include <boost/static_assert.hpp>
+
+namespace boost {
+
+ //==========================================================================
+ // This is Tarjan's algorithm for strongly connected components
+ // from his paper "Depth first search and linear graph algorithms".
+ // It calculates the components in a single application of DFS.
+ // We implement the algorithm as a dfs-visitor.
+
+ namespace detail {
+
+ template <typename ComponentMap, typename RootMap, typename DiscoverTime,
+ typename Stack>
+ class tarjan_scc_visitor : public dfs_visitor<>
+ {
+ typedef typename property_traits<ComponentMap>::value_type comp_type;
+ typedef typename property_traits<DiscoverTime>::value_type time_type;
+ public:
+ tarjan_scc_visitor(ComponentMap comp_map, RootMap r, DiscoverTime d,
+ comp_type& c_, Stack& s_)
+ : c(c_), comp(comp_map), root(r), discover_time(d),
+ dfs_time(time_type()), s(s_) { }
+
+ template <typename Graph>
+ void discover_vertex(typename graph_traits<Graph>::vertex_descriptor v,
+ const Graph&) {
+ put(root, v, v);
+ put(comp, v, (std::numeric_limits<comp_type>::max)());
+ put(discover_time, v, dfs_time++);
+ s.push(v);
+ }
+ template <typename Graph>
+ void finish_vertex(typename graph_traits<Graph>::vertex_descriptor v,
+ const Graph& g) {
+ typename graph_traits<Graph>::vertex_descriptor w;
+ typename graph_traits<Graph>::out_edge_iterator ei, ei_end;
+ for (tie(ei, ei_end) = out_edges(v, g); ei != ei_end; ++ei) {
+ w = target(*ei, g);
+ if (get(comp, w) == (std::numeric_limits<comp_type>::max)())
+ put(root, v, this->min_discover_time(get(root,v), get(root,w)));
+ }
+ if (get(root, v) == v) {
+ do {
+ w = s.top(); s.pop();
+ put(comp, w, c);
+ } while (w != v);
+ ++c;
+ }
+ }
+ private:
+ template <typename Vertex>
+ Vertex min_discover_time(Vertex u, Vertex v) {
+ return get(discover_time, u) < get(discover_time,v) ? u : v;
+ }
+
+ comp_type& c;
+ ComponentMap comp;
+ RootMap root;
+ DiscoverTime discover_time;
+ time_type dfs_time;
+ Stack& s;
+ };
+
+ template <class Graph, class ComponentMap, class RootMap,
+ class DiscoverTime, class P, class T, class R>
+ typename property_traits<ComponentMap>::value_type
+ strong_components_impl
+ (const Graph& g, // Input
+ ComponentMap comp, // Output
+ // Internal record keeping
+ RootMap root,
+ DiscoverTime discover_time,
+ const bgl_named_params<P, T, R>& params)
+ {
+ typedef typename graph_traits<Graph>::vertex_descriptor Vertex;
+ function_requires< ReadWritePropertyMapConcept<ComponentMap, Vertex> >();
+ function_requires< ReadWritePropertyMapConcept<RootMap, Vertex> >();
+ typedef typename property_traits<RootMap>::value_type RootV;
+ function_requires< ConvertibleConcept<RootV, Vertex> >();
+ function_requires< ReadWritePropertyMapConcept<DiscoverTime, Vertex> >();
+
+ typename property_traits<ComponentMap>::value_type total = 0;
+
+ std::stack<Vertex> s;
+ detail::tarjan_scc_visitor<ComponentMap, RootMap, DiscoverTime,
+ std::stack<Vertex> >
+ vis(comp, root, discover_time, total, s);
+ depth_first_search(g, params.visitor(vis));
+ return total;
+ }
+
+ //-------------------------------------------------------------------------
+ // The dispatch functions handle the defaults for the rank and discover
+ // time property maps.
+ // dispatch with class specialization to avoid VC++ bug
+
+ template <class DiscoverTimeMap>
+ struct strong_comp_dispatch2 {
+ template <class Graph, class ComponentMap, class RootMap, class P, class T, class R>
+ inline static typename property_traits<ComponentMap>::value_type
+ apply(const Graph& g,
+ ComponentMap comp,
+ RootMap r_map,
+ const bgl_named_params<P, T, R>& params,
+ DiscoverTimeMap time_map)
+ {
+ return strong_components_impl(g, comp, r_map, time_map, params);
+ }
+ };
+
+
+ template <>
+ struct strong_comp_dispatch2<detail::error_property_not_found> {
+ template <class Graph, class ComponentMap, class RootMap,
+ class P, class T, class R>
+ inline static typename property_traits<ComponentMap>::value_type
+ apply(const Graph& g,
+ ComponentMap comp,
+ RootMap r_map,
+ const bgl_named_params<P, T, R>& params,
+ detail::error_property_not_found)
+ {
+ typedef typename graph_traits<Graph>::vertices_size_type size_type;
+ size_type n = num_vertices(g) > 0 ? num_vertices(g) : 1;
+ std::vector<size_type> time_vec(n);
+ return strong_components_impl
+ (g, comp, r_map,
+ make_iterator_property_map(time_vec.begin(), choose_const_pmap
+ (get_param(params, vertex_index),
+ g, vertex_index), time_vec[0]),
+ params);
+ }
+ };
+
+ template <class Graph, class ComponentMap, class RootMap,
+ class P, class T, class R, class DiscoverTimeMap>
+ inline typename property_traits<ComponentMap>::value_type
+ scc_helper2(const Graph& g,
+ ComponentMap comp,
+ RootMap r_map,
+ const bgl_named_params<P, T, R>& params,
+ DiscoverTimeMap time_map)
+ {
+ return strong_comp_dispatch2<DiscoverTimeMap>::apply(g, comp, r_map, params, time_map);
+ }
+
+ template <class RootMap>
+ struct strong_comp_dispatch1 {
+
+ template <class Graph, class ComponentMap, class P, class T, class R>
+ inline static typename property_traits<ComponentMap>::value_type
+ apply(const Graph& g,
+ ComponentMap comp,
+ const bgl_named_params<P, T, R>& params,
+ RootMap r_map)
+ {
+ return scc_helper2(g, comp, r_map, params, get_param(params, vertex_discover_time));
+ }
+ };
+ template <>
+ struct strong_comp_dispatch1<detail::error_property_not_found> {
+
+ template <class Graph, class ComponentMap,
+ class P, class T, class R>
+ inline static typename property_traits<ComponentMap>::value_type
+ apply(const Graph& g,
+ ComponentMap comp,
+ const bgl_named_params<P, T, R>& params,
+ detail::error_property_not_found)
+ {
+ typedef typename graph_traits<Graph>::vertex_descriptor Vertex;
+ typename std::vector<Vertex>::size_type
+ n = num_vertices(g) > 0 ? num_vertices(g) : 1;
+ std::vector<Vertex> root_vec(n);
+ return scc_helper2
+ (g, comp,
+ make_iterator_property_map(root_vec.begin(), choose_const_pmap
+ (get_param(params, vertex_index),
+ g, vertex_index), root_vec[0]),
+ params,
+ get_param(params, vertex_discover_time));
+ }
+ };
+
+ template <class Graph, class ComponentMap, class RootMap,
+ class P, class T, class R>
+ inline typename property_traits<ComponentMap>::value_type
+ scc_helper1(const Graph& g,
+ ComponentMap comp,
+ const bgl_named_params<P, T, R>& params,
+ RootMap r_map)
+ {
+ return detail::strong_comp_dispatch1<RootMap>::apply(g, comp, params,
+ r_map);
+ }
+
+ } // namespace detail
+
+ template <class Graph, class ComponentMap,
+ class P, class T, class R>
+ inline typename property_traits<ComponentMap>::value_type
+ strong_components(const Graph& g, ComponentMap comp,
+ const bgl_named_params<P, T, R>& params)
+ {
+ typedef typename graph_traits<Graph>::directed_category DirCat;
+ BOOST_STATIC_ASSERT((is_convertible<DirCat*, directed_tag*>::value == true));
+ return detail::scc_helper1(g, comp, params,
+ get_param(params, vertex_root_t()));
+ }
+
+ template <class Graph, class ComponentMap>
+ inline typename property_traits<ComponentMap>::value_type
+ strong_components(const Graph& g, ComponentMap comp)
+ {
+ typedef typename graph_traits<Graph>::directed_category DirCat;
+ BOOST_STATIC_ASSERT((is_convertible<DirCat*, directed_tag*>::value == true));
+ bgl_named_params<int, int> params(0);
+ return strong_components(g, comp, params);
+ }
+
+ template <typename Graph, typename ComponentMap, typename ComponentLists>
+ void build_component_lists
+ (const Graph& g,
+ typename graph_traits<Graph>::vertices_size_type num_scc,
+ ComponentMap component_number,
+ ComponentLists& components)
+ {
+ components.resize(num_scc);
+ typename graph_traits<Graph>::vertex_iterator vi, vi_end;
+ for (tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
+ components[component_number[*vi]].push_back(*vi);
+ }
+
+
+} // namespace boost
+
+#include <queue>
+#include <vector>
+#include <boost/graph/transpose_graph.hpp>
+#include <boost/pending/indirect_cmp.hpp>
+#include <boost/graph/connected_components.hpp> // for components_recorder
+
+namespace boost {
+
+ //==========================================================================
+ // This is the version of strongly connected components from
+ // "Intro. to Algorithms" by Cormen, Leiserson, Rivest, which was
+ // adapted from "Data Structure and Algorithms" by Aho, Hopcroft,
+ // and Ullman, who credit the algorithm to S.R. Kosaraju and M. Sharir.
+ // The algorithm is based on computing DFS forests the graph
+ // and its transpose.
+
+ // This algorithm is slower than Tarjan's by a constant factor, uses
+ // more memory, and puts more requirements on the graph type.
+
+ template <class Graph, class DFSVisitor, class ComponentsMap,
+ class DiscoverTime, class FinishTime,
+ class ColorMap>
+ typename property_traits<ComponentsMap>::value_type
+ kosaraju_strong_components(Graph& G, ComponentsMap c,
+ FinishTime finish_time, ColorMap color)
+ {
+ function_requires< MutableGraphConcept<Graph> >();
+ // ...
+
+ typedef typename graph_traits<Graph>::vertex_descriptor Vertex;
+ typedef typename property_traits<ColorMap>::value_type ColorValue;
+ typedef color_traits<ColorValue> Color;
+ typename property_traits<FinishTime>::value_type time = 0;
+ depth_first_search
+ (G, make_dfs_visitor(stamp_times(finish_time, time, on_finish_vertex())),
+ color);
+
+ Graph G_T(num_vertices(G));
+ transpose_graph(G, G_T);
+
+ typedef typename property_traits<ComponentsMap>::value_type count_type;
+
+ count_type c_count(0);
+ detail::components_recorder<ComponentsMap>
+ vis(c, c_count);
+
+ // initialize G_T
+ typename graph_traits<Graph>::vertex_iterator ui, ui_end;
+ for (tie(ui, ui_end) = vertices(G_T); ui != ui_end; ++ui)
+ put(color, *ui, Color::white());
+
+ typedef typename property_traits<FinishTime>::value_type D;
+ typedef indirect_cmp< FinishTime, std::less<D> > Compare;
+
+ Compare fl(finish_time);
+ std::priority_queue<Vertex, std::vector<Vertex>, Compare > Q(fl);
+
+ typename graph_traits<Graph>::vertex_iterator i, j, iend, jend;
+ tie(i, iend) = vertices(G_T);
+ tie(j, jend) = vertices(G);
+ for ( ; i != iend; ++i, ++j) {
+ put(finish_time, *i, get(finish_time, *j));
+ Q.push(*i);
+ }
+
+ while ( !Q.empty() ) {
+ Vertex u = Q.top();
+ Q.pop();
+ if (get(color, u) == Color::white()) {
+ depth_first_visit(G_T, u, vis, color);
+ ++c_count;
+ }
+ }
+ return c_count;
+ }
+
+} // namespace boost
+
+#endif // BOOST_GRAPH_STRONG_COMPONENTS_HPP
diff --git a/boost/boost/graph/subgraph.hpp b/boost/boost/graph/subgraph.hpp
new file mode 100644
index 00000000000..91d2e05fcfa
--- /dev/null
+++ b/boost/boost/graph/subgraph.hpp
@@ -0,0 +1,872 @@
+//=======================================================================
+// Copyright 2001 University of Notre Dame.
+// Authors: Jeremy G. Siek and Lie-Quan Lee
+//
+// 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_SUBGRAPH_HPP
+#define BOOST_SUBGRAPH_HPP
+
+// UNDER CONSTRUCTION
+
+#include <boost/config.hpp>
+#include <list>
+#include <vector>
+#include <map>
+#include <cassert>
+#include <boost/graph/graph_traits.hpp>
+#include <boost/graph/properties.hpp>
+#include <boost/iterator/indirect_iterator.hpp>
+
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost {
+
+ struct subgraph_tag { };
+
+ // Invariants of an induced subgraph:
+ // - If vertex u is in subgraph g, then u must be in g.parent().
+ // - If edge e is in subgraph g, then e must be in g.parent().
+ // - If edge e=(u,v) is in the root graph, then edge e
+ // is also in any subgraph that contains both vertex u and v.
+
+ // The Graph template parameter must have a vertex_index
+ // and edge_index internal property. It is assumed that
+ // the vertex indices are assigned automatically by the
+ // graph during a call to add_vertex(). It is not
+ // assumed that the edge vertices are assigned automatically,
+ // they are explicitly assigned here.
+
+ template <typename Graph>
+ class subgraph {
+ typedef graph_traits<Graph> Traits;
+ typedef std::list<subgraph<Graph>*> ChildrenList;
+ public:
+ // Graph requirements
+ typedef typename Traits::vertex_descriptor vertex_descriptor;
+ typedef typename Traits::edge_descriptor edge_descriptor;
+ typedef typename Traits::directed_category directed_category;
+ typedef typename Traits::edge_parallel_category edge_parallel_category;
+ typedef typename Traits::traversal_category traversal_category;
+
+ static vertex_descriptor null_vertex()
+ {
+ return Traits::null_vertex();
+ }
+
+
+ // IncidenceGraph requirements
+ typedef typename Traits::out_edge_iterator out_edge_iterator;
+ typedef typename Traits::degree_size_type degree_size_type;
+
+ // AdjacencyGraph requirements
+ typedef typename Traits::adjacency_iterator adjacency_iterator;
+
+ // VertexListGraph requirements
+ typedef typename Traits::vertex_iterator vertex_iterator;
+ typedef typename Traits::vertices_size_type vertices_size_type;
+
+ // EdgeListGraph requirements
+ typedef typename Traits::edge_iterator edge_iterator;
+ typedef typename Traits::edges_size_type edges_size_type;
+
+ typedef typename Traits::in_edge_iterator in_edge_iterator;
+
+ typedef typename Graph::edge_property_type edge_property_type;
+ typedef typename Graph::vertex_property_type vertex_property_type;
+ typedef subgraph_tag graph_tag;
+ typedef Graph graph_type;
+ typedef typename Graph::graph_property_type graph_property_type;
+
+ // Constructors
+
+ // Create the main graph, the root of the subgraph tree
+ subgraph()
+ : m_parent(0), m_edge_counter(0)
+ { }
+ subgraph(const graph_property_type& p)
+ : m_graph(p), m_parent(0), m_edge_counter(0)
+ { }
+ subgraph(vertices_size_type n,
+ const graph_property_type& p = graph_property_type())
+ : m_graph(n, p), m_parent(0), m_edge_counter(0), m_global_vertex(n)
+ {
+ typename Graph::vertex_iterator v, v_end;
+ vertices_size_type i = 0;
+ for (tie(v, v_end) = vertices(m_graph); v != v_end; ++v)
+ m_global_vertex[i++] = *v;
+ }
+
+ // copy constructor
+ subgraph(const subgraph& x)
+ : m_graph(x.m_graph), m_parent(x.m_parent),
+ m_edge_counter(x.m_edge_counter),
+ m_global_vertex(x.m_global_vertex),
+ m_global_edge(x.m_global_edge)
+ {
+ // Do a deep copy
+ for (typename ChildrenList::const_iterator i = x.m_children.begin();
+ i != x.m_children.end(); ++i)
+ m_children.push_back(new subgraph<Graph>( **i ));
+ }
+
+
+ ~subgraph() {
+ for (typename ChildrenList::iterator i = m_children.begin();
+ i != m_children.end(); ++i)
+ delete *i;
+ }
+
+
+ // Create a subgraph
+ subgraph<Graph>& create_subgraph() {
+ m_children.push_back(new subgraph<Graph>());
+ m_children.back()->m_parent = this;
+ return *m_children.back();
+ }
+
+ // Create a subgraph with the specified vertex set.
+ template <typename VertexIterator>
+ subgraph<Graph>& create_subgraph(VertexIterator first,
+ VertexIterator last)
+ {
+ m_children.push_back(new subgraph<Graph>());
+ m_children.back()->m_parent = this;
+ for (; first != last; ++first)
+ add_vertex(*first, *m_children.back());
+ return *m_children.back();
+ }
+
+ // local <-> global descriptor conversion functions
+ vertex_descriptor local_to_global(vertex_descriptor u_local) const
+ {
+ return m_global_vertex[u_local];
+ }
+ vertex_descriptor global_to_local(vertex_descriptor u_global) const
+ {
+ vertex_descriptor u_local; bool in_subgraph;
+ tie(u_local, in_subgraph) = this->find_vertex(u_global);
+ assert(in_subgraph == true);
+ return u_local;
+ }
+ edge_descriptor local_to_global(edge_descriptor e_local) const
+ {
+ return m_global_edge[get(get(edge_index, m_graph), e_local)];
+ }
+ edge_descriptor global_to_local(edge_descriptor e_global) const
+ {
+ return
+ (*m_local_edge.find(get(get(edge_index, root().m_graph), e_global))).second;
+ }
+
+ // Is vertex u (of the root graph) contained in this subgraph?
+ // If so, return the matching local vertex.
+ std::pair<vertex_descriptor, bool>
+ find_vertex(vertex_descriptor u_global) const
+ {
+ typename std::map<vertex_descriptor, vertex_descriptor>::const_iterator
+ i = m_local_vertex.find(u_global);
+ bool valid = i != m_local_vertex.end();
+ return std::make_pair((valid ? (*i).second : null_vertex()), valid);
+ }
+
+ // Return the parent graph.
+ subgraph& parent() { return *m_parent; }
+ const subgraph& parent() const { return *m_parent; }
+
+ bool is_root() const { return m_parent == 0; }
+
+ // Return the root graph of the subgraph tree.
+ subgraph& root() {
+ if (this->is_root())
+ return *this;
+ else
+ return m_parent->root();
+ }
+ const subgraph& root() const {
+ if (this->is_root())
+ return *this;
+ else
+ return m_parent->root();
+ }
+
+ // Return the children subgraphs of this graph/subgraph.
+ // Use a list of pointers because the VC++ std::list doesn't like
+ // storing incomplete type.
+ typedef indirect_iterator<
+ typename ChildrenList::const_iterator
+ , subgraph<Graph>
+ , std::bidirectional_iterator_tag
+ >
+ children_iterator;
+
+ typedef indirect_iterator<
+ typename ChildrenList::const_iterator
+ , subgraph<Graph> const
+ , std::bidirectional_iterator_tag
+ >
+ const_children_iterator;
+
+ std::pair<const_children_iterator, const_children_iterator>
+ children() const
+ {
+ return std::make_pair(const_children_iterator(m_children.begin()),
+ const_children_iterator(m_children.end()));
+ }
+
+ std::pair<children_iterator, children_iterator>
+ children()
+ {
+ return std::make_pair(children_iterator(m_children.begin()),
+ children_iterator(m_children.end()));
+ }
+
+ std::size_t num_children() const { return m_children.size(); }
+
+#ifndef BOOST_GRAPH_NO_BUNDLED_PROPERTIES
+ // Bundled properties support
+ template<typename Descriptor>
+ typename graph::detail::bundled_result<Graph, Descriptor>::type&
+ operator[](Descriptor x)
+ {
+ if (m_parent == 0) return m_graph[x];
+ else return root().m_graph[local_to_global(x)];
+ }
+
+ template<typename Descriptor>
+ typename graph::detail::bundled_result<Graph, Descriptor>::type const&
+ operator[](Descriptor x) const
+ {
+ if (m_parent == 0) return m_graph[x];
+ else return root().m_graph[local_to_global(x)];
+ }
+#endif // BOOST_GRAPH_NO_BUNDLED_PROPERTIES
+
+ // private:
+ typedef typename property_map<Graph, edge_index_t>::type EdgeIndexMap;
+ typedef typename property_traits<EdgeIndexMap>::value_type edge_index_type;
+ BOOST_STATIC_ASSERT((!is_same<edge_index_type,
+ boost::detail::error_property_not_found>::value));
+
+ Graph m_graph;
+ subgraph<Graph>* m_parent;
+ edge_index_type m_edge_counter; // for generating unique edge indices
+ ChildrenList m_children;
+ std::vector<vertex_descriptor> m_global_vertex; // local -> global
+ std::map<vertex_descriptor, vertex_descriptor> m_local_vertex; // global -> local
+ std::vector<edge_descriptor> m_global_edge; // local -> global
+ std::map<edge_index_type, edge_descriptor> m_local_edge; // global -> local
+
+ edge_descriptor
+ local_add_edge(vertex_descriptor u_local, vertex_descriptor v_local,
+ edge_descriptor e_global)
+ {
+ edge_descriptor e_local;
+ bool inserted;
+ tie(e_local, inserted) = add_edge(u_local, v_local, m_graph);
+ put(edge_index, m_graph, e_local, m_edge_counter++);
+ m_global_edge.push_back(e_global);
+ m_local_edge[get(get(edge_index, this->root()), e_global)] = e_local;
+ return e_local;
+ }
+
+ };
+
+#ifndef BOOST_GRAPH_NO_BUNDLED_PROPERTIES
+ template<typename Graph>
+ struct vertex_bundle_type<subgraph<Graph> > : vertex_bundle_type<Graph> { };
+
+ template<typename Graph>
+ struct edge_bundle_type<subgraph<Graph> > : edge_bundle_type<Graph> { };
+#endif // BOOST_GRAPH_NO_BUNDLED_PROPERTIES
+
+ //===========================================================================
+ // Functions special to the Subgraph Class
+
+ template <typename G>
+ typename subgraph<G>::vertex_descriptor
+ add_vertex(typename subgraph<G>::vertex_descriptor u_global,
+ subgraph<G>& g)
+ {
+ assert(!g.is_root());
+ typename subgraph<G>::vertex_descriptor u_local, v_global, uu_global;
+ typename subgraph<G>::edge_descriptor e_global;
+
+ u_local = add_vertex(g.m_graph);
+ g.m_global_vertex.push_back(u_global);
+ g.m_local_vertex[u_global] = u_local;
+
+ subgraph<G>& r = g.root();
+
+ // remember edge global and local maps
+ {
+ typename subgraph<G>::out_edge_iterator ei, ei_end;
+ for (tie(ei, ei_end) = out_edges(u_global, r);
+ ei != ei_end; ++ei) {
+ e_global = *ei;
+ v_global = target(e_global, r);
+ if (g.find_vertex(v_global).second == true)
+ g.local_add_edge(u_local, g.global_to_local(v_global), e_global);
+ }
+ }
+ if (is_directed(g)) { // not necessary for undirected graph
+ typename subgraph<G>::vertex_iterator vi, vi_end;
+ typename subgraph<G>::out_edge_iterator ei, ei_end;
+ for (tie(vi, vi_end) = vertices(r); vi != vi_end; ++vi) {
+ v_global = *vi;
+ if (g.find_vertex(v_global).second)
+ for (tie(ei, ei_end) = out_edges(*vi, r); ei != ei_end; ++ei) {
+ e_global = *ei;
+ uu_global = target(e_global, r);
+ if (uu_global == u_global && g.find_vertex(v_global).second)
+ g.local_add_edge(g.global_to_local(v_global), u_local, e_global);
+ }
+ }
+ }
+
+ return u_local;
+ }
+
+ //===========================================================================
+ // Functions required by the IncidenceGraph concept
+
+ template <typename G>
+ std::pair<typename graph_traits<G>::out_edge_iterator,
+ typename graph_traits<G>::out_edge_iterator>
+ out_edges(typename graph_traits<G>::vertex_descriptor u_local,
+ const subgraph<G>& g)
+ { return out_edges(u_local, g.m_graph); }
+
+ template <typename G>
+ typename graph_traits<G>::degree_size_type
+ out_degree(typename graph_traits<G>::vertex_descriptor u_local,
+ const subgraph<G>& g)
+ { return out_degree(u_local, g.m_graph); }
+
+ template <typename G>
+ typename graph_traits<G>::vertex_descriptor
+ source(typename graph_traits<G>::edge_descriptor e_local,
+ const subgraph<G>& g)
+ { return source(e_local, g.m_graph); }
+
+ template <typename G>
+ typename graph_traits<G>::vertex_descriptor
+ target(typename graph_traits<G>::edge_descriptor e_local,
+ const subgraph<G>& g)
+ { return target(e_local, g.m_graph); }
+
+ //===========================================================================
+ // Functions required by the BidirectionalGraph concept
+
+ template <typename G>
+ std::pair<typename graph_traits<G>::in_edge_iterator,
+ typename graph_traits<G>::in_edge_iterator>
+ in_edges(typename graph_traits<G>::vertex_descriptor u_local,
+ const subgraph<G>& g)
+ { return in_edges(u_local, g.m_graph); }
+
+ template <typename G>
+ typename graph_traits<G>::degree_size_type
+ in_degree(typename graph_traits<G>::vertex_descriptor u_local,
+ const subgraph<G>& g)
+ { return in_degree(u_local, g.m_graph); }
+
+ template <typename G>
+ typename graph_traits<G>::degree_size_type
+ degree(typename graph_traits<G>::vertex_descriptor u_local,
+ const subgraph<G>& g)
+ { return degree(u_local, g.m_graph); }
+
+ //===========================================================================
+ // Functions required by the AdjacencyGraph concept
+
+ template <typename G>
+ std::pair<typename subgraph<G>::adjacency_iterator,
+ typename subgraph<G>::adjacency_iterator>
+ adjacent_vertices(typename subgraph<G>::vertex_descriptor u_local,
+ const subgraph<G>& g)
+ { return adjacent_vertices(u_local, g.m_graph); }
+
+ //===========================================================================
+ // Functions required by the VertexListGraph concept
+
+ template <typename G>
+ std::pair<typename subgraph<G>::vertex_iterator,
+ typename subgraph<G>::vertex_iterator>
+ vertices(const subgraph<G>& g)
+ { return vertices(g.m_graph); }
+
+ template <typename G>
+ typename subgraph<G>::vertices_size_type
+ num_vertices(const subgraph<G>& g)
+ { return num_vertices(g.m_graph); }
+
+ //===========================================================================
+ // Functions required by the EdgeListGraph concept
+
+ template <typename G>
+ std::pair<typename subgraph<G>::edge_iterator,
+ typename subgraph<G>::edge_iterator>
+ edges(const subgraph<G>& g)
+ { return edges(g.m_graph); }
+
+ template <typename G>
+ typename subgraph<G>::edges_size_type
+ num_edges(const subgraph<G>& g)
+ { return num_edges(g.m_graph); }
+
+ //===========================================================================
+ // Functions required by the AdjacencyMatrix concept
+
+ template <typename G>
+ std::pair<typename subgraph<G>::edge_descriptor, bool>
+ edge(typename subgraph<G>::vertex_descriptor u_local,
+ typename subgraph<G>::vertex_descriptor v_local,
+ const subgraph<G>& g)
+ {
+ return edge(u_local, v_local, g.m_graph);
+ }
+
+ //===========================================================================
+ // Functions required by the MutableGraph concept
+
+ namespace detail {
+
+ template <typename Vertex, typename Edge, typename Graph>
+ void add_edge_recur_down
+ (Vertex u_global, Vertex v_global, Edge e_global, subgraph<Graph>& g);
+
+ template <typename Vertex, typename Edge, typename Children, typename G>
+ void children_add_edge(Vertex u_global, Vertex v_global, Edge e_global,
+ Children& c, subgraph<G>* orig)
+ {
+ for (typename Children::iterator i = c.begin(); i != c.end(); ++i)
+ if ((*i)->find_vertex(u_global).second
+ && (*i)->find_vertex(v_global).second)
+ add_edge_recur_down(u_global, v_global, e_global, **i, orig);
+ }
+
+ template <typename Vertex, typename Edge, typename Graph>
+ void add_edge_recur_down
+ (Vertex u_global, Vertex v_global, Edge e_global, subgraph<Graph>& g,
+ subgraph<Graph>* orig)
+ {
+ if (&g != orig ) {
+ // add local edge only if u_global and v_global are in subgraph g
+ Vertex u_local, v_local;
+ bool u_in_subgraph, v_in_subgraph;
+ tie(u_local, u_in_subgraph) = g.find_vertex(u_global);
+ tie(v_local, v_in_subgraph) = g.find_vertex(v_global);
+ if (u_in_subgraph && v_in_subgraph)
+ g.local_add_edge(u_local, v_local, e_global);
+ }
+ children_add_edge(u_global, v_global, e_global, g.m_children, orig);
+ }
+
+ template <typename Vertex, typename Graph>
+ std::pair<typename subgraph<Graph>::edge_descriptor, bool>
+ add_edge_recur_up(Vertex u_global, Vertex v_global,
+ const typename Graph::edge_property_type& ep,
+ subgraph<Graph>& g, subgraph<Graph>* orig)
+ {
+ if (g.is_root()) {
+ typename subgraph<Graph>::edge_descriptor e_global;
+ bool inserted;
+ tie(e_global, inserted) = add_edge(u_global, v_global, ep, g.m_graph);
+ put(edge_index, g.m_graph, e_global, g.m_edge_counter++);
+ g.m_global_edge.push_back(e_global);
+ children_add_edge(u_global, v_global, e_global, g.m_children, orig);
+ return std::make_pair(e_global, inserted);
+ } else
+ return add_edge_recur_up(u_global, v_global, ep, *g.m_parent, orig);
+ }
+
+ } // namespace detail
+
+ // Add an edge to the subgraph g, specified by the local vertex
+ // descriptors u and v. In addition, the edge will be added to any
+ // other subgraphs which contain vertex descriptors u and v.
+
+ template <typename G>
+ std::pair<typename subgraph<G>::edge_descriptor, bool>
+ add_edge(typename subgraph<G>::vertex_descriptor u_local,
+ typename subgraph<G>::vertex_descriptor v_local,
+ const typename G::edge_property_type& ep,
+ subgraph<G>& g)
+ {
+ if (g.is_root()) // u_local and v_local are really global
+ return detail::add_edge_recur_up(u_local, v_local, ep, g, &g);
+ else {
+ typename subgraph<G>::edge_descriptor e_local, e_global;
+ bool inserted;
+ tie(e_global, inserted) = detail::add_edge_recur_up
+ (g.local_to_global(u_local), g.local_to_global(v_local), ep, g, &g);
+ e_local = g.local_add_edge(u_local, v_local, e_global);
+ return std::make_pair(e_local, inserted);
+ }
+ }
+
+ template <typename G>
+ std::pair<typename subgraph<G>::edge_descriptor, bool>
+ add_edge(typename subgraph<G>::vertex_descriptor u,
+ typename subgraph<G>::vertex_descriptor v,
+ subgraph<G>& g)
+ {
+ typename G::edge_property_type ep;
+ return add_edge(u, v, ep, g);
+ }
+
+ namespace detail {
+
+ //-------------------------------------------------------------------------
+ // implementation of remove_edge(u,v,g)
+
+ template <typename Vertex, typename Graph>
+ void remove_edge_recur_down(Vertex u_global, Vertex v_global,
+ subgraph<Graph>& g);
+
+ template <typename Vertex, typename Children>
+ void children_remove_edge(Vertex u_global, Vertex v_global,
+ Children& c)
+ {
+ for (typename Children::iterator i = c.begin(); i != c.end(); ++i)
+ if ((*i)->find_vertex(u_global).second
+ && (*i)->find_vertex(v_global).second)
+ remove_edge_recur_down(u_global, v_global, **i);
+ }
+
+ template <typename Vertex, typename Graph>
+ void remove_edge_recur_down(Vertex u_global, Vertex v_global,
+ subgraph<Graph>& g)
+ {
+ Vertex u_local, v_local;
+ u_local = g.m_local_vertex[u_global];
+ v_local = g.m_local_vertex[v_global];
+ remove_edge(u_local, v_local, g.m_graph);
+ children_remove_edge(u_global, v_global, g.m_children);
+ }
+
+ template <typename Vertex, typename Graph>
+ void remove_edge_recur_up(Vertex u_global, Vertex v_global,
+ subgraph<Graph>& g)
+ {
+ if (g.is_root()) {
+ remove_edge(u_global, v_global, g.m_graph);
+ children_remove_edge(u_global, v_global, g.m_children);
+ } else
+ remove_edge_recur_up(u_global, v_global, *g.m_parent);
+ }
+
+ //-------------------------------------------------------------------------
+ // implementation of remove_edge(e,g)
+
+ template <typename Edge, typename Graph>
+ void remove_edge_recur_down(Edge e_global, subgraph<Graph>& g);
+
+ template <typename Edge, typename Children>
+ void children_remove_edge(Edge e_global, Children& c)
+ {
+ for (typename Children::iterator i = c.begin(); i != c.end(); ++i)
+ if ((*i)->find_vertex(source(e_global, **i)).second
+ && (*i)->find_vertex(target(e_global, **i)).second)
+ remove_edge_recur_down(source(e_global, **i),
+ target(e_global, **i), **i);
+ }
+
+ template <typename Edge, typename Graph>
+ void remove_edge_recur_down(Edge e_global, subgraph<Graph>& g)
+ {
+ remove_edge(g.global_to_local(e_global), g.m_graph);
+ children_remove_edge(e_global, g.m_children);
+ }
+
+ template <typename Edge, typename Graph>
+ void remove_edge_recur_up(Edge e_global, subgraph<Graph>& g)
+ {
+ if (g.is_root()) {
+ remove_edge(e_global, g.m_graph);
+ children_remove_edge(e_global, g.m_children);
+ } else
+ remove_edge_recur_up(e_global, *g.m_parent);
+ }
+
+ } // namespace detail
+
+ template <typename G>
+ void
+ remove_edge(typename subgraph<G>::vertex_descriptor u_local,
+ typename subgraph<G>::vertex_descriptor v_local,
+ subgraph<G>& g)
+ {
+ if (g.is_root())
+ detail::remove_edge_recur_up(u_local, v_local, g);
+ else
+ detail::remove_edge_recur_up(g.local_to_global(u_local),
+ g.local_to_global(v_local), g);
+ }
+
+ template <typename G>
+ void
+ remove_edge(typename subgraph<G>::edge_descriptor e_local,
+ subgraph<G>& g)
+ {
+ if (g.is_root())
+ detail::remove_edge_recur_up(e_local, g);
+ else
+ detail::remove_edge_recur_up(g.local_to_global(e_local), g);
+ }
+
+ template <typename Predicate, typename G>
+ void
+ remove_edge_if(Predicate p, subgraph<G>& g)
+ {
+ // This is wrong...
+ remove_edge_if(p, g.m_graph);
+ }
+
+ template <typename G>
+ void
+ clear_vertex(typename subgraph<G>::vertex_descriptor v_local,
+ subgraph<G>& g)
+ {
+ // this is wrong...
+ clear_vertex(v_local, g.m_graph);
+ }
+
+ namespace detail {
+
+ template <typename G>
+ typename subgraph<G>::vertex_descriptor
+ add_vertex_recur_up(subgraph<G>& g)
+ {
+ typename subgraph<G>::vertex_descriptor u_local, u_global;
+ if (g.is_root()) {
+ u_global = add_vertex(g.m_graph);
+ g.m_global_vertex.push_back(u_global);
+ } else {
+ u_global = add_vertex_recur_up(*g.m_parent);
+ u_local = add_vertex(g.m_graph);
+ g.m_global_vertex.push_back(u_global);
+ g.m_local_vertex[u_global] = u_local;
+ }
+ return u_global;
+ }
+
+ } // namespace detail
+
+ template <typename G>
+ typename subgraph<G>::vertex_descriptor
+ add_vertex(subgraph<G>& g)
+ {
+ typename subgraph<G>::vertex_descriptor u_local, u_global;
+ if (g.is_root()) {
+ u_global = add_vertex(g.m_graph);
+ g.m_global_vertex.push_back(u_global);
+ u_local = u_global;
+ } else {
+ u_global = detail::add_vertex_recur_up(g.parent());
+ u_local = add_vertex(g.m_graph);
+ g.m_global_vertex.push_back(u_global);
+ g.m_local_vertex[u_global] = u_local;
+ }
+ return u_local;
+ }
+
+ template <typename G>
+ void remove_vertex(typename subgraph<G>::vertex_descriptor u,
+ subgraph<G>& g)
+ {
+ // UNDER CONSTRUCTION
+ assert(false);
+ }
+
+
+ //===========================================================================
+ // Functions required by the PropertyGraph concept
+
+ template <typename GraphPtr, typename PropertyMap, typename Tag>
+ class subgraph_global_property_map
+ : public put_get_helper<
+ typename property_traits<PropertyMap>::reference,
+ subgraph_global_property_map<GraphPtr, PropertyMap, Tag> >
+ {
+ typedef property_traits<PropertyMap> Traits;
+ public:
+ typedef typename Traits::category category;
+ typedef typename Traits::value_type value_type;
+ typedef typename Traits::key_type key_type;
+ typedef typename Traits::reference reference;
+
+ subgraph_global_property_map() { }
+
+ subgraph_global_property_map(GraphPtr g)
+ : m_g(g) { }
+
+ inline reference operator[](key_type e_local) const {
+ PropertyMap pmap = get(Tag(), m_g->root().m_graph);
+ if (m_g->m_parent == 0)
+ return pmap[e_local];
+ else
+ return pmap[m_g->local_to_global(e_local)];
+ }
+ GraphPtr m_g;
+ };
+
+ template <typename GraphPtr, typename PropertyMap, typename Tag>
+ class subgraph_local_property_map
+ : public put_get_helper<
+ typename property_traits<PropertyMap>::reference,
+ subgraph_local_property_map<GraphPtr, PropertyMap, Tag> >
+ {
+ typedef property_traits<PropertyMap> Traits;
+ public:
+ typedef typename Traits::category category;
+ typedef typename Traits::value_type value_type;
+ typedef typename Traits::key_type key_type;
+ typedef typename Traits::reference reference;
+
+ subgraph_local_property_map() { }
+
+ subgraph_local_property_map(GraphPtr g)
+ : m_g(g) { }
+
+ inline reference operator[](key_type e_local) const {
+ PropertyMap pmap = get(Tag(), *m_g);
+ return pmap[e_local];
+ }
+ GraphPtr m_g;
+ };
+
+ namespace detail {
+
+ struct subgraph_any_pmap {
+ template <class Tag, class SubGraph, class Property>
+ class bind_ {
+ typedef typename SubGraph::graph_type Graph;
+ typedef SubGraph* SubGraphPtr;
+ typedef const SubGraph* const_SubGraphPtr;
+ typedef typename property_map<Graph, Tag>::type PMap;
+ typedef typename property_map<Graph, Tag>::const_type const_PMap;
+ public:
+ typedef subgraph_global_property_map<SubGraphPtr, PMap, Tag> type;
+ typedef subgraph_global_property_map<const_SubGraphPtr, const_PMap, Tag>
+ const_type;
+ };
+ };
+ struct subgraph_id_pmap {
+ template <class Tag, class SubGraph, class Property>
+ struct bind_ {
+ typedef typename SubGraph::graph_type Graph;
+ typedef SubGraph* SubGraphPtr;
+ typedef const SubGraph* const_SubGraphPtr;
+ typedef typename property_map<Graph, Tag>::type PMap;
+ typedef typename property_map<Graph, Tag>::const_type const_PMap;
+ public:
+ typedef subgraph_local_property_map<SubGraphPtr, PMap, Tag> type;
+ typedef subgraph_local_property_map<const_SubGraphPtr, const_PMap, Tag>
+ const_type;
+ };
+ };
+ template <class Tag>
+ struct subgraph_choose_pmap_helper {
+ typedef subgraph_any_pmap type;
+ };
+ template <>
+ struct subgraph_choose_pmap_helper<vertex_index_t> {
+ typedef subgraph_id_pmap type;
+ };
+ template <class Tag, class Graph, class Property>
+ struct subgraph_choose_pmap {
+ typedef typename subgraph_choose_pmap_helper<Tag>::type Helper;
+ typedef typename Helper::template bind_<Tag, Graph, Property> Bind;
+ typedef typename Bind::type type;
+ typedef typename Bind::const_type const_type;
+ };
+ struct subgraph_property_generator {
+ template <class SubGraph, class Property, class Tag>
+ struct bind_ {
+ typedef subgraph_choose_pmap<Tag, SubGraph, Property> Choice;
+ typedef typename Choice::type type;
+ typedef typename Choice::const_type const_type;
+ };
+ };
+
+ } // namespace detail
+
+ template <>
+ struct vertex_property_selector<subgraph_tag> {
+ typedef detail::subgraph_property_generator type;
+ };
+
+ template <>
+ struct edge_property_selector<subgraph_tag> {
+ typedef detail::subgraph_property_generator type;
+ };
+
+ template <typename G, typename Property>
+ typename property_map< subgraph<G>, Property>::type
+ get(Property, subgraph<G>& g)
+ {
+ typedef typename property_map< subgraph<G>, Property>::type PMap;
+ return PMap(&g);
+ }
+
+ template <typename G, typename Property>
+ typename property_map< subgraph<G>, Property>::const_type
+ get(Property, const subgraph<G>& g)
+ {
+ typedef typename property_map< subgraph<G>, Property>::const_type PMap;
+ return PMap(&g);
+ }
+
+ template <typename G, typename Property, typename Key>
+ typename property_traits<
+ typename property_map< subgraph<G>, Property>::const_type
+ >::value_type
+ get(Property, const subgraph<G>& g, const Key& k)
+ {
+ typedef typename property_map< subgraph<G>, Property>::const_type PMap;
+ PMap pmap(&g);
+ return pmap[k];
+ }
+
+ template <typename G, typename Property, typename Key, typename Value>
+ void
+ put(Property, subgraph<G>& g, const Key& k, const Value& val)
+ {
+ typedef typename property_map< subgraph<G>, Property>::type PMap;
+ PMap pmap(&g);
+ pmap[k] = val;
+ }
+
+ template <typename G, typename Tag>
+ inline
+ typename graph_property<G, Tag>::type&
+ get_property(subgraph<G>& g, Tag tag) {
+ return get_property(g.m_graph, tag);
+ }
+
+ template <typename G, typename Tag>
+ inline
+ const typename graph_property<G, Tag>::type&
+ get_property(const subgraph<G>& g, Tag tag) {
+ return get_property(g.m_graph, tag);
+ }
+
+ //===========================================================================
+ // Miscellaneous Functions
+
+ template <typename G>
+ typename subgraph<G>::vertex_descriptor
+ vertex(typename subgraph<G>::vertices_size_type n, const subgraph<G>& g)
+ {
+ return vertex(n, g.m_graph);
+ }
+
+} // namespace boost
+
+#endif // BOOST_SUBGRAPH_HPP
diff --git a/boost/boost/graph/topological_sort.hpp b/boost/boost/graph/topological_sort.hpp
new file mode 100644
index 00000000000..2ed7e18e92a
--- /dev/null
+++ b/boost/boost/graph/topological_sort.hpp
@@ -0,0 +1,76 @@
+//
+//=======================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// 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_GRAPH_TOPOLOGICAL_SORT_HPP
+#define BOOST_GRAPH_TOPOLOGICAL_SORT_HPP
+
+#include <boost/config.hpp>
+#include <boost/property_map.hpp>
+#include <boost/graph/depth_first_search.hpp>
+#include <boost/graph/visitors.hpp>
+#include <boost/graph/exception.hpp>
+
+namespace boost {
+
+
+ // Topological sort visitor
+ //
+ // This visitor merely writes the linear ordering into an
+ // OutputIterator. The OutputIterator could be something like an
+ // ostream_iterator, or it could be a back/front_insert_iterator.
+ // Note that if it is a back_insert_iterator, the recorded order is
+ // the reverse topological order. On the other hand, if it is a
+ // front_insert_iterator, the recorded order is the topological
+ // order.
+ //
+ template <typename OutputIterator>
+ struct topo_sort_visitor : public dfs_visitor<>
+ {
+ topo_sort_visitor(OutputIterator _iter)
+ : m_iter(_iter) { }
+
+ template <typename Edge, typename Graph>
+ void back_edge(const Edge& u, Graph&) { throw not_a_dag(); }
+
+ template <typename Vertex, typename Graph>
+ void finish_vertex(const Vertex& u, Graph&) { *m_iter++ = u; }
+
+ OutputIterator m_iter;
+ };
+
+
+ // Topological Sort
+ //
+ // The topological sort algorithm creates a linear ordering
+ // of the vertices such that if edge (u,v) appears in the graph,
+ // then u comes before v in the ordering. The graph must
+ // be a directed acyclic graph (DAG). The implementation
+ // consists mainly of a call to depth-first search.
+ //
+
+ template <typename VertexListGraph, typename OutputIterator,
+ typename P, typename T, typename R>
+ void topological_sort(VertexListGraph& g, OutputIterator result,
+ const bgl_named_params<P, T, R>& params)
+ {
+ typedef topo_sort_visitor<OutputIterator> TopoVisitor;
+ depth_first_search(g, params.visitor(TopoVisitor(result)));
+ }
+
+ template <typename VertexListGraph, typename OutputIterator>
+ void topological_sort(VertexListGraph& g, OutputIterator result)
+ {
+ topological_sort(g, result,
+ bgl_named_params<int, buffer_param_t>(0)); // bogus
+ }
+
+} // namespace boost
+
+#endif /*BOOST_GRAPH_TOPOLOGICAL_SORT_H*/
diff --git a/boost/boost/graph/transitive_closure.hpp b/boost/boost/graph/transitive_closure.hpp
new file mode 100644
index 00000000000..a4742ab155e
--- /dev/null
+++ b/boost/boost/graph/transitive_closure.hpp
@@ -0,0 +1,370 @@
+// Copyright (C) 2001 Vladimir Prus <ghost@cs.msu.su>
+// Copyright (C) 2001 Jeremy Siek <jsiek@cs.indiana.edu>
+// 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)
+
+// NOTE: this final is generated by libs/graph/doc/transitive_closure.w
+
+#ifndef BOOST_GRAPH_TRANSITIVE_CLOSURE_HPP
+#define BOOST_GRAPH_TRANSITIVE_CLOSURE_HPP
+
+#include <vector>
+#include <algorithm> // for std::min and std::max
+#include <functional>
+#include <boost/config.hpp>
+#include <boost/bind.hpp>
+#include <boost/graph/vector_as_graph.hpp>
+#include <boost/graph/strong_components.hpp>
+#include <boost/graph/topological_sort.hpp>
+#include <boost/graph/graph_concepts.hpp>
+#include <boost/graph/named_function_params.hpp>
+
+namespace boost
+{
+
+ namespace detail
+ {
+ inline void
+ union_successor_sets(const std::vector < std::size_t > &s1,
+ const std::vector < std::size_t > &s2,
+ std::vector < std::size_t > &s3)
+ {
+ BOOST_USING_STD_MIN();
+ for (std::size_t k = 0; k < s1.size(); ++k)
+ s3[k] = min BOOST_PREVENT_MACRO_SUBSTITUTION(s1[k], s2[k]);
+ }
+ } // namespace detail
+
+ namespace detail
+ {
+ template < typename Container, typename ST = std::size_t,
+ typename VT = typename Container::value_type >
+ struct subscript_t:public std::unary_function < ST, VT >
+ {
+ typedef VT& result_type;
+
+ subscript_t(Container & c):container(&c)
+ {
+ }
+ VT & operator() (const ST & i) const
+ {
+ return (*container)[i];
+ }
+ protected:
+ Container * container;
+ };
+ template < typename Container >
+ subscript_t < Container > subscript(Container & c) {
+ return subscript_t < Container > (c);
+ }
+ } // namespace detail
+
+ template < typename Graph, typename GraphTC,
+ typename G_to_TC_VertexMap,
+ typename VertexIndexMap >
+ void transitive_closure(const Graph & g, GraphTC & tc,
+ G_to_TC_VertexMap g_to_tc_map,
+ VertexIndexMap index_map)
+ {
+ if (num_vertices(g) == 0)
+ return;
+ typedef typename graph_traits < Graph >::vertex_descriptor vertex;
+ typedef typename graph_traits < Graph >::edge_descriptor edge;
+ typedef typename graph_traits < Graph >::vertex_iterator vertex_iterator;
+ typedef typename property_traits < VertexIndexMap >::value_type size_type;
+ typedef typename graph_traits <
+ Graph >::adjacency_iterator adjacency_iterator;
+
+ function_requires < VertexListGraphConcept < Graph > >();
+ function_requires < AdjacencyGraphConcept < Graph > >();
+ function_requires < VertexMutableGraphConcept < GraphTC > >();
+ function_requires < EdgeMutableGraphConcept < GraphTC > >();
+ function_requires < ReadablePropertyMapConcept < VertexIndexMap,
+ vertex > >();
+
+ typedef size_type cg_vertex;
+ std::vector < cg_vertex > component_number_vec(num_vertices(g));
+ iterator_property_map < cg_vertex *, VertexIndexMap, cg_vertex, cg_vertex& >
+ component_number(&component_number_vec[0], index_map);
+
+ int num_scc = strong_components(g, component_number,
+ vertex_index_map(index_map));
+
+ std::vector < std::vector < vertex > >components;
+ build_component_lists(g, num_scc, component_number, components);
+
+ typedef std::vector<std::vector<cg_vertex> > CG_t;
+ CG_t CG(num_scc);
+ for (cg_vertex s = 0; s < components.size(); ++s) {
+ std::vector < cg_vertex > adj;
+ for (size_type i = 0; i < components[s].size(); ++i) {
+ vertex u = components[s][i];
+ adjacency_iterator v, v_end;
+ for (tie(v, v_end) = adjacent_vertices(u, g); v != v_end; ++v) {
+ cg_vertex t = component_number[*v];
+ if (s != t) // Avoid loops in the condensation graph
+ adj.push_back(t);
+ }
+ }
+ std::sort(adj.begin(), adj.end());
+ typename std::vector<cg_vertex>::iterator di =
+ std::unique(adj.begin(), adj.end());
+ if (di != adj.end())
+ adj.erase(di, adj.end());
+ CG[s] = adj;
+ }
+
+ std::vector<cg_vertex> topo_order;
+ std::vector<cg_vertex> topo_number(num_vertices(CG));
+ topological_sort(CG, std::back_inserter(topo_order),
+ vertex_index_map(identity_property_map()));
+ std::reverse(topo_order.begin(), topo_order.end());
+ size_type n = 0;
+ for (typename std::vector<cg_vertex>::iterator iter = topo_order.begin();
+ iter != topo_order.end(); ++iter)
+ topo_number[*iter] = n++;
+
+ for (size_type i = 0; i < num_vertices(CG); ++i)
+ std::sort(CG[i].begin(), CG[i].end(),
+ boost::bind(std::less<cg_vertex>(),
+ boost::bind(detail::subscript(topo_number), _1),
+ boost::bind(detail::subscript(topo_number), _2)));
+
+ std::vector<std::vector<cg_vertex> > chains;
+ {
+ std::vector<cg_vertex> in_a_chain(num_vertices(CG));
+ for (typename std::vector<cg_vertex>::iterator i = topo_order.begin();
+ i != topo_order.end(); ++i) {
+ cg_vertex v = *i;
+ if (!in_a_chain[v]) {
+ chains.resize(chains.size() + 1);
+ std::vector<cg_vertex>& chain = chains.back();
+ for (;;) {
+ chain.push_back(v);
+ in_a_chain[v] = true;
+ typename graph_traits<CG_t>::adjacency_iterator adj_first, adj_last;
+ tie(adj_first, adj_last) = adjacent_vertices(v, CG);
+ typename graph_traits<CG_t>::adjacency_iterator next
+ = std::find_if(adj_first, adj_last,
+ std::not1(detail::subscript(in_a_chain)));
+ if (next != adj_last)
+ v = *next;
+ else
+ break; // end of chain, dead-end
+
+ }
+ }
+ }
+ }
+ std::vector<size_type> chain_number(num_vertices(CG));
+ std::vector<size_type> pos_in_chain(num_vertices(CG));
+ for (size_type i = 0; i < chains.size(); ++i)
+ for (size_type j = 0; j < chains[i].size(); ++j) {
+ cg_vertex v = chains[i][j];
+ chain_number[v] = i;
+ pos_in_chain[v] = j;
+ }
+
+ cg_vertex inf = (std::numeric_limits< cg_vertex >::max)();
+ std::vector<std::vector<cg_vertex> > successors(num_vertices(CG),
+ std::vector<cg_vertex>
+ (chains.size(), inf));
+ for (typename std::vector<cg_vertex>::reverse_iterator
+ i = topo_order.rbegin(); i != topo_order.rend(); ++i) {
+ cg_vertex u = *i;
+ typename graph_traits<CG_t>::adjacency_iterator adj, adj_last;
+ for (tie(adj, adj_last) = adjacent_vertices(u, CG);
+ adj != adj_last; ++adj) {
+ cg_vertex v = *adj;
+ if (topo_number[v] < successors[u][chain_number[v]]) {
+ // Succ(u) = Succ(u) U Succ(v)
+ detail::union_successor_sets(successors[u], successors[v],
+ successors[u]);
+ // Succ(u) = Succ(u) U {v}
+ successors[u][chain_number[v]] = topo_number[v];
+ }
+ }
+ }
+
+ for (size_type i = 0; i < CG.size(); ++i)
+ CG[i].clear();
+ for (size_type i = 0; i < CG.size(); ++i)
+ for (size_type j = 0; j < chains.size(); ++j) {
+ size_type topo_num = successors[i][j];
+ if (topo_num < inf) {
+ cg_vertex v = topo_order[topo_num];
+ for (size_type k = pos_in_chain[v]; k < chains[j].size(); ++k)
+ CG[i].push_back(chains[j][k]);
+ }
+ }
+
+
+ // Add vertices to the transitive closure graph
+ typedef typename graph_traits < GraphTC >::vertex_descriptor tc_vertex;
+ {
+ vertex_iterator i, i_end;
+ for (tie(i, i_end) = vertices(g); i != i_end; ++i)
+ g_to_tc_map[*i] = add_vertex(tc);
+ }
+ // Add edges between all the vertices in two adjacent SCCs
+ typename graph_traits<CG_t>::vertex_iterator si, si_end;
+ for (tie(si, si_end) = vertices(CG); si != si_end; ++si) {
+ cg_vertex s = *si;
+ typename graph_traits<CG_t>::adjacency_iterator i, i_end;
+ for (tie(i, i_end) = adjacent_vertices(s, CG); i != i_end; ++i) {
+ cg_vertex t = *i;
+ for (size_type k = 0; k < components[s].size(); ++k)
+ for (size_type l = 0; l < components[t].size(); ++l)
+ add_edge(g_to_tc_map[components[s][k]],
+ g_to_tc_map[components[t][l]], tc);
+ }
+ }
+ // Add edges connecting all vertices in a SCC
+ for (size_type i = 0; i < components.size(); ++i)
+ if (components[i].size() > 1)
+ for (size_type k = 0; k < components[i].size(); ++k)
+ for (size_type l = 0; l < components[i].size(); ++l) {
+ vertex u = components[i][k], v = components[i][l];
+ add_edge(g_to_tc_map[u], g_to_tc_map[v], tc);
+ }
+
+ // Find loopbacks in the original graph.
+ // Need to add it to transitive closure.
+ {
+ vertex_iterator i, i_end;
+ for (tie(i, i_end) = vertices(g); i != i_end; ++i)
+ {
+ adjacency_iterator ab, ae;
+ for (boost::tie(ab, ae) = adjacent_vertices(*i, g); ab != ae; ++ab)
+ {
+ if (*ab == *i)
+ if (components[component_number[*i]].size() == 1)
+ add_edge(g_to_tc_map[*i], g_to_tc_map[*i], tc);
+ }
+ }
+ }
+ }
+
+ template <typename Graph, typename GraphTC>
+ void transitive_closure(const Graph & g, GraphTC & tc)
+ {
+ if (num_vertices(g) == 0)
+ return;
+ typedef typename property_map<Graph, vertex_index_t>::const_type
+ VertexIndexMap;
+ VertexIndexMap index_map = get(vertex_index, g);
+
+ typedef typename graph_traits<GraphTC>::vertex_descriptor tc_vertex;
+ std::vector<tc_vertex> to_tc_vec(num_vertices(g));
+ iterator_property_map < tc_vertex *, VertexIndexMap, tc_vertex, tc_vertex&>
+ g_to_tc_map(&to_tc_vec[0], index_map);
+
+ transitive_closure(g, tc, g_to_tc_map, index_map);
+ }
+
+ namespace detail
+ {
+ template < typename Graph, typename GraphTC, typename G_to_TC_VertexMap,
+ typename VertexIndexMap>
+ void transitive_closure_dispatch
+ (const Graph & g, GraphTC & tc,
+ G_to_TC_VertexMap g_to_tc_map, VertexIndexMap index_map)
+ {
+ typedef typename graph_traits < GraphTC >::vertex_descriptor tc_vertex;
+ typename std::vector < tc_vertex >::size_type
+ n = is_default_param(g_to_tc_map) ? num_vertices(g) : 1;
+ std::vector < tc_vertex > to_tc_vec(n);
+
+ transitive_closure
+ (g, tc,
+ choose_param(g_to_tc_map, make_iterator_property_map
+ (to_tc_vec.begin(), index_map, to_tc_vec[0])),
+ index_map);
+ }
+ } // namespace detail
+
+ template < typename Graph, typename GraphTC,
+ typename P, typename T, typename R >
+ void transitive_closure(const Graph & g, GraphTC & tc,
+ const bgl_named_params < P, T, R > &params)
+ {
+ if (num_vertices(g) == 0)
+ return;
+ detail::transitive_closure_dispatch
+ (g, tc, get_param(params, orig_to_copy_t()),
+ choose_const_pmap(get_param(params, vertex_index), g, vertex_index) );
+ }
+
+
+ template < typename G > void warshall_transitive_closure(G & g)
+ {
+ typedef typename graph_traits < G >::vertex_descriptor vertex;
+ typedef typename graph_traits < G >::vertex_iterator vertex_iterator;
+
+ function_requires < AdjacencyMatrixConcept < G > >();
+ function_requires < EdgeMutableGraphConcept < G > >();
+
+ // Matrix form:
+ // for k
+ // for i
+ // if A[i,k]
+ // for j
+ // A[i,j] = A[i,j] | A[k,j]
+ vertex_iterator ki, ke, ii, ie, ji, je;
+ for (tie(ki, ke) = vertices(g); ki != ke; ++ki)
+ for (tie(ii, ie) = vertices(g); ii != ie; ++ii)
+ if (edge(*ii, *ki, g).second)
+ for (tie(ji, je) = vertices(g); ji != je; ++ji)
+ if (!edge(*ii, *ji, g).second && edge(*ki, *ji, g).second) {
+ add_edge(*ii, *ji, g);
+ }
+ }
+
+
+ template < typename G > void warren_transitive_closure(G & g)
+ {
+ using namespace boost;
+ typedef typename graph_traits < G >::vertex_descriptor vertex;
+ typedef typename graph_traits < G >::vertex_iterator vertex_iterator;
+
+ function_requires < AdjacencyMatrixConcept < G > >();
+ function_requires < EdgeMutableGraphConcept < G > >();
+
+ // Make sure second loop will work
+ if (num_vertices(g) == 0)
+ return;
+
+ // for i = 2 to n
+ // for k = 1 to i - 1
+ // if A[i,k]
+ // for j = 1 to n
+ // A[i,j] = A[i,j] | A[k,j]
+
+ vertex_iterator ic, ie, jc, je, kc, ke;
+ for (tie(ic, ie) = vertices(g), ++ic; ic != ie; ++ic)
+ for (tie(kc, ke) = vertices(g); *kc != *ic; ++kc)
+ if (edge(*ic, *kc, g).second)
+ for (tie(jc, je) = vertices(g); jc != je; ++jc)
+ if (!edge(*ic, *jc, g).second && edge(*kc, *jc, g).second) {
+ add_edge(*ic, *jc, g);
+ }
+ // for i = 1 to n - 1
+ // for k = i + 1 to n
+ // if A[i,k]
+ // for j = 1 to n
+ // A[i,j] = A[i,j] | A[k,j]
+
+ for (tie(ic, ie) = vertices(g), --ie; ic != ie; ++ic)
+ for (kc = ic, ke = ie, ++kc; kc != ke; ++kc)
+ if (edge(*ic, *kc, g).second)
+ for (tie(jc, je) = vertices(g); jc != je; ++jc)
+ if (!edge(*ic, *jc, g).second && edge(*kc, *jc, g).second) {
+ add_edge(*ic, *jc, g);
+ }
+ }
+
+
+} // namespace boost
+
+#endif // BOOST_GRAPH_TRANSITIVE_CLOSURE_HPP
diff --git a/boost/boost/graph/transpose_graph.hpp b/boost/boost/graph/transpose_graph.hpp
new file mode 100644
index 00000000000..b12ba1005d2
--- /dev/null
+++ b/boost/boost/graph/transpose_graph.hpp
@@ -0,0 +1,40 @@
+//
+//=======================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// 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_GRAPH_TRANSPOSE_HPP
+#define BOOST_GRAPH_TRANSPOSE_HPP
+
+#include <boost/config.hpp>
+#include <boost/graph/graph_traits.hpp>
+#include <boost/graph/reverse_graph.hpp>
+#include <boost/graph/copy.hpp>
+
+
+namespace boost {
+
+ template <class VertexListGraph, class MutableGraph>
+ void transpose_graph(const VertexListGraph& G, MutableGraph& G_T)
+ {
+ reverse_graph<VertexListGraph> R(G);
+ copy_graph(R, G_T);
+ }
+
+ template <class VertexListGraph, class MutableGraph,
+ class P, class T, class R>
+ void transpose_graph(const VertexListGraph& G, MutableGraph& G_T,
+ const bgl_named_params<P, T, R>& params)
+ {
+ reverse_graph<VertexListGraph> Rev(G);
+ copy_graph(Rev, G_T, params);
+ }
+
+} // namespace boost
+
+#endif // BOOST_GRAPH_TRANSPOSE_HPP
diff --git a/boost/boost/graph/tree_traits.hpp b/boost/boost/graph/tree_traits.hpp
new file mode 100644
index 00000000000..a9f7e8ce1b7
--- /dev/null
+++ b/boost/boost/graph/tree_traits.hpp
@@ -0,0 +1,43 @@
+// (C) Copyright Jeremy Siek 1999.
+// 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_TREE_STRUCTURE_HPP
+#define BOOST_TREE_STRUCTURE_HPP
+
+namespace boost {
+
+ template <class T>
+ struct tree_traits {
+ typedef typename T::node_descriptor node_descriptor;
+ typedef typename T::children_iterator children_iterator;
+ };
+
+
+ template <class Tree, class TreeVisitor>
+ void traverse_tree(typename tree_traits<Tree>::node_descriptor v,
+ Tree& t, TreeVisitor visitor)
+ {
+ visitor.preorder(v, t);
+ typename tree_traits<Tree>::children_iterator i, end;
+ tie(i, end) = children(v, t);
+ if (i != end) {
+ traverse_tree(*i++, t, visitor);
+ visitor.inorder(v, t);
+ while (i != end)
+ traverse_tree(*i++, t, visitor);
+ } else
+ visitor.inorder(v, t);
+ visitor.postorder(v, t);
+ }
+
+ struct null_tree_visitor {
+ template <typename Node, typename Tree> void preorder(Node, Tree&) { }
+ template <typename Node, typename Tree> void inorder(Node, Tree&) { }
+ template <typename Node, typename Tree> void postorder(Node, Tree&) { }
+ };
+
+} /* namespace boost */
+
+#endif /* BOOST_TREE_STRUCTURE_HPP */
diff --git a/boost/boost/graph/two_bit_color_map.hpp b/boost/boost/graph/two_bit_color_map.hpp
new file mode 100644
index 00000000000..3a6d6913211
--- /dev/null
+++ b/boost/boost/graph/two_bit_color_map.hpp
@@ -0,0 +1,90 @@
+// Copyright (C) 2005-2006 The Trustees of Indiana University.
+
+// 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)
+
+// Authors: Jeremiah Willcock
+// Douglas Gregor
+// Andrew Lumsdaine
+
+// Two bit per color property map
+
+#ifndef BOOST_TWO_BIT_COLOR_MAP_HPP
+#define BOOST_TWO_BIT_COLOR_MAP_HPP
+
+#include <boost/property_map.hpp>
+#include <boost/shared_array.hpp>
+
+namespace boost {
+
+enum two_bit_color_type {
+ two_bit_white = 0,
+ two_bit_gray = 1,
+ two_bit_green = 2,
+ two_bit_black = 3
+};
+
+template <>
+struct color_traits<two_bit_color_type>
+{
+ static two_bit_color_type white() { return two_bit_white; }
+ static two_bit_color_type gray() { return two_bit_gray; }
+ static two_bit_color_type green() { return two_bit_green; }
+ static two_bit_color_type black() { return two_bit_black; }
+};
+
+
+template<typename IndexMap = identity_property_map>
+struct two_bit_color_map
+{
+ std::size_t n;
+ IndexMap index;
+ shared_array<unsigned char> data;
+
+ typedef typename property_traits<IndexMap>::key_type key_type;
+ typedef two_bit_color_type value_type;
+ typedef void reference;
+ typedef read_write_property_map_tag category;
+
+ explicit two_bit_color_map(std::size_t n, const IndexMap& index = IndexMap())
+ : n(n), index(index), data(new unsigned char[(n + 3) / 4])
+ {
+ }
+};
+
+template<typename IndexMap>
+inline two_bit_color_type
+get(const two_bit_color_map<IndexMap>& pm,
+ typename two_bit_color_map<IndexMap>::key_type key)
+{
+ typename property_traits<IndexMap>::value_type i = get(pm.index, key);
+ assert (i < pm.n);
+ return two_bit_color_type((pm.data.get()[i / 4] >> ((i % 4) * 2)) & 3);
+}
+
+template<typename IndexMap>
+inline void
+put(const two_bit_color_map<IndexMap>& pm,
+ typename two_bit_color_map<IndexMap>::key_type key,
+ two_bit_color_type value)
+{
+ typename property_traits<IndexMap>::value_type i = get(pm.index, key);
+ assert (i < pm.n);
+ assert (value >= 0 && value < 4);
+ std::size_t byte_num = i / 4;
+ std::size_t bit_position = ((i % 4) * 2);
+ pm.data.get()[byte_num] = (pm.data.get()[byte_num] & ~(3 << bit_position))
+ | (value << bit_position);
+}
+
+template<typename IndexMap>
+inline two_bit_color_map<IndexMap>
+make_two_bit_color_map(std::size_t n, const IndexMap& index_map)
+{
+ return two_bit_color_map<IndexMap>(n, index_map);
+}
+
+} // end namespace boost
+
+#endif // BOOST_TWO_BIT_COLOR_MAP_HPP
diff --git a/boost/boost/graph/undirected_dfs.hpp b/boost/boost/graph/undirected_dfs.hpp
new file mode 100644
index 00000000000..2486cd4b695
--- /dev/null
+++ b/boost/boost/graph/undirected_dfs.hpp
@@ -0,0 +1,250 @@
+//
+//=======================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// 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_GRAPH_UNDIRECTED_DFS_HPP
+#define BOOST_GRAPH_UNDIRECTED_DFS_HPP
+
+#include <boost/graph/depth_first_search.hpp>
+#include <vector>
+
+namespace boost {
+
+ namespace detail {
+
+// Define BOOST_RECURSIVE_DFS to use older, recursive version.
+// It is retained for a while in order to perform performance
+// comparison.
+#ifndef BOOST_RECURSIVE_DFS
+
+ template <typename IncidenceGraph, typename DFSVisitor,
+ typename VertexColorMap, typename EdgeColorMap>
+ void undir_dfv_impl
+ (const IncidenceGraph& g,
+ typename graph_traits<IncidenceGraph>::vertex_descriptor u,
+ DFSVisitor& vis,
+ VertexColorMap vertex_color,
+ EdgeColorMap edge_color)
+ {
+ function_requires<IncidenceGraphConcept<IncidenceGraph> >();
+ function_requires<DFSVisitorConcept<DFSVisitor, IncidenceGraph> >();
+ typedef typename graph_traits<IncidenceGraph>::vertex_descriptor Vertex;
+ typedef typename graph_traits<IncidenceGraph>::edge_descriptor Edge;
+ function_requires<ReadWritePropertyMapConcept<VertexColorMap,Vertex> >();
+ function_requires<ReadWritePropertyMapConcept<EdgeColorMap,Edge> >();
+ typedef typename property_traits<VertexColorMap>::value_type ColorValue;
+ typedef typename property_traits<EdgeColorMap>::value_type EColorValue;
+ function_requires< ColorValueConcept<ColorValue> >();
+ function_requires< ColorValueConcept<EColorValue> >();
+ typedef color_traits<ColorValue> Color;
+ typedef color_traits<EColorValue> EColor;
+ typedef typename graph_traits<IncidenceGraph>::out_edge_iterator Iter;
+ typedef std::pair<Vertex, std::pair<Iter, Iter> > VertexInfo;
+
+ std::vector<VertexInfo> stack;
+
+ put(vertex_color, u, Color::gray());
+ vis.discover_vertex(u, g);
+ stack.push_back(std::make_pair(u, out_edges(u, g)));
+ while (!stack.empty()) {
+ VertexInfo& back = stack.back();
+ u = back.first;
+ Iter ei, ei_end;
+ tie(ei, ei_end) = back.second;
+ stack.pop_back();
+ while (ei != ei_end) {
+ Vertex v = target(*ei, g);
+ vis.examine_edge(*ei, g);
+ ColorValue v_color = get(vertex_color, v);
+ EColorValue uv_color = get(edge_color, *ei);
+ put(edge_color, *ei, EColor::black());
+ if (v_color == Color::white()) {
+ vis.tree_edge(*ei, g);
+ stack.push_back(std::make_pair(u, std::make_pair(++ei, ei_end)));
+ u = v;
+ put(vertex_color, u, Color::gray());
+ vis.discover_vertex(u, g);
+ tie(ei, ei_end) = out_edges(u, g);
+ } else if (v_color == Color::gray()) {
+ if (uv_color == EColor::white()) vis.back_edge(*ei, g);
+ ++ei;
+ } else { // if (v_color == Color::black())
+ ++ei;
+ }
+ }
+ put(vertex_color, u, Color::black());
+ vis.finish_vertex(u, g);
+ }
+ }
+
+#else // BOOST_RECURSIVE_DFS
+
+ template <typename IncidenceGraph, typename DFSVisitor,
+ typename VertexColorMap, typename EdgeColorMap>
+ void undir_dfv_impl
+ (const IncidenceGraph& g,
+ typename graph_traits<IncidenceGraph>::vertex_descriptor u,
+ DFSVisitor& vis, // pass-by-reference here, important!
+ VertexColorMap vertex_color,
+ EdgeColorMap edge_color)
+ {
+ function_requires<IncidenceGraphConcept<IncidenceGraph> >();
+ function_requires<DFSVisitorConcept<DFSVisitor, IncidenceGraph> >();
+ typedef typename graph_traits<IncidenceGraph>::vertex_descriptor Vertex;
+ typedef typename graph_traits<IncidenceGraph>::edge_descriptor Edge;
+ function_requires<ReadWritePropertyMapConcept<VertexColorMap,Vertex> >();
+ function_requires<ReadWritePropertyMapConcept<EdgeColorMap,Edge> >();
+ typedef typename property_traits<VertexColorMap>::value_type ColorValue;
+ typedef typename property_traits<EdgeColorMap>::value_type EColorValue;
+ function_requires< ColorValueConcept<ColorValue> >();
+ function_requires< ColorValueConcept<EColorValue> >();
+ typedef color_traits<ColorValue> Color;
+ typedef color_traits<EColorValue> EColor;
+ typename graph_traits<IncidenceGraph>::out_edge_iterator ei, ei_end;
+
+ put(vertex_color, u, Color::gray()); vis.discover_vertex(u, g);
+ for (tie(ei, ei_end) = out_edges(u, g); ei != ei_end; ++ei) {
+ Vertex v = target(*ei, g); vis.examine_edge(*ei, g);
+ ColorValue v_color = get(vertex_color, v);
+ EColorValue uv_color = get(edge_color, *ei);
+ put(edge_color, *ei, EColor::black());
+ if (v_color == Color::white()) { vis.tree_edge(*ei, g);
+ undir_dfv_impl(g, v, vis, vertex_color, edge_color);
+ } else if (v_color == Color::gray() && uv_color == EColor::white())
+ vis.back_edge(*ei, g);
+ }
+ put(vertex_color, u, Color::black()); vis.finish_vertex(u, g);
+ }
+
+#endif // ! BOOST_RECURSIVE_DFS
+
+ } // namespace detail
+
+ template <typename Graph, typename DFSVisitor,
+ typename VertexColorMap, typename EdgeColorMap,
+ typename Vertex>
+ void
+ undirected_dfs(const Graph& g, DFSVisitor vis,
+ VertexColorMap vertex_color, EdgeColorMap edge_color,
+ Vertex start_vertex)
+ {
+ function_requires<DFSVisitorConcept<DFSVisitor, Graph> >();
+ function_requires<EdgeListGraphConcept<Graph> >();
+
+ typedef typename property_traits<VertexColorMap>::value_type ColorValue;
+ typedef color_traits<ColorValue> Color;
+
+ typename graph_traits<Graph>::vertex_iterator ui, ui_end;
+ for (tie(ui, ui_end) = vertices(g); ui != ui_end; ++ui) {
+ put(vertex_color, *ui, Color::white()); vis.initialize_vertex(*ui, g);
+ }
+ typename graph_traits<Graph>::edge_iterator ei, ei_end;
+ for (tie(ei, ei_end) = edges(g); ei != ei_end; ++ei)
+ put(edge_color, *ei, Color::white());
+
+ if (start_vertex != *vertices(g).first){ vis.start_vertex(start_vertex, g);
+ detail::undir_dfv_impl(g, start_vertex, vis, vertex_color, edge_color);
+ }
+
+ for (tie(ui, ui_end) = vertices(g); ui != ui_end; ++ui) {
+ ColorValue u_color = get(vertex_color, *ui);
+ if (u_color == Color::white()) { vis.start_vertex(*ui, g);
+ detail::undir_dfv_impl(g, *ui, vis, vertex_color, edge_color);
+ }
+ }
+ }
+
+ template <typename Graph, typename DFSVisitor, typename VertexColorMap,
+ typename EdgeColorMap>
+ void
+ undirected_dfs(const Graph& g, DFSVisitor vis,
+ VertexColorMap vertex_color, EdgeColorMap edge_color)
+ {
+ undirected_dfs(g, vis, vertex_color, edge_color, *vertices(g).first);
+ }
+
+ namespace detail {
+ template <typename VertexColorMap>
+ struct udfs_dispatch {
+
+ template <typename Graph, typename Vertex,
+ typename DFSVisitor, typename EdgeColorMap,
+ typename P, typename T, typename R>
+ static void
+ apply(const Graph& g, DFSVisitor vis, Vertex start_vertex,
+ const bgl_named_params<P, T, R>&,
+ EdgeColorMap edge_color,
+ VertexColorMap vertex_color)
+ {
+ undirected_dfs(g, vis, vertex_color, edge_color, start_vertex);
+ }
+ };
+
+ template <>
+ struct udfs_dispatch<detail::error_property_not_found> {
+ template <typename Graph, typename Vertex, typename DFSVisitor,
+ typename EdgeColorMap,
+ typename P, typename T, typename R>
+ static void
+ apply(const Graph& g, DFSVisitor vis, Vertex start_vertex,
+ const bgl_named_params<P, T, R>& params,
+ EdgeColorMap edge_color,
+ detail::error_property_not_found)
+ {
+ std::vector<default_color_type> color_vec(num_vertices(g));
+ default_color_type c = white_color; // avoid warning about un-init
+ undirected_dfs
+ (g, vis, make_iterator_property_map
+ (color_vec.begin(),
+ choose_const_pmap(get_param(params, vertex_index),
+ g, vertex_index), c),
+ edge_color,
+ start_vertex);
+ }
+ };
+
+ } // namespace detail
+
+
+ // Named Parameter Variant
+ template <typename Graph, typename P, typename T, typename R>
+ void
+ undirected_dfs(const Graph& g,
+ const bgl_named_params<P, T, R>& params)
+ {
+ typedef typename property_value< bgl_named_params<P, T, R>,
+ vertex_color_t>::type C;
+ detail::udfs_dispatch<C>::apply
+ (g,
+ choose_param(get_param(params, graph_visitor),
+ make_dfs_visitor(null_visitor())),
+ choose_param(get_param(params, root_vertex_t()),
+ *vertices(g).first),
+ params,
+ get_param(params, edge_color),
+ get_param(params, vertex_color)
+ );
+ }
+
+
+ template <typename IncidenceGraph, typename DFSVisitor,
+ typename VertexColorMap, typename EdgeColorMap>
+ void undirected_depth_first_visit
+ (const IncidenceGraph& g,
+ typename graph_traits<IncidenceGraph>::vertex_descriptor u,
+ DFSVisitor vis, VertexColorMap vertex_color, EdgeColorMap edge_color)
+ {
+ detail::undir_dfv_impl(g, u, vis, vertex_color, edge_color);
+ }
+
+
+} // namespace boost
+
+
+#endif
diff --git a/boost/boost/graph/vector_as_graph.hpp b/boost/boost/graph/vector_as_graph.hpp
new file mode 100644
index 00000000000..711b799ec56
--- /dev/null
+++ b/boost/boost/graph/vector_as_graph.hpp
@@ -0,0 +1,332 @@
+//=======================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Copyright 2006 The Trustees of Indiana University.
+// Copyright (C) 2001 Vladimir Prus <ghost@cs.msu.su>
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek, Douglas Gregor
+//
+// 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)
+//=======================================================================
+
+// The mutating functions (add_edge, etc.) were added by Vladimir Prus.
+
+#ifndef BOOST_VECTOR_AS_GRAPH_HPP
+#define BOOST_VECTOR_AS_GRAPH_HPP
+
+#include <cassert>
+#include <utility>
+#include <vector>
+#include <cstddef>
+#include <boost/iterator.hpp>
+#include <boost/graph/graph_traits.hpp>
+#include <boost/pending/integer_range.hpp>
+#include <boost/property_map.hpp>
+#include <boost/graph/properties.hpp>
+#include <algorithm>
+
+/*
+ This module implements the VertexListGraph concept using a
+ std::vector as the "back-bone" of the graph (the vector *is* the
+ graph object). The edge-lists type of the graph is templated, so the
+ user can choose any STL container, so long as the value_type of the
+ container is convertible to the size_type of the vector. For now any
+ graph properties must be stored seperately.
+
+ This module requires the C++ compiler to support partial
+ specialization for the graph_traits class, so this is not portable
+ to VC++.
+
+*/
+
+#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#error The vector-as-graph module requires a compiler that supports partial specialization
+#endif
+
+
+namespace boost {
+ namespace detail {
+ template <class EdgeList> struct val_out_edge_ret;
+ template <class EdgeList> struct val_out_edge_iter;
+ template <class EdgeList> struct val_edge;
+ }
+}
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+namespace boost {
+
+ struct vector_as_graph_traversal_tag
+ : public vertex_list_graph_tag,
+ public adjacency_graph_tag,
+ public incidence_graph_tag { };
+
+ template <class EdgeList>
+ struct graph_traits< std::vector<EdgeList> >
+ {
+ typedef typename EdgeList::value_type V;
+ typedef V vertex_descriptor;
+ typedef typename detail::val_edge<EdgeList>::type edge_descriptor;
+ typedef typename EdgeList::const_iterator adjacency_iterator;
+ typedef typename detail::val_out_edge_iter<EdgeList>::type
+ out_edge_iterator;
+ typedef void in_edge_iterator;
+ typedef void edge_iterator;
+ typedef typename integer_range<V>::iterator vertex_iterator;
+ typedef directed_tag directed_category;
+ typedef allow_parallel_edge_tag edge_parallel_category;
+ typedef vector_as_graph_traversal_tag traversal_category;
+ typedef typename std::vector<EdgeList>::size_type vertices_size_type;
+ typedef void edges_size_type;
+ typedef typename EdgeList::size_type degree_size_type;
+ };
+ template <class EdgeList>
+ struct edge_property_type< std::vector<EdgeList> >
+ {
+ typedef void type;
+ };
+ template <class EdgeList>
+ struct vertex_property_type< std::vector<EdgeList> >
+ {
+ typedef void type;
+ };
+ template <class EdgeList>
+ struct graph_property_type< std::vector<EdgeList> >
+ {
+ typedef void type;
+ };
+}
+#endif
+
+namespace boost {
+
+ namespace detail {
+
+ // "val" is short for Vector Adjacency List
+
+ template <class EdgeList>
+ struct val_edge
+ {
+ typedef typename EdgeList::value_type V;
+ typedef std::pair<V,V> type;
+ };
+
+ // need rewrite this using boost::iterator_adaptor
+ template <class V, class Iter>
+ class val_out_edge_iterator
+ : public boost::iterator<std::input_iterator_tag, std::pair<V,V>,
+ std::ptrdiff_t, std::pair<V,V>*, const std::pair<V,V> >
+ {
+ typedef val_out_edge_iterator self;
+ typedef std::pair<V,V> Edge;
+ public:
+ val_out_edge_iterator() { }
+ val_out_edge_iterator(V s, Iter i) : _source(s), _iter(i) { }
+ Edge operator*() const { return Edge(_source, *_iter); }
+ self& operator++() { ++_iter; return *this; }
+ self operator++(int) { self t = *this; ++_iter; return t; }
+ bool operator==(const self& x) const { return _iter == x._iter; }
+ bool operator!=(const self& x) const { return _iter != x._iter; }
+ protected:
+ V _source;
+ Iter _iter;
+ };
+
+ template <class EdgeList>
+ struct val_out_edge_iter
+ {
+ typedef typename EdgeList::value_type V;
+ typedef typename EdgeList::const_iterator Iter;
+ typedef val_out_edge_iterator<V,Iter> type;
+ };
+
+ template <class EdgeList>
+ struct val_out_edge_ret
+ {
+ typedef typename val_out_edge_iter<EdgeList>::type IncIter;
+ typedef std::pair<IncIter,IncIter> type;
+ };
+
+ } // namesapce detail
+
+ template <class EdgeList, class Alloc>
+ typename detail::val_out_edge_ret<EdgeList>::type
+ out_edges(typename EdgeList::value_type v,
+ const std::vector<EdgeList, Alloc>& g)
+ {
+ typedef typename detail::val_out_edge_iter<EdgeList>::type Iter;
+ typedef typename detail::val_out_edge_ret<EdgeList>::type return_type;
+ return return_type(Iter(v, g[v].begin()), Iter(v, g[v].end()));
+ }
+
+ template <class EdgeList, class Alloc>
+ typename EdgeList::size_type
+ out_degree(typename EdgeList::value_type v,
+ const std::vector<EdgeList, Alloc>& g)
+ {
+ return g[v].size();
+ }
+
+ template <class EdgeList, class Alloc>
+ std::pair<typename EdgeList::const_iterator,
+ typename EdgeList::const_iterator>
+ adjacent_vertices(typename EdgeList::value_type v,
+ const std::vector<EdgeList, Alloc>& g)
+ {
+ return std::make_pair(g[v].begin(), g[v].end());
+ }
+
+ // source() and target() already provided for pairs in graph_traits.hpp
+
+ template <class EdgeList, class Alloc>
+ std::pair<typename boost::integer_range<typename EdgeList::value_type>
+ ::iterator,
+ typename boost::integer_range<typename EdgeList::value_type>
+ ::iterator >
+ vertices(const std::vector<EdgeList, Alloc>& v)
+ {
+ typedef typename boost::integer_range<typename EdgeList::value_type>
+ ::iterator Iter;
+ return std::make_pair(Iter(0), Iter(v.size()));
+ }
+
+ template <class EdgeList, class Alloc>
+ typename std::vector<EdgeList, Alloc>::size_type
+ num_vertices(const std::vector<EdgeList, Alloc>& v)
+ {
+ return v.size();
+ }
+
+ template<class EdgeList, class Allocator>
+ typename std::pair<typename detail::val_edge<EdgeList>::type, bool>
+ add_edge(typename EdgeList::value_type u, typename EdgeList::value_type v,
+ std::vector<EdgeList, Allocator>& g)
+ {
+ typedef typename detail::val_edge<EdgeList>::type edge_type;
+ g[u].insert(g[u].end(), v);
+ return std::make_pair(edge_type(u, v), true);
+ }
+
+ template<class EdgeList, class Allocator>
+ typename std::pair<typename detail::val_edge<EdgeList>::type, bool>
+ edge(typename EdgeList::value_type u, typename EdgeList::value_type v,
+ std::vector<EdgeList, Allocator>& g)
+ {
+ typedef typename detail::val_edge<EdgeList>::type edge_type;
+ typename EdgeList::iterator i = g[u].begin(), end = g[u].end();
+ for (; i != end; ++i)
+ if (*i == v)
+ return std::make_pair(edge_type(u, v), true);
+ return std::make_pair(edge_type(), false);
+ }
+
+ template<class EdgeList, class Allocator>
+ void
+ remove_edge(typename EdgeList::value_type u, typename EdgeList::value_type v,
+ std::vector<EdgeList, Allocator>& g)
+ {
+ typename EdgeList::iterator i = std::remove(g[u].begin(), g[u].end(), v);
+ if (i != g[u].end())
+ g[u].erase(i, g[u].end());
+ }
+
+ template<class EdgeList, class Allocator>
+ void
+ remove_edge(typename detail::val_edge<EdgeList>::type e,
+ std::vector<EdgeList, Allocator>& g)
+ {
+ typename EdgeList::value_type u, v;
+ u = e.first;
+ v = e.second;
+ // FIXME: edge type does not fully specify the edge to be deleted
+ typename EdgeList::iterator i = std::remove(g[u].begin(), g[u].end(), v);
+ if (i != g[u].end())
+ g[u].erase(i, g[u].end());
+ }
+
+ template<class EdgeList, class Allocator, class Predicate>
+ void
+ remove_edge_if(Predicate p,
+ std::vector<EdgeList, Allocator>& g)
+ {
+ for (std::size_t u = 0; u < g.size(); ++u) {
+ // Oops! gcc gets internal compiler error on compose_.......
+
+ typedef typename EdgeList::iterator iterator;
+ iterator b = g[u].begin(), e = g[u].end();
+
+ if (!g[u].empty()) {
+
+ for(; b != e;) {
+ if (p(std::make_pair(u, *b))) {
+ --e;
+ if (b == e)
+ break;
+ else
+ iter_swap(b, e);
+ } else {
+ ++b;
+ }
+ }
+ }
+
+ if (e != g[u].end())
+ g[u].erase(e, g[u].end());
+ }
+ }
+
+ template<class EdgeList, class Allocator>
+ typename EdgeList::value_type
+ add_vertex(std::vector<EdgeList, Allocator>& g)
+ {
+ g.resize(g.size()+1);
+ return g.size()-1;
+ }
+
+ template<class EdgeList, class Allocator>
+ void
+ clear_vertex(typename EdgeList::value_type u,
+ std::vector<EdgeList, Allocator>& g)
+ {
+ g[u].clear();
+ for (std::size_t i = 0; i < g.size(); ++i)
+ remove_edge(i, u, g);
+ }
+
+ template<class EdgeList, class Allocator>
+ void
+ remove_vertex(typename EdgeList::value_type u,
+ std::vector<EdgeList, Allocator>& g)
+ {
+ typedef typename EdgeList::iterator iterator;
+ clear_vertex(u, g);
+ g.erase(g.begin() + u);
+ for (std::size_t i = 0; i < g.size(); ++i)
+ for ( iterator it = g[i].begin(); it != g[i].end(); ++it )
+ // after clear_vertex *it is never equal to u
+ if ( *it > u )
+ --*it;
+ }
+
+ template<typename EdgeList, typename Allocator>
+ struct property_map<std::vector<EdgeList, Allocator>, vertex_index_t>
+ {
+ typedef identity_property_map type;
+ typedef type const_type;
+ };
+
+ template<typename EdgeList, typename Allocator>
+ identity_property_map
+ get(vertex_index_t, const std::vector<EdgeList, Allocator>&)
+ {
+ return identity_property_map();
+ }
+
+ template<typename EdgeList, typename Allocator>
+ identity_property_map
+ get(vertex_index_t, std::vector<EdgeList, Allocator>&)
+ {
+ return identity_property_map();
+ }
+} // namespace boost
+
+#endif // BOOST_VECTOR_AS_GRAPH_HPP
diff --git a/boost/boost/graph/visitors.hpp b/boost/boost/graph/visitors.hpp
new file mode 100644
index 00000000000..892f0241e36
--- /dev/null
+++ b/boost/boost/graph/visitors.hpp
@@ -0,0 +1,269 @@
+//=======================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// 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)
+//=======================================================================
+//
+// Revision History:
+// 01 April 2001: Modified to use new <boost/limits.hpp> header. (JMaddock)
+//
+#ifndef BOOST_GRAPH_GRAPH_SEARCH_VISITORS_HPP
+#define BOOST_GRAPH_GRAPH_SEARCH_VISITORS_HPP
+
+#include <iosfwd>
+#include <boost/config.hpp>
+#include <boost/property_map.hpp>
+#include <boost/graph/graph_traits.hpp>
+#include <boost/limits.hpp>
+#include <boost/graph/detail/is_same.hpp>
+
+namespace boost {
+
+ // This is a bit more convenient than std::numeric_limits because
+ // you don't have to explicitly provide type T.
+ template <class T>
+ inline T numeric_limits_max(T) { return (std::numeric_limits<T>::max)(); }
+
+ //========================================================================
+ // Event Tags
+
+ namespace detail {
+ // For partial specialization workaround
+ enum event_visitor_enum
+ { on_no_event_num,
+ on_initialize_vertex_num, on_start_vertex_num,
+ on_discover_vertex_num, on_finish_vertex_num, on_examine_vertex_num,
+ on_examine_edge_num, on_tree_edge_num, on_non_tree_edge_num,
+ on_gray_target_num, on_black_target_num,
+ on_forward_or_cross_edge_num, on_back_edge_num,
+ on_edge_relaxed_num, on_edge_not_relaxed_num,
+ on_edge_minimized_num, on_edge_not_minimized_num
+ };
+
+ template<typename Event, typename Visitor>
+ struct functor_to_visitor : Visitor
+ {
+ typedef Event event_filter;
+ functor_to_visitor(const Visitor& visitor) : Visitor(visitor) {}
+ };
+
+ } // namespace detail
+
+ struct on_no_event { enum { num = detail::on_no_event_num }; };
+
+ struct on_initialize_vertex {
+ enum { num = detail::on_initialize_vertex_num }; };
+ struct on_start_vertex { enum { num = detail::on_start_vertex_num }; };
+ struct on_discover_vertex { enum { num = detail::on_discover_vertex_num }; };
+ struct on_examine_vertex { enum { num = detail::on_examine_vertex_num }; };
+ struct on_finish_vertex { enum { num = detail::on_finish_vertex_num }; };
+
+ struct on_examine_edge { enum { num = detail::on_examine_edge_num }; };
+ struct on_tree_edge { enum { num = detail::on_tree_edge_num }; };
+ struct on_non_tree_edge { enum { num = detail::on_non_tree_edge_num }; };
+ struct on_gray_target { enum { num = detail::on_gray_target_num }; };
+ struct on_black_target { enum { num = detail::on_black_target_num }; };
+ struct on_forward_or_cross_edge {
+ enum { num = detail::on_forward_or_cross_edge_num }; };
+ struct on_back_edge { enum { num = detail::on_back_edge_num }; };
+
+ struct on_edge_relaxed { enum { num = detail::on_edge_relaxed_num }; };
+ struct on_edge_not_relaxed {
+ enum { num = detail::on_edge_not_relaxed_num }; };
+ struct on_edge_minimized { enum { num = detail::on_edge_minimized_num }; };
+ struct on_edge_not_minimized {
+ enum { num = detail::on_edge_not_minimized_num }; };
+
+ struct true_tag { enum { num = true }; };
+ struct false_tag { enum { num = false }; };
+
+ //========================================================================
+ // base_visitor and null_visitor
+
+ // needed for MSVC workaround
+ template <class Visitor>
+ struct base_visitor {
+ typedef on_no_event event_filter;
+ template <class T, class Graph>
+ void operator()(T, Graph&) { }
+ };
+
+ struct null_visitor : public base_visitor<null_visitor> {
+ typedef on_no_event event_filter;
+ template <class T, class Graph>
+ void operator()(T, Graph&) { }
+ };
+
+ //========================================================================
+ // The invoke_visitors() function
+
+ namespace detail {
+ template <class Visitor, class T, class Graph>
+ inline void
+ invoke_dispatch(Visitor& v, T x, Graph& g, true_tag) {
+ v(x, g);
+ }
+ template <class Visitor, class T, class Graph>
+ inline void
+ invoke_dispatch(Visitor&, T, Graph&, false_tag) { }
+ } // namespace detail
+
+ template <class Visitor, class Rest, class T, class Graph, class Tag>
+ inline void
+ invoke_visitors(std::pair<Visitor, Rest>& vlist, T x, Graph& g, Tag tag) {
+ typedef typename Visitor::event_filter Category;
+ typedef typename graph_detail::is_same<Category, Tag>::is_same_tag
+ IsSameTag;
+ detail::invoke_dispatch(vlist.first, x, g, IsSameTag());
+ invoke_visitors(vlist.second, x, g, tag);
+ }
+#if defined(BOOST_MSVC) && BOOST_MSVC <= 1300
+ template <class Visitor, class T, class Graph, class Tag>
+ inline void
+ invoke_visitors(base_visitor<Visitor>& vis, T x, Graph& g, Tag) {
+ typedef typename Visitor::event_filter Category;
+ typedef typename graph_detail::is_same<Category, Tag>::is_same_tag
+ IsSameTag;
+ Visitor& v = static_cast<Visitor&>(vis);
+ detail::invoke_dispatch(v, x, g, IsSameTag());
+ }
+#else
+ template <class Visitor, class T, class Graph, class Tag>
+ inline void
+ invoke_visitors(Visitor& v, T x, Graph& g, Tag) {
+ typedef typename Visitor::event_filter Category;
+ typedef typename graph_detail::is_same<Category, Tag>::is_same_tag
+ IsSameTag;
+ detail::invoke_dispatch(v, x, g, IsSameTag());
+ }
+#endif
+
+ //========================================================================
+ // predecessor_recorder
+
+ template <class PredecessorMap, class Tag>
+ struct predecessor_recorder
+ : public base_visitor<predecessor_recorder<PredecessorMap, Tag> >
+ {
+ typedef Tag event_filter;
+ predecessor_recorder(PredecessorMap pa) : m_predecessor(pa) { }
+ template <class Edge, class Graph>
+ void operator()(Edge e, const Graph& g) {
+ put(m_predecessor, target(e, g), source(e, g));
+ }
+ PredecessorMap m_predecessor;
+ };
+ template <class PredecessorMap, class Tag>
+ predecessor_recorder<PredecessorMap, Tag>
+ record_predecessors(PredecessorMap pa, Tag) {
+ return predecessor_recorder<PredecessorMap, Tag> (pa);
+ }
+
+ //========================================================================
+ // edge_predecessor_recorder
+
+ template <class PredEdgeMap, class Tag>
+ struct edge_predecessor_recorder
+ : public base_visitor<edge_predecessor_recorder<PredEdgeMap, Tag> >
+ {
+ typedef Tag event_filter;
+ edge_predecessor_recorder(PredEdgeMap pa) : m_predecessor(pa) { }
+ template <class Edge, class Graph>
+ void operator()(Edge e, const Graph& g) {
+ put(m_predecessor, target(e, g), e);
+ }
+ PredEdgeMap m_predecessor;
+ };
+ template <class PredEdgeMap, class Tag>
+ edge_predecessor_recorder<PredEdgeMap, Tag>
+ record_edge_predecessors(PredEdgeMap pa, Tag) {
+ return edge_predecessor_recorder<PredEdgeMap, Tag> (pa);
+ }
+
+ //========================================================================
+ // distance_recorder
+
+ template <class DistanceMap, class Tag>
+ struct distance_recorder
+ : public base_visitor<distance_recorder<DistanceMap, Tag> >
+ {
+ typedef Tag event_filter;
+ distance_recorder(DistanceMap pa) : m_distance(pa) { }
+ template <class Edge, class Graph>
+ void operator()(Edge e, const Graph& g) {
+ typename graph_traits<Graph>::vertex_descriptor
+ u = source(e, g), v = target(e, g);
+ put(m_distance, v, get(m_distance, u) + 1);
+ }
+ DistanceMap m_distance;
+ };
+ template <class DistanceMap, class Tag>
+ distance_recorder<DistanceMap, Tag>
+ record_distances(DistanceMap pa, Tag) {
+ return distance_recorder<DistanceMap, Tag> (pa);
+ }
+
+ //========================================================================
+ // time_stamper
+
+
+ template <class TimeMap, class TimeT, class Tag>
+ struct time_stamper
+ : public base_visitor<time_stamper<TimeMap, TimeT, Tag> >
+ {
+ typedef Tag event_filter;
+ time_stamper(TimeMap pa, TimeT& t) : m_time_pa(pa), m_time(t) { }
+ template <class Vertex, class Graph>
+ void operator()(Vertex u, const Graph&) {
+ put(m_time_pa, u, ++m_time);
+ }
+ TimeMap m_time_pa;
+ TimeT& m_time;
+ };
+ template <class TimeMap, class TimeT, class Tag>
+ time_stamper<TimeMap, TimeT, Tag>
+ stamp_times(TimeMap pa, TimeT& time_counter, Tag) {
+ return time_stamper<TimeMap, TimeT, Tag>(pa, time_counter);
+ }
+
+ //========================================================================
+ // property_writer
+
+ template <class PA, class OutputIterator, class Tag>
+ struct property_writer
+ : public base_visitor<property_writer<PA, OutputIterator, Tag> >
+ {
+ typedef Tag event_filter;
+
+ property_writer(PA pa, OutputIterator out) : m_pa(pa), m_out(out) { }
+
+ template <class T, class Graph>
+ void operator()(T x, Graph&) { *m_out++ = get(m_pa, x); }
+ PA m_pa;
+ OutputIterator m_out;
+ };
+ template <class PA, class OutputIterator, class Tag>
+ property_writer<PA, OutputIterator, Tag>
+ write_property(PA pa, OutputIterator out, Tag) {
+ return property_writer<PA, OutputIterator, Tag>(pa, out);
+ }
+
+#define BOOST_GRAPH_EVENT_STUB(Event,Kind) \
+ typedef ::boost::Event Event##_type; \
+ template<typename Visitor> \
+ Kind##_visitor<std::pair<detail::functor_to_visitor<Event##_type, \
+ Visitor>, Visitors> > \
+ do_##Event(Visitor visitor) \
+ { \
+ typedef std::pair<detail::functor_to_visitor<Event##_type, Visitor>, \
+ Visitors> visitor_list; \
+ typedef Kind##_visitor<visitor_list> result_type; \
+ return result_type(visitor_list(visitor, m_vis)); \
+ }
+
+} /* namespace boost */
+
+#endif
diff --git a/boost/boost/graph/wavefront.hpp b/boost/boost/graph/wavefront.hpp
new file mode 100644
index 00000000000..c5118406649
--- /dev/null
+++ b/boost/boost/graph/wavefront.hpp
@@ -0,0 +1,135 @@
+//
+//=======================================================================
+// Copyright 2002 Marc Wintermantel (wintermantel@even-ag.ch)
+// ETH Zurich, Center of Structure Technologies (www.imes.ethz.ch/st)
+//
+// 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_GRAPH_WAVEFRONT_HPP
+#define BOOST_GRAPH_WAVEFRONT_HPP
+
+#include <boost/config.hpp>
+#include <boost/graph/graph_traits.hpp>
+#include <boost/detail/numeric_traits.hpp>
+#include <boost/graph/bandwidth.hpp>
+#include <cmath>
+#include <vector>
+#include <algorithm> // for std::min and std::max
+
+namespace boost {
+
+ template <typename Graph, typename VertexIndexMap>
+ typename graph_traits<Graph>::vertices_size_type
+ ith_wavefront(typename graph_traits<Graph>::vertex_descriptor i,
+ const Graph& g,
+ VertexIndexMap index)
+ {
+ typename graph_traits<Graph>::vertex_descriptor v, w;
+ typename graph_traits<Graph>::vertices_size_type b = 1;
+ typename graph_traits<Graph>::out_edge_iterator edge_it2, edge_it2_end;
+ typename graph_traits<Graph>::vertices_size_type index_i = index[i];
+ std::vector<bool> rows_active(num_vertices(g), false);
+
+ rows_active[index_i] = true;
+
+ typename graph_traits<Graph>::vertex_iterator ui, ui_end;
+ for (tie(ui, ui_end) = vertices(g); ui != ui_end; ++ui)
+ {
+ v = *ui;
+ if(index[v] <= index_i)
+ {
+ for (tie(edge_it2, edge_it2_end) = out_edges(v, g); edge_it2 != edge_it2_end; ++edge_it2)
+ {
+ w = target(*edge_it2, g);
+ if( (index[w] >= index_i) && (!rows_active[index[w]]) )
+ {
+ b++;
+ rows_active[index[w]] = true;
+ }
+ }
+ }
+ }
+
+ return b;
+ }
+
+
+ template <typename Graph>
+ typename graph_traits<Graph>::vertices_size_type
+ ith_wavefront(typename graph_traits<Graph>::vertex_descriptor i,
+ const Graph& g)
+ {
+ return ith_wavefront(i, g, get(vertex_index, g));
+ }
+
+
+ template <typename Graph, typename VertexIndexMap>
+ typename graph_traits<Graph>::vertices_size_type
+ max_wavefront(const Graph& g, VertexIndexMap index)
+ {
+ BOOST_USING_STD_MAX();
+ typename graph_traits<Graph>::vertices_size_type b = 0;
+ typename graph_traits<Graph>::vertex_iterator i, end;
+ for (tie(i, end) = vertices(g); i != end; ++i)
+ b = max BOOST_PREVENT_MACRO_SUBSTITUTION(b, ith_wavefront(*i, g, index));
+ return b;
+ }
+
+ template <typename Graph>
+ typename graph_traits<Graph>::vertices_size_type
+ max_wavefront(const Graph& g)
+ {
+ return max_wavefront(g, get(vertex_index, g));
+ }
+
+
+ template <typename Graph, typename VertexIndexMap>
+ double
+ aver_wavefront(const Graph& g, VertexIndexMap index)
+ {
+ double b = 0;
+ typename graph_traits<Graph>::vertex_iterator i, end;
+ for (tie(i, end) = vertices(g); i != end; ++i)
+ b += ith_wavefront(*i, g, index);
+
+ b /= num_vertices(g);
+ return b;
+ }
+
+ template <typename Graph>
+ double
+ aver_wavefront(const Graph& g)
+ {
+ return aver_wavefront(g, get(vertex_index, g));
+ }
+
+
+ template <typename Graph, typename VertexIndexMap>
+ double
+ rms_wavefront(const Graph& g, VertexIndexMap index)
+ {
+ double b = 0;
+ typename graph_traits<Graph>::vertex_iterator i, end;
+ for (tie(i, end) = vertices(g); i != end; ++i)
+ b += std::pow(double ( ith_wavefront(*i, g, index) ), 2.0);
+
+ b /= num_vertices(g);
+
+ return std::sqrt(b);
+ }
+
+ template <typename Graph>
+ double
+ rms_wavefront(const Graph& g)
+ {
+ return rms_wavefront(g, get(vertex_index, g));
+ }
+
+
+} // namespace boost
+
+#endif // BOOST_GRAPH_WAVEFRONT_HPP
diff --git a/boost/boost/implicit_cast.hpp b/boost/boost/implicit_cast.hpp
new file mode 100644
index 00000000000..70430853a34
--- /dev/null
+++ b/boost/boost/implicit_cast.hpp
@@ -0,0 +1,29 @@
+// Copyright David Abrahams 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)
+#ifndef IMPLICIT_CAST_DWA200356_HPP
+# define IMPLICIT_CAST_DWA200356_HPP
+
+# include <boost/mpl/identity.hpp>
+
+namespace boost {
+
+// implementation originally suggested by C. Green in
+// http://lists.boost.org/MailArchives/boost/msg00886.php
+
+// The use of identity creates a non-deduced form, so that the
+// explicit template argument must be supplied
+template <typename T>
+inline T implicit_cast (typename mpl::identity<T>::type x) {
+ return x;
+}
+
+// incomplete return type now is here
+//template <typename T>
+//void implicit_cast (...);
+
+
+} // namespace boost
+
+#endif // IMPLICIT_CAST_DWA200356_HPP
diff --git a/boost/boost/indirect_reference.hpp b/boost/boost/indirect_reference.hpp
new file mode 100644
index 00000000000..5fbb3423199
--- /dev/null
+++ b/boost/boost/indirect_reference.hpp
@@ -0,0 +1,43 @@
+#ifndef INDIRECT_REFERENCE_DWA200415_HPP
+# define INDIRECT_REFERENCE_DWA200415_HPP
+
+//
+// Copyright David Abrahams 2004. Use, modification and distribution is
+// 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)
+//
+// typename indirect_reference<P>::type provides the type of *p.
+//
+// http://www.boost.org/libs/iterator/doc/pointee.html
+//
+
+# include <boost/detail/is_incrementable.hpp>
+# include <boost/iterator/iterator_traits.hpp>
+# include <boost/type_traits/remove_cv.hpp>
+# include <boost/mpl/eval_if.hpp>
+# include <boost/pointee.hpp>
+
+namespace boost {
+
+namespace detail
+{
+ template <class P>
+ struct smart_ptr_reference
+ {
+ typedef typename boost::pointee<P>::type& type;
+ };
+}
+
+template <class P>
+struct indirect_reference
+ : mpl::eval_if<
+ detail::is_incrementable<P>
+ , iterator_reference<P>
+ , detail::smart_ptr_reference<P>
+ >
+{
+};
+
+} // namespace boost
+
+#endif // INDIRECT_REFERENCE_DWA200415_HPP
diff --git a/boost/boost/integer.hpp b/boost/boost/integer.hpp
new file mode 100644
index 00000000000..aa8b22c508c
--- /dev/null
+++ b/boost/boost/integer.hpp
@@ -0,0 +1,127 @@
+// boost integer.hpp header file -------------------------------------------//
+
+// Copyright Beman Dawes and Daryle Walker 1999. 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/integer for documentation.
+
+// Revision History
+// 22 Sep 01 Added value-based integer templates. (Daryle Walker)
+// 01 Apr 01 Modified to use new <boost/limits.hpp> header. (John Maddock)
+// 30 Jul 00 Add typename syntax fix (Jens Maurer)
+// 28 Aug 99 Initial version
+
+#ifndef BOOST_INTEGER_HPP
+#define BOOST_INTEGER_HPP
+
+#include <boost/integer_fwd.hpp> // self include
+
+#include <boost/integer_traits.hpp> // for boost::integer_traits
+#include <boost/limits.hpp> // for std::numeric_limits
+
+namespace boost
+{
+
+ // Helper templates ------------------------------------------------------//
+
+ // fast integers from least integers
+ // int_fast_t<> works correctly for unsigned too, in spite of the name.
+ template< typename LeastInt >
+ struct int_fast_t { typedef LeastInt fast; }; // imps may specialize
+
+ // convert category to type
+ template< int Category > struct int_least_helper {}; // default is empty
+
+ // specializatons: 1=long, 2=int, 3=short, 4=signed char,
+ // 6=unsigned long, 7=unsigned int, 8=unsigned short, 9=unsigned long
+ // no specializations for 0 and 5: requests for a type > long are in error
+ template<> struct int_least_helper<1> { typedef long least; };
+ template<> struct int_least_helper<2> { typedef int least; };
+ template<> struct int_least_helper<3> { typedef short least; };
+ template<> struct int_least_helper<4> { typedef signed char least; };
+ template<> struct int_least_helper<6> { typedef unsigned long least; };
+ template<> struct int_least_helper<7> { typedef unsigned int least; };
+ template<> struct int_least_helper<8> { typedef unsigned short least; };
+ template<> struct int_least_helper<9> { typedef unsigned char least; };
+
+ // integer templates specifying number of bits ---------------------------//
+
+ // signed
+ template< int Bits > // bits (including sign) required
+ struct int_t
+ {
+ typedef typename int_least_helper
+ <
+ (Bits-1 <= std::numeric_limits<long>::digits) +
+ (Bits-1 <= std::numeric_limits<int>::digits) +
+ (Bits-1 <= std::numeric_limits<short>::digits) +
+ (Bits-1 <= std::numeric_limits<signed char>::digits)
+ >::least least;
+ typedef typename int_fast_t<least>::fast fast;
+ };
+
+ // unsigned
+ template< int Bits > // bits required
+ struct uint_t
+ {
+ typedef typename int_least_helper
+ <
+ 5 +
+ (Bits <= std::numeric_limits<unsigned long>::digits) +
+ (Bits <= std::numeric_limits<unsigned int>::digits) +
+ (Bits <= std::numeric_limits<unsigned short>::digits) +
+ (Bits <= std::numeric_limits<unsigned char>::digits)
+ >::least least;
+ typedef typename int_fast_t<least>::fast fast;
+ // int_fast_t<> works correctly for unsigned too, in spite of the name.
+ };
+
+ // integer templates specifying extreme value ----------------------------//
+
+ // signed
+ template< long MaxValue > // maximum value to require support
+ struct int_max_value_t
+ {
+ typedef typename int_least_helper
+ <
+ (MaxValue <= integer_traits<long>::const_max) +
+ (MaxValue <= integer_traits<int>::const_max) +
+ (MaxValue <= integer_traits<short>::const_max) +
+ (MaxValue <= integer_traits<signed char>::const_max)
+ >::least least;
+ typedef typename int_fast_t<least>::fast fast;
+ };
+
+ template< long MinValue > // minimum value to require support
+ struct int_min_value_t
+ {
+ typedef typename int_least_helper
+ <
+ (MinValue >= integer_traits<long>::const_min) +
+ (MinValue >= integer_traits<int>::const_min) +
+ (MinValue >= integer_traits<short>::const_min) +
+ (MinValue >= integer_traits<signed char>::const_min)
+ >::least least;
+ typedef typename int_fast_t<least>::fast fast;
+ };
+
+ // unsigned
+ template< unsigned long Value > // maximum value to require support
+ struct uint_value_t
+ {
+ typedef typename int_least_helper
+ <
+ 5 +
+ (Value <= integer_traits<unsigned long>::const_max) +
+ (Value <= integer_traits<unsigned int>::const_max) +
+ (Value <= integer_traits<unsigned short>::const_max) +
+ (Value <= integer_traits<unsigned char>::const_max)
+ >::least least;
+ typedef typename int_fast_t<least>::fast fast;
+ };
+
+
+} // namespace boost
+
+#endif // BOOST_INTEGER_HPP
diff --git a/boost/boost/integer/integer_mask.hpp b/boost/boost/integer/integer_mask.hpp
new file mode 100644
index 00000000000..0a092d38503
--- /dev/null
+++ b/boost/boost/integer/integer_mask.hpp
@@ -0,0 +1,93 @@
+// Boost integer/integer_mask.hpp header file ------------------------------//
+
+// (C) Copyright Daryle Walker 2001.
+// 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 updates, documentation, and revision history.
+
+#ifndef BOOST_INTEGER_INTEGER_MASK_HPP
+#define BOOST_INTEGER_INTEGER_MASK_HPP
+
+#include <boost/integer_fwd.hpp> // self include
+
+#include <boost/config.hpp> // for BOOST_STATIC_CONSTANT
+#include <boost/integer.hpp> // for boost::uint_t
+
+#include <climits> // for UCHAR_MAX, etc.
+#include <cstddef> // for std::size_t
+
+#include <boost/limits.hpp> // for std::numeric_limits
+
+
+namespace boost
+{
+
+
+// Specified single-bit mask class declaration -----------------------------//
+// (Lowest bit starts counting at 0.)
+
+template < std::size_t Bit >
+struct high_bit_mask_t
+{
+ typedef typename uint_t<(Bit + 1)>::least least;
+ typedef typename uint_t<(Bit + 1)>::fast fast;
+
+ BOOST_STATIC_CONSTANT( least, high_bit = (least( 1u ) << Bit) );
+ BOOST_STATIC_CONSTANT( fast, high_bit_fast = (fast( 1u ) << Bit) );
+
+ BOOST_STATIC_CONSTANT( std::size_t, bit_position = Bit );
+
+}; // boost::high_bit_mask_t
+
+
+// Specified bit-block mask class declaration ------------------------------//
+// Makes masks for the lowest N bits
+// (Specializations are needed when N fills up a type.)
+
+template < std::size_t Bits >
+struct low_bits_mask_t
+{
+ typedef typename uint_t<Bits>::least least;
+ typedef typename uint_t<Bits>::fast fast;
+
+ BOOST_STATIC_CONSTANT( least, sig_bits = (~( ~(least( 0u )) << Bits )) );
+ BOOST_STATIC_CONSTANT( fast, sig_bits_fast = fast(sig_bits) );
+
+ BOOST_STATIC_CONSTANT( std::size_t, bit_count = Bits );
+
+}; // boost::low_bits_mask_t
+
+
+#define BOOST_LOW_BITS_MASK_SPECIALIZE( Type ) \
+ template < > struct low_bits_mask_t< std::numeric_limits<Type>::digits > { \
+ typedef std::numeric_limits<Type> limits_type; \
+ typedef uint_t<limits_type::digits>::least least; \
+ typedef uint_t<limits_type::digits>::fast fast; \
+ BOOST_STATIC_CONSTANT( least, sig_bits = (~( least(0u) )) ); \
+ BOOST_STATIC_CONSTANT( fast, sig_bits_fast = fast(sig_bits) ); \
+ BOOST_STATIC_CONSTANT( std::size_t, bit_count = limits_type::digits ); \
+ }
+
+BOOST_LOW_BITS_MASK_SPECIALIZE( unsigned char );
+
+#if USHRT_MAX > UCHAR_MAX
+BOOST_LOW_BITS_MASK_SPECIALIZE( unsigned short );
+#endif
+
+#if UINT_MAX > USHRT_MAX
+BOOST_LOW_BITS_MASK_SPECIALIZE( unsigned int );
+#endif
+
+#if ULONG_MAX > UINT_MAX
+BOOST_LOW_BITS_MASK_SPECIALIZE( unsigned long );
+#endif
+
+#undef BOOST_LOW_BITS_MASK_SPECIALIZE
+
+
+} // namespace boost
+
+
+#endif // BOOST_INTEGER_INTEGER_MASK_HPP
diff --git a/boost/boost/integer/static_log2.hpp b/boost/boost/integer/static_log2.hpp
new file mode 100644
index 00000000000..19e048bd032
--- /dev/null
+++ b/boost/boost/integer/static_log2.hpp
@@ -0,0 +1,132 @@
+// -------------- Boost static_log2.hpp header file ----------------------- //
+//
+// Copyright (C) 2001 Daryle Walker.
+// Copyright (C) 2003 Vesa Karvonen.
+// Copyright (C) 2003 Gennaro Prota.
+//
+// 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/integer for documentation.
+// ------------------------------------------------------------------------- //
+
+
+#ifndef BOOST_INTEGER_STATIC_LOG2_HPP
+#define BOOST_INTEGER_STATIC_LOG2_HPP
+
+#include "boost/config.hpp" // for BOOST_STATIC_CONSTANT
+
+namespace boost {
+
+ namespace detail {
+
+ namespace static_log2_impl {
+
+ // choose_initial_n<>
+ //
+ // Recursively doubles its integer argument, until it
+ // becomes >= of the "width" (C99, 6.2.6.2p4) of
+ // static_log2_argument_type.
+ //
+ // Used to get the maximum power of two less then the width.
+ //
+ // Example: if on your platform argument_type has 48 value
+ // bits it yields n=32.
+ //
+ // It's easy to prove that, starting from such a value
+ // of n, the core algorithm works correctly for any width
+ // of static_log2_argument_type and that recursion always
+ // terminates with x = 1 and n = 0 (see the algorithm's
+ // invariant).
+
+ typedef unsigned long argument_type;
+ typedef int result_type;
+
+
+ template <result_type n>
+ struct choose_initial_n {
+
+ enum { c = (argument_type(1) << n << n) != 0 };
+ BOOST_STATIC_CONSTANT(
+ result_type,
+ value = !c*n + choose_initial_n<2*c*n>::value
+ );
+
+ };
+
+ template <>
+ struct choose_initial_n<0> {
+ BOOST_STATIC_CONSTANT(result_type, value = 0);
+ };
+
+
+
+ // start computing from n_zero - must be a power of two
+ const result_type n_zero = 16;
+ const result_type initial_n = choose_initial_n<n_zero>::value;
+
+ // static_log2_impl<>
+ //
+ // * Invariant:
+ // 2n
+ // 1 <= x && x < 2 at the start of each recursion
+ // (see also choose_initial_n<>)
+ //
+ // * Type requirements:
+ //
+ // argument_type maybe any unsigned type with at least n_zero + 1
+ // value bits. (Note: If larger types will be standardized -e.g.
+ // unsigned long long- then the argument_type typedef can be
+ // changed without affecting the rest of the code.)
+ //
+
+ template <argument_type x, result_type n = initial_n>
+ struct static_log2_impl {
+
+ enum { c = (x >> n) > 0 }; // x >= 2**n ?
+ BOOST_STATIC_CONSTANT(
+ result_type,
+ value = c*n + (static_log2_impl< (x>>c*n), n/2 >::value)
+ );
+
+ };
+
+ template <>
+ struct static_log2_impl<1, 0> {
+ BOOST_STATIC_CONSTANT(result_type, value = 0);
+ };
+
+ }
+ } // detail
+
+
+
+ // --------------------------------------
+ // static_log2<x>
+ // ----------------------------------------
+
+ typedef detail::static_log2_impl::argument_type static_log2_argument_type;
+ typedef detail::static_log2_impl::result_type static_log2_result_type;
+
+
+ template <static_log2_argument_type x>
+ struct static_log2 {
+
+ BOOST_STATIC_CONSTANT(
+ static_log2_result_type,
+ value = detail::static_log2_impl::static_log2_impl<x>::value
+ );
+
+ };
+
+
+ template <>
+ struct static_log2<0> { };
+
+}
+
+
+
+#endif // include guard
diff --git a/boost/boost/integer/static_min_max.hpp b/boost/boost/integer/static_min_max.hpp
new file mode 100644
index 00000000000..264603727f4
--- /dev/null
+++ b/boost/boost/integer/static_min_max.hpp
@@ -0,0 +1,55 @@
+// Boost integer/static_min_max.hpp header file ----------------------------//
+
+// (C) Copyright Daryle Walker 2001.
+// 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 updates, documentation, and revision history.
+
+#ifndef BOOST_INTEGER_STATIC_MIN_MAX_HPP
+#define BOOST_INTEGER_STATIC_MIN_MAX_HPP
+
+#include <boost/integer_fwd.hpp> // self include
+
+#include <boost/config.hpp> // for BOOST_STATIC_CONSTANT
+
+
+namespace boost
+{
+
+
+// Compile-time extrema class declarations ---------------------------------//
+// Get the minimum or maximum of two values, signed or unsigned.
+
+template < long Value1, long Value2 >
+struct static_signed_min
+{
+ BOOST_STATIC_CONSTANT( long, value = (Value1 > Value2) ? Value2 : Value1 );
+};
+
+template < long Value1, long Value2 >
+struct static_signed_max
+{
+ BOOST_STATIC_CONSTANT( long, value = (Value1 < Value2) ? Value2 : Value1 );
+};
+
+template < unsigned long Value1, unsigned long Value2 >
+struct static_unsigned_min
+{
+ BOOST_STATIC_CONSTANT( unsigned long, value
+ = (Value1 > Value2) ? Value2 : Value1 );
+};
+
+template < unsigned long Value1, unsigned long Value2 >
+struct static_unsigned_max
+{
+ BOOST_STATIC_CONSTANT( unsigned long, value
+ = (Value1 < Value2) ? Value2 : Value1 );
+};
+
+
+} // namespace boost
+
+
+#endif // BOOST_INTEGER_STATIC_MIN_MAX_HPP
diff --git a/boost/boost/integer_fwd.hpp b/boost/boost/integer_fwd.hpp
new file mode 100644
index 00000000000..33cfc9986f3
--- /dev/null
+++ b/boost/boost/integer_fwd.hpp
@@ -0,0 +1,152 @@
+// Boost integer_fwd.hpp header file ---------------------------------------//
+
+// (C) Copyright Dave Abrahams and Daryle Walker 2001. 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/integer for documentation.
+
+#ifndef BOOST_INTEGER_FWD_HPP
+#define BOOST_INTEGER_FWD_HPP
+
+#include <climits> // for UCHAR_MAX, etc.
+#include <cstddef> // for std::size_t
+
+#include <boost/config.hpp> // for BOOST_NO_INTRINSIC_WCHAR_T
+#include <boost/limits.hpp> // for std::numeric_limits
+
+
+namespace boost
+{
+
+
+// From <boost/cstdint.hpp> ------------------------------------------------//
+
+// Only has typedefs or using statements, with #conditionals
+
+
+// From <boost/integer_traits.hpp> -----------------------------------------//
+
+template < class T >
+ class integer_traits;
+
+template < >
+ class integer_traits< bool >;
+
+template < >
+ class integer_traits< char >;
+
+template < >
+ class integer_traits< signed char >;
+
+template < >
+ class integer_traits< unsigned char >;
+
+#ifndef BOOST_NO_INTRINSIC_WCHAR_T
+template < >
+ class integer_traits< wchar_t >;
+#endif
+
+template < >
+ class integer_traits< short >;
+
+template < >
+ class integer_traits< unsigned short >;
+
+template < >
+ class integer_traits< int >;
+
+template < >
+ class integer_traits< unsigned int >;
+
+template < >
+ class integer_traits< long >;
+
+template < >
+ class integer_traits< unsigned long >;
+
+#ifdef ULLONG_MAX
+template < >
+ class integer_traits< ::boost::long_long_type>;
+
+template < >
+ class integer_traits< ::boost::ulong_long_type >;
+#endif
+
+
+// From <boost/integer.hpp> ------------------------------------------------//
+
+template < typename LeastInt >
+ struct int_fast_t;
+
+template< int Bits >
+ struct int_t;
+
+template< int Bits >
+ struct uint_t;
+
+template< long MaxValue >
+ struct int_max_value_t;
+
+template< long MinValue >
+ struct int_min_value_t;
+
+template< unsigned long Value >
+ struct uint_value_t;
+
+
+// From <boost/integer/integer_mask.hpp> -----------------------------------//
+
+template < std::size_t Bit >
+ struct high_bit_mask_t;
+
+template < std::size_t Bits >
+ struct low_bits_mask_t;
+
+template < >
+ struct low_bits_mask_t< ::std::numeric_limits<unsigned char>::digits >;
+
+#if USHRT_MAX > UCHAR_MAX
+template < >
+ struct low_bits_mask_t< ::std::numeric_limits<unsigned short>::digits >;
+#endif
+
+#if UINT_MAX > USHRT_MAX
+template < >
+ struct low_bits_mask_t< ::std::numeric_limits<unsigned int>::digits >;
+#endif
+
+#if ULONG_MAX > UINT_MAX
+template < >
+ struct low_bits_mask_t< ::std::numeric_limits<unsigned long>::digits >;
+#endif
+
+
+// From <boost/integer/static_log2.hpp> ------------------------------------//
+
+template < unsigned long Value >
+ struct static_log2;
+
+template < >
+ struct static_log2< 0ul >;
+
+
+// From <boost/integer/static_min_max.hpp> ---------------------------------//
+
+template < long Value1, long Value2 >
+ struct static_signed_min;
+
+template < long Value1, long Value2 >
+ struct static_signed_max;
+
+template < unsigned long Value1, unsigned long Value2 >
+ struct static_unsigned_min;
+
+template < unsigned long Value1, unsigned long Value2 >
+ struct static_unsigned_max;
+
+
+} // namespace boost
+
+
+#endif // BOOST_INTEGER_FWD_HPP
diff --git a/boost/boost/integer_traits.hpp b/boost/boost/integer_traits.hpp
new file mode 100644
index 00000000000..2accb2f63f5
--- /dev/null
+++ b/boost/boost/integer_traits.hpp
@@ -0,0 +1,236 @@
+/* boost integer_traits.hpp header file
+ *
+ * Copyright Jens Maurer 2000
+ * 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)
+ *
+ * $Id: integer_traits.hpp,v 1.30 2006/02/05 10:19:42 johnmaddock Exp $
+ *
+ * Idea by Beman Dawes, Ed Brey, Steve Cleary, and Nathan Myers
+ */
+
+// See http://www.boost.org/libs/integer for documentation.
+
+
+#ifndef BOOST_INTEGER_TRAITS_HPP
+#define BOOST_INTEGER_TRAITS_HPP
+
+#include <boost/config.hpp>
+#include <boost/limits.hpp>
+
+// These are an implementation detail and not part of the interface
+#include <limits.h>
+// we need wchar.h for WCHAR_MAX/MIN but not all platforms provide it,
+// and some may have <wchar.h> but not <cwchar> ...
+#if !defined(BOOST_NO_INTRINSIC_WCHAR_T) && (!defined(BOOST_NO_CWCHAR) || defined(sun) || defined(__sun) || defined(__QNX__))
+#include <wchar.h>
+#endif
+
+
+namespace boost {
+template<class T>
+class integer_traits : public std::numeric_limits<T>
+{
+public:
+ BOOST_STATIC_CONSTANT(bool, is_integral = false);
+};
+
+namespace detail {
+template<class T, T min_val, T max_val>
+class integer_traits_base
+{
+public:
+ BOOST_STATIC_CONSTANT(bool, is_integral = true);
+ BOOST_STATIC_CONSTANT(T, const_min = min_val);
+ BOOST_STATIC_CONSTANT(T, const_max = max_val);
+};
+
+#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION
+// A definition is required even for integral static constants
+template<class T, T min_val, T max_val>
+const bool integer_traits_base<T, min_val, max_val>::is_integral;
+
+template<class T, T min_val, T max_val>
+const T integer_traits_base<T, min_val, max_val>::const_min;
+
+template<class T, T min_val, T max_val>
+const T integer_traits_base<T, min_val, max_val>::const_max;
+#endif
+
+} // namespace detail
+
+template<>
+class integer_traits<bool>
+ : public std::numeric_limits<bool>,
+ public detail::integer_traits_base<bool, false, true>
+{ };
+
+template<>
+class integer_traits<char>
+ : public std::numeric_limits<char>,
+ public detail::integer_traits_base<char, CHAR_MIN, CHAR_MAX>
+{ };
+
+template<>
+class integer_traits<signed char>
+ : public std::numeric_limits<signed char>,
+ public detail::integer_traits_base<signed char, SCHAR_MIN, SCHAR_MAX>
+{ };
+
+template<>
+class integer_traits<unsigned char>
+ : public std::numeric_limits<unsigned char>,
+ public detail::integer_traits_base<unsigned char, 0, UCHAR_MAX>
+{ };
+
+#ifndef BOOST_NO_INTRINSIC_WCHAR_T
+template<>
+class integer_traits<wchar_t>
+ : public std::numeric_limits<wchar_t>,
+ // Don't trust WCHAR_MIN and WCHAR_MAX with Mac OS X's native
+ // library: they are wrong!
+#if defined(WCHAR_MIN) && defined(WCHAR_MAX) && !defined(__APPLE__)
+ public detail::integer_traits_base<wchar_t, WCHAR_MIN, WCHAR_MAX>
+#elif defined(__BORLANDC__) || defined(__CYGWIN__) || defined(__MINGW32__) || (defined(__BEOS__) && defined(__GNUC__))
+ // No WCHAR_MIN and WCHAR_MAX, whar_t is short and unsigned:
+ public detail::integer_traits_base<wchar_t, 0, 0xffff>
+#elif (defined(__sgi) && (!defined(__SGI_STL_PORT) || __SGI_STL_PORT < 0x400))\
+ || (defined __APPLE__)\
+ || (defined(__OpenBSD__) && defined(__GNUC__))\
+ || (defined(__NetBSD__) && defined(__GNUC__))\
+ || (defined(__FreeBSD__) && defined(__GNUC__))\
+ || (defined(__DragonFly__) && defined(__GNUC__))\
+ || (defined(__hpux) && defined(__GNUC__) && (__GNUC__ == 3) && !defined(__SGI_STL_PORT))
+ // No WCHAR_MIN and WCHAR_MAX, wchar_t has the same range as int.
+ // - SGI MIPSpro with native library
+ // - gcc 3.x on HP-UX
+ // - Mac OS X with native library
+ // - gcc on FreeBSD, OpenBSD and NetBSD
+ public detail::integer_traits_base<wchar_t, INT_MIN, INT_MAX>
+#elif defined(__hpux) && defined(__GNUC__) && (__GNUC__ == 2) && !defined(__SGI_STL_PORT)
+ // No WCHAR_MIN and WCHAR_MAX, wchar_t has the same range as unsigned int.
+ // - gcc 2.95.x on HP-UX
+ // (also, std::numeric_limits<wchar_t> appears to return the wrong values).
+ public detail::integer_traits_base<wchar_t, 0, UINT_MAX>
+#else
+#error No WCHAR_MIN and WCHAR_MAX present, please adjust integer_traits<> for your compiler.
+#endif
+{ };
+#endif // BOOST_NO_INTRINSIC_WCHAR_T
+
+template<>
+class integer_traits<short>
+ : public std::numeric_limits<short>,
+ public detail::integer_traits_base<short, SHRT_MIN, SHRT_MAX>
+{ };
+
+template<>
+class integer_traits<unsigned short>
+ : public std::numeric_limits<unsigned short>,
+ public detail::integer_traits_base<unsigned short, 0, USHRT_MAX>
+{ };
+
+template<>
+class integer_traits<int>
+ : public std::numeric_limits<int>,
+ public detail::integer_traits_base<int, INT_MIN, INT_MAX>
+{ };
+
+template<>
+class integer_traits<unsigned int>
+ : public std::numeric_limits<unsigned int>,
+ public detail::integer_traits_base<unsigned int, 0, UINT_MAX>
+{ };
+
+template<>
+class integer_traits<long>
+ : public std::numeric_limits<long>,
+ public detail::integer_traits_base<long, LONG_MIN, LONG_MAX>
+{ };
+
+template<>
+class integer_traits<unsigned long>
+ : public std::numeric_limits<unsigned long>,
+ public detail::integer_traits_base<unsigned long, 0, ULONG_MAX>
+{ };
+
+#if !defined(BOOST_NO_INTEGRAL_INT64_T) && !defined(BOOST_NO_INT64_T)
+#if defined(ULLONG_MAX) && defined(BOOST_HAS_LONG_LONG)
+
+template<>
+class integer_traits< ::boost::long_long_type>
+ : public std::numeric_limits< ::boost::long_long_type>,
+ public detail::integer_traits_base< ::boost::long_long_type, LLONG_MIN, LLONG_MAX>
+{ };
+
+template<>
+class integer_traits< ::boost::ulong_long_type>
+ : public std::numeric_limits< ::boost::ulong_long_type>,
+ public detail::integer_traits_base< ::boost::ulong_long_type, 0, ULLONG_MAX>
+{ };
+
+#elif defined(ULONG_LONG_MAX) && defined(BOOST_HAS_LONG_LONG)
+
+template<>
+class integer_traits< ::boost::long_long_type> : public std::numeric_limits< ::boost::long_long_type>, public detail::integer_traits_base< ::boost::long_long_type, LONG_LONG_MIN, LONG_LONG_MAX>{ };
+template<>
+class integer_traits< ::boost::ulong_long_type>
+ : public std::numeric_limits< ::boost::ulong_long_type>,
+ public detail::integer_traits_base< ::boost::ulong_long_type, 0, ULONG_LONG_MAX>
+{ };
+
+#elif defined(ULONGLONG_MAX) && defined(BOOST_HAS_LONG_LONG)
+
+template<>
+class integer_traits< ::boost::long_long_type>
+ : public std::numeric_limits< ::boost::long_long_type>,
+ public detail::integer_traits_base< ::boost::long_long_type, LONGLONG_MIN, LONGLONG_MAX>
+{ };
+
+template<>
+class integer_traits< ::boost::ulong_long_type>
+ : public std::numeric_limits< ::boost::ulong_long_type>,
+ public detail::integer_traits_base< ::boost::ulong_long_type, 0, ULONGLONG_MAX>
+{ };
+
+#elif defined(_LLONG_MAX) && defined(_C2) && defined(BOOST_HAS_LONG_LONG)
+
+template<>
+class integer_traits< ::boost::long_long_type>
+ : public std::numeric_limits< ::boost::long_long_type>,
+ public detail::integer_traits_base< ::boost::long_long_type, -_LLONG_MAX - _C2, _LLONG_MAX>
+{ };
+
+template<>
+class integer_traits< ::boost::ulong_long_type>
+ : public std::numeric_limits< ::boost::ulong_long_type>,
+ public detail::integer_traits_base< ::boost::ulong_long_type, 0, _ULLONG_MAX>
+{ };
+
+#elif defined(BOOST_HAS_LONG_LONG)
+//
+// we have long long but no constants, this happens for example with gcc in -ansi mode,
+// we'll just have to work out the values for ourselves (assumes 2's compliment representation):
+//
+template<>
+class integer_traits< ::boost::long_long_type>
+ : public std::numeric_limits< ::boost::long_long_type>,
+ public detail::integer_traits_base< ::boost::long_long_type, (1LL << (sizeof(::boost::long_long_type) - 1)), ~(1LL << (sizeof(::boost::long_long_type) - 1))>
+{ };
+
+template<>
+class integer_traits< ::boost::ulong_long_type>
+ : public std::numeric_limits< ::boost::ulong_long_type>,
+ public detail::integer_traits_base< ::boost::ulong_long_type, 0, ~0uLL>
+{ };
+
+#endif
+#endif
+
+} // namespace boost
+
+#endif /* BOOST_INTEGER_TRAITS_HPP */
+
+
+
diff --git a/boost/boost/intrusive_ptr.hpp b/boost/boost/intrusive_ptr.hpp
new file mode 100644
index 00000000000..cd1ac11fae4
--- /dev/null
+++ b/boost/boost/intrusive_ptr.hpp
@@ -0,0 +1,277 @@
+#ifndef BOOST_INTRUSIVE_PTR_HPP_INCLUDED
+#define BOOST_INTRUSIVE_PTR_HPP_INCLUDED
+
+//
+// intrusive_ptr.hpp
+//
+// Copyright (c) 2001, 2002 Peter Dimov
+//
+// 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/smart_ptr/intrusive_ptr.html for documentation.
+//
+
+#include <boost/config.hpp>
+
+#ifdef BOOST_MSVC // moved here to work around VC++ compiler crash
+# pragma warning(push)
+# pragma warning(disable:4284) // odd return type for operator->
+#endif
+
+#include <boost/assert.hpp>
+#include <boost/detail/workaround.hpp>
+
+#include <functional> // for std::less
+#include <iosfwd> // for std::basic_ostream
+
+
+namespace boost
+{
+
+//
+// intrusive_ptr
+//
+// A smart pointer that uses intrusive reference counting.
+//
+// Relies on unqualified calls to
+//
+// void intrusive_ptr_add_ref(T * p);
+// void intrusive_ptr_release(T * p);
+//
+// (p != 0)
+//
+// The object is responsible for destroying itself.
+//
+
+template<class T> class intrusive_ptr
+{
+private:
+
+ typedef intrusive_ptr this_type;
+
+public:
+
+ typedef T element_type;
+
+ intrusive_ptr(): p_(0)
+ {
+ }
+
+ intrusive_ptr(T * p, bool add_ref = true): p_(p)
+ {
+ if(p_ != 0 && add_ref) intrusive_ptr_add_ref(p_);
+ }
+
+#if !defined(BOOST_NO_MEMBER_TEMPLATES) || defined(BOOST_MSVC6_MEMBER_TEMPLATES)
+
+ template<class U> intrusive_ptr(intrusive_ptr<U> const & rhs): p_(rhs.get())
+ {
+ if(p_ != 0) intrusive_ptr_add_ref(p_);
+ }
+
+#endif
+
+ intrusive_ptr(intrusive_ptr const & rhs): p_(rhs.p_)
+ {
+ if(p_ != 0) intrusive_ptr_add_ref(p_);
+ }
+
+ ~intrusive_ptr()
+ {
+ if(p_ != 0) intrusive_ptr_release(p_);
+ }
+
+#if !defined(BOOST_NO_MEMBER_TEMPLATES) || defined(BOOST_MSVC6_MEMBER_TEMPLATES)
+
+ template<class U> intrusive_ptr & operator=(intrusive_ptr<U> const & rhs)
+ {
+ this_type(rhs).swap(*this);
+ return *this;
+ }
+
+#endif
+
+ intrusive_ptr & operator=(intrusive_ptr const & rhs)
+ {
+ this_type(rhs).swap(*this);
+ return *this;
+ }
+
+ intrusive_ptr & operator=(T * rhs)
+ {
+ this_type(rhs).swap(*this);
+ return *this;
+ }
+
+ T * get() const
+ {
+ return p_;
+ }
+
+ T & operator*() const
+ {
+ return *p_;
+ }
+
+ T * operator->() const
+ {
+ return p_;
+ }
+
+#if defined(__SUNPRO_CC) && BOOST_WORKAROUND(__SUNPRO_CC, <= 0x530)
+
+ operator bool () const
+ {
+ return p_ != 0;
+ }
+
+#elif defined(__MWERKS__) && BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003))
+ typedef T * (this_type::*unspecified_bool_type)() const;
+
+ operator unspecified_bool_type() const // never throws
+ {
+ return p_ == 0? 0: &this_type::get;
+ }
+
+#else
+
+ typedef T * this_type::*unspecified_bool_type;
+
+ operator unspecified_bool_type () const
+ {
+ return p_ == 0? 0: &this_type::p_;
+ }
+
+#endif
+
+ // operator! is a Borland-specific workaround
+ bool operator! () const
+ {
+ return p_ == 0;
+ }
+
+ void swap(intrusive_ptr & rhs)
+ {
+ T * tmp = p_;
+ p_ = rhs.p_;
+ rhs.p_ = tmp;
+ }
+
+private:
+
+ T * p_;
+};
+
+template<class T, class U> inline bool operator==(intrusive_ptr<T> const & a, intrusive_ptr<U> const & b)
+{
+ return a.get() == b.get();
+}
+
+template<class T, class U> inline bool operator!=(intrusive_ptr<T> const & a, intrusive_ptr<U> const & b)
+{
+ return a.get() != b.get();
+}
+
+template<class T, class U> inline bool operator==(intrusive_ptr<T> const & a, U * b)
+{
+ return a.get() == b;
+}
+
+template<class T, class U> inline bool operator!=(intrusive_ptr<T> const & a, U * b)
+{
+ return a.get() != b;
+}
+
+template<class T, class U> inline bool operator==(T * a, intrusive_ptr<U> const & b)
+{
+ return a == b.get();
+}
+
+template<class T, class U> inline bool operator!=(T * a, intrusive_ptr<U> const & b)
+{
+ return a != b.get();
+}
+
+#if __GNUC__ == 2 && __GNUC_MINOR__ <= 96
+
+// Resolve the ambiguity between our op!= and the one in rel_ops
+
+template<class T> inline bool operator!=(intrusive_ptr<T> const & a, intrusive_ptr<T> const & b)
+{
+ return a.get() != b.get();
+}
+
+#endif
+
+template<class T> inline bool operator<(intrusive_ptr<T> const & a, intrusive_ptr<T> const & b)
+{
+ return std::less<T *>()(a.get(), b.get());
+}
+
+template<class T> void swap(intrusive_ptr<T> & lhs, intrusive_ptr<T> & rhs)
+{
+ lhs.swap(rhs);
+}
+
+// mem_fn support
+
+template<class T> T * get_pointer(intrusive_ptr<T> const & p)
+{
+ return p.get();
+}
+
+template<class T, class U> intrusive_ptr<T> static_pointer_cast(intrusive_ptr<U> const & p)
+{
+ return static_cast<T *>(p.get());
+}
+
+template<class T, class U> intrusive_ptr<T> const_pointer_cast(intrusive_ptr<U> const & p)
+{
+ return const_cast<T *>(p.get());
+}
+
+template<class T, class U> intrusive_ptr<T> dynamic_pointer_cast(intrusive_ptr<U> const & p)
+{
+ return dynamic_cast<T *>(p.get());
+}
+
+// operator<<
+
+#if defined(__GNUC__) && (__GNUC__ < 3)
+
+template<class Y> std::ostream & operator<< (std::ostream & os, intrusive_ptr<Y> const & p)
+{
+ os << p.get();
+ return os;
+}
+
+#else
+
+// in STLport's no-iostreams mode no iostream symbols can be used
+#ifndef _STLP_NO_IOSTREAMS
+
+# if defined(BOOST_MSVC) && BOOST_WORKAROUND(BOOST_MSVC, < 1300 && __SGI_STL_PORT)
+// MSVC6 has problems finding std::basic_ostream through the using declaration in namespace _STL
+using std::basic_ostream;
+template<class E, class T, class Y> basic_ostream<E, T> & operator<< (basic_ostream<E, T> & os, intrusive_ptr<Y> const & p)
+# else
+template<class E, class T, class Y> std::basic_ostream<E, T> & operator<< (std::basic_ostream<E, T> & os, intrusive_ptr<Y> const & p)
+# endif
+{
+ os << p.get();
+ return os;
+}
+
+#endif // _STLP_NO_IOSTREAMS
+
+#endif // __GNUC__ < 3
+
+} // namespace boost
+
+#ifdef BOOST_MSVC
+# pragma warning(pop)
+#endif
+
+#endif // #ifndef BOOST_INTRUSIVE_PTR_HPP_INCLUDED
diff --git a/boost/boost/io/ios_state.hpp b/boost/boost/io/ios_state.hpp
new file mode 100644
index 00000000000..2e66094d9b4
--- /dev/null
+++ b/boost/boost/io/ios_state.hpp
@@ -0,0 +1,417 @@
+// Boost io/ios_state.hpp header file --------------------------------------//
+
+// Copyright 2002, 2005 Daryle Walker. Use, modification, and distribution
+// are subject to the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or a copy at <http://www.boost.org/LICENSE_1_0.txt>.)
+
+// See <http://www.boost.org/libs/io/> for the library's home page.
+
+#ifndef BOOST_IO_IOS_STATE_HPP
+#define BOOST_IO_IOS_STATE_HPP
+
+#include <boost/io_fwd.hpp> // self include
+#include <boost/detail/workaround.hpp>
+
+#include <ios> // for std::ios_base, std::basic_ios, etc.
+#ifndef BOOST_NO_STD_LOCALE
+#include <locale> // for std::locale
+#endif
+#include <ostream> // for std::basic_ostream
+#include <streambuf> // for std::basic_streambuf
+#include <string> // for std::char_traits
+
+namespace boost
+{
+namespace io
+{
+
+
+// Basic stream state saver class declarations -----------------------------//
+
+class ios_flags_saver
+{
+public:
+ typedef ::std::ios_base state_type;
+ typedef ::std::ios_base::fmtflags aspect_type;
+
+ explicit ios_flags_saver( state_type &s )
+ : s_save_( s ), a_save_( s.flags() )
+ {}
+ ios_flags_saver( state_type &s, aspect_type const &a )
+ : s_save_( s ), a_save_( s.flags(a) )
+ {}
+ ~ios_flags_saver()
+ { this->restore(); }
+
+ void restore()
+ { s_save_.flags( a_save_ ); }
+
+private:
+ state_type & s_save_;
+ aspect_type const a_save_;
+};
+
+class ios_precision_saver
+{
+public:
+ typedef ::std::ios_base state_type;
+ typedef ::std::streamsize aspect_type;
+
+ explicit ios_precision_saver( state_type &s )
+ : s_save_( s ), a_save_( s.precision() )
+ {}
+ ios_precision_saver( state_type &s, aspect_type const &a )
+ : s_save_( s ), a_save_( s.precision(a) )
+ {}
+ ~ios_precision_saver()
+ { this->restore(); }
+
+ void restore()
+ { s_save_.precision( a_save_ ); }
+
+private:
+ state_type & s_save_;
+ aspect_type const a_save_;
+};
+
+class ios_width_saver
+{
+public:
+ typedef ::std::ios_base state_type;
+ typedef ::std::streamsize aspect_type;
+
+ explicit ios_width_saver( state_type &s )
+ : s_save_( s ), a_save_( s.width() )
+ {}
+ ios_width_saver( state_type &s, aspect_type const &a )
+ : s_save_( s ), a_save_( s.width(a) )
+ {}
+ ~ios_width_saver()
+ { this->restore(); }
+
+ void restore()
+ { s_save_.width( a_save_ ); }
+
+private:
+ state_type & s_save_;
+ aspect_type const a_save_;
+};
+
+
+// Advanced stream state saver class template declarations -----------------//
+
+template < typename Ch, class Tr >
+class basic_ios_iostate_saver
+{
+public:
+ typedef ::std::basic_ios<Ch, Tr> state_type;
+ typedef ::std::ios_base::iostate aspect_type;
+
+ explicit basic_ios_iostate_saver( state_type &s )
+ : s_save_( s ), a_save_( s.rdstate() )
+ {}
+ basic_ios_iostate_saver( state_type &s, aspect_type const &a )
+ : s_save_( s ), a_save_( s.rdstate() )
+ { s.clear(a); }
+ ~basic_ios_iostate_saver()
+ { this->restore(); }
+
+ void restore()
+ { s_save_.clear( a_save_ ); }
+
+private:
+ state_type & s_save_;
+ aspect_type const a_save_;
+};
+
+template < typename Ch, class Tr >
+class basic_ios_exception_saver
+{
+public:
+ typedef ::std::basic_ios<Ch, Tr> state_type;
+ typedef ::std::ios_base::iostate aspect_type;
+
+ explicit basic_ios_exception_saver( state_type &s )
+ : s_save_( s ), a_save_( s.exceptions() )
+ {}
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
+ basic_ios_exception_saver( state_type &s, aspect_type a )
+#else
+ basic_ios_exception_saver( state_type &s, aspect_type const &a )
+#endif
+ : s_save_( s ), a_save_( s.exceptions() )
+ { s.exceptions(a); }
+ ~basic_ios_exception_saver()
+ { this->restore(); }
+
+ void restore()
+ { s_save_.exceptions( a_save_ ); }
+
+private:
+ state_type & s_save_;
+ aspect_type const a_save_;
+};
+
+template < typename Ch, class Tr >
+class basic_ios_tie_saver
+{
+public:
+ typedef ::std::basic_ios<Ch, Tr> state_type;
+ typedef ::std::basic_ostream<Ch, Tr> * aspect_type;
+
+ explicit basic_ios_tie_saver( state_type &s )
+ : s_save_( s ), a_save_( s.tie() )
+ {}
+ basic_ios_tie_saver( state_type &s, aspect_type const &a )
+ : s_save_( s ), a_save_( s.tie(a) )
+ {}
+ ~basic_ios_tie_saver()
+ { this->restore(); }
+
+ void restore()
+ { s_save_.tie( a_save_ ); }
+
+private:
+ state_type & s_save_;
+ aspect_type const a_save_;
+};
+
+template < typename Ch, class Tr >
+class basic_ios_rdbuf_saver
+{
+public:
+ typedef ::std::basic_ios<Ch, Tr> state_type;
+ typedef ::std::basic_streambuf<Ch, Tr> * aspect_type;
+
+ explicit basic_ios_rdbuf_saver( state_type &s )
+ : s_save_( s ), a_save_( s.rdbuf() )
+ {}
+ basic_ios_rdbuf_saver( state_type &s, aspect_type const &a )
+ : s_save_( s ), a_save_( s.rdbuf(a) )
+ {}
+ ~basic_ios_rdbuf_saver()
+ { this->restore(); }
+
+ void restore()
+ { s_save_.rdbuf( a_save_ ); }
+
+private:
+ state_type & s_save_;
+ aspect_type const a_save_;
+};
+
+template < typename Ch, class Tr >
+class basic_ios_fill_saver
+{
+public:
+ typedef ::std::basic_ios<Ch, Tr> state_type;
+ typedef typename state_type::char_type aspect_type;
+
+ explicit basic_ios_fill_saver( state_type &s )
+ : s_save_( s ), a_save_( s.fill() )
+ {}
+ basic_ios_fill_saver( state_type &s, aspect_type const &a )
+ : s_save_( s ), a_save_( s.fill(a) )
+ {}
+ ~basic_ios_fill_saver()
+ { this->restore(); }
+
+ void restore()
+ { s_save_.fill( a_save_ ); }
+
+private:
+ state_type & s_save_;
+ aspect_type const a_save_;
+};
+
+#ifndef BOOST_NO_STD_LOCALE
+template < typename Ch, class Tr >
+class basic_ios_locale_saver
+{
+public:
+ typedef ::std::basic_ios<Ch, Tr> state_type;
+ typedef ::std::locale aspect_type;
+
+ explicit basic_ios_locale_saver( state_type &s )
+ : s_save_( s ), a_save_( s.getloc() )
+ {}
+ basic_ios_locale_saver( state_type &s, aspect_type const &a )
+ : s_save_( s ), a_save_( s.imbue(a) )
+ {}
+ ~basic_ios_locale_saver()
+ { this->restore(); }
+
+ void restore()
+ { s_save_.imbue( a_save_ ); }
+
+private:
+ state_type & s_save_;
+ aspect_type const a_save_;
+};
+#endif
+
+
+// User-defined stream state saver class declarations ----------------------//
+
+class ios_iword_saver
+{
+public:
+ typedef ::std::ios_base state_type;
+ typedef int index_type;
+ typedef long aspect_type;
+
+ explicit ios_iword_saver( state_type &s, index_type i )
+ : s_save_( s ), a_save_( s.iword(i) ), i_save_( i )
+ {}
+ ios_iword_saver( state_type &s, index_type i, aspect_type const &a )
+ : s_save_( s ), a_save_( s.iword(i) ), i_save_( i )
+ { s.iword(i) = a; }
+ ~ios_iword_saver()
+ { this->restore(); }
+
+ void restore()
+ { s_save_.iword( i_save_ ) = a_save_; }
+
+private:
+ state_type & s_save_;
+ aspect_type const a_save_;
+ index_type const i_save_;
+};
+
+class ios_pword_saver
+{
+public:
+ typedef ::std::ios_base state_type;
+ typedef int index_type;
+ typedef void * aspect_type;
+
+ explicit ios_pword_saver( state_type &s, index_type i )
+ : s_save_( s ), a_save_( s.pword(i) ), i_save_( i )
+ {}
+ ios_pword_saver( state_type &s, index_type i, aspect_type const &a )
+ : s_save_( s ), a_save_( s.pword(i) ), i_save_( i )
+ { s.pword(i) = a; }
+ ~ios_pword_saver()
+ { this->restore(); }
+
+ void restore()
+ { s_save_.pword( i_save_ ) = a_save_; }
+
+private:
+ state_type & s_save_;
+ aspect_type const a_save_;
+ index_type const i_save_;
+};
+
+
+// Combined stream state saver class (template) declarations ---------------//
+
+class ios_base_all_saver
+{
+public:
+ typedef ::std::ios_base state_type;
+
+ explicit ios_base_all_saver( state_type &s )
+ : s_save_( s ), a1_save_( s.flags() ), a2_save_( s.precision() )
+ , a3_save_( s.width() )
+ {}
+
+ ~ios_base_all_saver()
+ { this->restore(); }
+
+ void restore()
+ {
+ s_save_.width( a3_save_ );
+ s_save_.precision( a2_save_ );
+ s_save_.flags( a1_save_ );
+ }
+
+private:
+ state_type & s_save_;
+ state_type::fmtflags const a1_save_;
+ ::std::streamsize const a2_save_;
+ ::std::streamsize const a3_save_;
+};
+
+template < typename Ch, class Tr >
+class basic_ios_all_saver
+{
+public:
+ typedef ::std::basic_ios<Ch, Tr> state_type;
+
+ explicit basic_ios_all_saver( state_type &s )
+ : s_save_( s ), a1_save_( s.flags() ), a2_save_( s.precision() )
+ , a3_save_( s.width() ), a4_save_( s.rdstate() )
+ , a5_save_( s.exceptions() ), a6_save_( s.tie() )
+ , a7_save_( s.rdbuf() ), a8_save_( s.fill() )
+ #ifndef BOOST_NO_STD_LOCALE
+ , a9_save_( s.getloc() )
+ #endif
+ {}
+
+ ~basic_ios_all_saver()
+ { this->restore(); }
+
+ void restore()
+ {
+ #ifndef BOOST_NO_STD_LOCALE
+ s_save_.imbue( a9_save_ );
+ #endif
+ s_save_.fill( a8_save_ );
+ s_save_.rdbuf( a7_save_ );
+ s_save_.tie( a6_save_ );
+ s_save_.exceptions( a5_save_ );
+ s_save_.clear( a4_save_ );
+ s_save_.width( a3_save_ );
+ s_save_.precision( a2_save_ );
+ s_save_.flags( a1_save_ );
+ }
+
+private:
+ state_type & s_save_;
+ typename state_type::fmtflags const a1_save_;
+ ::std::streamsize const a2_save_;
+ ::std::streamsize const a3_save_;
+ typename state_type::iostate const a4_save_;
+ typename state_type::iostate const a5_save_;
+ ::std::basic_ostream<Ch, Tr> * const a6_save_;
+ ::std::basic_streambuf<Ch, Tr> * const a7_save_;
+ typename state_type::char_type const a8_save_;
+ #ifndef BOOST_NO_STD_LOCALE
+ ::std::locale const a9_save_;
+ #endif
+};
+
+class ios_all_word_saver
+{
+public:
+ typedef ::std::ios_base state_type;
+ typedef int index_type;
+
+ ios_all_word_saver( state_type &s, index_type i )
+ : s_save_( s ), i_save_( i ), a1_save_( s.iword(i) )
+ , a2_save_( s.pword(i) )
+ {}
+
+ ~ios_all_word_saver()
+ { this->restore(); }
+
+ void restore()
+ {
+ s_save_.pword( i_save_ ) = a2_save_;
+ s_save_.iword( i_save_ ) = a1_save_;
+ }
+
+private:
+ state_type & s_save_;
+ index_type const i_save_;
+ long const a1_save_;
+ void * const a2_save_;
+};
+
+
+} // namespace io
+} // namespace boost
+
+
+#endif // BOOST_IO_IOS_STATE_HPP
diff --git a/boost/boost/io_fwd.hpp b/boost/boost/io_fwd.hpp
new file mode 100644
index 00000000000..417b81e3e12
--- /dev/null
+++ b/boost/boost/io_fwd.hpp
@@ -0,0 +1,67 @@
+// Boost io_fwd.hpp header file --------------------------------------------//
+
+// Copyright 2002 Daryle Walker. Use, modification, and distribution are subject
+// to the Boost Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or a copy at <http://www.boost.org/LICENSE_1_0.txt>.)
+
+// See <http://www.boost.org/libs/io/> for the library's home page.
+
+#ifndef BOOST_IO_FWD_HPP
+#define BOOST_IO_FWD_HPP
+
+#include <iosfwd> // for std::char_traits (declaration)
+
+
+namespace boost
+{
+namespace io
+{
+
+
+// From <boost/io/ios_state.hpp> -------------------------------------------//
+
+class ios_flags_saver;
+class ios_precision_saver;
+class ios_width_saver;
+class ios_base_all_saver;
+
+template < typename Ch, class Tr = ::std::char_traits<Ch> >
+ class basic_ios_iostate_saver;
+template < typename Ch, class Tr = ::std::char_traits<Ch> >
+ class basic_ios_exception_saver;
+template < typename Ch, class Tr = ::std::char_traits<Ch> >
+ class basic_ios_tie_saver;
+template < typename Ch, class Tr = ::std::char_traits<Ch> >
+ class basic_ios_rdbuf_saver;
+template < typename Ch, class Tr = ::std::char_traits<Ch> >
+ class basic_ios_fill_saver;
+template < typename Ch, class Tr = ::std::char_traits<Ch> >
+ class basic_ios_locale_saver;
+template < typename Ch, class Tr = ::std::char_traits<Ch> >
+ class basic_ios_all_saver;
+
+typedef basic_ios_iostate_saver<char> ios_iostate_saver;
+typedef basic_ios_iostate_saver<wchar_t> wios_iostate_saver;
+typedef basic_ios_exception_saver<char> ios_exception_saver;
+typedef basic_ios_exception_saver<wchar_t> wios_exception_saver;
+typedef basic_ios_tie_saver<char> ios_tie_saver;
+typedef basic_ios_tie_saver<wchar_t> wios_tie_saver;
+typedef basic_ios_rdbuf_saver<char> ios_rdbuf_saver;
+typedef basic_ios_rdbuf_saver<wchar_t> wios_rdbuf_saver;
+typedef basic_ios_fill_saver<char> ios_fill_saver;
+typedef basic_ios_fill_saver<wchar_t> wios_fill_saver;
+typedef basic_ios_locale_saver<char> ios_locale_saver;
+typedef basic_ios_locale_saver<wchar_t> wios_locale_saver;
+typedef basic_ios_all_saver<char> ios_all_saver;
+typedef basic_ios_all_saver<wchar_t> wios_all_saver;
+
+class ios_iword_saver;
+class ios_pword_saver;
+class ios_all_word_saver;
+
+
+} // namespace io
+} // namespace boost
+
+
+#endif // BOOST_IO_FWD_HPP
diff --git a/boost/boost/iostreams/categories.hpp b/boost/boost/iostreams/categories.hpp
new file mode 100644
index 00000000000..96304d02170
--- /dev/null
+++ b/boost/boost/iostreams/categories.hpp
@@ -0,0 +1,142 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+// Contains category and mode tags for classifying filters, devices and
+// standard stream and stream buffers types.
+
+#ifndef BOOST_IOSTREAMS_CATEGORIES_HPP_INCLUDED
+#define BOOST_IOSTREAMS_CATEGORIES_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+namespace boost { namespace iostreams {
+
+//------------------Tags for dispatch according to i/o mode-------------------//
+
+struct any_tag { };
+namespace detail { struct two_sequence : virtual any_tag { }; }
+namespace detail { struct random_access : virtual any_tag { }; }
+namespace detail { struct one_head : virtual any_tag { }; }
+namespace detail { struct two_head : virtual any_tag { }; }
+struct input : virtual any_tag { };
+struct output : virtual any_tag { };
+struct bidirectional : virtual input, virtual output, detail::two_sequence { };
+struct dual_use : virtual input, virtual output { }; // Pseudo-mode.
+struct input_seekable : virtual input, virtual detail::random_access { };
+struct output_seekable : virtual output, virtual detail::random_access { };
+struct seekable
+ : virtual input_seekable,
+ virtual output_seekable,
+ detail::one_head
+ { };
+struct dual_seekable
+ : virtual input_seekable,
+ virtual output_seekable,
+ detail::two_head
+ { };
+struct bidirectional_seekable
+ : input_seekable, output_seekable,
+ bidirectional, detail::two_head
+ { };
+
+//------------------Tags for use as i/o categories----------------------------//
+
+struct device_tag : virtual any_tag { };
+struct filter_tag : virtual any_tag { };
+
+ //
+ // Tags for optional behavior.
+ //
+
+struct peekable_tag : virtual any_tag { }; // Devices.
+struct closable_tag : virtual any_tag { };
+struct flushable_tag : virtual any_tag { };
+struct localizable_tag : virtual any_tag { };
+struct optimally_buffered_tag : virtual any_tag { };
+struct direct_tag : virtual any_tag { }; // Devices.
+struct multichar_tag : virtual any_tag { }; // Filters.
+
+struct source_tag : device_tag, input { };
+struct sink_tag : device_tag, output { };
+struct bidirectional_device_tag : device_tag, bidirectional { };
+struct seekable_device_tag : virtual device_tag, seekable { };
+
+struct input_filter_tag : filter_tag, input { };
+struct output_filter_tag : filter_tag, output { };
+struct bidirectional_filter_tag : filter_tag, bidirectional { };
+struct seekable_filter_tag : filter_tag, seekable { };
+struct dual_use_filter_tag : filter_tag, dual_use { };
+
+struct multichar_input_filter_tag
+ : multichar_tag,
+ input_filter_tag
+ { };
+struct multichar_output_filter_tag
+ : multichar_tag,
+ output_filter_tag
+ { };
+struct multichar_bidirectional_filter_tag
+ : multichar_tag,
+ bidirectional_filter_tag
+ { };
+struct multichar_seekable_filter_tag
+ : multichar_tag,
+ seekable_filter_tag
+ { };
+struct multichar_dual_use_filter_tag
+ : filter_tag,
+ dual_use
+ { };
+
+ //
+ // Tags for standard streams and streambufs.
+ //
+
+struct std_io_tag : virtual localizable_tag { };
+struct istream_tag
+ : virtual input_seekable,
+ virtual device_tag,
+ virtual peekable_tag,
+ virtual std_io_tag
+ { };
+struct ostream_tag
+ : virtual output_seekable,
+ virtual device_tag,
+ virtual peekable_tag,
+ virtual std_io_tag
+ { };
+struct iostream_tag
+ : seekable_device_tag,
+ istream_tag,
+ ostream_tag
+ { };
+struct streambuf_tag
+ : seekable_device_tag,
+ peekable_tag,
+ std_io_tag
+ { };
+struct stringstream_tag
+ : dual_seekable,
+ device_tag,
+ std_io_tag
+ { };
+struct stringbuf_tag
+ : dual_seekable,
+ device_tag,
+ std_io_tag
+ { };
+
+namespace detail {
+
+struct linked_tag : streambuf_tag { };
+
+} // End namespace detail.
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_CATEGORIES_HPP_INCLUDED
diff --git a/boost/boost/iostreams/chain.hpp b/boost/boost/iostreams/chain.hpp
new file mode 100644
index 00000000000..a88f8f48c46
--- /dev/null
+++ b/boost/boost/iostreams/chain.hpp
@@ -0,0 +1,563 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_CHAIN_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_CHAIN_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <algorithm> // for_each.
+#include <cassert>
+#include <exception>
+#include <functional> // unary_function.
+#include <iterator> // advance.
+#include <list>
+#include <memory> // allocator, auto_ptr.
+#include <typeinfo>
+#include <stdexcept> // logic_error, out_of_range.
+#include <boost/checked_delete.hpp>
+#include <boost/config.hpp> // BOOST_MSVC, template friends,
+#include <boost/detail/workaround.hpp> // BOOST_NESTED_TEMPLATE
+#include <boost/iostreams/constants.hpp>
+#include <boost/iostreams/detail/access_control.hpp>
+#include <boost/iostreams/detail/char_traits.hpp>
+#include <boost/iostreams/detail/push.hpp>
+#include <boost/iostreams/detail/streambuf.hpp> // pubsync.
+#include <boost/iostreams/detail/wrap_unwrap.hpp>
+#include <boost/iostreams/device/null.hpp>
+#include <boost/iostreams/positioning.hpp>
+#include <boost/iostreams/traits.hpp> // is_filter.
+#include <boost/iostreams/stream_buffer.hpp>
+#include <boost/next_prior.hpp>
+#include <boost/shared_ptr.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/type.hpp>
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1310)
+# include <boost/mpl/int.hpp>
+#endif
+
+// Sometimes type_info objects must be compared by name. Borrowed from
+// Boost.Python and Boost.Function.
+#if (defined(__GNUC__) && __GNUC__ >= 3) || \
+ defined(_AIX) || \
+ (defined(__sgi) && defined(__host_mips)) || \
+ (defined(linux) && defined(__INTEL_COMPILER) && defined(__ICC)) \
+ /**/
+# include <cstring>
+# define BOOST_IOSTREAMS_COMPARE_TYPE_ID(X,Y) \
+ (std::strcmp((X).name(),(Y).name()) == 0)
+#else
+# define BOOST_IOSTREAMS_COMPARE_TYPE_ID(X,Y) ((X)==(Y))
+#endif
+
+// Deprecated
+#define BOOST_IOSTREAMS_COMPONENT_TYPE(chain, index) \
+ chain.component_type( index ) \
+ /**/
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1310)
+# define BOOST_IOSTREAMS_COMPONENT(chain, index, target) \
+ chain.component< target >( index ) \
+ /**/
+#else
+# define BOOST_IOSTREAMS_COMPONENT(chain, index, target) \
+ chain.component( index, ::boost::type< target >() ) \
+ /**/
+#endif
+
+namespace boost { namespace iostreams {
+
+//--------------Definition of chain and wchain--------------------------------//
+
+namespace detail {
+
+template<typename Chain> class chain_client;
+
+//
+// Concept name: Chain.
+// Description: Represents a chain of stream buffers which provides access
+// to the first buffer in the chain and send notifications when the
+// streambufs are added to or removed from chain.
+// Refines: Closable device with mode equal to typename Chain::mode.
+// Models: chain, converting_chain.
+// Example:
+//
+// class chain {
+// public:
+// typedef xxx chain_type;
+// typedef xxx client_type;
+// typedef xxx mode;
+// bool is_complete() const; // Ready for i/o.
+// template<typename T>
+// void push( const T& t, // Adds a stream buffer to
+// streamsize, // chain, based on t, with
+// streamsize ); // given buffer and putback
+// // buffer sizes. Pass -1 to
+// // request default size.
+// protected:
+// void register_client(client_type* client); // Associate client.
+// void notify(); // Notify client.
+// };
+//
+
+//
+// Description: Represents a chain of filters with an optional device at the
+// end.
+// Template parameters:
+// Self - A class deriving from the current instantiation of this template.
+// This is an example of the Curiously Recurring Template Pattern.
+// Ch - The character type.
+// Tr - The character traits type.
+// Alloc - The allocator type.
+// Mode - A mode tag.
+//
+template<typename Self, typename Ch, typename Tr, typename Alloc, typename Mode>
+class chain_base {
+public:
+ typedef Ch char_type;
+ BOOST_IOSTREAMS_STREAMBUF_TYPEDEFS(Tr)
+ typedef Alloc allocator_type;
+ typedef Mode mode;
+ struct category
+ : Mode,
+ device_tag
+ { };
+ typedef chain_client<Self> client_type;
+ friend class chain_client<Self>;
+private:
+ typedef linked_streambuf<Ch> streambuf_type;
+ typedef std::list<streambuf_type*> list_type;
+ typedef chain_base<Self, Ch, Tr, Alloc, Mode> my_type;
+protected:
+ chain_base() : pimpl_(new chain_impl) { }
+ chain_base(const chain_base& rhs): pimpl_(rhs.pimpl_) { }
+public:
+
+ //----------Buffer sizing-------------------------------------------------//
+
+ // Sets the size of the buffer created for the devices to be added to this
+ // chain. Does not affect the size of the buffer for devices already
+ // added.
+ void set_device_buffer_size(int n) { pimpl_->device_buffer_size_ = n; }
+
+ // Sets the size of the buffer created for the filters to be added
+ // to this chain. Does not affect the size of the buffer for filters already
+ // added.
+ void set_filter_buffer_size(int n) { pimpl_->filter_buffer_size_ = n; }
+
+ // Sets the size of the putback buffer for filters and devices to be added
+ // to this chain. Does not affect the size of the buffer for filters or
+ // devices already added.
+ void set_pback_size(int n) { pimpl_->pback_size_ = n; }
+
+ //----------Device interface----------------------------------------------//
+
+ std::streamsize read(char_type* s, std::streamsize n);
+ std::streamsize write(const char_type* s, std::streamsize n);
+ std::streampos seek(stream_offset off, BOOST_IOS::seekdir way);
+
+ //----------Direct component access---------------------------------------//
+
+ const std::type_info& component_type(int n) const
+ {
+ if (static_cast<size_type>(n) >= size())
+ throw std::out_of_range("bad chain offset");
+ return (*boost::next(list().begin(), n))->component_type();
+ }
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1310)
+ // Deprecated.
+ template<int N>
+ const std::type_info& component_type() const { return component_type(N); }
+
+ template<typename T>
+ T* component(int n) const { return component(n, boost::type<T>()); }
+
+ // Deprecated.
+ template<int N, typename T>
+ T* component() const { return component<T>(N); }
+#endif
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1310)
+ private:
+#endif
+ template<typename T>
+ T* component(int n, boost::type<T>) const
+ {
+ if (static_cast<size_type>(n) >= size())
+ throw std::out_of_range("bad chain offset");
+ streambuf_type* link = *boost::next(list().begin(), n);
+ if (BOOST_IOSTREAMS_COMPARE_TYPE_ID(link->component_type(), typeid(T)))
+ return static_cast<T*>(link->component_impl());
+ else
+ return 0;
+ }
+public:
+
+ //----------Container-like interface--------------------------------------//
+
+ typedef typename list_type::size_type size_type;
+ streambuf_type& front() { return *list().front(); }
+ BOOST_IOSTREAMS_DEFINE_PUSH(push, mode, char_type, push_impl)
+ void pop();
+ bool empty() const { return list().empty(); }
+ size_type size() const { return list().size(); }
+ void reset();
+
+ //----------Additional i/o functions--------------------------------------//
+
+ // Returns true if this chain is non-empty and its final link
+ // is a source or sink, i.e., if it is ready to perform i/o.
+ bool is_complete() const;
+ bool auto_close() const;
+ void set_auto_close(bool close);
+ bool sync() { return front().BOOST_IOSTREAMS_PUBSYNC() != -1; }
+ bool strict_sync();
+private:
+ template<typename T>
+ void push_impl(const T& t, int buffer_size = -1, int pback_size = -1)
+ {
+ typedef typename iostreams::category_of<T>::type category;
+ typedef typename unwrap_ios<T>::type policy_type;
+ typedef stream_buffer<
+ policy_type,
+ BOOST_IOSTREAMS_CHAR_TRAITS(char_type),
+ Alloc, Mode
+ > facade_type;
+ BOOST_STATIC_ASSERT((is_convertible<category, Mode>::value));
+ if (is_complete())
+ throw std::logic_error("chain complete");
+ streambuf_type* prev = !empty() ? list().back() : 0;
+ buffer_size =
+ buffer_size != -1 ?
+ buffer_size :
+ iostreams::optimal_buffer_size(t);
+ pback_size =
+ pback_size != -1 ?
+ pback_size :
+ pimpl_->pback_size_;
+ std::auto_ptr<facade_type>
+ buf(new facade_type(t, buffer_size, pback_size));
+ list().push_back(buf.get());
+ buf.release();
+ if (is_device<policy_type>::value)
+ pimpl_->flags_ |= f_complete | f_open;
+ if (prev) prev->set_next(list().back());
+ notify();
+ }
+
+ list_type& list() { return pimpl_->links_; }
+ const list_type& list() const { return pimpl_->links_; }
+ void register_client(client_type* client) { pimpl_->client_ = client; }
+ void notify() { if (pimpl_->client_) pimpl_->client_->notify(); }
+
+ //----------Nested classes------------------------------------------------//
+
+ static void close(streambuf_type* b, BOOST_IOS::openmode m)
+ {
+ if (m & BOOST_IOS::out)
+ b->BOOST_IOSTREAMS_PUBSYNC();
+ b->close(m);
+ }
+
+ static void set_next(streambuf_type* b, streambuf_type* next)
+ { b->set_next(next); }
+
+ static void set_auto_close(streambuf_type* b, bool close)
+ { b->set_auto_close(close); }
+
+ struct closer : public std::unary_function<streambuf_type*, void> {
+ closer(BOOST_IOS::openmode m) : mode_(m) { }
+ void operator() (streambuf_type* b)
+ {
+ close(b, mode_);
+ }
+ BOOST_IOS::openmode mode_;
+ };
+ friend struct closer;
+
+ enum flags {
+ f_complete = 1,
+ f_open = 2,
+ f_auto_close = 4
+ };
+
+ struct chain_impl {
+ chain_impl()
+ : client_(0), device_buffer_size_(default_device_buffer_size),
+ filter_buffer_size_(default_filter_buffer_size),
+ pback_size_(default_pback_buffer_size),
+ flags_(f_auto_close)
+ { }
+ ~chain_impl() { try { close(); reset(); } catch (std::exception&) { } }
+ void close()
+ {
+ if ((flags_ & f_open) != 0) {
+ stream_buffer< basic_null_device<Ch, Mode> > null;
+ if ((flags_ & f_complete) == 0) {
+ null.open(basic_null_device<Ch, Mode>());
+ set_next(links_.back(), &null);
+ }
+ links_.front()->BOOST_IOSTREAMS_PUBSYNC();
+ if (is_convertible<Mode, input>::value)
+ std::for_each( links_.rbegin(), links_.rend(),
+ closer(BOOST_IOS::in) );
+ if (is_convertible<Mode, output>::value)
+ std::for_each( links_.begin(), links_.end(),
+ closer(BOOST_IOS::out) );
+ flags_ &= ~f_open;
+ }
+ }
+ void reset()
+ {
+ typedef typename list_type::iterator iterator;
+ for ( iterator first = links_.begin(),
+ last = links_.end();
+ first != last;
+ ++first )
+ {
+ if ( (flags_ & f_complete) == 0 ||
+ (flags_ & f_auto_close) == 0 )
+ {
+ set_auto_close(*first, false);
+ }
+ streambuf_type* buf = 0;
+ std::swap(buf, *first);
+ delete buf;
+ }
+ links_.clear();
+ flags_ &= ~f_complete;
+ flags_ &= ~f_open;
+ }
+ list_type links_;
+ client_type* client_;
+ int device_buffer_size_,
+ filter_buffer_size_,
+ pback_size_;
+ int flags_;
+ };
+ friend struct chain_impl;
+
+ //----------Member data---------------------------------------------------//
+
+private:
+ shared_ptr<chain_impl> pimpl_;
+};
+
+} // End namespace detail.
+
+//
+// Macro: BOOST_IOSTREAMS_DECL_CHAIN(name, category)
+// Description: Defines a template derived from chain_base appropriate for a
+// particular i/o category. The template has the following parameters:
+// Ch - The character type.
+// Tr - The character traits type.
+// Alloc - The allocator type.
+// Macro parameters:
+// name_ - The name of the template to be defined.
+// category_ - The i/o category of the template to be defined.
+//
+#define BOOST_IOSTREAMS_DECL_CHAIN(name_, default_char_) \
+ template< typename Mode, typename Ch = default_char_, \
+ typename Tr = BOOST_IOSTREAMS_CHAR_TRAITS(Ch), \
+ typename Alloc = std::allocator<Ch> > \
+ class name_ : public boost::iostreams::detail::chain_base< \
+ name_<Mode, Ch, Tr, Alloc>, \
+ Ch, Tr, Alloc, Mode \
+ > \
+ { \
+ public: \
+ struct category : device_tag, Mode { }; \
+ typedef Mode mode; \
+ private: \
+ typedef boost::iostreams::detail::chain_base< \
+ name_<Mode, Ch, Tr, Alloc>, \
+ Ch, Tr, Alloc, Mode \
+ > base_type; \
+ public: \
+ typedef Ch char_type; \
+ typedef Tr traits_type; \
+ typedef typename traits_type::int_type int_type; \
+ typedef typename traits_type::off_type off_type; \
+ name_() { } \
+ name_(const name_& rhs) { *this = rhs; } \
+ name_& operator=(const name_& rhs) \
+ { base_type::operator=(rhs); return *this; } \
+ }; \
+ /**/
+BOOST_IOSTREAMS_DECL_CHAIN(chain, char)
+BOOST_IOSTREAMS_DECL_CHAIN(wchain, wchar_t)
+#undef BOOST_IOSTREAMS_DECL_CHAIN
+
+//--------------Definition of chain_client------------------------------------//
+
+namespace detail {
+
+//
+// Template name: chain_client
+// Description: Class whose instances provide access to an underlying chain
+// using an interface similar to the chains.
+// Subclasses: the various stream and stream buffer templates.
+//
+template<typename Chain>
+class chain_client {
+public:
+ typedef Chain chain_type;
+ typedef typename chain_type::char_type char_type;
+ typedef typename chain_type::traits_type traits_type;
+ typedef typename chain_type::size_type size_type;
+ typedef typename chain_type::mode mode;
+
+ chain_client(chain_type* chn = 0) : chain_(chn ) { }
+ chain_client(chain_client* client) : chain_(client->chain_) { }
+ virtual ~chain_client() { }
+
+ const std::type_info& component_type(int n) const
+ { return chain_->component_type(n); }
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1310)
+ // Deprecated.
+ template<int N>
+ const std::type_info& component_type() const
+ { return chain_->BOOST_NESTED_TEMPLATE component_type<N>(); }
+
+ template<typename T>
+ T* component(int n) const
+ { return chain_->BOOST_NESTED_TEMPLATE component<T>(n); }
+
+ // Deprecated.
+ template<int N, typename T>
+ T* component() const
+ { return chain_->BOOST_NESTED_TEMPLATE component<N, T>(); }
+#else
+ template<typename T>
+ T* component(int n, boost::type<T> t) const
+ { return chain_->component(n, t); }
+#endif
+
+ bool is_complete() const { return chain_->is_complete(); }
+ bool auto_close() const { return chain_->auto_close(); }
+ void set_auto_close(bool close) { chain_->set_auto_close(close); }
+ bool strict_sync() { return chain_->strict_sync(); }
+ void set_device_buffer_size(std::streamsize n)
+ { chain_->set_device_buffer_size(n); }
+ void set_filter_buffer_size(std::streamsize n)
+ { chain_->set_filter_buffer_size(n); }
+ void set_pback_size(std::streamsize n) { chain_->set_pback_size(n); }
+ BOOST_IOSTREAMS_DEFINE_PUSH(push, mode, char_type, push_impl)
+ void pop() { chain_->pop(); }
+ bool empty() const { return chain_->empty(); }
+ size_type size() { return chain_->size(); }
+ void reset() { chain_->reset(); }
+
+ // Returns a copy of the underlying chain.
+ chain_type filters() { return *chain_; }
+ chain_type filters() const { return *chain_; }
+protected:
+ template<typename T>
+ void push_impl(const T& t BOOST_IOSTREAMS_PUSH_PARAMS())
+ { chain_->push(t BOOST_IOSTREAMS_PUSH_ARGS()); }
+ chain_type& ref() { return *chain_; }
+ void set_chain(chain_type* c)
+ { chain_ = c; chain_->register_client(this); }
+#if !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) && \
+ (!BOOST_WORKAROUND(__BORLANDC__, < 0x600))
+ template<typename S, typename C, typename T, typename A, typename M>
+ friend class chain_base;
+#else
+ public:
+#endif
+ virtual void notify() { }
+private:
+ chain_type* chain_;
+};
+
+//--------------Implementation of chain_base----------------------------------//
+
+template<typename Self, typename Ch, typename Tr, typename Alloc, typename Mode>
+inline std::streamsize chain_base<Self, Ch, Tr, Alloc, Mode>::read
+ (char_type* s, std::streamsize n)
+{ return iostreams::read(*list().front(), s, n); }
+
+template<typename Self, typename Ch, typename Tr, typename Alloc, typename Mode>
+inline std::streamsize chain_base<Self, Ch, Tr, Alloc, Mode>::write
+ (const char_type* s, std::streamsize n)
+{ return iostreams::write(*list().front(), s, n); }
+
+template<typename Self, typename Ch, typename Tr, typename Alloc, typename Mode>
+inline std::streampos chain_base<Self, Ch, Tr, Alloc, Mode>::seek
+ (stream_offset off, BOOST_IOS::seekdir way)
+{ return iostreams::seek(*list().front(), off, way); }
+
+template<typename Self, typename Ch, typename Tr, typename Alloc, typename Mode>
+void chain_base<Self, Ch, Tr, Alloc, Mode>::reset()
+{
+ using namespace std;
+ pimpl_->close();
+ pimpl_->reset();
+}
+
+template<typename Self, typename Ch, typename Tr, typename Alloc, typename Mode>
+bool chain_base<Self, Ch, Tr, Alloc, Mode>::is_complete() const
+{
+ return (pimpl_->flags_ & f_complete) != 0;
+}
+
+template<typename Self, typename Ch, typename Tr, typename Alloc, typename Mode>
+bool chain_base<Self, Ch, Tr, Alloc, Mode>::auto_close() const
+{
+ return (pimpl_->flags_ & f_auto_close) != 0;
+}
+
+template<typename Self, typename Ch, typename Tr, typename Alloc, typename Mode>
+void chain_base<Self, Ch, Tr, Alloc, Mode>::set_auto_close(bool close)
+{
+ pimpl_->flags_ =
+ (pimpl_->flags_ & ~f_auto_close) |
+ (close ? f_auto_close : 0);
+}
+
+template<typename Self, typename Ch, typename Tr, typename Alloc, typename Mode>
+bool chain_base<Self, Ch, Tr, Alloc, Mode>::strict_sync()
+{
+ typedef typename list_type::iterator iterator;
+ bool result = true;
+ for ( iterator first = list().begin(),
+ last = list().end();
+ first != last;
+ ++first )
+ {
+ bool s = (*first)->strict_sync();
+ result = result && s;
+ }
+ return result;
+}
+
+template<typename Self, typename Ch, typename Tr, typename Alloc, typename Mode>
+void chain_base<Self, Ch, Tr, Alloc, Mode>::pop()
+{
+ assert(!empty());
+ if (auto_close())
+ pimpl_->close();
+ streambuf_type* buf = 0;
+ std::swap(buf, list().back());
+ buf->set_auto_close(false);
+ buf->set_next(0);
+ delete buf;
+ list().pop_back();
+ pimpl_->flags_ &= ~f_complete;
+ if (auto_close() || list().empty())
+ pimpl_->flags_ &= ~f_open;
+}
+
+} // End namespace detail.
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_CHAIN_HPP_INCLUDED
diff --git a/boost/boost/iostreams/char_traits.hpp b/boost/boost/iostreams/char_traits.hpp
new file mode 100644
index 00000000000..93e33c3f105
--- /dev/null
+++ b/boost/boost/iostreams/char_traits.hpp
@@ -0,0 +1,72 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_CHAR_TRAITS_HPP_INCLUDED
+#define BOOST_IOSTREAMS_CHAR_TRAITS_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp>
+#include <cstddef>
+#include <cstdio> // EOF.
+#include <string> // std::char_traits.
+#include <boost/iostreams/detail/char_traits.hpp>
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#ifndef BOOST_IOSTREAMS_NO_WIDE_STREAMS
+# include <cwchar>
+#endif
+
+#ifdef BOOST_NO_STDC_NAMESPACE
+namespace std { using ::wint_t; }
+#endif
+
+namespace boost { namespace iostreams {
+
+// Dinkumware that comes with QNX Momentics 6.3.0, 4.0.2, incorrectly defines
+// the EOF and WEOF macros to not std:: qualify the wint_t type (and so does
+// Sun C++ 5.8 + STLport 4). Fix by placing the def in this scope.
+// NOTE: Use BOOST_WORKAROUND?
+#if (defined(__QNX__) && defined(BOOST_DINKUMWARE_STDLIB)) \
+ || defined(__SUNPRO_CC)
+using ::std::wint_t;
+#endif
+
+const int WOULD_BLOCK = (int) (EOF - 1);
+
+#ifndef BOOST_IOSTREAMS_NO_WIDE_STREAMS
+const std::wint_t WWOULD_BLOCK = (std::wint_t) (WEOF - 1);
+#endif
+
+template<typename Ch>
+struct char_traits;
+
+template<>
+struct char_traits<char> : BOOST_IOSTREAMS_CHAR_TRAITS(char) {
+ static char newline() { return '\n'; }
+ static int good() { return '\n'; }
+ static int would_block() { return WOULD_BLOCK; }
+ static bool is_good(int c) { return c != EOF && c != WOULD_BLOCK; }
+ static bool is_eof(int c) { return c == EOF; }
+ static bool would_block(int c) { return c == WOULD_BLOCK; }
+};
+
+#ifndef BOOST_IOSTREAMS_NO_WIDE_STREAMS
+template<>
+struct char_traits<wchar_t> : std::char_traits<wchar_t> {
+ static wchar_t newline() { return L'\n'; }
+ static std::wint_t good() { return L'\n'; }
+ static std::wint_t would_block() { return WWOULD_BLOCK; }
+ static bool is_good(std::wint_t c) { return c != WEOF && c != WWOULD_BLOCK; }
+ static bool is_eof(std::wint_t c) { return c == WEOF; }
+ static bool would_block(std::wint_t c) { return c == WWOULD_BLOCK; }
+};
+#endif
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_CHAR_TRAITS_HPP_INCLUDED
diff --git a/boost/boost/iostreams/checked_operations.hpp b/boost/boost/iostreams/checked_operations.hpp
new file mode 100644
index 00000000000..f82f70f3053
--- /dev/null
+++ b/boost/boost/iostreams/checked_operations.hpp
@@ -0,0 +1,150 @@
+// (C) Copyright Jonathan Turkanis 2005.
+// 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/iostreams for documentation.
+
+// Contains implementations of get, read, put, write and seek which
+// check a device's mode at runtime instead of compile time.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_CHECKED_OPERATIONS_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_CHECKED_OPERATIONS_HPP_INCLUDED
+
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/detail/dispatch.hpp>
+#include <boost/iostreams/detail/error.hpp>
+#include <boost/iostreams/get.hpp>
+#include <boost/iostreams/put.hpp>
+#include <boost/iostreams/read.hpp>
+#include <boost/iostreams/seek.hpp>
+#include <boost/iostreams/traits.hpp>
+#include <boost/iostreams/write.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp> // MSVC.
+
+namespace boost { namespace iostreams {
+
+namespace detail {
+
+template<typename T>
+struct read_write_if_impl;
+
+template<typename T>
+struct seek_if_impl;
+
+} // End namespace detail.
+
+template<typename T>
+typename int_type_of<T>::type get_if(T& t)
+{
+ typedef typename detail::dispatch<T, input, output>::type tag;
+ return detail::read_write_if_impl<tag>::get(t);
+}
+
+template<typename T>
+inline std::streamsize
+read_if(T& t, typename char_type_of<T>::type* s, std::streamsize n)
+{
+ typedef typename detail::dispatch<T, input, output>::type tag;
+ return detail::read_write_if_impl<tag>::read(t, s, n);
+}
+
+template<typename T>
+bool put_if(T& t, typename char_type_of<T>::type c)
+{
+ typedef typename detail::dispatch<T, output, input>::type tag;
+ return detail::read_write_if_impl<tag>::put(t, c);
+}
+
+template<typename T>
+inline std::streamsize write_if
+ (T& t, const typename char_type_of<T>::type* s, std::streamsize n)
+{
+ typedef typename detail::dispatch<T, output, input>::type tag;
+ return detail::read_write_if_impl<tag>::write(t, s, n);
+}
+
+template<typename T>
+inline std::streampos
+seek_if( T& t, stream_offset off, BOOST_IOS::seekdir way,
+ BOOST_IOS::openmode which = BOOST_IOS::in | BOOST_IOS::out )
+{
+ using namespace detail;
+ typedef typename dispatch<T, random_access, any_tag>::type tag;
+ return seek_if_impl<tag>::seek(t, off, way, which);
+}
+
+namespace detail {
+
+//------------------Specializations of read_write_if_impl---------------------//
+
+template<>
+struct read_write_if_impl<input> {
+ template<typename T>
+ static typename int_type_of<T>::type get(T& t)
+ { return iostreams::get(t); }
+
+ template<typename T>
+ static std::streamsize
+ read(T& t, typename char_type_of<T>::type* s, std::streamsize n)
+ { return iostreams::read(t, s, n); }
+
+ template<typename T>
+ static bool put(T&, typename char_type_of<T>::type)
+ { throw cant_write(); }
+
+ template<typename T>
+ static std::streamsize
+ write(T&, const typename char_type_of<T>::type*, std::streamsize)
+ { throw cant_write(); }
+};
+
+template<>
+struct read_write_if_impl<output> {
+ template<typename T>
+ static typename int_type_of<T>::type get(T&)
+ { throw cant_read(); }
+
+ template<typename T>
+ static std::streamsize
+ read(T&, typename char_type_of<T>::type*, std::streamsize)
+ { throw cant_read(); }
+
+ template<typename T>
+ static bool put(T& t, typename char_type_of<T>::type c)
+ { return iostreams::put(t, c); }
+
+ template<typename T>
+ static std::streamsize
+ write( T& t, const typename char_type_of<T>::type* s,
+ std::streamsize n )
+ { return iostreams::write(t, s, n); }
+};
+
+//------------------Specializations of seek_if_impl---------------------------//
+
+template<>
+struct seek_if_impl<random_access> {
+ template<typename T>
+ static std::streampos
+ seek( T& t, stream_offset off, BOOST_IOS::seekdir way,
+ BOOST_IOS::openmode which )
+ { return iostreams::seek(t, off, way, which); }
+};
+
+template<>
+struct seek_if_impl<any_tag> {
+ template<typename T>
+ static std::streampos
+ seek(T&, stream_offset, BOOST_IOS::seekdir, BOOST_IOS::openmode)
+ { throw cant_seek(); }
+};
+
+} // End namespace detail.
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp> // MSVC.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_CHECKED_OPERATIONS_HPP_INCLUDED
diff --git a/boost/boost/iostreams/close.hpp b/boost/boost/iostreams/close.hpp
new file mode 100644
index 00000000000..885e70a9769
--- /dev/null
+++ b/boost/boost/iostreams/close.hpp
@@ -0,0 +1,145 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_CLOSE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_CLOSE_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // DEDUCED_TYPENAME, MSVC.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/flush.hpp>
+#include <boost/iostreams/detail/adapter/non_blocking_adapter.hpp>
+#include <boost/iostreams/detail/wrap_unwrap.hpp>
+#include <boost/iostreams/operations_fwd.hpp>
+#include <boost/iostreams/traits.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp>
+
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) //-----------------------------------//
+# include <boost/iostreams/detail/vc6/close.hpp>
+#else // #if BOOST_WORKAROUND(BOOST_MSVC, < 1300) //--------------------------//
+
+namespace boost { namespace iostreams {
+
+namespace detail {
+
+template<typename T>
+struct close_impl;
+
+} // End namespace detail.
+
+template<typename T>
+void close(T& t, BOOST_IOS::openmode which)
+{ detail::close_impl<T>::close(detail::unwrap(t), which); }
+
+template<typename T, typename Sink>
+void close(T& t, Sink& snk, BOOST_IOS::openmode which)
+{ detail::close_impl<T>::close(detail::unwrap(t), snk, which); }
+
+namespace detail {
+
+//------------------Definition of close_impl----------------------------------//
+
+template<typename T>
+struct close_tag {
+ typedef typename category_of<T>::type category;
+ typedef typename
+ mpl::eval_if<
+ is_convertible<category, closable_tag>,
+ mpl::if_<
+ mpl::or_<
+ is_convertible<category, two_sequence>,
+ is_convertible<category, dual_use>
+ >,
+ two_sequence,
+ closable_tag
+ >,
+ mpl::identity<any_tag>
+ >::type type;
+};
+
+template<typename T>
+struct close_impl
+ : mpl::if_<
+ is_custom<T>,
+ operations<T>,
+ close_impl<BOOST_DEDUCED_TYPENAME close_tag<T>::type>
+ >::type
+ { };
+
+template<>
+struct close_impl<any_tag> {
+ template<typename T>
+ static void close(T& t, BOOST_IOS::openmode which)
+ {
+ if ((which & BOOST_IOS::out) != 0)
+ iostreams::flush(t);
+ }
+
+ template<typename T, typename Sink>
+ static void close(T& t, Sink& snk, BOOST_IOS::openmode which)
+ {
+ if ((which & BOOST_IOS::out) != 0) {
+ non_blocking_adapter<Sink> nb(snk);
+ iostreams::flush(t, nb);
+ }
+ }
+};
+
+#include <boost/iostreams/detail/config/disable_warnings.hpp> // Borland.
+template<>
+struct close_impl<closable_tag> {
+ template<typename T>
+ static void close(T& t, BOOST_IOS::openmode which)
+ {
+ typedef typename category_of<T>::type category;
+ const bool in = is_convertible<category, input>::value &&
+ !is_convertible<category, output>::value;
+ if (in == ((which & BOOST_IOS::in) != 0))
+ t.close();
+ }
+ template<typename T, typename Sink>
+ static void close(T& t, Sink& snk, BOOST_IOS::openmode which)
+ {
+ typedef typename category_of<T>::type category;
+ const bool in = is_convertible<category, input>::value &&
+ !is_convertible<category, output>::value;
+ if (in == ((which & BOOST_IOS::in) != 0)) {
+ non_blocking_adapter<Sink> nb(snk);
+ t.close(nb);
+ }
+ }
+};
+
+template<>
+struct close_impl<two_sequence> {
+ template<typename T>
+ static void close(T& t, BOOST_IOS::openmode which) { t.close(which); }
+ template<typename T, typename Sink>
+ static void close(T& t, Sink& snk, BOOST_IOS::openmode which)
+ {
+ non_blocking_adapter<Sink> nb(snk);
+ t.close(nb, which);
+ }
+};
+
+} // End namespace detail.
+
+} } // End namespaces iostreams, boost.
+
+#endif // #if BOOST_WORKAROUND(BOOST_MSVC, < 1300) //-------------------------//
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_CLOSE_HPP_INCLUDED
diff --git a/boost/boost/iostreams/code_converter.hpp b/boost/boost/iostreams/code_converter.hpp
new file mode 100644
index 00000000000..fc3cf2fa8ad
--- /dev/null
+++ b/boost/boost/iostreams/code_converter.hpp
@@ -0,0 +1,417 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+// Contains machinery for performing code conversion.
+
+#ifndef BOOST_IOSTREAMS_CODE_CONVERTER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_CODE_CONVERTER_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#if defined(BOOST_IOSTREAMS_NO_WIDE_STREAMS) || \
+ defined(BOOST_IOSTREAMS_NO_LOCALE) \
+ /**/
+# error code conversion not supported on this platform
+#endif
+
+#include <algorithm> // max.
+#include <cstring> // memcpy.
+#include <exception>
+#include <boost/config.hpp> // DEDUCED_TYPENAME,
+#include <boost/iostreams/char_traits.hpp>
+#include <boost/iostreams/constants.hpp> // default_filter_buffer_size.
+#include <boost/iostreams/detail/adapter/concept_adapter.hpp>
+#include <boost/iostreams/detail/adapter/direct_adapter.hpp>
+#include <boost/iostreams/detail/buffer.hpp>
+#include <boost/iostreams/detail/call_traits.hpp>
+#include <boost/iostreams/detail/codecvt_holder.hpp>
+#include <boost/iostreams/detail/codecvt_helper.hpp>
+#include <boost/iostreams/detail/double_object.hpp>
+#include <boost/iostreams/detail/forward.hpp>
+#include <boost/iostreams/detail/ios.hpp> // failure, openmode, int types.
+#include <boost/iostreams/detail/select.hpp>
+#include <boost/iostreams/traits.hpp>
+#include <boost/iostreams/operations.hpp>
+#include <boost/optional.hpp>
+#include <boost/shared_ptr.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp> // Borland 5.x
+
+namespace boost { namespace iostreams {
+
+struct code_conversion_error : BOOST_IOSTREAMS_FAILURE {
+ code_conversion_error()
+ : BOOST_IOSTREAMS_FAILURE("code conversion error")
+ { }
+};
+
+namespace detail {
+
+//--------------Definition of strncpy_if_same---------------------------------//
+
+// Helper template for strncpy_if_same, below.
+template<bool B>
+struct strncpy_if_same_impl;
+
+template<>
+struct strncpy_if_same_impl<true> {
+ template<typename Ch>
+ static Ch* copy(Ch* tgt, const Ch* src, std::streamsize n)
+ { return BOOST_IOSTREAMS_CHAR_TRAITS(Ch)::copy(tgt, src, n); }
+};
+
+template<>
+struct strncpy_if_same_impl<false> {
+ template<typename Src, typename Tgt>
+ static Tgt* copy(Tgt* tgt, const Src*, std::streamsize) { return tgt; }
+};
+
+template<typename Src, typename Tgt>
+Tgt* strncpy_if_same(Tgt* tgt, const Src* src, std::streamsize n)
+{
+ typedef strncpy_if_same_impl<is_same<Src, Tgt>::value> impl;
+ return impl::copy(tgt, src, n);
+}
+
+//--------------Definition of conversion_buffer-------------------------------//
+
+// Buffer and conversion state for reading.
+template<typename Codecvt, typename Alloc>
+class conversion_buffer
+ : public buffer<
+ BOOST_DEDUCED_TYPENAME detail::codecvt_extern<Codecvt>::type,
+ Alloc
+ >
+{
+public:
+ typedef typename Codecvt::state_type state_type;
+ conversion_buffer()
+ : buffer<
+ BOOST_DEDUCED_TYPENAME detail::codecvt_extern<Codecvt>::type,
+ Alloc
+ >(0)
+ {
+ reset();
+ }
+ state_type& state() { return state_; }
+ void reset()
+ {
+ if (this->size())
+ this->set(0, 0);
+ state_ = state_type();
+ }
+private:
+ state_type state_;
+};
+
+//--------------Definition of converter_impl----------------------------------//
+
+// Contains member data, open/is_open/close and buffer management functions.
+template<typename Device, typename Codecvt, typename Alloc>
+struct code_converter_impl {
+ typedef typename codecvt_extern<Codecvt>::type extern_type;
+ typedef typename category_of<Device>::type device_category;
+ typedef is_convertible<device_category, input> can_read;
+ typedef is_convertible<device_category, output> can_write;
+ typedef is_convertible<device_category, bidirectional> is_bidir;
+ typedef typename
+ iostreams::select< // Disambiguation for Tru64.
+ is_bidir, bidirectional,
+ can_read, input,
+ can_write, output
+ >::type mode;
+ typedef typename
+ mpl::if_<
+ is_direct<Device>,
+ direct_adapter<Device>,
+ Device
+ >::type policy_type;
+ typedef optional< concept_adapter<policy_type> > storage_type;
+ typedef is_convertible<device_category, two_sequence> is_double;
+ typedef conversion_buffer<Codecvt, Alloc> buffer_type;
+
+ code_converter_impl() : cvt_(), flags_(0) { }
+
+ ~code_converter_impl()
+ {
+ try {
+ if (flags_ & f_open) close();
+ } catch (std::exception&) { /* */ }
+ }
+
+ void open(const Device& dev, int buffer_size)
+ {
+ if (flags_ & f_open)
+ throw BOOST_IOSTREAMS_FAILURE("already open");
+ if (buffer_size == -1)
+ buffer_size = default_filter_buffer_size;
+ int max_length = cvt_.get().max_length();
+ buffer_size = (std::max)(buffer_size, 2 * max_length);
+ if (can_read::value) {
+ buf_.first().resize(buffer_size);
+ buf_.first().set(0, 0);
+ }
+ if (can_write::value && !is_double::value) {
+ buf_.second().resize(buffer_size);
+ buf_.second().set(0, 0);
+ }
+ dev_.reset(concept_adapter<policy_type>(dev));
+ flags_ |= f_open;
+ }
+
+ void close(BOOST_IOS::openmode which = BOOST_IOS::in | BOOST_IOS::out)
+ {
+ if (which & BOOST_IOS::in) {
+ iostreams::close(dev(), BOOST_IOS::in);
+ flags_ |= f_input_closed;
+ }
+ if (which & BOOST_IOS::out) {
+ buf_.second().flush(dev());
+ iostreams::close(dev(), BOOST_IOS::out);
+ flags_ |= f_output_closed;
+ }
+ if ( !is_double::value ||
+ (flags_ & f_input_closed) != 0 &&
+ (flags_ & f_output_closed) != 0 )
+ {
+ dev_.reset();
+ buf_.first().reset();
+ buf_.second().reset();
+ flags_ = 0;
+ }
+ }
+
+ bool is_open() const { return (flags_ & f_open) != 0;}
+
+ policy_type& dev() { return **dev_; }
+
+ enum flag_type {
+ f_open = 1,
+ f_input_closed = f_open << 1,
+ f_output_closed = f_input_closed << 1
+ };
+
+ codecvt_holder<Codecvt> cvt_;
+ storage_type dev_;
+ double_object<
+ buffer_type,
+ is_double
+ > buf_;
+ int flags_;
+};
+
+} // End namespace detail.
+
+//--------------Definition of converter---------------------------------------//
+
+#define BOOST_IOSTREAMS_CONVERTER_PARAMS() , int buffer_size = -1
+#define BOOST_IOSTREAMS_CONVERTER_ARGS() , buffer_size
+
+template<typename Device, typename Codecvt, typename Alloc>
+struct code_converter_base {
+ typedef detail::code_converter_impl<
+ Device, Codecvt, Alloc
+ > impl_type;
+ code_converter_base() : pimpl_(new impl_type) { }
+ shared_ptr<impl_type> pimpl_;
+};
+
+template< typename Device,
+ typename Codecvt = detail::default_codecvt,
+ typename Alloc = std::allocator<char> >
+class code_converter
+ : protected code_converter_base<Device, Codecvt, Alloc>
+{
+private:
+ typedef detail::code_converter_impl<
+ Device, Codecvt, Alloc
+ > impl_type;
+ typedef typename impl_type::policy_type policy_type;
+ typedef typename impl_type::buffer_type buffer_type;
+ typedef typename detail::codecvt_holder<Codecvt>::codecvt_type codecvt_type;
+ typedef typename detail::codecvt_intern<Codecvt>::type intern_type;
+ typedef typename detail::codecvt_extern<Codecvt>::type extern_type;
+ typedef typename detail::codecvt_state<Codecvt>::type state_type;
+public:
+ typedef intern_type char_type;
+ struct category
+ : impl_type::mode, device_tag, closable_tag, localizable_tag
+ { };
+ BOOST_STATIC_ASSERT((
+ is_same<
+ extern_type,
+ BOOST_DEDUCED_TYPENAME char_type_of<Device>::type
+ >::value
+ ));
+public:
+ code_converter() { }
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ code_converter(code_converter& rhs)
+ : code_converter_base<Device, Codecvt, Alloc>(rhs)
+ { }
+ code_converter(const code_converter& rhs)
+ : code_converter_base<Device, Codecvt, Alloc>(rhs)
+ { }
+#endif
+ BOOST_IOSTREAMS_FORWARD( code_converter, open_impl, Device,
+ BOOST_IOSTREAMS_CONVERTER_PARAMS,
+ BOOST_IOSTREAMS_CONVERTER_ARGS )
+
+ // fstream-like interface.
+
+ bool is_open() const { return this->pimpl_->is_open(); }
+ void close(BOOST_IOS::openmode which = BOOST_IOS::in | BOOST_IOS::out )
+ { impl().close(which); }
+
+ // Device interface.
+
+ std::streamsize read(char_type*, std::streamsize);
+ std::streamsize write(const char_type*, std::streamsize);
+ void imbue(const std::locale& loc) { impl().cvt_.imbue(loc); }
+
+ // Direct device access.
+
+ Device& operator*() { return detail::unwrap_direct(dev()); }
+ Device* operator->() { return &detail::unwrap_direct(dev()); }
+private:
+ template<typename T> // Used for forwarding.
+ void open_impl(const T& t BOOST_IOSTREAMS_CONVERTER_PARAMS())
+ {
+ impl().open(t BOOST_IOSTREAMS_CONVERTER_ARGS());
+ }
+
+ const codecvt_type& cvt() { return impl().cvt_.get(); }
+ policy_type& dev() { return impl().dev(); }
+ buffer_type& in() { return impl().buf_.first(); }
+ buffer_type& out() { return impl().buf_.second(); }
+ impl_type& impl() { return *this->pimpl_; }
+};
+
+//--------------Implementation of converter-----------------------------------//
+
+// Implementation note: if end of stream contains a partial character,
+// it is ignored.
+template<typename Device, typename Codevt, typename Alloc>
+std::streamsize code_converter<Device, Codevt, Alloc>::read
+ (char_type* s, std::streamsize n)
+{
+ using namespace std;
+ const extern_type* next; // Next external char.
+ intern_type* nint; // Next internal char.
+ streamsize total = 0; // Characters read.
+ int status = iostreams::char_traits<char>::good();
+ bool partial = false;
+ buffer_type& buf = in();
+
+ do {
+
+ // Fill buffer.
+ if (buf.ptr() == buf.eptr() || partial) {
+ status = buf.fill(dev());
+ if (buf.ptr() == buf.eptr())
+ break;
+ partial = false;
+ }
+
+ // Convert.
+ codecvt_base::result result =
+ cvt().in( buf.state(),
+ buf.ptr(), buf.eptr(), next,
+ s + total, s + n, nint );
+ buf.ptr() += next - buf.ptr();
+ total = static_cast<streamsize>(nint - s);
+
+ switch (result) {
+ case codecvt_base::partial:
+ partial = true;
+ break;
+ case codecvt_base::ok:
+ break;
+ case codecvt_base::noconv:
+ {
+ streamsize amt =
+ std::min<streamsize>(next - buf.ptr(), n - total);
+ detail::strncpy_if_same(s + total, buf.ptr(), amt);
+ total += amt;
+ }
+ break;
+ case codecvt_base::error:
+ default:
+ buf.state() = state_type();
+ throw code_conversion_error();
+ }
+
+ } while (total < n && status != EOF && status != WOULD_BLOCK);
+
+ return total == 0 && status == EOF ? -1 : total;
+}
+
+template<typename Device, typename Codevt, typename Alloc>
+std::streamsize code_converter<Device, Codevt, Alloc>::write
+ (const char_type* s, std::streamsize n)
+{
+ using namespace std;
+ buffer_type& buf = out();
+ extern_type* next; // Next external char.
+ const intern_type* nint; // Next internal char.
+ streamsize total = 0; // Characters written.
+ bool partial = false;
+
+ while (total < n) {
+
+ // Empty buffer.
+ if (buf.eptr() == buf.end() || partial) {
+ if (!buf.flush(dev()))
+ break;
+ partial = false;
+ }
+
+ // Convert.
+ codecvt_base::result result =
+ cvt().out( buf.state(),
+ s + total, s + n, nint,
+ buf.eptr(), buf.end(), next );
+ int progress = (int) (next - buf.eptr());
+ buf.eptr() += progress;
+
+ switch (result) {
+ case codecvt_base::partial:
+ partial = true; // Fall through.
+ case codecvt_base::ok:
+ total = static_cast<streamsize>(nint - s);
+ break;
+ case codecvt_base::noconv:
+ {
+ streamsize amt =
+ std::min<streamsize>( nint - total - s,
+ buf.end() - buf.eptr() );
+ detail::strncpy_if_same(buf.eptr(), s + total, amt);
+ total += amt;
+ }
+ break;
+ case codecvt_base::error:
+ default:
+ buf.state() = state_type();
+ throw code_conversion_error();
+ }
+ }
+ return total;
+}
+
+//----------------------------------------------------------------------------//
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp> // Borland 5.x
+
+#endif // #ifndef BOOST_IOSTREAMS_CODE_CONVERTER_HPP_INCLUDED
diff --git a/boost/boost/iostreams/combine.hpp b/boost/boost/iostreams/combine.hpp
new file mode 100644
index 00000000000..27360822a4b
--- /dev/null
+++ b/boost/boost/iostreams/combine.hpp
@@ -0,0 +1,233 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+// To do: add support for random-access.
+
+#ifndef BOOST_IOSTREAMS_COMBINE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_COMBINE_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // NO_STD_LOCALE, DEDUCED_TYPENAME.
+#ifndef BOOST_NO_STD_LOCALE
+# include <locale>
+#endif
+#include <boost/iostreams/detail/ios.hpp>
+#include <boost/iostreams/detail/wrap_unwrap.hpp>
+#include <boost/iostreams/traits.hpp>
+#include <boost/iostreams/operations.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace iostreams {
+
+namespace detail {
+
+//
+// Template name: combined_device.
+// Description: Model of Device defined in terms of a Source/Sink pair.
+// Template paramters:
+// Source - A model of Source, with the same char_type and traits_type
+// as Sink.
+// Sink - A model of Sink, with the same char_type and traits_type
+// as Source.
+//
+template<typename Source, typename Sink>
+class combined_device {
+public:
+ typedef typename char_type_of<Source>::type char_type;
+ struct category
+ : bidirectional,
+ device_tag,
+ closable_tag,
+ localizable_tag
+ { };
+ combined_device(const Source& src, const Sink& snk);
+ std::streamsize read(char_type* s, std::streamsize n);
+ std::streamsize write(const char_type* s, std::streamsize n);
+ void close(BOOST_IOS::openmode);
+ #ifndef BOOST_NO_STD_LOCALE
+ void imbue(const std::locale& loc);
+ #endif
+private:
+ typedef typename char_type_of<Sink>::type sink_char_type;
+ BOOST_STATIC_ASSERT((is_same<char_type, sink_char_type>::value));
+ Source src_;
+ Sink sink_;
+};
+
+//
+// Template name: combined_filter.
+// Description: Model of Device defined in terms of a Source/Sink pair.
+// Template paramters:
+// InputFilter - A model of InputFilter, with the same char_type as
+// OutputFilter.
+// OutputFilter - A model of OutputFilter, with the same char_type as
+// InputFilter.
+//
+template<typename InputFilter, typename OutputFilter>
+class combined_filter {
+private:
+ typedef typename category_of<InputFilter>::type in_category;
+ typedef typename category_of<OutputFilter>::type out_category;
+public:
+ typedef typename char_type_of<InputFilter>::type char_type;
+ struct category
+ : multichar_bidirectional_filter_tag,
+ closable_tag,
+ localizable_tag
+ { };
+ combined_filter(const InputFilter& in, const OutputFilter& out);
+
+ template<typename Source>
+ std::streamsize read(Source& src, char_type* s, std::streamsize n)
+ { return boost::iostreams::read(in_, src, s, n); }
+
+ template<typename Sink>
+ std::streamsize write(Sink& snk, const char_type* s, std::streamsize n)
+ { return boost::iostreams::write(out_, snk, s, n); }
+
+ template<typename Sink>
+ void close(Sink& snk, BOOST_IOS::openmode which)
+ {
+ if (which & BOOST_IOS::in)
+ iostreams::close(in_, snk, which);
+ if (which & BOOST_IOS::out)
+ iostreams::close(out_, snk, which);
+ }
+ #ifndef BOOST_NO_STD_LOCALE
+ void imbue(const std::locale& loc);
+ #endif
+private:
+ typedef typename char_type_of<OutputFilter>::type output_char_type;
+ BOOST_STATIC_ASSERT((is_same<char_type, output_char_type>::value));
+ InputFilter in_;
+ OutputFilter out_;
+};
+
+template<typename In, typename Out>
+struct combination_traits
+ : mpl::if_<
+ is_device<In>,
+ combined_device<
+ typename wrapped_type<In>::type,
+ typename wrapped_type<Out>::type
+ >,
+ combined_filter<
+ typename wrapped_type<In>::type,
+ typename wrapped_type<Out>::type
+ >
+ >
+ { };
+
+} // End namespace detail.
+
+template<typename In, typename Out>
+struct combination : detail::combination_traits<In, Out>::type {
+ typedef typename detail::combination_traits<In, Out>::type base_type;
+ typedef typename detail::wrapped_type<In>::type in_type;
+ typedef typename detail::wrapped_type<Out>::type out_type;
+ combination(const in_type& in, const out_type& out)
+ : base_type(in, out) { }
+};
+
+namespace detail {
+
+// Workaround for VC6 ETI bug.
+template<typename In, typename Out>
+struct combine_traits {
+ typedef combination<
+ BOOST_DEDUCED_TYPENAME detail::unwrapped_type<In>::type,
+ BOOST_DEDUCED_TYPENAME detail::unwrapped_type<Out>::type
+ > type;
+};
+
+} // End namespace detail.
+
+//
+// Template name: combine.
+// Description: Takes a Source/Sink pair or InputFilter/OutputFilter pair and
+// returns a Reource or Filter which performs input using the first member
+// of the pair and output using the second member of the pair.
+// Template paramters:
+// In - A model of Source or InputFilter, with the same char_type as Out.
+// Out - A model of Sink or OutputFilter, with the same char_type as In.
+//
+template<typename In, typename Out>
+typename detail::combine_traits<In, Out>::type
+combine(const In& in, const Out& out)
+{
+ typedef typename detail::combine_traits<In, Out>::type return_type;
+ return return_type(in, out);
+}
+
+//----------------------------------------------------------------------------//
+
+namespace detail {
+
+//--------------Implementation of combined_device-----------------------------//
+
+template<typename Source, typename Sink>
+inline combined_device<Source, Sink>::combined_device
+ (const Source& src, const Sink& snk)
+ : src_(src), sink_(snk) { }
+
+template<typename Source, typename Sink>
+inline std::streamsize
+combined_device<Source, Sink>::read(char_type* s, std::streamsize n)
+{ return iostreams::read(src_, s, n); }
+
+template<typename Source, typename Sink>
+inline std::streamsize
+combined_device<Source, Sink>::write(const char_type* s, std::streamsize n)
+{ return iostreams::write(sink_, s, n); }
+
+template<typename Source, typename Sink>
+inline void
+combined_device<Source, Sink>::close(BOOST_IOS::openmode which)
+{
+ if (which & BOOST_IOS::in)
+ iostreams::close(src_, which);
+ if (which & BOOST_IOS::out)
+ iostreams::close(sink_, which);
+}
+
+#ifndef BOOST_NO_STD_LOCALE
+ template<typename Source, typename Sink>
+ void combined_device<Source, Sink>::imbue(const std::locale& loc)
+ {
+ iostreams::imbue(src_, loc);
+ iostreams::imbue(sink_, loc);
+ }
+#endif
+
+//--------------Implementation of filter_pair---------------------------------//
+
+template<typename InputFilter, typename OutputFilter>
+inline combined_filter<InputFilter, OutputFilter>::combined_filter
+ (const InputFilter& in, const OutputFilter& out) : in_(in), out_(out)
+ { }
+
+#ifndef BOOST_NO_STD_LOCALE
+ template<typename InputFilter, typename OutputFilter>
+ void combined_filter<InputFilter, OutputFilter>::imbue
+ (const std::locale& loc)
+ {
+ iostreams::imbue(in_, loc);
+ iostreams::imbue(out_, loc);
+ }
+#endif
+
+
+} // End namespace detail.
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_COMBINE_HPP_INCLUDED
diff --git a/boost/boost/iostreams/compose.hpp b/boost/boost/iostreams/compose.hpp
new file mode 100644
index 00000000000..37bbe630184
--- /dev/null
+++ b/boost/boost/iostreams/compose.hpp
@@ -0,0 +1,368 @@
+// (C) Copyright Jonathan Turkanis 2005.
+// 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/iostreams for documentation.
+
+// Note: bidirectional streams are not supported.
+
+#ifndef BOOST_IOSTREAMS_COMPOSE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_COMPOSE_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <algorithm> // min.
+#include <utility> // pair.
+#include <boost/config.hpp> // DEDUCED_TYPENAME.
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/detail/adapter/direct_adapter.hpp>
+#include <boost/iostreams/detail/call_traits.hpp>
+#include <boost/iostreams/detail/closer.hpp>
+#include <boost/iostreams/detail/enable_if_stream.hpp>
+#include <boost/iostreams/operations.hpp>
+#include <boost/iostreams/traits.hpp> // mode_of, is_direct.
+#include <boost/mpl/if.hpp>
+#include <boost/ref.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+namespace boost { namespace iostreams {
+
+namespace detail {
+
+template<typename Filter, typename Device>
+struct composite_mode {
+ typedef typename mode_of<Filter>::type filter_mode;
+ typedef typename mode_of<Device>::type device_mode;
+ typedef is_convertible<filter_mode, dual_use> is_dual_use;
+ typedef typename
+ mpl::if_<
+ is_convertible<device_mode, input>,
+ input,
+ output
+ >::type type;
+};
+
+//
+// Template name: composite_device.
+// Description: Provides a Device view of a Filter, Device pair.
+// Template paramters:
+// Filter - A model of Filter.
+// Device - An indirect model of Device.
+//
+template< typename Filter,
+ typename Device,
+ typename Mode =
+ BOOST_DEDUCED_TYPENAME composite_mode<Filter, Device>::type >
+class composite_device {
+private:
+ typedef typename detail::param_type<Device>::type param_type;
+ typedef typename
+ iostreams::select< // Disambiguation for Tru64.
+ is_direct<Device>, direct_adapter<Device>,
+ is_std_io<Device>, Device&,
+ else_, Device
+ >::type value_type;
+public:
+ typedef typename char_type_of<Filter>::type char_type;
+ struct category
+ : Mode,
+ device_tag,
+ closable_tag,
+ flushable_tag,
+ localizable_tag,
+ optimally_buffered_tag
+ { };
+ composite_device(const Filter& flt, param_type dev);
+ std::streamsize read(char_type* s, std::streamsize n);
+ std::streamsize write(const char_type* s, std::streamsize n);
+ std::streampos seek( stream_offset off, BOOST_IOS::seekdir way,
+ BOOST_IOS::openmode which =
+ BOOST_IOS::in | BOOST_IOS::out );
+
+ void close();
+ void close(BOOST_IOS::openmode which);
+ bool flush();
+ std::streamsize optimal_buffer_size() const;
+
+ template<typename Locale> // Avoid dependency on <locale>
+ void imbue(const Locale& loc)
+ {
+ iostreams::imbue(filter_, loc);
+ iostreams::imbue(device_, loc);
+ }
+
+ Filter& first() { return filter_; }
+ Device& second() { return device_; }
+private:
+ Filter filter_;
+ value_type device_;
+};
+
+//
+// Template name: composite_device.
+// Description: Provides a Device view of a Filter, Device pair.
+// Template paramters:
+// Filter - A model of Filter.
+// Device - An indirect model of Device.
+//
+template<typename Filter1, typename Filter2>
+class composite_filter {
+private:
+ typedef reference_wrapper<Filter2> filter_ref;
+public:
+ typedef typename char_type_of<Filter1>::type char_type;
+ struct category
+ : mode_of<Filter1>::type,
+ filter_tag,
+ multichar_tag,
+ closable_tag,
+ flushable_tag,
+ localizable_tag,
+ optimally_buffered_tag
+ { };
+ composite_filter(const Filter1& filter1, const Filter2& filter2)
+ : filter1_(filter1), filter2_(filter2)
+ { }
+
+ template<typename Source>
+ std::streamsize read(Source& src, char_type* s, std::streamsize n)
+ {
+ composite_device<filter_ref, Source> cmp(boost::ref(filter2_), src);
+ return iostreams::read(filter1_, cmp, s, n);
+ }
+
+ template<typename Sink>
+ std::streamsize write(Sink& snk, const char_type* s, std::streamsize n)
+ {
+ composite_device<filter_ref, Sink> cmp(boost::ref(filter2_), snk);
+ return iostreams::write(filter1_, cmp, s, n);
+ }
+
+ template<typename Device>
+ std::streampos seek( Device& dev, stream_offset off, BOOST_IOS::seekdir way,
+ BOOST_IOS::openmode which =
+ BOOST_IOS::in | BOOST_IOS::out )
+ {
+ composite_device<filter_ref, Device> cmp(boost::ref(filter2_), dev);
+ return iostreams::seek(filter1_, cmp, off, way, which);
+ }
+
+ template<typename Device>
+ void close( Device& dev,
+ BOOST_IOS::openmode which =
+ BOOST_IOS::in | BOOST_IOS::out )
+ {
+ composite_device<filter_ref, Device> cmp(boost::ref(filter2_), dev);
+ iostreams::close(filter1_, cmp, which);
+ }
+
+ template<typename Device>
+ bool flush(Device& dev)
+ {
+ composite_device<Filter2, Device> cmp(filter2_, dev);
+ return iostreams::flush(filter1_, cmp);
+ }
+
+ std::streamsize optimal_buffer_size() const
+ {
+ std::streamsize first = iostreams::optimal_buffer_size(filter1_);
+ std::streamsize second = iostreams::optimal_buffer_size(filter2_);
+ return first < second ? second : first;
+ }
+
+ template<typename Locale> // Avoid dependency on <locale>
+ void imbue(const Locale& loc)
+ { // To do: consider using RAII.
+ iostreams::imbue(filter1_, loc);
+ iostreams::imbue(filter2_, loc);
+ }
+
+ Filter1& first() { return filter1_; }
+ Filter2& second() { return filter2_; }
+private:
+ Filter1 filter1_;
+ Filter2 filter2_;
+};
+
+template<typename Filter, typename FilterOrDevice>
+struct composite_traits
+ : mpl::if_<
+ is_device<FilterOrDevice>,
+ composite_device<Filter, FilterOrDevice>,
+ composite_filter<Filter, FilterOrDevice>
+ >
+ { };
+
+} // End namespace detail.
+
+template<typename Filter, typename FilterOrDevice>
+struct composite : detail::composite_traits<Filter, FilterOrDevice>::type {
+ typedef typename detail::param_type<FilterOrDevice>::type param_type;
+ typedef typename detail::composite_traits<Filter, FilterOrDevice>::type base;
+ composite(const Filter& flt, param_type dev)
+ : base(flt, dev)
+ { }
+};
+
+//--------------Implementation of compose-------------------------------------//
+
+// Note: The following workarounds are patterned after resolve.hpp. It has not
+// yet been confirmed that they are necessary.
+
+#ifndef BOOST_IOSTREAMS_BROKEN_OVERLOAD_RESOLUTION //-------------------------//
+# ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //-------------------------------//
+
+template<typename Filter, typename FilterOrDevice>
+composite<Filter, FilterOrDevice>
+compose( const Filter& filter, const FilterOrDevice& fod
+ BOOST_IOSTREAMS_DISABLE_IF_STREAM(FilterOrDevice) )
+{ return composite<Filter, FilterOrDevice>(filter, fod); }
+
+template<typename Filter, typename Ch, typename Tr>
+composite< Filter, std::basic_streambuf<Ch, Tr> >
+compose(const Filter& filter, std::basic_streambuf<Ch, Tr>& sb)
+{ return composite< Filter, std::basic_streambuf<Ch, Tr> >(filter, sb); }
+
+template<typename Filter, typename Ch, typename Tr>
+composite< Filter, std::basic_istream<Ch, Tr> >
+compose(const Filter& filter, std::basic_istream<Ch, Tr>& is)
+{ return composite< Filter, std::basic_istream<Ch, Tr> >(filter, is); }
+
+template<typename Filter, typename Ch, typename Tr>
+composite< Filter, std::basic_ostream<Ch, Tr> >
+compose(const Filter& filter, std::basic_ostream<Ch, Tr>& os)
+{ return composite< Filter, std::basic_ostream<Ch, Tr> >(filter, os); }
+
+template<typename Filter, typename Ch, typename Tr>
+composite< Filter, std::basic_iostream<Ch, Tr> >
+compose(const Filter& filter, std::basic_iostream<Ch, Tr>& io)
+{ return composite< Filter, std::basic_iostream<Ch, Tr> >(filter, io); }
+
+# else // # ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //---------------------//
+
+template<typename Filter, typename FilterOrDevice>
+composite<Filter, FilterOrDevice>
+compose( const Filter& filter, const FilterOrDevice& fod
+ BOOST_IOSTREAMS_DISABLE_IF_STREAM(FilterOrDevice) )
+{ return composite<Filter, FilterOrDevice>(filter, fod); }
+
+template<typename Filter>
+composite<Filter, std::streambuf>
+compose(const Filter& filter, std::streambuf& sb)
+{ return composite<Filter, std::streambuf>(filter, sb); }
+
+template<typename Filter>
+composite<Filter, std::istream>
+compose(const Filter& filter, std::istream& is)
+{ return composite<Filter, std::istream>(filter, is); }
+
+template<typename Filter>
+composite<Filter, std::ostream>
+compose(const Filter& filter, std::ostream& os)
+{ return composite<Filter, std::ostream>(filter, os); }
+
+template<typename Filter>
+composite<Filter, std::iostream>
+compose(const Filter& filter, std::iostream& io)
+{ return composite<Filter, std::iostream>(filter, io); }
+
+# endif // # ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //--------------------//
+#else // #ifndef BOOST_IOSTREAMS_BROKEN_OVERLOAD_RESOLUTION //----------------//
+
+template<typename Filter, typename Stream>
+composite<Filter, Stream>
+compose(const Filter& flt, const Stream& strm, mpl::true_)
+{ // Bad overload resolution.
+ return composite<Filter, Stream>(flt, const_cast<Stream&>(strm));
+}
+
+template<typename Filter, typename FilterOrDevice>
+composite<Filter, FilterOrDevice>
+compose(const Filter& flt, const FilterOrDevice& fod, mpl::false_)
+{ return composite<Filter, FilterOrDevice>(flt, fod); }
+
+template<typename Filter, typename FilterOrDevice>
+composite<Filter, FilterOrDevice>
+compose( const Filter& flt, const FilterOrDevice& fod
+ BOOST_IOSTREAMS_DISABLE_IF_STREAM(T) )
+{ return compose(flt, fod, is_std_io<FilterOrDevice>()); }
+
+# if !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && \
+ !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) && \
+ !defined(__GNUC__) // ---------------------------------------------------//
+
+template<typename Filter, typename FilterOrDevice>
+composite<Filter, FilterOrDevice>
+compose (const Filter& filter, FilterOrDevice& fod)
+{ return composite<Filter, FilterOrDevice>(filter, fod); }
+
+# endif // Borland 5.x, VC6-7.0 or GCC 2.9x //--------------------------------//
+#endif // #ifndef BOOST_IOSTREAMS_BROKEN_OVERLOAD_RESOLUTION //---------------//
+
+//----------------------------------------------------------------------------//
+
+namespace detail {
+
+//--------------Implementation of composite_device---------------------------//
+
+template<typename Filter, typename Device, typename Mode>
+composite_device<Filter, Device, Mode>::composite_device
+ (const Filter& flt, param_type dev)
+ : filter_(flt), device_(dev)
+ { }
+
+template<typename Filter, typename Device, typename Mode>
+inline std::streamsize composite_device<Filter, Device, Mode>::read
+ (char_type* s, std::streamsize n)
+{ return iostreams::read(filter_, device_, s, n); }
+
+template<typename Filter, typename Device, typename Mode>
+inline std::streamsize composite_device<Filter, Device, Mode>::write
+ (const char_type* s, std::streamsize n)
+{ return iostreams::write(filter_, device_, s, n); }
+
+template<typename Filter, typename Device, typename Mode>
+std::streampos composite_device<Filter, Device, Mode>::seek
+ (stream_offset off, BOOST_IOS::seekdir way, BOOST_IOS::openmode which)
+{ return iostreams::seek(filter_, device_, off, way, which); }
+
+template<typename Filter, typename Device, typename Mode>
+void composite_device<Filter, Device, Mode>::close()
+{
+ typedef typename mode_of<Device>::type device_mode;
+ BOOST_IOS::openmode which =
+ is_convertible<device_mode, input>() ?
+ BOOST_IOS::in :
+ BOOST_IOS::out;
+ close(which);
+}
+
+template<typename Filter, typename Device, typename Mode>
+void composite_device<Filter, Device, Mode>::close(BOOST_IOS::openmode which)
+{
+ bool nothrow = false;
+ external_closer<value_type> close_device(device_, which, nothrow);
+ external_closer<Filter, value_type> close_filter(filter_, device_, which, nothrow);
+}
+
+template<typename Filter, typename Device, typename Mode>
+bool composite_device<Filter, Device, Mode>::flush()
+{ // To do: consider using RAII.
+ bool r1 = iostreams::flush(filter_, device_);
+ bool r2 = iostreams::flush(device_);
+ return r1 && r2;
+}
+
+template<typename Filter, typename Device, typename Mode>
+std::streamsize
+composite_device<Filter, Device, Mode>::optimal_buffer_size() const
+{ return iostreams::optimal_buffer_size(device_); }
+
+} // End namespace detail.
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_COMPOSE_HPP_INCLUDED
diff --git a/boost/boost/iostreams/concepts.hpp b/boost/boost/iostreams/concepts.hpp
new file mode 100644
index 00000000000..64344d158be
--- /dev/null
+++ b/boost/boost/iostreams/concepts.hpp
@@ -0,0 +1,128 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_CONCEPTS_HPP_INCLUDED
+#define BOOST_IOSTREAMS_CONCEPTS_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // BOOST_MSVC
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/detail/default_arg.hpp>
+#include <boost/iostreams/detail/ios.hpp> // openmode.
+#include <boost/iostreams/positioning.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+namespace boost { namespace iostreams {
+
+//--------------Definitions of helper templates for device concepts-----------//
+
+template<typename Mode, typename Ch = BOOST_IOSTREAMS_DEFAULT_ARG(char)>
+struct device {
+ typedef Ch char_type;
+ struct category
+ : Mode,
+ device_tag,
+ closable_tag,
+ localizable_tag
+ { };
+
+ void close()
+ {
+ using namespace detail;
+ BOOST_STATIC_ASSERT((!is_convertible<Mode, two_sequence>::value));
+ }
+
+ void close(BOOST_IOS::openmode)
+ {
+ using namespace detail;
+ BOOST_STATIC_ASSERT((is_convertible<Mode, two_sequence>::value));
+ }
+
+ template<typename Locale>
+ void imbue(const Locale&) { }
+};
+
+template<typename Mode, typename Ch = BOOST_IOSTREAMS_DEFAULT_ARG(wchar_t)>
+struct wdevice : device<Mode, Ch> { };
+
+typedef device<input> source;
+typedef wdevice<input> wsource;
+typedef device<output> sink;
+typedef wdevice<output> wsink;
+
+//--------------Definitions of helper templates for simple filter concepts----//
+
+template<typename Mode, typename Ch = BOOST_IOSTREAMS_DEFAULT_ARG(char)>
+struct filter {
+ typedef Ch char_type;
+ struct category
+ : Mode,
+ filter_tag,
+ closable_tag,
+ localizable_tag
+ { };
+
+ template<typename Device>
+ void close(Device&)
+ {
+ using namespace detail;
+ BOOST_STATIC_ASSERT((!is_convertible<Mode, two_sequence>::value));
+ BOOST_STATIC_ASSERT((!is_convertible<Mode, dual_use>::value));
+ }
+
+ template<typename Device>
+ void close(Device&, BOOST_IOS::openmode)
+ {
+ using namespace detail;
+ BOOST_STATIC_ASSERT(
+ (is_convertible<Mode, two_sequence>::value) ||
+ (is_convertible<Mode, dual_use>::value)
+ );
+ }
+
+ template<typename Locale>
+ void imbue(const Locale&) { }
+};
+
+template<typename Mode, typename Ch = BOOST_IOSTREAMS_DEFAULT_ARG(wchar_t)>
+struct wfilter : filter<Mode, Ch> { };
+
+typedef filter<input> input_filter;
+typedef wfilter<input> input_wfilter;
+typedef filter<output> output_filter;
+typedef wfilter<output> output_wfilter;
+typedef filter<seekable> seekable_filter;
+typedef wfilter<seekable> seekable_wfilter;
+typedef filter<dual_use> dual_use_filter;
+typedef wfilter<dual_use> dual_use_wfilter;
+
+//------Definitions of helper templates for multi-character filter cncepts----//
+
+template<typename Mode, typename Ch = char>
+struct multichar_filter : filter<Mode, Ch> {
+ struct category : filter<Mode, Ch>::category, multichar_tag { };
+};
+
+template<typename Mode, typename Ch = wchar_t>
+struct multichar_wfilter : multichar_filter<Mode, Ch> { };
+
+typedef multichar_filter<input> multichar_input_filter;
+typedef multichar_filter<input> multichar_input_wfilter;
+typedef multichar_filter<output> multichar_output_filter;
+typedef multichar_filter<output> multichar_output_wfilter;
+typedef multichar_filter<dual_use> multichar_dual_use_filter;
+typedef multichar_filter<dual_use> multichar_dual_use_wfilter;
+
+//----------------------------------------------------------------------------//
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_CONCEPTS_HPP_INCLUDED
diff --git a/boost/boost/iostreams/constants.hpp b/boost/boost/iostreams/constants.hpp
new file mode 100644
index 00000000000..0e405d67c31
--- /dev/null
+++ b/boost/boost/iostreams/constants.hpp
@@ -0,0 +1,41 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+// Contains constants used by library.
+
+#ifndef BOOST_IOSTREAMS_CONSTANTS_HPP_INCLUDED
+#define BOOST_IOSTREAMS_CONSTANTS_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#ifndef BOOST_IOSTREAMS_DEFAULT_DEVICE_BUFFER_SIZE
+# define BOOST_IOSTREAMS_DEFAULT_DEVICE_BUFFER_SIZE 4096
+#endif
+
+#ifndef BOOST_IOSTREAMS_DEFAULT_FILTER_BUFFER_SIZE
+# define BOOST_IOSTREAMS_DEFAULT_FILTER_BUFFER_SIZE 128
+#endif
+
+#ifndef BOOST_IOSTREAMS_DEFAULT_PBACK_BUFFER_SIZE
+# define BOOST_IOSTREAMS_DEFAULT_PBACK_BUFFER_SIZE 4
+#endif
+
+#include <boost/iostreams/detail/ios.hpp> // streamsize.
+
+namespace boost { namespace iostreams {
+
+const std::streamsize default_device_buffer_size =
+ BOOST_IOSTREAMS_DEFAULT_DEVICE_BUFFER_SIZE;
+const std::streamsize default_filter_buffer_size =
+ BOOST_IOSTREAMS_DEFAULT_FILTER_BUFFER_SIZE;
+const std::streamsize default_pback_buffer_size =
+ BOOST_IOSTREAMS_DEFAULT_PBACK_BUFFER_SIZE;
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_CONSTANTS_HPP_INCLUDED
diff --git a/boost/boost/iostreams/copy.hpp b/boost/boost/iostreams/copy.hpp
new file mode 100644
index 00000000000..242d34a05c2
--- /dev/null
+++ b/boost/boost/iostreams/copy.hpp
@@ -0,0 +1,198 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+// Contains: The function template copy, which reads data from a Source
+// and writes it to a Sink until the end of the sequence is reached, returning
+// the number of characters transfered.
+
+// The implementation is complicated by the need to handle smart adapters
+// and direct devices.
+
+#ifndef BOOST_IOSTREAMS_COPY_HPP_INCLUDED
+#define BOOST_IOSTREAMS_COPY_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <algorithm> // copy.
+#include <utility> // pair.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/chain.hpp>
+#include <boost/iostreams/constants.hpp>
+#include <boost/iostreams/detail/adapter/non_blocking_adapter.hpp>
+#include <boost/iostreams/detail/buffer.hpp>
+#include <boost/iostreams/detail/closer.hpp>
+#include <boost/iostreams/detail/enable_if_stream.hpp>
+#include <boost/iostreams/detail/ios.hpp> // failure, streamsize.
+#include <boost/iostreams/detail/resolve.hpp>
+#include <boost/iostreams/detail/wrap_unwrap.hpp>
+#include <boost/iostreams/operations.hpp> // read, write, close.
+#include <boost/iostreams/pipeline.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace iostreams {
+
+namespace detail {
+
+template<typename Source, typename Sink>
+std::streamsize copy_impl( Source& src, Sink& snk,
+ std::streamsize /* buffer_size */,
+ mpl::true_, mpl::true_ )
+{ // Copy from a direct Source to a direct Sink.
+ using namespace std;
+ typedef typename char_type_of<Source>::type char_type;
+ typedef pair<char_type*, char_type*> pair_type;
+ pair_type p1 = iostreams::input_sequence(src);
+ pair_type p2 = iostreams::output_sequence(snk);
+ if (p1.second - p1.first < p2.second - p2.first) {
+ std::copy(p1.first, p1.second, p2.first);
+ return static_cast<streamsize>(p1.second - p1.first);
+ } else {
+ throw BOOST_IOSTREAMS_FAILURE("destination too small");
+ }
+}
+
+template<typename Source, typename Sink>
+std::streamsize copy_impl( Source& src, Sink& snk,
+ std::streamsize /* buffer_size */,
+ mpl::true_, mpl::false_ )
+{ // Copy from a direct Source to an indirect Sink.
+ using namespace std;
+ typedef typename char_type_of<Source>::type char_type;
+ typedef pair<char_type*, char_type*> pair_type;
+ pair_type p = iostreams::input_sequence(src);
+ std::streamsize size, total;
+ for ( total = 0, size = static_cast<streamsize>(p.second - p.first);
+ total < size; )
+ {
+ std::streamsize amt =
+ iostreams::write(snk, p.first + total, size - total);
+ total += amt;
+ }
+ return size;
+}
+
+template<typename Source, typename Sink>
+std::streamsize copy_impl( Source& src, Sink& snk,
+ std::streamsize buffer_size,
+ mpl::false_, mpl::true_ )
+{ // Copy from an indirect Source to a direct Sink.
+ using namespace std;
+ typedef typename char_type_of<Source>::type char_type;
+ typedef pair<char_type*, char_type*> pair_type;
+ detail::basic_buffer<char_type> buf(buffer_size);
+ pair_type p = snk.output_sequence();
+ streamsize total = 0;
+ bool done = false;
+ while (!done) {
+ streamsize amt;
+ done = (amt = iostreams::read(src, buf.data(), buffer_size)) == -1;
+ std::copy(buf.data(), buf.data() + amt, p.first + total);
+ if (amt != -1)
+ total += amt;
+ }
+ return total;
+}
+
+template<typename Source, typename Sink>
+std::streamsize copy_impl( Source& src, Sink& snk,
+ std::streamsize buffer_size,
+ mpl::false_, mpl::false_ )
+{ // Copy from an indirect Source to a indirect Sink. This algorithm
+ // can be improved by eliminating the non_blocking_adapter.
+ typedef typename char_type_of<Source>::type char_type;
+ detail::basic_buffer<char_type> buf(buffer_size);
+ non_blocking_adapter<Sink> nb(snk);
+ std::streamsize total = 0;
+ bool done = false;
+ while (!done) {
+ std::streamsize amt;
+ done = (amt = iostreams::read(src, buf.data(), buffer_size)) == -1;
+ if (amt != -1) {
+ iostreams::write(nb, buf.data(), amt);
+ total += amt;
+ }
+ }
+ return total;
+}
+
+template<typename Source, typename Sink>
+std::streamsize copy_impl(Source src, Sink snk, std::streamsize buffer_size)
+{
+ using namespace std;
+ typedef typename char_type_of<Source>::type src_char;
+ typedef typename char_type_of<Sink>::type snk_char;
+ BOOST_STATIC_ASSERT((is_same<src_char, snk_char>::value));
+ bool nothrow = false;
+ external_closer<Source> close_source(src, BOOST_IOS::in, nothrow);
+ external_closer<Sink> close_sink(snk, BOOST_IOS::out, nothrow);
+ streamsize result =
+ copy_impl( src, snk, buffer_size,
+ is_direct<Source>(), is_direct<Sink>() );
+ return result;
+}
+
+} // End namespace detail.
+
+//------------------Definition of copy----------------------------------------//
+
+template<typename Source, typename Sink>
+std::streamsize
+copy( const Source& src, const Sink& snk,
+ std::streamsize buffer_size = default_device_buffer_size
+ BOOST_IOSTREAMS_DISABLE_IF_STREAM(Source)
+ BOOST_IOSTREAMS_DISABLE_IF_STREAM(Sink) )
+{
+ typedef typename char_type_of<Source>::type char_type;
+ return detail::copy_impl( detail::resolve<input, char_type>(src),
+ detail::resolve<output, char_type>(snk),
+ buffer_size );
+}
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------------//
+
+template<typename Source, typename Sink>
+std::streamsize
+copy( Source& src, const Sink& snk,
+ std::streamsize buffer_size = default_device_buffer_size
+ BOOST_IOSTREAMS_ENABLE_IF_STREAM(Source)
+ BOOST_IOSTREAMS_DISABLE_IF_STREAM(Sink) )
+{
+ typedef typename char_type_of<Source>::type char_type;
+ return detail::copy_impl( detail::wrap(src),
+ detail::resolve<output, char_type>(snk),
+ buffer_size );
+}
+
+template<typename Source, typename Sink>
+std::streamsize
+copy( const Source& src, Sink& snk,
+ std::streamsize buffer_size = default_device_buffer_size
+ BOOST_IOSTREAMS_DISABLE_IF_STREAM(Source)
+ BOOST_IOSTREAMS_ENABLE_IF_STREAM(Sink) )
+{
+ typedef typename char_type_of<Source>::type char_type;
+ return detail::copy_impl( detail::resolve<input, char_type>(src),
+ detail::wrap(snk), buffer_size);
+}
+
+template<typename Source, typename Sink>
+std::streamsize
+copy( Source& src, Sink& snk,
+ std::streamsize buffer_size = default_device_buffer_size
+ BOOST_IOSTREAMS_ENABLE_IF_STREAM(Source)
+ BOOST_IOSTREAMS_ENABLE_IF_STREAM(Sink) )
+{
+ return detail::copy_impl(detail::wrap(src), detail::wrap(snk), buffer_size);
+}
+
+#endif // #if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //-----------------------//
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_COPY_HPP_INCLUDED
diff --git a/boost/boost/iostreams/detail/access_control.hpp b/boost/boost/iostreams/detail/access_control.hpp
new file mode 100644
index 00000000000..c886dccd994
--- /dev/null
+++ b/boost/boost/iostreams/detail/access_control.hpp
@@ -0,0 +1,86 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+// Contains the definition of the class template access_control, which
+// allows the type of inheritance from a provided base class to be specified
+// using a template parameter.
+
+
+#ifndef BOOST_IOSTREAMS_ACCESS_CONTROL_HPP_INCLUDED
+#define BOOST_IOSTREAMS_ACCESS_CONTROL_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/iostreams/detail/select.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace iostreams {
+
+struct protected_ { }; // Represents protected inheritance.
+struct public_ { }; // Represents public inheritance.
+
+
+namespace detail {
+
+ // Implements protected inheritance.
+ template<typename U>
+ struct prot_ : protected U
+ {
+ prot_() { }
+ template<typename V> prot_(V v) : U(v) { }
+ };
+
+ // Implements public inheritance.
+ template<typename U> struct pub_ : public U {
+ pub_() { }
+ template<typename V> pub_(V v) : U(v) { }
+ };
+
+//
+// Used to deduce the base type for the template access_control.
+//
+template<typename T, typename Access>
+struct access_control_base {
+ typedef int bad_access_specifier;
+ typedef typename
+ iostreams::select< // Disambiguation for Tru64
+ ::boost::is_same<
+ Access, protected_
+ >, prot_<T>,
+ ::boost::is_same<
+ Access, public_
+ >, pub_<T>,
+ else_, bad_access_specifier
+ >::type type;
+};
+
+} // End namespace detail.
+
+//
+// Template name: access_control.
+// Description: Allows the type of inheritance from a provided base class
+// to be specified using an int template parameter.
+// Template parameters:
+// Base - The class from which to inherit (indirectly.)
+// Access - The type of access desired. Must be one of the
+// values access_base::prot or access_base::pub.
+//
+template< typename T, typename Access,
+ typename Base = // VC6 workaraound (Compiler Error C2516)
+ typename detail::access_control_base<T, Access>::type >
+struct access_control : public Base {
+ access_control() { }
+ template<typename U> explicit access_control(U u) : Base(u) { }
+};
+
+//----------------------------------------------------------------------------//
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_ACCESS_CONTROL_HPP_INCLUDED
diff --git a/boost/boost/iostreams/detail/adapter/basic_adapter.hpp b/boost/boost/iostreams/detail/adapter/basic_adapter.hpp
new file mode 100644
index 00000000000..6135890b4d7
--- /dev/null
+++ b/boost/boost/iostreams/detail/adapter/basic_adapter.hpp
@@ -0,0 +1,69 @@
+// (C) Copyright Jonathan Turkanis 2005.
+// 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_BASIC_ADAPTER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_BASIC_ADAPTER_HPP_INCLUDED
+
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/detail/call_traits.hpp>
+#include <boost/iostreams/detail/ios.hpp>
+#include <boost/iostreams/operations.hpp>
+#include <boost/iostreams/traits.hpp>
+#include <boost/static_assert.hpp>
+
+namespace boost { namespace iostreams { namespace detail {
+
+template<typename T>
+class basic_adapter {
+private:
+ typedef typename detail::value_type<T>::type value_type;
+ typedef typename detail::param_type<T>::type param_type;
+public:
+ explicit basic_adapter(param_type t) : t_(t) { }
+ T& component() { return t_; }
+
+ void close(BOOST_IOS::openmode which = BOOST_IOS::in | BOOST_IOS::out)
+ {
+ BOOST_STATIC_ASSERT(is_device<T>::value);
+ iostreams::close(t_, which);
+ }
+
+ template<typename Device>
+ void close( Device& dev,
+ BOOST_IOS::openmode which =
+ BOOST_IOS::in | BOOST_IOS::out )
+ {
+ BOOST_STATIC_ASSERT(is_filter<T>::value);
+ iostreams::close(t_, dev, which);
+ }
+
+ bool flush()
+ {
+ BOOST_STATIC_ASSERT(is_device<T>::value);
+ return iostreams::flush(t_);
+ }
+
+ template<typename Device>
+ void flush(Device& dev)
+ {
+ BOOST_STATIC_ASSERT(is_filter<T>::value);
+ return iostreams::flush(t_, dev);
+ }
+
+ template<typename Locale> // Avoid dependency on <locale>
+ void imbue(const Locale& loc) { iostreams::imbue(t_, loc); }
+
+ std::streamsize optimal_buffer_size() const
+ { return iostreams::optimal_buffer_size(t_); }
+public:
+ value_type t_;
+};
+
+//----------------------------------------------------------------------------//
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_BASIC_ADAPTER_HPP_INCLUDED
diff --git a/boost/boost/iostreams/detail/adapter/concept_adapter.hpp b/boost/boost/iostreams/detail/adapter/concept_adapter.hpp
new file mode 100644
index 00000000000..929fd85884a
--- /dev/null
+++ b/boost/boost/iostreams/detail/adapter/concept_adapter.hpp
@@ -0,0 +1,276 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_CONCEPT_ADAPTER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_CONCEPT_ADAPTER_HPP_INCLUDED
+
+#include <boost/config.hpp> // SFINAE.
+#include <boost/iostreams/concepts.hpp>
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/detail/adapter/non_blocking_adapter.hpp>
+#include <boost/iostreams/detail/call_traits.hpp>
+#include <boost/iostreams/detail/char_traits.hpp>
+#include <boost/iostreams/detail/dispatch.hpp>
+#include <boost/iostreams/detail/error.hpp>
+#include <boost/iostreams/detail/streambuf.hpp> // pubsync.
+#include <boost/iostreams/device/null.hpp>
+#include <boost/iostreams/traits.hpp>
+#include <boost/iostreams/operations.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/static_assert.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp> // MSVC.
+
+namespace boost { namespace iostreams { namespace detail {
+
+template<typename Category> struct device_wrapper_impl;
+template<typename Category> struct flt_wrapper_impl;
+
+template<typename T>
+class concept_adapter {
+private:
+ typedef typename detail::value_type<T>::type value_type;
+ typedef typename dispatch<T, input, output>::type input_tag;
+ typedef typename dispatch<T, output, input>::type output_tag;
+ typedef typename
+ mpl::if_<
+ is_device<T>,
+ device_wrapper_impl<input_tag>,
+ flt_wrapper_impl<input_tag>
+ >::type input_impl;
+ typedef typename
+ mpl::if_<
+ is_device<T>,
+ device_wrapper_impl<output_tag>,
+ flt_wrapper_impl<output_tag>
+ >::type output_impl;
+ typedef typename
+ mpl::if_<
+ is_device<T>,
+ device_wrapper_impl<any_tag>,
+ flt_wrapper_impl<any_tag>
+ >::type any_impl;
+public:
+ typedef typename char_type_of<T>::type char_type;
+ typedef typename category_of<T>::type category;
+
+ explicit concept_adapter(const reference_wrapper<T>& ref) : t_(ref.get())
+ { BOOST_STATIC_ASSERT(is_std_io<T>::value); }
+ explicit concept_adapter(const T& t) : t_(t)
+ { BOOST_STATIC_ASSERT(!is_std_io<T>::value); }
+
+ T& operator*() { return t_; }
+ T* operator->() { return &t_; }
+
+ std::streamsize read(char_type* s, std::streamsize n)
+ { return this->read(s, n, (basic_null_source<char_type>*) 0); }
+
+ template<typename Source>
+ std::streamsize read(char_type* s, std::streamsize n, Source* src)
+ { return input_impl::read(t_, src, s, n); }
+
+ std::streamsize write(const char_type* s, std::streamsize n)
+ { return this->write(s, n, (basic_null_sink<char_type>*) 0); }
+
+ template<typename Sink>
+ std::streamsize write(const char_type* s, std::streamsize n, Sink* snk)
+ { return output_impl::write(t_, snk, s, n); }
+
+ std::streampos seek( stream_offset off, BOOST_IOS::seekdir way,
+ BOOST_IOS::openmode which )
+ {
+ return this->seek( off, way, which,
+ (basic_null_device<char_type, seekable>*) 0);
+ }
+
+ template<typename Device>
+ std::streampos seek( stream_offset off, BOOST_IOS::seekdir way,
+ BOOST_IOS::openmode which, Device* dev )
+ { return any_impl::seek(t_, dev, off, way, which); }
+
+ void close(BOOST_IOS::openmode which)
+ { this->close(which, (basic_null_device<char_type, seekable>*) 0); }
+
+ template<typename Device>
+ void close(BOOST_IOS::openmode which, Device* dev)
+ { any_impl::close(t_, dev, which); }
+
+ bool flush( BOOST_IOSTREAMS_BASIC_STREAMBUF(char_type,
+ BOOST_IOSTREAMS_CHAR_TRAITS(char_type))* sb )
+ {
+ bool result = any_impl::flush(t_, sb);
+ if (sb && sb->BOOST_IOSTREAMS_PUBSYNC() == -1)
+ result = false;
+ return result;
+ }
+
+ template<typename Locale> // Avoid dependency on <locale>
+ void imbue(const Locale& loc) { iostreams::imbue(t_, loc); }
+
+ std::streamsize optimal_buffer_size() const
+ { return iostreams::optimal_buffer_size(t_); }
+public:
+ value_type t_;
+};
+
+//------------------Specializations of device_wrapper_impl--------------------//
+
+template<>
+struct device_wrapper_impl<any_tag> {
+ template<typename Device, typename Dummy>
+ static std::streampos
+ seek( Device& dev, Dummy*, stream_offset off,
+ BOOST_IOS::seekdir way, BOOST_IOS::openmode which )
+ {
+ typedef typename category_of<Device>::type category;
+ return seek(dev, off, way, which, category());
+ }
+
+ template<typename Device>
+ static std::streampos
+ seek( Device&, stream_offset, BOOST_IOS::seekdir,
+ BOOST_IOS::openmode, any_tag )
+ {
+ throw cant_seek();
+ }
+
+ template<typename Device>
+ static std::streampos
+ seek( Device& dev, stream_offset off,
+ BOOST_IOS::seekdir way, BOOST_IOS::openmode which,
+ random_access )
+ {
+ return iostreams::seek(dev, off, way, which);
+ }
+
+ template<typename Device, typename Dummy>
+ static void close(Device& dev, Dummy*, BOOST_IOS::openmode which)
+ { iostreams::close(dev, which); }
+
+ template<typename Device, typename Dummy>
+ static bool flush(Device& dev, Dummy*)
+ { return iostreams::flush(dev); }
+};
+
+
+template<>
+struct device_wrapper_impl<input> : device_wrapper_impl<any_tag> {
+ template<typename Device, typename Dummy>
+ static std::streamsize
+ read( Device& dev, Dummy*, typename char_type_of<Device>::type* s,
+ std::streamsize n )
+ { return iostreams::read(dev, s, n); }
+
+ template<typename Device, typename Dummy>
+ static std::streamsize
+ write( Device&, Dummy*, const typename char_type_of<Device>::type*,
+ std::streamsize )
+ { throw cant_write(); }
+};
+
+template<>
+struct device_wrapper_impl<output> {
+ template<typename Device, typename Dummy>
+ static std::streamsize
+ read(Device&, Dummy*, typename char_type_of<Device>::type*, std::streamsize)
+ { throw cant_read(); }
+
+ template<typename Device, typename Dummy>
+ static std::streamsize
+ write( Device& dev, Dummy*, const typename char_type_of<Device>::type* s,
+ std::streamsize n )
+ { return iostreams::write(dev, s, n); }
+};
+
+//------------------Specializations of flt_wrapper_impl--------------------//
+
+template<>
+struct flt_wrapper_impl<any_tag> {
+ template<typename Filter, typename Device>
+ static std::streampos
+ seek( Filter& f, Device* dev, stream_offset off,
+ BOOST_IOS::seekdir way, BOOST_IOS::openmode which )
+ {
+ typedef typename category_of<Filter>::type category;
+ return seek(f, dev, off, way, which, category());
+ }
+
+ template<typename Filter, typename Device>
+ static std::streampos
+ seek( Filter&, Device*, stream_offset,
+ BOOST_IOS::seekdir, BOOST_IOS::openmode, any_tag )
+ { throw cant_seek(); }
+
+ template<typename Filter, typename Device>
+ static std::streampos
+ seek( Filter& f, Device* dev, stream_offset off,
+ BOOST_IOS::seekdir way, BOOST_IOS::openmode which,
+ random_access tag )
+ {
+ typedef typename category_of<Filter>::type category;
+ return seek(f, dev, off, way, which, tag, category());
+ }
+
+ template<typename Filter, typename Device>
+ static std::streampos
+ seek( Filter& f, Device* dev, stream_offset off,
+ BOOST_IOS::seekdir way, BOOST_IOS::openmode which,
+ random_access, any_tag )
+ { return f.seek(*dev, off, way); }
+
+ template<typename Filter, typename Device>
+ static std::streampos
+ seek( Filter& f, Device* dev, stream_offset off,
+ BOOST_IOS::seekdir way, BOOST_IOS::openmode which,
+ random_access, two_sequence )
+ { return f.seek(*dev, off, way, which); }
+
+ template<typename Filter, typename Device>
+ static void close(Filter& f, Device* dev, BOOST_IOS::openmode which)
+ { iostreams::close(f, *dev, which); }
+
+ template<typename Filter, typename Device>
+ static bool flush(Filter& f, Device* dev)
+ { return iostreams::flush(f, *dev); }
+};
+
+template<>
+struct flt_wrapper_impl<input> {
+ template<typename Filter, typename Source>
+ static std::streamsize
+ read( Filter& f, Source* src, typename char_type_of<Filter>::type* s,
+ std::streamsize n )
+ { return iostreams::read(f, *src, s, n); }
+
+ template<typename Filter, typename Sink>
+ static std::streamsize
+ write( Filter&, Sink*, const typename char_type_of<Filter>::type*,
+ std::streamsize )
+ { throw cant_write(); }
+};
+
+template<>
+struct flt_wrapper_impl<output> {
+ template<typename Filter, typename Source>
+ static std::streamsize
+ read(Filter&, Source*, typename char_type_of<Filter>::type*,std::streamsize)
+ { throw cant_read(); }
+
+ template<typename Filter, typename Sink>
+ static std::streamsize
+ write( Filter& f, Sink* snk, const typename char_type_of<Filter>::type* s,
+ std::streamsize n )
+ { return iostreams::write(f, *snk, s, n); }
+};
+
+//----------------------------------------------------------------------------//
+
+} } } // End namespaces detail, iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp> // MSVC.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_CONCEPT_ADAPTER_HPP_INCLUDED
diff --git a/boost/boost/iostreams/detail/adapter/direct_adapter.hpp b/boost/boost/iostreams/detail/adapter/direct_adapter.hpp
new file mode 100644
index 00000000000..974ccf7cacc
--- /dev/null
+++ b/boost/boost/iostreams/detail/adapter/direct_adapter.hpp
@@ -0,0 +1,278 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_DIRECT_ADAPTER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_DIRECT_ADAPTER_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // SFINAE, MSVC, put ptrdiff_t in std.
+#include <algorithm> // copy, min.
+#include <cstddef> // ptrdiff_t.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/detail/config/limits.hpp> // forwarding.
+#include <boost/iostreams/detail/config/wide_streams.hpp> // locale.
+#include <boost/iostreams/detail/double_object.hpp>
+#include <boost/iostreams/detail/error.hpp>
+#include <boost/iostreams/detail/ios.hpp> // openmode, seekdir, int types.
+#include <boost/iostreams/traits.hpp> // mode_of, is_direct.
+#include <boost/iostreams/operations.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/preprocessor/iteration/local.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp> // VC7.1
+
+namespace boost { namespace iostreams { namespace detail {
+
+//------------------Definition of direct_adapter_base-------------------------//
+
+// Put all initialization in base class to faciliate forwarding.
+template<typename Direct>
+class direct_adapter_base {
+public:
+ typedef typename char_type_of<Direct>::type char_type;
+ struct category
+ : mode_of<Direct>::type,
+ device_tag,
+ closable_tag
+ #ifndef BOOST_IOSTREAMS_NO_LOCALE
+ , localizable_tag
+ #endif
+ { };
+protected:
+ explicit direct_adapter_base(const Direct& d);
+ typedef is_convertible<category, two_sequence> is_double;
+ struct pointers {
+ char_type *beg, *ptr, *end;
+ };
+ void init_input(mpl::true_);
+ void init_input(mpl::false_) { }
+ void init_output(mpl::true_);
+ void init_output(mpl::false_) { }
+ double_object<pointers, is_double> ptrs_;
+ Direct d_;
+};
+
+template<typename Direct>
+class direct_adapter : private direct_adapter_base<Direct> {
+private:
+ typedef direct_adapter_base<Direct> base_type;
+ typedef typename base_type::pointers pointers;
+ typedef typename base_type::is_double is_double;
+ using base_type::ptrs_;
+ using base_type::d_;
+public:
+ typedef typename base_type::char_type char_type;
+ typedef typename base_type::category category;
+
+ // Constructors
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1310)
+ direct_adapter(const Direct& d) : base_type(d) { }
+ direct_adapter(const direct_adapter& d) : base_type(d) { }
+# define BOOST_PP_LOCAL_LIMITS (1, BOOST_IOSTREAMS_MAX_FORWARDING_ARITY)
+#else
+ template<typename U>
+ struct is_direct
+ : mpl::or_<
+ is_same<U, direct_adapter<Direct> >,
+ is_same<U, Direct>
+ >
+ { };
+ template<typename U>
+ direct_adapter(const U& u)
+ : base_type(forward(u, is_direct<U>()))
+ { }
+# define BOOST_PP_LOCAL_LIMITS (2, BOOST_IOSTREAMS_MAX_FORWARDING_ARITY)
+#endif
+
+#define BOOST_PP_LOCAL_MACRO(n) \
+ template<BOOST_PP_ENUM_PARAMS(n, typename P)> \
+ direct_adapter(BOOST_PP_ENUM_BINARY_PARAMS(n, const P, &p)) \
+ : base_type(Direct(BOOST_PP_ENUM_PARAMS(n, p))) \
+ { } \
+ /**/
+#include BOOST_PP_LOCAL_ITERATE()
+#undef BOOST_PP_LOCAL_MACRO
+
+ // Device interface.
+
+ std::streamsize read(char_type* s, std::streamsize n);
+ std::streamsize write(const char_type* s, std::streamsize n);
+ std::streampos seek( stream_offset, BOOST_IOS::seekdir,
+ BOOST_IOS::openmode = BOOST_IOS::in | BOOST_IOS::out );
+ void close();
+ void close(BOOST_IOS::openmode which);
+#ifndef BOOST_IOSTREAMS_NO_LOCALE
+ void imbue(const std::locale&);
+#endif
+
+ // Direct device access.
+
+ Direct& operator*() { return d_; }
+ Direct* operator->() { return &d_; }
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1310)
+private:
+ template<typename U>
+ static Direct forward(const U& u, mpl::true_) { return u; }
+ template<typename U>
+ static Direct forward(const U& u, mpl::false_) { return Direct(u); }
+#endif
+};
+
+//--------------Definition of wrap_direct and unwrap_direct-------------------//
+
+template<typename Device>
+struct wrap_direct_traits
+ : mpl::if_<
+ is_direct<Device>,
+ direct_adapter<Device>,
+ Device
+ >
+ { };
+
+template<typename Device>
+typename wrap_direct_traits<Device>::type
+inline wrap_direct(Device dev)
+{
+ typedef typename wrap_direct_traits<Device>::type type;
+ return type(dev);
+}
+
+template<typename Device>
+inline Device& unwrap_direct(Device& d) { return d; }
+
+template<typename Device>
+inline Device& unwrap_direct(direct_adapter<Device>& d) { return *d; }
+
+//--------------Implementation of direct_adapter_base-------------------------//
+
+template<typename Direct>
+direct_adapter_base<Direct>::direct_adapter_base(const Direct& d) : d_(d)
+{
+ init_input(is_convertible<category, input>());
+ init_output(is_convertible<category, output>());
+}
+
+template<typename Direct>
+void direct_adapter_base<Direct>::init_input(mpl::true_)
+{
+ std::pair<char_type*, char_type*> seq = iostreams::input_sequence(d_);
+ ptrs_.first().beg = seq.first;
+ ptrs_.first().ptr = seq.first;
+ ptrs_.first().end = seq.second;
+}
+
+template<typename Direct>
+void direct_adapter_base<Direct>::init_output(mpl::true_)
+{
+ std::pair<char_type*, char_type*> seq = iostreams::output_sequence(d_);
+ ptrs_.second().beg = seq.first;
+ ptrs_.second().ptr = seq.first;
+ ptrs_.second().end = seq.second;
+}
+
+//--------------Implementation of direct_adapter------------------------------//
+
+template<typename Direct>
+inline std::streamsize direct_adapter<Direct>::read
+ (char_type* s, std::streamsize n)
+{
+ using namespace std;
+ pointers& get = ptrs_.first();
+ streamsize avail =
+ static_cast<streamsize>(get.end - get.ptr);
+ streamsize result = (std::min)(n, avail);
+ std::copy(get.ptr, get.ptr + result, s);
+ get.ptr += result;
+ return result != 0 ? result : -1;
+}
+
+template<typename Direct>
+inline std::streamsize direct_adapter<Direct>::write
+ (const char_type* s, std::streamsize n)
+{
+ using namespace std;
+ pointers& put = ptrs_.second();
+ if (n > static_cast<streamsize>(put.end - put.ptr))
+ throw write_area_exhausted();
+ std::copy(s, s + n, put.ptr);
+ put.ptr += n;
+ return n;
+}
+
+template<typename Direct>
+inline std::streampos direct_adapter<Direct>::seek
+ ( stream_offset off, BOOST_IOS::seekdir way,
+ BOOST_IOS::openmode which )
+{
+ using namespace std;
+ pointers& get = ptrs_.first();
+ pointers& put = ptrs_.second();
+ if (way == BOOST_IOS::cur && get.ptr != put.ptr)
+ bad_seek();
+ ptrdiff_t next = 0;
+ if ((which & BOOST_IOS::in) || !is_double::value) {
+ if (way == BOOST_IOS::beg)
+ next = off;
+ else if (way == BOOST_IOS::cur)
+ next = get.ptr - get.beg + off;
+ else
+ next = get.end - get.beg + off;
+ if (next >= 0 && next < get.end - get.beg)
+ get.ptr = get.beg + next;
+ else
+ bad_seek();
+ }
+ if ((which & BOOST_IOS::out) && is_double::value) {
+ if (way == BOOST_IOS::beg)
+ next = off;
+ else if (way == BOOST_IOS::cur)
+ next = put.ptr - put.beg + off;
+ else
+ next = put.end - put.beg + off;
+ if (next >= 0 && next < put.end - put.beg)
+ put.ptr = put.beg + next;
+ else
+ bad_seek();
+ }
+ return offset_to_position(next);
+}
+
+template<typename Direct>
+void direct_adapter<Direct>::close()
+{
+ BOOST_STATIC_ASSERT((!is_convertible<category, two_sequence>::value));
+ boost::iostreams::close(d_, BOOST_IOS::in | BOOST_IOS::out);
+}
+
+template<typename Direct>
+void direct_adapter<Direct>::close(BOOST_IOS::openmode which)
+{
+ BOOST_STATIC_ASSERT((is_convertible<category, two_sequence>::value));
+ boost::iostreams::close(d_, which);
+}
+
+#ifndef BOOST_IOSTREAMS_NO_LOCALE
+ template<typename Direct>
+ void direct_adapter<Direct>::imbue(const std::locale& loc)
+ { boost::iostreams::imbue(d_, loc); }
+#endif
+
+} } } // End namespaces detail, iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_DIRECT_ADAPTER_HPP_INCLUDED
diff --git a/boost/boost/iostreams/detail/adapter/mode_adapter.hpp b/boost/boost/iostreams/detail/adapter/mode_adapter.hpp
new file mode 100644
index 00000000000..d490985cd6a
--- /dev/null
+++ b/boost/boost/iostreams/detail/adapter/mode_adapter.hpp
@@ -0,0 +1,117 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_MODE_ADAPTER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_MODE_ADAPTER_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+// Contains the definition of the class template mode_adapter, which allows
+// a filter or device to function as if it has a different i/o mode than that
+// deduced by the metafunction mode_of.
+
+#include <boost/config.hpp> // BOOST_MSVC.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/detail/ios.hpp> // openmode, seekdir, int types.
+#include <boost/iostreams/traits.hpp>
+#include <boost/iostreams/operations.hpp>
+#include <boost/mpl/if.hpp>
+
+namespace boost { namespace iostreams { namespace detail {
+
+template<typename Mode, typename T>
+class mode_adapter {
+private:
+ struct empty_base { };
+public:
+ typedef typename wrapped_type<T>::type policy_type;
+ typedef typename char_type_of<T>::type char_type;
+ struct category
+ : Mode,
+ device_tag,
+ mpl::if_<is_filter<T>, filter_tag, device_tag>,
+ mpl::if_<is_filter<T>, multichar_tag, empty_base>,
+ #if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ closable_tag, // VC6 can't see member close()!
+ #endif
+ localizable_tag
+ { };
+ explicit mode_adapter(const policy_type& t) : t_(t) { }
+
+ // Device member functions.
+
+ std::streamsize read(char_type* s, std::streamsize n);
+ std::streamsize write(const char_type* s, std::streamsize n);
+ std::streampos seek( stream_offset off, BOOST_IOS::seekdir way,
+ BOOST_IOS::openmode which =
+ BOOST_IOS::in | BOOST_IOS::out );
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ void close(BOOST_IOS::openmode which = BOOST_IOS::in | BOOST_IOS::out);
+#endif
+
+ // Filter member functions.
+
+ template<typename Source>
+ std::streamsize read(Source& src, char_type* s, std::streamsize n)
+ { return iostreams::read(t_, src, s, n); }
+
+ template<typename Sink>
+ std::streamsize write(Sink& snk, const char_type* s, std::streamsize n)
+ { return iostreams::write(t_, snk, s, n); }
+
+ template<typename Device>
+ std::streampos seek(Device& dev, stream_offset off, BOOST_IOS::seekdir way)
+ { return iostreams::seek(t_, dev, off, way); }
+
+ template<typename Device>
+ std::streampos seek( Device& dev, stream_offset off,
+ BOOST_IOS::seekdir way, BOOST_IOS::openmode which )
+ { return iostreams::seek(t_, dev, off, way, which); }
+
+ template<typename Device>
+ void close(Device& dev)
+ { iostreams::close(t_, dev); }
+
+ template<typename Device>
+ void close(Device& dev, BOOST_IOS::openmode which)
+ { iostreams::close(t_, dev, which); }
+
+ template<typename Locale>
+ void imbue(const Locale& loc)
+ { iostreams::imbue(t_, loc); }
+private:
+ policy_type t_;
+};
+
+//------------------Implementation of mode_adapter----------------------------//
+
+template<typename Mode, typename T>
+std::streamsize mode_adapter<Mode, T>::read
+ (char_type* s, std::streamsize n)
+{ return boost::iostreams::read(t_, s, n); }
+
+template<typename Mode, typename T>
+std::streamsize mode_adapter<Mode, T>::write
+ (const char_type* s, std::streamsize n)
+{ return boost::iostreams::write(t_, s, n); }
+
+template<typename Mode, typename T>
+std::streampos mode_adapter<Mode, T>::seek
+ (stream_offset off, BOOST_IOS::seekdir way, BOOST_IOS::openmode which)
+{ return boost::iostreams::seek(t_, off, way, which); }
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ template<typename Mode, typename T>
+ void mode_adapter<Mode, T>::close(BOOST_IOS::openmode which)
+ { iostreams::close(t_, which); }
+#endif
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_MODE_ADAPTER_HPP_INCLUDED //-----//
diff --git a/boost/boost/iostreams/detail/adapter/non_blocking_adapter.hpp b/boost/boost/iostreams/detail/adapter/non_blocking_adapter.hpp
new file mode 100644
index 00000000000..9768d654ddc
--- /dev/null
+++ b/boost/boost/iostreams/detail/adapter/non_blocking_adapter.hpp
@@ -0,0 +1,57 @@
+// (C) Copyright Jonathan Turkanis 2005.
+// 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_NON_BLOCKING_ADAPTER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_NON_BLOCKING_ADAPTER_HPP_INCLUDED
+
+#include <boost/iostreams/detail/ios.hpp> // streamsize, seekdir, openmode.
+#include <boost/iostreams/read.hpp>
+#include <boost/iostreams/seek.hpp>
+#include <boost/iostreams/traits.hpp>
+#include <boost/iostreams/write.hpp>
+
+namespace boost { namespace iostreams {
+
+template<typename Device>
+class non_blocking_adapter {
+public:
+ typedef typename char_type_of<Device>::type char_type;
+ struct category
+ : mode_of<Device>::type, device_tag
+ { };
+ explicit non_blocking_adapter(Device& dev) : device_(dev) { }
+ std::streamsize read(char_type* s, std::streamsize n)
+ {
+ std::streamsize result = 0;
+ while (result < n) {
+ std::streamsize amt = iostreams::read(device_, s, n);
+ if (amt == -1)
+ break;
+ result += amt;
+ }
+ return result != 0 ? result : -1;
+ }
+ std::streamsize write(const char_type* s, std::streamsize n)
+ {
+ std::streamsize result = 0;
+ while (result < n) {
+ std::streamsize amt =
+ iostreams::write(device_, s + result, n - result);
+ result += amt;
+ }
+ return result;
+ }
+ std::streampos seek( stream_offset off, BOOST_IOS::seekdir way,
+ BOOST_IOS::openmode which =
+ BOOST_IOS::in | BOOST_IOS::out )
+ { return iostreams::seek(device_, off, way, which); }
+public:
+ Device& device_;
+};
+
+} } // End namespace iostreams.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_NON_BLOCKING_ADAPTER_HPP_INCLUDED
diff --git a/boost/boost/iostreams/detail/adapter/output_iterator_adapter.hpp b/boost/boost/iostreams/detail/adapter/output_iterator_adapter.hpp
new file mode 100644
index 00000000000..1de984f97a3
--- /dev/null
+++ b/boost/boost/iostreams/detail/adapter/output_iterator_adapter.hpp
@@ -0,0 +1,40 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_OUTPUT_ITERATOR_ADAPTER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_OUTPUT_ITERATOR_ADAPTER_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <algorithm> // copy.
+#include <iosfwd> // streamsize.
+#include <boost/iostreams/categories.hpp> // tags.
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+namespace boost { namespace iostreams { namespace detail {
+
+template<typename Mode, typename Ch, typename OutIt>
+class output_iterator_adapter {
+public:
+ BOOST_STATIC_ASSERT((is_convertible<Mode, output>::value));
+ typedef Ch char_type;
+ typedef sink_tag category;
+ explicit output_iterator_adapter(OutIt out) : out_(out) { }
+ std::streamsize write(const char_type* s, std::streamsize n)
+ {
+ std::copy(s, s + n, out_);
+ return n;
+ }
+private:
+ OutIt out_;
+};
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_OUTPUT_ITERATOR_ADAPTER_HPP_INCLUDED //-----//
diff --git a/boost/boost/iostreams/detail/adapter/range_adapter.hpp b/boost/boost/iostreams/detail/adapter/range_adapter.hpp
new file mode 100644
index 00000000000..15888af46ea
--- /dev/null
+++ b/boost/boost/iostreams/detail/adapter/range_adapter.hpp
@@ -0,0 +1,182 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_RANGE_ADAPTER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_RANGE_ADAPTER_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <algorithm> // min.
+#include <cassert>
+#include <cstddef> // ptrdiff_t.
+#include <iosfwd> // streamsize, streamoff.
+#include <boost/detail/iterator.hpp> // boost::iterator_traits.
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/detail/error.hpp>
+#include <boost/iostreams/positioning.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/utility/enable_if.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp> // MSVC.
+
+namespace boost { namespace iostreams { namespace detail {
+
+// Used for simulated tag dispatch.
+template<typename Traversal> struct range_adapter_impl;
+
+//
+// Template name: range_adapter
+// Description: Device based on an instance of boost::iterator_range.
+// Template paramters:
+// Mode - A mode tag.
+// Range - An instance of iterator_range.
+//
+template<typename Mode, typename Range>
+class range_adapter {
+private:
+ typedef typename Range::iterator iterator;
+ typedef boost::detail::iterator_traits<iterator> iter_traits;
+ typedef typename iter_traits::iterator_category iter_cat;
+public:
+ typedef typename Range::value_type char_type;
+ struct category : Mode, device_tag { };
+ typedef typename
+ mpl::if_<
+ is_convertible<
+ iter_cat,
+ std::random_access_iterator_tag
+ >,
+ std::random_access_iterator_tag,
+ std::forward_iterator_tag
+ >::type tag;
+ typedef range_adapter_impl<tag> impl;
+
+ explicit range_adapter(const Range& rng);
+ range_adapter(iterator first, iterator last);
+ std::streamsize read(char_type* s, std::streamsize n);
+ std::streamsize write(const char_type* s, std::streamsize n);
+ std::streampos seek(stream_offset off, BOOST_IOS::seekdir way);
+private:
+ iterator first_, cur_, last_;
+};
+
+//------------------Implementation of range_adapter---------------------------//
+
+template<typename Mode, typename Range>
+range_adapter<Mode, Range>::range_adapter(const Range& rng)
+ : first_(rng.begin()), cur_(rng.begin()), last_(rng.end()) { }
+
+template<typename Mode, typename Range>
+range_adapter<Mode, Range>::range_adapter(iterator first, iterator last)
+ : first_(first), cur_(first), last_(last) { }
+
+template<typename Mode, typename Range>
+inline std::streamsize range_adapter<Mode, Range>::read
+ (char_type* s, std::streamsize n)
+{ return impl::read(cur_, last_, s, n); }
+
+template<typename Mode, typename Range>
+inline std::streamsize range_adapter<Mode, Range>::write
+ (const char_type* s, std::streamsize n)
+{ return impl::write(cur_, last_, s, n); }
+
+
+template<typename Mode, typename Range>
+std::streampos range_adapter<Mode, Range>::seek
+ (stream_offset off, BOOST_IOS::seekdir way)
+{
+ impl::seek(first_, cur_, last_, off, way);
+ return offset_to_position(cur_ - first_);
+}
+
+//------------------Implementation of range_adapter_impl----------------------//
+
+template<>
+struct range_adapter_impl<std::forward_iterator_tag> {
+ template<typename Iter, typename Ch>
+ static std::streamsize read
+ (Iter& cur, Iter& last, Ch* s,std::streamsize n)
+ {
+ std::streamsize rem = n; // No. of chars remaining.
+ while (cur != last && rem-- > 0) *s++ = *cur++;
+ return n - rem != 0 ? n - rem : -1;
+ }
+
+ template<typename Iter, typename Ch>
+ static std::streamsize write
+ (Iter& cur, Iter& last, const Ch* s, std::streamsize n)
+ {
+ while (cur != last && n-- > 0) *cur++ = *s++;
+ if (cur == last && n > 0)
+ throw write_area_exhausted();
+ return n;
+ }
+};
+
+template<>
+struct range_adapter_impl<std::random_access_iterator_tag> {
+ template<typename Iter, typename Ch>
+ static std::streamsize read
+ (Iter& cur, Iter& last, Ch* s,std::streamsize n)
+ {
+ std::streamsize result =
+ (std::min)(static_cast<std::streamsize>(last - cur), n);
+ if (result)
+ std::copy(cur, cur + result, s);
+ cur += result;
+ return result != 0 ? result : -1;
+ }
+
+ template<typename Iter, typename Ch>
+ static std::streamsize write
+ (Iter& cur, Iter& last, const Ch* s, std::streamsize n)
+ {
+ std::streamsize count =
+ (std::min)(static_cast<std::streamsize>(last - cur), n);
+ std::copy(s, s + count, cur);
+ cur += count;
+ if (count < n)
+ throw write_area_exhausted();
+ return n;
+ }
+
+ template<typename Iter>
+ static void seek
+ ( Iter& first, Iter& cur, Iter& last, stream_offset off,
+ BOOST_IOS::seekdir way )
+ {
+ using namespace std;
+ switch (way) {
+ case BOOST_IOS::beg:
+ if (off > last - first || off < 0) bad_seek();
+ cur = first + off;
+ break;
+ case BOOST_IOS::cur:
+ {
+ std::ptrdiff_t newoff = cur - first + off;
+ if (newoff > last - first || newoff < 0) bad_seek();
+ cur += off;
+ break;
+ }
+ case BOOST_IOS::end:
+ if (last - first + off < 0 || off > 0) bad_seek();
+ cur = last + off;
+ break;
+ default:
+ assert(0);
+ }
+ }
+};
+
+} } } // End namespaces detail, iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp> // MSVC.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_RANGE_ADAPTER_HPP_INCLUDED //---------------//
diff --git a/boost/boost/iostreams/detail/add_facet.hpp b/boost/boost/iostreams/detail/add_facet.hpp
new file mode 100644
index 00000000000..97d3952a361
--- /dev/null
+++ b/boost/boost/iostreams/detail/add_facet.hpp
@@ -0,0 +1,48 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+// Borrowed from <boost/archive/add_facet.hpp>
+
+#ifndef BOOST_IOSTREAMS_DETAIL_ADD_FACET_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_ADD_FACET_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // BOOST_DINKUMWARE_STDLIB.
+#include <boost/detail/workaround.hpp>
+
+//------------------Definition of add_facet-----------------------------------//
+
+// Does STLport uses old Dinkumware locale?
+#if (defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)) && \
+ defined(_STLP_NO_OWN_IOSTREAMS) \
+ /**/
+# if (defined(_YVALS) && !defined(__IBMCPP__)) || defined(_CPPLIB_VER)
+# define BOOST_IOSTREMS_STLPORT_WITH_OLD_DINKUMWARE
+# endif
+#endif
+
+namespace boost { namespace iostreams { namespace detail {
+
+template<class Facet>
+inline std::locale add_facet(const std::locale &l, Facet * f)
+{
+ return
+ #if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1) || \
+ defined(BOOST_IOSTREMS_STLPORT_WITH_OLD_DINKUMWARE) \
+ /**/
+ std::locale(std::_Addfac(l, f));
+ #else
+ // standard compatible
+ std::locale(l, f);
+ #endif
+}
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_ADD_FACET_HPP_INCLUDED
diff --git a/boost/boost/iostreams/detail/bool_trait_def.hpp b/boost/boost/iostreams/detail/bool_trait_def.hpp
new file mode 100644
index 00000000000..625233a2214
--- /dev/null
+++ b/boost/boost/iostreams/detail/bool_trait_def.hpp
@@ -0,0 +1,48 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_BOOL_TRAIT_DEF_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_BOOL_TRAIT_DEF_HPP_INCLUDED
+
+#include <boost/config.hpp> // BOOST_STATIC_CONSTANT.
+#include <boost/iostreams/detail/template_params.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/type_traits/detail/yes_no_type.hpp>
+
+//
+// Macro name: BOOST_IOSTREAMS_BOOL_TRAIT_DEF
+// Description: Used to generate the traits classes is_istream, is_ostream,
+// etc.
+//
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
+# define BOOST_IOSTREAMS_TRAIT_NAMESPACE(trait)
+#else
+# define BOOST_IOSTREAMS_TRAIT_NAMESPACE(trait) BOOST_PP_CAT(trait, _impl_)::
+#endif
+#define BOOST_IOSTREAMS_BOOL_TRAIT_DEF(trait, type, arity) \
+ namespace BOOST_PP_CAT(trait, _impl_) { \
+ BOOST_IOSTREAMS_TEMPLATE_PARAMS(arity, T) \
+ type_traits::yes_type helper \
+ (const volatile type BOOST_IOSTREAMS_TEMPLATE_ARGS(arity, T)*); \
+ type_traits::no_type helper(...); \
+ template<typename T> \
+ struct impl { \
+ BOOST_STATIC_CONSTANT(bool, value = \
+ (sizeof(BOOST_IOSTREAMS_TRAIT_NAMESPACE(trait) \
+ helper(static_cast<T*>(0))) == \
+ sizeof(type_traits::yes_type))); \
+ }; \
+ } \
+ template<typename T> \
+ struct trait \
+ : mpl::bool_<BOOST_PP_CAT(trait, _impl_)::impl<T>::value> \
+ { BOOST_MPL_AUX_LAMBDA_SUPPORT(1, trait, (T)) }; \
+ /**/
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_BOOL_TRAIT_DEF_HPP_INCLUDED
diff --git a/boost/boost/iostreams/detail/broken_overload_resolution/forward.hpp b/boost/boost/iostreams/detail/broken_overload_resolution/forward.hpp
new file mode 100644
index 00000000000..b6b7bbd9e30
--- /dev/null
+++ b/boost/boost/iostreams/detail/broken_overload_resolution/forward.hpp
@@ -0,0 +1,30 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_BROKEN_OVERLOAD_RESOLUTION_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_BROKEN_OVERLOAD_RESOLUTION_HPP_INCLUDED
+
+#include <boost/config.hpp> // BOOST_STATIC_CONSANT.
+#include <boost/mpl/bool.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace iostreams { namespace detail {
+
+template<typename Device, typename U>
+struct forward_impl {
+ BOOST_STATIC_CONSTANT(bool, value =
+ ( !is_same< U, Device >::value &&
+ !is_same< U, reference_wrapper<Device> >::value ));
+};
+
+template<typename Device, typename U>
+struct forward
+ : mpl::bool_<forward_impl<Device, U>::value>
+ { };
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_BROKEN_OVERLOAD_RESOLUTION_HPP_INCLUDED
diff --git a/boost/boost/iostreams/detail/broken_overload_resolution/stream.hpp b/boost/boost/iostreams/detail/broken_overload_resolution/stream.hpp
new file mode 100644
index 00000000000..f4026b53ba6
--- /dev/null
+++ b/boost/boost/iostreams/detail/broken_overload_resolution/stream.hpp
@@ -0,0 +1,179 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_BROKEN_OVERLOAD_RESOLUTION_STREAM_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_BROKEN_OVERLOAD_RESOLUTION_STREAM_HPP_INCLUDED
+
+#include <boost/iostreams/detail/broken_overload_resolution/forward.hpp>
+
+namespace boost { namespace iostreams {
+
+template< typename Device,
+ typename Tr =
+ BOOST_IOSTREAMS_CHAR_TRAITS(
+ BOOST_DEDUCED_TYPENAME char_type_of<Device>::type
+ ),
+ typename Alloc =
+ std::allocator<
+ BOOST_DEDUCED_TYPENAME char_type_of<Device>::type
+ > >
+struct stream : detail::stream_base<Device, Tr, Alloc> {
+public:
+ typedef typename char_type_of<Device>::type char_type;
+ BOOST_IOSTREAMS_STREAMBUF_TYPEDEFS(Tr)
+private:
+ typedef typename
+ detail::stream_traits<
+ Device, Tr
+ >::type stream_type;
+ typedef Device policy_type;
+public:
+ stream() { }
+ template<typename U0>
+ stream(const U0& u0)
+ {
+ open_impl(detail::forward<Device, U0>(), u0);
+ }
+ template<typename U0, typename U1>
+ stream(const U0& u0, const U1& u1)
+ {
+ open_impl(detail::forward<Device, U0>(), u0, u1);
+ }
+ template<typename U0, typename U1, typename U2>
+ stream(const U0& u0, const U1& u1, const U2& u2)
+ {
+ open_impl(detail::forward<Device, U0>(), u0, u1, u2);
+ }
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------------//
+ template<typename U0>
+ stream(U0& u0)
+ {
+ open_impl(detail::forward<Device, U0>(), u0);
+ }
+ template<typename U0, typename U1>
+ stream(U0& u0, const U1& u1)
+ {
+ open_impl(detail::forward<Device, U0>(), u0, u1);
+ }
+ template<typename U0, typename U1, typename U2>
+ stream(U0& u0, const U1& u1, const U2& u2)
+ {
+ open_impl(detail::forward<Device, U0>(), u0, u1, u2);
+ }
+#endif // !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------//
+ template<typename U0>
+ void open(const U0& u0)
+ {
+ open_impl(detail::forward<Device, U0>(), u0);
+ }
+ template<typename U0, typename U1>
+ void open(const U0& u0, const U1& u1)
+ {
+ open_impl(detail::forward<Device, U0>(), u0, u1);
+ }
+ template<typename U0, typename U1, typename U2>
+ void open(const U0& u0, const U1& u1, const U2& u2)
+ {
+ open_impl(detail::forward<Device, U0>(), u0, u1, u2);
+ }
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------------//
+ template<typename U0>
+ void open(U0& u0)
+ {
+ open_impl(detail::forward<Device, U0>(), u0);
+ }
+ template<typename U0, typename U1>
+ void open(U0& u0, const U1& u1)
+ {
+ open_impl(detail::forward<Device, U0>(), u0, u1);
+ }
+ template<typename U0, typename U1, typename U2>
+ void open(U0& u0, const U1& u1, const U2& u2)
+ {
+ open_impl(detail::forward<Device, U0>(), u0, u1, u2);
+ }
+#endif // !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------//
+ bool is_open() const { return this->member.is_open(); }
+ void close() { this->member.close(); }
+ bool auto_close() const { return this->member.auto_close(); }
+ void set_auto_close(bool close) { this->member.set_auto_close(close); }
+ bool strict_sync() { return this->member.strict_sync(); }
+ Device& operator*() { return *this->member; }
+ Device* operator->() { return &*this->member; }
+private:
+ template<typename U0>
+ void open_impl(mpl::false_, const U0& u0)
+ {
+ this->clear();
+ this->member.open(u0);
+ }
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------------//
+ template<typename U0>
+ void open_impl(mpl::false_, U0& u0)
+ {
+ this->clear();
+ this->member.open(detail::wrap(u0));
+ }
+#endif // !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------//
+ template<typename U0>
+ void open_impl(mpl::true_, const U0& u0)
+ {
+ this->clear();
+ this->member.open(Device(const_cast<U0&>(u0)));
+ }
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------------//
+ template<typename U0>
+ void open_impl(mpl::true_, U0& u0)
+ {
+ this->clear();
+ this->member.open(Device(u0));
+ }
+#endif // !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------//
+ template<typename U0, typename U1>
+ void open_impl(mpl::false_, const U0& u0, const U1& u1)
+ {
+ this->clear();
+ this->member.open(u0, u1);
+ }
+ template<typename U0, typename U1>
+ void open_impl(mpl::true_, const U0& u0, const U1& u1)
+ {
+ this->clear();
+ this->member.open(Device(const_cast<U0&>(u0), u1));
+ }
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------------//
+ template<typename U0, typename U1>
+ void open_impl(mpl::true_, U0& u0, const U1& u1)
+ {
+ this->clear();
+ this->member.open(Device(u0, u1));
+ }
+#endif // !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------//
+ template<typename U0, typename U1, typename U2>
+ void open_impl(mpl::false_, const U0& u0, const U1& u1, const U2& u2)
+ {
+ this->clear();
+ this->member.open(u0, u1, u2);
+ }
+ template<typename U0, typename U1, typename U2>
+ void open_impl(mpl::true_, const U0& u0, const U1& u1, const U2& u2)
+ {
+ this->clear();
+ this->member.open(Device(const_cast<U0&>(u0), u1, u2));
+ }
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------------//
+ template<typename U0, typename U1, typename U2>
+ void open_impl(mpl::true_, U0& u0, const U1& u1, const U2& u2)
+ {
+ this->clear();
+ this->member.open(Device(u0, u1, u2));
+ }
+#endif
+};
+
+} } // End namespaces iostreams, boost.
+
+#endif BOOST_IOSTREAMS_DETAIL_BROKEN_OVERLOAD_RESOLUTION_STREAM_HPP_INCLUDED
diff --git a/boost/boost/iostreams/detail/broken_overload_resolution/stream_buffer.hpp b/boost/boost/iostreams/detail/broken_overload_resolution/stream_buffer.hpp
new file mode 100644
index 00000000000..70934ebc505
--- /dev/null
+++ b/boost/boost/iostreams/detail/broken_overload_resolution/stream_buffer.hpp
@@ -0,0 +1,183 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_BROKEN_OVERLOAD_RESOLUTION_STREAM_BUFFER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_BROKEN_OVERLOAD_RESOLUTION_STREAM_BUFFER_HPP_INCLUDED
+
+#include <boost/iostreams/detail/broken_overload_resolution/forward.hpp>
+
+namespace boost { namespace iostreams {
+
+template< typename T,
+ typename Tr =
+ BOOST_IOSTREAMS_CHAR_TRAITS(
+ BOOST_DEDUCED_TYPENAME char_type_of<T>::type
+ ),
+ typename Alloc =
+ std::allocator<
+ BOOST_DEDUCED_TYPENAME char_type_of<T>::type
+ >,
+ typename Mode = BOOST_DEDUCED_TYPENAME mode_of<T>::type >
+class stream_buffer
+ : public detail::stream_buffer_traits<T, Tr, Alloc, Mode>::type
+{
+private:
+ BOOST_STATIC_ASSERT((
+ is_convertible<
+ BOOST_DEDUCED_TYPENAME iostreams::category_of<T>::type, Mode
+ >::value
+ ));
+ typedef typename
+ detail::stream_buffer_traits<
+ T, Tr, Alloc, Mode
+ >::type base_type;
+ typedef T policy_type;
+public:
+ typedef typename char_type_of<T>::type char_type;
+ BOOST_IOSTREAMS_STREAMBUF_TYPEDEFS(Tr)
+ stream_buffer() { }
+ ~stream_buffer()
+ {
+ try {
+ if (this->is_open() && this->auto_close())
+ this->close();
+ } catch (std::exception&) { }
+ }
+ template<typename U0>
+ stream_buffer(const U0& u0)
+ {
+ open_impl(detail::forward<T, U0>(), u0);
+ }
+ template<typename U0, typename U1>
+ stream_buffer(const U0& u0, const U1& u1)
+ {
+ open_impl(detail::forward<T, U0>(), u0, u1);
+ }
+ template<typename U0, typename U1, typename U2>
+ stream_buffer(const U0& u0, const U1& u1, const U2& u2)
+ {
+ open_impl(detail::forward<T, U0>(), u0, u1, u2);
+ }
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------------//
+ template<typename U0>
+ stream_buffer(U0& u0)
+ {
+ open_impl(detail::forward<T, U0>(), u0);
+ }
+ template<typename U0, typename U1>
+ stream_buffer(U0& u0, const U1& u1)
+ {
+ open_impl(detail::forward<T, U0>(), u0, u1);
+ }
+ template<typename U0, typename U1, typename U2>
+ stream_buffer(U0& u0, const U1& u1, const U2& u2)
+ {
+ open_impl(detail::forward<T, U0>(), u0, u1, u2);
+ }
+#endif // !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------//
+ template<typename U0>
+ void open(const U0& u0)
+ {
+ open_impl(detail::forward<T, U0>(), u0);
+ }
+ template<typename U0, typename U1>
+ void open(const U0& u0, const U1& u1)
+ {
+ open_impl(detail::forward<T, U0>(), u0, u1);
+ }
+ template<typename U0, typename U1, typename U2>
+ void open(const U0& u0, const U1& u1, const U2& u2)
+ {
+ open_impl(detail::forward<T, U0>(), u0, u1, u2);
+ }
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------------//
+ template<typename U0>
+ void open(U0& u0)
+ {
+ open_impl(detail::forward<T, U0>(), u0);
+ }
+ template<typename U0, typename U1>
+ void open(U0& u0, const U1& u1)
+ {
+ open_impl(detail::forward<T, U0>(), u0, u1);
+ }
+ template<typename U0, typename U1, typename U2>
+ void open(U0& u0, const U1& u1, const U2& u2)
+ {
+ open_impl(detail::forward<T, U0>(), u0, u1, u2);
+ }
+#endif // !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------//
+ T& operator*() { return *this->component(); }
+ T* operator->() { return this->component(); }
+private:
+ template<typename U0>
+ void open_impl(mpl::false_, const U0& u0)
+ {
+ base_type::open(const_cast<U0&>(u0), -1, -1);
+ }
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------------//
+ template<typename U0>
+ void open_impl(mpl::false_, U0& u0)
+ {
+ base_type::open(detail::wrap(u0), -1, -1);
+ }
+#endif // !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------//
+ template<typename U0>
+ void open_impl(mpl::true_, const U0& u0)
+ {
+ base_type::open(T(const_cast<U0&>(u0)), -1, -1);
+ }
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------------//
+ template<typename U0>
+ void open_impl(mpl::true_, U0& u0)
+ {
+ base_type::open(T(u0), -1, -1);
+ }
+#endif // !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------//
+ template<typename U0, typename U1>
+ void open_impl(mpl::false_, const U0& u0, const U1& u1)
+ {
+ base_type::open(u0, u1, -1);
+ }
+ template<typename U0, typename U1>
+ void open_impl(mpl::true_, const U0& u0, const U1& u1)
+ {
+ base_type::open(T(const_cast<U0&>(u0), u1), -1, -1);
+ }
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------------//
+ template<typename U0, typename U1>
+ void open_impl(mpl::true_, U0& u0, const U1& u1)
+ {
+ base_type::open(T(u0, u1), -1, -1);
+ }
+#endif // !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------//
+ template<typename U0, typename U1, typename U2>
+ void open_impl(mpl::false_, const U0& u0, const U1& u1, const U2& u2)
+ {
+ base_type::open(u0, u1, u2);
+ }
+ template<typename U0, typename U1, typename U2>
+ void open_impl(mpl::true_, const U0& u0, const U1& u1, const U2& u2)
+ {
+ base_type::open(T(const_cast<U0&>(u0), u1, u2), -1, -1);
+ }
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------------//
+ template<typename U0, typename U1, typename U2>
+ void open_impl(mpl::true_, U0& u0, const U1& u1, const U2& u2)
+ {
+ base_type::open(T(u0, u1, u2), -1, -1);
+ }
+#endif // !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------//
+ void check_open()
+ {
+ if (this->is_open())
+ throw BOOST_IOSTREAMS_FAILURE("already open");
+ }
+};
+
+} } // End namespaces iostreams, boost.
+
+#endif // BOOST_IOSTREAMS_DETAIL_BROKEN_OVERLOAD_RESOLUTION_STREAM_BUFFER_HPP_INCLUDED
diff --git a/boost/boost/iostreams/detail/buffer.hpp b/boost/boost/iostreams/detail/buffer.hpp
new file mode 100644
index 00000000000..9752eed94c0
--- /dev/null
+++ b/boost/boost/iostreams/detail/buffer.hpp
@@ -0,0 +1,199 @@
+// (C) Copyright Jonathan Turkanis 2003-5.
+// 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_BUFFERS_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_BUFFERS_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <algorithm> // swap.
+#include <memory> // allocator.
+#include <boost/config.hpp> // member templates.
+#include <boost/iostreams/char_traits.hpp>
+#include <boost/iostreams/detail/ios.hpp> // streamsize.
+#include <boost/iostreams/read.hpp>
+#include <boost/iostreams/traits.hpp> // int_type_of.
+#include <boost/iostreams/checked_operations.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace iostreams { namespace detail {
+
+//----------------Buffers-----------------------------------------------------//
+
+//
+// Template name: buffer
+// Description: Character buffer.
+// Template paramters:
+// Ch - The character type.
+// Alloc - The Allocator type.
+//
+template< typename Ch,
+ typename Alloc = std::allocator<Ch> >
+class basic_buffer {
+private:
+#ifndef BOOST_NO_STD_ALLOCATOR
+ typedef typename Alloc::template rebind<Ch>::other allocator_type;
+#else
+ typedef std::allocator<Ch> allocator_type;
+#endif
+public:
+ basic_buffer();
+ basic_buffer(int buffer_size);
+ ~basic_buffer();
+ void resize(int buffer_size);
+ Ch* begin() const { return buf_; }
+ Ch* end() const { return buf_ + size_; }
+ Ch* data() const { return buf_; }
+ std::streamsize size() const { return size_; }
+ void swap(basic_buffer& rhs);
+private:
+ // Disallow copying and assignment.
+ basic_buffer(const basic_buffer&);
+ basic_buffer& operator=(const basic_buffer&);
+ Ch* buf_;
+ std::streamsize size_;
+};
+
+template<typename Ch, typename Alloc>
+void swap(basic_buffer<Ch, Alloc>& lhs, basic_buffer<Ch, Alloc>& rhs)
+{ lhs.swap(rhs); }
+
+//
+// Template name: buffer
+// Description: Character buffer with two pointers accessible via ptr() and
+// eptr().
+// Template paramters:
+// Ch - A character type.
+//
+template< typename Ch,
+ typename Alloc = std::allocator<Ch> >
+class buffer : public basic_buffer<Ch, Alloc> {
+private:
+ typedef basic_buffer<Ch, Alloc> base;
+public:
+ typedef iostreams::char_traits<Ch> traits_type;
+ using base::resize;
+ using base::data;
+ using base::size;
+ typedef Ch* const const_pointer;
+ buffer(int buffer_size);
+ Ch* & ptr() { return ptr_; }
+ const_pointer& ptr() const { return ptr_; }
+ Ch* & eptr() { return eptr_; }
+ const_pointer& eptr() const { return eptr_; }
+ void set(std::streamsize ptr, std::streamsize end);
+ void swap(buffer& rhs);
+
+ // Returns an int_type as a status code.
+ template<typename Source>
+ typename int_type_of<Source>::type fill(Source& src)
+ {
+ using namespace std;
+ streamsize keep;
+ if ((keep = static_cast<streamsize>(eptr_ - ptr_)) > 0)
+ traits_type::move(this->data(), ptr_, keep);
+ set(0, keep);
+ streamsize result =
+ iostreams::read(src, this->data() + keep, this->size() - keep);
+ if (result != -1)
+ this->set(0, keep + result);
+ //return result == this->size() - keep ?
+ // traits_type::good() :
+ // keep == -1 ?
+ // traits_type::eof() :
+ // traits_type::would_block();
+ return result == -1 ?
+ traits_type::eof() :
+ result == 0 ?
+ traits_type::would_block() :
+ traits_type::good();
+
+ }
+
+ // Returns true if one or more characters were written.
+ template<typename Sink>
+ bool flush(Sink& dest)
+ {
+ using namespace std;
+ streamsize amt = static_cast<std::streamsize>(eptr_ - ptr_);
+ streamsize result = iostreams::write_if(dest, ptr_, amt);
+ if (result < amt) {
+ traits_type::move( this->data(),
+ ptr_ + result,
+ amt - result );
+ }
+ this->set(0, amt - result);
+ return result != 0;
+ }
+private:
+ Ch *ptr_, *eptr_;
+};
+
+template<typename Ch, typename Alloc>
+void swap(buffer<Ch, Alloc>& lhs, buffer<Ch, Alloc>& rhs)
+{ lhs.swap(rhs); }
+
+//--------------Implementation of basic_buffer--------------------------------//
+
+template<typename Ch, typename Alloc>
+basic_buffer<Ch, Alloc>::basic_buffer() : buf_(0), size_(0) { }
+
+template<typename Ch, typename Alloc>
+basic_buffer<Ch, Alloc>::basic_buffer(int buffer_size)
+ : buf_(static_cast<Ch*>(allocator_type().allocate(buffer_size, 0))),
+ size_(buffer_size) // Cast for SunPro 5.3.
+ { }
+
+template<typename Ch, typename Alloc>
+inline basic_buffer<Ch, Alloc>::~basic_buffer()
+{ if (buf_) allocator_type().deallocate(buf_, size_); }
+
+template<typename Ch, typename Alloc>
+inline void basic_buffer<Ch, Alloc>::resize(int buffer_size)
+{
+ if (size_ != buffer_size) {
+ basic_buffer<Ch, Alloc> temp(buffer_size);
+ std::swap(size_, temp.size_);
+ std::swap(buf_, temp.buf_);
+ }
+}
+
+template<typename Ch, typename Alloc>
+void basic_buffer<Ch, Alloc>::swap(basic_buffer& rhs)
+{
+ std::swap(buf_, rhs.buf_);
+ std::swap(size_, rhs.size_);
+}
+
+//--------------Implementation of buffer--------------------------------------//
+
+template<typename Ch, typename Alloc>
+buffer<Ch, Alloc>::buffer(int buffer_size)
+ : basic_buffer<Ch, Alloc>(buffer_size) { }
+
+template<typename Ch, typename Alloc>
+inline void buffer<Ch, Alloc>::set(std::streamsize ptr, std::streamsize end)
+{
+ ptr_ = data() + ptr;
+ eptr_ = data() + end;
+}
+
+template<typename Ch, typename Alloc>
+inline void buffer<Ch, Alloc>::swap(buffer& rhs)
+{
+ base::swap(rhs);
+ std::swap(ptr_, rhs.ptr_);
+ std::swap(eptr_, rhs.eptr_);
+}
+
+//----------------------------------------------------------------------------//
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_BUFFERS_HPP_INCLUDED
diff --git a/boost/boost/iostreams/detail/call_traits.hpp b/boost/boost/iostreams/detail/call_traits.hpp
new file mode 100644
index 00000000000..da019f4dcec
--- /dev/null
+++ b/boost/boost/iostreams/detail/call_traits.hpp
@@ -0,0 +1,31 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_VALUE_TYPE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_VALUE_TYPE_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/iostreams/traits.hpp>
+#include <boost/mpl/if.hpp>
+
+namespace boost { namespace iostreams { namespace detail {
+
+template<typename T>
+struct param_type {
+ typedef typename mpl::if_<is_std_io<T>, T&, const T&>::type type;
+};
+
+template<typename T>
+struct value_type {
+ typedef typename mpl::if_<is_std_io<T>, T&, T>::type type;
+};
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_VALUE_TYPE_HPP_INCLUDED //-----------//
diff --git a/boost/boost/iostreams/detail/char_traits.hpp b/boost/boost/iostreams/detail/char_traits.hpp
new file mode 100644
index 00000000000..e1d3cbe28df
--- /dev/null
+++ b/boost/boost/iostreams/detail/char_traits.hpp
@@ -0,0 +1,62 @@
+// (C) Copyright Jonathan Turkanis 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.)
+
+// Provides std::char_traits for libraries without templated streams. Should not
+// be confused with <boost/iostreams/char_traits.hpp>, which defines the
+// template boost::iostreams::char_traits.
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_CHAR_TRAITS_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_CHAR_TRAITS_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <iosfwd>
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#ifdef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES
+# include <boost/config.hpp> // Make sure size_t is in std.
+# include <cstddef>
+# include <cstring>
+# include <cstdio>
+#endif
+
+#ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //--------------------------------//
+# define BOOST_IOSTREAMS_CHAR_TRAITS(ch) std::char_traits< ch >
+#else
+# define BOOST_IOSTREAMS_CHAR_TRAITS(ch) boost::iostreams::detail::char_traits
+
+namespace boost { namespace iostreams { namespace detail {
+
+struct char_traits {
+ typedef char char_type;
+ typedef int int_type;
+ typedef std::streampos pos_type;
+ typedef std::streamoff off_type;
+
+ // Note: this may not be not conforming, since it treats chars as unsigned,
+ // but is only used to test for equality.
+ static int compare(const char* lhs, const char* rhs, std::size_t n)
+ { return std::strncmp(lhs, rhs, n); }
+ static char* copy(char *dest, const char *src, std::size_t n)
+ { return static_cast<char*>(std::memcpy(dest, src, n)); }
+ static char* move(char *dest, const char *src, std::size_t n)
+ { return static_cast<char*>(std::memmove(dest, src, n)); }
+ static const char* find(const char* s, std::size_t n, const char& c)
+ { return (const char*) (const void*) std::memchr(s, c, n); }
+ static char to_char_type(const int& c) { return c; }
+ static int to_int_type(const char& c) { return c; }
+ static bool eq_int_type(const int& lhs, const int& rhs)
+ { return lhs == rhs; }
+ static int eof() { return EOF; }
+ static int not_eof(const int& c) { return c != EOF ? c : '\n'; }
+};
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifdef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //-----------------------//
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_CHAR_TRAITS_HPP_INCLUDED
diff --git a/boost/boost/iostreams/detail/closer.hpp b/boost/boost/iostreams/detail/closer.hpp
new file mode 100644
index 00000000000..2cc4b0c7268
--- /dev/null
+++ b/boost/boost/iostreams/detail/closer.hpp
@@ -0,0 +1,122 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_CLOSER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_CLOSER_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <exception> // exception.
+#include <boost/iostreams/detail/ios.hpp> // openmode.
+#include <boost/iostreams/operations.hpp> // close
+#include <boost/iostreams/traits.hpp> // is_device.
+#include <boost/mpl/if.hpp>
+
+namespace boost { namespace iostreams { namespace detail {
+
+template<typename T>
+struct closer {
+ closer(T& t) : t_(&t) { }
+ ~closer() { try { t_->close(); } catch (std::exception&) { } }
+ T* t_;
+};
+
+template<typename Device>
+struct external_device_closer {
+ external_device_closer(Device& dev, BOOST_IOS::openmode which)
+ : device_(&dev), which_(which),
+ dummy_(true), nothrow_(dummy_)
+ { }
+ external_device_closer(Device& dev, BOOST_IOS::openmode which, bool& nothrow)
+ : device_(&dev), which_(which),
+ dummy_(true), nothrow_(nothrow)
+ { }
+ ~external_device_closer()
+ {
+ try {
+ boost::iostreams::close(*device_, which_);
+ } catch (...) {
+ if (!nothrow_) {
+ nothrow_ = true;
+ throw;
+ }
+ }
+ }
+ Device* device_;
+ BOOST_IOS::openmode which_;
+ bool dummy_;
+ bool& nothrow_;
+};
+
+template<typename Filter, typename Device>
+struct external_filter_closer {
+ external_filter_closer(Filter& flt, Device& dev, BOOST_IOS::openmode which)
+ : filter_(flt), device_(dev), which_(which),
+ dummy_(true), nothrow_(dummy_)
+ { }
+ external_filter_closer( Filter& flt, Device& dev,
+ BOOST_IOS::openmode which, bool& nothrow )
+ : filter_(flt), device_(dev), which_(which),
+ dummy_(true), nothrow_(nothrow)
+ { }
+ ~external_filter_closer()
+ {
+ try {
+ boost::iostreams::close(filter_, device_, which_);
+ } catch (...) {
+ if (!nothrow_) {
+ nothrow_ = true;
+ throw;
+ }
+ }
+ }
+ Filter& filter_;
+ Device& device_;
+ BOOST_IOS::openmode which_;
+ bool dummy_;
+ bool& nothrow_;
+};
+
+template<typename FilterOrDevice, typename DeviceOrDummy = int>
+struct external_closer_traits {
+ typedef typename
+ mpl::if_<
+ is_device<FilterOrDevice>,
+ external_device_closer<FilterOrDevice>,
+ external_filter_closer<FilterOrDevice, DeviceOrDummy>
+ >::type type;
+};
+
+template<typename FilterOrDevice, typename DeviceOrDummy = int>
+struct external_closer
+ : external_closer_traits<FilterOrDevice, DeviceOrDummy>::type
+{
+ typedef typename
+ external_closer_traits<
+ FilterOrDevice, DeviceOrDummy
+ >::type base_type;
+ external_closer(FilterOrDevice& dev, BOOST_IOS::openmode which)
+ : base_type(dev, which)
+ { BOOST_STATIC_ASSERT(is_device<FilterOrDevice>::value); };
+ external_closer( FilterOrDevice& dev, BOOST_IOS::openmode which,
+ bool& nothrow )
+ : base_type(dev, which, nothrow)
+ { BOOST_STATIC_ASSERT(is_device<FilterOrDevice>::value); };
+ external_closer( FilterOrDevice& flt, DeviceOrDummy& dev,
+ BOOST_IOS::openmode which )
+ : base_type(flt, dev, which)
+ { BOOST_STATIC_ASSERT(is_filter<FilterOrDevice>::value); };
+ external_closer( FilterOrDevice& flt, DeviceOrDummy& dev,
+ BOOST_IOS::openmode which, bool& nothrow )
+ : base_type(flt, dev, which, nothrow)
+ { BOOST_STATIC_ASSERT(is_filter<FilterOrDevice>::value); };
+};
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_CLOSER_HPP_INCLUDED
diff --git a/boost/boost/iostreams/detail/codecvt_helper.hpp b/boost/boost/iostreams/detail/codecvt_helper.hpp
new file mode 100644
index 00000000000..b6b6c00ff10
--- /dev/null
+++ b/boost/boost/iostreams/detail/codecvt_helper.hpp
@@ -0,0 +1,237 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+// Contains the definition of the template codecvt_helper, useful for
+// defining specializations of std::codecvt where state_type != mbstate_t.
+// Compensates for the fact that some standard library implementations
+// do not derive the primiary codecvt template from locale::facet or
+// provide the correct member types and functions.
+
+// Usage:
+//
+// // In global namespace:
+// BOOST_IOSTREAMS_CODECVT_SPEC(mystate)
+//
+// // In user namespace:
+// template<typename Intern, typename Extern>
+// struct mycodecvt : codecvt_helper<Intern, Extern, State> { ... };
+//
+// // Or:
+// struct mycodecvt : codecvt_helper<wchar_t, char, State> { ... };
+//
+// Etc.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_CODECVT_HELPER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_CODECVT_HELPER_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // Put size_t in std, BOOST_MSVC, Dinkum.
+#include <boost/detail/workaround.hpp>
+#include <algorithm> // min.
+#include <cstddef> // size_t.
+#include <locale> // locale, codecvt_base, codecvt.
+#include <boost/iostreams/detail/config/codecvt.hpp>
+
+//------------------Definition of traits--------------------------------------//
+
+namespace boost { namespace iostreams { namespace detail {
+
+#if !BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1) //-----------------------//
+
+template<typename T>
+struct codecvt_intern { typedef typename T::intern_type type; };
+
+template<typename T>
+struct codecvt_extern { typedef typename T::extern_type type; };
+
+#else // #if !BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1) //--------------//
+
+template<typename T>
+struct codecvt_intern { typedef typename T::from_type type; };
+
+template<typename T>
+struct codecvt_extern { typedef typename T::to_type type; };
+
+#endif // #if !BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1) //-------------//
+
+template<typename T>
+struct codecvt_state { typedef typename T::state_type type; };
+
+} } } // End namespaces detail, iostreams, boost.
+
+//------------------Definition of codecvt_impl--------------------------------//
+
+#if defined(BOOST_IOSTREAMS_NO_PRIMARY_CODECVT_DEFINITION) || \
+ defined(BOOST_IOSTREAMS_EMPTY_PRIMARY_CODECVT_DEFINITION) || \
+ defined(BOOST_IOSTREAMS_NO_LOCALE) \
+ /**/
+
+namespace boost { namespace iostreams { namespace detail {
+
+template<typename Intern, typename Extern, typename State>
+struct codecvt_impl : std::locale::facet, std::codecvt_base {
+public:
+ typedef Intern intern_type;
+ typedef Extern extern_type;
+ typedef State state_type;
+
+ codecvt_impl(std::size_t refs = 0) : std::locale::facet(refs) { }
+
+ std::codecvt_base::result
+ in( State& state, const Extern* first1, const Extern* last1,
+ const Extern*& next1, Intern* first2, Intern* last2,
+ Intern*& next2 ) const
+ {
+ return do_in(state, first1, last1, next1, first2, last2, next2);
+ }
+
+ std::codecvt_base::result
+ out( State& state, const Intern* first1, const Intern* last1,
+ const Intern*& next1, Extern* first2, Extern* last2,
+ Extern*& next2 ) const
+ {
+ return do_out(state, first1, last1, next1, first2, last2, next2);
+ }
+
+ std::codecvt_base::result
+ unshift(State& state, Extern* first2, Extern* last2, Extern*& next2) const
+ {
+ return do_unshift(state, first2, last2, next2);
+ }
+
+ bool always_noconv() const throw() { return do_always_noconv(); }
+
+ int max_length() const throw() { return do_max_length(); }
+
+ int encoding() const throw() { return do_encoding(); }
+
+ int length( BOOST_IOSTREAMS_CODECVT_CV_QUALIFIER State& state,
+ const Extern* first1, const Extern* last1,
+ std::size_t len2 ) const throw()
+ {
+ return do_length(state, first1, last1, len2);
+ }
+protected:
+ std::codecvt_base::result
+ virtual do_in( State&, const Extern*, const Extern*, const Extern*&,
+ Intern*, Intern*, Intern*& ) const
+ {
+ return std::codecvt_base::noconv;
+ }
+
+ std::codecvt_base::result
+ virtual do_out( State&, const Intern*, const Intern*, const Intern*&,
+ Extern*, Extern*, Extern*& ) const
+ {
+ return std::codecvt_base::noconv;
+ }
+
+ std::codecvt_base::result
+ virtual do_unshift( State& state, Extern* first2, Extern* last2,
+ Extern*& next2 ) const
+ {
+ return std::codecvt_base::ok;
+ }
+
+ virtual bool do_always_noconv() const throw() { return true; }
+
+ virtual int do_max_length() const throw() { return 1; }
+
+ virtual int do_encoding() const throw() { return 1; }
+
+ virtual int do_length( BOOST_IOSTREAMS_CODECVT_CV_QUALIFIER State& state,
+ const Extern* first1, const Extern* last1,
+ std::size_t len2 ) const throw()
+ {
+ return (std::min)(static_cast<std::size_t>(last1 - first1), len2);
+ }
+};
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // no primary codecvt definition, empty definition.
+
+//------------------Definition of BOOST_IOSTREAMS_CODECVT_SPEC----------------//
+
+#if defined(BOOST_IOSTREAMS_NO_PRIMARY_CODECVT_DEFINITION) || \
+ defined(BOOST_IOSTREAMS_EMPTY_PRIMARY_CODECVT_DEFINITION) \
+ /**/
+# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+# define BOOST_IOSTREAMS_CODECVT_SPEC(state) \
+ namespace std { \
+ template<typename Intern, typename Extern> \
+ class codecvt<Intern, Extern, state> \
+ : public ::boost::iostreams::detail::codecvt_impl< \
+ Intern, Extern, state \
+ > \
+ { \
+ public: \
+ codecvt(std::size_t refs = 0) \
+ : ::boost::iostreams::detail::codecvt_impl< \
+ Intern, Extern, state \
+ >(refs) \
+ { } \
+ static std::locale::id id; \
+ }; \
+ template<typename Intern, typename Extern> \
+ std::locale::id codecvt<Intern, Extern, state>::id; \
+ } \
+ /**/
+# else
+# define BOOST_IOSTREAMS_CODECVT_SPEC(state) \
+ namespace std { \
+ template<> \
+ class codecvt<wchar_t, char, state> \
+ : public ::boost::iostreams::detail::codecvt_impl< \
+ wchar_t, char, state \
+ > \
+ { \
+ public: \
+ codecvt(std::size_t refs = 0) \
+ : ::boost::iostreams::detail::codecvt_impl< \
+ wchar_t, char, state \
+ >(refs) \
+ { } \
+ static std::locale::id id; \
+ }; \
+ template<> \
+ std::locale::id codecvt<wchar_t, char, state>::id; \
+ } \
+ /**/
+# endif
+#else
+# define BOOST_IOSTREAMS_CODECVT_SPEC(state)
+#endif // no primary codecvt definition, or empty definition.
+
+namespace boost { namespace iostreams { namespace detail {
+
+//------------------Definition of codecvt_helper------------------------------//
+
+template<typename Intern, typename Extern, typename State>
+struct codecvt_helper : std::codecvt<Intern, Extern, State> {
+ typedef Intern intern_type;
+ typedef Extern extern_type;
+ typedef State state_type;
+ codecvt_helper(std::size_t refs = 0)
+ #if !defined(BOOST_IOSTREAMS_NO_CODECVT_CTOR_FROM_SIZE_T)
+ : std::codecvt<Intern, Extern, State>(refs)
+ #else
+ : std::codecvt<Intern, Extern, State>()
+ #endif
+ { }
+#ifdef BOOST_IOSTREAMS_NO_CODECVT_MAX_LENGTH
+ int max_length() const throw() { return do_max_length(); }
+protected:
+ virtual int do_max_length() const throw() { return 1; }
+#endif
+};
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_CODECVT_HELPER_HPP_INCLUDED
diff --git a/boost/boost/iostreams/detail/codecvt_holder.hpp b/boost/boost/iostreams/detail/codecvt_holder.hpp
new file mode 100644
index 00000000000..6b4c1aa1deb
--- /dev/null
+++ b/boost/boost/iostreams/detail/codecvt_holder.hpp
@@ -0,0 +1,62 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+// Contains machinery for performing code conversion.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_CODECVT_HOLDER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_CODECVT_HOLDER_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <cwchar> // mbstate_t.
+#include <locale> // codecvt, locale.
+#include <boost/config.hpp> // HAS_MACRO_USE_FACET.
+#include <boost/iostreams/detail/config/codecvt.hpp>
+
+namespace boost { namespace iostreams { namespace detail {
+
+struct default_codecvt {
+ typedef wchar_t intern_type, from_type;
+ typedef char extern_type, to_type;
+ typedef std::mbstate_t state_type;
+};
+
+template<typename Codecvt>
+struct codecvt_holder {
+ typedef Codecvt codecvt_type;
+ const codecvt_type& get() const { return codecvt_; }
+ void imbue(const std::locale& loc) { }
+ Codecvt codecvt_;
+};
+
+template<>
+struct codecvt_holder<default_codecvt> {
+ typedef std::codecvt<wchar_t, char, std::mbstate_t> codecvt_type;
+ codecvt_holder() { reset_codecvt(); }
+ const codecvt_type& get() const { return *codecvt_; }
+ void imbue(const std::locale& loc)
+ {
+ loc_ = loc;
+ reset_codecvt();
+ }
+ void reset_codecvt()
+ {
+ using namespace std;
+ #ifndef BOOST_HAS_MACRO_USE_FACET
+ codecvt_ = & use_facet< codecvt_type >(loc_);
+ #else
+ codecvt_ = & _USE(loc_, codecvt_type);
+ #endif
+ }
+ std::locale loc_; // Prevent codecvt_ from being freed.
+ const codecvt_type* codecvt_;
+};
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_CODECVT_HOLDER_HPP_INCLUDED
diff --git a/boost/boost/iostreams/detail/config/auto_link.hpp b/boost/boost/iostreams/detail/config/auto_link.hpp
new file mode 100644
index 00000000000..5e9cff6b064
--- /dev/null
+++ b/boost/boost/iostreams/detail/config/auto_link.hpp
@@ -0,0 +1,48 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+// Adapted from <boost/config/auto_link.hpp> and from
+// http://www.boost.org/more/separate_compilation.html, by John Maddock.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_AUTO_LINK_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_AUTO_LINK_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#if defined(BOOST_EXTERNAL_LIB_NAME)
+# if defined(BOOST_MSVC) \
+ || defined(__BORLANDC__) \
+ || (defined(__MWERKS__) && defined(_WIN32) && (__MWERKS__ >= 0x3000)) \
+ || (defined(__ICL) && defined(_MSC_EXTENSIONS) && (_MSC_VER >= 1200)) \
+ /**/
+# pragma comment(lib, BOOST_EXTERNAL_LIB_NAME)
+# endif
+# undef BOOST_EXTERNAL_LIB_NAME
+#endif
+
+//------------------Enable automatic library variant selection----------------//
+
+#if !defined(BOOST_IOSTREAMS_SOURCE) && \
+ !defined(BOOST_ALL_NO_LIB) && \
+ !defined(BOOST_IOSTREAMS_NO_LIB) \
+ /**/
+
+// Set the name of our library, this will get undef'ed by auto_link.hpp
+// once it's done with it.
+# define BOOST_LIB_NAME boost_iostreams
+
+// If we're importing code from a dll, then tell auto_link.hpp about it.
+# if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_IOSTREAMS_DYN_LINK)
+# define BOOST_DYN_LINK
+# endif
+
+// And include the header that does the work.
+# include <boost/config/auto_link.hpp>
+#endif // auto-linking disabled
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_AUTO_LINK_HPP_INCLUDED
diff --git a/boost/boost/iostreams/detail/config/bzip2.hpp b/boost/boost/iostreams/detail/config/bzip2.hpp
new file mode 100644
index 00000000000..72c88177f73
--- /dev/null
+++ b/boost/boost/iostreams/detail/config/bzip2.hpp
@@ -0,0 +1,47 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+// Adapted from <boost/config/auto_link.hpp> and from
+// http://www.boost.org/more/separate_compilation.html, by John Maddock.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_BZIP2_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_CONFIG_BZIP2_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#if defined(BOOST_BZIP2_BINARY)
+# if defined(BOOST_MSVC) || \
+ defined(__BORLANDC__) || \
+ (defined(__MWERKS__) && defined(_WIN32) && (__MWERKS__ >= 0x3000)) || \
+ (defined(__ICL) && defined(_MSC_EXTENSIONS) && (_MSC_VER >= 1200)) \
+ /**/
+
+// Specify the name of the .lib file.
+# pragma comment(lib, BOOST_STRINGIZE(BOOST_BZIP2_BINARY))
+# endif
+#else
+# if !defined(BOOST_IOSTREAMS_SOURCE) && \
+ !defined(BOOST_ALL_NO_LIB) && \
+ !defined(BOOST_IOSTREAMS_NO_LIB) \
+ /**/
+
+// Set the name of our library, this will get undef'ed by auto_link.hpp
+// once it's done with it.
+# define BOOST_LIB_NAME boost_bzip2
+
+// If we're importing code from a dll, then tell auto_link.hpp about it.
+# if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_IOSTREAMS_DYN_LINK)
+# define BOOST_DYN_LINK
+# endif
+
+// And include the header that does the work.
+# include <boost/config/auto_link.hpp>
+# endif
+#endif
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_BZIP2_HPP_INCLUDED
diff --git a/boost/boost/iostreams/detail/config/codecvt.hpp b/boost/boost/iostreams/detail/config/codecvt.hpp
new file mode 100644
index 00000000000..48ffb9c012f
--- /dev/null
+++ b/boost/boost/iostreams/detail/config/codecvt.hpp
@@ -0,0 +1,76 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_CODECVT_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_CONFIG_CODECVT_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#include <cstddef>
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//------------------Support for codecvt with user-defined state types---------//
+
+#if defined(__MSL_CPP__) || defined(__LIBCOMO__) || \
+ BOOST_WORKAROUND(_STLPORT_VERSION, <= 0x450) \
+ /**/
+# define BOOST_IOSTREAMS_NO_PRIMARY_CODECVT_DEFINITION
+#endif
+
+#if defined(__GLIBCPP__) || defined(__GLIBCXX__) || \
+ BOOST_WORKAROUND(_STLPORT_VERSION, > 0x450) \
+ /**/
+# define BOOST_IOSTREAMS_EMPTY_PRIMARY_CODECVT_DEFINITION
+#endif
+
+//------------------Check for codecvt ctor taking a reference count-----------//
+
+#if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3205)) || \
+ BOOST_WORKAROUND(_STLPORT_VERSION, < 0x461) \
+ /**/
+# define BOOST_IOSTREAMS_NO_CODECVT_CTOR_FROM_SIZE_T
+#endif
+
+//------------------Normalize codecvt::length---------------------------------//
+
+#if !defined(__MSL_CPP__) && !defined(__LIBCOMO__)
+# define BOOST_IOSTREAMS_CODECVT_CV_QUALIFIER const
+#else
+# define BOOST_IOSTREAMS_CODECVT_CV_QUALIFIER
+#endif
+
+//------------------Check for codecvt::max_length-----------------------------//
+
+#if BOOST_WORKAROUND(_STLPORT_VERSION, < 0x461)
+# define BOOST_IOSTREAMS_NO_CODECVT_MAX_LENGTH
+#endif
+
+//------------------Put mbstate_t and codecvt in std--------------------------//
+
+#ifndef BOOST_IOSTREAMS_NO_LOCALE
+# include <locale>
+#endif
+
+// From Robert Ramey's version of utf8_codecvt_facet.
+namespace std {
+
+#if defined(__LIBCOMO__)
+ using ::mbstate_t;
+#elif defined(BOOST_DINKUMWARE_STDLIB) && !defined(__BORLANDC__)
+ using ::mbstate_t;
+#elif defined(__SGI_STL_PORT)
+#elif defined(BOOST_NO_STDC_NAMESPACE)
+ using ::codecvt;
+ using ::mbstate_t;
+#endif
+
+} // End namespace std.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_CODECVT_HPP_INCLUDED
diff --git a/boost/boost/iostreams/detail/config/disable_warnings.hpp b/boost/boost/iostreams/detail/config/disable_warnings.hpp
new file mode 100644
index 00000000000..a0fa05fc0ed
--- /dev/null
+++ b/boost/boost/iostreams/detail/config/disable_warnings.hpp
@@ -0,0 +1,21 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#include <boost/config.hpp> // BOOST_MSVC.
+#include <boost/detail/workaround.hpp> // BOOST_WORKAROUND.
+
+#if defined(BOOST_MSVC)
+# pragma warning(push)
+# pragma warning(disable:4224) // Parameter previously defined as type.
+# pragma warning(disable:4244) // Conversion: possible loss of data.
+#else
+# if BOOST_WORKAROUND(__BORLANDC__, < 0x600)
+# pragma warn -8008 // Condition always true/false.
+# pragma warn -8071 // Conversion may lose significant digits.
+# pragma warn -8080 // identifier declared but never used.
+# endif
+#endif
+
diff --git a/boost/boost/iostreams/detail/config/dyn_link.hpp b/boost/boost/iostreams/detail/config/dyn_link.hpp
new file mode 100644
index 00000000000..82566dfb925
--- /dev/null
+++ b/boost/boost/iostreams/detail/config/dyn_link.hpp
@@ -0,0 +1,36 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+// Adapted from http://www.boost.org/more/separate_compilation.html, by
+// John Maddock.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_DYN_LINK_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_CONFIG_DYN_LINK_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+//------------------Enable dynamic linking on windows-------------------------//
+
+#ifdef BOOST_HAS_DECLSPEC
+# if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_IOSTREAMS_DYN_LINK)
+# ifdef BOOST_IOSTREAMS_SOURCE
+# define BOOST_IOSTREAMS_DECL __declspec(dllexport)
+# else
+# define BOOST_IOSTREAMS_DECL __declspec(dllimport)
+# endif
+# endif
+#endif
+
+#ifndef BOOST_IOSTREAMS_DECL
+# define BOOST_IOSTREAMS_DECL
+#endif
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_DYN_LINK_HPP_INCLUDED
diff --git a/boost/boost/iostreams/detail/config/enable_warnings.hpp b/boost/boost/iostreams/detail/config/enable_warnings.hpp
new file mode 100644
index 00000000000..3a8d26d5ce2
--- /dev/null
+++ b/boost/boost/iostreams/detail/config/enable_warnings.hpp
@@ -0,0 +1,15 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#if defined(BOOST_MSVC)
+# pragma warning(pop)
+#else
+# if BOOST_WORKAROUND(__BORLANDC__, < 0x600)
+# pragma warn .8008 // Condition always true/false.
+# pragma warn .8071 // Conversion may lose significant digits.
+# pragma warn .8080 // identifier declared but never used.
+# endif
+#endif
diff --git a/boost/boost/iostreams/detail/config/gcc.hpp b/boost/boost/iostreams/detail/config/gcc.hpp
new file mode 100644
index 00000000000..a620b05d687
--- /dev/null
+++ b/boost/boost/iostreams/detail/config/gcc.hpp
@@ -0,0 +1,23 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+// Adapted from <boost/config/auto_link.hpp> and from
+// http://www.boost.org/more/separate_compilation.html, by John Maddock.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_GCC_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_CONFIG_GCC_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // BOOST_INTEL.
+
+#if defined(__GNUC__) && !defined(BOOST_INTEL)
+# define BOOST_IOSTREAMS_GCC (__GNUC__ * 100 + __GNUC_MINOR__)
+#endif
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_GCC_HPP_INCLUDED
diff --git a/boost/boost/iostreams/detail/config/limits.hpp b/boost/boost/iostreams/detail/config/limits.hpp
new file mode 100644
index 00000000000..f13edd76d76
--- /dev/null
+++ b/boost/boost/iostreams/detail/config/limits.hpp
@@ -0,0 +1,14 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_LIMITS_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_CONFIG_LIMITS_HPP_INCLUDED
+
+#ifndef BOOST_IOSTREAMS_MAX_FORWARDING_ARITY
+# define BOOST_IOSTREAMS_MAX_FORWARDING_ARITY 3
+#endif
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_LIMITS_HPP_INCLUDED
diff --git a/boost/boost/iostreams/detail/config/overload_resolution.hpp b/boost/boost/iostreams/detail/config/overload_resolution.hpp
new file mode 100644
index 00000000000..79467425e22
--- /dev/null
+++ b/boost/boost/iostreams/detail/config/overload_resolution.hpp
@@ -0,0 +1,31 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+// Adapted from <boost/config/auto_link.hpp> and from
+// http://www.boost.org/more/separate_compilation.html, by John Maddock.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_BROKEN_OVERLOAD_RESOLUTION_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_CONFIG_BROKEN_OVERLOAD_RESOLUTION_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // BOOST_MSVC.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/detail/config/gcc.hpp>
+
+#if !defined(BOOST_IOSTREAMS_BROKEN_OVERLOAD_RESOLUTION)
+# if BOOST_WORKAROUND(__MWERKS__, <= 0x3003) || \
+ BOOST_WORKAROUND(__BORLANDC__, < 0x600) || \
+ BOOST_WORKAROUND(BOOST_MSVC, <= 1300) || \
+ BOOST_WORKAROUND(BOOST_IOSTREAMS_GCC, <= 295) \
+ /**/
+# define BOOST_IOSTREAMS_BROKEN_OVERLOAD_RESOLUTION
+# endif
+#endif
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_BROKEN_OVERLOAD_RESOLUTION_HPP_INCLUDED
diff --git a/boost/boost/iostreams/detail/config/wide_streams.hpp b/boost/boost/iostreams/detail/config/wide_streams.hpp
new file mode 100644
index 00000000000..e30d4918d2c
--- /dev/null
+++ b/boost/boost/iostreams/detail/config/wide_streams.hpp
@@ -0,0 +1,54 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+// Adapted from http://www.boost.org/more/separate_compilation.html, by
+// John Maddock.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_WIDE_STREAMS_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_CONFIG_WIDE_STREAMS_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+#include <cstddef>
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//------------------Templated stream support----------------------------------//
+
+// From boost/dynamic_bitset.hpp; thanks to Matthias Troyer for cray patch.
+#ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES
+# if defined(__STL_CONFIG_H) && \
+ !defined (__STL_USE_NEW_IOSTREAMS) && !defined(__crayx1) \
+ /**/
+# define BOOST_IOSTREAMS_NO_STREAM_TEMPLATES
+# endif
+#endif // #ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES
+
+//------------------Wide stream support---------------------------------------//
+
+#ifndef BOOST_IOSTREAMS_NO_WIDE_STREAMS
+# if defined(BOOST_IOSTREAMS_NO_STREAM_TEMPLATES) || \
+ defined (BOOST_NO_STD_WSTREAMBUF) && \
+ ( !defined(__MSL_CPP__) || defined(_MSL_NO_WCHART_CPP_SUPPORT) ) \
+ /**/
+# define BOOST_IOSTREAMS_NO_WIDE_STREAMS
+# endif
+#endif // #ifndef BOOST_IOSTREAMS_NO_WIDE_STREAMS
+
+//------------------Locale support--------------------------------------------//
+
+#ifndef BOOST_IOSTREAMS_NO_LOCALE
+# if defined(BOOST_NO_STD_LOCALE) || \
+ defined(__CYGWIN__) && \
+ ( !defined(__MSL_CPP__) || defined(_MSL_NO_WCHART_CPP_SUPPORT) ) \
+ /**/
+# define BOOST_IOSTREAMS_NO_LOCALE
+# endif
+#endif // #ifndef BOOST_IOSTREAMS_NO_LOCALE
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_WIDE_STREAMS_HPP_INCLUDED
diff --git a/boost/boost/iostreams/detail/config/windows_posix.hpp b/boost/boost/iostreams/detail/config/windows_posix.hpp
new file mode 100644
index 00000000000..0bc094f269e
--- /dev/null
+++ b/boost/boost/iostreams/detail/config/windows_posix.hpp
@@ -0,0 +1,25 @@
+// (C) Copyright 2002, 2003 Beman Dawes Boost.Filesystem
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_WINDOWS_POSIX_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_CONFIG_WINDOWS_POSIX_HPP_INCLUDED
+
+//------------------From boost/libs/filesystem/src/path_posix_windows.cpp-----//
+
+// BOOST_IOSTREAMS_POSIX or BOOST_IOSTREAMS_WINDOWS specify which API to use.
+#if !defined( BOOST_IOSTREAMS_WINDOWS ) && !defined( BOOST_IOSTREAMS_POSIX )
+# if (defined(_WIN32) || defined(__WIN32__) || defined(WIN32)) && \
+ !defined(__CYGWIN__) \
+ /**/
+# define BOOST_IOSTREAMS_WINDOWS
+# else
+# define BOOST_IOSTREAMS_POSIX
+# endif
+#endif
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_WINDOWS_POSIX_HPP_INCLUDED
diff --git a/boost/boost/iostreams/detail/config/zlib.hpp b/boost/boost/iostreams/detail/config/zlib.hpp
new file mode 100644
index 00000000000..9f1ee26bd1c
--- /dev/null
+++ b/boost/boost/iostreams/detail/config/zlib.hpp
@@ -0,0 +1,49 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+// Adapted from <boost/config/auto_link.hpp> and from
+// http://www.boost.org/more/separate_compilation.html, by John Maddock.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_ZLIB_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_CONFIG_ZLIB_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // BOOST_STRINGIZE.
+
+#if defined(BOOST_ZLIB_BINARY)
+# if defined(BOOST_MSVC) || \
+ defined(__BORLANDC__) || \
+ (defined(__MWERKS__) && defined(_WIN32) && (__MWERKS__ >= 0x3000)) || \
+ (defined(__ICL) && defined(_MSC_EXTENSIONS) && (_MSC_VER >= 1200)) \
+ /**/
+
+// Specify the name of the .lib file.
+# pragma comment(lib, BOOST_STRINGIZE(BOOST_ZLIB_BINARY))
+# endif
+#else
+# if !defined(BOOST_IOSTREAMS_SOURCE) && \
+ !defined(BOOST_ALL_NO_LIB) && \
+ !defined(BOOST_IOSTREAMS_NO_LIB) \
+ /**/
+
+// Set the name of our library, this will get undef'ed by auto_link.hpp
+// once it's done with it.
+# define BOOST_LIB_NAME boost_zlib
+
+// If we're importing code from a dll, then tell auto_link.hpp about it.
+# if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_IOSTREAMS_DYN_LINK)
+# define BOOST_DYN_LINK
+# endif
+
+// And include the header that does the work.
+# include <boost/config/auto_link.hpp>
+# endif
+#endif
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_ZLIB_HPP_INCLUDED
diff --git a/boost/boost/iostreams/detail/counted_array.hpp b/boost/boost/iostreams/detail/counted_array.hpp
new file mode 100644
index 00000000000..4e9ce1c7f57
--- /dev/null
+++ b/boost/boost/iostreams/detail/counted_array.hpp
@@ -0,0 +1,63 @@
+// (C) Copyright Jonathan Turkanis 2005.
+// 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_COUNTED_ARRAY_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_COUNTED_ARRAY_HPP_INCLUDED
+
+#include <algorithm> // min.
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/detail/char_traits.hpp>
+#include <boost/iostreams/detail/ios.hpp> // streamsize.
+
+namespace boost { namespace iostreams { namespace detail {
+
+template<typename Ch>
+class counted_array_source {
+public:
+ typedef Ch char_type;
+ typedef source_tag category;
+ counted_array_source(const Ch* buf, std::streamsize size)
+ : buf_(buf), ptr_(0), end_(size)
+ { }
+ std::streamsize read(Ch* s, std::streamsize n)
+ {
+ std::streamsize result = (std::min)(n, end_ - ptr_);
+ BOOST_IOSTREAMS_CHAR_TRAITS(char_type)::copy
+ (s, buf_ + ptr_, result);
+ ptr_ += result;
+ return result;
+ }
+ std::streamsize count() const { return ptr_; }
+private:
+ const Ch* buf_;
+ std::streamsize ptr_, end_;
+};
+
+template<typename Ch>
+struct counted_array_sink {
+public:
+ typedef Ch char_type;
+ typedef sink_tag category;
+ counted_array_sink(Ch* buf, std::streamsize size)
+ : buf_(buf), ptr_(0), end_(size)
+ { }
+ std::streamsize write(const Ch* s, std::streamsize n)
+ {
+ std::streamsize result = (std::min)(n, end_ - ptr_);
+ BOOST_IOSTREAMS_CHAR_TRAITS(char_type)::copy
+ (buf_ + ptr_, s, result);
+ ptr_ += result;
+ return result;
+ }
+ std::streamsize count() const { return ptr_; }
+private:
+ Ch* buf_;
+ std::streamsize ptr_, end_;
+};
+
+} } } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_COUNTED_ARRAY_HPP_INCLUDED
diff --git a/boost/boost/iostreams/detail/default_arg.hpp b/boost/boost/iostreams/detail/default_arg.hpp
new file mode 100644
index 00000000000..740943782d7
--- /dev/null
+++ b/boost/boost/iostreams/detail/default_arg.hpp
@@ -0,0 +1,24 @@
+// (C) Copyright Jonathan Turkanis 2005.
+// 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_DEFAULT_ARG_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_DEFAULT_ARG_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+# include <boost/mpl/identity.hpp>
+# define BOOST_IOSTREAMS_DEFAULT_ARG(arg) mpl::identity< arg >::type
+#else
+# define BOOST_IOSTREAMS_DEFAULT_ARG(arg) arg
+#endif
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_DEFAULT_ARG_HPP_INCLUDED
diff --git a/boost/boost/iostreams/detail/dispatch.hpp b/boost/boost/iostreams/detail/dispatch.hpp
new file mode 100644
index 00000000000..af92092608d
--- /dev/null
+++ b/boost/boost/iostreams/detail/dispatch.hpp
@@ -0,0 +1,40 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_DISPATCH_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_DISPATCH_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // BOOST_DEDUCED_TYPENAME.
+#include <boost/iostreams/detail/select.hpp>
+#include <boost/iostreams/traits.hpp> // category_of.
+#include <boost/mpl/void.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+namespace boost { namespace iostreams {namespace detail {
+
+template< typename T, typename Tag1, typename Tag2,
+ typename Tag3 = mpl::void_, typename Tag4 = mpl::void_,
+ typename Tag5 = mpl::void_, typename Tag6 = mpl::void_,
+ typename Category =
+ BOOST_DEDUCED_TYPENAME category_of<T>::type >
+struct dispatch
+ : iostreams::select< // Disambiguation for Tru64.
+ is_convertible<Category, Tag1>, Tag1,
+ is_convertible<Category, Tag2>, Tag2,
+ is_convertible<Category, Tag3>, Tag3,
+ is_convertible<Category, Tag4>, Tag4,
+ is_convertible<Category, Tag5>, Tag5,
+ is_convertible<Category, Tag6>, Tag6
+ >
+ { };
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_DISPATCH_HPP_INCLUDED
diff --git a/boost/boost/iostreams/detail/double_object.hpp b/boost/boost/iostreams/detail/double_object.hpp
new file mode 100644
index 00000000000..0c22bfea809
--- /dev/null
+++ b/boost/boost/iostreams/detail/double_object.hpp
@@ -0,0 +1,113 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+// Contains the definition of the class template
+// boost::iostreams::detail::double_object, which is similar to compressed pair
+// except that both members of the pair have the same type, and
+// compression occurs only if requested using a boolean template
+// parameter.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_DOUBLE_OBJECT_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_DOUBLE_OBJECT_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <algorithm> // swap.
+#include <boost/detail/workaround.hpp>
+#include <boost/mpl/if.hpp>
+#if BOOST_WORKAROUND(__MWERKS__, > 0x3003)
+# include <msl_utility>
+#else
+# include <boost/call_traits.hpp>
+#endif
+
+namespace boost { namespace iostreams { namespace detail {
+
+template<typename T>
+class single_object_holder {
+public:
+#if BOOST_WORKAROUND(__MWERKS__, > 0x3003)
+ typedef Metrowerks::call_traits<T> traits_type;
+#else
+ typedef boost::call_traits<T> traits_type;
+#endif
+ typedef typename traits_type::param_type param_type;
+ typedef typename traits_type::reference reference;
+ typedef typename traits_type::const_reference const_reference;
+ single_object_holder() { }
+ single_object_holder(param_type t) : first_(t) { }
+ reference first() { return first_; }
+ const_reference first() const { return first_; }
+ reference second() { return first_; }
+ const_reference second() const { return first_; }
+ void swap(single_object_holder& o)
+ { std::swap(first_, o.first_); }
+private:
+ T first_;
+};
+
+template<typename T>
+struct double_object_holder {
+public:
+#if BOOST_WORKAROUND(__MWERKS__, > 0x3003)
+ typedef Metrowerks::call_traits<T> traits_type;
+#else
+ typedef boost::call_traits<T> traits_type;
+#endif
+ typedef typename traits_type::param_type param_type;
+ typedef typename traits_type::reference reference;
+ typedef typename traits_type::const_reference const_reference;
+ double_object_holder() { }
+ double_object_holder(param_type t1, param_type t2)
+ : first_(t1), second_(t2) { }
+ reference first() { return first_; }
+ const_reference first() const { return first_; }
+ reference second() { return second_; }
+ const_reference second() const { return second_; }
+ void swap(double_object_holder& d)
+ {
+ std::swap(first_, d.first_);
+ std::swap(second_, d.second_);
+ }
+private:
+ T first_, second_;
+};
+
+template<typename T, typename IsDouble>
+class double_object
+ : public mpl::if_<
+ IsDouble,
+ double_object_holder<T>,
+ single_object_holder<T>
+ >::type
+{
+private:
+ typedef typename
+ mpl::if_<
+ IsDouble,
+ double_object_holder<T>,
+ single_object_holder<T>
+ >::type base_type;
+public:
+#if BOOST_WORKAROUND(__MWERKS__, > 0x3003)
+ typedef Metrowerks::call_traits<T> traits_type;
+#else
+ typedef boost::call_traits<T> traits_type;
+#endif
+ typedef typename traits_type::param_type param_type;
+ typedef typename traits_type::reference reference;
+ typedef typename traits_type::const_reference const_reference;
+ double_object() : base_type() {}
+ double_object(param_type t1, param_type t2)
+ : base_type(t1, t2) { }
+ bool is_double() const { return IsDouble::value; }
+};
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_DOUBLE_OBJECT_HPP_INCLUDED
diff --git a/boost/boost/iostreams/detail/enable_if_stream.hpp b/boost/boost/iostreams/detail/enable_if_stream.hpp
new file mode 100644
index 00000000000..602c3c86d73
--- /dev/null
+++ b/boost/boost/iostreams/detail/enable_if_stream.hpp
@@ -0,0 +1,30 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_ENABLE_IF_STREAM_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_ENABLE_IF_STREAM_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // BOOST_NO_SFINAE.
+#include <boost/utility/enable_if.hpp>
+#include <boost/iostreams/traits_fwd.hpp> // is_std_io.
+
+#ifndef BOOST_NO_SFINAE
+# define BOOST_IOSTREAMS_ENABLE_IF_STREAM(T) \
+ , typename boost::enable_if< boost::iostreams::is_std_io<T> >::type* = 0 \
+ /**/
+# define BOOST_IOSTREAMS_DISABLE_IF_STREAM(T) \
+ , typename boost::disable_if< boost::iostreams::is_std_io<T> >::type* = 0 \
+ /**/
+#else
+# define BOOST_IOSTREAMS_ENABLE_IF_STREAM(T)
+# define BOOST_IOSTREAMS_DISABLE_IF_STREAM(T)
+#endif
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_ENABLE_IF_STREAM_HPP_INCLUDED
diff --git a/boost/boost/iostreams/detail/error.hpp b/boost/boost/iostreams/detail/error.hpp
new file mode 100644
index 00000000000..427eb26d56b
--- /dev/null
+++ b/boost/boost/iostreams/detail/error.hpp
@@ -0,0 +1,44 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_ERROR_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_ERROR_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/iostreams/detail/ios.hpp> // failure.
+
+namespace boost { namespace iostreams { namespace detail {
+
+inline BOOST_IOSTREAMS_FAILURE cant_read()
+{ return BOOST_IOSTREAMS_FAILURE("no read access"); }
+
+inline BOOST_IOSTREAMS_FAILURE cant_write()
+{ return BOOST_IOSTREAMS_FAILURE("no write access"); }
+
+inline BOOST_IOSTREAMS_FAILURE cant_seek()
+{ return BOOST_IOSTREAMS_FAILURE("no random access"); }
+
+inline BOOST_IOSTREAMS_FAILURE bad_read()
+{ return BOOST_IOSTREAMS_FAILURE("bad read"); }
+
+inline BOOST_IOSTREAMS_FAILURE bad_putback()
+{ return BOOST_IOSTREAMS_FAILURE("putback buffer full"); }
+
+inline BOOST_IOSTREAMS_FAILURE bad_write()
+{ return BOOST_IOSTREAMS_FAILURE("bad write"); }
+
+inline BOOST_IOSTREAMS_FAILURE write_area_exhausted()
+{ return BOOST_IOSTREAMS_FAILURE("write area exhausted"); }
+
+inline BOOST_IOSTREAMS_FAILURE bad_seek()
+{ return BOOST_IOSTREAMS_FAILURE("bad seek"); }
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_ERROR_HPP_INCLUDED
diff --git a/boost/boost/iostreams/detail/forward.hpp b/boost/boost/iostreams/detail/forward.hpp
new file mode 100644
index 00000000000..de62f43406b
--- /dev/null
+++ b/boost/boost/iostreams/detail/forward.hpp
@@ -0,0 +1,101 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_FORWARD_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_FORWARD_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // BOOST_MSVC
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/detail/config/limits.hpp>
+#include <boost/iostreams/detail/push_params.hpp>
+#include <boost/preprocessor/arithmetic/dec.hpp>
+#include <boost/preprocessor/arithmetic/inc.hpp>
+#include <boost/preprocessor/punctuation/comma_if.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+#include <boost/preprocessor/tuple/elem.hpp>
+
+//------Macros for defining forwarding constructors and open overloads--------//
+
+//
+// Macro: BOOST_IOSTREAMS_DEFINE_FORWARDING_FUNCTIONS(mode, name, helper).
+// Description: Defines constructors and overloads of 'open' which construct
+// a device using the given argument list and pass it to 'open_impl'.
+// Assumes that 'policy_type' is an alias for the device type.
+// Not supported on Intel 7.1 and VC6.5.
+//
+#define BOOST_IOSTREAMS_FORWARD(class, impl, policy, params, args) \
+ class(const policy& t params()) \
+ { this->impl(::boost::iostreams::detail::wrap(t) args()); } \
+ class(policy& t params()) \
+ { this->impl(::boost::iostreams::detail::wrap(t) args()); } \
+ class(const ::boost::reference_wrapper<policy>& ref params()) \
+ { this->impl(ref args()); } \
+ void open(const policy& t params()) \
+ { this->impl(::boost::iostreams::detail::wrap(t) args()); } \
+ void open(policy& t params()) \
+ { this->impl(::boost::iostreams::detail::wrap(t) args()); } \
+ void open(const ::boost::reference_wrapper<policy>& ref params()) \
+ { this->impl(ref args()); } \
+ BOOST_PP_REPEAT_FROM_TO( \
+ 1, BOOST_PP_INC(BOOST_IOSTREAMS_MAX_FORWARDING_ARITY), \
+ BOOST_IOSTREAMS_FORWARDING_CTOR, (class, impl, policy) \
+ ) \
+ BOOST_PP_REPEAT_FROM_TO( \
+ 1, BOOST_PP_INC(BOOST_IOSTREAMS_MAX_FORWARDING_ARITY), \
+ BOOST_IOSTREAMS_FORWARDING_FN, (class, impl, policy) \
+ ) \
+ /**/
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+# define BOOST_IOSTREAMS_FORWARDING_CTOR_I(z, n, tuple) \
+ template< typename U100 BOOST_PP_COMMA_IF(BOOST_PP_DEC(n)) \
+ BOOST_PP_ENUM_PARAMS_Z(z, BOOST_PP_DEC(n), typename U) > \
+ BOOST_PP_TUPLE_ELEM(3, 0, tuple) \
+ ( U100& u100 BOOST_PP_COMMA_IF(BOOST_PP_DEC(n)) \
+ BOOST_PP_ENUM_BINARY_PARAMS_Z(z, BOOST_PP_DEC(n), const U, &u)) \
+ { this->BOOST_PP_TUPLE_ELEM(3, 1, tuple) \
+ ( BOOST_PP_TUPLE_ELEM(3, 2, tuple) \
+ ( u100 BOOST_PP_COMMA_IF(BOOST_PP_DEC(n)) \
+ BOOST_PP_ENUM_PARAMS_Z(z, BOOST_PP_DEC(n), u)) ); } \
+ /**/
+# define BOOST_IOSTREAMS_FORWARDING_FN_I(z, n, tuple) \
+ template< typename U100 BOOST_PP_COMMA_IF(BOOST_PP_DEC(n)) \
+ BOOST_PP_ENUM_PARAMS_Z(z, BOOST_PP_DEC(n), typename U) > \
+ void open \
+ ( U100& u100 BOOST_PP_COMMA_IF(BOOST_PP_DEC(n)) \
+ BOOST_PP_ENUM_BINARY_PARAMS_Z(z, BOOST_PP_DEC(n), const U, &u)) \
+ { this->BOOST_PP_TUPLE_ELEM(3, 1, tuple) \
+ ( u100 BOOST_PP_COMMA_IF(BOOST_PP_DEC(n)) \
+ BOOST_PP_ENUM_PARAMS_Z(z, BOOST_PP_DEC(n), u) ); } \
+ /**/
+#else
+# define BOOST_IOSTREAMS_FORWARDING_CTOR_I(z, n, tuple)
+# define BOOST_IOSTREAMS_FORWARDING_FN_I(z, n, tuple)
+#endif
+#define BOOST_IOSTREAMS_FORWARDING_CTOR(z, n, tuple) \
+ template<BOOST_PP_ENUM_PARAMS_Z(z, n, typename U)> \
+ BOOST_PP_TUPLE_ELEM(3, 0, tuple) \
+ (BOOST_PP_ENUM_BINARY_PARAMS_Z(z, n, const U, &u)) \
+ { this->BOOST_PP_TUPLE_ELEM(3, 1, tuple) \
+ ( BOOST_PP_TUPLE_ELEM(3, 2, tuple) \
+ (BOOST_PP_ENUM_PARAMS_Z(z, n, u)) ); } \
+ BOOST_IOSTREAMS_FORWARDING_CTOR_I(z, n, tuple) \
+ /**/
+#define BOOST_IOSTREAMS_FORWARDING_FN(z, n, tuple) \
+ template<BOOST_PP_ENUM_PARAMS_Z(z, n, typename U)> \
+ void open(BOOST_PP_ENUM_BINARY_PARAMS_Z(z, n, const U, &u)) \
+ { this->BOOST_PP_TUPLE_ELEM(3, 1, tuple) \
+ ( BOOST_PP_TUPLE_ELEM(3, 2, tuple) \
+ (BOOST_PP_ENUM_PARAMS_Z(z, n, u)) ); } \
+ BOOST_IOSTREAMS_FORWARDING_FN_I(z, n, tuple) \
+ /**/
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_FORWARD_HPP_INCLUDED
diff --git a/boost/boost/iostreams/detail/fstream.hpp b/boost/boost/iostreams/detail/fstream.hpp
new file mode 100644
index 00000000000..4476143d393
--- /dev/null
+++ b/boost/boost/iostreams/detail/fstream.hpp
@@ -0,0 +1,32 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_FSTREAM_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_FSTREAM_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES
+# include <fstream>
+#else
+# include <fstream.h>
+#endif
+
+#ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES
+# define BOOST_IOSTREAMS_BASIC_IFSTREAM(Ch, Tr) std::basic_ifstream<Ch, Tr>
+# define BOOST_IOSTREAMS_BASIC_OFSTREAM(Ch, Tr) std::basic_ofstream<Ch, Tr>
+# define BOOST_IOSTREAMS_BASIC_FSTREAM(Ch, Tr) std::basic_fstream<Ch, Tr>
+# define BOOST_IOSTREAMS_BASIC_FILEBUF(Ch) std::basic_filebuf<Ch>
+#else
+# define BOOST_IOSTREAMS_BASIC_IFSTREAM(Ch, Tr) std::ifstream
+# define BOOST_IOSTREAMS_BASIC_OFSTREAM(Ch, Tr) std::ofstream
+# define BOOST_IOSTREAMS_BASIC_FILEBUF(Ch) std::filebuf
+#endif
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_FSTREAM_HPP_INCLUDED
diff --git a/boost/boost/iostreams/detail/ios.hpp b/boost/boost/iostreams/detail/ios.hpp
new file mode 100644
index 00000000000..34667b2f7dd
--- /dev/null
+++ b/boost/boost/iostreams/detail/ios.hpp
@@ -0,0 +1,65 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_IOS_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_IOS_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // BOOST_MSVC.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES
+# if !BOOST_WORKAROUND(__MWERKS__, <= 0x3003)
+# include <ios>
+# else
+# include <istream>
+# include <ostream>
+# endif
+#else
+# include <exception>
+# include <iosfwd>
+#endif
+
+namespace boost { namespace iostreams { namespace detail {
+
+#ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //--------------------------------//
+# define BOOST_IOSTREAMS_BASIC_IOS(ch, tr) std::basic_ios< ch, tr >
+# if !BOOST_WORKAROUND(__MWERKS__, <= 0x3003) && \
+ !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && \
+ !BOOST_WORKAROUND(BOOST_MSVC, < 1300) \
+ /**/
+
+#define BOOST_IOS std::ios
+#define BOOST_IOSTREAMS_FAILURE std::ios::failure
+
+# else
+
+#define BOOST_IOS std::ios_base
+#define BOOST_IOSTREAMS_FAILURE std::ios_base::failure
+
+# endif
+#else // #ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //-----------------------//
+
+#define BOOST_IOS std::ios
+#define BOOST_IOSTREAMS_BASIC_IOS(ch, tr) std::ios
+#define BOOST_IOSTREAMS_FAILURE boost::iostreams::detail::failure
+
+class failure : std::exception {
+public:
+ explicit failure(const std::string& what_arg) : what_(what_arg) { }
+ const char* what() const { return what_.c_str(); }
+private:
+ std::string what_;
+};
+
+#endif // #ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //----------------------//
+
+} } } // End namespace failure, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_IOS_HPP_INCLUDED
diff --git a/boost/boost/iostreams/detail/iostream.hpp b/boost/boost/iostreams/detail/iostream.hpp
new file mode 100644
index 00000000000..6482839f1f1
--- /dev/null
+++ b/boost/boost/iostreams/detail/iostream.hpp
@@ -0,0 +1,33 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_IOSTREAM_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_IOSTREAM_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES
+# include <istream>
+# include <ostream>
+#else
+# include <iostream.h>
+#endif
+
+#ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES
+# define BOOST_IOSTREAMS_BASIC_ISTREAM(ch, tr) std::basic_istream< ch, tr >
+# define BOOST_IOSTREAMS_BASIC_OSTREAM(ch, tr) std::basic_ostream< ch, tr >
+# define BOOST_IOSTREAMS_BASIC_IOSTREAM(ch, tr) std::basic_iostream< ch, tr >
+#else
+# define BOOST_IOSTREAMS_BASIC_STREAMBUF(ch, tr) std::streambuf
+# define BOOST_IOSTREAMS_BASIC_ISTREAM(ch, tr) std::istream
+# define BOOST_IOSTREAMS_BASIC_OSTREAM(ch, tr) std::ostream
+# define BOOST_IOSTREAMS_BASIC_IOSTREAM(ch, tr) std::iostream
+#endif
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_IOSTREAM_HPP_INCLUDED
diff --git a/boost/boost/iostreams/detail/is_dereferenceable.hpp b/boost/boost/iostreams/detail/is_dereferenceable.hpp
new file mode 100644
index 00000000000..ff61e09a788
--- /dev/null
+++ b/boost/boost/iostreams/detail/is_dereferenceable.hpp
@@ -0,0 +1,84 @@
+// (C) Copyright David Abrahams 2004.
+// (C) Copyright Jonathan Turkanis 2005.
+// 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_IS_DEREFERENCEABLE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_IS_DEREFERENCEABLE_HPP_INCLUDED
+
+# include <boost/type_traits/detail/bool_trait_def.hpp>
+# include <boost/type_traits/detail/template_arity_spec.hpp>
+# include <boost/type_traits/remove_cv.hpp>
+# include <boost/mpl/aux_/lambda_support.hpp>
+# include <boost/mpl/bool.hpp>
+# include <boost/detail/workaround.hpp>
+
+namespace boost { namespace iostreams { namespace detail {
+
+// is_dereferenceable<T> metafunction
+//
+// Requires: Given x of type T&, if the expression *x is well-formed
+// it must have complete type; otherwise, it must neither be ambiguous
+// nor violate access.
+
+// This namespace ensures that ADL doesn't mess things up.
+namespace is_dereferenceable_
+{
+ // a type returned from operator* when no increment is found in the
+ // type's own namespace
+ struct tag {};
+
+ // any soaks up implicit conversions and makes the following
+ // operator* less-preferred than any other such operator that
+ // might be found via ADL.
+ struct any { template <class T> any(T const&); };
+
+ // This is a last-resort operator* for when none other is found
+ tag operator*(any const&);
+
+# if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3202)) \
+ || BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+# define BOOST_comma(a,b) (a)
+# else
+ // In case an operator++ is found that returns void, we'll use ++x,0
+ tag operator,(tag,int);
+# define BOOST_comma(a,b) (a,b)
+# endif
+
+ // two check overloads help us identify which operator++ was picked
+ char (& check(tag) )[2];
+
+ template <class T>
+ char check(T const&);
+
+ template <class T>
+ struct impl
+ {
+ static typename boost::remove_cv<T>::type& x;
+
+ BOOST_STATIC_CONSTANT(
+ bool
+ , value = sizeof(is_dereferenceable_::check(BOOST_comma(*x,0))) == 1
+ );
+ };
+}
+
+# undef BOOST_comma
+
+template<typename T>
+struct is_dereferenceable
+ BOOST_TT_AUX_BOOL_C_BASE(is_dereferenceable_::impl<T>::value)
+{
+ BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(is_dereferenceable_::impl<T>::value)
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_dereferenceable,(T))
+};
+
+} }
+
+BOOST_TT_AUX_TEMPLATE_ARITY_SPEC(1, ::boost::iostreams::detail::is_dereferenceable)
+
+} // End namespaces detail, iostreams, boost.
+
+#endif // BOOST_IOSTREAMS_DETAIL_IS_DEREFERENCEABLE_HPP_INCLUDED
diff --git a/boost/boost/iostreams/detail/is_iterator_range.hpp b/boost/boost/iostreams/detail/is_iterator_range.hpp
new file mode 100644
index 00000000000..7da0822308d
--- /dev/null
+++ b/boost/boost/iostreams/detail/is_iterator_range.hpp
@@ -0,0 +1,26 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_IS_ITERATOR_RANGE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_IS_ITERATOR_RANGE_HPP_INCLUDED
+
+#include <boost/iostreams/detail/bool_trait_def.hpp>
+
+namespace boost {
+
+// We avoid dependence on Boost.Range by using a forward declaration.
+template<typename Iterator>
+class iterator_range;
+
+namespace iostreams {
+
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF(is_iterator_range, boost::iterator_range, 1)
+
+} // End namespace iostreams.
+
+} // End namespace boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_IS_ITERATOR_RANGE_HPP_INCLUDED
diff --git a/boost/boost/iostreams/detail/newline.hpp b/boost/boost/iostreams/detail/newline.hpp
new file mode 100644
index 00000000000..27fe4746172
--- /dev/null
+++ b/boost/boost/iostreams/detail/newline.hpp
@@ -0,0 +1,31 @@
+// (C) Copyright Jonathan Turkanis 2005.
+// 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_NEWLINE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_NEWLINE_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+namespace boost { namespace iostreams { namespace detail {
+
+template<typename Ch>
+struct newline;
+
+template<>
+struct newline<char> {
+ BOOST_STATIC_CONSTANT(char, value = '\n');
+};
+
+template<>
+struct newline<wchar_t> {
+ BOOST_STATIC_CONSTANT(wchar_t, value = L'\n');
+};
+
+} } } // End namespaces detaill, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_NEWLINE_HPP_INCLUDED
diff --git a/boost/boost/iostreams/detail/optional.hpp b/boost/boost/iostreams/detail/optional.hpp
new file mode 100644
index 00000000000..901c080d758
--- /dev/null
+++ b/boost/boost/iostreams/detail/optional.hpp
@@ -0,0 +1,113 @@
+// (C) Copyright Jonathan Turkanis 2005.
+// 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/iostreams for documentation.
+
+// Recent changes to Boost.Optional involving assigment broke Boost.Iostreams,
+// in a way which could be remedied only by relying on the deprecated reset
+// functions; with VC6, even reset didn't work. Until this problem is
+// understood, Iostreams will use a private version of optional with a smart
+// pointer interface.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_OPTIONAL_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_OPTIONAL_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <cassert>
+#include <boost/mpl/int.hpp>
+#include <boost/type_traits/aligned_storage.hpp>
+#include <boost/type_traits/alignment_of.hpp>
+
+namespace boost { namespace iostreams { namespace detail {
+
+// Taken from <boost/optional.hpp>.
+template<class T>
+class aligned_storage
+{
+ // Borland ICEs if unnamed unions are used for this!
+ union dummy_u
+ {
+ char data[ sizeof(T) ];
+ BOOST_DEDUCED_TYPENAME type_with_alignment<
+ ::boost::alignment_of<T>::value >::type aligner_;
+ } dummy_ ;
+
+ public:
+
+ void const* address() const { return &dummy_.data[0]; }
+ void * address() { return &dummy_.data[0]; }
+};
+
+template<typename T>
+class optional {
+public:
+ typedef T element_type;
+ optional() : initialized_(false) { }
+ optional(const T& t) : initialized_(false) { reset(t); }
+ ~optional() { reset(); }
+ T& operator*()
+ {
+ assert(initialized_);
+ return *static_cast<T*>(address());
+ }
+ const T& operator*() const
+ {
+ assert(initialized_);
+ return *static_cast<const T*>(address());
+ }
+ T* operator->()
+ {
+ assert(initialized_);
+ return static_cast<T*>(address());
+ }
+ const T* operator->() const
+ {
+ assert(initialized_);
+ return static_cast<const T*>(address());
+ }
+ T* get()
+ {
+ assert(initialized_);
+ return static_cast<T*>(address());
+ }
+ const T* get() const
+ {
+ assert(initialized_);
+ return static_cast<const T*>(address());
+ }
+ void reset()
+ {
+ if (initialized_) {
+ #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) || \
+ BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600)) \
+ /**/
+ T* t = static_cast<T*>(address());
+ t->~T();
+ #else
+ static_cast<T*>(address())->T::~T();
+ #endif
+ initialized_ = false;
+ }
+ }
+ void reset(const T& t)
+ {
+ reset();
+ new (address()) T(t);
+ initialized_ = true;
+ }
+private:
+ optional(const optional&);
+ optional& operator=(const optional&);
+ void* address() { return &storage_; }
+ const void* address() const { return &storage_; }
+ aligned_storage<T> storage_;
+ bool initialized_;
+};
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_OPTIONAL_HPP_INCLUDED
diff --git a/boost/boost/iostreams/detail/param_type.hpp b/boost/boost/iostreams/detail/param_type.hpp
new file mode 100644
index 00000000000..b04a99c0bb1
--- /dev/null
+++ b/boost/boost/iostreams/detail/param_type.hpp
@@ -0,0 +1,26 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_PARAM_TYPE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_PARAM_TYPE_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/iostreams/traits.hpp>
+#include <boost/mpl/if.hpp>
+
+namespace boost { namespace iostreams { namespace detail {
+
+template<typename T>
+struct param_type {
+ typedef typename mpl::if_<is_std_io<T>, T&, const T&>::type type;
+};
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_PARAM_TYPE_HPP_INCLUDED //-----------//
diff --git a/boost/boost/iostreams/detail/push.hpp b/boost/boost/iostreams/detail/push.hpp
new file mode 100644
index 00000000000..b23f4ff64d6
--- /dev/null
+++ b/boost/boost/iostreams/detail/push.hpp
@@ -0,0 +1,153 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_PUSH_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_PUSH_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // BOOST_MSVC.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/detail/adapter/range_adapter.hpp>
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#include <boost/iostreams/detail/enable_if_stream.hpp>
+#include <boost/iostreams/pipeline.hpp>
+#include <boost/iostreams/detail/push_params.hpp>
+#include <boost/iostreams/detail/resolve.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+//
+// Macro: BOOST_IOSTREAMS_DEFINE_PUSH_CONSTRUCTOR(mode, name, helper).
+// Description: Defines overloads with name 'name' which forward to a function
+// 'helper' which takes a filter or devide by const reference.
+//
+#define BOOST_IOSTREAMS_DEFINE_PUSH_CONSTRUCTOR(name, mode, ch, helper) \
+ BOOST_IOSTREAMS_DEFINE_PUSH_IMPL(name, mode, ch, helper, 0, ?) \
+ /**/
+
+//
+// Macro: BOOST_IOSTREAMS_DEFINE_PUSH_CONSTRUCTOR(mode, name, helper).
+// Description: Defines constructors which forward to a function
+// 'helper' which takes a filter or device by const reference.
+//
+#define BOOST_IOSTREAMS_DEFINE_PUSH(name, mode, ch, helper) \
+ BOOST_IOSTREAMS_DEFINE_PUSH_IMPL(name, mode, ch, helper, 1, void) \
+ /**/
+
+//--------------------Definition of BOOST_IOSTREAMS_DEFINE_PUSH_IMPL----------//
+
+#define BOOST_IOSTREAMS_ADAPT_STREAM(mode, ch, arg, helper, has_return) \
+ this->helper( ::boost::iostreams::detail::resolve<mode, ch>(arg) \
+ BOOST_IOSTREAMS_PUSH_ARGS() ); \
+ /**/
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) && \
+ !BOOST_WORKAROUND(__BORLANDC__, < 0x600) \
+ /**/
+# ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES
+# define BOOST_IOSTREAMS_DEFINE_PUSH_IMPL(name, mode, ch, helper, has_return, result) \
+ template<typename CharType, typename TraitsType> \
+ BOOST_PP_IIF(has_return, result, explicit) \
+ name(::std::basic_streambuf<CharType, TraitsType>& sb BOOST_IOSTREAMS_PUSH_PARAMS()) \
+ { BOOST_IOSTREAMS_ADAPT_STREAM(mode, ch, sb, helper, has_return); } \
+ template<typename CharType, typename TraitsType> \
+ BOOST_PP_IIF(has_return, result, explicit) \
+ name(::std::basic_istream<CharType, TraitsType>& is BOOST_IOSTREAMS_PUSH_PARAMS()) \
+ { BOOST_STATIC_ASSERT((!is_convertible<mode, output>::value)); \
+ BOOST_IOSTREAMS_ADAPT_STREAM(mode, ch, is, helper, has_return); } \
+ template<typename CharType, typename TraitsType> \
+ BOOST_PP_IIF(has_return, result, explicit) \
+ name(::std::basic_ostream<CharType, TraitsType>& os BOOST_IOSTREAMS_PUSH_PARAMS()) \
+ { BOOST_STATIC_ASSERT((!is_convertible<mode, input>::value)); \
+ BOOST_IOSTREAMS_ADAPT_STREAM(mode, ch, os, helper, has_return); } \
+ template<typename CharType, typename TraitsType> \
+ BOOST_PP_IIF(has_return, result, explicit) \
+ name(::std::basic_iostream<CharType, TraitsType>& io BOOST_IOSTREAMS_PUSH_PARAMS()) \
+ { BOOST_IOSTREAMS_ADAPT_STREAM(mode, ch, io, helper, has_return); } \
+ template<typename Iter> \
+ BOOST_PP_IIF(has_return, result, explicit) \
+ name(const iterator_range<Iter>& rng BOOST_IOSTREAMS_PUSH_PARAMS()) \
+ { BOOST_PP_EXPR_IF(has_return, return) \
+ this->helper( ::boost::iostreams::detail::range_adapter< \
+ mode, iterator_range<Iter> \
+ >(rng) \
+ BOOST_IOSTREAMS_PUSH_ARGS() ); } \
+ template<typename Pipeline, typename Concept> \
+ BOOST_PP_IIF(has_return, result, explicit) \
+ name(const ::boost::iostreams::pipeline<Pipeline, Concept>& p) \
+ { p.push(*this); } \
+ template<typename T> \
+ BOOST_PP_IIF(has_return, result, explicit) \
+ name(const T& t BOOST_IOSTREAMS_PUSH_PARAMS() BOOST_IOSTREAMS_DISABLE_IF_STREAM(T)) \
+ { this->helper( ::boost::iostreams::detail::resolve<mode, ch>(t) \
+ BOOST_IOSTREAMS_PUSH_ARGS() ); } \
+ /**/
+# else // # ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES
+# define BOOST_IOSTREAMS_DEFINE_PUSH_IMPL(name, mode, ch, helper, has_return, result) \
+ BOOST_PP_IF(has_return, result, explicit) \
+ name(::std::streambuf& sb BOOST_IOSTREAMS_PUSH_PARAMS()) \
+ { BOOST_IOSTREAMS_ADAPT_STREAM(mode, ch, sb, helper, has_return); } \
+ BOOST_PP_IF(has_return, result, explicit) \
+ name(::std::istream& is BOOST_IOSTREAMS_PUSH_PARAMS()) \
+ { BOOST_STATIC_ASSERT((!is_convertible<mode, output>::value)); \
+ BOOST_IOSTREAMS_ADAPT_STREAM(mode, ch, is, helper, has_return); } \
+ BOOST_PP_IF(has_return, result, explicit) \
+ name(::std::ostream& os BOOST_IOSTREAMS_PUSH_PARAMS()) \
+ { BOOST_STATIC_ASSERT((!is_convertible<mode, input>::value)); \
+ BOOST_IOSTREAMS_ADAPT_STREAM(mode, ch, os, helper, has_return); } \
+ BOOST_PP_IF(has_return, result, explicit) \
+ name(::std::iostream& io BOOST_IOSTREAMS_PUSH_PARAMS()) \
+ { BOOST_IOSTREAMS_ADAPT_STREAM(mode, ch, io, helper, has_return); } \
+ template<typename Iter> \
+ BOOST_PP_IF(has_return, result, explicit) \
+ name(const iterator_range<Iter>& rng BOOST_IOSTREAMS_PUSH_PARAMS()) \
+ { BOOST_PP_EXPR_IF(has_return, return) \
+ this->helper( ::boost::iostreams::detail::range_adapter< \
+ mode, iterator_range<Iter> \
+ >(rng) \
+ BOOST_IOSTREAMS_PUSH_ARGS() ); } \
+ template<typename Pipeline, typename Concept> \
+ BOOST_PP_IF(has_return, result, explicit) \
+ name(const ::boost::iostreams::pipeline<Pipeline, Concept>& p) \
+ { p.push(*this); } \
+ template<typename T> \
+ BOOST_PP_EXPR_IF(has_return, result) \
+ name(const T& t BOOST_IOSTREAMS_PUSH_PARAMS() BOOST_IOSTREAMS_DISABLE_IF_STREAM(T)) \
+ { this->helper( ::boost::iostreams::detail::resolve<mode, ch>(t) \
+ BOOST_IOSTREAMS_PUSH_ARGS() ); } \
+ /**/
+# endif // # ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES
+#else // #if VC6, VC7.0, Borland 5.x
+# define BOOST_IOSTREAMS_DEFINE_PUSH_IMPL(name, mode, ch, helper, has_return, result) \
+ template<typename T> \
+ void BOOST_PP_CAT(name, _msvc_impl) \
+ ( ::boost::mpl::true_, const T& t BOOST_IOSTREAMS_PUSH_PARAMS() ) \
+ { t.push(*this); } \
+ template<typename T> \
+ void BOOST_PP_CAT(name, _msvc_impl) \
+ ( ::boost::mpl::false_, const T& t BOOST_IOSTREAMS_PUSH_PARAMS() ) \
+ { this->helper( ::boost::iostreams::detail::resolve<mode, ch>(t) \
+ BOOST_IOSTREAMS_PUSH_ARGS() ); } \
+ template<typename T> \
+ BOOST_PP_IF(has_return, result, explicit) \
+ name(const T& t BOOST_IOSTREAMS_PUSH_PARAMS()) \
+ { \
+ this->BOOST_PP_CAT(name, _msvc_impl) \
+ ( ::boost::iostreams::detail::is_pipeline<T>(), \
+ t BOOST_IOSTREAMS_PUSH_ARGS() ); \
+ } \
+ /**/
+#endif // #if VC6, VC7.0, Borland 5.x
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_PUSH_HPP_INCLUDED
diff --git a/boost/boost/iostreams/detail/push_params.hpp b/boost/boost/iostreams/detail/push_params.hpp
new file mode 100644
index 00000000000..4d179480bd7
--- /dev/null
+++ b/boost/boost/iostreams/detail/push_params.hpp
@@ -0,0 +1,20 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_PUSH_PARAMS_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_PUSH_PARAMS_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#define BOOST_IOSTREAMS_PUSH_PARAMS() \
+ , int buffer_size = -1 , int pback_size = -1 \
+ /**/
+
+#define BOOST_IOSTREAMS_PUSH_ARGS() , buffer_size, pback_size
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_PUSH_PARAMS_HPP_INCLUDED
diff --git a/boost/boost/iostreams/detail/resolve.hpp b/boost/boost/iostreams/detail/resolve.hpp
new file mode 100644
index 00000000000..997403cd3c7
--- /dev/null
+++ b/boost/boost/iostreams/detail/resolve.hpp
@@ -0,0 +1,229 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_RESOLVE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_RESOLVE_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // partial spec, put size_t in std.
+#include <cstddef> // std::size_t.
+#include <boost/detail/is_incrementable.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/detail/adapter/mode_adapter.hpp>
+#include <boost/iostreams/detail/adapter/output_iterator_adapter.hpp>
+#include <boost/iostreams/detail/adapter/range_adapter.hpp>
+#include <boost/iostreams/detail/config/gcc.hpp>
+#include <boost/iostreams/detail/config/overload_resolution.hpp>
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#include <boost/iostreams/detail/enable_if_stream.hpp>
+#include <boost/iostreams/detail/is_dereferenceable.hpp>
+#include <boost/iostreams/detail/is_iterator_range.hpp>
+#include <boost/iostreams/detail/select.hpp>
+#include <boost/iostreams/detail/wrap_unwrap.hpp>
+#include <boost/iostreams/device/array.hpp>
+#include <boost/iostreams/traits.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/bool.hpp> // true_.
+#include <boost/mpl/if.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <boost/type_traits/is_array.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp> // VC7.1 C4224.
+
+namespace boost { namespace iostreams { namespace detail {
+
+//------------------Definition of resolve-------------------------------------//
+
+#ifndef BOOST_IOSTREAMS_BROKEN_OVERLOAD_RESOLUTION //-------------------------//
+
+template<typename Mode, typename Ch, typename T>
+struct resolve_traits {
+ typedef typename
+ mpl::if_<
+ boost::detail::is_incrementable<T>,
+ output_iterator_adapter<Mode, Ch, T>,
+ const T&
+ >::type type;
+};
+
+# ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //-------------------------------//
+
+template<typename Mode, typename Ch, typename T>
+typename resolve_traits<Mode, Ch, T>::type
+resolve( const T& t
+ BOOST_IOSTREAMS_DISABLE_IF_STREAM(T)
+
+ // I suspect that the compilers which require this workaround may
+ // be correct, but I'm not sure why :(
+ #if BOOST_WORKAROUND(BOOST_INTEL_CXX_VERSION, BOOST_TESTED_AT(810)) ||\
+ BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3205)) || \
+ BOOST_WORKAROUND(BOOST_IOSTREAMS_GCC, BOOST_TESTED_AT(400)) \
+ /**/
+ , typename disable_if< is_iterator_range<T> >::type* = 0
+ #endif
+ )
+{
+ typedef typename resolve_traits<Mode, Ch, T>::type return_type;
+ return return_type(t);
+}
+
+template<typename Mode, typename Ch, typename Tr>
+mode_adapter< Mode, std::basic_streambuf<Ch, Tr> >
+resolve(std::basic_streambuf<Ch, Tr>& sb)
+{ return mode_adapter< Mode, std::basic_streambuf<Ch, Tr> >(wrap(sb)); }
+
+template<typename Mode, typename Ch, typename Tr>
+mode_adapter< Mode, std::basic_istream<Ch, Tr> >
+resolve(std::basic_istream<Ch, Tr>& is)
+{ return mode_adapter< Mode, std::basic_istream<Ch, Tr> >(wrap(is)); }
+
+template<typename Mode, typename Ch, typename Tr>
+mode_adapter< Mode, std::basic_ostream<Ch, Tr> >
+resolve(std::basic_ostream<Ch, Tr>& os)
+{ return mode_adapter< Mode, std::basic_ostream<Ch, Tr> >(wrap(os)); }
+
+template<typename Mode, typename Ch, typename Tr>
+mode_adapter< Mode, std::basic_iostream<Ch, Tr> >
+resolve(std::basic_iostream<Ch, Tr>& io)
+{ return mode_adapter< Mode, std::basic_iostream<Ch, Tr> >(wrap(io)); }
+
+template<typename Mode, typename Ch, std::size_t N>
+array_adapter<Mode, Ch> resolve(Ch (&array)[N])
+{ return array_adapter<Mode, Ch>(array); }
+
+template<typename Mode, typename Ch, typename Iter>
+range_adapter< Mode, boost::iterator_range<Iter> >
+resolve(const boost::iterator_range<Iter>& rng)
+{ return range_adapter< Mode, boost::iterator_range<Iter> >(rng); }
+
+# else // # ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //---------------------//
+
+template<typename Mode, typename Ch, typename T>
+typename resolve_traits<Mode, Ch, T>::type
+resolve( const T& t
+ BOOST_IOSTREAMS_DISABLE_IF_STREAM(T)
+ #if defined(__GNUC__)
+ , typename disable_if< is_iterator_range<T> >::type* = 0
+ #endif
+ )
+{
+ typedef typename resolve_traits<Mode, Ch, T>::type return_type;
+ return return_type(t);
+}
+
+template<typename Mode, typename Ch>
+mode_adapter<Mode, std::streambuf>
+resolve(std::streambuf& sb)
+{ return mode_adapter<Mode, std::streambuf>(wrap(sb)); }
+
+template<typename Mode, typename Ch>
+mode_adapter<Mode, std::istream>
+resolve(std::istream& is)
+{ return mode_adapter<Mode, std::istream>(wrap(is)); }
+
+template<typename Mode, typename Ch>
+mode_adapter<Mode, std::ostream>
+resolve(std::ostream& os)
+{ return mode_adapter<Mode, std::ostream>(wrap(os)); }
+
+template<typename Mode, typename Ch>
+mode_adapter<Mode, std::iostream>
+resolve(std::iostream& io)
+{ return mode_adapter<Mode, std::iostream>(wrap(io)); }
+
+template<typename Mode, typename Ch, std::size_t N>
+array_adapter<Mode, Ch> resolve(Ch (&array)[N])
+{ return array_adapter<Mode, Ch>(array); }
+
+template<typename Mode, typename Ch, typename Iter>
+range_adapter< Mode, boost::iterator_range<Iter> >
+resolve(const boost::iterator_range<Iter>& rng)
+{ return range_adapter< Mode, boost::iterator_range<Iter> >(rng); }
+
+# endif // # ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //--------------------//
+#else // #ifndef BOOST_IOSTREAMS_BROKEN_OVERLOAD_RESOLUTION //----------------//
+
+template<typename Mode, typename Ch, typename T>
+struct resolve_traits {
+ // Note: test for is_iterator_range must come before test for output
+ // iterator.
+ typedef typename
+ iostreams::select< // Disambiguation for Tru64.
+ is_std_io<T>,
+ mode_adapter<Mode, T>,
+ is_iterator_range<T>,
+ range_adapter<Mode, T>,
+ is_dereferenceable<T>,
+ output_iterator_adapter<Mode, Ch, T>,
+ is_array<T>,
+ array_adapter<Mode, T>,
+ else_,
+ #if !BOOST_WORKAROUND(__BORLANDC__, < 0x600)
+ const T&
+ #else
+ T
+ #endif
+ >::type type;
+};
+
+template<typename Mode, typename Ch, typename T>
+typename resolve_traits<Mode, Ch, T>::type
+resolve(const T& t, mpl::true_)
+{ // Bad overload resolution.
+ typedef typename resolve_traits<Mode, Ch, T>::type return_type;
+ return return_type(wrap(const_cast<T&>(t)));
+}
+
+template<typename Mode, typename Ch, typename T>
+typename resolve_traits<Mode, Ch, T>::type
+resolve(const T& t, mpl::false_)
+{
+ typedef typename resolve_traits<Mode, Ch, T>::type return_type;
+ return return_type(t);
+}
+
+template<typename Mode, typename Ch, typename T>
+typename resolve_traits<Mode, Ch, T>::type
+resolve(const T& t BOOST_IOSTREAMS_DISABLE_IF_STREAM(T))
+{ return resolve<Mode, Ch>(t, is_std_io<T>()); }
+
+# if !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && \
+ !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) && \
+ !defined(__GNUC__) // ---------------------------------------------------//
+
+template<typename Mode, typename Ch, typename T>
+typename resolve_traits<Mode, Ch, T>::type
+resolve(T& t, mpl::true_)
+{
+ typedef typename resolve_traits<Mode, Ch, T>::type return_type;
+ return return_type(wrap(t));
+}
+
+template<typename Mode, typename Ch, typename T>
+typename resolve_traits<Mode, Ch, T>::type
+resolve(T& t, mpl::false_)
+{
+ typedef typename resolve_traits<Mode, Ch, T>::type return_type;
+ return return_type(t);
+}
+
+template<typename Mode, typename Ch, typename T>
+typename resolve_traits<Mode, Ch, T>::type
+resolve(T& t BOOST_IOSTREAMS_ENABLE_IF_STREAM(T))
+{ return resolve<Mode, Ch>(t, is_std_io<T>()); }
+
+# endif // Borland 5.x, VC6-7.0 or GCC 2.9x //--------------------------------//
+#endif // #ifndef BOOST_IOSTREAMS_BROKEN_OVERLOAD_RESOLUTION //---------------//
+
+} } } // End namespaces detail, iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp> // VC7.1 4224.
+
+#endif // BOOST_IOSTREAMS_DETAIL_RESOLVE_HPP_INCLUDED
diff --git a/boost/boost/iostreams/detail/select.hpp b/boost/boost/iostreams/detail/select.hpp
new file mode 100644
index 00000000000..14eed1ada46
--- /dev/null
+++ b/boost/boost/iostreams/detail/select.hpp
@@ -0,0 +1,79 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+// Contains the metafunction select, which mimics the effect of a chain of
+// nested mpl if_'s.
+//
+// -----------------------------------------------------------------------------
+//
+// Usage:
+//
+// typedef typename select<
+// case1, type1,
+// case2, type2,
+// ...
+// true_, typen
+// >::type selection;
+//
+// Here case1, case2, ... are models of MPL::IntegralConstant with value type
+// bool, and n <= 10.
+
+#ifndef BOOST_IOSTREAMS_SELECT_HPP_INCLUDED
+#define BOOST_IOSTREAMS_SELECT_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/type_traits/is_base_and_derived.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/void.hpp>
+
+namespace boost { namespace iostreams {
+
+typedef mpl::true_ else_;
+
+template< typename Case1 = mpl::true_,
+ typename Type1 = mpl::void_,
+ typename Case2 = mpl::true_,
+ typename Type2 = mpl::void_,
+ typename Case3 = mpl::true_,
+ typename Type3 = mpl::void_,
+ typename Case4 = mpl::true_,
+ typename Type4 = mpl::void_,
+ typename Case5 = mpl::true_,
+ typename Type5 = mpl::void_,
+ typename Case6 = mpl::true_,
+ typename Type6 = mpl::void_,
+ typename Case7 = mpl::true_,
+ typename Type7 = mpl::void_,
+ typename Case8 = mpl::true_,
+ typename Type8 = mpl::void_,
+ typename Case9 = mpl::true_,
+ typename Type9 = mpl::void_,
+ typename Case10 = mpl::true_,
+ typename Type10 = mpl::void_ >
+struct select {
+ typedef typename
+ mpl::eval_if<
+ Case1, mpl::identity<Type1>, mpl::eval_if<
+ Case2, mpl::identity<Type2>, mpl::eval_if<
+ Case3, mpl::identity<Type3>, mpl::eval_if<
+ Case4, mpl::identity<Type4>, mpl::eval_if<
+ Case5, mpl::identity<Type5>, mpl::eval_if<
+ Case6, mpl::identity<Type6>, mpl::eval_if<
+ Case7, mpl::identity<Type7>, mpl::eval_if<
+ Case8, mpl::identity<Type8>, mpl::eval_if<
+ Case9, mpl::identity<Type9>, mpl::if_<
+ Case10, Type10, mpl::void_ > > > > > > > > >
+ >::type type;
+};
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_SELECT_HPP_INCLUDED
diff --git a/boost/boost/iostreams/detail/select_by_size.hpp b/boost/boost/iostreams/detail/select_by_size.hpp
new file mode 100644
index 00000000000..9d9955f7b5f
--- /dev/null
+++ b/boost/boost/iostreams/detail/select_by_size.hpp
@@ -0,0 +1,159 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+//
+// Intended as an alternative to type_traits::yes_type and type_traits::no_type.
+// Provides an arbitrary number of types (case_<0>, case_<1>, ...) for
+// determining the results of overload resultion using 'sizeof', plus a uniform
+// means of using the result. yes_type and no_type are typedefs for case_<1>
+// and case_<0>. A single case with negative argument, case_<-1>, is also
+// provided, for convenience.
+//
+// This header may be included any number of times, with
+// BOOST_SELECT_BY_SIZE_MAX_CASE defined to be the largest N such that case_<N>
+// is needed for a particular application. It defaults to 20.
+//
+// This header depends only on Boost.Config and Boost.Preprocessor. Dependence
+// on Type Traits or MPL was intentionally avoided, to leave open the
+// possibility that select_by_size could be used by these libraries.
+//
+// Example usage:
+//
+// #define BOOST_SELECT_BY_SIZE_MAX_CASE 7 // (Needed when default was 2)
+// #include <boost/utility/select_by_size.hpp>
+//
+// using namespace boost::utility;
+//
+// case_<0> helper(bool);
+// case_<1> helper(int);
+// case_<2> helper(unsigned);
+// case_<3> helper(long);
+// case_<4> helper(unsigned long);
+// case_<5> helper(float);
+// case_<6> helper(double);
+// case_<7> helper(const char*);
+//
+// struct test {
+// static const int value =
+// select_by_size< sizeof(helper(9876UL)) >::value;
+// BOOST_STATIC_ASSERT(value == 4);
+// };
+//
+// For compilers with integral constant expression problems, e.g. Borland 5.x,
+// one can also write
+//
+// struct test {
+// BOOST_SELECT_BY_SIZE(int, value, helper(9876UL));
+// };
+//
+// to define a static integral constant 'value' equal to
+//
+// select_by_size< sizeof(helper(9876UL)) >::value.
+//
+
+// Include guards surround all contents of this header except for explicit
+// specializations of select_by_size for case_<N> with N > 2.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_SELECT_BY_SIZE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_SELECT_BY_SIZE_HPP_INCLUDED
+
+// The lowest N for which select_by_size< sizeof(case_<N>) > has not been
+// specialized.
+#define SELECT_BY_SIZE_MAX_SPECIALIZED 20
+
+#include <boost/config.hpp> // BOOST_STATIC_CONSTANT.
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/iteration/local.hpp>
+
+/* Alternative implementation using max_align.
+
+#include <boost/type_traits/alignment_of.hpp>
+#include <boost/type_traits/type_with_alignment.hpp>
+
+namespace boost { namespace utility {
+
+template<int N>
+struct case_ { char c[(N + 1) * alignment_of<detail::max_align>::value]; };
+
+template<unsigned Size>
+struct select_by_size {
+ BOOST_STATIC_CONSTANT(int, value =
+ (Size / alignment_of<detail::max_align>::value - 1));
+};
+
+} } // End namespaces utility, boost.
+
+*/ // End alternate implementation.
+
+namespace boost { namespace iostreams { namespace detail {
+
+//--------------Definition of case_-------------------------------------------//
+
+template<int N> struct case_ { char c1; case_<N - 1> c2; };
+template<> struct case_<-1> { char c; };
+typedef case_<true> yes_type;
+typedef case_<false> no_type;
+
+//--------------Declaration of select_by_size---------------------------------//
+
+template<unsigned Size> struct select_by_size;
+
+} } } // End namespaces detail, iostreams, boost.
+
+//--------------Definition of SELECT_BY_SIZE_SPEC-----------------------------//
+
+// Sepecializes select_by_size for sizeof(case<n-1>). The decrement is used
+// here because the preprocessor library doesn't handle negative integers.
+#define SELECT_BY_SIZE_SPEC(n) \
+ namespace boost { namespace iostreams { namespace detail { \
+ static const int BOOST_PP_CAT(sizeof_case_, n) = sizeof(case_<n - 1>); \
+ template<> \
+ struct select_by_size< BOOST_PP_CAT(sizeof_case_, n) > { \
+ struct type { BOOST_STATIC_CONSTANT(int, value = n - 1); }; \
+ BOOST_STATIC_CONSTANT(int, value = type::value); \
+ }; \
+ } } } \
+ /**/
+
+//--------------Default specializations of select_by_size---------------------//
+
+#define BOOST_PP_LOCAL_MACRO(n) SELECT_BY_SIZE_SPEC(n)
+#define BOOST_PP_LOCAL_LIMITS (0, 20)
+#include BOOST_PP_LOCAL_ITERATE()
+#undef BOOST_PP_LOCAL_MACRO
+
+//--------------Definition of SELECT_BY_SIZE----------------------------------//
+
+#define BOOST_SELECT_BY_SIZE(type_, name, expr) \
+ BOOST_STATIC_CONSTANT( \
+ unsigned, \
+ BOOST_PP_CAT(boost_select_by_size_temp_, name) = sizeof(expr) \
+ ); \
+ BOOST_STATIC_CONSTANT( \
+ type_, \
+ name = \
+ ( ::boost::iostreams::detail::select_by_size< \
+ BOOST_PP_CAT(boost_select_by_size_temp_, name) \
+ >::value ) \
+ ) \
+ /**/
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_SELECT_BY_SIZE_HPP_INCLUDED
+
+//----------Specializations of SELECT_BY_SIZE (outside main inclued guards)---//
+
+#if BOOST_SELECT_BY_SIZE_MAX_CASE > SELECT_BY_SIZE_MAX_SPECIALIZED
+
+#define BOOST_PP_LOCAL_MACRO(n) SELECT_BY_SIZE_SPEC(n)
+#define BOOST_PP_LOCAL_LIMITS \
+ (SELECT_BY_SIZE_MAX_SPECIALIZED, BOOST_SELECT_BY_SIZE_MAX_CASE) \
+ /**/
+#include BOOST_PP_LOCAL_ITERATE()
+#undef BOOST_PP_LOCAL_MACRO
+#undef SELECT_BY_SIZE_MAX_SPECIALIZED
+#define SELECT_BY_SIZE_MAX_SPECIALIZED BOOST_SELECT_BY_SIZE_MAX_CASE
+
+#endif
diff --git a/boost/boost/iostreams/detail/streambuf.hpp b/boost/boost/iostreams/detail/streambuf.hpp
new file mode 100644
index 00000000000..f743f767e08
--- /dev/null
+++ b/boost/boost/iostreams/detail/streambuf.hpp
@@ -0,0 +1,33 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_STREAMBUF_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_STREAMBUF_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES
+# include <streambuf>
+#else
+# include <streambuf.h>
+#endif
+
+#ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES
+# define BOOST_IOSTREAMS_BASIC_STREAMBUF(ch, tr) std::basic_streambuf< ch, tr >
+# define BOOST_IOSTREAMS_PUBSYNC pubsync
+# define BOOST_IOSTREAMS_PUBSEEKOFF pubseekoff
+# define BOOST_IOSTREAMS_PUBSEEKPOS pubseekpos
+#else
+# define BOOST_IOSTREAMS_BASIC_STREAMBUF(ch, tr) std::streambuf
+# define BOOST_IOSTREAMS_PUBSYNC sync
+# define BOOST_IOSTREAMS_PUBSEEKOFF seekoff
+# define BOOST_IOSTREAMS_PUBSEEKPOS seekpos
+#endif
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_STREAMBUF_HPP_INCLUDED
diff --git a/boost/boost/iostreams/detail/streambuf/chainbuf.hpp b/boost/boost/iostreams/detail/streambuf/chainbuf.hpp
new file mode 100644
index 00000000000..6b1168cde65
--- /dev/null
+++ b/boost/boost/iostreams/detail/streambuf/chainbuf.hpp
@@ -0,0 +1,115 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_CHAINBUF_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_CHAINBUF_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // BOOST_MSVC, template friends.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/chain.hpp>
+#include <boost/iostreams/detail/access_control.hpp>
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#include <boost/iostreams/detail/streambuf.hpp>
+#include <boost/iostreams/detail/streambuf/linked_streambuf.hpp>
+#include <boost/iostreams/detail/translate_int_type.hpp>
+#include <boost/iostreams/traits.hpp>
+#include <boost/noncopyable.hpp>
+
+namespace boost { namespace iostreams { namespace detail {
+
+//--------------Definition of chainbuf----------------------------------------//
+
+//
+// Template name: chainbuf.
+// Description: Stream buffer which operates by delegating to the first
+// linked_streambuf in a chain.
+// Template paramters:
+// Chain - The chain type.
+//
+template<typename Chain, typename Mode, typename Access>
+class chainbuf
+ : public BOOST_IOSTREAMS_BASIC_STREAMBUF(
+ typename Chain::char_type,
+ typename Chain::traits_type
+ ),
+ public access_control<typename Chain::client_type, Access>,
+ private noncopyable
+{
+private:
+ typedef access_control<chain_client<Chain>, Access> client_type;
+public:
+ typedef typename Chain::char_type char_type;
+ BOOST_IOSTREAMS_STREAMBUF_TYPEDEFS(typename Chain::traits_type)
+protected:
+ typedef linked_streambuf<char_type, traits_type> delegate_type;
+ chainbuf() { client_type::set_chain(&chain_); }
+ int_type underflow()
+ { sentry t(this); return translate(delegate().underflow()); }
+ int_type pbackfail(int_type c)
+ { sentry t(this); return translate(delegate().pbackfail(c)); }
+ std::streamsize xsgetn(char_type* s, std::streamsize n)
+ { sentry t(this); return delegate().xsgetn(s, n); }
+ int_type overflow(int_type c)
+ { sentry t(this); return translate(delegate().overflow(c)); }
+ std::streamsize xsputn(const char_type* s, std::streamsize n)
+ { sentry t(this); return delegate().xsputn(s, n); }
+ int sync() { sentry t(this); return delegate().sync(); }
+ pos_type seekoff( off_type off, BOOST_IOS::seekdir way,
+ BOOST_IOS::openmode which =
+ BOOST_IOS::in | BOOST_IOS::out )
+ { sentry t(this); return delegate().seekoff(off, way, which); }
+ pos_type seekpos( pos_type sp,
+ BOOST_IOS::openmode which =
+ BOOST_IOS::in | BOOST_IOS::out )
+ { sentry t(this); return delegate().seekpos(sp, which); }
+protected:
+ typedef BOOST_IOSTREAMS_BASIC_STREAMBUF(
+ typename Chain::char_type,
+ typename Chain::traits_type
+ ) base_type;
+//#if !BOOST_WORKAROUND(__GNUC__, == 2)
+// BOOST_IOSTREAMS_USING_PROTECTED_STREAMBUF_MEMBERS(base_type)
+//#endif
+private:
+
+ // Translate from std int_type to chain's int_type.
+ typedef BOOST_IOSTREAMS_CHAR_TRAITS(char_type) std_traits;
+ typedef typename Chain::traits_type chain_traits;
+ static typename chain_traits::int_type
+ translate(typename std_traits::int_type c)
+ { return translate_int_type<std_traits, chain_traits>(c); }
+
+ delegate_type& delegate()
+ { return static_cast<delegate_type&>(chain_.front()); }
+ void get_pointers()
+ {
+ this->setg(delegate().eback(), delegate().gptr(), delegate().egptr());
+ this->setp(delegate().pbase(), delegate().epptr());
+ this->pbump((int) (delegate().pptr() - delegate().pbase()));
+ }
+ void set_pointers()
+ {
+ delegate().setg(this->eback(), this->gptr(), this->egptr());
+ delegate().setp(this->pbase(), this->epptr());
+ delegate().pbump((int) (this->pptr() - this->pbase()));
+ }
+ struct sentry {
+ sentry(chainbuf<Chain, Mode, Access>* buf) : buf_(buf)
+ { buf_->set_pointers(); }
+ ~sentry() { buf_->get_pointers(); }
+ chainbuf<Chain, Mode, Access>* buf_;
+ };
+ friend struct sentry;
+ Chain chain_;
+};
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_CHAINBUF_HPP_INCLUDED
diff --git a/boost/boost/iostreams/detail/streambuf/direct_streambuf.hpp b/boost/boost/iostreams/detail/streambuf/direct_streambuf.hpp
new file mode 100644
index 00000000000..5f7a69562bb
--- /dev/null
+++ b/boost/boost/iostreams/detail/streambuf/direct_streambuf.hpp
@@ -0,0 +1,305 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_DIRECT_STREAMBUF_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_DIRECT_STREAMBUF_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <cassert>
+#include <cstddef>
+#include <typeinfo>
+#include <utility> // pair.
+#include <boost/config.hpp> // BOOST_DEDUCED_TYPENAME.
+#include <boost/iostreams/detail/char_traits.hpp>
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#include <boost/iostreams/detail/ios.hpp>
+#include <boost/iostreams/detail/optional.hpp>
+#include <boost/iostreams/detail/streambuf.hpp>
+#include <boost/iostreams/detail/streambuf/linked_streambuf.hpp>
+#include <boost/iostreams/detail/error.hpp>
+#include <boost/iostreams/operations.hpp>
+#include <boost/iostreams/positioning.hpp>
+#include <boost/iostreams/traits.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp> // MSVC.
+
+namespace boost { namespace iostreams {
+
+namespace detail {
+
+template< typename T,
+ typename Tr =
+ BOOST_IOSTREAMS_CHAR_TRAITS(
+ BOOST_DEDUCED_TYPENAME char_type_of<T>::type
+ ) >
+class direct_streambuf
+ : public linked_streambuf<BOOST_DEDUCED_TYPENAME char_type_of<T>::type, Tr>
+{
+public:
+ typedef typename char_type_of<T>::type char_type;
+ BOOST_IOSTREAMS_STREAMBUF_TYPEDEFS(Tr)
+private:
+ typedef linked_streambuf<char_type, traits_type> base_type;
+ typedef typename category_of<T>::type category;
+ typedef BOOST_IOSTREAMS_BASIC_STREAMBUF(
+ char_type, traits_type
+ ) streambuf_type;
+public: // stream needs access.
+ void open(const T& t, int buffer_size, int pback_size);
+ bool is_open() const;
+ void close();
+ bool auto_close() const { return auto_close_; }
+ void set_auto_close(bool close) { auto_close_ = close; }
+ bool strict_sync() { return true; }
+
+ // Declared in linked_streambuf.
+ T* component() { return storage_.get(); }
+protected:
+#if !BOOST_WORKAROUND(__GNUC__, == 2)
+ BOOST_IOSTREAMS_USING_PROTECTED_STREAMBUF_MEMBERS(base_type)
+#endif
+ direct_streambuf();
+
+ //--------------Virtual functions-----------------------------------------//
+
+ // Declared in linked_streambuf.
+ void close(BOOST_IOS::openmode m);
+ const std::type_info& component_type() const { return typeid(T); }
+ void* component_impl() { return component(); }
+
+#ifdef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES
+ public:
+#endif
+
+ // Declared in basic_streambuf.
+ int_type underflow();
+ int_type pbackfail(int_type c);
+ int_type overflow(int_type c);
+ pos_type seekoff( off_type off, BOOST_IOS::seekdir way,
+ BOOST_IOS::openmode which );
+ pos_type seekpos(pos_type sp, BOOST_IOS::openmode which);
+private:
+ pos_type seek_impl( stream_offset off, BOOST_IOS::seekdir way,
+ BOOST_IOS::openmode which );
+ void init_input(any_tag) { }
+ void init_input(input);
+ void init_output(any_tag) { }
+ void init_output(output);
+ void init_get_area();
+ void init_put_area();
+ bool one_head() const;
+ bool two_head() const;
+ optional<T> storage_;
+ char_type *ibeg_, *iend_, *obeg_, *oend_;
+ bool auto_close_;
+};
+
+//------------------Implementation of direct_streambuf------------------------//
+
+template<typename T, typename Tr>
+direct_streambuf<T, Tr>::direct_streambuf()
+ : ibeg_(0), iend_(0), obeg_(0), oend_(0), auto_close_(true)
+{ this->set_true_eof(true); }
+
+template<typename T, typename Tr>
+void direct_streambuf<T, Tr>::open(const T& t, int, int)
+{
+ storage_.reset(t);
+ init_input(category());
+ init_output(category());
+ setg(0, 0, 0);
+ setp(0, 0);
+}
+
+template<typename T, typename Tr>
+bool direct_streambuf<T, Tr>::is_open() const
+{ return ibeg_ != 0 && !obeg_ != 0; }
+
+template<typename T, typename Tr>
+void direct_streambuf<T, Tr>::close()
+{
+ using namespace std;
+ try { close(BOOST_IOS::in); } catch (std::exception&) { }
+ try { close(BOOST_IOS::out); } catch (std::exception&) { }
+ storage_.reset();
+}
+
+template<typename T, typename Tr>
+typename direct_streambuf<T, Tr>::int_type
+direct_streambuf<T, Tr>::underflow()
+{
+ if (!ibeg_)
+ throw cant_read();
+ if (!gptr())
+ init_get_area();
+ return gptr() != iend_ ?
+ traits_type::to_int_type(*gptr()) :
+ traits_type::eof();
+}
+
+template<typename T, typename Tr>
+typename direct_streambuf<T, Tr>::int_type
+direct_streambuf<T, Tr>::pbackfail(int_type c)
+{
+ using namespace std;
+ if (!ibeg_)
+ throw cant_read();
+ if (gptr() != 0 && gptr() != ibeg_) {
+ gbump(-1);
+ if (!traits_type::eq_int_type(c, traits_type::eof()))
+ *gptr() = traits_type::to_char_type(c);
+ return traits_type::not_eof(c);
+ }
+ throw bad_putback();
+}
+
+template<typename T, typename Tr>
+typename direct_streambuf<T, Tr>::int_type
+direct_streambuf<T, Tr>::overflow(int_type c)
+{
+ using namespace std;
+ if (!obeg_) throw BOOST_IOSTREAMS_FAILURE("no write access");
+ if (!pptr()) init_put_area();
+ if (!traits_type::eq_int_type(c, traits_type::eof())) {
+ if (pptr() == oend_)
+ throw BOOST_IOSTREAMS_FAILURE("write area exhausted");
+ *pptr() = traits_type::to_char_type(c);
+ pbump(1);
+ return c;
+ }
+ return traits_type::not_eof(c);
+}
+
+template<typename T, typename Tr>
+inline typename direct_streambuf<T, Tr>::pos_type
+direct_streambuf<T, Tr>::seekoff
+ (off_type off, BOOST_IOS::seekdir way, BOOST_IOS::openmode which)
+{ return seek_impl(off, way, which); }
+
+template<typename T, typename Tr>
+inline typename direct_streambuf<T, Tr>::pos_type
+direct_streambuf<T, Tr>::seekpos
+ (pos_type sp, BOOST_IOS::openmode)
+{
+ return seek_impl( position_to_offset(sp), BOOST_IOS::beg,
+ BOOST_IOS::in | BOOST_IOS::out );
+}
+
+template<typename T, typename Tr>
+void direct_streambuf<T, Tr>::close(BOOST_IOS::openmode which)
+{
+ if (which == BOOST_IOS::in && ibeg_ != 0) {
+ setg(0, 0, 0);
+ ibeg_ = iend_ = 0;
+ }
+ if (which == BOOST_IOS::out && obeg_ != 0) {
+ sync();
+ setp(0, 0);
+ obeg_ = oend_ = 0;
+ }
+ boost::iostreams::close(*storage_, which);
+}
+
+template<typename T, typename Tr>
+typename direct_streambuf<T, Tr>::pos_type direct_streambuf<T, Tr>::seek_impl
+ (stream_offset off, BOOST_IOS::seekdir way, BOOST_IOS::openmode which)
+{
+ using namespace std;
+ BOOST_IOS::openmode both = BOOST_IOS::in | BOOST_IOS::out;
+ if (two_head() && (which & both) == both)
+ throw bad_seek();
+ stream_offset result = -1;
+ bool one = one_head();
+ if (one && (pptr() != 0 || gptr()== 0))
+ init_get_area(); // Switch to input mode, for code reuse.
+ if (one || (which & BOOST_IOS::in) != 0 && ibeg_ != 0) {
+ if (!gptr()) setg(ibeg_, ibeg_, iend_);
+ ptrdiff_t next = 0;
+ switch (way) {
+ case BOOST_IOS::beg: next = off; break;
+ case BOOST_IOS::cur: next = (gptr() - ibeg_) + off; break;
+ case BOOST_IOS::end: next = (iend_ - ibeg_) + off; break;
+ default: assert(0);
+ }
+ if (next < 0 || next > (iend_ - ibeg_))
+ throw bad_seek();
+ setg(ibeg_, ibeg_ + next, iend_);
+ result = next;
+ }
+ if (!one && (which & BOOST_IOS::out) != 0 && obeg_ != 0) {
+ if (!pptr()) setp(obeg_, oend_);
+ ptrdiff_t next = 0;
+ switch (way) {
+ case BOOST_IOS::beg: next = off; break;
+ case BOOST_IOS::cur: next = (pptr() - obeg_) + off; break;
+ case BOOST_IOS::end: next = (oend_ - obeg_) + off; break;
+ default: assert(0);
+ }
+ if (next < 0 || next > (oend_ - obeg_))
+ throw bad_seek();
+ pbump(static_cast<int>(next - (pptr() - obeg_)));
+ result = next;
+ }
+ return offset_to_position(result);
+}
+
+template<typename T, typename Tr>
+void direct_streambuf<T, Tr>::init_input(input)
+{
+ std::pair<char_type*, char_type*> p = input_sequence(*storage_);
+ ibeg_ = p.first;
+ iend_ = p.second;
+}
+
+template<typename T, typename Tr>
+void direct_streambuf<T, Tr>::init_output(output)
+{
+ std::pair<char_type*, char_type*> p = output_sequence(*storage_);
+ obeg_ = p.first;
+ oend_ = p.second;
+}
+
+template<typename T, typename Tr>
+void direct_streambuf<T, Tr>::init_get_area()
+{
+ setg(ibeg_, ibeg_, iend_);
+ if (one_head() && pptr()) {
+ gbump(static_cast<int>(pptr() - obeg_));
+ setp(0, 0);
+ }
+}
+
+template<typename T, typename Tr>
+void direct_streambuf<T, Tr>::init_put_area()
+{
+ setp(obeg_, oend_);
+ if (one_head() && gptr()) {
+ pbump(static_cast<int>(gptr() - ibeg_));
+ setg(0, 0, 0);
+ }
+}
+
+template<typename T, typename Tr>
+inline bool direct_streambuf<T, Tr>::one_head() const
+{ return ibeg_ && obeg_ && ibeg_ == obeg_; }
+
+template<typename T, typename Tr>
+inline bool direct_streambuf<T, Tr>::two_head() const
+{ return ibeg_ && obeg_ && ibeg_ != obeg_; }
+
+//----------------------------------------------------------------------------//
+
+} // End namespace detail.
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp> // MSVC
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_DIRECT_STREAMBUF_HPP_INCLUDED
diff --git a/boost/boost/iostreams/detail/streambuf/indirect_streambuf.hpp b/boost/boost/iostreams/detail/streambuf/indirect_streambuf.hpp
new file mode 100644
index 00000000000..4f65a33f6b7
--- /dev/null
+++ b/boost/boost/iostreams/detail/streambuf/indirect_streambuf.hpp
@@ -0,0 +1,423 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+// This material is heavily indebted to the discussion and code samples in
+// A. Langer and K. Kreft, "Standard C++ IOStreams and Locales",
+// Addison-Wesley, 2000, pp. 228-43.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_INDIRECT_STREAMBUF_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_INDIRECT_STREAMBUF_HPP_INCLUDED
+
+#include <algorithm> // min, max.
+#include <cassert>
+#include <exception>
+#include <typeinfo>
+#include <boost/config.hpp> // Member template friends.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/constants.hpp>
+#include <boost/iostreams/detail/adapter/concept_adapter.hpp>
+#include <boost/iostreams/detail/buffer.hpp>
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#include <boost/iostreams/detail/double_object.hpp>
+#include <boost/iostreams/detail/ios.hpp>
+#include <boost/iostreams/detail/optional.hpp>
+#include <boost/iostreams/detail/push.hpp>
+#include <boost/iostreams/detail/streambuf/linked_streambuf.hpp>
+#include <boost/iostreams/operations.hpp>
+#include <boost/iostreams/positioning.hpp>
+#include <boost/iostreams/traits.hpp>
+#include <boost/iostreams/operations.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp> // MSVC, BCC 5.x
+
+namespace boost { namespace iostreams { namespace detail {
+
+//
+// Description: The implementation of basic_streambuf used by chains.
+//
+template<typename T, typename Tr, typename Alloc, typename Mode>
+class indirect_streambuf
+ : public linked_streambuf<BOOST_DEDUCED_TYPENAME char_type_of<T>::type, Tr>
+{
+public:
+ typedef typename char_type_of<T>::type char_type;
+ BOOST_IOSTREAMS_STREAMBUF_TYPEDEFS(Tr)
+private:
+ typedef typename category_of<T>::type category;
+ typedef concept_adapter<T> wrapper;
+ typedef detail::basic_buffer<char_type, Alloc> buffer_type;
+ typedef indirect_streambuf<T, Tr, Alloc, Mode> my_type;
+ typedef detail::linked_streambuf<char_type, traits_type> base_type;
+ typedef linked_streambuf<char_type, Tr> streambuf_type;
+public:
+ indirect_streambuf();
+
+ void open(const T& t BOOST_IOSTREAMS_PUSH_PARAMS());
+ bool is_open() const;
+ void close();
+ bool auto_close() const;
+ void set_auto_close(bool close);
+ bool strict_sync();
+
+ // Declared in linked_streambuf.
+ T* component() { return &*obj(); }
+protected:
+#if !BOOST_WORKAROUND(__GNUC__, == 2)
+ BOOST_IOSTREAMS_USING_PROTECTED_STREAMBUF_MEMBERS(base_type)
+#endif
+
+ //----------virtual functions---------------------------------------------//
+
+#ifndef BOOST_IOSTREAMS_NO_LOCALE
+ void imbue(const std::locale& loc);
+#endif
+#ifdef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES
+ public:
+#endif
+ int_type underflow();
+ int_type pbackfail(int_type c);
+ int_type overflow(int_type c);
+ int sync();
+ pos_type seekoff( off_type off, BOOST_IOS::seekdir way,
+ BOOST_IOS::openmode which );
+ pos_type seekpos(pos_type sp, BOOST_IOS::openmode which);
+
+ // Declared in linked_streambuf.
+ void set_next(streambuf_type* next);
+ void close(BOOST_IOS::openmode m);
+ const std::type_info& component_type() const { return typeid(T); }
+ void* component_impl() { return component(); }
+private:
+
+ //----------Accessor functions--------------------------------------------//
+
+ wrapper& obj() { return *storage_; }
+ streambuf_type* next() const { return next_; }
+ buffer_type& in() { return buffer_.first(); }
+ buffer_type& out() { return buffer_.second(); }
+ bool can_read() const { return is_convertible<Mode, input>::value; }
+ bool can_write() const { return is_convertible<Mode, output>::value; }
+ bool output_buffered() const { return (flags_ & f_output_buffered) != 0; }
+ bool shared_buffer() const { return is_convertible<Mode, seekable>::value; }
+ void set_flags(int f) { flags_ = f; }
+
+ //----------State changing functions--------------------------------------//
+
+ virtual void init_get_area();
+ virtual void init_put_area();
+
+ //----------Utility function----------------------------------------------//
+
+ pos_type seek_impl( stream_offset off, BOOST_IOS::seekdir way,
+ BOOST_IOS::openmode which );
+ void sync_impl();
+ void close_impl(BOOST_IOS::openmode);
+
+ enum flag_type {
+ f_open = 1,
+ f_input_closed = f_open << 1,
+ f_output_closed = f_input_closed << 1,
+ f_output_buffered = f_output_closed << 1,
+ f_auto_close = f_output_buffered << 1
+ };
+
+ optional<wrapper> storage_;
+ streambuf_type* next_;
+ double_object<
+ buffer_type,
+ is_convertible<
+ Mode,
+ two_sequence
+ >
+ > buffer_;
+ std::streamsize pback_size_;
+ int flags_;
+};
+
+//--------------Implementation of indirect_streambuf--------------------------//
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+indirect_streambuf<T, Tr, Alloc, Mode>::indirect_streambuf()
+ : next_(0), pback_size_(0), flags_(f_auto_close) { }
+
+//--------------Implementation of open, is_open and close---------------------//
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+void indirect_streambuf<T, Tr, Alloc, Mode>::open
+ (const T& t, int buffer_size, int pback_size)
+{
+ using namespace std;
+
+ // Normalize buffer sizes.
+ buffer_size =
+ (buffer_size != -1) ?
+ buffer_size :
+ iostreams::optimal_buffer_size(t);
+ pback_size =
+ (pback_size != -1) ?
+ pback_size :
+ default_pback_buffer_size;
+
+ // Construct input buffer.
+ if (can_read()) {
+ pback_size_ = (std::max)(2, pback_size); // STLPort needs 2.
+ streamsize size =
+ pback_size_ +
+ ( buffer_size ? buffer_size: 1 );
+ in().resize(size);
+ if (!shared_buffer())
+ init_get_area();
+ }
+
+ // Construct output buffer.
+ if (can_write() && !shared_buffer()) {
+ if (buffer_size != 0)
+ out().resize(buffer_size);
+ init_put_area();
+ }
+
+ storage_.reset(wrapper(t));
+ flags_ |= f_open;
+ if (can_write() && buffer_size > 1)
+ flags_ |= f_output_buffered;
+ this->set_true_eof(false);
+}
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+inline bool indirect_streambuf<T, Tr, Alloc, Mode>::is_open() const
+{ return (flags_ & f_open) != 0; }
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+void indirect_streambuf<T, Tr, Alloc, Mode>::close()
+{
+ using namespace std;
+ try { close(BOOST_IOS::in); } catch (std::exception&) { }
+ try { close(BOOST_IOS::out); } catch (std::exception&) { }
+ storage_.reset();
+ flags_ = 0;
+}
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+bool indirect_streambuf<T, Tr, Alloc, Mode>::auto_close() const
+{ return (flags_ & f_auto_close) != 0; }
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+void indirect_streambuf<T, Tr, Alloc, Mode>::set_auto_close(bool close)
+{ flags_ = (flags_ & ~f_auto_close) | (close ? f_auto_close : 0); }
+
+//--------------Implementation virtual functions------------------------------//
+
+#ifndef BOOST_IOSTREAMS_NO_LOCALE
+template<typename T, typename Tr, typename Alloc, typename Mode>
+void indirect_streambuf<T, Tr, Alloc, Mode>::imbue(const std::locale& loc)
+{
+ if (is_open()) {
+ obj().imbue(loc);
+ if (next_)
+ next_->pubimbue(loc);
+ }
+}
+#endif
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+typename indirect_streambuf<T, Tr, Alloc, Mode>::int_type
+indirect_streambuf<T, Tr, Alloc, Mode>::underflow()
+{
+ using namespace std;
+ if (!gptr()) init_get_area();
+ buffer_type& buf = in();
+ if (gptr() < egptr()) return traits_type::to_int_type(*gptr());
+
+ // Fill putback buffer.
+ streamsize keep = (std::min)( static_cast<streamsize>(gptr() - eback()),
+ pback_size_ );
+ if (keep)
+ traits_type::move( buf.data() + (pback_size_ - keep),
+ gptr() - keep, keep );
+
+ // Set pointers to reasonable values in case read throws.
+ setg( buf.data() + pback_size_ - keep,
+ buf.data() + pback_size_,
+ buf.data() + pback_size_ );
+
+ // Read from source.
+ streamsize chars =
+ obj().read(buf.data() + pback_size_, buf.size() - pback_size_, next_);
+ if (chars == -1) {
+ this->set_true_eof(true);
+ chars = 0;
+ }
+ setg(eback(), gptr(), buf.data() + pback_size_ + chars);
+ return chars != 0 ?
+ traits_type::to_int_type(*gptr()) :
+ traits_type::eof();
+}
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+typename indirect_streambuf<T, Tr, Alloc, Mode>::int_type
+indirect_streambuf<T, Tr, Alloc, Mode>::pbackfail(int_type c)
+{
+ if (gptr() != eback()) {
+ gbump(-1);
+ if (!traits_type::eq_int_type(c, traits_type::eof()))
+ *gptr() = traits_type::to_char_type(c);
+ return traits_type::not_eof(c);
+ } else {
+ throw bad_putback();
+ }
+}
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+typename indirect_streambuf<T, Tr, Alloc, Mode>::int_type
+indirect_streambuf<T, Tr, Alloc, Mode>::overflow(int_type c)
+{
+ if ( output_buffered() && pptr() == 0 ||
+ shared_buffer() && gptr() != 0 )
+ {
+ init_put_area();
+ }
+ if (!traits_type::eq_int_type(c, traits_type::eof())) {
+ if (output_buffered()) {
+ if (pptr() == epptr()) {
+ sync_impl();
+ if (pptr() == epptr())
+ return traits_type::eof();
+ }
+ *pptr() = traits_type::to_char_type(c);
+ pbump(1);
+ } else {
+ char_type d = traits_type::to_char_type(c);
+ if (obj().write(&d, 1, next_) != 1)
+ return traits_type::eof();
+ }
+ }
+ return traits_type::not_eof(c);
+}
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+int indirect_streambuf<T, Tr, Alloc, Mode>::sync()
+{
+ try { // sync() is no-throw.
+ sync_impl();
+ obj().flush(next_);
+ return 0;
+ } catch (std::exception&) { return -1; }
+}
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+bool indirect_streambuf<T, Tr, Alloc, Mode>::strict_sync()
+{
+ try { // sync() is no-throw.
+ sync_impl();
+ return obj().flush(next_);
+ } catch (std::exception&) { return false; }
+}
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+inline typename indirect_streambuf<T, Tr, Alloc, Mode>::pos_type
+indirect_streambuf<T, Tr, Alloc, Mode>::seekoff
+ (off_type off, BOOST_IOS::seekdir way, BOOST_IOS::openmode which)
+{ return seek_impl(off, way, which); }
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+inline typename indirect_streambuf<T, Tr, Alloc, Mode>::pos_type
+indirect_streambuf<T, Tr, Alloc, Mode>::seekpos
+ (pos_type sp, BOOST_IOS::openmode)
+{
+ return seek_impl( position_to_offset(sp), BOOST_IOS::beg,
+ BOOST_IOS::in | BOOST_IOS::out );
+}
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+typename indirect_streambuf<T, Tr, Alloc, Mode>::pos_type
+indirect_streambuf<T, Tr, Alloc, Mode>::seek_impl
+ (stream_offset off, BOOST_IOS::seekdir way, BOOST_IOS::openmode which)
+{
+ if (pptr() != 0)
+ this->BOOST_IOSTREAMS_PUBSYNC(); // sync() confuses VisualAge 6.
+ if (way == BOOST_IOS::cur && gptr())
+ off -= static_cast<off_type>(egptr() - gptr());
+ setg(0, 0, 0);
+ setp(0, 0);
+ return obj().seek(off, way, which, next_);
+}
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+inline void indirect_streambuf<T, Tr, Alloc, Mode>::set_next
+ (streambuf_type* next)
+{ next_ = next; }
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+inline void indirect_streambuf<T, Tr, Alloc, Mode>::close
+ (BOOST_IOS::openmode which)
+{
+ close_impl(which);
+ try { obj().close(which, next_); } catch (std::exception&) { }
+}
+
+//----------State changing functions------------------------------------------//
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+inline void indirect_streambuf<T, Tr, Alloc, Mode>::close_impl
+ (BOOST_IOS::openmode which)
+{
+ if (which == BOOST_IOS::in && (flags_ & f_input_closed) == 0) {
+ setg(0, 0, 0);
+ flags_ |= f_input_closed;
+ }
+ if (which == BOOST_IOS::out && (flags_ & f_output_closed) == 0) {
+ sync();
+ setp(0, 0);
+ flags_ |= f_output_closed;
+ }
+}
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+void indirect_streambuf<T, Tr, Alloc, Mode>::sync_impl()
+{
+ std::streamsize avail, amt;
+ if ((avail = static_cast<std::streamsize>(pptr() - pbase())) > 0) {
+ if ((amt = obj().write(pbase(), avail, next())) == avail)
+ setp(out().begin(), out().end());
+ else {
+ const char_type* ptr = pptr();
+ setp(out().begin() + amt, out().end());
+ pbump(ptr - pptr());
+ }
+ }
+}
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+void indirect_streambuf<T, Tr, Alloc, Mode>::init_get_area()
+{
+ if (shared_buffer() && pptr() != 0) {
+ sync_impl();
+ setp(0, 0);
+ }
+ setg(in().begin(), in().begin(), in().begin());
+}
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+void indirect_streambuf<T, Tr, Alloc, Mode>::init_put_area()
+{
+ using namespace std;
+ if (shared_buffer() && gptr() != 0)
+ setg(0, 0, 0);
+ if (output_buffered())
+ setp(out().begin(), out().end());
+ else
+ setp(0, 0);
+}
+
+//----------------------------------------------------------------------------//
+
+} } } // End namespaces detail, iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp> // MSVC, BCC 5.x
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_INDIRECT_STREAMBUF_HPP_INCLUDED
diff --git a/boost/boost/iostreams/detail/streambuf/linked_streambuf.hpp b/boost/boost/iostreams/detail/streambuf/linked_streambuf.hpp
new file mode 100644
index 00000000000..a221aaf64b0
--- /dev/null
+++ b/boost/boost/iostreams/detail/streambuf/linked_streambuf.hpp
@@ -0,0 +1,80 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_LINKED_STREAMBUF_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_LINKED_STREAMBUF_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <typeinfo>
+#include <boost/config.hpp> // member template friends.
+#include <boost/iostreams/detail/char_traits.hpp>
+#include <boost/iostreams/detail/ios.hpp> // openmode.
+#include <boost/iostreams/detail/streambuf.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp> // MSVC.
+
+namespace boost { namespace iostreams { namespace detail {
+
+template<typename Self, typename Ch, typename Tr, typename Alloc, typename Mode>
+class chain_base;
+
+template<typename Chain, typename Access, typename Mode> class chainbuf;
+
+#define BOOST_IOSTREAMS_USING_PROTECTED_STREAMBUF_MEMBERS(base) \
+ using base::eback; using base::gptr; using base::egptr; \
+ using base::setg; using base::gbump; using base::pbase; \
+ using base::pptr; using base::epptr; using base::setp; \
+ using base::pbump; using base::underflow; using base::pbackfail; \
+ using base::xsgetn; using base::overflow; using base::sputc; \
+ using base::xsputn; using base::sync; using base::seekoff; \
+ using base::seekpos; \
+ /**/
+
+template<typename Ch, typename Tr = BOOST_IOSTREAMS_CHAR_TRAITS(Ch) >
+class linked_streambuf : public BOOST_IOSTREAMS_BASIC_STREAMBUF(Ch, Tr) {
+protected:
+ linked_streambuf() : true_eof_(false) { }
+ void set_true_eof(bool eof) { true_eof_ = eof; }
+public:
+
+ // Should be called only after receiving an ordinary EOF indication,
+ // to confirm that it represents EOF rather than WOULD_BLOCK.
+ bool true_eof() const { return true_eof_; }
+protected:
+
+ //----------grant friendship to chain_base and chainbuf-------------------//
+
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+ template< typename Self, typename ChT, typename TrT,
+ typename Alloc, typename Mode >
+ friend class chain_base;
+ template<typename Chain, typename Mode, typename Access>
+ friend class chainbuf;
+#else
+public:
+ typedef BOOST_IOSTREAMS_BASIC_STREAMBUF(Ch, Tr) base;
+ BOOST_IOSTREAMS_USING_PROTECTED_STREAMBUF_MEMBERS(base)
+#endif
+ virtual void set_next(linked_streambuf<Ch, Tr>* /* next */) { }
+ virtual void close(BOOST_IOS::openmode) = 0;
+ virtual bool auto_close() const = 0;
+ virtual void set_auto_close(bool) = 0;
+ virtual bool strict_sync() = 0;
+ virtual const std::type_info& component_type() const = 0;
+ virtual void* component_impl() = 0;
+private:
+ bool true_eof_;
+};
+
+} } } // End namespaces detail, iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp> // MSVC.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_LINKED_STREAMBUF_HPP_INCLUDED
diff --git a/boost/boost/iostreams/detail/system_failure.hpp b/boost/boost/iostreams/detail/system_failure.hpp
new file mode 100644
index 00000000000..a4cf427a032
--- /dev/null
+++ b/boost/boost/iostreams/detail/system_failure.hpp
@@ -0,0 +1,76 @@
+// (C) Copyright Jonathan Graehl 2004.
+// (C) Copyright Jonathan Turkanis 2005.
+// 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/iostreams for documentation.
+
+// Used by mapped_file.cpp.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_SYSTEM_FAILURE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_SYSTEM_FAILURE_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <cstring>
+#include <string>
+#include <boost/config.hpp>
+#include <boost/iostreams/detail/config/windows_posix.hpp>
+#include <boost/iostreams/detail/ios.hpp> // failure.
+
+#if defined(BOOST_NO_STDC_NAMESPACE) && !defined(__LIBCOMO__)
+namespace std { using ::strlen; }
+#endif
+
+#ifdef BOOST_IOSTREAMS_WINDOWS
+# define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
+# include <windows.h>
+#else
+# include <errno.h>
+# include <string.h>
+#endif
+
+namespace boost { namespace iostreams { namespace detail {
+
+inline BOOST_IOSTREAMS_FAILURE system_failure(const char* msg)
+{
+ std::string result;
+#ifdef BOOST_IOSTREAMS_WINDOWS
+ DWORD err;
+ LPVOID lpMsgBuf;
+ if ( (err = ::GetLastError()) != NO_ERROR &&
+ ::FormatMessageA( FORMAT_MESSAGE_ALLOCATE_BUFFER |
+ FORMAT_MESSAGE_FROM_SYSTEM,
+ NULL,
+ err,
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
+ (LPSTR) &lpMsgBuf,
+ 0,
+ NULL ) != 0 )
+ {
+ result.reserve(std::strlen(msg) + 2 + std::strlen((LPSTR)lpMsgBuf));
+ result.append(msg);
+ result.append(": ");
+ result.append((LPSTR) lpMsgBuf);
+ ::LocalFree(lpMsgBuf);
+ } else {
+ result += msg;
+ }
+#else
+ const char* system_msg = errno ? strerror(errno) : "";
+ result.reserve(std::strlen(msg) + 2 + std::strlen(system_msg));
+ result.append(msg);
+ result.append(": ");
+ result.append(system_msg);
+#endif
+ return BOOST_IOSTREAMS_FAILURE(result);
+}
+
+inline void throw_system_failure(const char* msg)
+{ throw system_failure(msg); }
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_SYSTEM_FAILURE_HPP_INCLUDED
diff --git a/boost/boost/iostreams/detail/template_params.hpp b/boost/boost/iostreams/detail/template_params.hpp
new file mode 100644
index 00000000000..cbd565fbc04
--- /dev/null
+++ b/boost/boost/iostreams/detail/template_params.hpp
@@ -0,0 +1,25 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_TEMPLATE_PARAMS_HPP_INCLUDED
+
+#include <boost/preprocessor/control/expr_if.hpp>
+#include <boost/preprocessor/control/if.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+
+#define BOOST_IOSTREAMS_TEMPLATE_PARAMS(arity, param) \
+ BOOST_PP_EXPR_IF(arity, template<) \
+ BOOST_PP_ENUM_PARAMS(arity, typename param) \
+ BOOST_PP_EXPR_IF(arity, >) \
+ /**/
+
+#define BOOST_IOSTREAMS_TEMPLATE_ARGS(arity, param) \
+ BOOST_PP_EXPR_IF(arity, <) \
+ BOOST_PP_ENUM_PARAMS(arity, param) \
+ BOOST_PP_EXPR_IF(arity, >) \
+ /**/
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_BUFFERS_HPP_INCLUDED
diff --git a/boost/boost/iostreams/detail/translate_int_type.hpp b/boost/boost/iostreams/detail/translate_int_type.hpp
new file mode 100644
index 00000000000..a5062d38adf
--- /dev/null
+++ b/boost/boost/iostreams/detail/translate_int_type.hpp
@@ -0,0 +1,61 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_TRANSLATE_INT_TYPE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_TRANSLATE_INT_TYPE_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace iostreams { namespace detail {
+
+template<bool IsSame>
+struct translate_int_type_impl;
+
+//
+// Template name: translate_char.
+// Description: Translates a character or an end-of-file indicator from the
+// int_type of one character traits type to the int_type of another.
+//
+template<typename SourceTr, typename TargetTr>
+typename TargetTr::int_type
+translate_int_type(typename SourceTr::int_type c)
+{
+ typedef translate_int_type_impl<is_same<SourceTr, TargetTr>::value> impl;
+ return impl::template inner<SourceTr, TargetTr>::translate(c);
+}
+
+//----------------------------------------------------------------------------//
+
+template<>
+struct translate_int_type_impl<true> {
+ template<typename SourceTr, typename TargetTr>
+ struct inner {
+ static typename TargetTr::int_type
+ translate(typename SourceTr::int_type c) { return c; }
+ };
+};
+
+template<>
+struct translate_int_type_impl<false> {
+ template<typename SourceTr, typename TargetTr>
+ struct inner {
+ static typename TargetTr::int_type
+ translate(typename SourceTr::int_type c)
+ {
+ return SourceTr::eq_int_type(SourceTr::eof()) ?
+ TargetTr::eof() :
+ TargetTr::to_int_type(SourceTr::to_char_type(c));
+ }
+ };
+};
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_TRANSLATE_INT_TYPE_HPP_INCLUDED
diff --git a/boost/boost/iostreams/detail/vc6/close.hpp b/boost/boost/iostreams/detail/vc6/close.hpp
new file mode 100644
index 00000000000..ce3d623f07a
--- /dev/null
+++ b/boost/boost/iostreams/detail/vc6/close.hpp
@@ -0,0 +1,125 @@
+// (C) Copyright Jonathan Turkanis 2005.
+// 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/iostreams for documentation.
+
+namespace boost { namespace iostreams {
+
+namespace detail {
+
+template<typename T>
+struct close_impl;
+
+} // End namespace detail.
+
+template<typename T>
+void close(T& t, BOOST_IOS::openmode which)
+{
+ typedef typename detail::unwrapped_type<T>::type unwrapped;
+ detail::close_impl<T>::inner<unwrapped>::close(detail::unwrap(t), which);
+}
+
+template<typename T, typename Sink>
+void close(T& t, Sink& snk, BOOST_IOS::openmode which)
+{
+ typedef typename detail::unwrapped_type<T>::type unwrapped;
+ detail::close_impl<T>::inner<unwrapped>::close(detail::unwrap(t), snk, which);
+}
+
+namespace detail {
+
+//------------------Definition of close_impl----------------------------------//
+
+template<typename T>
+struct close_tag {
+ typedef typename category_of<T>::type category;
+ typedef typename
+ mpl::eval_if<
+ is_convertible<category, closable_tag>,
+ mpl::if_<
+ mpl::or_<
+ is_convertible<category, two_sequence>,
+ is_convertible<category, dual_use>
+ >,
+ two_sequence,
+ closable_tag
+ >,
+ mpl::identity<any_tag>
+ >::type type;
+};
+
+template<typename T>
+struct close_impl
+ : mpl::if_<
+ is_custom<T>,
+ operations<T>,
+ close_impl<BOOST_DEDUCED_TYPENAME close_tag<T>::type>
+ >::type
+ { };
+
+template<>
+struct close_impl<any_tag> {
+ template<typename T>
+ struct inner {
+ static void close(T& t, BOOST_IOS::openmode which)
+ {
+ if ((which & BOOST_IOS::out) != 0)
+ iostreams::flush(t);
+ }
+
+ template<typename Sink>
+ static void close(T& t, Sink& snk, BOOST_IOS::openmode which)
+ {
+ if ((which & BOOST_IOS::out) != 0) {
+ non_blocking_adapter<Sink> nb(snk);
+ iostreams::flush(t, nb);
+ }
+ }
+ };
+};
+
+template<>
+struct close_impl<closable_tag> {
+ template<typename T>
+ struct inner {
+ static void close(T& t, BOOST_IOS::openmode which)
+ {
+ typedef typename category_of<T>::type category;
+ const bool in = is_convertible<category, input>::value &&
+ !is_convertible<category, output>::value;
+ if (in == ((which & BOOST_IOS::in) != 0))
+ t.close();
+ }
+ template<typename Sink>
+ static void close(T& t, Sink& snk, BOOST_IOS::openmode which)
+ {
+ typedef typename category_of<T>::type category;
+ const bool in = is_convertible<category, input>::value &&
+ !is_convertible<category, output>::value;
+ if (in == ((which & BOOST_IOS::in) != 0)) {
+ non_blocking_adapter<Sink> nb(snk);
+ t.close(nb);
+ }
+ }
+ };
+};
+
+template<>
+struct close_impl<two_sequence> {
+ template<typename T>
+ struct inner {
+ static void close(T& t, BOOST_IOS::openmode which) { t.close(which); }
+
+ template<typename Sink>
+ static void close(T& t, Sink& snk, BOOST_IOS::openmode which)
+ {
+ non_blocking_adapter<Sink> nb(snk);
+ t.close(nb, which);
+ }
+ };
+};
+
+} // End namespace detail.
+
+} } // End namespaces iostreams, boost.
diff --git a/boost/boost/iostreams/detail/vc6/read.hpp b/boost/boost/iostreams/detail/vc6/read.hpp
new file mode 100644
index 00000000000..0e7e8027daf
--- /dev/null
+++ b/boost/boost/iostreams/detail/vc6/read.hpp
@@ -0,0 +1,237 @@
+// (C) Copyright Jonathan Turkanis 2005.
+// 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/iostreams for documentation.
+
+namespace boost { namespace iostreams {
+
+namespace detail {
+
+template<typename T>
+struct read_device_impl;
+
+template<typename T>
+struct read_filter_impl;
+
+} // End namespace detail.
+
+template<typename T>
+typename int_type_of<T>::type get(T& t)
+{
+ typedef typename detail::unwrapped_type<T>::type unwrapped;
+ return detail::read_device_impl<T>::inner<unwrapped>::get(detail::unwrap(t));
+}
+
+template<typename T>
+inline std::streamsize
+read(T& t, typename char_type_of<T>::type* s, std::streamsize n)
+{
+ typedef typename detail::unwrapped_type<T>::type unwrapped;
+ return detail::read_device_impl<T>::inner<unwrapped>::read(detail::unwrap(t), s, n);
+}
+
+template<typename T, typename Source>
+std::streamsize
+read(T& t, Source& src, typename char_type_of<T>::type* s, std::streamsize n)
+{
+ typedef typename detail::unwrapped_type<T>::type unwrapped;
+ return detail::read_filter_impl<T>::inner<unwrapped>::read(detail::unwrap(t), src, s, n);
+}
+
+template<typename T>
+bool putback(T& t, typename char_type_of<T>::type c)
+{
+ typedef typename detail::unwrapped_type<T>::type unwrapped;
+ return detail::read_device_impl<T>::inner<unwrapped>::putback(detail::unwrap(t), c);
+}
+
+//----------------------------------------------------------------------------//
+
+namespace detail {
+
+// Helper function for adding -1 as EOF indicator.
+inline std::streamsize check_eof(std::streamsize n) { return n != 0 ? n : -1; }
+
+// Helper templates for reading from streambufs.
+template<bool IsLinked>
+struct true_eof_impl;
+
+template<>
+struct true_eof_impl<true> {
+ template<typename T>
+ static bool true_eof(T& t) { return t.true_eof(); }
+};
+
+template<>
+struct true_eof_impl<false> {
+ template<typename T>
+ static bool true_eof(T& t) { return true; }
+};
+
+template<typename T>
+inline bool true_eof(T& t)
+{
+ const bool linked = is_linked<T>::value;
+ return true_eof_impl<linked>::true_eof(t);
+}
+
+//------------------Definition of read_device_impl----------------------------//
+
+template<typename T>
+struct read_device_impl
+ : mpl::if_<
+ detail::is_custom<T>,
+ operations<T>,
+ read_device_impl<
+ BOOST_DEDUCED_TYPENAME
+ detail::dispatch<
+ T, istream_tag, streambuf_tag, input
+ >::type
+ >
+ >::type
+ { };
+
+template<>
+struct read_device_impl<istream_tag> {
+ template<typename T>
+ struct inner {
+ static typename int_type_of<T>::type get(T& t)
+ { return t.get(); }
+
+ static std::streamsize
+ read(T& t, typename char_type_of<T>::type* s, std::streamsize n)
+ { return check_eof(t.rdbuf()->sgetn(s, n)); }
+
+ static bool putback(T& t, typename char_type_of<T>::type c)
+ {
+ typedef typename char_type_of<T>::type char_type;
+ typedef BOOST_IOSTREAMS_CHAR_TRAITS(char_type) traits_type;
+ return !traits_type::eq_int_type( t.rdbuf()->sputbackc(c),
+ traits_type::eof() );
+ }
+ };
+};
+
+template<>
+struct read_device_impl<streambuf_tag> {
+ template<typename T>
+ struct inner {
+ static typename int_type_of<T>::type
+ get(T& t)
+ {
+ typedef typename char_type_of<T>::type char_type;
+ typedef char_traits<char_type> traits_type;
+ typename int_type_of<T>::type c;
+ return !traits_type::is_eof(c = t.sbumpc()) ||
+ detail::true_eof(t)
+ ?
+ c : traits_type::would_block();
+ }
+
+ static std::streamsize
+ read(T& t, typename char_type_of<T>::type* s, std::streamsize n)
+ {
+ std::streamsize amt;
+ return (amt = t.sgetn(s, n)) != 0 ?
+ amt :
+ detail::true_eof(t) ?
+ -1 :
+ 0;
+ }
+
+ static bool putback(T& t, typename char_type_of<T>::type c)
+ {
+ typedef typename char_type_of<T>::type char_type;
+ typedef char_traits<char_type> traits_type;
+ return !traits_type::is_eof(t.sputbackc(c));
+ }
+ };
+};
+
+template<>
+struct read_device_impl<input> {
+ template<typename T>
+ struct inner {
+ static typename int_type_of<T>::type
+ get(T& t)
+ {
+ typedef typename char_type_of<T>::type char_type;
+ typedef char_traits<char_type> traits_type;
+ char_type c;
+ std::streamsize amt;
+ return (amt = t.read(&c, 1)) == 1 ?
+ traits_type::to_int_type(c) :
+ amt == -1 ?
+ traits_type::eof() :
+ traits_type::would_block();
+ }
+
+ template<typename T>
+ static std::streamsize
+ read(T& t, typename char_type_of<T>::type* s, std::streamsize n)
+ { return t.read(s, n); }
+
+ template<typename T>
+ static bool putback(T& t, typename char_type_of<T>::type c)
+ { // T must be Peekable.
+ return t.putback(c);
+ }
+ };
+};
+
+//------------------Definition of read_filter_impl----------------------------//
+
+template<typename T>
+struct read_filter_impl
+ : mpl::if_<
+ detail::is_custom<T>,
+ operations<T>,
+ read_filter_impl<
+ BOOST_DEDUCED_TYPENAME
+ detail::dispatch<
+ T, multichar_tag, any_tag
+ >::type
+ >
+ >::type
+ { };
+
+template<>
+struct read_filter_impl<multichar_tag> {
+ template<typename T>
+ struct inner {
+ template<typename Source>
+ static std::streamsize read
+ ( T& t, Source& src, typename char_type_of<T>::type* s,
+ std::streamsize n )
+ { return t.read(src, s, n); }
+ };
+};
+
+template<>
+struct read_filter_impl<any_tag> {
+ template<typename T>
+ struct inner {
+ template<typename Source>
+ static std::streamsize read
+ ( T& t, Source& src, typename char_type_of<T>::type* s,
+ std::streamsize n )
+ {
+ typedef typename char_type_of<T>::type char_type;
+ typedef char_traits<char_type> traits_type;
+ for (std::streamsize off = 0; off < n; ++off) {
+ typename traits_type::int_type c = t.get(src);
+ if (traits_type::is_eof(c))
+ return check_eof(off);
+ if (traits_type::would_block(c))
+ return off;
+ s[off] = traits_type::to_char_type(c);
+ }
+ return n;
+ }
+ };
+};
+
+} // End namespace detail.
+
+} } // End namespaces iostreams, boost.
diff --git a/boost/boost/iostreams/detail/vc6/write.hpp b/boost/boost/iostreams/detail/vc6/write.hpp
new file mode 100644
index 00000000000..e57d449d09c
--- /dev/null
+++ b/boost/boost/iostreams/detail/vc6/write.hpp
@@ -0,0 +1,158 @@
+// (C) Copyright Jonathan Turkanis 2005.
+// 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/iostreams for documentation.
+
+namespace boost { namespace iostreams {
+
+namespace detail {
+
+template<typename T>
+struct write_device_impl;
+
+template<typename T>
+struct write_filter_impl;
+
+} // End namespace detail.
+
+template<typename T>
+bool put(T& t, typename char_type_of<T>::type c)
+{
+ typedef typename detail::unwrapped_type<T>::type unwrapped;
+ return detail::write_device_impl<T>::inner<unwrapped>::put(detail::unwrap(t), c);
+}
+
+template<typename T>
+inline std::streamsize write
+ (T& t, const typename char_type_of<T>::type* s, std::streamsize n)
+{
+ typedef typename detail::unwrapped_type<T>::type unwrapped;
+ return detail::write_device_impl<T>::inner<unwrapped>::write(detail::unwrap(t), s, n);
+}
+
+template<typename T, typename Sink>
+inline std::streamsize
+write( T& t, Sink& snk, const typename char_type_of<T>::type* s,
+ std::streamsize n )
+{
+ typedef typename detail::unwrapped_type<T>::type unwrapped;
+ return detail::write_filter_impl<T>::inner<unwrapped>::write(detail::unwrap(t), snk, s, n);
+}
+
+namespace detail {
+
+//------------------Definition of write_device_impl---------------------------//
+
+template<typename T>
+struct write_device_impl
+ : mpl::if_<
+ is_custom<T>,
+ operations<T>,
+ write_device_impl<
+ BOOST_DEDUCED_TYPENAME
+ dispatch<
+ T, ostream_tag, streambuf_tag, output
+ >::type
+ >
+ >::type
+ { };
+
+template<>
+struct write_device_impl<ostream_tag> {
+ template<typename T>
+ struct inner {
+ static bool put(T& t, typename char_type_of<T>::type c)
+ {
+ typedef typename char_type_of<T>::type char_type;
+ typedef BOOST_IOSTREAMS_CHAR_TRAITS(char_type) traits_type;
+ return !traits_type::eq_int_type( t.rdbuf()->s.sputc(),
+ traits_type::eof() );
+ }
+
+ static std::streamsize write
+ (T& t, const typename char_type_of<T>::type* s, std::streamsize n)
+ { return t.rdbuf()->sputn(s, n); }
+ };
+};
+
+template<>
+struct write_device_impl<streambuf_tag> {
+ template<typename T>
+ struct inner {
+ static bool put(T& t, typename char_type_of<T>::type c)
+ {
+ typedef typename char_type_of<T>::type char_type;
+ typedef BOOST_IOSTREAMS_CHAR_TRAITS(char_type) traits_type;
+ return !traits_type::eq_int_type(t.sputc(c), traits_type::eof());
+ }
+
+ template<typename T>
+ static std::streamsize write
+ (T& t, const typename char_type_of<T>::type* s, std::streamsize n)
+ { return t.sputn(s, n); }
+ };
+};
+
+template<>
+struct write_device_impl<output> {
+ template<typename T>
+ struct inner {
+ static bool put(T& t, typename char_type_of<T>::type c)
+ { return t.write(&c, 1) == 1; }
+
+ template<typename T>
+ static std::streamsize
+ write(T& t, const typename char_type_of<T>::type* s, std::streamsize n)
+ { return t.write(s, n); }
+ };
+};
+
+//------------------Definition of write_filter_impl---------------------------//
+
+template<typename T>
+struct write_filter_impl
+ : mpl::if_<
+ is_custom<T>,
+ operations<T>,
+ write_filter_impl<
+ BOOST_DEDUCED_TYPENAME
+ dispatch<
+ T, multichar_tag, any_tag
+ >::type
+ >
+ >::type
+ { };
+
+template<>
+struct write_filter_impl<multichar_tag> {
+ template<typename T>
+ struct inner {
+ template<typename Sink>
+ static std::streamsize
+ write( T& t, Sink& snk, const typename char_type_of<T>::type* s,
+ std::streamsize n )
+ { return t.write(snk, s, n); }
+ };
+};
+
+template<>
+struct write_filter_impl<any_tag> {
+ template<typename T>
+ struct inner {
+ template<typename Sink>
+ static std::streamsize
+ write( T& t, Sink& snk, const typename char_type_of<T>::type* s,
+ std::streamsize n )
+ {
+ for (std::streamsize off = 0; off < n; ++off)
+ if (!t.put(snk, s[off]))
+ return off;
+ return n;
+ }
+ };
+};
+
+} // End namespace detail.
+
+} } // End namespaces iostreams, boost.
diff --git a/boost/boost/iostreams/detail/wrap_unwrap.hpp b/boost/boost/iostreams/detail/wrap_unwrap.hpp
new file mode 100644
index 00000000000..3567344a16e
--- /dev/null
+++ b/boost/boost/iostreams/detail/wrap_unwrap.hpp
@@ -0,0 +1,126 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_WRAP_UNWRAP_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_WRAP_UNWRAP_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // SFINAE, MSVC.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/detail/enable_if_stream.hpp>
+#include <boost/iostreams/traits_fwd.hpp> // is_std_io.
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/ref.hpp>
+
+namespace boost { namespace iostreams { namespace detail {
+
+//------------------Definition of wrap/unwrap traits--------------------------//
+
+template<typename T>
+struct wrapped_type
+ : mpl::if_<is_std_io<T>, reference_wrapper<T>, T>
+ { };
+
+template<typename T>
+struct unwrapped_type
+ : unwrap_reference<T>
+ { };
+
+template<typename T>
+struct unwrap_ios
+ : mpl::eval_if<
+ is_std_io<T>,
+ unwrap_reference<T>,
+ mpl::identity<T>
+ >
+ { };
+
+//------------------Definition of wrap----------------------------------------//
+
+#ifndef BOOST_NO_SFINAE //----------------------------------------------------//
+ template<typename T>
+ inline T wrap(const T& t BOOST_IOSTREAMS_DISABLE_IF_STREAM(T))
+ { return t; }
+
+ template<typename T>
+ inline typename wrapped_type<T>::type
+ wrap(T& t BOOST_IOSTREAMS_ENABLE_IF_STREAM(T)) { return boost::ref(t); }
+#else // #ifndef BOOST_NO_SFINAE //-------------------------------------------//
+ template<typename T>
+ inline typename wrapped_type<T>::type // BCC 5.x needs namespace qualification.
+ wrap_impl(const T& t, mpl::true_) { return boost::ref(const_cast<T&>(t)); }
+
+ template<typename T>
+ inline typename wrapped_type<T>::type // BCC 5.x needs namespace qualification.
+ wrap_impl(T& t, mpl::true_) { return boost::ref(t); }
+
+ template<typename T>
+ inline typename wrapped_type<T>::type
+ wrap_impl(const T& t, mpl::false_) { return t; }
+
+ template<typename T>
+ inline typename wrapped_type<T>::type
+ wrap_impl(T& t, mpl::false_) { return t; }
+
+ template<typename T>
+ inline typename wrapped_type<T>::type
+ wrap(const T& t) { return wrap_impl(t, is_std_io<T>()); }
+
+ template<typename T>
+ inline typename wrapped_type<T>::type
+ wrap(T& t) { return wrap_impl(t, is_std_io<T>()); }
+#endif // #ifndef BOOST_NO_SFINAE //------------------------------------------//
+
+//------------------Definition of unwrap--------------------------------------//
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1310) //----------------------------------//
+
+template<typename T>
+typename unwrapped_type<T>::type&
+unwrap(const reference_wrapper<T>& ref) { return ref.get(); }
+
+template<typename T>
+typename unwrapped_type<T>::type& unwrap(T& t) { return t; }
+
+template<typename T>
+const typename unwrapped_type<T>::type& unwrap(const T& t) { return t; }
+
+#else // #if !BOOST_WORKAROUND(BOOST_MSVC, < 1310) //-------------------------//
+
+// Since unwrap is a potential bottleneck, we avoid runtime tag dispatch.
+template<bool IsRefWrap>
+struct unwrap_impl;
+
+template<>
+struct unwrap_impl<true> {
+ template<typename T>
+ static typename unwrapped_type<T>::type& unwrap(const T& t)
+ { return t.get(); }
+};
+
+template<>
+struct unwrap_impl<false> {
+ template<typename T>
+ static typename unwrapped_type<T>::type& unwrap(const T& t)
+ { return const_cast<T&>(t); }
+};
+
+template<typename T>
+typename unwrapped_type<T>::type&
+unwrap(const T& t)
+{ return unwrap_impl<is_reference_wrapper<T>::value>::unwrap(t); }
+
+#endif // #if !BOOST_WORKAROUND(BOOST_MSVC, < 1310) //------------------------//
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_WRAP_UNWRAP_HPP_INCLUDED
diff --git a/boost/boost/iostreams/device/array.hpp b/boost/boost/iostreams/device/array.hpp
new file mode 100644
index 00000000000..7d23026fb4b
--- /dev/null
+++ b/boost/boost/iostreams/device/array.hpp
@@ -0,0 +1,143 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_ARRAY_HPP_INCLUDED
+#define BOOST_IOSTREAMS_ARRAY_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // BOOST_MSVC, make sure size_t is in std.
+#include <boost/detail/workaround.hpp>
+#include <cstddef> // std::size_t.
+#include <utility> // pair.
+#include <boost/iostreams/categories.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace iostreams {
+
+namespace detail {
+
+template<typename Mode, typename Ch>
+class array_adapter {
+public:
+ typedef Ch char_type;
+ typedef std::pair<char_type*, char_type*> pair_type;
+ struct category
+ : public Mode,
+ public device_tag,
+ public direct_tag
+ { };
+ array_adapter(char_type* begin, char_type* end);
+ array_adapter(char_type* begin, std::size_t length);
+ array_adapter(const char_type* begin, const char_type* end);
+ array_adapter(const char_type* begin, std::size_t length);
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ template<int N>
+ array_adapter(char_type (&ar)[N])
+ : begin_(ar), end_(ar + N)
+ { }
+#endif
+ pair_type input_sequence();
+ pair_type output_sequence();
+private:
+ char_type* begin_;
+ char_type* end_;
+};
+
+} // End namespace detail.
+
+// Local macros, #undef'd below.
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+# define BOOST_IOSTREAMS_ARRAY_CTOR(name, ch) \
+ template<int N> \
+ BOOST_PP_CAT(basic_, name)(ch (&ar)[N]) \
+ : base_type(ar) { } \
+ /**/
+#else
+# define BOOST_IOSTREAMS_ARRAY_CTOR(name, ch)
+#endif
+#define BOOST_IOSTREAMS_ARRAY(name, mode) \
+ template<typename Ch> \
+ struct BOOST_PP_CAT(basic_, name) : detail::array_adapter<mode, Ch> { \
+ private: \
+ typedef detail::array_adapter<mode, Ch> base_type; \
+ public: \
+ typedef typename base_type::char_type char_type; \
+ typedef typename base_type::category category; \
+ BOOST_PP_CAT(basic_, name)(char_type* begin, char_type* end) \
+ : base_type(begin, end) { } \
+ BOOST_PP_CAT(basic_, name)(char_type* begin, std::size_t length) \
+ : base_type(begin, length) { } \
+ BOOST_PP_CAT(basic_, name)(const char_type* begin, const char_type* end) \
+ : base_type(begin, end) { } \
+ BOOST_PP_CAT(basic_, name)(const char_type* begin, std::size_t length) \
+ : base_type(begin, length) { } \
+ BOOST_IOSTREAMS_ARRAY_CTOR(name, Ch) \
+ }; \
+ typedef BOOST_PP_CAT(basic_, name)<char> name; \
+ typedef BOOST_PP_CAT(basic_, name)<wchar_t> BOOST_PP_CAT(w, name); \
+ /**/
+BOOST_IOSTREAMS_ARRAY(array_source, input_seekable)
+BOOST_IOSTREAMS_ARRAY(array_sink, output_seekable)
+BOOST_IOSTREAMS_ARRAY(array, seekable)
+#undef BOOST_IOSTREAMS_ARRAY_CTOR
+#undef BOOST_IOSTREAMS_ARRAY
+
+
+//------------------Implementation of array_adapter---------------------------//
+
+namespace detail {
+
+template<typename Mode, typename Ch>
+array_adapter<Mode, Ch>::array_adapter
+ (char_type* begin, char_type* end)
+ : begin_(begin), end_(end)
+ { }
+
+template<typename Mode, typename Ch>
+array_adapter<Mode, Ch>::array_adapter
+ (char_type* begin, std::size_t length)
+ : begin_(begin), end_(begin + length)
+ { }
+
+template<typename Mode, typename Ch>
+array_adapter<Mode, Ch>::array_adapter
+ (const char_type* begin, const char_type* end)
+ : begin_(const_cast<char_type*>(begin)), // Treated as read-only.
+ end_(const_cast<char_type*>(end)) // Treated as read-only.
+{ BOOST_STATIC_ASSERT((!is_convertible<Mode, output>::value)); }
+
+template<typename Mode, typename Ch>
+array_adapter<Mode, Ch>::array_adapter
+ (const char_type* begin, std::size_t length)
+ : begin_(const_cast<char_type*>(begin)), // Treated as read-only.
+ end_(const_cast<char_type*>(begin) + length) // Treated as read-only.
+{ BOOST_STATIC_ASSERT((!is_convertible<Mode, output>::value)); }
+
+template<typename Mode, typename Ch>
+typename array_adapter<Mode, Ch>::pair_type
+array_adapter<Mode, Ch>::input_sequence()
+{ BOOST_STATIC_ASSERT((is_convertible<Mode, input>::value));
+ return pair_type(begin_, end_); }
+
+template<typename Mode, typename Ch>
+typename array_adapter<Mode, Ch>::pair_type
+array_adapter<Mode, Ch>::output_sequence()
+{ BOOST_STATIC_ASSERT((is_convertible<Mode, output>::value));
+ return pair_type(begin_, end_); }
+
+} // End namespace detail.
+
+//----------------------------------------------------------------------------//
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_ARRAY_HPP_INCLUDED
diff --git a/boost/boost/iostreams/device/back_inserter.hpp b/boost/boost/iostreams/device/back_inserter.hpp
new file mode 100644
index 00000000000..0a605ead099
--- /dev/null
+++ b/boost/boost/iostreams/device/back_inserter.hpp
@@ -0,0 +1,40 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_BACK_INSERTER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_BACK_INSERTER_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/iostreams/detail/ios.hpp> // streamsize.
+#include <boost/iostreams/categories.hpp>
+
+namespace boost { namespace iostreams {
+
+template<typename Container>
+class back_insert_device {
+public:
+ typedef typename Container::value_type char_type;
+ typedef sink_tag category;
+ back_insert_device(Container& cnt) : container(&cnt) { }
+ std::streamsize write(const char_type* s, std::streamsize n)
+ {
+ container->insert(container->end(), s, s + n);
+ return n;
+ }
+protected:
+ Container* container;
+};
+
+template<typename Container>
+back_insert_device<Container> back_inserter(Container& cnt)
+{ return back_insert_device<Container>(cnt); }
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_BACK_INSERTER_HPP_INCLUDED
diff --git a/boost/boost/iostreams/device/file.hpp b/boost/boost/iostreams/device/file.hpp
new file mode 100644
index 00000000000..479858271ad
--- /dev/null
+++ b/boost/boost/iostreams/device/file.hpp
@@ -0,0 +1,182 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+//
+// Contains wrappers for standard file buffers, together
+// with convenience typedefs:
+// - basic_file_source
+// - basic_file_sink
+// - basic_file
+//
+
+#ifndef BOOST_IOSTREAMS_FILE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_FILE_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#ifndef BOOST_IOSTREAMS_NO_LOCALE
+# include <locale>
+#endif
+#include <string> // pathnames, char_traits.
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/detail/ios.hpp> // openmode, seekdir, int types.
+#include <boost/iostreams/detail/fstream.hpp>
+#include <boost/iostreams/operations.hpp> // seek.
+#include <boost/shared_ptr.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp> // MSVC.
+
+namespace boost { namespace iostreams {
+
+template<typename Ch>
+class basic_file {
+public:
+ typedef Ch char_type;
+ struct category
+ : public seekable_device_tag,
+ public closable_tag,
+ public localizable_tag
+ { };
+ basic_file( const std::string& path,
+ BOOST_IOS::openmode mode =
+ BOOST_IOS::in | BOOST_IOS::out,
+ BOOST_IOS::openmode base_mode =
+ BOOST_IOS::in | BOOST_IOS::out );
+ std::streamsize read(char_type* s, std::streamsize n);
+ std::streamsize write(const char_type* s, std::streamsize n);
+ std::streampos seek( stream_offset off, BOOST_IOS::seekdir way,
+ BOOST_IOS::openmode which =
+ BOOST_IOS::in | BOOST_IOS::out );
+ void open( const std::string& path,
+ BOOST_IOS::openmode mode =
+ BOOST_IOS::in | BOOST_IOS::out,
+ BOOST_IOS::openmode base_mode =
+ BOOST_IOS::in | BOOST_IOS::out );
+ bool is_open() const;
+ void close();
+#ifndef BOOST_IOSTREAMS_NO_LOCALE
+ void imbue(const std::locale& loc) { pimpl_->file_.pubimbue(loc); }
+#endif
+private:
+ struct impl {
+ impl(const std::string& path, BOOST_IOS::openmode mode)
+ { file_.open(path.c_str(), mode); }
+ ~impl() { if (file_.is_open()) file_.close(); }
+ BOOST_IOSTREAMS_BASIC_FILEBUF(Ch) file_;
+ };
+ shared_ptr<impl> pimpl_;
+};
+
+typedef basic_file<char> file;
+typedef basic_file<wchar_t> wfile;
+
+template<typename Ch>
+struct basic_file_source : private basic_file<Ch> {
+ typedef Ch char_type;
+ struct category
+ : input_seekable,
+ device_tag,
+ closable_tag
+ { };
+ using basic_file<Ch>::read;
+ using basic_file<Ch>::seek;
+ using basic_file<Ch>::is_open;
+ using basic_file<Ch>::close;
+ basic_file_source( const std::string& path,
+ BOOST_IOS::openmode mode =
+ BOOST_IOS::in )
+ : basic_file<Ch>(path, mode & ~BOOST_IOS::out, BOOST_IOS::in)
+ { }
+ void open( const std::string& path,
+ BOOST_IOS::openmode mode = BOOST_IOS::in )
+ {
+ basic_file<Ch>::open(path, mode & ~BOOST_IOS::out, BOOST_IOS::in);
+ }
+};
+
+typedef basic_file_source<char> file_source;
+typedef basic_file_source<wchar_t> wfile_source;
+
+template<typename Ch>
+struct basic_file_sink : private basic_file<Ch> {
+ typedef Ch char_type;
+ struct category
+ : output_seekable,
+ device_tag,
+ closable_tag
+ { };
+ using basic_file<Ch>::write;
+ using basic_file<Ch>::seek;
+ using basic_file<Ch>::is_open;
+ using basic_file<Ch>::close;
+ basic_file_sink( const std::string& path,
+ BOOST_IOS::openmode mode = BOOST_IOS::out )
+ : basic_file<Ch>(path, mode & ~BOOST_IOS::in, BOOST_IOS::out)
+ { }
+ void open( const std::string& path,
+ BOOST_IOS::openmode mode = BOOST_IOS::out )
+ {
+ basic_file<Ch>::open(path, mode & ~BOOST_IOS::in, BOOST_IOS::out);
+ }
+};
+
+typedef basic_file_sink<char> file_sink;
+typedef basic_file_sink<wchar_t> wfile_sink;
+
+//------------------Implementation of basic_file------------------------------//
+
+template<typename Ch>
+basic_file<Ch>::basic_file
+ ( const std::string& path, BOOST_IOS::openmode mode,
+ BOOST_IOS::openmode base_mode )
+{
+ open(path, mode, base_mode);
+}
+
+template<typename Ch>
+inline std::streamsize basic_file<Ch>::read
+ (char_type* s, std::streamsize n)
+{
+ std::streamsize result = pimpl_->file_.sgetn(s, n);
+ return result != 0 ? result : -1;
+}
+
+template<typename Ch>
+inline std::streamsize basic_file<Ch>::write
+ (const char_type* s, std::streamsize n)
+{ return pimpl_->file_.sputn(s, n); }
+
+template<typename Ch>
+std::streampos basic_file<Ch>::seek
+ ( stream_offset off, BOOST_IOS::seekdir way,
+ BOOST_IOS::openmode )
+{ return iostreams::seek(pimpl_->file_, off, way); }
+
+template<typename Ch>
+void basic_file<Ch>::open
+ ( const std::string& path, BOOST_IOS::openmode mode,
+ BOOST_IOS::openmode base_mode )
+{
+ pimpl_.reset(new impl(path, mode | base_mode));
+}
+
+template<typename Ch>
+bool basic_file<Ch>::is_open() const { return pimpl_->file_.is_open(); }
+
+template<typename Ch>
+void basic_file<Ch>::close() { pimpl_->file_.close(); }
+
+//----------------------------------------------------------------------------//
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp> // MSVC
+
+#endif // #ifndef BOOST_IOSTREAMS_FILE_HPP_INCLUDED
diff --git a/boost/boost/iostreams/device/file_descriptor.hpp b/boost/boost/iostreams/device/file_descriptor.hpp
new file mode 100644
index 00000000000..13e1c684111
--- /dev/null
+++ b/boost/boost/iostreams/device/file_descriptor.hpp
@@ -0,0 +1,156 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+// Inspired by fdstream.hpp, (C) Copyright Nicolai M. Josuttis 2001,
+// available at http://www.josuttis.com/cppcode/fdstream.html.
+
+#ifndef BOOST_IOSTREAMS_FILE_DESCRIPTOR_HPP_INCLUDED
+#define BOOST_IOSTREAMS_FILE_DESCRIPTOR_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <string> // file pathnames.
+#include <boost/cstdint.hpp> // intmax_t.
+#include <boost/iostreams/categories.hpp> // tags.
+#include <boost/iostreams/detail/config/auto_link.hpp>
+#include <boost/iostreams/detail/config/dyn_link.hpp>
+#include <boost/iostreams/detail/config/windows_posix.hpp>
+#include <boost/iostreams/detail/ios.hpp> // openmode, seekdir, int types.
+#include <boost/iostreams/positioning.hpp>
+#include <boost/shared_ptr.hpp>
+
+// Must come last.
+#include <boost/config/abi_prefix.hpp>
+
+namespace boost { namespace iostreams {
+
+class BOOST_IOSTREAMS_DECL file_descriptor {
+public:
+#ifdef BOOST_IOSTREAMS_WINDOWS
+ typedef void* handle_type;
+#endif
+ typedef char char_type;
+ struct category
+ : seekable_device_tag,
+ closable_tag
+ { };
+ file_descriptor() : pimpl_(new impl) { }
+ explicit file_descriptor(int fd, bool close_on_exit = false)
+ : pimpl_(new impl(fd, close_on_exit))
+ { }
+#ifdef BOOST_IOSTREAMS_WINDOWS
+ explicit file_descriptor(handle_type handle, bool close_on_exit = false)
+ : pimpl_(new impl(handle, close_on_exit))
+ { }
+#endif
+ explicit file_descriptor( const std::string& path,
+ BOOST_IOS::openmode mode =
+ BOOST_IOS::in | BOOST_IOS::out,
+ BOOST_IOS::openmode base_mode =
+ BOOST_IOS::in | BOOST_IOS::out )
+ : pimpl_(new impl)
+ { open(path, mode, base_mode); }
+ void open( const std::string& path,
+ BOOST_IOS::openmode =
+ BOOST_IOS::in | BOOST_IOS::out,
+ BOOST_IOS::openmode base_mode =
+ BOOST_IOS::in | BOOST_IOS::out );
+ bool is_open() const { return pimpl_->flags_ != 0; }
+ std::streamsize read(char_type* s, std::streamsize n);
+ std::streamsize write(const char_type* s, std::streamsize n);
+ std::streampos seek(stream_offset off, BOOST_IOS::seekdir way);
+ void close();
+private:
+ struct impl {
+ impl() : fd_(-1), flags_(0) { }
+ impl(int fd, bool close_on_exit)
+ : fd_(fd), flags_(0)
+ { if (close_on_exit) flags_ |= impl::close_on_exit; }
+ #ifdef BOOST_IOSTREAMS_WINDOWS
+ impl(handle_type handle, bool close_on_exit)
+ : handle_(handle), flags_(has_handle)
+ { if (close_on_exit) flags_ |= impl::close_on_exit; }
+ #endif
+ ~impl() {
+ if (flags_ & close_on_exit) close_impl(*this);
+ }
+ enum flags {
+ close_on_exit = 1,
+ has_handle = 2,
+ append = 4
+ };
+ int fd_;
+ #ifdef BOOST_IOSTREAMS_WINDOWS
+ handle_type handle_;
+ #endif
+ int flags_;
+ };
+ friend struct impl;
+
+ static void close_impl(impl&);
+
+ shared_ptr<impl> pimpl_;
+};
+
+struct file_descriptor_source : private file_descriptor {
+#ifdef BOOST_IOSTREAMS_WINDOWS
+ typedef void* handle_type;
+#endif
+ typedef char char_type;
+ struct category : public source_tag, closable_tag { };
+ using file_descriptor::read;
+ using file_descriptor::open;
+ using file_descriptor::is_open;
+ using file_descriptor::close;
+ file_descriptor_source() { }
+ explicit file_descriptor_source(int fd, bool close_on_exit = false)
+ : file_descriptor(fd, close_on_exit)
+ { }
+#ifdef BOOST_IOSTREAMS_WINDOWS
+ explicit file_descriptor_source( handle_type handle,
+ bool close_on_exit = false )
+ : file_descriptor(handle, close_on_exit)
+ { }
+#endif
+ explicit file_descriptor_source( const std::string& path,
+ BOOST_IOS::openmode m = BOOST_IOS::in )
+ : file_descriptor(path, m & ~BOOST_IOS::out, BOOST_IOS::in)
+ { }
+};
+
+struct file_descriptor_sink : private file_descriptor {
+#ifdef BOOST_IOSTREAMS_WINDOWS
+ typedef void* handle_type;
+#endif
+ typedef char char_type;
+ struct category : public sink_tag, closable_tag { };
+ using file_descriptor::write;
+ using file_descriptor::open;
+ using file_descriptor::is_open;
+ using file_descriptor::close;
+ file_descriptor_sink() { }
+ explicit file_descriptor_sink(int fd, bool close_on_exit = false)
+ : file_descriptor(fd, close_on_exit)
+ { }
+#ifdef BOOST_IOSTREAMS_WINDOWS
+ explicit file_descriptor_sink( handle_type handle,
+ bool close_on_exit = false )
+ : file_descriptor(handle, close_on_exit)
+ { }
+#endif
+ explicit file_descriptor_sink( const std::string& path,
+ BOOST_IOS::openmode m = BOOST_IOS::out )
+ : file_descriptor(path, m & ~BOOST_IOS::in, BOOST_IOS::out)
+ { }
+};
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/config/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // #ifndef BOOST_IOSTREAMS_FILE_DESCRIPTOR_HPP_INCLUDED
diff --git a/boost/boost/iostreams/device/mapped_file.hpp b/boost/boost/iostreams/device/mapped_file.hpp
new file mode 100644
index 00000000000..38046f9a858
--- /dev/null
+++ b/boost/boost/iostreams/device/mapped_file.hpp
@@ -0,0 +1,270 @@
+// (C) Copyright Jonathan Turkanis 2003.
+// (C) Copyright Craig Henderson 2002. 'boost/memmap.hpp' from sandbox
+// 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/iostreams for documentation.
+
+//
+// This header and its accompanying source file libs/iostreams/memmap.cpp are
+// an adaptation of Craig Henderson's memmory mapped file library. The
+// interface has been revised significantly, but the underlying OS-specific
+// code is essentially the same, with some code from Boost.Filesystem
+// mixed in. (See notations in source.)
+//
+// The following changes have been made:
+//
+// 1. OS-specific code put in a .cpp file.
+// 2. Name of main class changed to mapped_file.
+// 3. mapped_file given an interface similar to std::fstream (open(),
+// is_open(), close()) and std::string (data(), size(), begin(), end()).
+// 4. An additional class readonly_mapped_file has been provided as a
+// convenience.
+// 5. [Obsolete: Error states are reported using filesystem::error_code.]
+// 6. Read-only or read-write states are specified using ios_base::openmode.
+// 7. Access to the underlying file handles and to security parameters
+// has been removed.
+//
+
+#ifndef BOOST_IOSTREAMS_MAPPED_FILE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_MAPPED_FILE_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // make sure size_t is in std.
+#include <cstddef> // size_t.
+#include <string> // pathnames.
+#include <utility> // pair.
+#include <boost/config.hpp> // BOOST_MSVC.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/close.hpp>
+#include <boost/iostreams/concepts.hpp>
+#include <boost/iostreams/detail/config/auto_link.hpp>
+#include <boost/iostreams/detail/config/dyn_link.hpp>
+#include <boost/iostreams/detail/ios.hpp> // openmode.
+#include <boost/iostreams/operations_fwd.hpp>
+#include <boost/iostreams/positioning.hpp>
+#include <boost/shared_ptr.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp>
+#include <boost/config/abi_prefix.hpp>
+
+namespace boost { namespace iostreams {
+
+namespace detail {
+
+struct mapped_file_impl;
+
+} // End namespace detail.
+
+struct mapped_file_params {
+ explicit mapped_file_params()
+ : mode(), offset(0), length(static_cast<std::size_t>(-1)),
+ new_file_size(0), hint(0)
+ { }
+ explicit mapped_file_params(const std::string& path)
+ : path(path), mode(), offset(0),
+ length(static_cast<std::size_t>(-1)),
+ new_file_size(0), hint(0)
+ { }
+ std::string path;
+ BOOST_IOS::openmode mode;
+ stream_offset offset;
+ std::size_t length;
+ stream_offset new_file_size;
+ const char* hint;
+};
+
+//------------------Definition of mapped_file_source--------------------------//
+
+class BOOST_IOSTREAMS_DECL mapped_file_source {
+private:
+ struct safe_bool_helper { int x; }; // From Bronek Kozicki.
+ typedef int safe_bool_helper::* safe_bool;
+ friend struct operations<mapped_file_source>;
+public:
+ typedef char char_type;
+ struct category
+ : public source_tag,
+ public direct_tag,
+ public closable_tag
+ { };
+ typedef std::size_t size_type;
+ typedef const char* iterator;
+ BOOST_STATIC_CONSTANT(size_type, max_length = static_cast<size_type>(-1));
+
+ mapped_file_source() { }
+ explicit mapped_file_source(mapped_file_params);
+ explicit mapped_file_source( const std::string& path,
+ size_type length = max_length,
+ boost::intmax_t offset = 0 );
+
+ //--------------Stream interface------------------------------------------//
+
+ void open(mapped_file_params params);
+ void open( const std::string& path,
+ size_type length = max_length,
+ boost::intmax_t offset = 0 );
+ bool is_open() const;
+ void close();
+
+ operator safe_bool() const;
+ bool operator!() const;
+ BOOST_IOS::openmode mode() const;
+
+ //--------------Container interface---------------------------------------//
+
+ size_type size() const;
+ const char* data() const;
+ iterator begin() const;
+ iterator end() const;
+
+ //--------------Query admissible offsets----------------------------------//
+
+ // Returns the allocation granularity for virtual memory. Values passed
+ // as offsets must be multiples of this value.
+ static int alignment();
+private:
+ friend class mapped_file;
+ typedef detail::mapped_file_impl impl_type;
+ void open_impl(mapped_file_params);
+
+ boost::shared_ptr<impl_type> pimpl_;
+};
+
+//------------------Definition of mapped_file---------------------------------//
+
+class BOOST_IOSTREAMS_DECL mapped_file {
+private:
+ typedef mapped_file_source delegate_type;
+ delegate_type delegate_;
+ friend struct operations<mapped_file>;
+public:
+ typedef char char_type;
+ struct category
+ : public seekable_device_tag,
+ public direct_tag,
+ public closable_tag
+ { };
+ typedef mapped_file_source::size_type size_type;
+ typedef char* iterator;
+ typedef const char* const_iterator;
+ BOOST_STATIC_CONSTANT(size_type, max_length = delegate_type::max_length);
+ mapped_file() { }
+ explicit mapped_file(mapped_file_params p);
+ explicit mapped_file( const std::string& path,
+ BOOST_IOS::openmode mode =
+ BOOST_IOS::in | BOOST_IOS::out,
+ size_type length = max_length,
+ stream_offset offset = 0 );
+
+ //--------------Conversion to readonly_mapped_file------------------------//
+
+ operator mapped_file_source&() { return delegate_; }
+ operator const mapped_file_source&() const { return delegate_; }
+
+ //--------------Stream interface------------------------------------------//
+
+ void open(mapped_file_params p);
+ void open( const std::string& path,
+ BOOST_IOS::openmode mode =
+ BOOST_IOS::in | BOOST_IOS::out,
+ size_type length = max_length,
+ stream_offset offset = 0 );
+ bool is_open() const { return delegate_.is_open(); }
+ void close() { delegate_.close(); }
+ operator delegate_type::safe_bool() const { return delegate_; }
+ bool operator!() const { return !is_open(); }
+ BOOST_IOS::openmode mode() const { return delegate_.mode(); }
+
+ //--------------Container interface---------------------------------------//
+
+ size_type size() const { return delegate_.size(); }
+ char* data() const
+ {
+ return (mode() & BOOST_IOS::out) ?
+ const_cast<char*>(delegate_.data()) :
+ 0;
+ }
+ const char* const_data() const { return delegate_.data(); }
+ iterator begin() const { return data(); }
+ const_iterator const_begin() const { return data(); }
+ iterator end() const { return data() + size(); }
+ const_iterator const_end() const { return data() + size(); }
+
+ //--------------Query admissible offsets----------------------------------//
+
+ // Returns the allocation granularity for virtual memory. Values passed
+ // as offsets must be multiples of this value.
+ static int alignment() { return mapped_file_source::alignment(); }
+};
+
+struct BOOST_IOSTREAMS_DECL mapped_file_sink : private mapped_file {
+ friend struct operations<mapped_file_sink>;
+ typedef char char_type;
+ struct category
+ : public sink_tag,
+ public direct_tag,
+ public closable_tag
+ { };
+ using mapped_file::close;
+ explicit mapped_file_sink(mapped_file_params p);
+ explicit mapped_file_sink( const std::string& path,
+ size_type length = max_length,
+ boost::intmax_t offset = 0 );
+ void open(mapped_file_params p);
+ void open( const std::string& path,
+ size_type length = max_length,
+ boost::intmax_t offset = 0 );
+};
+
+//------------------Specialization of direct_impl-----------------------------//
+
+template<>
+struct operations<boost::iostreams::mapped_file_source>
+ : detail::close_impl<closable_tag>
+{
+ static std::pair<char*, char*>
+ input_sequence(boost::iostreams::mapped_file_source& src)
+ {
+ return std::make_pair( const_cast<char*>(src.begin()),
+ const_cast<char*>(src.end()) );
+ }
+};
+
+template<>
+struct operations<boost::iostreams::mapped_file_sink>
+ : detail::close_impl<closable_tag>
+{
+ static std::pair<char*, char*>
+ output_sequence(boost::iostreams::mapped_file_sink& sink)
+ {
+ return std::make_pair(sink.begin(), sink.end());
+ }
+};
+
+template<>
+struct operations<boost::iostreams::mapped_file>
+ : detail::close_impl<closable_tag>
+{
+ static std::pair<char*, char*>
+ input_sequence(boost::iostreams::mapped_file& file)
+ {
+ return std::make_pair(file.begin(), file.end());
+ }
+ static std::pair<char*, char*>
+ output_sequence(boost::iostreams::mapped_file& file)
+ {
+ return std::make_pair(file.begin(), file.end());
+ }
+};
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/config/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+#include <boost/iostreams/detail/config/enable_warnings.hpp> // MSVC.
+
+#endif // #ifndef BOOST_IOSTREAMS_MAPPED_FILE_HPP_INCLUDED
diff --git a/boost/boost/iostreams/device/null.hpp b/boost/boost/iostreams/device/null.hpp
new file mode 100644
index 00000000000..c17704bd6c7
--- /dev/null
+++ b/boost/boost/iostreams/device/null.hpp
@@ -0,0 +1,64 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+// Inspired by Daryle Walker's nullbuf from his More I/O submission.
+
+#ifndef BOOST_IOSTREAMS_NULL_HPP_INCLUDED
+#define BOOST_IOSTREAMS_NULL_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/detail/ios.hpp> // openmode, streamsize.
+#include <boost/iostreams/positioning.hpp>
+
+namespace boost { namespace iostreams {
+
+template<typename Ch, typename Mode>
+class basic_null_device {
+public:
+ typedef Ch char_type;
+ struct category
+ : public Mode,
+ public device_tag,
+ public closable_tag
+ { };
+ std::streamsize read(Ch*, std::streamsize) { return 0; }
+ std::streamsize write(const Ch*, std::streamsize n) { return n; }
+ std::streampos seek( stream_offset, BOOST_IOS::seekdir,
+ BOOST_IOS::openmode =
+ BOOST_IOS::in | BOOST_IOS::out )
+ { return -1; }
+ void close(BOOST_IOS::openmode = BOOST_IOS::in | BOOST_IOS::out) { }
+};
+
+template<typename Ch>
+struct basic_null_source : private basic_null_device<Ch, input> {
+ typedef Ch char_type;
+ typedef source_tag category;
+ using basic_null_device<Ch, input>::read;
+ using basic_null_device<Ch, input>::close;
+};
+
+typedef basic_null_source<char> null_source;
+typedef basic_null_source<wchar_t> wnull_source;
+
+template<typename Ch>
+struct basic_null_sink : private basic_null_device<Ch, output> {
+ typedef Ch char_type;
+ typedef sink_tag category;
+ using basic_null_device<Ch, output>::write;
+ using basic_null_device<Ch, output>::close;
+};
+
+typedef basic_null_sink<char> null_sink;
+typedef basic_null_sink<wchar_t> wnull_sink;
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_NULL_HPP_INCLUDED
diff --git a/boost/boost/iostreams/filter/aggregate.hpp b/boost/boost/iostreams/filter/aggregate.hpp
new file mode 100644
index 00000000000..88b543282f7
--- /dev/null
+++ b/boost/boost/iostreams/filter/aggregate.hpp
@@ -0,0 +1,165 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_AGGREGATE_FILTER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_AGGREGATE_FILTER_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <algorithm> // copy, min.
+#include <cassert>
+#include <iterator> // back_inserter
+#include <vector>
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/detail/char_traits.hpp>
+#include <boost/iostreams/detail/closer.hpp>
+#include <boost/iostreams/detail/ios.hpp> // openmode, streamsize.
+#include <boost/iostreams/pipeline.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp> // MSVC.
+
+namespace boost { namespace iostreams {
+
+//
+// Template name: aggregate_filter.
+// Template paramters:
+// Ch - The character type.
+// Alloc - The allocator type.
+// Description: Utility for defining DualUseFilters which filter an
+// entire stream at once. To use, override the protected virtual
+// member do_filter.
+// Note: This filter should not be copied while it is in use.
+//
+template<typename Ch, typename Alloc = std::allocator<Ch> >
+class aggregate_filter {
+public:
+ typedef Ch char_type;
+ struct category
+ : dual_use,
+ filter_tag,
+ multichar_tag,
+ closable_tag
+ { };
+ aggregate_filter() : ptr_(0), state_(0) { }
+ virtual ~aggregate_filter() { }
+
+ template<typename Source>
+ std::streamsize read(Source& src, char_type* s, std::streamsize n)
+ {
+ using namespace std;
+ assert(!(state_ & f_write));
+ state_ |= f_read;
+ if (!(state_ & f_eof))
+ do_read(src);
+ streamsize amt =
+ (std::min)(n, static_cast<streamsize>(data_.size() - ptr_));
+ if (amt) {
+ BOOST_IOSTREAMS_CHAR_TRAITS(char_type)::copy(s, &data_[ptr_], amt);
+ ptr_ += amt;
+ }
+ return detail::check_eof(amt);
+ }
+
+ template<typename Sink>
+ std::streamsize write(Sink&, const char_type* s, std::streamsize n)
+ {
+ assert(!(state_ & f_read));
+ state_ |= f_write;
+ data_.insert(data_.end(), s, s + n);
+ return n;
+ }
+
+ // Give detail::closer permission to call close().
+ typedef aggregate_filter<Ch, Alloc> self;
+ friend struct detail::closer<self>;
+
+ template<typename Sink>
+ void close(Sink& sink, BOOST_IOS::openmode which)
+ {
+ if ((state_ & f_read) && (which & BOOST_IOS::in))
+ close();
+
+ if ((state_ & f_write) && (which & BOOST_IOS::out)) {
+ detail::closer<self> closer(*this);
+ vector_type filtered;
+ do_filter(data_, filtered);
+ do_write(
+ sink, &filtered[0],
+ static_cast<std::streamsize>(filtered.size())
+ );
+ }
+ }
+
+protected:
+ typedef std::vector<Ch, Alloc> vector_type;
+ typedef typename vector_type::size_type size_type;
+private:
+ virtual void do_filter(const vector_type& src, vector_type& dest) = 0;
+ virtual void do_close() { }
+
+ template<typename Source>
+ void do_read(Source& src)
+ {
+ using std::streamsize;
+ vector_type data;
+ while (true) {
+ const streamsize size = default_device_buffer_size;
+ Ch buf[size];
+ streamsize amt;
+ if ((amt = boost::iostreams::read(src, buf, size)) == -1)
+ break;
+ data.insert(data.end(), buf, buf + amt);
+ }
+ do_filter(data, data_);
+ state_ |= f_eof;
+ }
+
+ template<typename Sink>
+ void do_write(Sink& sink, const char* s, std::streamsize n)
+ {
+ typedef typename iostreams::category_of<Sink>::type category;
+ typedef is_convertible<category, output> can_write;
+ do_write(sink, s, n, can_write());
+ }
+
+ template<typename Sink>
+ void do_write(Sink& sink, const char* s, std::streamsize n, mpl::true_)
+ { iostreams::write(sink, s, n); }
+
+ template<typename Sink>
+ void do_write(Sink&, const char*, std::streamsize, mpl::false_) { }
+
+ void close()
+ {
+ data_.clear();
+ ptr_ = 0;
+ state_ = 0;
+ do_close();
+ }
+
+ enum flag_type {
+ f_read = 1,
+ f_write = f_read << 1,
+ f_eof = f_write << 1
+ };
+
+ // Note: typically will not be copied while vector contains data.
+ vector_type data_;
+ size_type ptr_;
+ int state_;
+};
+BOOST_IOSTREAMS_PIPABLE(aggregate_filter, 1)
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp> // MSVC.
+
+#endif // #ifndef BOOST_IOSTREAMS_AGGREGATE_FILTER_HPP_INCLUDED
diff --git a/boost/boost/iostreams/filter/bzip2.hpp b/boost/boost/iostreams/filter/bzip2.hpp
new file mode 100644
index 00000000000..8d43fa6b249
--- /dev/null
+++ b/boost/boost/iostreams/filter/bzip2.hpp
@@ -0,0 +1,387 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+// Note: custom allocators are not supported on VC6, since that compiler
+// had trouble finding the function zlib_base::do_init.
+
+#ifndef BOOST_IOSTREAMS_BZIP2_HPP_INCLUDED
+#define BOOST_IOSTREAMS_BZIP2_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <cassert>
+#include <memory> // allocator.
+#include <new> // bad_alloc.
+#include <boost/config.hpp> // MSVC, STATIC_CONSTANT, DEDUCED_TYPENAME, DINKUM.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/constants.hpp> // buffer size.
+#include <boost/iostreams/detail/config/auto_link.hpp>
+#include <boost/iostreams/detail/config/bzip2.hpp>
+#include <boost/iostreams/detail/config/dyn_link.hpp>
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#include <boost/iostreams/detail/ios.hpp> // failure, streamsize.
+#include <boost/iostreams/filter/symmetric.hpp>
+#include <boost/iostreams/pipeline.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+// Must come last.
+#ifdef BOOST_MSVC
+# pragma warning(push)
+# pragma warning(disable:4251 4231 4660)
+#endif
+#include <boost/config/abi_prefix.hpp>
+
+// Temporary fix.
+#undef small
+
+namespace boost { namespace iostreams {
+
+namespace bzip2 {
+
+ // Typedefs.
+
+typedef void* (*alloc_func)(void*, int, int);
+typedef void (*free_func)(void*, void*);
+
+ // Status codes
+
+BOOST_IOSTREAMS_DECL extern const int ok;
+BOOST_IOSTREAMS_DECL extern const int run_ok;
+BOOST_IOSTREAMS_DECL extern const int flush_ok;
+BOOST_IOSTREAMS_DECL extern const int finish_ok;
+BOOST_IOSTREAMS_DECL extern const int stream_end;
+BOOST_IOSTREAMS_DECL extern const int sequence_error;
+BOOST_IOSTREAMS_DECL extern const int param_error;
+BOOST_IOSTREAMS_DECL extern const int mem_error;
+BOOST_IOSTREAMS_DECL extern const int data_error;
+BOOST_IOSTREAMS_DECL extern const int data_error_magic;
+BOOST_IOSTREAMS_DECL extern const int io_error;
+BOOST_IOSTREAMS_DECL extern const int unexpected_eof;
+BOOST_IOSTREAMS_DECL extern const int outbuff_full;
+BOOST_IOSTREAMS_DECL extern const int config_error;
+
+ // Action codes
+
+BOOST_IOSTREAMS_DECL extern const int finish;
+BOOST_IOSTREAMS_DECL extern const int run;
+
+ // Default values
+
+const int default_block_size = 9;
+const int default_work_factor = 30;
+const bool default_small = false;
+
+} // End namespace bzip2.
+
+//
+// Class name: bzip2_params.
+// Description: Encapsulates the parameters passed to deflateInit2
+// to customize compression.
+//
+struct bzip2_params {
+
+ // Non-explicit constructor for compression.
+ bzip2_params( int block_size = bzip2::default_block_size,
+ int work_factor = bzip2::default_work_factor )
+ : block_size(block_size), work_factor(work_factor)
+ { }
+
+ // Constructor for decompression.
+ bzip2_params(bool small)
+ : small(small), work_factor(0)
+ { }
+
+ union {
+ int block_size; // For compression.
+ bool small; // For decompression.
+ };
+ int work_factor;
+};
+
+//
+// Class name: bzip2_error.
+// Description: Subclass of std::ios_base::failure thrown to indicate
+// bzip2 errors other than out-of-memory conditions.
+//
+class BOOST_IOSTREAMS_DECL bzip2_error : public BOOST_IOSTREAMS_FAILURE {
+public:
+ explicit bzip2_error(int error);
+ int error() const { return error_; }
+ static void check(int error);
+private:
+ int error_;
+};
+
+namespace detail {
+
+template<typename Alloc>
+struct bzip2_allocator_traits {
+#ifndef BOOST_NO_STD_ALLOCATOR
+ typedef typename Alloc::template rebind<char>::other type;
+#else
+ typedef std::allocator<char> type;
+#endif
+};
+
+template< typename Alloc,
+ typename Base = // VC6 workaround (C2516)
+ BOOST_DEDUCED_TYPENAME bzip2_allocator_traits<Alloc>::type >
+struct bzip2_allocator : private Base {
+private:
+ typedef typename Base::size_type size_type;
+public:
+ BOOST_STATIC_CONSTANT(bool, custom =
+ (!is_same<std::allocator<char>, Base>::value));
+ typedef typename bzip2_allocator_traits<Alloc>::type allocator_type;
+ static void* allocate(void* self, int items, int size);
+ static void deallocate(void* self, void* address);
+};
+
+class BOOST_IOSTREAMS_DECL bzip2_base {
+public:
+ typedef char char_type;
+protected:
+ bzip2_base(const bzip2_params& params);
+ ~bzip2_base();
+ bzip2_params& params() { return params_; }
+ bool& ready() { return ready_; }
+ template<typename Alloc>
+ void init( bool compress,
+ bzip2_allocator<Alloc>& alloc )
+ {
+ bool custom = bzip2_allocator<Alloc>::custom;
+ do_init( compress,
+ #if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ custom ? bzip2_allocator<Alloc>::allocate : 0,
+ custom ? bzip2_allocator<Alloc>::deallocate : 0,
+ #endif
+ custom ? &alloc : 0 );
+ }
+ void before( const char*& src_begin, const char* src_end,
+ char*& dest_begin, char* dest_end );
+ void after(const char*& src_begin, char*& dest_begin);
+ int compress(int action);
+ int decompress();
+ void end(bool compress);
+private:
+ void do_init( bool compress,
+ #if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ bzip2::alloc_func,
+ bzip2::free_func,
+ #endif
+ void* derived );
+ bzip2_params params_;
+ void* stream_; // Actual type: bz_stream*.
+ bool ready_;
+};
+
+//
+// Template name: bzip2_compressor_impl
+// Description: Model of SymmetricFilter implementing compression by
+// delegating to the libbzip2 function BZ_bzCompress.
+//
+template<typename Alloc = std::allocator<char> >
+class bzip2_compressor_impl
+ : public bzip2_base,
+ #if BOOST_WORKAROUND(__BORLANDC__, < 0x600)
+ public
+ #endif
+ bzip2_allocator<Alloc>
+{
+public:
+ bzip2_compressor_impl(const bzip2_params&);
+ bool filter( const char*& src_begin, const char* src_end,
+ char*& dest_begin, char* dest_end, bool flush );
+ void close();
+private:
+ void init();
+};
+
+//
+// Template name: bzip2_compressor
+// Description: Model of SymmetricFilter implementing decompression by
+// delegating to the libbzip2 function BZ_bzDecompress.
+//
+template<typename Alloc = std::allocator<char> >
+class bzip2_decompressor_impl
+ : public bzip2_base,
+ #if BOOST_WORKAROUND(__BORLANDC__, < 0x600)
+ public
+ #endif
+ bzip2_allocator<Alloc>
+{
+public:
+ bzip2_decompressor_impl(bool small = bzip2::default_small);
+ bool filter( const char*& begin_in, const char* end_in,
+ char*& begin_out, char* end_out, bool flush );
+ void close();
+private:
+ void init();
+ bool eof_; // Guard to make sure filter() isn't called after it returns false.
+};
+
+} // End namespace detail.
+
+//
+// Template name: bzip2_compressor
+// Description: Model of InputFilter and OutputFilter implementing
+// compression using libbzip2.
+//
+template<typename Alloc = std::allocator<char> >
+struct basic_bzip2_compressor
+ : symmetric_filter<detail::bzip2_compressor_impl<Alloc>, Alloc>
+{
+private:
+ typedef detail::bzip2_compressor_impl<Alloc> impl_type;
+ typedef symmetric_filter<impl_type, Alloc> base_type;
+public:
+ typedef typename base_type::char_type char_type;
+ typedef typename base_type::category category;
+ basic_bzip2_compressor( const bzip2_params& = bzip2::default_block_size,
+ int buffer_size = default_device_buffer_size );
+};
+BOOST_IOSTREAMS_PIPABLE(basic_bzip2_compressor, 1)
+
+typedef basic_bzip2_compressor<> bzip2_compressor;
+
+//
+// Template name: bzip2_decompressor
+// Description: Model of InputFilter and OutputFilter implementing
+// decompression using libbzip2.
+//
+template<typename Alloc = std::allocator<char> >
+struct basic_bzip2_decompressor
+ : symmetric_filter<detail::bzip2_decompressor_impl<Alloc>, Alloc>
+{
+private:
+ typedef detail::bzip2_decompressor_impl<Alloc> impl_type;
+ typedef symmetric_filter<impl_type, Alloc> base_type;
+public:
+ typedef typename base_type::char_type char_type;
+ typedef typename base_type::category category;
+ basic_bzip2_decompressor( bool small = bzip2::default_small,
+ int buffer_size = default_device_buffer_size );
+};
+BOOST_IOSTREAMS_PIPABLE(basic_bzip2_decompressor, 1)
+
+typedef basic_bzip2_decompressor<> bzip2_decompressor;
+
+//----------------------------------------------------------------------------//
+
+//------------------Implementation of bzip2_allocator-------------------------//
+
+namespace detail {
+
+template<typename Alloc, typename Base>
+void* bzip2_allocator<Alloc, Base>::allocate(void* self, int items, int size)
+{
+ size_type len = items * size;
+ char* ptr =
+ static_cast<allocator_type*>(self)->allocate
+ (len + sizeof(size_type)
+ #if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1)
+ , (char*)0
+ #endif
+ );
+ *reinterpret_cast<size_type*>(ptr) = len;
+ return ptr + sizeof(size_type);
+}
+
+template<typename Alloc, typename Base>
+void bzip2_allocator<Alloc, Base>::deallocate(void* self, void* address)
+{
+ char* ptr = reinterpret_cast<char*>(address) - sizeof(size_type);
+ size_type len = *reinterpret_cast<size_type*>(ptr) + sizeof(size_type);
+ static_cast<allocator_type*>(self)->deallocate(ptr, len);
+}
+
+//------------------Implementation of bzip2_compressor_impl-------------------//
+
+template<typename Alloc>
+bzip2_compressor_impl<Alloc>::bzip2_compressor_impl(const bzip2_params& p)
+ : bzip2_base(p) { }
+
+template<typename Alloc>
+bool bzip2_compressor_impl<Alloc>::filter
+ ( const char*& src_begin, const char* src_end,
+ char*& dest_begin, char* dest_end, bool flush )
+{
+ if (!ready()) init();
+ before(src_begin, src_end, dest_begin, dest_end);
+ int result = compress(flush ? bzip2::finish : bzip2::run);
+ after(src_begin, dest_begin);
+ bzip2_error::check(result);
+ return result != bzip2::stream_end;
+}
+
+template<typename Alloc>
+void bzip2_compressor_impl<Alloc>::close()
+{
+ end(true);
+}
+
+template<typename Alloc>
+inline void bzip2_compressor_impl<Alloc>::init()
+{ bzip2_base::init(true, static_cast<bzip2_allocator<Alloc>&>(*this)); }
+
+//------------------Implementation of bzip2_decompressor_impl-----------------//
+
+template<typename Alloc>
+bzip2_decompressor_impl<Alloc>::bzip2_decompressor_impl(bool small)
+ : bzip2_base(bzip2_params(small)), eof_(false) { }
+
+template<typename Alloc>
+bool bzip2_decompressor_impl<Alloc>::filter
+ ( const char*& src_begin, const char* src_end,
+ char*& dest_begin, char* dest_end, bool /* flush */ )
+{
+ if (!ready())
+ init();
+ if (eof_)
+ return false;
+ before(src_begin, src_end, dest_begin, dest_end);
+ int result = decompress();
+ after(src_begin, dest_begin);
+ bzip2_error::check(result);
+ return !(eof_ = result == bzip2::stream_end);
+}
+
+template<typename Alloc>
+void bzip2_decompressor_impl<Alloc>::close() { end(false); eof_ = false; }
+
+template<typename Alloc>
+inline void bzip2_decompressor_impl<Alloc>::init()
+{ bzip2_base::init(false, static_cast<bzip2_allocator<Alloc>&>(*this)); }
+} // End namespace detail.
+
+//------------------Implementation of bzip2_decompressor----------------------//
+
+template<typename Alloc>
+basic_bzip2_compressor<Alloc>::basic_bzip2_compressor
+ (const bzip2_params& p, int buffer_size)
+ : base_type(buffer_size, p)
+ { }
+
+//------------------Implementation of bzip2_decompressor----------------------//
+
+template<typename Alloc>
+basic_bzip2_decompressor<Alloc>::basic_bzip2_decompressor
+ (bool small, int buffer_size)
+ : base_type(buffer_size, small)
+ { }
+
+//----------------------------------------------------------------------------//
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/config/abi_suffix.hpp> // Pops abi_suffix.hpp pragmas.
+#ifdef BOOST_MSVC
+# pragma warning(pop)
+#endif
+
+#endif // #ifndef BOOST_IOSTREAMS_BZIP2_HPP_INCLUDED
diff --git a/boost/boost/iostreams/filter/counter.hpp b/boost/boost/iostreams/filter/counter.hpp
new file mode 100644
index 00000000000..e886b67beab
--- /dev/null
+++ b/boost/boost/iostreams/filter/counter.hpp
@@ -0,0 +1,81 @@
+// (C) Copyright Jonathan Turkanis 2005.
+// 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_COUNTER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_COUNTER_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <algorithm> // count.
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/char_traits.hpp>
+#include <boost/iostreams/operations.hpp>
+#include <boost/iostreams/pipeline.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp> // VC7.1 C4244.
+
+namespace boost { namespace iostreams {
+
+//
+// Template name: basic_counter.
+// Template paramters:
+// Ch - The character type.
+// Description: Filter which counts lines and characters.
+//
+template<typename Ch>
+class basic_counter {
+public:
+ typedef Ch char_type;
+ struct category
+ : dual_use,
+ filter_tag,
+ multichar_tag,
+ optimally_buffered_tag
+ { };
+ explicit basic_counter(int first_line = 0, int first_char = 0)
+ : lines_(first_line), chars_(first_char)
+ { }
+ int lines() const { return lines_; }
+ int characters() const { return chars_; }
+ std::streamsize optimal_buffer_size() const { return 0; }
+
+ template<typename Source>
+ std::streamsize read(Source& src, char_type* s, std::streamsize n)
+ {
+ std::streamsize result = iostreams::read(src, s, n);
+ if (result == -1)
+ return -1;
+ lines_ += std::count(s, s + result, char_traits<Ch>::newline());
+ chars_ += result;
+ return result;
+ }
+
+ template<typename Sink>
+ std::streamsize write(Sink& snk, const char_type* s, std::streamsize n)
+ {
+ std::streamsize result = iostreams::write(snk, s, n);
+ lines_ += std::count(s, s + result, char_traits<Ch>::newline());
+ chars_ += result;
+ return result;
+ }
+private:
+ int lines_;
+ int chars_;
+};
+BOOST_IOSTREAMS_PIPABLE(basic_counter, 1)
+
+
+typedef basic_counter<char> counter;
+typedef basic_counter<wchar_t> wcounter;
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_COUNTER_HPP_INCLUDED
diff --git a/boost/boost/iostreams/filter/gzip.hpp b/boost/boost/iostreams/filter/gzip.hpp
new file mode 100644
index 00000000000..8eee546db5b
--- /dev/null
+++ b/boost/boost/iostreams/filter/gzip.hpp
@@ -0,0 +1,594 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+// Contains the definitions of the class templates gzip_compressor and
+// gzip_decompressor for reading and writing files in the gzip file format
+// (RFC 1952). Based in part on work of Jonathan de Halleux; see [...]
+
+#ifndef BOOST_IOSTREAMS_GZIP_HPP_INCLUDED
+#define BOOST_IOSTREAMS_GZIP_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // STATIC_CONSTANT, STDC_NAMESPACE,
+ // DINKUMWARE_STDLIB, __STL_CONFIG_H.
+#include <algorithm> // min.
+#include <cstdio> // EOF.
+#include <cstddef> // size_t.
+#include <ctime> // std::time_t.
+#include <memory> // allocator.
+#include <boost/config.hpp> // Put size_t in std.
+#include <boost/detail/workaround.hpp>
+#include <boost/cstdint.hpp> // uint8_t, uint32_t.
+#include <boost/iostreams/constants.hpp> // buffer size.
+#include <boost/iostreams/detail/adapter/non_blocking_adapter.hpp>
+#include <boost/iostreams/detail/adapter/range_adapter.hpp>
+#include <boost/iostreams/detail/char_traits.hpp>
+#include <boost/iostreams/detail/ios.hpp> // failure.
+#include <boost/iostreams/operations.hpp>
+#include <boost/iostreams/device/back_inserter.hpp>
+#include <boost/iostreams/filter/zlib.hpp>
+#include <boost/iostreams/pipeline.hpp>
+
+// Must come last.
+#if defined(BOOST_MSVC)
+# pragma warning(push)
+# pragma warning(disable: 4309) // Truncation of constant value.
+#endif
+
+#ifdef BOOST_NO_STDC_NAMESPACE
+namespace std { using ::time_t; }
+#endif
+
+namespace boost { namespace iostreams {
+
+namespace gzip {
+
+using namespace boost::iostreams::zlib;
+
+ // Error codes used by gzip_error.
+
+const int zlib_error = 1;
+const int bad_crc = 2; // Recorded crc doesn't match data.
+const int bad_length = 3; // Recorded length doesn't match data.
+const int bad_header = 4; // Malformed header.
+const int bad_footer = 5; // Malformed footer.
+
+namespace magic {
+
+ // Magic numbers used by gzip header.
+
+const int id1 = 0x1f;
+const int id2 = 0x8b;
+
+} // End namespace magic.
+
+namespace method {
+
+ // Codes used for the 'CM' byte of the gzip header.
+
+const int deflate = 8;
+
+} // End namespace method.
+
+namespace flags {
+
+ // Codes used for the 'FLG' byte of the gzip header.
+
+const int text = 1;
+const int header_crc = 2;
+const int extra = 4;
+const int name = 8;
+const int comment = 16;
+
+} // End namespace flags.
+
+namespace extra_flags {
+
+ // Codes used for the 'XFL' byte of the gzip header.
+
+const int best_compression = 2;
+const int best_speed = 4;
+
+} // End namespace extra_flags.
+
+ // Codes used for the 'OS' byte of the gzip header.
+
+const int os_fat = 0;
+const int os_amiga = 1;
+const int os_vms = 2;
+const int os_unix = 3;
+const int os_vm_cms = 4;
+const int os_atari = 5;
+const int os_hpfs = 6;
+const int os_macintosh = 7;
+const int os_z_system = 8;
+const int os_cp_m = 9;
+const int os_tops_20 = 10;
+const int os_ntfs = 11;
+const int os_qdos = 12;
+const int os_acorn = 13;
+const int os_unknown = 255;
+
+} // End namespace gzip.
+
+//
+// Class name: gzip_params.
+// Description: Subclass of zlib_params with an additional field
+// representing a file name.
+//
+struct gzip_params : zlib_params {
+
+ // Non-explicit constructor.
+ gzip_params( int level = gzip::default_compression,
+ int method = gzip::deflated,
+ int window_bits = gzip::default_window_bits,
+ int mem_level = gzip::default_mem_level,
+ int strategy = gzip::default_strategy,
+ std::string file_name = "",
+ std::string comment = "",
+ std::time_t mtime = 0 )
+ : zlib_params(level, method, window_bits, mem_level, strategy),
+ file_name(file_name), mtime(mtime)
+ { }
+ std::string file_name;
+ std::string comment;
+ std::time_t mtime;
+};
+
+//
+// Class name: gzip_error.
+// Description: Subclass of std::ios_base::failure thrown to indicate
+// zlib errors other than out-of-memory conditions.
+//
+class gzip_error : public BOOST_IOSTREAMS_FAILURE {
+public:
+ explicit gzip_error(int error)
+ : BOOST_IOSTREAMS_FAILURE("gzip error"),
+ error_(error), zlib_error_code_(zlib::okay) { }
+ explicit gzip_error(const zlib_error& e)
+ : BOOST_IOSTREAMS_FAILURE("gzip error"),
+ error_(gzip::zlib_error), zlib_error_code_(e.error())
+ { }
+ int error() const { return error_; }
+ int zlib_error_code() const { return zlib_error_code_; }
+private:
+ int error_;
+ int zlib_error_code_;
+};
+
+//
+// Template name: gzip_compressor
+// Description: Model of OutputFilter implementing compression in the
+// gzip format.
+//
+template<typename Alloc = std::allocator<char> >
+class basic_gzip_compressor : basic_zlib_compressor<Alloc> {
+private:
+ typedef basic_zlib_compressor<Alloc> base_type;
+public:
+ typedef char char_type;
+ struct category
+ : dual_use,
+ filter_tag,
+ multichar_tag,
+ closable_tag
+ { };
+ basic_gzip_compressor( const gzip_params& = gzip::default_compression,
+ int buffer_size = default_device_buffer_size );
+
+ template<typename Source>
+ std::streamsize read(Source& src, char_type* s, std::streamsize n)
+ {
+ using namespace std;
+ streamsize result = 0;
+
+ // Read header.
+ if (!(flags_ & f_header_done))
+ result += read_string(s, n, header_);
+
+ // Read body.
+ if (!(flags_ & f_body_done)) {
+
+ // Read from basic_zlib_filter.
+ streamsize amt = base_type::read(src, s + result, n - result);
+ if (amt != -1) {
+ result += amt;
+ if (amt < n - result) { // Double-check for EOF.
+ amt = base_type::read(src, s + result, n - result);
+ if (amt != -1)
+ result += amt;
+ }
+ }
+ if (amt == -1)
+ prepare_footer();
+ }
+
+ // Read footer.
+ if ((flags_ & f_body_done) != 0 && result < n)
+ result += read_string(s + result, n - result, footer_);
+
+ return result != 0 ? result : -1;
+ }
+
+ template<typename Sink>
+ std::streamsize write(Sink& snk, const char_type* s, std::streamsize n)
+ {
+ if (!(flags_ & f_header_done)) {
+ std::streamsize amt =
+ static_cast<std::streamsize>(header_.size() - offset_);
+ offset_ += boost::iostreams::write(snk, header_.data() + offset_, amt);
+ if (offset_ == header_.size())
+ flags_ |= f_header_done;
+ else
+ return 0;
+ }
+ return base_type::write(snk, s, n);
+ }
+
+ template<typename Sink>
+ void close(Sink& snk, BOOST_IOS::openmode m)
+ {
+ namespace io = boost::iostreams;
+
+ if (m & BOOST_IOS::out) {
+
+ // Close zlib compressor.
+ base_type::close(snk, BOOST_IOS::out);
+
+ if (flags_ & f_header_done) {
+
+ // Write final fields of gzip file format.
+ write_long(this->crc(), snk);
+ write_long(this->total_in(), snk);
+ }
+
+ }
+ #if BOOST_WORKAROUND(__GNUC__, == 2) && defined(__STL_CONFIG_H) || \
+ BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1) \
+ /**/
+ footer_.erase(0, std::string::npos);
+ #else
+ footer_.clear();
+ #endif
+ offset_ = 0;
+ flags_ = 0;
+ }
+private:
+ static gzip_params normalize_params(gzip_params p);
+ void prepare_footer();
+ std::streamsize read_string(char* s, std::streamsize n, std::string& str);
+
+ template<typename Sink>
+ static void write_long(long n, Sink& next)
+ {
+ boost::iostreams::put(next, static_cast<char>(0xFF & n));
+ boost::iostreams::put(next, static_cast<char>(0xFF & (n >> 8)));
+ boost::iostreams::put(next, static_cast<char>(0xFF & (n >> 16)));
+ boost::iostreams::put(next, static_cast<char>(0xFF & (n >> 24)));
+ }
+
+ enum flag_type {
+ f_header_done = 1,
+ f_body_done = f_header_done << 1,
+ f_footer_done = f_body_done << 1
+ };
+ std::string header_;
+ std::string footer_;
+ std::size_t offset_;
+ int flags_;
+};
+BOOST_IOSTREAMS_PIPABLE(basic_gzip_compressor, 1)
+
+typedef basic_gzip_compressor<> gzip_compressor;
+
+//
+// Template name: basic_gzip_decompressor
+// Description: Model of InputFilter implementing compression in the
+// gzip format.
+//
+template<typename Alloc = std::allocator<char> >
+class basic_gzip_decompressor : basic_zlib_decompressor<Alloc> {
+public:
+ typedef char char_type;
+ struct category
+ : multichar_input_filter_tag,
+ closable_tag
+ { };
+ basic_gzip_decompressor( int window_bits = gzip::default_window_bits,
+ int buffer_size = default_device_buffer_size );
+
+ template<typename Source>
+ std::streamsize read(Source& src, char_type* s, std::streamsize n)
+ {
+ if ((flags_ & f_header_read) == 0) {
+ non_blocking_adapter<Source> nb(src);
+ read_header(nb);
+ flags_ |= f_header_read;
+ }
+
+ if ((flags_ & f_footer_read) != 0)
+ return -1;
+
+ try {
+ std::streamsize result = 0;
+ std::streamsize amt;
+ if ((amt = base_type::read(src, s, n)) != -1) {
+ result += amt;
+ if (amt < n) { // Double check for EOF.
+ amt = base_type::read(src, s + result, n - result);
+ if (amt != -1)
+ result += amt;
+ }
+ }
+ if (amt == -1) {
+ non_blocking_adapter<Source> nb(src);
+ read_footer(nb);
+ flags_ |= f_footer_read;
+ }
+ return result;
+ } catch (const zlib_error& e) {
+ throw gzip_error(e);
+ }
+ }
+
+ template<typename Source>
+ void close(Source& src)
+ {
+ try {
+ base_type::close(src, BOOST_IOS::in);
+ flags_ = 0;
+ } catch (const zlib_error& e) {
+ throw gzip_error(e);
+ }
+ }
+
+ std::string file_name() const { return file_name_; }
+ std::string comment() const { return comment_; }
+ bool text() const { return (flags_ & gzip::flags::text) != 0; }
+ int os() const { return os_; }
+ std::time_t mtime() const { return mtime_; }
+private:
+ typedef basic_zlib_decompressor<Alloc> base_type;
+ typedef BOOST_IOSTREAMS_CHAR_TRAITS(char) traits_type;
+ static bool is_eof(int c) { return traits_type::eq_int_type(c, EOF); }
+ static gzip_params make_params(int window_bits);
+
+ template<typename Source>
+ static uint8_t read_uint8(Source& src, int error)
+ {
+ int c;
+ if ((c = boost::iostreams::get(src)) == EOF || c == WOULD_BLOCK)
+ throw gzip_error(error);
+ return static_cast<uint8_t>(traits_type::to_char_type(c));
+ }
+
+ template<typename Source>
+ static uint32_t read_uint32(Source& src, int error)
+ {
+ uint8_t b1 = read_uint8(src, error);
+ uint8_t b2 = read_uint8(src, error);
+ uint8_t b3 = read_uint8(src, error);
+ uint8_t b4 = read_uint8(src, error);
+ return b1 + (b2 << 8) + (b3 << 16) + (b4 << 24);
+ }
+
+ template<typename Source>
+ std::string read_string(Source& src)
+ {
+ std::string result;
+ while (true) {
+ int c;
+ if (is_eof(c = boost::iostreams::get(src)))
+ throw gzip_error(gzip::bad_header);
+ else if (c == 0)
+ return result;
+ else
+ result += static_cast<char>(c);
+ }
+ }
+
+ template<typename Source>
+ void read_header(Source& src) // Source is non-blocking.
+ {
+ // Reset saved values.
+ #if BOOST_WORKAROUND(__GNUC__, == 2) && defined(__STL_CONFIG_H) || \
+ BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1) \
+ /**/
+ file_name_.erase(0, std::string::npos);
+ comment_.erase(0, std::string::npos);
+ #else
+ file_name_.clear();
+ comment_.clear();
+ #endif
+ os_ = gzip::os_unknown;
+ mtime_ = 0;
+
+ int flags;
+
+ // Read header, without checking header crc.
+ if ( boost::iostreams::get(src) != gzip::magic::id1 || // ID1.
+ boost::iostreams::get(src) != gzip::magic::id2 || // ID2.
+ is_eof(boost::iostreams::get(src)) || // CM.
+ is_eof(flags = boost::iostreams::get(src)) ) // FLG.
+ {
+ throw gzip_error(gzip::bad_header);
+ }
+ mtime_ = read_uint32(src, gzip::bad_header); // MTIME.
+ read_uint8(src, gzip::bad_header); // XFL.
+ os_ = read_uint8(src, gzip::bad_header); // OS.
+ if (flags & boost::iostreams::gzip::flags::text)
+ flags_ |= f_text;
+
+ // Skip extra field. (From J. Halleaux; see note at top.)
+ if (flags & gzip::flags::extra) {
+ int length =
+ static_cast<int>(
+ read_uint8(src, gzip::bad_header) +
+ (read_uint8(src, gzip::bad_header) << 8)
+ );
+ // length is garbage if EOF but the loop below will quit anyway.
+ do { }
+ while (length-- != 0 && !is_eof(boost::iostreams::get(src)));
+ }
+
+ if (flags & gzip::flags::name) // Read file name.
+ file_name_ = read_string(src);
+ if (flags & gzip::flags::comment) // Read comment.
+ comment_ = read_string(src);
+ if (flags & gzip::flags::header_crc) { // Skip header crc.
+ read_uint8(src, gzip::bad_header);
+ read_uint8(src, gzip::bad_header);
+ }
+ }
+
+ template<typename Source>
+ void read_footer(Source& src)
+ {
+ typename base_type::string_type footer =
+ this->unconsumed_input();
+ int c;
+ while (!is_eof(c = boost::iostreams::get(src)))
+ footer += c;
+ detail::range_adapter<input, std::string>
+ rng(footer.begin(), footer.end());
+ if (read_uint32(rng, gzip::bad_footer) != this->crc())
+ throw gzip_error(gzip::bad_crc);
+ if (static_cast<int>(read_uint32(rng, gzip::bad_footer)) != this->total_out())
+ throw gzip_error(gzip::bad_length);
+ }
+ enum flag_type {
+ f_header_read = 1,
+ f_footer_read = f_header_read << 1,
+ f_text = f_footer_read << 1
+ };
+ std::string file_name_;
+ std::string comment_;
+ int os_;
+ std::time_t mtime_;
+ int flags_;
+};
+BOOST_IOSTREAMS_PIPABLE(basic_gzip_decompressor, 1)
+
+typedef basic_gzip_decompressor<> gzip_decompressor;
+
+//------------------Implementation of gzip_compressor-------------------------//
+
+template<typename Alloc>
+basic_gzip_compressor<Alloc>::basic_gzip_compressor
+ (const gzip_params& p, int buffer_size)
+ : base_type(normalize_params(p), buffer_size),
+ offset_(0), flags_(0)
+{
+ // Calculate gzip header.
+ bool has_name = !p.file_name.empty();
+ bool has_comment = !p.comment.empty();
+
+ std::string::size_type length =
+ 10 +
+ (has_name ? p.file_name.size() + 1 : 0) +
+ (has_comment ? p.comment.size() + 1 : 0);
+ // + 2; // Header crc confuses gunzip.
+ int flags =
+ //gzip::flags::header_crc +
+ (has_name ? gzip::flags::name : 0) +
+ (has_comment ? gzip::flags::comment : 0);
+ int extra_flags =
+ ( p.level == zlib::best_compression ?
+ gzip::extra_flags::best_compression :
+ 0 ) +
+ ( p.level == zlib::best_speed ?
+ gzip::extra_flags::best_speed :
+ 0 );
+ header_.reserve(length);
+ header_ += gzip::magic::id1; // ID1.
+ header_ += gzip::magic::id2; // ID2.
+ header_ += gzip::method::deflate; // CM.
+ header_ += static_cast<char>(flags); // FLG.
+ header_ += static_cast<char>(0xFF & p.mtime); // MTIME.
+ header_ += static_cast<char>(0xFF & (p.mtime >> 8));
+ header_ += static_cast<char>(0xFF & (p.mtime >> 16));
+ header_ += static_cast<char>(0xFF & (p.mtime >> 24));
+ header_ += static_cast<char>(extra_flags); // XFL.
+ header_ += static_cast<char>(gzip::os_unknown); // OS.
+ if (has_name) {
+ header_ += p.file_name;
+ header_ += '\0';
+ }
+ if (has_comment) {
+ header_ += p.comment;
+ header_ += '\0';
+ }
+}
+
+template<typename Alloc>
+gzip_params basic_gzip_compressor<Alloc>::normalize_params(gzip_params p)
+{
+ p.noheader = true;
+ p.calculate_crc = true;
+ return p;
+}
+
+template<typename Alloc>
+void basic_gzip_compressor<Alloc>::prepare_footer()
+{
+ boost::iostreams::back_insert_device<std::string> out(footer_);
+ write_long(this->crc(), out);
+ write_long(this->total_in(), out);
+ flags_ |= f_body_done;
+ offset_ = 0;
+}
+
+template<typename Alloc>
+std::streamsize basic_gzip_compressor<Alloc>::read_string
+ (char* s, std::streamsize n, std::string& str)
+{
+ using namespace std;
+ streamsize avail =
+ static_cast<streamsize>(str.size() - offset_);
+ streamsize amt = (std::min)(avail, n);
+ std::copy( str.data() + offset_,
+ str.data() + offset_ + amt,
+ s );
+ offset_ += amt;
+ if ( !(flags_ & f_header_done) &&
+ offset_ == static_cast<std::size_t>(str.size()) )
+ {
+ flags_ |= f_header_done;
+ }
+ return amt;
+}
+
+//------------------Implementation of gzip_decompressor-----------------------//
+
+template<typename Alloc>
+basic_gzip_decompressor<Alloc>::basic_gzip_decompressor
+ (int window_bits, int buffer_size)
+ : base_type(make_params(window_bits), buffer_size),
+ os_(gzip::os_unknown), mtime_(0), flags_(0)
+ { }
+
+template<typename Alloc>
+gzip_params basic_gzip_decompressor<Alloc>::make_params(int window_bits)
+{
+ gzip_params p;
+ p.window_bits = window_bits;
+ p.noheader = true;
+ p.calculate_crc = true;
+ return p;
+}
+
+//----------------------------------------------------------------------------//
+
+} } // End namespaces iostreams, boost.
+
+#if defined(BOOST_MSVC)
+# pragma warning(pop)
+#endif
+
+#endif // #ifndef BOOST_IOSTREAMS_GZIP_HPP_INCLUDED
diff --git a/boost/boost/iostreams/filter/line.hpp b/boost/boost/iostreams/filter/line.hpp
new file mode 100644
index 00000000000..e53e0223132
--- /dev/null
+++ b/boost/boost/iostreams/filter/line.hpp
@@ -0,0 +1,214 @@
+// (C) Copyright Jonathan Turkanis 2005.
+// 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_LINE_FILTER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_LINE_FILTER_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <algorithm> // min.
+#include <cassert>
+#include <memory> // allocator.
+#include <string>
+#include <boost/config.hpp> // BOOST_STATIC_CONSTANT.
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/detail/closer.hpp>
+#include <boost/iostreams/detail/ios.hpp> // openmode, streamsize.
+#include <boost/iostreams/pipeline.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp> // VC7.1 C4244.
+
+namespace boost { namespace iostreams {
+
+//
+// Template name: line_filter.
+// Template paramters:
+// Ch - The character type.
+// Alloc - The allocator type.
+// Description: Filter which processes data one line at a time.
+//
+template< typename Ch,
+ typename Alloc =
+ #if BOOST_WORKAROUND(__GNUC__, < 3)
+ typename std::basic_string<Ch>::allocator_type
+ #else
+ std::allocator<Ch>
+ #endif
+ >
+class basic_line_filter {
+private:
+ typedef typename std::basic_string<Ch>::traits_type string_traits;
+public:
+ typedef Ch char_type;
+ typedef char_traits<char_type> traits_type;
+ typedef std::basic_string<
+ Ch,
+ string_traits,
+ Alloc
+ > string_type;
+ struct category
+ : dual_use,
+ filter_tag,
+ multichar_tag,
+ closable_tag
+ { };
+protected:
+ basic_line_filter() : pos_(string_type::npos), state_(0) { }
+public:
+ virtual ~basic_line_filter() { }
+
+ template<typename Source>
+ std::streamsize read(Source& src, char_type* s, std::streamsize n)
+ {
+ using namespace std;
+ assert(!(state_ & f_write));
+ state_ |= f_read;
+
+ // Handle unfinished business.
+ streamsize result = 0;
+ if (!cur_line_.empty() && (result = read_line(s, n)) == n)
+ return n;
+
+ typename traits_type::int_type status = traits_type::good();
+ while (result < n && !traits_type::is_eof(status)) {
+
+ // Call next_line() to retrieve a line of filtered test, and
+ // read_line() to copy it into buffer s.
+ if (traits_type::would_block(status = next_line(src)))
+ return result;
+ result += read_line(s + result, n - result);
+ }
+
+ return detail::check_eof(result);
+ }
+
+ template<typename Sink>
+ std::streamsize write(Sink& snk, const char_type* s, std::streamsize n)
+ {
+ using namespace std;
+ assert(!(state_ & f_read));
+ state_ |= f_write;
+
+ // Handle unfinished business.
+ if (pos_ != string_type::npos && !write_line(snk))
+ return 0;
+
+ const char_type *cur = s, *next;
+ while (true) {
+
+ // Search for the next full line in [cur, s + n), filter it
+ // and write it to snk.
+ typename string_type::size_type rest = n - (cur - s);
+ if ((next = traits_type::find(cur, rest, traits_type::newline()))) {
+ cur_line_.append(cur, next - cur);
+ cur = next + 1;
+ if (!write_line(snk))
+ return static_cast<std::streamsize>(cur - s);
+ } else {
+ cur_line_.append(cur, rest);
+ return n;
+ }
+ }
+ }
+
+ typedef basic_line_filter<Ch, Alloc> self;
+ friend struct detail::closer<self>;
+
+ template<typename Sink>
+ void close(Sink& snk, BOOST_IOS::openmode which)
+ {
+ if ((state_ & f_read) && (which & BOOST_IOS::in))
+ close();
+
+ if ((state_ & f_write) && (which & BOOST_IOS::out)) {
+ detail::closer<self> closer(*this);
+ if (!cur_line_.empty())
+ write_line(snk);
+ }
+ }
+private:
+ virtual string_type do_filter(const string_type& line) = 0;
+
+ // Copies filtered characters fron the current line into
+ // the given buffer.
+ std::streamsize read_line(char_type* s, std::streamsize n)
+ {
+ using namespace std;
+ streamsize result =
+ (std::min) (n, static_cast<streamsize>(cur_line_.size()));
+ traits_type::copy(s, cur_line_.data(), result);
+ cur_line_.erase(0, result);
+ return result;
+ }
+
+ // Attempts to retrieve a line of text from the given source; returns
+ // an int_type as a good/eof/would_block status code.
+ template<typename Source>
+ typename traits_type::int_type next_line(Source& src)
+ {
+ using namespace std;
+ typename traits_type::int_type c;
+ while ( traits_type::is_good(c = iostreams::get(src)) &&
+ c != traits_type::newline() )
+ {
+ cur_line_ += traits_type::to_int_type(c);
+ }
+ if (!traits_type::would_block(c)) {
+ if (!cur_line_.empty() || c == traits_type::newline())
+ cur_line_ = do_filter(cur_line_);
+ if (c == traits_type::newline())
+ cur_line_ += c;
+ }
+ return c; // status indicator.
+ }
+
+ // Filters the current line and attemps to write it to the given sink.
+ // Returns true for success.
+ template<typename Sink>
+ bool write_line(Sink& snk)
+ {
+ string_type line = do_filter(cur_line_) + traits_type::newline();
+ std::streamsize amt = static_cast<std::streamsize>(line.size());
+ bool result = iostreams::write(snk, line.data(), amt) == amt;
+ if (result)
+ clear();
+ return result;
+ }
+
+ void close()
+ {
+ clear();
+ state_ = 0;
+ }
+
+ void clear()
+ {
+ cur_line_.erase();
+ pos_ = string_type::npos;
+ }
+
+ enum flag_type {
+ f_read = 1,
+ f_write = f_read << 1
+ };
+
+ string_type cur_line_;
+ typename string_type::size_type pos_;
+ int state_;
+};
+BOOST_IOSTREAMS_PIPABLE(basic_line_filter, 2)
+
+typedef basic_line_filter<char> line_filter;
+typedef basic_line_filter<wchar_t> wline_filter;
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_LINE_FILTER_HPP_INCLUDED
diff --git a/boost/boost/iostreams/filter/newline.hpp b/boost/boost/iostreams/filter/newline.hpp
new file mode 100644
index 00000000000..49a4f6016be
--- /dev/null
+++ b/boost/boost/iostreams/filter/newline.hpp
@@ -0,0 +1,420 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+// NOTE: I hope to replace the current implementation with a much simpler
+// one.
+
+#ifndef BOOST_IOSTREAMS_NEWLINE_FILTER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_NEWLINE_FILTER_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <cassert>
+#include <cstdio>
+#include <stdexcept> // logic_error.
+#include <boost/config.hpp> // BOOST_STATIC_CONSTANT.
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/detail/char_traits.hpp>
+#include <boost/iostreams/pipeline.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp>
+
+#define BOOST_IOSTREAMS_ASSERT_UNREACHABLE(val) \
+ (assert("unreachable code" == 0), val) \
+ /**/
+
+namespace boost { namespace iostreams {
+
+namespace newline {
+
+const char CR = 0x0D;
+const char LF = 0x0A;
+
+ // Flags for configuring newline_filter.
+
+// Exactly one of the following three flags must be present.
+
+const int posix = 1; // Use CR as line separator.
+const int mac = 2; // Use LF as line separator.
+const int dos = 4; // Use CRLF as line separator.
+const int mixed = 8; // Mixed line endings.
+const int final_newline = 16;
+const int platform_mask = posix | dos | mac;
+
+} // End namespace newline.
+
+namespace detail {
+
+class newline_base {
+public:
+ bool is_posix() const
+ {
+ return !is_mixed() && (flags_ & newline::posix) != 0;
+ }
+ bool is_dos() const
+ {
+ return !is_mixed() && (flags_ & newline::dos) != 0;
+ }
+ bool is_mac() const
+ {
+ return !is_mixed() && (flags_ & newline::mac) != 0;
+ }
+ bool is_mixed_posix() const { return (flags_ & newline::posix) != 0; }
+ bool is_mixed_dos() const { return (flags_ & newline::dos) != 0; }
+ bool is_mixed_mac() const { return (flags_ & newline::mac) != 0; }
+ bool is_mixed() const
+ {
+ int platform =
+ (flags_ & newline::posix) != 0 ?
+ newline::posix :
+ (flags_ & newline::dos) != 0 ?
+ newline::dos :
+ (flags_ & newline::mac) != 0 ?
+ newline::mac :
+ 0;
+ return (flags_ & ~platform & newline::platform_mask) != 0;
+ }
+ bool has_final_newline() const
+ {
+ return (flags_ & newline::final_newline) != 0;
+ }
+protected:
+ newline_base(int flags) : flags_(flags) { }
+ int flags_;
+};
+
+} // End namespace detail.
+
+class newline_error
+ : public BOOST_IOSTREAMS_FAILURE, public detail::newline_base
+{
+private:
+ friend class newline_checker;
+ newline_error(int flags)
+ : BOOST_IOSTREAMS_FAILURE("bad line endings"),
+ detail::newline_base(flags)
+ { }
+};
+
+class newline_filter {
+public:
+ typedef char char_type;
+ struct category
+ : dual_use,
+ filter_tag,
+ closable_tag
+ { };
+
+ explicit newline_filter(int target) : flags_(target)
+ {
+ if ( target != newline::posix &&
+ target != newline::dos &&
+ target != newline::mac )
+ {
+ throw std::logic_error("bad flags");
+ }
+ }
+
+ template<typename Source>
+ int get(Source& src)
+ {
+ using iostreams::newline::CR;
+ using iostreams::newline::LF;
+
+ if (flags_ & (has_LF | has_EOF)) {
+ if (flags_ & has_LF)
+ return newline();
+ else
+ return EOF;
+ }
+
+ int c =
+ (flags_ & has_CR) == 0 ?
+ iostreams::get(src) :
+ CR;
+
+ if (c == WOULD_BLOCK )
+ return WOULD_BLOCK;
+
+ if (c == CR) {
+ flags_ |= has_CR;
+
+ int d;
+ if ((d = iostreams::get(src)) == WOULD_BLOCK)
+ return WOULD_BLOCK;
+
+ if (d == LF) {
+ flags_ &= ~has_CR;
+ return newline();
+ }
+
+ if (d == EOF) {
+ flags_ |= has_EOF;
+ } else {
+ iostreams::putback(src, d);
+ }
+
+ flags_ &= ~has_CR;
+ return newline();
+ }
+
+ if (c == LF)
+ return newline();
+
+ return c;
+ }
+
+ template<typename Sink>
+ bool put(Sink& dest, char c)
+ {
+ using iostreams::newline::CR;
+ using iostreams::newline::LF;
+
+ if ((flags_ & has_LF) != 0)
+ return c == LF ?
+ newline(dest) :
+ newline(dest) && this->put(dest, c);
+
+ if (c == LF)
+ return newline(dest);
+
+ if ((flags_ & has_CR) != 0)
+ return newline(dest) ?
+ this->put(dest, c) :
+ false;
+
+ if (c == CR) {
+ flags_ |= has_CR;
+ return true;
+ }
+
+ return iostreams::put(dest, c);
+ }
+
+ template<typename Sink>
+ void close(Sink& dest, BOOST_IOS::openmode which)
+ {
+ typedef typename iostreams::category_of<Sink>::type category;
+ bool unfinished = (flags_ & has_CR) != 0;
+ flags_ &= newline::platform_mask;
+ if (which == BOOST_IOS::out && unfinished)
+ close(dest, is_convertible<category, output>());
+ }
+private:
+ template<typename Sink>
+ void close(Sink& dest, mpl::true_) { newline(dest); }
+
+ template<typename Sink>
+ void close(Sink&, mpl::false_) { }
+
+ // Returns the appropriate element of a newline sequence.
+ int newline()
+ {
+ using iostreams::newline::CR;
+ using iostreams::newline::LF;
+
+ switch (flags_ & newline::platform_mask) {
+ case newline::posix:
+ return LF;
+ case newline::mac:
+ return CR;
+ case newline::dos:
+ if (flags_ & has_LF) {
+ flags_ &= ~has_LF;
+ return LF;
+ } else {
+ flags_ |= has_LF;
+ return CR;
+ }
+ }
+ return BOOST_IOSTREAMS_ASSERT_UNREACHABLE(0);
+ }
+
+ // Writes a newline sequence.
+ template<typename Sink>
+ bool newline(Sink& dest)
+ {
+ using iostreams::newline::CR;
+ using iostreams::newline::LF;
+
+ bool success = false;
+ switch (flags_ & newline::platform_mask) {
+ case newline::posix:
+ success = boost::iostreams::put(dest, LF);
+ break;
+ case newline::mac:
+ success = boost::iostreams::put(dest, CR);
+ break;
+ case newline::dos:
+ if ((flags_ & has_LF) != 0) {
+ if ((success = boost::iostreams::put(dest, LF)))
+ flags_ &= ~has_LF;
+ } else if (boost::iostreams::put(dest, CR)) {
+ if (!(success = boost::iostreams::put(dest, LF)))
+ flags_ |= has_LF;
+ }
+ break;
+ }
+ if (success)
+ flags_ &= ~has_CR;
+ return success;
+ }
+ enum flags {
+ has_LF = 32768,
+ has_CR = has_LF << 1,
+ has_newline = has_CR << 1,
+ has_EOF = has_newline << 1
+ };
+ int flags_;
+};
+BOOST_IOSTREAMS_PIPABLE(newline_filter, 0)
+
+class newline_checker : public detail::newline_base {
+public:
+ typedef char char_type;
+ struct category
+ : dual_use_filter_tag,
+ closable_tag
+ { };
+ explicit newline_checker(int target = newline::mixed)
+ : detail::newline_base(0), target_(target), open_(false)
+ { }
+ template<typename Source>
+ int get(Source& src)
+ {
+ using newline::CR;
+ using newline::LF;
+
+ if (!open_) {
+ open_ = true;
+ source() = 0;
+ }
+
+ int c;
+ if ((c = iostreams::get(src)) == WOULD_BLOCK)
+ return WOULD_BLOCK;
+
+ // Update source flags.
+ if (c != EOF)
+ source() &= ~line_complete;
+ if ((source() & has_CR) != 0) {
+ if (c == LF) {
+ source() |= newline::dos;
+ source() |= line_complete;
+ } else {
+ source() |= newline::mac;
+ if (c == EOF)
+ source() |= line_complete;
+ }
+ } else if (c == LF) {
+ source() |= newline::posix;
+ source() |= line_complete;
+ }
+ source() = (source() & ~has_CR) | (c == CR ? has_CR : 0);
+
+ // Check for errors.
+ if ( c == EOF &&
+ (target_ & newline::final_newline) != 0 &&
+ (source() & line_complete) == 0 )
+ {
+ fail();
+ }
+ if ( (target_ & newline::platform_mask) != 0 &&
+ (source() & ~target_ & newline::platform_mask) != 0 )
+ {
+ fail();
+ }
+
+ return c;
+ }
+
+ template<typename Sink>
+ bool put(Sink& dest, int c)
+ {
+ using iostreams::newline::CR;
+ using iostreams::newline::LF;
+
+ if (!open_) {
+ open_ = true;
+ source() = 0;
+ }
+
+ if (!iostreams::put(dest, c))
+ return false;
+
+ // Update source flags.
+ source() &= ~line_complete;
+ if ((source() & has_CR) != 0) {
+ if (c == LF) {
+ source() |= newline::dos;
+ source() |= line_complete;
+ } else {
+ source() |= newline::mac;
+ }
+ } else if (c == LF) {
+ source() |= newline::posix;
+ source() |= line_complete;
+ }
+ source() = (source() & ~has_CR) | (c == CR ? has_CR : 0);
+
+ // Check for errors.
+ if ( (target_ & newline::platform_mask) != 0 &&
+ (source() & ~target_ & newline::platform_mask) != 0 )
+ {
+ fail();
+ }
+
+ return true;
+ }
+
+ template<typename Sink>
+ void close(Sink&, BOOST_IOS::openmode which)
+ {
+ using iostreams::newline::final_newline;
+
+ // Update final_newline flag.
+ if ( (source() & has_CR) != 0 ||
+ (source() & line_complete) != 0 )
+ {
+ source() |= final_newline;
+ }
+
+ // Clear non-sticky flags.
+ source() &= ~(has_CR | line_complete);
+
+ // Check for errors.
+ if ( (which & BOOST_IOS::out) &&
+ (target_ & final_newline) != 0 &&
+ (source() & final_newline) == 0 )
+ {
+ fail();
+ }
+ }
+private:
+ void fail() { throw newline_error(source()); }
+ int& source() { return flags_; }
+ int source() const { return flags_; }
+
+ enum flags {
+ has_CR = 32768,
+ line_complete = has_CR << 1
+ };
+
+ int target_; // Represents expected input.
+ bool open_;
+};
+BOOST_IOSTREAMS_PIPABLE(newline_checker, 0)
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_NEWLINE_FILTER_HPP_INCLUDED
diff --git a/boost/boost/iostreams/filter/regex.hpp b/boost/boost/iostreams/filter/regex.hpp
new file mode 100644
index 00000000000..f9044938ac6
--- /dev/null
+++ b/boost/boost/iostreams/filter/regex.hpp
@@ -0,0 +1,93 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_REGEX_FILTER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_REGEX_FILTER_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <memory> // allocator.
+#include <boost/function.hpp>
+#include <boost/iostreams/filter/aggregate.hpp>
+#include <boost/iostreams/pipeline.hpp>
+#include <boost/regex.hpp>
+
+namespace boost { namespace iostreams {
+
+template< typename Ch,
+ typename Tr = regex_traits<Ch>,
+ typename Alloc = std::allocator<Ch> >
+class basic_regex_filter : public aggregate_filter<Ch, Alloc> {
+private:
+ typedef aggregate_filter<Ch, Alloc> base_type;
+public:
+ typedef typename base_type::char_type char_type;
+ typedef typename base_type::category category;
+ typedef std::basic_string<Ch> string_type;
+ typedef basic_regex<Ch, Tr> regex_type;
+ typedef regex_constants::match_flag_type flag_type;
+ typedef match_results<const Ch*> match_type;
+ typedef function1<string_type, const match_type&> formatter;
+
+ basic_regex_filter( const regex_type& re,
+ const formatter& replace,
+ flag_type flags = regex_constants::match_default )
+ : re_(re), replace_(replace), flags_(flags) { }
+ basic_regex_filter( const regex_type& re,
+ const string_type& fmt,
+ flag_type flags = regex_constants::match_default,
+ flag_type fmt_flags = regex_constants::format_default )
+ : re_(re), replace_(simple_formatter(fmt, fmt_flags)), flags_(flags) { }
+ basic_regex_filter( const regex_type& re,
+ const char_type* fmt,
+ flag_type flags = regex_constants::match_default,
+ flag_type fmt_flags = regex_constants::format_default )
+ : re_(re), replace_(simple_formatter(fmt, fmt_flags)), flags_(flags) { }
+private:
+ typedef typename base_type::vector_type vector_type;
+ void do_filter(const vector_type& src, vector_type& dest)
+ {
+ typedef regex_iterator<const Ch*, Ch, Tr> iterator;
+ if (src.empty())
+ return;
+ iterator first(&src[0], &src[0] + src.size(), re_, flags_);
+ iterator last;
+ const Ch* suffix = 0; // Prevent GCC 2.95 warning.
+ for (; first != last; ++first) {
+ dest.insert( dest.end(),
+ first->prefix().first,
+ first->prefix().second );
+ string_type replacement = replace_(*first);
+ dest.insert( dest.end(),
+ replacement.begin(),
+ replacement.end() );
+ suffix = first->suffix().first;
+ }
+ dest.insert(dest.end(), suffix, &src[0] + src.size());
+ }
+ struct simple_formatter {
+ simple_formatter(const string_type& fmt, flag_type fmt_flags)
+ : fmt_(fmt), fmt_flags_(fmt_flags_) { }
+ string_type operator() (const match_type& match) const
+ { return match.format(fmt_, fmt_flags_); }
+ string_type fmt_;
+ flag_type fmt_flags_;
+ };
+ regex_type re_;
+ formatter replace_;
+ flag_type flags_;
+};
+BOOST_IOSTREAMS_PIPABLE(basic_regex_filter, 3)
+
+typedef basic_regex_filter<char> regex_filter;
+typedef basic_regex_filter<wchar_t> wregex_filter;
+
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_REGEX_FILTER_HPP_INCLUDED
diff --git a/boost/boost/iostreams/filter/stdio.hpp b/boost/boost/iostreams/filter/stdio.hpp
new file mode 100644
index 00000000000..5bd14662ee1
--- /dev/null
+++ b/boost/boost/iostreams/filter/stdio.hpp
@@ -0,0 +1,82 @@
+// (C) Copyright Jonathan Turkanis 2005.
+// 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/iostreams for documentation.
+
+// Based on the work of Christopher Diggins.
+
+#ifndef BOOST_IOSTREAMS_STDIO_FILTER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_STDIO_FILTER_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <iostream>
+#include <memory> // allocator.
+#include <vector>
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#include <boost/iostreams/detail/char_traits.hpp>
+#include <boost/iostreams/detail/ios.hpp>
+#include <boost/iostreams/device/array.hpp>
+#include <boost/iostreams/device/back_inserter.hpp>
+#include <boost/iostreams/filter/aggregate.hpp>
+#include <boost/iostreams/pipeline.hpp>
+#include <boost/iostreams/stream_buffer.hpp>
+
+namespace boost { namespace iostreams {
+
+namespace detail {
+
+} // End namespace detail.
+
+template<typename Ch, typename Alloc = std::allocator<Ch> >
+class basic_stdio_filter : public aggregate_filter<Ch, Alloc> {
+private:
+ typedef aggregate_filter<Ch, Alloc> base_type;
+public:
+ typedef typename base_type::char_type char_type;
+ typedef typename base_type::category category;
+ typedef typename base_type::vector_type vector_type;
+private:
+ static std::istream& standard_input(char*) { return std::cin; }
+ static std::ostream& standard_output(char*) { return std::cout; }
+#ifndef BOOST_IOSTREAMS_NO_WIDE_STREAMS
+ static std::wistream& standard_input(wchar_t*) { return std::wcin; }
+ static std::wostream& standard_output(wchar_t*) { return std::wcout; }
+#endif // BOOST_IOSTREAMS_NO_WIDE_STREAMS
+
+ struct scoped_redirector { // Thanks to Maxim Egorushkin.
+ typedef BOOST_IOSTREAMS_CHAR_TRAITS(Ch) traits_type;
+ typedef BOOST_IOSTREAMS_BASIC_IOS(Ch, traits_type) ios_type;
+ typedef BOOST_IOSTREAMS_BASIC_STREAMBUF(Ch, traits_type) streambuf_type;
+ scoped_redirector( ios_type& ios,
+ streambuf_type* newbuf )
+ : ios_(ios), old_(ios.rdbuf(newbuf))
+ { }
+ ~scoped_redirector() { ios_.rdbuf(old_); }
+ ios_type& ios_;
+ streambuf_type* old_;
+ };
+
+ virtual void do_filter() = 0;
+ virtual void do_filter(const vector_type& src, vector_type& dest)
+ {
+ stream_buffer< basic_array_source<Ch> >
+ srcbuf(&src[0], &src[0] + src.size());
+ stream_buffer< back_insert_device<vector_type> >
+ destbuf(iostreams::back_inserter(dest));
+ scoped_redirector redirect_input(standard_input((Ch*)0), &srcbuf);
+ scoped_redirector redirect_output(standard_output((Ch*)0), &destbuf);
+ do_filter();
+ }
+};
+BOOST_IOSTREAMS_PIPABLE(basic_stdio_filter, 2)
+
+typedef basic_stdio_filter<char> stdio_filter;
+typedef basic_stdio_filter<wchar_t> wstdio_wfilter;
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_STDIO_FILTER_HPP_INCLUDED
diff --git a/boost/boost/iostreams/filter/symmetric.hpp b/boost/boost/iostreams/filter/symmetric.hpp
new file mode 100644
index 00000000000..8aa987c0ea9
--- /dev/null
+++ b/boost/boost/iostreams/filter/symmetric.hpp
@@ -0,0 +1,302 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+// Contains the definitions of the class templates symmetric_filter,
+// which models DualUseFilter based on a model of the Symmetric Filter.
+
+//
+// Roughly, a Symmetric Filter is a class type with the following interface:
+//
+// struct symmetric_filter {
+// typedef xxx char_type;
+//
+// bool filter( const char*& begin_in, const char* end_in,
+// char*& begin_out, char* end_out, bool flush )
+// {
+// // Consume as many characters as possible from the interval
+// // [begin_in, end_in), without exhausting the output range
+// // [begin_out, end_out). If flush is true, write as mush output
+// // as possible.
+// // A return value of true indicates that filter should be called
+// // again. More precisely, if flush is false, a return value of
+// // false indicates that the natural end of stream has been reached
+// // and that all filtered data has been forwarded; if flush is
+// // true, a return value of false indicates that all filtered data
+// // has been forwarded.
+// }
+// void close() { /* Reset filter's state. */ }
+// };
+//
+// Symmetric Filter filters need not be CopyConstructable.
+//
+
+#ifndef BOOST_IOSTREAMS_SYMMETRIC_FILTER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_SYMMETRIC_FILTER_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <cassert>
+#include <memory> // allocator, auto_ptr.
+#include <boost/config.hpp> // BOOST_DEDUCED_TYPENAME.
+#include <boost/iostreams/char_traits.hpp>
+#include <boost/iostreams/constants.hpp> // buffer size.
+#include <boost/iostreams/detail/buffer.hpp>
+#include <boost/iostreams/detail/char_traits.hpp>
+#include <boost/iostreams/detail/closer.hpp>
+#include <boost/iostreams/detail/config/limits.hpp>
+#include <boost/iostreams/detail/template_params.hpp>
+#include <boost/iostreams/traits.hpp>
+#include <boost/iostreams/operations.hpp> // read, write.
+#include <boost/iostreams/pipeline.hpp>
+#include <boost/preprocessor/iteration/local.hpp>
+#include <boost/preprocessor/punctuation/comma_if.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/shared_ptr.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp> // MSVC.
+
+namespace boost { namespace iostreams {
+
+template< typename SymmetricFilter,
+ typename Alloc =
+ std::allocator<
+ BOOST_DEDUCED_TYPENAME char_type_of<SymmetricFilter>::type
+ > >
+class symmetric_filter {
+public:
+ typedef typename char_type_of<SymmetricFilter>::type char_type;
+ typedef std::basic_string<char_type> string_type;
+ struct category
+ : dual_use,
+ filter_tag,
+ multichar_tag,
+ closable_tag
+ { };
+
+ // Expands to a sequence of ctors which forward to impl.
+ #define BOOST_PP_LOCAL_MACRO(n) \
+ BOOST_IOSTREAMS_TEMPLATE_PARAMS(n, T) \
+ explicit symmetric_filter( \
+ int buffer_size BOOST_PP_COMMA_IF(n) \
+ BOOST_PP_ENUM_BINARY_PARAMS(n, const T, &t) ) \
+ : pimpl_(new impl(buffer_size BOOST_PP_COMMA_IF(n) \
+ BOOST_PP_ENUM_PARAMS(n, t))) \
+ { } \
+ /**/
+ #define BOOST_PP_LOCAL_LIMITS (0, BOOST_IOSTREAMS_MAX_FORWARDING_ARITY)
+ #include BOOST_PP_LOCAL_ITERATE()
+ #undef BOOST_PP_LOCAL_MACRO
+
+ template<typename Source>
+ std::streamsize read(Source& src, char_type* s, std::streamsize n)
+ {
+ using namespace std;
+ if (!(state() & f_read))
+ begin_read();
+
+ buffer_type& buf = pimpl_->buf_;
+ int status = (state() & f_eof) != 0 ? f_eof : f_good;
+ char_type *next_s = s,
+ *end_s = s + n;
+ while (true)
+ {
+ // Invoke filter if there are unconsumed characters in buffer or if
+ // filter must be flushed.
+ bool flush = status == f_eof;
+ if (buf.ptr() != buf.eptr() || flush) {
+ const char_type* next = buf.ptr();
+ bool done =
+ !filter().filter(next, buf.eptr(), next_s, end_s, flush);
+ buf.ptr() = buf.data() + (next - buf.data());
+ if (done)
+ return detail::check_eof(static_cast<streamsize>(next_s - s));
+ }
+
+ // If no more characters are available without blocking, or
+ // if read request has been satisfied, return.
+ if ( status == f_would_block && buf.ptr() == buf.eptr() ||
+ next_s == end_s )
+ {
+ return static_cast<streamsize>(next_s - s);
+ }
+
+ // Fill buffer.
+ if (status == f_good)
+ status = fill(src);
+ }
+ }
+
+ template<typename Sink>
+ std::streamsize write(Sink& snk, const char_type* s, std::streamsize n)
+ {
+ if (!(state() & f_write))
+ begin_write();
+
+ buffer_type& buf = pimpl_->buf_;
+ const char_type *next_s, *end_s;
+ for (next_s = s, end_s = s + n; next_s != end_s; ) {
+ if (buf.ptr() == buf.eptr() && !flush(snk))
+ break;
+ filter().filter(next_s, end_s, buf.ptr(), buf.eptr(), false);
+ }
+ return static_cast<std::streamsize>(next_s - s);
+ }
+
+ // Give detail::closer<> permission to call close().
+ typedef symmetric_filter<SymmetricFilter, Alloc> self;
+ friend struct detail::closer<self>;
+
+ template<typename Sink>
+ void close(Sink& snk, BOOST_IOS::openmode which)
+ {
+ using namespace std;
+ if ((state() & f_read) && (which & BOOST_IOS::in))
+ close();
+ if ((state() & f_write) && (which & BOOST_IOS::out)) {
+
+ // Repeatedly invoke filter() with no input.
+ detail::closer<self> closer(*this);
+ buffer_type& buf = pimpl_->buf_;
+ char dummy;
+ const char* end = &dummy;
+ bool again = true;
+ while (again) {
+ if (buf.ptr() != buf.eptr())
+ again = filter().filter(end, end, buf.ptr(), buf.eptr(), true);
+ flush(snk);
+ }
+ }
+ }
+ SymmetricFilter& filter() { return *pimpl_; }
+ string_type unconsumed_input() const;
+
+// Give impl access to buffer_type on Tru64
+#if !BOOST_WORKAROUND(__DECCXX_VER, BOOST_TESTED_AT(60590042))
+ private:
+#endif
+ typedef detail::buffer<char_type, Alloc> buffer_type;
+private:
+ buffer_type& buf() { return pimpl_->buf_; }
+ const buffer_type& buf() const { return pimpl_->buf_; }
+ int& state() { return pimpl_->state_; }
+ void begin_read();
+ void begin_write();
+
+ template<typename Source>
+ int fill(Source& src)
+ {
+ std::streamsize amt = iostreams::read(src, buf().data(), buf().size());
+ if (amt == -1) {
+ state() |= f_eof;
+ return f_eof;
+ }
+ buf().set(0, amt);
+ return amt == buf().size() ? f_good : f_would_block;
+ }
+
+ // Attempts to write the contents of the buffer the given Sink.
+ // Returns true if at least on character was written.
+ template<typename Sink>
+ bool flush(Sink& snk)
+ {
+ typedef typename iostreams::category_of<Sink>::type category;
+ typedef is_convertible<category, output> can_write;
+ return flush(snk, can_write());
+ }
+
+ template<typename Sink>
+ bool flush(Sink& snk, mpl::true_)
+ {
+ using std::streamsize;
+ typedef char_traits<char_type> traits_type;
+ streamsize amt =
+ static_cast<streamsize>(buf().ptr() - buf().data());
+ streamsize result =
+ boost::iostreams::write(snk, buf().data(), amt);
+ if (result < amt && result > 0)
+ traits_type::move(buf().data(), buf().data() + result, amt - result);
+ buf().set(amt - result, buf().size());
+ return result != 0;
+ }
+
+ template<typename Sink>
+ bool flush(Sink& snk, mpl::false_) { return true;}
+
+ void close();
+
+ enum flag_type {
+ f_read = 1,
+ f_write = f_read << 1,
+ f_eof = f_write << 1,
+ f_good,
+ f_would_block
+ };
+
+ struct impl : SymmetricFilter {
+
+ // Expands to a sequence of ctors which forward to SymmetricFilter.
+ #define BOOST_PP_LOCAL_MACRO(n) \
+ BOOST_IOSTREAMS_TEMPLATE_PARAMS(n, T) \
+ impl( int buffer_size BOOST_PP_COMMA_IF(n) \
+ BOOST_PP_ENUM_BINARY_PARAMS(n, const T, &t) ) \
+ : SymmetricFilter(BOOST_PP_ENUM_PARAMS(n, t)), \
+ buf_(buffer_size), state_(0) \
+ { } \
+ /**/
+ #define BOOST_PP_LOCAL_LIMITS (0, BOOST_IOSTREAMS_MAX_FORWARDING_ARITY)
+ #include BOOST_PP_LOCAL_ITERATE()
+ #undef BOOST_PP_LOCAL_MACRO
+
+ buffer_type buf_;
+ int state_;
+ };
+
+ shared_ptr<impl> pimpl_;
+};
+BOOST_IOSTREAMS_PIPABLE(symmetric_filter, 2)
+
+//------------------Implementation of symmetric_filter----------------//
+
+template<typename SymmetricFilter, typename Alloc>
+void symmetric_filter<SymmetricFilter, Alloc>::begin_read()
+{
+ assert(!(state() & f_write));
+ state() |= f_read;
+ buf().set(0, 0);
+}
+
+template<typename SymmetricFilter, typename Alloc>
+void symmetric_filter<SymmetricFilter, Alloc>::begin_write()
+{
+ assert(!(state() & f_read));
+ state() |= f_write;
+ buf().set(0, buf().size());
+}
+
+template<typename SymmetricFilter, typename Alloc>
+void symmetric_filter<SymmetricFilter, Alloc>::close()
+{
+ state() = 0;
+ buf().set(0, 0);
+ filter().close();
+}
+
+template<typename SymmetricFilter, typename Alloc>
+typename symmetric_filter<SymmetricFilter, Alloc>::string_type
+symmetric_filter<SymmetricFilter, Alloc>::unconsumed_input() const
+{ return string_type(buf().ptr(), buf().eptr()); }
+
+//----------------------------------------------------------------------------//
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp> // MSVC.
+
+#endif // #ifndef BOOST_IOSTREAMS_SYMMETRIC_FILTER_HPP_INCLUDED
diff --git a/boost/boost/iostreams/filter/test.hpp b/boost/boost/iostreams/filter/test.hpp
new file mode 100644
index 00000000000..1e08123d36a
--- /dev/null
+++ b/boost/boost/iostreams/filter/test.hpp
@@ -0,0 +1,277 @@
+// (C) Copyright Jonathan Turkanis 2005.
+// 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_FILTER_TEST_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // BOOST_MSVC,put size_t in std.
+#include <boost/detail/workaround.hpp>
+#include <algorithm> // min.
+#include <cstddef> // size_t.
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) || \
+ BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) || \
+ BOOST_WORKAROUND(__MWERKS__, <= 0x3003) \
+ /**/
+# include <cstdlib> // rand.
+#endif
+#include <cstring> // memcpy, strlen.
+#include <iterator>
+#include <string>
+#include <vector>
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) && \
+ !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \
+ !BOOST_WORKAROUND(__MWERKS__, <= 0x3003) \
+ /**/
+# include <boost/random/linear_congruential.hpp>
+# include <boost/random/uniform_smallint.hpp>
+#endif
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/compose.hpp>
+#include <boost/iostreams/copy.hpp>
+#include <boost/iostreams/detail/adapter/basic_adapter.hpp>
+#include <boost/iostreams/detail/bool_trait_def.hpp>
+#include <boost/iostreams/detail/ios.hpp>
+#include <boost/iostreams/device/array.hpp>
+#include <boost/iostreams/device/back_inserter.hpp>
+#include <boost/iostreams/operations.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/type_traits/is_array.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+#undef memcpy
+#undef rand
+#undef strlen
+
+#if defined(BOOST_NO_STDC_NAMESPACE) && !defined(__LIBCOMO__)
+namespace std {
+ using ::memcpy;
+ using ::strlen;
+ #if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) || \
+ BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) || \
+ BOOST_WORKAROUND(__MWERKS__, <= 0x3003) \
+ /**/
+ using ::rand;
+ #endif
+}
+#endif
+
+namespace boost { namespace iostreams {
+
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF(is_string, std::basic_string, 3)
+
+const std::streamsize default_increment = 5;
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) && \
+ !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \
+ !BOOST_WORKAROUND(__MWERKS__, <= 0x3003) \
+ /**/
+ std::streamsize rand(int inc)
+ {
+ static rand48 random_gen;
+ static uniform_smallint<int> random_dist(0, inc);
+ return random_dist(random_gen);
+ }
+#else
+ std::streamsize rand(int inc)
+ {
+ return (std::rand() * inc + 1) / RAND_MAX;
+ }
+#endif
+
+class non_blocking_source {
+public:
+ typedef char char_type;
+ struct category
+ : source_tag,
+ peekable_tag
+ { };
+ explicit non_blocking_source( const std::string& data,
+ std::streamsize inc = default_increment )
+ : data_(data), inc_(inc), pos_(0)
+ { }
+ std::streamsize read(char* s, std::streamsize n)
+ {
+ if (pos_ == static_cast<std::streamsize>(data_.size()))
+ return -1;
+ std::streamsize avail =
+ (std::min) (n, static_cast<std::streamsize>(data_.size() - pos_));
+ std::streamsize amt = (std::min) (rand(inc_), avail);
+ if (amt)
+ std::memcpy(s, data_.c_str() + pos_, amt);
+ pos_ += amt;
+ return amt;
+ }
+
+ bool putback(char c)
+ {
+ if (pos_ > 0) {
+ data_[--pos_] = c;
+ return true;
+ }
+ return false;
+ }
+private:
+ std::string data_;
+ std::streamsize inc_, pos_;
+};
+
+class non_blocking_sink : public sink {
+public:
+ non_blocking_sink( std::string& dest,
+ std::streamsize inc = default_increment )
+ : dest_(dest), inc_(inc)
+ { }
+ std::streamsize write(const char* s, std::streamsize n)
+ {
+ std::streamsize amt = (std::min) (rand(inc_), n);
+ dest_.insert(dest_.end(), s, s + amt);
+ return amt;
+ }
+private:
+ std::string& dest_;
+ std::streamsize inc_;
+};
+
+//--------------Definition of test_input_filter-------------------------------//
+
+template<typename Filter>
+bool test_input_filter( Filter filter,
+ const std::string& input,
+ const std::string& output,
+ mpl::true_ )
+{
+ for ( int inc = default_increment;
+ inc < default_increment * 40;
+ inc += default_increment )
+ {
+ non_blocking_source src(input, inc);
+ std::string dest;
+ iostreams::copy(compose(filter, src), iostreams::back_inserter(dest));
+ if (dest != output)
+ return false;
+ }
+ return true;
+}
+
+template<typename Filter, typename Source1, typename Source2>
+bool test_input_filter( Filter filter,
+ const Source1& input,
+ const Source2& output,
+ mpl::false_ )
+{
+ std::string in;
+ std::string out;
+ iostreams::copy(input, iostreams::back_inserter(in));
+ iostreams::copy(output, iostreams::back_inserter(out));
+ return test_input_filter(filter, in, out);
+}
+
+template<typename Filter, typename Source1, typename Source2>
+bool test_input_filter( Filter filter,
+ const Source1& input,
+ const Source2& output )
+{
+ // Use tag dispatch to compensate for bad overload resolution.
+ return test_input_filter( filter, input, output,
+ is_string<Source1>() );
+}
+
+//--------------Definition of test_output_filter------------------------------//
+
+template<typename Filter>
+bool test_output_filter( Filter filter,
+ const std::string& input,
+ const std::string& output,
+ mpl::true_ )
+{
+ for ( int inc = default_increment;
+ inc < default_increment * 40;
+ inc += default_increment )
+ {
+ array_source src(input.data(), input.data() + input.size());
+ std::string dest;
+ iostreams::copy(src, compose(filter, non_blocking_sink(dest, inc)));
+ if (dest != output )
+ return false;
+ }
+ return true;
+}
+
+template<typename Filter, typename Source1, typename Source2>
+bool test_output_filter( Filter filter,
+ const Source1& input,
+ const Source2& output,
+ mpl::false_ )
+{
+ std::string in;
+ std::string out;
+ iostreams::copy(input, iostreams::back_inserter(in));
+ iostreams::copy(output, iostreams::back_inserter(out));
+ return test_output_filter(filter, in, out);
+}
+
+template<typename Filter, typename Source1, typename Source2>
+bool test_output_filter( Filter filter,
+ const Source1& input,
+ const Source2& output )
+{
+ // Use tag dispatch to compensate for bad overload resolution.
+ return test_output_filter( filter, input, output,
+ is_string<Source1>() );
+}
+
+//--------------Definition of test_filter_pair--------------------------------//
+
+template<typename OutputFilter, typename InputFilter>
+bool test_filter_pair( OutputFilter out,
+ InputFilter in,
+ const std::string& data,
+ mpl::true_ )
+{
+ for ( int inc = default_increment;
+ inc <= default_increment * 40;
+ inc += default_increment )
+ {
+ array_source src(data.data(), data.data() + data.size());
+ std::string temp;
+ std::string dest;
+ iostreams::copy(src, compose(out, non_blocking_sink(temp, inc)));
+ iostreams::copy(
+ compose(in, non_blocking_source(temp, inc)),
+ iostreams::back_inserter(dest)
+ );
+ if (dest != data)
+ return false;
+ }
+ return true;
+}
+
+template<typename OutputFilter, typename InputFilter, typename Source>
+bool test_filter_pair( OutputFilter out,
+ InputFilter in,
+ const Source& data,
+ mpl::false_ )
+{
+ std::string str;
+ iostreams::copy(data, iostreams::back_inserter(str));
+ return test_filter_pair(out, in, str);
+}
+
+template<typename OutputFilter, typename InputFilter, typename Source>
+bool test_filter_pair( OutputFilter out,
+ InputFilter in,
+ const Source& data )
+{
+ // Use tag dispatch to compensate for bad overload resolution.
+ return test_filter_pair(out, in, data, is_string<Source>());
+}
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_FILTER_TEST_HPP_INCLUDED
diff --git a/boost/boost/iostreams/filter/zlib.hpp b/boost/boost/iostreams/filter/zlib.hpp
new file mode 100644
index 00000000000..cc6ccea3974
--- /dev/null
+++ b/boost/boost/iostreams/filter/zlib.hpp
@@ -0,0 +1,415 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+// Note: custom allocators are not supported on VC6, since that compiler
+// had trouble finding the function zlib_base::do_init.
+
+#ifndef BOOST_IOSTREAMS_ZLIB_HPP_INCLUDED
+#define BOOST_IOSTREAMS_ZLIB_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <cassert>
+#include <iosfwd> // streamsize.
+#include <memory> // allocator, bad_alloc.
+#include <new>
+#include <boost/config.hpp> // MSVC, STATIC_CONSTANT, DEDUCED_TYPENAME, DINKUM.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/constants.hpp> // buffer size.
+#include <boost/iostreams/detail/config/auto_link.hpp>
+#include <boost/iostreams/detail/config/dyn_link.hpp>
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#include <boost/iostreams/detail/config/zlib.hpp>
+#include <boost/iostreams/detail/ios.hpp> // failure, streamsize.
+#include <boost/iostreams/filter/symmetric.hpp>
+#include <boost/iostreams/pipeline.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+// Must come last.
+#ifdef BOOST_MSVC
+# pragma warning(push)
+# pragma warning(disable:4251 4231 4660) // Dependencies not exported.
+#endif
+#include <boost/config/abi_prefix.hpp>
+
+namespace boost { namespace iostreams {
+
+namespace zlib {
+ // Typedefs
+
+typedef unsigned int uint;
+typedef unsigned char byte;
+typedef unsigned long ulong;
+
+typedef void* (*alloc_func)(void*, zlib::uint, zlib::uint);
+typedef void (*free_func)(void*, void*);
+
+ // Compression levels
+
+BOOST_IOSTREAMS_DECL extern const int no_compression;
+BOOST_IOSTREAMS_DECL extern const int best_speed;
+BOOST_IOSTREAMS_DECL extern const int best_compression;
+BOOST_IOSTREAMS_DECL extern const int default_compression;
+
+ // Compression methods
+
+BOOST_IOSTREAMS_DECL extern const int deflated;
+
+ // Compression strategies
+
+BOOST_IOSTREAMS_DECL extern const int default_strategy;
+BOOST_IOSTREAMS_DECL extern const int filtered;
+BOOST_IOSTREAMS_DECL extern const int huffman_only;
+
+ // Status codes
+
+BOOST_IOSTREAMS_DECL extern const int okay;
+BOOST_IOSTREAMS_DECL extern const int stream_end;
+BOOST_IOSTREAMS_DECL extern const int stream_error;
+BOOST_IOSTREAMS_DECL extern const int version_error;
+BOOST_IOSTREAMS_DECL extern const int data_error;
+BOOST_IOSTREAMS_DECL extern const int mem_error;
+BOOST_IOSTREAMS_DECL extern const int buf_error;
+
+ // Flush codes
+
+BOOST_IOSTREAMS_DECL extern const int finish;
+BOOST_IOSTREAMS_DECL extern const int no_flush;
+BOOST_IOSTREAMS_DECL extern const int sync_flush;
+
+ // Code for current OS
+
+//BOOST_IOSTREAMS_DECL extern const int os_code;
+
+ // Null pointer constant.
+
+const int null = 0;
+
+ // Default values
+
+const int default_window_bits = 15;
+const int default_mem_level = 8;
+const bool default_crc = false;
+const bool default_noheader = false;
+
+} // End namespace zlib.
+
+//
+// Class name: zlib_params.
+// Description: Encapsulates the parameters passed to deflateInit2
+// and inflateInit2 to customize compression and decompression.
+//
+struct zlib_params {
+
+ // Non-explicit constructor.
+ zlib_params( int level = zlib::default_compression,
+ int method = zlib::deflated,
+ int window_bits = zlib::default_window_bits,
+ int mem_level = zlib::default_mem_level,
+ int strategy = zlib::default_strategy,
+ bool noheader = zlib::default_noheader,
+ bool calculate_crc = zlib::default_crc )
+ : level(level), method(method), window_bits(window_bits),
+ mem_level(mem_level), strategy(strategy),
+ noheader(noheader), calculate_crc(calculate_crc)
+ { }
+ int level;
+ int method;
+ int window_bits;
+ int mem_level;
+ int strategy;
+ bool noheader;
+ bool calculate_crc;
+};
+
+//
+// Class name: zlib_error.
+// Description: Subclass of std::ios::failure thrown to indicate
+// zlib errors other than out-of-memory conditions.
+//
+class BOOST_IOSTREAMS_DECL zlib_error : public BOOST_IOSTREAMS_FAILURE {
+public:
+ explicit zlib_error(int error);
+ int error() const { return error_; }
+ static void check(int error);
+private:
+ int error_;
+};
+
+namespace detail {
+
+template<typename Alloc>
+struct zlib_allocator_traits {
+#ifndef BOOST_NO_STD_ALLOCATOR
+ typedef typename Alloc::template rebind<char>::other type;
+#else
+ typedef std::allocator<char> type;
+#endif
+};
+
+template< typename Alloc,
+ typename Base = // VC6 workaround (C2516)
+ BOOST_DEDUCED_TYPENAME zlib_allocator_traits<Alloc>::type >
+struct zlib_allocator : private Base {
+private:
+ typedef typename Base::size_type size_type;
+public:
+ BOOST_STATIC_CONSTANT(bool, custom =
+ (!is_same<std::allocator<char>, Base>::value));
+ typedef typename zlib_allocator_traits<Alloc>::type allocator_type;
+ static void* allocate(void* self, zlib::uint items, zlib::uint size);
+ static void deallocate(void* self, void* address);
+};
+
+class BOOST_IOSTREAMS_DECL zlib_base {
+public:
+ typedef char char_type;
+protected:
+ zlib_base();
+ ~zlib_base();
+ void* stream() { return stream_; }
+ template<typename Alloc>
+ void init( const zlib_params& p,
+ bool compress,
+ zlib_allocator<Alloc>& zalloc )
+ {
+ bool custom = zlib_allocator<Alloc>::custom;
+ do_init( p, compress,
+ #if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ custom ? zlib_allocator<Alloc>::allocate : 0,
+ custom ? zlib_allocator<Alloc>::deallocate : 0,
+ #endif
+ &zalloc );
+ }
+ void before( const char*& src_begin, const char* src_end,
+ char*& dest_begin, char* dest_end );
+ void after( const char*& src_begin, char*& dest_begin,
+ bool compress );
+ int deflate(int flush);
+ int inflate(int flush);
+ void reset(bool compress, bool realloc);
+public:
+ zlib::ulong crc() const { return crc_; }
+ int total_in() const { return total_in_; }
+ int total_out() const { return total_out_; }
+private:
+ void do_init( const zlib_params& p, bool compress,
+ #if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ zlib::alloc_func,
+ zlib::free_func,
+ #endif
+ void* derived );
+ void* stream_; // Actual type: z_stream*.
+ bool calculate_crc_;
+ zlib::ulong crc_;
+ int total_in_;
+ int total_out_;
+};
+
+//
+// Template name: zlib_compressor_impl
+// Description: Model of C-Style Filte implementing compression by
+// delegating to the zlib function deflate.
+//
+template<typename Alloc = std::allocator<char> >
+class zlib_compressor_impl : public zlib_base, public zlib_allocator<Alloc> {
+public:
+ zlib_compressor_impl(const zlib_params& = zlib::default_compression);
+ ~zlib_compressor_impl();
+ bool filter( const char*& src_begin, const char* src_end,
+ char*& dest_begin, char* dest_end, bool flush );
+ void close();
+};
+
+//
+// Template name: zlib_compressor
+// Description: Model of C-Style Filte implementing decompression by
+// delegating to the zlib function inflate.
+//
+template<typename Alloc = std::allocator<char> >
+class zlib_decompressor_impl : public zlib_base, public zlib_allocator<Alloc> {
+public:
+ zlib_decompressor_impl(const zlib_params&);
+ zlib_decompressor_impl(int window_bits = zlib::default_window_bits);
+ ~zlib_decompressor_impl();
+ bool filter( const char*& begin_in, const char* end_in,
+ char*& begin_out, char* end_out, bool flush );
+ void close();
+};
+
+} // End namespace detail.
+
+//
+// Template name: zlib_compressor
+// Description: Model of InputFilter and OutputFilter implementing
+// compression using zlib.
+//
+template<typename Alloc = std::allocator<char> >
+struct basic_zlib_compressor
+ : symmetric_filter<detail::zlib_compressor_impl<Alloc>, Alloc>
+{
+private:
+ typedef detail::zlib_compressor_impl<Alloc> impl_type;
+ typedef symmetric_filter<impl_type, Alloc> base_type;
+public:
+ typedef typename base_type::char_type char_type;
+ typedef typename base_type::category category;
+ basic_zlib_compressor( const zlib_params& = zlib::default_compression,
+ int buffer_size = default_device_buffer_size );
+ zlib::ulong crc() { return this->filter().crc(); }
+ int total_in() { return this->filter().total_in(); }
+};
+BOOST_IOSTREAMS_PIPABLE(basic_zlib_compressor, 1)
+
+typedef basic_zlib_compressor<> zlib_compressor;
+
+//
+// Template name: zlib_decompressor
+// Description: Model of InputFilter and OutputFilter implementing
+// decompression using zlib.
+//
+template<typename Alloc = std::allocator<char> >
+struct basic_zlib_decompressor
+ : symmetric_filter<detail::zlib_decompressor_impl<Alloc>, Alloc>
+{
+private:
+ typedef detail::zlib_decompressor_impl<Alloc> impl_type;
+ typedef symmetric_filter<impl_type, Alloc> base_type;
+public:
+ typedef typename base_type::char_type char_type;
+ typedef typename base_type::category category;
+ basic_zlib_decompressor( int window_bits = zlib::default_window_bits,
+ int buffer_size = default_device_buffer_size );
+ basic_zlib_decompressor( const zlib_params& p,
+ int buffer_size = default_device_buffer_size );
+ zlib::ulong crc() { return this->filter().crc(); }
+ int total_out() { return this->filter().total_out(); }
+};
+BOOST_IOSTREAMS_PIPABLE(basic_zlib_decompressor, 1)
+
+typedef basic_zlib_decompressor<> zlib_decompressor;
+
+//----------------------------------------------------------------------------//
+
+//------------------Implementation of zlib_allocator--------------------------//
+
+namespace detail {
+
+template<typename Alloc, typename Base>
+void* zlib_allocator<Alloc, Base>::allocate
+ (void* self, zlib::uint items, zlib::uint size)
+{
+ size_type len = items * size;
+ char* ptr =
+ static_cast<allocator_type*>(self)->allocate
+ (len + sizeof(size_type)
+ #if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1)
+ , (char*)0
+ #endif
+ );
+ *reinterpret_cast<size_type*>(ptr) = len;
+ return ptr + sizeof(size_type);
+}
+
+template<typename Alloc, typename Base>
+void zlib_allocator<Alloc, Base>::deallocate(void* self, void* address)
+{
+ char* ptr = reinterpret_cast<char*>(address) - sizeof(size_type);
+ size_type len = *reinterpret_cast<size_type*>(ptr) + sizeof(size_type);
+ static_cast<allocator_type*>(self)->deallocate(ptr, len);
+}
+
+//------------------Implementation of zlib_compressor_impl--------------------//
+
+template<typename Alloc>
+zlib_compressor_impl<Alloc>::zlib_compressor_impl(const zlib_params& p)
+{ init(p, true, static_cast<zlib_allocator<Alloc>&>(*this)); }
+
+template<typename Alloc>
+zlib_compressor_impl<Alloc>::~zlib_compressor_impl()
+{ reset(true, false); }
+
+template<typename Alloc>
+bool zlib_compressor_impl<Alloc>::filter
+ ( const char*& src_begin, const char* src_end,
+ char*& dest_begin, char* dest_end, bool flush )
+{
+ before(src_begin, src_end, dest_begin, dest_end);
+ int result = deflate(flush ? zlib::finish : zlib::no_flush);
+ after(src_begin, dest_begin, true);
+ zlib_error::check(result);
+ return result != zlib::stream_end;
+}
+
+template<typename Alloc>
+void zlib_compressor_impl<Alloc>::close() { reset(true, true); }
+
+//------------------Implementation of zlib_decompressor_impl------------------//
+
+template<typename Alloc>
+zlib_decompressor_impl<Alloc>::zlib_decompressor_impl(const zlib_params& p)
+{ init(p, false, static_cast<zlib_allocator<Alloc>&>(*this)); }
+
+template<typename Alloc>
+zlib_decompressor_impl<Alloc>::~zlib_decompressor_impl()
+{ reset(false, false); }
+
+template<typename Alloc>
+zlib_decompressor_impl<Alloc>::zlib_decompressor_impl(int window_bits)
+{
+ zlib_params p;
+ p.window_bits = window_bits;
+ init(p, false, static_cast<zlib_allocator<Alloc>&>(*this));
+}
+
+template<typename Alloc>
+bool zlib_decompressor_impl<Alloc>::filter
+ ( const char*& src_begin, const char* src_end,
+ char*& dest_begin, char* dest_end, bool /* flush */ )
+{
+ before(src_begin, src_end, dest_begin, dest_end);
+ int result = inflate(zlib::sync_flush);
+ after(src_begin, dest_begin, false);
+ zlib_error::check(result);
+ return result != zlib::stream_end;
+}
+
+template<typename Alloc>
+void zlib_decompressor_impl<Alloc>::close() { reset(false, true); }
+
+} // End namespace detail.
+
+//------------------Implementation of zlib_decompressor-----------------------//
+
+template<typename Alloc>
+basic_zlib_compressor<Alloc>::basic_zlib_compressor
+ (const zlib_params& p, int buffer_size)
+ : base_type(buffer_size, p) { }
+
+//------------------Implementation of zlib_decompressor-----------------------//
+
+template<typename Alloc>
+basic_zlib_decompressor<Alloc>::basic_zlib_decompressor
+ (int window_bits, int buffer_size)
+ : base_type(buffer_size, window_bits) { }
+
+template<typename Alloc>
+basic_zlib_decompressor<Alloc>::basic_zlib_decompressor
+ (const zlib_params& p, int buffer_size)
+ : base_type(buffer_size, p) { }
+
+//----------------------------------------------------------------------------//
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/config/abi_suffix.hpp> // Pops abi_suffix.hpp pragmas.
+#ifdef BOOST_MSVC
+# pragma warning(pop)
+#endif
+
+#endif // #ifndef BOOST_IOSTREAMS_ZLIB_HPP_INCLUDED
diff --git a/boost/boost/iostreams/filtering_stream.hpp b/boost/boost/iostreams/filtering_stream.hpp
new file mode 100644
index 00000000000..b43a34f3c46
--- /dev/null
+++ b/boost/boost/iostreams/filtering_stream.hpp
@@ -0,0 +1,148 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_FILTER_STREAM_HPP_INCLUDED
+#define BOOST_IOSTREAMS_FILTER_STREAM_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <memory> // allocator.
+#include <boost/iostreams/detail/access_control.hpp>
+#include <boost/iostreams/detail/char_traits.hpp>
+#include <boost/iostreams/detail/iostream.hpp> // standard streams.
+#include <boost/iostreams/detail/push.hpp>
+#include <boost/iostreams/detail/select.hpp>
+#include <boost/iostreams/detail/streambuf.hpp> // pubsync.
+#include <boost/iostreams/filtering_streambuf.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp> // MSVC.
+
+namespace boost { namespace iostreams {
+
+//--------------Definition of filtered_istream--------------------------------//
+
+namespace detail {
+
+template<typename Mode, typename Ch, typename Tr>
+struct filtering_stream_traits {
+ typedef typename
+ iostreams::select< // Disambiguation for Tru64
+ mpl::and_<
+ is_convertible<Mode, input>,
+ is_convertible<Mode, output>
+ >,
+ BOOST_IOSTREAMS_BASIC_IOSTREAM(Ch, Tr),
+ is_convertible<Mode, input>,
+ BOOST_IOSTREAMS_BASIC_ISTREAM(Ch, Tr),
+ else_,
+ BOOST_IOSTREAMS_BASIC_OSTREAM(Ch, Tr)
+ >::type type;
+};
+
+template<typename Chain, typename Access>
+class filtering_stream_base
+ : public access_control<
+ boost::iostreams::detail::chain_client<Chain>,
+ Access
+ >,
+ public filtering_stream_traits<
+ typename Chain::mode,
+ typename Chain::char_type,
+ typename Chain::traits_type
+ >::type
+{
+public:
+ typedef Chain chain_type;
+ typedef access_control<
+ boost::iostreams::detail::chain_client<Chain>,
+ Access
+ > client_type;
+protected:
+ typedef typename
+ filtering_stream_traits<
+ typename Chain::mode,
+ typename Chain::char_type,
+ typename Chain::traits_type
+ >::type stream_type;
+ filtering_stream_base() : stream_type(0) { this->set_chain(&chain_); }
+private:
+ void notify() { this->rdbuf(chain_.empty() ? 0 : &chain_.front()); }
+ Chain chain_;
+};
+
+} // End namespace detail.
+
+//
+// Macro: BOOST_IOSTREAMS_DEFINE_FILTER_STREAM(name_, chain_type_, default_char_)
+// Description: Defines a template derived from std::basic_streambuf which uses
+// a chain to perform i/o. The template has the following parameters:
+// Mode - the i/o mode.
+// Ch - The character type.
+// Tr - The character traits type.
+// Alloc - The allocator type.
+// Access - Indicates accessibility of the chain interface; must be either
+// public_ or protected_; defaults to public_.
+// Macro parameters:
+// name_ - The name of the template to be defined.
+// chain_type_ - The name of the chain template.
+// default_char_ - The default value for the char template parameter.
+//
+#define BOOST_IOSTREAMS_DEFINE_FILTER_STREAM(name_, chain_type_, default_char_) \
+ template< typename Mode, \
+ typename Ch = default_char_, \
+ typename Tr = BOOST_IOSTREAMS_CHAR_TRAITS(Ch), \
+ typename Alloc = std::allocator<Ch>, \
+ typename Access = public_ > \
+ class name_ \
+ : public boost::iostreams::detail::filtering_stream_base< \
+ chain_type_<Mode, Ch, Tr, Alloc>, Access \
+ > \
+ { \
+ public: \
+ typedef Ch char_type; \
+ BOOST_IOSTREAMS_STREAMBUF_TYPEDEFS(Tr) \
+ typedef Mode mode; \
+ typedef chain_type_<Mode, Ch, Tr, Alloc> chain_type; \
+ name_() { } \
+ BOOST_IOSTREAMS_DEFINE_PUSH_CONSTRUCTOR(name_, mode, Ch, push_impl) \
+ ~name_() { \
+ if (this->is_complete()) \
+ this->rdbuf()->BOOST_IOSTREAMS_PUBSYNC(); \
+ } \
+ private: \
+ typedef access_control< \
+ boost::iostreams::detail::chain_client< \
+ chain_type_<Mode, Ch, Tr, Alloc> \
+ >, \
+ Access \
+ > client_type; \
+ template<typename T> \
+ void push_impl(const T& t BOOST_IOSTREAMS_PUSH_PARAMS()) \
+ { client_type::push(t BOOST_IOSTREAMS_PUSH_ARGS()); } \
+ }; \
+ /**/
+BOOST_IOSTREAMS_DEFINE_FILTER_STREAM(filtering_stream, boost::iostreams::chain, char)
+BOOST_IOSTREAMS_DEFINE_FILTER_STREAM(wfiltering_stream, boost::iostreams::chain, wchar_t)
+
+typedef filtering_stream<input> filtering_istream;
+typedef filtering_stream<output> filtering_ostream;
+typedef wfiltering_stream<input> filtering_wistream;
+typedef wfiltering_stream<output> filtering_wostream;
+
+//----------------------------------------------------------------------------//
+
+} } // End namespace iostreams, boost
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp> // MSVC
+
+#endif // #ifndef BOOST_IOSTREAMS_FILTER_STREAM_HPP_INCLUDED
diff --git a/boost/boost/iostreams/filtering_streambuf.hpp b/boost/boost/iostreams/filtering_streambuf.hpp
new file mode 100644
index 00000000000..84338df1e0d
--- /dev/null
+++ b/boost/boost/iostreams/filtering_streambuf.hpp
@@ -0,0 +1,64 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_FILTERING_STREAMBUF_HPP_INCLUDED
+#define BOOST_IOSTREAMS_FILTERING_STREAMBUF_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <exception>
+#include <memory> // allocator.
+#include <boost/iostreams/chain.hpp>
+#include <boost/iostreams/detail/access_control.hpp>
+#include <boost/iostreams/detail/char_traits.hpp>
+#include <boost/iostreams/detail/push.hpp>
+#include <boost/iostreams/detail/streambuf.hpp> // pubsync.
+#include <boost/iostreams/detail/streambuf/chainbuf.hpp>
+#include <boost/mpl/if.hpp>
+
+namespace boost { namespace iostreams {
+
+//
+// Macro: BOOST_IOSTREAMS_DEFINE_FILTERBUF(name_, chain_type_, default_char_)
+// Description: Defines a template derived from std::basic_streambuf which uses
+// a chain to perform i/o. The template has the following parameters:
+// Ch - The character type.
+// Tr - The character traits type.
+// Alloc - The allocator type.
+// Access - Indicates accessibility of the chain interface; must be either
+// public_ or protected_; defaults to public_.
+//
+#define BOOST_IOSTREAMS_DEFINE_FILTER_STREAMBUF(name_, chain_type_, default_char_) \
+ template< typename Mode, typename Ch = default_char_, \
+ typename Tr = BOOST_IOSTREAMS_CHAR_TRAITS(Ch), \
+ typename Alloc = std::allocator<Ch>, typename Access = public_ > \
+ class name_ : public boost::iostreams::detail::chainbuf< \
+ chain_type_<Mode, Ch, Tr, Alloc>, Mode, Access \
+ > \
+ { \
+ public: \
+ typedef Ch char_type; \
+ BOOST_IOSTREAMS_STREAMBUF_TYPEDEFS(Tr) \
+ typedef Mode mode; \
+ typedef chain_type_<Mode, Ch, Tr, Alloc> chain_type; \
+ name_() { } \
+ BOOST_IOSTREAMS_DEFINE_PUSH_CONSTRUCTOR(name_, mode, Ch, push_impl) \
+ ~name_() { if (this->is_complete()) this->BOOST_IOSTREAMS_PUBSYNC(); } \
+ }; \
+ /**/
+BOOST_IOSTREAMS_DEFINE_FILTER_STREAMBUF(filtering_streambuf, boost::iostreams::chain, char)
+BOOST_IOSTREAMS_DEFINE_FILTER_STREAMBUF(filtering_wstreambuf, boost::iostreams::chain, wchar_t)
+
+typedef filtering_streambuf<input> filtering_istreambuf;
+typedef filtering_streambuf<output> filtering_ostreambuf;
+typedef filtering_wstreambuf<input> filtering_wistreambuf;
+typedef filtering_wstreambuf<output> filtering_wostreambuf;
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_FILTERING_STREAMBUF_HPP_INCLUDED
diff --git a/boost/boost/iostreams/flush.hpp b/boost/boost/iostreams/flush.hpp
new file mode 100644
index 00000000000..17eb794524c
--- /dev/null
+++ b/boost/boost/iostreams/flush.hpp
@@ -0,0 +1,124 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_FLUSH_HPP_INCLUDED
+#define BOOST_IOSTREAMS_FLUSH_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // DEDUCED_TYPENAME, MSVC.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/detail/dispatch.hpp>
+#include <boost/iostreams/detail/streambuf.hpp>
+#include <boost/iostreams/detail/wrap_unwrap.hpp>
+#include <boost/iostreams/operations_fwd.hpp>
+#include <boost/iostreams/traits.hpp>
+#include <boost/mpl/if.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp>
+
+namespace boost { namespace iostreams {
+
+namespace detail {
+
+template<typename T>
+struct flush_device_impl;
+
+template<typename T>
+struct flush_filter_impl;
+
+} // End namespace detail.
+
+template<typename T>
+bool flush(T& t)
+{ return detail::flush_device_impl<T>::flush(detail::unwrap(t)); }
+
+template<typename T, typename Sink>
+bool flush(T& t, Sink& snk)
+{ return detail::flush_filter_impl<T>::flush(detail::unwrap(t), snk); }
+
+namespace detail {
+
+//------------------Definition of flush_device_impl---------------------------//
+
+template<typename T>
+struct flush_device_impl
+ : mpl::if_<
+ is_custom<T>,
+ operations<T>,
+ flush_device_impl<
+ BOOST_DEDUCED_TYPENAME
+ dispatch<
+ T, ostream_tag, streambuf_tag, flushable_tag, any_tag
+ >::type
+ >
+ >::type
+ { };
+
+template<>
+struct flush_device_impl<ostream_tag> {
+ template<typename T>
+ static bool flush(T& t)
+ { return t.rdbuf()->BOOST_IOSTREAMS_PUBSYNC() == 0; }
+};
+
+template<>
+struct flush_device_impl<streambuf_tag> {
+ template<typename T>
+ static bool flush(T& t)
+ { return t.BOOST_IOSTREAMS_PUBSYNC() == 0; }
+};
+
+template<>
+struct flush_device_impl<flushable_tag> {
+ template<typename T>
+ static bool flush(T& t) { return t.flush(); }
+};
+
+template<>
+struct flush_device_impl<any_tag> {
+ template<typename T>
+ static bool flush(T&) { return true; }
+};
+
+//------------------Definition of flush_filter_impl---------------------------//
+
+template<typename T>
+struct flush_filter_impl
+ : mpl::if_<
+ is_custom<T>,
+ operations<T>,
+ flush_filter_impl<
+ BOOST_DEDUCED_TYPENAME
+ dispatch<
+ T, flushable_tag, any_tag
+ >::type
+ >
+ >::type
+ { };
+
+template<>
+struct flush_filter_impl<flushable_tag> {
+ template<typename T, typename Sink>
+ static bool flush(T& t, Sink& snk) { return t.flush(snk); }
+};
+
+template<>
+struct flush_filter_impl<any_tag> {
+ template<typename T, typename Sink>
+ static bool flush(T&, Sink&) { return false; }
+};
+
+} // End namespace detail.
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_FLUSH_HPP_INCLUDED
diff --git a/boost/boost/iostreams/get.hpp b/boost/boost/iostreams/get.hpp
new file mode 100644
index 00000000000..79086cfb71c
--- /dev/null
+++ b/boost/boost/iostreams/get.hpp
@@ -0,0 +1,16 @@
+// (C) Copyright Jonathan Turkanis 2005.
+// 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_GET_HPP_INCLUDED
+#define BOOST_IOSTREAMS_GET_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/iostreams/read.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_GET_HPP_INCLUDED
diff --git a/boost/boost/iostreams/imbue.hpp b/boost/boost/iostreams/imbue.hpp
new file mode 100644
index 00000000000..b9d06be17ac
--- /dev/null
+++ b/boost/boost/iostreams/imbue.hpp
@@ -0,0 +1,81 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_IMBUE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_IMBUE_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // DEDUCED_TYPENAME, MSVC.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/detail/dispatch.hpp>
+#include <boost/iostreams/detail/streambuf.hpp>
+#include <boost/iostreams/detail/wrap_unwrap.hpp>
+#include <boost/iostreams/operations_fwd.hpp>
+#include <boost/mpl/if.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp>
+
+namespace boost { namespace iostreams {
+
+namespace detail {
+
+// Implementation templates for simulated tag dispatch.
+template<typename T>
+struct imbue_impl;
+
+} // End namespace detail.
+
+template<typename T, typename Locale>
+void imbue(T& t, const Locale& loc)
+{ detail::imbue_impl<T>::imbue(detail::unwrap(t), loc); }
+
+namespace detail {
+
+//------------------Definition of imbue_impl----------------------------------//
+
+template<typename T>
+struct imbue_impl
+ : mpl::if_<
+ is_custom<T>,
+ operations<T>,
+ imbue_impl<
+ BOOST_DEDUCED_TYPENAME
+ dispatch<
+ T, streambuf_tag, localizable_tag, any_tag
+ >::type
+ >
+ >::type
+ { };
+
+template<>
+struct imbue_impl<any_tag> {
+ template<typename T, typename Locale>
+ static void imbue(T&, const Locale&) { }
+};
+
+template<>
+struct imbue_impl<streambuf_tag> {
+ template<typename T, typename Locale>
+ static void imbue(T& t, const Locale& loc) { t.pubimbue(loc); }
+};
+
+template<>
+struct imbue_impl<localizable_tag> {
+ template<typename T, typename Locale>
+ static void imbue(T& t, const Locale& loc) { t.imbue(loc); }
+};
+
+} // End namespace detail.
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_IMBUE_HPP_INCLUDED
diff --git a/boost/boost/iostreams/input_sequence.hpp b/boost/boost/iostreams/input_sequence.hpp
new file mode 100644
index 00000000000..aa058990608
--- /dev/null
+++ b/boost/boost/iostreams/input_sequence.hpp
@@ -0,0 +1,70 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_INPUT_SEQUENCE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_INPUT_SEQUENCE_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <utility> // pair.
+#include <boost/config.hpp> // DEDUCED_TYPENAME, MSVC.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/detail/wrap_unwrap.hpp>
+#include <boost/iostreams/traits.hpp>
+#include <boost/mpl/if.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp>
+
+namespace boost { namespace iostreams {
+
+namespace detail {
+
+template<typename T>
+struct input_sequence_impl;
+
+} // End namespace detail.
+
+template<typename T>
+inline std::pair<
+ BOOST_DEDUCED_TYPENAME char_type_of<T>::type*,
+ BOOST_DEDUCED_TYPENAME char_type_of<T>::type*
+>
+input_sequence(T& t)
+{ return detail::input_sequence_impl<T>::input_sequence(t); }
+
+namespace detail {
+
+//------------------Definition of direct_impl-------------------------------//
+
+template<typename T>
+struct input_sequence_impl
+ : mpl::if_<
+ detail::is_custom<T>,
+ operations<T>,
+ input_sequence_impl<direct_tag>
+ >::type
+ { };
+
+template<>
+struct input_sequence_impl<direct_tag> {
+ template<typename U>
+ static std::pair<
+ BOOST_DEDUCED_TYPENAME char_type_of<U>::type*,
+ BOOST_DEDUCED_TYPENAME char_type_of<U>::type*
+ >
+ input_sequence(U& u) { return u.input_sequence(); }
+};
+
+} // End namespace detail.
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_INPUT_SEQUENCE_HPP_INCLUDED
diff --git a/boost/boost/iostreams/invert.hpp b/boost/boost/iostreams/invert.hpp
new file mode 100644
index 00000000000..0395ceb414e
--- /dev/null
+++ b/boost/boost/iostreams/invert.hpp
@@ -0,0 +1,162 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_INVERT_HPP_INCLUDED
+#define BOOST_IOSTREAMS_INVERT_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <algorithm> // copy, min.
+#include <cassert>
+#include <boost/config.hpp> // BOOST_DEDUCED_TYPENAME.
+#include <boost/detail/workaround.hpp> // default_filter_buffer_size.
+#include <boost/iostreams/char_traits.hpp>
+#include <boost/iostreams/compose.hpp>
+#include <boost/iostreams/constants.hpp>
+#include <boost/iostreams/device/array.hpp>
+#include <boost/iostreams/detail/buffer.hpp>
+#include <boost/iostreams/detail/counted_array.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/ref.hpp>
+#include <boost/shared_ptr.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp> // MSVC.
+
+namespace boost { namespace iostreams {
+
+//
+// Template name: inverse.
+// Template paramters:
+// Filter - A filter adapter which
+// Description: Returns an instance of an appropriate specialization of inverse.
+//
+template<typename Filter>
+class inverse {
+private:
+ typedef typename category_of<Filter>::type base_category;
+ typedef reference_wrapper<Filter> filter_ref;
+public:
+ typedef typename char_type_of<Filter>::type char_type;
+ typedef typename int_type_of<Filter>::type int_type;
+ typedef char_traits<char_type> traits_type;
+ typedef typename
+ mpl::if_<
+ is_convertible<
+ base_category,
+ input
+ >,
+ output,
+ input
+ >::type mode;
+ struct category
+ : mode,
+ filter_tag,
+ multichar_tag,
+ closable_tag
+ { };
+ explicit inverse( const Filter& filter,
+ std::streamsize buffer_size =
+ default_filter_buffer_size)
+ : pimpl_(new impl(filter, buffer_size))
+ { }
+
+ template<typename Source>
+ std::streamsize read(Source& src, char* s, std::streamsize n)
+ {
+ typedef detail::counted_array_sink<char_type> array_sink;
+ typedef composite<filter_ref, array_sink> filtered_array_sink;
+
+ assert((flags() & f_write) == 0);
+ if (flags() == 0) {
+ flags() = f_read;
+ buf().set(0, 0);
+ }
+
+ filtered_array_sink snk(filter(), array_sink(s, n));
+ int_type status;
+ for ( status = traits_type::good();
+ snk.second().count() < n && status == traits_type::good(); )
+ {
+ status = buf().fill(src);
+ buf().flush(snk);
+ }
+ return snk.second().count() == 0 &&
+ status == traits_type::eof()
+ ?
+ -1
+ :
+ snk.second().count();
+ }
+
+ template<typename Sink>
+ std::streamsize write(Sink& dest, const char* s, std::streamsize n)
+ {
+ typedef detail::counted_array_source<char_type> array_source;
+ typedef composite<filter_ref, array_source> filtered_array_source;
+
+ assert((flags() & f_read) == 0);
+ if (flags() == 0) {
+ flags() = f_write;
+ buf().set(0, 0);
+ }
+
+ filtered_array_source src(filter(), array_source(s, n));
+ for (bool good = true; src.second().count() < n && good; ) {
+ buf().fill(src);
+ good = buf().flush(dest);
+ }
+ return src.second().count();
+ }
+
+ template<typename Device>
+ void close( Device& dev,
+ BOOST_IOS::openmode which =
+ BOOST_IOS::in | BOOST_IOS::out )
+ {
+ if ((which & BOOST_IOS::out) != 0 && (flags() & f_write) != 0)
+ buf().flush(dev);
+ flags() = 0;
+ }
+private:
+ filter_ref filter() { return boost::ref(pimpl_->filter_); }
+ detail::buffer<char_type>& buf() { return pimpl_->buf_; }
+ int& flags() { return pimpl_->flags_; }
+
+ enum flags_ {
+ f_read = 1, f_write = 2
+ };
+
+ struct impl {
+ impl(const Filter& filter, std::streamsize n)
+ : filter_(filter), buf_(n), flags_(0)
+ { buf_.set(0, 0); }
+ Filter filter_;
+ detail::buffer<char_type> buf_;
+ int flags_;
+ };
+ shared_ptr<impl> pimpl_;
+};
+
+//
+// Template name: invert.
+// Template paramters:
+// Filter - A model of InputFilter or OutputFilter.
+// Description: Returns an instance of an appropriate specialization of inverse.
+//
+template<typename Filter>
+inverse<Filter> invert(const Filter& f) { return inverse<Filter>(f); }
+
+//----------------------------------------------------------------------------//
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp> // MSVC.
+
+#endif // #ifndef BOOST_IOSTREAMS_INVERT_HPP_INCLUDED
diff --git a/boost/boost/iostreams/operations.hpp b/boost/boost/iostreams/operations.hpp
new file mode 100644
index 00000000000..0c96bc8c338
--- /dev/null
+++ b/boost/boost/iostreams/operations.hpp
@@ -0,0 +1,25 @@
+// (C) Copyright Jonathan Turkanis 2005.
+// 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_OPERATIONS_HPP_INCLUDED
+#define BOOST_IOSTREAMS_OPERATIONS_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/iostreams/operations_fwd.hpp>
+#include <boost/iostreams/close.hpp>
+#include <boost/iostreams/flush.hpp>
+#include <boost/iostreams/imbue.hpp>
+#include <boost/iostreams/input_sequence.hpp>
+#include <boost/iostreams/optimal_buffer_size.hpp>
+#include <boost/iostreams/output_sequence.hpp>
+#include <boost/iostreams/read.hpp>
+#include <boost/iostreams/seek.hpp>
+#include <boost/iostreams/write.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_OPERATIONS_HPP_INCLUDED
diff --git a/boost/boost/iostreams/operations_fwd.hpp b/boost/boost/iostreams/operations_fwd.hpp
new file mode 100644
index 00000000000..4e9d305fda4
--- /dev/null
+++ b/boost/boost/iostreams/operations_fwd.hpp
@@ -0,0 +1,40 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_OPERATIONS_FWD_HPP_INCLUDED
+#define BOOST_IOSTREAMS_OPERATIONS_FWD_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/mpl/not.hpp>
+#include <boost/type_traits/is_base_and_derived.hpp>
+
+namespace boost { namespace iostreams {
+
+template<typename T>
+struct operations;
+
+namespace detail {
+
+struct custom_tag { };
+
+template<typename T>
+struct is_custom
+ : mpl::not_<
+ is_base_and_derived< custom_tag, operations<T> >
+ >
+ { };
+
+} // End namespace detail.
+
+template<typename T>
+struct operations : detail::custom_tag { };
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_OPERATIONS_FWD_HPP_INCLUDED //--------------//
diff --git a/boost/boost/iostreams/optimal_buffer_size.hpp b/boost/boost/iostreams/optimal_buffer_size.hpp
new file mode 100644
index 00000000000..11a25aebac5
--- /dev/null
+++ b/boost/boost/iostreams/optimal_buffer_size.hpp
@@ -0,0 +1,86 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_OPTIMAL_BUFFER_SIZE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_OPTIMAL_BUFFER_SIZE_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // DEDUCED_TYPENAME, MSVC.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/constants.hpp> // constants.
+#include <boost/iostreams/detail/dispatch.hpp>
+#include <boost/iostreams/detail/wrap_unwrap.hpp>
+#include <boost/iostreams/operations_fwd.hpp>
+#include <boost/mpl/if.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp>
+
+namespace boost { namespace iostreams {
+
+namespace detail {
+
+template<typename T>
+struct optimal_buffer_size_impl;
+
+} // End namespace detail.
+
+template<typename T>
+std::streamsize optimal_buffer_size(const T& t)
+{
+ typedef detail::optimal_buffer_size_impl<T> impl;
+ return impl::optimal_buffer_size(detail::unwrap(t));
+}
+
+namespace detail {
+
+//------------------Definition of optimal_buffer_size_impl--------------------//
+
+template<typename T>
+struct optimal_buffer_size_impl
+ : mpl::if_<
+ is_custom<T>,
+ operations<T>,
+ optimal_buffer_size_impl<
+ BOOST_DEDUCED_TYPENAME
+ dispatch<
+ T, optimally_buffered_tag, device_tag, filter_tag
+ >::type
+ >
+ >::type
+ { };
+
+template<>
+struct optimal_buffer_size_impl<optimally_buffered_tag> {
+ template<typename T>
+ static std::streamsize optimal_buffer_size(const T& t)
+ { return t.optimal_buffer_size(); }
+};
+
+template<>
+struct optimal_buffer_size_impl<device_tag> {
+ template<typename T>
+ static std::streamsize optimal_buffer_size(const T&)
+ { return default_device_buffer_size; }
+};
+
+template<>
+struct optimal_buffer_size_impl<filter_tag> {
+ template<typename T>
+ static std::streamsize optimal_buffer_size(const T&)
+ { return default_filter_buffer_size; }
+};
+
+} // End namespace detail.
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_OPTIMAL_BUFFER_SIZE_HPP_INCLUDED
diff --git a/boost/boost/iostreams/output_sequence.hpp b/boost/boost/iostreams/output_sequence.hpp
new file mode 100644
index 00000000000..f89b866dcea
--- /dev/null
+++ b/boost/boost/iostreams/output_sequence.hpp
@@ -0,0 +1,70 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_OUTPUT_SEQUENCE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_OUTPUT_SEQUENCE_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <utility> // pair.
+#include <boost/config.hpp> // DEDUCED_TYPENAME, MSVC.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/detail/wrap_unwrap.hpp>
+#include <boost/iostreams/traits.hpp>
+#include <boost/mpl/if.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp>
+
+namespace boost { namespace iostreams {
+
+namespace detail {
+
+template<typename T>
+struct output_sequence_impl;
+
+} // End namespace detail.
+
+template<typename T>
+inline std::pair<
+ BOOST_DEDUCED_TYPENAME char_type_of<T>::type*,
+ BOOST_DEDUCED_TYPENAME char_type_of<T>::type*
+>
+output_sequence(T& t)
+{ return detail::output_sequence_impl<T>::output_sequence(t); }
+
+namespace detail {
+
+//------------------Definition of output_sequence_impl------------------------//
+
+template<typename T>
+struct output_sequence_impl
+ : mpl::if_<
+ detail::is_custom<T>,
+ operations<T>,
+ output_sequence_impl<direct_tag>
+ >::type
+ { };
+
+template<>
+struct output_sequence_impl<direct_tag> {
+ template<typename U>
+ static std::pair<
+ BOOST_DEDUCED_TYPENAME char_type_of<U>::type*,
+ BOOST_DEDUCED_TYPENAME char_type_of<U>::type*
+ >
+ output_sequence(U& u) { return u.output_sequence(); }
+};
+
+} // End namespace detail.
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_OUTPUT_SEQUENCE_HPP_INCLUDED
diff --git a/boost/boost/iostreams/pipeline.hpp b/boost/boost/iostreams/pipeline.hpp
new file mode 100644
index 00000000000..c6c1bdba454
--- /dev/null
+++ b/boost/boost/iostreams/pipeline.hpp
@@ -0,0 +1,125 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_PIPABLE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_PIPABLE_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // BOOST_MSVC.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/detail/template_params.hpp>
+#include <boost/iostreams/traits.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/preprocessor/punctuation/comma_if.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/static_assert.hpp>
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+# include <boost/type_traits/is_base_and_derived.hpp>
+#endif
+
+#define BOOST_IOSTREAMS_PIPABLE(filter, arity) \
+ template< BOOST_PP_ENUM_PARAMS(arity, typename T) \
+ BOOST_PP_COMMA_IF(arity) typename Component> \
+ ::boost::iostreams::pipeline< \
+ ::boost::iostreams::detail::pipeline_segment< \
+ filter BOOST_IOSTREAMS_TEMPLATE_ARGS(arity, T) \
+ >, \
+ Component \
+ > operator|( const filter BOOST_IOSTREAMS_TEMPLATE_ARGS(arity, T)& f, \
+ const Component& c ) \
+ { \
+ typedef ::boost::iostreams::detail::pipeline_segment< \
+ filter BOOST_IOSTREAMS_TEMPLATE_ARGS(arity, T) \
+ > segment; \
+ return ::boost::iostreams::pipeline<segment, Component> \
+ (segment(f), c); \
+ } \
+ /**/
+
+namespace boost { namespace iostreams {
+
+template<typename Pipeline, typename Component>
+struct pipeline;
+
+namespace detail {
+
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+ struct pipeline_base { };
+
+ template<typename T>
+ struct is_pipeline
+ : is_base_and_derived<pipeline_base, T>
+ { };
+#endif
+#if BOOST_WORKAROUND(__BORLANDC__, < 0x600)
+ template<typename T>
+ struct is_pipeline : mpl::false_ { };
+
+ template<typename Pipeline, typename Component>
+ struct is_pipeline< pipeline<Pipeline, Component> > : mpl::true_ { };
+#endif
+
+template<typename Component>
+class pipeline_segment
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+ : pipeline_base
+#endif
+{
+public:
+ pipeline_segment(const Component& component)
+ : component_(component)
+ { }
+ template<typename Fn>
+ void for_each(Fn fn) const { fn(component_); }
+ template<typename Chain>
+ void push(Chain& chn) const { chn.push(component_); }
+private:
+ const Component& component_;
+};
+
+} // End namespace detail.
+
+//------------------Definition of Pipeline------------------------------------//
+
+template<typename Pipeline, typename Component>
+struct pipeline : Pipeline {
+ typedef Pipeline pipeline_type;
+ typedef Component component_type;
+ pipeline(const Pipeline& p, const Component& component)
+ : Pipeline(p), component_(component)
+ { }
+ template<typename Fn>
+ void for_each(Fn fn) const
+ {
+ Pipeline::for_each(fn);
+ fn(component_);
+ }
+ template<typename Chain>
+ void push(Chain& chn) const
+ {
+ Pipeline::push(chn);
+ chn.push(component_);
+ }
+ const Pipeline& tail() const { return *this; }
+ const Component& head() const { return component_; }
+private:
+ const Component& component_;
+};
+
+template<typename Pipeline, typename Filter, typename Component>
+pipeline<pipeline<Pipeline, Filter>, Component>
+operator|(const pipeline<Pipeline, Filter>& p, const Component& cmp)
+{
+ BOOST_STATIC_ASSERT(is_filter<Filter>::value);
+ return pipeline<pipeline<Pipeline, Filter>, Component>(p, cmp);
+}
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_PIPABLE_HPP_INCLUDED
diff --git a/boost/boost/iostreams/positioning.hpp b/boost/boost/iostreams/positioning.hpp
new file mode 100644
index 00000000000..7a01baf5155
--- /dev/null
+++ b/boost/boost/iostreams/positioning.hpp
@@ -0,0 +1,102 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+// Thanks to Gareth Sylvester-Bradley for the Dinkumware versions of the
+// positioning functions.
+
+#ifndef BOOST_IOSTREAMS_POSITIONING_HPP_INCLUDED
+#define BOOST_IOSTREAMS_POSITIONING_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp>
+#include <boost/cstdint.hpp>
+#include <boost/integer_traits.hpp>
+#include <boost/iostreams/detail/config/codecvt.hpp> // mbstate_t.
+#include <boost/iostreams/detail/ios.hpp> // streamoff, streampos.
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp>
+
+#ifdef BOOST_NO_STDC_NAMESPACE
+namespace std { using ::fpos_t; }
+#endif
+
+namespace boost { namespace iostreams {
+
+typedef boost::intmax_t stream_offset;
+
+inline std::streamoff stream_offset_to_streamoff(stream_offset off)
+{ return static_cast<stream_offset>(off); }
+
+template<typename PosType> // Hande custom pos_type's.
+inline stream_offset position_to_offset(PosType pos)
+{ return std::streamoff(pos); }
+
+#if ((defined(_YVALS) && !defined(__IBMCPP__)) || defined(_CPPLIB_VER)) && \
+ !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION) \
+ && !defined(__QNX__) \
+ /**/
+
+ /* Dinkumware */
+
+inline std::streampos offset_to_position(stream_offset off)
+{
+ // Use implementation-specific constructor.
+ return std::streampos(std::mbstate_t(), off);
+}
+
+inline stream_offset fpos_t_to_offset(std::fpos_t pos)
+{ // Helper function.
+#if defined(_POSIX_) || (_INTEGRAL_MAX_BITS >= 64)
+ return pos;
+#else
+ return _FPOSOFF(pos);
+#endif
+}
+
+# if defined(_CPPLIB_VER) //--------------------------------------------------//
+
+ /* Recent Dinkumware */
+
+inline stream_offset position_to_offset(std::streampos pos)
+{
+ // Use implementation-specific member function seekpos().
+ return fpos_t_to_offset(pos.seekpos()) +
+ stream_offset(std::streamoff(pos)) -
+ stream_offset(std::streamoff(pos.seekpos()));
+}
+
+# else // # if defined(_CPPLIB_VER) //----------------------------------------//
+
+ /* Old Dinkumware */
+
+inline stream_offset position_to_offset(std::streampos pos)
+{
+ // use implementation-specific member function get_fpos_t().
+ return fpos_t_to_offset(pos.get_fpos_t()) +
+ stream_offset(std::streamoff(pos)) -
+ stream_offset(std::streamoff(pos.get_fpos_t()));
+}
+
+# endif // # if defined(_CPPLIB_VER) //---------------------------------------//
+#else // Dinkumware //--------------------------------------------------------//
+
+ /* Non-Dinkumware */
+
+inline std::streampos offset_to_position(stream_offset off) { return off; }
+
+inline stream_offset position_to_offset(std::streampos pos) { return pos; }
+
+#endif // Dinkumware //-------------------------------------------------------//
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_POSITIONING_HPP_INCLUDED
diff --git a/boost/boost/iostreams/put.hpp b/boost/boost/iostreams/put.hpp
new file mode 100644
index 00000000000..7ea3df2ec15
--- /dev/null
+++ b/boost/boost/iostreams/put.hpp
@@ -0,0 +1,16 @@
+// (C) Copyright Jonathan Turkanis 2005.
+// 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_PUT_HPP_INCLUDED
+#define BOOST_IOSTREAMS_PUT_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/iostreams/write.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_PUT_HPP_INCLUDED
diff --git a/boost/boost/iostreams/putback.hpp b/boost/boost/iostreams/putback.hpp
new file mode 100644
index 00000000000..05cdf4c2459
--- /dev/null
+++ b/boost/boost/iostreams/putback.hpp
@@ -0,0 +1,16 @@
+// (C) Copyright Jonathan Turkanis 2005.
+// 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_PUTBACK_HPP_INCLUDED
+#define BOOST_IOSTREAMS_PUTBACK_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/iostreams/read.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_PUTBACK_HPP_INCLUDED
diff --git a/boost/boost/iostreams/read.hpp b/boost/boost/iostreams/read.hpp
new file mode 100644
index 00000000000..f0c0e0a8615
--- /dev/null
+++ b/boost/boost/iostreams/read.hpp
@@ -0,0 +1,246 @@
+// (C) Copyright Jonathan Turkanis 2005.
+// 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_READ_HPP_INCLUDED
+#define BOOST_IOSTREAMS_READ_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // DEDUCED_TYPENAME, MSVC.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/char_traits.hpp>
+#include <boost/iostreams/detail/char_traits.hpp>
+#include <boost/iostreams/detail/dispatch.hpp>
+#include <boost/iostreams/detail/ios.hpp> // streamsize.
+#include <boost/iostreams/detail/streambuf.hpp>
+#include <boost/iostreams/detail/wrap_unwrap.hpp>
+#include <boost/iostreams/operations_fwd.hpp>
+#include <boost/mpl/if.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp>
+
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) //-----------------------------------//
+# include <boost/iostreams/detail/vc6/read.hpp>
+#else // #if BOOST_WORKAROUND(BOOST_MSVC, < 1300) //--------------------------//
+
+namespace boost { namespace iostreams {
+
+namespace detail {
+
+template<typename T>
+struct read_device_impl;
+
+template<typename T>
+struct read_filter_impl;
+
+} // End namespace detail.
+
+template<typename T>
+typename int_type_of<T>::type get(T& t)
+{ return detail::read_device_impl<T>::get(detail::unwrap(t)); }
+
+template<typename T>
+inline std::streamsize
+read(T& t, typename char_type_of<T>::type* s, std::streamsize n)
+{ return detail::read_device_impl<T>::read(detail::unwrap(t), s, n); }
+
+template<typename T, typename Source>
+std::streamsize
+read(T& t, Source& src, typename char_type_of<T>::type* s, std::streamsize n)
+{ return detail::read_filter_impl<T>::read(detail::unwrap(t), src, s, n); }
+
+template<typename T>
+bool putback(T& t, typename char_type_of<T>::type c)
+{ return detail::read_device_impl<T>::putback(detail::unwrap(t), c); }
+
+//----------------------------------------------------------------------------//
+
+namespace detail {
+
+// Helper function for adding -1 as EOF indicator.
+inline std::streamsize check_eof(std::streamsize n) { return n != 0 ? n : -1; }
+
+// Helper templates for reading from streambufs.
+template<bool IsLinked>
+struct true_eof_impl;
+
+template<>
+struct true_eof_impl<true> {
+ template<typename T>
+ static bool true_eof(T& t) { return t.true_eof(); }
+};
+
+template<>
+struct true_eof_impl<false> {
+ template<typename T>
+ static bool true_eof(T& t) { return true; }
+};
+
+template<typename T>
+inline bool true_eof(T& t)
+{
+ const bool linked = is_linked<T>::value;
+ return true_eof_impl<linked>::true_eof(t);
+}
+
+//------------------Definition of read_device_impl----------------------------//
+
+template<typename T>
+struct read_device_impl
+ : mpl::if_<
+ detail::is_custom<T>,
+ operations<T>,
+ read_device_impl<
+ BOOST_DEDUCED_TYPENAME
+ detail::dispatch<
+ T, istream_tag, streambuf_tag, input
+ >::type
+ >
+ >::type
+ { };
+
+template<>
+struct read_device_impl<istream_tag> {
+ template<typename T>
+ static typename int_type_of<T>::type get(T& t)
+ { return t.get(); }
+
+ template<typename T>
+ static std::streamsize
+ read(T& t, typename char_type_of<T>::type* s, std::streamsize n)
+ { return check_eof(t.rdbuf()->sgetn(s, n)); }
+
+ template<typename T>
+ static bool putback(T& t, typename char_type_of<T>::type c)
+ {
+ typedef typename char_type_of<T>::type char_type;
+ typedef BOOST_IOSTREAMS_CHAR_TRAITS(char_type) traits_type;
+ return !traits_type::eq_int_type( t.rdbuf()->sputbackc(c),
+ traits_type::eof() );
+ }
+};
+
+template<>
+struct read_device_impl<streambuf_tag> {
+ template<typename T>
+ static typename int_type_of<T>::type
+ get(T& t)
+ { // gcc 2.95 needs namespace qualification for char_traits.
+ typedef typename char_type_of<T>::type char_type;
+ typedef iostreams::char_traits<char_type> traits_type;
+ typename int_type_of<T>::type c;
+ return !traits_type::is_eof(c = t.sbumpc()) ||
+ detail::true_eof(t)
+ ?
+ c : traits_type::would_block();
+ }
+
+ template<typename T>
+ static std::streamsize
+ read(T& t, typename char_type_of<T>::type* s, std::streamsize n)
+ {
+ std::streamsize amt;
+ return (amt = t.sgetn(s, n)) != 0 ?
+ amt :
+ detail::true_eof(t) ?
+ -1 :
+ 0;
+ }
+
+ template<typename T>
+ static bool putback(T& t, typename char_type_of<T>::type c)
+ { // gcc 2.95 needs namespace qualification for char_traits.
+ typedef typename char_type_of<T>::type char_type;
+ typedef iostreams::char_traits<char_type> traits_type;
+ return !traits_type::is_eof(t.sputbackc(c));
+ }
+};
+
+template<>
+struct read_device_impl<input> {
+ template<typename T>
+ static typename int_type_of<T>::type
+ get(T& t)
+ { // gcc 2.95 needs namespace qualification for char_traits.
+ typedef typename char_type_of<T>::type char_type;
+ typedef iostreams::char_traits<char_type> traits_type;
+ char_type c;
+ std::streamsize amt;
+ return (amt = t.read(&c, 1)) == 1 ?
+ traits_type::to_int_type(c) :
+ amt == -1 ?
+ traits_type::eof() :
+ traits_type::would_block();
+ }
+
+ template<typename T>
+ static std::streamsize
+ read(T& t, typename char_type_of<T>::type* s, std::streamsize n)
+ { return t.read(s, n); }
+
+ template<typename T>
+ static bool putback(T& t, typename char_type_of<T>::type c)
+ { // T must be Peekable.
+ return t.putback(c);
+ }
+};
+
+//------------------Definition of read_filter_impl----------------------------//
+
+template<typename T>
+struct read_filter_impl
+ : mpl::if_<
+ detail::is_custom<T>,
+ operations<T>,
+ read_filter_impl<
+ BOOST_DEDUCED_TYPENAME
+ detail::dispatch<
+ T, multichar_tag, any_tag
+ >::type
+ >
+ >::type
+ { };
+
+template<>
+struct read_filter_impl<multichar_tag> {
+ template<typename T, typename Source>
+ static std::streamsize read
+ (T& t, Source& src, typename char_type_of<T>::type* s, std::streamsize n)
+ { return t.read(src, s, n); }
+};
+
+template<>
+struct read_filter_impl<any_tag> {
+ template<typename T, typename Source>
+ static std::streamsize read
+ (T& t, Source& src, typename char_type_of<T>::type* s, std::streamsize n)
+ { // gcc 2.95 needs namespace qualification for char_traits.
+ typedef typename char_type_of<T>::type char_type;
+ typedef iostreams::char_traits<char_type> traits_type;
+ for (std::streamsize off = 0; off < n; ++off) {
+ typename traits_type::int_type c = t.get(src);
+ if (traits_type::is_eof(c))
+ return check_eof(off);
+ if (traits_type::would_block(c))
+ return off;
+ s[off] = traits_type::to_char_type(c);
+ }
+ return n;
+ }
+};
+
+} // End namespace detail.
+
+} } // End namespaces iostreams, boost.
+
+#endif // #if BOOST_WORKAROUND(BOOST_MSVC, < 1300) //-------------------------//
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_READ_HPP_INCLUDED
diff --git a/boost/boost/iostreams/restrict.hpp b/boost/boost/iostreams/restrict.hpp
new file mode 100644
index 00000000000..3b1440b4872
--- /dev/null
+++ b/boost/boost/iostreams/restrict.hpp
@@ -0,0 +1,418 @@
+// (C) Copyright Jonathan Turkanis 2005.
+// 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_RESTRICT_HPP_INCLUDED
+#define BOOST_IOSTREAMS_RESTRICT_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <algorithm> // min.
+#include <utility> // pair.
+#include <boost/cstdint.hpp> // intmax_t.
+#include <boost/config.hpp> // DEDUCED_TYPENAME.
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/char_traits.hpp>
+#include <boost/iostreams/detail/adapter/basic_adapter.hpp>
+#include <boost/iostreams/detail/call_traits.hpp>
+#include <boost/iostreams/detail/enable_if_stream.hpp>
+#include <boost/iostreams/detail/error.hpp>
+#include <boost/iostreams/detail/ios.hpp> // failure.
+#include <boost/iostreams/detail/select.hpp>
+#include <boost/iostreams/operations.hpp>
+#include <boost/iostreams/skip.hpp>
+#include <boost/iostreams/traits.hpp> // mode_of, is_direct.
+#include <boost/mpl/bool.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+#include <boost/iostreams/detail/config/disable_warnings.hpp> // VC7.1 C4244.
+
+namespace boost { namespace iostreams {
+
+namespace detail {
+
+//
+// Template name: restricted_indirect_device.
+// Description: Provides an restricted view of an indirect Device.
+// Template paramters:
+// Device - An indirect model of Device that models either Source or
+// SeekableDevice.
+//
+template<typename Device>
+class restricted_indirect_device : public basic_adapter<Device> {
+private:
+ typedef typename detail::param_type<Device>::type param_type;
+public:
+ typedef typename char_type_of<Device>::type char_type;
+ struct category
+ : mode_of<Device>::type,
+ device_tag,
+ closable_tag,
+ flushable_tag,
+ localizable_tag,
+ optimally_buffered_tag
+ { };
+ restricted_indirect_device( param_type dev, stream_offset off,
+ stream_offset len = -1 );
+ std::streamsize read(char_type* s, std::streamsize n);
+ std::streamsize write(const char_type* s, std::streamsize n);
+ std::streampos seek(stream_offset off, BOOST_IOS::seekdir way);
+private:
+ stream_offset beg_, pos_, end_;
+};
+
+//
+// Template name: restricted_direct_device.
+// Description: Provides an restricted view of a Direct Device.
+// Template paramters:
+// Device - A model of Direct and Device.
+//
+template<typename Device>
+class restricted_direct_device : public basic_adapter<Device> {
+public:
+ typedef typename char_type_of<Device>::type char_type;
+ typedef std::pair<char_type*, char_type*> pair_type;
+ struct category
+ : mode_of<Device>::type,
+ device_tag,
+ direct_tag,
+ closable_tag,
+ localizable_tag
+ { };
+ restricted_direct_device( const Device& dev, stream_offset off,
+ stream_offset len = -1 );
+ pair_type input_sequence();
+ pair_type output_sequence();
+private:
+ pair_type sequence(mpl::true_);
+ pair_type sequence(mpl::false_);
+ char_type *beg_, *end_;
+};
+
+//
+// Template name: restricted_filter.
+// Description: Provides an restricted view of a Filter.
+// Template paramters:
+// Filter - An indirect model of Filter.
+//
+template<typename Filter>
+class restricted_filter : public basic_adapter<Filter> {
+public:
+ typedef typename char_type_of<Filter>::type char_type;
+ struct category
+ : mode_of<Filter>::type,
+ filter_tag,
+ multichar_tag,
+ closable_tag,
+ localizable_tag,
+ optimally_buffered_tag
+ { };
+ restricted_filter( const Filter& flt, stream_offset off,
+ stream_offset len = -1 );
+
+ template<typename Source>
+ std::streamsize read(Source& src, char_type* s, std::streamsize n)
+ {
+ using namespace std;
+ if (!open_)
+ open(src);
+ streamsize amt =
+ end_ != -1 ?
+ (std::min) (n, static_cast<streamsize>(end_ - pos_)) :
+ n;
+ streamsize result = iostreams::read(this->component(), src, s, amt);
+ if (result != -1)
+ pos_ += result;
+ return result;
+ }
+
+ template<typename Sink>
+ std::streamsize write(Sink& snk, const char_type* s, std::streamsize n)
+ {
+ if (!open_)
+ open(snk);
+ if (end_ != -1 && pos_ + n >= end_)
+ bad_write();
+ std::streamsize result =
+ iostreams::write(this->component(), snk, s, n);
+ pos_ += result;
+ return result;
+ }
+
+ template<typename Device>
+ std::streampos seek(Device& dev, stream_offset off, BOOST_IOS::seekdir way)
+ {
+ stream_offset next;
+ if (way == BOOST_IOS::beg) {
+ next = beg_ + off;
+ } else if (way == BOOST_IOS::cur) {
+ next = pos_ + off;
+ } else if (end_ != -1) {
+ next = end_ + off;
+ } else {
+ // Restriction is half-open; seek relative to the actual end.
+ pos_ = this->component().seek(dev, off, BOOST_IOS::end);
+ if (pos_ < beg_)
+ bad_seek();
+ return offset_to_position(pos_ - beg_);
+ }
+ if (next < beg_ || end_ != -1 && next >= end_)
+ bad_seek();
+ pos_ = this->component().seek(dev, next, BOOST_IOS::cur);
+ return offset_to_position(pos_ - beg_);
+ }
+private:
+ template<typename Device>
+ void open(Device& dev)
+ {
+ open_ = true;
+ iostreams::skip(this->component(), dev, beg_);
+ }
+ stream_offset beg_, pos_, end_;
+ bool open_;
+};
+
+template<typename T>
+struct restriction_traits
+ : iostreams::select< // Disambiguation for Tru64.
+ is_filter<T>, restricted_filter<T>,
+ is_direct<T>, restricted_direct_device<T>,
+ else_, restricted_indirect_device<T>
+ >
+ { };
+
+} // End namespace detail.
+
+template<typename T>
+struct restriction : public detail::restriction_traits<T>::type {
+ typedef typename detail::param_type<T>::type param_type;
+ typedef typename detail::restriction_traits<T>::type base_type;
+ restriction(param_type t, stream_offset off, stream_offset len = -1)
+ : base_type(t, off, len)
+ { }
+};
+
+//--------------Implementation of restrict------------------------------------//
+
+// Note: The following workarounds are patterned after resolve.hpp. It has not
+// yet been confirmed that they are necessary.
+
+#ifndef BOOST_IOSTREAMS_BROKEN_OVERLOAD_RESOLUTION //-------------------------//
+# ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //-------------------------------//
+
+template<typename T>
+restriction<T> restrict( const T& t, stream_offset off, stream_offset len = -1
+ BOOST_IOSTREAMS_DISABLE_IF_STREAM(T) )
+{ return restriction<T>(t, off, len); }
+
+template<typename Ch, typename Tr>
+restriction< std::basic_streambuf<Ch, Tr> >
+restrict(std::basic_streambuf<Ch, Tr>& sb, stream_offset off, stream_offset len = -1)
+{ return restriction< std::basic_streambuf<Ch, Tr> >(sb, off, len); }
+
+template<typename Ch, typename Tr>
+restriction< std::basic_istream<Ch, Tr> >
+restrict(std::basic_istream<Ch, Tr>& is, stream_offset off, stream_offset len = -1)
+{ return restriction< std::basic_istream<Ch, Tr> >(is, off, len); }
+
+template<typename Ch, typename Tr>
+restriction< std::basic_ostream<Ch, Tr> >
+restrict(std::basic_ostream<Ch, Tr>& os, stream_offset off, stream_offset len = -1)
+{ return restriction< std::basic_ostream<Ch, Tr> >(os, off, len); }
+
+template<typename Ch, typename Tr>
+restriction< std::basic_iostream<Ch, Tr> >
+restrict(std::basic_iostream<Ch, Tr>& io, stream_offset off, stream_offset len = -1)
+{ return restriction< std::basic_iostream<Ch, Tr> >(io, off, len); }
+
+# else // # ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //---------------------//
+
+template<typename T>
+restriction<T> restrict( const T& t, stream_offset off, stream_offset len = -1
+ BOOST_IOSTREAMS_DISABLE_IF_STREAM(T) )
+{ return restriction<T>(t, off, len); }
+
+restriction<std::streambuf>
+restrict(std::streambuf& sb, stream_offset off, stream_offset len = -1)
+{ return restriction<std::streambuf>(sb, off, len); }
+
+restriction<std::istream>
+restrict(std::istream<Ch, Tr>& is, stream_offset off, stream_offset len = -1)
+{ return restriction<std::istream>(is, off, len); }
+
+restriction<std::ostream>
+restrict(std::ostream<Ch, Tr>& os, stream_offset off, stream_offset len = -1)
+{ return restriction<std::ostream>(os, off, len); }
+
+restriction<std::iostream>
+restrict(std::iostream<Ch, Tr>& io, stream_offset off, stream_offset len = -1)
+{ return restriction<std::iostream>(io, off, len); }
+
+# endif // # ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //--------------------//
+#else // #ifndef BOOST_IOSTREAMS_BROKEN_OVERLOAD_RESOLUTION //----------------//
+
+template<typename T>
+restriction<T>
+restrict(const T& t, stream_offset off, stream_offset len, mpl::true_)
+{ // Bad overload resolution.
+ return restriction<T>(const_cast<T&>(t, off, len));
+}
+
+template<typename T>
+restriction<T>
+restrict(const T& t, stream_offset off, stream_offset len, mpl::false_)
+{ return restriction<T>(t, off, len); }
+
+template<typename T>
+restriction<T>
+restrict( const T& t, stream_offset off, stream_offset len = -1
+ BOOST_IOSTREAMS_DISABLE_IF_STREAM(T) )
+{ return restrict(t, off, len, is_std_io<T>()); }
+
+# if !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && \
+ !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) && \
+ !defined(__GNUC__) // ---------------------------------------------------//
+
+template<typename T>
+restriction<T>
+restrict(T& t, stream_offset off, stream_offset len = -1)
+{ return restriction<T>(t, off, len); }
+
+# endif // Borland 5.x, VC6-7.0 or GCC 2.9x //--------------------------------//
+#endif // #ifndef BOOST_IOSTREAMS_BROKEN_OVERLOAD_RESOLUTION //---------------//
+//----------------------------------------------------------------------------//
+
+namespace detail {
+
+//--------------Implementation of restricted_indirect_device------------------//
+
+template<typename Device>
+restricted_indirect_device<Device>::restricted_indirect_device
+ (param_type dev, stream_offset off, stream_offset len)
+ : basic_adapter<Device>(dev), beg_(off), pos_(off),
+ end_(len != -1 ? off + len : -1)
+{
+ if (len < -1 || off < 0)
+ throw BOOST_IOSTREAMS_FAILURE("bad offset");
+ iostreams::skip(this->component(), off);
+}
+
+template<typename Device>
+inline std::streamsize restricted_indirect_device<Device>::read
+ (char_type* s, std::streamsize n)
+{
+ using namespace std;
+ streamsize amt =
+ end_ != -1 ?
+ (std::min) (n, static_cast<streamsize>(end_ - pos_)) :
+ n;
+ streamsize result = iostreams::read(this->component(), s, amt);
+ if (result != -1)
+ pos_ += result;
+ return result;
+}
+
+template<typename Device>
+inline std::streamsize restricted_indirect_device<Device>::write
+ (const char_type* s, std::streamsize n)
+{
+ if (end_ != -1 && pos_ + n >= end_)
+ bad_write();
+ std::streamsize result = iostreams::write(this->component(), s, n);
+ pos_ += result;
+ return result;
+}
+
+template<typename Device>
+std::streampos restricted_indirect_device<Device>::seek
+ (stream_offset off, BOOST_IOS::seekdir way)
+{
+ stream_offset next;
+ if (way == BOOST_IOS::beg) {
+ next = beg_ + off;
+ } else if (way == BOOST_IOS::cur) {
+ next = pos_ + off;
+ } else if (end_ != -1) {
+ next = end_ + off;
+ } else {
+ // Restriction is half-open; seek relative to the actual end.
+ pos_ = iostreams::seek(this->component(), off, BOOST_IOS::end);
+ if (pos_ < beg_)
+ bad_seek();
+ return offset_to_position(pos_ - beg_);
+ }
+ if (next < beg_ || end_ != -1 && next >= end_)
+ bad_seek();
+ pos_ = iostreams::seek(this->component(), next - pos_, BOOST_IOS::cur);
+ return offset_to_position(pos_ - beg_);
+}
+
+//--------------Implementation of restricted_direct_device--------------------//
+
+template<typename Device>
+restricted_direct_device<Device>::restricted_direct_device
+ (const Device& dev, stream_offset off, stream_offset len)
+ : basic_adapter<Device>(dev), beg_(0), end_(0)
+{
+ std::pair<char_type*, char_type*> seq =
+ sequence(is_convertible<category, input>());
+ if ( off < 0 || len < -1 ||
+ len != -1 && off + len > seq.second - seq.first )
+ {
+ throw BOOST_IOSTREAMS_FAILURE("bad offset");
+ }
+ beg_ = seq.first + off;
+ end_ = len != -1 ?
+ seq.first + off + len :
+ seq.second;
+}
+
+template<typename Device>
+typename restricted_direct_device<Device>::pair_type
+restricted_direct_device<Device>::input_sequence()
+{
+ BOOST_STATIC_ASSERT((is_convertible<category, input>::value));
+ return std::make_pair(beg_, end_);
+}
+
+template<typename Device>
+typename restricted_direct_device<Device>::pair_type
+restricted_direct_device<Device>::output_sequence()
+{
+ BOOST_STATIC_ASSERT((is_convertible<category, output>::value));
+ return std::make_pair(beg_, end_);
+}
+
+template<typename Device>
+typename restricted_direct_device<Device>::pair_type
+restricted_direct_device<Device>::sequence(mpl::true_)
+{ return iostreams::input_sequence(this->component()); }
+
+template<typename Device>
+typename restricted_direct_device<Device>::pair_type
+restricted_direct_device<Device>::sequence(mpl::false_)
+{ return iostreams::output_sequence(this->component()); }
+
+//--------------Implementation of restricted_filter---------------------------//
+
+template<typename Filter>
+restricted_filter<Filter>::restricted_filter
+ (const Filter& flt, stream_offset off, stream_offset len)
+ : basic_adapter<Filter>(flt), beg_(off),
+ pos_(off), end_(len != -1 ? off + len : -1), open_(false)
+{
+ if (len < -1 || off < 0)
+ throw BOOST_IOSTREAMS_FAILURE("bad offset");
+}
+
+} // End namespace detail.
+
+} } // End namespaces iostreams, boost.
+
+
+#endif // #ifndef BOOST_IOSTREAMS_RESTRICT_HPP_INCLUDED
diff --git a/boost/boost/iostreams/seek.hpp b/boost/boost/iostreams/seek.hpp
new file mode 100644
index 00000000000..b09f1e28bc3
--- /dev/null
+++ b/boost/boost/iostreams/seek.hpp
@@ -0,0 +1,179 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_SEEK_HPP_INCLUDED
+#define BOOST_IOSTREAMS_SEEK_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // DEDUCED_TYPENAME, MSVC.
+#include <boost/integer_traits.hpp>
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/detail/dispatch.hpp>
+#include <boost/iostreams/detail/ios.hpp> // streamsize, seekdir, openmode.
+#include <boost/iostreams/detail/streambuf.hpp>
+#include <boost/iostreams/detail/wrap_unwrap.hpp>
+#include <boost/iostreams/operations_fwd.hpp>
+#include <boost/iostreams/positioning.hpp>
+#include <boost/mpl/if.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp>
+
+namespace boost { namespace iostreams {
+
+namespace detail {
+
+template<typename T>
+struct seek_device_impl;
+
+template<typename T>
+struct seek_filter_impl;
+
+} // End namespace detail.
+
+template<typename T>
+inline std::streampos
+seek( T& t, stream_offset off, BOOST_IOS::seekdir way,
+ BOOST_IOS::openmode which = BOOST_IOS::in | BOOST_IOS::out )
+{
+ using namespace detail;
+ return seek_device_impl<T>::seek(detail::unwrap(t), off, way, which);
+}
+
+template<typename T, typename Device>
+inline std::streampos
+seek( T& t, Device& dev, stream_offset off, BOOST_IOS::seekdir way,
+ BOOST_IOS::openmode which = BOOST_IOS::in | BOOST_IOS::out )
+{
+ using namespace detail;
+ return seek_filter_impl<T>::seek(detail::unwrap(t), dev, off, way, which);
+}
+
+namespace detail {
+
+//------------------Definition of seek_device_impl----------------------------//
+
+template<typename T>
+struct seek_device_impl
+ : mpl::if_<
+ is_custom<T>,
+ operations<T>,
+ seek_device_impl<
+ BOOST_DEDUCED_TYPENAME
+ dispatch<
+ T, iostream_tag, istream_tag, ostream_tag,
+ streambuf_tag, two_head, any_tag
+ >::type
+ >
+ >::type
+ { };
+
+struct seek_impl_basic_ios {
+ template<typename T>
+ static std::streampos seek( T& t, stream_offset off,
+ BOOST_IOS::seekdir way,
+ BOOST_IOS::openmode which )
+ {
+ if ( way == BOOST_IOS::beg &&
+ ( off < integer_traits<std::streamoff>::const_min ||
+ off > integer_traits<std::streamoff>::const_max ) )
+ {
+ return t.rdbuf()->pubseekpos(offset_to_position(off));
+ } else {
+ return t.rdbuf()->pubseekoff(off, way, which);
+ }
+ }
+};
+
+template<>
+struct seek_device_impl<iostream_tag> : seek_impl_basic_ios { };
+
+template<>
+struct seek_device_impl<istream_tag> : seek_impl_basic_ios { };
+
+template<>
+struct seek_device_impl<ostream_tag> : seek_impl_basic_ios { };
+
+template<>
+struct seek_device_impl<streambuf_tag> {
+ template<typename T>
+ static std::streampos seek( T& t, stream_offset off,
+ BOOST_IOS::seekdir way,
+ BOOST_IOS::openmode which )
+ {
+ if ( way == BOOST_IOS::beg &&
+ ( off < integer_traits<std::streamoff>::const_min ||
+ off > integer_traits<std::streamoff>::const_max ) )
+ {
+ return t.BOOST_IOSTREAMS_PUBSEEKPOS(offset_to_position(off));
+ } else {
+ return t.BOOST_IOSTREAMS_PUBSEEKOFF(off, way, which);
+ }
+ }
+};
+
+template<>
+struct seek_device_impl<two_head> {
+ template<typename T>
+ static std::streampos seek( T& t, stream_offset off,
+ BOOST_IOS::seekdir way,
+ BOOST_IOS::openmode which )
+ { return t.seek(off, way, which); }
+};
+
+template<>
+struct seek_device_impl<any_tag> {
+ template<typename T>
+ static std::streampos seek( T& t, stream_offset off,
+ BOOST_IOS::seekdir way,
+ BOOST_IOS::openmode )
+ { return t.seek(off, way); }
+};
+
+//------------------Definition of seek_filter_impl----------------------------//
+
+template<typename T>
+struct seek_filter_impl
+ : mpl::if_<
+ is_custom<T>,
+ operations<T>,
+ seek_filter_impl<
+ BOOST_DEDUCED_TYPENAME
+ dispatch<T, two_head, any_tag>::type
+ >
+ >::type
+ { };
+
+template<>
+struct seek_filter_impl<two_head> {
+ template<typename T, typename Device>
+ static std::streampos seek( T& t, Device& d,
+ stream_offset off,
+ BOOST_IOS::seekdir way,
+ BOOST_IOS::openmode which )
+ { return t.seek(d, off, way, which); }
+};
+
+template<>
+struct seek_filter_impl<any_tag> {
+ template<typename T, typename Device>
+ static std::streampos seek( T& t, Device& d,
+ stream_offset off,
+ BOOST_IOS::seekdir way,
+ BOOST_IOS::openmode )
+ { return t.seek(d, off, way); }
+};
+
+} // End namespace detail.
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_SEEK_HPP_INCLUDED
diff --git a/boost/boost/iostreams/skip.hpp b/boost/boost/iostreams/skip.hpp
new file mode 100644
index 00000000000..e773ea2e44c
--- /dev/null
+++ b/boost/boost/iostreams/skip.hpp
@@ -0,0 +1,87 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+// To do: handle bidirection streams and output-seekable components.
+
+#ifndef BOOST_IOSTREAMS_SKIP_HPP_INCLUDED
+#define BOOST_IOSTREAMS_SKIP_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/iostreams/char_traits.hpp>
+#include <boost/iostreams/detail/ios.hpp> // failure.
+#include <boost/iostreams/operations.hpp>
+#include <boost/iostreams/traits.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+namespace boost { namespace iostreams {
+
+namespace detail {
+
+template<typename Device>
+void skip(Device& dev, stream_offset off, mpl::true_)
+{ iostreams::seek(dev, off, BOOST_IOS::cur); }
+
+template<typename Device>
+void skip(Device& dev, stream_offset off, mpl::false_)
+{ // gcc 2.95 needs namespace qualification for char_traits.
+ typedef typename char_type_of<Device>::type char_type;
+ typedef iostreams::char_traits<char_type> traits_type;
+ for (stream_offset z = 0; z < off; ) {
+ typename traits_type::int_type c;
+ if (traits_type::is_eof(c = iostreams::get(dev)))
+ throw BOOST_IOSTREAMS_FAILURE("bad skip offset");
+ if (!traits_type::would_block(c))
+ ++z;
+ }
+}
+
+template<typename Filter, typename Device>
+void skip(Filter& flt, Device& dev, stream_offset off, mpl::true_)
+{ flt.seek(dev, off, BOOST_IOS::cur); }
+
+template<typename Filter, typename Device>
+void skip(Filter& flt, Device& dev, stream_offset off, mpl::false_)
+{
+ typedef typename char_type_of<Device>::type char_type;
+ char_type c;
+ for (stream_offset z = 0; z < off; ) {
+ std::streamsize amt;
+ if ((amt = iostreams::read(flt, dev, &c, 1)) == -1)
+ throw BOOST_IOSTREAMS_FAILURE("bad skip offset");
+ if (amt == 1)
+ ++z;
+ }
+}
+
+} // End namespace detail.
+
+template<typename Device>
+void skip(Device& dev, stream_offset off)
+{
+ typedef typename mode_of<Device>::type mode;
+ detail::skip(dev, off, is_convertible<mode, seekable>());
+}
+
+template<typename Filter, typename Device>
+void skip(Filter& flt, Device& dev, stream_offset off)
+{
+ typedef typename mode_of<Filter>::type filter_mode;
+ typedef typename mode_of<Device>::type device_mode;
+ typedef mpl::and_<
+ is_convertible<filter_mode, output_seekable>,
+ is_convertible<device_mode, output_seekable>
+ > can_seek;
+ detail::skip(flt, dev, off, can_seek());
+}
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_SKIP_HPP_INCLUDED //------------------------//
diff --git a/boost/boost/iostreams/stream.hpp b/boost/boost/iostreams/stream.hpp
new file mode 100644
index 00000000000..6cc75df47a8
--- /dev/null
+++ b/boost/boost/iostreams/stream.hpp
@@ -0,0 +1,133 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_STREAM_HPP_INCLUDED
+#define BOOST_IOSTREAMS_STREAM_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/iostreams/constants.hpp>
+#include <boost/iostreams/detail/char_traits.hpp>
+#include <boost/iostreams/detail/config/overload_resolution.hpp>
+#include <boost/iostreams/detail/forward.hpp>
+#include <boost/iostreams/detail/iostream.hpp> // standard streams.
+#include <boost/iostreams/detail/select.hpp>
+#include <boost/iostreams/stream_buffer.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+namespace boost { namespace iostreams { namespace detail {
+
+template<typename Device, typename Tr>
+struct stream_traits {
+ typedef typename char_type_of<Device>::type char_type;
+ typedef Tr traits_type;
+ typedef typename category_of<Device>::type mode;
+ typedef typename
+ iostreams::select< // Dismbiguation required for Tru64.
+ mpl::and_<
+ is_convertible<mode, input>,
+ is_convertible<mode, output>
+ >,
+ BOOST_IOSTREAMS_BASIC_IOSTREAM(char_type, traits_type),
+ is_convertible<mode, input>,
+ BOOST_IOSTREAMS_BASIC_ISTREAM(char_type, traits_type),
+ else_,
+ BOOST_IOSTREAMS_BASIC_OSTREAM(char_type, traits_type)
+ >::type type;
+};
+
+// By encapsulating initialization in a base, we can define the macro
+// BOOST_IOSTREAMS_DEFINE_FORWARDING_FUNCTIONS to generate constuctors
+// without base member initializer lists.
+template< typename Device,
+ typename Tr =
+ BOOST_IOSTREAMS_CHAR_TRAITS(
+ BOOST_DEDUCED_TYPENAME char_type_of<Device>::type
+ ),
+ typename Alloc =
+ std::allocator<
+ BOOST_DEDUCED_TYPENAME char_type_of<Device>::type
+ >,
+ typename Base = // VC6 Workaround.
+ BOOST_DEDUCED_TYPENAME
+ detail::stream_traits<Device, Tr>::type >
+class stream_base
+ : protected base_from_member< stream_buffer<Device, Tr, Alloc> >,
+ public Base
+{
+private:
+ typedef base_from_member< stream_buffer<Device, Tr, Alloc> > pbase_type;
+ typedef typename stream_traits<Device, Tr>::type stream_type;
+protected:
+ using pbase_type::member; // Avoid warning about 'this' in initializer list.
+public:
+ stream_base() : pbase_type(), stream_type(&member) { }
+};
+
+} } } // End namespaces detail, iostreams, boost.
+
+#ifdef BOOST_IOSTREAMS_BROKEN_OVERLOAD_RESOLUTION
+# include <boost/iostreams/detail/broken_overload_resolution/stream.hpp>
+#else
+
+namespace boost { namespace iostreams {
+
+//
+// Template name: stream.
+// Description: A iostream which reads from and writes to an instance of a
+// designated device type.
+// Template paramters:
+// Device - A device type.
+// Alloc - The allocator type.
+//
+template< typename Device,
+ typename Tr =
+ BOOST_IOSTREAMS_CHAR_TRAITS(
+ BOOST_DEDUCED_TYPENAME char_type_of<Device>::type
+ ),
+ typename Alloc =
+ std::allocator<
+ BOOST_DEDUCED_TYPENAME char_type_of<Device>::type
+ > >
+struct stream : detail::stream_base<Device, Tr, Alloc> {
+public:
+ typedef typename char_type_of<Device>::type char_type;
+ BOOST_IOSTREAMS_STREAMBUF_TYPEDEFS(Tr)
+private:
+ typedef typename
+ detail::stream_traits<
+ Device, Tr
+ >::type stream_type;
+ typedef Device policy_type;
+public:
+ stream() { }
+ BOOST_IOSTREAMS_FORWARD( stream, open_impl, Device,
+ BOOST_IOSTREAMS_PUSH_PARAMS,
+ BOOST_IOSTREAMS_PUSH_ARGS )
+ bool is_open() const { return this->member.is_open(); }
+ void close() { this->member.close(); }
+ bool auto_close() const { return this->member.auto_close(); }
+ void set_auto_close(bool close) { this->member.set_auto_close(close); }
+ bool strict_sync() { return this->member.strict_sync(); }
+ Device& operator*() { return *this->member; }
+ Device* operator->() { return &*this->member; }
+ Device* component() { return this->member.component(); }
+private:
+ void open_impl(const Device& dev BOOST_IOSTREAMS_PUSH_PARAMS()) // For forwarding.
+ {
+ this->clear();
+ this->member.open(dev BOOST_IOSTREAMS_PUSH_ARGS());
+ }
+};
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifdef BOOST_IOSTREAMS_BROKEN_OVERLOAD_RESOLUTION
+
+#endif // #ifndef BOOST_IOSTREAMS_stream_HPP_INCLUDED
diff --git a/boost/boost/iostreams/stream_buffer.hpp b/boost/boost/iostreams/stream_buffer.hpp
new file mode 100644
index 00000000000..2018ed670d6
--- /dev/null
+++ b/boost/boost/iostreams/stream_buffer.hpp
@@ -0,0 +1,108 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_STREAM_BUFFER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_STREAM_BUFFER_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <memory> // allocator.
+#include <boost/config.hpp> // BOOST_DEDUCED_TYPENAME.
+#include <boost/iostreams/detail/char_traits.hpp>
+#include <boost/iostreams/detail/config/overload_resolution.hpp>
+#include <boost/iostreams/detail/forward.hpp>
+#include <boost/iostreams/detail/ios.hpp> // failure, streamsize.
+#include <boost/iostreams/detail/streambuf/direct_streambuf.hpp>
+#include <boost/iostreams/detail/streambuf/indirect_streambuf.hpp>
+#include <boost/iostreams/traits.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp> // MSVC.
+
+namespace boost { namespace iostreams { namespace detail {
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+struct stream_buffer_traits {
+ typedef typename
+ mpl::if_<
+ is_convertible<
+ BOOST_DEDUCED_TYPENAME category_of<T>::type,
+ direct_tag
+ >,
+ direct_streambuf<T, Tr>,
+ indirect_streambuf<T, Tr, Alloc, Mode>
+ >::type type;
+};
+
+} } } // End namespaces detail, iostreams, boost
+
+#ifdef BOOST_IOSTREAMS_BROKEN_OVERLOAD_RESOLUTION
+# include <boost/iostreams/detail/broken_overload_resolution/stream_buffer.hpp>
+#else
+
+namespace boost { namespace iostreams {
+
+template< typename T,
+ typename Tr =
+ BOOST_IOSTREAMS_CHAR_TRAITS(
+ BOOST_DEDUCED_TYPENAME char_type_of<T>::type
+ ),
+ typename Alloc =
+ std::allocator<
+ BOOST_DEDUCED_TYPENAME char_type_of<T>::type
+ >,
+ typename Mode = BOOST_DEDUCED_TYPENAME mode_of<T>::type >
+class stream_buffer
+ : public detail::stream_buffer_traits<T, Tr, Alloc, Mode>::type
+{
+private:
+ BOOST_STATIC_ASSERT((
+ is_convertible<
+ BOOST_DEDUCED_TYPENAME iostreams::category_of<T>::type, Mode
+ >::value
+ ));
+ typedef typename
+ detail::stream_buffer_traits<
+ T, Tr, Alloc, Mode
+ >::type base_type;
+ typedef T policy_type;
+public:
+ typedef typename char_type_of<T>::type char_type;
+ BOOST_IOSTREAMS_STREAMBUF_TYPEDEFS(Tr)
+public:
+ stream_buffer() { }
+ ~stream_buffer()
+ {
+ try {
+ if (this->is_open() && this->auto_close())
+ this->close();
+ } catch (std::exception&) { }
+ }
+ BOOST_IOSTREAMS_FORWARD( stream_buffer, open_impl, T,
+ BOOST_IOSTREAMS_PUSH_PARAMS,
+ BOOST_IOSTREAMS_PUSH_ARGS )
+ T& operator*() { return *this->component(); }
+ T* operator->() { return this->component(); }
+private:
+ void open_impl(const T& t BOOST_IOSTREAMS_PUSH_PARAMS())
+ { // Used for forwarding.
+ if (this->is_open())
+ BOOST_IOSTREAMS_FAILURE("already open");
+ base_type::open(t BOOST_IOSTREAMS_PUSH_ARGS());
+ }
+};
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifdef BOOST_IOSTREAMS_BROKEN_OVERLOAD_RESOLUTION
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp> // MSVC.
+
+#endif // #ifndef BOOST_IOSTREAMS_STREAM_BUFFER_HPP_INCLUDED
diff --git a/boost/boost/iostreams/tee.hpp b/boost/boost/iostreams/tee.hpp
new file mode 100644
index 00000000000..52844c31c34
--- /dev/null
+++ b/boost/boost/iostreams/tee.hpp
@@ -0,0 +1,170 @@
+// (C) Copyright Jonathan Turkanis 2005.
+// 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_TEE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_TEE_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <cassert>
+#include <boost/config.hpp> // BOOST_DEDUCE_TYPENAME.
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/detail/adapter/basic_adapter.hpp>
+#include <boost/iostreams/detail/call_traits.hpp>
+#include <boost/iostreams/detail/closer.hpp>
+#include <boost/iostreams/operations.hpp>
+#include <boost/iostreams/pipeline.hpp>
+#include <boost/iostreams/traits.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace iostreams {
+
+//
+// Template name: tee_filter.
+// Template paramters:
+// Device - A blocking Sink.
+//
+template<typename Device>
+class tee_filter : public detail::basic_adapter<Device> {
+public:
+ typedef typename detail::param_type<Device>::type param_type;
+ typedef typename char_type_of<Device>::type char_type;
+ struct category
+ : multichar_output_filter_tag,
+ closable_tag,
+ flushable_tag,
+ localizable_tag,
+ optimally_buffered_tag
+ { };
+
+ BOOST_STATIC_ASSERT((
+ is_convertible< // Using mode_of causes failures on VC6-7.0.
+ BOOST_DEDUCED_TYPENAME iostreams::category_of<Device>::type, output
+ >::value
+ ));
+
+ explicit tee_filter(param_type dev)
+ : detail::basic_adapter<Device>(dev)
+ { }
+
+ template<typename Sink>
+ std::streamsize write(Sink& snk, const char_type* s, std::streamsize n)
+ {
+ std::streamsize result = iostreams::write(snk, s, n);
+ std::streamsize result2 = iostreams::write(this->component(), s, result);
+ (void) result2; // Suppress 'unused variable' warning.
+ assert(result == result2);
+ return result;
+ }
+
+ template<typename Next>
+ void close( Next&,
+ BOOST_IOS::openmode which =
+ BOOST_IOS::in | BOOST_IOS::out )
+ { iostreams::close(this->component(), which); }
+
+ template<typename Sink>
+ bool flush(Sink& snk)
+ {
+ bool r1 = iostreams::flush(snk);
+ bool r2 = iostreams::flush(this->component());
+ return r1 && r2;
+ }
+};
+BOOST_IOSTREAMS_PIPABLE(tee_filter, 1)
+
+//
+// Template name: tee_device.
+// Template paramters:
+// Sink1 - A blocking Sink.
+// Sink2 - A blocking Sink.
+//
+template<typename Sink1, typename Sink2>
+class tee_device {
+public:
+ typedef typename detail::param_type<Sink1>::type param_type1;
+ typedef typename detail::param_type<Sink2>::type param_type2;
+ typedef typename detail::value_type<Sink1>::type value_type1;
+ typedef typename detail::value_type<Sink2>::type value_type2;
+ typedef typename char_type_of<Sink1>::type char_type;
+ BOOST_STATIC_ASSERT((
+ is_same<
+ char_type,
+ BOOST_DEDUCED_TYPENAME char_type_of<Sink2>::type
+ >::value
+ ));
+ BOOST_STATIC_ASSERT((
+ is_convertible< // Using mode_of causes failures on VC6-7.0.
+ BOOST_DEDUCED_TYPENAME iostreams::category_of<Sink1>::type, output
+ >::value
+ ));
+ BOOST_STATIC_ASSERT((
+ is_convertible< // Using mode_of causes failures on VC6-7.0.
+ BOOST_DEDUCED_TYPENAME iostreams::category_of<Sink2>::type, output
+ >::value
+ ));
+ struct category
+ : output,
+ device_tag,
+ closable_tag,
+ flushable_tag,
+ localizable_tag,
+ optimally_buffered_tag
+ { };
+ tee_device(param_type1 sink1, param_type2 sink2)
+ : sink1_(sink1), sink2_(sink2)
+ { }
+ std::streamsize write(const char_type* s, std::streamsize n)
+ {
+ std::streamsize result1 = iostreams::write(sink1_, s, n);
+ std::streamsize result2 = iostreams::write(sink2_, s, n);
+ (void) result1; // Suppress 'unused variable' warning.
+ (void) result2;
+ assert(result1 == n && result2 == n);
+ return n;
+ }
+ void close(BOOST_IOS::openmode which = BOOST_IOS::in | BOOST_IOS::out)
+ {
+ detail::external_closer<Sink2> close2(sink2_, which);
+ detail::external_closer<Sink1> close1(sink1_, which);
+ }
+ bool flush()
+ {
+ bool r1 = iostreams::flush(sink1_);
+ bool r2 = iostreams::flush(sink2_);
+ return r1 && r2;
+ }
+ template<typename Locale>
+ void imbue(const Locale& loc)
+ {
+ iostreams::imbue(sink1_, loc);
+ iostreams::imbue(sink2_, loc);
+ }
+ std::streamsize optimal_buffer_size() const
+ {
+ return (std::max) ( iostreams::optimal_buffer_size(sink1_),
+ iostreams::optimal_buffer_size(sink2_) );
+ }
+private:
+ value_type1 sink1_;
+ value_type2 sink2_;
+};
+
+template<typename Sink>
+tee_filter<Sink> tee(const Sink& snk)
+{ return tee_filter<Sink>(snk); }
+
+template<typename Sink1, typename Sink2>
+tee_device<Sink1, Sink2> tee(const Sink1& sink1, const Sink2& sink2)
+{ return tee_device<Sink1, Sink2>(sink1, sink2); }
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_TEE_HPP_INCLUDED
diff --git a/boost/boost/iostreams/traits.hpp b/boost/boost/iostreams/traits.hpp
new file mode 100644
index 00000000000..40f21759029
--- /dev/null
+++ b/boost/boost/iostreams/traits.hpp
@@ -0,0 +1,256 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+//
+// Contains metafunctions char_type_of, category_of and mode_of used for
+// deducing the i/o category and i/o mode of a model of Filter or Device.
+//
+// Also contains several utility metafunctions, functions and macros.
+//
+
+#ifndef BOOST_IOSTREAMS_IO_TRAITS_HPP_INCLUDED
+#define BOOST_IOSTREAMS_IO_TRAITS_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <iosfwd> // stream types, char_traits.
+#include <boost/config.hpp> // partial spec, deduced typename.
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/detail/bool_trait_def.hpp>
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#include <boost/iostreams/detail/is_iterator_range.hpp>
+#include <boost/iostreams/detail/select.hpp>
+#include <boost/iostreams/detail/select_by_size.hpp>
+#include <boost/iostreams/detail/wrap_unwrap.hpp>
+#include <boost/iostreams/traits_fwd.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <boost/range/value_type.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+namespace boost { namespace iostreams {
+
+//------------------Definitions of predicates for streams and stream buffers--//
+
+#ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //--------------------------------//
+
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF(is_istream, std::basic_istream, 2)
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF(is_ostream, std::basic_ostream, 2)
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF(is_iostream, std::basic_iostream, 2)
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF(is_streambuf, std::basic_streambuf, 2)
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF(is_stringstream, std::basic_stringstream, 3)
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF(is_stringbuf, std::basic_stringbuf, 3)
+
+#else // #ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //-----------------------//
+
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF(is_istream, std::istream, 0)
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF(is_ostream, std::ostream, 0)
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF(is_iostream, std::iostream, 0)
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF(is_streambuf, std::streambuf, 0)
+
+#endif // #ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //----------------------//
+
+template<typename T>
+struct is_std_io
+ : mpl::or_< is_istream<T>, is_ostream<T>, is_streambuf<T> >
+ { };
+
+namespace detail {
+
+template<typename T, typename Tr>
+class linked_streambuf;
+
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF(is_linked, linked_streambuf, 2)
+
+} // End namespace detail.
+
+//------------------Definitions of char_type_of-------------------------------//
+
+namespace detail {
+
+template<typename T>
+struct member_char_type { typedef typename T::char_type type; };
+
+} // End namespace detail.
+
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION //---------------------------//
+# ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //-------------------------------//
+
+template<typename T>
+struct char_type_of
+ : detail::member_char_type<
+ typename detail::unwrapped_type<T>::type
+ >
+ { };
+
+# else // # ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //---------------------//
+
+template<typename T>
+struct char_type_of {
+ typedef typename detail::unwrapped_type<T>::type U;
+ typedef typename
+ mpl::eval_if<
+ is_std_io<U>,
+ mpl::identity<char>,
+ detail::member_char_type<U>
+ >::type type;
+};
+
+# endif // # ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //--------------------//
+
+template<typename Iter>
+struct char_type_of< iterator_range<Iter> > {
+ typedef typename iterator_value<Iter>::type type;
+};
+
+#else // #ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION //------------------//
+
+template<typename T>
+struct char_type_of {
+ template<typename U>
+ struct get_value_type {
+ typedef typename range_value<U>::type type;
+ };
+ typedef typename
+ mpl::eval_if<
+ is_iterator_range<T>,
+ get_value_type<T>,
+ detail::member_char_type<
+ BOOST_DEDUCED_TYPENAME detail::unwrapped_type<T>::type
+ >
+ >::type type;
+};
+
+#endif // #ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION //-----------------//
+
+//------------------Definitions of category_of--------------------------------//
+
+namespace detail {
+
+template<typename T>
+struct member_category { typedef typename T::category type; };
+
+} // End namespace detail.
+
+template<typename T>
+struct category_of {
+ template<typename U>
+ struct member_category {
+ typedef typename U::category type;
+ };
+ typedef typename detail::unwrapped_type<T>::type U;
+ typedef typename
+ mpl::eval_if<
+ is_std_io<U>,
+ iostreams::select< // Disambiguation for Tru64
+ is_iostream<U>, iostream_tag,
+ is_istream<U>, istream_tag,
+ is_ostream<U>, ostream_tag,
+ is_streambuf<U>, streambuf_tag
+ >,
+ detail::member_category<U>
+ >::type type;
+};
+
+//------------------Definition of get_category--------------------------------//
+
+//
+// Returns an object of type category_of<T>::type.
+//
+template<typename T>
+inline typename category_of<T>::type get_category(const T&)
+{ typedef typename category_of<T>::type category; return category(); }
+
+//------------------Definition of int_type_of---------------------------------//
+
+template<typename T>
+struct int_type_of {
+#ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES
+ typedef std::char_traits<
+ BOOST_DEDUCED_TYPENAME char_type_of<T>::type
+ > traits_type;
+ typedef typename traits_type::int_type type;
+#else
+ typedef int type;
+#endif
+};
+
+//------------------Definition of mode----------------------------------------//
+
+namespace detail {
+
+template<int N> struct io_mode_impl;
+
+#define BOOST_IOSTREAMS_MODE_HELPER(tag_, id_) \
+ case_<id_> io_mode_impl_helper(tag_); \
+ template<> struct io_mode_impl<id_> { typedef tag_ type; }; \
+ /**/
+BOOST_IOSTREAMS_MODE_HELPER(input, 1)
+BOOST_IOSTREAMS_MODE_HELPER(output, 2)
+BOOST_IOSTREAMS_MODE_HELPER(bidirectional, 3)
+BOOST_IOSTREAMS_MODE_HELPER(input_seekable, 4)
+BOOST_IOSTREAMS_MODE_HELPER(output_seekable, 5)
+BOOST_IOSTREAMS_MODE_HELPER(seekable, 6)
+BOOST_IOSTREAMS_MODE_HELPER(dual_seekable, 7)
+BOOST_IOSTREAMS_MODE_HELPER(bidirectional_seekable, 8)
+BOOST_IOSTREAMS_MODE_HELPER(dual_use, 9)
+#undef BOOST_IOSTREAMS_MODE_HELPER
+
+template<typename T>
+struct io_mode_id {
+ typedef typename category_of<T>::type category;
+ BOOST_SELECT_BY_SIZE(int, value, detail::io_mode_impl_helper(category()));
+};
+
+} // End namespace detail.
+
+template<typename T> // Borland 5.6.4 requires this circumlocution.
+struct mode_of : detail::io_mode_impl< detail::io_mode_id<T>::value > { };
+
+//------------------Definition of is_device, is_filter and is_direct----------//
+
+namespace detail {
+
+template<typename T, typename Tag>
+struct has_trait_impl {
+ typedef typename category_of<T>::type category;
+ BOOST_STATIC_CONSTANT(bool, value = (is_convertible<category, Tag>::value));
+};
+
+template<typename T, typename Tag>
+struct has_trait
+ : mpl::bool_<has_trait_impl<T, Tag>::value>
+ { };
+
+} // End namespace detail.
+
+template<typename T>
+struct is_device : detail::has_trait<T, device_tag> { };
+
+template<typename T>
+struct is_filter : detail::has_trait<T, filter_tag> { };
+
+template<typename T>
+struct is_direct : detail::has_trait<T, direct_tag> { };
+
+//------------------Definition of BOOST_IOSTREAMS_STREAMBUF_TYPEDEFS----------//
+
+#define BOOST_IOSTREAMS_STREAMBUF_TYPEDEFS(Tr) \
+ typedef Tr traits_type; \
+ typedef typename traits_type::int_type int_type; \
+ typedef typename traits_type::off_type off_type; \
+ typedef typename traits_type::pos_type pos_type; \
+ /**/
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_IO_TRAITS_HPP_INCLUDED
diff --git a/boost/boost/iostreams/traits_fwd.hpp b/boost/boost/iostreams/traits_fwd.hpp
new file mode 100644
index 00000000000..9defc5cf13a
--- /dev/null
+++ b/boost/boost/iostreams/traits_fwd.hpp
@@ -0,0 +1,71 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+// Forward declarations of templates defined in traits.hpp.
+
+#ifndef BOOST_IOSTREAMS_IO_TRAITS_FWD_HPP_INCLUDED
+#define BOOST_IOSTREAMS_IO_TRAITS_FWD_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <iosfwd> // stream types, char_traits.
+
+namespace boost { namespace iostreams {
+
+template<typename T>
+struct is_istream;
+
+template<typename T>
+struct is_ostream;
+
+template<typename T>
+struct is_iostream;
+
+template<typename T>
+struct is_streambuf;
+
+template<typename T>
+struct is_stringstream;
+
+template<typename T>
+struct is_stringbuf;
+
+template<typename T>
+struct is_std_io;
+
+template<typename T>
+struct char_type_of;
+
+template<typename T>
+struct category_of;
+
+template<typename T>
+struct int_type_of;
+
+template<typename T>
+struct mode_of;
+
+template<typename T>
+struct is_device;
+
+template<typename T>
+struct is_filter;
+
+template<typename T>
+struct is_direct;
+
+namespace detail {
+
+template<typename T>
+struct is_linked;
+
+} // End namespace detail.
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_IO_TRAITS_FWD_HPP_INCLUDED
diff --git a/boost/boost/iostreams/write.hpp b/boost/boost/iostreams/write.hpp
new file mode 100644
index 00000000000..1d771315792
--- /dev/null
+++ b/boost/boost/iostreams/write.hpp
@@ -0,0 +1,170 @@
+// (C) Copyright Jonathan Turkanis 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/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_WRITE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_WRITE_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // DEDUCED_TYPENAME, MSVC.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/detail/char_traits.hpp>
+#include <boost/iostreams/detail/dispatch.hpp>
+#include <boost/iostreams/detail/ios.hpp> // streamsize.
+#include <boost/iostreams/detail/streambuf.hpp>
+#include <boost/iostreams/detail/wrap_unwrap.hpp>
+#include <boost/iostreams/operations_fwd.hpp>
+#include <boost/iostreams/traits.hpp>
+#include <boost/mpl/if.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp>
+
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) //-----------------------------------//
+# include <boost/iostreams/detail/vc6/write.hpp>
+#else // #if BOOST_WORKAROUND(BOOST_MSVC, < 1300) //--------------------------//
+
+namespace boost { namespace iostreams {
+
+namespace detail {
+
+template<typename T>
+struct write_device_impl;
+
+template<typename T>
+struct write_filter_impl;
+
+} // End namespace detail.
+
+template<typename T>
+bool put(T& t, typename char_type_of<T>::type c)
+{ return detail::write_device_impl<T>::put(detail::unwrap(t), c); }
+
+template<typename T>
+inline std::streamsize write
+ (T& t, const typename char_type_of<T>::type* s, std::streamsize n)
+{ return detail::write_device_impl<T>::write(detail::unwrap(t), s, n); }
+
+template<typename T, typename Sink>
+inline std::streamsize
+write( T& t, Sink& snk, const typename char_type_of<T>::type* s,
+ std::streamsize n )
+{ return detail::write_filter_impl<T>::write(detail::unwrap(t), snk, s, n); }
+
+namespace detail {
+
+//------------------Definition of write_device_impl---------------------------//
+
+template<typename T>
+struct write_device_impl
+ : mpl::if_<
+ is_custom<T>,
+ operations<T>,
+ write_device_impl<
+ BOOST_DEDUCED_TYPENAME
+ dispatch<
+ T, ostream_tag, streambuf_tag, output
+ >::type
+ >
+ >::type
+ { };
+
+template<>
+struct write_device_impl<ostream_tag> {
+ template<typename T>
+ static bool put(T& t, typename char_type_of<T>::type c)
+ {
+ typedef typename char_type_of<T>::type char_type;
+ typedef BOOST_IOSTREAMS_CHAR_TRAITS(char_type) traits_type;
+ return !traits_type::eq_int_type( t.rdbuf()->s.sputc(),
+ traits_type::eof() );
+ }
+
+ template<typename T>
+ static std::streamsize write
+ (T& t, const typename char_type_of<T>::type* s, std::streamsize n)
+ { return t.rdbuf()->sputn(s, n); }
+};
+
+template<>
+struct write_device_impl<streambuf_tag> {
+ template<typename T>
+ static bool put(T& t, typename char_type_of<T>::type c)
+ {
+ typedef typename char_type_of<T>::type char_type;
+ typedef BOOST_IOSTREAMS_CHAR_TRAITS(char_type) traits_type;
+ return !traits_type::eq_int_type(t.sputc(c), traits_type::eof());
+ }
+
+ template<typename T>
+ static std::streamsize write
+ (T& t, const typename char_type_of<T>::type* s, std::streamsize n)
+ { return t.sputn(s, n); }
+};
+
+template<>
+struct write_device_impl<output> {
+ template<typename T>
+ static bool put(T& t, typename char_type_of<T>::type c)
+ { return t.write(&c, 1) == 1; }
+
+ template<typename T>
+ static std::streamsize
+ write(T& t, const typename char_type_of<T>::type* s, std::streamsize n)
+ { return t.write(s, n); }
+};
+
+//------------------Definition of write_filter_impl---------------------------//
+
+template<typename T>
+struct write_filter_impl
+ : mpl::if_<
+ is_custom<T>,
+ operations<T>,
+ write_filter_impl<
+ BOOST_DEDUCED_TYPENAME
+ dispatch<
+ T, multichar_tag, any_tag
+ >::type
+ >
+ >::type
+ { };
+
+template<>
+struct write_filter_impl<multichar_tag> {
+ template<typename T, typename Sink>
+ static std::streamsize
+ write( T& t, Sink& snk, const typename char_type_of<T>::type* s,
+ std::streamsize n )
+ { return t.write(snk, s, n); }
+};
+
+template<>
+struct write_filter_impl<any_tag> {
+ template<typename T, typename Sink>
+ static std::streamsize
+ write( T& t, Sink& snk, const typename char_type_of<T>::type* s,
+ std::streamsize n )
+ {
+ for (std::streamsize off = 0; off < n; ++off)
+ if (!t.put(snk, s[off]))
+ return off;
+ return n;
+ }
+};
+
+} // End namespace detail.
+
+} } // End namespaces iostreams, boost.
+
+#endif // #if BOOST_WORKAROUND(BOOST_MSVC, < 1300) //-------------------------//
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_WRITE_HPP_INCLUDED
diff --git a/boost/boost/iterator.hpp b/boost/boost/iterator.hpp
new file mode 100644
index 00000000000..a43cfe138e9
--- /dev/null
+++ b/boost/boost/iterator.hpp
@@ -0,0 +1,59 @@
+// interator.hpp workarounds for non-conforming standard libraries ---------//
+
+// (C) Copyright Beman Dawes 2000. 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/utility for documentation.
+
+// Revision History
+// 12 Jan 01 added <cstddef> for std::ptrdiff_t (Jens Maurer)
+// 28 Jun 00 Workarounds to deal with known MSVC bugs (David Abrahams)
+// 26 Jun 00 Initial version (Jeremy Siek)
+
+#ifndef BOOST_ITERATOR_HPP
+#define BOOST_ITERATOR_HPP
+
+#include <iterator>
+#include <cstddef> // std::ptrdiff_t
+#include <boost/config.hpp>
+
+namespace boost
+{
+# if defined(BOOST_NO_STD_ITERATOR) && !defined(BOOST_MSVC_STD_ITERATOR)
+ template <class Category, class T,
+ class Distance = std::ptrdiff_t,
+ class Pointer = T*, class Reference = T&>
+ struct iterator
+ {
+ typedef T value_type;
+ typedef Distance difference_type;
+ typedef Pointer pointer;
+ typedef Reference reference;
+ typedef Category iterator_category;
+ };
+# else
+
+ // declare iterator_base in namespace detail to work around MSVC bugs which
+ // prevent derivation from an identically-named class in a different namespace.
+ namespace detail {
+ template <class Category, class T, class Distance, class Pointer, class Reference>
+# if !defined(BOOST_MSVC_STD_ITERATOR)
+ struct iterator_base : std::iterator<Category, T, Distance, Pointer, Reference> {};
+# else
+ struct iterator_base : std::iterator<Category, T, Distance>
+ {
+ typedef Reference reference;
+ typedef Pointer pointer;
+ typedef Distance difference_type;
+ };
+# endif
+ }
+
+ template <class Category, class T, class Distance = std::ptrdiff_t,
+ class Pointer = T*, class Reference = T&>
+ struct iterator : boost::detail::iterator_base<Category, T, Distance, Pointer, Reference> {};
+# endif
+} // namespace boost
+
+#endif // BOOST_ITERATOR_HPP
diff --git a/boost/boost/iterator/counting_iterator.hpp b/boost/boost/iterator/counting_iterator.hpp
new file mode 100644
index 00000000000..1298a31f55d
--- /dev/null
+++ b/boost/boost/iterator/counting_iterator.hpp
@@ -0,0 +1,215 @@
+// Copyright David Abrahams 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)
+#ifndef COUNTING_ITERATOR_DWA200348_HPP
+# define COUNTING_ITERATOR_DWA200348_HPP
+
+# include <boost/iterator/iterator_adaptor.hpp>
+# include <boost/detail/numeric_traits.hpp>
+# include <boost/mpl/bool.hpp>
+# include <boost/mpl/if.hpp>
+# include <boost/mpl/identity.hpp>
+# include <boost/mpl/eval_if.hpp>
+
+namespace boost {
+
+template <
+ class Incrementable
+ , class CategoryOrTraversal
+ , class Difference
+>
+class counting_iterator;
+
+namespace detail
+{
+ // Try to detect numeric types at compile time in ways compatible
+ // with the limitations of the compiler and library.
+ template <class T>
+ struct is_numeric_impl
+ {
+ // For a while, this wasn't true, but we rely on it below. This is a regression assert.
+ BOOST_STATIC_ASSERT(::boost::is_integral<char>::value);
+
+# ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+
+ BOOST_STATIC_CONSTANT(bool, value = std::numeric_limits<T>::is_specialized);
+
+# else
+
+# if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))
+ BOOST_STATIC_CONSTANT(
+ bool, value = (
+ boost::is_convertible<int,T>::value
+ && boost::is_convertible<T,int>::value
+ ));
+# else
+ BOOST_STATIC_CONSTANT(bool, value = ::boost::is_arithmetic<T>::value);
+# endif
+
+# endif
+ };
+
+ template <class T>
+ struct is_numeric
+ : mpl::bool_<(::boost::detail::is_numeric_impl<T>::value)>
+ {};
+
+# if defined(BOOST_HAS_LONG_LONG)
+ template <>
+ struct is_numeric< ::boost::long_long_type>
+ : mpl::true_ {};
+
+ template <>
+ struct is_numeric< ::boost::ulong_long_type>
+ : mpl::true_ {};
+# endif
+
+ // Some compilers fail to have a numeric_limits specialization
+ template <>
+ struct is_numeric<wchar_t>
+ : mpl::true_ {};
+
+ template <class T>
+ struct numeric_difference
+ {
+ typedef typename boost::detail::numeric_traits<T>::difference_type type;
+ };
+
+ BOOST_STATIC_ASSERT(is_numeric<int>::value);
+
+ template <class Incrementable, class CategoryOrTraversal, class Difference>
+ struct counting_iterator_base
+ {
+ typedef typename detail::ia_dflt_help<
+ CategoryOrTraversal
+ , mpl::eval_if<
+ is_numeric<Incrementable>
+ , mpl::identity<random_access_traversal_tag>
+ , iterator_traversal<Incrementable>
+ >
+ >::type traversal;
+
+ typedef typename detail::ia_dflt_help<
+ Difference
+ , mpl::eval_if<
+ is_numeric<Incrementable>
+ , numeric_difference<Incrementable>
+ , iterator_difference<Incrementable>
+ >
+ >::type difference;
+
+ typedef iterator_adaptor<
+ counting_iterator<Incrementable, CategoryOrTraversal, Difference> // self
+ , Incrementable // Base
+ , Incrementable // Value
+# ifndef BOOST_ITERATOR_REF_CONSTNESS_KILLS_WRITABILITY
+ const // MSVC won't strip this. Instead we enable Thomas'
+ // criterion (see boost/iterator/detail/facade_iterator_category.hpp)
+# endif
+ , traversal
+ , Incrementable const& // reference
+ , difference
+ > type;
+ };
+
+ // Template class distance_policy_select -- choose a policy for computing the
+ // distance between counting_iterators at compile-time based on whether or not
+ // the iterator wraps an integer or an iterator, using "poor man's partial
+ // specialization".
+
+ template <bool is_integer> struct distance_policy_select;
+
+ // A policy for wrapped iterators
+ template <class Difference, class Incrementable1, class Incrementable2>
+ struct iterator_distance
+ {
+ static Difference distance(Incrementable1 x, Incrementable2 y)
+ {
+ return y - x;
+ }
+ };
+
+ // A policy for wrapped numbers
+ template <class Difference, class Incrementable1, class Incrementable2>
+ struct number_distance
+ {
+ static Difference distance(Incrementable1 x, Incrementable2 y)
+ {
+ return numeric_distance(x, y);
+ }
+ };
+}
+
+template <
+ class Incrementable
+ , class CategoryOrTraversal = use_default
+ , class Difference = use_default
+>
+class counting_iterator
+ : public detail::counting_iterator_base<
+ Incrementable, CategoryOrTraversal, Difference
+ >::type
+{
+ typedef typename detail::counting_iterator_base<
+ Incrementable, CategoryOrTraversal, Difference
+ >::type super_t;
+
+ friend class iterator_core_access;
+
+ public:
+ typedef typename super_t::difference_type difference_type;
+
+ counting_iterator() { }
+
+ counting_iterator(counting_iterator const& rhs) : super_t(rhs.base()) {}
+
+ counting_iterator(Incrementable x)
+ : super_t(x)
+ {
+ }
+
+# if 0
+ template<class OtherIncrementable>
+ counting_iterator(
+ counting_iterator<OtherIncrementable, CategoryOrTraversal, Difference> const& t
+ , typename enable_if_convertible<OtherIncrementable, Incrementable>::type* = 0
+ )
+ : super_t(t.base())
+ {}
+# endif
+
+ private:
+
+ typename super_t::reference dereference() const
+ {
+ return this->base_reference();
+ }
+
+ template <class OtherIncrementable>
+ difference_type
+ distance_to(counting_iterator<OtherIncrementable, CategoryOrTraversal, Difference> const& y) const
+ {
+ typedef typename mpl::if_<
+ detail::is_numeric<Incrementable>
+ , detail::number_distance<difference_type, Incrementable, OtherIncrementable>
+ , detail::iterator_distance<difference_type, Incrementable, OtherIncrementable>
+ >::type d;
+
+ return d::distance(this->base(), y.base());
+ }
+};
+
+// Manufacture a counting iterator for an arbitrary incrementable type
+template <class Incrementable>
+inline counting_iterator<Incrementable>
+make_counting_iterator(Incrementable x)
+{
+ typedef counting_iterator<Incrementable> result_t;
+ return result_t(x);
+}
+
+
+} // namespace boost::iterator
+
+#endif // COUNTING_ITERATOR_DWA200348_HPP
diff --git a/boost/boost/iterator/detail/any_conversion_eater.hpp b/boost/boost/iterator/detail/any_conversion_eater.hpp
new file mode 100644
index 00000000000..25fa6448894
--- /dev/null
+++ b/boost/boost/iterator/detail/any_conversion_eater.hpp
@@ -0,0 +1,19 @@
+// Copyright David Abrahams 2003. Use, modification and distribution is
+// 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)
+#ifndef ANY_CONVERSION_EATER_DWA20031117_HPP
+# define ANY_CONVERSION_EATER_DWA20031117_HPP
+
+namespace boost { namespace detail {
+
+// This type can be used in traits to "eat" up the one user-defined
+// implicit conversion allowed.
+struct any_conversion_eater
+{
+ template <class T>
+ any_conversion_eater(T const&);
+};
+
+}} // namespace boost::detail
+
+#endif // ANY_CONVERSION_EATER_DWA20031117_HPP
diff --git a/boost/boost/iterator/detail/config_def.hpp b/boost/boost/iterator/detail/config_def.hpp
new file mode 100644
index 00000000000..3aba895b712
--- /dev/null
+++ b/boost/boost/iterator/detail/config_def.hpp
@@ -0,0 +1,135 @@
+// (C) Copyright David Abrahams 2002.
+// (C) Copyright Jeremy Siek 2002.
+// (C) Copyright Thomas Witt 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)
+
+// no include guard multiple inclusion intended
+
+//
+// This is a temporary workaround until the bulk of this is
+// available in boost config.
+// 23/02/03 thw
+//
+
+#include <boost/config.hpp> // for prior
+#include <boost/detail/workaround.hpp>
+
+#ifdef BOOST_ITERATOR_CONFIG_DEF
+# error you have nested config_def #inclusion.
+#else
+# define BOOST_ITERATOR_CONFIG_DEF
+#endif
+
+// We enable this always now. Otherwise, the simple case in
+// libs/iterator/test/constant_iterator_arrow.cpp fails to compile
+// because the operator-> return is improperly deduced as a non-const
+// pointer.
+#if 1 || defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
+ || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x531))
+
+// Recall that in general, compilers without partial specialization
+// can't strip constness. Consider counting_iterator, which normally
+// passes a const Value to iterator_facade. As a result, any code
+// which makes a std::vector of the iterator's value_type will fail
+// when its allocator declares functions overloaded on reference and
+// const_reference (the same type).
+//
+// Furthermore, Borland 5.5.1 drops constness in enough ways that we
+// end up using a proxy for operator[] when we otherwise shouldn't.
+// Using reference constness gives it an extra hint that it can
+// return the value_type from operator[] directly, but is not
+// strictly necessary. Not sure how best to resolve this one.
+
+# define BOOST_ITERATOR_REF_CONSTNESS_KILLS_WRITABILITY 1
+
+#endif
+
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \
+ || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x531)) \
+ || (BOOST_WORKAROUND(BOOST_INTEL_CXX_VERSION, <= 700) && defined(_MSC_VER)) \
+ || BOOST_WORKAROUND(__DECCXX_VER, BOOST_TESTED_AT(60590042))
+# define BOOST_NO_LVALUE_RETURN_DETECTION
+
+# if 0 // test code
+ struct v {};
+
+ typedef char (&no)[3];
+
+ template <class T>
+ no foo(T const&, ...);
+
+ template <class T>
+ char foo(T&, int);
+
+
+ struct value_iterator
+ {
+ v operator*() const;
+ };
+
+ template <class T>
+ struct lvalue_deref_helper
+ {
+ static T& x;
+ enum { value = (sizeof(foo(*x,0)) == 1) };
+ };
+
+ int z2[(lvalue_deref_helper<v*>::value == 1) ? 1 : -1];
+ int z[(lvalue_deref_helper<value_iterator>::value) == 1 ? -1 : 1 ];
+# endif
+
+#endif
+
+#if BOOST_WORKAROUND(__MWERKS__, <=0x2407)
+# define BOOST_NO_IS_CONVERTIBLE // "is_convertible doesn't work for simple types"
+#endif
+
+#if BOOST_WORKAROUND(__GNUC__, == 2) \
+ || BOOST_WORKAROUND(__GNUC__, == 3) && BOOST_WORKAROUND(__GNUC_MINOR__, < 4) && !defined(__EDG_VERSION__) \
+ || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))
+# define BOOST_NO_IS_CONVERTIBLE_TEMPLATE // The following program fails to compile:
+
+# if 0 // test code
+ #include <boost/type_traits/is_convertible.hpp>
+ template <class T>
+ struct foo
+ {
+ foo(T);
+
+ template <class U>
+ foo(foo<U> const& other) : p(other.p) { }
+
+ T p;
+ };
+
+ bool x = boost::is_convertible<foo<int const*>, foo<int*> >::value;
+# endif
+
+#endif
+
+
+#if !defined(BOOST_MSVC) && (defined(BOOST_NO_SFINAE) || defined(BOOST_NO_IS_CONVERTIBLE) || defined(BOOST_NO_IS_CONVERTIBLE_TEMPLATE))
+# define BOOST_NO_STRICT_ITERATOR_INTEROPERABILITY
+#endif
+
+# if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+# define BOOST_ARG_DEPENDENT_TYPENAME typename
+# else
+# define BOOST_ARG_DEPENDENT_TYPENAME
+# endif
+
+# if BOOST_WORKAROUND(__GNUC__, == 2) && BOOST_WORKAROUND(__GNUC_MINOR__, BOOST_TESTED_AT(95)) \
+ || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+
+// GCC-2.95 eagerly instantiates templated constructors and conversion
+// operators in convertibility checks, causing premature errors.
+//
+// Borland's problems are harder to diagnose due to lack of an
+// instantiation stack backtrace. They may be due in part to the fact
+// that it drops cv-qualification willy-nilly in templates.
+# define BOOST_NO_ONE_WAY_ITERATOR_INTEROP
+# endif
+
+// no include guard; multiple inclusion intended
diff --git a/boost/boost/iterator/detail/config_undef.hpp b/boost/boost/iterator/detail/config_undef.hpp
new file mode 100644
index 00000000000..9dcd1d525fb
--- /dev/null
+++ b/boost/boost/iterator/detail/config_undef.hpp
@@ -0,0 +1,25 @@
+// (C) Copyright Thomas Witt 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)
+
+// no include guard multiple inclusion intended
+
+//
+// This is a temporary workaround until the bulk of this is
+// available in boost config.
+// 23/02/03 thw
+//
+
+#undef BOOST_NO_IS_CONVERTIBLE
+#undef BOOST_NO_IS_CONVERTIBLE_TEMPLATE
+#undef BOOST_NO_STRICT_ITERATOR_INTEROPERABILITY
+#undef BOOST_ARG_DEPENDENT_TYPENAME
+#undef BOOST_NO_LVALUE_RETURN_DETECTION
+#undef BOOST_NO_ONE_WAY_ITERATOR_INTEROP
+
+#ifdef BOOST_ITERATOR_CONFIG_DEF
+# undef BOOST_ITERATOR_CONFIG_DEF
+#else
+# error missing or nested #include config_def
+#endif
diff --git a/boost/boost/iterator/detail/enable_if.hpp b/boost/boost/iterator/detail/enable_if.hpp
new file mode 100644
index 00000000000..0fd36fc4bc3
--- /dev/null
+++ b/boost/boost/iterator/detail/enable_if.hpp
@@ -0,0 +1,86 @@
+// (C) Copyright David Abrahams 2002.
+// (C) Copyright Jeremy Siek 2002.
+// (C) Copyright Thomas Witt 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)
+#ifndef BOOST_ENABLE_IF_23022003THW_HPP
+#define BOOST_ENABLE_IF_23022003THW_HPP
+
+#include <boost/detail/workaround.hpp>
+#include <boost/mpl/identity.hpp>
+
+#include <boost/iterator/detail/config_def.hpp>
+
+//
+// Boost iterators uses its own enable_if cause we need
+// special semantics for deficient compilers.
+// 23/02/03 thw
+//
+
+namespace boost
+{
+
+ namespace iterators
+ {
+ //
+ // Base machinery for all kinds of enable if
+ //
+ template<bool>
+ struct enabled
+ {
+ template<typename T>
+ struct base
+ {
+ typedef T type;
+ };
+ };
+
+ //
+ // For compilers that don't support "Substitution Failure Is Not An Error"
+ // enable_if falls back to always enabled. See comments
+ // on operator implementation for consequences.
+ //
+ template<>
+ struct enabled<false>
+ {
+ template<typename T>
+ struct base
+ {
+#ifdef BOOST_NO_SFINAE
+
+ typedef T type;
+
+ // This way to do it would give a nice error message containing
+ // invalid overload, but has the big disadvantage that
+ // there is no reference to user code in the error message.
+ //
+ // struct invalid_overload;
+ // typedef invalid_overload type;
+ //
+#endif
+ };
+ };
+
+
+ template <class Cond,
+ class Return>
+ struct enable_if
+# if !defined(BOOST_NO_SFINAE) && !defined(BOOST_NO_IS_CONVERTIBLE)
+ : enabled<(Cond::value)>::template base<Return>
+# else
+ : mpl::identity<Return>
+# endif
+ {
+# if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ typedef Return type;
+# endif
+ };
+
+ } // namespace iterators
+
+} // namespace boost
+
+#include <boost/iterator/detail/config_undef.hpp>
+
+#endif // BOOST_ENABLE_IF_23022003THW_HPP
diff --git a/boost/boost/iterator/detail/facade_iterator_category.hpp b/boost/boost/iterator/detail/facade_iterator_category.hpp
new file mode 100644
index 00000000000..67287007b5b
--- /dev/null
+++ b/boost/boost/iterator/detail/facade_iterator_category.hpp
@@ -0,0 +1,209 @@
+// Copyright David Abrahams 2003. Use, modification and distribution is
+// 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)
+#ifndef FACADE_ITERATOR_CATEGORY_DWA20031118_HPP
+# define FACADE_ITERATOR_CATEGORY_DWA20031118_HPP
+
+# include <boost/iterator/iterator_categories.hpp>
+
+# include <boost/static_assert.hpp>
+
+# include <boost/mpl/or.hpp> // used in iterator_tag inheritance logic
+# include <boost/mpl/and.hpp>
+# include <boost/mpl/if.hpp>
+# include <boost/mpl/eval_if.hpp>
+# include <boost/mpl/identity.hpp>
+
+# include <boost/type_traits/is_same.hpp>
+# include <boost/type_traits/is_const.hpp>
+# include <boost/type_traits/is_reference.hpp>
+# include <boost/type_traits/is_convertible.hpp>
+
+# include <boost/type_traits/is_same.hpp>
+
+# include <boost/iterator/detail/config_def.hpp> // try to keep this last
+
+# ifdef BOOST_ITERATOR_REF_CONSTNESS_KILLS_WRITABILITY
+# include <boost/detail/indirect_traits.hpp>
+# endif
+
+//
+// iterator_category deduction for iterator_facade
+//
+
+// forward declaration
+namespace boost { struct use_default; }
+
+namespace boost { namespace detail {
+
+struct input_output_iterator_tag
+ : std::input_iterator_tag
+{
+ // Using inheritance for only input_iterator_tag helps to avoid
+ // ambiguities when a stdlib implementation dispatches on a
+ // function which is overloaded on both input_iterator_tag and
+ // output_iterator_tag, as STLPort does, in its __valid_range
+ // function. I claim it's better to avoid the ambiguity in these
+ // cases.
+ operator std::output_iterator_tag() const
+ {
+ return std::output_iterator_tag();
+ }
+};
+
+//
+// True iff the user has explicitly disabled writability of this
+// iterator. Pass the iterator_facade's Value parameter and its
+// nested ::reference type.
+//
+template <class ValueParam, class Reference>
+struct iterator_writability_disabled
+# ifdef BOOST_ITERATOR_REF_CONSTNESS_KILLS_WRITABILITY // Adding Thomas' logic?
+ : mpl::or_<
+ is_const<Reference>
+ , boost::detail::indirect_traits::is_reference_to_const<Reference>
+ , is_const<ValueParam>
+ >
+# else
+ : is_const<ValueParam>
+# endif
+{};
+
+
+//
+// Convert an iterator_facade's traversal category, Value parameter,
+// and ::reference type to an appropriate old-style category.
+//
+// If writability has been disabled per the above metafunction, the
+// result will not be convertible to output_iterator_tag.
+//
+// Otherwise, if Traversal == single_pass_traversal_tag, the following
+// conditions will result in a tag that is convertible both to
+// input_iterator_tag and output_iterator_tag:
+//
+// 1. Reference is a reference to non-const
+// 2. Reference is not a reference and is convertible to Value
+//
+template <class Traversal, class ValueParam, class Reference>
+struct iterator_facade_default_category
+ : mpl::eval_if<
+ mpl::and_<
+ is_reference<Reference>
+ , is_convertible<Traversal,forward_traversal_tag>
+ >
+ , mpl::eval_if<
+ is_convertible<Traversal,random_access_traversal_tag>
+ , mpl::identity<std::random_access_iterator_tag>
+ , mpl::if_<
+ is_convertible<Traversal,bidirectional_traversal_tag>
+ , std::bidirectional_iterator_tag
+ , std::forward_iterator_tag
+ >
+ >
+ , typename mpl::eval_if<
+ mpl::and_<
+ is_convertible<Traversal, single_pass_traversal_tag>
+
+ // check for readability
+ , is_convertible<Reference, ValueParam>
+ >
+ , mpl::identity<std::input_iterator_tag>
+ , mpl::identity<Traversal>
+ >
+ >
+{
+};
+
+// True iff T is convertible to an old-style iterator category.
+template <class T>
+struct is_iterator_category
+ : mpl::or_<
+ is_convertible<T,std::input_iterator_tag>
+ , is_convertible<T,std::output_iterator_tag>
+ >
+{
+};
+
+template <class T>
+struct is_iterator_traversal
+ : is_convertible<T,incrementable_traversal_tag>
+{};
+
+//
+// A composite iterator_category tag convertible to Category (a pure
+// old-style category) and Traversal (a pure traversal tag).
+// Traversal must be a strict increase of the traversal power given by
+// Category.
+//
+template <class Category, class Traversal>
+struct iterator_category_with_traversal
+ : Category, Traversal
+{
+# if 0
+ // Because of limitations on multiple user-defined conversions,
+ // this should be a good test of whether convertibility is enough
+ // in the spec, or whether we need to specify inheritance.
+ operator Category() const { return Category(); }
+ operator Traversal() const { return Traversal(); }
+# endif
+
+# if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+ // Make sure this isn't used to build any categories where
+ // convertibility to Traversal is redundant. Should just use the
+ // Category element in that case.
+ BOOST_STATIC_ASSERT(
+ !(is_convertible<
+ typename iterator_category_to_traversal<Category>::type
+ , Traversal
+ >::value));
+
+ BOOST_STATIC_ASSERT(is_iterator_category<Category>::value);
+ BOOST_STATIC_ASSERT(!is_iterator_category<Traversal>::value);
+ BOOST_STATIC_ASSERT(!is_iterator_traversal<Category>::value);
+# if !BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1310))
+ BOOST_STATIC_ASSERT(is_iterator_traversal<Traversal>::value);
+# endif
+# endif
+};
+
+// Computes an iterator_category tag whose traversal is Traversal and
+// which is appropriate for an iterator
+template <class Traversal, class ValueParam, class Reference>
+struct facade_iterator_category_impl
+{
+# if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+ BOOST_STATIC_ASSERT(!is_iterator_category<Traversal>::value);
+# endif
+
+ typedef typename iterator_facade_default_category<
+ Traversal,ValueParam,Reference
+ >::type category;
+
+ typedef typename mpl::if_<
+ is_same<
+ Traversal
+ , typename iterator_category_to_traversal<category>::type
+ >
+ , category
+ , iterator_category_with_traversal<category,Traversal>
+ >::type type;
+};
+
+//
+// Compute an iterator_category for iterator_facade
+//
+template <class CategoryOrTraversal, class ValueParam, class Reference>
+struct facade_iterator_category
+ : mpl::eval_if<
+ is_iterator_category<CategoryOrTraversal>
+ , mpl::identity<CategoryOrTraversal> // old-style categories are fine as-is
+ , facade_iterator_category_impl<CategoryOrTraversal,ValueParam,Reference>
+ >
+{
+};
+
+}} // namespace boost::detail
+
+# include <boost/iterator/detail/config_undef.hpp>
+
+#endif // FACADE_ITERATOR_CATEGORY_DWA20031118_HPP
diff --git a/boost/boost/iterator/detail/minimum_category.hpp b/boost/boost/iterator/detail/minimum_category.hpp
new file mode 100644
index 00000000000..96501ddd462
--- /dev/null
+++ b/boost/boost/iterator/detail/minimum_category.hpp
@@ -0,0 +1,116 @@
+// Copyright David Abrahams 2003. Use, modification and distribution is
+// 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)
+#ifndef MINIMUM_CATEGORY_DWA20031119_HPP
+# define MINIMUM_CATEGORY_DWA20031119_HPP
+
+# include <boost/type_traits/is_convertible.hpp>
+# include <boost/type_traits/is_same.hpp>
+
+# include <boost/mpl/aux_/lambda_support.hpp>
+
+namespace boost { namespace detail {
+//
+// Returns the minimum category type or error_type
+// if T1 and T2 are unrelated.
+//
+// For compilers not supporting is_convertible this only
+// works with the new boost return and traversal category
+// types. The exact boost _types_ are required. No derived types
+// will work.
+//
+//
+template <bool GreaterEqual, bool LessEqual>
+struct minimum_category_impl
+# if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+{
+ template <class T1, class T2> struct apply
+ {
+ typedef T2 type;
+ };
+ typedef void type;
+}
+# endif
+;
+
+template <class T1, class T2>
+struct error_not_related_by_convertibility;
+
+template <>
+struct minimum_category_impl<true,false>
+{
+ template <class T1, class T2> struct apply
+ {
+ typedef T2 type;
+ };
+};
+
+template <>
+struct minimum_category_impl<false,true>
+{
+ template <class T1, class T2> struct apply
+ {
+ typedef T1 type;
+ };
+};
+
+template <>
+struct minimum_category_impl<true,true>
+{
+ template <class T1, class T2> struct apply
+ {
+ BOOST_STATIC_ASSERT((is_same<T1,T2>::value));
+ typedef T1 type;
+ };
+};
+
+template <>
+struct minimum_category_impl<false,false>
+{
+ template <class T1, class T2> struct apply
+ : error_not_related_by_convertibility<T1,T2>
+ {
+ };
+};
+
+template <class T1 = mpl::_1, class T2 = mpl::_2>
+struct minimum_category
+{
+ typedef minimum_category_impl<
+# if BOOST_WORKAROUND(BOOST_MSVC, < 1300) // ETI workaround
+ is_same<T2,int>::value ||
+# endif
+ ::boost::is_convertible<T1,T2>::value
+ , ::boost::is_convertible<T2,T1>::value
+# if BOOST_WORKAROUND(BOOST_MSVC, < 1300) // ETI workaround
+ || is_same<T1,int>::value
+# endif
+ > outer;
+
+ typedef typename outer::template apply<T1,T2> inner;
+ typedef typename inner::type type;
+
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2,minimum_category,(T1,T2))
+};
+
+template <>
+struct minimum_category<mpl::_1,mpl::_2>
+{
+ template <class T1, class T2>
+ struct apply : minimum_category<T1,T2>
+ {};
+
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2,minimum_category,(mpl::_1,mpl::_2))
+};
+
+# if BOOST_WORKAROUND(BOOST_MSVC, < 1300) // ETI workaround
+template <>
+struct minimum_category<int,int>
+{
+ typedef int type;
+};
+# endif
+
+}} // namespace boost::detail
+
+#endif // MINIMUM_CATEGORY_DWA20031119_HPP
diff --git a/boost/boost/iterator/filter_iterator.hpp b/boost/boost/iterator/filter_iterator.hpp
new file mode 100644
index 00000000000..14d640bf093
--- /dev/null
+++ b/boost/boost/iterator/filter_iterator.hpp
@@ -0,0 +1,135 @@
+// (C) Copyright David Abrahams 2002.
+// (C) Copyright Jeremy Siek 2002.
+// (C) Copyright Thomas Witt 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)
+#ifndef BOOST_FILTER_ITERATOR_23022003THW_HPP
+#define BOOST_FILTER_ITERATOR_23022003THW_HPP
+
+#include <boost/iterator.hpp>
+#include <boost/iterator/iterator_adaptor.hpp>
+#include <boost/iterator/iterator_categories.hpp>
+
+#include <boost/type_traits/is_class.hpp>
+#include <boost/static_assert.hpp>
+
+namespace boost
+{
+ template <class Predicate, class Iterator>
+ class filter_iterator;
+
+ namespace detail
+ {
+ template <class Predicate, class Iterator>
+ struct filter_iterator_base
+ {
+ typedef iterator_adaptor<
+ filter_iterator<Predicate, Iterator>
+ , Iterator
+ , use_default
+ , typename mpl::if_<
+ is_convertible<
+ typename iterator_traversal<Iterator>::type
+ , random_access_traversal_tag
+ >
+ , bidirectional_traversal_tag
+ , use_default
+ >::type
+ > type;
+ };
+ }
+
+ template <class Predicate, class Iterator>
+ class filter_iterator
+ : public detail::filter_iterator_base<Predicate, Iterator>::type
+ {
+ typedef typename detail::filter_iterator_base<
+ Predicate, Iterator
+ >::type super_t;
+
+ friend class iterator_core_access;
+
+ public:
+ filter_iterator() { }
+
+ filter_iterator(Predicate f, Iterator x, Iterator end_ = Iterator())
+ : super_t(x), m_predicate(f), m_end(end_)
+ {
+ satisfy_predicate();
+ }
+
+ filter_iterator(Iterator x, Iterator end_ = Iterator())
+ : super_t(x), m_predicate(), m_end(end_)
+ {
+ // Pro8 is a little too aggressive about instantiating the
+ // body of this function.
+#if !BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003))
+ // Don't allow use of this constructor if Predicate is a
+ // function pointer type, since it will be 0.
+ BOOST_STATIC_ASSERT(is_class<Predicate>::value);
+#endif
+ satisfy_predicate();
+ }
+
+ template<class OtherIterator>
+ filter_iterator(
+ filter_iterator<Predicate, OtherIterator> const& t
+ , typename enable_if_convertible<OtherIterator, Iterator>::type* = 0
+ )
+ : super_t(t.base()), m_predicate(t.predicate()), m_end(t.end()) {}
+
+ Predicate predicate() const { return m_predicate; }
+
+ Iterator end() const { return m_end; }
+
+ private:
+ void increment()
+ {
+ ++(this->base_reference());
+ satisfy_predicate();
+ }
+
+ void decrement()
+ {
+ while(!this->m_predicate(*--(this->base_reference()))){};
+ }
+
+ void satisfy_predicate()
+ {
+ while (this->base() != this->m_end && !this->m_predicate(*this->base()))
+ ++(this->base_reference());
+ }
+
+ // Probably should be the initial base class so it can be
+ // optimized away via EBO if it is an empty class.
+ Predicate m_predicate;
+ Iterator m_end;
+ };
+
+ template <class Predicate, class Iterator>
+ filter_iterator<Predicate,Iterator>
+ make_filter_iterator(Predicate f, Iterator x, Iterator end = Iterator())
+ {
+ return filter_iterator<Predicate,Iterator>(f,x,end);
+ }
+
+ template <class Predicate, class Iterator>
+ filter_iterator<Predicate,Iterator>
+ make_filter_iterator(
+ typename iterators::enable_if<
+ is_class<Predicate>
+ , Iterator
+ >::type x
+ , Iterator end = Iterator()
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ , Predicate* = 0
+#endif
+ )
+ {
+ return filter_iterator<Predicate,Iterator>(x,end);
+ }
+
+} // namespace boost
+
+#endif // BOOST_FILTER_ITERATOR_23022003THW_HPP
diff --git a/boost/boost/iterator/indirect_iterator.hpp b/boost/boost/iterator/indirect_iterator.hpp
new file mode 100644
index 00000000000..f1811071215
--- /dev/null
+++ b/boost/boost/iterator/indirect_iterator.hpp
@@ -0,0 +1,139 @@
+// (C) Copyright David Abrahams 2002.
+// (C) Copyright Jeremy Siek 2002.
+// (C) Copyright Thomas Witt 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)
+#ifndef BOOST_INDIRECT_ITERATOR_23022003THW_HPP
+#define BOOST_INDIRECT_ITERATOR_23022003THW_HPP
+
+#include <boost/iterator.hpp>
+#include <boost/iterator/iterator_adaptor.hpp>
+
+#include <boost/pointee.hpp>
+#include <boost/indirect_reference.hpp>
+#include <boost/detail/iterator.hpp>
+
+#include <boost/detail/indirect_traits.hpp>
+
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/add_reference.hpp>
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/has_xxx.hpp>
+
+#ifdef BOOST_MPL_CFG_NO_HAS_XXX
+# include <boost/shared_ptr.hpp>
+# include <boost/scoped_ptr.hpp>
+# include <boost/mpl/bool.hpp>
+# include <memory>
+#endif
+
+#include <boost/iterator/detail/config_def.hpp> // must be last #include
+
+namespace boost
+{
+ template <class Iter, class Value, class Category, class Reference, class Difference>
+ class indirect_iterator;
+
+ namespace detail
+ {
+ template <class Iter, class Value, class Category, class Reference, class Difference>
+ struct indirect_base
+ {
+ typedef typename iterator_traits<Iter>::value_type dereferenceable;
+
+ typedef iterator_adaptor<
+ indirect_iterator<Iter, Value, Category, Reference, Difference>
+ , Iter
+ , typename ia_dflt_help<
+ Value, pointee<dereferenceable>
+ >::type
+ , Category
+ , typename ia_dflt_help<
+ Reference
+ , mpl::eval_if<
+ is_same<Value,use_default>
+ , indirect_reference<dereferenceable>
+ , add_reference<Value>
+ >
+ >::type
+ , Difference
+ > type;
+ };
+
+ template <>
+ struct indirect_base<int, int, int, int, int> {};
+ } // namespace detail
+
+
+ template <
+ class Iterator
+ , class Value = use_default
+ , class Category = use_default
+ , class Reference = use_default
+ , class Difference = use_default
+ >
+ class indirect_iterator
+ : public detail::indirect_base<
+ Iterator, Value, Category, Reference, Difference
+ >::type
+ {
+ typedef typename detail::indirect_base<
+ Iterator, Value, Category, Reference, Difference
+ >::type super_t;
+
+ friend class iterator_core_access;
+
+ public:
+ indirect_iterator() {}
+
+ indirect_iterator(Iterator iter)
+ : super_t(iter) {}
+
+ template <
+ class Iterator2, class Value2, class Category2
+ , class Reference2, class Difference2
+ >
+ indirect_iterator(
+ indirect_iterator<
+ Iterator2, Value2, Category2, Reference2, Difference2
+ > const& y
+ , typename enable_if_convertible<Iterator2, Iterator>::type* = 0
+ )
+ : super_t(y.base())
+ {}
+
+ private:
+ typename super_t::reference dereference() const
+ {
+# if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))
+ return const_cast<super_t::reference>(**this->base());
+# else
+ return **this->base();
+# endif
+ }
+ };
+
+ template <class Iter>
+ inline
+ indirect_iterator<Iter> make_indirect_iterator(Iter x)
+ {
+ return indirect_iterator<Iter>(x);
+ }
+
+ template <class Traits, class Iter>
+ inline
+ indirect_iterator<Iter,Traits> make_indirect_iterator(Iter x, Traits* = 0)
+ {
+ return indirect_iterator<Iter, Traits>(x);
+ }
+
+} // namespace boost
+
+#include <boost/iterator/detail/config_undef.hpp>
+
+#endif // BOOST_INDIRECT_ITERATOR_23022003THW_HPP
diff --git a/boost/boost/iterator/interoperable.hpp b/boost/boost/iterator/interoperable.hpp
new file mode 100644
index 00000000000..c13dd9b47b9
--- /dev/null
+++ b/boost/boost/iterator/interoperable.hpp
@@ -0,0 +1,50 @@
+// (C) Copyright David Abrahams 2002.
+// (C) Copyright Jeremy Siek 2002.
+// (C) Copyright Thomas Witt 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)
+#ifndef BOOST_INTEROPERABLE_23022003THW_HPP
+# define BOOST_INTEROPERABLE_23022003THW_HPP
+
+# include <boost/mpl/bool.hpp>
+# include <boost/mpl/or.hpp>
+
+# include <boost/type_traits/is_convertible.hpp>
+
+# include <boost/iterator/detail/config_def.hpp> // must appear last
+
+namespace boost
+{
+
+ //
+ // Meta function that determines whether two
+ // iterator types are considered interoperable.
+ //
+ // Two iterator types A,B are considered interoperable if either
+ // A is convertible to B or vice versa.
+ // This interoperability definition is in sync with the
+ // standards requirements on constant/mutable container
+ // iterators (23.1 [lib.container.requirements]).
+ //
+ // For compilers that don't support is_convertible
+ // is_interoperable gives false positives. See comments
+ // on operator implementation for consequences.
+ //
+ template <typename A, typename B>
+ struct is_interoperable
+# ifdef BOOST_NO_STRICT_ITERATOR_INTEROPERABILITY
+ : mpl::true_
+# else
+ : mpl::or_<
+ is_convertible< A, B >
+ , is_convertible< B, A > >
+# endif
+ {
+ };
+
+} // namespace boost
+
+# include <boost/iterator/detail/config_undef.hpp>
+
+#endif // BOOST_INTEROPERABLE_23022003THW_HPP
diff --git a/boost/boost/iterator/is_lvalue_iterator.hpp b/boost/boost/iterator/is_lvalue_iterator.hpp
new file mode 100644
index 00000000000..3beb90df6d6
--- /dev/null
+++ b/boost/boost/iterator/is_lvalue_iterator.hpp
@@ -0,0 +1,150 @@
+// Copyright David Abrahams 2003. Use, modification and distribution is
+// 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)
+#ifndef IS_LVALUE_ITERATOR_DWA2003112_HPP
+# define IS_LVALUE_ITERATOR_DWA2003112_HPP
+
+#include <boost/iterator.hpp>
+
+#include <boost/detail/workaround.hpp>
+#include <boost/detail/iterator.hpp>
+
+#include <boost/iterator/detail/any_conversion_eater.hpp>
+
+// should be the last #includes
+#include <boost/type_traits/detail/bool_trait_def.hpp>
+#include <boost/iterator/detail/config_def.hpp>
+
+#ifndef BOOST_NO_IS_CONVERTIBLE
+
+namespace boost {
+
+namespace detail
+{
+#ifndef BOOST_NO_LVALUE_RETURN_DETECTION
+ // Calling lvalue_preserver( <expression>, 0 ) returns a reference
+ // to the expression's result if <expression> is an lvalue, or
+ // not_an_lvalue() otherwise.
+ struct not_an_lvalue {};
+
+ template <class T>
+ T& lvalue_preserver(T&, int);
+
+ template <class U>
+ not_an_lvalue lvalue_preserver(U const&, ...);
+
+# define BOOST_LVALUE_PRESERVER(expr) detail::lvalue_preserver(expr,0)
+
+#else
+
+# define BOOST_LVALUE_PRESERVER(expr) expr
+
+#endif
+
+ // Guts of is_lvalue_iterator. Value is the iterator's value_type
+ // and the result is computed in the nested rebind template.
+ template <class Value>
+ struct is_lvalue_iterator_impl
+ {
+ // Eat implicit conversions so we don't report true for things
+ // convertible to Value const&
+ struct conversion_eater
+ {
+ conversion_eater(Value&);
+ };
+
+ static char tester(conversion_eater, int);
+ static char (& tester(any_conversion_eater, ...) )[2];
+
+ template <class It>
+ struct rebind
+ {
+ static It& x;
+
+ BOOST_STATIC_CONSTANT(
+ bool
+ , value = (
+ sizeof(
+ is_lvalue_iterator_impl<Value>::tester(
+ BOOST_LVALUE_PRESERVER(*x), 0
+ )
+ ) == 1
+ )
+ );
+ };
+ };
+
+#undef BOOST_LVALUE_PRESERVER
+
+ //
+ // void specializations to handle std input and output iterators
+ //
+ template <>
+ struct is_lvalue_iterator_impl<void>
+ {
+ template <class It>
+ struct rebind : boost::mpl::false_
+ {};
+ };
+
+#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
+ template <>
+ struct is_lvalue_iterator_impl<const void>
+ {
+ template <class It>
+ struct rebind : boost::mpl::false_
+ {};
+ };
+
+ template <>
+ struct is_lvalue_iterator_impl<volatile void>
+ {
+ template <class It>
+ struct rebind : boost::mpl::false_
+ {};
+ };
+
+ template <>
+ struct is_lvalue_iterator_impl<const volatile void>
+ {
+ template <class It>
+ struct rebind : boost::mpl::false_
+ {};
+ };
+#endif
+
+ //
+ // This level of dispatching is required for Borland. We might save
+ // an instantiation by removing it for others.
+ //
+ template <class It>
+ struct is_readable_lvalue_iterator_impl
+ : is_lvalue_iterator_impl<
+ BOOST_DEDUCED_TYPENAME boost::detail::iterator_traits<It>::value_type const
+ >::template rebind<It>
+ {};
+
+ template <class It>
+ struct is_non_const_lvalue_iterator_impl
+ : is_lvalue_iterator_impl<
+ BOOST_DEDUCED_TYPENAME boost::detail::iterator_traits<It>::value_type
+ >::template rebind<It>
+ {};
+} // namespace detail
+
+// Define the trait with full mpl lambda capability and various broken
+// compiler workarounds
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(
+ is_lvalue_iterator,T,::boost::detail::is_readable_lvalue_iterator_impl<T>::value)
+
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(
+ is_non_const_lvalue_iterator,T,::boost::detail::is_non_const_lvalue_iterator_impl<T>::value)
+
+} // namespace boost
+
+#endif
+
+#include <boost/iterator/detail/config_undef.hpp>
+#include <boost/type_traits/detail/bool_trait_undef.hpp>
+
+#endif // IS_LVALUE_ITERATOR_DWA2003112_HPP
diff --git a/boost/boost/iterator/is_readable_iterator.hpp b/boost/boost/iterator/is_readable_iterator.hpp
new file mode 100644
index 00000000000..60d6ff07f52
--- /dev/null
+++ b/boost/boost/iterator/is_readable_iterator.hpp
@@ -0,0 +1,108 @@
+// Copyright David Abrahams 2003. Use, modification and distribution is
+// 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)
+#ifndef IS_READABLE_ITERATOR_DWA2003112_HPP
+# define IS_READABLE_ITERATOR_DWA2003112_HPP
+
+#include <boost/mpl/bool.hpp>
+#include <boost/detail/iterator.hpp>
+
+#include <boost/type_traits/detail/bool_trait_def.hpp>
+#include <boost/iterator/detail/any_conversion_eater.hpp>
+
+// should be the last #include
+#include <boost/iterator/detail/config_def.hpp>
+
+#ifndef BOOST_NO_IS_CONVERTIBLE
+
+namespace boost {
+
+namespace detail
+{
+ // Guts of is_readable_iterator. Value is the iterator's value_type
+ // and the result is computed in the nested rebind template.
+ template <class Value>
+ struct is_readable_iterator_impl
+ {
+ static char tester(Value&, int);
+ static char (& tester(any_conversion_eater, ...) )[2];
+
+ template <class It>
+ struct rebind
+ {
+ static It& x;
+
+ BOOST_STATIC_CONSTANT(
+ bool
+ , value = (
+ sizeof(
+ is_readable_iterator_impl<Value>::tester(*x, 1)
+ ) == 1
+ )
+ );
+ };
+ };
+
+#undef BOOST_READABLE_PRESERVER
+
+ //
+ // void specializations to handle std input and output iterators
+ //
+ template <>
+ struct is_readable_iterator_impl<void>
+ {
+ template <class It>
+ struct rebind : boost::mpl::false_
+ {};
+ };
+
+#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
+ template <>
+ struct is_readable_iterator_impl<const void>
+ {
+ template <class It>
+ struct rebind : boost::mpl::false_
+ {};
+ };
+
+ template <>
+ struct is_readable_iterator_impl<volatile void>
+ {
+ template <class It>
+ struct rebind : boost::mpl::false_
+ {};
+ };
+
+ template <>
+ struct is_readable_iterator_impl<const volatile void>
+ {
+ template <class It>
+ struct rebind : boost::mpl::false_
+ {};
+ };
+#endif
+
+ //
+ // This level of dispatching is required for Borland. We might save
+ // an instantiation by removing it for others.
+ //
+ template <class It>
+ struct is_readable_iterator_impl2
+ : is_readable_iterator_impl<
+ BOOST_DEDUCED_TYPENAME boost::detail::iterator_traits<It>::value_type const
+ >::template rebind<It>
+ {};
+} // namespace detail
+
+// Define the trait with full mpl lambda capability and various broken
+// compiler workarounds
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(
+ is_readable_iterator,T,::boost::detail::is_readable_iterator_impl2<T>::value)
+
+} // namespace boost
+
+#endif
+
+#include <boost/iterator/detail/config_undef.hpp>
+
+#endif // IS_READABLE_ITERATOR_DWA2003112_HPP
diff --git a/boost/boost/iterator/iterator_adaptor.hpp b/boost/boost/iterator/iterator_adaptor.hpp
new file mode 100644
index 00000000000..457c4396591
--- /dev/null
+++ b/boost/boost/iterator/iterator_adaptor.hpp
@@ -0,0 +1,366 @@
+// (C) Copyright David Abrahams 2002.
+// (C) Copyright Jeremy Siek 2002.
+// (C) Copyright Thomas Witt 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)
+#ifndef BOOST_ITERATOR_ADAPTOR_23022003THW_HPP
+#define BOOST_ITERATOR_ADAPTOR_23022003THW_HPP
+
+#include <boost/static_assert.hpp>
+#include <boost/iterator.hpp>
+#include <boost/detail/iterator.hpp>
+
+#include <boost/iterator/iterator_categories.hpp>
+#include <boost/iterator/iterator_facade.hpp>
+#include <boost/iterator/detail/enable_if.hpp>
+
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/or.hpp>
+
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+#ifdef BOOST_ITERATOR_REF_CONSTNESS_KILLS_WRITABILITY
+# include <boost/type_traits/remove_reference.hpp>
+#else
+# include <boost/type_traits/add_reference.hpp>
+#endif
+
+#include <boost/iterator/detail/config_def.hpp>
+
+#include <boost/iterator/iterator_traits.hpp>
+
+namespace boost
+{
+ // Used as a default template argument internally, merely to
+ // indicate "use the default", this can also be passed by users
+ // explicitly in order to specify that the default should be used.
+ struct use_default;
+
+# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ // the incompleteness of use_default causes massive problems for
+ // is_convertible (naturally). This workaround is fortunately not
+ // needed for vc6/vc7.
+ template<class To>
+ struct is_convertible<use_default,To>
+ : mpl::false_ {};
+# endif
+
+ namespace detail
+ {
+
+ //
+ // Result type used in enable_if_convertible meta function.
+ // This can be an incomplete type, as only pointers to
+ // enable_if_convertible< ... >::type are used.
+ // We could have used void for this, but conversion to
+ // void* is just to easy.
+ //
+ struct enable_type;
+ }
+
+
+ //
+ // enable_if for use in adapted iterators constructors.
+ //
+ // In order to provide interoperability between adapted constant and
+ // mutable iterators, adapted iterators will usually provide templated
+ // conversion constructors of the following form
+ //
+ // template <class BaseIterator>
+ // class adapted_iterator :
+ // public iterator_adaptor< adapted_iterator<Iterator>, Iterator >
+ // {
+ // public:
+ //
+ // ...
+ //
+ // template <class OtherIterator>
+ // adapted_iterator(
+ // OtherIterator const& it
+ // , typename enable_if_convertible<OtherIterator, Iterator>::type* = 0);
+ //
+ // ...
+ // };
+ //
+ // enable_if_convertible is used to remove those overloads from the overload
+ // set that cannot be instantiated. For all practical purposes only overloads
+ // for constant/mutable interaction will remain. This has the advantage that
+ // meta functions like boost::is_convertible do not return false positives,
+ // as they can only look at the signature of the conversion constructor
+ // and not at the actual instantiation.
+ //
+ // enable_if_interoperable can be safely used in user code. It falls back to
+ // always enabled for compilers that don't support enable_if or is_convertible.
+ // There is no need for compiler specific workarounds in user code.
+ //
+ // The operators implementation relies on boost::is_convertible not returning
+ // false positives for user/library defined iterator types. See comments
+ // on operator implementation for consequences.
+ //
+# if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+
+ template<typename From, typename To>
+ struct enable_if_convertible
+ {
+ typedef typename mpl::if_<
+ mpl::or_<
+ is_same<From,To>
+ , is_convertible<From, To>
+ >
+ , detail::enable_type
+ , int&
+ >::type type;
+ };
+
+# elif defined(BOOST_NO_IS_CONVERTIBLE) || defined(BOOST_NO_SFINAE)
+
+ template <class From, class To>
+ struct enable_if_convertible
+ {
+ typedef detail::enable_type type;
+ };
+
+# elif BOOST_WORKAROUND(_MSC_FULL_VER, BOOST_TESTED_AT(13102292)) && BOOST_MSVC > 1300
+
+ // For some reason vc7.1 needs us to "cut off" instantiation
+ // of is_convertible in a few cases.
+ template<typename From, typename To>
+ struct enable_if_convertible
+ : iterators::enable_if<
+ mpl::or_<
+ is_same<From,To>
+ , is_convertible<From, To>
+ >
+ , detail::enable_type
+ >
+ {};
+
+# else
+
+ template<typename From, typename To>
+ struct enable_if_convertible
+ : iterators::enable_if<
+ is_convertible<From, To>
+ , detail::enable_type
+ >
+ {};
+
+# endif
+
+ //
+ // Default template argument handling for iterator_adaptor
+ //
+ namespace detail
+ {
+ // If T is use_default, return the result of invoking
+ // DefaultNullaryFn, otherwise return T.
+ template <class T, class DefaultNullaryFn>
+ struct ia_dflt_help
+ : mpl::eval_if<
+ is_same<T, use_default>
+ , DefaultNullaryFn
+ , mpl::identity<T>
+ >
+ {
+ };
+
+ // A metafunction which computes an iterator_adaptor's base class,
+ // a specialization of iterator_facade.
+ template <
+ class Derived
+ , class Base
+ , class Value
+ , class Traversal
+ , class Reference
+ , class Difference
+ >
+ struct iterator_adaptor_base
+ {
+ typedef iterator_facade<
+ Derived
+
+# ifdef BOOST_ITERATOR_REF_CONSTNESS_KILLS_WRITABILITY
+ , typename detail::ia_dflt_help<
+ Value
+ , mpl::eval_if<
+ is_same<Reference,use_default>
+ , iterator_value<Base>
+ , remove_reference<Reference>
+ >
+ >::type
+# else
+ , typename detail::ia_dflt_help<
+ Value, iterator_value<Base>
+ >::type
+# endif
+
+ , typename detail::ia_dflt_help<
+ Traversal
+ , iterator_traversal<Base>
+ >::type
+
+ , typename detail::ia_dflt_help<
+ Reference
+ , mpl::eval_if<
+ is_same<Value,use_default>
+ , iterator_reference<Base>
+ , add_reference<Value>
+ >
+ >::type
+
+ , typename detail::ia_dflt_help<
+ Difference, iterator_difference<Base>
+ >::type
+ >
+ type;
+ };
+
+ // workaround for aC++ CR JAGaf33512
+ template <class Tr1, class Tr2>
+ inline void iterator_adaptor_assert_traversal ()
+ {
+ BOOST_STATIC_ASSERT((is_convertible<Tr1, Tr2>::value));
+ }
+ }
+
+ //
+ // Iterator Adaptor
+ //
+ // The parameter ordering changed slightly with respect to former
+ // versions of iterator_adaptor The idea is that when the user needs
+ // to fiddle with the reference type it is highly likely that the
+ // iterator category has to be adjusted as well. Any of the
+ // following four template arguments may be ommitted or explicitly
+ // replaced by use_default.
+ //
+ // Value - if supplied, the value_type of the resulting iterator, unless
+ // const. If const, a conforming compiler strips constness for the
+ // value_type. If not supplied, iterator_traits<Base>::value_type is used
+ //
+ // Category - the traversal category of the resulting iterator. If not
+ // supplied, iterator_traversal<Base>::type is used.
+ //
+ // Reference - the reference type of the resulting iterator, and in
+ // particular, the result type of operator*(). If not supplied but
+ // Value is supplied, Value& is used. Otherwise
+ // iterator_traits<Base>::reference is used.
+ //
+ // Difference - the difference_type of the resulting iterator. If not
+ // supplied, iterator_traits<Base>::difference_type is used.
+ //
+ template <
+ class Derived
+ , class Base
+ , class Value = use_default
+ , class Traversal = use_default
+ , class Reference = use_default
+ , class Difference = use_default
+ >
+ class iterator_adaptor
+ : public detail::iterator_adaptor_base<
+ Derived, Base, Value, Traversal, Reference, Difference
+ >::type
+ {
+ friend class iterator_core_access;
+
+ protected:
+ typedef typename detail::iterator_adaptor_base<
+ Derived, Base, Value, Traversal, Reference, Difference
+ >::type super_t;
+ public:
+ iterator_adaptor() {}
+
+ explicit iterator_adaptor(Base const &iter)
+ : m_iterator(iter)
+ {
+ }
+
+ typedef Base base_type;
+
+ Base const& base() const
+ { return m_iterator; }
+
+ protected:
+ // for convenience in derived classes
+ typedef iterator_adaptor<Derived,Base,Value,Traversal,Reference,Difference> iterator_adaptor_;
+
+ //
+ // lvalue access to the Base object for Derived
+ //
+ Base const& base_reference() const
+ { return m_iterator; }
+
+ Base& base_reference()
+ { return m_iterator; }
+
+ private:
+ //
+ // Core iterator interface for iterator_facade. This is private
+ // to prevent temptation for Derived classes to use it, which
+ // will often result in an error. Derived classes should use
+ // base_reference(), above, to get direct access to m_iterator.
+ //
+ typename super_t::reference dereference() const
+ { return *m_iterator; }
+
+ template <
+ class OtherDerived, class OtherIterator, class V, class C, class R, class D
+ >
+ bool equal(iterator_adaptor<OtherDerived, OtherIterator, V, C, R, D> const& x) const
+ {
+ // Maybe readd with same_distance
+ // BOOST_STATIC_ASSERT(
+ // (detail::same_category_and_difference<Derived,OtherDerived>::value)
+ // );
+ return m_iterator == x.base();
+ }
+
+ typedef typename iterator_category_to_traversal<
+ typename super_t::iterator_category
+ >::type my_traversal;
+
+# define BOOST_ITERATOR_ADAPTOR_ASSERT_TRAVERSAL(cat) \
+ detail::iterator_adaptor_assert_traversal<my_traversal, cat>();
+
+ void advance(typename super_t::difference_type n)
+ {
+ BOOST_ITERATOR_ADAPTOR_ASSERT_TRAVERSAL(random_access_traversal_tag)
+ m_iterator += n;
+ }
+
+ void increment() { ++m_iterator; }
+
+ void decrement()
+ {
+ BOOST_ITERATOR_ADAPTOR_ASSERT_TRAVERSAL(bidirectional_traversal_tag)
+ --m_iterator;
+ }
+
+ template <
+ class OtherDerived, class OtherIterator, class V, class C, class R, class D
+ >
+ typename super_t::difference_type distance_to(
+ iterator_adaptor<OtherDerived, OtherIterator, V, C, R, D> const& y) const
+ {
+ BOOST_ITERATOR_ADAPTOR_ASSERT_TRAVERSAL(random_access_traversal_tag)
+ // Maybe readd with same_distance
+ // BOOST_STATIC_ASSERT(
+ // (detail::same_category_and_difference<Derived,OtherDerived>::value)
+ // );
+ return y.base() - m_iterator;
+ }
+
+# undef BOOST_ITERATOR_ADAPTOR_ASSERT_TRAVERSAL
+
+ private: // data members
+ Base m_iterator;
+ };
+
+} // namespace boost
+
+#include <boost/iterator/detail/config_undef.hpp>
+
+#endif // BOOST_ITERATOR_ADAPTOR_23022003THW_HPP
diff --git a/boost/boost/iterator/iterator_archetypes.hpp b/boost/boost/iterator/iterator_archetypes.hpp
new file mode 100644
index 00000000000..9ffa4200dc5
--- /dev/null
+++ b/boost/boost/iterator/iterator_archetypes.hpp
@@ -0,0 +1,514 @@
+// (C) Copyright Jeremy Siek 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)
+
+#ifndef BOOST_ITERATOR_ARCHETYPES_HPP
+#define BOOST_ITERATOR_ARCHETYPES_HPP
+
+#include <boost/iterator/iterator_categories.hpp>
+#include <boost/operators.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/iterator.hpp>
+
+#include <boost/iterator/detail/facade_iterator_category.hpp>
+
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/add_const.hpp>
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+
+#include <boost/concept_archetype.hpp>
+
+#include <boost/mpl/aux_/msvc_eti_base.hpp>
+#include <boost/mpl/bitand.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/equal_to.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/identity.hpp>
+
+#include <cstddef>
+
+namespace boost {
+
+template <class Value, class AccessCategory>
+struct access_archetype;
+
+template <class Derived, class Value, class AccessCategory, class TraversalCategory>
+struct traversal_archetype;
+
+namespace iterator_archetypes
+{
+ enum {
+ readable_iterator_bit = 1
+ , writable_iterator_bit = 2
+ , swappable_iterator_bit = 4
+ , lvalue_iterator_bit = 8
+ };
+
+ // Not quite tags, since dispatching wouldn't work.
+ typedef mpl::int_<readable_iterator_bit>::type readable_iterator_t;
+ typedef mpl::int_<writable_iterator_bit>::type writable_iterator_t;
+
+ typedef mpl::int_<
+ (readable_iterator_bit|writable_iterator_bit)
+ >::type readable_writable_iterator_t;
+
+ typedef mpl::int_<
+ (readable_iterator_bit|lvalue_iterator_bit)
+ >::type readable_lvalue_iterator_t;
+
+ typedef mpl::int_<
+ (lvalue_iterator_bit|writable_iterator_bit)
+ >::type writable_lvalue_iterator_t;
+
+ typedef mpl::int_<swappable_iterator_bit>::type swappable_iterator_t;
+ typedef mpl::int_<lvalue_iterator_bit>::type lvalue_iterator_t;
+
+ template <class Derived, class Base>
+ struct has_access
+ : mpl::equal_to<
+ mpl::bitand_<Derived,Base>
+ , Base
+ >
+ {};
+}
+
+namespace detail
+{
+ template <class T>
+ struct assign_proxy
+ {
+ assign_proxy& operator=(T) { return *this; }
+ };
+
+ template <class T>
+ struct read_proxy
+ {
+ operator T() { return static_object<T>::get(); }
+ };
+
+ template <class T>
+ struct read_write_proxy
+ : read_proxy<T> // Use to inherit from assign_proxy, but that doesn't work. -JGS
+ {
+ read_write_proxy& operator=(T) { return *this; }
+ };
+
+ template <class T>
+ struct arrow_proxy
+ {
+ T const* operator->() const { return 0; }
+ };
+
+ struct no_operator_brackets {};
+
+ template <class ValueType>
+ struct readable_operator_brackets
+ {
+ read_proxy<ValueType> operator[](std::ptrdiff_t n) const { return read_proxy<ValueType>(); }
+ };
+
+ template <class ValueType>
+ struct writable_operator_brackets
+ {
+ read_write_proxy<ValueType> operator[](std::ptrdiff_t n) const { return read_write_proxy<ValueType>(); }
+ };
+
+ template <class Value, class AccessCategory, class TraversalCategory>
+ struct operator_brackets
+ : mpl::aux::msvc_eti_base<
+ typename mpl::eval_if<
+ is_convertible<TraversalCategory, random_access_traversal_tag>
+ , mpl::eval_if<
+ iterator_archetypes::has_access<
+ AccessCategory
+ , iterator_archetypes::writable_iterator_t
+ >
+ , mpl::identity<writable_operator_brackets<Value> >
+ , mpl::if_<
+ iterator_archetypes::has_access<
+ AccessCategory
+ , iterator_archetypes::readable_iterator_t
+ >
+ , readable_operator_brackets<Value>
+ , no_operator_brackets
+ >
+ >
+ , mpl::identity<no_operator_brackets>
+ >::type
+ >::type
+ {};
+
+ template <class TraversalCategory>
+ struct traversal_archetype_impl
+ {
+ template <class Derived,class Value> struct archetype;
+ };
+
+ // Constructor argument for those iterators that
+ // are not default constructible
+ struct ctor_arg {};
+
+ template <class Derived, class Value, class TraversalCategory>
+ struct traversal_archetype_
+ : mpl::aux::msvc_eti_base<
+ typename traversal_archetype_impl<TraversalCategory>::template archetype<Derived,Value>
+ >::type
+ {
+ typedef typename
+ traversal_archetype_impl<TraversalCategory>::template archetype<Derived,Value>
+ base;
+
+ traversal_archetype_() {}
+
+ traversal_archetype_(ctor_arg arg)
+ : base(arg)
+ {}
+ };
+
+ template <>
+ struct traversal_archetype_impl<incrementable_traversal_tag>
+ {
+ template<class Derived, class Value>
+ struct archetype
+ {
+ explicit archetype(ctor_arg) {}
+
+ struct bogus { }; // This use to be void, but that causes trouble for iterator_facade. Need more research. -JGS
+ typedef bogus difference_type;
+
+ Derived& operator++() { return (Derived&)static_object<Derived>::get(); }
+ Derived operator++(int) const { return (Derived&)static_object<Derived>::get(); }
+ };
+ };
+
+ template <>
+ struct traversal_archetype_impl<single_pass_traversal_tag>
+ {
+ template<class Derived, class Value>
+ struct archetype
+ : public equality_comparable< traversal_archetype_<Derived, Value, single_pass_traversal_tag> >,
+ public traversal_archetype_<Derived, Value, incrementable_traversal_tag>
+ {
+ explicit archetype(ctor_arg arg)
+ : traversal_archetype_<Derived, Value, incrementable_traversal_tag>(arg)
+ {}
+ };
+ };
+
+ template <class Derived, class Value>
+ bool operator==(traversal_archetype_<Derived, Value, single_pass_traversal_tag> const&,
+ traversal_archetype_<Derived, Value, single_pass_traversal_tag> const&) { return true; }
+
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+ // doesn't seem to pick up != from equality_comparable
+ template <class Derived, class Value>
+ bool operator!=(traversal_archetype_<Derived, Value, single_pass_traversal_tag> const&,
+ traversal_archetype_<Derived, Value, single_pass_traversal_tag> const&) { return true; }
+#endif
+ template <>
+ struct traversal_archetype_impl<forward_traversal_tag>
+ {
+ template<class Derived, class Value>
+ struct archetype
+ : public traversal_archetype_<Derived, Value, single_pass_traversal_tag>
+ {
+ archetype()
+ : traversal_archetype_<Derived, Value, single_pass_traversal_tag>(ctor_arg())
+ {}
+ typedef std::ptrdiff_t difference_type;
+ };
+ };
+
+ template <>
+ struct traversal_archetype_impl<bidirectional_traversal_tag>
+ {
+ template<class Derived, class Value>
+ struct archetype
+ : public traversal_archetype_<Derived, Value, forward_traversal_tag>
+ {
+ Derived& operator--() { return static_object<Derived>::get(); }
+ Derived operator--(int) const { return static_object<Derived>::get(); }
+ };
+ };
+
+ template <>
+ struct traversal_archetype_impl<random_access_traversal_tag>
+ {
+ template<class Derived, class Value>
+ struct archetype
+ : public traversal_archetype_<Derived, Value, bidirectional_traversal_tag>
+ {
+ Derived& operator+=(std::ptrdiff_t) { return static_object<Derived>::get(); }
+ Derived& operator-=(std::ptrdiff_t) { return static_object<Derived>::get(); }
+ };
+ };
+
+ template <class Derived, class Value>
+ Derived& operator+(traversal_archetype_<Derived, Value, random_access_traversal_tag> const&,
+ std::ptrdiff_t) { return static_object<Derived>::get(); }
+
+ template <class Derived, class Value>
+ Derived& operator+(std::ptrdiff_t,
+ traversal_archetype_<Derived, Value, random_access_traversal_tag> const&)
+ { return static_object<Derived>::get(); }
+
+ template <class Derived, class Value>
+ Derived& operator-(traversal_archetype_<Derived, Value, random_access_traversal_tag> const&,
+ std::ptrdiff_t)
+ { return static_object<Derived>::get(); }
+
+ template <class Derived, class Value>
+ std::ptrdiff_t operator-(traversal_archetype_<Derived, Value, random_access_traversal_tag> const&,
+ traversal_archetype_<Derived, Value, random_access_traversal_tag> const&)
+ { return 0; }
+
+ template <class Derived, class Value>
+ bool operator<(traversal_archetype_<Derived, Value, random_access_traversal_tag> const&,
+ traversal_archetype_<Derived, Value, random_access_traversal_tag> const&)
+ { return true; }
+
+ template <class Derived, class Value>
+ bool operator>(traversal_archetype_<Derived, Value, random_access_traversal_tag> const&,
+ traversal_archetype_<Derived, Value, random_access_traversal_tag> const&)
+ { return true; }
+
+ template <class Derived, class Value>
+ bool operator<=(traversal_archetype_<Derived, Value, random_access_traversal_tag> const&,
+ traversal_archetype_<Derived, Value, random_access_traversal_tag> const&)
+ { return true; }
+
+ template <class Derived, class Value>
+ bool operator>=(traversal_archetype_<Derived, Value, random_access_traversal_tag> const&,
+ traversal_archetype_<Derived, Value, random_access_traversal_tag> const&)
+ { return true; }
+
+ struct bogus_type;
+
+ template <class Value>
+ struct convertible_type
+ : mpl::if_< is_const<Value>,
+ typename remove_const<Value>::type,
+ bogus_type >
+ {};
+
+} // namespace detail
+
+
+template <class> struct undefined;
+
+template <class AccessCategory>
+struct iterator_access_archetype_impl
+{
+ template <class Value> struct archetype;
+};
+
+template <class Value, class AccessCategory>
+struct iterator_access_archetype
+ : mpl::aux::msvc_eti_base<
+ typename iterator_access_archetype_impl<
+ AccessCategory
+ >::template archetype<Value>
+ >::type
+{
+};
+
+template <>
+struct iterator_access_archetype_impl<
+ iterator_archetypes::readable_iterator_t
+>
+{
+ template <class Value>
+ struct archetype
+ {
+ typedef typename remove_cv<Value>::type value_type;
+ typedef Value reference;
+ typedef Value* pointer;
+
+ value_type operator*() const { return static_object<value_type>::get(); }
+
+ detail::arrow_proxy<Value> operator->() const { return detail::arrow_proxy<Value>(); }
+ };
+};
+
+template <>
+struct iterator_access_archetype_impl<
+ iterator_archetypes::writable_iterator_t
+>
+{
+ template <class Value>
+ struct archetype
+ {
+# if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+ BOOST_STATIC_ASSERT(!is_const<Value>::value);
+# endif
+ typedef void value_type;
+ typedef void reference;
+ typedef void pointer;
+
+ detail::assign_proxy<Value> operator*() const { return detail::assign_proxy<Value>(); }
+ };
+};
+
+template <>
+struct iterator_access_archetype_impl<
+ iterator_archetypes::readable_writable_iterator_t
+>
+{
+ template <class Value>
+ struct archetype
+ : public virtual iterator_access_archetype<
+ Value, iterator_archetypes::readable_iterator_t
+ >
+ {
+ typedef detail::read_write_proxy<Value> reference;
+
+ detail::read_write_proxy<Value> operator*() const { return detail::read_write_proxy<Value>(); }
+ };
+};
+
+template <>
+struct iterator_access_archetype_impl<iterator_archetypes::readable_lvalue_iterator_t>
+{
+ template <class Value>
+ struct archetype
+ : public virtual iterator_access_archetype<
+ Value, iterator_archetypes::readable_iterator_t
+ >
+ {
+ typedef Value& reference;
+
+ Value& operator*() const { return static_object<Value>::get(); }
+ Value* operator->() const { return 0; }
+ };
+};
+
+template <>
+struct iterator_access_archetype_impl<iterator_archetypes::writable_lvalue_iterator_t>
+{
+ template <class Value>
+ struct archetype
+ : public virtual iterator_access_archetype<
+ Value, iterator_archetypes::readable_lvalue_iterator_t
+ >
+ {
+# if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+ BOOST_STATIC_ASSERT((!is_const<Value>::value));
+# endif
+ };
+};
+
+
+template <class Value, class AccessCategory, class TraversalCategory>
+struct iterator_archetype;
+
+template <class Value, class AccessCategory, class TraversalCategory>
+struct traversal_archetype_base
+ : detail::operator_brackets<
+ typename remove_cv<Value>::type
+ , AccessCategory
+ , TraversalCategory
+ >
+ , detail::traversal_archetype_<
+ iterator_archetype<Value, AccessCategory, TraversalCategory>
+ , Value
+ , TraversalCategory
+ >
+{
+};
+
+namespace detail
+{
+ template <class Value, class AccessCategory, class TraversalCategory>
+ struct iterator_archetype_base
+ : iterator_access_archetype<Value, AccessCategory>
+ , traversal_archetype_base<Value, AccessCategory, TraversalCategory>
+ {
+ typedef iterator_access_archetype<Value, AccessCategory> access;
+
+ typedef typename detail::facade_iterator_category<
+ TraversalCategory
+ , typename mpl::eval_if<
+ iterator_archetypes::has_access<
+ AccessCategory, iterator_archetypes::writable_iterator_t
+ >
+ , remove_const<Value>
+ , add_const<Value>
+ >::type
+ , typename access::reference
+ >::type iterator_category;
+
+ // Needed for some broken libraries (see below)
+ typedef boost::iterator<
+ iterator_category
+ , Value
+ , typename traversal_archetype_base<
+ Value, AccessCategory, TraversalCategory
+ >::difference_type
+ , typename access::pointer
+ , typename access::reference
+ > workaround_iterator_base;
+ };
+}
+
+template <class Value, class AccessCategory, class TraversalCategory>
+struct iterator_archetype
+ : public detail::iterator_archetype_base<Value, AccessCategory, TraversalCategory>
+
+ // These broken libraries require derivation from std::iterator
+ // (or related magic) in order to handle iter_swap and other
+ // iterator operations
+# if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, < 310) \
+ || BOOST_WORKAROUND(_RWSTD_VER, BOOST_TESTED_AT(0x20101))
+ , public detail::iterator_archetype_base<
+ Value, AccessCategory, TraversalCategory
+ >::workaround_iterator_base
+# endif
+{
+ // Derivation from std::iterator above caused references to nested
+ // types to be ambiguous, so now we have to redeclare them all
+ // here.
+# if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, < 310) \
+ || BOOST_WORKAROUND(_RWSTD_VER, BOOST_TESTED_AT(0x20101))
+
+ typedef detail::iterator_archetype_base<
+ Value,AccessCategory,TraversalCategory
+ > base;
+
+ typedef typename base::value_type value_type;
+ typedef typename base::reference reference;
+ typedef typename base::pointer pointer;
+ typedef typename base::difference_type difference_type;
+ typedef typename base::iterator_category iterator_category;
+# endif
+
+ iterator_archetype() { }
+ iterator_archetype(iterator_archetype const& x)
+ : detail::iterator_archetype_base<
+ Value
+ , AccessCategory
+ , TraversalCategory
+ >(x)
+ {}
+
+ iterator_archetype& operator=(iterator_archetype const&)
+ { return *this; }
+
+# if 0
+ // Optional conversion from mutable
+ iterator_archetype(
+ iterator_archetype<
+ typename detail::convertible_type<Value>::type
+ , AccessCategory
+ , TraversalCategory> const&
+ );
+# endif
+};
+
+} // namespace boost
+
+
+#endif // BOOST_ITERATOR_ARCHETYPES_HPP
diff --git a/boost/boost/iterator/iterator_categories.hpp b/boost/boost/iterator/iterator_categories.hpp
new file mode 100644
index 00000000000..564ae50004b
--- /dev/null
+++ b/boost/boost/iterator/iterator_categories.hpp
@@ -0,0 +1,188 @@
+// (C) Copyright Jeremy Siek 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)
+
+#ifndef BOOST_ITERATOR_CATEGORIES_HPP
+# define BOOST_ITERATOR_CATEGORIES_HPP
+
+# include <boost/config.hpp>
+# include <boost/detail/iterator.hpp>
+# include <boost/iterator/detail/config_def.hpp>
+
+# include <boost/detail/workaround.hpp>
+
+# include <boost/mpl/eval_if.hpp>
+# include <boost/mpl/identity.hpp>
+# include <boost/mpl/placeholders.hpp>
+# include <boost/mpl/aux_/lambda_support.hpp>
+
+# include <boost/type_traits/is_convertible.hpp>
+
+# include <boost/static_assert.hpp>
+
+namespace boost {
+
+//
+// Traversal Categories
+//
+
+struct no_traversal_tag {};
+
+struct incrementable_traversal_tag
+ : no_traversal_tag
+{
+// incrementable_traversal_tag() {}
+// incrementable_traversal_tag(std::output_iterator_tag const&) {};
+};
+
+struct single_pass_traversal_tag
+ : incrementable_traversal_tag
+{
+// single_pass_traversal_tag() {}
+// single_pass_traversal_tag(std::input_iterator_tag const&) {};
+};
+
+struct forward_traversal_tag
+ : single_pass_traversal_tag
+{
+// forward_traversal_tag() {}
+// forward_traversal_tag(std::forward_iterator_tag const&) {};
+};
+
+struct bidirectional_traversal_tag
+ : forward_traversal_tag
+{
+// bidirectional_traversal_tag() {};
+// bidirectional_traversal_tag(std::bidirectional_iterator_tag const&) {};
+};
+
+struct random_access_traversal_tag
+ : bidirectional_traversal_tag
+{
+// random_access_traversal_tag() {};
+// random_access_traversal_tag(std::random_access_iterator_tag const&) {};
+};
+
+namespace detail
+{
+ //
+ // Convert a "strictly old-style" iterator category to a traversal
+ // tag. This is broken out into a separate metafunction to reduce
+ // the cost of instantiating iterator_category_to_traversal, below,
+ // for new-style types.
+ //
+ template <class Cat>
+ struct old_category_to_traversal
+ : mpl::eval_if<
+ is_convertible<Cat,std::random_access_iterator_tag>
+ , mpl::identity<random_access_traversal_tag>
+ , mpl::eval_if<
+ is_convertible<Cat,std::bidirectional_iterator_tag>
+ , mpl::identity<bidirectional_traversal_tag>
+ , mpl::eval_if<
+ is_convertible<Cat,std::forward_iterator_tag>
+ , mpl::identity<forward_traversal_tag>
+ , mpl::eval_if<
+ is_convertible<Cat,std::input_iterator_tag>
+ , mpl::identity<single_pass_traversal_tag>
+ , mpl::eval_if<
+ is_convertible<Cat,std::output_iterator_tag>
+ , mpl::identity<incrementable_traversal_tag>
+ , void
+ >
+ >
+ >
+ >
+ >
+ {};
+
+# if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ template <>
+ struct old_category_to_traversal<int>
+ {
+ typedef int type;
+ };
+# endif
+
+ template <class Traversal>
+ struct pure_traversal_tag
+ : mpl::eval_if<
+ is_convertible<Traversal,random_access_traversal_tag>
+ , mpl::identity<random_access_traversal_tag>
+ , mpl::eval_if<
+ is_convertible<Traversal,bidirectional_traversal_tag>
+ , mpl::identity<bidirectional_traversal_tag>
+ , mpl::eval_if<
+ is_convertible<Traversal,forward_traversal_tag>
+ , mpl::identity<forward_traversal_tag>
+ , mpl::eval_if<
+ is_convertible<Traversal,single_pass_traversal_tag>
+ , mpl::identity<single_pass_traversal_tag>
+ , mpl::eval_if<
+ is_convertible<Traversal,incrementable_traversal_tag>
+ , mpl::identity<incrementable_traversal_tag>
+ , void
+ >
+ >
+ >
+ >
+ >
+ {
+ };
+
+# if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ template <>
+ struct pure_traversal_tag<int>
+ {
+ typedef int type;
+ };
+# endif
+
+} // namespace detail
+
+
+//
+// Convert an iterator category into a traversal tag
+//
+template <class Cat>
+struct iterator_category_to_traversal
+ : mpl::eval_if< // if already convertible to a traversal tag, we're done.
+ is_convertible<Cat,incrementable_traversal_tag>
+ , mpl::identity<Cat>
+ , detail::old_category_to_traversal<Cat>
+ >
+{};
+
+// Trait to get an iterator's traversal category
+template <class Iterator = mpl::_1>
+struct iterator_traversal
+ : iterator_category_to_traversal<
+ typename boost::detail::iterator_traits<Iterator>::iterator_category
+ >
+{};
+
+# ifdef BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT
+// Hack because BOOST_MPL_AUX_LAMBDA_SUPPORT doesn't seem to work
+// out well. Instantiating the nested apply template also
+// requires instantiating iterator_traits on the
+// placeholder. Instead we just specialize it as a metafunction
+// class.
+template <>
+struct iterator_traversal<mpl::_1>
+{
+ template <class T>
+ struct apply : iterator_traversal<T>
+ {};
+};
+template <>
+struct iterator_traversal<mpl::_>
+ : iterator_traversal<mpl::_1>
+{};
+# endif
+
+} // namespace boost
+
+#include <boost/iterator/detail/config_undef.hpp>
+
+#endif // BOOST_ITERATOR_CATEGORIES_HPP
diff --git a/boost/boost/iterator/iterator_concepts.hpp b/boost/boost/iterator/iterator_concepts.hpp
new file mode 100644
index 00000000000..4c27964e935
--- /dev/null
+++ b/boost/boost/iterator/iterator_concepts.hpp
@@ -0,0 +1,308 @@
+// (C) Copyright Jeremy Siek 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)
+
+#ifndef BOOST_ITERATOR_CONCEPTS_HPP
+#define BOOST_ITERATOR_CONCEPTS_HPP
+
+// Revision History
+// 26 Apr 2003 thw
+// Adapted to new iterator concepts
+// 22 Nov 2002 Thomas Witt
+// Added interoperable concept.
+
+#include <boost/concept_check.hpp>
+#include <boost/iterator/iterator_categories.hpp>
+
+// Use boost::detail::iterator_traits to work around some MSVC/Dinkumware problems.
+#include <boost/detail/iterator.hpp>
+
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/is_integral.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/or.hpp>
+
+#include <boost/static_assert.hpp>
+
+// Use boost/limits to work around missing limits headers on some compilers
+#include <boost/limits.hpp>
+#include <boost/config.hpp>
+
+#include <algorithm>
+
+namespace boost_concepts {
+ // Used a different namespace here (instead of "boost") so that the
+ // concept descriptions do not take for granted the names in
+ // namespace boost.
+
+ // We use this in place of STATIC_ASSERT((is_convertible<...>))
+ // because some compilers (CWPro7.x) can't detect convertibility.
+ //
+ // Of course, that just gets us a different error at the moment with
+ // some tests, since new iterator category deduction still depends
+ // on convertibility detection. We might need some specializations
+ // to support this compiler.
+ template <class Target, class Source>
+ struct static_assert_base_and_derived
+ {
+ static_assert_base_and_derived(Target* = (Source*)0) {}
+ };
+
+ //===========================================================================
+ // Iterator Access Concepts
+
+ template <typename Iterator>
+ class ReadableIteratorConcept {
+ public:
+ typedef BOOST_DEDUCED_TYPENAME boost::detail::iterator_traits<Iterator>::value_type value_type;
+
+ void constraints() {
+ boost::function_requires< boost::AssignableConcept<Iterator> >();
+ boost::function_requires< boost::CopyConstructibleConcept<Iterator> >();
+
+ value_type v = *i;
+ boost::ignore_unused_variable_warning(v);
+ }
+ Iterator i;
+ };
+
+ template <
+ typename Iterator
+ , typename ValueType = BOOST_DEDUCED_TYPENAME boost::detail::iterator_traits<Iterator>::value_type
+ >
+ class WritableIteratorConcept {
+ public:
+
+ void constraints() {
+ boost::function_requires< boost::CopyConstructibleConcept<Iterator> >();
+ *i = v;
+ }
+ ValueType v;
+ Iterator i;
+ };
+
+ template <typename Iterator>
+ class SwappableIteratorConcept {
+ public:
+
+ void constraints() {
+ std::iter_swap(i1, i2);
+ }
+ Iterator i1;
+ Iterator i2;
+ };
+
+ template <typename Iterator>
+ class LvalueIteratorConcept
+ {
+ public:
+ typedef typename boost::detail::iterator_traits<Iterator>::value_type value_type;
+ void constraints()
+ {
+ value_type& r = const_cast<value_type&>(*i);
+ boost::ignore_unused_variable_warning(r);
+ }
+ Iterator i;
+ };
+
+
+ //===========================================================================
+ // Iterator Traversal Concepts
+
+ template <typename Iterator>
+ class IncrementableIteratorConcept {
+ public:
+ typedef typename boost::iterator_traversal<Iterator>::type traversal_category;
+
+ void constraints() {
+ boost::function_requires< boost::AssignableConcept<Iterator> >();
+ boost::function_requires< boost::CopyConstructibleConcept<Iterator> >();
+
+ BOOST_STATIC_ASSERT(
+ (boost::is_convertible<
+ traversal_category
+ , boost::incrementable_traversal_tag
+ >::value
+ ));
+
+ ++i;
+ (void)i++;
+ }
+ Iterator i;
+ };
+
+ template <typename Iterator>
+ class SinglePassIteratorConcept {
+ public:
+ typedef typename boost::iterator_traversal<Iterator>::type traversal_category;
+ typedef typename boost::detail::iterator_traits<Iterator>::difference_type difference_type;
+
+ void constraints() {
+ boost::function_requires< IncrementableIteratorConcept<Iterator> >();
+ boost::function_requires< boost::EqualityComparableConcept<Iterator> >();
+
+ BOOST_STATIC_ASSERT(
+ (boost::is_convertible<
+ traversal_category
+ , boost::single_pass_traversal_tag
+ >::value
+ ));
+ }
+ };
+
+ template <typename Iterator>
+ class ForwardTraversalConcept {
+ public:
+ typedef typename boost::iterator_traversal<Iterator>::type traversal_category;
+ typedef typename boost::detail::iterator_traits<Iterator>::difference_type difference_type;
+
+ void constraints() {
+ boost::function_requires< SinglePassIteratorConcept<Iterator> >();
+ boost::function_requires<
+ boost::DefaultConstructibleConcept<Iterator> >();
+
+ typedef boost::mpl::and_<
+ boost::is_integral<difference_type>,
+ boost::mpl::bool_< std::numeric_limits<difference_type>::is_signed >
+ > difference_type_is_signed_integral;
+
+ BOOST_STATIC_ASSERT(difference_type_is_signed_integral::value);
+ BOOST_STATIC_ASSERT(
+ (boost::is_convertible<
+ traversal_category
+ , boost::forward_traversal_tag
+ >::value
+ ));
+ }
+ };
+
+ template <typename Iterator>
+ class BidirectionalTraversalConcept {
+ public:
+ typedef typename boost::iterator_traversal<Iterator>::type traversal_category;
+
+ void constraints() {
+ boost::function_requires< ForwardTraversalConcept<Iterator> >();
+
+ BOOST_STATIC_ASSERT(
+ (boost::is_convertible<
+ traversal_category
+ , boost::bidirectional_traversal_tag
+ >::value
+ ));
+
+ --i;
+ (void)i--;
+ }
+ Iterator i;
+ };
+
+ template <typename Iterator>
+ class RandomAccessTraversalConcept {
+ public:
+ typedef typename boost::iterator_traversal<Iterator>::type traversal_category;
+ typedef typename boost::detail::iterator_traits<Iterator>::difference_type
+ difference_type;
+
+ void constraints() {
+ boost::function_requires< BidirectionalTraversalConcept<Iterator> >();
+
+ BOOST_STATIC_ASSERT(
+ (boost::is_convertible<
+ traversal_category
+ , boost::random_access_traversal_tag
+ >::value
+ ));
+
+ i += n;
+ i = i + n;
+ i = n + i;
+ i -= n;
+ i = i - n;
+ n = i - j;
+ }
+ difference_type n;
+ Iterator i, j;
+ };
+
+ //===========================================================================
+ // Iterator Interoperability Concept
+
+ namespace detail
+ {
+
+ template <typename Iterator1, typename Iterator2>
+ void interop_single_pass_constraints(Iterator1 const& i1, Iterator2 const& i2)
+ {
+ bool b;
+ b = i1 == i2;
+ b = i1 != i2;
+
+ b = i2 == i1;
+ b = i2 != i1;
+ }
+
+ template <typename Iterator1, typename Iterator2>
+ void interop_rand_access_constraints(Iterator1 const& i1, Iterator2 const& i2,
+ boost::random_access_traversal_tag, boost::random_access_traversal_tag)
+ {
+ bool b;
+ typename boost::detail::iterator_traits<Iterator2>::difference_type n;
+ b = i1 < i2;
+ b = i1 <= i2;
+ b = i1 > i2;
+ b = i1 >= i2;
+ n = i1 - i2;
+
+ b = i2 < i1;
+ b = i2 <= i1;
+ b = i2 > i1;
+ b = i2 >= i1;
+ n = i2 - i1;
+ }
+ template <typename Iterator1, typename Iterator2>
+ void interop_rand_access_constraints(Iterator1 const& i1, Iterator2 const& i2,
+ boost::single_pass_traversal_tag, boost::single_pass_traversal_tag)
+ { }
+
+ } // namespace detail
+
+ template <typename Iterator, typename ConstIterator>
+ class InteroperableIteratorConcept
+ {
+ public:
+ typedef typename boost::detail::pure_traversal_tag<
+ typename boost::iterator_traversal<
+ Iterator
+ >::type
+ >::type traversal_category;
+
+ typedef typename boost::detail::pure_traversal_tag<
+ typename boost::iterator_traversal<
+ ConstIterator
+ >::type
+ >::type const_traversal_category;
+
+ void constraints()
+ {
+ boost::function_requires< SinglePassIteratorConcept<Iterator> >();
+ boost::function_requires< SinglePassIteratorConcept<ConstIterator> >();
+
+ detail::interop_single_pass_constraints(i, ci);
+ detail::interop_rand_access_constraints(i, ci, traversal_category(), const_traversal_category());
+
+ ci = i;
+ }
+ Iterator i;
+ ConstIterator ci;
+ };
+
+} // namespace boost_concepts
+
+
+#endif // BOOST_ITERATOR_CONCEPTS_HPP
diff --git a/boost/boost/iterator/iterator_facade.hpp b/boost/boost/iterator/iterator_facade.hpp
new file mode 100644
index 00000000000..0e494fe5d7f
--- /dev/null
+++ b/boost/boost/iterator/iterator_facade.hpp
@@ -0,0 +1,879 @@
+// (C) Copyright David Abrahams 2002.
+// (C) Copyright Jeremy Siek 2002.
+// (C) Copyright Thomas Witt 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)
+#ifndef BOOST_ITERATOR_FACADE_23022003THW_HPP
+#define BOOST_ITERATOR_FACADE_23022003THW_HPP
+
+#include <boost/iterator.hpp>
+#include <boost/iterator/interoperable.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+
+#include <boost/iterator/detail/facade_iterator_category.hpp>
+#include <boost/iterator/detail/enable_if.hpp>
+
+#include <boost/implicit_cast.hpp>
+#include <boost/static_assert.hpp>
+
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/add_const.hpp>
+#include <boost/type_traits/add_pointer.hpp>
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/type_traits/is_pod.hpp>
+
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/always.hpp>
+#include <boost/mpl/apply.hpp>
+#include <boost/mpl/identity.hpp>
+
+#include <boost/iterator/detail/config_def.hpp> // this goes last
+
+namespace boost
+{
+ // This forward declaration is required for the friend declaration
+ // in iterator_core_access
+ template <class I, class V, class TC, class R, class D> class iterator_facade;
+
+ namespace detail
+ {
+ // A binary metafunction class that always returns bool. VC6
+ // ICEs on mpl::always<bool>, probably because of the default
+ // parameters.
+ struct always_bool2
+ {
+ template <class T, class U>
+ struct apply
+ {
+ typedef bool type;
+ };
+ };
+
+ //
+ // enable if for use in operator implementation.
+ //
+ template <
+ class Facade1
+ , class Facade2
+ , class Return
+ >
+ struct enable_if_interoperable
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+ {
+ typedef typename mpl::if_<
+ mpl::or_<
+ is_convertible<Facade1, Facade2>
+ , is_convertible<Facade2, Facade1>
+ >
+ , Return
+ , int[3]
+ >::type type;
+ };
+#else
+ : ::boost::iterators::enable_if<
+ mpl::or_<
+ is_convertible<Facade1, Facade2>
+ , is_convertible<Facade2, Facade1>
+ >
+ , Return
+ >
+ {};
+#endif
+
+ //
+ // Generates associated types for an iterator_facade with the
+ // given parameters.
+ //
+ template <
+ class ValueParam
+ , class CategoryOrTraversal
+ , class Reference
+ , class Difference
+ >
+ struct iterator_facade_types
+ {
+ typedef typename facade_iterator_category<
+ CategoryOrTraversal, ValueParam, Reference
+ >::type iterator_category;
+
+ typedef typename remove_const<ValueParam>::type value_type;
+
+ typedef typename mpl::eval_if<
+ detail::iterator_writability_disabled<ValueParam,Reference>
+ , add_pointer<const value_type>
+ , add_pointer<value_type>
+ >::type pointer;
+
+# if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
+ && (BOOST_WORKAROUND(_STLPORT_VERSION, BOOST_TESTED_AT(0x452)) \
+ || BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, BOOST_TESTED_AT(310))) \
+ || BOOST_WORKAROUND(BOOST_RWSTD_VER, BOOST_TESTED_AT(0x20101)) \
+ || BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, <= 310)
+
+ // To interoperate with some broken library/compiler
+ // combinations, user-defined iterators must be derived from
+ // std::iterator. It is possible to implement a standard
+ // library for broken compilers without this limitation.
+# define BOOST_ITERATOR_FACADE_NEEDS_ITERATOR_BASE 1
+
+ typedef
+ iterator<iterator_category, value_type, Difference, pointer, Reference>
+ base;
+# endif
+ };
+
+ // iterators whose dereference operators reference the same value
+ // for all iterators into the same sequence (like many input
+ // iterators) need help with their postfix ++: the referenced
+ // value must be read and stored away before the increment occurs
+ // so that *a++ yields the originally referenced element and not
+ // the next one.
+ template <class Iterator>
+ class postfix_increment_proxy
+ {
+ typedef typename iterator_value<Iterator>::type value_type;
+ public:
+ explicit postfix_increment_proxy(Iterator const& x)
+ : stored_value(*x)
+ {}
+
+ // Returning a mutable reference allows nonsense like
+ // (*r++).mutate(), but it imposes fewer assumptions about the
+ // behavior of the value_type. In particular, recall taht
+ // (*r).mutate() is legal if operator* returns by value.
+ value_type&
+ operator*() const
+ {
+ return this->stored_value;
+ }
+ private:
+ mutable value_type stored_value;
+ };
+
+ //
+ // In general, we can't determine that such an iterator isn't
+ // writable -- we also need to store a copy of the old iterator so
+ // that it can be written into.
+ template <class Iterator>
+ class writable_postfix_increment_proxy
+ {
+ typedef typename iterator_value<Iterator>::type value_type;
+ public:
+ explicit writable_postfix_increment_proxy(Iterator const& x)
+ : stored_value(*x)
+ , stored_iterator(x)
+ {}
+
+ // Dereferencing must return a proxy so that both *r++ = o and
+ // value_type(*r++) can work. In this case, *r is the same as
+ // *r++, and the conversion operator below is used to ensure
+ // readability.
+ writable_postfix_increment_proxy const&
+ operator*() const
+ {
+ return *this;
+ }
+
+ // Provides readability of *r++
+ operator value_type&() const
+ {
+ return stored_value;
+ }
+
+ // Provides writability of *r++
+ template <class T>
+ T const& operator=(T const& x) const
+ {
+ *this->stored_iterator = x;
+ return x;
+ }
+
+ // This overload just in case only non-const objects are writable
+ template <class T>
+ T& operator=(T& x) const
+ {
+ *this->stored_iterator = x;
+ return x;
+ }
+
+ // Provides X(r++)
+ operator Iterator const&() const
+ {
+ return stored_iterator;
+ }
+
+ private:
+ mutable value_type stored_value;
+ Iterator stored_iterator;
+ };
+
+# ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+ template <class Reference, class Value>
+ struct is_non_proxy_reference_impl
+ {
+ static Reference r;
+
+ template <class R>
+ static typename mpl::if_<
+ is_convertible<
+ R const volatile*
+ , Value const volatile*
+ >
+ , char[1]
+ , char[2]
+ >::type& helper(R const&);
+
+ BOOST_STATIC_CONSTANT(bool, value = sizeof(helper(r)) == 1);
+ };
+
+ template <class Reference, class Value>
+ struct is_non_proxy_reference
+ : mpl::bool_<
+ is_non_proxy_reference_impl<Reference, Value>::value
+ >
+ {};
+# else
+ template <class Reference, class Value>
+ struct is_non_proxy_reference
+ : is_convertible<
+ typename remove_reference<Reference>::type
+ const volatile*
+ , Value const volatile*
+ >
+ {};
+# endif
+
+ // A metafunction to choose the result type of postfix ++
+ //
+ // Because the C++98 input iterator requirements say that *r++ has
+ // type T (value_type), implementations of some standard
+ // algorithms like lexicographical_compare may use constructions
+ // like:
+ //
+ // *r++ < *s++
+ //
+ // If *r++ returns a proxy (as required if r is writable but not
+ // multipass), this sort of expression will fail unless the proxy
+ // supports the operator<. Since there are any number of such
+ // operations, we're not going to try to support them. Therefore,
+ // even if r++ returns a proxy, *r++ will only return a proxy if
+ // *r also returns a proxy.
+ template <class Iterator, class Value, class Reference, class CategoryOrTraversal>
+ struct postfix_increment_result
+ : mpl::eval_if<
+ mpl::and_<
+ // A proxy is only needed for readable iterators
+ is_convertible<Reference,Value const&>
+
+ // No multipass iterator can have values that disappear
+ // before positions can be re-visited
+ , mpl::not_<
+ is_convertible<
+ typename iterator_category_to_traversal<CategoryOrTraversal>::type
+ , forward_traversal_tag
+ >
+ >
+ >
+ , mpl::if_<
+ is_non_proxy_reference<Reference,Value>
+ , postfix_increment_proxy<Iterator>
+ , writable_postfix_increment_proxy<Iterator>
+ >
+ , mpl::identity<Iterator>
+ >
+ {};
+
+ // operator->() needs special support for input iterators to strictly meet the
+ // standard's requirements. If *i is not a reference type, we must still
+ // produce a lvalue to which a pointer can be formed. We do that by
+ // returning an instantiation of this special proxy class template.
+ template <class T>
+ struct operator_arrow_proxy
+ {
+ operator_arrow_proxy(T const* px) : m_value(*px) {}
+ T* operator->() const { return &m_value; }
+ // This function is needed for MWCW and BCC, which won't call operator->
+ // again automatically per 13.3.1.2 para 8
+ operator T*() const { return &m_value; }
+ mutable T m_value;
+ };
+
+ // A metafunction that gets the result type for operator->. Also
+ // has a static function make() which builds the result from a
+ // Reference
+ template <class ValueType, class Reference, class Pointer>
+ struct operator_arrow_result
+ {
+ // CWPro8.3 won't accept "operator_arrow_result::type", and we
+ // need that type below, so metafunction forwarding would be a
+ // losing proposition here.
+ typedef typename mpl::if_<
+ is_reference<Reference>
+ , Pointer
+ , operator_arrow_proxy<ValueType>
+ >::type type;
+
+ static type make(Reference x)
+ {
+ return implicit_cast<type>(&x);
+ }
+ };
+
+# if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ // Deal with ETI
+ template<>
+ struct operator_arrow_result<int, int, int>
+ {
+ typedef int type;
+ };
+# endif
+
+ // A proxy return type for operator[], needed to deal with
+ // iterators that may invalidate referents upon destruction.
+ // Consider the temporary iterator in *(a + n)
+ template <class Iterator>
+ class operator_brackets_proxy
+ {
+ // Iterator is actually an iterator_facade, so we do not have to
+ // go through iterator_traits to access the traits.
+ typedef typename Iterator::reference reference;
+ typedef typename Iterator::value_type value_type;
+
+ public:
+ operator_brackets_proxy(Iterator const& iter)
+ : m_iter(iter)
+ {}
+
+ operator reference() const
+ {
+ return *m_iter;
+ }
+
+ operator_brackets_proxy& operator=(value_type const& val)
+ {
+ *m_iter = val;
+ return *this;
+ }
+
+ private:
+ Iterator m_iter;
+ };
+
+ // A metafunction that determines whether operator[] must return a
+ // proxy, or whether it can simply return a copy of the value_type.
+ template <class ValueType, class Reference>
+ struct use_operator_brackets_proxy
+ : mpl::not_<
+ mpl::and_<
+ // Really we want an is_copy_constructible trait here,
+ // but is_POD will have to suffice in the meantime.
+ boost::is_POD<ValueType>
+ , iterator_writability_disabled<ValueType,Reference>
+ >
+ >
+ {};
+
+ template <class Iterator, class Value, class Reference>
+ struct operator_brackets_result
+ {
+ typedef typename mpl::if_<
+ use_operator_brackets_proxy<Value,Reference>
+ , operator_brackets_proxy<Iterator>
+ , Value
+ >::type type;
+ };
+
+ template <class Iterator>
+ operator_brackets_proxy<Iterator> make_operator_brackets_result(Iterator const& iter, mpl::true_)
+ {
+ return operator_brackets_proxy<Iterator>(iter);
+ }
+
+ template <class Iterator>
+ typename Iterator::value_type make_operator_brackets_result(Iterator const& iter, mpl::false_)
+ {
+ return *iter;
+ }
+
+ struct choose_difference_type
+ {
+ template <class I1, class I2>
+ struct apply
+ :
+# ifdef BOOST_NO_ONE_WAY_ITERATOR_INTEROP
+ iterator_difference<I1>
+# elif BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ mpl::if_<
+ is_convertible<I2,I1>
+ , typename I1::difference_type
+ , typename I2::difference_type
+ >
+# else
+ mpl::eval_if<
+ is_convertible<I2,I1>
+ , iterator_difference<I1>
+ , iterator_difference<I2>
+ >
+# endif
+ {};
+
+ };
+ } // namespace detail
+
+
+ // Macros which describe the declarations of binary operators
+# ifdef BOOST_NO_STRICT_ITERATOR_INTEROPERABILITY
+# define BOOST_ITERATOR_FACADE_INTEROP_HEAD(prefix, op, result_type) \
+ template < \
+ class Derived1, class V1, class TC1, class R1, class D1 \
+ , class Derived2, class V2, class TC2, class R2, class D2 \
+ > \
+ prefix typename mpl::apply2<result_type,Derived1,Derived2>::type \
+ operator op( \
+ iterator_facade<Derived1, V1, TC1, R1, D1> const& lhs \
+ , iterator_facade<Derived2, V2, TC2, R2, D2> const& rhs)
+# else
+# define BOOST_ITERATOR_FACADE_INTEROP_HEAD(prefix, op, result_type) \
+ template < \
+ class Derived1, class V1, class TC1, class R1, class D1 \
+ , class Derived2, class V2, class TC2, class R2, class D2 \
+ > \
+ prefix typename detail::enable_if_interoperable< \
+ Derived1, Derived2 \
+ , typename mpl::apply2<result_type,Derived1,Derived2>::type \
+ >::type \
+ operator op( \
+ iterator_facade<Derived1, V1, TC1, R1, D1> const& lhs \
+ , iterator_facade<Derived2, V2, TC2, R2, D2> const& rhs)
+# endif
+
+# define BOOST_ITERATOR_FACADE_PLUS_HEAD(prefix,args) \
+ template <class Derived, class V, class TC, class R, class D> \
+ prefix Derived operator+ args
+
+ //
+ // Helper class for granting access to the iterator core interface.
+ //
+ // The simple core interface is used by iterator_facade. The core
+ // interface of a user/library defined iterator type should not be made public
+ // so that it does not clutter the public interface. Instead iterator_core_access
+ // should be made friend so that iterator_facade can access the core
+ // interface through iterator_core_access.
+ //
+ class iterator_core_access
+ {
+# if defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) \
+ || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))
+ // Tasteless as this may seem, making all members public allows member templates
+ // to work in the absence of member template friends.
+ public:
+# else
+
+ template <class I, class V, class TC, class R, class D> friend class iterator_facade;
+
+# define BOOST_ITERATOR_FACADE_RELATION(op) \
+ BOOST_ITERATOR_FACADE_INTEROP_HEAD(friend,op, detail::always_bool2);
+
+ BOOST_ITERATOR_FACADE_RELATION(==)
+ BOOST_ITERATOR_FACADE_RELATION(!=)
+
+ BOOST_ITERATOR_FACADE_RELATION(<)
+ BOOST_ITERATOR_FACADE_RELATION(>)
+ BOOST_ITERATOR_FACADE_RELATION(<=)
+ BOOST_ITERATOR_FACADE_RELATION(>=)
+# undef BOOST_ITERATOR_FACADE_RELATION
+
+ BOOST_ITERATOR_FACADE_INTEROP_HEAD(
+ friend, -, detail::choose_difference_type)
+ ;
+
+ BOOST_ITERATOR_FACADE_PLUS_HEAD(
+ friend inline
+ , (iterator_facade<Derived, V, TC, R, D> const&
+ , typename Derived::difference_type)
+ )
+ ;
+
+ BOOST_ITERATOR_FACADE_PLUS_HEAD(
+ friend inline
+ , (typename Derived::difference_type
+ , iterator_facade<Derived, V, TC, R, D> const&)
+ )
+ ;
+
+# endif
+
+ template <class Facade>
+ static typename Facade::reference dereference(Facade const& f)
+ {
+ return f.dereference();
+ }
+
+ template <class Facade>
+ static void increment(Facade& f)
+ {
+ f.increment();
+ }
+
+ template <class Facade>
+ static void decrement(Facade& f)
+ {
+ f.decrement();
+ }
+
+ template <class Facade1, class Facade2>
+ static bool equal(Facade1 const& f1, Facade2 const& f2, mpl::true_)
+ {
+ return f1.equal(f2);
+ }
+
+ template <class Facade1, class Facade2>
+ static bool equal(Facade1 const& f1, Facade2 const& f2, mpl::false_)
+ {
+ return f2.equal(f1);
+ }
+
+ template <class Facade>
+ static void advance(Facade& f, typename Facade::difference_type n)
+ {
+ f.advance(n);
+ }
+
+ template <class Facade1, class Facade2>
+ static typename Facade1::difference_type distance_from(
+ Facade1 const& f1, Facade2 const& f2, mpl::true_)
+ {
+ return -f1.distance_to(f2);
+ }
+
+ template <class Facade1, class Facade2>
+ static typename Facade2::difference_type distance_from(
+ Facade1 const& f1, Facade2 const& f2, mpl::false_)
+ {
+ return f2.distance_to(f1);
+ }
+
+ //
+ // Curiously Recurring Template interface.
+ //
+ template <class I, class V, class TC, class R, class D>
+ static I& derived(iterator_facade<I,V,TC,R,D>& facade)
+ {
+ return *static_cast<I*>(&facade);
+ }
+
+ template <class I, class V, class TC, class R, class D>
+ static I const& derived(iterator_facade<I,V,TC,R,D> const& facade)
+ {
+ return *static_cast<I const*>(&facade);
+ }
+
+ private:
+ // objects of this class are useless
+ iterator_core_access(); //undefined
+ };
+
+ //
+ // iterator_facade - use as a public base class for defining new
+ // standard-conforming iterators.
+ //
+ template <
+ class Derived // The derived iterator type being constructed
+ , class Value
+ , class CategoryOrTraversal
+ , class Reference = Value&
+ , class Difference = std::ptrdiff_t
+ >
+ class iterator_facade
+# ifdef BOOST_ITERATOR_FACADE_NEEDS_ITERATOR_BASE
+ : public detail::iterator_facade_types<
+ Value, CategoryOrTraversal, Reference, Difference
+ >::base
+# undef BOOST_ITERATOR_FACADE_NEEDS_ITERATOR_BASE
+# endif
+ {
+ private:
+ //
+ // Curiously Recurring Template interface.
+ //
+ Derived& derived()
+ {
+ return *static_cast<Derived*>(this);
+ }
+
+ Derived const& derived() const
+ {
+ return *static_cast<Derived const*>(this);
+ }
+
+ typedef detail::iterator_facade_types<
+ Value, CategoryOrTraversal, Reference, Difference
+ > associated_types;
+
+ protected:
+ // For use by derived classes
+ typedef iterator_facade<Derived,Value,CategoryOrTraversal,Reference,Difference> iterator_facade_;
+
+ public:
+
+ typedef typename associated_types::value_type value_type;
+ typedef Reference reference;
+ typedef Difference difference_type;
+ typedef typename associated_types::pointer pointer;
+ typedef typename associated_types::iterator_category iterator_category;
+
+ reference operator*() const
+ {
+ return iterator_core_access::dereference(this->derived());
+ }
+
+ typename detail::operator_arrow_result<
+ value_type
+ , reference
+ , pointer
+ >::type
+ operator->() const
+ {
+ return detail::operator_arrow_result<
+ value_type
+ , reference
+ , pointer
+ >::make(*this->derived());
+ }
+
+ typename detail::operator_brackets_result<Derived,Value,reference>::type
+ operator[](difference_type n) const
+ {
+ typedef detail::use_operator_brackets_proxy<Value,Reference> use_proxy;
+
+ return detail::make_operator_brackets_result<Derived>(
+ this->derived() + n
+ , use_proxy()
+ );
+ }
+
+ Derived& operator++()
+ {
+ iterator_core_access::increment(this->derived());
+ return this->derived();
+ }
+
+# if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ typename detail::postfix_increment_result<Derived,Value,Reference,CategoryOrTraversal>::type
+ operator++(int)
+ {
+ typename detail::postfix_increment_result<Derived,Value,Reference,CategoryOrTraversal>::type
+ tmp(this->derived());
+ ++*this;
+ return tmp;
+ }
+# endif
+
+ Derived& operator--()
+ {
+ iterator_core_access::decrement(this->derived());
+ return this->derived();
+ }
+
+ Derived operator--(int)
+ {
+ Derived tmp(this->derived());
+ --*this;
+ return tmp;
+ }
+
+ Derived& operator+=(difference_type n)
+ {
+ iterator_core_access::advance(this->derived(), n);
+ return this->derived();
+ }
+
+ Derived& operator-=(difference_type n)
+ {
+ iterator_core_access::advance(this->derived(), -n);
+ return this->derived();
+ }
+
+ Derived operator-(difference_type x) const
+ {
+ Derived result(this->derived());
+ return result -= x;
+ }
+
+# if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ // There appears to be a bug which trashes the data of classes
+ // derived from iterator_facade when they are assigned unless we
+ // define this assignment operator. This bug is only revealed
+ // (so far) in STLPort debug mode, but it's clearly a codegen
+ // problem so we apply the workaround for all MSVC6.
+ iterator_facade& operator=(iterator_facade const&)
+ {
+ return *this;
+ }
+# endif
+ };
+
+# if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ template <class I, class V, class TC, class R, class D>
+ inline typename detail::postfix_increment_result<I,V,R,TC>::type
+ operator++(
+ iterator_facade<I,V,TC,R,D>& i
+ , int
+ )
+ {
+ typename detail::postfix_increment_result<I,V,R,TC>::type
+ tmp(*static_cast<I*>(&i));
+
+ ++i;
+
+ return tmp;
+ }
+# endif
+
+
+ //
+ // Comparison operator implementation. The library supplied operators
+ // enables the user to provide fully interoperable constant/mutable
+ // iterator types. I.e. the library provides all operators
+ // for all mutable/constant iterator combinations.
+ //
+ // Note though that this kind of interoperability for constant/mutable
+ // iterators is not required by the standard for container iterators.
+ // All the standard asks for is a conversion mutable -> constant.
+ // Most standard library implementations nowadays provide fully interoperable
+ // iterator implementations, but there are still heavily used implementations
+ // that do not provide them. (Actually it's even worse, they do not provide
+ // them for only a few iterators.)
+ //
+ // ?? Maybe a BOOST_ITERATOR_NO_FULL_INTEROPERABILITY macro should
+ // enable the user to turn off mixed type operators
+ //
+ // The library takes care to provide only the right operator overloads.
+ // I.e.
+ //
+ // bool operator==(Iterator, Iterator);
+ // bool operator==(ConstIterator, Iterator);
+ // bool operator==(Iterator, ConstIterator);
+ // bool operator==(ConstIterator, ConstIterator);
+ //
+ // ...
+ //
+ // In order to do so it uses c++ idioms that are not yet widely supported
+ // by current compiler releases. The library is designed to degrade gracefully
+ // in the face of compiler deficiencies. In general compiler
+ // deficiencies result in less strict error checking and more obscure
+ // error messages, functionality is not affected.
+ //
+ // For full operation compiler support for "Substitution Failure Is Not An Error"
+ // (aka. enable_if) and boost::is_convertible is required.
+ //
+ // The following problems occur if support is lacking.
+ //
+ // Pseudo code
+ //
+ // ---------------
+ // AdaptorA<Iterator1> a1;
+ // AdaptorA<Iterator2> a2;
+ //
+ // // This will result in a no such overload error in full operation
+ // // If enable_if or is_convertible is not supported
+ // // The instantiation will fail with an error hopefully indicating that
+ // // there is no operator== for Iterator1, Iterator2
+ // // The same will happen if no enable_if is used to remove
+ // // false overloads from the templated conversion constructor
+ // // of AdaptorA.
+ //
+ // a1 == a2;
+ // ----------------
+ //
+ // AdaptorA<Iterator> a;
+ // AdaptorB<Iterator> b;
+ //
+ // // This will result in a no such overload error in full operation
+ // // If enable_if is not supported the static assert used
+ // // in the operator implementation will fail.
+ // // This will accidently work if is_convertible is not supported.
+ //
+ // a == b;
+ // ----------------
+ //
+
+# ifdef BOOST_NO_ONE_WAY_ITERATOR_INTEROP
+# define BOOST_ITERATOR_CONVERTIBLE(a,b) mpl::true_()
+# else
+# define BOOST_ITERATOR_CONVERTIBLE(a,b) is_convertible<a,b>()
+# endif
+
+# define BOOST_ITERATOR_FACADE_INTEROP(op, result_type, return_prefix, base_op) \
+ BOOST_ITERATOR_FACADE_INTEROP_HEAD(inline, op, result_type) \
+ { \
+ /* For those compilers that do not support enable_if */ \
+ BOOST_STATIC_ASSERT(( \
+ is_interoperable< Derived1, Derived2 >::value \
+ )); \
+ return_prefix iterator_core_access::base_op( \
+ *static_cast<Derived1 const*>(&lhs) \
+ , *static_cast<Derived2 const*>(&rhs) \
+ , BOOST_ITERATOR_CONVERTIBLE(Derived2,Derived1) \
+ ); \
+ }
+
+# define BOOST_ITERATOR_FACADE_RELATION(op, return_prefix, base_op) \
+ BOOST_ITERATOR_FACADE_INTEROP( \
+ op \
+ , detail::always_bool2 \
+ , return_prefix \
+ , base_op \
+ )
+
+ BOOST_ITERATOR_FACADE_RELATION(==, return, equal)
+ BOOST_ITERATOR_FACADE_RELATION(!=, return !, equal)
+
+ BOOST_ITERATOR_FACADE_RELATION(<, return 0 >, distance_from)
+ BOOST_ITERATOR_FACADE_RELATION(>, return 0 <, distance_from)
+ BOOST_ITERATOR_FACADE_RELATION(<=, return 0 >=, distance_from)
+ BOOST_ITERATOR_FACADE_RELATION(>=, return 0 <=, distance_from)
+# undef BOOST_ITERATOR_FACADE_RELATION
+
+ // operator- requires an additional part in the static assertion
+ BOOST_ITERATOR_FACADE_INTEROP(
+ -
+ , detail::choose_difference_type
+ , return
+ , distance_from
+ )
+# undef BOOST_ITERATOR_FACADE_INTEROP
+# undef BOOST_ITERATOR_FACADE_INTEROP_HEAD
+
+# define BOOST_ITERATOR_FACADE_PLUS(args) \
+ BOOST_ITERATOR_FACADE_PLUS_HEAD(inline, args) \
+ { \
+ Derived tmp(static_cast<Derived const&>(i)); \
+ return tmp += n; \
+ }
+
+BOOST_ITERATOR_FACADE_PLUS((
+ iterator_facade<Derived, V, TC, R, D> const& i
+ , typename Derived::difference_type n
+))
+
+BOOST_ITERATOR_FACADE_PLUS((
+ typename Derived::difference_type n
+ , iterator_facade<Derived, V, TC, R, D> const& i
+))
+# undef BOOST_ITERATOR_FACADE_PLUS
+# undef BOOST_ITERATOR_FACADE_PLUS_HEAD
+
+} // namespace boost
+
+#include <boost/iterator/detail/config_undef.hpp>
+
+#endif // BOOST_ITERATOR_FACADE_23022003THW_HPP
diff --git a/boost/boost/iterator/iterator_traits.hpp b/boost/boost/iterator/iterator_traits.hpp
new file mode 100644
index 00000000000..1352710eda1
--- /dev/null
+++ b/boost/boost/iterator/iterator_traits.hpp
@@ -0,0 +1,92 @@
+// Copyright David Abrahams 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)
+#ifndef ITERATOR_TRAITS_DWA200347_HPP
+# define ITERATOR_TRAITS_DWA200347_HPP
+
+# include <boost/detail/iterator.hpp>
+# include <boost/detail/workaround.hpp>
+
+namespace boost {
+
+// Unfortunately, g++ 2.95.x chokes when we define a class template
+// iterator_category which has the same name as its
+// std::iterator_category() function, probably due in part to the
+// "std:: is visible globally" hack it uses. Use
+// BOOST_ITERATOR_CATEGORY to write code that's portable to older
+// GCCs.
+
+# if BOOST_WORKAROUND(__GNUC__, <= 2)
+# define BOOST_ITERATOR_CATEGORY iterator_category_
+# else
+# define BOOST_ITERATOR_CATEGORY iterator_category
+# endif
+
+
+template <class Iterator>
+struct iterator_value
+{
+ typedef typename detail::iterator_traits<Iterator>::value_type type;
+};
+
+template <class Iterator>
+struct iterator_reference
+{
+ typedef typename detail::iterator_traits<Iterator>::reference type;
+};
+
+
+template <class Iterator>
+struct iterator_pointer
+{
+ typedef typename detail::iterator_traits<Iterator>::pointer type;
+};
+
+template <class Iterator>
+struct iterator_difference
+{
+ typedef typename detail::iterator_traits<Iterator>::difference_type type;
+};
+
+template <class Iterator>
+struct BOOST_ITERATOR_CATEGORY
+{
+ typedef typename detail::iterator_traits<Iterator>::iterator_category type;
+};
+
+# if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+template <>
+struct iterator_value<int>
+{
+ typedef void type;
+};
+
+template <>
+struct iterator_reference<int>
+{
+ typedef void type;
+};
+
+template <>
+struct iterator_pointer<int>
+{
+ typedef void type;
+};
+
+template <>
+struct iterator_difference<int>
+{
+ typedef void type;
+};
+
+template <>
+struct BOOST_ITERATOR_CATEGORY<int>
+{
+ typedef void type;
+};
+# endif
+
+} // namespace boost::iterator
+
+#endif // ITERATOR_TRAITS_DWA200347_HPP
diff --git a/boost/boost/iterator/new_iterator_tests.hpp b/boost/boost/iterator/new_iterator_tests.hpp
new file mode 100644
index 00000000000..caad700aef5
--- /dev/null
+++ b/boost/boost/iterator/new_iterator_tests.hpp
@@ -0,0 +1,264 @@
+#ifndef BOOST_NEW_ITERATOR_TESTS_HPP
+# define BOOST_NEW_ITERATOR_TESTS_HPP
+
+//
+// Copyright (c) David Abrahams 2001.
+// Copyright (c) Jeremy Siek 2001-2003.
+// Copyright (c) Thomas Witt 2002.
+//
+// Use, modification and distribution is 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 is meant to be the beginnings of a comprehensive, generic
+// test suite for STL concepts such as iterators and containers.
+//
+// Revision History:
+// 28 Oct 2002 Started update for new iterator categories
+// (Jeremy Siek)
+// 28 Apr 2002 Fixed input iterator requirements.
+// For a == b a++ == b++ is no longer required.
+// See 24.1.1/3 for details.
+// (Thomas Witt)
+// 08 Feb 2001 Fixed bidirectional iterator test so that
+// --i is no longer a precondition.
+// (Jeremy Siek)
+// 04 Feb 2001 Added lvalue test, corrected preconditions
+// (David Abrahams)
+
+# include <iterator>
+# include <boost/type_traits.hpp>
+# include <boost/static_assert.hpp>
+# include <boost/concept_archetype.hpp> // for detail::dummy_constructor
+# include <boost/detail/iterator.hpp>
+# include <boost/pending/iterator_tests.hpp>
+# include <boost/iterator/is_readable_iterator.hpp>
+# include <boost/iterator/is_lvalue_iterator.hpp>
+
+# include <boost/iterator/detail/config_def.hpp>
+# include <boost/detail/is_incrementable.hpp>
+# include <boost/detail/lightweight_test.hpp>
+
+namespace boost {
+
+
+// Do separate tests for *i++ so we can treat, e.g., smart pointers,
+// as readable and/or writable iterators.
+template <class Iterator, class T>
+void readable_iterator_traversal_test(Iterator i1, T v, mpl::true_)
+{
+ T v2(*i1++);
+ BOOST_TEST(v == v2);
+}
+
+template <class Iterator, class T>
+void readable_iterator_traversal_test(const Iterator i1, T v, mpl::false_)
+{}
+
+template <class Iterator, class T>
+void writable_iterator_traversal_test(Iterator i1, T v, mpl::true_)
+{
+ ++i1; // we just wrote into that position
+ *i1++ = v;
+ Iterator x(i1++);
+ (void)x;
+}
+
+template <class Iterator, class T>
+void writable_iterator_traversal_test(const Iterator i1, T v, mpl::false_)
+{}
+
+
+// Preconditions: *i == v
+template <class Iterator, class T>
+void readable_iterator_test(const Iterator i1, T v)
+{
+ Iterator i2(i1); // Copy Constructible
+ typedef typename detail::iterator_traits<Iterator>::reference ref_t;
+ ref_t r1 = *i1;
+ ref_t r2 = *i2;
+ T v1 = r1;
+ T v2 = r2;
+ BOOST_TEST(v1 == v);
+ BOOST_TEST(v2 == v);
+
+# if !BOOST_WORKAROUND(__MWERKS__, <= 0x2407)
+ readable_iterator_traversal_test(i1, v, detail::is_postfix_incrementable<Iterator>());
+
+ // I think we don't really need this as it checks the same things as
+ // the above code.
+ BOOST_STATIC_ASSERT(is_readable_iterator<Iterator>::value);
+# endif
+}
+
+template <class Iterator, class T>
+void writable_iterator_test(Iterator i, T v, T v2)
+{
+ Iterator i2(i); // Copy Constructible
+ *i2 = v;
+
+# if !BOOST_WORKAROUND(__MWERKS__, <= 0x2407)
+ writable_iterator_traversal_test(
+ i, v2, mpl::and_<
+ detail::is_incrementable<Iterator>
+ , detail::is_postfix_incrementable<Iterator>
+ >());
+# endif
+}
+
+template <class Iterator>
+void swappable_iterator_test(Iterator i, Iterator j)
+{
+ Iterator i2(i), j2(j);
+ typename detail::iterator_traits<Iterator>::value_type bi = *i, bj = *j;
+ iter_swap(i2, j2);
+ typename detail::iterator_traits<Iterator>::value_type ai = *i, aj = *j;
+ BOOST_TEST(bi == aj && bj == ai);
+}
+
+template <class Iterator, class T>
+void constant_lvalue_iterator_test(Iterator i, T v1)
+{
+ Iterator i2(i);
+ typedef typename detail::iterator_traits<Iterator>::value_type value_type;
+ typedef typename detail::iterator_traits<Iterator>::reference reference;
+ BOOST_STATIC_ASSERT((is_same<const value_type&, reference>::value));
+ const T& v2 = *i2;
+ BOOST_TEST(v1 == v2);
+# ifndef BOOST_NO_LVALUE_RETURN_DETECTION
+ BOOST_STATIC_ASSERT(is_lvalue_iterator<Iterator>::value);
+ BOOST_STATIC_ASSERT(!is_non_const_lvalue_iterator<Iterator>::value);
+# endif
+}
+
+template <class Iterator, class T>
+void non_const_lvalue_iterator_test(Iterator i, T v1, T v2)
+{
+ Iterator i2(i);
+ typedef typename detail::iterator_traits<Iterator>::value_type value_type;
+ typedef typename detail::iterator_traits<Iterator>::reference reference;
+ BOOST_STATIC_ASSERT((is_same<value_type&, reference>::value));
+ T& v3 = *i2;
+ BOOST_TEST(v1 == v3);
+
+ // A non-const lvalue iterator is not neccessarily writable, but we
+ // are assuming the value_type is assignable here
+ *i = v2;
+
+ T& v4 = *i2;
+ BOOST_TEST(v2 == v4);
+# ifndef BOOST_NO_LVALUE_RETURN_DETECTION
+ BOOST_STATIC_ASSERT(is_lvalue_iterator<Iterator>::value);
+ BOOST_STATIC_ASSERT(is_non_const_lvalue_iterator<Iterator>::value);
+# endif
+}
+
+template <class Iterator, class T>
+void forward_readable_iterator_test(Iterator i, Iterator j, T val1, T val2)
+{
+ Iterator i2;
+ Iterator i3(i);
+ i2 = i;
+ BOOST_TEST(i2 == i3);
+ BOOST_TEST(i != j);
+ BOOST_TEST(i2 != j);
+ readable_iterator_test(i, val1);
+ readable_iterator_test(i2, val1);
+ readable_iterator_test(i3, val1);
+
+ BOOST_TEST(i == i2++);
+ BOOST_TEST(i != ++i3);
+
+ readable_iterator_test(i2, val2);
+ readable_iterator_test(i3, val2);
+
+ readable_iterator_test(i, val1);
+}
+
+template <class Iterator, class T>
+void forward_swappable_iterator_test(Iterator i, Iterator j, T val1, T val2)
+{
+ forward_readable_iterator_test(i, j, val1, val2);
+ Iterator i2 = i;
+ ++i2;
+ swappable_iterator_test(i, i2);
+}
+
+// bidirectional
+// Preconditions: *i == v1, *++i == v2
+template <class Iterator, class T>
+void bidirectional_readable_iterator_test(Iterator i, T v1, T v2)
+{
+ Iterator j(i);
+ ++j;
+ forward_readable_iterator_test(i, j, v1, v2);
+ ++i;
+
+ Iterator i1 = i, i2 = i;
+
+ BOOST_TEST(i == i1--);
+ BOOST_TEST(i != --i2);
+
+ readable_iterator_test(i, v2);
+ readable_iterator_test(i1, v1);
+ readable_iterator_test(i2, v1);
+
+ --i;
+ BOOST_TEST(i == i1);
+ BOOST_TEST(i == i2);
+ ++i1;
+ ++i2;
+
+ readable_iterator_test(i, v1);
+ readable_iterator_test(i1, v2);
+ readable_iterator_test(i2, v2);
+}
+
+// random access
+// Preconditions: [i,i+N) is a valid range
+template <class Iterator, class TrueVals>
+void random_access_readable_iterator_test(Iterator i, int N, TrueVals vals)
+{
+ bidirectional_readable_iterator_test(i, vals[0], vals[1]);
+ const Iterator j = i;
+ int c;
+
+ for (c = 0; c < N-1; ++c)
+ {
+ BOOST_TEST(i == j + c);
+ BOOST_TEST(*i == vals[c]);
+ typename detail::iterator_traits<Iterator>::value_type x = j[c];
+ BOOST_TEST(*i == x);
+ BOOST_TEST(*i == *(j + c));
+ BOOST_TEST(*i == *(c + j));
+ ++i;
+ BOOST_TEST(i > j);
+ BOOST_TEST(i >= j);
+ BOOST_TEST(j <= i);
+ BOOST_TEST(j < i);
+ }
+
+ Iterator k = j + N - 1;
+ for (c = 0; c < N-1; ++c)
+ {
+ BOOST_TEST(i == k - c);
+ BOOST_TEST(*i == vals[N - 1 - c]);
+ typename detail::iterator_traits<Iterator>::value_type x = j[N - 1 - c];
+ BOOST_TEST(*i == x);
+ Iterator q = k - c;
+ BOOST_TEST(*i == *q);
+ BOOST_TEST(i > j);
+ BOOST_TEST(i >= j);
+ BOOST_TEST(j <= i);
+ BOOST_TEST(j < i);
+ --i;
+ }
+}
+
+} // namespace boost
+
+# include <boost/iterator/detail/config_undef.hpp>
+
+#endif // BOOST_NEW_ITERATOR_TESTS_HPP
diff --git a/boost/boost/iterator/permutation_iterator.hpp b/boost/boost/iterator/permutation_iterator.hpp
new file mode 100644
index 00000000000..23d11986da4
--- /dev/null
+++ b/boost/boost/iterator/permutation_iterator.hpp
@@ -0,0 +1,72 @@
+// (C) Copyright Toon Knapen 2001.
+// (C) Copyright David Abrahams 2003.
+// (C) Copyright Roland Richter 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)
+
+#ifndef BOOST_PERMUTATION_ITERATOR_HPP
+#define BOOST_PERMUTATION_ITERATOR_HPP
+
+#include <iterator>
+
+#include <boost/iterator/iterator_adaptor.hpp>
+
+
+namespace boost
+{
+
+template< class ElementIterator
+ , class IndexIterator>
+class permutation_iterator
+ : public iterator_adaptor<
+ permutation_iterator<ElementIterator, IndexIterator>
+ , IndexIterator, typename detail::iterator_traits<ElementIterator>::value_type
+ , use_default, typename detail::iterator_traits<ElementIterator>::reference>
+{
+ typedef iterator_adaptor<
+ permutation_iterator<ElementIterator, IndexIterator>
+ , IndexIterator, typename detail::iterator_traits<ElementIterator>::value_type
+ , use_default, typename detail::iterator_traits<ElementIterator>::reference> super_t;
+
+ friend class iterator_core_access;
+
+public:
+ permutation_iterator() : m_elt_iter() {}
+
+ explicit permutation_iterator(ElementIterator x, IndexIterator y)
+ : super_t(y), m_elt_iter(x) {}
+
+ template<class OtherElementIterator, class OtherIndexIterator>
+ permutation_iterator(
+ permutation_iterator<OtherElementIterator, OtherIndexIterator> const& r
+ , typename enable_if_convertible<OtherElementIterator, ElementIterator>::type* = 0
+ , typename enable_if_convertible<OtherIndexIterator, IndexIterator>::type* = 0
+ )
+ : super_t(r.base()), m_elt_iter(r.m_elt_iter)
+ {}
+
+private:
+ typename super_t::reference dereference() const
+ { return *(m_elt_iter + *this->base()); }
+
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+ template <class,class> friend class permutation_iterator;
+#else
+ public:
+#endif
+ ElementIterator m_elt_iter;
+};
+
+
+template <class ElementIterator, class IndexIterator>
+permutation_iterator<ElementIterator, IndexIterator>
+make_permutation_iterator( ElementIterator e, IndexIterator i )
+{
+ return permutation_iterator<ElementIterator, IndexIterator>( e, i );
+}
+
+
+} // namespace boost
+
+#endif
diff --git a/boost/boost/iterator/reverse_iterator.hpp b/boost/boost/iterator/reverse_iterator.hpp
new file mode 100644
index 00000000000..97b6b4861d4
--- /dev/null
+++ b/boost/boost/iterator/reverse_iterator.hpp
@@ -0,0 +1,69 @@
+// (C) Copyright David Abrahams 2002.
+// (C) Copyright Jeremy Siek 2002.
+// (C) Copyright Thomas Witt 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)
+#ifndef BOOST_REVERSE_ITERATOR_23022003THW_HPP
+#define BOOST_REVERSE_ITERATOR_23022003THW_HPP
+
+#include <boost/iterator.hpp>
+#include <boost/utility.hpp>
+#include <boost/iterator/iterator_adaptor.hpp>
+
+namespace boost
+{
+
+ //
+ //
+ //
+ template <class Iterator>
+ class reverse_iterator
+ : public iterator_adaptor< reverse_iterator<Iterator>, Iterator >
+ {
+ typedef iterator_adaptor< reverse_iterator<Iterator>, Iterator > super_t;
+
+ friend class iterator_core_access;
+
+ public:
+ reverse_iterator() {}
+
+ explicit reverse_iterator(Iterator x)
+ : super_t(x) {}
+
+ template<class OtherIterator>
+ reverse_iterator(
+ reverse_iterator<OtherIterator> const& r
+ , typename enable_if_convertible<OtherIterator, Iterator>::type* = 0
+ )
+ : super_t(r.base())
+ {}
+
+ private:
+ typename super_t::reference dereference() const { return *boost::prior(this->base()); }
+
+ void increment() { --this->base_reference(); }
+ void decrement() { ++this->base_reference(); }
+
+ void advance(typename super_t::difference_type n)
+ {
+ this->base_reference() += -n;
+ }
+
+ template <class OtherIterator>
+ typename super_t::difference_type
+ distance_to(reverse_iterator<OtherIterator> const& y) const
+ {
+ return this->base_reference() - y.base();
+ }
+ };
+
+ template <class BidirectionalIterator>
+ reverse_iterator<BidirectionalIterator> make_reverse_iterator(BidirectionalIterator x)
+ {
+ return reverse_iterator<BidirectionalIterator>(x);
+ }
+
+} // namespace boost
+
+#endif // BOOST_REVERSE_ITERATOR_23022003THW_HPP
diff --git a/boost/boost/iterator/transform_iterator.hpp b/boost/boost/iterator/transform_iterator.hpp
new file mode 100644
index 00000000000..d6375271e00
--- /dev/null
+++ b/boost/boost/iterator/transform_iterator.hpp
@@ -0,0 +1,188 @@
+// (C) Copyright David Abrahams 2002.
+// (C) Copyright Jeremy Siek 2002.
+// (C) Copyright Thomas Witt 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)
+#ifndef BOOST_TRANSFORM_ITERATOR_23022003THW_HPP
+#define BOOST_TRANSFORM_ITERATOR_23022003THW_HPP
+
+#include <boost/function.hpp>
+#include <boost/iterator.hpp>
+#include <boost/iterator/detail/enable_if.hpp>
+#include <boost/iterator/iterator_adaptor.hpp>
+#include <boost/iterator/iterator_categories.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/type_traits/function_traits.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/is_class.hpp>
+#include <boost/type_traits/is_function.hpp>
+#include <boost/type_traits/is_reference.hpp>
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+
+#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1310))
+# include <boost/type_traits/is_base_and_derived.hpp>
+
+#endif
+#include <boost/iterator/detail/config_def.hpp>
+
+
+namespace boost
+{
+ template <class UnaryFunction, class Iterator, class Reference = use_default, class Value = use_default>
+ class transform_iterator;
+
+ namespace detail
+ {
+
+ template <class UnaryFunction>
+ struct function_object_result
+ {
+ typedef typename UnaryFunction::result_type type;
+ };
+
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ template <class Return, class Argument>
+ struct function_object_result<Return(*)(Argument)>
+ {
+ typedef Return type;
+ };
+#endif
+
+ // Compute the iterator_adaptor instantiation to be used for transform_iterator
+ template <class UnaryFunction, class Iterator, class Reference, class Value>
+ struct transform_iterator_base
+ {
+ private:
+ // By default, dereferencing the iterator yields the same as
+ // the function. Do we need to adjust the way
+ // function_object_result is computed for the standard
+ // proposal (e.g. using Doug's result_of)?
+ typedef typename ia_dflt_help<
+ Reference
+ , function_object_result<UnaryFunction>
+ >::type reference;
+
+ // To get the default for Value: remove any reference on the
+ // result type, but retain any constness to signal
+ // non-writability. Note that if we adopt Thomas' suggestion
+ // to key non-writability *only* on the Reference argument,
+ // we'd need to strip constness here as well.
+ typedef typename ia_dflt_help<
+ Value
+ , remove_reference<reference>
+ >::type cv_value_type;
+
+ public:
+ typedef iterator_adaptor<
+ transform_iterator<UnaryFunction, Iterator, Reference, Value>
+ , Iterator
+ , cv_value_type
+ , use_default // Leave the traversal category alone
+ , reference
+ > type;
+ };
+ }
+
+ template <class UnaryFunction, class Iterator, class Reference, class Value>
+ class transform_iterator
+ : public detail::transform_iterator_base<UnaryFunction, Iterator, Reference, Value>::type
+ {
+ typedef typename
+ detail::transform_iterator_base<UnaryFunction, Iterator, Reference, Value>::type
+ super_t;
+
+ friend class iterator_core_access;
+
+ public:
+ transform_iterator() { }
+
+ transform_iterator(Iterator const& x, UnaryFunction f)
+ : super_t(x), m_f(f) { }
+
+ explicit transform_iterator(Iterator const& x)
+ : super_t(x)
+ {
+ // Pro8 is a little too aggressive about instantiating the
+ // body of this function.
+#if !BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003))
+ // don't provide this constructor if UnaryFunction is a
+ // function pointer type, since it will be 0. Too dangerous.
+ BOOST_STATIC_ASSERT(is_class<UnaryFunction>::value);
+#endif
+ }
+
+ template<
+ class OtherUnaryFunction
+ , class OtherIterator
+ , class OtherReference
+ , class OtherValue>
+ transform_iterator(
+ transform_iterator<OtherUnaryFunction, OtherIterator, OtherReference, OtherValue> const& t
+ , typename enable_if_convertible<OtherIterator, Iterator>::type* = 0
+#if !BOOST_WORKAROUND(BOOST_MSVC, == 1310)
+ , typename enable_if_convertible<OtherUnaryFunction, UnaryFunction>::type* = 0
+#endif
+ )
+ : super_t(t.base()), m_f(t.functor())
+ {}
+
+ UnaryFunction functor() const
+ { return m_f; }
+
+ private:
+ typename super_t::reference dereference() const
+ { return m_f(*this->base()); }
+
+ // Probably should be the initial base class so it can be
+ // optimized away via EBO if it is an empty class.
+ UnaryFunction m_f;
+ };
+
+ template <class UnaryFunction, class Iterator>
+ transform_iterator<UnaryFunction, Iterator>
+ make_transform_iterator(Iterator it, UnaryFunction fun)
+ {
+ return transform_iterator<UnaryFunction, Iterator>(it, fun);
+ }
+
+ // Version which allows explicit specification of the UnaryFunction
+ // type.
+ //
+ // This generator is not provided if UnaryFunction is a function
+ // pointer type, because it's too dangerous: the default-constructed
+ // function pointer in the iterator be 0, leading to a runtime
+ // crash.
+ template <class UnaryFunction, class Iterator>
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+ typename mpl::if_<
+#else
+ typename iterators::enable_if<
+#endif
+ is_class<UnaryFunction> // We should probably find a cheaper test than is_class<>
+ , transform_iterator<UnaryFunction, Iterator>
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+ , int[3]
+#endif
+ >::type
+ make_transform_iterator(Iterator it)
+ {
+ return transform_iterator<UnaryFunction, Iterator>(it, UnaryFunction());
+ }
+
+#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION ) && !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
+ template <class Return, class Argument, class Iterator>
+ transform_iterator< Return (*)(Argument), Iterator, Return>
+ make_transform_iterator(Iterator it, Return (*fun)(Argument))
+ {
+ return transform_iterator<Return (*)(Argument), Iterator, Return>(it, fun);
+ }
+#endif
+
+} // namespace boost
+
+#include <boost/iterator/detail/config_undef.hpp>
+
+#endif // BOOST_TRANSFORM_ITERATOR_23022003THW_HPP
diff --git a/boost/boost/iterator/zip_iterator.hpp b/boost/boost/iterator/zip_iterator.hpp
new file mode 100644
index 00000000000..f3896ad9551
--- /dev/null
+++ b/boost/boost/iterator/zip_iterator.hpp
@@ -0,0 +1,585 @@
+// Copyright David Abrahams and Thomas Becker 2000-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)
+
+#ifndef BOOST_ZIP_ITERATOR_TMB_07_13_2003_HPP_
+# define BOOST_ZIP_ITERATOR_TMB_07_13_2003_HPP_
+
+#include <stddef.h>
+#include <boost/iterator.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+#include <boost/iterator/iterator_facade.hpp>
+#include <boost/iterator/iterator_adaptor.hpp> // for enable_if_convertible
+#include <boost/iterator/iterator_categories.hpp>
+#include <boost/detail/iterator.hpp>
+
+#include <boost/iterator/detail/minimum_category.hpp>
+
+#include <boost/tuple/tuple.hpp>
+
+#include <boost/type_traits/is_same.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/apply.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/lambda.hpp>
+#include <boost/mpl/placeholders.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+namespace boost {
+
+ // Zip iterator forward declaration for zip_iterator_base
+ template<typename IteratorTuple>
+ class zip_iterator;
+
+ // One important design goal of the zip_iterator is to isolate all
+ // functionality whose implementation relies on the current tuple
+ // implementation. This goal has been achieved as follows: Inside
+ // the namespace detail there is a namespace tuple_impl_specific.
+ // This namespace encapsulates all functionality that is specific
+ // to the current Boost tuple implementation. More precisely, the
+ // namespace tuple_impl_specific provides the following tuple
+ // algorithms and meta-algorithms for the current Boost tuple
+ // implementation:
+ //
+ // tuple_meta_transform
+ // tuple_meta_accumulate
+ // tuple_transform
+ // tuple_for_each
+ //
+ // If the tuple implementation changes, all that needs to be
+ // replaced is the implementation of these four (meta-)algorithms.
+
+ namespace detail
+ {
+
+ // Functors to be used with tuple algorithms
+ //
+ template<typename DiffType>
+ class advance_iterator
+ {
+ public:
+ advance_iterator(DiffType step) : m_step(step) {}
+
+ template<typename Iterator>
+ void operator()(Iterator& it) const
+ { it += m_step; }
+
+ private:
+ DiffType m_step;
+ };
+ //
+ struct increment_iterator
+ {
+ template<typename Iterator>
+ void operator()(Iterator& it)
+ { ++it; }
+ };
+ //
+ struct decrement_iterator
+ {
+ template<typename Iterator>
+ void operator()(Iterator& it)
+ { --it; }
+ };
+ //
+ struct dereference_iterator
+ {
+ template<typename Iterator>
+ struct apply
+ {
+ typedef typename
+ iterator_traits<Iterator>::reference
+ type;
+ };
+
+ template<typename Iterator>
+ typename apply<Iterator>::type operator()(Iterator const& it)
+ { return *it; }
+ };
+
+
+ // The namespace tuple_impl_specific provides two meta-
+ // algorithms and two algorithms for tuples.
+ //
+ namespace tuple_impl_specific
+ {
+ // Meta-transform algorithm for tuples
+ //
+ template<typename Tuple, class UnaryMetaFun>
+ struct tuple_meta_transform;
+
+ template<typename Tuple, class UnaryMetaFun>
+ struct tuple_meta_transform_impl
+ {
+ typedef tuples::cons<
+ typename mpl::apply1<
+ typename mpl::lambda<UnaryMetaFun>::type
+ , typename Tuple::head_type
+ >::type
+ , typename tuple_meta_transform<
+ typename Tuple::tail_type
+ , UnaryMetaFun
+ >::type
+ > type;
+ };
+
+ template<typename Tuple, class UnaryMetaFun>
+ struct tuple_meta_transform
+ : mpl::eval_if<
+ boost::is_same<Tuple, tuples::null_type>
+ , mpl::identity<tuples::null_type>
+ , tuple_meta_transform_impl<Tuple, UnaryMetaFun>
+ >
+ {
+ };
+
+ // Meta-accumulate algorithm for tuples. Note: The template
+ // parameter StartType corresponds to the initial value in
+ // ordinary accumulation.
+ //
+ template<class Tuple, class BinaryMetaFun, class StartType>
+ struct tuple_meta_accumulate;
+
+ template<
+ typename Tuple
+ , class BinaryMetaFun
+ , typename StartType
+ >
+ struct tuple_meta_accumulate_impl
+ {
+ typedef typename mpl::apply2<
+ typename mpl::lambda<BinaryMetaFun>::type
+ , typename Tuple::head_type
+ , typename tuple_meta_accumulate<
+ typename Tuple::tail_type
+ , BinaryMetaFun
+ , StartType
+ >::type
+ >::type type;
+ };
+
+ template<
+ typename Tuple
+ , class BinaryMetaFun
+ , typename StartType
+ >
+ struct tuple_meta_accumulate
+ : mpl::eval_if<
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ mpl::or_<
+#endif
+ boost::is_same<Tuple, tuples::null_type>
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ , boost::is_same<Tuple,int>
+ >
+#endif
+ , mpl::identity<StartType>
+ , tuple_meta_accumulate_impl<
+ Tuple
+ , BinaryMetaFun
+ , StartType
+ >
+ >
+ {
+ };
+
+#if defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \
+ || ( \
+ BOOST_WORKAROUND(BOOST_INTEL_CXX_VERSION, != 0) && defined(_MSC_VER) \
+ )
+// Not sure why intel's partial ordering fails in this case, but I'm
+// assuming int's an MSVC bug-compatibility feature.
+
+# define BOOST_TUPLE_ALGO_DISPATCH
+# define BOOST_TUPLE_ALGO(algo) algo##_impl
+# define BOOST_TUPLE_ALGO_TERMINATOR , int
+# define BOOST_TUPLE_ALGO_RECURSE , ...
+#else
+# define BOOST_TUPLE_ALGO(algo) algo
+# define BOOST_TUPLE_ALGO_TERMINATOR
+# define BOOST_TUPLE_ALGO_RECURSE
+#endif
+
+ // transform algorithm for tuples. The template parameter Fun
+ // must be a unary functor which is also a unary metafunction
+ // class that computes its return type based on its argument
+ // type. For example:
+ //
+ // struct to_ptr
+ // {
+ // template <class Arg>
+ // struct apply
+ // {
+ // typedef Arg* type;
+ // }
+ //
+ // template <class Arg>
+ // Arg* operator()(Arg x);
+ // };
+ template<typename Fun>
+ tuples::null_type BOOST_TUPLE_ALGO(tuple_transform)
+ (tuples::null_type const&, Fun BOOST_TUPLE_ALGO_TERMINATOR)
+ { return tuples::null_type(); }
+
+ template<typename Tuple, typename Fun>
+ typename tuple_meta_transform<
+ Tuple
+ , Fun
+ >::type
+
+ BOOST_TUPLE_ALGO(tuple_transform)(
+ const Tuple& t,
+ Fun f
+ BOOST_TUPLE_ALGO_RECURSE
+ )
+ {
+ typedef typename tuple_meta_transform<
+ BOOST_DEDUCED_TYPENAME Tuple::tail_type
+ , Fun
+ >::type transformed_tail_type;
+
+ return tuples::cons<
+ BOOST_DEDUCED_TYPENAME mpl::apply1<
+ Fun, BOOST_DEDUCED_TYPENAME Tuple::head_type
+ >::type
+ , transformed_tail_type
+ >(
+ f(boost::tuples::get<0>(t)), tuple_transform(t.get_tail(), f)
+ );
+ }
+
+#ifdef BOOST_TUPLE_ALGO_DISPATCH
+ template<typename Tuple, typename Fun>
+ typename tuple_meta_transform<
+ Tuple
+ , Fun
+ >::type
+
+ tuple_transform(
+ const Tuple& t,
+ Fun f
+ )
+ {
+ return tuple_transform_impl(t, f, 1);
+ }
+#endif
+
+ // for_each algorithm for tuples.
+ //
+ template<typename Fun>
+ Fun BOOST_TUPLE_ALGO(tuple_for_each)(
+ tuples::null_type
+ , Fun f BOOST_TUPLE_ALGO_TERMINATOR
+ )
+ { return f; }
+
+
+ template<typename Tuple, typename Fun>
+ Fun BOOST_TUPLE_ALGO(tuple_for_each)(
+ Tuple& t
+ , Fun f BOOST_TUPLE_ALGO_RECURSE)
+ {
+ f( t.get_head() );
+ return tuple_for_each(t.get_tail(), f);
+ }
+
+#ifdef BOOST_TUPLE_ALGO_DISPATCH
+ template<typename Tuple, typename Fun>
+ Fun
+ tuple_for_each(
+ Tuple& t,
+ Fun f
+ )
+ {
+ return tuple_for_each_impl(t, f, 1);
+ }
+#endif
+
+ // Equality of tuples. NOTE: "==" for tuples currently (7/2003)
+ // has problems under some compilers, so I just do my own.
+ // No point in bringing in a bunch of #ifdefs here. This is
+ // going to go away with the next tuple implementation anyway.
+ //
+ inline bool tuple_equal(tuples::null_type, tuples::null_type)
+ { return true; }
+
+ template<typename Tuple1, typename Tuple2>
+ bool tuple_equal(
+ Tuple1 const& t1,
+ Tuple2 const& t2
+ )
+ {
+ return t1.get_head() == t2.get_head() &&
+ tuple_equal(t1.get_tail(), t2.get_tail());
+ }
+ }
+ //
+ // end namespace tuple_impl_specific
+
+ template<typename Iterator>
+ struct iterator_reference
+ {
+ typedef typename iterator_traits<Iterator>::reference type;
+ };
+
+#ifdef BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT
+ // Hack because BOOST_MPL_AUX_LAMBDA_SUPPORT doesn't seem to work
+ // out well. Instantiating the nested apply template also
+ // requires instantiating iterator_traits on the
+ // placeholder. Instead we just specialize it as a metafunction
+ // class.
+ template<>
+ struct iterator_reference<mpl::_1>
+ {
+ template <class T>
+ struct apply : iterator_reference<T> {};
+ };
+#endif
+
+ // Metafunction to obtain the type of the tuple whose element types
+ // are the reference types of an iterator tuple.
+ //
+ template<typename IteratorTuple>
+ struct tuple_of_references
+ : tuple_impl_specific::tuple_meta_transform<
+ IteratorTuple,
+ iterator_reference<mpl::_1>
+ >
+ {
+ };
+
+ // Metafunction to obtain the minimal traversal tag in a tuple
+ // of iterators.
+ //
+ template<typename IteratorTuple>
+ struct minimum_traversal_category_in_iterator_tuple
+ {
+ typedef typename tuple_impl_specific::tuple_meta_transform<
+ IteratorTuple
+ , iterator_traversal<>
+ >::type tuple_of_traversal_tags;
+
+ typedef typename tuple_impl_specific::tuple_meta_accumulate<
+ tuple_of_traversal_tags
+ , minimum_category<>
+ , random_access_traversal_tag
+ >::type type;
+ };
+
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) // ETI workaround
+ template <>
+ struct minimum_traversal_category_in_iterator_tuple<int>
+ {
+ typedef int type;
+ };
+#endif
+
+ // We need to call tuple_meta_accumulate with mpl::and_ as the
+ // accumulating functor. To this end, we need to wrap it into
+ // a struct that has exactly two arguments (that is, template
+ // parameters) and not five, like mpl::and_ does.
+ //
+ template<typename Arg1, typename Arg2>
+ struct and_with_two_args
+ : mpl::and_<Arg1, Arg2>
+ {
+ };
+
+# ifdef BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT
+ // Hack because BOOST_MPL_AUX_LAMBDA_SUPPORT doesn't seem to work
+ // out well. In this case I think it's an MPL bug
+ template<>
+ struct and_with_two_args<mpl::_1,mpl::_2>
+ {
+ template <class A1, class A2>
+ struct apply : mpl::and_<A1,A2>
+ {};
+ };
+# endif
+
+ ///////////////////////////////////////////////////////////////////
+ //
+ // Class zip_iterator_base
+ //
+ // Builds and exposes the iterator facade type from which the zip
+ // iterator will be derived.
+ //
+ template<typename IteratorTuple>
+ struct zip_iterator_base
+ {
+ private:
+ // Reference type is the type of the tuple obtained from the
+ // iterators' reference types.
+ typedef typename
+ detail::tuple_of_references<IteratorTuple>::type reference;
+
+ // Value type is the same as reference type.
+ typedef reference value_type;
+
+ // Difference type is the first iterator's difference type
+ typedef typename iterator_traits<
+ typename tuples::element<0, IteratorTuple>::type
+ >::difference_type difference_type;
+
+ // Traversal catetgory is the minimum traversal category in the
+ // iterator tuple.
+ typedef typename
+ detail::minimum_traversal_category_in_iterator_tuple<
+ IteratorTuple
+ >::type traversal_category;
+ public:
+
+ // The iterator facade type from which the zip iterator will
+ // be derived.
+ typedef iterator_facade<
+ zip_iterator<IteratorTuple>,
+ value_type,
+ traversal_category,
+ reference,
+ difference_type
+ > type;
+ };
+
+ template <>
+ struct zip_iterator_base<int>
+ {
+ typedef int type;
+ };
+ }
+
+ /////////////////////////////////////////////////////////////////////
+ //
+ // zip_iterator class definition
+ //
+ template<typename IteratorTuple>
+ class zip_iterator :
+ public detail::zip_iterator_base<IteratorTuple>::type
+ {
+
+ // Typedef super_t as our base class.
+ typedef typename
+ detail::zip_iterator_base<IteratorTuple>::type super_t;
+
+ // iterator_core_access is the iterator's best friend.
+ friend class iterator_core_access;
+
+ public:
+
+ // Construction
+ // ============
+
+ // Default constructor
+ zip_iterator() { }
+
+ // Constructor from iterator tuple
+ zip_iterator(IteratorTuple iterator_tuple)
+ : m_iterator_tuple(iterator_tuple)
+ { }
+
+ // Copy constructor
+ template<typename OtherIteratorTuple>
+ zip_iterator(
+ const zip_iterator<OtherIteratorTuple>& other,
+ typename enable_if_convertible<
+ OtherIteratorTuple,
+ IteratorTuple
+ >::type* = 0
+ ) : m_iterator_tuple(other.get_iterator_tuple())
+ {}
+
+ // Get method for the iterator tuple.
+ const IteratorTuple& get_iterator_tuple() const
+ { return m_iterator_tuple; }
+
+ private:
+
+ // Implementation of Iterator Operations
+ // =====================================
+
+ // Dereferencing returns a tuple built from the dereferenced
+ // iterators in the iterator tuple.
+ typename super_t::reference dereference() const
+ {
+ return detail::tuple_impl_specific::tuple_transform(
+ get_iterator_tuple(),
+ detail::dereference_iterator()
+ );
+ }
+
+ // Two zip iterators are equal if all iterators in the iterator
+ // tuple are equal. NOTE: It should be possible to implement this
+ // as
+ //
+ // return get_iterator_tuple() == other.get_iterator_tuple();
+ //
+ // but equality of tuples currently (7/2003) does not compile
+ // under several compilers. No point in bringing in a bunch
+ // of #ifdefs here.
+ //
+ template<typename OtherIteratorTuple>
+ bool equal(const zip_iterator<OtherIteratorTuple>& other) const
+ {
+ return detail::tuple_impl_specific::tuple_equal(
+ get_iterator_tuple(),
+ other.get_iterator_tuple()
+ );
+ }
+
+ // Advancing a zip iterator means to advance all iterators in the
+ // iterator tuple.
+ void advance(typename super_t::difference_type n)
+ {
+ detail::tuple_impl_specific::tuple_for_each(
+ m_iterator_tuple,
+ detail::advance_iterator<BOOST_DEDUCED_TYPENAME super_t::difference_type>(n)
+ );
+ }
+ // Incrementing a zip iterator means to increment all iterators in
+ // the iterator tuple.
+ void increment()
+ {
+ detail::tuple_impl_specific::tuple_for_each(
+ m_iterator_tuple,
+ detail::increment_iterator()
+ );
+ }
+
+ // Decrementing a zip iterator means to decrement all iterators in
+ // the iterator tuple.
+ void decrement()
+ {
+ detail::tuple_impl_specific::tuple_for_each(
+ m_iterator_tuple,
+ detail::decrement_iterator()
+ );
+ }
+
+ // Distance is calculated using the first iterator in the tuple.
+ template<typename OtherIteratorTuple>
+ typename super_t::difference_type distance_to(
+ const zip_iterator<OtherIteratorTuple>& other
+ ) const
+ {
+ return boost::tuples::get<0>(other.get_iterator_tuple()) -
+ boost::tuples::get<0>(this->get_iterator_tuple());
+ }
+
+ // Data Members
+ // ============
+
+ // The iterator tuple.
+ IteratorTuple m_iterator_tuple;
+
+ };
+
+ // Make function for zip iterator
+ //
+ template<typename IteratorTuple>
+ zip_iterator<IteratorTuple>
+ make_zip_iterator(IteratorTuple t)
+ { return zip_iterator<IteratorTuple>(t); }
+
+}
+
+#endif
diff --git a/boost/boost/iterator_adaptors.hpp b/boost/boost/iterator_adaptors.hpp
new file mode 100644
index 00000000000..7058153be06
--- /dev/null
+++ b/boost/boost/iterator_adaptors.hpp
@@ -0,0 +1,10 @@
+// Copyright David Abrahams 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)
+#ifndef ITERATOR_ADAPTORS_DWA2004725_HPP
+# define ITERATOR_ADAPTORS_DWA2004725_HPP
+
+#define BOOST_ITERATOR_ADAPTORS_VERSION 0x0200
+#include <boost/iterator/iterator_adaptor.hpp>
+
+#endif // ITERATOR_ADAPTORS_DWA2004725_HPP
diff --git a/boost/boost/lambda/algorithm.hpp b/boost/boost/lambda/algorithm.hpp
new file mode 100644
index 00000000000..122942b7c8c
--- /dev/null
+++ b/boost/boost/lambda/algorithm.hpp
@@ -0,0 +1,1377 @@
+// -- algorithm.hpp -- Boost Lambda Library -----------------------------------
+// Copyright (C) 2002 Jaakko Järvi (jaakko.jarvi@cs.utu.fi)
+// Copyright (C) 2002 Gary Powell (gwpowell@hotmail.com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org
+
+#ifndef BOOST_LAMBDA_ALGORITHM_HPP
+#define BOOST_LAMBDA_ALGORITHM_HPP
+
+#include "boost/lambda/core.hpp"
+
+#include <algorithm>
+#include <iterator> // for iterator_traits
+#include <utility> // for std::pair
+
+namespace boost {
+ namespace lambda {
+
+namespace ll {
+
+// for_each ---------------------------------
+
+struct for_each {
+
+ template <class Args>
+ struct sig {
+ typedef typename boost::remove_const<
+ typename boost::tuples::element<3, Args>::type
+ >::type type;
+ };
+
+ template <class A, class C>
+ C
+ operator()(A a, A b, C c) const
+ { return ::std::for_each(a, b, c); }
+};
+
+// find ---------------------------------
+
+struct find {
+
+ template <class Args>
+ struct sig {
+ typedef typename boost::remove_const<
+ typename boost::tuples::element<1, Args>::type
+ >::type type;
+ };
+
+ template <class A, class C>
+ A
+ operator()(A a, A b, const C& c) const
+ { return ::std::find(a, b, c); }
+};
+
+
+// find_if ---------------------------------
+
+struct find_if {
+
+ template <class Args>
+ struct sig {
+ typedef typename boost::remove_const<
+ typename boost::tuples::element<1, Args>::type
+ >::type type;
+ };
+
+ template <class A, class C>
+ A
+ operator()(A a, A b, C c) const
+ { return ::std::find_if(a, b, c); }
+};
+
+// find_end ---------------------------------
+
+struct find_end {
+
+ template <class Args>
+ struct sig {
+ typedef typename boost::remove_const<
+ typename boost::tuples::element<1, Args>::type
+ >::type type;
+ };
+
+ template <class A, class C>
+ A
+ operator()(A a, A b, C c, C d) const
+ { return ::std::find_end(a, b, c, d); }
+
+ template <class A, class C, class E>
+ A
+ operator()(A a, A b, C c, C d, E e) const
+ { return ::std::find_end(a, b, c, d, e); }
+
+};
+
+// find_first_of ---------------------------------
+
+struct find_first_of {
+
+ template <class Args>
+ struct sig {
+ typedef typename boost::remove_const<
+ typename boost::tuples::element<1, Args>::type
+ >::type type;
+ };
+
+ template <class A, class C>
+ A
+ operator()(A a, A b, C c, C d) const
+ { return ::std::find_first_of(a, b, c, d); }
+
+ template <class A, class C, class E>
+ A
+ operator()(A a, A b, C c, C d, E e) const
+ { return ::std::find_first_of(a, b, c, d, e); }
+
+};
+
+// adjacent_find ---------------------------------
+
+struct adjacent_find {
+
+ template <class Args>
+ struct sig {
+ typedef typename boost::remove_const<
+ typename boost::tuples::element<1, Args>::type
+ >::type type;
+ };
+
+ template <class A>
+ A
+ operator()(A a, A b) const
+ { return ::std::adjacent_find(a, b); }
+
+ template <class A, class C>
+ A
+ operator()(A a, A b, C c) const
+ { return ::std::adjacent_find(a, b, c); }
+
+};
+
+// count ---------------------------------
+
+struct count {
+
+ template <class Args>
+ struct sig {
+ typedef typename ::std::iterator_traits<
+ typename boost::remove_const<
+ typename boost::tuples::element<1, Args>::type
+ >::type
+ >::difference_type type;
+ };
+
+ template <class A, class C >
+ typename ::std::iterator_traits<A>::difference_type
+ operator()(A a, A b, const C& c) const
+ { return ::std::count(a, b, c); }
+};
+
+// count_if ---------------------------------
+
+struct count_if {
+
+ template <class Args>
+ struct sig {
+ typedef typename ::std::iterator_traits<
+ typename boost::remove_const<
+ typename boost::tuples::element<1, Args>::type
+ >::type
+ >::difference_type type;
+ };
+
+ template <class A, class C >
+ typename ::std::iterator_traits<A>::difference_type
+ operator()(A a, A b, C c) const
+ { return ::std::count_if(a, b, c); }
+};
+
+
+// mismatch ---------------------------------
+
+struct mismatch {
+
+ template <class Args>
+ struct sig {
+ typedef typename boost::remove_const<
+ typename boost::tuples::element<1, Args>::type
+ >::type element1_type;
+
+ typedef typename boost::remove_const<
+ typename boost::tuples::element<3, Args>::type
+ >::type element2_type;
+
+ typedef ::std::pair< element1_type, element2_type > type;
+ };
+
+ template <class A, class C >
+ ::std::pair<A,C>
+ operator()(A a, A b, C c) const
+ { return ::std::mismatch(a, b, c); }
+
+ template <class A, class C, class D>
+ ::std::pair<A,C>
+ operator()(A a, A b, C c, D d) const
+ { return ::std::mismatch(a, b, c, d); }
+
+};
+
+// equal ---------------------------------
+
+struct equal {
+
+ template <class Args>
+ struct sig {
+ typedef bool type;
+ };
+
+ template <class A, class C >
+ bool
+ operator()(A a, A b, C c) const
+ { return ::std::equal(a, b, c); }
+
+ template <class A, class C, class D>
+ bool
+ operator()(A a, A b, C c, D d) const
+ { return ::std::equal(a, b, c, d); }
+
+};
+
+// search --------------------------------
+
+struct search {
+
+ template <class Args>
+ struct sig {
+ typedef typename boost::remove_const<
+ typename boost::tuples::element<1, Args>::type
+ >::type type;
+ };
+
+ template <class A, class C>
+ A
+ operator()(A a, A b, C c, C d) const
+ { return std::search(a, b, c, d);}
+
+ template <class A, class C, class E>
+ A
+ operator()(A a, A b, C c, C d, E e) const
+ { return std::search(a, b, c, d, e);}
+
+};
+
+// copy ---------------------------------
+
+struct copy {
+
+ template <class Args>
+ struct sig {
+ typedef typename boost::remove_const<
+ typename boost::tuples::element<3, Args>::type
+ >::type type;
+ };
+
+ template <class A, class C>
+ C
+ operator()(A a, A b, C c) const
+ { return ::std::copy(a, b, c); }
+
+};
+
+// copy_backward ---------------------------------
+
+struct copy_backward {
+
+ template <class Args>
+ struct sig {
+ typedef typename boost::remove_const<
+ typename boost::tuples::element<3, Args>::type
+ >::type type;
+ };
+
+ template <class A, class C>
+ C
+ operator()(A a, A b, C c) const
+ { return ::std::copy_backward(a, b, c); }
+
+};
+
+// swap ---------------------------------
+
+struct swap {
+
+ template <class Args>
+ struct sig {
+ typedef void type;
+ };
+
+ template <class A>
+ void
+ operator()(A a, A b) const
+ { ::std::swap(a, b); }
+
+};
+
+// swap_ranges ---------------------------------
+
+struct swap_ranges {
+
+ template <class Args>
+ struct sig {
+ typedef typename boost::remove_const<
+ typename boost::tuples::element<3, Args>::type
+ >::type type;
+ };
+
+ template <class A, class C>
+ C
+ operator()(A a, A b, C c) const
+ { return ::std::swap_ranges(a, b, c); }
+
+};
+
+// iter_swap ---------------------------------
+
+struct iter_swap {
+
+ template <class Args>
+ struct sig {
+ typedef void type;
+ };
+
+ template <class A>
+ void
+ operator()(A a, A b) const
+ { ::std::iter_swap(a, b); }
+
+};
+
+
+// transform --------------------------------
+
+struct transform {
+
+ template <class Args>
+ struct sig {
+ typedef typename boost::remove_const<
+ typename boost::tuples::element<
+ boost::tuples::length<Args>::value - 2,
+ Args
+ >::type
+ >::type type;
+ };
+
+ template <class A, class C, class D>
+ C
+ operator()(A a, A b, C c, D d) const
+ { return std::transform(a, b, c, d);}
+
+ template <class A, class C, class D, class E>
+ D
+ operator()(A a, A b, C c, D d, E e) const
+ { return std::transform(a, b, c, d, e);}
+
+};
+
+// replace ---------------------------------
+
+struct replace {
+
+ template <class Args>
+ struct sig {
+ typedef void type;
+ };
+
+ template <class A, class C>
+ void
+ operator()(A a, A b, const C& c, const C& d) const
+ { ::std::replace(a, b, c, d); }
+
+};
+
+// replace_if ---------------------------------
+
+struct replace_if {
+
+ template <class Args>
+ struct sig {
+ typedef void type;
+ };
+
+ template <class A, class C, class D>
+ void
+ operator()(A a, A b, C c, const D& d) const
+ { ::std::replace_if(a, b, c, d); }
+
+};
+
+// replace_copy ---------------------------------
+
+struct replace_copy {
+
+ template <class Args>
+ struct sig {
+ typedef typename boost::remove_const<
+ typename boost::tuples::element<3, Args>::type
+ >::type type;
+ };
+
+ template <class A, class C, class D>
+ C
+ operator()(A a, A b, C c, const D& d, const D& e) const
+ { return ::std::replace_copy(a, b, c, d, e); }
+
+};
+
+// replace_copy_if ---------------------------------
+
+struct replace_copy_if {
+
+ template <class Args>
+ struct sig {
+ typedef typename boost::remove_const<
+ typename boost::tuples::element<3, Args>::type
+ >::type type;
+ };
+
+ template <class A, class C, class D, class E>
+ C
+ operator()(A a, A b, C c, D d, const E& e) const
+ { return ::std::replace_copy_if(a, b, c, d, e); }
+
+};
+
+// fill ---------------------------------
+
+struct fill {
+
+ template <class Args>
+ struct sig {
+ typedef void type;
+ };
+
+ template <class A, class C>
+ void
+ operator()(A a, A b, const C& c) const
+ { ::std::fill(a, b, c); }
+
+};
+
+// fill_n ---------------------------------
+
+struct fill_n {
+
+ template <class Args>
+ struct sig {
+ typedef void type;
+ };
+
+ template <class A, class B, class C>
+ void
+ operator()(A a, B b, const C& c) const
+ { ::std::fill_n(a, b, c); }
+
+};
+
+// generate ---------------------------------
+
+struct generate {
+
+ template <class Args>
+ struct sig {
+ typedef void type;
+ };
+
+ template <class A, class C>
+ void
+ operator()(A a, A b, C c) const
+ { ::std::generate(a, b, c); }
+
+};
+
+// generate_n ---------------------------------
+
+struct generate_n {
+
+ template <class Args>
+ struct sig {
+ typedef void type;
+ };
+
+ template <class A, class B, class C>
+ void
+ operator()(A a, B b, C c) const
+ { ::std::generate_n(a, b, c); }
+
+};
+
+// remove ---------------------------------
+
+struct remove {
+
+ template <class Args>
+ struct sig {
+ typedef typename boost::remove_const<
+ typename boost::tuples::element<1, Args>::type
+ >::type type;
+ };
+
+ template <class A, class C >
+ A
+ operator()(A a, A b, const C& c) const
+ { return ::std::remove(a, b, c); }
+};
+
+// remove_if ---------------------------------
+
+struct remove_if {
+
+ template <class Args>
+ struct sig {
+ typedef typename boost::remove_const<
+ typename boost::tuples::element<1, Args>::type
+ >::type type;
+ };
+
+ template <class A, class C >
+ A
+ operator()(A a, A b, C c) const
+ { return ::std::remove_if(a, b, c); }
+};
+
+// remove_copy ---------------------------------
+
+struct remove_copy {
+
+ template <class Args>
+ struct sig {
+ typedef typename boost::remove_const<
+ typename boost::tuples::element<3, Args>::type
+ >::type type;
+ };
+
+ template <class A, class C, class D >
+ C
+ operator()(A a, A b, C c, const D& d) const
+ { return ::std::remove_copy(a, b, c, d); }
+};
+
+// remove_copy_if ---------------------------------
+
+struct remove_copy_if {
+
+ template <class Args>
+ struct sig {
+ typedef typename boost::remove_const<
+ typename boost::tuples::element<3, Args>::type
+ >::type type;
+ };
+
+ template <class A, class C, class D >
+ C
+ operator()(A a, A b, C c, D d) const
+ { return ::std::remove_copy_if(a, b, c, d); }
+};
+
+// unique ---------------------------------
+
+struct unique {
+
+ template <class Args>
+ struct sig {
+ typedef typename boost::remove_const<
+ typename boost::tuples::element<1, Args>::type
+ >::type type;
+ };
+
+ template <class A>
+ A
+ operator()(A a, A b) const
+ { return ::std::unique(a, b); }
+
+ template <class A, class C>
+ A
+ operator()(A a, A b, C c) const
+ { return ::std::unique(a, b, c); }
+
+};
+
+// unique_copy ---------------------------------
+
+struct unique_copy {
+
+ template <class Args>
+ struct sig {
+ typedef typename boost::remove_const<
+ typename boost::tuples::element<3, Args>::type
+ >::type type;
+ };
+
+ template <class A, class C >
+ C
+ operator()(A a, A b, C c) const
+ { return ::std::unique_copy(a, b, c); }
+
+ template <class A, class C, class D>
+ C
+ operator()(A a, A b, C c, D d) const
+ { return ::std::unique_copy(a, b, c, d); }
+
+};
+
+// reverse ---------------------------------
+
+struct reverse {
+
+ template <class Args>
+ struct sig {
+ typedef void type;
+ };
+
+ template <class A>
+ void
+ operator()(A a, A b) const
+ { ::std::reverse(a, b); }
+
+};
+
+// reverse_copy ---------------------------------
+
+struct reverse_copy {
+
+ template <class Args>
+ struct sig {
+ typedef typename boost::remove_const<
+ typename boost::tuples::element<3, Args>::type
+ >::type type;
+ };
+
+ template <class A, class C >
+ C
+ operator()(A a, A b, C c) const
+ { return ::std::reverse_copy(a, b, c); }
+
+};
+
+// rotate ---------------------------------
+
+struct rotate {
+
+ template <class Args>
+ struct sig {
+ typedef void type;
+ };
+
+ template <class A>
+ void
+ operator()(A a, A b, A c) const
+ { ::std::rotate(a, b, c); }
+
+};
+
+// rotate_copy ---------------------------------
+
+struct rotate_copy {
+
+ template <class Args>
+ struct sig {
+ typedef typename boost::remove_const<
+ typename boost::tuples::element<3, Args>::type
+ >::type type;
+ };
+
+ template <class A, class D>
+ D
+ operator()(A a, A b, A c, D d) const
+ { return ::std::rotate_copy(a, b, c, d); }
+
+};
+
+// random_shuffle ---------------------------------
+
+struct random_shuffle {
+
+ template <class Args>
+ struct sig {
+ typedef void type;
+ };
+
+ template <class A>
+ void
+ operator()(A a, A b) const
+ { ::std::random_shuffle(a, b); }
+
+ template <class A, class C>
+ void
+ operator()(A a, A b, const C& c) const
+ { ::std::random_shuffle(a, b, c); }
+
+};
+
+
+// partition ---------------------------------
+
+struct partition {
+
+ template <class Args>
+ struct sig {
+ typedef typename boost::remove_const<
+ typename boost::tuples::element<1, Args>::type
+ >::type type;
+ };
+
+ template <class A, class C>
+ A
+ operator()(A a, A b, C c) const
+ { return ::std::partition(a, b, c); }
+
+};
+
+// stable_partition ---------------------------------
+
+struct stable_partition {
+
+ template <class Args>
+ struct sig {
+ typedef typename boost::remove_const<
+ typename boost::tuples::element<1, Args>::type
+ >::type type;
+ };
+
+ template <class A, class C>
+ A
+ operator()(A a, A b, C c) const
+ { return ::std::stable_partition(a, b, c); }
+
+};
+
+// sort ---------------------------------
+
+struct sort {
+
+ template <class Args>
+ struct sig {
+ typedef void type;
+ };
+
+ template <class A>
+ void
+ operator()(A a, A b) const
+ { ::std::sort(a, b); }
+
+ template <class A, class C>
+ void
+ operator()(A a, A b, C c) const
+ { ::std::sort(a, b, c); }
+
+};
+
+// stable_sort ---------------------------------
+
+struct stable_sort {
+
+ template <class Args>
+ struct sig {
+ typedef void type;
+ };
+
+ template <class A>
+ void
+ operator()(A a, A b) const
+ { ::std::stable_sort(a, b); }
+
+ template <class A, class C>
+ void
+ operator()(A a, A b, C c) const
+ { ::std::stable_sort(a, b, c); }
+
+};
+
+// partial_sort ---------------------------------
+
+struct partial_sort {
+
+ template <class Args>
+ struct sig {
+ typedef void type;
+ };
+
+ template <class A>
+ void
+ operator()(A a, A b, A c) const
+ { ::std::partial_sort(a, b, c); }
+
+ template <class A, class D>
+ void
+ operator()(A a, A b, A c, D d) const
+ { ::std::partial_sort(a, b, c, d); }
+
+};
+
+// partial_sort_copy ---------------------------------
+
+struct partial_sort_copy {
+
+ template <class Args>
+ struct sig {
+ typedef typename boost::remove_const<
+ typename boost::tuples::element<3, Args>::type
+ >::type type;
+ };
+
+ template <class A, class C>
+ C
+ operator()(A a, A b, C c, C d) const
+ { return ::std::partial_sort_copy(a, b, c, d); }
+
+ template <class A, class C, class E >
+ C
+ operator()(A a, A b, C c, C d, E e) const
+ { return ::std::partial_sort_copy(a, b, c, d, e); }
+};
+
+// nth_element ---------------------------------
+
+struct nth_element {
+
+ template <class Args>
+ struct sig {
+ typedef void type;
+ };
+
+ template <class A>
+ void
+ operator()(A a, A b, A c) const
+ { ::std::nth_element(a, b, c); }
+
+ template <class A, class D>
+ void
+ operator()(A a, A b, A c, D d) const
+ { ::std::nth_element(a, b, c, d); }
+
+};
+
+// lower_bound ---------------------------------
+
+struct lower_bound {
+
+ template <class Args>
+ struct sig {
+ typedef typename boost::remove_const<
+ typename boost::tuples::element<1, Args>::type
+ >::type type;
+ };
+
+ template <class A, class C>
+ A
+ operator()(A a, A b, const C& c) const
+ { return ::std::lower_bound(a, b, c); }
+
+ template <class A, class C, class D>
+ A
+ operator()(A a, A b, const C& c, D d) const
+ { return ::std::lower_bound(a, b, c, d); }
+
+};
+
+// upper_bound ---------------------------------
+
+struct upper_bound {
+
+ template <class Args>
+ struct sig {
+ typedef typename boost::remove_const<
+ typename boost::tuples::element<1, Args>::type
+ >::type type;
+ };
+
+ template <class A, class C>
+ A
+ operator()(A a, A b, const C& c) const
+ { return ::std::upper_bound(a, b, c); }
+
+ template <class A, class C, class D>
+ A
+ operator()(A a, A b, const C& c, D d) const
+ { return ::std::upper_bound(a, b, c, d); }
+
+};
+
+// equal_range ---------------------------------
+
+struct equal_range {
+
+ template <class Args>
+ struct sig {
+ typedef typename boost::remove_const<
+ typename boost::tuples::element<1, Args>::type
+ >::type element_type;
+
+ typedef ::std::pair< element_type, element_type > type;
+ };
+
+ template <class A, class C>
+ ::std::pair<A,A>
+ operator()(A a, A b, const C& c) const
+ { return ::std::equal_range(a, b, c); }
+
+ template <class A, class C, class D>
+ ::std::pair<A,A>
+ operator()(A a, A b, const C& c, D d) const
+ { return ::std::equal_range(a, b, c, d); }
+
+};
+
+// binary_search ---------------------------------
+
+struct binary_search {
+
+ template <class Args>
+ struct sig {
+ typedef bool type;
+ };
+
+ template <class A, class C >
+ bool
+ operator()(A a, A b, const C& c) const
+ { return ::std::binary_search(a, b, c); }
+
+ template <class A, class C, class D>
+ bool
+ operator()(A a, A b, const C& c, D d) const
+ { return ::std::binary_search(a, b, c, d); }
+
+};
+
+// merge --------------------------------
+
+struct merge {
+
+ template <class Args>
+ struct sig {
+ typedef typename boost::remove_const<
+ typename boost::tuples::element<5, Args>::type
+ >::type type;
+ };
+
+ template <class A, class C, class E>
+ E
+ operator()(A a, A b, C c, C d, E e) const
+ { return std::merge(a, b, c, d, e);}
+
+ template <class A, class C, class E, class F>
+ E
+ operator()(A a, A b, C c, C d, E e, F f) const
+ { return std::merge(a, b, c, d, e, f);}
+
+};
+
+// inplace_merge ---------------------------------
+
+struct inplace_merge {
+
+ template <class Args>
+ struct sig {
+ typedef void type;
+ };
+
+ template <class A>
+ void
+ operator()(A a, A b, A c) const
+ { ::std::inplace_merge(a, b, c); }
+
+ template <class A, class D>
+ void
+ operator()(A a, A b, A c, D d) const
+ { ::std::inplace_merge(a, b, c, d); }
+
+};
+
+// includes ---------------------------------
+
+struct includes {
+
+ template <class Args>
+ struct sig {
+ typedef bool type;
+ };
+
+ template <class A, class C>
+ bool
+ operator()(A a, A b, C c, C d) const
+ { return ::std::includes(a, b, c, d); }
+
+ template <class A, class C, class E>
+ bool
+ operator()(A a, A b, C c, C d, E e) const
+ { return ::std::includes(a, b, c, d, e); }
+
+};
+
+// set_union --------------------------------
+
+struct set_union {
+
+ template <class Args>
+ struct sig {
+ typedef typename boost::remove_const<
+ typename boost::tuples::element<5, Args>::type
+ >::type type;
+ };
+
+ template <class A, class C, class E>
+ E
+ operator()(A a, A b, C c, C d, E e) const
+ { return std::set_union(a, b, c, d, e);}
+
+ template <class A, class C, class E, class F>
+ E
+ operator()(A a, A b, C c, C d, E e, F f) const
+ { return std::set_union(a, b, c, d, e, f);}
+
+};
+
+// set_intersection --------------------------------
+
+struct set_intersection {
+
+ template <class Args>
+ struct sig {
+ typedef typename boost::remove_const<
+ typename boost::tuples::element<5, Args>::type
+ >::type type;
+ };
+
+ template <class A, class C, class E>
+ E
+ operator()(A a, A b, C c, C d, E e) const
+ { return std::set_intersection(a, b, c, d, e);}
+
+ template <class A, class C, class E, class F>
+ E
+ operator()(A a, A b, C c, C d, E e, F f) const
+ { return std::set_intersection(a, b, c, d, e, f);}
+
+};
+
+// set_difference --------------------------------
+
+struct set_difference {
+
+ template <class Args>
+ struct sig {
+ typedef typename boost::remove_const<
+ typename boost::tuples::element<5, Args>::type
+ >::type type;
+ };
+
+ template <class A, class C, class E>
+ E
+ operator()(A a, A b, C c, C d, E e) const
+ { return std::set_difference(a, b, c, d, e);}
+
+ template <class A, class C, class E, class F>
+ E
+ operator()(A a, A b, C c, C d, E e, F f) const
+ { return std::set_difference(a, b, c, d, e, f);}
+
+};
+
+
+// set_symmetric_difference --------------------------------
+
+struct set_symmetric_difference {
+
+ template <class Args>
+ struct sig {
+ typedef typename boost::remove_const<
+ typename boost::tuples::element<5, Args>::type
+ >::type type;
+ };
+
+ template <class A, class C, class E>
+ E
+ operator()(A a, A b, C c, C d, E e) const
+ { return std::set_symmetric_difference(a, b, c, d, e);}
+
+ template <class A, class C, class E, class F>
+ E
+ operator()(A a, A b, C c, C d, E e, F f) const
+ { return std::set_symmetric_difference(a, b, c, d, e, f);}
+
+};
+
+// push_heap ---------------------------------
+
+struct push_heap {
+
+ template <class Args>
+ struct sig {
+ typedef void type;
+ };
+
+ template <class A>
+ void
+ operator()(A a, A b) const
+ { ::std::push_heap(a, b); }
+
+ template <class A, class C>
+ void
+ operator()(A a, A b, C c) const
+ { ::std::push_heap(a, b, c); }
+
+};
+
+// pop_heap ---------------------------------
+
+struct pop_heap {
+
+ template <class Args>
+ struct sig {
+ typedef void type;
+ };
+
+ template <class A>
+ void
+ operator()(A a, A b) const
+ { ::std::pop_heap(a, b); }
+
+ template <class A, class C>
+ void
+ operator()(A a, A b, C c) const
+ { ::std::pop_heap(a, b, c); }
+
+};
+
+
+// make_heap ---------------------------------
+
+struct make_heap {
+
+ template <class Args>
+ struct sig {
+ typedef void type;
+ };
+
+ template <class A>
+ void
+ operator()(A a, A b) const
+ { ::std::make_heap(a, b); }
+
+ template <class A, class C>
+ void
+ operator()(A a, A b, C c) const
+ { ::std::make_heap(a, b, c); }
+
+};
+
+// sort_heap ---------------------------------
+
+struct sort_heap {
+
+ template <class Args>
+ struct sig {
+ typedef void type;
+ };
+
+ template <class A>
+ void
+ operator()(A a, A b) const
+ { ::std::sort_heap(a, b); }
+
+ template <class A, class C>
+ void
+ operator()(A a, A b, C c) const
+ { ::std::sort_heap(a, b, c); }
+
+};
+
+// min ---------------------------------
+
+struct min {
+
+ template <class Args>
+ struct sig {
+ typedef typename boost::remove_const<
+ typename boost::tuples::element<1, Args>::type
+ >::type type;
+ };
+
+ template <class A>
+ A
+ operator()(const A& a, const A& b) const
+ { return (::std::min)(a, b); }
+
+ template <class A, class C>
+ A
+ operator()(const A& a, const A& b, C c) const
+ { return (::std::min)(a, b, c); }
+
+};
+
+// max ---------------------------------
+
+struct max {
+
+ template <class Args>
+ struct sig {
+ typedef typename boost::remove_const<
+ typename boost::tuples::element<1, Args>::type
+ >::type type;
+ };
+
+ template <class A>
+ A
+ operator()(const A& a, const A& b) const
+ { return (::std::max)(a, b); }
+
+ template <class A, class C>
+ A
+ operator()(const A& a, const A& b, C c) const
+ { return (::std::max)(a, b, c); }
+
+};
+
+struct min_element {
+
+ template <class Args>
+ struct sig {
+ typedef typename boost::remove_const<
+ typename boost::tuples::element<1, Args>::type
+ >::type type;
+ };
+
+ template <class A>
+ A
+ operator()(A a, A b) const
+ { return ::std::min_element(a, b); }
+
+ template <class A, class C>
+ A
+ operator()(A a, A b, C c) const
+ { return ::std::min_element(a, b, c); }
+
+};
+
+// max_element ---------------------------------
+
+struct max_element {
+
+ template <class Args>
+ struct sig {
+ typedef typename boost::remove_const<
+ typename boost::tuples::element<1, Args>::type
+ >::type type;
+ };
+
+ template <class A>
+ A
+ operator()(A a, A b) const
+ { return ::std::max_element(a, b); }
+
+ template <class A, class C>
+ A
+ operator()(A a, A b, C c) const
+ { return ::std::max_element(a, b, c); }
+
+};
+
+
+// lexicographical_compare ---------------------------------
+
+struct lexicographical_compare {
+
+ template <class Args>
+ struct sig {
+ typedef bool type;
+ };
+
+ template <class A, class C>
+ bool
+ operator()(A a, A b, C c, C d) const
+ { return ::std::lexicographical_compare(a, b, c, d); }
+
+ template <class A, class C, class E>
+ bool
+ operator()(A a, A b, C c, C d, E e) const
+ { return ::std::lexicographical_compare(a, b, c, d, e); }
+
+};
+
+// next_permutation ---------------------------------
+
+struct next_permutation {
+
+ template <class Args>
+ struct sig {
+ typedef bool type;
+ };
+
+ template <class A>
+ bool
+ operator()(A a, A b) const
+ { return ::std::next_permutation(a, b); }
+
+ template <class A, class C >
+ bool
+ operator()(A a, A b, C c) const
+ { return ::std::next_permutation(a, b, c); }
+
+};
+
+// prev_permutation ---------------------------------
+
+struct prev_permutation {
+
+ template <class Args>
+ struct sig {
+ typedef bool type;
+ };
+
+ template <class A>
+ bool
+ operator()(A a, A b) const
+ { return ::std::prev_permutation(a, b); }
+
+ template <class A, class C >
+ bool
+ operator()(A a, A b, C c) const
+ { return ::std::prev_permutation(a, b, c); }
+
+};
+
+
+
+
+
+} // end of ll namespace
+
+// There is no good way to call an overloaded member function in a
+// lambda expression.
+// The macro below defines a function object class for calling a
+// const_iterator returning member function of a container.
+
+#define CALL_MEMBER(X) \
+struct call_##X { \
+template <class Args> \
+ struct sig { \
+ typedef typename boost::remove_const< \
+ typename boost::tuples::element<1, Args>::type \
+ >::type::const_iterator type; \
+ }; \
+ \
+ template<class T> \
+ typename T::const_iterator \
+ operator()(const T& t) const \
+ { \
+ return t.X(); \
+ } \
+};
+
+// create call_begin and call_end classes
+CALL_MEMBER(begin)
+CALL_MEMBER(end)
+
+#undef CALL_MEMBER
+
+} // end of lambda namespace
+} // end of boost namespace
+
+
+
+#endif
diff --git a/boost/boost/lambda/bind.hpp b/boost/boost/lambda/bind.hpp
new file mode 100644
index 00000000000..68da0b6c75f
--- /dev/null
+++ b/boost/boost/lambda/bind.hpp
@@ -0,0 +1,19 @@
+// -- bind.hpp -- Boost Lambda Library --------------------------------------
+
+// Copyright (C) 1999-2001 Jaakko Järvi (jaakko.jarvi@cs.utu.fi)
+// Gary Powell (gwpowell@hotmail.com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org
+
+#ifndef BOOST_LAMBDA_BIND_HPP
+#define BOOST_LAMBDA_BIND_HPP
+
+#include "boost/lambda/core.hpp"
+
+#include "boost/lambda/detail/bind_functions.hpp"
+
+#endif
diff --git a/boost/boost/lambda/casts.hpp b/boost/boost/lambda/casts.hpp
new file mode 100644
index 00000000000..cf4701c9d1e
--- /dev/null
+++ b/boost/boost/lambda/casts.hpp
@@ -0,0 +1,219 @@
+// - casts.hpp -- BLambda Library -------------
+//
+// Copyright (C) 2000 Gary Powell (powellg@amazon.com)
+// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi@cs.utu.fi)
+//
+// 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)
+//
+// For more information, see http://www.boost.org
+
+// -----------------------------------------------
+
+#if !defined(BOOST_LAMBDA_CASTS_HPP)
+#define BOOST_LAMBDA_CASTS_HPP
+
+#include <typeinfo>
+
+namespace boost {
+namespace lambda {
+
+template<class T> class cast_action;
+
+template<class T> class static_cast_action;
+template<class T> class dynamic_cast_action;
+template<class T> class const_cast_action;
+template<class T> class reinterpret_cast_action;
+
+class typeid_action;
+class sizeof_action;
+
+// Cast actions
+
+template<class T> class cast_action<static_cast_action<T> >
+{
+public:
+ template<class RET, class Arg1>
+ static RET apply(Arg1 &a1) {
+ return static_cast<RET>(a1);
+ }
+};
+
+template<class T> class cast_action<dynamic_cast_action<T> > {
+public:
+ template<class RET, class Arg1>
+ static RET apply(Arg1 &a1) {
+ return dynamic_cast<RET>(a1);
+ }
+};
+
+template<class T> class cast_action<const_cast_action<T> > {
+public:
+ template<class RET, class Arg1>
+ static RET apply(Arg1 &a1) {
+ return const_cast<RET>(a1);
+ }
+};
+
+template<class T> class cast_action<reinterpret_cast_action<T> > {
+public:
+ template<class RET, class Arg1>
+ static RET apply(Arg1 &a1) {
+ return reinterpret_cast<RET>(a1);
+ }
+};
+
+ // typedid action
+class typeid_action {
+public:
+ template<class RET, class Arg1>
+ static RET apply(Arg1 &a1) {
+ return typeid(a1);
+ }
+};
+
+// sizeof action
+class sizeof_action
+{
+public:
+ template<class RET, class Arg1>
+ static RET apply(Arg1 &a1) {
+ return sizeof(a1);
+ }
+};
+
+
+// return types of casting lambda_functors (all "T" type.)
+
+template<template <class> class cast_type, class T, class A>
+struct return_type_N<cast_action< cast_type<T> >, A> {
+ typedef T type;
+};
+
+// return type of typeid_action
+template<class A>
+struct return_type_N<typeid_action, A> {
+ typedef std::type_info const & type;
+};
+
+// return type of sizeof_action
+
+template<class A>
+struct return_type_N<sizeof_action, A> {
+ typedef std::size_t type;
+};
+
+
+// the four cast & typeid overloads.
+// casts can take ordinary variables (not just lambda functors)
+
+// static_cast
+template <class T, class Arg1>
+inline const lambda_functor<
+ lambda_functor_base<
+ action<1, cast_action<static_cast_action<T> > >,
+ tuple<typename const_copy_argument <const Arg1>::type>
+ >
+>
+ll_static_cast(const Arg1& a1) {
+ return
+ lambda_functor_base<
+ action<1, cast_action<static_cast_action<T> > >,
+ tuple<typename const_copy_argument <const Arg1>::type>
+ >
+ ( tuple<typename const_copy_argument <const Arg1>::type>(a1));
+}
+
+// dynamic_cast
+template <class T, class Arg1>
+inline const lambda_functor<
+ lambda_functor_base<
+ action<1, cast_action<dynamic_cast_action<T> > >,
+ tuple<typename const_copy_argument <const Arg1>::type>
+ >
+>
+ll_dynamic_cast(const Arg1& a1) {
+ return
+ lambda_functor_base<
+ action<1, cast_action<dynamic_cast_action<T> > >,
+ tuple<typename const_copy_argument <const Arg1>::type>
+ >
+ ( tuple<typename const_copy_argument <const Arg1>::type>(a1));
+}
+
+// const_cast
+template <class T, class Arg1>
+inline const lambda_functor<
+ lambda_functor_base<
+ action<1, cast_action<const_cast_action<T> > >,
+ tuple<typename const_copy_argument <const Arg1>::type>
+ >
+>
+ll_const_cast(const Arg1& a1) {
+ return
+ lambda_functor_base<
+ action<1, cast_action<const_cast_action<T> > >,
+ tuple<typename const_copy_argument <const Arg1>::type>
+ >
+ ( tuple<typename const_copy_argument <const Arg1>::type>(a1));
+}
+
+// reinterpret_cast
+template <class T, class Arg1>
+inline const lambda_functor<
+ lambda_functor_base<
+ action<1, cast_action<reinterpret_cast_action<T> > >,
+ tuple<typename const_copy_argument <const Arg1>::type>
+ >
+>
+ll_reinterpret_cast(const Arg1& a1) {
+ return
+ lambda_functor_base<
+ action<1, cast_action<reinterpret_cast_action<T> > >,
+ tuple<typename const_copy_argument <const Arg1>::type>
+ >
+ ( tuple<typename const_copy_argument <const Arg1>::type>(a1));
+}
+
+// typeid
+// can be applied to a normal variable as well (can refer to a polymorphic
+// class object)
+template <class Arg1>
+inline const lambda_functor<
+ lambda_functor_base<
+ action<1, typeid_action>,
+ tuple<typename const_copy_argument <const Arg1>::type>
+ >
+>
+ll_typeid(const Arg1& a1) {
+ return
+ lambda_functor_base<
+ action<1, typeid_action>,
+ tuple<typename const_copy_argument <const Arg1>::type>
+ >
+ ( tuple<typename const_copy_argument <const Arg1>::type>(a1));
+}
+
+// sizeof(expression)
+// Always takes a lambda expression (if not, built in sizeof will do)
+template <class Arg1>
+inline const lambda_functor<
+ lambda_functor_base<
+ action<1, sizeof_action>,
+ tuple<lambda_functor<Arg1> >
+ >
+>
+ll_sizeof(const lambda_functor<Arg1>& a1) {
+ return
+ lambda_functor_base<
+ action<1, sizeof_action>,
+ tuple<lambda_functor<Arg1> >
+ >
+ ( tuple<lambda_functor<Arg1> >(a1));
+}
+
+} // namespace lambda
+} // namespace boost
+
+#endif
diff --git a/boost/boost/lambda/closures.hpp b/boost/boost/lambda/closures.hpp
new file mode 100644
index 00000000000..a6a2b07b299
--- /dev/null
+++ b/boost/boost/lambda/closures.hpp
@@ -0,0 +1,274 @@
+/*=============================================================================
+ Adaptable closures
+
+ Phoenix V0.9
+ Copyright (c) 2001-2002 Joel de Guzman
+
+ Distributed under the Boost Software License, Version 1.0. (See
+ accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+
+ URL: http://spirit.sourceforge.net/
+
+==============================================================================*/
+#ifndef PHOENIX_CLOSURES_HPP
+#define PHOENIX_CLOSURES_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include "boost/lambda/core.hpp"
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace lambda {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Adaptable closures
+//
+// The framework will not be complete without some form of closures
+// support. Closures encapsulate a stack frame where local
+// variables are created upon entering a function and destructed
+// upon exiting. Closures provide an environment for local
+// variables to reside. Closures can hold heterogeneous types.
+//
+// Phoenix closures are true hardware stack based closures. At the
+// very least, closures enable true reentrancy in lambda functions.
+// A closure provides access to a function stack frame where local
+// variables reside. Modeled after Pascal nested stack frames,
+// closures can be nested just like nested functions where code in
+// inner closures may access local variables from in-scope outer
+// closures (accessing inner scopes from outer scopes is an error
+// and will cause a run-time assertion failure).
+//
+// There are three (3) interacting classes:
+//
+// 1) closure:
+//
+// At the point of declaration, a closure does not yet create a
+// stack frame nor instantiate any variables. A closure declaration
+// declares the types and names[note] of the local variables. The
+// closure class is meant to be subclassed. It is the
+// responsibility of a closure subclass to supply the names for
+// each of the local variable in the closure. Example:
+//
+// struct my_closure : closure<int, string, double> {
+//
+// member1 num; // names the 1st (int) local variable
+// member2 message; // names the 2nd (string) local variable
+// member3 real; // names the 3rd (double) local variable
+// };
+//
+// my_closure clos;
+//
+// Now that we have a closure 'clos', its local variables can be
+// accessed lazily using the dot notation. Each qualified local
+// variable can be used just like any primitive actor (see
+// primitives.hpp). Examples:
+//
+// clos.num = 30
+// clos.message = arg1
+// clos.real = clos.num * 1e6
+//
+// The examples above are lazily evaluated. As usual, these
+// expressions return composite actors that will be evaluated
+// through a second function call invocation (see operators.hpp).
+// Each of the members (clos.xxx) is an actor. As such, applying
+// the operator() will reveal its identity:
+//
+// clos.num() // will return the current value of clos.num
+//
+// *** [note] Acknowledgement: Juan Carlos Arevalo-Baeza (JCAB)
+// introduced and initilally implemented the closure member names
+// that uses the dot notation.
+//
+// 2) closure_member
+//
+// The named local variables of closure 'clos' above are actually
+// closure members. The closure_member class is an actor and
+// conforms to its conceptual interface. member1..memberN are
+// predefined typedefs that correspond to each of the listed types
+// in the closure template parameters.
+//
+// 3) closure_frame
+//
+// When a closure member is finally evaluated, it should refer to
+// an actual instance of the variable in the hardware stack.
+// Without doing so, the process is not complete and the evaluated
+// member will result to an assertion failure. Remember that the
+// closure is just a declaration. The local variables that a
+// closure refers to must still be instantiated.
+//
+// The closure_frame class does the actual instantiation of the
+// local variables and links these variables with the closure and
+// all its members. There can be multiple instances of
+// closure_frames typically situated in the stack inside a
+// function. Each closure_frame instance initiates a stack frame
+// with a new set of closure local variables. Example:
+//
+// void foo()
+// {
+// closure_frame<my_closure> frame(clos);
+// /* do something */
+// }
+//
+// where 'clos' is an instance of our closure 'my_closure' above.
+// Take note that the usage above precludes locally declared
+// classes. If my_closure is a locally declared type, we can still
+// use its self_type as a paramater to closure_frame:
+//
+// closure_frame<my_closure::self_type> frame(clos);
+//
+// Upon instantiation, the closure_frame links the local variables
+// to the closure. The previous link to another closure_frame
+// instance created before is saved. Upon destruction, the
+// closure_frame unlinks itself from the closure and relinks the
+// preceding closure_frame prior to this instance.
+//
+// The local variables in the closure 'clos' above is default
+// constructed in the stack inside function 'foo'. Once 'foo' is
+// exited, all of these local variables are destructed. In some
+// cases, default construction is not desirable and we need to
+// initialize the local closure variables with some values. This
+// can be done by passing in the initializers in a compatible
+// tuple. A compatible tuple is one with the same number of
+// elements as the destination and where each element from the
+// destination can be constructed from each corresponding element
+// in the source. Example:
+//
+// tuple<int, char const*, int> init(123, "Hello", 1000);
+// closure_frame<my_closure> frame(clos, init);
+//
+// Here now, our closure_frame's variables are initialized with
+// int: 123, char const*: "Hello" and int: 1000.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// closure_frame class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ClosureT>
+class closure_frame : public ClosureT::tuple_t {
+
+public:
+
+ closure_frame(ClosureT& clos)
+ : ClosureT::tuple_t(), save(clos.frame), frame(clos.frame)
+ { clos.frame = this; }
+
+ template <typename TupleT>
+ closure_frame(ClosureT& clos, TupleT const& init)
+ : ClosureT::tuple_t(init), save(clos.frame), frame(clos.frame)
+ { clos.frame = this; }
+
+ ~closure_frame()
+ { frame = save; }
+
+private:
+
+ closure_frame(closure_frame const&); // no copy
+ closure_frame& operator=(closure_frame const&); // no assign
+
+ closure_frame* save;
+ closure_frame*& frame;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// closure_member class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <int N, typename ClosureT>
+class closure_member {
+
+public:
+
+ typedef typename ClosureT::tuple_t tuple_t;
+
+ closure_member()
+ : frame(ClosureT::closure_frame_ref()) {}
+
+ template <typename TupleT>
+ struct sig {
+
+ typedef typename detail::tuple_element_as_reference<
+ N, typename ClosureT::tuple_t
+ >::type type;
+ };
+
+ template <class Ret, class A, class B, class C>
+ // typename detail::tuple_element_as_reference
+ // <N, typename ClosureT::tuple_t>::type
+ Ret
+ call(A&, B&, C&) const
+ {
+ assert(frame);
+ return boost::tuples::get<N>(*frame);
+ }
+
+
+private:
+
+ typename ClosureT::closure_frame_t*& frame;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// closure class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+ typename T0 = null_type,
+ typename T1 = null_type,
+ typename T2 = null_type,
+ typename T3 = null_type,
+ typename T4 = null_type
+>
+class closure {
+
+public:
+
+ typedef tuple<T0, T1, T2, T3, T4> tuple_t;
+ typedef closure<T0, T1, T2, T3, T4> self_t;
+ typedef closure_frame<self_t> closure_frame_t;
+
+ closure()
+ : frame(0) { closure_frame_ref(&frame); }
+ closure_frame_t& context() { assert(frame); return frame; }
+ closure_frame_t const& context() const { assert(frame); return frame; }
+
+ typedef lambda_functor<closure_member<0, self_t> > member1;
+ typedef lambda_functor<closure_member<1, self_t> > member2;
+ typedef lambda_functor<closure_member<2, self_t> > member3;
+ typedef lambda_functor<closure_member<3, self_t> > member4;
+ typedef lambda_functor<closure_member<4, self_t> > member5;
+
+private:
+
+ closure(closure const&); // no copy
+ closure& operator=(closure const&); // no assign
+
+ template <int N, typename ClosureT>
+ friend struct closure_member;
+
+ template <typename ClosureT>
+ friend class closure_frame;
+
+ static closure_frame_t*&
+ closure_frame_ref(closure_frame_t** frame_ = 0)
+ {
+ static closure_frame_t** frame = 0;
+ if (frame_ != 0)
+ frame = frame_;
+ return *frame;
+ }
+
+ closure_frame_t* frame;
+};
+
+}}
+ // namespace
+
+#endif
diff --git a/boost/boost/lambda/construct.hpp b/boost/boost/lambda/construct.hpp
new file mode 100644
index 00000000000..b5d59939a2f
--- /dev/null
+++ b/boost/boost/lambda/construct.hpp
@@ -0,0 +1,237 @@
+// - construct.hpp -- Lambda Library -------------
+//
+// Copyright (C) 2000 Gary Powell (powellg@amazon.com)
+// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi@cs.utu.fi)
+//
+// 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)
+//
+// For more information, see http://www.boost.org
+//
+// -----------------------------------------------
+
+#if !defined(BOOST_LAMBDA_CONSTRUCT_HPP)
+#define BOOST_LAMBDA_CONSTRUCT_HPP
+
+namespace boost {
+namespace lambda {
+
+ // constructor is used together with bind. constructor<A> creates a bindable
+ // function object that passes its arguments forward to a constructor call
+ // of type A
+
+template<class T> struct constructor {
+
+ template <class U> struct sig { typedef T type; };
+
+ T operator()() const {
+ return T();
+ }
+
+ template<class A1>
+ T operator()(A1& a1) const {
+ return T(a1);
+ }
+
+ template<class A1, class A2>
+ T operator()(A1& a1, A2& a2) const {
+ return T(a1, a2);
+ }
+
+ template<class A1, class A2, class A3>
+ T operator()(A1& a1, A2& a2, A3& a3) const {
+ return T(a1, a2, a3);
+ }
+
+ template<class A1, class A2, class A3, class A4>
+ T operator()(A1& a1, A2& a2, A3& a3, A4& a4) const {
+ return T(a1, a2, a3, a4);
+ }
+
+ template<class A1, class A2, class A3, class A4, class A5>
+ T operator()(A1& a1, A2& a2, A3& a3, A4& a4, A5& a5) const {
+ return T(a1, a2, a3, a4, a5);
+ }
+
+ template<class A1, class A2, class A3, class A4, class A5, class A6>
+ T operator()(A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6) const {
+ return T(a1, a2, a3, a4, a5, a6);
+ }
+
+ template<class A1, class A2, class A3, class A4, class A5, class A6, class A7>
+ T operator()(A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7) const {
+ return T(a1, a2, a3, a4, a5, a6, a7);
+ }
+
+ template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
+ T operator()(A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8) const {
+ return T(a1, a2, a3, a4, a5, a6, a7, a8);
+ }
+
+ template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>
+ T operator()(A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9) const {
+ return T(a1, a2, a3, a4, a5, a6, a7, a8, a9);
+ }
+
+ template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
+ T operator()(A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10) const {
+ return T(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);
+ }
+
+};
+
+
+namespace detail {
+
+// A standard conforming compiler could disambiguate between
+// A1* and A1&, but not all compilers do that, so we need the
+// helpers
+
+
+template <bool IsPointer>
+struct destructor_helper {
+
+ template<class A1>
+ static void exec(A1& a1) {
+ // remove all the qualifiers, not sure whether it is necessary
+ typedef typename boost::remove_cv<A1>::type plainA1;
+ a1.~plainA1();
+ }
+};
+
+template <>
+struct destructor_helper<true> {
+
+ template<class A1>
+ static void exec(A1* a1) {
+ typedef typename boost::remove_cv<A1>::type plainA1;
+ (*a1).~plainA1();
+ }
+};
+
+}
+
+// destructor funtion object
+struct destructor {
+
+ template <class T> struct sig { typedef void type; };
+
+ template<class A1>
+ void operator()(A1& a1) const {
+ typedef typename boost::remove_cv<A1>::type plainA1;
+ detail::destructor_helper<boost::is_pointer<plainA1>::value>::exec(a1);
+ }
+};
+
+
+
+// new_ptr is used together with bind.
+
+ // note: placement new is not supported
+
+template<class T> struct new_ptr {
+
+ template <class U> struct sig { typedef T* type; };
+
+ T* operator()() const {
+ return new T();
+ }
+
+ template<class A1>
+ T* operator()(A1& a1) const {
+ return new T(a1);
+ }
+
+ template<class A1, class A2>
+ T* operator()(A1& a1, A2& a2) const {
+ return new T(a1, a2);
+ }
+
+ template<class A1, class A2, class A3>
+ T* operator()(A1& a1, A2& a2, A3& a3) const {
+ return new T(a1, a2, a3);
+ }
+
+ template<class A1, class A2, class A3, class A4>
+ T* operator()(A1& a1, A2& a2, A3& a3, A4& a4) const {
+ return new T(a1, a2, a3, a4);
+ }
+
+ template<class A1, class A2, class A3, class A4, class A5>
+ T* operator()(A1& a1, A2& a2, A3& a3, A4& a4, A5& a5) const {
+ return new T(a1, a2, a3, a4, a5);
+ }
+
+ template<class A1, class A2, class A3, class A4, class A5, class A6>
+ T* operator()(A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6) const {
+ return new T(a1, a2, a3, a4, a5, a6);
+ }
+
+ template<class A1, class A2, class A3, class A4, class A5, class A6, class A7>
+ T* operator()(A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7) const {
+ return new T(a1, a2, a3, a4, a5, a6, a7);
+ }
+
+ template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
+ T* operator()(A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8) const {
+ return new T(a1, a2, a3, a4, a5, a6, a7, a8);
+ }
+
+ template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>
+ T* operator()(A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9) const {
+ return new T(a1, a2, a3, a4, a5, a6, a7, a8, a9);
+ }
+
+ template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
+ T* operator()(A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10) const {
+ return new T(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);
+ }
+
+};
+
+// delete_ptr return void
+
+struct delete_ptr {
+
+ template <class U> struct sig { typedef void type; };
+
+ template <class A1>
+ void operator()(A1& a1) const {
+ delete a1;
+ }
+
+};
+
+
+// new_array is used together with bind.
+
+template<class T> struct new_array {
+
+ template <class U> struct sig { typedef T* type; };
+
+ T* operator()(int size) const {
+ return new T[size];
+ }
+};
+
+
+// delete_ptr return void
+
+struct delete_array {
+
+ template <class U> struct sig { typedef void type; };
+
+ template <class A1>
+ void operator()(A1& a1) const {
+ delete[] a1;
+ }
+
+};
+
+
+
+} // namespace lambda
+} // namespace boost
+
+#endif
diff --git a/boost/boost/lambda/control_structures.hpp b/boost/boost/lambda/control_structures.hpp
new file mode 100644
index 00000000000..fac3642b20b
--- /dev/null
+++ b/boost/boost/lambda/control_structures.hpp
@@ -0,0 +1,22 @@
+// -- control_structures.hpp -- Boost Lambda Library --------------------------
+// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi@cs.utu.fi)
+//
+// 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)
+//
+// For more information, see www.boost.org
+
+#ifndef BOOST_LAMBDA_CONTROL_STRUCTURES_HPP
+#define BOOST_LAMBDA_CONTROL_STRUCTURES_HPP
+
+
+#include "boost/lambda/core.hpp"
+
+// Arithmetic type promotion needed for if_then_else_return
+#include "boost/lambda/detail/operator_actions.hpp"
+#include "boost/lambda/detail/operator_return_type_traits.hpp"
+
+#include "boost/lambda/detail/control_structures_impl.hpp"
+
+#endif
diff --git a/boost/boost/lambda/core.hpp b/boost/boost/lambda/core.hpp
new file mode 100644
index 00000000000..bcd81496a24
--- /dev/null
+++ b/boost/boost/lambda/core.hpp
@@ -0,0 +1,79 @@
+// -- core.hpp -- Boost Lambda Library -------------------------------------
+//
+// Copyright (C) 2000 Gary Powell (powellg@amazon.com)
+// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi@cs.utu.fi)
+//
+// 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)
+//
+// For more information, see www.boost.org
+//
+// Includes the core of LL, without any real features for client:
+//
+// tuples, lambda functors, return type deduction templates,
+// argument substitution mechanism (select functions)
+//
+// Some functionality comes as well:
+// Assignment and subscript operators, as well as function
+// call operator for placeholder variables.
+// -------------------------------------------------------------------------
+
+#ifndef BOOST_LAMBDA_CORE_HPP
+#define BOOST_LAMBDA_CORE_HPP
+
+#include "boost/type_traits/transform_traits.hpp"
+#include "boost/type_traits/cv_traits.hpp"
+
+#include "boost/tuple/tuple.hpp"
+
+// inject some of the tuple names into lambda
+namespace boost {
+namespace lambda {
+
+using ::boost::tuples::tuple;
+using ::boost::tuples::null_type;
+
+} // lambda
+} // boost
+
+#include "boost/lambda/detail/lambda_config.hpp"
+#include "boost/lambda/detail/lambda_fwd.hpp"
+
+#include "boost/lambda/detail/arity_code.hpp"
+#include "boost/lambda/detail/actions.hpp"
+
+#include "boost/lambda/detail/lambda_traits.hpp"
+
+#include "boost/lambda/detail/function_adaptors.hpp"
+#include "boost/lambda/detail/return_type_traits.hpp"
+
+#include "boost/lambda/detail/select_functions.hpp"
+
+#include "boost/lambda/detail/lambda_functor_base.hpp"
+
+#include "boost/lambda/detail/lambda_functors.hpp"
+
+#include "boost/lambda/detail/ret.hpp"
+
+namespace boost {
+namespace lambda {
+
+namespace {
+
+ // These are constants types and need to be initialised
+ boost::lambda::placeholder1_type free1 = boost::lambda::placeholder1_type();
+ boost::lambda::placeholder2_type free2 = boost::lambda::placeholder2_type();
+ boost::lambda::placeholder3_type free3 = boost::lambda::placeholder3_type();
+
+ boost::lambda::placeholder1_type& _1 = free1;
+ boost::lambda::placeholder2_type& _2 = free2;
+ boost::lambda::placeholder3_type& _3 = free3;
+ // _1, _2, ... naming scheme by Peter Dimov
+} // unnamed
+
+} // lambda
+} // boost
+
+
+#endif //BOOST_LAMBDA_CORE_HPP
diff --git a/boost/boost/lambda/detail/actions.hpp b/boost/boost/lambda/detail/actions.hpp
new file mode 100644
index 00000000000..5464d1a31de
--- /dev/null
+++ b/boost/boost/lambda/detail/actions.hpp
@@ -0,0 +1,174 @@
+// -- Boost Lambda Library - actions.hpp ----------------------------------
+
+// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi@cs.utu.fi)
+//
+// 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)
+
+// For more information, see www.boost.org
+
+// ----------------------------------------------------------------
+
+#ifndef BOOST_LAMBDA_ACTIONS_HPP
+#define BOOST_LAMBDA_ACTIONS_HPP
+
+namespace boost {
+namespace lambda {
+
+
+
+template<int Arity, class Act> class action;
+
+// these need to be defined here, since the corresponding lambda
+// functions are members of lambda_functor classes
+
+class assignment_action {};
+class subscript_action {};
+
+template <class Action> class other_action;
+
+// action for specifying the explicit return type
+template <class RET> class explicit_return_type_action {};
+
+// action for preventing the expansion of a lambda expression
+struct protect_action {};
+
+ // must be defined here, comma is a special case
+struct comma_action {};
+
+
+ // actions, for which the existence of protect is checked in return type
+ // deduction.
+
+template <class Action> struct is_protectable {
+ BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+// NOTE: comma action is protectable. Other protectable actions
+// are listed in operator_actions.hpp
+
+template<> struct is_protectable<other_action<comma_action> > {
+ BOOST_STATIC_CONSTANT(bool, value = true);
+};
+
+
+namespace detail {
+
+ // this type is used in return type deductions to signal that deduction
+ // did not find a result. It does not necessarily mean an error, it commonly
+ // means that something else should be tried.
+ class unspecified {};
+}
+
+ // function action is a special case: bind functions can be called with
+ // the return type specialized explicitly e.g. bind<int>(foo);
+ // If this call syntax is used, the return type is stored in the latter
+ // argument of function_action template. Otherwise the argument gets the type
+ // 'unspecified'.
+ // This argument is only relevant in the return type deduction code
+template <int I, class Result_type = detail::unspecified>
+class function_action {};
+
+template<class T> class function_action<1, T> {
+public:
+ template<class RET, class A1>
+ static RET apply(A1& a1) {
+ return function_adaptor<typename boost::remove_cv<A1>::type>::
+ template apply<RET>(a1);
+ }
+};
+
+template<class T> class function_action<2, T> {
+public:
+ template<class RET, class A1, class A2>
+ static RET apply(A1& a1, A2& a2) {
+ return function_adaptor<typename boost::remove_cv<A1>::type>::
+ template apply<RET>(a1, a2);
+ }
+};
+
+template<class T> class function_action<3, T> {
+public:
+ template<class RET, class A1, class A2, class A3>
+ static RET apply(A1& a1, A2& a2, A3& a3) {
+ return function_adaptor<typename boost::remove_cv<A1>::type>::
+ template apply<RET>(a1, a2, a3);
+ }
+};
+
+template<class T> class function_action<4, T> {
+public:
+ template<class RET, class A1, class A2, class A3, class A4>
+ static RET apply(A1& a1, A2& a2, A3& a3, A4& a4) {
+ return function_adaptor<typename boost::remove_cv<A1>::type>::
+ template apply<RET>(a1, a2, a3, a4);
+ }
+};
+
+template<class T> class function_action<5, T> {
+public:
+ template<class RET, class A1, class A2, class A3, class A4, class A5>
+ static RET apply(A1& a1, A2& a2, A3& a3, A4& a4, A5& a5) {
+ return function_adaptor<typename boost::remove_cv<A1>::type>::
+ template apply<RET>(a1, a2, a3, a4, a5);
+ }
+};
+
+template<class T> class function_action<6, T> {
+public:
+ template<class RET, class A1, class A2, class A3, class A4, class A5,
+ class A6>
+ static RET apply(A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6) {
+ return function_adaptor<typename boost::remove_cv<A1>::type>::
+ template apply<RET>(a1, a2, a3, a4, a5, a6);
+ }
+};
+
+template<class T> class function_action<7, T> {
+public:
+ template<class RET, class A1, class A2, class A3, class A4, class A5,
+ class A6, class A7>
+ static RET apply(A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7) {
+ return function_adaptor<typename boost::remove_cv<A1>::type>::
+ template apply<RET>(a1, a2, a3, a4, a5, a6, a7);
+ }
+};
+
+template<class T> class function_action<8, T> {
+public:
+ template<class RET, class A1, class A2, class A3, class A4, class A5,
+ class A6, class A7, class A8>
+ static RET apply(A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7,
+ A8& a8) {
+ return function_adaptor<typename boost::remove_cv<A1>::type>::
+ template apply<RET>(a1, a2, a3, a4, a5, a6, a7, a8);
+ }
+};
+
+template<class T> class function_action<9, T> {
+public:
+ template<class RET, class A1, class A2, class A3, class A4, class A5,
+ class A6, class A7, class A8, class A9>
+ static RET apply(A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7,
+ A8& a8, A9& a9) {
+ return function_adaptor<typename boost::remove_cv<A1>::type>::
+ template apply<RET>(a1, a2, a3, a4, a5, a6, a7, a8, a9);
+ }
+};
+
+template<class T> class function_action<10, T> {
+public:
+ template<class RET, class A1, class A2, class A3, class A4, class A5,
+ class A6, class A7, class A8, class A9, class A10>
+ static RET apply(A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7,
+ A8& a8, A9& a9, A10& a10) {
+ return function_adaptor<typename boost::remove_cv<A1>::type>::
+ template apply<RET>(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);
+ }
+};
+
+} // namespace lambda
+} // namespace boost
+
+#endif
diff --git a/boost/boost/lambda/detail/arity_code.hpp b/boost/boost/lambda/detail/arity_code.hpp
new file mode 100644
index 00000000000..6afd8471d9f
--- /dev/null
+++ b/boost/boost/lambda/detail/arity_code.hpp
@@ -0,0 +1,110 @@
+// -- Boost Lambda Library -------------------------------------------------
+
+// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi@cs.utu.fi)
+//
+// 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)
+//
+// For more information, see www.boost.org
+
+// --------------------------------------------------
+
+#ifndef BOOST_LAMBDA_ARITY_CODE_HPP
+#define BOOST_LAMBDA_ARITY_CODE_HPP
+
+#include "boost/type_traits/cv_traits.hpp"
+#include "boost/type_traits/transform_traits.hpp"
+
+namespace boost {
+namespace lambda {
+
+// These constants state, whether a lambda_functor instantiation results from
+// an expression which contains no placeholders (NONE),
+// only free1 placeholders (FIRST),
+// free2 placeholders and maybe free1 placeholders (SECOND),
+// free3 and maybe free1 and free2 placeholders (THIRD),
+// freeE placeholders and maybe free1 and free2 (EXCEPTION).
+// RETHROW means, that a rethrow expression is used somewhere in the lambda_functor.
+
+enum { NONE = 0x00, // Notice we are using bits as flags here.
+ FIRST = 0x01,
+ SECOND = 0x02,
+ THIRD = 0x04,
+ EXCEPTION = 0x08,
+ RETHROW = 0x10};
+
+
+template<class T>
+struct get_tuple_arity;
+
+namespace detail {
+
+template <class T> struct get_arity_;
+
+} // end detail;
+
+template <class T> struct get_arity {
+
+ BOOST_STATIC_CONSTANT(int, value = detail::get_arity_<typename boost::remove_cv<typename boost::remove_reference<T>::type>::type>::value);
+
+};
+
+namespace detail {
+
+template<class T>
+struct get_arity_ {
+ BOOST_STATIC_CONSTANT(int, value = 0);
+};
+
+template<class T>
+struct get_arity_<lambda_functor<T> > {
+ BOOST_STATIC_CONSTANT(int, value = get_arity<T>::value);
+};
+
+template<class Action, class Args>
+struct get_arity_<lambda_functor_base<Action, Args> > {
+ BOOST_STATIC_CONSTANT(int, value = get_tuple_arity<Args>::value);
+};
+
+template<int I>
+struct get_arity_<placeholder<I> > {
+ BOOST_STATIC_CONSTANT(int, value = I);
+};
+
+} // detail
+
+template<class T>
+struct get_tuple_arity {
+ BOOST_STATIC_CONSTANT(int, value = get_arity<typename T::head_type>::value | get_tuple_arity<typename T::tail_type>::value);
+};
+
+
+template<>
+struct get_tuple_arity<null_type> {
+ BOOST_STATIC_CONSTANT(int, value = 0);
+};
+
+
+ // Does T have placeholder<I> as it's subexpression?
+
+template<class T, int I>
+struct has_placeholder {
+ BOOST_STATIC_CONSTANT(bool, value = (get_arity<T>::value & I) != 0);
+};
+
+template<int I, int J>
+struct includes_placeholder {
+ BOOST_STATIC_CONSTANT(bool, value = (J & I) != 0);
+};
+
+template<int I, int J>
+struct lacks_placeholder {
+ BOOST_STATIC_CONSTANT(bool, value = ((J & I) == 0));
+};
+
+
+} // namespace lambda
+} // namespace boost
+
+#endif
diff --git a/boost/boost/lambda/detail/bind_functions.hpp b/boost/boost/lambda/detail/bind_functions.hpp
new file mode 100644
index 00000000000..b76507bc8d0
--- /dev/null
+++ b/boost/boost/lambda/detail/bind_functions.hpp
@@ -0,0 +1,1879 @@
+// -- bind_functions.hpp -- Boost Lambda Library
+//
+// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi@cs.utu.fi)
+//
+// 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)
+//
+// For more information, see http://www.boost.org
+
+// ----------------------------------------------------------------
+
+#ifndef BOOST_LAMBDA_BIND_FUNCTIONS_HPP
+#define BOOST_LAMBDA_BIND_FUNCTIONS_HPP
+
+
+namespace boost {
+namespace lambda {
+
+#ifdef BOOST_LAMBDA_INCORRECT_BIND_OVERLOADING
+
+ // gcc 2.96 instantiates bind functions it does not even call.
+ // These instantiations lead to incorrect types in the return type,
+ // and a compilation error results.
+ // This tweaking is to prevent the formation of the erroneous type.
+namespace detail {
+
+template<class T> struct constify_non_funcs {
+ typedef typename
+ detail::IF_type<boost::is_function<T>::value,
+ boost::add_reference<T>,
+ boost::add_const<T>
+ >::type type;
+};
+
+}
+#endif
+// 1-argument bind functions --------------------------
+#ifndef BOOST_REF_TO_FUNC_CONFLICTS_WITH_REF_TO_T
+template <class Result>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<1, function_action<1, Result> >,
+ typename detail::bind_tuple_mapper<Result(&)()>::type
+ >
+>
+
+bind(Result(& a1)()) {
+ return
+ lambda_functor_base<
+ action<1, function_action<1, Result> >,
+ typename detail::bind_tuple_mapper<Result(&)()>::type
+ >
+ ( typename detail::bind_tuple_mapper<Result(&)()>::type
+ (a1)
+ );
+}
+#endif
+
+ #ifndef BOOST_LAMBDA_INCORRECT_BIND_OVERLOADING
+template <class Arg1>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<1, function_action<1> >,
+ typename detail::bind_tuple_mapper<const Arg1>::type
+ >
+>
+
+bind(const Arg1& a1) {
+ return
+ lambda_functor_base<
+ action<1, function_action<1> >,
+ typename detail::bind_tuple_mapper<const Arg1>::type
+ >
+ ( typename detail::bind_tuple_mapper<const Arg1>::type
+ (a1)
+ );
+}
+
+template <class Result, class Arg1>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<1, function_action<1, Result> >,
+ typename detail::bind_tuple_mapper<const Arg1>::type
+ >
+>
+
+bind(const Arg1& a1) {
+ return
+ lambda_functor_base<
+ action<1, function_action<1, Result> >,
+ typename detail::bind_tuple_mapper<const Arg1>::type
+ >
+ ( typename detail::bind_tuple_mapper<const Arg1>::type
+ (a1)
+ );
+}
+
+
+ #else
+template <class Arg1>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<1, function_action<1> >,
+ typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type
+ >::type
+ >
+>
+
+bind(const Arg1& a1) {
+ return
+ lambda_functor_base<
+ action<1, function_action<1> >,
+ typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type
+ >::type
+ >
+ ( typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type
+ >::type
+ (a1)
+ );
+}
+
+template <class Result, class Arg1>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<1, function_action<1, Result> >,
+ typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type
+ >::type
+ >
+>
+
+bind(const Arg1& a1) {
+ return
+ lambda_functor_base<
+ action<1, function_action<1, Result> >,
+ typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type
+ >::type
+ >
+ ( typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type
+ >::type
+ (a1)
+ );
+}
+
+template <class Result>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<1, function_action<1, Result> >,
+ typename detail::bind_tuple_mapper<Result(*)()>::type
+ >
+>
+
+bind(Result(* const & a1)()) {
+ return
+ lambda_functor_base<
+ action<1, function_action<1, Result> >,
+ typename detail::bind_tuple_mapper<Result(*)()>::type
+ >
+ ( typename detail::bind_tuple_mapper<Result(*)()>::type
+ (a1)
+ );
+}
+
+
+#endif
+
+// 2-argument bind functions --------------------------
+#ifndef BOOST_REF_TO_FUNC_CONFLICTS_WITH_REF_TO_T
+template <class Result, class Par1, class Arg2>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<2, function_action<2, Result> >,
+ typename detail::bind_tuple_mapper<Result(&)(Par1), const Arg2>::type
+ >
+>
+
+bind(Result(&a1)(Par1), const Arg2& a2) {
+ return
+ lambda_functor_base<
+ action<2, function_action<2, Result> >,
+ typename detail::bind_tuple_mapper<Result(&)(Par1), const Arg2>::type
+ >
+ ( typename detail::bind_tuple_mapper<Result(&)(Par1), const Arg2>::type
+ (a1, a2)
+ );
+}
+#endif
+
+#ifndef BOOST_LAMBDA_INCORRECT_BIND_OVERLOADING
+template <class Arg1, class Arg2>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<2, function_action<2> >,
+ typename detail::bind_tuple_mapper<const Arg1, const Arg2>::type
+ >
+>
+
+bind(const Arg1& a1, const Arg2& a2) {
+ return
+ lambda_functor_base<
+ action<2, function_action<2> >,
+ typename detail::bind_tuple_mapper<const Arg1, const Arg2>::type
+ >
+ ( typename detail::bind_tuple_mapper<const Arg1, const Arg2>::type
+ (a1, a2)
+ );
+}
+
+template <class Result, class Arg1, class Arg2>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<2, function_action<2, Result> >,
+ typename detail::bind_tuple_mapper<const Arg1, const Arg2>::type
+ >
+>
+
+bind(const Arg1& a1, const Arg2& a2) {
+ return
+ lambda_functor_base<
+ action<2, function_action<2, Result> >,
+ typename detail::bind_tuple_mapper<const Arg1, const Arg2>::type
+ >
+ ( typename detail::bind_tuple_mapper<const Arg1, const Arg2>::type
+ (a1, a2)
+ );
+}
+
+
+ #else
+template <class Arg1, class Arg2>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<2, function_action<2> >,
+ typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type, const Arg2
+ >::type
+ >
+>
+
+bind(const Arg1& a1, const Arg2& a2) {
+ return
+ lambda_functor_base<
+ action<2, function_action<2> >,
+ typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type, const Arg2
+ >::type
+ >
+ ( typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type, const Arg2
+ >::type
+ (a1, a2)
+ );
+}
+
+template <class Result, class Arg1, class Arg2>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<2, function_action<2, Result> >,
+ typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type, const Arg2
+ >::type
+ >
+>
+
+bind(const Arg1& a1, const Arg2& a2) {
+ return
+ lambda_functor_base<
+ action<2, function_action<2, Result> >,
+ typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type, const Arg2
+ >::type
+ >
+ ( typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type, const Arg2
+ >::type
+ (a1, a2)
+ );
+}
+
+template <class Result, class Par1, class Arg2>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<2, function_action<2, Result> >,
+ typename detail::bind_tuple_mapper<Result(*)(Par1), const Arg2>::type
+ >
+>
+
+bind(Result(* const & a1)(Par1), const Arg2& a2) {
+ return
+ lambda_functor_base<
+ action<2, function_action<2, Result> >,
+ typename detail::bind_tuple_mapper<Result(*)(Par1), const Arg2>::type
+ >
+ ( typename detail::bind_tuple_mapper<Result(*)(Par1), const Arg2>::type
+ (a1, a2)
+ );
+}
+
+
+ #endif
+
+// 3-argument bind functions --------------------------
+#ifndef BOOST_REF_TO_FUNC_CONFLICTS_WITH_REF_TO_T
+template <class Result, class Par1, class Par2, class Arg2, class Arg3>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<3, function_action<3, Result> >,
+ typename detail::bind_tuple_mapper<
+ Result(&)(Par1, Par2), const Arg2, const Arg3
+ >::type
+ >
+>
+
+bind(Result(&a1)(Par1, Par2), const Arg2& a2, const Arg3& a3) {
+ return
+ lambda_functor_base<
+ action<3, function_action<3, Result> >,
+ typename detail::bind_tuple_mapper<
+ Result(&)(Par1, Par2), const Arg2, const Arg3
+ >::type
+ >
+ ( typename detail::bind_tuple_mapper<
+ Result(&)(Par1, Par2), const Arg2, const Arg3
+ >::type
+ (a1, a2, a3)
+ );
+}
+#endif
+
+ #ifndef BOOST_LAMBDA_INCORRECT_BIND_OVERLOADING
+template <class Arg1, class Arg2, class Arg3>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<3, function_action<3> >,
+ typename detail::bind_tuple_mapper<
+ const Arg1, const Arg2, const Arg3
+ >::type
+ >
+>
+
+bind(const Arg1& a1, const Arg2& a2, const Arg3& a3) {
+ return
+ lambda_functor_base<
+ action<3, function_action<3> >,
+ typename detail::bind_tuple_mapper<
+ const Arg1, const Arg2, const Arg3
+ >::type
+ >
+ ( typename detail::bind_tuple_mapper<
+ const Arg1, const Arg2, const Arg3
+ >::type
+ (a1, a2, a3)
+ );
+}
+
+template <class Result, class Arg1, class Arg2, class Arg3>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<3, function_action<3, Result> >,
+ typename detail::bind_tuple_mapper<
+ const Arg1, const Arg2, const Arg3
+ >::type
+ >
+>
+
+bind(const Arg1& a1, const Arg2& a2, const Arg3& a3) {
+ return
+ lambda_functor_base<
+ action<3, function_action<3, Result> >,
+ typename detail::bind_tuple_mapper<
+ const Arg1, const Arg2, const Arg3
+ >::type
+ >
+ ( typename detail::bind_tuple_mapper<
+ const Arg1, const Arg2, const Arg3
+ >::type
+ (a1, a2, a3)
+ );
+}
+
+
+ #else
+template <class Arg1, class Arg2, class Arg3>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<3, function_action<3> >,
+ typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type, const Arg2, const Arg3
+ >::type
+ >
+>
+
+bind(const Arg1& a1, const Arg2& a2, const Arg3& a3) {
+ return
+ lambda_functor_base<
+ action<3, function_action<3> >,
+ typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type, const Arg2,
+ const Arg3
+ >::type
+ >
+ ( typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type, const Arg2,
+ const Arg3
+ >::type
+ (a1, a2, a3)
+ );
+}
+
+template <class Result, class Arg1, class Arg2, class Arg3>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<3, function_action<3, Result> >,
+ typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type, const Arg2, const Arg3
+ >::type
+ >
+>
+
+bind(const Arg1& a1, const Arg2& a2, const Arg3& a3) {
+ return
+ lambda_functor_base<
+ action<3, function_action<3, Result> >,
+ typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type, const Arg2,
+ const Arg3
+ >::type
+ >
+ ( typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type, const Arg2,
+ const Arg3
+ >::type
+ (a1, a2, a3)
+ );
+}
+
+template <class Result, class Par1, class Par2, class Arg2, class Arg3>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<3, function_action<3, Result> >,
+ typename detail::bind_tuple_mapper<
+ Result(*)(Par1, Par2), const Arg2, const Arg3
+ >::type
+ >
+>
+
+bind(Result(* const & a1)(Par1, Par2), const Arg2& a2, const Arg3& a3) {
+ return
+ lambda_functor_base<
+ action<3, function_action<3, Result> >,
+ typename detail::bind_tuple_mapper<
+ Result(*)(Par1, Par2), const Arg2, const Arg3
+ >::type
+ >
+ ( typename detail::bind_tuple_mapper<
+ Result(*)(Par1, Par2), const Arg2, const Arg3
+ >::type
+ (a1, a2, a3)
+ );
+}
+
+
+ #endif
+
+// 4-argument bind functions --------------------------
+#ifndef BOOST_REF_TO_FUNC_CONFLICTS_WITH_REF_TO_T
+template <class Result, class Par1, class Par2, class Par3, class Arg2,
+ class Arg3, class Arg4>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<4, function_action<4, Result> >,
+ typename detail::bind_tuple_mapper<
+ Result(&)(Par1, Par2, Par3), const Arg2, const Arg3, const Arg4
+ >::type
+ >
+>
+
+bind(Result(&a1)(Par1, Par2, Par3), const Arg2& a2, const Arg3& a3,
+ const Arg4& a4) {
+ return
+ lambda_functor_base<
+ action<4, function_action<4, Result> >,
+ typename detail::bind_tuple_mapper<
+ Result(&)(Par1, Par2, Par3), const Arg2, const Arg3, const Arg4
+ >::type
+ >
+ ( typename detail::bind_tuple_mapper<
+ Result(&)(Par1, Par2, Par3), const Arg2, const Arg3, const Arg4
+ >::type
+ (a1, a2, a3, a4)
+ );
+}
+#endif
+
+ #ifndef BOOST_LAMBDA_INCORRECT_BIND_OVERLOADING
+template <class Arg1, class Arg2, class Arg3, class Arg4>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<4, function_action<4> >,
+ typename detail::bind_tuple_mapper<
+ const Arg1, const Arg2, const Arg3, const Arg4
+ >::type
+ >
+>
+
+bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4) {
+ return
+ lambda_functor_base<
+ action<4, function_action<4> >,
+ typename detail::bind_tuple_mapper<
+ const Arg1, const Arg2, const Arg3, const Arg4
+ >::type
+ >
+ ( typename detail::bind_tuple_mapper<
+ const Arg1, const Arg2, const Arg3, const Arg4
+ >::type
+ (a1, a2, a3, a4)
+ );
+}
+
+template <class Result, class Arg1, class Arg2, class Arg3, class Arg4>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<4, function_action<4, Result> >,
+ typename detail::bind_tuple_mapper<
+ const Arg1, const Arg2, const Arg3, const Arg4
+ >::type
+ >
+>
+
+bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4) {
+ return
+ lambda_functor_base<
+ action<4, function_action<4, Result> >,
+ typename detail::bind_tuple_mapper<
+ const Arg1, const Arg2, const Arg3, const Arg4
+ >::type
+ >
+ ( typename detail::bind_tuple_mapper<
+ const Arg1, const Arg2, const Arg3, const Arg4
+ >::type
+ (a1, a2, a3, a4)
+ );
+}
+
+
+ #else
+template <class Arg1, class Arg2, class Arg3, class Arg4>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<4, function_action<4> >,
+ typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type, const Arg2, const Arg3,
+ const Arg4
+ >::type
+ >
+>
+
+bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4) {
+ return
+ lambda_functor_base<
+ action<4, function_action<4> >,
+ typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type, const Arg2,
+ const Arg3, const Arg4
+ >::type
+ >
+ ( typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type, const Arg2,
+ const Arg3, const Arg4
+ >::type
+ (a1, a2, a3, a4)
+ );
+}
+
+template <class Result, class Arg1, class Arg2, class Arg3, class Arg4>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<4, function_action<4, Result> >,
+ typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type, const Arg2, const Arg3,
+ const Arg4
+ >::type
+ >
+>
+
+bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4) {
+ return
+ lambda_functor_base<
+ action<4, function_action<4, Result> >,
+ typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type, const Arg2,
+ const Arg3, const Arg4
+ >::type
+ >
+ ( typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type, const Arg2,
+ const Arg3, const Arg4
+ >::type
+ (a1, a2, a3, a4)
+ );
+}
+
+template <class Result, class Par1, class Par2, class Par3, class Arg2,
+ class Arg3, class Arg4>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<4, function_action<4, Result> >,
+ typename detail::bind_tuple_mapper<
+ Result(*)(Par1, Par2, Par3), const Arg2, const Arg3, const Arg4
+ >::type
+ >
+>
+
+bind(Result(* const & a1)(Par1, Par2, Par3), const Arg2& a2,
+ const Arg3& a3, const Arg4& a4) {
+ return
+ lambda_functor_base<
+ action<4, function_action<4, Result> >,
+ typename detail::bind_tuple_mapper<
+ Result(*)(Par1, Par2, Par3), const Arg2, const Arg3, const Arg4
+ >::type
+ >
+ ( typename detail::bind_tuple_mapper<
+ Result(*)(Par1, Par2, Par3), const Arg2, const Arg3, const Arg4
+ >::type
+ (a1, a2, a3, a4)
+ );
+}
+
+
+ #endif
+
+// 5-argument bind functions --------------------------
+#ifndef BOOST_REF_TO_FUNC_CONFLICTS_WITH_REF_TO_T
+template <class Result, class Par1, class Par2, class Par3, class Par4,
+ class Arg2, class Arg3, class Arg4, class Arg5>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<5, function_action<5, Result> >,
+ typename detail::bind_tuple_mapper<
+ Result(&)(Par1, Par2, Par3, Par4), const Arg2, const Arg3, const Arg4,
+ const Arg5
+ >::type
+ >
+>
+
+bind(Result(&a1)(Par1, Par2, Par3, Par4), const Arg2& a2, const Arg3& a3,
+ const Arg4& a4, const Arg5& a5) {
+ return
+ lambda_functor_base<
+ action<5, function_action<5, Result> >,
+ typename detail::bind_tuple_mapper<
+ Result(&)(Par1, Par2, Par3, Par4), const Arg2, const Arg3, const Arg4,
+ const Arg5
+ >::type
+ >
+ ( typename detail::bind_tuple_mapper<
+ Result(&)(Par1, Par2, Par3, Par4), const Arg2, const Arg3, const Arg4,
+ const Arg5
+ >::type
+ (a1, a2, a3, a4, a5)
+ );
+}
+#endif
+
+ #ifndef BOOST_LAMBDA_INCORRECT_BIND_OVERLOADING
+template <class Arg1, class Arg2, class Arg3, class Arg4, class Arg5>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<5, function_action<5> >,
+ typename detail::bind_tuple_mapper<
+ const Arg1, const Arg2, const Arg3, const Arg4, const Arg5
+ >::type
+ >
+>
+
+bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4,
+ const Arg5& a5) {
+ return
+ lambda_functor_base<
+ action<5, function_action<5> >,
+ typename detail::bind_tuple_mapper<
+ const Arg1, const Arg2, const Arg3, const Arg4, const Arg5
+ >::type
+ >
+ ( typename detail::bind_tuple_mapper<
+ const Arg1, const Arg2, const Arg3, const Arg4, const Arg5
+ >::type
+ (a1, a2, a3, a4, a5)
+ );
+}
+
+template <class Result, class Arg1, class Arg2, class Arg3, class Arg4,
+ class Arg5>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<5, function_action<5, Result> >,
+ typename detail::bind_tuple_mapper<
+ const Arg1, const Arg2, const Arg3, const Arg4, const Arg5
+ >::type
+ >
+>
+
+bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4,
+ const Arg5& a5) {
+ return
+ lambda_functor_base<
+ action<5, function_action<5, Result> >,
+ typename detail::bind_tuple_mapper<
+ const Arg1, const Arg2, const Arg3, const Arg4, const Arg5
+ >::type
+ >
+ ( typename detail::bind_tuple_mapper<
+ const Arg1, const Arg2, const Arg3, const Arg4, const Arg5
+ >::type
+ (a1, a2, a3, a4, a5)
+ );
+}
+
+
+ #else
+template <class Arg1, class Arg2, class Arg3, class Arg4, class Arg5>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<5, function_action<5> >,
+ typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type, const Arg2, const Arg3,
+ const Arg4, const Arg5
+ >::type
+ >
+>
+
+bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4,
+ const Arg5& a5) {
+ return
+ lambda_functor_base<
+ action<5, function_action<5> >,
+ typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type, const Arg2,
+ const Arg3, const Arg4, const Arg5
+ >::type
+ >
+ ( typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type, const Arg2,
+ const Arg3, const Arg4, const Arg5
+ >::type
+ (a1, a2, a3, a4, a5)
+ );
+}
+
+template <class Result, class Arg1, class Arg2, class Arg3, class Arg4,
+ class Arg5>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<5, function_action<5, Result> >,
+ typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type, const Arg2, const Arg3,
+ const Arg4, const Arg5
+ >::type
+ >
+>
+
+bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4,
+ const Arg5& a5) {
+ return
+ lambda_functor_base<
+ action<5, function_action<5, Result> >,
+ typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type, const Arg2,
+ const Arg3, const Arg4, const Arg5
+ >::type
+ >
+ ( typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type, const Arg2,
+ const Arg3, const Arg4, const Arg5
+ >::type
+ (a1, a2, a3, a4, a5)
+ );
+}
+
+template <class Result, class Par1, class Par2, class Par3, class Par4,
+ class Arg2, class Arg3, class Arg4, class Arg5>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<5, function_action<5, Result> >,
+ typename detail::bind_tuple_mapper<
+ Result(*)(Par1, Par2, Par3, Par4), const Arg2, const Arg3, const Arg4,
+ const Arg5
+ >::type
+ >
+>
+
+bind(Result(* const & a1)(Par1, Par2, Par3, Par4), const Arg2& a2,
+ const Arg3& a3, const Arg4& a4, const Arg5& a5) {
+ return
+ lambda_functor_base<
+ action<5, function_action<5, Result> >,
+ typename detail::bind_tuple_mapper<
+ Result(*)(Par1, Par2, Par3, Par4), const Arg2, const Arg3, const Arg4,
+ const Arg5
+ >::type
+ >
+ ( typename detail::bind_tuple_mapper<
+ Result(*)(Par1, Par2, Par3, Par4), const Arg2, const Arg3, const Arg4,
+ const Arg5
+ >::type
+ (a1, a2, a3, a4, a5)
+ );
+}
+
+
+ #endif
+
+// 6-argument bind functions --------------------------
+#ifndef BOOST_REF_TO_FUNC_CONFLICTS_WITH_REF_TO_T
+template <class Result, class Par1, class Par2, class Par3, class Par4,
+ class Par5, class Arg2, class Arg3, class Arg4, class Arg5,
+ class Arg6>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<6, function_action<6, Result> >,
+ typename detail::bind_tuple_mapper<
+ Result(&)(Par1, Par2, Par3, Par4, Par5), const Arg2, const Arg3,
+ const Arg4, const Arg5, const Arg6
+ >::type
+ >
+>
+
+bind(Result(&a1)(Par1, Par2, Par3, Par4, Par5), const Arg2& a2,
+ const Arg3& a3, const Arg4& a4, const Arg5& a5, const Arg6& a6) {
+ return
+ lambda_functor_base<
+ action<6, function_action<6, Result> >,
+ typename detail::bind_tuple_mapper<
+ Result(&)(Par1, Par2, Par3, Par4, Par5), const Arg2, const Arg3,
+ const Arg4, const Arg5, const Arg6
+ >::type
+ >
+ ( typename detail::bind_tuple_mapper<
+ Result(&)(Par1, Par2, Par3, Par4, Par5), const Arg2, const Arg3,
+ const Arg4, const Arg5, const Arg6
+ >::type
+ (a1, a2, a3, a4, a5, a6)
+ );
+}
+#endif
+
+ #ifndef BOOST_LAMBDA_INCORRECT_BIND_OVERLOADING
+template <class Arg1, class Arg2, class Arg3, class Arg4, class Arg5,
+ class Arg6>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<6, function_action<6> >,
+ typename detail::bind_tuple_mapper<
+ const Arg1, const Arg2, const Arg3, const Arg4, const Arg5, const Arg6
+ >::type
+ >
+>
+
+bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4,
+ const Arg5& a5, const Arg6& a6) {
+ return
+ lambda_functor_base<
+ action<6, function_action<6> >,
+ typename detail::bind_tuple_mapper<
+ const Arg1, const Arg2, const Arg3, const Arg4, const Arg5, const Arg6
+ >::type
+ >
+ ( typename detail::bind_tuple_mapper<
+ const Arg1, const Arg2, const Arg3, const Arg4, const Arg5, const Arg6
+ >::type
+ (a1, a2, a3, a4, a5, a6)
+ );
+}
+
+template <class Result, class Arg1, class Arg2, class Arg3, class Arg4,
+ class Arg5, class Arg6>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<6, function_action<6, Result> >,
+ typename detail::bind_tuple_mapper<
+ const Arg1, const Arg2, const Arg3, const Arg4, const Arg5, const Arg6
+ >::type
+ >
+>
+
+bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4,
+ const Arg5& a5, const Arg6& a6) {
+ return
+ lambda_functor_base<
+ action<6, function_action<6, Result> >,
+ typename detail::bind_tuple_mapper<
+ const Arg1, const Arg2, const Arg3, const Arg4, const Arg5, const Arg6
+ >::type
+ >
+ ( typename detail::bind_tuple_mapper<
+ const Arg1, const Arg2, const Arg3, const Arg4, const Arg5, const Arg6
+ >::type
+ (a1, a2, a3, a4, a5, a6)
+ );
+}
+
+
+ #else
+template <class Arg1, class Arg2, class Arg3, class Arg4, class Arg5,
+ class Arg6>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<6, function_action<6> >,
+ typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type, const Arg2, const Arg3,
+ const Arg4, const Arg5, const Arg6
+ >::type
+ >
+>
+
+bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4,
+ const Arg5& a5, const Arg6& a6) {
+ return
+ lambda_functor_base<
+ action<6, function_action<6> >,
+ typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type, const Arg2,
+ const Arg3, const Arg4, const Arg5, const Arg6
+ >::type
+ >
+ ( typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type, const Arg2,
+ const Arg3, const Arg4, const Arg5, const Arg6
+ >::type
+ (a1, a2, a3, a4, a5, a6)
+ );
+}
+
+template <class Result, class Arg1, class Arg2, class Arg3, class Arg4,
+ class Arg5, class Arg6>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<6, function_action<6, Result> >,
+ typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type, const Arg2, const Arg3,
+ const Arg4, const Arg5, const Arg6
+ >::type
+ >
+>
+
+bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4,
+ const Arg5& a5, const Arg6& a6) {
+ return
+ lambda_functor_base<
+ action<6, function_action<6, Result> >,
+ typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type, const Arg2,
+ const Arg3, const Arg4, const Arg5, const Arg6
+ >::type
+ >
+ ( typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type, const Arg2,
+ const Arg3, const Arg4, const Arg5, const Arg6
+ >::type
+ (a1, a2, a3, a4, a5, a6)
+ );
+}
+
+template <class Result, class Par1, class Par2, class Par3, class Par4,
+ class Par5, class Arg2, class Arg3, class Arg4, class Arg5,
+ class Arg6>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<6, function_action<6, Result> >,
+ typename detail::bind_tuple_mapper<
+ Result(*)(Par1, Par2, Par3, Par4, Par5), const Arg2, const Arg3,
+ const Arg4, const Arg5, const Arg6
+ >::type
+ >
+>
+
+bind(Result(* const & a1)(Par1, Par2, Par3, Par4, Par5), const Arg2& a2,
+ const Arg3& a3, const Arg4& a4, const Arg5& a5, const Arg6& a6) {
+ return
+ lambda_functor_base<
+ action<6, function_action<6, Result> >,
+ typename detail::bind_tuple_mapper<
+ Result(*)(Par1, Par2, Par3, Par4, Par5), const Arg2, const Arg3,
+ const Arg4, const Arg5, const Arg6
+ >::type
+ >
+ ( typename detail::bind_tuple_mapper<
+ Result(*)(Par1, Par2, Par3, Par4, Par5), const Arg2, const Arg3,
+ const Arg4, const Arg5, const Arg6
+ >::type
+ (a1, a2, a3, a4, a5, a6)
+ );
+}
+
+
+ #endif
+
+// 7-argument bind functions --------------------------
+#ifndef BOOST_REF_TO_FUNC_CONFLICTS_WITH_REF_TO_T
+template <class Result, class Par1, class Par2, class Par3, class Par4,
+ class Par5, class Par6, class Arg2, class Arg3, class Arg4,
+ class Arg5, class Arg6, class Arg7>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<7, function_action<7, Result> >,
+ typename detail::bind_tuple_mapper<
+ Result(&)(Par1, Par2, Par3, Par4, Par5, Par6), const Arg2, const Arg3,
+ const Arg4, const Arg5, const Arg6, const Arg7
+ >::type
+ >
+>
+
+bind(Result(&a1)(Par1, Par2, Par3, Par4, Par5, Par6), const Arg2& a2,
+ const Arg3& a3, const Arg4& a4, const Arg5& a5, const Arg6& a6,
+ const Arg7& a7) {
+ return
+ lambda_functor_base<
+ action<7, function_action<7, Result> >,
+ typename detail::bind_tuple_mapper<
+ Result(&)(Par1, Par2, Par3, Par4, Par5, Par6), const Arg2, const Arg3,
+ const Arg4, const Arg5, const Arg6, const Arg7
+ >::type
+ >
+ ( typename detail::bind_tuple_mapper<
+ Result(&)(Par1, Par2, Par3, Par4, Par5, Par6), const Arg2, const Arg3,
+ const Arg4, const Arg5, const Arg6, const Arg7
+ >::type
+ (a1, a2, a3, a4, a5, a6, a7)
+ );
+}
+#endif
+
+ #ifndef BOOST_LAMBDA_INCORRECT_BIND_OVERLOADING
+template <class Arg1, class Arg2, class Arg3, class Arg4, class Arg5,
+ class Arg6, class Arg7>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<7, function_action<7> >,
+ typename detail::bind_tuple_mapper<
+ const Arg1, const Arg2, const Arg3, const Arg4, const Arg5, const Arg6,
+ const Arg7
+ >::type
+ >
+>
+
+bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4,
+ const Arg5& a5, const Arg6& a6, const Arg7& a7) {
+ return
+ lambda_functor_base<
+ action<7, function_action<7> >,
+ typename detail::bind_tuple_mapper<
+ const Arg1, const Arg2, const Arg3, const Arg4, const Arg5,
+ const Arg6, const Arg7
+ >::type
+ >
+ ( typename detail::bind_tuple_mapper<
+ const Arg1, const Arg2, const Arg3, const Arg4, const Arg5,
+ const Arg6, const Arg7
+ >::type
+ (a1, a2, a3, a4, a5, a6, a7)
+ );
+}
+
+template <class Result, class Arg1, class Arg2, class Arg3, class Arg4,
+ class Arg5, class Arg6, class Arg7>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<7, function_action<7, Result> >,
+ typename detail::bind_tuple_mapper<
+ const Arg1, const Arg2, const Arg3, const Arg4, const Arg5, const Arg6,
+ const Arg7
+ >::type
+ >
+>
+
+bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4,
+ const Arg5& a5, const Arg6& a6, const Arg7& a7) {
+ return
+ lambda_functor_base<
+ action<7, function_action<7, Result> >,
+ typename detail::bind_tuple_mapper<
+ const Arg1, const Arg2, const Arg3, const Arg4, const Arg5,
+ const Arg6, const Arg7
+ >::type
+ >
+ ( typename detail::bind_tuple_mapper<
+ const Arg1, const Arg2, const Arg3, const Arg4, const Arg5,
+ const Arg6, const Arg7
+ >::type
+ (a1, a2, a3, a4, a5, a6, a7)
+ );
+}
+
+
+ #else
+template <class Arg1, class Arg2, class Arg3, class Arg4, class Arg5,
+ class Arg6, class Arg7>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<7, function_action<7> >,
+ typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type, const Arg2, const Arg3,
+ const Arg4, const Arg5, const Arg6, const Arg7
+ >::type
+ >
+>
+
+bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4,
+ const Arg5& a5, const Arg6& a6, const Arg7& a7) {
+ return
+ lambda_functor_base<
+ action<7, function_action<7> >,
+ typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type, const Arg2,
+ const Arg3, const Arg4, const Arg5, const Arg6, const Arg7
+ >::type
+ >
+ ( typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type, const Arg2,
+ const Arg3, const Arg4, const Arg5, const Arg6, const Arg7
+ >::type
+ (a1, a2, a3, a4, a5, a6, a7)
+ );
+}
+
+template <class Result, class Arg1, class Arg2, class Arg3, class Arg4,
+ class Arg5, class Arg6, class Arg7>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<7, function_action<7, Result> >,
+ typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type, const Arg2, const Arg3,
+ const Arg4, const Arg5, const Arg6, const Arg7
+ >::type
+ >
+>
+
+bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4,
+ const Arg5& a5, const Arg6& a6, const Arg7& a7) {
+ return
+ lambda_functor_base<
+ action<7, function_action<7, Result> >,
+ typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type, const Arg2,
+ const Arg3, const Arg4, const Arg5, const Arg6, const Arg7
+ >::type
+ >
+ ( typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type, const Arg2,
+ const Arg3, const Arg4, const Arg5, const Arg6, const Arg7
+ >::type
+ (a1, a2, a3, a4, a5, a6, a7)
+ );
+}
+
+template <class Result, class Par1, class Par2, class Par3, class Par4,
+ class Par5, class Par6, class Arg2, class Arg3, class Arg4,
+ class Arg5, class Arg6, class Arg7>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<7, function_action<7, Result> >,
+ typename detail::bind_tuple_mapper<
+ Result(*)(Par1, Par2, Par3, Par4, Par5, Par6), const Arg2, const Arg3,
+ const Arg4, const Arg5, const Arg6, const Arg7
+ >::type
+ >
+>
+
+bind(Result(* const & a1)(Par1, Par2, Par3, Par4, Par5, Par6),
+ const Arg2& a2, const Arg3& a3, const Arg4& a4, const Arg5& a5,
+ const Arg6& a6, const Arg7& a7) {
+ return
+ lambda_functor_base<
+ action<7, function_action<7, Result> >,
+ typename detail::bind_tuple_mapper<
+ Result(*)(Par1, Par2, Par3, Par4, Par5, Par6), const Arg2, const Arg3,
+ const Arg4, const Arg5, const Arg6, const Arg7
+ >::type
+ >
+ ( typename detail::bind_tuple_mapper<
+ Result(*)(Par1, Par2, Par3, Par4, Par5, Par6), const Arg2, const Arg3,
+ const Arg4, const Arg5, const Arg6, const Arg7
+ >::type
+ (a1, a2, a3, a4, a5, a6, a7)
+ );
+}
+
+
+ #endif
+
+// 8-argument bind functions --------------------------
+#ifndef BOOST_REF_TO_FUNC_CONFLICTS_WITH_REF_TO_T
+template <class Result, class Par1, class Par2, class Par3, class Par4,
+ class Par5, class Par6, class Par7, class Arg2, class Arg3,
+ class Arg4, class Arg5, class Arg6, class Arg7, class Arg8>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<8, function_action<8, Result> >,
+ typename detail::bind_tuple_mapper<
+ Result(&)(Par1, Par2, Par3, Par4, Par5, Par6, Par7), const Arg2,
+ const Arg3, const Arg4, const Arg5, const Arg6, const Arg7, const Arg8
+ >::type
+ >
+>
+
+bind(Result(&a1)(Par1, Par2, Par3, Par4, Par5, Par6, Par7), const Arg2& a2,
+ const Arg3& a3, const Arg4& a4, const Arg5& a5, const Arg6& a6,
+ const Arg7& a7, const Arg8& a8) {
+ return
+ lambda_functor_base<
+ action<8, function_action<8, Result> >,
+ typename detail::bind_tuple_mapper<
+ Result(&)(Par1, Par2, Par3, Par4, Par5, Par6, Par7), const Arg2,
+ const Arg3, const Arg4, const Arg5, const Arg6, const Arg7, const Arg8
+ >::type
+ >
+ ( typename detail::bind_tuple_mapper<
+ Result(&)(Par1, Par2, Par3, Par4, Par5, Par6, Par7), const Arg2,
+ const Arg3, const Arg4, const Arg5, const Arg6, const Arg7, const Arg8
+ >::type
+ (a1, a2, a3, a4, a5, a6, a7, a8)
+ );
+}
+#endif
+
+ #ifndef BOOST_LAMBDA_INCORRECT_BIND_OVERLOADING
+template <class Arg1, class Arg2, class Arg3, class Arg4, class Arg5,
+ class Arg6, class Arg7, class Arg8>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<8, function_action<8> >,
+ typename detail::bind_tuple_mapper<
+ const Arg1, const Arg2, const Arg3, const Arg4, const Arg5, const Arg6,
+ const Arg7, const Arg8
+ >::type
+ >
+>
+
+bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4,
+ const Arg5& a5, const Arg6& a6, const Arg7& a7, const Arg8& a8) {
+ return
+ lambda_functor_base<
+ action<8, function_action<8> >,
+ typename detail::bind_tuple_mapper<
+ const Arg1, const Arg2, const Arg3, const Arg4, const Arg5,
+ const Arg6, const Arg7, const Arg8
+ >::type
+ >
+ ( typename detail::bind_tuple_mapper<
+ const Arg1, const Arg2, const Arg3, const Arg4, const Arg5,
+ const Arg6, const Arg7, const Arg8
+ >::type
+ (a1, a2, a3, a4, a5, a6, a7, a8)
+ );
+}
+
+template <class Result, class Arg1, class Arg2, class Arg3, class Arg4,
+ class Arg5, class Arg6, class Arg7, class Arg8>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<8, function_action<8, Result> >,
+ typename detail::bind_tuple_mapper<
+ const Arg1, const Arg2, const Arg3, const Arg4, const Arg5, const Arg6,
+ const Arg7, const Arg8
+ >::type
+ >
+>
+
+bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4,
+ const Arg5& a5, const Arg6& a6, const Arg7& a7, const Arg8& a8) {
+ return
+ lambda_functor_base<
+ action<8, function_action<8, Result> >,
+ typename detail::bind_tuple_mapper<
+ const Arg1, const Arg2, const Arg3, const Arg4, const Arg5,
+ const Arg6, const Arg7, const Arg8
+ >::type
+ >
+ ( typename detail::bind_tuple_mapper<
+ const Arg1, const Arg2, const Arg3, const Arg4, const Arg5,
+ const Arg6, const Arg7, const Arg8
+ >::type
+ (a1, a2, a3, a4, a5, a6, a7, a8)
+ );
+}
+
+
+ #else
+template <class Arg1, class Arg2, class Arg3, class Arg4, class Arg5,
+ class Arg6, class Arg7, class Arg8>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<8, function_action<8> >,
+ typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type, const Arg2, const Arg3,
+ const Arg4, const Arg5, const Arg6, const Arg7, const Arg8
+ >::type
+ >
+>
+
+bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4,
+ const Arg5& a5, const Arg6& a6, const Arg7& a7, const Arg8& a8) {
+ return
+ lambda_functor_base<
+ action<8, function_action<8> >,
+ typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type, const Arg2,
+ const Arg3, const Arg4, const Arg5, const Arg6, const Arg7, const Arg8
+ >::type
+ >
+ ( typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type, const Arg2,
+ const Arg3, const Arg4, const Arg5, const Arg6, const Arg7, const Arg8
+ >::type
+ (a1, a2, a3, a4, a5, a6, a7, a8)
+ );
+}
+
+template <class Result, class Arg1, class Arg2, class Arg3, class Arg4,
+ class Arg5, class Arg6, class Arg7, class Arg8>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<8, function_action<8, Result> >,
+ typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type, const Arg2, const Arg3,
+ const Arg4, const Arg5, const Arg6, const Arg7, const Arg8
+ >::type
+ >
+>
+
+bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4,
+ const Arg5& a5, const Arg6& a6, const Arg7& a7, const Arg8& a8) {
+ return
+ lambda_functor_base<
+ action<8, function_action<8, Result> >,
+ typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type, const Arg2,
+ const Arg3, const Arg4, const Arg5, const Arg6, const Arg7, const Arg8
+ >::type
+ >
+ ( typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type, const Arg2,
+ const Arg3, const Arg4, const Arg5, const Arg6, const Arg7, const Arg8
+ >::type
+ (a1, a2, a3, a4, a5, a6, a7, a8)
+ );
+}
+
+template <class Result, class Par1, class Par2, class Par3, class Par4,
+ class Par5, class Par6, class Par7, class Arg2, class Arg3,
+ class Arg4, class Arg5, class Arg6, class Arg7, class Arg8>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<8, function_action<8, Result> >,
+ typename detail::bind_tuple_mapper<
+ Result(*)(Par1, Par2, Par3, Par4, Par5, Par6, Par7), const Arg2,
+ const Arg3, const Arg4, const Arg5, const Arg6, const Arg7, const Arg8
+ >::type
+ >
+>
+
+bind(Result(* const & a1)(Par1, Par2, Par3, Par4, Par5, Par6, Par7),
+ const Arg2& a2, const Arg3& a3, const Arg4& a4, const Arg5& a5,
+ const Arg6& a6, const Arg7& a7, const Arg8& a8) {
+ return
+ lambda_functor_base<
+ action<8, function_action<8, Result> >,
+ typename detail::bind_tuple_mapper<
+ Result(*)(Par1, Par2, Par3, Par4, Par5, Par6, Par7), const Arg2,
+ const Arg3, const Arg4, const Arg5, const Arg6, const Arg7, const Arg8
+ >::type
+ >
+ ( typename detail::bind_tuple_mapper<
+ Result(*)(Par1, Par2, Par3, Par4, Par5, Par6, Par7), const Arg2,
+ const Arg3, const Arg4, const Arg5, const Arg6, const Arg7, const Arg8
+ >::type
+ (a1, a2, a3, a4, a5, a6, a7, a8)
+ );
+}
+
+
+ #endif
+
+// 9-argument bind functions --------------------------
+#ifndef BOOST_REF_TO_FUNC_CONFLICTS_WITH_REF_TO_T
+template <class Result, class Par1, class Par2, class Par3, class Par4,
+ class Par5, class Par6, class Par7, class Par8, class Arg2,
+ class Arg3, class Arg4, class Arg5, class Arg6, class Arg7,
+ class Arg8, class Arg9>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<9, function_action<9, Result> >,
+ typename detail::bind_tuple_mapper<
+ Result(&)(Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8), const Arg2,
+ const Arg3, const Arg4, const Arg5, const Arg6, const Arg7, const Arg8,
+ const Arg9
+ >::type
+ >
+>
+
+bind(Result(&a1)(Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8),
+ const Arg2& a2, const Arg3& a3, const Arg4& a4, const Arg5& a5,
+ const Arg6& a6, const Arg7& a7, const Arg8& a8, const Arg9& a9) {
+ return
+ lambda_functor_base<
+ action<9, function_action<9, Result> >,
+ typename detail::bind_tuple_mapper<
+ Result(&)(Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8), const Arg2,
+ const Arg3, const Arg4, const Arg5, const Arg6, const Arg7,
+ const Arg8, const Arg9
+ >::type
+ >
+ ( typename detail::bind_tuple_mapper<
+ Result(&)(Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8), const Arg2,
+ const Arg3, const Arg4, const Arg5, const Arg6, const Arg7,
+ const Arg8, const Arg9
+ >::type
+ (a1, a2, a3, a4, a5, a6, a7, a8, a9)
+ );
+}
+#endif
+
+ #ifndef BOOST_LAMBDA_INCORRECT_BIND_OVERLOADING
+template <class Arg1, class Arg2, class Arg3, class Arg4, class Arg5,
+ class Arg6, class Arg7, class Arg8, class Arg9>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<9, function_action<9> >,
+ typename detail::bind_tuple_mapper<
+ const Arg1, const Arg2, const Arg3, const Arg4, const Arg5, const Arg6,
+ const Arg7, const Arg8, const Arg9
+ >::type
+ >
+>
+
+bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4,
+ const Arg5& a5, const Arg6& a6, const Arg7& a7, const Arg8& a8,
+ const Arg9& a9) {
+ return
+ lambda_functor_base<
+ action<9, function_action<9> >,
+ typename detail::bind_tuple_mapper<
+ const Arg1, const Arg2, const Arg3, const Arg4, const Arg5,
+ const Arg6, const Arg7, const Arg8, const Arg9
+ >::type
+ >
+ ( typename detail::bind_tuple_mapper<
+ const Arg1, const Arg2, const Arg3, const Arg4, const Arg5,
+ const Arg6, const Arg7, const Arg8, const Arg9
+ >::type
+ (a1, a2, a3, a4, a5, a6, a7, a8, a9)
+ );
+}
+
+template <class Result, class Arg1, class Arg2, class Arg3, class Arg4,
+ class Arg5, class Arg6, class Arg7, class Arg8, class Arg9>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<9, function_action<9, Result> >,
+ typename detail::bind_tuple_mapper<
+ const Arg1, const Arg2, const Arg3, const Arg4, const Arg5, const Arg6,
+ const Arg7, const Arg8, const Arg9
+ >::type
+ >
+>
+
+bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4,
+ const Arg5& a5, const Arg6& a6, const Arg7& a7, const Arg8& a8,
+ const Arg9& a9) {
+ return
+ lambda_functor_base<
+ action<9, function_action<9, Result> >,
+ typename detail::bind_tuple_mapper<
+ const Arg1, const Arg2, const Arg3, const Arg4, const Arg5,
+ const Arg6, const Arg7, const Arg8, const Arg9
+ >::type
+ >
+ ( typename detail::bind_tuple_mapper<
+ const Arg1, const Arg2, const Arg3, const Arg4, const Arg5,
+ const Arg6, const Arg7, const Arg8, const Arg9
+ >::type
+ (a1, a2, a3, a4, a5, a6, a7, a8, a9)
+ );
+}
+
+
+ #else
+template <class Arg1, class Arg2, class Arg3, class Arg4, class Arg5,
+ class Arg6, class Arg7, class Arg8, class Arg9>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<9, function_action<9> >,
+ typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type, const Arg2, const Arg3,
+ const Arg4, const Arg5, const Arg6, const Arg7, const Arg8, const Arg9
+ >::type
+ >
+>
+
+bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4,
+ const Arg5& a5, const Arg6& a6, const Arg7& a7, const Arg8& a8,
+ const Arg9& a9) {
+ return
+ lambda_functor_base<
+ action<9, function_action<9> >,
+ typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type, const Arg2,
+ const Arg3, const Arg4, const Arg5, const Arg6, const Arg7,
+ const Arg8, const Arg9
+ >::type
+ >
+ ( typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type, const Arg2,
+ const Arg3, const Arg4, const Arg5, const Arg6, const Arg7,
+ const Arg8, const Arg9
+ >::type
+ (a1, a2, a3, a4, a5, a6, a7, a8, a9)
+ );
+}
+
+template <class Result, class Arg1, class Arg2, class Arg3, class Arg4,
+ class Arg5, class Arg6, class Arg7, class Arg8, class Arg9>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<9, function_action<9, Result> >,
+ typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type, const Arg2, const Arg3,
+ const Arg4, const Arg5, const Arg6, const Arg7, const Arg8, const Arg9
+ >::type
+ >
+>
+
+bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4,
+ const Arg5& a5, const Arg6& a6, const Arg7& a7, const Arg8& a8,
+ const Arg9& a9) {
+ return
+ lambda_functor_base<
+ action<9, function_action<9, Result> >,
+ typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type, const Arg2,
+ const Arg3, const Arg4, const Arg5, const Arg6, const Arg7,
+ const Arg8, const Arg9
+ >::type
+ >
+ ( typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type, const Arg2,
+ const Arg3, const Arg4, const Arg5, const Arg6, const Arg7,
+ const Arg8, const Arg9
+ >::type
+ (a1, a2, a3, a4, a5, a6, a7, a8, a9)
+ );
+}
+
+template <class Result, class Par1, class Par2, class Par3, class Par4,
+ class Par5, class Par6, class Par7, class Par8, class Arg2,
+ class Arg3, class Arg4, class Arg5, class Arg6, class Arg7,
+ class Arg8, class Arg9>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<9, function_action<9, Result> >,
+ typename detail::bind_tuple_mapper<
+ Result(*)(Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8), const Arg2,
+ const Arg3, const Arg4, const Arg5, const Arg6, const Arg7, const Arg8,
+ const Arg9
+ >::type
+ >
+>
+
+bind(Result(* const & a1)(Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8),
+ const Arg2& a2, const Arg3& a3, const Arg4& a4, const Arg5& a5,
+ const Arg6& a6, const Arg7& a7, const Arg8& a8, const Arg9& a9) {
+ return
+ lambda_functor_base<
+ action<9, function_action<9, Result> >,
+ typename detail::bind_tuple_mapper<
+ Result(*)(Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8), const Arg2,
+ const Arg3, const Arg4, const Arg5, const Arg6, const Arg7,
+ const Arg8, const Arg9
+ >::type
+ >
+ ( typename detail::bind_tuple_mapper<
+ Result(*)(Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8), const Arg2,
+ const Arg3, const Arg4, const Arg5, const Arg6, const Arg7,
+ const Arg8, const Arg9
+ >::type
+ (a1, a2, a3, a4, a5, a6, a7, a8, a9)
+ );
+}
+
+
+ #endif
+
+// 10-argument bind functions --------------------------
+#ifndef BOOST_REF_TO_FUNC_CONFLICTS_WITH_REF_TO_T
+template <class Result, class Par1, class Par2, class Par3, class Par4,
+ class Par5, class Par6, class Par7, class Par8, class Par9,
+ class Arg2, class Arg3, class Arg4, class Arg5, class Arg6,
+ class Arg7, class Arg8, class Arg9, class Arg10>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<10, function_action<10, Result> >,
+ typename detail::bind_tuple_mapper<
+ Result(&)(Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8, Par9),
+ const Arg2, const Arg3, const Arg4, const Arg5, const Arg6, const Arg7,
+ const Arg8, const Arg9, const Arg10
+ >::type
+ >
+>
+
+bind(Result(&a1)(Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8, Par9),
+ const Arg2& a2, const Arg3& a3, const Arg4& a4, const Arg5& a5,
+ const Arg6& a6, const Arg7& a7, const Arg8& a8, const Arg9& a9,
+ const Arg10& a10) {
+ return
+ lambda_functor_base<
+ action<10, function_action<10, Result> >,
+ typename detail::bind_tuple_mapper<
+ Result(&)(Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8, Par9),
+ const Arg2, const Arg3, const Arg4, const Arg5, const Arg6,
+ const Arg7, const Arg8, const Arg9, const Arg10
+ >::type
+ >
+ ( typename detail::bind_tuple_mapper<
+ Result(&)(Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8, Par9),
+ const Arg2, const Arg3, const Arg4, const Arg5, const Arg6,
+ const Arg7, const Arg8, const Arg9, const Arg10
+ >::type
+ (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
+ );
+}
+#endif
+
+ #ifndef BOOST_LAMBDA_INCORRECT_BIND_OVERLOADING
+template <class Arg1, class Arg2, class Arg3, class Arg4, class Arg5,
+ class Arg6, class Arg7, class Arg8, class Arg9, class Arg10>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<10, function_action<10> >,
+ typename detail::bind_tuple_mapper<
+ const Arg1, const Arg2, const Arg3, const Arg4, const Arg5, const Arg6,
+ const Arg7, const Arg8, const Arg9, const Arg10
+ >::type
+ >
+>
+
+bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4,
+ const Arg5& a5, const Arg6& a6, const Arg7& a7, const Arg8& a8,
+ const Arg9& a9, const Arg10& a10) {
+ return
+ lambda_functor_base<
+ action<10, function_action<10> >,
+ typename detail::bind_tuple_mapper<
+ const Arg1, const Arg2, const Arg3, const Arg4, const Arg5,
+ const Arg6, const Arg7, const Arg8, const Arg9, const Arg10
+ >::type
+ >
+ ( typename detail::bind_tuple_mapper<
+ const Arg1, const Arg2, const Arg3, const Arg4, const Arg5,
+ const Arg6, const Arg7, const Arg8, const Arg9, const Arg10
+ >::type
+ (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
+ );
+}
+
+template <class Result, class Arg1, class Arg2, class Arg3, class Arg4,
+ class Arg5, class Arg6, class Arg7, class Arg8, class Arg9,
+ class Arg10>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<10, function_action<10, Result> >,
+ typename detail::bind_tuple_mapper<
+ const Arg1, const Arg2, const Arg3, const Arg4, const Arg5, const Arg6,
+ const Arg7, const Arg8, const Arg9, const Arg10
+ >::type
+ >
+>
+
+bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4,
+ const Arg5& a5, const Arg6& a6, const Arg7& a7, const Arg8& a8,
+ const Arg9& a9, const Arg10& a10) {
+ return
+ lambda_functor_base<
+ action<10, function_action<10, Result> >,
+ typename detail::bind_tuple_mapper<
+ const Arg1, const Arg2, const Arg3, const Arg4, const Arg5,
+ const Arg6, const Arg7, const Arg8, const Arg9, const Arg10
+ >::type
+ >
+ ( typename detail::bind_tuple_mapper<
+ const Arg1, const Arg2, const Arg3, const Arg4, const Arg5,
+ const Arg6, const Arg7, const Arg8, const Arg9, const Arg10
+ >::type
+ (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
+ );
+}
+
+
+ #else
+template <class Arg1, class Arg2, class Arg3, class Arg4, class Arg5,
+ class Arg6, class Arg7, class Arg8, class Arg9, class Arg10>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<10, function_action<10> >,
+ typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type, const Arg2, const Arg3,
+ const Arg4, const Arg5, const Arg6, const Arg7, const Arg8, const Arg9,
+ const Arg10
+ >::type
+ >
+>
+
+bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4,
+ const Arg5& a5, const Arg6& a6, const Arg7& a7, const Arg8& a8,
+ const Arg9& a9, const Arg10& a10) {
+ return
+ lambda_functor_base<
+ action<10, function_action<10> >,
+ typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type, const Arg2,
+ const Arg3, const Arg4, const Arg5, const Arg6, const Arg7,
+ const Arg8, const Arg9, const Arg10
+ >::type
+ >
+ ( typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type, const Arg2,
+ const Arg3, const Arg4, const Arg5, const Arg6, const Arg7,
+ const Arg8, const Arg9, const Arg10
+ >::type
+ (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
+ );
+}
+
+template <class Result, class Arg1, class Arg2, class Arg3, class Arg4,
+ class Arg5, class Arg6, class Arg7, class Arg8, class Arg9,
+ class Arg10>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<10, function_action<10, Result> >,
+ typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type, const Arg2, const Arg3,
+ const Arg4, const Arg5, const Arg6, const Arg7, const Arg8, const Arg9,
+ const Arg10
+ >::type
+ >
+>
+
+bind(const Arg1& a1, const Arg2& a2, const Arg3& a3, const Arg4& a4,
+ const Arg5& a5, const Arg6& a6, const Arg7& a7, const Arg8& a8,
+ const Arg9& a9, const Arg10& a10) {
+ return
+ lambda_functor_base<
+ action<10, function_action<10, Result> >,
+ typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type, const Arg2,
+ const Arg3, const Arg4, const Arg5, const Arg6, const Arg7,
+ const Arg8, const Arg9, const Arg10
+ >::type
+ >
+ ( typename detail::bind_tuple_mapper<
+ typename detail::constify_non_funcs<Arg1>::type, const Arg2,
+ const Arg3, const Arg4, const Arg5, const Arg6, const Arg7,
+ const Arg8, const Arg9, const Arg10
+ >::type
+ (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
+ );
+}
+
+template <class Result, class Par1, class Par2, class Par3, class Par4,
+ class Par5, class Par6, class Par7, class Par8, class Par9,
+ class Arg2, class Arg3, class Arg4, class Arg5, class Arg6,
+ class Arg7, class Arg8, class Arg9, class Arg10>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<10, function_action<10, Result> >,
+ typename detail::bind_tuple_mapper<
+ Result(*)(Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8, Par9),
+ const Arg2, const Arg3, const Arg4, const Arg5, const Arg6, const Arg7,
+ const Arg8, const Arg9, const Arg10
+ >::type
+ >
+>
+
+bind(Result(* const & a1)(Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8,
+ Par9), const Arg2& a2, const Arg3& a3, const Arg4& a4, const Arg5& a5,
+ const Arg6& a6, const Arg7& a7, const Arg8& a8, const Arg9& a9,
+ const Arg10& a10) {
+ return
+ lambda_functor_base<
+ action<10, function_action<10, Result> >,
+ typename detail::bind_tuple_mapper<
+ Result(*)(Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8, Par9),
+ const Arg2, const Arg3, const Arg4, const Arg5, const Arg6,
+ const Arg7, const Arg8, const Arg9, const Arg10
+ >::type
+ >
+ ( typename detail::bind_tuple_mapper<
+ Result(*)(Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8, Par9),
+ const Arg2, const Arg3, const Arg4, const Arg5, const Arg6,
+ const Arg7, const Arg8, const Arg9, const Arg10
+ >::type
+ (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
+ );
+}
+
+
+ #endif
+
+} // namespace lambda
+} // namespace boost
+
+#endif
diff --git a/boost/boost/lambda/detail/control_constructs_common.hpp b/boost/boost/lambda/detail/control_constructs_common.hpp
new file mode 100644
index 00000000000..4074a85040b
--- /dev/null
+++ b/boost/boost/lambda/detail/control_constructs_common.hpp
@@ -0,0 +1,50 @@
+// Boost Lambda Library -- control_constructs_common.hpp -------------------
+
+// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi@cs.utu.fi)
+// Copyright (C) 2000 Gary Powell (powellg@amazon.com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see www.boost.org
+
+// --------------------------------------------------------------------------
+
+#if !defined(BOOST_CONTROL_CONSTRUCTS_COMMON_HPP)
+#define BOOST_CONTROL_CONSTRUCTS_COMMON_HPP
+
+namespace boost {
+namespace lambda {
+
+ // special types of lambda functors, used with control structures
+ // to guarantee that they are composed correctly.
+
+template<class Tag, class LambdaFunctor>
+class tagged_lambda_functor;
+
+template<class Tag, class Args>
+class tagged_lambda_functor<Tag, lambda_functor<Args> >
+ : public lambda_functor<Args>
+{
+public:
+ tagged_lambda_functor(const Args& a) : lambda_functor<Args>(a) {}
+
+ tagged_lambda_functor(const lambda_functor<Args>& a)
+ : lambda_functor<Args>(a) {}
+
+ // for the no body cases in control structures.
+ tagged_lambda_functor() : lambda_functor<Args>() {}
+};
+
+} // lambda
+} // boost
+
+#endif // BOOST_CONTROL_CONSTRUCTS_COMMON_HPP
+
+
+
+
+
+
+
diff --git a/boost/boost/lambda/detail/control_structures_impl.hpp b/boost/boost/lambda/detail/control_structures_impl.hpp
new file mode 100644
index 00000000000..fd69fa5e817
--- /dev/null
+++ b/boost/boost/lambda/detail/control_structures_impl.hpp
@@ -0,0 +1,550 @@
+// Boost Lambda Library -- control_structures_impl.hpp ---------------------
+
+// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi@cs.utu.fi)
+// Copyright (C) 2000 Gary Powell (powellg@amazon.com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see www.boost.org
+
+// --------------------------------------------------------------------------
+
+#if !defined(BOOST_LAMBDA_CONTROL_CONSTRUCTS_HPP)
+#define BOOST_LAMBDA_CONTROL_CONSTRUCTS_HPP
+
+namespace boost {
+namespace lambda {
+
+// -- void return control actions ----------------------
+
+class forloop_action {};
+class forloop_no_body_action {};
+class ifthen_action {};
+class ifthenelse_action {};
+class whileloop_action {};
+class whileloop_no_body_action {};
+class dowhileloop_action {};
+class dowhileloop_no_body_action {};
+// -- nonvoid return control actions ----------------------
+
+class ifthenelsereturn_action {};
+
+// For loop
+template <class Arg1, class Arg2, class Arg3, class Arg4>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ forloop_action,
+ tuple<lambda_functor<Arg1>, lambda_functor<Arg2>,
+ lambda_functor<Arg3>, lambda_functor<Arg4> >
+ >
+>
+for_loop(const lambda_functor<Arg1>& a1, const lambda_functor<Arg2>& a2,
+ const lambda_functor<Arg3>& a3, const lambda_functor<Arg4>& a4) {
+ return
+ lambda_functor_base<
+ forloop_action,
+ tuple<lambda_functor<Arg1>, lambda_functor<Arg2>,
+ lambda_functor<Arg3>, lambda_functor<Arg4> >
+ >
+ ( tuple<lambda_functor<Arg1>, lambda_functor<Arg2>,
+ lambda_functor<Arg3>, lambda_functor<Arg4> >(a1, a2, a3, a4)
+ );
+}
+
+// No body case.
+template <class Arg1, class Arg2, class Arg3>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ forloop_no_body_action,
+ tuple<lambda_functor<Arg1>, lambda_functor<Arg2>, lambda_functor<Arg3> >
+ >
+>
+for_loop(const lambda_functor<Arg1>& a1, const lambda_functor<Arg2>& a2,
+ const lambda_functor<Arg3>& a3) {
+ return
+ lambda_functor_base<
+ forloop_no_body_action,
+ tuple<lambda_functor<Arg1>, lambda_functor<Arg2>,
+ lambda_functor<Arg3> >
+ >
+ ( tuple<lambda_functor<Arg1>, lambda_functor<Arg2>,
+ lambda_functor<Arg3> >(a1, a2, a3) );
+}
+
+// While loop
+template <class Arg1, class Arg2>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ whileloop_action,
+ tuple<lambda_functor<Arg1>, lambda_functor<Arg2> >
+ >
+>
+while_loop(const lambda_functor<Arg1>& a1, const lambda_functor<Arg2>& a2) {
+ return
+ lambda_functor_base<
+ whileloop_action,
+ tuple<lambda_functor<Arg1>, lambda_functor<Arg2> >
+ >
+ ( tuple<lambda_functor<Arg1>, lambda_functor<Arg2> >(a1, a2));
+}
+
+// No body case.
+template <class Arg1>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ whileloop_no_body_action,
+ tuple<lambda_functor<Arg1> >
+ >
+>
+while_loop(const lambda_functor<Arg1>& a1) {
+ return
+ lambda_functor_base<
+ whileloop_no_body_action,
+ tuple<lambda_functor<Arg1> >
+ >
+ ( tuple<lambda_functor<Arg1> >(a1) );
+}
+
+
+// Do While loop
+template <class Arg1, class Arg2>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ dowhileloop_action,
+ tuple<lambda_functor<Arg1>, lambda_functor<Arg2> >
+ >
+>
+do_while_loop(const lambda_functor<Arg1>& a1, const lambda_functor<Arg2>& a2) {
+ return
+ lambda_functor_base<
+ dowhileloop_action,
+ tuple<lambda_functor<Arg1>, lambda_functor<Arg2> >
+ >
+ ( tuple<lambda_functor<Arg1>, lambda_functor<Arg2> >(a1, a2));
+}
+
+// No body case.
+template <class Arg1>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ dowhileloop_no_body_action,
+ tuple<lambda_functor<Arg1> >
+ >
+>
+do_while_loop(const lambda_functor<Arg1>& a1) {
+ return
+ lambda_functor_base<
+ dowhileloop_no_body_action,
+ tuple<lambda_functor<Arg1> >
+ >
+ ( tuple<lambda_functor<Arg1> >(a1));
+}
+
+
+// If Then
+template <class Arg1, class Arg2>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ ifthen_action,
+ tuple<lambda_functor<Arg1>, lambda_functor<Arg2> >
+ >
+>
+if_then(const lambda_functor<Arg1>& a1, const lambda_functor<Arg2>& a2) {
+ return
+ lambda_functor_base<
+ ifthen_action,
+ tuple<lambda_functor<Arg1>, lambda_functor<Arg2> >
+ >
+ ( tuple<lambda_functor<Arg1>, lambda_functor<Arg2> >(a1, a2) );
+}
+
+// If then else
+
+template <class Arg1, class Arg2, class Arg3>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ ifthenelse_action,
+ tuple<lambda_functor<Arg1>, lambda_functor<Arg2>, lambda_functor<Arg3> >
+ >
+>
+if_then_else(const lambda_functor<Arg1>& a1, const lambda_functor<Arg2>& a2,
+ const lambda_functor<Arg3>& a3) {
+ return
+ lambda_functor_base<
+ ifthenelse_action,
+ tuple<lambda_functor<Arg1>, lambda_functor<Arg2>, lambda_functor<Arg3> >
+ >
+ (tuple<lambda_functor<Arg1>, lambda_functor<Arg2>, lambda_functor<Arg3> >
+ (a1, a2, a3) );
+}
+
+// Our version of operator?:()
+
+template <class Arg1, class Arg2, class Arg3>
+inline const
+ lambda_functor<
+ lambda_functor_base<
+ other_action<ifthenelsereturn_action>,
+ tuple<lambda_functor<Arg1>,
+ typename const_copy_argument<Arg2>::type,
+ typename const_copy_argument<Arg3>::type>
+ >
+>
+if_then_else_return(const lambda_functor<Arg1>& a1,
+ const Arg2 & a2,
+ const Arg3 & a3) {
+ return
+ lambda_functor_base<
+ other_action<ifthenelsereturn_action>,
+ tuple<lambda_functor<Arg1>,
+ typename const_copy_argument<Arg2>::type,
+ typename const_copy_argument<Arg3>::type>
+ > ( tuple<lambda_functor<Arg1>,
+ typename const_copy_argument<Arg2>::type,
+ typename const_copy_argument<Arg3>::type> (a1, a2, a3) );
+}
+
+namespace detail {
+
+// return type specialization for conditional expression begins -----------
+// start reading below and move upwards
+
+// PHASE 6:1
+// check if A is conbertible to B and B to A
+template<int Phase, bool AtoB, bool BtoA, bool SameType, class A, class B>
+struct return_type_2_ifthenelsereturn;
+
+// if A can be converted to B and vice versa -> ambiguous
+template<int Phase, class A, class B>
+struct return_type_2_ifthenelsereturn<Phase, true, true, false, A, B> {
+ typedef
+ detail::return_type_deduction_failure<return_type_2_ifthenelsereturn> type;
+ // ambiguous type in conditional expression
+};
+// if A can be converted to B and vice versa and are of same type
+template<int Phase, class A, class B>
+struct return_type_2_ifthenelsereturn<Phase, true, true, true, A, B> {
+ typedef A type;
+};
+
+
+// A can be converted to B
+template<int Phase, class A, class B>
+struct return_type_2_ifthenelsereturn<Phase, true, false, false, A, B> {
+ typedef B type;
+};
+
+// B can be converted to A
+template<int Phase, class A, class B>
+struct return_type_2_ifthenelsereturn<Phase, false, true, false, A, B> {
+ typedef A type;
+};
+
+// neither can be converted. Then we drop the potential references, and
+// try again
+template<class A, class B>
+struct return_type_2_ifthenelsereturn<1, false, false, false, A, B> {
+ // it is safe to add const, since the result will be an rvalue and thus
+ // const anyway. The const are needed eg. if the types
+ // are 'const int*' and 'void *'. The remaining type should be 'const void*'
+ typedef const typename boost::remove_reference<A>::type plainA;
+ typedef const typename boost::remove_reference<B>::type plainB;
+ // TODO: Add support for volatile ?
+
+ typedef typename
+ return_type_2_ifthenelsereturn<
+ 2,
+ boost::is_convertible<plainA,plainB>::value,
+ boost::is_convertible<plainB,plainA>::value,
+ boost::is_same<plainA,plainB>::value,
+ plainA,
+ plainB>::type type;
+};
+
+// PHASE 6:2
+template<class A, class B>
+struct return_type_2_ifthenelsereturn<2, false, false, false, A, B> {
+ typedef
+ detail::return_type_deduction_failure<return_type_2_ifthenelsereturn> type;
+ // types_do_not_match_in_conditional_expression
+};
+
+
+
+// PHASE 5: now we know that types are not arithmetic.
+template<class A, class B>
+struct non_numeric_types {
+ typedef typename
+ return_type_2_ifthenelsereturn<
+ 1, // phase 1
+ is_convertible<A,B>::value,
+ is_convertible<B,A>::value,
+ is_same<A,B>::value,
+ A,
+ B>::type type;
+};
+
+// PHASE 4 :
+// the base case covers arithmetic types with differing promote codes
+// use the type deduction of arithmetic_actions
+template<int CodeA, int CodeB, class A, class B>
+struct arithmetic_or_not {
+ typedef typename
+ return_type_2<arithmetic_action<plus_action>, A, B>::type type;
+ // plus_action is just a random pick, has to be a concrete instance
+};
+
+// this case covers the case of artihmetic types with the same promote codes.
+// non numeric deduction is used since e.g. integral promotion is not
+// performed with operator ?:
+template<int CodeA, class A, class B>
+struct arithmetic_or_not<CodeA, CodeA, A, B> {
+ typedef typename non_numeric_types<A, B>::type type;
+};
+
+// if either A or B has promote code -1 it is not an arithmetic type
+template<class A, class B>
+struct arithmetic_or_not <-1, -1, A, B> {
+ typedef typename non_numeric_types<A, B>::type type;
+};
+template<int CodeB, class A, class B>
+struct arithmetic_or_not <-1, CodeB, A, B> {
+ typedef typename non_numeric_types<A, B>::type type;
+};
+template<int CodeA, class A, class B>
+struct arithmetic_or_not <CodeA, -1, A, B> {
+ typedef typename non_numeric_types<A, B>::type type;
+};
+
+
+
+
+// PHASE 3 : Are the types same?
+// No, check if they are arithmetic or not
+template <class A, class B>
+struct same_or_not {
+ typedef typename detail::remove_reference_and_cv<A>::type plainA;
+ typedef typename detail::remove_reference_and_cv<B>::type plainB;
+
+ typedef typename
+ arithmetic_or_not<
+ detail::promote_code<plainA>::value,
+ detail::promote_code<plainB>::value,
+ A,
+ B>::type type;
+};
+// Yes, clear.
+template <class A> struct same_or_not<A, A> {
+ typedef A type;
+};
+
+} // detail
+
+// PHASE 2 : Perform first the potential array_to_pointer conversion
+template<class A, class B>
+struct return_type_2<other_action<ifthenelsereturn_action>, A, B> {
+
+ typedef typename detail::array_to_pointer<A>::type A1;
+ typedef typename detail::array_to_pointer<B>::type B1;
+
+ typedef typename
+ boost::add_const<typename detail::same_or_not<A1, B1>::type>::type type;
+};
+
+// PHASE 1 : Deduction is based on the second and third operand
+
+
+// return type specialization for conditional expression ends -----------
+
+
+
+
+// Control loop lambda_functor_base specializations.
+
+// Specialization for for_loop.
+template<class Args>
+class
+lambda_functor_base<forloop_action, Args> {
+public:
+ Args args;
+ template <class T> struct sig { typedef void type; };
+public:
+ explicit lambda_functor_base(const Args& a) : args(a) {}
+
+ template<class RET, CALL_TEMPLATE_ARGS>
+ RET call(CALL_FORMAL_ARGS) const {
+ for(detail::select(boost::tuples::get<0>(args), CALL_ACTUAL_ARGS);
+ detail::select(boost::tuples::get<1>(args), CALL_ACTUAL_ARGS);
+ detail::select(boost::tuples::get<2>(args), CALL_ACTUAL_ARGS))
+
+ detail::select(boost::tuples::get<3>(args), CALL_ACTUAL_ARGS);
+ }
+};
+
+// No body case
+template<class Args>
+class
+lambda_functor_base<forloop_no_body_action, Args> {
+public:
+ Args args;
+ template <class T> struct sig { typedef void type; };
+public:
+ explicit lambda_functor_base(const Args& a) : args(a) {}
+
+ template<class RET, CALL_TEMPLATE_ARGS>
+ RET call(CALL_FORMAL_ARGS) const {
+ for(detail::select(boost::tuples::get<0>(args), CALL_ACTUAL_ARGS);
+ detail::select(boost::tuples::get<1>(args), CALL_ACTUAL_ARGS);
+ detail::select(boost::tuples::get<2>(args), CALL_ACTUAL_ARGS)) {}
+ }
+};
+
+
+// Specialization for while_loop.
+template<class Args>
+class
+lambda_functor_base<whileloop_action, Args> {
+public:
+ Args args;
+ template <class T> struct sig { typedef void type; };
+public:
+ explicit lambda_functor_base(const Args& a) : args(a) {}
+
+ template<class RET, CALL_TEMPLATE_ARGS>
+ RET call(CALL_FORMAL_ARGS) const {
+ while(detail::select(boost::tuples::get<0>(args), CALL_ACTUAL_ARGS))
+
+ detail::select(boost::tuples::get<1>(args), CALL_ACTUAL_ARGS);
+ }
+};
+
+// No body case
+template<class Args>
+class
+lambda_functor_base<whileloop_no_body_action, Args> {
+public:
+ Args args;
+ template <class T> struct sig { typedef void type; };
+public:
+ explicit lambda_functor_base(const Args& a) : args(a) {}
+
+ template<class RET, CALL_TEMPLATE_ARGS>
+ RET call(CALL_FORMAL_ARGS) const {
+ while(detail::select(boost::tuples::get<0>(args), CALL_ACTUAL_ARGS)) {}
+ }
+};
+
+// Specialization for do_while_loop.
+// Note that the first argument is the condition.
+template<class Args>
+class
+lambda_functor_base<dowhileloop_action, Args> {
+public:
+ Args args;
+ template <class T> struct sig { typedef void type; };
+public:
+ explicit lambda_functor_base(const Args& a) : args(a) {}
+
+ template<class RET, CALL_TEMPLATE_ARGS>
+ RET call(CALL_FORMAL_ARGS) const {
+ do {
+ detail::select(boost::tuples::get<1>(args), CALL_ACTUAL_ARGS);
+ } while (detail::select(boost::tuples::get<0>(args), CALL_ACTUAL_ARGS) );
+ }
+};
+
+// No body case
+template<class Args>
+class
+lambda_functor_base<dowhileloop_no_body_action, Args> {
+public:
+ Args args;
+ template <class T> struct sig { typedef void type; };
+public:
+ explicit lambda_functor_base(const Args& a) : args(a) {}
+
+ template<class RET, CALL_TEMPLATE_ARGS>
+ RET call(CALL_FORMAL_ARGS) const {
+ do {} while (detail::select(boost::tuples::get<0>(args), CALL_ACTUAL_ARGS) );
+ }
+};
+
+
+// Specialization for if_then.
+template<class Args>
+class
+lambda_functor_base<ifthen_action, Args> {
+public:
+ Args args;
+ template <class T> struct sig { typedef void type; };
+public:
+ explicit lambda_functor_base(const Args& a) : args(a) {}
+
+ template<class RET, CALL_TEMPLATE_ARGS>
+ RET call(CALL_FORMAL_ARGS) const {
+ if (detail::select(boost::tuples::get<0>(args), CALL_ACTUAL_ARGS)) detail::select(boost::tuples::get<1>(args), CALL_ACTUAL_ARGS);
+ }
+};
+
+// Specialization for if_then_else.
+template<class Args>
+class
+lambda_functor_base<ifthenelse_action, Args> {
+public:
+ Args args;
+ template <class T> struct sig { typedef void type; };
+public:
+ explicit lambda_functor_base(const Args& a) : args(a) {}
+
+ template<class RET, CALL_TEMPLATE_ARGS>
+ RET call(CALL_FORMAL_ARGS) const {
+ if (detail::select(boost::tuples::get<0>(args), CALL_ACTUAL_ARGS))
+ detail::select(boost::tuples::get<1>(args), CALL_ACTUAL_ARGS);
+ else
+ detail::select(boost::tuples::get<2>(args), CALL_ACTUAL_ARGS);
+ }
+};
+
+// Specialization of lambda_functor_base for if_then_else_return.
+template<class Args>
+class
+lambda_functor_base<other_action<ifthenelsereturn_action>, Args> {
+public:
+ Args args;
+
+ template <class SigArgs> struct sig {
+ private:
+ typedef typename detail::nth_return_type_sig<1, Args, SigArgs>::type ret1;
+ typedef typename detail::nth_return_type_sig<2, Args, SigArgs>::type ret2;
+ public:
+ typedef typename return_type_2<
+ other_action<ifthenelsereturn_action>, ret1, ret2
+ >::type type;
+ };
+
+public:
+ explicit lambda_functor_base(const Args& a) : args(a) {}
+
+ template<class RET, CALL_TEMPLATE_ARGS>
+ RET call(CALL_FORMAL_ARGS) const {
+ return (detail::select(boost::tuples::get<0>(args), CALL_ACTUAL_ARGS)) ?
+ detail::select(boost::tuples::get<1>(args), CALL_ACTUAL_ARGS)
+ :
+ detail::select(boost::tuples::get<2>(args), CALL_ACTUAL_ARGS);
+ }
+};
+
+} // lambda
+} // boost
+
+#endif // BOOST_LAMBDA_CONTROL_CONSTRUCTS_HPP
diff --git a/boost/boost/lambda/detail/function_adaptors.hpp b/boost/boost/lambda/detail/function_adaptors.hpp
new file mode 100644
index 00000000000..d0a6acf346e
--- /dev/null
+++ b/boost/boost/lambda/detail/function_adaptors.hpp
@@ -0,0 +1,640 @@
+// Boost Lambda Library - function_adaptors.hpp ----------------------------
+
+// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi@cs.utu.fi)
+//
+// 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)
+//
+// For more information, see www.boost.org
+
+
+#ifndef BOOST_LAMBDA_FUNCTION_ADAPTORS_HPP
+#define BOOST_LAMBDA_FUNCTION_ADAPTORS_HPP
+
+#include "boost/type_traits/same_traits.hpp"
+
+namespace boost {
+namespace lambda {
+
+template <class Func> struct function_adaptor {
+
+ // we do not know the return type off-hand, we must ask it from Func
+ template <class Args> class sig {
+ typedef typename Args::head_type F;
+ typedef typename detail::remove_reference_and_cv<Func>::type plainF;
+ public:
+ // To sig we pass a cons list, where the head is the function object type
+ // itself (potentially cv-qualified)
+ // and the tail contains the types of the actual arguments to be passed
+ // to the function object. The arguments can be cv qualified
+ // as well.
+ typedef typename plainF::template sig<Args>::type type;
+ };
+
+ template<class RET, class A1>
+ static RET apply(A1& a1) {
+ return a1();
+ }
+ template<class RET, class A1, class A2>
+ static RET apply(A1& a1, A2& a2) {
+ return a1(a2);
+ }
+ template<class RET, class A1, class A2, class A3>
+ static RET apply(A1& a1, A2& a2, A3& a3) {
+ return a1(a2, a3);
+ }
+ template<class RET, class A1, class A2, class A3, class A4>
+ static RET apply(A1& a1, A2& a2, A3& a3, A4& a4) {
+ return a1(a2, a3, a4);
+ }
+ template<class RET, class A1, class A2, class A3, class A4, class A5>
+ static RET apply(A1& a1, A2& a2, A3& a3, A4& a4, A5& a5) {
+ return a1(a2, a3, a4, a5);
+ }
+ template<class RET, class A1, class A2, class A3, class A4, class A5, class A6>
+ static RET apply(A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6) {
+ return a1(a2, a3, a4, a5, a6);
+ }
+ template<class RET, class A1, class A2, class A3, class A4, class A5, class A6,
+ class A7>
+ static RET apply(A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6,
+ A7& a7) {
+ return a1(a2, a3, a4, a5, a6, a7);
+ }
+ template<class RET, class A1, class A2, class A3, class A4, class A5, class A6,
+ class A7, class A8>
+ static RET apply(A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6,
+ A7& a7, A8& a8) {
+ return a1(a2, a3, a4, a5, a6, a7, a8);
+ }
+ template<class RET, class A1, class A2, class A3, class A4, class A5, class A6,
+ class A7, class A8, class A9>
+ static RET apply(A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6,
+ A7& a7, A8& a8, A9& a9) {
+ return a1(a2, a3, a4, a5, a6, a7, a8, a9);
+ }
+ template<class RET, class A1, class A2, class A3, class A4, class A5, class A6,
+ class A7, class A8, class A9, class A10>
+ static RET apply(A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6,
+ A7& a7, A8& a8, A9& a9, A10& a10) {
+ return a1(a2, a3, a4, a5, a6, a7, a8, a9, a10);
+ }
+};
+
+template <class Func> struct function_adaptor<const Func>; // error
+
+// -- function adaptors with data member access
+template <class Object, class T>
+struct function_adaptor<T Object::*> {
+
+ // typedef detail::unspecified type;
+
+ // T can have qualifiers and can be a reference type
+ // We get the return type by adding const, if the object through which
+ // the data member is accessed is const, and finally adding a reference
+ template<class Args> class sig {
+ typedef typename boost::tuples::element<1, Args>::type argument_type;
+
+ typedef typename detail::IF<boost::is_const<argument_type>::value,
+ typename boost::add_const<T>::type,
+ T
+ >::RET properly_consted_return_type;
+
+ typedef typename detail::IF<
+ boost::is_volatile<properly_consted_return_type>::value,
+ typename boost::add_volatile<properly_consted_return_type>::type,
+ properly_consted_return_type
+ >::RET properly_cvd_return_type;
+
+
+ public:
+ typedef typename
+ boost::add_reference<properly_cvd_return_type>::type type;
+ };
+
+ template <class RET>
+ static RET apply( T Object::*data, Object& o) {
+ return o.*data;
+ }
+ template <class RET>
+ static RET apply( T Object::*data, const Object& o) {
+ return o.*data;
+ }
+ template <class RET>
+ static RET apply( T Object::*data, volatile Object& o) {
+ return o.*data;
+ }
+ template <class RET>
+ static RET apply( T Object::*data, const volatile Object& o) {
+ return o.*data;
+ }
+ template <class RET>
+ static RET apply( T Object::*data, Object* o) {
+ return o->*data;
+ }
+ template <class RET>
+ static RET apply( T Object::*data, const Object* o) {
+ return o->*data;
+ }
+ template <class RET>
+ static RET apply( T Object::*data, volatile Object* o) {
+ return o->*data;
+ }
+ template <class RET>
+ static RET apply( T Object::*data, const volatile Object* o) {
+ return o->*data;
+ }
+};
+
+// -- function adaptors with 1 argument apply
+
+template <class Result>
+struct function_adaptor<Result (void)> {
+
+ template<class T> struct sig { typedef Result type; };
+ template <class RET>
+ static Result apply(Result (*func)()) {
+ return func();
+ }
+};
+
+template <class Result>
+struct function_adaptor<Result (*)(void)> {
+
+ template<class T> struct sig { typedef Result type; };
+ template <class RET>
+ static Result apply(Result (*func)()) {
+ return func();
+ }
+};
+
+
+// -- function adaptors with 2 argument apply
+template <class Object, class Result>
+struct function_adaptor<Result (Object::*)() const> {
+
+ template<class T> struct sig { typedef Result type; };
+ template <class RET>
+ static Result apply( Result (Object::*func)() const, const Object* o) {
+ return (o->*func)();
+ }
+ template <class RET>
+ static Result apply( Result (Object::*func)() const, const Object& o) {
+ return (o.*func)();
+ }
+};
+
+template <class Object, class Result>
+struct function_adaptor<Result (Object::*)()> {
+
+ template<class T> struct sig { typedef Result type; };
+ template <class RET>
+ static Result apply( Result (Object::*func)(), Object* o) {
+ return (o->*func)();
+ }
+ template <class RET>
+ static Result apply( Result (Object::*func)(), Object& o) {
+ return (o.*func)();
+ }
+};
+
+template <class Arg1, class Result>
+struct function_adaptor<Result (Arg1)> {
+
+ template<class T> struct sig { typedef Result type; };
+ template <class RET, class A1>
+ static Result apply(Result (*func)(Arg1), A1& a1) {
+ return func(a1);
+ }
+};
+
+template <class Arg1, class Result>
+struct function_adaptor<Result (*)(Arg1)> {
+
+ template<class T> struct sig { typedef Result type; };
+ template <class RET, class A1>
+ static Result apply(Result (*func)(Arg1), A1& a1) {
+ return func(a1);
+ }
+};
+
+
+// -- function adaptors with 3 argument apply
+template <class Object, class Arg1, class Result>
+struct function_adaptor<Result (Object::*)(Arg1) const> {
+
+ template<class T> struct sig { typedef Result type; };
+ template <class RET, class A1>
+ static Result apply( Result (Object::*func)(Arg1) const, const Object* o,
+ A1& a1) {
+ return (o->*func)(a1);
+ }
+ template <class RET, class A1>
+ static Result apply( Result (Object::*func)(Arg1) const, const Object& o,
+ A1& a1) {
+ return (o.*func)(a1);
+ }
+};
+
+template <class Object, class Arg1, class Result>
+struct function_adaptor<Result (Object::*)(Arg1)> {
+
+ template<class T> struct sig { typedef Result type; };
+ template <class RET, class A1>
+ static Result apply( Result (Object::*func)(Arg1), Object* o, A1& a1) {
+ return (o->*func)(a1);
+ }
+ template <class RET, class A1>
+ static Result apply( Result (Object::*func)(Arg1), Object& o, A1& a1) {
+ return (o.*func)(a1);
+ }
+};
+
+template <class Arg1, class Arg2, class Result>
+struct function_adaptor<Result (Arg1, Arg2)> {
+
+ template<class T> struct sig { typedef Result type; };
+ template <class RET, class A1, class A2>
+ static Result apply(Result (*func)(Arg1, Arg2), A1& a1, A2& a2) {
+ return func(a1, a2);
+ }
+};
+
+template <class Arg1, class Arg2, class Result>
+struct function_adaptor<Result (*)(Arg1, Arg2)> {
+
+ template<class T> struct sig { typedef Result type; };
+ template <class RET, class A1, class A2>
+ static Result apply(Result (*func)(Arg1, Arg2), A1& a1, A2& a2) {
+ return func(a1, a2);
+ }
+};
+
+
+// -- function adaptors with 4 argument apply
+template <class Object, class Arg1, class Arg2, class Result>
+struct function_adaptor<Result (Object::*)(Arg1, Arg2) const> {
+
+ template<class T> struct sig { typedef Result type; };
+ template <class RET, class A1, class A2>
+ static Result apply( Result (Object::*func)(Arg1, Arg2) const, const Object* o, A1& a1, A2& a2) {
+ return (o->*func)(a1, a2);
+ }
+ template <class RET, class A1, class A2>
+ static Result apply( Result (Object::*func)(Arg1, Arg2) const, const Object& o, A1& a1, A2& a2) {
+ return (o.*func)(a1, a2);
+ }
+};
+
+template <class Object, class Arg1, class Arg2, class Result>
+struct function_adaptor<Result (Object::*)(Arg1, Arg2)> {
+
+ template<class T> struct sig { typedef Result type; };
+ template <class RET, class A1, class A2>
+ static Result apply( Result (Object::*func)(Arg1, Arg2), Object* o, A1& a1, A2& a2) {
+ return (o->*func)(a1, a2);
+ }
+ template <class RET, class A1, class A2>
+ static Result apply( Result (Object::*func)(Arg1, Arg2), Object& o, A1& a1, A2& a2) {
+ return (o.*func)(a1, a2);
+ }
+};
+
+template <class Arg1, class Arg2, class Arg3, class Result>
+struct function_adaptor<Result (Arg1, Arg2, Arg3)> {
+
+ template<class T> struct sig { typedef Result type; };
+ template <class RET, class A1, class A2, class A3>
+ static Result apply(Result (*func)(Arg1, Arg2, Arg3), A1& a1, A2& a2, A3& a3) {
+ return func(a1, a2, a3);
+ }
+};
+
+template <class Arg1, class Arg2, class Arg3, class Result>
+struct function_adaptor<Result (*)(Arg1, Arg2, Arg3)> {
+
+ template<class T> struct sig { typedef Result type; };
+ template <class RET, class A1, class A2, class A3>
+ static Result apply(Result (*func)(Arg1, Arg2, Arg3), A1& a1, A2& a2, A3& a3) {
+ return func(a1, a2, a3);
+ }
+};
+
+
+// -- function adaptors with 5 argument apply
+template <class Object, class Arg1, class Arg2, class Arg3, class Result>
+struct function_adaptor<Result (Object::*)(Arg1, Arg2, Arg3) const> {
+
+ template<class T> struct sig { typedef Result type; };
+ template <class RET, class A1, class A2, class A3>
+ static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3) const, const Object* o, A1& a1, A2& a2, A3& a3) {
+ return (o->*func)(a1, a2, a3);
+ }
+ template <class RET, class A1, class A2, class A3>
+ static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3) const, const Object& o, A1& a1, A2& a2, A3& a3) {
+ return (o.*func)(a1, a2, a3);
+ }
+};
+
+template <class Object, class Arg1, class Arg2, class Arg3, class Result>
+struct function_adaptor<Result (Object::*)(Arg1, Arg2, Arg3)> {
+
+ template<class T> struct sig { typedef Result type; };
+ template <class RET, class A1, class A2, class A3>
+ static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3), Object* o, A1& a1, A2& a2, A3& a3) {
+ return (o->*func)(a1, a2, a3);
+ }
+ template <class RET, class A1, class A2, class A3>
+ static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3), Object& o, A1& a1, A2& a2, A3& a3) {
+ return (o.*func)(a1, a2, a3);
+ }
+};
+
+template <class Arg1, class Arg2, class Arg3, class Arg4, class Result>
+struct function_adaptor<Result (Arg1, Arg2, Arg3, Arg4)> {
+
+ template<class T> struct sig { typedef Result type; };
+ template <class RET, class A1, class A2, class A3, class A4>
+ static Result apply(Result (*func)(Arg1, Arg2, Arg3, Arg4), A1& a1, A2& a2, A3& a3, A4& a4) {
+ return func(a1, a2, a3, a4);
+ }
+};
+
+template <class Arg1, class Arg2, class Arg3, class Arg4, class Result>
+struct function_adaptor<Result (*)(Arg1, Arg2, Arg3, Arg4)> {
+
+ template<class T> struct sig { typedef Result type; };
+ template <class RET, class A1, class A2, class A3, class A4>
+ static Result apply(Result (*func)(Arg1, Arg2, Arg3, Arg4), A1& a1, A2& a2, A3& a3, A4& a4) {
+ return func(a1, a2, a3, a4);
+ }
+};
+
+
+// -- function adaptors with 6 argument apply
+template <class Object, class Arg1, class Arg2, class Arg3, class Arg4, class Result>
+struct function_adaptor<Result (Object::*)(Arg1, Arg2, Arg3, Arg4) const> {
+
+ template<class T> struct sig { typedef Result type; };
+ template <class RET, class A1, class A2, class A3, class A4>
+ static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4) const, const Object* o, A1& a1, A2& a2, A3& a3, A4& a4) {
+ return (o->*func)(a1, a2, a3, a4);
+ }
+ template <class RET, class A1, class A2, class A3, class A4>
+ static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4) const, const Object& o, A1& a1, A2& a2, A3& a3, A4& a4) {
+ return (o.*func)(a1, a2, a3, a4);
+ }
+};
+
+template <class Object, class Arg1, class Arg2, class Arg3, class Arg4, class Result>
+struct function_adaptor<Result (Object::*)(Arg1, Arg2, Arg3, Arg4)> {
+
+ template<class T> struct sig { typedef Result type; };
+ template <class RET, class A1, class A2, class A3, class A4>
+ static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4), Object* o, A1& a1, A2& a2, A3& a3, A4& a4) {
+ return (o->*func)(a1, a2, a3, a4);
+ }
+ template <class RET, class A1, class A2, class A3, class A4>
+ static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4), Object& o, A1& a1, A2& a2, A3& a3, A4& a4) {
+ return (o.*func)(a1, a2, a3, a4);
+ }
+};
+
+template <class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Result>
+struct function_adaptor<Result (Arg1, Arg2, Arg3, Arg4, Arg5)> {
+
+ template<class T> struct sig { typedef Result type; };
+ template <class RET, class A1, class A2, class A3, class A4, class A5>
+ static Result apply(Result (*func)(Arg1, Arg2, Arg3, Arg4, Arg5), A1& a1, A2& a2, A3& a3, A4& a4, A5& a5) {
+ return func(a1, a2, a3, a4, a5);
+ }
+};
+
+template <class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Result>
+struct function_adaptor<Result (*)(Arg1, Arg2, Arg3, Arg4, Arg5)> {
+
+ template<class T> struct sig { typedef Result type; };
+ template <class RET, class A1, class A2, class A3, class A4, class A5>
+ static Result apply(Result (*func)(Arg1, Arg2, Arg3, Arg4, Arg5), A1& a1, A2& a2, A3& a3, A4& a4, A5& a5) {
+ return func(a1, a2, a3, a4, a5);
+ }
+};
+
+
+// -- function adaptors with 7 argument apply
+template <class Object, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Result>
+struct function_adaptor<Result (Object::*)(Arg1, Arg2, Arg3, Arg4, Arg5) const> {
+
+ template<class T> struct sig { typedef Result type; };
+ template <class RET, class A1, class A2, class A3, class A4, class A5>
+ static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4, Arg5) const, const Object* o, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5) {
+ return (o->*func)(a1, a2, a3, a4, a5);
+ }
+ template <class RET, class A1, class A2, class A3, class A4, class A5>
+ static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4, Arg5) const, const Object& o, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5) {
+ return (o.*func)(a1, a2, a3, a4, a5);
+ }
+};
+
+template <class Object, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Result>
+struct function_adaptor<Result (Object::*)(Arg1, Arg2, Arg3, Arg4, Arg5)> {
+
+ template<class T> struct sig { typedef Result type; };
+ template <class RET, class A1, class A2, class A3, class A4, class A5>
+ static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4, Arg5), Object* o, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5) {
+ return (o->*func)(a1, a2, a3, a4, a5);
+ }
+ template <class RET, class A1, class A2, class A3, class A4, class A5>
+ static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4, Arg5), Object& o, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5) {
+ return (o.*func)(a1, a2, a3, a4, a5);
+ }
+};
+
+template <class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Result>
+struct function_adaptor<Result (Arg1, Arg2, Arg3, Arg4, Arg5, Arg6)> {
+
+ template<class T> struct sig { typedef Result type; };
+ template <class RET, class A1, class A2, class A3, class A4, class A5, class A6>
+ static Result apply(Result (*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6), A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6) {
+ return func(a1, a2, a3, a4, a5, a6);
+ }
+};
+
+template <class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Result>
+struct function_adaptor<Result (*)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6)> {
+
+ template<class T> struct sig { typedef Result type; };
+ template <class RET, class A1, class A2, class A3, class A4, class A5, class A6>
+ static Result apply(Result (*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6), A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6) {
+ return func(a1, a2, a3, a4, a5, a6);
+ }
+};
+
+
+// -- function adaptors with 8 argument apply
+template <class Object, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Result>
+struct function_adaptor<Result (Object::*)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6) const> {
+
+ template<class T> struct sig { typedef Result type; };
+ template <class RET, class A1, class A2, class A3, class A4, class A5, class A6>
+ static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6) const, const Object* o, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6) {
+ return (o->*func)(a1, a2, a3, a4, a5, a6);
+ }
+ template <class RET, class A1, class A2, class A3, class A4, class A5, class A6>
+ static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6) const, const Object& o, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6) {
+ return (o.*func)(a1, a2, a3, a4, a5, a6);
+ }
+};
+
+template <class Object, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Result>
+struct function_adaptor<Result (Object::*)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6)> {
+
+ template<class T> struct sig { typedef Result type; };
+ template <class RET, class A1, class A2, class A3, class A4, class A5, class A6>
+ static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6), Object* o, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6) {
+ return (o->*func)(a1, a2, a3, a4, a5, a6);
+ }
+ template <class RET, class A1, class A2, class A3, class A4, class A5, class A6>
+ static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6), Object& o, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6) {
+ return (o.*func)(a1, a2, a3, a4, a5, a6);
+ }
+};
+
+template <class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Result>
+struct function_adaptor<Result (Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7)> {
+
+ template<class T> struct sig { typedef Result type; };
+ template <class RET, class A1, class A2, class A3, class A4, class A5, class A6, class A7>
+ static Result apply(Result (*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7), A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7) {
+ return func(a1, a2, a3, a4, a5, a6, a7);
+ }
+};
+
+template <class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Result>
+struct function_adaptor<Result (*)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7)> {
+
+ template<class T> struct sig { typedef Result type; };
+ template <class RET, class A1, class A2, class A3, class A4, class A5, class A6, class A7>
+ static Result apply(Result (*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7), A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7) {
+ return func(a1, a2, a3, a4, a5, a6, a7);
+ }
+};
+
+
+// -- function adaptors with 9 argument apply
+template <class Object, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Result>
+struct function_adaptor<Result (Object::*)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7) const> {
+
+ template<class T> struct sig { typedef Result type; };
+ template <class RET, class A1, class A2, class A3, class A4, class A5, class A6, class A7>
+ static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7) const, const Object* o, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7) {
+ return (o->*func)(a1, a2, a3, a4, a5, a6, a7);
+ }
+ template <class RET, class A1, class A2, class A3, class A4, class A5, class A6, class A7>
+ static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7) const, const Object& o, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7) {
+ return (o.*func)(a1, a2, a3, a4, a5, a6, a7);
+ }
+};
+
+template <class Object, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Result>
+struct function_adaptor<Result (Object::*)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7)> {
+
+ template<class T> struct sig { typedef Result type; };
+ template <class RET, class A1, class A2, class A3, class A4, class A5, class A6, class A7>
+ static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7), Object* o, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7) {
+ return (o->*func)(a1, a2, a3, a4, a5, a6, a7);
+ }
+ template <class RET, class A1, class A2, class A3, class A4, class A5, class A6, class A7>
+ static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7), Object& o, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7) {
+ return (o.*func)(a1, a2, a3, a4, a5, a6, a7);
+ }
+};
+
+template <class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Arg8, class Result>
+struct function_adaptor<Result (Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8)> {
+
+ template<class T> struct sig { typedef Result type; };
+ template <class RET, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
+ static Result apply(Result (*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8), A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8) {
+ return func(a1, a2, a3, a4, a5, a6, a7, a8);
+ }
+};
+
+template <class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Arg8, class Result>
+struct function_adaptor<Result (*)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8)> {
+
+ template<class T> struct sig { typedef Result type; };
+ template <class RET, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
+ static Result apply(Result (*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8), A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8) {
+ return func(a1, a2, a3, a4, a5, a6, a7, a8);
+ }
+};
+
+
+// -- function adaptors with 10 argument apply
+template <class Object, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Arg8, class Result>
+struct function_adaptor<Result (Object::*)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8) const> {
+
+ template<class T> struct sig { typedef Result type; };
+ template <class RET, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
+ static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8) const, const Object* o, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8) {
+ return (o->*func)(a1, a2, a3, a4, a5, a6, a7, a8);
+ }
+ template <class RET, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
+ static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8) const, const Object& o, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8) {
+ return (o.*func)(a1, a2, a3, a4, a5, a6, a7, a8);
+ }
+};
+
+template <class Object, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Arg8, class Result>
+struct function_adaptor<Result (Object::*)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8)> {
+
+ template<class T> struct sig { typedef Result type; };
+ template <class RET, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
+ static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8), Object* o, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8) {
+ return (o->*func)(a1, a2, a3, a4, a5, a6, a7, a8);
+ }
+ template <class RET, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
+ static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8), Object& o, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8) {
+ return (o.*func)(a1, a2, a3, a4, a5, a6, a7, a8);
+ }
+};
+
+template <class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Arg8, class Arg9, class Result>
+struct function_adaptor<Result (Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9)> {
+
+ template<class T> struct sig { typedef Result type; };
+ template <class RET, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>
+ static Result apply(Result (*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9), A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9) {
+ return func(a1, a2, a3, a4, a5, a6, a7, a8, a9);
+ }
+};
+
+template <class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Arg8, class Arg9, class Result>
+struct function_adaptor<Result (*)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9)> {
+
+ template<class T> struct sig { typedef Result type; };
+ template <class RET, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>
+ static Result apply(Result (*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9), A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9) {
+ return func(a1, a2, a3, a4, a5, a6, a7, a8, a9);
+ }
+};
+
+} // namespace lambda
+} // namespace boost
+
+#endif
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/boost/boost/lambda/detail/is_instance_of.hpp b/boost/boost/lambda/detail/is_instance_of.hpp
new file mode 100644
index 00000000000..e8c9fa530bc
--- /dev/null
+++ b/boost/boost/lambda/detail/is_instance_of.hpp
@@ -0,0 +1,104 @@
+// Boost Lambda Library - is_instance_of.hpp ---------------------
+
+// Copyright (C) 2001 Jaakko Järvi (jaakko.jarvi@cs.utu.fi)
+//
+// 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)
+//
+// For more information, see www.boost.org
+
+// ---------------------------------------------------------------
+
+#ifndef BOOST_LAMBDA_IS_INSTANCE_OF
+#define BOOST_LAMBDA_IS_INSTANCE_OF
+
+#include "boost/config.hpp" // for BOOST_STATIC_CONSTANT
+#include "boost/type_traits/conversion_traits.hpp" // for is_convertible
+#include "boost/preprocessor/enum_shifted_params.hpp"
+#include "boost/preprocessor/repeat_2nd.hpp"
+
+// is_instance_of --------------------------------
+//
+// is_instance_of_n<A, B>::value is true, if type A is
+// an instantiation of a template B, or A derives from an instantiation
+// of template B
+//
+// n is the number of template arguments for B
+//
+// Example:
+// is_instance_of_2<std::istream, basic_stream>::value == true
+
+// The original implementation was somewhat different, with different versions
+// for different compilers. However, there was still a problem
+// with gcc.3.0.2 and 3.0.3 compilers, which didn't think regard
+// is_instance_of_N<...>::value was a constant.
+// John Maddock suggested the way around this problem by building
+// is_instance_of templates using boost::is_convertible.
+// Now we only have one version of is_instance_of templates, which delagate
+// all the nasty compiler tricks to is_convertible.
+
+#define BOOST_LAMBDA_CLASS(z, N,A) BOOST_PP_COMMA_IF(N) class
+#define BOOST_LAMBDA_CLASS_ARG(z, N,A) BOOST_PP_COMMA_IF(N) class A##N
+#define BOOST_LAMBDA_ARG(z, N,A) BOOST_PP_COMMA_IF(N) A##N
+
+#define BOOST_LAMBDA_CLASS_LIST(n, NAME) BOOST_PP_REPEAT(n, BOOST_LAMBDA_CLASS, NAME)
+
+#define BOOST_LAMBDA_CLASS_ARG_LIST(n, NAME) BOOST_PP_REPEAT(n, BOOST_LAMBDA_CLASS_ARG, NAME)
+
+#define BOOST_LAMBDA_ARG_LIST(n, NAME) BOOST_PP_REPEAT(n, BOOST_LAMBDA_ARG, NAME)
+
+namespace boost {
+namespace lambda {
+
+#define BOOST_LAMBDA_IS_INSTANCE_OF_TEMPLATE(INDEX) \
+ \
+namespace detail { \
+ \
+template <template<BOOST_LAMBDA_CLASS_LIST(INDEX,T)> class F> \
+struct BOOST_PP_CAT(conversion_tester_,INDEX) { \
+ template<BOOST_LAMBDA_CLASS_ARG_LIST(INDEX,A)> \
+ BOOST_PP_CAT(conversion_tester_,INDEX) \
+ (const F<BOOST_LAMBDA_ARG_LIST(INDEX,A)>&); \
+}; \
+ \
+} /* end detail */ \
+ \
+template <class From, template <BOOST_LAMBDA_CLASS_LIST(INDEX,T)> class To> \
+struct BOOST_PP_CAT(is_instance_of_,INDEX) \
+{ \
+ private: \
+ typedef ::boost::is_convertible< \
+ From, \
+ BOOST_PP_CAT(detail::conversion_tester_,INDEX)<To> \
+ > helper_type; \
+ \
+public: \
+ BOOST_STATIC_CONSTANT(bool, value = helper_type::value); \
+};
+
+
+#define BOOST_LAMBDA_HELPER(z, N, A) BOOST_LAMBDA_IS_INSTANCE_OF_TEMPLATE( BOOST_PP_INC(N) )
+
+// Generate the traits for 1-4 argument templates
+
+BOOST_PP_REPEAT_2ND(4,BOOST_LAMBDA_HELPER,FOO)
+
+#undef BOOST_LAMBDA_HELPER
+#undef BOOST_LAMBDA_IS_INSTANCE_OF_TEMPLATE
+#undef BOOST_LAMBDA_CLASS
+#undef BOOST_LAMBDA_ARG
+#undef BOOST_LAMBDA_CLASS_ARG
+#undef BOOST_LAMBDA_CLASS_LIST
+#undef BOOST_LAMBDA_ARG_LIST
+#undef BOOST_LAMBDA_CLASS_ARG_LIST
+
+} // lambda
+} // boost
+
+#endif
+
+
+
+
+
diff --git a/boost/boost/lambda/detail/lambda_config.hpp b/boost/boost/lambda/detail/lambda_config.hpp
new file mode 100644
index 00000000000..c59e3da6942
--- /dev/null
+++ b/boost/boost/lambda/detail/lambda_config.hpp
@@ -0,0 +1,48 @@
+// Boost Lambda Library - lambda_config.hpp ------------------------------
+
+// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi@cs.utu.fi)
+//
+// 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)
+//
+// For more information, see www.boost.org
+
+// ---------------------------------------------------------------
+
+#ifndef BOOST_LAMBDA_LAMBDA_CONFIG_HPP
+#define BOOST_LAMBDA_LAMBDA_CONFIG_HPP
+
+// add to boost/config.hpp
+// for now
+
+
+# if defined __GNUC__
+# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+# define BOOST_REF_TO_FUNC_CONFLICTS_WITH_REF_TO_T
+# define BOOST_LAMBDA_INCORRECT_BIND_OVERLOADING
+# endif
+# if (__GNUC__ == 2 && __GNUC_MINOR__ <= 97)
+# define BOOST_NO_TEMPLATED_STREAMS
+# define BOOST_LAMBDA_INCORRECT_BIND_OVERLOADING
+# endif
+# if (__GNUC__ == 2 && __GNUC_MINOR__ <= 95)
+# define BOOST_LAMBDA_FAILS_IN_TEMPLATE_KEYWORD_AFTER_SCOPE_OPER
+# endif
+# endif // __GNUC__
+
+
+#if defined __KCC
+
+#define BOOST_NO_FDECL_TEMPLATES_AS_TEMPLATE_TEMPLATE_PARAMS
+
+#endif // __KCC
+
+#endif
+
+
+
+
+
+
+
diff --git a/boost/boost/lambda/detail/lambda_functor_base.hpp b/boost/boost/lambda/detail/lambda_functor_base.hpp
new file mode 100644
index 00000000000..90f51343892
--- /dev/null
+++ b/boost/boost/lambda/detail/lambda_functor_base.hpp
@@ -0,0 +1,599 @@
+// Boost Lambda Library lambda_functor_base.hpp -----------------------------
+//
+// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi@cs.utu.fi)
+//
+// 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)
+//
+// For more information, see www.boost.org
+
+// ------------------------------------------------------------
+
+#ifndef BOOST_LAMBDA_LAMBDA_FUNCTOR_BASE_HPP
+#define BOOST_LAMBDA_LAMBDA_FUNCTOR_BASE_HPP
+
+namespace boost {
+namespace lambda {
+
+
+ // for return type deductions we wrap bound argument to this class,
+ // which fulfils the base class contract for lambda_functors
+template <class T>
+class identity {
+
+ T elem;
+public:
+
+ typedef T element_t;
+
+ // take all parameters as const references. Note that non-const references
+ // stay as they are.
+ typedef typename boost::add_reference<
+ typename boost::add_const<T>::type
+ >::type par_t;
+
+ explicit identity(par_t t) : elem(t) {}
+
+ template <typename SigArgs>
+ struct sig { typedef element_t type; };
+
+ template<class RET, CALL_TEMPLATE_ARGS>
+ RET call(CALL_FORMAL_ARGS) const { CALL_USE_ARGS; return elem; }
+};
+
+template <class T>
+inline lambda_functor<identity<T&> > var(T& t) { return identity<T&>(t); }
+
+ // for lambda functors, var is an identity operator. It was forbidden
+ // at some point, but we might want to var something that can be a
+ // non-lambda functor or a lambda functor.
+template <class T>
+lambda_functor<T> var(const lambda_functor<T>& t) { return t; }
+
+template <class T> struct var_type {
+ typedef lambda_functor<identity<T&> > type;
+};
+
+
+template <class T>
+inline
+lambda_functor<identity<typename bound_argument_conversion<const T>::type> >
+constant(const T& t) {
+ return identity<typename bound_argument_conversion<const T>::type>(t);
+}
+template <class T>
+lambda_functor<T> constant(const lambda_functor<T>& t) { return t; }
+
+template <class T> struct constant_type {
+ typedef
+ lambda_functor<
+ identity<typename bound_argument_conversion<const T>::type>
+ > type;
+};
+
+
+
+template <class T>
+inline lambda_functor<identity<const T&> > constant_ref(const T& t) {
+ return identity<const T&>(t);
+}
+template <class T>
+lambda_functor<T> constant_ref(const lambda_functor<T>& t) { return t; }
+
+template <class T> struct constant_ref_type {
+ typedef
+ lambda_functor<identity<const T&> > type;
+};
+
+
+
+ // as_lambda_functor turns any types to lambda functors
+ // non-lambda_functors will be bound argument types
+template <class T>
+struct as_lambda_functor {
+ typedef typename
+ detail::remove_reference_and_cv<T>::type plain_T;
+ typedef typename
+ detail::IF<is_lambda_functor<plain_T>::value,
+ plain_T,
+ lambda_functor<
+ identity<typename bound_argument_conversion<T>::type>
+ >
+ >::RET type;
+};
+
+// turns arbitrary objects into lambda functors
+template <class T>
+inline
+lambda_functor<identity<typename bound_argument_conversion<const T>::type> >
+to_lambda_functor(const T& t) {
+ return identity<typename bound_argument_conversion<const T>::type>(t);
+}
+
+template <class T>
+inline lambda_functor<T>
+to_lambda_functor(const lambda_functor<T>& t) {
+ return t;
+}
+
+namespace detail {
+
+
+
+// In a call constify_rvals<T>::go(x)
+// x should be of type T. If T is a non-reference type, do
+// returns x as const reference.
+// Otherwise the type doesn't change.
+// The purpose of this class is to avoid
+// 'cannot bind temporaries to non-const references' errors.
+template <class T> struct constify_rvals {
+ template<class U>
+ static inline const U& go(const U& u) { return u; }
+};
+
+template <class T> struct constify_rvals<T&> {
+ template<class U>
+ static inline U& go(U& u) { return u; }
+};
+
+ // check whether one of the elements of a tuple (cons list) is of type
+ // null_type. Needed, because the compiler goes ahead and instantiates
+ // sig template for nullary case even if the nullary operator() is not
+ // called
+template <class T> struct is_null_type
+{ BOOST_STATIC_CONSTANT(bool, value = false); };
+
+template <> struct is_null_type<null_type>
+{ BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template<class Tuple> struct has_null_type {
+ BOOST_STATIC_CONSTANT(bool, value = (is_null_type<typename Tuple::head_type>::value || has_null_type<typename Tuple::tail_type>::value));
+};
+template<> struct has_null_type<null_type> {
+ BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+
+// helpers -------------------
+
+
+template<class Args, class SigArgs>
+class deduce_argument_types_ {
+ typedef typename as_lambda_functor<typename Args::head_type>::type lf_t;
+ typedef typename lf_t::inherited::template sig<SigArgs>::type el_t;
+public:
+ typedef
+ boost::tuples::cons<
+ el_t,
+ typename deduce_argument_types_<typename Args::tail_type, SigArgs>::type
+ > type;
+};
+
+template<class SigArgs>
+class deduce_argument_types_<null_type, SigArgs> {
+public:
+ typedef null_type type;
+};
+
+
+// // note that tuples cannot have plain function types as elements.
+// // Hence, all other types will be non-const, except references to
+// // functions.
+// template <class T> struct remove_reference_except_from_functions {
+// typedef typename boost::remove_reference<T>::type t;
+// typedef typename detail::IF<boost::is_function<t>::value, T, t>::RET type;
+// };
+
+template<class Args, class SigArgs>
+class deduce_non_ref_argument_types_ {
+ typedef typename as_lambda_functor<typename Args::head_type>::type lf_t;
+ typedef typename lf_t::inherited::template sig<SigArgs>::type el_t;
+public:
+ typedef
+ boost::tuples::cons<
+ // typename detail::remove_reference_except_from_functions<el_t>::type,
+ typename boost::remove_reference<el_t>::type,
+ typename deduce_non_ref_argument_types_<typename Args::tail_type, SigArgs>::type
+ > type;
+};
+
+template<class SigArgs>
+class deduce_non_ref_argument_types_<null_type, SigArgs> {
+public:
+ typedef null_type type;
+};
+
+ // -------------
+
+// take stored Args and Open Args, and return a const list with
+// deduced elements (real return types)
+template<class Args, class SigArgs>
+class deduce_argument_types {
+ typedef typename deduce_argument_types_<Args, SigArgs>::type t1;
+public:
+ typedef typename detail::IF<
+ has_null_type<t1>::value, null_type, t1
+ >::RET type;
+};
+
+// take stored Args and Open Args, and return a const list with
+// deduced elements (references are stripped from the element types)
+
+template<class Args, class SigArgs>
+class deduce_non_ref_argument_types {
+ typedef typename deduce_non_ref_argument_types_<Args, SigArgs>::type t1;
+public:
+ typedef typename detail::IF<
+ has_null_type<t1>::value, null_type, t1
+ >::RET type;
+};
+
+template <int N, class Args, class SigArgs>
+struct nth_return_type_sig {
+ typedef typename
+ as_lambda_functor<
+ typename boost::tuples::element<N, Args>::type
+ // typename tuple_element_as_reference<N, Args>::type
+ >::type lf_type;
+
+ typedef typename lf_type::inherited::template sig<SigArgs>::type type;
+};
+
+template<int N, class Tuple> struct element_or_null {
+ typedef typename boost::tuples::element<N, Tuple>::type type;
+};
+
+template<int N> struct element_or_null<N, null_type> {
+ typedef null_type type;
+};
+
+
+
+
+} // end detail
+
+ // -- lambda_functor base ---------------------
+
+// the explicit_return_type_action case -----------------------------------
+template<class RET, class Args>
+class lambda_functor_base<explicit_return_type_action<RET>, Args>
+{
+public:
+ Args args;
+
+ explicit lambda_functor_base(const Args& a) : args(a) {}
+
+ template <class SigArgs> struct sig { typedef RET type; };
+
+ template<class RET_, CALL_TEMPLATE_ARGS>
+ RET call(CALL_FORMAL_ARGS) const
+ {
+ return detail::constify_rvals<RET>::go(
+ detail::r_select<RET>::go(boost::tuples::get<0>(args), CALL_ACTUAL_ARGS));
+ }
+};
+
+// the protect_action case -----------------------------------
+template<class Args>
+class lambda_functor_base<protect_action, Args>
+{
+public:
+ Args args;
+public:
+
+ explicit lambda_functor_base(const Args& a) : args(a) {}
+
+
+ template<class RET, CALL_TEMPLATE_ARGS>
+ RET call(CALL_FORMAL_ARGS) const
+ {
+ CALL_USE_ARGS;
+ return boost::tuples::get<0>(args);
+ }
+
+ template<class SigArgs> struct sig {
+ // typedef typename detail::tuple_element_as_reference<0, SigArgs>::type type;
+ typedef typename boost::tuples::element<0, Args>::type type;
+ };
+};
+
+// Do nothing --------------------------------------------------------
+class do_nothing_action {};
+
+template<class Args>
+class lambda_functor_base<do_nothing_action, Args> {
+ // Args args;
+public:
+ // explicit lambda_functor_base(const Args& a) {}
+ lambda_functor_base() {}
+
+
+ template<class RET, CALL_TEMPLATE_ARGS> RET call(CALL_FORMAL_ARGS) const {
+ return CALL_USE_ARGS;
+ }
+
+ template<class SigArgs> struct sig { typedef void type; };
+};
+
+
+// These specializations provide a shorter notation to define actions.
+// These lambda_functor_base instances take care of the recursive evaluation
+// of the arguments and pass the evaluated arguments to the apply function
+// of an action class. To make action X work with these classes, one must
+// instantiate the lambda_functor_base as:
+// lambda_functor_base<action<ARITY, X>, Args>
+// Where ARITY is the arity of the apply function in X
+
+// The return type is queried as:
+// return_type_N<X, EvaluatedArgumentTypes>::type
+// for which there must be a specialization.
+
+// Function actions, casts, throws,... all go via these classes.
+
+
+template<class Act, class Args>
+class lambda_functor_base<action<0, Act>, Args>
+{
+public:
+// Args args; not needed
+ explicit lambda_functor_base(const Args& a) {}
+
+ template<class SigArgs> struct sig {
+ typedef typename return_type_N<Act, null_type>::type type;
+ };
+
+ template<class RET, CALL_TEMPLATE_ARGS>
+ RET call(CALL_FORMAL_ARGS) const {
+ CALL_USE_ARGS;
+ return Act::template apply<RET>();
+ }
+};
+
+
+#if defined BOOST_LAMBDA_LAMBDA_FUNCTOR_BASE_FIRST_PART
+#error "Multiple defines of BOOST_LAMBDA_LAMBDA_FUNCTOR_BASE_FIRST_PART"
+#endif
+
+
+#define BOOST_LAMBDA_LAMBDA_FUNCTOR_BASE_FIRST_PART(ARITY) \
+template<class Act, class Args> \
+class lambda_functor_base<action<ARITY, Act>, Args> \
+{ \
+public: \
+ Args args; \
+ \
+ explicit lambda_functor_base(const Args& a) : args(a) {} \
+ \
+ template<class SigArgs> struct sig { \
+ typedef typename \
+ detail::deduce_non_ref_argument_types<Args, SigArgs>::type rets_t; \
+ public: \
+ typedef typename \
+ return_type_N_prot<Act, rets_t>::type type; \
+ }; \
+ \
+ \
+ template<class RET, CALL_TEMPLATE_ARGS> \
+ RET call(CALL_FORMAL_ARGS) const { \
+ using boost::tuples::get; \
+ using detail::constify_rvals; \
+ using detail::r_select; \
+ using detail::element_or_null; \
+ using detail::deduce_argument_types;
+
+BOOST_LAMBDA_LAMBDA_FUNCTOR_BASE_FIRST_PART(1)
+
+ typedef typename
+ deduce_argument_types<Args, tuple<CALL_REFERENCE_TYPES> >::type rets_t;
+ typedef typename element_or_null<0, rets_t>::type rt0;
+
+ return Act::template apply<RET>(
+ constify_rvals<rt0>::go(r_select<rt0>::go(get<0>(args), CALL_ACTUAL_ARGS))
+ );
+ }
+};
+
+
+BOOST_LAMBDA_LAMBDA_FUNCTOR_BASE_FIRST_PART(2)
+
+ typedef typename
+ deduce_argument_types<Args, tuple<CALL_REFERENCE_TYPES> >::type rets_t;
+ typedef typename element_or_null<0, rets_t>::type rt0;
+ typedef typename element_or_null<1, rets_t>::type rt1;
+
+ return Act::template apply<RET>(
+ constify_rvals<rt0>::go(r_select<rt0>::go(get<0>(args), CALL_ACTUAL_ARGS)),
+ constify_rvals<rt1>::go(r_select<rt1>::go(get<1>(args), CALL_ACTUAL_ARGS))
+ );
+ }
+};
+
+BOOST_LAMBDA_LAMBDA_FUNCTOR_BASE_FIRST_PART(3)
+
+ typedef typename
+ deduce_argument_types<Args, tuple<CALL_REFERENCE_TYPES> >::type rets_t;
+
+ typedef typename element_or_null<0, rets_t>::type rt0;
+ typedef typename element_or_null<1, rets_t>::type rt1;
+ typedef typename element_or_null<2, rets_t>::type rt2;
+
+ return Act::template apply<RET>(
+ constify_rvals<rt0>::go(r_select<rt0>::go(get<0>(args), CALL_ACTUAL_ARGS)),
+ constify_rvals<rt1>::go(r_select<rt1>::go(get<1>(args), CALL_ACTUAL_ARGS)),
+ constify_rvals<rt2>::go(r_select<rt2>::go(get<2>(args), CALL_ACTUAL_ARGS))
+ );
+ }
+};
+
+BOOST_LAMBDA_LAMBDA_FUNCTOR_BASE_FIRST_PART(4)
+ typedef typename
+ deduce_argument_types<Args, tuple<CALL_REFERENCE_TYPES> >::type rets_t;
+ typedef typename element_or_null<0, rets_t>::type rt0;
+ typedef typename element_or_null<1, rets_t>::type rt1;
+ typedef typename element_or_null<2, rets_t>::type rt2;
+ typedef typename element_or_null<3, rets_t>::type rt3;
+
+ return Act::template apply<RET>(
+ constify_rvals<rt0>::go(r_select<rt0>::go(get<0>(args), CALL_ACTUAL_ARGS)),
+ constify_rvals<rt1>::go(r_select<rt1>::go(get<1>(args), CALL_ACTUAL_ARGS)),
+ constify_rvals<rt2>::go(r_select<rt2>::go(get<2>(args), CALL_ACTUAL_ARGS)),
+ constify_rvals<rt3>::go(r_select<rt3>::go(get<3>(args), CALL_ACTUAL_ARGS))
+ );
+ }
+};
+
+BOOST_LAMBDA_LAMBDA_FUNCTOR_BASE_FIRST_PART(5)
+ typedef typename
+ deduce_argument_types<Args, tuple<CALL_REFERENCE_TYPES> >::type rets_t;
+ typedef typename element_or_null<0, rets_t>::type rt0;
+ typedef typename element_or_null<1, rets_t>::type rt1;
+ typedef typename element_or_null<2, rets_t>::type rt2;
+ typedef typename element_or_null<3, rets_t>::type rt3;
+ typedef typename element_or_null<4, rets_t>::type rt4;
+
+ return Act::template apply<RET>(
+ constify_rvals<rt0>::go(r_select<rt0>::go(get<0>(args), CALL_ACTUAL_ARGS)),
+ constify_rvals<rt1>::go(r_select<rt1>::go(get<1>(args), CALL_ACTUAL_ARGS)),
+ constify_rvals<rt2>::go(r_select<rt2>::go(get<2>(args), CALL_ACTUAL_ARGS)),
+ constify_rvals<rt3>::go(r_select<rt3>::go(get<3>(args), CALL_ACTUAL_ARGS)),
+ constify_rvals<rt4>::go(r_select<rt4>::go(get<4>(args), CALL_ACTUAL_ARGS))
+ );
+ }
+};
+
+BOOST_LAMBDA_LAMBDA_FUNCTOR_BASE_FIRST_PART(6)
+
+ typedef typename
+ deduce_argument_types<Args, tuple<CALL_REFERENCE_TYPES> >::type rets_t;
+ typedef typename element_or_null<0, rets_t>::type rt0;
+ typedef typename element_or_null<1, rets_t>::type rt1;
+ typedef typename element_or_null<2, rets_t>::type rt2;
+ typedef typename element_or_null<3, rets_t>::type rt3;
+ typedef typename element_or_null<4, rets_t>::type rt4;
+ typedef typename element_or_null<5, rets_t>::type rt5;
+
+
+ return Act::template apply<RET>(
+ constify_rvals<rt0>::go(r_select<rt0>::go(get<0>(args), CALL_ACTUAL_ARGS)),
+ constify_rvals<rt1>::go(r_select<rt1>::go(get<1>(args), CALL_ACTUAL_ARGS)),
+ constify_rvals<rt2>::go(r_select<rt2>::go(get<2>(args), CALL_ACTUAL_ARGS)),
+ constify_rvals<rt3>::go(r_select<rt3>::go(get<3>(args), CALL_ACTUAL_ARGS)),
+ constify_rvals<rt4>::go(r_select<rt4>::go(get<4>(args), CALL_ACTUAL_ARGS)),
+ constify_rvals<rt5>::go(r_select<rt5>::go(get<5>(args), CALL_ACTUAL_ARGS))
+ );
+ }
+};
+
+BOOST_LAMBDA_LAMBDA_FUNCTOR_BASE_FIRST_PART(7)
+ typedef typename
+ deduce_argument_types<Args, tuple<CALL_REFERENCE_TYPES> >::type rets_t;
+ typedef typename element_or_null<0, rets_t>::type rt0;
+ typedef typename element_or_null<1, rets_t>::type rt1;
+ typedef typename element_or_null<2, rets_t>::type rt2;
+ typedef typename element_or_null<3, rets_t>::type rt3;
+ typedef typename element_or_null<4, rets_t>::type rt4;
+ typedef typename element_or_null<5, rets_t>::type rt5;
+ typedef typename element_or_null<6, rets_t>::type rt6;
+
+
+ return Act::template apply<RET>(
+ constify_rvals<rt0>::go(r_select<rt0>::go(get<0>(args), CALL_ACTUAL_ARGS)),
+ constify_rvals<rt1>::go(r_select<rt1>::go(get<1>(args), CALL_ACTUAL_ARGS)),
+ constify_rvals<rt2>::go(r_select<rt2>::go(get<2>(args), CALL_ACTUAL_ARGS)),
+ constify_rvals<rt3>::go(r_select<rt3>::go(get<3>(args), CALL_ACTUAL_ARGS)),
+ constify_rvals<rt4>::go(r_select<rt4>::go(get<4>(args), CALL_ACTUAL_ARGS)),
+ constify_rvals<rt5>::go(r_select<rt5>::go(get<5>(args), CALL_ACTUAL_ARGS)),
+ constify_rvals<rt6>::go(r_select<rt6>::go(get<6>(args), CALL_ACTUAL_ARGS))
+ );
+ }
+};
+
+BOOST_LAMBDA_LAMBDA_FUNCTOR_BASE_FIRST_PART(8)
+ typedef typename
+ deduce_argument_types<Args, tuple<CALL_REFERENCE_TYPES> >::type rets_t;
+ typedef typename element_or_null<0, rets_t>::type rt0;
+ typedef typename element_or_null<1, rets_t>::type rt1;
+ typedef typename element_or_null<2, rets_t>::type rt2;
+ typedef typename element_or_null<3, rets_t>::type rt3;
+ typedef typename element_or_null<4, rets_t>::type rt4;
+ typedef typename element_or_null<5, rets_t>::type rt5;
+ typedef typename element_or_null<6, rets_t>::type rt6;
+ typedef typename element_or_null<7, rets_t>::type rt7;
+
+ return Act::template apply<RET>(
+ constify_rvals<rt0>::go(r_select<rt0>::go(get<0>(args), CALL_ACTUAL_ARGS)),
+ constify_rvals<rt1>::go(r_select<rt1>::go(get<1>(args), CALL_ACTUAL_ARGS)),
+ constify_rvals<rt2>::go(r_select<rt2>::go(get<2>(args), CALL_ACTUAL_ARGS)),
+ constify_rvals<rt3>::go(r_select<rt3>::go(get<3>(args), CALL_ACTUAL_ARGS)),
+ constify_rvals<rt4>::go(r_select<rt4>::go(get<4>(args), CALL_ACTUAL_ARGS)),
+ constify_rvals<rt5>::go(r_select<rt5>::go(get<5>(args), CALL_ACTUAL_ARGS)),
+ constify_rvals<rt6>::go(r_select<rt6>::go(get<6>(args), CALL_ACTUAL_ARGS)),
+ constify_rvals<rt7>::go(r_select<rt7>::go(get<7>(args), CALL_ACTUAL_ARGS))
+ );
+ }
+};
+
+BOOST_LAMBDA_LAMBDA_FUNCTOR_BASE_FIRST_PART(9)
+ typedef typename
+ deduce_argument_types<Args, tuple<CALL_REFERENCE_TYPES> >::type rets_t;
+ typedef typename element_or_null<0, rets_t>::type rt0;
+ typedef typename element_or_null<1, rets_t>::type rt1;
+ typedef typename element_or_null<2, rets_t>::type rt2;
+ typedef typename element_or_null<3, rets_t>::type rt3;
+ typedef typename element_or_null<4, rets_t>::type rt4;
+ typedef typename element_or_null<5, rets_t>::type rt5;
+ typedef typename element_or_null<6, rets_t>::type rt6;
+ typedef typename element_or_null<7, rets_t>::type rt7;
+ typedef typename element_or_null<8, rets_t>::type rt8;
+
+ return Act::template apply<RET>(
+ constify_rvals<rt0>::go(r_select<rt0>::go(get<0>(args), CALL_ACTUAL_ARGS)),
+ constify_rvals<rt1>::go(r_select<rt1>::go(get<1>(args), CALL_ACTUAL_ARGS)),
+ constify_rvals<rt2>::go(r_select<rt2>::go(get<2>(args), CALL_ACTUAL_ARGS)),
+ constify_rvals<rt3>::go(r_select<rt3>::go(get<3>(args), CALL_ACTUAL_ARGS)),
+ constify_rvals<rt4>::go(r_select<rt4>::go(get<4>(args), CALL_ACTUAL_ARGS)),
+ constify_rvals<rt5>::go(r_select<rt5>::go(get<5>(args), CALL_ACTUAL_ARGS)),
+ constify_rvals<rt6>::go(r_select<rt6>::go(get<6>(args), CALL_ACTUAL_ARGS)),
+ constify_rvals<rt7>::go(r_select<rt7>::go(get<7>(args), CALL_ACTUAL_ARGS)),
+ constify_rvals<rt8>::go(r_select<rt8>::go(get<8>(args), CALL_ACTUAL_ARGS))
+ );
+ }
+};
+
+BOOST_LAMBDA_LAMBDA_FUNCTOR_BASE_FIRST_PART(10)
+ typedef typename
+ deduce_argument_types<Args, tuple<CALL_REFERENCE_TYPES> >::type rets_t;
+ typedef typename element_or_null<0, rets_t>::type rt0;
+ typedef typename element_or_null<1, rets_t>::type rt1;
+ typedef typename element_or_null<2, rets_t>::type rt2;
+ typedef typename element_or_null<3, rets_t>::type rt3;
+ typedef typename element_or_null<4, rets_t>::type rt4;
+ typedef typename element_or_null<5, rets_t>::type rt5;
+ typedef typename element_or_null<6, rets_t>::type rt6;
+ typedef typename element_or_null<7, rets_t>::type rt7;
+ typedef typename element_or_null<8, rets_t>::type rt8;
+ typedef typename element_or_null<9, rets_t>::type rt9;
+
+ return Act::template apply<RET>(
+ constify_rvals<rt0>::go(r_select<rt0>::go(get<0>(args), CALL_ACTUAL_ARGS)),
+ constify_rvals<rt1>::go(r_select<rt1>::go(get<1>(args), CALL_ACTUAL_ARGS)),
+ constify_rvals<rt2>::go(r_select<rt2>::go(get<2>(args), CALL_ACTUAL_ARGS)),
+ constify_rvals<rt3>::go(r_select<rt3>::go(get<3>(args), CALL_ACTUAL_ARGS)),
+ constify_rvals<rt4>::go(r_select<rt4>::go(get<4>(args), CALL_ACTUAL_ARGS)),
+ constify_rvals<rt5>::go(r_select<rt5>::go(get<5>(args), CALL_ACTUAL_ARGS)),
+ constify_rvals<rt6>::go(r_select<rt6>::go(get<6>(args), CALL_ACTUAL_ARGS)),
+ constify_rvals<rt7>::go(r_select<rt7>::go(get<7>(args), CALL_ACTUAL_ARGS)),
+ constify_rvals<rt8>::go(r_select<rt8>::go(get<8>(args), CALL_ACTUAL_ARGS)),
+ constify_rvals<rt9>::go(r_select<rt9>::go(get<9>(args), CALL_ACTUAL_ARGS))
+ );
+ }
+};
+
+#undef BOOST_LAMBDA_LAMBDA_FUNCTOR_BASE_FIRST_PART
+
+
+} // namespace lambda
+} // namespace boost
+
+#endif
diff --git a/boost/boost/lambda/detail/lambda_functors.hpp b/boost/boost/lambda/detail/lambda_functors.hpp
new file mode 100644
index 00000000000..bab2ed673d5
--- /dev/null
+++ b/boost/boost/lambda/detail/lambda_functors.hpp
@@ -0,0 +1,212 @@
+// Boost Lambda Library - lambda_functors.hpp -------------------------------
+
+// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi@cs.utu.fi)
+//
+// 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)
+//
+// For more information, see http://www.boost.org
+
+// ------------------------------------------------
+
+#ifndef BOOST_LAMBDA_LAMBDA_FUNCTORS_HPP
+#define BOOST_LAMBDA_LAMBDA_FUNCTORS_HPP
+
+namespace boost {
+namespace lambda {
+
+// -- lambda_functor --------------------------------------------
+// --------------------------------------------------------------
+
+//inline const null_type const_null_type() { return null_type(); }
+
+namespace detail {
+namespace {
+
+ static const null_type constant_null_type = null_type();
+
+} // unnamed
+} // detail
+
+class unused {};
+
+#define cnull_type() detail::constant_null_type
+
+// -- free variables types --------------------------------------------------
+
+ // helper to work around the case where the nullary return type deduction
+ // is always performed, even though the functor is not nullary
+namespace detail {
+ template<int N, class Tuple> struct get_element_or_null_type {
+ typedef typename
+ detail::tuple_element_as_reference<N, Tuple>::type type;
+ };
+ template<int N> struct get_element_or_null_type<N, null_type> {
+ typedef null_type type;
+ };
+}
+
+template <int I> struct placeholder;
+
+template<> struct placeholder<FIRST> {
+
+ template<class SigArgs> struct sig {
+ typedef typename detail::get_element_or_null_type<0, SigArgs>::type type;
+ };
+
+ template<class RET, CALL_TEMPLATE_ARGS>
+ RET call(CALL_FORMAL_ARGS) const {
+ BOOST_STATIC_ASSERT(boost::is_reference<RET>::value);
+ CALL_USE_ARGS; // does nothing, prevents warnings for unused args
+ return a;
+ }
+};
+
+template<> struct placeholder<SECOND> {
+
+ template<class SigArgs> struct sig {
+ typedef typename detail::get_element_or_null_type<1, SigArgs>::type type;
+ };
+
+ template<class RET, CALL_TEMPLATE_ARGS>
+ RET call(CALL_FORMAL_ARGS) const { CALL_USE_ARGS; return b; }
+};
+
+template<> struct placeholder<THIRD> {
+
+ template<class SigArgs> struct sig {
+ typedef typename detail::get_element_or_null_type<2, SigArgs>::type type;
+ };
+
+ template<class RET, CALL_TEMPLATE_ARGS>
+ RET call(CALL_FORMAL_ARGS) const { CALL_USE_ARGS; return c; }
+};
+
+template<> struct placeholder<EXCEPTION> {
+
+ template<class SigArgs> struct sig {
+ typedef typename detail::get_element_or_null_type<3, SigArgs>::type type;
+ };
+
+ template<class RET, CALL_TEMPLATE_ARGS>
+ RET call(CALL_FORMAL_ARGS) const { CALL_USE_ARGS; return env; }
+};
+
+typedef const lambda_functor<placeholder<FIRST> > placeholder1_type;
+typedef const lambda_functor<placeholder<SECOND> > placeholder2_type;
+typedef const lambda_functor<placeholder<THIRD> > placeholder3_type;
+
+
+///////////////////////////////////////////////////////////////////////////////
+
+
+// free variables are lambda_functors. This is to allow uniform handling with
+// other lambda_functors.
+// -------------------------------------------------------------------
+
+
+
+// -- lambda_functor NONE ------------------------------------------------
+template <class T>
+class lambda_functor : public T
+{
+
+BOOST_STATIC_CONSTANT(int, arity_bits = get_arity<T>::value);
+
+public:
+ typedef T inherited;
+
+ lambda_functor() {}
+ lambda_functor(const lambda_functor& l) : inherited(l) {}
+
+ lambda_functor(const T& t) : inherited(t) {}
+
+ template <class SigArgs> struct sig {
+ typedef typename inherited::template
+ sig<typename SigArgs::tail_type>::type type;
+ };
+
+ // Note that this return type deduction template is instantiated, even
+ // if the nullary
+ // operator() is not called at all. One must make sure that it does not fail.
+ typedef typename
+ inherited::template sig<null_type>::type
+ nullary_return_type;
+
+ nullary_return_type operator()() const {
+ return inherited::template
+ call<nullary_return_type>
+ (cnull_type(), cnull_type(), cnull_type(), cnull_type());
+ }
+
+ template<class A>
+ typename inherited::template sig<tuple<A&> >::type
+ operator()(A& a) const {
+ return inherited::template call<
+ typename inherited::template sig<tuple<A&> >::type
+ >(a, cnull_type(), cnull_type(), cnull_type());
+ }
+
+ template<class A, class B>
+ typename inherited::template sig<tuple<A&, B&> >::type
+ operator()(A& a, B& b) const {
+ return inherited::template call<
+ typename inherited::template sig<tuple<A&, B&> >::type
+ >(a, b, cnull_type(), cnull_type());
+ }
+
+ template<class A, class B, class C>
+ typename inherited::template sig<tuple<A&, B&, C&> >::type
+ operator()(A& a, B& b, C& c) const
+ {
+ return inherited::template call<
+ typename inherited::template sig<tuple<A&, B&, C&> >::type
+ >(a, b, c, cnull_type());
+ }
+
+ // for internal calls with env
+ template<CALL_TEMPLATE_ARGS>
+ typename inherited::template sig<tuple<CALL_REFERENCE_TYPES> >::type
+ internal_call(CALL_FORMAL_ARGS) const {
+ return inherited::template
+ call<typename inherited::template
+ sig<tuple<CALL_REFERENCE_TYPES> >::type>(CALL_ACTUAL_ARGS);
+ }
+
+ template<class A>
+ const lambda_functor<lambda_functor_base<
+ other_action<assignment_action>,
+ boost::tuple<lambda_functor,
+ typename const_copy_argument <const A>::type> > >
+ operator=(const A& a) const {
+ return lambda_functor_base<
+ other_action<assignment_action>,
+ boost::tuple<lambda_functor,
+ typename const_copy_argument <const A>::type> >
+ ( boost::tuple<lambda_functor,
+ typename const_copy_argument <const A>::type>(*this, a) );
+ }
+
+ template<class A>
+ const lambda_functor<lambda_functor_base<
+ other_action<subscript_action>,
+ boost::tuple<lambda_functor,
+ typename const_copy_argument <const A>::type> > >
+ operator[](const A& a) const {
+ return lambda_functor_base<
+ other_action<subscript_action>,
+ boost::tuple<lambda_functor,
+ typename const_copy_argument <const A>::type> >
+ ( boost::tuple<lambda_functor,
+ typename const_copy_argument <const A>::type>(*this, a ) );
+ }
+};
+
+
+} // namespace lambda
+} // namespace boost
+
+#endif
+
+
diff --git a/boost/boost/lambda/detail/lambda_fwd.hpp b/boost/boost/lambda/detail/lambda_fwd.hpp
new file mode 100644
index 00000000000..363c364119c
--- /dev/null
+++ b/boost/boost/lambda/detail/lambda_fwd.hpp
@@ -0,0 +1,74 @@
+// lambda_fwd.hpp - Boost Lambda Library -------------------------------
+
+// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi@cs.utu.fi)
+//
+// 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)
+//
+// For more information, see www.boost.org
+
+// -------------------------------------------------------
+
+#ifndef BOOST_LAMBDA_FWD_HPP
+#define BOOST_LAMBDA_FWD_HPP
+
+namespace boost {
+namespace lambda {
+
+namespace detail {
+
+template<class T> struct generate_error;
+
+}
+// -- placeholders --------------------------------------------
+
+template <int I> struct placeholder;
+
+// function_adaptors
+template <class Func>
+struct function_adaptor;
+
+template <int I, class Act> class action;
+
+template <class Base>
+class lambda_functor;
+
+template <class Act, class Args>
+class lambda_functor_base;
+
+} // namespace lambda
+} // namespace boost
+
+
+// #define CALL_TEMPLATE_ARGS class A, class Env
+// #define CALL_FORMAL_ARGS A& a, Env& env
+// #define CALL_ACTUAL_ARGS a, env
+// #define CALL_ACTUAL_ARGS_NO_ENV a
+// #define CALL_REFERENCE_TYPES A&, Env&
+// #define CALL_PLAIN_TYPES A, Env
+#define CALL_TEMPLATE_ARGS class A, class B, class C, class Env
+#define CALL_FORMAL_ARGS A& a, B& b, C& c, Env& env
+#define CALL_ACTUAL_ARGS a, b, c, env
+#define CALL_ACTUAL_ARGS_NO_ENV a, b, c
+#define CALL_REFERENCE_TYPES A&, B&, C&, Env&
+#define CALL_PLAIN_TYPES A, B, C, Env
+
+namespace boost {
+namespace lambda {
+namespace detail {
+
+template<class A1, class A2, class A3, class A4>
+void do_nothing(A1&, A2&, A3&, A4&) {}
+
+} // detail
+} // lambda
+} // boost
+
+// prevent the warnings from unused arguments
+#define CALL_USE_ARGS \
+::boost::lambda::detail::do_nothing(a, b, c, env)
+
+
+
+#endif
diff --git a/boost/boost/lambda/detail/lambda_traits.hpp b/boost/boost/lambda/detail/lambda_traits.hpp
new file mode 100644
index 00000000000..54180a95296
--- /dev/null
+++ b/boost/boost/lambda/detail/lambda_traits.hpp
@@ -0,0 +1,527 @@
+// - lambda_traits.hpp --- Boost Lambda Library ----------------------------
+//
+// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi@cs.utu.fi)
+//
+// 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)
+//
+// For more information, see www.boost.org
+// -------------------------------------------------------------------------
+
+#ifndef BOOST_LAMBDA_LAMBDA_TRAITS_HPP
+#define BOOST_LAMBDA_LAMBDA_TRAITS_HPP
+
+#include "boost/type_traits/transform_traits.hpp"
+#include "boost/type_traits/cv_traits.hpp"
+#include "boost/type_traits/function_traits.hpp"
+#include "boost/type_traits/object_traits.hpp"
+
+namespace boost {
+namespace lambda {
+
+// -- if construct ------------------------------------------------
+// Proposed by Krzysztof Czarnecki and Ulrich Eisenecker
+
+namespace detail {
+
+template <bool If, class Then, class Else> struct IF { typedef Then RET; };
+
+template <class Then, class Else> struct IF<false, Then, Else> {
+ typedef Else RET;
+};
+
+
+// An if construct that doesn't instantiate the non-matching template:
+
+// Called as:
+// IF_type<condition, A, B>::type
+// The matching template must define the typeded 'type'
+// I.e. A::type if condition is true, B::type if condition is false
+// Idea from Vesa Karvonen (from C&E as well I guess)
+template<class T>
+struct IF_type_
+{
+ typedef typename T::type type;
+};
+
+
+template<bool C, class T, class E>
+struct IF_type
+{
+ typedef typename
+ IF_type_<typename IF<C, T, E>::RET >::type type;
+};
+
+// helper that can be used to give typedef T to some type
+template <class T> struct identity_mapping { typedef T type; };
+
+// An if construct for finding an integral constant 'value'
+// Does not instantiate the non-matching branch
+// Called as IF_value<condition, A, B>::value
+// If condition is true A::value must be defined, otherwise B::value
+
+template<class T>
+struct IF_value_
+{
+ BOOST_STATIC_CONSTANT(int, value = T::value);
+};
+
+
+template<bool C, class T, class E>
+struct IF_value
+{
+ BOOST_STATIC_CONSTANT(int, value = (IF_value_<typename IF<C, T, E>::RET>::value));
+};
+
+
+// --------------------------------------------------------------
+
+// removes reference from other than function types:
+template<class T> class remove_reference_if_valid
+{
+
+ typedef typename boost::remove_reference<T>::type plainT;
+public:
+ typedef typename IF<
+ boost::is_function<plainT>::value,
+ T,
+ plainT
+ >::RET type;
+
+};
+
+
+template<class T> struct remove_reference_and_cv {
+ typedef typename boost::remove_cv<
+ typename boost::remove_reference<T>::type
+ >::type type;
+};
+
+
+
+// returns a reference to the element of tuple T
+template<int N, class T> struct tuple_element_as_reference {
+ typedef typename
+ boost::tuples::access_traits<
+ typename boost::tuples::element<N, T>::type
+ >::non_const_type type;
+};
+
+// returns the cv and reverence stripped type of a tuple element
+template<int N, class T> struct tuple_element_stripped {
+ typedef typename
+ remove_reference_and_cv<
+ typename boost::tuples::element<N, T>::type
+ >::type type;
+};
+
+// is_lambda_functor -------------------------------------------------
+
+template <class T> struct is_lambda_functor_ {
+ BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+template <class Arg> struct is_lambda_functor_<lambda_functor<Arg> > {
+ BOOST_STATIC_CONSTANT(bool, value = true);
+};
+
+} // end detail
+
+
+template <class T> struct is_lambda_functor {
+ BOOST_STATIC_CONSTANT(bool,
+ value =
+ detail::is_lambda_functor_<
+ typename detail::remove_reference_and_cv<T>::type
+ >::value);
+};
+
+
+namespace detail {
+
+// -- parameter_traits_ ---------------------------------------------
+
+// An internal parameter type traits class that respects
+// the reference_wrapper class.
+
+// The conversions performed are:
+// references -> compile_time_error
+// T1 -> T2,
+// reference_wrapper<T> -> T&
+// const array -> ref to const array
+// array -> ref to array
+// function -> ref to function
+
+// ------------------------------------------------------------------------
+
+template<class T1, class T2>
+struct parameter_traits_ {
+ typedef T2 type;
+};
+
+// Do not instantiate with reference types
+template<class T, class Any> struct parameter_traits_<T&, Any> {
+ typedef typename
+ generate_error<T&>::
+ parameter_traits_class_instantiated_with_reference_type type;
+};
+
+// Arrays can't be stored as plain types; convert them to references
+template<class T, int n, class Any> struct parameter_traits_<T[n], Any> {
+ typedef T (&type)[n];
+};
+
+template<class T, int n, class Any>
+struct parameter_traits_<const T[n], Any> {
+ typedef const T (&type)[n];
+};
+
+template<class T, int n, class Any>
+struct parameter_traits_<volatile T[n], Any> {
+ typedef volatile T (&type)[n];
+};
+template<class T, int n, class Any>
+struct parameter_traits_<const volatile T[n], Any> {
+ typedef const volatile T (&type)[n];
+};
+
+
+template<class T, class Any>
+struct parameter_traits_<boost::reference_wrapper<T>, Any >{
+ typedef T& type;
+};
+
+template<class T, class Any>
+struct parameter_traits_<const boost::reference_wrapper<T>, Any >{
+ typedef T& type;
+};
+
+template<class T, class Any>
+struct parameter_traits_<volatile boost::reference_wrapper<T>, Any >{
+ typedef T& type;
+};
+
+template<class T, class Any>
+struct parameter_traits_<const volatile boost::reference_wrapper<T>, Any >{
+ typedef T& type;
+};
+
+template<class Any>
+struct parameter_traits_<void, Any> {
+ typedef void type;
+};
+
+template<class Arg, class Any>
+struct parameter_traits_<lambda_functor<Arg>, Any > {
+ typedef lambda_functor<Arg> type;
+};
+
+template<class Arg, class Any>
+struct parameter_traits_<const lambda_functor<Arg>, Any > {
+ typedef lambda_functor<Arg> type;
+};
+
+// Are the volatile versions needed?
+template<class Arg, class Any>
+struct parameter_traits_<volatile lambda_functor<Arg>, Any > {
+ typedef lambda_functor<Arg> type;
+};
+
+template<class Arg, class Any>
+struct parameter_traits_<const volatile lambda_functor<Arg>, Any > {
+ typedef lambda_functor<Arg> type;
+};
+
+} // end namespace detail
+
+
+// ------------------------------------------------------------------------
+// traits classes for lambda expressions (bind functions, operators ...)
+
+// must be instantiated with non-reference types
+
+// The default is const plain type -------------------------
+// const T -> const T,
+// T -> const T,
+// references -> compile_time_error
+// reference_wrapper<T> -> T&
+// array -> const ref array
+template<class T>
+struct const_copy_argument {
+ typedef typename
+ detail::parameter_traits_<
+ T,
+ typename detail::IF<boost::is_function<T>::value, T&, const T>::RET
+ >::type type;
+};
+
+// T may be a function type. Without the IF test, const would be added
+// to a function type, which is illegal.
+
+// all arrays are converted to const.
+// This traits template is used for 'const T&' parameter passing
+// and thus the knowledge of the potential
+// non-constness of an actual argument is lost.
+template<class T, int n> struct const_copy_argument <T[n]> {
+ typedef const T (&type)[n];
+};
+template<class T, int n> struct const_copy_argument <volatile T[n]> {
+ typedef const volatile T (&type)[n];
+};
+
+template<class T>
+struct const_copy_argument<T&> {};
+// do not instantiate with references
+ // typedef typename detail::generate_error<T&>::references_not_allowed type;
+
+
+template<>
+struct const_copy_argument<void> {
+ typedef void type;
+};
+
+
+// Does the same as const_copy_argument, but passes references through as such
+template<class T>
+struct bound_argument_conversion {
+ typedef typename const_copy_argument<T>::type type;
+};
+
+template<class T>
+struct bound_argument_conversion<T&> {
+ typedef T& type;
+};
+
+// The default is non-const reference -------------------------
+// const T -> const T&,
+// T -> T&,
+// references -> compile_time_error
+// reference_wrapper<T> -> T&
+template<class T>
+struct reference_argument {
+ typedef typename detail::parameter_traits_<T, T&>::type type;
+};
+
+template<class T>
+struct reference_argument<T&> {
+ typedef typename detail::generate_error<T&>::references_not_allowed type;
+};
+
+template<class Arg>
+struct reference_argument<lambda_functor<Arg> > {
+ typedef lambda_functor<Arg> type;
+};
+
+template<class Arg>
+struct reference_argument<const lambda_functor<Arg> > {
+ typedef lambda_functor<Arg> type;
+};
+
+// Are the volatile versions needed?
+template<class Arg>
+struct reference_argument<volatile lambda_functor<Arg> > {
+ typedef lambda_functor<Arg> type;
+};
+
+template<class Arg>
+struct reference_argument<const volatile lambda_functor<Arg> > {
+ typedef lambda_functor<Arg> type;
+};
+
+template<>
+struct reference_argument<void> {
+ typedef void type;
+};
+
+namespace detail {
+
+// Array to pointer conversion
+template <class T>
+struct array_to_pointer {
+ typedef T type;
+};
+
+template <class T, int N>
+struct array_to_pointer <const T[N]> {
+ typedef const T* type;
+};
+template <class T, int N>
+struct array_to_pointer <T[N]> {
+ typedef T* type;
+};
+
+template <class T, int N>
+struct array_to_pointer <const T (&) [N]> {
+ typedef const T* type;
+};
+template <class T, int N>
+struct array_to_pointer <T (&) [N]> {
+ typedef T* type;
+};
+
+
+// ---------------------------------------------------------------------------
+// The call_traits for bind
+// Respects the reference_wrapper class.
+
+// These templates are used outside of bind functions as well.
+// the bind_tuple_mapper provides a shorter notation for default
+// bound argument storing semantics, if all arguments are treated
+// uniformly.
+
+// from template<class T> foo(const T& t) : bind_traits<const T>::type
+// from template<class T> foo(T& t) : bind_traits<T>::type
+
+// Conversions:
+// T -> const T,
+// cv T -> cv T,
+// T& -> T&
+// reference_wrapper<T> -> T&
+// const reference_wrapper<T> -> T&
+// array -> const ref array
+
+// make bound arguments const, this is a deliberate design choice, the
+// purpose is to prevent side effects to bound arguments that are stored
+// as copies
+template<class T>
+struct bind_traits {
+ typedef const T type;
+};
+
+template<class T>
+struct bind_traits<T&> {
+ typedef T& type;
+};
+
+// null_types are an exception, we always want to store them as non const
+// so that other templates can assume that null_type is always without const
+template<>
+struct bind_traits<null_type> {
+ typedef null_type type;
+};
+
+// the bind_tuple_mapper, bind_type_generators may
+// introduce const to null_type
+template<>
+struct bind_traits<const null_type> {
+ typedef null_type type;
+};
+
+// Arrays can't be stored as plain types; convert them to references.
+// All arrays are converted to const. This is because bind takes its
+// parameters as const T& and thus the knowledge of the potential
+// non-constness of actual argument is lost.
+template<class T, int n> struct bind_traits <T[n]> {
+ typedef const T (&type)[n];
+};
+
+template<class T, int n>
+struct bind_traits<const T[n]> {
+ typedef const T (&type)[n];
+};
+
+template<class T, int n> struct bind_traits<volatile T[n]> {
+ typedef const volatile T (&type)[n];
+};
+
+template<class T, int n>
+struct bind_traits<const volatile T[n]> {
+ typedef const volatile T (&type)[n];
+};
+
+template<class T>
+struct bind_traits<reference_wrapper<T> >{
+ typedef T& type;
+};
+
+template<class T>
+struct bind_traits<const reference_wrapper<T> >{
+ typedef T& type;
+};
+
+template<>
+struct bind_traits<void> {
+ typedef void type;
+};
+
+
+
+template <
+ class T0 = null_type, class T1 = null_type, class T2 = null_type,
+ class T3 = null_type, class T4 = null_type, class T5 = null_type,
+ class T6 = null_type, class T7 = null_type, class T8 = null_type,
+ class T9 = null_type
+>
+struct bind_tuple_mapper {
+ typedef
+ tuple<typename bind_traits<T0>::type,
+ typename bind_traits<T1>::type,
+ typename bind_traits<T2>::type,
+ typename bind_traits<T3>::type,
+ typename bind_traits<T4>::type,
+ typename bind_traits<T5>::type,
+ typename bind_traits<T6>::type,
+ typename bind_traits<T7>::type,
+ typename bind_traits<T8>::type,
+ typename bind_traits<T9>::type> type;
+};
+
+// bind_traits, except map const T& -> const T
+ // this is needed e.g. in currying. Const reference arguments can
+ // refer to temporaries, so it is not safe to store them as references.
+ template <class T> struct remove_const_reference {
+ typedef typename bind_traits<T>::type type;
+ };
+
+ template <class T> struct remove_const_reference<const T&> {
+ typedef const T type;
+ };
+
+
+// maps the bind argument types to the resulting lambda functor type
+template <
+ class T0 = null_type, class T1 = null_type, class T2 = null_type,
+ class T3 = null_type, class T4 = null_type, class T5 = null_type,
+ class T6 = null_type, class T7 = null_type, class T8 = null_type,
+ class T9 = null_type
+>
+class bind_type_generator {
+
+ typedef typename
+ detail::bind_tuple_mapper<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9
+ >::type args_t;
+
+ BOOST_STATIC_CONSTANT(int, nof_elems = boost::tuples::length<args_t>::value);
+
+ typedef
+ action<
+ nof_elems,
+ function_action<nof_elems>
+ > action_type;
+
+public:
+ typedef
+ lambda_functor<
+ lambda_functor_base<
+ action_type,
+ args_t
+ >
+ > type;
+
+};
+
+
+
+} // detail
+
+template <class T> inline const T& make_const(const T& t) { return t; }
+
+
+} // end of namespace lambda
+} // end of namespace boost
+
+
+
+#endif // BOOST_LAMBDA_TRAITS_HPP
diff --git a/boost/boost/lambda/detail/member_ptr.hpp b/boost/boost/lambda/detail/member_ptr.hpp
new file mode 100644
index 00000000000..f2ff22bcc5e
--- /dev/null
+++ b/boost/boost/lambda/detail/member_ptr.hpp
@@ -0,0 +1,737 @@
+// Boost Lambda Library -- member_ptr.hpp ---------------------
+
+// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi@cs.utu.fi)
+// Copyright (C) 2000 Gary Powell (gary.powell@sierra.com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see www.boost.org
+
+// --------------------------------------------------------------------------
+
+#if !defined(BOOST_LAMBDA_MEMBER_PTR_HPP)
+#define BOOST_LAMBDA_MEMBER_PTR_HPP
+
+namespace boost {
+namespace lambda {
+
+
+class member_pointer_action {};
+
+
+namespace detail {
+
+// the boost type_traits member_pointer traits are not enough,
+// need to know more details.
+template<class T>
+struct member_pointer {
+ typedef typename boost::add_reference<T>::type type;
+ typedef detail::unspecified class_type;
+ typedef detail::unspecified qualified_class_type;
+ BOOST_STATIC_CONSTANT(bool, is_data_member = false);
+ BOOST_STATIC_CONSTANT(bool, is_function_member = false);
+};
+
+template<class T, class U>
+struct member_pointer<T U::*> {
+ typedef typename boost::add_reference<T>::type type;
+ typedef U class_type;
+ typedef U qualified_class_type;
+ BOOST_STATIC_CONSTANT(bool, is_data_member = true);
+ BOOST_STATIC_CONSTANT(bool, is_function_member = false);
+};
+
+template<class T, class U>
+struct member_pointer<const T U::*> {
+ typedef typename boost::add_reference<const T>::type type;
+ typedef U class_type;
+ typedef const U qualified_class_type;
+ BOOST_STATIC_CONSTANT(bool, is_data_member = true);
+ BOOST_STATIC_CONSTANT(bool, is_function_member = false);
+};
+
+template<class T, class U>
+struct member_pointer<volatile T U::*> {
+ typedef typename boost::add_reference<volatile T>::type type;
+ typedef U class_type;
+ typedef volatile U qualified_class_type;
+ BOOST_STATIC_CONSTANT(bool, is_data_member = true);
+ BOOST_STATIC_CONSTANT(bool, is_function_member = false);
+};
+
+template<class T, class U>
+struct member_pointer<const volatile T U::*> {
+ typedef typename boost::add_reference<const volatile T>::type type;
+ typedef U class_type;
+ typedef const volatile U qualified_class_type;
+ BOOST_STATIC_CONSTANT(bool, is_data_member = true);
+ BOOST_STATIC_CONSTANT(bool, is_function_member = false);
+};
+
+// -- nonconst member functions --
+template<class T, class U>
+struct member_pointer<T (U::*)()> {
+ typedef T type;
+ typedef U class_type;
+ typedef U qualified_class_type;
+ BOOST_STATIC_CONSTANT(bool, is_data_member = false);
+ BOOST_STATIC_CONSTANT(bool, is_function_member = true);
+};
+template<class T, class U, class A1>
+struct member_pointer<T (U::*)(A1)> {
+ typedef T type;
+ typedef U class_type;
+ typedef U qualified_class_type;
+ BOOST_STATIC_CONSTANT(bool, is_data_member = false);
+ BOOST_STATIC_CONSTANT(bool, is_function_member = true);
+};
+template<class T, class U, class A1, class A2>
+struct member_pointer<T (U::*)(A1, A2)> {
+ typedef T type;
+ typedef U class_type;
+ typedef U qualified_class_type;
+ BOOST_STATIC_CONSTANT(bool, is_data_member = false);
+ BOOST_STATIC_CONSTANT(bool, is_function_member = true);
+};
+template<class T, class U, class A1, class A2, class A3>
+struct member_pointer<T (U::*)(A1, A2, A3)> {
+ typedef T type;
+ typedef U class_type;
+ typedef U qualified_class_type;
+ BOOST_STATIC_CONSTANT(bool, is_data_member = false);
+ BOOST_STATIC_CONSTANT(bool, is_function_member = true);
+};
+template<class T, class U, class A1, class A2, class A3, class A4>
+struct member_pointer<T (U::*)(A1, A2, A3, A4)> {
+ typedef T type;
+ typedef U class_type;
+ typedef U qualified_class_type;
+ BOOST_STATIC_CONSTANT(bool, is_data_member = false);
+ BOOST_STATIC_CONSTANT(bool, is_function_member = true);
+};
+template<class T, class U, class A1, class A2, class A3, class A4, class A5>
+struct member_pointer<T (U::*)(A1, A2, A3, A4, A5)> {
+ typedef T type;
+ typedef U class_type;
+ typedef U qualified_class_type;
+ BOOST_STATIC_CONSTANT(bool, is_data_member = false);
+ BOOST_STATIC_CONSTANT(bool, is_function_member = true);
+};
+template<class T, class U, class A1, class A2, class A3, class A4, class A5,
+ class A6>
+struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6)> {
+ typedef T type;
+ typedef U class_type;
+ typedef U qualified_class_type;
+ BOOST_STATIC_CONSTANT(bool, is_data_member = false);
+ BOOST_STATIC_CONSTANT(bool, is_function_member = true);
+};
+template<class T, class U, class A1, class A2, class A3, class A4, class A5,
+ class A6, class A7>
+struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6, A7)> {
+ typedef T type;
+ typedef U class_type;
+ typedef U qualified_class_type;
+ BOOST_STATIC_CONSTANT(bool, is_data_member = false);
+ BOOST_STATIC_CONSTANT(bool, is_function_member = true);
+};
+template<class T, class U, class A1, class A2, class A3, class A4, class A5,
+ class A6, class A7, class A8>
+struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6, A7, A8)> {
+ typedef T type;
+ typedef U class_type;
+ typedef U qualified_class_type;
+ BOOST_STATIC_CONSTANT(bool, is_data_member = false);
+ BOOST_STATIC_CONSTANT(bool, is_function_member = true);
+};
+template<class T, class U, class A1, class A2, class A3, class A4, class A5,
+ class A6, class A7, class A8, class A9>
+struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6, A7, A8, A9)> {
+ typedef T type;
+ typedef U class_type;
+ typedef U qualified_class_type;
+ BOOST_STATIC_CONSTANT(bool, is_data_member = false);
+ BOOST_STATIC_CONSTANT(bool, is_function_member = true);
+};
+// -- const member functions --
+template<class T, class U>
+struct member_pointer<T (U::*)() const> {
+ typedef T type;
+ typedef U class_type;
+ typedef const U qualified_class_type;
+ BOOST_STATIC_CONSTANT(bool, is_data_member = false);
+ BOOST_STATIC_CONSTANT(bool, is_function_member = true);
+};
+template<class T, class U, class A1>
+struct member_pointer<T (U::*)(A1) const> {
+ typedef T type;
+ typedef U class_type;
+ typedef const U qualified_class_type;
+ BOOST_STATIC_CONSTANT(bool, is_data_member = false);
+ BOOST_STATIC_CONSTANT(bool, is_function_member = true);
+};
+template<class T, class U, class A1, class A2>
+struct member_pointer<T (U::*)(A1, A2) const> {
+ typedef T type;
+ typedef U class_type;
+ typedef const U qualified_class_type;
+ BOOST_STATIC_CONSTANT(bool, is_data_member = false);
+ BOOST_STATIC_CONSTANT(bool, is_function_member = true);
+};
+template<class T, class U, class A1, class A2, class A3>
+struct member_pointer<T (U::*)(A1, A2, A3) const> {
+ typedef T type;
+ typedef U class_type;
+ typedef const U qualified_class_type;
+ BOOST_STATIC_CONSTANT(bool, is_data_member = false);
+ BOOST_STATIC_CONSTANT(bool, is_function_member = true);
+};
+template<class T, class U, class A1, class A2, class A3, class A4>
+struct member_pointer<T (U::*)(A1, A2, A3, A4) const> {
+ typedef T type;
+ typedef U class_type;
+ typedef const U qualified_class_type;
+ BOOST_STATIC_CONSTANT(bool, is_data_member = false);
+ BOOST_STATIC_CONSTANT(bool, is_function_member = true);
+};
+template<class T, class U, class A1, class A2, class A3, class A4, class A5>
+struct member_pointer<T (U::*)(A1, A2, A3, A4, A5) const> {
+ typedef T type;
+ typedef U class_type;
+ typedef const U qualified_class_type;
+ BOOST_STATIC_CONSTANT(bool, is_data_member = false);
+ BOOST_STATIC_CONSTANT(bool, is_function_member = true);
+};
+template<class T, class U, class A1, class A2, class A3, class A4, class A5,
+ class A6>
+struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6) const> {
+ typedef T type;
+ typedef U class_type;
+ typedef const U qualified_class_type;
+ BOOST_STATIC_CONSTANT(bool, is_data_member = false);
+ BOOST_STATIC_CONSTANT(bool, is_function_member = true);
+};
+template<class T, class U, class A1, class A2, class A3, class A4, class A5,
+ class A6, class A7>
+struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6, A7) const> {
+ typedef T type;
+ typedef U class_type;
+ typedef const U qualified_class_type;
+ BOOST_STATIC_CONSTANT(bool, is_data_member = false);
+ BOOST_STATIC_CONSTANT(bool, is_function_member = true);
+};
+template<class T, class U, class A1, class A2, class A3, class A4, class A5,
+ class A6, class A7, class A8>
+struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6, A7, A8) const> {
+ typedef T type;
+ typedef U class_type;
+ typedef const U qualified_class_type;
+ BOOST_STATIC_CONSTANT(bool, is_data_member = false);
+ BOOST_STATIC_CONSTANT(bool, is_function_member = true);
+};
+template<class T, class U, class A1, class A2, class A3, class A4, class A5,
+ class A6, class A7, class A8, class A9>
+struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6, A7, A8, A9) const> {
+ typedef T type;
+ typedef U class_type;
+ typedef const U qualified_class_type;
+ BOOST_STATIC_CONSTANT(bool, is_data_member = false);
+ BOOST_STATIC_CONSTANT(bool, is_function_member = true);
+};
+ // -- volatile --
+template<class T, class U>
+struct member_pointer<T (U::*)() volatile> {
+ typedef T type;
+ typedef U class_type;
+ typedef volatile U qualified_class_type;
+ BOOST_STATIC_CONSTANT(bool, is_data_member = false);
+ BOOST_STATIC_CONSTANT(bool, is_function_member = true);
+};
+template<class T, class U, class A1>
+struct member_pointer<T (U::*)(A1) volatile> {
+ typedef T type;
+ typedef U class_type;
+ typedef volatile U qualified_class_type;
+ BOOST_STATIC_CONSTANT(bool, is_data_member = false);
+ BOOST_STATIC_CONSTANT(bool, is_function_member = true);
+};
+template<class T, class U, class A1, class A2>
+struct member_pointer<T (U::*)(A1, A2) volatile> {
+ typedef T type;
+ typedef U class_type;
+ typedef volatile U qualified_class_type;
+ BOOST_STATIC_CONSTANT(bool, is_data_member = false);
+ BOOST_STATIC_CONSTANT(bool, is_function_member = true);
+};
+template<class T, class U, class A1, class A2, class A3>
+struct member_pointer<T (U::*)(A1, A2, A3) volatile> {
+ typedef T type;
+ typedef U class_type;
+ typedef volatile U qualified_class_type;
+ BOOST_STATIC_CONSTANT(bool, is_data_member = false);
+ BOOST_STATIC_CONSTANT(bool, is_function_member = true);
+};
+template<class T, class U, class A1, class A2, class A3, class A4>
+struct member_pointer<T (U::*)(A1, A2, A3, A4) volatile> {
+ typedef T type;
+ typedef U class_type;
+ typedef volatile U qualified_class_type;
+ BOOST_STATIC_CONSTANT(bool, is_data_member = false);
+ BOOST_STATIC_CONSTANT(bool, is_function_member = true);
+};
+template<class T, class U, class A1, class A2, class A3, class A4, class A5>
+struct member_pointer<T (U::*)(A1, A2, A3, A4, A5) volatile> {
+ typedef T type;
+ typedef U class_type;
+ typedef volatile U qualified_class_type;
+ BOOST_STATIC_CONSTANT(bool, is_data_member = false);
+ BOOST_STATIC_CONSTANT(bool, is_function_member = true);
+};
+template<class T, class U, class A1, class A2, class A3, class A4, class A5,
+ class A6>
+struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6) volatile> {
+ typedef T type;
+ typedef U class_type;
+ typedef volatile U qualified_class_type;
+ BOOST_STATIC_CONSTANT(bool, is_data_member = false);
+ BOOST_STATIC_CONSTANT(bool, is_function_member = true);
+};
+template<class T, class U, class A1, class A2, class A3, class A4, class A5,
+ class A6, class A7>
+struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6, A7) volatile> {
+ typedef T type;
+ typedef U class_type;
+ typedef volatile U qualified_class_type;
+ BOOST_STATIC_CONSTANT(bool, is_data_member = false);
+ BOOST_STATIC_CONSTANT(bool, is_function_member = true);
+};
+template<class T, class U, class A1, class A2, class A3, class A4, class A5,
+ class A6, class A7, class A8>
+struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6, A7, A8) volatile> {
+ typedef T type;
+ typedef U class_type;
+ typedef volatile U qualified_class_type;
+ BOOST_STATIC_CONSTANT(bool, is_data_member = false);
+ BOOST_STATIC_CONSTANT(bool, is_function_member = true);
+};
+template<class T, class U, class A1, class A2, class A3, class A4, class A5,
+ class A6, class A7, class A8, class A9>
+struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6, A7, A8, A9) volatile> {
+ typedef T type;
+ typedef U class_type;
+ typedef volatile U qualified_class_type;
+ BOOST_STATIC_CONSTANT(bool, is_data_member = false);
+ BOOST_STATIC_CONSTANT(bool, is_function_member = true);
+};
+ // -- const volatile
+template<class T, class U>
+struct member_pointer<T (U::*)() const volatile> {
+ typedef T type;
+ typedef U class_type;
+ typedef const volatile U qualified_class_type;
+ BOOST_STATIC_CONSTANT(bool, is_data_member = false);
+ BOOST_STATIC_CONSTANT(bool, is_function_member = true);
+};
+template<class T, class U, class A1>
+struct member_pointer<T (U::*)(A1) const volatile> {
+ typedef T type;
+ typedef U class_type;
+ typedef const volatile U qualified_class_type;
+ BOOST_STATIC_CONSTANT(bool, is_data_member = false);
+ BOOST_STATIC_CONSTANT(bool, is_function_member = true);
+};
+template<class T, class U, class A1, class A2>
+struct member_pointer<T (U::*)(A1, A2) const volatile> {
+ typedef T type;
+ typedef U class_type;
+ typedef const volatile U qualified_class_type;
+ BOOST_STATIC_CONSTANT(bool, is_data_member = false);
+ BOOST_STATIC_CONSTANT(bool, is_function_member = true);
+};
+template<class T, class U, class A1, class A2, class A3>
+struct member_pointer<T (U::*)(A1, A2, A3) const volatile> {
+ typedef T type;
+ typedef U class_type;
+ typedef const volatile U qualified_class_type;
+ BOOST_STATIC_CONSTANT(bool, is_data_member = false);
+ BOOST_STATIC_CONSTANT(bool, is_function_member = true);
+};
+template<class T, class U, class A1, class A2, class A3, class A4>
+struct member_pointer<T (U::*)(A1, A2, A3, A4) const volatile> {
+ typedef T type;
+ typedef U class_type;
+ typedef const volatile U qualified_class_type;
+};
+template<class T, class U, class A1, class A2, class A3, class A4, class A5>
+struct member_pointer<T (U::*)(A1, A2, A3, A4, A5) const volatile> {
+ typedef T type;
+ typedef U class_type;
+ typedef const volatile U qualified_class_type;
+ BOOST_STATIC_CONSTANT(bool, is_data_member = false);
+ BOOST_STATIC_CONSTANT(bool, is_function_member = true);
+};
+template<class T, class U, class A1, class A2, class A3, class A4, class A5,
+ class A6>
+struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6) const volatile> {
+ typedef T type;
+ typedef U class_type;
+ typedef const volatile U qualified_class_type;
+ BOOST_STATIC_CONSTANT(bool, is_data_member = false);
+ BOOST_STATIC_CONSTANT(bool, is_function_member = true);
+};
+template<class T, class U, class A1, class A2, class A3, class A4, class A5,
+ class A6, class A7>
+struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6, A7) const volatile> {
+ typedef T type;
+ typedef U class_type;
+ typedef const volatile U qualified_class_type;
+ BOOST_STATIC_CONSTANT(bool, is_data_member = false);
+ BOOST_STATIC_CONSTANT(bool, is_function_member = true);
+};
+template<class T, class U, class A1, class A2, class A3, class A4, class A5,
+ class A6, class A7, class A8>
+struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6, A7, A8) const volatile> {
+ typedef T type;
+ typedef U class_type;
+ typedef const volatile U qualified_class_type;
+ BOOST_STATIC_CONSTANT(bool, is_data_member = false);
+ BOOST_STATIC_CONSTANT(bool, is_function_member = true);
+};
+template<class T, class U, class A1, class A2, class A3, class A4, class A5,
+ class A6, class A7, class A8, class A9>
+struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6, A7, A8, A9) const volatile> {
+ typedef T type;
+ typedef U class_type;
+ typedef const volatile U qualified_class_type;
+ BOOST_STATIC_CONSTANT(bool, is_data_member = false);
+ BOOST_STATIC_CONSTANT(bool, is_function_member = true);
+};
+
+} // detail
+
+namespace detail {
+
+ // this class holds a pointer to a member function and the object.
+ // when called, it just calls the member function with the parameters
+ // provided
+
+ // It would have been possible to use existing lambda_functors to represent
+ // a bound member function like this, but to have a separate template is
+ // safer, since now this functor doesn't mix and match with lambda_functors
+ // only thing you can do with this is to call it
+
+ // note that previously instantiated classes
+ // (other_action<member_pointer_action> and member_pointer_action_helper
+ // guarantee, that A and B are
+ // such types, that for objects a and b of corresponding types, a->*b leads
+ // to the builtin ->* to be called. So types that would end in a call to
+ // a user defined ->* do not create a member_pointer_caller object.
+
+template<class RET, class A, class B>
+class member_pointer_caller {
+ A a; B b;
+
+public:
+ member_pointer_caller(const A& aa, const B& bb) : a(aa), b(bb) {}
+
+ RET operator()() const { return (a->*b)(); }
+
+ template<class A1>
+ RET operator()(const A1& a1) const { return (a->*b)(a1); }
+
+ template<class A1, class A2>
+ RET operator()(const A1& a1, const A2& a2) const { return (a->*b)(a1, a2); }
+
+ template<class A1, class A2, class A3>
+ RET operator()(const A1& a1, const A2& a2, const A3& a3) const {
+ return (a->*b)(a1, a2, a3);
+ }
+
+ template<class A1, class A2, class A3, class A4>
+ RET operator()(const A1& a1, const A2& a2, const A3& a3,
+ const A4& a4) const {
+ return (a->*b)(a1, a2, a3, a4);
+ }
+
+ template<class A1, class A2, class A3, class A4, class A5>
+ RET operator()(const A1& a1, const A2& a2, const A3& a3, const A4& a4,
+ const A5& a5) const {
+ return (a->*b)(a1, a2, a3, a4, a5);
+ }
+
+ template<class A1, class A2, class A3, class A4, class A5, class A6>
+ RET operator()(const A1& a1, const A2& a2, const A3& a3, const A4& a4,
+ const A5& a5, const A6& a6) const {
+ return (a->*b)(a1, a2, a3, a4, a5, a6);
+ }
+
+ template<class A1, class A2, class A3, class A4, class A5, class A6,
+ class A7>
+ RET operator()(const A1& a1, const A2& a2, const A3& a3, const A4& a4,
+ const A5& a5, const A6& a6, const A7& a7) const {
+ return (a->*b)(a1, a2, a3, a4, a5, a6, a7);
+ }
+
+ template<class A1, class A2, class A3, class A4, class A5, class A6,
+ class A7, class A8>
+ RET operator()(const A1& a1, const A2& a2, const A3& a3, const A4& a4,
+ const A5& a5, const A6& a6, const A7& a7,
+ const A8& a8) const {
+ return (a->*b)(a1, a2, a3, a4, a5, a6, a7, a8);
+ }
+
+ template<class A1, class A2, class A3, class A4, class A5, class A6,
+ class A7, class A8, class A9>
+ RET operator()(const A1& a1, const A2& a2, const A3& a3, const A4& a4,
+ const A5& a5, const A6& a6, const A7& a7,
+ const A8& a8, const A9& a9) const {
+ return (a->*b)(a1, a2, a3, a4, a5, a6, a7, a8, a9);
+ }
+
+};
+
+// helper templates for return type deduction and action classes
+// different cases for data member, function member, neither
+
+// true-true case
+template <bool Is_data_member, bool Is_function_member>
+struct member_pointer_action_helper;
+ // cannot be both, no body provided
+
+ // data member case
+ // this means, that B is a data member and A is a pointer type,
+ // so either built-in ->* should be called, or there is an error
+template <>
+struct member_pointer_action_helper<true, false> {
+public:
+
+ template<class RET, class A, class B>
+ static RET apply(A& a, B& b) {
+ return a->*b;
+ }
+
+ template<class A, class B>
+ struct return_type {
+ private:
+ typedef typename detail::remove_reference_and_cv<B>::type plainB;
+
+ typedef typename detail::member_pointer<plainB>::type type0;
+ // we remove the reference now, as we may have to add cv:s
+ typedef typename boost::remove_reference<type0>::type type1;
+
+ // A is a reference to pointer
+ // remove the top level cv qualifiers and reference
+ typedef typename
+ detail::remove_reference_and_cv<A>::type non_ref_A;
+
+ // A is a pointer type, so take the type pointed to
+ typedef typename ::boost::remove_pointer<non_ref_A>::type non_pointer_A;
+
+ public:
+ // For non-reference types, we must add const and/or volatile if
+ // the pointer type has these qualifiers
+ // If the member is a reference, these do not have any effect
+ // (cv T == T if T is a reference type)
+ typedef typename detail::IF<
+ ::boost::is_const<non_pointer_A>::value,
+ typename ::boost::add_const<type1>::type,
+ type1
+ >::RET type2;
+ typedef typename detail::IF<
+ ::boost::is_volatile<non_pointer_A>::value,
+ typename ::boost::add_volatile<type2>::type,
+ type2
+ >::RET type3;
+ // add reference back
+ typedef typename ::boost::add_reference<type3>::type type;
+ };
+};
+
+ // neither case
+template <>
+struct member_pointer_action_helper<false, false> {
+public:
+ template<class RET, class A, class B>
+ static RET apply(A& a, B& b) {
+// not a built in member pointer operator, just call ->*
+ return a->*b;
+ }
+ // an overloaded member pointer operators, user should have specified
+ // the return type
+ // At this point we know that there is no matching specialization for
+ // return_type_2, so try return_type_2_plain
+ template<class A, class B>
+ struct return_type {
+
+ typedef typename plain_return_type_2<
+ other_action<member_pointer_action>, A, B
+ >::type type;
+ };
+
+};
+
+
+// member pointer function case
+// This is a built in ->* call for a member function,
+// the only thing that you can do with that, is to give it some arguments
+// note, it is guaranteed that A is a pointer type, and thus it cannot
+// be a call to overloaded ->*
+template <>
+struct member_pointer_action_helper<false, true> {
+ public:
+
+ template<class RET, class A, class B>
+ static RET apply(A& a, B& b) {
+ typedef typename ::boost::remove_cv<B>::type plainB;
+ typedef typename detail::member_pointer<plainB>::type ret_t;
+ typedef typename ::boost::remove_cv<A>::type plainA;
+
+ // we always strip cv:s to
+ // make the two routes (calling and type deduction)
+ // to give the same results (and the const does not make any functional
+ // difference)
+ return detail::member_pointer_caller<ret_t, plainA, plainB>(a, b);
+ }
+
+ template<class A, class B>
+ struct return_type {
+ typedef typename detail::remove_reference_and_cv<B>::type plainB;
+ typedef typename detail::member_pointer<plainB>::type ret_t;
+ typedef typename detail::remove_reference_and_cv<A>::type plainA;
+
+ typedef detail::member_pointer_caller<ret_t, plainA, plainB> type;
+ };
+};
+
+} // detail
+
+template<> class other_action<member_pointer_action> {
+public:
+ template<class RET, class A, class B>
+ static RET apply(A& a, B& b) {
+ typedef typename
+ ::boost::remove_cv<B>::type plainB;
+
+ return detail::member_pointer_action_helper<
+ boost::is_pointer<A>::value &&
+ detail::member_pointer<plainB>::is_data_member,
+ boost::is_pointer<A>::value &&
+ detail::member_pointer<plainB>::is_function_member
+ >::template apply<RET>(a, b);
+ }
+};
+
+ // return type deduction --
+
+ // If the right argument is a pointer to data member,
+ // and the left argument is of compatible pointer to class type
+ // return type is a reference to the data member type
+
+ // if right argument is a pointer to a member function, and the left
+ // argument is of a compatible type, the return type is a
+ // member_pointer_caller (see above)
+
+ // Otherwise, return type deduction fails. There is either an error,
+ // or the user is trying to call an overloaded ->*
+ // In such a case either ret<> must be used, or a return_type_2 user
+ // defined specialization must be provided
+
+
+template<class A, class B>
+struct return_type_2<other_action<member_pointer_action>, A, B> {
+private:
+ typedef typename
+ detail::remove_reference_and_cv<B>::type plainB;
+public:
+ typedef typename
+ detail::member_pointer_action_helper<
+ detail::member_pointer<plainB>::is_data_member,
+ detail::member_pointer<plainB>::is_function_member
+ >::template return_type<A, B>::type type;
+};
+
+ // this is the way the generic lambda_functor_base functions instantiate
+ // return type deduction. We turn it into return_type_2, so that the
+ // user can provide specializations on that level.
+template<class Args>
+struct return_type_N<other_action<member_pointer_action>, Args> {
+ typedef typename boost::tuples::element<0, Args>::type A;
+ typedef typename boost::tuples::element<1, Args>::type B;
+ typedef typename
+ return_type_2<other_action<member_pointer_action>,
+ typename boost::remove_reference<A>::type,
+ typename boost::remove_reference<B>::type
+ >::type type;
+};
+
+
+template<class Arg1, class Arg2>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<2, other_action<member_pointer_action> >,
+ tuple<lambda_functor<Arg1>, typename const_copy_argument<Arg2>::type>
+ >
+>
+operator->*(const lambda_functor<Arg1>& a1, const Arg2& a2)
+{
+ return
+ lambda_functor_base<
+ action<2, other_action<member_pointer_action> >,
+ tuple<lambda_functor<Arg1>, typename const_copy_argument<Arg2>::type>
+ >
+ (tuple<lambda_functor<Arg1>,
+ typename const_copy_argument<Arg2>::type>(a1, a2));
+}
+
+template<class Arg1, class Arg2>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<2, other_action<member_pointer_action> >,
+ tuple<lambda_functor<Arg1>, lambda_functor<Arg2> >
+ >
+>
+operator->*(const lambda_functor<Arg1>& a1, const lambda_functor<Arg2>& a2)
+{
+ return
+ lambda_functor_base<
+ action<2, other_action<member_pointer_action> >,
+ tuple<lambda_functor<Arg1>, lambda_functor<Arg2> >
+ >
+ (tuple<lambda_functor<Arg1>, lambda_functor<Arg2> >(a1, a2));
+}
+
+template<class Arg1, class Arg2>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<2, other_action<member_pointer_action> >,
+ tuple<typename const_copy_argument<Arg1>::type, lambda_functor<Arg2> >
+ >
+>
+operator->*(const Arg1& a1, const lambda_functor<Arg2>& a2)
+{
+ return
+ lambda_functor_base<
+ action<2, other_action<member_pointer_action> >,
+ tuple<typename const_copy_argument<Arg1>::type, lambda_functor<Arg2> >
+ >
+ (tuple<typename const_copy_argument<Arg1>::type,
+ lambda_functor<Arg2> >(a1, a2));
+}
+
+
+} // namespace lambda
+} // namespace boost
+
+
+#endif
+
+
+
+
+
+
diff --git a/boost/boost/lambda/detail/operator_actions.hpp b/boost/boost/lambda/detail/operator_actions.hpp
new file mode 100644
index 00000000000..79a0d9178a0
--- /dev/null
+++ b/boost/boost/lambda/detail/operator_actions.hpp
@@ -0,0 +1,139 @@
+// -- operator_actions.hpp - Boost Lambda Library ----------------------
+
+// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi@cs.utu.fi)
+//
+// 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)
+
+// For more information, see http://lambda.cs.utu.fi
+
+#ifndef BOOST_LAMBDA_OPERATOR_ACTIONS_HPP
+#define BOOST_LAMBDA_OPERATOR_ACTIONS_HPP
+
+namespace boost {
+namespace lambda {
+
+
+// -- artihmetic ----------------------
+
+class plus_action {};
+class minus_action {};
+class multiply_action {};
+class divide_action {};
+class remainder_action {};
+
+// -- bitwise -------------------
+
+class leftshift_action {};
+class rightshift_action {};
+class xor_action {};
+
+
+// -- bitwise/logical -------------------
+
+class and_action {};
+class or_action {};
+class not_action {};
+
+// -- relational -------------------------
+
+class less_action {};
+class greater_action {};
+class lessorequal_action {};
+class greaterorequal_action {};
+class equal_action {};
+class notequal_action {};
+
+// -- increment/decrement ------------------------------
+
+class increment_action {};
+class decrement_action {};
+
+// -- void return ------------------------------
+
+// -- other ------------------------------
+
+class addressof_action {};
+ // class comma_action {}; // defined in actions.hpp
+class contentsof_action {};
+// class member_pointer_action {}; (defined in member_ptr.hpp)
+
+
+// -- actioun group templates --------------------
+
+template <class Action> class arithmetic_action;
+template <class Action> class bitwise_action;
+template <class Action> class logical_action;
+template <class Action> class relational_action;
+template <class Action> class arithmetic_assignment_action;
+template <class Action> class bitwise_assignment_action;
+template <class Action> class unary_arithmetic_action;
+template <class Action> class pre_increment_decrement_action;
+template <class Action> class post_increment_decrement_action;
+
+// ---------------------------------------------------------
+
+ // actions, for which the existence of protect is checked in return type
+ // deduction.
+
+template <class Act> struct is_protectable<arithmetic_action<Act> > {
+ BOOST_STATIC_CONSTANT(bool, value = true);
+};
+template <class Act> struct is_protectable<bitwise_action<Act> > {
+ BOOST_STATIC_CONSTANT(bool, value = true);
+};
+template <class Act> struct is_protectable<logical_action<Act> > {
+ BOOST_STATIC_CONSTANT(bool, value = true);
+};
+template <class Act> struct is_protectable<relational_action<Act> > {
+ BOOST_STATIC_CONSTANT(bool, value = true);
+};
+template <class Act>
+struct is_protectable<arithmetic_assignment_action<Act> > {
+ BOOST_STATIC_CONSTANT(bool, value = true);
+};
+template <class Act> struct is_protectable<bitwise_assignment_action<Act> > {
+ BOOST_STATIC_CONSTANT(bool, value = true);
+};
+template <class Act> struct is_protectable<unary_arithmetic_action<Act> > {
+ BOOST_STATIC_CONSTANT(bool, value = true);
+};
+template <class Act>
+struct is_protectable<pre_increment_decrement_action<Act> > {
+ BOOST_STATIC_CONSTANT(bool, value = true);
+};
+template <class Act> struct
+is_protectable<post_increment_decrement_action<Act> > {
+ BOOST_STATIC_CONSTANT(bool, value = true);
+};
+
+template <> struct is_protectable<other_action<addressof_action> > {
+ BOOST_STATIC_CONSTANT(bool, value = true);
+};
+template <> struct is_protectable<other_action<contentsof_action> > {
+ BOOST_STATIC_CONSTANT(bool, value = true);
+};
+
+template<> struct is_protectable<other_action<subscript_action> > {
+ BOOST_STATIC_CONSTANT(bool, value = true);
+};
+template<> struct is_protectable<other_action<assignment_action> > {
+ BOOST_STATIC_CONSTANT(bool, value = true);
+};
+
+// NOTE: comma action is also protectable, but the specialization is
+ // in actions.hpp
+
+
+} // namespace lambda
+} // namespace boost
+
+#endif
+
+
+
+
+
+
+
diff --git a/boost/boost/lambda/detail/operator_lambda_func_base.hpp b/boost/boost/lambda/detail/operator_lambda_func_base.hpp
new file mode 100644
index 00000000000..dfa3d2fcaed
--- /dev/null
+++ b/boost/boost/lambda/detail/operator_lambda_func_base.hpp
@@ -0,0 +1,271 @@
+// Boost Lambda Library - operator_lambda_func_base.hpp -----------------
+//
+// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi@cs.utu.fi)
+//
+// 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)
+//
+// For more information, see www.boost.org
+
+// ------------------------------------------------------------
+
+#ifndef BOOST_LAMBDA_OPERATOR_LAMBDA_FUNC_BASE_HPP
+#define BOOST_LAMBDA_OPERATOR_LAMBDA_FUNC_BASE_HPP
+
+namespace boost {
+namespace lambda {
+
+
+// These operators cannot be implemented as apply functions of action
+// templates
+
+
+// Specialization for comma.
+template<class Args>
+class lambda_functor_base<other_action<comma_action>, Args> {
+public:
+ Args args;
+public:
+ explicit lambda_functor_base(const Args& a) : args(a) {}
+
+ template<class RET, CALL_TEMPLATE_ARGS>
+ RET call(CALL_FORMAL_ARGS) const {
+ return detail::select(boost::tuples::get<0>(args), CALL_ACTUAL_ARGS),
+ detail::select(boost::tuples::get<1>(args), CALL_ACTUAL_ARGS);
+ }
+
+
+ template<class SigArgs> struct sig {
+ private:
+ typedef typename
+ detail::deduce_argument_types<Args, SigArgs>::type rets_t;
+ public:
+ typedef typename return_type_2_comma< // comma needs special handling
+ typename detail::element_or_null<0, rets_t>::type,
+ typename detail::element_or_null<1, rets_t>::type
+ >::type type;
+ };
+
+};
+
+namespace detail {
+
+// helper traits to make the expression shorter, takes binary action
+// bound argument tuple, open argument tuple and gives the return type
+
+template<class Action, class Bound, class Open> class binary_rt {
+ private:
+ typedef typename
+ detail::deduce_argument_types<Bound, Open>::type rets_t;
+ public:
+ typedef typename return_type_2_prot<
+ Action,
+ typename detail::element_or_null<0, rets_t>::type,
+ typename detail::element_or_null<1, rets_t>::type
+ >::type type;
+};
+
+
+ // same for unary actions
+template<class Action, class Bound, class Open> class unary_rt {
+ private:
+ typedef typename
+ detail::deduce_argument_types<Bound, Open>::type rets_t;
+ public:
+ typedef typename return_type_1_prot<
+ Action,
+ typename detail::element_or_null<0, rets_t>::type
+ >::type type;
+};
+
+
+} // end detail
+
+// Specialization for logical and (to preserve shortcircuiting)
+// this could be done with a macro as the others, code used to be different
+template<class Args>
+class lambda_functor_base<logical_action<and_action>, Args> {
+public:
+ Args args;
+public:
+ explicit lambda_functor_base(const Args& a) : args(a) {}
+
+ template<class RET, CALL_TEMPLATE_ARGS>
+ RET call(CALL_FORMAL_ARGS) const {
+ return detail::select(boost::tuples::get<0>(args), CALL_ACTUAL_ARGS) &&
+ detail::select(boost::tuples::get<1>(args), CALL_ACTUAL_ARGS);
+ }
+ template<class SigArgs> struct sig {
+ typedef typename
+ detail::binary_rt<logical_action<and_action>, Args, SigArgs>::type type;
+ };
+};
+
+// Specialization for logical or (to preserve shortcircuiting)
+// this could be done with a macro as the others, code used to be different
+template<class Args>
+class lambda_functor_base<logical_action< or_action>, Args> {
+public:
+ Args args;
+public:
+ explicit lambda_functor_base(const Args& a) : args(a) {}
+
+ template<class RET, CALL_TEMPLATE_ARGS>
+ RET call(CALL_FORMAL_ARGS) const {
+ return detail::select(boost::tuples::get<0>(args), CALL_ACTUAL_ARGS) ||
+ detail::select(boost::tuples::get<1>(args), CALL_ACTUAL_ARGS);
+ }
+
+ template<class SigArgs> struct sig {
+ typedef typename
+ detail::binary_rt<logical_action<or_action>, Args, SigArgs>::type type;
+ };
+};
+
+// Specialization for subscript
+template<class Args>
+class lambda_functor_base<other_action<subscript_action>, Args> {
+public:
+ Args args;
+public:
+ explicit lambda_functor_base(const Args& a) : args(a) {}
+
+ template<class RET, CALL_TEMPLATE_ARGS>
+ RET call(CALL_FORMAL_ARGS) const {
+ return detail::select(boost::tuples::get<0>(args), CALL_ACTUAL_ARGS)
+ [detail::select(boost::tuples::get<1>(args), CALL_ACTUAL_ARGS)];
+ }
+
+ template<class SigArgs> struct sig {
+ typedef typename
+ detail::binary_rt<other_action<subscript_action>, Args, SigArgs>::type
+ type;
+ };
+};
+
+
+#define BOOST_LAMBDA_BINARY_ACTION(SYMBOL, ACTION_CLASS) \
+template<class Args> \
+class lambda_functor_base<ACTION_CLASS, Args> { \
+public: \
+ Args args; \
+public: \
+ explicit lambda_functor_base(const Args& a) : args(a) {} \
+ \
+ template<class RET, CALL_TEMPLATE_ARGS> \
+ RET call(CALL_FORMAL_ARGS) const { \
+ return detail::select(boost::tuples::get<0>(args), CALL_ACTUAL_ARGS) \
+ SYMBOL \
+ detail::select(boost::tuples::get<1>(args), CALL_ACTUAL_ARGS); \
+ } \
+ template<class SigArgs> struct sig { \
+ typedef typename \
+ detail::binary_rt<ACTION_CLASS, Args, SigArgs>::type type; \
+ }; \
+};
+
+#define BOOST_LAMBDA_PREFIX_UNARY_ACTION(SYMBOL, ACTION_CLASS) \
+template<class Args> \
+class lambda_functor_base<ACTION_CLASS, Args> { \
+public: \
+ Args args; \
+public: \
+ explicit lambda_functor_base(const Args& a) : args(a) {} \
+ \
+ template<class RET, CALL_TEMPLATE_ARGS> \
+ RET call(CALL_FORMAL_ARGS) const { \
+ return SYMBOL \
+ detail::select(boost::tuples::get<0>(args), CALL_ACTUAL_ARGS); \
+ } \
+ template<class SigArgs> struct sig { \
+ typedef typename \
+ detail::unary_rt<ACTION_CLASS, Args, SigArgs>::type type; \
+ }; \
+};
+
+#define BOOST_LAMBDA_POSTFIX_UNARY_ACTION(SYMBOL, ACTION_CLASS) \
+template<class Args> \
+class lambda_functor_base<ACTION_CLASS, Args> { \
+public: \
+ Args args; \
+public: \
+ explicit lambda_functor_base(const Args& a) : args(a) {} \
+ \
+ template<class RET, CALL_TEMPLATE_ARGS> \
+ RET call(CALL_FORMAL_ARGS) const { \
+ return \
+ detail::select(boost::tuples::get<0>(args), CALL_ACTUAL_ARGS) SYMBOL; \
+ } \
+ template<class SigArgs> struct sig { \
+ typedef typename \
+ detail::unary_rt<ACTION_CLASS, Args, SigArgs>::type type; \
+ }; \
+};
+
+BOOST_LAMBDA_BINARY_ACTION(+,arithmetic_action<plus_action>)
+BOOST_LAMBDA_BINARY_ACTION(-,arithmetic_action<minus_action>)
+BOOST_LAMBDA_BINARY_ACTION(*,arithmetic_action<multiply_action>)
+BOOST_LAMBDA_BINARY_ACTION(/,arithmetic_action<divide_action>)
+BOOST_LAMBDA_BINARY_ACTION(%,arithmetic_action<remainder_action>)
+
+BOOST_LAMBDA_BINARY_ACTION(<<,bitwise_action<leftshift_action>)
+BOOST_LAMBDA_BINARY_ACTION(>>,bitwise_action<rightshift_action>)
+BOOST_LAMBDA_BINARY_ACTION(&,bitwise_action<and_action>)
+BOOST_LAMBDA_BINARY_ACTION(|,bitwise_action<or_action>)
+BOOST_LAMBDA_BINARY_ACTION(^,bitwise_action<xor_action>)
+
+BOOST_LAMBDA_BINARY_ACTION(<,relational_action<less_action>)
+BOOST_LAMBDA_BINARY_ACTION(>,relational_action<greater_action>)
+BOOST_LAMBDA_BINARY_ACTION(<=,relational_action<lessorequal_action>)
+BOOST_LAMBDA_BINARY_ACTION(>=,relational_action<greaterorequal_action>)
+BOOST_LAMBDA_BINARY_ACTION(==,relational_action<equal_action>)
+BOOST_LAMBDA_BINARY_ACTION(!=,relational_action<notequal_action>)
+
+BOOST_LAMBDA_BINARY_ACTION(+=,arithmetic_assignment_action<plus_action>)
+BOOST_LAMBDA_BINARY_ACTION(-=,arithmetic_assignment_action<minus_action>)
+BOOST_LAMBDA_BINARY_ACTION(*=,arithmetic_assignment_action<multiply_action>)
+BOOST_LAMBDA_BINARY_ACTION(/=,arithmetic_assignment_action<divide_action>)
+BOOST_LAMBDA_BINARY_ACTION(%=,arithmetic_assignment_action<remainder_action>)
+
+BOOST_LAMBDA_BINARY_ACTION(<<=,bitwise_assignment_action<leftshift_action>)
+BOOST_LAMBDA_BINARY_ACTION(>>=,bitwise_assignment_action<rightshift_action>)
+BOOST_LAMBDA_BINARY_ACTION(&=,bitwise_assignment_action<and_action>)
+BOOST_LAMBDA_BINARY_ACTION(|=,bitwise_assignment_action<or_action>)
+BOOST_LAMBDA_BINARY_ACTION(^=,bitwise_assignment_action<xor_action>)
+
+BOOST_LAMBDA_BINARY_ACTION(=,other_action< assignment_action>)
+
+
+BOOST_LAMBDA_PREFIX_UNARY_ACTION(+, unary_arithmetic_action<plus_action>)
+BOOST_LAMBDA_PREFIX_UNARY_ACTION(-, unary_arithmetic_action<minus_action>)
+BOOST_LAMBDA_PREFIX_UNARY_ACTION(~, bitwise_action<not_action>)
+BOOST_LAMBDA_PREFIX_UNARY_ACTION(!, logical_action<not_action>)
+BOOST_LAMBDA_PREFIX_UNARY_ACTION(++, pre_increment_decrement_action<increment_action>)
+BOOST_LAMBDA_PREFIX_UNARY_ACTION(--, pre_increment_decrement_action<decrement_action>)
+
+BOOST_LAMBDA_PREFIX_UNARY_ACTION(&,other_action<addressof_action>)
+BOOST_LAMBDA_PREFIX_UNARY_ACTION(*,other_action<contentsof_action>)
+
+BOOST_LAMBDA_POSTFIX_UNARY_ACTION(++, post_increment_decrement_action<increment_action>)
+BOOST_LAMBDA_POSTFIX_UNARY_ACTION(--, post_increment_decrement_action<decrement_action>)
+
+
+#undef BOOST_LAMBDA_POSTFIX_UNARY_ACTION
+#undef BOOST_LAMBDA_PREFIX_UNARY_ACTION
+#undef BOOST_LAMBDA_BINARY_ACTION
+
+} // namespace lambda
+} // namespace boost
+
+#endif
+
+
+
+
+
+
+
+
+
+
diff --git a/boost/boost/lambda/detail/operator_return_type_traits.hpp b/boost/boost/lambda/detail/operator_return_type_traits.hpp
new file mode 100644
index 00000000000..79b422e4b23
--- /dev/null
+++ b/boost/boost/lambda/detail/operator_return_type_traits.hpp
@@ -0,0 +1,942 @@
+// operator_return_type_traits.hpp -- Boost Lambda Library ------------------
+
+// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi@cs.utu.fi)
+//
+// 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)
+//
+// For more information, see www.boost.org
+
+#ifndef BOOST_LAMBDA_OPERATOR_RETURN_TYPE_TRAITS_HPP
+#define BOOST_LAMBDA_OPERATOR_RETURN_TYPE_TRAITS_HPP
+
+#include "boost/lambda/detail/is_instance_of.hpp"
+#include "boost/type_traits/same_traits.hpp"
+
+#include "boost/indirect_reference.hpp"
+
+#include <cstddef> // needed for the ptrdiff_t
+#include <iosfwd> // for istream and ostream
+
+#include <iterator> // needed for operator&
+
+namespace boost {
+namespace lambda {
+namespace detail {
+
+// -- general helper templates for type deduction ------------------
+
+// Much of the type deduction code for standard arithmetic types from Gary Powell
+
+template <class A> struct promote_code { static const int value = -1; };
+// this means that a code is not defined for A
+
+// -- the next 5 types are needed in if_then_else_return
+// the promotion order is not important, but they must have distinct values.
+template <> struct promote_code<bool> { static const int value = 10; };
+template <> struct promote_code<char> { static const int value = 20; };
+template <> struct promote_code<unsigned char> { static const int value = 30; };
+template <> struct promote_code<signed char> { static const int value = 40; };
+template <> struct promote_code<short int> { static const int value = 50; };
+// ----------
+
+template <> struct promote_code<int> { static const int value = 100; };
+template <> struct promote_code<unsigned int> { static const int value = 200; };
+template <> struct promote_code<long> { static const int value = 300; };
+template <> struct promote_code<unsigned long> { static const int value = 400; };
+
+template <> struct promote_code<float> { static const int value = 500; };
+template <> struct promote_code<double> { static const int value = 600; };
+template <> struct promote_code<long double> { static const int value = 700; };
+
+// TODO: wchar_t
+
+// forward delcaration of complex.
+
+} // namespace detail
+} // namespace lambda
+} // namespace boost
+
+namespace std {
+ template<class T> class complex;
+}
+
+namespace boost {
+namespace lambda {
+namespace detail {
+
+template <> struct promote_code< std::complex<float> > { static const int value = 800; };
+template <> struct promote_code< std::complex<double> > { static const int value = 900; };
+template <> struct promote_code< std::complex<long double> > { static const int value = 1000; };
+
+// -- int promotion -------------------------------------------
+template <class T> struct promote_to_int { typedef T type; };
+
+template <> struct promote_to_int<bool> { typedef int type; };
+template <> struct promote_to_int<char> { typedef int type; };
+template <> struct promote_to_int<unsigned char> { typedef int type; };
+template <> struct promote_to_int<signed char> { typedef int type; };
+template <> struct promote_to_int<short int> { typedef int type; };
+
+// The unsigned short int promotion rule is this:
+// unsigned short int to signed int if a signed int can hold all values
+// of unsigned short int, otherwise go to unsigned int.
+template <> struct promote_to_int<unsigned short int>
+{
+ typedef
+ detail::IF<sizeof(int) <= sizeof(unsigned short int),
+// I had the logic reversed but ">" messes up the parsing.
+ unsigned int,
+ int>::RET type;
+};
+
+
+// TODO: think, should there be default behaviour for non-standard types?
+
+} // namespace detail
+
+// ------------------------------------------
+// Unary actions ----------------------------
+// ------------------------------------------
+
+template<class Act, class A>
+struct plain_return_type_1 {
+ typedef detail::unspecified type;
+};
+
+
+
+template<class Act, class A>
+struct plain_return_type_1<unary_arithmetic_action<Act>, A> {
+ typedef A type;
+};
+
+template<class Act, class A>
+struct return_type_1<unary_arithmetic_action<Act>, A> {
+ typedef
+ typename plain_return_type_1<
+ unary_arithmetic_action<Act>,
+ typename detail::remove_reference_and_cv<A>::type
+ >::type type;
+};
+
+
+template<class A>
+struct plain_return_type_1<bitwise_action<not_action>, A> {
+ typedef A type;
+};
+
+// bitwise not, operator~()
+template<class A> struct return_type_1<bitwise_action<not_action>, A> {
+ typedef
+ typename plain_return_type_1<
+ bitwise_action<not_action>,
+ typename detail::remove_reference_and_cv<A>::type
+ >::type type;
+};
+
+
+// prefix increment and decrement operators return
+// their argument by default as a non-const reference
+template<class Act, class A>
+struct plain_return_type_1<pre_increment_decrement_action<Act>, A> {
+ typedef A& type;
+};
+
+template<class Act, class A>
+struct return_type_1<pre_increment_decrement_action<Act>, A> {
+ typedef
+ typename plain_return_type_1<
+ pre_increment_decrement_action<Act>,
+ typename detail::remove_reference_and_cv<A>::type
+ >::type type;
+};
+
+// post decrement just returns the same plain type.
+template<class Act, class A>
+struct plain_return_type_1<post_increment_decrement_action<Act>, A> {
+ typedef A type;
+};
+
+template<class Act, class A>
+struct return_type_1<post_increment_decrement_action<Act>, A>
+{
+ typedef
+ typename plain_return_type_1<
+ post_increment_decrement_action<Act>,
+ typename detail::remove_reference_and_cv<A>::type
+ >::type type;
+};
+
+// logical not, operator!()
+template<class A>
+struct plain_return_type_1<logical_action<not_action>, A> {
+ typedef bool type;
+};
+
+template<class A>
+struct return_type_1<logical_action<not_action>, A> {
+ typedef
+ typename plain_return_type_1<
+ logical_action<not_action>,
+ typename detail::remove_reference_and_cv<A>::type
+ >::type type;
+};
+
+// address of action ---------------------------------------
+
+
+template<class A>
+struct return_type_1<other_action<addressof_action>, A> {
+ typedef
+ typename plain_return_type_1<
+ other_action<addressof_action>,
+ typename detail::remove_reference_and_cv<A>::type
+ >::type type1;
+
+ // If no user defined specialization for A, then return the
+ // cv qualified pointer to A
+ typedef typename detail::IF<
+ boost::is_same<type1, detail::unspecified>::value,
+ typename boost::remove_reference<A>::type*,
+ type1
+ >::RET type;
+};
+
+// contentsof action ------------------------------------
+
+// TODO: this deduction may lead to fail directly,
+// (if A has no specialization for iterator_traits and has no
+// typedef A::reference.
+// There is no easy way around this, cause there doesn't seem to be a way
+// to test whether a class is an iterator or not.
+
+// The default works with std::iterators.
+
+namespace detail {
+
+ // A is a nonreference type
+template <class A> struct contentsof_type {
+ typedef typename boost::indirect_reference<A>::type type;
+};
+
+ // this is since the nullary () in lambda_functor is always instantiated
+template <> struct contentsof_type<null_type> {
+ typedef detail::unspecified type;
+};
+
+
+template <class A> struct contentsof_type<const A> {
+ typedef typename contentsof_type<A>::type type1;
+ // return a reference to the underlying const type
+ // the IF is because the A::reference in the primary template could
+ // be some class type rather than a real reference, hence
+ // we do not want to make it a reference here either
+ typedef typename detail::IF<
+ is_reference<type1>::value,
+ const typename boost::remove_reference<type1>::type &,
+ const type1
+ >::RET type;
+};
+
+template <class A> struct contentsof_type<volatile A> {
+ typedef typename contentsof_type<A>::type type1;
+ typedef typename detail::IF<
+ is_reference<type1>::value,
+ volatile typename boost::remove_reference<type1>::type &,
+ volatile type1
+ >::RET type;
+};
+
+template <class A> struct contentsof_type<const volatile A> {
+ typedef typename contentsof_type<A>::type type1;
+ typedef typename detail::IF<
+ is_reference<type1>::value,
+ const volatile typename boost::remove_reference<type1>::type &,
+ const volatile type1
+ >::RET type;
+};
+
+ // standard iterator traits should take care of the pointer types
+ // but just to be on the safe side, we have the specializations here:
+ // these work even if A is cv-qualified.
+template <class A> struct contentsof_type<A*> {
+ typedef A& type;
+};
+template <class A> struct contentsof_type<A* const> {
+ typedef A& type;
+};
+template <class A> struct contentsof_type<A* volatile> {
+ typedef A& type;
+};
+template <class A> struct contentsof_type<A* const volatile> {
+ typedef A& type;
+};
+
+template<class A, int N> struct contentsof_type<A[N]> {
+ typedef A& type;
+};
+template<class A, int N> struct contentsof_type<const A[N]> {
+ typedef const A& type;
+};
+template<class A, int N> struct contentsof_type<volatile A[N]> {
+ typedef volatile A& type;
+};
+template<class A, int N> struct contentsof_type<const volatile A[N]> {
+ typedef const volatile A& type;
+};
+
+
+
+
+
+} // end detail
+
+template<class A>
+struct return_type_1<other_action<contentsof_action>, A> {
+
+ typedef
+ typename plain_return_type_1<
+ other_action<contentsof_action>,
+ typename detail::remove_reference_and_cv<A>::type
+ >::type type1;
+
+ // If no user defined specialization for A, then return the
+ // cv qualified pointer to A
+ typedef typename
+ detail::IF_type<
+ boost::is_same<type1, detail::unspecified>::value,
+ detail::contentsof_type<
+ typename boost::remove_reference<A>::type
+ >,
+ detail::identity_mapping<type1>
+ >::type type;
+};
+
+
+// ------------------------------------------------------------------
+// binary actions ---------------------------------------------------
+// ------------------------------------------------------------------
+
+// here the default case is: no user defined versions:
+template <class Act, class A, class B>
+struct plain_return_type_2 {
+ typedef detail::unspecified type;
+};
+
+namespace detail {
+
+// error classes
+class illegal_pointer_arithmetic{};
+
+// pointer arithmetic type deductions ----------------------
+// value = false means that this is not a pointer arithmetic case
+// value = true means, that this can be a pointer arithmetic case, but not necessarily is
+// This means, that for user defined operators for pointer types, say for some operator+(X, *Y),
+// the deductions must be coded at an earliel level (return_type_2).
+
+template<class Act, class A, class B>
+struct pointer_arithmetic_traits { static const bool value = false; };
+
+template<class A, class B>
+struct pointer_arithmetic_traits<plus_action, A, B> {
+
+ typedef typename
+ array_to_pointer<typename boost::remove_reference<A>::type>::type AP;
+ typedef typename
+ array_to_pointer<typename boost::remove_reference<B>::type>::type BP;
+
+ static const bool is_pointer_A = boost::is_pointer<AP>::value;
+ static const bool is_pointer_B = boost::is_pointer<BP>::value;
+
+ static const bool value = is_pointer_A || is_pointer_B;
+
+ // can't add two pointers.
+ // note, that we do not check wether the other type is valid for
+ // addition with a pointer.
+ // the compiler will catch it in the apply function
+
+ typedef typename
+ detail::IF<
+ is_pointer_A && is_pointer_B,
+ detail::return_type_deduction_failure<
+ detail::illegal_pointer_arithmetic
+ >,
+ typename detail::IF<is_pointer_A, AP, BP>::RET
+ >::RET type;
+
+};
+
+template<class A, class B>
+struct pointer_arithmetic_traits<minus_action, A, B> {
+ typedef typename
+ array_to_pointer<typename boost::remove_reference<A>::type>::type AP;
+ typedef typename
+ array_to_pointer<typename boost::remove_reference<B>::type>::type BP;
+
+ static const bool is_pointer_A = boost::is_pointer<AP>::value;
+ static const bool is_pointer_B = boost::is_pointer<BP>::value;
+
+ static const bool value = is_pointer_A || is_pointer_B;
+
+ static const bool same_pointer_type =
+ is_pointer_A && is_pointer_B &&
+ boost::is_same<
+ typename boost::remove_const<
+ typename boost::remove_pointer<
+ typename boost::remove_const<AP>::type
+ >::type
+ >::type,
+ typename boost::remove_const<
+ typename boost::remove_pointer<
+ typename boost::remove_const<BP>::type
+ >::type
+ >::type
+ >::value;
+
+ // ptr - ptr has type ptrdiff_t
+ // note, that we do not check if, in ptr - B, B is
+ // valid for subtraction with a pointer.
+ // the compiler will catch it in the apply function
+
+ typedef typename
+ detail::IF<
+ same_pointer_type, const std::ptrdiff_t,
+ typename detail::IF<
+ is_pointer_A,
+ AP,
+ detail::return_type_deduction_failure<detail::illegal_pointer_arithmetic>
+ >::RET
+ >::RET type;
+};
+
+} // namespace detail
+
+// -- arithmetic actions ---------------------------------------------
+
+namespace detail {
+
+template<bool is_pointer_arithmetic, class Act, class A, class B>
+struct return_type_2_arithmetic_phase_1;
+
+template<class A, class B> struct return_type_2_arithmetic_phase_2;
+template<class A, class B> struct return_type_2_arithmetic_phase_3;
+
+} // namespace detail
+
+
+// drop any qualifiers from the argument types within arithmetic_action
+template<class A, class B, class Act>
+struct return_type_2<arithmetic_action<Act>, A, B>
+{
+ typedef typename detail::remove_reference_and_cv<A>::type plain_A;
+ typedef typename detail::remove_reference_and_cv<B>::type plain_B;
+
+ typedef typename
+ plain_return_type_2<arithmetic_action<Act>, plain_A, plain_B>::type type1;
+
+ // if user defined return type, do not enter the whole arithmetic deductions
+ typedef typename
+ detail::IF_type<
+ boost::is_same<type1, detail::unspecified>::value,
+ detail::return_type_2_arithmetic_phase_1<
+ detail::pointer_arithmetic_traits<Act, A, B>::value, Act, A, B
+ >,
+ plain_return_type_2<arithmetic_action<Act>, plain_A, plain_B>
+ >::type type;
+};
+
+namespace detail {
+
+// perform integral promotion, no pointer arithmetic
+template<bool is_pointer_arithmetic, class Act, class A, class B>
+struct return_type_2_arithmetic_phase_1
+{
+ typedef typename
+ return_type_2_arithmetic_phase_2<
+ typename remove_reference_and_cv<A>::type,
+ typename remove_reference_and_cv<B>::type
+ >::type type;
+};
+
+// pointer_arithmetic
+template<class Act, class A, class B>
+struct return_type_2_arithmetic_phase_1<true, Act, A, B>
+{
+ typedef typename
+ pointer_arithmetic_traits<Act, A, B>::type type;
+};
+
+template<class A, class B>
+struct return_type_2_arithmetic_phase_2 {
+ typedef typename
+ return_type_2_arithmetic_phase_3<
+ typename promote_to_int<A>::type,
+ typename promote_to_int<B>::type
+ >::type type;
+};
+
+// specialization for unsigned int.
+// We only have to do these two specialization because the value promotion will
+// take care of the other cases.
+// The unsigned int promotion rule is this:
+// unsigned int to long if a long can hold all values of unsigned int,
+// otherwise go to unsigned long.
+
+// struct so I don't have to type this twice.
+struct promotion_of_unsigned_int
+{
+ typedef
+ detail::IF<sizeof(long) <= sizeof(unsigned int),
+ unsigned long,
+ long>::RET type;
+};
+
+template<>
+struct return_type_2_arithmetic_phase_2<unsigned int, long>
+{
+ typedef promotion_of_unsigned_int::type type;
+};
+template<>
+struct return_type_2_arithmetic_phase_2<long, unsigned int>
+{
+ typedef promotion_of_unsigned_int::type type;
+};
+
+
+template<class A, class B> struct return_type_2_arithmetic_phase_3 {
+ enum { promote_code_A_value = promote_code<A>::value,
+ promote_code_B_value = promote_code<B>::value }; // enums for KCC
+ typedef typename
+ detail::IF<
+ promote_code_A_value == -1 || promote_code_B_value == -1,
+ detail::return_type_deduction_failure<return_type_2_arithmetic_phase_3>,
+ typename detail::IF<
+ ((int)promote_code_A_value > (int)promote_code_B_value),
+ A,
+ B
+ >::RET
+ >::RET type;
+};
+
+} // namespace detail
+
+// -- bitwise actions -------------------------------------------
+// note: for integral types deuduction is similar to arithmetic actions.
+
+// drop any qualifiers from the argument types within arithmetic action
+template<class A, class B, class Act>
+struct return_type_2<bitwise_action<Act>, A, B>
+{
+
+ typedef typename detail::remove_reference_and_cv<A>::type plain_A;
+ typedef typename detail::remove_reference_and_cv<B>::type plain_B;
+
+ typedef typename
+ plain_return_type_2<bitwise_action<Act>, plain_A, plain_B>::type type1;
+
+ // if user defined return type, do not enter type deductions
+ typedef typename
+ detail::IF_type<
+ boost::is_same<type1, detail::unspecified>::value,
+ return_type_2<arithmetic_action<plus_action>, A, B>,
+ plain_return_type_2<bitwise_action<Act>, plain_A, plain_B>
+ >::type type;
+
+ // plus_action is just a random pick, has to be a concrete instance
+
+ // TODO: This check is only valid for built-in types, overloaded types might
+ // accept floating point operators
+
+ // bitwise operators not defined for floating point types
+ // these test are not strictly needed here, since the error will be caught in
+ // the apply function
+ BOOST_STATIC_ASSERT(!(boost::is_float<plain_A>::value && boost::is_float<plain_B>::value));
+
+};
+
+namespace detail {
+
+#ifdef BOOST_NO_TEMPLATED_STREAMS
+
+template<class A, class B>
+struct leftshift_type {
+
+ typedef typename detail::IF<
+ boost::is_convertible<
+ typename boost::remove_reference<A>::type*,
+ std::ostream*
+ >::value,
+ std::ostream&,
+ typename detail::remove_reference_and_cv<A>::type
+ >::RET type;
+};
+
+template<class A, class B>
+struct rightshift_type {
+
+ typedef typename detail::IF<
+
+ boost::is_convertible<
+ typename boost::remove_reference<A>::type*,
+ std::istream*
+ >::value,
+ std::istream&,
+ typename detail::remove_reference_and_cv<A>::type
+ >::RET type;
+};
+
+#else
+
+template <class T> struct get_ostream_type {
+ typedef std::basic_ostream<typename T::char_type,
+ typename T::traits_type>& type;
+};
+
+template <class T> struct get_istream_type {
+ typedef std::basic_istream<typename T::char_type,
+ typename T::traits_type>& type;
+};
+
+template<class A, class B>
+struct leftshift_type {
+private:
+ typedef typename boost::remove_reference<A>::type plainA;
+public:
+ typedef typename detail::IF_type<
+ is_instance_of_2<plainA, std::basic_ostream>::value,
+ get_ostream_type<plainA>, //reference to the stream
+ detail::remove_reference_and_cv<A>
+ >::type type;
+};
+
+template<class A, class B>
+struct rightshift_type {
+private:
+ typedef typename boost::remove_reference<A>::type plainA;
+public:
+ typedef typename detail::IF_type<
+ is_instance_of_2<plainA, std::basic_istream>::value,
+ get_istream_type<plainA>, //reference to the stream
+ detail::remove_reference_and_cv<A>
+ >::type type;
+};
+
+
+#endif
+
+} // end detail
+
+// ostream
+template<class A, class B>
+struct return_type_2<bitwise_action<leftshift_action>, A, B>
+{
+ typedef typename detail::remove_reference_and_cv<A>::type plain_A;
+ typedef typename detail::remove_reference_and_cv<B>::type plain_B;
+
+ typedef typename
+ plain_return_type_2<bitwise_action<leftshift_action>, plain_A, plain_B>::type type1;
+
+ // if user defined return type, do not enter type deductions
+ typedef typename
+ detail::IF_type<
+ boost::is_same<type1, detail::unspecified>::value,
+ detail::leftshift_type<A, B>,
+ plain_return_type_2<bitwise_action<leftshift_action>, plain_A, plain_B>
+ >::type type;
+};
+
+// istream
+template<class A, class B>
+struct return_type_2<bitwise_action<rightshift_action>, A, B>
+{
+ typedef typename detail::remove_reference_and_cv<A>::type plain_A;
+ typedef typename detail::remove_reference_and_cv<B>::type plain_B;
+
+ typedef typename
+ plain_return_type_2<bitwise_action<rightshift_action>, plain_A, plain_B>::type type1;
+
+ // if user defined return type, do not enter type deductions
+ typedef typename
+ detail::IF_type<
+ boost::is_same<type1, detail::unspecified>::value,
+ detail::rightshift_type<A, B>,
+ plain_return_type_2<bitwise_action<rightshift_action>, plain_A, plain_B>
+ >::type type;
+};
+
+// -- logical actions ----------------------------------------
+// always bool
+// NOTE: this may not be true for some weird user-defined types,
+template<class A, class B, class Act>
+struct plain_return_type_2<logical_action<Act>, A, B> {
+ typedef bool type;
+};
+
+template<class A, class B, class Act>
+struct return_type_2<logical_action<Act>, A, B> {
+
+ typedef typename detail::remove_reference_and_cv<A>::type plain_A;
+ typedef typename detail::remove_reference_and_cv<B>::type plain_B;
+
+ typedef typename
+ plain_return_type_2<logical_action<Act>, plain_A, plain_B>::type type;
+
+};
+
+
+// -- relational actions ----------------------------------------
+// always bool
+// NOTE: this may not be true for some weird user-defined types,
+template<class A, class B, class Act>
+struct plain_return_type_2<relational_action<Act>, A, B> {
+ typedef bool type;
+};
+
+template<class A, class B, class Act>
+struct return_type_2<relational_action<Act>, A, B> {
+
+ typedef typename detail::remove_reference_and_cv<A>::type plain_A;
+ typedef typename detail::remove_reference_and_cv<B>::type plain_B;
+
+ typedef typename
+ plain_return_type_2<relational_action<Act>, plain_A, plain_B>::type type;
+};
+
+// Assingment actions -----------------------------------------------
+// return type is the type of the first argument as reference
+
+// note that cv-qualifiers are preserved.
+// Yes, assignment operator can be const!
+
+// NOTE: this may not be true for some weird user-defined types,
+
+template<class A, class B, class Act>
+struct return_type_2<arithmetic_assignment_action<Act>, A, B> {
+
+ typedef typename detail::remove_reference_and_cv<A>::type plain_A;
+ typedef typename detail::remove_reference_and_cv<B>::type plain_B;
+
+ typedef typename
+ plain_return_type_2<
+ arithmetic_assignment_action<Act>, plain_A, plain_B
+ >::type type1;
+
+ typedef typename
+ detail::IF<
+ boost::is_same<type1, detail::unspecified>::value,
+ typename boost::add_reference<A>::type,
+ type1
+ >::RET type;
+};
+
+template<class A, class B, class Act>
+struct return_type_2<bitwise_assignment_action<Act>, A, B> {
+
+ typedef typename detail::remove_reference_and_cv<A>::type plain_A;
+ typedef typename detail::remove_reference_and_cv<B>::type plain_B;
+
+ typedef typename
+ plain_return_type_2<
+ bitwise_assignment_action<Act>, plain_A, plain_B
+ >::type type1;
+
+ typedef typename
+ detail::IF<
+ boost::is_same<type1, detail::unspecified>::value,
+ typename boost::add_reference<A>::type,
+ type1
+ >::RET type;
+};
+
+template<class A, class B>
+struct return_type_2<other_action<assignment_action>, A, B> {
+ typedef typename detail::remove_reference_and_cv<A>::type plain_A;
+ typedef typename detail::remove_reference_and_cv<B>::type plain_B;
+
+ typedef typename
+ plain_return_type_2<
+ other_action<assignment_action>, plain_A, plain_B
+ >::type type1;
+
+ typedef typename
+ detail::IF<
+ boost::is_same<type1, detail::unspecified>::value,
+ typename boost::add_reference<A>::type,
+ type1
+ >::RET type;
+};
+
+// -- other actions ----------------------------------------
+
+// comma action ----------------------------------
+// Note: this may not be true for some weird user-defined types,
+
+// NOTE! This only tries the plain_return_type_2 layer and gives
+// detail::unspecified as default. If no such specialization is found, the
+// type rule in the spcecialization of the return_type_2_prot is used
+// to give the type of the right argument (which can be a reference too)
+// (The built in operator, can return a l- or rvalue).
+template<class A, class B>
+struct return_type_2<other_action<comma_action>, A, B> {
+
+ typedef typename detail::remove_reference_and_cv<A>::type plain_A;
+ typedef typename detail::remove_reference_and_cv<B>::type plain_B;
+
+ typedef typename
+ plain_return_type_2<
+ other_action<comma_action>, plain_A, plain_B
+ >::type type;
+ };
+
+// subscript action -----------------------------------------------
+
+
+namespace detail {
+ // A and B are nonreference types
+template <class A, class B> struct subscript_type {
+ typedef detail::unspecified type;
+};
+
+template <class A, class B> struct subscript_type<A*, B> {
+ typedef A& type;
+};
+template <class A, class B> struct subscript_type<A* const, B> {
+ typedef A& type;
+};
+template <class A, class B> struct subscript_type<A* volatile, B> {
+ typedef A& type;
+};
+template <class A, class B> struct subscript_type<A* const volatile, B> {
+ typedef A& type;
+};
+
+
+template<class A, class B, int N> struct subscript_type<A[N], B> {
+ typedef A& type;
+};
+
+ // these 3 specializations are needed to make gcc <3 happy
+template<class A, class B, int N> struct subscript_type<const A[N], B> {
+ typedef const A& type;
+};
+template<class A, class B, int N> struct subscript_type<volatile A[N], B> {
+ typedef volatile A& type;
+};
+template<class A, class B, int N> struct subscript_type<const volatile A[N], B> {
+ typedef const volatile A& type;
+};
+
+} // end detail
+
+template<class A, class B>
+struct return_type_2<other_action<subscript_action>, A, B> {
+
+ typedef typename detail::remove_reference_and_cv<A>::type plain_A;
+ typedef typename detail::remove_reference_and_cv<B>::type plain_B;
+
+ typedef typename boost::remove_reference<A>::type nonref_A;
+ typedef typename boost::remove_reference<B>::type nonref_B;
+
+ typedef typename
+ plain_return_type_2<
+ other_action<subscript_action>, plain_A, plain_B
+ >::type type1;
+
+ typedef typename
+ detail::IF_type<
+ boost::is_same<type1, detail::unspecified>::value,
+ detail::subscript_type<nonref_A, nonref_B>,
+ plain_return_type_2<other_action<subscript_action>, plain_A, plain_B>
+ >::type type;
+
+};
+
+
+} // namespace lambda
+} // namespace boost
+
+
+// Forward declarations are incompatible with the libstdc++ debug mode.
+#if BOOST_WORKAROUND(__GNUC__, >= 3) && defined(_GLIBCXX_DEBUG)
+#include <string>
+#include <vector>
+#include <map>
+#include <deque>
+#else
+
+// The GCC 2.95.x uses a non-conformant deque
+#if BOOST_WORKAROUND(__GNUC__, == 2) && __GNUC_MINOR__ <= 96
+#include <deque>
+#else
+
+namespace std {
+ template <class T, class Allocator> class deque;
+}
+
+#endif
+
+namespace std {
+ template <class Char, class Traits, class Allocator> class basic_string;
+ template <class T, class Allocator> class vector;
+ template <class Key, class T, class Cmp, class Allocator> class map;
+ template <class Key, class T, class Cmp, class Allocator> class multimap;
+}
+
+#endif
+
+
+
+namespace boost {
+namespace lambda {
+
+template<class Key, class T, class Cmp, class Allocator, class B>
+struct plain_return_type_2<other_action<subscript_action>, std::map<Key, T, Cmp, Allocator>, B> {
+ typedef T& type;
+ // T == std::map<Key, T, Cmp, Allocator>::mapped_type;
+};
+
+template<class Key, class T, class Cmp, class Allocator, class B>
+struct plain_return_type_2<other_action<subscript_action>, std::multimap<Key, T, Cmp, Allocator>, B> {
+ typedef T& type;
+ // T == std::map<Key, T, Cmp, Allocator>::mapped_type;
+};
+
+ // deque
+template<class T, class Allocator, class B>
+struct plain_return_type_2<other_action<subscript_action>, std::deque<T, Allocator>, B> {
+ typedef typename std::deque<T, Allocator>::reference type;
+};
+template<class T, class Allocator, class B>
+struct plain_return_type_2<other_action<subscript_action>, const std::deque<T, Allocator>, B> {
+ typedef typename std::deque<T, Allocator>::const_reference type;
+};
+
+ // vector
+template<class T, class Allocator, class B>
+struct plain_return_type_2<other_action<subscript_action>, std::vector<T, Allocator>, B> {
+ typedef typename std::vector<T, Allocator>::reference type;
+};
+template<class T, class Allocator, class B>
+struct plain_return_type_2<other_action<subscript_action>, const std::vector<T, Allocator>, B> {
+ typedef typename std::vector<T, Allocator>::const_reference type;
+};
+
+ // basic_string
+template<class Char, class Traits, class Allocator, class B>
+struct plain_return_type_2<other_action<subscript_action>, std::basic_string<Char, Traits, Allocator>, B> {
+ typedef typename std::basic_string<Char, Traits, Allocator>::reference type;
+};
+template<class Char, class Traits, class Allocator, class B>
+struct plain_return_type_2<other_action<subscript_action>, const std::basic_string<Char, Traits, Allocator>, B> {
+ typedef typename std::basic_string<Char, Traits, Allocator>::const_reference type;
+};
+
+
+} // namespace lambda
+} // namespace boost
+
+#endif
+
+
diff --git a/boost/boost/lambda/detail/operators.hpp b/boost/boost/lambda/detail/operators.hpp
new file mode 100644
index 00000000000..cbef4a2287c
--- /dev/null
+++ b/boost/boost/lambda/detail/operators.hpp
@@ -0,0 +1,370 @@
+// Boost Lambda Library - operators.hpp --------------------------------------
+
+// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi@cs.utu.fi)
+//
+// 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)
+//
+// For more information, see www.boost.org
+
+// ---------------------------------------------------------------
+
+#ifndef BOOST_LAMBDA_OPERATORS_HPP
+#define BOOST_LAMBDA_OPERATORS_HPP
+
+#include "boost/lambda/detail/is_instance_of.hpp"
+
+namespace boost {
+namespace lambda {
+
+#if defined BOOST_LAMBDA_BE1
+#error "Multiple defines of BOOST_LAMBDA_BE1"
+#endif
+
+ // For all BOOSTA_LAMBDA_BE* macros:
+
+ // CONSTA must be either 'A' or 'const A'
+ // CONSTB must be either 'B' or 'const B'
+
+ // It is stupid to have the names A and B as macro arguments, but it avoids
+ // the need to pass in emtpy macro arguments, which gives warnings on some
+ // compilers
+
+#define BOOST_LAMBDA_BE1(OPER_NAME, ACTION, CONSTA, CONSTB, CONVERSION) \
+template<class Arg, class B> \
+inline const \
+lambda_functor< \
+ lambda_functor_base< \
+ ACTION, \
+ tuple<lambda_functor<Arg>, typename CONVERSION <CONSTB>::type> \
+ > \
+> \
+OPER_NAME (const lambda_functor<Arg>& a, CONSTB& b) { \
+ return \
+ lambda_functor_base< \
+ ACTION, \
+ tuple<lambda_functor<Arg>, typename CONVERSION <CONSTB>::type> \
+ > \
+ (tuple<lambda_functor<Arg>, typename CONVERSION <CONSTB>::type>(a, b)); \
+}
+
+
+#if defined BOOST_LAMBDA_BE2
+#error "Multiple defines of BOOST_LAMBDA_BE2"
+#endif
+
+#define BOOST_LAMBDA_BE2(OPER_NAME, ACTION, CONSTA, CONSTB, CONVERSION) \
+template<class A, class Arg> \
+inline const \
+lambda_functor< \
+ lambda_functor_base< \
+ ACTION, \
+ tuple<typename CONVERSION <CONSTA>::type, lambda_functor<Arg> > \
+ > \
+> \
+OPER_NAME (CONSTA& a, const lambda_functor<Arg>& b) { \
+ return \
+ lambda_functor_base< \
+ ACTION, \
+ tuple<typename CONVERSION <CONSTA>::type, lambda_functor<Arg> > \
+ > \
+ (tuple<typename CONVERSION <CONSTA>::type, lambda_functor<Arg> >(a, b)); \
+}
+
+
+#if defined BOOST_LAMBDA_BE3
+#error "Multiple defines of BOOST_LAMBDA_BE3"
+#endif
+
+#define BOOST_LAMBDA_BE3(OPER_NAME, ACTION, CONSTA, CONSTB, CONVERSION) \
+template<class ArgA, class ArgB> \
+inline const \
+lambda_functor< \
+ lambda_functor_base< \
+ ACTION, \
+ tuple<lambda_functor<ArgA>, lambda_functor<ArgB> > \
+ > \
+> \
+OPER_NAME (const lambda_functor<ArgA>& a, const lambda_functor<ArgB>& b) { \
+ return \
+ lambda_functor_base< \
+ ACTION, \
+ tuple<lambda_functor<ArgA>, lambda_functor<ArgB> > \
+ > \
+ (tuple<lambda_functor<ArgA>, lambda_functor<ArgB> >(a, b)); \
+}
+
+#if defined BOOST_LAMBDA_BE
+#error "Multiple defines of BOOST_LAMBDA_BE"
+#endif
+
+#define BOOST_LAMBDA_BE(OPER_NAME, ACTION, CONSTA, CONSTB, CONST_CONVERSION) \
+BOOST_LAMBDA_BE1(OPER_NAME, ACTION, CONSTA, CONSTB, CONST_CONVERSION) \
+BOOST_LAMBDA_BE2(OPER_NAME, ACTION, CONSTA, CONSTB, CONST_CONVERSION) \
+BOOST_LAMBDA_BE3(OPER_NAME, ACTION, CONSTA, CONSTB, CONST_CONVERSION)
+
+#define BOOST_LAMBDA_EMPTY()
+
+BOOST_LAMBDA_BE(operator+, arithmetic_action<plus_action>, const A, const B, const_copy_argument)
+BOOST_LAMBDA_BE(operator-, arithmetic_action<minus_action>, const A, const B, const_copy_argument)
+BOOST_LAMBDA_BE(operator*, arithmetic_action<multiply_action>, const A, const B, const_copy_argument)
+BOOST_LAMBDA_BE(operator/, arithmetic_action<divide_action>, const A, const B, const_copy_argument)
+BOOST_LAMBDA_BE(operator%, arithmetic_action<remainder_action>, const A, const B, const_copy_argument)
+BOOST_LAMBDA_BE(operator<<, bitwise_action<leftshift_action>, const A, const B, const_copy_argument)
+BOOST_LAMBDA_BE(operator>>, bitwise_action<rightshift_action>, const A, const B, const_copy_argument)
+BOOST_LAMBDA_BE(operator&, bitwise_action<and_action>, const A, const B, const_copy_argument)
+BOOST_LAMBDA_BE(operator|, bitwise_action<or_action>, const A, const B, const_copy_argument)
+BOOST_LAMBDA_BE(operator^, bitwise_action<xor_action>, const A, const B, const_copy_argument)
+BOOST_LAMBDA_BE(operator&&, logical_action<and_action>, const A, const B, const_copy_argument)
+BOOST_LAMBDA_BE(operator||, logical_action<or_action>, const A, const B, const_copy_argument)
+BOOST_LAMBDA_BE(operator<, relational_action<less_action>, const A, const B, const_copy_argument)
+BOOST_LAMBDA_BE(operator>, relational_action<greater_action>, const A, const B, const_copy_argument)
+BOOST_LAMBDA_BE(operator<=, relational_action<lessorequal_action>, const A, const B, const_copy_argument)
+BOOST_LAMBDA_BE(operator>=, relational_action<greaterorequal_action>, const A, const B, const_copy_argument)
+BOOST_LAMBDA_BE(operator==, relational_action<equal_action>, const A, const B, const_copy_argument)
+BOOST_LAMBDA_BE(operator!=, relational_action<notequal_action>, const A, const B, const_copy_argument)
+
+BOOST_LAMBDA_BE(operator+=, arithmetic_assignment_action<plus_action>, A, const B, reference_argument)
+BOOST_LAMBDA_BE(operator-=, arithmetic_assignment_action<minus_action>, A, const B, reference_argument)
+BOOST_LAMBDA_BE(operator*=, arithmetic_assignment_action<multiply_action>, A, const B, reference_argument)
+BOOST_LAMBDA_BE(operator/=, arithmetic_assignment_action<divide_action>, A, const B, reference_argument)
+BOOST_LAMBDA_BE(operator%=, arithmetic_assignment_action<remainder_action>, A, const B, reference_argument)
+BOOST_LAMBDA_BE(operator<<=, bitwise_assignment_action<leftshift_action>, A, const B, reference_argument)
+BOOST_LAMBDA_BE(operator>>=, bitwise_assignment_action<rightshift_action>, A, const B, reference_argument)
+BOOST_LAMBDA_BE(operator&=, bitwise_assignment_action<and_action>, A, const B, reference_argument)
+BOOST_LAMBDA_BE(operator|=, bitwise_assignment_action<or_action>, A, const B, reference_argument)
+BOOST_LAMBDA_BE(operator^=, bitwise_assignment_action<xor_action>, A, const B, reference_argument)
+
+
+// A special trick for comma operator for correct preprocessing
+#if defined BOOST_LAMBDA_COMMA_OPERATOR_NAME
+#error "Multiple defines of BOOST_LAMBDA_COMMA_OPERATOR_NAME"
+#endif
+
+#define BOOST_LAMBDA_COMMA_OPERATOR_NAME operator,
+
+BOOST_LAMBDA_BE1(BOOST_LAMBDA_COMMA_OPERATOR_NAME, other_action<comma_action>, const A, const B, const_copy_argument)
+BOOST_LAMBDA_BE2(BOOST_LAMBDA_COMMA_OPERATOR_NAME, other_action<comma_action>, const A, const B, const_copy_argument)
+BOOST_LAMBDA_BE3(BOOST_LAMBDA_COMMA_OPERATOR_NAME, other_action<comma_action>, const A, const B, const_copy_argument)
+
+
+
+namespace detail {
+
+// special cases for ostream& << Any and istream& >> Any ---------------
+// the actual stream classes may vary and thus a specialisation for,
+// say ostream& does not match (the general case above is chosen).
+// Therefore we specialise for non-const reference:
+// if the left argument is a stream, we store the stream as reference
+// if it is something else, we store a const plain by default
+
+// Note that the overloading is const vs. non-const first argument
+
+#ifdef BOOST_NO_TEMPLATED_STREAMS
+template<class T> struct convert_ostream_to_ref_others_to_c_plain_by_default {
+ typedef typename detail::IF<
+ boost::is_convertible<T*, std::ostream*>::value,
+ T&,
+ typename const_copy_argument <T>::type
+ >::RET type;
+};
+
+template<class T> struct convert_istream_to_ref_others_to_c_plain_by_default {
+ typedef typename detail::IF<
+ boost::is_convertible<T*, std::istream*>::value,
+ T&,
+ typename const_copy_argument <T>::type
+ >::RET type;
+};
+#else
+
+template<class T> struct convert_ostream_to_ref_others_to_c_plain_by_default {
+ typedef typename detail::IF<
+ is_instance_of_2<
+ T, std::basic_ostream
+ >::value,
+ T&,
+ typename const_copy_argument <T>::type
+ >::RET type;
+};
+
+template<class T> struct convert_istream_to_ref_others_to_c_plain_by_default {
+ typedef typename detail::IF<
+ is_instance_of_2<
+ T, std::basic_istream
+ >::value,
+ T&,
+ typename const_copy_argument <T>::type
+ >::RET type;
+};
+#endif
+
+} // detail
+
+BOOST_LAMBDA_BE2(operator<<, bitwise_action< leftshift_action>, A, const B, detail::convert_ostream_to_ref_others_to_c_plain_by_default)
+BOOST_LAMBDA_BE2(operator>>, bitwise_action< rightshift_action>, A, const B, detail::convert_istream_to_ref_others_to_c_plain_by_default)
+
+
+// special case for io_manipulators.
+// function references cannot be given as arguments to lambda operator
+// expressions in general. With << and >> the use of manipulators is
+// so common, that specializations are provided to make them work.
+
+template<class Arg, class Ret, class ManipArg>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ bitwise_action<leftshift_action>,
+ tuple<lambda_functor<Arg>, Ret(&)(ManipArg)>
+ >
+>
+operator<<(const lambda_functor<Arg>& a, Ret(&b)(ManipArg))
+{
+ return
+ lambda_functor_base<
+ bitwise_action<leftshift_action>,
+ tuple<lambda_functor<Arg>, Ret(&)(ManipArg)>
+ >
+ ( tuple<lambda_functor<Arg>, Ret(&)(ManipArg)>(a, b) );
+}
+
+template<class Arg, class Ret, class ManipArg>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ bitwise_action<rightshift_action>,
+ tuple<lambda_functor<Arg>, Ret(&)(ManipArg)>
+ >
+>
+operator>>(const lambda_functor<Arg>& a, Ret(&b)(ManipArg))
+{
+ return
+ lambda_functor_base<
+ bitwise_action<rightshift_action>,
+ tuple<lambda_functor<Arg>, Ret(&)(ManipArg)>
+ >
+ ( tuple<lambda_functor<Arg>, Ret(&)(ManipArg)>(a, b) );
+}
+
+
+// (+ and -) take their arguments as const references.
+// This has consquences with pointer artihmetic
+// E.g int a[]; ... *a = 1 works but not *(a+1) = 1.
+// the result of a+1 would be const
+// To make the latter work too,
+// non-const arrays are taken as non-const and stored as non-const as well.
+#if defined BOOST_LAMBDA_PTR_ARITHMETIC_E1
+#error "Multiple defines of BOOST_LAMBDA_PTR_ARITHMETIC_E1"
+#endif
+
+#define BOOST_LAMBDA_PTR_ARITHMETIC_E1(OPER_NAME, ACTION, CONSTB) \
+template<class Arg, int N, class B> \
+inline const \
+lambda_functor< \
+ lambda_functor_base<ACTION, tuple<lambda_functor<Arg>, CONSTB(&)[N]> > \
+> \
+OPER_NAME (const lambda_functor<Arg>& a, CONSTB(&b)[N]) \
+{ \
+ return lambda_functor< \
+ lambda_functor_base<ACTION, tuple<lambda_functor<Arg>, CONSTB(&)[N]> > \
+ >(tuple<lambda_functor<Arg>, CONSTB(&)[N]>(a, b)); \
+}
+
+
+#if defined BOOST_LAMBDA_PTR_ARITHMETIC_E2
+#error "Multiple defines of BOOST_LAMBDA_PTR_ARITHMETIC_E2"
+#endif
+
+#define BOOST_LAMBDA_PTR_ARITHMETIC_E2(OPER_NAME, ACTION, CONSTA) \
+template<int N, class A, class Arg> \
+inline const \
+lambda_functor< \
+ lambda_functor_base<ACTION, tuple<CONSTA(&)[N], lambda_functor<Arg> > > \
+> \
+OPER_NAME (CONSTA(&a)[N], const lambda_functor<Arg>& b) \
+{ \
+ return \
+ lambda_functor_base<ACTION, tuple<CONSTA(&)[N], lambda_functor<Arg> > > \
+ (tuple<CONSTA(&)[N], lambda_functor<Arg> >(a, b)); \
+}
+
+
+BOOST_LAMBDA_PTR_ARITHMETIC_E1(operator+, arithmetic_action<plus_action>, B)
+BOOST_LAMBDA_PTR_ARITHMETIC_E2(operator+, arithmetic_action<plus_action>, A)
+BOOST_LAMBDA_PTR_ARITHMETIC_E1(operator+, arithmetic_action<plus_action>,const B)
+BOOST_LAMBDA_PTR_ARITHMETIC_E2(operator+, arithmetic_action<plus_action>,const A)
+
+
+//BOOST_LAMBDA_PTR_ARITHMETIC_E1(operator-, arithmetic_action<minus_action>)
+// This is not needed, since the result of ptr-ptr is an rvalue anyway
+
+BOOST_LAMBDA_PTR_ARITHMETIC_E2(operator-, arithmetic_action<minus_action>, A)
+BOOST_LAMBDA_PTR_ARITHMETIC_E2(operator-, arithmetic_action<minus_action>, const A)
+
+
+#undef BOOST_LAMBDA_BE1
+#undef BOOST_LAMBDA_BE2
+#undef BOOST_LAMBDA_BE3
+#undef BOOST_LAMBDA_BE
+#undef BOOST_LAMBDA_COMMA_OPERATOR_NAME
+
+#undef BOOST_LAMBDA_PTR_ARITHMETIC_E1
+#undef BOOST_LAMBDA_PTR_ARITHMETIC_E2
+
+
+// ---------------------------------------------------------------------
+// unary operators -----------------------------------------------------
+// ---------------------------------------------------------------------
+
+#if defined BOOST_LAMBDA_UE
+#error "Multiple defines of BOOST_LAMBDA_UE"
+#endif
+
+#define BOOST_LAMBDA_UE(OPER_NAME, ACTION) \
+template<class Arg> \
+inline const \
+lambda_functor<lambda_functor_base<ACTION, tuple<lambda_functor<Arg> > > > \
+OPER_NAME (const lambda_functor<Arg>& a) \
+{ \
+ return \
+ lambda_functor_base<ACTION, tuple<lambda_functor<Arg> > > \
+ ( tuple<lambda_functor<Arg> >(a) ); \
+}
+
+
+BOOST_LAMBDA_UE(operator+, unary_arithmetic_action<plus_action>)
+BOOST_LAMBDA_UE(operator-, unary_arithmetic_action<minus_action>)
+BOOST_LAMBDA_UE(operator~, bitwise_action<not_action>)
+BOOST_LAMBDA_UE(operator!, logical_action<not_action>)
+BOOST_LAMBDA_UE(operator++, pre_increment_decrement_action<increment_action>)
+BOOST_LAMBDA_UE(operator--, pre_increment_decrement_action<decrement_action>)
+BOOST_LAMBDA_UE(operator*, other_action<contentsof_action>)
+BOOST_LAMBDA_UE(operator&, other_action<addressof_action>)
+
+#if defined BOOST_LAMBDA_POSTFIX_UE
+#error "Multiple defines of BOOST_LAMBDA_POSTFIX_UE"
+#endif
+
+#define BOOST_LAMBDA_POSTFIX_UE(OPER_NAME, ACTION) \
+template<class Arg> \
+inline const \
+lambda_functor<lambda_functor_base<ACTION, tuple<lambda_functor<Arg> > > > \
+OPER_NAME (const lambda_functor<Arg>& a, int) \
+{ \
+ return \
+ lambda_functor_base<ACTION, tuple<lambda_functor<Arg> > > \
+ ( tuple<lambda_functor<Arg> >(a) ); \
+}
+
+
+BOOST_LAMBDA_POSTFIX_UE(operator++, post_increment_decrement_action<increment_action>)
+BOOST_LAMBDA_POSTFIX_UE(operator--, post_increment_decrement_action<decrement_action>)
+
+#undef BOOST_LAMBDA_UE
+#undef BOOST_LAMBDA_POSTFIX_UE
+
+} // namespace lambda
+} // namespace boost
+
+#endif
diff --git a/boost/boost/lambda/detail/ret.hpp b/boost/boost/lambda/detail/ret.hpp
new file mode 100644
index 00000000000..9f90b6e146e
--- /dev/null
+++ b/boost/boost/lambda/detail/ret.hpp
@@ -0,0 +1,325 @@
+// Boost Lambda Library ret.hpp -----------------------------------------
+
+// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi@cs.utu.fi)
+//
+// 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)
+//
+// For more information, see www.boost.org
+
+
+#ifndef BOOST_LAMBDA_RET_HPP
+#define BOOST_LAMBDA_RET_HPP
+
+namespace boost {
+namespace lambda {
+
+ // TODO:
+
+// Add specializations for function references for ret, protect and unlambda
+// e.g void foo(); unlambda(foo); fails, as it would add a const qualifier
+ // for a function type.
+ // on the other hand unlambda(*foo) does work
+
+
+// -- ret -------------------------
+// the explicit return type template
+
+ // TODO: It'd be nice to make ret a nop for other than lambda functors
+ // but causes an ambiguiyty with gcc (not with KCC), check what is the
+ // right interpretation.
+
+ // // ret for others than lambda functors has no effect
+ // template <class U, class T>
+ // inline const T& ret(const T& t) { return t; }
+
+
+template<class RET, class Arg>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ explicit_return_type_action<RET>,
+ tuple<lambda_functor<Arg> >
+ >
+>
+ret(const lambda_functor<Arg>& a1)
+{
+ return
+ lambda_functor_base<
+ explicit_return_type_action<RET>,
+ tuple<lambda_functor<Arg> >
+ >
+ (tuple<lambda_functor<Arg> >(a1));
+}
+
+// protect ------------------
+
+ // protecting others than lambda functors has no effect
+template <class T>
+inline const T& protect(const T& t) { return t; }
+
+template<class Arg>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ protect_action,
+ tuple<lambda_functor<Arg> >
+ >
+>
+protect(const lambda_functor<Arg>& a1)
+{
+ return
+ lambda_functor_base<
+ protect_action,
+ tuple<lambda_functor<Arg> >
+ >
+ (tuple<lambda_functor<Arg> >(a1));
+}
+
+// -------------------------------------------------------------------
+
+// Hides the lambda functorness of a lambda functor.
+// After this, the functor is immune to argument substitution, etc.
+// This can be used, e.g. to make it safe to pass lambda functors as
+// arguments to functions, which might use them as target functions
+
+// note, unlambda and protect are different things. Protect hides the lambda
+// functor for one application, unlambda for good.
+
+template <class LambdaFunctor>
+class non_lambda_functor
+{
+ LambdaFunctor lf;
+public:
+
+ // This functor defines the result_type typedef.
+ // The result type must be deducible without knowing the arguments
+
+ template <class SigArgs> struct sig {
+ typedef typename
+ LambdaFunctor::inherited::
+ template sig<typename SigArgs::tail_type>::type type;
+ };
+
+ explicit non_lambda_functor(const LambdaFunctor& a) : lf(a) {}
+
+ typename LambdaFunctor::nullary_return_type
+ operator()() const {
+ return lf.template
+ call<typename LambdaFunctor::nullary_return_type>
+ (cnull_type(), cnull_type(), cnull_type(), cnull_type());
+ }
+
+ template<class A>
+ typename sig<tuple<const non_lambda_functor, A&> >::type
+ operator()(A& a) const {
+ return lf.template call<typename sig<tuple<const non_lambda_functor, A&> >::type >(a, cnull_type(), cnull_type(), cnull_type());
+ }
+
+ template<class A, class B>
+ typename sig<tuple<const non_lambda_functor, A&, B&> >::type
+ operator()(A& a, B& b) const {
+ return lf.template call<typename sig<tuple<const non_lambda_functor, A&, B&> >::type >(a, b, cnull_type(), cnull_type());
+ }
+
+ template<class A, class B, class C>
+ typename sig<tuple<const non_lambda_functor, A&, B&, C&> >::type
+ operator()(A& a, B& b, C& c) const {
+ return lf.template call<typename sig<tuple<const non_lambda_functor, A&, B&, C&> >::type>(a, b, c, cnull_type());
+ }
+};
+
+template <class Arg>
+inline const Arg& unlambda(const Arg& a) { return a; }
+
+template <class Arg>
+inline const non_lambda_functor<lambda_functor<Arg> >
+unlambda(const lambda_functor<Arg>& a)
+{
+ return non_lambda_functor<lambda_functor<Arg> >(a);
+}
+
+ // Due to a language restriction, lambda functors cannot be made to
+ // accept non-const rvalue arguments. Usually iterators do not return
+ // temporaries, but sometimes they do. That's why a workaround is provided.
+ // Note, that this potentially breaks const correctness, so be careful!
+
+// any lambda functor can be turned into a const_incorrect_lambda_functor
+// The operator() takes arguments as consts and then casts constness
+// away. So this breaks const correctness!!! but is a necessary workaround
+// in some cases due to language limitations.
+// Note, that this is not a lambda_functor anymore, so it can not be used
+// as a sub lambda expression.
+
+template <class LambdaFunctor>
+struct const_incorrect_lambda_functor {
+ LambdaFunctor lf;
+public:
+
+ explicit const_incorrect_lambda_functor(const LambdaFunctor& a) : lf(a) {}
+
+ template <class SigArgs> struct sig {
+ typedef typename
+ LambdaFunctor::inherited::template
+ sig<typename SigArgs::tail_type>::type type;
+ };
+
+ // The nullary case is not needed (no arguments, no parameter type problems)
+
+ template<class A>
+ typename sig<tuple<const const_incorrect_lambda_functor, A&> >::type
+ operator()(const A& a) const {
+ return lf.template call<typename sig<tuple<const const_incorrect_lambda_functor, A&> >::type >(const_cast<A&>(a), cnull_type(), cnull_type(), cnull_type());
+ }
+
+ template<class A, class B>
+ typename sig<tuple<const const_incorrect_lambda_functor, A&, B&> >::type
+ operator()(const A& a, const B& b) const {
+ return lf.template call<typename sig<tuple<const const_incorrect_lambda_functor, A&, B&> >::type >(const_cast<A&>(a), const_cast<B&>(b), cnull_type(), cnull_type());
+ }
+
+ template<class A, class B, class C>
+ typename sig<tuple<const const_incorrect_lambda_functor, A&, B&, C&> >::type
+ operator()(const A& a, const B& b, const C& c) const {
+ return lf.template call<typename sig<tuple<const const_incorrect_lambda_functor, A&, B&, C&> >::type>(const_cast<A&>(a), const_cast<B&>(b), const_cast<C&>(c), cnull_type());
+ }
+};
+
+// ------------------------------------------------------------------------
+// any lambda functor can be turned into a const_parameter_lambda_functor
+// The operator() takes arguments as const.
+// This is useful if lambda functors are called with non-const rvalues.
+// Note, that this is not a lambda_functor anymore, so it can not be used
+// as a sub lambda expression.
+
+template <class LambdaFunctor>
+struct const_parameter_lambda_functor {
+ LambdaFunctor lf;
+public:
+
+ explicit const_parameter_lambda_functor(const LambdaFunctor& a) : lf(a) {}
+
+ template <class SigArgs> struct sig {
+ typedef typename
+ LambdaFunctor::inherited::template
+ sig<typename SigArgs::tail_type>::type type;
+ };
+
+ // The nullary case is not needed: no arguments, no constness problems.
+
+ template<class A>
+ typename sig<tuple<const const_parameter_lambda_functor, const A&> >::type
+ operator()(const A& a) const {
+ return lf.template call<typename sig<tuple<const const_parameter_lambda_functor, const A&> >::type >(a, cnull_type(), cnull_type(), cnull_type());
+ }
+
+ template<class A, class B>
+ typename sig<tuple<const const_parameter_lambda_functor, const A&, const B&> >::type
+ operator()(const A& a, const B& b) const {
+ return lf.template call<typename sig<tuple<const const_parameter_lambda_functor, const A&, const B&> >::type >(a, b, cnull_type(), cnull_type());
+ }
+
+ template<class A, class B, class C>
+ typename sig<tuple<const const_parameter_lambda_functor, const A&, const B&, const C&>
+>::type
+ operator()(const A& a, const B& b, const C& c) const {
+ return lf.template call<typename sig<tuple<const const_parameter_lambda_functor, const A&, const B&, const C&> >::type>(a, b, c, cnull_type());
+ }
+};
+
+template <class Arg>
+inline const const_incorrect_lambda_functor<lambda_functor<Arg> >
+break_const(const lambda_functor<Arg>& lf)
+{
+ return const_incorrect_lambda_functor<lambda_functor<Arg> >(lf);
+}
+
+
+template <class Arg>
+inline const const_parameter_lambda_functor<lambda_functor<Arg> >
+const_parameters(const lambda_functor<Arg>& lf)
+{
+ return const_parameter_lambda_functor<lambda_functor<Arg> >(lf);
+}
+
+// make void ------------------------------------------------
+// make_void( x ) turns a lambda functor x with some return type y into
+// another lambda functor, which has a void return type
+// when called, the original return type is discarded
+
+// we use this action. The action class will be called, which means that
+// the wrapped lambda functor is evaluated, but we just don't do anything
+// with the result.
+struct voidifier_action {
+ template<class Ret, class A> static void apply(A&) {}
+};
+
+template<class Args> struct return_type_N<voidifier_action, Args> {
+ typedef void type;
+};
+
+template<class Arg1>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<1, voidifier_action>,
+ tuple<lambda_functor<Arg1> >
+ >
+>
+make_void(const lambda_functor<Arg1>& a1) {
+return
+ lambda_functor_base<
+ action<1, voidifier_action>,
+ tuple<lambda_functor<Arg1> >
+ >
+ (tuple<lambda_functor<Arg1> > (a1));
+}
+
+// for non-lambda functors, make_void does nothing
+// (the argument gets evaluated immediately)
+
+template<class Arg1>
+inline const
+lambda_functor<
+ lambda_functor_base<do_nothing_action, null_type>
+>
+make_void(const Arg1& a1) {
+return
+ lambda_functor_base<do_nothing_action, null_type>();
+}
+
+// std_functor -----------------------------------------------------
+
+// The STL uses the result_type typedef as the convention to let binders know
+// the return type of a function object.
+// LL uses the sig template.
+// To let LL know that the function object has the result_type typedef
+// defined, it can be wrapped with the std_functor function.
+
+
+// Just inherit form the template parameter (the standard functor),
+// and provide a sig template. So we have a class which is still the
+// same functor + the sig template.
+
+template<class T>
+struct result_type_to_sig : public T {
+ template<class Args> struct sig { typedef typename T::result_type type; };
+ result_type_to_sig(const T& t) : T(t) {}
+};
+
+template<class F>
+inline result_type_to_sig<F> std_functor(const F& f) { return f; }
+
+
+} // namespace lambda
+} // namespace boost
+
+#endif
+
+
+
+
+
+
+
diff --git a/boost/boost/lambda/detail/return_type_traits.hpp b/boost/boost/lambda/detail/return_type_traits.hpp
new file mode 100644
index 00000000000..043a8919ee7
--- /dev/null
+++ b/boost/boost/lambda/detail/return_type_traits.hpp
@@ -0,0 +1,284 @@
+// return_type_traits.hpp -- Boost Lambda Library ---------------------------
+
+// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi@cs.utu.fi)
+//
+// 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)
+//
+// For more information, see www.boost.org
+
+
+#ifndef BOOST_LAMBDA_RETURN_TYPE_TRAITS_HPP
+#define BOOST_LAMBDA_RETURN_TYPE_TRAITS_HPP
+
+#include "boost/mpl/has_xxx.hpp"
+
+#include <cstddef> // needed for the ptrdiff_t
+
+namespace boost {
+namespace lambda {
+
+using ::boost::type_traits::ice_and;
+using ::boost::type_traits::ice_or;
+using ::boost::type_traits::ice_not;
+
+// Much of the type deduction code for standard arithmetic types
+// from Gary Powell
+
+ // different arities:
+template <class Act, class A1> struct return_type_1; // 1-ary actions
+template <class Act, class A1, class A2> struct return_type_2; // 2-ary
+template <class Act, class Args> struct return_type_N; // >3- ary
+
+template <class Act, class A1> struct return_type_1_prot;
+template <class Act, class A1, class A2> struct return_type_2_prot; // 2-ary
+template <class Act, class A1> struct return_type_N_prot; // >3-ary
+
+
+namespace detail {
+
+template<class> class return_type_deduction_failure {};
+
+ // In some cases return type deduction should fail (an invalid lambda
+ // expression). Sometimes the lambda expression can be ok, the return type
+ // just is not deducible (user defined operators). Then return type deduction
+ // should never be entered at all, and the use of ret<> does this.
+ // However, for nullary lambda functors, return type deduction is always
+ // entered, and there seems to be no way around this.
+
+ // (the return type is part of the prototype of the non-template
+ // operator()(). The prototype is instantiated, even though the body
+ // is not.)
+
+ // So, in the case the return type deduction should fail, it should not
+ // fail directly, but rather result in a valid but wrong return type,
+ // causing a compile time error only if the function is really called.
+
+
+
+} // end detail
+
+
+
+// return_type_X_prot classes --------------------------------------------
+// These classes are the first layer that gets instantiated from the
+// lambda_functor_base sig templates. It will check whether
+// the action is protectable and one of arguments is "protected" or its
+// evaluation will otherwise result in another lambda functor.
+// If this is a case, the result type will be another lambda functor.
+
+// The arguments are always non-reference types, except for comma action
+// where the right argument can be a reference too. This is because it
+// matters (in the builtin case) whether the argument is an lvalue or
+// rvalue: int i; i, 1 -> rvalue; 1, i -> lvalue
+
+template <class Act, class A> struct return_type_1_prot {
+public:
+ typedef typename
+ detail::IF<
+ // is_protectable<Act>::value && is_lambda_functor<A>::value,
+ ice_and<is_protectable<Act>::value, is_lambda_functor<A>::value>::value,
+ lambda_functor<
+ lambda_functor_base<
+ Act,
+ tuple<typename detail::remove_reference_and_cv<A>::type>
+ >
+ >,
+ typename return_type_1<Act, A>::type
+ >::RET type;
+};
+
+ // take care of the unavoidable instantiation for nullary case
+template<class Act> struct return_type_1_prot<Act, null_type> {
+ typedef null_type type;
+};
+
+// Unary actions (result from unary operators)
+// do not have a default return type.
+template<class Act, class A> struct return_type_1 {
+ typedef typename
+ detail::return_type_deduction_failure<return_type_1> type;
+};
+
+
+namespace detail {
+
+ template <class T>
+ class protect_conversion {
+ typedef typename boost::remove_reference<T>::type non_ref_T;
+ public:
+
+ // add const to rvalues, so that all rvalues are stored as const in
+ // the args tuple
+ typedef typename detail::IF_type<
+// boost::is_reference<T>::value && !boost::is_const<non_ref_T>::value,
+ ice_and<boost::is_reference<T>::value,
+ ice_not<boost::is_const<non_ref_T>::value>::value>::value,
+ detail::identity_mapping<T>,
+ const_copy_argument<non_ref_T> // handles funtion and array
+ >::type type; // types correctly
+ };
+
+} // end detail
+
+template <class Act, class A, class B> struct return_type_2_prot {
+
+// experimental feature
+ // We may have a lambda functor as a result type of a subexpression
+ // (if protect) has been used.
+ // Thus, if one of the parameter types is a lambda functor, the result
+ // is a lambda functor as well.
+ // We need to make a conservative choise here.
+ // The resulting lambda functor stores all const reference arguments as
+ // const copies. References to non-const are stored as such.
+ // So if the source of the argument is a const open argument, a bound
+ // argument stored as a const reference, or a function returning a
+ // const reference, that information is lost. There is no way of
+ // telling apart 'real const references' from just 'LL internal
+ // const references' (or it would be really hard)
+
+ // The return type is a subclass of lambda_functor, which has a converting
+ // copy constructor. It can copy any lambda functor, that has the same
+ // action type and code, and a copy compatible argument tuple.
+
+
+ typedef typename boost::remove_reference<A>::type non_ref_A;
+ typedef typename boost::remove_reference<B>::type non_ref_B;
+
+typedef typename
+ detail::IF<
+// is_protectable<Act>::value &&
+// (is_lambda_functor<A>::value || is_lambda_functor<B>::value),
+ ice_and<is_protectable<Act>::value,
+ ice_or<is_lambda_functor<A>::value,
+ is_lambda_functor<B>::value>::value>::value,
+ lambda_functor<
+ lambda_functor_base<
+ Act,
+ tuple<typename detail::protect_conversion<A>::type,
+ typename detail::protect_conversion<B>::type>
+ >
+ >,
+ typename return_type_2<Act, non_ref_A, non_ref_B>::type
+ >::RET type;
+};
+
+ // take care of the unavoidable instantiation for nullary case
+template<class Act> struct return_type_2_prot<Act, null_type, null_type> {
+ typedef null_type type;
+};
+ // take care of the unavoidable instantiation for nullary case
+template<class Act, class Other> struct return_type_2_prot<Act, Other, null_type> {
+ typedef null_type type;
+};
+ // take care of the unavoidable instantiation for nullary case
+template<class Act, class Other> struct return_type_2_prot<Act, null_type, Other> {
+ typedef null_type type;
+};
+
+ // comma is a special case, as the user defined operator can return
+ // an lvalue (reference) too, hence it must be handled at this level.
+template<class A, class B>
+struct return_type_2_comma
+{
+ typedef typename boost::remove_reference<A>::type non_ref_A;
+ typedef typename boost::remove_reference<B>::type non_ref_B;
+
+typedef typename
+ detail::IF<
+// is_protectable<other_action<comma_action> >::value && // it is protectable
+// (is_lambda_functor<A>::value || is_lambda_functor<B>::value),
+ ice_and<is_protectable<other_action<comma_action> >::value, // it is protectable
+ ice_or<is_lambda_functor<A>::value,
+ is_lambda_functor<B>::value>::value>::value,
+ lambda_functor<
+ lambda_functor_base<
+ other_action<comma_action>,
+ tuple<typename detail::protect_conversion<A>::type,
+ typename detail::protect_conversion<B>::type>
+ >
+ >,
+ typename
+ return_type_2<other_action<comma_action>, non_ref_A, non_ref_B>::type
+ >::RET type1;
+
+ // if no user defined return_type_2 (or plain_return_type_2) specialization
+ // matches, then return the righthand argument
+ typedef typename
+ detail::IF<
+ boost::is_same<type1, detail::unspecified>::value,
+ B,
+ type1
+ >::RET type;
+
+};
+
+
+ // currently there are no protectable actions with > 2 args
+ // Note, that if there will be, lambda_functor_base will have to be
+ // changed to not get rid of references in Args elements
+
+template<class Act, class Args> struct return_type_N_prot {
+ typedef typename return_type_N<Act, Args>::type type;
+};
+
+ // take care of the unavoidable instantiation for nullary case
+template<class Act> struct return_type_N_prot<Act, null_type> {
+ typedef null_type type;
+};
+
+// handle different kind of actions ------------------------
+
+ // use the return type given in the bind invocation as bind<Ret>(...)
+template<int I, class Args, class Ret>
+struct return_type_N<function_action<I, Ret>, Args> {
+ typedef Ret type;
+};
+
+// ::result_type support
+
+namespace detail
+{
+
+BOOST_MPL_HAS_XXX_TRAIT_DEF(result_type)
+
+template<class F> struct get_result_type
+{
+ typedef typename F::result_type type;
+};
+
+template<class F, class A> struct get_sig
+{
+ typedef typename function_adaptor<F>::template sig<A>::type type;
+};
+
+} // namespace detail
+
+ // Ret is detail::unspecified, so try to deduce return type
+template<int I, class Args>
+struct return_type_N<function_action<I, detail::unspecified>, Args > {
+
+ // in the case of function action, the first element in Args is
+ // some type of function
+ typedef typename Args::head_type Func;
+ typedef typename detail::remove_reference_and_cv<Func>::type plain_Func;
+
+public:
+ // pass the function to function_adaptor, and get the return type from
+ // that
+ typedef typename detail::IF<
+ detail::has_result_type<plain_Func>::value,
+ detail::get_result_type<plain_Func>,
+ detail::get_sig<plain_Func, Args>
+ >::RET::type type;
+};
+
+
+} // namespace lambda
+} // namespace boost
+
+#endif
+
+
+
diff --git a/boost/boost/lambda/detail/select_functions.hpp b/boost/boost/lambda/detail/select_functions.hpp
new file mode 100644
index 00000000000..9e5e71fe1b6
--- /dev/null
+++ b/boost/boost/lambda/detail/select_functions.hpp
@@ -0,0 +1,74 @@
+// -- select_functions.hpp -- Boost Lambda Library --------------------------
+
+// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi@cs.utu.fi)
+//
+// 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)
+//
+// For more information, see http://www.boost.org
+
+
+#ifndef BOOST_LAMBDA_SELECT_FUNCTIONS_HPP
+#define BOOST_LAMBDA_SELECT_FUNCTIONS_HPP
+
+namespace boost {
+namespace lambda {
+namespace detail {
+
+
+// select functions -------------------------------
+template<class Any, CALL_TEMPLATE_ARGS>
+inline Any& select(Any& any, CALL_FORMAL_ARGS) { CALL_USE_ARGS; return any; }
+
+
+template<class Arg, CALL_TEMPLATE_ARGS>
+inline typename Arg::template sig<tuple<CALL_REFERENCE_TYPES> >::type
+select ( const lambda_functor<Arg>& op, CALL_FORMAL_ARGS ) {
+ return op.template call<
+ typename Arg::template sig<tuple<CALL_REFERENCE_TYPES> >::type
+ >(CALL_ACTUAL_ARGS);
+}
+template<class Arg, CALL_TEMPLATE_ARGS>
+inline typename Arg::template sig<tuple<CALL_REFERENCE_TYPES> >::type
+select ( lambda_functor<Arg>& op, CALL_FORMAL_ARGS) {
+ return op.template call<
+ typename Arg::template sig<tuple<CALL_REFERENCE_TYPES> >::type
+ >(CALL_ACTUAL_ARGS);
+}
+
+// ------------------------------------------------------------------------
+// select functions where the return type is explicitly given
+// Note: on many functions, this return type is just discarded.
+// The select functions are inside a class template, and the return type
+// is a class template argument.
+// The first implementation used function templates with an explicitly
+// specified template parameter.
+// However, this resulted in ambiguous calls (at least with gcc 2.95.2
+// and edg 2.44). Not sure whether the compilers were right or wrong.
+
+template<class RET> struct r_select {
+
+// Any == RET
+ template<class Any, CALL_TEMPLATE_ARGS>
+ static
+ inline RET go (Any& any, CALL_FORMAL_ARGS) { CALL_USE_ARGS; return any; }
+
+
+ template<class Arg, CALL_TEMPLATE_ARGS>
+ static
+ inline RET go (const lambda_functor<Arg>& op, CALL_FORMAL_ARGS ) {
+ return op.template call<RET>(CALL_ACTUAL_ARGS);
+ }
+ template<class Arg, CALL_TEMPLATE_ARGS>
+ static
+ inline RET go (lambda_functor<Arg>& op, CALL_FORMAL_ARGS ) {
+ return op.template call<RET>(CALL_ACTUAL_ARGS);
+ }
+};
+
+} // namespace detail
+} // namespace lambda
+} // namespace boost
+
+#endif
diff --git a/boost/boost/lambda/exceptions.hpp b/boost/boost/lambda/exceptions.hpp
new file mode 100644
index 00000000000..799ce4295dd
--- /dev/null
+++ b/boost/boost/lambda/exceptions.hpp
@@ -0,0 +1,1740 @@
+// -- Boost Lambda Library -- exceptions.hpp ----------------
+//
+// Copyright (C) 2000 Gary Powell (gwpowell@hotmail.com)
+// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi@cs.utu.fi)
+//
+// 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)
+//
+// For more information, see http://www.boost.org
+
+// -----------------------------------------------------
+
+#if !defined(BOOST_LAMBDA_EXCEPTIONS_HPP)
+#define BOOST_LAMBDA_EXCEPTIONS_HPP
+
+#include "boost/lambda/detail/control_constructs_common.hpp"
+
+namespace boost {
+namespace lambda {
+
+typedef lambda_functor<placeholder<EXCEPTION> > placeholderE_type;
+
+namespace {
+ boost::lambda::placeholderE_type freeE;
+ boost::lambda::placeholderE_type& _e = freeE;
+}
+
+// -- exception related actions -------------------
+
+// catch actions.
+template <class Catch1, class Catch2 = null_type, class Catch3 = null_type,
+ class Catch4 = null_type, class Catch5 = null_type,
+ class Catch6 = null_type, class Catch7 = null_type,
+ class Catch8 = null_type, class Catch9 = null_type,
+ class Catch10 = null_type>
+struct catch_action {};
+
+struct catch_all_action {};
+
+template<class CatchActions>
+struct return_try_catch_action {};
+
+template<class CatchActions>
+struct try_catch_action {};
+
+// rethrow actions
+struct throw_new_action {};
+struct rethrow_action {};
+
+template<class ThrowType> struct throw_action;
+
+template<>
+struct throw_action<rethrow_action> {
+ template<class RET>
+ static RET apply() {
+ throw;
+ }
+};
+
+template<> struct throw_action<throw_new_action> {
+ template<class RET, class T>
+ static RET apply(T& t) {
+ throw t;
+ }
+};
+
+// return types for throw_actions --------------------------------------------
+
+template<class T, class Any>
+struct
+return_type_N<throw_action<T>, Any> {
+ typedef void type;
+};
+
+
+// return types deductions -------------------------------------------------
+
+// the return type of try_catch is the return type of the try lambda_functor
+// (the return types of try and catch parts must match unless try returns void
+// or the catch part throws for sure)
+
+// NOTE, the exception placeholder deduction rule is defined
+// in return_type_traits.hpp
+
+
+
+// defined in control_constructs
+class ifthenelse_action;
+
+namespace detail {
+
+// Templates for deducing, wether a lambda_functor throws inevitably of not -
+// This mechanism is needed to make the compiler happy about
+// return types of try and catch parts.
+
+// a lambda_functor throws for sure if:
+// - it is a throw expression
+// - it is a comma expression, and one of its arguments throws for sure
+// - it is an if_then_else expression and either the if statement or both
+// the then and else throw.
+// (there are other cases as well, but we do not cover them)
+// e.g. _1 + (rethrow(), 3) does throw for sure but this is not checked
+// This implies, that in such a case, the return types of try and catch parts
+// must match if the try part returns other than void.
+// (Such checks could be done though)
+
+template <class Arg>
+struct throws_for_sure_phase2 {
+ static const bool value = false;
+};
+
+template <int N, class ThrowType, class Args>
+struct throws_for_sure_phase2<
+ lambda_functor<
+ lambda_functor_base<action<N, throw_action<ThrowType> >, Args>
+ >
+>
+{
+ static const bool value = true;
+};
+
+// Both then and else or the if throw of an if_then_else.
+template <class Args>
+struct throws_for_sure_phase2<
+ lambda_functor<
+ lambda_functor_base<
+ ifthenelse_action, Args
+ >
+ >
+>
+{
+ static const bool value =
+ throws_for_sure_phase2<
+ typename boost::tuples::element<0, Args>::type>::value
+ ||
+ (
+ throws_for_sure_phase2<
+ typename boost::tuples::element<1, Args>::type
+ >::value
+ &&
+ throws_for_sure_phase2<
+ typename boost::tuples::element<2, Args>::type
+ >::value
+ );
+};
+
+template <class Args>
+struct throws_for_sure_phase2<
+ lambda_functor<
+ lambda_functor_base< other_action<comma_action>, Args>
+ >
+>
+{
+ static const bool value =
+ throws_for_sure_phase2<
+ typename boost::tuples::element<0, Args>::type
+ >::value
+ ||
+ throws_for_sure_phase2<
+ typename boost::tuples::element<1, Args>::type
+ >::value;
+};
+
+ // get rid of any qualifiers and references
+ // lambda_functors should be stored like that, so this is to be extra sure
+template <class Arg>
+struct throws_for_sure {
+ static const bool value
+ = throws_for_sure_phase2<
+ typename detail::remove_reference_and_cv<Arg>::type
+ >::value;
+};
+
+
+// -- return_or_throw templates -----------------------------
+
+// false case, catch and try return types are incompatible
+// Now the catch part must throw for sure, otherwise a compile time error
+// occurs.
+template<bool is_conversion>
+struct return_or_throw_phase2 {
+ template<class RET, class Arg, CALL_TEMPLATE_ARGS>
+ static RET call(Arg& arg, CALL_FORMAL_ARGS) {
+ BOOST_STATIC_ASSERT(throws_for_sure<Arg>::value);
+ detail::select(arg, CALL_ACTUAL_ARGS); // this line throws
+ throw 1; // this line is never performed, hence 1 is just a dummy
+ // The line is needed to make compiler happy and not require
+ // a matching return type
+ }
+};
+
+// the try and catch return types are compatible
+template<>
+struct return_or_throw_phase2<true> {
+ template<class RET, class Arg, CALL_TEMPLATE_ARGS>
+ static RET call(Arg& arg, CALL_FORMAL_ARGS) {
+ return detail::select(arg, CALL_ACTUAL_ARGS);
+ }
+};
+
+
+// the non-void case. Try part returns a value, so catch parts must
+// return a value of the same type or throw
+template<class RET, class ARG>
+struct return_or_throw {
+ // Arg should be equal to ARG except that ARG may be a reference
+ // to be sure, that there are no suprises for peculiarly defined return types
+ // ARG is passed explicitely
+ template<class Arg, CALL_TEMPLATE_ARGS>
+ static RET call(Arg& arg, CALL_FORMAL_ARGS)
+ {
+ // typedef typename Arg::return_type<ARG, open_args<A&, B&, C&> >::type RT;
+ typedef typename as_lambda_functor<ARG>::type lf_type;
+ typedef typename lf_type::inherited::template
+ sig<tuple<CALL_REFERENCE_TYPES> >::type RT;
+
+ return
+ return_or_throw_phase2<
+ ::boost::is_convertible<RT, RET>::value
+ >::template call<RET>(arg, CALL_ACTUAL_ARGS);
+ }
+};
+
+// if try part returns void, we do not return the catch parts either
+template<class ARG>
+struct return_or_throw<void, ARG> {
+ template<class Arg, CALL_TEMPLATE_ARGS>
+ static void call(Arg& arg, CALL_FORMAL_ARGS) { detail::select(arg, CALL_ACTUAL_ARGS); }
+};
+
+} // end detail
+
+// Throwing exceptions ---------------------------------------------
+
+namespace detail {
+
+template <class T> struct catch_block {};
+struct catch_all_block {};
+
+template <class T> struct exception_catch_tag {};
+
+// normal catch block is represented as
+// tagged_lambda_functor<exception_catch_tag<catch_type<T> > >, LambdaFunctor>
+
+// the default catch all block as:
+// tagged_lambda_functor<exception_catch_tag<catch_all_block> >, LambdaFunctor>
+
+
+} // end detail
+
+// the code is RETHROW, this ensures that a compile time error results,
+// if this lambda_functor is used outside a delayed catch_expression
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<0, throw_action<rethrow_action> >,
+ null_type
+ >
+>
+rethrow() {
+ return
+ lambda_functor_base<
+ action<0, throw_action<rethrow_action> >,
+ null_type
+ >
+ ( null_type() );
+}
+
+template <class Arg1>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<1, throw_action<throw_new_action> >,
+ tuple<typename const_copy_argument<const Arg1>::type>
+ >
+>
+throw_exception(const Arg1& a1) {
+ return
+ lambda_functor_base<
+ action<1, throw_action<throw_new_action> >,
+ tuple<typename const_copy_argument<const Arg1>::type>
+ >
+ ( tuple<typename const_copy_argument<const Arg1>::type>(a1));
+}
+
+// create catch blocks
+template <class CatchType, class Arg>
+inline const
+tagged_lambda_functor<
+ detail::exception_catch_tag<detail::catch_block<CatchType> >,
+ lambda_functor<Arg>
+>
+catch_exception(const lambda_functor<Arg>& a) {
+ // the third placeholder cannot be used in catch_exception
+ // BOOST_STATIC_ASSERT((!has_placeholder<Arg, THIRD>::value));
+ return
+ tagged_lambda_functor<
+ detail::exception_catch_tag<detail::catch_block<CatchType> >,
+ lambda_functor<Arg>
+ > (a);
+}
+
+// catch and do nothing case.
+template <class CatchType>
+inline const
+tagged_lambda_functor<
+ detail::exception_catch_tag<detail::catch_block<CatchType> >,
+ lambda_functor<
+ lambda_functor_base<
+ do_nothing_action,
+ null_type
+ >
+ >
+>
+catch_exception() {
+ return
+ tagged_lambda_functor<
+ detail::exception_catch_tag<detail::catch_block<CatchType> >,
+ lambda_functor<
+ lambda_functor_base<
+ do_nothing_action,
+ null_type
+ >
+ >
+ > ();
+}
+
+// create catch(...) blocks
+template <class Arg>
+inline const
+tagged_lambda_functor<
+ detail::exception_catch_tag<detail::catch_all_block>,
+ lambda_functor<Arg>
+>
+catch_all(const lambda_functor<Arg>& a) {
+ // the third placeholder cannot be used in catch_exception
+ BOOST_STATIC_ASSERT((!has_placeholder<Arg, THIRD>::value));
+ return
+ tagged_lambda_functor<
+ detail::exception_catch_tag<detail::catch_all_block>,
+ lambda_functor<Arg>
+ > (a);
+}
+
+// catch(...) and do nothing case.
+inline const
+tagged_lambda_functor<
+ detail::exception_catch_tag<detail::catch_all_block>,
+ lambda_functor<
+ lambda_functor_base<
+ do_nothing_action,
+ null_type
+ >
+ >
+>
+catch_all() {
+ return
+ tagged_lambda_functor<
+ detail::exception_catch_tag<detail::catch_all_block>,
+ lambda_functor<
+ lambda_functor_base<
+ do_nothing_action,
+ null_type
+ >
+ >
+ > ();
+}
+
+// try_catch functions --------------------------------
+// The second -> N argument(s) are must be catch lambda_functors
+template <class TryArg, class Catch1, class LF1>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<2, try_catch_action<catch_action<Catch1> > >,
+ tuple<lambda_functor<TryArg>, LF1>
+ >
+>
+try_catch(
+ const lambda_functor<TryArg>& a1,
+ const tagged_lambda_functor<detail::exception_catch_tag<Catch1>, LF1>& a2)
+{
+ return
+ lambda_functor_base<
+ action<2, try_catch_action<catch_action<Catch1> > >,
+ tuple<lambda_functor<TryArg>, LF1>
+ >
+ ( tuple< lambda_functor<TryArg>, LF1>(a1, a2));
+}
+
+template <class TryArg, class Catch1, class LF1,
+ class Catch2, class LF2>
+inline const
+ lambda_functor<
+ lambda_functor_base<
+ action<3, try_catch_action<catch_action<detail::catch_block<Catch1>, Catch2> > >,
+ tuple<lambda_functor<TryArg>, LF1, LF2>
+ >
+>
+try_catch(
+ const lambda_functor<TryArg>& a1,
+ const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch1> >, LF1>& a2,
+ const tagged_lambda_functor<detail::exception_catch_tag<Catch2>, LF2>& a3)
+{
+ return
+ lambda_functor_base<
+ action<3, try_catch_action<catch_action<detail::catch_block<Catch1>, Catch2> > >,
+ tuple<lambda_functor<TryArg>, LF1, LF2>
+ >
+ ( tuple<lambda_functor<TryArg>, LF1, LF2>(a1, a2, a3));
+}
+
+template <class TryArg, class Catch1, class LF1,
+ class Catch2, class LF2,
+ class Catch3, class LF3>
+inline const lambda_functor<
+ lambda_functor_base<
+ action<4, try_catch_action<catch_action<detail::catch_block<Catch1>, detail::catch_block<Catch2>, Catch3> > >,
+ tuple<lambda_functor<TryArg>, LF1, LF2, LF3>
+ >
+>
+try_catch(
+ const lambda_functor<TryArg>& a1,
+ const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch1> >, LF1>& a2,
+ const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch2> >, LF2>& a3,
+ const tagged_lambda_functor<detail::exception_catch_tag<Catch3>, LF3>& a4)
+{
+ return
+ lambda_functor_base<
+ action<4, try_catch_action<catch_action<detail::catch_block<Catch1>, detail::catch_block<Catch2>, Catch3> > >,
+ tuple<lambda_functor<TryArg>, LF1, LF2, LF3>
+ >
+ ( tuple<lambda_functor<TryArg>, LF1, LF2, LF3>(a1, a2, a3, a4));
+}
+
+template <class TryArg, class Catch1, class LF1,
+ class Catch2, class LF2,
+ class Catch3, class LF3,
+ class Catch4, class LF4>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<
+ 5,
+ try_catch_action<
+ catch_action<detail::catch_block<Catch1>, detail::catch_block<Catch2>, detail::catch_block<Catch3>, Catch4>
+ >
+ >,
+ tuple<lambda_functor<TryArg>, LF1, LF2, LF3, LF4>
+ >
+>
+try_catch(
+ const lambda_functor<TryArg>& a1,
+ const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch1> >, LF1>& a2,
+ const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch2> >, LF2>& a3,
+ const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch3> >, LF3>& a4,
+ const tagged_lambda_functor<detail::exception_catch_tag<Catch4>, LF4>& a5)
+{
+ return
+ lambda_functor_base<
+ action<
+ 5,
+ try_catch_action<catch_action<detail::catch_block<Catch1>, detail::catch_block<Catch2>, detail::catch_block<Catch3>, Catch4> >
+ >,
+ tuple<lambda_functor<TryArg>, LF1, LF2, LF3, LF4>
+ >
+ ( tuple<lambda_functor<TryArg>, LF1, LF2, LF3, LF4>(a1, a2, a3, a4, a5));
+}
+
+template <class TryArg, class Catch1, class LF1,
+ class Catch2, class LF2,
+ class Catch3, class LF3,
+ class Catch4, class LF4,
+ class Catch5, class LF5>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<
+ 6,
+ try_catch_action<catch_action<detail::catch_block<Catch1>, detail::catch_block<Catch2>, detail::catch_block<Catch3>, detail::catch_block<Catch4>, Catch5> >
+ >,
+ tuple<lambda_functor<TryArg>, LF1, LF2, LF3, LF4, LF5>
+ >
+>
+try_catch(
+ const lambda_functor<TryArg>& a1,
+ const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch1> >, LF1>& a2,
+ const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch2> >, LF2>& a3,
+ const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch3> >, LF3>& a4,
+ const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch4> >, LF4>& a5,
+ const tagged_lambda_functor<detail::exception_catch_tag<Catch5>, LF5>& a6)
+{
+ return
+ lambda_functor_base<
+ action<
+ 6,
+ try_catch_action<
+ catch_action<detail::catch_block<Catch1>, detail::catch_block<Catch2>, detail::catch_block<Catch3>, detail::catch_block<Catch4>, Catch5>
+ >
+ >,
+ tuple<lambda_functor<TryArg>, LF1, LF2, LF3, LF4, LF5>
+ >
+ ( tuple<lambda_functor<TryArg>, LF1, LF2, LF3, LF4, LF5>
+ (a1, a2, a3, a4, a5, a6)
+ );
+}
+
+template <class TryArg, class Catch1, class LF1,
+ class Catch2, class LF2,
+ class Catch3, class LF3,
+ class Catch4, class LF4,
+ class Catch5, class LF5,
+ class Catch6, class LF6>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<
+ 7,
+ try_catch_action<
+ catch_action<detail::catch_block<Catch1>, detail::catch_block<Catch2>, detail::catch_block<Catch3>, detail::catch_block<Catch4>, detail::catch_block<Catch5>, Catch6>
+ >
+ >,
+ tuple<lambda_functor<TryArg>, LF1, LF2, LF3, LF4, LF5, LF6>
+ >
+>
+try_catch(
+ const lambda_functor<TryArg>& a1,
+ const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch1> >, LF1>& a2,
+ const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch2> >, LF2>& a3,
+ const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch3> >, LF3>& a4,
+ const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch4> >, LF4>& a5,
+ const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch5> >, LF5>& a6,
+ const tagged_lambda_functor<detail::exception_catch_tag<Catch6>, LF6>& a7)
+{
+ return
+ lambda_functor_base<
+ action<
+ 7,
+ try_catch_action<
+ catch_action<detail::catch_block<Catch1>, detail::catch_block<Catch2>, detail::catch_block<Catch3>, detail::catch_block<Catch4>, detail::catch_block<Catch5>,Catch6>
+ >
+ >,
+ tuple<lambda_functor<TryArg>, LF1, LF2, LF3, LF4, LF5, LF6>
+ >
+ ( tuple<lambda_functor<TryArg>, LF1, LF2, LF3, LF4, LF5, LF6>
+ (a1, a2, a3, a4, a5, a6, a7));
+}
+
+template <class TryArg, class Catch1, class LF1,
+ class Catch2, class LF2,
+ class Catch3, class LF3,
+ class Catch4, class LF4,
+ class Catch5, class LF5,
+ class Catch6, class LF6,
+ class Catch7, class LF7>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<
+ 8,
+ try_catch_action<
+ catch_action<detail::catch_block<Catch1>, detail::catch_block<Catch2>, detail::catch_block<Catch3>, detail::catch_block<Catch4>, detail::catch_block<Catch5>, detail::catch_block<Catch6>, Catch7>
+ >
+ >,
+ tuple<lambda_functor<TryArg>, LF1, LF2, LF3, LF4, LF5, LF6, LF7>
+ >
+>
+try_catch(
+ const lambda_functor<TryArg>& a1,
+ const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch1> >, LF1>& a2,
+ const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch2> >, LF2>& a3,
+ const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch3> >, LF3>& a4,
+ const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch4> >, LF4>& a5,
+ const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch5> >, LF5>& a6,
+ const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch6> >, LF6>& a7,
+ const tagged_lambda_functor<detail::exception_catch_tag<Catch7>, LF7>& a8)
+{
+ return
+ lambda_functor_base<
+ action<
+ 8,
+ try_catch_action<
+ catch_action<
+ detail::catch_block<Catch1>, detail::catch_block<Catch2>, detail::catch_block<Catch3>, detail::catch_block<Catch4>, detail::catch_block<Catch5>, detail::catch_block<Catch6>, Catch7
+ >
+ >
+ >,
+ tuple<lambda_functor<TryArg>, LF1, LF2, LF3, LF4, LF5, LF6, LF7>
+ >
+ ( tuple<lambda_functor<TryArg>, LF1, LF2, LF3, LF4, LF5, LF6, LF7>
+ (a1, a2, a3, a4, a5, a6, a7, a8));
+}
+
+template <class TryArg, class Catch1, class LF1,
+ class Catch2, class LF2,
+ class Catch3, class LF3,
+ class Catch4, class LF4,
+ class Catch5, class LF5,
+ class Catch6, class LF6,
+ class Catch7, class LF7,
+ class Catch8, class LF8>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ action<
+ 9,
+ try_catch_action<
+ catch_action<
+ detail::catch_block<Catch1>, detail::catch_block<Catch2>, detail::catch_block<Catch3>, detail::catch_block<Catch4>, detail::catch_block<Catch5>, detail::catch_block<Catch6>, detail::catch_block<Catch7>, Catch8
+ >
+ >
+ >,
+ tuple<lambda_functor<TryArg>, LF1, LF2, LF3, LF4, LF5, LF6, LF7, LF8>
+ >
+>
+try_catch(
+ const lambda_functor<TryArg>& a1,
+ const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch1> >, LF1>& a2,
+ const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch2> >, LF2>& a3,
+ const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch3> >, LF3>& a4,
+ const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch4> >, LF4>& a5,
+ const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch5> >, LF5>& a6,
+ const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch6> >, LF6>& a7,
+ const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch7> >, LF7>& a8,
+ const tagged_lambda_functor<detail::exception_catch_tag<Catch8>, LF8>& a9)
+{
+ return
+ lambda_functor_base<
+ action<
+ 9,
+ try_catch_action<
+ catch_action<
+ detail::catch_block<Catch1>, detail::catch_block<Catch2>, detail::catch_block<Catch3>, detail::catch_block<Catch4>, detail::catch_block<Catch5>, detail::catch_block<Catch6>, detail::catch_block<Catch7>, Catch8
+ >
+ >
+ >,
+ tuple<lambda_functor<TryArg>, LF1, LF2, LF3, LF4, LF5, LF6, LF7, LF8>
+ >
+ ( tuple<lambda_functor<TryArg>, LF1, LF2, LF3, LF4, LF5, LF6, LF7, LF8>
+ (a1, a2, a3, a4, a5, a6, a7, a8, a9));
+}
+
+template <class TryArg, class Catch1, class LF1,
+ class Catch2, class LF2,
+ class Catch3, class LF3,
+ class Catch4, class LF4,
+ class Catch5, class LF5,
+ class Catch6, class LF6,
+ class Catch7, class LF7,
+ class Catch8, class LF8,
+ class Catch9, class LF9>
+inline const
+ lambda_functor<
+ lambda_functor_base<
+ action<
+ 10,
+ try_catch_action<
+ catch_action<
+ detail::catch_block<Catch1>, detail::catch_block<Catch2>, detail::catch_block<Catch3>, detail::catch_block<Catch4>, detail::catch_block<Catch5>, detail::catch_block<Catch6>, detail::catch_block<Catch7>, detail::catch_block<Catch8>,
+ Catch9
+ >
+ >
+ >,
+ tuple<
+ lambda_functor<TryArg>, LF1, LF2, LF3, LF4, LF5, LF6, LF7, LF8, LF9
+ >
+ >
+ >
+try_catch(
+ const lambda_functor<TryArg>& a1,
+ const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch1> >, LF1>& a2,
+ const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch2> >, LF2>& a3,
+ const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch3> >, LF3>& a4,
+ const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch4> >, LF4>& a5,
+ const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch5> >, LF5>& a6,
+ const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch6> >, LF6>& a7,
+ const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch7> >, LF7>& a8,
+ const tagged_lambda_functor<detail::exception_catch_tag<detail::catch_block<Catch8> >, LF8>& a9,
+ const tagged_lambda_functor<detail::exception_catch_tag<Catch9>, LF9>& a10)
+{
+ return
+ lambda_functor_base<
+ action<
+ 10,
+ try_catch_action<
+ catch_action<
+ detail::catch_block<Catch1>, detail::catch_block<Catch2>, detail::catch_block<Catch3>, detail::catch_block<Catch4>, detail::catch_block<Catch5>, detail::catch_block<Catch6>, detail::catch_block<Catch7>, detail::catch_block<Catch8>,
+ Catch9
+ >
+ >
+ >,
+ tuple<
+ lambda_functor<TryArg>, LF1, LF2, LF3, LF4, LF5, LF6, LF7, LF8, LF9
+ >
+ >
+ ( tuple<
+ lambda_functor<TryArg>, LF1, LF2, LF3, LF4, LF5, LF6, LF7, LF8, LF9
+ >(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10));
+}
+
+
+// ---------------------------------------------------------------------------
+// Specializations for lambda_functor_base of try_catch ----------------------
+
+// 1 catch type case
+
+template<class Args, class Catch1>
+class lambda_functor_base<
+ action<2, try_catch_action<catch_action<detail::catch_block<Catch1> > > >,
+ Args
+>
+{
+public:
+ Args args;
+public:
+ explicit lambda_functor_base(const Args& a) : args(a) {}
+
+// the return type of try_catch is the return type of the try lambda_functor
+// (the return types of try and catch parts must match unless try returns void
+// or the catch part throws for sure)
+
+ template <class SigArgs> struct sig {
+ typedef typename
+ as_lambda_functor<
+ typename boost::tuples::element<0, Args>::type
+ >::type lf_type;
+
+ typedef typename lf_type::inherited::template sig<SigArgs>::type type;
+ };
+
+ template<class RET, CALL_TEMPLATE_ARGS>
+ RET call(CALL_FORMAL_ARGS) const {
+ try
+ {
+ return detail::select(::boost::tuples::get<0>(args), CALL_ACTUAL_ARGS);
+ }
+ catch (Catch1& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<1, Args>::type>
+ ::call(::boost::tuples::get<1>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ }
+};
+
+
+
+template<class Args>
+class lambda_functor_base<action<2, try_catch_action<catch_action<detail::catch_all_block> > >, Args> {
+public:
+ Args args;
+public:
+ explicit lambda_functor_base(const Args& a) : args(a) {}
+
+ template <class SigArgs> struct sig {
+ typedef typename
+ as_lambda_functor<
+ typename boost::tuples::element<0, Args>::type
+ >::type lf_type;
+
+ typedef typename lf_type::inherited::template sig<SigArgs>::type type;
+ };
+
+ template<class RET, CALL_TEMPLATE_ARGS>
+ RET call(CALL_FORMAL_ARGS) const {
+ try
+ {
+ return detail::select(::boost::tuples::get<0>(args), CALL_ACTUAL_ARGS);
+ }
+ catch (...)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<1, Args>::type>
+ ::call(::boost::tuples::get<1>(args), CALL_ACTUAL_ARGS);
+ }
+ }
+};
+
+
+// 2 catch types case
+template<class Args, class Catch1, class Catch2>
+class lambda_functor_base<action<3, try_catch_action<catch_action<detail::catch_block<Catch1>, detail::catch_block<Catch2> > > >, Args> {
+public:
+ Args args;
+public:
+ explicit lambda_functor_base(const Args& a) : args(a) {}
+
+ template <class SigArgs> struct sig {
+ typedef typename
+ as_lambda_functor<
+ typename boost::tuples::element<0, Args>::type
+ >::type lf_type;
+
+ typedef typename lf_type::inherited::template sig<SigArgs>::type type;
+ };
+
+ template<class RET, CALL_TEMPLATE_ARGS>
+ RET call(CALL_FORMAL_ARGS) const {
+ try
+ {
+ return detail::select(::boost::tuples::get<0>(args), CALL_ACTUAL_ARGS);
+ }
+ catch (Catch1& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<1, Args>::type>
+ ::call(::boost::tuples::get<1>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch2& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<2, Args>::type>
+ ::call(::boost::tuples::get<2>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ }
+};
+
+template<class Args, class Catch1>
+class lambda_functor_base<action<3, try_catch_action<catch_action<detail::catch_block<Catch1>,detail::catch_all_block> > >, Args> {
+public:
+ Args args;
+public:
+ explicit lambda_functor_base(const Args& a) : args(a) {}
+
+ template <class SigArgs> struct sig {
+ typedef typename
+ as_lambda_functor<
+ typename boost::tuples::element<0, Args>::type
+ >::type lf_type;
+
+ typedef typename lf_type::inherited::template sig<SigArgs>::type type;
+ };
+
+ template<class RET, CALL_TEMPLATE_ARGS>
+ RET call(CALL_FORMAL_ARGS) const {
+ try
+ {
+ return detail::select(::boost::tuples::get<0>(args), CALL_ACTUAL_ARGS);
+ }
+ catch (Catch1& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<1, Args>::type>
+ ::call(::boost::tuples::get<1>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (...)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<2, Args>::type>
+ ::call(::boost::tuples::get<2>(args), CALL_ACTUAL_ARGS);
+ }
+ }
+};
+
+// 3 catch types case
+template<class Args, class Catch1, class Catch2, class Catch3>
+class lambda_functor_base<action<4, try_catch_action<catch_action<detail::catch_block<Catch1>, detail::catch_block<Catch2>, detail::catch_block<Catch3> > > >, Args> {
+public:
+ Args args;
+public:
+ explicit lambda_functor_base(const Args& a) : args(a) {}
+
+ template <class SigArgs> struct sig {
+ typedef typename
+ as_lambda_functor<
+ typename boost::tuples::element<0, Args>::type
+ >::type lf_type;
+
+ typedef typename lf_type::inherited::template sig<SigArgs>::type type;
+ };
+
+ template<class RET, CALL_TEMPLATE_ARGS>
+ RET call(CALL_FORMAL_ARGS) const {
+ try
+ {
+ return detail::select(::boost::tuples::get<0>(args), CALL_ACTUAL_ARGS);
+ }
+ catch (Catch1& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<1, Args>::type>
+ ::call(::boost::tuples::get<1>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+
+ }
+ catch (Catch2& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<2, Args>::type>
+ ::call(::boost::tuples::get<2>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+
+ }
+ catch (Catch3& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<3, Args>::type>
+ ::call(::boost::tuples::get<3>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ }
+};
+
+template<class Args, class Catch1, class Catch2>
+class lambda_functor_base<action<4, try_catch_action<catch_action<detail::catch_block<Catch1>, detail::catch_block<Catch2>,detail::catch_all_block> > >, Args> {
+public:
+ Args args;
+public:
+ explicit lambda_functor_base(const Args& a) : args(a) {}
+
+ template <class SigArgs> struct sig {
+ typedef typename
+ as_lambda_functor<
+ typename boost::tuples::element<0, Args>::type
+ >::type lf_type;
+
+ typedef typename lf_type::inherited::template sig<SigArgs>::type type;
+ };
+
+ template<class RET, CALL_TEMPLATE_ARGS>
+ RET call(CALL_FORMAL_ARGS) const {
+ try
+ {
+ return detail::select(::boost::tuples::get<0>(args), CALL_ACTUAL_ARGS);
+ }
+ catch (Catch1& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<1, Args>::type>
+ ::call(::boost::tuples::get<1>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch2& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<2, Args>::type>
+ ::call(::boost::tuples::get<2>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (...)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<3, Args>::type>
+ ::call(::boost::tuples::get<3>(args), CALL_ACTUAL_ARGS);
+ }
+ }
+};
+
+// 4 catch types case
+template<class Args, class Catch1, class Catch2, class Catch3, class Catch4>
+class lambda_functor_base<action<5, try_catch_action<catch_action<detail::catch_block<Catch1>, detail::catch_block<Catch2>, detail::catch_block<Catch3>, detail::catch_block<Catch4> > > >, Args> {
+public:
+ Args args;
+public:
+ explicit lambda_functor_base(const Args& a) : args(a) {}
+
+ template <class SigArgs> struct sig {
+ typedef typename
+ as_lambda_functor<
+ typename boost::tuples::element<0, Args>::type
+ >::type lf_type;
+
+ typedef typename lf_type::inherited::template sig<SigArgs>::type type;
+ };
+
+ template<class RET, CALL_TEMPLATE_ARGS>
+ RET call(CALL_FORMAL_ARGS) const {
+ try
+ {
+ return detail::select(::boost::tuples::get<0>(args), CALL_ACTUAL_ARGS);
+ }
+ catch (Catch1& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<1, Args>::type>
+ ::call(::boost::tuples::get<1>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch2& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<2, Args>::type>
+ ::call(::boost::tuples::get<2>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch3& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<3, Args>::type>
+ ::call(::boost::tuples::get<3>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch4& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<4, Args>::type>
+ ::call(::boost::tuples::get<4>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ }
+};
+
+template<class Args, class Catch1, class Catch2, class Catch3>
+class lambda_functor_base<action<5, try_catch_action<catch_action<detail::catch_block<Catch1>, detail::catch_block<Catch2>, detail::catch_block<Catch3>,detail::catch_all_block> > >, Args> {
+public:
+ Args args;
+public:
+ explicit lambda_functor_base(const Args& a) : args(a) {}
+
+ template <class SigArgs> struct sig {
+ typedef typename
+ as_lambda_functor<
+ typename boost::tuples::element<0, Args>::type
+ >::type lf_type;
+
+ typedef typename lf_type::inherited::template sig<SigArgs>::type type;
+ };
+
+ template<class RET, CALL_TEMPLATE_ARGS>
+ RET call(CALL_FORMAL_ARGS) const {
+ try
+ {
+ return detail::select(::boost::tuples::get<0>(args), CALL_ACTUAL_ARGS);
+ }
+ catch (Catch1& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<1, Args>::type>
+ ::call(::boost::tuples::get<1>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch2& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<2, Args>::type>
+ ::call(::boost::tuples::get<2>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch3& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<3, Args>::type>
+ ::call(::boost::tuples::get<3>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (...)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<4, Args>::type>
+ ::call(::boost::tuples::get<4>(args), CALL_ACTUAL_ARGS);
+ }
+ }
+};
+
+// 5 catch types case
+template<class Args, class Catch1, class Catch2, class Catch3, class Catch4, class Catch5>
+class lambda_functor_base<action<6, try_catch_action<catch_action<detail::catch_block<Catch1>, detail::catch_block<Catch2>, detail::catch_block<Catch3>, detail::catch_block<Catch4>, detail::catch_block<Catch5> > > >, Args> {
+public:
+ Args args;
+public:
+ explicit lambda_functor_base(const Args& a) : args(a) {}
+
+ template <class SigArgs> struct sig {
+ typedef typename
+ as_lambda_functor<
+ typename boost::tuples::element<0, Args>::type
+ >::type lf_type;
+
+ typedef typename lf_type::inherited::template sig<SigArgs>::type type;
+ };
+
+ template<class RET, CALL_TEMPLATE_ARGS>
+ RET call(CALL_FORMAL_ARGS) const {
+ try
+ {
+ return detail::select(::boost::tuples::get<0>(args), CALL_ACTUAL_ARGS);
+ }
+ catch (Catch1& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<1, Args>::type>
+ ::call(::boost::tuples::get<1>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch2& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<2, Args>::type>
+ ::call(::boost::tuples::get<2>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch3& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<3, Args>::type>
+ ::call(::boost::tuples::get<3>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch4& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<4, Args>::type>
+ ::call(::boost::tuples::get<4>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch5& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<4, Args>::type>
+ ::call(::boost::tuples::get<5>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ }
+};
+
+template<class Args, class Catch1, class Catch2, class Catch3, class Catch4>
+class lambda_functor_base<action<6, try_catch_action<catch_action<detail::catch_block<Catch1>, detail::catch_block<Catch2>, detail::catch_block<Catch3>, detail::catch_block<Catch4>,detail::catch_all_block> > >, Args> {
+public:
+ Args args;
+public:
+ explicit lambda_functor_base(const Args& a) : args(a) {}
+
+ template <class SigArgs> struct sig {
+ typedef typename
+ as_lambda_functor<
+ typename boost::tuples::element<0, Args>::type
+ >::type lf_type;
+
+ typedef typename lf_type::inherited::template sig<SigArgs>::type type;
+ };
+
+ template<class RET, CALL_TEMPLATE_ARGS>
+ RET call(CALL_FORMAL_ARGS) const {
+ try
+ {
+ return detail::select(::boost::tuples::get<0>(args), CALL_ACTUAL_ARGS);
+ }
+ catch (Catch1& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<1, Args>::type>
+ ::call(::boost::tuples::get<1>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch2& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<2, Args>::type>
+ ::call(::boost::tuples::get<2>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch3& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<3, Args>::type>
+ ::call(::boost::tuples::get<3>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch4& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<4, Args>::type>
+ ::call(::boost::tuples::get<4>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (...)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<5, Args>::type>
+ ::call(::boost::tuples::get<5>(args), CALL_ACTUAL_ARGS);
+ }
+ }
+};
+
+// 6 catch types case
+template<class Args, class Catch1, class Catch2, class Catch3, class Catch4, class Catch5, class Catch6>
+class lambda_functor_base<action<7, try_catch_action<catch_action<detail::catch_block<Catch1>, detail::catch_block<Catch2>, detail::catch_block<Catch3>, detail::catch_block<Catch4>, detail::catch_block<Catch5>, detail::catch_block<Catch6> > > >, Args> {
+public:
+ Args args;
+public:
+ explicit lambda_functor_base(const Args& a) : args(a) {}
+
+ template <class SigArgs> struct sig {
+ typedef typename
+ as_lambda_functor<
+ typename boost::tuples::element<0, Args>::type
+ >::type lf_type;
+
+ typedef typename lf_type::inherited::template sig<SigArgs>::type type;
+ };
+
+ template<class RET, CALL_TEMPLATE_ARGS>
+ RET call(CALL_FORMAL_ARGS) const {
+ try
+ {
+ return detail::select(::boost::tuples::get<0>(args), CALL_ACTUAL_ARGS);
+ }
+ catch (Catch1& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<1, Args>::type>
+ ::call(::boost::tuples::get<1>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch2& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<2, Args>::type>
+ ::call(::boost::tuples::get<2>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch3& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<3, Args>::type>
+ ::call(::boost::tuples::get<3>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch4& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<4, Args>::type>
+ ::call(::boost::tuples::get<4>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch5& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<5, Args>::type>
+ ::call(::boost::tuples::get<5>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch6& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<6, Args>::type>
+ ::call(::boost::tuples::get<6>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ }
+};
+
+template<class Args, class Catch1, class Catch2, class Catch3, class Catch4, class Catch5>
+class lambda_functor_base<action<7, try_catch_action<catch_action<detail::catch_block<Catch1>, detail::catch_block<Catch2>, detail::catch_block<Catch3>, detail::catch_block<Catch4>, detail::catch_block<Catch5>,detail::catch_all_block> > >, Args> {
+public:
+ Args args;
+public:
+ explicit lambda_functor_base(const Args& a) : args(a) {}
+
+ template <class SigArgs> struct sig {
+ typedef typename
+ as_lambda_functor<
+ typename boost::tuples::element<0, Args>::type
+ >::type lf_type;
+
+ typedef typename lf_type::inherited::template sig<SigArgs>::type type;
+ };
+
+ template<class RET, CALL_TEMPLATE_ARGS>
+ RET call(CALL_FORMAL_ARGS) const {
+ try
+ {
+ return detail::select(::boost::tuples::get<0>(args), CALL_ACTUAL_ARGS);
+ }
+ catch (Catch1& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<1, Args>::type>
+ ::call(::boost::tuples::get<1>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch2& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<2, Args>::type>
+ ::call(::boost::tuples::get<2>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch3& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<3, Args>::type>
+ ::call(::boost::tuples::get<3>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch4& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<4, Args>::type>
+ ::call(::boost::tuples::get<4>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch5& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<5, Args>::type>
+ ::call(::boost::tuples::get<5>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (...)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<6, Args>::type>
+ ::call(::boost::tuples::get<6>(args), CALL_ACTUAL_ARGS);
+ }
+ }
+};
+
+// 7 catch types case
+template<class Args, class Catch1, class Catch2, class Catch3, class Catch4, class Catch5, class Catch6,
+ class Catch7>
+class lambda_functor_base<action<8, try_catch_action<catch_action<detail::catch_block<Catch1>, detail::catch_block<Catch2>, detail::catch_block<Catch3>, detail::catch_block<Catch4>, detail::catch_block<Catch5>, detail::catch_block<Catch6>, detail::catch_block<Catch7> > > >, Args> {
+public:
+ Args args;
+public:
+ explicit lambda_functor_base(const Args& a) : args(a) {}
+
+ template <class SigArgs> struct sig {
+ typedef typename
+ as_lambda_functor<
+ typename boost::tuples::element<0, Args>::type
+ >::type lf_type;
+
+ typedef typename lf_type::inherited::template sig<SigArgs>::type type;
+ };
+
+ template<class RET, CALL_TEMPLATE_ARGS>
+ RET call(CALL_FORMAL_ARGS) const {
+ try
+ {
+ return detail::select(::boost::tuples::get<0>(args), CALL_ACTUAL_ARGS);
+ }
+ catch (Catch1& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<1, Args>::type>
+ ::call(::boost::tuples::get<1>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch2& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<2, Args>::type>
+ ::call(::boost::tuples::get<2>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch3& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<3, Args>::type>
+ ::call(::boost::tuples::get<3>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch4& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<4, Args>::type>
+ ::call(::boost::tuples::get<4>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch5& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<5, Args>::type>
+ ::call(::boost::tuples::get<5>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch6& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<6, Args>::type>
+ ::call(::boost::tuples::get<6>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch7& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<7, Args>::type>
+ ::call(::boost::tuples::get<7>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ }
+};
+
+template<class Args, class Catch1, class Catch2, class Catch3, class Catch4, class Catch5, class Catch6>
+class lambda_functor_base<action<8, try_catch_action<catch_action<detail::catch_block<Catch1>, detail::catch_block<Catch2>, detail::catch_block<Catch3>, detail::catch_block<Catch4>, detail::catch_block<Catch5>, detail::catch_block<Catch6>,
+ detail::catch_all_block> > >, Args> {
+public:
+ Args args;
+public:
+ explicit lambda_functor_base(const Args& a) : args(a) {}
+
+ template <class SigArgs> struct sig {
+ typedef typename
+ as_lambda_functor<
+ typename boost::tuples::element<0, Args>::type
+ >::type lf_type;
+
+ typedef typename lf_type::inherited::template sig<SigArgs>::type type;
+ };
+
+ template<class RET, CALL_TEMPLATE_ARGS>
+ RET call(CALL_FORMAL_ARGS) const {
+ try
+ {
+ return detail::select(::boost::tuples::get<0>(args), CALL_ACTUAL_ARGS);
+ }
+ catch (Catch1& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<1, Args>::type>
+ ::call(::boost::tuples::get<1>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch2& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<2, Args>::type>
+ ::call(::boost::tuples::get<2>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch3& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<3, Args>::type>
+ ::call(::boost::tuples::get<3>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch4& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<4, Args>::type>
+ ::call(::boost::tuples::get<4>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch5& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<5, Args>::type>
+ ::call(::boost::tuples::get<5>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch6& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<6, Args>::type>
+ ::call(::boost::tuples::get<6>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (...)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<7, Args>::type>
+ ::call(::boost::tuples::get<7>(args), CALL_ACTUAL_ARGS);
+ }
+ }
+};
+
+// 8 catch types case
+template<class Args, class Catch1, class Catch2, class Catch3, class Catch4, class Catch5, class Catch6,
+ class Catch7, class Catch8>
+class lambda_functor_base<action<9, try_catch_action<catch_action<detail::catch_block<Catch1>, detail::catch_block<Catch2>, detail::catch_block<Catch3>, detail::catch_block<Catch4>, detail::catch_block<Catch5>, detail::catch_block<Catch6>,
+ detail::catch_block<Catch7>, detail::catch_block<Catch8> > > >, Args> {
+public:
+ Args args;
+public:
+ explicit lambda_functor_base(const Args& a) : args(a) {}
+
+ template <class SigArgs> struct sig {
+ typedef typename
+ as_lambda_functor<
+ typename boost::tuples::element<0, Args>::type
+ >::type lf_type;
+
+ typedef typename lf_type::inherited::template sig<SigArgs>::type type;
+ };
+
+ template<class RET, CALL_TEMPLATE_ARGS>
+ RET call(CALL_FORMAL_ARGS) const {
+ try
+ {
+ return detail::select(::boost::tuples::get<0>(args), CALL_ACTUAL_ARGS);
+ }
+ catch (Catch1& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<1, Args>::type>
+ ::call(::boost::tuples::get<1>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch2& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<2, Args>::type>
+ ::call(::boost::tuples::get<2>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch3& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<3, Args>::type>
+ ::call(::boost::tuples::get<3>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch4& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<4, Args>::type>
+ ::call(::boost::tuples::get<4>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch5& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<5, Args>::type>
+ ::call(::boost::tuples::get<5>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch6& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<6, Args>::type>
+ ::call(::boost::tuples::get<6>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch7& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<7, Args>::type>
+ ::call(::boost::tuples::get<7>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch8& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<8, Args>::type>
+ ::call(::boost::tuples::get<8>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ }
+};
+
+template<class Args, class Catch1, class Catch2, class Catch3, class Catch4, class Catch5, class Catch6,
+ class Catch7>
+class lambda_functor_base<action<9, try_catch_action<catch_action<detail::catch_block<Catch1>, detail::catch_block<Catch2>, detail::catch_block<Catch3>, detail::catch_block<Catch4>, detail::catch_block<Catch5>, detail::catch_block<Catch6>,
+ detail::catch_block<Catch7>,detail::catch_all_block> > >, Args> {
+public:
+ Args args;
+public:
+ explicit lambda_functor_base(const Args& a) : args(a) {}
+
+ template <class SigArgs> struct sig {
+ typedef typename
+ as_lambda_functor<
+ typename boost::tuples::element<0, Args>::type
+ >::type lf_type;
+
+ typedef typename lf_type::inherited::template sig<SigArgs>::type type;
+ };
+
+ template<class RET, CALL_TEMPLATE_ARGS>
+ RET call(CALL_FORMAL_ARGS) const {
+ try
+ {
+ return detail::select(::boost::tuples::get<0>(args), CALL_ACTUAL_ARGS);
+ }
+ catch (Catch1& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<1, Args>::type>
+ ::call(::boost::tuples::get<1>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch2& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<2, Args>::type>
+ ::call(::boost::tuples::get<2>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch3& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<3, Args>::type>
+ ::call(::boost::tuples::get<3>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch4& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<4, Args>::type>
+ ::call(::boost::tuples::get<4>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch5& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<5, Args>::type>
+ ::call(::boost::tuples::get<5>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch6& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<6, Args>::type>
+ ::call(::boost::tuples::get<6>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch7& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<7, Args>::type>
+ ::call(::boost::tuples::get<7>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (...)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<8, Args>::type>
+ ::call(::boost::tuples::get<8>(args), CALL_ACTUAL_ARGS);
+ }
+ }
+};
+
+// 9 catch types case
+template<class Args, class Catch1, class Catch2, class Catch3, class Catch4, class Catch5, class Catch6,
+ class Catch7, class Catch8, class Catch9>
+class lambda_functor_base<action<10, try_catch_action<catch_action<detail::catch_block<Catch1>, detail::catch_block<Catch2>, detail::catch_block<Catch3>, detail::catch_block<Catch4>, detail::catch_block<Catch5>, detail::catch_block<Catch6>,
+ detail::catch_block<Catch7>, detail::catch_block<Catch8>, detail::catch_block<Catch9> > > >, Args> {
+public:
+ Args args;
+public:
+ explicit lambda_functor_base(const Args& a) : args(a) {}
+
+ template <class SigArgs> struct sig {
+ typedef typename
+ as_lambda_functor<
+ typename boost::tuples::element<0, Args>::type
+ >::type lf_type;
+
+ typedef typename lf_type::inherited::template sig<SigArgs>::type type;
+ };
+
+ template<class RET, CALL_TEMPLATE_ARGS>
+ RET call(CALL_FORMAL_ARGS) const {
+ try
+ {
+ return detail::select(::boost::tuples::get<0>(args), CALL_ACTUAL_ARGS);
+ }
+ catch (Catch1& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<1, Args>::type>
+ ::call(::boost::tuples::get<1>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch2& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<2, Args>::type>
+ ::call(::boost::tuples::get<2>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch3& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<3, Args>::type>
+ ::call(::boost::tuples::get<3>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch4& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<4, Args>::type>
+ ::call(::boost::tuples::get<4>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch5& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<5, Args>::type>
+ ::call(::boost::tuples::get<5>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch6& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<6, Args>::type>
+ ::call(::boost::tuples::get<6>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch7& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<7, Args>::type>
+ ::call(::boost::tuples::get<7>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch8& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<8, Args>::type>
+ ::call(::boost::tuples::get<8>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch9& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<9, Args>::type>
+ ::call(::boost::tuples::get<9>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ }
+};
+
+template<class Args, class Catch1, class Catch2, class Catch3, class Catch4, class Catch5, class Catch6,
+ class Catch7, class Catch8>
+class lambda_functor_base<action<10, try_catch_action<catch_action<detail::catch_block<Catch1>, detail::catch_block<Catch2>, detail::catch_block<Catch3>, detail::catch_block<Catch4>, detail::catch_block<Catch5>, detail::catch_block<Catch6>,
+ detail::catch_block<Catch7>, detail::catch_block<Catch8>,detail::catch_all_block> > >, Args> {
+public:
+ Args args;
+public:
+ explicit lambda_functor_base(const Args& a) : args(a) {}
+
+ template <class SigArgs> struct sig {
+ typedef typename
+ as_lambda_functor<
+ typename boost::tuples::element<0, Args>::type
+ >::type lf_type;
+
+ typedef typename lf_type::inherited::template sig<SigArgs>::type type;
+ };
+
+ template<class RET, CALL_TEMPLATE_ARGS>
+ RET call(CALL_FORMAL_ARGS) const {
+ try
+ {
+ return detail::select(::boost::tuples::get<0>(args), CALL_ACTUAL_ARGS);
+ }
+ catch (Catch1& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<1, Args>::type>
+ ::call(::boost::tuples::get<1>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch2& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<2, Args>::type>
+ ::call(::boost::tuples::get<2>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch3& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<3, Args>::type>
+ ::call(::boost::tuples::get<3>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch4& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<4, Args>::type>
+ ::call(::boost::tuples::get<4>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch5& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<5, Args>::type>
+ ::call(::boost::tuples::get<5>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch6& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<6, Args>::type>
+ ::call(::boost::tuples::get<6>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch7& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<7, Args>::type>
+ ::call(::boost::tuples::get<7>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (Catch8& e)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<8, Args>::type>
+ ::call(::boost::tuples::get<8>(args), CALL_ACTUAL_ARGS_NO_ENV, e);
+ }
+ catch (...)
+ {
+ return
+ detail::return_or_throw<RET, typename ::boost::tuples::element<9, Args>::type>
+ ::call(::boost::tuples::get<9>(args), CALL_ACTUAL_ARGS);
+ }
+ }
+};
+
+
+} // namespace lambda
+} // namespace boost
+
+
+#endif
+
+
+
+
+
+
diff --git a/boost/boost/lambda/if.hpp b/boost/boost/lambda/if.hpp
new file mode 100644
index 00000000000..aa0bcefaee5
--- /dev/null
+++ b/boost/boost/lambda/if.hpp
@@ -0,0 +1,462 @@
+// Boost Lambda Library -- if.hpp ------------------------------------------
+
+// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi@cs.utu.fi)
+// Copyright (C) 2000 Gary Powell (powellg@amazon.com)
+// Copyright (C) 2001-2002 Joel de Guzman
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see www.boost.org
+
+// --------------------------------------------------------------------------
+
+#if !defined(BOOST_LAMBDA_IF_HPP)
+#define BOOST_LAMBDA_IF_HPP
+
+#include "boost/lambda/core.hpp"
+
+// Arithmetic type promotion needed for if_then_else_return
+#include "boost/lambda/detail/operator_actions.hpp"
+#include "boost/lambda/detail/operator_return_type_traits.hpp"
+
+namespace boost {
+namespace lambda {
+
+// -- if control construct actions ----------------------
+
+class ifthen_action {};
+class ifthenelse_action {};
+class ifthenelsereturn_action {};
+
+// Specialization for if_then.
+template<class Args>
+class
+lambda_functor_base<ifthen_action, Args> {
+public:
+ Args args;
+ template <class T> struct sig { typedef void type; };
+public:
+ explicit lambda_functor_base(const Args& a) : args(a) {}
+
+ template<class RET, CALL_TEMPLATE_ARGS>
+ RET call(CALL_FORMAL_ARGS) const {
+ if (detail::select(boost::tuples::get<0>(args), CALL_ACTUAL_ARGS))
+ detail::select(boost::tuples::get<1>(args), CALL_ACTUAL_ARGS);
+ }
+};
+
+// If Then
+template <class Arg1, class Arg2>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ ifthen_action,
+ tuple<lambda_functor<Arg1>, lambda_functor<Arg2> >
+ >
+>
+if_then(const lambda_functor<Arg1>& a1, const lambda_functor<Arg2>& a2) {
+ return
+ lambda_functor_base<
+ ifthen_action,
+ tuple<lambda_functor<Arg1>, lambda_functor<Arg2> >
+ >
+ ( tuple<lambda_functor<Arg1>, lambda_functor<Arg2> >(a1, a2) );
+}
+
+
+// Specialization for if_then_else.
+template<class Args>
+class
+lambda_functor_base<ifthenelse_action, Args> {
+public:
+ Args args;
+ template <class T> struct sig { typedef void type; };
+public:
+ explicit lambda_functor_base(const Args& a) : args(a) {}
+
+ template<class RET, CALL_TEMPLATE_ARGS>
+ RET call(CALL_FORMAL_ARGS) const {
+ if (detail::select(boost::tuples::get<0>(args), CALL_ACTUAL_ARGS))
+ detail::select(boost::tuples::get<1>(args), CALL_ACTUAL_ARGS);
+ else
+ detail::select(boost::tuples::get<2>(args), CALL_ACTUAL_ARGS);
+ }
+};
+
+
+
+// If then else
+
+template <class Arg1, class Arg2, class Arg3>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ ifthenelse_action,
+ tuple<lambda_functor<Arg1>, lambda_functor<Arg2>, lambda_functor<Arg3> >
+ >
+>
+if_then_else(const lambda_functor<Arg1>& a1, const lambda_functor<Arg2>& a2,
+ const lambda_functor<Arg3>& a3) {
+ return
+ lambda_functor_base<
+ ifthenelse_action,
+ tuple<lambda_functor<Arg1>, lambda_functor<Arg2>, lambda_functor<Arg3> >
+ >
+ (tuple<lambda_functor<Arg1>, lambda_functor<Arg2>, lambda_functor<Arg3> >
+ (a1, a2, a3) );
+}
+
+// Our version of operator?:()
+
+template <class Arg1, class Arg2, class Arg3>
+inline const
+ lambda_functor<
+ lambda_functor_base<
+ other_action<ifthenelsereturn_action>,
+ tuple<lambda_functor<Arg1>,
+ typename const_copy_argument<Arg2>::type,
+ typename const_copy_argument<Arg3>::type>
+ >
+>
+if_then_else_return(const lambda_functor<Arg1>& a1,
+ const Arg2 & a2,
+ const Arg3 & a3) {
+ return
+ lambda_functor_base<
+ other_action<ifthenelsereturn_action>,
+ tuple<lambda_functor<Arg1>,
+ typename const_copy_argument<Arg2>::type,
+ typename const_copy_argument<Arg3>::type>
+ > ( tuple<lambda_functor<Arg1>,
+ typename const_copy_argument<Arg2>::type,
+ typename const_copy_argument<Arg3>::type> (a1, a2, a3) );
+}
+
+namespace detail {
+
+// return type specialization for conditional expression begins -----------
+// start reading below and move upwards
+
+// PHASE 6:1
+// check if A is conbertible to B and B to A
+template<int Phase, bool AtoB, bool BtoA, bool SameType, class A, class B>
+struct return_type_2_ifthenelsereturn;
+
+// if A can be converted to B and vice versa -> ambiguous
+template<int Phase, class A, class B>
+struct return_type_2_ifthenelsereturn<Phase, true, true, false, A, B> {
+ typedef
+ detail::return_type_deduction_failure<return_type_2_ifthenelsereturn> type;
+ // ambiguous type in conditional expression
+};
+// if A can be converted to B and vice versa and are of same type
+template<int Phase, class A, class B>
+struct return_type_2_ifthenelsereturn<Phase, true, true, true, A, B> {
+ typedef A type;
+};
+
+
+// A can be converted to B
+template<int Phase, class A, class B>
+struct return_type_2_ifthenelsereturn<Phase, true, false, false, A, B> {
+ typedef B type;
+};
+
+// B can be converted to A
+template<int Phase, class A, class B>
+struct return_type_2_ifthenelsereturn<Phase, false, true, false, A, B> {
+ typedef A type;
+};
+
+// neither can be converted. Then we drop the potential references, and
+// try again
+template<class A, class B>
+struct return_type_2_ifthenelsereturn<1, false, false, false, A, B> {
+ // it is safe to add const, since the result will be an rvalue and thus
+ // const anyway. The const are needed eg. if the types
+ // are 'const int*' and 'void *'. The remaining type should be 'const void*'
+ typedef const typename boost::remove_reference<A>::type plainA;
+ typedef const typename boost::remove_reference<B>::type plainB;
+ // TODO: Add support for volatile ?
+
+ typedef typename
+ return_type_2_ifthenelsereturn<
+ 2,
+ boost::is_convertible<plainA,plainB>::value,
+ boost::is_convertible<plainB,plainA>::value,
+ boost::is_same<plainA,plainB>::value,
+ plainA,
+ plainB>::type type;
+};
+
+// PHASE 6:2
+template<class A, class B>
+struct return_type_2_ifthenelsereturn<2, false, false, false, A, B> {
+ typedef
+ detail::return_type_deduction_failure<return_type_2_ifthenelsereturn> type;
+ // types_do_not_match_in_conditional_expression
+};
+
+
+
+// PHASE 5: now we know that types are not arithmetic.
+template<class A, class B>
+struct non_numeric_types {
+ typedef typename
+ return_type_2_ifthenelsereturn<
+ 1, // phase 1
+ is_convertible<A,B>::value,
+ is_convertible<B,A>::value,
+ is_same<A,B>::value,
+ A,
+ B>::type type;
+};
+
+// PHASE 4 :
+// the base case covers arithmetic types with differing promote codes
+// use the type deduction of arithmetic_actions
+template<int CodeA, int CodeB, class A, class B>
+struct arithmetic_or_not {
+ typedef typename
+ return_type_2<arithmetic_action<plus_action>, A, B>::type type;
+ // plus_action is just a random pick, has to be a concrete instance
+};
+
+// this case covers the case of artihmetic types with the same promote codes.
+// non numeric deduction is used since e.g. integral promotion is not
+// performed with operator ?:
+template<int CodeA, class A, class B>
+struct arithmetic_or_not<CodeA, CodeA, A, B> {
+ typedef typename non_numeric_types<A, B>::type type;
+};
+
+// if either A or B has promote code -1 it is not an arithmetic type
+template<class A, class B>
+struct arithmetic_or_not <-1, -1, A, B> {
+ typedef typename non_numeric_types<A, B>::type type;
+};
+template<int CodeB, class A, class B>
+struct arithmetic_or_not <-1, CodeB, A, B> {
+ typedef typename non_numeric_types<A, B>::type type;
+};
+template<int CodeA, class A, class B>
+struct arithmetic_or_not <CodeA, -1, A, B> {
+ typedef typename non_numeric_types<A, B>::type type;
+};
+
+
+
+
+// PHASE 3 : Are the types same?
+// No, check if they are arithmetic or not
+template <class A, class B>
+struct same_or_not {
+ typedef typename detail::remove_reference_and_cv<A>::type plainA;
+ typedef typename detail::remove_reference_and_cv<B>::type plainB;
+
+ typedef typename
+ arithmetic_or_not<
+ detail::promote_code<plainA>::value,
+ detail::promote_code<plainB>::value,
+ A,
+ B>::type type;
+};
+// Yes, clear.
+template <class A> struct same_or_not<A, A> {
+ typedef A type;
+};
+
+} // detail
+
+// PHASE 2 : Perform first the potential array_to_pointer conversion
+template<class A, class B>
+struct return_type_2<other_action<ifthenelsereturn_action>, A, B> {
+
+ typedef typename detail::array_to_pointer<A>::type A1;
+ typedef typename detail::array_to_pointer<B>::type B1;
+
+ typedef typename
+ boost::add_const<typename detail::same_or_not<A1, B1>::type>::type type;
+};
+
+// PHASE 1 : Deduction is based on the second and third operand
+
+
+// return type specialization for conditional expression ends -----------
+
+
+// Specialization of lambda_functor_base for if_then_else_return.
+template<class Args>
+class
+lambda_functor_base<other_action<ifthenelsereturn_action>, Args> {
+public:
+ Args args;
+
+ template <class SigArgs> struct sig {
+ private:
+ typedef typename detail::nth_return_type_sig<1, Args, SigArgs>::type ret1;
+ typedef typename detail::nth_return_type_sig<2, Args, SigArgs>::type ret2;
+ public:
+ typedef typename return_type_2<
+ other_action<ifthenelsereturn_action>, ret1, ret2
+ >::type type;
+ };
+
+public:
+ explicit lambda_functor_base(const Args& a) : args(a) {}
+
+ template<class RET, CALL_TEMPLATE_ARGS>
+ RET call(CALL_FORMAL_ARGS) const {
+ return (detail::select(boost::tuples::get<0>(args), CALL_ACTUAL_ARGS)) ?
+ detail::select(boost::tuples::get<1>(args), CALL_ACTUAL_ARGS)
+ :
+ detail::select(boost::tuples::get<2>(args), CALL_ACTUAL_ARGS);
+ }
+};
+
+ // The code below is from Joel de Guzman, some name changes etc.
+ // has been made.
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// if_then_else_composite
+//
+// This composite has two (2) forms:
+//
+// if_(condition)
+// [
+// statement
+// ]
+//
+// and
+//
+// if_(condition)
+// [
+// true_statement
+// ]
+// .else_
+// [
+// false_statement
+// ]
+//
+// where condition is an lambda_functor that evaluates to bool. If condition
+// is true, the true_statement (again an lambda_functor) is executed
+// otherwise, the false_statement (another lambda_functor) is executed. The
+// result type of this is void. Note the trailing underscore after
+// if_ and the the leading dot and the trailing underscore before
+// and after .else_.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename CondT, typename ThenT, typename ElseT>
+struct if_then_else_composite {
+
+ typedef if_then_else_composite<CondT, ThenT, ElseT> self_t;
+
+ template <class SigArgs>
+ struct sig { typedef void type; };
+
+ if_then_else_composite(
+ CondT const& cond_,
+ ThenT const& then_,
+ ElseT const& else__)
+ : cond(cond_), then(then_), else_(else__) {}
+
+ template <class Ret, CALL_TEMPLATE_ARGS>
+ Ret call(CALL_FORMAL_ARGS) const
+ {
+ if (cond.internal_call(CALL_ACTUAL_ARGS))
+ then.internal_call(CALL_ACTUAL_ARGS);
+ else
+ else_.internal_call(CALL_ACTUAL_ARGS);
+ }
+
+ CondT cond; ThenT then; ElseT else_; // lambda_functors
+};
+
+//////////////////////////////////
+template <typename CondT, typename ThenT>
+struct else_gen {
+
+ else_gen(CondT const& cond_, ThenT const& then_)
+ : cond(cond_), then(then_) {}
+
+ template <typename ElseT>
+ lambda_functor<if_then_else_composite<CondT, ThenT,
+ typename as_lambda_functor<ElseT>::type> >
+ operator[](ElseT const& else_)
+ {
+ typedef if_then_else_composite<CondT, ThenT,
+ typename as_lambda_functor<ElseT>::type>
+ result;
+
+ return result(cond, then, to_lambda_functor(else_));
+ }
+
+ CondT cond; ThenT then;
+};
+
+//////////////////////////////////
+template <typename CondT, typename ThenT>
+struct if_then_composite {
+
+ template <class SigArgs>
+ struct sig { typedef void type; };
+
+ if_then_composite(CondT const& cond_, ThenT const& then_)
+ : cond(cond_), then(then_), else_(cond, then) {}
+
+ template <class Ret, CALL_TEMPLATE_ARGS>
+ Ret call(CALL_FORMAL_ARGS) const
+ {
+ if (cond.internal_call(CALL_ACTUAL_ARGS))
+ then.internal_call(CALL_ACTUAL_ARGS);
+ }
+
+ CondT cond; ThenT then; // lambda_functors
+ else_gen<CondT, ThenT> else_;
+};
+
+//////////////////////////////////
+template <typename CondT>
+struct if_gen {
+
+ if_gen(CondT const& cond_)
+ : cond(cond_) {}
+
+ template <typename ThenT>
+ lambda_functor<if_then_composite<
+ typename as_lambda_functor<CondT>::type,
+ typename as_lambda_functor<ThenT>::type> >
+ operator[](ThenT const& then) const
+ {
+ typedef if_then_composite<
+ typename as_lambda_functor<CondT>::type,
+ typename as_lambda_functor<ThenT>::type>
+ result;
+
+ return result(
+ to_lambda_functor(cond),
+ to_lambda_functor(then));
+ }
+
+ CondT cond;
+};
+
+//////////////////////////////////
+template <typename CondT>
+inline if_gen<CondT>
+if_(CondT const& cond)
+{
+ return if_gen<CondT>(cond);
+}
+
+
+
+} // lambda
+} // boost
+
+#endif // BOOST_LAMBDA_IF_HPP
+
+
diff --git a/boost/boost/lambda/lambda.hpp b/boost/boost/lambda/lambda.hpp
new file mode 100644
index 00000000000..c44aa854e06
--- /dev/null
+++ b/boost/boost/lambda/lambda.hpp
@@ -0,0 +1,34 @@
+// -- lambda.hpp -- Boost Lambda Library -----------------------------------
+// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi@cs.utu.fi)
+//
+// 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)
+//
+// For more information, see http://lambda.cs.utu.fi
+
+#ifndef BOOST_LAMBDA_LAMBDA_HPP
+#define BOOST_LAMBDA_LAMBDA_HPP
+
+
+#include "boost/lambda/core.hpp"
+
+#ifdef BOOST_NO_FDECL_TEMPLATES_AS_TEMPLATE_TEMPLATE_PARAMS
+#include <istream>
+#include <ostream>
+#endif
+
+#include "boost/lambda/detail/operator_actions.hpp"
+#include "boost/lambda/detail/operator_lambda_func_base.hpp"
+#include "boost/lambda/detail/operator_return_type_traits.hpp"
+
+
+#include "boost/lambda/detail/operators.hpp"
+
+#ifndef BOOST_LAMBDA_FAILS_IN_TEMPLATE_KEYWORD_AFTER_SCOPE_OPER
+// sorry, member ptr does not work with gcc2.95
+#include "boost/lambda/detail/member_ptr.hpp"
+#endif
+
+
+#endif
diff --git a/boost/boost/lambda/loops.hpp b/boost/boost/lambda/loops.hpp
new file mode 100644
index 00000000000..fe1021e9c5f
--- /dev/null
+++ b/boost/boost/lambda/loops.hpp
@@ -0,0 +1,505 @@
+// Boost Lambda Library -- loops.hpp ----------------------------------------
+
+// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi@cs.utu.fi)
+// Copyright (C) 2000 Gary Powell (powellg@amazon.com)
+// Copyright (c) 2001-2002 Joel de Guzman
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see www.boost.org
+
+// --------------------------------------------------------------------------
+
+#if !defined(BOOST_LAMBDA_LOOPS_HPP)
+#define BOOST_LAMBDA_LOOPS_HPP
+
+#include "boost/lambda/core.hpp"
+
+namespace boost {
+namespace lambda {
+
+// -- loop control structure actions ----------------------
+
+class forloop_action {};
+class forloop_no_body_action {};
+class whileloop_action {};
+class whileloop_no_body_action {};
+class dowhileloop_action {};
+class dowhileloop_no_body_action {};
+
+
+// For loop
+template <class Arg1, class Arg2, class Arg3, class Arg4>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ forloop_action,
+ tuple<lambda_functor<Arg1>, lambda_functor<Arg2>,
+ lambda_functor<Arg3>, lambda_functor<Arg4> >
+ >
+>
+for_loop(const lambda_functor<Arg1>& a1, const lambda_functor<Arg2>& a2,
+ const lambda_functor<Arg3>& a3, const lambda_functor<Arg4>& a4) {
+ return
+ lambda_functor_base<
+ forloop_action,
+ tuple<lambda_functor<Arg1>, lambda_functor<Arg2>,
+ lambda_functor<Arg3>, lambda_functor<Arg4> >
+ >
+ ( tuple<lambda_functor<Arg1>, lambda_functor<Arg2>,
+ lambda_functor<Arg3>, lambda_functor<Arg4> >(a1, a2, a3, a4)
+ );
+}
+
+// No body case.
+template <class Arg1, class Arg2, class Arg3>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ forloop_no_body_action,
+ tuple<lambda_functor<Arg1>, lambda_functor<Arg2>, lambda_functor<Arg3> >
+ >
+>
+for_loop(const lambda_functor<Arg1>& a1, const lambda_functor<Arg2>& a2,
+ const lambda_functor<Arg3>& a3) {
+ return
+ lambda_functor_base<
+ forloop_no_body_action,
+ tuple<lambda_functor<Arg1>, lambda_functor<Arg2>,
+ lambda_functor<Arg3> >
+ >
+ ( tuple<lambda_functor<Arg1>, lambda_functor<Arg2>,
+ lambda_functor<Arg3> >(a1, a2, a3) );
+}
+
+// While loop
+template <class Arg1, class Arg2>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ whileloop_action,
+ tuple<lambda_functor<Arg1>, lambda_functor<Arg2> >
+ >
+>
+while_loop(const lambda_functor<Arg1>& a1, const lambda_functor<Arg2>& a2) {
+ return
+ lambda_functor_base<
+ whileloop_action,
+ tuple<lambda_functor<Arg1>, lambda_functor<Arg2> >
+ >
+ ( tuple<lambda_functor<Arg1>, lambda_functor<Arg2> >(a1, a2));
+}
+
+// No body case.
+template <class Arg1>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ whileloop_no_body_action,
+ tuple<lambda_functor<Arg1> >
+ >
+>
+while_loop(const lambda_functor<Arg1>& a1) {
+ return
+ lambda_functor_base<
+ whileloop_no_body_action,
+ tuple<lambda_functor<Arg1> >
+ >
+ ( tuple<lambda_functor<Arg1> >(a1) );
+}
+
+
+// Do While loop
+template <class Arg1, class Arg2>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ dowhileloop_action,
+ tuple<lambda_functor<Arg1>, lambda_functor<Arg2> >
+ >
+>
+do_while_loop(const lambda_functor<Arg1>& a1, const lambda_functor<Arg2>& a2) {
+ return
+ lambda_functor_base<
+ dowhileloop_action,
+ tuple<lambda_functor<Arg1>, lambda_functor<Arg2> >
+ >
+ ( tuple<lambda_functor<Arg1>, lambda_functor<Arg2> >(a1, a2));
+}
+
+// No body case.
+template <class Arg1>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ dowhileloop_no_body_action,
+ tuple<lambda_functor<Arg1> >
+ >
+>
+do_while_loop(const lambda_functor<Arg1>& a1) {
+ return
+ lambda_functor_base<
+ dowhileloop_no_body_action,
+ tuple<lambda_functor<Arg1> >
+ >
+ ( tuple<lambda_functor<Arg1> >(a1));
+}
+
+
+// Control loop lambda_functor_base specializations.
+
+// Specialization for for_loop.
+template<class Args>
+class
+lambda_functor_base<forloop_action, Args> {
+public:
+ Args args;
+ template <class T> struct sig { typedef void type; };
+public:
+ explicit lambda_functor_base(const Args& a) : args(a) {}
+
+ template<class RET, CALL_TEMPLATE_ARGS>
+ RET call(CALL_FORMAL_ARGS) const {
+ for(detail::select(boost::tuples::get<0>(args), CALL_ACTUAL_ARGS);
+ detail::select(boost::tuples::get<1>(args), CALL_ACTUAL_ARGS);
+ detail::select(boost::tuples::get<2>(args), CALL_ACTUAL_ARGS))
+
+ detail::select(boost::tuples::get<3>(args), CALL_ACTUAL_ARGS);
+ }
+};
+
+// No body case
+template<class Args>
+class
+lambda_functor_base<forloop_no_body_action, Args> {
+public:
+ Args args;
+ template <class T> struct sig { typedef void type; };
+public:
+ explicit lambda_functor_base(const Args& a) : args(a) {}
+
+ template<class RET, CALL_TEMPLATE_ARGS>
+ RET call(CALL_FORMAL_ARGS) const {
+ for(detail::select(boost::tuples::get<0>(args), CALL_ACTUAL_ARGS);
+ detail::select(boost::tuples::get<1>(args), CALL_ACTUAL_ARGS);
+ detail::select(boost::tuples::get<2>(args), CALL_ACTUAL_ARGS)) {}
+ }
+};
+
+
+// Specialization for while_loop.
+template<class Args>
+class
+lambda_functor_base<whileloop_action, Args> {
+public:
+ Args args;
+ template <class T> struct sig { typedef void type; };
+public:
+ explicit lambda_functor_base(const Args& a) : args(a) {}
+
+ template<class RET, CALL_TEMPLATE_ARGS>
+ RET call(CALL_FORMAL_ARGS) const {
+ while(detail::select(boost::tuples::get<0>(args), CALL_ACTUAL_ARGS))
+
+ detail::select(boost::tuples::get<1>(args), CALL_ACTUAL_ARGS);
+ }
+};
+
+// No body case
+template<class Args>
+class
+lambda_functor_base<whileloop_no_body_action, Args> {
+public:
+ Args args;
+ template <class T> struct sig { typedef void type; };
+public:
+ explicit lambda_functor_base(const Args& a) : args(a) {}
+
+ template<class RET, CALL_TEMPLATE_ARGS>
+ RET call(CALL_FORMAL_ARGS) const {
+ while(detail::select(boost::tuples::get<0>(args), CALL_ACTUAL_ARGS)) {}
+ }
+};
+
+// Specialization for do_while_loop.
+// Note that the first argument is the condition.
+template<class Args>
+class
+lambda_functor_base<dowhileloop_action, Args> {
+public:
+ Args args;
+ template <class T> struct sig { typedef void type; };
+public:
+ explicit lambda_functor_base(const Args& a) : args(a) {}
+
+ template<class RET, CALL_TEMPLATE_ARGS>
+ RET call(CALL_FORMAL_ARGS) const {
+ do {
+ detail::select(boost::tuples::get<1>(args), CALL_ACTUAL_ARGS);
+ } while (detail::select(boost::tuples::get<0>(args), CALL_ACTUAL_ARGS) );
+ }
+};
+
+// No body case
+template<class Args>
+class
+lambda_functor_base<dowhileloop_no_body_action, Args> {
+public:
+ Args args;
+ template <class T> struct sig { typedef void type; };
+public:
+ explicit lambda_functor_base(const Args& a) : args(a) {}
+
+ template<class RET, CALL_TEMPLATE_ARGS>
+ RET call(CALL_FORMAL_ARGS) const {
+ do {} while (detail::select(boost::tuples::get<0>(args), CALL_ACTUAL_ARGS) );
+ }
+};
+
+ // The code below is from Joel de Guzman, some name changes etc.
+ // has been made.
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// while_composite
+//
+// This composite has the form:
+//
+// while_(condition)
+// [
+// statement
+// ]
+//
+// While the condition (an lambda_functor) evaluates to true, statement
+// (another lambda_functor) is executed. The result type of this is void.
+// Note the trailing underscore after while_.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename CondT, typename DoT>
+struct while_composite {
+
+ typedef while_composite<CondT, DoT> self_t;
+
+ template <class SigArgs>
+ struct sig { typedef void type; };
+
+ while_composite(CondT const& cond_, DoT const& do__)
+ : cond(cond_), do_(do__) {}
+
+ template <class Ret, CALL_TEMPLATE_ARGS>
+ Ret call(CALL_FORMAL_ARGS) const
+ {
+ while (cond.internal_call(CALL_ACTUAL_ARGS))
+ do_.internal_call(CALL_ACTUAL_ARGS);
+ }
+
+ CondT cond;
+ DoT do_;
+};
+
+//////////////////////////////////
+template <typename CondT>
+struct while_gen {
+
+ while_gen(CondT const& cond_)
+ : cond(cond_) {}
+
+ template <typename DoT>
+ lambda_functor<while_composite<
+ typename as_lambda_functor<CondT>::type,
+ typename as_lambda_functor<DoT>::type> >
+ operator[](DoT const& do_) const
+ {
+ typedef while_composite<
+ typename as_lambda_functor<CondT>::type,
+ typename as_lambda_functor<DoT>::type>
+ result;
+
+ return result(
+ to_lambda_functor(cond),
+ to_lambda_functor(do_));
+ }
+
+ CondT cond;
+};
+
+//////////////////////////////////
+template <typename CondT>
+inline while_gen<CondT>
+while_(CondT const& cond)
+{
+ return while_gen<CondT>(cond);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// do_composite
+//
+// This composite has the form:
+//
+// do_
+// [
+// statement
+// ]
+// .while_(condition)
+//
+// While the condition (an lambda_functor) evaluates to true, statement
+// (another lambda_functor) is executed. The statement is executed at least
+// once. The result type of this is void. Note the trailing
+// underscore after do_ and the the leading dot and the trailing
+// underscore before and after .while_.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename DoT, typename CondT>
+struct do_composite {
+
+ typedef do_composite<DoT, CondT> self_t;
+
+ template <class SigArgs>
+ struct sig { typedef void type; };
+
+ do_composite(DoT const& do__, CondT const& cond_)
+ : do_(do__), cond(cond_) {}
+
+ template <class Ret, CALL_TEMPLATE_ARGS>
+ Ret call(CALL_FORMAL_ARGS) const
+ {
+ do
+ do_.internal_call(CALL_ACTUAL_ARGS);
+ while (cond.internal_call(CALL_ACTUAL_ARGS));
+ }
+
+ DoT do_;
+ CondT cond;
+};
+
+////////////////////////////////////
+template <typename DoT>
+struct do_gen2 {
+
+ do_gen2(DoT const& do__)
+ : do_(do__) {}
+
+ template <typename CondT>
+ lambda_functor<do_composite<
+ typename as_lambda_functor<DoT>::type,
+ typename as_lambda_functor<CondT>::type> >
+ while_(CondT const& cond) const
+ {
+ typedef do_composite<
+ typename as_lambda_functor<DoT>::type,
+ typename as_lambda_functor<CondT>::type>
+ result;
+
+ return result(
+ to_lambda_functor(do_),
+ to_lambda_functor(cond));
+ }
+
+ DoT do_;
+};
+
+////////////////////////////////////
+struct do_gen {
+
+ template <typename DoT>
+ do_gen2<DoT>
+ operator[](DoT const& do_) const
+ {
+ return do_gen2<DoT>(do_);
+ }
+};
+
+do_gen const do_ = do_gen();
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// for_composite
+//
+// This statement has the form:
+//
+// for_(init, condition, step)
+// [
+// statement
+// ]
+//
+// Where init, condition, step and statement are all lambda_functors. init
+// is executed once before entering the for-loop. The for-loop
+// exits once condition evaluates to false. At each loop iteration,
+// step and statement is called. The result of this statement is
+// void. Note the trailing underscore after for_.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename InitT, typename CondT, typename StepT, typename DoT>
+struct for_composite {
+
+ template <class SigArgs>
+ struct sig { typedef void type; };
+
+ for_composite(
+ InitT const& init_,
+ CondT const& cond_,
+ StepT const& step_,
+ DoT const& do__)
+ : init(init_), cond(cond_), step(step_), do_(do__) {}
+
+ template <class Ret, CALL_TEMPLATE_ARGS>
+ Ret
+ call(CALL_FORMAL_ARGS) const
+ {
+ for (init.internal_call(CALL_ACTUAL_ARGS); cond.internal_call(CALL_ACTUAL_ARGS); step.internal_call(CALL_ACTUAL_ARGS))
+ do_.internal_call(CALL_ACTUAL_ARGS);
+ }
+
+ InitT init; CondT cond; StepT step; DoT do_; // lambda_functors
+};
+
+//////////////////////////////////
+template <typename InitT, typename CondT, typename StepT>
+struct for_gen {
+
+ for_gen(
+ InitT const& init_,
+ CondT const& cond_,
+ StepT const& step_)
+ : init(init_), cond(cond_), step(step_) {}
+
+ template <typename DoT>
+ lambda_functor<for_composite<
+ typename as_lambda_functor<InitT>::type,
+ typename as_lambda_functor<CondT>::type,
+ typename as_lambda_functor<StepT>::type,
+ typename as_lambda_functor<DoT>::type> >
+ operator[](DoT const& do_) const
+ {
+ typedef for_composite<
+ typename as_lambda_functor<InitT>::type,
+ typename as_lambda_functor<CondT>::type,
+ typename as_lambda_functor<StepT>::type,
+ typename as_lambda_functor<DoT>::type>
+ result;
+
+ return result(
+ to_lambda_functor(init),
+ to_lambda_functor(cond),
+ to_lambda_functor(step),
+ to_lambda_functor(do_));
+ }
+
+ InitT init; CondT cond; StepT step;
+};
+
+//////////////////////////////////
+template <typename InitT, typename CondT, typename StepT>
+inline for_gen<InitT, CondT, StepT>
+for_(InitT const& init, CondT const& cond, StepT const& step)
+{
+ return for_gen<InitT, CondT, StepT>(init, cond, step);
+}
+
+} // lambda
+} // boost
+
+#endif // BOOST_LAMBDA_LOOPS_HPP
diff --git a/boost/boost/lambda/numeric.hpp b/boost/boost/lambda/numeric.hpp
new file mode 100644
index 00000000000..385560256f8
--- /dev/null
+++ b/boost/boost/lambda/numeric.hpp
@@ -0,0 +1,119 @@
+// -- numeric.hpp -- Boost Lambda Library -----------------------------------
+// Copyright (C) 2002 Jaakko Järvi (jaakko.jarvi@cs.utu.fi)
+// Copyright (C) 2002 Gary Powell (gwpowell@hotmail.com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org
+
+#ifndef BOOST_LAMBDA_NUMERIC_HPP
+#define BOOST_LAMBDA_NUMERIC_HPP
+
+#include "boost/lambda/core.hpp"
+
+#include <numeric>
+
+namespace boost {
+ namespace lambda {
+
+namespace ll {
+
+// accumulate ---------------------------------
+
+struct accumulate {
+
+ template <class Args>
+ struct sig {
+ typedef typename boost::remove_const<
+ typename boost::tuples::element<3, Args>::type
+ >::type type;
+ };
+
+ template <class A, class B, class C>
+ C
+ operator()(A a, B b, C c) const
+ { return ::std::accumulate(a, b, c); }
+
+ template <class A, class B, class C, class D>
+ C
+ operator()(A a, B b, C c, D d) const
+ { return ::std::accumulate(a, b, c, d); }
+};
+
+// inner_product ---------------------------------
+
+struct inner_product {
+
+ template <class Args>
+ struct sig {
+ typedef typename boost::remove_const<
+ typename boost::tuples::element<4, Args>::type
+ >::type type;
+ };
+
+ template <class A, class B, class C, class D>
+ D
+ operator()(A a, B b, C c, D d) const
+ { return ::std::inner_product(a, b, c, d); }
+
+ template <class A, class B, class C, class D, class E, class F>
+ D
+ operator()(A a, B b, C c, D d, E e, F f) const
+ { return ::std::inner_product(a, b, c, d, e, f); }
+};
+
+
+// partial_sum ---------------------------------
+
+struct partial_sum {
+
+ template <class Args>
+ struct sig {
+ typedef typename boost::remove_const<
+ typename boost::tuples::element<3, Args>::type
+ >::type type;
+ };
+
+ template <class A, class B, class C>
+ C
+ operator()(A a, B b, C c) const
+ { return ::std::partial_sum(a, b, c); }
+
+ template <class A, class B, class C, class D>
+ C
+ operator()(A a, B b, C c, D d) const
+ { return ::std::partial_sum(a, b, c, d); }
+};
+
+// adjacent_difference ---------------------------------
+
+struct adjacent_difference {
+
+ template <class Args>
+ struct sig {
+ typedef typename boost::remove_const<
+ typename boost::tuples::element<3, Args>::type
+ >::type type;
+ };
+
+ template <class A, class B, class C>
+ C
+ operator()(A a, B b, C c) const
+ { return ::std::adjacent_difference(a, b, c); }
+
+ template <class A, class B, class C, class D>
+ C
+ operator()(A a, B b, C c, D d) const
+ { return ::std::adjacent_difference(a, b, c, d); }
+};
+
+} // end of ll namespace
+
+} // end of lambda namespace
+} // end of boost namespace
+
+
+
+#endif
diff --git a/boost/boost/lambda/switch.hpp b/boost/boost/lambda/switch.hpp
new file mode 100644
index 00000000000..9a1b3f9f129
--- /dev/null
+++ b/boost/boost/lambda/switch.hpp
@@ -0,0 +1,502 @@
+// Boost Lambda Library -- switch.hpp -----------------------------------
+//
+// Copyright (C) 2000 Gary Powell (powellg@amazon.com)
+// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi@cs.utu.fi)
+//
+// 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)
+//
+// For more information, see www.boost.org
+
+// --------------------------------------------------------------------------
+
+#if !defined(BOOST_LAMBDA_SWITCH_HPP)
+#define BOOST_LAMBDA_SWITCH_HPP
+
+#include "boost/lambda/core.hpp"
+#include "boost/lambda/detail/control_constructs_common.hpp"
+
+#include "boost/preprocessor/enum_shifted_params.hpp"
+#include "boost/preprocessor/repeat_2nd.hpp"
+#include "boost/preprocessor/tuple.hpp"
+
+namespace boost {
+namespace lambda {
+
+// Switch actions
+template <int N, class Switch1 = null_type, class Switch2 = null_type,
+ class Switch3 = null_type, class Switch4 = null_type,
+ class Switch5 = null_type, class Switch6 = null_type,
+ class Switch7 = null_type, class Switch8 = null_type,
+ class Switch9 = null_type>
+struct switch_action {};
+
+
+namespace detail {
+
+ // templates to represent special lambda functors for the cases in
+ // switch statements
+
+template <int Value> struct case_label {};
+struct default_label {};
+
+template<class Type> struct switch_case_tag {};
+
+ // a normal case is represented as:
+ // tagged_lambda_functor<switch_case_tag<case_label<N> > >, LambdaFunctor>
+
+ // the default case as:
+ // tagged_lambda_functor<switch_case_tag<default_label> >, LambdaFunctor>
+
+
+} // end detail
+
+
+/// create switch_case_tag tagged_lambda_functors
+template <int CaseValue, class Arg>
+inline const
+tagged_lambda_functor<
+ detail::switch_case_tag<detail::case_label<CaseValue> >,
+ lambda_functor<Arg>
+>
+case_statement(const lambda_functor<Arg>& a) {
+ return
+ tagged_lambda_functor<
+ detail::switch_case_tag<detail::case_label<CaseValue> >,
+ lambda_functor<Arg>
+ >(a);
+}
+
+// No case body case.
+template <int CaseValue>
+inline const
+tagged_lambda_functor<
+ detail::switch_case_tag<detail::case_label<CaseValue> >,
+ lambda_functor<
+ lambda_functor_base<
+ do_nothing_action,
+ null_type
+ >
+ >
+>
+case_statement() {
+return
+ tagged_lambda_functor<
+ detail::switch_case_tag<detail::case_label<CaseValue> >,
+ lambda_functor<
+ lambda_functor_base<
+ do_nothing_action,
+ null_type
+ >
+ >
+ > () ;
+}
+
+// default label
+template <class Arg>
+inline const
+tagged_lambda_functor<
+ detail::switch_case_tag<detail::default_label>,
+ lambda_functor<Arg>
+>
+default_statement(const lambda_functor<Arg>& a) {
+ return
+ tagged_lambda_functor<
+ detail::switch_case_tag<detail::default_label>,
+ lambda_functor<Arg>
+ >(a);
+}
+
+// default lable, no case body case.
+inline const
+tagged_lambda_functor<
+ detail::switch_case_tag<detail::default_label>,
+ lambda_functor<
+ lambda_functor_base<
+ do_nothing_action,
+ null_type
+ >
+ >
+>
+default_statement() {
+return
+ lambda_functor_base<
+ do_nothing_action,
+ null_type
+ > () ;
+}
+
+
+// Specializations for lambda_functor_base of case_statement -----------------
+
+// 0 case type:
+// useless (just the condition part) but provided for completeness.
+template<class Args>
+class
+lambda_functor_base<
+ switch_action<1>,
+ Args
+>
+{
+public:
+ Args args;
+ template <class SigArgs> struct sig { typedef void type; };
+public:
+ explicit lambda_functor_base(const Args& a) : args(a) {}
+
+ template<class RET, CALL_TEMPLATE_ARGS>
+ RET call(CALL_FORMAL_ARGS) const {
+ detail::select(::boost::tuples::get<1>(args), CALL_ACTUAL_ARGS);
+ }
+};
+
+// 1 case type:
+// template<class Args, int Case1>
+// class
+// lambda_functor_base<
+// action<
+// 2,
+// return_void_action<switch_action<detail::case_label<Case1> > >
+// >,
+// Args
+// >
+// {
+// Args args;
+// public:
+// explicit lambda_functor_base(const Args& a) : args(a) {}
+
+// template<class RET, class A, class B, class C>
+// RET call(A& a, B& b, C& c) const {
+// switch( detail::select(::boost::tuples::get<0>(args), a, b, c) )
+// {
+// case Case1:
+// detail::select(::boost::tuples::get<1>(args), a, b, c);
+// break;
+// }
+// }
+// };
+
+// switch with default being the sole label - doesn't make much sense but
+// it is there for completeness
+// template<class Args>
+// class
+// lambda_functor_base<
+// action<
+// 2,
+// return_void_action<switch_action<detail::default_label> >
+// >,
+// Args
+// >
+// {
+// Args args;
+// public:
+// explicit lambda_functor_base(const Args& a) : args(a) {}
+//
+// template<class RET, class A, class B, class C>
+// RET call(A& a, B& b, C& c) const {
+// switch( detail::select(::boost::tuples::get<0>(args), a, b, c) )
+// {
+// default:
+// detail::select(::boost::tuples::get<1>(args), a, b, c);
+// break;
+// }
+// }
+// };
+
+
+
+// // 2 case type:
+// The different specializations are generated with Vesa Karvonen's
+// preprocessor library.
+
+// This is just a comment to show what the generated classes look like
+
+// template<class Args, int Case1, int Case2>
+// class
+// lambda_functor_base<
+// action<3,
+// return_void_action<
+// switch_action<
+// detail::case_label<Case1>,
+// detail::case_label<Case2>
+// >
+// >
+// >,
+// Args
+// >
+// {
+// Args args;
+// public:
+// explicit lambda_functor_base(const Args& a) : args(a) {}
+
+// template<class RET, class A, class B, class C>
+// RET call(A& a, B& b, C& c) const {
+// switch( detail::select(::boost::tuples::get<0>(args), a, b, c) )
+// {
+// case Case1:
+// detail::select(::boost::tuples::get<1>(args), a, b, c);
+// break;
+// case Case2:
+// detail::select(::boost::tuples::get<2>(args), a, b, c);
+// break;
+// }
+// }
+// };
+
+// template<class Args, int Case1>
+// class
+// lambda_functor_base<
+// action<3,
+// return_void_action<
+// switch_action<
+// detail::case_label<Case1>,
+// detail::default_label
+// >
+// >
+// >,
+// Args
+// >
+// {
+// Args args;
+// public:
+// explicit lambda_functor_base(const Args& a) : args(a) {}
+
+// template<class RET, class A, class B, class C>
+// RET call(A& a, B& b, C& c) const {
+// switch( detail::select(::boost::tuples::get<0>(args), a, b, c) )
+// {
+// case Case1:
+// detail::select(::boost::tuples::get<1>(args), a, b, c);
+// break;
+// default:
+// detail::select(::boost::tuples::get<2>(args), a, b, c);
+// break;
+// }
+// }
+// };
+// -------------------------
+
+// Some helper preprocessor macros ---------------------------------
+
+// BOOST_LAMBDA_A_I_LIST(N, X) is a list of form X0, X1, ..., XN
+// BOOST_LAMBDA_A_I_B_LIST(N, X, Y) is a list of form X0 Y, X1 Y, ..., XN Y
+
+#define BOOST_LAMBDA_A_I(z, i, A) \
+BOOST_PP_COMMA_IF(i) BOOST_PP_CAT(A,i)
+
+#define BOOST_LAMBDA_A_I_B(z, i, T) \
+BOOST_PP_COMMA_IF(i) BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(2,0,T),i) BOOST_PP_TUPLE_ELEM(2,1,T)
+
+#define BOOST_LAMBDA_A_I_LIST(i, A) \
+BOOST_PP_REPEAT(i,BOOST_LAMBDA_A_I, A)
+
+#define BOOST_LAMBDA_A_I_B_LIST(i, A, B) \
+BOOST_PP_REPEAT(i,BOOST_LAMBDA_A_I_B, (A,B))
+
+
+// Switch related macros -------------------------------------------
+#define BOOST_LAMBDA_SWITCH_CASE_BLOCK(z, N, A) \
+ case Case##N: \
+ detail::select(::boost::tuples::get<BOOST_PP_INC(N)>(args), CALL_ACTUAL_ARGS); \
+ break;
+
+#define BOOST_LAMBDA_SWITCH_CASE_BLOCK_LIST(N) \
+BOOST_PP_REPEAT(N, BOOST_LAMBDA_SWITCH_CASE_BLOCK, FOO)
+// 2 case type:
+
+#define BOOST_LAMBDA_SWITCH_NO_DEFAULT_CASE(N) \
+template<class Args, BOOST_LAMBDA_A_I_LIST(N, int Case)> \
+class \
+lambda_functor_base< \
+ switch_action<BOOST_PP_INC(N), \
+ BOOST_LAMBDA_A_I_B_LIST(N, detail::case_label<Case,>) \
+ >, \
+ Args \
+> \
+{ \
+public: \
+ Args args; \
+ template <class SigArgs> struct sig { typedef void type; }; \
+public: \
+ explicit lambda_functor_base(const Args& a) : args(a) {} \
+ \
+ template<class RET, CALL_TEMPLATE_ARGS> \
+ RET call(CALL_FORMAL_ARGS) const { \
+ switch( detail::select(::boost::tuples::get<0>(args), CALL_ACTUAL_ARGS) ) \
+ { \
+ BOOST_LAMBDA_SWITCH_CASE_BLOCK_LIST(N) \
+ } \
+ } \
+};
+
+
+
+#define BOOST_LAMBDA_SWITCH_WITH_DEFAULT_CASE(N) \
+template< \
+ class Args BOOST_PP_COMMA_IF(BOOST_PP_DEC(N)) \
+ BOOST_LAMBDA_A_I_LIST(BOOST_PP_DEC(N), int Case) \
+> \
+class \
+lambda_functor_base< \
+ switch_action<BOOST_PP_INC(N), \
+ BOOST_LAMBDA_A_I_B_LIST(BOOST_PP_DEC(N), \
+ detail::case_label<Case, >) \
+ BOOST_PP_COMMA_IF(BOOST_PP_DEC(N)) \
+ detail::default_label \
+ >, \
+ Args \
+> \
+{ \
+public: \
+ Args args; \
+ template <class SigArgs> struct sig { typedef void type; }; \
+public: \
+ explicit lambda_functor_base(const Args& a) : args(a) {} \
+ \
+ template<class RET, CALL_TEMPLATE_ARGS> \
+ RET call(CALL_FORMAL_ARGS) const { \
+ switch( detail::select(::boost::tuples::get<0>(args), CALL_ACTUAL_ARGS) ) \
+ { \
+ BOOST_LAMBDA_SWITCH_CASE_BLOCK_LIST(BOOST_PP_DEC(N)) \
+ default: \
+ detail::select(::boost::tuples::get<N>(args), CALL_ACTUAL_ARGS); \
+ break; \
+ } \
+ } \
+};
+
+
+
+
+
+
+// switch_statement bind functions -------------------------------------
+
+// The zero argument case, for completeness sake
+inline const
+lambda_functor<
+ lambda_functor_base<
+ do_nothing_action,
+ null_type
+ >
+>
+switch_statement() {
+ return
+ lambda_functor_base<
+ do_nothing_action,
+ null_type
+ >
+ ();
+}
+
+// 1 argument case, this is useless as well, just the condition part
+template <class TestArg>
+inline const
+lambda_functor<
+ lambda_functor_base<
+ switch_action<1>,
+ tuple<lambda_functor<TestArg> >
+ >
+>
+switch_statement(const lambda_functor<TestArg>& a1) {
+ return
+ lambda_functor_base<
+ switch_action<1>,
+ tuple< lambda_functor<TestArg> >
+ >
+ ( tuple<lambda_functor<TestArg> >(a1));
+}
+
+
+#define HELPER(z, N, FOO) \
+BOOST_PP_COMMA_IF(N) \
+BOOST_PP_CAT( \
+ const tagged_lambda_functor<detail::switch_case_tag<TagData, \
+ N>) \
+BOOST_PP_COMMA() Arg##N>& a##N
+
+#define HELPER_LIST(N) BOOST_PP_REPEAT(N, HELPER, FOO)
+
+
+#define BOOST_LAMBDA_SWITCH_STATEMENT(N) \
+template <class TestArg, \
+ BOOST_LAMBDA_A_I_LIST(N, class TagData), \
+ BOOST_LAMBDA_A_I_LIST(N, class Arg)> \
+inline const \
+lambda_functor< \
+ lambda_functor_base< \
+ switch_action<BOOST_PP_INC(N), \
+ BOOST_LAMBDA_A_I_LIST(N, TagData) \
+ >, \
+ tuple<lambda_functor<TestArg>, BOOST_LAMBDA_A_I_LIST(N, Arg)> \
+ > \
+> \
+switch_statement( \
+ const lambda_functor<TestArg>& ta, \
+ HELPER_LIST(N) \
+) \
+{ \
+ return \
+ lambda_functor_base< \
+ switch_action<BOOST_PP_INC(N), \
+ BOOST_LAMBDA_A_I_LIST(N, TagData) \
+ >, \
+ tuple<lambda_functor<TestArg>, BOOST_LAMBDA_A_I_LIST(N, Arg)> \
+ > \
+ ( tuple<lambda_functor<TestArg>, BOOST_LAMBDA_A_I_LIST(N, Arg)> \
+ (ta, BOOST_LAMBDA_A_I_LIST(N, a) )); \
+}
+
+
+
+
+// Here's the actual generation
+
+#define BOOST_LAMBDA_SWITCH(N) \
+BOOST_LAMBDA_SWITCH_NO_DEFAULT_CASE(N) \
+BOOST_LAMBDA_SWITCH_WITH_DEFAULT_CASE(N)
+
+// Use this to avoid case 0, these macros work only from case 1 upwards
+#define BOOST_LAMBDA_SWITCH_HELPER(z, N, A) \
+BOOST_LAMBDA_SWITCH( BOOST_PP_INC(N) )
+
+// Use this to avoid cases 0 and 1, these macros work only from case 2 upwards
+#define BOOST_LAMBDA_SWITCH_STATEMENT_HELPER(z, N, A) \
+BOOST_LAMBDA_SWITCH_STATEMENT(BOOST_PP_INC(N))
+
+
+
+ // up to 9 cases supported (counting default:)
+BOOST_PP_REPEAT_2ND(9,BOOST_LAMBDA_SWITCH_HELPER,FOO)
+BOOST_PP_REPEAT_2ND(9,BOOST_LAMBDA_SWITCH_STATEMENT_HELPER,FOO)
+
+
+} // namespace lambda
+} // namespace boost
+
+
+#undef HELPER
+#undef HELPER_LIST
+
+#undef BOOST_LAMBDA_SWITCH_HELPER
+#undef BOOST_LAMBDA_SWITCH
+#undef BOOST_LAMBDA_SWITCH_NO_DEFAULT_CASE
+#undef BOOST_LAMBDA_SWITCH_WITH_DEFAULT_CASE
+
+#undef BOOST_LAMBDA_SWITCH_CASE_BLOCK
+#undef BOOST_LAMBDA_SWITCH_CASE_BLOCK_LIST
+
+#undef BOOST_LAMBDA_SWITCH_STATEMENT
+#undef BOOST_LAMBDA_SWITCH_STATEMENT_HELPER
+
+
+
+#endif
+
+
+
+
+
+
+
diff --git a/boost/boost/last_value.hpp b/boost/boost/last_value.hpp
new file mode 100644
index 00000000000..392e2385643
--- /dev/null
+++ b/boost/boost/last_value.hpp
@@ -0,0 +1,48 @@
+// last_value function object (documented as part of Boost.Signals)
+
+// Copyright Douglas Gregor 2001-2003. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org/libs/signals
+
+#ifndef BOOST_LAST_VALUE_HPP
+#define BOOST_LAST_VALUE_HPP
+
+#include <cassert>
+
+namespace boost {
+ template<typename T>
+ struct last_value {
+ typedef T result_type;
+
+ template<typename InputIterator>
+ T operator()(InputIterator first, InputIterator last) const
+ {
+ assert(first != last);
+ T value = *first++;
+ while (first != last)
+ value = *first++;
+ return value;
+ }
+ };
+
+ template<>
+ struct last_value<void> {
+ struct unusable {};
+
+ public:
+ typedef unusable result_type;
+
+ template<typename InputIterator>
+ result_type
+ operator()(InputIterator first, InputIterator last) const
+ {
+ while (first != last)
+ *first++;
+ return result_type();
+ }
+ };
+}
+#endif // BOOST_SIGNALS_LAST_VALUE_HPP
diff --git a/boost/boost/lexical_cast.hpp b/boost/boost/lexical_cast.hpp
new file mode 100644
index 00000000000..926b95e4303
--- /dev/null
+++ b/boost/boost/lexical_cast.hpp
@@ -0,0 +1,252 @@
+#ifndef BOOST_LEXICAL_CAST_INCLUDED
+#define BOOST_LEXICAL_CAST_INCLUDED
+
+// Boost lexical_cast.hpp header -------------------------------------------//
+//
+// See http://www.boost.org for most recent version including documentation.
+// See end of this header for rights and permissions.
+//
+// what: lexical_cast custom keyword cast
+// who: contributed by Kevlin Henney,
+// enhanced with contributions from Terje Slettebø,
+// with additional fixes and suggestions from Gennaro Prota,
+// Beman Dawes, Dave Abrahams, Daryle Walker, Peter Dimov,
+// and other Boosters
+// when: November 2000, March 2003, June 2005
+
+#include <cstddef>
+#include <string>
+#include <typeinfo>
+#include <boost/config.hpp>
+#include <boost/limits.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/type_traits/is_pointer.hpp>
+
+#ifdef BOOST_NO_STRINGSTREAM
+#include <strstream>
+#else
+#include <sstream>
+#endif
+
+#if defined(BOOST_NO_STRINGSTREAM) || \
+ defined(BOOST_NO_STD_WSTRING) || \
+ defined(BOOST_NO_STD_LOCALE)
+#define DISABLE_WIDE_CHAR_SUPPORT
+#endif
+
+namespace boost
+{
+ // exception used to indicate runtime lexical_cast failure
+ class bad_lexical_cast : public std::bad_cast
+ {
+ public:
+ bad_lexical_cast() :
+ source(&typeid(void)), target(&typeid(void))
+ {
+ }
+ bad_lexical_cast(
+ const std::type_info &source_type,
+ const std::type_info &target_type) :
+ source(&source_type), target(&target_type)
+ {
+ }
+ const std::type_info &source_type() const
+ {
+ return *source;
+ }
+ const std::type_info &target_type() const
+ {
+ return *target;
+ }
+ virtual const char *what() const throw()
+ {
+ return "bad lexical cast: "
+ "source type value could not be interpreted as target";
+ }
+ virtual ~bad_lexical_cast() throw()
+ {
+ }
+ private:
+ const std::type_info *source;
+ const std::type_info *target;
+ };
+
+ namespace detail // selectors for choosing stream character type
+ {
+ template<typename Type>
+ struct stream_char
+ {
+ typedef char type;
+ };
+
+ #ifndef DISABLE_WIDE_CHAR_SUPPORT
+#if !defined(BOOST_NO_INTRINSIC_WCHAR_T)
+ template<>
+ struct stream_char<wchar_t>
+ {
+ typedef wchar_t type;
+ };
+#endif
+
+ template<>
+ struct stream_char<wchar_t *>
+ {
+ typedef wchar_t type;
+ };
+
+ template<>
+ struct stream_char<const wchar_t *>
+ {
+ typedef wchar_t type;
+ };
+
+ template<>
+ struct stream_char<std::wstring>
+ {
+ typedef wchar_t type;
+ };
+ #endif
+
+ template<typename TargetChar, typename SourceChar>
+ struct widest_char
+ {
+ typedef TargetChar type;
+ };
+
+ template<>
+ struct widest_char<char, wchar_t>
+ {
+ typedef wchar_t type;
+ };
+ }
+
+ namespace detail // stream wrapper for handling lexical conversions
+ {
+ template<typename Target, typename Source>
+ class lexical_stream
+ {
+ private:
+ typedef typename widest_char<
+ typename stream_char<Target>::type,
+ typename stream_char<Source>::type>::type char_type;
+
+ public:
+ lexical_stream()
+ {
+ stream.unsetf(std::ios::skipws);
+
+ if(std::numeric_limits<Target>::is_specialized)
+ stream.precision(std::numeric_limits<Target>::digits10 + 1);
+ else if(std::numeric_limits<Source>::is_specialized)
+ stream.precision(std::numeric_limits<Source>::digits10 + 1);
+ }
+ ~lexical_stream()
+ {
+ #if defined(BOOST_NO_STRINGSTREAM)
+ stream.freeze(false);
+ #endif
+ }
+ bool operator<<(const Source &input)
+ {
+ return !(stream << input).fail();
+ }
+ template<typename InputStreamable>
+ bool operator>>(InputStreamable &output)
+ {
+ return !is_pointer<InputStreamable>::value &&
+ stream >> output &&
+ stream.get() ==
+#if defined(__GNUC__) && (__GNUC__<3) && defined(BOOST_NO_STD_WSTRING)
+// GCC 2.9x lacks std::char_traits<>::eof().
+// We use BOOST_NO_STD_WSTRING to filter out STLport and libstdc++-v3
+// configurations, which do provide std::char_traits<>::eof().
+
+ EOF;
+#else
+ std::char_traits<char_type>::eof();
+#endif
+ }
+ bool operator>>(std::string &output)
+ {
+ #if defined(BOOST_NO_STRINGSTREAM)
+ stream << '\0';
+ #endif
+ output = stream.str();
+ return true;
+ }
+ #ifndef DISABLE_WIDE_CHAR_SUPPORT
+ bool operator>>(std::wstring &output)
+ {
+ output = stream.str();
+ return true;
+ }
+ #endif
+ private:
+ #if defined(BOOST_NO_STRINGSTREAM)
+ std::strstream stream;
+ #elif defined(BOOST_NO_STD_LOCALE)
+ std::stringstream stream;
+ #else
+ std::basic_stringstream<char_type> stream;
+ #endif
+ };
+ }
+
+ #ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+ // call-by-const reference version
+
+ namespace detail
+ {
+ template<class T>
+ struct array_to_pointer_decay
+ {
+ typedef T type;
+ };
+
+ template<class T, std::size_t N>
+ struct array_to_pointer_decay<T[N]>
+ {
+ typedef const T * type;
+ };
+ }
+
+ template<typename Target, typename Source>
+ Target lexical_cast(const Source &arg)
+ {
+ typedef typename detail::array_to_pointer_decay<Source>::type NewSource;
+
+ detail::lexical_stream<Target, NewSource> interpreter;
+ Target result;
+
+ if(!(interpreter << arg && interpreter >> result))
+ throw_exception(bad_lexical_cast(typeid(NewSource), typeid(Target)));
+ return result;
+ }
+
+ #else
+
+ // call-by-value fallback version (deprecated)
+
+ template<typename Target, typename Source>
+ Target lexical_cast(Source arg)
+ {
+ detail::lexical_stream<Target, Source> interpreter;
+ Target result;
+
+ if(!(interpreter << arg && interpreter >> result))
+ throw_exception(bad_lexical_cast(typeid(Source), typeid(Target)));
+ return result;
+ }
+
+ #endif
+}
+
+// Copyright Kevlin Henney, 2000-2005. All rights reserved.
+//
+// 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)
+
+#undef DISABLE_WIDE_CHAR_SUPPORT
+#endif
diff --git a/boost/boost/limits.hpp b/boost/boost/limits.hpp
new file mode 100644
index 00000000000..370c0f217b1
--- /dev/null
+++ b/boost/boost/limits.hpp
@@ -0,0 +1,144 @@
+
+// (C) Copyright John maddock 1999.
+// (C) David Abrahams 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)
+//
+// use this header as a workaround for missing <limits>
+
+// See http://www.boost.org/libs/utility/limits.html for documentation.
+
+#ifndef BOOST_LIMITS
+#define BOOST_LIMITS
+
+#include <boost/config.hpp>
+
+#ifdef BOOST_NO_LIMITS
+# include <boost/detail/limits.hpp>
+#else
+# include <limits>
+#endif
+
+#if (defined(BOOST_HAS_LONG_LONG) && defined(BOOST_NO_LONG_LONG_NUMERIC_LIMITS)) \
+ || (defined(BOOST_HAS_MS_INT64) && defined(BOOST_NO_MS_INT64_NUMERIC_LIMITS))
+// Add missing specializations for numeric_limits:
+#ifdef BOOST_HAS_MS_INT64
+# define BOOST_LLT __int64
+# define BOOST_ULLT unsigned __int64
+#else
+# define BOOST_LLT ::boost::long_long_type
+# define BOOST_ULLT ::boost::ulong_long_type
+#endif
+
+namespace std
+{
+ template<>
+ class numeric_limits<BOOST_LLT>
+ {
+ public:
+
+ BOOST_STATIC_CONSTANT(bool, is_specialized = true);
+#ifdef BOOST_HAS_MS_INT64
+ static BOOST_LLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return 0x8000000000000000i64; }
+ static BOOST_LLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return 0x7FFFFFFFFFFFFFFFi64; }
+#elif defined(LLONG_MAX)
+ static BOOST_LLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return LLONG_MIN; }
+ static BOOST_LLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return LLONG_MAX; }
+#elif defined(LONGLONG_MAX)
+ static BOOST_LLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return LONGLONG_MIN; }
+ static BOOST_LLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return LONGLONG_MAX; }
+#else
+ static BOOST_LLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return 1LL << (sizeof(BOOST_LLT) * CHAR_BIT - 1); }
+ static BOOST_LLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return ~(min)(); }
+#endif
+ BOOST_STATIC_CONSTANT(int, digits = sizeof(BOOST_LLT) * CHAR_BIT -1);
+ BOOST_STATIC_CONSTANT(int, digits10 = (CHAR_BIT * sizeof (BOOST_LLT) - 1) * 301L / 1000);
+ BOOST_STATIC_CONSTANT(bool, is_signed = true);
+ BOOST_STATIC_CONSTANT(bool, is_integer = true);
+ BOOST_STATIC_CONSTANT(bool, is_exact = true);
+ BOOST_STATIC_CONSTANT(int, radix = 2);
+ static BOOST_LLT epsilon() throw() { return 0; };
+ static BOOST_LLT round_error() throw() { return 0; };
+
+ BOOST_STATIC_CONSTANT(int, min_exponent = 0);
+ BOOST_STATIC_CONSTANT(int, min_exponent10 = 0);
+ BOOST_STATIC_CONSTANT(int, max_exponent = 0);
+ BOOST_STATIC_CONSTANT(int, max_exponent10 = 0);
+
+ BOOST_STATIC_CONSTANT(bool, has_infinity = false);
+ BOOST_STATIC_CONSTANT(bool, has_quiet_NaN = false);
+ BOOST_STATIC_CONSTANT(bool, has_signaling_NaN = false);
+ BOOST_STATIC_CONSTANT(bool, has_denorm = false);
+ BOOST_STATIC_CONSTANT(bool, has_denorm_loss = false);
+ static BOOST_LLT infinity() throw() { return 0; };
+ static BOOST_LLT quiet_NaN() throw() { return 0; };
+ static BOOST_LLT signaling_NaN() throw() { return 0; };
+ static BOOST_LLT denorm_min() throw() { return 0; };
+
+ BOOST_STATIC_CONSTANT(bool, is_iec559 = false);
+ BOOST_STATIC_CONSTANT(bool, is_bounded = true);
+ BOOST_STATIC_CONSTANT(bool, is_modulo = true);
+
+ BOOST_STATIC_CONSTANT(bool, traps = false);
+ BOOST_STATIC_CONSTANT(bool, tinyness_before = false);
+ BOOST_STATIC_CONSTANT(float_round_style, round_style = round_toward_zero);
+
+ };
+
+ template<>
+ class numeric_limits<BOOST_ULLT>
+ {
+ public:
+
+ BOOST_STATIC_CONSTANT(bool, is_specialized = true);
+#ifdef BOOST_HAS_MS_INT64
+ static BOOST_ULLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return 0ui64; }
+ static BOOST_ULLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return 0xFFFFFFFFFFFFFFFFui64; }
+#elif defined(ULLONG_MAX) && defined(ULLONG_MIN)
+ static BOOST_ULLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return ULLONG_MIN; }
+ static BOOST_ULLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return ULLONG_MAX; }
+#elif defined(ULONGLONG_MAX) && defined(ULONGLONG_MIN)
+ static BOOST_ULLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return ULONGLONG_MIN; }
+ static BOOST_ULLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return ULONGLONG_MAX; }
+#else
+ static BOOST_ULLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return 0uLL; }
+ static BOOST_ULLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return ~0uLL; }
+#endif
+ BOOST_STATIC_CONSTANT(int, digits = sizeof(BOOST_LLT) * CHAR_BIT);
+ BOOST_STATIC_CONSTANT(int, digits10 = (CHAR_BIT * sizeof (BOOST_LLT)) * 301L / 1000);
+ BOOST_STATIC_CONSTANT(bool, is_signed = false);
+ BOOST_STATIC_CONSTANT(bool, is_integer = true);
+ BOOST_STATIC_CONSTANT(bool, is_exact = true);
+ BOOST_STATIC_CONSTANT(int, radix = 2);
+ static BOOST_ULLT epsilon() throw() { return 0; };
+ static BOOST_ULLT round_error() throw() { return 0; };
+
+ BOOST_STATIC_CONSTANT(int, min_exponent = 0);
+ BOOST_STATIC_CONSTANT(int, min_exponent10 = 0);
+ BOOST_STATIC_CONSTANT(int, max_exponent = 0);
+ BOOST_STATIC_CONSTANT(int, max_exponent10 = 0);
+
+ BOOST_STATIC_CONSTANT(bool, has_infinity = false);
+ BOOST_STATIC_CONSTANT(bool, has_quiet_NaN = false);
+ BOOST_STATIC_CONSTANT(bool, has_signaling_NaN = false);
+ BOOST_STATIC_CONSTANT(bool, has_denorm = false);
+ BOOST_STATIC_CONSTANT(bool, has_denorm_loss = false);
+ static BOOST_ULLT infinity() throw() { return 0; };
+ static BOOST_ULLT quiet_NaN() throw() { return 0; };
+ static BOOST_ULLT signaling_NaN() throw() { return 0; };
+ static BOOST_ULLT denorm_min() throw() { return 0; };
+
+ BOOST_STATIC_CONSTANT(bool, is_iec559 = false);
+ BOOST_STATIC_CONSTANT(bool, is_bounded = true);
+ BOOST_STATIC_CONSTANT(bool, is_modulo = true);
+
+ BOOST_STATIC_CONSTANT(bool, traps = false);
+ BOOST_STATIC_CONSTANT(bool, tinyness_before = false);
+ BOOST_STATIC_CONSTANT(float_round_style, round_style = round_toward_zero);
+
+ };
+}
+#endif
+
+#endif
+
diff --git a/boost/boost/logic/tribool.hpp b/boost/boost/logic/tribool.hpp
new file mode 100644
index 00000000000..2cc501c886c
--- /dev/null
+++ b/boost/boost/logic/tribool.hpp
@@ -0,0 +1,460 @@
+// Three-state boolean logic library
+
+// Copyright Douglas Gregor 2002-2004. Use, modification and
+// distribution is 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)
+
+
+// For more information, see http://www.boost.org
+#ifndef BOOST_LOGIC_TRIBOOL_HPP
+#define BOOST_LOGIC_TRIBOOL_HPP
+
+#include <boost/logic/tribool_fwd.hpp>
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+#if BOOST_WORKAROUND(_MSC_VER, >= 1200)
+# pragma once
+#endif
+
+namespace boost { namespace logic {
+
+/// INTERNAL ONLY
+namespace detail {
+/**
+ * INTERNAL ONLY
+ *
+ * \brief A type used only to uniquely identify the 'indeterminate'
+ * function/keyword.
+ */
+struct indeterminate_t
+{
+#if BOOST_WORKAROUND(__BORLANDC__, < 0x0600)
+ char dummy_; // BCB would use 8 bytes by default
+#endif
+};
+
+} // end namespace detail
+
+/**
+ * INTERNAL ONLY
+ * The type of the 'indeterminate' keyword. This has the same type as the
+ * function 'indeterminate' so that we can recognize when the keyword is
+ * used.
+ */
+typedef bool (*indeterminate_keyword_t)(tribool, detail::indeterminate_t);
+
+/**
+ * \brief Keyword and test function for the indeterminate tribool value
+ *
+ * The \c indeterminate function has a dual role. It's first role is
+ * as a unary function that tells whether the tribool value is in the
+ * "indeterminate" state. It's second role is as a keyword
+ * representing the indeterminate (just like "true" and "false"
+ * represent the true and false states). If you do not like the name
+ * "indeterminate", and would prefer to use a different name, see the
+ * macro \c BOOST_TRIBOOL_THIRD_STATE.
+ *
+ * \returns <tt>x.value == tribool::indeterminate_value</tt>
+ * \throws nothrow
+ */
+inline bool
+indeterminate(tribool x,
+ detail::indeterminate_t dummy = detail::indeterminate_t());
+
+/**
+ * \brief A 3-state boolean type.
+ *
+ * 3-state boolean values are either true, false, or
+ * indeterminate.
+ */
+class tribool
+{
+private:
+ /// INTERNAL ONLY
+ struct dummy {
+ void nonnull() {};
+ };
+
+ typedef void (dummy::*safe_bool)();
+
+public:
+ /**
+ * Construct a new 3-state boolean value with the value 'false'.
+ *
+ * \throws nothrow
+ */
+ tribool() : value(false_value) {}
+
+ /**
+ * Construct a new 3-state boolean value with the given boolean
+ * value, which may be \c true or \c false.
+ *
+ * \throws nothrow
+ */
+ tribool(bool value) : value(value? true_value : false_value) {}
+
+ /**
+ * Construct a new 3-state boolean value with an indeterminate value.
+ *
+ * \throws nothrow
+ */
+ tribool(indeterminate_keyword_t) : value(indeterminate_value) {}
+
+ /**
+ * Use a 3-state boolean in a boolean context. Will evaluate true in a
+ * boolean context only when the 3-state boolean is definitely true.
+ *
+ * \returns true if the 3-state boolean is true, false otherwise
+ * \throws nothrow
+ */
+ operator safe_bool() const
+ {
+ return value == true_value? &dummy::nonnull : 0;
+ }
+
+ /**
+ * The actual stored value in this 3-state boolean, which may be false, true,
+ * or indeterminate.
+ */
+ enum value_t { false_value, true_value, indeterminate_value } value;
+};
+
+// Check if the given tribool has an indeterminate value. Also doubles as a
+// keyword for the 'indeterminate' value
+inline bool indeterminate(tribool x, detail::indeterminate_t)
+{
+ return x.value == tribool::indeterminate_value;
+}
+
+/** @defgroup logical Logical operations
+ */
+//@{
+/**
+ * \brief Computes the logical negation of a tribool
+ *
+ * \returns the logical negation of the tribool, according to the
+ * table:
+ * <table border=1>
+ * <tr>
+ * <th><center><code>!</code></center></th>
+ * <th/>
+ * </tr>
+ * <tr>
+ * <th><center>false</center></th>
+ * <td><center>true</center></td>
+ * </tr>
+ * <tr>
+ * <th><center>true</center></th>
+ * <td><center>false</center></td>
+ * </tr>
+ * <tr>
+ * <th><center>indeterminate</center></th>
+ * <td><center>indeterminate</center></td>
+ * </tr>
+ * </table>
+ * \throws nothrow
+ */
+inline tribool operator!(tribool x)
+{
+ return x.value == tribool::false_value? tribool(true)
+ :x.value == tribool::true_value? tribool(false)
+ :tribool(indeterminate);
+}
+
+/**
+ * \brief Computes the logical conjuction of two tribools
+ *
+ * \returns the result of logically ANDing the two tribool values,
+ * according to the following table:
+ * <table border=1>
+ * <tr>
+ * <th><center><code>&amp;&amp;</code></center></th>
+ * <th><center>false</center></th>
+ * <th><center>true</center></th>
+ * <th><center>indeterminate</center></th>
+ * </tr>
+ * <tr>
+ * <th><center>false</center></th>
+ * <td><center>false</center></td>
+ * <td><center>false</center></td>
+ * <td><center>false</center></td>
+ * </tr>
+ * <tr>
+ * <th><center>true</center></th>
+ * <td><center>false</center></td>
+ * <td><center>true</center></td>
+ * <td><center>indeterminate</center></td>
+ * </tr>
+ * <tr>
+ * <th><center>indeterminate</center></th>
+ * <td><center>false</center></td>
+ * <td><center>indeterminate</center></td>
+ * <td><center>indeterminate</center></td>
+ * </tr>
+ * </table>
+ * \throws nothrow
+ */
+inline tribool operator&&(tribool x, tribool y)
+{
+ if (static_cast<bool>(!x) || static_cast<bool>(!y))
+ return false;
+ else if (static_cast<bool>(x) && static_cast<bool>(y))
+ return true;
+ else
+ return indeterminate;
+}
+
+/**
+ * \overload
+ */
+inline tribool operator&&(tribool x, bool y)
+{ return y? x : tribool(false); }
+
+/**
+ * \overload
+ */
+inline tribool operator&&(bool x, tribool y)
+{ return x? y : tribool(false); }
+
+/**
+ * \overload
+ */
+inline tribool operator&&(indeterminate_keyword_t, tribool x)
+{ return !x? tribool(false) : tribool(indeterminate); }
+
+/**
+ * \overload
+ */
+inline tribool operator&&(tribool x, indeterminate_keyword_t)
+{ return !x? tribool(false) : tribool(indeterminate); }
+
+/**
+ * \brief Computes the logical disjunction of two tribools
+ *
+ * \returns the result of logically ORing the two tribool values,
+ * according to the following table:
+ * <table border=1>
+ * <tr>
+ * <th><center><code>||</code></center></th>
+ * <th><center>false</center></th>
+ * <th><center>true</center></th>
+ * <th><center>indeterminate</center></th>
+ * </tr>
+ * <tr>
+ * <th><center>false</center></th>
+ * <td><center>false</center></td>
+ * <td><center>true</center></td>
+ * <td><center>indeterminate</center></td>
+ * </tr>
+ * <tr>
+ * <th><center>true</center></th>
+ * <td><center>true</center></td>
+ * <td><center>true</center></td>
+ * <td><center>true</center></td>
+ * </tr>
+ * <tr>
+ * <th><center>indeterminate</center></th>
+ * <td><center>indeterminate</center></td>
+ * <td><center>true</center></td>
+ * <td><center>indeterminate</center></td>
+ * </tr>
+ * </table>
+ * \throws nothrow
+ */
+inline tribool operator||(tribool x, tribool y)
+{
+ if (static_cast<bool>(!x) && static_cast<bool>(!y))
+ return false;
+ else if (static_cast<bool>(x) || static_cast<bool>(y))
+ return true;
+ else
+ return indeterminate;
+}
+
+/**
+ * \overload
+ */
+inline tribool operator||(tribool x, bool y)
+{ return y? tribool(true) : x; }
+
+/**
+ * \overload
+ */
+inline tribool operator||(bool x, tribool y)
+{ return x? tribool(true) : y; }
+
+/**
+ * \overload
+ */
+inline tribool operator||(indeterminate_keyword_t, tribool x)
+{ return x? tribool(true) : tribool(indeterminate); }
+
+/**
+ * \overload
+ */
+inline tribool operator||(tribool x, indeterminate_keyword_t)
+{ return x? tribool(true) : tribool(indeterminate); }
+//@}
+
+/**
+ * \brief Compare tribools for equality
+ *
+ * \returns the result of comparing two tribool values, according to
+ * the following table:
+ * <table border=1>
+ * <tr>
+ * <th><center><code>==</code></center></th>
+ * <th><center>false</center></th>
+ * <th><center>true</center></th>
+ * <th><center>indeterminate</center></th>
+ * </tr>
+ * <tr>
+ * <th><center>false</center></th>
+ * <td><center>true</center></td>
+ * <td><center>false</center></td>
+ * <td><center>indeterminate</center></td>
+ * </tr>
+ * <tr>
+ * <th><center>true</center></th>
+ * <td><center>false</center></td>
+ * <td><center>true</center></td>
+ * <td><center>indeterminate</center></td>
+ * </tr>
+ * <tr>
+ * <th><center>indeterminate</center></th>
+ * <td><center>indeterminate</center></td>
+ * <td><center>indeterminate</center></td>
+ * <td><center>indeterminate</center></td>
+ * </tr>
+ * </table>
+ * \throws nothrow
+ */
+inline tribool operator==(tribool x, tribool y)
+{
+ if (indeterminate(x) || indeterminate(y))
+ return indeterminate;
+ else
+ return x && y || !x && !y;
+}
+
+/**
+ * \overload
+ */
+inline tribool operator==(tribool x, bool y) { return x == tribool(y); }
+
+/**
+ * \overload
+ */
+inline tribool operator==(bool x, tribool y) { return tribool(x) == y; }
+
+/**
+ * \overload
+ */
+inline tribool operator==(indeterminate_keyword_t, tribool x)
+{ return tribool(indeterminate) == x; }
+
+/**
+ * \overload
+ */
+inline tribool operator==(tribool x, indeterminate_keyword_t)
+{ return tribool(indeterminate) == x; }
+
+/**
+ * \brief Compare tribools for inequality
+ *
+ * \returns the result of comparing two tribool values for inequality,
+ * according to the following table:
+ * <table border=1>
+ * <tr>
+ * <th><center><code>!=</code></center></th>
+ * <th><center>false</center></th>
+ * <th><center>true</center></th>
+ * <th><center>indeterminate</center></th>
+ * </tr>
+ * <tr>
+ * <th><center>false</center></th>
+ * <td><center>false</center></td>
+ * <td><center>true</center></td>
+ * <td><center>indeterminate</center></td>
+ * </tr>
+ * <tr>
+ * <th><center>true</center></th>
+ * <td><center>true</center></td>
+ * <td><center>false</center></td>
+ * <td><center>indeterminate</center></td>
+ * </tr>
+ * <tr>
+ * <th><center>indeterminate</center></th>
+ * <td><center>indeterminate</center></td>
+ * <td><center>indeterminate</center></td>
+ * <td><center>indeterminate</center></td>
+ * </tr>
+ * </table>
+ * \throws nothrow
+ */
+inline tribool operator!=(tribool x, tribool y)
+{
+ if (indeterminate(x) || indeterminate(y))
+ return indeterminate;
+ else
+ return !(x && y || !x && !y);
+}
+
+/**
+ * \overload
+ */
+inline tribool operator!=(tribool x, bool y) { return x != tribool(y); }
+
+/**
+ * \overload
+ */
+inline tribool operator!=(bool x, tribool y) { return tribool(x) != y; }
+
+/**
+ * \overload
+ */
+inline tribool operator!=(indeterminate_keyword_t, tribool x)
+{ return tribool(indeterminate) != x; }
+
+/**
+ * \overload
+ */
+inline tribool operator!=(tribool x, indeterminate_keyword_t)
+{ return x != tribool(indeterminate); }
+
+} } // end namespace boost::logic
+
+// Pull tribool and indeterminate into namespace "boost"
+namespace boost {
+ using logic::tribool;
+ using logic::indeterminate;
+}
+
+/**
+ * \brief Declare a new name for the third state of a tribool
+ *
+ * Use this macro to declare a new name for the third state of a
+ * tribool. This state can have any number of new names (in addition
+ * to \c indeterminate), all of which will be equivalent. The new name will be
+ * placed in the namespace in which the macro is expanded.
+ *
+ * Example:
+ * BOOST_TRIBOOL_THIRD_STATE(true_or_false)
+ *
+ * tribool x(true_or_false);
+ * // potentially set x
+ * if (true_or_false(x)) {
+ * // don't know what x is
+ * }
+ */
+#define BOOST_TRIBOOL_THIRD_STATE(Name) \
+inline bool \
+Name(boost::logic::tribool x, \
+ boost::logic::detail::indeterminate_t dummy = \
+ boost::logic::detail::indeterminate_t()) \
+{ return x.value == boost::logic::tribool::indeterminate_value; }
+
+#endif // BOOST_LOGIC_TRIBOOL_HPP
+
diff --git a/boost/boost/logic/tribool_fwd.hpp b/boost/boost/logic/tribool_fwd.hpp
new file mode 100644
index 00000000000..2cdd91bb338
--- /dev/null
+++ b/boost/boost/logic/tribool_fwd.hpp
@@ -0,0 +1,15 @@
+// Three-state boolean logic library
+
+// Copyright Douglas Gregor 2002-2004. Use, modification and
+// distribution is 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)
+
+
+// For more information, see http://www.boost.org
+#ifndef BOOST_LOGIC_TRIBOOL_FWD_HPP
+#define BOOST_LOGIC_TRIBOOL_FWD_HPP
+
+namespace boost { namespace logic { class tribool; } }
+
+#endif // BOOST_LOGIC_TRIBOOL_FWD_HPP
diff --git a/boost/boost/logic/tribool_io.hpp b/boost/boost/logic/tribool_io.hpp
new file mode 100644
index 00000000000..3a05927a342
--- /dev/null
+++ b/boost/boost/logic/tribool_io.hpp
@@ -0,0 +1,348 @@
+// Three-state boolean logic library
+
+// Copyright Douglas Gregor 2002-2004. Use, modification and
+// distribution is 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)
+#ifndef BOOST_LOGIC_TRIBOOL_IO_HPP
+#define BOOST_LOGIC_TRIBOOL_IO_HPP
+
+#include <boost/logic/tribool.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/noncopyable.hpp>
+
+#if BOOST_WORKAROUND(_MSC_VER, >= 1200)
+# pragma once
+#endif
+
+#ifndef BOOST_NO_STD_LOCALE
+# include <locale>
+#endif
+
+#include <string>
+#include <iostream>
+
+namespace boost { namespace logic {
+
+#ifdef BOOST_NO_STD_LOCALE
+
+/**
+ * \brief Returns a string containing the default name for the \c
+ * false value of a tribool with the given character type T.
+ *
+ * This function only exists when the C++ standard library
+ * implementation does not support locales.
+ */
+template<typename T> std::basic_string<T> default_false_name();
+
+/**
+ * \brief Returns the character string "false".
+ *
+ * This function only exists when the C++ standard library
+ * implementation does not support locales.
+ */
+template<>
+inline std::basic_string<char> default_false_name<char>()
+{ return "false"; }
+
+# ifndef BOOST_NO_WCHAR_T
+/**
+ * \brief Returns the wide character string L"false".
+ *
+ * This function only exists when the C++ standard library
+ * implementation does not support locales.
+ */
+template<>
+inline std::basic_string<wchar_t> default_false_name<wchar_t>()
+{ return L"false"; }
+# endif
+
+/**
+ * \brief Returns a string containing the default name for the \c true
+ * value of a tribool with the given character type T.
+ *
+ * This function only exists when the C++ standard library
+ * implementation does not support locales.
+ */
+template<typename T> std::basic_string<T> default_true_name();
+
+/**
+ * \brief Returns the character string "true".
+ *
+ * This function only exists when the C++ standard library
+ * implementation does not support locales.
+ */
+template<>
+inline std::basic_string<char> default_true_name<char>()
+{ return "true"; }
+
+# ifndef BOOST_NO_WCHAR_T
+/**
+ * \brief Returns the wide character string L"true".
+ *
+ * This function only exists * when the C++ standard library
+ * implementation does not support * locales.
+ */
+template<>
+inline std::basic_string<wchar_t> default_true_name<wchar_t>()
+{ return L"true"; }
+# endif
+#endif
+
+/**
+ * \brief Returns a string containing the default name for the indeterminate
+ * value of a tribool with the given character type T.
+ *
+ * This routine is used by the input and output streaming operators
+ * for tribool when there is no locale support or the stream's locale
+ * does not contain the indeterminate_name facet.
+ */
+template<typename T> std::basic_string<T> get_default_indeterminate_name();
+
+/// Returns the character string "indeterminate".
+template<>
+inline std::basic_string<char> get_default_indeterminate_name<char>()
+{ return "indeterminate"; }
+
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+// VC++ 6.0 chokes on the specialization below, so we're stuck without
+// wchar_t support. What a pain. TODO: it might just need a the template
+// parameter as function parameter...
+#else
+# ifndef BOOST_NO_WCHAR_T
+/// Returns the wide character string L"indeterminate".
+template<>
+inline std::basic_string<wchar_t> get_default_indeterminate_name<wchar_t>()
+{ return L"indeterminate"; }
+# endif
+#endif
+
+// http://www.cantrip.org/locale.html
+
+#ifndef BOOST_NO_STD_LOCALE
+/**
+ * \brief A locale facet specifying the name of the indeterminate
+ * value of a tribool.
+ *
+ * The facet is used to perform I/O on tribool values when \c
+ * std::boolalpha has been specified. This class template is only
+ * available if the C++ standard library implementation supports
+ * locales.
+ */
+template<typename CharT>
+class indeterminate_name : public std::locale::facet, private boost::noncopyable
+{
+public:
+ typedef CharT char_type;
+ typedef std::basic_string<CharT> string_type;
+
+ /// Construct the facet with the default name
+ indeterminate_name() : name_(get_default_indeterminate_name<CharT>()) {}
+
+ /// Construct the facet with the given name for the indeterminate value
+ explicit indeterminate_name(const string_type& name) : name_(name) {}
+
+ /// Returns the name for the indeterminate value
+ string_type name() const { return name_; }
+
+ /// Uniquily identifies this facet with the locale.
+ static std::locale::id id;
+
+private:
+ string_type name_;
+};
+
+template<typename CharT> std::locale::id indeterminate_name<CharT>::id;
+#endif
+
+/**
+ * \brief Writes the value of a tribool to a stream.
+ *
+ * When the value of @p x is either \c true or \c false, this routine
+ * is semantically equivalent to:
+ * \code out << static_cast<bool>(x); \endcode
+ *
+ * When @p x has an indeterminate value, it outputs either the integer
+ * value 2 (if <tt>(out.flags() & std::ios_base::boolalpha) == 0</tt>)
+ * or the name of the indeterminate value. The name of the
+ * indeterminate value comes from the indeterminate_name facet (if it
+ * is defined in the output stream's locale), or from the
+ * get_default_indeterminate_name function (if it is not defined in the
+ * locale or if the C++ standard library implementation does not
+ * support locales).
+ *
+ * \returns @p out
+ */
+template<typename CharT, typename Traits>
+inline std::basic_ostream<CharT, Traits>&
+operator<<(std::basic_ostream<CharT, Traits>& out, tribool x)
+{
+ if (!indeterminate(x)) {
+ out << static_cast<bool>(x);
+ } else {
+ typename std::basic_ostream<CharT, Traits>::sentry cerberus(out);
+ if (cerberus) {
+ if (out.flags() & std::ios_base::boolalpha) {
+#ifndef BOOST_NO_STD_LOCALE
+ if (BOOST_HAS_FACET(indeterminate_name<CharT>, out.getloc())) {
+ const indeterminate_name<CharT>& facet =
+ BOOST_USE_FACET(indeterminate_name<CharT>, out.getloc());
+ out << facet.name();
+ } else {
+ out << get_default_indeterminate_name<CharT>();
+ }
+#else
+ out << get_default_indeterminate_name<CharT>();
+#endif
+ }
+ else
+ out << 2;
+ }
+ }
+ return out;
+}
+
+/**
+ * \brief Writes the indeterminate tribool value to a stream.
+ *
+ * This routine outputs either the integer
+ * value 2 (if <tt>(out.flags() & std::ios_base::boolalpha) == 0</tt>)
+ * or the name of the indeterminate value. The name of the
+ * indeterminate value comes from the indeterminate_name facet (if it
+ * is defined in the output stream's locale), or from the
+ * get_default_indeterminate_name function (if it is not defined in the
+ * locale or if the C++ standard library implementation does not
+ * support locales).
+ *
+ * \returns @p out
+ */
+template<typename CharT, typename Traits>
+inline std::basic_ostream<CharT, Traits>&
+operator<<(std::basic_ostream<CharT, Traits>& out,
+ bool (*)(tribool, detail::indeterminate_t))
+{ return out << tribool(indeterminate); }
+
+/**
+ * \brief Reads a tribool value from a stream.
+ *
+ * When <tt>(out.flags() & std::ios_base::boolalpha) == 0</tt>, this
+ * function reads a \c long value from the input stream @p in and
+ * converts that value to a tribool. If that value is 0, @p x becomes
+ * \c false; if it is 1, @p x becomes \c true; if it is 2, @p becomes
+ * \c indetermine; otherwise, the operation fails (and the fail bit is
+ * set on the input stream @p in).
+ *
+ * When <tt>(out.flags() & std::ios_base::boolalpha) != 0</tt>, this
+ * function first determines the names of the false, true, and
+ * indeterminate values. The false and true names are extracted from
+ * the \c std::numpunct facet of the input stream's locale (if the C++
+ * standard library implementation supports locales), or from the \c
+ * default_false_name and \c default_true_name functions (if there is
+ * no locale support). The indeterminate name is extracted from the
+ * appropriate \c indeterminate_name facet (if it is available in the
+ * input stream's locale), or from the \c get_default_indeterminate_name
+ * function (if the C++ standard library implementation does not
+ * support locales, or the \c indeterminate_name facet is not
+ * specified for this locale object). The input is then matched to
+ * each of these names, and the tribool @p x is assigned the value
+ * corresponding to the longest name that matched. If no name is
+ * matched or all names are empty, the operation fails (and the fail
+ * bit is set on the input stream @p in).
+ *
+ * \returns @p in
+ */
+template<typename CharT, typename Traits>
+inline std::basic_istream<CharT, Traits>&
+operator>>(std::basic_istream<CharT, Traits>& in, tribool& x)
+{
+ if (in.flags() & std::ios_base::boolalpha) {
+ typename std::basic_istream<CharT, Traits>::sentry cerberus(in);
+ if (cerberus) {
+ typedef std::basic_string<CharT> string_type;
+
+#ifndef BOOST_NO_STD_LOCALE
+ const std::numpunct<CharT>& numpunct_facet =
+ BOOST_USE_FACET(std::numpunct<CharT>, in.getloc());
+
+ string_type falsename = numpunct_facet.falsename();
+ string_type truename = numpunct_facet.truename();
+
+ string_type othername;
+ if (BOOST_HAS_FACET(indeterminate_name<CharT>, in.getloc())) {
+ othername =
+ BOOST_USE_FACET(indeterminate_name<CharT>, in.getloc()).name();
+ } else {
+ othername = get_default_indeterminate_name<CharT>();
+ }
+#else
+ string_type falsename = default_false_name<CharT>();
+ string_type truename = default_true_name<CharT>();
+ string_type othername = get_default_indeterminate_name<CharT>();
+#endif
+
+ typename string_type::size_type pos = 0;
+ bool falsename_ok = true, truename_ok = true, othername_ok = true;
+
+ // Modeled after the code from Library DR 17
+ while (falsename_ok && pos < falsename.size()
+ || truename_ok && pos < truename.size()
+ || othername_ok && pos < othername.size()) {
+ typename Traits::int_type c = in.get();
+ if (c == Traits::eof())
+ return in;
+
+ bool matched = false;
+ if (falsename_ok && pos < falsename.size()) {
+ if (Traits::eq(Traits::to_char_type(c), falsename[pos]))
+ matched = true;
+ else
+ falsename_ok = false;
+ }
+
+ if (truename_ok && pos < truename.size()) {
+ if (Traits::eq(Traits::to_char_type(c), truename[pos]))
+ matched = true;
+ else
+ truename_ok = false;
+ }
+
+ if (othername_ok && pos < othername.size()) {
+ if (Traits::eq(Traits::to_char_type(c), othername[pos]))
+ matched = true;
+ else
+ othername_ok = false;
+ }
+
+ if (matched) { ++pos; }
+ if (pos > falsename.size()) falsename_ok = false;
+ if (pos > truename.size()) truename_ok = false;
+ if (pos > othername.size()) othername_ok = false;
+ }
+
+ if (pos == 0)
+ in.setstate(std::ios_base::failbit);
+ else {
+ if (falsename_ok) x = false;
+ else if (truename_ok) x = true;
+ else if (othername_ok) x = indeterminate;
+ else in.setstate(std::ios_base::failbit);
+ }
+ }
+ } else {
+ long value;
+ if (in >> value) {
+ switch (value) {
+ case 0: x = false; break;
+ case 1: x = true; break;
+ case 2: x = indeterminate; break;
+ default: in.setstate(std::ios_base::failbit); break;
+ }
+ }
+ }
+
+ return in;
+}
+
+} } // end namespace boost::logic
+
+#endif // BOOST_LOGIC_TRIBOOL_IO_HPP
diff --git a/boost/boost/math/common_factor.hpp b/boost/boost/math/common_factor.hpp
new file mode 100644
index 00000000000..21a71e49489
--- /dev/null
+++ b/boost/boost/math/common_factor.hpp
@@ -0,0 +1,16 @@
+// Boost common_factor.hpp header file -------------------------------------//
+
+// (C) Copyright Daryle Walker 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 for updates, documentation, and revision history.
+
+#ifndef BOOST_MATH_COMMON_FACTOR_HPP
+#define BOOST_MATH_COMMON_FACTOR_HPP
+
+#include <boost/math/common_factor_ct.hpp>
+#include <boost/math/common_factor_rt.hpp>
+
+#endif // BOOST_MATH_COMMON_FACTOR_HPP
diff --git a/boost/boost/math/common_factor_ct.hpp b/boost/boost/math/common_factor_ct.hpp
new file mode 100644
index 00000000000..63d2a56501a
--- /dev/null
+++ b/boost/boost/math/common_factor_ct.hpp
@@ -0,0 +1,188 @@
+// Boost common_factor_ct.hpp header file ----------------------------------//
+
+// (C) Copyright Daryle Walker and Stephen Cleary 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 for updates, documentation, and revision history.
+
+#ifndef BOOST_MATH_COMMON_FACTOR_CT_HPP
+#define BOOST_MATH_COMMON_FACTOR_CT_HPP
+
+#include <boost/math_fwd.hpp> // self include
+
+#include <boost/config.hpp> // for BOOST_STATIC_CONSTANT, etc.
+
+
+namespace boost
+{
+namespace math
+{
+
+
+// Implementation details --------------------------------------------------//
+
+namespace detail
+{
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ // Build GCD with Euclid's recursive algorithm
+ template < unsigned long Value1, unsigned long Value2 >
+ struct static_gcd_helper_t
+ {
+ private:
+ BOOST_STATIC_CONSTANT( unsigned long, new_value1 = Value2 );
+ BOOST_STATIC_CONSTANT( unsigned long, new_value2 = Value1 % Value2 );
+
+ #ifndef __BORLANDC__
+ #define BOOST_DETAIL_GCD_HELPER_VAL(Value) static_cast<unsigned long>(Value)
+ #else
+ typedef static_gcd_helper_t self_type;
+ #define BOOST_DETAIL_GCD_HELPER_VAL(Value) (self_type:: Value )
+ #endif
+
+ typedef static_gcd_helper_t< BOOST_DETAIL_GCD_HELPER_VAL(new_value1),
+ BOOST_DETAIL_GCD_HELPER_VAL(new_value2) > next_step_type;
+
+ #undef BOOST_DETAIL_GCD_HELPER_VAL
+
+ public:
+ BOOST_STATIC_CONSTANT( unsigned long, value = next_step_type::value );
+ };
+
+ // Non-recursive case
+ template < unsigned long Value1 >
+ struct static_gcd_helper_t< Value1, 0UL >
+ {
+ BOOST_STATIC_CONSTANT( unsigned long, value = Value1 );
+ };
+#else
+ // Use inner class template workaround from Peter Dimov
+ template < unsigned long Value1 >
+ struct static_gcd_helper2_t
+ {
+ template < unsigned long Value2 >
+ struct helper
+ {
+ BOOST_STATIC_CONSTANT( unsigned long, value
+ = static_gcd_helper2_t<Value2>::BOOST_NESTED_TEMPLATE
+ helper<Value1 % Value2>::value );
+ };
+
+ template < >
+ struct helper< 0UL >
+ {
+ BOOST_STATIC_CONSTANT( unsigned long, value = Value1 );
+ };
+ };
+
+ // Special case
+ template < >
+ struct static_gcd_helper2_t< 0UL >
+ {
+ template < unsigned long Value2 >
+ struct helper
+ {
+ BOOST_STATIC_CONSTANT( unsigned long, value = Value2 );
+ };
+ };
+
+ // Build the GCD from the above template(s)
+ template < unsigned long Value1, unsigned long Value2 >
+ struct static_gcd_helper_t
+ {
+ BOOST_STATIC_CONSTANT( unsigned long, value
+ = static_gcd_helper2_t<Value1>::BOOST_NESTED_TEMPLATE
+ helper<Value2>::value );
+ };
+#endif
+
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ // Build the LCM from the GCD
+ template < unsigned long Value1, unsigned long Value2 >
+ struct static_lcm_helper_t
+ {
+ typedef static_gcd_helper_t<Value1, Value2> gcd_type;
+
+ BOOST_STATIC_CONSTANT( unsigned long, value = Value1 / gcd_type::value
+ * Value2 );
+ };
+
+ // Special case for zero-GCD values
+ template < >
+ struct static_lcm_helper_t< 0UL, 0UL >
+ {
+ BOOST_STATIC_CONSTANT( unsigned long, value = 0UL );
+ };
+#else
+ // Adapt GCD's inner class template workaround for LCM
+ template < unsigned long Value1 >
+ struct static_lcm_helper2_t
+ {
+ template < unsigned long Value2 >
+ struct helper
+ {
+ typedef static_gcd_helper_t<Value1, Value2> gcd_type;
+
+ BOOST_STATIC_CONSTANT( unsigned long, value = Value1
+ / gcd_type::value * Value2 );
+ };
+
+ template < >
+ struct helper< 0UL >
+ {
+ BOOST_STATIC_CONSTANT( unsigned long, value = 0UL );
+ };
+ };
+
+ // Special case
+ template < >
+ struct static_lcm_helper2_t< 0UL >
+ {
+ template < unsigned long Value2 >
+ struct helper
+ {
+ BOOST_STATIC_CONSTANT( unsigned long, value = 0UL );
+ };
+ };
+
+ // Build the LCM from the above template(s)
+ template < unsigned long Value1, unsigned long Value2 >
+ struct static_lcm_helper_t
+ {
+ BOOST_STATIC_CONSTANT( unsigned long, value
+ = static_lcm_helper2_t<Value1>::BOOST_NESTED_TEMPLATE
+ helper<Value2>::value );
+ };
+#endif
+
+} // namespace detail
+
+
+// Compile-time greatest common divisor evaluator class declaration --------//
+
+template < unsigned long Value1, unsigned long Value2 >
+struct static_gcd
+{
+ BOOST_STATIC_CONSTANT( unsigned long, value
+ = (detail::static_gcd_helper_t<Value1, Value2>::value) );
+
+}; // boost::math::static_gcd
+
+
+// Compile-time least common multiple evaluator class declaration ----------//
+
+template < unsigned long Value1, unsigned long Value2 >
+struct static_lcm
+{
+ BOOST_STATIC_CONSTANT( unsigned long, value
+ = (detail::static_lcm_helper_t<Value1, Value2>::value) );
+
+}; // boost::math::static_lcm
+
+
+} // namespace math
+} // namespace boost
+
+
+#endif // BOOST_MATH_COMMON_FACTOR_CT_HPP
diff --git a/boost/boost/math/common_factor_rt.hpp b/boost/boost/math/common_factor_rt.hpp
new file mode 100644
index 00000000000..5b8cd45ea02
--- /dev/null
+++ b/boost/boost/math/common_factor_rt.hpp
@@ -0,0 +1,408 @@
+// Boost common_factor_rt.hpp header file ----------------------------------//
+
+// (C) Copyright Daryle Walker and Paul Moore 2001-2002. Permission to copy,
+// use, modify, sell and distribute this software is granted provided this
+// copyright notice appears in all copies. This software is provided "as is"
+// without express or implied warranty, and with no claim as to its suitability
+// for any purpose.
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#ifndef BOOST_MATH_COMMON_FACTOR_RT_HPP
+#define BOOST_MATH_COMMON_FACTOR_RT_HPP
+
+#include <boost/math_fwd.hpp> // self include
+
+#include <boost/config.hpp> // for BOOST_NESTED_TEMPLATE, etc.
+#include <boost/limits.hpp> // for std::numeric_limits
+
+
+namespace boost
+{
+namespace math
+{
+
+
+// Forward declarations for function templates -----------------------------//
+
+template < typename IntegerType >
+ IntegerType gcd( IntegerType const &a, IntegerType const &b );
+
+template < typename IntegerType >
+ IntegerType lcm( IntegerType const &a, IntegerType const &b );
+
+
+// Greatest common divisor evaluator class declaration ---------------------//
+
+template < typename IntegerType >
+class gcd_evaluator
+{
+public:
+ // Types
+ typedef IntegerType result_type, first_argument_type, second_argument_type;
+
+ // Function object interface
+ result_type operator ()( first_argument_type const &a,
+ second_argument_type const &b ) const;
+
+}; // boost::math::gcd_evaluator
+
+
+// Least common multiple evaluator class declaration -----------------------//
+
+template < typename IntegerType >
+class lcm_evaluator
+{
+public:
+ // Types
+ typedef IntegerType result_type, first_argument_type, second_argument_type;
+
+ // Function object interface
+ result_type operator ()( first_argument_type const &a,
+ second_argument_type const &b ) const;
+
+}; // boost::math::lcm_evaluator
+
+
+// Implementation details --------------------------------------------------//
+
+namespace detail
+{
+ // Greatest common divisor for rings (including unsigned integers)
+ template < typename RingType >
+ RingType
+ gcd_euclidean
+ (
+ RingType a,
+ RingType b
+ )
+ {
+ // Avoid repeated construction
+ #ifndef __BORLANDC__
+ RingType const zero = static_cast<RingType>( 0 );
+ #else
+ RingType zero = static_cast<RingType>( 0 );
+ #endif
+
+ // Reduce by GCD-remainder property [GCD(a,b) == GCD(b,a MOD b)]
+ while ( true )
+ {
+ if ( a == zero )
+ return b;
+ b %= a;
+
+ if ( b == zero )
+ return a;
+ a %= b;
+ }
+ }
+
+ // Greatest common divisor for (signed) integers
+ template < typename IntegerType >
+ inline
+ IntegerType
+ gcd_integer
+ (
+ IntegerType const & a,
+ IntegerType const & b
+ )
+ {
+ // Avoid repeated construction
+ IntegerType const zero = static_cast<IntegerType>( 0 );
+ IntegerType const result = gcd_euclidean( a, b );
+
+ return ( result < zero ) ? -result : result;
+ }
+
+ // Least common multiple for rings (including unsigned integers)
+ template < typename RingType >
+ inline
+ RingType
+ lcm_euclidean
+ (
+ RingType const & a,
+ RingType const & b
+ )
+ {
+ RingType const zero = static_cast<RingType>( 0 );
+ RingType const temp = gcd_euclidean( a, b );
+
+ return ( temp != zero ) ? ( a / temp * b ) : zero;
+ }
+
+ // Least common multiple for (signed) integers
+ template < typename IntegerType >
+ inline
+ IntegerType
+ lcm_integer
+ (
+ IntegerType const & a,
+ IntegerType const & b
+ )
+ {
+ // Avoid repeated construction
+ IntegerType const zero = static_cast<IntegerType>( 0 );
+ IntegerType const result = lcm_euclidean( a, b );
+
+ return ( result < zero ) ? -result : result;
+ }
+
+ // Function objects to find the best way of computing GCD or LCM
+#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ template < typename T, bool IsSpecialized, bool IsSigned >
+ struct gcd_optimal_evaluator_helper_t
+ {
+ T operator ()( T const &a, T const &b )
+ {
+ return gcd_euclidean( a, b );
+ }
+ };
+
+ template < typename T >
+ struct gcd_optimal_evaluator_helper_t< T, true, true >
+ {
+ T operator ()( T const &a, T const &b )
+ {
+ return gcd_integer( a, b );
+ }
+ };
+#else
+ template < bool IsSpecialized, bool IsSigned >
+ struct gcd_optimal_evaluator_helper2_t
+ {
+ template < typename T >
+ struct helper
+ {
+ T operator ()( T const &a, T const &b )
+ {
+ return gcd_euclidean( a, b );
+ }
+ };
+ };
+
+ template < >
+ struct gcd_optimal_evaluator_helper2_t< true, true >
+ {
+ template < typename T >
+ struct helper
+ {
+ T operator ()( T const &a, T const &b )
+ {
+ return gcd_integer( a, b );
+ }
+ };
+ };
+
+ template < typename T, bool IsSpecialized, bool IsSigned >
+ struct gcd_optimal_evaluator_helper_t
+ : gcd_optimal_evaluator_helper2_t<IsSpecialized, IsSigned>
+ ::BOOST_NESTED_TEMPLATE helper<T>
+ {
+ };
+#endif
+
+ template < typename T >
+ struct gcd_optimal_evaluator
+ {
+ T operator ()( T const &a, T const &b )
+ {
+ typedef ::std::numeric_limits<T> limits_type;
+
+ typedef gcd_optimal_evaluator_helper_t<T,
+ limits_type::is_specialized, limits_type::is_signed> helper_type;
+
+ helper_type solver;
+
+ return solver( a, b );
+ }
+ };
+#else // BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+ template < typename T >
+ struct gcd_optimal_evaluator
+ {
+ T operator ()( T const &a, T const &b )
+ {
+ return gcd_integer( a, b );
+ }
+ };
+#endif
+
+#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ template < typename T, bool IsSpecialized, bool IsSigned >
+ struct lcm_optimal_evaluator_helper_t
+ {
+ T operator ()( T const &a, T const &b )
+ {
+ return lcm_euclidean( a, b );
+ }
+ };
+
+ template < typename T >
+ struct lcm_optimal_evaluator_helper_t< T, true, true >
+ {
+ T operator ()( T const &a, T const &b )
+ {
+ return lcm_integer( a, b );
+ }
+ };
+#else
+ template < bool IsSpecialized, bool IsSigned >
+ struct lcm_optimal_evaluator_helper2_t
+ {
+ template < typename T >
+ struct helper
+ {
+ T operator ()( T const &a, T const &b )
+ {
+ return lcm_euclidean( a, b );
+ }
+ };
+ };
+
+ template < >
+ struct lcm_optimal_evaluator_helper2_t< true, true >
+ {
+ template < typename T >
+ struct helper
+ {
+ T operator ()( T const &a, T const &b )
+ {
+ return lcm_integer( a, b );
+ }
+ };
+ };
+
+ template < typename T, bool IsSpecialized, bool IsSigned >
+ struct lcm_optimal_evaluator_helper_t
+ : lcm_optimal_evaluator_helper2_t<IsSpecialized, IsSigned>
+ ::BOOST_NESTED_TEMPLATE helper<T>
+ {
+ };
+#endif
+
+ template < typename T >
+ struct lcm_optimal_evaluator
+ {
+ T operator ()( T const &a, T const &b )
+ {
+ typedef ::std::numeric_limits<T> limits_type;
+
+ typedef lcm_optimal_evaluator_helper_t<T,
+ limits_type::is_specialized, limits_type::is_signed> helper_type;
+
+ helper_type solver;
+
+ return solver( a, b );
+ }
+ };
+#else // BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+ template < typename T >
+ struct lcm_optimal_evaluator
+ {
+ T operator ()( T const &a, T const &b )
+ {
+ return lcm_integer( a, b );
+ }
+ };
+#endif
+
+ // Functions to find the GCD or LCM in the best way
+ template < typename T >
+ inline
+ T
+ gcd_optimal
+ (
+ T const & a,
+ T const & b
+ )
+ {
+ gcd_optimal_evaluator<T> solver;
+
+ return solver( a, b );
+ }
+
+ template < typename T >
+ inline
+ T
+ lcm_optimal
+ (
+ T const & a,
+ T const & b
+ )
+ {
+ lcm_optimal_evaluator<T> solver;
+
+ return solver( a, b );
+ }
+
+} // namespace detail
+
+
+// Greatest common divisor evaluator member function definition ------------//
+
+template < typename IntegerType >
+inline
+typename gcd_evaluator<IntegerType>::result_type
+gcd_evaluator<IntegerType>::operator ()
+(
+ first_argument_type const & a,
+ second_argument_type const & b
+) const
+{
+ return detail::gcd_optimal( a, b );
+}
+
+
+// Least common multiple evaluator member function definition --------------//
+
+template < typename IntegerType >
+inline
+typename lcm_evaluator<IntegerType>::result_type
+lcm_evaluator<IntegerType>::operator ()
+(
+ first_argument_type const & a,
+ second_argument_type const & b
+) const
+{
+ return detail::lcm_optimal( a, b );
+}
+
+
+// Greatest common divisor and least common multiple function definitions --//
+
+template < typename IntegerType >
+inline
+IntegerType
+gcd
+(
+ IntegerType const & a,
+ IntegerType const & b
+)
+{
+ gcd_evaluator<IntegerType> solver;
+
+ return solver( a, b );
+}
+
+template < typename IntegerType >
+inline
+IntegerType
+lcm
+(
+ IntegerType const & a,
+ IntegerType const & b
+)
+{
+ lcm_evaluator<IntegerType> solver;
+
+ return solver( a, b );
+}
+
+
+} // namespace math
+} // namespace boost
+
+
+#endif // BOOST_MATH_COMMON_FACTOR_RT_HPP
diff --git a/boost/boost/math/complex.hpp b/boost/boost/math/complex.hpp
new file mode 100644
index 00000000000..8d9145edf7f
--- /dev/null
+++ b/boost/boost/math/complex.hpp
@@ -0,0 +1,32 @@
+// (C) Copyright John Maddock 2005.
+// 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)
+
+#ifndef BOOST_MATH_COMPLEX_INCLUDED
+#define BOOST_MATH_COMPLEX_INCLUDED
+
+#ifndef BOOST_MATH_COMPLEX_ASIN_INCLUDED
+# include <boost/math/complex/asin.hpp>
+#endif
+#ifndef BOOST_MATH_COMPLEX_ASINH_INCLUDED
+# include <boost/math/complex/asinh.hpp>
+#endif
+#ifndef BOOST_MATH_COMPLEX_ACOS_INCLUDED
+# include <boost/math/complex/acos.hpp>
+#endif
+#ifndef BOOST_MATH_COMPLEX_ACOSH_INCLUDED
+# include <boost/math/complex/acosh.hpp>
+#endif
+#ifndef BOOST_MATH_COMPLEX_ATAN_INCLUDED
+# include <boost/math/complex/atan.hpp>
+#endif
+#ifndef BOOST_MATH_COMPLEX_ATANH_INCLUDED
+# include <boost/math/complex/atanh.hpp>
+#endif
+#ifndef BOOST_MATH_COMPLEX_FABS_INCLUDED
+# include <boost/math/complex/fabs.hpp>
+#endif
+
+
+#endif // BOOST_MATH_COMPLEX_INCLUDED
diff --git a/boost/boost/math/complex/acos.hpp b/boost/boost/math/complex/acos.hpp
new file mode 100644
index 00000000000..a023f41238e
--- /dev/null
+++ b/boost/boost/math/complex/acos.hpp
@@ -0,0 +1,235 @@
+// (C) Copyright John Maddock 2005.
+// 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_MATH_COMPLEX_ACOS_INCLUDED
+#define BOOST_MATH_COMPLEX_ACOS_INCLUDED
+
+#ifndef BOOST_MATH_COMPLEX_DETAILS_INCLUDED
+# include <boost/math/complex/details.hpp>
+#endif
+#ifndef BOOST_MATH_LOG1P_INCLUDED
+# include <boost/math/special_functions/log1p.hpp>
+#endif
+#include <boost/assert.hpp>
+
+#ifdef BOOST_NO_STDC_NAMESPACE
+namespace std{ using ::sqrt; using ::fabs; using ::acos; using ::asin; using ::atan; using ::atan2; }
+#endif
+
+namespace boost{ namespace math{
+
+template<class T>
+std::complex<T> acos(const std::complex<T>& z)
+{
+ //
+ // This implementation is a transcription of the pseudo-code in:
+ //
+ // "Implementing the Complex Arcsine and Arccosine Functions using Exception Handling."
+ // T E Hull, Thomas F Fairgrieve and Ping Tak Peter Tang.
+ // ACM Transactions on Mathematical Software, Vol 23, No 3, Sept 1997.
+ //
+
+ //
+ // These static constants should really be in a maths constants library:
+ //
+ static const T one = static_cast<T>(1);
+ //static const T two = static_cast<T>(2);
+ static const T half = static_cast<T>(0.5L);
+ static const T a_crossover = static_cast<T>(1.5L);
+ static const T b_crossover = static_cast<T>(0.6417L);
+ static const T s_pi = static_cast<T>(3.141592653589793238462643383279502884197L);
+ static const T half_pi = static_cast<T>(1.57079632679489661923132169163975144L);
+ static const T log_two = static_cast<T>(0.69314718055994530941723212145817657L);
+ static const T quarter_pi = static_cast<T>(0.78539816339744830961566084581987572L);
+
+ //
+ // Get real and imaginary parts, discard the signs as we can
+ // figure out the sign of the result later:
+ //
+ T x = std::fabs(z.real());
+ T y = std::fabs(z.imag());
+
+ T real, imag; // these hold our result
+
+ //
+ // Handle special cases specified by the C99 standard,
+ // many of these special cases aren't really needed here,
+ // but doing it this way prevents overflow/underflow arithmetic
+ // in the main body of the logic, which may trip up some machines:
+ //
+ if(std::numeric_limits<T>::has_infinity && (x == std::numeric_limits<T>::infinity()))
+ {
+ if(y == std::numeric_limits<T>::infinity())
+ {
+ real = quarter_pi;
+ imag = std::numeric_limits<T>::infinity();
+ }
+ else if(detail::test_is_nan(y))
+ {
+ return std::complex<T>(y, -std::numeric_limits<T>::infinity());
+ }
+ else
+ {
+ // y is not infinity or nan:
+ real = 0;
+ imag = std::numeric_limits<T>::infinity();
+ }
+ }
+ else if(detail::test_is_nan(x))
+ {
+ if(y == std::numeric_limits<T>::infinity())
+ return std::complex<T>(x, (z.imag() < 0) ? std::numeric_limits<T>::infinity() : -std::numeric_limits<T>::infinity());
+ return std::complex<T>(x, x);
+ }
+ else if(std::numeric_limits<T>::has_infinity && (y == std::numeric_limits<T>::infinity()))
+ {
+ real = half_pi;
+ imag = std::numeric_limits<T>::infinity();
+ }
+ else if(detail::test_is_nan(y))
+ {
+ return std::complex<T>((x == 0) ? half_pi : y, y);
+ }
+ else
+ {
+ //
+ // What follows is the regular Hull et al code,
+ // begin with the special case for real numbers:
+ //
+ if((y == 0) && (x <= one))
+ return std::complex<T>((x == 0) ? half_pi : std::acos(z.real()));
+ //
+ // Figure out if our input is within the "safe area" identified by Hull et al.
+ // This would be more efficient with portable floating point exception handling;
+ // fortunately the quantities M and u identified by Hull et al (figure 3),
+ // match with the max and min methods of numeric_limits<T>.
+ //
+ T safe_max = detail::safe_max(static_cast<T>(8));
+ T safe_min = detail::safe_min(static_cast<T>(4));
+
+ T xp1 = one + x;
+ T xm1 = x - one;
+
+ if((x < safe_max) && (x > safe_min) && (y < safe_max) && (y > safe_min))
+ {
+ T yy = y * y;
+ T r = std::sqrt(xp1*xp1 + yy);
+ T s = std::sqrt(xm1*xm1 + yy);
+ T a = half * (r + s);
+ T b = x / a;
+
+ if(b <= b_crossover)
+ {
+ real = std::acos(b);
+ }
+ else
+ {
+ T apx = a + x;
+ if(x <= one)
+ {
+ real = std::atan(std::sqrt(half * apx * (yy /(r + xp1) + (s-xm1)))/x);
+ }
+ else
+ {
+ real = std::atan((y * std::sqrt(half * (apx/(r + xp1) + apx/(s+xm1))))/x);
+ }
+ }
+
+ if(a <= a_crossover)
+ {
+ T am1;
+ if(x < one)
+ {
+ am1 = half * (yy/(r + xp1) + yy/(s - xm1));
+ }
+ else
+ {
+ am1 = half * (yy/(r + xp1) + (s + xm1));
+ }
+ imag = boost::math::log1p(am1 + std::sqrt(am1 * (a + one)));
+ }
+ else
+ {
+ imag = std::log(a + std::sqrt(a*a - one));
+ }
+ }
+ else
+ {
+ //
+ // This is the Hull et al exception handling code from Fig 6 of their paper:
+ //
+ if(y <= (std::numeric_limits<T>::epsilon() * std::fabs(xm1)))
+ {
+ if(x < one)
+ {
+ real = std::acos(x);
+ imag = y / std::sqrt(xp1*(one-x));
+ }
+ else
+ {
+ real = 0;
+ if(((std::numeric_limits<T>::max)() / xp1) > xm1)
+ {
+ // xp1 * xm1 won't overflow:
+ imag = boost::math::log1p(xm1 + std::sqrt(xp1*xm1));
+ }
+ else
+ {
+ imag = log_two + std::log(x);
+ }
+ }
+ }
+ else if(y <= safe_min)
+ {
+ // There is an assumption in Hull et al's analysis that
+ // if we get here then x == 1. This is true for all "good"
+ // machines where :
+ //
+ // E^2 > 8*sqrt(u); with:
+ //
+ // E = std::numeric_limits<T>::epsilon()
+ // u = (std::numeric_limits<T>::min)()
+ //
+ // Hull et al provide alternative code for "bad" machines
+ // but we have no way to test that here, so for now just assert
+ // on the assumption:
+ //
+ BOOST_ASSERT(x == 1);
+ real = std::sqrt(y);
+ imag = std::sqrt(y);
+ }
+ else if(std::numeric_limits<T>::epsilon() * y - one >= x)
+ {
+ real = half_pi;
+ imag = log_two + std::log(y);
+ }
+ else if(x > one)
+ {
+ real = std::atan(y/x);
+ T xoy = x/y;
+ imag = log_two + std::log(y) + half * boost::math::log1p(xoy*xoy);
+ }
+ else
+ {
+ real = half_pi;
+ T a = std::sqrt(one + y*y);
+ imag = half * boost::math::log1p(static_cast<T>(2)*y*(y+a));
+ }
+ }
+ }
+
+ //
+ // Finish off by working out the sign of the result:
+ //
+ if(z.real() < 0)
+ real = s_pi - real;
+ if(z.imag() > 0)
+ imag = -imag;
+
+ return std::complex<T>(real, imag);
+}
+
+} } // namespaces
+
+#endif // BOOST_MATH_COMPLEX_ACOS_INCLUDED
diff --git a/boost/boost/math/complex/acosh.hpp b/boost/boost/math/complex/acosh.hpp
new file mode 100644
index 00000000000..24ed1f12fce
--- /dev/null
+++ b/boost/boost/math/complex/acosh.hpp
@@ -0,0 +1,34 @@
+// (C) Copyright John Maddock 2005.
+// 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)
+
+#ifndef BOOST_MATH_COMPLEX_ACOSH_INCLUDED
+#define BOOST_MATH_COMPLEX_ACOSH_INCLUDED
+
+#ifndef BOOST_MATH_COMPLEX_DETAILS_INCLUDED
+# include <boost/math/complex/details.hpp>
+#endif
+#ifndef BOOST_MATH_COMPLEX_ATANH_INCLUDED
+# include <boost/math/complex/acos.hpp>
+#endif
+
+namespace boost{ namespace math{
+
+template<class T>
+inline std::complex<T> acosh(const std::complex<T>& z)
+{
+ //
+ // We use the relation acosh(z) = +-i acos(z)
+ // Choosing the sign of multiplier to give real(acosh(z)) >= 0
+ // as well as compatibility with C99.
+ //
+ std::complex<T> result = boost::math::acos(z);
+ if(!detail::test_is_nan(result.imag()) && result.imag() <= 0)
+ return detail::mult_i(result);
+ return detail::mult_minus_i(result);
+}
+
+} } // namespaces
+
+#endif // BOOST_MATH_COMPLEX_ACOSH_INCLUDED
diff --git a/boost/boost/math/complex/asin.hpp b/boost/boost/math/complex/asin.hpp
new file mode 100644
index 00000000000..57c1dfc2aba
--- /dev/null
+++ b/boost/boost/math/complex/asin.hpp
@@ -0,0 +1,245 @@
+// (C) Copyright John Maddock 2005.
+// 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_MATH_COMPLEX_ASIN_INCLUDED
+#define BOOST_MATH_COMPLEX_ASIN_INCLUDED
+
+#ifndef BOOST_MATH_COMPLEX_DETAILS_INCLUDED
+# include <boost/math/complex/details.hpp>
+#endif
+#ifndef BOOST_MATH_LOG1P_INCLUDED
+# include <boost/math/special_functions/log1p.hpp>
+#endif
+#include <boost/assert.hpp>
+
+#ifdef BOOST_NO_STDC_NAMESPACE
+namespace std{ using ::sqrt; using ::fabs; using ::acos; using ::asin; using ::atan; using ::atan2; }
+#endif
+
+namespace boost{ namespace math{
+
+template<class T>
+inline std::complex<T> asin(const std::complex<T>& z)
+{
+ //
+ // This implementation is a transcription of the pseudo-code in:
+ //
+ // "Implementing the complex Arcsine and Arccosine Functions using Exception Handling."
+ // T E Hull, Thomas F Fairgrieve and Ping Tak Peter Tang.
+ // ACM Transactions on Mathematical Software, Vol 23, No 3, Sept 1997.
+ //
+
+ //
+ // These static constants should really be in a maths constants library:
+ //
+ static const T one = static_cast<T>(1);
+ //static const T two = static_cast<T>(2);
+ static const T half = static_cast<T>(0.5L);
+ static const T a_crossover = static_cast<T>(1.5L);
+ static const T b_crossover = static_cast<T>(0.6417L);
+ //static const T pi = static_cast<T>(3.141592653589793238462643383279502884197L);
+ static const T half_pi = static_cast<T>(1.57079632679489661923132169163975144L);
+ static const T log_two = static_cast<T>(0.69314718055994530941723212145817657L);
+ static const T quarter_pi = static_cast<T>(0.78539816339744830961566084581987572L);
+
+ //
+ // Get real and imaginary parts, discard the signs as we can
+ // figure out the sign of the result later:
+ //
+ T x = std::fabs(z.real());
+ T y = std::fabs(z.imag());
+ T real, imag; // our results
+
+ //
+ // Begin by handling the special cases for infinities and nan's
+ // specified in C99, most of this is handled by the regular logic
+ // below, but handling it as a special case prevents overflow/underflow
+ // arithmetic which may trip up some machines:
+ //
+ if(detail::test_is_nan(x))
+ {
+ if(detail::test_is_nan(y))
+ return std::complex<T>(x, x);
+ if(std::numeric_limits<T>::has_infinity && (y == std::numeric_limits<T>::infinity()))
+ {
+ real = x;
+ imag = std::numeric_limits<T>::infinity();
+ }
+ else
+ return std::complex<T>(x, x);
+ }
+ else if(detail::test_is_nan(y))
+ {
+ if(x == 0)
+ {
+ real = 0;
+ imag = y;
+ }
+ else if(std::numeric_limits<T>::has_infinity && (x == std::numeric_limits<T>::infinity()))
+ {
+ real = y;
+ imag = std::numeric_limits<T>::infinity();
+ }
+ else
+ return std::complex<T>(y, y);
+ }
+ else if(std::numeric_limits<T>::has_infinity && (x == std::numeric_limits<T>::infinity()))
+ {
+ if(y == std::numeric_limits<T>::infinity())
+ {
+ real = quarter_pi;
+ imag = std::numeric_limits<T>::infinity();
+ }
+ else
+ {
+ real = half_pi;
+ imag = std::numeric_limits<T>::infinity();
+ }
+ }
+ else if(std::numeric_limits<T>::has_infinity && (y == std::numeric_limits<T>::infinity()))
+ {
+ real = 0;
+ imag = std::numeric_limits<T>::infinity();
+ }
+ else
+ {
+ //
+ // special case for real numbers:
+ //
+ if((y == 0) && (x <= one))
+ return std::complex<T>(std::asin(z.real()));
+ //
+ // Figure out if our input is within the "safe area" identified by Hull et al.
+ // This would be more efficient with portable floating point exception handling;
+ // fortunately the quantities M and u identified by Hull et al (figure 3),
+ // match with the max and min methods of numeric_limits<T>.
+ //
+ T safe_max = detail::safe_max(static_cast<T>(8));
+ T safe_min = detail::safe_min(static_cast<T>(4));
+
+ T xp1 = one + x;
+ T xm1 = x - one;
+
+ if((x < safe_max) && (x > safe_min) && (y < safe_max) && (y > safe_min))
+ {
+ T yy = y * y;
+ T r = std::sqrt(xp1*xp1 + yy);
+ T s = std::sqrt(xm1*xm1 + yy);
+ T a = half * (r + s);
+ T b = x / a;
+
+ if(b <= b_crossover)
+ {
+ real = std::asin(b);
+ }
+ else
+ {
+ T apx = a + x;
+ if(x <= one)
+ {
+ real = std::atan(x/std::sqrt(half * apx * (yy /(r + xp1) + (s-xm1))));
+ }
+ else
+ {
+ real = std::atan(x/(y * std::sqrt(half * (apx/(r + xp1) + apx/(s+xm1)))));
+ }
+ }
+
+ if(a <= a_crossover)
+ {
+ T am1;
+ if(x < one)
+ {
+ am1 = half * (yy/(r + xp1) + yy/(s - xm1));
+ }
+ else
+ {
+ am1 = half * (yy/(r + xp1) + (s + xm1));
+ }
+ imag = boost::math::log1p(am1 + std::sqrt(am1 * (a + one)));
+ }
+ else
+ {
+ imag = std::log(a + std::sqrt(a*a - one));
+ }
+ }
+ else
+ {
+ //
+ // This is the Hull et al exception handling code from Fig 3 of their paper:
+ //
+ if(y <= (std::numeric_limits<T>::epsilon() * std::fabs(xm1)))
+ {
+ if(x < one)
+ {
+ real = std::asin(x);
+ imag = y / std::sqrt(xp1*xm1);
+ }
+ else
+ {
+ real = half_pi;
+ if(((std::numeric_limits<T>::max)() / xp1) > xm1)
+ {
+ // xp1 * xm1 won't overflow:
+ imag = boost::math::log1p(xm1 + std::sqrt(xp1*xm1));
+ }
+ else
+ {
+ imag = log_two + std::log(x);
+ }
+ }
+ }
+ else if(y <= safe_min)
+ {
+ // There is an assumption in Hull et al's analysis that
+ // if we get here then x == 1. This is true for all "good"
+ // machines where :
+ //
+ // E^2 > 8*sqrt(u); with:
+ //
+ // E = std::numeric_limits<T>::epsilon()
+ // u = (std::numeric_limits<T>::min)()
+ //
+ // Hull et al provide alternative code for "bad" machines
+ // but we have no way to test that here, so for now just assert
+ // on the assumption:
+ //
+ BOOST_ASSERT(x == 1);
+ real = half_pi - std::sqrt(y);
+ imag = std::sqrt(y);
+ }
+ else if(std::numeric_limits<T>::epsilon() * y - one >= x)
+ {
+ real = x/y; // This can underflow!
+ imag = log_two + std::log(y);
+ }
+ else if(x > one)
+ {
+ real = std::atan(x/y);
+ T xoy = x/y;
+ imag = log_two + std::log(y) + half * boost::math::log1p(xoy*xoy);
+ }
+ else
+ {
+ T a = std::sqrt(one + y*y);
+ real = x/a; // This can underflow!
+ imag = half * boost::math::log1p(static_cast<T>(2)*y*(y+a));
+ }
+ }
+ }
+
+ //
+ // Finish off by working out the sign of the result:
+ //
+ if(z.real() < 0)
+ real = -real;
+ if(z.imag() < 0)
+ imag = -imag;
+
+ return std::complex<T>(real, imag);
+}
+
+} } // namespaces
+
+#endif // BOOST_MATH_COMPLEX_ASIN_INCLUDED
diff --git a/boost/boost/math/complex/asinh.hpp b/boost/boost/math/complex/asinh.hpp
new file mode 100644
index 00000000000..a4ddae79e66
--- /dev/null
+++ b/boost/boost/math/complex/asinh.hpp
@@ -0,0 +1,32 @@
+// (C) Copyright John Maddock 2005.
+// 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)
+
+#ifndef BOOST_MATH_COMPLEX_ASINH_INCLUDED
+#define BOOST_MATH_COMPLEX_ASINH_INCLUDED
+
+#ifndef BOOST_MATH_COMPLEX_DETAILS_INCLUDED
+# include <boost/math/complex/details.hpp>
+#endif
+#ifndef BOOST_MATH_COMPLEX_ASINH_INCLUDED
+# include <boost/math/complex/asinh.hpp>
+#endif
+
+namespace boost{ namespace math{
+
+template<class T>
+inline std::complex<T> asinh(const std::complex<T>& x)
+{
+ //
+ // We use asinh(z) = i asin(-i z);
+ // Note that C99 defines this the other way around (which is
+ // to say asin is specified in terms of asinh), this is consistent
+ // with C99 though:
+ //
+ return ::boost::math::detail::mult_i(::boost::math::asin(::boost::math::detail::mult_minus_i(x)));
+}
+
+} } // namespaces
+
+#endif // BOOST_MATH_COMPLEX_ASINH_INCLUDED
diff --git a/boost/boost/math/complex/atan.hpp b/boost/boost/math/complex/atan.hpp
new file mode 100644
index 00000000000..a2104162cbb
--- /dev/null
+++ b/boost/boost/math/complex/atan.hpp
@@ -0,0 +1,36 @@
+// (C) Copyright John Maddock 2005.
+// 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)
+
+#ifndef BOOST_MATH_COMPLEX_ATAN_INCLUDED
+#define BOOST_MATH_COMPLEX_ATAN_INCLUDED
+
+#ifndef BOOST_MATH_COMPLEX_DETAILS_INCLUDED
+# include <boost/math/complex/details.hpp>
+#endif
+#ifndef BOOST_MATH_COMPLEX_ATANH_INCLUDED
+# include <boost/math/complex/atanh.hpp>
+#endif
+
+namespace boost{ namespace math{
+
+template<class T>
+std::complex<T> atan(const std::complex<T>& x)
+{
+ //
+ // We're using the C99 definition here; atan(z) = -i atanh(iz):
+ //
+ if(x.real() == 0)
+ {
+ if(x.imag() == 1)
+ return std::complex<T>(0, std::numeric_limits<T>::has_infinity ? std::numeric_limits<T>::infinity() : static_cast<T>(HUGE_VAL));
+ if(x.imag() == -1)
+ return std::complex<T>(0, std::numeric_limits<T>::has_infinity ? -std::numeric_limits<T>::infinity() : -static_cast<T>(HUGE_VAL));
+ }
+ return ::boost::math::detail::mult_minus_i(::boost::math::atanh(::boost::math::detail::mult_i(x)));
+}
+
+} } // namespaces
+
+#endif // BOOST_MATH_COMPLEX_ATAN_INCLUDED
diff --git a/boost/boost/math/complex/atanh.hpp b/boost/boost/math/complex/atanh.hpp
new file mode 100644
index 00000000000..43824370109
--- /dev/null
+++ b/boost/boost/math/complex/atanh.hpp
@@ -0,0 +1,245 @@
+// (C) Copyright John Maddock 2005.
+// 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)
+
+#ifndef BOOST_MATH_COMPLEX_ATANH_INCLUDED
+#define BOOST_MATH_COMPLEX_ATANH_INCLUDED
+
+#ifndef BOOST_MATH_COMPLEX_DETAILS_INCLUDED
+# include <boost/math/complex/details.hpp>
+#endif
+#ifndef BOOST_MATH_LOG1P_INCLUDED
+# include <boost/math/special_functions/log1p.hpp>
+#endif
+#include <boost/assert.hpp>
+
+#ifdef BOOST_NO_STDC_NAMESPACE
+namespace std{ using ::sqrt; using ::fabs; using ::acos; using ::asin; using ::atan; using ::atan2; }
+#endif
+
+namespace boost{ namespace math{
+
+template<class T>
+std::complex<T> atanh(const std::complex<T>& z)
+{
+ //
+ // References:
+ //
+ // Eric W. Weisstein. "Inverse Hyperbolic Tangent."
+ // From MathWorld--A Wolfram Web Resource.
+ // http://mathworld.wolfram.com/InverseHyperbolicTangent.html
+ //
+ // Also: The Wolfram Functions Site,
+ // http://functions.wolfram.com/ElementaryFunctions/ArcTanh/
+ //
+ // Also "Abramowitz and Stegun. Handbook of Mathematical Functions."
+ // at : http://jove.prohosting.com/~skripty/toc.htm
+ //
+
+ static const T half_pi = static_cast<T>(1.57079632679489661923132169163975144L);
+ static const T pi = static_cast<T>(3.141592653589793238462643383279502884197L);
+ static const T one = static_cast<T>(1.0L);
+ static const T two = static_cast<T>(2.0L);
+ static const T four = static_cast<T>(4.0L);
+ static const T zero = static_cast<T>(0);
+ static const T a_crossover = static_cast<T>(0.3L);
+
+ T x = std::fabs(z.real());
+ T y = std::fabs(z.imag());
+
+ T real, imag; // our results
+
+ T safe_upper = detail::safe_max(two);
+ T safe_lower = detail::safe_min(static_cast<T>(2));
+
+ //
+ // Begin by handling the special cases specified in C99:
+ //
+ if(detail::test_is_nan(x))
+ {
+ if(detail::test_is_nan(y))
+ return std::complex<T>(x, x);
+ else if(std::numeric_limits<T>::has_infinity && (y == std::numeric_limits<T>::infinity()))
+ return std::complex<T>(0, ((z.imag() < 0) ? -half_pi : half_pi));
+ else
+ return std::complex<T>(x, x);
+ }
+ else if(detail::test_is_nan(y))
+ {
+ if(x == 0)
+ return std::complex<T>(x, y);
+ if(std::numeric_limits<T>::has_infinity && (x == std::numeric_limits<T>::infinity()))
+ return std::complex<T>(0, y);
+ else
+ return std::complex<T>(y, y);
+ }
+ else if((x > safe_lower) && (x < safe_upper) && (y > safe_lower) && (y < safe_upper))
+ {
+
+ T xx = x*x;
+ T yy = y*y;
+ T x2 = x * two;
+
+ ///
+ // The real part is given by:
+ //
+ // real(atanh(z)) == log((1 + x^2 + y^2 + 2x) / (1 + x^2 + y^2 - 2x))
+ //
+ // However, when x is either large (x > 1/E) or very small
+ // (x < E) then this effectively simplifies
+ // to log(1), leading to wildly inaccurate results.
+ // By dividing the above (top and bottom) by (1 + x^2 + y^2) we get:
+ //
+ // real(atanh(z)) == log((1 + (2x / (1 + x^2 + y^2))) / (1 - (-2x / (1 + x^2 + y^2))))
+ //
+ // which is much more sensitive to the value of x, when x is not near 1
+ // (remember we can compute log(1+x) for small x very accurately).
+ //
+ // The cross-over from one method to the other has to be determined
+ // experimentally, the value used below appears correct to within a
+ // factor of 2 (and there are larger errors from other parts
+ // of the input domain anyway).
+ //
+ T alpha = two*x / (one + xx + yy);
+ if(alpha < a_crossover)
+ {
+ real = boost::math::log1p(alpha) - boost::math::log1p(-alpha);
+ }
+ else
+ {
+ T xm1 = x - one;
+ real = boost::math::log1p(x2 + xx + yy) - std::log(xm1*xm1 + yy);
+ }
+ real /= four;
+ if(z.real() < 0)
+ real = -real;
+
+ imag = std::atan2((y * two), (one - xx - yy));
+ imag /= two;
+ if(z.imag() < 0)
+ imag = -imag;
+ }
+ else
+ {
+ //
+ // This section handles exception cases that would normally cause
+ // underflow or overflow in the main formulas.
+ //
+ // Begin by working out the real part, we need to approximate
+ // alpha = 2x / (1 + x^2 + y^2)
+ // without either overflow or underflow in the squared terms.
+ //
+ T alpha = 0;
+ if(x >= safe_upper)
+ {
+ // this is really a test for infinity,
+ // but we may not have the necessary numeric_limits support:
+ if((x > (std::numeric_limits<T>::max)()) || (y > (std::numeric_limits<T>::max)()))
+ {
+ alpha = 0;
+ }
+ else if(y >= safe_upper)
+ {
+ // Big x and y: divide alpha through by x*y:
+ alpha = (two/y) / (x/y + y/x);
+ }
+ else if(y > one)
+ {
+ // Big x: divide through by x:
+ alpha = two / (x + y*y/x);
+ }
+ else
+ {
+ // Big x small y, as above but neglect y^2/x:
+ alpha = two/x;
+ }
+ }
+ else if(y >= safe_upper)
+ {
+ if(x > one)
+ {
+ // Big y, medium x, divide through by y:
+ alpha = (two*x/y) / (y + x*x/y);
+ }
+ else
+ {
+ // Small x and y, whatever alpha is, it's too small to calculate:
+ alpha = 0;
+ }
+ }
+ else
+ {
+ // one or both of x and y are small, calculate divisor carefully:
+ T div = one;
+ if(x > safe_lower)
+ div += x*x;
+ if(y > safe_lower)
+ div += y*y;
+ alpha = two*x/div;
+ }
+ if(alpha < a_crossover)
+ {
+ real = boost::math::log1p(alpha) - boost::math::log1p(-alpha);
+ }
+ else
+ {
+ // We can only get here as a result of small y and medium sized x,
+ // we can simply neglect the y^2 terms:
+ BOOST_ASSERT(x >= safe_lower);
+ BOOST_ASSERT(x <= safe_upper);
+ //BOOST_ASSERT(y <= safe_lower);
+ T xm1 = x - one;
+ real = std::log(1 + two*x + x*x) - std::log(xm1*xm1);
+ }
+
+ real /= four;
+ if(z.real() < 0)
+ real = -real;
+
+ //
+ // Now handle imaginary part, this is much easier,
+ // if x or y are large, then the formula:
+ // atan2(2y, 1 - x^2 - y^2)
+ // evaluates to +-(PI - theta) where theta is negligible compared to PI.
+ //
+ if((x >= safe_upper) || (y >= safe_upper))
+ {
+ imag = pi;
+ }
+ else if(x <= safe_lower)
+ {
+ //
+ // If both x and y are small then atan(2y),
+ // otherwise just x^2 is negligible in the divisor:
+ //
+ if(y <= safe_lower)
+ imag = std::atan2(two*y, one);
+ else
+ {
+ if((y == zero) && (x == zero))
+ imag = 0;
+ else
+ imag = std::atan2(two*y, one - y*y);
+ }
+ }
+ else
+ {
+ //
+ // y^2 is negligible:
+ //
+ if((y == zero) && (x == one))
+ imag = 0;
+ else
+ imag = std::atan2(two*y, 1 - x*x);
+ }
+ imag /= two;
+ if(z.imag() < 0)
+ imag = -imag;
+ }
+ return std::complex<T>(real, imag);
+}
+
+} } // namespaces
+
+#endif // BOOST_MATH_COMPLEX_ATANH_INCLUDED
diff --git a/boost/boost/math/complex/details.hpp b/boost/boost/math/complex/details.hpp
new file mode 100644
index 00000000000..410625407f7
--- /dev/null
+++ b/boost/boost/math/complex/details.hpp
@@ -0,0 +1,104 @@
+// (C) Copyright John Maddock 2005.
+// 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)
+
+#ifndef BOOST_MATH_COMPLEX_DETAILS_INCLUDED
+#define BOOST_MATH_COMPLEX_DETAILS_INCLUDED
+//
+// This header contains all the support code that is common to the
+// inverse trig complex functions, it also contains all the includes
+// that we need to implement all these functions.
+//
+#include <boost/detail/workaround.hpp>
+#include <boost/config.hpp>
+#include <boost/config/no_tr1/complex.hpp>
+#include <boost/limits.hpp>
+#include <math.h> // isnan where available
+#include <cmath>
+
+#ifdef BOOST_NO_STDC_NAMESPACE
+namespace std{ using ::sqrt; }
+#endif
+
+namespace boost{ namespace math{ namespace detail{
+
+template <class T>
+inline bool test_is_nan(T t)
+{
+ // Comparisons with Nan's always fail:
+ return std::numeric_limits<T>::has_infinity && (!(t <= std::numeric_limits<T>::infinity()) || !(t >= -std::numeric_limits<T>::infinity()));
+}
+#ifdef isnan
+template<> inline bool test_is_nan<float>(float t) { return isnan(t); }
+template<> inline bool test_is_nan<double>(double t) { return isnan(t); }
+template<> inline bool test_is_nan<long double>(long double t) { return isnan(t); }
+#endif
+
+template <class T>
+inline T mult_minus_one(const T& t)
+{
+ return test_is_nan(t) ? t : -t;
+}
+
+template <class T>
+inline std::complex<T> mult_i(const std::complex<T>& t)
+{
+ return std::complex<T>(mult_minus_one(t.imag()), t.real());
+}
+
+template <class T>
+inline std::complex<T> mult_minus_i(const std::complex<T>& t)
+{
+ return std::complex<T>(t.imag(), mult_minus_one(t.real()));
+}
+
+template <class T>
+inline T safe_max(T t)
+{
+ return std::sqrt((std::numeric_limits<T>::max)()) / t;
+}
+inline long double safe_max(long double t)
+{
+ // long double sqrt often returns infinity due to
+ // insufficient internal precision:
+ return std::sqrt((std::numeric_limits<double>::max)()) / t;
+}
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+// workaround for type deduction bug:
+inline float safe_max(float t)
+{
+ return std::sqrt((std::numeric_limits<float>::max)()) / t;
+}
+inline double safe_max(double t)
+{
+ return std::sqrt((std::numeric_limits<double>::max)()) / t;
+}
+#endif
+template <class T>
+inline T safe_min(T t)
+{
+ return std::sqrt((std::numeric_limits<T>::min)()) * t;
+}
+inline long double safe_min(long double t)
+{
+ // long double sqrt often returns zero due to
+ // insufficient internal precision:
+ return std::sqrt((std::numeric_limits<double>::min)()) * t;
+}
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+// type deduction workaround:
+inline double safe_min(double t)
+{
+ return std::sqrt((std::numeric_limits<double>::min)()) * t;
+}
+inline float safe_min(float t)
+{
+ return std::sqrt((std::numeric_limits<float>::min)()) * t;
+}
+#endif
+
+} } } // namespaces
+
+#endif // BOOST_MATH_COMPLEX_DETAILS_INCLUDED
+
diff --git a/boost/boost/math/complex/fabs.hpp b/boost/boost/math/complex/fabs.hpp
new file mode 100644
index 00000000000..5eb8b3bd80b
--- /dev/null
+++ b/boost/boost/math/complex/fabs.hpp
@@ -0,0 +1,23 @@
+// (C) Copyright John Maddock 2005.
+// 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)
+
+#ifndef BOOST_MATH_COMPLEX_FABS_INCLUDED
+#define BOOST_MATH_COMPLEX_FABS_INCLUDED
+
+#ifndef BOOST_MATH_HYPOT_INCLUDED
+# include <boost/math/special_functions/hypot.hpp>
+#endif
+
+namespace boost{ namespace math{
+
+template<class T>
+inline T fabs(const std::complex<T>& z)
+{
+ return ::boost::math::hypot(z.real(), z.imag());
+}
+
+} } // namespaces
+
+#endif // BOOST_MATH_COMPLEX_FABS_INCLUDED
diff --git a/boost/boost/math/octonion.hpp b/boost/boost/math/octonion.hpp
new file mode 100644
index 00000000000..c9c05dd85e0
--- /dev/null
+++ b/boost/boost/math/octonion.hpp
@@ -0,0 +1,4754 @@
+// boost octonion.hpp header file
+
+// (C) Copyright Hubert Holin 2001.
+// 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 updates, documentation, and revision history.
+
+
+#ifndef BOOST_OCTONION_HPP
+#define BOOST_OCTONION_HPP
+
+#include <boost/math/quaternion.hpp>
+
+
+namespace boost
+{
+ namespace math
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ // gcc 2.95.x uses expression templates for valarray calculations, but
+ // the result is not conforming. We need BOOST_GET_VALARRAY to get an
+ // actual valarray result when we need to call a member function
+ #define BOOST_GET_VALARRAY(T,x) ::std::valarray<T>(x)
+ // gcc 2.95.x has an "std::ios" class that is similar to
+ // "std::ios_base", so we just use a #define
+ #define BOOST_IOS_BASE ::std::ios
+ // gcc 2.x ignores function scope using declarations,
+ // put them in the scope of the enclosing namespace instead:
+ using ::std::valarray;
+ using ::std::sqrt;
+ using ::std::cos;
+ using ::std::sin;
+ using ::std::exp;
+ using ::std::cosh;
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+
+#define BOOST_OCTONION_ACCESSOR_GENERATOR(type) \
+ type real() const \
+ { \
+ return(a); \
+ } \
+ \
+ octonion<type> unreal() const \
+ { \
+ return( octonion<type>(static_cast<type>(0),b,c,d,e,f,g,h)); \
+ } \
+ \
+ type R_component_1() const \
+ { \
+ return(a); \
+ } \
+ \
+ type R_component_2() const \
+ { \
+ return(b); \
+ } \
+ \
+ type R_component_3() const \
+ { \
+ return(c); \
+ } \
+ \
+ type R_component_4() const \
+ { \
+ return(d); \
+ } \
+ \
+ type R_component_5() const \
+ { \
+ return(e); \
+ } \
+ \
+ type R_component_6() const \
+ { \
+ return(f); \
+ } \
+ \
+ type R_component_7() const \
+ { \
+ return(g); \
+ } \
+ \
+ type R_component_8() const \
+ { \
+ return(h); \
+ } \
+ \
+ ::std::complex<type> C_component_1() const \
+ { \
+ return(::std::complex<type>(a,b)); \
+ } \
+ \
+ ::std::complex<type> C_component_2() const \
+ { \
+ return(::std::complex<type>(c,d)); \
+ } \
+ \
+ ::std::complex<type> C_component_3() const \
+ { \
+ return(::std::complex<type>(e,f)); \
+ } \
+ \
+ ::std::complex<type> C_component_4() const \
+ { \
+ return(::std::complex<type>(g,h)); \
+ } \
+ \
+ ::boost::math::quaternion<type> H_component_1() const \
+ { \
+ return(::boost::math::quaternion<type>(a,b,c,d)); \
+ } \
+ \
+ ::boost::math::quaternion<type> H_component_2() const \
+ { \
+ return(::boost::math::quaternion<type>(e,f,g,h)); \
+ }
+
+
+#define BOOST_OCTONION_MEMBER_ASSIGNMENT_GENERATOR(type) \
+ template<typename X> \
+ octonion<type> & operator = (octonion<X> const & a_affecter) \
+ { \
+ a = static_cast<type>(a_affecter.R_component_1()); \
+ b = static_cast<type>(a_affecter.R_component_2()); \
+ c = static_cast<type>(a_affecter.R_component_3()); \
+ d = static_cast<type>(a_affecter.R_component_4()); \
+ e = static_cast<type>(a_affecter.R_component_5()); \
+ f = static_cast<type>(a_affecter.R_component_6()); \
+ g = static_cast<type>(a_affecter.R_component_7()); \
+ h = static_cast<type>(a_affecter.R_component_8()); \
+ \
+ return(*this); \
+ } \
+ \
+ octonion<type> & operator = (octonion<type> const & a_affecter) \
+ { \
+ a = a_affecter.a; \
+ b = a_affecter.b; \
+ c = a_affecter.c; \
+ d = a_affecter.d; \
+ e = a_affecter.e; \
+ f = a_affecter.f; \
+ g = a_affecter.g; \
+ h = a_affecter.h; \
+ \
+ return(*this); \
+ } \
+ \
+ octonion<type> & operator = (type const & a_affecter) \
+ { \
+ a = a_affecter; \
+ \
+ b = c = d = e = f= g = h = static_cast<type>(0); \
+ \
+ return(*this); \
+ } \
+ \
+ octonion<type> & operator = (::std::complex<type> const & a_affecter) \
+ { \
+ a = a_affecter.real(); \
+ b = a_affecter.imag(); \
+ \
+ c = d = e = f = g = h = static_cast<type>(0); \
+ \
+ return(*this); \
+ } \
+ \
+ octonion<type> & operator = (::boost::math::quaternion<type> const & a_affecter) \
+ { \
+ a = a_affecter.R_component_1(); \
+ b = a_affecter.R_component_2(); \
+ c = a_affecter.R_component_3(); \
+ d = a_affecter.R_component_4(); \
+ \
+ e = f = g = h = static_cast<type>(0); \
+ \
+ return(*this); \
+ }
+
+
+#define BOOST_OCTONION_MEMBER_DATA_GENERATOR(type) \
+ type a; \
+ type b; \
+ type c; \
+ type d; \
+ type e; \
+ type f; \
+ type g; \
+ type h; \
+
+
+ template<typename T>
+ class octonion
+ {
+ public:
+
+ typedef T value_type;
+
+ // constructor for O seen as R^8
+ // (also default constructor)
+
+ explicit octonion( T const & requested_a = T(),
+ T const & requested_b = T(),
+ T const & requested_c = T(),
+ T const & requested_d = T(),
+ T const & requested_e = T(),
+ T const & requested_f = T(),
+ T const & requested_g = T(),
+ T const & requested_h = T())
+ : a(requested_a),
+ b(requested_b),
+ c(requested_c),
+ d(requested_d),
+ e(requested_e),
+ f(requested_f),
+ g(requested_g),
+ h(requested_h)
+ {
+ // nothing to do!
+ }
+
+
+ // constructor for H seen as C^4
+
+ explicit octonion( ::std::complex<T> const & z0,
+ ::std::complex<T> const & z1 = ::std::complex<T>(),
+ ::std::complex<T> const & z2 = ::std::complex<T>(),
+ ::std::complex<T> const & z3 = ::std::complex<T>())
+ : a(z0.real()),
+ b(z0.imag()),
+ c(z1.real()),
+ d(z1.imag()),
+ e(z2.real()),
+ f(z2.imag()),
+ g(z3.real()),
+ h(z3.imag())
+ {
+ // nothing to do!
+ }
+
+
+ // constructor for O seen as H^2
+
+ explicit octonion( ::boost::math::quaternion<T> const & q0,
+ ::boost::math::quaternion<T> const & q1 = ::boost::math::quaternion<T>())
+ : a(q0.R_component_1()),
+ b(q0.R_component_2()),
+ c(q0.R_component_3()),
+ d(q0.R_component_4()),
+ e(q1.R_component_1()),
+ f(q1.R_component_2()),
+ g(q1.R_component_3()),
+ h(q1.R_component_4())
+ {
+ // nothing to do!
+ }
+
+
+ // UNtemplated copy constructor
+ // (this is taken care of by the compiler itself)
+
+
+ // templated copy constructor
+
+ template<typename X>
+ explicit octonion(octonion<X> const & a_recopier)
+ : a(static_cast<T>(a_recopier.R_component_1())),
+ b(static_cast<T>(a_recopier.R_component_2())),
+ c(static_cast<T>(a_recopier.R_component_3())),
+ d(static_cast<T>(a_recopier.R_component_4())),
+ e(static_cast<T>(a_recopier.R_component_5())),
+ f(static_cast<T>(a_recopier.R_component_6())),
+ g(static_cast<T>(a_recopier.R_component_7())),
+ h(static_cast<T>(a_recopier.R_component_8()))
+ {
+ // nothing to do!
+ }
+
+
+ // destructor
+ // (this is taken care of by the compiler itself)
+
+
+ // accessors
+ //
+ // Note: Like complex number, octonions do have a meaningful notion of "real part",
+ // but unlike them there is no meaningful notion of "imaginary part".
+ // Instead there is an "unreal part" which itself is an octonion, and usually
+ // nothing simpler (as opposed to the complex number case).
+ // However, for practicallity, there are accessors for the other components
+ // (these are necessary for the templated copy constructor, for instance).
+
+ BOOST_OCTONION_ACCESSOR_GENERATOR(T)
+
+ // assignment operators
+
+ BOOST_OCTONION_MEMBER_ASSIGNMENT_GENERATOR(T)
+
+ // other assignment-related operators
+ //
+ // NOTE: Octonion multiplication is *NOT* commutative;
+ // symbolically, "q *= rhs;" means "q = q * rhs;"
+ // and "q /= rhs;" means "q = q * inverse_of(rhs);";
+ // octonion multiplication is also *NOT* associative
+
+ octonion<T> & operator += (T const & rhs)
+ {
+ T at = a + rhs; // exception guard
+
+ a = at;
+
+ return(*this);
+ }
+
+
+ octonion<T> & operator += (::std::complex<T> const & rhs)
+ {
+ T at = a + rhs.real(); // exception guard
+ T bt = b + rhs.imag(); // exception guard
+
+ a = at;
+ b = bt;
+
+ return(*this);
+ }
+
+
+ octonion<T> & operator += (::boost::math::quaternion<T> const & rhs)
+ {
+ T at = a + rhs.R_component_1(); // exception guard
+ T bt = b + rhs.R_component_2(); // exception guard
+ T ct = c + rhs.R_component_3(); // exception guard
+ T dt = d + rhs.R_component_4(); // exception guard
+
+ a = at;
+ b = bt;
+ c = ct;
+ d = dt;
+
+ return(*this);
+ }
+
+
+ template<typename X>
+ octonion<T> & operator += (octonion<X> const & rhs)
+ {
+ T at = a + static_cast<T>(rhs.R_component_1()); // exception guard
+ T bt = b + static_cast<T>(rhs.R_component_2()); // exception guard
+ T ct = c + static_cast<T>(rhs.R_component_3()); // exception guard
+ T dt = d + static_cast<T>(rhs.R_component_4()); // exception guard
+ T et = e + static_cast<T>(rhs.R_component_5()); // exception guard
+ T ft = f + static_cast<T>(rhs.R_component_6()); // exception guard
+ T gt = g + static_cast<T>(rhs.R_component_7()); // exception guard
+ T ht = h + static_cast<T>(rhs.R_component_8()); // exception guard
+
+ a = at;
+ b = bt;
+ c = ct;
+ d = dt;
+ e = et;
+ f = ft;
+ g = gt;
+ h = ht;
+
+ return(*this);
+ }
+
+
+
+ octonion<T> & operator -= (T const & rhs)
+ {
+ T at = a - rhs; // exception guard
+
+ a = at;
+
+ return(*this);
+ }
+
+
+ octonion<T> & operator -= (::std::complex<T> const & rhs)
+ {
+ T at = a - rhs.real(); // exception guard
+ T bt = b - rhs.imag(); // exception guard
+
+ a = at;
+ b = bt;
+
+ return(*this);
+ }
+
+
+ octonion<T> & operator -= (::boost::math::quaternion<T> const & rhs)
+ {
+ T at = a - rhs.R_component_1(); // exception guard
+ T bt = b - rhs.R_component_2(); // exception guard
+ T ct = c - rhs.R_component_3(); // exception guard
+ T dt = d - rhs.R_component_4(); // exception guard
+
+ a = at;
+ b = bt;
+ c = ct;
+ d = dt;
+
+ return(*this);
+ }
+
+
+ template<typename X>
+ octonion<T> & operator -= (octonion<X> const & rhs)
+ {
+ T at = a - static_cast<T>(rhs.R_component_1()); // exception guard
+ T bt = b - static_cast<T>(rhs.R_component_2()); // exception guard
+ T ct = c - static_cast<T>(rhs.R_component_3()); // exception guard
+ T dt = d - static_cast<T>(rhs.R_component_4()); // exception guard
+ T et = e - static_cast<T>(rhs.R_component_5()); // exception guard
+ T ft = f - static_cast<T>(rhs.R_component_6()); // exception guard
+ T gt = g - static_cast<T>(rhs.R_component_7()); // exception guard
+ T ht = h - static_cast<T>(rhs.R_component_8()); // exception guard
+
+ a = at;
+ b = bt;
+ c = ct;
+ d = dt;
+ e = et;
+ f = ft;
+ g = gt;
+ h = ht;
+
+ return(*this);
+ }
+
+
+ octonion<T> & operator *= (T const & rhs)
+ {
+ T at = a * rhs; // exception guard
+ T bt = b * rhs; // exception guard
+ T ct = c * rhs; // exception guard
+ T dt = d * rhs; // exception guard
+ T et = e * rhs; // exception guard
+ T ft = f * rhs; // exception guard
+ T gt = g * rhs; // exception guard
+ T ht = h * rhs; // exception guard
+
+ a = at;
+ b = bt;
+ c = ct;
+ d = dt;
+ e = et;
+ f = ft;
+ g = gt;
+ h = ht;
+
+ return(*this);
+ }
+
+
+ octonion<T> & operator *= (::std::complex<T> const & rhs)
+ {
+ T ar = rhs.real();
+ T br = rhs.imag();
+
+ T at = +a*ar-b*br;
+ T bt = +a*br+b*ar;
+ T ct = +c*ar+d*br;
+ T dt = -c*br+d*ar;
+ T et = +e*ar+f*br;
+ T ft = -e*br+f*ar;
+ T gt = +g*ar-h*br;
+ T ht = +g*br+h*ar;
+
+ a = at;
+ b = bt;
+ c = ct;
+ d = dt;
+ e = et;
+ f = ft;
+ g = gt;
+ h = ht;
+
+ return(*this);
+ }
+
+
+ octonion<T> & operator *= (::boost::math::quaternion<T> const & rhs)
+ {
+ T ar = rhs.R_component_1();
+ T br = rhs.R_component_2();
+ T cr = rhs.R_component_2();
+ T dr = rhs.R_component_2();
+
+ T at = +a*ar-b*br-c*cr-d*dr;
+ T bt = +a*br+b*ar+c*dr-d*cr;
+ T ct = +a*cr-b*dr+c*ar+d*br;
+ T dt = +a*dr+b*cr-c*br+d*ar;
+ T et = +e*ar+f*br+g*cr+h*dr;
+ T ft = -e*br+f*ar-g*dr+h*cr;
+ T gt = -e*cr+f*dr+g*ar-h*br;
+ T ht = -e*dr-f*cr+g*br+h*ar;
+
+ a = at;
+ b = bt;
+ c = ct;
+ d = dt;
+ e = et;
+ f = ft;
+ g = gt;
+ h = ht;
+
+ return(*this);
+ }
+
+
+ template<typename X>
+ octonion<T> & operator *= (octonion<X> const & rhs)
+ {
+ T ar = static_cast<T>(rhs.R_component_1());
+ T br = static_cast<T>(rhs.R_component_2());
+ T cr = static_cast<T>(rhs.R_component_3());
+ T dr = static_cast<T>(rhs.R_component_4());
+ T er = static_cast<T>(rhs.R_component_5());
+ T fr = static_cast<T>(rhs.R_component_6());
+ T gr = static_cast<T>(rhs.R_component_7());
+ T hr = static_cast<T>(rhs.R_component_8());
+
+ T at = +a*ar-b*br-c*cr-d*dr-e*er-f*fr-g*gr-h*hr;
+ T bt = +a*br+b*ar+c*dr-d*cr+e*fr-f*er-g*hr+h*gr;
+ T ct = +a*cr-b*dr+c*ar+d*br+e*gr+f*hr-g*er-h*fr;
+ T dt = +a*dr+b*cr-c*br+d*ar+e*hr-f*gr+g*fr-h*er;
+ T et = +a*er-b*fr-c*gr-d*hr+e*ar+f*br+g*cr+h*dr;
+ T ft = +a*fr+b*er-c*hr+d*gr-e*br+f*ar-g*dr+h*cr;
+ T gt = +a*gr+b*hr+c*er-d*fr-e*cr+f*dr+g*ar-h*br;
+ T ht = +a*hr-b*gr+c*fr+d*er-e*dr-f*cr+g*br+h*ar;
+
+ a = at;
+ b = bt;
+ c = ct;
+ d = dt;
+ e = et;
+ f = ft;
+ g = gt;
+ h = ht;
+
+ return(*this);
+ }
+
+
+ octonion<T> & operator /= (T const & rhs)
+ {
+ T at = a / rhs; // exception guard
+ T bt = b / rhs; // exception guard
+ T ct = c / rhs; // exception guard
+ T dt = d / rhs; // exception guard
+ T et = e / rhs; // exception guard
+ T ft = f / rhs; // exception guard
+ T gt = g / rhs; // exception guard
+ T ht = h / rhs; // exception guard
+
+ a = at;
+ b = bt;
+ c = ct;
+ d = dt;
+ e = et;
+ f = ft;
+ g = gt;
+ h = ht;
+
+ return(*this);
+ }
+
+
+ octonion<T> & operator /= (::std::complex<T> const & rhs)
+ {
+ T ar = rhs.real();
+ T br = rhs.imag();
+
+ T denominator = ar*ar+br*br;
+
+ T at = (+a*ar-b*br)/denominator;
+ T bt = (-a*br+b*ar)/denominator;
+ T ct = (+c*ar-d*br)/denominator;
+ T dt = (+c*br+d*ar)/denominator;
+ T et = (+e*ar-f*br)/denominator;
+ T ft = (+e*br+f*ar)/denominator;
+ T gt = (+g*ar+h*br)/denominator;
+ T ht = (+g*br+h*ar)/denominator;
+
+ a = at;
+ b = bt;
+ c = ct;
+ d = dt;
+ e = et;
+ f = ft;
+ g = gt;
+ h = ht;
+
+ return(*this);
+ }
+
+
+ octonion<T> & operator /= (::boost::math::quaternion<T> const & rhs)
+ {
+ T ar = rhs.R_component_1();
+ T br = rhs.R_component_2();
+ T cr = rhs.R_component_2();
+ T dr = rhs.R_component_2();
+
+ T denominator = ar*ar+br*br+cr*cr+dr*dr;
+
+ T at = (+a*ar+b*br+c*cr+d*dr)/denominator;
+ T bt = (-a*br+b*ar-c*dr+d*cr)/denominator;
+ T ct = (-a*cr+b*dr+c*ar-d*br)/denominator;
+ T dt = (-a*dr-b*cr+c*br+d*ar)/denominator;
+ T et = (+e*ar-f*br-g*cr-h*dr)/denominator;
+ T ft = (+e*br+f*ar+g*dr-h*cr)/denominator;
+ T gt = (+e*cr-f*dr+g*ar+h*br)/denominator;
+ T ht = (+e*dr+f*cr-g*br+h*ar)/denominator;
+
+ a = at;
+ b = bt;
+ c = ct;
+ d = dt;
+ e = et;
+ f = ft;
+ g = gt;
+ h = ht;
+
+ return(*this);
+ }
+
+
+ template<typename X>
+ octonion<T> & operator /= (octonion<X> const & rhs)
+ {
+ T ar = static_cast<T>(rhs.R_component_1());
+ T br = static_cast<T>(rhs.R_component_2());
+ T cr = static_cast<T>(rhs.R_component_3());
+ T dr = static_cast<T>(rhs.R_component_4());
+ T er = static_cast<T>(rhs.R_component_5());
+ T fr = static_cast<T>(rhs.R_component_6());
+ T gr = static_cast<T>(rhs.R_component_7());
+ T hr = static_cast<T>(rhs.R_component_8());
+
+ T denominator = ar*ar+br*br+cr*cr+dr*dr+er*er+fr*fr+gr*gr+hr*hr;
+
+ T at = (+a*ar+b*br+c*cr+d*dr+e*er+f*fr+g*gr+h*hr)/denominator;
+ T bt = (-a*br+b*ar-c*dr+d*cr-e*fr+f*er+g*hr-h*gr)/denominator;
+ T ct = (-a*cr+b*dr+c*ar-d*br-e*gr-f*hr+g*er+h*fr)/denominator;
+ T dt = (-a*dr-b*cr+c*br+d*ar-e*hr+f*gr-g*fr+h*er)/denominator;
+ T et = (-a*er+b*fr+c*gr+d*hr+e*ar-f*br-g*cr-h*dr)/denominator;
+ T ft = (-a*fr-b*er+c*hr-d*gr+e*br+f*ar+g*dr-h*cr)/denominator;
+ T gt = (-a*gr-b*hr-c*er+d*fr+e*cr-f*dr+g*ar+h*br)/denominator;
+ T ht = (-a*hr+b*gr-c*fr-d*er+e*dr+f*cr-g*br+h*ar)/denominator;
+
+ a = at;
+ b = bt;
+ c = ct;
+ d = dt;
+ e = et;
+ f = ft;
+ g = gt;
+ h = ht;
+
+ return(*this);
+ }
+
+
+ protected:
+
+ BOOST_OCTONION_MEMBER_DATA_GENERATOR(T)
+
+
+ private:
+
+ };
+
+
+ // declaration of octonion specialization
+
+ template<> class octonion<float>;
+ template<> class octonion<double>;
+ template<> class octonion<long double>;
+
+
+ // helper templates for converting copy constructors (declaration)
+
+ namespace detail
+ {
+
+ template< typename T,
+ typename U
+ >
+ octonion<T> octonion_type_converter(octonion<U> const & rhs);
+ }
+
+
+ // implementation of octonion specialization
+
+
+#define BOOST_OCTONION_CONSTRUCTOR_GENERATOR(type) \
+ explicit octonion( type const & requested_a = static_cast<type>(0), \
+ type const & requested_b = static_cast<type>(0), \
+ type const & requested_c = static_cast<type>(0), \
+ type const & requested_d = static_cast<type>(0), \
+ type const & requested_e = static_cast<type>(0), \
+ type const & requested_f = static_cast<type>(0), \
+ type const & requested_g = static_cast<type>(0), \
+ type const & requested_h = static_cast<type>(0)) \
+ : a(requested_a), \
+ b(requested_b), \
+ c(requested_c), \
+ d(requested_d), \
+ e(requested_e), \
+ f(requested_f), \
+ g(requested_g), \
+ h(requested_h) \
+ { \
+ } \
+ \
+ explicit octonion( ::std::complex<type> const & z0, \
+ ::std::complex<type> const & z1 = ::std::complex<type>(), \
+ ::std::complex<type> const & z2 = ::std::complex<type>(), \
+ ::std::complex<type> const & z3 = ::std::complex<type>()) \
+ : a(z0.real()), \
+ b(z0.imag()), \
+ c(z1.real()), \
+ d(z1.imag()), \
+ e(z2.real()), \
+ f(z2.imag()), \
+ g(z3.real()), \
+ h(z3.imag()) \
+ { \
+ } \
+ \
+ explicit octonion( ::boost::math::quaternion<type> const & q0, \
+ ::boost::math::quaternion<type> const & q1 = ::boost::math::quaternion<type>()) \
+ : a(q0.R_component_1()), \
+ b(q0.R_component_2()), \
+ c(q0.R_component_3()), \
+ d(q0.R_component_4()), \
+ e(q1.R_component_1()), \
+ f(q1.R_component_2()), \
+ g(q1.R_component_3()), \
+ h(q1.R_component_4()) \
+ { \
+ }
+
+
+#define BOOST_OCTONION_MEMBER_ADD_GENERATOR_1(type) \
+ octonion<type> & operator += (type const & rhs) \
+ { \
+ a += rhs; \
+ \
+ return(*this); \
+ }
+
+#define BOOST_OCTONION_MEMBER_ADD_GENERATOR_2(type) \
+ octonion<type> & operator += (::std::complex<type> const & rhs) \
+ { \
+ a += rhs.real(); \
+ b += rhs.imag(); \
+ \
+ return(*this); \
+ }
+
+#define BOOST_OCTONION_MEMBER_ADD_GENERATOR_3(type) \
+ octonion<type> & operator += (::boost::math::quaternion<type> const & rhs) \
+ { \
+ a += rhs.R_component_1(); \
+ b += rhs.R_component_2(); \
+ c += rhs.R_component_3(); \
+ d += rhs.R_component_4(); \
+ \
+ return(*this); \
+ }
+
+#define BOOST_OCTONION_MEMBER_ADD_GENERATOR_4(type) \
+ template<typename X> \
+ octonion<type> & operator += (octonion<X> const & rhs) \
+ { \
+ a += static_cast<type>(rhs.R_component_1()); \
+ b += static_cast<type>(rhs.R_component_2()); \
+ c += static_cast<type>(rhs.R_component_3()); \
+ d += static_cast<type>(rhs.R_component_4()); \
+ e += static_cast<type>(rhs.R_component_5()); \
+ f += static_cast<type>(rhs.R_component_6()); \
+ g += static_cast<type>(rhs.R_component_7()); \
+ h += static_cast<type>(rhs.R_component_8()); \
+ \
+ return(*this); \
+ }
+
+#define BOOST_OCTONION_MEMBER_SUB_GENERATOR_1(type) \
+ octonion<type> & operator -= (type const & rhs) \
+ { \
+ a -= rhs; \
+ \
+ return(*this); \
+ }
+
+#define BOOST_OCTONION_MEMBER_SUB_GENERATOR_2(type) \
+ octonion<type> & operator -= (::std::complex<type> const & rhs) \
+ { \
+ a -= rhs.real(); \
+ b -= rhs.imag(); \
+ \
+ return(*this); \
+ }
+
+#define BOOST_OCTONION_MEMBER_SUB_GENERATOR_3(type) \
+ octonion<type> & operator -= (::boost::math::quaternion<type> const & rhs) \
+ { \
+ a -= rhs.R_component_1(); \
+ b -= rhs.R_component_2(); \
+ c -= rhs.R_component_3(); \
+ d -= rhs.R_component_4(); \
+ \
+ return(*this); \
+ }
+
+#define BOOST_OCTONION_MEMBER_SUB_GENERATOR_4(type) \
+ template<typename X> \
+ octonion<type> & operator -= (octonion<X> const & rhs) \
+ { \
+ a -= static_cast<type>(rhs.R_component_1()); \
+ b -= static_cast<type>(rhs.R_component_2()); \
+ c -= static_cast<type>(rhs.R_component_3()); \
+ d -= static_cast<type>(rhs.R_component_4()); \
+ e -= static_cast<type>(rhs.R_component_5()); \
+ f -= static_cast<type>(rhs.R_component_6()); \
+ g -= static_cast<type>(rhs.R_component_7()); \
+ h -= static_cast<type>(rhs.R_component_8()); \
+ \
+ return(*this); \
+ }
+
+#define BOOST_OCTONION_MEMBER_MUL_GENERATOR_1(type) \
+ octonion<type> & operator *= (type const & rhs) \
+ { \
+ a *= rhs; \
+ b *= rhs; \
+ c *= rhs; \
+ d *= rhs; \
+ e *= rhs; \
+ f *= rhs; \
+ g *= rhs; \
+ h *= rhs; \
+ \
+ return(*this); \
+ }
+
+#define BOOST_OCTONION_MEMBER_MUL_GENERATOR_2(type) \
+ octonion<type> & operator *= (::std::complex<type> const & rhs) \
+ { \
+ type ar = rhs.real(); \
+ type br = rhs.imag(); \
+ \
+ type at = +a*ar-b*br; \
+ type bt = +a*br+b*ar; \
+ type ct = +c*ar+d*br; \
+ type dt = -c*br+d*ar; \
+ type et = +e*ar+f*br; \
+ type ft = -e*br+f*ar; \
+ type gt = +g*ar-h*br; \
+ type ht = +g*br+h*ar; \
+ \
+ a = at; \
+ b = bt; \
+ c = ct; \
+ d = dt; \
+ e = et; \
+ f = ft; \
+ g = gt; \
+ h = ht; \
+ \
+ return(*this); \
+ }
+
+#define BOOST_OCTONION_MEMBER_MUL_GENERATOR_3(type) \
+ octonion<type> & operator *= (::boost::math::quaternion<type> const & rhs) \
+ { \
+ type ar = rhs.R_component_1(); \
+ type br = rhs.R_component_2(); \
+ type cr = rhs.R_component_2(); \
+ type dr = rhs.R_component_2(); \
+ \
+ type at = +a*ar-b*br-c*cr-d*dr; \
+ type bt = +a*br+b*ar+c*dr-d*cr; \
+ type ct = +a*cr-b*dr+c*ar+d*br; \
+ type dt = +a*dr+b*cr-c*br+d*ar; \
+ type et = +e*ar+f*br+g*cr+h*dr; \
+ type ft = -e*br+f*ar-g*dr+h*cr; \
+ type gt = -e*cr+f*dr+g*ar-h*br; \
+ type ht = -e*dr-f*cr+g*br+h*ar; \
+ \
+ a = at; \
+ b = bt; \
+ c = ct; \
+ d = dt; \
+ e = et; \
+ f = ft; \
+ g = gt; \
+ h = ht; \
+ \
+ return(*this); \
+ }
+
+#define BOOST_OCTONION_MEMBER_MUL_GENERATOR_4(type) \
+ template<typename X> \
+ octonion<type> & operator *= (octonion<X> const & rhs) \
+ { \
+ type ar = static_cast<type>(rhs.R_component_1()); \
+ type br = static_cast<type>(rhs.R_component_2()); \
+ type cr = static_cast<type>(rhs.R_component_3()); \
+ type dr = static_cast<type>(rhs.R_component_4()); \
+ type er = static_cast<type>(rhs.R_component_5()); \
+ type fr = static_cast<type>(rhs.R_component_6()); \
+ type gr = static_cast<type>(rhs.R_component_7()); \
+ type hr = static_cast<type>(rhs.R_component_8()); \
+ \
+ type at = +a*ar-b*br-c*cr-d*dr-e*er-f*fr-g*gr-h*hr; \
+ type bt = +a*br+b*ar+c*dr-d*cr+e*fr-f*er-g*hr+h*gr; \
+ type ct = +a*cr-b*dr+c*ar+d*br+e*gr+f*hr-g*er-h*fr; \
+ type dt = +a*dr+b*cr-c*br+d*ar+e*hr-f*gr+g*fr-h*er; \
+ type et = +a*er-b*fr-c*gr-d*hr+e*ar+f*br+g*cr+h*dr; \
+ type ft = +a*fr+b*er-c*hr+d*gr-e*br+f*ar-g*dr+h*cr; \
+ type gt = +a*gr+b*hr+c*er-d*fr-e*cr+f*dr+g*ar-h*br; \
+ type ht = +a*hr-b*gr+c*fr+d*er-e*dr-f*cr+g*br+h*ar; \
+ \
+ a = at; \
+ b = bt; \
+ c = ct; \
+ d = dt; \
+ e = et; \
+ f = ft; \
+ g = gt; \
+ h = ht; \
+ \
+ return(*this); \
+ }
+
+// There is quite a lot of repetition in the code below. This is intentional.
+// The last conditional block is the normal form, and the others merely
+// consist of workarounds for various compiler deficiencies. Hopefuly, when
+// more compilers are conformant and we can retire support for those that are
+// not, we will be able to remove the clutter. This is makes the situation
+// (painfully) explicit.
+
+#define BOOST_OCTONION_MEMBER_DIV_GENERATOR_1(type) \
+ octonion<type> & operator /= (type const & rhs) \
+ { \
+ a /= rhs; \
+ b /= rhs; \
+ c /= rhs; \
+ d /= rhs; \
+ \
+ return(*this); \
+ }
+
+#if defined(__GNUC__) && (__GNUC__ < 3)
+ #define BOOST_OCTONION_MEMBER_DIV_GENERATOR_2(type) \
+ octonion<type> & operator /= (::std::complex<type> const & rhs) \
+ { \
+ using ::std::valarray; \
+ \
+ valarray<type> tr(2); \
+ \
+ tr[0] = rhs.real(); \
+ tr[1] = rhs.imag(); \
+ \
+ type mixam = (BOOST_GET_VALARRAY(type,static_cast<type>(1)/abs(tr)).max)(); \
+ \
+ tr *= mixam; \
+ \
+ valarray<type> tt(8); \
+ \
+ tt[0] = +a*tr[0]-b*tr[1]; \
+ tt[1] = -a*tr[1]+b*tr[0]; \
+ tt[2] = +c*tr[0]-d*tr[1]; \
+ tt[3] = +c*tr[1]+d*tr[0]; \
+ tt[4] = +e*tr[0]-f*tr[1]; \
+ tt[5] = +e*tr[1]+f*tr[0]; \
+ tt[6] = +g*tr[0]+h*tr[1]; \
+ tt[7] = +g*tr[1]+h*tr[0]; \
+ \
+ tr *= tr; \
+ \
+ tt *= (mixam/tr.sum()); \
+ \
+ a = tt[0]; \
+ b = tt[1]; \
+ c = tt[2]; \
+ d = tt[3]; \
+ e = tt[4]; \
+ f = tt[5]; \
+ g = tt[6]; \
+ h = tt[7]; \
+ \
+ return(*this); \
+ }
+#elif defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP)
+ #define BOOST_OCTONION_MEMBER_DIV_GENERATOR_2(type) \
+ octonion<type> & operator /= (::std::complex<type> const & rhs) \
+ { \
+ using ::std::valarray; \
+ using ::std::abs; \
+ \
+ valarray<type> tr(2); \
+ \
+ tr[0] = rhs.real(); \
+ tr[1] = rhs.imag(); \
+ \
+ type mixam = static_cast<type>(1)/(abs(tr).max)(); \
+ \
+ tr *= mixam; \
+ \
+ valarray<type> tt(8); \
+ \
+ tt[0] = +a*tr[0]-b*tr[1]; \
+ tt[1] = -a*tr[1]+b*tr[0]; \
+ tt[2] = +c*tr[0]-d*tr[1]; \
+ tt[3] = +c*tr[1]+d*tr[0]; \
+ tt[4] = +e*tr[0]-f*tr[1]; \
+ tt[5] = +e*tr[1]+f*tr[0]; \
+ tt[6] = +g*tr[0]+h*tr[1]; \
+ tt[7] = +g*tr[1]+h*tr[0]; \
+ \
+ tr *= tr; \
+ \
+ tt *= (mixam/tr.sum()); \
+ \
+ a = tt[0]; \
+ b = tt[1]; \
+ c = tt[2]; \
+ d = tt[3]; \
+ e = tt[4]; \
+ f = tt[5]; \
+ g = tt[6]; \
+ h = tt[7]; \
+ \
+ return(*this); \
+ }
+#else
+ #define BOOST_OCTONION_MEMBER_DIV_GENERATOR_2(type) \
+ octonion<type> & operator /= (::std::complex<type> const & rhs) \
+ { \
+ using ::std::valarray; \
+ \
+ valarray<type> tr(2); \
+ \
+ tr[0] = rhs.real(); \
+ tr[1] = rhs.imag(); \
+ \
+ type mixam = static_cast<type>(1)/(abs(tr).max)(); \
+ \
+ tr *= mixam; \
+ \
+ valarray<type> tt(8); \
+ \
+ tt[0] = +a*tr[0]-b*tr[1]; \
+ tt[1] = -a*tr[1]+b*tr[0]; \
+ tt[2] = +c*tr[0]-d*tr[1]; \
+ tt[3] = +c*tr[1]+d*tr[0]; \
+ tt[4] = +e*tr[0]-f*tr[1]; \
+ tt[5] = +e*tr[1]+f*tr[0]; \
+ tt[6] = +g*tr[0]+h*tr[1]; \
+ tt[7] = +g*tr[1]+h*tr[0]; \
+ \
+ tr *= tr; \
+ \
+ tt *= (mixam/tr.sum()); \
+ \
+ a = tt[0]; \
+ b = tt[1]; \
+ c = tt[2]; \
+ d = tt[3]; \
+ e = tt[4]; \
+ f = tt[5]; \
+ g = tt[6]; \
+ h = tt[7]; \
+ \
+ return(*this); \
+ }
+#endif /* defined(__GNUC__) && (__GNUC__ < 3) */ /* BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP */
+
+#if defined(__GNUC__) && (__GNUC__ < 3)
+ #define BOOST_OCTONION_MEMBER_DIV_GENERATOR_3(type) \
+ octonion<type> & operator /= (::boost::math::quaternion<type> const & rhs) \
+ { \
+ using ::std::valarray; \
+ \
+ valarray<type> tr(4); \
+ \
+ tr[0] = static_cast<type>(rhs.R_component_1()); \
+ tr[1] = static_cast<type>(rhs.R_component_2()); \
+ tr[2] = static_cast<type>(rhs.R_component_3()); \
+ tr[3] = static_cast<type>(rhs.R_component_4()); \
+ \
+ type mixam = (BOOST_GET_VALARRAY(type,static_cast<type>(1)/abs(tr)).max)();\
+ \
+ tr *= mixam; \
+ \
+ valarray<type> tt(8); \
+ \
+ tt[0] = +a*tr[0]+b*tr[1]+c*tr[2]+d*tr[3]; \
+ tt[1] = -a*tr[1]+b*tr[0]-c*tr[3]+d*tr[2]; \
+ tt[2] = -a*tr[2]+b*tr[3]+c*tr[0]-d*tr[1]; \
+ tt[3] = -a*tr[3]-b*tr[2]+c*tr[1]+d*tr[0]; \
+ tt[4] = +e*tr[0]-f*tr[1]-g*tr[2]-h*tr[3]; \
+ tt[5] = +e*tr[1]+f*tr[0]+g*tr[3]-h*tr[2]; \
+ tt[6] = +e*tr[2]-f*tr[3]+g*tr[0]+h*tr[1]; \
+ tt[7] = +e*tr[3]+f*tr[2]-g*tr[1]+h*tr[0]; \
+ \
+ tr *= tr; \
+ \
+ tt *= (mixam/tr.sum()); \
+ \
+ a = tt[0]; \
+ b = tt[1]; \
+ c = tt[2]; \
+ d = tt[3]; \
+ e = tt[4]; \
+ f = tt[5]; \
+ g = tt[6]; \
+ h = tt[7]; \
+ \
+ return(*this); \
+ }
+#elif defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP)
+ #define BOOST_OCTONION_MEMBER_DIV_GENERATOR_3(type) \
+ octonion<type> & operator /= (::boost::math::quaternion<type> const & rhs) \
+ { \
+ using ::std::valarray; \
+ using ::std::abs; \
+ \
+ valarray<type> tr(4); \
+ \
+ tr[0] = static_cast<type>(rhs.R_component_1()); \
+ tr[1] = static_cast<type>(rhs.R_component_2()); \
+ tr[2] = static_cast<type>(rhs.R_component_3()); \
+ tr[3] = static_cast<type>(rhs.R_component_4()); \
+ \
+ type mixam = static_cast<type>(1)/(abs(tr).max)(); \
+ \
+ tr *= mixam; \
+ \
+ valarray<type> tt(8); \
+ \
+ tt[0] = +a*tr[0]+b*tr[1]+c*tr[2]+d*tr[3]; \
+ tt[1] = -a*tr[1]+b*tr[0]-c*tr[3]+d*tr[2]; \
+ tt[2] = -a*tr[2]+b*tr[3]+c*tr[0]-d*tr[1]; \
+ tt[3] = -a*tr[3]-b*tr[2]+c*tr[1]+d*tr[0]; \
+ tt[4] = +e*tr[0]-f*tr[1]-g*tr[2]-h*tr[3]; \
+ tt[5] = +e*tr[1]+f*tr[0]+g*tr[3]-h*tr[2]; \
+ tt[6] = +e*tr[2]-f*tr[3]+g*tr[0]+h*tr[1]; \
+ tt[7] = +e*tr[3]+f*tr[2]-g*tr[1]+h*tr[0]; \
+ \
+ tr *= tr; \
+ \
+ tt *= (mixam/tr.sum()); \
+ \
+ a = tt[0]; \
+ b = tt[1]; \
+ c = tt[2]; \
+ d = tt[3]; \
+ e = tt[4]; \
+ f = tt[5]; \
+ g = tt[6]; \
+ h = tt[7]; \
+ \
+ return(*this); \
+ }
+#else
+ #define BOOST_OCTONION_MEMBER_DIV_GENERATOR_3(type) \
+ octonion<type> & operator /= (::boost::math::quaternion<type> const & rhs) \
+ { \
+ using ::std::valarray; \
+ \
+ valarray<type> tr(4); \
+ \
+ tr[0] = static_cast<type>(rhs.R_component_1()); \
+ tr[1] = static_cast<type>(rhs.R_component_2()); \
+ tr[2] = static_cast<type>(rhs.R_component_3()); \
+ tr[3] = static_cast<type>(rhs.R_component_4()); \
+ \
+ type mixam = static_cast<type>(1)/(abs(tr).max)(); \
+ \
+ tr *= mixam; \
+ \
+ valarray<type> tt(8); \
+ \
+ tt[0] = +a*tr[0]+b*tr[1]+c*tr[2]+d*tr[3]; \
+ tt[1] = -a*tr[1]+b*tr[0]-c*tr[3]+d*tr[2]; \
+ tt[2] = -a*tr[2]+b*tr[3]+c*tr[0]-d*tr[1]; \
+ tt[3] = -a*tr[3]-b*tr[2]+c*tr[1]+d*tr[0]; \
+ tt[4] = +e*tr[0]-f*tr[1]-g*tr[2]-h*tr[3]; \
+ tt[5] = +e*tr[1]+f*tr[0]+g*tr[3]-h*tr[2]; \
+ tt[6] = +e*tr[2]-f*tr[3]+g*tr[0]+h*tr[1]; \
+ tt[7] = +e*tr[3]+f*tr[2]-g*tr[1]+h*tr[0]; \
+ \
+ tr *= tr; \
+ \
+ tt *= (mixam/tr.sum()); \
+ \
+ a = tt[0]; \
+ b = tt[1]; \
+ c = tt[2]; \
+ d = tt[3]; \
+ e = tt[4]; \
+ f = tt[5]; \
+ g = tt[6]; \
+ h = tt[7]; \
+ \
+ return(*this); \
+ }
+#endif /* defined(__GNUC__) && (__GNUC__ < 3) */ /* BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP */
+
+#if defined(__GNUC__) && (__GNUC__ < 3)
+ #define BOOST_OCTONION_MEMBER_DIV_GENERATOR_4(type) \
+ template<typename X> \
+ octonion<type> & operator /= (octonion<X> const & rhs) \
+ { \
+ using ::std::valarray; \
+ \
+ valarray<type> tr(8); \
+ \
+ tr[0] = static_cast<type>(rhs.R_component_1()); \
+ tr[1] = static_cast<type>(rhs.R_component_2()); \
+ tr[2] = static_cast<type>(rhs.R_component_3()); \
+ tr[3] = static_cast<type>(rhs.R_component_4()); \
+ tr[4] = static_cast<type>(rhs.R_component_5()); \
+ tr[5] = static_cast<type>(rhs.R_component_6()); \
+ tr[6] = static_cast<type>(rhs.R_component_7()); \
+ tr[7] = static_cast<type>(rhs.R_component_8()); \
+ \
+ type mixam = (BOOST_GET_VALARRAY(type,static_cast<type>(1)/abs(tr)).max)();\
+ \
+ tr *= mixam; \
+ \
+ valarray<type> tt(8); \
+ \
+ tt[0] = +a*tr[0]+b*tr[1]+c*tr[2]+d*tr[3]+e*tr[4]+f*tr[5]+g*tr[6]+h*tr[7]; \
+ tt[1] = -a*tr[1]+b*tr[0]-c*tr[3]+d*tr[2]-e*tr[5]+f*tr[4]+g*tr[7]-h*tr[6]; \
+ tt[2] = -a*tr[2]+b*tr[3]+c*tr[0]-d*tr[1]-e*tr[6]-f*tr[7]+g*tr[4]+h*tr[5]; \
+ tt[3] = -a*tr[3]-b*tr[2]+c*tr[1]+d*tr[0]-e*tr[7]+f*tr[6]-g*tr[5]+h*tr[4]; \
+ tt[4] = -a*tr[4]+b*tr[5]+c*tr[6]+d*tr[7]+e*tr[0]-f*tr[1]-g*tr[2]-h*tr[3]; \
+ tt[5] = -a*tr[5]-b*tr[4]+c*tr[7]-d*tr[6]+e*tr[1]+f*tr[0]+g*tr[3]-h*tr[2]; \
+ tt[6] = -a*tr[6]-b*tr[7]-c*tr[4]+d*tr[5]+e*tr[2]-f*tr[3]+g*tr[0]+h*tr[1]; \
+ tt[7] = -a*tr[7]+b*tr[6]-c*tr[5]-d*tr[4]+e*tr[3]+f*tr[2]-g*tr[1]+h*tr[0]; \
+ \
+ tr *= tr; \
+ \
+ tt *= (mixam/tr.sum()); \
+ \
+ a = tt[0]; \
+ b = tt[1]; \
+ c = tt[2]; \
+ d = tt[3]; \
+ e = tt[4]; \
+ f = tt[5]; \
+ g = tt[6]; \
+ h = tt[7]; \
+ \
+ return(*this); \
+ }
+#elif defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP)
+ #define BOOST_OCTONION_MEMBER_DIV_GENERATOR_4(type) \
+ template<typename X> \
+ octonion<type> & operator /= (octonion<X> const & rhs) \
+ { \
+ using ::std::valarray; \
+ using ::std::abs; \
+ \
+ valarray<type> tr(8); \
+ \
+ tr[0] = static_cast<type>(rhs.R_component_1()); \
+ tr[1] = static_cast<type>(rhs.R_component_2()); \
+ tr[2] = static_cast<type>(rhs.R_component_3()); \
+ tr[3] = static_cast<type>(rhs.R_component_4()); \
+ tr[4] = static_cast<type>(rhs.R_component_5()); \
+ tr[5] = static_cast<type>(rhs.R_component_6()); \
+ tr[6] = static_cast<type>(rhs.R_component_7()); \
+ tr[7] = static_cast<type>(rhs.R_component_8()); \
+ \
+ type mixam = static_cast<type>(1)/(abs(tr).max)(); \
+ \
+ tr *= mixam; \
+ \
+ valarray<type> tt(8); \
+ \
+ tt[0] = +a*tr[0]+b*tr[1]+c*tr[2]+d*tr[3]+e*tr[4]+f*tr[5]+g*tr[6]+h*tr[7]; \
+ tt[1] = -a*tr[1]+b*tr[0]-c*tr[3]+d*tr[2]-e*tr[5]+f*tr[4]+g*tr[7]-h*tr[6]; \
+ tt[2] = -a*tr[2]+b*tr[3]+c*tr[0]-d*tr[1]-e*tr[6]-f*tr[7]+g*tr[4]+h*tr[5]; \
+ tt[3] = -a*tr[3]-b*tr[2]+c*tr[1]+d*tr[0]-e*tr[7]+f*tr[6]-g*tr[5]+h*tr[4]; \
+ tt[4] = -a*tr[4]+b*tr[5]+c*tr[6]+d*tr[7]+e*tr[0]-f*tr[1]-g*tr[2]-h*tr[3]; \
+ tt[5] = -a*tr[5]-b*tr[4]+c*tr[7]-d*tr[6]+e*tr[1]+f*tr[0]+g*tr[3]-h*tr[2]; \
+ tt[6] = -a*tr[6]-b*tr[7]-c*tr[4]+d*tr[5]+e*tr[2]-f*tr[3]+g*tr[0]+h*tr[1]; \
+ tt[7] = -a*tr[7]+b*tr[6]-c*tr[5]-d*tr[4]+e*tr[3]+f*tr[2]-g*tr[1]+h*tr[0]; \
+ \
+ tr *= tr; \
+ \
+ tt *= (mixam/tr.sum()); \
+ \
+ a = tt[0]; \
+ b = tt[1]; \
+ c = tt[2]; \
+ d = tt[3]; \
+ e = tt[4]; \
+ f = tt[5]; \
+ g = tt[6]; \
+ h = tt[7]; \
+ \
+ return(*this); \
+ }
+#else
+ #define BOOST_OCTONION_MEMBER_DIV_GENERATOR_4(type) \
+ template<typename X> \
+ octonion<type> & operator /= (octonion<X> const & rhs) \
+ { \
+ using ::std::valarray; \
+ \
+ valarray<type> tr(8); \
+ \
+ tr[0] = static_cast<type>(rhs.R_component_1()); \
+ tr[1] = static_cast<type>(rhs.R_component_2()); \
+ tr[2] = static_cast<type>(rhs.R_component_3()); \
+ tr[3] = static_cast<type>(rhs.R_component_4()); \
+ tr[4] = static_cast<type>(rhs.R_component_5()); \
+ tr[5] = static_cast<type>(rhs.R_component_6()); \
+ tr[6] = static_cast<type>(rhs.R_component_7()); \
+ tr[7] = static_cast<type>(rhs.R_component_8()); \
+ \
+ type mixam = static_cast<type>(1)/(abs(tr).max)(); \
+ \
+ tr *= mixam; \
+ \
+ valarray<type> tt(8); \
+ \
+ tt[0] = +a*tr[0]+b*tr[1]+c*tr[2]+d*tr[3]+e*tr[4]+f*tr[5]+g*tr[6]+h*tr[7]; \
+ tt[1] = -a*tr[1]+b*tr[0]-c*tr[3]+d*tr[2]-e*tr[5]+f*tr[4]+g*tr[7]-h*tr[6]; \
+ tt[2] = -a*tr[2]+b*tr[3]+c*tr[0]-d*tr[1]-e*tr[6]-f*tr[7]+g*tr[4]+h*tr[5]; \
+ tt[3] = -a*tr[3]-b*tr[2]+c*tr[1]+d*tr[0]-e*tr[7]+f*tr[6]-g*tr[5]+h*tr[4]; \
+ tt[4] = -a*tr[4]+b*tr[5]+c*tr[6]+d*tr[7]+e*tr[0]-f*tr[1]-g*tr[2]-h*tr[3]; \
+ tt[5] = -a*tr[5]-b*tr[4]+c*tr[7]-d*tr[6]+e*tr[1]+f*tr[0]+g*tr[3]-h*tr[2]; \
+ tt[6] = -a*tr[6]-b*tr[7]-c*tr[4]+d*tr[5]+e*tr[2]-f*tr[3]+g*tr[0]+h*tr[1]; \
+ tt[7] = -a*tr[7]+b*tr[6]-c*tr[5]-d*tr[4]+e*tr[3]+f*tr[2]-g*tr[1]+h*tr[0]; \
+ \
+ tr *= tr; \
+ \
+ tt *= (mixam/tr.sum()); \
+ \
+ a = tt[0]; \
+ b = tt[1]; \
+ c = tt[2]; \
+ d = tt[3]; \
+ e = tt[4]; \
+ f = tt[5]; \
+ g = tt[6]; \
+ h = tt[7]; \
+ \
+ return(*this); \
+ }
+#endif /* defined(__GNUC__) && (__GNUC__ < 3) */ /* BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP */
+
+
+#define BOOST_OCTONION_MEMBER_ADD_GENERATOR(type) \
+ BOOST_OCTONION_MEMBER_ADD_GENERATOR_1(type) \
+ BOOST_OCTONION_MEMBER_ADD_GENERATOR_2(type) \
+ BOOST_OCTONION_MEMBER_ADD_GENERATOR_3(type) \
+ BOOST_OCTONION_MEMBER_ADD_GENERATOR_4(type)
+
+#define BOOST_OCTONION_MEMBER_SUB_GENERATOR(type) \
+ BOOST_OCTONION_MEMBER_SUB_GENERATOR_1(type) \
+ BOOST_OCTONION_MEMBER_SUB_GENERATOR_2(type) \
+ BOOST_OCTONION_MEMBER_SUB_GENERATOR_3(type) \
+ BOOST_OCTONION_MEMBER_SUB_GENERATOR_4(type)
+
+#define BOOST_OCTONION_MEMBER_MUL_GENERATOR(type) \
+ BOOST_OCTONION_MEMBER_MUL_GENERATOR_1(type) \
+ BOOST_OCTONION_MEMBER_MUL_GENERATOR_2(type) \
+ BOOST_OCTONION_MEMBER_MUL_GENERATOR_3(type) \
+ BOOST_OCTONION_MEMBER_MUL_GENERATOR_4(type)
+
+#define BOOST_OCTONION_MEMBER_DIV_GENERATOR(type) \
+ BOOST_OCTONION_MEMBER_DIV_GENERATOR_1(type) \
+ BOOST_OCTONION_MEMBER_DIV_GENERATOR_2(type) \
+ BOOST_OCTONION_MEMBER_DIV_GENERATOR_3(type) \
+ BOOST_OCTONION_MEMBER_DIV_GENERATOR_4(type)
+
+#define BOOST_OCTONION_MEMBER_ALGEBRAIC_GENERATOR(type) \
+ BOOST_OCTONION_MEMBER_ADD_GENERATOR(type) \
+ BOOST_OCTONION_MEMBER_SUB_GENERATOR(type) \
+ BOOST_OCTONION_MEMBER_MUL_GENERATOR(type) \
+ BOOST_OCTONION_MEMBER_DIV_GENERATOR(type)
+
+
+ template<>
+ class octonion<float>
+ {
+ public:
+
+ typedef float value_type;
+
+ BOOST_OCTONION_CONSTRUCTOR_GENERATOR(float)
+
+ // UNtemplated copy constructor
+ // (this is taken care of by the compiler itself)
+
+ // explicit copy constructors (precision-loosing converters)
+
+ explicit octonion(octonion<double> const & a_recopier)
+ {
+ *this = detail::octonion_type_converter<float, double>(a_recopier);
+ }
+
+ explicit octonion(octonion<long double> const & a_recopier)
+ {
+ *this = detail::octonion_type_converter<float, long double>(a_recopier);
+ }
+
+ // destructor
+ // (this is taken care of by the compiler itself)
+
+ // accessors
+ //
+ // Note: Like complex number, octonions do have a meaningful notion of "real part",
+ // but unlike them there is no meaningful notion of "imaginary part".
+ // Instead there is an "unreal part" which itself is an octonion, and usually
+ // nothing simpler (as opposed to the complex number case).
+ // However, for practicallity, there are accessors for the other components
+ // (these are necessary for the templated copy constructor, for instance).
+
+ BOOST_OCTONION_ACCESSOR_GENERATOR(float)
+
+ // assignment operators
+
+ BOOST_OCTONION_MEMBER_ASSIGNMENT_GENERATOR(float)
+
+ // other assignment-related operators
+ //
+ // NOTE: Octonion multiplication is *NOT* commutative;
+ // symbolically, "q *= rhs;" means "q = q * rhs;"
+ // and "q /= rhs;" means "q = q * inverse_of(rhs);";
+ // octonion multiplication is also *NOT* associative
+
+ BOOST_OCTONION_MEMBER_ALGEBRAIC_GENERATOR(float)
+
+
+ protected:
+
+ BOOST_OCTONION_MEMBER_DATA_GENERATOR(float)
+
+
+ private:
+
+ };
+
+
+ template<>
+ class octonion<double>
+ {
+ public:
+
+ typedef double value_type;
+
+ BOOST_OCTONION_CONSTRUCTOR_GENERATOR(double)
+
+ // UNtemplated copy constructor
+ // (this is taken care of by the compiler itself)
+
+ // converting copy constructor
+
+ explicit octonion(octonion<float> const & a_recopier)
+ {
+ *this = detail::octonion_type_converter<double, float>(a_recopier);
+ }
+
+ // explicit copy constructors (precision-loosing converters)
+
+ explicit octonion(octonion<long double> const & a_recopier)
+ {
+ *this = detail::octonion_type_converter<double, long double>(a_recopier);
+ }
+
+ // destructor
+ // (this is taken care of by the compiler itself)
+
+ // accessors
+ //
+ // Note: Like complex number, octonions do have a meaningful notion of "real part",
+ // but unlike them there is no meaningful notion of "imaginary part".
+ // Instead there is an "unreal part" which itself is an octonion, and usually
+ // nothing simpler (as opposed to the complex number case).
+ // However, for practicallity, there are accessors for the other components
+ // (these are necessary for the templated copy constructor, for instance).
+
+ BOOST_OCTONION_ACCESSOR_GENERATOR(double)
+
+ // assignment operators
+
+ BOOST_OCTONION_MEMBER_ASSIGNMENT_GENERATOR(double)
+
+ // other assignment-related operators
+ //
+ // NOTE: Octonion multiplication is *NOT* commutative;
+ // symbolically, "q *= rhs;" means "q = q * rhs;"
+ // and "q /= rhs;" means "q = q * inverse_of(rhs);";
+ // octonion multiplication is also *NOT* associative
+
+ BOOST_OCTONION_MEMBER_ALGEBRAIC_GENERATOR(double)
+
+
+ protected:
+
+ BOOST_OCTONION_MEMBER_DATA_GENERATOR(double)
+
+
+ private:
+
+ };
+
+
+ template<>
+ class octonion<long double>
+ {
+ public:
+
+ typedef long double value_type;
+
+ BOOST_OCTONION_CONSTRUCTOR_GENERATOR(long double)
+
+ // UNtemplated copy constructor
+ // (this is taken care of by the compiler itself)
+
+ // converting copy constructor
+
+ explicit octonion(octonion<float> const & a_recopier)
+ {
+ *this = detail::octonion_type_converter<long double, float>(a_recopier);
+ }
+
+
+ explicit octonion(octonion<double> const & a_recopier)
+ {
+ *this = detail::octonion_type_converter<long double, double>(a_recopier);
+ }
+
+
+ // destructor
+ // (this is taken care of by the compiler itself)
+
+ // accessors
+ //
+ // Note: Like complex number, octonions do have a meaningful notion of "real part",
+ // but unlike them there is no meaningful notion of "imaginary part".
+ // Instead there is an "unreal part" which itself is an octonion, and usually
+ // nothing simpler (as opposed to the complex number case).
+ // However, for practicallity, there are accessors for the other components
+ // (these are necessary for the templated copy constructor, for instance).
+
+ BOOST_OCTONION_ACCESSOR_GENERATOR(long double)
+
+ // assignment operators
+
+ BOOST_OCTONION_MEMBER_ASSIGNMENT_GENERATOR(long double)
+
+ // other assignment-related operators
+ //
+ // NOTE: Octonion multiplication is *NOT* commutative;
+ // symbolically, "q *= rhs;" means "q = q * rhs;"
+ // and "q /= rhs;" means "q = q * inverse_of(rhs);";
+ // octonion multiplication is also *NOT* associative
+
+ BOOST_OCTONION_MEMBER_ALGEBRAIC_GENERATOR(long double)
+
+
+ protected:
+
+ BOOST_OCTONION_MEMBER_DATA_GENERATOR(long double)
+
+
+ private:
+
+ };
+
+
+#undef BOOST_OCTONION_CONSTRUCTOR_GENERATOR
+
+#undef BOOST_OCTONION_MEMBER_ALGEBRAIC_GENERATOR
+
+#undef BOOST_OCTONION_MEMBER_ADD_GENERATOR
+#undef BOOST_OCTONION_MEMBER_SUB_GENERATOR
+#undef BOOST_OCTONION_MEMBER_MUL_GENERATOR
+#undef BOOST_OCTONION_MEMBER_DIV_GENERATOR
+
+#undef BOOST_OCTONION_MEMBER_ADD_GENERATOR_1
+#undef BOOST_OCTONION_MEMBER_ADD_GENERATOR_2
+#undef BOOST_OCTONION_MEMBER_ADD_GENERATOR_3
+#undef BOOST_OCTONION_MEMBER_ADD_GENERATOR_4
+#undef BOOST_OCTONION_MEMBER_SUB_GENERATOR_1
+#undef BOOST_OCTONION_MEMBER_SUB_GENERATOR_2
+#undef BOOST_OCTONION_MEMBER_SUB_GENERATOR_3
+#undef BOOST_OCTONION_MEMBER_SUB_GENERATOR_4
+#undef BOOST_OCTONION_MEMBER_MUL_GENERATOR_1
+#undef BOOST_OCTONION_MEMBER_MUL_GENERATOR_2
+#undef BOOST_OCTONION_MEMBER_MUL_GENERATOR_3
+#undef BOOST_OCTONION_MEMBER_MUL_GENERATOR_4
+#undef BOOST_OCTONION_MEMBER_DIV_GENERATOR_1
+#undef BOOST_OCTONION_MEMBER_DIV_GENERATOR_2
+#undef BOOST_OCTONION_MEMBER_DIV_GENERATOR_3
+#undef BOOST_OCTONION_MEMBER_DIV_GENERATOR_4
+
+
+#undef BOOST_OCTONION_MEMBER_DATA_GENERATOR
+
+#undef BOOST_OCTONION_MEMBER_ASSIGNMENT_GENERATOR
+
+#undef BOOST_OCTONION_ACCESSOR_GENERATOR
+
+
+ // operators
+
+#define BOOST_OCTONION_OPERATOR_GENERATOR_BODY(op) \
+ { \
+ octonion<T> res(lhs); \
+ res op##= rhs; \
+ return(res); \
+ }
+
+#define BOOST_OCTONION_OPERATOR_GENERATOR_1_L(op) \
+ template<typename T> \
+ inline octonion<T> operator op (T const & lhs, octonion<T> const & rhs) \
+ BOOST_OCTONION_OPERATOR_GENERATOR_BODY(op)
+
+#define BOOST_OCTONION_OPERATOR_GENERATOR_1_R(op) \
+ template<typename T> \
+ inline octonion<T> operator op (octonion<T> const & lhs, T const & rhs) \
+ BOOST_OCTONION_OPERATOR_GENERATOR_BODY(op)
+
+#define BOOST_OCTONION_OPERATOR_GENERATOR_2_L(op) \
+ template<typename T> \
+ inline octonion<T> operator op (::std::complex<T> const & lhs, octonion<T> const & rhs) \
+ BOOST_OCTONION_OPERATOR_GENERATOR_BODY(op)
+
+#define BOOST_OCTONION_OPERATOR_GENERATOR_2_R(op) \
+ template<typename T> \
+ inline octonion<T> operator op (octonion<T> const & lhs, ::std::complex<T> const & rhs) \
+ BOOST_OCTONION_OPERATOR_GENERATOR_BODY(op)
+
+#define BOOST_OCTONION_OPERATOR_GENERATOR_3_L(op) \
+ template<typename T> \
+ inline octonion<T> operator op (::boost::math::quaternion<T> const & lhs, octonion<T> const & rhs) \
+ BOOST_OCTONION_OPERATOR_GENERATOR_BODY(op)
+
+#define BOOST_OCTONION_OPERATOR_GENERATOR_3_R(op) \
+ template<typename T> \
+ inline octonion<T> operator op (octonion<T> const & lhs, ::boost::math::quaternion<T> const & rhs) \
+ BOOST_OCTONION_OPERATOR_GENERATOR_BODY(op)
+
+#define BOOST_OCTONION_OPERATOR_GENERATOR_4(op) \
+ template<typename T> \
+ inline octonion<T> operator op (octonion<T> const & lhs, octonion<T> const & rhs) \
+ BOOST_OCTONION_OPERATOR_GENERATOR_BODY(op)
+
+#define BOOST_OCTONION_OPERATOR_GENERATOR(op) \
+ BOOST_OCTONION_OPERATOR_GENERATOR_1_L(op) \
+ BOOST_OCTONION_OPERATOR_GENERATOR_1_R(op) \
+ BOOST_OCTONION_OPERATOR_GENERATOR_2_L(op) \
+ BOOST_OCTONION_OPERATOR_GENERATOR_2_R(op) \
+ BOOST_OCTONION_OPERATOR_GENERATOR_3_L(op) \
+ BOOST_OCTONION_OPERATOR_GENERATOR_3_R(op) \
+ BOOST_OCTONION_OPERATOR_GENERATOR_4(op)
+
+
+ BOOST_OCTONION_OPERATOR_GENERATOR(+)
+ BOOST_OCTONION_OPERATOR_GENERATOR(-)
+ BOOST_OCTONION_OPERATOR_GENERATOR(*)
+ BOOST_OCTONION_OPERATOR_GENERATOR(/)
+
+
+#undef BOOST_OCTONION_OPERATOR_GENERATOR
+
+#undef BOOST_OCTONION_OPERATOR_GENERATOR_1_L
+#undef BOOST_OCTONION_OPERATOR_GENERATOR_1_R
+#undef BOOST_OCTONION_OPERATOR_GENERATOR_2_L
+#undef BOOST_OCTONION_OPERATOR_GENERATOR_2_R
+#undef BOOST_OCTONION_OPERATOR_GENERATOR_3_L
+#undef BOOST_OCTONION_OPERATOR_GENERATOR_3_R
+#undef BOOST_OCTONION_OPERATOR_GENERATOR_4
+
+#undef BOOST_OCTONION_OPERATOR_GENERATOR_BODY
+
+
+ template<typename T>
+ inline octonion<T> operator + (octonion<T> const & o)
+ {
+ return(o);
+ }
+
+
+ template<typename T>
+ inline octonion<T> operator - (octonion<T> const & o)
+ {
+ return(octonion<T>(-o.R_component_1(),-o.R_component_2(),-o.R_component_3(),-o.R_component_4(),-o.R_component_5(),-o.R_component_6(),-o.R_component_7(),-o.R_component_8()));
+ }
+
+
+ template<typename T>
+ inline bool operator == (T const & lhs, octonion<T> const & rhs)
+ {
+ return(
+ (rhs.R_component_1() == lhs)&&
+ (rhs.R_component_2() == static_cast<T>(0))&&
+ (rhs.R_component_3() == static_cast<T>(0))&&
+ (rhs.R_component_4() == static_cast<T>(0))&&
+ (rhs.R_component_5() == static_cast<T>(0))&&
+ (rhs.R_component_6() == static_cast<T>(0))&&
+ (rhs.R_component_7() == static_cast<T>(0))&&
+ (rhs.R_component_8() == static_cast<T>(0))
+ );
+ }
+
+
+ template<typename T>
+ inline bool operator == (octonion<T> const & lhs, T const & rhs)
+ {
+ return(
+ (lhs.R_component_1() == rhs)&&
+ (lhs.R_component_2() == static_cast<T>(0))&&
+ (lhs.R_component_3() == static_cast<T>(0))&&
+ (lhs.R_component_4() == static_cast<T>(0))&&
+ (lhs.R_component_5() == static_cast<T>(0))&&
+ (lhs.R_component_6() == static_cast<T>(0))&&
+ (lhs.R_component_7() == static_cast<T>(0))&&
+ (lhs.R_component_8() == static_cast<T>(0))
+ );
+ }
+
+
+ template<typename T>
+ inline bool operator == (::std::complex<T> const & lhs, octonion<T> const & rhs)
+ {
+ return(
+ (rhs.R_component_1() == lhs.real())&&
+ (rhs.R_component_2() == lhs.imag())&&
+ (rhs.R_component_3() == static_cast<T>(0))&&
+ (rhs.R_component_4() == static_cast<T>(0))&&
+ (rhs.R_component_5() == static_cast<T>(0))&&
+ (rhs.R_component_6() == static_cast<T>(0))&&
+ (rhs.R_component_7() == static_cast<T>(0))&&
+ (rhs.R_component_8() == static_cast<T>(0))
+ );
+ }
+
+
+ template<typename T>
+ inline bool operator == (octonion<T> const & lhs, ::std::complex<T> const & rhs)
+ {
+ return(
+ (lhs.R_component_1() == rhs.real())&&
+ (lhs.R_component_2() == rhs.imag())&&
+ (lhs.R_component_3() == static_cast<T>(0))&&
+ (lhs.R_component_4() == static_cast<T>(0))&&
+ (lhs.R_component_5() == static_cast<T>(0))&&
+ (lhs.R_component_6() == static_cast<T>(0))&&
+ (lhs.R_component_7() == static_cast<T>(0))&&
+ (lhs.R_component_8() == static_cast<T>(0))
+ );
+ }
+
+
+ template<typename T>
+ inline bool operator == (::boost::math::quaternion<T> const & lhs, octonion<T> const & rhs)
+ {
+ return(
+ (rhs.R_component_1() == lhs.R_component_1())&&
+ (rhs.R_component_2() == lhs.R_component_2())&&
+ (rhs.R_component_3() == lhs.R_component_3())&&
+ (rhs.R_component_4() == lhs.R_component_4())&&
+ (rhs.R_component_5() == static_cast<T>(0))&&
+ (rhs.R_component_6() == static_cast<T>(0))&&
+ (rhs.R_component_7() == static_cast<T>(0))&&
+ (rhs.R_component_8() == static_cast<T>(0))
+ );
+ }
+
+
+ template<typename T>
+ inline bool operator == (octonion<T> const & lhs, ::boost::math::quaternion<T> const & rhs)
+ {
+ return(
+ (lhs.R_component_1() == rhs.R_component_1())&&
+ (lhs.R_component_2() == rhs.R_component_2())&&
+ (lhs.R_component_3() == rhs.R_component_3())&&
+ (lhs.R_component_4() == rhs.R_component_4())&&
+ (lhs.R_component_5() == static_cast<T>(0))&&
+ (lhs.R_component_6() == static_cast<T>(0))&&
+ (lhs.R_component_7() == static_cast<T>(0))&&
+ (lhs.R_component_8() == static_cast<T>(0))
+ );
+ }
+
+
+ template<typename T>
+ inline bool operator == (octonion<T> const & lhs, octonion<T> const & rhs)
+ {
+ return(
+ (rhs.R_component_1() == lhs.R_component_1())&&
+ (rhs.R_component_2() == lhs.R_component_2())&&
+ (rhs.R_component_3() == lhs.R_component_3())&&
+ (rhs.R_component_4() == lhs.R_component_4())&&
+ (rhs.R_component_5() == lhs.R_component_5())&&
+ (rhs.R_component_6() == lhs.R_component_6())&&
+ (rhs.R_component_7() == lhs.R_component_7())&&
+ (rhs.R_component_8() == lhs.R_component_8())
+ );
+ }
+
+
+#define BOOST_OCTONION_NOT_EQUAL_GENERATOR \
+ { \
+ return(!(lhs == rhs)); \
+ }
+
+ template<typename T>
+ inline bool operator != (T const & lhs, octonion<T> const & rhs)
+ BOOST_OCTONION_NOT_EQUAL_GENERATOR
+
+ template<typename T>
+ inline bool operator != (octonion<T> const & lhs, T const & rhs)
+ BOOST_OCTONION_NOT_EQUAL_GENERATOR
+
+ template<typename T>
+ inline bool operator != (::std::complex<T> const & lhs, octonion<T> const & rhs)
+ BOOST_OCTONION_NOT_EQUAL_GENERATOR
+
+ template<typename T>
+ inline bool operator != (octonion<T> const & lhs, ::std::complex<T> const & rhs)
+ BOOST_OCTONION_NOT_EQUAL_GENERATOR
+
+ template<typename T>
+ inline bool operator != (::boost::math::quaternion<T> const & lhs, octonion<T> const & rhs)
+ BOOST_OCTONION_NOT_EQUAL_GENERATOR
+
+ template<typename T>
+ inline bool operator != (octonion<T> const & lhs, ::boost::math::quaternion<T> const & rhs)
+ BOOST_OCTONION_NOT_EQUAL_GENERATOR
+
+ template<typename T>
+ inline bool operator != (octonion<T> const & lhs, octonion<T> const & rhs)
+ BOOST_OCTONION_NOT_EQUAL_GENERATOR
+
+ #undef BOOST_OCTONION_NOT_EQUAL_GENERATOR
+
+
+ // Note: the default values in the constructors of the complex and quaternions make for
+ // a very complex and ambiguous situation; we have made choices to disambiguate.
+
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ template<typename T>
+ ::std::istream & operator >> ( ::std::istream & is,
+ octonion<T>& o)
+#else
+ template<typename T, typename charT, class traits>
+ ::std::basic_istream<charT,traits> & operator >> ( ::std::basic_istream<charT,traits> & is,
+ octonion<T> & o)
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ typedef char charT;
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+
+#ifdef BOOST_NO_STD_LOCALE
+#else
+ const ::std::ctype<charT> & ct = ::std::use_facet< ::std::ctype<charT> >(is.getloc());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ T a = T();
+ T b = T();
+ T c = T();
+ T d = T();
+ T e = T();
+ T f = T();
+ T g = T();
+ T h = T();
+
+ ::std::complex<T> u = ::std::complex<T>();
+ ::std::complex<T> v = ::std::complex<T>();
+ ::std::complex<T> x = ::std::complex<T>();
+ ::std::complex<T> y = ::std::complex<T>();
+
+ ::boost::math::quaternion<T> p = ::boost::math::quaternion<T>();
+ ::boost::math::quaternion<T> q = ::boost::math::quaternion<T>();
+
+ charT ch = charT();
+ char cc;
+
+ is >> ch; // get the first lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == '(') // read "("
+ {
+ is >> ch; // get the second lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == '(') // read "(("
+ {
+ is >> ch; // get the third lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == '(') // read "((("
+ {
+ is.putback(ch);
+
+ is >> u; // read "((u"
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "((u)"
+ {
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // format: (((a))), (((a,b)))
+ {
+ o = octonion<T>(u);
+ }
+ else if (cc == ',') // read "((u),"
+ {
+ p = ::boost::math::quaternion<T>(u);
+
+ is >> q; // read "((u),q"
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // format: (((a)),q), (((a,b)),q)
+ {
+ o = octonion<T>(p,q);
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else if (cc ==',') // read "((u,"
+ {
+ is >> v; // read "((u,v"
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "((u,v)"
+ {
+ p = ::boost::math::quaternion<T>(u,v);
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // format: (((a),v)), (((a,b),v))
+ {
+ o = octonion<T>(p);
+ }
+ else if (cc == ',') // read "((u,v),"
+ {
+ is >> q; // read "(p,q"
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // format: (((a),v),q), (((a,b),v),q)
+ {
+ o = octonion<T>(p,q);
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // read "((a"
+ {
+ is.putback(ch);
+
+ is >> a; // we extract the first component
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "((a)"
+ {
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "((a))"
+ {
+ o = octonion<T>(a);
+ }
+ else if (cc == ',') // read "((a),"
+ {
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == '(') // read "((a),("
+ {
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == '(') // read "((a),(("
+ {
+ is.putback(ch);
+
+ is.putback(ch); // we backtrack twice, with the same value!
+
+ is >> q; // read "((a),q"
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "((a),q)"
+ {
+ p = ::boost::math::quaternion<T>(a);
+
+ o = octonion<T>(p,q);
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // read "((a),(c" or "((a),(e"
+ {
+ is.putback(ch);
+
+ is >> c;
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "((a),(c)" (ambiguity resolution)
+ {
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "((a),(c))"
+ {
+ o = octonion<T>(a,b,c);
+ }
+ else if (cc == ',') // read "((a),(c),"
+ {
+ u = ::std::complex<T>(a);
+
+ v = ::std::complex<T>(c);
+
+ is >> x; // read "((a),(c),x"
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "((a),(c),x)"
+ {
+ o = octonion<T>(u,v,x);
+ }
+ else if (cc == ',') // read "((a),(c),x,"
+ {
+ is >> y; // read "((a),(c),x,y"
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "((a),(c),x,y)"
+ {
+ o = octonion<T>(u,v,x,y);
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else if (cc == ',') // read "((a),(c," or "((a),(e,"
+ {
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == '(') // read "((a),(e,(" (ambiguity resolution)
+ {
+ p = ::boost::math::quaternion<T>(a);
+
+ x = ::std::complex<T>(c); // "c" was actually "e"
+
+ is.putback(ch); // we can only backtrace once
+
+ is >> y; // read "((a),(e,y"
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "((a),(e,y)"
+ {
+ q = ::boost::math::quaternion<T>(x,y);
+
+ is >> ch; // get the next lexeme
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "((a),(e,y))"
+ {
+ o = octonion<T>(p,q);
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // read "((a),(c,d" or "((a),(e,f"
+ {
+ is.putback(ch);
+
+ is >> d;
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "((a),(c,d)" (ambiguity resolution)
+ {
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "((a),(c,d))"
+ {
+ o = octonion<T>(a,b,c,d);
+ }
+ else if (cc == ',') // read "((a),(c,d),"
+ {
+ u = ::std::complex<T>(a);
+
+ v = ::std::complex<T>(c,d);
+
+ is >> x; // read "((a),(c,d),x"
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "((a),(c,d),x)"
+ {
+ o = octonion<T>(u,v,x);
+ }
+ else if (cc == ',') // read "((a),(c,d),x,"
+ {
+ is >> y; // read "((a),(c,d),x,y"
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "((a),(c,d),x,y)"
+ {
+ o = octonion<T>(u,v,x,y);
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else if (cc == ',') // read "((a),(e,f," (ambiguity resolution)
+ {
+ p = ::boost::math::quaternion<T>(a);
+
+ is >> g; // read "((a),(e,f,g" (too late to backtrack)
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "((a),(e,f,g)"
+ {
+ q = ::boost::math::quaternion<T>(c,d,g); // "c" was actually "e", and "d" was actually "f"
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "((a),(e,f,g))"
+ {
+ o = octonion<T>(p,q);
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else if (cc == ',') // read "((a),(e,f,g,"
+ {
+ is >> h; // read "((a),(e,f,g,h"
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "((a),(e,f,g,h)"
+ {
+ q = ::boost::math::quaternion<T>(c,d,g,h); // "c" was actually "e", and "d" was actually "f"
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "((a),(e,f,g,h))"
+ {
+ o = octonion<T>(p,q);
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ }
+ else // read "((a),c" (ambiguity resolution)
+ {
+ is.putback(ch);
+
+ is >> c; // we extract the third component
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "((a),c)"
+ {
+ o = octonion<T>(a,b,c);
+ }
+ else if (cc == ',') // read "((a),c,"
+ {
+ is >> x; // read "((a),c,x"
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "((a),c,x)"
+ {
+ o = octonion<T>(a,b,c,d,x.real(),x.imag());
+ }
+ else if (cc == ',') // read "((a),c,x,"
+ {
+ is >> y;if (!is.good()) goto finish; // read "((a),c,x,y"
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "((a),c,x,y)"
+ {
+ o = octonion<T>(a,b,c,d,x.real(),x.imag(),y.real(),y.imag());
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else if (cc ==',') // read "((a,"
+ {
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == '(') // read "((a,("
+ {
+ u = ::std::complex<T>(a);
+
+ is.putback(ch); // can only backtrack so much
+
+ is >> v; // read "((a,v"
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "((a,v)"
+ {
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "((a,v))"
+ {
+ o = octonion<T>(u,v);
+ }
+ else if (cc == ',') // read "((a,v),"
+ {
+ p = ::boost::math::quaternion<T>(u,v);
+
+ is >> q; // read "((a,v),q"
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "((a,v),q)"
+ {
+ o = octonion<T>(p,q);
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else
+ {
+ is.putback(ch);
+
+ is >> b; // read "((a,b"
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "((a,b)"
+ {
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "((a,b))"
+ {
+ o = octonion<T>(a,b);
+ }
+ else if (cc == ',') // read "((a,b),"
+ {
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == '(') // read "((a,b),("
+ {
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == '(') // read "((a,b),(("
+ {
+ p = ::boost::math::quaternion<T>(a,b);
+
+ is.putback(ch);
+
+ is.putback(ch); // we backtrack twice, with the same value
+
+ is >> q; // read "((a,b),q"
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "((a,b),q)"
+ {
+ o = octonion<T>(p,q);
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // read "((a,b),(c" or "((a,b),(e"
+ {
+ is.putback(ch);
+
+ is >> c;
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "((a,b),(c)" (ambiguity resolution)
+ {
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "((a,b),(c))"
+ {
+ o = octonion<T>(a,b,c);
+ }
+ else if (cc == ',') // read "((a,b),(c),"
+ {
+ u = ::std::complex<T>(a,b);
+
+ v = ::std::complex<T>(c);
+
+ is >> x; // read "((a,b),(c),x"
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "((a,b),(c),x)"
+ {
+ o = octonion<T>(u,v,x);
+ }
+ else if (cc == ',') // read "((a,b),(c),x,"
+ {
+ is >> y; // read "((a,b),(c),x,y"
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "((a,b),(c),x,y)"
+ {
+ o = octonion<T>(u,v,x,y);
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else if (cc == ',') // read "((a,b),(c," or "((a,b),(e,"
+ {
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == '(') // read "((a,b),(e,(" (ambiguity resolution)
+ {
+ u = ::std::complex<T>(a,b);
+
+ x = ::std::complex<T>(c); // "c" is actually "e"
+
+ is.putback(ch);
+
+ is >> y; // read "((a,b),(e,y"
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "((a,b),(e,y)"
+ {
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "((a,b),(e,y))"
+ {
+ o = octonion<T>(u,v,x,y);
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // read "((a,b),(c,d" or "((a,b),(e,f"
+ {
+ is.putback(ch);
+
+ is >> d;
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "((a,b),(c,d)" (ambiguity resolution)
+ {
+ u = ::std::complex<T>(a,b);
+
+ v = ::std::complex<T>(c,d);
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "((a,b),(c,d))"
+ {
+ o = octonion<T>(u,v);
+ }
+ else if (cc == ',') // read "((a,b),(c,d),"
+ {
+ is >> x; // read "((a,b),(c,d),x
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "((a,b),(c,d),x)"
+ {
+ o = octonion<T>(u,v,x);
+ }
+ else if (cc == ',') // read "((a,b),(c,d),x,"
+ {
+ is >> y; // read "((a,b),(c,d),x,y"
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "((a,b),(c,d),x,y)"
+ {
+ o = octonion<T>(u,v,x,y);
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else if (cc == ',') // read "((a,b),(e,f," (ambiguity resolution)
+ {
+ p = ::boost::math::quaternion<T>(a,b); // too late to backtrack
+
+ is >> g; // read "((a,b),(e,f,g"
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "((a,b),(e,f,g)"
+ {
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "((a,b),(e,f,g))"
+ {
+ q = ::boost::math::quaternion<T>(c,d,g); // "c" is actually "e" and "d" is actually "f"
+
+ o = octonion<T>(p,q);
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else if (cc == ',') // read "((a,b),(e,f,g,"
+ {
+ is >> h; // read "((a,b),(e,f,g,h"
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "((a,b),(e,f,g,h)"
+ {
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read ((a,b),(e,f,g,h))"
+ {
+ q = ::boost::math::quaternion<T>(c,d,g,h); // "c" is actually "e" and "d" is actually "f"
+
+ o = octonion<T>(p,q);
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else if (cc == ',') // read "((a,b,"
+ {
+ is >> c; // read "((a,b,c"
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "((a,b,c)"
+ {
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "((a,b,c))"
+ {
+ o = octonion<T>(a,b,c);
+ }
+ else if (cc == ',') // read "((a,b,c),"
+ {
+ p = ::boost::math::quaternion<T>(a,b,c);
+
+ is >> q; // read "((a,b,c),q"
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "((a,b,c),q)"
+ {
+ o = octonion<T>(p,q);
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else if (cc == ',') // read "((a,b,c,"
+ {
+ is >> d; // read "((a,b,c,d"
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "((a,b,c,d)"
+ {
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "((a,b,c,d))"
+ {
+ o = octonion<T>(a,b,c,d);
+ }
+ else if (cc == ',') // read "((a,b,c,d),"
+ {
+ p = ::boost::math::quaternion<T>(a,b,c,d);
+
+ is >> q; // read "((a,b,c,d),q"
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "((a,b,c,d),q)"
+ {
+ o = octonion<T>(p,q);
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ }
+ else // read "(a"
+ {
+ is.putback(ch);
+
+ is >> a; // we extract the first component
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "(a)"
+ {
+ o = octonion<T>(a);
+ }
+ else if (cc == ',') // read "(a,"
+ {
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == '(') // read "(a,("
+ {
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == '(') // read "(a,(("
+ {
+ p = ::boost::math::quaternion<T>(a);
+
+ is.putback(ch);
+
+ is.putback(ch); // we backtrack twice, with the same value
+
+ is >> q; // read "(a,q"
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "(a,q)"
+ {
+ o = octonion<T>(p,q);
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // read "(a,(c" or "(a,(e"
+ {
+ is.putback(ch);
+
+ is >> c;
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "(a,(c)" (ambiguity resolution)
+ {
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "(a,(c))"
+ {
+ o = octonion<T>(a,b,c);
+ }
+ else if (cc == ',') // read "(a,(c),"
+ {
+ u = ::std::complex<T>(a);
+
+ v = ::std::complex<T>(c);
+
+ is >> x; // read "(a,(c),x"
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "(a,(c),x)"
+ {
+ o = octonion<T>(u,v,x);
+ }
+ else if (cc == ',') // read "(a,(c),x,"
+ {
+ is >> y; // read "(a,(c),x,y"
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "(a,(c),x,y)"
+ {
+ o = octonion<T>(u,v,x,y);
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else if (cc == ',') // read "(a,(c," or "(a,(e,"
+ {
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == '(') // read "(a,(e,(" (ambiguity resolution)
+ {
+ u = ::std::complex<T>(a);
+
+ x = ::std::complex<T>(c); // "c" is actually "e"
+
+ is.putback(ch); // we backtrack
+
+ is >> y; // read "(a,(e,y"
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "(a,(e,y)"
+ {
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "(a,(e,y))"
+ {
+ o = octonion<T>(u,v,x,y);
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // read "(a,(c,d" or "(a,(e,f"
+ {
+ is.putback(ch);
+
+ is >> d;
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "(a,(c,d)" (ambiguity resolution)
+ {
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "(a,(c,d))"
+ {
+ o = octonion<T>(a,b,c,d);
+ }
+ else if (cc == ',') // read "(a,(c,d),"
+ {
+ u = ::std::complex<T>(a);
+
+ v = ::std::complex<T>(c,d);
+
+ is >> x; // read "(a,(c,d),x"
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "(a,(c,d),x)"
+ {
+ o = octonion<T>(u,v,x);
+ }
+ else if (cc == ',') // read "(a,(c,d),x,"
+ {
+ is >> y; // read "(a,(c,d),x,y"
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "(a,(c,d),x,y)"
+ {
+ o = octonion<T>(u,v,x,y);
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else if (cc == ',') // read "(a,(e,f," (ambiguity resolution)
+ {
+ p = ::boost::math::quaternion<T>(a);
+
+ is >> g; // read "(a,(e,f,g"
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "(a,(e,f,g)"
+ {
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "(a,(e,f,g))"
+ {
+ q = ::boost::math::quaternion<T>(c,d,g); // "c" is actually "e" and "d" is actually "f"
+
+ o = octonion<T>(p,q);
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else if (cc == ',') // read "(a,(e,f,g,"
+ {
+ is >> h; // read "(a,(e,f,g,h"
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "(a,(e,f,g,h)"
+ {
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "(a,(e,f,g,h))"
+ {
+ q = ::boost::math::quaternion<T>(c,d,g,h); // "c" is actually "e" and "d" is actually "f"
+
+ o = octonion<T>(p,q);
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ }
+ else // read "(a,b" or "(a,c" (ambiguity resolution)
+ {
+ is.putback(ch);
+
+ is >> b;
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "(a,b)" (ambiguity resolution)
+ {
+ o = octonion<T>(a,b);
+ }
+ else if (cc == ',') // read "(a,b," or "(a,c,"
+ {
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == '(') // read "(a,c,(" (ambiguity resolution)
+ {
+ u = ::std::complex<T>(a);
+
+ v = ::std::complex<T>(b); // "b" is actually "c"
+
+ is.putback(ch); // we backtrack
+
+ is >> x; // read "(a,c,x"
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "(a,c,x)"
+ {
+ o = octonion<T>(u,v,x);
+ }
+ else if (cc == ',') // read "(a,c,x,"
+ {
+ is >> y; // read "(a,c,x,y" // read "(a,c,x"
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "(a,c,x,y)"
+ {
+ o = octonion<T>(u,v,x,y);
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // read "(a,b,c" or "(a,c,e"
+ {
+ is.putback(ch);
+
+ is >> c;
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "(a,b,c)" (ambiguity resolution)
+ {
+ o = octonion<T>(a,b,c);
+ }
+ else if (cc == ',') // read "(a,b,c," or "(a,c,e,"
+ {
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == '(') // read "(a,c,e,(") (ambiguity resolution)
+ {
+ u = ::std::complex<T>(a);
+
+ v = ::std::complex<T>(b); // "b" is actually "c"
+
+ x = ::std::complex<T>(c); // "c" is actually "e"
+
+ is.putback(ch); // we backtrack
+
+ is >> y; // read "(a,c,e,y"
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "(a,c,e,y)"
+ {
+ o = octonion<T>(u,v,x,y);
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // read "(a,b,c,d" (ambiguity resolution)
+ {
+ is.putback(ch); // we backtrack
+
+ is >> d;
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "(a,b,c,d)"
+ {
+ o = octonion<T>(a,b,c,d);
+ }
+ else if (cc == ',') // read "(a,b,c,d,"
+ {
+ is >> e; // read "(a,b,c,d,e"
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "(a,b,c,d,e)"
+ {
+ o = octonion<T>(a,b,c,d,e);
+ }
+ else if (cc == ',') // read "(a,b,c,d,e,"
+ {
+ is >> f; // read "(a,b,c,d,e,f"
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "(a,b,c,d,e,f)"
+ {
+ o = octonion<T>(a,b,c,d,e,f);
+ }
+ else if (cc == ',') // read "(a,b,c,d,e,f,"
+ {
+ is >> g; // read "(a,b,c,d,e,f,g" // read "(a,b,c,d,e,f"
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "(a,b,c,d,e,f,g)"
+ {
+ o = octonion<T>(a,b,c,d,e,f,g);
+ }
+ else if (cc == ',') // read "(a,b,c,d,e,f,g,"
+ {
+ is >> h; // read "(a,b,c,d,e,f,g,h" // read "(a,b,c,d,e,f,g" // read "(a,b,c,d,e,f"
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // read "(a,b,c,d,e,f,g,h)"
+ {
+ o = octonion<T>(a,b,c,d,e,f,g,h);
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ }
+ else // format: a
+ {
+ is.putback(ch);
+
+ is >> a; // we extract the first component
+
+ if (!is.good()) goto finish;
+
+ o = octonion<T>(a);
+ }
+
+ finish:
+ return(is);
+ }
+
+
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ template<typename T>
+ ::std::ostream & operator << ( ::std::ostream & os,
+ octonion<T> const & o)
+#else
+ template<typename T, typename charT, class traits>
+ ::std::basic_ostream<charT,traits> & operator << ( ::std::basic_ostream<charT,traits> & os,
+ octonion<T> const & o)
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ ::std::ostringstream s;
+#else
+ ::std::basic_ostringstream<charT,traits> s;
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+
+ s.flags(os.flags());
+#ifdef BOOST_NO_STD_LOCALE
+#else
+ s.imbue(os.getloc());
+#endif /* BOOST_NO_STD_LOCALE */
+ s.precision(os.precision());
+
+ s << '(' << o.R_component_1() << ','
+ << o.R_component_2() << ','
+ << o.R_component_3() << ','
+ << o.R_component_4() << ','
+ << o.R_component_5() << ','
+ << o.R_component_6() << ','
+ << o.R_component_7() << ','
+ << o.R_component_8() << ')';
+
+ return os << s.str();
+ }
+
+
+ // values
+
+ template<typename T>
+ inline T real(octonion<T> const & o)
+ {
+ return(o.real());
+ }
+
+
+ template<typename T>
+ inline octonion<T> unreal(octonion<T> const & o)
+ {
+ return(o.unreal());
+ }
+
+
+#define BOOST_OCTONION_VALARRAY_LOADER \
+ using ::std::valarray; \
+ \
+ valarray<T> temp(8); \
+ \
+ temp[0] = o.R_component_1(); \
+ temp[1] = o.R_component_2(); \
+ temp[2] = o.R_component_3(); \
+ temp[3] = o.R_component_4(); \
+ temp[4] = o.R_component_5(); \
+ temp[5] = o.R_component_6(); \
+ temp[6] = o.R_component_7(); \
+ temp[7] = o.R_component_8();
+
+
+ template<typename T>
+ inline T sup(octonion<T> const & o)
+ {
+#ifdef BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
+ using ::std::abs;
+#endif /* BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP */
+
+ BOOST_OCTONION_VALARRAY_LOADER
+
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ return((BOOST_GET_VALARRAY(T, abs(temp)).max)());
+#else
+ return((abs(temp).max)());
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+
+
+ template<typename T>
+ inline T l1(octonion<T> const & o)
+ {
+#ifdef BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
+ using ::std::abs;
+#endif /* BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP */
+
+ BOOST_OCTONION_VALARRAY_LOADER
+
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ return(BOOST_GET_VALARRAY(T, abs(temp)).sum());
+#else
+ return(abs(temp).sum());
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+
+
+ template<typename T>
+ inline T abs(const octonion<T> & o)
+ {
+#ifdef BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
+ using ::std::abs;
+#endif /* BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP */
+
+ using ::std::sqrt;
+
+ BOOST_OCTONION_VALARRAY_LOADER
+
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ T maxim = (BOOST_GET_VALARRAY(T,abs(temp)).max)(); // overflow protection
+#else
+ T maxim = (abs(temp).max)(); // overflow protection
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+
+ if (maxim == static_cast<T>(0))
+ {
+ return(maxim);
+ }
+ else
+ {
+ T mixam = static_cast<T>(1)/maxim; // prefer multiplications over divisions
+
+ temp *= mixam;
+
+ temp *= temp;
+
+ return(maxim*sqrt(temp.sum()));
+ }
+
+ //return(::std::sqrt(norm(o)));
+ }
+
+
+#undef BOOST_OCTONION_VALARRAY_LOADER
+
+
+ // Note: This is the Cayley norm, not the Euclidian norm...
+
+ template<typename T>
+ inline T norm(octonion<T> const & o)
+ {
+ return(real(o*conj(o)));
+ }
+
+
+ template<typename T>
+ inline octonion<T> conj(octonion<T> const & o)
+ {
+ return(octonion<T>( +o.R_component_1(),
+ -o.R_component_2(),
+ -o.R_component_3(),
+ -o.R_component_4(),
+ -o.R_component_5(),
+ -o.R_component_6(),
+ -o.R_component_7(),
+ -o.R_component_8()));
+ }
+
+
+ // Note: There is little point, for the octonions, to introduce the equivalents
+ // to the complex "arg" and the quaternionic "cylindropolar".
+
+
+ template<typename T>
+ inline octonion<T> spherical(T const & rho,
+ T const & theta,
+ T const & phi1,
+ T const & phi2,
+ T const & phi3,
+ T const & phi4,
+ T const & phi5,
+ T const & phi6)
+ {
+ using ::std::cos;
+ using ::std::sin;
+
+ //T a = cos(theta)*cos(phi1)*cos(phi2)*cos(phi3)*cos(phi4)*cos(phi5)*cos(phi6);
+ //T b = sin(theta)*cos(phi1)*cos(phi2)*cos(phi3)*cos(phi4)*cos(phi5)*cos(phi6);
+ //T c = sin(phi1)*cos(phi2)*cos(phi3)*cos(phi4)*cos(phi5)*cos(phi6);
+ //T d = sin(phi2)*cos(phi3)*cos(phi4)*cos(phi5)*cos(phi6);
+ //T e = sin(phi3)*cos(phi4)*cos(phi5)*cos(phi6);
+ //T f = sin(phi4)*cos(phi5)*cos(phi6);
+ //T g = sin(phi5)*cos(phi6);
+ //T h = sin(phi6);
+
+ T courrant = static_cast<T>(1);
+
+ T h = sin(phi6);
+
+ courrant *= cos(phi6);
+
+ T g = sin(phi5)*courrant;
+
+ courrant *= cos(phi5);
+
+ T f = sin(phi4)*courrant;
+
+ courrant *= cos(phi4);
+
+ T e = sin(phi3)*courrant;
+
+ courrant *= cos(phi3);
+
+ T d = sin(phi2)*courrant;
+
+ courrant *= cos(phi2);
+
+ T c = sin(phi1)*courrant;
+
+ courrant *= cos(phi1);
+
+ T b = sin(theta)*courrant;
+ T a = cos(theta)*courrant;
+
+ return(rho*octonion<T>(a,b,c,d,e,f,g,h));
+ }
+
+
+ template<typename T>
+ inline octonion<T> multipolar(T const & rho1,
+ T const & theta1,
+ T const & rho2,
+ T const & theta2,
+ T const & rho3,
+ T const & theta3,
+ T const & rho4,
+ T const & theta4)
+ {
+ using ::std::cos;
+ using ::std::sin;
+
+ T a = rho1*cos(theta1);
+ T b = rho1*sin(theta1);
+ T c = rho2*cos(theta2);
+ T d = rho2*sin(theta2);
+ T e = rho3*cos(theta3);
+ T f = rho3*sin(theta3);
+ T g = rho4*cos(theta4);
+ T h = rho4*sin(theta4);
+
+ return(octonion<T>(a,b,c,d,e,f,g,h));
+ }
+
+
+ template<typename T>
+ inline octonion<T> cylindrical(T const & r,
+ T const & angle,
+ T const & h1,
+ T const & h2,
+ T const & h3,
+ T const & h4,
+ T const & h5,
+ T const & h6)
+ {
+ using ::std::cos;
+ using ::std::sin;
+
+ T a = r*cos(angle);
+ T b = r*sin(angle);
+
+ return(octonion<T>(a,b,h1,h2,h3,h4,h5,h6));
+ }
+
+
+ template<typename T>
+ inline octonion<T> exp(octonion<T> const & o)
+ {
+ using ::std::exp;
+ using ::std::cos;
+
+ using ::boost::math::sinc_pi;
+
+ T u = exp(real(o));
+
+ T z = abs(unreal(o));
+
+ T w = sinc_pi(z);
+
+ return(u*octonion<T>(cos(z),
+ w*o.R_component_2(), w*o.R_component_3(),
+ w*o.R_component_4(), w*o.R_component_5(),
+ w*o.R_component_6(), w*o.R_component_7(),
+ w*o.R_component_8()));
+ }
+
+
+ template<typename T>
+ inline octonion<T> cos(octonion<T> const & o)
+ {
+ using ::std::sin;
+ using ::std::cos;
+ using ::std::cosh;
+
+ using ::boost::math::sinhc_pi;
+
+ T z = abs(unreal(o));
+
+ T w = -sin(o.real())*sinhc_pi(z);
+
+ return(octonion<T>(cos(o.real())*cosh(z),
+ w*o.R_component_2(), w*o.R_component_3(),
+ w*o.R_component_4(), w*o.R_component_5(),
+ w*o.R_component_6(), w*o.R_component_7(),
+ w*o.R_component_8()));
+ }
+
+
+ template<typename T>
+ inline octonion<T> sin(octonion<T> const & o)
+ {
+ using ::std::sin;
+ using ::std::cos;
+ using ::std::cosh;
+
+ using ::boost::math::sinhc_pi;
+
+ T z = abs(unreal(o));
+
+ T w = +cos(o.real())*sinhc_pi(z);
+
+ return(octonion<T>(sin(o.real())*cosh(z),
+ w*o.R_component_2(), w*o.R_component_3(),
+ w*o.R_component_4(), w*o.R_component_5(),
+ w*o.R_component_6(), w*o.R_component_7(),
+ w*o.R_component_8()));
+ }
+
+
+ template<typename T>
+ inline octonion<T> tan(octonion<T> const & o)
+ {
+ return(sin(o)/cos(o));
+ }
+
+
+ template<typename T>
+ inline octonion<T> cosh(octonion<T> const & o)
+ {
+ return((exp(+o)+exp(-o))/static_cast<T>(2));
+ }
+
+
+ template<typename T>
+ inline octonion<T> sinh(octonion<T> const & o)
+ {
+ return((exp(+o)-exp(-o))/static_cast<T>(2));
+ }
+
+
+ template<typename T>
+ inline octonion<T> tanh(octonion<T> const & o)
+ {
+ return(sinh(o)/cosh(o));
+ }
+
+
+ template<typename T>
+ octonion<T> pow(octonion<T> const & o,
+ int n)
+ {
+ if (n > 1)
+ {
+ int m = n>>1;
+
+ octonion<T> result = pow(o, m);
+
+ result *= result;
+
+ if (n != (m<<1))
+ {
+ result *= o; // n odd
+ }
+
+ return(result);
+ }
+ else if (n == 1)
+ {
+ return(o);
+ }
+ else if (n == 0)
+ {
+ return(octonion<T>(1));
+ }
+ else /* n < 0 */
+ {
+ return(pow(octonion<T>(1)/o,-n));
+ }
+ }
+
+
+ // helper templates for converting copy constructors (definition)
+
+ namespace detail
+ {
+
+ template< typename T,
+ typename U
+ >
+ octonion<T> octonion_type_converter(octonion<U> const & rhs)
+ {
+ return(octonion<T>( static_cast<T>(rhs.R_component_1()),
+ static_cast<T>(rhs.R_component_2()),
+ static_cast<T>(rhs.R_component_3()),
+ static_cast<T>(rhs.R_component_4()),
+ static_cast<T>(rhs.R_component_5()),
+ static_cast<T>(rhs.R_component_6()),
+ static_cast<T>(rhs.R_component_7()),
+ static_cast<T>(rhs.R_component_8())));
+ }
+ }
+ }
+}
+
+
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ #undef BOOST_GET_VALARRAY
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+
+
+#endif /* BOOST_OCTONION_HPP */
diff --git a/boost/boost/math/quaternion.hpp b/boost/boost/math/quaternion.hpp
new file mode 100644
index 00000000000..bbccce1b67c
--- /dev/null
+++ b/boost/boost/math/quaternion.hpp
@@ -0,0 +1,1924 @@
+// boost quaternion.hpp header file
+
+// (C) Copyright Hubert Holin 2001.
+// 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 updates, documentation, and revision history.
+
+#ifndef BOOST_QUATERNION_HPP
+#define BOOST_QUATERNION_HPP
+
+
+#include <complex>
+#include <iosfwd> // for the "<<" and ">>" operators
+#include <sstream> // for the "<<" operator
+
+#include <boost/config.hpp> // for BOOST_NO_STD_LOCALE
+#include <boost/detail/workaround.hpp>
+#ifndef BOOST_NO_STD_LOCALE
+ #include <locale> // for the "<<" operator
+#endif /* BOOST_NO_STD_LOCALE */
+
+#include <valarray>
+
+
+
+#include <boost/math/special_functions/sinc.hpp> // for the Sinus cardinal
+#include <boost/math/special_functions/sinhc.hpp> // for the Hyperbolic Sinus cardinal
+
+
+namespace boost
+{
+ namespace math
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ // gcc 2.95.x uses expression templates for valarray calculations, but
+ // the result is not conforming. We need BOOST_GET_VALARRAY to get an
+ // actual valarray result when we need to call a member function
+ #define BOOST_GET_VALARRAY(T,x) ::std::valarray<T>(x)
+ // gcc 2.95.x has an "std::ios" class that is similar to
+ // "std::ios_base", so we just use a #define
+ #define BOOST_IOS_BASE ::std::ios
+ // gcc 2.x ignores function scope using declarations,
+ // put them in the scope of the enclosing namespace instead:
+ using ::std::valarray;
+ using ::std::sqrt;
+ using ::std::cos;
+ using ::std::sin;
+ using ::std::exp;
+ using ::std::cosh;
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+
+#define BOOST_QUATERNION_ACCESSOR_GENERATOR(type) \
+ type real() const \
+ { \
+ return(a); \
+ } \
+ \
+ quaternion<type> unreal() const \
+ { \
+ return(quaternion<type>(static_cast<type>(0),b,c,d)); \
+ } \
+ \
+ type R_component_1() const \
+ { \
+ return(a); \
+ } \
+ \
+ type R_component_2() const \
+ { \
+ return(b); \
+ } \
+ \
+ type R_component_3() const \
+ { \
+ return(c); \
+ } \
+ \
+ type R_component_4() const \
+ { \
+ return(d); \
+ } \
+ \
+ ::std::complex<type> C_component_1() const \
+ { \
+ return(::std::complex<type>(a,b)); \
+ } \
+ \
+ ::std::complex<type> C_component_2() const \
+ { \
+ return(::std::complex<type>(c,d)); \
+ }
+
+
+#define BOOST_QUATERNION_MEMBER_ASSIGNMENT_GENERATOR(type) \
+ template<typename X> \
+ quaternion<type> & operator = (quaternion<X> const & a_affecter) \
+ { \
+ a = static_cast<type>(a_affecter.R_component_1()); \
+ b = static_cast<type>(a_affecter.R_component_2()); \
+ c = static_cast<type>(a_affecter.R_component_3()); \
+ d = static_cast<type>(a_affecter.R_component_4()); \
+ \
+ return(*this); \
+ } \
+ \
+ quaternion<type> & operator = (quaternion<type> const & a_affecter) \
+ { \
+ a = a_affecter.a; \
+ b = a_affecter.b; \
+ c = a_affecter.c; \
+ d = a_affecter.d; \
+ \
+ return(*this); \
+ } \
+ \
+ quaternion<type> & operator = (type const & a_affecter) \
+ { \
+ a = a_affecter; \
+ \
+ b = c = d = static_cast<type>(0); \
+ \
+ return(*this); \
+ } \
+ \
+ quaternion<type> & operator = (::std::complex<type> const & a_affecter) \
+ { \
+ a = a_affecter.real(); \
+ b = a_affecter.imag(); \
+ \
+ c = d = static_cast<type>(0); \
+ \
+ return(*this); \
+ }
+
+
+#define BOOST_QUATERNION_MEMBER_DATA_GENERATOR(type) \
+ type a; \
+ type b; \
+ type c; \
+ type d;
+
+
+ template<typename T>
+ class quaternion
+ {
+ public:
+
+ typedef T value_type;
+
+
+ // constructor for H seen as R^4
+ // (also default constructor)
+
+ explicit quaternion( T const & requested_a = T(),
+ T const & requested_b = T(),
+ T const & requested_c = T(),
+ T const & requested_d = T())
+ : a(requested_a),
+ b(requested_b),
+ c(requested_c),
+ d(requested_d)
+ {
+ // nothing to do!
+ }
+
+
+ // constructor for H seen as C^2
+
+ explicit quaternion( ::std::complex<T> const & z0,
+ ::std::complex<T> const & z1 = ::std::complex<T>())
+ : a(z0.real()),
+ b(z0.imag()),
+ c(z1.real()),
+ d(z1.imag())
+ {
+ // nothing to do!
+ }
+
+
+ // UNtemplated copy constructor
+ // (this is taken care of by the compiler itself)
+
+
+ // templated copy constructor
+
+ template<typename X>
+ explicit quaternion(quaternion<X> const & a_recopier)
+ : a(static_cast<T>(a_recopier.R_component_1())),
+ b(static_cast<T>(a_recopier.R_component_2())),
+ c(static_cast<T>(a_recopier.R_component_3())),
+ d(static_cast<T>(a_recopier.R_component_4()))
+ {
+ // nothing to do!
+ }
+
+
+ // destructor
+ // (this is taken care of by the compiler itself)
+
+
+ // accessors
+ //
+ // Note: Like complex number, quaternions do have a meaningful notion of "real part",
+ // but unlike them there is no meaningful notion of "imaginary part".
+ // Instead there is an "unreal part" which itself is a quaternion, and usually
+ // nothing simpler (as opposed to the complex number case).
+ // However, for practicallity, there are accessors for the other components
+ // (these are necessary for the templated copy constructor, for instance).
+
+ BOOST_QUATERNION_ACCESSOR_GENERATOR(T)
+
+ // assignment operators
+
+ BOOST_QUATERNION_MEMBER_ASSIGNMENT_GENERATOR(T)
+
+ // other assignment-related operators
+ //
+ // NOTE: Quaternion multiplication is *NOT* commutative;
+ // symbolically, "q *= rhs;" means "q = q * rhs;"
+ // and "q /= rhs;" means "q = q * inverse_of(rhs);"
+
+ quaternion<T> & operator += (T const & rhs)
+ {
+ T at = a + rhs; // exception guard
+
+ a = at;
+
+ return(*this);
+ }
+
+
+ quaternion<T> & operator += (::std::complex<T> const & rhs)
+ {
+ T at = a + rhs.real(); // exception guard
+ T bt = b + rhs.imag(); // exception guard
+
+ a = at;
+ b = bt;
+
+ return(*this);
+ }
+
+
+ template<typename X>
+ quaternion<T> & operator += (quaternion<X> const & rhs)
+ {
+ T at = a + static_cast<T>(rhs.R_component_1()); // exception guard
+ T bt = b + static_cast<T>(rhs.R_component_2()); // exception guard
+ T ct = c + static_cast<T>(rhs.R_component_3()); // exception guard
+ T dt = d + static_cast<T>(rhs.R_component_4()); // exception guard
+
+ a = at;
+ b = bt;
+ c = ct;
+ d = dt;
+
+ return(*this);
+ }
+
+
+
+ quaternion<T> & operator -= (T const & rhs)
+ {
+ T at = a - rhs; // exception guard
+
+ a = at;
+
+ return(*this);
+ }
+
+
+ quaternion<T> & operator -= (::std::complex<T> const & rhs)
+ {
+ T at = a - rhs.real(); // exception guard
+ T bt = b - rhs.imag(); // exception guard
+
+ a = at;
+ b = bt;
+
+ return(*this);
+ }
+
+
+ template<typename X>
+ quaternion<T> & operator -= (quaternion<X> const & rhs)
+ {
+ T at = a - static_cast<T>(rhs.R_component_1()); // exception guard
+ T bt = b - static_cast<T>(rhs.R_component_2()); // exception guard
+ T ct = c - static_cast<T>(rhs.R_component_3()); // exception guard
+ T dt = d - static_cast<T>(rhs.R_component_4()); // exception guard
+
+ a = at;
+ b = bt;
+ c = ct;
+ d = dt;
+
+ return(*this);
+ }
+
+
+ quaternion<T> & operator *= (T const & rhs)
+ {
+ T at = a * rhs; // exception guard
+ T bt = b * rhs; // exception guard
+ T ct = c * rhs; // exception guard
+ T dt = d * rhs; // exception guard
+
+ a = at;
+ b = bt;
+ c = ct;
+ d = dt;
+
+ return(*this);
+ }
+
+
+ quaternion<T> & operator *= (::std::complex<T> const & rhs)
+ {
+ T ar = rhs.real();
+ T br = rhs.imag();
+
+ T at = +a*ar-b*br;
+ T bt = +a*br+b*ar;
+ T ct = +c*ar+d*br;
+ T dt = -c*br+d*ar;
+
+ a = at;
+ b = bt;
+ c = ct;
+ d = dt;
+
+ return(*this);
+ }
+
+
+ template<typename X>
+ quaternion<T> & operator *= (quaternion<X> const & rhs)
+ {
+ T ar = static_cast<T>(rhs.R_component_1());
+ T br = static_cast<T>(rhs.R_component_2());
+ T cr = static_cast<T>(rhs.R_component_3());
+ T dr = static_cast<T>(rhs.R_component_4());
+
+ T at = +a*ar-b*br-c*cr-d*dr;
+ T bt = +a*br+b*ar+c*dr-d*cr; //(a*br+ar*b)+(c*dr-cr*d);
+ T ct = +a*cr-b*dr+c*ar+d*br; //(a*cr+ar*c)+(d*br-dr*b);
+ T dt = +a*dr+b*cr-c*br+d*ar; //(a*dr+ar*d)+(b*cr-br*c);
+
+ a = at;
+ b = bt;
+ c = ct;
+ d = dt;
+
+ return(*this);
+ }
+
+
+
+ quaternion<T> & operator /= (T const & rhs)
+ {
+ T at = a / rhs; // exception guard
+ T bt = b / rhs; // exception guard
+ T ct = c / rhs; // exception guard
+ T dt = d / rhs; // exception guard
+
+ a = at;
+ b = bt;
+ c = ct;
+ d = dt;
+
+ return(*this);
+ }
+
+
+ quaternion<T> & operator /= (::std::complex<T> const & rhs)
+ {
+ T ar = rhs.real();
+ T br = rhs.imag();
+
+ T denominator = ar*ar+br*br;
+
+ T at = (+a*ar+b*br)/denominator; //(a*ar+b*br)/denominator;
+ T bt = (-a*br+b*ar)/denominator; //(ar*b-a*br)/denominator;
+ T ct = (+c*ar-d*br)/denominator; //(ar*c-d*br)/denominator;
+ T dt = (+c*br+d*ar)/denominator; //(ar*d+br*c)/denominator;
+
+ a = at;
+ b = bt;
+ c = ct;
+ d = dt;
+
+ return(*this);
+ }
+
+
+ template<typename X>
+ quaternion<T> & operator /= (quaternion<X> const & rhs)
+ {
+ T ar = static_cast<T>(rhs.R_component_1());
+ T br = static_cast<T>(rhs.R_component_2());
+ T cr = static_cast<T>(rhs.R_component_3());
+ T dr = static_cast<T>(rhs.R_component_4());
+
+ T denominator = ar*ar+br*br+cr*cr+dr*dr;
+
+ T at = (+a*ar+b*br+c*cr+d*dr)/denominator; //(a*ar+b*br+c*cr+d*dr)/denominator;
+ T bt = (-a*br+b*ar-c*dr+d*cr)/denominator; //((ar*b-a*br)+(cr*d-c*dr))/denominator;
+ T ct = (-a*cr+b*dr+c*ar-d*br)/denominator; //((ar*c-a*cr)+(dr*b-d*br))/denominator;
+ T dt = (-a*dr-b*cr+c*br+d*ar)/denominator; //((ar*d-a*dr)+(br*c-b*cr))/denominator;
+
+ a = at;
+ b = bt;
+ c = ct;
+ d = dt;
+
+ return(*this);
+ }
+
+
+ protected:
+
+ BOOST_QUATERNION_MEMBER_DATA_GENERATOR(T)
+
+
+ private:
+
+ };
+
+
+ // declaration of quaternion specialization
+
+ template<> class quaternion<float>;
+ template<> class quaternion<double>;
+ template<> class quaternion<long double>;
+
+
+ // helper templates for converting copy constructors (declaration)
+
+ namespace detail
+ {
+
+ template< typename T,
+ typename U
+ >
+ quaternion<T> quaternion_type_converter(quaternion<U> const & rhs);
+ }
+
+
+ // implementation of quaternion specialization
+
+
+#define BOOST_QUATERNION_CONSTRUCTOR_GENERATOR(type) \
+ explicit quaternion( type const & requested_a = static_cast<type>(0), \
+ type const & requested_b = static_cast<type>(0), \
+ type const & requested_c = static_cast<type>(0), \
+ type const & requested_d = static_cast<type>(0)) \
+ : a(requested_a), \
+ b(requested_b), \
+ c(requested_c), \
+ d(requested_d) \
+ { \
+ } \
+ \
+ explicit quaternion( ::std::complex<type> const & z0, \
+ ::std::complex<type> const & z1 = ::std::complex<type>()) \
+ : a(z0.real()), \
+ b(z0.imag()), \
+ c(z1.real()), \
+ d(z1.imag()) \
+ { \
+ }
+
+
+#define BOOST_QUATERNION_MEMBER_ADD_GENERATOR_1(type) \
+ quaternion<type> & operator += (type const & rhs) \
+ { \
+ a += rhs; \
+ \
+ return(*this); \
+ }
+
+#define BOOST_QUATERNION_MEMBER_ADD_GENERATOR_2(type) \
+ quaternion<type> & operator += (::std::complex<type> const & rhs) \
+ { \
+ a += rhs.real(); \
+ b += rhs.imag(); \
+ \
+ return(*this); \
+ }
+
+#define BOOST_QUATERNION_MEMBER_ADD_GENERATOR_3(type) \
+ template<typename X> \
+ quaternion<type> & operator += (quaternion<X> const & rhs) \
+ { \
+ a += static_cast<type>(rhs.R_component_1()); \
+ b += static_cast<type>(rhs.R_component_2()); \
+ c += static_cast<type>(rhs.R_component_3()); \
+ d += static_cast<type>(rhs.R_component_4()); \
+ \
+ return(*this); \
+ }
+
+#define BOOST_QUATERNION_MEMBER_SUB_GENERATOR_1(type) \
+ quaternion<type> & operator -= (type const & rhs) \
+ { \
+ a -= rhs; \
+ \
+ return(*this); \
+ }
+
+#define BOOST_QUATERNION_MEMBER_SUB_GENERATOR_2(type) \
+ quaternion<type> & operator -= (::std::complex<type> const & rhs) \
+ { \
+ a -= rhs.real(); \
+ b -= rhs.imag(); \
+ \
+ return(*this); \
+ }
+
+#define BOOST_QUATERNION_MEMBER_SUB_GENERATOR_3(type) \
+ template<typename X> \
+ quaternion<type> & operator -= (quaternion<X> const & rhs) \
+ { \
+ a -= static_cast<type>(rhs.R_component_1()); \
+ b -= static_cast<type>(rhs.R_component_2()); \
+ c -= static_cast<type>(rhs.R_component_3()); \
+ d -= static_cast<type>(rhs.R_component_4()); \
+ \
+ return(*this); \
+ }
+
+#define BOOST_QUATERNION_MEMBER_MUL_GENERATOR_1(type) \
+ quaternion<type> & operator *= (type const & rhs) \
+ { \
+ a *= rhs; \
+ b *= rhs; \
+ c *= rhs; \
+ d *= rhs; \
+ \
+ return(*this); \
+ }
+
+#define BOOST_QUATERNION_MEMBER_MUL_GENERATOR_2(type) \
+ quaternion<type> & operator *= (::std::complex<type> const & rhs) \
+ { \
+ type ar = rhs.real(); \
+ type br = rhs.imag(); \
+ \
+ type at = +a*ar-b*br; \
+ type bt = +a*br+b*ar; \
+ type ct = +c*ar+d*br; \
+ type dt = -c*br+d*ar; \
+ \
+ a = at; \
+ b = bt; \
+ c = ct; \
+ d = dt; \
+ \
+ return(*this); \
+ }
+
+#define BOOST_QUATERNION_MEMBER_MUL_GENERATOR_3(type) \
+ template<typename X> \
+ quaternion<type> & operator *= (quaternion<X> const & rhs) \
+ { \
+ type ar = static_cast<type>(rhs.R_component_1()); \
+ type br = static_cast<type>(rhs.R_component_2()); \
+ type cr = static_cast<type>(rhs.R_component_3()); \
+ type dr = static_cast<type>(rhs.R_component_4()); \
+ \
+ type at = +a*ar-b*br-c*cr-d*dr; \
+ type bt = +a*br+b*ar+c*dr-d*cr; \
+ type ct = +a*cr-b*dr+c*ar+d*br; \
+ type dt = +a*dr+b*cr-c*br+d*ar; \
+ \
+ a = at; \
+ b = bt; \
+ c = ct; \
+ d = dt; \
+ \
+ return(*this); \
+ }
+
+// There is quite a lot of repetition in the code below. This is intentional.
+// The last conditional block is the normal form, and the others merely
+// consist of workarounds for various compiler deficiencies. Hopefuly, when
+// more compilers are conformant and we can retire support for those that are
+// not, we will be able to remove the clutter. This is makes the situation
+// (painfully) explicit.
+
+#define BOOST_QUATERNION_MEMBER_DIV_GENERATOR_1(type) \
+ quaternion<type> & operator /= (type const & rhs) \
+ { \
+ a /= rhs; \
+ b /= rhs; \
+ c /= rhs; \
+ d /= rhs; \
+ \
+ return(*this); \
+ }
+
+#if defined(__GNUC__) && (__GNUC__ < 3)
+ #define BOOST_QUATERNION_MEMBER_DIV_GENERATOR_2(type) \
+ quaternion<type> & operator /= (::std::complex<type> const & rhs) \
+ { \
+ using ::std::valarray; \
+ \
+ valarray<type> tr(2); \
+ \
+ tr[0] = rhs.real(); \
+ tr[1] = rhs.imag(); \
+ \
+ type mixam = (BOOST_GET_VALARRAY(type,static_cast<type>(1)/abs(tr)).max)(); \
+ \
+ tr *= mixam; \
+ \
+ valarray<type> tt(4); \
+ \
+ tt[0] = +a*tr[0]+b*tr[1]; \
+ tt[1] = -a*tr[1]+b*tr[0]; \
+ tt[2] = +c*tr[0]-d*tr[1]; \
+ tt[3] = +c*tr[1]+d*tr[0]; \
+ \
+ tr *= tr; \
+ \
+ tt *= (mixam/tr.sum()); \
+ \
+ a = tt[0]; \
+ b = tt[1]; \
+ c = tt[2]; \
+ d = tt[3]; \
+ \
+ return(*this); \
+ }
+#elif defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP)
+ #define BOOST_QUATERNION_MEMBER_DIV_GENERATOR_2(type) \
+ quaternion<type> & operator /= (::std::complex<type> const & rhs) \
+ { \
+ using ::std::valarray; \
+ using ::std::abs; \
+ \
+ valarray<type> tr(2); \
+ \
+ tr[0] = rhs.real(); \
+ tr[1] = rhs.imag(); \
+ \
+ type mixam = static_cast<type>(1)/(abs(tr).max)(); \
+ \
+ tr *= mixam; \
+ \
+ valarray<type> tt(4); \
+ \
+ tt[0] = +a*tr[0]+b*tr[1]; \
+ tt[1] = -a*tr[1]+b*tr[0]; \
+ tt[2] = +c*tr[0]-d*tr[1]; \
+ tt[3] = +c*tr[1]+d*tr[0]; \
+ \
+ tr *= tr; \
+ \
+ tt *= (mixam/tr.sum()); \
+ \
+ a = tt[0]; \
+ b = tt[1]; \
+ c = tt[2]; \
+ d = tt[3]; \
+ \
+ return(*this); \
+ }
+#else
+ #define BOOST_QUATERNION_MEMBER_DIV_GENERATOR_2(type) \
+ quaternion<type> & operator /= (::std::complex<type> const & rhs) \
+ { \
+ using ::std::valarray; \
+ \
+ valarray<type> tr(2); \
+ \
+ tr[0] = rhs.real(); \
+ tr[1] = rhs.imag(); \
+ \
+ type mixam = static_cast<type>(1)/(abs(tr).max)(); \
+ \
+ tr *= mixam; \
+ \
+ valarray<type> tt(4); \
+ \
+ tt[0] = +a*tr[0]+b*tr[1]; \
+ tt[1] = -a*tr[1]+b*tr[0]; \
+ tt[2] = +c*tr[0]-d*tr[1]; \
+ tt[3] = +c*tr[1]+d*tr[0]; \
+ \
+ tr *= tr; \
+ \
+ tt *= (mixam/tr.sum()); \
+ \
+ a = tt[0]; \
+ b = tt[1]; \
+ c = tt[2]; \
+ d = tt[3]; \
+ \
+ return(*this); \
+ }
+#endif /* defined(__GNUC__) && (__GNUC__ < 3) */ /* BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP */
+
+#if defined(__GNUC__) && (__GNUC__ < 3)
+ #define BOOST_QUATERNION_MEMBER_DIV_GENERATOR_3(type) \
+ template<typename X> \
+ quaternion<type> & operator /= (quaternion<X> const & rhs) \
+ { \
+ using ::std::valarray; \
+ \
+ valarray<type> tr(4); \
+ \
+ tr[0] = static_cast<type>(rhs.R_component_1()); \
+ tr[1] = static_cast<type>(rhs.R_component_2()); \
+ tr[2] = static_cast<type>(rhs.R_component_3()); \
+ tr[3] = static_cast<type>(rhs.R_component_4()); \
+ \
+ type mixam = (BOOST_GET_VALARRAY(type,static_cast<type>(1)/abs(tr)).max)(); \
+ \
+ tr *= mixam; \
+ \
+ valarray<type> tt(4); \
+ \
+ tt[0] = +a*tr[0]+b*tr[1]+c*tr[2]+d*tr[3]; \
+ tt[1] = -a*tr[1]+b*tr[0]-c*tr[3]+d*tr[2]; \
+ tt[2] = -a*tr[2]+b*tr[3]+c*tr[0]-d*tr[1]; \
+ tt[3] = -a*tr[3]-b*tr[2]+c*tr[1]+d*tr[0]; \
+ \
+ tr *= tr; \
+ \
+ tt *= (mixam/tr.sum()); \
+ \
+ a = tt[0]; \
+ b = tt[1]; \
+ c = tt[2]; \
+ d = tt[3]; \
+ \
+ return(*this); \
+ }
+#elif defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP)
+ #define BOOST_QUATERNION_MEMBER_DIV_GENERATOR_3(type) \
+ template<typename X> \
+ quaternion<type> & operator /= (quaternion<X> const & rhs) \
+ { \
+ using ::std::valarray; \
+ using ::std::abs; \
+ \
+ valarray<type> tr(4); \
+ \
+ tr[0] = static_cast<type>(rhs.R_component_1()); \
+ tr[1] = static_cast<type>(rhs.R_component_2()); \
+ tr[2] = static_cast<type>(rhs.R_component_3()); \
+ tr[3] = static_cast<type>(rhs.R_component_4()); \
+ \
+ type mixam = static_cast<type>(1)/(abs(tr).max)(); \
+ \
+ tr *= mixam; \
+ \
+ valarray<type> tt(4); \
+ \
+ tt[0] = +a*tr[0]+b*tr[1]+c*tr[2]+d*tr[3]; \
+ tt[1] = -a*tr[1]+b*tr[0]-c*tr[3]+d*tr[2]; \
+ tt[2] = -a*tr[2]+b*tr[3]+c*tr[0]-d*tr[1]; \
+ tt[3] = -a*tr[3]-b*tr[2]+c*tr[1]+d*tr[0]; \
+ \
+ tr *= tr; \
+ \
+ tt *= (mixam/tr.sum()); \
+ \
+ a = tt[0]; \
+ b = tt[1]; \
+ c = tt[2]; \
+ d = tt[3]; \
+ \
+ return(*this); \
+ }
+#else
+ #define BOOST_QUATERNION_MEMBER_DIV_GENERATOR_3(type) \
+ template<typename X> \
+ quaternion<type> & operator /= (quaternion<X> const & rhs) \
+ { \
+ using ::std::valarray; \
+ \
+ valarray<type> tr(4); \
+ \
+ tr[0] = static_cast<type>(rhs.R_component_1()); \
+ tr[1] = static_cast<type>(rhs.R_component_2()); \
+ tr[2] = static_cast<type>(rhs.R_component_3()); \
+ tr[3] = static_cast<type>(rhs.R_component_4()); \
+ \
+ type mixam = static_cast<type>(1)/(abs(tr).max)(); \
+ \
+ tr *= mixam; \
+ \
+ valarray<type> tt(4); \
+ \
+ tt[0] = +a*tr[0]+b*tr[1]+c*tr[2]+d*tr[3]; \
+ tt[1] = -a*tr[1]+b*tr[0]-c*tr[3]+d*tr[2]; \
+ tt[2] = -a*tr[2]+b*tr[3]+c*tr[0]-d*tr[1]; \
+ tt[3] = -a*tr[3]-b*tr[2]+c*tr[1]+d*tr[0]; \
+ \
+ tr *= tr; \
+ \
+ tt *= (mixam/tr.sum()); \
+ \
+ a = tt[0]; \
+ b = tt[1]; \
+ c = tt[2]; \
+ d = tt[3]; \
+ \
+ return(*this); \
+ }
+#endif /* defined(__GNUC__) && (__GNUC__ < 3) */ /* BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP */
+
+#define BOOST_QUATERNION_MEMBER_ADD_GENERATOR(type) \
+ BOOST_QUATERNION_MEMBER_ADD_GENERATOR_1(type) \
+ BOOST_QUATERNION_MEMBER_ADD_GENERATOR_2(type) \
+ BOOST_QUATERNION_MEMBER_ADD_GENERATOR_3(type)
+
+#define BOOST_QUATERNION_MEMBER_SUB_GENERATOR(type) \
+ BOOST_QUATERNION_MEMBER_SUB_GENERATOR_1(type) \
+ BOOST_QUATERNION_MEMBER_SUB_GENERATOR_2(type) \
+ BOOST_QUATERNION_MEMBER_SUB_GENERATOR_3(type)
+
+#define BOOST_QUATERNION_MEMBER_MUL_GENERATOR(type) \
+ BOOST_QUATERNION_MEMBER_MUL_GENERATOR_1(type) \
+ BOOST_QUATERNION_MEMBER_MUL_GENERATOR_2(type) \
+ BOOST_QUATERNION_MEMBER_MUL_GENERATOR_3(type)
+
+#define BOOST_QUATERNION_MEMBER_DIV_GENERATOR(type) \
+ BOOST_QUATERNION_MEMBER_DIV_GENERATOR_1(type) \
+ BOOST_QUATERNION_MEMBER_DIV_GENERATOR_2(type) \
+ BOOST_QUATERNION_MEMBER_DIV_GENERATOR_3(type)
+
+#define BOOST_QUATERNION_MEMBER_ALGEBRAIC_GENERATOR(type) \
+ BOOST_QUATERNION_MEMBER_ADD_GENERATOR(type) \
+ BOOST_QUATERNION_MEMBER_SUB_GENERATOR(type) \
+ BOOST_QUATERNION_MEMBER_MUL_GENERATOR(type) \
+ BOOST_QUATERNION_MEMBER_DIV_GENERATOR(type)
+
+
+ template<>
+ class quaternion<float>
+ {
+ public:
+
+ typedef float value_type;
+
+ BOOST_QUATERNION_CONSTRUCTOR_GENERATOR(float)
+
+ // UNtemplated copy constructor
+ // (this is taken care of by the compiler itself)
+
+ // explicit copy constructors (precision-loosing converters)
+
+ explicit quaternion(quaternion<double> const & a_recopier)
+ {
+ *this = detail::quaternion_type_converter<float, double>(a_recopier);
+ }
+
+ explicit quaternion(quaternion<long double> const & a_recopier)
+ {
+ *this = detail::quaternion_type_converter<float, long double>(a_recopier);
+ }
+
+ // destructor
+ // (this is taken care of by the compiler itself)
+
+ // accessors
+ //
+ // Note: Like complex number, quaternions do have a meaningful notion of "real part",
+ // but unlike them there is no meaningful notion of "imaginary part".
+ // Instead there is an "unreal part" which itself is a quaternion, and usually
+ // nothing simpler (as opposed to the complex number case).
+ // However, for practicallity, there are accessors for the other components
+ // (these are necessary for the templated copy constructor, for instance).
+
+ BOOST_QUATERNION_ACCESSOR_GENERATOR(float)
+
+ // assignment operators
+
+ BOOST_QUATERNION_MEMBER_ASSIGNMENT_GENERATOR(float)
+
+ // other assignment-related operators
+ //
+ // NOTE: Quaternion multiplication is *NOT* commutative;
+ // symbolically, "q *= rhs;" means "q = q * rhs;"
+ // and "q /= rhs;" means "q = q * inverse_of(rhs);"
+
+ BOOST_QUATERNION_MEMBER_ALGEBRAIC_GENERATOR(float)
+
+
+ protected:
+
+ BOOST_QUATERNION_MEMBER_DATA_GENERATOR(float)
+
+
+ private:
+
+ };
+
+
+ template<>
+ class quaternion<double>
+ {
+ public:
+
+ typedef double value_type;
+
+ BOOST_QUATERNION_CONSTRUCTOR_GENERATOR(double)
+
+ // UNtemplated copy constructor
+ // (this is taken care of by the compiler itself)
+
+ // converting copy constructor
+
+ explicit quaternion(quaternion<float> const & a_recopier)
+ {
+ *this = detail::quaternion_type_converter<double, float>(a_recopier);
+ }
+
+ // explicit copy constructors (precision-loosing converters)
+
+ explicit quaternion(quaternion<long double> const & a_recopier)
+ {
+ *this = detail::quaternion_type_converter<double, long double>(a_recopier);
+ }
+
+ // destructor
+ // (this is taken care of by the compiler itself)
+
+ // accessors
+ //
+ // Note: Like complex number, quaternions do have a meaningful notion of "real part",
+ // but unlike them there is no meaningful notion of "imaginary part".
+ // Instead there is an "unreal part" which itself is a quaternion, and usually
+ // nothing simpler (as opposed to the complex number case).
+ // However, for practicallity, there are accessors for the other components
+ // (these are necessary for the templated copy constructor, for instance).
+
+ BOOST_QUATERNION_ACCESSOR_GENERATOR(double)
+
+ // assignment operators
+
+ BOOST_QUATERNION_MEMBER_ASSIGNMENT_GENERATOR(double)
+
+ // other assignment-related operators
+ //
+ // NOTE: Quaternion multiplication is *NOT* commutative;
+ // symbolically, "q *= rhs;" means "q = q * rhs;"
+ // and "q /= rhs;" means "q = q * inverse_of(rhs);"
+
+ BOOST_QUATERNION_MEMBER_ALGEBRAIC_GENERATOR(double)
+
+
+ protected:
+
+ BOOST_QUATERNION_MEMBER_DATA_GENERATOR(double)
+
+
+ private:
+
+ };
+
+
+ template<>
+ class quaternion<long double>
+ {
+ public:
+
+ typedef long double value_type;
+
+ BOOST_QUATERNION_CONSTRUCTOR_GENERATOR(long double)
+
+ // UNtemplated copy constructor
+ // (this is taken care of by the compiler itself)
+
+ // converting copy constructors
+
+ explicit quaternion(quaternion<float> const & a_recopier)
+ {
+ *this = detail::quaternion_type_converter<long double, float>(a_recopier);
+ }
+
+ explicit quaternion(quaternion<double> const & a_recopier)
+ {
+ *this = detail::quaternion_type_converter<long double, double>(a_recopier);
+ }
+
+ // destructor
+ // (this is taken care of by the compiler itself)
+
+ // accessors
+ //
+ // Note: Like complex number, quaternions do have a meaningful notion of "real part",
+ // but unlike them there is no meaningful notion of "imaginary part".
+ // Instead there is an "unreal part" which itself is a quaternion, and usually
+ // nothing simpler (as opposed to the complex number case).
+ // However, for practicallity, there are accessors for the other components
+ // (these are necessary for the templated copy constructor, for instance).
+
+ BOOST_QUATERNION_ACCESSOR_GENERATOR(long double)
+
+ // assignment operators
+
+ BOOST_QUATERNION_MEMBER_ASSIGNMENT_GENERATOR(long double)
+
+ // other assignment-related operators
+ //
+ // NOTE: Quaternion multiplication is *NOT* commutative;
+ // symbolically, "q *= rhs;" means "q = q * rhs;"
+ // and "q /= rhs;" means "q = q * inverse_of(rhs);"
+
+ BOOST_QUATERNION_MEMBER_ALGEBRAIC_GENERATOR(long double)
+
+
+ protected:
+
+ BOOST_QUATERNION_MEMBER_DATA_GENERATOR(long double)
+
+
+ private:
+
+ };
+
+
+#undef BOOST_QUATERNION_MEMBER_ALGEBRAIC_GENERATOR
+#undef BOOST_QUATERNION_MEMBER_ADD_GENERATOR
+#undef BOOST_QUATERNION_MEMBER_SUB_GENERATOR
+#undef BOOST_QUATERNION_MEMBER_MUL_GENERATOR
+#undef BOOST_QUATERNION_MEMBER_DIV_GENERATOR
+#undef BOOST_QUATERNION_MEMBER_ADD_GENERATOR_1
+#undef BOOST_QUATERNION_MEMBER_ADD_GENERATOR_2
+#undef BOOST_QUATERNION_MEMBER_ADD_GENERATOR_3
+#undef BOOST_QUATERNION_MEMBER_SUB_GENERATOR_1
+#undef BOOST_QUATERNION_MEMBER_SUB_GENERATOR_2
+#undef BOOST_QUATERNION_MEMBER_SUB_GENERATOR_3
+#undef BOOST_QUATERNION_MEMBER_MUL_GENERATOR_1
+#undef BOOST_QUATERNION_MEMBER_MUL_GENERATOR_2
+#undef BOOST_QUATERNION_MEMBER_MUL_GENERATOR_3
+#undef BOOST_QUATERNION_MEMBER_DIV_GENERATOR_1
+#undef BOOST_QUATERNION_MEMBER_DIV_GENERATOR_2
+#undef BOOST_QUATERNION_MEMBER_DIV_GENERATOR_3
+
+#undef BOOST_QUATERNION_CONSTRUCTOR_GENERATOR
+
+
+#undef BOOST_QUATERNION_MEMBER_ASSIGNMENT_GENERATOR
+
+#undef BOOST_QUATERNION_MEMBER_DATA_GENERATOR
+
+#undef BOOST_QUATERNION_ACCESSOR_GENERATOR
+
+
+ // operators
+
+#define BOOST_QUATERNION_OPERATOR_GENERATOR_BODY(op) \
+ { \
+ quaternion<T> res(lhs); \
+ res op##= rhs; \
+ return(res); \
+ }
+
+#define BOOST_QUATERNION_OPERATOR_GENERATOR_1_L(op) \
+ template<typename T> \
+ inline quaternion<T> operator op (T const & lhs, quaternion<T> const & rhs) \
+ BOOST_QUATERNION_OPERATOR_GENERATOR_BODY(op)
+
+#define BOOST_QUATERNION_OPERATOR_GENERATOR_1_R(op) \
+ template<typename T> \
+ inline quaternion<T> operator op (quaternion<T> const & lhs, T const & rhs) \
+ BOOST_QUATERNION_OPERATOR_GENERATOR_BODY(op)
+
+#define BOOST_QUATERNION_OPERATOR_GENERATOR_2_L(op) \
+ template<typename T> \
+ inline quaternion<T> operator op (::std::complex<T> const & lhs, quaternion<T> const & rhs) \
+ BOOST_QUATERNION_OPERATOR_GENERATOR_BODY(op)
+
+#define BOOST_QUATERNION_OPERATOR_GENERATOR_2_R(op) \
+ template<typename T> \
+ inline quaternion<T> operator op (quaternion<T> const & lhs, ::std::complex<T> const & rhs) \
+ BOOST_QUATERNION_OPERATOR_GENERATOR_BODY(op)
+
+#define BOOST_QUATERNION_OPERATOR_GENERATOR_3(op) \
+ template<typename T> \
+ inline quaternion<T> operator op (quaternion<T> const & lhs, quaternion<T> const & rhs) \
+ BOOST_QUATERNION_OPERATOR_GENERATOR_BODY(op)
+
+#define BOOST_QUATERNION_OPERATOR_GENERATOR(op) \
+ BOOST_QUATERNION_OPERATOR_GENERATOR_1_L(op) \
+ BOOST_QUATERNION_OPERATOR_GENERATOR_1_R(op) \
+ BOOST_QUATERNION_OPERATOR_GENERATOR_2_L(op) \
+ BOOST_QUATERNION_OPERATOR_GENERATOR_2_R(op) \
+ BOOST_QUATERNION_OPERATOR_GENERATOR_3(op)
+
+
+ BOOST_QUATERNION_OPERATOR_GENERATOR(+)
+ BOOST_QUATERNION_OPERATOR_GENERATOR(-)
+ BOOST_QUATERNION_OPERATOR_GENERATOR(*)
+ BOOST_QUATERNION_OPERATOR_GENERATOR(/)
+
+
+#undef BOOST_QUATERNION_OPERATOR_GENERATOR
+
+#undef BOOST_QUATERNION_OPERATOR_GENERATOR_1_L
+#undef BOOST_QUATERNION_OPERATOR_GENERATOR_1_R
+#undef BOOST_QUATERNION_OPERATOR_GENERATOR_2_L
+#undef BOOST_QUATERNION_OPERATOR_GENERATOR_2_R
+#undef BOOST_QUATERNION_OPERATOR_GENERATOR_3
+
+#undef BOOST_QUATERNION_OPERATOR_GENERATOR_BODY
+
+
+ template<typename T>
+ inline quaternion<T> operator + (quaternion<T> const & q)
+ {
+ return(q);
+ }
+
+
+ template<typename T>
+ inline quaternion<T> operator - (quaternion<T> const & q)
+ {
+ return(quaternion<T>(-q.R_component_1(),-q.R_component_2(),-q.R_component_3(),-q.R_component_4()));
+ }
+
+
+ template<typename T>
+ inline bool operator == (T const & lhs, quaternion<T> const & rhs)
+ {
+ return (
+ (rhs.R_component_1() == lhs)&&
+ (rhs.R_component_2() == static_cast<T>(0))&&
+ (rhs.R_component_3() == static_cast<T>(0))&&
+ (rhs.R_component_4() == static_cast<T>(0))
+ );
+ }
+
+
+ template<typename T>
+ inline bool operator == (quaternion<T> const & lhs, T const & rhs)
+ {
+ return (
+ (lhs.R_component_1() == rhs)&&
+ (lhs.R_component_2() == static_cast<T>(0))&&
+ (lhs.R_component_3() == static_cast<T>(0))&&
+ (lhs.R_component_4() == static_cast<T>(0))
+ );
+ }
+
+
+ template<typename T>
+ inline bool operator == (::std::complex<T> const & lhs, quaternion<T> const & rhs)
+ {
+ return (
+ (rhs.R_component_1() == lhs.real())&&
+ (rhs.R_component_2() == lhs.imag())&&
+ (rhs.R_component_3() == static_cast<T>(0))&&
+ (rhs.R_component_4() == static_cast<T>(0))
+ );
+ }
+
+
+ template<typename T>
+ inline bool operator == (quaternion<T> const & lhs, ::std::complex<T> const & rhs)
+ {
+ return (
+ (lhs.R_component_1() == rhs.real())&&
+ (lhs.R_component_2() == rhs.imag())&&
+ (lhs.R_component_3() == static_cast<T>(0))&&
+ (lhs.R_component_4() == static_cast<T>(0))
+ );
+ }
+
+
+ template<typename T>
+ inline bool operator == (quaternion<T> const & lhs, quaternion<T> const & rhs)
+ {
+ return (
+ (rhs.R_component_1() == lhs.R_component_1())&&
+ (rhs.R_component_2() == lhs.R_component_2())&&
+ (rhs.R_component_3() == lhs.R_component_3())&&
+ (rhs.R_component_4() == lhs.R_component_4())
+ );
+ }
+
+
+#define BOOST_QUATERNION_NOT_EQUAL_GENERATOR \
+ { \
+ return(!(lhs == rhs)); \
+ }
+
+ template<typename T>
+ inline bool operator != (T const & lhs, quaternion<T> const & rhs)
+ BOOST_QUATERNION_NOT_EQUAL_GENERATOR
+
+ template<typename T>
+ inline bool operator != (quaternion<T> const & lhs, T const & rhs)
+ BOOST_QUATERNION_NOT_EQUAL_GENERATOR
+
+ template<typename T>
+ inline bool operator != (::std::complex<T> const & lhs, quaternion<T> const & rhs)
+ BOOST_QUATERNION_NOT_EQUAL_GENERATOR
+
+ template<typename T>
+ inline bool operator != (quaternion<T> const & lhs, ::std::complex<T> const & rhs)
+ BOOST_QUATERNION_NOT_EQUAL_GENERATOR
+
+ template<typename T>
+ inline bool operator != (quaternion<T> const & lhs, quaternion<T> const & rhs)
+ BOOST_QUATERNION_NOT_EQUAL_GENERATOR
+
+#undef BOOST_QUATERNION_NOT_EQUAL_GENERATOR
+
+
+ // Note: we allow the following formats, whith a, b, c, and d reals
+ // a
+ // (a), (a,b), (a,b,c), (a,b,c,d)
+ // (a,(c)), (a,(c,d)), ((a)), ((a),c), ((a),(c)), ((a),(c,d)), ((a,b)), ((a,b),c), ((a,b),(c)), ((a,b),(c,d))
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ template<typename T>
+ std::istream & operator >> ( ::std::istream & is,
+ quaternion<T> & q)
+#else
+ template<typename T, typename charT, class traits>
+ ::std::basic_istream<charT,traits> & operator >> ( ::std::basic_istream<charT,traits> & is,
+ quaternion<T> & q)
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ typedef char charT;
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+
+#ifdef BOOST_NO_STD_LOCALE
+#else
+ const ::std::ctype<charT> & ct = ::std::use_facet< ::std::ctype<charT> >(is.getloc());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ T a = T();
+ T b = T();
+ T c = T();
+ T d = T();
+
+ ::std::complex<T> u = ::std::complex<T>();
+ ::std::complex<T> v = ::std::complex<T>();
+
+ charT ch = charT();
+ char cc;
+
+ is >> ch; // get the first lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == '(') // read "(", possible: (a), (a,b), (a,b,c), (a,b,c,d), (a,(c)), (a,(c,d)), ((a)), ((a),c), ((a),(c)), ((a),(c,d)), ((a,b)), ((a,b),c), ((a,b),(c)), ((a,b,),(c,d,))
+ {
+ is >> ch; // get the second lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == '(') // read "((", possible: ((a)), ((a),c), ((a),(c)), ((a),(c,d)), ((a,b)), ((a,b),c), ((a,b),(c)), ((a,b,),(c,d,))
+ {
+ is.putback(ch);
+
+ is >> u; // we extract the first and second components
+ a = u.real();
+ b = u.imag();
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the next lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // format: ((a)) or ((a,b))
+ {
+ q = quaternion<T>(a,b);
+ }
+ else if (cc == ',') // read "((a)," or "((a,b),", possible: ((a),c), ((a),(c)), ((a),(c,d)), ((a,b),c), ((a,b),(c)), ((a,b,),(c,d,))
+ {
+ is >> v; // we extract the third and fourth components
+ c = v.real();
+ d = v.imag();
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the last lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // format: ((a),c), ((a),(c)), ((a),(c,d)), ((a,b),c), ((a,b),(c)) or ((a,b,),(c,d,))
+ {
+ q = quaternion<T>(a,b,c,d);
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // read "(a", possible: (a), (a,b), (a,b,c), (a,b,c,d), (a,(c)), (a,(c,d))
+ {
+ is.putback(ch);
+
+ is >> a; // we extract the first component
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the third lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // format: (a)
+ {
+ q = quaternion<T>(a);
+ }
+ else if (cc == ',') // read "(a,", possible: (a,b), (a,b,c), (a,b,c,d), (a,(c)), (a,(c,d))
+ {
+ is >> ch; // get the fourth lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == '(') // read "(a,(", possible: (a,(c)), (a,(c,d))
+ {
+ is.putback(ch);
+
+ is >> v; // we extract the third and fourth component
+
+ c = v.real();
+ d = v.imag();
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the ninth lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // format: (a,(c)) or (a,(c,d))
+ {
+ q = quaternion<T>(a,b,c,d);
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // read "(a,b", possible: (a,b), (a,b,c), (a,b,c,d)
+ {
+ is.putback(ch);
+
+ is >> b; // we extract the second component
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the fifth lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // format: (a,b)
+ {
+ q = quaternion<T>(a,b);
+ }
+ else if (cc == ',') // read "(a,b,", possible: (a,b,c), (a,b,c,d)
+ {
+ is >> c; // we extract the third component
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the seventh lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // format: (a,b,c)
+ {
+ q = quaternion<T>(a,b,c);
+ }
+ else if (cc == ',') // read "(a,b,c,", possible: (a,b,c,d)
+ {
+ is >> d; // we extract the fourth component
+
+ if (!is.good()) goto finish;
+
+ is >> ch; // get the ninth lexeme
+
+ if (!is.good()) goto finish;
+
+#ifdef BOOST_NO_STD_LOCALE
+ cc = ch;
+#else
+ cc = ct.narrow(ch, char());
+#endif /* BOOST_NO_STD_LOCALE */
+
+ if (cc == ')') // format: (a,b,c,d)
+ {
+ q = quaternion<T>(a,b,c,d);
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ }
+ else // error
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ is.setstate(::std::ios::failbit);
+#else
+ is.setstate(::std::ios_base::failbit);
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+ }
+ }
+ else // format: a
+ {
+ is.putback(ch);
+
+ is >> a; // we extract the first component
+
+ if (!is.good()) goto finish;
+
+ q = quaternion<T>(a);
+ }
+
+ finish:
+ return(is);
+ }
+
+
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ template<typename T>
+ ::std::ostream & operator << ( ::std::ostream & os,
+ quaternion<T> const & q)
+#else
+ template<typename T, typename charT, class traits>
+ ::std::basic_ostream<charT,traits> & operator << ( ::std::basic_ostream<charT,traits> & os,
+ quaternion<T> const & q)
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ ::std::ostringstream s;
+#else
+ ::std::basic_ostringstream<charT,traits> s;
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+
+ s.flags(os.flags());
+#ifdef BOOST_NO_STD_LOCALE
+#else
+ s.imbue(os.getloc());
+#endif /* BOOST_NO_STD_LOCALE */
+ s.precision(os.precision());
+
+ s << '(' << q.R_component_1() << ','
+ << q.R_component_2() << ','
+ << q.R_component_3() << ','
+ << q.R_component_4() << ')';
+
+ return os << s.str();
+ }
+
+
+ // values
+
+ template<typename T>
+ inline T real(quaternion<T> const & q)
+ {
+ return(q.real());
+ }
+
+
+ template<typename T>
+ inline quaternion<T> unreal(quaternion<T> const & q)
+ {
+ return(q.unreal());
+ }
+
+
+#define BOOST_QUATERNION_VALARRAY_LOADER \
+ using ::std::valarray; \
+ \
+ valarray<T> temp(4); \
+ \
+ temp[0] = q.R_component_1(); \
+ temp[1] = q.R_component_2(); \
+ temp[2] = q.R_component_3(); \
+ temp[3] = q.R_component_4();
+
+
+ template<typename T>
+ inline T sup(quaternion<T> const & q)
+ {
+#ifdef BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
+ using ::std::abs;
+#endif /* BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP */
+
+ BOOST_QUATERNION_VALARRAY_LOADER
+
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ return((BOOST_GET_VALARRAY(T, abs(temp)).max)());
+#else
+ return((abs(temp).max)());
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+
+
+ template<typename T>
+ inline T l1(quaternion<T> const & q)
+ {
+#ifdef BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
+ using ::std::abs;
+#endif /* BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP */
+
+ BOOST_QUATERNION_VALARRAY_LOADER
+
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ return(BOOST_GET_VALARRAY(T, abs(temp)).sum());
+#else
+ return(abs(temp).sum());
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+ }
+
+
+ template<typename T>
+ inline T abs(quaternion<T> const & q)
+ {
+#ifdef BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
+ using ::std::abs;
+#endif /* BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP */
+
+ using ::std::sqrt;
+
+ BOOST_QUATERNION_VALARRAY_LOADER
+
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ T maxim = (BOOST_GET_VALARRAY(T, abs(temp)).max)(); // overflow protection
+#else
+ T maxim = (abs(temp).max)(); // overflow protection
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+
+ if (maxim == static_cast<T>(0))
+ {
+ return(maxim);
+ }
+ else
+ {
+ T mixam = static_cast<T>(1)/maxim; // prefer multiplications over divisions
+
+ temp *= mixam;
+
+ temp *= temp;
+
+ return(maxim*sqrt(temp.sum()));
+ }
+
+ //return(sqrt(norm(q)));
+ }
+
+
+#undef BOOST_QUATERNION_VALARRAY_LOADER
+
+
+ // Note: This is the Cayley norm, not the Euclidian norm...
+
+ template<typename T>
+ inline T norm(quaternion<T>const & q)
+ {
+ return(real(q*conj(q)));
+ }
+
+
+ template<typename T>
+ inline quaternion<T> conj(quaternion<T> const & q)
+ {
+ return(quaternion<T>( +q.R_component_1(),
+ -q.R_component_2(),
+ -q.R_component_3(),
+ -q.R_component_4()));
+ }
+
+
+ template<typename T>
+ inline quaternion<T> spherical( T const & rho,
+ T const & theta,
+ T const & phi1,
+ T const & phi2)
+ {
+ using ::std::cos;
+ using ::std::sin;
+
+ //T a = cos(theta)*cos(phi1)*cos(phi2);
+ //T b = sin(theta)*cos(phi1)*cos(phi2);
+ //T c = sin(phi1)*cos(phi2);
+ //T d = sin(phi2);
+
+ T courrant = static_cast<T>(1);
+
+ T d = sin(phi2);
+
+ courrant *= cos(phi2);
+
+ T c = sin(phi1)*courrant;
+
+ courrant *= cos(phi1);
+
+ T b = sin(theta)*courrant;
+ T a = cos(theta)*courrant;
+
+ return(rho*quaternion<T>(a,b,c,d));
+ }
+
+
+ template<typename T>
+ inline quaternion<T> semipolar( T const & rho,
+ T const & alpha,
+ T const & theta1,
+ T const & theta2)
+ {
+ using ::std::cos;
+ using ::std::sin;
+
+ T a = cos(alpha)*cos(theta1);
+ T b = cos(alpha)*sin(theta1);
+ T c = sin(alpha)*cos(theta2);
+ T d = sin(alpha)*sin(theta2);
+
+ return(rho*quaternion<T>(a,b,c,d));
+ }
+
+
+ template<typename T>
+ inline quaternion<T> multipolar( T const & rho1,
+ T const & theta1,
+ T const & rho2,
+ T const & theta2)
+ {
+ using ::std::cos;
+ using ::std::sin;
+
+ T a = rho1*cos(theta1);
+ T b = rho1*sin(theta1);
+ T c = rho2*cos(theta2);
+ T d = rho2*sin(theta2);
+
+ return(quaternion<T>(a,b,c,d));
+ }
+
+
+ template<typename T>
+ inline quaternion<T> cylindrospherical( T const & t,
+ T const & radius,
+ T const & longitude,
+ T const & latitude)
+ {
+ using ::std::cos;
+ using ::std::sin;
+
+
+
+ T b = radius*cos(longitude)*cos(latitude);
+ T c = radius*sin(longitude)*cos(latitude);
+ T d = radius*sin(latitude);
+
+ return(quaternion<T>(t,b,c,d));
+ }
+
+
+ template<typename T>
+ inline quaternion<T> cylindrical(T const & r,
+ T const & angle,
+ T const & h1,
+ T const & h2)
+ {
+ using ::std::cos;
+ using ::std::sin;
+
+ T a = r*cos(angle);
+ T b = r*sin(angle);
+
+ return(quaternion<T>(a,b,h1,h2));
+ }
+
+
+ // transcendentals
+ // (please see the documentation)
+
+
+ template<typename T>
+ inline quaternion<T> exp(quaternion<T> const & q)
+ {
+ using ::std::exp;
+ using ::std::cos;
+
+ using ::boost::math::sinc_pi;
+
+ T u = exp(real(q));
+
+ T z = abs(unreal(q));
+
+ T w = sinc_pi(z);
+
+ return(u*quaternion<T>(cos(z),
+ w*q.R_component_2(), w*q.R_component_3(),
+ w*q.R_component_4()));
+ }
+
+
+ template<typename T>
+ inline quaternion<T> cos(quaternion<T> const & q)
+ {
+ using ::std::sin;
+ using ::std::cos;
+ using ::std::cosh;
+
+ using ::boost::math::sinhc_pi;
+
+ T z = abs(unreal(q));
+
+ T w = -sin(q.real())*sinhc_pi(z);
+
+ return(quaternion<T>(cos(q.real())*cosh(z),
+ w*q.R_component_2(), w*q.R_component_3(),
+ w*q.R_component_4()));
+ }
+
+
+ template<typename T>
+ inline quaternion<T> sin(quaternion<T> const & q)
+ {
+ using ::std::sin;
+ using ::std::cos;
+ using ::std::cosh;
+
+ using ::boost::math::sinhc_pi;
+
+ T z = abs(unreal(q));
+
+ T w = +cos(q.real())*sinhc_pi(z);
+
+ return(quaternion<T>(sin(q.real())*cosh(z),
+ w*q.R_component_2(), w*q.R_component_3(),
+ w*q.R_component_4()));
+ }
+
+
+ template<typename T>
+ inline quaternion<T> tan(quaternion<T> const & q)
+ {
+ return(sin(q)/cos(q));
+ }
+
+
+ template<typename T>
+ inline quaternion<T> cosh(quaternion<T> const & q)
+ {
+ return((exp(+q)+exp(-q))/static_cast<T>(2));
+ }
+
+
+ template<typename T>
+ inline quaternion<T> sinh(quaternion<T> const & q)
+ {
+ return((exp(+q)-exp(-q))/static_cast<T>(2));
+ }
+
+
+ template<typename T>
+ inline quaternion<T> tanh(quaternion<T> const & q)
+ {
+ return(sinh(q)/cosh(q));
+ }
+
+
+ template<typename T>
+ quaternion<T> pow(quaternion<T> const & q,
+ int n)
+ {
+ if (n > 1)
+ {
+ int m = n>>1;
+
+ quaternion<T> result = pow(q, m);
+
+ result *= result;
+
+ if (n != (m<<1))
+ {
+ result *= q; // n odd
+ }
+
+ return(result);
+ }
+ else if (n == 1)
+ {
+ return(q);
+ }
+ else if (n == 0)
+ {
+ return(quaternion<T>(1));
+ }
+ else /* n < 0 */
+ {
+ return(pow(quaternion<T>(1)/q,-n));
+ }
+ }
+
+
+ // helper templates for converting copy constructors (definition)
+
+ namespace detail
+ {
+
+ template< typename T,
+ typename U
+ >
+ quaternion<T> quaternion_type_converter(quaternion<U> const & rhs)
+ {
+ return(quaternion<T>( static_cast<T>(rhs.R_component_1()),
+ static_cast<T>(rhs.R_component_2()),
+ static_cast<T>(rhs.R_component_3()),
+ static_cast<T>(rhs.R_component_4())));
+ }
+ }
+ }
+}
+
+
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ #undef BOOST_GET_VALARRAY
+#endif /* BOOST_WORKAROUND(__GNUC__, < 3) */
+
+
+#endif /* BOOST_QUATERNION_HPP */
diff --git a/boost/boost/math/special_functions/acosh.hpp b/boost/boost/math/special_functions/acosh.hpp
new file mode 100644
index 00000000000..3175ee1eb7d
--- /dev/null
+++ b/boost/boost/math/special_functions/acosh.hpp
@@ -0,0 +1,198 @@
+// boost asinh.hpp header file
+
+// (C) Copyright Eric Ford 2001 & Hubert Holin.
+// 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 updates, documentation, and revision history.
+
+#ifndef BOOST_ACOSH_HPP
+#define BOOST_ACOSH_HPP
+
+
+#include <cmath>
+#include <limits>
+#include <string>
+#include <stdexcept>
+
+
+#include <boost/config.hpp>
+
+
+// This is the inverse of the hyperbolic cosine function.
+
+namespace boost
+{
+ namespace math
+ {
+#if defined(__GNUC__) && (__GNUC__ < 3)
+ // gcc 2.x ignores function scope using declarations,
+ // put them in the scope of the enclosing namespace instead:
+
+ using ::std::abs;
+ using ::std::sqrt;
+ using ::std::log;
+
+ using ::std::numeric_limits;
+#endif
+
+#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+ // This is the main fare
+
+ template<typename T>
+ inline T acosh(const T x)
+ {
+ using ::std::abs;
+ using ::std::sqrt;
+ using ::std::log;
+
+ using ::std::numeric_limits;
+
+
+ T const one = static_cast<T>(1);
+ T const two = static_cast<T>(2);
+
+ static T const taylor_2_bound = sqrt(numeric_limits<T>::epsilon());
+ static T const taylor_n_bound = sqrt(taylor_2_bound);
+ static T const upper_taylor_2_bound = one/taylor_2_bound;
+
+ if (x < one)
+ {
+ if (numeric_limits<T>::has_quiet_NaN)
+ {
+ return(numeric_limits<T>::quiet_NaN());
+ }
+ else
+ {
+ ::std::string error_reporting("Argument to atanh is strictly greater than +1 or strictly smaller than -1!");
+ ::std::domain_error bad_argument(error_reporting);
+
+ throw(bad_argument);
+ }
+ }
+ else if (x >= taylor_n_bound)
+ {
+ if (x > upper_taylor_2_bound)
+ {
+ // approximation by laurent series in 1/x at 0+ order from -1 to 0
+ return( log( x*two) );
+ }
+ else
+ {
+ return( log( x + sqrt(x*x-one) ) );
+ }
+ }
+ else
+ {
+ T y = sqrt(x-one);
+
+ // approximation by taylor series in y at 0 up to order 2
+ T result = y;
+
+ if (y >= taylor_2_bound)
+ {
+ T y3 = y*y*y;
+
+ // approximation by taylor series in y at 0 up to order 4
+ result -= y3/static_cast<T>(12);
+ }
+
+ return(sqrt(static_cast<T>(2))*result);
+ }
+ }
+#else
+ // These are implementation details (for main fare see below)
+
+ namespace detail
+ {
+ template <
+ typename T,
+ bool QuietNanSupported
+ >
+ struct acosh_helper2_t
+ {
+ static T get_NaN()
+ {
+ return(::std::numeric_limits<T>::quiet_NaN());
+ }
+ }; // boost::detail::acosh_helper2_t
+
+
+ template<typename T>
+ struct acosh_helper2_t<T, false>
+ {
+ static T get_NaN()
+ {
+ ::std::string error_reporting("Argument to acosh is greater than or equal to +1!");
+ ::std::domain_error bad_argument(error_reporting);
+
+ throw(bad_argument);
+ }
+ }; // boost::detail::acosh_helper2_t
+
+ } // boost::detail
+
+
+ // This is the main fare
+
+ template<typename T>
+ inline T acosh(const T x)
+ {
+ using ::std::abs;
+ using ::std::sqrt;
+ using ::std::log;
+
+ using ::std::numeric_limits;
+
+ typedef detail::acosh_helper2_t<T, std::numeric_limits<T>::has_quiet_NaN> helper2_type;
+
+
+ T const one = static_cast<T>(1);
+ T const two = static_cast<T>(2);
+
+ static T const taylor_2_bound = sqrt(numeric_limits<T>::epsilon());
+ static T const taylor_n_bound = sqrt(taylor_2_bound);
+ static T const upper_taylor_2_bound = one/taylor_2_bound;
+
+ if (x < one)
+ {
+ return(helper2_type::get_NaN());
+ }
+ else if (x >= taylor_n_bound)
+ {
+ if (x > upper_taylor_2_bound)
+ {
+ // approximation by laurent series in 1/x at 0+ order from -1 to 0
+ return( log( x*two) );
+ }
+ else
+ {
+ return( log( x + sqrt(x*x-one) ) );
+ }
+ }
+ else
+ {
+ T y = sqrt(x-one);
+
+ // approximation by taylor series in y at 0 up to order 2
+ T result = y;
+
+ if (y >= taylor_2_bound)
+ {
+ T y3 = y*y*y;
+
+ // approximation by taylor series in y at 0 up to order 4
+ result -= y3/static_cast<T>(12);
+ }
+
+ return(sqrt(static_cast<T>(2))*result);
+ }
+ }
+#endif /* defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) */
+ }
+}
+
+#endif /* BOOST_ACOSH_HPP */
+
+
diff --git a/boost/boost/math/special_functions/asinh.hpp b/boost/boost/math/special_functions/asinh.hpp
new file mode 100644
index 00000000000..24b727fea15
--- /dev/null
+++ b/boost/boost/math/special_functions/asinh.hpp
@@ -0,0 +1,101 @@
+// boost asinh.hpp header file
+
+// (C) Copyright Eric Ford & Hubert Holin 2001.
+// 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 updates, documentation, and revision history.
+
+#ifndef BOOST_ASINH_HPP
+#define BOOST_ASINH_HPP
+
+
+#include <cmath>
+#include <limits>
+#include <string>
+#include <stdexcept>
+
+
+#include <boost/config.hpp>
+
+
+// This is the inverse of the hyperbolic sine function.
+
+namespace boost
+{
+ namespace math
+ {
+#if defined(__GNUC__) && (__GNUC__ < 3)
+ // gcc 2.x ignores function scope using declarations,
+ // put them in the scope of the enclosing namespace instead:
+
+ using ::std::abs;
+ using ::std::sqrt;
+ using ::std::log;
+
+ using ::std::numeric_limits;
+#endif
+
+ template<typename T>
+ inline T asinh(const T x)
+ {
+ using ::std::abs;
+ using ::std::sqrt;
+ using ::std::log;
+
+ using ::std::numeric_limits;
+
+
+ T const one = static_cast<T>(1);
+ T const two = static_cast<T>(2);
+
+ static T const taylor_2_bound = sqrt(numeric_limits<T>::epsilon());
+ static T const taylor_n_bound = sqrt(taylor_2_bound);
+ static T const upper_taylor_2_bound = one/taylor_2_bound;
+ static T const upper_taylor_n_bound = one/taylor_n_bound;
+
+ if (x >= +taylor_n_bound)
+ {
+ if (x > upper_taylor_n_bound)
+ {
+ if (x > upper_taylor_2_bound)
+ {
+ // approximation by laurent series in 1/x at 0+ order from -1 to 0
+ return( log( x * two) );
+ }
+ else
+ {
+ // approximation by laurent series in 1/x at 0+ order from -1 to 1
+ return( log( x*two + (one/(x*two)) ) );
+ }
+ }
+ else
+ {
+ return( log( x + sqrt(x*x+one) ) );
+ }
+ }
+ else if (x <= -taylor_n_bound)
+ {
+ return(-asinh(-x));
+ }
+ else
+ {
+ // approximation by taylor series in x at 0 up to order 2
+ T result = x;
+
+ if (abs(x) >= taylor_2_bound)
+ {
+ T x3 = x*x*x;
+
+ // approximation by taylor series in x at 0 up to order 4
+ result -= x3/static_cast<T>(6);
+ }
+
+ return(result);
+ }
+ }
+ }
+}
+
+#endif /* BOOST_ASINH_HPP */
diff --git a/boost/boost/math/special_functions/atanh.hpp b/boost/boost/math/special_functions/atanh.hpp
new file mode 100644
index 00000000000..35011763f35
--- /dev/null
+++ b/boost/boost/math/special_functions/atanh.hpp
@@ -0,0 +1,267 @@
+// boost atanh.hpp header file
+
+// (C) Copyright Hubert Holin 2001.
+// 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 updates, documentation, and revision history.
+
+#ifndef BOOST_ATANH_HPP
+#define BOOST_ATANH_HPP
+
+
+#include <cmath>
+#include <limits>
+#include <string>
+#include <stdexcept>
+
+
+#include <boost/config.hpp>
+
+
+// This is the inverse of the hyperbolic tangent function.
+
+namespace boost
+{
+ namespace math
+ {
+#if defined(__GNUC__) && (__GNUC__ < 3)
+ // gcc 2.x ignores function scope using declarations,
+ // put them in the scope of the enclosing namespace instead:
+
+ using ::std::abs;
+ using ::std::sqrt;
+ using ::std::log;
+
+ using ::std::numeric_limits;
+#endif
+
+#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+ // This is the main fare
+
+ template<typename T>
+ inline T atanh(const T x)
+ {
+ using ::std::abs;
+ using ::std::sqrt;
+ using ::std::log;
+
+ using ::std::numeric_limits;
+
+ T const one = static_cast<T>(1);
+ T const two = static_cast<T>(2);
+
+ static T const taylor_2_bound = sqrt(numeric_limits<T>::epsilon());
+ static T const taylor_n_bound = sqrt(taylor_2_bound);
+
+ if (x < -one)
+ {
+ if (numeric_limits<T>::has_quiet_NaN)
+ {
+ return(numeric_limits<T>::quiet_NaN());
+ }
+ else
+ {
+ ::std::string error_reporting("Argument to atanh is strictly greater than +1 or strictly smaller than -1!");
+ ::std::domain_error bad_argument(error_reporting);
+
+ throw(bad_argument);
+ }
+ }
+ else if (x < -one+numeric_limits<T>::epsilon())
+ {
+ if (numeric_limits<T>::has_infinity)
+ {
+ return(-numeric_limits<T>::infinity());
+ }
+ else
+ {
+ ::std::string error_reporting("Argument to atanh is -1 (result: -Infinity)!");
+ ::std::out_of_range bad_argument(error_reporting);
+
+ throw(bad_argument);
+ }
+ }
+ else if (x > +one-numeric_limits<T>::epsilon())
+ {
+ if (numeric_limits<T>::has_infinity)
+ {
+ return(+numeric_limits<T>::infinity());
+ }
+ else
+ {
+ ::std::string error_reporting("Argument to atanh is +1 (result: +Infinity)!");
+ ::std::out_of_range bad_argument(error_reporting);
+
+ throw(bad_argument);
+ }
+ }
+ else if (x > +one)
+ {
+ if (numeric_limits<T>::has_quiet_NaN)
+ {
+ return(numeric_limits<T>::quiet_NaN());
+ }
+ else
+ {
+ ::std::string error_reporting("Argument to atanh is strictly greater than +1 or strictly smaller than -1!");
+ ::std::domain_error bad_argument(error_reporting);
+
+ throw(bad_argument);
+ }
+ }
+ else if (abs(x) >= taylor_n_bound)
+ {
+ return(log( (one + x) / (one - x) ) / two);
+ }
+ else
+ {
+ // approximation by taylor series in x at 0 up to order 2
+ T result = x;
+
+ if (abs(x) >= taylor_2_bound)
+ {
+ T x3 = x*x*x;
+
+ // approximation by taylor series in x at 0 up to order 4
+ result += x3/static_cast<T>(3);
+ }
+
+ return(result);
+ }
+ }
+#else
+ // These are implementation details (for main fare see below)
+
+ namespace detail
+ {
+ template <
+ typename T,
+ bool InfinitySupported
+ >
+ struct atanh_helper1_t
+ {
+ static T get_pos_infinity()
+ {
+ return(+::std::numeric_limits<T>::infinity());
+ }
+
+ static T get_neg_infinity()
+ {
+ return(-::std::numeric_limits<T>::infinity());
+ }
+ }; // boost::math::detail::atanh_helper1_t
+
+
+ template<typename T>
+ struct atanh_helper1_t<T, false>
+ {
+ static T get_pos_infinity()
+ {
+ ::std::string error_reporting("Argument to atanh is +1 (result: +Infinity)!");
+ ::std::out_of_range bad_argument(error_reporting);
+
+ throw(bad_argument);
+ }
+
+ static T get_neg_infinity()
+ {
+ ::std::string error_reporting("Argument to atanh is -1 (result: -Infinity)!");
+ ::std::out_of_range bad_argument(error_reporting);
+
+ throw(bad_argument);
+ }
+ }; // boost::math::detail::atanh_helper1_t
+
+
+ template <
+ typename T,
+ bool QuietNanSupported
+ >
+ struct atanh_helper2_t
+ {
+ static T get_NaN()
+ {
+ return(::std::numeric_limits<T>::quiet_NaN());
+ }
+ }; // boost::detail::atanh_helper2_t
+
+
+ template<typename T>
+ struct atanh_helper2_t<T, false>
+ {
+ static T get_NaN()
+ {
+ ::std::string error_reporting("Argument to atanh is strictly greater than +1 or strictly smaller than -1!");
+ ::std::domain_error bad_argument(error_reporting);
+
+ throw(bad_argument);
+ }
+ }; // boost::detail::atanh_helper2_t
+ } // boost::detail
+
+
+ // This is the main fare
+
+ template<typename T>
+ inline T atanh(const T x)
+ {
+ using ::std::abs;
+ using ::std::sqrt;
+ using ::std::log;
+
+ using ::std::numeric_limits;
+
+ typedef detail::atanh_helper1_t<T, ::std::numeric_limits<T>::has_infinity> helper1_type;
+ typedef detail::atanh_helper2_t<T, ::std::numeric_limits<T>::has_quiet_NaN> helper2_type;
+
+
+ T const one = static_cast<T>(1);
+ T const two = static_cast<T>(2);
+
+ static T const taylor_2_bound = sqrt(numeric_limits<T>::epsilon());
+ static T const taylor_n_bound = sqrt(taylor_2_bound);
+
+ if (x < -one)
+ {
+ return(helper2_type::get_NaN());
+ }
+ else if (x < -one+numeric_limits<T>::epsilon())
+ {
+ return(helper1_type::get_neg_infinity());
+ }
+ else if (x > +one-numeric_limits<T>::epsilon())
+ {
+ return(helper1_type::get_pos_infinity());
+ }
+ else if (x > +one)
+ {
+ return(helper2_type::get_NaN());
+ }
+ else if (abs(x) >= taylor_n_bound)
+ {
+ return(log( (one + x) / (one - x) ) / two);
+ }
+ else
+ {
+ // approximation by taylor series in x at 0 up to order 2
+ T result = x;
+
+ if (abs(x) >= taylor_2_bound)
+ {
+ T x3 = x*x*x;
+
+ // approximation by taylor series in x at 0 up to order 4
+ result += x3/static_cast<T>(3);
+ }
+
+ return(result);
+ }
+ }
+#endif /* defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) */
+ }
+}
+
+#endif /* BOOST_ATANH_HPP */
+
diff --git a/boost/boost/math/special_functions/detail/series.hpp b/boost/boost/math/special_functions/detail/series.hpp
new file mode 100644
index 00000000000..1d30d8b638a
--- /dev/null
+++ b/boost/boost/math/special_functions/detail/series.hpp
@@ -0,0 +1,52 @@
+// (C) Copyright John Maddock 2005.
+// 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)
+
+#ifndef BOOST_MATH_SERIES_INCLUDED
+#define BOOST_MATH_SERIES_INCLUDED
+
+#include <cmath>
+
+#ifdef BOOST_NO_STDC_NAMESPACE
+namespace std{ using ::pow; using ::fabs; }
+#endif
+
+
+namespace boost{ namespace math{ namespace detail{
+
+//
+// Algorithm kahan_sum_series invokes Functor func until the N'th
+// term is too small to have any effect on the total, the terms
+// are added using the Kahan summation method.
+//
+// CAUTION: Optimizing compilers combined with extended-precision
+// machine registers conspire to render this algorithm partly broken:
+// double rounding of intermediate terms (first to a long double machine
+// register, and then to a double result) cause the rounding error computed
+// by the algorithm to be off by up to 1ulp. However this occurs rarely, and
+// in any case the result is still much better than a naive summation.
+//
+template <class Functor>
+typename Functor::result_type kahan_sum_series(Functor& func, int bits)
+{
+ typedef typename Functor::result_type result_type;
+ result_type factor = std::pow(result_type(2), bits);
+ result_type result = func();
+ result_type next_term, y, t;
+ result_type carry = 0;
+ do{
+ next_term = func();
+ y = next_term - carry;
+ t = result + y;
+ carry = t - result;
+ carry -= y;
+ result = t;
+ }
+ while(std::fabs(result) < std::fabs(factor * next_term));
+ return result;
+}
+
+} } } // namespaces
+
+#endif // BOOST_MATH_SERIES_INCLUDED
diff --git a/boost/boost/math/special_functions/expm1.hpp b/boost/boost/math/special_functions/expm1.hpp
new file mode 100644
index 00000000000..a9fc3bbee46
--- /dev/null
+++ b/boost/boost/math/special_functions/expm1.hpp
@@ -0,0 +1,121 @@
+// (C) Copyright John Maddock 2005.
+// 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)
+
+#ifndef BOOST_MATH_EXPM1_INCLUDED
+#define BOOST_MATH_EXPM1_INCLUDED
+
+#include <cmath>
+#include <math.h> // platform's ::expm1
+#include <boost/limits.hpp>
+#include <boost/math/special_functions/detail/series.hpp>
+
+#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+# include <boost/static_assert.hpp>
+#else
+# include <boost/assert.hpp>
+#endif
+
+#ifdef BOOST_NO_STDC_NAMESPACE
+namespace std{ using ::exp; using ::fabs; }
+#endif
+
+
+namespace boost{ namespace math{
+
+namespace detail{
+//
+// Functor expm1_series returns the next term in the Taylor series
+// x^k / k!
+// each time that operator() is invoked.
+//
+template <class T>
+struct expm1_series
+{
+ typedef T result_type;
+
+ expm1_series(T x)
+ : k(0), m_x(x), m_term(1) {}
+
+ T operator()()
+ {
+ ++k;
+ m_term *= m_x;
+ m_term /= k;
+ return m_term;
+ }
+
+ int count()const
+ {
+ return k;
+ }
+
+private:
+ int k;
+ const T m_x;
+ T m_term;
+ expm1_series(const expm1_series&);
+ expm1_series& operator=(const expm1_series&);
+};
+
+} // namespace
+
+//
+// Algorithm expm1 is part of C99, but is not yet provided by many compilers.
+//
+// This version uses a Taylor series expansion for 0.5 > |x| > epsilon.
+//
+template <class T>
+T expm1(T x)
+{
+#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+ BOOST_STATIC_ASSERT(::std::numeric_limits<T>::is_specialized);
+#else
+ BOOST_ASSERT(std::numeric_limits<T>::is_specialized);
+#endif
+
+ T a = std::fabs(x);
+ if(a > T(0.5L))
+ return std::exp(x) - T(1);
+ if(a < std::numeric_limits<T>::epsilon())
+ return x;
+ detail::expm1_series<T> s(x);
+ T result = detail::kahan_sum_series(s, std::numeric_limits<T>::digits + 2);
+ return result;
+}
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+inline float expm1(float z)
+{
+ return expm1<float>(z);
+}
+inline double expm1(double z)
+{
+ return expm1<double>(z);
+}
+inline long double expm1(long double z)
+{
+ return expm1<long double>(z);
+}
+#endif
+
+#ifdef expm1
+# ifndef BOOST_HAS_expm1
+# define BOOST_HAS_expm1
+# endif
+# undef expm1
+#endif
+
+#ifdef BOOST_HAS_EXPM1
+# if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901)
+inline float expm1(float x){ return ::expm1f(x); }
+inline long double expm1(long double x){ return ::expm1l(x); }
+#else
+inline float expm1(float x){ return ::expm1(x); }
+#endif
+inline double expm1(double x){ return ::expm1(x); }
+#endif
+
+} } // namespaces
+
+#endif // BOOST_MATH_HYPOT_INCLUDED
diff --git a/boost/boost/math/special_functions/hypot.hpp b/boost/boost/math/special_functions/hypot.hpp
new file mode 100644
index 00000000000..c827692b3c5
--- /dev/null
+++ b/boost/boost/math/special_functions/hypot.hpp
@@ -0,0 +1,84 @@
+// (C) Copyright John Maddock 2005.
+// 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)
+
+#ifndef BOOST_MATH_HYPOT_INCLUDED
+#define BOOST_MATH_HYPOT_INCLUDED
+
+#include <cmath>
+#include <boost/limits.hpp>
+#include <algorithm> // swap
+
+#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+# include <boost/static_assert.hpp>
+#else
+# include <boost/assert.hpp>
+#endif
+
+#ifdef BOOST_NO_STDC_NAMESPACE
+namespace std{ using ::sqrt; using ::fabs; }
+#endif
+
+
+namespace boost{ namespace math{
+
+template <class T>
+T hypot(T x, T y)
+{
+#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+ BOOST_STATIC_ASSERT(::std::numeric_limits<T>::is_specialized);
+#else
+ BOOST_ASSERT(std::numeric_limits<T>::is_specialized);
+#endif
+
+ //
+ // normalize x and y, so that both are positive and x >= y:
+ //
+ x = (std::fabs)(x);
+ y = (std::fabs)(y);
+
+ // special case, see C99 Annex F:
+ if(std::numeric_limits<T>::has_infinity
+ && ((x == std::numeric_limits<T>::infinity())
+ || (y == std::numeric_limits<T>::infinity())))
+ return std::numeric_limits<T>::infinity();
+
+ if(y > x)
+ (std::swap)(x, y);
+ //
+ // figure out overflow and underflow limits:
+ //
+ T safe_upper = (std::sqrt)((std::numeric_limits<T>::max)()) / 2;
+ T safe_lower = (std::sqrt)((std::numeric_limits<T>::min)());
+ static const T one = 1;
+ //
+ // Now handle special cases:
+ //
+ if(x >= safe_upper)
+ {
+ if(y <= one)
+ {
+ // y is neligible:
+ return x;
+ }
+ return (std::sqrt)(x) * (std::sqrt)(y) * (std::sqrt)(x/y + y/x);
+ }
+ else if(y <= safe_lower)
+ {
+ if((x >= one) || (y == 0))
+ {
+ // y is negligible:
+ return x;
+ }
+ return (std::sqrt)(x) * (std::sqrt)(y) * (std::sqrt)(x/y + y/x);
+ }
+ //
+ // If we get here then x^2+y^2 will not overflow or underflow:
+ //
+ return (std::sqrt)(x*x + y*y);
+}
+
+} } // namespaces
+
+#endif // BOOST_MATH_HYPOT_INCLUDED
diff --git a/boost/boost/math/special_functions/log1p.hpp b/boost/boost/math/special_functions/log1p.hpp
new file mode 100644
index 00000000000..07db19f54c6
--- /dev/null
+++ b/boost/boost/math/special_functions/log1p.hpp
@@ -0,0 +1,124 @@
+// (C) Copyright John Maddock 2005.
+// 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)
+
+#ifndef BOOST_MATH_LOG1P_INCLUDED
+#define BOOST_MATH_LOG1P_INCLUDED
+
+#include <cmath>
+#include <math.h> // platform's ::log1p
+#include <boost/limits.hpp>
+#include <boost/math/special_functions/detail/series.hpp>
+
+#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+# include <boost/static_assert.hpp>
+#else
+# include <boost/assert.hpp>
+#endif
+
+#ifdef BOOST_NO_STDC_NAMESPACE
+namespace std{ using ::fabs; using ::log; }
+#endif
+
+
+namespace boost{ namespace math{
+
+namespace detail{
+
+//
+// Functor log1p_series returns the next term in the Taylor series
+// pow(-1, k-1)*pow(x, k) / k
+// each time that operator() is invoked.
+//
+template <class T>
+struct log1p_series
+{
+ typedef T result_type;
+
+ log1p_series(T x)
+ : k(0), m_mult(-x), m_prod(-1){}
+
+ T operator()()
+ {
+ m_prod *= m_mult;
+ return m_prod / ++k;
+ }
+
+ int count()const
+ {
+ return k;
+ }
+
+private:
+ int k;
+ const T m_mult;
+ T m_prod;
+ log1p_series(const log1p_series&);
+ log1p_series& operator=(const log1p_series&);
+};
+
+} // namespace
+
+//
+// Algorithm log1p is part of C99, but is not yet provided by many compilers.
+//
+// This version uses a Taylor series expansion for 0.5 > x > epsilon, which may
+// require up to std::numeric_limits<T>::digits+1 terms to be calculated. It would
+// be much more efficient to use the equivalence:
+// log(1+x) == (log(1+x) * x) / ((1-x) - 1)
+// Unfortunately optimizing compilers make such a mess of this, that it performs
+// no better than log(1+x): which is to say not very well at all.
+//
+template <class T>
+T log1p(T x)
+{
+#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+ BOOST_STATIC_ASSERT(::std::numeric_limits<T>::is_specialized);
+#else
+ BOOST_ASSERT(std::numeric_limits<T>::is_specialized);
+#endif
+ T a = std::fabs(x);
+ if(a > T(0.5L))
+ return std::log(T(1.0) + x);
+ if(a < std::numeric_limits<T>::epsilon())
+ return x;
+ detail::log1p_series<T> s(x);
+ return detail::kahan_sum_series(s, std::numeric_limits<T>::digits + 2);
+}
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+// these overloads work around a type deduction bug:
+inline float log1p(float z)
+{
+ return log1p<float>(z);
+}
+inline double log1p(double z)
+{
+ return log1p<double>(z);
+}
+inline long double log1p(long double z)
+{
+ return log1p<long double>(z);
+}
+#endif
+
+#ifdef log1p
+# ifndef BOOST_HAS_LOG1P
+# define BOOST_HAS_LOG1P
+# endif
+# undef log1p
+#endif
+
+#ifdef BOOST_HAS_LOG1P
+# if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901)
+inline float log1p(float x){ return ::log1pf(x); }
+inline long double log1p(long double x){ return ::log1pl(x); }
+#else
+inline float log1p(float x){ return ::log1p(x); }
+#endif
+inline double log1p(double x){ return ::log1p(x); }
+#endif
+
+} } // namespaces
+
+#endif // BOOST_MATH_HYPOT_INCLUDED
diff --git a/boost/boost/math/special_functions/sinc.hpp b/boost/boost/math/special_functions/sinc.hpp
new file mode 100644
index 00000000000..2816f5166b4
--- /dev/null
+++ b/boost/boost/math/special_functions/sinc.hpp
@@ -0,0 +1,146 @@
+// boost sinc.hpp header file
+
+// (C) Copyright Hubert Holin 2001.
+// 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 updates, documentation, and revision history.
+
+#ifndef BOOST_SINC_HPP
+#define BOOST_SINC_HPP
+
+
+#include <cmath>
+#include <boost/limits.hpp>
+#include <string>
+#include <stdexcept>
+
+
+#include <boost/config.hpp>
+
+
+// These are the the "Sinus Cardinal" functions.
+
+namespace boost
+{
+ namespace math
+ {
+#if defined(__GNUC__) && (__GNUC__ < 3)
+ // gcc 2.x ignores function scope using declarations,
+ // put them in the scope of the enclosing namespace instead:
+
+ using ::std::abs;
+ using ::std::sqrt;
+ using ::std::sin;
+
+ using ::std::numeric_limits;
+#endif /* defined(__GNUC__) && (__GNUC__ < 3) */
+
+ // This is the "Sinus Cardinal" of index Pi.
+
+ template<typename T>
+ inline T sinc_pi(const T x)
+ {
+#ifdef BOOST_NO_STDC_NAMESPACE
+ using ::abs;
+ using ::sin;
+ using ::sqrt;
+#else /* BOOST_NO_STDC_NAMESPACE */
+ using ::std::abs;
+ using ::std::sin;
+ using ::std::sqrt;
+#endif /* BOOST_NO_STDC_NAMESPACE */
+
+ using ::std::numeric_limits;
+
+ static T const taylor_0_bound = numeric_limits<T>::epsilon();
+ static T const taylor_2_bound = sqrt(taylor_0_bound);
+ static T const taylor_n_bound = sqrt(taylor_2_bound);
+
+ if (abs(x) >= taylor_n_bound)
+ {
+ return(sin(x)/x);
+ }
+ else
+ {
+ // approximation by taylor series in x at 0 up to order 0
+ T result = static_cast<T>(1);
+
+ if (abs(x) >= taylor_0_bound)
+ {
+ T x2 = x*x;
+
+ // approximation by taylor series in x at 0 up to order 2
+ result -= x2/static_cast<T>(6);
+
+ if (abs(x) >= taylor_2_bound)
+ {
+ // approximation by taylor series in x at 0 up to order 4
+ result += (x2*x2)/static_cast<T>(120);
+ }
+ }
+
+ return(result);
+ }
+ }
+
+
+#ifdef BOOST_NO_TEMPLATE_TEMPLATES
+#else /* BOOST_NO_TEMPLATE_TEMPLATES */
+ template<typename T, template<typename> class U>
+ inline U<T> sinc_pi(const U<T> x)
+ {
+#if defined(BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL) || defined(__GNUC__)
+ using namespace std;
+#elif defined(BOOST_NO_STDC_NAMESPACE)
+ using ::abs;
+ using ::sin;
+ using ::sqrt;
+#else /* BOOST_NO_STDC_NAMESPACE */
+ using ::std::abs;
+ using ::std::sin;
+ using ::std::sqrt;
+#endif /* BOOST_NO_STDC_NAMESPACE */
+
+ using ::std::numeric_limits;
+
+ static T const taylor_0_bound = numeric_limits<T>::epsilon();
+ static T const taylor_2_bound = sqrt(taylor_0_bound);
+ static T const taylor_n_bound = sqrt(taylor_2_bound);
+
+ if (abs(x) >= taylor_n_bound)
+ {
+ return(sin(x)/x);
+ }
+ else
+ {
+ // approximation by taylor series in x at 0 up to order 0
+#ifdef __MWERKS__
+ U<T> result = static_cast<U<T> >(1);
+#else
+ U<T> result = U<T>(1);
+#endif
+
+ if (abs(x) >= taylor_0_bound)
+ {
+ U<T> x2 = x*x;
+
+ // approximation by taylor series in x at 0 up to order 2
+ result -= x2/static_cast<T>(6);
+
+ if (abs(x) >= taylor_2_bound)
+ {
+ // approximation by taylor series in x at 0 up to order 4
+ result += (x2*x2)/static_cast<T>(120);
+ }
+ }
+
+ return(result);
+ }
+ }
+#endif /* BOOST_NO_TEMPLATE_TEMPLATES */
+ }
+}
+
+#endif /* BOOST_SINC_HPP */
diff --git a/boost/boost/math/special_functions/sinhc.hpp b/boost/boost/math/special_functions/sinhc.hpp
new file mode 100644
index 00000000000..ed8f4f99cbd
--- /dev/null
+++ b/boost/boost/math/special_functions/sinhc.hpp
@@ -0,0 +1,146 @@
+// boost sinhc.hpp header file
+
+// (C) Copyright Hubert Holin 2001.
+// 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 updates, documentation, and revision history.
+
+#ifndef BOOST_SINHC_HPP
+#define BOOST_SINHC_HPP
+
+
+#include <cmath>
+#include <boost/limits.hpp>
+#include <string>
+#include <stdexcept>
+
+
+#include <boost/config.hpp>
+
+
+// These are the the "Hyperbolic Sinus Cardinal" functions.
+
+namespace boost
+{
+ namespace math
+ {
+#if defined(__GNUC__) && (__GNUC__ < 3)
+ // gcc 2.x ignores function scope using declarations,
+ // put them in the scope of the enclosing namespace instead:
+
+ using ::std::abs;
+ using ::std::sqrt;
+ using ::std::sinh;
+
+ using ::std::numeric_limits;
+#endif /* defined(__GNUC__) && (__GNUC__ < 3) */
+
+ // This is the "Hyperbolic Sinus Cardinal" of index Pi.
+
+ template<typename T>
+ inline T sinhc_pi(const T x)
+ {
+#ifdef BOOST_NO_STDC_NAMESPACE
+ using ::abs;
+ using ::sinh;
+ using ::sqrt;
+#else /* BOOST_NO_STDC_NAMESPACE */
+ using ::std::abs;
+ using ::std::sinh;
+ using ::std::sqrt;
+#endif /* BOOST_NO_STDC_NAMESPACE */
+
+ using ::std::numeric_limits;
+
+ static T const taylor_0_bound = numeric_limits<T>::epsilon();
+ static T const taylor_2_bound = sqrt(taylor_0_bound);
+ static T const taylor_n_bound = sqrt(taylor_2_bound);
+
+ if (abs(x) >= taylor_n_bound)
+ {
+ return(sinh(x)/x);
+ }
+ else
+ {
+ // approximation by taylor series in x at 0 up to order 0
+ T result = static_cast<T>(1);
+
+ if (abs(x) >= taylor_0_bound)
+ {
+ T x2 = x*x;
+
+ // approximation by taylor series in x at 0 up to order 2
+ result += x2/static_cast<T>(6);
+
+ if (abs(x) >= taylor_2_bound)
+ {
+ // approximation by taylor series in x at 0 up to order 4
+ result += (x2*x2)/static_cast<T>(120);
+ }
+ }
+
+ return(result);
+ }
+ }
+
+
+#ifdef BOOST_NO_TEMPLATE_TEMPLATES
+#else /* BOOST_NO_TEMPLATE_TEMPLATES */
+ template<typename T, template<typename> class U>
+ inline U<T> sinhc_pi(const U<T> x)
+ {
+#if defined(BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL) || defined(__GNUC__)
+ using namespace std;
+#elif defined(BOOST_NO_STDC_NAMESPACE)
+ using ::abs;
+ using ::sinh;
+ using ::sqrt;
+#else /* BOOST_NO_STDC_NAMESPACE */
+ using ::std::abs;
+ using ::std::sinh;
+ using ::std::sqrt;
+#endif /* BOOST_NO_STDC_NAMESPACE */
+
+ using ::std::numeric_limits;
+
+ static T const taylor_0_bound = numeric_limits<T>::epsilon();
+ static T const taylor_2_bound = sqrt(taylor_0_bound);
+ static T const taylor_n_bound = sqrt(taylor_2_bound);
+
+ if (abs(x) >= taylor_n_bound)
+ {
+ return(sinh(x)/x);
+ }
+ else
+ {
+ // approximation by taylor series in x at 0 up to order 0
+#ifdef __MWERKS__
+ U<T> result = static_cast<U<T> >(1);
+#else
+ U<T> result = U<T>(1);
+#endif
+
+ if (abs(x) >= taylor_0_bound)
+ {
+ U<T> x2 = x*x;
+
+ // approximation by taylor series in x at 0 up to order 2
+ result += x2/static_cast<T>(6);
+
+ if (abs(x) >= taylor_2_bound)
+ {
+ // approximation by taylor series in x at 0 up to order 4
+ result += (x2*x2)/static_cast<T>(120);
+ }
+ }
+
+ return(result);
+ }
+ }
+#endif /* BOOST_NO_TEMPLATE_TEMPLATES */
+ }
+}
+
+#endif /* BOOST_SINHC_HPP */
diff --git a/boost/boost/math_fwd.hpp b/boost/boost/math_fwd.hpp
new file mode 100644
index 00000000000..9ae83ba8054
--- /dev/null
+++ b/boost/boost/math_fwd.hpp
@@ -0,0 +1,101 @@
+// Boost math_fwd.hpp header file ------------------------------------------//
+
+// (C) Copyright Hubert Holin and Daryle Walker 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/math for documentation.
+
+#ifndef BOOST_MATH_FWD_HPP
+#define BOOST_MATH_FWD_HPP
+
+
+namespace boost
+{
+namespace math
+{
+
+
+// From <boost/math/quaternion.hpp> ----------------------------------------//
+
+template < typename T >
+ class quaternion;
+
+template < >
+ class quaternion< float >;
+template < >
+ class quaternion< double >;
+template < >
+ class quaternion< long double >;
+
+// Also has many function templates (including operators)
+
+
+// From <boost/math/octonion.hpp> ------------------------------------------//
+
+template < typename T >
+ class octonion;
+
+template < >
+ class octonion< float >;
+template < >
+ class octonion< double >;
+template < >
+ class octonion< long double >;
+
+// Also has many function templates (including operators)
+
+
+// From <boost/math/special_functions/acosh.hpp> ---------------------------//
+
+// Only has function template
+
+
+// From <boost/math/special_functions/asinh.hpp> ---------------------------//
+
+// Only has function template
+
+
+// From <boost/math/special_functions/atanh.hpp> ---------------------------//
+
+// Only has function template
+
+
+// From <boost/math/special_functions/sinc.hpp> ----------------------------//
+
+// Only has function templates
+
+
+// From <boost/math/special_functions/sinhc.hpp> ---------------------------//
+
+// Only has function templates
+
+
+// From <boost/math/common_factor.hpp> -------------------------------------//
+
+// Only #includes other headers
+
+
+// From <boost/math/common_factor_ct.hpp> ----------------------------------//
+
+template < unsigned long Value1, unsigned long Value2 >
+ struct static_gcd;
+template < unsigned long Value1, unsigned long Value2 >
+ struct static_lcm;
+
+
+// From <boost/math/common_factor_rt.hpp> ----------------------------------//
+
+template < typename IntegerType >
+ class gcd_evaluator;
+template < typename IntegerType >
+ class lcm_evaluator;
+
+// Also has a couple of function templates
+
+
+} // namespace math
+} // namespace boost
+
+
+#endif // BOOST_MATH_FWD_HPP
diff --git a/boost/boost/mem_fn.hpp b/boost/boost/mem_fn.hpp
new file mode 100644
index 00000000000..9695f57e80a
--- /dev/null
+++ b/boost/boost/mem_fn.hpp
@@ -0,0 +1,389 @@
+#ifndef BOOST_MEM_FN_HPP_INCLUDED
+#define BOOST_MEM_FN_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+// mem_fn.hpp - a generalization of std::mem_fun[_ref]
+//
+// Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd.
+// Copyright (c) 2001 David Abrahams
+// Copyright (c) 2003-2005 Peter Dimov
+//
+// 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/bind/mem_fn.html for documentation.
+//
+
+#include <boost/config.hpp>
+#include <boost/get_pointer.hpp>
+#include <boost/detail/workaround.hpp>
+
+namespace boost
+{
+
+#if defined(BOOST_NO_VOID_RETURNS)
+
+#define BOOST_MEM_FN_CLASS_F , class F
+#define BOOST_MEM_FN_TYPEDEF(X)
+
+namespace _mfi // mem_fun_impl
+{
+
+template<class V> struct mf
+{
+
+#define BOOST_MEM_FN_RETURN return
+
+#define BOOST_MEM_FN_NAME(X) inner_##X
+#define BOOST_MEM_FN_CC
+
+#include <boost/bind/mem_fn_template.hpp>
+
+#undef BOOST_MEM_FN_CC
+#undef BOOST_MEM_FN_NAME
+
+#ifdef BOOST_MEM_FN_ENABLE_CDECL
+
+#define BOOST_MEM_FN_NAME(X) inner_##X##_cdecl
+#define BOOST_MEM_FN_CC __cdecl
+
+#include <boost/bind/mem_fn_template.hpp>
+
+#undef BOOST_MEM_FN_CC
+#undef BOOST_MEM_FN_NAME
+
+#endif
+
+#ifdef BOOST_MEM_FN_ENABLE_STDCALL
+
+#define BOOST_MEM_FN_NAME(X) inner_##X##_stdcall
+#define BOOST_MEM_FN_CC __stdcall
+
+#include <boost/bind/mem_fn_template.hpp>
+
+#undef BOOST_MEM_FN_CC
+#undef BOOST_MEM_FN_NAME
+
+#endif
+
+#ifdef BOOST_MEM_FN_ENABLE_FASTCALL
+
+#define BOOST_MEM_FN_NAME(X) inner_##X##_fastcall
+#define BOOST_MEM_FN_CC __fastcall
+
+#include <boost/bind/mem_fn_template.hpp>
+
+#undef BOOST_MEM_FN_CC
+#undef BOOST_MEM_FN_NAME
+
+#endif
+
+#undef BOOST_MEM_FN_RETURN
+
+}; // struct mf<V>
+
+template<> struct mf<void>
+{
+
+#define BOOST_MEM_FN_RETURN
+
+#define BOOST_MEM_FN_NAME(X) inner_##X
+#define BOOST_MEM_FN_CC
+
+#include <boost/bind/mem_fn_template.hpp>
+
+#undef BOOST_MEM_FN_CC
+#undef BOOST_MEM_FN_NAME
+
+#ifdef BOOST_MEM_FN_ENABLE_CDECL
+
+#define BOOST_MEM_FN_NAME(X) inner_##X##_cdecl
+#define BOOST_MEM_FN_CC __cdecl
+
+#include <boost/bind/mem_fn_template.hpp>
+
+#undef BOOST_MEM_FN_CC
+#undef BOOST_MEM_FN_NAME
+
+#endif
+
+#ifdef BOOST_MEM_FN_ENABLE_STDCALL
+
+#define BOOST_MEM_FN_NAME(X) inner_##X##_stdcall
+#define BOOST_MEM_FN_CC __stdcall
+
+#include <boost/bind/mem_fn_template.hpp>
+
+#undef BOOST_MEM_FN_CC
+#undef BOOST_MEM_FN_NAME
+
+#endif
+
+#ifdef BOOST_MEM_FN_ENABLE_FASTCALL
+
+#define BOOST_MEM_FN_NAME(X) inner_##X##_fastcall
+#define BOOST_MEM_FN_CC __fastcall
+
+#include <boost/bind/mem_fn_template.hpp>
+
+#undef BOOST_MEM_FN_CC
+#undef BOOST_MEM_FN_NAME
+
+#endif
+
+#undef BOOST_MEM_FN_RETURN
+
+}; // struct mf<void>
+
+#undef BOOST_MEM_FN_CLASS_F
+#undef BOOST_MEM_FN_TYPEDEF_F
+
+#define BOOST_MEM_FN_NAME(X) X
+#define BOOST_MEM_FN_NAME2(X) inner_##X
+#define BOOST_MEM_FN_CC
+
+#include <boost/bind/mem_fn_vw.hpp>
+
+#undef BOOST_MEM_FN_NAME
+#undef BOOST_MEM_FN_NAME2
+#undef BOOST_MEM_FN_CC
+
+#ifdef BOOST_MEM_FN_ENABLE_CDECL
+
+#define BOOST_MEM_FN_NAME(X) X##_cdecl
+#define BOOST_MEM_FN_NAME2(X) inner_##X##_cdecl
+#define BOOST_MEM_FN_CC __cdecl
+
+#include <boost/bind/mem_fn_vw.hpp>
+
+#undef BOOST_MEM_FN_NAME
+#undef BOOST_MEM_FN_NAME2
+#undef BOOST_MEM_FN_CC
+
+#endif
+
+#ifdef BOOST_MEM_FN_ENABLE_STDCALL
+
+#define BOOST_MEM_FN_NAME(X) X##_stdcall
+#define BOOST_MEM_FN_NAME2(X) inner_##X##_stdcall
+#define BOOST_MEM_FN_CC __stdcall
+
+#include <boost/bind/mem_fn_vw.hpp>
+
+#undef BOOST_MEM_FN_NAME
+#undef BOOST_MEM_FN_NAME2
+#undef BOOST_MEM_FN_CC
+
+#endif
+
+#ifdef BOOST_MEM_FN_ENABLE_FASTCALL
+
+#define BOOST_MEM_FN_NAME(X) X##_fastcall
+#define BOOST_MEM_FN_NAME2(X) inner_##X##_fastcall
+#define BOOST_MEM_FN_CC __fastcall
+
+#include <boost/bind/mem_fn_vw.hpp>
+
+#undef BOOST_MEM_FN_NAME
+#undef BOOST_MEM_FN_NAME2
+#undef BOOST_MEM_FN_CC
+
+#endif
+
+} // namespace _mfi
+
+#else // #ifdef BOOST_NO_VOID_RETURNS
+
+#define BOOST_MEM_FN_CLASS_F
+#define BOOST_MEM_FN_TYPEDEF(X) typedef X;
+
+namespace _mfi
+{
+
+#define BOOST_MEM_FN_RETURN return
+
+#define BOOST_MEM_FN_NAME(X) X
+#define BOOST_MEM_FN_CC
+
+#include <boost/bind/mem_fn_template.hpp>
+
+#undef BOOST_MEM_FN_CC
+#undef BOOST_MEM_FN_NAME
+
+#ifdef BOOST_MEM_FN_ENABLE_CDECL
+
+#define BOOST_MEM_FN_NAME(X) X##_cdecl
+#define BOOST_MEM_FN_CC __cdecl
+
+#include <boost/bind/mem_fn_template.hpp>
+
+#undef BOOST_MEM_FN_CC
+#undef BOOST_MEM_FN_NAME
+
+#endif
+
+#ifdef BOOST_MEM_FN_ENABLE_STDCALL
+
+#define BOOST_MEM_FN_NAME(X) X##_stdcall
+#define BOOST_MEM_FN_CC __stdcall
+
+#include <boost/bind/mem_fn_template.hpp>
+
+#undef BOOST_MEM_FN_CC
+#undef BOOST_MEM_FN_NAME
+
+#endif
+
+#ifdef BOOST_MEM_FN_ENABLE_FASTCALL
+
+#define BOOST_MEM_FN_NAME(X) X##_fastcall
+#define BOOST_MEM_FN_CC __fastcall
+
+#include <boost/bind/mem_fn_template.hpp>
+
+#undef BOOST_MEM_FN_CC
+#undef BOOST_MEM_FN_NAME
+
+#endif
+
+#undef BOOST_MEM_FN_RETURN
+
+} // namespace _mfi
+
+#undef BOOST_MEM_FN_CLASS_F
+#undef BOOST_MEM_FN_TYPEDEF
+
+#endif // #ifdef BOOST_NO_VOID_RETURNS
+
+#define BOOST_MEM_FN_NAME(X) X
+#define BOOST_MEM_FN_CC
+
+#include <boost/bind/mem_fn_cc.hpp>
+
+#undef BOOST_MEM_FN_NAME
+#undef BOOST_MEM_FN_CC
+
+#ifdef BOOST_MEM_FN_ENABLE_CDECL
+
+#define BOOST_MEM_FN_NAME(X) X##_cdecl
+#define BOOST_MEM_FN_CC __cdecl
+
+#include <boost/bind/mem_fn_cc.hpp>
+
+#undef BOOST_MEM_FN_NAME
+#undef BOOST_MEM_FN_CC
+
+#endif
+
+#ifdef BOOST_MEM_FN_ENABLE_STDCALL
+
+#define BOOST_MEM_FN_NAME(X) X##_stdcall
+#define BOOST_MEM_FN_CC __stdcall
+
+#include <boost/bind/mem_fn_cc.hpp>
+
+#undef BOOST_MEM_FN_NAME
+#undef BOOST_MEM_FN_CC
+
+#endif
+
+#ifdef BOOST_MEM_FN_ENABLE_FASTCALL
+
+#define BOOST_MEM_FN_NAME(X) X##_fastcall
+#define BOOST_MEM_FN_CC __fastcall
+
+#include <boost/bind/mem_fn_cc.hpp>
+
+#undef BOOST_MEM_FN_NAME
+#undef BOOST_MEM_FN_CC
+
+#endif
+
+// data member support
+
+namespace _mfi
+{
+
+template<class R, class T> class dm
+{
+public:
+
+ typedef R const & result_type;
+ typedef T const * argument_type;
+
+private:
+
+ typedef R (T::*F);
+ F f_;
+
+ template<class U> R const & call(U & u, T const *) const
+ {
+ return (u.*f_);
+ }
+
+ template<class U> R const & call(U & u, void const *) const
+ {
+ return (get_pointer(u)->*f_);
+ }
+
+public:
+
+ explicit dm(F f): f_(f) {}
+
+ R & operator()(T * p) const
+ {
+ return (p->*f_);
+ }
+
+ R const & operator()(T const * p) const
+ {
+ return (p->*f_);
+ }
+
+ template<class U> R const & operator()(U const & u) const
+ {
+ return call(u, &u);
+ }
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) && !BOOST_WORKAROUND(__MWERKS__, < 0x3200)
+
+ R & operator()(T & t) const
+ {
+ return (t.*f_);
+ }
+
+ R const & operator()(T const & t) const
+ {
+ return (t.*f_);
+ }
+
+#endif
+
+ bool operator==(dm const & rhs) const
+ {
+ return f_ == rhs.f_;
+ }
+
+ bool operator!=(dm const & rhs) const
+ {
+ return f_ != rhs.f_;
+ }
+};
+
+} // namespace _mfi
+
+template<class R, class T> _mfi::dm<R, T> mem_fn(R T::*f)
+{
+ return _mfi::dm<R, T>(f);
+}
+
+} // namespace boost
+
+#endif // #ifndef BOOST_MEM_FN_HPP_INCLUDED
diff --git a/boost/boost/mpl/O1_size.hpp b/boost/boost/mpl/O1_size.hpp
new file mode 100644
index 00000000000..04ff381c41e
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/O1_size.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.5 $
+
+#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/boost/boost/mpl/O1_size_fwd.hpp b/boost/boost/mpl/O1_size_fwd.hpp
new file mode 100644
index 00000000000..26f8748e7da
--- /dev/null
+++ b/boost/boost/mpl/O1_size_fwd.hpp
@@ -0,0 +1,24 @@
+
+#ifndef BOOST_MPL_O1_SIZE_FWD_HPP_INCLUDED
+#define BOOST_MPL_O1_SIZE_FWD_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/O1_size_fwd.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.4 $
+
+namespace boost { namespace mpl {
+
+template< typename Tag > struct O1_size_impl;
+template< typename Sequence > struct O1_size;
+
+}}
+
+#endif // BOOST_MPL_O1_SIZE_FWD_HPP_INCLUDED
diff --git a/boost/boost/mpl/accumulate.hpp b/boost/boost/mpl/accumulate.hpp
new file mode 100644
index 00000000000..29065644cb8
--- /dev/null
+++ b/boost/boost/mpl/accumulate.hpp
@@ -0,0 +1,39 @@
+
+#ifndef BOOST_MPL_ACCUMULATE_HPP_INCLUDED
+#define BOOST_MPL_ACCUMULATE_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/accumulate.hpp,v $
+// $Date: 2005/01/19 15:20:21 $
+// $Revision: 1.2 $
+
+#include <boost/mpl/fold.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 accumulate
+ : fold<Sequence,State,ForwardOp>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(3,accumulate,(Sequence,State,ForwardOp))
+};
+
+BOOST_MPL_AUX_NA_SPEC(3, accumulate)
+
+}}
+
+#endif // BOOST_MPL_ACCUMULATE_HPP_INCLUDED
diff --git a/boost/boost/mpl/advance.hpp b/boost/boost/mpl/advance.hpp
new file mode 100644
index 00000000000..42450528597
--- /dev/null
+++ b/boost/boost/mpl/advance.hpp
@@ -0,0 +1,76 @@
+
+#ifndef BOOST_MPL_ADVANCE_HPP_INCLUDED
+#define BOOST_MPL_ADVANCE_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/advance.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.9 $
+
+#include <boost/mpl/advance_fwd.hpp>
+#include <boost/mpl/less.hpp>
+#include <boost/mpl/negate.hpp>
+#include <boost/mpl/long.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/tag.hpp>
+#include <boost/mpl/apply_wrap.hpp>
+#include <boost/mpl/aux_/advance_forward.hpp>
+#include <boost/mpl/aux_/advance_backward.hpp>
+#include <boost/mpl/aux_/value_wknd.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/nttp_decl.hpp>
+
+namespace boost { namespace mpl {
+
+// default implementation for forward/bidirectional iterators
+template< typename Tag >
+struct advance_impl
+{
+ template< typename Iterator, typename N > struct apply
+ {
+ typedef typename less< N,long_<0> >::type backward_;
+ typedef typename if_< backward_, negate<N>, N >::type offset_;
+
+ typedef typename if_<
+ backward_
+ , aux::advance_backward< BOOST_MPL_AUX_VALUE_WKND(offset_)::value >
+ , aux::advance_forward< BOOST_MPL_AUX_VALUE_WKND(offset_)::value >
+ >::type f_;
+
+ typedef typename apply_wrap1<f_,Iterator>::type type;
+ };
+};
+
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(Iterator)
+ , typename BOOST_MPL_AUX_NA_PARAM(N)
+ >
+struct advance
+ : advance_impl< typename tag<Iterator>::type >
+ ::template apply<Iterator,N>
+{
+};
+
+template<
+ typename Iterator
+ , BOOST_MPL_AUX_NTTP_DECL(long, N)
+ >
+struct advance_c
+ : advance_impl< typename tag<Iterator>::type >
+ ::template apply<Iterator,long_<N> >
+{
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, advance)
+
+}}
+
+#endif // BOOST_MPL_ADVANCE_HPP_INCLUDED
diff --git a/boost/boost/mpl/advance_fwd.hpp b/boost/boost/mpl/advance_fwd.hpp
new file mode 100644
index 00000000000..4a2fe03198f
--- /dev/null
+++ b/boost/boost/mpl/advance_fwd.hpp
@@ -0,0 +1,28 @@
+
+#ifndef BOOST_MPL_ADVANCE_FWD_HPP_INCLUDED
+#define BOOST_MPL_ADVANCE_FWD_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/advance_fwd.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.2 $
+
+#include <boost/mpl/aux_/common_name_wknd.hpp>
+
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_COMMON_NAME_WKND(advance)
+
+template< typename Tag > struct advance_impl;
+template< typename Iterator, typename N > struct advance;
+
+}}
+
+#endif // BOOST_MPL_ADVANCE_FWD_HPP_INCLUDED
diff --git a/boost/boost/mpl/alias.hpp b/boost/boost/mpl/alias.hpp
new file mode 100644
index 00000000000..88a2eeddf10
--- /dev/null
+++ b/boost/boost/mpl/alias.hpp
@@ -0,0 +1,21 @@
+
+#ifndef BOOST_MPL_ALIAS_HPP_INCLUDED
+#define BOOST_MPL_ALIAS_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/alias.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.4 $
+
+namespace {
+namespace mpl = boost::mpl;
+}
+
+#endif // BOOST_MPL_ALIAS_HPP_INCLUDED
diff --git a/boost/boost/mpl/always.hpp b/boost/boost/mpl/always.hpp
new file mode 100644
index 00000000000..f32cf9fd24e
--- /dev/null
+++ b/boost/boost/mpl/always.hpp
@@ -0,0 +1,39 @@
+
+#ifndef BOOST_MPL_ALWAYS_HPP_INCLUDED
+#define BOOST_MPL_ALWAYS_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/always.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.5 $
+
+#include <boost/mpl/aux_/preprocessor/def_params_tail.hpp>
+#include <boost/mpl/aux_/na.hpp>
+#include <boost/mpl/aux_/arity_spec.hpp>
+
+namespace boost { namespace mpl {
+
+template< typename Value > struct always
+{
+ template<
+ typename T
+ BOOST_MPL_PP_NESTED_DEF_PARAMS_TAIL(1, typename T, na)
+ >
+ struct apply
+ {
+ typedef Value type;
+ };
+};
+
+BOOST_MPL_AUX_ARITY_SPEC(1, always)
+
+}}
+
+#endif // BOOST_MPL_ALWAYS_HPP_INCLUDED
diff --git a/boost/boost/mpl/and.hpp b/boost/boost/mpl/and.hpp
new file mode 100644
index 00000000000..217c46c306c
--- /dev/null
+++ b/boost/boost/mpl/and.hpp
@@ -0,0 +1,56 @@
+
+#ifndef BOOST_MPL_AND_HPP_INCLUDED
+#define BOOST_MPL_AND_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/and.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.5 $
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+ && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+# include <boost/mpl/bool.hpp>
+# include <boost/mpl/aux_/nested_type_wknd.hpp>
+# include <boost/mpl/aux_/na_spec.hpp>
+# include <boost/mpl/aux_/lambda_support.hpp>
+
+// agurt, 19/may/04: workaround a conflict with <iso646.h> header's
+// 'or' and 'and' macros, see http://tinyurl.com/3et69; 'defined(and)'
+// has to be checked in a separate condition, otherwise GCC complains
+// about 'and' being an alternative token
+#if defined(_MSC_VER)
+#if defined(and)
+# pragma push_macro("and")
+# undef and
+# define and(x)
+#endif
+#endif
+
+# define BOOST_MPL_PREPROCESSED_HEADER and.hpp
+# include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#if defined(_MSC_VER)
+#if defined(and)
+# pragma pop_macro("and")
+#endif
+#endif
+
+#else
+
+# define AUX778076_OP_NAME and_
+# define AUX778076_OP_VALUE1 false
+# define AUX778076_OP_VALUE2 true
+# include <boost/mpl/aux_/logical_op.hpp>
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#endif // BOOST_MPL_AND_HPP_INCLUDED
diff --git a/boost/boost/mpl/apply.hpp b/boost/boost/mpl/apply.hpp
new file mode 100644
index 00000000000..f42cee3db1d
--- /dev/null
+++ b/boost/boost/mpl/apply.hpp
@@ -0,0 +1,225 @@
+
+#if !defined(BOOST_PP_IS_ITERATING)
+
+///// header body
+
+#ifndef BOOST_MPL_APPLY_HPP_INCLUDED
+#define BOOST_MPL_APPLY_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/apply.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.17 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/apply_fwd.hpp>
+# include <boost/mpl/apply_wrap.hpp>
+# include <boost/mpl/placeholders.hpp>
+# include <boost/mpl/lambda.hpp>
+# include <boost/mpl/aux_/na.hpp>
+# include <boost/mpl/aux_/lambda_support.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 apply.hpp
+# include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#else
+
+# include <boost/mpl/limits/arity.hpp>
+# include <boost/mpl/aux_/preprocessor/params.hpp>
+# include <boost/mpl/aux_/preprocessor/default_params.hpp>
+# include <boost/mpl/aux_/preprocessor/partial_spec_params.hpp>
+# include <boost/mpl/aux_/preprocessor/enum.hpp>
+# include <boost/mpl/aux_/config/lambda.hpp>
+# include <boost/mpl/aux_/config/dtp.hpp>
+# include <boost/mpl/aux_/nttp_decl.hpp>
+# include <boost/mpl/aux_/config/eti.hpp>
+# include <boost/mpl/aux_/config/msvc.hpp>
+# include <boost/mpl/aux_/config/workaround.hpp>
+
+# include <boost/preprocessor/comma_if.hpp>
+# include <boost/preprocessor/inc.hpp>
+# include <boost/preprocessor/iterate.hpp>
+# include <boost/preprocessor/cat.hpp>
+
+namespace boost { namespace mpl {
+
+// local macros, #undef-ined at the end of the header
+# define AUX778076_APPLY_PARAMS(param) \
+ BOOST_MPL_PP_PARAMS( \
+ BOOST_MPL_LIMIT_METAFUNCTION_ARITY \
+ , param \
+ ) \
+ /**/
+
+# define AUX778076_APPLY_DEF_PARAMS(param, value) \
+ BOOST_MPL_PP_DEFAULT_PARAMS( \
+ BOOST_MPL_LIMIT_METAFUNCTION_ARITY \
+ , param \
+ , value \
+ ) \
+ /**/
+
+# define AUX778076_APPLY_N_PARAMS(n, param) \
+ BOOST_MPL_PP_PARAMS(n, param) \
+ /**/
+
+# define AUX778076_APPLY_N_COMMA_PARAMS(n, param) \
+ BOOST_PP_COMMA_IF(n) \
+ BOOST_MPL_PP_PARAMS(n, param) \
+ /**/
+
+# define AUX778076_APPLY_N_PARTIAL_SPEC_PARAMS(n, param, def) \
+ BOOST_PP_COMMA_IF(n) \
+ BOOST_MPL_PP_PARTIAL_SPEC_PARAMS(n, param, def) \
+ /**/
+
+# define AUX778076_APPLY_N_SPEC_PARAMS(n, param) \
+ BOOST_MPL_PP_ENUM(BOOST_PP_INC(n), param) \
+ /**/
+
+
+#define BOOST_PP_ITERATION_PARAMS_1 \
+ (3,(0, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, <boost/mpl/apply.hpp>))
+#include BOOST_PP_ITERATE()
+
+# if !defined(BOOST_MPL_CFG_NO_APPLY_TEMPLATE)
+// real C++ version is already taken care of
+# if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+namespace aux {
+// apply_count_args
+#define AUX778076_COUNT_ARGS_PREFIX apply
+#define AUX778076_COUNT_ARGS_DEFAULT na
+#define AUX778076_COUNT_ARGS_ARITY BOOST_MPL_LIMIT_METAFUNCTION_ARITY
+#include <boost/mpl/aux_/count_args.hpp>
+}
+
+
+template<
+ typename F, AUX778076_APPLY_DEF_PARAMS(typename T, na)
+ >
+struct apply
+ : aux::apply_chooser<
+ aux::apply_count_args< AUX778076_APPLY_PARAMS(T) >::value
+ >::template result_< F, AUX778076_APPLY_PARAMS(T) >::type
+{
+};
+
+# endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+# endif // BOOST_MPL_CFG_NO_APPLY_TEMPLATE
+
+# undef AUX778076_APPLY_N_SPEC_PARAMS
+# undef AUX778076_APPLY_N_PARTIAL_SPEC_PARAMS
+# undef AUX778076_APPLY_N_COMMA_PARAMS
+# undef AUX778076_APPLY_N_PARAMS
+# undef AUX778076_APPLY_DEF_PARAMS
+# undef AUX778076_APPLY_PARAMS
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#endif // BOOST_MPL_APPLY_HPP_INCLUDED
+
+///// iteration, depth == 1
+
+#elif BOOST_PP_ITERATION_DEPTH() == 1
+
+# define i_ BOOST_PP_FRAME_ITERATION(1)
+
+template<
+ typename F AUX778076_APPLY_N_COMMA_PARAMS(i_, typename T)
+ >
+struct BOOST_PP_CAT(apply,i_)
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ : BOOST_PP_CAT(apply_wrap,i_)<
+ typename lambda<F>::type
+ AUX778076_APPLY_N_COMMA_PARAMS(i_, T)
+ >
+{
+#else
+{
+ typedef typename BOOST_PP_CAT(apply_wrap,i_)<
+ typename lambda<F>::type
+ AUX778076_APPLY_N_COMMA_PARAMS(i_, T)
+ >::type type;
+#endif
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ BOOST_PP_INC(i_)
+ , BOOST_PP_CAT(apply,i_)
+ , (F AUX778076_APPLY_N_COMMA_PARAMS(i_,T))
+ )
+};
+
+
+#if defined(BOOST_MPL_CFG_MSVC_ETI_BUG)
+/// workaround for ETI bug
+template<>
+struct BOOST_PP_CAT(apply,i_)<AUX778076_APPLY_N_SPEC_PARAMS(i_, int)>
+{
+ typedef int type;
+};
+#endif
+
+# if !defined(BOOST_MPL_CFG_NO_APPLY_TEMPLATE)
+# if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+#if i_ == BOOST_MPL_LIMIT_METAFUNCTION_ARITY
+/// primary template (not a specialization!)
+template<
+ typename F AUX778076_APPLY_N_COMMA_PARAMS(i_, typename T)
+ >
+struct apply
+ : BOOST_PP_CAT(apply,i_)< F AUX778076_APPLY_N_COMMA_PARAMS(i_, T) >
+{
+};
+#else
+template<
+ typename F AUX778076_APPLY_N_COMMA_PARAMS(i_, typename T)
+ >
+struct apply< F AUX778076_APPLY_N_PARTIAL_SPEC_PARAMS(i_, T, na) >
+ : BOOST_PP_CAT(apply,i_)< F AUX778076_APPLY_N_COMMA_PARAMS(i_, T) >
+{
+};
+#endif
+
+# else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#if !defined(BOOST_MPL_CFG_NO_APPLY_TEMPLATE)
+namespace aux {
+
+template<>
+struct apply_chooser<i_>
+{
+ template<
+ typename F, AUX778076_APPLY_PARAMS(typename T)
+ >
+ struct result_
+ {
+ typedef BOOST_PP_CAT(apply,i_)<
+ F AUX778076_APPLY_N_COMMA_PARAMS(i_, T)
+ > type;
+ };
+};
+
+} // namespace aux
+#endif
+
+# endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+# endif // BOOST_MPL_CFG_NO_APPLY_TEMPLATE
+
+# undef i_
+
+#endif // BOOST_PP_IS_ITERATING
diff --git a/boost/boost/mpl/apply_fwd.hpp b/boost/boost/mpl/apply_fwd.hpp
new file mode 100644
index 00000000000..2092ff9ce06
--- /dev/null
+++ b/boost/boost/mpl/apply_fwd.hpp
@@ -0,0 +1,107 @@
+
+#if !defined(BOOST_PP_IS_ITERATING)
+
+///// header body
+
+#ifndef BOOST_MPL_APPLY_FWD_HPP_INCLUDED
+#define BOOST_MPL_APPLY_FWD_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/apply_fwd.hpp,v $
+// $Date: 2005/08/25 16:27:21 $
+// $Revision: 1.3 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/aux_/na.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 apply_fwd.hpp
+# include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#else
+
+# include <boost/mpl/limits/arity.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/mpl/aux_/nttp_decl.hpp>
+
+# include <boost/preprocessor/comma_if.hpp>
+# include <boost/preprocessor/iterate.hpp>
+# include <boost/preprocessor/cat.hpp>
+
+// agurt, 15/jan/02: top-level 'apply' template gives an ICE on MSVC
+// (for known reasons)
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+# define BOOST_MPL_CFG_NO_APPLY_TEMPLATE
+#endif
+
+namespace boost { namespace mpl {
+
+// local macro, #undef-ined at the end of the header
+# define AUX778076_APPLY_DEF_PARAMS(param, value) \
+ BOOST_MPL_PP_DEFAULT_PARAMS( \
+ BOOST_MPL_LIMIT_METAFUNCTION_ARITY \
+ , param \
+ , value \
+ ) \
+ /**/
+
+# define AUX778076_APPLY_N_COMMA_PARAMS(n, param) \
+ BOOST_PP_COMMA_IF(n) \
+ BOOST_MPL_PP_PARAMS(n, param) \
+ /**/
+
+# if !defined(BOOST_MPL_CFG_NO_APPLY_TEMPLATE)
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+// forward declaration
+template<
+ typename F, AUX778076_APPLY_DEF_PARAMS(typename T, na)
+ >
+struct apply;
+#else
+namespace aux {
+template< BOOST_AUX_NTTP_DECL(int, arity_) > struct apply_chooser;
+}
+#endif
+
+# endif // BOOST_MPL_CFG_NO_APPLY_TEMPLATE
+
+#define BOOST_PP_ITERATION_PARAMS_1 \
+ (3,(0, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, <boost/mpl/apply_fwd.hpp>))
+#include BOOST_PP_ITERATE()
+
+
+# undef AUX778076_APPLY_N_COMMA_PARAMS
+# undef AUX778076_APPLY_DEF_PARAMS
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#endif // BOOST_MPL_APPLY_FWD_HPP_INCLUDED
+
+///// iteration
+
+#else
+#define i_ BOOST_PP_FRAME_ITERATION(1)
+
+template<
+ typename F AUX778076_APPLY_N_COMMA_PARAMS(i_, typename T)
+ >
+struct BOOST_PP_CAT(apply,i_);
+
+#undef i_
+#endif // BOOST_PP_IS_ITERATING
diff --git a/boost/boost/mpl/apply_wrap.hpp b/boost/boost/mpl/apply_wrap.hpp
new file mode 100644
index 00000000000..ae58189bff9
--- /dev/null
+++ b/boost/boost/mpl/apply_wrap.hpp
@@ -0,0 +1,200 @@
+
+#if !defined(BOOST_PP_IS_ITERATING)
+
+///// header body
+
+#ifndef BOOST_MPL_APPLY_WRAP_HPP_INCLUDED
+#define BOOST_MPL_APPLY_WRAP_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/apply_wrap.hpp,v $
+// $Date: 2004/09/03 15:56:55 $
+// $Revision: 1.3 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/aux_/arity.hpp>
+# include <boost/mpl/aux_/has_apply.hpp>
+# include <boost/mpl/aux_/na.hpp>
+# include <boost/mpl/aux_/msvc_never_true.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 apply_wrap.hpp
+# include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#else
+
+# include <boost/mpl/limits/arity.hpp>
+# include <boost/mpl/aux_/preprocessor/params.hpp>
+# include <boost/mpl/aux_/preprocessor/enum.hpp>
+# include <boost/mpl/aux_/preprocessor/add.hpp>
+# include <boost/mpl/aux_/config/dtp.hpp>
+# include <boost/mpl/aux_/config/eti.hpp>
+# include <boost/mpl/aux_/config/ctps.hpp>
+# include <boost/mpl/aux_/config/msvc.hpp>
+# include <boost/mpl/aux_/config/workaround.hpp>
+
+# include <boost/preprocessor/comma_if.hpp>
+# include <boost/preprocessor/logical/and.hpp>
+# include <boost/preprocessor/inc.hpp>
+# include <boost/preprocessor/iterate.hpp>
+
+
+namespace boost { namespace mpl {
+
+// local macros, #undef-ined at the end of the header
+# define AUX778076_APPLY_WRAP_PARAMS(n, param) \
+ BOOST_MPL_PP_PARAMS(n, param) \
+ /**/
+
+# define AUX778076_APPLY_WRAP_SPEC_PARAMS(n, param) \
+ BOOST_MPL_PP_ENUM(BOOST_PP_INC(n), param) \
+ /**/
+
+
+#define BOOST_PP_ITERATION_PARAMS_1 \
+ (3,(0, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, <boost/mpl/apply_wrap.hpp>))
+#include BOOST_PP_ITERATE()
+
+
+# undef AUX778076_APPLY_WRAP_SPEC_PARAMS
+# undef AUX778076_APPLY_WRAP_PARAMS
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#endif // BOOST_MPL_APPLY_WRAP_HPP_INCLUDED
+
+///// iteration, depth == 1
+
+#elif BOOST_PP_ITERATION_DEPTH() == 1
+
+# define i_ BOOST_PP_FRAME_ITERATION(1)
+
+# if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+// MSVC version
+
+#define AUX778076_MSVC_DTW_NAME BOOST_PP_CAT(msvc_apply,i_)
+#define AUX778076_MSVC_DTW_ORIGINAL_NAME apply
+#define AUX778076_MSVC_DTW_ARITY i_
+#include <boost/mpl/aux_/msvc_dtw.hpp>
+
+template<
+ typename F BOOST_PP_COMMA_IF(i_) AUX778076_APPLY_WRAP_PARAMS(i_, typename T)
+ >
+struct BOOST_PP_CAT(apply_wrap,i_)
+{
+ // Metafunction forwarding confuses vc6
+ typedef typename BOOST_PP_CAT(msvc_apply,i_)<F>::template result_<
+ AUX778076_APPLY_WRAP_PARAMS(i_, T)
+ >::type type;
+};
+
+# elif defined(BOOST_MPL_CFG_BROKEN_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES)
+// MWCW/Borland version
+
+template<
+ int N, typename F BOOST_PP_COMMA_IF(i_) AUX778076_APPLY_WRAP_PARAMS(i_, typename T)
+ >
+struct BOOST_PP_CAT(apply_wrap_impl,i_);
+
+#define BOOST_PP_ITERATION_PARAMS_2 \
+ (3,(0, BOOST_MPL_LIMIT_METAFUNCTION_ARITY - i_, <boost/mpl/apply_wrap.hpp>))
+#include BOOST_PP_ITERATE()
+
+template<
+ typename F BOOST_PP_COMMA_IF(i_) AUX778076_APPLY_WRAP_PARAMS(i_, typename T)
+ >
+struct BOOST_PP_CAT(apply_wrap,i_)
+ : BOOST_PP_CAT(apply_wrap_impl,i_)<
+ ::boost::mpl::aux::arity<F,i_>::value
+ , F
+ BOOST_PP_COMMA_IF(i_) AUX778076_APPLY_WRAP_PARAMS(i_, T)
+ >::type
+{
+};
+
+# else
+// ISO98 C++, with minor concession to vc7
+
+template<
+ typename F BOOST_PP_COMMA_IF(i_) AUX778076_APPLY_WRAP_PARAMS(i_, typename T)
+#if i_ == 0
+ , typename has_apply_ = typename aux::has_apply<F>::type
+#endif
+ >
+struct BOOST_PP_CAT(apply_wrap,i_)
+// metafunction forwarding confuses MSVC 7.0
+#if !BOOST_WORKAROUND(BOOST_MSVC, == 1300)
+ : F::template apply< AUX778076_APPLY_WRAP_PARAMS(i_, T) >
+{
+#else
+{
+ typedef typename F::template apply<
+ AUX778076_APPLY_WRAP_PARAMS(i_, T)
+ >::type type;
+#endif
+};
+
+#if i_ == 0 && !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+template< typename F >
+struct BOOST_PP_CAT(apply_wrap,i_)<F,true_>
+ : F::apply
+{
+};
+#endif
+
+# endif // workarounds
+
+#if defined(BOOST_MPL_CFG_MSVC_ETI_BUG)
+/// workaround for ETI bug
+template<>
+struct BOOST_PP_CAT(apply_wrap,i_)<AUX778076_APPLY_WRAP_SPEC_PARAMS(i_, int)>
+{
+ typedef int type;
+};
+#endif
+
+# undef i_
+
+///// iteration, depth == 2
+
+#elif BOOST_PP_ITERATION_DEPTH() == 2
+
+# define j_ BOOST_PP_FRAME_ITERATION(2)
+
+template<
+ typename F BOOST_PP_COMMA_IF(i_) AUX778076_APPLY_WRAP_PARAMS(i_, typename T)
+ >
+struct BOOST_PP_CAT(apply_wrap_impl,i_)<
+ BOOST_MPL_PP_ADD(i_, j_)
+ , F
+ BOOST_PP_COMMA_IF(i_) AUX778076_APPLY_WRAP_PARAMS(i_, T)
+ >
+{
+ typedef typename F::template apply<
+ AUX778076_APPLY_WRAP_PARAMS(i_, T)
+#if i_ == 0 && j_ == 0
+/// since the defaults are "lost", we have to pass *something* even for nullary
+/// metafunction classes
+ na
+#else
+ BOOST_PP_COMMA_IF(BOOST_PP_AND(i_, j_)) BOOST_MPL_PP_ENUM(j_, na)
+#endif
+ > type;
+};
+
+# undef j_
+
+#endif // BOOST_PP_IS_ITERATING
diff --git a/boost/boost/mpl/arg.hpp b/boost/boost/mpl/arg.hpp
new file mode 100644
index 00000000000..a96b86aad7d
--- /dev/null
+++ b/boost/boost/mpl/arg.hpp
@@ -0,0 +1,131 @@
+
+#if !defined(BOOST_PP_IS_ITERATING)
+
+///// header body
+
+#ifndef BOOST_MPL_ARG_HPP_INCLUDED
+#define BOOST_MPL_ARG_HPP_INCLUDED
+
+// Copyright Peter Dimov 2001-2002
+// 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/arg.hpp,v $
+// $Date: 2004/09/21 13:48:07 $
+// $Revision: 1.12 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/arg_fwd.hpp>
+# include <boost/mpl/aux_/na.hpp>
+# include <boost/mpl/aux_/na_assert.hpp>
+# include <boost/mpl/aux_/arity_spec.hpp>
+# include <boost/mpl/aux_/arg_typedef.hpp>
+#endif
+
+#include <boost/mpl/aux_/config/static_constant.hpp>
+#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 arg.hpp
+# include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#else
+
+# include <boost/mpl/limits/arity.hpp>
+# include <boost/mpl/aux_/preprocessor/default_params.hpp>
+# include <boost/mpl/aux_/preprocessor/params.hpp>
+# include <boost/mpl/aux_/config/lambda.hpp>
+# include <boost/mpl/aux_/config/dtp.hpp>
+# include <boost/mpl/aux_/nttp_decl.hpp>
+
+# include <boost/preprocessor/iterate.hpp>
+# include <boost/preprocessor/inc.hpp>
+# include <boost/preprocessor/cat.hpp>
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+
+// local macro, #undef-ined at the end of the header
+#if !defined(BOOST_MPL_CFG_NO_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES)
+# define AUX778076_ARG_N_DEFAULT_PARAMS(param,value) \
+ BOOST_MPL_PP_DEFAULT_PARAMS( \
+ BOOST_MPL_LIMIT_METAFUNCTION_ARITY \
+ , param \
+ , value \
+ ) \
+ /**/
+#else
+# define AUX778076_ARG_N_DEFAULT_PARAMS(param,value) \
+ BOOST_MPL_PP_PARAMS( \
+ BOOST_MPL_LIMIT_METAFUNCTION_ARITY \
+ , param \
+ ) \
+ /**/
+#endif
+
+#define BOOST_PP_ITERATION_PARAMS_1 \
+ (3,(0, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, <boost/mpl/arg.hpp>))
+#include BOOST_PP_ITERATE()
+
+
+# undef AUX778076_ARG_N_DEFAULT_PARAMS
+
+BOOST_MPL_AUX_NONTYPE_ARITY_SPEC(1,int,arg)
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#endif // BOOST_MPL_ARG_HPP_INCLUDED
+
+///// iteration
+
+#else
+#define i_ BOOST_PP_FRAME_ITERATION(1)
+
+#if i_ > 0
+
+template<> struct arg<i_>
+{
+ BOOST_STATIC_CONSTANT(int, value = i_);
+ typedef arg<BOOST_PP_INC(i_)> next;
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ AUX778076_ARG_N_DEFAULT_PARAMS(typename U, na)
+ >
+ struct apply
+ {
+ typedef BOOST_PP_CAT(U,i_) type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+#else
+
+template<> struct arg<-1>
+{
+ BOOST_STATIC_CONSTANT(int, value = -1);
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ AUX778076_ARG_N_DEFAULT_PARAMS(typename U, na)
+ >
+ struct apply
+ {
+ typedef U1 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+#endif // i_ > 0
+
+#undef i_
+#endif // BOOST_PP_IS_ITERATING
diff --git a/boost/boost/mpl/arg_fwd.hpp b/boost/boost/mpl/arg_fwd.hpp
new file mode 100644
index 00000000000..4c9e3a18501
--- /dev/null
+++ b/boost/boost/mpl/arg_fwd.hpp
@@ -0,0 +1,28 @@
+
+#ifndef BOOST_MPL_ARG_FWD_HPP_INCLUDED
+#define BOOST_MPL_ARG_FWD_HPP_INCLUDED
+
+// Copyright Peter Dimov 2001-2002
+// 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/arg_fwd.hpp,v $
+// $Date: 2004/09/28 13:56:58 $
+// $Revision: 1.6 $
+
+#include <boost/mpl/aux_/adl_barrier.hpp>
+#include <boost/mpl/aux_/nttp_decl.hpp>
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+
+template< BOOST_MPL_AUX_NTTP_DECL(int, N) > struct arg;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+BOOST_MPL_AUX_ADL_BARRIER_DECL(arg)
+
+#endif // BOOST_MPL_ARG_FWD_HPP_INCLUDED
diff --git a/boost/boost/mpl/arithmetic.hpp b/boost/boost/mpl/arithmetic.hpp
new file mode 100644
index 00000000000..598a728669f
--- /dev/null
+++ b/boost/boost/mpl/arithmetic.hpp
@@ -0,0 +1,25 @@
+
+#ifndef BOOST_MPL_ARITHMETIC_HPP_INCLUDED
+#define BOOST_MPL_ARITHMETIC_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/arithmetic.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.5 $
+
+#include <boost/mpl/plus.hpp>
+#include <boost/mpl/minus.hpp>
+#include <boost/mpl/times.hpp>
+#include <boost/mpl/divides.hpp>
+#include <boost/mpl/modulus.hpp>
+#include <boost/mpl/negate.hpp>
+#include <boost/mpl/multiplies.hpp> // deprecated
+
+#endif // BOOST_MPL_ARITHMETIC_HPP_INCLUDED
diff --git a/boost/boost/mpl/as_sequence.hpp b/boost/boost/mpl/as_sequence.hpp
new file mode 100644
index 00000000000..ba3d6f4cdee
--- /dev/null
+++ b/boost/boost/mpl/as_sequence.hpp
@@ -0,0 +1,38 @@
+
+#ifndef BOOST_MPL_AS_SEQUENCE_HPP_INCLUDED
+#define BOOST_MPL_AS_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/as_sequence.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/is_sequence.hpp>
+#include <boost/mpl/single_view.hpp>
+#include <boost/mpl/if.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 as_sequence
+ : if_< is_sequence<T>, T, single_view<T> >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,as_sequence,(T))
+};
+
+BOOST_MPL_AUX_NA_SPEC_NO_ETI(1, as_sequence)
+
+}}
+
+#endif // BOOST_MPL_AS_SEQUENCE_HPP_INCLUDED
diff --git a/boost/boost/mpl/assert.hpp b/boost/boost/mpl/assert.hpp
new file mode 100644
index 00000000000..d4b888d6dfc
--- /dev/null
+++ b/boost/boost/mpl/assert.hpp
@@ -0,0 +1,361 @@
+
+#ifndef BOOST_MPL_ASSERT_HPP_INCLUDED
+#define BOOST_MPL_ASSERT_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/assert.hpp,v $
+// $Date: 2006/11/10 21:31:19 $
+// $Revision: 1.13.14.6 $
+
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/aux_/value_wknd.hpp>
+#include <boost/mpl/aux_/nested_type_wknd.hpp>
+#include <boost/mpl/aux_/yes_no.hpp>
+#include <boost/mpl/aux_/na.hpp>
+#include <boost/mpl/aux_/adl_barrier.hpp>
+
+#include <boost/mpl/aux_/config/nttp.hpp>
+#include <boost/mpl/aux_/config/dtp.hpp>
+#include <boost/mpl/aux_/config/gcc.hpp>
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/static_constant.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#include <boost/preprocessor/cat.hpp>
+
+#include <boost/config.hpp> // make sure 'size_t' is placed into 'std'
+#include <cstddef>
+
+
+#if BOOST_WORKAROUND(__BORLANDC__, >= 0x560) && BOOST_WORKAROUND(__BORLANDC__, < 0x600) \
+ || (BOOST_MPL_CFG_GCC != 0) \
+ || BOOST_WORKAROUND(__IBMCPP__, <= 600)
+# define BOOST_MPL_CFG_ASSERT_USE_RELATION_NAMES
+#endif
+
+#if BOOST_WORKAROUND(__MWERKS__, < 0x3202) \
+ || BOOST_WORKAROUND(__EDG_VERSION__, <= 238) \
+ || BOOST_WORKAROUND(__BORLANDC__, < 0x600) \
+ || BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))
+# define BOOST_MPL_CFG_ASSERT_BROKEN_POINTER_TO_POINTER_TO_MEMBER
+#endif
+
+// agurt, 10/nov/06: use enums for Borland (which cannot cope with static constants)
+// and GCC (which issues "unused variable" warnings when static constants are used
+// at a function scope)
+#if BOOST_WORKAROUND(__BORLANDC__, < 0x600) \
+ || (BOOST_MPL_CFG_GCC != 0)
+# define BOOST_MPL_AUX_ASSERT_CONSTANT(T, expr) enum { expr }
+#else
+# define BOOST_MPL_AUX_ASSERT_CONSTANT(T, expr) BOOST_STATIC_CONSTANT(T, expr)
+#endif
+
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+
+struct failed {};
+
+// agurt, 24/aug/04: MSVC 7.1 workaround here and below: return/accept
+// 'assert<false>' by reference; can't apply it unconditionally -- apparently it
+// degrades the quality of GCC diagnostics
+#if BOOST_WORKAROUND(BOOST_MSVC, == 1310)
+# define AUX778076_ASSERT_ARG(x) x&
+#else
+# define AUX778076_ASSERT_ARG(x) x
+#endif
+
+template< bool C > struct assert { typedef void* type; };
+template<> struct assert<false> { typedef AUX778076_ASSERT_ARG(assert) type; };
+
+template< bool C >
+int assertion_failed( typename assert<C>::type );
+
+template< bool C >
+struct assertion
+{
+ static int failed( assert<false> );
+};
+
+template<>
+struct assertion<true>
+{
+ static int failed( void* );
+};
+
+struct assert_
+{
+#if !defined(BOOST_MPL_CFG_NO_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES)
+ template< typename T1, typename T2 = na, typename T3 = na, typename T4 = na > struct types {};
+#endif
+ static assert_ const arg;
+ enum relations { equal = 1, not_equal, greater, greater_equal, less, less_equal };
+};
+
+
+#if !defined(BOOST_MPL_CFG_ASSERT_USE_RELATION_NAMES)
+
+bool operator==( failed, failed );
+bool operator!=( failed, failed );
+bool operator>( failed, failed );
+bool operator>=( failed, failed );
+bool operator<( failed, failed );
+bool operator<=( failed, failed );
+
+#if defined(__EDG_VERSION__)
+template< bool (*)(failed, failed), long x, long y > struct assert_relation {};
+# define BOOST_MPL_AUX_ASSERT_RELATION(x, y, r) assert_relation<r,x,y>
+#else
+template< BOOST_MPL_AUX_NTTP_DECL(long, x), BOOST_MPL_AUX_NTTP_DECL(long, y), bool (*)(failed, failed) >
+struct assert_relation {};
+# define BOOST_MPL_AUX_ASSERT_RELATION(x, y, r) assert_relation<x,y,r>
+#endif
+
+#else // BOOST_MPL_CFG_ASSERT_USE_RELATION_NAMES
+
+boost::mpl::aux::weighted_tag<1>::type operator==( assert_, assert_ );
+boost::mpl::aux::weighted_tag<2>::type operator!=( assert_, assert_ );
+boost::mpl::aux::weighted_tag<3>::type operator>( assert_, assert_ );
+boost::mpl::aux::weighted_tag<4>::type operator>=( assert_, assert_ );
+boost::mpl::aux::weighted_tag<5>::type operator<( assert_, assert_ );
+boost::mpl::aux::weighted_tag<6>::type operator<=( assert_, assert_ );
+
+template< assert_::relations r, long x, long y > struct assert_relation {};
+
+#endif
+
+
+#if !defined(BOOST_MPL_CFG_ASSERT_BROKEN_POINTER_TO_POINTER_TO_MEMBER)
+
+template< bool > struct assert_arg_pred_impl { typedef int type; };
+template<> struct assert_arg_pred_impl<true> { typedef void* type; };
+
+template< typename P > struct assert_arg_pred
+{
+ typedef typename P::type p_type;
+ typedef typename assert_arg_pred_impl< p_type::value >::type type;
+};
+
+template< typename P > struct assert_arg_pred_not
+{
+ typedef typename P::type p_type;
+ BOOST_MPL_AUX_ASSERT_CONSTANT( bool, p = !p_type::value );
+ typedef typename assert_arg_pred_impl<p>::type type;
+};
+
+template< typename Pred >
+failed ************ (Pred::************
+ assert_arg( void (*)(Pred), typename assert_arg_pred<Pred>::type )
+ );
+
+template< typename Pred >
+failed ************ (boost::mpl::not_<Pred>::************
+ assert_not_arg( void (*)(Pred), typename assert_arg_pred_not<Pred>::type )
+ );
+
+template< typename Pred >
+AUX778076_ASSERT_ARG(assert<false>)
+assert_arg( void (*)(Pred), typename assert_arg_pred_not<Pred>::type );
+
+template< typename Pred >
+AUX778076_ASSERT_ARG(assert<false>)
+assert_not_arg( void (*)(Pred), typename assert_arg_pred<Pred>::type );
+
+
+#else // BOOST_MPL_CFG_ASSERT_BROKEN_POINTER_TO_POINTER_TO_MEMBER
+
+template< bool c, typename Pred > struct assert_arg_type_impl
+{
+ typedef failed ************ Pred::* mwcw83_wknd;
+ typedef mwcw83_wknd ************* type;
+};
+
+template< typename Pred > struct assert_arg_type_impl<true,Pred>
+{
+ typedef AUX778076_ASSERT_ARG(assert<false>) type;
+};
+
+template< typename Pred > struct assert_arg_type
+ : assert_arg_type_impl< BOOST_MPL_AUX_VALUE_WKND(BOOST_MPL_AUX_NESTED_TYPE_WKND(Pred))::value, Pred >
+{
+};
+
+template< typename Pred >
+typename assert_arg_type<Pred>::type
+assert_arg(void (*)(Pred), int);
+
+template< typename Pred >
+typename assert_arg_type< boost::mpl::not_<Pred> >::type
+assert_not_arg(void (*)(Pred), int);
+
+# if !defined(BOOST_MPL_CFG_ASSERT_USE_RELATION_NAMES)
+template< long x, long y, bool (*r)(failed, failed) >
+typename assert_arg_type_impl< false,BOOST_MPL_AUX_ASSERT_RELATION(x,y,r) >::type
+assert_rel_arg( BOOST_MPL_AUX_ASSERT_RELATION(x,y,r) );
+# else
+template< assert_::relations r, long x, long y >
+typename assert_arg_type_impl< false,assert_relation<r,x,y> >::type
+assert_rel_arg( assert_relation<r,x,y> );
+# endif
+
+#endif // BOOST_MPL_CFG_ASSERT_BROKEN_POINTER_TO_POINTER_TO_MEMBER
+
+#undef AUX778076_ASSERT_ARG
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+
+
+// BOOST_MPL_ASSERT((pred<x,...>))
+
+#define BOOST_MPL_ASSERT(pred) \
+BOOST_MPL_AUX_ASSERT_CONSTANT( \
+ std::size_t \
+ , BOOST_PP_CAT(mpl_assertion_in_line_,__LINE__) = sizeof( \
+ boost::mpl::assertion_failed<false>( \
+ boost::mpl::assert_arg( (void (*) pred)0, 1 ) \
+ ) \
+ ) \
+ ) \
+/**/
+
+// BOOST_MPL_ASSERT_NOT((pred<x,...>))
+
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+# define BOOST_MPL_ASSERT_NOT(pred) \
+enum { \
+ BOOST_PP_CAT(mpl_assertion_in_line_,__LINE__) = sizeof( \
+ boost::mpl::assertion<false>::failed( \
+ boost::mpl::assert_not_arg( (void (*) pred)0, 1 ) \
+ ) \
+ ) \
+}\
+/**/
+#else
+# define BOOST_MPL_ASSERT_NOT(pred) \
+BOOST_MPL_AUX_ASSERT_CONSTANT( \
+ std::size_t \
+ , BOOST_PP_CAT(mpl_assertion_in_line_,__LINE__) = sizeof( \
+ boost::mpl::assertion_failed<false>( \
+ boost::mpl::assert_not_arg( (void (*) pred)0, 1 ) \
+ ) \
+ ) \
+ ) \
+/**/
+#endif
+
+// BOOST_MPL_ASSERT_RELATION(x, ==|!=|<=|<|>=|>, y)
+
+#if defined(BOOST_MPL_CFG_ASSERT_USE_RELATION_NAMES)
+
+# if !defined(BOOST_MPL_CFG_ASSERT_BROKEN_POINTER_TO_POINTER_TO_MEMBER)
+// agurt, 9/nov/06: 'enum' below is a workaround for gcc 4.0.4/4.1.1 bugs #29522 and #29518
+# define BOOST_MPL_ASSERT_RELATION(x, rel, y) \
+enum { BOOST_PP_CAT(mpl_assert_rel_value,__LINE__) = (x rel y) }; \
+BOOST_MPL_AUX_ASSERT_CONSTANT( \
+ std::size_t \
+ , BOOST_PP_CAT(mpl_assertion_in_line_,__LINE__) = sizeof( \
+ boost::mpl::assertion_failed<BOOST_PP_CAT(mpl_assert_rel_value,__LINE__)>( \
+ (boost::mpl::failed ************ ( boost::mpl::assert_relation< \
+ boost::mpl::assert_::relations( sizeof( \
+ boost::mpl::assert_::arg rel boost::mpl::assert_::arg \
+ ) ) \
+ , x \
+ , y \
+ >::************)) 0 ) \
+ ) \
+ ) \
+/**/
+# else
+# define BOOST_MPL_ASSERT_RELATION(x, rel, y) \
+BOOST_MPL_AUX_ASSERT_CONSTANT( \
+ std::size_t \
+ , BOOST_PP_CAT(mpl_assert_rel,__LINE__) = sizeof( \
+ boost::mpl::assert_::arg rel boost::mpl::assert_::arg \
+ ) \
+ ); \
+BOOST_MPL_AUX_ASSERT_CONSTANT( bool, BOOST_PP_CAT(mpl_assert_rel_value,__LINE__) = (x rel y) ); \
+BOOST_MPL_AUX_ASSERT_CONSTANT( \
+ std::size_t \
+ , BOOST_PP_CAT(mpl_assertion_in_line_,__LINE__) = sizeof( \
+ boost::mpl::assertion_failed<BOOST_PP_CAT(mpl_assert_rel_value,__LINE__)>( \
+ boost::mpl::assert_rel_arg( boost::mpl::assert_relation< \
+ boost::mpl::assert_::relations(BOOST_PP_CAT(mpl_assert_rel,__LINE__)) \
+ , x \
+ , y \
+ >() ) \
+ ) \
+ ) \
+ ) \
+/**/
+# endif
+
+#else // !BOOST_MPL_CFG_ASSERT_USE_RELATION_NAMES
+
+# if defined(BOOST_MPL_CFG_ASSERT_BROKEN_POINTER_TO_POINTER_TO_MEMBER)
+# define BOOST_MPL_ASSERT_RELATION(x, rel, y) \
+BOOST_MPL_AUX_ASSERT_CONSTANT( \
+ std::size_t \
+ , BOOST_PP_CAT(mpl_assertion_in_line_,__LINE__) = sizeof( \
+ boost::mpl::assertion_failed<(x rel y)>( boost::mpl::assert_rel_arg( \
+ boost::mpl::BOOST_MPL_AUX_ASSERT_RELATION(x,y,(&boost::mpl::operator rel))() \
+ ) ) \
+ ) \
+ ) \
+/**/
+# else
+# define BOOST_MPL_ASSERT_RELATION(x, rel, y) \
+BOOST_MPL_AUX_ASSERT_CONSTANT( \
+ std::size_t \
+ , BOOST_PP_CAT(mpl_assertion_in_line_,__LINE__) = sizeof( \
+ boost::mpl::assertion_failed<(x rel y)>( (boost::mpl::failed ************ ( \
+ boost::mpl::BOOST_MPL_AUX_ASSERT_RELATION(x,y,(&boost::mpl::operator rel))::************))0 ) \
+ ) \
+ ) \
+/**/
+# endif
+
+#endif
+
+
+// BOOST_MPL_ASSERT_MSG( (pred<x,...>::value), USER_PROVIDED_MESSAGE, (types<x,...>) )
+
+#if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3202))
+# define BOOST_MPL_ASSERT_MSG( c, msg, types_ ) \
+struct msg; \
+typedef struct BOOST_PP_CAT(msg,__LINE__) : boost::mpl::assert_ \
+{ \
+ using boost::mpl::assert_::types; \
+ static boost::mpl::failed ************ (msg::************ assert_arg()) types_ \
+ { return 0; } \
+} BOOST_PP_CAT(mpl_assert_arg,__LINE__); \
+BOOST_MPL_AUX_ASSERT_CONSTANT( \
+ std::size_t \
+ , BOOST_PP_CAT(mpl_assertion_in_line_,__LINE__) = sizeof( \
+ boost::mpl::assertion<(c)>::failed( BOOST_PP_CAT(mpl_assert_arg,__LINE__)::assert_arg() ) \
+ ) \
+ ) \
+/**/
+#else
+# define BOOST_MPL_ASSERT_MSG( c, msg, types_ ) \
+struct msg; \
+typedef struct BOOST_PP_CAT(msg,__LINE__) : boost::mpl::assert_ \
+{ \
+ static boost::mpl::failed ************ (msg::************ assert_arg()) types_ \
+ { return 0; } \
+} BOOST_PP_CAT(mpl_assert_arg,__LINE__); \
+BOOST_MPL_AUX_ASSERT_CONSTANT( \
+ std::size_t \
+ , BOOST_PP_CAT(mpl_assertion_in_line_,__LINE__) = sizeof( \
+ boost::mpl::assertion_failed<(c)>( BOOST_PP_CAT(mpl_assert_arg,__LINE__)::assert_arg() ) \
+ ) \
+ ) \
+/**/
+#endif
+
+#endif // BOOST_MPL_ASSERT_HPP_INCLUDED
diff --git a/boost/boost/mpl/at.hpp b/boost/boost/mpl/at.hpp
new file mode 100644
index 00000000000..403a27911a4
--- /dev/null
+++ b/boost/boost/mpl/at.hpp
@@ -0,0 +1,52 @@
+
+#ifndef BOOST_MPL_AT_HPP_INCLUDED
+#define BOOST_MPL_AT_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/at.hpp,v $
+// $Date: 2004/09/04 01:33:46 $
+// $Revision: 1.7 $
+
+#include <boost/mpl/at_fwd.hpp>
+#include <boost/mpl/aux_/at_impl.hpp>
+#include <boost/mpl/long.hpp>
+#include <boost/mpl/sequence_tag.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/mpl/aux_/nttp_decl.hpp>
+
+namespace boost { namespace mpl {
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+ , typename BOOST_MPL_AUX_NA_PARAM(N)
+ >
+struct at
+ : at_impl< typename sequence_tag<Sequence>::type >
+ ::template apply< Sequence,N >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2,at,(Sequence,N))
+};
+
+template<
+ typename Sequence
+ , BOOST_MPL_AUX_NTTP_DECL(long, N)
+ >
+struct at_c
+ : at_impl< typename sequence_tag<Sequence>::type >
+ ::template apply< Sequence,mpl::long_<N> >
+{
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, at)
+
+}}
+
+#endif // BOOST_MPL_AT_HPP_INCLUDED
diff --git a/boost/boost/mpl/at_fwd.hpp b/boost/boost/mpl/at_fwd.hpp
new file mode 100644
index 00000000000..941101ec5e3
--- /dev/null
+++ b/boost/boost/mpl/at_fwd.hpp
@@ -0,0 +1,24 @@
+
+#ifndef BOOST_MPL_AT_FWD_HPP_INCLUDED
+#define BOOST_MPL_AT_FWD_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/at_fwd.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.5 $
+
+namespace boost { namespace mpl {
+
+template< typename Tag > struct at_impl;
+template< typename Sequence, typename N > struct at;
+
+}}
+
+#endif // BOOST_MPL_AT_FWD_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/O1_size_impl.hpp b/boost/boost/mpl/aux_/O1_size_impl.hpp
new file mode 100644
index 00000000000..ac4e8c3c5e1
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/O1_size_impl.hpp,v $
+// $Date: 2004/09/02 15:40:42 $
+// $Revision: 1.4 $
+
+#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/boost/boost/mpl/aux_/adl_barrier.hpp b/boost/boost/mpl/aux_/adl_barrier.hpp
new file mode 100644
index 00000000000..3783dd022db
--- /dev/null
+++ b/boost/boost/mpl/aux_/adl_barrier.hpp
@@ -0,0 +1,48 @@
+
+#ifndef BOOST_MPL_AUX_ADL_BARRIER_HPP_INCLUDED
+#define BOOST_MPL_AUX_ADL_BARRIER_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/adl_barrier.hpp,v $
+// $Date: 2004/09/28 13:56:59 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/aux_/config/adl.hpp>
+#include <boost/mpl/aux_/config/gcc.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_ADL_BARRIER_NAMESPACE)
+
+# define BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE mpl_
+# define BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN namespace mpl_ {
+# define BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE }
+# define BOOST_MPL_AUX_ADL_BARRIER_DECL(type) \
+ namespace boost { namespace mpl { \
+ using ::BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::type; \
+ } } \
+/**/
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+namespace BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE { namespace aux {} }
+namespace boost { namespace mpl { using namespace BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE;
+namespace aux { using namespace BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::aux; }
+}}
+#endif
+
+#else // BOOST_MPL_CFG_NO_ADL_BARRIER_NAMESPACE
+
+# define BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE boost::mpl
+# define BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN namespace boost { namespace mpl {
+# define BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE }}
+# define BOOST_MPL_AUX_ADL_BARRIER_DECL(type) /**/
+
+#endif
+
+#endif // BOOST_MPL_AUX_ADL_BARRIER_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/advance_backward.hpp b/boost/boost/mpl/aux_/advance_backward.hpp
new file mode 100644
index 00000000000..51bcf035b25
--- /dev/null
+++ b/boost/boost/mpl/aux_/advance_backward.hpp
@@ -0,0 +1,124 @@
+
+#if !defined(BOOST_PP_IS_ITERATING)
+
+///// header body
+
+#ifndef BOOST_MPL_AUX778076_ADVANCE_BACKWARD_HPP_INCLUDED
+#define BOOST_MPL_AUX778076_ADVANCE_BACKWARD_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/advance_backward.hpp,v $
+// $Date: 2004/09/02 15:40:43 $
+// $Revision: 1.9 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/prior.hpp>
+# include <boost/mpl/apply_wrap.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 advance_backward.hpp
+# include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#else
+
+# include <boost/mpl/limits/unrolling.hpp>
+# include <boost/mpl/aux_/nttp_decl.hpp>
+# include <boost/mpl/aux_/config/eti.hpp>
+
+# include <boost/preprocessor/iterate.hpp>
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/inc.hpp>
+
+namespace boost { namespace mpl { namespace aux {
+
+// forward declaration
+template< BOOST_MPL_AUX_NTTP_DECL(long, N) > struct advance_backward;
+
+# define BOOST_PP_ITERATION_PARAMS_1 \
+ (3,(0, BOOST_MPL_LIMIT_UNROLLING, <boost/mpl/aux_/advance_backward.hpp>))
+# include BOOST_PP_ITERATE()
+
+// implementation for N that exceeds BOOST_MPL_LIMIT_UNROLLING
+template< BOOST_MPL_AUX_NTTP_DECL(long, N) >
+struct advance_backward
+{
+ template< typename Iterator > struct apply
+ {
+ typedef typename apply_wrap1<
+ advance_backward<BOOST_MPL_LIMIT_UNROLLING>
+ , Iterator
+ >::type chunk_result_;
+
+ typedef typename apply_wrap1<
+ advance_backward<(
+ (N - BOOST_MPL_LIMIT_UNROLLING) < 0
+ ? 0
+ : N - BOOST_MPL_LIMIT_UNROLLING
+ )>
+ , chunk_result_
+ >::type type;
+ };
+};
+
+}}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#endif // BOOST_MPL_AUX778076_ADVANCE_BACKWARD_HPP_INCLUDED
+
+///// iteration, depth == 1
+
+#elif BOOST_PP_ITERATION_DEPTH() == 1
+#define i_ BOOST_PP_FRAME_ITERATION(1)
+
+template<>
+struct advance_backward< BOOST_PP_FRAME_ITERATION(1) >
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+
+#if i_ > 0
+# define BOOST_PP_ITERATION_PARAMS_2 \
+ (3,(1, BOOST_PP_FRAME_ITERATION(1), <boost/mpl/aux_/advance_backward.hpp>))
+# include BOOST_PP_ITERATE()
+#endif
+
+ typedef BOOST_PP_CAT(iter,BOOST_PP_FRAME_ITERATION(1)) type;
+ };
+
+#if defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG)
+ /// ETI workaround
+ template<> struct apply<int>
+ {
+ typedef int type;
+ };
+#endif
+};
+
+#undef i_
+
+///// iteration, depth == 2
+
+#elif BOOST_PP_ITERATION_DEPTH() == 2
+
+# define AUX778076_ITER_0 BOOST_PP_CAT(iter,BOOST_PP_DEC(BOOST_PP_FRAME_ITERATION(2)))
+# define AUX778076_ITER_1 BOOST_PP_CAT(iter,BOOST_PP_FRAME_ITERATION(2))
+
+ typedef typename prior<AUX778076_ITER_0>::type AUX778076_ITER_1;
+
+# undef AUX778076_ITER_1
+# undef AUX778076_ITER_0
+
+#endif // BOOST_PP_IS_ITERATING
diff --git a/boost/boost/mpl/aux_/advance_forward.hpp b/boost/boost/mpl/aux_/advance_forward.hpp
new file mode 100644
index 00000000000..8cfa8ee579d
--- /dev/null
+++ b/boost/boost/mpl/aux_/advance_forward.hpp
@@ -0,0 +1,123 @@
+
+#if !defined(BOOST_PP_IS_ITERATING)
+
+///// header body
+
+#ifndef BOOST_MPL_AUX_ADVANCE_FORWARD_HPP_INCLUDED
+#define BOOST_MPL_AUX_ADVANCE_FORWARD_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/advance_forward.hpp,v $
+// $Date: 2004/09/02 15:40:43 $
+// $Revision: 1.9 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/next.hpp>
+# include <boost/mpl/apply_wrap.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 advance_forward.hpp
+# include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#else
+
+# include <boost/mpl/limits/unrolling.hpp>
+# include <boost/mpl/aux_/nttp_decl.hpp>
+# include <boost/mpl/aux_/config/eti.hpp>
+
+# include <boost/preprocessor/iterate.hpp>
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/inc.hpp>
+
+namespace boost { namespace mpl { namespace aux {
+
+// forward declaration
+template< BOOST_MPL_AUX_NTTP_DECL(long, N) > struct advance_forward;
+
+# define BOOST_PP_ITERATION_PARAMS_1 \
+ (3,(0, BOOST_MPL_LIMIT_UNROLLING, <boost/mpl/aux_/advance_forward.hpp>))
+# include BOOST_PP_ITERATE()
+
+// implementation for N that exceeds BOOST_MPL_LIMIT_UNROLLING
+template< BOOST_MPL_AUX_NTTP_DECL(long, N) >
+struct advance_forward
+{
+ template< typename Iterator > struct apply
+ {
+ typedef typename apply_wrap1<
+ advance_forward<BOOST_MPL_LIMIT_UNROLLING>
+ , Iterator
+ >::type chunk_result_;
+
+ typedef typename apply_wrap1<
+ advance_forward<(
+ (N - BOOST_MPL_LIMIT_UNROLLING) < 0
+ ? 0
+ : N - BOOST_MPL_LIMIT_UNROLLING
+ )>
+ , chunk_result_
+ >::type type;
+ };
+};
+
+}}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#endif // BOOST_MPL_AUX_ADVANCE_FORWARD_HPP_INCLUDED
+
+///// iteration, depth == 1
+
+#elif BOOST_PP_ITERATION_DEPTH() == 1
+#define i_ BOOST_PP_FRAME_ITERATION(1)
+
+template<>
+struct advance_forward< BOOST_PP_FRAME_ITERATION(1) >
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+
+#if i_ > 0
+# define BOOST_PP_ITERATION_PARAMS_2 \
+ (3,(1, i_, <boost/mpl/aux_/advance_forward.hpp>))
+# include BOOST_PP_ITERATE()
+#endif
+ typedef BOOST_PP_CAT(iter,i_) type;
+ };
+
+#if defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG)
+ /// ETI workaround
+ template<> struct apply<int>
+ {
+ typedef int type;
+ };
+#endif
+};
+
+#undef i_
+
+///// iteration, depth == 2
+
+#elif BOOST_PP_ITERATION_DEPTH() == 2
+
+# define AUX778076_ITER_0 BOOST_PP_CAT(iter,BOOST_PP_DEC(BOOST_PP_FRAME_ITERATION(2)))
+# define AUX778076_ITER_1 BOOST_PP_CAT(iter,BOOST_PP_FRAME_ITERATION(2))
+
+ typedef typename next<AUX778076_ITER_0>::type AUX778076_ITER_1;
+
+# undef AUX778076_ITER_1
+# undef AUX778076_ITER_0
+
+#endif // BOOST_PP_IS_ITERATING
diff --git a/boost/boost/mpl/aux_/apply_1st.hpp b/boost/boost/mpl/aux_/apply_1st.hpp
new file mode 100644
index 00000000000..22a55870473
--- /dev/null
+++ b/boost/boost/mpl/aux_/apply_1st.hpp
@@ -0,0 +1,35 @@
+
+#ifndef BOOST_MPL_AUX_APPLY_1ST_HPP_INCLUDED
+#define BOOST_MPL_AUX_APPLY_1ST_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/apply_1st.hpp,v $
+// $Date: 2004/09/02 15:40:43 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/apply.hpp>
+
+namespace boost { namespace mpl { namespace aux {
+
+struct apply_1st
+{
+ template< typename Pair, typename T > struct apply
+ : apply2<
+ typename Pair::first
+ , typename Pair::second
+ , T
+ >
+ {
+ };
+};
+
+}}}
+
+#endif // BOOST_MPL_AUX_APPLY_1ST_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/arg_typedef.hpp b/boost/boost/mpl/aux_/arg_typedef.hpp
new file mode 100644
index 00000000000..04b049173c2
--- /dev/null
+++ b/boost/boost/mpl/aux_/arg_typedef.hpp
@@ -0,0 +1,31 @@
+
+#ifndef BOOST_MPL_AUX_ARG_TYPEDEF_HPP_INCLUDED
+#define BOOST_MPL_AUX_ARG_TYPEDEF_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/arg_typedef.hpp,v $
+// $Date: 2004/09/02 15:40:43 $
+// $Revision: 1.3 $
+
+#include <boost/mpl/aux_/config/lambda.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#if defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT) \
+ || BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))
+
+# define BOOST_MPL_AUX_ARG_TYPEDEF(T, name) typedef T name;
+
+#else
+
+# define BOOST_MPL_AUX_ARG_TYPEDEF(T, name) /**/
+
+#endif
+
+#endif // BOOST_MPL_AUX_ARG_TYPEDEF_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/arithmetic_op.hpp b/boost/boost/mpl/aux_/arithmetic_op.hpp
new file mode 100644
index 00000000000..a1c287a0696
--- /dev/null
+++ b/boost/boost/mpl/aux_/arithmetic_op.hpp
@@ -0,0 +1,92 @@
+
+// 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/arithmetic_op.hpp,v $
+// $Date: 2004/09/07 08:51:32 $
+// $Revision: 1.4 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/integral_c.hpp>
+# include <boost/mpl/aux_/largest_int.hpp>
+# include <boost/mpl/aux_/value_wknd.hpp>
+#endif
+
+#if !defined(AUX778076_OP_PREFIX)
+# define AUX778076_OP_PREFIX AUX778076_OP_NAME
+#endif
+
+#include <boost/mpl/aux_/numeric_op.hpp>
+#include <boost/mpl/aux_/config/static_constant.hpp>
+#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 AUX778076_OP_PREFIX.hpp
+# include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#else
+
+# include <boost/mpl/aux_/config/workaround.hpp>
+# include <boost/preprocessor/cat.hpp>
+
+
+namespace boost { namespace mpl {
+
+#if defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC)
+namespace aux {
+template< typename T, T n1, T n2 >
+struct BOOST_PP_CAT(AUX778076_OP_PREFIX,_wknd)
+{
+ BOOST_STATIC_CONSTANT(T, value = (n1 AUX778076_OP_TOKEN n2));
+ typedef integral_c<T,value> type;
+};
+}
+#endif
+
+template<>
+struct AUX778076_OP_IMPL_NAME<integral_c_tag,integral_c_tag>
+{
+ template< typename N1, typename N2 > struct apply
+#if !defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC)
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ AUX778076_OP_TOKEN BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+#else
+ : aux::BOOST_PP_CAT(AUX778076_OP_PREFIX,_wknd)<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , N1::value
+ , N2::value
+ >::type
+#endif
+ {
+ };
+};
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#undef AUX778076_OP_TAG_NAME
+#undef AUX778076_OP_IMPL_NAME
+#undef AUX778076_OP_ARITY
+#undef AUX778076_OP_PREFIX
+#undef AUX778076_OP_NAME
+#undef AUX778076_OP_TOKEN
diff --git a/boost/boost/mpl/aux_/arity.hpp b/boost/boost/mpl/aux_/arity.hpp
new file mode 100644
index 00000000000..fde07b2d5d1
--- /dev/null
+++ b/boost/boost/mpl/aux_/arity.hpp
@@ -0,0 +1,39 @@
+
+#ifndef BOOST_MPL_AUX_ARITY_HPP_INCLUDED
+#define BOOST_MPL_AUX_ARITY_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/arity.hpp,v $
+// $Date: 2004/09/02 15:40:43 $
+// $Revision: 1.6 $
+
+#include <boost/mpl/aux_/config/dtp.hpp>
+
+#if defined(BOOST_MPL_CFG_BROKEN_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES)
+
+# include <boost/mpl/aux_/nttp_decl.hpp>
+# include <boost/mpl/aux_/config/static_constant.hpp>
+
+namespace boost { namespace mpl { namespace aux {
+
+// agurt, 15/mar/02: it's possible to implement the template so that it will
+// "just work" and do not require any specialization, but not on the compilers
+// that require the arity workaround in the first place
+template< typename F, BOOST_MPL_AUX_NTTP_DECL(int, N) >
+struct arity
+{
+ BOOST_STATIC_CONSTANT(int, value = N);
+};
+
+}}}
+
+#endif // BOOST_MPL_CFG_BROKEN_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES
+
+#endif // BOOST_MPL_AUX_ARITY_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/arity_spec.hpp b/boost/boost/mpl/aux_/arity_spec.hpp
new file mode 100644
index 00000000000..3b4fe8c1529
--- /dev/null
+++ b/boost/boost/mpl/aux_/arity_spec.hpp
@@ -0,0 +1,67 @@
+
+#ifndef BOOST_MPL_AUX_ARITY_SPEC_HPP_INCLUDED
+#define BOOST_MPL_AUX_ARITY_SPEC_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/arity_spec.hpp,v $
+// $Date: 2004/11/28 02:04:02 $
+// $Revision: 1.7 $
+
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/limits/arity.hpp>
+#include <boost/mpl/aux_/config/dtp.hpp>
+#include <boost/mpl/aux_/preprocessor/params.hpp>
+#include <boost/mpl/aux_/arity.hpp>
+#include <boost/mpl/aux_/template_arity_fwd.hpp>
+#include <boost/mpl/aux_/config/ttp.hpp>
+#include <boost/mpl/aux_/config/lambda.hpp>
+#include <boost/mpl/aux_/config/static_constant.hpp>
+
+#if defined(BOOST_MPL_CFG_BROKEN_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES)
+# define BOOST_MPL_AUX_NONTYPE_ARITY_SPEC(i,type,name) \
+namespace aux { \
+template< BOOST_MPL_AUX_NTTP_DECL(int, N), BOOST_MPL_PP_PARAMS(i,type T) > \
+struct arity< \
+ name< BOOST_MPL_PP_PARAMS(i,T) > \
+ , N \
+ > \
+{ \
+ BOOST_STATIC_CONSTANT(int \
+ , value = BOOST_MPL_LIMIT_METAFUNCTION_ARITY \
+ ); \
+}; \
+} \
+/**/
+#else
+# define BOOST_MPL_AUX_NONTYPE_ARITY_SPEC(i,type,name) /**/
+#endif
+
+# define BOOST_MPL_AUX_ARITY_SPEC(i,name) \
+ BOOST_MPL_AUX_NONTYPE_ARITY_SPEC(i,typename,name) \
+/**/
+
+
+#if defined(BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING) \
+ && !defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT)
+# define BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(i, name) \
+namespace aux { \
+template< BOOST_MPL_PP_PARAMS(i,typename T) > \
+struct template_arity< name<BOOST_MPL_PP_PARAMS(i,T)> > \
+ : int_<i> \
+{ \
+}; \
+} \
+/**/
+#else
+# define BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(i, name) /**/
+#endif
+
+
+#endif // BOOST_MPL_AUX_ARITY_SPEC_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/at_impl.hpp b/boost/boost/mpl/aux_/at_impl.hpp
new file mode 100644
index 00000000000..a4a1f8f8bb6
--- /dev/null
+++ b/boost/boost/mpl/aux_/at_impl.hpp
@@ -0,0 +1,45 @@
+
+#ifndef BOOST_MPL_AUX_AT_IMPL_HPP_INCLUDED
+#define BOOST_MPL_AUX_AT_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/at_impl.hpp,v $
+// $Date: 2004/09/02 15:40:43 $
+// $Revision: 1.5 $
+
+#include <boost/mpl/begin_end.hpp>
+#include <boost/mpl/advance.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 'at_impl' or the primary 'at' template
+
+template< typename Tag >
+struct at_impl
+{
+ template< typename Sequence, typename N > struct apply
+ {
+ typedef typename advance<
+ typename begin<Sequence>::type
+ , N
+ >::type iter_;
+
+ typedef typename deref<iter_>::type type;
+ };
+};
+
+BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(2, at_impl)
+
+}}
+
+#endif // BOOST_MPL_AUX_AT_IMPL_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/back_impl.hpp b/boost/boost/mpl/aux_/back_impl.hpp
new file mode 100644
index 00000000000..b77b231b0c9
--- /dev/null
+++ b/boost/boost/mpl/aux_/back_impl.hpp
@@ -0,0 +1,43 @@
+
+#ifndef BOOST_MPL_AUX_BACK_IMPL_HPP_INCLUDED
+#define BOOST_MPL_AUX_BACK_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/back_impl.hpp,v $
+// $Date: 2004/09/02 15:40:43 $
+// $Revision: 1.6 $
+
+#include <boost/mpl/begin_end.hpp>
+#include <boost/mpl/next_prior.hpp>
+#include <boost/mpl/deref.hpp>
+#include <boost/mpl/aux_/traits_lambda_spec.hpp>
+
+namespace boost { namespace mpl {
+
+// default implementation, requires at least bi-directional iterators;
+// conrete sequences might override it by specializing either the
+// 'back_impl' or the primary 'back' template
+
+template< typename Tag >
+struct back_impl
+{
+ template< typename Sequence > struct apply
+ {
+ typedef typename end<Sequence>::type end_;
+ typedef typename prior<end_>::type last_;
+ typedef typename deref<last_>::type type;
+ };
+};
+
+BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(1, back_impl)
+
+}}
+
+#endif // BOOST_MPL_AUX_BACK_IMPL_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/basic_bind.hpp b/boost/boost/mpl/aux_/basic_bind.hpp
new file mode 100644
index 00000000000..82125ab9e46
--- /dev/null
+++ b/boost/boost/mpl/aux_/basic_bind.hpp
@@ -0,0 +1,21 @@
+
+#ifndef BOOST_MPL_AUX_BASIC_BIND_HPP_INCLUDED
+#define BOOST_MPL_AUX_BASIC_BIND_HPP_INCLUDED
+
+// Copyright Peter Dimov 2001
+// 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/basic_bind.hpp,v $
+// $Date: 2004/09/05 09:42:55 $
+// $Revision: 1.1 $
+
+#define BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT
+#include <boost/mpl/bind.hpp>
+
+#endif // BOOST_MPL_AUX_BASIC_BIND_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/begin_end_impl.hpp b/boost/boost/mpl/aux_/begin_end_impl.hpp
new file mode 100644
index 00000000000..6b0350aa078
--- /dev/null
+++ b/boost/boost/mpl/aux_/begin_end_impl.hpp
@@ -0,0 +1,100 @@
+
+#ifndef BOOST_MPL_AUX_BEGIN_END_IMPL_HPP_INCLUDED
+#define BOOST_MPL_AUX_BEGIN_END_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/begin_end_impl.hpp,v $
+// $Date: 2006/07/22 15:08:37 $
+// $Revision: 1.8.14.1 $
+
+#include <boost/mpl/begin_end_fwd.hpp>
+#include <boost/mpl/sequence_tag_fwd.hpp>
+#include <boost/mpl/void.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/aux_/has_begin.hpp>
+#include <boost/mpl/aux_/na.hpp>
+#include <boost/mpl/aux_/traits_lambda_spec.hpp>
+#include <boost/mpl/aux_/config/eti.hpp>
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template< typename Sequence >
+struct begin_type
+{
+ typedef typename Sequence::begin type;
+};
+template< typename Sequence >
+struct end_type
+{
+ typedef typename Sequence::end type;
+};
+
+}
+
+// default implementation; conrete sequences might override it by
+// specializing either the 'begin_impl/end_impl' or the primary
+// 'begin/end' templates
+
+template< typename Tag >
+struct begin_impl
+{
+ template< typename Sequence > struct apply
+ {
+ typedef typename eval_if<aux::has_begin<Sequence, true_>,
+ aux::begin_type<Sequence>, void_>::type type;
+ };
+};
+
+template< typename Tag >
+struct end_impl
+{
+ template< typename Sequence > struct apply
+ {
+ typedef typename eval_if<aux::has_begin<Sequence, true_>,
+ aux::end_type<Sequence>, void_>::type type;
+ };
+};
+
+// specialize 'begin_trait/end_trait' for two pre-defined tags
+
+# define AUX778076_IMPL_SPEC(name, tag, result) \
+template<> \
+struct name##_impl<tag> \
+{ \
+ template< typename Sequence > struct apply \
+ { \
+ typedef result type; \
+ }; \
+}; \
+/**/
+
+// a sequence with nested 'begin/end' typedefs; just query them
+AUX778076_IMPL_SPEC(begin, nested_begin_end_tag, typename Sequence::begin)
+AUX778076_IMPL_SPEC(end, nested_begin_end_tag, typename Sequence::end)
+
+// if a type 'T' does not contain 'begin/end' or 'tag' members
+// and doesn't specialize either 'begin/end' or 'begin_impl/end_impl'
+// templates, then we end up here
+AUX778076_IMPL_SPEC(begin, non_sequence_tag, void_)
+AUX778076_IMPL_SPEC(end, non_sequence_tag, void_)
+AUX778076_IMPL_SPEC(begin, na, void_)
+AUX778076_IMPL_SPEC(end, na, void_)
+
+# undef AUX778076_IMPL_SPEC
+
+
+BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(1,begin_impl)
+BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(1,end_impl)
+
+}}
+
+#endif // BOOST_MPL_AUX_BEGIN_END_IMPL_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/clear_impl.hpp b/boost/boost/mpl/aux_/clear_impl.hpp
new file mode 100644
index 00000000000..5bcc4cb9a7d
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/clear_impl.hpp,v $
+// $Date: 2004/09/02 15:40:43 $
+// $Revision: 1.6 $
+
+#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/boost/boost/mpl/aux_/common_name_wknd.hpp b/boost/boost/mpl/aux_/common_name_wknd.hpp
new file mode 100644
index 00000000000..d7a254d6076
--- /dev/null
+++ b/boost/boost/mpl/aux_/common_name_wknd.hpp
@@ -0,0 +1,34 @@
+
+#ifndef BOOST_MPL_AUX_COMMON_NAME_WKND_HPP_INCLUDED
+#define BOOST_MPL_AUX_COMMON_NAME_WKND_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/common_name_wknd.hpp,v $
+// $Date: 2004/09/02 15:40:43 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#if BOOST_WORKAROUND(__BORLANDC__, < 0x561)
+// agurt, 12/nov/02: to suppress the bogus "Cannot have both a template class
+// and function named 'xxx'" diagnostic
+# define BOOST_MPL_AUX_COMMON_NAME_WKND(name) \
+namespace name_##wknd { \
+template< typename > void name(); \
+} \
+/**/
+
+#else
+
+# define BOOST_MPL_AUX_COMMON_NAME_WKND(name) /**/
+
+#endif // __BORLANDC__
+
+#endif // BOOST_MPL_AUX_COMMON_NAME_WKND_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/comparison_op.hpp b/boost/boost/mpl/aux_/comparison_op.hpp
new file mode 100644
index 00000000000..2ca3b859011
--- /dev/null
+++ b/boost/boost/mpl/aux_/comparison_op.hpp
@@ -0,0 +1,83 @@
+
+// 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/comparison_op.hpp,v $
+// $Date: 2004/09/07 08:51:32 $
+// $Revision: 1.4 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/bool.hpp>
+# include <boost/mpl/aux_/value_wknd.hpp>
+#endif
+
+#if !defined(AUX778076_OP_PREFIX)
+# define AUX778076_OP_PREFIX AUX778076_OP_NAME
+#endif
+
+#define AUX778076_OP_ARITY 2
+
+#include <boost/mpl/aux_/numeric_op.hpp>
+#include <boost/mpl/aux_/config/static_constant.hpp>
+#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 AUX778076_OP_PREFIX.hpp
+# include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#else
+
+# include <boost/mpl/aux_/config/integral.hpp>
+# include <boost/preprocessor/cat.hpp>
+
+namespace boost { namespace mpl {
+
+// MSVC workaround: implement less in terms of greater
+#if 0 AUX778076_OP_TOKEN 1 && !(1 AUX778076_OP_TOKEN 0) && !(0 AUX778076_OP_TOKEN 0)
+# define AUX778076_OP(N1, N2) \
+ ( BOOST_MPL_AUX_VALUE_WKND(N2)::value > BOOST_MPL_AUX_VALUE_WKND(N1)::value ) \
+/**/
+#else
+# define AUX778076_OP(N1, N2) \
+ ( BOOST_MPL_AUX_VALUE_WKND(N1)::value \
+ AUX778076_OP_TOKEN BOOST_MPL_AUX_VALUE_WKND(N2)::value \
+ ) \
+/**/
+#endif
+
+template<>
+struct AUX778076_OP_IMPL_NAME<integral_c_tag,integral_c_tag>
+{
+ template< typename N1, typename N2 > struct apply
+#if !defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC)
+ : bool_< AUX778076_OP(N1, N2) >
+ {
+#else
+ {
+ BOOST_STATIC_CONSTANT(bool, value = AUX778076_OP(N1, N2));
+ typedef bool_<value> type;
+#endif
+ };
+};
+
+#undef AUX778076_OP
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#undef AUX778076_OP_TAG_NAME
+#undef AUX778076_OP_IMPL_NAME
+#undef AUX778076_OP_ARITY
+#undef AUX778076_OP_PREFIX
+#undef AUX778076_OP_NAME
+#undef AUX778076_OP_TOKEN
diff --git a/boost/boost/mpl/aux_/config/adl.hpp b/boost/boost/mpl/aux_/config/adl.hpp
new file mode 100644
index 00000000000..3fdf43ac18c
--- /dev/null
+++ b/boost/boost/mpl/aux_/config/adl.hpp
@@ -0,0 +1,40 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_ADL_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_ADL_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/config/adl.hpp,v $
+// $Date: 2004/09/16 14:08:47 $
+// $Revision: 1.1 $
+
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/intel.hpp>
+#include <boost/mpl/aux_/config/gcc.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+// agurt, 25/apr/04: technically, the ADL workaround is only needed for GCC,
+// but putting everything expect public, user-specializable metafunctions into
+// a separate global namespace has a nice side effect of reducing the length
+// of template instantiation symbols, so we apply the workaround on all
+// platforms that can handle it
+
+#if !defined(BOOST_MPL_CFG_NO_ADL_BARRIER_NAMESPACE) \
+ && ( BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) \
+ || BOOST_WORKAROUND(__BORLANDC__, < 0x600) \
+ || BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840)) \
+ || BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3202)) \
+ || BOOST_WORKAROUND(BOOST_INTEL_CXX_VERSION, BOOST_TESTED_AT(810)) \
+ )
+
+# define BOOST_MPL_CFG_NO_ADL_BARRIER_NAMESPACE
+
+#endif
+
+#endif // BOOST_MPL_AUX_CONFIG_ADL_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/config/arrays.hpp b/boost/boost/mpl/aux_/config/arrays.hpp
new file mode 100644
index 00000000000..d8a07ca6c2a
--- /dev/null
+++ b/boost/boost/mpl/aux_/config/arrays.hpp
@@ -0,0 +1,30 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_ARRAYS_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_ARRAYS_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/config/arrays.hpp,v $
+// $Date: 2004/09/03 15:56:55 $
+// $Revision: 1.3 $
+
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_DEPENDENT_ARRAY_TYPES) \
+ && !defined(BOOST_MPL_PREPROCESSING_MODE) \
+ && ( BOOST_WORKAROUND(__BORLANDC__, < 0x600) \
+ || BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \
+ )
+
+# define BOOST_MPL_CFG_NO_DEPENDENT_ARRAY_TYPES
+
+#endif
+
+#endif // BOOST_MPL_AUX_CONFIG_ARRAYS_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/config/bind.hpp b/boost/boost/mpl/aux_/config/bind.hpp
new file mode 100644
index 00000000000..0739f7ce894
--- /dev/null
+++ b/boost/boost/mpl/aux_/config/bind.hpp
@@ -0,0 +1,33 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_BIND_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_BIND_HPP_INCLUDED
+
+// Copyright David Abrahams 2002
+// 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/config/bind.hpp,v $
+// $Date: 2004/09/02 15:40:45 $
+// $Revision: 1.6 $
+
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_BIND_TEMPLATE) \
+ && !defined(BOOST_MPL_PREPROCESSING_MODE) \
+ && ( BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \
+ || BOOST_WORKAROUND(__BORLANDC__, < 0x600) \
+ )
+
+# define BOOST_MPL_CFG_NO_BIND_TEMPLATE
+
+#endif
+
+//#define BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT
+
+#endif // BOOST_MPL_AUX_CONFIG_BIND_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/config/compiler.hpp b/boost/boost/mpl/aux_/config/compiler.hpp
new file mode 100644
index 00000000000..cc184e3de17
--- /dev/null
+++ b/boost/boost/mpl/aux_/config/compiler.hpp
@@ -0,0 +1,64 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_COMPILER_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_COMPILER_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/config/compiler.hpp,v $
+// $Date: 2004/09/02 15:40:45 $
+// $Revision: 1.9 $
+
+#if !defined(BOOST_MPL_CFG_COMPILER_DIR)
+
+# include <boost/mpl/aux_/config/dtp.hpp>
+# include <boost/mpl/aux_/config/ttp.hpp>
+# include <boost/mpl/aux_/config/ctps.hpp>
+# include <boost/mpl/aux_/config/msvc.hpp>
+# include <boost/mpl/aux_/config/gcc.hpp>
+# include <boost/mpl/aux_/config/workaround.hpp>
+
+# if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+# define BOOST_MPL_CFG_COMPILER_DIR msvc60
+
+# elif BOOST_WORKAROUND(BOOST_MSVC, == 1300)
+# define BOOST_MPL_CFG_COMPILER_DIR msvc70
+
+# elif BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, BOOST_TESTED_AT(0x0304))
+# define BOOST_MPL_CFG_COMPILER_DIR gcc
+
+# elif BOOST_WORKAROUND(__BORLANDC__, < 0x600)
+# if !defined(BOOST_MPL_CFG_NO_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES)
+# define BOOST_MPL_CFG_COMPILER_DIR bcc551
+# else
+# define BOOST_MPL_CFG_COMPILER_DIR bcc
+# endif
+
+# elif BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))
+# define BOOST_MPL_CFG_COMPILER_DIR dmc
+
+# elif defined(__MWERKS__)
+# if defined(BOOST_MPL_CFG_BROKEN_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES)
+# define BOOST_MPL_CFG_COMPILER_DIR mwcw
+# else
+# define BOOST_MPL_CFG_COMPILER_DIR plain
+# endif
+
+# elif defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+# define BOOST_MPL_CFG_COMPILER_DIR no_ctps
+
+# elif defined(BOOST_MPL_CFG_NO_TEMPLATE_TEMPLATE_PARAMETERS)
+# define BOOST_MPL_CFG_COMPILER_DIR no_ttp
+
+# else
+# define BOOST_MPL_CFG_COMPILER_DIR plain
+# endif
+
+#endif // BOOST_MPL_CFG_COMPILER_DIR
+
+#endif // BOOST_MPL_AUX_CONFIG_COMPILER_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/config/ctps.hpp b/boost/boost/mpl/aux_/config/ctps.hpp
new file mode 100644
index 00000000000..7c5aa7e5e64
--- /dev/null
+++ b/boost/boost/mpl/aux_/config/ctps.hpp
@@ -0,0 +1,30 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_CTPS_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_CTPS_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/config/ctps.hpp,v $
+// $Date: 2004/09/02 15:40:45 $
+// $Revision: 1.5 $
+
+#include <boost/mpl/aux_/config/workaround.hpp>
+#include <boost/config.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_NONTYPE_TEMPLATE_PARTIAL_SPEC) \
+ && !defined(BOOST_MPL_PREPROCESSING_MODE) \
+ && BOOST_WORKAROUND(__BORLANDC__, < 0x600)
+
+# define BOOST_MPL_CFG_NO_NONTYPE_TEMPLATE_PARTIAL_SPEC
+
+#endif
+
+// BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION is defined in <boost/config.hpp>
+
+#endif // BOOST_MPL_AUX_CONFIG_CTPS_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/config/dependent_nttp.hpp b/boost/boost/mpl/aux_/config/dependent_nttp.hpp
new file mode 100644
index 00000000000..3bdbb932b41
--- /dev/null
+++ b/boost/boost/mpl/aux_/config/dependent_nttp.hpp
@@ -0,0 +1,35 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_DEPENDENT_NTTP_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_DEPENDENT_NTTP_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/config/dependent_nttp.hpp,v $
+// $Date: 2004/09/02 15:40:45 $
+// $Revision: 1.7 $
+
+#include <boost/mpl/aux_/config/gcc.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+// GCC and EDG-based compilers incorrectly reject the following code:
+// template< typename T, T n > struct a;
+// template< typename T > struct b;
+// template< typename T, T n > struct b< a<T,n> > {};
+
+#if !defined(BOOST_MPL_CFG_NO_DEPENDENT_NONTYPE_PARAMETER_IN_PARTIAL_SPEC) \
+ && !defined(BOOST_MPL_PREPROCESSING_MODE) \
+ && ( BOOST_WORKAROUND(__EDG_VERSION__, BOOST_TESTED_AT(300)) \
+ || BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, BOOST_TESTED_AT(0x0302)) \
+ )
+
+# define BOOST_MPL_CFG_NO_DEPENDENT_NONTYPE_PARAMETER_IN_PARTIAL_SPEC
+
+#endif
+
+#endif // BOOST_MPL_AUX_CONFIG_DEPENDENT_NTTP_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/config/dmc_ambiguous_ctps.hpp b/boost/boost/mpl/aux_/config/dmc_ambiguous_ctps.hpp
new file mode 100644
index 00000000000..d5960f823e2
--- /dev/null
+++ b/boost/boost/mpl/aux_/config/dmc_ambiguous_ctps.hpp
@@ -0,0 +1,27 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_DMC_AMBIGUOUS_CTPS_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_DMC_AMBIGUOUS_CTPS_HPP_INCLUDED
+
+// 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/config/dmc_ambiguous_ctps.hpp,v $
+// $Date: 2004/09/02 15:40:45 $
+// $Revision: 1.2 $
+
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#if !defined(BOOST_MPL_CFG_DMC_AMBIGUOUS_CTPS) \
+ && !defined(BOOST_MPL_PREPROCESSING_MODE) \
+ && BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))
+
+# define BOOST_MPL_CFG_DMC_AMBIGUOUS_CTPS
+
+#endif
+
+#endif // BOOST_MPL_AUX_CONFIG_DMC_AMBIGUOUS_CTPS_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/config/dtp.hpp b/boost/boost/mpl/aux_/config/dtp.hpp
new file mode 100644
index 00000000000..afd084a412b
--- /dev/null
+++ b/boost/boost/mpl/aux_/config/dtp.hpp
@@ -0,0 +1,46 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_DTP_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_DTP_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/config/dtp.hpp,v $
+// $Date: 2004/09/02 15:40:45 $
+// $Revision: 1.9 $
+
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+// MWCW 7.x-8.0 "losts" default template parameters of nested class
+// templates when their owner classes are passed as arguments to other
+// templates; Borland 5.5.1 "forgets" them from the very beginning (if
+// the owner class is a class template), and Borland 5.6 isn't even
+// able to compile a definition of nested class template with DTP
+
+#if !defined(BOOST_MPL_CFG_NO_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES) \
+ && !defined(BOOST_MPL_PREPROCESSING_MODE) \
+ && BOOST_WORKAROUND(__BORLANDC__, >= 0x560) \
+ && BOOST_WORKAROUND(__BORLANDC__, < 0x600)
+
+# define BOOST_MPL_CFG_NO_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES
+
+#endif
+
+
+#if !defined(BOOST_MPL_CFG_BROKEN_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES) \
+ && !defined(BOOST_MPL_PREPROCESSING_MODE) \
+ && ( BOOST_WORKAROUND(__MWERKS__, <= 0x3001) \
+ || BOOST_WORKAROUND(__BORLANDC__, < 0x600) \
+ || defined(BOOST_MPL_CFG_NO_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES) \
+ )
+
+# define BOOST_MPL_CFG_BROKEN_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES
+
+#endif
+
+#endif // BOOST_MPL_AUX_CONFIG_DTP_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/config/eti.hpp b/boost/boost/mpl/aux_/config/eti.hpp
new file mode 100644
index 00000000000..6dbd274a71f
--- /dev/null
+++ b/boost/boost/mpl/aux_/config/eti.hpp
@@ -0,0 +1,47 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_ETI_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_ETI_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/config/eti.hpp,v $
+// $Date: 2004/09/02 15:40:45 $
+// $Revision: 1.6 $
+
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+// flags for MSVC 6.5's so-called "early template instantiation bug"
+#if !defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG) \
+ && !defined(BOOST_MPL_PREPROCESSING_MODE) \
+ && BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+
+# define BOOST_MPL_CFG_MSVC_60_ETI_BUG
+
+#endif
+
+#if !defined(BOOST_MPL_CFG_MSVC_70_ETI_BUG) \
+ && !defined(BOOST_MPL_PREPROCESSING_MODE) \
+ && BOOST_WORKAROUND(BOOST_MSVC, == 1300)
+
+# define BOOST_MPL_CFG_MSVC_70_ETI_BUG
+
+#endif
+
+#if !defined(BOOST_MPL_CFG_MSVC_ETI_BUG) \
+ && !defined(BOOST_MPL_PREPROCESSING_MODE) \
+ && ( defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG) \
+ || defined(BOOST_MPL_CFG_MSVC_70_ETI_BUG) \
+ )
+
+# define BOOST_MPL_CFG_MSVC_ETI_BUG
+
+#endif
+
+#endif // BOOST_MPL_AUX_CONFIG_ETI_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/config/forwarding.hpp b/boost/boost/mpl/aux_/config/forwarding.hpp
new file mode 100644
index 00000000000..9f1f5149052
--- /dev/null
+++ b/boost/boost/mpl/aux_/config/forwarding.hpp
@@ -0,0 +1,27 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_FORWARDING_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_FORWARDING_HPP_INCLUDED
+
+// 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/config/forwarding.hpp,v $
+// $Date: 2004/09/02 15:40:45 $
+// $Revision: 1.2 $
+
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING) \
+ && !defined(BOOST_MPL_PREPROCESSING_MODE) \
+ && BOOST_WORKAROUND(__BORLANDC__, < 0x600)
+
+# define BOOST_MPL_CFG_NO_NESTED_FORWARDING
+
+#endif
+
+#endif // BOOST_MPL_AUX_CONFIG_FORWARDING_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/config/gcc.hpp b/boost/boost/mpl/aux_/config/gcc.hpp
new file mode 100644
index 00000000000..2fb9212b5c0
--- /dev/null
+++ b/boost/boost/mpl/aux_/config/gcc.hpp
@@ -0,0 +1,23 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_GCC_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_GCC_HPP_INCLUDED
+
+// 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/config/gcc.hpp,v $
+// $Date: 2004/09/02 15:40:45 $
+// $Revision: 1.2 $
+
+#if defined(__GNUC__) && !defined(__EDG_VERSION__)
+# define BOOST_MPL_CFG_GCC ((__GNUC__ << 8) | __GNUC_MINOR__)
+#else
+# define BOOST_MPL_CFG_GCC 0
+#endif
+
+#endif // BOOST_MPL_AUX_CONFIG_GCC_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/config/has_apply.hpp b/boost/boost/mpl/aux_/config/has_apply.hpp
new file mode 100644
index 00000000000..a24867cba6f
--- /dev/null
+++ b/boost/boost/mpl/aux_/config/has_apply.hpp
@@ -0,0 +1,32 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_HAS_APPLY_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_HAS_APPLY_HPP_INCLUDED
+
+// 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/config/has_apply.hpp,v $
+// $Date: 2004/09/13 06:10:10 $
+// $Revision: 1.2 $
+
+#include <boost/mpl/aux_/config/has_xxx.hpp>
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_HAS_APPLY) \
+ && ( defined(BOOST_MPL_CFG_NO_HAS_XXX) \
+ || BOOST_WORKAROUND(__EDG_VERSION__, < 300) \
+ || BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \
+ || BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3202)) \
+ )
+
+# define BOOST_MPL_CFG_NO_HAS_APPLY
+
+#endif
+
+#endif // BOOST_MPL_AUX_CONFIG_HAS_APPLY_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/config/has_xxx.hpp b/boost/boost/mpl/aux_/config/has_xxx.hpp
new file mode 100644
index 00000000000..7dc14ea5d7a
--- /dev/null
+++ b/boost/boost/mpl/aux_/config/has_xxx.hpp
@@ -0,0 +1,33 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_HAS_XXX_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_HAS_XXX_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2002-2004
+// Copyright David Abrahams 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/libs/mpl for documentation.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/config/has_xxx.hpp,v $
+// $Date: 2004/09/03 15:56:56 $
+// $Revision: 1.3 $
+
+#include <boost/mpl/aux_/config/overload_resolution.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+// agurt, 11/jan/03: signals a stub-only 'has_xxx' implementation
+
+#if !defined(BOOST_MPL_CFG_NO_HAS_XXX) \
+ && ( defined(BOOST_MPL_CFG_BROKEN_OVERLOAD_RESOLUTION) \
+ || BOOST_WORKAROUND(__GNUC__, <= 2) \
+ || BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840)) \
+ )
+
+# define BOOST_MPL_CFG_NO_HAS_XXX
+
+#endif
+
+#endif // BOOST_MPL_AUX_CONFIG_HAS_XXX_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/config/integral.hpp b/boost/boost/mpl/aux_/config/integral.hpp
new file mode 100644
index 00000000000..49ea071a4e8
--- /dev/null
+++ b/boost/boost/mpl/aux_/config/integral.hpp
@@ -0,0 +1,38 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_INTEGRAL_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_INTEGRAL_HPP_INCLUDED
+
+// 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/config/integral.hpp,v $
+// $Date: 2004/09/07 08:51:32 $
+// $Revision: 1.1 $
+
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#if !defined(BOOST_MPL_CFG_BCC_INTEGRAL_CONSTANTS) \
+ && !defined(BOOST_MPL_PREPROCESSING_MODE) \
+ && BOOST_WORKAROUND(__BORLANDC__, < 0x600)
+
+# define BOOST_MPL_CFG_BCC_INTEGRAL_CONSTANTS
+
+#endif
+
+#if !defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC) \
+ && !defined(BOOST_MPL_PREPROCESSING_MODE) \
+ && ( BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \
+ || BOOST_WORKAROUND(__EDG_VERSION__, <= 238) \
+ )
+
+# define BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC
+
+#endif
+
+#endif // BOOST_MPL_AUX_CONFIG_INTEGRAL_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/config/intel.hpp b/boost/boost/mpl/aux_/config/intel.hpp
new file mode 100644
index 00000000000..7787efd053b
--- /dev/null
+++ b/boost/boost/mpl/aux_/config/intel.hpp
@@ -0,0 +1,21 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_INTEL_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_INTEL_HPP_INCLUDED
+
+// 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/config/intel.hpp,v $
+// $Date: 2004/09/02 15:40:45 $
+// $Revision: 1.1 $
+
+
+// BOOST_INTEL_CXX_VERSION is defined here:
+#include <boost/config.hpp>
+
+#endif // BOOST_MPL_AUX_CONFIG_INTEL_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/config/lambda.hpp b/boost/boost/mpl/aux_/config/lambda.hpp
new file mode 100644
index 00000000000..ace8cbf2ffc
--- /dev/null
+++ b/boost/boost/mpl/aux_/config/lambda.hpp
@@ -0,0 +1,32 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_LAMBDA_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_LAMBDA_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/config/lambda.hpp,v $
+// $Date: 2004/09/02 15:40:45 $
+// $Revision: 1.3 $
+
+#include <boost/mpl/aux_/config/ttp.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+
+// agurt, 15/jan/02: full-fledged implementation requires both
+// template template parameters _and_ partial specialization
+
+#if !defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT) \
+ && ( defined(BOOST_MPL_CFG_NO_TEMPLATE_TEMPLATE_PARAMETERS) \
+ || defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
+ )
+
+# define BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT
+
+#endif
+
+#endif // BOOST_MPL_AUX_CONFIG_LAMBDA_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/config/msvc.hpp b/boost/boost/mpl/aux_/config/msvc.hpp
new file mode 100644
index 00000000000..43e1ab82ada
--- /dev/null
+++ b/boost/boost/mpl/aux_/config/msvc.hpp
@@ -0,0 +1,21 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_MSVC_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_MSVC_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/config/msvc.hpp,v $
+// $Date: 2004/09/02 15:40:45 $
+// $Revision: 1.3 $
+
+
+// BOOST_MSVC is defined here:
+#include <boost/config.hpp>
+
+#endif // BOOST_MPL_AUX_CONFIG_MSVC_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/config/msvc_typename.hpp b/boost/boost/mpl/aux_/config/msvc_typename.hpp
new file mode 100644
index 00000000000..5707148722c
--- /dev/null
+++ b/boost/boost/mpl/aux_/config/msvc_typename.hpp
@@ -0,0 +1,26 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_MSVC_TYPENAME_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_MSVC_TYPENAME_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/config/msvc_typename.hpp,v $
+// $Date: 2004/09/02 15:40:45 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+# define BOOST_MSVC_TYPENAME
+#else
+# define BOOST_MSVC_TYPENAME typename
+#endif
+
+#endif // BOOST_MPL_AUX_CONFIG_MSVC_TYPENAME_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/config/nttp.hpp b/boost/boost/mpl/aux_/config/nttp.hpp
new file mode 100644
index 00000000000..6c79c9ecabd
--- /dev/null
+++ b/boost/boost/mpl/aux_/config/nttp.hpp
@@ -0,0 +1,41 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_NTTP_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_NTTP_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/config/nttp.hpp,v $
+// $Date: 2004/09/02 15:40:45 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+// MSVC 6.5 ICE-s on the code as simple as this (see "aux_/nttp_decl.hpp"
+// for a workaround):
+//
+// namespace std {
+// template< typename Char > struct string;
+// }
+//
+// void foo(std::string<char>);
+//
+// namespace boost { namespace mpl {
+// template< int > struct arg;
+// }}
+
+#if !defined(BOOST_MPL_CFG_NTTP_BUG) \
+ && !defined(BOOST_MPL_PREPROCESSING_MODE) \
+ && BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+
+# define BOOST_MPL_CFG_NTTP_BUG
+
+#endif
+
+#endif // BOOST_MPL_AUX_CONFIG_NTTP_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/config/operators.hpp b/boost/boost/mpl/aux_/config/operators.hpp
new file mode 100644
index 00000000000..7383dd40188
--- /dev/null
+++ b/boost/boost/mpl/aux_/config/operators.hpp
@@ -0,0 +1,33 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_OPERATORS_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_OPERATORS_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/config/operators.hpp,v $
+// $Date: 2005/06/14 12:42:08 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/aux_/config/gcc.hpp>
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#if !defined(BOOST_MPL_CFG_USE_OPERATORS_OVERLOADING) \
+ && ( BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \
+ || BOOST_WORKAROUND(__BORLANDC__, <= 0x600) \
+ || BOOST_WORKAROUND(__EDG_VERSION__, <= 245) \
+ || BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, <= 0x0295) \
+ || BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600)) \
+ )
+
+# define BOOST_MPL_CFG_USE_OPERATORS_OVERLOADING
+
+#endif
+
+#endif // BOOST_MPL_AUX_CONFIG_OPERATORS_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/config/overload_resolution.hpp b/boost/boost/mpl/aux_/config/overload_resolution.hpp
new file mode 100644
index 00000000000..b46603a93f3
--- /dev/null
+++ b/boost/boost/mpl/aux_/config/overload_resolution.hpp
@@ -0,0 +1,29 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_OVERLOAD_RESOLUTION_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_OVERLOAD_RESOLUTION_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/config/overload_resolution.hpp,v $
+// $Date: 2004/09/02 15:40:45 $
+// $Revision: 1.9 $
+
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#if !defined(BOOST_MPL_CFG_BROKEN_OVERLOAD_RESOLUTION) \
+ && !defined(BOOST_MPL_PREPROCESSING_MODE) \
+ && ( BOOST_WORKAROUND(__BORLANDC__, < 0x600) \
+ || BOOST_WORKAROUND(__MWERKS__, < 0x3001) \
+ )
+
+# define BOOST_MPL_CFG_BROKEN_OVERLOAD_RESOLUTION
+
+#endif
+
+#endif // BOOST_MPL_AUX_CONFIG_OVERLOAD_RESOLUTION_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/config/preprocessor.hpp b/boost/boost/mpl/aux_/config/preprocessor.hpp
new file mode 100644
index 00000000000..dd1ef2b7e02
--- /dev/null
+++ b/boost/boost/mpl/aux_/config/preprocessor.hpp
@@ -0,0 +1,39 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_PREPROCESSOR_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_PREPROCESSOR_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/config/preprocessor.hpp,v $
+// $Date: 2004/09/02 15:40:45 $
+// $Revision: 1.6 $
+
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#if !defined(BOOST_MPL_CFG_BROKEN_PP_MACRO_EXPANSION) \
+ && ( BOOST_WORKAROUND(__MWERKS__, <= 0x3003) \
+ || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x561)) \
+ || BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(502)) \
+ )
+
+# define BOOST_MPL_CFG_BROKEN_PP_MACRO_EXPANSION
+
+#endif
+
+#if !defined(BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES)
+# define BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES
+#endif
+
+#if !defined(BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING) \
+ && BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))
+# define BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING
+#endif
+
+
+#endif // BOOST_MPL_AUX_CONFIG_PREPROCESSOR_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/config/static_constant.hpp b/boost/boost/mpl/aux_/config/static_constant.hpp
new file mode 100644
index 00000000000..42c142f8ca1
--- /dev/null
+++ b/boost/boost/mpl/aux_/config/static_constant.hpp
@@ -0,0 +1,25 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_STATIC_CONSTANT_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_STATIC_CONSTANT_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/config/static_constant.hpp,v $
+// $Date: 2004/09/07 08:51:32 $
+// $Revision: 1.4 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+// BOOST_STATIC_CONSTANT is defined here:
+# include <boost/config.hpp>
+#else
+// undef the macro for the preprocessing mode
+# undef BOOST_STATIC_CONSTANT
+#endif
+
+#endif // BOOST_MPL_AUX_CONFIG_STATIC_CONSTANT_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/config/ttp.hpp b/boost/boost/mpl/aux_/config/ttp.hpp
new file mode 100644
index 00000000000..d283bfdbde1
--- /dev/null
+++ b/boost/boost/mpl/aux_/config/ttp.hpp
@@ -0,0 +1,39 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_TTP_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_TTP_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/config/ttp.hpp,v $
+// $Date: 2004/09/02 15:40:45 $
+// $Revision: 1.7 $
+
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/gcc.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_TEMPLATE_TEMPLATE_PARAMETERS) \
+ && defined(BOOST_NO_TEMPLATE_TEMPLATES)
+
+# define BOOST_MPL_CFG_NO_TEMPLATE_TEMPLATE_PARAMETERS
+
+#endif
+
+
+#if !defined(BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING) \
+ && !defined(BOOST_MPL_PREPROCESSING_MODE) \
+ && ( BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, BOOST_TESTED_AT(0x0302)) \
+ || BOOST_WORKAROUND(__BORLANDC__, < 0x600) \
+ )
+
+# define BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING
+
+#endif
+
+#endif // BOOST_MPL_AUX_CONFIG_TTP_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/config/typeof.hpp b/boost/boost/mpl/aux_/config/typeof.hpp
new file mode 100644
index 00000000000..14a513ee8e7
--- /dev/null
+++ b/boost/boost/mpl/aux_/config/typeof.hpp
@@ -0,0 +1,38 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_TYPEOF_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_TYPEOF_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/config/typeof.hpp,v $
+// $Date: 2004/09/02 15:40:45 $
+// $Revision: 1.2 $
+
+#include <boost/mpl/aux_/config/gcc.hpp>
+
+#if !defined(BOOST_MPL_CFG_HAS_TYPEOF) \
+ && !defined(BOOST_MPL_PREPROCESSING_MODE) \
+ && ( defined(BOOST_MPL_CFG_GCC) && BOOST_MPL_CFG_GCC >= 0x0302 \
+ || defined(__MWERKS__) && __MWERKS__ >= 0x3000 \
+ )
+
+# define BOOST_MPL_CFG_HAS_TYPEOF
+
+#endif
+
+
+#if !defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES) \
+ && !defined(BOOST_MPL_PREPROCESSING_MODE) \
+ && defined(BOOST_MPL_CFG_HAS_TYPEOF)
+
+# define BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES
+
+#endif
+
+#endif // BOOST_MPL_AUX_CONFIG_TYPEOF_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/config/use_preprocessed.hpp b/boost/boost/mpl/aux_/config/use_preprocessed.hpp
new file mode 100644
index 00000000000..6548ac68170
--- /dev/null
+++ b/boost/boost/mpl/aux_/config/use_preprocessed.hpp
@@ -0,0 +1,19 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_USE_PREPROCESSED_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_USE_PREPROCESSED_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/config/use_preprocessed.hpp,v $
+// $Date: 2004/09/02 15:40:45 $
+// $Revision: 1.7 $
+
+// #define BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_AUX_CONFIG_USE_PREPROCESSED_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/config/workaround.hpp b/boost/boost/mpl/aux_/config/workaround.hpp
new file mode 100644
index 00000000000..89ed715d313
--- /dev/null
+++ b/boost/boost/mpl/aux_/config/workaround.hpp
@@ -0,0 +1,19 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_WORKAROUND_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_WORKAROUND_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/config/workaround.hpp,v $
+// $Date: 2004/09/02 15:40:45 $
+// $Revision: 1.3 $
+
+#include <boost/detail/workaround.hpp>
+
+#endif // BOOST_MPL_AUX_CONFIG_WORKAROUND_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/contains_impl.hpp b/boost/boost/mpl/aux_/contains_impl.hpp
new file mode 100644
index 00000000000..73e1b273498
--- /dev/null
+++ b/boost/boost/mpl/aux_/contains_impl.hpp
@@ -0,0 +1,61 @@
+
+#ifndef BOOST_MPL_AUX_CONTAINS_IMPL_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONTAINS_IMPL_HPP_INCLUDED
+
+// Copyright Eric Friedman 2002
+// 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/contains_impl.hpp,v $
+// $Date: 2004/09/02 15:40:43 $
+// $Revision: 1.2 $
+
+#include <boost/mpl/contains_fwd.hpp>
+#include <boost/mpl/begin_end.hpp>
+#include <boost/mpl/find.hpp>
+#include <boost/mpl/not.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 {
+
+template< typename Tag >
+struct contains_impl
+{
+ template< typename Sequence, typename T > struct apply
+#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)
+ : not_< is_same<
+ typename find<Sequence,T>::type
+ , typename end<Sequence>::type
+ > >
+ {
+#else
+ {
+ typedef not_< is_same<
+ typename find<Sequence,T>::type
+ , typename end<Sequence>::type
+ > > type;
+
+ BOOST_STATIC_CONSTANT(bool, value =
+ (not_< is_same<
+ typename find<Sequence,T>::type
+ , typename end<Sequence>::type
+ > >::value)
+ );
+#endif
+ };
+};
+
+BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(2,contains_impl)
+
+}}
+
+#endif // BOOST_MPL_AUX_CONTAINS_IMPL_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/count_args.hpp b/boost/boost/mpl/aux_/count_args.hpp
new file mode 100644
index 00000000000..14e7d0ec795
--- /dev/null
+++ b/boost/boost/mpl/aux_/count_args.hpp
@@ -0,0 +1,105 @@
+
+// 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/count_args.hpp,v $
+// $Date: 2004/09/02 15:40:43 $
+// $Revision: 1.5 $
+
+#include <boost/preprocessor/expr_if.hpp>
+#include <boost/preprocessor/inc.hpp>
+#include <boost/preprocessor/cat.hpp>
+
+#if !defined(AUX778076_COUNT_ARGS_PARAM_NAME)
+# define AUX778076_COUNT_ARGS_PARAM_NAME T
+#endif
+
+#if !defined(AUX778076_COUNT_ARGS_TEMPLATE_PARAM)
+# define AUX778076_COUNT_ARGS_TEMPLATE_PARAM typename AUX778076_COUNT_ARGS_PARAM_NAME
+#endif
+
+// local macros, #undef-ined at the end of the header
+
+#if !defined(AUX778076_COUNT_ARGS_USE_STANDARD_PP_PRIMITIVES)
+
+# include <boost/mpl/aux_/preprocessor/repeat.hpp>
+# include <boost/mpl/aux_/preprocessor/params.hpp>
+
+# define AUX778076_COUNT_ARGS_REPEAT BOOST_MPL_PP_REPEAT
+# define AUX778076_COUNT_ARGS_PARAMS(param) \
+ BOOST_MPL_PP_PARAMS( \
+ AUX778076_COUNT_ARGS_ARITY \
+ , param \
+ ) \
+ /**/
+
+#else
+
+# include <boost/preprocessor/enum_shifted_params.hpp>
+# include <boost/preprocessor/repeat.hpp>
+# include <boost/preprocessor/inc.hpp>
+
+# define AUX778076_COUNT_ARGS_REPEAT BOOST_PP_REPEAT
+# define AUX778076_COUNT_ARGS_PARAMS(param) \
+ BOOST_PP_ENUM_SHIFTED_PARAMS( \
+ BOOST_PP_INC(AUX778076_COUNT_ARGS_ARITY) \
+ , param \
+ ) \
+ /**/
+
+#endif // AUX778076_COUNT_ARGS_USE_STANDARD_PP_PRIMITIVES
+
+
+#define AUX778076_IS_ARG_TEMPLATE_NAME \
+ BOOST_PP_CAT(is_,BOOST_PP_CAT(AUX778076_COUNT_ARGS_PREFIX,_arg)) \
+/**/
+
+#define AUX778076_COUNT_ARGS_FUNC(unused, i, param) \
+ BOOST_PP_EXPR_IF(i, +) \
+ AUX778076_IS_ARG_TEMPLATE_NAME<BOOST_PP_CAT(param,BOOST_PP_INC(i))>::value \
+/**/
+
+// is_<xxx>_arg
+template< AUX778076_COUNT_ARGS_TEMPLATE_PARAM >
+struct AUX778076_IS_ARG_TEMPLATE_NAME
+{
+ BOOST_STATIC_CONSTANT(bool, value = true);
+};
+
+template<>
+struct AUX778076_IS_ARG_TEMPLATE_NAME<AUX778076_COUNT_ARGS_DEFAULT>
+{
+ BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+// <xxx>_count_args
+template<
+ AUX778076_COUNT_ARGS_PARAMS(AUX778076_COUNT_ARGS_TEMPLATE_PARAM)
+ >
+struct BOOST_PP_CAT(AUX778076_COUNT_ARGS_PREFIX,_count_args)
+{
+ BOOST_STATIC_CONSTANT(int, value = AUX778076_COUNT_ARGS_REPEAT(
+ AUX778076_COUNT_ARGS_ARITY
+ , AUX778076_COUNT_ARGS_FUNC
+ , AUX778076_COUNT_ARGS_PARAM_NAME
+ ));
+};
+
+#undef AUX778076_COUNT_ARGS_FUNC
+#undef AUX778076_IS_ARG_TEMPLATE_NAME
+#undef AUX778076_COUNT_ARGS_PARAMS
+#undef AUX778076_COUNT_ARGS_REPEAT
+
+#undef AUX778076_COUNT_ARGS_ARITY
+#undef AUX778076_COUNT_ARGS_DEFAULT
+#undef AUX778076_COUNT_ARGS_PREFIX
+#undef AUX778076_COUNT_ARGS_USE_STANDARD_PP_PRIMITIVES
+#undef AUX778076_COUNT_ARGS_TEMPLATE_PARAM
+#undef AUX778076_COUNT_ARGS_PARAM_NAME
diff --git a/boost/boost/mpl/aux_/count_impl.hpp b/boost/boost/mpl/aux_/count_impl.hpp
new file mode 100644
index 00000000000..f1f10bc350a
--- /dev/null
+++ b/boost/boost/mpl/aux_/count_impl.hpp
@@ -0,0 +1,44 @@
+
+#ifndef BOOST_MPL_AUX_COUNT_IMPL_HPP_INCLUDED
+#define BOOST_MPL_AUX_COUNT_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/count_impl.hpp,v $
+// $Date: 2004/09/02 15:40:43 $
+// $Revision: 1.2 $
+
+#include <boost/mpl/count_fwd.hpp>
+#include <boost/mpl/count_if.hpp>
+#include <boost/mpl/same_as.hpp>
+#include <boost/mpl/aux_/config/static_constant.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+#include <boost/mpl/aux_/traits_lambda_spec.hpp>
+
+namespace boost { namespace mpl {
+
+template< typename Tag > struct count_impl
+{
+ template< typename Sequence, typename T > struct apply
+#if BOOST_WORKAROUND(__BORLANDC__,BOOST_TESTED_AT(0x561))
+ {
+ typedef typename count_if< Sequence,same_as<T> >::type type;
+ BOOST_STATIC_CONSTANT(int, value = BOOST_MPL_AUX_VALUE_WKND(type)::value);
+#else
+ : count_if< Sequence,same_as<T> >
+ {
+#endif
+ };
+};
+
+BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(2,count_impl)
+
+}}
+
+#endif // BOOST_MPL_AUX_COUNT_IMPL_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/empty_impl.hpp b/boost/boost/mpl/aux_/empty_impl.hpp
new file mode 100644
index 00000000000..a49423cbe0e
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/empty_impl.hpp,v $
+// $Date: 2004/09/02 15:40:43 $
+// $Revision: 1.4 $
+
+#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/boost/boost/mpl/aux_/erase_impl.hpp b/boost/boost/mpl/aux_/erase_impl.hpp
new file mode 100644
index 00000000000..16523449113
--- /dev/null
+++ b/boost/boost/mpl/aux_/erase_impl.hpp
@@ -0,0 +1,69 @@
+
+#ifndef BOOST_MPL_AUX_ERASE_IMPL_HPP_INCLUDED
+#define BOOST_MPL_AUX_ERASE_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/erase_impl.hpp,v $
+// $Date: 2004/09/02 15:40:43 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/clear.hpp>
+#include <boost/mpl/push_front.hpp>
+#include <boost/mpl/reverse_fold.hpp>
+#include <boost/mpl/iterator_range.hpp>
+#include <boost/mpl/next.hpp>
+#include <boost/mpl/aux_/na.hpp>
+
+namespace boost { namespace mpl {
+
+// default implementation; conrete sequences might override it by
+// specializing either the 'erase_impl' or the primary 'erase' template
+
+template< typename Tag >
+struct erase_impl
+{
+ template<
+ typename Sequence
+ , typename First
+ , typename Last
+ >
+ struct apply
+ {
+ typedef typename if_na< Last,typename next<First>::type >::type last_;
+
+ // 1st half: [begin, first)
+ typedef iterator_range<
+ typename begin<Sequence>::type
+ , First
+ > first_half_;
+
+ // 2nd half: [last, end) ... that is, [last + 1, end)
+ typedef iterator_range<
+ last_
+ , typename end<Sequence>::type
+ > second_half_;
+
+ typedef typename reverse_fold<
+ second_half_
+ , typename clear<Sequence>::type
+ , push_front<_,_>
+ >::type half_sequence_;
+
+ typedef typename reverse_fold<
+ first_half_
+ , half_sequence_
+ , push_front<_,_>
+ >::type type;
+ };
+};
+
+}}
+
+#endif // BOOST_MPL_AUX_ERASE_IMPL_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/erase_key_impl.hpp b/boost/boost/mpl/aux_/erase_key_impl.hpp
new file mode 100644
index 00000000000..58218a63048
--- /dev/null
+++ b/boost/boost/mpl/aux_/erase_key_impl.hpp
@@ -0,0 +1,32 @@
+
+#ifndef BOOST_MPL_AUX_ERASE_KEY_IMPL_HPP_INCLUDED
+#define BOOST_MPL_AUX_ERASE_KEY_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/erase_key_impl.hpp,v $
+// $Date: 2004/09/05 09:42:55 $
+// $Revision: 1.3 $
+
+#include <boost/mpl/erase_key_fwd.hpp>
+#include <boost/mpl/aux_/traits_lambda_spec.hpp>
+
+namespace boost { namespace mpl {
+
+template< typename Tag >
+struct erase_key_impl
+{
+ template< typename Sequence, typename Key > struct apply;
+};
+
+BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(2, erase_key_impl)
+
+}}
+
+#endif // BOOST_MPL_AUX_ERASE_KEY_IMPL_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/filter_iter.hpp b/boost/boost/mpl/aux_/filter_iter.hpp
new file mode 100644
index 00000000000..3bf806dff30
--- /dev/null
+++ b/boost/boost/mpl/aux_/filter_iter.hpp
@@ -0,0 +1,140 @@
+
+#ifndef BOOST_MPL_AUX_FILTER_ITER_HPP_INCLUDED
+#define BOOST_MPL_AUX_FILTER_ITER_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/filter_iter.hpp,v $
+// $Date: 2004/09/07 12:07:56 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/find_if.hpp>
+#include <boost/mpl/iterator_range.hpp>
+#include <boost/mpl/iterator_tags.hpp>
+#include <boost/mpl/deref.hpp>
+#include <boost/mpl/aux_/lambda_spec.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template<
+ typename Iterator
+ , typename LastIterator
+ , typename Predicate
+ >
+struct filter_iter;
+
+template<
+ typename Iterator
+ , typename LastIterator
+ , typename Predicate
+ >
+struct next_filter_iter
+{
+ typedef typename find_if<
+ iterator_range<Iterator,LastIterator>
+ , Predicate
+ >::type base_iter_;
+
+ typedef filter_iter<base_iter_,LastIterator,Predicate> type;
+};
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template<
+ typename Iterator
+ , typename LastIterator
+ , typename Predicate
+ >
+struct filter_iter
+{
+ typedef Iterator base;
+ typedef forward_iterator_tag category;
+ typedef typename aux::next_filter_iter<
+ typename mpl::next<base>::type
+ , LastIterator
+ , Predicate
+ >::type next;
+
+ typedef typename deref<base>::type type;
+};
+
+template<
+ typename LastIterator
+ , typename Predicate
+ >
+struct filter_iter< LastIterator,LastIterator,Predicate >
+{
+ typedef LastIterator base;
+ typedef forward_iterator_tag category;
+};
+
+#else
+
+template< bool >
+struct filter_iter_impl
+{
+ template<
+ typename Iterator
+ , typename LastIterator
+ , typename Predicate
+ >
+ struct result_
+ {
+ typedef Iterator base;
+ typedef forward_iterator_tag category;
+ typedef typename next_filter_iter<
+ typename mpl::next<Iterator>::type
+ , LastIterator
+ , Predicate
+ >::type next;
+
+ typedef typename deref<base>::type type;
+ };
+};
+
+template<>
+struct filter_iter_impl< true >
+{
+ template<
+ typename Iterator
+ , typename LastIterator
+ , typename Predicate
+ >
+ struct result_
+ {
+ typedef Iterator base;
+ typedef forward_iterator_tag category;
+ };
+};
+
+template<
+ typename Iterator
+ , typename LastIterator
+ , typename Predicate
+ >
+struct filter_iter
+ : filter_iter_impl<
+ ::boost::is_same<Iterator,LastIterator>::value
+ >::template result_< Iterator,LastIterator,Predicate >
+{
+};
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+} // namespace aux
+
+BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(3, aux::filter_iter)
+
+}}
+
+#endif // BOOST_MPL_AUX_FILTER_ITER_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/find_if_pred.hpp b/boost/boost/mpl/aux_/find_if_pred.hpp
new file mode 100644
index 00000000000..c07d89d6c7f
--- /dev/null
+++ b/boost/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/boost/boost/mpl/aux_/fold_impl.hpp b/boost/boost/mpl/aux_/fold_impl.hpp
new file mode 100644
index 00000000000..0b566714792
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/fold_impl.hpp,v $
+// $Date: 2004/09/02 15:40:43 $
+// $Revision: 1.6 $
+
+#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/boost/boost/mpl/aux_/fold_impl_body.hpp b/boost/boost/mpl/aux_/fold_impl_body.hpp
new file mode 100644
index 00000000000..e0061890542
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/fold_impl_body.hpp,v $
+// $Date: 2004/10/24 08:18:03 $
+// $Revision: 1.8 $
+
+# 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/boost/boost/mpl/aux_/fold_op.hpp b/boost/boost/mpl/aux_/fold_op.hpp
new file mode 100644
index 00000000000..fbe20d7c9bb
--- /dev/null
+++ b/boost/boost/mpl/aux_/fold_op.hpp
@@ -0,0 +1,37 @@
+
+#ifndef BOOST_MPL_AUX_FOLD_OP_HPP_INCLUDED
+#define BOOST_MPL_AUX_FOLD_OP_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/fold_op.hpp,v $
+// $Date: 2004/09/02 15:40:43 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/apply.hpp>
+
+namespace boost { namespace mpl { namespace aux {
+
+// hand-written version is more efficient than bind/lambda expression
+template< typename Op >
+struct fold_op
+{
+ template< typename T1, typename T2 > struct apply
+ {
+ typedef typename apply2<
+ Op
+ , T1
+ , typename T2::type
+ >::type type;
+ };
+};
+
+}}}
+
+#endif // BOOST_MPL_AUX_FOLD_OP_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/fold_pred.hpp b/boost/boost/mpl/aux_/fold_pred.hpp
new file mode 100644
index 00000000000..e3a193feb18
--- /dev/null
+++ b/boost/boost/mpl/aux_/fold_pred.hpp
@@ -0,0 +1,37 @@
+
+#ifndef BOOST_MPL_AUX_FOLD_PRED_HPP_INCLUDED
+#define BOOST_MPL_AUX_FOLD_PRED_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/fold_pred.hpp,v $
+// $Date: 2004/09/02 15:40:43 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/same_as.hpp>
+#include <boost/mpl/apply.hpp>
+
+namespace boost { namespace mpl { namespace aux {
+
+template< typename Last >
+struct fold_pred
+{
+ template<
+ typename State
+ , typename Iterator
+ >
+ struct apply
+ : not_same_as<Last>::template apply<Iterator>
+ {
+ };
+};
+
+}}}
+
+#endif // BOOST_MPL_AUX_FOLD_PRED_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/front_impl.hpp b/boost/boost/mpl/aux_/front_impl.hpp
new file mode 100644
index 00000000000..07288d865a3
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/front_impl.hpp,v $
+// $Date: 2004/09/02 15:40:43 $
+// $Revision: 1.4 $
+
+#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/boost/boost/mpl/aux_/full_lambda.hpp b/boost/boost/mpl/aux_/full_lambda.hpp
new file mode 100644
index 00000000000..88ba9e56f3d
--- /dev/null
+++ b/boost/boost/mpl/aux_/full_lambda.hpp
@@ -0,0 +1,350 @@
+
+#if !defined(BOOST_PP_IS_ITERATING)
+
+///// header body
+
+#ifndef BOOST_MPL_AUX_FULL_LAMBDA_HPP_INCLUDED
+#define BOOST_MPL_AUX_FULL_LAMBDA_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/full_lambda.hpp,v $
+// $Date: 2004/09/04 01:10:19 $
+// $Revision: 1.14 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/lambda_fwd.hpp>
+# include <boost/mpl/bind_fwd.hpp>
+# include <boost/mpl/protect.hpp>
+# include <boost/mpl/quote.hpp>
+# include <boost/mpl/arg.hpp>
+# include <boost/mpl/bool.hpp>
+# include <boost/mpl/int_fwd.hpp>
+# include <boost/mpl/aux_/template_arity.hpp>
+# include <boost/mpl/aux_/na_spec.hpp>
+# include <boost/mpl/aux_/config/ttp.hpp>
+# if defined(BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING)
+# include <boost/mpl/if.hpp>
+# endif
+#endif
+
+#include <boost/mpl/aux_/lambda_arity_param.hpp>
+#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 full_lambda.hpp
+# include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#else
+
+# include <boost/mpl/limits/arity.hpp>
+# include <boost/mpl/aux_/preprocessor/default_params.hpp>
+# include <boost/mpl/aux_/preprocessor/params.hpp>
+# include <boost/mpl/aux_/preprocessor/enum.hpp>
+# include <boost/mpl/aux_/preprocessor/repeat.hpp>
+# include <boost/mpl/aux_/config/dmc_ambiguous_ctps.hpp>
+
+# include <boost/preprocessor/iterate.hpp>
+# include <boost/preprocessor/comma_if.hpp>
+# include <boost/preprocessor/inc.hpp>
+# include <boost/preprocessor/cat.hpp>
+
+namespace boost { namespace mpl {
+
+// local macros, #undef-ined at the end of the header
+# define AUX778076_LAMBDA_PARAMS(i_, param) \
+ BOOST_MPL_PP_PARAMS(i_, param) \
+ /**/
+
+# define AUX778076_BIND_PARAMS(param) \
+ BOOST_MPL_PP_PARAMS( \
+ BOOST_MPL_LIMIT_METAFUNCTION_ARITY \
+ , param \
+ ) \
+ /**/
+
+# define AUX778076_BIND_N_PARAMS(i_, param) \
+ BOOST_PP_COMMA_IF(i_) \
+ BOOST_MPL_PP_PARAMS(i_, param) \
+ /**/
+
+# define AUX778076_ARITY_PARAM(param) \
+ BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(param) \
+ /**/
+
+
+#define n_ BOOST_MPL_LIMIT_METAFUNCTION_ARITY
+namespace aux {
+
+template<
+ BOOST_MPL_PP_DEFAULT_PARAMS(n_,bool C,false)
+ >
+struct lambda_or
+ : true_
+{
+};
+
+template<>
+struct lambda_or< BOOST_MPL_PP_ENUM(n_,false) >
+ : false_
+{
+};
+
+} // namespace aux
+#undef n_
+
+template<
+ typename T
+ , typename Tag
+ AUX778076_ARITY_PARAM(typename Arity)
+ >
+struct lambda
+{
+ typedef false_ is_le;
+ typedef T result_;
+ typedef T type;
+};
+
+template<
+ typename T
+ >
+struct is_lambda_expression
+ : lambda<T>::is_le
+{
+};
+
+
+template< int N, typename Tag >
+struct lambda< arg<N>,Tag AUX778076_ARITY_PARAM(int_<-1>) >
+{
+ typedef true_ is_le;
+ typedef mpl::arg<N> result_; // qualified for the sake of MIPSpro 7.41
+ typedef mpl::protect<result_> type;
+};
+
+
+#define BOOST_PP_ITERATION_PARAMS_1 \
+ (3,(0, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, <boost/mpl/aux_/full_lambda.hpp>))
+#include BOOST_PP_ITERATE()
+
+/// special case for 'protect'
+template< typename T, typename Tag >
+struct lambda< mpl::protect<T>,Tag AUX778076_ARITY_PARAM(int_<1>) >
+{
+ typedef false_ is_le;
+ typedef mpl::protect<T> result_;
+ typedef result_ type;
+};
+
+/// specializations for the main 'bind' form
+template<
+ typename F, AUX778076_BIND_PARAMS(typename T)
+ , typename Tag
+ >
+struct lambda<
+ bind<F,AUX778076_BIND_PARAMS(T)>
+ , Tag
+ AUX778076_ARITY_PARAM(int_<BOOST_PP_INC(BOOST_MPL_LIMIT_METAFUNCTION_ARITY)>)
+ >
+{
+ typedef false_ is_le;
+ typedef bind<F, AUX778076_BIND_PARAMS(T)> result_;
+ typedef result_ type;
+};
+
+
+#if defined(BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING)
+
+template<
+ typename F
+ , typename Tag1
+ , typename Tag2
+ , typename Arity
+ >
+struct lambda<
+ lambda<F,Tag1,Arity>
+ , Tag2
+ , int_<3>
+ >
+{
+ typedef lambda< F,Tag2 > l1;
+ typedef lambda< Tag1,Tag2 > l2;
+
+ typedef typename l1::is_le is_le;
+ typedef bind1< quote1<aux::template_arity>, typename l1::result_ > arity_;
+ typedef lambda< typename if_<is_le,arity_,Arity>::type,Tag2 > l3;
+
+ typedef aux::le_result3<is_le, Tag2, mpl::lambda, l1, l2, l3> le_result_;
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+#elif !defined(BOOST_MPL_CFG_DMC_AMBIGUOUS_CTPS)
+
+/// workaround for MWCW 8.3+/EDG < 303, leads to ambiguity on Digital Mars
+template<
+ typename F, typename Tag1, typename Tag2
+ >
+struct lambda<
+ lambda< F,Tag1 >
+ , Tag2
+ >
+{
+ typedef lambda< F,Tag2 > l1;
+ typedef lambda< Tag1,Tag2 > l2;
+
+ typedef typename l1::is_le is_le;
+ typedef aux::le_result2<is_le, Tag2, mpl::lambda, l1, l2> le_result_;
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+#endif
+
+# undef AUX778076_ARITY_PARAM
+# undef AUX778076_BIND_N_PARAMS
+# undef AUX778076_BIND_PARAMS
+# undef AUX778076_LAMBDA_PARAMS
+
+#if !defined(BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING)
+BOOST_MPL_AUX_NA_SPEC(2, lambda)
+#else
+BOOST_MPL_AUX_NA_SPEC2(2, 3, lambda)
+#endif
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#endif // BOOST_MPL_AUX_FULL_LAMBDA_HPP_INCLUDED
+
+///// iteration, depth == 1
+
+#elif BOOST_PP_ITERATION_DEPTH() == 1
+#define i_ BOOST_PP_FRAME_ITERATION(1)
+
+#if i_ > 0
+
+namespace aux {
+
+# define AUX778076_RESULT(unused, i_, T) \
+ BOOST_PP_COMMA_IF(i_) \
+ typename BOOST_PP_CAT(T, BOOST_PP_INC(i_))::result_ \
+ /**/
+
+# define AUX778076_TYPE(unused, i_, T) \
+ BOOST_PP_COMMA_IF(i_) \
+ typename BOOST_PP_CAT(T, BOOST_PP_INC(i_))::type \
+ /**/
+
+template<
+ typename IsLE, typename Tag
+ , template< AUX778076_LAMBDA_PARAMS(i_, typename P) > class F
+ , AUX778076_LAMBDA_PARAMS(i_, typename L)
+ >
+struct BOOST_PP_CAT(le_result,i_)
+{
+ typedef F<
+ BOOST_MPL_PP_REPEAT(i_, AUX778076_TYPE, L)
+ > result_;
+
+ typedef result_ type;
+};
+
+template<
+ typename Tag
+ , template< AUX778076_LAMBDA_PARAMS(i_, typename P) > class F
+ , AUX778076_LAMBDA_PARAMS(i_, typename L)
+ >
+struct BOOST_PP_CAT(le_result,i_)< true_,Tag,F,AUX778076_LAMBDA_PARAMS(i_, L) >
+{
+ typedef BOOST_PP_CAT(bind,i_)<
+ BOOST_PP_CAT(quote,i_)<F,Tag>
+ , BOOST_MPL_PP_REPEAT(i_, AUX778076_RESULT, L)
+ > result_;
+
+ typedef mpl::protect<result_> type;
+};
+
+# undef AUX778076_TYPE
+# undef AUX778076_RESULT
+
+} // namespace aux
+
+
+# define AUX778076_LAMBDA_TYPEDEF(unused, i_, T) \
+ typedef lambda< BOOST_PP_CAT(T, BOOST_PP_INC(i_)), Tag > \
+ BOOST_PP_CAT(l,BOOST_PP_INC(i_)); \
+/**/
+
+# define AUX778076_IS_LE_TYPEDEF(unused, i_, unused2) \
+ typedef typename BOOST_PP_CAT(l,BOOST_PP_INC(i_))::is_le \
+ BOOST_PP_CAT(is_le,BOOST_PP_INC(i_)); \
+/**/
+
+# define AUX778076_IS_LAMBDA_EXPR(unused, i_, unused2) \
+ BOOST_PP_COMMA_IF(i_) \
+ BOOST_PP_CAT(is_le,BOOST_PP_INC(i_))::value \
+/**/
+
+template<
+ template< AUX778076_LAMBDA_PARAMS(i_, typename P) > class F
+ , AUX778076_LAMBDA_PARAMS(i_, typename T)
+ , typename Tag
+ >
+struct lambda<
+ F<AUX778076_LAMBDA_PARAMS(i_, T)>
+ , Tag
+ AUX778076_ARITY_PARAM(int_<i_>)
+ >
+{
+ BOOST_MPL_PP_REPEAT(i_, AUX778076_LAMBDA_TYPEDEF, T)
+ BOOST_MPL_PP_REPEAT(i_, AUX778076_IS_LE_TYPEDEF, unused)
+
+ typedef typename aux::lambda_or<
+ BOOST_MPL_PP_REPEAT(i_, AUX778076_IS_LAMBDA_EXPR, unused)
+ >::type is_le;
+
+ typedef aux::BOOST_PP_CAT(le_result,i_)<
+ is_le, Tag, F, AUX778076_LAMBDA_PARAMS(i_, l)
+ > le_result_;
+
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+
+# undef AUX778076_IS_LAMBDA_EXPR
+# undef AUX778076_IS_LE_TYPEDEF
+# undef AUX778076_LAMBDA_TYPEDEF
+
+#endif // i_ > 0
+
+template<
+ typename F AUX778076_BIND_N_PARAMS(i_, typename T)
+ , typename Tag
+ >
+struct lambda<
+ BOOST_PP_CAT(bind,i_)<F AUX778076_BIND_N_PARAMS(i_, T)>
+ , Tag
+ AUX778076_ARITY_PARAM(int_<BOOST_PP_INC(i_)>)
+ >
+{
+ typedef false_ is_le;
+ typedef BOOST_PP_CAT(bind,i_)<
+ F
+ AUX778076_BIND_N_PARAMS(i_, T)
+ > result_;
+
+ typedef result_ type;
+};
+
+#undef i_
+#endif // BOOST_PP_IS_ITERATING
diff --git a/boost/boost/mpl/aux_/has_apply.hpp b/boost/boost/mpl/aux_/has_apply.hpp
new file mode 100644
index 00000000000..8d0d0051bec
--- /dev/null
+++ b/boost/boost/mpl/aux_/has_apply.hpp
@@ -0,0 +1,32 @@
+
+#ifndef BOOST_MPL_AUX_HAS_APPLY_HPP_INCLUDED
+#define BOOST_MPL_AUX_HAS_APPLY_HPP_INCLUDED
+
+// 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/has_apply.hpp,v $
+// $Date: 2004/09/03 15:56:55 $
+// $Revision: 1.1 $
+
+#include <boost/mpl/has_xxx.hpp>
+#include <boost/mpl/aux_/config/has_apply.hpp>
+
+namespace boost { namespace mpl { namespace aux {
+#if !defined(BOOST_MPL_CFG_NO_HAS_APPLY)
+BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(has_apply, apply, false)
+#else
+template< typename T, typename fallback_ = false_ >
+struct has_apply
+ : fallback_
+{
+};
+#endif
+}}}
+
+#endif // BOOST_MPL_AUX_HAS_APPLY_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/has_begin.hpp b/boost/boost/mpl/aux_/has_begin.hpp
new file mode 100644
index 00000000000..1211903b519
--- /dev/null
+++ b/boost/boost/mpl/aux_/has_begin.hpp
@@ -0,0 +1,23 @@
+
+#ifndef BOOST_MPL_AUX_HAS_BEGIN_HPP_INCLUDED
+#define BOOST_MPL_AUX_HAS_BEGIN_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/has_begin.hpp,v $
+// $Date: 2004/09/02 15:40:43 $
+// $Revision: 1.3 $
+
+#include <boost/mpl/has_xxx.hpp>
+
+namespace boost { namespace mpl { namespace aux {
+BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(has_begin, begin, true)
+}}}
+
+#endif // BOOST_MPL_AUX_HAS_BEGIN_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/has_key_impl.hpp b/boost/boost/mpl/aux_/has_key_impl.hpp
new file mode 100644
index 00000000000..0b3e8f28f83
--- /dev/null
+++ b/boost/boost/mpl/aux_/has_key_impl.hpp
@@ -0,0 +1,34 @@
+
+#ifndef BOOST_MPL_AUX_HAS_KEY_IMPL_HPP_INCLUDED
+#define BOOST_MPL_AUX_HAS_KEY_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2002-2004
+// Copyright David Abrahams 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/has_key_impl.hpp,v $
+// $Date: 2004/09/02 15:40:43 $
+// $Revision: 1.3 $
+
+#include <boost/mpl/has_key_fwd.hpp>
+#include <boost/mpl/aux_/traits_lambda_spec.hpp>
+
+namespace boost { namespace mpl {
+
+// no default implementation; the definition is needed to make MSVC happy
+
+template< typename Tag > struct has_key_impl
+{
+ template< typename AssociativeSequence, typename Key > struct apply;
+};
+
+BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(2,has_key_impl)
+
+}}
+
+#endif // BOOST_MPL_AUX_HAS_KEY_IMPL_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/has_rebind.hpp b/boost/boost/mpl/aux_/has_rebind.hpp
new file mode 100644
index 00000000000..91eda521929
--- /dev/null
+++ b/boost/boost/mpl/aux_/has_rebind.hpp
@@ -0,0 +1,99 @@
+
+#ifndef BOOST_MPL_AUX_HAS_REBIND_HPP_INCLUDED
+#define BOOST_MPL_AUX_HAS_REBIND_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/has_rebind.hpp,v $
+// $Date: 2005/08/25 16:27:21 $
+// $Revision: 1.14 $
+
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/intel.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#if BOOST_WORKAROUND(__EDG_VERSION__, <= 244) && !defined(BOOST_INTEL_CXX_VERSION)
+# include <boost/mpl/has_xxx.hpp>
+#elif BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+# include <boost/mpl/has_xxx.hpp>
+# include <boost/mpl/if.hpp>
+# include <boost/mpl/bool.hpp>
+# include <boost/mpl/aux_/msvc_is_class.hpp>
+#elif BOOST_WORKAROUND(__BORLANDC__, < 0x600)
+# include <boost/mpl/if.hpp>
+# include <boost/mpl/bool.hpp>
+# include <boost/mpl/aux_/yes_no.hpp>
+# include <boost/mpl/aux_/config/static_constant.hpp>
+# include <boost/type_traits/is_class.hpp>
+#else
+# include <boost/mpl/aux_/type_wrapper.hpp>
+# include <boost/mpl/aux_/yes_no.hpp>
+# include <boost/mpl/aux_/config/static_constant.hpp>
+#endif
+
+namespace boost { namespace mpl { namespace aux {
+
+#if BOOST_WORKAROUND(__EDG_VERSION__, <= 244) && !defined(BOOST_INTEL_CXX_VERSION)
+
+BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(has_rebind, rebind, false)
+
+#elif BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+
+BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(has_rebind_impl, rebind, false)
+
+template< typename T >
+struct has_rebind
+ : if_<
+ msvc_is_class<T>
+ , has_rebind_impl<T>
+ , bool_<false>
+ >::type
+{
+};
+
+#else // the rest
+
+template< typename T > struct has_rebind_tag {};
+no_tag operator|(has_rebind_tag<int>, void const volatile*);
+
+# if !BOOST_WORKAROUND(__BORLANDC__, < 0x600)
+template< typename T >
+struct has_rebind
+{
+ static has_rebind_tag<T>* get();
+ BOOST_STATIC_CONSTANT(bool, value =
+ sizeof(has_rebind_tag<int>() | get()) == sizeof(yes_tag)
+ );
+};
+# else // __BORLANDC__
+template< typename T >
+struct has_rebind_impl
+{
+ static T* get();
+ BOOST_STATIC_CONSTANT(bool, value =
+ sizeof(has_rebind_tag<int>() | get()) == sizeof(yes_tag)
+ );
+};
+
+template< typename T >
+struct has_rebind
+ : if_<
+ is_class<T>
+ , has_rebind_impl<T>
+ , bool_<false>
+ >::type
+{
+};
+# endif // __BORLANDC__
+
+#endif
+
+}}}
+
+#endif // BOOST_MPL_AUX_HAS_REBIND_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/has_size.hpp b/boost/boost/mpl/aux_/has_size.hpp
new file mode 100644
index 00000000000..9a8806a3762
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/has_size.hpp,v $
+// $Date: 2004/09/02 15:40:43 $
+// $Revision: 1.6 $
+
+#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/boost/boost/mpl/aux_/has_tag.hpp b/boost/boost/mpl/aux_/has_tag.hpp
new file mode 100644
index 00000000000..9e25244ef3d
--- /dev/null
+++ b/boost/boost/mpl/aux_/has_tag.hpp
@@ -0,0 +1,23 @@
+
+#ifndef BOOST_MPL_AUX_HAS_TAG_HPP_INCLUDED
+#define BOOST_MPL_AUX_HAS_TAG_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/has_tag.hpp,v $
+// $Date: 2004/09/02 15:40:43 $
+// $Revision: 1.3 $
+
+#include <boost/mpl/has_xxx.hpp>
+
+namespace boost { namespace mpl { namespace aux {
+BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(has_tag, tag, false)
+}}}
+
+#endif // BOOST_MPL_AUX_HAS_TAG_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/has_type.hpp b/boost/boost/mpl/aux_/has_type.hpp
new file mode 100644
index 00000000000..b89311a4ff9
--- /dev/null
+++ b/boost/boost/mpl/aux_/has_type.hpp
@@ -0,0 +1,23 @@
+
+#ifndef BOOST_MPL_AUX_HAS_TYPE_HPP_INCLUDED
+#define BOOST_MPL_AUX_HAS_TYPE_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/has_type.hpp,v $
+// $Date: 2004/09/02 15:40:43 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/has_xxx.hpp>
+
+namespace boost { namespace mpl { namespace aux {
+BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(has_type, type, true)
+}}}
+
+#endif // BOOST_MPL_AUX_HAS_TYPE_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/include_preprocessed.hpp b/boost/boost/mpl/aux_/include_preprocessed.hpp
new file mode 100644
index 00000000000..9ceb2ce8aa6
--- /dev/null
+++ b/boost/boost/mpl/aux_/include_preprocessed.hpp
@@ -0,0 +1,42 @@
+
+// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION
+
+// Copyright Aleksey Gurtovoy 2000-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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/include_preprocessed.hpp,v $
+// $Date: 2006/11/09 00:46:57 $
+// $Revision: 1.5.14.1 $
+
+#include <boost/mpl/aux_/config/compiler.hpp>
+#include <boost/mpl/aux_/config/preprocessor.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/stringize.hpp>
+
+#if !defined(BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING)
+# define AUX778076_PREPROCESSED_HEADER \
+ BOOST_MPL_CFG_COMPILER_DIR/BOOST_MPL_PREPROCESSED_HEADER \
+/**/
+#else
+# define AUX778076_PREPROCESSED_HEADER \
+ BOOST_PP_CAT(BOOST_MPL_CFG_COMPILER_DIR,/)##BOOST_MPL_PREPROCESSED_HEADER \
+/**/
+#endif
+
+#if BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(700))
+# define AUX778076_INCLUDE_STRING BOOST_PP_STRINGIZE(boost/mpl/aux_/preprocessed/AUX778076_PREPROCESSED_HEADER)
+# include AUX778076_INCLUDE_STRING
+# undef AUX778076_INCLUDE_STRING
+#else
+# include BOOST_PP_STRINGIZE(boost/mpl/aux_/preprocessed/AUX778076_PREPROCESSED_HEADER)
+#endif
+
+# undef AUX778076_PREPROCESSED_HEADER
+
+#undef BOOST_MPL_PREPROCESSED_HEADER
diff --git a/boost/boost/mpl/aux_/insert_impl.hpp b/boost/boost/mpl/aux_/insert_impl.hpp
new file mode 100644
index 00000000000..edea0a299b5
--- /dev/null
+++ b/boost/boost/mpl/aux_/insert_impl.hpp
@@ -0,0 +1,68 @@
+
+#ifndef BOOST_MPL_INSERT_IMPL_HPP_INCLUDED
+#define BOOST_MPL_INSERT_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/insert_impl.hpp,v $
+// $Date: 2004/09/02 15:40:43 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/reverse_fold.hpp>
+#include <boost/mpl/iterator_range.hpp>
+#include <boost/mpl/clear.hpp>
+#include <boost/mpl/push_front.hpp>
+#include <boost/mpl/aux_/na_spec.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 'insert_impl' or the primary 'insert' template
+
+template< typename Tag >
+struct insert_impl
+{
+ template<
+ typename Sequence
+ , typename Pos
+ , typename T
+ >
+ struct apply
+ {
+ typedef iterator_range<
+ typename begin<Sequence>::type
+ , Pos
+ > first_half_;
+
+ typedef iterator_range<
+ Pos
+ , typename end<Sequence>::type
+ > second_half_;
+
+ typedef typename reverse_fold<
+ second_half_
+ , typename clear<Sequence>::type
+ , push_front<_,_>
+ >::type half_sequence_;
+
+ typedef typename reverse_fold<
+ first_half_
+ , typename push_front<half_sequence_,T>::type
+ , push_front<_,_>
+ >::type type;
+ };
+};
+
+BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(3,insert_impl)
+
+}}
+
+#endif // BOOST_MPL_INSERT_IMPL_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/insert_range_impl.hpp b/boost/boost/mpl/aux_/insert_range_impl.hpp
new file mode 100644
index 00000000000..8cef7ce85b2
--- /dev/null
+++ b/boost/boost/mpl/aux_/insert_range_impl.hpp
@@ -0,0 +1,77 @@
+
+#ifndef BOOST_MPL_AUX_INSERT_RANGE_IMPL_HPP_INCLUDED
+#define BOOST_MPL_AUX_INSERT_RANGE_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/insert_range_impl.hpp,v $
+// $Date: 2004/09/02 15:40:43 $
+// $Revision: 1.5 $
+
+#include <boost/mpl/copy.hpp>
+#include <boost/mpl/clear.hpp>
+#include <boost/mpl/front_inserter.hpp>
+#include <boost/mpl/joint_view.hpp>
+#include <boost/mpl/iterator_range.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/iter_push_front.hpp>
+#include <boost/mpl/aux_/traits_lambda_spec.hpp>
+#include <boost/mpl/aux_/config/forwarding.hpp>
+
+#include <boost/type_traits/same_traits.hpp>
+
+namespace boost { namespace mpl {
+
+// default implementation; conrete sequences might override it by
+// specializing either the 'insert_range_impl' or the primary
+// 'insert_range' template
+
+
+template< typename Tag >
+struct insert_range_impl
+{
+ template<
+ typename Sequence
+ , typename Pos
+ , typename Range
+ >
+ struct apply
+#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)
+ : reverse_copy<
+ joint_view<
+ iterator_range<typename begin<Sequence>::type,Pos>
+ , joint_view<
+ Range
+ , iterator_range<Pos,typename end<Sequence>::type>
+ >
+ >
+ , front_inserter< typename clear<Sequence>::type >
+ >
+ {
+#else
+ {
+ typedef typename reverse_copy<
+ joint_view<
+ iterator_range<typename begin<Sequence>::type,Pos>
+ , joint_view<
+ Range
+ , iterator_range<Pos,typename end<Sequence>::type>
+ >
+ >
+ , front_inserter< typename clear<Sequence>::type >
+ >::type type;
+#endif
+ };
+};
+
+BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(3,insert_range_impl)
+
+}}
+
+#endif // BOOST_MPL_AUX_INSERT_RANGE_IMPL_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/inserter_algorithm.hpp b/boost/boost/mpl/aux_/inserter_algorithm.hpp
new file mode 100644
index 00000000000..e6215d08b09
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/inserter_algorithm.hpp,v $
+// $Date: 2004/09/02 15:40:43 $
+// $Revision: 1.2 $
+
+#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<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 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/boost/boost/mpl/aux_/integral_wrapper.hpp b/boost/boost/mpl/aux_/integral_wrapper.hpp
new file mode 100644
index 00000000000..57f679511e6
--- /dev/null
+++ b/boost/boost/mpl/aux_/integral_wrapper.hpp
@@ -0,0 +1,93 @@
+
+// Copyright Aleksey Gurtovoy 2000-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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/integral_wrapper.hpp,v $
+// $Date: 2006/11/08 21:44:30 $
+// $Revision: 1.10.14.1 $
+
+// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION!
+
+#include <boost/mpl/integral_c_tag.hpp>
+#include <boost/mpl/aux_/static_cast.hpp>
+#include <boost/mpl/aux_/nttp_decl.hpp>
+#include <boost/mpl/aux_/config/static_constant.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#include <boost/preprocessor/cat.hpp>
+
+#if !defined(AUX_WRAPPER_NAME)
+# define AUX_WRAPPER_NAME BOOST_PP_CAT(AUX_WRAPPER_VALUE_TYPE,_)
+#endif
+
+#if !defined(AUX_WRAPPER_PARAMS)
+# define AUX_WRAPPER_PARAMS(N) BOOST_MPL_AUX_NTTP_DECL(AUX_WRAPPER_VALUE_TYPE, N)
+#endif
+
+#if !defined(AUX_WRAPPER_INST)
+# if BOOST_WORKAROUND(__MWERKS__, <= 0x2407)
+# define AUX_WRAPPER_INST(value) AUX_WRAPPER_NAME< value >
+# else
+# define AUX_WRAPPER_INST(value) BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::AUX_WRAPPER_NAME< value >
+# endif
+#endif
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+
+template< AUX_WRAPPER_PARAMS(N) >
+struct AUX_WRAPPER_NAME
+{
+ BOOST_STATIC_CONSTANT(AUX_WRAPPER_VALUE_TYPE, value = N);
+// agurt, 08/mar/03: SGI MIPSpro C++ workaround, have to #ifdef because some
+// other compilers (e.g. MSVC) are not particulary happy about it
+#if BOOST_WORKAROUND(__EDG_VERSION__, <= 238)
+ typedef struct AUX_WRAPPER_NAME type;
+#else
+ typedef AUX_WRAPPER_NAME type;
+#endif
+ typedef AUX_WRAPPER_VALUE_TYPE value_type;
+ typedef integral_c_tag tag;
+
+// have to #ifdef here: some compilers don't like the 'N + 1' form (MSVC),
+// while some other don't like 'value + 1' (Borland), and some don't like
+// either
+#if BOOST_WORKAROUND(__EDG_VERSION__, <= 243)
+ private:
+ BOOST_STATIC_CONSTANT(AUX_WRAPPER_VALUE_TYPE, next_value = BOOST_MPL_AUX_STATIC_CAST(AUX_WRAPPER_VALUE_TYPE, (N + 1)));
+ BOOST_STATIC_CONSTANT(AUX_WRAPPER_VALUE_TYPE, prior_value = BOOST_MPL_AUX_STATIC_CAST(AUX_WRAPPER_VALUE_TYPE, (N - 1)));
+ public:
+ typedef AUX_WRAPPER_INST(next_value) next;
+ typedef AUX_WRAPPER_INST(prior_value) prior;
+#elif BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x561)) \
+ || BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(502)) \
+ || BOOST_WORKAROUND(__HP_aCC, <= 53800)
+ typedef AUX_WRAPPER_INST( BOOST_MPL_AUX_STATIC_CAST(AUX_WRAPPER_VALUE_TYPE, (N + 1)) ) next;
+ typedef AUX_WRAPPER_INST( BOOST_MPL_AUX_STATIC_CAST(AUX_WRAPPER_VALUE_TYPE, (N - 1)) ) prior;
+#else
+ typedef AUX_WRAPPER_INST( BOOST_MPL_AUX_STATIC_CAST(AUX_WRAPPER_VALUE_TYPE, (value + 1)) ) next;
+ typedef AUX_WRAPPER_INST( BOOST_MPL_AUX_STATIC_CAST(AUX_WRAPPER_VALUE_TYPE, (value - 1)) ) prior;
+#endif
+
+ // enables uniform function call syntax for families of overloaded
+ // functions that return objects of both arithmetic ('int', 'long',
+ // 'double', etc.) and wrapped integral types (for an example, see
+ // "mpl/example/power.cpp")
+ operator AUX_WRAPPER_VALUE_TYPE() const { return static_cast<AUX_WRAPPER_VALUE_TYPE>(this->value); }
+};
+
+#if !defined(BOOST_NO_INCLASS_MEMBER_INITIALIZATION)
+template< AUX_WRAPPER_PARAMS(N) >
+AUX_WRAPPER_VALUE_TYPE const AUX_WRAPPER_INST(N)::value;
+#endif
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+
+#undef AUX_WRAPPER_NAME
+#undef AUX_WRAPPER_PARAMS
+#undef AUX_WRAPPER_INST
+#undef AUX_WRAPPER_VALUE_TYPE
diff --git a/boost/boost/mpl/aux_/is_msvc_eti_arg.hpp b/boost/boost/mpl/aux_/is_msvc_eti_arg.hpp
new file mode 100644
index 00000000000..751aeaff9dc
--- /dev/null
+++ b/boost/boost/mpl/aux_/is_msvc_eti_arg.hpp
@@ -0,0 +1,64 @@
+
+#ifndef BOOST_MPL_AUX_IS_MSVC_ETI_ARG_HPP_INCLUDED
+#define BOOST_MPL_AUX_IS_MSVC_ETI_ARG_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/is_msvc_eti_arg.hpp,v $
+// $Date: 2004/09/02 15:40:43 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/aux_/yes_no.hpp>
+#include <boost/mpl/aux_/config/eti.hpp>
+#include <boost/mpl/aux_/config/static_constant.hpp>
+
+namespace boost { namespace mpl { namespace aux {
+
+#if defined(BOOST_MPL_CFG_MSVC_ETI_BUG)
+
+#if defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG)
+
+template< typename T >
+struct is_msvc_eti_arg
+{
+ BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+#else // BOOST_MPL_CFG_MSVC_60_ETI_BUG
+
+struct eti_int_convertible
+{
+ eti_int_convertible(int);
+};
+
+template< typename T >
+struct is_msvc_eti_arg
+{
+ static no_tag test(...);
+ static yes_tag test(eti_int_convertible);
+ static T& get();
+
+ BOOST_STATIC_CONSTANT(bool, value =
+ sizeof(test(get())) == sizeof(yes_tag)
+ );
+};
+
+#endif
+
+template<>
+struct is_msvc_eti_arg<int>
+{
+ BOOST_STATIC_CONSTANT(bool, value = true);
+};
+
+#endif // BOOST_MPL_CFG_MSVC_ETI_BUG
+
+}}}
+
+#endif // BOOST_MPL_AUX_IS_MSVC_ETI_ARG_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/iter_apply.hpp b/boost/boost/mpl/aux_/iter_apply.hpp
new file mode 100644
index 00000000000..04bca019e23
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/iter_apply.hpp,v $
+// $Date: 2004/09/02 15:40:43 $
+// $Revision: 1.4 $
+
+#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/boost/boost/mpl/aux_/iter_fold_if_impl.hpp b/boost/boost/mpl/aux_/iter_fold_if_impl.hpp
new file mode 100644
index 00000000000..bc4f826d11e
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/iter_fold_if_impl.hpp,v $
+// $Date: 2004/09/02 15:40:43 $
+// $Revision: 1.8 $
+
+#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/boost/boost/mpl/aux_/iter_fold_impl.hpp b/boost/boost/mpl/aux_/iter_fold_impl.hpp
new file mode 100644
index 00000000000..4d444db28b5
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/iter_fold_impl.hpp,v $
+// $Date: 2004/09/02 15:40:43 $
+// $Revision: 1.5 $
+
+#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/boost/boost/mpl/aux_/iter_push_front.hpp b/boost/boost/mpl/aux_/iter_push_front.hpp
new file mode 100644
index 00000000000..fad997eaf14
--- /dev/null
+++ b/boost/boost/mpl/aux_/iter_push_front.hpp
@@ -0,0 +1,36 @@
+
+#ifndef BOOST_MPL_ITER_PUSH_FRONT_HPP_INCLUDED
+#define BOOST_MPL_ITER_PUSH_FRONT_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/iter_push_front.hpp,v $
+// $Date: 2004/09/02 15:40:43 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/push_front.hpp>
+#include <boost/mpl/deref.hpp>
+
+namespace boost { namespace mpl { namespace aux {
+
+template<
+ typename Sequence
+ , typename Iterator
+ >
+struct iter_push_front
+{
+ typedef typename push_front<
+ Sequence
+ , typename deref<Iterator>::type
+ >::type type;
+};
+
+}}}
+
+#endif // BOOST_MPL_ITER_PUSH_FRONT_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/joint_iter.hpp b/boost/boost/mpl/aux_/joint_iter.hpp
new file mode 100644
index 00000000000..d510b147c66
--- /dev/null
+++ b/boost/boost/mpl/aux_/joint_iter.hpp
@@ -0,0 +1,120 @@
+
+#ifndef BOOST_MPL_AUX_JOINT_ITER_HPP_INCLUDED
+#define BOOST_MPL_AUX_JOINT_ITER_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/joint_iter.hpp,v $
+// $Date: 2004/10/01 16:29:34 $
+// $Revision: 1.6 $
+
+#include <boost/mpl/next_prior.hpp>
+#include <boost/mpl/deref.hpp>
+#include <boost/mpl/iterator_tags.hpp>
+#include <boost/mpl/aux_/lambda_spec.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+
+#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+# include <boost/type_traits/is_same.hpp>
+#endif
+
+namespace boost { namespace mpl {
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template<
+ typename Iterator1
+ , typename LastIterator1
+ , typename Iterator2
+ >
+struct joint_iter
+{
+ typedef Iterator1 base;
+ typedef forward_iterator_tag category;
+};
+
+template<
+ typename LastIterator1
+ , typename Iterator2
+ >
+struct joint_iter<LastIterator1,LastIterator1,Iterator2>
+{
+ typedef Iterator2 base;
+ typedef forward_iterator_tag category;
+};
+
+
+template< typename I1, typename L1, typename I2 >
+struct deref< joint_iter<I1,L1,I2> >
+{
+ typedef typename joint_iter<I1,L1,I2>::base base_;
+ typedef typename deref<base_>::type type;
+};
+
+template< typename I1, typename L1, typename I2 >
+struct next< joint_iter<I1,L1,I2> >
+{
+ typedef joint_iter< typename mpl::next<I1>::type,L1,I2 > type;
+};
+
+template< typename L1, typename I2 >
+struct next< joint_iter<L1,L1,I2> >
+{
+ typedef joint_iter< L1,L1,typename mpl::next<I2>::type > type;
+};
+
+#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+template<
+ typename Iterator1
+ , typename LastIterator1
+ , typename Iterator2
+ >
+struct joint_iter;
+
+template< bool > struct joint_iter_impl
+{
+ template< typename I1, typename L1, typename I2 > struct result_
+ {
+ typedef I1 base;
+ typedef forward_iterator_tag category;
+ typedef joint_iter< typename mpl::next<I1>::type,L1,I2 > next;
+ typedef typename deref<I1>::type type;
+ };
+};
+
+template<> struct joint_iter_impl<true>
+{
+ template< typename I1, typename L1, typename I2 > struct result_
+ {
+ typedef I2 base;
+ typedef forward_iterator_tag category;
+ typedef joint_iter< L1,L1,typename mpl::next<I2>::type > next;
+ typedef typename deref<I2>::type type;
+ };
+};
+
+template<
+ typename Iterator1
+ , typename LastIterator1
+ , typename Iterator2
+ >
+struct joint_iter
+ : joint_iter_impl< is_same<Iterator1,LastIterator1>::value >
+ ::template result_<Iterator1,LastIterator1,Iterator2>
+{
+};
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(3, joint_iter)
+
+}}
+
+#endif // BOOST_MPL_AUX_JOINT_ITER_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/lambda_arity_param.hpp b/boost/boost/mpl/aux_/lambda_arity_param.hpp
new file mode 100644
index 00000000000..48ff9d602f0
--- /dev/null
+++ b/boost/boost/mpl/aux_/lambda_arity_param.hpp
@@ -0,0 +1,25 @@
+
+#ifndef BOOST_MPL_AUX_LAMBDA_ARITY_PARAM_HPP_INCLUDED
+#define BOOST_MPL_AUX_LAMBDA_ARITY_PARAM_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/lambda_arity_param.hpp,v $
+// $Date: 2004/09/02 15:40:43 $
+// $Revision: 1.5 $
+
+#include <boost/mpl/aux_/config/ttp.hpp>
+
+#if !defined(BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING)
+# define BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(param)
+#else
+# define BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(param) , param
+#endif
+
+#endif // BOOST_MPL_AUX_LAMBDA_ARITY_PARAM_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/lambda_no_ctps.hpp b/boost/boost/mpl/aux_/lambda_no_ctps.hpp
new file mode 100644
index 00000000000..721ede40bb2
--- /dev/null
+++ b/boost/boost/mpl/aux_/lambda_no_ctps.hpp
@@ -0,0 +1,193 @@
+
+#if !defined(BOOST_PP_IS_ITERATING)
+
+///// header body
+
+#ifndef BOOST_MPL_AUX_LAMBDA_NO_CTPS_HPP_INCLUDED
+#define BOOST_MPL_AUX_LAMBDA_NO_CTPS_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/lambda_no_ctps.hpp,v $
+// $Date: 2004/09/07 12:24:48 $
+// $Revision: 1.14 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/lambda_fwd.hpp>
+# include <boost/mpl/bind_fwd.hpp>
+# include <boost/mpl/protect.hpp>
+# include <boost/mpl/is_placeholder.hpp>
+# include <boost/mpl/if.hpp>
+# include <boost/mpl/identity.hpp>
+# include <boost/mpl/bool.hpp>
+# include <boost/mpl/aux_/na_spec.hpp>
+# include <boost/mpl/aux_/lambda_support.hpp>
+# include <boost/mpl/aux_/template_arity.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 lambda_no_ctps.hpp
+# include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#else
+
+# include <boost/mpl/limits/arity.hpp>
+# include <boost/mpl/aux_/preprocessor/params.hpp>
+# include <boost/mpl/aux_/preprocessor/default_params.hpp>
+# include <boost/mpl/aux_/preprocessor/repeat.hpp>
+# include <boost/mpl/aux_/preprocessor/enum.hpp>
+# include <boost/mpl/aux_/config/msvc.hpp>
+# include <boost/mpl/aux_/config/workaround.hpp>
+
+# include <boost/preprocessor/comma_if.hpp>
+# include <boost/preprocessor/iterate.hpp>
+# include <boost/preprocessor/inc.hpp>
+# include <boost/preprocessor/cat.hpp>
+
+namespace boost { namespace mpl {
+
+# define AUX778076_LAMBDA_PARAMS(i_, param) \
+ BOOST_MPL_PP_PARAMS(i_, param) \
+ /**/
+
+namespace aux {
+
+#define n_ BOOST_MPL_LIMIT_METAFUNCTION_ARITY
+template<
+ BOOST_MPL_PP_DEFAULT_PARAMS(n_,bool C,false)
+ >
+struct lambda_or
+ : true_
+{
+};
+
+template<>
+struct lambda_or< BOOST_MPL_PP_ENUM(n_,false) >
+ : false_
+{
+};
+#undef n_
+
+template< typename Arity > struct lambda_impl
+{
+ template< typename T, typename Tag, typename Protect > struct result_
+ {
+ typedef T type;
+ typedef is_placeholder<T> is_le;
+ };
+};
+
+#define BOOST_PP_ITERATION_PARAMS_1 \
+ (3,(1, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, <boost/mpl/aux_/lambda_no_ctps.hpp>))
+#include BOOST_PP_ITERATE()
+
+} // namespace aux
+
+template<
+ typename T
+ , typename Tag
+ , typename Protect
+ >
+struct lambda
+{
+ /// Metafunction forwarding confuses MSVC 6.x
+ typedef typename aux::template_arity<T>::type arity_;
+ typedef typename aux::lambda_impl<arity_>
+ ::template result_< T,Tag,Protect > l_;
+
+ typedef typename l_::type type;
+ typedef typename l_::is_le is_le;
+
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(3, lambda, (T, Tag, Protect))
+};
+
+BOOST_MPL_AUX_NA_SPEC2(1, 3, lambda)
+
+template<
+ typename T
+ >
+struct is_lambda_expression
+ : lambda<T>::is_le
+{
+};
+
+# undef AUX778076_LAMBDA_PARAMS
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#endif // BOOST_MPL_AUX_LAMBDA_NO_CTPS_HPP_INCLUDED
+
+///// iteration, depth == 1
+
+#else
+
+#define i_ BOOST_PP_FRAME_ITERATION(1)
+
+# define AUX778076_LAMBDA_TYPEDEF(unused, i_, F) \
+ typedef lambda< \
+ typename F::BOOST_PP_CAT(arg,BOOST_PP_INC(i_)) \
+ , Tag \
+ , false_ \
+ > BOOST_PP_CAT(l,BOOST_PP_INC(i_)); \
+ /**/
+
+# define AUX778076_IS_LE_TYPEDEF(unused, i_, unused2) \
+ typedef typename BOOST_PP_CAT(l,BOOST_PP_INC(i_))::is_le \
+ BOOST_PP_CAT(is_le,BOOST_PP_INC(i_)); \
+ /**/
+
+# define AUX778076_IS_LAMBDA_EXPR(unused, i_, unused2) \
+ BOOST_PP_COMMA_IF(i_) \
+ BOOST_MPL_AUX_MSVC_VALUE_WKND(BOOST_PP_CAT(is_le,BOOST_PP_INC(i_)))::value \
+ /**/
+
+# define AUX778076_LAMBDA_RESULT(unused, i_, unused2) \
+ , typename BOOST_PP_CAT(l,BOOST_PP_INC(i_))::type \
+ /**/
+
+template<> struct lambda_impl< int_<i_> >
+{
+ template< typename F, typename Tag, typename Protect > struct result_
+ {
+ BOOST_MPL_PP_REPEAT(i_, AUX778076_LAMBDA_TYPEDEF, F)
+ BOOST_MPL_PP_REPEAT(i_, AUX778076_IS_LE_TYPEDEF, unused)
+
+ typedef aux::lambda_or<
+ BOOST_MPL_PP_REPEAT(i_, AUX778076_IS_LAMBDA_EXPR, unused)
+ > is_le;
+
+ typedef BOOST_PP_CAT(bind,i_)<
+ typename F::rebind
+ BOOST_MPL_PP_REPEAT(i_, AUX778076_LAMBDA_RESULT, unused)
+ > bind_;
+
+ typedef typename if_<
+ is_le
+ , if_< Protect, mpl::protect<bind_>, bind_ >
+ , identity<F>
+ >::type type_;
+
+ typedef typename type_::type type;
+ };
+};
+
+# undef AUX778076_LAMBDA_RESULT
+# undef AUX778076_IS_LAMBDA_EXPR
+# undef AUX778076_IS_LE_TYPEDEF
+# undef AUX778076_LAMBDA_TYPEDEF
+
+#undef i_
+
+#endif // BOOST_PP_IS_ITERATING
diff --git a/boost/boost/mpl/aux_/lambda_spec.hpp b/boost/boost/mpl/aux_/lambda_spec.hpp
new file mode 100644
index 00000000000..acbefafcf53
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/lambda_spec.hpp,v $
+// $Date: 2007/01/29 07:28:45 $
+// $Revision: 1.8.14.1 $
+
+#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/boost/boost/mpl/aux_/lambda_support.hpp b/boost/boost/mpl/aux_/lambda_support.hpp
new file mode 100644
index 00000000000..338358bae8d
--- /dev/null
+++ b/boost/boost/mpl/aux_/lambda_support.hpp
@@ -0,0 +1,169 @@
+
+#ifndef BOOST_MPL_AUX_LAMBDA_SUPPORT_HPP_INCLUDED
+#define BOOST_MPL_AUX_LAMBDA_SUPPORT_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/lambda_support.hpp,v $
+// $Date: 2005/08/25 16:27:21 $
+// $Revision: 1.13 $
+
+#include <boost/mpl/aux_/config/lambda.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT)
+
+# define BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(i, name, params) /**/
+# define BOOST_MPL_AUX_LAMBDA_SUPPORT(i,name,params) /**/
+
+#else
+
+# include <boost/mpl/int_fwd.hpp>
+# include <boost/mpl/aux_/yes_no.hpp>
+# include <boost/mpl/aux_/na_fwd.hpp>
+# include <boost/mpl/aux_/preprocessor/params.hpp>
+# include <boost/mpl/aux_/preprocessor/enum.hpp>
+# include <boost/mpl/aux_/config/msvc.hpp>
+# include <boost/mpl/aux_/config/workaround.hpp>
+
+# include <boost/preprocessor/tuple/to_list.hpp>
+# include <boost/preprocessor/list/for_each_i.hpp>
+# include <boost/preprocessor/inc.hpp>
+# include <boost/preprocessor/cat.hpp>
+
+# define BOOST_MPL_AUX_LAMBDA_SUPPORT_ARG_TYPEDEF_FUNC(R,typedef_,i,param) \
+ typedef_ param BOOST_PP_CAT(arg,BOOST_PP_INC(i)); \
+ /**/
+
+// agurt, 07/mar/03: restore an old revision for the sake of SGI MIPSpro C++
+#if BOOST_WORKAROUND(__EDG_VERSION__, <= 238)
+
+# define BOOST_MPL_AUX_LAMBDA_SUPPORT(i, name, params) \
+ typedef BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::int_<i> arity; \
+ BOOST_PP_LIST_FOR_EACH_I_R( \
+ 1 \
+ , BOOST_MPL_AUX_LAMBDA_SUPPORT_ARG_TYPEDEF_FUNC \
+ , typedef \
+ , BOOST_PP_TUPLE_TO_LIST(i,params) \
+ ) \
+ struct rebind \
+ { \
+ template< BOOST_MPL_PP_PARAMS(i,typename U) > struct apply \
+ : name< BOOST_MPL_PP_PARAMS(i,U) > \
+ { \
+ }; \
+ }; \
+ /**/
+
+# define BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(i, name, params) \
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(i, name, params) \
+ /**/
+
+#elif BOOST_WORKAROUND(__EDG_VERSION__, <= 244) && !defined(BOOST_INTEL_CXX_VERSION)
+// agurt, 18/jan/03: old EDG-based compilers actually enforce 11.4 para 9
+// (in strict mode), so we have to provide an alternative to the
+// MSVC-optimized implementation
+
+# define BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(i, name, params) \
+ typedef BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::int_<i> arity; \
+ BOOST_PP_LIST_FOR_EACH_I_R( \
+ 1 \
+ , BOOST_MPL_AUX_LAMBDA_SUPPORT_ARG_TYPEDEF_FUNC \
+ , typedef \
+ , BOOST_PP_TUPLE_TO_LIST(i,params) \
+ ) \
+ struct rebind; \
+/**/
+
+# define BOOST_MPL_AUX_LAMBDA_SUPPORT(i, name, params) \
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(i, name, params) \
+}; \
+template< BOOST_MPL_PP_PARAMS(i,typename T) > \
+struct name<BOOST_MPL_PP_PARAMS(i,T)>::rebind \
+{ \
+ template< BOOST_MPL_PP_PARAMS(i,typename U) > struct apply \
+ : name< BOOST_MPL_PP_PARAMS(i,U) > \
+ { \
+ }; \
+/**/
+
+#else // __EDG_VERSION__
+
+namespace boost { namespace mpl { namespace aux {
+template< typename T > struct has_rebind_tag;
+}}}
+
+# define BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(i, name, params) \
+ typedef BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::int_<i> arity; \
+ BOOST_PP_LIST_FOR_EACH_I_R( \
+ 1 \
+ , BOOST_MPL_AUX_LAMBDA_SUPPORT_ARG_TYPEDEF_FUNC \
+ , typedef \
+ , BOOST_PP_TUPLE_TO_LIST(i,params) \
+ ) \
+ friend class BOOST_PP_CAT(name,_rebind); \
+ typedef BOOST_PP_CAT(name,_rebind) rebind; \
+/**/
+
+#if BOOST_WORKAROUND(__BORLANDC__, < 0x600)
+# define BOOST_MPL_AUX_LAMBDA_SUPPORT_HAS_REBIND(i, name, params) \
+template< BOOST_MPL_PP_PARAMS(i,typename T) > \
+::boost::mpl::aux::yes_tag operator|( \
+ ::boost::mpl::aux::has_rebind_tag<int> \
+ , name<BOOST_MPL_PP_PARAMS(i,T)>* \
+ ); \
+::boost::mpl::aux::no_tag operator|( \
+ ::boost::mpl::aux::has_rebind_tag<int> \
+ , name< BOOST_MPL_PP_ENUM(i,::boost::mpl::na) >* \
+ ); \
+/**/
+#elif !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+# define BOOST_MPL_AUX_LAMBDA_SUPPORT_HAS_REBIND(i, name, params) \
+template< BOOST_MPL_PP_PARAMS(i,typename T) > \
+::boost::mpl::aux::yes_tag operator|( \
+ ::boost::mpl::aux::has_rebind_tag<int> \
+ , ::boost::mpl::aux::has_rebind_tag< name<BOOST_MPL_PP_PARAMS(i,T)> >* \
+ ); \
+/**/
+#else
+# define BOOST_MPL_AUX_LAMBDA_SUPPORT_HAS_REBIND(i, name, params) /**/
+#endif
+
+# if !defined(__BORLANDC__)
+# define BOOST_MPL_AUX_LAMBDA_SUPPORT(i, name, params) \
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(i, name, params) \
+}; \
+BOOST_MPL_AUX_LAMBDA_SUPPORT_HAS_REBIND(i, name, params) \
+class BOOST_PP_CAT(name,_rebind) \
+{ \
+ public: \
+ template< BOOST_MPL_PP_PARAMS(i,typename U) > struct apply \
+ : name< BOOST_MPL_PP_PARAMS(i,U) > \
+ { \
+ }; \
+/**/
+# else
+# define BOOST_MPL_AUX_LAMBDA_SUPPORT(i, name, params) \
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(i, name, params) \
+}; \
+BOOST_MPL_AUX_LAMBDA_SUPPORT_HAS_REBIND(i, name, params) \
+class BOOST_PP_CAT(name,_rebind) \
+{ \
+ public: \
+ template< BOOST_MPL_PP_PARAMS(i,typename U) > struct apply \
+ { \
+ typedef typename name< BOOST_MPL_PP_PARAMS(i,U) >::type type; \
+ }; \
+/**/
+# endif // __BORLANDC__
+
+#endif // __EDG_VERSION__
+
+#endif // BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT
+
+#endif // BOOST_MPL_AUX_LAMBDA_SUPPORT_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/largest_int.hpp b/boost/boost/mpl/aux_/largest_int.hpp
new file mode 100644
index 00000000000..0c2a9c64d37
--- /dev/null
+++ b/boost/boost/mpl/aux_/largest_int.hpp
@@ -0,0 +1,63 @@
+
+#ifndef BOOST_MPL_AUX_LARGEST_INT_HPP_INCLUDED
+#define BOOST_MPL_AUX_LARGEST_INT_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/largest_int.hpp,v $
+// $Date: 2004/09/19 03:08:53 $
+// $Revision: 1.5 $
+
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/aux_/config/integral.hpp>
+#include <boost/config.hpp>
+
+namespace boost { namespace mpl { namespace aux {
+
+template< typename T > struct integral_rank;
+
+template<> struct integral_rank<bool> : int_<1> {};
+template<> struct integral_rank<signed char> : int_<2> {};
+template<> struct integral_rank<char> : int_<3> {};
+template<> struct integral_rank<unsigned char> : int_<4> {};
+#if !defined(BOOST_NO_INTRINSIC_WCHAR_T)
+template<> struct integral_rank<wchar_t> : int_<5> {};
+#endif
+template<> struct integral_rank<short> : int_<6> {};
+template<> struct integral_rank<unsigned short> : int_<7> {};
+template<> struct integral_rank<int> : int_<8> {};
+template<> struct integral_rank<unsigned int> : int_<9> {};
+template<> struct integral_rank<long> : int_<10> {};
+template<> struct integral_rank<unsigned long> : int_<11> {};
+
+#if defined(BOOST_HAS_LONG_LONG)
+template<> struct integral_rank<long_long_type> : int_<12> {};
+template<> struct integral_rank<ulong_long_type>: int_<13> {};
+#endif
+
+template< typename T1, typename T2 > struct largest_int
+#if !defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC)
+ : if_c<
+ ( integral_rank<T1>::value >= integral_rank<T2>::value )
+ , T1
+ , T2
+ >
+{
+#else
+{
+ enum { rank1 = integral_rank<T1>::value };
+ enum { rank2 = integral_rank<T2>::value };
+ typedef typename if_c< (rank1 >= rank2),T1,T2 >::type type;
+#endif
+};
+
+}}}
+
+#endif // BOOST_MPL_AUX_LARGEST_INT_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/logical_op.hpp b/boost/boost/mpl/aux_/logical_op.hpp
new file mode 100644
index 00000000000..1341301c851
--- /dev/null
+++ b/boost/boost/mpl/aux_/logical_op.hpp
@@ -0,0 +1,165 @@
+
+// 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/logical_op.hpp,v $
+// $Date: 2004/09/02 15:40:43 $
+// $Revision: 1.3 $
+
+// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION!
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/bool.hpp>
+# include <boost/mpl/aux_/nested_type_wknd.hpp>
+# include <boost/mpl/aux_/na_spec.hpp>
+# include <boost/mpl/aux_/lambda_support.hpp>
+#endif
+
+#include <boost/mpl/limits/arity.hpp>
+#include <boost/mpl/aux_/preprocessor/params.hpp>
+#include <boost/mpl/aux_/preprocessor/ext_params.hpp>
+#include <boost/mpl/aux_/preprocessor/def_params_tail.hpp>
+#include <boost/mpl/aux_/preprocessor/enum.hpp>
+#include <boost/mpl/aux_/preprocessor/sub.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#include <boost/preprocessor/dec.hpp>
+#include <boost/preprocessor/inc.hpp>
+#include <boost/preprocessor/cat.hpp>
+
+namespace boost { namespace mpl {
+
+# define AUX778076_PARAMS(param, sub) \
+ BOOST_MPL_PP_PARAMS( \
+ BOOST_MPL_PP_SUB(BOOST_MPL_LIMIT_METAFUNCTION_ARITY, sub) \
+ , param \
+ ) \
+ /**/
+
+# define AUX778076_SHIFTED_PARAMS(param, sub) \
+ BOOST_MPL_PP_EXT_PARAMS( \
+ 2, BOOST_MPL_PP_SUB(BOOST_PP_INC(BOOST_MPL_LIMIT_METAFUNCTION_ARITY), sub) \
+ , param \
+ ) \
+ /**/
+
+# define AUX778076_SPEC_PARAMS(param) \
+ BOOST_MPL_PP_ENUM( \
+ BOOST_PP_DEC(BOOST_MPL_LIMIT_METAFUNCTION_ARITY) \
+ , param \
+ ) \
+ /**/
+
+namespace aux {
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template< bool C_, AUX778076_PARAMS(typename T, 1) >
+struct BOOST_PP_CAT(AUX778076_OP_NAME,impl)
+ : BOOST_PP_CAT(AUX778076_OP_VALUE1,_)
+{
+};
+
+template< AUX778076_PARAMS(typename T, 1) >
+struct BOOST_PP_CAT(AUX778076_OP_NAME,impl)< AUX778076_OP_VALUE2,AUX778076_PARAMS(T, 1) >
+ : BOOST_PP_CAT(AUX778076_OP_NAME,impl)<
+ BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+ , AUX778076_SHIFTED_PARAMS(T, 1)
+ , BOOST_PP_CAT(AUX778076_OP_VALUE2,_)
+ >
+{
+};
+
+template<>
+struct BOOST_PP_CAT(AUX778076_OP_NAME,impl)<
+ AUX778076_OP_VALUE2
+ , AUX778076_SPEC_PARAMS(BOOST_PP_CAT(AUX778076_OP_VALUE2,_))
+ >
+ : BOOST_PP_CAT(AUX778076_OP_VALUE2,_)
+{
+};
+
+#else
+
+template< bool C_ > struct BOOST_PP_CAT(AUX778076_OP_NAME,impl)
+{
+ template< AUX778076_PARAMS(typename T, 1) > struct result_
+ : BOOST_PP_CAT(AUX778076_OP_VALUE1,_)
+ {
+ };
+};
+
+template<> struct BOOST_PP_CAT(AUX778076_OP_NAME,impl)<AUX778076_OP_VALUE2>
+{
+ template< AUX778076_PARAMS(typename T, 1) > struct result_
+ : BOOST_PP_CAT(AUX778076_OP_NAME,impl)<
+ BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+ >::template result_< AUX778076_SHIFTED_PARAMS(T,1),BOOST_PP_CAT(AUX778076_OP_VALUE2,_) >
+ {
+ };
+
+#if BOOST_WORKAROUND(BOOST_MSVC, == 1300)
+ template<> struct result_<AUX778076_SPEC_PARAMS(BOOST_PP_CAT(AUX778076_OP_VALUE2,_))>
+ : BOOST_PP_CAT(AUX778076_OP_VALUE2,_)
+ {
+ };
+};
+#else
+};
+
+template<>
+struct BOOST_PP_CAT(AUX778076_OP_NAME,impl)<AUX778076_OP_VALUE2>
+ ::result_< AUX778076_SPEC_PARAMS(BOOST_PP_CAT(AUX778076_OP_VALUE2,_)) >
+ : BOOST_PP_CAT(AUX778076_OP_VALUE2,_)
+{
+};
+#endif // BOOST_MSVC == 1300
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+} // namespace aux
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(T1)
+ , typename BOOST_MPL_AUX_NA_PARAM(T2)
+ BOOST_MPL_PP_DEF_PARAMS_TAIL(2, typename T, BOOST_PP_CAT(AUX778076_OP_VALUE2,_))
+ >
+struct AUX778076_OP_NAME
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+ : aux::BOOST_PP_CAT(AUX778076_OP_NAME,impl)<
+ BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+ , AUX778076_SHIFTED_PARAMS(T,0)
+ >
+#else
+ : aux::BOOST_PP_CAT(AUX778076_OP_NAME,impl)<
+ BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+ >::template result_< AUX778076_SHIFTED_PARAMS(T,0) >
+#endif
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ BOOST_MPL_LIMIT_METAFUNCTION_ARITY
+ , AUX778076_OP_NAME
+ , (AUX778076_PARAMS(T, 0))
+ )
+};
+
+BOOST_MPL_AUX_NA_SPEC2(
+ 2
+ , BOOST_MPL_LIMIT_METAFUNCTION_ARITY
+ , AUX778076_OP_NAME
+ )
+
+}}
+
+#undef AUX778076_SPEC_PARAMS
+#undef AUX778076_SHIFTED_PARAMS
+#undef AUX778076_PARAMS
+#undef AUX778076_OP_NAME
+#undef AUX778076_OP_VALUE1
+#undef AUX778076_OP_VALUE2
diff --git a/boost/boost/mpl/aux_/msvc_dtw.hpp b/boost/boost/mpl/aux_/msvc_dtw.hpp
new file mode 100644
index 00000000000..38c2c24e420
--- /dev/null
+++ b/boost/boost/mpl/aux_/msvc_dtw.hpp
@@ -0,0 +1,68 @@
+
+// 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/msvc_dtw.hpp,v $
+// $Date: 2004/09/02 15:40:43 $
+// $Revision: 1.4 $
+
+// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION!
+
+#include <boost/mpl/aux_/preprocessor/params.hpp>
+
+// local macros, #undef-ined at the end of the header
+#define AUX778076_DTW_PARAMS(param) \
+ BOOST_MPL_PP_PARAMS(AUX778076_MSVC_DTW_ARITY, param) \
+/**/
+
+#define AUX778076_DTW_ORIGINAL_NAME \
+ AUX778076_MSVC_DTW_ORIGINAL_NAME \
+/**/
+
+// warning: not a well-formed C++
+// workaround for MSVC 6.5's "dependent template typedef bug"
+
+template< typename F>
+struct AUX778076_MSVC_DTW_NAME
+{
+ template< bool > struct f_ : F {};
+ template<> struct f_<true>
+ {
+#if AUX778076_MSVC_DTW_ARITY > 0
+ template< AUX778076_DTW_PARAMS(typename P) > struct AUX778076_DTW_ORIGINAL_NAME
+ {
+ typedef int type;
+ };
+ };
+
+ template< AUX778076_DTW_PARAMS(typename T) > struct result_
+ : f_< aux::msvc_never_true<F>::value >
+ ::template AUX778076_DTW_ORIGINAL_NAME< AUX778076_DTW_PARAMS(T) >
+ {
+ };
+#else
+ template< typename P = int > struct AUX778076_DTW_ORIGINAL_NAME
+ {
+ typedef int type;
+ };
+ };
+
+ template< typename T = int > struct result_
+ : f_< aux::msvc_never_true<F>::value >
+ ::template AUX778076_DTW_ORIGINAL_NAME<>
+ {
+ };
+#endif
+};
+
+#undef AUX778076_DTW_ORIGINAL_NAME
+#undef AUX778076_DTW_PARAMS
+
+#undef AUX778076_MSVC_DTW_NAME
+#undef AUX778076_MSVC_DTW_ORIGINAL_NAME
+#undef AUX778076_MSVC_DTW_ARITY
diff --git a/boost/boost/mpl/aux_/msvc_eti_base.hpp b/boost/boost/mpl/aux_/msvc_eti_base.hpp
new file mode 100644
index 00000000000..ad45c7e45d1
--- /dev/null
+++ b/boost/boost/mpl/aux_/msvc_eti_base.hpp
@@ -0,0 +1,77 @@
+
+#ifndef BOOST_MPL_AUX_MSVC_ETI_BASE_HPP_INCLUDED
+#define BOOST_MPL_AUX_MSVC_ETI_BASE_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/msvc_eti_base.hpp,v $
+// $Date: 2004/11/28 01:37:05 $
+// $Revision: 1.7 $
+
+#include <boost/mpl/aux_/is_msvc_eti_arg.hpp>
+#include <boost/mpl/aux_/config/eti.hpp>
+#include <boost/mpl/aux_/config/gcc.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+namespace boost { namespace mpl { namespace aux {
+
+#if defined(BOOST_MPL_CFG_MSVC_70_ETI_BUG)
+
+template< bool > struct msvc_eti_base_impl
+{
+ template< typename T > struct result_
+ : T
+ {
+ typedef T type;
+ };
+};
+
+template<> struct msvc_eti_base_impl<true>
+{
+ template< typename T > struct result_
+ {
+ typedef result_ type;
+ typedef result_ first;
+ typedef result_ second;
+ typedef result_ tag;
+ enum { value = 0 };
+ };
+};
+
+template< typename T > struct msvc_eti_base
+ : msvc_eti_base_impl< is_msvc_eti_arg<T>::value >
+ ::template result_<T>
+{
+};
+
+#else // !BOOST_MPL_CFG_MSVC_70_ETI_BUG
+
+template< typename T > struct msvc_eti_base
+ : T
+{
+#if BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, BOOST_TESTED_AT(0x0304))
+ msvc_eti_base();
+#endif
+ typedef T type;
+};
+
+#endif
+
+template<> struct msvc_eti_base<int>
+{
+ typedef msvc_eti_base type;
+ typedef msvc_eti_base first;
+ typedef msvc_eti_base second;
+ typedef msvc_eti_base tag;
+ enum { value = 0 };
+};
+
+}}}
+
+#endif // BOOST_MPL_AUX_MSVC_ETI_BASE_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/msvc_is_class.hpp b/boost/boost/mpl/aux_/msvc_is_class.hpp
new file mode 100644
index 00000000000..d9a0f8fcf22
--- /dev/null
+++ b/boost/boost/mpl/aux_/msvc_is_class.hpp
@@ -0,0 +1,58 @@
+
+#ifndef BOOST_MPL_AUX_MSVC_IS_CLASS_HPP_INCLUDED
+#define BOOST_MPL_AUX_MSVC_IS_CLASS_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/msvc_is_class.hpp,v $
+// $Date: 2004/09/28 13:56:59 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/aux_/type_wrapper.hpp>
+#include <boost/mpl/aux_/yes_no.hpp>
+
+#include <boost/type_traits/is_reference.hpp>
+
+namespace boost { namespace mpl { namespace aux {
+
+template< typename T > struct is_class_helper
+{
+ typedef int (T::* type)();
+};
+
+// MSVC 6.x-specific lightweight 'is_class' implementation;
+// Distinguishing feature: does not instantiate the type being tested.
+template< typename T >
+struct msvc_is_class_impl
+{
+ template< typename U>
+ static yes_tag test(type_wrapper<U>*, /*typename*/ is_class_helper<U>::type = 0);
+ static no_tag test(void const volatile*, ...);
+
+ enum { value = sizeof(test((type_wrapper<T>*)0)) == sizeof(yes_tag) };
+ typedef bool_<value> type;
+};
+
+// agurt, 17/sep/04: have to check for 'is_reference' upfront to avoid ICEs in
+// complex metaprograms
+template< typename T >
+struct msvc_is_class
+ : if_<
+ is_reference<T>
+ , false_
+ , msvc_is_class_impl<T>
+ >::type
+{
+};
+
+}}}
+
+#endif // BOOST_MPL_AUX_MSVC_IS_CLASS_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/msvc_never_true.hpp b/boost/boost/mpl/aux_/msvc_never_true.hpp
new file mode 100644
index 00000000000..2418cdd51c9
--- /dev/null
+++ b/boost/boost/mpl/aux_/msvc_never_true.hpp
@@ -0,0 +1,34 @@
+
+#ifndef BOOST_MPL_AUX_MSVC_NEVER_TRUE_HPP_INCLUDED
+#define BOOST_MPL_AUX_MSVC_NEVER_TRUE_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/msvc_never_true.hpp,v $
+// $Date: 2004/09/02 15:40:43 $
+// $Revision: 1.5 $
+
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+
+namespace boost { namespace mpl { namespace aux {
+
+template< typename T >
+struct msvc_never_true
+{
+ enum { value = false };
+};
+
+}}}
+
+#endif // BOOST_MSVC
+
+#endif // BOOST_MPL_AUX_MSVC_NEVER_TRUE_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/msvc_type.hpp b/boost/boost/mpl/aux_/msvc_type.hpp
new file mode 100644
index 00000000000..126fbddf42b
--- /dev/null
+++ b/boost/boost/mpl/aux_/msvc_type.hpp
@@ -0,0 +1,62 @@
+
+#ifndef BOOST_MPL_AUX_MSVC_TYPE_HPP_INCLUDED
+#define BOOST_MPL_AUX_MSVC_TYPE_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/msvc_type.hpp,v $
+// $Date: 2004/09/02 15:40:43 $
+// $Revision: 1.1 $
+
+#include <boost/mpl/aux_/config/eti.hpp>
+#include <boost/mpl/aux_/is_msvc_eti_arg.hpp>
+
+namespace boost { namespace mpl { namespace aux {
+
+#if defined(BOOST_MPL_CFG_MSVC_70_ETI_BUG)
+
+template< bool > struct msvc_type_impl
+{
+ template< typename T > struct result_
+ {
+ typedef typename T::type type;
+ };
+};
+
+template<> struct msvc_type_impl<true>
+{
+ template< typename T > struct result_
+ {
+ typedef result_ type;
+ };
+};
+
+template< typename T > struct msvc_type
+ : msvc_type_impl< is_msvc_eti_arg<T>::value >
+ ::template result_<T>
+{
+};
+
+#else // BOOST_MPL_CFG_MSVC_70_ETI_BUG
+
+template< typename T > struct msvc_type
+{
+ typedef typename T::type type;
+};
+
+template<> struct msvc_type<int>
+{
+ typedef int type;
+};
+
+#endif
+
+}}}
+
+#endif // BOOST_MPL_AUX_MSVC_TYPE_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/na.hpp b/boost/boost/mpl/aux_/na.hpp
new file mode 100644
index 00000000000..413a1cd0cca
--- /dev/null
+++ b/boost/boost/mpl/aux_/na.hpp
@@ -0,0 +1,95 @@
+
+#ifndef BOOST_MPL_AUX_NA_HPP_INCLUDED
+#define BOOST_MPL_AUX_NA_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/na.hpp,v $
+// $Date: 2004/11/28 01:37:30 $
+// $Revision: 1.6 $
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/aux_/na_fwd.hpp>
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+
+namespace boost { namespace mpl {
+
+template< typename T >
+struct is_na
+ : false_
+{
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ using false_::value;
+#endif
+};
+
+template<>
+struct is_na<na>
+ : true_
+{
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ using true_::value;
+#endif
+};
+
+template< typename T >
+struct is_not_na
+ : true_
+{
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ using true_::value;
+#endif
+};
+
+template<>
+struct is_not_na<na>
+ : false_
+{
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ using false_::value;
+#endif
+};
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+template< typename T, typename U > struct if_na
+{
+ typedef T type;
+};
+
+template< typename U > struct if_na<na,U>
+{
+ typedef U type;
+};
+#else
+template< typename T > struct if_na_impl
+{
+ template< typename U > struct apply
+ {
+ typedef T type;
+ };
+};
+
+template<> struct if_na_impl<na>
+{
+ template< typename U > struct apply
+ {
+ typedef U type;
+ };
+};
+
+template< typename T, typename U > struct if_na
+ : if_na_impl<T>::template apply<U>
+{
+};
+#endif
+
+}}
+
+#endif // BOOST_MPL_AUX_NA_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/na_assert.hpp b/boost/boost/mpl/aux_/na_assert.hpp
new file mode 100644
index 00000000000..6d8c70d7fda
--- /dev/null
+++ b/boost/boost/mpl/aux_/na_assert.hpp
@@ -0,0 +1,34 @@
+
+#ifndef BOOST_MPL_AUX_NA_ASSERT_HPP_INCLUDED
+#define BOOST_MPL_AUX_NA_ASSERT_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/na_assert.hpp,v $
+// $Date: 2005/07/13 13:13:38 $
+// $Revision: 1.6 $
+
+#include <boost/mpl/aux_/na.hpp>
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#if !BOOST_WORKAROUND(_MSC_FULL_VER, <= 140050601) \
+ && !BOOST_WORKAROUND(__EDG_VERSION__, <= 243)
+# include <boost/mpl/assert.hpp>
+# define BOOST_MPL_AUX_ASSERT_NOT_NA(x) \
+ BOOST_MPL_ASSERT_NOT((boost::mpl::is_na<type>)) \
+/**/
+#else
+# include <boost/static_assert.hpp>
+# define BOOST_MPL_AUX_ASSERT_NOT_NA(x) \
+ BOOST_STATIC_ASSERT(!boost::mpl::is_na<x>::value) \
+/**/
+#endif
+
+#endif // BOOST_MPL_AUX_NA_ASSERT_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/na_fwd.hpp b/boost/boost/mpl/aux_/na_fwd.hpp
new file mode 100644
index 00000000000..a82941e8f36
--- /dev/null
+++ b/boost/boost/mpl/aux_/na_fwd.hpp
@@ -0,0 +1,31 @@
+
+#ifndef BOOST_MPL_AUX_NA_FWD_HPP_INCLUDED
+#define BOOST_MPL_AUX_NA_FWD_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/na_fwd.hpp,v $
+// $Date: 2004/11/28 01:37:30 $
+// $Revision: 1.2 $
+
+#include <boost/mpl/aux_/adl_barrier.hpp>
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+
+// n.a. == not available
+struct na
+{
+ typedef na type;
+ enum { value = 0 };
+};
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+BOOST_MPL_AUX_ADL_BARRIER_DECL(na)
+
+#endif // BOOST_MPL_AUX_NA_FWD_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/na_spec.hpp b/boost/boost/mpl/aux_/na_spec.hpp
new file mode 100644
index 00000000000..52c64073894
--- /dev/null
+++ b/boost/boost/mpl/aux_/na_spec.hpp
@@ -0,0 +1,175 @@
+
+#ifndef BOOST_MPL_AUX_NA_SPEC_HPP_INCLUDED
+#define BOOST_MPL_AUX_NA_SPEC_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/na_spec.hpp,v $
+// $Date: 2004/11/28 01:38:15 $
+// $Revision: 1.3 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/lambda_fwd.hpp>
+# include <boost/mpl/int.hpp>
+# include <boost/mpl/bool.hpp>
+# include <boost/mpl/aux_/na.hpp>
+# include <boost/mpl/aux_/arity.hpp>
+# include <boost/mpl/aux_/template_arity_fwd.hpp>
+#endif
+
+#include <boost/mpl/aux_/preprocessor/params.hpp>
+#include <boost/mpl/aux_/preprocessor/enum.hpp>
+#include <boost/mpl/aux_/preprocessor/def_params_tail.hpp>
+#include <boost/mpl/aux_/lambda_arity_param.hpp>
+#include <boost/mpl/aux_/config/dtp.hpp>
+#include <boost/mpl/aux_/config/eti.hpp>
+#include <boost/mpl/aux_/nttp_decl.hpp>
+#include <boost/mpl/aux_/config/ttp.hpp>
+#include <boost/mpl/aux_/config/lambda.hpp>
+#include <boost/mpl/aux_/config/overload_resolution.hpp>
+
+
+#define BOOST_MPL_AUX_NA_PARAMS(i) \
+ BOOST_MPL_PP_ENUM(i, na) \
+/**/
+
+#if defined(BOOST_MPL_CFG_BROKEN_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES)
+# define BOOST_MPL_AUX_NA_SPEC_ARITY(i, name) \
+namespace aux { \
+template< BOOST_MPL_AUX_NTTP_DECL(int, N) > \
+struct arity< \
+ name< BOOST_MPL_AUX_NA_PARAMS(i) > \
+ , N \
+ > \
+ : int_< BOOST_MPL_LIMIT_METAFUNCTION_ARITY > \
+{ \
+}; \
+} \
+/**/
+#else
+# define BOOST_MPL_AUX_NA_SPEC_ARITY(i, name) /**/
+#endif
+
+#define BOOST_MPL_AUX_NA_SPEC_MAIN(i, name) \
+template<> \
+struct name< BOOST_MPL_AUX_NA_PARAMS(i) > \
+{ \
+ template< \
+ BOOST_MPL_PP_PARAMS(i, typename T) \
+ BOOST_MPL_PP_NESTED_DEF_PARAMS_TAIL(i, typename T, na) \
+ > \
+ struct apply \
+ : name< BOOST_MPL_PP_PARAMS(i, T) > \
+ { \
+ }; \
+}; \
+/**/
+
+#if defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT)
+# define BOOST_MPL_AUX_NA_SPEC_LAMBDA(i, name) \
+template<> \
+struct lambda< \
+ name< BOOST_MPL_AUX_NA_PARAMS(i) > \
+ , void_ \
+ , true_ \
+ > \
+{ \
+ typedef false_ is_le; \
+ typedef name< BOOST_MPL_AUX_NA_PARAMS(i) > type; \
+}; \
+template<> \
+struct lambda< \
+ name< BOOST_MPL_AUX_NA_PARAMS(i) > \
+ , void_ \
+ , false_ \
+ > \
+{ \
+ typedef false_ is_le; \
+ typedef name< BOOST_MPL_AUX_NA_PARAMS(i) > type; \
+}; \
+/**/
+#else
+# define BOOST_MPL_AUX_NA_SPEC_LAMBDA(i, name) \
+template< typename Tag > \
+struct lambda< \
+ name< BOOST_MPL_AUX_NA_PARAMS(i) > \
+ , Tag \
+ BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(int_<-1>) \
+ > \
+{ \
+ typedef false_ is_le; \
+ typedef name< BOOST_MPL_AUX_NA_PARAMS(i) > result_; \
+ typedef name< BOOST_MPL_AUX_NA_PARAMS(i) > type; \
+}; \
+/**/
+#endif
+
+#if defined(BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING) \
+ || defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT) \
+ && defined(BOOST_MPL_CFG_BROKEN_OVERLOAD_RESOLUTION)
+# define BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(i, j, name) \
+namespace aux { \
+template< BOOST_MPL_PP_PARAMS(j, typename T) > \
+struct template_arity< \
+ name< BOOST_MPL_PP_PARAMS(j, T) > \
+ > \
+ : int_<j> \
+{ \
+}; \
+\
+template<> \
+struct template_arity< \
+ name< BOOST_MPL_PP_ENUM(i, na) > \
+ > \
+ : int_<-1> \
+{ \
+}; \
+} \
+/**/
+#else
+# define BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(i, j, name) /**/
+#endif
+
+#if defined(BOOST_MPL_CFG_MSVC_ETI_BUG)
+# define BOOST_MPL_AUX_NA_SPEC_ETI(i, name) \
+template<> \
+struct name< BOOST_MPL_PP_ENUM(i, int) > \
+{ \
+ typedef int type; \
+ enum { value = 0 }; \
+}; \
+/**/
+#else
+# define BOOST_MPL_AUX_NA_SPEC_ETI(i, name) /**/
+#endif
+
+#define BOOST_MPL_AUX_NA_PARAM(param) param = na
+
+#define BOOST_MPL_AUX_NA_SPEC_NO_ETI(i, name) \
+BOOST_MPL_AUX_NA_SPEC_MAIN(i, name) \
+BOOST_MPL_AUX_NA_SPEC_LAMBDA(i, name) \
+BOOST_MPL_AUX_NA_SPEC_ARITY(i, name) \
+BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(i, i, name) \
+/**/
+
+#define BOOST_MPL_AUX_NA_SPEC(i, name) \
+BOOST_MPL_AUX_NA_SPEC_NO_ETI(i, name) \
+BOOST_MPL_AUX_NA_SPEC_ETI(i, name) \
+/**/
+
+#define BOOST_MPL_AUX_NA_SPEC2(i, j, name) \
+BOOST_MPL_AUX_NA_SPEC_MAIN(i, name) \
+BOOST_MPL_AUX_NA_SPEC_ETI(i, name) \
+BOOST_MPL_AUX_NA_SPEC_LAMBDA(i, name) \
+BOOST_MPL_AUX_NA_SPEC_ARITY(i, name) \
+BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(i, j, name) \
+/**/
+
+
+#endif // BOOST_MPL_AUX_NA_SPEC_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/nested_type_wknd.hpp b/boost/boost/mpl/aux_/nested_type_wknd.hpp
new file mode 100644
index 00000000000..0b8c02e4587
--- /dev/null
+++ b/boost/boost/mpl/aux_/nested_type_wknd.hpp
@@ -0,0 +1,48 @@
+
+#ifndef BOOST_MPL_AUX_NESTED_TYPE_WKND_HPP_INCLUDED
+#define BOOST_MPL_AUX_NESTED_TYPE_WKND_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/nested_type_wknd.hpp,v $
+// $Date: 2004/09/28 13:56:59 $
+// $Revision: 1.7 $
+
+#include <boost/mpl/aux_/config/gcc.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#if BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, BOOST_TESTED_AT(0x0302)) \
+ || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x561)) \
+ || BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x530)) \
+ || BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))
+
+namespace boost { namespace mpl { namespace aux {
+template< typename T > struct nested_type_wknd
+ : T::type
+{
+};
+}}}
+
+#if BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))
+# define BOOST_MPL_AUX_NESTED_TYPE_WKND(T) \
+ aux::nested_type_wknd<T> \
+/**/
+#else
+# define BOOST_MPL_AUX_NESTED_TYPE_WKND(T) \
+ ::boost::mpl::aux::nested_type_wknd<T> \
+/**/
+#endif
+
+#else // !BOOST_MPL_CFG_GCC et al.
+
+# define BOOST_MPL_AUX_NESTED_TYPE_WKND(T) T::type
+
+#endif
+
+#endif // BOOST_MPL_AUX_NESTED_TYPE_WKND_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/nttp_decl.hpp b/boost/boost/mpl/aux_/nttp_decl.hpp
new file mode 100644
index 00000000000..5fba8a8a9c0
--- /dev/null
+++ b/boost/boost/mpl/aux_/nttp_decl.hpp
@@ -0,0 +1,35 @@
+
+#ifndef BOOST_MPL_AUX_NTTP_DECL_HPP_INCLUDED
+#define BOOST_MPL_AUX_NTTP_DECL_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/nttp_decl.hpp,v $
+// $Date: 2004/12/16 22:43:05 $
+// $Revision: 1.2 $
+
+#include <boost/mpl/aux_/config/nttp.hpp>
+
+#if defined(BOOST_MPL_CFG_NTTP_BUG)
+
+typedef bool _mpl_nttp_bool;
+typedef int _mpl_nttp_int;
+typedef unsigned _mpl_nttp_unsigned;
+typedef long _mpl_nttp_long;
+
+# include <boost/preprocessor/cat.hpp>
+# define BOOST_MPL_AUX_NTTP_DECL(T, x) BOOST_PP_CAT(_mpl_nttp_,T) x /**/
+
+#else
+
+# define BOOST_MPL_AUX_NTTP_DECL(T, x) T x /**/
+
+#endif
+
+#endif // BOOST_MPL_AUX_NTTP_DECL_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/numeric_cast_utils.hpp b/boost/boost/mpl/aux_/numeric_cast_utils.hpp
new file mode 100644
index 00000000000..4afb11b24f2
--- /dev/null
+++ b/boost/boost/mpl/aux_/numeric_cast_utils.hpp
@@ -0,0 +1,77 @@
+
+#ifndef BOOST_MPL_AUX_NUMERIC_CAST_HPP_INCLUDED
+#define BOOST_MPL_AUX_NUMERIC_CAST_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/numeric_cast_utils.hpp,v $
+// $Date: 2004/11/28 01:39:23 $
+// $Revision: 1.2 $
+
+#include <boost/mpl/numeric_cast.hpp>
+#include <boost/mpl/apply_wrap.hpp>
+#include <boost/mpl/aux_/config/forwarding.hpp>
+
+namespace boost { namespace mpl { namespace aux {
+
+template<
+ typename F
+ , typename Tag1
+ , typename Tag2
+ >
+struct cast1st_impl
+{
+ template< typename N1, typename N2 > struct apply
+#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)
+ : apply_wrap2<
+ F
+ , typename apply_wrap1< BOOST_MPL_AUX_NUMERIC_CAST<Tag1,Tag2>,N1 >::type
+ , N2
+ >
+ {
+#else
+ {
+ typedef typename apply_wrap2<
+ F
+ , typename apply_wrap1< BOOST_MPL_AUX_NUMERIC_CAST<Tag1,Tag2>,N1 >::type
+ , N2
+ >::type type;
+#endif
+ };
+};
+
+template<
+ typename F
+ , typename Tag1
+ , typename Tag2
+ >
+struct cast2nd_impl
+{
+ template< typename N1, typename N2 > struct apply
+#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)
+ : apply_wrap2<
+ F
+ , N1
+ , typename apply_wrap1< BOOST_MPL_AUX_NUMERIC_CAST<Tag2,Tag1>,N2 >::type
+ >
+ {
+#else
+ {
+ typedef typename apply_wrap2<
+ F
+ , N1
+ , typename apply_wrap1< BOOST_MPL_AUX_NUMERIC_CAST<Tag2,Tag1>,N2 >::type
+ >::type type;
+#endif
+ };
+};
+
+}}}
+
+#endif // BOOST_MPL_AUX_NUMERIC_CAST_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/numeric_op.hpp b/boost/boost/mpl/aux_/numeric_op.hpp
new file mode 100644
index 00000000000..65eadb49bdd
--- /dev/null
+++ b/boost/boost/mpl/aux_/numeric_op.hpp
@@ -0,0 +1,311 @@
+
+#if !defined(BOOST_PP_IS_ITERATING)
+
+///// header body
+
+// 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/numeric_op.hpp,v $
+// $Date: 2005/08/25 16:27:21 $
+// $Revision: 1.10 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/numeric_cast.hpp>
+# include <boost/mpl/apply_wrap.hpp>
+# include <boost/mpl/if.hpp>
+# include <boost/mpl/tag.hpp>
+# include <boost/mpl/aux_/numeric_cast_utils.hpp>
+# include <boost/mpl/aux_/na.hpp>
+# include <boost/mpl/aux_/na_spec.hpp>
+# include <boost/mpl/aux_/lambda_support.hpp>
+# include <boost/mpl/aux_/msvc_eti_base.hpp>
+# include <boost/mpl/aux_/value_wknd.hpp>
+# include <boost/mpl/aux_/config/eti.hpp>
+# include <boost/mpl/aux_/nttp_decl.hpp>
+#endif
+
+#include <boost/mpl/aux_/config/static_constant.hpp>
+
+#if defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+ || defined(BOOST_MPL_PREPROCESSING_MODE)
+
+# include <boost/mpl/limits/arity.hpp>
+# include <boost/mpl/aux_/preprocessor/partial_spec_params.hpp>
+# include <boost/mpl/aux_/preprocessor/def_params_tail.hpp>
+# include <boost/mpl/aux_/preprocessor/repeat.hpp>
+# include <boost/mpl/aux_/preprocessor/ext_params.hpp>
+# include <boost/mpl/aux_/preprocessor/params.hpp>
+# include <boost/mpl/aux_/preprocessor/enum.hpp>
+# include <boost/mpl/aux_/preprocessor/add.hpp>
+# include <boost/mpl/aux_/preprocessor/sub.hpp>
+# include <boost/mpl/aux_/config/ctps.hpp>
+# include <boost/mpl/aux_/config/eti.hpp>
+# include <boost/mpl/aux_/config/msvc.hpp>
+# include <boost/mpl/aux_/config/workaround.hpp>
+
+# include <boost/preprocessor/dec.hpp>
+# include <boost/preprocessor/inc.hpp>
+# include <boost/preprocessor/iterate.hpp>
+# include <boost/preprocessor/cat.hpp>
+
+
+#if !defined(AUX778076_OP_ARITY)
+# define AUX778076_OP_ARITY BOOST_MPL_LIMIT_METAFUNCTION_ARITY
+#endif
+
+#if !defined(AUX778076_OP_IMPL_NAME)
+# define AUX778076_OP_IMPL_NAME BOOST_PP_CAT(AUX778076_OP_PREFIX,_impl)
+#endif
+
+#if !defined(AUX778076_OP_TAG_NAME)
+# define AUX778076_OP_TAG_NAME BOOST_PP_CAT(AUX778076_OP_PREFIX,_tag)
+#endif
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+ >
+struct AUX778076_OP_IMPL_NAME
+ : if_c<
+ ( tag1_ > tag2_ )
+#else
+ >
+struct AUX778076_OP_IMPL_NAME
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+#endif
+ , aux::cast2nd_impl< AUX778076_OP_IMPL_NAME<Tag1,Tag1>,Tag1,Tag2 >
+ , aux::cast1st_impl< AUX778076_OP_IMPL_NAME<Tag2,Tag2>,Tag1,Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct AUX778076_OP_IMPL_NAME<na,na>
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+template< typename Tag > struct AUX778076_OP_IMPL_NAME<na,Tag>
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct AUX778076_OP_IMPL_NAME<Tag,na>
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+#else
+template<> struct AUX778076_OP_IMPL_NAME<na,integral_c_tag>
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct AUX778076_OP_IMPL_NAME<integral_c_tag,na>
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+#endif
+
+
+#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
+ && BOOST_WORKAROUND(BOOST_MSVC, >= 1300)
+template< typename T > struct AUX778076_OP_TAG_NAME
+ : tag<T,na>
+{
+};
+#else
+template< typename T > struct AUX778076_OP_TAG_NAME
+{
+ typedef typename T::tag type;
+};
+#endif
+
+
+#if AUX778076_OP_ARITY != 2
+
+# if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+# define AUX778076_OP_RIGHT_OPERAND(unused, i, N) , BOOST_PP_CAT(N, BOOST_MPL_PP_ADD(i, 2))>
+# define AUX778076_OP_N_CALLS(i, N) \
+ BOOST_MPL_PP_REPEAT( BOOST_PP_DEC(i), BOOST_MPL_PP_REPEAT_IDENTITY_FUNC, AUX778076_OP_NAME< ) \
+ N1 BOOST_MPL_PP_REPEAT( BOOST_MPL_PP_SUB(i, 1), AUX778076_OP_RIGHT_OPERAND, N ) \
+/**/
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ BOOST_MPL_PP_DEF_PARAMS_TAIL(2, typename N, na)
+ >
+struct AUX778076_OP_NAME
+ : AUX778076_OP_N_CALLS(AUX778076_OP_ARITY, N)
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ AUX778076_OP_ARITY
+ , AUX778076_OP_NAME
+ , ( BOOST_MPL_PP_PARAMS(AUX778076_OP_ARITY, N) )
+ )
+};
+
+#define BOOST_PP_ITERATION_PARAMS_1 \
+ (3,( BOOST_PP_DEC(AUX778076_OP_ARITY), 2, <boost/mpl/aux_/numeric_op.hpp> ))
+#include BOOST_PP_ITERATE()
+
+# undef AUX778076_OP_N_CALLS
+# undef AUX778076_OP_RIGHT_OPERAND
+
+# else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+/// forward declaration
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct BOOST_PP_CAT(AUX778076_OP_NAME,2);
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ BOOST_MPL_PP_DEF_PARAMS_TAIL(2, typename N, na)
+ >
+struct AUX778076_OP_NAME
+#if BOOST_WORKAROUND(BOOST_MSVC, == 1300)
+ : aux::msvc_eti_base< typename if_<
+#else
+ : if_<
+#endif
+ is_na<N3>
+ , BOOST_PP_CAT(AUX778076_OP_NAME,2)<N1,N2>
+ , AUX778076_OP_NAME<
+ BOOST_PP_CAT(AUX778076_OP_NAME,2)<N1,N2>
+ , BOOST_MPL_PP_EXT_PARAMS(3, BOOST_PP_INC(AUX778076_OP_ARITY), N)
+ >
+ >::type
+#if BOOST_WORKAROUND(BOOST_MSVC, == 1300)
+ >
+#endif
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ AUX778076_OP_ARITY
+ , AUX778076_OP_NAME
+ , ( BOOST_MPL_PP_PARAMS(AUX778076_OP_ARITY, N) )
+ )
+};
+
+template<
+ typename N1
+ , typename N2
+ >
+struct BOOST_PP_CAT(AUX778076_OP_NAME,2)
+
+#endif
+
+#else // AUX778076_OP_ARITY == 2
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct AUX778076_OP_NAME
+
+#endif
+
+#if !defined(BOOST_MPL_CFG_MSVC_ETI_BUG)
+ : AUX778076_OP_IMPL_NAME<
+ typename AUX778076_OP_TAG_NAME<N1>::type
+ , typename AUX778076_OP_TAG_NAME<N2>::type
+ >::template apply<N1,N2>::type
+#else
+ : aux::msvc_eti_base< typename apply_wrap2<
+ AUX778076_OP_IMPL_NAME<
+ typename AUX778076_OP_TAG_NAME<N1>::type
+ , typename AUX778076_OP_TAG_NAME<N2>::type
+ >
+ , N1
+ , N2
+ >::type >::type
+#endif
+{
+#if AUX778076_OP_ARITY != 2
+
+# if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ AUX778076_OP_ARITY
+ , AUX778076_OP_NAME
+ , ( BOOST_MPL_PP_PARTIAL_SPEC_PARAMS(2, N, na) )
+ )
+# else
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, BOOST_PP_CAT(AUX778076_OP_NAME,2), (N1, N2))
+# endif
+
+#else
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, AUX778076_OP_NAME, (N1, N2))
+#endif
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, AUX778076_OP_ARITY, AUX778076_OP_NAME)
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+///// iteration, depth == 1
+
+#elif BOOST_PP_ITERATION_DEPTH() == 1
+
+# define i_ BOOST_PP_FRAME_ITERATION(1)
+
+template<
+ BOOST_MPL_PP_PARAMS(i_, typename N)
+ >
+struct AUX778076_OP_NAME<BOOST_MPL_PP_PARTIAL_SPEC_PARAMS(i_, N, na)>
+#if i_ != 2
+ : AUX778076_OP_N_CALLS(i_, N)
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ AUX778076_OP_ARITY
+ , AUX778076_OP_NAME
+ , ( BOOST_MPL_PP_PARTIAL_SPEC_PARAMS(i_, N, na) )
+ )
+};
+#endif
+
+# undef i_
+
+#endif // BOOST_PP_IS_ITERATING
diff --git a/boost/boost/mpl/aux_/order_impl.hpp b/boost/boost/mpl/aux_/order_impl.hpp
new file mode 100644
index 00000000000..4a5bc9a7a45
--- /dev/null
+++ b/boost/boost/mpl/aux_/order_impl.hpp
@@ -0,0 +1,76 @@
+
+#ifndef BOOST_MPL_AUX_ORDER_IMPL_HPP_INCLUDED
+#define BOOST_MPL_AUX_ORDER_IMPL_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/order_impl.hpp,v $
+// $Date: 2004/10/13 18:23:20 $
+// $Revision: 1.5 $
+
+#include <boost/mpl/order_fwd.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/long.hpp>
+#include <boost/mpl/has_key.hpp>
+#include <boost/mpl/aux_/overload_names.hpp>
+#include <boost/mpl/aux_/static_cast.hpp>
+#include <boost/mpl/aux_/type_wrapper.hpp>
+#include <boost/mpl/aux_/traits_lambda_spec.hpp>
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/static_constant.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+namespace boost { namespace mpl {
+
+// default implementation; requires 'Seq' to provide corresponding overloads
+// of BOOST_MPL_AUX_OVERLOAD_ORDER_BY_KEY
+
+template< typename Seq, typename Key > struct x_order_impl
+#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) \
+ || BOOST_WORKAROUND(__EDG_VERSION__, <= 245)
+{
+ BOOST_STATIC_CONSTANT(long, value =
+ sizeof( BOOST_MPL_AUX_OVERLOAD_CALL_ORDER_BY_KEY(
+ Seq
+ , BOOST_MPL_AUX_STATIC_CAST(aux::type_wrapper<Key>*, 0)
+ ) )
+ );
+
+ typedef long_<value> type;
+
+#else // ISO98 C++
+ : long_<
+ sizeof( BOOST_MPL_AUX_OVERLOAD_CALL_ORDER_BY_KEY(
+ Seq
+ , BOOST_MPL_AUX_STATIC_CAST(aux::type_wrapper<Key>*, 0)
+ ) )
+ >
+{
+#endif
+};
+
+template< typename Tag >
+struct order_impl
+{
+ template< typename Seq, typename Key > struct apply
+ : if_<
+ typename has_key_impl<Tag>::template apply<Seq,Key>
+ , x_order_impl<Seq,Key>
+ , void_
+ >::type
+ {
+ };
+};
+
+BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(2,order_impl)
+
+}}
+
+#endif // BOOST_MPL_AUX_ORDER_IMPL_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/overload_names.hpp b/boost/boost/mpl/aux_/overload_names.hpp
new file mode 100644
index 00000000000..09593f673cf
--- /dev/null
+++ b/boost/boost/mpl/aux_/overload_names.hpp
@@ -0,0 +1,48 @@
+
+#ifndef BOOST_MPL_AUX_OVERLOAD_NAMES_HPP_INCLUDED
+#define BOOST_MPL_AUX_OVERLOAD_NAMES_HPP_INCLUDED
+
+// 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/overload_names.hpp,v $
+// $Date: 2004/10/13 18:23:20 $
+// $Revision: 1.2 $
+
+#include <boost/mpl/aux_/ptr_to_ref.hpp>
+#include <boost/mpl/aux_/config/operators.hpp>
+
+#if defined(BOOST_MPL_CFG_USE_OPERATORS_OVERLOADING)
+
+# include <boost/mpl/aux_/static_cast.hpp>
+
+# define BOOST_MPL_AUX_OVERLOAD_VALUE_BY_KEY operator/
+# define BOOST_MPL_AUX_OVERLOAD_ITEM_BY_ORDER operator|
+# define BOOST_MPL_AUX_OVERLOAD_ORDER_BY_KEY operator||
+# define BOOST_MPL_AUX_OVERLOAD_IS_MASKED operator%
+
+# define BOOST_MPL_AUX_OVERLOAD_CALL_VALUE_BY_KEY(T, x) BOOST_MPL_AUX_PTR_TO_REF(T) / x
+# define BOOST_MPL_AUX_OVERLOAD_CALL_ITEM_BY_ORDER(T, x) BOOST_MPL_AUX_PTR_TO_REF(T) | x
+# define BOOST_MPL_AUX_OVERLOAD_CALL_ORDER_BY_KEY(T, x) BOOST_MPL_AUX_PTR_TO_REF(T) || x
+# define BOOST_MPL_AUX_OVERLOAD_CALL_IS_MASKED(T, x) BOOST_MPL_AUX_PTR_TO_REF(T) % x
+
+#else
+
+# define BOOST_MPL_AUX_OVERLOAD_VALUE_BY_KEY value_by_key_
+# define BOOST_MPL_AUX_OVERLOAD_ITEM_BY_ORDER item_by_order_
+# define BOOST_MPL_AUX_OVERLOAD_ORDER_BY_KEY order_by_key_
+# define BOOST_MPL_AUX_OVERLOAD_IS_MASKED is_masked_
+
+# define BOOST_MPL_AUX_OVERLOAD_CALL_VALUE_BY_KEY(T, x) T::BOOST_MPL_AUX_OVERLOAD_VALUE_BY_KEY( BOOST_MPL_AUX_PTR_TO_REF(T), x )
+# define BOOST_MPL_AUX_OVERLOAD_CALL_ITEM_BY_ORDER(T, x) T::BOOST_MPL_AUX_OVERLOAD_ITEM_BY_ORDER( BOOST_MPL_AUX_PTR_TO_REF(T), x )
+# define BOOST_MPL_AUX_OVERLOAD_CALL_ORDER_BY_KEY(T, x) T::BOOST_MPL_AUX_OVERLOAD_ORDER_BY_KEY( BOOST_MPL_AUX_PTR_TO_REF(T), x )
+# define BOOST_MPL_AUX_OVERLOAD_CALL_IS_MASKED(T, x) T::BOOST_MPL_AUX_OVERLOAD_IS_MASKED( BOOST_MPL_AUX_PTR_TO_REF(T), x )
+
+#endif
+
+#endif // BOOST_MPL_AUX_OVERLOAD_NAMES_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/partition_op.hpp b/boost/boost/mpl/aux_/partition_op.hpp
new file mode 100644
index 00000000000..63233aea50c
--- /dev/null
+++ b/boost/boost/mpl/aux_/partition_op.hpp
@@ -0,0 +1,58 @@
+
+#ifndef BOOST_MPL_AUX_PARTITION_OP_HPP_INCLUDED
+#define BOOST_MPL_AUX_PARTITION_OP_HPP_INCLUDED
+
+// Copyright Eric Friedman 2003
+// 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/partition_op.hpp,v $
+// $Date: 2004/11/28 01:46:37 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/apply.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/pair.hpp>
+#include <boost/mpl/aux_/lambda_spec.hpp>
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template< typename Pred, typename In1Op, typename In2Op >
+struct partition_op
+{
+ template< typename State, typename T >
+ struct apply
+ {
+ typedef typename State::first first_;
+ typedef typename State::second second_;
+ typedef typename apply1< Pred,T >::type pred_;
+
+ typedef typename eval_if<
+ pred_
+ , apply2<In1Op,first_,T>
+ , apply2<In2Op,second_,T>
+ >::type result_;
+
+ typedef typename if_<
+ pred_
+ , pair< result_,second_ >
+ , pair< first_,result_ >
+ >::type type;
+ };
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(3, aux::partition_op)
+
+}}
+
+#endif // BOOST_MPL_AUX_PARTITION_OP_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/pop_back_impl.hpp b/boost/boost/mpl/aux_/pop_back_impl.hpp
new file mode 100644
index 00000000000..dfe0c916dcf
--- /dev/null
+++ b/boost/boost/mpl/aux_/pop_back_impl.hpp
@@ -0,0 +1,34 @@
+
+#ifndef BOOST_MPL_AUX_POP_BACK_IMPL_HPP_INCLUDED
+#define BOOST_MPL_AUX_POP_BACK_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/pop_back_impl.hpp,v $
+// $Date: 2004/09/02 15:40:44 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/pop_back_fwd.hpp>
+#include <boost/mpl/aux_/traits_lambda_spec.hpp>
+
+namespace boost { namespace mpl {
+
+// no default implementation; the definition is needed to make MSVC happy
+
+template< typename Tag >
+struct pop_back_impl
+{
+ template< typename Sequence > struct apply;
+};
+
+BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(1, pop_back_impl)
+
+}}
+
+#endif // BOOST_MPL_AUX_POP_BACK_IMPL_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/pop_front_impl.hpp b/boost/boost/mpl/aux_/pop_front_impl.hpp
new file mode 100644
index 00000000000..d80e2d1507a
--- /dev/null
+++ b/boost/boost/mpl/aux_/pop_front_impl.hpp
@@ -0,0 +1,44 @@
+
+#ifndef BOOST_MPL_AUX_POP_FRONT_IMPL_HPP_INCLUDED
+#define BOOST_MPL_AUX_POP_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/pop_front_impl.hpp,v $
+// $Date: 2004/09/02 15:40:44 $
+// $Revision: 1.5 $
+
+#include <boost/mpl/pop_front_fwd.hpp>
+#include <boost/mpl/aux_/traits_lambda_spec.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+#include <boost/mpl/aux_/config/msvc.hpp>
+
+namespace boost { namespace mpl {
+
+// no default implementation; the definition is needed to make MSVC happy
+
+template< typename Tag >
+struct pop_front_impl
+{
+ template< typename Sequence > struct apply
+ // conservatively placed, but maybe should go outside surrounding
+ // braces.
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+ {
+ typedef int type;
+ }
+#endif
+ ;
+};
+
+BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(1, pop_front_impl)
+
+}}
+
+#endif // BOOST_MPL_AUX_POP_FRONT_IMPL_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc/advance_backward.hpp b/boost/boost/mpl/aux_/preprocessed/bcc/advance_backward.hpp
new file mode 100644
index 00000000000..26de94cea1a
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc/advance_backward.hpp
@@ -0,0 +1,97 @@
+
+// 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/aux_/advance_backward.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+template< long N > struct advance_backward;
+template<>
+struct advance_backward<0>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef iter0 type;
+ };
+};
+
+template<>
+struct advance_backward<1>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename prior<iter0>::type iter1;
+ typedef iter1 type;
+ };
+};
+
+template<>
+struct advance_backward<2>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename prior<iter0>::type iter1;
+ typedef typename prior<iter1>::type iter2;
+ typedef iter2 type;
+ };
+};
+
+template<>
+struct advance_backward<3>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename prior<iter0>::type iter1;
+ typedef typename prior<iter1>::type iter2;
+ typedef typename prior<iter2>::type iter3;
+ typedef iter3 type;
+ };
+};
+
+template<>
+struct advance_backward<4>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename prior<iter0>::type iter1;
+ typedef typename prior<iter1>::type iter2;
+ typedef typename prior<iter2>::type iter3;
+ typedef typename prior<iter3>::type iter4;
+ typedef iter4 type;
+ };
+};
+
+template< long N >
+struct advance_backward
+{
+ template< typename Iterator > struct apply
+ {
+ typedef typename apply_wrap1<
+ advance_backward<4>
+ , Iterator
+ >::type chunk_result_;
+
+ typedef typename apply_wrap1<
+ advance_backward<(
+ (N - 4) < 0
+ ? 0
+ : N - 4
+ )>
+ , chunk_result_
+ >::type type;
+ };
+};
+
+}}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc/advance_forward.hpp b/boost/boost/mpl/aux_/preprocessed/bcc/advance_forward.hpp
new file mode 100644
index 00000000000..b137cc72af1
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc/advance_forward.hpp
@@ -0,0 +1,97 @@
+
+// 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/aux_/advance_forward.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+template< long N > struct advance_forward;
+template<>
+struct advance_forward<0>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef iter0 type;
+ };
+};
+
+template<>
+struct advance_forward<1>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename next<iter0>::type iter1;
+ typedef iter1 type;
+ };
+};
+
+template<>
+struct advance_forward<2>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename next<iter0>::type iter1;
+ typedef typename next<iter1>::type iter2;
+ typedef iter2 type;
+ };
+};
+
+template<>
+struct advance_forward<3>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename next<iter0>::type iter1;
+ typedef typename next<iter1>::type iter2;
+ typedef typename next<iter2>::type iter3;
+ typedef iter3 type;
+ };
+};
+
+template<>
+struct advance_forward<4>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename next<iter0>::type iter1;
+ typedef typename next<iter1>::type iter2;
+ typedef typename next<iter2>::type iter3;
+ typedef typename next<iter3>::type iter4;
+ typedef iter4 type;
+ };
+};
+
+template< long N >
+struct advance_forward
+{
+ template< typename Iterator > struct apply
+ {
+ typedef typename apply_wrap1<
+ advance_forward<4>
+ , Iterator
+ >::type chunk_result_;
+
+ typedef typename apply_wrap1<
+ advance_forward<(
+ (N - 4) < 0
+ ? 0
+ : N - 4
+ )>
+ , chunk_result_
+ >::type type;
+ };
+};
+
+}}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc/and.hpp b/boost/boost/mpl/aux_/preprocessed/bcc/and.hpp
new file mode 100644
index 00000000000..010ad1fc849
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc/and.hpp
@@ -0,0 +1,69 @@
+
+// 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/and.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template< bool C_, typename T1, typename T2, typename T3, typename T4 >
+struct and_impl
+ : false_
+{
+};
+
+template< typename T1, typename T2, typename T3, typename T4 >
+struct and_impl< true,T1,T2,T3,T4 >
+ : and_impl<
+ BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+ , T2, T3, T4
+ , true_
+ >
+{
+};
+
+template<>
+struct and_impl<
+ true
+ , true_, true_, true_, true_
+ >
+ : true_
+{
+};
+
+} // namespace aux
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(T1)
+ , typename BOOST_MPL_AUX_NA_PARAM(T2)
+ , typename T3 = true_, typename T4 = true_, typename T5 = true_
+ >
+struct and_
+
+ : aux::and_impl<
+ BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+ , T2, T3, T4, T5
+ >
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , and_
+ , ( T1, T2, T3, T4, T5)
+ )
+};
+
+BOOST_MPL_AUX_NA_SPEC2(
+ 2
+ , 5
+ , and_
+ )
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc/apply.hpp b/boost/boost/mpl/aux_/preprocessed/bcc/apply.hpp
new file mode 100644
index 00000000000..e08eaccf03a
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc/apply.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/apply.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename F
+ >
+struct apply0
+
+ : apply_wrap0<
+ typename lambda<F>::type
+
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 1
+ , apply0
+ , (F )
+ )
+};
+
+template<
+ typename F
+ >
+struct apply< F,na,na,na,na,na >
+ : apply0<F>
+{
+};
+
+template<
+ typename F, typename T1
+ >
+struct apply1
+
+ : apply_wrap1<
+ typename lambda<F>::type
+ , T1
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 2
+ , apply1
+ , (F, T1)
+ )
+};
+
+template<
+ typename F, typename T1
+ >
+struct apply< F,T1,na,na,na,na >
+ : apply1< F,T1 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct apply2
+
+ : apply_wrap2<
+ typename lambda<F>::type
+ , T1, T2
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 3
+ , apply2
+ , (F, T1, T2)
+ )
+};
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct apply< F,T1,T2,na,na,na >
+ : apply2< F,T1,T2 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct apply3
+
+ : apply_wrap3<
+ typename lambda<F>::type
+ , T1, T2, T3
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 4
+ , apply3
+ , (F, T1, T2, T3)
+ )
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct apply< F,T1,T2,T3,na,na >
+ : apply3< F,T1,T2,T3 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct apply4
+
+ : apply_wrap4<
+ typename lambda<F>::type
+ , T1, T2, T3, T4
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , apply4
+ , (F, T1, T2, T3, T4)
+ )
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct apply< F,T1,T2,T3,T4,na >
+ : apply4< F,T1,T2,T3,T4 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct apply5
+
+ : apply_wrap5<
+ typename lambda<F>::type
+ , T1, T2, T3, T4, T5
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 6
+ , apply5
+ , (F, T1, T2, T3, T4, T5)
+ )
+};
+
+/// primary template (not a specialization!)
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct apply
+ : apply5< F,T1,T2,T3,T4,T5 >
+{
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc/apply_fwd.hpp b/boost/boost/mpl/aux_/preprocessed/bcc/apply_fwd.hpp
new file mode 100644
index 00000000000..b2ed5d51301
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc/apply_fwd.hpp
@@ -0,0 +1,52 @@
+
+// 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/apply_fwd.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename F, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na
+ >
+struct apply;
+
+template<
+ typename F
+ >
+struct apply0;
+
+template<
+ typename F, typename T1
+ >
+struct apply1;
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct apply2;
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct apply3;
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct apply4;
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct apply5;
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc/apply_wrap.hpp b/boost/boost/mpl/aux_/preprocessed/bcc/apply_wrap.hpp
new file mode 100644
index 00000000000..2ffe7091bc3
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc/apply_wrap.hpp
@@ -0,0 +1,456 @@
+
+// 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/apply_wrap.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ int N, typename F
+ >
+struct apply_wrap_impl0;
+
+template<
+ typename F
+ >
+struct apply_wrap_impl0<
+ 0
+ , F
+
+ >
+{
+ typedef typename F::template apply<
+
+/// since the defaults are "lost", we have to pass *something* even for nullary
+/// metafunction classes
+ na
+ > type;
+};
+
+template<
+ typename F
+ >
+struct apply_wrap_impl0<
+ 1
+ , F
+
+ >
+{
+ typedef typename F::template apply<
+
+ na
+ > type;
+};
+
+template<
+ typename F
+ >
+struct apply_wrap_impl0<
+ 2
+ , F
+
+ >
+{
+ typedef typename F::template apply<
+
+ na, na
+
+ > type;
+};
+
+template<
+ typename F
+ >
+struct apply_wrap_impl0<
+ 3
+ , F
+
+ >
+{
+ typedef typename F::template apply<
+
+ na, na, na
+
+ > type;
+};
+
+template<
+ typename F
+ >
+struct apply_wrap_impl0<
+ 4
+ , F
+
+ >
+{
+ typedef typename F::template apply<
+
+ na, na, na, na
+
+ > type;
+};
+
+template<
+ typename F
+ >
+struct apply_wrap_impl0<
+ 5
+ , F
+
+ >
+{
+ typedef typename F::template apply<
+
+ na, na, na, na, na
+
+ > type;
+};
+
+template<
+ typename F
+ >
+struct apply_wrap0
+ : apply_wrap_impl0<
+ ::boost::mpl::aux::arity< F,0 >::value
+ , F
+
+ >::type
+{
+};
+
+template<
+ int N, typename F, typename T1
+ >
+struct apply_wrap_impl1;
+
+template<
+ typename F, typename T1
+ >
+struct apply_wrap_impl1<
+ 1
+ , F
+ , T1
+ >
+{
+ typedef typename F::template apply<
+ T1
+ > type;
+};
+
+template<
+ typename F, typename T1
+ >
+struct apply_wrap_impl1<
+ 2
+ , F
+ , T1
+ >
+{
+ typedef typename F::template apply<
+ T1
+ , na
+
+ > type;
+};
+
+template<
+ typename F, typename T1
+ >
+struct apply_wrap_impl1<
+ 3
+ , F
+ , T1
+ >
+{
+ typedef typename F::template apply<
+ T1
+ , na, na
+
+ > type;
+};
+
+template<
+ typename F, typename T1
+ >
+struct apply_wrap_impl1<
+ 4
+ , F
+ , T1
+ >
+{
+ typedef typename F::template apply<
+ T1
+ , na, na, na
+
+ > type;
+};
+
+template<
+ typename F, typename T1
+ >
+struct apply_wrap_impl1<
+ 5
+ , F
+ , T1
+ >
+{
+ typedef typename F::template apply<
+ T1
+ , na, na, na, na
+
+ > type;
+};
+
+template<
+ typename F, typename T1
+ >
+struct apply_wrap1
+ : apply_wrap_impl1<
+ ::boost::mpl::aux::arity< F,1 >::value
+ , F
+ , T1
+ >::type
+{
+};
+
+template<
+ int N, typename F, typename T1, typename T2
+ >
+struct apply_wrap_impl2;
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct apply_wrap_impl2<
+ 2
+ , F
+ , T1, T2
+ >
+{
+ typedef typename F::template apply<
+ T1, T2
+
+ > type;
+};
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct apply_wrap_impl2<
+ 3
+ , F
+ , T1, T2
+ >
+{
+ typedef typename F::template apply<
+ T1, T2
+
+ , na
+
+ > type;
+};
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct apply_wrap_impl2<
+ 4
+ , F
+ , T1, T2
+ >
+{
+ typedef typename F::template apply<
+ T1, T2
+
+ , na, na
+
+ > type;
+};
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct apply_wrap_impl2<
+ 5
+ , F
+ , T1, T2
+ >
+{
+ typedef typename F::template apply<
+ T1, T2
+
+ , na, na, na
+
+ > type;
+};
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct apply_wrap2
+ : apply_wrap_impl2<
+ ::boost::mpl::aux::arity< F,2 >::value
+ , F
+ , T1, T2
+ >::type
+{
+};
+
+template<
+ int N, typename F, typename T1, typename T2, typename T3
+ >
+struct apply_wrap_impl3;
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct apply_wrap_impl3<
+ 3
+ , F
+ , T1, T2, T3
+ >
+{
+ typedef typename F::template apply<
+ T1, T2, T3
+
+ > type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct apply_wrap_impl3<
+ 4
+ , F
+ , T1, T2, T3
+ >
+{
+ typedef typename F::template apply<
+ T1, T2, T3
+
+ , na
+
+ > type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct apply_wrap_impl3<
+ 5
+ , F
+ , T1, T2, T3
+ >
+{
+ typedef typename F::template apply<
+ T1, T2, T3
+
+ , na, na
+
+ > type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct apply_wrap3
+ : apply_wrap_impl3<
+ ::boost::mpl::aux::arity< F,3 >::value
+ , F
+ , T1, T2, T3
+ >::type
+{
+};
+
+template<
+ int N, typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct apply_wrap_impl4;
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct apply_wrap_impl4<
+ 4
+ , F
+ , T1, T2, T3, T4
+ >
+{
+ typedef typename F::template apply<
+ T1, T2, T3, T4
+
+ > type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct apply_wrap_impl4<
+ 5
+ , F
+ , T1, T2, T3, T4
+ >
+{
+ typedef typename F::template apply<
+ T1, T2, T3, T4
+
+ , na
+
+ > type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct apply_wrap4
+ : apply_wrap_impl4<
+ ::boost::mpl::aux::arity< F,4 >::value
+ , F
+ , T1, T2, T3, T4
+ >::type
+{
+};
+
+template<
+ int N, typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct apply_wrap_impl5;
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct apply_wrap_impl5<
+ 5
+ , F
+ , T1, T2, T3, T4, T5
+ >
+{
+ typedef typename F::template apply<
+ T1, T2, T3, T4, T5
+
+ > type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct apply_wrap5
+ : apply_wrap_impl5<
+ ::boost::mpl::aux::arity< F,5 >::value
+ , F
+ , T1, T2, T3, T4, T5
+ >::type
+{
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc/arg.hpp b/boost/boost/mpl/aux_/preprocessed/bcc/arg.hpp
new file mode 100644
index 00000000000..9a766e79cee
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc/arg.hpp
@@ -0,0 +1,117 @@
+
+// Copyright Peter Dimov 2001-2002
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/arg.hpp" header
+// -- DO NOT modify by hand!
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+template<> struct arg< -1 >
+{
+ BOOST_STATIC_CONSTANT(int, value = -1);
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1, typename U2, typename U3, typename U4, typename U5
+ >
+ struct apply
+ {
+ typedef U1 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+template<> struct arg<1>
+{
+ BOOST_STATIC_CONSTANT(int, value = 1);
+ typedef arg<2> next;
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1, typename U2, typename U3, typename U4, typename U5
+ >
+ struct apply
+ {
+ typedef U1 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+template<> struct arg<2>
+{
+ BOOST_STATIC_CONSTANT(int, value = 2);
+ typedef arg<3> next;
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1, typename U2, typename U3, typename U4, typename U5
+ >
+ struct apply
+ {
+ typedef U2 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+template<> struct arg<3>
+{
+ BOOST_STATIC_CONSTANT(int, value = 3);
+ typedef arg<4> next;
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1, typename U2, typename U3, typename U4, typename U5
+ >
+ struct apply
+ {
+ typedef U3 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+template<> struct arg<4>
+{
+ BOOST_STATIC_CONSTANT(int, value = 4);
+ typedef arg<5> next;
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1, typename U2, typename U3, typename U4, typename U5
+ >
+ struct apply
+ {
+ typedef U4 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+template<> struct arg<5>
+{
+ BOOST_STATIC_CONSTANT(int, value = 5);
+ typedef arg<6> next;
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1, typename U2, typename U3, typename U4, typename U5
+ >
+ struct apply
+ {
+ typedef U5 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+BOOST_MPL_AUX_NONTYPE_ARITY_SPEC(1,int, arg)
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc/basic_bind.hpp b/boost/boost/mpl/aux_/preprocessed/bcc/basic_bind.hpp
new file mode 100644
index 00000000000..d24e2245a9c
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc/basic_bind.hpp
@@ -0,0 +1,300 @@
+
+// Copyright Peter Dimov 2001
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/aux_/basic_bind.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template<
+ typename T, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg
+{
+ typedef T type;
+};
+
+template<
+ int N, typename U1, typename U2, typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >
+{
+ typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;
+};
+
+} // namespace aux
+
+template<
+ typename F
+ >
+struct bind0
+{
+ template<
+ typename U1, typename U2, typename U3, typename U4, typename U5
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+
+ public:
+ typedef typename apply_wrap0<
+ f_
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg<
+ bind0<F>, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind0<F> f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(1, bind0)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)
+
+template<
+ typename F, typename T1
+ >
+struct bind1
+{
+ template<
+ typename U1, typename U2, typename U3, typename U4, typename U5
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+
+ public:
+ typedef typename apply_wrap1<
+ f_
+ , typename t1::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename U1, typename U2, typename U3
+ , typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind1< F,T1 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind1< F,T1 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(2, bind1)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct bind2
+{
+ template<
+ typename U1, typename U2, typename U3, typename U4, typename U5
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+ typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+
+ public:
+ typedef typename apply_wrap2<
+ f_
+ , typename t1::type, typename t2::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename U1, typename U2
+ , typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind2< F,T1,T2 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind2< F,T1,T2 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(3, bind2)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct bind3
+{
+ template<
+ typename U1, typename U2, typename U3, typename U4, typename U5
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+ typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+ typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+
+ public:
+ typedef typename apply_wrap3<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename U1
+ , typename U2, typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind3< F,T1,T2,T3 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(4, bind3)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct bind4
+{
+ template<
+ typename U1, typename U2, typename U3, typename U4, typename U5
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+ typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+ typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+ typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;
+
+ public:
+ typedef typename apply_wrap4<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ , typename t4::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename U1, typename U2, typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind4< F,T1,T2,T3,T4 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct bind5
+{
+ template<
+ typename U1, typename U2, typename U3, typename U4, typename U5
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+ typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+ typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+ typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;
+ typedef aux::resolve_bind_arg< T5,U1,U2,U3,U4,U5 > t5;
+
+ public:
+ typedef typename apply_wrap5<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ , typename t4::type, typename t5::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg<
+ bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind5< F,T1,T2,T3,T4,T5 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc/bind.hpp b/boost/boost/mpl/aux_/preprocessed/bcc/bind.hpp
new file mode 100644
index 00000000000..edafd0cf5d2
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc/bind.hpp
@@ -0,0 +1,397 @@
+
+// Copyright Peter Dimov 2001
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/bind.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template<
+ typename T, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg
+{
+ typedef T type;
+};
+
+template<
+ typename T
+ , typename Arg
+ >
+struct replace_unnamed_arg
+{
+ typedef Arg next;
+ typedef T type;
+};
+
+template<
+ typename Arg
+ >
+struct replace_unnamed_arg< arg< -1 >, Arg >
+{
+ typedef typename Arg::next next;
+ typedef Arg type;
+};
+
+template<
+ int N, typename U1, typename U2, typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >
+{
+ typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;
+};
+
+} // namespace aux
+
+template<
+ typename F
+ >
+struct bind0
+{
+ template<
+ typename U1, typename U2, typename U3, typename U4, typename U5
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ public:
+ typedef typename apply_wrap0<
+ f_
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg<
+ bind0<F>, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind0<F> f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(1, bind0)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)
+
+template<
+ typename F, typename T1
+ >
+struct bind1
+{
+ template<
+ typename U1, typename U2, typename U3, typename U4, typename U5
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ public:
+ typedef typename apply_wrap1<
+ f_
+ , typename t1::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename U1, typename U2, typename U3
+ , typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind1< F,T1 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind1< F,T1 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(2, bind1)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct bind2
+{
+ template<
+ typename U1, typename U2, typename U3, typename U4, typename U5
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ typedef aux::replace_unnamed_arg< T2,n2 > r2;
+ typedef typename r2::type a2;
+ typedef typename r2::next n3;
+ typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+ ///
+ public:
+ typedef typename apply_wrap2<
+ f_
+ , typename t1::type, typename t2::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename U1, typename U2
+ , typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind2< F,T1,T2 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind2< F,T1,T2 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(3, bind2)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct bind3
+{
+ template<
+ typename U1, typename U2, typename U3, typename U4, typename U5
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ typedef aux::replace_unnamed_arg< T2,n2 > r2;
+ typedef typename r2::type a2;
+ typedef typename r2::next n3;
+ typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+ ///
+ typedef aux::replace_unnamed_arg< T3,n3 > r3;
+ typedef typename r3::type a3;
+ typedef typename r3::next n4;
+ typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+ ///
+ public:
+ typedef typename apply_wrap3<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename U1
+ , typename U2, typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind3< F,T1,T2,T3 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(4, bind3)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct bind4
+{
+ template<
+ typename U1, typename U2, typename U3, typename U4, typename U5
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ typedef aux::replace_unnamed_arg< T2,n2 > r2;
+ typedef typename r2::type a2;
+ typedef typename r2::next n3;
+ typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+ ///
+ typedef aux::replace_unnamed_arg< T3,n3 > r3;
+ typedef typename r3::type a3;
+ typedef typename r3::next n4;
+ typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+ ///
+ typedef aux::replace_unnamed_arg< T4,n4 > r4;
+ typedef typename r4::type a4;
+ typedef typename r4::next n5;
+ typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
+ ///
+ public:
+ typedef typename apply_wrap4<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ , typename t4::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename U1, typename U2, typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind4< F,T1,T2,T3,T4 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct bind5
+{
+ template<
+ typename U1, typename U2, typename U3, typename U4, typename U5
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ typedef aux::replace_unnamed_arg< T2,n2 > r2;
+ typedef typename r2::type a2;
+ typedef typename r2::next n3;
+ typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+ ///
+ typedef aux::replace_unnamed_arg< T3,n3 > r3;
+ typedef typename r3::type a3;
+ typedef typename r3::next n4;
+ typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+ ///
+ typedef aux::replace_unnamed_arg< T4,n4 > r4;
+ typedef typename r4::type a4;
+ typedef typename r4::next n5;
+ typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
+ ///
+ typedef aux::replace_unnamed_arg< T5,n5 > r5;
+ typedef typename r5::type a5;
+ typedef typename r5::next n6;
+ typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5;
+ ///
+ public:
+ typedef typename apply_wrap5<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ , typename t4::type, typename t5::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg<
+ bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind5< F,T1,T2,T3,T4,T5 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc/bind_fwd.hpp b/boost/boost/mpl/aux_/preprocessed/bcc/bind_fwd.hpp
new file mode 100644
index 00000000000..022cba34611
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc/bind_fwd.hpp
@@ -0,0 +1,46 @@
+
+// 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/bind_fwd.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename F
+ >
+struct bind0;
+
+template<
+ typename F, typename T1
+ >
+struct bind1;
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct bind2;
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct bind3;
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct bind4;
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct bind5;
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc/bitand.hpp b/boost/boost/mpl/aux_/preprocessed/bcc/bitand.hpp
new file mode 100644
index 00000000000..0bbf54ea26d
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc/bitand.hpp
@@ -0,0 +1,147 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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)
+//
+
+// Preprocessed version of "boost/mpl/bitand.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct bitand_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< bitand_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< bitand_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitand_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct bitand_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct bitand_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct bitand_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct bitand_
+ : bitand_< bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>, N5>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , bitand_
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3, typename N4
+ >
+struct bitand_< N1,N2,N3,N4,na >
+
+ : bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitand_
+ , ( N1, N2, N3, N4, na )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3
+ >
+struct bitand_< N1,N2,N3,na,na >
+
+ : bitand_< bitand_< N1,N2 >, N3>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitand_
+ , ( N1, N2, N3, na, na )
+ )
+};
+
+template<
+ typename N1, typename N2
+ >
+struct bitand_< N1,N2,na,na,na >
+ : bitand_impl<
+ typename bitand_tag<N1>::type
+ , typename bitand_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitand_
+ , ( N1, N2, na, na, na )
+ )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitand_)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct bitand_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ & BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc/bitor.hpp b/boost/boost/mpl/aux_/preprocessed/bcc/bitor.hpp
new file mode 100644
index 00000000000..55b31cb8a9c
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc/bitor.hpp
@@ -0,0 +1,147 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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)
+//
+
+// Preprocessed version of "boost/mpl/bitor.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct bitor_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< bitor_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< bitor_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitor_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct bitor_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct bitor_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct bitor_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct bitor_
+ : bitor_< bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>, N5>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , bitor_
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3, typename N4
+ >
+struct bitor_< N1,N2,N3,N4,na >
+
+ : bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitor_
+ , ( N1, N2, N3, N4, na )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3
+ >
+struct bitor_< N1,N2,N3,na,na >
+
+ : bitor_< bitor_< N1,N2 >, N3>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitor_
+ , ( N1, N2, N3, na, na )
+ )
+};
+
+template<
+ typename N1, typename N2
+ >
+struct bitor_< N1,N2,na,na,na >
+ : bitor_impl<
+ typename bitor_tag<N1>::type
+ , typename bitor_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitor_
+ , ( N1, N2, na, na, na )
+ )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitor_)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct bitor_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ | BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc/bitxor.hpp b/boost/boost/mpl/aux_/preprocessed/bcc/bitxor.hpp
new file mode 100644
index 00000000000..ec1939151d0
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc/bitxor.hpp
@@ -0,0 +1,147 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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)
+//
+
+// Preprocessed version of "boost/mpl/bitxor.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct bitxor_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< bitxor_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< bitxor_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitxor_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct bitxor_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct bitxor_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct bitxor_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct bitxor_
+ : bitxor_< bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4>, N5>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , bitxor_
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3, typename N4
+ >
+struct bitxor_< N1,N2,N3,N4,na >
+
+ : bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitxor_
+ , ( N1, N2, N3, N4, na )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3
+ >
+struct bitxor_< N1,N2,N3,na,na >
+
+ : bitxor_< bitxor_< N1,N2 >, N3>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitxor_
+ , ( N1, N2, N3, na, na )
+ )
+};
+
+template<
+ typename N1, typename N2
+ >
+struct bitxor_< N1,N2,na,na,na >
+ : bitxor_impl<
+ typename bitxor_tag<N1>::type
+ , typename bitxor_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitxor_
+ , ( N1, N2, na, na, na )
+ )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitxor_)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct bitxor_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ ^ BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc/deque.hpp b/boost/boost/mpl/aux_/preprocessed/bcc/deque.hpp
new file mode 100644
index 00000000000..de67398a37c
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc/deque.hpp
@@ -0,0 +1,323 @@
+
+// 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/deque.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+ , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+ , typename T12 = na, typename T13 = na, typename T14 = na
+ , typename T15 = na, typename T16 = na, typename T17 = na
+ , typename T18 = na, typename T19 = na
+ >
+struct deque;
+
+template<
+
+ >
+struct deque<
+ na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector0< >
+{
+ typedef vector0< >::type type;
+};
+
+template<
+ typename T0
+ >
+struct deque<
+ T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector1<T0>
+{
+ typedef typename vector1<T0>::type type;
+};
+
+template<
+ typename T0, typename T1
+ >
+struct deque<
+ T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector2< T0,T1 >
+{
+ typedef typename vector2< T0,T1 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2
+ >
+struct deque<
+ T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector3< T0,T1,T2 >
+{
+ typedef typename vector3< T0,T1,T2 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3
+ >
+struct deque<
+ T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector4< T0,T1,T2,T3 >
+{
+ typedef typename vector4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ >
+struct deque<
+ T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector5< T0,T1,T2,T3,T4 >
+{
+ typedef typename vector5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct deque<
+ T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector6< T0,T1,T2,T3,T4,T5 >
+{
+ typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6
+ >
+struct deque<
+ T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector7< T0,T1,T2,T3,T4,T5,T6 >
+{
+ typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7
+ >
+struct deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+ typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8
+ >
+struct deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+ typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ >
+struct deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+ typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ , typename T10
+ >
+struct deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+ typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+ , na, na, na, na
+ >
+ : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+ typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+ , na, na, na, na
+ >
+ : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+ typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+ , na, na, na, na
+ >
+ : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+ typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+ , na, na, na, na
+ >
+ : vector15<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ >
+{
+ typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, na, na, na, na
+ >
+ : vector16<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15
+ >
+{
+ typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, na, na, na
+ >
+ : vector17<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16
+ >
+{
+ typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, na, na
+ >
+ : vector18<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17
+ >
+{
+ typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, na
+ >
+ : vector19<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18
+ >
+{
+ typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+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 deque
+ : vector20<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, T19
+ >
+{
+ typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc/divides.hpp b/boost/boost/mpl/aux_/preprocessed/bcc/divides.hpp
new file mode 100644
index 00000000000..86f16826f79
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc/divides.hpp
@@ -0,0 +1,146 @@
+
+// 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/divides.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct divides_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< divides_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< divides_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct divides_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct divides_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct divides_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct divides_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct divides
+ : divides< divides< divides< divides< N1,N2 >, N3>, N4>, N5>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , divides
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3, typename N4
+ >
+struct divides< N1,N2,N3,N4,na >
+
+ : divides< divides< divides< N1,N2 >, N3>, N4>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , divides
+ , ( N1, N2, N3, N4, na )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3
+ >
+struct divides< N1,N2,N3,na,na >
+
+ : divides< divides< N1,N2 >, N3>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , divides
+ , ( N1, N2, N3, na, na )
+ )
+};
+
+template<
+ typename N1, typename N2
+ >
+struct divides< N1,N2,na,na,na >
+ : divides_impl<
+ typename divides_tag<N1>::type
+ , typename divides_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , divides
+ , ( N1, N2, na, na, na )
+ )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, divides)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct divides_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ / BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc/equal_to.hpp b/boost/boost/mpl/aux_/preprocessed/bcc/equal_to.hpp
new file mode 100644
index 00000000000..62c994589f4
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc/equal_to.hpp
@@ -0,0 +1,94 @@
+
+// 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/equal_to.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct equal_to_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct equal_to_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct equal_to_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct equal_to_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct equal_to_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct equal_to
+
+ : equal_to_impl<
+ typename equal_to_tag<N1>::type
+ , typename equal_to_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, equal_to, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, equal_to)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct equal_to_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value == BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc/fold_impl.hpp b/boost/boost/mpl/aux_/preprocessed/bcc/fold_impl.hpp
new file mode 100644
index 00000000000..9e7a29300d6
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc/fold_impl.hpp
@@ -0,0 +1,180 @@
+
+// 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/aux_/fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+ int N
+ , typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl;
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl< 0,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef state0 state;
+ typedef iter0 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl< 1,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+
+
+ typedef state1 state;
+ typedef iter1 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl< 2,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+
+
+ typedef state2 state;
+ typedef iter2 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl< 3,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;
+ typedef typename mpl::next<iter2>::type iter3;
+
+
+ typedef state3 state;
+ typedef iter3 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl< 4,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp, state3, typename deref<iter3>::type >::type state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef state4 state;
+ typedef iter4 iterator;
+};
+
+template<
+ int N
+ , typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl
+{
+ typedef fold_impl<
+ 4
+ , First
+ , Last
+ , State
+ , ForwardOp
+ > chunk_;
+
+ typedef fold_impl<
+ ( (N - 4) < 0 ? 0 : N - 4 )
+ , typename chunk_::iterator
+ , Last
+ , typename chunk_::state
+ , ForwardOp
+ > res_;
+
+ typedef typename res_::state state;
+ typedef typename res_::iterator iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl< -1,First,Last,State,ForwardOp >
+ : fold_impl<
+ -1
+ , typename mpl::next<First>::type
+ , Last
+ , typename apply2<ForwardOp,State, typename deref<First>::type>::type
+ , ForwardOp
+ >
+{
+};
+
+template<
+ typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl< -1,Last,Last,State,ForwardOp >
+{
+ typedef State state;
+ typedef Last iterator;
+};
+
+}}}
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc/full_lambda.hpp b/boost/boost/mpl/aux_/preprocessed/bcc/full_lambda.hpp
new file mode 100644
index 00000000000..e3eef71b1ea
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc/full_lambda.hpp
@@ -0,0 +1,558 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/aux_/full_lambda.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template<
+ bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false
+ , bool C5 = false
+ >
+struct lambda_or
+ : true_
+{
+};
+
+template<>
+struct lambda_or< false,false,false,false,false >
+ : false_
+{
+};
+
+} // namespace aux
+
+template<
+ typename T
+ , typename Tag
+ , typename Arity
+ >
+struct lambda
+{
+ typedef false_ is_le;
+ typedef T result_;
+ typedef T type;
+};
+
+template<
+ typename T
+ >
+struct is_lambda_expression
+ : lambda<T>::is_le
+{
+};
+
+template< int N, typename Tag >
+struct lambda< arg<N>,Tag, int_< -1 > >
+{
+ typedef true_ is_le;
+ typedef mpl::arg<N> result_; // qualified for the sake of MIPSpro 7.41
+ typedef mpl::protect<result_> type;
+};
+
+template<
+ typename F
+ , typename Tag
+ >
+struct lambda<
+ bind0<F>
+ , Tag
+ , int_<1>
+ >
+{
+ typedef false_ is_le;
+ typedef bind0<
+ F
+ > result_;
+
+ typedef result_ type;
+};
+
+namespace aux {
+
+template<
+ typename IsLE, typename Tag
+ , template< typename P1 > class F
+ , typename L1
+ >
+struct le_result1
+{
+ typedef F<
+ typename L1::type
+ > result_;
+
+ typedef result_ type;
+};
+
+template<
+ typename Tag
+ , template< typename P1 > class F
+ , typename L1
+ >
+struct le_result1< true_,Tag,F,L1 >
+{
+ typedef bind1<
+ quote1< F,Tag >
+ , typename L1::result_
+ > result_;
+
+ typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+ template< typename P1 > class F
+ , typename T1
+ , typename Tag
+ >
+struct lambda<
+ F<T1>
+ , Tag
+ , int_<1>
+ >
+{
+ typedef lambda< T1,Tag > l1;
+ typedef typename l1::is_le is_le1;
+ typedef typename aux::lambda_or<
+ is_le1::value
+ >::type is_le;
+
+ typedef aux::le_result1<
+ is_le, Tag, F, l1
+ > le_result_;
+
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+template<
+ typename F, typename T1
+ , typename Tag
+ >
+struct lambda<
+ bind1< F,T1 >
+ , Tag
+ , int_<2>
+ >
+{
+ typedef false_ is_le;
+ typedef bind1<
+ F
+ , T1
+ > result_;
+
+ typedef result_ type;
+};
+
+namespace aux {
+
+template<
+ typename IsLE, typename Tag
+ , template< typename P1, typename P2 > class F
+ , typename L1, typename L2
+ >
+struct le_result2
+{
+ typedef F<
+ typename L1::type, typename L2::type
+ > result_;
+
+ typedef result_ type;
+};
+
+template<
+ typename Tag
+ , template< typename P1, typename P2 > class F
+ , typename L1, typename L2
+ >
+struct le_result2< true_,Tag,F,L1,L2 >
+{
+ typedef bind2<
+ quote2< F,Tag >
+ , typename L1::result_, typename L2::result_
+ > result_;
+
+ typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+ template< typename P1, typename P2 > class F
+ , typename T1, typename T2
+ , typename Tag
+ >
+struct lambda<
+ F< T1,T2 >
+ , Tag
+ , int_<2>
+ >
+{
+ typedef lambda< T1,Tag > l1;
+ typedef lambda< T2,Tag > l2;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+
+
+ typedef typename aux::lambda_or<
+ is_le1::value, is_le2::value
+ >::type is_le;
+
+ typedef aux::le_result2<
+ is_le, Tag, F, l1, l2
+ > le_result_;
+
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+template<
+ typename F, typename T1, typename T2
+ , typename Tag
+ >
+struct lambda<
+ bind2< F,T1,T2 >
+ , Tag
+ , int_<3>
+ >
+{
+ typedef false_ is_le;
+ typedef bind2<
+ F
+ , T1, T2
+ > result_;
+
+ typedef result_ type;
+};
+
+namespace aux {
+
+template<
+ typename IsLE, typename Tag
+ , template< typename P1, typename P2, typename P3 > class F
+ , typename L1, typename L2, typename L3
+ >
+struct le_result3
+{
+ typedef F<
+ typename L1::type, typename L2::type, typename L3::type
+ > result_;
+
+ typedef result_ type;
+};
+
+template<
+ typename Tag
+ , template< typename P1, typename P2, typename P3 > class F
+ , typename L1, typename L2, typename L3
+ >
+struct le_result3< true_,Tag,F,L1,L2,L3 >
+{
+ typedef bind3<
+ quote3< F,Tag >
+ , typename L1::result_, typename L2::result_, typename L3::result_
+ > result_;
+
+ typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+ template< typename P1, typename P2, typename P3 > class F
+ , typename T1, typename T2, typename T3
+ , typename Tag
+ >
+struct lambda<
+ F< T1,T2,T3 >
+ , Tag
+ , int_<3>
+ >
+{
+ typedef lambda< T1,Tag > l1;
+ typedef lambda< T2,Tag > l2;
+ typedef lambda< T3,Tag > l3;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+
+
+ typedef typename aux::lambda_or<
+ is_le1::value, is_le2::value, is_le3::value
+ >::type is_le;
+
+ typedef aux::le_result3<
+ is_le, Tag, F, l1, l2, l3
+ > le_result_;
+
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ , typename Tag
+ >
+struct lambda<
+ bind3< F,T1,T2,T3 >
+ , Tag
+ , int_<4>
+ >
+{
+ typedef false_ is_le;
+ typedef bind3<
+ F
+ , T1, T2, T3
+ > result_;
+
+ typedef result_ type;
+};
+
+namespace aux {
+
+template<
+ typename IsLE, typename Tag
+ , template< typename P1, typename P2, typename P3, typename P4 > class F
+ , typename L1, typename L2, typename L3, typename L4
+ >
+struct le_result4
+{
+ typedef F<
+ typename L1::type, typename L2::type, typename L3::type
+ , typename L4::type
+ > result_;
+
+ typedef result_ type;
+};
+
+template<
+ typename Tag
+ , template< typename P1, typename P2, typename P3, typename P4 > class F
+ , typename L1, typename L2, typename L3, typename L4
+ >
+struct le_result4< true_,Tag,F,L1,L2,L3,L4 >
+{
+ typedef bind4<
+ quote4< F,Tag >
+ , typename L1::result_, typename L2::result_, typename L3::result_
+ , typename L4::result_
+ > result_;
+
+ typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+ template< typename P1, typename P2, typename P3, typename P4 > class F
+ , typename T1, typename T2, typename T3, typename T4
+ , typename Tag
+ >
+struct lambda<
+ F< T1,T2,T3,T4 >
+ , Tag
+ , int_<4>
+ >
+{
+ typedef lambda< T1,Tag > l1;
+ typedef lambda< T2,Tag > l2;
+ typedef lambda< T3,Tag > l3;
+ typedef lambda< T4,Tag > l4;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+ typedef typename l4::is_le is_le4;
+
+
+ typedef typename aux::lambda_or<
+ is_le1::value, is_le2::value, is_le3::value, is_le4::value
+ >::type is_le;
+
+ typedef aux::le_result4<
+ is_le, Tag, F, l1, l2, l3, l4
+ > le_result_;
+
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename Tag
+ >
+struct lambda<
+ bind4< F,T1,T2,T3,T4 >
+ , Tag
+ , int_<5>
+ >
+{
+ typedef false_ is_le;
+ typedef bind4<
+ F
+ , T1, T2, T3, T4
+ > result_;
+
+ typedef result_ type;
+};
+
+namespace aux {
+
+template<
+ typename IsLE, typename Tag
+ , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F
+ , typename L1, typename L2, typename L3, typename L4, typename L5
+ >
+struct le_result5
+{
+ typedef F<
+ typename L1::type, typename L2::type, typename L3::type
+ , typename L4::type, typename L5::type
+ > result_;
+
+ typedef result_ type;
+};
+
+template<
+ typename Tag
+ , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F
+ , typename L1, typename L2, typename L3, typename L4, typename L5
+ >
+struct le_result5< true_,Tag,F,L1,L2,L3,L4,L5 >
+{
+ typedef bind5<
+ quote5< F,Tag >
+ , typename L1::result_, typename L2::result_, typename L3::result_
+ , typename L4::result_, typename L5::result_
+ > result_;
+
+ typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+ template<
+ typename P1, typename P2, typename P3, typename P4
+ , typename P5
+ >
+ class F
+ , typename T1, typename T2, typename T3, typename T4, typename T5
+ , typename Tag
+ >
+struct lambda<
+ F< T1,T2,T3,T4,T5 >
+ , Tag
+ , int_<5>
+ >
+{
+ typedef lambda< T1,Tag > l1;
+ typedef lambda< T2,Tag > l2;
+ typedef lambda< T3,Tag > l3;
+ typedef lambda< T4,Tag > l4;
+ typedef lambda< T5,Tag > l5;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+ typedef typename l4::is_le is_le4;
+ typedef typename l5::is_le is_le5;
+
+
+ typedef typename aux::lambda_or<
+ is_le1::value, is_le2::value, is_le3::value, is_le4::value
+ , is_le5::value
+ >::type is_le;
+
+ typedef aux::le_result5<
+ is_le, Tag, F, l1, l2, l3, l4, l5
+ > le_result_;
+
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ , typename Tag
+ >
+struct lambda<
+ bind5< F,T1,T2,T3,T4,T5 >
+ , Tag
+ , int_<6>
+ >
+{
+ typedef false_ is_le;
+ typedef bind5<
+ F
+ , T1, T2, T3, T4, T5
+ > result_;
+
+ typedef result_ type;
+};
+
+/// special case for 'protect'
+template< typename T, typename Tag >
+struct lambda< mpl::protect<T>,Tag, int_<1> >
+{
+ typedef false_ is_le;
+ typedef mpl::protect<T> result_;
+ typedef result_ type;
+};
+
+/// specializations for the main 'bind' form
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ , typename Tag
+ >
+struct lambda<
+ bind< F,T1,T2,T3,T4,T5 >
+ , Tag
+ , int_<6>
+ >
+{
+ typedef false_ is_le;
+ typedef bind< F,T1,T2,T3,T4,T5 > result_;
+ typedef result_ type;
+};
+
+template<
+ typename F
+ , typename Tag1
+ , typename Tag2
+ , typename Arity
+ >
+struct lambda<
+ lambda< F,Tag1,Arity >
+ , Tag2
+ , int_<3>
+ >
+{
+ typedef lambda< F,Tag2 > l1;
+ typedef lambda< Tag1,Tag2 > l2;
+ typedef typename l1::is_le is_le;
+ typedef bind1< quote1<aux::template_arity>, typename l1::result_ > arity_;
+ typedef lambda< typename if_< is_le,arity_,Arity >::type, Tag2 > l3;
+ typedef aux::le_result3<is_le, Tag2, mpl::lambda, l1, l2, l3> le_result_;
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 3, lambda)
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc/greater.hpp b/boost/boost/mpl/aux_/preprocessed/bcc/greater.hpp
new file mode 100644
index 00000000000..14d8e08bff0
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc/greater.hpp
@@ -0,0 +1,94 @@
+
+// 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/greater.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct greater_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< greater_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< greater_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct greater_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct greater_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct greater_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct greater_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct greater
+
+ : greater_impl<
+ typename greater_tag<N1>::type
+ , typename greater_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, greater)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct greater_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value > BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc/greater_equal.hpp b/boost/boost/mpl/aux_/preprocessed/bcc/greater_equal.hpp
new file mode 100644
index 00000000000..2603f9184a0
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc/greater_equal.hpp
@@ -0,0 +1,94 @@
+
+// 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/greater_equal.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct greater_equal_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< greater_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< greater_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct greater_equal_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct greater_equal_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct greater_equal_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct greater_equal_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct greater_equal
+
+ : greater_equal_impl<
+ typename greater_equal_tag<N1>::type
+ , typename greater_equal_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater_equal, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, greater_equal)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct greater_equal_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value >= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc/inherit.hpp b/boost/boost/mpl/aux_/preprocessed/bcc/inherit.hpp
new file mode 100644
index 00000000000..31ab0dc490f
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc/inherit.hpp
@@ -0,0 +1,139 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/inherit.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(T1)
+ , typename BOOST_MPL_AUX_NA_PARAM(T2)
+ >
+struct inherit2
+ : T1, T2
+{
+ typedef inherit2 type;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, inherit2, (T1, T2))
+};
+
+template< typename T1 >
+struct inherit2< T1,empty_base >
+{
+ typedef T1 type;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (T1, empty_base))
+};
+
+template< typename T2 >
+struct inherit2< empty_base,T2 >
+{
+ typedef T2 type;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, T2))
+};
+
+template<>
+struct inherit2< empty_base,empty_base >
+{
+ typedef empty_base type;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, empty_base))
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, inherit2)
+
+template<
+ typename T1 = na, typename T2 = na, typename T3 = na
+ >
+struct inherit3
+ : inherit2<
+ typename inherit2<
+ T1, T2
+ >::type
+ , T3
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 3
+ , inherit3
+ , ( T1, T2, T3)
+ )
+};
+
+BOOST_MPL_AUX_NA_SPEC(3, inherit3)
+
+template<
+ typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na
+ >
+struct inherit4
+ : inherit2<
+ typename inherit3<
+ T1, T2, T3
+ >::type
+ , T4
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 4
+ , inherit4
+ , ( T1, T2, T3, T4)
+ )
+};
+
+BOOST_MPL_AUX_NA_SPEC(4, inherit4)
+
+template<
+ typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na
+ , typename T5 = na
+ >
+struct inherit5
+ : inherit2<
+ typename inherit4<
+ T1, T2, T3, T4
+ >::type
+ , T5
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , inherit5
+ , ( T1, T2, T3, T4, T5)
+ )
+};
+
+BOOST_MPL_AUX_NA_SPEC(5, inherit5)
+
+/// primary template
+
+template<
+ typename T1 = empty_base, typename T2 = empty_base
+ , typename T3 = empty_base, typename T4 = empty_base
+ , typename T5 = empty_base
+ >
+struct inherit
+ : inherit5< T1,T2,T3,T4,T5 >
+{
+};
+
+template<>
+struct inherit< na,na,na,na,na >
+{
+ template<
+
+ typename T1, typename T2, typename T3, typename T4, typename T5
+
+ >
+ struct apply
+ : inherit< T1,T2,T3,T4,T5 >
+ {
+ };
+};
+
+BOOST_MPL_AUX_NA_SPEC_LAMBDA(5, inherit)
+BOOST_MPL_AUX_NA_SPEC_ARITY(5, inherit)
+BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(5, 5, inherit)
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc/iter_fold_if_impl.hpp b/boost/boost/mpl/aux_/preprocessed/bcc/iter_fold_if_impl.hpp
new file mode 100644
index 00000000000..695179584d3
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc/iter_fold_if_impl.hpp
@@ -0,0 +1,133 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/aux_/iter_fold_if_impl.hpp" header
+// -- DO NOT modify by hand!
+
+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;
+ };
+};
+
+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;
+};
+
+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;
+ typedef iter_fold_if_forward_step< typename forward_step0::iterator, typename forward_step0::state, ForwardOp, ForwardPredicate > forward_step1;
+ typedef iter_fold_if_forward_step< typename forward_step1::iterator, typename forward_step1::state, ForwardOp, ForwardPredicate > forward_step2;
+ typedef iter_fold_if_forward_step< typename forward_step2::iterator, typename forward_step2::state, ForwardOp, ForwardPredicate > forward_step3;
+ typedef iter_fold_if_forward_step< typename forward_step3::iterator, typename forward_step3::state, ForwardOp, ForwardPredicate > forward_step4;
+
+
+ typedef typename if_<
+ typename forward_step4::not_last
+ , iter_fold_if_impl<
+ typename forward_step4::iterator
+ , typename forward_step4::state
+ , ForwardOp
+ , ForwardPredicate
+ , BackwardOp
+ , BackwardPredicate
+ >
+ , iter_fold_if_null_step<
+ typename forward_step4::iterator
+ , typename forward_step4::state
+ >
+ >::type backward_step4;
+
+ typedef iter_fold_if_backward_step< typename forward_step3::iterator, typename backward_step4::state, BackwardOp, BackwardPredicate > backward_step3;
+ typedef iter_fold_if_backward_step< typename forward_step2::iterator, typename backward_step3::state, BackwardOp, BackwardPredicate > backward_step2;
+ typedef iter_fold_if_backward_step< typename forward_step1::iterator, typename backward_step2::state, BackwardOp, BackwardPredicate > backward_step1;
+ typedef iter_fold_if_backward_step< typename forward_step0::iterator, typename backward_step1::state, BackwardOp, BackwardPredicate > backward_step0;
+
+
+ public:
+ typedef typename backward_step0::state state;
+ typedef typename backward_step4::iterator iterator;
+};
+
+}}}
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc/iter_fold_impl.hpp b/boost/boost/mpl/aux_/preprocessed/bcc/iter_fold_impl.hpp
new file mode 100644
index 00000000000..805790e86d6
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc/iter_fold_impl.hpp
@@ -0,0 +1,180 @@
+
+// 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/aux_/iter_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+ int N
+ , typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl;
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl< 0,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef state0 state;
+ typedef iter0 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl< 1,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+
+
+ typedef state1 state;
+ typedef iter1 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl< 2,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+
+
+ typedef state2 state;
+ typedef iter2 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl< 3,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp,state2,iter2 >::type state3;
+ typedef typename mpl::next<iter2>::type iter3;
+
+
+ typedef state3 state;
+ typedef iter3 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl< 4,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp,state2,iter2 >::type state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp,state3,iter3 >::type state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef state4 state;
+ typedef iter4 iterator;
+};
+
+template<
+ int N
+ , typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl
+{
+ typedef iter_fold_impl<
+ 4
+ , First
+ , Last
+ , State
+ , ForwardOp
+ > chunk_;
+
+ typedef iter_fold_impl<
+ ( (N - 4) < 0 ? 0 : N - 4 )
+ , typename chunk_::iterator
+ , Last
+ , typename chunk_::state
+ , ForwardOp
+ > res_;
+
+ typedef typename res_::state state;
+ typedef typename res_::iterator iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl< -1,First,Last,State,ForwardOp >
+ : iter_fold_impl<
+ -1
+ , typename mpl::next<First>::type
+ , Last
+ , typename apply2< ForwardOp,State,First >::type
+ , ForwardOp
+ >
+{
+};
+
+template<
+ typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl< -1,Last,Last,State,ForwardOp >
+{
+ typedef State state;
+ typedef Last iterator;
+};
+
+}}}
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc/lambda_no_ctps.hpp b/boost/boost/mpl/aux_/preprocessed/bcc/lambda_no_ctps.hpp
new file mode 100644
index 00000000000..890a198a464
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc/lambda_no_ctps.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/aux_/lambda_no_ctps.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template<
+ bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false
+ , bool C5 = false
+ >
+struct lambda_or
+ : true_
+{
+};
+
+template<>
+struct lambda_or< false,false,false,false,false >
+ : false_
+{
+};
+
+template< typename Arity > struct lambda_impl
+{
+ template< typename T, typename Tag, typename Protect > struct result_
+ {
+ typedef T type;
+ typedef is_placeholder<T> is_le;
+ };
+};
+
+template<> struct lambda_impl< int_<1> >
+{
+ template< typename F, typename Tag, typename Protect > struct result_
+ {
+ typedef lambda< typename F::arg1, Tag, false_ > l1;
+ typedef typename l1::is_le is_le1;
+ typedef aux::lambda_or<
+ BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value
+ > is_le;
+
+ typedef bind1<
+ typename F::rebind
+ , typename l1::type
+ > bind_;
+
+ typedef typename if_<
+ is_le
+ , if_< Protect, mpl::protect<bind_>, bind_ >
+ , identity<F>
+ >::type type_;
+
+ typedef typename type_::type type;
+ };
+};
+
+template<> struct lambda_impl< int_<2> >
+{
+ template< typename F, typename Tag, typename Protect > struct result_
+ {
+ typedef lambda< typename F::arg1, Tag, false_ > l1;
+ typedef lambda< typename F::arg2, Tag, false_ > l2;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+
+
+ typedef aux::lambda_or<
+ BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value
+ > is_le;
+
+ typedef bind2<
+ typename F::rebind
+ , typename l1::type, typename l2::type
+ > bind_;
+
+ typedef typename if_<
+ is_le
+ , if_< Protect, mpl::protect<bind_>, bind_ >
+ , identity<F>
+ >::type type_;
+
+ typedef typename type_::type type;
+ };
+};
+
+template<> struct lambda_impl< int_<3> >
+{
+ template< typename F, typename Tag, typename Protect > struct result_
+ {
+ typedef lambda< typename F::arg1, Tag, false_ > l1;
+ typedef lambda< typename F::arg2, Tag, false_ > l2;
+ typedef lambda< typename F::arg3, Tag, false_ > l3;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+
+
+ typedef aux::lambda_or<
+ BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value
+ > is_le;
+
+ typedef bind3<
+ typename F::rebind
+ , typename l1::type, typename l2::type, typename l3::type
+ > bind_;
+
+ typedef typename if_<
+ is_le
+ , if_< Protect, mpl::protect<bind_>, bind_ >
+ , identity<F>
+ >::type type_;
+
+ typedef typename type_::type type;
+ };
+};
+
+template<> struct lambda_impl< int_<4> >
+{
+ template< typename F, typename Tag, typename Protect > struct result_
+ {
+ typedef lambda< typename F::arg1, Tag, false_ > l1;
+ typedef lambda< typename F::arg2, Tag, false_ > l2;
+ typedef lambda< typename F::arg3, Tag, false_ > l3;
+ typedef lambda< typename F::arg4, Tag, false_ > l4;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+ typedef typename l4::is_le is_le4;
+
+
+ typedef aux::lambda_or<
+ BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value
+ > is_le;
+
+ typedef bind4<
+ typename F::rebind
+ , typename l1::type, typename l2::type, typename l3::type
+ , typename l4::type
+ > bind_;
+
+ typedef typename if_<
+ is_le
+ , if_< Protect, mpl::protect<bind_>, bind_ >
+ , identity<F>
+ >::type type_;
+
+ typedef typename type_::type type;
+ };
+};
+
+template<> struct lambda_impl< int_<5> >
+{
+ template< typename F, typename Tag, typename Protect > struct result_
+ {
+ typedef lambda< typename F::arg1, Tag, false_ > l1;
+ typedef lambda< typename F::arg2, Tag, false_ > l2;
+ typedef lambda< typename F::arg3, Tag, false_ > l3;
+ typedef lambda< typename F::arg4, Tag, false_ > l4;
+ typedef lambda< typename F::arg5, Tag, false_ > l5;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+ typedef typename l4::is_le is_le4;
+ typedef typename l5::is_le is_le5;
+
+
+ typedef aux::lambda_or<
+ BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le5)::value
+ > is_le;
+
+ typedef bind5<
+ typename F::rebind
+ , typename l1::type, typename l2::type, typename l3::type
+ , typename l4::type, typename l5::type
+ > bind_;
+
+ typedef typename if_<
+ is_le
+ , if_< Protect, mpl::protect<bind_>, bind_ >
+ , identity<F>
+ >::type type_;
+
+ typedef typename type_::type type;
+ };
+};
+
+} // namespace aux
+
+template<
+ typename T
+ , typename Tag
+ , typename Protect
+ >
+struct lambda
+{
+ /// Metafunction forwarding confuses MSVC 6.x
+ typedef typename aux::template_arity<T>::type arity_;
+ typedef typename aux::lambda_impl<arity_>
+ ::template result_< T,Tag,Protect > l_;
+
+ typedef typename l_::type type;
+ typedef typename l_::is_le is_le;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(3, lambda, (T, Tag, Protect))
+};
+
+BOOST_MPL_AUX_NA_SPEC2(1, 3, lambda)
+
+template<
+ typename T
+ >
+struct is_lambda_expression
+ : lambda<T>::is_le
+{
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc/less.hpp b/boost/boost/mpl/aux_/preprocessed/bcc/less.hpp
new file mode 100644
index 00000000000..4fe3cd17c49
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc/less.hpp
@@ -0,0 +1,94 @@
+
+// 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/less.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct less_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< less_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< less_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct less_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct less_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct less_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct less_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct less
+
+ : less_impl<
+ typename less_tag<N1>::type
+ , typename less_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, less)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct less_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N2)::value > BOOST_MPL_AUX_VALUE_WKND(N1)::value ) >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc/less_equal.hpp b/boost/boost/mpl/aux_/preprocessed/bcc/less_equal.hpp
new file mode 100644
index 00000000000..ca2894f6f93
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc/less_equal.hpp
@@ -0,0 +1,94 @@
+
+// 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/less_equal.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct less_equal_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< less_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< less_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct less_equal_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct less_equal_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct less_equal_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct less_equal_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct less_equal
+
+ : less_equal_impl<
+ typename less_equal_tag<N1>::type
+ , typename less_equal_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less_equal, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, less_equal)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct less_equal_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value <= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc/list.hpp b/boost/boost/mpl/aux_/preprocessed/bcc/list.hpp
new file mode 100644
index 00000000000..4e8ad53d212
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc/list.hpp
@@ -0,0 +1,323 @@
+
+// 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.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+ , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+ , typename T12 = na, typename T13 = na, typename T14 = na
+ , typename T15 = na, typename T16 = na, typename T17 = na
+ , typename T18 = na, typename T19 = na
+ >
+struct list;
+
+template<
+
+ >
+struct list<
+ na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list0< >
+{
+ typedef list0< >::type type;
+};
+
+template<
+ typename T0
+ >
+struct list<
+ T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list1<T0>
+{
+ typedef typename list1<T0>::type type;
+};
+
+template<
+ typename T0, typename T1
+ >
+struct list<
+ T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list2< T0,T1 >
+{
+ typedef typename list2< T0,T1 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2
+ >
+struct list<
+ T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list3< T0,T1,T2 >
+{
+ typedef typename list3< T0,T1,T2 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3
+ >
+struct list<
+ T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list4< T0,T1,T2,T3 >
+{
+ typedef typename list4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ >
+struct list<
+ T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list5< T0,T1,T2,T3,T4 >
+{
+ typedef typename list5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct list<
+ T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list6< T0,T1,T2,T3,T4,T5 >
+{
+ typedef typename list6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6
+ >
+struct list<
+ T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list7< T0,T1,T2,T3,T4,T5,T6 >
+{
+ typedef typename list7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7
+ >
+struct list<
+ T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+ typedef typename list8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8
+ >
+struct list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+ typedef typename list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ >
+struct list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+ typedef typename list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ , typename T10
+ >
+struct list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+ typedef typename list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+ , na, na, na, na
+ >
+ : list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+ typedef typename list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+ , na, na, na, na
+ >
+ : list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+ typedef typename list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+ , na, na, na, na
+ >
+ : list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+ typedef typename list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+ , na, na, na, na
+ >
+ : list15<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ >
+{
+ typedef typename list15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, na, na, na, na
+ >
+ : list16<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15
+ >
+{
+ typedef typename list16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, na, na, na
+ >
+ : list17<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16
+ >
+{
+ typedef typename list17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, na, na
+ >
+ : list18<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17
+ >
+{
+ typedef typename list18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, na
+ >
+ : list19<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18
+ >
+{
+ typedef typename list19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ , typename T10, typename T11, typename T12, typename T13, typename T14
+ , typename T15, typename T16, typename T17, typename T18, typename T19
+ >
+struct list
+ : list20<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, T19
+ >
+{
+ typedef typename list20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc/list_c.hpp b/boost/boost/mpl/aux_/preprocessed/bcc/list_c.hpp
new file mode 100644
index 00000000000..0b48a7f8e11
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc/list_c.hpp
@@ -0,0 +1,328 @@
+
+// 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_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+ , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+ , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+ , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+ , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+ , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+ , long C18 = LONG_MAX, long C19 = LONG_MAX
+ >
+struct list_c;
+
+template<
+ typename T
+ >
+struct list_c<
+ T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list0_c<T>
+{
+ typedef typename list0_c<T>::type type;
+};
+
+template<
+ typename T, long C0
+ >
+struct list_c<
+ T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list1_c< T,C0 >
+{
+ typedef typename list1_c< T,C0 >::type type;
+};
+
+template<
+ typename T, long C0, long C1
+ >
+struct list_c<
+ T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list2_c< T,C0,C1 >
+{
+ typedef typename list2_c< T,C0,C1 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2
+ >
+struct list_c<
+ T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list3_c< T,C0,C1,C2 >
+{
+ typedef typename list3_c< T,C0,C1,C2 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3
+ >
+struct list_c<
+ T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list4_c< T,C0,C1,C2,C3 >
+{
+ typedef typename list4_c< T,C0,C1,C2,C3 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list5_c< T,C0,C1,C2,C3,C4 >
+{
+ typedef typename list5_c< T,C0,C1,C2,C3,C4 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list6_c< T,C0,C1,C2,C3,C4,C5 >
+{
+ typedef typename list6_c< T,C0,C1,C2,C3,C4,C5 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list7_c< T,C0,C1,C2,C3,C4,C5,C6 >
+{
+ typedef typename list7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX
+ >
+ : list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >
+{
+ typedef typename list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX
+ >
+ : list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >
+{
+ typedef typename list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX
+ >
+ : list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >
+{
+ typedef typename list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >
+{
+ typedef typename list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >
+{
+ typedef typename list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >
+{
+ typedef typename list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list14_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+ >
+{
+ typedef typename list14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list15_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ >
+{
+ typedef typename list15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list16_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15
+ >
+{
+ typedef typename list16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list17_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16
+ >
+{
+ typedef typename list17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, LONG_MAX, LONG_MAX
+ >
+ : list18_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17
+ >
+{
+ typedef typename list18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, C18, LONG_MAX
+ >
+ : list19_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, C18
+ >
+{
+ typedef typename list19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+struct list_c
+ : list20_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, C18, C19
+ >
+{
+ typedef typename list20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc/map.hpp b/boost/boost/mpl/aux_/preprocessed/bcc/map.hpp
new file mode 100644
index 00000000000..837e0137718
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc/map.hpp
@@ -0,0 +1,323 @@
+
+// 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/map.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+ , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+ , typename T12 = na, typename T13 = na, typename T14 = na
+ , typename T15 = na, typename T16 = na, typename T17 = na
+ , typename T18 = na, typename T19 = na
+ >
+struct map;
+
+template<
+
+ >
+struct map<
+ na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map0< >
+{
+ typedef map0< >::type type;
+};
+
+template<
+ typename T0
+ >
+struct map<
+ T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map1<T0>
+{
+ typedef typename map1<T0>::type type;
+};
+
+template<
+ typename T0, typename T1
+ >
+struct map<
+ T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map2< T0,T1 >
+{
+ typedef typename map2< T0,T1 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2
+ >
+struct map<
+ T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map3< T0,T1,T2 >
+{
+ typedef typename map3< T0,T1,T2 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3
+ >
+struct map<
+ T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map4< T0,T1,T2,T3 >
+{
+ typedef typename map4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ >
+struct map<
+ T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map5< T0,T1,T2,T3,T4 >
+{
+ typedef typename map5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct map<
+ T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map6< T0,T1,T2,T3,T4,T5 >
+{
+ typedef typename map6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6
+ >
+struct map<
+ T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map7< T0,T1,T2,T3,T4,T5,T6 >
+{
+ typedef typename map7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7
+ >
+struct map<
+ T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+ typedef typename map8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8
+ >
+struct map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+ typedef typename map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ >
+struct map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+ typedef typename map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ , typename T10
+ >
+struct map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+ typedef typename map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+ , na, na, na, na
+ >
+ : map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+ typedef typename map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+ , na, na, na, na
+ >
+ : map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+ typedef typename map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+ , na, na, na, na
+ >
+ : map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+ typedef typename map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+ , na, na, na, na
+ >
+ : map15<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ >
+{
+ typedef typename map15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, na, na, na, na
+ >
+ : map16<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15
+ >
+{
+ typedef typename map16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, na, na, na
+ >
+ : map17<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16
+ >
+{
+ typedef typename map17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, na, na
+ >
+ : map18<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17
+ >
+{
+ typedef typename map18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, na
+ >
+ : map19<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18
+ >
+{
+ typedef typename map19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+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 map
+ : map20<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, T19
+ >
+{
+ typedef typename map20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc/minus.hpp b/boost/boost/mpl/aux_/preprocessed/bcc/minus.hpp
new file mode 100644
index 00000000000..71d49137660
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc/minus.hpp
@@ -0,0 +1,146 @@
+
+// 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/minus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct minus_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< minus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< minus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct minus_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct minus_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct minus_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct minus_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct minus
+ : minus< minus< minus< minus< N1,N2 >, N3>, N4>, N5>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , minus
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3, typename N4
+ >
+struct minus< N1,N2,N3,N4,na >
+
+ : minus< minus< minus< N1,N2 >, N3>, N4>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , minus
+ , ( N1, N2, N3, N4, na )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3
+ >
+struct minus< N1,N2,N3,na,na >
+
+ : minus< minus< N1,N2 >, N3>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , minus
+ , ( N1, N2, N3, na, na )
+ )
+};
+
+template<
+ typename N1, typename N2
+ >
+struct minus< N1,N2,na,na,na >
+ : minus_impl<
+ typename minus_tag<N1>::type
+ , typename minus_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , minus
+ , ( N1, N2, na, na, na )
+ )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, minus)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct minus_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ - BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc/modulus.hpp b/boost/boost/mpl/aux_/preprocessed/bcc/modulus.hpp
new file mode 100644
index 00000000000..224b34930c9
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc/modulus.hpp
@@ -0,0 +1,101 @@
+
+// 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/modulus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct modulus_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< modulus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< modulus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct modulus_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct modulus_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct modulus_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct modulus_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct modulus
+
+ : modulus_impl<
+ typename modulus_tag<N1>::type
+ , typename modulus_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, modulus, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, modulus)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct modulus_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ % BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc/not_equal_to.hpp b/boost/boost/mpl/aux_/preprocessed/bcc/not_equal_to.hpp
new file mode 100644
index 00000000000..98b21b1e22d
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc/not_equal_to.hpp
@@ -0,0 +1,94 @@
+
+// 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/not_equal_to.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct not_equal_to_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< not_equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< not_equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct not_equal_to_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct not_equal_to_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct not_equal_to_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct not_equal_to_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct not_equal_to
+
+ : not_equal_to_impl<
+ typename not_equal_to_tag<N1>::type
+ , typename not_equal_to_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, not_equal_to, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, not_equal_to)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct not_equal_to_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value != BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc/or.hpp b/boost/boost/mpl/aux_/preprocessed/bcc/or.hpp
new file mode 100644
index 00000000000..31e1aaa4e60
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc/or.hpp
@@ -0,0 +1,69 @@
+
+// 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/or.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template< bool C_, typename T1, typename T2, typename T3, typename T4 >
+struct or_impl
+ : true_
+{
+};
+
+template< typename T1, typename T2, typename T3, typename T4 >
+struct or_impl< false,T1,T2,T3,T4 >
+ : or_impl<
+ BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+ , T2, T3, T4
+ , false_
+ >
+{
+};
+
+template<>
+struct or_impl<
+ false
+ , false_, false_, false_, false_
+ >
+ : false_
+{
+};
+
+} // namespace aux
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(T1)
+ , typename BOOST_MPL_AUX_NA_PARAM(T2)
+ , typename T3 = false_, typename T4 = false_, typename T5 = false_
+ >
+struct or_
+
+ : aux::or_impl<
+ BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+ , T2, T3, T4, T5
+ >
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , or_
+ , ( T1, T2, T3, T4, T5)
+ )
+};
+
+BOOST_MPL_AUX_NA_SPEC2(
+ 2
+ , 5
+ , or_
+ )
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc/placeholders.hpp b/boost/boost/mpl/aux_/preprocessed/bcc/placeholders.hpp
new file mode 100644
index 00000000000..ff97364b9ba
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc/placeholders.hpp
@@ -0,0 +1,105 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+// Copyright Peter Dimov 2001-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)
+//
+
+// Preprocessed version of "boost/mpl/placeholders.hpp" header
+// -- DO NOT modify by hand!
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg< -1 > _;
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_;
+}
+
+}}
+
+/// agurt, 17/mar/02: one more placeholder for the last 'apply#'
+/// specialization
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<1> _1;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_1)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_1;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<2> _2;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_2)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_2;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<3> _3;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_3)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_3;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<4> _4;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_4)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_4;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<5> _5;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_5)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_5;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<6> _6;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_6)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_6;
+}
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc/plus.hpp b/boost/boost/mpl/aux_/preprocessed/bcc/plus.hpp
new file mode 100644
index 00000000000..a9f6ee79a5c
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc/plus.hpp
@@ -0,0 +1,146 @@
+
+// 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/plus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct plus_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< plus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< plus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct plus_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct plus_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct plus_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct plus_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct plus
+ : plus< plus< plus< plus< N1,N2 >, N3>, N4>, N5>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , plus
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3, typename N4
+ >
+struct plus< N1,N2,N3,N4,na >
+
+ : plus< plus< plus< N1,N2 >, N3>, N4>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , plus
+ , ( N1, N2, N3, N4, na )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3
+ >
+struct plus< N1,N2,N3,na,na >
+
+ : plus< plus< N1,N2 >, N3>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , plus
+ , ( N1, N2, N3, na, na )
+ )
+};
+
+template<
+ typename N1, typename N2
+ >
+struct plus< N1,N2,na,na,na >
+ : plus_impl<
+ typename plus_tag<N1>::type
+ , typename plus_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , plus
+ , ( N1, N2, na, na, na )
+ )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, plus)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct plus_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ + BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc/quote.hpp b/boost/boost/mpl/aux_/preprocessed/bcc/quote.hpp
new file mode 100644
index 00000000000..e7a7f001961
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc/quote.hpp
@@ -0,0 +1,11 @@
+
+// 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/quote.hpp" header
+// -- DO NOT modify by hand!
+
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc/reverse_fold_impl.hpp b/boost/boost/mpl/aux_/preprocessed/bcc/reverse_fold_impl.hpp
new file mode 100644
index 00000000000..7a07414adff
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc/reverse_fold_impl.hpp
@@ -0,0 +1,295 @@
+
+// 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/aux_/reverse_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+ long N
+ , typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl;
+
+template< long N >
+struct reverse_fold_chunk;
+
+template<> struct reverse_fold_chunk<0>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef fwd_state0 bkwd_state0;
+ typedef bkwd_state0 state;
+ typedef iter0 iterator;
+ };
+};
+
+template<> struct reverse_fold_chunk<1>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+
+
+ typedef fwd_state1 bkwd_state1;
+ typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+ typedef bkwd_state0 state;
+ typedef iter1 iterator;
+ };
+};
+
+template<> struct reverse_fold_chunk<2>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+
+
+ typedef fwd_state2 bkwd_state2;
+ typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+ typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter2 iterator;
+ };
+};
+
+template<> struct reverse_fold_chunk<3>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+
+
+ typedef fwd_state3 bkwd_state3;
+ typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+ typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+ typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter3 iterator;
+ };
+};
+
+template<> struct reverse_fold_chunk<4>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef fwd_state4 bkwd_state4;
+ typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
+ typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+ typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+ typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter4 iterator;
+ };
+};
+
+template< long N >
+struct reverse_fold_chunk
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef reverse_fold_impl<
+ ( (N - 4) < 0 ? 0 : N - 4 )
+ , iter4
+ , Last
+ , fwd_state4
+ , BackwardOp
+ , ForwardOp
+ > nested_chunk;
+
+ typedef typename nested_chunk::state bkwd_state4;
+ typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
+ typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+ typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+ typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef typename nested_chunk::iterator iterator;
+ };
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_step;
+
+template<
+ typename Last
+ , typename State
+ >
+struct reverse_fold_null_step
+{
+ typedef Last iterator;
+ typedef State state;
+};
+
+template<>
+struct reverse_fold_chunk< -1 >
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef typename if_<
+ typename is_same< First,Last >::type
+ , reverse_fold_null_step< Last,State >
+ , reverse_fold_step< First,Last,State,BackwardOp,ForwardOp >
+ >::type res_;
+
+ typedef typename res_::state state;
+ typedef typename res_::iterator iterator;
+ };
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_step
+{
+ typedef reverse_fold_chunk< -1 >::template result_<
+ typename mpl::next<First>::type
+ , Last
+ , typename apply2<ForwardOp,State, typename deref<First>::type>::type
+ , BackwardOp
+ , ForwardOp
+ > nested_step;
+
+ typedef typename apply2<
+ BackwardOp
+ , typename nested_step::state
+ , typename deref<First>::type
+ >::type state;
+
+ typedef typename nested_step::iterator iterator;
+};
+
+template<
+ long N
+ , typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl
+ : reverse_fold_chunk<N>
+ ::template result_< First,Last,State,BackwardOp,ForwardOp >
+{
+};
+
+}}}
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc/reverse_iter_fold_impl.hpp b/boost/boost/mpl/aux_/preprocessed/bcc/reverse_iter_fold_impl.hpp
new file mode 100644
index 00000000000..39a4057b77d
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc/reverse_iter_fold_impl.hpp
@@ -0,0 +1,295 @@
+
+// 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/aux_/reverse_iter_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+ long N
+ , typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl;
+
+template< long N >
+struct reverse_iter_fold_chunk;
+
+template<> struct reverse_iter_fold_chunk<0>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef fwd_state0 bkwd_state0;
+ typedef bkwd_state0 state;
+ typedef iter0 iterator;
+ };
+};
+
+template<> struct reverse_iter_fold_chunk<1>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+
+
+ typedef fwd_state1 bkwd_state1;
+ typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+ typedef bkwd_state0 state;
+ typedef iter1 iterator;
+ };
+};
+
+template<> struct reverse_iter_fold_chunk<2>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+
+
+ typedef fwd_state2 bkwd_state2;
+ typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+ typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter2 iterator;
+ };
+};
+
+template<> struct reverse_iter_fold_chunk<3>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+
+
+ typedef fwd_state3 bkwd_state3;
+ typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+ typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+ typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter3 iterator;
+ };
+};
+
+template<> struct reverse_iter_fold_chunk<4>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef fwd_state4 bkwd_state4;
+ typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;
+ typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+ typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+ typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter4 iterator;
+ };
+};
+
+template< long N >
+struct reverse_iter_fold_chunk
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef reverse_iter_fold_impl<
+ ( (N - 4) < 0 ? 0 : N - 4 )
+ , iter4
+ , Last
+ , fwd_state4
+ , BackwardOp
+ , ForwardOp
+ > nested_chunk;
+
+ typedef typename nested_chunk::state bkwd_state4;
+ typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;
+ typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+ typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+ typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef typename nested_chunk::iterator iterator;
+ };
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_step;
+
+template<
+ typename Last
+ , typename State
+ >
+struct reverse_iter_fold_null_step
+{
+ typedef Last iterator;
+ typedef State state;
+};
+
+template<>
+struct reverse_iter_fold_chunk< -1 >
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef typename if_<
+ typename is_same< First,Last >::type
+ , reverse_iter_fold_null_step< Last,State >
+ , reverse_iter_fold_step< First,Last,State,BackwardOp,ForwardOp >
+ >::type res_;
+
+ typedef typename res_::state state;
+ typedef typename res_::iterator iterator;
+ };
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_step
+{
+ typedef reverse_iter_fold_chunk< -1 >::template result_<
+ typename mpl::next<First>::type
+ , Last
+ , typename apply2< ForwardOp,State,First >::type
+ , BackwardOp
+ , ForwardOp
+ > nested_step;
+
+ typedef typename apply2<
+ BackwardOp
+ , typename nested_step::state
+ , First
+ >::type state;
+
+ typedef typename nested_step::iterator iterator;
+};
+
+template<
+ long N
+ , typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl
+ : reverse_iter_fold_chunk<N>
+ ::template result_< First,Last,State,BackwardOp,ForwardOp >
+{
+};
+
+}}}
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc/set.hpp b/boost/boost/mpl/aux_/preprocessed/bcc/set.hpp
new file mode 100644
index 00000000000..5721922e111
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc/set.hpp
@@ -0,0 +1,323 @@
+
+// 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/set.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+ , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+ , typename T12 = na, typename T13 = na, typename T14 = na
+ , typename T15 = na, typename T16 = na, typename T17 = na
+ , typename T18 = na, typename T19 = na
+ >
+struct set;
+
+template<
+
+ >
+struct set<
+ na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set0< >
+{
+ typedef set0< >::type type;
+};
+
+template<
+ typename T0
+ >
+struct set<
+ T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set1<T0>
+{
+ typedef typename set1<T0>::type type;
+};
+
+template<
+ typename T0, typename T1
+ >
+struct set<
+ T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set2< T0,T1 >
+{
+ typedef typename set2< T0,T1 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2
+ >
+struct set<
+ T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set3< T0,T1,T2 >
+{
+ typedef typename set3< T0,T1,T2 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3
+ >
+struct set<
+ T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set4< T0,T1,T2,T3 >
+{
+ typedef typename set4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ >
+struct set<
+ T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set5< T0,T1,T2,T3,T4 >
+{
+ typedef typename set5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct set<
+ T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set6< T0,T1,T2,T3,T4,T5 >
+{
+ typedef typename set6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6
+ >
+struct set<
+ T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set7< T0,T1,T2,T3,T4,T5,T6 >
+{
+ typedef typename set7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7
+ >
+struct set<
+ T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+ typedef typename set8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8
+ >
+struct set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+ typedef typename set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ >
+struct set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+ typedef typename set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ , typename T10
+ >
+struct set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+ typedef typename set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+ , na, na, na, na
+ >
+ : set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+ typedef typename set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+ , na, na, na, na
+ >
+ : set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+ typedef typename set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+ , na, na, na, na
+ >
+ : set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+ typedef typename set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+ , na, na, na, na
+ >
+ : set15<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ >
+{
+ typedef typename set15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, na, na, na, na
+ >
+ : set16<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15
+ >
+{
+ typedef typename set16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, na, na, na
+ >
+ : set17<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16
+ >
+{
+ typedef typename set17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, na, na
+ >
+ : set18<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17
+ >
+{
+ typedef typename set18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, na
+ >
+ : set19<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18
+ >
+{
+ typedef typename set19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+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 set
+ : set20<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, T19
+ >
+{
+ typedef typename set20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc/set_c.hpp b/boost/boost/mpl/aux_/preprocessed/bcc/set_c.hpp
new file mode 100644
index 00000000000..cbeb932c13d
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc/set_c.hpp
@@ -0,0 +1,328 @@
+
+// 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/set_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+ , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+ , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+ , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+ , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+ , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+ , long C18 = LONG_MAX, long C19 = LONG_MAX
+ >
+struct set_c;
+
+template<
+ typename T
+ >
+struct set_c<
+ T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set0_c<T>
+{
+ typedef typename set0_c<T>::type type;
+};
+
+template<
+ typename T, long C0
+ >
+struct set_c<
+ T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set1_c< T,C0 >
+{
+ typedef typename set1_c< T,C0 >::type type;
+};
+
+template<
+ typename T, long C0, long C1
+ >
+struct set_c<
+ T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set2_c< T,C0,C1 >
+{
+ typedef typename set2_c< T,C0,C1 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2
+ >
+struct set_c<
+ T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set3_c< T,C0,C1,C2 >
+{
+ typedef typename set3_c< T,C0,C1,C2 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3
+ >
+struct set_c<
+ T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set4_c< T,C0,C1,C2,C3 >
+{
+ typedef typename set4_c< T,C0,C1,C2,C3 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set5_c< T,C0,C1,C2,C3,C4 >
+{
+ typedef typename set5_c< T,C0,C1,C2,C3,C4 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set6_c< T,C0,C1,C2,C3,C4,C5 >
+{
+ typedef typename set6_c< T,C0,C1,C2,C3,C4,C5 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set7_c< T,C0,C1,C2,C3,C4,C5,C6 >
+{
+ typedef typename set7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX
+ >
+ : set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >
+{
+ typedef typename set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX
+ >
+ : set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >
+{
+ typedef typename set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX
+ >
+ : set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >
+{
+ typedef typename set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >
+{
+ typedef typename set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >
+{
+ typedef typename set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >
+{
+ typedef typename set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set14_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+ >
+{
+ typedef typename set14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set15_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ >
+{
+ typedef typename set15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set16_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15
+ >
+{
+ typedef typename set16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set17_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16
+ >
+{
+ typedef typename set17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, LONG_MAX, LONG_MAX
+ >
+ : set18_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17
+ >
+{
+ typedef typename set18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, C18, LONG_MAX
+ >
+ : set19_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, C18
+ >
+{
+ typedef typename set19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+struct set_c
+ : set20_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, C18, C19
+ >
+{
+ typedef typename set20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc/shift_left.hpp b/boost/boost/mpl/aux_/preprocessed/bcc/shift_left.hpp
new file mode 100644
index 00000000000..b5b181ce196
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc/shift_left.hpp
@@ -0,0 +1,99 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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)
+//
+
+// Preprocessed version of "boost/mpl/shift_left.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct shift_left_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< shift_left_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< shift_left_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct shift_left_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct shift_left_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct shift_left_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct shift_left_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct shift_left
+
+ : shift_left_impl<
+ typename shift_left_tag<N1>::type
+ , typename shift_left_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_left, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_left)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct shift_left_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N, typename S > struct apply
+
+ : integral_c<
+ typename N::value_type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N)::value
+ << BOOST_MPL_AUX_VALUE_WKND(S)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc/shift_right.hpp b/boost/boost/mpl/aux_/preprocessed/bcc/shift_right.hpp
new file mode 100644
index 00000000000..f7a342e989a
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc/shift_right.hpp
@@ -0,0 +1,99 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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)
+//
+
+// Preprocessed version of "boost/mpl/shift_right.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct shift_right_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< shift_right_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< shift_right_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct shift_right_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct shift_right_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct shift_right_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct shift_right_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct shift_right
+
+ : shift_right_impl<
+ typename shift_right_tag<N1>::type
+ , typename shift_right_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_right, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_right)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct shift_right_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N, typename S > struct apply
+
+ : integral_c<
+ typename N::value_type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N)::value
+ >> BOOST_MPL_AUX_VALUE_WKND(S)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc/template_arity.hpp b/boost/boost/mpl/aux_/preprocessed/bcc/template_arity.hpp
new file mode 100644
index 00000000000..1164f0f8c27
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc/template_arity.hpp
@@ -0,0 +1,40 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/aux_/template_arity.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+template< bool >
+struct template_arity_impl
+{
+ template< typename F > struct result_
+ : mpl::int_< -1 >
+ {
+ };
+};
+
+template<>
+struct template_arity_impl<true>
+{
+ template< typename F > struct result_
+ : F::arity
+ {
+ };
+};
+
+template< typename F >
+struct template_arity
+ : template_arity_impl< ::boost::mpl::aux::has_rebind<F>::value >
+ ::template result_<F>
+{
+};
+
+}}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc/times.hpp b/boost/boost/mpl/aux_/preprocessed/bcc/times.hpp
new file mode 100644
index 00000000000..cb97cc4e132
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc/times.hpp
@@ -0,0 +1,146 @@
+
+// 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/times.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct times_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< times_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< times_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct times_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct times_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct times_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct times_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct times
+ : times< times< times< times< N1,N2 >, N3>, N4>, N5>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , times
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3, typename N4
+ >
+struct times< N1,N2,N3,N4,na >
+
+ : times< times< times< N1,N2 >, N3>, N4>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , times
+ , ( N1, N2, N3, N4, na )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3
+ >
+struct times< N1,N2,N3,na,na >
+
+ : times< times< N1,N2 >, N3>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , times
+ , ( N1, N2, N3, na, na )
+ )
+};
+
+template<
+ typename N1, typename N2
+ >
+struct times< N1,N2,na,na,na >
+ : times_impl<
+ typename times_tag<N1>::type
+ , typename times_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , times
+ , ( N1, N2, na, na, na )
+ )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, times)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct times_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ * BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc/unpack_args.hpp b/boost/boost/mpl/aux_/preprocessed/bcc/unpack_args.hpp
new file mode 100644
index 00000000000..ef7c2b016ef
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc/unpack_args.hpp
@@ -0,0 +1,97 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/unpack_args.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template< int size, typename F, typename Args >
+struct unpack_args_impl;
+
+template< typename F, typename Args >
+struct unpack_args_impl< 0,F,Args >
+ : apply0<
+ F
+ >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 1,F,Args >
+ : apply1<
+ F
+ , typename at_c< Args,0 >::type
+ >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 2,F,Args >
+ : apply2<
+ F
+ , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+ >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 3,F,Args >
+ : apply3<
+ F
+ , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+ , typename at_c< Args,2 >::type
+ >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 4,F,Args >
+ : apply4<
+ F
+ , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+ , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type
+ >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 5,F,Args >
+ : apply5<
+ F
+ , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+ , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type
+ , typename at_c< Args,4 >::type
+ >
+{
+};
+
+}
+
+template<
+ typename F
+ >
+struct unpack_args
+{
+ template< typename Args > struct apply
+ {
+ typedef typename aux::unpack_args_impl<
+ size<Args>::value
+ , F
+ , Args
+ >::type type;
+
+ };
+};
+
+BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args)
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc/vector.hpp b/boost/boost/mpl/aux_/preprocessed/bcc/vector.hpp
new file mode 100644
index 00000000000..bfa9565a537
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc/vector.hpp
@@ -0,0 +1,323 @@
+
+// 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/vector.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+ , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+ , typename T12 = na, typename T13 = na, typename T14 = na
+ , typename T15 = na, typename T16 = na, typename T17 = na
+ , typename T18 = na, typename T19 = na
+ >
+struct vector;
+
+template<
+
+ >
+struct vector<
+ na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector0< >
+{
+ typedef vector0< >::type type;
+};
+
+template<
+ typename T0
+ >
+struct vector<
+ T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector1<T0>
+{
+ typedef typename vector1<T0>::type type;
+};
+
+template<
+ typename T0, typename T1
+ >
+struct vector<
+ T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector2< T0,T1 >
+{
+ typedef typename vector2< T0,T1 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2
+ >
+struct vector<
+ T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector3< T0,T1,T2 >
+{
+ typedef typename vector3< T0,T1,T2 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3
+ >
+struct vector<
+ T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector4< T0,T1,T2,T3 >
+{
+ typedef typename vector4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ >
+struct vector<
+ T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector5< T0,T1,T2,T3,T4 >
+{
+ typedef typename vector5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct vector<
+ T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector6< T0,T1,T2,T3,T4,T5 >
+{
+ typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6
+ >
+struct vector<
+ T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector7< T0,T1,T2,T3,T4,T5,T6 >
+{
+ typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7
+ >
+struct vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+ typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8
+ >
+struct vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+ typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ >
+struct vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+ typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ , typename T10
+ >
+struct vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+ typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+ , na, na, na, na
+ >
+ : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+ typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+ , na, na, na, na
+ >
+ : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+ typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+ , na, na, na, na
+ >
+ : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+ typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+ , na, na, na, na
+ >
+ : vector15<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ >
+{
+ typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, na, na, na, na
+ >
+ : vector16<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15
+ >
+{
+ typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, na, na, na
+ >
+ : vector17<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16
+ >
+{
+ typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, na, na
+ >
+ : vector18<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17
+ >
+{
+ typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, na
+ >
+ : vector19<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18
+ >
+{
+ typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+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 vector
+ : vector20<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, T19
+ >
+{
+ typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc/vector_c.hpp b/boost/boost/mpl/aux_/preprocessed/bcc/vector_c.hpp
new file mode 100644
index 00000000000..0f1560d7f13
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc/vector_c.hpp
@@ -0,0 +1,309 @@
+
+// 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/vector_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+ , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+ , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+ , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+ , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+ , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+ , long C18 = LONG_MAX, long C19 = LONG_MAX
+ >
+struct vector_c;
+
+template<
+ typename T
+ >
+struct vector_c<
+ T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector0_c<T>
+{
+ typedef typename vector0_c<T>::type type;
+};
+
+template<
+ typename T, long C0
+ >
+struct vector_c<
+ T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector1_c< T, T(C0) >
+{
+ typedef typename vector1_c< T, T(C0) >::type type;
+};
+
+template<
+ typename T, long C0, long C1
+ >
+struct vector_c<
+ T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector2_c< T, T(C0), T(C1) >
+{
+ typedef typename vector2_c< T, T(C0), T(C1) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2
+ >
+struct vector_c<
+ T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector3_c< T, T(C0), T(C1), T(C2) >
+{
+ typedef typename vector3_c< T, T(C0), T(C1), T(C2) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector4_c< T, T(C0), T(C1), T(C2), T(C3) >
+{
+ typedef typename vector4_c< T, T(C0), T(C1), T(C2), T(C3) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) >
+{
+ typedef typename vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) >
+{
+ typedef typename vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) >
+{
+ typedef typename vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX
+ >
+ : vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) >
+{
+ typedef typename vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX
+ >
+ : vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) >
+{
+ typedef typename vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX
+ >
+ : vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) >
+{
+ typedef typename vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) >
+{
+ typedef typename vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector12_c< 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) >
+{
+ typedef typename vector12_c< 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) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector13_c< 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) >
+{
+ typedef typename vector13_c< 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) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector14_c< 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) >
+{
+ typedef typename vector14_c< 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) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector15_c< 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) >
+{
+ typedef typename vector15_c< 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) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector16_c< 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) >
+{
+ typedef typename vector16_c< 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) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector17_c< 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) >
+{
+ typedef typename vector17_c< 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) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, LONG_MAX, LONG_MAX
+ >
+ : vector18_c< 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) >
+{
+ typedef typename vector18_c< 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) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, C18, LONG_MAX
+ >
+ : vector19_c< 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) >
+{
+ typedef typename vector19_c< 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) >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+struct vector_c
+ : vector20_c< 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) >
+{
+ typedef typename vector20_c< 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) >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc551/advance_backward.hpp b/boost/boost/mpl/aux_/preprocessed/bcc551/advance_backward.hpp
new file mode 100644
index 00000000000..26de94cea1a
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc551/advance_backward.hpp
@@ -0,0 +1,97 @@
+
+// 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/aux_/advance_backward.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+template< long N > struct advance_backward;
+template<>
+struct advance_backward<0>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef iter0 type;
+ };
+};
+
+template<>
+struct advance_backward<1>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename prior<iter0>::type iter1;
+ typedef iter1 type;
+ };
+};
+
+template<>
+struct advance_backward<2>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename prior<iter0>::type iter1;
+ typedef typename prior<iter1>::type iter2;
+ typedef iter2 type;
+ };
+};
+
+template<>
+struct advance_backward<3>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename prior<iter0>::type iter1;
+ typedef typename prior<iter1>::type iter2;
+ typedef typename prior<iter2>::type iter3;
+ typedef iter3 type;
+ };
+};
+
+template<>
+struct advance_backward<4>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename prior<iter0>::type iter1;
+ typedef typename prior<iter1>::type iter2;
+ typedef typename prior<iter2>::type iter3;
+ typedef typename prior<iter3>::type iter4;
+ typedef iter4 type;
+ };
+};
+
+template< long N >
+struct advance_backward
+{
+ template< typename Iterator > struct apply
+ {
+ typedef typename apply_wrap1<
+ advance_backward<4>
+ , Iterator
+ >::type chunk_result_;
+
+ typedef typename apply_wrap1<
+ advance_backward<(
+ (N - 4) < 0
+ ? 0
+ : N - 4
+ )>
+ , chunk_result_
+ >::type type;
+ };
+};
+
+}}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc551/advance_forward.hpp b/boost/boost/mpl/aux_/preprocessed/bcc551/advance_forward.hpp
new file mode 100644
index 00000000000..b137cc72af1
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc551/advance_forward.hpp
@@ -0,0 +1,97 @@
+
+// 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/aux_/advance_forward.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+template< long N > struct advance_forward;
+template<>
+struct advance_forward<0>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef iter0 type;
+ };
+};
+
+template<>
+struct advance_forward<1>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename next<iter0>::type iter1;
+ typedef iter1 type;
+ };
+};
+
+template<>
+struct advance_forward<2>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename next<iter0>::type iter1;
+ typedef typename next<iter1>::type iter2;
+ typedef iter2 type;
+ };
+};
+
+template<>
+struct advance_forward<3>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename next<iter0>::type iter1;
+ typedef typename next<iter1>::type iter2;
+ typedef typename next<iter2>::type iter3;
+ typedef iter3 type;
+ };
+};
+
+template<>
+struct advance_forward<4>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename next<iter0>::type iter1;
+ typedef typename next<iter1>::type iter2;
+ typedef typename next<iter2>::type iter3;
+ typedef typename next<iter3>::type iter4;
+ typedef iter4 type;
+ };
+};
+
+template< long N >
+struct advance_forward
+{
+ template< typename Iterator > struct apply
+ {
+ typedef typename apply_wrap1<
+ advance_forward<4>
+ , Iterator
+ >::type chunk_result_;
+
+ typedef typename apply_wrap1<
+ advance_forward<(
+ (N - 4) < 0
+ ? 0
+ : N - 4
+ )>
+ , chunk_result_
+ >::type type;
+ };
+};
+
+}}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc551/and.hpp b/boost/boost/mpl/aux_/preprocessed/bcc551/and.hpp
new file mode 100644
index 00000000000..010ad1fc849
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc551/and.hpp
@@ -0,0 +1,69 @@
+
+// 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/and.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template< bool C_, typename T1, typename T2, typename T3, typename T4 >
+struct and_impl
+ : false_
+{
+};
+
+template< typename T1, typename T2, typename T3, typename T4 >
+struct and_impl< true,T1,T2,T3,T4 >
+ : and_impl<
+ BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+ , T2, T3, T4
+ , true_
+ >
+{
+};
+
+template<>
+struct and_impl<
+ true
+ , true_, true_, true_, true_
+ >
+ : true_
+{
+};
+
+} // namespace aux
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(T1)
+ , typename BOOST_MPL_AUX_NA_PARAM(T2)
+ , typename T3 = true_, typename T4 = true_, typename T5 = true_
+ >
+struct and_
+
+ : aux::and_impl<
+ BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+ , T2, T3, T4, T5
+ >
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , and_
+ , ( T1, T2, T3, T4, T5)
+ )
+};
+
+BOOST_MPL_AUX_NA_SPEC2(
+ 2
+ , 5
+ , and_
+ )
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc551/apply.hpp b/boost/boost/mpl/aux_/preprocessed/bcc551/apply.hpp
new file mode 100644
index 00000000000..e08eaccf03a
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc551/apply.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/apply.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename F
+ >
+struct apply0
+
+ : apply_wrap0<
+ typename lambda<F>::type
+
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 1
+ , apply0
+ , (F )
+ )
+};
+
+template<
+ typename F
+ >
+struct apply< F,na,na,na,na,na >
+ : apply0<F>
+{
+};
+
+template<
+ typename F, typename T1
+ >
+struct apply1
+
+ : apply_wrap1<
+ typename lambda<F>::type
+ , T1
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 2
+ , apply1
+ , (F, T1)
+ )
+};
+
+template<
+ typename F, typename T1
+ >
+struct apply< F,T1,na,na,na,na >
+ : apply1< F,T1 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct apply2
+
+ : apply_wrap2<
+ typename lambda<F>::type
+ , T1, T2
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 3
+ , apply2
+ , (F, T1, T2)
+ )
+};
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct apply< F,T1,T2,na,na,na >
+ : apply2< F,T1,T2 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct apply3
+
+ : apply_wrap3<
+ typename lambda<F>::type
+ , T1, T2, T3
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 4
+ , apply3
+ , (F, T1, T2, T3)
+ )
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct apply< F,T1,T2,T3,na,na >
+ : apply3< F,T1,T2,T3 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct apply4
+
+ : apply_wrap4<
+ typename lambda<F>::type
+ , T1, T2, T3, T4
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , apply4
+ , (F, T1, T2, T3, T4)
+ )
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct apply< F,T1,T2,T3,T4,na >
+ : apply4< F,T1,T2,T3,T4 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct apply5
+
+ : apply_wrap5<
+ typename lambda<F>::type
+ , T1, T2, T3, T4, T5
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 6
+ , apply5
+ , (F, T1, T2, T3, T4, T5)
+ )
+};
+
+/// primary template (not a specialization!)
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct apply
+ : apply5< F,T1,T2,T3,T4,T5 >
+{
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc551/apply_fwd.hpp b/boost/boost/mpl/aux_/preprocessed/bcc551/apply_fwd.hpp
new file mode 100644
index 00000000000..b2ed5d51301
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc551/apply_fwd.hpp
@@ -0,0 +1,52 @@
+
+// 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/apply_fwd.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename F, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na
+ >
+struct apply;
+
+template<
+ typename F
+ >
+struct apply0;
+
+template<
+ typename F, typename T1
+ >
+struct apply1;
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct apply2;
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct apply3;
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct apply4;
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct apply5;
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc551/apply_wrap.hpp b/boost/boost/mpl/aux_/preprocessed/bcc551/apply_wrap.hpp
new file mode 100644
index 00000000000..2ffe7091bc3
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc551/apply_wrap.hpp
@@ -0,0 +1,456 @@
+
+// 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/apply_wrap.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ int N, typename F
+ >
+struct apply_wrap_impl0;
+
+template<
+ typename F
+ >
+struct apply_wrap_impl0<
+ 0
+ , F
+
+ >
+{
+ typedef typename F::template apply<
+
+/// since the defaults are "lost", we have to pass *something* even for nullary
+/// metafunction classes
+ na
+ > type;
+};
+
+template<
+ typename F
+ >
+struct apply_wrap_impl0<
+ 1
+ , F
+
+ >
+{
+ typedef typename F::template apply<
+
+ na
+ > type;
+};
+
+template<
+ typename F
+ >
+struct apply_wrap_impl0<
+ 2
+ , F
+
+ >
+{
+ typedef typename F::template apply<
+
+ na, na
+
+ > type;
+};
+
+template<
+ typename F
+ >
+struct apply_wrap_impl0<
+ 3
+ , F
+
+ >
+{
+ typedef typename F::template apply<
+
+ na, na, na
+
+ > type;
+};
+
+template<
+ typename F
+ >
+struct apply_wrap_impl0<
+ 4
+ , F
+
+ >
+{
+ typedef typename F::template apply<
+
+ na, na, na, na
+
+ > type;
+};
+
+template<
+ typename F
+ >
+struct apply_wrap_impl0<
+ 5
+ , F
+
+ >
+{
+ typedef typename F::template apply<
+
+ na, na, na, na, na
+
+ > type;
+};
+
+template<
+ typename F
+ >
+struct apply_wrap0
+ : apply_wrap_impl0<
+ ::boost::mpl::aux::arity< F,0 >::value
+ , F
+
+ >::type
+{
+};
+
+template<
+ int N, typename F, typename T1
+ >
+struct apply_wrap_impl1;
+
+template<
+ typename F, typename T1
+ >
+struct apply_wrap_impl1<
+ 1
+ , F
+ , T1
+ >
+{
+ typedef typename F::template apply<
+ T1
+ > type;
+};
+
+template<
+ typename F, typename T1
+ >
+struct apply_wrap_impl1<
+ 2
+ , F
+ , T1
+ >
+{
+ typedef typename F::template apply<
+ T1
+ , na
+
+ > type;
+};
+
+template<
+ typename F, typename T1
+ >
+struct apply_wrap_impl1<
+ 3
+ , F
+ , T1
+ >
+{
+ typedef typename F::template apply<
+ T1
+ , na, na
+
+ > type;
+};
+
+template<
+ typename F, typename T1
+ >
+struct apply_wrap_impl1<
+ 4
+ , F
+ , T1
+ >
+{
+ typedef typename F::template apply<
+ T1
+ , na, na, na
+
+ > type;
+};
+
+template<
+ typename F, typename T1
+ >
+struct apply_wrap_impl1<
+ 5
+ , F
+ , T1
+ >
+{
+ typedef typename F::template apply<
+ T1
+ , na, na, na, na
+
+ > type;
+};
+
+template<
+ typename F, typename T1
+ >
+struct apply_wrap1
+ : apply_wrap_impl1<
+ ::boost::mpl::aux::arity< F,1 >::value
+ , F
+ , T1
+ >::type
+{
+};
+
+template<
+ int N, typename F, typename T1, typename T2
+ >
+struct apply_wrap_impl2;
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct apply_wrap_impl2<
+ 2
+ , F
+ , T1, T2
+ >
+{
+ typedef typename F::template apply<
+ T1, T2
+
+ > type;
+};
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct apply_wrap_impl2<
+ 3
+ , F
+ , T1, T2
+ >
+{
+ typedef typename F::template apply<
+ T1, T2
+
+ , na
+
+ > type;
+};
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct apply_wrap_impl2<
+ 4
+ , F
+ , T1, T2
+ >
+{
+ typedef typename F::template apply<
+ T1, T2
+
+ , na, na
+
+ > type;
+};
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct apply_wrap_impl2<
+ 5
+ , F
+ , T1, T2
+ >
+{
+ typedef typename F::template apply<
+ T1, T2
+
+ , na, na, na
+
+ > type;
+};
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct apply_wrap2
+ : apply_wrap_impl2<
+ ::boost::mpl::aux::arity< F,2 >::value
+ , F
+ , T1, T2
+ >::type
+{
+};
+
+template<
+ int N, typename F, typename T1, typename T2, typename T3
+ >
+struct apply_wrap_impl3;
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct apply_wrap_impl3<
+ 3
+ , F
+ , T1, T2, T3
+ >
+{
+ typedef typename F::template apply<
+ T1, T2, T3
+
+ > type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct apply_wrap_impl3<
+ 4
+ , F
+ , T1, T2, T3
+ >
+{
+ typedef typename F::template apply<
+ T1, T2, T3
+
+ , na
+
+ > type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct apply_wrap_impl3<
+ 5
+ , F
+ , T1, T2, T3
+ >
+{
+ typedef typename F::template apply<
+ T1, T2, T3
+
+ , na, na
+
+ > type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct apply_wrap3
+ : apply_wrap_impl3<
+ ::boost::mpl::aux::arity< F,3 >::value
+ , F
+ , T1, T2, T3
+ >::type
+{
+};
+
+template<
+ int N, typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct apply_wrap_impl4;
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct apply_wrap_impl4<
+ 4
+ , F
+ , T1, T2, T3, T4
+ >
+{
+ typedef typename F::template apply<
+ T1, T2, T3, T4
+
+ > type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct apply_wrap_impl4<
+ 5
+ , F
+ , T1, T2, T3, T4
+ >
+{
+ typedef typename F::template apply<
+ T1, T2, T3, T4
+
+ , na
+
+ > type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct apply_wrap4
+ : apply_wrap_impl4<
+ ::boost::mpl::aux::arity< F,4 >::value
+ , F
+ , T1, T2, T3, T4
+ >::type
+{
+};
+
+template<
+ int N, typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct apply_wrap_impl5;
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct apply_wrap_impl5<
+ 5
+ , F
+ , T1, T2, T3, T4, T5
+ >
+{
+ typedef typename F::template apply<
+ T1, T2, T3, T4, T5
+
+ > type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct apply_wrap5
+ : apply_wrap_impl5<
+ ::boost::mpl::aux::arity< F,5 >::value
+ , F
+ , T1, T2, T3, T4, T5
+ >::type
+{
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc551/arg.hpp b/boost/boost/mpl/aux_/preprocessed/bcc551/arg.hpp
new file mode 100644
index 00000000000..6f2f8a80709
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc551/arg.hpp
@@ -0,0 +1,123 @@
+
+// Copyright Peter Dimov 2001-2002
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/arg.hpp" header
+// -- DO NOT modify by hand!
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+template<> struct arg< -1 >
+{
+ BOOST_STATIC_CONSTANT(int, value = -1);
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ typedef U1 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+template<> struct arg<1>
+{
+ BOOST_STATIC_CONSTANT(int, value = 1);
+ typedef arg<2> next;
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ typedef U1 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+template<> struct arg<2>
+{
+ BOOST_STATIC_CONSTANT(int, value = 2);
+ typedef arg<3> next;
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ typedef U2 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+template<> struct arg<3>
+{
+ BOOST_STATIC_CONSTANT(int, value = 3);
+ typedef arg<4> next;
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ typedef U3 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+template<> struct arg<4>
+{
+ BOOST_STATIC_CONSTANT(int, value = 4);
+ typedef arg<5> next;
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ typedef U4 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+template<> struct arg<5>
+{
+ BOOST_STATIC_CONSTANT(int, value = 5);
+ typedef arg<6> next;
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ typedef U5 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+BOOST_MPL_AUX_NONTYPE_ARITY_SPEC(1,int, arg)
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc551/basic_bind.hpp b/boost/boost/mpl/aux_/preprocessed/bcc551/basic_bind.hpp
new file mode 100644
index 00000000000..a29daa0bca6
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc551/basic_bind.hpp
@@ -0,0 +1,306 @@
+
+// Copyright Peter Dimov 2001
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/aux_/basic_bind.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template<
+ typename T, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg
+{
+ typedef T type;
+};
+
+template<
+ int N, typename U1, typename U2, typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >
+{
+ typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;
+};
+
+} // namespace aux
+
+template<
+ typename F
+ >
+struct bind0
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+
+ public:
+ typedef typename apply_wrap0<
+ f_
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg<
+ bind0<F>, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind0<F> f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(1, bind0)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)
+
+template<
+ typename F, typename T1
+ >
+struct bind1
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+
+ public:
+ typedef typename apply_wrap1<
+ f_
+ , typename t1::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename U1, typename U2, typename U3
+ , typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind1< F,T1 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind1< F,T1 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(2, bind1)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct bind2
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+ typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+
+ public:
+ typedef typename apply_wrap2<
+ f_
+ , typename t1::type, typename t2::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename U1, typename U2
+ , typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind2< F,T1,T2 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind2< F,T1,T2 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(3, bind2)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct bind3
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+ typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+ typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+
+ public:
+ typedef typename apply_wrap3<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename U1
+ , typename U2, typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind3< F,T1,T2,T3 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(4, bind3)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct bind4
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+ typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+ typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+ typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;
+
+ public:
+ typedef typename apply_wrap4<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ , typename t4::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename U1, typename U2, typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind4< F,T1,T2,T3,T4 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct bind5
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+ typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+ typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+ typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;
+ typedef aux::resolve_bind_arg< T5,U1,U2,U3,U4,U5 > t5;
+
+ public:
+ typedef typename apply_wrap5<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ , typename t4::type, typename t5::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg<
+ bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind5< F,T1,T2,T3,T4,T5 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc551/bind.hpp b/boost/boost/mpl/aux_/preprocessed/bcc551/bind.hpp
new file mode 100644
index 00000000000..34b1b5c8b38
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc551/bind.hpp
@@ -0,0 +1,403 @@
+
+// Copyright Peter Dimov 2001
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/bind.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template<
+ typename T, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg
+{
+ typedef T type;
+};
+
+template<
+ typename T
+ , typename Arg
+ >
+struct replace_unnamed_arg
+{
+ typedef Arg next;
+ typedef T type;
+};
+
+template<
+ typename Arg
+ >
+struct replace_unnamed_arg< arg< -1 >, Arg >
+{
+ typedef typename Arg::next next;
+ typedef Arg type;
+};
+
+template<
+ int N, typename U1, typename U2, typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >
+{
+ typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;
+};
+
+} // namespace aux
+
+template<
+ typename F
+ >
+struct bind0
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ public:
+ typedef typename apply_wrap0<
+ f_
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg<
+ bind0<F>, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind0<F> f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(1, bind0)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)
+
+template<
+ typename F, typename T1
+ >
+struct bind1
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ public:
+ typedef typename apply_wrap1<
+ f_
+ , typename t1::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename U1, typename U2, typename U3
+ , typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind1< F,T1 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind1< F,T1 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(2, bind1)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct bind2
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ typedef aux::replace_unnamed_arg< T2,n2 > r2;
+ typedef typename r2::type a2;
+ typedef typename r2::next n3;
+ typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+ ///
+ public:
+ typedef typename apply_wrap2<
+ f_
+ , typename t1::type, typename t2::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename U1, typename U2
+ , typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind2< F,T1,T2 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind2< F,T1,T2 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(3, bind2)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct bind3
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ typedef aux::replace_unnamed_arg< T2,n2 > r2;
+ typedef typename r2::type a2;
+ typedef typename r2::next n3;
+ typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+ ///
+ typedef aux::replace_unnamed_arg< T3,n3 > r3;
+ typedef typename r3::type a3;
+ typedef typename r3::next n4;
+ typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+ ///
+ public:
+ typedef typename apply_wrap3<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename U1
+ , typename U2, typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind3< F,T1,T2,T3 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(4, bind3)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct bind4
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ typedef aux::replace_unnamed_arg< T2,n2 > r2;
+ typedef typename r2::type a2;
+ typedef typename r2::next n3;
+ typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+ ///
+ typedef aux::replace_unnamed_arg< T3,n3 > r3;
+ typedef typename r3::type a3;
+ typedef typename r3::next n4;
+ typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+ ///
+ typedef aux::replace_unnamed_arg< T4,n4 > r4;
+ typedef typename r4::type a4;
+ typedef typename r4::next n5;
+ typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
+ ///
+ public:
+ typedef typename apply_wrap4<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ , typename t4::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename U1, typename U2, typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind4< F,T1,T2,T3,T4 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct bind5
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ typedef aux::replace_unnamed_arg< T2,n2 > r2;
+ typedef typename r2::type a2;
+ typedef typename r2::next n3;
+ typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+ ///
+ typedef aux::replace_unnamed_arg< T3,n3 > r3;
+ typedef typename r3::type a3;
+ typedef typename r3::next n4;
+ typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+ ///
+ typedef aux::replace_unnamed_arg< T4,n4 > r4;
+ typedef typename r4::type a4;
+ typedef typename r4::next n5;
+ typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
+ ///
+ typedef aux::replace_unnamed_arg< T5,n5 > r5;
+ typedef typename r5::type a5;
+ typedef typename r5::next n6;
+ typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5;
+ ///
+ public:
+ typedef typename apply_wrap5<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ , typename t4::type, typename t5::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg<
+ bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind5< F,T1,T2,T3,T4,T5 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc551/bind_fwd.hpp b/boost/boost/mpl/aux_/preprocessed/bcc551/bind_fwd.hpp
new file mode 100644
index 00000000000..022cba34611
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc551/bind_fwd.hpp
@@ -0,0 +1,46 @@
+
+// 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/bind_fwd.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename F
+ >
+struct bind0;
+
+template<
+ typename F, typename T1
+ >
+struct bind1;
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct bind2;
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct bind3;
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct bind4;
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct bind5;
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc551/bitand.hpp b/boost/boost/mpl/aux_/preprocessed/bcc551/bitand.hpp
new file mode 100644
index 00000000000..0bbf54ea26d
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc551/bitand.hpp
@@ -0,0 +1,147 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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)
+//
+
+// Preprocessed version of "boost/mpl/bitand.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct bitand_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< bitand_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< bitand_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitand_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct bitand_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct bitand_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct bitand_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct bitand_
+ : bitand_< bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>, N5>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , bitand_
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3, typename N4
+ >
+struct bitand_< N1,N2,N3,N4,na >
+
+ : bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitand_
+ , ( N1, N2, N3, N4, na )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3
+ >
+struct bitand_< N1,N2,N3,na,na >
+
+ : bitand_< bitand_< N1,N2 >, N3>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitand_
+ , ( N1, N2, N3, na, na )
+ )
+};
+
+template<
+ typename N1, typename N2
+ >
+struct bitand_< N1,N2,na,na,na >
+ : bitand_impl<
+ typename bitand_tag<N1>::type
+ , typename bitand_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitand_
+ , ( N1, N2, na, na, na )
+ )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitand_)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct bitand_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ & BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc551/bitor.hpp b/boost/boost/mpl/aux_/preprocessed/bcc551/bitor.hpp
new file mode 100644
index 00000000000..55b31cb8a9c
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc551/bitor.hpp
@@ -0,0 +1,147 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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)
+//
+
+// Preprocessed version of "boost/mpl/bitor.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct bitor_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< bitor_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< bitor_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitor_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct bitor_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct bitor_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct bitor_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct bitor_
+ : bitor_< bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>, N5>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , bitor_
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3, typename N4
+ >
+struct bitor_< N1,N2,N3,N4,na >
+
+ : bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitor_
+ , ( N1, N2, N3, N4, na )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3
+ >
+struct bitor_< N1,N2,N3,na,na >
+
+ : bitor_< bitor_< N1,N2 >, N3>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitor_
+ , ( N1, N2, N3, na, na )
+ )
+};
+
+template<
+ typename N1, typename N2
+ >
+struct bitor_< N1,N2,na,na,na >
+ : bitor_impl<
+ typename bitor_tag<N1>::type
+ , typename bitor_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitor_
+ , ( N1, N2, na, na, na )
+ )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitor_)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct bitor_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ | BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc551/bitxor.hpp b/boost/boost/mpl/aux_/preprocessed/bcc551/bitxor.hpp
new file mode 100644
index 00000000000..ec1939151d0
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc551/bitxor.hpp
@@ -0,0 +1,147 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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)
+//
+
+// Preprocessed version of "boost/mpl/bitxor.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct bitxor_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< bitxor_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< bitxor_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitxor_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct bitxor_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct bitxor_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct bitxor_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct bitxor_
+ : bitxor_< bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4>, N5>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , bitxor_
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3, typename N4
+ >
+struct bitxor_< N1,N2,N3,N4,na >
+
+ : bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitxor_
+ , ( N1, N2, N3, N4, na )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3
+ >
+struct bitxor_< N1,N2,N3,na,na >
+
+ : bitxor_< bitxor_< N1,N2 >, N3>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitxor_
+ , ( N1, N2, N3, na, na )
+ )
+};
+
+template<
+ typename N1, typename N2
+ >
+struct bitxor_< N1,N2,na,na,na >
+ : bitxor_impl<
+ typename bitxor_tag<N1>::type
+ , typename bitxor_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitxor_
+ , ( N1, N2, na, na, na )
+ )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitxor_)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct bitxor_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ ^ BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc551/deque.hpp b/boost/boost/mpl/aux_/preprocessed/bcc551/deque.hpp
new file mode 100644
index 00000000000..de67398a37c
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc551/deque.hpp
@@ -0,0 +1,323 @@
+
+// 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/deque.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+ , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+ , typename T12 = na, typename T13 = na, typename T14 = na
+ , typename T15 = na, typename T16 = na, typename T17 = na
+ , typename T18 = na, typename T19 = na
+ >
+struct deque;
+
+template<
+
+ >
+struct deque<
+ na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector0< >
+{
+ typedef vector0< >::type type;
+};
+
+template<
+ typename T0
+ >
+struct deque<
+ T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector1<T0>
+{
+ typedef typename vector1<T0>::type type;
+};
+
+template<
+ typename T0, typename T1
+ >
+struct deque<
+ T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector2< T0,T1 >
+{
+ typedef typename vector2< T0,T1 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2
+ >
+struct deque<
+ T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector3< T0,T1,T2 >
+{
+ typedef typename vector3< T0,T1,T2 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3
+ >
+struct deque<
+ T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector4< T0,T1,T2,T3 >
+{
+ typedef typename vector4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ >
+struct deque<
+ T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector5< T0,T1,T2,T3,T4 >
+{
+ typedef typename vector5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct deque<
+ T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector6< T0,T1,T2,T3,T4,T5 >
+{
+ typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6
+ >
+struct deque<
+ T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector7< T0,T1,T2,T3,T4,T5,T6 >
+{
+ typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7
+ >
+struct deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+ typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8
+ >
+struct deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+ typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ >
+struct deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+ typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ , typename T10
+ >
+struct deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+ typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+ , na, na, na, na
+ >
+ : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+ typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+ , na, na, na, na
+ >
+ : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+ typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+ , na, na, na, na
+ >
+ : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+ typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+ , na, na, na, na
+ >
+ : vector15<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ >
+{
+ typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, na, na, na, na
+ >
+ : vector16<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15
+ >
+{
+ typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, na, na, na
+ >
+ : vector17<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16
+ >
+{
+ typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, na, na
+ >
+ : vector18<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17
+ >
+{
+ typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, na
+ >
+ : vector19<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18
+ >
+{
+ typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+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 deque
+ : vector20<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, T19
+ >
+{
+ typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc551/divides.hpp b/boost/boost/mpl/aux_/preprocessed/bcc551/divides.hpp
new file mode 100644
index 00000000000..86f16826f79
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc551/divides.hpp
@@ -0,0 +1,146 @@
+
+// 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/divides.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct divides_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< divides_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< divides_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct divides_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct divides_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct divides_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct divides_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct divides
+ : divides< divides< divides< divides< N1,N2 >, N3>, N4>, N5>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , divides
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3, typename N4
+ >
+struct divides< N1,N2,N3,N4,na >
+
+ : divides< divides< divides< N1,N2 >, N3>, N4>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , divides
+ , ( N1, N2, N3, N4, na )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3
+ >
+struct divides< N1,N2,N3,na,na >
+
+ : divides< divides< N1,N2 >, N3>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , divides
+ , ( N1, N2, N3, na, na )
+ )
+};
+
+template<
+ typename N1, typename N2
+ >
+struct divides< N1,N2,na,na,na >
+ : divides_impl<
+ typename divides_tag<N1>::type
+ , typename divides_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , divides
+ , ( N1, N2, na, na, na )
+ )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, divides)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct divides_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ / BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc551/equal_to.hpp b/boost/boost/mpl/aux_/preprocessed/bcc551/equal_to.hpp
new file mode 100644
index 00000000000..62c994589f4
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc551/equal_to.hpp
@@ -0,0 +1,94 @@
+
+// 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/equal_to.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct equal_to_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct equal_to_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct equal_to_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct equal_to_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct equal_to_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct equal_to
+
+ : equal_to_impl<
+ typename equal_to_tag<N1>::type
+ , typename equal_to_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, equal_to, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, equal_to)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct equal_to_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value == BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc551/fold_impl.hpp b/boost/boost/mpl/aux_/preprocessed/bcc551/fold_impl.hpp
new file mode 100644
index 00000000000..9e7a29300d6
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc551/fold_impl.hpp
@@ -0,0 +1,180 @@
+
+// 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/aux_/fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+ int N
+ , typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl;
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl< 0,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef state0 state;
+ typedef iter0 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl< 1,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+
+
+ typedef state1 state;
+ typedef iter1 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl< 2,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+
+
+ typedef state2 state;
+ typedef iter2 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl< 3,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;
+ typedef typename mpl::next<iter2>::type iter3;
+
+
+ typedef state3 state;
+ typedef iter3 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl< 4,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp, state3, typename deref<iter3>::type >::type state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef state4 state;
+ typedef iter4 iterator;
+};
+
+template<
+ int N
+ , typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl
+{
+ typedef fold_impl<
+ 4
+ , First
+ , Last
+ , State
+ , ForwardOp
+ > chunk_;
+
+ typedef fold_impl<
+ ( (N - 4) < 0 ? 0 : N - 4 )
+ , typename chunk_::iterator
+ , Last
+ , typename chunk_::state
+ , ForwardOp
+ > res_;
+
+ typedef typename res_::state state;
+ typedef typename res_::iterator iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl< -1,First,Last,State,ForwardOp >
+ : fold_impl<
+ -1
+ , typename mpl::next<First>::type
+ , Last
+ , typename apply2<ForwardOp,State, typename deref<First>::type>::type
+ , ForwardOp
+ >
+{
+};
+
+template<
+ typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl< -1,Last,Last,State,ForwardOp >
+{
+ typedef State state;
+ typedef Last iterator;
+};
+
+}}}
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc551/full_lambda.hpp b/boost/boost/mpl/aux_/preprocessed/bcc551/full_lambda.hpp
new file mode 100644
index 00000000000..e3eef71b1ea
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc551/full_lambda.hpp
@@ -0,0 +1,558 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/aux_/full_lambda.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template<
+ bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false
+ , bool C5 = false
+ >
+struct lambda_or
+ : true_
+{
+};
+
+template<>
+struct lambda_or< false,false,false,false,false >
+ : false_
+{
+};
+
+} // namespace aux
+
+template<
+ typename T
+ , typename Tag
+ , typename Arity
+ >
+struct lambda
+{
+ typedef false_ is_le;
+ typedef T result_;
+ typedef T type;
+};
+
+template<
+ typename T
+ >
+struct is_lambda_expression
+ : lambda<T>::is_le
+{
+};
+
+template< int N, typename Tag >
+struct lambda< arg<N>,Tag, int_< -1 > >
+{
+ typedef true_ is_le;
+ typedef mpl::arg<N> result_; // qualified for the sake of MIPSpro 7.41
+ typedef mpl::protect<result_> type;
+};
+
+template<
+ typename F
+ , typename Tag
+ >
+struct lambda<
+ bind0<F>
+ , Tag
+ , int_<1>
+ >
+{
+ typedef false_ is_le;
+ typedef bind0<
+ F
+ > result_;
+
+ typedef result_ type;
+};
+
+namespace aux {
+
+template<
+ typename IsLE, typename Tag
+ , template< typename P1 > class F
+ , typename L1
+ >
+struct le_result1
+{
+ typedef F<
+ typename L1::type
+ > result_;
+
+ typedef result_ type;
+};
+
+template<
+ typename Tag
+ , template< typename P1 > class F
+ , typename L1
+ >
+struct le_result1< true_,Tag,F,L1 >
+{
+ typedef bind1<
+ quote1< F,Tag >
+ , typename L1::result_
+ > result_;
+
+ typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+ template< typename P1 > class F
+ , typename T1
+ , typename Tag
+ >
+struct lambda<
+ F<T1>
+ , Tag
+ , int_<1>
+ >
+{
+ typedef lambda< T1,Tag > l1;
+ typedef typename l1::is_le is_le1;
+ typedef typename aux::lambda_or<
+ is_le1::value
+ >::type is_le;
+
+ typedef aux::le_result1<
+ is_le, Tag, F, l1
+ > le_result_;
+
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+template<
+ typename F, typename T1
+ , typename Tag
+ >
+struct lambda<
+ bind1< F,T1 >
+ , Tag
+ , int_<2>
+ >
+{
+ typedef false_ is_le;
+ typedef bind1<
+ F
+ , T1
+ > result_;
+
+ typedef result_ type;
+};
+
+namespace aux {
+
+template<
+ typename IsLE, typename Tag
+ , template< typename P1, typename P2 > class F
+ , typename L1, typename L2
+ >
+struct le_result2
+{
+ typedef F<
+ typename L1::type, typename L2::type
+ > result_;
+
+ typedef result_ type;
+};
+
+template<
+ typename Tag
+ , template< typename P1, typename P2 > class F
+ , typename L1, typename L2
+ >
+struct le_result2< true_,Tag,F,L1,L2 >
+{
+ typedef bind2<
+ quote2< F,Tag >
+ , typename L1::result_, typename L2::result_
+ > result_;
+
+ typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+ template< typename P1, typename P2 > class F
+ , typename T1, typename T2
+ , typename Tag
+ >
+struct lambda<
+ F< T1,T2 >
+ , Tag
+ , int_<2>
+ >
+{
+ typedef lambda< T1,Tag > l1;
+ typedef lambda< T2,Tag > l2;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+
+
+ typedef typename aux::lambda_or<
+ is_le1::value, is_le2::value
+ >::type is_le;
+
+ typedef aux::le_result2<
+ is_le, Tag, F, l1, l2
+ > le_result_;
+
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+template<
+ typename F, typename T1, typename T2
+ , typename Tag
+ >
+struct lambda<
+ bind2< F,T1,T2 >
+ , Tag
+ , int_<3>
+ >
+{
+ typedef false_ is_le;
+ typedef bind2<
+ F
+ , T1, T2
+ > result_;
+
+ typedef result_ type;
+};
+
+namespace aux {
+
+template<
+ typename IsLE, typename Tag
+ , template< typename P1, typename P2, typename P3 > class F
+ , typename L1, typename L2, typename L3
+ >
+struct le_result3
+{
+ typedef F<
+ typename L1::type, typename L2::type, typename L3::type
+ > result_;
+
+ typedef result_ type;
+};
+
+template<
+ typename Tag
+ , template< typename P1, typename P2, typename P3 > class F
+ , typename L1, typename L2, typename L3
+ >
+struct le_result3< true_,Tag,F,L1,L2,L3 >
+{
+ typedef bind3<
+ quote3< F,Tag >
+ , typename L1::result_, typename L2::result_, typename L3::result_
+ > result_;
+
+ typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+ template< typename P1, typename P2, typename P3 > class F
+ , typename T1, typename T2, typename T3
+ , typename Tag
+ >
+struct lambda<
+ F< T1,T2,T3 >
+ , Tag
+ , int_<3>
+ >
+{
+ typedef lambda< T1,Tag > l1;
+ typedef lambda< T2,Tag > l2;
+ typedef lambda< T3,Tag > l3;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+
+
+ typedef typename aux::lambda_or<
+ is_le1::value, is_le2::value, is_le3::value
+ >::type is_le;
+
+ typedef aux::le_result3<
+ is_le, Tag, F, l1, l2, l3
+ > le_result_;
+
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ , typename Tag
+ >
+struct lambda<
+ bind3< F,T1,T2,T3 >
+ , Tag
+ , int_<4>
+ >
+{
+ typedef false_ is_le;
+ typedef bind3<
+ F
+ , T1, T2, T3
+ > result_;
+
+ typedef result_ type;
+};
+
+namespace aux {
+
+template<
+ typename IsLE, typename Tag
+ , template< typename P1, typename P2, typename P3, typename P4 > class F
+ , typename L1, typename L2, typename L3, typename L4
+ >
+struct le_result4
+{
+ typedef F<
+ typename L1::type, typename L2::type, typename L3::type
+ , typename L4::type
+ > result_;
+
+ typedef result_ type;
+};
+
+template<
+ typename Tag
+ , template< typename P1, typename P2, typename P3, typename P4 > class F
+ , typename L1, typename L2, typename L3, typename L4
+ >
+struct le_result4< true_,Tag,F,L1,L2,L3,L4 >
+{
+ typedef bind4<
+ quote4< F,Tag >
+ , typename L1::result_, typename L2::result_, typename L3::result_
+ , typename L4::result_
+ > result_;
+
+ typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+ template< typename P1, typename P2, typename P3, typename P4 > class F
+ , typename T1, typename T2, typename T3, typename T4
+ , typename Tag
+ >
+struct lambda<
+ F< T1,T2,T3,T4 >
+ , Tag
+ , int_<4>
+ >
+{
+ typedef lambda< T1,Tag > l1;
+ typedef lambda< T2,Tag > l2;
+ typedef lambda< T3,Tag > l3;
+ typedef lambda< T4,Tag > l4;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+ typedef typename l4::is_le is_le4;
+
+
+ typedef typename aux::lambda_or<
+ is_le1::value, is_le2::value, is_le3::value, is_le4::value
+ >::type is_le;
+
+ typedef aux::le_result4<
+ is_le, Tag, F, l1, l2, l3, l4
+ > le_result_;
+
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename Tag
+ >
+struct lambda<
+ bind4< F,T1,T2,T3,T4 >
+ , Tag
+ , int_<5>
+ >
+{
+ typedef false_ is_le;
+ typedef bind4<
+ F
+ , T1, T2, T3, T4
+ > result_;
+
+ typedef result_ type;
+};
+
+namespace aux {
+
+template<
+ typename IsLE, typename Tag
+ , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F
+ , typename L1, typename L2, typename L3, typename L4, typename L5
+ >
+struct le_result5
+{
+ typedef F<
+ typename L1::type, typename L2::type, typename L3::type
+ , typename L4::type, typename L5::type
+ > result_;
+
+ typedef result_ type;
+};
+
+template<
+ typename Tag
+ , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F
+ , typename L1, typename L2, typename L3, typename L4, typename L5
+ >
+struct le_result5< true_,Tag,F,L1,L2,L3,L4,L5 >
+{
+ typedef bind5<
+ quote5< F,Tag >
+ , typename L1::result_, typename L2::result_, typename L3::result_
+ , typename L4::result_, typename L5::result_
+ > result_;
+
+ typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+ template<
+ typename P1, typename P2, typename P3, typename P4
+ , typename P5
+ >
+ class F
+ , typename T1, typename T2, typename T3, typename T4, typename T5
+ , typename Tag
+ >
+struct lambda<
+ F< T1,T2,T3,T4,T5 >
+ , Tag
+ , int_<5>
+ >
+{
+ typedef lambda< T1,Tag > l1;
+ typedef lambda< T2,Tag > l2;
+ typedef lambda< T3,Tag > l3;
+ typedef lambda< T4,Tag > l4;
+ typedef lambda< T5,Tag > l5;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+ typedef typename l4::is_le is_le4;
+ typedef typename l5::is_le is_le5;
+
+
+ typedef typename aux::lambda_or<
+ is_le1::value, is_le2::value, is_le3::value, is_le4::value
+ , is_le5::value
+ >::type is_le;
+
+ typedef aux::le_result5<
+ is_le, Tag, F, l1, l2, l3, l4, l5
+ > le_result_;
+
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ , typename Tag
+ >
+struct lambda<
+ bind5< F,T1,T2,T3,T4,T5 >
+ , Tag
+ , int_<6>
+ >
+{
+ typedef false_ is_le;
+ typedef bind5<
+ F
+ , T1, T2, T3, T4, T5
+ > result_;
+
+ typedef result_ type;
+};
+
+/// special case for 'protect'
+template< typename T, typename Tag >
+struct lambda< mpl::protect<T>,Tag, int_<1> >
+{
+ typedef false_ is_le;
+ typedef mpl::protect<T> result_;
+ typedef result_ type;
+};
+
+/// specializations for the main 'bind' form
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ , typename Tag
+ >
+struct lambda<
+ bind< F,T1,T2,T3,T4,T5 >
+ , Tag
+ , int_<6>
+ >
+{
+ typedef false_ is_le;
+ typedef bind< F,T1,T2,T3,T4,T5 > result_;
+ typedef result_ type;
+};
+
+template<
+ typename F
+ , typename Tag1
+ , typename Tag2
+ , typename Arity
+ >
+struct lambda<
+ lambda< F,Tag1,Arity >
+ , Tag2
+ , int_<3>
+ >
+{
+ typedef lambda< F,Tag2 > l1;
+ typedef lambda< Tag1,Tag2 > l2;
+ typedef typename l1::is_le is_le;
+ typedef bind1< quote1<aux::template_arity>, typename l1::result_ > arity_;
+ typedef lambda< typename if_< is_le,arity_,Arity >::type, Tag2 > l3;
+ typedef aux::le_result3<is_le, Tag2, mpl::lambda, l1, l2, l3> le_result_;
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 3, lambda)
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc551/greater.hpp b/boost/boost/mpl/aux_/preprocessed/bcc551/greater.hpp
new file mode 100644
index 00000000000..14d8e08bff0
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc551/greater.hpp
@@ -0,0 +1,94 @@
+
+// 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/greater.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct greater_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< greater_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< greater_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct greater_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct greater_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct greater_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct greater_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct greater
+
+ : greater_impl<
+ typename greater_tag<N1>::type
+ , typename greater_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, greater)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct greater_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value > BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc551/greater_equal.hpp b/boost/boost/mpl/aux_/preprocessed/bcc551/greater_equal.hpp
new file mode 100644
index 00000000000..2603f9184a0
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc551/greater_equal.hpp
@@ -0,0 +1,94 @@
+
+// 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/greater_equal.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct greater_equal_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< greater_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< greater_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct greater_equal_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct greater_equal_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct greater_equal_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct greater_equal_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct greater_equal
+
+ : greater_equal_impl<
+ typename greater_equal_tag<N1>::type
+ , typename greater_equal_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater_equal, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, greater_equal)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct greater_equal_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value >= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc551/inherit.hpp b/boost/boost/mpl/aux_/preprocessed/bcc551/inherit.hpp
new file mode 100644
index 00000000000..00f31c42268
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc551/inherit.hpp
@@ -0,0 +1,141 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/inherit.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(T1)
+ , typename BOOST_MPL_AUX_NA_PARAM(T2)
+ >
+struct inherit2
+ : T1, T2
+{
+ typedef inherit2 type;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, inherit2, (T1, T2))
+};
+
+template< typename T1 >
+struct inherit2< T1,empty_base >
+{
+ typedef T1 type;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (T1, empty_base))
+};
+
+template< typename T2 >
+struct inherit2< empty_base,T2 >
+{
+ typedef T2 type;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, T2))
+};
+
+template<>
+struct inherit2< empty_base,empty_base >
+{
+ typedef empty_base type;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, empty_base))
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, inherit2)
+
+template<
+ typename T1 = na, typename T2 = na, typename T3 = na
+ >
+struct inherit3
+ : inherit2<
+ typename inherit2<
+ T1, T2
+ >::type
+ , T3
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 3
+ , inherit3
+ , ( T1, T2, T3)
+ )
+};
+
+BOOST_MPL_AUX_NA_SPEC(3, inherit3)
+
+template<
+ typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na
+ >
+struct inherit4
+ : inherit2<
+ typename inherit3<
+ T1, T2, T3
+ >::type
+ , T4
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 4
+ , inherit4
+ , ( T1, T2, T3, T4)
+ )
+};
+
+BOOST_MPL_AUX_NA_SPEC(4, inherit4)
+
+template<
+ typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na
+ , typename T5 = na
+ >
+struct inherit5
+ : inherit2<
+ typename inherit4<
+ T1, T2, T3, T4
+ >::type
+ , T5
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , inherit5
+ , ( T1, T2, T3, T4, T5)
+ )
+};
+
+BOOST_MPL_AUX_NA_SPEC(5, inherit5)
+
+/// primary template
+
+template<
+ typename T1 = empty_base, typename T2 = empty_base
+ , typename T3 = empty_base, typename T4 = empty_base
+ , typename T5 = empty_base
+ >
+struct inherit
+ : inherit5< T1,T2,T3,T4,T5 >
+{
+};
+
+template<>
+struct inherit< na,na,na,na,na >
+{
+ template<
+
+ typename T1 = empty_base, typename T2 = empty_base
+ , typename T3 = empty_base, typename T4 = empty_base
+ , typename T5 = empty_base
+
+ >
+ struct apply
+ : inherit< T1,T2,T3,T4,T5 >
+ {
+ };
+};
+
+BOOST_MPL_AUX_NA_SPEC_LAMBDA(5, inherit)
+BOOST_MPL_AUX_NA_SPEC_ARITY(5, inherit)
+BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(5, 5, inherit)
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc551/iter_fold_if_impl.hpp b/boost/boost/mpl/aux_/preprocessed/bcc551/iter_fold_if_impl.hpp
new file mode 100644
index 00000000000..695179584d3
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc551/iter_fold_if_impl.hpp
@@ -0,0 +1,133 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/aux_/iter_fold_if_impl.hpp" header
+// -- DO NOT modify by hand!
+
+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;
+ };
+};
+
+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;
+};
+
+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;
+ typedef iter_fold_if_forward_step< typename forward_step0::iterator, typename forward_step0::state, ForwardOp, ForwardPredicate > forward_step1;
+ typedef iter_fold_if_forward_step< typename forward_step1::iterator, typename forward_step1::state, ForwardOp, ForwardPredicate > forward_step2;
+ typedef iter_fold_if_forward_step< typename forward_step2::iterator, typename forward_step2::state, ForwardOp, ForwardPredicate > forward_step3;
+ typedef iter_fold_if_forward_step< typename forward_step3::iterator, typename forward_step3::state, ForwardOp, ForwardPredicate > forward_step4;
+
+
+ typedef typename if_<
+ typename forward_step4::not_last
+ , iter_fold_if_impl<
+ typename forward_step4::iterator
+ , typename forward_step4::state
+ , ForwardOp
+ , ForwardPredicate
+ , BackwardOp
+ , BackwardPredicate
+ >
+ , iter_fold_if_null_step<
+ typename forward_step4::iterator
+ , typename forward_step4::state
+ >
+ >::type backward_step4;
+
+ typedef iter_fold_if_backward_step< typename forward_step3::iterator, typename backward_step4::state, BackwardOp, BackwardPredicate > backward_step3;
+ typedef iter_fold_if_backward_step< typename forward_step2::iterator, typename backward_step3::state, BackwardOp, BackwardPredicate > backward_step2;
+ typedef iter_fold_if_backward_step< typename forward_step1::iterator, typename backward_step2::state, BackwardOp, BackwardPredicate > backward_step1;
+ typedef iter_fold_if_backward_step< typename forward_step0::iterator, typename backward_step1::state, BackwardOp, BackwardPredicate > backward_step0;
+
+
+ public:
+ typedef typename backward_step0::state state;
+ typedef typename backward_step4::iterator iterator;
+};
+
+}}}
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc551/iter_fold_impl.hpp b/boost/boost/mpl/aux_/preprocessed/bcc551/iter_fold_impl.hpp
new file mode 100644
index 00000000000..805790e86d6
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc551/iter_fold_impl.hpp
@@ -0,0 +1,180 @@
+
+// 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/aux_/iter_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+ int N
+ , typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl;
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl< 0,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef state0 state;
+ typedef iter0 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl< 1,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+
+
+ typedef state1 state;
+ typedef iter1 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl< 2,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+
+
+ typedef state2 state;
+ typedef iter2 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl< 3,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp,state2,iter2 >::type state3;
+ typedef typename mpl::next<iter2>::type iter3;
+
+
+ typedef state3 state;
+ typedef iter3 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl< 4,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp,state2,iter2 >::type state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp,state3,iter3 >::type state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef state4 state;
+ typedef iter4 iterator;
+};
+
+template<
+ int N
+ , typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl
+{
+ typedef iter_fold_impl<
+ 4
+ , First
+ , Last
+ , State
+ , ForwardOp
+ > chunk_;
+
+ typedef iter_fold_impl<
+ ( (N - 4) < 0 ? 0 : N - 4 )
+ , typename chunk_::iterator
+ , Last
+ , typename chunk_::state
+ , ForwardOp
+ > res_;
+
+ typedef typename res_::state state;
+ typedef typename res_::iterator iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl< -1,First,Last,State,ForwardOp >
+ : iter_fold_impl<
+ -1
+ , typename mpl::next<First>::type
+ , Last
+ , typename apply2< ForwardOp,State,First >::type
+ , ForwardOp
+ >
+{
+};
+
+template<
+ typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl< -1,Last,Last,State,ForwardOp >
+{
+ typedef State state;
+ typedef Last iterator;
+};
+
+}}}
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc551/lambda_no_ctps.hpp b/boost/boost/mpl/aux_/preprocessed/bcc551/lambda_no_ctps.hpp
new file mode 100644
index 00000000000..890a198a464
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc551/lambda_no_ctps.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/aux_/lambda_no_ctps.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template<
+ bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false
+ , bool C5 = false
+ >
+struct lambda_or
+ : true_
+{
+};
+
+template<>
+struct lambda_or< false,false,false,false,false >
+ : false_
+{
+};
+
+template< typename Arity > struct lambda_impl
+{
+ template< typename T, typename Tag, typename Protect > struct result_
+ {
+ typedef T type;
+ typedef is_placeholder<T> is_le;
+ };
+};
+
+template<> struct lambda_impl< int_<1> >
+{
+ template< typename F, typename Tag, typename Protect > struct result_
+ {
+ typedef lambda< typename F::arg1, Tag, false_ > l1;
+ typedef typename l1::is_le is_le1;
+ typedef aux::lambda_or<
+ BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value
+ > is_le;
+
+ typedef bind1<
+ typename F::rebind
+ , typename l1::type
+ > bind_;
+
+ typedef typename if_<
+ is_le
+ , if_< Protect, mpl::protect<bind_>, bind_ >
+ , identity<F>
+ >::type type_;
+
+ typedef typename type_::type type;
+ };
+};
+
+template<> struct lambda_impl< int_<2> >
+{
+ template< typename F, typename Tag, typename Protect > struct result_
+ {
+ typedef lambda< typename F::arg1, Tag, false_ > l1;
+ typedef lambda< typename F::arg2, Tag, false_ > l2;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+
+
+ typedef aux::lambda_or<
+ BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value
+ > is_le;
+
+ typedef bind2<
+ typename F::rebind
+ , typename l1::type, typename l2::type
+ > bind_;
+
+ typedef typename if_<
+ is_le
+ , if_< Protect, mpl::protect<bind_>, bind_ >
+ , identity<F>
+ >::type type_;
+
+ typedef typename type_::type type;
+ };
+};
+
+template<> struct lambda_impl< int_<3> >
+{
+ template< typename F, typename Tag, typename Protect > struct result_
+ {
+ typedef lambda< typename F::arg1, Tag, false_ > l1;
+ typedef lambda< typename F::arg2, Tag, false_ > l2;
+ typedef lambda< typename F::arg3, Tag, false_ > l3;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+
+
+ typedef aux::lambda_or<
+ BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value
+ > is_le;
+
+ typedef bind3<
+ typename F::rebind
+ , typename l1::type, typename l2::type, typename l3::type
+ > bind_;
+
+ typedef typename if_<
+ is_le
+ , if_< Protect, mpl::protect<bind_>, bind_ >
+ , identity<F>
+ >::type type_;
+
+ typedef typename type_::type type;
+ };
+};
+
+template<> struct lambda_impl< int_<4> >
+{
+ template< typename F, typename Tag, typename Protect > struct result_
+ {
+ typedef lambda< typename F::arg1, Tag, false_ > l1;
+ typedef lambda< typename F::arg2, Tag, false_ > l2;
+ typedef lambda< typename F::arg3, Tag, false_ > l3;
+ typedef lambda< typename F::arg4, Tag, false_ > l4;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+ typedef typename l4::is_le is_le4;
+
+
+ typedef aux::lambda_or<
+ BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value
+ > is_le;
+
+ typedef bind4<
+ typename F::rebind
+ , typename l1::type, typename l2::type, typename l3::type
+ , typename l4::type
+ > bind_;
+
+ typedef typename if_<
+ is_le
+ , if_< Protect, mpl::protect<bind_>, bind_ >
+ , identity<F>
+ >::type type_;
+
+ typedef typename type_::type type;
+ };
+};
+
+template<> struct lambda_impl< int_<5> >
+{
+ template< typename F, typename Tag, typename Protect > struct result_
+ {
+ typedef lambda< typename F::arg1, Tag, false_ > l1;
+ typedef lambda< typename F::arg2, Tag, false_ > l2;
+ typedef lambda< typename F::arg3, Tag, false_ > l3;
+ typedef lambda< typename F::arg4, Tag, false_ > l4;
+ typedef lambda< typename F::arg5, Tag, false_ > l5;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+ typedef typename l4::is_le is_le4;
+ typedef typename l5::is_le is_le5;
+
+
+ typedef aux::lambda_or<
+ BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le5)::value
+ > is_le;
+
+ typedef bind5<
+ typename F::rebind
+ , typename l1::type, typename l2::type, typename l3::type
+ , typename l4::type, typename l5::type
+ > bind_;
+
+ typedef typename if_<
+ is_le
+ , if_< Protect, mpl::protect<bind_>, bind_ >
+ , identity<F>
+ >::type type_;
+
+ typedef typename type_::type type;
+ };
+};
+
+} // namespace aux
+
+template<
+ typename T
+ , typename Tag
+ , typename Protect
+ >
+struct lambda
+{
+ /// Metafunction forwarding confuses MSVC 6.x
+ typedef typename aux::template_arity<T>::type arity_;
+ typedef typename aux::lambda_impl<arity_>
+ ::template result_< T,Tag,Protect > l_;
+
+ typedef typename l_::type type;
+ typedef typename l_::is_le is_le;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(3, lambda, (T, Tag, Protect))
+};
+
+BOOST_MPL_AUX_NA_SPEC2(1, 3, lambda)
+
+template<
+ typename T
+ >
+struct is_lambda_expression
+ : lambda<T>::is_le
+{
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc551/less.hpp b/boost/boost/mpl/aux_/preprocessed/bcc551/less.hpp
new file mode 100644
index 00000000000..4fe3cd17c49
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc551/less.hpp
@@ -0,0 +1,94 @@
+
+// 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/less.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct less_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< less_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< less_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct less_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct less_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct less_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct less_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct less
+
+ : less_impl<
+ typename less_tag<N1>::type
+ , typename less_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, less)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct less_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N2)::value > BOOST_MPL_AUX_VALUE_WKND(N1)::value ) >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc551/less_equal.hpp b/boost/boost/mpl/aux_/preprocessed/bcc551/less_equal.hpp
new file mode 100644
index 00000000000..ca2894f6f93
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc551/less_equal.hpp
@@ -0,0 +1,94 @@
+
+// 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/less_equal.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct less_equal_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< less_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< less_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct less_equal_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct less_equal_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct less_equal_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct less_equal_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct less_equal
+
+ : less_equal_impl<
+ typename less_equal_tag<N1>::type
+ , typename less_equal_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less_equal, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, less_equal)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct less_equal_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value <= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc551/list.hpp b/boost/boost/mpl/aux_/preprocessed/bcc551/list.hpp
new file mode 100644
index 00000000000..4e8ad53d212
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc551/list.hpp
@@ -0,0 +1,323 @@
+
+// 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.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+ , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+ , typename T12 = na, typename T13 = na, typename T14 = na
+ , typename T15 = na, typename T16 = na, typename T17 = na
+ , typename T18 = na, typename T19 = na
+ >
+struct list;
+
+template<
+
+ >
+struct list<
+ na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list0< >
+{
+ typedef list0< >::type type;
+};
+
+template<
+ typename T0
+ >
+struct list<
+ T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list1<T0>
+{
+ typedef typename list1<T0>::type type;
+};
+
+template<
+ typename T0, typename T1
+ >
+struct list<
+ T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list2< T0,T1 >
+{
+ typedef typename list2< T0,T1 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2
+ >
+struct list<
+ T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list3< T0,T1,T2 >
+{
+ typedef typename list3< T0,T1,T2 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3
+ >
+struct list<
+ T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list4< T0,T1,T2,T3 >
+{
+ typedef typename list4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ >
+struct list<
+ T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list5< T0,T1,T2,T3,T4 >
+{
+ typedef typename list5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct list<
+ T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list6< T0,T1,T2,T3,T4,T5 >
+{
+ typedef typename list6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6
+ >
+struct list<
+ T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list7< T0,T1,T2,T3,T4,T5,T6 >
+{
+ typedef typename list7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7
+ >
+struct list<
+ T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+ typedef typename list8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8
+ >
+struct list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+ typedef typename list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ >
+struct list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+ typedef typename list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ , typename T10
+ >
+struct list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+ typedef typename list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+ , na, na, na, na
+ >
+ : list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+ typedef typename list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+ , na, na, na, na
+ >
+ : list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+ typedef typename list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+ , na, na, na, na
+ >
+ : list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+ typedef typename list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+ , na, na, na, na
+ >
+ : list15<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ >
+{
+ typedef typename list15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, na, na, na, na
+ >
+ : list16<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15
+ >
+{
+ typedef typename list16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, na, na, na
+ >
+ : list17<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16
+ >
+{
+ typedef typename list17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, na, na
+ >
+ : list18<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17
+ >
+{
+ typedef typename list18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, na
+ >
+ : list19<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18
+ >
+{
+ typedef typename list19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ , typename T10, typename T11, typename T12, typename T13, typename T14
+ , typename T15, typename T16, typename T17, typename T18, typename T19
+ >
+struct list
+ : list20<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, T19
+ >
+{
+ typedef typename list20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc551/list_c.hpp b/boost/boost/mpl/aux_/preprocessed/bcc551/list_c.hpp
new file mode 100644
index 00000000000..0b48a7f8e11
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc551/list_c.hpp
@@ -0,0 +1,328 @@
+
+// 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_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+ , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+ , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+ , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+ , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+ , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+ , long C18 = LONG_MAX, long C19 = LONG_MAX
+ >
+struct list_c;
+
+template<
+ typename T
+ >
+struct list_c<
+ T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list0_c<T>
+{
+ typedef typename list0_c<T>::type type;
+};
+
+template<
+ typename T, long C0
+ >
+struct list_c<
+ T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list1_c< T,C0 >
+{
+ typedef typename list1_c< T,C0 >::type type;
+};
+
+template<
+ typename T, long C0, long C1
+ >
+struct list_c<
+ T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list2_c< T,C0,C1 >
+{
+ typedef typename list2_c< T,C0,C1 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2
+ >
+struct list_c<
+ T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list3_c< T,C0,C1,C2 >
+{
+ typedef typename list3_c< T,C0,C1,C2 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3
+ >
+struct list_c<
+ T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list4_c< T,C0,C1,C2,C3 >
+{
+ typedef typename list4_c< T,C0,C1,C2,C3 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list5_c< T,C0,C1,C2,C3,C4 >
+{
+ typedef typename list5_c< T,C0,C1,C2,C3,C4 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list6_c< T,C0,C1,C2,C3,C4,C5 >
+{
+ typedef typename list6_c< T,C0,C1,C2,C3,C4,C5 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list7_c< T,C0,C1,C2,C3,C4,C5,C6 >
+{
+ typedef typename list7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX
+ >
+ : list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >
+{
+ typedef typename list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX
+ >
+ : list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >
+{
+ typedef typename list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX
+ >
+ : list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >
+{
+ typedef typename list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >
+{
+ typedef typename list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >
+{
+ typedef typename list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >
+{
+ typedef typename list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list14_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+ >
+{
+ typedef typename list14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list15_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ >
+{
+ typedef typename list15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list16_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15
+ >
+{
+ typedef typename list16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list17_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16
+ >
+{
+ typedef typename list17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, LONG_MAX, LONG_MAX
+ >
+ : list18_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17
+ >
+{
+ typedef typename list18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, C18, LONG_MAX
+ >
+ : list19_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, C18
+ >
+{
+ typedef typename list19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+struct list_c
+ : list20_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, C18, C19
+ >
+{
+ typedef typename list20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc551/map.hpp b/boost/boost/mpl/aux_/preprocessed/bcc551/map.hpp
new file mode 100644
index 00000000000..837e0137718
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc551/map.hpp
@@ -0,0 +1,323 @@
+
+// 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/map.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+ , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+ , typename T12 = na, typename T13 = na, typename T14 = na
+ , typename T15 = na, typename T16 = na, typename T17 = na
+ , typename T18 = na, typename T19 = na
+ >
+struct map;
+
+template<
+
+ >
+struct map<
+ na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map0< >
+{
+ typedef map0< >::type type;
+};
+
+template<
+ typename T0
+ >
+struct map<
+ T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map1<T0>
+{
+ typedef typename map1<T0>::type type;
+};
+
+template<
+ typename T0, typename T1
+ >
+struct map<
+ T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map2< T0,T1 >
+{
+ typedef typename map2< T0,T1 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2
+ >
+struct map<
+ T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map3< T0,T1,T2 >
+{
+ typedef typename map3< T0,T1,T2 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3
+ >
+struct map<
+ T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map4< T0,T1,T2,T3 >
+{
+ typedef typename map4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ >
+struct map<
+ T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map5< T0,T1,T2,T3,T4 >
+{
+ typedef typename map5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct map<
+ T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map6< T0,T1,T2,T3,T4,T5 >
+{
+ typedef typename map6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6
+ >
+struct map<
+ T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map7< T0,T1,T2,T3,T4,T5,T6 >
+{
+ typedef typename map7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7
+ >
+struct map<
+ T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+ typedef typename map8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8
+ >
+struct map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+ typedef typename map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ >
+struct map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+ typedef typename map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ , typename T10
+ >
+struct map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+ typedef typename map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+ , na, na, na, na
+ >
+ : map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+ typedef typename map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+ , na, na, na, na
+ >
+ : map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+ typedef typename map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+ , na, na, na, na
+ >
+ : map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+ typedef typename map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+ , na, na, na, na
+ >
+ : map15<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ >
+{
+ typedef typename map15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, na, na, na, na
+ >
+ : map16<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15
+ >
+{
+ typedef typename map16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, na, na, na
+ >
+ : map17<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16
+ >
+{
+ typedef typename map17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, na, na
+ >
+ : map18<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17
+ >
+{
+ typedef typename map18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, na
+ >
+ : map19<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18
+ >
+{
+ typedef typename map19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+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 map
+ : map20<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, T19
+ >
+{
+ typedef typename map20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc551/minus.hpp b/boost/boost/mpl/aux_/preprocessed/bcc551/minus.hpp
new file mode 100644
index 00000000000..71d49137660
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc551/minus.hpp
@@ -0,0 +1,146 @@
+
+// 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/minus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct minus_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< minus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< minus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct minus_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct minus_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct minus_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct minus_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct minus
+ : minus< minus< minus< minus< N1,N2 >, N3>, N4>, N5>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , minus
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3, typename N4
+ >
+struct minus< N1,N2,N3,N4,na >
+
+ : minus< minus< minus< N1,N2 >, N3>, N4>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , minus
+ , ( N1, N2, N3, N4, na )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3
+ >
+struct minus< N1,N2,N3,na,na >
+
+ : minus< minus< N1,N2 >, N3>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , minus
+ , ( N1, N2, N3, na, na )
+ )
+};
+
+template<
+ typename N1, typename N2
+ >
+struct minus< N1,N2,na,na,na >
+ : minus_impl<
+ typename minus_tag<N1>::type
+ , typename minus_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , minus
+ , ( N1, N2, na, na, na )
+ )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, minus)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct minus_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ - BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc551/modulus.hpp b/boost/boost/mpl/aux_/preprocessed/bcc551/modulus.hpp
new file mode 100644
index 00000000000..224b34930c9
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc551/modulus.hpp
@@ -0,0 +1,101 @@
+
+// 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/modulus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct modulus_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< modulus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< modulus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct modulus_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct modulus_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct modulus_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct modulus_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct modulus
+
+ : modulus_impl<
+ typename modulus_tag<N1>::type
+ , typename modulus_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, modulus, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, modulus)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct modulus_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ % BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc551/not_equal_to.hpp b/boost/boost/mpl/aux_/preprocessed/bcc551/not_equal_to.hpp
new file mode 100644
index 00000000000..98b21b1e22d
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc551/not_equal_to.hpp
@@ -0,0 +1,94 @@
+
+// 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/not_equal_to.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct not_equal_to_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< not_equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< not_equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct not_equal_to_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct not_equal_to_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct not_equal_to_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct not_equal_to_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct not_equal_to
+
+ : not_equal_to_impl<
+ typename not_equal_to_tag<N1>::type
+ , typename not_equal_to_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, not_equal_to, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, not_equal_to)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct not_equal_to_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value != BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc551/or.hpp b/boost/boost/mpl/aux_/preprocessed/bcc551/or.hpp
new file mode 100644
index 00000000000..31e1aaa4e60
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc551/or.hpp
@@ -0,0 +1,69 @@
+
+// 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/or.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template< bool C_, typename T1, typename T2, typename T3, typename T4 >
+struct or_impl
+ : true_
+{
+};
+
+template< typename T1, typename T2, typename T3, typename T4 >
+struct or_impl< false,T1,T2,T3,T4 >
+ : or_impl<
+ BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+ , T2, T3, T4
+ , false_
+ >
+{
+};
+
+template<>
+struct or_impl<
+ false
+ , false_, false_, false_, false_
+ >
+ : false_
+{
+};
+
+} // namespace aux
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(T1)
+ , typename BOOST_MPL_AUX_NA_PARAM(T2)
+ , typename T3 = false_, typename T4 = false_, typename T5 = false_
+ >
+struct or_
+
+ : aux::or_impl<
+ BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+ , T2, T3, T4, T5
+ >
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , or_
+ , ( T1, T2, T3, T4, T5)
+ )
+};
+
+BOOST_MPL_AUX_NA_SPEC2(
+ 2
+ , 5
+ , or_
+ )
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc551/placeholders.hpp b/boost/boost/mpl/aux_/preprocessed/bcc551/placeholders.hpp
new file mode 100644
index 00000000000..ff97364b9ba
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc551/placeholders.hpp
@@ -0,0 +1,105 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+// Copyright Peter Dimov 2001-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)
+//
+
+// Preprocessed version of "boost/mpl/placeholders.hpp" header
+// -- DO NOT modify by hand!
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg< -1 > _;
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_;
+}
+
+}}
+
+/// agurt, 17/mar/02: one more placeholder for the last 'apply#'
+/// specialization
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<1> _1;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_1)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_1;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<2> _2;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_2)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_2;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<3> _3;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_3)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_3;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<4> _4;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_4)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_4;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<5> _5;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_5)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_5;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<6> _6;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_6)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_6;
+}
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc551/plus.hpp b/boost/boost/mpl/aux_/preprocessed/bcc551/plus.hpp
new file mode 100644
index 00000000000..a9f6ee79a5c
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc551/plus.hpp
@@ -0,0 +1,146 @@
+
+// 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/plus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct plus_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< plus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< plus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct plus_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct plus_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct plus_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct plus_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct plus
+ : plus< plus< plus< plus< N1,N2 >, N3>, N4>, N5>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , plus
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3, typename N4
+ >
+struct plus< N1,N2,N3,N4,na >
+
+ : plus< plus< plus< N1,N2 >, N3>, N4>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , plus
+ , ( N1, N2, N3, N4, na )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3
+ >
+struct plus< N1,N2,N3,na,na >
+
+ : plus< plus< N1,N2 >, N3>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , plus
+ , ( N1, N2, N3, na, na )
+ )
+};
+
+template<
+ typename N1, typename N2
+ >
+struct plus< N1,N2,na,na,na >
+ : plus_impl<
+ typename plus_tag<N1>::type
+ , typename plus_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , plus
+ , ( N1, N2, na, na, na )
+ )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, plus)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct plus_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ + BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc551/quote.hpp b/boost/boost/mpl/aux_/preprocessed/bcc551/quote.hpp
new file mode 100644
index 00000000000..e7a7f001961
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc551/quote.hpp
@@ -0,0 +1,11 @@
+
+// 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/quote.hpp" header
+// -- DO NOT modify by hand!
+
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc551/reverse_fold_impl.hpp b/boost/boost/mpl/aux_/preprocessed/bcc551/reverse_fold_impl.hpp
new file mode 100644
index 00000000000..7a07414adff
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc551/reverse_fold_impl.hpp
@@ -0,0 +1,295 @@
+
+// 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/aux_/reverse_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+ long N
+ , typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl;
+
+template< long N >
+struct reverse_fold_chunk;
+
+template<> struct reverse_fold_chunk<0>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef fwd_state0 bkwd_state0;
+ typedef bkwd_state0 state;
+ typedef iter0 iterator;
+ };
+};
+
+template<> struct reverse_fold_chunk<1>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+
+
+ typedef fwd_state1 bkwd_state1;
+ typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+ typedef bkwd_state0 state;
+ typedef iter1 iterator;
+ };
+};
+
+template<> struct reverse_fold_chunk<2>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+
+
+ typedef fwd_state2 bkwd_state2;
+ typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+ typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter2 iterator;
+ };
+};
+
+template<> struct reverse_fold_chunk<3>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+
+
+ typedef fwd_state3 bkwd_state3;
+ typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+ typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+ typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter3 iterator;
+ };
+};
+
+template<> struct reverse_fold_chunk<4>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef fwd_state4 bkwd_state4;
+ typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
+ typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+ typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+ typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter4 iterator;
+ };
+};
+
+template< long N >
+struct reverse_fold_chunk
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef reverse_fold_impl<
+ ( (N - 4) < 0 ? 0 : N - 4 )
+ , iter4
+ , Last
+ , fwd_state4
+ , BackwardOp
+ , ForwardOp
+ > nested_chunk;
+
+ typedef typename nested_chunk::state bkwd_state4;
+ typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
+ typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+ typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+ typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef typename nested_chunk::iterator iterator;
+ };
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_step;
+
+template<
+ typename Last
+ , typename State
+ >
+struct reverse_fold_null_step
+{
+ typedef Last iterator;
+ typedef State state;
+};
+
+template<>
+struct reverse_fold_chunk< -1 >
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef typename if_<
+ typename is_same< First,Last >::type
+ , reverse_fold_null_step< Last,State >
+ , reverse_fold_step< First,Last,State,BackwardOp,ForwardOp >
+ >::type res_;
+
+ typedef typename res_::state state;
+ typedef typename res_::iterator iterator;
+ };
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_step
+{
+ typedef reverse_fold_chunk< -1 >::template result_<
+ typename mpl::next<First>::type
+ , Last
+ , typename apply2<ForwardOp,State, typename deref<First>::type>::type
+ , BackwardOp
+ , ForwardOp
+ > nested_step;
+
+ typedef typename apply2<
+ BackwardOp
+ , typename nested_step::state
+ , typename deref<First>::type
+ >::type state;
+
+ typedef typename nested_step::iterator iterator;
+};
+
+template<
+ long N
+ , typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl
+ : reverse_fold_chunk<N>
+ ::template result_< First,Last,State,BackwardOp,ForwardOp >
+{
+};
+
+}}}
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc551/reverse_iter_fold_impl.hpp b/boost/boost/mpl/aux_/preprocessed/bcc551/reverse_iter_fold_impl.hpp
new file mode 100644
index 00000000000..39a4057b77d
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc551/reverse_iter_fold_impl.hpp
@@ -0,0 +1,295 @@
+
+// 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/aux_/reverse_iter_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+ long N
+ , typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl;
+
+template< long N >
+struct reverse_iter_fold_chunk;
+
+template<> struct reverse_iter_fold_chunk<0>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef fwd_state0 bkwd_state0;
+ typedef bkwd_state0 state;
+ typedef iter0 iterator;
+ };
+};
+
+template<> struct reverse_iter_fold_chunk<1>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+
+
+ typedef fwd_state1 bkwd_state1;
+ typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+ typedef bkwd_state0 state;
+ typedef iter1 iterator;
+ };
+};
+
+template<> struct reverse_iter_fold_chunk<2>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+
+
+ typedef fwd_state2 bkwd_state2;
+ typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+ typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter2 iterator;
+ };
+};
+
+template<> struct reverse_iter_fold_chunk<3>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+
+
+ typedef fwd_state3 bkwd_state3;
+ typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+ typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+ typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter3 iterator;
+ };
+};
+
+template<> struct reverse_iter_fold_chunk<4>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef fwd_state4 bkwd_state4;
+ typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;
+ typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+ typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+ typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter4 iterator;
+ };
+};
+
+template< long N >
+struct reverse_iter_fold_chunk
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef reverse_iter_fold_impl<
+ ( (N - 4) < 0 ? 0 : N - 4 )
+ , iter4
+ , Last
+ , fwd_state4
+ , BackwardOp
+ , ForwardOp
+ > nested_chunk;
+
+ typedef typename nested_chunk::state bkwd_state4;
+ typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;
+ typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+ typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+ typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef typename nested_chunk::iterator iterator;
+ };
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_step;
+
+template<
+ typename Last
+ , typename State
+ >
+struct reverse_iter_fold_null_step
+{
+ typedef Last iterator;
+ typedef State state;
+};
+
+template<>
+struct reverse_iter_fold_chunk< -1 >
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef typename if_<
+ typename is_same< First,Last >::type
+ , reverse_iter_fold_null_step< Last,State >
+ , reverse_iter_fold_step< First,Last,State,BackwardOp,ForwardOp >
+ >::type res_;
+
+ typedef typename res_::state state;
+ typedef typename res_::iterator iterator;
+ };
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_step
+{
+ typedef reverse_iter_fold_chunk< -1 >::template result_<
+ typename mpl::next<First>::type
+ , Last
+ , typename apply2< ForwardOp,State,First >::type
+ , BackwardOp
+ , ForwardOp
+ > nested_step;
+
+ typedef typename apply2<
+ BackwardOp
+ , typename nested_step::state
+ , First
+ >::type state;
+
+ typedef typename nested_step::iterator iterator;
+};
+
+template<
+ long N
+ , typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl
+ : reverse_iter_fold_chunk<N>
+ ::template result_< First,Last,State,BackwardOp,ForwardOp >
+{
+};
+
+}}}
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc551/set.hpp b/boost/boost/mpl/aux_/preprocessed/bcc551/set.hpp
new file mode 100644
index 00000000000..5721922e111
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc551/set.hpp
@@ -0,0 +1,323 @@
+
+// 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/set.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+ , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+ , typename T12 = na, typename T13 = na, typename T14 = na
+ , typename T15 = na, typename T16 = na, typename T17 = na
+ , typename T18 = na, typename T19 = na
+ >
+struct set;
+
+template<
+
+ >
+struct set<
+ na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set0< >
+{
+ typedef set0< >::type type;
+};
+
+template<
+ typename T0
+ >
+struct set<
+ T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set1<T0>
+{
+ typedef typename set1<T0>::type type;
+};
+
+template<
+ typename T0, typename T1
+ >
+struct set<
+ T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set2< T0,T1 >
+{
+ typedef typename set2< T0,T1 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2
+ >
+struct set<
+ T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set3< T0,T1,T2 >
+{
+ typedef typename set3< T0,T1,T2 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3
+ >
+struct set<
+ T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set4< T0,T1,T2,T3 >
+{
+ typedef typename set4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ >
+struct set<
+ T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set5< T0,T1,T2,T3,T4 >
+{
+ typedef typename set5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct set<
+ T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set6< T0,T1,T2,T3,T4,T5 >
+{
+ typedef typename set6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6
+ >
+struct set<
+ T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set7< T0,T1,T2,T3,T4,T5,T6 >
+{
+ typedef typename set7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7
+ >
+struct set<
+ T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+ typedef typename set8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8
+ >
+struct set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+ typedef typename set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ >
+struct set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+ typedef typename set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ , typename T10
+ >
+struct set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+ typedef typename set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+ , na, na, na, na
+ >
+ : set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+ typedef typename set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+ , na, na, na, na
+ >
+ : set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+ typedef typename set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+ , na, na, na, na
+ >
+ : set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+ typedef typename set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+ , na, na, na, na
+ >
+ : set15<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ >
+{
+ typedef typename set15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, na, na, na, na
+ >
+ : set16<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15
+ >
+{
+ typedef typename set16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, na, na, na
+ >
+ : set17<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16
+ >
+{
+ typedef typename set17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, na, na
+ >
+ : set18<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17
+ >
+{
+ typedef typename set18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, na
+ >
+ : set19<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18
+ >
+{
+ typedef typename set19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+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 set
+ : set20<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, T19
+ >
+{
+ typedef typename set20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc551/set_c.hpp b/boost/boost/mpl/aux_/preprocessed/bcc551/set_c.hpp
new file mode 100644
index 00000000000..cbeb932c13d
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc551/set_c.hpp
@@ -0,0 +1,328 @@
+
+// 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/set_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+ , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+ , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+ , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+ , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+ , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+ , long C18 = LONG_MAX, long C19 = LONG_MAX
+ >
+struct set_c;
+
+template<
+ typename T
+ >
+struct set_c<
+ T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set0_c<T>
+{
+ typedef typename set0_c<T>::type type;
+};
+
+template<
+ typename T, long C0
+ >
+struct set_c<
+ T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set1_c< T,C0 >
+{
+ typedef typename set1_c< T,C0 >::type type;
+};
+
+template<
+ typename T, long C0, long C1
+ >
+struct set_c<
+ T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set2_c< T,C0,C1 >
+{
+ typedef typename set2_c< T,C0,C1 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2
+ >
+struct set_c<
+ T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set3_c< T,C0,C1,C2 >
+{
+ typedef typename set3_c< T,C0,C1,C2 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3
+ >
+struct set_c<
+ T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set4_c< T,C0,C1,C2,C3 >
+{
+ typedef typename set4_c< T,C0,C1,C2,C3 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set5_c< T,C0,C1,C2,C3,C4 >
+{
+ typedef typename set5_c< T,C0,C1,C2,C3,C4 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set6_c< T,C0,C1,C2,C3,C4,C5 >
+{
+ typedef typename set6_c< T,C0,C1,C2,C3,C4,C5 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set7_c< T,C0,C1,C2,C3,C4,C5,C6 >
+{
+ typedef typename set7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX
+ >
+ : set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >
+{
+ typedef typename set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX
+ >
+ : set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >
+{
+ typedef typename set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX
+ >
+ : set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >
+{
+ typedef typename set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >
+{
+ typedef typename set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >
+{
+ typedef typename set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >
+{
+ typedef typename set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set14_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+ >
+{
+ typedef typename set14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set15_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ >
+{
+ typedef typename set15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set16_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15
+ >
+{
+ typedef typename set16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set17_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16
+ >
+{
+ typedef typename set17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, LONG_MAX, LONG_MAX
+ >
+ : set18_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17
+ >
+{
+ typedef typename set18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, C18, LONG_MAX
+ >
+ : set19_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, C18
+ >
+{
+ typedef typename set19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+struct set_c
+ : set20_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, C18, C19
+ >
+{
+ typedef typename set20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc551/shift_left.hpp b/boost/boost/mpl/aux_/preprocessed/bcc551/shift_left.hpp
new file mode 100644
index 00000000000..b5b181ce196
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc551/shift_left.hpp
@@ -0,0 +1,99 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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)
+//
+
+// Preprocessed version of "boost/mpl/shift_left.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct shift_left_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< shift_left_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< shift_left_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct shift_left_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct shift_left_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct shift_left_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct shift_left_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct shift_left
+
+ : shift_left_impl<
+ typename shift_left_tag<N1>::type
+ , typename shift_left_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_left, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_left)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct shift_left_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N, typename S > struct apply
+
+ : integral_c<
+ typename N::value_type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N)::value
+ << BOOST_MPL_AUX_VALUE_WKND(S)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc551/shift_right.hpp b/boost/boost/mpl/aux_/preprocessed/bcc551/shift_right.hpp
new file mode 100644
index 00000000000..f7a342e989a
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc551/shift_right.hpp
@@ -0,0 +1,99 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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)
+//
+
+// Preprocessed version of "boost/mpl/shift_right.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct shift_right_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< shift_right_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< shift_right_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct shift_right_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct shift_right_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct shift_right_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct shift_right_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct shift_right
+
+ : shift_right_impl<
+ typename shift_right_tag<N1>::type
+ , typename shift_right_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_right, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_right)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct shift_right_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N, typename S > struct apply
+
+ : integral_c<
+ typename N::value_type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N)::value
+ >> BOOST_MPL_AUX_VALUE_WKND(S)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc551/template_arity.hpp b/boost/boost/mpl/aux_/preprocessed/bcc551/template_arity.hpp
new file mode 100644
index 00000000000..1164f0f8c27
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc551/template_arity.hpp
@@ -0,0 +1,40 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/aux_/template_arity.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+template< bool >
+struct template_arity_impl
+{
+ template< typename F > struct result_
+ : mpl::int_< -1 >
+ {
+ };
+};
+
+template<>
+struct template_arity_impl<true>
+{
+ template< typename F > struct result_
+ : F::arity
+ {
+ };
+};
+
+template< typename F >
+struct template_arity
+ : template_arity_impl< ::boost::mpl::aux::has_rebind<F>::value >
+ ::template result_<F>
+{
+};
+
+}}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc551/times.hpp b/boost/boost/mpl/aux_/preprocessed/bcc551/times.hpp
new file mode 100644
index 00000000000..cb97cc4e132
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc551/times.hpp
@@ -0,0 +1,146 @@
+
+// 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/times.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct times_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< times_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< times_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct times_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct times_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct times_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct times_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct times
+ : times< times< times< times< N1,N2 >, N3>, N4>, N5>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , times
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3, typename N4
+ >
+struct times< N1,N2,N3,N4,na >
+
+ : times< times< times< N1,N2 >, N3>, N4>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , times
+ , ( N1, N2, N3, N4, na )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3
+ >
+struct times< N1,N2,N3,na,na >
+
+ : times< times< N1,N2 >, N3>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , times
+ , ( N1, N2, N3, na, na )
+ )
+};
+
+template<
+ typename N1, typename N2
+ >
+struct times< N1,N2,na,na,na >
+ : times_impl<
+ typename times_tag<N1>::type
+ , typename times_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , times
+ , ( N1, N2, na, na, na )
+ )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, times)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct times_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ * BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc551/unpack_args.hpp b/boost/boost/mpl/aux_/preprocessed/bcc551/unpack_args.hpp
new file mode 100644
index 00000000000..ef7c2b016ef
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc551/unpack_args.hpp
@@ -0,0 +1,97 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/unpack_args.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template< int size, typename F, typename Args >
+struct unpack_args_impl;
+
+template< typename F, typename Args >
+struct unpack_args_impl< 0,F,Args >
+ : apply0<
+ F
+ >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 1,F,Args >
+ : apply1<
+ F
+ , typename at_c< Args,0 >::type
+ >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 2,F,Args >
+ : apply2<
+ F
+ , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+ >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 3,F,Args >
+ : apply3<
+ F
+ , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+ , typename at_c< Args,2 >::type
+ >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 4,F,Args >
+ : apply4<
+ F
+ , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+ , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type
+ >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 5,F,Args >
+ : apply5<
+ F
+ , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+ , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type
+ , typename at_c< Args,4 >::type
+ >
+{
+};
+
+}
+
+template<
+ typename F
+ >
+struct unpack_args
+{
+ template< typename Args > struct apply
+ {
+ typedef typename aux::unpack_args_impl<
+ size<Args>::value
+ , F
+ , Args
+ >::type type;
+
+ };
+};
+
+BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args)
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc551/vector.hpp b/boost/boost/mpl/aux_/preprocessed/bcc551/vector.hpp
new file mode 100644
index 00000000000..bfa9565a537
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc551/vector.hpp
@@ -0,0 +1,323 @@
+
+// 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/vector.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+ , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+ , typename T12 = na, typename T13 = na, typename T14 = na
+ , typename T15 = na, typename T16 = na, typename T17 = na
+ , typename T18 = na, typename T19 = na
+ >
+struct vector;
+
+template<
+
+ >
+struct vector<
+ na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector0< >
+{
+ typedef vector0< >::type type;
+};
+
+template<
+ typename T0
+ >
+struct vector<
+ T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector1<T0>
+{
+ typedef typename vector1<T0>::type type;
+};
+
+template<
+ typename T0, typename T1
+ >
+struct vector<
+ T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector2< T0,T1 >
+{
+ typedef typename vector2< T0,T1 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2
+ >
+struct vector<
+ T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector3< T0,T1,T2 >
+{
+ typedef typename vector3< T0,T1,T2 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3
+ >
+struct vector<
+ T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector4< T0,T1,T2,T3 >
+{
+ typedef typename vector4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ >
+struct vector<
+ T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector5< T0,T1,T2,T3,T4 >
+{
+ typedef typename vector5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct vector<
+ T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector6< T0,T1,T2,T3,T4,T5 >
+{
+ typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6
+ >
+struct vector<
+ T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector7< T0,T1,T2,T3,T4,T5,T6 >
+{
+ typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7
+ >
+struct vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+ typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8
+ >
+struct vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+ typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ >
+struct vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+ typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ , typename T10
+ >
+struct vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+ typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+ , na, na, na, na
+ >
+ : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+ typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+ , na, na, na, na
+ >
+ : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+ typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+ , na, na, na, na
+ >
+ : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+ typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+ , na, na, na, na
+ >
+ : vector15<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ >
+{
+ typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, na, na, na, na
+ >
+ : vector16<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15
+ >
+{
+ typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, na, na, na
+ >
+ : vector17<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16
+ >
+{
+ typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, na, na
+ >
+ : vector18<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17
+ >
+{
+ typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, na
+ >
+ : vector19<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18
+ >
+{
+ typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+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 vector
+ : vector20<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, T19
+ >
+{
+ typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/bcc551/vector_c.hpp b/boost/boost/mpl/aux_/preprocessed/bcc551/vector_c.hpp
new file mode 100644
index 00000000000..0f1560d7f13
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/bcc551/vector_c.hpp
@@ -0,0 +1,309 @@
+
+// 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/vector_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+ , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+ , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+ , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+ , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+ , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+ , long C18 = LONG_MAX, long C19 = LONG_MAX
+ >
+struct vector_c;
+
+template<
+ typename T
+ >
+struct vector_c<
+ T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector0_c<T>
+{
+ typedef typename vector0_c<T>::type type;
+};
+
+template<
+ typename T, long C0
+ >
+struct vector_c<
+ T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector1_c< T, T(C0) >
+{
+ typedef typename vector1_c< T, T(C0) >::type type;
+};
+
+template<
+ typename T, long C0, long C1
+ >
+struct vector_c<
+ T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector2_c< T, T(C0), T(C1) >
+{
+ typedef typename vector2_c< T, T(C0), T(C1) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2
+ >
+struct vector_c<
+ T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector3_c< T, T(C0), T(C1), T(C2) >
+{
+ typedef typename vector3_c< T, T(C0), T(C1), T(C2) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector4_c< T, T(C0), T(C1), T(C2), T(C3) >
+{
+ typedef typename vector4_c< T, T(C0), T(C1), T(C2), T(C3) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) >
+{
+ typedef typename vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) >
+{
+ typedef typename vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) >
+{
+ typedef typename vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX
+ >
+ : vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) >
+{
+ typedef typename vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX
+ >
+ : vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) >
+{
+ typedef typename vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX
+ >
+ : vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) >
+{
+ typedef typename vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) >
+{
+ typedef typename vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector12_c< 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) >
+{
+ typedef typename vector12_c< 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) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector13_c< 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) >
+{
+ typedef typename vector13_c< 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) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector14_c< 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) >
+{
+ typedef typename vector14_c< 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) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector15_c< 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) >
+{
+ typedef typename vector15_c< 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) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector16_c< 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) >
+{
+ typedef typename vector16_c< 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) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector17_c< 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) >
+{
+ typedef typename vector17_c< 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) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, LONG_MAX, LONG_MAX
+ >
+ : vector18_c< 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) >
+{
+ typedef typename vector18_c< 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) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, C18, LONG_MAX
+ >
+ : vector19_c< 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) >
+{
+ typedef typename vector19_c< 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) >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+struct vector_c
+ : vector20_c< 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) >
+{
+ typedef typename vector20_c< 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) >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/dmc/advance_backward.hpp b/boost/boost/mpl/aux_/preprocessed/dmc/advance_backward.hpp
new file mode 100644
index 00000000000..26de94cea1a
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/dmc/advance_backward.hpp
@@ -0,0 +1,97 @@
+
+// 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/aux_/advance_backward.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+template< long N > struct advance_backward;
+template<>
+struct advance_backward<0>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef iter0 type;
+ };
+};
+
+template<>
+struct advance_backward<1>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename prior<iter0>::type iter1;
+ typedef iter1 type;
+ };
+};
+
+template<>
+struct advance_backward<2>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename prior<iter0>::type iter1;
+ typedef typename prior<iter1>::type iter2;
+ typedef iter2 type;
+ };
+};
+
+template<>
+struct advance_backward<3>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename prior<iter0>::type iter1;
+ typedef typename prior<iter1>::type iter2;
+ typedef typename prior<iter2>::type iter3;
+ typedef iter3 type;
+ };
+};
+
+template<>
+struct advance_backward<4>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename prior<iter0>::type iter1;
+ typedef typename prior<iter1>::type iter2;
+ typedef typename prior<iter2>::type iter3;
+ typedef typename prior<iter3>::type iter4;
+ typedef iter4 type;
+ };
+};
+
+template< long N >
+struct advance_backward
+{
+ template< typename Iterator > struct apply
+ {
+ typedef typename apply_wrap1<
+ advance_backward<4>
+ , Iterator
+ >::type chunk_result_;
+
+ typedef typename apply_wrap1<
+ advance_backward<(
+ (N - 4) < 0
+ ? 0
+ : N - 4
+ )>
+ , chunk_result_
+ >::type type;
+ };
+};
+
+}}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/dmc/advance_forward.hpp b/boost/boost/mpl/aux_/preprocessed/dmc/advance_forward.hpp
new file mode 100644
index 00000000000..b137cc72af1
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/dmc/advance_forward.hpp
@@ -0,0 +1,97 @@
+
+// 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/aux_/advance_forward.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+template< long N > struct advance_forward;
+template<>
+struct advance_forward<0>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef iter0 type;
+ };
+};
+
+template<>
+struct advance_forward<1>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename next<iter0>::type iter1;
+ typedef iter1 type;
+ };
+};
+
+template<>
+struct advance_forward<2>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename next<iter0>::type iter1;
+ typedef typename next<iter1>::type iter2;
+ typedef iter2 type;
+ };
+};
+
+template<>
+struct advance_forward<3>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename next<iter0>::type iter1;
+ typedef typename next<iter1>::type iter2;
+ typedef typename next<iter2>::type iter3;
+ typedef iter3 type;
+ };
+};
+
+template<>
+struct advance_forward<4>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename next<iter0>::type iter1;
+ typedef typename next<iter1>::type iter2;
+ typedef typename next<iter2>::type iter3;
+ typedef typename next<iter3>::type iter4;
+ typedef iter4 type;
+ };
+};
+
+template< long N >
+struct advance_forward
+{
+ template< typename Iterator > struct apply
+ {
+ typedef typename apply_wrap1<
+ advance_forward<4>
+ , Iterator
+ >::type chunk_result_;
+
+ typedef typename apply_wrap1<
+ advance_forward<(
+ (N - 4) < 0
+ ? 0
+ : N - 4
+ )>
+ , chunk_result_
+ >::type type;
+ };
+};
+
+}}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/dmc/and.hpp b/boost/boost/mpl/aux_/preprocessed/dmc/and.hpp
new file mode 100644
index 00000000000..010ad1fc849
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/dmc/and.hpp
@@ -0,0 +1,69 @@
+
+// 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/and.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template< bool C_, typename T1, typename T2, typename T3, typename T4 >
+struct and_impl
+ : false_
+{
+};
+
+template< typename T1, typename T2, typename T3, typename T4 >
+struct and_impl< true,T1,T2,T3,T4 >
+ : and_impl<
+ BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+ , T2, T3, T4
+ , true_
+ >
+{
+};
+
+template<>
+struct and_impl<
+ true
+ , true_, true_, true_, true_
+ >
+ : true_
+{
+};
+
+} // namespace aux
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(T1)
+ , typename BOOST_MPL_AUX_NA_PARAM(T2)
+ , typename T3 = true_, typename T4 = true_, typename T5 = true_
+ >
+struct and_
+
+ : aux::and_impl<
+ BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+ , T2, T3, T4, T5
+ >
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , and_
+ , ( T1, T2, T3, T4, T5)
+ )
+};
+
+BOOST_MPL_AUX_NA_SPEC2(
+ 2
+ , 5
+ , and_
+ )
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/dmc/apply.hpp b/boost/boost/mpl/aux_/preprocessed/dmc/apply.hpp
new file mode 100644
index 00000000000..e08eaccf03a
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/dmc/apply.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/apply.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename F
+ >
+struct apply0
+
+ : apply_wrap0<
+ typename lambda<F>::type
+
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 1
+ , apply0
+ , (F )
+ )
+};
+
+template<
+ typename F
+ >
+struct apply< F,na,na,na,na,na >
+ : apply0<F>
+{
+};
+
+template<
+ typename F, typename T1
+ >
+struct apply1
+
+ : apply_wrap1<
+ typename lambda<F>::type
+ , T1
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 2
+ , apply1
+ , (F, T1)
+ )
+};
+
+template<
+ typename F, typename T1
+ >
+struct apply< F,T1,na,na,na,na >
+ : apply1< F,T1 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct apply2
+
+ : apply_wrap2<
+ typename lambda<F>::type
+ , T1, T2
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 3
+ , apply2
+ , (F, T1, T2)
+ )
+};
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct apply< F,T1,T2,na,na,na >
+ : apply2< F,T1,T2 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct apply3
+
+ : apply_wrap3<
+ typename lambda<F>::type
+ , T1, T2, T3
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 4
+ , apply3
+ , (F, T1, T2, T3)
+ )
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct apply< F,T1,T2,T3,na,na >
+ : apply3< F,T1,T2,T3 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct apply4
+
+ : apply_wrap4<
+ typename lambda<F>::type
+ , T1, T2, T3, T4
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , apply4
+ , (F, T1, T2, T3, T4)
+ )
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct apply< F,T1,T2,T3,T4,na >
+ : apply4< F,T1,T2,T3,T4 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct apply5
+
+ : apply_wrap5<
+ typename lambda<F>::type
+ , T1, T2, T3, T4, T5
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 6
+ , apply5
+ , (F, T1, T2, T3, T4, T5)
+ )
+};
+
+/// primary template (not a specialization!)
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct apply
+ : apply5< F,T1,T2,T3,T4,T5 >
+{
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/dmc/apply_fwd.hpp b/boost/boost/mpl/aux_/preprocessed/dmc/apply_fwd.hpp
new file mode 100644
index 00000000000..b2ed5d51301
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/dmc/apply_fwd.hpp
@@ -0,0 +1,52 @@
+
+// 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/apply_fwd.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename F, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na
+ >
+struct apply;
+
+template<
+ typename F
+ >
+struct apply0;
+
+template<
+ typename F, typename T1
+ >
+struct apply1;
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct apply2;
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct apply3;
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct apply4;
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct apply5;
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/dmc/apply_wrap.hpp b/boost/boost/mpl/aux_/preprocessed/dmc/apply_wrap.hpp
new file mode 100644
index 00000000000..34d51a1a587
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/dmc/apply_wrap.hpp
@@ -0,0 +1,84 @@
+
+// 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/apply_wrap.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename F
+
+ , typename has_apply_ = typename aux::has_apply<F>::type
+
+ >
+struct apply_wrap0
+
+ : F::template apply< >
+{
+};
+
+template< typename F >
+struct apply_wrap0< F,true_ >
+ : F::apply
+{
+};
+
+template<
+ typename F, typename T1
+
+ >
+struct apply_wrap1
+
+ : F::template apply<T1>
+{
+};
+
+template<
+ typename F, typename T1, typename T2
+
+ >
+struct apply_wrap2
+
+ : F::template apply< T1,T2 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3
+
+ >
+struct apply_wrap3
+
+ : F::template apply< T1,T2,T3 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+
+ >
+struct apply_wrap4
+
+ : F::template apply< T1,T2,T3,T4 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+
+ >
+struct apply_wrap5
+
+ : F::template apply< T1,T2,T3,T4,T5 >
+{
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/dmc/arg.hpp b/boost/boost/mpl/aux_/preprocessed/dmc/arg.hpp
new file mode 100644
index 00000000000..6f2f8a80709
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/dmc/arg.hpp
@@ -0,0 +1,123 @@
+
+// Copyright Peter Dimov 2001-2002
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/arg.hpp" header
+// -- DO NOT modify by hand!
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+template<> struct arg< -1 >
+{
+ BOOST_STATIC_CONSTANT(int, value = -1);
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ typedef U1 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+template<> struct arg<1>
+{
+ BOOST_STATIC_CONSTANT(int, value = 1);
+ typedef arg<2> next;
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ typedef U1 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+template<> struct arg<2>
+{
+ BOOST_STATIC_CONSTANT(int, value = 2);
+ typedef arg<3> next;
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ typedef U2 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+template<> struct arg<3>
+{
+ BOOST_STATIC_CONSTANT(int, value = 3);
+ typedef arg<4> next;
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ typedef U3 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+template<> struct arg<4>
+{
+ BOOST_STATIC_CONSTANT(int, value = 4);
+ typedef arg<5> next;
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ typedef U4 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+template<> struct arg<5>
+{
+ BOOST_STATIC_CONSTANT(int, value = 5);
+ typedef arg<6> next;
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ typedef U5 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+BOOST_MPL_AUX_NONTYPE_ARITY_SPEC(1,int, arg)
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
diff --git a/boost/boost/mpl/aux_/preprocessed/dmc/basic_bind.hpp b/boost/boost/mpl/aux_/preprocessed/dmc/basic_bind.hpp
new file mode 100644
index 00000000000..1e734294183
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/dmc/basic_bind.hpp
@@ -0,0 +1,406 @@
+
+// Copyright Peter Dimov 2001
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/aux_/basic_bind.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template<
+ typename T, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg
+{
+ typedef T type;
+};
+
+template<
+ int N, typename U1, typename U2, typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >
+{
+ typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg< bind< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 >
+{
+ typedef bind< F,T1,T2,T3,T4,T5 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+template<
+ typename F, int dummy_
+ >
+struct bind0
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+
+ public:
+ typedef typename apply_wrap0<
+ f_
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg<
+ bind0<F>, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind0<F> f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(1, bind0)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)
+
+template<
+ typename F, int dummy_
+ >
+struct bind< F,na,na,na,na,na >
+ : bind0<F>
+{
+};
+
+template<
+ typename F, typename T1, int dummy_
+ >
+struct bind1
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+
+ public:
+ typedef typename apply_wrap1<
+ f_
+ , typename t1::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename U1, typename U2, typename U3
+ , typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind1< F,T1 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind1< F,T1 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(2, bind1)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)
+
+template<
+ typename F, typename T1, int dummy_
+ >
+struct bind< F,T1,na,na,na,na >
+ : bind1< F,T1 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, int dummy_
+ >
+struct bind2
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+ typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+
+ public:
+ typedef typename apply_wrap2<
+ f_
+ , typename t1::type, typename t2::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename U1, typename U2
+ , typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind2< F,T1,T2 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind2< F,T1,T2 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(3, bind2)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)
+
+template<
+ typename F, typename T1, typename T2, int dummy_
+ >
+struct bind< F,T1,T2,na,na,na >
+ : bind2< F,T1,T2 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, int dummy_
+ >
+struct bind3
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+ typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+ typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+
+ public:
+ typedef typename apply_wrap3<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename U1
+ , typename U2, typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind3< F,T1,T2,T3 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(4, bind3)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)
+
+template<
+ typename F, typename T1, typename T2, typename T3, int dummy_
+ >
+struct bind< F,T1,T2,T3,na,na >
+ : bind3< F,T1,T2,T3 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , int dummy_
+ >
+struct bind4
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+ typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+ typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+ typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;
+
+ public:
+ typedef typename apply_wrap4<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ , typename t4::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename U1, typename U2, typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind4< F,T1,T2,T3,T4 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , int dummy_
+ >
+struct bind< F,T1,T2,T3,T4,na >
+ : bind4< F,T1,T2,T3,T4 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5, int dummy_
+ >
+struct bind5
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+ typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+ typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+ typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;
+ typedef aux::resolve_bind_arg< T5,U1,U2,U3,U4,U5 > t5;
+
+ public:
+ typedef typename apply_wrap5<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ , typename t4::type, typename t5::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg<
+ bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind5< F,T1,T2,T3,T4,T5 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
+
+/// primary template (not a specialization!)
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5, int dummy_
+ >
+struct bind
+ : bind5< F,T1,T2,T3,T4,T5 >
+{
+};
+
+/// if_/eval_if specializations
+template< template< typename T1, typename T2, typename T3 > class F, typename Tag >
+struct quote3;
+
+template< typename T1, typename T2, typename T3 > struct if_;
+
+template<
+ typename Tag, typename T1, typename T2, typename T3
+ >
+struct bind3<
+ quote3< if_,Tag >
+ , T1, T2, T3
+ >
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef mpl::arg<1> n1;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+ typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+ typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+ typedef typename if_<
+ typename t1::type
+ , t2, t3
+ >::type f_;
+
+ public:
+ typedef typename f_::type type;
+ };
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/dmc/bind.hpp b/boost/boost/mpl/aux_/preprocessed/dmc/bind.hpp
new file mode 100644
index 00000000000..94bfe1fef77
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/dmc/bind.hpp
@@ -0,0 +1,515 @@
+
+// Copyright Peter Dimov 2001
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/bind.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template<
+ typename T, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg
+{
+ typedef T type;
+};
+
+template<
+ typename T
+ , typename Arg
+ >
+struct replace_unnamed_arg
+{
+ typedef Arg next;
+ typedef T type;
+};
+
+template<
+ typename Arg
+ >
+struct replace_unnamed_arg< arg< -1 >, Arg >
+{
+ typedef typename Arg::next next;
+ typedef Arg type;
+};
+
+template<
+ int N, typename U1, typename U2, typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >
+{
+ typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg< bind< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 >
+{
+ typedef bind< F,T1,T2,T3,T4,T5 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+template<
+ typename F, int dummy_
+ >
+struct bind0
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ public:
+ typedef typename apply_wrap0<
+ f_
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg<
+ bind0<F>, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind0<F> f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(1, bind0)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)
+
+template<
+ typename F, int dummy_
+ >
+struct bind< F,na,na,na,na,na >
+ : bind0<F>
+{
+};
+
+template<
+ typename F, typename T1, int dummy_
+ >
+struct bind1
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ public:
+ typedef typename apply_wrap1<
+ f_
+ , typename t1::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename U1, typename U2, typename U3
+ , typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind1< F,T1 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind1< F,T1 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(2, bind1)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)
+
+template<
+ typename F, typename T1, int dummy_
+ >
+struct bind< F,T1,na,na,na,na >
+ : bind1< F,T1 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, int dummy_
+ >
+struct bind2
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ typedef aux::replace_unnamed_arg< T2,n2 > r2;
+ typedef typename r2::type a2;
+ typedef typename r2::next n3;
+ typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+ ///
+ public:
+ typedef typename apply_wrap2<
+ f_
+ , typename t1::type, typename t2::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename U1, typename U2
+ , typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind2< F,T1,T2 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind2< F,T1,T2 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(3, bind2)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)
+
+template<
+ typename F, typename T1, typename T2, int dummy_
+ >
+struct bind< F,T1,T2,na,na,na >
+ : bind2< F,T1,T2 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, int dummy_
+ >
+struct bind3
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ typedef aux::replace_unnamed_arg< T2,n2 > r2;
+ typedef typename r2::type a2;
+ typedef typename r2::next n3;
+ typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+ ///
+ typedef aux::replace_unnamed_arg< T3,n3 > r3;
+ typedef typename r3::type a3;
+ typedef typename r3::next n4;
+ typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+ ///
+ public:
+ typedef typename apply_wrap3<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename U1
+ , typename U2, typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind3< F,T1,T2,T3 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(4, bind3)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)
+
+template<
+ typename F, typename T1, typename T2, typename T3, int dummy_
+ >
+struct bind< F,T1,T2,T3,na,na >
+ : bind3< F,T1,T2,T3 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , int dummy_
+ >
+struct bind4
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ typedef aux::replace_unnamed_arg< T2,n2 > r2;
+ typedef typename r2::type a2;
+ typedef typename r2::next n3;
+ typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+ ///
+ typedef aux::replace_unnamed_arg< T3,n3 > r3;
+ typedef typename r3::type a3;
+ typedef typename r3::next n4;
+ typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+ ///
+ typedef aux::replace_unnamed_arg< T4,n4 > r4;
+ typedef typename r4::type a4;
+ typedef typename r4::next n5;
+ typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
+ ///
+ public:
+ typedef typename apply_wrap4<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ , typename t4::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename U1, typename U2, typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind4< F,T1,T2,T3,T4 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , int dummy_
+ >
+struct bind< F,T1,T2,T3,T4,na >
+ : bind4< F,T1,T2,T3,T4 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5, int dummy_
+ >
+struct bind5
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ typedef aux::replace_unnamed_arg< T2,n2 > r2;
+ typedef typename r2::type a2;
+ typedef typename r2::next n3;
+ typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+ ///
+ typedef aux::replace_unnamed_arg< T3,n3 > r3;
+ typedef typename r3::type a3;
+ typedef typename r3::next n4;
+ typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+ ///
+ typedef aux::replace_unnamed_arg< T4,n4 > r4;
+ typedef typename r4::type a4;
+ typedef typename r4::next n5;
+ typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
+ ///
+ typedef aux::replace_unnamed_arg< T5,n5 > r5;
+ typedef typename r5::type a5;
+ typedef typename r5::next n6;
+ typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5;
+ ///
+ public:
+ typedef typename apply_wrap5<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ , typename t4::type, typename t5::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg<
+ bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind5< F,T1,T2,T3,T4,T5 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
+
+/// primary template (not a specialization!)
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5, int dummy_
+ >
+struct bind
+ : bind5< F,T1,T2,T3,T4,T5 >
+{
+};
+
+/// if_/eval_if specializations
+template< template< typename T1, typename T2, typename T3 > class F, typename Tag >
+struct quote3;
+
+template< typename T1, typename T2, typename T3 > struct if_;
+
+template<
+ typename Tag, typename T1, typename T2, typename T3
+ >
+struct bind3<
+ quote3< if_,Tag >
+ , T1, T2, T3
+ >
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef mpl::arg<1> n1;
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ typedef aux::replace_unnamed_arg< T2,n2 > r2;
+ typedef typename r2::type a2;
+ typedef typename r2::next n3;
+ typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+ ///
+ typedef aux::replace_unnamed_arg< T3,n3 > r3;
+ typedef typename r3::type a3;
+ typedef typename r3::next n4;
+ typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+ ///
+ typedef typename if_<
+ typename t1::type
+ , t2, t3
+ >::type f_;
+
+ public:
+ typedef typename f_::type type;
+ };
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/dmc/bind_fwd.hpp b/boost/boost/mpl/aux_/preprocessed/dmc/bind_fwd.hpp
new file mode 100644
index 00000000000..181bc77faaa
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/dmc/bind_fwd.hpp
@@ -0,0 +1,53 @@
+
+// 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/bind_fwd.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename F, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na, int dummy_ = 0
+ >
+struct bind;
+
+template<
+ typename F, int dummy_ = 0
+ >
+struct bind0;
+
+template<
+ typename F, typename T1, int dummy_ = 0
+ >
+struct bind1;
+
+template<
+ typename F, typename T1, typename T2, int dummy_ = 0
+ >
+struct bind2;
+
+template<
+ typename F, typename T1, typename T2, typename T3, int dummy_ = 0
+ >
+struct bind3;
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , int dummy_ = 0
+ >
+struct bind4;
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5, int dummy_ = 0
+ >
+struct bind5;
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/dmc/bitand.hpp b/boost/boost/mpl/aux_/preprocessed/dmc/bitand.hpp
new file mode 100644
index 00000000000..0bbf54ea26d
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/dmc/bitand.hpp
@@ -0,0 +1,147 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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)
+//
+
+// Preprocessed version of "boost/mpl/bitand.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct bitand_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< bitand_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< bitand_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitand_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct bitand_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct bitand_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct bitand_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct bitand_
+ : bitand_< bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>, N5>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , bitand_
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3, typename N4
+ >
+struct bitand_< N1,N2,N3,N4,na >
+
+ : bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitand_
+ , ( N1, N2, N3, N4, na )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3
+ >
+struct bitand_< N1,N2,N3,na,na >
+
+ : bitand_< bitand_< N1,N2 >, N3>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitand_
+ , ( N1, N2, N3, na, na )
+ )
+};
+
+template<
+ typename N1, typename N2
+ >
+struct bitand_< N1,N2,na,na,na >
+ : bitand_impl<
+ typename bitand_tag<N1>::type
+ , typename bitand_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitand_
+ , ( N1, N2, na, na, na )
+ )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitand_)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct bitand_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ & BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/dmc/bitor.hpp b/boost/boost/mpl/aux_/preprocessed/dmc/bitor.hpp
new file mode 100644
index 00000000000..55b31cb8a9c
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/dmc/bitor.hpp
@@ -0,0 +1,147 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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)
+//
+
+// Preprocessed version of "boost/mpl/bitor.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct bitor_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< bitor_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< bitor_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitor_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct bitor_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct bitor_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct bitor_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct bitor_
+ : bitor_< bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>, N5>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , bitor_
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3, typename N4
+ >
+struct bitor_< N1,N2,N3,N4,na >
+
+ : bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitor_
+ , ( N1, N2, N3, N4, na )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3
+ >
+struct bitor_< N1,N2,N3,na,na >
+
+ : bitor_< bitor_< N1,N2 >, N3>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitor_
+ , ( N1, N2, N3, na, na )
+ )
+};
+
+template<
+ typename N1, typename N2
+ >
+struct bitor_< N1,N2,na,na,na >
+ : bitor_impl<
+ typename bitor_tag<N1>::type
+ , typename bitor_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitor_
+ , ( N1, N2, na, na, na )
+ )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitor_)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct bitor_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ | BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/dmc/bitxor.hpp b/boost/boost/mpl/aux_/preprocessed/dmc/bitxor.hpp
new file mode 100644
index 00000000000..ec1939151d0
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/dmc/bitxor.hpp
@@ -0,0 +1,147 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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)
+//
+
+// Preprocessed version of "boost/mpl/bitxor.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct bitxor_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< bitxor_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< bitxor_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitxor_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct bitxor_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct bitxor_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct bitxor_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct bitxor_
+ : bitxor_< bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4>, N5>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , bitxor_
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3, typename N4
+ >
+struct bitxor_< N1,N2,N3,N4,na >
+
+ : bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitxor_
+ , ( N1, N2, N3, N4, na )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3
+ >
+struct bitxor_< N1,N2,N3,na,na >
+
+ : bitxor_< bitxor_< N1,N2 >, N3>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitxor_
+ , ( N1, N2, N3, na, na )
+ )
+};
+
+template<
+ typename N1, typename N2
+ >
+struct bitxor_< N1,N2,na,na,na >
+ : bitxor_impl<
+ typename bitxor_tag<N1>::type
+ , typename bitxor_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitxor_
+ , ( N1, N2, na, na, na )
+ )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitxor_)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct bitxor_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ ^ BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/dmc/deque.hpp b/boost/boost/mpl/aux_/preprocessed/dmc/deque.hpp
new file mode 100644
index 00000000000..de67398a37c
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/dmc/deque.hpp
@@ -0,0 +1,323 @@
+
+// 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/deque.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+ , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+ , typename T12 = na, typename T13 = na, typename T14 = na
+ , typename T15 = na, typename T16 = na, typename T17 = na
+ , typename T18 = na, typename T19 = na
+ >
+struct deque;
+
+template<
+
+ >
+struct deque<
+ na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector0< >
+{
+ typedef vector0< >::type type;
+};
+
+template<
+ typename T0
+ >
+struct deque<
+ T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector1<T0>
+{
+ typedef typename vector1<T0>::type type;
+};
+
+template<
+ typename T0, typename T1
+ >
+struct deque<
+ T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector2< T0,T1 >
+{
+ typedef typename vector2< T0,T1 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2
+ >
+struct deque<
+ T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector3< T0,T1,T2 >
+{
+ typedef typename vector3< T0,T1,T2 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3
+ >
+struct deque<
+ T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector4< T0,T1,T2,T3 >
+{
+ typedef typename vector4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ >
+struct deque<
+ T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector5< T0,T1,T2,T3,T4 >
+{
+ typedef typename vector5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct deque<
+ T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector6< T0,T1,T2,T3,T4,T5 >
+{
+ typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6
+ >
+struct deque<
+ T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector7< T0,T1,T2,T3,T4,T5,T6 >
+{
+ typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7
+ >
+struct deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+ typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8
+ >
+struct deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+ typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ >
+struct deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+ typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ , typename T10
+ >
+struct deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+ typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+ , na, na, na, na
+ >
+ : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+ typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+ , na, na, na, na
+ >
+ : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+ typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+ , na, na, na, na
+ >
+ : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+ typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+ , na, na, na, na
+ >
+ : vector15<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ >
+{
+ typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, na, na, na, na
+ >
+ : vector16<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15
+ >
+{
+ typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, na, na, na
+ >
+ : vector17<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16
+ >
+{
+ typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, na, na
+ >
+ : vector18<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17
+ >
+{
+ typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, na
+ >
+ : vector19<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18
+ >
+{
+ typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+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 deque
+ : vector20<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, T19
+ >
+{
+ typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/dmc/divides.hpp b/boost/boost/mpl/aux_/preprocessed/dmc/divides.hpp
new file mode 100644
index 00000000000..86f16826f79
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/dmc/divides.hpp
@@ -0,0 +1,146 @@
+
+// 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/divides.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct divides_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< divides_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< divides_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct divides_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct divides_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct divides_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct divides_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct divides
+ : divides< divides< divides< divides< N1,N2 >, N3>, N4>, N5>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , divides
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3, typename N4
+ >
+struct divides< N1,N2,N3,N4,na >
+
+ : divides< divides< divides< N1,N2 >, N3>, N4>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , divides
+ , ( N1, N2, N3, N4, na )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3
+ >
+struct divides< N1,N2,N3,na,na >
+
+ : divides< divides< N1,N2 >, N3>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , divides
+ , ( N1, N2, N3, na, na )
+ )
+};
+
+template<
+ typename N1, typename N2
+ >
+struct divides< N1,N2,na,na,na >
+ : divides_impl<
+ typename divides_tag<N1>::type
+ , typename divides_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , divides
+ , ( N1, N2, na, na, na )
+ )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, divides)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct divides_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ / BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/dmc/equal_to.hpp b/boost/boost/mpl/aux_/preprocessed/dmc/equal_to.hpp
new file mode 100644
index 00000000000..62c994589f4
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/dmc/equal_to.hpp
@@ -0,0 +1,94 @@
+
+// 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/equal_to.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct equal_to_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct equal_to_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct equal_to_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct equal_to_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct equal_to_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct equal_to
+
+ : equal_to_impl<
+ typename equal_to_tag<N1>::type
+ , typename equal_to_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, equal_to, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, equal_to)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct equal_to_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value == BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/dmc/fold_impl.hpp b/boost/boost/mpl/aux_/preprocessed/dmc/fold_impl.hpp
new file mode 100644
index 00000000000..9e7a29300d6
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/dmc/fold_impl.hpp
@@ -0,0 +1,180 @@
+
+// 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/aux_/fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+ int N
+ , typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl;
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl< 0,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef state0 state;
+ typedef iter0 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl< 1,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+
+
+ typedef state1 state;
+ typedef iter1 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl< 2,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+
+
+ typedef state2 state;
+ typedef iter2 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl< 3,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;
+ typedef typename mpl::next<iter2>::type iter3;
+
+
+ typedef state3 state;
+ typedef iter3 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl< 4,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp, state3, typename deref<iter3>::type >::type state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef state4 state;
+ typedef iter4 iterator;
+};
+
+template<
+ int N
+ , typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl
+{
+ typedef fold_impl<
+ 4
+ , First
+ , Last
+ , State
+ , ForwardOp
+ > chunk_;
+
+ typedef fold_impl<
+ ( (N - 4) < 0 ? 0 : N - 4 )
+ , typename chunk_::iterator
+ , Last
+ , typename chunk_::state
+ , ForwardOp
+ > res_;
+
+ typedef typename res_::state state;
+ typedef typename res_::iterator iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl< -1,First,Last,State,ForwardOp >
+ : fold_impl<
+ -1
+ , typename mpl::next<First>::type
+ , Last
+ , typename apply2<ForwardOp,State, typename deref<First>::type>::type
+ , ForwardOp
+ >
+{
+};
+
+template<
+ typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl< -1,Last,Last,State,ForwardOp >
+{
+ typedef State state;
+ typedef Last iterator;
+};
+
+}}}
diff --git a/boost/boost/mpl/aux_/preprocessed/dmc/full_lambda.hpp b/boost/boost/mpl/aux_/preprocessed/dmc/full_lambda.hpp
new file mode 100644
index 00000000000..026418ccc91
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/dmc/full_lambda.hpp
@@ -0,0 +1,536 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/aux_/full_lambda.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template<
+ bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false
+ , bool C5 = false
+ >
+struct lambda_or
+ : true_
+{
+};
+
+template<>
+struct lambda_or< false,false,false,false,false >
+ : false_
+{
+};
+
+} // namespace aux
+
+template<
+ typename T
+ , typename Tag
+
+ >
+struct lambda
+{
+ typedef false_ is_le;
+ typedef T result_;
+ typedef T type;
+};
+
+template<
+ typename T
+ >
+struct is_lambda_expression
+ : lambda<T>::is_le
+{
+};
+
+template< int N, typename Tag >
+struct lambda< arg<N>, Tag >
+{
+ typedef true_ is_le;
+ typedef mpl::arg<N> result_; // qualified for the sake of MIPSpro 7.41
+ typedef mpl::protect<result_> type;
+};
+
+template<
+ typename F
+ , typename Tag
+ >
+struct lambda<
+ bind0<F>
+ , Tag
+
+ >
+{
+ typedef false_ is_le;
+ typedef bind0<
+ F
+ > result_;
+
+ typedef result_ type;
+};
+
+namespace aux {
+
+template<
+ typename IsLE, typename Tag
+ , template< typename P1 > class F
+ , typename L1
+ >
+struct le_result1
+{
+ typedef F<
+ typename L1::type
+ > result_;
+
+ typedef result_ type;
+};
+
+template<
+ typename Tag
+ , template< typename P1 > class F
+ , typename L1
+ >
+struct le_result1< true_,Tag,F,L1 >
+{
+ typedef bind1<
+ quote1< F,Tag >
+ , typename L1::result_
+ > result_;
+
+ typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+ template< typename P1 > class F
+ , typename T1
+ , typename Tag
+ >
+struct lambda<
+ F<T1>
+ , Tag
+
+ >
+{
+ typedef lambda< T1,Tag > l1;
+ typedef typename l1::is_le is_le1;
+ typedef typename aux::lambda_or<
+ is_le1::value
+ >::type is_le;
+
+ typedef aux::le_result1<
+ is_le, Tag, F, l1
+ > le_result_;
+
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+template<
+ typename F, typename T1
+ , typename Tag
+ >
+struct lambda<
+ bind1< F,T1 >
+ , Tag
+
+ >
+{
+ typedef false_ is_le;
+ typedef bind1<
+ F
+ , T1
+ > result_;
+
+ typedef result_ type;
+};
+
+namespace aux {
+
+template<
+ typename IsLE, typename Tag
+ , template< typename P1, typename P2 > class F
+ , typename L1, typename L2
+ >
+struct le_result2
+{
+ typedef F<
+ typename L1::type, typename L2::type
+ > result_;
+
+ typedef result_ type;
+};
+
+template<
+ typename Tag
+ , template< typename P1, typename P2 > class F
+ , typename L1, typename L2
+ >
+struct le_result2< true_,Tag,F,L1,L2 >
+{
+ typedef bind2<
+ quote2< F,Tag >
+ , typename L1::result_, typename L2::result_
+ > result_;
+
+ typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+ template< typename P1, typename P2 > class F
+ , typename T1, typename T2
+ , typename Tag
+ >
+struct lambda<
+ F< T1,T2 >
+ , Tag
+
+ >
+{
+ typedef lambda< T1,Tag > l1;
+ typedef lambda< T2,Tag > l2;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+
+
+ typedef typename aux::lambda_or<
+ is_le1::value, is_le2::value
+ >::type is_le;
+
+ typedef aux::le_result2<
+ is_le, Tag, F, l1, l2
+ > le_result_;
+
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+template<
+ typename F, typename T1, typename T2
+ , typename Tag
+ >
+struct lambda<
+ bind2< F,T1,T2 >
+ , Tag
+
+ >
+{
+ typedef false_ is_le;
+ typedef bind2<
+ F
+ , T1, T2
+ > result_;
+
+ typedef result_ type;
+};
+
+namespace aux {
+
+template<
+ typename IsLE, typename Tag
+ , template< typename P1, typename P2, typename P3 > class F
+ , typename L1, typename L2, typename L3
+ >
+struct le_result3
+{
+ typedef F<
+ typename L1::type, typename L2::type, typename L3::type
+ > result_;
+
+ typedef result_ type;
+};
+
+template<
+ typename Tag
+ , template< typename P1, typename P2, typename P3 > class F
+ , typename L1, typename L2, typename L3
+ >
+struct le_result3< true_,Tag,F,L1,L2,L3 >
+{
+ typedef bind3<
+ quote3< F,Tag >
+ , typename L1::result_, typename L2::result_, typename L3::result_
+ > result_;
+
+ typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+ template< typename P1, typename P2, typename P3 > class F
+ , typename T1, typename T2, typename T3
+ , typename Tag
+ >
+struct lambda<
+ F< T1,T2,T3 >
+ , Tag
+
+ >
+{
+ typedef lambda< T1,Tag > l1;
+ typedef lambda< T2,Tag > l2;
+ typedef lambda< T3,Tag > l3;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+
+
+ typedef typename aux::lambda_or<
+ is_le1::value, is_le2::value, is_le3::value
+ >::type is_le;
+
+ typedef aux::le_result3<
+ is_le, Tag, F, l1, l2, l3
+ > le_result_;
+
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ , typename Tag
+ >
+struct lambda<
+ bind3< F,T1,T2,T3 >
+ , Tag
+
+ >
+{
+ typedef false_ is_le;
+ typedef bind3<
+ F
+ , T1, T2, T3
+ > result_;
+
+ typedef result_ type;
+};
+
+namespace aux {
+
+template<
+ typename IsLE, typename Tag
+ , template< typename P1, typename P2, typename P3, typename P4 > class F
+ , typename L1, typename L2, typename L3, typename L4
+ >
+struct le_result4
+{
+ typedef F<
+ typename L1::type, typename L2::type, typename L3::type
+ , typename L4::type
+ > result_;
+
+ typedef result_ type;
+};
+
+template<
+ typename Tag
+ , template< typename P1, typename P2, typename P3, typename P4 > class F
+ , typename L1, typename L2, typename L3, typename L4
+ >
+struct le_result4< true_,Tag,F,L1,L2,L3,L4 >
+{
+ typedef bind4<
+ quote4< F,Tag >
+ , typename L1::result_, typename L2::result_, typename L3::result_
+ , typename L4::result_
+ > result_;
+
+ typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+ template< typename P1, typename P2, typename P3, typename P4 > class F
+ , typename T1, typename T2, typename T3, typename T4
+ , typename Tag
+ >
+struct lambda<
+ F< T1,T2,T3,T4 >
+ , Tag
+
+ >
+{
+ typedef lambda< T1,Tag > l1;
+ typedef lambda< T2,Tag > l2;
+ typedef lambda< T3,Tag > l3;
+ typedef lambda< T4,Tag > l4;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+ typedef typename l4::is_le is_le4;
+
+
+ typedef typename aux::lambda_or<
+ is_le1::value, is_le2::value, is_le3::value, is_le4::value
+ >::type is_le;
+
+ typedef aux::le_result4<
+ is_le, Tag, F, l1, l2, l3, l4
+ > le_result_;
+
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename Tag
+ >
+struct lambda<
+ bind4< F,T1,T2,T3,T4 >
+ , Tag
+
+ >
+{
+ typedef false_ is_le;
+ typedef bind4<
+ F
+ , T1, T2, T3, T4
+ > result_;
+
+ typedef result_ type;
+};
+
+namespace aux {
+
+template<
+ typename IsLE, typename Tag
+ , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F
+ , typename L1, typename L2, typename L3, typename L4, typename L5
+ >
+struct le_result5
+{
+ typedef F<
+ typename L1::type, typename L2::type, typename L3::type
+ , typename L4::type, typename L5::type
+ > result_;
+
+ typedef result_ type;
+};
+
+template<
+ typename Tag
+ , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F
+ , typename L1, typename L2, typename L3, typename L4, typename L5
+ >
+struct le_result5< true_,Tag,F,L1,L2,L3,L4,L5 >
+{
+ typedef bind5<
+ quote5< F,Tag >
+ , typename L1::result_, typename L2::result_, typename L3::result_
+ , typename L4::result_, typename L5::result_
+ > result_;
+
+ typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+ template<
+ typename P1, typename P2, typename P3, typename P4
+ , typename P5
+ >
+ class F
+ , typename T1, typename T2, typename T3, typename T4, typename T5
+ , typename Tag
+ >
+struct lambda<
+ F< T1,T2,T3,T4,T5 >
+ , Tag
+
+ >
+{
+ typedef lambda< T1,Tag > l1;
+ typedef lambda< T2,Tag > l2;
+ typedef lambda< T3,Tag > l3;
+ typedef lambda< T4,Tag > l4;
+ typedef lambda< T5,Tag > l5;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+ typedef typename l4::is_le is_le4;
+ typedef typename l5::is_le is_le5;
+
+
+ typedef typename aux::lambda_or<
+ is_le1::value, is_le2::value, is_le3::value, is_le4::value
+ , is_le5::value
+ >::type is_le;
+
+ typedef aux::le_result5<
+ is_le, Tag, F, l1, l2, l3, l4, l5
+ > le_result_;
+
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ , typename Tag
+ >
+struct lambda<
+ bind5< F,T1,T2,T3,T4,T5 >
+ , Tag
+
+ >
+{
+ typedef false_ is_le;
+ typedef bind5<
+ F
+ , T1, T2, T3, T4, T5
+ > result_;
+
+ typedef result_ type;
+};
+
+/// special case for 'protect'
+template< typename T, typename Tag >
+struct lambda< mpl::protect<T>, Tag >
+{
+ typedef false_ is_le;
+ typedef mpl::protect<T> result_;
+ typedef result_ type;
+};
+
+/// specializations for the main 'bind' form
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ , typename Tag
+ >
+struct lambda<
+ bind< F,T1,T2,T3,T4,T5 >
+ , Tag
+
+ >
+{
+ typedef false_ is_le;
+ typedef bind< F,T1,T2,T3,T4,T5 > result_;
+ typedef result_ type;
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, lambda)
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/dmc/greater.hpp b/boost/boost/mpl/aux_/preprocessed/dmc/greater.hpp
new file mode 100644
index 00000000000..14d8e08bff0
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/dmc/greater.hpp
@@ -0,0 +1,94 @@
+
+// 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/greater.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct greater_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< greater_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< greater_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct greater_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct greater_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct greater_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct greater_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct greater
+
+ : greater_impl<
+ typename greater_tag<N1>::type
+ , typename greater_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, greater)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct greater_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value > BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/dmc/greater_equal.hpp b/boost/boost/mpl/aux_/preprocessed/dmc/greater_equal.hpp
new file mode 100644
index 00000000000..2603f9184a0
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/dmc/greater_equal.hpp
@@ -0,0 +1,94 @@
+
+// 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/greater_equal.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct greater_equal_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< greater_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< greater_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct greater_equal_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct greater_equal_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct greater_equal_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct greater_equal_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct greater_equal
+
+ : greater_equal_impl<
+ typename greater_equal_tag<N1>::type
+ , typename greater_equal_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater_equal, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, greater_equal)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct greater_equal_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value >= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/dmc/inherit.hpp b/boost/boost/mpl/aux_/preprocessed/dmc/inherit.hpp
new file mode 100644
index 00000000000..00f31c42268
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/dmc/inherit.hpp
@@ -0,0 +1,141 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/inherit.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(T1)
+ , typename BOOST_MPL_AUX_NA_PARAM(T2)
+ >
+struct inherit2
+ : T1, T2
+{
+ typedef inherit2 type;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, inherit2, (T1, T2))
+};
+
+template< typename T1 >
+struct inherit2< T1,empty_base >
+{
+ typedef T1 type;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (T1, empty_base))
+};
+
+template< typename T2 >
+struct inherit2< empty_base,T2 >
+{
+ typedef T2 type;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, T2))
+};
+
+template<>
+struct inherit2< empty_base,empty_base >
+{
+ typedef empty_base type;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, empty_base))
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, inherit2)
+
+template<
+ typename T1 = na, typename T2 = na, typename T3 = na
+ >
+struct inherit3
+ : inherit2<
+ typename inherit2<
+ T1, T2
+ >::type
+ , T3
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 3
+ , inherit3
+ , ( T1, T2, T3)
+ )
+};
+
+BOOST_MPL_AUX_NA_SPEC(3, inherit3)
+
+template<
+ typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na
+ >
+struct inherit4
+ : inherit2<
+ typename inherit3<
+ T1, T2, T3
+ >::type
+ , T4
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 4
+ , inherit4
+ , ( T1, T2, T3, T4)
+ )
+};
+
+BOOST_MPL_AUX_NA_SPEC(4, inherit4)
+
+template<
+ typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na
+ , typename T5 = na
+ >
+struct inherit5
+ : inherit2<
+ typename inherit4<
+ T1, T2, T3, T4
+ >::type
+ , T5
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , inherit5
+ , ( T1, T2, T3, T4, T5)
+ )
+};
+
+BOOST_MPL_AUX_NA_SPEC(5, inherit5)
+
+/// primary template
+
+template<
+ typename T1 = empty_base, typename T2 = empty_base
+ , typename T3 = empty_base, typename T4 = empty_base
+ , typename T5 = empty_base
+ >
+struct inherit
+ : inherit5< T1,T2,T3,T4,T5 >
+{
+};
+
+template<>
+struct inherit< na,na,na,na,na >
+{
+ template<
+
+ typename T1 = empty_base, typename T2 = empty_base
+ , typename T3 = empty_base, typename T4 = empty_base
+ , typename T5 = empty_base
+
+ >
+ struct apply
+ : inherit< T1,T2,T3,T4,T5 >
+ {
+ };
+};
+
+BOOST_MPL_AUX_NA_SPEC_LAMBDA(5, inherit)
+BOOST_MPL_AUX_NA_SPEC_ARITY(5, inherit)
+BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(5, 5, inherit)
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/dmc/iter_fold_if_impl.hpp b/boost/boost/mpl/aux_/preprocessed/dmc/iter_fold_if_impl.hpp
new file mode 100644
index 00000000000..695179584d3
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/dmc/iter_fold_if_impl.hpp
@@ -0,0 +1,133 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/aux_/iter_fold_if_impl.hpp" header
+// -- DO NOT modify by hand!
+
+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;
+ };
+};
+
+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;
+};
+
+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;
+ typedef iter_fold_if_forward_step< typename forward_step0::iterator, typename forward_step0::state, ForwardOp, ForwardPredicate > forward_step1;
+ typedef iter_fold_if_forward_step< typename forward_step1::iterator, typename forward_step1::state, ForwardOp, ForwardPredicate > forward_step2;
+ typedef iter_fold_if_forward_step< typename forward_step2::iterator, typename forward_step2::state, ForwardOp, ForwardPredicate > forward_step3;
+ typedef iter_fold_if_forward_step< typename forward_step3::iterator, typename forward_step3::state, ForwardOp, ForwardPredicate > forward_step4;
+
+
+ typedef typename if_<
+ typename forward_step4::not_last
+ , iter_fold_if_impl<
+ typename forward_step4::iterator
+ , typename forward_step4::state
+ , ForwardOp
+ , ForwardPredicate
+ , BackwardOp
+ , BackwardPredicate
+ >
+ , iter_fold_if_null_step<
+ typename forward_step4::iterator
+ , typename forward_step4::state
+ >
+ >::type backward_step4;
+
+ typedef iter_fold_if_backward_step< typename forward_step3::iterator, typename backward_step4::state, BackwardOp, BackwardPredicate > backward_step3;
+ typedef iter_fold_if_backward_step< typename forward_step2::iterator, typename backward_step3::state, BackwardOp, BackwardPredicate > backward_step2;
+ typedef iter_fold_if_backward_step< typename forward_step1::iterator, typename backward_step2::state, BackwardOp, BackwardPredicate > backward_step1;
+ typedef iter_fold_if_backward_step< typename forward_step0::iterator, typename backward_step1::state, BackwardOp, BackwardPredicate > backward_step0;
+
+
+ public:
+ typedef typename backward_step0::state state;
+ typedef typename backward_step4::iterator iterator;
+};
+
+}}}
diff --git a/boost/boost/mpl/aux_/preprocessed/dmc/iter_fold_impl.hpp b/boost/boost/mpl/aux_/preprocessed/dmc/iter_fold_impl.hpp
new file mode 100644
index 00000000000..805790e86d6
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/dmc/iter_fold_impl.hpp
@@ -0,0 +1,180 @@
+
+// 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/aux_/iter_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+ int N
+ , typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl;
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl< 0,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef state0 state;
+ typedef iter0 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl< 1,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+
+
+ typedef state1 state;
+ typedef iter1 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl< 2,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+
+
+ typedef state2 state;
+ typedef iter2 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl< 3,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp,state2,iter2 >::type state3;
+ typedef typename mpl::next<iter2>::type iter3;
+
+
+ typedef state3 state;
+ typedef iter3 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl< 4,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp,state2,iter2 >::type state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp,state3,iter3 >::type state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef state4 state;
+ typedef iter4 iterator;
+};
+
+template<
+ int N
+ , typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl
+{
+ typedef iter_fold_impl<
+ 4
+ , First
+ , Last
+ , State
+ , ForwardOp
+ > chunk_;
+
+ typedef iter_fold_impl<
+ ( (N - 4) < 0 ? 0 : N - 4 )
+ , typename chunk_::iterator
+ , Last
+ , typename chunk_::state
+ , ForwardOp
+ > res_;
+
+ typedef typename res_::state state;
+ typedef typename res_::iterator iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl< -1,First,Last,State,ForwardOp >
+ : iter_fold_impl<
+ -1
+ , typename mpl::next<First>::type
+ , Last
+ , typename apply2< ForwardOp,State,First >::type
+ , ForwardOp
+ >
+{
+};
+
+template<
+ typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl< -1,Last,Last,State,ForwardOp >
+{
+ typedef State state;
+ typedef Last iterator;
+};
+
+}}}
diff --git a/boost/boost/mpl/aux_/preprocessed/dmc/lambda_no_ctps.hpp b/boost/boost/mpl/aux_/preprocessed/dmc/lambda_no_ctps.hpp
new file mode 100644
index 00000000000..890a198a464
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/dmc/lambda_no_ctps.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/aux_/lambda_no_ctps.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template<
+ bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false
+ , bool C5 = false
+ >
+struct lambda_or
+ : true_
+{
+};
+
+template<>
+struct lambda_or< false,false,false,false,false >
+ : false_
+{
+};
+
+template< typename Arity > struct lambda_impl
+{
+ template< typename T, typename Tag, typename Protect > struct result_
+ {
+ typedef T type;
+ typedef is_placeholder<T> is_le;
+ };
+};
+
+template<> struct lambda_impl< int_<1> >
+{
+ template< typename F, typename Tag, typename Protect > struct result_
+ {
+ typedef lambda< typename F::arg1, Tag, false_ > l1;
+ typedef typename l1::is_le is_le1;
+ typedef aux::lambda_or<
+ BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value
+ > is_le;
+
+ typedef bind1<
+ typename F::rebind
+ , typename l1::type
+ > bind_;
+
+ typedef typename if_<
+ is_le
+ , if_< Protect, mpl::protect<bind_>, bind_ >
+ , identity<F>
+ >::type type_;
+
+ typedef typename type_::type type;
+ };
+};
+
+template<> struct lambda_impl< int_<2> >
+{
+ template< typename F, typename Tag, typename Protect > struct result_
+ {
+ typedef lambda< typename F::arg1, Tag, false_ > l1;
+ typedef lambda< typename F::arg2, Tag, false_ > l2;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+
+
+ typedef aux::lambda_or<
+ BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value
+ > is_le;
+
+ typedef bind2<
+ typename F::rebind
+ , typename l1::type, typename l2::type
+ > bind_;
+
+ typedef typename if_<
+ is_le
+ , if_< Protect, mpl::protect<bind_>, bind_ >
+ , identity<F>
+ >::type type_;
+
+ typedef typename type_::type type;
+ };
+};
+
+template<> struct lambda_impl< int_<3> >
+{
+ template< typename F, typename Tag, typename Protect > struct result_
+ {
+ typedef lambda< typename F::arg1, Tag, false_ > l1;
+ typedef lambda< typename F::arg2, Tag, false_ > l2;
+ typedef lambda< typename F::arg3, Tag, false_ > l3;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+
+
+ typedef aux::lambda_or<
+ BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value
+ > is_le;
+
+ typedef bind3<
+ typename F::rebind
+ , typename l1::type, typename l2::type, typename l3::type
+ > bind_;
+
+ typedef typename if_<
+ is_le
+ , if_< Protect, mpl::protect<bind_>, bind_ >
+ , identity<F>
+ >::type type_;
+
+ typedef typename type_::type type;
+ };
+};
+
+template<> struct lambda_impl< int_<4> >
+{
+ template< typename F, typename Tag, typename Protect > struct result_
+ {
+ typedef lambda< typename F::arg1, Tag, false_ > l1;
+ typedef lambda< typename F::arg2, Tag, false_ > l2;
+ typedef lambda< typename F::arg3, Tag, false_ > l3;
+ typedef lambda< typename F::arg4, Tag, false_ > l4;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+ typedef typename l4::is_le is_le4;
+
+
+ typedef aux::lambda_or<
+ BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value
+ > is_le;
+
+ typedef bind4<
+ typename F::rebind
+ , typename l1::type, typename l2::type, typename l3::type
+ , typename l4::type
+ > bind_;
+
+ typedef typename if_<
+ is_le
+ , if_< Protect, mpl::protect<bind_>, bind_ >
+ , identity<F>
+ >::type type_;
+
+ typedef typename type_::type type;
+ };
+};
+
+template<> struct lambda_impl< int_<5> >
+{
+ template< typename F, typename Tag, typename Protect > struct result_
+ {
+ typedef lambda< typename F::arg1, Tag, false_ > l1;
+ typedef lambda< typename F::arg2, Tag, false_ > l2;
+ typedef lambda< typename F::arg3, Tag, false_ > l3;
+ typedef lambda< typename F::arg4, Tag, false_ > l4;
+ typedef lambda< typename F::arg5, Tag, false_ > l5;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+ typedef typename l4::is_le is_le4;
+ typedef typename l5::is_le is_le5;
+
+
+ typedef aux::lambda_or<
+ BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le5)::value
+ > is_le;
+
+ typedef bind5<
+ typename F::rebind
+ , typename l1::type, typename l2::type, typename l3::type
+ , typename l4::type, typename l5::type
+ > bind_;
+
+ typedef typename if_<
+ is_le
+ , if_< Protect, mpl::protect<bind_>, bind_ >
+ , identity<F>
+ >::type type_;
+
+ typedef typename type_::type type;
+ };
+};
+
+} // namespace aux
+
+template<
+ typename T
+ , typename Tag
+ , typename Protect
+ >
+struct lambda
+{
+ /// Metafunction forwarding confuses MSVC 6.x
+ typedef typename aux::template_arity<T>::type arity_;
+ typedef typename aux::lambda_impl<arity_>
+ ::template result_< T,Tag,Protect > l_;
+
+ typedef typename l_::type type;
+ typedef typename l_::is_le is_le;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(3, lambda, (T, Tag, Protect))
+};
+
+BOOST_MPL_AUX_NA_SPEC2(1, 3, lambda)
+
+template<
+ typename T
+ >
+struct is_lambda_expression
+ : lambda<T>::is_le
+{
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/dmc/less.hpp b/boost/boost/mpl/aux_/preprocessed/dmc/less.hpp
new file mode 100644
index 00000000000..4fe3cd17c49
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/dmc/less.hpp
@@ -0,0 +1,94 @@
+
+// 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/less.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct less_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< less_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< less_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct less_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct less_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct less_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct less_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct less
+
+ : less_impl<
+ typename less_tag<N1>::type
+ , typename less_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, less)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct less_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N2)::value > BOOST_MPL_AUX_VALUE_WKND(N1)::value ) >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/dmc/less_equal.hpp b/boost/boost/mpl/aux_/preprocessed/dmc/less_equal.hpp
new file mode 100644
index 00000000000..ca2894f6f93
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/dmc/less_equal.hpp
@@ -0,0 +1,94 @@
+
+// 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/less_equal.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct less_equal_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< less_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< less_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct less_equal_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct less_equal_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct less_equal_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct less_equal_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct less_equal
+
+ : less_equal_impl<
+ typename less_equal_tag<N1>::type
+ , typename less_equal_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less_equal, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, less_equal)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct less_equal_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value <= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/dmc/list.hpp b/boost/boost/mpl/aux_/preprocessed/dmc/list.hpp
new file mode 100644
index 00000000000..4e8ad53d212
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/dmc/list.hpp
@@ -0,0 +1,323 @@
+
+// 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.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+ , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+ , typename T12 = na, typename T13 = na, typename T14 = na
+ , typename T15 = na, typename T16 = na, typename T17 = na
+ , typename T18 = na, typename T19 = na
+ >
+struct list;
+
+template<
+
+ >
+struct list<
+ na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list0< >
+{
+ typedef list0< >::type type;
+};
+
+template<
+ typename T0
+ >
+struct list<
+ T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list1<T0>
+{
+ typedef typename list1<T0>::type type;
+};
+
+template<
+ typename T0, typename T1
+ >
+struct list<
+ T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list2< T0,T1 >
+{
+ typedef typename list2< T0,T1 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2
+ >
+struct list<
+ T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list3< T0,T1,T2 >
+{
+ typedef typename list3< T0,T1,T2 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3
+ >
+struct list<
+ T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list4< T0,T1,T2,T3 >
+{
+ typedef typename list4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ >
+struct list<
+ T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list5< T0,T1,T2,T3,T4 >
+{
+ typedef typename list5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct list<
+ T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list6< T0,T1,T2,T3,T4,T5 >
+{
+ typedef typename list6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6
+ >
+struct list<
+ T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list7< T0,T1,T2,T3,T4,T5,T6 >
+{
+ typedef typename list7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7
+ >
+struct list<
+ T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+ typedef typename list8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8
+ >
+struct list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+ typedef typename list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ >
+struct list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+ typedef typename list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ , typename T10
+ >
+struct list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+ typedef typename list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+ , na, na, na, na
+ >
+ : list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+ typedef typename list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+ , na, na, na, na
+ >
+ : list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+ typedef typename list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+ , na, na, na, na
+ >
+ : list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+ typedef typename list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+ , na, na, na, na
+ >
+ : list15<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ >
+{
+ typedef typename list15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, na, na, na, na
+ >
+ : list16<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15
+ >
+{
+ typedef typename list16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, na, na, na
+ >
+ : list17<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16
+ >
+{
+ typedef typename list17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, na, na
+ >
+ : list18<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17
+ >
+{
+ typedef typename list18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, na
+ >
+ : list19<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18
+ >
+{
+ typedef typename list19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ , typename T10, typename T11, typename T12, typename T13, typename T14
+ , typename T15, typename T16, typename T17, typename T18, typename T19
+ >
+struct list
+ : list20<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, T19
+ >
+{
+ typedef typename list20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/dmc/list_c.hpp b/boost/boost/mpl/aux_/preprocessed/dmc/list_c.hpp
new file mode 100644
index 00000000000..0b48a7f8e11
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/dmc/list_c.hpp
@@ -0,0 +1,328 @@
+
+// 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_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+ , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+ , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+ , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+ , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+ , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+ , long C18 = LONG_MAX, long C19 = LONG_MAX
+ >
+struct list_c;
+
+template<
+ typename T
+ >
+struct list_c<
+ T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list0_c<T>
+{
+ typedef typename list0_c<T>::type type;
+};
+
+template<
+ typename T, long C0
+ >
+struct list_c<
+ T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list1_c< T,C0 >
+{
+ typedef typename list1_c< T,C0 >::type type;
+};
+
+template<
+ typename T, long C0, long C1
+ >
+struct list_c<
+ T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list2_c< T,C0,C1 >
+{
+ typedef typename list2_c< T,C0,C1 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2
+ >
+struct list_c<
+ T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list3_c< T,C0,C1,C2 >
+{
+ typedef typename list3_c< T,C0,C1,C2 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3
+ >
+struct list_c<
+ T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list4_c< T,C0,C1,C2,C3 >
+{
+ typedef typename list4_c< T,C0,C1,C2,C3 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list5_c< T,C0,C1,C2,C3,C4 >
+{
+ typedef typename list5_c< T,C0,C1,C2,C3,C4 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list6_c< T,C0,C1,C2,C3,C4,C5 >
+{
+ typedef typename list6_c< T,C0,C1,C2,C3,C4,C5 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list7_c< T,C0,C1,C2,C3,C4,C5,C6 >
+{
+ typedef typename list7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX
+ >
+ : list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >
+{
+ typedef typename list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX
+ >
+ : list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >
+{
+ typedef typename list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX
+ >
+ : list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >
+{
+ typedef typename list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >
+{
+ typedef typename list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >
+{
+ typedef typename list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >
+{
+ typedef typename list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list14_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+ >
+{
+ typedef typename list14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list15_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ >
+{
+ typedef typename list15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list16_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15
+ >
+{
+ typedef typename list16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list17_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16
+ >
+{
+ typedef typename list17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, LONG_MAX, LONG_MAX
+ >
+ : list18_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17
+ >
+{
+ typedef typename list18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, C18, LONG_MAX
+ >
+ : list19_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, C18
+ >
+{
+ typedef typename list19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+struct list_c
+ : list20_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, C18, C19
+ >
+{
+ typedef typename list20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/dmc/map.hpp b/boost/boost/mpl/aux_/preprocessed/dmc/map.hpp
new file mode 100644
index 00000000000..837e0137718
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/dmc/map.hpp
@@ -0,0 +1,323 @@
+
+// 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/map.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+ , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+ , typename T12 = na, typename T13 = na, typename T14 = na
+ , typename T15 = na, typename T16 = na, typename T17 = na
+ , typename T18 = na, typename T19 = na
+ >
+struct map;
+
+template<
+
+ >
+struct map<
+ na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map0< >
+{
+ typedef map0< >::type type;
+};
+
+template<
+ typename T0
+ >
+struct map<
+ T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map1<T0>
+{
+ typedef typename map1<T0>::type type;
+};
+
+template<
+ typename T0, typename T1
+ >
+struct map<
+ T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map2< T0,T1 >
+{
+ typedef typename map2< T0,T1 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2
+ >
+struct map<
+ T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map3< T0,T1,T2 >
+{
+ typedef typename map3< T0,T1,T2 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3
+ >
+struct map<
+ T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map4< T0,T1,T2,T3 >
+{
+ typedef typename map4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ >
+struct map<
+ T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map5< T0,T1,T2,T3,T4 >
+{
+ typedef typename map5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct map<
+ T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map6< T0,T1,T2,T3,T4,T5 >
+{
+ typedef typename map6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6
+ >
+struct map<
+ T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map7< T0,T1,T2,T3,T4,T5,T6 >
+{
+ typedef typename map7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7
+ >
+struct map<
+ T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+ typedef typename map8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8
+ >
+struct map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+ typedef typename map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ >
+struct map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+ typedef typename map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ , typename T10
+ >
+struct map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+ typedef typename map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+ , na, na, na, na
+ >
+ : map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+ typedef typename map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+ , na, na, na, na
+ >
+ : map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+ typedef typename map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+ , na, na, na, na
+ >
+ : map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+ typedef typename map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+ , na, na, na, na
+ >
+ : map15<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ >
+{
+ typedef typename map15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, na, na, na, na
+ >
+ : map16<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15
+ >
+{
+ typedef typename map16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, na, na, na
+ >
+ : map17<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16
+ >
+{
+ typedef typename map17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, na, na
+ >
+ : map18<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17
+ >
+{
+ typedef typename map18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, na
+ >
+ : map19<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18
+ >
+{
+ typedef typename map19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+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 map
+ : map20<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, T19
+ >
+{
+ typedef typename map20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/dmc/minus.hpp b/boost/boost/mpl/aux_/preprocessed/dmc/minus.hpp
new file mode 100644
index 00000000000..71d49137660
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/dmc/minus.hpp
@@ -0,0 +1,146 @@
+
+// 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/minus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct minus_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< minus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< minus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct minus_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct minus_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct minus_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct minus_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct minus
+ : minus< minus< minus< minus< N1,N2 >, N3>, N4>, N5>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , minus
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3, typename N4
+ >
+struct minus< N1,N2,N3,N4,na >
+
+ : minus< minus< minus< N1,N2 >, N3>, N4>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , minus
+ , ( N1, N2, N3, N4, na )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3
+ >
+struct minus< N1,N2,N3,na,na >
+
+ : minus< minus< N1,N2 >, N3>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , minus
+ , ( N1, N2, N3, na, na )
+ )
+};
+
+template<
+ typename N1, typename N2
+ >
+struct minus< N1,N2,na,na,na >
+ : minus_impl<
+ typename minus_tag<N1>::type
+ , typename minus_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , minus
+ , ( N1, N2, na, na, na )
+ )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, minus)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct minus_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ - BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/dmc/modulus.hpp b/boost/boost/mpl/aux_/preprocessed/dmc/modulus.hpp
new file mode 100644
index 00000000000..224b34930c9
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/dmc/modulus.hpp
@@ -0,0 +1,101 @@
+
+// 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/modulus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct modulus_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< modulus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< modulus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct modulus_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct modulus_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct modulus_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct modulus_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct modulus
+
+ : modulus_impl<
+ typename modulus_tag<N1>::type
+ , typename modulus_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, modulus, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, modulus)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct modulus_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ % BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/dmc/not_equal_to.hpp b/boost/boost/mpl/aux_/preprocessed/dmc/not_equal_to.hpp
new file mode 100644
index 00000000000..98b21b1e22d
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/dmc/not_equal_to.hpp
@@ -0,0 +1,94 @@
+
+// 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/not_equal_to.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct not_equal_to_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< not_equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< not_equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct not_equal_to_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct not_equal_to_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct not_equal_to_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct not_equal_to_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct not_equal_to
+
+ : not_equal_to_impl<
+ typename not_equal_to_tag<N1>::type
+ , typename not_equal_to_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, not_equal_to, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, not_equal_to)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct not_equal_to_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value != BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/dmc/or.hpp b/boost/boost/mpl/aux_/preprocessed/dmc/or.hpp
new file mode 100644
index 00000000000..31e1aaa4e60
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/dmc/or.hpp
@@ -0,0 +1,69 @@
+
+// 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/or.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template< bool C_, typename T1, typename T2, typename T3, typename T4 >
+struct or_impl
+ : true_
+{
+};
+
+template< typename T1, typename T2, typename T3, typename T4 >
+struct or_impl< false,T1,T2,T3,T4 >
+ : or_impl<
+ BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+ , T2, T3, T4
+ , false_
+ >
+{
+};
+
+template<>
+struct or_impl<
+ false
+ , false_, false_, false_, false_
+ >
+ : false_
+{
+};
+
+} // namespace aux
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(T1)
+ , typename BOOST_MPL_AUX_NA_PARAM(T2)
+ , typename T3 = false_, typename T4 = false_, typename T5 = false_
+ >
+struct or_
+
+ : aux::or_impl<
+ BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+ , T2, T3, T4, T5
+ >
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , or_
+ , ( T1, T2, T3, T4, T5)
+ )
+};
+
+BOOST_MPL_AUX_NA_SPEC2(
+ 2
+ , 5
+ , or_
+ )
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/dmc/placeholders.hpp b/boost/boost/mpl/aux_/preprocessed/dmc/placeholders.hpp
new file mode 100644
index 00000000000..ff97364b9ba
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/dmc/placeholders.hpp
@@ -0,0 +1,105 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+// Copyright Peter Dimov 2001-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)
+//
+
+// Preprocessed version of "boost/mpl/placeholders.hpp" header
+// -- DO NOT modify by hand!
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg< -1 > _;
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_;
+}
+
+}}
+
+/// agurt, 17/mar/02: one more placeholder for the last 'apply#'
+/// specialization
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<1> _1;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_1)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_1;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<2> _2;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_2)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_2;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<3> _3;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_3)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_3;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<4> _4;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_4)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_4;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<5> _5;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_5)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_5;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<6> _6;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_6)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_6;
+}
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/dmc/plus.hpp b/boost/boost/mpl/aux_/preprocessed/dmc/plus.hpp
new file mode 100644
index 00000000000..a9f6ee79a5c
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/dmc/plus.hpp
@@ -0,0 +1,146 @@
+
+// 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/plus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct plus_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< plus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< plus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct plus_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct plus_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct plus_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct plus_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct plus
+ : plus< plus< plus< plus< N1,N2 >, N3>, N4>, N5>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , plus
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3, typename N4
+ >
+struct plus< N1,N2,N3,N4,na >
+
+ : plus< plus< plus< N1,N2 >, N3>, N4>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , plus
+ , ( N1, N2, N3, N4, na )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3
+ >
+struct plus< N1,N2,N3,na,na >
+
+ : plus< plus< N1,N2 >, N3>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , plus
+ , ( N1, N2, N3, na, na )
+ )
+};
+
+template<
+ typename N1, typename N2
+ >
+struct plus< N1,N2,na,na,na >
+ : plus_impl<
+ typename plus_tag<N1>::type
+ , typename plus_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , plus
+ , ( N1, N2, na, na, na )
+ )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, plus)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct plus_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ + BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/dmc/quote.hpp b/boost/boost/mpl/aux_/preprocessed/dmc/quote.hpp
new file mode 100644
index 00000000000..d7d0420e4d8
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/dmc/quote.hpp
@@ -0,0 +1,123 @@
+
+// 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/quote.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template< typename T, bool has_type_ >
+struct quote_impl
+ : T
+{
+};
+
+template< typename T >
+struct quote_impl< T,false >
+{
+ typedef T type;
+};
+
+template<
+ template< typename P1 > class F
+ , typename Tag = void_
+ >
+struct quote1
+{
+ template< typename U1 > struct apply
+
+ : quote_impl<
+ F<U1>
+ , aux::has_type< F<U1> >::value
+ >
+
+ {
+ };
+};
+
+template<
+ template< typename P1, typename P2 > class F
+ , typename Tag = void_
+ >
+struct quote2
+{
+ template< typename U1, typename U2 > struct apply
+
+ : quote_impl<
+ F< U1,U2 >
+ , aux::has_type< F< U1,U2 > >::value
+ >
+
+ {
+ };
+};
+
+template<
+ template< typename P1, typename P2, typename P3 > class F
+ , typename Tag = void_
+ >
+struct quote3
+{
+ template< typename U1, typename U2, typename U3 > struct apply
+
+ : quote_impl<
+ F< U1,U2,U3 >
+ , aux::has_type< F< U1,U2,U3 > >::value
+ >
+
+ {
+ };
+};
+
+template<
+ template< typename P1, typename P2, typename P3, typename P4 > class F
+ , typename Tag = void_
+ >
+struct quote4
+{
+ template<
+ typename U1, typename U2, typename U3, typename U4
+ >
+ struct apply
+
+ : quote_impl<
+ F< U1,U2,U3,U4 >
+ , aux::has_type< F< U1,U2,U3,U4 > >::value
+ >
+
+ {
+ };
+};
+
+template<
+ template<
+ typename P1, typename P2, typename P3, typename P4
+ , typename P5
+ >
+ class F
+ , typename Tag = void_
+ >
+struct quote5
+{
+ template<
+ typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+ struct apply
+
+ : quote_impl<
+ F< U1,U2,U3,U4,U5 >
+ , aux::has_type< F< U1,U2,U3,U4,U5 > >::value
+ >
+
+ {
+ };
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/dmc/reverse_fold_impl.hpp b/boost/boost/mpl/aux_/preprocessed/dmc/reverse_fold_impl.hpp
new file mode 100644
index 00000000000..c468684c91e
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/dmc/reverse_fold_impl.hpp
@@ -0,0 +1,231 @@
+
+// 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/aux_/reverse_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+ long N
+ , typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl;
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl< 0,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef fwd_state0 bkwd_state0;
+ typedef bkwd_state0 state;
+ typedef iter0 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl< 1,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+
+
+ typedef fwd_state1 bkwd_state1;
+ typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+ typedef bkwd_state0 state;
+ typedef iter1 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl< 2,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+
+
+ typedef fwd_state2 bkwd_state2;
+ typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+ typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter2 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl< 3,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+
+
+ typedef fwd_state3 bkwd_state3;
+ typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+ typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+ typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter3 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl< 4,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef fwd_state4 bkwd_state4;
+ typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
+ typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+ typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+ typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter4 iterator;
+};
+
+template<
+ long N
+ , typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef reverse_fold_impl<
+ ( (N - 4) < 0 ? 0 : N - 4 )
+ , iter4
+ , Last
+ , fwd_state4
+ , BackwardOp
+ , ForwardOp
+ > nested_chunk;
+
+ typedef typename nested_chunk::state bkwd_state4;
+ typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
+ typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+ typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+ typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef typename nested_chunk::iterator iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl< -1,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef reverse_fold_impl<
+ -1
+ , typename mpl::next<First>::type
+ , Last
+ , typename apply2<ForwardOp,State, typename deref<First>::type>::type
+ , BackwardOp
+ , ForwardOp
+ > nested_step;
+
+ typedef typename apply2<
+ BackwardOp
+ , typename nested_step::state
+ , typename deref<First>::type
+ >::type state;
+
+ typedef typename nested_step::iterator iterator;
+};
+
+template<
+ typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl< -1,Last,Last,State,BackwardOp,ForwardOp >
+{
+ typedef State state;
+ typedef Last iterator;
+};
+
+}}}
diff --git a/boost/boost/mpl/aux_/preprocessed/dmc/reverse_iter_fold_impl.hpp b/boost/boost/mpl/aux_/preprocessed/dmc/reverse_iter_fold_impl.hpp
new file mode 100644
index 00000000000..658f92a7c38
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/dmc/reverse_iter_fold_impl.hpp
@@ -0,0 +1,231 @@
+
+// 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/aux_/reverse_iter_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+ long N
+ , typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl;
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl< 0,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef fwd_state0 bkwd_state0;
+ typedef bkwd_state0 state;
+ typedef iter0 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl< 1,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+
+
+ typedef fwd_state1 bkwd_state1;
+ typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+ typedef bkwd_state0 state;
+ typedef iter1 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl< 2,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+
+
+ typedef fwd_state2 bkwd_state2;
+ typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+ typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter2 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl< 3,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+
+
+ typedef fwd_state3 bkwd_state3;
+ typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+ typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+ typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter3 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl< 4,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef fwd_state4 bkwd_state4;
+ typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;
+ typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+ typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+ typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter4 iterator;
+};
+
+template<
+ long N
+ , typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef reverse_iter_fold_impl<
+ ( (N - 4) < 0 ? 0 : N - 4 )
+ , iter4
+ , Last
+ , fwd_state4
+ , BackwardOp
+ , ForwardOp
+ > nested_chunk;
+
+ typedef typename nested_chunk::state bkwd_state4;
+ typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;
+ typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+ typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+ typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef typename nested_chunk::iterator iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl< -1,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef reverse_iter_fold_impl<
+ -1
+ , typename mpl::next<First>::type
+ , Last
+ , typename apply2< ForwardOp,State,First >::type
+ , BackwardOp
+ , ForwardOp
+ > nested_step;
+
+ typedef typename apply2<
+ BackwardOp
+ , typename nested_step::state
+ , First
+ >::type state;
+
+ typedef typename nested_step::iterator iterator;
+};
+
+template<
+ typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl< -1,Last,Last,State,BackwardOp,ForwardOp >
+{
+ typedef State state;
+ typedef Last iterator;
+};
+
+}}}
diff --git a/boost/boost/mpl/aux_/preprocessed/dmc/set.hpp b/boost/boost/mpl/aux_/preprocessed/dmc/set.hpp
new file mode 100644
index 00000000000..5721922e111
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/dmc/set.hpp
@@ -0,0 +1,323 @@
+
+// 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/set.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+ , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+ , typename T12 = na, typename T13 = na, typename T14 = na
+ , typename T15 = na, typename T16 = na, typename T17 = na
+ , typename T18 = na, typename T19 = na
+ >
+struct set;
+
+template<
+
+ >
+struct set<
+ na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set0< >
+{
+ typedef set0< >::type type;
+};
+
+template<
+ typename T0
+ >
+struct set<
+ T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set1<T0>
+{
+ typedef typename set1<T0>::type type;
+};
+
+template<
+ typename T0, typename T1
+ >
+struct set<
+ T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set2< T0,T1 >
+{
+ typedef typename set2< T0,T1 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2
+ >
+struct set<
+ T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set3< T0,T1,T2 >
+{
+ typedef typename set3< T0,T1,T2 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3
+ >
+struct set<
+ T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set4< T0,T1,T2,T3 >
+{
+ typedef typename set4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ >
+struct set<
+ T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set5< T0,T1,T2,T3,T4 >
+{
+ typedef typename set5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct set<
+ T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set6< T0,T1,T2,T3,T4,T5 >
+{
+ typedef typename set6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6
+ >
+struct set<
+ T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set7< T0,T1,T2,T3,T4,T5,T6 >
+{
+ typedef typename set7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7
+ >
+struct set<
+ T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+ typedef typename set8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8
+ >
+struct set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+ typedef typename set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ >
+struct set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+ typedef typename set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ , typename T10
+ >
+struct set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+ typedef typename set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+ , na, na, na, na
+ >
+ : set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+ typedef typename set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+ , na, na, na, na
+ >
+ : set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+ typedef typename set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+ , na, na, na, na
+ >
+ : set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+ typedef typename set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+ , na, na, na, na
+ >
+ : set15<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ >
+{
+ typedef typename set15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, na, na, na, na
+ >
+ : set16<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15
+ >
+{
+ typedef typename set16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, na, na, na
+ >
+ : set17<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16
+ >
+{
+ typedef typename set17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, na, na
+ >
+ : set18<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17
+ >
+{
+ typedef typename set18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, na
+ >
+ : set19<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18
+ >
+{
+ typedef typename set19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+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 set
+ : set20<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, T19
+ >
+{
+ typedef typename set20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/dmc/set_c.hpp b/boost/boost/mpl/aux_/preprocessed/dmc/set_c.hpp
new file mode 100644
index 00000000000..cbeb932c13d
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/dmc/set_c.hpp
@@ -0,0 +1,328 @@
+
+// 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/set_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+ , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+ , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+ , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+ , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+ , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+ , long C18 = LONG_MAX, long C19 = LONG_MAX
+ >
+struct set_c;
+
+template<
+ typename T
+ >
+struct set_c<
+ T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set0_c<T>
+{
+ typedef typename set0_c<T>::type type;
+};
+
+template<
+ typename T, long C0
+ >
+struct set_c<
+ T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set1_c< T,C0 >
+{
+ typedef typename set1_c< T,C0 >::type type;
+};
+
+template<
+ typename T, long C0, long C1
+ >
+struct set_c<
+ T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set2_c< T,C0,C1 >
+{
+ typedef typename set2_c< T,C0,C1 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2
+ >
+struct set_c<
+ T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set3_c< T,C0,C1,C2 >
+{
+ typedef typename set3_c< T,C0,C1,C2 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3
+ >
+struct set_c<
+ T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set4_c< T,C0,C1,C2,C3 >
+{
+ typedef typename set4_c< T,C0,C1,C2,C3 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set5_c< T,C0,C1,C2,C3,C4 >
+{
+ typedef typename set5_c< T,C0,C1,C2,C3,C4 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set6_c< T,C0,C1,C2,C3,C4,C5 >
+{
+ typedef typename set6_c< T,C0,C1,C2,C3,C4,C5 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set7_c< T,C0,C1,C2,C3,C4,C5,C6 >
+{
+ typedef typename set7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX
+ >
+ : set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >
+{
+ typedef typename set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX
+ >
+ : set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >
+{
+ typedef typename set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX
+ >
+ : set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >
+{
+ typedef typename set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >
+{
+ typedef typename set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >
+{
+ typedef typename set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >
+{
+ typedef typename set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set14_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+ >
+{
+ typedef typename set14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set15_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ >
+{
+ typedef typename set15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set16_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15
+ >
+{
+ typedef typename set16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set17_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16
+ >
+{
+ typedef typename set17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, LONG_MAX, LONG_MAX
+ >
+ : set18_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17
+ >
+{
+ typedef typename set18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, C18, LONG_MAX
+ >
+ : set19_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, C18
+ >
+{
+ typedef typename set19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+struct set_c
+ : set20_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, C18, C19
+ >
+{
+ typedef typename set20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/dmc/shift_left.hpp b/boost/boost/mpl/aux_/preprocessed/dmc/shift_left.hpp
new file mode 100644
index 00000000000..b5b181ce196
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/dmc/shift_left.hpp
@@ -0,0 +1,99 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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)
+//
+
+// Preprocessed version of "boost/mpl/shift_left.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct shift_left_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< shift_left_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< shift_left_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct shift_left_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct shift_left_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct shift_left_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct shift_left_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct shift_left
+
+ : shift_left_impl<
+ typename shift_left_tag<N1>::type
+ , typename shift_left_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_left, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_left)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct shift_left_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N, typename S > struct apply
+
+ : integral_c<
+ typename N::value_type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N)::value
+ << BOOST_MPL_AUX_VALUE_WKND(S)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/dmc/shift_right.hpp b/boost/boost/mpl/aux_/preprocessed/dmc/shift_right.hpp
new file mode 100644
index 00000000000..f7a342e989a
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/dmc/shift_right.hpp
@@ -0,0 +1,99 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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)
+//
+
+// Preprocessed version of "boost/mpl/shift_right.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct shift_right_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< shift_right_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< shift_right_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct shift_right_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct shift_right_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct shift_right_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct shift_right_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct shift_right
+
+ : shift_right_impl<
+ typename shift_right_tag<N1>::type
+ , typename shift_right_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_right, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_right)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct shift_right_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N, typename S > struct apply
+
+ : integral_c<
+ typename N::value_type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N)::value
+ >> BOOST_MPL_AUX_VALUE_WKND(S)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/dmc/template_arity.hpp b/boost/boost/mpl/aux_/preprocessed/dmc/template_arity.hpp
new file mode 100644
index 00000000000..a23fc238467
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/dmc/template_arity.hpp
@@ -0,0 +1,11 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/aux_/template_arity.hpp" header
+// -- DO NOT modify by hand!
+
diff --git a/boost/boost/mpl/aux_/preprocessed/dmc/times.hpp b/boost/boost/mpl/aux_/preprocessed/dmc/times.hpp
new file mode 100644
index 00000000000..cb97cc4e132
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/dmc/times.hpp
@@ -0,0 +1,146 @@
+
+// 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/times.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct times_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< times_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< times_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct times_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct times_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct times_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct times_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct times
+ : times< times< times< times< N1,N2 >, N3>, N4>, N5>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , times
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3, typename N4
+ >
+struct times< N1,N2,N3,N4,na >
+
+ : times< times< times< N1,N2 >, N3>, N4>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , times
+ , ( N1, N2, N3, N4, na )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3
+ >
+struct times< N1,N2,N3,na,na >
+
+ : times< times< N1,N2 >, N3>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , times
+ , ( N1, N2, N3, na, na )
+ )
+};
+
+template<
+ typename N1, typename N2
+ >
+struct times< N1,N2,na,na,na >
+ : times_impl<
+ typename times_tag<N1>::type
+ , typename times_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , times
+ , ( N1, N2, na, na, na )
+ )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, times)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct times_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ * BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/dmc/unpack_args.hpp b/boost/boost/mpl/aux_/preprocessed/dmc/unpack_args.hpp
new file mode 100644
index 00000000000..2194ce9d11b
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/dmc/unpack_args.hpp
@@ -0,0 +1,94 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/unpack_args.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template< int size, typename F, typename Args >
+struct unpack_args_impl;
+
+template< typename F, typename Args >
+struct unpack_args_impl< 0,F,Args >
+ : apply0<
+ F
+ >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 1,F,Args >
+ : apply1<
+ F
+ , typename at_c< Args,0 >::type
+ >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 2,F,Args >
+ : apply2<
+ F
+ , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+ >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 3,F,Args >
+ : apply3<
+ F
+ , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+ , typename at_c< Args,2 >::type
+ >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 4,F,Args >
+ : apply4<
+ F
+ , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+ , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type
+ >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 5,F,Args >
+ : apply5<
+ F
+ , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+ , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type
+ , typename at_c< Args,4 >::type
+ >
+{
+};
+
+}
+
+template<
+ typename F
+ >
+struct unpack_args
+{
+ template< typename Args > struct apply
+
+ : aux::unpack_args_impl< size<Args>::value,F, Args >
+
+ {
+ };
+};
+
+BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args)
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/dmc/vector.hpp b/boost/boost/mpl/aux_/preprocessed/dmc/vector.hpp
new file mode 100644
index 00000000000..bfa9565a537
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/dmc/vector.hpp
@@ -0,0 +1,323 @@
+
+// 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/vector.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+ , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+ , typename T12 = na, typename T13 = na, typename T14 = na
+ , typename T15 = na, typename T16 = na, typename T17 = na
+ , typename T18 = na, typename T19 = na
+ >
+struct vector;
+
+template<
+
+ >
+struct vector<
+ na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector0< >
+{
+ typedef vector0< >::type type;
+};
+
+template<
+ typename T0
+ >
+struct vector<
+ T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector1<T0>
+{
+ typedef typename vector1<T0>::type type;
+};
+
+template<
+ typename T0, typename T1
+ >
+struct vector<
+ T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector2< T0,T1 >
+{
+ typedef typename vector2< T0,T1 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2
+ >
+struct vector<
+ T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector3< T0,T1,T2 >
+{
+ typedef typename vector3< T0,T1,T2 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3
+ >
+struct vector<
+ T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector4< T0,T1,T2,T3 >
+{
+ typedef typename vector4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ >
+struct vector<
+ T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector5< T0,T1,T2,T3,T4 >
+{
+ typedef typename vector5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct vector<
+ T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector6< T0,T1,T2,T3,T4,T5 >
+{
+ typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6
+ >
+struct vector<
+ T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector7< T0,T1,T2,T3,T4,T5,T6 >
+{
+ typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7
+ >
+struct vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+ typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8
+ >
+struct vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+ typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ >
+struct vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+ typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ , typename T10
+ >
+struct vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+ typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+ , na, na, na, na
+ >
+ : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+ typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+ , na, na, na, na
+ >
+ : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+ typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+ , na, na, na, na
+ >
+ : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+ typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+ , na, na, na, na
+ >
+ : vector15<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ >
+{
+ typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, na, na, na, na
+ >
+ : vector16<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15
+ >
+{
+ typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, na, na, na
+ >
+ : vector17<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16
+ >
+{
+ typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, na, na
+ >
+ : vector18<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17
+ >
+{
+ typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, na
+ >
+ : vector19<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18
+ >
+{
+ typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+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 vector
+ : vector20<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, T19
+ >
+{
+ typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/dmc/vector_c.hpp b/boost/boost/mpl/aux_/preprocessed/dmc/vector_c.hpp
new file mode 100644
index 00000000000..0f1560d7f13
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/dmc/vector_c.hpp
@@ -0,0 +1,309 @@
+
+// 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/vector_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+ , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+ , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+ , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+ , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+ , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+ , long C18 = LONG_MAX, long C19 = LONG_MAX
+ >
+struct vector_c;
+
+template<
+ typename T
+ >
+struct vector_c<
+ T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector0_c<T>
+{
+ typedef typename vector0_c<T>::type type;
+};
+
+template<
+ typename T, long C0
+ >
+struct vector_c<
+ T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector1_c< T, T(C0) >
+{
+ typedef typename vector1_c< T, T(C0) >::type type;
+};
+
+template<
+ typename T, long C0, long C1
+ >
+struct vector_c<
+ T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector2_c< T, T(C0), T(C1) >
+{
+ typedef typename vector2_c< T, T(C0), T(C1) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2
+ >
+struct vector_c<
+ T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector3_c< T, T(C0), T(C1), T(C2) >
+{
+ typedef typename vector3_c< T, T(C0), T(C1), T(C2) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector4_c< T, T(C0), T(C1), T(C2), T(C3) >
+{
+ typedef typename vector4_c< T, T(C0), T(C1), T(C2), T(C3) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) >
+{
+ typedef typename vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) >
+{
+ typedef typename vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) >
+{
+ typedef typename vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX
+ >
+ : vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) >
+{
+ typedef typename vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX
+ >
+ : vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) >
+{
+ typedef typename vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX
+ >
+ : vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) >
+{
+ typedef typename vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) >
+{
+ typedef typename vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector12_c< 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) >
+{
+ typedef typename vector12_c< 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) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector13_c< 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) >
+{
+ typedef typename vector13_c< 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) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector14_c< 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) >
+{
+ typedef typename vector14_c< 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) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector15_c< 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) >
+{
+ typedef typename vector15_c< 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) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector16_c< 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) >
+{
+ typedef typename vector16_c< 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) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector17_c< 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) >
+{
+ typedef typename vector17_c< 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) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, LONG_MAX, LONG_MAX
+ >
+ : vector18_c< 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) >
+{
+ typedef typename vector18_c< 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) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, C18, LONG_MAX
+ >
+ : vector19_c< 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) >
+{
+ typedef typename vector19_c< 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) >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+struct vector_c
+ : vector20_c< 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) >
+{
+ typedef typename vector20_c< 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) >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/gcc/advance_backward.hpp b/boost/boost/mpl/aux_/preprocessed/gcc/advance_backward.hpp
new file mode 100644
index 00000000000..26de94cea1a
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/gcc/advance_backward.hpp
@@ -0,0 +1,97 @@
+
+// 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/aux_/advance_backward.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+template< long N > struct advance_backward;
+template<>
+struct advance_backward<0>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef iter0 type;
+ };
+};
+
+template<>
+struct advance_backward<1>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename prior<iter0>::type iter1;
+ typedef iter1 type;
+ };
+};
+
+template<>
+struct advance_backward<2>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename prior<iter0>::type iter1;
+ typedef typename prior<iter1>::type iter2;
+ typedef iter2 type;
+ };
+};
+
+template<>
+struct advance_backward<3>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename prior<iter0>::type iter1;
+ typedef typename prior<iter1>::type iter2;
+ typedef typename prior<iter2>::type iter3;
+ typedef iter3 type;
+ };
+};
+
+template<>
+struct advance_backward<4>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename prior<iter0>::type iter1;
+ typedef typename prior<iter1>::type iter2;
+ typedef typename prior<iter2>::type iter3;
+ typedef typename prior<iter3>::type iter4;
+ typedef iter4 type;
+ };
+};
+
+template< long N >
+struct advance_backward
+{
+ template< typename Iterator > struct apply
+ {
+ typedef typename apply_wrap1<
+ advance_backward<4>
+ , Iterator
+ >::type chunk_result_;
+
+ typedef typename apply_wrap1<
+ advance_backward<(
+ (N - 4) < 0
+ ? 0
+ : N - 4
+ )>
+ , chunk_result_
+ >::type type;
+ };
+};
+
+}}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/gcc/advance_forward.hpp b/boost/boost/mpl/aux_/preprocessed/gcc/advance_forward.hpp
new file mode 100644
index 00000000000..b137cc72af1
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/gcc/advance_forward.hpp
@@ -0,0 +1,97 @@
+
+// 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/aux_/advance_forward.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+template< long N > struct advance_forward;
+template<>
+struct advance_forward<0>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef iter0 type;
+ };
+};
+
+template<>
+struct advance_forward<1>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename next<iter0>::type iter1;
+ typedef iter1 type;
+ };
+};
+
+template<>
+struct advance_forward<2>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename next<iter0>::type iter1;
+ typedef typename next<iter1>::type iter2;
+ typedef iter2 type;
+ };
+};
+
+template<>
+struct advance_forward<3>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename next<iter0>::type iter1;
+ typedef typename next<iter1>::type iter2;
+ typedef typename next<iter2>::type iter3;
+ typedef iter3 type;
+ };
+};
+
+template<>
+struct advance_forward<4>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename next<iter0>::type iter1;
+ typedef typename next<iter1>::type iter2;
+ typedef typename next<iter2>::type iter3;
+ typedef typename next<iter3>::type iter4;
+ typedef iter4 type;
+ };
+};
+
+template< long N >
+struct advance_forward
+{
+ template< typename Iterator > struct apply
+ {
+ typedef typename apply_wrap1<
+ advance_forward<4>
+ , Iterator
+ >::type chunk_result_;
+
+ typedef typename apply_wrap1<
+ advance_forward<(
+ (N - 4) < 0
+ ? 0
+ : N - 4
+ )>
+ , chunk_result_
+ >::type type;
+ };
+};
+
+}}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/gcc/and.hpp b/boost/boost/mpl/aux_/preprocessed/gcc/and.hpp
new file mode 100644
index 00000000000..010ad1fc849
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/gcc/and.hpp
@@ -0,0 +1,69 @@
+
+// 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/and.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template< bool C_, typename T1, typename T2, typename T3, typename T4 >
+struct and_impl
+ : false_
+{
+};
+
+template< typename T1, typename T2, typename T3, typename T4 >
+struct and_impl< true,T1,T2,T3,T4 >
+ : and_impl<
+ BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+ , T2, T3, T4
+ , true_
+ >
+{
+};
+
+template<>
+struct and_impl<
+ true
+ , true_, true_, true_, true_
+ >
+ : true_
+{
+};
+
+} // namespace aux
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(T1)
+ , typename BOOST_MPL_AUX_NA_PARAM(T2)
+ , typename T3 = true_, typename T4 = true_, typename T5 = true_
+ >
+struct and_
+
+ : aux::and_impl<
+ BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+ , T2, T3, T4, T5
+ >
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , and_
+ , ( T1, T2, T3, T4, T5)
+ )
+};
+
+BOOST_MPL_AUX_NA_SPEC2(
+ 2
+ , 5
+ , and_
+ )
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/gcc/apply.hpp b/boost/boost/mpl/aux_/preprocessed/gcc/apply.hpp
new file mode 100644
index 00000000000..e08eaccf03a
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/gcc/apply.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/apply.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename F
+ >
+struct apply0
+
+ : apply_wrap0<
+ typename lambda<F>::type
+
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 1
+ , apply0
+ , (F )
+ )
+};
+
+template<
+ typename F
+ >
+struct apply< F,na,na,na,na,na >
+ : apply0<F>
+{
+};
+
+template<
+ typename F, typename T1
+ >
+struct apply1
+
+ : apply_wrap1<
+ typename lambda<F>::type
+ , T1
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 2
+ , apply1
+ , (F, T1)
+ )
+};
+
+template<
+ typename F, typename T1
+ >
+struct apply< F,T1,na,na,na,na >
+ : apply1< F,T1 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct apply2
+
+ : apply_wrap2<
+ typename lambda<F>::type
+ , T1, T2
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 3
+ , apply2
+ , (F, T1, T2)
+ )
+};
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct apply< F,T1,T2,na,na,na >
+ : apply2< F,T1,T2 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct apply3
+
+ : apply_wrap3<
+ typename lambda<F>::type
+ , T1, T2, T3
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 4
+ , apply3
+ , (F, T1, T2, T3)
+ )
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct apply< F,T1,T2,T3,na,na >
+ : apply3< F,T1,T2,T3 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct apply4
+
+ : apply_wrap4<
+ typename lambda<F>::type
+ , T1, T2, T3, T4
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , apply4
+ , (F, T1, T2, T3, T4)
+ )
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct apply< F,T1,T2,T3,T4,na >
+ : apply4< F,T1,T2,T3,T4 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct apply5
+
+ : apply_wrap5<
+ typename lambda<F>::type
+ , T1, T2, T3, T4, T5
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 6
+ , apply5
+ , (F, T1, T2, T3, T4, T5)
+ )
+};
+
+/// primary template (not a specialization!)
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct apply
+ : apply5< F,T1,T2,T3,T4,T5 >
+{
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/gcc/apply_fwd.hpp b/boost/boost/mpl/aux_/preprocessed/gcc/apply_fwd.hpp
new file mode 100644
index 00000000000..b2ed5d51301
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/gcc/apply_fwd.hpp
@@ -0,0 +1,52 @@
+
+// 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/apply_fwd.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename F, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na
+ >
+struct apply;
+
+template<
+ typename F
+ >
+struct apply0;
+
+template<
+ typename F, typename T1
+ >
+struct apply1;
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct apply2;
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct apply3;
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct apply4;
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct apply5;
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/gcc/apply_wrap.hpp b/boost/boost/mpl/aux_/preprocessed/gcc/apply_wrap.hpp
new file mode 100644
index 00000000000..34d51a1a587
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/gcc/apply_wrap.hpp
@@ -0,0 +1,84 @@
+
+// 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/apply_wrap.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename F
+
+ , typename has_apply_ = typename aux::has_apply<F>::type
+
+ >
+struct apply_wrap0
+
+ : F::template apply< >
+{
+};
+
+template< typename F >
+struct apply_wrap0< F,true_ >
+ : F::apply
+{
+};
+
+template<
+ typename F, typename T1
+
+ >
+struct apply_wrap1
+
+ : F::template apply<T1>
+{
+};
+
+template<
+ typename F, typename T1, typename T2
+
+ >
+struct apply_wrap2
+
+ : F::template apply< T1,T2 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3
+
+ >
+struct apply_wrap3
+
+ : F::template apply< T1,T2,T3 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+
+ >
+struct apply_wrap4
+
+ : F::template apply< T1,T2,T3,T4 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+
+ >
+struct apply_wrap5
+
+ : F::template apply< T1,T2,T3,T4,T5 >
+{
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/gcc/arg.hpp b/boost/boost/mpl/aux_/preprocessed/gcc/arg.hpp
new file mode 100644
index 00000000000..6f2f8a80709
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/gcc/arg.hpp
@@ -0,0 +1,123 @@
+
+// Copyright Peter Dimov 2001-2002
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/arg.hpp" header
+// -- DO NOT modify by hand!
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+template<> struct arg< -1 >
+{
+ BOOST_STATIC_CONSTANT(int, value = -1);
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ typedef U1 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+template<> struct arg<1>
+{
+ BOOST_STATIC_CONSTANT(int, value = 1);
+ typedef arg<2> next;
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ typedef U1 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+template<> struct arg<2>
+{
+ BOOST_STATIC_CONSTANT(int, value = 2);
+ typedef arg<3> next;
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ typedef U2 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+template<> struct arg<3>
+{
+ BOOST_STATIC_CONSTANT(int, value = 3);
+ typedef arg<4> next;
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ typedef U3 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+template<> struct arg<4>
+{
+ BOOST_STATIC_CONSTANT(int, value = 4);
+ typedef arg<5> next;
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ typedef U4 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+template<> struct arg<5>
+{
+ BOOST_STATIC_CONSTANT(int, value = 5);
+ typedef arg<6> next;
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ typedef U5 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+BOOST_MPL_AUX_NONTYPE_ARITY_SPEC(1,int, arg)
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
diff --git a/boost/boost/mpl/aux_/preprocessed/gcc/basic_bind.hpp b/boost/boost/mpl/aux_/preprocessed/gcc/basic_bind.hpp
new file mode 100644
index 00000000000..b0702324aaf
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/gcc/basic_bind.hpp
@@ -0,0 +1,440 @@
+
+// Copyright Peter Dimov 2001
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/aux_/basic_bind.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template<
+ typename T, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg
+{
+ typedef T type;
+};
+
+template<
+ int N, typename U1, typename U2, typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >
+{
+ typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg< bind< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 >
+{
+ typedef bind< F,T1,T2,T3,T4,T5 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+template<
+ typename F
+ >
+struct bind0
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+
+ public:
+ typedef typename apply_wrap0<
+ f_
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg<
+ bind0<F>, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind0<F> f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(1, bind0)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)
+
+template<
+ typename F
+ >
+struct bind< F,na,na,na,na,na >
+ : bind0<F>
+{
+};
+
+template<
+ typename F, typename T1
+ >
+struct bind1
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+
+ public:
+ typedef typename apply_wrap1<
+ f_
+ , typename t1::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename U1, typename U2, typename U3
+ , typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind1< F,T1 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind1< F,T1 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(2, bind1)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)
+
+template<
+ typename F, typename T1
+ >
+struct bind< F,T1,na,na,na,na >
+ : bind1< F,T1 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct bind2
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+ typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+
+ public:
+ typedef typename apply_wrap2<
+ f_
+ , typename t1::type, typename t2::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename U1, typename U2
+ , typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind2< F,T1,T2 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind2< F,T1,T2 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(3, bind2)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct bind< F,T1,T2,na,na,na >
+ : bind2< F,T1,T2 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct bind3
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+ typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+ typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+
+ public:
+ typedef typename apply_wrap3<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename U1
+ , typename U2, typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind3< F,T1,T2,T3 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(4, bind3)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct bind< F,T1,T2,T3,na,na >
+ : bind3< F,T1,T2,T3 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct bind4
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+ typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+ typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+ typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;
+
+ public:
+ typedef typename apply_wrap4<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ , typename t4::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename U1, typename U2, typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind4< F,T1,T2,T3,T4 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct bind< F,T1,T2,T3,T4,na >
+ : bind4< F,T1,T2,T3,T4 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct bind5
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+ typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+ typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+ typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;
+ typedef aux::resolve_bind_arg< T5,U1,U2,U3,U4,U5 > t5;
+
+ public:
+ typedef typename apply_wrap5<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ , typename t4::type, typename t5::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg<
+ bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind5< F,T1,T2,T3,T4,T5 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
+
+/// primary template (not a specialization!)
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct bind
+ : bind5< F,T1,T2,T3,T4,T5 >
+{
+};
+
+/// if_/eval_if specializations
+template< template< typename T1, typename T2, typename T3 > class F, typename Tag >
+struct quote3;
+
+template< typename T1, typename T2, typename T3 > struct if_;
+
+template<
+ typename Tag, typename T1, typename T2, typename T3
+ >
+struct bind3<
+ quote3< if_,Tag >
+ , T1, T2, T3
+ >
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef mpl::arg<1> n1;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+ typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+ typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+ typedef typename if_<
+ typename t1::type
+ , t2, t3
+ >::type f_;
+
+ public:
+ typedef typename f_::type type;
+ };
+};
+
+template<
+ template< typename T1, typename T2, typename T3 > class F, typename Tag
+ >
+struct quote3;
+
+template< typename T1, typename T2, typename T3 > struct eval_if;
+
+template<
+ typename Tag, typename T1, typename T2, typename T3
+ >
+struct bind3<
+ quote3< eval_if,Tag >
+ , T1, T2, T3
+ >
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef mpl::arg<1> n1;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+ typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+ typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+ typedef typename eval_if<
+ typename t1::type
+ , t2, t3
+ >::type f_;
+
+ public:
+ typedef typename f_::type type;
+ };
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/gcc/bind.hpp b/boost/boost/mpl/aux_/preprocessed/gcc/bind.hpp
new file mode 100644
index 00000000000..0e9513a649a
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/gcc/bind.hpp
@@ -0,0 +1,561 @@
+
+// Copyright Peter Dimov 2001
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/bind.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template<
+ typename T, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg
+{
+ typedef T type;
+};
+
+template<
+ typename T
+ , typename Arg
+ >
+struct replace_unnamed_arg
+{
+ typedef Arg next;
+ typedef T type;
+};
+
+template<
+ typename Arg
+ >
+struct replace_unnamed_arg< arg< -1 >, Arg >
+{
+ typedef typename Arg::next next;
+ typedef Arg type;
+};
+
+template<
+ int N, typename U1, typename U2, typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >
+{
+ typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg< bind< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 >
+{
+ typedef bind< F,T1,T2,T3,T4,T5 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+template<
+ typename F
+ >
+struct bind0
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ public:
+ typedef typename apply_wrap0<
+ f_
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg<
+ bind0<F>, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind0<F> f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(1, bind0)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)
+
+template<
+ typename F
+ >
+struct bind< F,na,na,na,na,na >
+ : bind0<F>
+{
+};
+
+template<
+ typename F, typename T1
+ >
+struct bind1
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ public:
+ typedef typename apply_wrap1<
+ f_
+ , typename t1::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename U1, typename U2, typename U3
+ , typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind1< F,T1 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind1< F,T1 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(2, bind1)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)
+
+template<
+ typename F, typename T1
+ >
+struct bind< F,T1,na,na,na,na >
+ : bind1< F,T1 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct bind2
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ typedef aux::replace_unnamed_arg< T2,n2 > r2;
+ typedef typename r2::type a2;
+ typedef typename r2::next n3;
+ typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+ ///
+ public:
+ typedef typename apply_wrap2<
+ f_
+ , typename t1::type, typename t2::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename U1, typename U2
+ , typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind2< F,T1,T2 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind2< F,T1,T2 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(3, bind2)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct bind< F,T1,T2,na,na,na >
+ : bind2< F,T1,T2 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct bind3
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ typedef aux::replace_unnamed_arg< T2,n2 > r2;
+ typedef typename r2::type a2;
+ typedef typename r2::next n3;
+ typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+ ///
+ typedef aux::replace_unnamed_arg< T3,n3 > r3;
+ typedef typename r3::type a3;
+ typedef typename r3::next n4;
+ typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+ ///
+ public:
+ typedef typename apply_wrap3<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename U1
+ , typename U2, typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind3< F,T1,T2,T3 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(4, bind3)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct bind< F,T1,T2,T3,na,na >
+ : bind3< F,T1,T2,T3 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct bind4
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ typedef aux::replace_unnamed_arg< T2,n2 > r2;
+ typedef typename r2::type a2;
+ typedef typename r2::next n3;
+ typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+ ///
+ typedef aux::replace_unnamed_arg< T3,n3 > r3;
+ typedef typename r3::type a3;
+ typedef typename r3::next n4;
+ typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+ ///
+ typedef aux::replace_unnamed_arg< T4,n4 > r4;
+ typedef typename r4::type a4;
+ typedef typename r4::next n5;
+ typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
+ ///
+ public:
+ typedef typename apply_wrap4<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ , typename t4::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename U1, typename U2, typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind4< F,T1,T2,T3,T4 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct bind< F,T1,T2,T3,T4,na >
+ : bind4< F,T1,T2,T3,T4 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct bind5
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ typedef aux::replace_unnamed_arg< T2,n2 > r2;
+ typedef typename r2::type a2;
+ typedef typename r2::next n3;
+ typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+ ///
+ typedef aux::replace_unnamed_arg< T3,n3 > r3;
+ typedef typename r3::type a3;
+ typedef typename r3::next n4;
+ typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+ ///
+ typedef aux::replace_unnamed_arg< T4,n4 > r4;
+ typedef typename r4::type a4;
+ typedef typename r4::next n5;
+ typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
+ ///
+ typedef aux::replace_unnamed_arg< T5,n5 > r5;
+ typedef typename r5::type a5;
+ typedef typename r5::next n6;
+ typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5;
+ ///
+ public:
+ typedef typename apply_wrap5<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ , typename t4::type, typename t5::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg<
+ bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind5< F,T1,T2,T3,T4,T5 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
+
+/// primary template (not a specialization!)
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct bind
+ : bind5< F,T1,T2,T3,T4,T5 >
+{
+};
+
+/// if_/eval_if specializations
+template< template< typename T1, typename T2, typename T3 > class F, typename Tag >
+struct quote3;
+
+template< typename T1, typename T2, typename T3 > struct if_;
+
+template<
+ typename Tag, typename T1, typename T2, typename T3
+ >
+struct bind3<
+ quote3< if_,Tag >
+ , T1, T2, T3
+ >
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef mpl::arg<1> n1;
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ typedef aux::replace_unnamed_arg< T2,n2 > r2;
+ typedef typename r2::type a2;
+ typedef typename r2::next n3;
+ typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+ ///
+ typedef aux::replace_unnamed_arg< T3,n3 > r3;
+ typedef typename r3::type a3;
+ typedef typename r3::next n4;
+ typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+ ///
+ typedef typename if_<
+ typename t1::type
+ , t2, t3
+ >::type f_;
+
+ public:
+ typedef typename f_::type type;
+ };
+};
+
+template<
+ template< typename T1, typename T2, typename T3 > class F, typename Tag
+ >
+struct quote3;
+
+template< typename T1, typename T2, typename T3 > struct eval_if;
+
+template<
+ typename Tag, typename T1, typename T2, typename T3
+ >
+struct bind3<
+ quote3< eval_if,Tag >
+ , T1, T2, T3
+ >
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef mpl::arg<1> n1;
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ typedef aux::replace_unnamed_arg< T2,n2 > r2;
+ typedef typename r2::type a2;
+ typedef typename r2::next n3;
+ typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+ ///
+ typedef aux::replace_unnamed_arg< T3,n3 > r3;
+ typedef typename r3::type a3;
+ typedef typename r3::next n4;
+ typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+ ///
+ typedef typename eval_if<
+ typename t1::type
+ , t2, t3
+ >::type f_;
+
+ public:
+ typedef typename f_::type type;
+ };
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/gcc/bind_fwd.hpp b/boost/boost/mpl/aux_/preprocessed/gcc/bind_fwd.hpp
new file mode 100644
index 00000000000..c4a5060ff8b
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/gcc/bind_fwd.hpp
@@ -0,0 +1,52 @@
+
+// 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/bind_fwd.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename F, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na
+ >
+struct bind;
+
+template<
+ typename F
+ >
+struct bind0;
+
+template<
+ typename F, typename T1
+ >
+struct bind1;
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct bind2;
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct bind3;
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct bind4;
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct bind5;
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/gcc/bitand.hpp b/boost/boost/mpl/aux_/preprocessed/gcc/bitand.hpp
new file mode 100644
index 00000000000..0bbf54ea26d
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/gcc/bitand.hpp
@@ -0,0 +1,147 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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)
+//
+
+// Preprocessed version of "boost/mpl/bitand.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct bitand_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< bitand_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< bitand_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitand_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct bitand_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct bitand_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct bitand_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct bitand_
+ : bitand_< bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>, N5>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , bitand_
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3, typename N4
+ >
+struct bitand_< N1,N2,N3,N4,na >
+
+ : bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitand_
+ , ( N1, N2, N3, N4, na )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3
+ >
+struct bitand_< N1,N2,N3,na,na >
+
+ : bitand_< bitand_< N1,N2 >, N3>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitand_
+ , ( N1, N2, N3, na, na )
+ )
+};
+
+template<
+ typename N1, typename N2
+ >
+struct bitand_< N1,N2,na,na,na >
+ : bitand_impl<
+ typename bitand_tag<N1>::type
+ , typename bitand_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitand_
+ , ( N1, N2, na, na, na )
+ )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitand_)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct bitand_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ & BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/gcc/bitor.hpp b/boost/boost/mpl/aux_/preprocessed/gcc/bitor.hpp
new file mode 100644
index 00000000000..55b31cb8a9c
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/gcc/bitor.hpp
@@ -0,0 +1,147 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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)
+//
+
+// Preprocessed version of "boost/mpl/bitor.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct bitor_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< bitor_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< bitor_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitor_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct bitor_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct bitor_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct bitor_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct bitor_
+ : bitor_< bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>, N5>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , bitor_
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3, typename N4
+ >
+struct bitor_< N1,N2,N3,N4,na >
+
+ : bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitor_
+ , ( N1, N2, N3, N4, na )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3
+ >
+struct bitor_< N1,N2,N3,na,na >
+
+ : bitor_< bitor_< N1,N2 >, N3>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitor_
+ , ( N1, N2, N3, na, na )
+ )
+};
+
+template<
+ typename N1, typename N2
+ >
+struct bitor_< N1,N2,na,na,na >
+ : bitor_impl<
+ typename bitor_tag<N1>::type
+ , typename bitor_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitor_
+ , ( N1, N2, na, na, na )
+ )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitor_)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct bitor_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ | BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/gcc/bitxor.hpp b/boost/boost/mpl/aux_/preprocessed/gcc/bitxor.hpp
new file mode 100644
index 00000000000..ec1939151d0
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/gcc/bitxor.hpp
@@ -0,0 +1,147 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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)
+//
+
+// Preprocessed version of "boost/mpl/bitxor.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct bitxor_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< bitxor_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< bitxor_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitxor_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct bitxor_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct bitxor_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct bitxor_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct bitxor_
+ : bitxor_< bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4>, N5>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , bitxor_
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3, typename N4
+ >
+struct bitxor_< N1,N2,N3,N4,na >
+
+ : bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitxor_
+ , ( N1, N2, N3, N4, na )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3
+ >
+struct bitxor_< N1,N2,N3,na,na >
+
+ : bitxor_< bitxor_< N1,N2 >, N3>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitxor_
+ , ( N1, N2, N3, na, na )
+ )
+};
+
+template<
+ typename N1, typename N2
+ >
+struct bitxor_< N1,N2,na,na,na >
+ : bitxor_impl<
+ typename bitxor_tag<N1>::type
+ , typename bitxor_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitxor_
+ , ( N1, N2, na, na, na )
+ )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitxor_)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct bitxor_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ ^ BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/gcc/deque.hpp b/boost/boost/mpl/aux_/preprocessed/gcc/deque.hpp
new file mode 100644
index 00000000000..de67398a37c
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/gcc/deque.hpp
@@ -0,0 +1,323 @@
+
+// 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/deque.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+ , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+ , typename T12 = na, typename T13 = na, typename T14 = na
+ , typename T15 = na, typename T16 = na, typename T17 = na
+ , typename T18 = na, typename T19 = na
+ >
+struct deque;
+
+template<
+
+ >
+struct deque<
+ na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector0< >
+{
+ typedef vector0< >::type type;
+};
+
+template<
+ typename T0
+ >
+struct deque<
+ T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector1<T0>
+{
+ typedef typename vector1<T0>::type type;
+};
+
+template<
+ typename T0, typename T1
+ >
+struct deque<
+ T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector2< T0,T1 >
+{
+ typedef typename vector2< T0,T1 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2
+ >
+struct deque<
+ T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector3< T0,T1,T2 >
+{
+ typedef typename vector3< T0,T1,T2 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3
+ >
+struct deque<
+ T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector4< T0,T1,T2,T3 >
+{
+ typedef typename vector4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ >
+struct deque<
+ T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector5< T0,T1,T2,T3,T4 >
+{
+ typedef typename vector5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct deque<
+ T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector6< T0,T1,T2,T3,T4,T5 >
+{
+ typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6
+ >
+struct deque<
+ T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector7< T0,T1,T2,T3,T4,T5,T6 >
+{
+ typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7
+ >
+struct deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+ typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8
+ >
+struct deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+ typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ >
+struct deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+ typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ , typename T10
+ >
+struct deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+ typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+ , na, na, na, na
+ >
+ : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+ typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+ , na, na, na, na
+ >
+ : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+ typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+ , na, na, na, na
+ >
+ : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+ typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+ , na, na, na, na
+ >
+ : vector15<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ >
+{
+ typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, na, na, na, na
+ >
+ : vector16<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15
+ >
+{
+ typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, na, na, na
+ >
+ : vector17<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16
+ >
+{
+ typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, na, na
+ >
+ : vector18<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17
+ >
+{
+ typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, na
+ >
+ : vector19<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18
+ >
+{
+ typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+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 deque
+ : vector20<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, T19
+ >
+{
+ typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/gcc/divides.hpp b/boost/boost/mpl/aux_/preprocessed/gcc/divides.hpp
new file mode 100644
index 00000000000..86f16826f79
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/gcc/divides.hpp
@@ -0,0 +1,146 @@
+
+// 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/divides.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct divides_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< divides_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< divides_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct divides_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct divides_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct divides_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct divides_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct divides
+ : divides< divides< divides< divides< N1,N2 >, N3>, N4>, N5>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , divides
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3, typename N4
+ >
+struct divides< N1,N2,N3,N4,na >
+
+ : divides< divides< divides< N1,N2 >, N3>, N4>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , divides
+ , ( N1, N2, N3, N4, na )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3
+ >
+struct divides< N1,N2,N3,na,na >
+
+ : divides< divides< N1,N2 >, N3>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , divides
+ , ( N1, N2, N3, na, na )
+ )
+};
+
+template<
+ typename N1, typename N2
+ >
+struct divides< N1,N2,na,na,na >
+ : divides_impl<
+ typename divides_tag<N1>::type
+ , typename divides_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , divides
+ , ( N1, N2, na, na, na )
+ )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, divides)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct divides_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ / BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/gcc/equal_to.hpp b/boost/boost/mpl/aux_/preprocessed/gcc/equal_to.hpp
new file mode 100644
index 00000000000..62c994589f4
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/gcc/equal_to.hpp
@@ -0,0 +1,94 @@
+
+// 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/equal_to.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct equal_to_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct equal_to_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct equal_to_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct equal_to_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct equal_to_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct equal_to
+
+ : equal_to_impl<
+ typename equal_to_tag<N1>::type
+ , typename equal_to_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, equal_to, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, equal_to)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct equal_to_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value == BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/gcc/fold_impl.hpp b/boost/boost/mpl/aux_/preprocessed/gcc/fold_impl.hpp
new file mode 100644
index 00000000000..9e7a29300d6
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/gcc/fold_impl.hpp
@@ -0,0 +1,180 @@
+
+// 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/aux_/fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+ int N
+ , typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl;
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl< 0,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef state0 state;
+ typedef iter0 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl< 1,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+
+
+ typedef state1 state;
+ typedef iter1 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl< 2,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+
+
+ typedef state2 state;
+ typedef iter2 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl< 3,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;
+ typedef typename mpl::next<iter2>::type iter3;
+
+
+ typedef state3 state;
+ typedef iter3 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl< 4,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp, state3, typename deref<iter3>::type >::type state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef state4 state;
+ typedef iter4 iterator;
+};
+
+template<
+ int N
+ , typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl
+{
+ typedef fold_impl<
+ 4
+ , First
+ , Last
+ , State
+ , ForwardOp
+ > chunk_;
+
+ typedef fold_impl<
+ ( (N - 4) < 0 ? 0 : N - 4 )
+ , typename chunk_::iterator
+ , Last
+ , typename chunk_::state
+ , ForwardOp
+ > res_;
+
+ typedef typename res_::state state;
+ typedef typename res_::iterator iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl< -1,First,Last,State,ForwardOp >
+ : fold_impl<
+ -1
+ , typename mpl::next<First>::type
+ , Last
+ , typename apply2<ForwardOp,State, typename deref<First>::type>::type
+ , ForwardOp
+ >
+{
+};
+
+template<
+ typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl< -1,Last,Last,State,ForwardOp >
+{
+ typedef State state;
+ typedef Last iterator;
+};
+
+}}}
diff --git a/boost/boost/mpl/aux_/preprocessed/gcc/full_lambda.hpp b/boost/boost/mpl/aux_/preprocessed/gcc/full_lambda.hpp
new file mode 100644
index 00000000000..e3eef71b1ea
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/gcc/full_lambda.hpp
@@ -0,0 +1,558 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/aux_/full_lambda.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template<
+ bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false
+ , bool C5 = false
+ >
+struct lambda_or
+ : true_
+{
+};
+
+template<>
+struct lambda_or< false,false,false,false,false >
+ : false_
+{
+};
+
+} // namespace aux
+
+template<
+ typename T
+ , typename Tag
+ , typename Arity
+ >
+struct lambda
+{
+ typedef false_ is_le;
+ typedef T result_;
+ typedef T type;
+};
+
+template<
+ typename T
+ >
+struct is_lambda_expression
+ : lambda<T>::is_le
+{
+};
+
+template< int N, typename Tag >
+struct lambda< arg<N>,Tag, int_< -1 > >
+{
+ typedef true_ is_le;
+ typedef mpl::arg<N> result_; // qualified for the sake of MIPSpro 7.41
+ typedef mpl::protect<result_> type;
+};
+
+template<
+ typename F
+ , typename Tag
+ >
+struct lambda<
+ bind0<F>
+ , Tag
+ , int_<1>
+ >
+{
+ typedef false_ is_le;
+ typedef bind0<
+ F
+ > result_;
+
+ typedef result_ type;
+};
+
+namespace aux {
+
+template<
+ typename IsLE, typename Tag
+ , template< typename P1 > class F
+ , typename L1
+ >
+struct le_result1
+{
+ typedef F<
+ typename L1::type
+ > result_;
+
+ typedef result_ type;
+};
+
+template<
+ typename Tag
+ , template< typename P1 > class F
+ , typename L1
+ >
+struct le_result1< true_,Tag,F,L1 >
+{
+ typedef bind1<
+ quote1< F,Tag >
+ , typename L1::result_
+ > result_;
+
+ typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+ template< typename P1 > class F
+ , typename T1
+ , typename Tag
+ >
+struct lambda<
+ F<T1>
+ , Tag
+ , int_<1>
+ >
+{
+ typedef lambda< T1,Tag > l1;
+ typedef typename l1::is_le is_le1;
+ typedef typename aux::lambda_or<
+ is_le1::value
+ >::type is_le;
+
+ typedef aux::le_result1<
+ is_le, Tag, F, l1
+ > le_result_;
+
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+template<
+ typename F, typename T1
+ , typename Tag
+ >
+struct lambda<
+ bind1< F,T1 >
+ , Tag
+ , int_<2>
+ >
+{
+ typedef false_ is_le;
+ typedef bind1<
+ F
+ , T1
+ > result_;
+
+ typedef result_ type;
+};
+
+namespace aux {
+
+template<
+ typename IsLE, typename Tag
+ , template< typename P1, typename P2 > class F
+ , typename L1, typename L2
+ >
+struct le_result2
+{
+ typedef F<
+ typename L1::type, typename L2::type
+ > result_;
+
+ typedef result_ type;
+};
+
+template<
+ typename Tag
+ , template< typename P1, typename P2 > class F
+ , typename L1, typename L2
+ >
+struct le_result2< true_,Tag,F,L1,L2 >
+{
+ typedef bind2<
+ quote2< F,Tag >
+ , typename L1::result_, typename L2::result_
+ > result_;
+
+ typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+ template< typename P1, typename P2 > class F
+ , typename T1, typename T2
+ , typename Tag
+ >
+struct lambda<
+ F< T1,T2 >
+ , Tag
+ , int_<2>
+ >
+{
+ typedef lambda< T1,Tag > l1;
+ typedef lambda< T2,Tag > l2;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+
+
+ typedef typename aux::lambda_or<
+ is_le1::value, is_le2::value
+ >::type is_le;
+
+ typedef aux::le_result2<
+ is_le, Tag, F, l1, l2
+ > le_result_;
+
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+template<
+ typename F, typename T1, typename T2
+ , typename Tag
+ >
+struct lambda<
+ bind2< F,T1,T2 >
+ , Tag
+ , int_<3>
+ >
+{
+ typedef false_ is_le;
+ typedef bind2<
+ F
+ , T1, T2
+ > result_;
+
+ typedef result_ type;
+};
+
+namespace aux {
+
+template<
+ typename IsLE, typename Tag
+ , template< typename P1, typename P2, typename P3 > class F
+ , typename L1, typename L2, typename L3
+ >
+struct le_result3
+{
+ typedef F<
+ typename L1::type, typename L2::type, typename L3::type
+ > result_;
+
+ typedef result_ type;
+};
+
+template<
+ typename Tag
+ , template< typename P1, typename P2, typename P3 > class F
+ , typename L1, typename L2, typename L3
+ >
+struct le_result3< true_,Tag,F,L1,L2,L3 >
+{
+ typedef bind3<
+ quote3< F,Tag >
+ , typename L1::result_, typename L2::result_, typename L3::result_
+ > result_;
+
+ typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+ template< typename P1, typename P2, typename P3 > class F
+ , typename T1, typename T2, typename T3
+ , typename Tag
+ >
+struct lambda<
+ F< T1,T2,T3 >
+ , Tag
+ , int_<3>
+ >
+{
+ typedef lambda< T1,Tag > l1;
+ typedef lambda< T2,Tag > l2;
+ typedef lambda< T3,Tag > l3;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+
+
+ typedef typename aux::lambda_or<
+ is_le1::value, is_le2::value, is_le3::value
+ >::type is_le;
+
+ typedef aux::le_result3<
+ is_le, Tag, F, l1, l2, l3
+ > le_result_;
+
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ , typename Tag
+ >
+struct lambda<
+ bind3< F,T1,T2,T3 >
+ , Tag
+ , int_<4>
+ >
+{
+ typedef false_ is_le;
+ typedef bind3<
+ F
+ , T1, T2, T3
+ > result_;
+
+ typedef result_ type;
+};
+
+namespace aux {
+
+template<
+ typename IsLE, typename Tag
+ , template< typename P1, typename P2, typename P3, typename P4 > class F
+ , typename L1, typename L2, typename L3, typename L4
+ >
+struct le_result4
+{
+ typedef F<
+ typename L1::type, typename L2::type, typename L3::type
+ , typename L4::type
+ > result_;
+
+ typedef result_ type;
+};
+
+template<
+ typename Tag
+ , template< typename P1, typename P2, typename P3, typename P4 > class F
+ , typename L1, typename L2, typename L3, typename L4
+ >
+struct le_result4< true_,Tag,F,L1,L2,L3,L4 >
+{
+ typedef bind4<
+ quote4< F,Tag >
+ , typename L1::result_, typename L2::result_, typename L3::result_
+ , typename L4::result_
+ > result_;
+
+ typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+ template< typename P1, typename P2, typename P3, typename P4 > class F
+ , typename T1, typename T2, typename T3, typename T4
+ , typename Tag
+ >
+struct lambda<
+ F< T1,T2,T3,T4 >
+ , Tag
+ , int_<4>
+ >
+{
+ typedef lambda< T1,Tag > l1;
+ typedef lambda< T2,Tag > l2;
+ typedef lambda< T3,Tag > l3;
+ typedef lambda< T4,Tag > l4;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+ typedef typename l4::is_le is_le4;
+
+
+ typedef typename aux::lambda_or<
+ is_le1::value, is_le2::value, is_le3::value, is_le4::value
+ >::type is_le;
+
+ typedef aux::le_result4<
+ is_le, Tag, F, l1, l2, l3, l4
+ > le_result_;
+
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename Tag
+ >
+struct lambda<
+ bind4< F,T1,T2,T3,T4 >
+ , Tag
+ , int_<5>
+ >
+{
+ typedef false_ is_le;
+ typedef bind4<
+ F
+ , T1, T2, T3, T4
+ > result_;
+
+ typedef result_ type;
+};
+
+namespace aux {
+
+template<
+ typename IsLE, typename Tag
+ , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F
+ , typename L1, typename L2, typename L3, typename L4, typename L5
+ >
+struct le_result5
+{
+ typedef F<
+ typename L1::type, typename L2::type, typename L3::type
+ , typename L4::type, typename L5::type
+ > result_;
+
+ typedef result_ type;
+};
+
+template<
+ typename Tag
+ , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F
+ , typename L1, typename L2, typename L3, typename L4, typename L5
+ >
+struct le_result5< true_,Tag,F,L1,L2,L3,L4,L5 >
+{
+ typedef bind5<
+ quote5< F,Tag >
+ , typename L1::result_, typename L2::result_, typename L3::result_
+ , typename L4::result_, typename L5::result_
+ > result_;
+
+ typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+ template<
+ typename P1, typename P2, typename P3, typename P4
+ , typename P5
+ >
+ class F
+ , typename T1, typename T2, typename T3, typename T4, typename T5
+ , typename Tag
+ >
+struct lambda<
+ F< T1,T2,T3,T4,T5 >
+ , Tag
+ , int_<5>
+ >
+{
+ typedef lambda< T1,Tag > l1;
+ typedef lambda< T2,Tag > l2;
+ typedef lambda< T3,Tag > l3;
+ typedef lambda< T4,Tag > l4;
+ typedef lambda< T5,Tag > l5;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+ typedef typename l4::is_le is_le4;
+ typedef typename l5::is_le is_le5;
+
+
+ typedef typename aux::lambda_or<
+ is_le1::value, is_le2::value, is_le3::value, is_le4::value
+ , is_le5::value
+ >::type is_le;
+
+ typedef aux::le_result5<
+ is_le, Tag, F, l1, l2, l3, l4, l5
+ > le_result_;
+
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ , typename Tag
+ >
+struct lambda<
+ bind5< F,T1,T2,T3,T4,T5 >
+ , Tag
+ , int_<6>
+ >
+{
+ typedef false_ is_le;
+ typedef bind5<
+ F
+ , T1, T2, T3, T4, T5
+ > result_;
+
+ typedef result_ type;
+};
+
+/// special case for 'protect'
+template< typename T, typename Tag >
+struct lambda< mpl::protect<T>,Tag, int_<1> >
+{
+ typedef false_ is_le;
+ typedef mpl::protect<T> result_;
+ typedef result_ type;
+};
+
+/// specializations for the main 'bind' form
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ , typename Tag
+ >
+struct lambda<
+ bind< F,T1,T2,T3,T4,T5 >
+ , Tag
+ , int_<6>
+ >
+{
+ typedef false_ is_le;
+ typedef bind< F,T1,T2,T3,T4,T5 > result_;
+ typedef result_ type;
+};
+
+template<
+ typename F
+ , typename Tag1
+ , typename Tag2
+ , typename Arity
+ >
+struct lambda<
+ lambda< F,Tag1,Arity >
+ , Tag2
+ , int_<3>
+ >
+{
+ typedef lambda< F,Tag2 > l1;
+ typedef lambda< Tag1,Tag2 > l2;
+ typedef typename l1::is_le is_le;
+ typedef bind1< quote1<aux::template_arity>, typename l1::result_ > arity_;
+ typedef lambda< typename if_< is_le,arity_,Arity >::type, Tag2 > l3;
+ typedef aux::le_result3<is_le, Tag2, mpl::lambda, l1, l2, l3> le_result_;
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 3, lambda)
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/gcc/greater.hpp b/boost/boost/mpl/aux_/preprocessed/gcc/greater.hpp
new file mode 100644
index 00000000000..14d8e08bff0
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/gcc/greater.hpp
@@ -0,0 +1,94 @@
+
+// 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/greater.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct greater_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< greater_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< greater_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct greater_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct greater_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct greater_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct greater_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct greater
+
+ : greater_impl<
+ typename greater_tag<N1>::type
+ , typename greater_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, greater)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct greater_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value > BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/gcc/greater_equal.hpp b/boost/boost/mpl/aux_/preprocessed/gcc/greater_equal.hpp
new file mode 100644
index 00000000000..2603f9184a0
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/gcc/greater_equal.hpp
@@ -0,0 +1,94 @@
+
+// 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/greater_equal.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct greater_equal_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< greater_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< greater_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct greater_equal_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct greater_equal_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct greater_equal_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct greater_equal_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct greater_equal
+
+ : greater_equal_impl<
+ typename greater_equal_tag<N1>::type
+ , typename greater_equal_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater_equal, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, greater_equal)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct greater_equal_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value >= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/gcc/inherit.hpp b/boost/boost/mpl/aux_/preprocessed/gcc/inherit.hpp
new file mode 100644
index 00000000000..00f31c42268
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/gcc/inherit.hpp
@@ -0,0 +1,141 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/inherit.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(T1)
+ , typename BOOST_MPL_AUX_NA_PARAM(T2)
+ >
+struct inherit2
+ : T1, T2
+{
+ typedef inherit2 type;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, inherit2, (T1, T2))
+};
+
+template< typename T1 >
+struct inherit2< T1,empty_base >
+{
+ typedef T1 type;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (T1, empty_base))
+};
+
+template< typename T2 >
+struct inherit2< empty_base,T2 >
+{
+ typedef T2 type;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, T2))
+};
+
+template<>
+struct inherit2< empty_base,empty_base >
+{
+ typedef empty_base type;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, empty_base))
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, inherit2)
+
+template<
+ typename T1 = na, typename T2 = na, typename T3 = na
+ >
+struct inherit3
+ : inherit2<
+ typename inherit2<
+ T1, T2
+ >::type
+ , T3
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 3
+ , inherit3
+ , ( T1, T2, T3)
+ )
+};
+
+BOOST_MPL_AUX_NA_SPEC(3, inherit3)
+
+template<
+ typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na
+ >
+struct inherit4
+ : inherit2<
+ typename inherit3<
+ T1, T2, T3
+ >::type
+ , T4
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 4
+ , inherit4
+ , ( T1, T2, T3, T4)
+ )
+};
+
+BOOST_MPL_AUX_NA_SPEC(4, inherit4)
+
+template<
+ typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na
+ , typename T5 = na
+ >
+struct inherit5
+ : inherit2<
+ typename inherit4<
+ T1, T2, T3, T4
+ >::type
+ , T5
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , inherit5
+ , ( T1, T2, T3, T4, T5)
+ )
+};
+
+BOOST_MPL_AUX_NA_SPEC(5, inherit5)
+
+/// primary template
+
+template<
+ typename T1 = empty_base, typename T2 = empty_base
+ , typename T3 = empty_base, typename T4 = empty_base
+ , typename T5 = empty_base
+ >
+struct inherit
+ : inherit5< T1,T2,T3,T4,T5 >
+{
+};
+
+template<>
+struct inherit< na,na,na,na,na >
+{
+ template<
+
+ typename T1 = empty_base, typename T2 = empty_base
+ , typename T3 = empty_base, typename T4 = empty_base
+ , typename T5 = empty_base
+
+ >
+ struct apply
+ : inherit< T1,T2,T3,T4,T5 >
+ {
+ };
+};
+
+BOOST_MPL_AUX_NA_SPEC_LAMBDA(5, inherit)
+BOOST_MPL_AUX_NA_SPEC_ARITY(5, inherit)
+BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(5, 5, inherit)
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/gcc/iter_fold_if_impl.hpp b/boost/boost/mpl/aux_/preprocessed/gcc/iter_fold_if_impl.hpp
new file mode 100644
index 00000000000..695179584d3
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/gcc/iter_fold_if_impl.hpp
@@ -0,0 +1,133 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/aux_/iter_fold_if_impl.hpp" header
+// -- DO NOT modify by hand!
+
+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;
+ };
+};
+
+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;
+};
+
+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;
+ typedef iter_fold_if_forward_step< typename forward_step0::iterator, typename forward_step0::state, ForwardOp, ForwardPredicate > forward_step1;
+ typedef iter_fold_if_forward_step< typename forward_step1::iterator, typename forward_step1::state, ForwardOp, ForwardPredicate > forward_step2;
+ typedef iter_fold_if_forward_step< typename forward_step2::iterator, typename forward_step2::state, ForwardOp, ForwardPredicate > forward_step3;
+ typedef iter_fold_if_forward_step< typename forward_step3::iterator, typename forward_step3::state, ForwardOp, ForwardPredicate > forward_step4;
+
+
+ typedef typename if_<
+ typename forward_step4::not_last
+ , iter_fold_if_impl<
+ typename forward_step4::iterator
+ , typename forward_step4::state
+ , ForwardOp
+ , ForwardPredicate
+ , BackwardOp
+ , BackwardPredicate
+ >
+ , iter_fold_if_null_step<
+ typename forward_step4::iterator
+ , typename forward_step4::state
+ >
+ >::type backward_step4;
+
+ typedef iter_fold_if_backward_step< typename forward_step3::iterator, typename backward_step4::state, BackwardOp, BackwardPredicate > backward_step3;
+ typedef iter_fold_if_backward_step< typename forward_step2::iterator, typename backward_step3::state, BackwardOp, BackwardPredicate > backward_step2;
+ typedef iter_fold_if_backward_step< typename forward_step1::iterator, typename backward_step2::state, BackwardOp, BackwardPredicate > backward_step1;
+ typedef iter_fold_if_backward_step< typename forward_step0::iterator, typename backward_step1::state, BackwardOp, BackwardPredicate > backward_step0;
+
+
+ public:
+ typedef typename backward_step0::state state;
+ typedef typename backward_step4::iterator iterator;
+};
+
+}}}
diff --git a/boost/boost/mpl/aux_/preprocessed/gcc/iter_fold_impl.hpp b/boost/boost/mpl/aux_/preprocessed/gcc/iter_fold_impl.hpp
new file mode 100644
index 00000000000..805790e86d6
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/gcc/iter_fold_impl.hpp
@@ -0,0 +1,180 @@
+
+// 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/aux_/iter_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+ int N
+ , typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl;
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl< 0,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef state0 state;
+ typedef iter0 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl< 1,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+
+
+ typedef state1 state;
+ typedef iter1 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl< 2,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+
+
+ typedef state2 state;
+ typedef iter2 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl< 3,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp,state2,iter2 >::type state3;
+ typedef typename mpl::next<iter2>::type iter3;
+
+
+ typedef state3 state;
+ typedef iter3 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl< 4,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp,state2,iter2 >::type state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp,state3,iter3 >::type state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef state4 state;
+ typedef iter4 iterator;
+};
+
+template<
+ int N
+ , typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl
+{
+ typedef iter_fold_impl<
+ 4
+ , First
+ , Last
+ , State
+ , ForwardOp
+ > chunk_;
+
+ typedef iter_fold_impl<
+ ( (N - 4) < 0 ? 0 : N - 4 )
+ , typename chunk_::iterator
+ , Last
+ , typename chunk_::state
+ , ForwardOp
+ > res_;
+
+ typedef typename res_::state state;
+ typedef typename res_::iterator iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl< -1,First,Last,State,ForwardOp >
+ : iter_fold_impl<
+ -1
+ , typename mpl::next<First>::type
+ , Last
+ , typename apply2< ForwardOp,State,First >::type
+ , ForwardOp
+ >
+{
+};
+
+template<
+ typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl< -1,Last,Last,State,ForwardOp >
+{
+ typedef State state;
+ typedef Last iterator;
+};
+
+}}}
diff --git a/boost/boost/mpl/aux_/preprocessed/gcc/lambda_no_ctps.hpp b/boost/boost/mpl/aux_/preprocessed/gcc/lambda_no_ctps.hpp
new file mode 100644
index 00000000000..890a198a464
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/gcc/lambda_no_ctps.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/aux_/lambda_no_ctps.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template<
+ bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false
+ , bool C5 = false
+ >
+struct lambda_or
+ : true_
+{
+};
+
+template<>
+struct lambda_or< false,false,false,false,false >
+ : false_
+{
+};
+
+template< typename Arity > struct lambda_impl
+{
+ template< typename T, typename Tag, typename Protect > struct result_
+ {
+ typedef T type;
+ typedef is_placeholder<T> is_le;
+ };
+};
+
+template<> struct lambda_impl< int_<1> >
+{
+ template< typename F, typename Tag, typename Protect > struct result_
+ {
+ typedef lambda< typename F::arg1, Tag, false_ > l1;
+ typedef typename l1::is_le is_le1;
+ typedef aux::lambda_or<
+ BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value
+ > is_le;
+
+ typedef bind1<
+ typename F::rebind
+ , typename l1::type
+ > bind_;
+
+ typedef typename if_<
+ is_le
+ , if_< Protect, mpl::protect<bind_>, bind_ >
+ , identity<F>
+ >::type type_;
+
+ typedef typename type_::type type;
+ };
+};
+
+template<> struct lambda_impl< int_<2> >
+{
+ template< typename F, typename Tag, typename Protect > struct result_
+ {
+ typedef lambda< typename F::arg1, Tag, false_ > l1;
+ typedef lambda< typename F::arg2, Tag, false_ > l2;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+
+
+ typedef aux::lambda_or<
+ BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value
+ > is_le;
+
+ typedef bind2<
+ typename F::rebind
+ , typename l1::type, typename l2::type
+ > bind_;
+
+ typedef typename if_<
+ is_le
+ , if_< Protect, mpl::protect<bind_>, bind_ >
+ , identity<F>
+ >::type type_;
+
+ typedef typename type_::type type;
+ };
+};
+
+template<> struct lambda_impl< int_<3> >
+{
+ template< typename F, typename Tag, typename Protect > struct result_
+ {
+ typedef lambda< typename F::arg1, Tag, false_ > l1;
+ typedef lambda< typename F::arg2, Tag, false_ > l2;
+ typedef lambda< typename F::arg3, Tag, false_ > l3;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+
+
+ typedef aux::lambda_or<
+ BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value
+ > is_le;
+
+ typedef bind3<
+ typename F::rebind
+ , typename l1::type, typename l2::type, typename l3::type
+ > bind_;
+
+ typedef typename if_<
+ is_le
+ , if_< Protect, mpl::protect<bind_>, bind_ >
+ , identity<F>
+ >::type type_;
+
+ typedef typename type_::type type;
+ };
+};
+
+template<> struct lambda_impl< int_<4> >
+{
+ template< typename F, typename Tag, typename Protect > struct result_
+ {
+ typedef lambda< typename F::arg1, Tag, false_ > l1;
+ typedef lambda< typename F::arg2, Tag, false_ > l2;
+ typedef lambda< typename F::arg3, Tag, false_ > l3;
+ typedef lambda< typename F::arg4, Tag, false_ > l4;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+ typedef typename l4::is_le is_le4;
+
+
+ typedef aux::lambda_or<
+ BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value
+ > is_le;
+
+ typedef bind4<
+ typename F::rebind
+ , typename l1::type, typename l2::type, typename l3::type
+ , typename l4::type
+ > bind_;
+
+ typedef typename if_<
+ is_le
+ , if_< Protect, mpl::protect<bind_>, bind_ >
+ , identity<F>
+ >::type type_;
+
+ typedef typename type_::type type;
+ };
+};
+
+template<> struct lambda_impl< int_<5> >
+{
+ template< typename F, typename Tag, typename Protect > struct result_
+ {
+ typedef lambda< typename F::arg1, Tag, false_ > l1;
+ typedef lambda< typename F::arg2, Tag, false_ > l2;
+ typedef lambda< typename F::arg3, Tag, false_ > l3;
+ typedef lambda< typename F::arg4, Tag, false_ > l4;
+ typedef lambda< typename F::arg5, Tag, false_ > l5;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+ typedef typename l4::is_le is_le4;
+ typedef typename l5::is_le is_le5;
+
+
+ typedef aux::lambda_or<
+ BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le5)::value
+ > is_le;
+
+ typedef bind5<
+ typename F::rebind
+ , typename l1::type, typename l2::type, typename l3::type
+ , typename l4::type, typename l5::type
+ > bind_;
+
+ typedef typename if_<
+ is_le
+ , if_< Protect, mpl::protect<bind_>, bind_ >
+ , identity<F>
+ >::type type_;
+
+ typedef typename type_::type type;
+ };
+};
+
+} // namespace aux
+
+template<
+ typename T
+ , typename Tag
+ , typename Protect
+ >
+struct lambda
+{
+ /// Metafunction forwarding confuses MSVC 6.x
+ typedef typename aux::template_arity<T>::type arity_;
+ typedef typename aux::lambda_impl<arity_>
+ ::template result_< T,Tag,Protect > l_;
+
+ typedef typename l_::type type;
+ typedef typename l_::is_le is_le;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(3, lambda, (T, Tag, Protect))
+};
+
+BOOST_MPL_AUX_NA_SPEC2(1, 3, lambda)
+
+template<
+ typename T
+ >
+struct is_lambda_expression
+ : lambda<T>::is_le
+{
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/gcc/less.hpp b/boost/boost/mpl/aux_/preprocessed/gcc/less.hpp
new file mode 100644
index 00000000000..4fe3cd17c49
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/gcc/less.hpp
@@ -0,0 +1,94 @@
+
+// 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/less.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct less_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< less_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< less_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct less_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct less_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct less_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct less_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct less
+
+ : less_impl<
+ typename less_tag<N1>::type
+ , typename less_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, less)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct less_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N2)::value > BOOST_MPL_AUX_VALUE_WKND(N1)::value ) >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/gcc/less_equal.hpp b/boost/boost/mpl/aux_/preprocessed/gcc/less_equal.hpp
new file mode 100644
index 00000000000..ca2894f6f93
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/gcc/less_equal.hpp
@@ -0,0 +1,94 @@
+
+// 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/less_equal.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct less_equal_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< less_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< less_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct less_equal_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct less_equal_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct less_equal_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct less_equal_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct less_equal
+
+ : less_equal_impl<
+ typename less_equal_tag<N1>::type
+ , typename less_equal_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less_equal, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, less_equal)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct less_equal_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value <= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/gcc/list.hpp b/boost/boost/mpl/aux_/preprocessed/gcc/list.hpp
new file mode 100644
index 00000000000..4e8ad53d212
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/gcc/list.hpp
@@ -0,0 +1,323 @@
+
+// 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.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+ , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+ , typename T12 = na, typename T13 = na, typename T14 = na
+ , typename T15 = na, typename T16 = na, typename T17 = na
+ , typename T18 = na, typename T19 = na
+ >
+struct list;
+
+template<
+
+ >
+struct list<
+ na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list0< >
+{
+ typedef list0< >::type type;
+};
+
+template<
+ typename T0
+ >
+struct list<
+ T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list1<T0>
+{
+ typedef typename list1<T0>::type type;
+};
+
+template<
+ typename T0, typename T1
+ >
+struct list<
+ T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list2< T0,T1 >
+{
+ typedef typename list2< T0,T1 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2
+ >
+struct list<
+ T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list3< T0,T1,T2 >
+{
+ typedef typename list3< T0,T1,T2 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3
+ >
+struct list<
+ T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list4< T0,T1,T2,T3 >
+{
+ typedef typename list4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ >
+struct list<
+ T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list5< T0,T1,T2,T3,T4 >
+{
+ typedef typename list5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct list<
+ T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list6< T0,T1,T2,T3,T4,T5 >
+{
+ typedef typename list6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6
+ >
+struct list<
+ T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list7< T0,T1,T2,T3,T4,T5,T6 >
+{
+ typedef typename list7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7
+ >
+struct list<
+ T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+ typedef typename list8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8
+ >
+struct list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+ typedef typename list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ >
+struct list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+ typedef typename list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ , typename T10
+ >
+struct list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+ typedef typename list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+ , na, na, na, na
+ >
+ : list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+ typedef typename list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+ , na, na, na, na
+ >
+ : list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+ typedef typename list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+ , na, na, na, na
+ >
+ : list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+ typedef typename list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+ , na, na, na, na
+ >
+ : list15<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ >
+{
+ typedef typename list15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, na, na, na, na
+ >
+ : list16<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15
+ >
+{
+ typedef typename list16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, na, na, na
+ >
+ : list17<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16
+ >
+{
+ typedef typename list17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, na, na
+ >
+ : list18<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17
+ >
+{
+ typedef typename list18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, na
+ >
+ : list19<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18
+ >
+{
+ typedef typename list19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ , typename T10, typename T11, typename T12, typename T13, typename T14
+ , typename T15, typename T16, typename T17, typename T18, typename T19
+ >
+struct list
+ : list20<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, T19
+ >
+{
+ typedef typename list20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/gcc/list_c.hpp b/boost/boost/mpl/aux_/preprocessed/gcc/list_c.hpp
new file mode 100644
index 00000000000..0b48a7f8e11
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/gcc/list_c.hpp
@@ -0,0 +1,328 @@
+
+// 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_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+ , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+ , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+ , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+ , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+ , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+ , long C18 = LONG_MAX, long C19 = LONG_MAX
+ >
+struct list_c;
+
+template<
+ typename T
+ >
+struct list_c<
+ T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list0_c<T>
+{
+ typedef typename list0_c<T>::type type;
+};
+
+template<
+ typename T, long C0
+ >
+struct list_c<
+ T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list1_c< T,C0 >
+{
+ typedef typename list1_c< T,C0 >::type type;
+};
+
+template<
+ typename T, long C0, long C1
+ >
+struct list_c<
+ T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list2_c< T,C0,C1 >
+{
+ typedef typename list2_c< T,C0,C1 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2
+ >
+struct list_c<
+ T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list3_c< T,C0,C1,C2 >
+{
+ typedef typename list3_c< T,C0,C1,C2 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3
+ >
+struct list_c<
+ T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list4_c< T,C0,C1,C2,C3 >
+{
+ typedef typename list4_c< T,C0,C1,C2,C3 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list5_c< T,C0,C1,C2,C3,C4 >
+{
+ typedef typename list5_c< T,C0,C1,C2,C3,C4 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list6_c< T,C0,C1,C2,C3,C4,C5 >
+{
+ typedef typename list6_c< T,C0,C1,C2,C3,C4,C5 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list7_c< T,C0,C1,C2,C3,C4,C5,C6 >
+{
+ typedef typename list7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX
+ >
+ : list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >
+{
+ typedef typename list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX
+ >
+ : list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >
+{
+ typedef typename list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX
+ >
+ : list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >
+{
+ typedef typename list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >
+{
+ typedef typename list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >
+{
+ typedef typename list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >
+{
+ typedef typename list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list14_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+ >
+{
+ typedef typename list14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list15_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ >
+{
+ typedef typename list15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list16_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15
+ >
+{
+ typedef typename list16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list17_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16
+ >
+{
+ typedef typename list17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, LONG_MAX, LONG_MAX
+ >
+ : list18_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17
+ >
+{
+ typedef typename list18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, C18, LONG_MAX
+ >
+ : list19_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, C18
+ >
+{
+ typedef typename list19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+struct list_c
+ : list20_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, C18, C19
+ >
+{
+ typedef typename list20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/gcc/map.hpp b/boost/boost/mpl/aux_/preprocessed/gcc/map.hpp
new file mode 100644
index 00000000000..837e0137718
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/gcc/map.hpp
@@ -0,0 +1,323 @@
+
+// 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/map.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+ , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+ , typename T12 = na, typename T13 = na, typename T14 = na
+ , typename T15 = na, typename T16 = na, typename T17 = na
+ , typename T18 = na, typename T19 = na
+ >
+struct map;
+
+template<
+
+ >
+struct map<
+ na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map0< >
+{
+ typedef map0< >::type type;
+};
+
+template<
+ typename T0
+ >
+struct map<
+ T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map1<T0>
+{
+ typedef typename map1<T0>::type type;
+};
+
+template<
+ typename T0, typename T1
+ >
+struct map<
+ T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map2< T0,T1 >
+{
+ typedef typename map2< T0,T1 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2
+ >
+struct map<
+ T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map3< T0,T1,T2 >
+{
+ typedef typename map3< T0,T1,T2 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3
+ >
+struct map<
+ T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map4< T0,T1,T2,T3 >
+{
+ typedef typename map4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ >
+struct map<
+ T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map5< T0,T1,T2,T3,T4 >
+{
+ typedef typename map5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct map<
+ T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map6< T0,T1,T2,T3,T4,T5 >
+{
+ typedef typename map6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6
+ >
+struct map<
+ T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map7< T0,T1,T2,T3,T4,T5,T6 >
+{
+ typedef typename map7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7
+ >
+struct map<
+ T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+ typedef typename map8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8
+ >
+struct map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+ typedef typename map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ >
+struct map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+ typedef typename map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ , typename T10
+ >
+struct map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+ typedef typename map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+ , na, na, na, na
+ >
+ : map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+ typedef typename map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+ , na, na, na, na
+ >
+ : map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+ typedef typename map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+ , na, na, na, na
+ >
+ : map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+ typedef typename map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+ , na, na, na, na
+ >
+ : map15<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ >
+{
+ typedef typename map15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, na, na, na, na
+ >
+ : map16<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15
+ >
+{
+ typedef typename map16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, na, na, na
+ >
+ : map17<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16
+ >
+{
+ typedef typename map17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, na, na
+ >
+ : map18<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17
+ >
+{
+ typedef typename map18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, na
+ >
+ : map19<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18
+ >
+{
+ typedef typename map19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+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 map
+ : map20<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, T19
+ >
+{
+ typedef typename map20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/gcc/minus.hpp b/boost/boost/mpl/aux_/preprocessed/gcc/minus.hpp
new file mode 100644
index 00000000000..71d49137660
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/gcc/minus.hpp
@@ -0,0 +1,146 @@
+
+// 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/minus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct minus_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< minus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< minus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct minus_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct minus_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct minus_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct minus_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct minus
+ : minus< minus< minus< minus< N1,N2 >, N3>, N4>, N5>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , minus
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3, typename N4
+ >
+struct minus< N1,N2,N3,N4,na >
+
+ : minus< minus< minus< N1,N2 >, N3>, N4>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , minus
+ , ( N1, N2, N3, N4, na )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3
+ >
+struct minus< N1,N2,N3,na,na >
+
+ : minus< minus< N1,N2 >, N3>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , minus
+ , ( N1, N2, N3, na, na )
+ )
+};
+
+template<
+ typename N1, typename N2
+ >
+struct minus< N1,N2,na,na,na >
+ : minus_impl<
+ typename minus_tag<N1>::type
+ , typename minus_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , minus
+ , ( N1, N2, na, na, na )
+ )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, minus)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct minus_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ - BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/gcc/modulus.hpp b/boost/boost/mpl/aux_/preprocessed/gcc/modulus.hpp
new file mode 100644
index 00000000000..224b34930c9
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/gcc/modulus.hpp
@@ -0,0 +1,101 @@
+
+// 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/modulus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct modulus_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< modulus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< modulus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct modulus_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct modulus_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct modulus_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct modulus_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct modulus
+
+ : modulus_impl<
+ typename modulus_tag<N1>::type
+ , typename modulus_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, modulus, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, modulus)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct modulus_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ % BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/gcc/not_equal_to.hpp b/boost/boost/mpl/aux_/preprocessed/gcc/not_equal_to.hpp
new file mode 100644
index 00000000000..98b21b1e22d
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/gcc/not_equal_to.hpp
@@ -0,0 +1,94 @@
+
+// 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/not_equal_to.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct not_equal_to_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< not_equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< not_equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct not_equal_to_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct not_equal_to_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct not_equal_to_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct not_equal_to_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct not_equal_to
+
+ : not_equal_to_impl<
+ typename not_equal_to_tag<N1>::type
+ , typename not_equal_to_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, not_equal_to, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, not_equal_to)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct not_equal_to_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value != BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/gcc/or.hpp b/boost/boost/mpl/aux_/preprocessed/gcc/or.hpp
new file mode 100644
index 00000000000..31e1aaa4e60
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/gcc/or.hpp
@@ -0,0 +1,69 @@
+
+// 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/or.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template< bool C_, typename T1, typename T2, typename T3, typename T4 >
+struct or_impl
+ : true_
+{
+};
+
+template< typename T1, typename T2, typename T3, typename T4 >
+struct or_impl< false,T1,T2,T3,T4 >
+ : or_impl<
+ BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+ , T2, T3, T4
+ , false_
+ >
+{
+};
+
+template<>
+struct or_impl<
+ false
+ , false_, false_, false_, false_
+ >
+ : false_
+{
+};
+
+} // namespace aux
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(T1)
+ , typename BOOST_MPL_AUX_NA_PARAM(T2)
+ , typename T3 = false_, typename T4 = false_, typename T5 = false_
+ >
+struct or_
+
+ : aux::or_impl<
+ BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+ , T2, T3, T4, T5
+ >
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , or_
+ , ( T1, T2, T3, T4, T5)
+ )
+};
+
+BOOST_MPL_AUX_NA_SPEC2(
+ 2
+ , 5
+ , or_
+ )
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/gcc/placeholders.hpp b/boost/boost/mpl/aux_/preprocessed/gcc/placeholders.hpp
new file mode 100644
index 00000000000..ff97364b9ba
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/gcc/placeholders.hpp
@@ -0,0 +1,105 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+// Copyright Peter Dimov 2001-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)
+//
+
+// Preprocessed version of "boost/mpl/placeholders.hpp" header
+// -- DO NOT modify by hand!
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg< -1 > _;
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_;
+}
+
+}}
+
+/// agurt, 17/mar/02: one more placeholder for the last 'apply#'
+/// specialization
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<1> _1;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_1)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_1;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<2> _2;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_2)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_2;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<3> _3;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_3)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_3;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<4> _4;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_4)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_4;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<5> _5;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_5)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_5;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<6> _6;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_6)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_6;
+}
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/gcc/plus.hpp b/boost/boost/mpl/aux_/preprocessed/gcc/plus.hpp
new file mode 100644
index 00000000000..a9f6ee79a5c
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/gcc/plus.hpp
@@ -0,0 +1,146 @@
+
+// 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/plus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct plus_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< plus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< plus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct plus_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct plus_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct plus_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct plus_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct plus
+ : plus< plus< plus< plus< N1,N2 >, N3>, N4>, N5>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , plus
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3, typename N4
+ >
+struct plus< N1,N2,N3,N4,na >
+
+ : plus< plus< plus< N1,N2 >, N3>, N4>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , plus
+ , ( N1, N2, N3, N4, na )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3
+ >
+struct plus< N1,N2,N3,na,na >
+
+ : plus< plus< N1,N2 >, N3>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , plus
+ , ( N1, N2, N3, na, na )
+ )
+};
+
+template<
+ typename N1, typename N2
+ >
+struct plus< N1,N2,na,na,na >
+ : plus_impl<
+ typename plus_tag<N1>::type
+ , typename plus_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , plus
+ , ( N1, N2, na, na, na )
+ )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, plus)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct plus_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ + BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/gcc/quote.hpp b/boost/boost/mpl/aux_/preprocessed/gcc/quote.hpp
new file mode 100644
index 00000000000..020f093965a
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/gcc/quote.hpp
@@ -0,0 +1,123 @@
+
+// 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/quote.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template< typename T, bool has_type_ >
+struct quote_impl
+{
+ typedef typename T::type type;
+};
+
+template< typename T >
+struct quote_impl< T,false >
+{
+ typedef T type;
+};
+
+template<
+ template< typename P1 > class F
+ , typename Tag = void_
+ >
+struct quote1
+{
+ template< typename U1 > struct apply
+
+ : quote_impl<
+ F<U1>
+ , aux::has_type< F<U1> >::value
+ >
+
+ {
+ };
+};
+
+template<
+ template< typename P1, typename P2 > class F
+ , typename Tag = void_
+ >
+struct quote2
+{
+ template< typename U1, typename U2 > struct apply
+
+ : quote_impl<
+ F< U1,U2 >
+ , aux::has_type< F< U1,U2 > >::value
+ >
+
+ {
+ };
+};
+
+template<
+ template< typename P1, typename P2, typename P3 > class F
+ , typename Tag = void_
+ >
+struct quote3
+{
+ template< typename U1, typename U2, typename U3 > struct apply
+
+ : quote_impl<
+ F< U1,U2,U3 >
+ , aux::has_type< F< U1,U2,U3 > >::value
+ >
+
+ {
+ };
+};
+
+template<
+ template< typename P1, typename P2, typename P3, typename P4 > class F
+ , typename Tag = void_
+ >
+struct quote4
+{
+ template<
+ typename U1, typename U2, typename U3, typename U4
+ >
+ struct apply
+
+ : quote_impl<
+ F< U1,U2,U3,U4 >
+ , aux::has_type< F< U1,U2,U3,U4 > >::value
+ >
+
+ {
+ };
+};
+
+template<
+ template<
+ typename P1, typename P2, typename P3, typename P4
+ , typename P5
+ >
+ class F
+ , typename Tag = void_
+ >
+struct quote5
+{
+ template<
+ typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+ struct apply
+
+ : quote_impl<
+ F< U1,U2,U3,U4,U5 >
+ , aux::has_type< F< U1,U2,U3,U4,U5 > >::value
+ >
+
+ {
+ };
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/gcc/reverse_fold_impl.hpp b/boost/boost/mpl/aux_/preprocessed/gcc/reverse_fold_impl.hpp
new file mode 100644
index 00000000000..c468684c91e
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/gcc/reverse_fold_impl.hpp
@@ -0,0 +1,231 @@
+
+// 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/aux_/reverse_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+ long N
+ , typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl;
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl< 0,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef fwd_state0 bkwd_state0;
+ typedef bkwd_state0 state;
+ typedef iter0 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl< 1,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+
+
+ typedef fwd_state1 bkwd_state1;
+ typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+ typedef bkwd_state0 state;
+ typedef iter1 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl< 2,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+
+
+ typedef fwd_state2 bkwd_state2;
+ typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+ typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter2 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl< 3,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+
+
+ typedef fwd_state3 bkwd_state3;
+ typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+ typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+ typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter3 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl< 4,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef fwd_state4 bkwd_state4;
+ typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
+ typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+ typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+ typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter4 iterator;
+};
+
+template<
+ long N
+ , typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef reverse_fold_impl<
+ ( (N - 4) < 0 ? 0 : N - 4 )
+ , iter4
+ , Last
+ , fwd_state4
+ , BackwardOp
+ , ForwardOp
+ > nested_chunk;
+
+ typedef typename nested_chunk::state bkwd_state4;
+ typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
+ typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+ typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+ typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef typename nested_chunk::iterator iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl< -1,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef reverse_fold_impl<
+ -1
+ , typename mpl::next<First>::type
+ , Last
+ , typename apply2<ForwardOp,State, typename deref<First>::type>::type
+ , BackwardOp
+ , ForwardOp
+ > nested_step;
+
+ typedef typename apply2<
+ BackwardOp
+ , typename nested_step::state
+ , typename deref<First>::type
+ >::type state;
+
+ typedef typename nested_step::iterator iterator;
+};
+
+template<
+ typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl< -1,Last,Last,State,BackwardOp,ForwardOp >
+{
+ typedef State state;
+ typedef Last iterator;
+};
+
+}}}
diff --git a/boost/boost/mpl/aux_/preprocessed/gcc/reverse_iter_fold_impl.hpp b/boost/boost/mpl/aux_/preprocessed/gcc/reverse_iter_fold_impl.hpp
new file mode 100644
index 00000000000..658f92a7c38
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/gcc/reverse_iter_fold_impl.hpp
@@ -0,0 +1,231 @@
+
+// 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/aux_/reverse_iter_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+ long N
+ , typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl;
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl< 0,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef fwd_state0 bkwd_state0;
+ typedef bkwd_state0 state;
+ typedef iter0 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl< 1,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+
+
+ typedef fwd_state1 bkwd_state1;
+ typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+ typedef bkwd_state0 state;
+ typedef iter1 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl< 2,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+
+
+ typedef fwd_state2 bkwd_state2;
+ typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+ typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter2 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl< 3,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+
+
+ typedef fwd_state3 bkwd_state3;
+ typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+ typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+ typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter3 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl< 4,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef fwd_state4 bkwd_state4;
+ typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;
+ typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+ typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+ typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter4 iterator;
+};
+
+template<
+ long N
+ , typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef reverse_iter_fold_impl<
+ ( (N - 4) < 0 ? 0 : N - 4 )
+ , iter4
+ , Last
+ , fwd_state4
+ , BackwardOp
+ , ForwardOp
+ > nested_chunk;
+
+ typedef typename nested_chunk::state bkwd_state4;
+ typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;
+ typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+ typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+ typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef typename nested_chunk::iterator iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl< -1,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef reverse_iter_fold_impl<
+ -1
+ , typename mpl::next<First>::type
+ , Last
+ , typename apply2< ForwardOp,State,First >::type
+ , BackwardOp
+ , ForwardOp
+ > nested_step;
+
+ typedef typename apply2<
+ BackwardOp
+ , typename nested_step::state
+ , First
+ >::type state;
+
+ typedef typename nested_step::iterator iterator;
+};
+
+template<
+ typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl< -1,Last,Last,State,BackwardOp,ForwardOp >
+{
+ typedef State state;
+ typedef Last iterator;
+};
+
+}}}
diff --git a/boost/boost/mpl/aux_/preprocessed/gcc/set.hpp b/boost/boost/mpl/aux_/preprocessed/gcc/set.hpp
new file mode 100644
index 00000000000..5721922e111
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/gcc/set.hpp
@@ -0,0 +1,323 @@
+
+// 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/set.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+ , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+ , typename T12 = na, typename T13 = na, typename T14 = na
+ , typename T15 = na, typename T16 = na, typename T17 = na
+ , typename T18 = na, typename T19 = na
+ >
+struct set;
+
+template<
+
+ >
+struct set<
+ na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set0< >
+{
+ typedef set0< >::type type;
+};
+
+template<
+ typename T0
+ >
+struct set<
+ T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set1<T0>
+{
+ typedef typename set1<T0>::type type;
+};
+
+template<
+ typename T0, typename T1
+ >
+struct set<
+ T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set2< T0,T1 >
+{
+ typedef typename set2< T0,T1 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2
+ >
+struct set<
+ T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set3< T0,T1,T2 >
+{
+ typedef typename set3< T0,T1,T2 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3
+ >
+struct set<
+ T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set4< T0,T1,T2,T3 >
+{
+ typedef typename set4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ >
+struct set<
+ T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set5< T0,T1,T2,T3,T4 >
+{
+ typedef typename set5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct set<
+ T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set6< T0,T1,T2,T3,T4,T5 >
+{
+ typedef typename set6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6
+ >
+struct set<
+ T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set7< T0,T1,T2,T3,T4,T5,T6 >
+{
+ typedef typename set7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7
+ >
+struct set<
+ T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+ typedef typename set8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8
+ >
+struct set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+ typedef typename set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ >
+struct set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+ typedef typename set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ , typename T10
+ >
+struct set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+ typedef typename set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+ , na, na, na, na
+ >
+ : set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+ typedef typename set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+ , na, na, na, na
+ >
+ : set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+ typedef typename set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+ , na, na, na, na
+ >
+ : set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+ typedef typename set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+ , na, na, na, na
+ >
+ : set15<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ >
+{
+ typedef typename set15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, na, na, na, na
+ >
+ : set16<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15
+ >
+{
+ typedef typename set16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, na, na, na
+ >
+ : set17<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16
+ >
+{
+ typedef typename set17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, na, na
+ >
+ : set18<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17
+ >
+{
+ typedef typename set18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, na
+ >
+ : set19<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18
+ >
+{
+ typedef typename set19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+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 set
+ : set20<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, T19
+ >
+{
+ typedef typename set20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/gcc/set_c.hpp b/boost/boost/mpl/aux_/preprocessed/gcc/set_c.hpp
new file mode 100644
index 00000000000..cbeb932c13d
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/gcc/set_c.hpp
@@ -0,0 +1,328 @@
+
+// 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/set_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+ , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+ , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+ , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+ , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+ , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+ , long C18 = LONG_MAX, long C19 = LONG_MAX
+ >
+struct set_c;
+
+template<
+ typename T
+ >
+struct set_c<
+ T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set0_c<T>
+{
+ typedef typename set0_c<T>::type type;
+};
+
+template<
+ typename T, long C0
+ >
+struct set_c<
+ T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set1_c< T,C0 >
+{
+ typedef typename set1_c< T,C0 >::type type;
+};
+
+template<
+ typename T, long C0, long C1
+ >
+struct set_c<
+ T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set2_c< T,C0,C1 >
+{
+ typedef typename set2_c< T,C0,C1 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2
+ >
+struct set_c<
+ T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set3_c< T,C0,C1,C2 >
+{
+ typedef typename set3_c< T,C0,C1,C2 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3
+ >
+struct set_c<
+ T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set4_c< T,C0,C1,C2,C3 >
+{
+ typedef typename set4_c< T,C0,C1,C2,C3 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set5_c< T,C0,C1,C2,C3,C4 >
+{
+ typedef typename set5_c< T,C0,C1,C2,C3,C4 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set6_c< T,C0,C1,C2,C3,C4,C5 >
+{
+ typedef typename set6_c< T,C0,C1,C2,C3,C4,C5 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set7_c< T,C0,C1,C2,C3,C4,C5,C6 >
+{
+ typedef typename set7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX
+ >
+ : set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >
+{
+ typedef typename set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX
+ >
+ : set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >
+{
+ typedef typename set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX
+ >
+ : set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >
+{
+ typedef typename set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >
+{
+ typedef typename set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >
+{
+ typedef typename set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >
+{
+ typedef typename set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set14_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+ >
+{
+ typedef typename set14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set15_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ >
+{
+ typedef typename set15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set16_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15
+ >
+{
+ typedef typename set16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set17_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16
+ >
+{
+ typedef typename set17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, LONG_MAX, LONG_MAX
+ >
+ : set18_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17
+ >
+{
+ typedef typename set18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, C18, LONG_MAX
+ >
+ : set19_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, C18
+ >
+{
+ typedef typename set19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+struct set_c
+ : set20_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, C18, C19
+ >
+{
+ typedef typename set20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/gcc/shift_left.hpp b/boost/boost/mpl/aux_/preprocessed/gcc/shift_left.hpp
new file mode 100644
index 00000000000..b5b181ce196
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/gcc/shift_left.hpp
@@ -0,0 +1,99 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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)
+//
+
+// Preprocessed version of "boost/mpl/shift_left.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct shift_left_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< shift_left_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< shift_left_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct shift_left_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct shift_left_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct shift_left_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct shift_left_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct shift_left
+
+ : shift_left_impl<
+ typename shift_left_tag<N1>::type
+ , typename shift_left_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_left, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_left)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct shift_left_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N, typename S > struct apply
+
+ : integral_c<
+ typename N::value_type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N)::value
+ << BOOST_MPL_AUX_VALUE_WKND(S)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/gcc/shift_right.hpp b/boost/boost/mpl/aux_/preprocessed/gcc/shift_right.hpp
new file mode 100644
index 00000000000..f7a342e989a
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/gcc/shift_right.hpp
@@ -0,0 +1,99 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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)
+//
+
+// Preprocessed version of "boost/mpl/shift_right.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct shift_right_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< shift_right_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< shift_right_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct shift_right_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct shift_right_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct shift_right_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct shift_right_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct shift_right
+
+ : shift_right_impl<
+ typename shift_right_tag<N1>::type
+ , typename shift_right_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_right, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_right)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct shift_right_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N, typename S > struct apply
+
+ : integral_c<
+ typename N::value_type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N)::value
+ >> BOOST_MPL_AUX_VALUE_WKND(S)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/gcc/template_arity.hpp b/boost/boost/mpl/aux_/preprocessed/gcc/template_arity.hpp
new file mode 100644
index 00000000000..3e7bfba1eae
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/gcc/template_arity.hpp
@@ -0,0 +1,101 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/aux_/template_arity.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+template< int N > struct arity_tag
+{
+ typedef char (&type)[N + 1];
+};
+
+template<
+ int C1, int C2, int C3, int C4, int C5, int C6
+ >
+struct max_arity
+{
+ BOOST_STATIC_CONSTANT(int, value =
+ ( C6 > 0 ? C6 : ( C5 > 0 ? C5 : ( C4 > 0 ? C4 : ( C3 > 0 ? C3 : ( C2 > 0 ? C2 : ( C1 > 0 ? C1 : -1 ) ) ) ) ) )
+
+ );
+};
+
+arity_tag<0>::type arity_helper(...);
+
+template<
+ template< typename P1 > class F
+ , typename T1
+ >
+typename arity_tag<1>::type
+arity_helper(type_wrapper< F<T1> >, arity_tag<1>);
+
+template<
+ template< typename P1, typename P2 > class F
+ , typename T1, typename T2
+ >
+typename arity_tag<2>::type
+arity_helper(type_wrapper< F< T1,T2 > >, arity_tag<2>);
+
+template<
+ template< typename P1, typename P2, typename P3 > class F
+ , typename T1, typename T2, typename T3
+ >
+typename arity_tag<3>::type
+arity_helper(type_wrapper< F< T1,T2,T3 > >, arity_tag<3>);
+
+template<
+ template< typename P1, typename P2, typename P3, typename P4 > class F
+ , typename T1, typename T2, typename T3, typename T4
+ >
+typename arity_tag<4>::type
+arity_helper(type_wrapper< F< T1,T2,T3,T4 > >, arity_tag<4>);
+
+template<
+ template<
+ typename P1, typename P2, typename P3, typename P4
+ , typename P5
+ >
+ class F
+ , typename T1, typename T2, typename T3, typename T4, typename T5
+ >
+typename arity_tag<5>::type
+arity_helper(type_wrapper< F< T1,T2,T3,T4,T5 > >, arity_tag<5>);
+
+template<
+ template<
+ typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6
+ >
+ class F
+ , typename T1, typename T2, typename T3, typename T4, typename T5
+ , typename T6
+ >
+typename arity_tag<6>::type
+arity_helper(type_wrapper< F< T1,T2,T3,T4,T5,T6 > >, arity_tag<6>);
+template< typename F, int N >
+struct template_arity_impl
+{
+ BOOST_STATIC_CONSTANT(int, value =
+ sizeof(arity_helper(type_wrapper<F>(), arity_tag<N>())) - 1
+ );
+};
+
+template< typename F >
+struct template_arity
+{
+ BOOST_STATIC_CONSTANT(int, value = (
+ max_arity< template_arity_impl< F,1 >::value, template_arity_impl< F,2 >::value, template_arity_impl< F,3 >::value, template_arity_impl< F,4 >::value, template_arity_impl< F,5 >::value, template_arity_impl< F,6 >::value >::value
+
+ ));
+
+ typedef mpl::int_<value> type;
+};
+
+}}}
diff --git a/boost/boost/mpl/aux_/preprocessed/gcc/times.hpp b/boost/boost/mpl/aux_/preprocessed/gcc/times.hpp
new file mode 100644
index 00000000000..cb97cc4e132
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/gcc/times.hpp
@@ -0,0 +1,146 @@
+
+// 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/times.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct times_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< times_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< times_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct times_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct times_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct times_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct times_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct times
+ : times< times< times< times< N1,N2 >, N3>, N4>, N5>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , times
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3, typename N4
+ >
+struct times< N1,N2,N3,N4,na >
+
+ : times< times< times< N1,N2 >, N3>, N4>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , times
+ , ( N1, N2, N3, N4, na )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3
+ >
+struct times< N1,N2,N3,na,na >
+
+ : times< times< N1,N2 >, N3>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , times
+ , ( N1, N2, N3, na, na )
+ )
+};
+
+template<
+ typename N1, typename N2
+ >
+struct times< N1,N2,na,na,na >
+ : times_impl<
+ typename times_tag<N1>::type
+ , typename times_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , times
+ , ( N1, N2, na, na, na )
+ )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, times)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct times_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ * BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/gcc/unpack_args.hpp b/boost/boost/mpl/aux_/preprocessed/gcc/unpack_args.hpp
new file mode 100644
index 00000000000..2194ce9d11b
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/gcc/unpack_args.hpp
@@ -0,0 +1,94 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/unpack_args.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template< int size, typename F, typename Args >
+struct unpack_args_impl;
+
+template< typename F, typename Args >
+struct unpack_args_impl< 0,F,Args >
+ : apply0<
+ F
+ >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 1,F,Args >
+ : apply1<
+ F
+ , typename at_c< Args,0 >::type
+ >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 2,F,Args >
+ : apply2<
+ F
+ , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+ >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 3,F,Args >
+ : apply3<
+ F
+ , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+ , typename at_c< Args,2 >::type
+ >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 4,F,Args >
+ : apply4<
+ F
+ , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+ , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type
+ >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 5,F,Args >
+ : apply5<
+ F
+ , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+ , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type
+ , typename at_c< Args,4 >::type
+ >
+{
+};
+
+}
+
+template<
+ typename F
+ >
+struct unpack_args
+{
+ template< typename Args > struct apply
+
+ : aux::unpack_args_impl< size<Args>::value,F, Args >
+
+ {
+ };
+};
+
+BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args)
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/gcc/vector.hpp b/boost/boost/mpl/aux_/preprocessed/gcc/vector.hpp
new file mode 100644
index 00000000000..bfa9565a537
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/gcc/vector.hpp
@@ -0,0 +1,323 @@
+
+// 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/vector.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+ , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+ , typename T12 = na, typename T13 = na, typename T14 = na
+ , typename T15 = na, typename T16 = na, typename T17 = na
+ , typename T18 = na, typename T19 = na
+ >
+struct vector;
+
+template<
+
+ >
+struct vector<
+ na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector0< >
+{
+ typedef vector0< >::type type;
+};
+
+template<
+ typename T0
+ >
+struct vector<
+ T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector1<T0>
+{
+ typedef typename vector1<T0>::type type;
+};
+
+template<
+ typename T0, typename T1
+ >
+struct vector<
+ T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector2< T0,T1 >
+{
+ typedef typename vector2< T0,T1 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2
+ >
+struct vector<
+ T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector3< T0,T1,T2 >
+{
+ typedef typename vector3< T0,T1,T2 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3
+ >
+struct vector<
+ T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector4< T0,T1,T2,T3 >
+{
+ typedef typename vector4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ >
+struct vector<
+ T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector5< T0,T1,T2,T3,T4 >
+{
+ typedef typename vector5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct vector<
+ T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector6< T0,T1,T2,T3,T4,T5 >
+{
+ typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6
+ >
+struct vector<
+ T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector7< T0,T1,T2,T3,T4,T5,T6 >
+{
+ typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7
+ >
+struct vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+ typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8
+ >
+struct vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+ typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ >
+struct vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+ typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ , typename T10
+ >
+struct vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+ typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+ , na, na, na, na
+ >
+ : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+ typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+ , na, na, na, na
+ >
+ : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+ typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+ , na, na, na, na
+ >
+ : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+ typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+ , na, na, na, na
+ >
+ : vector15<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ >
+{
+ typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, na, na, na, na
+ >
+ : vector16<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15
+ >
+{
+ typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, na, na, na
+ >
+ : vector17<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16
+ >
+{
+ typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, na, na
+ >
+ : vector18<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17
+ >
+{
+ typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, na
+ >
+ : vector19<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18
+ >
+{
+ typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+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 vector
+ : vector20<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, T19
+ >
+{
+ typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/gcc/vector_c.hpp b/boost/boost/mpl/aux_/preprocessed/gcc/vector_c.hpp
new file mode 100644
index 00000000000..0f1560d7f13
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/gcc/vector_c.hpp
@@ -0,0 +1,309 @@
+
+// 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/vector_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+ , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+ , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+ , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+ , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+ , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+ , long C18 = LONG_MAX, long C19 = LONG_MAX
+ >
+struct vector_c;
+
+template<
+ typename T
+ >
+struct vector_c<
+ T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector0_c<T>
+{
+ typedef typename vector0_c<T>::type type;
+};
+
+template<
+ typename T, long C0
+ >
+struct vector_c<
+ T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector1_c< T, T(C0) >
+{
+ typedef typename vector1_c< T, T(C0) >::type type;
+};
+
+template<
+ typename T, long C0, long C1
+ >
+struct vector_c<
+ T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector2_c< T, T(C0), T(C1) >
+{
+ typedef typename vector2_c< T, T(C0), T(C1) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2
+ >
+struct vector_c<
+ T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector3_c< T, T(C0), T(C1), T(C2) >
+{
+ typedef typename vector3_c< T, T(C0), T(C1), T(C2) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector4_c< T, T(C0), T(C1), T(C2), T(C3) >
+{
+ typedef typename vector4_c< T, T(C0), T(C1), T(C2), T(C3) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) >
+{
+ typedef typename vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) >
+{
+ typedef typename vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) >
+{
+ typedef typename vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX
+ >
+ : vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) >
+{
+ typedef typename vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX
+ >
+ : vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) >
+{
+ typedef typename vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX
+ >
+ : vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) >
+{
+ typedef typename vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) >
+{
+ typedef typename vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector12_c< 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) >
+{
+ typedef typename vector12_c< 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) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector13_c< 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) >
+{
+ typedef typename vector13_c< 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) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector14_c< 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) >
+{
+ typedef typename vector14_c< 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) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector15_c< 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) >
+{
+ typedef typename vector15_c< 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) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector16_c< 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) >
+{
+ typedef typename vector16_c< 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) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector17_c< 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) >
+{
+ typedef typename vector17_c< 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) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, LONG_MAX, LONG_MAX
+ >
+ : vector18_c< 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) >
+{
+ typedef typename vector18_c< 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) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, C18, LONG_MAX
+ >
+ : vector19_c< 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) >
+{
+ typedef typename vector19_c< 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) >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+struct vector_c
+ : vector20_c< 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) >
+{
+ typedef typename vector20_c< 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) >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc60/advance_backward.hpp b/boost/boost/mpl/aux_/preprocessed/msvc60/advance_backward.hpp
new file mode 100644
index 00000000000..36337c8a34c
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc60/advance_backward.hpp
@@ -0,0 +1,132 @@
+
+// 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/aux_/advance_backward.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+template< long N > struct advance_backward;
+template<>
+struct advance_backward<0>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef iter0 type;
+ };
+
+ /// ETI workaround
+ template<> struct apply<int>
+ {
+ typedef int type;
+ };
+
+};
+
+template<>
+struct advance_backward<1>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename prior<iter0>::type iter1;
+ typedef iter1 type;
+ };
+
+ /// ETI workaround
+ template<> struct apply<int>
+ {
+ typedef int type;
+ };
+
+};
+
+template<>
+struct advance_backward<2>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename prior<iter0>::type iter1;
+ typedef typename prior<iter1>::type iter2;
+ typedef iter2 type;
+ };
+
+ /// ETI workaround
+ template<> struct apply<int>
+ {
+ typedef int type;
+ };
+
+};
+
+template<>
+struct advance_backward<3>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename prior<iter0>::type iter1;
+ typedef typename prior<iter1>::type iter2;
+ typedef typename prior<iter2>::type iter3;
+ typedef iter3 type;
+ };
+
+ /// ETI workaround
+ template<> struct apply<int>
+ {
+ typedef int type;
+ };
+
+};
+
+template<>
+struct advance_backward<4>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename prior<iter0>::type iter1;
+ typedef typename prior<iter1>::type iter2;
+ typedef typename prior<iter2>::type iter3;
+ typedef typename prior<iter3>::type iter4;
+ typedef iter4 type;
+ };
+
+ /// ETI workaround
+ template<> struct apply<int>
+ {
+ typedef int type;
+ };
+
+};
+
+template< long N >
+struct advance_backward
+{
+ template< typename Iterator > struct apply
+ {
+ typedef typename apply_wrap1<
+ advance_backward<4>
+ , Iterator
+ >::type chunk_result_;
+
+ typedef typename apply_wrap1<
+ advance_backward<(
+ (N - 4) < 0
+ ? 0
+ : N - 4
+ )>
+ , chunk_result_
+ >::type type;
+ };
+};
+
+}}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc60/advance_forward.hpp b/boost/boost/mpl/aux_/preprocessed/msvc60/advance_forward.hpp
new file mode 100644
index 00000000000..4ffbe78da70
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc60/advance_forward.hpp
@@ -0,0 +1,132 @@
+
+// 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/aux_/advance_forward.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+template< long N > struct advance_forward;
+template<>
+struct advance_forward<0>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef iter0 type;
+ };
+
+ /// ETI workaround
+ template<> struct apply<int>
+ {
+ typedef int type;
+ };
+
+};
+
+template<>
+struct advance_forward<1>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename next<iter0>::type iter1;
+ typedef iter1 type;
+ };
+
+ /// ETI workaround
+ template<> struct apply<int>
+ {
+ typedef int type;
+ };
+
+};
+
+template<>
+struct advance_forward<2>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename next<iter0>::type iter1;
+ typedef typename next<iter1>::type iter2;
+ typedef iter2 type;
+ };
+
+ /// ETI workaround
+ template<> struct apply<int>
+ {
+ typedef int type;
+ };
+
+};
+
+template<>
+struct advance_forward<3>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename next<iter0>::type iter1;
+ typedef typename next<iter1>::type iter2;
+ typedef typename next<iter2>::type iter3;
+ typedef iter3 type;
+ };
+
+ /// ETI workaround
+ template<> struct apply<int>
+ {
+ typedef int type;
+ };
+
+};
+
+template<>
+struct advance_forward<4>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename next<iter0>::type iter1;
+ typedef typename next<iter1>::type iter2;
+ typedef typename next<iter2>::type iter3;
+ typedef typename next<iter3>::type iter4;
+ typedef iter4 type;
+ };
+
+ /// ETI workaround
+ template<> struct apply<int>
+ {
+ typedef int type;
+ };
+
+};
+
+template< long N >
+struct advance_forward
+{
+ template< typename Iterator > struct apply
+ {
+ typedef typename apply_wrap1<
+ advance_forward<4>
+ , Iterator
+ >::type chunk_result_;
+
+ typedef typename apply_wrap1<
+ advance_forward<(
+ (N - 4) < 0
+ ? 0
+ : N - 4
+ )>
+ , chunk_result_
+ >::type type;
+ };
+};
+
+}}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc60/and.hpp b/boost/boost/mpl/aux_/preprocessed/msvc60/and.hpp
new file mode 100644
index 00000000000..555c8001678
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc60/and.hpp
@@ -0,0 +1,73 @@
+
+// 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/and.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< bool C_ > struct and_impl
+{
+ template<
+ typename T1, typename T2, typename T3, typename T4
+ >
+ struct result_
+ : false_
+ {
+ };
+};
+
+template<> struct and_impl<true>
+{
+ template<
+ typename T1, typename T2, typename T3, typename T4
+ >
+ struct result_
+ : and_impl<
+ BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+ >::template result_< T2,T3,T4,true_ >
+ {
+ };
+};
+
+template<>
+struct and_impl<true>
+ ::result_< true_,true_,true_,true_ >
+ : true_
+{
+};
+
+} // namespace aux
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(T1)
+ , typename BOOST_MPL_AUX_NA_PARAM(T2)
+ , typename T3 = true_, typename T4 = true_, typename T5 = true_
+ >
+struct and_
+
+ : aux::and_impl<
+ BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+ >::template result_< T2,T3,T4,T5 >
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , and_
+ , ( T1, T2, T3, T4, T5)
+ )
+};
+
+BOOST_MPL_AUX_NA_SPEC2(
+ 2
+ , 5
+ , and_
+ )
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc60/apply.hpp b/boost/boost/mpl/aux_/preprocessed/msvc60/apply.hpp
new file mode 100644
index 00000000000..a3e2929ff86
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc60/apply.hpp
@@ -0,0 +1,166 @@
+
+// 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/apply.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename F
+ >
+struct apply0
+
+{
+ typedef typename apply_wrap0<
+ typename lambda<F>::type
+
+ >::type type;
+
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 1
+ , apply0
+ , (F )
+ )
+};
+
+/// workaround for ETI bug
+template<>
+struct apply0<int>
+{
+ typedef int type;
+};
+
+template<
+ typename F, typename T1
+ >
+struct apply1
+
+{
+ typedef typename apply_wrap1<
+ typename lambda<F>::type
+ , T1
+ >::type type;
+
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 2
+ , apply1
+ , (F, T1)
+ )
+};
+
+/// workaround for ETI bug
+template<>
+struct apply1< int,int >
+{
+ typedef int type;
+};
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct apply2
+
+{
+ typedef typename apply_wrap2<
+ typename lambda<F>::type
+ , T1, T2
+ >::type type;
+
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 3
+ , apply2
+ , (F, T1, T2)
+ )
+};
+
+/// workaround for ETI bug
+template<>
+struct apply2< int,int,int >
+{
+ typedef int type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct apply3
+
+{
+ typedef typename apply_wrap3<
+ typename lambda<F>::type
+ , T1, T2, T3
+ >::type type;
+
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 4
+ , apply3
+ , (F, T1, T2, T3)
+ )
+};
+
+/// workaround for ETI bug
+template<>
+struct apply3< int,int,int,int >
+{
+ typedef int type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct apply4
+
+{
+ typedef typename apply_wrap4<
+ typename lambda<F>::type
+ , T1, T2, T3, T4
+ >::type type;
+
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , apply4
+ , (F, T1, T2, T3, T4)
+ )
+};
+
+/// workaround for ETI bug
+template<>
+struct apply4< int,int,int,int,int >
+{
+ typedef int type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct apply5
+
+{
+ typedef typename apply_wrap5<
+ typename lambda<F>::type
+ , T1, T2, T3, T4, T5
+ >::type type;
+
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 6
+ , apply5
+ , (F, T1, T2, T3, T4, T5)
+ )
+};
+
+/// workaround for ETI bug
+template<>
+struct apply5< int,int,int,int,int,int >
+{
+ typedef int type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc60/apply_fwd.hpp b/boost/boost/mpl/aux_/preprocessed/msvc60/apply_fwd.hpp
new file mode 100644
index 00000000000..f0f86c17668
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc60/apply_fwd.hpp
@@ -0,0 +1,46 @@
+
+// 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/apply_fwd.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename F
+ >
+struct apply0;
+
+template<
+ typename F, typename T1
+ >
+struct apply1;
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct apply2;
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct apply3;
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct apply4;
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct apply5;
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc60/apply_wrap.hpp b/boost/boost/mpl/aux_/preprocessed/msvc60/apply_wrap.hpp
new file mode 100644
index 00000000000..4e89507d90d
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc60/apply_wrap.hpp
@@ -0,0 +1,247 @@
+
+// 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/apply_wrap.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template< typename F>
+struct msvc_apply0
+{
+ template< bool > struct f_ : F {};
+ template<> struct f_<true>
+ {
+ template< typename P = int > struct apply
+ {
+ typedef int type;
+ };
+ };
+
+ template< typename T = int > struct result_
+ : f_< aux::msvc_never_true<F>::value >
+ ::template apply<>
+ {
+ };
+
+};
+
+template<
+ typename F
+ >
+struct apply_wrap0
+{
+ typedef typename msvc_apply0<F>::template result_<
+
+ >::type type;
+};
+
+/// workaround for ETI bug
+template<>
+struct apply_wrap0<int>
+{
+ typedef int type;
+};
+
+template< typename F>
+struct msvc_apply1
+{
+ template< bool > struct f_ : F {};
+ template<> struct f_<true>
+ {
+ template< typename P1 > struct apply
+ {
+ typedef int type;
+ };
+ };
+
+ template< typename T1 > struct result_
+ : f_< aux::msvc_never_true<F>::value >
+ ::template apply<T1>
+ {
+ };
+};
+
+template<
+ typename F, typename T1
+ >
+struct apply_wrap1
+{
+ typedef typename msvc_apply1<F>::template result_<
+ T1
+ >::type type;
+};
+
+/// workaround for ETI bug
+template<>
+struct apply_wrap1< int,int >
+{
+ typedef int type;
+};
+
+template< typename F>
+struct msvc_apply2
+{
+ template< bool > struct f_ : F {};
+ template<> struct f_<true>
+ {
+ template< typename P1, typename P2 > struct apply
+ {
+ typedef int type;
+ };
+ };
+
+ template< typename T1, typename T2 > struct result_
+ : f_< aux::msvc_never_true<F>::value >
+ ::template apply< T1,T2 >
+ {
+ };
+};
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct apply_wrap2
+{
+ typedef typename msvc_apply2<F>::template result_<
+ T1, T2
+ >::type type;
+};
+
+/// workaround for ETI bug
+template<>
+struct apply_wrap2< int,int,int >
+{
+ typedef int type;
+};
+
+template< typename F>
+struct msvc_apply3
+{
+ template< bool > struct f_ : F {};
+ template<> struct f_<true>
+ {
+ template< typename P1, typename P2, typename P3 > struct apply
+ {
+ typedef int type;
+ };
+ };
+
+ template< typename T1, typename T2, typename T3 > struct result_
+ : f_< aux::msvc_never_true<F>::value >
+ ::template apply< T1,T2,T3 >
+ {
+ };
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct apply_wrap3
+{
+ typedef typename msvc_apply3<F>::template result_<
+ T1, T2, T3
+ >::type type;
+};
+
+/// workaround for ETI bug
+template<>
+struct apply_wrap3< int,int,int,int >
+{
+ typedef int type;
+};
+
+template< typename F>
+struct msvc_apply4
+{
+ template< bool > struct f_ : F {};
+ template<> struct f_<true>
+ {
+ template<
+ typename P1, typename P2, typename P3, typename P4
+ >
+ struct apply
+ {
+ typedef int type;
+ };
+ };
+
+ template<
+ typename T1, typename T2, typename T3, typename T4
+ >
+ struct result_
+ : f_< aux::msvc_never_true<F>::value >
+ ::template apply< T1,T2,T3,T4 >
+ {
+ };
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct apply_wrap4
+{
+ typedef typename msvc_apply4<F>::template result_<
+ T1, T2, T3, T4
+ >::type type;
+};
+
+/// workaround for ETI bug
+template<>
+struct apply_wrap4< int,int,int,int,int >
+{
+ typedef int type;
+};
+
+template< typename F>
+struct msvc_apply5
+{
+ template< bool > struct f_ : F {};
+ template<> struct f_<true>
+ {
+ template<
+ typename P1, typename P2, typename P3, typename P4
+ , typename P5
+ >
+ struct apply
+ {
+ typedef int type;
+ };
+ };
+
+ template<
+ typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+ struct result_
+ : f_< aux::msvc_never_true<F>::value >
+ ::template apply< T1,T2,T3,T4,T5 >
+ {
+ };
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct apply_wrap5
+{
+ typedef typename msvc_apply5<F>::template result_<
+ T1, T2, T3, T4, T5
+ >::type type;
+};
+
+/// workaround for ETI bug
+template<>
+struct apply_wrap5< int,int,int,int,int,int >
+{
+ typedef int type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc60/arg.hpp b/boost/boost/mpl/aux_/preprocessed/msvc60/arg.hpp
new file mode 100644
index 00000000000..6f2f8a80709
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc60/arg.hpp
@@ -0,0 +1,123 @@
+
+// Copyright Peter Dimov 2001-2002
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/arg.hpp" header
+// -- DO NOT modify by hand!
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+template<> struct arg< -1 >
+{
+ BOOST_STATIC_CONSTANT(int, value = -1);
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ typedef U1 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+template<> struct arg<1>
+{
+ BOOST_STATIC_CONSTANT(int, value = 1);
+ typedef arg<2> next;
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ typedef U1 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+template<> struct arg<2>
+{
+ BOOST_STATIC_CONSTANT(int, value = 2);
+ typedef arg<3> next;
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ typedef U2 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+template<> struct arg<3>
+{
+ BOOST_STATIC_CONSTANT(int, value = 3);
+ typedef arg<4> next;
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ typedef U3 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+template<> struct arg<4>
+{
+ BOOST_STATIC_CONSTANT(int, value = 4);
+ typedef arg<5> next;
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ typedef U4 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+template<> struct arg<5>
+{
+ BOOST_STATIC_CONSTANT(int, value = 5);
+ typedef arg<6> next;
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ typedef U5 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+BOOST_MPL_AUX_NONTYPE_ARITY_SPEC(1,int, arg)
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc60/basic_bind.hpp b/boost/boost/mpl/aux_/preprocessed/msvc60/basic_bind.hpp
new file mode 100644
index 00000000000..4f12a40f044
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc60/basic_bind.hpp
@@ -0,0 +1,328 @@
+
+// Copyright Peter Dimov 2001
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/aux_/basic_bind.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< bool >
+struct resolve_arg_impl
+{
+ template<
+ typename T, typename U1, typename U2, typename U3
+ , typename U4, typename U5
+ >
+ struct result_
+ {
+ typedef T type;
+ };
+};
+
+template<>
+struct resolve_arg_impl<true>
+{
+ template<
+ typename T, typename U1, typename U2, typename U3
+ , typename U4, typename U5
+ >
+ struct result_
+ {
+ typedef typename apply_wrap5<
+ T
+ , U1, U2, U3, U4, U5
+ >::type type;
+ };
+};
+
+template< typename T > struct is_bind_template;
+
+template<
+ typename T, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg
+ : resolve_arg_impl< is_bind_template<T>::value >
+ ::template result_< T,U1,U2,U3,U4,U5 >
+{
+};
+
+template< int arity_ > struct bind_chooser;
+
+aux::no_tag is_bind_helper(...);
+template< typename T > aux::no_tag is_bind_helper(protect<T>*);
+
+template< int N >
+aux::yes_tag is_bind_helper(arg<N>*);
+
+template< bool is_ref_ = true >
+struct is_bind_template_impl
+{
+ template< typename T > struct result_
+ {
+ BOOST_STATIC_CONSTANT(bool, value = false);
+ };
+};
+
+template<>
+struct is_bind_template_impl<false>
+{
+ template< typename T > struct result_
+ {
+ BOOST_STATIC_CONSTANT(bool, value =
+ sizeof(aux::is_bind_helper(static_cast<T*>(0)))
+ == sizeof(aux::yes_tag)
+ );
+ };
+};
+
+template< typename T > struct is_bind_template
+ : is_bind_template_impl< ::boost::detail::is_reference_impl<T>::value >
+ ::template result_<T>
+{
+};
+
+} // namespace aux
+
+template<
+ typename F
+ >
+struct bind0
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+
+ public:
+ typedef typename apply_wrap0<
+ f_
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F
+ >
+aux::yes_tag
+is_bind_helper(bind0<F>*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(1, bind0)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)
+
+template<
+ typename F, typename T1
+ >
+struct bind1
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+
+ public:
+ typedef typename apply_wrap1<
+ f_
+ , typename t1::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1
+ >
+aux::yes_tag
+is_bind_helper(bind1< F,T1 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(2, bind1)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct bind2
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+ typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+
+ public:
+ typedef typename apply_wrap2<
+ f_
+ , typename t1::type, typename t2::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2
+ >
+aux::yes_tag
+is_bind_helper(bind2< F,T1,T2 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(3, bind2)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct bind3
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+ typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+ typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+
+ public:
+ typedef typename apply_wrap3<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+aux::yes_tag
+is_bind_helper(bind3< F,T1,T2,T3 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(4, bind3)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct bind4
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+ typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+ typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+ typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;
+
+ public:
+ typedef typename apply_wrap4<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ , typename t4::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+aux::yes_tag
+is_bind_helper(bind4< F,T1,T2,T3,T4 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct bind5
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+ typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+ typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+ typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;
+ typedef aux::resolve_bind_arg< T5,U1,U2,U3,U4,U5 > t5;
+
+ public:
+ typedef typename apply_wrap5<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ , typename t4::type, typename t5::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+aux::yes_tag
+is_bind_helper(bind5< F,T1,T2,T3,T4,T5 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc60/bind.hpp b/boost/boost/mpl/aux_/preprocessed/msvc60/bind.hpp
new file mode 100644
index 00000000000..53c76e8f2a5
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc60/bind.hpp
@@ -0,0 +1,432 @@
+
+// Copyright Peter Dimov 2001
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/bind.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< bool >
+struct resolve_arg_impl
+{
+ template<
+ typename T, typename U1, typename U2, typename U3
+ , typename U4, typename U5
+ >
+ struct result_
+ {
+ typedef T type;
+ };
+};
+
+template<>
+struct resolve_arg_impl<true>
+{
+ template<
+ typename T, typename U1, typename U2, typename U3
+ , typename U4, typename U5
+ >
+ struct result_
+ {
+ typedef typename apply_wrap5<
+ T
+ , U1, U2, U3, U4, U5
+ >::type type;
+ };
+};
+
+template< typename T > struct is_bind_template;
+
+template<
+ typename T, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg
+ : resolve_arg_impl< is_bind_template<T>::value >
+ ::template result_< T,U1,U2,U3,U4,U5 >
+{
+};
+
+template< typename T >
+struct replace_unnamed_arg_impl
+{
+ template< typename Arg > struct result_
+ {
+ typedef Arg next;
+ typedef T type;
+ };
+};
+
+template<>
+struct replace_unnamed_arg_impl< arg< -1 > >
+{
+ template< typename Arg > struct result_
+ {
+ typedef typename next<Arg>::type next;
+ typedef Arg type;
+ };
+};
+
+template< typename T, typename Arg >
+struct replace_unnamed_arg
+ : replace_unnamed_arg_impl<T>::template result_<Arg>
+{
+};
+
+template< int arity_ > struct bind_chooser;
+
+aux::no_tag is_bind_helper(...);
+template< typename T > aux::no_tag is_bind_helper(protect<T>*);
+
+template< int N >
+aux::yes_tag is_bind_helper(arg<N>*);
+
+template< bool is_ref_ = true >
+struct is_bind_template_impl
+{
+ template< typename T > struct result_
+ {
+ BOOST_STATIC_CONSTANT(bool, value = false);
+ };
+};
+
+template<>
+struct is_bind_template_impl<false>
+{
+ template< typename T > struct result_
+ {
+ BOOST_STATIC_CONSTANT(bool, value =
+ sizeof(aux::is_bind_helper(static_cast<T*>(0)))
+ == sizeof(aux::yes_tag)
+ );
+ };
+};
+
+template< typename T > struct is_bind_template
+ : is_bind_template_impl< ::boost::detail::is_reference_impl<T>::value >
+ ::template result_<T>
+{
+};
+
+} // namespace aux
+
+template<
+ typename F
+ >
+struct bind0
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ public:
+ typedef typename apply_wrap0<
+ f_
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F
+ >
+aux::yes_tag
+is_bind_helper(bind0<F>*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(1, bind0)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)
+
+template<
+ typename F, typename T1
+ >
+struct bind1
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ public:
+ typedef typename apply_wrap1<
+ f_
+ , typename t1::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1
+ >
+aux::yes_tag
+is_bind_helper(bind1< F,T1 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(2, bind1)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct bind2
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ typedef aux::replace_unnamed_arg< T2,n2 > r2;
+ typedef typename r2::type a2;
+ typedef typename r2::next n3;
+ typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+ ///
+ public:
+ typedef typename apply_wrap2<
+ f_
+ , typename t1::type, typename t2::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2
+ >
+aux::yes_tag
+is_bind_helper(bind2< F,T1,T2 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(3, bind2)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct bind3
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ typedef aux::replace_unnamed_arg< T2,n2 > r2;
+ typedef typename r2::type a2;
+ typedef typename r2::next n3;
+ typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+ ///
+ typedef aux::replace_unnamed_arg< T3,n3 > r3;
+ typedef typename r3::type a3;
+ typedef typename r3::next n4;
+ typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+ ///
+ public:
+ typedef typename apply_wrap3<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+aux::yes_tag
+is_bind_helper(bind3< F,T1,T2,T3 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(4, bind3)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct bind4
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ typedef aux::replace_unnamed_arg< T2,n2 > r2;
+ typedef typename r2::type a2;
+ typedef typename r2::next n3;
+ typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+ ///
+ typedef aux::replace_unnamed_arg< T3,n3 > r3;
+ typedef typename r3::type a3;
+ typedef typename r3::next n4;
+ typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+ ///
+ typedef aux::replace_unnamed_arg< T4,n4 > r4;
+ typedef typename r4::type a4;
+ typedef typename r4::next n5;
+ typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
+ ///
+ public:
+ typedef typename apply_wrap4<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ , typename t4::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+aux::yes_tag
+is_bind_helper(bind4< F,T1,T2,T3,T4 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct bind5
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ typedef aux::replace_unnamed_arg< T2,n2 > r2;
+ typedef typename r2::type a2;
+ typedef typename r2::next n3;
+ typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+ ///
+ typedef aux::replace_unnamed_arg< T3,n3 > r3;
+ typedef typename r3::type a3;
+ typedef typename r3::next n4;
+ typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+ ///
+ typedef aux::replace_unnamed_arg< T4,n4 > r4;
+ typedef typename r4::type a4;
+ typedef typename r4::next n5;
+ typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
+ ///
+ typedef aux::replace_unnamed_arg< T5,n5 > r5;
+ typedef typename r5::type a5;
+ typedef typename r5::next n6;
+ typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5;
+ ///
+ public:
+ typedef typename apply_wrap5<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ , typename t4::type, typename t5::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+aux::yes_tag
+is_bind_helper(bind5< F,T1,T2,T3,T4,T5 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc60/bind_fwd.hpp b/boost/boost/mpl/aux_/preprocessed/msvc60/bind_fwd.hpp
new file mode 100644
index 00000000000..022cba34611
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc60/bind_fwd.hpp
@@ -0,0 +1,46 @@
+
+// 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/bind_fwd.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename F
+ >
+struct bind0;
+
+template<
+ typename F, typename T1
+ >
+struct bind1;
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct bind2;
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct bind3;
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct bind4;
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct bind5;
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc60/bitand.hpp b/boost/boost/mpl/aux_/preprocessed/msvc60/bitand.hpp
new file mode 100644
index 00000000000..e96cf1a7261
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc60/bitand.hpp
@@ -0,0 +1,149 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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)
+//
+
+// Preprocessed version of "boost/mpl/bitand.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+ >
+struct bitand_impl
+ : if_c<
+ ( tag1_ > tag2_ )
+ , aux::cast2nd_impl< bitand_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< bitand_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitand_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct bitand_impl< na,integral_c_tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct bitand_impl< integral_c_tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct bitand_tag
+{
+ typedef typename T::tag type;
+};
+
+/// forward declaration
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct bitand_2;
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct bitand_
+
+ : if_<
+
+ is_na<N3>
+ , bitand_2< N1,N2 >
+ , bitand_<
+ bitand_2< N1,N2 >
+ , N3, N4, N5
+ >
+ >::type
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , bitand_
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1
+ , typename N2
+ >
+struct bitand_2
+ : aux::msvc_eti_base< typename apply_wrap2<
+ bitand_impl<
+ typename bitand_tag<N1>::type
+ , typename bitand_tag<N2>::type
+ >
+ , N1
+ , N2
+ >::type >::type
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, bitand_2, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitand_)
+
+}}
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< typename T, T n1, T n2 >
+struct bitand_wknd
+{
+ BOOST_STATIC_CONSTANT(T, value = (n1 & n2));
+ typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct bitand_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+ : aux::bitand_wknd<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , N1::value
+ , N2::value
+ >::type
+
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc60/bitor.hpp b/boost/boost/mpl/aux_/preprocessed/msvc60/bitor.hpp
new file mode 100644
index 00000000000..bbc96ab7aea
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc60/bitor.hpp
@@ -0,0 +1,149 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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)
+//
+
+// Preprocessed version of "boost/mpl/bitor.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+ >
+struct bitor_impl
+ : if_c<
+ ( tag1_ > tag2_ )
+ , aux::cast2nd_impl< bitor_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< bitor_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitor_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct bitor_impl< na,integral_c_tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct bitor_impl< integral_c_tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct bitor_tag
+{
+ typedef typename T::tag type;
+};
+
+/// forward declaration
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct bitor_2;
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct bitor_
+
+ : if_<
+
+ is_na<N3>
+ , bitor_2< N1,N2 >
+ , bitor_<
+ bitor_2< N1,N2 >
+ , N3, N4, N5
+ >
+ >::type
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , bitor_
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1
+ , typename N2
+ >
+struct bitor_2
+ : aux::msvc_eti_base< typename apply_wrap2<
+ bitor_impl<
+ typename bitor_tag<N1>::type
+ , typename bitor_tag<N2>::type
+ >
+ , N1
+ , N2
+ >::type >::type
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, bitor_2, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitor_)
+
+}}
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< typename T, T n1, T n2 >
+struct bitor_wknd
+{
+ BOOST_STATIC_CONSTANT(T, value = (n1 | n2));
+ typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct bitor_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+ : aux::bitor_wknd<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , N1::value
+ , N2::value
+ >::type
+
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc60/bitxor.hpp b/boost/boost/mpl/aux_/preprocessed/msvc60/bitxor.hpp
new file mode 100644
index 00000000000..4c1429712ca
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc60/bitxor.hpp
@@ -0,0 +1,149 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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)
+//
+
+// Preprocessed version of "boost/mpl/bitxor.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+ >
+struct bitxor_impl
+ : if_c<
+ ( tag1_ > tag2_ )
+ , aux::cast2nd_impl< bitxor_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< bitxor_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitxor_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct bitxor_impl< na,integral_c_tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct bitxor_impl< integral_c_tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct bitxor_tag
+{
+ typedef typename T::tag type;
+};
+
+/// forward declaration
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct bitxor_2;
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct bitxor_
+
+ : if_<
+
+ is_na<N3>
+ , bitxor_2< N1,N2 >
+ , bitxor_<
+ bitxor_2< N1,N2 >
+ , N3, N4, N5
+ >
+ >::type
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , bitxor_
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1
+ , typename N2
+ >
+struct bitxor_2
+ : aux::msvc_eti_base< typename apply_wrap2<
+ bitxor_impl<
+ typename bitxor_tag<N1>::type
+ , typename bitxor_tag<N2>::type
+ >
+ , N1
+ , N2
+ >::type >::type
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, bitxor_2, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitxor_)
+
+}}
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< typename T, T n1, T n2 >
+struct bitxor_wknd
+{
+ BOOST_STATIC_CONSTANT(T, value = (n1 ^ n2));
+ typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct bitxor_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+ : aux::bitxor_wknd<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , N1::value
+ , N2::value
+ >::type
+
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc60/deque.hpp b/boost/boost/mpl/aux_/preprocessed/msvc60/deque.hpp
new file mode 100644
index 00000000000..a0445d9dfdd
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc60/deque.hpp
@@ -0,0 +1,556 @@
+
+// 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/deque.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< int N >
+struct deque_chooser;
+
+}
+
+namespace aux {
+
+template<>
+struct deque_chooser<0>
+{
+ 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 result_
+ {
+ typedef vector0<
+
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<1>
+{
+ 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 result_
+ {
+ typedef typename vector1<
+ T0
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<2>
+{
+ 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 result_
+ {
+ typedef typename vector2<
+ T0, T1
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<3>
+{
+ 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 result_
+ {
+ typedef typename vector3<
+ T0, T1, T2
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<4>
+{
+ 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 result_
+ {
+ typedef typename vector4<
+ T0, T1, T2, T3
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<5>
+{
+ 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 result_
+ {
+ typedef typename vector5<
+ T0, T1, T2, T3, T4
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<6>
+{
+ 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 result_
+ {
+ typedef typename vector6<
+ T0, T1, T2, T3, T4, T5
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<7>
+{
+ 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 result_
+ {
+ typedef typename vector7<
+ T0, T1, T2, T3, T4, T5, T6
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<8>
+{
+ 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 result_
+ {
+ typedef typename vector8<
+ T0, T1, T2, T3, T4, T5, T6, T7
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<9>
+{
+ 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 result_
+ {
+ typedef typename vector9<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<10>
+{
+ 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 result_
+ {
+ typedef typename vector10<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<11>
+{
+ 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 result_
+ {
+ typedef typename vector11<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<12>
+{
+ 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 result_
+ {
+ typedef typename vector12<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<13>
+{
+ 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 result_
+ {
+ typedef typename vector13<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<14>
+{
+ 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 result_
+ {
+ typedef typename vector14<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<15>
+{
+ 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 result_
+ {
+ typedef typename vector15<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<16>
+{
+ 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 result_
+ {
+ typedef typename vector16<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<17>
+{
+ 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 result_
+ {
+ typedef typename vector17<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<18>
+{
+ 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 result_
+ {
+ typedef typename vector18<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<19>
+{
+ 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 result_
+ {
+ typedef typename vector19<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<20>
+{
+ 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 result_
+ {
+ typedef typename vector20<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< typename T >
+struct is_deque_arg
+{
+ BOOST_STATIC_CONSTANT(bool, value = true);
+};
+
+template<>
+struct is_deque_arg<na>
+{
+ BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+template<
+ 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 deque_count_args
+{
+ BOOST_STATIC_CONSTANT(int, value =
+ is_deque_arg<T1>::value + is_deque_arg<T2>::value
+ + is_deque_arg<T3>::value + is_deque_arg<T4>::value
+ + is_deque_arg<T5>::value + is_deque_arg<T6>::value
+ + is_deque_arg<T7>::value + is_deque_arg<T8>::value
+ + is_deque_arg<T9>::value + is_deque_arg<T10>::value
+ + is_deque_arg<T11>::value + is_deque_arg<T12>::value
+ + is_deque_arg<T13>::value + is_deque_arg<T14>::value
+ + is_deque_arg<T15>::value + is_deque_arg<T16>::value
+ + is_deque_arg<T17>::value + is_deque_arg<T18>::value
+ + is_deque_arg<T19>::value + is_deque_arg<T20>::value
+ );
+
+};
+
+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 deque_impl
+{
+ typedef aux::deque_count_args<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ > arg_num_;
+
+ typedef typename aux::deque_chooser< arg_num_::value >
+ ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+} // namespace aux
+
+template<
+ typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+ , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+ , typename T12 = na, typename T13 = na, typename T14 = na
+ , typename T15 = na, typename T16 = na, typename T17 = na
+ , typename T18 = na, typename T19 = na
+ >
+struct deque
+ : aux::deque_impl<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ >::type
+{
+ typedef typename aux::deque_impl<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc60/divides.hpp b/boost/boost/mpl/aux_/preprocessed/msvc60/divides.hpp
new file mode 100644
index 00000000000..76814919221
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc60/divides.hpp
@@ -0,0 +1,148 @@
+
+// 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/divides.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+ >
+struct divides_impl
+ : if_c<
+ ( tag1_ > tag2_ )
+ , aux::cast2nd_impl< divides_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< divides_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct divides_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct divides_impl< na,integral_c_tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct divides_impl< integral_c_tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct divides_tag
+{
+ typedef typename T::tag type;
+};
+
+/// forward declaration
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct divides2;
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct divides
+
+ : if_<
+
+ is_na<N3>
+ , divides2< N1,N2 >
+ , divides<
+ divides2< N1,N2 >
+ , N3, N4, N5
+ >
+ >::type
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , divides
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1
+ , typename N2
+ >
+struct divides2
+ : aux::msvc_eti_base< typename apply_wrap2<
+ divides_impl<
+ typename divides_tag<N1>::type
+ , typename divides_tag<N2>::type
+ >
+ , N1
+ , N2
+ >::type >::type
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, divides2, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, divides)
+
+}}
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< typename T, T n1, T n2 >
+struct divides_wknd
+{
+ BOOST_STATIC_CONSTANT(T, value = (n1 / n2));
+ typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct divides_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+ : aux::divides_wknd<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , N1::value
+ , N2::value
+ >::type
+
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc60/equal_to.hpp b/boost/boost/mpl/aux_/preprocessed/msvc60/equal_to.hpp
new file mode 100644
index 00000000000..64e90650276
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc60/equal_to.hpp
@@ -0,0 +1,102 @@
+
+// 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/equal_to.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+ >
+struct equal_to_impl
+ : if_c<
+ ( tag1_ > tag2_ )
+ , aux::cast2nd_impl< equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct equal_to_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct equal_to_impl< na,integral_c_tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct equal_to_impl< integral_c_tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct equal_to_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct equal_to
+ : aux::msvc_eti_base< typename apply_wrap2<
+ equal_to_impl<
+ typename equal_to_tag<N1>::type
+ , typename equal_to_tag<N2>::type
+ >
+ , N1
+ , N2
+ >::type >::type
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, equal_to, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, equal_to)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct equal_to_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ {
+ BOOST_STATIC_CONSTANT(bool, value =
+ ( BOOST_MPL_AUX_VALUE_WKND(N1)::value ==
+ BOOST_MPL_AUX_VALUE_WKND(N2)::value )
+ );
+ typedef bool_<value> type;
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc60/fold_impl.hpp b/boost/boost/mpl/aux_/preprocessed/msvc60/fold_impl.hpp
new file mode 100644
index 00000000000..4b3c69076a5
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc60/fold_impl.hpp
@@ -0,0 +1,293 @@
+
+// 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/aux_/fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+ int N
+ , typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl;
+
+template< int N >
+struct fold_chunk;
+
+template<> struct fold_chunk<0>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State state0;
+ typedef state0 state;
+ typedef iter0 iterator;
+ };
+
+ /// ETI workaround
+ template<> struct result_< int,int,int,int >
+ {
+ typedef int state;
+ typedef int iterator;
+ };
+
+};
+
+template<> struct fold_chunk<1>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+
+
+ typedef state1 state;
+ typedef iter1 iterator;
+ };
+
+ /// ETI workaround
+ template<> struct result_< int,int,int,int >
+ {
+ typedef int state;
+ typedef int iterator;
+ };
+
+};
+
+template<> struct fold_chunk<2>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+
+
+ typedef state2 state;
+ typedef iter2 iterator;
+ };
+
+ /// ETI workaround
+ template<> struct result_< int,int,int,int >
+ {
+ typedef int state;
+ typedef int iterator;
+ };
+
+};
+
+template<> struct fold_chunk<3>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;
+ typedef typename mpl::next<iter2>::type iter3;
+
+
+ typedef state3 state;
+ typedef iter3 iterator;
+ };
+
+ /// ETI workaround
+ template<> struct result_< int,int,int,int >
+ {
+ typedef int state;
+ typedef int iterator;
+ };
+
+};
+
+template<> struct fold_chunk<4>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp, state3, typename deref<iter3>::type >::type state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef state4 state;
+ typedef iter4 iterator;
+ };
+
+ /// ETI workaround
+ template<> struct result_< int,int,int,int >
+ {
+ typedef int state;
+ typedef int iterator;
+ };
+
+};
+
+template< int N >
+struct fold_chunk
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef fold_impl<
+ 4
+ , First
+ , Last
+ , State
+ , ForwardOp
+ > chunk_;
+
+ typedef fold_impl<
+ ( (N - 4) < 0 ? 0 : N - 4 )
+ , typename chunk_::iterator
+ , Last
+ , typename chunk_::state
+ , ForwardOp
+ > res_;
+
+ typedef typename res_::state state;
+ typedef typename res_::iterator iterator;
+ };
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_step;
+
+template<
+ typename Last
+ , typename State
+ >
+struct fold_null_step
+{
+ typedef Last iterator;
+ typedef State state;
+};
+
+template<>
+struct fold_chunk< -1 >
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef typename if_<
+ typename is_same< First,Last >::type
+ , fold_null_step< Last,State >
+ , fold_step< First,Last,State,ForwardOp >
+ >::type res_;
+
+ typedef typename res_::state state;
+ typedef typename res_::iterator iterator;
+ };
+
+ /// ETI workaround
+ template<> struct result_< int,int,int,int >
+ {
+ typedef int state;
+ typedef int iterator;
+ };
+
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_step
+{
+ typedef fold_chunk< -1 >::template result_<
+ typename mpl::next<First>::type
+ , Last
+ , typename apply2<ForwardOp,State, typename deref<First>::type>::type
+ , ForwardOp
+ > chunk_;
+
+ typedef typename chunk_::state state;
+ typedef typename chunk_::iterator iterator;
+};
+
+template<
+ int N
+ , typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl
+ : fold_chunk<N>
+ ::template result_< First,Last,State,ForwardOp >
+{
+};
+
+}}}
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc60/full_lambda.hpp b/boost/boost/mpl/aux_/preprocessed/msvc60/full_lambda.hpp
new file mode 100644
index 00000000000..bf818731eba
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc60/full_lambda.hpp
@@ -0,0 +1,554 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/aux_/full_lambda.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template<
+ bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false
+ , bool C5 = false
+ >
+struct lambda_or
+ : true_
+{
+};
+
+template<>
+struct lambda_or< false,false,false,false,false >
+ : false_
+{
+};
+
+} // namespace aux
+
+template<
+ typename T
+ , typename Tag
+
+ >
+struct lambda
+{
+ typedef false_ is_le;
+ typedef T result_;
+ typedef T type;
+};
+
+template<
+ typename T
+ >
+struct is_lambda_expression
+ : lambda<T>::is_le
+{
+};
+
+template< int N, typename Tag >
+struct lambda< arg<N>, Tag >
+{
+ typedef true_ is_le;
+ typedef mpl::arg<N> result_; // qualified for the sake of MIPSpro 7.41
+ typedef mpl::protect<result_> type;
+};
+
+template<
+ typename F
+ , typename Tag
+ >
+struct lambda<
+ bind0<F>
+ , Tag
+
+ >
+{
+ typedef false_ is_le;
+ typedef bind0<
+ F
+ > result_;
+
+ typedef result_ type;
+};
+
+namespace aux {
+
+template<
+ typename IsLE, typename Tag
+ , template< typename P1 > class F
+ , typename L1
+ >
+struct le_result1
+{
+ typedef F<
+ typename L1::type
+ > result_;
+
+ typedef result_ type;
+};
+
+template<
+ typename Tag
+ , template< typename P1 > class F
+ , typename L1
+ >
+struct le_result1< true_,Tag,F,L1 >
+{
+ typedef bind1<
+ quote1< F,Tag >
+ , typename L1::result_
+ > result_;
+
+ typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+ template< typename P1 > class F
+ , typename T1
+ , typename Tag
+ >
+struct lambda<
+ F<T1>
+ , Tag
+
+ >
+{
+ typedef lambda< T1,Tag > l1;
+ typedef typename l1::is_le is_le1;
+ typedef typename aux::lambda_or<
+ is_le1::value
+ >::type is_le;
+
+ typedef aux::le_result1<
+ is_le, Tag, F, l1
+ > le_result_;
+
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+template<
+ typename F, typename T1
+ , typename Tag
+ >
+struct lambda<
+ bind1< F,T1 >
+ , Tag
+
+ >
+{
+ typedef false_ is_le;
+ typedef bind1<
+ F
+ , T1
+ > result_;
+
+ typedef result_ type;
+};
+
+namespace aux {
+
+template<
+ typename IsLE, typename Tag
+ , template< typename P1, typename P2 > class F
+ , typename L1, typename L2
+ >
+struct le_result2
+{
+ typedef F<
+ typename L1::type, typename L2::type
+ > result_;
+
+ typedef result_ type;
+};
+
+template<
+ typename Tag
+ , template< typename P1, typename P2 > class F
+ , typename L1, typename L2
+ >
+struct le_result2< true_,Tag,F,L1,L2 >
+{
+ typedef bind2<
+ quote2< F,Tag >
+ , typename L1::result_, typename L2::result_
+ > result_;
+
+ typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+ template< typename P1, typename P2 > class F
+ , typename T1, typename T2
+ , typename Tag
+ >
+struct lambda<
+ F< T1,T2 >
+ , Tag
+
+ >
+{
+ typedef lambda< T1,Tag > l1;
+ typedef lambda< T2,Tag > l2;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+
+
+ typedef typename aux::lambda_or<
+ is_le1::value, is_le2::value
+ >::type is_le;
+
+ typedef aux::le_result2<
+ is_le, Tag, F, l1, l2
+ > le_result_;
+
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+template<
+ typename F, typename T1, typename T2
+ , typename Tag
+ >
+struct lambda<
+ bind2< F,T1,T2 >
+ , Tag
+
+ >
+{
+ typedef false_ is_le;
+ typedef bind2<
+ F
+ , T1, T2
+ > result_;
+
+ typedef result_ type;
+};
+
+namespace aux {
+
+template<
+ typename IsLE, typename Tag
+ , template< typename P1, typename P2, typename P3 > class F
+ , typename L1, typename L2, typename L3
+ >
+struct le_result3
+{
+ typedef F<
+ typename L1::type, typename L2::type, typename L3::type
+ > result_;
+
+ typedef result_ type;
+};
+
+template<
+ typename Tag
+ , template< typename P1, typename P2, typename P3 > class F
+ , typename L1, typename L2, typename L3
+ >
+struct le_result3< true_,Tag,F,L1,L2,L3 >
+{
+ typedef bind3<
+ quote3< F,Tag >
+ , typename L1::result_, typename L2::result_, typename L3::result_
+ > result_;
+
+ typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+ template< typename P1, typename P2, typename P3 > class F
+ , typename T1, typename T2, typename T3
+ , typename Tag
+ >
+struct lambda<
+ F< T1,T2,T3 >
+ , Tag
+
+ >
+{
+ typedef lambda< T1,Tag > l1;
+ typedef lambda< T2,Tag > l2;
+ typedef lambda< T3,Tag > l3;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+
+
+ typedef typename aux::lambda_or<
+ is_le1::value, is_le2::value, is_le3::value
+ >::type is_le;
+
+ typedef aux::le_result3<
+ is_le, Tag, F, l1, l2, l3
+ > le_result_;
+
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ , typename Tag
+ >
+struct lambda<
+ bind3< F,T1,T2,T3 >
+ , Tag
+
+ >
+{
+ typedef false_ is_le;
+ typedef bind3<
+ F
+ , T1, T2, T3
+ > result_;
+
+ typedef result_ type;
+};
+
+namespace aux {
+
+template<
+ typename IsLE, typename Tag
+ , template< typename P1, typename P2, typename P3, typename P4 > class F
+ , typename L1, typename L2, typename L3, typename L4
+ >
+struct le_result4
+{
+ typedef F<
+ typename L1::type, typename L2::type, typename L3::type
+ , typename L4::type
+ > result_;
+
+ typedef result_ type;
+};
+
+template<
+ typename Tag
+ , template< typename P1, typename P2, typename P3, typename P4 > class F
+ , typename L1, typename L2, typename L3, typename L4
+ >
+struct le_result4< true_,Tag,F,L1,L2,L3,L4 >
+{
+ typedef bind4<
+ quote4< F,Tag >
+ , typename L1::result_, typename L2::result_, typename L3::result_
+ , typename L4::result_
+ > result_;
+
+ typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+ template< typename P1, typename P2, typename P3, typename P4 > class F
+ , typename T1, typename T2, typename T3, typename T4
+ , typename Tag
+ >
+struct lambda<
+ F< T1,T2,T3,T4 >
+ , Tag
+
+ >
+{
+ typedef lambda< T1,Tag > l1;
+ typedef lambda< T2,Tag > l2;
+ typedef lambda< T3,Tag > l3;
+ typedef lambda< T4,Tag > l4;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+ typedef typename l4::is_le is_le4;
+
+
+ typedef typename aux::lambda_or<
+ is_le1::value, is_le2::value, is_le3::value, is_le4::value
+ >::type is_le;
+
+ typedef aux::le_result4<
+ is_le, Tag, F, l1, l2, l3, l4
+ > le_result_;
+
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename Tag
+ >
+struct lambda<
+ bind4< F,T1,T2,T3,T4 >
+ , Tag
+
+ >
+{
+ typedef false_ is_le;
+ typedef bind4<
+ F
+ , T1, T2, T3, T4
+ > result_;
+
+ typedef result_ type;
+};
+
+namespace aux {
+
+template<
+ typename IsLE, typename Tag
+ , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F
+ , typename L1, typename L2, typename L3, typename L4, typename L5
+ >
+struct le_result5
+{
+ typedef F<
+ typename L1::type, typename L2::type, typename L3::type
+ , typename L4::type, typename L5::type
+ > result_;
+
+ typedef result_ type;
+};
+
+template<
+ typename Tag
+ , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F
+ , typename L1, typename L2, typename L3, typename L4, typename L5
+ >
+struct le_result5< true_,Tag,F,L1,L2,L3,L4,L5 >
+{
+ typedef bind5<
+ quote5< F,Tag >
+ , typename L1::result_, typename L2::result_, typename L3::result_
+ , typename L4::result_, typename L5::result_
+ > result_;
+
+ typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+ template<
+ typename P1, typename P2, typename P3, typename P4
+ , typename P5
+ >
+ class F
+ , typename T1, typename T2, typename T3, typename T4, typename T5
+ , typename Tag
+ >
+struct lambda<
+ F< T1,T2,T3,T4,T5 >
+ , Tag
+
+ >
+{
+ typedef lambda< T1,Tag > l1;
+ typedef lambda< T2,Tag > l2;
+ typedef lambda< T3,Tag > l3;
+ typedef lambda< T4,Tag > l4;
+ typedef lambda< T5,Tag > l5;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+ typedef typename l4::is_le is_le4;
+ typedef typename l5::is_le is_le5;
+
+
+ typedef typename aux::lambda_or<
+ is_le1::value, is_le2::value, is_le3::value, is_le4::value
+ , is_le5::value
+ >::type is_le;
+
+ typedef aux::le_result5<
+ is_le, Tag, F, l1, l2, l3, l4, l5
+ > le_result_;
+
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ , typename Tag
+ >
+struct lambda<
+ bind5< F,T1,T2,T3,T4,T5 >
+ , Tag
+
+ >
+{
+ typedef false_ is_le;
+ typedef bind5<
+ F
+ , T1, T2, T3, T4, T5
+ > result_;
+
+ typedef result_ type;
+};
+
+/// special case for 'protect'
+template< typename T, typename Tag >
+struct lambda< mpl::protect<T>, Tag >
+{
+ typedef false_ is_le;
+ typedef mpl::protect<T> result_;
+ typedef result_ type;
+};
+
+/// specializations for the main 'bind' form
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ , typename Tag
+ >
+struct lambda<
+ bind< F,T1,T2,T3,T4,T5 >
+ , Tag
+
+ >
+{
+ typedef false_ is_le;
+ typedef bind< F,T1,T2,T3,T4,T5 > result_;
+ typedef result_ type;
+};
+
+/// workaround for MWCW 8.3+/EDG < 303, leads to ambiguity on Digital Mars
+
+template<
+ typename F, typename Tag1, typename Tag2
+ >
+struct lambda<
+ lambda< F,Tag1 >
+ , Tag2
+ >
+{
+ typedef lambda< F,Tag2 > l1;
+ typedef lambda< Tag1,Tag2 > l2;
+ typedef typename l1::is_le is_le;
+ typedef aux::le_result2<is_le, Tag2, mpl::lambda, l1, l2> le_result_;
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, lambda)
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc60/greater.hpp b/boost/boost/mpl/aux_/preprocessed/msvc60/greater.hpp
new file mode 100644
index 00000000000..5f5662dedd0
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc60/greater.hpp
@@ -0,0 +1,102 @@
+
+// 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/greater.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+ >
+struct greater_impl
+ : if_c<
+ ( tag1_ > tag2_ )
+ , aux::cast2nd_impl< greater_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< greater_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct greater_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct greater_impl< na,integral_c_tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct greater_impl< integral_c_tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct greater_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct greater
+ : aux::msvc_eti_base< typename apply_wrap2<
+ greater_impl<
+ typename greater_tag<N1>::type
+ , typename greater_tag<N2>::type
+ >
+ , N1
+ , N2
+ >::type >::type
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, greater)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct greater_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ {
+ BOOST_STATIC_CONSTANT(bool, value =
+ ( BOOST_MPL_AUX_VALUE_WKND(N1)::value >
+ BOOST_MPL_AUX_VALUE_WKND(N2)::value )
+ );
+ typedef bool_<value> type;
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc60/greater_equal.hpp b/boost/boost/mpl/aux_/preprocessed/msvc60/greater_equal.hpp
new file mode 100644
index 00000000000..ae776fcc5b9
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc60/greater_equal.hpp
@@ -0,0 +1,102 @@
+
+// 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/greater_equal.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+ >
+struct greater_equal_impl
+ : if_c<
+ ( tag1_ > tag2_ )
+ , aux::cast2nd_impl< greater_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< greater_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct greater_equal_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct greater_equal_impl< na,integral_c_tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct greater_equal_impl< integral_c_tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct greater_equal_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct greater_equal
+ : aux::msvc_eti_base< typename apply_wrap2<
+ greater_equal_impl<
+ typename greater_equal_tag<N1>::type
+ , typename greater_equal_tag<N2>::type
+ >
+ , N1
+ , N2
+ >::type >::type
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater_equal, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, greater_equal)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct greater_equal_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ {
+ BOOST_STATIC_CONSTANT(bool, value =
+ ( BOOST_MPL_AUX_VALUE_WKND(N1)::value >=
+ BOOST_MPL_AUX_VALUE_WKND(N2)::value )
+ );
+ typedef bool_<value> type;
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc60/inherit.hpp b/boost/boost/mpl/aux_/preprocessed/msvc60/inherit.hpp
new file mode 100644
index 00000000000..233a1ec30c2
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc60/inherit.hpp
@@ -0,0 +1,166 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/inherit.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template< bool C1, bool C2 >
+struct inherit2_impl
+{
+ template< typename Derived, typename T1, typename T2 > struct result_
+ : T1, T2
+ {
+ typedef Derived type_;
+ };
+};
+
+template<>
+struct inherit2_impl< false,true >
+{
+ template< typename Derived, typename T1, typename T2 > struct result_
+ : T1
+ {
+ typedef T1 type_;
+ };
+};
+
+template<>
+struct inherit2_impl< true,false >
+{
+ template< typename Derived, typename T1, typename T2 > struct result_
+ : T2
+ {
+ typedef T2 type_;
+ };
+};
+
+template<>
+struct inherit2_impl< true,true >
+{
+ template< typename Derived, typename T1, typename T2 > struct result_
+ {
+ typedef T1 type_;
+ };
+};
+
+} // namespace aux
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(T1)
+ , typename BOOST_MPL_AUX_NA_PARAM(T2)
+ >
+struct inherit2
+ : aux::inherit2_impl<
+ is_empty_base<T1>::value
+ , is_empty_base<T2>::value
+ >::template result_< inherit2< T1,T2 >,T1, T2 >
+{
+ typedef typename inherit2::type_ type;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, inherit2, (T1, T2))
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, inherit2)
+
+template<
+ typename T1 = na, typename T2 = na, typename T3 = na
+ >
+struct inherit3
+ : inherit2<
+ typename inherit2<
+ T1, T2
+ >::type
+ , T3
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 3
+ , inherit3
+ , ( T1, T2, T3)
+ )
+};
+
+BOOST_MPL_AUX_NA_SPEC(3, inherit3)
+
+template<
+ typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na
+ >
+struct inherit4
+ : inherit2<
+ typename inherit3<
+ T1, T2, T3
+ >::type
+ , T4
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 4
+ , inherit4
+ , ( T1, T2, T3, T4)
+ )
+};
+
+BOOST_MPL_AUX_NA_SPEC(4, inherit4)
+
+template<
+ typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na
+ , typename T5 = na
+ >
+struct inherit5
+ : inherit2<
+ typename inherit4<
+ T1, T2, T3, T4
+ >::type
+ , T5
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , inherit5
+ , ( T1, T2, T3, T4, T5)
+ )
+};
+
+BOOST_MPL_AUX_NA_SPEC(5, inherit5)
+
+/// primary template
+
+template<
+ typename T1 = empty_base, typename T2 = empty_base
+ , typename T3 = empty_base, typename T4 = empty_base
+ , typename T5 = empty_base
+ >
+struct inherit
+ : inherit5< T1,T2,T3,T4,T5 >
+{
+};
+
+template<>
+struct inherit< na,na,na,na,na >
+{
+ template<
+
+ typename T1 = empty_base, typename T2 = empty_base
+ , typename T3 = empty_base, typename T4 = empty_base
+ , typename T5 = empty_base
+
+ >
+ struct apply
+ : inherit< T1,T2,T3,T4,T5 >
+ {
+ };
+};
+
+BOOST_MPL_AUX_NA_SPEC_LAMBDA(5, inherit)
+BOOST_MPL_AUX_NA_SPEC_ARITY(5, inherit)
+BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(5, 5, inherit)
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc60/iter_fold_if_impl.hpp b/boost/boost/mpl/aux_/preprocessed/msvc60/iter_fold_if_impl.hpp
new file mode 100644
index 00000000000..695179584d3
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc60/iter_fold_if_impl.hpp
@@ -0,0 +1,133 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/aux_/iter_fold_if_impl.hpp" header
+// -- DO NOT modify by hand!
+
+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;
+ };
+};
+
+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;
+};
+
+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;
+ typedef iter_fold_if_forward_step< typename forward_step0::iterator, typename forward_step0::state, ForwardOp, ForwardPredicate > forward_step1;
+ typedef iter_fold_if_forward_step< typename forward_step1::iterator, typename forward_step1::state, ForwardOp, ForwardPredicate > forward_step2;
+ typedef iter_fold_if_forward_step< typename forward_step2::iterator, typename forward_step2::state, ForwardOp, ForwardPredicate > forward_step3;
+ typedef iter_fold_if_forward_step< typename forward_step3::iterator, typename forward_step3::state, ForwardOp, ForwardPredicate > forward_step4;
+
+
+ typedef typename if_<
+ typename forward_step4::not_last
+ , iter_fold_if_impl<
+ typename forward_step4::iterator
+ , typename forward_step4::state
+ , ForwardOp
+ , ForwardPredicate
+ , BackwardOp
+ , BackwardPredicate
+ >
+ , iter_fold_if_null_step<
+ typename forward_step4::iterator
+ , typename forward_step4::state
+ >
+ >::type backward_step4;
+
+ typedef iter_fold_if_backward_step< typename forward_step3::iterator, typename backward_step4::state, BackwardOp, BackwardPredicate > backward_step3;
+ typedef iter_fold_if_backward_step< typename forward_step2::iterator, typename backward_step3::state, BackwardOp, BackwardPredicate > backward_step2;
+ typedef iter_fold_if_backward_step< typename forward_step1::iterator, typename backward_step2::state, BackwardOp, BackwardPredicate > backward_step1;
+ typedef iter_fold_if_backward_step< typename forward_step0::iterator, typename backward_step1::state, BackwardOp, BackwardPredicate > backward_step0;
+
+
+ public:
+ typedef typename backward_step0::state state;
+ typedef typename backward_step4::iterator iterator;
+};
+
+}}}
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc60/iter_fold_impl.hpp b/boost/boost/mpl/aux_/preprocessed/msvc60/iter_fold_impl.hpp
new file mode 100644
index 00000000000..69aadc46b63
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc60/iter_fold_impl.hpp
@@ -0,0 +1,293 @@
+
+// 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/aux_/iter_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+ int N
+ , typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl;
+
+template< int N >
+struct iter_fold_chunk;
+
+template<> struct iter_fold_chunk<0>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State state0;
+ typedef state0 state;
+ typedef iter0 iterator;
+ };
+
+ /// ETI workaround
+ template<> struct result_< int,int,int,int >
+ {
+ typedef int state;
+ typedef int iterator;
+ };
+
+};
+
+template<> struct iter_fold_chunk<1>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+
+
+ typedef state1 state;
+ typedef iter1 iterator;
+ };
+
+ /// ETI workaround
+ template<> struct result_< int,int,int,int >
+ {
+ typedef int state;
+ typedef int iterator;
+ };
+
+};
+
+template<> struct iter_fold_chunk<2>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+
+
+ typedef state2 state;
+ typedef iter2 iterator;
+ };
+
+ /// ETI workaround
+ template<> struct result_< int,int,int,int >
+ {
+ typedef int state;
+ typedef int iterator;
+ };
+
+};
+
+template<> struct iter_fold_chunk<3>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp,state2,iter2 >::type state3;
+ typedef typename mpl::next<iter2>::type iter3;
+
+
+ typedef state3 state;
+ typedef iter3 iterator;
+ };
+
+ /// ETI workaround
+ template<> struct result_< int,int,int,int >
+ {
+ typedef int state;
+ typedef int iterator;
+ };
+
+};
+
+template<> struct iter_fold_chunk<4>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp,state2,iter2 >::type state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp,state3,iter3 >::type state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef state4 state;
+ typedef iter4 iterator;
+ };
+
+ /// ETI workaround
+ template<> struct result_< int,int,int,int >
+ {
+ typedef int state;
+ typedef int iterator;
+ };
+
+};
+
+template< int N >
+struct iter_fold_chunk
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef iter_fold_impl<
+ 4
+ , First
+ , Last
+ , State
+ , ForwardOp
+ > chunk_;
+
+ typedef iter_fold_impl<
+ ( (N - 4) < 0 ? 0 : N - 4 )
+ , typename chunk_::iterator
+ , Last
+ , typename chunk_::state
+ , ForwardOp
+ > res_;
+
+ typedef typename res_::state state;
+ typedef typename res_::iterator iterator;
+ };
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_step;
+
+template<
+ typename Last
+ , typename State
+ >
+struct iter_fold_null_step
+{
+ typedef Last iterator;
+ typedef State state;
+};
+
+template<>
+struct iter_fold_chunk< -1 >
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef typename if_<
+ typename is_same< First,Last >::type
+ , iter_fold_null_step< Last,State >
+ , iter_fold_step< First,Last,State,ForwardOp >
+ >::type res_;
+
+ typedef typename res_::state state;
+ typedef typename res_::iterator iterator;
+ };
+
+ /// ETI workaround
+ template<> struct result_< int,int,int,int >
+ {
+ typedef int state;
+ typedef int iterator;
+ };
+
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_step
+{
+ typedef iter_fold_chunk< -1 >::template result_<
+ typename mpl::next<First>::type
+ , Last
+ , typename apply2< ForwardOp,State,First >::type
+ , ForwardOp
+ > chunk_;
+
+ typedef typename chunk_::state state;
+ typedef typename chunk_::iterator iterator;
+};
+
+template<
+ int N
+ , typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl
+ : iter_fold_chunk<N>
+ ::template result_< First,Last,State,ForwardOp >
+{
+};
+
+}}}
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc60/lambda_no_ctps.hpp b/boost/boost/mpl/aux_/preprocessed/msvc60/lambda_no_ctps.hpp
new file mode 100644
index 00000000000..890a198a464
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc60/lambda_no_ctps.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/aux_/lambda_no_ctps.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template<
+ bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false
+ , bool C5 = false
+ >
+struct lambda_or
+ : true_
+{
+};
+
+template<>
+struct lambda_or< false,false,false,false,false >
+ : false_
+{
+};
+
+template< typename Arity > struct lambda_impl
+{
+ template< typename T, typename Tag, typename Protect > struct result_
+ {
+ typedef T type;
+ typedef is_placeholder<T> is_le;
+ };
+};
+
+template<> struct lambda_impl< int_<1> >
+{
+ template< typename F, typename Tag, typename Protect > struct result_
+ {
+ typedef lambda< typename F::arg1, Tag, false_ > l1;
+ typedef typename l1::is_le is_le1;
+ typedef aux::lambda_or<
+ BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value
+ > is_le;
+
+ typedef bind1<
+ typename F::rebind
+ , typename l1::type
+ > bind_;
+
+ typedef typename if_<
+ is_le
+ , if_< Protect, mpl::protect<bind_>, bind_ >
+ , identity<F>
+ >::type type_;
+
+ typedef typename type_::type type;
+ };
+};
+
+template<> struct lambda_impl< int_<2> >
+{
+ template< typename F, typename Tag, typename Protect > struct result_
+ {
+ typedef lambda< typename F::arg1, Tag, false_ > l1;
+ typedef lambda< typename F::arg2, Tag, false_ > l2;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+
+
+ typedef aux::lambda_or<
+ BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value
+ > is_le;
+
+ typedef bind2<
+ typename F::rebind
+ , typename l1::type, typename l2::type
+ > bind_;
+
+ typedef typename if_<
+ is_le
+ , if_< Protect, mpl::protect<bind_>, bind_ >
+ , identity<F>
+ >::type type_;
+
+ typedef typename type_::type type;
+ };
+};
+
+template<> struct lambda_impl< int_<3> >
+{
+ template< typename F, typename Tag, typename Protect > struct result_
+ {
+ typedef lambda< typename F::arg1, Tag, false_ > l1;
+ typedef lambda< typename F::arg2, Tag, false_ > l2;
+ typedef lambda< typename F::arg3, Tag, false_ > l3;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+
+
+ typedef aux::lambda_or<
+ BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value
+ > is_le;
+
+ typedef bind3<
+ typename F::rebind
+ , typename l1::type, typename l2::type, typename l3::type
+ > bind_;
+
+ typedef typename if_<
+ is_le
+ , if_< Protect, mpl::protect<bind_>, bind_ >
+ , identity<F>
+ >::type type_;
+
+ typedef typename type_::type type;
+ };
+};
+
+template<> struct lambda_impl< int_<4> >
+{
+ template< typename F, typename Tag, typename Protect > struct result_
+ {
+ typedef lambda< typename F::arg1, Tag, false_ > l1;
+ typedef lambda< typename F::arg2, Tag, false_ > l2;
+ typedef lambda< typename F::arg3, Tag, false_ > l3;
+ typedef lambda< typename F::arg4, Tag, false_ > l4;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+ typedef typename l4::is_le is_le4;
+
+
+ typedef aux::lambda_or<
+ BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value
+ > is_le;
+
+ typedef bind4<
+ typename F::rebind
+ , typename l1::type, typename l2::type, typename l3::type
+ , typename l4::type
+ > bind_;
+
+ typedef typename if_<
+ is_le
+ , if_< Protect, mpl::protect<bind_>, bind_ >
+ , identity<F>
+ >::type type_;
+
+ typedef typename type_::type type;
+ };
+};
+
+template<> struct lambda_impl< int_<5> >
+{
+ template< typename F, typename Tag, typename Protect > struct result_
+ {
+ typedef lambda< typename F::arg1, Tag, false_ > l1;
+ typedef lambda< typename F::arg2, Tag, false_ > l2;
+ typedef lambda< typename F::arg3, Tag, false_ > l3;
+ typedef lambda< typename F::arg4, Tag, false_ > l4;
+ typedef lambda< typename F::arg5, Tag, false_ > l5;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+ typedef typename l4::is_le is_le4;
+ typedef typename l5::is_le is_le5;
+
+
+ typedef aux::lambda_or<
+ BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le5)::value
+ > is_le;
+
+ typedef bind5<
+ typename F::rebind
+ , typename l1::type, typename l2::type, typename l3::type
+ , typename l4::type, typename l5::type
+ > bind_;
+
+ typedef typename if_<
+ is_le
+ , if_< Protect, mpl::protect<bind_>, bind_ >
+ , identity<F>
+ >::type type_;
+
+ typedef typename type_::type type;
+ };
+};
+
+} // namespace aux
+
+template<
+ typename T
+ , typename Tag
+ , typename Protect
+ >
+struct lambda
+{
+ /// Metafunction forwarding confuses MSVC 6.x
+ typedef typename aux::template_arity<T>::type arity_;
+ typedef typename aux::lambda_impl<arity_>
+ ::template result_< T,Tag,Protect > l_;
+
+ typedef typename l_::type type;
+ typedef typename l_::is_le is_le;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(3, lambda, (T, Tag, Protect))
+};
+
+BOOST_MPL_AUX_NA_SPEC2(1, 3, lambda)
+
+template<
+ typename T
+ >
+struct is_lambda_expression
+ : lambda<T>::is_le
+{
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc60/less.hpp b/boost/boost/mpl/aux_/preprocessed/msvc60/less.hpp
new file mode 100644
index 00000000000..951f0608272
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc60/less.hpp
@@ -0,0 +1,102 @@
+
+// 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/less.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+ >
+struct less_impl
+ : if_c<
+ ( tag1_ > tag2_ )
+ , aux::cast2nd_impl< less_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< less_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct less_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct less_impl< na,integral_c_tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct less_impl< integral_c_tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct less_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct less
+ : aux::msvc_eti_base< typename apply_wrap2<
+ less_impl<
+ typename less_tag<N1>::type
+ , typename less_tag<N2>::type
+ >
+ , N1
+ , N2
+ >::type >::type
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, less)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct less_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ {
+ BOOST_STATIC_CONSTANT(bool, value =
+ ( BOOST_MPL_AUX_VALUE_WKND(N2)::value >
+ BOOST_MPL_AUX_VALUE_WKND(N1)::value )
+ );
+ typedef bool_<value> type;
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc60/less_equal.hpp b/boost/boost/mpl/aux_/preprocessed/msvc60/less_equal.hpp
new file mode 100644
index 00000000000..a56e692e3ea
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc60/less_equal.hpp
@@ -0,0 +1,102 @@
+
+// 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/less_equal.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+ >
+struct less_equal_impl
+ : if_c<
+ ( tag1_ > tag2_ )
+ , aux::cast2nd_impl< less_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< less_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct less_equal_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct less_equal_impl< na,integral_c_tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct less_equal_impl< integral_c_tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct less_equal_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct less_equal
+ : aux::msvc_eti_base< typename apply_wrap2<
+ less_equal_impl<
+ typename less_equal_tag<N1>::type
+ , typename less_equal_tag<N2>::type
+ >
+ , N1
+ , N2
+ >::type >::type
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less_equal, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, less_equal)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct less_equal_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ {
+ BOOST_STATIC_CONSTANT(bool, value =
+ ( BOOST_MPL_AUX_VALUE_WKND(N1)::value <=
+ BOOST_MPL_AUX_VALUE_WKND(N2)::value )
+ );
+ typedef bool_<value> type;
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc60/list.hpp b/boost/boost/mpl/aux_/preprocessed/msvc60/list.hpp
new file mode 100644
index 00000000000..e5ea456c9e2
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc60/list.hpp
@@ -0,0 +1,556 @@
+
+// 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.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< int N >
+struct list_chooser;
+
+}
+
+namespace aux {
+
+template<>
+struct list_chooser<0>
+{
+ 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 result_
+ {
+ typedef list0<
+
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<1>
+{
+ 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 result_
+ {
+ typedef typename list1<
+ T0
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<2>
+{
+ 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 result_
+ {
+ typedef typename list2<
+ T0, T1
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<3>
+{
+ 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 result_
+ {
+ typedef typename list3<
+ T0, T1, T2
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<4>
+{
+ 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 result_
+ {
+ typedef typename list4<
+ T0, T1, T2, T3
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<5>
+{
+ 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 result_
+ {
+ typedef typename list5<
+ T0, T1, T2, T3, T4
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<6>
+{
+ 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 result_
+ {
+ typedef typename list6<
+ T0, T1, T2, T3, T4, T5
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<7>
+{
+ 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 result_
+ {
+ typedef typename list7<
+ T0, T1, T2, T3, T4, T5, T6
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<8>
+{
+ 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 result_
+ {
+ typedef typename list8<
+ T0, T1, T2, T3, T4, T5, T6, T7
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<9>
+{
+ 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 result_
+ {
+ typedef typename list9<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<10>
+{
+ 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 result_
+ {
+ typedef typename list10<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<11>
+{
+ 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 result_
+ {
+ typedef typename list11<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<12>
+{
+ 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 result_
+ {
+ typedef typename list12<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<13>
+{
+ 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 result_
+ {
+ typedef typename list13<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<14>
+{
+ 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 result_
+ {
+ typedef typename list14<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<15>
+{
+ 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 result_
+ {
+ typedef typename list15<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<16>
+{
+ 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 result_
+ {
+ typedef typename list16<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<17>
+{
+ 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 result_
+ {
+ typedef typename list17<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<18>
+{
+ 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 result_
+ {
+ typedef typename list18<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<19>
+{
+ 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 result_
+ {
+ typedef typename list19<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<20>
+{
+ 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 result_
+ {
+ typedef typename list20<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< typename T >
+struct is_list_arg
+{
+ BOOST_STATIC_CONSTANT(bool, value = true);
+};
+
+template<>
+struct is_list_arg<na>
+{
+ BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+template<
+ 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 list_count_args
+{
+ BOOST_STATIC_CONSTANT(int, value =
+ is_list_arg<T1>::value + is_list_arg<T2>::value
+ + is_list_arg<T3>::value + is_list_arg<T4>::value
+ + is_list_arg<T5>::value + is_list_arg<T6>::value
+ + is_list_arg<T7>::value + is_list_arg<T8>::value
+ + is_list_arg<T9>::value + is_list_arg<T10>::value
+ + is_list_arg<T11>::value + is_list_arg<T12>::value
+ + is_list_arg<T13>::value + is_list_arg<T14>::value
+ + is_list_arg<T15>::value + is_list_arg<T16>::value
+ + is_list_arg<T17>::value + is_list_arg<T18>::value
+ + is_list_arg<T19>::value + is_list_arg<T20>::value
+ );
+
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ , typename T10, typename T11, typename T12, typename T13, typename T14
+ , typename T15, typename T16, typename T17, typename T18, typename T19
+ >
+struct list_impl
+{
+ typedef aux::list_count_args<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ > arg_num_;
+
+ typedef typename aux::list_chooser< arg_num_::value >
+ ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+} // namespace aux
+
+template<
+ typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+ , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+ , typename T12 = na, typename T13 = na, typename T14 = na
+ , typename T15 = na, typename T16 = na, typename T17 = na
+ , typename T18 = na, typename T19 = na
+ >
+struct list
+ : aux::list_impl<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ >::type
+{
+ typedef typename aux::list_impl<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc60/list_c.hpp b/boost/boost/mpl/aux_/preprocessed/msvc60/list_c.hpp
new file mode 100644
index 00000000000..ab25482f55d
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc60/list_c.hpp
@@ -0,0 +1,534 @@
+
+// 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_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< int N >
+struct list_c_chooser;
+
+}
+
+namespace aux {
+
+template<>
+struct list_c_chooser<0>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list0_c<
+ T
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<1>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list1_c<
+ T, C0
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<2>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list2_c<
+ T, C0, C1
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<3>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list3_c<
+ T, C0, C1, C2
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<4>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list4_c<
+ T, C0, C1, C2, C3
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<5>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list5_c<
+ T, C0, C1, C2, C3, C4
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<6>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list6_c<
+ T, C0, C1, C2, C3, C4, C5
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<7>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list7_c<
+ T, C0, C1, C2, C3, C4, C5, C6
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<8>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list8_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<9>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list9_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<10>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list10_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<11>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list11_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<12>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list12_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<13>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list13_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<14>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list14_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<15>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list15_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<16>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list16_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<17>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list17_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<18>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list18_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<19>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list19_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<20>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list20_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< long C >
+struct is_list_c_arg
+{
+ BOOST_STATIC_CONSTANT(bool, value = true);
+};
+
+template<>
+struct is_list_c_arg<LONG_MAX>
+{
+ BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+template<
+ long C1, long C2, long C3, long C4, long C5, long C6, long C7, long C8
+ , long C9, long C10, long C11, long C12, long C13, long C14, long C15
+ , long C16, long C17, long C18, long C19, long C20
+ >
+struct list_c_count_args
+{
+ BOOST_STATIC_CONSTANT(int, value =
+ is_list_c_arg<C1>::value + is_list_c_arg<C2>::value
+ + is_list_c_arg<C3>::value + is_list_c_arg<C4>::value
+ + is_list_c_arg<C5>::value + is_list_c_arg<C6>::value
+ + is_list_c_arg<C7>::value + is_list_c_arg<C8>::value
+ + is_list_c_arg<C9>::value + is_list_c_arg<C10>::value
+ + is_list_c_arg<C11>::value + is_list_c_arg<C12>::value
+ + is_list_c_arg<C13>::value + is_list_c_arg<C14>::value
+ + is_list_c_arg<C15>::value + is_list_c_arg<C16>::value
+ + is_list_c_arg<C17>::value + is_list_c_arg<C18>::value
+ + is_list_c_arg<C19>::value + is_list_c_arg<C20>::value
+ );
+
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+struct list_c_impl
+{
+ typedef aux::list_c_count_args<
+ C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+ > arg_num_;
+
+ typedef typename aux::list_c_chooser< arg_num_::value >
+ ::template result_< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;
+};
+
+} // namespace aux
+
+template<
+ typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+ , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+ , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+ , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+ , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+ , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+ , long C18 = LONG_MAX, long C19 = LONG_MAX
+ >
+struct list_c
+ : aux::list_c_impl<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+ >::type
+{
+ typedef typename aux::list_c_impl<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+ >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc60/map.hpp b/boost/boost/mpl/aux_/preprocessed/msvc60/map.hpp
new file mode 100644
index 00000000000..970e0b76028
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc60/map.hpp
@@ -0,0 +1,556 @@
+
+// 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/map.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< int N >
+struct map_chooser;
+
+}
+
+namespace aux {
+
+template<>
+struct map_chooser<0>
+{
+ 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 result_
+ {
+ typedef map0<
+
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<1>
+{
+ 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 result_
+ {
+ typedef typename map1<
+ T0
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<2>
+{
+ 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 result_
+ {
+ typedef typename map2<
+ T0, T1
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<3>
+{
+ 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 result_
+ {
+ typedef typename map3<
+ T0, T1, T2
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<4>
+{
+ 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 result_
+ {
+ typedef typename map4<
+ T0, T1, T2, T3
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<5>
+{
+ 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 result_
+ {
+ typedef typename map5<
+ T0, T1, T2, T3, T4
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<6>
+{
+ 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 result_
+ {
+ typedef typename map6<
+ T0, T1, T2, T3, T4, T5
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<7>
+{
+ 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 result_
+ {
+ typedef typename map7<
+ T0, T1, T2, T3, T4, T5, T6
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<8>
+{
+ 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 result_
+ {
+ typedef typename map8<
+ T0, T1, T2, T3, T4, T5, T6, T7
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<9>
+{
+ 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 result_
+ {
+ typedef typename map9<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<10>
+{
+ 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 result_
+ {
+ typedef typename map10<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<11>
+{
+ 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 result_
+ {
+ typedef typename map11<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<12>
+{
+ 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 result_
+ {
+ typedef typename map12<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<13>
+{
+ 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 result_
+ {
+ typedef typename map13<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<14>
+{
+ 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 result_
+ {
+ typedef typename map14<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<15>
+{
+ 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 result_
+ {
+ typedef typename map15<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<16>
+{
+ 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 result_
+ {
+ typedef typename map16<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<17>
+{
+ 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 result_
+ {
+ typedef typename map17<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<18>
+{
+ 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 result_
+ {
+ typedef typename map18<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<19>
+{
+ 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 result_
+ {
+ typedef typename map19<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<20>
+{
+ 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 result_
+ {
+ typedef typename map20<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< typename T >
+struct is_map_arg
+{
+ BOOST_STATIC_CONSTANT(bool, value = true);
+};
+
+template<>
+struct is_map_arg<na>
+{
+ BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+template<
+ 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 map_count_args
+{
+ BOOST_STATIC_CONSTANT(int, value =
+ is_map_arg<T1>::value + is_map_arg<T2>::value
+ + is_map_arg<T3>::value + is_map_arg<T4>::value
+ + is_map_arg<T5>::value + is_map_arg<T6>::value
+ + is_map_arg<T7>::value + is_map_arg<T8>::value
+ + is_map_arg<T9>::value + is_map_arg<T10>::value
+ + is_map_arg<T11>::value + is_map_arg<T12>::value
+ + is_map_arg<T13>::value + is_map_arg<T14>::value
+ + is_map_arg<T15>::value + is_map_arg<T16>::value
+ + is_map_arg<T17>::value + is_map_arg<T18>::value
+ + is_map_arg<T19>::value + is_map_arg<T20>::value
+ );
+
+};
+
+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 map_impl
+{
+ typedef aux::map_count_args<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ > arg_num_;
+
+ typedef typename aux::map_chooser< arg_num_::value >
+ ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+} // namespace aux
+
+template<
+ typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+ , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+ , typename T12 = na, typename T13 = na, typename T14 = na
+ , typename T15 = na, typename T16 = na, typename T17 = na
+ , typename T18 = na, typename T19 = na
+ >
+struct map
+ : aux::map_impl<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ >::type
+{
+ typedef typename aux::map_impl<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc60/minus.hpp b/boost/boost/mpl/aux_/preprocessed/msvc60/minus.hpp
new file mode 100644
index 00000000000..b47f328574d
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc60/minus.hpp
@@ -0,0 +1,148 @@
+
+// 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/minus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+ >
+struct minus_impl
+ : if_c<
+ ( tag1_ > tag2_ )
+ , aux::cast2nd_impl< minus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< minus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct minus_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct minus_impl< na,integral_c_tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct minus_impl< integral_c_tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct minus_tag
+{
+ typedef typename T::tag type;
+};
+
+/// forward declaration
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct minus2;
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct minus
+
+ : if_<
+
+ is_na<N3>
+ , minus2< N1,N2 >
+ , minus<
+ minus2< N1,N2 >
+ , N3, N4, N5
+ >
+ >::type
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , minus
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1
+ , typename N2
+ >
+struct minus2
+ : aux::msvc_eti_base< typename apply_wrap2<
+ minus_impl<
+ typename minus_tag<N1>::type
+ , typename minus_tag<N2>::type
+ >
+ , N1
+ , N2
+ >::type >::type
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, minus2, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, minus)
+
+}}
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< typename T, T n1, T n2 >
+struct minus_wknd
+{
+ BOOST_STATIC_CONSTANT(T, value = (n1 - n2));
+ typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct minus_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+ : aux::minus_wknd<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , N1::value
+ , N2::value
+ >::type
+
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc60/modulus.hpp b/boost/boost/mpl/aux_/preprocessed/msvc60/modulus.hpp
new file mode 100644
index 00000000000..c12b3f9ff6a
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc60/modulus.hpp
@@ -0,0 +1,115 @@
+
+// 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/modulus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+ >
+struct modulus_impl
+ : if_c<
+ ( tag1_ > tag2_ )
+ , aux::cast2nd_impl< modulus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< modulus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct modulus_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct modulus_impl< na,integral_c_tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct modulus_impl< integral_c_tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct modulus_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct modulus
+ : aux::msvc_eti_base< typename apply_wrap2<
+ modulus_impl<
+ typename modulus_tag<N1>::type
+ , typename modulus_tag<N2>::type
+ >
+ , N1
+ , N2
+ >::type >::type
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, modulus, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, modulus)
+
+}}
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< typename T, T n1, T n2 >
+struct modulus_wknd
+{
+ BOOST_STATIC_CONSTANT(T, value = (n1 % n2));
+ typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct modulus_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+ : aux::modulus_wknd<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , N1::value
+ , N2::value
+ >::type
+
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc60/not_equal_to.hpp b/boost/boost/mpl/aux_/preprocessed/msvc60/not_equal_to.hpp
new file mode 100644
index 00000000000..6e56b1e89f1
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc60/not_equal_to.hpp
@@ -0,0 +1,102 @@
+
+// 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/not_equal_to.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+ >
+struct not_equal_to_impl
+ : if_c<
+ ( tag1_ > tag2_ )
+ , aux::cast2nd_impl< not_equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< not_equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct not_equal_to_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct not_equal_to_impl< na,integral_c_tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct not_equal_to_impl< integral_c_tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct not_equal_to_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct not_equal_to
+ : aux::msvc_eti_base< typename apply_wrap2<
+ not_equal_to_impl<
+ typename not_equal_to_tag<N1>::type
+ , typename not_equal_to_tag<N2>::type
+ >
+ , N1
+ , N2
+ >::type >::type
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, not_equal_to, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, not_equal_to)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct not_equal_to_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ {
+ BOOST_STATIC_CONSTANT(bool, value =
+ ( BOOST_MPL_AUX_VALUE_WKND(N1)::value !=
+ BOOST_MPL_AUX_VALUE_WKND(N2)::value )
+ );
+ typedef bool_<value> type;
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc60/or.hpp b/boost/boost/mpl/aux_/preprocessed/msvc60/or.hpp
new file mode 100644
index 00000000000..3f7394e7ccd
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc60/or.hpp
@@ -0,0 +1,73 @@
+
+// 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/or.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< bool C_ > struct or_impl
+{
+ template<
+ typename T1, typename T2, typename T3, typename T4
+ >
+ struct result_
+ : true_
+ {
+ };
+};
+
+template<> struct or_impl<false>
+{
+ template<
+ typename T1, typename T2, typename T3, typename T4
+ >
+ struct result_
+ : or_impl<
+ BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+ >::template result_< T2,T3,T4,false_ >
+ {
+ };
+};
+
+template<>
+struct or_impl<false>
+ ::result_< false_,false_,false_,false_ >
+ : false_
+{
+};
+
+} // namespace aux
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(T1)
+ , typename BOOST_MPL_AUX_NA_PARAM(T2)
+ , typename T3 = false_, typename T4 = false_, typename T5 = false_
+ >
+struct or_
+
+ : aux::or_impl<
+ BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+ >::template result_< T2,T3,T4,T5 >
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , or_
+ , ( T1, T2, T3, T4, T5)
+ )
+};
+
+BOOST_MPL_AUX_NA_SPEC2(
+ 2
+ , 5
+ , or_
+ )
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc60/placeholders.hpp b/boost/boost/mpl/aux_/preprocessed/msvc60/placeholders.hpp
new file mode 100644
index 00000000000..ff97364b9ba
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc60/placeholders.hpp
@@ -0,0 +1,105 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+// Copyright Peter Dimov 2001-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)
+//
+
+// Preprocessed version of "boost/mpl/placeholders.hpp" header
+// -- DO NOT modify by hand!
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg< -1 > _;
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_;
+}
+
+}}
+
+/// agurt, 17/mar/02: one more placeholder for the last 'apply#'
+/// specialization
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<1> _1;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_1)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_1;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<2> _2;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_2)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_2;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<3> _3;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_3)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_3;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<4> _4;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_4)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_4;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<5> _5;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_5)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_5;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<6> _6;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_6)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_6;
+}
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc60/plus.hpp b/boost/boost/mpl/aux_/preprocessed/msvc60/plus.hpp
new file mode 100644
index 00000000000..105233537b4
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc60/plus.hpp
@@ -0,0 +1,148 @@
+
+// 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/plus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+ >
+struct plus_impl
+ : if_c<
+ ( tag1_ > tag2_ )
+ , aux::cast2nd_impl< plus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< plus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct plus_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct plus_impl< na,integral_c_tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct plus_impl< integral_c_tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct plus_tag
+{
+ typedef typename T::tag type;
+};
+
+/// forward declaration
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct plus2;
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct plus
+
+ : if_<
+
+ is_na<N3>
+ , plus2< N1,N2 >
+ , plus<
+ plus2< N1,N2 >
+ , N3, N4, N5
+ >
+ >::type
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , plus
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1
+ , typename N2
+ >
+struct plus2
+ : aux::msvc_eti_base< typename apply_wrap2<
+ plus_impl<
+ typename plus_tag<N1>::type
+ , typename plus_tag<N2>::type
+ >
+ , N1
+ , N2
+ >::type >::type
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, plus2, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, plus)
+
+}}
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< typename T, T n1, T n2 >
+struct plus_wknd
+{
+ BOOST_STATIC_CONSTANT(T, value = (n1 + n2));
+ typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct plus_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+ : aux::plus_wknd<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , N1::value
+ , N2::value
+ >::type
+
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc60/quote.hpp b/boost/boost/mpl/aux_/preprocessed/msvc60/quote.hpp
new file mode 100644
index 00000000000..e7a7f001961
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc60/quote.hpp
@@ -0,0 +1,11 @@
+
+// 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/quote.hpp" header
+// -- DO NOT modify by hand!
+
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc60/reverse_fold_impl.hpp b/boost/boost/mpl/aux_/preprocessed/msvc60/reverse_fold_impl.hpp
new file mode 100644
index 00000000000..adf15b633d9
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc60/reverse_fold_impl.hpp
@@ -0,0 +1,343 @@
+
+// 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/aux_/reverse_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+ long N
+ , typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl;
+
+template< long N >
+struct reverse_fold_chunk;
+
+template<> struct reverse_fold_chunk<0>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef fwd_state0 bkwd_state0;
+ typedef bkwd_state0 state;
+ typedef iter0 iterator;
+ };
+
+ /// ETI workaround
+ template<> struct result_< int,int,int,int,int >
+ {
+ typedef int state;
+ typedef int iterator;
+ };
+
+};
+
+template<> struct reverse_fold_chunk<1>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+
+
+ typedef fwd_state1 bkwd_state1;
+ typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+ typedef bkwd_state0 state;
+ typedef iter1 iterator;
+ };
+
+ /// ETI workaround
+ template<> struct result_< int,int,int,int,int >
+ {
+ typedef int state;
+ typedef int iterator;
+ };
+
+};
+
+template<> struct reverse_fold_chunk<2>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+
+
+ typedef fwd_state2 bkwd_state2;
+ typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+ typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter2 iterator;
+ };
+
+ /// ETI workaround
+ template<> struct result_< int,int,int,int,int >
+ {
+ typedef int state;
+ typedef int iterator;
+ };
+
+};
+
+template<> struct reverse_fold_chunk<3>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+
+
+ typedef fwd_state3 bkwd_state3;
+ typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+ typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+ typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter3 iterator;
+ };
+
+ /// ETI workaround
+ template<> struct result_< int,int,int,int,int >
+ {
+ typedef int state;
+ typedef int iterator;
+ };
+
+};
+
+template<> struct reverse_fold_chunk<4>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef fwd_state4 bkwd_state4;
+ typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
+ typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+ typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+ typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter4 iterator;
+ };
+
+ /// ETI workaround
+ template<> struct result_< int,int,int,int,int >
+ {
+ typedef int state;
+ typedef int iterator;
+ };
+
+};
+
+template< long N >
+struct reverse_fold_chunk
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef reverse_fold_impl<
+ ( (N - 4) < 0 ? 0 : N - 4 )
+ , iter4
+ , Last
+ , fwd_state4
+ , BackwardOp
+ , ForwardOp
+ > nested_chunk;
+
+ typedef typename nested_chunk::state bkwd_state4;
+ typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
+ typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+ typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+ typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef typename nested_chunk::iterator iterator;
+ };
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_step;
+
+template<
+ typename Last
+ , typename State
+ >
+struct reverse_fold_null_step
+{
+ typedef Last iterator;
+ typedef State state;
+};
+
+template<>
+struct reverse_fold_chunk< -1 >
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef typename if_<
+ typename is_same< First,Last >::type
+ , reverse_fold_null_step< Last,State >
+ , reverse_fold_step< First,Last,State,BackwardOp,ForwardOp >
+ >::type res_;
+
+ typedef typename res_::state state;
+ typedef typename res_::iterator iterator;
+ };
+
+ /// ETI workaround
+ template<> struct result_< int,int,int,int,int >
+ {
+ typedef int state;
+ typedef int iterator;
+ };
+
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_step
+{
+ typedef reverse_fold_chunk< -1 >::template result_<
+ typename mpl::next<First>::type
+ , Last
+ , typename apply2<ForwardOp,State, typename deref<First>::type>::type
+ , BackwardOp
+ , ForwardOp
+ > nested_step;
+
+ typedef typename apply2<
+ BackwardOp
+ , typename nested_step::state
+ , typename deref<First>::type
+ >::type state;
+
+ typedef typename nested_step::iterator iterator;
+};
+
+template<
+ long N
+ , typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl
+ : reverse_fold_chunk<N>
+ ::template result_< First,Last,State,BackwardOp,ForwardOp >
+{
+};
+
+}}}
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc60/reverse_iter_fold_impl.hpp b/boost/boost/mpl/aux_/preprocessed/msvc60/reverse_iter_fold_impl.hpp
new file mode 100644
index 00000000000..208ad97069e
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc60/reverse_iter_fold_impl.hpp
@@ -0,0 +1,343 @@
+
+// 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/aux_/reverse_iter_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+ long N
+ , typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl;
+
+template< long N >
+struct reverse_iter_fold_chunk;
+
+template<> struct reverse_iter_fold_chunk<0>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef fwd_state0 bkwd_state0;
+ typedef bkwd_state0 state;
+ typedef iter0 iterator;
+ };
+
+ /// ETI workaround
+ template<> struct result_< int,int,int,int,int >
+ {
+ typedef int state;
+ typedef int iterator;
+ };
+
+};
+
+template<> struct reverse_iter_fold_chunk<1>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+
+
+ typedef fwd_state1 bkwd_state1;
+ typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+ typedef bkwd_state0 state;
+ typedef iter1 iterator;
+ };
+
+ /// ETI workaround
+ template<> struct result_< int,int,int,int,int >
+ {
+ typedef int state;
+ typedef int iterator;
+ };
+
+};
+
+template<> struct reverse_iter_fold_chunk<2>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+
+
+ typedef fwd_state2 bkwd_state2;
+ typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+ typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter2 iterator;
+ };
+
+ /// ETI workaround
+ template<> struct result_< int,int,int,int,int >
+ {
+ typedef int state;
+ typedef int iterator;
+ };
+
+};
+
+template<> struct reverse_iter_fold_chunk<3>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+
+
+ typedef fwd_state3 bkwd_state3;
+ typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+ typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+ typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter3 iterator;
+ };
+
+ /// ETI workaround
+ template<> struct result_< int,int,int,int,int >
+ {
+ typedef int state;
+ typedef int iterator;
+ };
+
+};
+
+template<> struct reverse_iter_fold_chunk<4>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef fwd_state4 bkwd_state4;
+ typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;
+ typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+ typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+ typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter4 iterator;
+ };
+
+ /// ETI workaround
+ template<> struct result_< int,int,int,int,int >
+ {
+ typedef int state;
+ typedef int iterator;
+ };
+
+};
+
+template< long N >
+struct reverse_iter_fold_chunk
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef reverse_iter_fold_impl<
+ ( (N - 4) < 0 ? 0 : N - 4 )
+ , iter4
+ , Last
+ , fwd_state4
+ , BackwardOp
+ , ForwardOp
+ > nested_chunk;
+
+ typedef typename nested_chunk::state bkwd_state4;
+ typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;
+ typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+ typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+ typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef typename nested_chunk::iterator iterator;
+ };
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_step;
+
+template<
+ typename Last
+ , typename State
+ >
+struct reverse_iter_fold_null_step
+{
+ typedef Last iterator;
+ typedef State state;
+};
+
+template<>
+struct reverse_iter_fold_chunk< -1 >
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef typename if_<
+ typename is_same< First,Last >::type
+ , reverse_iter_fold_null_step< Last,State >
+ , reverse_iter_fold_step< First,Last,State,BackwardOp,ForwardOp >
+ >::type res_;
+
+ typedef typename res_::state state;
+ typedef typename res_::iterator iterator;
+ };
+
+ /// ETI workaround
+ template<> struct result_< int,int,int,int,int >
+ {
+ typedef int state;
+ typedef int iterator;
+ };
+
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_step
+{
+ typedef reverse_iter_fold_chunk< -1 >::template result_<
+ typename mpl::next<First>::type
+ , Last
+ , typename apply2< ForwardOp,State,First >::type
+ , BackwardOp
+ , ForwardOp
+ > nested_step;
+
+ typedef typename apply2<
+ BackwardOp
+ , typename nested_step::state
+ , First
+ >::type state;
+
+ typedef typename nested_step::iterator iterator;
+};
+
+template<
+ long N
+ , typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl
+ : reverse_iter_fold_chunk<N>
+ ::template result_< First,Last,State,BackwardOp,ForwardOp >
+{
+};
+
+}}}
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc60/set.hpp b/boost/boost/mpl/aux_/preprocessed/msvc60/set.hpp
new file mode 100644
index 00000000000..95aaa5cbdfa
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc60/set.hpp
@@ -0,0 +1,556 @@
+
+// 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/set.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< int N >
+struct set_chooser;
+
+}
+
+namespace aux {
+
+template<>
+struct set_chooser<0>
+{
+ 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 result_
+ {
+ typedef set0<
+
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<1>
+{
+ 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 result_
+ {
+ typedef typename set1<
+ T0
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<2>
+{
+ 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 result_
+ {
+ typedef typename set2<
+ T0, T1
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<3>
+{
+ 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 result_
+ {
+ typedef typename set3<
+ T0, T1, T2
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<4>
+{
+ 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 result_
+ {
+ typedef typename set4<
+ T0, T1, T2, T3
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<5>
+{
+ 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 result_
+ {
+ typedef typename set5<
+ T0, T1, T2, T3, T4
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<6>
+{
+ 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 result_
+ {
+ typedef typename set6<
+ T0, T1, T2, T3, T4, T5
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<7>
+{
+ 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 result_
+ {
+ typedef typename set7<
+ T0, T1, T2, T3, T4, T5, T6
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<8>
+{
+ 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 result_
+ {
+ typedef typename set8<
+ T0, T1, T2, T3, T4, T5, T6, T7
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<9>
+{
+ 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 result_
+ {
+ typedef typename set9<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<10>
+{
+ 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 result_
+ {
+ typedef typename set10<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<11>
+{
+ 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 result_
+ {
+ typedef typename set11<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<12>
+{
+ 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 result_
+ {
+ typedef typename set12<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<13>
+{
+ 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 result_
+ {
+ typedef typename set13<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<14>
+{
+ 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 result_
+ {
+ typedef typename set14<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<15>
+{
+ 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 result_
+ {
+ typedef typename set15<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<16>
+{
+ 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 result_
+ {
+ typedef typename set16<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<17>
+{
+ 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 result_
+ {
+ typedef typename set17<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<18>
+{
+ 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 result_
+ {
+ typedef typename set18<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<19>
+{
+ 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 result_
+ {
+ typedef typename set19<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<20>
+{
+ 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 result_
+ {
+ typedef typename set20<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< typename T >
+struct is_set_arg
+{
+ BOOST_STATIC_CONSTANT(bool, value = true);
+};
+
+template<>
+struct is_set_arg<na>
+{
+ BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+template<
+ 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 set_count_args
+{
+ BOOST_STATIC_CONSTANT(int, value =
+ is_set_arg<T1>::value + is_set_arg<T2>::value
+ + is_set_arg<T3>::value + is_set_arg<T4>::value
+ + is_set_arg<T5>::value + is_set_arg<T6>::value
+ + is_set_arg<T7>::value + is_set_arg<T8>::value
+ + is_set_arg<T9>::value + is_set_arg<T10>::value
+ + is_set_arg<T11>::value + is_set_arg<T12>::value
+ + is_set_arg<T13>::value + is_set_arg<T14>::value
+ + is_set_arg<T15>::value + is_set_arg<T16>::value
+ + is_set_arg<T17>::value + is_set_arg<T18>::value
+ + is_set_arg<T19>::value + is_set_arg<T20>::value
+ );
+
+};
+
+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 set_impl
+{
+ typedef aux::set_count_args<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ > arg_num_;
+
+ typedef typename aux::set_chooser< arg_num_::value >
+ ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+} // namespace aux
+
+template<
+ typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+ , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+ , typename T12 = na, typename T13 = na, typename T14 = na
+ , typename T15 = na, typename T16 = na, typename T17 = na
+ , typename T18 = na, typename T19 = na
+ >
+struct set
+ : aux::set_impl<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ >::type
+{
+ typedef typename aux::set_impl<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc60/set_c.hpp b/boost/boost/mpl/aux_/preprocessed/msvc60/set_c.hpp
new file mode 100644
index 00000000000..1ff34f9032a
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc60/set_c.hpp
@@ -0,0 +1,534 @@
+
+// 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/set_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< int N >
+struct set_c_chooser;
+
+}
+
+namespace aux {
+
+template<>
+struct set_c_chooser<0>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set0_c<
+ T
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<1>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set1_c<
+ T, C0
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<2>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set2_c<
+ T, C0, C1
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<3>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set3_c<
+ T, C0, C1, C2
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<4>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set4_c<
+ T, C0, C1, C2, C3
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<5>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set5_c<
+ T, C0, C1, C2, C3, C4
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<6>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set6_c<
+ T, C0, C1, C2, C3, C4, C5
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<7>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set7_c<
+ T, C0, C1, C2, C3, C4, C5, C6
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<8>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set8_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<9>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set9_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<10>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set10_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<11>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set11_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<12>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set12_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<13>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set13_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<14>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set14_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<15>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set15_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<16>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set16_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<17>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set17_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<18>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set18_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<19>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set19_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<20>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set20_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< long C >
+struct is_set_c_arg
+{
+ BOOST_STATIC_CONSTANT(bool, value = true);
+};
+
+template<>
+struct is_set_c_arg<LONG_MAX>
+{
+ BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+template<
+ long C1, long C2, long C3, long C4, long C5, long C6, long C7, long C8
+ , long C9, long C10, long C11, long C12, long C13, long C14, long C15
+ , long C16, long C17, long C18, long C19, long C20
+ >
+struct set_c_count_args
+{
+ BOOST_STATIC_CONSTANT(int, value =
+ is_set_c_arg<C1>::value + is_set_c_arg<C2>::value
+ + is_set_c_arg<C3>::value + is_set_c_arg<C4>::value
+ + is_set_c_arg<C5>::value + is_set_c_arg<C6>::value
+ + is_set_c_arg<C7>::value + is_set_c_arg<C8>::value
+ + is_set_c_arg<C9>::value + is_set_c_arg<C10>::value
+ + is_set_c_arg<C11>::value + is_set_c_arg<C12>::value
+ + is_set_c_arg<C13>::value + is_set_c_arg<C14>::value
+ + is_set_c_arg<C15>::value + is_set_c_arg<C16>::value
+ + is_set_c_arg<C17>::value + is_set_c_arg<C18>::value
+ + is_set_c_arg<C19>::value + is_set_c_arg<C20>::value
+ );
+
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+struct set_c_impl
+{
+ typedef aux::set_c_count_args<
+ C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+ > arg_num_;
+
+ typedef typename aux::set_c_chooser< arg_num_::value >
+ ::template result_< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;
+};
+
+} // namespace aux
+
+template<
+ typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+ , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+ , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+ , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+ , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+ , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+ , long C18 = LONG_MAX, long C19 = LONG_MAX
+ >
+struct set_c
+ : aux::set_c_impl<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+ >::type
+{
+ typedef typename aux::set_c_impl<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+ >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc60/shift_left.hpp b/boost/boost/mpl/aux_/preprocessed/msvc60/shift_left.hpp
new file mode 100644
index 00000000000..3861ca1db18
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc60/shift_left.hpp
@@ -0,0 +1,114 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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)
+//
+
+// Preprocessed version of "boost/mpl/shift_left.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+ >
+struct shift_left_impl
+ : if_c<
+ ( tag1_ > tag2_ )
+ , aux::cast2nd_impl< shift_left_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< shift_left_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct shift_left_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct shift_left_impl< na,integral_c_tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct shift_left_impl< integral_c_tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct shift_left_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct shift_left
+ : aux::msvc_eti_base< typename apply_wrap2<
+ shift_left_impl<
+ typename shift_left_tag<N1>::type
+ , typename shift_left_tag<N2>::type
+ >
+ , N1
+ , N2
+ >::type >::type
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_left, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_left)
+
+}}
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< typename T, typename Shift, T n, Shift s >
+struct shift_left_wknd
+{
+ BOOST_STATIC_CONSTANT(T, value = (n << s));
+ typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct shift_left_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N, typename S > struct apply
+ : aux::shift_left_wknd<
+ typename N::value_type
+ , typename S::value_type
+ , N::value
+ , S::value
+ >::type
+
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc60/shift_right.hpp b/boost/boost/mpl/aux_/preprocessed/msvc60/shift_right.hpp
new file mode 100644
index 00000000000..24ea0948e7b
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc60/shift_right.hpp
@@ -0,0 +1,114 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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)
+//
+
+// Preprocessed version of "boost/mpl/shift_right.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+ >
+struct shift_right_impl
+ : if_c<
+ ( tag1_ > tag2_ )
+ , aux::cast2nd_impl< shift_right_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< shift_right_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct shift_right_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct shift_right_impl< na,integral_c_tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct shift_right_impl< integral_c_tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct shift_right_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct shift_right
+ : aux::msvc_eti_base< typename apply_wrap2<
+ shift_right_impl<
+ typename shift_right_tag<N1>::type
+ , typename shift_right_tag<N2>::type
+ >
+ , N1
+ , N2
+ >::type >::type
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_right, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_right)
+
+}}
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< typename T, typename Shift, T n, Shift s >
+struct shift_right_wknd
+{
+ BOOST_STATIC_CONSTANT(T, value = (n >> s));
+ typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct shift_right_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N, typename S > struct apply
+ : aux::shift_right_wknd<
+ typename N::value_type
+ , typename S::value_type
+ , N::value
+ , S::value
+ >::type
+
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc60/template_arity.hpp b/boost/boost/mpl/aux_/preprocessed/msvc60/template_arity.hpp
new file mode 100644
index 00000000000..16687713492
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc60/template_arity.hpp
@@ -0,0 +1,46 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/aux_/template_arity.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+template< bool >
+struct template_arity_impl
+{
+ template< typename F > struct result_
+ : mpl::int_< -1 >
+ {
+ };
+};
+
+template<>
+struct template_arity_impl<true>
+{
+ template< typename F > struct result_
+ : F::arity
+ {
+ };
+};
+
+template< typename F >
+struct template_arity
+ : template_arity_impl< ::boost::mpl::aux::has_rebind<F>::value >
+ ::template result_<F>
+{
+};
+
+template<>
+struct template_arity<int>
+ : mpl::int_< -1 >
+{
+};
+
+}}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc60/times.hpp b/boost/boost/mpl/aux_/preprocessed/msvc60/times.hpp
new file mode 100644
index 00000000000..dee7fd44275
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc60/times.hpp
@@ -0,0 +1,148 @@
+
+// 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/times.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+ >
+struct times_impl
+ : if_c<
+ ( tag1_ > tag2_ )
+ , aux::cast2nd_impl< times_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< times_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct times_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct times_impl< na,integral_c_tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct times_impl< integral_c_tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct times_tag
+{
+ typedef typename T::tag type;
+};
+
+/// forward declaration
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct times2;
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct times
+
+ : if_<
+
+ is_na<N3>
+ , times2< N1,N2 >
+ , times<
+ times2< N1,N2 >
+ , N3, N4, N5
+ >
+ >::type
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , times
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1
+ , typename N2
+ >
+struct times2
+ : aux::msvc_eti_base< typename apply_wrap2<
+ times_impl<
+ typename times_tag<N1>::type
+ , typename times_tag<N2>::type
+ >
+ , N1
+ , N2
+ >::type >::type
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, times2, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, times)
+
+}}
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< typename T, T n1, T n2 >
+struct times_wknd
+{
+ BOOST_STATIC_CONSTANT(T, value = (n1 * n2));
+ typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct times_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+ : aux::times_wknd<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , N1::value
+ , N2::value
+ >::type
+
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc60/unpack_args.hpp b/boost/boost/mpl/aux_/preprocessed/msvc60/unpack_args.hpp
new file mode 100644
index 00000000000..26533dd4236
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc60/unpack_args.hpp
@@ -0,0 +1,109 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/unpack_args.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template< BOOST_MPL_AUX_NTTP_DECL(int, size) > struct unpack_args_impl
+{
+ template< typename F, typename Args > struct apply;
+};
+
+template<> struct unpack_args_impl<0>
+{
+ template< typename F, typename Args > struct apply
+ : apply0<
+ F
+ >
+ {
+ };
+};
+
+template<> struct unpack_args_impl<1>
+{
+ template< typename F, typename Args > struct apply
+ : apply1<
+ F
+ , typename at_c< Args,0 >::type
+ >
+ {
+ };
+};
+
+template<> struct unpack_args_impl<2>
+{
+ template< typename F, typename Args > struct apply
+ : apply2<
+ F
+ , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+ >
+ {
+ };
+};
+
+template<> struct unpack_args_impl<3>
+{
+ template< typename F, typename Args > struct apply
+ : apply3<
+ F
+ , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+ , typename at_c< Args,2 >::type
+ >
+ {
+ };
+};
+
+template<> struct unpack_args_impl<4>
+{
+ template< typename F, typename Args > struct apply
+ : apply4<
+ F
+ , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+ , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type
+ >
+ {
+ };
+};
+
+template<> struct unpack_args_impl<5>
+{
+ template< typename F, typename Args > struct apply
+ : apply5<
+ F
+ , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+ , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type
+ , typename at_c< Args,4 >::type
+ >
+ {
+ };
+};
+
+}
+
+template<
+ typename F
+ >
+struct unpack_args
+{
+ template< typename Args > struct apply
+
+ : aux::unpack_args_impl< size<Args>::value >
+ ::template apply< F,Args >
+
+ {
+ };
+};
+
+BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args)
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc60/vector.hpp b/boost/boost/mpl/aux_/preprocessed/msvc60/vector.hpp
new file mode 100644
index 00000000000..a6c7b6219a6
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc60/vector.hpp
@@ -0,0 +1,556 @@
+
+// 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/vector.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< int N >
+struct vector_chooser;
+
+}
+
+namespace aux {
+
+template<>
+struct vector_chooser<0>
+{
+ 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 result_
+ {
+ typedef vector0<
+
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<1>
+{
+ 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 result_
+ {
+ typedef typename vector1<
+ T0
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<2>
+{
+ 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 result_
+ {
+ typedef typename vector2<
+ T0, T1
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<3>
+{
+ 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 result_
+ {
+ typedef typename vector3<
+ T0, T1, T2
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<4>
+{
+ 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 result_
+ {
+ typedef typename vector4<
+ T0, T1, T2, T3
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<5>
+{
+ 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 result_
+ {
+ typedef typename vector5<
+ T0, T1, T2, T3, T4
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<6>
+{
+ 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 result_
+ {
+ typedef typename vector6<
+ T0, T1, T2, T3, T4, T5
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<7>
+{
+ 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 result_
+ {
+ typedef typename vector7<
+ T0, T1, T2, T3, T4, T5, T6
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<8>
+{
+ 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 result_
+ {
+ typedef typename vector8<
+ T0, T1, T2, T3, T4, T5, T6, T7
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<9>
+{
+ 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 result_
+ {
+ typedef typename vector9<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<10>
+{
+ 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 result_
+ {
+ typedef typename vector10<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<11>
+{
+ 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 result_
+ {
+ typedef typename vector11<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<12>
+{
+ 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 result_
+ {
+ typedef typename vector12<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<13>
+{
+ 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 result_
+ {
+ typedef typename vector13<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<14>
+{
+ 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 result_
+ {
+ typedef typename vector14<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<15>
+{
+ 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 result_
+ {
+ typedef typename vector15<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<16>
+{
+ 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 result_
+ {
+ typedef typename vector16<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<17>
+{
+ 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 result_
+ {
+ typedef typename vector17<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<18>
+{
+ 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 result_
+ {
+ typedef typename vector18<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<19>
+{
+ 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 result_
+ {
+ typedef typename vector19<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<20>
+{
+ 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 result_
+ {
+ typedef typename vector20<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< typename T >
+struct is_vector_arg
+{
+ BOOST_STATIC_CONSTANT(bool, value = true);
+};
+
+template<>
+struct is_vector_arg<na>
+{
+ BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+template<
+ 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 vector_count_args
+{
+ BOOST_STATIC_CONSTANT(int, value =
+ is_vector_arg<T1>::value + is_vector_arg<T2>::value
+ + is_vector_arg<T3>::value + is_vector_arg<T4>::value
+ + is_vector_arg<T5>::value + is_vector_arg<T6>::value
+ + is_vector_arg<T7>::value + is_vector_arg<T8>::value
+ + is_vector_arg<T9>::value + is_vector_arg<T10>::value
+ + is_vector_arg<T11>::value + is_vector_arg<T12>::value
+ + is_vector_arg<T13>::value + is_vector_arg<T14>::value
+ + is_vector_arg<T15>::value + is_vector_arg<T16>::value
+ + is_vector_arg<T17>::value + is_vector_arg<T18>::value
+ + is_vector_arg<T19>::value + is_vector_arg<T20>::value
+ );
+
+};
+
+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 vector_impl
+{
+ typedef aux::vector_count_args<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ > arg_num_;
+
+ typedef typename aux::vector_chooser< arg_num_::value >
+ ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+} // namespace aux
+
+template<
+ typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+ , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+ , typename T12 = na, typename T13 = na, typename T14 = na
+ , typename T15 = na, typename T16 = na, typename T17 = na
+ , typename T18 = na, typename T19 = na
+ >
+struct vector
+ : aux::vector_impl<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ >::type
+{
+ typedef typename aux::vector_impl<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc60/vector_c.hpp b/boost/boost/mpl/aux_/preprocessed/msvc60/vector_c.hpp
new file mode 100644
index 00000000000..c522d0826ff
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc60/vector_c.hpp
@@ -0,0 +1,534 @@
+
+// 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/vector_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< int N >
+struct vector_c_chooser;
+
+}
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<0>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector0_c<
+ T
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<1>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector1_c<
+ T, T(C0)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<2>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector2_c<
+ T, T(C0), T(C1)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<3>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector3_c<
+ T, T(C0), T(C1), T(C2)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<4>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector4_c<
+ T, T(C0), T(C1), T(C2), T(C3)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<5>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector5_c<
+ T, T(C0), T(C1), T(C2), T(C3), T(C4)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<6>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector6_c<
+ T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<7>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector7_c<
+ T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<8>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector8_c<
+ T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<9>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector9_c<
+ T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<10>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector10_c<
+ T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<11>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector11_c<
+ T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<12>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector12_c<
+ 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)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<13>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector13_c<
+ 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)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<14>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector14_c<
+ 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)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<15>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector15_c<
+ 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)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<16>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector16_c<
+ 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)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<17>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector17_c<
+ 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)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<18>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector18_c<
+ 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)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<19>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector19_c<
+ 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)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<20>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector20_c<
+ 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)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< long C >
+struct is_vector_c_arg
+{
+ BOOST_STATIC_CONSTANT(bool, value = true);
+};
+
+template<>
+struct is_vector_c_arg<LONG_MAX>
+{
+ BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+template<
+ long C1, long C2, long C3, long C4, long C5, long C6, long C7, long C8
+ , long C9, long C10, long C11, long C12, long C13, long C14, long C15
+ , long C16, long C17, long C18, long C19, long C20
+ >
+struct vector_c_count_args
+{
+ BOOST_STATIC_CONSTANT(int, value =
+ is_vector_c_arg<C1>::value + is_vector_c_arg<C2>::value
+ + is_vector_c_arg<C3>::value + is_vector_c_arg<C4>::value
+ + is_vector_c_arg<C5>::value + is_vector_c_arg<C6>::value
+ + is_vector_c_arg<C7>::value + is_vector_c_arg<C8>::value
+ + is_vector_c_arg<C9>::value + is_vector_c_arg<C10>::value
+ + is_vector_c_arg<C11>::value + is_vector_c_arg<C12>::value
+ + is_vector_c_arg<C13>::value + is_vector_c_arg<C14>::value
+ + is_vector_c_arg<C15>::value + is_vector_c_arg<C16>::value
+ + is_vector_c_arg<C17>::value + is_vector_c_arg<C18>::value
+ + is_vector_c_arg<C19>::value + is_vector_c_arg<C20>::value
+ );
+
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+struct vector_c_impl
+{
+ typedef aux::vector_c_count_args<
+ C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+ > arg_num_;
+
+ typedef typename aux::vector_c_chooser< arg_num_::value >
+ ::template result_< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;
+};
+
+} // namespace aux
+
+template<
+ typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+ , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+ , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+ , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+ , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+ , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+ , long C18 = LONG_MAX, long C19 = LONG_MAX
+ >
+struct vector_c
+ : aux::vector_c_impl<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+ >::type
+{
+ typedef typename aux::vector_c_impl<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+ >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc70/advance_backward.hpp b/boost/boost/mpl/aux_/preprocessed/msvc70/advance_backward.hpp
new file mode 100644
index 00000000000..26de94cea1a
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc70/advance_backward.hpp
@@ -0,0 +1,97 @@
+
+// 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/aux_/advance_backward.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+template< long N > struct advance_backward;
+template<>
+struct advance_backward<0>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef iter0 type;
+ };
+};
+
+template<>
+struct advance_backward<1>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename prior<iter0>::type iter1;
+ typedef iter1 type;
+ };
+};
+
+template<>
+struct advance_backward<2>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename prior<iter0>::type iter1;
+ typedef typename prior<iter1>::type iter2;
+ typedef iter2 type;
+ };
+};
+
+template<>
+struct advance_backward<3>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename prior<iter0>::type iter1;
+ typedef typename prior<iter1>::type iter2;
+ typedef typename prior<iter2>::type iter3;
+ typedef iter3 type;
+ };
+};
+
+template<>
+struct advance_backward<4>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename prior<iter0>::type iter1;
+ typedef typename prior<iter1>::type iter2;
+ typedef typename prior<iter2>::type iter3;
+ typedef typename prior<iter3>::type iter4;
+ typedef iter4 type;
+ };
+};
+
+template< long N >
+struct advance_backward
+{
+ template< typename Iterator > struct apply
+ {
+ typedef typename apply_wrap1<
+ advance_backward<4>
+ , Iterator
+ >::type chunk_result_;
+
+ typedef typename apply_wrap1<
+ advance_backward<(
+ (N - 4) < 0
+ ? 0
+ : N - 4
+ )>
+ , chunk_result_
+ >::type type;
+ };
+};
+
+}}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc70/advance_forward.hpp b/boost/boost/mpl/aux_/preprocessed/msvc70/advance_forward.hpp
new file mode 100644
index 00000000000..b137cc72af1
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc70/advance_forward.hpp
@@ -0,0 +1,97 @@
+
+// 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/aux_/advance_forward.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+template< long N > struct advance_forward;
+template<>
+struct advance_forward<0>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef iter0 type;
+ };
+};
+
+template<>
+struct advance_forward<1>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename next<iter0>::type iter1;
+ typedef iter1 type;
+ };
+};
+
+template<>
+struct advance_forward<2>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename next<iter0>::type iter1;
+ typedef typename next<iter1>::type iter2;
+ typedef iter2 type;
+ };
+};
+
+template<>
+struct advance_forward<3>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename next<iter0>::type iter1;
+ typedef typename next<iter1>::type iter2;
+ typedef typename next<iter2>::type iter3;
+ typedef iter3 type;
+ };
+};
+
+template<>
+struct advance_forward<4>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename next<iter0>::type iter1;
+ typedef typename next<iter1>::type iter2;
+ typedef typename next<iter2>::type iter3;
+ typedef typename next<iter3>::type iter4;
+ typedef iter4 type;
+ };
+};
+
+template< long N >
+struct advance_forward
+{
+ template< typename Iterator > struct apply
+ {
+ typedef typename apply_wrap1<
+ advance_forward<4>
+ , Iterator
+ >::type chunk_result_;
+
+ typedef typename apply_wrap1<
+ advance_forward<(
+ (N - 4) < 0
+ ? 0
+ : N - 4
+ )>
+ , chunk_result_
+ >::type type;
+ };
+};
+
+}}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc70/and.hpp b/boost/boost/mpl/aux_/preprocessed/msvc70/and.hpp
new file mode 100644
index 00000000000..e58640a41c6
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc70/and.hpp
@@ -0,0 +1,71 @@
+
+// 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/and.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< bool C_ > struct and_impl
+{
+ template<
+ typename T1, typename T2, typename T3, typename T4
+ >
+ struct result_
+ : false_
+ {
+ };
+};
+
+template<> struct and_impl<true>
+{
+ template<
+ typename T1, typename T2, typename T3, typename T4
+ >
+ struct result_
+ : and_impl<
+ BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+ >::template result_< T2,T3,T4,true_ >
+ {
+ };
+
+ template<> struct result_< true_,true_,true_,true_ >
+ : true_
+ {
+ };
+};
+
+} // namespace aux
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(T1)
+ , typename BOOST_MPL_AUX_NA_PARAM(T2)
+ , typename T3 = true_, typename T4 = true_, typename T5 = true_
+ >
+struct and_
+
+ : aux::and_impl<
+ BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+ >::template result_< T2,T3,T4,T5 >
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , and_
+ , ( T1, T2, T3, T4, T5)
+ )
+};
+
+BOOST_MPL_AUX_NA_SPEC2(
+ 2
+ , 5
+ , and_
+ )
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc70/apply.hpp b/boost/boost/mpl/aux_/preprocessed/msvc70/apply.hpp
new file mode 100644
index 00000000000..d46d030968c
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc70/apply.hpp
@@ -0,0 +1,160 @@
+
+// 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/apply.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename F
+ >
+struct apply0
+
+ : apply_wrap0<
+ typename lambda<F>::type
+
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 1
+ , apply0
+ , (F )
+ )
+};
+
+/// workaround for ETI bug
+template<>
+struct apply0<int>
+{
+ typedef int type;
+};
+
+template<
+ typename F, typename T1
+ >
+struct apply1
+
+ : apply_wrap1<
+ typename lambda<F>::type
+ , T1
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 2
+ , apply1
+ , (F, T1)
+ )
+};
+
+/// workaround for ETI bug
+template<>
+struct apply1< int,int >
+{
+ typedef int type;
+};
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct apply2
+
+ : apply_wrap2<
+ typename lambda<F>::type
+ , T1, T2
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 3
+ , apply2
+ , (F, T1, T2)
+ )
+};
+
+/// workaround for ETI bug
+template<>
+struct apply2< int,int,int >
+{
+ typedef int type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct apply3
+
+ : apply_wrap3<
+ typename lambda<F>::type
+ , T1, T2, T3
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 4
+ , apply3
+ , (F, T1, T2, T3)
+ )
+};
+
+/// workaround for ETI bug
+template<>
+struct apply3< int,int,int,int >
+{
+ typedef int type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct apply4
+
+ : apply_wrap4<
+ typename lambda<F>::type
+ , T1, T2, T3, T4
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , apply4
+ , (F, T1, T2, T3, T4)
+ )
+};
+
+/// workaround for ETI bug
+template<>
+struct apply4< int,int,int,int,int >
+{
+ typedef int type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct apply5
+
+ : apply_wrap5<
+ typename lambda<F>::type
+ , T1, T2, T3, T4, T5
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 6
+ , apply5
+ , (F, T1, T2, T3, T4, T5)
+ )
+};
+
+/// workaround for ETI bug
+template<>
+struct apply5< int,int,int,int,int,int >
+{
+ typedef int type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc70/apply_fwd.hpp b/boost/boost/mpl/aux_/preprocessed/msvc70/apply_fwd.hpp
new file mode 100644
index 00000000000..f0f86c17668
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc70/apply_fwd.hpp
@@ -0,0 +1,46 @@
+
+// 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/apply_fwd.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename F
+ >
+struct apply0;
+
+template<
+ typename F, typename T1
+ >
+struct apply1;
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct apply2;
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct apply3;
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct apply4;
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct apply5;
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc70/apply_wrap.hpp b/boost/boost/mpl/aux_/preprocessed/msvc70/apply_wrap.hpp
new file mode 100644
index 00000000000..d30751793c1
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc70/apply_wrap.hpp
@@ -0,0 +1,138 @@
+
+// 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/apply_wrap.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename F
+
+ , typename has_apply_ = typename aux::has_apply<F>::type
+
+ >
+struct apply_wrap0
+
+{
+ typedef typename F::template apply<
+
+ >::type type;
+
+};
+
+/// workaround for ETI bug
+template<>
+struct apply_wrap0<int>
+{
+ typedef int type;
+};
+
+template<
+ typename F, typename T1
+
+ >
+struct apply_wrap1
+
+{
+ typedef typename F::template apply<
+ T1
+ >::type type;
+
+};
+
+/// workaround for ETI bug
+template<>
+struct apply_wrap1< int,int >
+{
+ typedef int type;
+};
+
+template<
+ typename F, typename T1, typename T2
+
+ >
+struct apply_wrap2
+
+{
+ typedef typename F::template apply<
+ T1, T2
+ >::type type;
+
+};
+
+/// workaround for ETI bug
+template<>
+struct apply_wrap2< int,int,int >
+{
+ typedef int type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3
+
+ >
+struct apply_wrap3
+
+{
+ typedef typename F::template apply<
+ T1, T2, T3
+ >::type type;
+
+};
+
+/// workaround for ETI bug
+template<>
+struct apply_wrap3< int,int,int,int >
+{
+ typedef int type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+
+ >
+struct apply_wrap4
+
+{
+ typedef typename F::template apply<
+ T1, T2, T3, T4
+ >::type type;
+
+};
+
+/// workaround for ETI bug
+template<>
+struct apply_wrap4< int,int,int,int,int >
+{
+ typedef int type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+
+ >
+struct apply_wrap5
+
+{
+ typedef typename F::template apply<
+ T1, T2, T3, T4, T5
+ >::type type;
+
+};
+
+/// workaround for ETI bug
+template<>
+struct apply_wrap5< int,int,int,int,int,int >
+{
+ typedef int type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc70/arg.hpp b/boost/boost/mpl/aux_/preprocessed/msvc70/arg.hpp
new file mode 100644
index 00000000000..6f2f8a80709
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc70/arg.hpp
@@ -0,0 +1,123 @@
+
+// Copyright Peter Dimov 2001-2002
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/arg.hpp" header
+// -- DO NOT modify by hand!
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+template<> struct arg< -1 >
+{
+ BOOST_STATIC_CONSTANT(int, value = -1);
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ typedef U1 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+template<> struct arg<1>
+{
+ BOOST_STATIC_CONSTANT(int, value = 1);
+ typedef arg<2> next;
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ typedef U1 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+template<> struct arg<2>
+{
+ BOOST_STATIC_CONSTANT(int, value = 2);
+ typedef arg<3> next;
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ typedef U2 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+template<> struct arg<3>
+{
+ BOOST_STATIC_CONSTANT(int, value = 3);
+ typedef arg<4> next;
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ typedef U3 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+template<> struct arg<4>
+{
+ BOOST_STATIC_CONSTANT(int, value = 4);
+ typedef arg<5> next;
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ typedef U4 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+template<> struct arg<5>
+{
+ BOOST_STATIC_CONSTANT(int, value = 5);
+ typedef arg<6> next;
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ typedef U5 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+BOOST_MPL_AUX_NONTYPE_ARITY_SPEC(1,int, arg)
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc70/basic_bind.hpp b/boost/boost/mpl/aux_/preprocessed/msvc70/basic_bind.hpp
new file mode 100644
index 00000000000..4f12a40f044
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc70/basic_bind.hpp
@@ -0,0 +1,328 @@
+
+// Copyright Peter Dimov 2001
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/aux_/basic_bind.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< bool >
+struct resolve_arg_impl
+{
+ template<
+ typename T, typename U1, typename U2, typename U3
+ , typename U4, typename U5
+ >
+ struct result_
+ {
+ typedef T type;
+ };
+};
+
+template<>
+struct resolve_arg_impl<true>
+{
+ template<
+ typename T, typename U1, typename U2, typename U3
+ , typename U4, typename U5
+ >
+ struct result_
+ {
+ typedef typename apply_wrap5<
+ T
+ , U1, U2, U3, U4, U5
+ >::type type;
+ };
+};
+
+template< typename T > struct is_bind_template;
+
+template<
+ typename T, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg
+ : resolve_arg_impl< is_bind_template<T>::value >
+ ::template result_< T,U1,U2,U3,U4,U5 >
+{
+};
+
+template< int arity_ > struct bind_chooser;
+
+aux::no_tag is_bind_helper(...);
+template< typename T > aux::no_tag is_bind_helper(protect<T>*);
+
+template< int N >
+aux::yes_tag is_bind_helper(arg<N>*);
+
+template< bool is_ref_ = true >
+struct is_bind_template_impl
+{
+ template< typename T > struct result_
+ {
+ BOOST_STATIC_CONSTANT(bool, value = false);
+ };
+};
+
+template<>
+struct is_bind_template_impl<false>
+{
+ template< typename T > struct result_
+ {
+ BOOST_STATIC_CONSTANT(bool, value =
+ sizeof(aux::is_bind_helper(static_cast<T*>(0)))
+ == sizeof(aux::yes_tag)
+ );
+ };
+};
+
+template< typename T > struct is_bind_template
+ : is_bind_template_impl< ::boost::detail::is_reference_impl<T>::value >
+ ::template result_<T>
+{
+};
+
+} // namespace aux
+
+template<
+ typename F
+ >
+struct bind0
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+
+ public:
+ typedef typename apply_wrap0<
+ f_
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F
+ >
+aux::yes_tag
+is_bind_helper(bind0<F>*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(1, bind0)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)
+
+template<
+ typename F, typename T1
+ >
+struct bind1
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+
+ public:
+ typedef typename apply_wrap1<
+ f_
+ , typename t1::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1
+ >
+aux::yes_tag
+is_bind_helper(bind1< F,T1 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(2, bind1)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct bind2
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+ typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+
+ public:
+ typedef typename apply_wrap2<
+ f_
+ , typename t1::type, typename t2::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2
+ >
+aux::yes_tag
+is_bind_helper(bind2< F,T1,T2 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(3, bind2)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct bind3
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+ typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+ typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+
+ public:
+ typedef typename apply_wrap3<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+aux::yes_tag
+is_bind_helper(bind3< F,T1,T2,T3 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(4, bind3)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct bind4
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+ typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+ typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+ typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;
+
+ public:
+ typedef typename apply_wrap4<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ , typename t4::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+aux::yes_tag
+is_bind_helper(bind4< F,T1,T2,T3,T4 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct bind5
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+ typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+ typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+ typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;
+ typedef aux::resolve_bind_arg< T5,U1,U2,U3,U4,U5 > t5;
+
+ public:
+ typedef typename apply_wrap5<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ , typename t4::type, typename t5::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+aux::yes_tag
+is_bind_helper(bind5< F,T1,T2,T3,T4,T5 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc70/bind.hpp b/boost/boost/mpl/aux_/preprocessed/msvc70/bind.hpp
new file mode 100644
index 00000000000..53c76e8f2a5
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc70/bind.hpp
@@ -0,0 +1,432 @@
+
+// Copyright Peter Dimov 2001
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/bind.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< bool >
+struct resolve_arg_impl
+{
+ template<
+ typename T, typename U1, typename U2, typename U3
+ , typename U4, typename U5
+ >
+ struct result_
+ {
+ typedef T type;
+ };
+};
+
+template<>
+struct resolve_arg_impl<true>
+{
+ template<
+ typename T, typename U1, typename U2, typename U3
+ , typename U4, typename U5
+ >
+ struct result_
+ {
+ typedef typename apply_wrap5<
+ T
+ , U1, U2, U3, U4, U5
+ >::type type;
+ };
+};
+
+template< typename T > struct is_bind_template;
+
+template<
+ typename T, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg
+ : resolve_arg_impl< is_bind_template<T>::value >
+ ::template result_< T,U1,U2,U3,U4,U5 >
+{
+};
+
+template< typename T >
+struct replace_unnamed_arg_impl
+{
+ template< typename Arg > struct result_
+ {
+ typedef Arg next;
+ typedef T type;
+ };
+};
+
+template<>
+struct replace_unnamed_arg_impl< arg< -1 > >
+{
+ template< typename Arg > struct result_
+ {
+ typedef typename next<Arg>::type next;
+ typedef Arg type;
+ };
+};
+
+template< typename T, typename Arg >
+struct replace_unnamed_arg
+ : replace_unnamed_arg_impl<T>::template result_<Arg>
+{
+};
+
+template< int arity_ > struct bind_chooser;
+
+aux::no_tag is_bind_helper(...);
+template< typename T > aux::no_tag is_bind_helper(protect<T>*);
+
+template< int N >
+aux::yes_tag is_bind_helper(arg<N>*);
+
+template< bool is_ref_ = true >
+struct is_bind_template_impl
+{
+ template< typename T > struct result_
+ {
+ BOOST_STATIC_CONSTANT(bool, value = false);
+ };
+};
+
+template<>
+struct is_bind_template_impl<false>
+{
+ template< typename T > struct result_
+ {
+ BOOST_STATIC_CONSTANT(bool, value =
+ sizeof(aux::is_bind_helper(static_cast<T*>(0)))
+ == sizeof(aux::yes_tag)
+ );
+ };
+};
+
+template< typename T > struct is_bind_template
+ : is_bind_template_impl< ::boost::detail::is_reference_impl<T>::value >
+ ::template result_<T>
+{
+};
+
+} // namespace aux
+
+template<
+ typename F
+ >
+struct bind0
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ public:
+ typedef typename apply_wrap0<
+ f_
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F
+ >
+aux::yes_tag
+is_bind_helper(bind0<F>*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(1, bind0)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)
+
+template<
+ typename F, typename T1
+ >
+struct bind1
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ public:
+ typedef typename apply_wrap1<
+ f_
+ , typename t1::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1
+ >
+aux::yes_tag
+is_bind_helper(bind1< F,T1 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(2, bind1)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct bind2
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ typedef aux::replace_unnamed_arg< T2,n2 > r2;
+ typedef typename r2::type a2;
+ typedef typename r2::next n3;
+ typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+ ///
+ public:
+ typedef typename apply_wrap2<
+ f_
+ , typename t1::type, typename t2::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2
+ >
+aux::yes_tag
+is_bind_helper(bind2< F,T1,T2 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(3, bind2)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct bind3
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ typedef aux::replace_unnamed_arg< T2,n2 > r2;
+ typedef typename r2::type a2;
+ typedef typename r2::next n3;
+ typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+ ///
+ typedef aux::replace_unnamed_arg< T3,n3 > r3;
+ typedef typename r3::type a3;
+ typedef typename r3::next n4;
+ typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+ ///
+ public:
+ typedef typename apply_wrap3<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+aux::yes_tag
+is_bind_helper(bind3< F,T1,T2,T3 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(4, bind3)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct bind4
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ typedef aux::replace_unnamed_arg< T2,n2 > r2;
+ typedef typename r2::type a2;
+ typedef typename r2::next n3;
+ typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+ ///
+ typedef aux::replace_unnamed_arg< T3,n3 > r3;
+ typedef typename r3::type a3;
+ typedef typename r3::next n4;
+ typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+ ///
+ typedef aux::replace_unnamed_arg< T4,n4 > r4;
+ typedef typename r4::type a4;
+ typedef typename r4::next n5;
+ typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
+ ///
+ public:
+ typedef typename apply_wrap4<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ , typename t4::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+aux::yes_tag
+is_bind_helper(bind4< F,T1,T2,T3,T4 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct bind5
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ typedef aux::replace_unnamed_arg< T2,n2 > r2;
+ typedef typename r2::type a2;
+ typedef typename r2::next n3;
+ typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+ ///
+ typedef aux::replace_unnamed_arg< T3,n3 > r3;
+ typedef typename r3::type a3;
+ typedef typename r3::next n4;
+ typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+ ///
+ typedef aux::replace_unnamed_arg< T4,n4 > r4;
+ typedef typename r4::type a4;
+ typedef typename r4::next n5;
+ typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
+ ///
+ typedef aux::replace_unnamed_arg< T5,n5 > r5;
+ typedef typename r5::type a5;
+ typedef typename r5::next n6;
+ typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5;
+ ///
+ public:
+ typedef typename apply_wrap5<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ , typename t4::type, typename t5::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+aux::yes_tag
+is_bind_helper(bind5< F,T1,T2,T3,T4,T5 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc70/bind_fwd.hpp b/boost/boost/mpl/aux_/preprocessed/msvc70/bind_fwd.hpp
new file mode 100644
index 00000000000..022cba34611
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc70/bind_fwd.hpp
@@ -0,0 +1,46 @@
+
+// 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/bind_fwd.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename F
+ >
+struct bind0;
+
+template<
+ typename F, typename T1
+ >
+struct bind1;
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct bind2;
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct bind3;
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct bind4;
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct bind5;
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc70/bitand.hpp b/boost/boost/mpl/aux_/preprocessed/msvc70/bitand.hpp
new file mode 100644
index 00000000000..e54b4ce1d47
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc70/bitand.hpp
@@ -0,0 +1,151 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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)
+//
+
+// Preprocessed version of "boost/mpl/bitand.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+ >
+struct bitand_impl
+ : if_c<
+ ( tag1_ > tag2_ )
+ , aux::cast2nd_impl< bitand_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< bitand_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitand_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct bitand_impl< na,integral_c_tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct bitand_impl< integral_c_tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct bitand_tag
+ : tag< T,na >
+{
+};
+
+/// forward declaration
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct bitand_2;
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct bitand_
+
+ : aux::msvc_eti_base< typename if_<
+
+ is_na<N3>
+ , bitand_2< N1,N2 >
+ , bitand_<
+ bitand_2< N1,N2 >
+ , N3, N4, N5
+ >
+ >::type
+
+ >
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , bitand_
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1
+ , typename N2
+ >
+struct bitand_2
+ : aux::msvc_eti_base< typename apply_wrap2<
+ bitand_impl<
+ typename bitand_tag<N1>::type
+ , typename bitand_tag<N2>::type
+ >
+ , N1
+ , N2
+ >::type >::type
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, bitand_2, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitand_)
+
+}}
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< typename T, T n1, T n2 >
+struct bitand_wknd
+{
+ BOOST_STATIC_CONSTANT(T, value = (n1 & n2));
+ typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct bitand_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+ : aux::bitand_wknd<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , N1::value
+ , N2::value
+ >::type
+
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc70/bitor.hpp b/boost/boost/mpl/aux_/preprocessed/msvc70/bitor.hpp
new file mode 100644
index 00000000000..3b465b332a0
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc70/bitor.hpp
@@ -0,0 +1,151 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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)
+//
+
+// Preprocessed version of "boost/mpl/bitor.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+ >
+struct bitor_impl
+ : if_c<
+ ( tag1_ > tag2_ )
+ , aux::cast2nd_impl< bitor_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< bitor_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitor_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct bitor_impl< na,integral_c_tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct bitor_impl< integral_c_tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct bitor_tag
+ : tag< T,na >
+{
+};
+
+/// forward declaration
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct bitor_2;
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct bitor_
+
+ : aux::msvc_eti_base< typename if_<
+
+ is_na<N3>
+ , bitor_2< N1,N2 >
+ , bitor_<
+ bitor_2< N1,N2 >
+ , N3, N4, N5
+ >
+ >::type
+
+ >
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , bitor_
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1
+ , typename N2
+ >
+struct bitor_2
+ : aux::msvc_eti_base< typename apply_wrap2<
+ bitor_impl<
+ typename bitor_tag<N1>::type
+ , typename bitor_tag<N2>::type
+ >
+ , N1
+ , N2
+ >::type >::type
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, bitor_2, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitor_)
+
+}}
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< typename T, T n1, T n2 >
+struct bitor_wknd
+{
+ BOOST_STATIC_CONSTANT(T, value = (n1 | n2));
+ typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct bitor_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+ : aux::bitor_wknd<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , N1::value
+ , N2::value
+ >::type
+
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc70/bitxor.hpp b/boost/boost/mpl/aux_/preprocessed/msvc70/bitxor.hpp
new file mode 100644
index 00000000000..f7c5d439c81
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc70/bitxor.hpp
@@ -0,0 +1,151 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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)
+//
+
+// Preprocessed version of "boost/mpl/bitxor.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+ >
+struct bitxor_impl
+ : if_c<
+ ( tag1_ > tag2_ )
+ , aux::cast2nd_impl< bitxor_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< bitxor_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitxor_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct bitxor_impl< na,integral_c_tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct bitxor_impl< integral_c_tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct bitxor_tag
+ : tag< T,na >
+{
+};
+
+/// forward declaration
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct bitxor_2;
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct bitxor_
+
+ : aux::msvc_eti_base< typename if_<
+
+ is_na<N3>
+ , bitxor_2< N1,N2 >
+ , bitxor_<
+ bitxor_2< N1,N2 >
+ , N3, N4, N5
+ >
+ >::type
+
+ >
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , bitxor_
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1
+ , typename N2
+ >
+struct bitxor_2
+ : aux::msvc_eti_base< typename apply_wrap2<
+ bitxor_impl<
+ typename bitxor_tag<N1>::type
+ , typename bitxor_tag<N2>::type
+ >
+ , N1
+ , N2
+ >::type >::type
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, bitxor_2, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitxor_)
+
+}}
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< typename T, T n1, T n2 >
+struct bitxor_wknd
+{
+ BOOST_STATIC_CONSTANT(T, value = (n1 ^ n2));
+ typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct bitxor_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+ : aux::bitxor_wknd<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , N1::value
+ , N2::value
+ >::type
+
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc70/deque.hpp b/boost/boost/mpl/aux_/preprocessed/msvc70/deque.hpp
new file mode 100644
index 00000000000..a0445d9dfdd
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc70/deque.hpp
@@ -0,0 +1,556 @@
+
+// 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/deque.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< int N >
+struct deque_chooser;
+
+}
+
+namespace aux {
+
+template<>
+struct deque_chooser<0>
+{
+ 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 result_
+ {
+ typedef vector0<
+
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<1>
+{
+ 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 result_
+ {
+ typedef typename vector1<
+ T0
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<2>
+{
+ 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 result_
+ {
+ typedef typename vector2<
+ T0, T1
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<3>
+{
+ 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 result_
+ {
+ typedef typename vector3<
+ T0, T1, T2
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<4>
+{
+ 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 result_
+ {
+ typedef typename vector4<
+ T0, T1, T2, T3
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<5>
+{
+ 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 result_
+ {
+ typedef typename vector5<
+ T0, T1, T2, T3, T4
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<6>
+{
+ 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 result_
+ {
+ typedef typename vector6<
+ T0, T1, T2, T3, T4, T5
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<7>
+{
+ 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 result_
+ {
+ typedef typename vector7<
+ T0, T1, T2, T3, T4, T5, T6
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<8>
+{
+ 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 result_
+ {
+ typedef typename vector8<
+ T0, T1, T2, T3, T4, T5, T6, T7
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<9>
+{
+ 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 result_
+ {
+ typedef typename vector9<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<10>
+{
+ 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 result_
+ {
+ typedef typename vector10<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<11>
+{
+ 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 result_
+ {
+ typedef typename vector11<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<12>
+{
+ 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 result_
+ {
+ typedef typename vector12<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<13>
+{
+ 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 result_
+ {
+ typedef typename vector13<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<14>
+{
+ 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 result_
+ {
+ typedef typename vector14<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<15>
+{
+ 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 result_
+ {
+ typedef typename vector15<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<16>
+{
+ 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 result_
+ {
+ typedef typename vector16<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<17>
+{
+ 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 result_
+ {
+ typedef typename vector17<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<18>
+{
+ 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 result_
+ {
+ typedef typename vector18<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<19>
+{
+ 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 result_
+ {
+ typedef typename vector19<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<20>
+{
+ 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 result_
+ {
+ typedef typename vector20<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< typename T >
+struct is_deque_arg
+{
+ BOOST_STATIC_CONSTANT(bool, value = true);
+};
+
+template<>
+struct is_deque_arg<na>
+{
+ BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+template<
+ 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 deque_count_args
+{
+ BOOST_STATIC_CONSTANT(int, value =
+ is_deque_arg<T1>::value + is_deque_arg<T2>::value
+ + is_deque_arg<T3>::value + is_deque_arg<T4>::value
+ + is_deque_arg<T5>::value + is_deque_arg<T6>::value
+ + is_deque_arg<T7>::value + is_deque_arg<T8>::value
+ + is_deque_arg<T9>::value + is_deque_arg<T10>::value
+ + is_deque_arg<T11>::value + is_deque_arg<T12>::value
+ + is_deque_arg<T13>::value + is_deque_arg<T14>::value
+ + is_deque_arg<T15>::value + is_deque_arg<T16>::value
+ + is_deque_arg<T17>::value + is_deque_arg<T18>::value
+ + is_deque_arg<T19>::value + is_deque_arg<T20>::value
+ );
+
+};
+
+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 deque_impl
+{
+ typedef aux::deque_count_args<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ > arg_num_;
+
+ typedef typename aux::deque_chooser< arg_num_::value >
+ ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+} // namespace aux
+
+template<
+ typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+ , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+ , typename T12 = na, typename T13 = na, typename T14 = na
+ , typename T15 = na, typename T16 = na, typename T17 = na
+ , typename T18 = na, typename T19 = na
+ >
+struct deque
+ : aux::deque_impl<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ >::type
+{
+ typedef typename aux::deque_impl<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc70/divides.hpp b/boost/boost/mpl/aux_/preprocessed/msvc70/divides.hpp
new file mode 100644
index 00000000000..0c60c4317a3
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc70/divides.hpp
@@ -0,0 +1,150 @@
+
+// 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/divides.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+ >
+struct divides_impl
+ : if_c<
+ ( tag1_ > tag2_ )
+ , aux::cast2nd_impl< divides_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< divides_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct divides_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct divides_impl< na,integral_c_tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct divides_impl< integral_c_tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct divides_tag
+ : tag< T,na >
+{
+};
+
+/// forward declaration
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct divides2;
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct divides
+
+ : aux::msvc_eti_base< typename if_<
+
+ is_na<N3>
+ , divides2< N1,N2 >
+ , divides<
+ divides2< N1,N2 >
+ , N3, N4, N5
+ >
+ >::type
+
+ >
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , divides
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1
+ , typename N2
+ >
+struct divides2
+ : aux::msvc_eti_base< typename apply_wrap2<
+ divides_impl<
+ typename divides_tag<N1>::type
+ , typename divides_tag<N2>::type
+ >
+ , N1
+ , N2
+ >::type >::type
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, divides2, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, divides)
+
+}}
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< typename T, T n1, T n2 >
+struct divides_wknd
+{
+ BOOST_STATIC_CONSTANT(T, value = (n1 / n2));
+ typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct divides_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+ : aux::divides_wknd<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , N1::value
+ , N2::value
+ >::type
+
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc70/equal_to.hpp b/boost/boost/mpl/aux_/preprocessed/msvc70/equal_to.hpp
new file mode 100644
index 00000000000..107912b17f7
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc70/equal_to.hpp
@@ -0,0 +1,102 @@
+
+// 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/equal_to.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+ >
+struct equal_to_impl
+ : if_c<
+ ( tag1_ > tag2_ )
+ , aux::cast2nd_impl< equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct equal_to_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct equal_to_impl< na,integral_c_tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct equal_to_impl< integral_c_tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct equal_to_tag
+ : tag< T,na >
+{
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct equal_to
+ : aux::msvc_eti_base< typename apply_wrap2<
+ equal_to_impl<
+ typename equal_to_tag<N1>::type
+ , typename equal_to_tag<N2>::type
+ >
+ , N1
+ , N2
+ >::type >::type
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, equal_to, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, equal_to)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct equal_to_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ {
+ BOOST_STATIC_CONSTANT(bool, value =
+ ( BOOST_MPL_AUX_VALUE_WKND(N1)::value ==
+ BOOST_MPL_AUX_VALUE_WKND(N2)::value )
+ );
+ typedef bool_<value> type;
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc70/fold_impl.hpp b/boost/boost/mpl/aux_/preprocessed/msvc70/fold_impl.hpp
new file mode 100644
index 00000000000..58066d81f61
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc70/fold_impl.hpp
@@ -0,0 +1,245 @@
+
+// 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/aux_/fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+ int N
+ , typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl;
+
+template< int N >
+struct fold_chunk;
+
+template<> struct fold_chunk<0>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State state0;
+ typedef state0 state;
+ typedef iter0 iterator;
+ };
+};
+
+template<> struct fold_chunk<1>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+
+
+ typedef state1 state;
+ typedef iter1 iterator;
+ };
+};
+
+template<> struct fold_chunk<2>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+
+
+ typedef state2 state;
+ typedef iter2 iterator;
+ };
+};
+
+template<> struct fold_chunk<3>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;
+ typedef typename mpl::next<iter2>::type iter3;
+
+
+ typedef state3 state;
+ typedef iter3 iterator;
+ };
+};
+
+template<> struct fold_chunk<4>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp, state3, typename deref<iter3>::type >::type state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef state4 state;
+ typedef iter4 iterator;
+ };
+};
+
+template< int N >
+struct fold_chunk
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef fold_impl<
+ 4
+ , First
+ , Last
+ , State
+ , ForwardOp
+ > chunk_;
+
+ typedef fold_impl<
+ ( (N - 4) < 0 ? 0 : N - 4 )
+ , typename chunk_::iterator
+ , Last
+ , typename chunk_::state
+ , ForwardOp
+ > res_;
+
+ typedef typename res_::state state;
+ typedef typename res_::iterator iterator;
+ };
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_step;
+
+template<
+ typename Last
+ , typename State
+ >
+struct fold_null_step
+{
+ typedef Last iterator;
+ typedef State state;
+};
+
+template<>
+struct fold_chunk< -1 >
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef typename if_<
+ typename is_same< First,Last >::type
+ , fold_null_step< Last,State >
+ , fold_step< First,Last,State,ForwardOp >
+ >::type res_;
+
+ typedef typename res_::state state;
+ typedef typename res_::iterator iterator;
+ };
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_step
+{
+ typedef fold_chunk< -1 >::template result_<
+ typename mpl::next<First>::type
+ , Last
+ , typename apply2<ForwardOp,State, typename deref<First>::type>::type
+ , ForwardOp
+ > chunk_;
+
+ typedef typename chunk_::state state;
+ typedef typename chunk_::iterator iterator;
+};
+
+template<
+ int N
+ , typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl
+ : fold_chunk<N>
+ ::template result_< First,Last,State,ForwardOp >
+{
+};
+
+}}}
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc70/full_lambda.hpp b/boost/boost/mpl/aux_/preprocessed/msvc70/full_lambda.hpp
new file mode 100644
index 00000000000..bf818731eba
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc70/full_lambda.hpp
@@ -0,0 +1,554 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/aux_/full_lambda.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template<
+ bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false
+ , bool C5 = false
+ >
+struct lambda_or
+ : true_
+{
+};
+
+template<>
+struct lambda_or< false,false,false,false,false >
+ : false_
+{
+};
+
+} // namespace aux
+
+template<
+ typename T
+ , typename Tag
+
+ >
+struct lambda
+{
+ typedef false_ is_le;
+ typedef T result_;
+ typedef T type;
+};
+
+template<
+ typename T
+ >
+struct is_lambda_expression
+ : lambda<T>::is_le
+{
+};
+
+template< int N, typename Tag >
+struct lambda< arg<N>, Tag >
+{
+ typedef true_ is_le;
+ typedef mpl::arg<N> result_; // qualified for the sake of MIPSpro 7.41
+ typedef mpl::protect<result_> type;
+};
+
+template<
+ typename F
+ , typename Tag
+ >
+struct lambda<
+ bind0<F>
+ , Tag
+
+ >
+{
+ typedef false_ is_le;
+ typedef bind0<
+ F
+ > result_;
+
+ typedef result_ type;
+};
+
+namespace aux {
+
+template<
+ typename IsLE, typename Tag
+ , template< typename P1 > class F
+ , typename L1
+ >
+struct le_result1
+{
+ typedef F<
+ typename L1::type
+ > result_;
+
+ typedef result_ type;
+};
+
+template<
+ typename Tag
+ , template< typename P1 > class F
+ , typename L1
+ >
+struct le_result1< true_,Tag,F,L1 >
+{
+ typedef bind1<
+ quote1< F,Tag >
+ , typename L1::result_
+ > result_;
+
+ typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+ template< typename P1 > class F
+ , typename T1
+ , typename Tag
+ >
+struct lambda<
+ F<T1>
+ , Tag
+
+ >
+{
+ typedef lambda< T1,Tag > l1;
+ typedef typename l1::is_le is_le1;
+ typedef typename aux::lambda_or<
+ is_le1::value
+ >::type is_le;
+
+ typedef aux::le_result1<
+ is_le, Tag, F, l1
+ > le_result_;
+
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+template<
+ typename F, typename T1
+ , typename Tag
+ >
+struct lambda<
+ bind1< F,T1 >
+ , Tag
+
+ >
+{
+ typedef false_ is_le;
+ typedef bind1<
+ F
+ , T1
+ > result_;
+
+ typedef result_ type;
+};
+
+namespace aux {
+
+template<
+ typename IsLE, typename Tag
+ , template< typename P1, typename P2 > class F
+ , typename L1, typename L2
+ >
+struct le_result2
+{
+ typedef F<
+ typename L1::type, typename L2::type
+ > result_;
+
+ typedef result_ type;
+};
+
+template<
+ typename Tag
+ , template< typename P1, typename P2 > class F
+ , typename L1, typename L2
+ >
+struct le_result2< true_,Tag,F,L1,L2 >
+{
+ typedef bind2<
+ quote2< F,Tag >
+ , typename L1::result_, typename L2::result_
+ > result_;
+
+ typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+ template< typename P1, typename P2 > class F
+ , typename T1, typename T2
+ , typename Tag
+ >
+struct lambda<
+ F< T1,T2 >
+ , Tag
+
+ >
+{
+ typedef lambda< T1,Tag > l1;
+ typedef lambda< T2,Tag > l2;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+
+
+ typedef typename aux::lambda_or<
+ is_le1::value, is_le2::value
+ >::type is_le;
+
+ typedef aux::le_result2<
+ is_le, Tag, F, l1, l2
+ > le_result_;
+
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+template<
+ typename F, typename T1, typename T2
+ , typename Tag
+ >
+struct lambda<
+ bind2< F,T1,T2 >
+ , Tag
+
+ >
+{
+ typedef false_ is_le;
+ typedef bind2<
+ F
+ , T1, T2
+ > result_;
+
+ typedef result_ type;
+};
+
+namespace aux {
+
+template<
+ typename IsLE, typename Tag
+ , template< typename P1, typename P2, typename P3 > class F
+ , typename L1, typename L2, typename L3
+ >
+struct le_result3
+{
+ typedef F<
+ typename L1::type, typename L2::type, typename L3::type
+ > result_;
+
+ typedef result_ type;
+};
+
+template<
+ typename Tag
+ , template< typename P1, typename P2, typename P3 > class F
+ , typename L1, typename L2, typename L3
+ >
+struct le_result3< true_,Tag,F,L1,L2,L3 >
+{
+ typedef bind3<
+ quote3< F,Tag >
+ , typename L1::result_, typename L2::result_, typename L3::result_
+ > result_;
+
+ typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+ template< typename P1, typename P2, typename P3 > class F
+ , typename T1, typename T2, typename T3
+ , typename Tag
+ >
+struct lambda<
+ F< T1,T2,T3 >
+ , Tag
+
+ >
+{
+ typedef lambda< T1,Tag > l1;
+ typedef lambda< T2,Tag > l2;
+ typedef lambda< T3,Tag > l3;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+
+
+ typedef typename aux::lambda_or<
+ is_le1::value, is_le2::value, is_le3::value
+ >::type is_le;
+
+ typedef aux::le_result3<
+ is_le, Tag, F, l1, l2, l3
+ > le_result_;
+
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ , typename Tag
+ >
+struct lambda<
+ bind3< F,T1,T2,T3 >
+ , Tag
+
+ >
+{
+ typedef false_ is_le;
+ typedef bind3<
+ F
+ , T1, T2, T3
+ > result_;
+
+ typedef result_ type;
+};
+
+namespace aux {
+
+template<
+ typename IsLE, typename Tag
+ , template< typename P1, typename P2, typename P3, typename P4 > class F
+ , typename L1, typename L2, typename L3, typename L4
+ >
+struct le_result4
+{
+ typedef F<
+ typename L1::type, typename L2::type, typename L3::type
+ , typename L4::type
+ > result_;
+
+ typedef result_ type;
+};
+
+template<
+ typename Tag
+ , template< typename P1, typename P2, typename P3, typename P4 > class F
+ , typename L1, typename L2, typename L3, typename L4
+ >
+struct le_result4< true_,Tag,F,L1,L2,L3,L4 >
+{
+ typedef bind4<
+ quote4< F,Tag >
+ , typename L1::result_, typename L2::result_, typename L3::result_
+ , typename L4::result_
+ > result_;
+
+ typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+ template< typename P1, typename P2, typename P3, typename P4 > class F
+ , typename T1, typename T2, typename T3, typename T4
+ , typename Tag
+ >
+struct lambda<
+ F< T1,T2,T3,T4 >
+ , Tag
+
+ >
+{
+ typedef lambda< T1,Tag > l1;
+ typedef lambda< T2,Tag > l2;
+ typedef lambda< T3,Tag > l3;
+ typedef lambda< T4,Tag > l4;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+ typedef typename l4::is_le is_le4;
+
+
+ typedef typename aux::lambda_or<
+ is_le1::value, is_le2::value, is_le3::value, is_le4::value
+ >::type is_le;
+
+ typedef aux::le_result4<
+ is_le, Tag, F, l1, l2, l3, l4
+ > le_result_;
+
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename Tag
+ >
+struct lambda<
+ bind4< F,T1,T2,T3,T4 >
+ , Tag
+
+ >
+{
+ typedef false_ is_le;
+ typedef bind4<
+ F
+ , T1, T2, T3, T4
+ > result_;
+
+ typedef result_ type;
+};
+
+namespace aux {
+
+template<
+ typename IsLE, typename Tag
+ , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F
+ , typename L1, typename L2, typename L3, typename L4, typename L5
+ >
+struct le_result5
+{
+ typedef F<
+ typename L1::type, typename L2::type, typename L3::type
+ , typename L4::type, typename L5::type
+ > result_;
+
+ typedef result_ type;
+};
+
+template<
+ typename Tag
+ , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F
+ , typename L1, typename L2, typename L3, typename L4, typename L5
+ >
+struct le_result5< true_,Tag,F,L1,L2,L3,L4,L5 >
+{
+ typedef bind5<
+ quote5< F,Tag >
+ , typename L1::result_, typename L2::result_, typename L3::result_
+ , typename L4::result_, typename L5::result_
+ > result_;
+
+ typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+ template<
+ typename P1, typename P2, typename P3, typename P4
+ , typename P5
+ >
+ class F
+ , typename T1, typename T2, typename T3, typename T4, typename T5
+ , typename Tag
+ >
+struct lambda<
+ F< T1,T2,T3,T4,T5 >
+ , Tag
+
+ >
+{
+ typedef lambda< T1,Tag > l1;
+ typedef lambda< T2,Tag > l2;
+ typedef lambda< T3,Tag > l3;
+ typedef lambda< T4,Tag > l4;
+ typedef lambda< T5,Tag > l5;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+ typedef typename l4::is_le is_le4;
+ typedef typename l5::is_le is_le5;
+
+
+ typedef typename aux::lambda_or<
+ is_le1::value, is_le2::value, is_le3::value, is_le4::value
+ , is_le5::value
+ >::type is_le;
+
+ typedef aux::le_result5<
+ is_le, Tag, F, l1, l2, l3, l4, l5
+ > le_result_;
+
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ , typename Tag
+ >
+struct lambda<
+ bind5< F,T1,T2,T3,T4,T5 >
+ , Tag
+
+ >
+{
+ typedef false_ is_le;
+ typedef bind5<
+ F
+ , T1, T2, T3, T4, T5
+ > result_;
+
+ typedef result_ type;
+};
+
+/// special case for 'protect'
+template< typename T, typename Tag >
+struct lambda< mpl::protect<T>, Tag >
+{
+ typedef false_ is_le;
+ typedef mpl::protect<T> result_;
+ typedef result_ type;
+};
+
+/// specializations for the main 'bind' form
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ , typename Tag
+ >
+struct lambda<
+ bind< F,T1,T2,T3,T4,T5 >
+ , Tag
+
+ >
+{
+ typedef false_ is_le;
+ typedef bind< F,T1,T2,T3,T4,T5 > result_;
+ typedef result_ type;
+};
+
+/// workaround for MWCW 8.3+/EDG < 303, leads to ambiguity on Digital Mars
+
+template<
+ typename F, typename Tag1, typename Tag2
+ >
+struct lambda<
+ lambda< F,Tag1 >
+ , Tag2
+ >
+{
+ typedef lambda< F,Tag2 > l1;
+ typedef lambda< Tag1,Tag2 > l2;
+ typedef typename l1::is_le is_le;
+ typedef aux::le_result2<is_le, Tag2, mpl::lambda, l1, l2> le_result_;
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, lambda)
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc70/greater.hpp b/boost/boost/mpl/aux_/preprocessed/msvc70/greater.hpp
new file mode 100644
index 00000000000..f60a86064a8
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc70/greater.hpp
@@ -0,0 +1,102 @@
+
+// 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/greater.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+ >
+struct greater_impl
+ : if_c<
+ ( tag1_ > tag2_ )
+ , aux::cast2nd_impl< greater_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< greater_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct greater_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct greater_impl< na,integral_c_tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct greater_impl< integral_c_tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct greater_tag
+ : tag< T,na >
+{
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct greater
+ : aux::msvc_eti_base< typename apply_wrap2<
+ greater_impl<
+ typename greater_tag<N1>::type
+ , typename greater_tag<N2>::type
+ >
+ , N1
+ , N2
+ >::type >::type
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, greater)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct greater_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ {
+ BOOST_STATIC_CONSTANT(bool, value =
+ ( BOOST_MPL_AUX_VALUE_WKND(N1)::value >
+ BOOST_MPL_AUX_VALUE_WKND(N2)::value )
+ );
+ typedef bool_<value> type;
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc70/greater_equal.hpp b/boost/boost/mpl/aux_/preprocessed/msvc70/greater_equal.hpp
new file mode 100644
index 00000000000..2ab09fd5622
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc70/greater_equal.hpp
@@ -0,0 +1,102 @@
+
+// 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/greater_equal.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+ >
+struct greater_equal_impl
+ : if_c<
+ ( tag1_ > tag2_ )
+ , aux::cast2nd_impl< greater_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< greater_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct greater_equal_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct greater_equal_impl< na,integral_c_tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct greater_equal_impl< integral_c_tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct greater_equal_tag
+ : tag< T,na >
+{
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct greater_equal
+ : aux::msvc_eti_base< typename apply_wrap2<
+ greater_equal_impl<
+ typename greater_equal_tag<N1>::type
+ , typename greater_equal_tag<N2>::type
+ >
+ , N1
+ , N2
+ >::type >::type
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater_equal, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, greater_equal)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct greater_equal_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ {
+ BOOST_STATIC_CONSTANT(bool, value =
+ ( BOOST_MPL_AUX_VALUE_WKND(N1)::value >=
+ BOOST_MPL_AUX_VALUE_WKND(N2)::value )
+ );
+ typedef bool_<value> type;
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc70/inherit.hpp b/boost/boost/mpl/aux_/preprocessed/msvc70/inherit.hpp
new file mode 100644
index 00000000000..233a1ec30c2
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc70/inherit.hpp
@@ -0,0 +1,166 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/inherit.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template< bool C1, bool C2 >
+struct inherit2_impl
+{
+ template< typename Derived, typename T1, typename T2 > struct result_
+ : T1, T2
+ {
+ typedef Derived type_;
+ };
+};
+
+template<>
+struct inherit2_impl< false,true >
+{
+ template< typename Derived, typename T1, typename T2 > struct result_
+ : T1
+ {
+ typedef T1 type_;
+ };
+};
+
+template<>
+struct inherit2_impl< true,false >
+{
+ template< typename Derived, typename T1, typename T2 > struct result_
+ : T2
+ {
+ typedef T2 type_;
+ };
+};
+
+template<>
+struct inherit2_impl< true,true >
+{
+ template< typename Derived, typename T1, typename T2 > struct result_
+ {
+ typedef T1 type_;
+ };
+};
+
+} // namespace aux
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(T1)
+ , typename BOOST_MPL_AUX_NA_PARAM(T2)
+ >
+struct inherit2
+ : aux::inherit2_impl<
+ is_empty_base<T1>::value
+ , is_empty_base<T2>::value
+ >::template result_< inherit2< T1,T2 >,T1, T2 >
+{
+ typedef typename inherit2::type_ type;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, inherit2, (T1, T2))
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, inherit2)
+
+template<
+ typename T1 = na, typename T2 = na, typename T3 = na
+ >
+struct inherit3
+ : inherit2<
+ typename inherit2<
+ T1, T2
+ >::type
+ , T3
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 3
+ , inherit3
+ , ( T1, T2, T3)
+ )
+};
+
+BOOST_MPL_AUX_NA_SPEC(3, inherit3)
+
+template<
+ typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na
+ >
+struct inherit4
+ : inherit2<
+ typename inherit3<
+ T1, T2, T3
+ >::type
+ , T4
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 4
+ , inherit4
+ , ( T1, T2, T3, T4)
+ )
+};
+
+BOOST_MPL_AUX_NA_SPEC(4, inherit4)
+
+template<
+ typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na
+ , typename T5 = na
+ >
+struct inherit5
+ : inherit2<
+ typename inherit4<
+ T1, T2, T3, T4
+ >::type
+ , T5
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , inherit5
+ , ( T1, T2, T3, T4, T5)
+ )
+};
+
+BOOST_MPL_AUX_NA_SPEC(5, inherit5)
+
+/// primary template
+
+template<
+ typename T1 = empty_base, typename T2 = empty_base
+ , typename T3 = empty_base, typename T4 = empty_base
+ , typename T5 = empty_base
+ >
+struct inherit
+ : inherit5< T1,T2,T3,T4,T5 >
+{
+};
+
+template<>
+struct inherit< na,na,na,na,na >
+{
+ template<
+
+ typename T1 = empty_base, typename T2 = empty_base
+ , typename T3 = empty_base, typename T4 = empty_base
+ , typename T5 = empty_base
+
+ >
+ struct apply
+ : inherit< T1,T2,T3,T4,T5 >
+ {
+ };
+};
+
+BOOST_MPL_AUX_NA_SPEC_LAMBDA(5, inherit)
+BOOST_MPL_AUX_NA_SPEC_ARITY(5, inherit)
+BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(5, 5, inherit)
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc70/iter_fold_if_impl.hpp b/boost/boost/mpl/aux_/preprocessed/msvc70/iter_fold_if_impl.hpp
new file mode 100644
index 00000000000..695179584d3
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc70/iter_fold_if_impl.hpp
@@ -0,0 +1,133 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/aux_/iter_fold_if_impl.hpp" header
+// -- DO NOT modify by hand!
+
+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;
+ };
+};
+
+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;
+};
+
+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;
+ typedef iter_fold_if_forward_step< typename forward_step0::iterator, typename forward_step0::state, ForwardOp, ForwardPredicate > forward_step1;
+ typedef iter_fold_if_forward_step< typename forward_step1::iterator, typename forward_step1::state, ForwardOp, ForwardPredicate > forward_step2;
+ typedef iter_fold_if_forward_step< typename forward_step2::iterator, typename forward_step2::state, ForwardOp, ForwardPredicate > forward_step3;
+ typedef iter_fold_if_forward_step< typename forward_step3::iterator, typename forward_step3::state, ForwardOp, ForwardPredicate > forward_step4;
+
+
+ typedef typename if_<
+ typename forward_step4::not_last
+ , iter_fold_if_impl<
+ typename forward_step4::iterator
+ , typename forward_step4::state
+ , ForwardOp
+ , ForwardPredicate
+ , BackwardOp
+ , BackwardPredicate
+ >
+ , iter_fold_if_null_step<
+ typename forward_step4::iterator
+ , typename forward_step4::state
+ >
+ >::type backward_step4;
+
+ typedef iter_fold_if_backward_step< typename forward_step3::iterator, typename backward_step4::state, BackwardOp, BackwardPredicate > backward_step3;
+ typedef iter_fold_if_backward_step< typename forward_step2::iterator, typename backward_step3::state, BackwardOp, BackwardPredicate > backward_step2;
+ typedef iter_fold_if_backward_step< typename forward_step1::iterator, typename backward_step2::state, BackwardOp, BackwardPredicate > backward_step1;
+ typedef iter_fold_if_backward_step< typename forward_step0::iterator, typename backward_step1::state, BackwardOp, BackwardPredicate > backward_step0;
+
+
+ public:
+ typedef typename backward_step0::state state;
+ typedef typename backward_step4::iterator iterator;
+};
+
+}}}
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc70/iter_fold_impl.hpp b/boost/boost/mpl/aux_/preprocessed/msvc70/iter_fold_impl.hpp
new file mode 100644
index 00000000000..50ea754f2ec
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc70/iter_fold_impl.hpp
@@ -0,0 +1,245 @@
+
+// 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/aux_/iter_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+ int N
+ , typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl;
+
+template< int N >
+struct iter_fold_chunk;
+
+template<> struct iter_fold_chunk<0>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State state0;
+ typedef state0 state;
+ typedef iter0 iterator;
+ };
+};
+
+template<> struct iter_fold_chunk<1>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+
+
+ typedef state1 state;
+ typedef iter1 iterator;
+ };
+};
+
+template<> struct iter_fold_chunk<2>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+
+
+ typedef state2 state;
+ typedef iter2 iterator;
+ };
+};
+
+template<> struct iter_fold_chunk<3>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp,state2,iter2 >::type state3;
+ typedef typename mpl::next<iter2>::type iter3;
+
+
+ typedef state3 state;
+ typedef iter3 iterator;
+ };
+};
+
+template<> struct iter_fold_chunk<4>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp,state2,iter2 >::type state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp,state3,iter3 >::type state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef state4 state;
+ typedef iter4 iterator;
+ };
+};
+
+template< int N >
+struct iter_fold_chunk
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef iter_fold_impl<
+ 4
+ , First
+ , Last
+ , State
+ , ForwardOp
+ > chunk_;
+
+ typedef iter_fold_impl<
+ ( (N - 4) < 0 ? 0 : N - 4 )
+ , typename chunk_::iterator
+ , Last
+ , typename chunk_::state
+ , ForwardOp
+ > res_;
+
+ typedef typename res_::state state;
+ typedef typename res_::iterator iterator;
+ };
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_step;
+
+template<
+ typename Last
+ , typename State
+ >
+struct iter_fold_null_step
+{
+ typedef Last iterator;
+ typedef State state;
+};
+
+template<>
+struct iter_fold_chunk< -1 >
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef typename if_<
+ typename is_same< First,Last >::type
+ , iter_fold_null_step< Last,State >
+ , iter_fold_step< First,Last,State,ForwardOp >
+ >::type res_;
+
+ typedef typename res_::state state;
+ typedef typename res_::iterator iterator;
+ };
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_step
+{
+ typedef iter_fold_chunk< -1 >::template result_<
+ typename mpl::next<First>::type
+ , Last
+ , typename apply2< ForwardOp,State,First >::type
+ , ForwardOp
+ > chunk_;
+
+ typedef typename chunk_::state state;
+ typedef typename chunk_::iterator iterator;
+};
+
+template<
+ int N
+ , typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl
+ : iter_fold_chunk<N>
+ ::template result_< First,Last,State,ForwardOp >
+{
+};
+
+}}}
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc70/lambda_no_ctps.hpp b/boost/boost/mpl/aux_/preprocessed/msvc70/lambda_no_ctps.hpp
new file mode 100644
index 00000000000..890a198a464
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc70/lambda_no_ctps.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/aux_/lambda_no_ctps.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template<
+ bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false
+ , bool C5 = false
+ >
+struct lambda_or
+ : true_
+{
+};
+
+template<>
+struct lambda_or< false,false,false,false,false >
+ : false_
+{
+};
+
+template< typename Arity > struct lambda_impl
+{
+ template< typename T, typename Tag, typename Protect > struct result_
+ {
+ typedef T type;
+ typedef is_placeholder<T> is_le;
+ };
+};
+
+template<> struct lambda_impl< int_<1> >
+{
+ template< typename F, typename Tag, typename Protect > struct result_
+ {
+ typedef lambda< typename F::arg1, Tag, false_ > l1;
+ typedef typename l1::is_le is_le1;
+ typedef aux::lambda_or<
+ BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value
+ > is_le;
+
+ typedef bind1<
+ typename F::rebind
+ , typename l1::type
+ > bind_;
+
+ typedef typename if_<
+ is_le
+ , if_< Protect, mpl::protect<bind_>, bind_ >
+ , identity<F>
+ >::type type_;
+
+ typedef typename type_::type type;
+ };
+};
+
+template<> struct lambda_impl< int_<2> >
+{
+ template< typename F, typename Tag, typename Protect > struct result_
+ {
+ typedef lambda< typename F::arg1, Tag, false_ > l1;
+ typedef lambda< typename F::arg2, Tag, false_ > l2;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+
+
+ typedef aux::lambda_or<
+ BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value
+ > is_le;
+
+ typedef bind2<
+ typename F::rebind
+ , typename l1::type, typename l2::type
+ > bind_;
+
+ typedef typename if_<
+ is_le
+ , if_< Protect, mpl::protect<bind_>, bind_ >
+ , identity<F>
+ >::type type_;
+
+ typedef typename type_::type type;
+ };
+};
+
+template<> struct lambda_impl< int_<3> >
+{
+ template< typename F, typename Tag, typename Protect > struct result_
+ {
+ typedef lambda< typename F::arg1, Tag, false_ > l1;
+ typedef lambda< typename F::arg2, Tag, false_ > l2;
+ typedef lambda< typename F::arg3, Tag, false_ > l3;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+
+
+ typedef aux::lambda_or<
+ BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value
+ > is_le;
+
+ typedef bind3<
+ typename F::rebind
+ , typename l1::type, typename l2::type, typename l3::type
+ > bind_;
+
+ typedef typename if_<
+ is_le
+ , if_< Protect, mpl::protect<bind_>, bind_ >
+ , identity<F>
+ >::type type_;
+
+ typedef typename type_::type type;
+ };
+};
+
+template<> struct lambda_impl< int_<4> >
+{
+ template< typename F, typename Tag, typename Protect > struct result_
+ {
+ typedef lambda< typename F::arg1, Tag, false_ > l1;
+ typedef lambda< typename F::arg2, Tag, false_ > l2;
+ typedef lambda< typename F::arg3, Tag, false_ > l3;
+ typedef lambda< typename F::arg4, Tag, false_ > l4;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+ typedef typename l4::is_le is_le4;
+
+
+ typedef aux::lambda_or<
+ BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value
+ > is_le;
+
+ typedef bind4<
+ typename F::rebind
+ , typename l1::type, typename l2::type, typename l3::type
+ , typename l4::type
+ > bind_;
+
+ typedef typename if_<
+ is_le
+ , if_< Protect, mpl::protect<bind_>, bind_ >
+ , identity<F>
+ >::type type_;
+
+ typedef typename type_::type type;
+ };
+};
+
+template<> struct lambda_impl< int_<5> >
+{
+ template< typename F, typename Tag, typename Protect > struct result_
+ {
+ typedef lambda< typename F::arg1, Tag, false_ > l1;
+ typedef lambda< typename F::arg2, Tag, false_ > l2;
+ typedef lambda< typename F::arg3, Tag, false_ > l3;
+ typedef lambda< typename F::arg4, Tag, false_ > l4;
+ typedef lambda< typename F::arg5, Tag, false_ > l5;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+ typedef typename l4::is_le is_le4;
+ typedef typename l5::is_le is_le5;
+
+
+ typedef aux::lambda_or<
+ BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le5)::value
+ > is_le;
+
+ typedef bind5<
+ typename F::rebind
+ , typename l1::type, typename l2::type, typename l3::type
+ , typename l4::type, typename l5::type
+ > bind_;
+
+ typedef typename if_<
+ is_le
+ , if_< Protect, mpl::protect<bind_>, bind_ >
+ , identity<F>
+ >::type type_;
+
+ typedef typename type_::type type;
+ };
+};
+
+} // namespace aux
+
+template<
+ typename T
+ , typename Tag
+ , typename Protect
+ >
+struct lambda
+{
+ /// Metafunction forwarding confuses MSVC 6.x
+ typedef typename aux::template_arity<T>::type arity_;
+ typedef typename aux::lambda_impl<arity_>
+ ::template result_< T,Tag,Protect > l_;
+
+ typedef typename l_::type type;
+ typedef typename l_::is_le is_le;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(3, lambda, (T, Tag, Protect))
+};
+
+BOOST_MPL_AUX_NA_SPEC2(1, 3, lambda)
+
+template<
+ typename T
+ >
+struct is_lambda_expression
+ : lambda<T>::is_le
+{
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc70/less.hpp b/boost/boost/mpl/aux_/preprocessed/msvc70/less.hpp
new file mode 100644
index 00000000000..72338def7eb
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc70/less.hpp
@@ -0,0 +1,102 @@
+
+// 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/less.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+ >
+struct less_impl
+ : if_c<
+ ( tag1_ > tag2_ )
+ , aux::cast2nd_impl< less_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< less_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct less_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct less_impl< na,integral_c_tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct less_impl< integral_c_tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct less_tag
+ : tag< T,na >
+{
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct less
+ : aux::msvc_eti_base< typename apply_wrap2<
+ less_impl<
+ typename less_tag<N1>::type
+ , typename less_tag<N2>::type
+ >
+ , N1
+ , N2
+ >::type >::type
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, less)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct less_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ {
+ BOOST_STATIC_CONSTANT(bool, value =
+ ( BOOST_MPL_AUX_VALUE_WKND(N2)::value >
+ BOOST_MPL_AUX_VALUE_WKND(N1)::value )
+ );
+ typedef bool_<value> type;
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc70/less_equal.hpp b/boost/boost/mpl/aux_/preprocessed/msvc70/less_equal.hpp
new file mode 100644
index 00000000000..b5886975593
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc70/less_equal.hpp
@@ -0,0 +1,102 @@
+
+// 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/less_equal.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+ >
+struct less_equal_impl
+ : if_c<
+ ( tag1_ > tag2_ )
+ , aux::cast2nd_impl< less_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< less_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct less_equal_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct less_equal_impl< na,integral_c_tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct less_equal_impl< integral_c_tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct less_equal_tag
+ : tag< T,na >
+{
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct less_equal
+ : aux::msvc_eti_base< typename apply_wrap2<
+ less_equal_impl<
+ typename less_equal_tag<N1>::type
+ , typename less_equal_tag<N2>::type
+ >
+ , N1
+ , N2
+ >::type >::type
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less_equal, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, less_equal)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct less_equal_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ {
+ BOOST_STATIC_CONSTANT(bool, value =
+ ( BOOST_MPL_AUX_VALUE_WKND(N1)::value <=
+ BOOST_MPL_AUX_VALUE_WKND(N2)::value )
+ );
+ typedef bool_<value> type;
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc70/list.hpp b/boost/boost/mpl/aux_/preprocessed/msvc70/list.hpp
new file mode 100644
index 00000000000..e5ea456c9e2
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc70/list.hpp
@@ -0,0 +1,556 @@
+
+// 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.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< int N >
+struct list_chooser;
+
+}
+
+namespace aux {
+
+template<>
+struct list_chooser<0>
+{
+ 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 result_
+ {
+ typedef list0<
+
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<1>
+{
+ 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 result_
+ {
+ typedef typename list1<
+ T0
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<2>
+{
+ 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 result_
+ {
+ typedef typename list2<
+ T0, T1
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<3>
+{
+ 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 result_
+ {
+ typedef typename list3<
+ T0, T1, T2
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<4>
+{
+ 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 result_
+ {
+ typedef typename list4<
+ T0, T1, T2, T3
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<5>
+{
+ 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 result_
+ {
+ typedef typename list5<
+ T0, T1, T2, T3, T4
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<6>
+{
+ 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 result_
+ {
+ typedef typename list6<
+ T0, T1, T2, T3, T4, T5
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<7>
+{
+ 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 result_
+ {
+ typedef typename list7<
+ T0, T1, T2, T3, T4, T5, T6
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<8>
+{
+ 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 result_
+ {
+ typedef typename list8<
+ T0, T1, T2, T3, T4, T5, T6, T7
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<9>
+{
+ 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 result_
+ {
+ typedef typename list9<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<10>
+{
+ 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 result_
+ {
+ typedef typename list10<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<11>
+{
+ 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 result_
+ {
+ typedef typename list11<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<12>
+{
+ 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 result_
+ {
+ typedef typename list12<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<13>
+{
+ 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 result_
+ {
+ typedef typename list13<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<14>
+{
+ 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 result_
+ {
+ typedef typename list14<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<15>
+{
+ 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 result_
+ {
+ typedef typename list15<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<16>
+{
+ 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 result_
+ {
+ typedef typename list16<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<17>
+{
+ 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 result_
+ {
+ typedef typename list17<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<18>
+{
+ 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 result_
+ {
+ typedef typename list18<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<19>
+{
+ 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 result_
+ {
+ typedef typename list19<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<20>
+{
+ 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 result_
+ {
+ typedef typename list20<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< typename T >
+struct is_list_arg
+{
+ BOOST_STATIC_CONSTANT(bool, value = true);
+};
+
+template<>
+struct is_list_arg<na>
+{
+ BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+template<
+ 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 list_count_args
+{
+ BOOST_STATIC_CONSTANT(int, value =
+ is_list_arg<T1>::value + is_list_arg<T2>::value
+ + is_list_arg<T3>::value + is_list_arg<T4>::value
+ + is_list_arg<T5>::value + is_list_arg<T6>::value
+ + is_list_arg<T7>::value + is_list_arg<T8>::value
+ + is_list_arg<T9>::value + is_list_arg<T10>::value
+ + is_list_arg<T11>::value + is_list_arg<T12>::value
+ + is_list_arg<T13>::value + is_list_arg<T14>::value
+ + is_list_arg<T15>::value + is_list_arg<T16>::value
+ + is_list_arg<T17>::value + is_list_arg<T18>::value
+ + is_list_arg<T19>::value + is_list_arg<T20>::value
+ );
+
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ , typename T10, typename T11, typename T12, typename T13, typename T14
+ , typename T15, typename T16, typename T17, typename T18, typename T19
+ >
+struct list_impl
+{
+ typedef aux::list_count_args<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ > arg_num_;
+
+ typedef typename aux::list_chooser< arg_num_::value >
+ ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+} // namespace aux
+
+template<
+ typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+ , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+ , typename T12 = na, typename T13 = na, typename T14 = na
+ , typename T15 = na, typename T16 = na, typename T17 = na
+ , typename T18 = na, typename T19 = na
+ >
+struct list
+ : aux::list_impl<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ >::type
+{
+ typedef typename aux::list_impl<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc70/list_c.hpp b/boost/boost/mpl/aux_/preprocessed/msvc70/list_c.hpp
new file mode 100644
index 00000000000..ab25482f55d
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc70/list_c.hpp
@@ -0,0 +1,534 @@
+
+// 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_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< int N >
+struct list_c_chooser;
+
+}
+
+namespace aux {
+
+template<>
+struct list_c_chooser<0>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list0_c<
+ T
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<1>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list1_c<
+ T, C0
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<2>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list2_c<
+ T, C0, C1
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<3>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list3_c<
+ T, C0, C1, C2
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<4>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list4_c<
+ T, C0, C1, C2, C3
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<5>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list5_c<
+ T, C0, C1, C2, C3, C4
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<6>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list6_c<
+ T, C0, C1, C2, C3, C4, C5
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<7>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list7_c<
+ T, C0, C1, C2, C3, C4, C5, C6
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<8>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list8_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<9>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list9_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<10>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list10_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<11>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list11_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<12>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list12_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<13>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list13_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<14>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list14_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<15>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list15_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<16>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list16_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<17>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list17_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<18>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list18_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<19>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list19_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<20>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list20_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< long C >
+struct is_list_c_arg
+{
+ BOOST_STATIC_CONSTANT(bool, value = true);
+};
+
+template<>
+struct is_list_c_arg<LONG_MAX>
+{
+ BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+template<
+ long C1, long C2, long C3, long C4, long C5, long C6, long C7, long C8
+ , long C9, long C10, long C11, long C12, long C13, long C14, long C15
+ , long C16, long C17, long C18, long C19, long C20
+ >
+struct list_c_count_args
+{
+ BOOST_STATIC_CONSTANT(int, value =
+ is_list_c_arg<C1>::value + is_list_c_arg<C2>::value
+ + is_list_c_arg<C3>::value + is_list_c_arg<C4>::value
+ + is_list_c_arg<C5>::value + is_list_c_arg<C6>::value
+ + is_list_c_arg<C7>::value + is_list_c_arg<C8>::value
+ + is_list_c_arg<C9>::value + is_list_c_arg<C10>::value
+ + is_list_c_arg<C11>::value + is_list_c_arg<C12>::value
+ + is_list_c_arg<C13>::value + is_list_c_arg<C14>::value
+ + is_list_c_arg<C15>::value + is_list_c_arg<C16>::value
+ + is_list_c_arg<C17>::value + is_list_c_arg<C18>::value
+ + is_list_c_arg<C19>::value + is_list_c_arg<C20>::value
+ );
+
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+struct list_c_impl
+{
+ typedef aux::list_c_count_args<
+ C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+ > arg_num_;
+
+ typedef typename aux::list_c_chooser< arg_num_::value >
+ ::template result_< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;
+};
+
+} // namespace aux
+
+template<
+ typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+ , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+ , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+ , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+ , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+ , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+ , long C18 = LONG_MAX, long C19 = LONG_MAX
+ >
+struct list_c
+ : aux::list_c_impl<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+ >::type
+{
+ typedef typename aux::list_c_impl<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+ >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc70/map.hpp b/boost/boost/mpl/aux_/preprocessed/msvc70/map.hpp
new file mode 100644
index 00000000000..970e0b76028
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc70/map.hpp
@@ -0,0 +1,556 @@
+
+// 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/map.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< int N >
+struct map_chooser;
+
+}
+
+namespace aux {
+
+template<>
+struct map_chooser<0>
+{
+ 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 result_
+ {
+ typedef map0<
+
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<1>
+{
+ 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 result_
+ {
+ typedef typename map1<
+ T0
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<2>
+{
+ 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 result_
+ {
+ typedef typename map2<
+ T0, T1
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<3>
+{
+ 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 result_
+ {
+ typedef typename map3<
+ T0, T1, T2
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<4>
+{
+ 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 result_
+ {
+ typedef typename map4<
+ T0, T1, T2, T3
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<5>
+{
+ 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 result_
+ {
+ typedef typename map5<
+ T0, T1, T2, T3, T4
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<6>
+{
+ 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 result_
+ {
+ typedef typename map6<
+ T0, T1, T2, T3, T4, T5
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<7>
+{
+ 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 result_
+ {
+ typedef typename map7<
+ T0, T1, T2, T3, T4, T5, T6
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<8>
+{
+ 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 result_
+ {
+ typedef typename map8<
+ T0, T1, T2, T3, T4, T5, T6, T7
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<9>
+{
+ 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 result_
+ {
+ typedef typename map9<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<10>
+{
+ 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 result_
+ {
+ typedef typename map10<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<11>
+{
+ 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 result_
+ {
+ typedef typename map11<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<12>
+{
+ 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 result_
+ {
+ typedef typename map12<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<13>
+{
+ 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 result_
+ {
+ typedef typename map13<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<14>
+{
+ 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 result_
+ {
+ typedef typename map14<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<15>
+{
+ 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 result_
+ {
+ typedef typename map15<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<16>
+{
+ 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 result_
+ {
+ typedef typename map16<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<17>
+{
+ 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 result_
+ {
+ typedef typename map17<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<18>
+{
+ 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 result_
+ {
+ typedef typename map18<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<19>
+{
+ 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 result_
+ {
+ typedef typename map19<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<20>
+{
+ 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 result_
+ {
+ typedef typename map20<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< typename T >
+struct is_map_arg
+{
+ BOOST_STATIC_CONSTANT(bool, value = true);
+};
+
+template<>
+struct is_map_arg<na>
+{
+ BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+template<
+ 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 map_count_args
+{
+ BOOST_STATIC_CONSTANT(int, value =
+ is_map_arg<T1>::value + is_map_arg<T2>::value
+ + is_map_arg<T3>::value + is_map_arg<T4>::value
+ + is_map_arg<T5>::value + is_map_arg<T6>::value
+ + is_map_arg<T7>::value + is_map_arg<T8>::value
+ + is_map_arg<T9>::value + is_map_arg<T10>::value
+ + is_map_arg<T11>::value + is_map_arg<T12>::value
+ + is_map_arg<T13>::value + is_map_arg<T14>::value
+ + is_map_arg<T15>::value + is_map_arg<T16>::value
+ + is_map_arg<T17>::value + is_map_arg<T18>::value
+ + is_map_arg<T19>::value + is_map_arg<T20>::value
+ );
+
+};
+
+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 map_impl
+{
+ typedef aux::map_count_args<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ > arg_num_;
+
+ typedef typename aux::map_chooser< arg_num_::value >
+ ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+} // namespace aux
+
+template<
+ typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+ , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+ , typename T12 = na, typename T13 = na, typename T14 = na
+ , typename T15 = na, typename T16 = na, typename T17 = na
+ , typename T18 = na, typename T19 = na
+ >
+struct map
+ : aux::map_impl<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ >::type
+{
+ typedef typename aux::map_impl<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc70/minus.hpp b/boost/boost/mpl/aux_/preprocessed/msvc70/minus.hpp
new file mode 100644
index 00000000000..3237fa6847a
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc70/minus.hpp
@@ -0,0 +1,150 @@
+
+// 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/minus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+ >
+struct minus_impl
+ : if_c<
+ ( tag1_ > tag2_ )
+ , aux::cast2nd_impl< minus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< minus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct minus_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct minus_impl< na,integral_c_tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct minus_impl< integral_c_tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct minus_tag
+ : tag< T,na >
+{
+};
+
+/// forward declaration
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct minus2;
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct minus
+
+ : aux::msvc_eti_base< typename if_<
+
+ is_na<N3>
+ , minus2< N1,N2 >
+ , minus<
+ minus2< N1,N2 >
+ , N3, N4, N5
+ >
+ >::type
+
+ >
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , minus
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1
+ , typename N2
+ >
+struct minus2
+ : aux::msvc_eti_base< typename apply_wrap2<
+ minus_impl<
+ typename minus_tag<N1>::type
+ , typename minus_tag<N2>::type
+ >
+ , N1
+ , N2
+ >::type >::type
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, minus2, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, minus)
+
+}}
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< typename T, T n1, T n2 >
+struct minus_wknd
+{
+ BOOST_STATIC_CONSTANT(T, value = (n1 - n2));
+ typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct minus_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+ : aux::minus_wknd<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , N1::value
+ , N2::value
+ >::type
+
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc70/modulus.hpp b/boost/boost/mpl/aux_/preprocessed/msvc70/modulus.hpp
new file mode 100644
index 00000000000..9c672c0f19d
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc70/modulus.hpp
@@ -0,0 +1,115 @@
+
+// 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/modulus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+ >
+struct modulus_impl
+ : if_c<
+ ( tag1_ > tag2_ )
+ , aux::cast2nd_impl< modulus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< modulus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct modulus_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct modulus_impl< na,integral_c_tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct modulus_impl< integral_c_tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct modulus_tag
+ : tag< T,na >
+{
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct modulus
+ : aux::msvc_eti_base< typename apply_wrap2<
+ modulus_impl<
+ typename modulus_tag<N1>::type
+ , typename modulus_tag<N2>::type
+ >
+ , N1
+ , N2
+ >::type >::type
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, modulus, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, modulus)
+
+}}
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< typename T, T n1, T n2 >
+struct modulus_wknd
+{
+ BOOST_STATIC_CONSTANT(T, value = (n1 % n2));
+ typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct modulus_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+ : aux::modulus_wknd<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , N1::value
+ , N2::value
+ >::type
+
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc70/not_equal_to.hpp b/boost/boost/mpl/aux_/preprocessed/msvc70/not_equal_to.hpp
new file mode 100644
index 00000000000..1e48e7f7af0
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc70/not_equal_to.hpp
@@ -0,0 +1,102 @@
+
+// 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/not_equal_to.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+ >
+struct not_equal_to_impl
+ : if_c<
+ ( tag1_ > tag2_ )
+ , aux::cast2nd_impl< not_equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< not_equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct not_equal_to_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct not_equal_to_impl< na,integral_c_tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct not_equal_to_impl< integral_c_tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct not_equal_to_tag
+ : tag< T,na >
+{
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct not_equal_to
+ : aux::msvc_eti_base< typename apply_wrap2<
+ not_equal_to_impl<
+ typename not_equal_to_tag<N1>::type
+ , typename not_equal_to_tag<N2>::type
+ >
+ , N1
+ , N2
+ >::type >::type
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, not_equal_to, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, not_equal_to)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct not_equal_to_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ {
+ BOOST_STATIC_CONSTANT(bool, value =
+ ( BOOST_MPL_AUX_VALUE_WKND(N1)::value !=
+ BOOST_MPL_AUX_VALUE_WKND(N2)::value )
+ );
+ typedef bool_<value> type;
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc70/or.hpp b/boost/boost/mpl/aux_/preprocessed/msvc70/or.hpp
new file mode 100644
index 00000000000..8d0ba0a47a8
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc70/or.hpp
@@ -0,0 +1,71 @@
+
+// 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/or.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< bool C_ > struct or_impl
+{
+ template<
+ typename T1, typename T2, typename T3, typename T4
+ >
+ struct result_
+ : true_
+ {
+ };
+};
+
+template<> struct or_impl<false>
+{
+ template<
+ typename T1, typename T2, typename T3, typename T4
+ >
+ struct result_
+ : or_impl<
+ BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+ >::template result_< T2,T3,T4,false_ >
+ {
+ };
+
+ template<> struct result_< false_,false_,false_,false_ >
+ : false_
+ {
+ };
+};
+
+} // namespace aux
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(T1)
+ , typename BOOST_MPL_AUX_NA_PARAM(T2)
+ , typename T3 = false_, typename T4 = false_, typename T5 = false_
+ >
+struct or_
+
+ : aux::or_impl<
+ BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+ >::template result_< T2,T3,T4,T5 >
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , or_
+ , ( T1, T2, T3, T4, T5)
+ )
+};
+
+BOOST_MPL_AUX_NA_SPEC2(
+ 2
+ , 5
+ , or_
+ )
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc70/placeholders.hpp b/boost/boost/mpl/aux_/preprocessed/msvc70/placeholders.hpp
new file mode 100644
index 00000000000..ff97364b9ba
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc70/placeholders.hpp
@@ -0,0 +1,105 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+// Copyright Peter Dimov 2001-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)
+//
+
+// Preprocessed version of "boost/mpl/placeholders.hpp" header
+// -- DO NOT modify by hand!
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg< -1 > _;
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_;
+}
+
+}}
+
+/// agurt, 17/mar/02: one more placeholder for the last 'apply#'
+/// specialization
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<1> _1;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_1)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_1;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<2> _2;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_2)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_2;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<3> _3;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_3)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_3;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<4> _4;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_4)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_4;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<5> _5;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_5)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_5;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<6> _6;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_6)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_6;
+}
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc70/plus.hpp b/boost/boost/mpl/aux_/preprocessed/msvc70/plus.hpp
new file mode 100644
index 00000000000..c8f3355e751
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc70/plus.hpp
@@ -0,0 +1,150 @@
+
+// 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/plus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+ >
+struct plus_impl
+ : if_c<
+ ( tag1_ > tag2_ )
+ , aux::cast2nd_impl< plus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< plus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct plus_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct plus_impl< na,integral_c_tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct plus_impl< integral_c_tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct plus_tag
+ : tag< T,na >
+{
+};
+
+/// forward declaration
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct plus2;
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct plus
+
+ : aux::msvc_eti_base< typename if_<
+
+ is_na<N3>
+ , plus2< N1,N2 >
+ , plus<
+ plus2< N1,N2 >
+ , N3, N4, N5
+ >
+ >::type
+
+ >
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , plus
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1
+ , typename N2
+ >
+struct plus2
+ : aux::msvc_eti_base< typename apply_wrap2<
+ plus_impl<
+ typename plus_tag<N1>::type
+ , typename plus_tag<N2>::type
+ >
+ , N1
+ , N2
+ >::type >::type
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, plus2, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, plus)
+
+}}
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< typename T, T n1, T n2 >
+struct plus_wknd
+{
+ BOOST_STATIC_CONSTANT(T, value = (n1 + n2));
+ typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct plus_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+ : aux::plus_wknd<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , N1::value
+ , N2::value
+ >::type
+
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc70/quote.hpp b/boost/boost/mpl/aux_/preprocessed/msvc70/quote.hpp
new file mode 100644
index 00000000000..b85880ffddb
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc70/quote.hpp
@@ -0,0 +1,116 @@
+
+// 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/quote.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+template< bool > struct quote_impl
+{
+ template< typename T > struct result_
+ : T
+ {
+ };
+};
+
+template<> struct quote_impl<false>
+{
+ template< typename T > struct result_
+ {
+ typedef T type;
+ };
+};
+
+template<
+ template< typename P1 > class F
+ , typename Tag = void_
+ >
+struct quote1
+{
+ template< typename U1 > struct apply
+
+ : quote_impl< aux::has_type< F<U1> >::value >
+ ::template result_< F<U1> >
+
+ {
+ };
+};
+
+template<
+ template< typename P1, typename P2 > class F
+ , typename Tag = void_
+ >
+struct quote2
+{
+ template< typename U1, typename U2 > struct apply
+
+ : quote_impl< aux::has_type< F< U1,U2 > >::value >
+ ::template result_< F< U1,U2 > >
+
+ {
+ };
+};
+
+template<
+ template< typename P1, typename P2, typename P3 > class F
+ , typename Tag = void_
+ >
+struct quote3
+{
+ template< typename U1, typename U2, typename U3 > struct apply
+
+ : quote_impl< aux::has_type< F< U1,U2,U3 > >::value >
+ ::template result_< F< U1,U2,U3 > >
+
+ {
+ };
+};
+
+template<
+ template< typename P1, typename P2, typename P3, typename P4 > class F
+ , typename Tag = void_
+ >
+struct quote4
+{
+ template<
+ typename U1, typename U2, typename U3, typename U4
+ >
+ struct apply
+
+ : quote_impl< aux::has_type< F< U1,U2,U3,U4 > >::value >
+ ::template result_< F< U1,U2,U3,U4 > >
+
+ {
+ };
+};
+
+template<
+ template<
+ typename P1, typename P2, typename P3, typename P4
+ , typename P5
+ >
+ class F
+ , typename Tag = void_
+ >
+struct quote5
+{
+ template<
+ typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+ struct apply
+
+ : quote_impl< aux::has_type< F< U1,U2,U3,U4,U5 > >::value >
+ ::template result_< F< U1,U2,U3,U4,U5 > >
+
+ {
+ };
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc70/reverse_fold_impl.hpp b/boost/boost/mpl/aux_/preprocessed/msvc70/reverse_fold_impl.hpp
new file mode 100644
index 00000000000..7a07414adff
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc70/reverse_fold_impl.hpp
@@ -0,0 +1,295 @@
+
+// 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/aux_/reverse_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+ long N
+ , typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl;
+
+template< long N >
+struct reverse_fold_chunk;
+
+template<> struct reverse_fold_chunk<0>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef fwd_state0 bkwd_state0;
+ typedef bkwd_state0 state;
+ typedef iter0 iterator;
+ };
+};
+
+template<> struct reverse_fold_chunk<1>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+
+
+ typedef fwd_state1 bkwd_state1;
+ typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+ typedef bkwd_state0 state;
+ typedef iter1 iterator;
+ };
+};
+
+template<> struct reverse_fold_chunk<2>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+
+
+ typedef fwd_state2 bkwd_state2;
+ typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+ typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter2 iterator;
+ };
+};
+
+template<> struct reverse_fold_chunk<3>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+
+
+ typedef fwd_state3 bkwd_state3;
+ typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+ typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+ typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter3 iterator;
+ };
+};
+
+template<> struct reverse_fold_chunk<4>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef fwd_state4 bkwd_state4;
+ typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
+ typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+ typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+ typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter4 iterator;
+ };
+};
+
+template< long N >
+struct reverse_fold_chunk
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef reverse_fold_impl<
+ ( (N - 4) < 0 ? 0 : N - 4 )
+ , iter4
+ , Last
+ , fwd_state4
+ , BackwardOp
+ , ForwardOp
+ > nested_chunk;
+
+ typedef typename nested_chunk::state bkwd_state4;
+ typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
+ typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+ typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+ typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef typename nested_chunk::iterator iterator;
+ };
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_step;
+
+template<
+ typename Last
+ , typename State
+ >
+struct reverse_fold_null_step
+{
+ typedef Last iterator;
+ typedef State state;
+};
+
+template<>
+struct reverse_fold_chunk< -1 >
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef typename if_<
+ typename is_same< First,Last >::type
+ , reverse_fold_null_step< Last,State >
+ , reverse_fold_step< First,Last,State,BackwardOp,ForwardOp >
+ >::type res_;
+
+ typedef typename res_::state state;
+ typedef typename res_::iterator iterator;
+ };
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_step
+{
+ typedef reverse_fold_chunk< -1 >::template result_<
+ typename mpl::next<First>::type
+ , Last
+ , typename apply2<ForwardOp,State, typename deref<First>::type>::type
+ , BackwardOp
+ , ForwardOp
+ > nested_step;
+
+ typedef typename apply2<
+ BackwardOp
+ , typename nested_step::state
+ , typename deref<First>::type
+ >::type state;
+
+ typedef typename nested_step::iterator iterator;
+};
+
+template<
+ long N
+ , typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl
+ : reverse_fold_chunk<N>
+ ::template result_< First,Last,State,BackwardOp,ForwardOp >
+{
+};
+
+}}}
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc70/reverse_iter_fold_impl.hpp b/boost/boost/mpl/aux_/preprocessed/msvc70/reverse_iter_fold_impl.hpp
new file mode 100644
index 00000000000..39a4057b77d
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc70/reverse_iter_fold_impl.hpp
@@ -0,0 +1,295 @@
+
+// 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/aux_/reverse_iter_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+ long N
+ , typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl;
+
+template< long N >
+struct reverse_iter_fold_chunk;
+
+template<> struct reverse_iter_fold_chunk<0>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef fwd_state0 bkwd_state0;
+ typedef bkwd_state0 state;
+ typedef iter0 iterator;
+ };
+};
+
+template<> struct reverse_iter_fold_chunk<1>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+
+
+ typedef fwd_state1 bkwd_state1;
+ typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+ typedef bkwd_state0 state;
+ typedef iter1 iterator;
+ };
+};
+
+template<> struct reverse_iter_fold_chunk<2>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+
+
+ typedef fwd_state2 bkwd_state2;
+ typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+ typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter2 iterator;
+ };
+};
+
+template<> struct reverse_iter_fold_chunk<3>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+
+
+ typedef fwd_state3 bkwd_state3;
+ typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+ typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+ typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter3 iterator;
+ };
+};
+
+template<> struct reverse_iter_fold_chunk<4>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef fwd_state4 bkwd_state4;
+ typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;
+ typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+ typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+ typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter4 iterator;
+ };
+};
+
+template< long N >
+struct reverse_iter_fold_chunk
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef reverse_iter_fold_impl<
+ ( (N - 4) < 0 ? 0 : N - 4 )
+ , iter4
+ , Last
+ , fwd_state4
+ , BackwardOp
+ , ForwardOp
+ > nested_chunk;
+
+ typedef typename nested_chunk::state bkwd_state4;
+ typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;
+ typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+ typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+ typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef typename nested_chunk::iterator iterator;
+ };
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_step;
+
+template<
+ typename Last
+ , typename State
+ >
+struct reverse_iter_fold_null_step
+{
+ typedef Last iterator;
+ typedef State state;
+};
+
+template<>
+struct reverse_iter_fold_chunk< -1 >
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef typename if_<
+ typename is_same< First,Last >::type
+ , reverse_iter_fold_null_step< Last,State >
+ , reverse_iter_fold_step< First,Last,State,BackwardOp,ForwardOp >
+ >::type res_;
+
+ typedef typename res_::state state;
+ typedef typename res_::iterator iterator;
+ };
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_step
+{
+ typedef reverse_iter_fold_chunk< -1 >::template result_<
+ typename mpl::next<First>::type
+ , Last
+ , typename apply2< ForwardOp,State,First >::type
+ , BackwardOp
+ , ForwardOp
+ > nested_step;
+
+ typedef typename apply2<
+ BackwardOp
+ , typename nested_step::state
+ , First
+ >::type state;
+
+ typedef typename nested_step::iterator iterator;
+};
+
+template<
+ long N
+ , typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl
+ : reverse_iter_fold_chunk<N>
+ ::template result_< First,Last,State,BackwardOp,ForwardOp >
+{
+};
+
+}}}
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc70/set.hpp b/boost/boost/mpl/aux_/preprocessed/msvc70/set.hpp
new file mode 100644
index 00000000000..95aaa5cbdfa
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc70/set.hpp
@@ -0,0 +1,556 @@
+
+// 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/set.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< int N >
+struct set_chooser;
+
+}
+
+namespace aux {
+
+template<>
+struct set_chooser<0>
+{
+ 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 result_
+ {
+ typedef set0<
+
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<1>
+{
+ 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 result_
+ {
+ typedef typename set1<
+ T0
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<2>
+{
+ 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 result_
+ {
+ typedef typename set2<
+ T0, T1
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<3>
+{
+ 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 result_
+ {
+ typedef typename set3<
+ T0, T1, T2
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<4>
+{
+ 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 result_
+ {
+ typedef typename set4<
+ T0, T1, T2, T3
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<5>
+{
+ 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 result_
+ {
+ typedef typename set5<
+ T0, T1, T2, T3, T4
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<6>
+{
+ 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 result_
+ {
+ typedef typename set6<
+ T0, T1, T2, T3, T4, T5
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<7>
+{
+ 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 result_
+ {
+ typedef typename set7<
+ T0, T1, T2, T3, T4, T5, T6
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<8>
+{
+ 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 result_
+ {
+ typedef typename set8<
+ T0, T1, T2, T3, T4, T5, T6, T7
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<9>
+{
+ 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 result_
+ {
+ typedef typename set9<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<10>
+{
+ 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 result_
+ {
+ typedef typename set10<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<11>
+{
+ 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 result_
+ {
+ typedef typename set11<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<12>
+{
+ 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 result_
+ {
+ typedef typename set12<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<13>
+{
+ 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 result_
+ {
+ typedef typename set13<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<14>
+{
+ 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 result_
+ {
+ typedef typename set14<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<15>
+{
+ 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 result_
+ {
+ typedef typename set15<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<16>
+{
+ 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 result_
+ {
+ typedef typename set16<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<17>
+{
+ 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 result_
+ {
+ typedef typename set17<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<18>
+{
+ 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 result_
+ {
+ typedef typename set18<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<19>
+{
+ 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 result_
+ {
+ typedef typename set19<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<20>
+{
+ 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 result_
+ {
+ typedef typename set20<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< typename T >
+struct is_set_arg
+{
+ BOOST_STATIC_CONSTANT(bool, value = true);
+};
+
+template<>
+struct is_set_arg<na>
+{
+ BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+template<
+ 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 set_count_args
+{
+ BOOST_STATIC_CONSTANT(int, value =
+ is_set_arg<T1>::value + is_set_arg<T2>::value
+ + is_set_arg<T3>::value + is_set_arg<T4>::value
+ + is_set_arg<T5>::value + is_set_arg<T6>::value
+ + is_set_arg<T7>::value + is_set_arg<T8>::value
+ + is_set_arg<T9>::value + is_set_arg<T10>::value
+ + is_set_arg<T11>::value + is_set_arg<T12>::value
+ + is_set_arg<T13>::value + is_set_arg<T14>::value
+ + is_set_arg<T15>::value + is_set_arg<T16>::value
+ + is_set_arg<T17>::value + is_set_arg<T18>::value
+ + is_set_arg<T19>::value + is_set_arg<T20>::value
+ );
+
+};
+
+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 set_impl
+{
+ typedef aux::set_count_args<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ > arg_num_;
+
+ typedef typename aux::set_chooser< arg_num_::value >
+ ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+} // namespace aux
+
+template<
+ typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+ , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+ , typename T12 = na, typename T13 = na, typename T14 = na
+ , typename T15 = na, typename T16 = na, typename T17 = na
+ , typename T18 = na, typename T19 = na
+ >
+struct set
+ : aux::set_impl<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ >::type
+{
+ typedef typename aux::set_impl<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc70/set_c.hpp b/boost/boost/mpl/aux_/preprocessed/msvc70/set_c.hpp
new file mode 100644
index 00000000000..1ff34f9032a
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc70/set_c.hpp
@@ -0,0 +1,534 @@
+
+// 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/set_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< int N >
+struct set_c_chooser;
+
+}
+
+namespace aux {
+
+template<>
+struct set_c_chooser<0>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set0_c<
+ T
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<1>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set1_c<
+ T, C0
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<2>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set2_c<
+ T, C0, C1
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<3>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set3_c<
+ T, C0, C1, C2
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<4>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set4_c<
+ T, C0, C1, C2, C3
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<5>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set5_c<
+ T, C0, C1, C2, C3, C4
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<6>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set6_c<
+ T, C0, C1, C2, C3, C4, C5
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<7>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set7_c<
+ T, C0, C1, C2, C3, C4, C5, C6
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<8>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set8_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<9>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set9_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<10>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set10_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<11>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set11_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<12>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set12_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<13>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set13_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<14>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set14_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<15>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set15_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<16>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set16_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<17>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set17_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<18>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set18_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<19>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set19_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<20>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set20_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< long C >
+struct is_set_c_arg
+{
+ BOOST_STATIC_CONSTANT(bool, value = true);
+};
+
+template<>
+struct is_set_c_arg<LONG_MAX>
+{
+ BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+template<
+ long C1, long C2, long C3, long C4, long C5, long C6, long C7, long C8
+ , long C9, long C10, long C11, long C12, long C13, long C14, long C15
+ , long C16, long C17, long C18, long C19, long C20
+ >
+struct set_c_count_args
+{
+ BOOST_STATIC_CONSTANT(int, value =
+ is_set_c_arg<C1>::value + is_set_c_arg<C2>::value
+ + is_set_c_arg<C3>::value + is_set_c_arg<C4>::value
+ + is_set_c_arg<C5>::value + is_set_c_arg<C6>::value
+ + is_set_c_arg<C7>::value + is_set_c_arg<C8>::value
+ + is_set_c_arg<C9>::value + is_set_c_arg<C10>::value
+ + is_set_c_arg<C11>::value + is_set_c_arg<C12>::value
+ + is_set_c_arg<C13>::value + is_set_c_arg<C14>::value
+ + is_set_c_arg<C15>::value + is_set_c_arg<C16>::value
+ + is_set_c_arg<C17>::value + is_set_c_arg<C18>::value
+ + is_set_c_arg<C19>::value + is_set_c_arg<C20>::value
+ );
+
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+struct set_c_impl
+{
+ typedef aux::set_c_count_args<
+ C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+ > arg_num_;
+
+ typedef typename aux::set_c_chooser< arg_num_::value >
+ ::template result_< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;
+};
+
+} // namespace aux
+
+template<
+ typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+ , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+ , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+ , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+ , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+ , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+ , long C18 = LONG_MAX, long C19 = LONG_MAX
+ >
+struct set_c
+ : aux::set_c_impl<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+ >::type
+{
+ typedef typename aux::set_c_impl<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+ >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc70/shift_left.hpp b/boost/boost/mpl/aux_/preprocessed/msvc70/shift_left.hpp
new file mode 100644
index 00000000000..176fc000074
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc70/shift_left.hpp
@@ -0,0 +1,114 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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)
+//
+
+// Preprocessed version of "boost/mpl/shift_left.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+ >
+struct shift_left_impl
+ : if_c<
+ ( tag1_ > tag2_ )
+ , aux::cast2nd_impl< shift_left_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< shift_left_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct shift_left_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct shift_left_impl< na,integral_c_tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct shift_left_impl< integral_c_tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct shift_left_tag
+ : tag< T,na >
+{
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct shift_left
+ : aux::msvc_eti_base< typename apply_wrap2<
+ shift_left_impl<
+ typename shift_left_tag<N1>::type
+ , typename shift_left_tag<N2>::type
+ >
+ , N1
+ , N2
+ >::type >::type
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_left, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_left)
+
+}}
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< typename T, typename Shift, T n, Shift s >
+struct shift_left_wknd
+{
+ BOOST_STATIC_CONSTANT(T, value = (n << s));
+ typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct shift_left_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N, typename S > struct apply
+ : aux::shift_left_wknd<
+ typename N::value_type
+ , typename S::value_type
+ , N::value
+ , S::value
+ >::type
+
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc70/shift_right.hpp b/boost/boost/mpl/aux_/preprocessed/msvc70/shift_right.hpp
new file mode 100644
index 00000000000..6b6e01ff368
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc70/shift_right.hpp
@@ -0,0 +1,114 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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)
+//
+
+// Preprocessed version of "boost/mpl/shift_right.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+ >
+struct shift_right_impl
+ : if_c<
+ ( tag1_ > tag2_ )
+ , aux::cast2nd_impl< shift_right_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< shift_right_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct shift_right_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct shift_right_impl< na,integral_c_tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct shift_right_impl< integral_c_tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct shift_right_tag
+ : tag< T,na >
+{
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct shift_right
+ : aux::msvc_eti_base< typename apply_wrap2<
+ shift_right_impl<
+ typename shift_right_tag<N1>::type
+ , typename shift_right_tag<N2>::type
+ >
+ , N1
+ , N2
+ >::type >::type
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_right, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_right)
+
+}}
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< typename T, typename Shift, T n, Shift s >
+struct shift_right_wknd
+{
+ BOOST_STATIC_CONSTANT(T, value = (n >> s));
+ typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct shift_right_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N, typename S > struct apply
+ : aux::shift_right_wknd<
+ typename N::value_type
+ , typename S::value_type
+ , N::value
+ , S::value
+ >::type
+
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc70/template_arity.hpp b/boost/boost/mpl/aux_/preprocessed/msvc70/template_arity.hpp
new file mode 100644
index 00000000000..16687713492
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc70/template_arity.hpp
@@ -0,0 +1,46 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/aux_/template_arity.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+template< bool >
+struct template_arity_impl
+{
+ template< typename F > struct result_
+ : mpl::int_< -1 >
+ {
+ };
+};
+
+template<>
+struct template_arity_impl<true>
+{
+ template< typename F > struct result_
+ : F::arity
+ {
+ };
+};
+
+template< typename F >
+struct template_arity
+ : template_arity_impl< ::boost::mpl::aux::has_rebind<F>::value >
+ ::template result_<F>
+{
+};
+
+template<>
+struct template_arity<int>
+ : mpl::int_< -1 >
+{
+};
+
+}}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc70/times.hpp b/boost/boost/mpl/aux_/preprocessed/msvc70/times.hpp
new file mode 100644
index 00000000000..a6ae333ccad
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc70/times.hpp
@@ -0,0 +1,150 @@
+
+// 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/times.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+ , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+ >
+struct times_impl
+ : if_c<
+ ( tag1_ > tag2_ )
+ , aux::cast2nd_impl< times_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< times_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct times_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct times_impl< na,integral_c_tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct times_impl< integral_c_tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct times_tag
+ : tag< T,na >
+{
+};
+
+/// forward declaration
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct times2;
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct times
+
+ : aux::msvc_eti_base< typename if_<
+
+ is_na<N3>
+ , times2< N1,N2 >
+ , times<
+ times2< N1,N2 >
+ , N3, N4, N5
+ >
+ >::type
+
+ >
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , times
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1
+ , typename N2
+ >
+struct times2
+ : aux::msvc_eti_base< typename apply_wrap2<
+ times_impl<
+ typename times_tag<N1>::type
+ , typename times_tag<N2>::type
+ >
+ , N1
+ , N2
+ >::type >::type
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, times2, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, times)
+
+}}
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< typename T, T n1, T n2 >
+struct times_wknd
+{
+ BOOST_STATIC_CONSTANT(T, value = (n1 * n2));
+ typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct times_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+ : aux::times_wknd<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , N1::value
+ , N2::value
+ >::type
+
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc70/unpack_args.hpp b/boost/boost/mpl/aux_/preprocessed/msvc70/unpack_args.hpp
new file mode 100644
index 00000000000..26533dd4236
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc70/unpack_args.hpp
@@ -0,0 +1,109 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/unpack_args.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template< BOOST_MPL_AUX_NTTP_DECL(int, size) > struct unpack_args_impl
+{
+ template< typename F, typename Args > struct apply;
+};
+
+template<> struct unpack_args_impl<0>
+{
+ template< typename F, typename Args > struct apply
+ : apply0<
+ F
+ >
+ {
+ };
+};
+
+template<> struct unpack_args_impl<1>
+{
+ template< typename F, typename Args > struct apply
+ : apply1<
+ F
+ , typename at_c< Args,0 >::type
+ >
+ {
+ };
+};
+
+template<> struct unpack_args_impl<2>
+{
+ template< typename F, typename Args > struct apply
+ : apply2<
+ F
+ , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+ >
+ {
+ };
+};
+
+template<> struct unpack_args_impl<3>
+{
+ template< typename F, typename Args > struct apply
+ : apply3<
+ F
+ , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+ , typename at_c< Args,2 >::type
+ >
+ {
+ };
+};
+
+template<> struct unpack_args_impl<4>
+{
+ template< typename F, typename Args > struct apply
+ : apply4<
+ F
+ , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+ , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type
+ >
+ {
+ };
+};
+
+template<> struct unpack_args_impl<5>
+{
+ template< typename F, typename Args > struct apply
+ : apply5<
+ F
+ , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+ , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type
+ , typename at_c< Args,4 >::type
+ >
+ {
+ };
+};
+
+}
+
+template<
+ typename F
+ >
+struct unpack_args
+{
+ template< typename Args > struct apply
+
+ : aux::unpack_args_impl< size<Args>::value >
+ ::template apply< F,Args >
+
+ {
+ };
+};
+
+BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args)
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc70/vector.hpp b/boost/boost/mpl/aux_/preprocessed/msvc70/vector.hpp
new file mode 100644
index 00000000000..a6c7b6219a6
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc70/vector.hpp
@@ -0,0 +1,556 @@
+
+// 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/vector.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< int N >
+struct vector_chooser;
+
+}
+
+namespace aux {
+
+template<>
+struct vector_chooser<0>
+{
+ 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 result_
+ {
+ typedef vector0<
+
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<1>
+{
+ 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 result_
+ {
+ typedef typename vector1<
+ T0
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<2>
+{
+ 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 result_
+ {
+ typedef typename vector2<
+ T0, T1
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<3>
+{
+ 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 result_
+ {
+ typedef typename vector3<
+ T0, T1, T2
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<4>
+{
+ 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 result_
+ {
+ typedef typename vector4<
+ T0, T1, T2, T3
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<5>
+{
+ 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 result_
+ {
+ typedef typename vector5<
+ T0, T1, T2, T3, T4
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<6>
+{
+ 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 result_
+ {
+ typedef typename vector6<
+ T0, T1, T2, T3, T4, T5
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<7>
+{
+ 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 result_
+ {
+ typedef typename vector7<
+ T0, T1, T2, T3, T4, T5, T6
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<8>
+{
+ 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 result_
+ {
+ typedef typename vector8<
+ T0, T1, T2, T3, T4, T5, T6, T7
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<9>
+{
+ 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 result_
+ {
+ typedef typename vector9<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<10>
+{
+ 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 result_
+ {
+ typedef typename vector10<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<11>
+{
+ 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 result_
+ {
+ typedef typename vector11<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<12>
+{
+ 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 result_
+ {
+ typedef typename vector12<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<13>
+{
+ 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 result_
+ {
+ typedef typename vector13<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<14>
+{
+ 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 result_
+ {
+ typedef typename vector14<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<15>
+{
+ 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 result_
+ {
+ typedef typename vector15<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<16>
+{
+ 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 result_
+ {
+ typedef typename vector16<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<17>
+{
+ 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 result_
+ {
+ typedef typename vector17<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<18>
+{
+ 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 result_
+ {
+ typedef typename vector18<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<19>
+{
+ 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 result_
+ {
+ typedef typename vector19<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<20>
+{
+ 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 result_
+ {
+ typedef typename vector20<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< typename T >
+struct is_vector_arg
+{
+ BOOST_STATIC_CONSTANT(bool, value = true);
+};
+
+template<>
+struct is_vector_arg<na>
+{
+ BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+template<
+ 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 vector_count_args
+{
+ BOOST_STATIC_CONSTANT(int, value =
+ is_vector_arg<T1>::value + is_vector_arg<T2>::value
+ + is_vector_arg<T3>::value + is_vector_arg<T4>::value
+ + is_vector_arg<T5>::value + is_vector_arg<T6>::value
+ + is_vector_arg<T7>::value + is_vector_arg<T8>::value
+ + is_vector_arg<T9>::value + is_vector_arg<T10>::value
+ + is_vector_arg<T11>::value + is_vector_arg<T12>::value
+ + is_vector_arg<T13>::value + is_vector_arg<T14>::value
+ + is_vector_arg<T15>::value + is_vector_arg<T16>::value
+ + is_vector_arg<T17>::value + is_vector_arg<T18>::value
+ + is_vector_arg<T19>::value + is_vector_arg<T20>::value
+ );
+
+};
+
+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 vector_impl
+{
+ typedef aux::vector_count_args<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ > arg_num_;
+
+ typedef typename aux::vector_chooser< arg_num_::value >
+ ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+} // namespace aux
+
+template<
+ typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+ , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+ , typename T12 = na, typename T13 = na, typename T14 = na
+ , typename T15 = na, typename T16 = na, typename T17 = na
+ , typename T18 = na, typename T19 = na
+ >
+struct vector
+ : aux::vector_impl<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ >::type
+{
+ typedef typename aux::vector_impl<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/msvc70/vector_c.hpp b/boost/boost/mpl/aux_/preprocessed/msvc70/vector_c.hpp
new file mode 100644
index 00000000000..c522d0826ff
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/msvc70/vector_c.hpp
@@ -0,0 +1,534 @@
+
+// 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/vector_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< int N >
+struct vector_c_chooser;
+
+}
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<0>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector0_c<
+ T
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<1>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector1_c<
+ T, T(C0)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<2>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector2_c<
+ T, T(C0), T(C1)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<3>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector3_c<
+ T, T(C0), T(C1), T(C2)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<4>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector4_c<
+ T, T(C0), T(C1), T(C2), T(C3)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<5>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector5_c<
+ T, T(C0), T(C1), T(C2), T(C3), T(C4)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<6>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector6_c<
+ T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<7>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector7_c<
+ T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<8>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector8_c<
+ T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<9>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector9_c<
+ T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<10>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector10_c<
+ T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<11>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector11_c<
+ T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<12>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector12_c<
+ 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)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<13>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector13_c<
+ 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)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<14>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector14_c<
+ 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)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<15>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector15_c<
+ 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)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<16>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector16_c<
+ 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)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<17>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector17_c<
+ 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)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<18>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector18_c<
+ 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)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<19>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector19_c<
+ 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)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<20>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector20_c<
+ 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)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< long C >
+struct is_vector_c_arg
+{
+ BOOST_STATIC_CONSTANT(bool, value = true);
+};
+
+template<>
+struct is_vector_c_arg<LONG_MAX>
+{
+ BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+template<
+ long C1, long C2, long C3, long C4, long C5, long C6, long C7, long C8
+ , long C9, long C10, long C11, long C12, long C13, long C14, long C15
+ , long C16, long C17, long C18, long C19, long C20
+ >
+struct vector_c_count_args
+{
+ BOOST_STATIC_CONSTANT(int, value =
+ is_vector_c_arg<C1>::value + is_vector_c_arg<C2>::value
+ + is_vector_c_arg<C3>::value + is_vector_c_arg<C4>::value
+ + is_vector_c_arg<C5>::value + is_vector_c_arg<C6>::value
+ + is_vector_c_arg<C7>::value + is_vector_c_arg<C8>::value
+ + is_vector_c_arg<C9>::value + is_vector_c_arg<C10>::value
+ + is_vector_c_arg<C11>::value + is_vector_c_arg<C12>::value
+ + is_vector_c_arg<C13>::value + is_vector_c_arg<C14>::value
+ + is_vector_c_arg<C15>::value + is_vector_c_arg<C16>::value
+ + is_vector_c_arg<C17>::value + is_vector_c_arg<C18>::value
+ + is_vector_c_arg<C19>::value + is_vector_c_arg<C20>::value
+ );
+
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+struct vector_c_impl
+{
+ typedef aux::vector_c_count_args<
+ C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+ > arg_num_;
+
+ typedef typename aux::vector_c_chooser< arg_num_::value >
+ ::template result_< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;
+};
+
+} // namespace aux
+
+template<
+ typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+ , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+ , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+ , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+ , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+ , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+ , long C18 = LONG_MAX, long C19 = LONG_MAX
+ >
+struct vector_c
+ : aux::vector_c_impl<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+ >::type
+{
+ typedef typename aux::vector_c_impl<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+ >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/mwcw/advance_backward.hpp b/boost/boost/mpl/aux_/preprocessed/mwcw/advance_backward.hpp
new file mode 100644
index 00000000000..26de94cea1a
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/mwcw/advance_backward.hpp
@@ -0,0 +1,97 @@
+
+// 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/aux_/advance_backward.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+template< long N > struct advance_backward;
+template<>
+struct advance_backward<0>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef iter0 type;
+ };
+};
+
+template<>
+struct advance_backward<1>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename prior<iter0>::type iter1;
+ typedef iter1 type;
+ };
+};
+
+template<>
+struct advance_backward<2>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename prior<iter0>::type iter1;
+ typedef typename prior<iter1>::type iter2;
+ typedef iter2 type;
+ };
+};
+
+template<>
+struct advance_backward<3>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename prior<iter0>::type iter1;
+ typedef typename prior<iter1>::type iter2;
+ typedef typename prior<iter2>::type iter3;
+ typedef iter3 type;
+ };
+};
+
+template<>
+struct advance_backward<4>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename prior<iter0>::type iter1;
+ typedef typename prior<iter1>::type iter2;
+ typedef typename prior<iter2>::type iter3;
+ typedef typename prior<iter3>::type iter4;
+ typedef iter4 type;
+ };
+};
+
+template< long N >
+struct advance_backward
+{
+ template< typename Iterator > struct apply
+ {
+ typedef typename apply_wrap1<
+ advance_backward<4>
+ , Iterator
+ >::type chunk_result_;
+
+ typedef typename apply_wrap1<
+ advance_backward<(
+ (N - 4) < 0
+ ? 0
+ : N - 4
+ )>
+ , chunk_result_
+ >::type type;
+ };
+};
+
+}}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/mwcw/advance_forward.hpp b/boost/boost/mpl/aux_/preprocessed/mwcw/advance_forward.hpp
new file mode 100644
index 00000000000..b137cc72af1
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/mwcw/advance_forward.hpp
@@ -0,0 +1,97 @@
+
+// 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/aux_/advance_forward.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+template< long N > struct advance_forward;
+template<>
+struct advance_forward<0>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef iter0 type;
+ };
+};
+
+template<>
+struct advance_forward<1>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename next<iter0>::type iter1;
+ typedef iter1 type;
+ };
+};
+
+template<>
+struct advance_forward<2>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename next<iter0>::type iter1;
+ typedef typename next<iter1>::type iter2;
+ typedef iter2 type;
+ };
+};
+
+template<>
+struct advance_forward<3>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename next<iter0>::type iter1;
+ typedef typename next<iter1>::type iter2;
+ typedef typename next<iter2>::type iter3;
+ typedef iter3 type;
+ };
+};
+
+template<>
+struct advance_forward<4>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename next<iter0>::type iter1;
+ typedef typename next<iter1>::type iter2;
+ typedef typename next<iter2>::type iter3;
+ typedef typename next<iter3>::type iter4;
+ typedef iter4 type;
+ };
+};
+
+template< long N >
+struct advance_forward
+{
+ template< typename Iterator > struct apply
+ {
+ typedef typename apply_wrap1<
+ advance_forward<4>
+ , Iterator
+ >::type chunk_result_;
+
+ typedef typename apply_wrap1<
+ advance_forward<(
+ (N - 4) < 0
+ ? 0
+ : N - 4
+ )>
+ , chunk_result_
+ >::type type;
+ };
+};
+
+}}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/mwcw/and.hpp b/boost/boost/mpl/aux_/preprocessed/mwcw/and.hpp
new file mode 100644
index 00000000000..010ad1fc849
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/mwcw/and.hpp
@@ -0,0 +1,69 @@
+
+// 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/and.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template< bool C_, typename T1, typename T2, typename T3, typename T4 >
+struct and_impl
+ : false_
+{
+};
+
+template< typename T1, typename T2, typename T3, typename T4 >
+struct and_impl< true,T1,T2,T3,T4 >
+ : and_impl<
+ BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+ , T2, T3, T4
+ , true_
+ >
+{
+};
+
+template<>
+struct and_impl<
+ true
+ , true_, true_, true_, true_
+ >
+ : true_
+{
+};
+
+} // namespace aux
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(T1)
+ , typename BOOST_MPL_AUX_NA_PARAM(T2)
+ , typename T3 = true_, typename T4 = true_, typename T5 = true_
+ >
+struct and_
+
+ : aux::and_impl<
+ BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+ , T2, T3, T4, T5
+ >
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , and_
+ , ( T1, T2, T3, T4, T5)
+ )
+};
+
+BOOST_MPL_AUX_NA_SPEC2(
+ 2
+ , 5
+ , and_
+ )
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/mwcw/apply.hpp b/boost/boost/mpl/aux_/preprocessed/mwcw/apply.hpp
new file mode 100644
index 00000000000..e08eaccf03a
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/mwcw/apply.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/apply.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename F
+ >
+struct apply0
+
+ : apply_wrap0<
+ typename lambda<F>::type
+
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 1
+ , apply0
+ , (F )
+ )
+};
+
+template<
+ typename F
+ >
+struct apply< F,na,na,na,na,na >
+ : apply0<F>
+{
+};
+
+template<
+ typename F, typename T1
+ >
+struct apply1
+
+ : apply_wrap1<
+ typename lambda<F>::type
+ , T1
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 2
+ , apply1
+ , (F, T1)
+ )
+};
+
+template<
+ typename F, typename T1
+ >
+struct apply< F,T1,na,na,na,na >
+ : apply1< F,T1 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct apply2
+
+ : apply_wrap2<
+ typename lambda<F>::type
+ , T1, T2
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 3
+ , apply2
+ , (F, T1, T2)
+ )
+};
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct apply< F,T1,T2,na,na,na >
+ : apply2< F,T1,T2 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct apply3
+
+ : apply_wrap3<
+ typename lambda<F>::type
+ , T1, T2, T3
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 4
+ , apply3
+ , (F, T1, T2, T3)
+ )
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct apply< F,T1,T2,T3,na,na >
+ : apply3< F,T1,T2,T3 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct apply4
+
+ : apply_wrap4<
+ typename lambda<F>::type
+ , T1, T2, T3, T4
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , apply4
+ , (F, T1, T2, T3, T4)
+ )
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct apply< F,T1,T2,T3,T4,na >
+ : apply4< F,T1,T2,T3,T4 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct apply5
+
+ : apply_wrap5<
+ typename lambda<F>::type
+ , T1, T2, T3, T4, T5
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 6
+ , apply5
+ , (F, T1, T2, T3, T4, T5)
+ )
+};
+
+/// primary template (not a specialization!)
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct apply
+ : apply5< F,T1,T2,T3,T4,T5 >
+{
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/mwcw/apply_fwd.hpp b/boost/boost/mpl/aux_/preprocessed/mwcw/apply_fwd.hpp
new file mode 100644
index 00000000000..b2ed5d51301
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/mwcw/apply_fwd.hpp
@@ -0,0 +1,52 @@
+
+// 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/apply_fwd.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename F, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na
+ >
+struct apply;
+
+template<
+ typename F
+ >
+struct apply0;
+
+template<
+ typename F, typename T1
+ >
+struct apply1;
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct apply2;
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct apply3;
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct apply4;
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct apply5;
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/mwcw/apply_wrap.hpp b/boost/boost/mpl/aux_/preprocessed/mwcw/apply_wrap.hpp
new file mode 100644
index 00000000000..2ffe7091bc3
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/mwcw/apply_wrap.hpp
@@ -0,0 +1,456 @@
+
+// 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/apply_wrap.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ int N, typename F
+ >
+struct apply_wrap_impl0;
+
+template<
+ typename F
+ >
+struct apply_wrap_impl0<
+ 0
+ , F
+
+ >
+{
+ typedef typename F::template apply<
+
+/// since the defaults are "lost", we have to pass *something* even for nullary
+/// metafunction classes
+ na
+ > type;
+};
+
+template<
+ typename F
+ >
+struct apply_wrap_impl0<
+ 1
+ , F
+
+ >
+{
+ typedef typename F::template apply<
+
+ na
+ > type;
+};
+
+template<
+ typename F
+ >
+struct apply_wrap_impl0<
+ 2
+ , F
+
+ >
+{
+ typedef typename F::template apply<
+
+ na, na
+
+ > type;
+};
+
+template<
+ typename F
+ >
+struct apply_wrap_impl0<
+ 3
+ , F
+
+ >
+{
+ typedef typename F::template apply<
+
+ na, na, na
+
+ > type;
+};
+
+template<
+ typename F
+ >
+struct apply_wrap_impl0<
+ 4
+ , F
+
+ >
+{
+ typedef typename F::template apply<
+
+ na, na, na, na
+
+ > type;
+};
+
+template<
+ typename F
+ >
+struct apply_wrap_impl0<
+ 5
+ , F
+
+ >
+{
+ typedef typename F::template apply<
+
+ na, na, na, na, na
+
+ > type;
+};
+
+template<
+ typename F
+ >
+struct apply_wrap0
+ : apply_wrap_impl0<
+ ::boost::mpl::aux::arity< F,0 >::value
+ , F
+
+ >::type
+{
+};
+
+template<
+ int N, typename F, typename T1
+ >
+struct apply_wrap_impl1;
+
+template<
+ typename F, typename T1
+ >
+struct apply_wrap_impl1<
+ 1
+ , F
+ , T1
+ >
+{
+ typedef typename F::template apply<
+ T1
+ > type;
+};
+
+template<
+ typename F, typename T1
+ >
+struct apply_wrap_impl1<
+ 2
+ , F
+ , T1
+ >
+{
+ typedef typename F::template apply<
+ T1
+ , na
+
+ > type;
+};
+
+template<
+ typename F, typename T1
+ >
+struct apply_wrap_impl1<
+ 3
+ , F
+ , T1
+ >
+{
+ typedef typename F::template apply<
+ T1
+ , na, na
+
+ > type;
+};
+
+template<
+ typename F, typename T1
+ >
+struct apply_wrap_impl1<
+ 4
+ , F
+ , T1
+ >
+{
+ typedef typename F::template apply<
+ T1
+ , na, na, na
+
+ > type;
+};
+
+template<
+ typename F, typename T1
+ >
+struct apply_wrap_impl1<
+ 5
+ , F
+ , T1
+ >
+{
+ typedef typename F::template apply<
+ T1
+ , na, na, na, na
+
+ > type;
+};
+
+template<
+ typename F, typename T1
+ >
+struct apply_wrap1
+ : apply_wrap_impl1<
+ ::boost::mpl::aux::arity< F,1 >::value
+ , F
+ , T1
+ >::type
+{
+};
+
+template<
+ int N, typename F, typename T1, typename T2
+ >
+struct apply_wrap_impl2;
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct apply_wrap_impl2<
+ 2
+ , F
+ , T1, T2
+ >
+{
+ typedef typename F::template apply<
+ T1, T2
+
+ > type;
+};
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct apply_wrap_impl2<
+ 3
+ , F
+ , T1, T2
+ >
+{
+ typedef typename F::template apply<
+ T1, T2
+
+ , na
+
+ > type;
+};
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct apply_wrap_impl2<
+ 4
+ , F
+ , T1, T2
+ >
+{
+ typedef typename F::template apply<
+ T1, T2
+
+ , na, na
+
+ > type;
+};
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct apply_wrap_impl2<
+ 5
+ , F
+ , T1, T2
+ >
+{
+ typedef typename F::template apply<
+ T1, T2
+
+ , na, na, na
+
+ > type;
+};
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct apply_wrap2
+ : apply_wrap_impl2<
+ ::boost::mpl::aux::arity< F,2 >::value
+ , F
+ , T1, T2
+ >::type
+{
+};
+
+template<
+ int N, typename F, typename T1, typename T2, typename T3
+ >
+struct apply_wrap_impl3;
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct apply_wrap_impl3<
+ 3
+ , F
+ , T1, T2, T3
+ >
+{
+ typedef typename F::template apply<
+ T1, T2, T3
+
+ > type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct apply_wrap_impl3<
+ 4
+ , F
+ , T1, T2, T3
+ >
+{
+ typedef typename F::template apply<
+ T1, T2, T3
+
+ , na
+
+ > type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct apply_wrap_impl3<
+ 5
+ , F
+ , T1, T2, T3
+ >
+{
+ typedef typename F::template apply<
+ T1, T2, T3
+
+ , na, na
+
+ > type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct apply_wrap3
+ : apply_wrap_impl3<
+ ::boost::mpl::aux::arity< F,3 >::value
+ , F
+ , T1, T2, T3
+ >::type
+{
+};
+
+template<
+ int N, typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct apply_wrap_impl4;
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct apply_wrap_impl4<
+ 4
+ , F
+ , T1, T2, T3, T4
+ >
+{
+ typedef typename F::template apply<
+ T1, T2, T3, T4
+
+ > type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct apply_wrap_impl4<
+ 5
+ , F
+ , T1, T2, T3, T4
+ >
+{
+ typedef typename F::template apply<
+ T1, T2, T3, T4
+
+ , na
+
+ > type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct apply_wrap4
+ : apply_wrap_impl4<
+ ::boost::mpl::aux::arity< F,4 >::value
+ , F
+ , T1, T2, T3, T4
+ >::type
+{
+};
+
+template<
+ int N, typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct apply_wrap_impl5;
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct apply_wrap_impl5<
+ 5
+ , F
+ , T1, T2, T3, T4, T5
+ >
+{
+ typedef typename F::template apply<
+ T1, T2, T3, T4, T5
+
+ > type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct apply_wrap5
+ : apply_wrap_impl5<
+ ::boost::mpl::aux::arity< F,5 >::value
+ , F
+ , T1, T2, T3, T4, T5
+ >::type
+{
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/mwcw/arg.hpp b/boost/boost/mpl/aux_/preprocessed/mwcw/arg.hpp
new file mode 100644
index 00000000000..6f2f8a80709
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/mwcw/arg.hpp
@@ -0,0 +1,123 @@
+
+// Copyright Peter Dimov 2001-2002
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/arg.hpp" header
+// -- DO NOT modify by hand!
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+template<> struct arg< -1 >
+{
+ BOOST_STATIC_CONSTANT(int, value = -1);
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ typedef U1 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+template<> struct arg<1>
+{
+ BOOST_STATIC_CONSTANT(int, value = 1);
+ typedef arg<2> next;
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ typedef U1 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+template<> struct arg<2>
+{
+ BOOST_STATIC_CONSTANT(int, value = 2);
+ typedef arg<3> next;
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ typedef U2 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+template<> struct arg<3>
+{
+ BOOST_STATIC_CONSTANT(int, value = 3);
+ typedef arg<4> next;
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ typedef U3 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+template<> struct arg<4>
+{
+ BOOST_STATIC_CONSTANT(int, value = 4);
+ typedef arg<5> next;
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ typedef U4 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+template<> struct arg<5>
+{
+ BOOST_STATIC_CONSTANT(int, value = 5);
+ typedef arg<6> next;
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ typedef U5 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+BOOST_MPL_AUX_NONTYPE_ARITY_SPEC(1,int, arg)
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
diff --git a/boost/boost/mpl/aux_/preprocessed/mwcw/basic_bind.hpp b/boost/boost/mpl/aux_/preprocessed/mwcw/basic_bind.hpp
new file mode 100644
index 00000000000..b0702324aaf
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/mwcw/basic_bind.hpp
@@ -0,0 +1,440 @@
+
+// Copyright Peter Dimov 2001
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/aux_/basic_bind.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template<
+ typename T, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg
+{
+ typedef T type;
+};
+
+template<
+ int N, typename U1, typename U2, typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >
+{
+ typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg< bind< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 >
+{
+ typedef bind< F,T1,T2,T3,T4,T5 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+template<
+ typename F
+ >
+struct bind0
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+
+ public:
+ typedef typename apply_wrap0<
+ f_
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg<
+ bind0<F>, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind0<F> f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(1, bind0)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)
+
+template<
+ typename F
+ >
+struct bind< F,na,na,na,na,na >
+ : bind0<F>
+{
+};
+
+template<
+ typename F, typename T1
+ >
+struct bind1
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+
+ public:
+ typedef typename apply_wrap1<
+ f_
+ , typename t1::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename U1, typename U2, typename U3
+ , typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind1< F,T1 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind1< F,T1 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(2, bind1)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)
+
+template<
+ typename F, typename T1
+ >
+struct bind< F,T1,na,na,na,na >
+ : bind1< F,T1 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct bind2
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+ typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+
+ public:
+ typedef typename apply_wrap2<
+ f_
+ , typename t1::type, typename t2::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename U1, typename U2
+ , typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind2< F,T1,T2 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind2< F,T1,T2 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(3, bind2)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct bind< F,T1,T2,na,na,na >
+ : bind2< F,T1,T2 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct bind3
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+ typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+ typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+
+ public:
+ typedef typename apply_wrap3<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename U1
+ , typename U2, typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind3< F,T1,T2,T3 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(4, bind3)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct bind< F,T1,T2,T3,na,na >
+ : bind3< F,T1,T2,T3 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct bind4
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+ typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+ typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+ typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;
+
+ public:
+ typedef typename apply_wrap4<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ , typename t4::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename U1, typename U2, typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind4< F,T1,T2,T3,T4 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct bind< F,T1,T2,T3,T4,na >
+ : bind4< F,T1,T2,T3,T4 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct bind5
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+ typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+ typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+ typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;
+ typedef aux::resolve_bind_arg< T5,U1,U2,U3,U4,U5 > t5;
+
+ public:
+ typedef typename apply_wrap5<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ , typename t4::type, typename t5::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg<
+ bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind5< F,T1,T2,T3,T4,T5 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
+
+/// primary template (not a specialization!)
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct bind
+ : bind5< F,T1,T2,T3,T4,T5 >
+{
+};
+
+/// if_/eval_if specializations
+template< template< typename T1, typename T2, typename T3 > class F, typename Tag >
+struct quote3;
+
+template< typename T1, typename T2, typename T3 > struct if_;
+
+template<
+ typename Tag, typename T1, typename T2, typename T3
+ >
+struct bind3<
+ quote3< if_,Tag >
+ , T1, T2, T3
+ >
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef mpl::arg<1> n1;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+ typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+ typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+ typedef typename if_<
+ typename t1::type
+ , t2, t3
+ >::type f_;
+
+ public:
+ typedef typename f_::type type;
+ };
+};
+
+template<
+ template< typename T1, typename T2, typename T3 > class F, typename Tag
+ >
+struct quote3;
+
+template< typename T1, typename T2, typename T3 > struct eval_if;
+
+template<
+ typename Tag, typename T1, typename T2, typename T3
+ >
+struct bind3<
+ quote3< eval_if,Tag >
+ , T1, T2, T3
+ >
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef mpl::arg<1> n1;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+ typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+ typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+ typedef typename eval_if<
+ typename t1::type
+ , t2, t3
+ >::type f_;
+
+ public:
+ typedef typename f_::type type;
+ };
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/mwcw/bind.hpp b/boost/boost/mpl/aux_/preprocessed/mwcw/bind.hpp
new file mode 100644
index 00000000000..0e9513a649a
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/mwcw/bind.hpp
@@ -0,0 +1,561 @@
+
+// Copyright Peter Dimov 2001
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/bind.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template<
+ typename T, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg
+{
+ typedef T type;
+};
+
+template<
+ typename T
+ , typename Arg
+ >
+struct replace_unnamed_arg
+{
+ typedef Arg next;
+ typedef T type;
+};
+
+template<
+ typename Arg
+ >
+struct replace_unnamed_arg< arg< -1 >, Arg >
+{
+ typedef typename Arg::next next;
+ typedef Arg type;
+};
+
+template<
+ int N, typename U1, typename U2, typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >
+{
+ typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg< bind< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 >
+{
+ typedef bind< F,T1,T2,T3,T4,T5 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+template<
+ typename F
+ >
+struct bind0
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ public:
+ typedef typename apply_wrap0<
+ f_
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg<
+ bind0<F>, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind0<F> f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(1, bind0)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)
+
+template<
+ typename F
+ >
+struct bind< F,na,na,na,na,na >
+ : bind0<F>
+{
+};
+
+template<
+ typename F, typename T1
+ >
+struct bind1
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ public:
+ typedef typename apply_wrap1<
+ f_
+ , typename t1::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename U1, typename U2, typename U3
+ , typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind1< F,T1 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind1< F,T1 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(2, bind1)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)
+
+template<
+ typename F, typename T1
+ >
+struct bind< F,T1,na,na,na,na >
+ : bind1< F,T1 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct bind2
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ typedef aux::replace_unnamed_arg< T2,n2 > r2;
+ typedef typename r2::type a2;
+ typedef typename r2::next n3;
+ typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+ ///
+ public:
+ typedef typename apply_wrap2<
+ f_
+ , typename t1::type, typename t2::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename U1, typename U2
+ , typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind2< F,T1,T2 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind2< F,T1,T2 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(3, bind2)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct bind< F,T1,T2,na,na,na >
+ : bind2< F,T1,T2 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct bind3
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ typedef aux::replace_unnamed_arg< T2,n2 > r2;
+ typedef typename r2::type a2;
+ typedef typename r2::next n3;
+ typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+ ///
+ typedef aux::replace_unnamed_arg< T3,n3 > r3;
+ typedef typename r3::type a3;
+ typedef typename r3::next n4;
+ typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+ ///
+ public:
+ typedef typename apply_wrap3<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename U1
+ , typename U2, typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind3< F,T1,T2,T3 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(4, bind3)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct bind< F,T1,T2,T3,na,na >
+ : bind3< F,T1,T2,T3 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct bind4
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ typedef aux::replace_unnamed_arg< T2,n2 > r2;
+ typedef typename r2::type a2;
+ typedef typename r2::next n3;
+ typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+ ///
+ typedef aux::replace_unnamed_arg< T3,n3 > r3;
+ typedef typename r3::type a3;
+ typedef typename r3::next n4;
+ typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+ ///
+ typedef aux::replace_unnamed_arg< T4,n4 > r4;
+ typedef typename r4::type a4;
+ typedef typename r4::next n5;
+ typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
+ ///
+ public:
+ typedef typename apply_wrap4<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ , typename t4::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename U1, typename U2, typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind4< F,T1,T2,T3,T4 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct bind< F,T1,T2,T3,T4,na >
+ : bind4< F,T1,T2,T3,T4 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct bind5
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ typedef aux::replace_unnamed_arg< T2,n2 > r2;
+ typedef typename r2::type a2;
+ typedef typename r2::next n3;
+ typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+ ///
+ typedef aux::replace_unnamed_arg< T3,n3 > r3;
+ typedef typename r3::type a3;
+ typedef typename r3::next n4;
+ typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+ ///
+ typedef aux::replace_unnamed_arg< T4,n4 > r4;
+ typedef typename r4::type a4;
+ typedef typename r4::next n5;
+ typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
+ ///
+ typedef aux::replace_unnamed_arg< T5,n5 > r5;
+ typedef typename r5::type a5;
+ typedef typename r5::next n6;
+ typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5;
+ ///
+ public:
+ typedef typename apply_wrap5<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ , typename t4::type, typename t5::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg<
+ bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind5< F,T1,T2,T3,T4,T5 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
+
+/// primary template (not a specialization!)
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct bind
+ : bind5< F,T1,T2,T3,T4,T5 >
+{
+};
+
+/// if_/eval_if specializations
+template< template< typename T1, typename T2, typename T3 > class F, typename Tag >
+struct quote3;
+
+template< typename T1, typename T2, typename T3 > struct if_;
+
+template<
+ typename Tag, typename T1, typename T2, typename T3
+ >
+struct bind3<
+ quote3< if_,Tag >
+ , T1, T2, T3
+ >
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef mpl::arg<1> n1;
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ typedef aux::replace_unnamed_arg< T2,n2 > r2;
+ typedef typename r2::type a2;
+ typedef typename r2::next n3;
+ typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+ ///
+ typedef aux::replace_unnamed_arg< T3,n3 > r3;
+ typedef typename r3::type a3;
+ typedef typename r3::next n4;
+ typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+ ///
+ typedef typename if_<
+ typename t1::type
+ , t2, t3
+ >::type f_;
+
+ public:
+ typedef typename f_::type type;
+ };
+};
+
+template<
+ template< typename T1, typename T2, typename T3 > class F, typename Tag
+ >
+struct quote3;
+
+template< typename T1, typename T2, typename T3 > struct eval_if;
+
+template<
+ typename Tag, typename T1, typename T2, typename T3
+ >
+struct bind3<
+ quote3< eval_if,Tag >
+ , T1, T2, T3
+ >
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef mpl::arg<1> n1;
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ typedef aux::replace_unnamed_arg< T2,n2 > r2;
+ typedef typename r2::type a2;
+ typedef typename r2::next n3;
+ typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+ ///
+ typedef aux::replace_unnamed_arg< T3,n3 > r3;
+ typedef typename r3::type a3;
+ typedef typename r3::next n4;
+ typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+ ///
+ typedef typename eval_if<
+ typename t1::type
+ , t2, t3
+ >::type f_;
+
+ public:
+ typedef typename f_::type type;
+ };
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/mwcw/bind_fwd.hpp b/boost/boost/mpl/aux_/preprocessed/mwcw/bind_fwd.hpp
new file mode 100644
index 00000000000..c4a5060ff8b
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/mwcw/bind_fwd.hpp
@@ -0,0 +1,52 @@
+
+// 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/bind_fwd.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename F, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na
+ >
+struct bind;
+
+template<
+ typename F
+ >
+struct bind0;
+
+template<
+ typename F, typename T1
+ >
+struct bind1;
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct bind2;
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct bind3;
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct bind4;
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct bind5;
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/mwcw/bitand.hpp b/boost/boost/mpl/aux_/preprocessed/mwcw/bitand.hpp
new file mode 100644
index 00000000000..0bbf54ea26d
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/mwcw/bitand.hpp
@@ -0,0 +1,147 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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)
+//
+
+// Preprocessed version of "boost/mpl/bitand.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct bitand_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< bitand_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< bitand_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitand_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct bitand_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct bitand_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct bitand_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct bitand_
+ : bitand_< bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>, N5>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , bitand_
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3, typename N4
+ >
+struct bitand_< N1,N2,N3,N4,na >
+
+ : bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitand_
+ , ( N1, N2, N3, N4, na )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3
+ >
+struct bitand_< N1,N2,N3,na,na >
+
+ : bitand_< bitand_< N1,N2 >, N3>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitand_
+ , ( N1, N2, N3, na, na )
+ )
+};
+
+template<
+ typename N1, typename N2
+ >
+struct bitand_< N1,N2,na,na,na >
+ : bitand_impl<
+ typename bitand_tag<N1>::type
+ , typename bitand_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitand_
+ , ( N1, N2, na, na, na )
+ )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitand_)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct bitand_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ & BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/mwcw/bitor.hpp b/boost/boost/mpl/aux_/preprocessed/mwcw/bitor.hpp
new file mode 100644
index 00000000000..55b31cb8a9c
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/mwcw/bitor.hpp
@@ -0,0 +1,147 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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)
+//
+
+// Preprocessed version of "boost/mpl/bitor.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct bitor_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< bitor_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< bitor_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitor_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct bitor_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct bitor_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct bitor_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct bitor_
+ : bitor_< bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>, N5>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , bitor_
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3, typename N4
+ >
+struct bitor_< N1,N2,N3,N4,na >
+
+ : bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitor_
+ , ( N1, N2, N3, N4, na )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3
+ >
+struct bitor_< N1,N2,N3,na,na >
+
+ : bitor_< bitor_< N1,N2 >, N3>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitor_
+ , ( N1, N2, N3, na, na )
+ )
+};
+
+template<
+ typename N1, typename N2
+ >
+struct bitor_< N1,N2,na,na,na >
+ : bitor_impl<
+ typename bitor_tag<N1>::type
+ , typename bitor_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitor_
+ , ( N1, N2, na, na, na )
+ )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitor_)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct bitor_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ | BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/mwcw/bitxor.hpp b/boost/boost/mpl/aux_/preprocessed/mwcw/bitxor.hpp
new file mode 100644
index 00000000000..ec1939151d0
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/mwcw/bitxor.hpp
@@ -0,0 +1,147 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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)
+//
+
+// Preprocessed version of "boost/mpl/bitxor.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct bitxor_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< bitxor_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< bitxor_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitxor_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct bitxor_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct bitxor_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct bitxor_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct bitxor_
+ : bitxor_< bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4>, N5>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , bitxor_
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3, typename N4
+ >
+struct bitxor_< N1,N2,N3,N4,na >
+
+ : bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitxor_
+ , ( N1, N2, N3, N4, na )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3
+ >
+struct bitxor_< N1,N2,N3,na,na >
+
+ : bitxor_< bitxor_< N1,N2 >, N3>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitxor_
+ , ( N1, N2, N3, na, na )
+ )
+};
+
+template<
+ typename N1, typename N2
+ >
+struct bitxor_< N1,N2,na,na,na >
+ : bitxor_impl<
+ typename bitxor_tag<N1>::type
+ , typename bitxor_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitxor_
+ , ( N1, N2, na, na, na )
+ )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitxor_)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct bitxor_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ ^ BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/mwcw/deque.hpp b/boost/boost/mpl/aux_/preprocessed/mwcw/deque.hpp
new file mode 100644
index 00000000000..de67398a37c
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/mwcw/deque.hpp
@@ -0,0 +1,323 @@
+
+// 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/deque.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+ , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+ , typename T12 = na, typename T13 = na, typename T14 = na
+ , typename T15 = na, typename T16 = na, typename T17 = na
+ , typename T18 = na, typename T19 = na
+ >
+struct deque;
+
+template<
+
+ >
+struct deque<
+ na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector0< >
+{
+ typedef vector0< >::type type;
+};
+
+template<
+ typename T0
+ >
+struct deque<
+ T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector1<T0>
+{
+ typedef typename vector1<T0>::type type;
+};
+
+template<
+ typename T0, typename T1
+ >
+struct deque<
+ T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector2< T0,T1 >
+{
+ typedef typename vector2< T0,T1 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2
+ >
+struct deque<
+ T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector3< T0,T1,T2 >
+{
+ typedef typename vector3< T0,T1,T2 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3
+ >
+struct deque<
+ T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector4< T0,T1,T2,T3 >
+{
+ typedef typename vector4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ >
+struct deque<
+ T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector5< T0,T1,T2,T3,T4 >
+{
+ typedef typename vector5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct deque<
+ T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector6< T0,T1,T2,T3,T4,T5 >
+{
+ typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6
+ >
+struct deque<
+ T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector7< T0,T1,T2,T3,T4,T5,T6 >
+{
+ typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7
+ >
+struct deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+ typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8
+ >
+struct deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+ typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ >
+struct deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+ typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ , typename T10
+ >
+struct deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+ typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+ , na, na, na, na
+ >
+ : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+ typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+ , na, na, na, na
+ >
+ : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+ typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+ , na, na, na, na
+ >
+ : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+ typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+ , na, na, na, na
+ >
+ : vector15<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ >
+{
+ typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, na, na, na, na
+ >
+ : vector16<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15
+ >
+{
+ typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, na, na, na
+ >
+ : vector17<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16
+ >
+{
+ typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, na, na
+ >
+ : vector18<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17
+ >
+{
+ typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, na
+ >
+ : vector19<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18
+ >
+{
+ typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+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 deque
+ : vector20<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, T19
+ >
+{
+ typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/mwcw/divides.hpp b/boost/boost/mpl/aux_/preprocessed/mwcw/divides.hpp
new file mode 100644
index 00000000000..86f16826f79
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/mwcw/divides.hpp
@@ -0,0 +1,146 @@
+
+// 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/divides.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct divides_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< divides_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< divides_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct divides_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct divides_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct divides_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct divides_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct divides
+ : divides< divides< divides< divides< N1,N2 >, N3>, N4>, N5>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , divides
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3, typename N4
+ >
+struct divides< N1,N2,N3,N4,na >
+
+ : divides< divides< divides< N1,N2 >, N3>, N4>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , divides
+ , ( N1, N2, N3, N4, na )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3
+ >
+struct divides< N1,N2,N3,na,na >
+
+ : divides< divides< N1,N2 >, N3>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , divides
+ , ( N1, N2, N3, na, na )
+ )
+};
+
+template<
+ typename N1, typename N2
+ >
+struct divides< N1,N2,na,na,na >
+ : divides_impl<
+ typename divides_tag<N1>::type
+ , typename divides_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , divides
+ , ( N1, N2, na, na, na )
+ )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, divides)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct divides_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ / BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/mwcw/equal_to.hpp b/boost/boost/mpl/aux_/preprocessed/mwcw/equal_to.hpp
new file mode 100644
index 00000000000..62c994589f4
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/mwcw/equal_to.hpp
@@ -0,0 +1,94 @@
+
+// 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/equal_to.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct equal_to_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct equal_to_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct equal_to_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct equal_to_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct equal_to_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct equal_to
+
+ : equal_to_impl<
+ typename equal_to_tag<N1>::type
+ , typename equal_to_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, equal_to, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, equal_to)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct equal_to_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value == BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/mwcw/fold_impl.hpp b/boost/boost/mpl/aux_/preprocessed/mwcw/fold_impl.hpp
new file mode 100644
index 00000000000..9e7a29300d6
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/mwcw/fold_impl.hpp
@@ -0,0 +1,180 @@
+
+// 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/aux_/fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+ int N
+ , typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl;
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl< 0,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef state0 state;
+ typedef iter0 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl< 1,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+
+
+ typedef state1 state;
+ typedef iter1 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl< 2,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+
+
+ typedef state2 state;
+ typedef iter2 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl< 3,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;
+ typedef typename mpl::next<iter2>::type iter3;
+
+
+ typedef state3 state;
+ typedef iter3 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl< 4,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp, state3, typename deref<iter3>::type >::type state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef state4 state;
+ typedef iter4 iterator;
+};
+
+template<
+ int N
+ , typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl
+{
+ typedef fold_impl<
+ 4
+ , First
+ , Last
+ , State
+ , ForwardOp
+ > chunk_;
+
+ typedef fold_impl<
+ ( (N - 4) < 0 ? 0 : N - 4 )
+ , typename chunk_::iterator
+ , Last
+ , typename chunk_::state
+ , ForwardOp
+ > res_;
+
+ typedef typename res_::state state;
+ typedef typename res_::iterator iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl< -1,First,Last,State,ForwardOp >
+ : fold_impl<
+ -1
+ , typename mpl::next<First>::type
+ , Last
+ , typename apply2<ForwardOp,State, typename deref<First>::type>::type
+ , ForwardOp
+ >
+{
+};
+
+template<
+ typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl< -1,Last,Last,State,ForwardOp >
+{
+ typedef State state;
+ typedef Last iterator;
+};
+
+}}}
diff --git a/boost/boost/mpl/aux_/preprocessed/mwcw/full_lambda.hpp b/boost/boost/mpl/aux_/preprocessed/mwcw/full_lambda.hpp
new file mode 100644
index 00000000000..bf818731eba
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/mwcw/full_lambda.hpp
@@ -0,0 +1,554 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/aux_/full_lambda.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template<
+ bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false
+ , bool C5 = false
+ >
+struct lambda_or
+ : true_
+{
+};
+
+template<>
+struct lambda_or< false,false,false,false,false >
+ : false_
+{
+};
+
+} // namespace aux
+
+template<
+ typename T
+ , typename Tag
+
+ >
+struct lambda
+{
+ typedef false_ is_le;
+ typedef T result_;
+ typedef T type;
+};
+
+template<
+ typename T
+ >
+struct is_lambda_expression
+ : lambda<T>::is_le
+{
+};
+
+template< int N, typename Tag >
+struct lambda< arg<N>, Tag >
+{
+ typedef true_ is_le;
+ typedef mpl::arg<N> result_; // qualified for the sake of MIPSpro 7.41
+ typedef mpl::protect<result_> type;
+};
+
+template<
+ typename F
+ , typename Tag
+ >
+struct lambda<
+ bind0<F>
+ , Tag
+
+ >
+{
+ typedef false_ is_le;
+ typedef bind0<
+ F
+ > result_;
+
+ typedef result_ type;
+};
+
+namespace aux {
+
+template<
+ typename IsLE, typename Tag
+ , template< typename P1 > class F
+ , typename L1
+ >
+struct le_result1
+{
+ typedef F<
+ typename L1::type
+ > result_;
+
+ typedef result_ type;
+};
+
+template<
+ typename Tag
+ , template< typename P1 > class F
+ , typename L1
+ >
+struct le_result1< true_,Tag,F,L1 >
+{
+ typedef bind1<
+ quote1< F,Tag >
+ , typename L1::result_
+ > result_;
+
+ typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+ template< typename P1 > class F
+ , typename T1
+ , typename Tag
+ >
+struct lambda<
+ F<T1>
+ , Tag
+
+ >
+{
+ typedef lambda< T1,Tag > l1;
+ typedef typename l1::is_le is_le1;
+ typedef typename aux::lambda_or<
+ is_le1::value
+ >::type is_le;
+
+ typedef aux::le_result1<
+ is_le, Tag, F, l1
+ > le_result_;
+
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+template<
+ typename F, typename T1
+ , typename Tag
+ >
+struct lambda<
+ bind1< F,T1 >
+ , Tag
+
+ >
+{
+ typedef false_ is_le;
+ typedef bind1<
+ F
+ , T1
+ > result_;
+
+ typedef result_ type;
+};
+
+namespace aux {
+
+template<
+ typename IsLE, typename Tag
+ , template< typename P1, typename P2 > class F
+ , typename L1, typename L2
+ >
+struct le_result2
+{
+ typedef F<
+ typename L1::type, typename L2::type
+ > result_;
+
+ typedef result_ type;
+};
+
+template<
+ typename Tag
+ , template< typename P1, typename P2 > class F
+ , typename L1, typename L2
+ >
+struct le_result2< true_,Tag,F,L1,L2 >
+{
+ typedef bind2<
+ quote2< F,Tag >
+ , typename L1::result_, typename L2::result_
+ > result_;
+
+ typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+ template< typename P1, typename P2 > class F
+ , typename T1, typename T2
+ , typename Tag
+ >
+struct lambda<
+ F< T1,T2 >
+ , Tag
+
+ >
+{
+ typedef lambda< T1,Tag > l1;
+ typedef lambda< T2,Tag > l2;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+
+
+ typedef typename aux::lambda_or<
+ is_le1::value, is_le2::value
+ >::type is_le;
+
+ typedef aux::le_result2<
+ is_le, Tag, F, l1, l2
+ > le_result_;
+
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+template<
+ typename F, typename T1, typename T2
+ , typename Tag
+ >
+struct lambda<
+ bind2< F,T1,T2 >
+ , Tag
+
+ >
+{
+ typedef false_ is_le;
+ typedef bind2<
+ F
+ , T1, T2
+ > result_;
+
+ typedef result_ type;
+};
+
+namespace aux {
+
+template<
+ typename IsLE, typename Tag
+ , template< typename P1, typename P2, typename P3 > class F
+ , typename L1, typename L2, typename L3
+ >
+struct le_result3
+{
+ typedef F<
+ typename L1::type, typename L2::type, typename L3::type
+ > result_;
+
+ typedef result_ type;
+};
+
+template<
+ typename Tag
+ , template< typename P1, typename P2, typename P3 > class F
+ , typename L1, typename L2, typename L3
+ >
+struct le_result3< true_,Tag,F,L1,L2,L3 >
+{
+ typedef bind3<
+ quote3< F,Tag >
+ , typename L1::result_, typename L2::result_, typename L3::result_
+ > result_;
+
+ typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+ template< typename P1, typename P2, typename P3 > class F
+ , typename T1, typename T2, typename T3
+ , typename Tag
+ >
+struct lambda<
+ F< T1,T2,T3 >
+ , Tag
+
+ >
+{
+ typedef lambda< T1,Tag > l1;
+ typedef lambda< T2,Tag > l2;
+ typedef lambda< T3,Tag > l3;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+
+
+ typedef typename aux::lambda_or<
+ is_le1::value, is_le2::value, is_le3::value
+ >::type is_le;
+
+ typedef aux::le_result3<
+ is_le, Tag, F, l1, l2, l3
+ > le_result_;
+
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ , typename Tag
+ >
+struct lambda<
+ bind3< F,T1,T2,T3 >
+ , Tag
+
+ >
+{
+ typedef false_ is_le;
+ typedef bind3<
+ F
+ , T1, T2, T3
+ > result_;
+
+ typedef result_ type;
+};
+
+namespace aux {
+
+template<
+ typename IsLE, typename Tag
+ , template< typename P1, typename P2, typename P3, typename P4 > class F
+ , typename L1, typename L2, typename L3, typename L4
+ >
+struct le_result4
+{
+ typedef F<
+ typename L1::type, typename L2::type, typename L3::type
+ , typename L4::type
+ > result_;
+
+ typedef result_ type;
+};
+
+template<
+ typename Tag
+ , template< typename P1, typename P2, typename P3, typename P4 > class F
+ , typename L1, typename L2, typename L3, typename L4
+ >
+struct le_result4< true_,Tag,F,L1,L2,L3,L4 >
+{
+ typedef bind4<
+ quote4< F,Tag >
+ , typename L1::result_, typename L2::result_, typename L3::result_
+ , typename L4::result_
+ > result_;
+
+ typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+ template< typename P1, typename P2, typename P3, typename P4 > class F
+ , typename T1, typename T2, typename T3, typename T4
+ , typename Tag
+ >
+struct lambda<
+ F< T1,T2,T3,T4 >
+ , Tag
+
+ >
+{
+ typedef lambda< T1,Tag > l1;
+ typedef lambda< T2,Tag > l2;
+ typedef lambda< T3,Tag > l3;
+ typedef lambda< T4,Tag > l4;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+ typedef typename l4::is_le is_le4;
+
+
+ typedef typename aux::lambda_or<
+ is_le1::value, is_le2::value, is_le3::value, is_le4::value
+ >::type is_le;
+
+ typedef aux::le_result4<
+ is_le, Tag, F, l1, l2, l3, l4
+ > le_result_;
+
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename Tag
+ >
+struct lambda<
+ bind4< F,T1,T2,T3,T4 >
+ , Tag
+
+ >
+{
+ typedef false_ is_le;
+ typedef bind4<
+ F
+ , T1, T2, T3, T4
+ > result_;
+
+ typedef result_ type;
+};
+
+namespace aux {
+
+template<
+ typename IsLE, typename Tag
+ , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F
+ , typename L1, typename L2, typename L3, typename L4, typename L5
+ >
+struct le_result5
+{
+ typedef F<
+ typename L1::type, typename L2::type, typename L3::type
+ , typename L4::type, typename L5::type
+ > result_;
+
+ typedef result_ type;
+};
+
+template<
+ typename Tag
+ , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F
+ , typename L1, typename L2, typename L3, typename L4, typename L5
+ >
+struct le_result5< true_,Tag,F,L1,L2,L3,L4,L5 >
+{
+ typedef bind5<
+ quote5< F,Tag >
+ , typename L1::result_, typename L2::result_, typename L3::result_
+ , typename L4::result_, typename L5::result_
+ > result_;
+
+ typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+ template<
+ typename P1, typename P2, typename P3, typename P4
+ , typename P5
+ >
+ class F
+ , typename T1, typename T2, typename T3, typename T4, typename T5
+ , typename Tag
+ >
+struct lambda<
+ F< T1,T2,T3,T4,T5 >
+ , Tag
+
+ >
+{
+ typedef lambda< T1,Tag > l1;
+ typedef lambda< T2,Tag > l2;
+ typedef lambda< T3,Tag > l3;
+ typedef lambda< T4,Tag > l4;
+ typedef lambda< T5,Tag > l5;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+ typedef typename l4::is_le is_le4;
+ typedef typename l5::is_le is_le5;
+
+
+ typedef typename aux::lambda_or<
+ is_le1::value, is_le2::value, is_le3::value, is_le4::value
+ , is_le5::value
+ >::type is_le;
+
+ typedef aux::le_result5<
+ is_le, Tag, F, l1, l2, l3, l4, l5
+ > le_result_;
+
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ , typename Tag
+ >
+struct lambda<
+ bind5< F,T1,T2,T3,T4,T5 >
+ , Tag
+
+ >
+{
+ typedef false_ is_le;
+ typedef bind5<
+ F
+ , T1, T2, T3, T4, T5
+ > result_;
+
+ typedef result_ type;
+};
+
+/// special case for 'protect'
+template< typename T, typename Tag >
+struct lambda< mpl::protect<T>, Tag >
+{
+ typedef false_ is_le;
+ typedef mpl::protect<T> result_;
+ typedef result_ type;
+};
+
+/// specializations for the main 'bind' form
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ , typename Tag
+ >
+struct lambda<
+ bind< F,T1,T2,T3,T4,T5 >
+ , Tag
+
+ >
+{
+ typedef false_ is_le;
+ typedef bind< F,T1,T2,T3,T4,T5 > result_;
+ typedef result_ type;
+};
+
+/// workaround for MWCW 8.3+/EDG < 303, leads to ambiguity on Digital Mars
+
+template<
+ typename F, typename Tag1, typename Tag2
+ >
+struct lambda<
+ lambda< F,Tag1 >
+ , Tag2
+ >
+{
+ typedef lambda< F,Tag2 > l1;
+ typedef lambda< Tag1,Tag2 > l2;
+ typedef typename l1::is_le is_le;
+ typedef aux::le_result2<is_le, Tag2, mpl::lambda, l1, l2> le_result_;
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, lambda)
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/mwcw/greater.hpp b/boost/boost/mpl/aux_/preprocessed/mwcw/greater.hpp
new file mode 100644
index 00000000000..14d8e08bff0
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/mwcw/greater.hpp
@@ -0,0 +1,94 @@
+
+// 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/greater.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct greater_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< greater_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< greater_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct greater_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct greater_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct greater_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct greater_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct greater
+
+ : greater_impl<
+ typename greater_tag<N1>::type
+ , typename greater_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, greater)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct greater_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value > BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/mwcw/greater_equal.hpp b/boost/boost/mpl/aux_/preprocessed/mwcw/greater_equal.hpp
new file mode 100644
index 00000000000..2603f9184a0
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/mwcw/greater_equal.hpp
@@ -0,0 +1,94 @@
+
+// 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/greater_equal.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct greater_equal_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< greater_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< greater_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct greater_equal_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct greater_equal_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct greater_equal_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct greater_equal_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct greater_equal
+
+ : greater_equal_impl<
+ typename greater_equal_tag<N1>::type
+ , typename greater_equal_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater_equal, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, greater_equal)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct greater_equal_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value >= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/mwcw/inherit.hpp b/boost/boost/mpl/aux_/preprocessed/mwcw/inherit.hpp
new file mode 100644
index 00000000000..00f31c42268
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/mwcw/inherit.hpp
@@ -0,0 +1,141 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/inherit.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(T1)
+ , typename BOOST_MPL_AUX_NA_PARAM(T2)
+ >
+struct inherit2
+ : T1, T2
+{
+ typedef inherit2 type;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, inherit2, (T1, T2))
+};
+
+template< typename T1 >
+struct inherit2< T1,empty_base >
+{
+ typedef T1 type;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (T1, empty_base))
+};
+
+template< typename T2 >
+struct inherit2< empty_base,T2 >
+{
+ typedef T2 type;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, T2))
+};
+
+template<>
+struct inherit2< empty_base,empty_base >
+{
+ typedef empty_base type;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, empty_base))
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, inherit2)
+
+template<
+ typename T1 = na, typename T2 = na, typename T3 = na
+ >
+struct inherit3
+ : inherit2<
+ typename inherit2<
+ T1, T2
+ >::type
+ , T3
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 3
+ , inherit3
+ , ( T1, T2, T3)
+ )
+};
+
+BOOST_MPL_AUX_NA_SPEC(3, inherit3)
+
+template<
+ typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na
+ >
+struct inherit4
+ : inherit2<
+ typename inherit3<
+ T1, T2, T3
+ >::type
+ , T4
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 4
+ , inherit4
+ , ( T1, T2, T3, T4)
+ )
+};
+
+BOOST_MPL_AUX_NA_SPEC(4, inherit4)
+
+template<
+ typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na
+ , typename T5 = na
+ >
+struct inherit5
+ : inherit2<
+ typename inherit4<
+ T1, T2, T3, T4
+ >::type
+ , T5
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , inherit5
+ , ( T1, T2, T3, T4, T5)
+ )
+};
+
+BOOST_MPL_AUX_NA_SPEC(5, inherit5)
+
+/// primary template
+
+template<
+ typename T1 = empty_base, typename T2 = empty_base
+ , typename T3 = empty_base, typename T4 = empty_base
+ , typename T5 = empty_base
+ >
+struct inherit
+ : inherit5< T1,T2,T3,T4,T5 >
+{
+};
+
+template<>
+struct inherit< na,na,na,na,na >
+{
+ template<
+
+ typename T1 = empty_base, typename T2 = empty_base
+ , typename T3 = empty_base, typename T4 = empty_base
+ , typename T5 = empty_base
+
+ >
+ struct apply
+ : inherit< T1,T2,T3,T4,T5 >
+ {
+ };
+};
+
+BOOST_MPL_AUX_NA_SPEC_LAMBDA(5, inherit)
+BOOST_MPL_AUX_NA_SPEC_ARITY(5, inherit)
+BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(5, 5, inherit)
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/mwcw/iter_fold_if_impl.hpp b/boost/boost/mpl/aux_/preprocessed/mwcw/iter_fold_if_impl.hpp
new file mode 100644
index 00000000000..695179584d3
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/mwcw/iter_fold_if_impl.hpp
@@ -0,0 +1,133 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/aux_/iter_fold_if_impl.hpp" header
+// -- DO NOT modify by hand!
+
+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;
+ };
+};
+
+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;
+};
+
+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;
+ typedef iter_fold_if_forward_step< typename forward_step0::iterator, typename forward_step0::state, ForwardOp, ForwardPredicate > forward_step1;
+ typedef iter_fold_if_forward_step< typename forward_step1::iterator, typename forward_step1::state, ForwardOp, ForwardPredicate > forward_step2;
+ typedef iter_fold_if_forward_step< typename forward_step2::iterator, typename forward_step2::state, ForwardOp, ForwardPredicate > forward_step3;
+ typedef iter_fold_if_forward_step< typename forward_step3::iterator, typename forward_step3::state, ForwardOp, ForwardPredicate > forward_step4;
+
+
+ typedef typename if_<
+ typename forward_step4::not_last
+ , iter_fold_if_impl<
+ typename forward_step4::iterator
+ , typename forward_step4::state
+ , ForwardOp
+ , ForwardPredicate
+ , BackwardOp
+ , BackwardPredicate
+ >
+ , iter_fold_if_null_step<
+ typename forward_step4::iterator
+ , typename forward_step4::state
+ >
+ >::type backward_step4;
+
+ typedef iter_fold_if_backward_step< typename forward_step3::iterator, typename backward_step4::state, BackwardOp, BackwardPredicate > backward_step3;
+ typedef iter_fold_if_backward_step< typename forward_step2::iterator, typename backward_step3::state, BackwardOp, BackwardPredicate > backward_step2;
+ typedef iter_fold_if_backward_step< typename forward_step1::iterator, typename backward_step2::state, BackwardOp, BackwardPredicate > backward_step1;
+ typedef iter_fold_if_backward_step< typename forward_step0::iterator, typename backward_step1::state, BackwardOp, BackwardPredicate > backward_step0;
+
+
+ public:
+ typedef typename backward_step0::state state;
+ typedef typename backward_step4::iterator iterator;
+};
+
+}}}
diff --git a/boost/boost/mpl/aux_/preprocessed/mwcw/iter_fold_impl.hpp b/boost/boost/mpl/aux_/preprocessed/mwcw/iter_fold_impl.hpp
new file mode 100644
index 00000000000..805790e86d6
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/mwcw/iter_fold_impl.hpp
@@ -0,0 +1,180 @@
+
+// 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/aux_/iter_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+ int N
+ , typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl;
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl< 0,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef state0 state;
+ typedef iter0 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl< 1,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+
+
+ typedef state1 state;
+ typedef iter1 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl< 2,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+
+
+ typedef state2 state;
+ typedef iter2 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl< 3,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp,state2,iter2 >::type state3;
+ typedef typename mpl::next<iter2>::type iter3;
+
+
+ typedef state3 state;
+ typedef iter3 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl< 4,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp,state2,iter2 >::type state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp,state3,iter3 >::type state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef state4 state;
+ typedef iter4 iterator;
+};
+
+template<
+ int N
+ , typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl
+{
+ typedef iter_fold_impl<
+ 4
+ , First
+ , Last
+ , State
+ , ForwardOp
+ > chunk_;
+
+ typedef iter_fold_impl<
+ ( (N - 4) < 0 ? 0 : N - 4 )
+ , typename chunk_::iterator
+ , Last
+ , typename chunk_::state
+ , ForwardOp
+ > res_;
+
+ typedef typename res_::state state;
+ typedef typename res_::iterator iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl< -1,First,Last,State,ForwardOp >
+ : iter_fold_impl<
+ -1
+ , typename mpl::next<First>::type
+ , Last
+ , typename apply2< ForwardOp,State,First >::type
+ , ForwardOp
+ >
+{
+};
+
+template<
+ typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl< -1,Last,Last,State,ForwardOp >
+{
+ typedef State state;
+ typedef Last iterator;
+};
+
+}}}
diff --git a/boost/boost/mpl/aux_/preprocessed/mwcw/lambda_no_ctps.hpp b/boost/boost/mpl/aux_/preprocessed/mwcw/lambda_no_ctps.hpp
new file mode 100644
index 00000000000..890a198a464
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/mwcw/lambda_no_ctps.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/aux_/lambda_no_ctps.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template<
+ bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false
+ , bool C5 = false
+ >
+struct lambda_or
+ : true_
+{
+};
+
+template<>
+struct lambda_or< false,false,false,false,false >
+ : false_
+{
+};
+
+template< typename Arity > struct lambda_impl
+{
+ template< typename T, typename Tag, typename Protect > struct result_
+ {
+ typedef T type;
+ typedef is_placeholder<T> is_le;
+ };
+};
+
+template<> struct lambda_impl< int_<1> >
+{
+ template< typename F, typename Tag, typename Protect > struct result_
+ {
+ typedef lambda< typename F::arg1, Tag, false_ > l1;
+ typedef typename l1::is_le is_le1;
+ typedef aux::lambda_or<
+ BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value
+ > is_le;
+
+ typedef bind1<
+ typename F::rebind
+ , typename l1::type
+ > bind_;
+
+ typedef typename if_<
+ is_le
+ , if_< Protect, mpl::protect<bind_>, bind_ >
+ , identity<F>
+ >::type type_;
+
+ typedef typename type_::type type;
+ };
+};
+
+template<> struct lambda_impl< int_<2> >
+{
+ template< typename F, typename Tag, typename Protect > struct result_
+ {
+ typedef lambda< typename F::arg1, Tag, false_ > l1;
+ typedef lambda< typename F::arg2, Tag, false_ > l2;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+
+
+ typedef aux::lambda_or<
+ BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value
+ > is_le;
+
+ typedef bind2<
+ typename F::rebind
+ , typename l1::type, typename l2::type
+ > bind_;
+
+ typedef typename if_<
+ is_le
+ , if_< Protect, mpl::protect<bind_>, bind_ >
+ , identity<F>
+ >::type type_;
+
+ typedef typename type_::type type;
+ };
+};
+
+template<> struct lambda_impl< int_<3> >
+{
+ template< typename F, typename Tag, typename Protect > struct result_
+ {
+ typedef lambda< typename F::arg1, Tag, false_ > l1;
+ typedef lambda< typename F::arg2, Tag, false_ > l2;
+ typedef lambda< typename F::arg3, Tag, false_ > l3;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+
+
+ typedef aux::lambda_or<
+ BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value
+ > is_le;
+
+ typedef bind3<
+ typename F::rebind
+ , typename l1::type, typename l2::type, typename l3::type
+ > bind_;
+
+ typedef typename if_<
+ is_le
+ , if_< Protect, mpl::protect<bind_>, bind_ >
+ , identity<F>
+ >::type type_;
+
+ typedef typename type_::type type;
+ };
+};
+
+template<> struct lambda_impl< int_<4> >
+{
+ template< typename F, typename Tag, typename Protect > struct result_
+ {
+ typedef lambda< typename F::arg1, Tag, false_ > l1;
+ typedef lambda< typename F::arg2, Tag, false_ > l2;
+ typedef lambda< typename F::arg3, Tag, false_ > l3;
+ typedef lambda< typename F::arg4, Tag, false_ > l4;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+ typedef typename l4::is_le is_le4;
+
+
+ typedef aux::lambda_or<
+ BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value
+ > is_le;
+
+ typedef bind4<
+ typename F::rebind
+ , typename l1::type, typename l2::type, typename l3::type
+ , typename l4::type
+ > bind_;
+
+ typedef typename if_<
+ is_le
+ , if_< Protect, mpl::protect<bind_>, bind_ >
+ , identity<F>
+ >::type type_;
+
+ typedef typename type_::type type;
+ };
+};
+
+template<> struct lambda_impl< int_<5> >
+{
+ template< typename F, typename Tag, typename Protect > struct result_
+ {
+ typedef lambda< typename F::arg1, Tag, false_ > l1;
+ typedef lambda< typename F::arg2, Tag, false_ > l2;
+ typedef lambda< typename F::arg3, Tag, false_ > l3;
+ typedef lambda< typename F::arg4, Tag, false_ > l4;
+ typedef lambda< typename F::arg5, Tag, false_ > l5;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+ typedef typename l4::is_le is_le4;
+ typedef typename l5::is_le is_le5;
+
+
+ typedef aux::lambda_or<
+ BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le5)::value
+ > is_le;
+
+ typedef bind5<
+ typename F::rebind
+ , typename l1::type, typename l2::type, typename l3::type
+ , typename l4::type, typename l5::type
+ > bind_;
+
+ typedef typename if_<
+ is_le
+ , if_< Protect, mpl::protect<bind_>, bind_ >
+ , identity<F>
+ >::type type_;
+
+ typedef typename type_::type type;
+ };
+};
+
+} // namespace aux
+
+template<
+ typename T
+ , typename Tag
+ , typename Protect
+ >
+struct lambda
+{
+ /// Metafunction forwarding confuses MSVC 6.x
+ typedef typename aux::template_arity<T>::type arity_;
+ typedef typename aux::lambda_impl<arity_>
+ ::template result_< T,Tag,Protect > l_;
+
+ typedef typename l_::type type;
+ typedef typename l_::is_le is_le;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(3, lambda, (T, Tag, Protect))
+};
+
+BOOST_MPL_AUX_NA_SPEC2(1, 3, lambda)
+
+template<
+ typename T
+ >
+struct is_lambda_expression
+ : lambda<T>::is_le
+{
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/mwcw/less.hpp b/boost/boost/mpl/aux_/preprocessed/mwcw/less.hpp
new file mode 100644
index 00000000000..4fe3cd17c49
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/mwcw/less.hpp
@@ -0,0 +1,94 @@
+
+// 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/less.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct less_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< less_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< less_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct less_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct less_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct less_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct less_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct less
+
+ : less_impl<
+ typename less_tag<N1>::type
+ , typename less_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, less)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct less_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N2)::value > BOOST_MPL_AUX_VALUE_WKND(N1)::value ) >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/mwcw/less_equal.hpp b/boost/boost/mpl/aux_/preprocessed/mwcw/less_equal.hpp
new file mode 100644
index 00000000000..ca2894f6f93
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/mwcw/less_equal.hpp
@@ -0,0 +1,94 @@
+
+// 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/less_equal.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct less_equal_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< less_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< less_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct less_equal_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct less_equal_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct less_equal_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct less_equal_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct less_equal
+
+ : less_equal_impl<
+ typename less_equal_tag<N1>::type
+ , typename less_equal_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less_equal, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, less_equal)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct less_equal_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value <= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/mwcw/list.hpp b/boost/boost/mpl/aux_/preprocessed/mwcw/list.hpp
new file mode 100644
index 00000000000..4e8ad53d212
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/mwcw/list.hpp
@@ -0,0 +1,323 @@
+
+// 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.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+ , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+ , typename T12 = na, typename T13 = na, typename T14 = na
+ , typename T15 = na, typename T16 = na, typename T17 = na
+ , typename T18 = na, typename T19 = na
+ >
+struct list;
+
+template<
+
+ >
+struct list<
+ na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list0< >
+{
+ typedef list0< >::type type;
+};
+
+template<
+ typename T0
+ >
+struct list<
+ T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list1<T0>
+{
+ typedef typename list1<T0>::type type;
+};
+
+template<
+ typename T0, typename T1
+ >
+struct list<
+ T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list2< T0,T1 >
+{
+ typedef typename list2< T0,T1 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2
+ >
+struct list<
+ T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list3< T0,T1,T2 >
+{
+ typedef typename list3< T0,T1,T2 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3
+ >
+struct list<
+ T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list4< T0,T1,T2,T3 >
+{
+ typedef typename list4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ >
+struct list<
+ T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list5< T0,T1,T2,T3,T4 >
+{
+ typedef typename list5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct list<
+ T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list6< T0,T1,T2,T3,T4,T5 >
+{
+ typedef typename list6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6
+ >
+struct list<
+ T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list7< T0,T1,T2,T3,T4,T5,T6 >
+{
+ typedef typename list7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7
+ >
+struct list<
+ T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+ typedef typename list8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8
+ >
+struct list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+ typedef typename list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ >
+struct list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+ typedef typename list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ , typename T10
+ >
+struct list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+ typedef typename list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+ , na, na, na, na
+ >
+ : list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+ typedef typename list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+ , na, na, na, na
+ >
+ : list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+ typedef typename list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+ , na, na, na, na
+ >
+ : list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+ typedef typename list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+ , na, na, na, na
+ >
+ : list15<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ >
+{
+ typedef typename list15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, na, na, na, na
+ >
+ : list16<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15
+ >
+{
+ typedef typename list16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, na, na, na
+ >
+ : list17<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16
+ >
+{
+ typedef typename list17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, na, na
+ >
+ : list18<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17
+ >
+{
+ typedef typename list18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, na
+ >
+ : list19<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18
+ >
+{
+ typedef typename list19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ , typename T10, typename T11, typename T12, typename T13, typename T14
+ , typename T15, typename T16, typename T17, typename T18, typename T19
+ >
+struct list
+ : list20<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, T19
+ >
+{
+ typedef typename list20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/mwcw/list_c.hpp b/boost/boost/mpl/aux_/preprocessed/mwcw/list_c.hpp
new file mode 100644
index 00000000000..0b48a7f8e11
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/mwcw/list_c.hpp
@@ -0,0 +1,328 @@
+
+// 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_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+ , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+ , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+ , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+ , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+ , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+ , long C18 = LONG_MAX, long C19 = LONG_MAX
+ >
+struct list_c;
+
+template<
+ typename T
+ >
+struct list_c<
+ T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list0_c<T>
+{
+ typedef typename list0_c<T>::type type;
+};
+
+template<
+ typename T, long C0
+ >
+struct list_c<
+ T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list1_c< T,C0 >
+{
+ typedef typename list1_c< T,C0 >::type type;
+};
+
+template<
+ typename T, long C0, long C1
+ >
+struct list_c<
+ T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list2_c< T,C0,C1 >
+{
+ typedef typename list2_c< T,C0,C1 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2
+ >
+struct list_c<
+ T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list3_c< T,C0,C1,C2 >
+{
+ typedef typename list3_c< T,C0,C1,C2 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3
+ >
+struct list_c<
+ T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list4_c< T,C0,C1,C2,C3 >
+{
+ typedef typename list4_c< T,C0,C1,C2,C3 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list5_c< T,C0,C1,C2,C3,C4 >
+{
+ typedef typename list5_c< T,C0,C1,C2,C3,C4 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list6_c< T,C0,C1,C2,C3,C4,C5 >
+{
+ typedef typename list6_c< T,C0,C1,C2,C3,C4,C5 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list7_c< T,C0,C1,C2,C3,C4,C5,C6 >
+{
+ typedef typename list7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX
+ >
+ : list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >
+{
+ typedef typename list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX
+ >
+ : list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >
+{
+ typedef typename list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX
+ >
+ : list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >
+{
+ typedef typename list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >
+{
+ typedef typename list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >
+{
+ typedef typename list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >
+{
+ typedef typename list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list14_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+ >
+{
+ typedef typename list14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list15_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ >
+{
+ typedef typename list15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list16_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15
+ >
+{
+ typedef typename list16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list17_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16
+ >
+{
+ typedef typename list17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, LONG_MAX, LONG_MAX
+ >
+ : list18_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17
+ >
+{
+ typedef typename list18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, C18, LONG_MAX
+ >
+ : list19_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, C18
+ >
+{
+ typedef typename list19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+struct list_c
+ : list20_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, C18, C19
+ >
+{
+ typedef typename list20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/mwcw/map.hpp b/boost/boost/mpl/aux_/preprocessed/mwcw/map.hpp
new file mode 100644
index 00000000000..837e0137718
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/mwcw/map.hpp
@@ -0,0 +1,323 @@
+
+// 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/map.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+ , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+ , typename T12 = na, typename T13 = na, typename T14 = na
+ , typename T15 = na, typename T16 = na, typename T17 = na
+ , typename T18 = na, typename T19 = na
+ >
+struct map;
+
+template<
+
+ >
+struct map<
+ na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map0< >
+{
+ typedef map0< >::type type;
+};
+
+template<
+ typename T0
+ >
+struct map<
+ T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map1<T0>
+{
+ typedef typename map1<T0>::type type;
+};
+
+template<
+ typename T0, typename T1
+ >
+struct map<
+ T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map2< T0,T1 >
+{
+ typedef typename map2< T0,T1 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2
+ >
+struct map<
+ T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map3< T0,T1,T2 >
+{
+ typedef typename map3< T0,T1,T2 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3
+ >
+struct map<
+ T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map4< T0,T1,T2,T3 >
+{
+ typedef typename map4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ >
+struct map<
+ T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map5< T0,T1,T2,T3,T4 >
+{
+ typedef typename map5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct map<
+ T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map6< T0,T1,T2,T3,T4,T5 >
+{
+ typedef typename map6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6
+ >
+struct map<
+ T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map7< T0,T1,T2,T3,T4,T5,T6 >
+{
+ typedef typename map7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7
+ >
+struct map<
+ T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+ typedef typename map8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8
+ >
+struct map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+ typedef typename map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ >
+struct map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+ typedef typename map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ , typename T10
+ >
+struct map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+ typedef typename map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+ , na, na, na, na
+ >
+ : map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+ typedef typename map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+ , na, na, na, na
+ >
+ : map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+ typedef typename map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+ , na, na, na, na
+ >
+ : map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+ typedef typename map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+ , na, na, na, na
+ >
+ : map15<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ >
+{
+ typedef typename map15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, na, na, na, na
+ >
+ : map16<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15
+ >
+{
+ typedef typename map16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, na, na, na
+ >
+ : map17<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16
+ >
+{
+ typedef typename map17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, na, na
+ >
+ : map18<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17
+ >
+{
+ typedef typename map18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, na
+ >
+ : map19<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18
+ >
+{
+ typedef typename map19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+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 map
+ : map20<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, T19
+ >
+{
+ typedef typename map20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/mwcw/minus.hpp b/boost/boost/mpl/aux_/preprocessed/mwcw/minus.hpp
new file mode 100644
index 00000000000..71d49137660
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/mwcw/minus.hpp
@@ -0,0 +1,146 @@
+
+// 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/minus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct minus_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< minus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< minus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct minus_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct minus_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct minus_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct minus_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct minus
+ : minus< minus< minus< minus< N1,N2 >, N3>, N4>, N5>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , minus
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3, typename N4
+ >
+struct minus< N1,N2,N3,N4,na >
+
+ : minus< minus< minus< N1,N2 >, N3>, N4>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , minus
+ , ( N1, N2, N3, N4, na )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3
+ >
+struct minus< N1,N2,N3,na,na >
+
+ : minus< minus< N1,N2 >, N3>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , minus
+ , ( N1, N2, N3, na, na )
+ )
+};
+
+template<
+ typename N1, typename N2
+ >
+struct minus< N1,N2,na,na,na >
+ : minus_impl<
+ typename minus_tag<N1>::type
+ , typename minus_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , minus
+ , ( N1, N2, na, na, na )
+ )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, minus)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct minus_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ - BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/mwcw/modulus.hpp b/boost/boost/mpl/aux_/preprocessed/mwcw/modulus.hpp
new file mode 100644
index 00000000000..224b34930c9
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/mwcw/modulus.hpp
@@ -0,0 +1,101 @@
+
+// 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/modulus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct modulus_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< modulus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< modulus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct modulus_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct modulus_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct modulus_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct modulus_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct modulus
+
+ : modulus_impl<
+ typename modulus_tag<N1>::type
+ , typename modulus_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, modulus, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, modulus)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct modulus_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ % BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/mwcw/not_equal_to.hpp b/boost/boost/mpl/aux_/preprocessed/mwcw/not_equal_to.hpp
new file mode 100644
index 00000000000..98b21b1e22d
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/mwcw/not_equal_to.hpp
@@ -0,0 +1,94 @@
+
+// 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/not_equal_to.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct not_equal_to_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< not_equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< not_equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct not_equal_to_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct not_equal_to_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct not_equal_to_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct not_equal_to_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct not_equal_to
+
+ : not_equal_to_impl<
+ typename not_equal_to_tag<N1>::type
+ , typename not_equal_to_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, not_equal_to, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, not_equal_to)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct not_equal_to_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value != BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/mwcw/or.hpp b/boost/boost/mpl/aux_/preprocessed/mwcw/or.hpp
new file mode 100644
index 00000000000..31e1aaa4e60
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/mwcw/or.hpp
@@ -0,0 +1,69 @@
+
+// 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/or.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template< bool C_, typename T1, typename T2, typename T3, typename T4 >
+struct or_impl
+ : true_
+{
+};
+
+template< typename T1, typename T2, typename T3, typename T4 >
+struct or_impl< false,T1,T2,T3,T4 >
+ : or_impl<
+ BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+ , T2, T3, T4
+ , false_
+ >
+{
+};
+
+template<>
+struct or_impl<
+ false
+ , false_, false_, false_, false_
+ >
+ : false_
+{
+};
+
+} // namespace aux
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(T1)
+ , typename BOOST_MPL_AUX_NA_PARAM(T2)
+ , typename T3 = false_, typename T4 = false_, typename T5 = false_
+ >
+struct or_
+
+ : aux::or_impl<
+ BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+ , T2, T3, T4, T5
+ >
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , or_
+ , ( T1, T2, T3, T4, T5)
+ )
+};
+
+BOOST_MPL_AUX_NA_SPEC2(
+ 2
+ , 5
+ , or_
+ )
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/mwcw/placeholders.hpp b/boost/boost/mpl/aux_/preprocessed/mwcw/placeholders.hpp
new file mode 100644
index 00000000000..ff97364b9ba
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/mwcw/placeholders.hpp
@@ -0,0 +1,105 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+// Copyright Peter Dimov 2001-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)
+//
+
+// Preprocessed version of "boost/mpl/placeholders.hpp" header
+// -- DO NOT modify by hand!
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg< -1 > _;
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_;
+}
+
+}}
+
+/// agurt, 17/mar/02: one more placeholder for the last 'apply#'
+/// specialization
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<1> _1;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_1)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_1;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<2> _2;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_2)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_2;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<3> _3;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_3)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_3;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<4> _4;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_4)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_4;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<5> _5;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_5)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_5;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<6> _6;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_6)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_6;
+}
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/mwcw/plus.hpp b/boost/boost/mpl/aux_/preprocessed/mwcw/plus.hpp
new file mode 100644
index 00000000000..a9f6ee79a5c
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/mwcw/plus.hpp
@@ -0,0 +1,146 @@
+
+// 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/plus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct plus_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< plus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< plus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct plus_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct plus_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct plus_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct plus_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct plus
+ : plus< plus< plus< plus< N1,N2 >, N3>, N4>, N5>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , plus
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3, typename N4
+ >
+struct plus< N1,N2,N3,N4,na >
+
+ : plus< plus< plus< N1,N2 >, N3>, N4>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , plus
+ , ( N1, N2, N3, N4, na )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3
+ >
+struct plus< N1,N2,N3,na,na >
+
+ : plus< plus< N1,N2 >, N3>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , plus
+ , ( N1, N2, N3, na, na )
+ )
+};
+
+template<
+ typename N1, typename N2
+ >
+struct plus< N1,N2,na,na,na >
+ : plus_impl<
+ typename plus_tag<N1>::type
+ , typename plus_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , plus
+ , ( N1, N2, na, na, na )
+ )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, plus)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct plus_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ + BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/mwcw/quote.hpp b/boost/boost/mpl/aux_/preprocessed/mwcw/quote.hpp
new file mode 100644
index 00000000000..d7d0420e4d8
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/mwcw/quote.hpp
@@ -0,0 +1,123 @@
+
+// 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/quote.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template< typename T, bool has_type_ >
+struct quote_impl
+ : T
+{
+};
+
+template< typename T >
+struct quote_impl< T,false >
+{
+ typedef T type;
+};
+
+template<
+ template< typename P1 > class F
+ , typename Tag = void_
+ >
+struct quote1
+{
+ template< typename U1 > struct apply
+
+ : quote_impl<
+ F<U1>
+ , aux::has_type< F<U1> >::value
+ >
+
+ {
+ };
+};
+
+template<
+ template< typename P1, typename P2 > class F
+ , typename Tag = void_
+ >
+struct quote2
+{
+ template< typename U1, typename U2 > struct apply
+
+ : quote_impl<
+ F< U1,U2 >
+ , aux::has_type< F< U1,U2 > >::value
+ >
+
+ {
+ };
+};
+
+template<
+ template< typename P1, typename P2, typename P3 > class F
+ , typename Tag = void_
+ >
+struct quote3
+{
+ template< typename U1, typename U2, typename U3 > struct apply
+
+ : quote_impl<
+ F< U1,U2,U3 >
+ , aux::has_type< F< U1,U2,U3 > >::value
+ >
+
+ {
+ };
+};
+
+template<
+ template< typename P1, typename P2, typename P3, typename P4 > class F
+ , typename Tag = void_
+ >
+struct quote4
+{
+ template<
+ typename U1, typename U2, typename U3, typename U4
+ >
+ struct apply
+
+ : quote_impl<
+ F< U1,U2,U3,U4 >
+ , aux::has_type< F< U1,U2,U3,U4 > >::value
+ >
+
+ {
+ };
+};
+
+template<
+ template<
+ typename P1, typename P2, typename P3, typename P4
+ , typename P5
+ >
+ class F
+ , typename Tag = void_
+ >
+struct quote5
+{
+ template<
+ typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+ struct apply
+
+ : quote_impl<
+ F< U1,U2,U3,U4,U5 >
+ , aux::has_type< F< U1,U2,U3,U4,U5 > >::value
+ >
+
+ {
+ };
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/mwcw/reverse_fold_impl.hpp b/boost/boost/mpl/aux_/preprocessed/mwcw/reverse_fold_impl.hpp
new file mode 100644
index 00000000000..c468684c91e
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/mwcw/reverse_fold_impl.hpp
@@ -0,0 +1,231 @@
+
+// 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/aux_/reverse_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+ long N
+ , typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl;
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl< 0,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef fwd_state0 bkwd_state0;
+ typedef bkwd_state0 state;
+ typedef iter0 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl< 1,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+
+
+ typedef fwd_state1 bkwd_state1;
+ typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+ typedef bkwd_state0 state;
+ typedef iter1 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl< 2,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+
+
+ typedef fwd_state2 bkwd_state2;
+ typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+ typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter2 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl< 3,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+
+
+ typedef fwd_state3 bkwd_state3;
+ typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+ typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+ typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter3 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl< 4,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef fwd_state4 bkwd_state4;
+ typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
+ typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+ typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+ typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter4 iterator;
+};
+
+template<
+ long N
+ , typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef reverse_fold_impl<
+ ( (N - 4) < 0 ? 0 : N - 4 )
+ , iter4
+ , Last
+ , fwd_state4
+ , BackwardOp
+ , ForwardOp
+ > nested_chunk;
+
+ typedef typename nested_chunk::state bkwd_state4;
+ typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
+ typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+ typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+ typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef typename nested_chunk::iterator iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl< -1,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef reverse_fold_impl<
+ -1
+ , typename mpl::next<First>::type
+ , Last
+ , typename apply2<ForwardOp,State, typename deref<First>::type>::type
+ , BackwardOp
+ , ForwardOp
+ > nested_step;
+
+ typedef typename apply2<
+ BackwardOp
+ , typename nested_step::state
+ , typename deref<First>::type
+ >::type state;
+
+ typedef typename nested_step::iterator iterator;
+};
+
+template<
+ typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl< -1,Last,Last,State,BackwardOp,ForwardOp >
+{
+ typedef State state;
+ typedef Last iterator;
+};
+
+}}}
diff --git a/boost/boost/mpl/aux_/preprocessed/mwcw/reverse_iter_fold_impl.hpp b/boost/boost/mpl/aux_/preprocessed/mwcw/reverse_iter_fold_impl.hpp
new file mode 100644
index 00000000000..658f92a7c38
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/mwcw/reverse_iter_fold_impl.hpp
@@ -0,0 +1,231 @@
+
+// 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/aux_/reverse_iter_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+ long N
+ , typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl;
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl< 0,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef fwd_state0 bkwd_state0;
+ typedef bkwd_state0 state;
+ typedef iter0 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl< 1,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+
+
+ typedef fwd_state1 bkwd_state1;
+ typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+ typedef bkwd_state0 state;
+ typedef iter1 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl< 2,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+
+
+ typedef fwd_state2 bkwd_state2;
+ typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+ typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter2 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl< 3,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+
+
+ typedef fwd_state3 bkwd_state3;
+ typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+ typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+ typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter3 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl< 4,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef fwd_state4 bkwd_state4;
+ typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;
+ typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+ typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+ typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter4 iterator;
+};
+
+template<
+ long N
+ , typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef reverse_iter_fold_impl<
+ ( (N - 4) < 0 ? 0 : N - 4 )
+ , iter4
+ , Last
+ , fwd_state4
+ , BackwardOp
+ , ForwardOp
+ > nested_chunk;
+
+ typedef typename nested_chunk::state bkwd_state4;
+ typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;
+ typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+ typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+ typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef typename nested_chunk::iterator iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl< -1,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef reverse_iter_fold_impl<
+ -1
+ , typename mpl::next<First>::type
+ , Last
+ , typename apply2< ForwardOp,State,First >::type
+ , BackwardOp
+ , ForwardOp
+ > nested_step;
+
+ typedef typename apply2<
+ BackwardOp
+ , typename nested_step::state
+ , First
+ >::type state;
+
+ typedef typename nested_step::iterator iterator;
+};
+
+template<
+ typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl< -1,Last,Last,State,BackwardOp,ForwardOp >
+{
+ typedef State state;
+ typedef Last iterator;
+};
+
+}}}
diff --git a/boost/boost/mpl/aux_/preprocessed/mwcw/set.hpp b/boost/boost/mpl/aux_/preprocessed/mwcw/set.hpp
new file mode 100644
index 00000000000..5721922e111
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/mwcw/set.hpp
@@ -0,0 +1,323 @@
+
+// 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/set.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+ , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+ , typename T12 = na, typename T13 = na, typename T14 = na
+ , typename T15 = na, typename T16 = na, typename T17 = na
+ , typename T18 = na, typename T19 = na
+ >
+struct set;
+
+template<
+
+ >
+struct set<
+ na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set0< >
+{
+ typedef set0< >::type type;
+};
+
+template<
+ typename T0
+ >
+struct set<
+ T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set1<T0>
+{
+ typedef typename set1<T0>::type type;
+};
+
+template<
+ typename T0, typename T1
+ >
+struct set<
+ T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set2< T0,T1 >
+{
+ typedef typename set2< T0,T1 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2
+ >
+struct set<
+ T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set3< T0,T1,T2 >
+{
+ typedef typename set3< T0,T1,T2 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3
+ >
+struct set<
+ T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set4< T0,T1,T2,T3 >
+{
+ typedef typename set4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ >
+struct set<
+ T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set5< T0,T1,T2,T3,T4 >
+{
+ typedef typename set5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct set<
+ T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set6< T0,T1,T2,T3,T4,T5 >
+{
+ typedef typename set6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6
+ >
+struct set<
+ T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set7< T0,T1,T2,T3,T4,T5,T6 >
+{
+ typedef typename set7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7
+ >
+struct set<
+ T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+ typedef typename set8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8
+ >
+struct set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+ typedef typename set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ >
+struct set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+ typedef typename set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ , typename T10
+ >
+struct set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+ typedef typename set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+ , na, na, na, na
+ >
+ : set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+ typedef typename set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+ , na, na, na, na
+ >
+ : set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+ typedef typename set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+ , na, na, na, na
+ >
+ : set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+ typedef typename set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+ , na, na, na, na
+ >
+ : set15<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ >
+{
+ typedef typename set15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, na, na, na, na
+ >
+ : set16<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15
+ >
+{
+ typedef typename set16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, na, na, na
+ >
+ : set17<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16
+ >
+{
+ typedef typename set17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, na, na
+ >
+ : set18<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17
+ >
+{
+ typedef typename set18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, na
+ >
+ : set19<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18
+ >
+{
+ typedef typename set19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+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 set
+ : set20<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, T19
+ >
+{
+ typedef typename set20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/mwcw/set_c.hpp b/boost/boost/mpl/aux_/preprocessed/mwcw/set_c.hpp
new file mode 100644
index 00000000000..cbeb932c13d
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/mwcw/set_c.hpp
@@ -0,0 +1,328 @@
+
+// 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/set_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+ , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+ , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+ , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+ , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+ , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+ , long C18 = LONG_MAX, long C19 = LONG_MAX
+ >
+struct set_c;
+
+template<
+ typename T
+ >
+struct set_c<
+ T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set0_c<T>
+{
+ typedef typename set0_c<T>::type type;
+};
+
+template<
+ typename T, long C0
+ >
+struct set_c<
+ T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set1_c< T,C0 >
+{
+ typedef typename set1_c< T,C0 >::type type;
+};
+
+template<
+ typename T, long C0, long C1
+ >
+struct set_c<
+ T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set2_c< T,C0,C1 >
+{
+ typedef typename set2_c< T,C0,C1 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2
+ >
+struct set_c<
+ T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set3_c< T,C0,C1,C2 >
+{
+ typedef typename set3_c< T,C0,C1,C2 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3
+ >
+struct set_c<
+ T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set4_c< T,C0,C1,C2,C3 >
+{
+ typedef typename set4_c< T,C0,C1,C2,C3 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set5_c< T,C0,C1,C2,C3,C4 >
+{
+ typedef typename set5_c< T,C0,C1,C2,C3,C4 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set6_c< T,C0,C1,C2,C3,C4,C5 >
+{
+ typedef typename set6_c< T,C0,C1,C2,C3,C4,C5 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set7_c< T,C0,C1,C2,C3,C4,C5,C6 >
+{
+ typedef typename set7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX
+ >
+ : set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >
+{
+ typedef typename set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX
+ >
+ : set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >
+{
+ typedef typename set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX
+ >
+ : set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >
+{
+ typedef typename set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >
+{
+ typedef typename set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >
+{
+ typedef typename set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >
+{
+ typedef typename set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set14_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+ >
+{
+ typedef typename set14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set15_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ >
+{
+ typedef typename set15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set16_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15
+ >
+{
+ typedef typename set16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set17_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16
+ >
+{
+ typedef typename set17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, LONG_MAX, LONG_MAX
+ >
+ : set18_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17
+ >
+{
+ typedef typename set18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, C18, LONG_MAX
+ >
+ : set19_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, C18
+ >
+{
+ typedef typename set19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+struct set_c
+ : set20_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, C18, C19
+ >
+{
+ typedef typename set20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/mwcw/shift_left.hpp b/boost/boost/mpl/aux_/preprocessed/mwcw/shift_left.hpp
new file mode 100644
index 00000000000..b5b181ce196
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/mwcw/shift_left.hpp
@@ -0,0 +1,99 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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)
+//
+
+// Preprocessed version of "boost/mpl/shift_left.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct shift_left_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< shift_left_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< shift_left_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct shift_left_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct shift_left_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct shift_left_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct shift_left_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct shift_left
+
+ : shift_left_impl<
+ typename shift_left_tag<N1>::type
+ , typename shift_left_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_left, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_left)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct shift_left_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N, typename S > struct apply
+
+ : integral_c<
+ typename N::value_type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N)::value
+ << BOOST_MPL_AUX_VALUE_WKND(S)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/mwcw/shift_right.hpp b/boost/boost/mpl/aux_/preprocessed/mwcw/shift_right.hpp
new file mode 100644
index 00000000000..f7a342e989a
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/mwcw/shift_right.hpp
@@ -0,0 +1,99 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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)
+//
+
+// Preprocessed version of "boost/mpl/shift_right.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct shift_right_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< shift_right_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< shift_right_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct shift_right_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct shift_right_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct shift_right_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct shift_right_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct shift_right
+
+ : shift_right_impl<
+ typename shift_right_tag<N1>::type
+ , typename shift_right_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_right, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_right)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct shift_right_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N, typename S > struct apply
+
+ : integral_c<
+ typename N::value_type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N)::value
+ >> BOOST_MPL_AUX_VALUE_WKND(S)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/mwcw/template_arity.hpp b/boost/boost/mpl/aux_/preprocessed/mwcw/template_arity.hpp
new file mode 100644
index 00000000000..a23fc238467
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/mwcw/template_arity.hpp
@@ -0,0 +1,11 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/aux_/template_arity.hpp" header
+// -- DO NOT modify by hand!
+
diff --git a/boost/boost/mpl/aux_/preprocessed/mwcw/times.hpp b/boost/boost/mpl/aux_/preprocessed/mwcw/times.hpp
new file mode 100644
index 00000000000..cb97cc4e132
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/mwcw/times.hpp
@@ -0,0 +1,146 @@
+
+// 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/times.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct times_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< times_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< times_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct times_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct times_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct times_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct times_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct times
+ : times< times< times< times< N1,N2 >, N3>, N4>, N5>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , times
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3, typename N4
+ >
+struct times< N1,N2,N3,N4,na >
+
+ : times< times< times< N1,N2 >, N3>, N4>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , times
+ , ( N1, N2, N3, N4, na )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3
+ >
+struct times< N1,N2,N3,na,na >
+
+ : times< times< N1,N2 >, N3>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , times
+ , ( N1, N2, N3, na, na )
+ )
+};
+
+template<
+ typename N1, typename N2
+ >
+struct times< N1,N2,na,na,na >
+ : times_impl<
+ typename times_tag<N1>::type
+ , typename times_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , times
+ , ( N1, N2, na, na, na )
+ )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, times)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct times_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ * BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/mwcw/unpack_args.hpp b/boost/boost/mpl/aux_/preprocessed/mwcw/unpack_args.hpp
new file mode 100644
index 00000000000..2194ce9d11b
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/mwcw/unpack_args.hpp
@@ -0,0 +1,94 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/unpack_args.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template< int size, typename F, typename Args >
+struct unpack_args_impl;
+
+template< typename F, typename Args >
+struct unpack_args_impl< 0,F,Args >
+ : apply0<
+ F
+ >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 1,F,Args >
+ : apply1<
+ F
+ , typename at_c< Args,0 >::type
+ >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 2,F,Args >
+ : apply2<
+ F
+ , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+ >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 3,F,Args >
+ : apply3<
+ F
+ , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+ , typename at_c< Args,2 >::type
+ >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 4,F,Args >
+ : apply4<
+ F
+ , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+ , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type
+ >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 5,F,Args >
+ : apply5<
+ F
+ , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+ , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type
+ , typename at_c< Args,4 >::type
+ >
+{
+};
+
+}
+
+template<
+ typename F
+ >
+struct unpack_args
+{
+ template< typename Args > struct apply
+
+ : aux::unpack_args_impl< size<Args>::value,F, Args >
+
+ {
+ };
+};
+
+BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args)
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/mwcw/vector.hpp b/boost/boost/mpl/aux_/preprocessed/mwcw/vector.hpp
new file mode 100644
index 00000000000..bfa9565a537
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/mwcw/vector.hpp
@@ -0,0 +1,323 @@
+
+// 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/vector.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+ , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+ , typename T12 = na, typename T13 = na, typename T14 = na
+ , typename T15 = na, typename T16 = na, typename T17 = na
+ , typename T18 = na, typename T19 = na
+ >
+struct vector;
+
+template<
+
+ >
+struct vector<
+ na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector0< >
+{
+ typedef vector0< >::type type;
+};
+
+template<
+ typename T0
+ >
+struct vector<
+ T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector1<T0>
+{
+ typedef typename vector1<T0>::type type;
+};
+
+template<
+ typename T0, typename T1
+ >
+struct vector<
+ T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector2< T0,T1 >
+{
+ typedef typename vector2< T0,T1 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2
+ >
+struct vector<
+ T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector3< T0,T1,T2 >
+{
+ typedef typename vector3< T0,T1,T2 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3
+ >
+struct vector<
+ T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector4< T0,T1,T2,T3 >
+{
+ typedef typename vector4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ >
+struct vector<
+ T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector5< T0,T1,T2,T3,T4 >
+{
+ typedef typename vector5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct vector<
+ T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector6< T0,T1,T2,T3,T4,T5 >
+{
+ typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6
+ >
+struct vector<
+ T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector7< T0,T1,T2,T3,T4,T5,T6 >
+{
+ typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7
+ >
+struct vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+ typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8
+ >
+struct vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+ typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ >
+struct vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+ typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ , typename T10
+ >
+struct vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+ typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+ , na, na, na, na
+ >
+ : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+ typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+ , na, na, na, na
+ >
+ : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+ typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+ , na, na, na, na
+ >
+ : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+ typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+ , na, na, na, na
+ >
+ : vector15<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ >
+{
+ typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, na, na, na, na
+ >
+ : vector16<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15
+ >
+{
+ typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, na, na, na
+ >
+ : vector17<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16
+ >
+{
+ typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, na, na
+ >
+ : vector18<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17
+ >
+{
+ typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, na
+ >
+ : vector19<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18
+ >
+{
+ typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+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 vector
+ : vector20<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, T19
+ >
+{
+ typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/mwcw/vector_c.hpp b/boost/boost/mpl/aux_/preprocessed/mwcw/vector_c.hpp
new file mode 100644
index 00000000000..0f1560d7f13
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/mwcw/vector_c.hpp
@@ -0,0 +1,309 @@
+
+// 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/vector_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+ , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+ , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+ , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+ , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+ , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+ , long C18 = LONG_MAX, long C19 = LONG_MAX
+ >
+struct vector_c;
+
+template<
+ typename T
+ >
+struct vector_c<
+ T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector0_c<T>
+{
+ typedef typename vector0_c<T>::type type;
+};
+
+template<
+ typename T, long C0
+ >
+struct vector_c<
+ T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector1_c< T, T(C0) >
+{
+ typedef typename vector1_c< T, T(C0) >::type type;
+};
+
+template<
+ typename T, long C0, long C1
+ >
+struct vector_c<
+ T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector2_c< T, T(C0), T(C1) >
+{
+ typedef typename vector2_c< T, T(C0), T(C1) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2
+ >
+struct vector_c<
+ T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector3_c< T, T(C0), T(C1), T(C2) >
+{
+ typedef typename vector3_c< T, T(C0), T(C1), T(C2) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector4_c< T, T(C0), T(C1), T(C2), T(C3) >
+{
+ typedef typename vector4_c< T, T(C0), T(C1), T(C2), T(C3) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) >
+{
+ typedef typename vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) >
+{
+ typedef typename vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) >
+{
+ typedef typename vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX
+ >
+ : vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) >
+{
+ typedef typename vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX
+ >
+ : vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) >
+{
+ typedef typename vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX
+ >
+ : vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) >
+{
+ typedef typename vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) >
+{
+ typedef typename vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector12_c< 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) >
+{
+ typedef typename vector12_c< 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) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector13_c< 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) >
+{
+ typedef typename vector13_c< 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) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector14_c< 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) >
+{
+ typedef typename vector14_c< 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) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector15_c< 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) >
+{
+ typedef typename vector15_c< 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) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector16_c< 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) >
+{
+ typedef typename vector16_c< 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) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector17_c< 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) >
+{
+ typedef typename vector17_c< 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) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, LONG_MAX, LONG_MAX
+ >
+ : vector18_c< 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) >
+{
+ typedef typename vector18_c< 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) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, C18, LONG_MAX
+ >
+ : vector19_c< 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) >
+{
+ typedef typename vector19_c< 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) >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+struct vector_c
+ : vector20_c< 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) >
+{
+ typedef typename vector20_c< 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) >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ctps/advance_backward.hpp b/boost/boost/mpl/aux_/preprocessed/no_ctps/advance_backward.hpp
new file mode 100644
index 00000000000..26de94cea1a
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ctps/advance_backward.hpp
@@ -0,0 +1,97 @@
+
+// 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/aux_/advance_backward.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+template< long N > struct advance_backward;
+template<>
+struct advance_backward<0>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef iter0 type;
+ };
+};
+
+template<>
+struct advance_backward<1>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename prior<iter0>::type iter1;
+ typedef iter1 type;
+ };
+};
+
+template<>
+struct advance_backward<2>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename prior<iter0>::type iter1;
+ typedef typename prior<iter1>::type iter2;
+ typedef iter2 type;
+ };
+};
+
+template<>
+struct advance_backward<3>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename prior<iter0>::type iter1;
+ typedef typename prior<iter1>::type iter2;
+ typedef typename prior<iter2>::type iter3;
+ typedef iter3 type;
+ };
+};
+
+template<>
+struct advance_backward<4>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename prior<iter0>::type iter1;
+ typedef typename prior<iter1>::type iter2;
+ typedef typename prior<iter2>::type iter3;
+ typedef typename prior<iter3>::type iter4;
+ typedef iter4 type;
+ };
+};
+
+template< long N >
+struct advance_backward
+{
+ template< typename Iterator > struct apply
+ {
+ typedef typename apply_wrap1<
+ advance_backward<4>
+ , Iterator
+ >::type chunk_result_;
+
+ typedef typename apply_wrap1<
+ advance_backward<(
+ (N - 4) < 0
+ ? 0
+ : N - 4
+ )>
+ , chunk_result_
+ >::type type;
+ };
+};
+
+}}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ctps/advance_forward.hpp b/boost/boost/mpl/aux_/preprocessed/no_ctps/advance_forward.hpp
new file mode 100644
index 00000000000..b137cc72af1
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ctps/advance_forward.hpp
@@ -0,0 +1,97 @@
+
+// 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/aux_/advance_forward.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+template< long N > struct advance_forward;
+template<>
+struct advance_forward<0>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef iter0 type;
+ };
+};
+
+template<>
+struct advance_forward<1>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename next<iter0>::type iter1;
+ typedef iter1 type;
+ };
+};
+
+template<>
+struct advance_forward<2>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename next<iter0>::type iter1;
+ typedef typename next<iter1>::type iter2;
+ typedef iter2 type;
+ };
+};
+
+template<>
+struct advance_forward<3>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename next<iter0>::type iter1;
+ typedef typename next<iter1>::type iter2;
+ typedef typename next<iter2>::type iter3;
+ typedef iter3 type;
+ };
+};
+
+template<>
+struct advance_forward<4>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename next<iter0>::type iter1;
+ typedef typename next<iter1>::type iter2;
+ typedef typename next<iter2>::type iter3;
+ typedef typename next<iter3>::type iter4;
+ typedef iter4 type;
+ };
+};
+
+template< long N >
+struct advance_forward
+{
+ template< typename Iterator > struct apply
+ {
+ typedef typename apply_wrap1<
+ advance_forward<4>
+ , Iterator
+ >::type chunk_result_;
+
+ typedef typename apply_wrap1<
+ advance_forward<(
+ (N - 4) < 0
+ ? 0
+ : N - 4
+ )>
+ , chunk_result_
+ >::type type;
+ };
+};
+
+}}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ctps/and.hpp b/boost/boost/mpl/aux_/preprocessed/no_ctps/and.hpp
new file mode 100644
index 00000000000..555c8001678
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ctps/and.hpp
@@ -0,0 +1,73 @@
+
+// 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/and.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< bool C_ > struct and_impl
+{
+ template<
+ typename T1, typename T2, typename T3, typename T4
+ >
+ struct result_
+ : false_
+ {
+ };
+};
+
+template<> struct and_impl<true>
+{
+ template<
+ typename T1, typename T2, typename T3, typename T4
+ >
+ struct result_
+ : and_impl<
+ BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+ >::template result_< T2,T3,T4,true_ >
+ {
+ };
+};
+
+template<>
+struct and_impl<true>
+ ::result_< true_,true_,true_,true_ >
+ : true_
+{
+};
+
+} // namespace aux
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(T1)
+ , typename BOOST_MPL_AUX_NA_PARAM(T2)
+ , typename T3 = true_, typename T4 = true_, typename T5 = true_
+ >
+struct and_
+
+ : aux::and_impl<
+ BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+ >::template result_< T2,T3,T4,T5 >
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , and_
+ , ( T1, T2, T3, T4, T5)
+ )
+};
+
+BOOST_MPL_AUX_NA_SPEC2(
+ 2
+ , 5
+ , and_
+ )
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ctps/apply.hpp b/boost/boost/mpl/aux_/preprocessed/no_ctps/apply.hpp
new file mode 100644
index 00000000000..9838e799b57
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ctps/apply.hpp
@@ -0,0 +1,268 @@
+
+// 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/apply.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename F
+ >
+struct apply0
+
+ : apply_wrap0<
+ typename lambda<F>::type
+
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 1
+ , apply0
+ , (F )
+ )
+};
+
+namespace aux {
+
+template<>
+struct apply_chooser<0>
+{
+ template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+ struct result_
+ {
+ typedef apply0<
+ F
+ > type;
+ };
+};
+
+} // namespace aux
+
+template<
+ typename F, typename T1
+ >
+struct apply1
+
+ : apply_wrap1<
+ typename lambda<F>::type
+ , T1
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 2
+ , apply1
+ , (F, T1)
+ )
+};
+
+namespace aux {
+
+template<>
+struct apply_chooser<1>
+{
+ template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+ struct result_
+ {
+ typedef apply1<
+ F, T1
+ > type;
+ };
+};
+
+} // namespace aux
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct apply2
+
+ : apply_wrap2<
+ typename lambda<F>::type
+ , T1, T2
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 3
+ , apply2
+ , (F, T1, T2)
+ )
+};
+
+namespace aux {
+
+template<>
+struct apply_chooser<2>
+{
+ template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+ struct result_
+ {
+ typedef apply2<
+ F, T1, T2
+ > type;
+ };
+};
+
+} // namespace aux
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct apply3
+
+ : apply_wrap3<
+ typename lambda<F>::type
+ , T1, T2, T3
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 4
+ , apply3
+ , (F, T1, T2, T3)
+ )
+};
+
+namespace aux {
+
+template<>
+struct apply_chooser<3>
+{
+ template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+ struct result_
+ {
+ typedef apply3<
+ F, T1, T2, T3
+ > type;
+ };
+};
+
+} // namespace aux
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct apply4
+
+ : apply_wrap4<
+ typename lambda<F>::type
+ , T1, T2, T3, T4
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , apply4
+ , (F, T1, T2, T3, T4)
+ )
+};
+
+namespace aux {
+
+template<>
+struct apply_chooser<4>
+{
+ template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+ struct result_
+ {
+ typedef apply4<
+ F, T1, T2, T3, T4
+ > type;
+ };
+};
+
+} // namespace aux
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct apply5
+
+ : apply_wrap5<
+ typename lambda<F>::type
+ , T1, T2, T3, T4, T5
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 6
+ , apply5
+ , (F, T1, T2, T3, T4, T5)
+ )
+};
+
+namespace aux {
+
+template<>
+struct apply_chooser<5>
+{
+ template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+ struct result_
+ {
+ typedef apply5<
+ F, T1, T2, T3, T4, T5
+ > type;
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< typename T >
+struct is_apply_arg
+{
+ static bool const value = true;
+};
+
+template<>
+struct is_apply_arg<na>
+{
+ static bool const value = false;
+};
+
+template<
+ typename T1, typename T2, typename T3, typename T4, typename T5
+ >
+struct apply_count_args
+{
+ static int const value = is_apply_arg<T1>::value + is_apply_arg<T2>::value + is_apply_arg<T3>::value + is_apply_arg<T4>::value + is_apply_arg<T5>::value;
+
+};
+
+}
+
+template<
+ typename F, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na
+ >
+struct apply
+ : aux::apply_chooser<
+ aux::apply_count_args< T1,T2,T3,T4,T5 >::value
+ >::template result_< F,T1,T2,T3,T4,T5 >::type
+{
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ctps/apply_fwd.hpp b/boost/boost/mpl/aux_/preprocessed/no_ctps/apply_fwd.hpp
new file mode 100644
index 00000000000..7de6dad088b
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ctps/apply_fwd.hpp
@@ -0,0 +1,50 @@
+
+// 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/apply_fwd.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< BOOST_AUX_NTTP_DECL(int, arity_) > struct apply_chooser;
+}
+
+template<
+ typename F
+ >
+struct apply0;
+
+template<
+ typename F, typename T1
+ >
+struct apply1;
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct apply2;
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct apply3;
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct apply4;
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct apply5;
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ctps/apply_wrap.hpp b/boost/boost/mpl/aux_/preprocessed/no_ctps/apply_wrap.hpp
new file mode 100644
index 00000000000..efa213dfedc
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ctps/apply_wrap.hpp
@@ -0,0 +1,78 @@
+
+// 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/apply_wrap.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename F
+
+ , typename has_apply_ = typename aux::has_apply<F>::type
+
+ >
+struct apply_wrap0
+
+ : F::template apply< >
+{
+};
+
+template<
+ typename F, typename T1
+
+ >
+struct apply_wrap1
+
+ : F::template apply<T1>
+{
+};
+
+template<
+ typename F, typename T1, typename T2
+
+ >
+struct apply_wrap2
+
+ : F::template apply< T1,T2 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3
+
+ >
+struct apply_wrap3
+
+ : F::template apply< T1,T2,T3 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+
+ >
+struct apply_wrap4
+
+ : F::template apply< T1,T2,T3,T4 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+
+ >
+struct apply_wrap5
+
+ : F::template apply< T1,T2,T3,T4,T5 >
+{
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ctps/arg.hpp b/boost/boost/mpl/aux_/preprocessed/no_ctps/arg.hpp
new file mode 100644
index 00000000000..6f2f8a80709
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ctps/arg.hpp
@@ -0,0 +1,123 @@
+
+// Copyright Peter Dimov 2001-2002
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/arg.hpp" header
+// -- DO NOT modify by hand!
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+template<> struct arg< -1 >
+{
+ BOOST_STATIC_CONSTANT(int, value = -1);
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ typedef U1 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+template<> struct arg<1>
+{
+ BOOST_STATIC_CONSTANT(int, value = 1);
+ typedef arg<2> next;
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ typedef U1 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+template<> struct arg<2>
+{
+ BOOST_STATIC_CONSTANT(int, value = 2);
+ typedef arg<3> next;
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ typedef U2 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+template<> struct arg<3>
+{
+ BOOST_STATIC_CONSTANT(int, value = 3);
+ typedef arg<4> next;
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ typedef U3 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+template<> struct arg<4>
+{
+ BOOST_STATIC_CONSTANT(int, value = 4);
+ typedef arg<5> next;
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ typedef U4 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+template<> struct arg<5>
+{
+ BOOST_STATIC_CONSTANT(int, value = 5);
+ typedef arg<6> next;
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ typedef U5 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+BOOST_MPL_AUX_NONTYPE_ARITY_SPEC(1,int, arg)
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ctps/basic_bind.hpp b/boost/boost/mpl/aux_/preprocessed/no_ctps/basic_bind.hpp
new file mode 100644
index 00000000000..254e5b8886c
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ctps/basic_bind.hpp
@@ -0,0 +1,486 @@
+
+// Copyright Peter Dimov 2001
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/aux_/basic_bind.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< bool >
+struct resolve_arg_impl
+{
+ template<
+ typename T, typename U1, typename U2, typename U3
+ , typename U4, typename U5
+ >
+ struct result_
+ {
+ typedef T type;
+ };
+};
+
+template<>
+struct resolve_arg_impl<true>
+{
+ template<
+ typename T, typename U1, typename U2, typename U3
+ , typename U4, typename U5
+ >
+ struct result_
+ {
+ typedef typename apply_wrap5<
+ T
+ , U1, U2, U3, U4, U5
+ >::type type;
+ };
+};
+
+template< typename T > struct is_bind_template;
+
+template<
+ typename T, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg
+ : resolve_arg_impl< is_bind_template<T>::value >
+ ::template result_< T,U1,U2,U3,U4,U5 >
+{
+};
+
+template< int arity_ > struct bind_chooser;
+
+aux::no_tag is_bind_helper(...);
+template< typename T > aux::no_tag is_bind_helper(protect<T>*);
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+aux::yes_tag is_bind_helper(bind< F,T1,T2,T3,T4,T5 >*);
+
+template< int N >
+aux::yes_tag is_bind_helper(arg<N>*);
+
+template< bool is_ref_ = true >
+struct is_bind_template_impl
+{
+ template< typename T > struct result_
+ {
+ BOOST_STATIC_CONSTANT(bool, value = false);
+ };
+};
+
+template<>
+struct is_bind_template_impl<false>
+{
+ template< typename T > struct result_
+ {
+ BOOST_STATIC_CONSTANT(bool, value =
+ sizeof(aux::is_bind_helper(static_cast<T*>(0)))
+ == sizeof(aux::yes_tag)
+ );
+ };
+};
+
+template< typename T > struct is_bind_template
+ : is_bind_template_impl< ::boost::detail::is_reference_impl<T>::value >
+ ::template result_<T>
+{
+};
+
+} // namespace aux
+
+template<
+ typename F
+ >
+struct bind0
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+
+ public:
+ typedef typename apply_wrap0<
+ f_
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F
+ >
+aux::yes_tag
+is_bind_helper(bind0<F>*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(1, bind0)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)
+
+namespace aux {
+
+template<>
+struct bind_chooser<0>
+{
+ template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+ struct result_
+ {
+ typedef bind0<F> type;
+ };
+};
+
+} // namespace aux
+
+template<
+ typename F, typename T1
+ >
+struct bind1
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+
+ public:
+ typedef typename apply_wrap1<
+ f_
+ , typename t1::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1
+ >
+aux::yes_tag
+is_bind_helper(bind1< F,T1 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(2, bind1)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)
+
+namespace aux {
+
+template<>
+struct bind_chooser<1>
+{
+ template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+ struct result_
+ {
+ typedef bind1< F,T1 > type;
+ };
+};
+
+} // namespace aux
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct bind2
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+ typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+
+ public:
+ typedef typename apply_wrap2<
+ f_
+ , typename t1::type, typename t2::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2
+ >
+aux::yes_tag
+is_bind_helper(bind2< F,T1,T2 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(3, bind2)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)
+
+namespace aux {
+
+template<>
+struct bind_chooser<2>
+{
+ template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+ struct result_
+ {
+ typedef bind2< F,T1,T2 > type;
+ };
+};
+
+} // namespace aux
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct bind3
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+ typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+ typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+
+ public:
+ typedef typename apply_wrap3<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+aux::yes_tag
+is_bind_helper(bind3< F,T1,T2,T3 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(4, bind3)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)
+
+namespace aux {
+
+template<>
+struct bind_chooser<3>
+{
+ template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+ struct result_
+ {
+ typedef bind3< F,T1,T2,T3 > type;
+ };
+};
+
+} // namespace aux
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct bind4
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+ typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+ typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+ typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;
+
+ public:
+ typedef typename apply_wrap4<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ , typename t4::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+aux::yes_tag
+is_bind_helper(bind4< F,T1,T2,T3,T4 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
+
+namespace aux {
+
+template<>
+struct bind_chooser<4>
+{
+ template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+ struct result_
+ {
+ typedef bind4< F,T1,T2,T3,T4 > type;
+ };
+};
+
+} // namespace aux
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct bind5
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+ typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+ typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+ typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;
+ typedef aux::resolve_bind_arg< T5,U1,U2,U3,U4,U5 > t5;
+
+ public:
+ typedef typename apply_wrap5<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ , typename t4::type, typename t5::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+aux::yes_tag
+is_bind_helper(bind5< F,T1,T2,T3,T4,T5 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
+
+namespace aux {
+
+template<>
+struct bind_chooser<5>
+{
+ template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+ struct result_
+ {
+ typedef bind5< F,T1,T2,T3,T4,T5 > type;
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< typename T >
+struct is_bind_arg
+{
+ BOOST_STATIC_CONSTANT(bool, value = true);
+};
+
+template<>
+struct is_bind_arg<na>
+{
+ BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+template<
+ typename T1, typename T2, typename T3, typename T4, typename T5
+ >
+struct bind_count_args
+{
+ BOOST_STATIC_CONSTANT(int, value =
+ is_bind_arg<T1>::value + is_bind_arg<T2>::value
+ + is_bind_arg<T3>::value + is_bind_arg<T4>::value
+ + is_bind_arg<T5>::value
+ );
+
+};
+
+}
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct bind
+ : aux::bind_chooser<
+ aux::bind_count_args< T1,T2,T3,T4,T5 >::value
+ >::template result_< F,T1,T2,T3,T4,T5 >::type
+{
+};
+
+BOOST_MPL_AUX_ARITY_SPEC(
+ 6
+ , bind
+ )
+
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(
+ 6
+ , bind
+ )
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ctps/bind.hpp b/boost/boost/mpl/aux_/preprocessed/no_ctps/bind.hpp
new file mode 100644
index 00000000000..12062b425b7
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ctps/bind.hpp
@@ -0,0 +1,590 @@
+
+// Copyright Peter Dimov 2001
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/bind.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< bool >
+struct resolve_arg_impl
+{
+ template<
+ typename T, typename U1, typename U2, typename U3
+ , typename U4, typename U5
+ >
+ struct result_
+ {
+ typedef T type;
+ };
+};
+
+template<>
+struct resolve_arg_impl<true>
+{
+ template<
+ typename T, typename U1, typename U2, typename U3
+ , typename U4, typename U5
+ >
+ struct result_
+ {
+ typedef typename apply_wrap5<
+ T
+ , U1, U2, U3, U4, U5
+ >::type type;
+ };
+};
+
+template< typename T > struct is_bind_template;
+
+template<
+ typename T, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg
+ : resolve_arg_impl< is_bind_template<T>::value >
+ ::template result_< T,U1,U2,U3,U4,U5 >
+{
+};
+
+template< typename T >
+struct replace_unnamed_arg_impl
+{
+ template< typename Arg > struct result_
+ {
+ typedef Arg next;
+ typedef T type;
+ };
+};
+
+template<>
+struct replace_unnamed_arg_impl< arg< -1 > >
+{
+ template< typename Arg > struct result_
+ {
+ typedef typename next<Arg>::type next;
+ typedef Arg type;
+ };
+};
+
+template< typename T, typename Arg >
+struct replace_unnamed_arg
+ : replace_unnamed_arg_impl<T>::template result_<Arg>
+{
+};
+
+template< int arity_ > struct bind_chooser;
+
+aux::no_tag is_bind_helper(...);
+template< typename T > aux::no_tag is_bind_helper(protect<T>*);
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+aux::yes_tag is_bind_helper(bind< F,T1,T2,T3,T4,T5 >*);
+
+template< int N >
+aux::yes_tag is_bind_helper(arg<N>*);
+
+template< bool is_ref_ = true >
+struct is_bind_template_impl
+{
+ template< typename T > struct result_
+ {
+ BOOST_STATIC_CONSTANT(bool, value = false);
+ };
+};
+
+template<>
+struct is_bind_template_impl<false>
+{
+ template< typename T > struct result_
+ {
+ BOOST_STATIC_CONSTANT(bool, value =
+ sizeof(aux::is_bind_helper(static_cast<T*>(0)))
+ == sizeof(aux::yes_tag)
+ );
+ };
+};
+
+template< typename T > struct is_bind_template
+ : is_bind_template_impl< ::boost::detail::is_reference_impl<T>::value >
+ ::template result_<T>
+{
+};
+
+} // namespace aux
+
+template<
+ typename F
+ >
+struct bind0
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ public:
+ typedef typename apply_wrap0<
+ f_
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F
+ >
+aux::yes_tag
+is_bind_helper(bind0<F>*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(1, bind0)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)
+
+namespace aux {
+
+template<>
+struct bind_chooser<0>
+{
+ template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+ struct result_
+ {
+ typedef bind0<F> type;
+ };
+};
+
+} // namespace aux
+
+template<
+ typename F, typename T1
+ >
+struct bind1
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ public:
+ typedef typename apply_wrap1<
+ f_
+ , typename t1::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1
+ >
+aux::yes_tag
+is_bind_helper(bind1< F,T1 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(2, bind1)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)
+
+namespace aux {
+
+template<>
+struct bind_chooser<1>
+{
+ template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+ struct result_
+ {
+ typedef bind1< F,T1 > type;
+ };
+};
+
+} // namespace aux
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct bind2
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ typedef aux::replace_unnamed_arg< T2,n2 > r2;
+ typedef typename r2::type a2;
+ typedef typename r2::next n3;
+ typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+ ///
+ public:
+ typedef typename apply_wrap2<
+ f_
+ , typename t1::type, typename t2::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2
+ >
+aux::yes_tag
+is_bind_helper(bind2< F,T1,T2 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(3, bind2)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)
+
+namespace aux {
+
+template<>
+struct bind_chooser<2>
+{
+ template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+ struct result_
+ {
+ typedef bind2< F,T1,T2 > type;
+ };
+};
+
+} // namespace aux
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct bind3
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ typedef aux::replace_unnamed_arg< T2,n2 > r2;
+ typedef typename r2::type a2;
+ typedef typename r2::next n3;
+ typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+ ///
+ typedef aux::replace_unnamed_arg< T3,n3 > r3;
+ typedef typename r3::type a3;
+ typedef typename r3::next n4;
+ typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+ ///
+ public:
+ typedef typename apply_wrap3<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+aux::yes_tag
+is_bind_helper(bind3< F,T1,T2,T3 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(4, bind3)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)
+
+namespace aux {
+
+template<>
+struct bind_chooser<3>
+{
+ template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+ struct result_
+ {
+ typedef bind3< F,T1,T2,T3 > type;
+ };
+};
+
+} // namespace aux
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct bind4
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ typedef aux::replace_unnamed_arg< T2,n2 > r2;
+ typedef typename r2::type a2;
+ typedef typename r2::next n3;
+ typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+ ///
+ typedef aux::replace_unnamed_arg< T3,n3 > r3;
+ typedef typename r3::type a3;
+ typedef typename r3::next n4;
+ typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+ ///
+ typedef aux::replace_unnamed_arg< T4,n4 > r4;
+ typedef typename r4::type a4;
+ typedef typename r4::next n5;
+ typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
+ ///
+ public:
+ typedef typename apply_wrap4<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ , typename t4::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+aux::yes_tag
+is_bind_helper(bind4< F,T1,T2,T3,T4 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
+
+namespace aux {
+
+template<>
+struct bind_chooser<4>
+{
+ template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+ struct result_
+ {
+ typedef bind4< F,T1,T2,T3,T4 > type;
+ };
+};
+
+} // namespace aux
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct bind5
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ typedef aux::replace_unnamed_arg< T2,n2 > r2;
+ typedef typename r2::type a2;
+ typedef typename r2::next n3;
+ typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+ ///
+ typedef aux::replace_unnamed_arg< T3,n3 > r3;
+ typedef typename r3::type a3;
+ typedef typename r3::next n4;
+ typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+ ///
+ typedef aux::replace_unnamed_arg< T4,n4 > r4;
+ typedef typename r4::type a4;
+ typedef typename r4::next n5;
+ typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
+ ///
+ typedef aux::replace_unnamed_arg< T5,n5 > r5;
+ typedef typename r5::type a5;
+ typedef typename r5::next n6;
+ typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5;
+ ///
+ public:
+ typedef typename apply_wrap5<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ , typename t4::type, typename t5::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+aux::yes_tag
+is_bind_helper(bind5< F,T1,T2,T3,T4,T5 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
+
+namespace aux {
+
+template<>
+struct bind_chooser<5>
+{
+ template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+ struct result_
+ {
+ typedef bind5< F,T1,T2,T3,T4,T5 > type;
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< typename T >
+struct is_bind_arg
+{
+ BOOST_STATIC_CONSTANT(bool, value = true);
+};
+
+template<>
+struct is_bind_arg<na>
+{
+ BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+template<
+ typename T1, typename T2, typename T3, typename T4, typename T5
+ >
+struct bind_count_args
+{
+ BOOST_STATIC_CONSTANT(int, value =
+ is_bind_arg<T1>::value + is_bind_arg<T2>::value
+ + is_bind_arg<T3>::value + is_bind_arg<T4>::value
+ + is_bind_arg<T5>::value
+ );
+
+};
+
+}
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct bind
+ : aux::bind_chooser<
+ aux::bind_count_args< T1,T2,T3,T4,T5 >::value
+ >::template result_< F,T1,T2,T3,T4,T5 >::type
+{
+};
+
+BOOST_MPL_AUX_ARITY_SPEC(
+ 6
+ , bind
+ )
+
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(
+ 6
+ , bind
+ )
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ctps/bind_fwd.hpp b/boost/boost/mpl/aux_/preprocessed/no_ctps/bind_fwd.hpp
new file mode 100644
index 00000000000..c4a5060ff8b
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ctps/bind_fwd.hpp
@@ -0,0 +1,52 @@
+
+// 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/bind_fwd.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename F, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na
+ >
+struct bind;
+
+template<
+ typename F
+ >
+struct bind0;
+
+template<
+ typename F, typename T1
+ >
+struct bind1;
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct bind2;
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct bind3;
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct bind4;
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct bind5;
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ctps/bitand.hpp b/boost/boost/mpl/aux_/preprocessed/no_ctps/bitand.hpp
new file mode 100644
index 00000000000..020d6ba4c67
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ctps/bitand.hpp
@@ -0,0 +1,134 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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)
+//
+
+// Preprocessed version of "boost/mpl/bitand.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct bitand_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< bitand_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< bitand_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitand_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct bitand_impl< na,integral_c_tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct bitand_impl< integral_c_tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct bitand_tag
+{
+ typedef typename T::tag type;
+};
+
+/// forward declaration
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct bitand_2;
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct bitand_
+
+ : if_<
+
+ is_na<N3>
+ , bitand_2< N1,N2 >
+ , bitand_<
+ bitand_2< N1,N2 >
+ , N3, N4, N5
+ >
+ >::type
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , bitand_
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1
+ , typename N2
+ >
+struct bitand_2
+ : bitand_impl<
+ typename bitand_tag<N1>::type
+ , typename bitand_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, bitand_2, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitand_)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct bitand_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ & BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ctps/bitor.hpp b/boost/boost/mpl/aux_/preprocessed/no_ctps/bitor.hpp
new file mode 100644
index 00000000000..04748776754
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ctps/bitor.hpp
@@ -0,0 +1,134 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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)
+//
+
+// Preprocessed version of "boost/mpl/bitor.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct bitor_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< bitor_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< bitor_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitor_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct bitor_impl< na,integral_c_tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct bitor_impl< integral_c_tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct bitor_tag
+{
+ typedef typename T::tag type;
+};
+
+/// forward declaration
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct bitor_2;
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct bitor_
+
+ : if_<
+
+ is_na<N3>
+ , bitor_2< N1,N2 >
+ , bitor_<
+ bitor_2< N1,N2 >
+ , N3, N4, N5
+ >
+ >::type
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , bitor_
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1
+ , typename N2
+ >
+struct bitor_2
+ : bitor_impl<
+ typename bitor_tag<N1>::type
+ , typename bitor_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, bitor_2, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitor_)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct bitor_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ | BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ctps/bitxor.hpp b/boost/boost/mpl/aux_/preprocessed/no_ctps/bitxor.hpp
new file mode 100644
index 00000000000..42a9758bbdd
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ctps/bitxor.hpp
@@ -0,0 +1,134 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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)
+//
+
+// Preprocessed version of "boost/mpl/bitxor.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct bitxor_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< bitxor_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< bitxor_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitxor_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct bitxor_impl< na,integral_c_tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct bitxor_impl< integral_c_tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct bitxor_tag
+{
+ typedef typename T::tag type;
+};
+
+/// forward declaration
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct bitxor_2;
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct bitxor_
+
+ : if_<
+
+ is_na<N3>
+ , bitxor_2< N1,N2 >
+ , bitxor_<
+ bitxor_2< N1,N2 >
+ , N3, N4, N5
+ >
+ >::type
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , bitxor_
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1
+ , typename N2
+ >
+struct bitxor_2
+ : bitxor_impl<
+ typename bitxor_tag<N1>::type
+ , typename bitxor_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, bitxor_2, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitxor_)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct bitxor_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ ^ BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ctps/deque.hpp b/boost/boost/mpl/aux_/preprocessed/no_ctps/deque.hpp
new file mode 100644
index 00000000000..a0445d9dfdd
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ctps/deque.hpp
@@ -0,0 +1,556 @@
+
+// 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/deque.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< int N >
+struct deque_chooser;
+
+}
+
+namespace aux {
+
+template<>
+struct deque_chooser<0>
+{
+ 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 result_
+ {
+ typedef vector0<
+
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<1>
+{
+ 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 result_
+ {
+ typedef typename vector1<
+ T0
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<2>
+{
+ 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 result_
+ {
+ typedef typename vector2<
+ T0, T1
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<3>
+{
+ 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 result_
+ {
+ typedef typename vector3<
+ T0, T1, T2
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<4>
+{
+ 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 result_
+ {
+ typedef typename vector4<
+ T0, T1, T2, T3
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<5>
+{
+ 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 result_
+ {
+ typedef typename vector5<
+ T0, T1, T2, T3, T4
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<6>
+{
+ 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 result_
+ {
+ typedef typename vector6<
+ T0, T1, T2, T3, T4, T5
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<7>
+{
+ 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 result_
+ {
+ typedef typename vector7<
+ T0, T1, T2, T3, T4, T5, T6
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<8>
+{
+ 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 result_
+ {
+ typedef typename vector8<
+ T0, T1, T2, T3, T4, T5, T6, T7
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<9>
+{
+ 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 result_
+ {
+ typedef typename vector9<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<10>
+{
+ 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 result_
+ {
+ typedef typename vector10<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<11>
+{
+ 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 result_
+ {
+ typedef typename vector11<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<12>
+{
+ 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 result_
+ {
+ typedef typename vector12<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<13>
+{
+ 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 result_
+ {
+ typedef typename vector13<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<14>
+{
+ 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 result_
+ {
+ typedef typename vector14<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<15>
+{
+ 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 result_
+ {
+ typedef typename vector15<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<16>
+{
+ 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 result_
+ {
+ typedef typename vector16<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<17>
+{
+ 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 result_
+ {
+ typedef typename vector17<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<18>
+{
+ 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 result_
+ {
+ typedef typename vector18<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<19>
+{
+ 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 result_
+ {
+ typedef typename vector19<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<20>
+{
+ 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 result_
+ {
+ typedef typename vector20<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< typename T >
+struct is_deque_arg
+{
+ BOOST_STATIC_CONSTANT(bool, value = true);
+};
+
+template<>
+struct is_deque_arg<na>
+{
+ BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+template<
+ 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 deque_count_args
+{
+ BOOST_STATIC_CONSTANT(int, value =
+ is_deque_arg<T1>::value + is_deque_arg<T2>::value
+ + is_deque_arg<T3>::value + is_deque_arg<T4>::value
+ + is_deque_arg<T5>::value + is_deque_arg<T6>::value
+ + is_deque_arg<T7>::value + is_deque_arg<T8>::value
+ + is_deque_arg<T9>::value + is_deque_arg<T10>::value
+ + is_deque_arg<T11>::value + is_deque_arg<T12>::value
+ + is_deque_arg<T13>::value + is_deque_arg<T14>::value
+ + is_deque_arg<T15>::value + is_deque_arg<T16>::value
+ + is_deque_arg<T17>::value + is_deque_arg<T18>::value
+ + is_deque_arg<T19>::value + is_deque_arg<T20>::value
+ );
+
+};
+
+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 deque_impl
+{
+ typedef aux::deque_count_args<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ > arg_num_;
+
+ typedef typename aux::deque_chooser< arg_num_::value >
+ ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+} // namespace aux
+
+template<
+ typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+ , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+ , typename T12 = na, typename T13 = na, typename T14 = na
+ , typename T15 = na, typename T16 = na, typename T17 = na
+ , typename T18 = na, typename T19 = na
+ >
+struct deque
+ : aux::deque_impl<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ >::type
+{
+ typedef typename aux::deque_impl<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ctps/divides.hpp b/boost/boost/mpl/aux_/preprocessed/no_ctps/divides.hpp
new file mode 100644
index 00000000000..00636dcbf2d
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ctps/divides.hpp
@@ -0,0 +1,133 @@
+
+// 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/divides.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct divides_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< divides_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< divides_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct divides_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct divides_impl< na,integral_c_tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct divides_impl< integral_c_tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct divides_tag
+{
+ typedef typename T::tag type;
+};
+
+/// forward declaration
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct divides2;
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct divides
+
+ : if_<
+
+ is_na<N3>
+ , divides2< N1,N2 >
+ , divides<
+ divides2< N1,N2 >
+ , N3, N4, N5
+ >
+ >::type
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , divides
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1
+ , typename N2
+ >
+struct divides2
+ : divides_impl<
+ typename divides_tag<N1>::type
+ , typename divides_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, divides2, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, divides)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct divides_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ / BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ctps/equal_to.hpp b/boost/boost/mpl/aux_/preprocessed/no_ctps/equal_to.hpp
new file mode 100644
index 00000000000..b14cdda3b96
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ctps/equal_to.hpp
@@ -0,0 +1,94 @@
+
+// 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/equal_to.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct equal_to_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct equal_to_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct equal_to_impl< na,integral_c_tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct equal_to_impl< integral_c_tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct equal_to_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct equal_to
+
+ : equal_to_impl<
+ typename equal_to_tag<N1>::type
+ , typename equal_to_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, equal_to, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, equal_to)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct equal_to_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value == BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ctps/fold_impl.hpp b/boost/boost/mpl/aux_/preprocessed/no_ctps/fold_impl.hpp
new file mode 100644
index 00000000000..58066d81f61
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ctps/fold_impl.hpp
@@ -0,0 +1,245 @@
+
+// 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/aux_/fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+ int N
+ , typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl;
+
+template< int N >
+struct fold_chunk;
+
+template<> struct fold_chunk<0>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State state0;
+ typedef state0 state;
+ typedef iter0 iterator;
+ };
+};
+
+template<> struct fold_chunk<1>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+
+
+ typedef state1 state;
+ typedef iter1 iterator;
+ };
+};
+
+template<> struct fold_chunk<2>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+
+
+ typedef state2 state;
+ typedef iter2 iterator;
+ };
+};
+
+template<> struct fold_chunk<3>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;
+ typedef typename mpl::next<iter2>::type iter3;
+
+
+ typedef state3 state;
+ typedef iter3 iterator;
+ };
+};
+
+template<> struct fold_chunk<4>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp, state3, typename deref<iter3>::type >::type state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef state4 state;
+ typedef iter4 iterator;
+ };
+};
+
+template< int N >
+struct fold_chunk
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef fold_impl<
+ 4
+ , First
+ , Last
+ , State
+ , ForwardOp
+ > chunk_;
+
+ typedef fold_impl<
+ ( (N - 4) < 0 ? 0 : N - 4 )
+ , typename chunk_::iterator
+ , Last
+ , typename chunk_::state
+ , ForwardOp
+ > res_;
+
+ typedef typename res_::state state;
+ typedef typename res_::iterator iterator;
+ };
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_step;
+
+template<
+ typename Last
+ , typename State
+ >
+struct fold_null_step
+{
+ typedef Last iterator;
+ typedef State state;
+};
+
+template<>
+struct fold_chunk< -1 >
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef typename if_<
+ typename is_same< First,Last >::type
+ , fold_null_step< Last,State >
+ , fold_step< First,Last,State,ForwardOp >
+ >::type res_;
+
+ typedef typename res_::state state;
+ typedef typename res_::iterator iterator;
+ };
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_step
+{
+ typedef fold_chunk< -1 >::template result_<
+ typename mpl::next<First>::type
+ , Last
+ , typename apply2<ForwardOp,State, typename deref<First>::type>::type
+ , ForwardOp
+ > chunk_;
+
+ typedef typename chunk_::state state;
+ typedef typename chunk_::iterator iterator;
+};
+
+template<
+ int N
+ , typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl
+ : fold_chunk<N>
+ ::template result_< First,Last,State,ForwardOp >
+{
+};
+
+}}}
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ctps/full_lambda.hpp b/boost/boost/mpl/aux_/preprocessed/no_ctps/full_lambda.hpp
new file mode 100644
index 00000000000..bf818731eba
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ctps/full_lambda.hpp
@@ -0,0 +1,554 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/aux_/full_lambda.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template<
+ bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false
+ , bool C5 = false
+ >
+struct lambda_or
+ : true_
+{
+};
+
+template<>
+struct lambda_or< false,false,false,false,false >
+ : false_
+{
+};
+
+} // namespace aux
+
+template<
+ typename T
+ , typename Tag
+
+ >
+struct lambda
+{
+ typedef false_ is_le;
+ typedef T result_;
+ typedef T type;
+};
+
+template<
+ typename T
+ >
+struct is_lambda_expression
+ : lambda<T>::is_le
+{
+};
+
+template< int N, typename Tag >
+struct lambda< arg<N>, Tag >
+{
+ typedef true_ is_le;
+ typedef mpl::arg<N> result_; // qualified for the sake of MIPSpro 7.41
+ typedef mpl::protect<result_> type;
+};
+
+template<
+ typename F
+ , typename Tag
+ >
+struct lambda<
+ bind0<F>
+ , Tag
+
+ >
+{
+ typedef false_ is_le;
+ typedef bind0<
+ F
+ > result_;
+
+ typedef result_ type;
+};
+
+namespace aux {
+
+template<
+ typename IsLE, typename Tag
+ , template< typename P1 > class F
+ , typename L1
+ >
+struct le_result1
+{
+ typedef F<
+ typename L1::type
+ > result_;
+
+ typedef result_ type;
+};
+
+template<
+ typename Tag
+ , template< typename P1 > class F
+ , typename L1
+ >
+struct le_result1< true_,Tag,F,L1 >
+{
+ typedef bind1<
+ quote1< F,Tag >
+ , typename L1::result_
+ > result_;
+
+ typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+ template< typename P1 > class F
+ , typename T1
+ , typename Tag
+ >
+struct lambda<
+ F<T1>
+ , Tag
+
+ >
+{
+ typedef lambda< T1,Tag > l1;
+ typedef typename l1::is_le is_le1;
+ typedef typename aux::lambda_or<
+ is_le1::value
+ >::type is_le;
+
+ typedef aux::le_result1<
+ is_le, Tag, F, l1
+ > le_result_;
+
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+template<
+ typename F, typename T1
+ , typename Tag
+ >
+struct lambda<
+ bind1< F,T1 >
+ , Tag
+
+ >
+{
+ typedef false_ is_le;
+ typedef bind1<
+ F
+ , T1
+ > result_;
+
+ typedef result_ type;
+};
+
+namespace aux {
+
+template<
+ typename IsLE, typename Tag
+ , template< typename P1, typename P2 > class F
+ , typename L1, typename L2
+ >
+struct le_result2
+{
+ typedef F<
+ typename L1::type, typename L2::type
+ > result_;
+
+ typedef result_ type;
+};
+
+template<
+ typename Tag
+ , template< typename P1, typename P2 > class F
+ , typename L1, typename L2
+ >
+struct le_result2< true_,Tag,F,L1,L2 >
+{
+ typedef bind2<
+ quote2< F,Tag >
+ , typename L1::result_, typename L2::result_
+ > result_;
+
+ typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+ template< typename P1, typename P2 > class F
+ , typename T1, typename T2
+ , typename Tag
+ >
+struct lambda<
+ F< T1,T2 >
+ , Tag
+
+ >
+{
+ typedef lambda< T1,Tag > l1;
+ typedef lambda< T2,Tag > l2;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+
+
+ typedef typename aux::lambda_or<
+ is_le1::value, is_le2::value
+ >::type is_le;
+
+ typedef aux::le_result2<
+ is_le, Tag, F, l1, l2
+ > le_result_;
+
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+template<
+ typename F, typename T1, typename T2
+ , typename Tag
+ >
+struct lambda<
+ bind2< F,T1,T2 >
+ , Tag
+
+ >
+{
+ typedef false_ is_le;
+ typedef bind2<
+ F
+ , T1, T2
+ > result_;
+
+ typedef result_ type;
+};
+
+namespace aux {
+
+template<
+ typename IsLE, typename Tag
+ , template< typename P1, typename P2, typename P3 > class F
+ , typename L1, typename L2, typename L3
+ >
+struct le_result3
+{
+ typedef F<
+ typename L1::type, typename L2::type, typename L3::type
+ > result_;
+
+ typedef result_ type;
+};
+
+template<
+ typename Tag
+ , template< typename P1, typename P2, typename P3 > class F
+ , typename L1, typename L2, typename L3
+ >
+struct le_result3< true_,Tag,F,L1,L2,L3 >
+{
+ typedef bind3<
+ quote3< F,Tag >
+ , typename L1::result_, typename L2::result_, typename L3::result_
+ > result_;
+
+ typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+ template< typename P1, typename P2, typename P3 > class F
+ , typename T1, typename T2, typename T3
+ , typename Tag
+ >
+struct lambda<
+ F< T1,T2,T3 >
+ , Tag
+
+ >
+{
+ typedef lambda< T1,Tag > l1;
+ typedef lambda< T2,Tag > l2;
+ typedef lambda< T3,Tag > l3;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+
+
+ typedef typename aux::lambda_or<
+ is_le1::value, is_le2::value, is_le3::value
+ >::type is_le;
+
+ typedef aux::le_result3<
+ is_le, Tag, F, l1, l2, l3
+ > le_result_;
+
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ , typename Tag
+ >
+struct lambda<
+ bind3< F,T1,T2,T3 >
+ , Tag
+
+ >
+{
+ typedef false_ is_le;
+ typedef bind3<
+ F
+ , T1, T2, T3
+ > result_;
+
+ typedef result_ type;
+};
+
+namespace aux {
+
+template<
+ typename IsLE, typename Tag
+ , template< typename P1, typename P2, typename P3, typename P4 > class F
+ , typename L1, typename L2, typename L3, typename L4
+ >
+struct le_result4
+{
+ typedef F<
+ typename L1::type, typename L2::type, typename L3::type
+ , typename L4::type
+ > result_;
+
+ typedef result_ type;
+};
+
+template<
+ typename Tag
+ , template< typename P1, typename P2, typename P3, typename P4 > class F
+ , typename L1, typename L2, typename L3, typename L4
+ >
+struct le_result4< true_,Tag,F,L1,L2,L3,L4 >
+{
+ typedef bind4<
+ quote4< F,Tag >
+ , typename L1::result_, typename L2::result_, typename L3::result_
+ , typename L4::result_
+ > result_;
+
+ typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+ template< typename P1, typename P2, typename P3, typename P4 > class F
+ , typename T1, typename T2, typename T3, typename T4
+ , typename Tag
+ >
+struct lambda<
+ F< T1,T2,T3,T4 >
+ , Tag
+
+ >
+{
+ typedef lambda< T1,Tag > l1;
+ typedef lambda< T2,Tag > l2;
+ typedef lambda< T3,Tag > l3;
+ typedef lambda< T4,Tag > l4;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+ typedef typename l4::is_le is_le4;
+
+
+ typedef typename aux::lambda_or<
+ is_le1::value, is_le2::value, is_le3::value, is_le4::value
+ >::type is_le;
+
+ typedef aux::le_result4<
+ is_le, Tag, F, l1, l2, l3, l4
+ > le_result_;
+
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename Tag
+ >
+struct lambda<
+ bind4< F,T1,T2,T3,T4 >
+ , Tag
+
+ >
+{
+ typedef false_ is_le;
+ typedef bind4<
+ F
+ , T1, T2, T3, T4
+ > result_;
+
+ typedef result_ type;
+};
+
+namespace aux {
+
+template<
+ typename IsLE, typename Tag
+ , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F
+ , typename L1, typename L2, typename L3, typename L4, typename L5
+ >
+struct le_result5
+{
+ typedef F<
+ typename L1::type, typename L2::type, typename L3::type
+ , typename L4::type, typename L5::type
+ > result_;
+
+ typedef result_ type;
+};
+
+template<
+ typename Tag
+ , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F
+ , typename L1, typename L2, typename L3, typename L4, typename L5
+ >
+struct le_result5< true_,Tag,F,L1,L2,L3,L4,L5 >
+{
+ typedef bind5<
+ quote5< F,Tag >
+ , typename L1::result_, typename L2::result_, typename L3::result_
+ , typename L4::result_, typename L5::result_
+ > result_;
+
+ typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+ template<
+ typename P1, typename P2, typename P3, typename P4
+ , typename P5
+ >
+ class F
+ , typename T1, typename T2, typename T3, typename T4, typename T5
+ , typename Tag
+ >
+struct lambda<
+ F< T1,T2,T3,T4,T5 >
+ , Tag
+
+ >
+{
+ typedef lambda< T1,Tag > l1;
+ typedef lambda< T2,Tag > l2;
+ typedef lambda< T3,Tag > l3;
+ typedef lambda< T4,Tag > l4;
+ typedef lambda< T5,Tag > l5;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+ typedef typename l4::is_le is_le4;
+ typedef typename l5::is_le is_le5;
+
+
+ typedef typename aux::lambda_or<
+ is_le1::value, is_le2::value, is_le3::value, is_le4::value
+ , is_le5::value
+ >::type is_le;
+
+ typedef aux::le_result5<
+ is_le, Tag, F, l1, l2, l3, l4, l5
+ > le_result_;
+
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ , typename Tag
+ >
+struct lambda<
+ bind5< F,T1,T2,T3,T4,T5 >
+ , Tag
+
+ >
+{
+ typedef false_ is_le;
+ typedef bind5<
+ F
+ , T1, T2, T3, T4, T5
+ > result_;
+
+ typedef result_ type;
+};
+
+/// special case for 'protect'
+template< typename T, typename Tag >
+struct lambda< mpl::protect<T>, Tag >
+{
+ typedef false_ is_le;
+ typedef mpl::protect<T> result_;
+ typedef result_ type;
+};
+
+/// specializations for the main 'bind' form
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ , typename Tag
+ >
+struct lambda<
+ bind< F,T1,T2,T3,T4,T5 >
+ , Tag
+
+ >
+{
+ typedef false_ is_le;
+ typedef bind< F,T1,T2,T3,T4,T5 > result_;
+ typedef result_ type;
+};
+
+/// workaround for MWCW 8.3+/EDG < 303, leads to ambiguity on Digital Mars
+
+template<
+ typename F, typename Tag1, typename Tag2
+ >
+struct lambda<
+ lambda< F,Tag1 >
+ , Tag2
+ >
+{
+ typedef lambda< F,Tag2 > l1;
+ typedef lambda< Tag1,Tag2 > l2;
+ typedef typename l1::is_le is_le;
+ typedef aux::le_result2<is_le, Tag2, mpl::lambda, l1, l2> le_result_;
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, lambda)
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ctps/greater.hpp b/boost/boost/mpl/aux_/preprocessed/no_ctps/greater.hpp
new file mode 100644
index 00000000000..6fdf8badbe6
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ctps/greater.hpp
@@ -0,0 +1,94 @@
+
+// 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/greater.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct greater_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< greater_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< greater_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct greater_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct greater_impl< na,integral_c_tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct greater_impl< integral_c_tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct greater_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct greater
+
+ : greater_impl<
+ typename greater_tag<N1>::type
+ , typename greater_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, greater)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct greater_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value > BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ctps/greater_equal.hpp b/boost/boost/mpl/aux_/preprocessed/no_ctps/greater_equal.hpp
new file mode 100644
index 00000000000..f848eef98c2
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ctps/greater_equal.hpp
@@ -0,0 +1,94 @@
+
+// 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/greater_equal.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct greater_equal_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< greater_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< greater_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct greater_equal_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct greater_equal_impl< na,integral_c_tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct greater_equal_impl< integral_c_tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct greater_equal_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct greater_equal
+
+ : greater_equal_impl<
+ typename greater_equal_tag<N1>::type
+ , typename greater_equal_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater_equal, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, greater_equal)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct greater_equal_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value >= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ctps/inherit.hpp b/boost/boost/mpl/aux_/preprocessed/no_ctps/inherit.hpp
new file mode 100644
index 00000000000..233a1ec30c2
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ctps/inherit.hpp
@@ -0,0 +1,166 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/inherit.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template< bool C1, bool C2 >
+struct inherit2_impl
+{
+ template< typename Derived, typename T1, typename T2 > struct result_
+ : T1, T2
+ {
+ typedef Derived type_;
+ };
+};
+
+template<>
+struct inherit2_impl< false,true >
+{
+ template< typename Derived, typename T1, typename T2 > struct result_
+ : T1
+ {
+ typedef T1 type_;
+ };
+};
+
+template<>
+struct inherit2_impl< true,false >
+{
+ template< typename Derived, typename T1, typename T2 > struct result_
+ : T2
+ {
+ typedef T2 type_;
+ };
+};
+
+template<>
+struct inherit2_impl< true,true >
+{
+ template< typename Derived, typename T1, typename T2 > struct result_
+ {
+ typedef T1 type_;
+ };
+};
+
+} // namespace aux
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(T1)
+ , typename BOOST_MPL_AUX_NA_PARAM(T2)
+ >
+struct inherit2
+ : aux::inherit2_impl<
+ is_empty_base<T1>::value
+ , is_empty_base<T2>::value
+ >::template result_< inherit2< T1,T2 >,T1, T2 >
+{
+ typedef typename inherit2::type_ type;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, inherit2, (T1, T2))
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, inherit2)
+
+template<
+ typename T1 = na, typename T2 = na, typename T3 = na
+ >
+struct inherit3
+ : inherit2<
+ typename inherit2<
+ T1, T2
+ >::type
+ , T3
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 3
+ , inherit3
+ , ( T1, T2, T3)
+ )
+};
+
+BOOST_MPL_AUX_NA_SPEC(3, inherit3)
+
+template<
+ typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na
+ >
+struct inherit4
+ : inherit2<
+ typename inherit3<
+ T1, T2, T3
+ >::type
+ , T4
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 4
+ , inherit4
+ , ( T1, T2, T3, T4)
+ )
+};
+
+BOOST_MPL_AUX_NA_SPEC(4, inherit4)
+
+template<
+ typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na
+ , typename T5 = na
+ >
+struct inherit5
+ : inherit2<
+ typename inherit4<
+ T1, T2, T3, T4
+ >::type
+ , T5
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , inherit5
+ , ( T1, T2, T3, T4, T5)
+ )
+};
+
+BOOST_MPL_AUX_NA_SPEC(5, inherit5)
+
+/// primary template
+
+template<
+ typename T1 = empty_base, typename T2 = empty_base
+ , typename T3 = empty_base, typename T4 = empty_base
+ , typename T5 = empty_base
+ >
+struct inherit
+ : inherit5< T1,T2,T3,T4,T5 >
+{
+};
+
+template<>
+struct inherit< na,na,na,na,na >
+{
+ template<
+
+ typename T1 = empty_base, typename T2 = empty_base
+ , typename T3 = empty_base, typename T4 = empty_base
+ , typename T5 = empty_base
+
+ >
+ struct apply
+ : inherit< T1,T2,T3,T4,T5 >
+ {
+ };
+};
+
+BOOST_MPL_AUX_NA_SPEC_LAMBDA(5, inherit)
+BOOST_MPL_AUX_NA_SPEC_ARITY(5, inherit)
+BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(5, 5, inherit)
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ctps/iter_fold_if_impl.hpp b/boost/boost/mpl/aux_/preprocessed/no_ctps/iter_fold_if_impl.hpp
new file mode 100644
index 00000000000..695179584d3
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ctps/iter_fold_if_impl.hpp
@@ -0,0 +1,133 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/aux_/iter_fold_if_impl.hpp" header
+// -- DO NOT modify by hand!
+
+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;
+ };
+};
+
+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;
+};
+
+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;
+ typedef iter_fold_if_forward_step< typename forward_step0::iterator, typename forward_step0::state, ForwardOp, ForwardPredicate > forward_step1;
+ typedef iter_fold_if_forward_step< typename forward_step1::iterator, typename forward_step1::state, ForwardOp, ForwardPredicate > forward_step2;
+ typedef iter_fold_if_forward_step< typename forward_step2::iterator, typename forward_step2::state, ForwardOp, ForwardPredicate > forward_step3;
+ typedef iter_fold_if_forward_step< typename forward_step3::iterator, typename forward_step3::state, ForwardOp, ForwardPredicate > forward_step4;
+
+
+ typedef typename if_<
+ typename forward_step4::not_last
+ , iter_fold_if_impl<
+ typename forward_step4::iterator
+ , typename forward_step4::state
+ , ForwardOp
+ , ForwardPredicate
+ , BackwardOp
+ , BackwardPredicate
+ >
+ , iter_fold_if_null_step<
+ typename forward_step4::iterator
+ , typename forward_step4::state
+ >
+ >::type backward_step4;
+
+ typedef iter_fold_if_backward_step< typename forward_step3::iterator, typename backward_step4::state, BackwardOp, BackwardPredicate > backward_step3;
+ typedef iter_fold_if_backward_step< typename forward_step2::iterator, typename backward_step3::state, BackwardOp, BackwardPredicate > backward_step2;
+ typedef iter_fold_if_backward_step< typename forward_step1::iterator, typename backward_step2::state, BackwardOp, BackwardPredicate > backward_step1;
+ typedef iter_fold_if_backward_step< typename forward_step0::iterator, typename backward_step1::state, BackwardOp, BackwardPredicate > backward_step0;
+
+
+ public:
+ typedef typename backward_step0::state state;
+ typedef typename backward_step4::iterator iterator;
+};
+
+}}}
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ctps/iter_fold_impl.hpp b/boost/boost/mpl/aux_/preprocessed/no_ctps/iter_fold_impl.hpp
new file mode 100644
index 00000000000..50ea754f2ec
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ctps/iter_fold_impl.hpp
@@ -0,0 +1,245 @@
+
+// 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/aux_/iter_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+ int N
+ , typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl;
+
+template< int N >
+struct iter_fold_chunk;
+
+template<> struct iter_fold_chunk<0>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State state0;
+ typedef state0 state;
+ typedef iter0 iterator;
+ };
+};
+
+template<> struct iter_fold_chunk<1>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+
+
+ typedef state1 state;
+ typedef iter1 iterator;
+ };
+};
+
+template<> struct iter_fold_chunk<2>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+
+
+ typedef state2 state;
+ typedef iter2 iterator;
+ };
+};
+
+template<> struct iter_fold_chunk<3>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp,state2,iter2 >::type state3;
+ typedef typename mpl::next<iter2>::type iter3;
+
+
+ typedef state3 state;
+ typedef iter3 iterator;
+ };
+};
+
+template<> struct iter_fold_chunk<4>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp,state2,iter2 >::type state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp,state3,iter3 >::type state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef state4 state;
+ typedef iter4 iterator;
+ };
+};
+
+template< int N >
+struct iter_fold_chunk
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef iter_fold_impl<
+ 4
+ , First
+ , Last
+ , State
+ , ForwardOp
+ > chunk_;
+
+ typedef iter_fold_impl<
+ ( (N - 4) < 0 ? 0 : N - 4 )
+ , typename chunk_::iterator
+ , Last
+ , typename chunk_::state
+ , ForwardOp
+ > res_;
+
+ typedef typename res_::state state;
+ typedef typename res_::iterator iterator;
+ };
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_step;
+
+template<
+ typename Last
+ , typename State
+ >
+struct iter_fold_null_step
+{
+ typedef Last iterator;
+ typedef State state;
+};
+
+template<>
+struct iter_fold_chunk< -1 >
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef typename if_<
+ typename is_same< First,Last >::type
+ , iter_fold_null_step< Last,State >
+ , iter_fold_step< First,Last,State,ForwardOp >
+ >::type res_;
+
+ typedef typename res_::state state;
+ typedef typename res_::iterator iterator;
+ };
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_step
+{
+ typedef iter_fold_chunk< -1 >::template result_<
+ typename mpl::next<First>::type
+ , Last
+ , typename apply2< ForwardOp,State,First >::type
+ , ForwardOp
+ > chunk_;
+
+ typedef typename chunk_::state state;
+ typedef typename chunk_::iterator iterator;
+};
+
+template<
+ int N
+ , typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl
+ : iter_fold_chunk<N>
+ ::template result_< First,Last,State,ForwardOp >
+{
+};
+
+}}}
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ctps/lambda_no_ctps.hpp b/boost/boost/mpl/aux_/preprocessed/no_ctps/lambda_no_ctps.hpp
new file mode 100644
index 00000000000..890a198a464
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ctps/lambda_no_ctps.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/aux_/lambda_no_ctps.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template<
+ bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false
+ , bool C5 = false
+ >
+struct lambda_or
+ : true_
+{
+};
+
+template<>
+struct lambda_or< false,false,false,false,false >
+ : false_
+{
+};
+
+template< typename Arity > struct lambda_impl
+{
+ template< typename T, typename Tag, typename Protect > struct result_
+ {
+ typedef T type;
+ typedef is_placeholder<T> is_le;
+ };
+};
+
+template<> struct lambda_impl< int_<1> >
+{
+ template< typename F, typename Tag, typename Protect > struct result_
+ {
+ typedef lambda< typename F::arg1, Tag, false_ > l1;
+ typedef typename l1::is_le is_le1;
+ typedef aux::lambda_or<
+ BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value
+ > is_le;
+
+ typedef bind1<
+ typename F::rebind
+ , typename l1::type
+ > bind_;
+
+ typedef typename if_<
+ is_le
+ , if_< Protect, mpl::protect<bind_>, bind_ >
+ , identity<F>
+ >::type type_;
+
+ typedef typename type_::type type;
+ };
+};
+
+template<> struct lambda_impl< int_<2> >
+{
+ template< typename F, typename Tag, typename Protect > struct result_
+ {
+ typedef lambda< typename F::arg1, Tag, false_ > l1;
+ typedef lambda< typename F::arg2, Tag, false_ > l2;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+
+
+ typedef aux::lambda_or<
+ BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value
+ > is_le;
+
+ typedef bind2<
+ typename F::rebind
+ , typename l1::type, typename l2::type
+ > bind_;
+
+ typedef typename if_<
+ is_le
+ , if_< Protect, mpl::protect<bind_>, bind_ >
+ , identity<F>
+ >::type type_;
+
+ typedef typename type_::type type;
+ };
+};
+
+template<> struct lambda_impl< int_<3> >
+{
+ template< typename F, typename Tag, typename Protect > struct result_
+ {
+ typedef lambda< typename F::arg1, Tag, false_ > l1;
+ typedef lambda< typename F::arg2, Tag, false_ > l2;
+ typedef lambda< typename F::arg3, Tag, false_ > l3;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+
+
+ typedef aux::lambda_or<
+ BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value
+ > is_le;
+
+ typedef bind3<
+ typename F::rebind
+ , typename l1::type, typename l2::type, typename l3::type
+ > bind_;
+
+ typedef typename if_<
+ is_le
+ , if_< Protect, mpl::protect<bind_>, bind_ >
+ , identity<F>
+ >::type type_;
+
+ typedef typename type_::type type;
+ };
+};
+
+template<> struct lambda_impl< int_<4> >
+{
+ template< typename F, typename Tag, typename Protect > struct result_
+ {
+ typedef lambda< typename F::arg1, Tag, false_ > l1;
+ typedef lambda< typename F::arg2, Tag, false_ > l2;
+ typedef lambda< typename F::arg3, Tag, false_ > l3;
+ typedef lambda< typename F::arg4, Tag, false_ > l4;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+ typedef typename l4::is_le is_le4;
+
+
+ typedef aux::lambda_or<
+ BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value
+ > is_le;
+
+ typedef bind4<
+ typename F::rebind
+ , typename l1::type, typename l2::type, typename l3::type
+ , typename l4::type
+ > bind_;
+
+ typedef typename if_<
+ is_le
+ , if_< Protect, mpl::protect<bind_>, bind_ >
+ , identity<F>
+ >::type type_;
+
+ typedef typename type_::type type;
+ };
+};
+
+template<> struct lambda_impl< int_<5> >
+{
+ template< typename F, typename Tag, typename Protect > struct result_
+ {
+ typedef lambda< typename F::arg1, Tag, false_ > l1;
+ typedef lambda< typename F::arg2, Tag, false_ > l2;
+ typedef lambda< typename F::arg3, Tag, false_ > l3;
+ typedef lambda< typename F::arg4, Tag, false_ > l4;
+ typedef lambda< typename F::arg5, Tag, false_ > l5;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+ typedef typename l4::is_le is_le4;
+ typedef typename l5::is_le is_le5;
+
+
+ typedef aux::lambda_or<
+ BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le5)::value
+ > is_le;
+
+ typedef bind5<
+ typename F::rebind
+ , typename l1::type, typename l2::type, typename l3::type
+ , typename l4::type, typename l5::type
+ > bind_;
+
+ typedef typename if_<
+ is_le
+ , if_< Protect, mpl::protect<bind_>, bind_ >
+ , identity<F>
+ >::type type_;
+
+ typedef typename type_::type type;
+ };
+};
+
+} // namespace aux
+
+template<
+ typename T
+ , typename Tag
+ , typename Protect
+ >
+struct lambda
+{
+ /// Metafunction forwarding confuses MSVC 6.x
+ typedef typename aux::template_arity<T>::type arity_;
+ typedef typename aux::lambda_impl<arity_>
+ ::template result_< T,Tag,Protect > l_;
+
+ typedef typename l_::type type;
+ typedef typename l_::is_le is_le;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(3, lambda, (T, Tag, Protect))
+};
+
+BOOST_MPL_AUX_NA_SPEC2(1, 3, lambda)
+
+template<
+ typename T
+ >
+struct is_lambda_expression
+ : lambda<T>::is_le
+{
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ctps/less.hpp b/boost/boost/mpl/aux_/preprocessed/no_ctps/less.hpp
new file mode 100644
index 00000000000..7fb35e10771
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ctps/less.hpp
@@ -0,0 +1,94 @@
+
+// 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/less.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct less_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< less_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< less_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct less_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct less_impl< na,integral_c_tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct less_impl< integral_c_tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct less_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct less
+
+ : less_impl<
+ typename less_tag<N1>::type
+ , typename less_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, less)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct less_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N2)::value > BOOST_MPL_AUX_VALUE_WKND(N1)::value ) >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ctps/less_equal.hpp b/boost/boost/mpl/aux_/preprocessed/no_ctps/less_equal.hpp
new file mode 100644
index 00000000000..206ecdcf937
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ctps/less_equal.hpp
@@ -0,0 +1,94 @@
+
+// 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/less_equal.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct less_equal_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< less_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< less_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct less_equal_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct less_equal_impl< na,integral_c_tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct less_equal_impl< integral_c_tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct less_equal_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct less_equal
+
+ : less_equal_impl<
+ typename less_equal_tag<N1>::type
+ , typename less_equal_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less_equal, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, less_equal)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct less_equal_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value <= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ctps/list.hpp b/boost/boost/mpl/aux_/preprocessed/no_ctps/list.hpp
new file mode 100644
index 00000000000..e5ea456c9e2
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ctps/list.hpp
@@ -0,0 +1,556 @@
+
+// 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.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< int N >
+struct list_chooser;
+
+}
+
+namespace aux {
+
+template<>
+struct list_chooser<0>
+{
+ 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 result_
+ {
+ typedef list0<
+
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<1>
+{
+ 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 result_
+ {
+ typedef typename list1<
+ T0
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<2>
+{
+ 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 result_
+ {
+ typedef typename list2<
+ T0, T1
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<3>
+{
+ 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 result_
+ {
+ typedef typename list3<
+ T0, T1, T2
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<4>
+{
+ 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 result_
+ {
+ typedef typename list4<
+ T0, T1, T2, T3
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<5>
+{
+ 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 result_
+ {
+ typedef typename list5<
+ T0, T1, T2, T3, T4
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<6>
+{
+ 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 result_
+ {
+ typedef typename list6<
+ T0, T1, T2, T3, T4, T5
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<7>
+{
+ 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 result_
+ {
+ typedef typename list7<
+ T0, T1, T2, T3, T4, T5, T6
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<8>
+{
+ 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 result_
+ {
+ typedef typename list8<
+ T0, T1, T2, T3, T4, T5, T6, T7
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<9>
+{
+ 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 result_
+ {
+ typedef typename list9<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<10>
+{
+ 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 result_
+ {
+ typedef typename list10<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<11>
+{
+ 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 result_
+ {
+ typedef typename list11<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<12>
+{
+ 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 result_
+ {
+ typedef typename list12<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<13>
+{
+ 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 result_
+ {
+ typedef typename list13<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<14>
+{
+ 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 result_
+ {
+ typedef typename list14<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<15>
+{
+ 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 result_
+ {
+ typedef typename list15<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<16>
+{
+ 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 result_
+ {
+ typedef typename list16<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<17>
+{
+ 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 result_
+ {
+ typedef typename list17<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<18>
+{
+ 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 result_
+ {
+ typedef typename list18<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<19>
+{
+ 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 result_
+ {
+ typedef typename list19<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<20>
+{
+ 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 result_
+ {
+ typedef typename list20<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< typename T >
+struct is_list_arg
+{
+ BOOST_STATIC_CONSTANT(bool, value = true);
+};
+
+template<>
+struct is_list_arg<na>
+{
+ BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+template<
+ 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 list_count_args
+{
+ BOOST_STATIC_CONSTANT(int, value =
+ is_list_arg<T1>::value + is_list_arg<T2>::value
+ + is_list_arg<T3>::value + is_list_arg<T4>::value
+ + is_list_arg<T5>::value + is_list_arg<T6>::value
+ + is_list_arg<T7>::value + is_list_arg<T8>::value
+ + is_list_arg<T9>::value + is_list_arg<T10>::value
+ + is_list_arg<T11>::value + is_list_arg<T12>::value
+ + is_list_arg<T13>::value + is_list_arg<T14>::value
+ + is_list_arg<T15>::value + is_list_arg<T16>::value
+ + is_list_arg<T17>::value + is_list_arg<T18>::value
+ + is_list_arg<T19>::value + is_list_arg<T20>::value
+ );
+
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ , typename T10, typename T11, typename T12, typename T13, typename T14
+ , typename T15, typename T16, typename T17, typename T18, typename T19
+ >
+struct list_impl
+{
+ typedef aux::list_count_args<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ > arg_num_;
+
+ typedef typename aux::list_chooser< arg_num_::value >
+ ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+} // namespace aux
+
+template<
+ typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+ , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+ , typename T12 = na, typename T13 = na, typename T14 = na
+ , typename T15 = na, typename T16 = na, typename T17 = na
+ , typename T18 = na, typename T19 = na
+ >
+struct list
+ : aux::list_impl<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ >::type
+{
+ typedef typename aux::list_impl<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ctps/list_c.hpp b/boost/boost/mpl/aux_/preprocessed/no_ctps/list_c.hpp
new file mode 100644
index 00000000000..ab25482f55d
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ctps/list_c.hpp
@@ -0,0 +1,534 @@
+
+// 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_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< int N >
+struct list_c_chooser;
+
+}
+
+namespace aux {
+
+template<>
+struct list_c_chooser<0>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list0_c<
+ T
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<1>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list1_c<
+ T, C0
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<2>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list2_c<
+ T, C0, C1
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<3>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list3_c<
+ T, C0, C1, C2
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<4>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list4_c<
+ T, C0, C1, C2, C3
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<5>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list5_c<
+ T, C0, C1, C2, C3, C4
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<6>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list6_c<
+ T, C0, C1, C2, C3, C4, C5
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<7>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list7_c<
+ T, C0, C1, C2, C3, C4, C5, C6
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<8>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list8_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<9>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list9_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<10>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list10_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<11>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list11_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<12>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list12_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<13>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list13_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<14>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list14_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<15>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list15_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<16>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list16_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<17>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list17_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<18>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list18_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<19>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list19_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<20>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename list20_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< long C >
+struct is_list_c_arg
+{
+ BOOST_STATIC_CONSTANT(bool, value = true);
+};
+
+template<>
+struct is_list_c_arg<LONG_MAX>
+{
+ BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+template<
+ long C1, long C2, long C3, long C4, long C5, long C6, long C7, long C8
+ , long C9, long C10, long C11, long C12, long C13, long C14, long C15
+ , long C16, long C17, long C18, long C19, long C20
+ >
+struct list_c_count_args
+{
+ BOOST_STATIC_CONSTANT(int, value =
+ is_list_c_arg<C1>::value + is_list_c_arg<C2>::value
+ + is_list_c_arg<C3>::value + is_list_c_arg<C4>::value
+ + is_list_c_arg<C5>::value + is_list_c_arg<C6>::value
+ + is_list_c_arg<C7>::value + is_list_c_arg<C8>::value
+ + is_list_c_arg<C9>::value + is_list_c_arg<C10>::value
+ + is_list_c_arg<C11>::value + is_list_c_arg<C12>::value
+ + is_list_c_arg<C13>::value + is_list_c_arg<C14>::value
+ + is_list_c_arg<C15>::value + is_list_c_arg<C16>::value
+ + is_list_c_arg<C17>::value + is_list_c_arg<C18>::value
+ + is_list_c_arg<C19>::value + is_list_c_arg<C20>::value
+ );
+
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+struct list_c_impl
+{
+ typedef aux::list_c_count_args<
+ C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+ > arg_num_;
+
+ typedef typename aux::list_c_chooser< arg_num_::value >
+ ::template result_< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;
+};
+
+} // namespace aux
+
+template<
+ typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+ , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+ , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+ , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+ , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+ , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+ , long C18 = LONG_MAX, long C19 = LONG_MAX
+ >
+struct list_c
+ : aux::list_c_impl<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+ >::type
+{
+ typedef typename aux::list_c_impl<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+ >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ctps/map.hpp b/boost/boost/mpl/aux_/preprocessed/no_ctps/map.hpp
new file mode 100644
index 00000000000..970e0b76028
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ctps/map.hpp
@@ -0,0 +1,556 @@
+
+// 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/map.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< int N >
+struct map_chooser;
+
+}
+
+namespace aux {
+
+template<>
+struct map_chooser<0>
+{
+ 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 result_
+ {
+ typedef map0<
+
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<1>
+{
+ 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 result_
+ {
+ typedef typename map1<
+ T0
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<2>
+{
+ 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 result_
+ {
+ typedef typename map2<
+ T0, T1
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<3>
+{
+ 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 result_
+ {
+ typedef typename map3<
+ T0, T1, T2
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<4>
+{
+ 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 result_
+ {
+ typedef typename map4<
+ T0, T1, T2, T3
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<5>
+{
+ 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 result_
+ {
+ typedef typename map5<
+ T0, T1, T2, T3, T4
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<6>
+{
+ 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 result_
+ {
+ typedef typename map6<
+ T0, T1, T2, T3, T4, T5
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<7>
+{
+ 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 result_
+ {
+ typedef typename map7<
+ T0, T1, T2, T3, T4, T5, T6
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<8>
+{
+ 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 result_
+ {
+ typedef typename map8<
+ T0, T1, T2, T3, T4, T5, T6, T7
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<9>
+{
+ 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 result_
+ {
+ typedef typename map9<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<10>
+{
+ 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 result_
+ {
+ typedef typename map10<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<11>
+{
+ 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 result_
+ {
+ typedef typename map11<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<12>
+{
+ 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 result_
+ {
+ typedef typename map12<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<13>
+{
+ 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 result_
+ {
+ typedef typename map13<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<14>
+{
+ 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 result_
+ {
+ typedef typename map14<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<15>
+{
+ 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 result_
+ {
+ typedef typename map15<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<16>
+{
+ 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 result_
+ {
+ typedef typename map16<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<17>
+{
+ 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 result_
+ {
+ typedef typename map17<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<18>
+{
+ 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 result_
+ {
+ typedef typename map18<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<19>
+{
+ 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 result_
+ {
+ typedef typename map19<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<20>
+{
+ 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 result_
+ {
+ typedef typename map20<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< typename T >
+struct is_map_arg
+{
+ BOOST_STATIC_CONSTANT(bool, value = true);
+};
+
+template<>
+struct is_map_arg<na>
+{
+ BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+template<
+ 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 map_count_args
+{
+ BOOST_STATIC_CONSTANT(int, value =
+ is_map_arg<T1>::value + is_map_arg<T2>::value
+ + is_map_arg<T3>::value + is_map_arg<T4>::value
+ + is_map_arg<T5>::value + is_map_arg<T6>::value
+ + is_map_arg<T7>::value + is_map_arg<T8>::value
+ + is_map_arg<T9>::value + is_map_arg<T10>::value
+ + is_map_arg<T11>::value + is_map_arg<T12>::value
+ + is_map_arg<T13>::value + is_map_arg<T14>::value
+ + is_map_arg<T15>::value + is_map_arg<T16>::value
+ + is_map_arg<T17>::value + is_map_arg<T18>::value
+ + is_map_arg<T19>::value + is_map_arg<T20>::value
+ );
+
+};
+
+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 map_impl
+{
+ typedef aux::map_count_args<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ > arg_num_;
+
+ typedef typename aux::map_chooser< arg_num_::value >
+ ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+} // namespace aux
+
+template<
+ typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+ , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+ , typename T12 = na, typename T13 = na, typename T14 = na
+ , typename T15 = na, typename T16 = na, typename T17 = na
+ , typename T18 = na, typename T19 = na
+ >
+struct map
+ : aux::map_impl<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ >::type
+{
+ typedef typename aux::map_impl<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ctps/minus.hpp b/boost/boost/mpl/aux_/preprocessed/no_ctps/minus.hpp
new file mode 100644
index 00000000000..7b49450a554
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ctps/minus.hpp
@@ -0,0 +1,133 @@
+
+// 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/minus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct minus_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< minus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< minus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct minus_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct minus_impl< na,integral_c_tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct minus_impl< integral_c_tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct minus_tag
+{
+ typedef typename T::tag type;
+};
+
+/// forward declaration
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct minus2;
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct minus
+
+ : if_<
+
+ is_na<N3>
+ , minus2< N1,N2 >
+ , minus<
+ minus2< N1,N2 >
+ , N3, N4, N5
+ >
+ >::type
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , minus
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1
+ , typename N2
+ >
+struct minus2
+ : minus_impl<
+ typename minus_tag<N1>::type
+ , typename minus_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, minus2, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, minus)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct minus_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ - BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ctps/modulus.hpp b/boost/boost/mpl/aux_/preprocessed/no_ctps/modulus.hpp
new file mode 100644
index 00000000000..8badbab5b12
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ctps/modulus.hpp
@@ -0,0 +1,101 @@
+
+// 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/modulus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct modulus_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< modulus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< modulus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct modulus_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct modulus_impl< na,integral_c_tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct modulus_impl< integral_c_tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct modulus_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct modulus
+
+ : modulus_impl<
+ typename modulus_tag<N1>::type
+ , typename modulus_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, modulus, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, modulus)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct modulus_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ % BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ctps/not_equal_to.hpp b/boost/boost/mpl/aux_/preprocessed/no_ctps/not_equal_to.hpp
new file mode 100644
index 00000000000..d87d8cd11ed
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ctps/not_equal_to.hpp
@@ -0,0 +1,94 @@
+
+// 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/not_equal_to.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct not_equal_to_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< not_equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< not_equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct not_equal_to_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct not_equal_to_impl< na,integral_c_tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct not_equal_to_impl< integral_c_tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct not_equal_to_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct not_equal_to
+
+ : not_equal_to_impl<
+ typename not_equal_to_tag<N1>::type
+ , typename not_equal_to_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, not_equal_to, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, not_equal_to)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct not_equal_to_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value != BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ctps/or.hpp b/boost/boost/mpl/aux_/preprocessed/no_ctps/or.hpp
new file mode 100644
index 00000000000..3f7394e7ccd
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ctps/or.hpp
@@ -0,0 +1,73 @@
+
+// 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/or.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< bool C_ > struct or_impl
+{
+ template<
+ typename T1, typename T2, typename T3, typename T4
+ >
+ struct result_
+ : true_
+ {
+ };
+};
+
+template<> struct or_impl<false>
+{
+ template<
+ typename T1, typename T2, typename T3, typename T4
+ >
+ struct result_
+ : or_impl<
+ BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+ >::template result_< T2,T3,T4,false_ >
+ {
+ };
+};
+
+template<>
+struct or_impl<false>
+ ::result_< false_,false_,false_,false_ >
+ : false_
+{
+};
+
+} // namespace aux
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(T1)
+ , typename BOOST_MPL_AUX_NA_PARAM(T2)
+ , typename T3 = false_, typename T4 = false_, typename T5 = false_
+ >
+struct or_
+
+ : aux::or_impl<
+ BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+ >::template result_< T2,T3,T4,T5 >
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , or_
+ , ( T1, T2, T3, T4, T5)
+ )
+};
+
+BOOST_MPL_AUX_NA_SPEC2(
+ 2
+ , 5
+ , or_
+ )
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ctps/placeholders.hpp b/boost/boost/mpl/aux_/preprocessed/no_ctps/placeholders.hpp
new file mode 100644
index 00000000000..ff97364b9ba
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ctps/placeholders.hpp
@@ -0,0 +1,105 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+// Copyright Peter Dimov 2001-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)
+//
+
+// Preprocessed version of "boost/mpl/placeholders.hpp" header
+// -- DO NOT modify by hand!
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg< -1 > _;
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_;
+}
+
+}}
+
+/// agurt, 17/mar/02: one more placeholder for the last 'apply#'
+/// specialization
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<1> _1;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_1)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_1;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<2> _2;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_2)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_2;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<3> _3;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_3)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_3;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<4> _4;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_4)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_4;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<5> _5;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_5)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_5;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<6> _6;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_6)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_6;
+}
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ctps/plus.hpp b/boost/boost/mpl/aux_/preprocessed/no_ctps/plus.hpp
new file mode 100644
index 00000000000..a55b24c4508
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ctps/plus.hpp
@@ -0,0 +1,133 @@
+
+// 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/plus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct plus_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< plus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< plus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct plus_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct plus_impl< na,integral_c_tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct plus_impl< integral_c_tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct plus_tag
+{
+ typedef typename T::tag type;
+};
+
+/// forward declaration
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct plus2;
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct plus
+
+ : if_<
+
+ is_na<N3>
+ , plus2< N1,N2 >
+ , plus<
+ plus2< N1,N2 >
+ , N3, N4, N5
+ >
+ >::type
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , plus
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1
+ , typename N2
+ >
+struct plus2
+ : plus_impl<
+ typename plus_tag<N1>::type
+ , typename plus_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, plus2, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, plus)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct plus_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ + BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ctps/quote.hpp b/boost/boost/mpl/aux_/preprocessed/no_ctps/quote.hpp
new file mode 100644
index 00000000000..b85880ffddb
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ctps/quote.hpp
@@ -0,0 +1,116 @@
+
+// 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/quote.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+template< bool > struct quote_impl
+{
+ template< typename T > struct result_
+ : T
+ {
+ };
+};
+
+template<> struct quote_impl<false>
+{
+ template< typename T > struct result_
+ {
+ typedef T type;
+ };
+};
+
+template<
+ template< typename P1 > class F
+ , typename Tag = void_
+ >
+struct quote1
+{
+ template< typename U1 > struct apply
+
+ : quote_impl< aux::has_type< F<U1> >::value >
+ ::template result_< F<U1> >
+
+ {
+ };
+};
+
+template<
+ template< typename P1, typename P2 > class F
+ , typename Tag = void_
+ >
+struct quote2
+{
+ template< typename U1, typename U2 > struct apply
+
+ : quote_impl< aux::has_type< F< U1,U2 > >::value >
+ ::template result_< F< U1,U2 > >
+
+ {
+ };
+};
+
+template<
+ template< typename P1, typename P2, typename P3 > class F
+ , typename Tag = void_
+ >
+struct quote3
+{
+ template< typename U1, typename U2, typename U3 > struct apply
+
+ : quote_impl< aux::has_type< F< U1,U2,U3 > >::value >
+ ::template result_< F< U1,U2,U3 > >
+
+ {
+ };
+};
+
+template<
+ template< typename P1, typename P2, typename P3, typename P4 > class F
+ , typename Tag = void_
+ >
+struct quote4
+{
+ template<
+ typename U1, typename U2, typename U3, typename U4
+ >
+ struct apply
+
+ : quote_impl< aux::has_type< F< U1,U2,U3,U4 > >::value >
+ ::template result_< F< U1,U2,U3,U4 > >
+
+ {
+ };
+};
+
+template<
+ template<
+ typename P1, typename P2, typename P3, typename P4
+ , typename P5
+ >
+ class F
+ , typename Tag = void_
+ >
+struct quote5
+{
+ template<
+ typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+ struct apply
+
+ : quote_impl< aux::has_type< F< U1,U2,U3,U4,U5 > >::value >
+ ::template result_< F< U1,U2,U3,U4,U5 > >
+
+ {
+ };
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ctps/reverse_fold_impl.hpp b/boost/boost/mpl/aux_/preprocessed/no_ctps/reverse_fold_impl.hpp
new file mode 100644
index 00000000000..7a07414adff
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ctps/reverse_fold_impl.hpp
@@ -0,0 +1,295 @@
+
+// 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/aux_/reverse_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+ long N
+ , typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl;
+
+template< long N >
+struct reverse_fold_chunk;
+
+template<> struct reverse_fold_chunk<0>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef fwd_state0 bkwd_state0;
+ typedef bkwd_state0 state;
+ typedef iter0 iterator;
+ };
+};
+
+template<> struct reverse_fold_chunk<1>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+
+
+ typedef fwd_state1 bkwd_state1;
+ typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+ typedef bkwd_state0 state;
+ typedef iter1 iterator;
+ };
+};
+
+template<> struct reverse_fold_chunk<2>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+
+
+ typedef fwd_state2 bkwd_state2;
+ typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+ typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter2 iterator;
+ };
+};
+
+template<> struct reverse_fold_chunk<3>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+
+
+ typedef fwd_state3 bkwd_state3;
+ typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+ typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+ typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter3 iterator;
+ };
+};
+
+template<> struct reverse_fold_chunk<4>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef fwd_state4 bkwd_state4;
+ typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
+ typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+ typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+ typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter4 iterator;
+ };
+};
+
+template< long N >
+struct reverse_fold_chunk
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef reverse_fold_impl<
+ ( (N - 4) < 0 ? 0 : N - 4 )
+ , iter4
+ , Last
+ , fwd_state4
+ , BackwardOp
+ , ForwardOp
+ > nested_chunk;
+
+ typedef typename nested_chunk::state bkwd_state4;
+ typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
+ typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+ typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+ typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef typename nested_chunk::iterator iterator;
+ };
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_step;
+
+template<
+ typename Last
+ , typename State
+ >
+struct reverse_fold_null_step
+{
+ typedef Last iterator;
+ typedef State state;
+};
+
+template<>
+struct reverse_fold_chunk< -1 >
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef typename if_<
+ typename is_same< First,Last >::type
+ , reverse_fold_null_step< Last,State >
+ , reverse_fold_step< First,Last,State,BackwardOp,ForwardOp >
+ >::type res_;
+
+ typedef typename res_::state state;
+ typedef typename res_::iterator iterator;
+ };
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_step
+{
+ typedef reverse_fold_chunk< -1 >::template result_<
+ typename mpl::next<First>::type
+ , Last
+ , typename apply2<ForwardOp,State, typename deref<First>::type>::type
+ , BackwardOp
+ , ForwardOp
+ > nested_step;
+
+ typedef typename apply2<
+ BackwardOp
+ , typename nested_step::state
+ , typename deref<First>::type
+ >::type state;
+
+ typedef typename nested_step::iterator iterator;
+};
+
+template<
+ long N
+ , typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl
+ : reverse_fold_chunk<N>
+ ::template result_< First,Last,State,BackwardOp,ForwardOp >
+{
+};
+
+}}}
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ctps/reverse_iter_fold_impl.hpp b/boost/boost/mpl/aux_/preprocessed/no_ctps/reverse_iter_fold_impl.hpp
new file mode 100644
index 00000000000..39a4057b77d
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ctps/reverse_iter_fold_impl.hpp
@@ -0,0 +1,295 @@
+
+// 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/aux_/reverse_iter_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+ long N
+ , typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl;
+
+template< long N >
+struct reverse_iter_fold_chunk;
+
+template<> struct reverse_iter_fold_chunk<0>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef fwd_state0 bkwd_state0;
+ typedef bkwd_state0 state;
+ typedef iter0 iterator;
+ };
+};
+
+template<> struct reverse_iter_fold_chunk<1>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+
+
+ typedef fwd_state1 bkwd_state1;
+ typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+ typedef bkwd_state0 state;
+ typedef iter1 iterator;
+ };
+};
+
+template<> struct reverse_iter_fold_chunk<2>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+
+
+ typedef fwd_state2 bkwd_state2;
+ typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+ typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter2 iterator;
+ };
+};
+
+template<> struct reverse_iter_fold_chunk<3>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+
+
+ typedef fwd_state3 bkwd_state3;
+ typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+ typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+ typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter3 iterator;
+ };
+};
+
+template<> struct reverse_iter_fold_chunk<4>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef fwd_state4 bkwd_state4;
+ typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;
+ typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+ typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+ typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter4 iterator;
+ };
+};
+
+template< long N >
+struct reverse_iter_fold_chunk
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef reverse_iter_fold_impl<
+ ( (N - 4) < 0 ? 0 : N - 4 )
+ , iter4
+ , Last
+ , fwd_state4
+ , BackwardOp
+ , ForwardOp
+ > nested_chunk;
+
+ typedef typename nested_chunk::state bkwd_state4;
+ typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;
+ typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+ typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+ typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef typename nested_chunk::iterator iterator;
+ };
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_step;
+
+template<
+ typename Last
+ , typename State
+ >
+struct reverse_iter_fold_null_step
+{
+ typedef Last iterator;
+ typedef State state;
+};
+
+template<>
+struct reverse_iter_fold_chunk< -1 >
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef typename if_<
+ typename is_same< First,Last >::type
+ , reverse_iter_fold_null_step< Last,State >
+ , reverse_iter_fold_step< First,Last,State,BackwardOp,ForwardOp >
+ >::type res_;
+
+ typedef typename res_::state state;
+ typedef typename res_::iterator iterator;
+ };
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_step
+{
+ typedef reverse_iter_fold_chunk< -1 >::template result_<
+ typename mpl::next<First>::type
+ , Last
+ , typename apply2< ForwardOp,State,First >::type
+ , BackwardOp
+ , ForwardOp
+ > nested_step;
+
+ typedef typename apply2<
+ BackwardOp
+ , typename nested_step::state
+ , First
+ >::type state;
+
+ typedef typename nested_step::iterator iterator;
+};
+
+template<
+ long N
+ , typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl
+ : reverse_iter_fold_chunk<N>
+ ::template result_< First,Last,State,BackwardOp,ForwardOp >
+{
+};
+
+}}}
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ctps/set.hpp b/boost/boost/mpl/aux_/preprocessed/no_ctps/set.hpp
new file mode 100644
index 00000000000..95aaa5cbdfa
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ctps/set.hpp
@@ -0,0 +1,556 @@
+
+// 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/set.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< int N >
+struct set_chooser;
+
+}
+
+namespace aux {
+
+template<>
+struct set_chooser<0>
+{
+ 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 result_
+ {
+ typedef set0<
+
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<1>
+{
+ 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 result_
+ {
+ typedef typename set1<
+ T0
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<2>
+{
+ 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 result_
+ {
+ typedef typename set2<
+ T0, T1
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<3>
+{
+ 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 result_
+ {
+ typedef typename set3<
+ T0, T1, T2
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<4>
+{
+ 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 result_
+ {
+ typedef typename set4<
+ T0, T1, T2, T3
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<5>
+{
+ 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 result_
+ {
+ typedef typename set5<
+ T0, T1, T2, T3, T4
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<6>
+{
+ 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 result_
+ {
+ typedef typename set6<
+ T0, T1, T2, T3, T4, T5
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<7>
+{
+ 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 result_
+ {
+ typedef typename set7<
+ T0, T1, T2, T3, T4, T5, T6
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<8>
+{
+ 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 result_
+ {
+ typedef typename set8<
+ T0, T1, T2, T3, T4, T5, T6, T7
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<9>
+{
+ 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 result_
+ {
+ typedef typename set9<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<10>
+{
+ 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 result_
+ {
+ typedef typename set10<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<11>
+{
+ 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 result_
+ {
+ typedef typename set11<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<12>
+{
+ 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 result_
+ {
+ typedef typename set12<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<13>
+{
+ 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 result_
+ {
+ typedef typename set13<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<14>
+{
+ 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 result_
+ {
+ typedef typename set14<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<15>
+{
+ 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 result_
+ {
+ typedef typename set15<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<16>
+{
+ 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 result_
+ {
+ typedef typename set16<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<17>
+{
+ 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 result_
+ {
+ typedef typename set17<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<18>
+{
+ 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 result_
+ {
+ typedef typename set18<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<19>
+{
+ 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 result_
+ {
+ typedef typename set19<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<20>
+{
+ 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 result_
+ {
+ typedef typename set20<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< typename T >
+struct is_set_arg
+{
+ BOOST_STATIC_CONSTANT(bool, value = true);
+};
+
+template<>
+struct is_set_arg<na>
+{
+ BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+template<
+ 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 set_count_args
+{
+ BOOST_STATIC_CONSTANT(int, value =
+ is_set_arg<T1>::value + is_set_arg<T2>::value
+ + is_set_arg<T3>::value + is_set_arg<T4>::value
+ + is_set_arg<T5>::value + is_set_arg<T6>::value
+ + is_set_arg<T7>::value + is_set_arg<T8>::value
+ + is_set_arg<T9>::value + is_set_arg<T10>::value
+ + is_set_arg<T11>::value + is_set_arg<T12>::value
+ + is_set_arg<T13>::value + is_set_arg<T14>::value
+ + is_set_arg<T15>::value + is_set_arg<T16>::value
+ + is_set_arg<T17>::value + is_set_arg<T18>::value
+ + is_set_arg<T19>::value + is_set_arg<T20>::value
+ );
+
+};
+
+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 set_impl
+{
+ typedef aux::set_count_args<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ > arg_num_;
+
+ typedef typename aux::set_chooser< arg_num_::value >
+ ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+} // namespace aux
+
+template<
+ typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+ , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+ , typename T12 = na, typename T13 = na, typename T14 = na
+ , typename T15 = na, typename T16 = na, typename T17 = na
+ , typename T18 = na, typename T19 = na
+ >
+struct set
+ : aux::set_impl<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ >::type
+{
+ typedef typename aux::set_impl<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ctps/set_c.hpp b/boost/boost/mpl/aux_/preprocessed/no_ctps/set_c.hpp
new file mode 100644
index 00000000000..1ff34f9032a
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ctps/set_c.hpp
@@ -0,0 +1,534 @@
+
+// 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/set_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< int N >
+struct set_c_chooser;
+
+}
+
+namespace aux {
+
+template<>
+struct set_c_chooser<0>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set0_c<
+ T
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<1>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set1_c<
+ T, C0
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<2>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set2_c<
+ T, C0, C1
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<3>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set3_c<
+ T, C0, C1, C2
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<4>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set4_c<
+ T, C0, C1, C2, C3
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<5>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set5_c<
+ T, C0, C1, C2, C3, C4
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<6>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set6_c<
+ T, C0, C1, C2, C3, C4, C5
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<7>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set7_c<
+ T, C0, C1, C2, C3, C4, C5, C6
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<8>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set8_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<9>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set9_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<10>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set10_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<11>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set11_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<12>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set12_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<13>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set13_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<14>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set14_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<15>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set15_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<16>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set16_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<17>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set17_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<18>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set18_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<19>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set19_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<20>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename set20_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< long C >
+struct is_set_c_arg
+{
+ BOOST_STATIC_CONSTANT(bool, value = true);
+};
+
+template<>
+struct is_set_c_arg<LONG_MAX>
+{
+ BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+template<
+ long C1, long C2, long C3, long C4, long C5, long C6, long C7, long C8
+ , long C9, long C10, long C11, long C12, long C13, long C14, long C15
+ , long C16, long C17, long C18, long C19, long C20
+ >
+struct set_c_count_args
+{
+ BOOST_STATIC_CONSTANT(int, value =
+ is_set_c_arg<C1>::value + is_set_c_arg<C2>::value
+ + is_set_c_arg<C3>::value + is_set_c_arg<C4>::value
+ + is_set_c_arg<C5>::value + is_set_c_arg<C6>::value
+ + is_set_c_arg<C7>::value + is_set_c_arg<C8>::value
+ + is_set_c_arg<C9>::value + is_set_c_arg<C10>::value
+ + is_set_c_arg<C11>::value + is_set_c_arg<C12>::value
+ + is_set_c_arg<C13>::value + is_set_c_arg<C14>::value
+ + is_set_c_arg<C15>::value + is_set_c_arg<C16>::value
+ + is_set_c_arg<C17>::value + is_set_c_arg<C18>::value
+ + is_set_c_arg<C19>::value + is_set_c_arg<C20>::value
+ );
+
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+struct set_c_impl
+{
+ typedef aux::set_c_count_args<
+ C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+ > arg_num_;
+
+ typedef typename aux::set_c_chooser< arg_num_::value >
+ ::template result_< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;
+};
+
+} // namespace aux
+
+template<
+ typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+ , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+ , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+ , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+ , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+ , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+ , long C18 = LONG_MAX, long C19 = LONG_MAX
+ >
+struct set_c
+ : aux::set_c_impl<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+ >::type
+{
+ typedef typename aux::set_c_impl<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+ >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ctps/shift_left.hpp b/boost/boost/mpl/aux_/preprocessed/no_ctps/shift_left.hpp
new file mode 100644
index 00000000000..d14a5e48860
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ctps/shift_left.hpp
@@ -0,0 +1,99 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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)
+//
+
+// Preprocessed version of "boost/mpl/shift_left.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct shift_left_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< shift_left_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< shift_left_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct shift_left_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct shift_left_impl< na,integral_c_tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct shift_left_impl< integral_c_tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct shift_left_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct shift_left
+
+ : shift_left_impl<
+ typename shift_left_tag<N1>::type
+ , typename shift_left_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_left, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_left)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct shift_left_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N, typename S > struct apply
+
+ : integral_c<
+ typename N::value_type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N)::value
+ << BOOST_MPL_AUX_VALUE_WKND(S)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ctps/shift_right.hpp b/boost/boost/mpl/aux_/preprocessed/no_ctps/shift_right.hpp
new file mode 100644
index 00000000000..08c4915ebd0
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ctps/shift_right.hpp
@@ -0,0 +1,99 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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)
+//
+
+// Preprocessed version of "boost/mpl/shift_right.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct shift_right_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< shift_right_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< shift_right_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct shift_right_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct shift_right_impl< na,integral_c_tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct shift_right_impl< integral_c_tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct shift_right_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct shift_right
+
+ : shift_right_impl<
+ typename shift_right_tag<N1>::type
+ , typename shift_right_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_right, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_right)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct shift_right_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N, typename S > struct apply
+
+ : integral_c<
+ typename N::value_type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N)::value
+ >> BOOST_MPL_AUX_VALUE_WKND(S)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ctps/template_arity.hpp b/boost/boost/mpl/aux_/preprocessed/no_ctps/template_arity.hpp
new file mode 100644
index 00000000000..1164f0f8c27
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ctps/template_arity.hpp
@@ -0,0 +1,40 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/aux_/template_arity.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+template< bool >
+struct template_arity_impl
+{
+ template< typename F > struct result_
+ : mpl::int_< -1 >
+ {
+ };
+};
+
+template<>
+struct template_arity_impl<true>
+{
+ template< typename F > struct result_
+ : F::arity
+ {
+ };
+};
+
+template< typename F >
+struct template_arity
+ : template_arity_impl< ::boost::mpl::aux::has_rebind<F>::value >
+ ::template result_<F>
+{
+};
+
+}}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ctps/times.hpp b/boost/boost/mpl/aux_/preprocessed/no_ctps/times.hpp
new file mode 100644
index 00000000000..fd773cc842b
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ctps/times.hpp
@@ -0,0 +1,133 @@
+
+// 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/times.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct times_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< times_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< times_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct times_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct times_impl< na,integral_c_tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template<> struct times_impl< integral_c_tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct times_tag
+{
+ typedef typename T::tag type;
+};
+
+/// forward declaration
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct times2;
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct times
+
+ : if_<
+
+ is_na<N3>
+ , times2< N1,N2 >
+ , times<
+ times2< N1,N2 >
+ , N3, N4, N5
+ >
+ >::type
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , times
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1
+ , typename N2
+ >
+struct times2
+ : times_impl<
+ typename times_tag<N1>::type
+ , typename times_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, times2, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, times)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct times_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ * BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ctps/unpack_args.hpp b/boost/boost/mpl/aux_/preprocessed/no_ctps/unpack_args.hpp
new file mode 100644
index 00000000000..26533dd4236
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ctps/unpack_args.hpp
@@ -0,0 +1,109 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/unpack_args.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template< BOOST_MPL_AUX_NTTP_DECL(int, size) > struct unpack_args_impl
+{
+ template< typename F, typename Args > struct apply;
+};
+
+template<> struct unpack_args_impl<0>
+{
+ template< typename F, typename Args > struct apply
+ : apply0<
+ F
+ >
+ {
+ };
+};
+
+template<> struct unpack_args_impl<1>
+{
+ template< typename F, typename Args > struct apply
+ : apply1<
+ F
+ , typename at_c< Args,0 >::type
+ >
+ {
+ };
+};
+
+template<> struct unpack_args_impl<2>
+{
+ template< typename F, typename Args > struct apply
+ : apply2<
+ F
+ , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+ >
+ {
+ };
+};
+
+template<> struct unpack_args_impl<3>
+{
+ template< typename F, typename Args > struct apply
+ : apply3<
+ F
+ , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+ , typename at_c< Args,2 >::type
+ >
+ {
+ };
+};
+
+template<> struct unpack_args_impl<4>
+{
+ template< typename F, typename Args > struct apply
+ : apply4<
+ F
+ , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+ , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type
+ >
+ {
+ };
+};
+
+template<> struct unpack_args_impl<5>
+{
+ template< typename F, typename Args > struct apply
+ : apply5<
+ F
+ , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+ , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type
+ , typename at_c< Args,4 >::type
+ >
+ {
+ };
+};
+
+}
+
+template<
+ typename F
+ >
+struct unpack_args
+{
+ template< typename Args > struct apply
+
+ : aux::unpack_args_impl< size<Args>::value >
+ ::template apply< F,Args >
+
+ {
+ };
+};
+
+BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args)
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ctps/vector.hpp b/boost/boost/mpl/aux_/preprocessed/no_ctps/vector.hpp
new file mode 100644
index 00000000000..a6c7b6219a6
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ctps/vector.hpp
@@ -0,0 +1,556 @@
+
+// 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/vector.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< int N >
+struct vector_chooser;
+
+}
+
+namespace aux {
+
+template<>
+struct vector_chooser<0>
+{
+ 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 result_
+ {
+ typedef vector0<
+
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<1>
+{
+ 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 result_
+ {
+ typedef typename vector1<
+ T0
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<2>
+{
+ 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 result_
+ {
+ typedef typename vector2<
+ T0, T1
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<3>
+{
+ 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 result_
+ {
+ typedef typename vector3<
+ T0, T1, T2
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<4>
+{
+ 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 result_
+ {
+ typedef typename vector4<
+ T0, T1, T2, T3
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<5>
+{
+ 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 result_
+ {
+ typedef typename vector5<
+ T0, T1, T2, T3, T4
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<6>
+{
+ 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 result_
+ {
+ typedef typename vector6<
+ T0, T1, T2, T3, T4, T5
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<7>
+{
+ 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 result_
+ {
+ typedef typename vector7<
+ T0, T1, T2, T3, T4, T5, T6
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<8>
+{
+ 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 result_
+ {
+ typedef typename vector8<
+ T0, T1, T2, T3, T4, T5, T6, T7
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<9>
+{
+ 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 result_
+ {
+ typedef typename vector9<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<10>
+{
+ 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 result_
+ {
+ typedef typename vector10<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<11>
+{
+ 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 result_
+ {
+ typedef typename vector11<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<12>
+{
+ 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 result_
+ {
+ typedef typename vector12<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<13>
+{
+ 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 result_
+ {
+ typedef typename vector13<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<14>
+{
+ 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 result_
+ {
+ typedef typename vector14<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<15>
+{
+ 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 result_
+ {
+ typedef typename vector15<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<16>
+{
+ 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 result_
+ {
+ typedef typename vector16<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<17>
+{
+ 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 result_
+ {
+ typedef typename vector17<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<18>
+{
+ 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 result_
+ {
+ typedef typename vector18<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<19>
+{
+ 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 result_
+ {
+ typedef typename vector19<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<20>
+{
+ 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 result_
+ {
+ typedef typename vector20<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< typename T >
+struct is_vector_arg
+{
+ BOOST_STATIC_CONSTANT(bool, value = true);
+};
+
+template<>
+struct is_vector_arg<na>
+{
+ BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+template<
+ 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 vector_count_args
+{
+ BOOST_STATIC_CONSTANT(int, value =
+ is_vector_arg<T1>::value + is_vector_arg<T2>::value
+ + is_vector_arg<T3>::value + is_vector_arg<T4>::value
+ + is_vector_arg<T5>::value + is_vector_arg<T6>::value
+ + is_vector_arg<T7>::value + is_vector_arg<T8>::value
+ + is_vector_arg<T9>::value + is_vector_arg<T10>::value
+ + is_vector_arg<T11>::value + is_vector_arg<T12>::value
+ + is_vector_arg<T13>::value + is_vector_arg<T14>::value
+ + is_vector_arg<T15>::value + is_vector_arg<T16>::value
+ + is_vector_arg<T17>::value + is_vector_arg<T18>::value
+ + is_vector_arg<T19>::value + is_vector_arg<T20>::value
+ );
+
+};
+
+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 vector_impl
+{
+ typedef aux::vector_count_args<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ > arg_num_;
+
+ typedef typename aux::vector_chooser< arg_num_::value >
+ ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+} // namespace aux
+
+template<
+ typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+ , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+ , typename T12 = na, typename T13 = na, typename T14 = na
+ , typename T15 = na, typename T16 = na, typename T17 = na
+ , typename T18 = na, typename T19 = na
+ >
+struct vector
+ : aux::vector_impl<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ >::type
+{
+ typedef typename aux::vector_impl<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+ >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ctps/vector_c.hpp b/boost/boost/mpl/aux_/preprocessed/no_ctps/vector_c.hpp
new file mode 100644
index 00000000000..c522d0826ff
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ctps/vector_c.hpp
@@ -0,0 +1,534 @@
+
+// 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/vector_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< int N >
+struct vector_c_chooser;
+
+}
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<0>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector0_c<
+ T
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<1>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector1_c<
+ T, T(C0)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<2>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector2_c<
+ T, T(C0), T(C1)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<3>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector3_c<
+ T, T(C0), T(C1), T(C2)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<4>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector4_c<
+ T, T(C0), T(C1), T(C2), T(C3)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<5>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector5_c<
+ T, T(C0), T(C1), T(C2), T(C3), T(C4)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<6>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector6_c<
+ T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<7>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector7_c<
+ T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<8>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector8_c<
+ T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<9>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector9_c<
+ T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<10>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector10_c<
+ T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<11>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector11_c<
+ T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<12>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector12_c<
+ 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)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<13>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector13_c<
+ 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)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<14>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector14_c<
+ 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)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<15>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector15_c<
+ 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)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<16>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector16_c<
+ 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)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<17>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector17_c<
+ 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)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<18>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector18_c<
+ 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)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<19>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector19_c<
+ 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)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<20>
+{
+ template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+ struct result_
+ {
+ typedef typename vector20_c<
+ 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)
+ >::type type;
+
+ };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< long C >
+struct is_vector_c_arg
+{
+ BOOST_STATIC_CONSTANT(bool, value = true);
+};
+
+template<>
+struct is_vector_c_arg<LONG_MAX>
+{
+ BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+template<
+ long C1, long C2, long C3, long C4, long C5, long C6, long C7, long C8
+ , long C9, long C10, long C11, long C12, long C13, long C14, long C15
+ , long C16, long C17, long C18, long C19, long C20
+ >
+struct vector_c_count_args
+{
+ BOOST_STATIC_CONSTANT(int, value =
+ is_vector_c_arg<C1>::value + is_vector_c_arg<C2>::value
+ + is_vector_c_arg<C3>::value + is_vector_c_arg<C4>::value
+ + is_vector_c_arg<C5>::value + is_vector_c_arg<C6>::value
+ + is_vector_c_arg<C7>::value + is_vector_c_arg<C8>::value
+ + is_vector_c_arg<C9>::value + is_vector_c_arg<C10>::value
+ + is_vector_c_arg<C11>::value + is_vector_c_arg<C12>::value
+ + is_vector_c_arg<C13>::value + is_vector_c_arg<C14>::value
+ + is_vector_c_arg<C15>::value + is_vector_c_arg<C16>::value
+ + is_vector_c_arg<C17>::value + is_vector_c_arg<C18>::value
+ + is_vector_c_arg<C19>::value + is_vector_c_arg<C20>::value
+ );
+
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+struct vector_c_impl
+{
+ typedef aux::vector_c_count_args<
+ C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+ > arg_num_;
+
+ typedef typename aux::vector_c_chooser< arg_num_::value >
+ ::template result_< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;
+};
+
+} // namespace aux
+
+template<
+ typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+ , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+ , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+ , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+ , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+ , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+ , long C18 = LONG_MAX, long C19 = LONG_MAX
+ >
+struct vector_c
+ : aux::vector_c_impl<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+ >::type
+{
+ typedef typename aux::vector_c_impl<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+ >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ttp/advance_backward.hpp b/boost/boost/mpl/aux_/preprocessed/no_ttp/advance_backward.hpp
new file mode 100644
index 00000000000..26de94cea1a
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ttp/advance_backward.hpp
@@ -0,0 +1,97 @@
+
+// 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/aux_/advance_backward.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+template< long N > struct advance_backward;
+template<>
+struct advance_backward<0>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef iter0 type;
+ };
+};
+
+template<>
+struct advance_backward<1>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename prior<iter0>::type iter1;
+ typedef iter1 type;
+ };
+};
+
+template<>
+struct advance_backward<2>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename prior<iter0>::type iter1;
+ typedef typename prior<iter1>::type iter2;
+ typedef iter2 type;
+ };
+};
+
+template<>
+struct advance_backward<3>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename prior<iter0>::type iter1;
+ typedef typename prior<iter1>::type iter2;
+ typedef typename prior<iter2>::type iter3;
+ typedef iter3 type;
+ };
+};
+
+template<>
+struct advance_backward<4>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename prior<iter0>::type iter1;
+ typedef typename prior<iter1>::type iter2;
+ typedef typename prior<iter2>::type iter3;
+ typedef typename prior<iter3>::type iter4;
+ typedef iter4 type;
+ };
+};
+
+template< long N >
+struct advance_backward
+{
+ template< typename Iterator > struct apply
+ {
+ typedef typename apply_wrap1<
+ advance_backward<4>
+ , Iterator
+ >::type chunk_result_;
+
+ typedef typename apply_wrap1<
+ advance_backward<(
+ (N - 4) < 0
+ ? 0
+ : N - 4
+ )>
+ , chunk_result_
+ >::type type;
+ };
+};
+
+}}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ttp/advance_forward.hpp b/boost/boost/mpl/aux_/preprocessed/no_ttp/advance_forward.hpp
new file mode 100644
index 00000000000..b137cc72af1
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ttp/advance_forward.hpp
@@ -0,0 +1,97 @@
+
+// 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/aux_/advance_forward.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+template< long N > struct advance_forward;
+template<>
+struct advance_forward<0>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef iter0 type;
+ };
+};
+
+template<>
+struct advance_forward<1>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename next<iter0>::type iter1;
+ typedef iter1 type;
+ };
+};
+
+template<>
+struct advance_forward<2>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename next<iter0>::type iter1;
+ typedef typename next<iter1>::type iter2;
+ typedef iter2 type;
+ };
+};
+
+template<>
+struct advance_forward<3>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename next<iter0>::type iter1;
+ typedef typename next<iter1>::type iter2;
+ typedef typename next<iter2>::type iter3;
+ typedef iter3 type;
+ };
+};
+
+template<>
+struct advance_forward<4>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename next<iter0>::type iter1;
+ typedef typename next<iter1>::type iter2;
+ typedef typename next<iter2>::type iter3;
+ typedef typename next<iter3>::type iter4;
+ typedef iter4 type;
+ };
+};
+
+template< long N >
+struct advance_forward
+{
+ template< typename Iterator > struct apply
+ {
+ typedef typename apply_wrap1<
+ advance_forward<4>
+ , Iterator
+ >::type chunk_result_;
+
+ typedef typename apply_wrap1<
+ advance_forward<(
+ (N - 4) < 0
+ ? 0
+ : N - 4
+ )>
+ , chunk_result_
+ >::type type;
+ };
+};
+
+}}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ttp/and.hpp b/boost/boost/mpl/aux_/preprocessed/no_ttp/and.hpp
new file mode 100644
index 00000000000..010ad1fc849
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ttp/and.hpp
@@ -0,0 +1,69 @@
+
+// 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/and.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template< bool C_, typename T1, typename T2, typename T3, typename T4 >
+struct and_impl
+ : false_
+{
+};
+
+template< typename T1, typename T2, typename T3, typename T4 >
+struct and_impl< true,T1,T2,T3,T4 >
+ : and_impl<
+ BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+ , T2, T3, T4
+ , true_
+ >
+{
+};
+
+template<>
+struct and_impl<
+ true
+ , true_, true_, true_, true_
+ >
+ : true_
+{
+};
+
+} // namespace aux
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(T1)
+ , typename BOOST_MPL_AUX_NA_PARAM(T2)
+ , typename T3 = true_, typename T4 = true_, typename T5 = true_
+ >
+struct and_
+
+ : aux::and_impl<
+ BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+ , T2, T3, T4, T5
+ >
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , and_
+ , ( T1, T2, T3, T4, T5)
+ )
+};
+
+BOOST_MPL_AUX_NA_SPEC2(
+ 2
+ , 5
+ , and_
+ )
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ttp/apply.hpp b/boost/boost/mpl/aux_/preprocessed/no_ttp/apply.hpp
new file mode 100644
index 00000000000..e08eaccf03a
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ttp/apply.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/apply.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename F
+ >
+struct apply0
+
+ : apply_wrap0<
+ typename lambda<F>::type
+
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 1
+ , apply0
+ , (F )
+ )
+};
+
+template<
+ typename F
+ >
+struct apply< F,na,na,na,na,na >
+ : apply0<F>
+{
+};
+
+template<
+ typename F, typename T1
+ >
+struct apply1
+
+ : apply_wrap1<
+ typename lambda<F>::type
+ , T1
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 2
+ , apply1
+ , (F, T1)
+ )
+};
+
+template<
+ typename F, typename T1
+ >
+struct apply< F,T1,na,na,na,na >
+ : apply1< F,T1 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct apply2
+
+ : apply_wrap2<
+ typename lambda<F>::type
+ , T1, T2
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 3
+ , apply2
+ , (F, T1, T2)
+ )
+};
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct apply< F,T1,T2,na,na,na >
+ : apply2< F,T1,T2 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct apply3
+
+ : apply_wrap3<
+ typename lambda<F>::type
+ , T1, T2, T3
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 4
+ , apply3
+ , (F, T1, T2, T3)
+ )
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct apply< F,T1,T2,T3,na,na >
+ : apply3< F,T1,T2,T3 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct apply4
+
+ : apply_wrap4<
+ typename lambda<F>::type
+ , T1, T2, T3, T4
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , apply4
+ , (F, T1, T2, T3, T4)
+ )
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct apply< F,T1,T2,T3,T4,na >
+ : apply4< F,T1,T2,T3,T4 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct apply5
+
+ : apply_wrap5<
+ typename lambda<F>::type
+ , T1, T2, T3, T4, T5
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 6
+ , apply5
+ , (F, T1, T2, T3, T4, T5)
+ )
+};
+
+/// primary template (not a specialization!)
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct apply
+ : apply5< F,T1,T2,T3,T4,T5 >
+{
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ttp/apply_fwd.hpp b/boost/boost/mpl/aux_/preprocessed/no_ttp/apply_fwd.hpp
new file mode 100644
index 00000000000..b2ed5d51301
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ttp/apply_fwd.hpp
@@ -0,0 +1,52 @@
+
+// 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/apply_fwd.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename F, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na
+ >
+struct apply;
+
+template<
+ typename F
+ >
+struct apply0;
+
+template<
+ typename F, typename T1
+ >
+struct apply1;
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct apply2;
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct apply3;
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct apply4;
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct apply5;
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ttp/apply_wrap.hpp b/boost/boost/mpl/aux_/preprocessed/no_ttp/apply_wrap.hpp
new file mode 100644
index 00000000000..34d51a1a587
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ttp/apply_wrap.hpp
@@ -0,0 +1,84 @@
+
+// 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/apply_wrap.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename F
+
+ , typename has_apply_ = typename aux::has_apply<F>::type
+
+ >
+struct apply_wrap0
+
+ : F::template apply< >
+{
+};
+
+template< typename F >
+struct apply_wrap0< F,true_ >
+ : F::apply
+{
+};
+
+template<
+ typename F, typename T1
+
+ >
+struct apply_wrap1
+
+ : F::template apply<T1>
+{
+};
+
+template<
+ typename F, typename T1, typename T2
+
+ >
+struct apply_wrap2
+
+ : F::template apply< T1,T2 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3
+
+ >
+struct apply_wrap3
+
+ : F::template apply< T1,T2,T3 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+
+ >
+struct apply_wrap4
+
+ : F::template apply< T1,T2,T3,T4 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+
+ >
+struct apply_wrap5
+
+ : F::template apply< T1,T2,T3,T4,T5 >
+{
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ttp/arg.hpp b/boost/boost/mpl/aux_/preprocessed/no_ttp/arg.hpp
new file mode 100644
index 00000000000..6f2f8a80709
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ttp/arg.hpp
@@ -0,0 +1,123 @@
+
+// Copyright Peter Dimov 2001-2002
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/arg.hpp" header
+// -- DO NOT modify by hand!
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+template<> struct arg< -1 >
+{
+ BOOST_STATIC_CONSTANT(int, value = -1);
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ typedef U1 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+template<> struct arg<1>
+{
+ BOOST_STATIC_CONSTANT(int, value = 1);
+ typedef arg<2> next;
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ typedef U1 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+template<> struct arg<2>
+{
+ BOOST_STATIC_CONSTANT(int, value = 2);
+ typedef arg<3> next;
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ typedef U2 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+template<> struct arg<3>
+{
+ BOOST_STATIC_CONSTANT(int, value = 3);
+ typedef arg<4> next;
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ typedef U3 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+template<> struct arg<4>
+{
+ BOOST_STATIC_CONSTANT(int, value = 4);
+ typedef arg<5> next;
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ typedef U4 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+template<> struct arg<5>
+{
+ BOOST_STATIC_CONSTANT(int, value = 5);
+ typedef arg<6> next;
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ typedef U5 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+BOOST_MPL_AUX_NONTYPE_ARITY_SPEC(1,int, arg)
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ttp/basic_bind.hpp b/boost/boost/mpl/aux_/preprocessed/no_ttp/basic_bind.hpp
new file mode 100644
index 00000000000..095b84dd9b1
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ttp/basic_bind.hpp
@@ -0,0 +1,369 @@
+
+// Copyright Peter Dimov 2001
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/aux_/basic_bind.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template<
+ typename T, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg
+{
+ typedef T type;
+};
+
+template<
+ int N, typename U1, typename U2, typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >
+{
+ typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg< bind< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 >
+{
+ typedef bind< F,T1,T2,T3,T4,T5 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+template<
+ typename F
+ >
+struct bind0
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+
+ public:
+ typedef typename apply_wrap0<
+ f_
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg<
+ bind0<F>, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind0<F> f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(1, bind0)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)
+
+template<
+ typename F
+ >
+struct bind< F,na,na,na,na,na >
+ : bind0<F>
+{
+};
+
+template<
+ typename F, typename T1
+ >
+struct bind1
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+
+ public:
+ typedef typename apply_wrap1<
+ f_
+ , typename t1::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename U1, typename U2, typename U3
+ , typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind1< F,T1 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind1< F,T1 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(2, bind1)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)
+
+template<
+ typename F, typename T1
+ >
+struct bind< F,T1,na,na,na,na >
+ : bind1< F,T1 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct bind2
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+ typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+
+ public:
+ typedef typename apply_wrap2<
+ f_
+ , typename t1::type, typename t2::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename U1, typename U2
+ , typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind2< F,T1,T2 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind2< F,T1,T2 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(3, bind2)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct bind< F,T1,T2,na,na,na >
+ : bind2< F,T1,T2 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct bind3
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+ typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+ typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+
+ public:
+ typedef typename apply_wrap3<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename U1
+ , typename U2, typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind3< F,T1,T2,T3 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(4, bind3)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct bind< F,T1,T2,T3,na,na >
+ : bind3< F,T1,T2,T3 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct bind4
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+ typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+ typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+ typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;
+
+ public:
+ typedef typename apply_wrap4<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ , typename t4::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename U1, typename U2, typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind4< F,T1,T2,T3,T4 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct bind< F,T1,T2,T3,T4,na >
+ : bind4< F,T1,T2,T3,T4 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct bind5
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+ typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+ typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+ typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;
+ typedef aux::resolve_bind_arg< T5,U1,U2,U3,U4,U5 > t5;
+
+ public:
+ typedef typename apply_wrap5<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ , typename t4::type, typename t5::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg<
+ bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind5< F,T1,T2,T3,T4,T5 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
+
+/// primary template (not a specialization!)
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct bind
+ : bind5< F,T1,T2,T3,T4,T5 >
+{
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ttp/bind.hpp b/boost/boost/mpl/aux_/preprocessed/no_ttp/bind.hpp
new file mode 100644
index 00000000000..28914408ab2
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ttp/bind.hpp
@@ -0,0 +1,466 @@
+
+// Copyright Peter Dimov 2001
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/bind.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template<
+ typename T, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg
+{
+ typedef T type;
+};
+
+template<
+ typename T
+ , typename Arg
+ >
+struct replace_unnamed_arg
+{
+ typedef Arg next;
+ typedef T type;
+};
+
+template<
+ typename Arg
+ >
+struct replace_unnamed_arg< arg< -1 >, Arg >
+{
+ typedef typename Arg::next next;
+ typedef Arg type;
+};
+
+template<
+ int N, typename U1, typename U2, typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >
+{
+ typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg< bind< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 >
+{
+ typedef bind< F,T1,T2,T3,T4,T5 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+template<
+ typename F
+ >
+struct bind0
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ public:
+ typedef typename apply_wrap0<
+ f_
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg<
+ bind0<F>, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind0<F> f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(1, bind0)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)
+
+template<
+ typename F
+ >
+struct bind< F,na,na,na,na,na >
+ : bind0<F>
+{
+};
+
+template<
+ typename F, typename T1
+ >
+struct bind1
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ public:
+ typedef typename apply_wrap1<
+ f_
+ , typename t1::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename U1, typename U2, typename U3
+ , typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind1< F,T1 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind1< F,T1 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(2, bind1)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)
+
+template<
+ typename F, typename T1
+ >
+struct bind< F,T1,na,na,na,na >
+ : bind1< F,T1 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct bind2
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ typedef aux::replace_unnamed_arg< T2,n2 > r2;
+ typedef typename r2::type a2;
+ typedef typename r2::next n3;
+ typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+ ///
+ public:
+ typedef typename apply_wrap2<
+ f_
+ , typename t1::type, typename t2::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename U1, typename U2
+ , typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind2< F,T1,T2 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind2< F,T1,T2 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(3, bind2)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct bind< F,T1,T2,na,na,na >
+ : bind2< F,T1,T2 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct bind3
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ typedef aux::replace_unnamed_arg< T2,n2 > r2;
+ typedef typename r2::type a2;
+ typedef typename r2::next n3;
+ typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+ ///
+ typedef aux::replace_unnamed_arg< T3,n3 > r3;
+ typedef typename r3::type a3;
+ typedef typename r3::next n4;
+ typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+ ///
+ public:
+ typedef typename apply_wrap3<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename U1
+ , typename U2, typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind3< F,T1,T2,T3 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(4, bind3)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct bind< F,T1,T2,T3,na,na >
+ : bind3< F,T1,T2,T3 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct bind4
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ typedef aux::replace_unnamed_arg< T2,n2 > r2;
+ typedef typename r2::type a2;
+ typedef typename r2::next n3;
+ typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+ ///
+ typedef aux::replace_unnamed_arg< T3,n3 > r3;
+ typedef typename r3::type a3;
+ typedef typename r3::next n4;
+ typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+ ///
+ typedef aux::replace_unnamed_arg< T4,n4 > r4;
+ typedef typename r4::type a4;
+ typedef typename r4::next n5;
+ typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
+ ///
+ public:
+ typedef typename apply_wrap4<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ , typename t4::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename U1, typename U2, typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind4< F,T1,T2,T3,T4 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct bind< F,T1,T2,T3,T4,na >
+ : bind4< F,T1,T2,T3,T4 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct bind5
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ typedef aux::replace_unnamed_arg< T2,n2 > r2;
+ typedef typename r2::type a2;
+ typedef typename r2::next n3;
+ typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+ ///
+ typedef aux::replace_unnamed_arg< T3,n3 > r3;
+ typedef typename r3::type a3;
+ typedef typename r3::next n4;
+ typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+ ///
+ typedef aux::replace_unnamed_arg< T4,n4 > r4;
+ typedef typename r4::type a4;
+ typedef typename r4::next n5;
+ typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
+ ///
+ typedef aux::replace_unnamed_arg< T5,n5 > r5;
+ typedef typename r5::type a5;
+ typedef typename r5::next n6;
+ typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5;
+ ///
+ public:
+ typedef typename apply_wrap5<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ , typename t4::type, typename t5::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg<
+ bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind5< F,T1,T2,T3,T4,T5 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
+
+/// primary template (not a specialization!)
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct bind
+ : bind5< F,T1,T2,T3,T4,T5 >
+{
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ttp/bind_fwd.hpp b/boost/boost/mpl/aux_/preprocessed/no_ttp/bind_fwd.hpp
new file mode 100644
index 00000000000..c4a5060ff8b
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ttp/bind_fwd.hpp
@@ -0,0 +1,52 @@
+
+// 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/bind_fwd.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename F, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na
+ >
+struct bind;
+
+template<
+ typename F
+ >
+struct bind0;
+
+template<
+ typename F, typename T1
+ >
+struct bind1;
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct bind2;
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct bind3;
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct bind4;
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct bind5;
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ttp/bitand.hpp b/boost/boost/mpl/aux_/preprocessed/no_ttp/bitand.hpp
new file mode 100644
index 00000000000..282771bce55
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ttp/bitand.hpp
@@ -0,0 +1,157 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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)
+//
+
+// Preprocessed version of "boost/mpl/bitand.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct bitand_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< bitand_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< bitand_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitand_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct bitand_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct bitand_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct bitand_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct bitand_
+ : bitand_< bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>, N5>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , bitand_
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3, typename N4
+ >
+struct bitand_< N1,N2,N3,N4,na >
+
+ : bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitand_
+ , ( N1, N2, N3, N4, na )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3
+ >
+struct bitand_< N1,N2,N3,na,na >
+
+ : bitand_< bitand_< N1,N2 >, N3>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitand_
+ , ( N1, N2, N3, na, na )
+ )
+};
+
+template<
+ typename N1, typename N2
+ >
+struct bitand_< N1,N2,na,na,na >
+ : bitand_impl<
+ typename bitand_tag<N1>::type
+ , typename bitand_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitand_
+ , ( N1, N2, na, na, na )
+ )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitand_)
+
+}}
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< typename T, T n1, T n2 >
+struct bitand_wknd
+{
+ BOOST_STATIC_CONSTANT(T, value = (n1 & n2));
+ typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct bitand_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+ : aux::bitand_wknd<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , N1::value
+ , N2::value
+ >::type
+
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ttp/bitor.hpp b/boost/boost/mpl/aux_/preprocessed/no_ttp/bitor.hpp
new file mode 100644
index 00000000000..bc9c1989db1
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ttp/bitor.hpp
@@ -0,0 +1,157 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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)
+//
+
+// Preprocessed version of "boost/mpl/bitor.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct bitor_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< bitor_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< bitor_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitor_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct bitor_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct bitor_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct bitor_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct bitor_
+ : bitor_< bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>, N5>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , bitor_
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3, typename N4
+ >
+struct bitor_< N1,N2,N3,N4,na >
+
+ : bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitor_
+ , ( N1, N2, N3, N4, na )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3
+ >
+struct bitor_< N1,N2,N3,na,na >
+
+ : bitor_< bitor_< N1,N2 >, N3>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitor_
+ , ( N1, N2, N3, na, na )
+ )
+};
+
+template<
+ typename N1, typename N2
+ >
+struct bitor_< N1,N2,na,na,na >
+ : bitor_impl<
+ typename bitor_tag<N1>::type
+ , typename bitor_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitor_
+ , ( N1, N2, na, na, na )
+ )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitor_)
+
+}}
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< typename T, T n1, T n2 >
+struct bitor_wknd
+{
+ BOOST_STATIC_CONSTANT(T, value = (n1 | n2));
+ typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct bitor_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+ : aux::bitor_wknd<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , N1::value
+ , N2::value
+ >::type
+
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ttp/bitxor.hpp b/boost/boost/mpl/aux_/preprocessed/no_ttp/bitxor.hpp
new file mode 100644
index 00000000000..76ce540b4ee
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ttp/bitxor.hpp
@@ -0,0 +1,157 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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)
+//
+
+// Preprocessed version of "boost/mpl/bitxor.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct bitxor_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< bitxor_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< bitxor_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitxor_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct bitxor_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct bitxor_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct bitxor_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct bitxor_
+ : bitxor_< bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4>, N5>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , bitxor_
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3, typename N4
+ >
+struct bitxor_< N1,N2,N3,N4,na >
+
+ : bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitxor_
+ , ( N1, N2, N3, N4, na )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3
+ >
+struct bitxor_< N1,N2,N3,na,na >
+
+ : bitxor_< bitxor_< N1,N2 >, N3>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitxor_
+ , ( N1, N2, N3, na, na )
+ )
+};
+
+template<
+ typename N1, typename N2
+ >
+struct bitxor_< N1,N2,na,na,na >
+ : bitxor_impl<
+ typename bitxor_tag<N1>::type
+ , typename bitxor_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitxor_
+ , ( N1, N2, na, na, na )
+ )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitxor_)
+
+}}
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< typename T, T n1, T n2 >
+struct bitxor_wknd
+{
+ BOOST_STATIC_CONSTANT(T, value = (n1 ^ n2));
+ typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct bitxor_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+ : aux::bitxor_wknd<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , N1::value
+ , N2::value
+ >::type
+
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ttp/deque.hpp b/boost/boost/mpl/aux_/preprocessed/no_ttp/deque.hpp
new file mode 100644
index 00000000000..de67398a37c
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ttp/deque.hpp
@@ -0,0 +1,323 @@
+
+// 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/deque.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+ , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+ , typename T12 = na, typename T13 = na, typename T14 = na
+ , typename T15 = na, typename T16 = na, typename T17 = na
+ , typename T18 = na, typename T19 = na
+ >
+struct deque;
+
+template<
+
+ >
+struct deque<
+ na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector0< >
+{
+ typedef vector0< >::type type;
+};
+
+template<
+ typename T0
+ >
+struct deque<
+ T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector1<T0>
+{
+ typedef typename vector1<T0>::type type;
+};
+
+template<
+ typename T0, typename T1
+ >
+struct deque<
+ T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector2< T0,T1 >
+{
+ typedef typename vector2< T0,T1 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2
+ >
+struct deque<
+ T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector3< T0,T1,T2 >
+{
+ typedef typename vector3< T0,T1,T2 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3
+ >
+struct deque<
+ T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector4< T0,T1,T2,T3 >
+{
+ typedef typename vector4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ >
+struct deque<
+ T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector5< T0,T1,T2,T3,T4 >
+{
+ typedef typename vector5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct deque<
+ T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector6< T0,T1,T2,T3,T4,T5 >
+{
+ typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6
+ >
+struct deque<
+ T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector7< T0,T1,T2,T3,T4,T5,T6 >
+{
+ typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7
+ >
+struct deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+ typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8
+ >
+struct deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+ typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ >
+struct deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+ typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ , typename T10
+ >
+struct deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+ typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+ , na, na, na, na
+ >
+ : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+ typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+ , na, na, na, na
+ >
+ : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+ typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+ , na, na, na, na
+ >
+ : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+ typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+ , na, na, na, na
+ >
+ : vector15<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ >
+{
+ typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, na, na, na, na
+ >
+ : vector16<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15
+ >
+{
+ typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, na, na, na
+ >
+ : vector17<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16
+ >
+{
+ typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, na, na
+ >
+ : vector18<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17
+ >
+{
+ typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, na
+ >
+ : vector19<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18
+ >
+{
+ typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+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 deque
+ : vector20<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, T19
+ >
+{
+ typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ttp/divides.hpp b/boost/boost/mpl/aux_/preprocessed/no_ttp/divides.hpp
new file mode 100644
index 00000000000..9bc7fb192a0
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ttp/divides.hpp
@@ -0,0 +1,156 @@
+
+// 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/divides.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct divides_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< divides_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< divides_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct divides_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct divides_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct divides_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct divides_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct divides
+ : divides< divides< divides< divides< N1,N2 >, N3>, N4>, N5>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , divides
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3, typename N4
+ >
+struct divides< N1,N2,N3,N4,na >
+
+ : divides< divides< divides< N1,N2 >, N3>, N4>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , divides
+ , ( N1, N2, N3, N4, na )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3
+ >
+struct divides< N1,N2,N3,na,na >
+
+ : divides< divides< N1,N2 >, N3>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , divides
+ , ( N1, N2, N3, na, na )
+ )
+};
+
+template<
+ typename N1, typename N2
+ >
+struct divides< N1,N2,na,na,na >
+ : divides_impl<
+ typename divides_tag<N1>::type
+ , typename divides_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , divides
+ , ( N1, N2, na, na, na )
+ )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, divides)
+
+}}
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< typename T, T n1, T n2 >
+struct divides_wknd
+{
+ BOOST_STATIC_CONSTANT(T, value = (n1 / n2));
+ typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct divides_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+ : aux::divides_wknd<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , N1::value
+ , N2::value
+ >::type
+
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ttp/equal_to.hpp b/boost/boost/mpl/aux_/preprocessed/no_ttp/equal_to.hpp
new file mode 100644
index 00000000000..fa2dc4a25ac
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ttp/equal_to.hpp
@@ -0,0 +1,98 @@
+
+// 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/equal_to.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct equal_to_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct equal_to_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct equal_to_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct equal_to_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct equal_to_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct equal_to
+
+ : equal_to_impl<
+ typename equal_to_tag<N1>::type
+ , typename equal_to_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, equal_to, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, equal_to)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct equal_to_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ {
+ BOOST_STATIC_CONSTANT(bool, value =
+ ( BOOST_MPL_AUX_VALUE_WKND(N1)::value ==
+ BOOST_MPL_AUX_VALUE_WKND(N2)::value )
+ );
+ typedef bool_<value> type;
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ttp/fold_impl.hpp b/boost/boost/mpl/aux_/preprocessed/no_ttp/fold_impl.hpp
new file mode 100644
index 00000000000..9e7a29300d6
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ttp/fold_impl.hpp
@@ -0,0 +1,180 @@
+
+// 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/aux_/fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+ int N
+ , typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl;
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl< 0,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef state0 state;
+ typedef iter0 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl< 1,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+
+
+ typedef state1 state;
+ typedef iter1 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl< 2,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+
+
+ typedef state2 state;
+ typedef iter2 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl< 3,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;
+ typedef typename mpl::next<iter2>::type iter3;
+
+
+ typedef state3 state;
+ typedef iter3 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl< 4,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp, state3, typename deref<iter3>::type >::type state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef state4 state;
+ typedef iter4 iterator;
+};
+
+template<
+ int N
+ , typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl
+{
+ typedef fold_impl<
+ 4
+ , First
+ , Last
+ , State
+ , ForwardOp
+ > chunk_;
+
+ typedef fold_impl<
+ ( (N - 4) < 0 ? 0 : N - 4 )
+ , typename chunk_::iterator
+ , Last
+ , typename chunk_::state
+ , ForwardOp
+ > res_;
+
+ typedef typename res_::state state;
+ typedef typename res_::iterator iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl< -1,First,Last,State,ForwardOp >
+ : fold_impl<
+ -1
+ , typename mpl::next<First>::type
+ , Last
+ , typename apply2<ForwardOp,State, typename deref<First>::type>::type
+ , ForwardOp
+ >
+{
+};
+
+template<
+ typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl< -1,Last,Last,State,ForwardOp >
+{
+ typedef State state;
+ typedef Last iterator;
+};
+
+}}}
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ttp/full_lambda.hpp b/boost/boost/mpl/aux_/preprocessed/no_ttp/full_lambda.hpp
new file mode 100644
index 00000000000..bf818731eba
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ttp/full_lambda.hpp
@@ -0,0 +1,554 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/aux_/full_lambda.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template<
+ bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false
+ , bool C5 = false
+ >
+struct lambda_or
+ : true_
+{
+};
+
+template<>
+struct lambda_or< false,false,false,false,false >
+ : false_
+{
+};
+
+} // namespace aux
+
+template<
+ typename T
+ , typename Tag
+
+ >
+struct lambda
+{
+ typedef false_ is_le;
+ typedef T result_;
+ typedef T type;
+};
+
+template<
+ typename T
+ >
+struct is_lambda_expression
+ : lambda<T>::is_le
+{
+};
+
+template< int N, typename Tag >
+struct lambda< arg<N>, Tag >
+{
+ typedef true_ is_le;
+ typedef mpl::arg<N> result_; // qualified for the sake of MIPSpro 7.41
+ typedef mpl::protect<result_> type;
+};
+
+template<
+ typename F
+ , typename Tag
+ >
+struct lambda<
+ bind0<F>
+ , Tag
+
+ >
+{
+ typedef false_ is_le;
+ typedef bind0<
+ F
+ > result_;
+
+ typedef result_ type;
+};
+
+namespace aux {
+
+template<
+ typename IsLE, typename Tag
+ , template< typename P1 > class F
+ , typename L1
+ >
+struct le_result1
+{
+ typedef F<
+ typename L1::type
+ > result_;
+
+ typedef result_ type;
+};
+
+template<
+ typename Tag
+ , template< typename P1 > class F
+ , typename L1
+ >
+struct le_result1< true_,Tag,F,L1 >
+{
+ typedef bind1<
+ quote1< F,Tag >
+ , typename L1::result_
+ > result_;
+
+ typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+ template< typename P1 > class F
+ , typename T1
+ , typename Tag
+ >
+struct lambda<
+ F<T1>
+ , Tag
+
+ >
+{
+ typedef lambda< T1,Tag > l1;
+ typedef typename l1::is_le is_le1;
+ typedef typename aux::lambda_or<
+ is_le1::value
+ >::type is_le;
+
+ typedef aux::le_result1<
+ is_le, Tag, F, l1
+ > le_result_;
+
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+template<
+ typename F, typename T1
+ , typename Tag
+ >
+struct lambda<
+ bind1< F,T1 >
+ , Tag
+
+ >
+{
+ typedef false_ is_le;
+ typedef bind1<
+ F
+ , T1
+ > result_;
+
+ typedef result_ type;
+};
+
+namespace aux {
+
+template<
+ typename IsLE, typename Tag
+ , template< typename P1, typename P2 > class F
+ , typename L1, typename L2
+ >
+struct le_result2
+{
+ typedef F<
+ typename L1::type, typename L2::type
+ > result_;
+
+ typedef result_ type;
+};
+
+template<
+ typename Tag
+ , template< typename P1, typename P2 > class F
+ , typename L1, typename L2
+ >
+struct le_result2< true_,Tag,F,L1,L2 >
+{
+ typedef bind2<
+ quote2< F,Tag >
+ , typename L1::result_, typename L2::result_
+ > result_;
+
+ typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+ template< typename P1, typename P2 > class F
+ , typename T1, typename T2
+ , typename Tag
+ >
+struct lambda<
+ F< T1,T2 >
+ , Tag
+
+ >
+{
+ typedef lambda< T1,Tag > l1;
+ typedef lambda< T2,Tag > l2;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+
+
+ typedef typename aux::lambda_or<
+ is_le1::value, is_le2::value
+ >::type is_le;
+
+ typedef aux::le_result2<
+ is_le, Tag, F, l1, l2
+ > le_result_;
+
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+template<
+ typename F, typename T1, typename T2
+ , typename Tag
+ >
+struct lambda<
+ bind2< F,T1,T2 >
+ , Tag
+
+ >
+{
+ typedef false_ is_le;
+ typedef bind2<
+ F
+ , T1, T2
+ > result_;
+
+ typedef result_ type;
+};
+
+namespace aux {
+
+template<
+ typename IsLE, typename Tag
+ , template< typename P1, typename P2, typename P3 > class F
+ , typename L1, typename L2, typename L3
+ >
+struct le_result3
+{
+ typedef F<
+ typename L1::type, typename L2::type, typename L3::type
+ > result_;
+
+ typedef result_ type;
+};
+
+template<
+ typename Tag
+ , template< typename P1, typename P2, typename P3 > class F
+ , typename L1, typename L2, typename L3
+ >
+struct le_result3< true_,Tag,F,L1,L2,L3 >
+{
+ typedef bind3<
+ quote3< F,Tag >
+ , typename L1::result_, typename L2::result_, typename L3::result_
+ > result_;
+
+ typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+ template< typename P1, typename P2, typename P3 > class F
+ , typename T1, typename T2, typename T3
+ , typename Tag
+ >
+struct lambda<
+ F< T1,T2,T3 >
+ , Tag
+
+ >
+{
+ typedef lambda< T1,Tag > l1;
+ typedef lambda< T2,Tag > l2;
+ typedef lambda< T3,Tag > l3;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+
+
+ typedef typename aux::lambda_or<
+ is_le1::value, is_le2::value, is_le3::value
+ >::type is_le;
+
+ typedef aux::le_result3<
+ is_le, Tag, F, l1, l2, l3
+ > le_result_;
+
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ , typename Tag
+ >
+struct lambda<
+ bind3< F,T1,T2,T3 >
+ , Tag
+
+ >
+{
+ typedef false_ is_le;
+ typedef bind3<
+ F
+ , T1, T2, T3
+ > result_;
+
+ typedef result_ type;
+};
+
+namespace aux {
+
+template<
+ typename IsLE, typename Tag
+ , template< typename P1, typename P2, typename P3, typename P4 > class F
+ , typename L1, typename L2, typename L3, typename L4
+ >
+struct le_result4
+{
+ typedef F<
+ typename L1::type, typename L2::type, typename L3::type
+ , typename L4::type
+ > result_;
+
+ typedef result_ type;
+};
+
+template<
+ typename Tag
+ , template< typename P1, typename P2, typename P3, typename P4 > class F
+ , typename L1, typename L2, typename L3, typename L4
+ >
+struct le_result4< true_,Tag,F,L1,L2,L3,L4 >
+{
+ typedef bind4<
+ quote4< F,Tag >
+ , typename L1::result_, typename L2::result_, typename L3::result_
+ , typename L4::result_
+ > result_;
+
+ typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+ template< typename P1, typename P2, typename P3, typename P4 > class F
+ , typename T1, typename T2, typename T3, typename T4
+ , typename Tag
+ >
+struct lambda<
+ F< T1,T2,T3,T4 >
+ , Tag
+
+ >
+{
+ typedef lambda< T1,Tag > l1;
+ typedef lambda< T2,Tag > l2;
+ typedef lambda< T3,Tag > l3;
+ typedef lambda< T4,Tag > l4;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+ typedef typename l4::is_le is_le4;
+
+
+ typedef typename aux::lambda_or<
+ is_le1::value, is_le2::value, is_le3::value, is_le4::value
+ >::type is_le;
+
+ typedef aux::le_result4<
+ is_le, Tag, F, l1, l2, l3, l4
+ > le_result_;
+
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename Tag
+ >
+struct lambda<
+ bind4< F,T1,T2,T3,T4 >
+ , Tag
+
+ >
+{
+ typedef false_ is_le;
+ typedef bind4<
+ F
+ , T1, T2, T3, T4
+ > result_;
+
+ typedef result_ type;
+};
+
+namespace aux {
+
+template<
+ typename IsLE, typename Tag
+ , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F
+ , typename L1, typename L2, typename L3, typename L4, typename L5
+ >
+struct le_result5
+{
+ typedef F<
+ typename L1::type, typename L2::type, typename L3::type
+ , typename L4::type, typename L5::type
+ > result_;
+
+ typedef result_ type;
+};
+
+template<
+ typename Tag
+ , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F
+ , typename L1, typename L2, typename L3, typename L4, typename L5
+ >
+struct le_result5< true_,Tag,F,L1,L2,L3,L4,L5 >
+{
+ typedef bind5<
+ quote5< F,Tag >
+ , typename L1::result_, typename L2::result_, typename L3::result_
+ , typename L4::result_, typename L5::result_
+ > result_;
+
+ typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+ template<
+ typename P1, typename P2, typename P3, typename P4
+ , typename P5
+ >
+ class F
+ , typename T1, typename T2, typename T3, typename T4, typename T5
+ , typename Tag
+ >
+struct lambda<
+ F< T1,T2,T3,T4,T5 >
+ , Tag
+
+ >
+{
+ typedef lambda< T1,Tag > l1;
+ typedef lambda< T2,Tag > l2;
+ typedef lambda< T3,Tag > l3;
+ typedef lambda< T4,Tag > l4;
+ typedef lambda< T5,Tag > l5;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+ typedef typename l4::is_le is_le4;
+ typedef typename l5::is_le is_le5;
+
+
+ typedef typename aux::lambda_or<
+ is_le1::value, is_le2::value, is_le3::value, is_le4::value
+ , is_le5::value
+ >::type is_le;
+
+ typedef aux::le_result5<
+ is_le, Tag, F, l1, l2, l3, l4, l5
+ > le_result_;
+
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ , typename Tag
+ >
+struct lambda<
+ bind5< F,T1,T2,T3,T4,T5 >
+ , Tag
+
+ >
+{
+ typedef false_ is_le;
+ typedef bind5<
+ F
+ , T1, T2, T3, T4, T5
+ > result_;
+
+ typedef result_ type;
+};
+
+/// special case for 'protect'
+template< typename T, typename Tag >
+struct lambda< mpl::protect<T>, Tag >
+{
+ typedef false_ is_le;
+ typedef mpl::protect<T> result_;
+ typedef result_ type;
+};
+
+/// specializations for the main 'bind' form
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ , typename Tag
+ >
+struct lambda<
+ bind< F,T1,T2,T3,T4,T5 >
+ , Tag
+
+ >
+{
+ typedef false_ is_le;
+ typedef bind< F,T1,T2,T3,T4,T5 > result_;
+ typedef result_ type;
+};
+
+/// workaround for MWCW 8.3+/EDG < 303, leads to ambiguity on Digital Mars
+
+template<
+ typename F, typename Tag1, typename Tag2
+ >
+struct lambda<
+ lambda< F,Tag1 >
+ , Tag2
+ >
+{
+ typedef lambda< F,Tag2 > l1;
+ typedef lambda< Tag1,Tag2 > l2;
+ typedef typename l1::is_le is_le;
+ typedef aux::le_result2<is_le, Tag2, mpl::lambda, l1, l2> le_result_;
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, lambda)
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ttp/greater.hpp b/boost/boost/mpl/aux_/preprocessed/no_ttp/greater.hpp
new file mode 100644
index 00000000000..faa3f2ba9a1
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ttp/greater.hpp
@@ -0,0 +1,98 @@
+
+// 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/greater.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct greater_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< greater_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< greater_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct greater_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct greater_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct greater_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct greater_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct greater
+
+ : greater_impl<
+ typename greater_tag<N1>::type
+ , typename greater_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, greater)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct greater_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ {
+ BOOST_STATIC_CONSTANT(bool, value =
+ ( BOOST_MPL_AUX_VALUE_WKND(N1)::value >
+ BOOST_MPL_AUX_VALUE_WKND(N2)::value )
+ );
+ typedef bool_<value> type;
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ttp/greater_equal.hpp b/boost/boost/mpl/aux_/preprocessed/no_ttp/greater_equal.hpp
new file mode 100644
index 00000000000..392d142d920
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ttp/greater_equal.hpp
@@ -0,0 +1,98 @@
+
+// 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/greater_equal.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct greater_equal_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< greater_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< greater_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct greater_equal_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct greater_equal_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct greater_equal_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct greater_equal_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct greater_equal
+
+ : greater_equal_impl<
+ typename greater_equal_tag<N1>::type
+ , typename greater_equal_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater_equal, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, greater_equal)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct greater_equal_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ {
+ BOOST_STATIC_CONSTANT(bool, value =
+ ( BOOST_MPL_AUX_VALUE_WKND(N1)::value >=
+ BOOST_MPL_AUX_VALUE_WKND(N2)::value )
+ );
+ typedef bool_<value> type;
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ttp/inherit.hpp b/boost/boost/mpl/aux_/preprocessed/no_ttp/inherit.hpp
new file mode 100644
index 00000000000..00f31c42268
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ttp/inherit.hpp
@@ -0,0 +1,141 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/inherit.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(T1)
+ , typename BOOST_MPL_AUX_NA_PARAM(T2)
+ >
+struct inherit2
+ : T1, T2
+{
+ typedef inherit2 type;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, inherit2, (T1, T2))
+};
+
+template< typename T1 >
+struct inherit2< T1,empty_base >
+{
+ typedef T1 type;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (T1, empty_base))
+};
+
+template< typename T2 >
+struct inherit2< empty_base,T2 >
+{
+ typedef T2 type;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, T2))
+};
+
+template<>
+struct inherit2< empty_base,empty_base >
+{
+ typedef empty_base type;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, empty_base))
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, inherit2)
+
+template<
+ typename T1 = na, typename T2 = na, typename T3 = na
+ >
+struct inherit3
+ : inherit2<
+ typename inherit2<
+ T1, T2
+ >::type
+ , T3
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 3
+ , inherit3
+ , ( T1, T2, T3)
+ )
+};
+
+BOOST_MPL_AUX_NA_SPEC(3, inherit3)
+
+template<
+ typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na
+ >
+struct inherit4
+ : inherit2<
+ typename inherit3<
+ T1, T2, T3
+ >::type
+ , T4
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 4
+ , inherit4
+ , ( T1, T2, T3, T4)
+ )
+};
+
+BOOST_MPL_AUX_NA_SPEC(4, inherit4)
+
+template<
+ typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na
+ , typename T5 = na
+ >
+struct inherit5
+ : inherit2<
+ typename inherit4<
+ T1, T2, T3, T4
+ >::type
+ , T5
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , inherit5
+ , ( T1, T2, T3, T4, T5)
+ )
+};
+
+BOOST_MPL_AUX_NA_SPEC(5, inherit5)
+
+/// primary template
+
+template<
+ typename T1 = empty_base, typename T2 = empty_base
+ , typename T3 = empty_base, typename T4 = empty_base
+ , typename T5 = empty_base
+ >
+struct inherit
+ : inherit5< T1,T2,T3,T4,T5 >
+{
+};
+
+template<>
+struct inherit< na,na,na,na,na >
+{
+ template<
+
+ typename T1 = empty_base, typename T2 = empty_base
+ , typename T3 = empty_base, typename T4 = empty_base
+ , typename T5 = empty_base
+
+ >
+ struct apply
+ : inherit< T1,T2,T3,T4,T5 >
+ {
+ };
+};
+
+BOOST_MPL_AUX_NA_SPEC_LAMBDA(5, inherit)
+BOOST_MPL_AUX_NA_SPEC_ARITY(5, inherit)
+BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(5, 5, inherit)
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ttp/iter_fold_if_impl.hpp b/boost/boost/mpl/aux_/preprocessed/no_ttp/iter_fold_if_impl.hpp
new file mode 100644
index 00000000000..695179584d3
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ttp/iter_fold_if_impl.hpp
@@ -0,0 +1,133 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/aux_/iter_fold_if_impl.hpp" header
+// -- DO NOT modify by hand!
+
+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;
+ };
+};
+
+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;
+};
+
+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;
+ typedef iter_fold_if_forward_step< typename forward_step0::iterator, typename forward_step0::state, ForwardOp, ForwardPredicate > forward_step1;
+ typedef iter_fold_if_forward_step< typename forward_step1::iterator, typename forward_step1::state, ForwardOp, ForwardPredicate > forward_step2;
+ typedef iter_fold_if_forward_step< typename forward_step2::iterator, typename forward_step2::state, ForwardOp, ForwardPredicate > forward_step3;
+ typedef iter_fold_if_forward_step< typename forward_step3::iterator, typename forward_step3::state, ForwardOp, ForwardPredicate > forward_step4;
+
+
+ typedef typename if_<
+ typename forward_step4::not_last
+ , iter_fold_if_impl<
+ typename forward_step4::iterator
+ , typename forward_step4::state
+ , ForwardOp
+ , ForwardPredicate
+ , BackwardOp
+ , BackwardPredicate
+ >
+ , iter_fold_if_null_step<
+ typename forward_step4::iterator
+ , typename forward_step4::state
+ >
+ >::type backward_step4;
+
+ typedef iter_fold_if_backward_step< typename forward_step3::iterator, typename backward_step4::state, BackwardOp, BackwardPredicate > backward_step3;
+ typedef iter_fold_if_backward_step< typename forward_step2::iterator, typename backward_step3::state, BackwardOp, BackwardPredicate > backward_step2;
+ typedef iter_fold_if_backward_step< typename forward_step1::iterator, typename backward_step2::state, BackwardOp, BackwardPredicate > backward_step1;
+ typedef iter_fold_if_backward_step< typename forward_step0::iterator, typename backward_step1::state, BackwardOp, BackwardPredicate > backward_step0;
+
+
+ public:
+ typedef typename backward_step0::state state;
+ typedef typename backward_step4::iterator iterator;
+};
+
+}}}
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ttp/iter_fold_impl.hpp b/boost/boost/mpl/aux_/preprocessed/no_ttp/iter_fold_impl.hpp
new file mode 100644
index 00000000000..805790e86d6
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ttp/iter_fold_impl.hpp
@@ -0,0 +1,180 @@
+
+// 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/aux_/iter_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+ int N
+ , typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl;
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl< 0,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef state0 state;
+ typedef iter0 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl< 1,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+
+
+ typedef state1 state;
+ typedef iter1 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl< 2,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+
+
+ typedef state2 state;
+ typedef iter2 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl< 3,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp,state2,iter2 >::type state3;
+ typedef typename mpl::next<iter2>::type iter3;
+
+
+ typedef state3 state;
+ typedef iter3 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl< 4,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp,state2,iter2 >::type state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp,state3,iter3 >::type state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef state4 state;
+ typedef iter4 iterator;
+};
+
+template<
+ int N
+ , typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl
+{
+ typedef iter_fold_impl<
+ 4
+ , First
+ , Last
+ , State
+ , ForwardOp
+ > chunk_;
+
+ typedef iter_fold_impl<
+ ( (N - 4) < 0 ? 0 : N - 4 )
+ , typename chunk_::iterator
+ , Last
+ , typename chunk_::state
+ , ForwardOp
+ > res_;
+
+ typedef typename res_::state state;
+ typedef typename res_::iterator iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl< -1,First,Last,State,ForwardOp >
+ : iter_fold_impl<
+ -1
+ , typename mpl::next<First>::type
+ , Last
+ , typename apply2< ForwardOp,State,First >::type
+ , ForwardOp
+ >
+{
+};
+
+template<
+ typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl< -1,Last,Last,State,ForwardOp >
+{
+ typedef State state;
+ typedef Last iterator;
+};
+
+}}}
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ttp/lambda_no_ctps.hpp b/boost/boost/mpl/aux_/preprocessed/no_ttp/lambda_no_ctps.hpp
new file mode 100644
index 00000000000..890a198a464
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ttp/lambda_no_ctps.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/aux_/lambda_no_ctps.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template<
+ bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false
+ , bool C5 = false
+ >
+struct lambda_or
+ : true_
+{
+};
+
+template<>
+struct lambda_or< false,false,false,false,false >
+ : false_
+{
+};
+
+template< typename Arity > struct lambda_impl
+{
+ template< typename T, typename Tag, typename Protect > struct result_
+ {
+ typedef T type;
+ typedef is_placeholder<T> is_le;
+ };
+};
+
+template<> struct lambda_impl< int_<1> >
+{
+ template< typename F, typename Tag, typename Protect > struct result_
+ {
+ typedef lambda< typename F::arg1, Tag, false_ > l1;
+ typedef typename l1::is_le is_le1;
+ typedef aux::lambda_or<
+ BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value
+ > is_le;
+
+ typedef bind1<
+ typename F::rebind
+ , typename l1::type
+ > bind_;
+
+ typedef typename if_<
+ is_le
+ , if_< Protect, mpl::protect<bind_>, bind_ >
+ , identity<F>
+ >::type type_;
+
+ typedef typename type_::type type;
+ };
+};
+
+template<> struct lambda_impl< int_<2> >
+{
+ template< typename F, typename Tag, typename Protect > struct result_
+ {
+ typedef lambda< typename F::arg1, Tag, false_ > l1;
+ typedef lambda< typename F::arg2, Tag, false_ > l2;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+
+
+ typedef aux::lambda_or<
+ BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value
+ > is_le;
+
+ typedef bind2<
+ typename F::rebind
+ , typename l1::type, typename l2::type
+ > bind_;
+
+ typedef typename if_<
+ is_le
+ , if_< Protect, mpl::protect<bind_>, bind_ >
+ , identity<F>
+ >::type type_;
+
+ typedef typename type_::type type;
+ };
+};
+
+template<> struct lambda_impl< int_<3> >
+{
+ template< typename F, typename Tag, typename Protect > struct result_
+ {
+ typedef lambda< typename F::arg1, Tag, false_ > l1;
+ typedef lambda< typename F::arg2, Tag, false_ > l2;
+ typedef lambda< typename F::arg3, Tag, false_ > l3;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+
+
+ typedef aux::lambda_or<
+ BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value
+ > is_le;
+
+ typedef bind3<
+ typename F::rebind
+ , typename l1::type, typename l2::type, typename l3::type
+ > bind_;
+
+ typedef typename if_<
+ is_le
+ , if_< Protect, mpl::protect<bind_>, bind_ >
+ , identity<F>
+ >::type type_;
+
+ typedef typename type_::type type;
+ };
+};
+
+template<> struct lambda_impl< int_<4> >
+{
+ template< typename F, typename Tag, typename Protect > struct result_
+ {
+ typedef lambda< typename F::arg1, Tag, false_ > l1;
+ typedef lambda< typename F::arg2, Tag, false_ > l2;
+ typedef lambda< typename F::arg3, Tag, false_ > l3;
+ typedef lambda< typename F::arg4, Tag, false_ > l4;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+ typedef typename l4::is_le is_le4;
+
+
+ typedef aux::lambda_or<
+ BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value
+ > is_le;
+
+ typedef bind4<
+ typename F::rebind
+ , typename l1::type, typename l2::type, typename l3::type
+ , typename l4::type
+ > bind_;
+
+ typedef typename if_<
+ is_le
+ , if_< Protect, mpl::protect<bind_>, bind_ >
+ , identity<F>
+ >::type type_;
+
+ typedef typename type_::type type;
+ };
+};
+
+template<> struct lambda_impl< int_<5> >
+{
+ template< typename F, typename Tag, typename Protect > struct result_
+ {
+ typedef lambda< typename F::arg1, Tag, false_ > l1;
+ typedef lambda< typename F::arg2, Tag, false_ > l2;
+ typedef lambda< typename F::arg3, Tag, false_ > l3;
+ typedef lambda< typename F::arg4, Tag, false_ > l4;
+ typedef lambda< typename F::arg5, Tag, false_ > l5;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+ typedef typename l4::is_le is_le4;
+ typedef typename l5::is_le is_le5;
+
+
+ typedef aux::lambda_or<
+ BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le5)::value
+ > is_le;
+
+ typedef bind5<
+ typename F::rebind
+ , typename l1::type, typename l2::type, typename l3::type
+ , typename l4::type, typename l5::type
+ > bind_;
+
+ typedef typename if_<
+ is_le
+ , if_< Protect, mpl::protect<bind_>, bind_ >
+ , identity<F>
+ >::type type_;
+
+ typedef typename type_::type type;
+ };
+};
+
+} // namespace aux
+
+template<
+ typename T
+ , typename Tag
+ , typename Protect
+ >
+struct lambda
+{
+ /// Metafunction forwarding confuses MSVC 6.x
+ typedef typename aux::template_arity<T>::type arity_;
+ typedef typename aux::lambda_impl<arity_>
+ ::template result_< T,Tag,Protect > l_;
+
+ typedef typename l_::type type;
+ typedef typename l_::is_le is_le;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(3, lambda, (T, Tag, Protect))
+};
+
+BOOST_MPL_AUX_NA_SPEC2(1, 3, lambda)
+
+template<
+ typename T
+ >
+struct is_lambda_expression
+ : lambda<T>::is_le
+{
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ttp/less.hpp b/boost/boost/mpl/aux_/preprocessed/no_ttp/less.hpp
new file mode 100644
index 00000000000..6451680fe80
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ttp/less.hpp
@@ -0,0 +1,98 @@
+
+// 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/less.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct less_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< less_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< less_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct less_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct less_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct less_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct less_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct less
+
+ : less_impl<
+ typename less_tag<N1>::type
+ , typename less_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, less)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct less_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ {
+ BOOST_STATIC_CONSTANT(bool, value =
+ ( BOOST_MPL_AUX_VALUE_WKND(N2)::value >
+ BOOST_MPL_AUX_VALUE_WKND(N1)::value )
+ );
+ typedef bool_<value> type;
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ttp/less_equal.hpp b/boost/boost/mpl/aux_/preprocessed/no_ttp/less_equal.hpp
new file mode 100644
index 00000000000..00ae0d3ecb5
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ttp/less_equal.hpp
@@ -0,0 +1,98 @@
+
+// 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/less_equal.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct less_equal_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< less_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< less_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct less_equal_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct less_equal_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct less_equal_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct less_equal_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct less_equal
+
+ : less_equal_impl<
+ typename less_equal_tag<N1>::type
+ , typename less_equal_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less_equal, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, less_equal)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct less_equal_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ {
+ BOOST_STATIC_CONSTANT(bool, value =
+ ( BOOST_MPL_AUX_VALUE_WKND(N1)::value <=
+ BOOST_MPL_AUX_VALUE_WKND(N2)::value )
+ );
+ typedef bool_<value> type;
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ttp/list.hpp b/boost/boost/mpl/aux_/preprocessed/no_ttp/list.hpp
new file mode 100644
index 00000000000..4e8ad53d212
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ttp/list.hpp
@@ -0,0 +1,323 @@
+
+// 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.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+ , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+ , typename T12 = na, typename T13 = na, typename T14 = na
+ , typename T15 = na, typename T16 = na, typename T17 = na
+ , typename T18 = na, typename T19 = na
+ >
+struct list;
+
+template<
+
+ >
+struct list<
+ na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list0< >
+{
+ typedef list0< >::type type;
+};
+
+template<
+ typename T0
+ >
+struct list<
+ T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list1<T0>
+{
+ typedef typename list1<T0>::type type;
+};
+
+template<
+ typename T0, typename T1
+ >
+struct list<
+ T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list2< T0,T1 >
+{
+ typedef typename list2< T0,T1 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2
+ >
+struct list<
+ T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list3< T0,T1,T2 >
+{
+ typedef typename list3< T0,T1,T2 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3
+ >
+struct list<
+ T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list4< T0,T1,T2,T3 >
+{
+ typedef typename list4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ >
+struct list<
+ T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list5< T0,T1,T2,T3,T4 >
+{
+ typedef typename list5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct list<
+ T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list6< T0,T1,T2,T3,T4,T5 >
+{
+ typedef typename list6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6
+ >
+struct list<
+ T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list7< T0,T1,T2,T3,T4,T5,T6 >
+{
+ typedef typename list7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7
+ >
+struct list<
+ T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+ typedef typename list8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8
+ >
+struct list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+ typedef typename list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ >
+struct list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+ typedef typename list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ , typename T10
+ >
+struct list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+ typedef typename list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+ , na, na, na, na
+ >
+ : list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+ typedef typename list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+ , na, na, na, na
+ >
+ : list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+ typedef typename list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+ , na, na, na, na
+ >
+ : list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+ typedef typename list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+ , na, na, na, na
+ >
+ : list15<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ >
+{
+ typedef typename list15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, na, na, na, na
+ >
+ : list16<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15
+ >
+{
+ typedef typename list16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, na, na, na
+ >
+ : list17<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16
+ >
+{
+ typedef typename list17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, na, na
+ >
+ : list18<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17
+ >
+{
+ typedef typename list18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, na
+ >
+ : list19<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18
+ >
+{
+ typedef typename list19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ , typename T10, typename T11, typename T12, typename T13, typename T14
+ , typename T15, typename T16, typename T17, typename T18, typename T19
+ >
+struct list
+ : list20<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, T19
+ >
+{
+ typedef typename list20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ttp/list_c.hpp b/boost/boost/mpl/aux_/preprocessed/no_ttp/list_c.hpp
new file mode 100644
index 00000000000..0b48a7f8e11
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ttp/list_c.hpp
@@ -0,0 +1,328 @@
+
+// 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_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+ , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+ , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+ , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+ , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+ , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+ , long C18 = LONG_MAX, long C19 = LONG_MAX
+ >
+struct list_c;
+
+template<
+ typename T
+ >
+struct list_c<
+ T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list0_c<T>
+{
+ typedef typename list0_c<T>::type type;
+};
+
+template<
+ typename T, long C0
+ >
+struct list_c<
+ T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list1_c< T,C0 >
+{
+ typedef typename list1_c< T,C0 >::type type;
+};
+
+template<
+ typename T, long C0, long C1
+ >
+struct list_c<
+ T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list2_c< T,C0,C1 >
+{
+ typedef typename list2_c< T,C0,C1 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2
+ >
+struct list_c<
+ T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list3_c< T,C0,C1,C2 >
+{
+ typedef typename list3_c< T,C0,C1,C2 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3
+ >
+struct list_c<
+ T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list4_c< T,C0,C1,C2,C3 >
+{
+ typedef typename list4_c< T,C0,C1,C2,C3 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list5_c< T,C0,C1,C2,C3,C4 >
+{
+ typedef typename list5_c< T,C0,C1,C2,C3,C4 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list6_c< T,C0,C1,C2,C3,C4,C5 >
+{
+ typedef typename list6_c< T,C0,C1,C2,C3,C4,C5 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list7_c< T,C0,C1,C2,C3,C4,C5,C6 >
+{
+ typedef typename list7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX
+ >
+ : list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >
+{
+ typedef typename list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX
+ >
+ : list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >
+{
+ typedef typename list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX
+ >
+ : list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >
+{
+ typedef typename list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >
+{
+ typedef typename list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >
+{
+ typedef typename list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >
+{
+ typedef typename list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list14_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+ >
+{
+ typedef typename list14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list15_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ >
+{
+ typedef typename list15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list16_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15
+ >
+{
+ typedef typename list16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list17_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16
+ >
+{
+ typedef typename list17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, LONG_MAX, LONG_MAX
+ >
+ : list18_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17
+ >
+{
+ typedef typename list18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, C18, LONG_MAX
+ >
+ : list19_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, C18
+ >
+{
+ typedef typename list19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+struct list_c
+ : list20_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, C18, C19
+ >
+{
+ typedef typename list20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ttp/map.hpp b/boost/boost/mpl/aux_/preprocessed/no_ttp/map.hpp
new file mode 100644
index 00000000000..837e0137718
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ttp/map.hpp
@@ -0,0 +1,323 @@
+
+// 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/map.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+ , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+ , typename T12 = na, typename T13 = na, typename T14 = na
+ , typename T15 = na, typename T16 = na, typename T17 = na
+ , typename T18 = na, typename T19 = na
+ >
+struct map;
+
+template<
+
+ >
+struct map<
+ na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map0< >
+{
+ typedef map0< >::type type;
+};
+
+template<
+ typename T0
+ >
+struct map<
+ T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map1<T0>
+{
+ typedef typename map1<T0>::type type;
+};
+
+template<
+ typename T0, typename T1
+ >
+struct map<
+ T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map2< T0,T1 >
+{
+ typedef typename map2< T0,T1 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2
+ >
+struct map<
+ T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map3< T0,T1,T2 >
+{
+ typedef typename map3< T0,T1,T2 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3
+ >
+struct map<
+ T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map4< T0,T1,T2,T3 >
+{
+ typedef typename map4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ >
+struct map<
+ T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map5< T0,T1,T2,T3,T4 >
+{
+ typedef typename map5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct map<
+ T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map6< T0,T1,T2,T3,T4,T5 >
+{
+ typedef typename map6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6
+ >
+struct map<
+ T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map7< T0,T1,T2,T3,T4,T5,T6 >
+{
+ typedef typename map7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7
+ >
+struct map<
+ T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+ typedef typename map8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8
+ >
+struct map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+ typedef typename map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ >
+struct map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+ typedef typename map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ , typename T10
+ >
+struct map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+ typedef typename map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+ , na, na, na, na
+ >
+ : map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+ typedef typename map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+ , na, na, na, na
+ >
+ : map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+ typedef typename map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+ , na, na, na, na
+ >
+ : map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+ typedef typename map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+ , na, na, na, na
+ >
+ : map15<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ >
+{
+ typedef typename map15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, na, na, na, na
+ >
+ : map16<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15
+ >
+{
+ typedef typename map16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, na, na, na
+ >
+ : map17<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16
+ >
+{
+ typedef typename map17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, na, na
+ >
+ : map18<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17
+ >
+{
+ typedef typename map18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, na
+ >
+ : map19<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18
+ >
+{
+ typedef typename map19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+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 map
+ : map20<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, T19
+ >
+{
+ typedef typename map20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ttp/minus.hpp b/boost/boost/mpl/aux_/preprocessed/no_ttp/minus.hpp
new file mode 100644
index 00000000000..bb67c59a52b
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ttp/minus.hpp
@@ -0,0 +1,156 @@
+
+// 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/minus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct minus_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< minus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< minus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct minus_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct minus_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct minus_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct minus_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct minus
+ : minus< minus< minus< minus< N1,N2 >, N3>, N4>, N5>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , minus
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3, typename N4
+ >
+struct minus< N1,N2,N3,N4,na >
+
+ : minus< minus< minus< N1,N2 >, N3>, N4>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , minus
+ , ( N1, N2, N3, N4, na )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3
+ >
+struct minus< N1,N2,N3,na,na >
+
+ : minus< minus< N1,N2 >, N3>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , minus
+ , ( N1, N2, N3, na, na )
+ )
+};
+
+template<
+ typename N1, typename N2
+ >
+struct minus< N1,N2,na,na,na >
+ : minus_impl<
+ typename minus_tag<N1>::type
+ , typename minus_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , minus
+ , ( N1, N2, na, na, na )
+ )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, minus)
+
+}}
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< typename T, T n1, T n2 >
+struct minus_wknd
+{
+ BOOST_STATIC_CONSTANT(T, value = (n1 - n2));
+ typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct minus_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+ : aux::minus_wknd<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , N1::value
+ , N2::value
+ >::type
+
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ttp/modulus.hpp b/boost/boost/mpl/aux_/preprocessed/no_ttp/modulus.hpp
new file mode 100644
index 00000000000..6fd0cab37a5
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ttp/modulus.hpp
@@ -0,0 +1,111 @@
+
+// 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/modulus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct modulus_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< modulus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< modulus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct modulus_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct modulus_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct modulus_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct modulus_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct modulus
+
+ : modulus_impl<
+ typename modulus_tag<N1>::type
+ , typename modulus_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, modulus, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, modulus)
+
+}}
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< typename T, T n1, T n2 >
+struct modulus_wknd
+{
+ BOOST_STATIC_CONSTANT(T, value = (n1 % n2));
+ typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct modulus_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+ : aux::modulus_wknd<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , N1::value
+ , N2::value
+ >::type
+
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ttp/not_equal_to.hpp b/boost/boost/mpl/aux_/preprocessed/no_ttp/not_equal_to.hpp
new file mode 100644
index 00000000000..7c940a5b076
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ttp/not_equal_to.hpp
@@ -0,0 +1,98 @@
+
+// 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/not_equal_to.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct not_equal_to_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< not_equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< not_equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct not_equal_to_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct not_equal_to_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct not_equal_to_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct not_equal_to_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct not_equal_to
+
+ : not_equal_to_impl<
+ typename not_equal_to_tag<N1>::type
+ , typename not_equal_to_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, not_equal_to, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, not_equal_to)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct not_equal_to_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ {
+ BOOST_STATIC_CONSTANT(bool, value =
+ ( BOOST_MPL_AUX_VALUE_WKND(N1)::value !=
+ BOOST_MPL_AUX_VALUE_WKND(N2)::value )
+ );
+ typedef bool_<value> type;
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ttp/or.hpp b/boost/boost/mpl/aux_/preprocessed/no_ttp/or.hpp
new file mode 100644
index 00000000000..31e1aaa4e60
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ttp/or.hpp
@@ -0,0 +1,69 @@
+
+// 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/or.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template< bool C_, typename T1, typename T2, typename T3, typename T4 >
+struct or_impl
+ : true_
+{
+};
+
+template< typename T1, typename T2, typename T3, typename T4 >
+struct or_impl< false,T1,T2,T3,T4 >
+ : or_impl<
+ BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+ , T2, T3, T4
+ , false_
+ >
+{
+};
+
+template<>
+struct or_impl<
+ false
+ , false_, false_, false_, false_
+ >
+ : false_
+{
+};
+
+} // namespace aux
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(T1)
+ , typename BOOST_MPL_AUX_NA_PARAM(T2)
+ , typename T3 = false_, typename T4 = false_, typename T5 = false_
+ >
+struct or_
+
+ : aux::or_impl<
+ BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+ , T2, T3, T4, T5
+ >
+
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , or_
+ , ( T1, T2, T3, T4, T5)
+ )
+};
+
+BOOST_MPL_AUX_NA_SPEC2(
+ 2
+ , 5
+ , or_
+ )
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ttp/placeholders.hpp b/boost/boost/mpl/aux_/preprocessed/no_ttp/placeholders.hpp
new file mode 100644
index 00000000000..ff97364b9ba
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ttp/placeholders.hpp
@@ -0,0 +1,105 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+// Copyright Peter Dimov 2001-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)
+//
+
+// Preprocessed version of "boost/mpl/placeholders.hpp" header
+// -- DO NOT modify by hand!
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg< -1 > _;
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_;
+}
+
+}}
+
+/// agurt, 17/mar/02: one more placeholder for the last 'apply#'
+/// specialization
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<1> _1;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_1)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_1;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<2> _2;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_2)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_2;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<3> _3;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_3)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_3;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<4> _4;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_4)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_4;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<5> _5;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_5)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_5;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<6> _6;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_6)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_6;
+}
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ttp/plus.hpp b/boost/boost/mpl/aux_/preprocessed/no_ttp/plus.hpp
new file mode 100644
index 00000000000..cecead75abc
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ttp/plus.hpp
@@ -0,0 +1,156 @@
+
+// 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/plus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct plus_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< plus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< plus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct plus_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct plus_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct plus_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct plus_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct plus
+ : plus< plus< plus< plus< N1,N2 >, N3>, N4>, N5>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , plus
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3, typename N4
+ >
+struct plus< N1,N2,N3,N4,na >
+
+ : plus< plus< plus< N1,N2 >, N3>, N4>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , plus
+ , ( N1, N2, N3, N4, na )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3
+ >
+struct plus< N1,N2,N3,na,na >
+
+ : plus< plus< N1,N2 >, N3>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , plus
+ , ( N1, N2, N3, na, na )
+ )
+};
+
+template<
+ typename N1, typename N2
+ >
+struct plus< N1,N2,na,na,na >
+ : plus_impl<
+ typename plus_tag<N1>::type
+ , typename plus_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , plus
+ , ( N1, N2, na, na, na )
+ )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, plus)
+
+}}
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< typename T, T n1, T n2 >
+struct plus_wknd
+{
+ BOOST_STATIC_CONSTANT(T, value = (n1 + n2));
+ typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct plus_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+ : aux::plus_wknd<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , N1::value
+ , N2::value
+ >::type
+
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ttp/quote.hpp b/boost/boost/mpl/aux_/preprocessed/no_ttp/quote.hpp
new file mode 100644
index 00000000000..e7a7f001961
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ttp/quote.hpp
@@ -0,0 +1,11 @@
+
+// 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/quote.hpp" header
+// -- DO NOT modify by hand!
+
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ttp/reverse_fold_impl.hpp b/boost/boost/mpl/aux_/preprocessed/no_ttp/reverse_fold_impl.hpp
new file mode 100644
index 00000000000..c468684c91e
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ttp/reverse_fold_impl.hpp
@@ -0,0 +1,231 @@
+
+// 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/aux_/reverse_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+ long N
+ , typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl;
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl< 0,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef fwd_state0 bkwd_state0;
+ typedef bkwd_state0 state;
+ typedef iter0 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl< 1,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+
+
+ typedef fwd_state1 bkwd_state1;
+ typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+ typedef bkwd_state0 state;
+ typedef iter1 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl< 2,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+
+
+ typedef fwd_state2 bkwd_state2;
+ typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+ typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter2 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl< 3,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+
+
+ typedef fwd_state3 bkwd_state3;
+ typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+ typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+ typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter3 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl< 4,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef fwd_state4 bkwd_state4;
+ typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
+ typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+ typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+ typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter4 iterator;
+};
+
+template<
+ long N
+ , typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef reverse_fold_impl<
+ ( (N - 4) < 0 ? 0 : N - 4 )
+ , iter4
+ , Last
+ , fwd_state4
+ , BackwardOp
+ , ForwardOp
+ > nested_chunk;
+
+ typedef typename nested_chunk::state bkwd_state4;
+ typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
+ typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+ typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+ typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef typename nested_chunk::iterator iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl< -1,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef reverse_fold_impl<
+ -1
+ , typename mpl::next<First>::type
+ , Last
+ , typename apply2<ForwardOp,State, typename deref<First>::type>::type
+ , BackwardOp
+ , ForwardOp
+ > nested_step;
+
+ typedef typename apply2<
+ BackwardOp
+ , typename nested_step::state
+ , typename deref<First>::type
+ >::type state;
+
+ typedef typename nested_step::iterator iterator;
+};
+
+template<
+ typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl< -1,Last,Last,State,BackwardOp,ForwardOp >
+{
+ typedef State state;
+ typedef Last iterator;
+};
+
+}}}
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ttp/reverse_iter_fold_impl.hpp b/boost/boost/mpl/aux_/preprocessed/no_ttp/reverse_iter_fold_impl.hpp
new file mode 100644
index 00000000000..658f92a7c38
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ttp/reverse_iter_fold_impl.hpp
@@ -0,0 +1,231 @@
+
+// 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/aux_/reverse_iter_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+ long N
+ , typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl;
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl< 0,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef fwd_state0 bkwd_state0;
+ typedef bkwd_state0 state;
+ typedef iter0 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl< 1,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+
+
+ typedef fwd_state1 bkwd_state1;
+ typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+ typedef bkwd_state0 state;
+ typedef iter1 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl< 2,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+
+
+ typedef fwd_state2 bkwd_state2;
+ typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+ typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter2 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl< 3,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+
+
+ typedef fwd_state3 bkwd_state3;
+ typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+ typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+ typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter3 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl< 4,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef fwd_state4 bkwd_state4;
+ typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;
+ typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+ typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+ typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter4 iterator;
+};
+
+template<
+ long N
+ , typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef reverse_iter_fold_impl<
+ ( (N - 4) < 0 ? 0 : N - 4 )
+ , iter4
+ , Last
+ , fwd_state4
+ , BackwardOp
+ , ForwardOp
+ > nested_chunk;
+
+ typedef typename nested_chunk::state bkwd_state4;
+ typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;
+ typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+ typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+ typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef typename nested_chunk::iterator iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl< -1,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef reverse_iter_fold_impl<
+ -1
+ , typename mpl::next<First>::type
+ , Last
+ , typename apply2< ForwardOp,State,First >::type
+ , BackwardOp
+ , ForwardOp
+ > nested_step;
+
+ typedef typename apply2<
+ BackwardOp
+ , typename nested_step::state
+ , First
+ >::type state;
+
+ typedef typename nested_step::iterator iterator;
+};
+
+template<
+ typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl< -1,Last,Last,State,BackwardOp,ForwardOp >
+{
+ typedef State state;
+ typedef Last iterator;
+};
+
+}}}
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ttp/set.hpp b/boost/boost/mpl/aux_/preprocessed/no_ttp/set.hpp
new file mode 100644
index 00000000000..5721922e111
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ttp/set.hpp
@@ -0,0 +1,323 @@
+
+// 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/set.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+ , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+ , typename T12 = na, typename T13 = na, typename T14 = na
+ , typename T15 = na, typename T16 = na, typename T17 = na
+ , typename T18 = na, typename T19 = na
+ >
+struct set;
+
+template<
+
+ >
+struct set<
+ na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set0< >
+{
+ typedef set0< >::type type;
+};
+
+template<
+ typename T0
+ >
+struct set<
+ T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set1<T0>
+{
+ typedef typename set1<T0>::type type;
+};
+
+template<
+ typename T0, typename T1
+ >
+struct set<
+ T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set2< T0,T1 >
+{
+ typedef typename set2< T0,T1 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2
+ >
+struct set<
+ T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set3< T0,T1,T2 >
+{
+ typedef typename set3< T0,T1,T2 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3
+ >
+struct set<
+ T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set4< T0,T1,T2,T3 >
+{
+ typedef typename set4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ >
+struct set<
+ T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set5< T0,T1,T2,T3,T4 >
+{
+ typedef typename set5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct set<
+ T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set6< T0,T1,T2,T3,T4,T5 >
+{
+ typedef typename set6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6
+ >
+struct set<
+ T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set7< T0,T1,T2,T3,T4,T5,T6 >
+{
+ typedef typename set7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7
+ >
+struct set<
+ T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+ typedef typename set8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8
+ >
+struct set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+ typedef typename set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ >
+struct set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+ typedef typename set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ , typename T10
+ >
+struct set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+ typedef typename set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+ , na, na, na, na
+ >
+ : set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+ typedef typename set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+ , na, na, na, na
+ >
+ : set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+ typedef typename set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+ , na, na, na, na
+ >
+ : set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+ typedef typename set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+ , na, na, na, na
+ >
+ : set15<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ >
+{
+ typedef typename set15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, na, na, na, na
+ >
+ : set16<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15
+ >
+{
+ typedef typename set16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, na, na, na
+ >
+ : set17<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16
+ >
+{
+ typedef typename set17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, na, na
+ >
+ : set18<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17
+ >
+{
+ typedef typename set18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, na
+ >
+ : set19<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18
+ >
+{
+ typedef typename set19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+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 set
+ : set20<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, T19
+ >
+{
+ typedef typename set20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ttp/set_c.hpp b/boost/boost/mpl/aux_/preprocessed/no_ttp/set_c.hpp
new file mode 100644
index 00000000000..cbeb932c13d
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ttp/set_c.hpp
@@ -0,0 +1,328 @@
+
+// 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/set_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+ , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+ , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+ , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+ , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+ , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+ , long C18 = LONG_MAX, long C19 = LONG_MAX
+ >
+struct set_c;
+
+template<
+ typename T
+ >
+struct set_c<
+ T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set0_c<T>
+{
+ typedef typename set0_c<T>::type type;
+};
+
+template<
+ typename T, long C0
+ >
+struct set_c<
+ T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set1_c< T,C0 >
+{
+ typedef typename set1_c< T,C0 >::type type;
+};
+
+template<
+ typename T, long C0, long C1
+ >
+struct set_c<
+ T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set2_c< T,C0,C1 >
+{
+ typedef typename set2_c< T,C0,C1 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2
+ >
+struct set_c<
+ T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set3_c< T,C0,C1,C2 >
+{
+ typedef typename set3_c< T,C0,C1,C2 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3
+ >
+struct set_c<
+ T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set4_c< T,C0,C1,C2,C3 >
+{
+ typedef typename set4_c< T,C0,C1,C2,C3 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set5_c< T,C0,C1,C2,C3,C4 >
+{
+ typedef typename set5_c< T,C0,C1,C2,C3,C4 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set6_c< T,C0,C1,C2,C3,C4,C5 >
+{
+ typedef typename set6_c< T,C0,C1,C2,C3,C4,C5 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set7_c< T,C0,C1,C2,C3,C4,C5,C6 >
+{
+ typedef typename set7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX
+ >
+ : set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >
+{
+ typedef typename set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX
+ >
+ : set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >
+{
+ typedef typename set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX
+ >
+ : set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >
+{
+ typedef typename set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >
+{
+ typedef typename set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >
+{
+ typedef typename set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >
+{
+ typedef typename set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set14_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+ >
+{
+ typedef typename set14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set15_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ >
+{
+ typedef typename set15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set16_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15
+ >
+{
+ typedef typename set16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set17_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16
+ >
+{
+ typedef typename set17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, LONG_MAX, LONG_MAX
+ >
+ : set18_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17
+ >
+{
+ typedef typename set18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, C18, LONG_MAX
+ >
+ : set19_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, C18
+ >
+{
+ typedef typename set19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+struct set_c
+ : set20_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, C18, C19
+ >
+{
+ typedef typename set20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ttp/shift_left.hpp b/boost/boost/mpl/aux_/preprocessed/no_ttp/shift_left.hpp
new file mode 100644
index 00000000000..7ef46725226
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ttp/shift_left.hpp
@@ -0,0 +1,110 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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)
+//
+
+// Preprocessed version of "boost/mpl/shift_left.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct shift_left_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< shift_left_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< shift_left_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct shift_left_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct shift_left_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct shift_left_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct shift_left_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct shift_left
+
+ : shift_left_impl<
+ typename shift_left_tag<N1>::type
+ , typename shift_left_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_left, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_left)
+
+}}
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< typename T, typename Shift, T n, Shift s >
+struct shift_left_wknd
+{
+ BOOST_STATIC_CONSTANT(T, value = (n << s));
+ typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct shift_left_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N, typename S > struct apply
+ : aux::shift_left_wknd<
+ typename N::value_type
+ , typename S::value_type
+ , N::value
+ , S::value
+ >::type
+
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ttp/shift_right.hpp b/boost/boost/mpl/aux_/preprocessed/no_ttp/shift_right.hpp
new file mode 100644
index 00000000000..91a98f7385b
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ttp/shift_right.hpp
@@ -0,0 +1,110 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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)
+//
+
+// Preprocessed version of "boost/mpl/shift_right.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct shift_right_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< shift_right_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< shift_right_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct shift_right_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct shift_right_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct shift_right_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct shift_right_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct shift_right
+
+ : shift_right_impl<
+ typename shift_right_tag<N1>::type
+ , typename shift_right_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_right, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_right)
+
+}}
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< typename T, typename Shift, T n, Shift s >
+struct shift_right_wknd
+{
+ BOOST_STATIC_CONSTANT(T, value = (n >> s));
+ typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct shift_right_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N, typename S > struct apply
+ : aux::shift_right_wknd<
+ typename N::value_type
+ , typename S::value_type
+ , N::value
+ , S::value
+ >::type
+
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ttp/template_arity.hpp b/boost/boost/mpl/aux_/preprocessed/no_ttp/template_arity.hpp
new file mode 100644
index 00000000000..1164f0f8c27
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ttp/template_arity.hpp
@@ -0,0 +1,40 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/aux_/template_arity.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+template< bool >
+struct template_arity_impl
+{
+ template< typename F > struct result_
+ : mpl::int_< -1 >
+ {
+ };
+};
+
+template<>
+struct template_arity_impl<true>
+{
+ template< typename F > struct result_
+ : F::arity
+ {
+ };
+};
+
+template< typename F >
+struct template_arity
+ : template_arity_impl< ::boost::mpl::aux::has_rebind<F>::value >
+ ::template result_<F>
+{
+};
+
+}}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ttp/times.hpp b/boost/boost/mpl/aux_/preprocessed/no_ttp/times.hpp
new file mode 100644
index 00000000000..d019b572479
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ttp/times.hpp
@@ -0,0 +1,156 @@
+
+// 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/times.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct times_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< times_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< times_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct times_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct times_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct times_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct times_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct times
+ : times< times< times< times< N1,N2 >, N3>, N4>, N5>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 5
+ , times
+ , ( N1, N2, N3, N4, N5 )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3, typename N4
+ >
+struct times< N1,N2,N3,N4,na >
+
+ : times< times< times< N1,N2 >, N3>, N4>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , times
+ , ( N1, N2, N3, N4, na )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3
+ >
+struct times< N1,N2,N3,na,na >
+
+ : times< times< N1,N2 >, N3>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , times
+ , ( N1, N2, N3, na, na )
+ )
+};
+
+template<
+ typename N1, typename N2
+ >
+struct times< N1,N2,na,na,na >
+ : times_impl<
+ typename times_tag<N1>::type
+ , typename times_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , times
+ , ( N1, N2, na, na, na )
+ )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, times)
+
+}}
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< typename T, T n1, T n2 >
+struct times_wknd
+{
+ BOOST_STATIC_CONSTANT(T, value = (n1 * n2));
+ typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct times_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+ : aux::times_wknd<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , N1::value
+ , N2::value
+ >::type
+
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ttp/unpack_args.hpp b/boost/boost/mpl/aux_/preprocessed/no_ttp/unpack_args.hpp
new file mode 100644
index 00000000000..2194ce9d11b
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ttp/unpack_args.hpp
@@ -0,0 +1,94 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/unpack_args.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template< int size, typename F, typename Args >
+struct unpack_args_impl;
+
+template< typename F, typename Args >
+struct unpack_args_impl< 0,F,Args >
+ : apply0<
+ F
+ >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 1,F,Args >
+ : apply1<
+ F
+ , typename at_c< Args,0 >::type
+ >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 2,F,Args >
+ : apply2<
+ F
+ , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+ >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 3,F,Args >
+ : apply3<
+ F
+ , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+ , typename at_c< Args,2 >::type
+ >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 4,F,Args >
+ : apply4<
+ F
+ , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+ , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type
+ >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 5,F,Args >
+ : apply5<
+ F
+ , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+ , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type
+ , typename at_c< Args,4 >::type
+ >
+{
+};
+
+}
+
+template<
+ typename F
+ >
+struct unpack_args
+{
+ template< typename Args > struct apply
+
+ : aux::unpack_args_impl< size<Args>::value,F, Args >
+
+ {
+ };
+};
+
+BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args)
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ttp/vector.hpp b/boost/boost/mpl/aux_/preprocessed/no_ttp/vector.hpp
new file mode 100644
index 00000000000..bfa9565a537
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ttp/vector.hpp
@@ -0,0 +1,323 @@
+
+// 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/vector.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+ , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+ , typename T12 = na, typename T13 = na, typename T14 = na
+ , typename T15 = na, typename T16 = na, typename T17 = na
+ , typename T18 = na, typename T19 = na
+ >
+struct vector;
+
+template<
+
+ >
+struct vector<
+ na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector0< >
+{
+ typedef vector0< >::type type;
+};
+
+template<
+ typename T0
+ >
+struct vector<
+ T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector1<T0>
+{
+ typedef typename vector1<T0>::type type;
+};
+
+template<
+ typename T0, typename T1
+ >
+struct vector<
+ T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector2< T0,T1 >
+{
+ typedef typename vector2< T0,T1 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2
+ >
+struct vector<
+ T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector3< T0,T1,T2 >
+{
+ typedef typename vector3< T0,T1,T2 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3
+ >
+struct vector<
+ T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector4< T0,T1,T2,T3 >
+{
+ typedef typename vector4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ >
+struct vector<
+ T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector5< T0,T1,T2,T3,T4 >
+{
+ typedef typename vector5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct vector<
+ T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector6< T0,T1,T2,T3,T4,T5 >
+{
+ typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6
+ >
+struct vector<
+ T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector7< T0,T1,T2,T3,T4,T5,T6 >
+{
+ typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7
+ >
+struct vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+ typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8
+ >
+struct vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+ typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ >
+struct vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+ typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ , typename T10
+ >
+struct vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+ typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+ , na, na, na, na
+ >
+ : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+ typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+ , na, na, na, na
+ >
+ : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+ typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+ , na, na, na, na
+ >
+ : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+ typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+ , na, na, na, na
+ >
+ : vector15<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ >
+{
+ typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, na, na, na, na
+ >
+ : vector16<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15
+ >
+{
+ typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, na, na, na
+ >
+ : vector17<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16
+ >
+{
+ typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, na, na
+ >
+ : vector18<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17
+ >
+{
+ typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, na
+ >
+ : vector19<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18
+ >
+{
+ typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+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 vector
+ : vector20<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, T19
+ >
+{
+ typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/no_ttp/vector_c.hpp b/boost/boost/mpl/aux_/preprocessed/no_ttp/vector_c.hpp
new file mode 100644
index 00000000000..0f1560d7f13
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/no_ttp/vector_c.hpp
@@ -0,0 +1,309 @@
+
+// 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/vector_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+ , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+ , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+ , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+ , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+ , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+ , long C18 = LONG_MAX, long C19 = LONG_MAX
+ >
+struct vector_c;
+
+template<
+ typename T
+ >
+struct vector_c<
+ T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector0_c<T>
+{
+ typedef typename vector0_c<T>::type type;
+};
+
+template<
+ typename T, long C0
+ >
+struct vector_c<
+ T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector1_c< T, T(C0) >
+{
+ typedef typename vector1_c< T, T(C0) >::type type;
+};
+
+template<
+ typename T, long C0, long C1
+ >
+struct vector_c<
+ T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector2_c< T, T(C0), T(C1) >
+{
+ typedef typename vector2_c< T, T(C0), T(C1) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2
+ >
+struct vector_c<
+ T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector3_c< T, T(C0), T(C1), T(C2) >
+{
+ typedef typename vector3_c< T, T(C0), T(C1), T(C2) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector4_c< T, T(C0), T(C1), T(C2), T(C3) >
+{
+ typedef typename vector4_c< T, T(C0), T(C1), T(C2), T(C3) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) >
+{
+ typedef typename vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) >
+{
+ typedef typename vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) >
+{
+ typedef typename vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX
+ >
+ : vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) >
+{
+ typedef typename vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX
+ >
+ : vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) >
+{
+ typedef typename vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX
+ >
+ : vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) >
+{
+ typedef typename vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) >
+{
+ typedef typename vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector12_c< 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) >
+{
+ typedef typename vector12_c< 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) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector13_c< 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) >
+{
+ typedef typename vector13_c< 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) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector14_c< 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) >
+{
+ typedef typename vector14_c< 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) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector15_c< 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) >
+{
+ typedef typename vector15_c< 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) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector16_c< 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) >
+{
+ typedef typename vector16_c< 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) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector17_c< 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) >
+{
+ typedef typename vector17_c< 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) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, LONG_MAX, LONG_MAX
+ >
+ : vector18_c< 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) >
+{
+ typedef typename vector18_c< 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) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, C18, LONG_MAX
+ >
+ : vector19_c< 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) >
+{
+ typedef typename vector19_c< 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) >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+struct vector_c
+ : vector20_c< 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) >
+{
+ typedef typename vector20_c< 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) >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/plain/advance_backward.hpp b/boost/boost/mpl/aux_/preprocessed/plain/advance_backward.hpp
new file mode 100644
index 00000000000..26de94cea1a
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/plain/advance_backward.hpp
@@ -0,0 +1,97 @@
+
+// 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/aux_/advance_backward.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+template< long N > struct advance_backward;
+template<>
+struct advance_backward<0>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef iter0 type;
+ };
+};
+
+template<>
+struct advance_backward<1>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename prior<iter0>::type iter1;
+ typedef iter1 type;
+ };
+};
+
+template<>
+struct advance_backward<2>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename prior<iter0>::type iter1;
+ typedef typename prior<iter1>::type iter2;
+ typedef iter2 type;
+ };
+};
+
+template<>
+struct advance_backward<3>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename prior<iter0>::type iter1;
+ typedef typename prior<iter1>::type iter2;
+ typedef typename prior<iter2>::type iter3;
+ typedef iter3 type;
+ };
+};
+
+template<>
+struct advance_backward<4>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename prior<iter0>::type iter1;
+ typedef typename prior<iter1>::type iter2;
+ typedef typename prior<iter2>::type iter3;
+ typedef typename prior<iter3>::type iter4;
+ typedef iter4 type;
+ };
+};
+
+template< long N >
+struct advance_backward
+{
+ template< typename Iterator > struct apply
+ {
+ typedef typename apply_wrap1<
+ advance_backward<4>
+ , Iterator
+ >::type chunk_result_;
+
+ typedef typename apply_wrap1<
+ advance_backward<(
+ (N - 4) < 0
+ ? 0
+ : N - 4
+ )>
+ , chunk_result_
+ >::type type;
+ };
+};
+
+}}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/plain/advance_forward.hpp b/boost/boost/mpl/aux_/preprocessed/plain/advance_forward.hpp
new file mode 100644
index 00000000000..b137cc72af1
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/plain/advance_forward.hpp
@@ -0,0 +1,97 @@
+
+// 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/aux_/advance_forward.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+template< long N > struct advance_forward;
+template<>
+struct advance_forward<0>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef iter0 type;
+ };
+};
+
+template<>
+struct advance_forward<1>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename next<iter0>::type iter1;
+ typedef iter1 type;
+ };
+};
+
+template<>
+struct advance_forward<2>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename next<iter0>::type iter1;
+ typedef typename next<iter1>::type iter2;
+ typedef iter2 type;
+ };
+};
+
+template<>
+struct advance_forward<3>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename next<iter0>::type iter1;
+ typedef typename next<iter1>::type iter2;
+ typedef typename next<iter2>::type iter3;
+ typedef iter3 type;
+ };
+};
+
+template<>
+struct advance_forward<4>
+{
+ template< typename Iterator > struct apply
+ {
+ typedef Iterator iter0;
+ typedef typename next<iter0>::type iter1;
+ typedef typename next<iter1>::type iter2;
+ typedef typename next<iter2>::type iter3;
+ typedef typename next<iter3>::type iter4;
+ typedef iter4 type;
+ };
+};
+
+template< long N >
+struct advance_forward
+{
+ template< typename Iterator > struct apply
+ {
+ typedef typename apply_wrap1<
+ advance_forward<4>
+ , Iterator
+ >::type chunk_result_;
+
+ typedef typename apply_wrap1<
+ advance_forward<(
+ (N - 4) < 0
+ ? 0
+ : N - 4
+ )>
+ , chunk_result_
+ >::type type;
+ };
+};
+
+}}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/plain/and.hpp b/boost/boost/mpl/aux_/preprocessed/plain/and.hpp
new file mode 100644
index 00000000000..163913f81a3
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/plain/and.hpp
@@ -0,0 +1,64 @@
+
+// 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/and.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template< bool C_, typename T1, typename T2, typename T3, typename T4 >
+struct and_impl
+ : false_
+{
+};
+
+template< typename T1, typename T2, typename T3, typename T4 >
+struct and_impl< true,T1,T2,T3,T4 >
+ : and_impl<
+ BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+ , T2, T3, T4
+ , true_
+ >
+{
+};
+
+template<>
+struct and_impl<
+ true
+ , true_, true_, true_, true_
+ >
+ : true_
+{
+};
+
+} // namespace aux
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(T1)
+ , typename BOOST_MPL_AUX_NA_PARAM(T2)
+ , typename T3 = true_, typename T4 = true_, typename T5 = true_
+ >
+struct and_
+
+ : aux::and_impl<
+ BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+ , T2, T3, T4, T5
+ >
+
+{
+};
+
+BOOST_MPL_AUX_NA_SPEC2(
+ 2
+ , 5
+ , and_
+ )
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/plain/apply.hpp b/boost/boost/mpl/aux_/preprocessed/plain/apply.hpp
new file mode 100644
index 00000000000..89d9e4b4ea7
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/plain/apply.hpp
@@ -0,0 +1,139 @@
+
+// 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/apply.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename F
+ >
+struct apply0
+
+ : apply_wrap0<
+ typename lambda<F>::type
+
+ >
+{
+};
+
+template<
+ typename F
+ >
+struct apply< F,na,na,na,na,na >
+ : apply0<F>
+{
+};
+
+template<
+ typename F, typename T1
+ >
+struct apply1
+
+ : apply_wrap1<
+ typename lambda<F>::type
+ , T1
+ >
+{
+};
+
+template<
+ typename F, typename T1
+ >
+struct apply< F,T1,na,na,na,na >
+ : apply1< F,T1 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct apply2
+
+ : apply_wrap2<
+ typename lambda<F>::type
+ , T1, T2
+ >
+{
+};
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct apply< F,T1,T2,na,na,na >
+ : apply2< F,T1,T2 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct apply3
+
+ : apply_wrap3<
+ typename lambda<F>::type
+ , T1, T2, T3
+ >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct apply< F,T1,T2,T3,na,na >
+ : apply3< F,T1,T2,T3 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct apply4
+
+ : apply_wrap4<
+ typename lambda<F>::type
+ , T1, T2, T3, T4
+ >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct apply< F,T1,T2,T3,T4,na >
+ : apply4< F,T1,T2,T3,T4 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct apply5
+
+ : apply_wrap5<
+ typename lambda<F>::type
+ , T1, T2, T3, T4, T5
+ >
+{
+};
+
+/// primary template (not a specialization!)
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct apply
+ : apply5< F,T1,T2,T3,T4,T5 >
+{
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/plain/apply_fwd.hpp b/boost/boost/mpl/aux_/preprocessed/plain/apply_fwd.hpp
new file mode 100644
index 00000000000..b2ed5d51301
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/plain/apply_fwd.hpp
@@ -0,0 +1,52 @@
+
+// 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/apply_fwd.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename F, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na
+ >
+struct apply;
+
+template<
+ typename F
+ >
+struct apply0;
+
+template<
+ typename F, typename T1
+ >
+struct apply1;
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct apply2;
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct apply3;
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct apply4;
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct apply5;
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/plain/apply_wrap.hpp b/boost/boost/mpl/aux_/preprocessed/plain/apply_wrap.hpp
new file mode 100644
index 00000000000..34d51a1a587
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/plain/apply_wrap.hpp
@@ -0,0 +1,84 @@
+
+// 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/apply_wrap.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename F
+
+ , typename has_apply_ = typename aux::has_apply<F>::type
+
+ >
+struct apply_wrap0
+
+ : F::template apply< >
+{
+};
+
+template< typename F >
+struct apply_wrap0< F,true_ >
+ : F::apply
+{
+};
+
+template<
+ typename F, typename T1
+
+ >
+struct apply_wrap1
+
+ : F::template apply<T1>
+{
+};
+
+template<
+ typename F, typename T1, typename T2
+
+ >
+struct apply_wrap2
+
+ : F::template apply< T1,T2 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3
+
+ >
+struct apply_wrap3
+
+ : F::template apply< T1,T2,T3 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+
+ >
+struct apply_wrap4
+
+ : F::template apply< T1,T2,T3,T4 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+
+ >
+struct apply_wrap5
+
+ : F::template apply< T1,T2,T3,T4,T5 >
+{
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/plain/arg.hpp b/boost/boost/mpl/aux_/preprocessed/plain/arg.hpp
new file mode 100644
index 00000000000..6f2f8a80709
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/plain/arg.hpp
@@ -0,0 +1,123 @@
+
+// Copyright Peter Dimov 2001-2002
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/arg.hpp" header
+// -- DO NOT modify by hand!
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+template<> struct arg< -1 >
+{
+ BOOST_STATIC_CONSTANT(int, value = -1);
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ typedef U1 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+template<> struct arg<1>
+{
+ BOOST_STATIC_CONSTANT(int, value = 1);
+ typedef arg<2> next;
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ typedef U1 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+template<> struct arg<2>
+{
+ BOOST_STATIC_CONSTANT(int, value = 2);
+ typedef arg<3> next;
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ typedef U2 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+template<> struct arg<3>
+{
+ BOOST_STATIC_CONSTANT(int, value = 3);
+ typedef arg<4> next;
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ typedef U3 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+template<> struct arg<4>
+{
+ BOOST_STATIC_CONSTANT(int, value = 4);
+ typedef arg<5> next;
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ typedef U4 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+template<> struct arg<5>
+{
+ BOOST_STATIC_CONSTANT(int, value = 5);
+ typedef arg<6> next;
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+ BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ typedef U5 type;
+ BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+ };
+};
+
+BOOST_MPL_AUX_NONTYPE_ARITY_SPEC(1,int, arg)
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
diff --git a/boost/boost/mpl/aux_/preprocessed/plain/basic_bind.hpp b/boost/boost/mpl/aux_/preprocessed/plain/basic_bind.hpp
new file mode 100644
index 00000000000..b0702324aaf
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/plain/basic_bind.hpp
@@ -0,0 +1,440 @@
+
+// Copyright Peter Dimov 2001
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/aux_/basic_bind.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template<
+ typename T, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg
+{
+ typedef T type;
+};
+
+template<
+ int N, typename U1, typename U2, typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >
+{
+ typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg< bind< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 >
+{
+ typedef bind< F,T1,T2,T3,T4,T5 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+template<
+ typename F
+ >
+struct bind0
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+
+ public:
+ typedef typename apply_wrap0<
+ f_
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg<
+ bind0<F>, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind0<F> f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(1, bind0)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)
+
+template<
+ typename F
+ >
+struct bind< F,na,na,na,na,na >
+ : bind0<F>
+{
+};
+
+template<
+ typename F, typename T1
+ >
+struct bind1
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+
+ public:
+ typedef typename apply_wrap1<
+ f_
+ , typename t1::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename U1, typename U2, typename U3
+ , typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind1< F,T1 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind1< F,T1 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(2, bind1)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)
+
+template<
+ typename F, typename T1
+ >
+struct bind< F,T1,na,na,na,na >
+ : bind1< F,T1 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct bind2
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+ typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+
+ public:
+ typedef typename apply_wrap2<
+ f_
+ , typename t1::type, typename t2::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename U1, typename U2
+ , typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind2< F,T1,T2 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind2< F,T1,T2 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(3, bind2)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct bind< F,T1,T2,na,na,na >
+ : bind2< F,T1,T2 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct bind3
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+ typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+ typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+
+ public:
+ typedef typename apply_wrap3<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename U1
+ , typename U2, typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind3< F,T1,T2,T3 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(4, bind3)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct bind< F,T1,T2,T3,na,na >
+ : bind3< F,T1,T2,T3 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct bind4
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+ typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+ typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+ typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;
+
+ public:
+ typedef typename apply_wrap4<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ , typename t4::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename U1, typename U2, typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind4< F,T1,T2,T3,T4 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct bind< F,T1,T2,T3,T4,na >
+ : bind4< F,T1,T2,T3,T4 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct bind5
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+ typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+ typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+ typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;
+ typedef aux::resolve_bind_arg< T5,U1,U2,U3,U4,U5 > t5;
+
+ public:
+ typedef typename apply_wrap5<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ , typename t4::type, typename t5::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg<
+ bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind5< F,T1,T2,T3,T4,T5 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
+
+/// primary template (not a specialization!)
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct bind
+ : bind5< F,T1,T2,T3,T4,T5 >
+{
+};
+
+/// if_/eval_if specializations
+template< template< typename T1, typename T2, typename T3 > class F, typename Tag >
+struct quote3;
+
+template< typename T1, typename T2, typename T3 > struct if_;
+
+template<
+ typename Tag, typename T1, typename T2, typename T3
+ >
+struct bind3<
+ quote3< if_,Tag >
+ , T1, T2, T3
+ >
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef mpl::arg<1> n1;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+ typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+ typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+ typedef typename if_<
+ typename t1::type
+ , t2, t3
+ >::type f_;
+
+ public:
+ typedef typename f_::type type;
+ };
+};
+
+template<
+ template< typename T1, typename T2, typename T3 > class F, typename Tag
+ >
+struct quote3;
+
+template< typename T1, typename T2, typename T3 > struct eval_if;
+
+template<
+ typename Tag, typename T1, typename T2, typename T3
+ >
+struct bind3<
+ quote3< eval_if,Tag >
+ , T1, T2, T3
+ >
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef mpl::arg<1> n1;
+ typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+ typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+ typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+ typedef typename eval_if<
+ typename t1::type
+ , t2, t3
+ >::type f_;
+
+ public:
+ typedef typename f_::type type;
+ };
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/plain/bind.hpp b/boost/boost/mpl/aux_/preprocessed/plain/bind.hpp
new file mode 100644
index 00000000000..0e9513a649a
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/plain/bind.hpp
@@ -0,0 +1,561 @@
+
+// Copyright Peter Dimov 2001
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/bind.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template<
+ typename T, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg
+{
+ typedef T type;
+};
+
+template<
+ typename T
+ , typename Arg
+ >
+struct replace_unnamed_arg
+{
+ typedef Arg next;
+ typedef T type;
+};
+
+template<
+ typename Arg
+ >
+struct replace_unnamed_arg< arg< -1 >, Arg >
+{
+ typedef typename Arg::next next;
+ typedef Arg type;
+};
+
+template<
+ int N, typename U1, typename U2, typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >
+{
+ typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg< bind< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 >
+{
+ typedef bind< F,T1,T2,T3,T4,T5 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+template<
+ typename F
+ >
+struct bind0
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ public:
+ typedef typename apply_wrap0<
+ f_
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg<
+ bind0<F>, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind0<F> f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(1, bind0)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)
+
+template<
+ typename F
+ >
+struct bind< F,na,na,na,na,na >
+ : bind0<F>
+{
+};
+
+template<
+ typename F, typename T1
+ >
+struct bind1
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ public:
+ typedef typename apply_wrap1<
+ f_
+ , typename t1::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename U1, typename U2, typename U3
+ , typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind1< F,T1 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind1< F,T1 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(2, bind1)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)
+
+template<
+ typename F, typename T1
+ >
+struct bind< F,T1,na,na,na,na >
+ : bind1< F,T1 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct bind2
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ typedef aux::replace_unnamed_arg< T2,n2 > r2;
+ typedef typename r2::type a2;
+ typedef typename r2::next n3;
+ typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+ ///
+ public:
+ typedef typename apply_wrap2<
+ f_
+ , typename t1::type, typename t2::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename U1, typename U2
+ , typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind2< F,T1,T2 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind2< F,T1,T2 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(3, bind2)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct bind< F,T1,T2,na,na,na >
+ : bind2< F,T1,T2 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct bind3
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ typedef aux::replace_unnamed_arg< T2,n2 > r2;
+ typedef typename r2::type a2;
+ typedef typename r2::next n3;
+ typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+ ///
+ typedef aux::replace_unnamed_arg< T3,n3 > r3;
+ typedef typename r3::type a3;
+ typedef typename r3::next n4;
+ typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+ ///
+ public:
+ typedef typename apply_wrap3<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename U1
+ , typename U2, typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind3< F,T1,T2,T3 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(4, bind3)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct bind< F,T1,T2,T3,na,na >
+ : bind3< F,T1,T2,T3 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct bind4
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ typedef aux::replace_unnamed_arg< T2,n2 > r2;
+ typedef typename r2::type a2;
+ typedef typename r2::next n3;
+ typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+ ///
+ typedef aux::replace_unnamed_arg< T3,n3 > r3;
+ typedef typename r3::type a3;
+ typedef typename r3::next n4;
+ typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+ ///
+ typedef aux::replace_unnamed_arg< T4,n4 > r4;
+ typedef typename r4::type a4;
+ typedef typename r4::next n5;
+ typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
+ ///
+ public:
+ typedef typename apply_wrap4<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ , typename t4::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename U1, typename U2, typename U3, typename U4, typename U5
+ >
+struct resolve_bind_arg<
+ bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind4< F,T1,T2,T3,T4 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct bind< F,T1,T2,T3,T4,na >
+ : bind4< F,T1,T2,T3,T4 >
+{
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct bind5
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+ ///
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ typedef aux::replace_unnamed_arg< T2,n2 > r2;
+ typedef typename r2::type a2;
+ typedef typename r2::next n3;
+ typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+ ///
+ typedef aux::replace_unnamed_arg< T3,n3 > r3;
+ typedef typename r3::type a3;
+ typedef typename r3::next n4;
+ typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+ ///
+ typedef aux::replace_unnamed_arg< T4,n4 > r4;
+ typedef typename r4::type a4;
+ typedef typename r4::next n5;
+ typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
+ ///
+ typedef aux::replace_unnamed_arg< T5,n5 > r5;
+ typedef typename r5::type a5;
+ typedef typename r5::next n6;
+ typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5;
+ ///
+ public:
+ typedef typename apply_wrap5<
+ f_
+ , typename t1::type, typename t2::type, typename t3::type
+ , typename t4::type, typename t5::type
+ >::type type;
+
+ };
+};
+
+namespace aux {
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+struct resolve_bind_arg<
+ bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5
+ >
+{
+ typedef bind5< F,T1,T2,T3,T4,T5 > f_;
+ typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
+
+/// primary template (not a specialization!)
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct bind
+ : bind5< F,T1,T2,T3,T4,T5 >
+{
+};
+
+/// if_/eval_if specializations
+template< template< typename T1, typename T2, typename T3 > class F, typename Tag >
+struct quote3;
+
+template< typename T1, typename T2, typename T3 > struct if_;
+
+template<
+ typename Tag, typename T1, typename T2, typename T3
+ >
+struct bind3<
+ quote3< if_,Tag >
+ , T1, T2, T3
+ >
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef mpl::arg<1> n1;
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ typedef aux::replace_unnamed_arg< T2,n2 > r2;
+ typedef typename r2::type a2;
+ typedef typename r2::next n3;
+ typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+ ///
+ typedef aux::replace_unnamed_arg< T3,n3 > r3;
+ typedef typename r3::type a3;
+ typedef typename r3::next n4;
+ typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+ ///
+ typedef typename if_<
+ typename t1::type
+ , t2, t3
+ >::type f_;
+
+ public:
+ typedef typename f_::type type;
+ };
+};
+
+template<
+ template< typename T1, typename T2, typename T3 > class F, typename Tag
+ >
+struct quote3;
+
+template< typename T1, typename T2, typename T3 > struct eval_if;
+
+template<
+ typename Tag, typename T1, typename T2, typename T3
+ >
+struct bind3<
+ quote3< eval_if,Tag >
+ , T1, T2, T3
+ >
+{
+ template<
+ typename U1 = na, typename U2 = na, typename U3 = na
+ , typename U4 = na, typename U5 = na
+ >
+ struct apply
+ {
+ private:
+ typedef mpl::arg<1> n1;
+ typedef aux::replace_unnamed_arg< T1,n1 > r1;
+ typedef typename r1::type a1;
+ typedef typename r1::next n2;
+ typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+ ///
+ typedef aux::replace_unnamed_arg< T2,n2 > r2;
+ typedef typename r2::type a2;
+ typedef typename r2::next n3;
+ typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+ ///
+ typedef aux::replace_unnamed_arg< T3,n3 > r3;
+ typedef typename r3::type a3;
+ typedef typename r3::next n4;
+ typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+ ///
+ typedef typename eval_if<
+ typename t1::type
+ , t2, t3
+ >::type f_;
+
+ public:
+ typedef typename f_::type type;
+ };
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/plain/bind_fwd.hpp b/boost/boost/mpl/aux_/preprocessed/plain/bind_fwd.hpp
new file mode 100644
index 00000000000..c4a5060ff8b
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/plain/bind_fwd.hpp
@@ -0,0 +1,52 @@
+
+// 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/bind_fwd.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename F, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na
+ >
+struct bind;
+
+template<
+ typename F
+ >
+struct bind0;
+
+template<
+ typename F, typename T1
+ >
+struct bind1;
+
+template<
+ typename F, typename T1, typename T2
+ >
+struct bind2;
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ >
+struct bind3;
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ >
+struct bind4;
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct bind5;
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/plain/bitand.hpp b/boost/boost/mpl/aux_/preprocessed/plain/bitand.hpp
new file mode 100644
index 00000000000..ee40fb3d3f7
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/plain/bitand.hpp
@@ -0,0 +1,142 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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)
+//
+
+// Preprocessed version of "boost/mpl/bitand.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct bitand_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< bitand_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< bitand_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitand_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct bitand_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct bitand_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct bitand_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct bitand_
+ : bitand_< bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>, N5>
+{
+};
+
+template<
+ typename N1, typename N2, typename N3, typename N4
+ >
+struct bitand_< N1,N2,N3,N4,na >
+
+ : bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitand_
+ , ( N1, N2, N3, N4, na )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3
+ >
+struct bitand_< N1,N2,N3,na,na >
+
+ : bitand_< bitand_< N1,N2 >, N3>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitand_
+ , ( N1, N2, N3, na, na )
+ )
+};
+
+template<
+ typename N1, typename N2
+ >
+struct bitand_< N1,N2,na,na,na >
+ : bitand_impl<
+ typename bitand_tag<N1>::type
+ , typename bitand_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitand_
+ , ( N1, N2, na, na, na )
+ )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitand_)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct bitand_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ & BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/plain/bitor.hpp b/boost/boost/mpl/aux_/preprocessed/plain/bitor.hpp
new file mode 100644
index 00000000000..1e28d3b07eb
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/plain/bitor.hpp
@@ -0,0 +1,142 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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)
+//
+
+// Preprocessed version of "boost/mpl/bitor.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct bitor_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< bitor_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< bitor_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitor_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct bitor_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct bitor_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct bitor_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct bitor_
+ : bitor_< bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>, N5>
+{
+};
+
+template<
+ typename N1, typename N2, typename N3, typename N4
+ >
+struct bitor_< N1,N2,N3,N4,na >
+
+ : bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitor_
+ , ( N1, N2, N3, N4, na )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3
+ >
+struct bitor_< N1,N2,N3,na,na >
+
+ : bitor_< bitor_< N1,N2 >, N3>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitor_
+ , ( N1, N2, N3, na, na )
+ )
+};
+
+template<
+ typename N1, typename N2
+ >
+struct bitor_< N1,N2,na,na,na >
+ : bitor_impl<
+ typename bitor_tag<N1>::type
+ , typename bitor_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitor_
+ , ( N1, N2, na, na, na )
+ )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitor_)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct bitor_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ | BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/plain/bitxor.hpp b/boost/boost/mpl/aux_/preprocessed/plain/bitxor.hpp
new file mode 100644
index 00000000000..2ba879d67b1
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/plain/bitxor.hpp
@@ -0,0 +1,142 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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)
+//
+
+// Preprocessed version of "boost/mpl/bitxor.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct bitxor_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< bitxor_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< bitxor_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitxor_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct bitxor_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct bitxor_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct bitxor_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct bitxor_
+ : bitxor_< bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4>, N5>
+{
+};
+
+template<
+ typename N1, typename N2, typename N3, typename N4
+ >
+struct bitxor_< N1,N2,N3,N4,na >
+
+ : bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitxor_
+ , ( N1, N2, N3, N4, na )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3
+ >
+struct bitxor_< N1,N2,N3,na,na >
+
+ : bitxor_< bitxor_< N1,N2 >, N3>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitxor_
+ , ( N1, N2, N3, na, na )
+ )
+};
+
+template<
+ typename N1, typename N2
+ >
+struct bitxor_< N1,N2,na,na,na >
+ : bitxor_impl<
+ typename bitxor_tag<N1>::type
+ , typename bitxor_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , bitxor_
+ , ( N1, N2, na, na, na )
+ )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitxor_)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct bitxor_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ ^ BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/plain/deque.hpp b/boost/boost/mpl/aux_/preprocessed/plain/deque.hpp
new file mode 100644
index 00000000000..de67398a37c
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/plain/deque.hpp
@@ -0,0 +1,323 @@
+
+// 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/deque.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+ , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+ , typename T12 = na, typename T13 = na, typename T14 = na
+ , typename T15 = na, typename T16 = na, typename T17 = na
+ , typename T18 = na, typename T19 = na
+ >
+struct deque;
+
+template<
+
+ >
+struct deque<
+ na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector0< >
+{
+ typedef vector0< >::type type;
+};
+
+template<
+ typename T0
+ >
+struct deque<
+ T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector1<T0>
+{
+ typedef typename vector1<T0>::type type;
+};
+
+template<
+ typename T0, typename T1
+ >
+struct deque<
+ T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector2< T0,T1 >
+{
+ typedef typename vector2< T0,T1 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2
+ >
+struct deque<
+ T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector3< T0,T1,T2 >
+{
+ typedef typename vector3< T0,T1,T2 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3
+ >
+struct deque<
+ T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector4< T0,T1,T2,T3 >
+{
+ typedef typename vector4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ >
+struct deque<
+ T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector5< T0,T1,T2,T3,T4 >
+{
+ typedef typename vector5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct deque<
+ T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector6< T0,T1,T2,T3,T4,T5 >
+{
+ typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6
+ >
+struct deque<
+ T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector7< T0,T1,T2,T3,T4,T5,T6 >
+{
+ typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7
+ >
+struct deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+ typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8
+ >
+struct deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+ typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ >
+struct deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+ typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ , typename T10
+ >
+struct deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+ typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+ , na, na, na, na
+ >
+ : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+ typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+ , na, na, na, na
+ >
+ : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+ typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+ , na, na, na, na
+ >
+ : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+ typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+ , na, na, na, na
+ >
+ : vector15<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ >
+{
+ typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, na, na, na, na
+ >
+ : vector16<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15
+ >
+{
+ typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, na, na, na
+ >
+ : vector17<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16
+ >
+{
+ typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, na, na
+ >
+ : vector18<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17
+ >
+{
+ typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type 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 deque<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, na
+ >
+ : vector19<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18
+ >
+{
+ typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+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 deque
+ : vector20<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, T19
+ >
+{
+ typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/plain/divides.hpp b/boost/boost/mpl/aux_/preprocessed/plain/divides.hpp
new file mode 100644
index 00000000000..f365d62dfaf
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/plain/divides.hpp
@@ -0,0 +1,141 @@
+
+// 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/divides.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct divides_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< divides_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< divides_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct divides_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct divides_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct divides_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct divides_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct divides
+ : divides< divides< divides< divides< N1,N2 >, N3>, N4>, N5>
+{
+};
+
+template<
+ typename N1, typename N2, typename N3, typename N4
+ >
+struct divides< N1,N2,N3,N4,na >
+
+ : divides< divides< divides< N1,N2 >, N3>, N4>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , divides
+ , ( N1, N2, N3, N4, na )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3
+ >
+struct divides< N1,N2,N3,na,na >
+
+ : divides< divides< N1,N2 >, N3>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , divides
+ , ( N1, N2, N3, na, na )
+ )
+};
+
+template<
+ typename N1, typename N2
+ >
+struct divides< N1,N2,na,na,na >
+ : divides_impl<
+ typename divides_tag<N1>::type
+ , typename divides_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , divides
+ , ( N1, N2, na, na, na )
+ )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, divides)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct divides_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ / BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/plain/equal_to.hpp b/boost/boost/mpl/aux_/preprocessed/plain/equal_to.hpp
new file mode 100644
index 00000000000..bbc6bf0dc1d
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/plain/equal_to.hpp
@@ -0,0 +1,92 @@
+
+// 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/equal_to.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct equal_to_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct equal_to_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct equal_to_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct equal_to_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct equal_to_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct equal_to
+
+ : equal_to_impl<
+ typename equal_to_tag<N1>::type
+ , typename equal_to_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, equal_to)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct equal_to_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value == BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/plain/fold_impl.hpp b/boost/boost/mpl/aux_/preprocessed/plain/fold_impl.hpp
new file mode 100644
index 00000000000..9e7a29300d6
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/plain/fold_impl.hpp
@@ -0,0 +1,180 @@
+
+// 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/aux_/fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+ int N
+ , typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl;
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl< 0,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef state0 state;
+ typedef iter0 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl< 1,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+
+
+ typedef state1 state;
+ typedef iter1 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl< 2,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+
+
+ typedef state2 state;
+ typedef iter2 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl< 3,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;
+ typedef typename mpl::next<iter2>::type iter3;
+
+
+ typedef state3 state;
+ typedef iter3 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl< 4,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp, state3, typename deref<iter3>::type >::type state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef state4 state;
+ typedef iter4 iterator;
+};
+
+template<
+ int N
+ , typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl
+{
+ typedef fold_impl<
+ 4
+ , First
+ , Last
+ , State
+ , ForwardOp
+ > chunk_;
+
+ typedef fold_impl<
+ ( (N - 4) < 0 ? 0 : N - 4 )
+ , typename chunk_::iterator
+ , Last
+ , typename chunk_::state
+ , ForwardOp
+ > res_;
+
+ typedef typename res_::state state;
+ typedef typename res_::iterator iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl< -1,First,Last,State,ForwardOp >
+ : fold_impl<
+ -1
+ , typename mpl::next<First>::type
+ , Last
+ , typename apply2<ForwardOp,State, typename deref<First>::type>::type
+ , ForwardOp
+ >
+{
+};
+
+template<
+ typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct fold_impl< -1,Last,Last,State,ForwardOp >
+{
+ typedef State state;
+ typedef Last iterator;
+};
+
+}}}
diff --git a/boost/boost/mpl/aux_/preprocessed/plain/full_lambda.hpp b/boost/boost/mpl/aux_/preprocessed/plain/full_lambda.hpp
new file mode 100644
index 00000000000..bf818731eba
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/plain/full_lambda.hpp
@@ -0,0 +1,554 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/aux_/full_lambda.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template<
+ bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false
+ , bool C5 = false
+ >
+struct lambda_or
+ : true_
+{
+};
+
+template<>
+struct lambda_or< false,false,false,false,false >
+ : false_
+{
+};
+
+} // namespace aux
+
+template<
+ typename T
+ , typename Tag
+
+ >
+struct lambda
+{
+ typedef false_ is_le;
+ typedef T result_;
+ typedef T type;
+};
+
+template<
+ typename T
+ >
+struct is_lambda_expression
+ : lambda<T>::is_le
+{
+};
+
+template< int N, typename Tag >
+struct lambda< arg<N>, Tag >
+{
+ typedef true_ is_le;
+ typedef mpl::arg<N> result_; // qualified for the sake of MIPSpro 7.41
+ typedef mpl::protect<result_> type;
+};
+
+template<
+ typename F
+ , typename Tag
+ >
+struct lambda<
+ bind0<F>
+ , Tag
+
+ >
+{
+ typedef false_ is_le;
+ typedef bind0<
+ F
+ > result_;
+
+ typedef result_ type;
+};
+
+namespace aux {
+
+template<
+ typename IsLE, typename Tag
+ , template< typename P1 > class F
+ , typename L1
+ >
+struct le_result1
+{
+ typedef F<
+ typename L1::type
+ > result_;
+
+ typedef result_ type;
+};
+
+template<
+ typename Tag
+ , template< typename P1 > class F
+ , typename L1
+ >
+struct le_result1< true_,Tag,F,L1 >
+{
+ typedef bind1<
+ quote1< F,Tag >
+ , typename L1::result_
+ > result_;
+
+ typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+ template< typename P1 > class F
+ , typename T1
+ , typename Tag
+ >
+struct lambda<
+ F<T1>
+ , Tag
+
+ >
+{
+ typedef lambda< T1,Tag > l1;
+ typedef typename l1::is_le is_le1;
+ typedef typename aux::lambda_or<
+ is_le1::value
+ >::type is_le;
+
+ typedef aux::le_result1<
+ is_le, Tag, F, l1
+ > le_result_;
+
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+template<
+ typename F, typename T1
+ , typename Tag
+ >
+struct lambda<
+ bind1< F,T1 >
+ , Tag
+
+ >
+{
+ typedef false_ is_le;
+ typedef bind1<
+ F
+ , T1
+ > result_;
+
+ typedef result_ type;
+};
+
+namespace aux {
+
+template<
+ typename IsLE, typename Tag
+ , template< typename P1, typename P2 > class F
+ , typename L1, typename L2
+ >
+struct le_result2
+{
+ typedef F<
+ typename L1::type, typename L2::type
+ > result_;
+
+ typedef result_ type;
+};
+
+template<
+ typename Tag
+ , template< typename P1, typename P2 > class F
+ , typename L1, typename L2
+ >
+struct le_result2< true_,Tag,F,L1,L2 >
+{
+ typedef bind2<
+ quote2< F,Tag >
+ , typename L1::result_, typename L2::result_
+ > result_;
+
+ typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+ template< typename P1, typename P2 > class F
+ , typename T1, typename T2
+ , typename Tag
+ >
+struct lambda<
+ F< T1,T2 >
+ , Tag
+
+ >
+{
+ typedef lambda< T1,Tag > l1;
+ typedef lambda< T2,Tag > l2;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+
+
+ typedef typename aux::lambda_or<
+ is_le1::value, is_le2::value
+ >::type is_le;
+
+ typedef aux::le_result2<
+ is_le, Tag, F, l1, l2
+ > le_result_;
+
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+template<
+ typename F, typename T1, typename T2
+ , typename Tag
+ >
+struct lambda<
+ bind2< F,T1,T2 >
+ , Tag
+
+ >
+{
+ typedef false_ is_le;
+ typedef bind2<
+ F
+ , T1, T2
+ > result_;
+
+ typedef result_ type;
+};
+
+namespace aux {
+
+template<
+ typename IsLE, typename Tag
+ , template< typename P1, typename P2, typename P3 > class F
+ , typename L1, typename L2, typename L3
+ >
+struct le_result3
+{
+ typedef F<
+ typename L1::type, typename L2::type, typename L3::type
+ > result_;
+
+ typedef result_ type;
+};
+
+template<
+ typename Tag
+ , template< typename P1, typename P2, typename P3 > class F
+ , typename L1, typename L2, typename L3
+ >
+struct le_result3< true_,Tag,F,L1,L2,L3 >
+{
+ typedef bind3<
+ quote3< F,Tag >
+ , typename L1::result_, typename L2::result_, typename L3::result_
+ > result_;
+
+ typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+ template< typename P1, typename P2, typename P3 > class F
+ , typename T1, typename T2, typename T3
+ , typename Tag
+ >
+struct lambda<
+ F< T1,T2,T3 >
+ , Tag
+
+ >
+{
+ typedef lambda< T1,Tag > l1;
+ typedef lambda< T2,Tag > l2;
+ typedef lambda< T3,Tag > l3;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+
+
+ typedef typename aux::lambda_or<
+ is_le1::value, is_le2::value, is_le3::value
+ >::type is_le;
+
+ typedef aux::le_result3<
+ is_le, Tag, F, l1, l2, l3
+ > le_result_;
+
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3
+ , typename Tag
+ >
+struct lambda<
+ bind3< F,T1,T2,T3 >
+ , Tag
+
+ >
+{
+ typedef false_ is_le;
+ typedef bind3<
+ F
+ , T1, T2, T3
+ > result_;
+
+ typedef result_ type;
+};
+
+namespace aux {
+
+template<
+ typename IsLE, typename Tag
+ , template< typename P1, typename P2, typename P3, typename P4 > class F
+ , typename L1, typename L2, typename L3, typename L4
+ >
+struct le_result4
+{
+ typedef F<
+ typename L1::type, typename L2::type, typename L3::type
+ , typename L4::type
+ > result_;
+
+ typedef result_ type;
+};
+
+template<
+ typename Tag
+ , template< typename P1, typename P2, typename P3, typename P4 > class F
+ , typename L1, typename L2, typename L3, typename L4
+ >
+struct le_result4< true_,Tag,F,L1,L2,L3,L4 >
+{
+ typedef bind4<
+ quote4< F,Tag >
+ , typename L1::result_, typename L2::result_, typename L3::result_
+ , typename L4::result_
+ > result_;
+
+ typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+ template< typename P1, typename P2, typename P3, typename P4 > class F
+ , typename T1, typename T2, typename T3, typename T4
+ , typename Tag
+ >
+struct lambda<
+ F< T1,T2,T3,T4 >
+ , Tag
+
+ >
+{
+ typedef lambda< T1,Tag > l1;
+ typedef lambda< T2,Tag > l2;
+ typedef lambda< T3,Tag > l3;
+ typedef lambda< T4,Tag > l4;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+ typedef typename l4::is_le is_le4;
+
+
+ typedef typename aux::lambda_or<
+ is_le1::value, is_le2::value, is_le3::value, is_le4::value
+ >::type is_le;
+
+ typedef aux::le_result4<
+ is_le, Tag, F, l1, l2, l3, l4
+ > le_result_;
+
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename Tag
+ >
+struct lambda<
+ bind4< F,T1,T2,T3,T4 >
+ , Tag
+
+ >
+{
+ typedef false_ is_le;
+ typedef bind4<
+ F
+ , T1, T2, T3, T4
+ > result_;
+
+ typedef result_ type;
+};
+
+namespace aux {
+
+template<
+ typename IsLE, typename Tag
+ , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F
+ , typename L1, typename L2, typename L3, typename L4, typename L5
+ >
+struct le_result5
+{
+ typedef F<
+ typename L1::type, typename L2::type, typename L3::type
+ , typename L4::type, typename L5::type
+ > result_;
+
+ typedef result_ type;
+};
+
+template<
+ typename Tag
+ , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F
+ , typename L1, typename L2, typename L3, typename L4, typename L5
+ >
+struct le_result5< true_,Tag,F,L1,L2,L3,L4,L5 >
+{
+ typedef bind5<
+ quote5< F,Tag >
+ , typename L1::result_, typename L2::result_, typename L3::result_
+ , typename L4::result_, typename L5::result_
+ > result_;
+
+ typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+ template<
+ typename P1, typename P2, typename P3, typename P4
+ , typename P5
+ >
+ class F
+ , typename T1, typename T2, typename T3, typename T4, typename T5
+ , typename Tag
+ >
+struct lambda<
+ F< T1,T2,T3,T4,T5 >
+ , Tag
+
+ >
+{
+ typedef lambda< T1,Tag > l1;
+ typedef lambda< T2,Tag > l2;
+ typedef lambda< T3,Tag > l3;
+ typedef lambda< T4,Tag > l4;
+ typedef lambda< T5,Tag > l5;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+ typedef typename l4::is_le is_le4;
+ typedef typename l5::is_le is_le5;
+
+
+ typedef typename aux::lambda_or<
+ is_le1::value, is_le2::value, is_le3::value, is_le4::value
+ , is_le5::value
+ >::type is_le;
+
+ typedef aux::le_result5<
+ is_le, Tag, F, l1, l2, l3, l4, l5
+ > le_result_;
+
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ , typename Tag
+ >
+struct lambda<
+ bind5< F,T1,T2,T3,T4,T5 >
+ , Tag
+
+ >
+{
+ typedef false_ is_le;
+ typedef bind5<
+ F
+ , T1, T2, T3, T4, T5
+ > result_;
+
+ typedef result_ type;
+};
+
+/// special case for 'protect'
+template< typename T, typename Tag >
+struct lambda< mpl::protect<T>, Tag >
+{
+ typedef false_ is_le;
+ typedef mpl::protect<T> result_;
+ typedef result_ type;
+};
+
+/// specializations for the main 'bind' form
+
+template<
+ typename F, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ , typename Tag
+ >
+struct lambda<
+ bind< F,T1,T2,T3,T4,T5 >
+ , Tag
+
+ >
+{
+ typedef false_ is_le;
+ typedef bind< F,T1,T2,T3,T4,T5 > result_;
+ typedef result_ type;
+};
+
+/// workaround for MWCW 8.3+/EDG < 303, leads to ambiguity on Digital Mars
+
+template<
+ typename F, typename Tag1, typename Tag2
+ >
+struct lambda<
+ lambda< F,Tag1 >
+ , Tag2
+ >
+{
+ typedef lambda< F,Tag2 > l1;
+ typedef lambda< Tag1,Tag2 > l2;
+ typedef typename l1::is_le is_le;
+ typedef aux::le_result2<is_le, Tag2, mpl::lambda, l1, l2> le_result_;
+ typedef typename le_result_::result_ result_;
+ typedef typename le_result_::type type;
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, lambda)
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/plain/greater.hpp b/boost/boost/mpl/aux_/preprocessed/plain/greater.hpp
new file mode 100644
index 00000000000..38c8bb3add4
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/plain/greater.hpp
@@ -0,0 +1,92 @@
+
+// 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/greater.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct greater_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< greater_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< greater_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct greater_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct greater_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct greater_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct greater_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct greater
+
+ : greater_impl<
+ typename greater_tag<N1>::type
+ , typename greater_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, greater)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct greater_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value > BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/plain/greater_equal.hpp b/boost/boost/mpl/aux_/preprocessed/plain/greater_equal.hpp
new file mode 100644
index 00000000000..2aa8370f0ff
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/plain/greater_equal.hpp
@@ -0,0 +1,92 @@
+
+// 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/greater_equal.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct greater_equal_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< greater_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< greater_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct greater_equal_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct greater_equal_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct greater_equal_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct greater_equal_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct greater_equal
+
+ : greater_equal_impl<
+ typename greater_equal_tag<N1>::type
+ , typename greater_equal_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, greater_equal)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct greater_equal_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value >= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/plain/inherit.hpp b/boost/boost/mpl/aux_/preprocessed/plain/inherit.hpp
new file mode 100644
index 00000000000..8b34e718c34
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/plain/inherit.hpp
@@ -0,0 +1,125 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/inherit.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(T1)
+ , typename BOOST_MPL_AUX_NA_PARAM(T2)
+ >
+struct inherit2
+ : T1, T2
+{
+ typedef inherit2 type;
+};
+
+template< typename T1 >
+struct inherit2< T1,empty_base >
+{
+ typedef T1 type;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (T1, empty_base))
+};
+
+template< typename T2 >
+struct inherit2< empty_base,T2 >
+{
+ typedef T2 type;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, T2))
+};
+
+template<>
+struct inherit2< empty_base,empty_base >
+{
+ typedef empty_base type;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, empty_base))
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, inherit2)
+
+template<
+ typename T1 = na, typename T2 = na, typename T3 = na
+ >
+struct inherit3
+ : inherit2<
+ typename inherit2<
+ T1, T2
+ >::type
+ , T3
+ >
+{
+};
+
+BOOST_MPL_AUX_NA_SPEC(3, inherit3)
+
+template<
+ typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na
+ >
+struct inherit4
+ : inherit2<
+ typename inherit3<
+ T1, T2, T3
+ >::type
+ , T4
+ >
+{
+};
+
+BOOST_MPL_AUX_NA_SPEC(4, inherit4)
+
+template<
+ typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na
+ , typename T5 = na
+ >
+struct inherit5
+ : inherit2<
+ typename inherit4<
+ T1, T2, T3, T4
+ >::type
+ , T5
+ >
+{
+};
+
+BOOST_MPL_AUX_NA_SPEC(5, inherit5)
+
+/// primary template
+
+template<
+ typename T1 = empty_base, typename T2 = empty_base
+ , typename T3 = empty_base, typename T4 = empty_base
+ , typename T5 = empty_base
+ >
+struct inherit
+ : inherit5< T1,T2,T3,T4,T5 >
+{
+};
+
+template<>
+struct inherit< na,na,na,na,na >
+{
+ template<
+
+ typename T1 = empty_base, typename T2 = empty_base
+ , typename T3 = empty_base, typename T4 = empty_base
+ , typename T5 = empty_base
+
+ >
+ struct apply
+ : inherit< T1,T2,T3,T4,T5 >
+ {
+ };
+};
+
+BOOST_MPL_AUX_NA_SPEC_LAMBDA(5, inherit)
+BOOST_MPL_AUX_NA_SPEC_ARITY(5, inherit)
+BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(5, 5, inherit)
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/plain/iter_fold_if_impl.hpp b/boost/boost/mpl/aux_/preprocessed/plain/iter_fold_if_impl.hpp
new file mode 100644
index 00000000000..695179584d3
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/plain/iter_fold_if_impl.hpp
@@ -0,0 +1,133 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/aux_/iter_fold_if_impl.hpp" header
+// -- DO NOT modify by hand!
+
+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;
+ };
+};
+
+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;
+};
+
+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;
+ typedef iter_fold_if_forward_step< typename forward_step0::iterator, typename forward_step0::state, ForwardOp, ForwardPredicate > forward_step1;
+ typedef iter_fold_if_forward_step< typename forward_step1::iterator, typename forward_step1::state, ForwardOp, ForwardPredicate > forward_step2;
+ typedef iter_fold_if_forward_step< typename forward_step2::iterator, typename forward_step2::state, ForwardOp, ForwardPredicate > forward_step3;
+ typedef iter_fold_if_forward_step< typename forward_step3::iterator, typename forward_step3::state, ForwardOp, ForwardPredicate > forward_step4;
+
+
+ typedef typename if_<
+ typename forward_step4::not_last
+ , iter_fold_if_impl<
+ typename forward_step4::iterator
+ , typename forward_step4::state
+ , ForwardOp
+ , ForwardPredicate
+ , BackwardOp
+ , BackwardPredicate
+ >
+ , iter_fold_if_null_step<
+ typename forward_step4::iterator
+ , typename forward_step4::state
+ >
+ >::type backward_step4;
+
+ typedef iter_fold_if_backward_step< typename forward_step3::iterator, typename backward_step4::state, BackwardOp, BackwardPredicate > backward_step3;
+ typedef iter_fold_if_backward_step< typename forward_step2::iterator, typename backward_step3::state, BackwardOp, BackwardPredicate > backward_step2;
+ typedef iter_fold_if_backward_step< typename forward_step1::iterator, typename backward_step2::state, BackwardOp, BackwardPredicate > backward_step1;
+ typedef iter_fold_if_backward_step< typename forward_step0::iterator, typename backward_step1::state, BackwardOp, BackwardPredicate > backward_step0;
+
+
+ public:
+ typedef typename backward_step0::state state;
+ typedef typename backward_step4::iterator iterator;
+};
+
+}}}
diff --git a/boost/boost/mpl/aux_/preprocessed/plain/iter_fold_impl.hpp b/boost/boost/mpl/aux_/preprocessed/plain/iter_fold_impl.hpp
new file mode 100644
index 00000000000..805790e86d6
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/plain/iter_fold_impl.hpp
@@ -0,0 +1,180 @@
+
+// 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/aux_/iter_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+ int N
+ , typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl;
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl< 0,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef state0 state;
+ typedef iter0 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl< 1,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+
+
+ typedef state1 state;
+ typedef iter1 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl< 2,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+
+
+ typedef state2 state;
+ typedef iter2 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl< 3,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp,state2,iter2 >::type state3;
+ typedef typename mpl::next<iter2>::type iter3;
+
+
+ typedef state3 state;
+ typedef iter3 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl< 4,First,Last,State,ForwardOp >
+{
+ typedef First iter0;
+ typedef State state0;
+ typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp,state2,iter2 >::type state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp,state3,iter3 >::type state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef state4 state;
+ typedef iter4 iterator;
+};
+
+template<
+ int N
+ , typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl
+{
+ typedef iter_fold_impl<
+ 4
+ , First
+ , Last
+ , State
+ , ForwardOp
+ > chunk_;
+
+ typedef iter_fold_impl<
+ ( (N - 4) < 0 ? 0 : N - 4 )
+ , typename chunk_::iterator
+ , Last
+ , typename chunk_::state
+ , ForwardOp
+ > res_;
+
+ typedef typename res_::state state;
+ typedef typename res_::iterator iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl< -1,First,Last,State,ForwardOp >
+ : iter_fold_impl<
+ -1
+ , typename mpl::next<First>::type
+ , Last
+ , typename apply2< ForwardOp,State,First >::type
+ , ForwardOp
+ >
+{
+};
+
+template<
+ typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct iter_fold_impl< -1,Last,Last,State,ForwardOp >
+{
+ typedef State state;
+ typedef Last iterator;
+};
+
+}}}
diff --git a/boost/boost/mpl/aux_/preprocessed/plain/lambda_no_ctps.hpp b/boost/boost/mpl/aux_/preprocessed/plain/lambda_no_ctps.hpp
new file mode 100644
index 00000000000..f8f109c2bda
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/plain/lambda_no_ctps.hpp
@@ -0,0 +1,228 @@
+
+// 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/aux_/lambda_no_ctps.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template<
+ bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false
+ , bool C5 = false
+ >
+struct lambda_or
+ : true_
+{
+};
+
+template<>
+struct lambda_or< false,false,false,false,false >
+ : false_
+{
+};
+
+template< typename Arity > struct lambda_impl
+{
+ template< typename T, typename Tag, typename Protect > struct result_
+ {
+ typedef T type;
+ typedef is_placeholder<T> is_le;
+ };
+};
+
+template<> struct lambda_impl< int_<1> >
+{
+ template< typename F, typename Tag, typename Protect > struct result_
+ {
+ typedef lambda< typename F::arg1, Tag, false_ > l1;
+ typedef typename l1::is_le is_le1;
+ typedef aux::lambda_or<
+ BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value
+ > is_le;
+
+ typedef bind1<
+ typename F::rebind
+ , typename l1::type
+ > bind_;
+
+ typedef typename if_<
+ is_le
+ , if_< Protect, mpl::protect<bind_>, bind_ >
+ , identity<F>
+ >::type type_;
+
+ typedef typename type_::type type;
+ };
+};
+
+template<> struct lambda_impl< int_<2> >
+{
+ template< typename F, typename Tag, typename Protect > struct result_
+ {
+ typedef lambda< typename F::arg1, Tag, false_ > l1;
+ typedef lambda< typename F::arg2, Tag, false_ > l2;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+
+
+ typedef aux::lambda_or<
+ BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value
+ > is_le;
+
+ typedef bind2<
+ typename F::rebind
+ , typename l1::type, typename l2::type
+ > bind_;
+
+ typedef typename if_<
+ is_le
+ , if_< Protect, mpl::protect<bind_>, bind_ >
+ , identity<F>
+ >::type type_;
+
+ typedef typename type_::type type;
+ };
+};
+
+template<> struct lambda_impl< int_<3> >
+{
+ template< typename F, typename Tag, typename Protect > struct result_
+ {
+ typedef lambda< typename F::arg1, Tag, false_ > l1;
+ typedef lambda< typename F::arg2, Tag, false_ > l2;
+ typedef lambda< typename F::arg3, Tag, false_ > l3;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+
+
+ typedef aux::lambda_or<
+ BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value
+ > is_le;
+
+ typedef bind3<
+ typename F::rebind
+ , typename l1::type, typename l2::type, typename l3::type
+ > bind_;
+
+ typedef typename if_<
+ is_le
+ , if_< Protect, mpl::protect<bind_>, bind_ >
+ , identity<F>
+ >::type type_;
+
+ typedef typename type_::type type;
+ };
+};
+
+template<> struct lambda_impl< int_<4> >
+{
+ template< typename F, typename Tag, typename Protect > struct result_
+ {
+ typedef lambda< typename F::arg1, Tag, false_ > l1;
+ typedef lambda< typename F::arg2, Tag, false_ > l2;
+ typedef lambda< typename F::arg3, Tag, false_ > l3;
+ typedef lambda< typename F::arg4, Tag, false_ > l4;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+ typedef typename l4::is_le is_le4;
+
+
+ typedef aux::lambda_or<
+ BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value
+ > is_le;
+
+ typedef bind4<
+ typename F::rebind
+ , typename l1::type, typename l2::type, typename l3::type
+ , typename l4::type
+ > bind_;
+
+ typedef typename if_<
+ is_le
+ , if_< Protect, mpl::protect<bind_>, bind_ >
+ , identity<F>
+ >::type type_;
+
+ typedef typename type_::type type;
+ };
+};
+
+template<> struct lambda_impl< int_<5> >
+{
+ template< typename F, typename Tag, typename Protect > struct result_
+ {
+ typedef lambda< typename F::arg1, Tag, false_ > l1;
+ typedef lambda< typename F::arg2, Tag, false_ > l2;
+ typedef lambda< typename F::arg3, Tag, false_ > l3;
+ typedef lambda< typename F::arg4, Tag, false_ > l4;
+ typedef lambda< typename F::arg5, Tag, false_ > l5;
+
+ typedef typename l1::is_le is_le1;
+ typedef typename l2::is_le is_le2;
+ typedef typename l3::is_le is_le3;
+ typedef typename l4::is_le is_le4;
+ typedef typename l5::is_le is_le5;
+
+
+ typedef aux::lambda_or<
+ BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le5)::value
+ > is_le;
+
+ typedef bind5<
+ typename F::rebind
+ , typename l1::type, typename l2::type, typename l3::type
+ , typename l4::type, typename l5::type
+ > bind_;
+
+ typedef typename if_<
+ is_le
+ , if_< Protect, mpl::protect<bind_>, bind_ >
+ , identity<F>
+ >::type type_;
+
+ typedef typename type_::type type;
+ };
+};
+
+} // namespace aux
+
+template<
+ typename T
+ , typename Tag
+ , typename Protect
+ >
+struct lambda
+{
+ /// Metafunction forwarding confuses MSVC 6.x
+ typedef typename aux::template_arity<T>::type arity_;
+ typedef typename aux::lambda_impl<arity_>
+ ::template result_< T,Tag,Protect > l_;
+
+ typedef typename l_::type type;
+ typedef typename l_::is_le is_le;
+};
+
+BOOST_MPL_AUX_NA_SPEC2(1, 3, lambda)
+
+template<
+ typename T
+ >
+struct is_lambda_expression
+ : lambda<T>::is_le
+{
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/plain/less.hpp b/boost/boost/mpl/aux_/preprocessed/plain/less.hpp
new file mode 100644
index 00000000000..928d0e3087e
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/plain/less.hpp
@@ -0,0 +1,92 @@
+
+// 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/less.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct less_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< less_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< less_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct less_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct less_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct less_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct less_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct less
+
+ : less_impl<
+ typename less_tag<N1>::type
+ , typename less_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, less)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct less_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N2)::value > BOOST_MPL_AUX_VALUE_WKND(N1)::value ) >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/plain/less_equal.hpp b/boost/boost/mpl/aux_/preprocessed/plain/less_equal.hpp
new file mode 100644
index 00000000000..364cd967a7c
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/plain/less_equal.hpp
@@ -0,0 +1,92 @@
+
+// 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/less_equal.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct less_equal_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< less_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< less_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct less_equal_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct less_equal_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct less_equal_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct less_equal_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct less_equal
+
+ : less_equal_impl<
+ typename less_equal_tag<N1>::type
+ , typename less_equal_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, less_equal)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct less_equal_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value <= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/plain/list.hpp b/boost/boost/mpl/aux_/preprocessed/plain/list.hpp
new file mode 100644
index 00000000000..4e8ad53d212
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/plain/list.hpp
@@ -0,0 +1,323 @@
+
+// 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.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+ , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+ , typename T12 = na, typename T13 = na, typename T14 = na
+ , typename T15 = na, typename T16 = na, typename T17 = na
+ , typename T18 = na, typename T19 = na
+ >
+struct list;
+
+template<
+
+ >
+struct list<
+ na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list0< >
+{
+ typedef list0< >::type type;
+};
+
+template<
+ typename T0
+ >
+struct list<
+ T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list1<T0>
+{
+ typedef typename list1<T0>::type type;
+};
+
+template<
+ typename T0, typename T1
+ >
+struct list<
+ T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list2< T0,T1 >
+{
+ typedef typename list2< T0,T1 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2
+ >
+struct list<
+ T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list3< T0,T1,T2 >
+{
+ typedef typename list3< T0,T1,T2 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3
+ >
+struct list<
+ T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list4< T0,T1,T2,T3 >
+{
+ typedef typename list4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ >
+struct list<
+ T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list5< T0,T1,T2,T3,T4 >
+{
+ typedef typename list5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct list<
+ T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list6< T0,T1,T2,T3,T4,T5 >
+{
+ typedef typename list6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6
+ >
+struct list<
+ T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list7< T0,T1,T2,T3,T4,T5,T6 >
+{
+ typedef typename list7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7
+ >
+struct list<
+ T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+ typedef typename list8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8
+ >
+struct list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+ typedef typename list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ >
+struct list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+ typedef typename list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ , typename T10
+ >
+struct list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+ , na, na, na
+ >
+ : list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+ typedef typename list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+ , na, na, na, na
+ >
+ : list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+ typedef typename list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+ , na, na, na, na
+ >
+ : list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+ typedef typename list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+ , na, na, na, na
+ >
+ : list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+ typedef typename list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+ , na, na, na, na
+ >
+ : list15<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ >
+{
+ typedef typename list15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, na, na, na, na
+ >
+ : list16<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15
+ >
+{
+ typedef typename list16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, na, na, na
+ >
+ : list17<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16
+ >
+{
+ typedef typename list17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, na, na
+ >
+ : list18<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17
+ >
+{
+ typedef typename list18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type 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 list<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, na
+ >
+ : list19<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18
+ >
+{
+ typedef typename list19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ , typename T10, typename T11, typename T12, typename T13, typename T14
+ , typename T15, typename T16, typename T17, typename T18, typename T19
+ >
+struct list
+ : list20<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, T19
+ >
+{
+ typedef typename list20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/plain/list_c.hpp b/boost/boost/mpl/aux_/preprocessed/plain/list_c.hpp
new file mode 100644
index 00000000000..0b48a7f8e11
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/plain/list_c.hpp
@@ -0,0 +1,328 @@
+
+// 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_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+ , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+ , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+ , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+ , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+ , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+ , long C18 = LONG_MAX, long C19 = LONG_MAX
+ >
+struct list_c;
+
+template<
+ typename T
+ >
+struct list_c<
+ T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list0_c<T>
+{
+ typedef typename list0_c<T>::type type;
+};
+
+template<
+ typename T, long C0
+ >
+struct list_c<
+ T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list1_c< T,C0 >
+{
+ typedef typename list1_c< T,C0 >::type type;
+};
+
+template<
+ typename T, long C0, long C1
+ >
+struct list_c<
+ T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list2_c< T,C0,C1 >
+{
+ typedef typename list2_c< T,C0,C1 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2
+ >
+struct list_c<
+ T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list3_c< T,C0,C1,C2 >
+{
+ typedef typename list3_c< T,C0,C1,C2 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3
+ >
+struct list_c<
+ T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list4_c< T,C0,C1,C2,C3 >
+{
+ typedef typename list4_c< T,C0,C1,C2,C3 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list5_c< T,C0,C1,C2,C3,C4 >
+{
+ typedef typename list5_c< T,C0,C1,C2,C3,C4 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list6_c< T,C0,C1,C2,C3,C4,C5 >
+{
+ typedef typename list6_c< T,C0,C1,C2,C3,C4,C5 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list7_c< T,C0,C1,C2,C3,C4,C5,C6 >
+{
+ typedef typename list7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX
+ >
+ : list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >
+{
+ typedef typename list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX
+ >
+ : list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >
+{
+ typedef typename list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX
+ >
+ : list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >
+{
+ typedef typename list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >
+{
+ typedef typename list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >
+{
+ typedef typename list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >
+{
+ typedef typename list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list14_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+ >
+{
+ typedef typename list14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list15_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ >
+{
+ typedef typename list15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list16_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15
+ >
+{
+ typedef typename list16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : list17_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16
+ >
+{
+ typedef typename list17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, LONG_MAX, LONG_MAX
+ >
+ : list18_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17
+ >
+{
+ typedef typename list18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18
+ >
+struct list_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, C18, LONG_MAX
+ >
+ : list19_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, C18
+ >
+{
+ typedef typename list19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+struct list_c
+ : list20_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, C18, C19
+ >
+{
+ typedef typename list20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/plain/map.hpp b/boost/boost/mpl/aux_/preprocessed/plain/map.hpp
new file mode 100644
index 00000000000..837e0137718
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/plain/map.hpp
@@ -0,0 +1,323 @@
+
+// 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/map.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+ , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+ , typename T12 = na, typename T13 = na, typename T14 = na
+ , typename T15 = na, typename T16 = na, typename T17 = na
+ , typename T18 = na, typename T19 = na
+ >
+struct map;
+
+template<
+
+ >
+struct map<
+ na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map0< >
+{
+ typedef map0< >::type type;
+};
+
+template<
+ typename T0
+ >
+struct map<
+ T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map1<T0>
+{
+ typedef typename map1<T0>::type type;
+};
+
+template<
+ typename T0, typename T1
+ >
+struct map<
+ T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map2< T0,T1 >
+{
+ typedef typename map2< T0,T1 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2
+ >
+struct map<
+ T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map3< T0,T1,T2 >
+{
+ typedef typename map3< T0,T1,T2 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3
+ >
+struct map<
+ T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map4< T0,T1,T2,T3 >
+{
+ typedef typename map4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ >
+struct map<
+ T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map5< T0,T1,T2,T3,T4 >
+{
+ typedef typename map5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct map<
+ T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map6< T0,T1,T2,T3,T4,T5 >
+{
+ typedef typename map6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6
+ >
+struct map<
+ T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map7< T0,T1,T2,T3,T4,T5,T6 >
+{
+ typedef typename map7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7
+ >
+struct map<
+ T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+ typedef typename map8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8
+ >
+struct map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+ typedef typename map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ >
+struct map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+ typedef typename map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ , typename T10
+ >
+struct map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+ , na, na, na
+ >
+ : map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+ typedef typename map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+ , na, na, na, na
+ >
+ : map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+ typedef typename map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+ , na, na, na, na
+ >
+ : map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+ typedef typename map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+ , na, na, na, na
+ >
+ : map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+ typedef typename map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+ , na, na, na, na
+ >
+ : map15<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ >
+{
+ typedef typename map15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, na, na, na, na
+ >
+ : map16<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15
+ >
+{
+ typedef typename map16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, na, na, na
+ >
+ : map17<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16
+ >
+{
+ typedef typename map17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, na, na
+ >
+ : map18<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17
+ >
+{
+ typedef typename map18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type 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 map<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, na
+ >
+ : map19<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18
+ >
+{
+ typedef typename map19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+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 map
+ : map20<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, T19
+ >
+{
+ typedef typename map20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/plain/minus.hpp b/boost/boost/mpl/aux_/preprocessed/plain/minus.hpp
new file mode 100644
index 00000000000..0b8b5ceeb7d
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/plain/minus.hpp
@@ -0,0 +1,141 @@
+
+// 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/minus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct minus_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< minus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< minus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct minus_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct minus_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct minus_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct minus_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct minus
+ : minus< minus< minus< minus< N1,N2 >, N3>, N4>, N5>
+{
+};
+
+template<
+ typename N1, typename N2, typename N3, typename N4
+ >
+struct minus< N1,N2,N3,N4,na >
+
+ : minus< minus< minus< N1,N2 >, N3>, N4>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , minus
+ , ( N1, N2, N3, N4, na )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3
+ >
+struct minus< N1,N2,N3,na,na >
+
+ : minus< minus< N1,N2 >, N3>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , minus
+ , ( N1, N2, N3, na, na )
+ )
+};
+
+template<
+ typename N1, typename N2
+ >
+struct minus< N1,N2,na,na,na >
+ : minus_impl<
+ typename minus_tag<N1>::type
+ , typename minus_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , minus
+ , ( N1, N2, na, na, na )
+ )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, minus)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct minus_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ - BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/plain/modulus.hpp b/boost/boost/mpl/aux_/preprocessed/plain/modulus.hpp
new file mode 100644
index 00000000000..6a64e49a81c
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/plain/modulus.hpp
@@ -0,0 +1,99 @@
+
+// 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/modulus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct modulus_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< modulus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< modulus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct modulus_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct modulus_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct modulus_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct modulus_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct modulus
+
+ : modulus_impl<
+ typename modulus_tag<N1>::type
+ , typename modulus_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, modulus)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct modulus_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ % BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/plain/not_equal_to.hpp b/boost/boost/mpl/aux_/preprocessed/plain/not_equal_to.hpp
new file mode 100644
index 00000000000..c08d7f06d7e
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/plain/not_equal_to.hpp
@@ -0,0 +1,92 @@
+
+// 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/not_equal_to.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct not_equal_to_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< not_equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< not_equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct not_equal_to_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct not_equal_to_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct not_equal_to_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct not_equal_to_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct not_equal_to
+
+ : not_equal_to_impl<
+ typename not_equal_to_tag<N1>::type
+ , typename not_equal_to_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, not_equal_to)
+
+}}
+
+namespace boost { namespace mpl {
+
+template<>
+struct not_equal_to_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value != BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/plain/or.hpp b/boost/boost/mpl/aux_/preprocessed/plain/or.hpp
new file mode 100644
index 00000000000..986b2e0ea4b
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/plain/or.hpp
@@ -0,0 +1,64 @@
+
+// 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/or.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template< bool C_, typename T1, typename T2, typename T3, typename T4 >
+struct or_impl
+ : true_
+{
+};
+
+template< typename T1, typename T2, typename T3, typename T4 >
+struct or_impl< false,T1,T2,T3,T4 >
+ : or_impl<
+ BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+ , T2, T3, T4
+ , false_
+ >
+{
+};
+
+template<>
+struct or_impl<
+ false
+ , false_, false_, false_, false_
+ >
+ : false_
+{
+};
+
+} // namespace aux
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(T1)
+ , typename BOOST_MPL_AUX_NA_PARAM(T2)
+ , typename T3 = false_, typename T4 = false_, typename T5 = false_
+ >
+struct or_
+
+ : aux::or_impl<
+ BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+ , T2, T3, T4, T5
+ >
+
+{
+};
+
+BOOST_MPL_AUX_NA_SPEC2(
+ 2
+ , 5
+ , or_
+ )
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/plain/placeholders.hpp b/boost/boost/mpl/aux_/preprocessed/plain/placeholders.hpp
new file mode 100644
index 00000000000..ff97364b9ba
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/plain/placeholders.hpp
@@ -0,0 +1,105 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+// Copyright Peter Dimov 2001-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)
+//
+
+// Preprocessed version of "boost/mpl/placeholders.hpp" header
+// -- DO NOT modify by hand!
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg< -1 > _;
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_;
+}
+
+}}
+
+/// agurt, 17/mar/02: one more placeholder for the last 'apply#'
+/// specialization
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<1> _1;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_1)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_1;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<2> _2;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_2)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_2;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<3> _3;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_3)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_3;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<4> _4;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_4)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_4;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<5> _5;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_5)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_5;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<6> _6;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_6)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_6;
+}
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/plain/plus.hpp b/boost/boost/mpl/aux_/preprocessed/plain/plus.hpp
new file mode 100644
index 00000000000..ed2e432dc88
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/plain/plus.hpp
@@ -0,0 +1,141 @@
+
+// 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/plus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct plus_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< plus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< plus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct plus_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct plus_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct plus_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct plus_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct plus
+ : plus< plus< plus< plus< N1,N2 >, N3>, N4>, N5>
+{
+};
+
+template<
+ typename N1, typename N2, typename N3, typename N4
+ >
+struct plus< N1,N2,N3,N4,na >
+
+ : plus< plus< plus< N1,N2 >, N3>, N4>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , plus
+ , ( N1, N2, N3, N4, na )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3
+ >
+struct plus< N1,N2,N3,na,na >
+
+ : plus< plus< N1,N2 >, N3>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , plus
+ , ( N1, N2, N3, na, na )
+ )
+};
+
+template<
+ typename N1, typename N2
+ >
+struct plus< N1,N2,na,na,na >
+ : plus_impl<
+ typename plus_tag<N1>::type
+ , typename plus_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , plus
+ , ( N1, N2, na, na, na )
+ )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, plus)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct plus_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ + BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/plain/quote.hpp b/boost/boost/mpl/aux_/preprocessed/plain/quote.hpp
new file mode 100644
index 00000000000..d7d0420e4d8
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/plain/quote.hpp
@@ -0,0 +1,123 @@
+
+// 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/quote.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template< typename T, bool has_type_ >
+struct quote_impl
+ : T
+{
+};
+
+template< typename T >
+struct quote_impl< T,false >
+{
+ typedef T type;
+};
+
+template<
+ template< typename P1 > class F
+ , typename Tag = void_
+ >
+struct quote1
+{
+ template< typename U1 > struct apply
+
+ : quote_impl<
+ F<U1>
+ , aux::has_type< F<U1> >::value
+ >
+
+ {
+ };
+};
+
+template<
+ template< typename P1, typename P2 > class F
+ , typename Tag = void_
+ >
+struct quote2
+{
+ template< typename U1, typename U2 > struct apply
+
+ : quote_impl<
+ F< U1,U2 >
+ , aux::has_type< F< U1,U2 > >::value
+ >
+
+ {
+ };
+};
+
+template<
+ template< typename P1, typename P2, typename P3 > class F
+ , typename Tag = void_
+ >
+struct quote3
+{
+ template< typename U1, typename U2, typename U3 > struct apply
+
+ : quote_impl<
+ F< U1,U2,U3 >
+ , aux::has_type< F< U1,U2,U3 > >::value
+ >
+
+ {
+ };
+};
+
+template<
+ template< typename P1, typename P2, typename P3, typename P4 > class F
+ , typename Tag = void_
+ >
+struct quote4
+{
+ template<
+ typename U1, typename U2, typename U3, typename U4
+ >
+ struct apply
+
+ : quote_impl<
+ F< U1,U2,U3,U4 >
+ , aux::has_type< F< U1,U2,U3,U4 > >::value
+ >
+
+ {
+ };
+};
+
+template<
+ template<
+ typename P1, typename P2, typename P3, typename P4
+ , typename P5
+ >
+ class F
+ , typename Tag = void_
+ >
+struct quote5
+{
+ template<
+ typename U1, typename U2, typename U3, typename U4
+ , typename U5
+ >
+ struct apply
+
+ : quote_impl<
+ F< U1,U2,U3,U4,U5 >
+ , aux::has_type< F< U1,U2,U3,U4,U5 > >::value
+ >
+
+ {
+ };
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/plain/reverse_fold_impl.hpp b/boost/boost/mpl/aux_/preprocessed/plain/reverse_fold_impl.hpp
new file mode 100644
index 00000000000..c468684c91e
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/plain/reverse_fold_impl.hpp
@@ -0,0 +1,231 @@
+
+// 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/aux_/reverse_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+ long N
+ , typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl;
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl< 0,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef fwd_state0 bkwd_state0;
+ typedef bkwd_state0 state;
+ typedef iter0 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl< 1,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+
+
+ typedef fwd_state1 bkwd_state1;
+ typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+ typedef bkwd_state0 state;
+ typedef iter1 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl< 2,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+
+
+ typedef fwd_state2 bkwd_state2;
+ typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+ typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter2 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl< 3,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+
+
+ typedef fwd_state3 bkwd_state3;
+ typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+ typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+ typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter3 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl< 4,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef fwd_state4 bkwd_state4;
+ typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
+ typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+ typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+ typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter4 iterator;
+};
+
+template<
+ long N
+ , typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef reverse_fold_impl<
+ ( (N - 4) < 0 ? 0 : N - 4 )
+ , iter4
+ , Last
+ , fwd_state4
+ , BackwardOp
+ , ForwardOp
+ > nested_chunk;
+
+ typedef typename nested_chunk::state bkwd_state4;
+ typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
+ typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+ typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+ typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef typename nested_chunk::iterator iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl< -1,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef reverse_fold_impl<
+ -1
+ , typename mpl::next<First>::type
+ , Last
+ , typename apply2<ForwardOp,State, typename deref<First>::type>::type
+ , BackwardOp
+ , ForwardOp
+ > nested_step;
+
+ typedef typename apply2<
+ BackwardOp
+ , typename nested_step::state
+ , typename deref<First>::type
+ >::type state;
+
+ typedef typename nested_step::iterator iterator;
+};
+
+template<
+ typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl< -1,Last,Last,State,BackwardOp,ForwardOp >
+{
+ typedef State state;
+ typedef Last iterator;
+};
+
+}}}
diff --git a/boost/boost/mpl/aux_/preprocessed/plain/reverse_iter_fold_impl.hpp b/boost/boost/mpl/aux_/preprocessed/plain/reverse_iter_fold_impl.hpp
new file mode 100644
index 00000000000..658f92a7c38
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/plain/reverse_iter_fold_impl.hpp
@@ -0,0 +1,231 @@
+
+// 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/aux_/reverse_iter_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+ long N
+ , typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl;
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl< 0,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef fwd_state0 bkwd_state0;
+ typedef bkwd_state0 state;
+ typedef iter0 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl< 1,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+
+
+ typedef fwd_state1 bkwd_state1;
+ typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+ typedef bkwd_state0 state;
+ typedef iter1 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl< 2,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+
+
+ typedef fwd_state2 bkwd_state2;
+ typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+ typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter2 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl< 3,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+
+
+ typedef fwd_state3 bkwd_state3;
+ typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+ typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+ typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter3 iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl< 4,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef fwd_state4 bkwd_state4;
+ typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;
+ typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+ typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+ typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef iter4 iterator;
+};
+
+template<
+ long N
+ , typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef reverse_iter_fold_impl<
+ ( (N - 4) < 0 ? 0 : N - 4 )
+ , iter4
+ , Last
+ , fwd_state4
+ , BackwardOp
+ , ForwardOp
+ > nested_chunk;
+
+ typedef typename nested_chunk::state bkwd_state4;
+ typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;
+ typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+ typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+ typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+
+
+ typedef bkwd_state0 state;
+ typedef typename nested_chunk::iterator iterator;
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl< -1,First,Last,State,BackwardOp,ForwardOp >
+{
+ typedef reverse_iter_fold_impl<
+ -1
+ , typename mpl::next<First>::type
+ , Last
+ , typename apply2< ForwardOp,State,First >::type
+ , BackwardOp
+ , ForwardOp
+ > nested_step;
+
+ typedef typename apply2<
+ BackwardOp
+ , typename nested_step::state
+ , First
+ >::type state;
+
+ typedef typename nested_step::iterator iterator;
+};
+
+template<
+ typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_iter_fold_impl< -1,Last,Last,State,BackwardOp,ForwardOp >
+{
+ typedef State state;
+ typedef Last iterator;
+};
+
+}}}
diff --git a/boost/boost/mpl/aux_/preprocessed/plain/set.hpp b/boost/boost/mpl/aux_/preprocessed/plain/set.hpp
new file mode 100644
index 00000000000..5721922e111
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/plain/set.hpp
@@ -0,0 +1,323 @@
+
+// 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/set.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+ , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+ , typename T12 = na, typename T13 = na, typename T14 = na
+ , typename T15 = na, typename T16 = na, typename T17 = na
+ , typename T18 = na, typename T19 = na
+ >
+struct set;
+
+template<
+
+ >
+struct set<
+ na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set0< >
+{
+ typedef set0< >::type type;
+};
+
+template<
+ typename T0
+ >
+struct set<
+ T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set1<T0>
+{
+ typedef typename set1<T0>::type type;
+};
+
+template<
+ typename T0, typename T1
+ >
+struct set<
+ T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set2< T0,T1 >
+{
+ typedef typename set2< T0,T1 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2
+ >
+struct set<
+ T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set3< T0,T1,T2 >
+{
+ typedef typename set3< T0,T1,T2 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3
+ >
+struct set<
+ T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set4< T0,T1,T2,T3 >
+{
+ typedef typename set4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ >
+struct set<
+ T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set5< T0,T1,T2,T3,T4 >
+{
+ typedef typename set5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct set<
+ T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set6< T0,T1,T2,T3,T4,T5 >
+{
+ typedef typename set6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6
+ >
+struct set<
+ T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set7< T0,T1,T2,T3,T4,T5,T6 >
+{
+ typedef typename set7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7
+ >
+struct set<
+ T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+ typedef typename set8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8
+ >
+struct set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+ typedef typename set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ >
+struct set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+ typedef typename set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ , typename T10
+ >
+struct set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+ , na, na, na
+ >
+ : set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+ typedef typename set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+ , na, na, na, na
+ >
+ : set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+ typedef typename set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+ , na, na, na, na
+ >
+ : set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+ typedef typename set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+ , na, na, na, na
+ >
+ : set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+ typedef typename set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+ , na, na, na, na
+ >
+ : set15<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ >
+{
+ typedef typename set15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, na, na, na, na
+ >
+ : set16<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15
+ >
+{
+ typedef typename set16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, na, na, na
+ >
+ : set17<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16
+ >
+{
+ typedef typename set17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, na, na
+ >
+ : set18<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17
+ >
+{
+ typedef typename set18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type 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 set<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, na
+ >
+ : set19<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18
+ >
+{
+ typedef typename set19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+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 set
+ : set20<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, T19
+ >
+{
+ typedef typename set20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/plain/set_c.hpp b/boost/boost/mpl/aux_/preprocessed/plain/set_c.hpp
new file mode 100644
index 00000000000..cbeb932c13d
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/plain/set_c.hpp
@@ -0,0 +1,328 @@
+
+// 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/set_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+ , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+ , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+ , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+ , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+ , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+ , long C18 = LONG_MAX, long C19 = LONG_MAX
+ >
+struct set_c;
+
+template<
+ typename T
+ >
+struct set_c<
+ T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set0_c<T>
+{
+ typedef typename set0_c<T>::type type;
+};
+
+template<
+ typename T, long C0
+ >
+struct set_c<
+ T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set1_c< T,C0 >
+{
+ typedef typename set1_c< T,C0 >::type type;
+};
+
+template<
+ typename T, long C0, long C1
+ >
+struct set_c<
+ T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set2_c< T,C0,C1 >
+{
+ typedef typename set2_c< T,C0,C1 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2
+ >
+struct set_c<
+ T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set3_c< T,C0,C1,C2 >
+{
+ typedef typename set3_c< T,C0,C1,C2 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3
+ >
+struct set_c<
+ T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set4_c< T,C0,C1,C2,C3 >
+{
+ typedef typename set4_c< T,C0,C1,C2,C3 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set5_c< T,C0,C1,C2,C3,C4 >
+{
+ typedef typename set5_c< T,C0,C1,C2,C3,C4 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set6_c< T,C0,C1,C2,C3,C4,C5 >
+{
+ typedef typename set6_c< T,C0,C1,C2,C3,C4,C5 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set7_c< T,C0,C1,C2,C3,C4,C5,C6 >
+{
+ typedef typename set7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX
+ >
+ : set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >
+{
+ typedef typename set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX
+ >
+ : set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >
+{
+ typedef typename set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX
+ >
+ : set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >
+{
+ typedef typename set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >
+{
+ typedef typename set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >
+{
+ typedef typename set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >
+{
+ typedef typename set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set14_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+ >
+{
+ typedef typename set14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set15_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ >
+{
+ typedef typename set15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set16_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15
+ >
+{
+ typedef typename set16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : set17_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16
+ >
+{
+ typedef typename set17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, LONG_MAX, LONG_MAX
+ >
+ : set18_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17
+ >
+{
+ typedef typename set18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18
+ >
+struct set_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, C18, LONG_MAX
+ >
+ : set19_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, C18
+ >
+{
+ typedef typename set19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+struct set_c
+ : set20_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, C18, C19
+ >
+{
+ typedef typename set20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/plain/shift_left.hpp b/boost/boost/mpl/aux_/preprocessed/plain/shift_left.hpp
new file mode 100644
index 00000000000..cf9c837d6a5
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/plain/shift_left.hpp
@@ -0,0 +1,97 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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)
+//
+
+// Preprocessed version of "boost/mpl/shift_left.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct shift_left_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< shift_left_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< shift_left_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct shift_left_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct shift_left_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct shift_left_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct shift_left_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct shift_left
+
+ : shift_left_impl<
+ typename shift_left_tag<N1>::type
+ , typename shift_left_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_left)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct shift_left_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N, typename S > struct apply
+
+ : integral_c<
+ typename N::value_type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N)::value
+ << BOOST_MPL_AUX_VALUE_WKND(S)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/plain/shift_right.hpp b/boost/boost/mpl/aux_/preprocessed/plain/shift_right.hpp
new file mode 100644
index 00000000000..477229f24e2
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/plain/shift_right.hpp
@@ -0,0 +1,97 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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)
+//
+
+// Preprocessed version of "boost/mpl/shift_right.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct shift_right_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< shift_right_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< shift_right_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct shift_right_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct shift_right_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct shift_right_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct shift_right_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct shift_right
+
+ : shift_right_impl<
+ typename shift_right_tag<N1>::type
+ , typename shift_right_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_right)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct shift_right_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N, typename S > struct apply
+
+ : integral_c<
+ typename N::value_type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N)::value
+ >> BOOST_MPL_AUX_VALUE_WKND(S)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/plain/template_arity.hpp b/boost/boost/mpl/aux_/preprocessed/plain/template_arity.hpp
new file mode 100644
index 00000000000..a23fc238467
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/plain/template_arity.hpp
@@ -0,0 +1,11 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/aux_/template_arity.hpp" header
+// -- DO NOT modify by hand!
+
diff --git a/boost/boost/mpl/aux_/preprocessed/plain/times.hpp b/boost/boost/mpl/aux_/preprocessed/plain/times.hpp
new file mode 100644
index 00000000000..ca88d405f05
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/plain/times.hpp
@@ -0,0 +1,141 @@
+
+// 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/times.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename Tag1
+ , typename Tag2
+ >
+struct times_impl
+ : if_c<
+ ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+ > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+ )
+
+ , aux::cast2nd_impl< times_impl< Tag1,Tag1 >,Tag1, Tag2 >
+ , aux::cast1st_impl< times_impl< Tag2,Tag2 >,Tag1, Tag2 >
+ >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct times_impl< na,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct times_impl< na,Tag >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename Tag > struct times_impl< Tag,na >
+{
+ template< typename U1, typename U2 > struct apply
+ {
+ typedef apply type;
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+};
+
+template< typename T > struct times_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ , typename N3 = na, typename N4 = na, typename N5 = na
+ >
+struct times
+ : times< times< times< times< N1,N2 >, N3>, N4>, N5>
+{
+};
+
+template<
+ typename N1, typename N2, typename N3, typename N4
+ >
+struct times< N1,N2,N3,N4,na >
+
+ : times< times< times< N1,N2 >, N3>, N4>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , times
+ , ( N1, N2, N3, N4, na )
+ )
+};
+
+template<
+ typename N1, typename N2, typename N3
+ >
+struct times< N1,N2,N3,na,na >
+
+ : times< times< N1,N2 >, N3>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , times
+ , ( N1, N2, N3, na, na )
+ )
+};
+
+template<
+ typename N1, typename N2
+ >
+struct times< N1,N2,na,na,na >
+ : times_impl<
+ typename times_tag<N1>::type
+ , typename times_tag<N2>::type
+ >::template apply< N1,N2 >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+ 5
+ , times
+ , ( N1, N2, na, na, na )
+ )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, times)
+
+}}
+
+namespace boost { namespace mpl {
+template<>
+struct times_impl< integral_c_tag,integral_c_tag >
+{
+ template< typename N1, typename N2 > struct apply
+
+ : integral_c<
+ typename aux::largest_int<
+ typename N1::value_type
+ , typename N2::value_type
+ >::type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+ * BOOST_MPL_AUX_VALUE_WKND(N2)::value
+ )
+ >
+ {
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/aux_/preprocessed/plain/unpack_args.hpp b/boost/boost/mpl/aux_/preprocessed/plain/unpack_args.hpp
new file mode 100644
index 00000000000..2194ce9d11b
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/plain/unpack_args.hpp
@@ -0,0 +1,94 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/unpack_args.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template< int size, typename F, typename Args >
+struct unpack_args_impl;
+
+template< typename F, typename Args >
+struct unpack_args_impl< 0,F,Args >
+ : apply0<
+ F
+ >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 1,F,Args >
+ : apply1<
+ F
+ , typename at_c< Args,0 >::type
+ >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 2,F,Args >
+ : apply2<
+ F
+ , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+ >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 3,F,Args >
+ : apply3<
+ F
+ , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+ , typename at_c< Args,2 >::type
+ >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 4,F,Args >
+ : apply4<
+ F
+ , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+ , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type
+ >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 5,F,Args >
+ : apply5<
+ F
+ , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+ , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type
+ , typename at_c< Args,4 >::type
+ >
+{
+};
+
+}
+
+template<
+ typename F
+ >
+struct unpack_args
+{
+ template< typename Args > struct apply
+
+ : aux::unpack_args_impl< size<Args>::value,F, Args >
+
+ {
+ };
+};
+
+BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args)
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/plain/vector.hpp b/boost/boost/mpl/aux_/preprocessed/plain/vector.hpp
new file mode 100644
index 00000000000..bfa9565a537
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/plain/vector.hpp
@@ -0,0 +1,323 @@
+
+// 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/vector.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+ , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+ , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+ , typename T12 = na, typename T13 = na, typename T14 = na
+ , typename T15 = na, typename T16 = na, typename T17 = na
+ , typename T18 = na, typename T19 = na
+ >
+struct vector;
+
+template<
+
+ >
+struct vector<
+ na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector0< >
+{
+ typedef vector0< >::type type;
+};
+
+template<
+ typename T0
+ >
+struct vector<
+ T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector1<T0>
+{
+ typedef typename vector1<T0>::type type;
+};
+
+template<
+ typename T0, typename T1
+ >
+struct vector<
+ T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector2< T0,T1 >
+{
+ typedef typename vector2< T0,T1 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2
+ >
+struct vector<
+ T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector3< T0,T1,T2 >
+{
+ typedef typename vector3< T0,T1,T2 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3
+ >
+struct vector<
+ T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector4< T0,T1,T2,T3 >
+{
+ typedef typename vector4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ >
+struct vector<
+ T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector5< T0,T1,T2,T3,T4 >
+{
+ typedef typename vector5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct vector<
+ T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector6< T0,T1,T2,T3,T4,T5 >
+{
+ typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6
+ >
+struct vector<
+ T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector7< T0,T1,T2,T3,T4,T5,T6 >
+{
+ typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7
+ >
+struct vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+ typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8
+ >
+struct vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+ typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ >
+struct vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+ typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ , typename T10
+ >
+struct vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+ , na, na, na
+ >
+ : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+ typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+ , na, na, na, na
+ >
+ : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+ typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+ , na, na, na, na
+ >
+ : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+ typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+ , na, na, na, na
+ >
+ : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+ typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+ , na, na, na, na
+ >
+ : vector15<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ >
+{
+ typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, na, na, na, na
+ >
+ : vector16<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15
+ >
+{
+ typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, na, na, na
+ >
+ : vector17<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16
+ >
+{
+ typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, na, na
+ >
+ : vector18<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17
+ >
+{
+ typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type 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 vector<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, na
+ >
+ : vector19<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18
+ >
+{
+ typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+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 vector
+ : vector20<
+ T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+ , T15, T16, T17, T18, T19
+ >
+{
+ typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessed/plain/vector_c.hpp b/boost/boost/mpl/aux_/preprocessed/plain/vector_c.hpp
new file mode 100644
index 00000000000..0f1560d7f13
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessed/plain/vector_c.hpp
@@ -0,0 +1,309 @@
+
+// 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/vector_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+ , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+ , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+ , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+ , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+ , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+ , long C18 = LONG_MAX, long C19 = LONG_MAX
+ >
+struct vector_c;
+
+template<
+ typename T
+ >
+struct vector_c<
+ T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector0_c<T>
+{
+ typedef typename vector0_c<T>::type type;
+};
+
+template<
+ typename T, long C0
+ >
+struct vector_c<
+ T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector1_c< T, T(C0) >
+{
+ typedef typename vector1_c< T, T(C0) >::type type;
+};
+
+template<
+ typename T, long C0, long C1
+ >
+struct vector_c<
+ T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector2_c< T, T(C0), T(C1) >
+{
+ typedef typename vector2_c< T, T(C0), T(C1) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2
+ >
+struct vector_c<
+ T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector3_c< T, T(C0), T(C1), T(C2) >
+{
+ typedef typename vector3_c< T, T(C0), T(C1), T(C2) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector4_c< T, T(C0), T(C1), T(C2), T(C3) >
+{
+ typedef typename vector4_c< T, T(C0), T(C1), T(C2), T(C3) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) >
+{
+ typedef typename vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) >
+{
+ typedef typename vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) >
+{
+ typedef typename vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX
+ >
+ : vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) >
+{
+ typedef typename vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX
+ >
+ : vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) >
+{
+ typedef typename vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ , LONG_MAX
+ >
+ : vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) >
+{
+ typedef typename vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) >
+{
+ typedef typename vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector12_c< 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) >
+{
+ typedef typename vector12_c< 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) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector13_c< 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) >
+{
+ typedef typename vector13_c< 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) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector14_c< 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) >
+{
+ typedef typename vector14_c< 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) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector15_c< 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) >
+{
+ typedef typename vector15_c< 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) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector16_c< 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) >
+{
+ typedef typename vector16_c< 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) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX
+ >
+ : vector17_c< 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) >
+{
+ typedef typename vector17_c< 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) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, LONG_MAX, LONG_MAX
+ >
+ : vector18_c< 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) >
+{
+ typedef typename vector18_c< 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) >::type type;
+};
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18
+ >
+struct vector_c<
+ T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+ , C15, C16, C17, C18, LONG_MAX
+ >
+ : vector19_c< 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) >
+{
+ typedef typename vector19_c< 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) >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+ typename T, long C0, long C1, long C2, long C3, long C4, long C5
+ , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+ , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+ >
+struct vector_c
+ : vector20_c< 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) >
+{
+ typedef typename vector20_c< 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) >::type type;
+};
+
+}}
+
diff --git a/boost/boost/mpl/aux_/preprocessor/add.hpp b/boost/boost/mpl/aux_/preprocessor/add.hpp
new file mode 100644
index 00000000000..b3589151198
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessor/add.hpp
@@ -0,0 +1,65 @@
+
+#ifndef BOOST_MPL_AUX_PREPROCESSOR_ADD_HPP_INCLUDED
+#define BOOST_MPL_AUX_PREPROCESSOR_ADD_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/preprocessor/add.hpp,v $
+// $Date: 2004/09/02 15:40:56 $
+// $Revision: 1.6 $
+
+#include <boost/mpl/aux_/config/preprocessor.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES)
+
+# include <boost/mpl/aux_/preprocessor/tuple.hpp>
+
+#if defined(BOOST_MPL_CFG_BROKEN_PP_MACRO_EXPANSION)
+# include <boost/preprocessor/cat.hpp>
+
+# define BOOST_MPL_PP_ADD(i,j) \
+ BOOST_MPL_PP_ADD_DELAY(i,j) \
+ /**/
+
+# define BOOST_MPL_PP_ADD_DELAY(i,j) \
+ BOOST_PP_CAT(BOOST_MPL_PP_TUPLE_11_ELEM_##i,BOOST_MPL_PP_ADD_##j) \
+ /**/
+#else
+# define BOOST_MPL_PP_ADD(i,j) \
+ BOOST_MPL_PP_ADD_DELAY(i,j) \
+ /**/
+
+# define BOOST_MPL_PP_ADD_DELAY(i,j) \
+ BOOST_MPL_PP_TUPLE_11_ELEM_##i BOOST_MPL_PP_ADD_##j \
+ /**/
+#endif
+
+# define BOOST_MPL_PP_ADD_0 (0,1,2,3,4,5,6,7,8,9,10)
+# define BOOST_MPL_PP_ADD_1 (1,2,3,4,5,6,7,8,9,10,0)
+# define BOOST_MPL_PP_ADD_2 (2,3,4,5,6,7,8,9,10,0,0)
+# define BOOST_MPL_PP_ADD_3 (3,4,5,6,7,8,9,10,0,0,0)
+# define BOOST_MPL_PP_ADD_4 (4,5,6,7,8,9,10,0,0,0,0)
+# define BOOST_MPL_PP_ADD_5 (5,6,7,8,9,10,0,0,0,0,0)
+# define BOOST_MPL_PP_ADD_6 (6,7,8,9,10,0,0,0,0,0,0)
+# define BOOST_MPL_PP_ADD_7 (7,8,9,10,0,0,0,0,0,0,0)
+# define BOOST_MPL_PP_ADD_8 (8,9,10,0,0,0,0,0,0,0,0)
+# define BOOST_MPL_PP_ADD_9 (9,10,0,0,0,0,0,0,0,0,0)
+# define BOOST_MPL_PP_ADD_10 (10,0,0,0,0,0,0,0,0,0,0)
+
+#else
+
+# include <boost/preprocessor/arithmetic/add.hpp>
+
+# define BOOST_MPL_PP_ADD(i,j) \
+ BOOST_PP_ADD(i,j) \
+ /**/
+
+#endif
+
+#endif // BOOST_MPL_AUX_PREPROCESSOR_ADD_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/preprocessor/def_params_tail.hpp b/boost/boost/mpl/aux_/preprocessor/def_params_tail.hpp
new file mode 100644
index 00000000000..85e9707873a
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessor/def_params_tail.hpp
@@ -0,0 +1,105 @@
+
+#ifndef BOOST_MPL_AUX_PREPROCESSOR_DEF_PARAMS_TAIL_HPP_INCLUDED
+#define BOOST_MPL_AUX_PREPROCESSOR_DEF_PARAMS_TAIL_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/preprocessor/def_params_tail.hpp,v $
+// $Date: 2004/09/02 15:40:56 $
+// $Revision: 1.6 $
+
+#include <boost/mpl/limits/arity.hpp>
+#include <boost/mpl/aux_/config/dtp.hpp>
+#include <boost/mpl/aux_/config/preprocessor.hpp>
+
+#include <boost/preprocessor/comma_if.hpp>
+#include <boost/preprocessor/logical/and.hpp>
+#include <boost/preprocessor/identity.hpp>
+#include <boost/preprocessor/empty.hpp>
+
+// BOOST_MPL_PP_DEF_PARAMS_TAIL(1,T,value): , T1 = value, .., Tn = value
+// BOOST_MPL_PP_DEF_PARAMS_TAIL(2,T,value): , T2 = value, .., Tn = value
+// BOOST_MPL_PP_DEF_PARAMS_TAIL(n,T,value): <nothing>
+
+#if !defined(BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES)
+
+# include <boost/mpl/aux_/preprocessor/filter_params.hpp>
+# include <boost/mpl/aux_/preprocessor/sub.hpp>
+
+# define BOOST_MPL_PP_DEF_PARAMS_TAIL_IMPL(i, param, value_func) \
+ BOOST_MPL_PP_DEF_PARAMS_TAIL_DELAY_1( \
+ i \
+ , BOOST_MPL_PP_SUB(BOOST_MPL_LIMIT_METAFUNCTION_ARITY,i) \
+ , param \
+ , value_func \
+ ) \
+ /**/
+
+# define BOOST_MPL_PP_DEF_PARAMS_TAIL_DELAY_1(i, n, param, value_func) \
+ BOOST_MPL_PP_DEF_PARAMS_TAIL_DELAY_2(i,n,param,value_func) \
+ /**/
+
+# define BOOST_MPL_PP_DEF_PARAMS_TAIL_DELAY_2(i, n, param, value_func) \
+ BOOST_PP_COMMA_IF(BOOST_PP_AND(i,n)) \
+ BOOST_MPL_PP_DEF_PARAMS_TAIL_##i(n,param,value_func) \
+ /**/
+
+# define BOOST_MPL_PP_DEF_PARAMS_TAIL_0(i,p,v) BOOST_MPL_PP_FILTER_PARAMS_##i(p##1 v(),p##2 v(),p##3 v(),p##4 v(),p##5 v(),p##6 v(),p##7 v(),p##8 v(),p##9 v())
+# define BOOST_MPL_PP_DEF_PARAMS_TAIL_1(i,p,v) BOOST_MPL_PP_FILTER_PARAMS_##i(p##2 v(),p##3 v(),p##4 v(),p##5 v(),p##6 v(),p##7 v(),p##8 v(),p##9 v(),p1)
+# define BOOST_MPL_PP_DEF_PARAMS_TAIL_2(i,p,v) BOOST_MPL_PP_FILTER_PARAMS_##i(p##3 v(),p##4 v(),p##5 v(),p##6 v(),p##7 v(),p##8 v(),p##9 v(),p1,p2)
+# define BOOST_MPL_PP_DEF_PARAMS_TAIL_3(i,p,v) BOOST_MPL_PP_FILTER_PARAMS_##i(p##4 v(),p##5 v(),p##6 v(),p##7 v(),p##8 v(),p##9 v(),p1,p2,p3)
+# define BOOST_MPL_PP_DEF_PARAMS_TAIL_4(i,p,v) BOOST_MPL_PP_FILTER_PARAMS_##i(p##5 v(),p##6 v(),p##7 v(),p##8 v(),p##9 v(),p1,p2,p3,p4)
+# define BOOST_MPL_PP_DEF_PARAMS_TAIL_5(i,p,v) BOOST_MPL_PP_FILTER_PARAMS_##i(p##6 v(),p##7 v(),p##8 v(),p##9 v(),p1,p2,p3,p4,p5)
+# define BOOST_MPL_PP_DEF_PARAMS_TAIL_6(i,p,v) BOOST_MPL_PP_FILTER_PARAMS_##i(p##7 v(),p##8 v(),p##9 v(),p1,p2,p3,p4,p5,p6)
+# define BOOST_MPL_PP_DEF_PARAMS_TAIL_7(i,p,v) BOOST_MPL_PP_FILTER_PARAMS_##i(p##8 v(),p##9 v(),p1,p2,p3,p4,p5,p6,p7)
+# define BOOST_MPL_PP_DEF_PARAMS_TAIL_8(i,p,v) BOOST_MPL_PP_FILTER_PARAMS_##i(p##9 v(),p1,p2,p3,p4,p5,p6,p7,p8)
+# define BOOST_MPL_PP_DEF_PARAMS_TAIL_9(i,p,v) BOOST_MPL_PP_FILTER_PARAMS_##i(p1,p2,p3,p4,p5,p6,p7,p8,p9)
+
+#else
+
+# include <boost/preprocessor/arithmetic/add.hpp>
+# include <boost/preprocessor/arithmetic/sub.hpp>
+# include <boost/preprocessor/inc.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+# include <boost/preprocessor/repeat.hpp>
+# include <boost/preprocessor/cat.hpp>
+
+# define BOOST_MPL_PP_AUX_TAIL_PARAM_FUNC(unused, i, op) \
+ , BOOST_PP_CAT( \
+ BOOST_PP_TUPLE_ELEM(3, 1, op) \
+ , BOOST_PP_ADD_D(1, i, BOOST_PP_INC(BOOST_PP_TUPLE_ELEM(3, 0, op))) \
+ ) BOOST_PP_TUPLE_ELEM(3, 2, op)() \
+ /**/
+
+# define BOOST_MPL_PP_DEF_PARAMS_TAIL_IMPL(i, param, value_func) \
+ BOOST_PP_REPEAT( \
+ BOOST_PP_SUB_D(1, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, i) \
+ , BOOST_MPL_PP_AUX_TAIL_PARAM_FUNC \
+ , (i, param, value_func) \
+ ) \
+ /**/
+
+
+#endif // BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES
+
+#define BOOST_MPL_PP_DEF_PARAMS_TAIL(i, param, value) \
+ BOOST_MPL_PP_DEF_PARAMS_TAIL_IMPL(i, param, BOOST_PP_IDENTITY(=value)) \
+ /**/
+
+#if !defined(BOOST_MPL_CFG_NO_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES)
+# define BOOST_MPL_PP_NESTED_DEF_PARAMS_TAIL(i, param, value) \
+ BOOST_MPL_PP_DEF_PARAMS_TAIL_IMPL(i, param, BOOST_PP_IDENTITY(=value)) \
+ /**/
+#else
+# define BOOST_MPL_PP_NESTED_DEF_PARAMS_TAIL(i, param, value) \
+ BOOST_MPL_PP_DEF_PARAMS_TAIL_IMPL(i, param, BOOST_PP_EMPTY) \
+ /**/
+#endif
+
+#endif // BOOST_MPL_AUX_PREPROCESSOR_DEF_PARAMS_TAIL_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/preprocessor/default_params.hpp b/boost/boost/mpl/aux_/preprocessor/default_params.hpp
new file mode 100644
index 00000000000..c904b27dd73
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessor/default_params.hpp
@@ -0,0 +1,67 @@
+
+#ifndef BOOST_MPL_AUX_PREPROCESSOR_DEFAULT_PARAMS_HPP_INCLUDED
+#define BOOST_MPL_AUX_PREPROCESSOR_DEFAULT_PARAMS_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/preprocessor/default_params.hpp,v $
+// $Date: 2004/09/02 15:40:56 $
+// $Revision: 1.5 $
+
+#include <boost/mpl/aux_/config/preprocessor.hpp>
+
+// BOOST_MPL_PP_DEFAULT_PARAMS(0,T,int): <nothing>
+// BOOST_MPL_PP_DEFAULT_PARAMS(1,T,int): T1 = int
+// BOOST_MPL_PP_DEFAULT_PARAMS(2,T,int): T1 = int, T2 = int
+// BOOST_MPL_PP_DEFAULT_PARAMS(n,T,int): T1 = int, T2 = int, .., Tn = int
+
+#if !defined(BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES)
+
+# include <boost/preprocessor/cat.hpp>
+
+# define BOOST_MPL_PP_DEFAULT_PARAMS(n,p,v) \
+ BOOST_PP_CAT(BOOST_MPL_PP_DEFAULT_PARAMS_,n)(p,v) \
+ /**/
+
+# define BOOST_MPL_PP_DEFAULT_PARAMS_0(p,v)
+# define BOOST_MPL_PP_DEFAULT_PARAMS_1(p,v) p##1=v
+# define BOOST_MPL_PP_DEFAULT_PARAMS_2(p,v) p##1=v,p##2=v
+# define BOOST_MPL_PP_DEFAULT_PARAMS_3(p,v) p##1=v,p##2=v,p##3=v
+# define BOOST_MPL_PP_DEFAULT_PARAMS_4(p,v) p##1=v,p##2=v,p##3=v,p##4=v
+# define BOOST_MPL_PP_DEFAULT_PARAMS_5(p,v) p##1=v,p##2=v,p##3=v,p##4=v,p##5=v
+# define BOOST_MPL_PP_DEFAULT_PARAMS_6(p,v) p##1=v,p##2=v,p##3=v,p##4=v,p##5=v,p##6=v
+# define BOOST_MPL_PP_DEFAULT_PARAMS_7(p,v) p##1=v,p##2=v,p##3=v,p##4=v,p##5=v,p##6=v,p##7=v
+# define BOOST_MPL_PP_DEFAULT_PARAMS_8(p,v) p##1=v,p##2=v,p##3=v,p##4=v,p##5=v,p##6=v,p##7=v,p##8=v
+# define BOOST_MPL_PP_DEFAULT_PARAMS_9(p,v) p##1=v,p##2=v,p##3=v,p##4=v,p##5=v,p##6=v,p##7=v,p##8=v,p##9=v
+
+#else
+
+# include <boost/preprocessor/tuple/elem.hpp>
+# include <boost/preprocessor/comma_if.hpp>
+# include <boost/preprocessor/repeat.hpp>
+# include <boost/preprocessor/inc.hpp>
+# include <boost/preprocessor/cat.hpp>
+
+# define BOOST_MPL_PP_AUX_DEFAULT_PARAM_FUNC(unused, i, pv) \
+ BOOST_PP_COMMA_IF(i) \
+ BOOST_PP_CAT( BOOST_PP_TUPLE_ELEM(2,0,pv), BOOST_PP_INC(i) ) \
+ = BOOST_PP_TUPLE_ELEM(2,1,pv) \
+ /**/
+
+# define BOOST_MPL_PP_DEFAULT_PARAMS(n, param, value) \
+ BOOST_PP_REPEAT( \
+ n \
+ , BOOST_MPL_PP_AUX_DEFAULT_PARAM_FUNC \
+ , (param,value) \
+ ) \
+ /**/
+
+#endif
+
+#endif // BOOST_MPL_AUX_PREPROCESSOR_DEFAULT_PARAMS_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/preprocessor/enum.hpp b/boost/boost/mpl/aux_/preprocessor/enum.hpp
new file mode 100644
index 00000000000..c452c1d1769
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessor/enum.hpp
@@ -0,0 +1,62 @@
+
+#ifndef BOOST_MPL_AUX_PREPROCESSOR_ENUM_HPP_INCLUDED
+#define BOOST_MPL_AUX_PREPROCESSOR_ENUM_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/preprocessor/enum.hpp,v $
+// $Date: 2004/09/02 15:40:56 $
+// $Revision: 1.5 $
+
+#include <boost/mpl/aux_/config/preprocessor.hpp>
+
+// BOOST_MPL_PP_ENUM(0,int): <nothing>
+// BOOST_MPL_PP_ENUM(1,int): int
+// BOOST_MPL_PP_ENUM(2,int): int, int
+// BOOST_MPL_PP_ENUM(n,int): int, int, .., int
+
+#if !defined(BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES)
+
+# include <boost/preprocessor/cat.hpp>
+
+# define BOOST_MPL_PP_ENUM(n, param) \
+ BOOST_PP_CAT(BOOST_MPL_PP_ENUM_,n)(param) \
+ /**/
+
+# define BOOST_MPL_PP_ENUM_0(p)
+# define BOOST_MPL_PP_ENUM_1(p) p
+# define BOOST_MPL_PP_ENUM_2(p) p,p
+# define BOOST_MPL_PP_ENUM_3(p) p,p,p
+# define BOOST_MPL_PP_ENUM_4(p) p,p,p,p
+# define BOOST_MPL_PP_ENUM_5(p) p,p,p,p,p
+# define BOOST_MPL_PP_ENUM_6(p) p,p,p,p,p,p
+# define BOOST_MPL_PP_ENUM_7(p) p,p,p,p,p,p,p
+# define BOOST_MPL_PP_ENUM_8(p) p,p,p,p,p,p,p,p
+# define BOOST_MPL_PP_ENUM_9(p) p,p,p,p,p,p,p,p,p
+
+#else
+
+# include <boost/preprocessor/comma_if.hpp>
+# include <boost/preprocessor/repeat.hpp>
+
+# define BOOST_MPL_PP_AUX_ENUM_FUNC(unused, i, param) \
+ BOOST_PP_COMMA_IF(i) param \
+ /**/
+
+# define BOOST_MPL_PP_ENUM(n, param) \
+ BOOST_PP_REPEAT( \
+ n \
+ , BOOST_MPL_PP_AUX_ENUM_FUNC \
+ , param \
+ ) \
+ /**/
+
+#endif
+
+#endif // BOOST_MPL_AUX_PREPROCESSOR_ENUM_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/preprocessor/ext_params.hpp b/boost/boost/mpl/aux_/preprocessor/ext_params.hpp
new file mode 100644
index 00000000000..1038eee7a8b
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessor/ext_params.hpp
@@ -0,0 +1,78 @@
+
+#ifndef BOOST_MPL_AUX_PREPROCESSOR_EXT_PARAMS_HPP_INCLUDED
+#define BOOST_MPL_AUX_PREPROCESSOR_EXT_PARAMS_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/preprocessor/ext_params.hpp,v $
+// $Date: 2004/09/02 15:40:56 $
+// $Revision: 1.5 $
+
+#include <boost/mpl/aux_/config/preprocessor.hpp>
+
+// BOOST_MPL_PP_EXT_PARAMS(2,2,T): <nothing>
+// BOOST_MPL_PP_EXT_PARAMS(2,3,T): T2
+// BOOST_MPL_PP_EXT_PARAMS(2,4,T): T2, T3
+// BOOST_MPL_PP_EXT_PARAMS(2,n,T): T2, T3, .., Tn-1
+
+#if !defined(BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES)
+
+# include <boost/mpl/aux_/preprocessor/filter_params.hpp>
+# include <boost/mpl/aux_/preprocessor/sub.hpp>
+
+# define BOOST_MPL_PP_EXT_PARAMS(i,j,p) \
+ BOOST_MPL_PP_EXT_PARAMS_DELAY_1(i,BOOST_MPL_PP_SUB(j,i),p) \
+ /**/
+
+# define BOOST_MPL_PP_EXT_PARAMS_DELAY_1(i,n,p) \
+ BOOST_MPL_PP_EXT_PARAMS_DELAY_2(i,n,p) \
+ /**/
+
+# define BOOST_MPL_PP_EXT_PARAMS_DELAY_2(i,n,p) \
+ BOOST_MPL_PP_EXT_PARAMS_##i(n,p) \
+ /**/
+
+# define BOOST_MPL_PP_EXT_PARAMS_1(i,p) BOOST_MPL_PP_FILTER_PARAMS_##i(p##1,p##2,p##3,p##4,p##5,p##6,p##7,p##8,p##9)
+# define BOOST_MPL_PP_EXT_PARAMS_2(i,p) BOOST_MPL_PP_FILTER_PARAMS_##i(p##2,p##3,p##4,p##5,p##6,p##7,p##8,p##9,p1)
+# define BOOST_MPL_PP_EXT_PARAMS_3(i,p) BOOST_MPL_PP_FILTER_PARAMS_##i(p##3,p##4,p##5,p##6,p##7,p##8,p##9,p1,p2)
+# define BOOST_MPL_PP_EXT_PARAMS_4(i,p) BOOST_MPL_PP_FILTER_PARAMS_##i(p##4,p##5,p##6,p##7,p##8,p##9,p1,p2,p3)
+# define BOOST_MPL_PP_EXT_PARAMS_5(i,p) BOOST_MPL_PP_FILTER_PARAMS_##i(p##5,p##6,p##7,p##8,p##9,p1,p2,p3,p4)
+# define BOOST_MPL_PP_EXT_PARAMS_6(i,p) BOOST_MPL_PP_FILTER_PARAMS_##i(p##6,p##7,p##8,p##9,p1,p2,p3,p4,p5)
+# define BOOST_MPL_PP_EXT_PARAMS_7(i,p) BOOST_MPL_PP_FILTER_PARAMS_##i(p##7,p##8,p##9,p1,p2,p3,p4,p5,p6)
+# define BOOST_MPL_PP_EXT_PARAMS_8(i,p) BOOST_MPL_PP_FILTER_PARAMS_##i(p##8,p##9,p1,p2,p3,p4,p5,p6,p7)
+# define BOOST_MPL_PP_EXT_PARAMS_9(i,p) BOOST_MPL_PP_FILTER_PARAMS_##i(p##9,p1,p2,p3,p4,p5,p6,p7,p8)
+
+#else
+
+# include <boost/preprocessor/arithmetic/add.hpp>
+# include <boost/preprocessor/arithmetic/sub.hpp>
+# include <boost/preprocessor/comma_if.hpp>
+# include <boost/preprocessor/repeat.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+# include <boost/preprocessor/cat.hpp>
+
+# define BOOST_MPL_PP_AUX_EXT_PARAM_FUNC(unused, i, op) \
+ BOOST_PP_COMMA_IF(i) \
+ BOOST_PP_CAT( \
+ BOOST_PP_TUPLE_ELEM(2,1,op) \
+ , BOOST_PP_ADD_D(1, i, BOOST_PP_TUPLE_ELEM(2,0,op)) \
+ ) \
+ /**/
+
+# define BOOST_MPL_PP_EXT_PARAMS(i, j, param) \
+ BOOST_PP_REPEAT( \
+ BOOST_PP_SUB_D(1,j,i) \
+ , BOOST_MPL_PP_AUX_EXT_PARAM_FUNC \
+ , (i,param) \
+ ) \
+ /**/
+
+#endif
+
+#endif // BOOST_MPL_AUX_PREPROCESSOR_EXT_PARAMS_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/preprocessor/filter_params.hpp b/boost/boost/mpl/aux_/preprocessor/filter_params.hpp
new file mode 100644
index 00000000000..80324638b8b
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessor/filter_params.hpp
@@ -0,0 +1,28 @@
+
+#ifndef BOOST_MPL_AUX_PREPROCESSOR_FILTER_PARAMS_HPP_INCLUDED
+#define BOOST_MPL_AUX_PREPROCESSOR_FILTER_PARAMS_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/preprocessor/filter_params.hpp,v $
+// $Date: 2004/09/02 15:40:56 $
+// $Revision: 1.4 $
+
+#define BOOST_MPL_PP_FILTER_PARAMS_0(p1,p2,p3,p4,p5,p6,p7,p8,p9)
+#define BOOST_MPL_PP_FILTER_PARAMS_1(p1,p2,p3,p4,p5,p6,p7,p8,p9) p1
+#define BOOST_MPL_PP_FILTER_PARAMS_2(p1,p2,p3,p4,p5,p6,p7,p8,p9) p1,p2
+#define BOOST_MPL_PP_FILTER_PARAMS_3(p1,p2,p3,p4,p5,p6,p7,p8,p9) p1,p2,p3
+#define BOOST_MPL_PP_FILTER_PARAMS_4(p1,p2,p3,p4,p5,p6,p7,p8,p9) p1,p2,p3,p4
+#define BOOST_MPL_PP_FILTER_PARAMS_5(p1,p2,p3,p4,p5,p6,p7,p8,p9) p1,p2,p3,p4,p5
+#define BOOST_MPL_PP_FILTER_PARAMS_6(p1,p2,p3,p4,p5,p6,p7,p8,p9) p1,p2,p3,p4,p5,p6
+#define BOOST_MPL_PP_FILTER_PARAMS_7(p1,p2,p3,p4,p5,p6,p7,p8,p9) p1,p2,p3,p4,p5,p6,p7
+#define BOOST_MPL_PP_FILTER_PARAMS_8(p1,p2,p3,p4,p5,p6,p7,p8,p9) p1,p2,p3,p4,p5,p6,p7,p8
+#define BOOST_MPL_PP_FILTER_PARAMS_9(p1,p2,p3,p4,p5,p6,p7,p8,p9) p1,p2,p3,p4,p5,p6,p7,p8,p9
+
+#endif // BOOST_MPL_AUX_PREPROCESSOR_FILTER_PARAMS_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/preprocessor/is_seq.hpp b/boost/boost/mpl/aux_/preprocessor/is_seq.hpp
new file mode 100644
index 00000000000..0f7a2e790f3
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessor/is_seq.hpp
@@ -0,0 +1,54 @@
+
+#ifndef BOOST_MPL_AUX_PREPROCESSOR_IS_SEQ_HPP_INCLUDED
+#define BOOST_MPL_AUX_PREPROCESSOR_IS_SEQ_HPP_INCLUDED
+
+// Copyright Paul Mensonides 2003
+// Copyright Aleksey Gurtovoy 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/preprocessor/is_seq.hpp,v $
+// $Date: 2004/09/02 15:40:56 $
+// $Revision: 1.3 $
+
+#include <boost/preprocessor/seq/size.hpp>
+#include <boost/preprocessor/arithmetic/dec.hpp>
+#include <boost/preprocessor/punctuation/paren.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/config/config.hpp>
+
+// returns 1 if 'seq' is a PP-sequence, 0 otherwise:
+//
+// BOOST_PP_ASSERT( BOOST_PP_NOT( BOOST_MPL_PP_IS_SEQ( int ) ) )
+// BOOST_PP_ASSERT( BOOST_MPL_PP_IS_SEQ( (int) ) )
+// BOOST_PP_ASSERT( BOOST_MPL_PP_IS_SEQ( (1)(2) ) )
+
+#if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_BCC()
+
+# define BOOST_MPL_PP_IS_SEQ(seq) BOOST_PP_DEC( BOOST_PP_SEQ_SIZE( BOOST_MPL_PP_IS_SEQ_(seq) ) )
+# define BOOST_MPL_PP_IS_SEQ_(seq) BOOST_MPL_PP_IS_SEQ_SEQ_( BOOST_MPL_PP_IS_SEQ_SPLIT_ seq )
+# define BOOST_MPL_PP_IS_SEQ_SEQ_(x) (x)
+# define BOOST_MPL_PP_IS_SEQ_SPLIT_(unused) unused)((unused)
+
+#else
+
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+# define BOOST_MPL_PP_IS_SEQ(seq) BOOST_MPL_PP_IS_SEQ_MWCC_((seq))
+# define BOOST_MPL_PP_IS_SEQ_MWCC_(args) BOOST_MPL_PP_IS_SEQ_ ## args
+# else
+# define BOOST_MPL_PP_IS_SEQ(seq) BOOST_MPL_PP_IS_SEQ_(seq)
+# endif
+
+# define BOOST_MPL_PP_IS_SEQ_(seq) BOOST_PP_CAT(BOOST_MPL_PP_IS_SEQ_, BOOST_MPL_PP_IS_SEQ_0 seq BOOST_PP_RPAREN())
+# define BOOST_MPL_PP_IS_SEQ_0(x) BOOST_MPL_PP_IS_SEQ_1(x
+# define BOOST_MPL_PP_IS_SEQ_ALWAYS_0(unused) 0
+# define BOOST_MPL_PP_IS_SEQ_BOOST_MPL_PP_IS_SEQ_0 BOOST_MPL_PP_IS_SEQ_ALWAYS_0(
+# define BOOST_MPL_PP_IS_SEQ_BOOST_MPL_PP_IS_SEQ_1(unused) 1
+
+#endif
+
+#endif // BOOST_MPL_AUX_PREPROCESSOR_IS_SEQ_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/preprocessor/params.hpp b/boost/boost/mpl/aux_/preprocessor/params.hpp
new file mode 100644
index 00000000000..80e354baed6
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessor/params.hpp
@@ -0,0 +1,65 @@
+
+#ifndef BOOST_MPL_AUX_PREPROCESSOR_PARAMS_HPP_INCLUDED
+#define BOOST_MPL_AUX_PREPROCESSOR_PARAMS_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/preprocessor/params.hpp,v $
+// $Date: 2004/09/02 15:40:56 $
+// $Revision: 1.5 $
+
+#include <boost/mpl/aux_/config/preprocessor.hpp>
+
+// BOOST_MPL_PP_PARAMS(0,T): <nothing>
+// BOOST_MPL_PP_PARAMS(1,T): T1
+// BOOST_MPL_PP_PARAMS(2,T): T1, T2
+// BOOST_MPL_PP_PARAMS(n,T): T1, T2, .., Tn
+
+#if !defined(BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES)
+
+# include <boost/preprocessor/cat.hpp>
+
+# define BOOST_MPL_PP_PARAMS(n,p) \
+ BOOST_PP_CAT(BOOST_MPL_PP_PARAMS_,n)(p) \
+ /**/
+
+# define BOOST_MPL_PP_PARAMS_0(p)
+# define BOOST_MPL_PP_PARAMS_1(p) p##1
+# define BOOST_MPL_PP_PARAMS_2(p) p##1,p##2
+# define BOOST_MPL_PP_PARAMS_3(p) p##1,p##2,p##3
+# define BOOST_MPL_PP_PARAMS_4(p) p##1,p##2,p##3,p##4
+# define BOOST_MPL_PP_PARAMS_5(p) p##1,p##2,p##3,p##4,p##5
+# define BOOST_MPL_PP_PARAMS_6(p) p##1,p##2,p##3,p##4,p##5,p##6
+# define BOOST_MPL_PP_PARAMS_7(p) p##1,p##2,p##3,p##4,p##5,p##6,p##7
+# define BOOST_MPL_PP_PARAMS_8(p) p##1,p##2,p##3,p##4,p##5,p##6,p##7,p##8
+# define BOOST_MPL_PP_PARAMS_9(p) p##1,p##2,p##3,p##4,p##5,p##6,p##7,p##8,p##9
+
+#else
+
+# include <boost/preprocessor/comma_if.hpp>
+# include <boost/preprocessor/repeat.hpp>
+# include <boost/preprocessor/inc.hpp>
+# include <boost/preprocessor/cat.hpp>
+
+# define BOOST_MPL_PP_AUX_PARAM_FUNC(unused, i, param) \
+ BOOST_PP_COMMA_IF(i) \
+ BOOST_PP_CAT(param, BOOST_PP_INC(i)) \
+ /**/
+
+# define BOOST_MPL_PP_PARAMS(n, param) \
+ BOOST_PP_REPEAT( \
+ n \
+ , BOOST_MPL_PP_AUX_PARAM_FUNC \
+ , param \
+ ) \
+ /**/
+
+#endif
+
+#endif // BOOST_MPL_AUX_PREPROCESSOR_PARAMS_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/preprocessor/partial_spec_params.hpp b/boost/boost/mpl/aux_/preprocessor/partial_spec_params.hpp
new file mode 100644
index 00000000000..cee22c35790
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessor/partial_spec_params.hpp
@@ -0,0 +1,32 @@
+
+#ifndef BOOST_MPL_AUX_PREPROCESSOR_PARTIAL_SPEC_PARAMS_HPP_INCLUDED
+#define BOOST_MPL_AUX_PREPROCESSOR_PARTIAL_SPEC_PARAMS_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/preprocessor/partial_spec_params.hpp,v $
+// $Date: 2004/09/02 15:40:56 $
+// $Revision: 1.3 $
+
+#include <boost/mpl/limits/arity.hpp>
+#include <boost/mpl/aux_/preprocessor/params.hpp>
+#include <boost/mpl/aux_/preprocessor/enum.hpp>
+#include <boost/mpl/aux_/preprocessor/sub.hpp>
+#include <boost/preprocessor/comma_if.hpp>
+
+#define BOOST_MPL_PP_PARTIAL_SPEC_PARAMS(n, param, def) \
+BOOST_MPL_PP_PARAMS(n, param) \
+BOOST_PP_COMMA_IF(BOOST_MPL_PP_SUB(BOOST_MPL_LIMIT_METAFUNCTION_ARITY,n)) \
+BOOST_MPL_PP_ENUM( \
+ BOOST_MPL_PP_SUB(BOOST_MPL_LIMIT_METAFUNCTION_ARITY,n) \
+ , def \
+ ) \
+/**/
+
+#endif // BOOST_MPL_AUX_PREPROCESSOR_PARTIAL_SPEC_PARAMS_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/preprocessor/range.hpp b/boost/boost/mpl/aux_/preprocessor/range.hpp
new file mode 100644
index 00000000000..d51eb416fcb
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessor/range.hpp
@@ -0,0 +1,23 @@
+
+#ifndef BOOST_MPL_AUX_PREPROCESSOR_RANGE_HPP_INCLUDED
+#define BOOST_MPL_AUX_PREPROCESSOR_RANGE_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/preprocessor/range.hpp,v $
+// $Date: 2004/09/02 15:40:56 $
+// $Revision: 1.3 $
+
+#include <boost/preprocessor/seq/subseq.hpp>
+
+#define BOOST_MPL_PP_RANGE(first, length) \
+ BOOST_PP_SEQ_SUBSEQ((0)(1)(2)(3)(4)(5)(6)(7)(8)(9), first, length) \
+/**/
+
+#endif // BOOST_MPL_AUX_PREPROCESSOR_RANGE_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/preprocessor/repeat.hpp b/boost/boost/mpl/aux_/preprocessor/repeat.hpp
new file mode 100644
index 00000000000..630f7841792
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessor/repeat.hpp
@@ -0,0 +1,51 @@
+
+#ifndef BOOST_MPL_AUX_PREPROCESSOR_REPEAT_HPP_INCLUDED
+#define BOOST_MPL_AUX_PREPROCESSOR_REPEAT_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/preprocessor/repeat.hpp,v $
+// $Date: 2004/09/02 15:40:56 $
+// $Revision: 1.5 $
+
+#include <boost/mpl/aux_/config/preprocessor.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES)
+
+# include <boost/preprocessor/cat.hpp>
+
+# define BOOST_MPL_PP_REPEAT(n,f,param) \
+ BOOST_PP_CAT(BOOST_MPL_PP_REPEAT_,n)(f,param) \
+ /**/
+
+# define BOOST_MPL_PP_REPEAT_0(f,p)
+# define BOOST_MPL_PP_REPEAT_1(f,p) f(0,0,p)
+# define BOOST_MPL_PP_REPEAT_2(f,p) f(0,0,p) f(0,1,p)
+# define BOOST_MPL_PP_REPEAT_3(f,p) f(0,0,p) f(0,1,p) f(0,2,p)
+# define BOOST_MPL_PP_REPEAT_4(f,p) f(0,0,p) f(0,1,p) f(0,2,p) f(0,3,p)
+# define BOOST_MPL_PP_REPEAT_5(f,p) f(0,0,p) f(0,1,p) f(0,2,p) f(0,3,p) f(0,4,p)
+# define BOOST_MPL_PP_REPEAT_6(f,p) f(0,0,p) f(0,1,p) f(0,2,p) f(0,3,p) f(0,4,p) f(0,5,p)
+# define BOOST_MPL_PP_REPEAT_7(f,p) f(0,0,p) f(0,1,p) f(0,2,p) f(0,3,p) f(0,4,p) f(0,5,p) f(0,6,p)
+# define BOOST_MPL_PP_REPEAT_8(f,p) f(0,0,p) f(0,1,p) f(0,2,p) f(0,3,p) f(0,4,p) f(0,5,p) f(0,6,p) f(0,7,p)
+# define BOOST_MPL_PP_REPEAT_9(f,p) f(0,0,p) f(0,1,p) f(0,2,p) f(0,3,p) f(0,4,p) f(0,5,p) f(0,6,p) f(0,7,p) f(0,8,p)
+# define BOOST_MPL_PP_REPEAT_10(f,p) f(0,0,p) f(0,1,p) f(0,2,p) f(0,3,p) f(0,4,p) f(0,5,p) f(0,6,p) f(0,7,p) f(0,8,p) f(0,9,p)
+
+#else
+
+# include <boost/preprocessor/repeat.hpp>
+
+# define BOOST_MPL_PP_REPEAT(n,f,param) \
+ BOOST_PP_REPEAT(n,f,param) \
+ /**/
+
+#endif
+
+#define BOOST_MPL_PP_REPEAT_IDENTITY_FUNC(unused1, unused2, x) x
+
+#endif // BOOST_MPL_AUX_PREPROCESSOR_REPEAT_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/preprocessor/sub.hpp b/boost/boost/mpl/aux_/preprocessor/sub.hpp
new file mode 100644
index 00000000000..38b88876827
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessor/sub.hpp
@@ -0,0 +1,65 @@
+
+#ifndef BOOST_MPL_AUX_PREPROCESSOR_SUB_HPP_INCLUDED
+#define BOOST_MPL_AUX_PREPROCESSOR_SUB_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/preprocessor/sub.hpp,v $
+// $Date: 2004/09/02 15:40:56 $
+// $Revision: 1.7 $
+
+#include <boost/mpl/aux_/config/preprocessor.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES)
+
+# include <boost/mpl/aux_/preprocessor/tuple.hpp>
+
+#if defined(BOOST_MPL_CFG_BROKEN_PP_MACRO_EXPANSION)
+# include <boost/preprocessor/cat.hpp>
+
+# define BOOST_MPL_PP_SUB(i,j) \
+ BOOST_MPL_PP_SUB_DELAY(i,j) \
+ /**/
+
+# define BOOST_MPL_PP_SUB_DELAY(i,j) \
+ BOOST_PP_CAT(BOOST_MPL_PP_TUPLE_11_ELEM_##i,BOOST_MPL_PP_SUB_##j) \
+ /**/
+#else
+# define BOOST_MPL_PP_SUB(i,j) \
+ BOOST_MPL_PP_SUB_DELAY(i,j) \
+ /**/
+
+# define BOOST_MPL_PP_SUB_DELAY(i,j) \
+ BOOST_MPL_PP_TUPLE_11_ELEM_##i BOOST_MPL_PP_SUB_##j \
+ /**/
+#endif
+
+# define BOOST_MPL_PP_SUB_0 (0,1,2,3,4,5,6,7,8,9,10)
+# define BOOST_MPL_PP_SUB_1 (0,0,1,2,3,4,5,6,7,8,9)
+# define BOOST_MPL_PP_SUB_2 (0,0,0,1,2,3,4,5,6,7,8)
+# define BOOST_MPL_PP_SUB_3 (0,0,0,0,1,2,3,4,5,6,7)
+# define BOOST_MPL_PP_SUB_4 (0,0,0,0,0,1,2,3,4,5,6)
+# define BOOST_MPL_PP_SUB_5 (0,0,0,0,0,0,1,2,3,4,5)
+# define BOOST_MPL_PP_SUB_6 (0,0,0,0,0,0,0,1,2,3,4)
+# define BOOST_MPL_PP_SUB_7 (0,0,0,0,0,0,0,0,1,2,3)
+# define BOOST_MPL_PP_SUB_8 (0,0,0,0,0,0,0,0,0,1,2)
+# define BOOST_MPL_PP_SUB_9 (0,0,0,0,0,0,0,0,0,0,1)
+# define BOOST_MPL_PP_SUB_10 (0,0,0,0,0,0,0,0,0,0,0)
+
+#else
+
+# include <boost/preprocessor/arithmetic/sub.hpp>
+
+# define BOOST_MPL_PP_SUB(i,j) \
+ BOOST_PP_SUB(i,j) \
+ /**/
+
+#endif
+
+#endif // BOOST_MPL_AUX_PREPROCESSOR_SUB_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/preprocessor/token_equal.hpp b/boost/boost/mpl/aux_/preprocessor/token_equal.hpp
new file mode 100644
index 00000000000..6ec4de813fd
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessor/token_equal.hpp
@@ -0,0 +1,56 @@
+
+#ifndef BOOST_MPL_AUX_PREPROCESSOR_TOKEN_EQUAL_HPP_INCLUDED
+#define BOOST_MPL_AUX_PREPROCESSOR_TOKEN_EQUAL_HPP_INCLUDED
+
+// Copyright Paul Mensonides 2003
+// Copyright Aleksey Gurtovoy 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/preprocessor/token_equal.hpp,v $
+// $Date: 2004/09/02 15:40:56 $
+// $Revision: 1.3 $
+
+#include <boost/mpl/aux_/preprocessor/is_seq.hpp>
+
+#include <boost/preprocessor/if.hpp>
+#include <boost/preprocessor/logical/bitand.hpp>
+#include <boost/preprocessor/logical/compl.hpp>
+#include <boost/preprocessor/tuple/eat.hpp>
+#include <boost/preprocessor/cat.hpp>
+
+// compares tokens 'a' and 'b' for equality:
+//
+// #define BOOST_MPL_PP_TOKEN_EQUAL_apple(x) x
+// #define BOOST_MPL_PP_TOKEN_EQUAL_orange(x) x
+//
+// BOOST_PP_ASSERT( BOOST_PP_NOT( BOOST_MPL_PP_TOKEN_EQUAL(apple, abc) ) )
+// BOOST_PP_ASSERT( BOOST_PP_NOT( BOOST_MPL_PP_TOKEN_EQUAL(abc, apple) ) )
+// BOOST_PP_ASSERT( BOOST_PP_NOT( BOOST_MPL_PP_TOKEN_EQUAL(apple, orange) ) )
+// BOOST_PP_ASSERT( BOOST_MPL_PP_TOKEN_EQUAL(apple, apple) )
+// BOOST_PP_ASSERT( BOOST_MPL_PP_TOKEN_EQUAL(orange, orange) )
+
+#define BOOST_MPL_PP_TOKEN_EQUAL(a, b) \
+ BOOST_PP_IIF( \
+ BOOST_PP_BITAND( \
+ BOOST_MPL_PP_IS_SEQ( BOOST_PP_CAT(BOOST_MPL_PP_TOKEN_EQUAL_, a)((unused)) ) \
+ , BOOST_MPL_PP_IS_SEQ( BOOST_PP_CAT(BOOST_MPL_PP_TOKEN_EQUAL_, b)((unused)) ) \
+ ) \
+ , BOOST_MPL_PP_TOKEN_EQUAL_I \
+ , 0 BOOST_PP_TUPLE_EAT(2) \
+ )(a, b) \
+/**/
+
+#define BOOST_MPL_PP_TOKEN_EQUAL_I(a, b) \
+ BOOST_PP_COMPL(BOOST_MPL_PP_IS_SEQ( \
+ BOOST_MPL_PP_TOKEN_EQUAL_ ## a( \
+ BOOST_MPL_PP_TOKEN_EQUAL_ ## b \
+ )((unused)) \
+ )) \
+/**/
+
+#endif // BOOST_MPL_AUX_PREPROCESSOR_TOKEN_EQUAL_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/preprocessor/tuple.hpp b/boost/boost/mpl/aux_/preprocessor/tuple.hpp
new file mode 100644
index 00000000000..b2459e53bf9
--- /dev/null
+++ b/boost/boost/mpl/aux_/preprocessor/tuple.hpp
@@ -0,0 +1,29 @@
+
+#ifndef BOOST_MPL_AUX_PREPROCESSOR_TUPLE_HPP_INCLUDED
+#define BOOST_MPL_AUX_PREPROCESSOR_TUPLE_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/preprocessor/tuple.hpp,v $
+// $Date: 2004/09/02 15:40:56 $
+// $Revision: 1.5 $
+
+#define BOOST_MPL_PP_TUPLE_11_ELEM_0(e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10) e0
+#define BOOST_MPL_PP_TUPLE_11_ELEM_1(e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10) e1
+#define BOOST_MPL_PP_TUPLE_11_ELEM_2(e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10) e2
+#define BOOST_MPL_PP_TUPLE_11_ELEM_3(e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10) e3
+#define BOOST_MPL_PP_TUPLE_11_ELEM_4(e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10) e4
+#define BOOST_MPL_PP_TUPLE_11_ELEM_5(e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10) e5
+#define BOOST_MPL_PP_TUPLE_11_ELEM_6(e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10) e6
+#define BOOST_MPL_PP_TUPLE_11_ELEM_7(e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10) e7
+#define BOOST_MPL_PP_TUPLE_11_ELEM_8(e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10) e8
+#define BOOST_MPL_PP_TUPLE_11_ELEM_9(e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10) e9
+#define BOOST_MPL_PP_TUPLE_11_ELEM_10(e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10) e10
+
+#endif // BOOST_MPL_AUX_PREPROCESSOR_TUPLE_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/ptr_to_ref.hpp b/boost/boost/mpl/aux_/ptr_to_ref.hpp
new file mode 100644
index 00000000000..49c74c96824
--- /dev/null
+++ b/boost/boost/mpl/aux_/ptr_to_ref.hpp
@@ -0,0 +1,46 @@
+
+#ifndef BOOST_MPL_AUX_PTR_TO_REF_HPP_INCLUDED
+#define BOOST_MPL_AUX_PTR_TO_REF_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/ptr_to_ref.hpp,v $
+// $Date: 2005/06/22 15:20:18 $
+// $Revision: 1.5 $
+
+#include <boost/mpl/aux_/static_cast.hpp>
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+
+#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) \
+ || ( BOOST_WORKAROUND(__EDG_VERSION__, <= 245) \
+ && !(defined(__STD_STRICT_ANSI) \
+ || defined(__STD_STRICT_ANSI_ERRORS)) )
+
+# define BOOST_MPL_AUX_PTR_TO_REF(X) \
+ *BOOST_MPL_AUX_STATIC_CAST(X*, 0) \
+/**/
+
+#else
+
+# define BOOST_MPL_AUX_PTR_TO_REF(X) \
+ aux::ptr_to_ref(BOOST_MPL_AUX_STATIC_CAST(X*, 0)) \
+/**/
+
+#endif
+
+
+namespace boost { namespace mpl { namespace aux {
+
+template< typename T > static T const& ptr_to_ref(T*);
+
+}}}
+
+#endif // BOOST_MPL_AUX_PTR_TO_REF_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/push_back_impl.hpp b/boost/boost/mpl/aux_/push_back_impl.hpp
new file mode 100644
index 00000000000..f296e72b930
--- /dev/null
+++ b/boost/boost/mpl/aux_/push_back_impl.hpp
@@ -0,0 +1,55 @@
+
+#ifndef BOOST_MPL_AUX_PUSH_BACK_IMPL_HPP_INCLUDED
+#define BOOST_MPL_AUX_PUSH_BACK_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/push_back_impl.hpp,v $
+// $Date: 2004/09/02 15:40:44 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/push_back_fwd.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>
+
+namespace boost { namespace mpl {
+
+// 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 {};
+};
+
+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,int> >
+ {
+#else
+ {
+ typedef aux::has_type< push_back<Seq,int> > type;
+ BOOST_STATIC_CONSTANT(bool, value =
+ (aux::has_type< push_back<Seq,int> >::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/boost/boost/mpl/aux_/push_front_impl.hpp b/boost/boost/mpl/aux_/push_front_impl.hpp
new file mode 100644
index 00000000000..6cef9442584
--- /dev/null
+++ b/boost/boost/mpl/aux_/push_front_impl.hpp
@@ -0,0 +1,56 @@
+
+#ifndef BOOST_MPL_AUX_PUSH_FRONT_IMPL_HPP_INCLUDED
+#define BOOST_MPL_AUX_PUSH_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/push_front_impl.hpp,v $
+// $Date: 2004/09/02 15:40:44 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/push_front_fwd.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>
+
+namespace boost { namespace mpl {
+
+// 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 {};
+};
+
+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,int> >
+ {
+#else
+ {
+ typedef aux::has_type< push_front<Seq,int> > type;
+ BOOST_STATIC_CONSTANT(bool, value =
+ (aux::has_type< push_front<Seq,int> >::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/boost/boost/mpl/aux_/range_c/O1_size.hpp b/boost/boost/mpl/aux_/range_c/O1_size.hpp
new file mode 100644
index 00000000000..ae5545faaff
--- /dev/null
+++ b/boost/boost/mpl/aux_/range_c/O1_size.hpp
@@ -0,0 +1,31 @@
+
+#ifndef BOOST_MPL_AUX_RANGE_C_O1_SIZE_HPP_INCLUDED
+#define BOOST_MPL_AUX_RANGE_C_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/range_c/O1_size.hpp,v $
+// $Date: 2004/09/02 15:40:56 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/O1_size_fwd.hpp>
+#include <boost/mpl/aux_/range_c/size.hpp>
+#include <boost/mpl/aux_/range_c/tag.hpp>
+
+namespace boost { namespace mpl {
+
+template<>
+struct O1_size_impl< aux::half_open_range_tag >
+ : size_impl< aux::half_open_range_tag >
+{
+};
+
+}}
+
+#endif // BOOST_MPL_AUX_RANGE_C_O1_SIZE_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/range_c/back.hpp b/boost/boost/mpl/aux_/range_c/back.hpp
new file mode 100644
index 00000000000..9f92d961589
--- /dev/null
+++ b/boost/boost/mpl/aux_/range_c/back.hpp
@@ -0,0 +1,34 @@
+
+#ifndef BOOST_MPL_AUX_RANGE_C_BACK_HPP_INCLUDED
+#define BOOST_MPL_AUX_RANGE_C_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/range_c/back.hpp,v $
+// $Date: 2004/09/02 15:40:57 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/back_fwd.hpp>
+#include <boost/mpl/prior.hpp>
+#include <boost/mpl/aux_/range_c/tag.hpp>
+
+namespace boost { namespace mpl {
+
+template<>
+struct back_impl< aux::half_open_range_tag >
+{
+ template< typename Range > struct apply
+ {
+ typedef typename prior< typename Range::finish >::type type;
+ };
+};
+
+}}
+
+#endif // BOOST_MPL_AUX_RANGE_C_BACK_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/range_c/empty.hpp b/boost/boost/mpl/aux_/range_c/empty.hpp
new file mode 100644
index 00000000000..a3af984b34f
--- /dev/null
+++ b/boost/boost/mpl/aux_/range_c/empty.hpp
@@ -0,0 +1,37 @@
+
+#ifndef BOOST_MPL_AUX_RANGE_C_EMPTY_HPP_INCLUDED
+#define BOOST_MPL_AUX_RANGE_C_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/range_c/empty.hpp,v $
+// $Date: 2004/09/02 15:40:57 $
+// $Revision: 1.5 $
+
+#include <boost/mpl/empty_fwd.hpp>
+#include <boost/mpl/equal_to.hpp>
+#include <boost/mpl/aux_/range_c/tag.hpp>
+
+namespace boost { namespace mpl {
+
+template<>
+struct empty_impl< aux::half_open_range_tag >
+{
+ template< typename Range > struct apply
+ : equal_to<
+ typename Range::start
+ , typename Range::finish
+ >
+ {
+ };
+};
+
+}}
+
+#endif // BOOST_MPL_AUX_RANGE_C_EMPTY_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/range_c/front.hpp b/boost/boost/mpl/aux_/range_c/front.hpp
new file mode 100644
index 00000000000..97902b9b78c
--- /dev/null
+++ b/boost/boost/mpl/aux_/range_c/front.hpp
@@ -0,0 +1,33 @@
+
+#ifndef BOOST_MPL_AUX_RANGE_C_FRONT_HPP_INCLUDED
+#define BOOST_MPL_AUX_RANGE_C_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/range_c/front.hpp,v $
+// $Date: 2004/09/02 15:40:57 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/front_fwd.hpp>
+#include <boost/mpl/aux_/range_c/tag.hpp>
+
+namespace boost { namespace mpl {
+
+template<>
+struct front_impl< aux::half_open_range_tag >
+{
+ template< typename Range > struct apply
+ {
+ typedef typename Range::start type;
+ };
+};
+
+}}
+
+#endif // BOOST_MPL_AUX_RANGE_C_FRONT_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/range_c/iterator.hpp b/boost/boost/mpl/aux_/range_c/iterator.hpp
new file mode 100644
index 00000000000..726f602b14c
--- /dev/null
+++ b/boost/boost/mpl/aux_/range_c/iterator.hpp
@@ -0,0 +1,106 @@
+
+#ifndef BOOST_MPL_AUX_RANGE_C_ITERATOR_HPP_INCLUDED
+#define BOOST_MPL_AUX_RANGE_C_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/range_c/iterator.hpp,v $
+// $Date: 2004/12/20 17:52:43 $
+// $Revision: 1.8 $
+
+#include <boost/mpl/iterator_tags.hpp>
+#include <boost/mpl/advance_fwd.hpp>
+#include <boost/mpl/distance_fwd.hpp>
+#include <boost/mpl/next_prior.hpp>
+#include <boost/mpl/deref.hpp>
+#include <boost/mpl/plus.hpp>
+#include <boost/mpl/minus.hpp>
+#include <boost/mpl/aux_/value_wknd.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+
+namespace boost { namespace mpl {
+
+// theoretically will work on any discrete numeric type
+template< typename N > struct r_iter
+{
+ typedef aux::r_iter_tag tag;
+ typedef random_access_iterator_tag category;
+ typedef N type;
+
+#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+ typedef r_iter< typename mpl::next<N>::type > next;
+ typedef r_iter< typename mpl::prior<N>::type > prior;
+#endif
+};
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template<
+ typename N
+ >
+struct next< r_iter<N> >
+{
+ typedef r_iter< typename mpl::next<N>::type > type;
+};
+
+template<
+ typename N
+ >
+struct prior< r_iter<N> >
+{
+ typedef r_iter< typename mpl::prior<N>::type > type;
+};
+
+#endif
+
+
+template<> struct advance_impl<aux::r_iter_tag>
+{
+ template< typename Iter, typename Dist > struct apply
+ {
+ typedef typename deref<Iter>::type n_;
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+ typedef typename plus_impl<integral_c_tag,integral_c_tag>
+ ::template apply<n_,Dist>::type m_;
+#else
+ typedef typename plus<n_,Dist>::type m_;
+#endif
+ // agurt, 10/nov/04: to be generic, the code have to do something along
+ // the lines below...
+ //
+ // typedef typename apply_wrap1<
+ // numeric_cast< typename m_::tag, typename n_::tag >
+ // , m_
+ // >::type result_;
+ //
+ // ... meanwhile:
+
+ typedef integral_c<
+ typename aux::value_type_wknd<n_>::type
+ , BOOST_MPL_AUX_VALUE_WKND(m_)::value
+ > result_;
+
+ typedef r_iter<result_> type;
+ };
+};
+
+template<> struct distance_impl<aux::r_iter_tag>
+{
+ template< typename Iter1, typename Iter2 > struct apply
+ : minus<
+ typename Iter2::type
+ , typename Iter1::type
+ >
+ {
+ };
+};
+
+}}
+
+#endif // BOOST_MPL_AUX_RANGE_C_ITERATOR_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/range_c/size.hpp b/boost/boost/mpl/aux_/range_c/size.hpp
new file mode 100644
index 00000000000..3c71f1a5fae
--- /dev/null
+++ b/boost/boost/mpl/aux_/range_c/size.hpp
@@ -0,0 +1,37 @@
+
+#ifndef BOOST_MPL_AUX_RANGE_C_SIZE_HPP_INCLUDED
+#define BOOST_MPL_AUX_RANGE_C_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/range_c/size.hpp,v $
+// $Date: 2004/09/02 15:40:57 $
+// $Revision: 1.5 $
+
+#include <boost/mpl/size_fwd.hpp>
+#include <boost/mpl/minus.hpp>
+#include <boost/mpl/aux_/range_c/tag.hpp>
+
+namespace boost { namespace mpl {
+
+template<>
+struct size_impl< aux::half_open_range_tag >
+{
+ template< typename Range > struct apply
+ : minus<
+ typename Range::finish
+ , typename Range::start
+ >
+ {
+ };
+};
+
+}}
+
+#endif // BOOST_MPL_AUX_RANGE_C_SIZE_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/range_c/tag.hpp b/boost/boost/mpl/aux_/range_c/tag.hpp
new file mode 100644
index 00000000000..0951efe40f7
--- /dev/null
+++ b/boost/boost/mpl/aux_/range_c/tag.hpp
@@ -0,0 +1,24 @@
+
+#ifndef BOOST_MPL_AUX_RANGE_C_TAG_HPP_INCLUDED
+#define BOOST_MPL_AUX_RANGE_C_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/range_c/tag.hpp,v $
+// $Date: 2004/11/28 01:31:44 $
+// $Revision: 1.5 $
+
+namespace boost { namespace mpl { namespace aux {
+
+struct half_open_range_tag;
+struct r_iter_tag;
+
+}}}
+
+#endif // BOOST_MPL_AUX_RANGE_C_TAG_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/reverse_fold_impl.hpp b/boost/boost/mpl/aux_/reverse_fold_impl.hpp
new file mode 100644
index 00000000000..c5ea0e6f979
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/reverse_fold_impl.hpp,v $
+// $Date: 2004/10/01 16:29:34 $
+// $Revision: 1.3 $
+
+#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/boost/boost/mpl/aux_/reverse_fold_impl_body.hpp b/boost/boost/mpl/aux_/reverse_fold_impl_body.hpp
new file mode 100644
index 00000000000..30a3db2a5dc
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/reverse_fold_impl_body.hpp,v $
+// $Date: 2004/10/24 08:18:03 $
+// $Revision: 1.3 $
+
+# 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/boost/boost/mpl/aux_/reverse_iter_fold_impl.hpp b/boost/boost/mpl/aux_/reverse_iter_fold_impl.hpp
new file mode 100644
index 00000000000..9c4e253305c
--- /dev/null
+++ b/boost/boost/mpl/aux_/reverse_iter_fold_impl.hpp
@@ -0,0 +1,43 @@
+
+#ifndef BOOST_MPL_AUX_ITER_FOLD_BACKWARD_IMPL_HPP_INCLUDED
+#define BOOST_MPL_AUX_ITER_FOLD_BACKWARD_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/reverse_iter_fold_impl.hpp,v $
+// $Date: 2004/09/02 15:40:44 $
+// $Revision: 1.2 $
+
+#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) \
+ || 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_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 reverse_iter_fold
+# include <boost/mpl/aux_/reverse_fold_impl_body.hpp>
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#endif // BOOST_MPL_AUX_ITER_FOLD_BACKWARD_IMPL_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/sequence_wrapper.hpp b/boost/boost/mpl/aux_/sequence_wrapper.hpp
new file mode 100644
index 00000000000..40c8a716f5e
--- /dev/null
+++ b/boost/boost/mpl/aux_/sequence_wrapper.hpp
@@ -0,0 +1,292 @@
+
+// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION
+
+#if !defined(BOOST_PP_IS_ITERATING)
+
+///// header body
+
+// 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/sequence_wrapper.hpp,v $
+// $Date: 2005/10/04 18:01:35 $
+// $Revision: 1.5 $
+
+# include <boost/mpl/aux_/config/ctps.hpp>
+# include <boost/mpl/aux_/config/static_constant.hpp>
+# include <boost/mpl/aux_/nttp_decl.hpp>
+
+# include <boost/preprocessor/arithmetic/sub.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+# include <boost/preprocessor/enum_params_with_a_default.hpp>
+# include <boost/preprocessor/enum_params.hpp>
+# include <boost/preprocessor/enum.hpp>
+# include <boost/preprocessor/repeat.hpp>
+# include <boost/preprocessor/comma_if.hpp>
+# include <boost/preprocessor/iterate.hpp>
+
+#if defined(BOOST_MPL_PREPROCESSING_MODE)
+# undef LONG_MAX
+#endif
+
+namespace boost { namespace mpl {
+
+#if !defined(AUX778076_SEQUENCE_BASE_NAME)
+# define AUX778076_SEQUENCE_BASE_NAME AUX778076_SEQUENCE_NAME
+#endif
+
+#if !defined(AUX778076_SEQUENCE_INTEGRAL_WRAPPER)
+
+# define AUX778076_SEQUENCE_PARAM_NAME T
+# define AUX778076_SEQUENCE_TEMPLATE_PARAM typename T
+# define AUX778076_SEQUENCE_DEFAULT na
+
+# define AUX778076_SEQUENCE_NAME_N(n) \
+ BOOST_PP_CAT(AUX778076_SEQUENCE_BASE_NAME,n) \
+ /**/
+
+# define AUX778076_SEQUENCE_PARAMS() \
+ BOOST_PP_ENUM_PARAMS( \
+ AUX778076_SEQUENCE_LIMIT \
+ , AUX778076_SEQUENCE_TEMPLATE_PARAM \
+ ) \
+ /**/
+
+# define AUX778076_SEQUENCE_ARGS() \
+ BOOST_PP_ENUM_PARAMS( \
+ AUX778076_SEQUENCE_LIMIT \
+ , T \
+ ) \
+ /**/
+
+# define AUX778076_SEQUENCE_DEFAULT_PARAMS() \
+ BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT( \
+ AUX778076_SEQUENCE_LIMIT \
+ , AUX778076_SEQUENCE_TEMPLATE_PARAM \
+ , AUX778076_SEQUENCE_DEFAULT \
+ ) \
+ /**/
+
+# define AUX778076_SEQUENCE_N_PARAMS(n) \
+ BOOST_PP_ENUM_PARAMS(n, AUX778076_SEQUENCE_TEMPLATE_PARAM) \
+ /**/
+
+# define AUX778076_SEQUENCE_N_ARGS(n) \
+ BOOST_PP_ENUM_PARAMS(n, T) \
+ /**/
+
+# define AUX778076_SEQUENCE_N_PARTIAL_SPEC_ARGS(n) \
+ BOOST_PP_ENUM_PARAMS(n, T) \
+ BOOST_PP_COMMA_IF(n) \
+ BOOST_PP_ENUM( \
+ BOOST_PP_SUB_D(1,AUX778076_SEQUENCE_LIMIT,n) \
+ , BOOST_PP_TUPLE_ELEM_3_2 \
+ , AUX778076_SEQUENCE_DEFAULT \
+ ) \
+ /**/
+
+#else // AUX778076_SEQUENCE_INTEGRAL_WRAPPER
+
+# define AUX778076_SEQUENCE_PARAM_NAME C
+# define AUX778076_SEQUENCE_TEMPLATE_PARAM BOOST_MPL_AUX_NTTP_DECL(long, C)
+# define AUX778076_SEQUENCE_DEFAULT LONG_MAX
+
+# define AUX778076_SEQUENCE_PARAMS() \
+ typename T, BOOST_PP_ENUM_PARAMS( \
+ AUX778076_SEQUENCE_LIMIT \
+ , AUX778076_SEQUENCE_TEMPLATE_PARAM \
+ ) \
+ /**/
+
+# define AUX778076_SEQUENCE_ARGS() \
+ T, BOOST_PP_ENUM_PARAMS( \
+ AUX778076_SEQUENCE_LIMIT \
+ , C \
+ ) \
+ /**/
+
+# define AUX778076_SEQUENCE_DEFAULT_PARAMS() \
+ typename T, \
+ BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT( \
+ AUX778076_SEQUENCE_LIMIT \
+ , AUX778076_SEQUENCE_TEMPLATE_PARAM \
+ , AUX778076_SEQUENCE_DEFAULT \
+ ) \
+ /**/
+
+# define AUX778076_SEQUENCE_N_PARAMS(n) \
+ typename T BOOST_PP_COMMA_IF(n) \
+ BOOST_PP_ENUM_PARAMS(n, AUX778076_SEQUENCE_TEMPLATE_PARAM) \
+ /**/
+
+# define AUX778076_CONVERT_CN_TO(z,n,TARGET) \
+ TARGET(BOOST_PP_CAT(C,n)) \
+ /**/
+
+# define AUX778076_SEQUENCE_N_ARGS(n) \
+ T BOOST_PP_COMMA_IF(n) \
+ BOOST_PP_ENUM(n,AUX778076_CONVERT_CN_TO,T) \
+ /**/
+
+# define AUX778076_SEQUENCE_N_PARTIAL_SPEC_ARGS(n) \
+ T, BOOST_PP_ENUM_PARAMS(n, C) \
+ BOOST_PP_COMMA_IF(n) \
+ BOOST_PP_ENUM( \
+ BOOST_PP_SUB_D(1,AUX778076_SEQUENCE_LIMIT,n) \
+ , BOOST_PP_TUPLE_ELEM_3_2 \
+ , AUX778076_SEQUENCE_DEFAULT \
+ ) \
+ /**/
+
+#endif // AUX778076_SEQUENCE_INTEGRAL_WRAPPER
+
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+// forward declaration
+template<
+ AUX778076_SEQUENCE_DEFAULT_PARAMS()
+ >
+struct AUX778076_SEQUENCE_NAME;
+#else
+namespace aux {
+template< BOOST_MPL_AUX_NTTP_DECL(int, N) >
+struct BOOST_PP_CAT(AUX778076_SEQUENCE_NAME,_chooser);
+}
+#endif
+
+#define BOOST_PP_ITERATION_PARAMS_1 \
+ (3,(0, AUX778076_SEQUENCE_LIMIT, <boost/mpl/aux_/sequence_wrapper.hpp>))
+#include BOOST_PP_ITERATE()
+
+// real C++ version is already taken care of
+#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+namespace aux {
+// ???_count_args
+#define AUX778076_COUNT_ARGS_PREFIX AUX778076_SEQUENCE_NAME
+#define AUX778076_COUNT_ARGS_DEFAULT AUX778076_SEQUENCE_DEFAULT
+#define AUX778076_COUNT_ARGS_PARAM_NAME AUX778076_SEQUENCE_PARAM_NAME
+#define AUX778076_COUNT_ARGS_TEMPLATE_PARAM AUX778076_SEQUENCE_TEMPLATE_PARAM
+#define AUX778076_COUNT_ARGS_ARITY AUX778076_SEQUENCE_LIMIT
+#define AUX778076_COUNT_ARGS_USE_STANDARD_PP_PRIMITIVES
+#include <boost/mpl/aux_/count_args.hpp>
+
+template<
+ AUX778076_SEQUENCE_PARAMS()
+ >
+struct BOOST_PP_CAT(AUX778076_SEQUENCE_NAME,_impl)
+{
+ typedef aux::BOOST_PP_CAT(AUX778076_SEQUENCE_NAME,_count_args)<
+ BOOST_PP_ENUM_PARAMS(AUX778076_SEQUENCE_LIMIT, AUX778076_SEQUENCE_PARAM_NAME)
+ > arg_num_;
+
+ typedef typename aux::BOOST_PP_CAT(AUX778076_SEQUENCE_NAME,_chooser)< arg_num_::value >
+ ::template result_< AUX778076_SEQUENCE_ARGS() >::type type;
+};
+
+} // namespace aux
+
+template<
+ AUX778076_SEQUENCE_DEFAULT_PARAMS()
+ >
+struct AUX778076_SEQUENCE_NAME
+ : aux::BOOST_PP_CAT(AUX778076_SEQUENCE_NAME,_impl)<
+ AUX778076_SEQUENCE_ARGS()
+ >::type
+{
+ typedef typename aux::BOOST_PP_CAT(AUX778076_SEQUENCE_NAME,_impl)<
+ AUX778076_SEQUENCE_ARGS()
+ >::type type;
+};
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+# undef AUX778076_SEQUENCE_N_PARTIAL_SPEC_ARGS
+# undef AUX778076_CONVERT_CN_TO
+# undef AUX778076_SEQUENCE_N_ARGS
+# undef AUX778076_SEQUENCE_N_PARAMS
+# undef AUX778076_SEQUENCE_DEFAULT_PARAMS
+# undef AUX778076_SEQUENCE_ARGS
+# undef AUX778076_SEQUENCE_PARAMS
+# undef AUX778076_SEQUENCE_NAME_N
+# undef AUX778076_SEQUENCE_DEFAULT
+# undef AUX778076_SEQUENCE_TEMPLATE_PARAM
+# undef AUX778076_SEQUENCE_PARAM_NAME
+# undef AUX778076_SEQUENCE_LIMIT
+# undef AUX778076_SEQUENCE_BASE_NAME
+# undef AUX778076_SEQUENCE_NAME
+# undef AUX778076_SEQUENCE_INTEGRAL_WRAPPER
+
+}}
+
+///// iteration
+
+#else
+#define i_ BOOST_PP_FRAME_ITERATION(1)
+
+# if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+#if i_ == AUX778076_SEQUENCE_LIMIT
+
+/// primary template (not a specialization!)
+template<
+ AUX778076_SEQUENCE_N_PARAMS(i_)
+ >
+struct AUX778076_SEQUENCE_NAME
+ : AUX778076_SEQUENCE_NAME_N(i_)< AUX778076_SEQUENCE_N_ARGS(i_) >
+{
+ typedef typename AUX778076_SEQUENCE_NAME_N(i_)< AUX778076_SEQUENCE_N_ARGS(i_) >::type type;
+};
+
+#else
+
+template<
+ AUX778076_SEQUENCE_N_PARAMS(i_)
+ >
+struct AUX778076_SEQUENCE_NAME< AUX778076_SEQUENCE_N_PARTIAL_SPEC_ARGS(i_) >
+ : AUX778076_SEQUENCE_NAME_N(i_)< AUX778076_SEQUENCE_N_ARGS(i_) >
+{
+#if i_ > 0 || defined(AUX778076_SEQUENCE_INTEGRAL_WRAPPER)
+ typedef typename AUX778076_SEQUENCE_NAME_N(i_)< AUX778076_SEQUENCE_N_ARGS(i_) >::type type;
+#else
+ typedef AUX778076_SEQUENCE_NAME_N(i_)< AUX778076_SEQUENCE_N_ARGS(i_) >::type type;
+#endif
+};
+
+#endif // i_ == AUX778076_SEQUENCE_LIMIT
+
+# else
+
+namespace aux {
+
+template<>
+struct BOOST_PP_CAT(AUX778076_SEQUENCE_NAME,_chooser)<i_>
+{
+ template<
+ AUX778076_SEQUENCE_PARAMS()
+ >
+ struct result_
+ {
+#if i_ > 0 || defined(AUX778076_SEQUENCE_INTEGRAL_WRAPPER)
+ typedef typename AUX778076_SEQUENCE_NAME_N(i_)<
+ AUX778076_SEQUENCE_N_ARGS(i_)
+ >::type type;
+#else
+ typedef AUX778076_SEQUENCE_NAME_N(i_)<
+ AUX778076_SEQUENCE_N_ARGS(i_)
+ >::type type;
+#endif
+ };
+};
+
+} // namespace aux
+
+# endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#undef i_
+#endif // BOOST_PP_IS_ITERATING
diff --git a/boost/boost/mpl/aux_/shift_op.hpp b/boost/boost/mpl/aux_/shift_op.hpp
new file mode 100644
index 00000000000..de9da83d985
--- /dev/null
+++ b/boost/boost/mpl/aux_/shift_op.hpp
@@ -0,0 +1,87 @@
+
+// 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/shift_op.hpp,v $
+// $Date: 2004/09/07 08:51:32 $
+// $Revision: 1.4 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/integral_c.hpp>
+# include <boost/mpl/aux_/value_wknd.hpp>
+#endif
+
+#if !defined(AUX778076_OP_PREFIX)
+# define AUX778076_OP_PREFIX AUX778076_OP_NAME
+#endif
+
+#define AUX778076_OP_ARITY 2
+
+#include <boost/mpl/aux_/numeric_op.hpp>
+#include <boost/mpl/aux_/config/static_constant.hpp>
+#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 AUX778076_OP_PREFIX.hpp
+# include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#else
+
+# include <boost/mpl/aux_/config/integral.hpp>
+# include <boost/preprocessor/cat.hpp>
+
+namespace boost { namespace mpl {
+
+#if defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC)
+namespace aux {
+template< typename T, typename Shift, T n, Shift s >
+struct BOOST_PP_CAT(AUX778076_OP_PREFIX,_wknd)
+{
+ BOOST_STATIC_CONSTANT(T, value = (n AUX778076_OP_TOKEN s));
+ typedef integral_c<T,value> type;
+};
+}
+#endif
+
+template<>
+struct AUX778076_OP_IMPL_NAME<integral_c_tag,integral_c_tag>
+{
+ template< typename N, typename S > struct apply
+#if !defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC)
+ : integral_c<
+ typename N::value_type
+ , ( BOOST_MPL_AUX_VALUE_WKND(N)::value
+ AUX778076_OP_TOKEN BOOST_MPL_AUX_VALUE_WKND(S)::value
+ )
+ >
+#else
+ : aux::BOOST_PP_CAT(AUX778076_OP_PREFIX,_wknd)<
+ typename N::value_type
+ , typename S::value_type
+ , N::value
+ , S::value
+ >::type
+#endif
+ {
+ };
+};
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#undef AUX778076_OP_TAG_NAME
+#undef AUX778076_OP_IMPL_NAME
+#undef AUX778076_OP_ARITY
+#undef AUX778076_OP_PREFIX
+#undef AUX778076_OP_NAME
+#undef AUX778076_OP_TOKEN
diff --git a/boost/boost/mpl/aux_/single_element_iter.hpp b/boost/boost/mpl/aux_/single_element_iter.hpp
new file mode 100644
index 00000000000..410f2f802ca
--- /dev/null
+++ b/boost/boost/mpl/aux_/single_element_iter.hpp
@@ -0,0 +1,118 @@
+
+#ifndef BOOST_MPL_AUX_SINGLE_ELEMENT_ITER_HPP_INCLUDED
+#define BOOST_MPL_AUX_SINGLE_ELEMENT_ITER_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/single_element_iter.hpp,v $
+// $Date: 2004/11/28 01:47:44 $
+// $Revision: 1.8 $
+
+#include <boost/mpl/iterator_tags.hpp>
+#include <boost/mpl/advance_fwd.hpp>
+#include <boost/mpl/distance_fwd.hpp>
+#include <boost/mpl/next_prior.hpp>
+#include <boost/mpl/deref.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/aux_/nttp_decl.hpp>
+#include <boost/mpl/aux_/value_wknd.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+
+namespace boost { namespace mpl {
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+namespace aux {
+
+template< typename T, BOOST_MPL_AUX_NTTP_DECL(int, is_last_) >
+struct sel_iter;
+
+template< typename T >
+struct sel_iter<T,0>
+{
+ typedef random_access_iterator_tag category;
+ typedef sel_iter<T,1> next;
+ typedef T type;
+};
+
+template< typename T >
+struct sel_iter<T,1>
+{
+ typedef random_access_iterator_tag category;
+ typedef sel_iter<T,0> prior;
+};
+
+} // namespace aux
+
+template< typename T, BOOST_MPL_AUX_NTTP_DECL(int, is_last_), typename Distance >
+struct advance< aux::sel_iter<T,is_last_>,Distance>
+{
+ typedef aux::sel_iter<
+ T
+ , ( is_last_ + BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Distance) )
+ > type;
+};
+
+template<
+ typename T
+ , BOOST_MPL_AUX_NTTP_DECL(int, l1)
+ , BOOST_MPL_AUX_NTTP_DECL(int, l2)
+ >
+struct distance< aux::sel_iter<T,l1>, aux::sel_iter<T,l2> >
+ : int_<( l2 - l1 )>
+{
+};
+
+#else
+
+namespace aux {
+
+struct sel_iter_tag;
+
+template< typename T, BOOST_MPL_AUX_NTTP_DECL(int, is_last_) >
+struct sel_iter
+{
+ enum { pos_ = is_last_ };
+ typedef aux::sel_iter_tag tag;
+ typedef random_access_iterator_tag category;
+
+ typedef sel_iter<T,(is_last_ + 1)> next;
+ typedef sel_iter<T,(is_last_ - 1)> prior;
+ typedef T type;
+};
+
+} // namespace aux
+
+template<> struct advance_impl<aux::sel_iter_tag>
+{
+ template< typename Iterator, typename N > struct apply
+ {
+ enum { pos_ = Iterator::pos_, n_ = N::value };
+ typedef aux::sel_iter<
+ typename Iterator::type
+ , (pos_ + n_)
+ > type;
+ };
+};
+
+template<> struct distance_impl<aux::sel_iter_tag>
+{
+ template< typename Iter1, typename Iter2 > struct apply
+ {
+ enum { pos1_ = Iter1::pos_, pos2_ = Iter2::pos_ };
+ typedef int_<( pos2_ - pos1_ )> type;
+ BOOST_STATIC_CONSTANT(int, value = ( pos2_ - pos1_ ));
+ };
+};
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+}}
+
+#endif // BOOST_MPL_AUX_SINGLE_ELEMENT_ITER_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/size_impl.hpp b/boost/boost/mpl/aux_/size_impl.hpp
new file mode 100644
index 00000000000..d10ca8e6035
--- /dev/null
+++ b/boost/boost/mpl/aux_/size_impl.hpp
@@ -0,0 +1,52 @@
+
+#ifndef BOOST_MPL_AUX_SIZE_IMPL_HPP_INCLUDED
+#define BOOST_MPL_AUX_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/size_impl.hpp,v $
+// $Date: 2004/09/02 15:40:44 $
+// $Revision: 1.5 $
+
+#include <boost/mpl/size_fwd.hpp>
+#include <boost/mpl/begin_end.hpp>
+#include <boost/mpl/distance.hpp>
+#include <boost/mpl/aux_/traits_lambda_spec.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+namespace boost { namespace mpl {
+
+// default implementation; conrete sequences might override it by
+// specializing either the 'size_impl' or the primary 'size' template
+
+template< typename Tag >
+struct size_impl
+{
+ template< typename Sequence > struct apply
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x561))
+ : distance<
+ typename begin<Sequence>::type
+ , typename end<Sequence>::type
+ >
+ {
+#else
+ {
+ typedef typename distance<
+ typename begin<Sequence>::type
+ , typename end<Sequence>::type
+ >::type type;
+#endif
+ };
+};
+
+BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(1, size_impl)
+
+}}
+
+#endif // BOOST_MPL_AUX_SIZE_IMPL_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/sort_impl.hpp b/boost/boost/mpl/aux_/sort_impl.hpp
new file mode 100644
index 00000000000..b1e3b49424a
--- /dev/null
+++ b/boost/boost/mpl/aux_/sort_impl.hpp
@@ -0,0 +1,121 @@
+
+#ifndef BOOST_MPL_AUX_SORT_IMPL_HPP_INCLUDED
+#define BOOST_MPL_AUX_SORT_IMPL_HPP_INCLUDED
+
+// 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/libs/mpl for documentation.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/sort_impl.hpp,v $
+// $Date: 2004/11/28 01:47:44 $
+// $Revision: 1.5 $
+
+#include <boost/mpl/partition.hpp>
+#include <boost/mpl/copy.hpp>
+#include <boost/mpl/vector.hpp>
+#include <boost/mpl/back_inserter.hpp>
+#include <boost/mpl/front_inserter.hpp>
+#include <boost/mpl/iterator_range.hpp>
+#include <boost/mpl/joint_view.hpp>
+#include <boost/mpl/single_view.hpp>
+#include <boost/mpl/begin_end.hpp>
+#include <boost/mpl/empty.hpp>
+#include <boost/mpl/deref.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/apply.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/less.hpp>
+#include <boost/mpl/aux_/na.hpp>
+
+namespace boost { namespace mpl { namespace aux {
+
+template< typename Seq, typename Pred >
+struct quick_sort;
+
+// agurt, 10/nov/04: for the sake of deficeint compilers
+template< typename Pred, typename Pivot >
+struct quick_sort_pred
+{
+ template< typename T > struct apply
+ {
+ typedef typename apply2<Pred,T,Pivot>::type type;
+ };
+};
+
+template<
+ typename Seq
+ , typename Pred
+ >
+struct quick_sort_impl
+{
+ typedef typename begin<Seq>::type pivot;
+ typedef typename partition<
+ iterator_range<
+ typename next<pivot>::type
+ , typename end<Seq>::type
+ >
+ , protect< aux::quick_sort_pred< Pred, typename deref<pivot>::type > >
+ , back_inserter< vector<> >
+ , back_inserter< vector<> >
+ >::type partitioned;
+
+ typedef typename quick_sort< typename partitioned::first, Pred >::type part1;
+ typedef typename quick_sort< typename partitioned::second, Pred >::type part2;
+
+ typedef joint_view<
+ joint_view< part1, single_view< typename deref<pivot>::type > >
+ , part2
+ > type;
+};
+
+template<
+ typename Seq
+ , typename Pred
+ >
+struct quick_sort
+ : eval_if<
+ empty<Seq>
+ , identity<Seq>
+ , quick_sort_impl<Seq,Pred>
+ >
+{
+};
+
+
+template <
+ typename Sequence
+ , typename Pred
+ , typename In
+ >
+struct sort_impl
+{
+ typedef typename quick_sort<
+ Sequence
+ , typename if_na<Pred,less<> >::type
+ >::type result_;
+
+ typedef typename copy<result_,In>::type type;
+};
+
+template <
+ typename Sequence
+ , typename Pred
+ , typename In
+ >
+struct reverse_sort_impl
+{
+ typedef typename quick_sort<
+ Sequence
+ , typename if_na<Pred,less<> >::type
+ >::type result_;
+
+ typedef typename reverse_copy<result_,In>::type type;
+};
+
+}}}
+
+#endif // BOOST_MPL_AUX_SORT_IMPL_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/static_cast.hpp b/boost/boost/mpl/aux_/static_cast.hpp
new file mode 100644
index 00000000000..5a46a1e0567
--- /dev/null
+++ b/boost/boost/mpl/aux_/static_cast.hpp
@@ -0,0 +1,27 @@
+
+#ifndef BOOST_MPL_AUX_STATIC_CAST_HPP_INCLUDED
+#define BOOST_MPL_AUX_STATIC_CAST_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/static_cast.hpp,v $
+// $Date: 2004/09/02 15:40:44 $
+// $Revision: 1.3 $
+
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x561)) \
+ || BOOST_WORKAROUND(__GNUC__, < 3) \
+ || BOOST_WORKAROUND(__MWERKS__, <= 0x3001)
+# define BOOST_MPL_AUX_STATIC_CAST(T, expr) (T)(expr)
+#else
+# define BOOST_MPL_AUX_STATIC_CAST(T, expr) static_cast<T>(expr)
+#endif
+
+#endif // BOOST_MPL_AUX_STATIC_CAST_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/template_arity.hpp b/boost/boost/mpl/aux_/template_arity.hpp
new file mode 100644
index 00000000000..cbabbe1e05e
--- /dev/null
+++ b/boost/boost/mpl/aux_/template_arity.hpp
@@ -0,0 +1,189 @@
+
+#if !defined(BOOST_PP_IS_ITERATING)
+
+///// header body
+
+#ifndef BOOST_MPL_AUX_TEMPLATE_ARITY_HPP_INCLUDED
+#define BOOST_MPL_AUX_TEMPLATE_ARITY_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/template_arity.hpp,v $
+// $Date: 2004/09/07 12:24:48 $
+// $Revision: 1.11 $
+
+#include <boost/mpl/aux_/config/ttp.hpp>
+#include <boost/mpl/aux_/config/lambda.hpp>
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/aux_/template_arity_fwd.hpp>
+# include <boost/mpl/int.hpp>
+# if !defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT)
+# if defined(BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING)
+# include <boost/mpl/aux_/type_wrapper.hpp>
+# endif
+# else
+# include <boost/mpl/aux_/has_rebind.hpp>
+# endif
+#endif
+
+#include <boost/mpl/aux_/config/static_constant.hpp>
+#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 template_arity.hpp
+# include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#else
+
+# if !defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT)
+# if defined(BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING)
+
+# include <boost/mpl/limits/arity.hpp>
+# include <boost/mpl/aux_/preprocessor/range.hpp>
+# include <boost/mpl/aux_/preprocessor/repeat.hpp>
+# include <boost/mpl/aux_/preprocessor/params.hpp>
+# include <boost/mpl/aux_/nttp_decl.hpp>
+
+# include <boost/preprocessor/seq/fold_left.hpp>
+# include <boost/preprocessor/comma_if.hpp>
+# include <boost/preprocessor/iterate.hpp>
+# include <boost/preprocessor/inc.hpp>
+# include <boost/preprocessor/cat.hpp>
+
+# define AUX778076_ARITY BOOST_PP_INC(BOOST_MPL_LIMIT_METAFUNCTION_ARITY)
+
+namespace boost { namespace mpl { namespace aux {
+
+template< BOOST_MPL_AUX_NTTP_DECL(int, N) > struct arity_tag
+{
+ typedef char (&type)[N + 1];
+};
+
+# define AUX778076_MAX_ARITY_OP(unused, state, i_) \
+ ( BOOST_PP_CAT(C,i_) > 0 ? BOOST_PP_CAT(C,i_) : state ) \
+/**/
+
+template<
+ BOOST_MPL_PP_PARAMS(AUX778076_ARITY, BOOST_MPL_AUX_NTTP_DECL(int, C))
+ >
+struct max_arity
+{
+ BOOST_STATIC_CONSTANT(int, value =
+ BOOST_PP_SEQ_FOLD_LEFT(
+ AUX778076_MAX_ARITY_OP
+ , -1
+ , BOOST_MPL_PP_RANGE(1, AUX778076_ARITY)
+ )
+ );
+};
+
+# undef AUX778076_MAX_ARITY_OP
+
+arity_tag<0>::type arity_helper(...);
+
+# define BOOST_PP_ITERATION_LIMITS (1, AUX778076_ARITY)
+# define BOOST_PP_FILENAME_1 <boost/mpl/aux_/template_arity.hpp>
+# include BOOST_PP_ITERATE()
+
+template< typename F, BOOST_MPL_AUX_NTTP_DECL(int, N) >
+struct template_arity_impl
+{
+ BOOST_STATIC_CONSTANT(int, value =
+ sizeof(arity_helper(type_wrapper<F>(),arity_tag<N>())) - 1
+ );
+};
+
+# define AUX778076_TEMPLATE_ARITY_IMPL_INVOCATION(unused, i_, F) \
+ BOOST_PP_COMMA_IF(i_) template_arity_impl<F,BOOST_PP_INC(i_)>::value \
+/**/
+
+template< typename F >
+struct template_arity
+{
+ BOOST_STATIC_CONSTANT(int, value = (
+ max_arity< BOOST_MPL_PP_REPEAT(
+ AUX778076_ARITY
+ , AUX778076_TEMPLATE_ARITY_IMPL_INVOCATION
+ , F
+ ) >::value
+ ));
+
+ typedef mpl::int_<value> type;
+};
+
+# undef AUX778076_TEMPLATE_ARITY_IMPL_INVOCATION
+
+# undef AUX778076_ARITY
+
+}}}
+
+# endif // BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING
+# else // BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT
+
+# include <boost/mpl/aux_/config/eti.hpp>
+
+namespace boost { namespace mpl { namespace aux {
+
+template< bool >
+struct template_arity_impl
+{
+ template< typename F > struct result_
+ : mpl::int_<-1>
+ {
+ };
+};
+
+template<>
+struct template_arity_impl<true>
+{
+ template< typename F > struct result_
+ : F::arity
+ {
+ };
+};
+
+template< typename F >
+struct template_arity
+ : template_arity_impl< ::boost::mpl::aux::has_rebind<F>::value >
+ ::template result_<F>
+{
+};
+
+#if defined(BOOST_MPL_CFG_MSVC_ETI_BUG)
+template<>
+struct template_arity<int>
+ : mpl::int_<-1>
+{
+};
+#endif
+
+}}}
+
+# endif // BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#endif // BOOST_MPL_AUX_TEMPLATE_ARITY_HPP_INCLUDED
+
+///// iteration
+
+#else
+#define i_ BOOST_PP_FRAME_ITERATION(1)
+
+template<
+ template< BOOST_MPL_PP_PARAMS(i_, typename P) > class F
+ , BOOST_MPL_PP_PARAMS(i_, typename T)
+ >
+typename arity_tag<i_>::type
+arity_helper(type_wrapper< F<BOOST_MPL_PP_PARAMS(i_, T)> >, arity_tag<i_>);
+
+#undef i_
+#endif // BOOST_PP_IS_ITERATING
diff --git a/boost/boost/mpl/aux_/template_arity_fwd.hpp b/boost/boost/mpl/aux_/template_arity_fwd.hpp
new file mode 100644
index 00000000000..faeeb03de04
--- /dev/null
+++ b/boost/boost/mpl/aux_/template_arity_fwd.hpp
@@ -0,0 +1,23 @@
+
+#ifndef BOOST_MPL_AUX_TEMPLATE_ARITY_FWD_HPP_INCLUDED
+#define BOOST_MPL_AUX_TEMPLATE_ARITY_FWD_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/template_arity_fwd.hpp,v $
+// $Date: 2004/09/02 15:40:44 $
+// $Revision: 1.4 $
+
+namespace boost { namespace mpl { namespace aux {
+
+template< typename F > struct template_arity;
+
+}}}
+
+#endif // BOOST_MPL_AUX_TEMPLATE_ARITY_FWD_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/test.hpp b/boost/boost/mpl/aux_/test.hpp
new file mode 100644
index 00000000000..5a60e03bf0e
--- /dev/null
+++ b/boost/boost/mpl/aux_/test.hpp
@@ -0,0 +1,32 @@
+
+#ifndef BOOST_MPL_AUX_TEST_HPP_INCLUDED
+#define BOOST_MPL_AUX_TEST_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/test.hpp,v $
+// $Date: 2006/02/28 22:56:33 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/aux_/test/test_case.hpp>
+#include <boost/mpl/aux_/test/data.hpp>
+#include <boost/mpl/aux_/test/assert.hpp>
+#include <boost/detail/lightweight_test.hpp>
+
+#include <boost/type_traits/is_same.hpp>
+
+int main()
+{
+ return boost::report_errors();
+}
+
+using namespace boost;
+using namespace mpl;
+
+#endif // BOOST_MPL_AUX_TEST_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/test/assert.hpp b/boost/boost/mpl/aux_/test/assert.hpp
new file mode 100644
index 00000000000..ab37bd4b81c
--- /dev/null
+++ b/boost/boost/mpl/aux_/test/assert.hpp
@@ -0,0 +1,29 @@
+
+#ifndef BOOST_MPL_AUX_TEST_ASSERT_HPP_INCLUDED
+#define BOOST_MPL_AUX_TEST_ASSERT_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/test/assert.hpp,v $
+// $Date: 2004/10/01 16:29:37 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/assert.hpp>
+#include <boost/preprocessor/cat.hpp>
+
+#define MPL_ASSERT(pred) BOOST_MPL_ASSERT(pred)
+#define MPL_ASSERT_NOT(pred) BOOST_MPL_ASSERT_NOT(pred)
+#define MPL_ASSERT_MSG(c, msg, types) BOOST_MPL_ASSERT_MSG(c, msg, types)
+#define MPL_ASSERT_RELATION(x, rel, y) BOOST_MPL_ASSERT_RELATION(x, rel, y)
+
+#define MPL_ASSERT_INSTANTIATION(x) \
+ enum { BOOST_PP_CAT(instantiation_test, __LINE__) = sizeof( x ) } \
+/**/
+
+#endif // BOOST_MPL_AUX_TEST_ASSERT_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/test/data.hpp b/boost/boost/mpl/aux_/test/data.hpp
new file mode 100644
index 00000000000..59799051c70
--- /dev/null
+++ b/boost/boost/mpl/aux_/test/data.hpp
@@ -0,0 +1,25 @@
+
+#ifndef BOOST_MPL_AUX_TEST_DATA_HPP_INCLUDED
+#define BOOST_MPL_AUX_TEST_DATA_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/test/data.hpp,v $
+// $Date: 2004/09/02 15:40:57 $
+// $Revision: 1.3 $
+
+#include <boost/noncopyable.hpp>
+
+enum enum_ {};
+struct UDT {};
+struct incomplete;
+class abstract { public: virtual ~abstract() = 0; };
+using boost::noncopyable;
+
+#endif // BOOST_MPL_AUX_TEST_DATA_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/test/test_case.hpp b/boost/boost/mpl/aux_/test/test_case.hpp
new file mode 100644
index 00000000000..d946359d9b8
--- /dev/null
+++ b/boost/boost/mpl/aux_/test/test_case.hpp
@@ -0,0 +1,21 @@
+
+#ifndef BOOST_MPL_AUX_TEST_TEST_CASE_HPP_INCLUDED
+#define BOOST_MPL_AUX_TEST_TEST_CASE_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/test/test_case.hpp,v $
+// $Date: 2004/09/02 15:40:57 $
+// $Revision: 1.3 $
+
+#include <boost/preprocessor/cat.hpp>
+
+#define MPL_TEST_CASE() void BOOST_PP_CAT(test,__LINE__)()
+
+#endif // BOOST_MPL_AUX_TEST_TEST_CASE_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/traits_lambda_spec.hpp b/boost/boost/mpl/aux_/traits_lambda_spec.hpp
new file mode 100644
index 00000000000..6c9d47b2de8
--- /dev/null
+++ b/boost/boost/mpl/aux_/traits_lambda_spec.hpp
@@ -0,0 +1,56 @@
+
+#ifndef BOOST_MPL_AUX_TRAITS_LAMBDA_SPEC_HPP_INCLUDED
+#define BOOST_MPL_AUX_TRAITS_LAMBDA_SPEC_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/traits_lambda_spec.hpp,v $
+// $Date: 2004/09/02 15:40:44 $
+// $Revision: 1.6 $
+
+#include <boost/mpl/void.hpp>
+#include <boost/mpl/aux_/preprocessor/params.hpp>
+#include <boost/mpl/aux_/config/lambda.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT)
+
+# define BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(i, trait) /**/
+
+#elif !defined(BOOST_MPL_CFG_MSVC_ETI_BUG)
+
+# define BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(i, trait) \
+template<> struct trait<void_> \
+{ \
+ template< BOOST_MPL_PP_PARAMS(i, typename T) > struct apply \
+ { \
+ }; \
+}; \
+/**/
+
+#else
+
+# define BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(i, trait) \
+template<> struct trait<void_> \
+{ \
+ template< BOOST_MPL_PP_PARAMS(i, typename T) > struct apply \
+ { \
+ }; \
+}; \
+template<> struct trait<int> \
+{ \
+ template< BOOST_MPL_PP_PARAMS(i, typename T) > struct apply \
+ { \
+ typedef int type; \
+ }; \
+}; \
+/**/
+
+#endif // BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT
+
+#endif // BOOST_MPL_AUX_TRAITS_LAMBDA_SPEC_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/transform_iter.hpp b/boost/boost/mpl/aux_/transform_iter.hpp
new file mode 100644
index 00000000000..d35436065da
--- /dev/null
+++ b/boost/boost/mpl/aux_/transform_iter.hpp
@@ -0,0 +1,123 @@
+
+#ifndef BOOST_MPL_AUX_TRANSFORM_ITER_HPP_INCLUDED
+#define BOOST_MPL_AUX_TRANSFORM_ITER_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/transform_iter.hpp,v $
+// $Date: 2004/09/07 12:07:56 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/apply.hpp>
+#include <boost/mpl/iterator_tags.hpp>
+#include <boost/mpl/next.hpp>
+#include <boost/mpl/deref.hpp>
+#include <boost/mpl/aux_/lambda_spec.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template<
+ typename Iterator
+ , typename LastIterator
+ , typename F
+ >
+struct transform_iter
+{
+ typedef Iterator base;
+ typedef forward_iterator_tag category;
+ typedef transform_iter< typename mpl::next<base>::type,LastIterator,F > next;
+
+ typedef typename apply1<
+ F
+ , typename deref<base>::type
+ >::type type;
+};
+
+template<
+ typename LastIterator
+ , typename F
+ >
+struct transform_iter< LastIterator,LastIterator,F >
+{
+ typedef LastIterator base;
+ typedef forward_iterator_tag category;
+};
+
+#else
+
+template<
+ typename Iterator
+ , typename LastIterator
+ , typename F
+ >
+struct transform_iter;
+
+template< bool >
+struct transform_iter_impl
+{
+ template<
+ typename Iterator
+ , typename LastIterator
+ , typename F
+ >
+ struct result_
+ {
+ typedef Iterator base;
+ typedef forward_iterator_tag category;
+ typedef transform_iter< typename mpl::next<Iterator>::type,LastIterator,F > next;
+
+ typedef typename apply1<
+ F
+ , typename deref<Iterator>::type
+ >::type type;
+ };
+};
+
+template<>
+struct transform_iter_impl<true>
+{
+ template<
+ typename Iterator
+ , typename LastIterator
+ , typename F
+ >
+ struct result_
+ {
+ typedef Iterator base;
+ typedef forward_iterator_tag category;
+ };
+};
+
+template<
+ typename Iterator
+ , typename LastIterator
+ , typename F
+ >
+struct transform_iter
+ : transform_iter_impl<
+ ::boost::is_same<Iterator,LastIterator>::value
+ >::template result_< Iterator,LastIterator,F >
+{
+};
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+} // namespace aux
+
+BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(3, aux::transform_iter)
+
+}}
+
+#endif // BOOST_MPL_AUX_TRANSFORM_ITER_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/type_wrapper.hpp b/boost/boost/mpl/aux_/type_wrapper.hpp
new file mode 100644
index 00000000000..a92d0a3ab8f
--- /dev/null
+++ b/boost/boost/mpl/aux_/type_wrapper.hpp
@@ -0,0 +1,47 @@
+
+#ifndef BOOST_MPL_AUX_TYPE_WRAPPER_HPP_INCLUDED
+#define BOOST_MPL_AUX_TYPE_WRAPPER_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Peter Dimov 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/type_wrapper.hpp,v $
+// $Date: 2004/09/28 13:56:59 $
+// $Revision: 1.6 $
+
+#include <boost/mpl/aux_/config/ctps.hpp>
+
+namespace boost { namespace mpl { namespace aux {
+
+template< typename T > struct type_wrapper
+{
+ typedef T type;
+};
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+// agurt 08/may/03: a complicated way to extract the wrapped type; need it
+// mostly for the sake of GCC (3.2.x), which ICEs if you try to extract the
+// nested 'type' from 'type_wrapper<T>' when the latter was the result of a
+// 'typeof' expression
+template< typename T > struct wrapped_type;
+
+template< typename T > struct wrapped_type< type_wrapper<T> >
+{
+ typedef T type;
+};
+#else
+template< typename W > struct wrapped_type
+{
+ typedef typename W::type type;
+};
+#endif
+
+}}}
+
+#endif // BOOST_MPL_AUX_TYPE_WRAPPER_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/unwrap.hpp b/boost/boost/mpl/aux_/unwrap.hpp
new file mode 100644
index 00000000000..f8b1ee13646
--- /dev/null
+++ b/boost/boost/mpl/aux_/unwrap.hpp
@@ -0,0 +1,47 @@
+
+#ifndef BOOST_MPL_AUX_UNWRAP_HPP_INCLUDED
+#define BOOST_MPL_AUX_UNWRAP_HPP_INCLUDED
+
+// Copyright Peter Dimov and Multi Media Ltd 2001, 2002
+// Copyright David Abrahams 2001
+//
+// 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/unwrap.hpp,v $
+// $Date: 2004/09/02 15:40:44 $
+// $Revision: 1.3 $
+
+#include <boost/ref.hpp>
+
+namespace boost { namespace mpl { namespace aux {
+
+template< typename F >
+inline
+F& unwrap(F& f, long)
+{
+ return f;
+}
+
+template< typename F >
+inline
+F&
+unwrap(reference_wrapper<F>& f, int)
+{
+ return f;
+}
+
+template< typename F >
+inline
+F&
+unwrap(reference_wrapper<F> const& f, int)
+{
+ return f;
+}
+
+}}}
+
+#endif // BOOST_MPL_AUX_UNWRAP_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/value_wknd.hpp b/boost/boost/mpl/aux_/value_wknd.hpp
new file mode 100644
index 00000000000..b94b62486be
--- /dev/null
+++ b/boost/boost/mpl/aux_/value_wknd.hpp
@@ -0,0 +1,89 @@
+
+#ifndef BOOST_MPL_AUX_VALUE_WKND_HPP_INCLUDED
+#define BOOST_MPL_AUX_VALUE_WKND_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/value_wknd.hpp,v $
+// $Date: 2004/12/20 17:51:57 $
+// $Revision: 1.14 $
+
+#include <boost/mpl/aux_/static_cast.hpp>
+#include <boost/mpl/aux_/config/integral.hpp>
+#include <boost/mpl/aux_/config/eti.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#if defined(BOOST_MPL_CFG_BCC_INTEGRAL_CONSTANTS) \
+ || defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG)
+
+# include <boost/mpl/int.hpp>
+
+namespace boost { namespace mpl { namespace aux {
+template< typename C_ > struct value_wknd
+ : C_
+{
+};
+
+#if defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG)
+template<> struct value_wknd<int>
+ : int_<1>
+{
+ using int_<1>::value;
+};
+#endif
+}}}
+
+
+#if !defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG)
+# define BOOST_MPL_AUX_VALUE_WKND(C) \
+ ::BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::aux::value_wknd< C > \
+/**/
+# define BOOST_MPL_AUX_MSVC_VALUE_WKND(C) BOOST_MPL_AUX_VALUE_WKND(C)
+#else
+# define BOOST_MPL_AUX_VALUE_WKND(C) C
+# define BOOST_MPL_AUX_MSVC_VALUE_WKND(C) \
+ ::boost::mpl::aux::value_wknd< C > \
+/**/
+#endif
+
+#else // BOOST_MPL_CFG_BCC_INTEGRAL_CONSTANTS
+
+# define BOOST_MPL_AUX_VALUE_WKND(C) C
+# define BOOST_MPL_AUX_MSVC_VALUE_WKND(C) C
+
+#endif
+
+#if BOOST_WORKAROUND(__EDG_VERSION__, <= 238)
+# define BOOST_MPL_AUX_NESTED_VALUE_WKND(T, C) \
+ BOOST_MPL_AUX_STATIC_CAST(T, C::value) \
+/**/
+#else
+# define BOOST_MPL_AUX_NESTED_VALUE_WKND(T, C) \
+ BOOST_MPL_AUX_VALUE_WKND(C)::value \
+/**/
+#endif
+
+
+namespace boost { namespace mpl { namespace aux {
+
+template< typename T > struct value_type_wknd
+{
+ typedef typename T::value_type type;
+};
+
+#if defined(BOOST_MPL_CFG_MSVC_ETI_BUG)
+template<> struct value_type_wknd<int>
+{
+ typedef int type;
+};
+#endif
+
+}}}
+
+#endif // BOOST_MPL_AUX_VALUE_WKND_HPP_INCLUDED
diff --git a/boost/boost/mpl/aux_/yes_no.hpp b/boost/boost/mpl/aux_/yes_no.hpp
new file mode 100644
index 00000000000..71504e940b5
--- /dev/null
+++ b/boost/boost/mpl/aux_/yes_no.hpp
@@ -0,0 +1,58 @@
+
+#ifndef BOOST_MPL_AUX_YES_NO_HPP_INCLUDED
+#define BOOST_MPL_AUX_YES_NO_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/aux_/yes_no.hpp,v $
+// $Date: 2005/08/25 16:27:21 $
+// $Revision: 1.8 $
+
+#include <boost/mpl/aux_/nttp_decl.hpp>
+#include <boost/mpl/aux_/config/arrays.hpp>
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+
+namespace boost { namespace mpl { namespace aux {
+
+typedef char (&no_tag)[1];
+typedef char (&yes_tag)[2];
+
+template< bool C_ > struct yes_no_tag
+{
+ typedef no_tag type;
+};
+
+template<> struct yes_no_tag<true>
+{
+ typedef yes_tag type;
+};
+
+
+template< BOOST_MPL_AUX_NTTP_DECL(long, n) > struct weighted_tag
+{
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ typedef char (&type)[n];
+#else
+ char buf[n];
+ typedef weighted_tag type;
+#endif
+};
+
+#if defined(BOOST_MPL_CFG_NO_DEPENDENT_ARRAY_TYPES)
+template<> struct weighted_tag<0>
+{
+ typedef char (&type)[1];
+};
+#endif
+
+}}}
+
+#endif // BOOST_MPL_AUX_YES_NO_HPP_INCLUDED
diff --git a/boost/boost/mpl/back.hpp b/boost/boost/mpl/back.hpp
new file mode 100644
index 00000000000..b140d06b1f5
--- /dev/null
+++ b/boost/boost/mpl/back.hpp
@@ -0,0 +1,39 @@
+
+#ifndef BOOST_MPL_BACK_HPP_INCLUDED
+#define BOOST_MPL_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/back.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/back_fwd.hpp>
+#include <boost/mpl/aux_/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)
+ >
+struct back
+ : back_impl< typename sequence_tag<Sequence>::type >
+ ::template apply< Sequence >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,back,(Sequence))
+};
+
+BOOST_MPL_AUX_NA_SPEC(1, back)
+
+}}
+
+#endif // BOOST_MPL_BACK_HPP_INCLUDED
diff --git a/boost/boost/mpl/back_fwd.hpp b/boost/boost/mpl/back_fwd.hpp
new file mode 100644
index 00000000000..c4892591bd3
--- /dev/null
+++ b/boost/boost/mpl/back_fwd.hpp
@@ -0,0 +1,24 @@
+
+#ifndef BOOST_MPL_BACK_FWD_HPP_INCLUDED
+#define BOOST_MPL_BACK_FWD_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/back_fwd.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.4 $
+
+namespace boost { namespace mpl {
+
+template< typename Tag > struct back_impl;
+template< typename Sequence > struct back;
+
+}}
+
+#endif // BOOST_MPL_BACK_FWD_HPP_INCLUDED
diff --git a/boost/boost/mpl/back_inserter.hpp b/boost/boost/mpl/back_inserter.hpp
new file mode 100644
index 00000000000..614231e82b9
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/back_inserter.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.2 $
+
+#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/boost/boost/mpl/base.hpp b/boost/boost/mpl/base.hpp
new file mode 100644
index 00000000000..8bc5a575752
--- /dev/null
+++ b/boost/boost/mpl/base.hpp
@@ -0,0 +1,35 @@
+
+#ifndef BOOST_MPL_BASE_HPP_INCLUDED
+#define BOOST_MPL_BASE_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/base.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.4 $
+
+#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 base
+{
+ typedef typename T::base type;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,base,(T))
+};
+
+BOOST_MPL_AUX_NA_SPEC(1, base)
+
+}}
+
+#endif // BOOST_MPL_BASE_HPP_INCLUDED
diff --git a/boost/boost/mpl/begin.hpp b/boost/boost/mpl/begin.hpp
new file mode 100644
index 00000000000..58378a69b6c
--- /dev/null
+++ b/boost/boost/mpl/begin.hpp
@@ -0,0 +1,19 @@
+
+#ifndef BOOST_MPL_BEGIN_HPP_INCLUDED
+#define BOOST_MPL_BEGIN_HPP_INCLUDED
+
+// 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/begin.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.2 $
+
+#include <boost/mpl/begin_end.hpp>
+
+#endif // BOOST_MPL_BEGIN_HPP_INCLUDED
diff --git a/boost/boost/mpl/begin_end.hpp b/boost/boost/mpl/begin_end.hpp
new file mode 100644
index 00000000000..d535501f6ac
--- /dev/null
+++ b/boost/boost/mpl/begin_end.hpp
@@ -0,0 +1,57 @@
+
+#ifndef BOOST_MPL_BEGIN_END_HPP_INCLUDED
+#define BOOST_MPL_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/begin_end.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/begin_end_fwd.hpp>
+#include <boost/mpl/aux_/begin_end_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 {
+
+// agurt, 13/sep/02: switched from inheritance to typedef; MSVC is more
+// happy this way (less ETI-related errors), and it doesn't affect
+// anything else
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+ >
+struct begin
+{
+ typedef typename sequence_tag<Sequence>::type tag_;
+ typedef typename begin_impl< tag_ >
+ ::template apply< Sequence >::type type;
+
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,begin,(Sequence))
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+ >
+struct end
+{
+ typedef typename sequence_tag<Sequence>::type tag_;
+ typedef typename end_impl< tag_ >
+ ::template apply< Sequence >::type type;
+
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,end,(Sequence))
+};
+
+BOOST_MPL_AUX_NA_SPEC(1, begin)
+BOOST_MPL_AUX_NA_SPEC(1, end)
+
+}}
+
+#endif // BOOST_MPL_BEGIN_END_HPP_INCLUDED
diff --git a/boost/boost/mpl/begin_end_fwd.hpp b/boost/boost/mpl/begin_end_fwd.hpp
new file mode 100644
index 00000000000..a8280f3fa46
--- /dev/null
+++ b/boost/boost/mpl/begin_end_fwd.hpp
@@ -0,0 +1,27 @@
+
+#ifndef BOOST_MPL_BEGIN_END_FWD_HPP_INCLUDED
+#define BOOST_MPL_BEGIN_END_FWD_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/begin_end_fwd.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.4 $
+
+namespace boost { namespace mpl {
+
+template< typename Tag > struct begin_impl;
+template< typename Tag > struct end_impl;
+
+template< typename Sequence > struct begin;
+template< typename Sequence > struct end;
+
+}}
+
+#endif // BOOST_MPL_BEGIN_END_FWD_HPP_INCLUDED
diff --git a/boost/boost/mpl/bind.hpp b/boost/boost/mpl/bind.hpp
new file mode 100644
index 00000000000..869eb956a43
--- /dev/null
+++ b/boost/boost/mpl/bind.hpp
@@ -0,0 +1,547 @@
+
+#if !defined(BOOST_PP_IS_ITERATING)
+
+///// header body
+
+#ifndef BOOST_MPL_BIND_HPP_INCLUDED
+#define BOOST_MPL_BIND_HPP_INCLUDED
+
+// Copyright Peter Dimov 2001
+// 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/bind.hpp,v $
+// $Date: 2004/10/26 14:51:04 $
+// $Revision: 1.13 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/bind_fwd.hpp>
+# include <boost/mpl/placeholders.hpp>
+# include <boost/mpl/next.hpp>
+# include <boost/mpl/protect.hpp>
+# include <boost/mpl/apply_wrap.hpp>
+# include <boost/mpl/limits/arity.hpp>
+# include <boost/mpl/aux_/na.hpp>
+# include <boost/mpl/aux_/arity_spec.hpp>
+# include <boost/mpl/aux_/type_wrapper.hpp>
+# include <boost/mpl/aux_/yes_no.hpp>
+# if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+# include <boost/type_traits/is_reference.hpp>
+# endif
+#endif
+
+#include <boost/mpl/aux_/config/bind.hpp>
+#include <boost/mpl/aux_/config/static_constant.hpp>
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+ && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+# if defined(BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT)
+# define BOOST_MPL_PREPROCESSED_HEADER basic_bind.hpp
+# else
+# define BOOST_MPL_PREPROCESSED_HEADER bind.hpp
+# endif
+# include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#else
+
+# include <boost/mpl/aux_/preprocessor/params.hpp>
+# include <boost/mpl/aux_/preprocessor/default_params.hpp>
+# include <boost/mpl/aux_/preprocessor/def_params_tail.hpp>
+# include <boost/mpl/aux_/preprocessor/partial_spec_params.hpp>
+# include <boost/mpl/aux_/preprocessor/ext_params.hpp>
+# include <boost/mpl/aux_/preprocessor/repeat.hpp>
+# include <boost/mpl/aux_/preprocessor/enum.hpp>
+# include <boost/mpl/aux_/preprocessor/add.hpp>
+# include <boost/mpl/aux_/config/dmc_ambiguous_ctps.hpp>
+# include <boost/mpl/aux_/config/ctps.hpp>
+# include <boost/mpl/aux_/config/ttp.hpp>
+# include <boost/mpl/aux_/config/dtp.hpp>
+# include <boost/mpl/aux_/nttp_decl.hpp>
+
+# include <boost/preprocessor/iterate.hpp>
+# include <boost/preprocessor/comma_if.hpp>
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/inc.hpp>
+
+namespace boost { namespace mpl {
+
+// local macros, #undef-ined at the end of the header
+# define AUX778076_APPLY \
+ BOOST_PP_CAT(apply_wrap,BOOST_MPL_LIMIT_METAFUNCTION_ARITY) \
+ /**/
+
+# if defined(BOOST_MPL_CFG_DMC_AMBIGUOUS_CTPS)
+# define AUX778076_DMC_PARAM() , int dummy_
+# else
+# define AUX778076_DMC_PARAM()
+# endif
+
+# define AUX778076_BIND_PARAMS(param) \
+ BOOST_MPL_PP_PARAMS( \
+ BOOST_MPL_LIMIT_METAFUNCTION_ARITY \
+ , param \
+ ) \
+ /**/
+
+# define AUX778076_BIND_DEFAULT_PARAMS(param, value) \
+ BOOST_MPL_PP_DEFAULT_PARAMS( \
+ BOOST_MPL_LIMIT_METAFUNCTION_ARITY \
+ , param \
+ , value \
+ ) \
+ /**/
+
+# define AUX778076_BIND_N_PARAMS(n, param) \
+ BOOST_PP_COMMA_IF(n) BOOST_MPL_PP_PARAMS(n, param) \
+ /**/
+
+# define AUX778076_BIND_N_SPEC_PARAMS(n, param, def) \
+ BOOST_PP_COMMA_IF(n) \
+ BOOST_MPL_PP_PARTIAL_SPEC_PARAMS(n, param, def) \
+ /**/
+
+#if !defined(BOOST_MPL_CFG_NO_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES)
+# define AUX778076_BIND_NESTED_DEFAULT_PARAMS(param, value) \
+ AUX778076_BIND_DEFAULT_PARAMS(param, value) \
+ /**/
+#else
+# define AUX778076_BIND_NESTED_DEFAULT_PARAMS(param, value) \
+ AUX778076_BIND_PARAMS(param) \
+ /**/
+#endif
+
+namespace aux {
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template<
+ typename T, AUX778076_BIND_PARAMS(typename U)
+ >
+struct resolve_bind_arg
+{
+ typedef T type;
+};
+
+# if !defined(BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT)
+
+template<
+ typename T
+ , typename Arg
+ >
+struct replace_unnamed_arg
+{
+ typedef Arg next;
+ typedef T type;
+};
+
+template<
+ typename Arg
+ >
+struct replace_unnamed_arg< arg<-1>,Arg >
+{
+ typedef typename Arg::next next;
+ typedef Arg type;
+};
+
+# endif // BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT
+
+template<
+ BOOST_MPL_AUX_NTTP_DECL(int, N), AUX778076_BIND_PARAMS(typename U)
+ >
+struct resolve_bind_arg< arg<N>,AUX778076_BIND_PARAMS(U) >
+{
+ typedef typename AUX778076_APPLY<mpl::arg<N>, AUX778076_BIND_PARAMS(U)>::type type;
+};
+
+#if !defined(BOOST_MPL_CFG_NO_BIND_TEMPLATE)
+template<
+ typename F, AUX778076_BIND_PARAMS(typename T), AUX778076_BIND_PARAMS(typename U)
+ >
+struct resolve_bind_arg< bind<F,AUX778076_BIND_PARAMS(T)>,AUX778076_BIND_PARAMS(U) >
+{
+ typedef bind<F,AUX778076_BIND_PARAMS(T)> f_;
+ typedef typename AUX778076_APPLY<f_, AUX778076_BIND_PARAMS(U)>::type type;
+};
+#endif
+
+#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+// agurt, 15/jan/02: it's not a intended to be used as a function class, and
+// MSVC6.5 has problems with 'apply' name here (the code compiles, but doesn't
+// work), so I went with the 'result_' here, and in all other similar cases
+template< bool >
+struct resolve_arg_impl
+{
+ template< typename T, AUX778076_BIND_PARAMS(typename U) > struct result_
+ {
+ typedef T type;
+ };
+};
+
+template<>
+struct resolve_arg_impl<true>
+{
+ template< typename T, AUX778076_BIND_PARAMS(typename U) > struct result_
+ {
+ typedef typename AUX778076_APPLY<
+ T
+ , AUX778076_BIND_PARAMS(U)
+ >::type type;
+ };
+};
+
+// for 'resolve_bind_arg'
+template< typename T > struct is_bind_template;
+
+template<
+ typename T, AUX778076_BIND_PARAMS(typename U)
+ >
+struct resolve_bind_arg
+ : resolve_arg_impl< is_bind_template<T>::value >
+ ::template result_< T,AUX778076_BIND_PARAMS(U) >
+{
+};
+
+# if !defined(BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT)
+
+template< typename T >
+struct replace_unnamed_arg_impl
+{
+ template< typename Arg > struct result_
+ {
+ typedef Arg next;
+ typedef T type;
+ };
+};
+
+template<>
+struct replace_unnamed_arg_impl< arg<-1> >
+{
+ template< typename Arg > struct result_
+ {
+ typedef typename next<Arg>::type next;
+ typedef Arg type;
+ };
+};
+
+template< typename T, typename Arg >
+struct replace_unnamed_arg
+ : replace_unnamed_arg_impl<T>::template result_<Arg>
+{
+};
+
+# endif // BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT
+
+// agurt, 10/mar/02: the forward declaration has to appear before any of
+// 'is_bind_helper' overloads, otherwise MSVC6.5 issues an ICE on it
+template< BOOST_MPL_AUX_NTTP_DECL(int, arity_) > struct bind_chooser;
+
+aux::no_tag is_bind_helper(...);
+template< typename T > aux::no_tag is_bind_helper(protect<T>*);
+
+// overload for "main" form
+// agurt, 15/mar/02: MSVC 6.5 fails to properly resolve the overload
+// in case if we use 'aux::type_wrapper< bind<...> >' here, and all
+// 'bind' instantiations form a complete type anyway
+#if !defined(BOOST_MPL_CFG_NO_BIND_TEMPLATE)
+template<
+ typename F, AUX778076_BIND_PARAMS(typename T)
+ >
+aux::yes_tag is_bind_helper(bind<F,AUX778076_BIND_PARAMS(T)>*);
+#endif
+
+template< BOOST_MPL_AUX_NTTP_DECL(int, N) >
+aux::yes_tag is_bind_helper(arg<N>*);
+
+template< bool is_ref_ = true >
+struct is_bind_template_impl
+{
+ template< typename T > struct result_
+ {
+ BOOST_STATIC_CONSTANT(bool, value = false);
+ };
+};
+
+template<>
+struct is_bind_template_impl<false>
+{
+ template< typename T > struct result_
+ {
+ BOOST_STATIC_CONSTANT(bool, value =
+ sizeof(aux::is_bind_helper(static_cast<T*>(0)))
+ == sizeof(aux::yes_tag)
+ );
+ };
+};
+
+template< typename T > struct is_bind_template
+ : is_bind_template_impl< ::boost::detail::is_reference_impl<T>::value >
+ ::template result_<T>
+{
+};
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+} // namespace aux
+
+
+#define BOOST_PP_ITERATION_PARAMS_1 \
+ (3,(0, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, <boost/mpl/bind.hpp>))
+#include BOOST_PP_ITERATE()
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
+ && !defined(BOOST_MPL_CFG_NO_TEMPLATE_TEMPLATE_PARAMETERS)
+/// if_/eval_if specializations
+# define AUX778076_SPEC_NAME if_
+# define BOOST_PP_ITERATION_PARAMS_1 (3,(3, 3, <boost/mpl/bind.hpp>))
+# include BOOST_PP_ITERATE()
+
+#if !defined(BOOST_MPL_CFG_DMC_AMBIGUOUS_CTPS)
+# define AUX778076_SPEC_NAME eval_if
+# define BOOST_PP_ITERATION_PARAMS_1 (3,(3, 3, <boost/mpl/bind.hpp>))
+# include BOOST_PP_ITERATE()
+#endif
+#endif
+
+// real C++ version is already taken care of
+#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
+ && !defined(BOOST_MPL_CFG_NO_BIND_TEMPLATE)
+
+namespace aux {
+// apply_count_args
+#define AUX778076_COUNT_ARGS_PREFIX bind
+#define AUX778076_COUNT_ARGS_DEFAULT na
+#define AUX778076_COUNT_ARGS_ARITY BOOST_MPL_LIMIT_METAFUNCTION_ARITY
+#include <boost/mpl/aux_/count_args.hpp>
+}
+
+// bind
+template<
+ typename F, AUX778076_BIND_PARAMS(typename T) AUX778076_DMC_PARAM()
+ >
+struct bind
+ : aux::bind_chooser<
+ aux::bind_count_args<AUX778076_BIND_PARAMS(T)>::value
+ >::template result_< F,AUX778076_BIND_PARAMS(T) >::type
+{
+};
+
+BOOST_MPL_AUX_ARITY_SPEC(
+ BOOST_PP_INC(BOOST_MPL_LIMIT_METAFUNCTION_ARITY)
+ , bind
+ )
+
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(
+ BOOST_PP_INC(BOOST_MPL_LIMIT_METAFUNCTION_ARITY)
+ , bind
+ )
+
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+# undef AUX778076_BIND_NESTED_DEFAULT_PARAMS
+# undef AUX778076_BIND_N_SPEC_PARAMS
+# undef AUX778076_BIND_N_PARAMS
+# undef AUX778076_BIND_DEFAULT_PARAMS
+# undef AUX778076_BIND_PARAMS
+# undef AUX778076_DMC_PARAM
+# undef AUX778076_APPLY
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#endif // BOOST_MPL_BIND_HPP_INCLUDED
+
+///// iteration, depth == 1
+
+#elif BOOST_PP_ITERATION_DEPTH() == 1
+
+# define i_ BOOST_PP_FRAME_ITERATION(1)
+
+#if defined(AUX778076_SPEC_NAME)
+
+// lazy metafunction specialization
+template< template< BOOST_MPL_PP_PARAMS(i_, typename T) > class F, typename Tag >
+struct BOOST_PP_CAT(quote,i_);
+
+template< BOOST_MPL_PP_PARAMS(i_, typename T) > struct AUX778076_SPEC_NAME;
+
+template<
+ typename Tag AUX778076_BIND_N_PARAMS(i_, typename T)
+ >
+struct BOOST_PP_CAT(bind,i_)<
+ BOOST_PP_CAT(quote,i_)<AUX778076_SPEC_NAME,Tag>
+ AUX778076_BIND_N_PARAMS(i_,T)
+ >
+{
+ template<
+ AUX778076_BIND_NESTED_DEFAULT_PARAMS(typename U, na)
+ >
+ struct apply
+ {
+ private:
+ typedef mpl::arg<1> n1;
+# define BOOST_PP_ITERATION_PARAMS_2 (3,(1, i_, <boost/mpl/bind.hpp>))
+# include BOOST_PP_ITERATE()
+
+ typedef typename AUX778076_SPEC_NAME<
+ typename t1::type
+ , BOOST_MPL_PP_EXT_PARAMS(2, BOOST_PP_INC(i_), t)
+ >::type f_;
+
+ public:
+ typedef typename f_::type type;
+ };
+};
+
+#undef AUX778076_SPEC_NAME
+
+#else // AUX778076_SPEC_NAME
+
+template<
+ typename F AUX778076_BIND_N_PARAMS(i_, typename T) AUX778076_DMC_PARAM()
+ >
+struct BOOST_PP_CAT(bind,i_)
+{
+ template<
+ AUX778076_BIND_NESTED_DEFAULT_PARAMS(typename U, na)
+ >
+ struct apply
+ {
+ private:
+# if !defined(BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT)
+
+ typedef aux::replace_unnamed_arg< F,mpl::arg<1> > r0;
+ typedef typename r0::type a0;
+ typedef typename r0::next n1;
+ typedef typename aux::resolve_bind_arg<a0,AUX778076_BIND_PARAMS(U)>::type f_;
+ ///
+# else
+ typedef typename aux::resolve_bind_arg<F,AUX778076_BIND_PARAMS(U)>::type f_;
+
+# endif // BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT
+
+# if i_ > 0
+# define BOOST_PP_ITERATION_PARAMS_2 (3,(1, i_, <boost/mpl/bind.hpp>))
+# include BOOST_PP_ITERATE()
+# endif
+
+ public:
+
+# define AUX778076_ARG(unused, i_, t) \
+ BOOST_PP_COMMA_IF(i_) \
+ typename BOOST_PP_CAT(t,BOOST_PP_INC(i_))::type \
+/**/
+
+ typedef typename BOOST_PP_CAT(apply_wrap,i_)<
+ f_
+ BOOST_PP_COMMA_IF(i_) BOOST_MPL_PP_REPEAT(i_, AUX778076_ARG, t)
+ >::type type;
+
+# undef AUX778076_ARG
+ };
+};
+
+namespace aux {
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template<
+ typename F AUX778076_BIND_N_PARAMS(i_, typename T), AUX778076_BIND_PARAMS(typename U)
+ >
+struct resolve_bind_arg<
+ BOOST_PP_CAT(bind,i_)<F AUX778076_BIND_N_PARAMS(i_,T)>,AUX778076_BIND_PARAMS(U)
+ >
+{
+ typedef BOOST_PP_CAT(bind,i_)<F AUX778076_BIND_N_PARAMS(i_,T)> f_;
+ typedef typename AUX778076_APPLY<f_, AUX778076_BIND_PARAMS(U)>::type type;
+};
+
+#else
+
+template<
+ typename F AUX778076_BIND_N_PARAMS(i_, typename T)
+ >
+aux::yes_tag
+is_bind_helper(BOOST_PP_CAT(bind,i_)<F AUX778076_BIND_N_PARAMS(i_,T)>*);
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(BOOST_PP_INC(i_), BOOST_PP_CAT(bind,i_))
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(BOOST_PP_INC(i_), BOOST_PP_CAT(bind,i_))
+
+# if !defined(BOOST_MPL_CFG_NO_BIND_TEMPLATE)
+# if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+#if i_ == BOOST_MPL_LIMIT_METAFUNCTION_ARITY
+/// primary template (not a specialization!)
+template<
+ typename F AUX778076_BIND_N_PARAMS(i_, typename T) AUX778076_DMC_PARAM()
+ >
+struct bind
+ : BOOST_PP_CAT(bind,i_)<F AUX778076_BIND_N_PARAMS(i_,T) >
+{
+};
+#else
+template<
+ typename F AUX778076_BIND_N_PARAMS(i_, typename T) AUX778076_DMC_PARAM()
+ >
+struct bind< F AUX778076_BIND_N_SPEC_PARAMS(i_, T, na) >
+ : BOOST_PP_CAT(bind,i_)<F AUX778076_BIND_N_PARAMS(i_,T) >
+{
+};
+#endif
+
+# else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace aux {
+
+template<>
+struct bind_chooser<i_>
+{
+ template<
+ typename F, AUX778076_BIND_PARAMS(typename T)
+ >
+ struct result_
+ {
+ typedef BOOST_PP_CAT(bind,i_)< F AUX778076_BIND_N_PARAMS(i_,T) > type;
+ };
+};
+
+} // namespace aux
+
+# endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+# endif // BOOST_MPL_CFG_NO_BIND_TEMPLATE
+
+#endif // AUX778076_SPEC_NAME
+
+# undef i_
+
+///// iteration, depth == 2
+
+#elif BOOST_PP_ITERATION_DEPTH() == 2
+
+# define j_ BOOST_PP_FRAME_ITERATION(2)
+# if !defined(BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT)
+
+ typedef aux::replace_unnamed_arg< BOOST_PP_CAT(T,j_),BOOST_PP_CAT(n,j_) > BOOST_PP_CAT(r,j_);
+ typedef typename BOOST_PP_CAT(r,j_)::type BOOST_PP_CAT(a,j_);
+ typedef typename BOOST_PP_CAT(r,j_)::next BOOST_PP_CAT(n,BOOST_PP_INC(j_));
+ typedef aux::resolve_bind_arg<BOOST_PP_CAT(a,j_), AUX778076_BIND_PARAMS(U)> BOOST_PP_CAT(t,j_);
+ ///
+# else
+ typedef aux::resolve_bind_arg< BOOST_PP_CAT(T,j_),AUX778076_BIND_PARAMS(U)> BOOST_PP_CAT(t,j_);
+
+# endif
+# undef j_
+
+#endif // BOOST_PP_IS_ITERATING
diff --git a/boost/boost/mpl/bind_fwd.hpp b/boost/boost/mpl/bind_fwd.hpp
new file mode 100644
index 00000000000..dc2024bf19c
--- /dev/null
+++ b/boost/boost/mpl/bind_fwd.hpp
@@ -0,0 +1,99 @@
+
+#if !defined(BOOST_PP_IS_ITERATING)
+
+///// header body
+
+#ifndef BOOST_MPL_BIND_FWD_HPP_INCLUDED
+#define BOOST_MPL_BIND_FWD_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/bind_fwd.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.2 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/aux_/na.hpp>
+#endif
+
+#include <boost/mpl/aux_/config/bind.hpp>
+#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 bind_fwd.hpp
+# include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#else
+
+# include <boost/mpl/limits/arity.hpp>
+# include <boost/mpl/aux_/preprocessor/params.hpp>
+# include <boost/mpl/aux_/preprocessor/default_params.hpp>
+# include <boost/mpl/aux_/config/dmc_ambiguous_ctps.hpp>
+
+# include <boost/preprocessor/comma_if.hpp>
+# include <boost/preprocessor/iterate.hpp>
+# include <boost/preprocessor/cat.hpp>
+
+namespace boost { namespace mpl {
+
+// local macros, #undef-ined at the end of the header
+
+# if defined(BOOST_MPL_CFG_DMC_AMBIGUOUS_CTPS)
+# define AUX778076_DMC_PARAM() , int dummy_ = 0
+# else
+# define AUX778076_DMC_PARAM()
+# endif
+
+# define AUX778076_BIND_DEFAULT_PARAMS(param, value) \
+ BOOST_MPL_PP_DEFAULT_PARAMS( \
+ BOOST_MPL_LIMIT_METAFUNCTION_ARITY \
+ , param \
+ , value \
+ ) \
+ AUX778076_DMC_PARAM() \
+ /**/
+
+# define AUX778076_BIND_N_PARAMS(n, param) \
+ BOOST_PP_COMMA_IF(n) BOOST_MPL_PP_PARAMS(n, param) \
+ AUX778076_DMC_PARAM() \
+ /**/
+
+#if !defined(BOOST_MPL_CFG_NO_BIND_TEMPLATE)
+template<
+ typename F, AUX778076_BIND_DEFAULT_PARAMS(typename T, na)
+ >
+struct bind;
+#endif
+
+#define BOOST_PP_ITERATION_PARAMS_1 \
+ (3,(0, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, <boost/mpl/bind_fwd.hpp>))
+#include BOOST_PP_ITERATE()
+
+# undef AUX778076_BIND_N_PARAMS
+# undef AUX778076_BIND_DEFAULT_PARAMS
+# undef AUX778076_DMC_PARAM
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#endif // BOOST_MPL_BIND_FWD_HPP_INCLUDED
+
+///// iteration
+
+#else
+#define i_ BOOST_PP_FRAME_ITERATION(1)
+
+template<
+ typename F AUX778076_BIND_N_PARAMS(i_, typename T)
+ >
+struct BOOST_PP_CAT(bind,i_);
+
+#undef i_
+#endif // BOOST_PP_IS_ITERATING
diff --git a/boost/boost/mpl/bitand.hpp b/boost/boost/mpl/bitand.hpp
new file mode 100644
index 00000000000..50c82bf4888
--- /dev/null
+++ b/boost/boost/mpl/bitand.hpp
@@ -0,0 +1,23 @@
+
+#ifndef BOOST_MPL_BITAND_HPP_INCLUDED
+#define BOOST_MPL_BITAND_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/bitand.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.3 $
+
+#define AUX778076_OP_NAME bitand_
+#define AUX778076_OP_PREFIX bitand
+#define AUX778076_OP_TOKEN &
+#include <boost/mpl/aux_/arithmetic_op.hpp>
+
+#endif // BOOST_MPL_BITAND_HPP_INCLUDED
diff --git a/boost/boost/mpl/bitor.hpp b/boost/boost/mpl/bitor.hpp
new file mode 100644
index 00000000000..e17f4a0dddf
--- /dev/null
+++ b/boost/boost/mpl/bitor.hpp
@@ -0,0 +1,23 @@
+
+#ifndef BOOST_MPL_BITOR_HPP_INCLUDED
+#define BOOST_MPL_BITOR_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/bitor.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.3 $
+
+#define AUX778076_OP_NAME bitor_
+#define AUX778076_OP_PREFIX bitor
+#define AUX778076_OP_TOKEN |
+#include <boost/mpl/aux_/arithmetic_op.hpp>
+
+#endif // BOOST_MPL_BITOR_HPP_INCLUDED
diff --git a/boost/boost/mpl/bitwise.hpp b/boost/boost/mpl/bitwise.hpp
new file mode 100644
index 00000000000..abbf0dd960c
--- /dev/null
+++ b/boost/boost/mpl/bitwise.hpp
@@ -0,0 +1,24 @@
+
+#ifndef BOOST_MPL_BITWISE_HPP_INCLUDED
+#define BOOST_MPL_BITWISE_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+// Copyright Jaap Suter 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/bitwise.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.2 $
+
+#include <boost/mpl/bitand.hpp>
+#include <boost/mpl/bitor.hpp>
+#include <boost/mpl/bitxor.hpp>
+#include <boost/mpl/shift_left.hpp>
+#include <boost/mpl/shift_right.hpp>
+
+#endif // BOOST_MPL_BITWISE_HPP_INCLUDED
diff --git a/boost/boost/mpl/bitxor.hpp b/boost/boost/mpl/bitxor.hpp
new file mode 100644
index 00000000000..203b3a3c99c
--- /dev/null
+++ b/boost/boost/mpl/bitxor.hpp
@@ -0,0 +1,23 @@
+
+#ifndef BOOST_MPL_BITXOR_HPP_INCLUDED
+#define BOOST_MPL_BITXOR_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/bitxor.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.3 $
+
+#define AUX778076_OP_NAME bitxor_
+#define AUX778076_OP_PREFIX bitxor
+#define AUX778076_OP_TOKEN ^
+#include <boost/mpl/aux_/arithmetic_op.hpp>
+
+#endif // BOOST_MPL_BITXOR_HPP_INCLUDED
diff --git a/boost/boost/mpl/bool.hpp b/boost/boost/mpl/bool.hpp
new file mode 100644
index 00000000000..d48c3da42f7
--- /dev/null
+++ b/boost/boost/mpl/bool.hpp
@@ -0,0 +1,39 @@
+
+#ifndef BOOST_MPL_BOOL_HPP_INCLUDED
+#define BOOST_MPL_BOOL_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/bool.hpp,v $
+// $Date: 2004/09/26 09:54:25 $
+// $Revision: 1.6 $
+
+#include <boost/mpl/bool_fwd.hpp>
+#include <boost/mpl/integral_c_tag.hpp>
+#include <boost/mpl/aux_/config/static_constant.hpp>
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+
+template< bool C_ > struct bool_
+{
+ BOOST_STATIC_CONSTANT(bool, value = C_);
+ typedef integral_c_tag tag;
+ typedef bool_ type;
+ typedef bool value_type;
+ operator bool() const { return this->value; }
+};
+
+#if !defined(BOOST_NO_INCLASS_MEMBER_INITIALIZATION)
+template< bool C_ >
+bool const bool_<C_>::value;
+#endif
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+
+#endif // BOOST_MPL_BOOL_HPP_INCLUDED
diff --git a/boost/boost/mpl/bool_fwd.hpp b/boost/boost/mpl/bool_fwd.hpp
new file mode 100644
index 00000000000..806fa7bc93f
--- /dev/null
+++ b/boost/boost/mpl/bool_fwd.hpp
@@ -0,0 +1,33 @@
+
+#ifndef BOOST_MPL_BOOL_FWD_HPP_INCLUDED
+#define BOOST_MPL_BOOL_FWD_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/bool_fwd.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.3 $
+
+#include <boost/mpl/aux_/adl_barrier.hpp>
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+
+template< bool C_ > struct bool_;
+
+// shorcuts
+typedef bool_<true> true_;
+typedef bool_<false> false_;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+
+BOOST_MPL_AUX_ADL_BARRIER_DECL(bool_)
+BOOST_MPL_AUX_ADL_BARRIER_DECL(true_)
+BOOST_MPL_AUX_ADL_BARRIER_DECL(false_)
+
+#endif // BOOST_MPL_BOOL_FWD_HPP_INCLUDED
diff --git a/boost/boost/mpl/clear.hpp b/boost/boost/mpl/clear.hpp
new file mode 100644
index 00000000000..0850514a163
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/clear.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.4 $
+
+#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/boost/boost/mpl/clear_fwd.hpp b/boost/boost/mpl/clear_fwd.hpp
new file mode 100644
index 00000000000..22ea994df5c
--- /dev/null
+++ b/boost/boost/mpl/clear_fwd.hpp
@@ -0,0 +1,24 @@
+
+#ifndef BOOST_MPL_CLEAR_FWD_HPP_INCLUDED
+#define BOOST_MPL_CLEAR_FWD_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/clear_fwd.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.4 $
+
+namespace boost { namespace mpl {
+
+template< typename Tag > struct clear_impl;
+template< typename Sequence > struct clear;
+
+}}
+
+#endif // BOOST_MPL_CLEAR_FWD_HPP_INCLUDED
diff --git a/boost/boost/mpl/comparison.hpp b/boost/boost/mpl/comparison.hpp
new file mode 100644
index 00000000000..2c4d72bfbe1
--- /dev/null
+++ b/boost/boost/mpl/comparison.hpp
@@ -0,0 +1,24 @@
+
+#ifndef BOOST_MPL_COMPARISON_HPP_INCLUDED
+#define BOOST_MPL_COMPARISON_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/comparison.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.5 $
+
+#include <boost/mpl/equal_to.hpp>
+#include <boost/mpl/not_equal_to.hpp>
+#include <boost/mpl/less.hpp>
+#include <boost/mpl/greater.hpp>
+#include <boost/mpl/less_equal.hpp>
+#include <boost/mpl/greater_equal.hpp>
+
+#endif // BOOST_MPL_COMPARISON_HPP_INCLUDED
diff --git a/boost/boost/mpl/contains.hpp b/boost/boost/mpl/contains.hpp
new file mode 100644
index 00000000000..ed14ebedf52
--- /dev/null
+++ b/boost/boost/mpl/contains.hpp
@@ -0,0 +1,41 @@
+
+#ifndef BOOST_MPL_CONTAINS_HPP_INCLUDED
+#define BOOST_MPL_CONTAINS_HPP_INCLUDED
+
+// Copyright Eric Friedman 2002
+// 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/contains.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.6 $
+
+#include <boost/mpl/contains_fwd.hpp>
+#include <boost/mpl/sequence_tag.hpp>
+#include <boost/mpl/aux_/contains_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(T)
+ >
+struct contains
+ : contains_impl< typename sequence_tag<Sequence>::type >
+ ::template apply< Sequence,T >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2,contains,(Sequence,T))
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, contains)
+
+}}
+
+#endif // BOOST_MPL_CONTAINS_HPP_INCLUDED
diff --git a/boost/boost/mpl/contains_fwd.hpp b/boost/boost/mpl/contains_fwd.hpp
new file mode 100644
index 00000000000..5e074082210
--- /dev/null
+++ b/boost/boost/mpl/contains_fwd.hpp
@@ -0,0 +1,25 @@
+
+#ifndef BOOST_MPL_CONTAINS_FWD_HPP_INCLUDED
+#define BOOST_MPL_CONTAINS_FWD_HPP_INCLUDED
+
+// Copyright Eric Friedman 2002
+// 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/contains_fwd.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.2 $
+
+namespace boost { namespace mpl {
+
+template< typename Tag > struct contains_impl;
+template< typename Sequence, typename T > struct contains;
+
+}}
+
+#endif // BOOST_MPL_CONTAINS_FWD_HPP_INCLUDED
diff --git a/boost/boost/mpl/copy.hpp b/boost/boost/mpl/copy.hpp
new file mode 100644
index 00000000000..8045aaab616
--- /dev/null
+++ b/boost/boost/mpl/copy.hpp
@@ -0,0 +1,58 @@
+
+#ifndef BOOST_MPL_COPY_HPP_INCLUDED
+#define BOOST_MPL_COPY_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/copy.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.5 $
+
+#include <boost/mpl/fold.hpp>
+#include <boost/mpl/reverse_fold.hpp>
+#include <boost/mpl/aux_/inserter_algorithm.hpp>
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template<
+ typename Sequence
+ , typename Inserter
+ >
+struct copy_impl
+ : fold<
+ Sequence
+ , typename Inserter::state
+ , typename Inserter::operation
+ >
+{
+};
+
+template<
+ typename Sequence
+ , typename Inserter
+ >
+struct reverse_copy_impl
+ : reverse_fold<
+ Sequence
+ , typename Inserter::state
+ , typename Inserter::operation
+ >
+{
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(2, copy)
+
+}}
+
+#endif // BOOST_MPL_COPY_HPP_INCLUDED
diff --git a/boost/boost/mpl/copy_if.hpp b/boost/boost/mpl/copy_if.hpp
new file mode 100644
index 00000000000..1bfd84b222a
--- /dev/null
+++ b/boost/boost/mpl/copy_if.hpp
@@ -0,0 +1,96 @@
+
+#ifndef BOOST_MPL_COPY_IF_HPP_INCLUDED
+#define BOOST_MPL_COPY_IF_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/copy_if.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.5 $
+
+#include <boost/mpl/fold.hpp>
+#include <boost/mpl/reverse_fold.hpp>
+#include <boost/mpl/apply.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/protect.hpp>
+#include <boost/mpl/aux_/inserter_algorithm.hpp>
+#include <boost/mpl/aux_/config/forwarding.hpp>
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template<
+ typename Operation
+ , typename Predicate
+ >
+struct copy_if_op
+{
+ template< typename Sequence, typename T > struct apply
+#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)
+ : eval_if<
+ typename apply1<Predicate,T>::type
+ , apply2<Operation,Sequence,T>
+ , identity<Sequence>
+ >
+ {
+#else
+ {
+ typedef typename eval_if<
+ typename apply1<Predicate,T>::type
+ , apply2<Operation,Sequence,T>
+ , identity<Sequence>
+ >::type type;
+#endif
+ };
+};
+
+template<
+ typename Sequence
+ , typename Predicate
+ , typename Inserter
+ >
+struct copy_if_impl
+ : fold<
+ Sequence
+ , typename Inserter::state
+ , protect< aux::copy_if_op<
+ typename Inserter::operation
+ , Predicate
+ > >
+ >
+{
+};
+
+template<
+ typename Sequence
+ , typename Predicate
+ , typename Inserter
+ >
+struct reverse_copy_if_impl
+ : reverse_fold<
+ Sequence
+ , typename Inserter::state
+ , protect< aux::copy_if_op<
+ typename Inserter::operation
+ , Predicate
+ > >
+ >
+{
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(3, copy_if)
+
+}}
+
+#endif // BOOST_MPL_COPY_IF_HPP_INCLUDED
diff --git a/boost/boost/mpl/count.hpp b/boost/boost/mpl/count.hpp
new file mode 100644
index 00000000000..6a0feea39e9
--- /dev/null
+++ b/boost/boost/mpl/count.hpp
@@ -0,0 +1,40 @@
+
+#ifndef BOOST_MPL_COUNT_HPP_INCLUDED
+#define BOOST_MPL_COUNT_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/count.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.5 $
+
+#include <boost/mpl/count_fwd.hpp>
+#include <boost/mpl/sequence_tag.hpp>
+#include <boost/mpl/aux_/count_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(T)
+ >
+struct count
+ : count_impl< typename sequence_tag<Sequence>::type >
+ ::template apply<Sequence,T>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2,count,(Sequence,T))
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, count)
+
+}}
+
+#endif // BOOST_MPL_COUNT_HPP_INCLUDED
diff --git a/boost/boost/mpl/count_fwd.hpp b/boost/boost/mpl/count_fwd.hpp
new file mode 100644
index 00000000000..8dcb2311bd2
--- /dev/null
+++ b/boost/boost/mpl/count_fwd.hpp
@@ -0,0 +1,24 @@
+
+#ifndef BOOST_MPL_COUNT_FWD_HPP_INCLUDED
+#define BOOST_MPL_COUNT_FWD_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/count_fwd.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.2 $
+
+namespace boost { namespace mpl {
+
+template< typename Tag > struct count_impl;
+template< typename Sequence, typename T > struct count;
+
+}}
+
+#endif // BOOST_MPL_COUNT_FWD_HPP_INCLUDED
diff --git a/boost/boost/mpl/count_if.hpp b/boost/boost/mpl/count_if.hpp
new file mode 100644
index 00000000000..5d20cec301a
--- /dev/null
+++ b/boost/boost/mpl/count_if.hpp
@@ -0,0 +1,79 @@
+
+#ifndef BOOST_MPL_COUNT_IF_HPP_INCLUDED
+#define BOOST_MPL_COUNT_IF_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/count_if.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.5 $
+
+#include <boost/mpl/fold.hpp>
+#include <boost/mpl/next.hpp>
+#include <boost/mpl/integral_c.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/apply.hpp>
+#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/forwarding.hpp>
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template< typename Predicate >
+struct next_if
+{
+ template<
+ typename N
+ , typename T
+ >
+ struct apply
+#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)
+ : eval_if<
+ typename apply1<Predicate,T>::type
+ , next<N>
+ , identity<N>
+ >
+ {
+#else
+ {
+ typedef typename eval_if<
+ typename apply1<Predicate,T>::type
+ , next<N>
+ , identity<N>
+ >::type type;
+#endif
+ };
+};
+
+} // namespace aux
+
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+ , typename BOOST_MPL_AUX_NA_PARAM(Predicate)
+ >
+struct count_if
+ : aux::msvc_eti_base< typename fold<
+ Sequence
+ , integral_c<unsigned long,0>
+ , protect< aux::next_if<Predicate> >
+ >::type >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2,count_if,(Sequence,Predicate))
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, count_if)
+
+}}
+
+#endif // BOOST_MPL_COUNT_IF_HPP_INCLUDED
diff --git a/boost/boost/mpl/deque.hpp b/boost/boost/mpl/deque.hpp
new file mode 100644
index 00000000000..40d9f53671f
--- /dev/null
+++ b/boost/boost/mpl/deque.hpp
@@ -0,0 +1,58 @@
+
+#ifndef BOOST_MPL_DEQUE_HPP_INCLUDED
+#define BOOST_MPL_DEQUE_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/deque.hpp,v $
+// $Date: 2004/11/28 01:53:40 $
+// $Revision: 1.2 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/limits/vector.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_DEQUE_HEADER \
+ BOOST_PP_CAT(vector, BOOST_MPL_LIMIT_VECTOR_SIZE).hpp \
+ /**/
+#else
+# define AUX778076_DEQUE_HEADER \
+ BOOST_PP_CAT(vector, BOOST_MPL_LIMIT_VECTOR_SIZE)##.hpp \
+ /**/
+#endif
+
+# include BOOST_PP_STRINGIZE(boost/mpl/vector/AUX778076_DEQUE_HEADER)
+# undef AUX778076_DEQUE_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 deque.hpp
+# include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#else
+
+# include <boost/mpl/limits/vector.hpp>
+
+# define AUX778076_SEQUENCE_NAME deque
+# define AUX778076_SEQUENCE_BASE_NAME vector
+# define AUX778076_SEQUENCE_LIMIT BOOST_MPL_LIMIT_VECTOR_SIZE
+# include <boost/mpl/aux_/sequence_wrapper.hpp>
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#endif // BOOST_MPL_DEQUE_HPP_INCLUDED
diff --git a/boost/boost/mpl/deref.hpp b/boost/boost/mpl/deref.hpp
new file mode 100644
index 00000000000..3705540d780
--- /dev/null
+++ b/boost/boost/mpl/deref.hpp
@@ -0,0 +1,41 @@
+
+#ifndef BOOST_MPL_DEREF_HPP_INCLUDED
+#define BOOST_MPL_DEREF_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/deref.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.3 $
+
+#include <boost/mpl/aux_/msvc_type.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(Iterator)
+ >
+struct deref
+{
+#if !defined(BOOST_MPL_CFG_MSVC_70_ETI_BUG)
+ typedef typename Iterator::type type;
+#else
+ typedef typename aux::msvc_type<Iterator>::type type;
+#endif
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,deref,(Iterator))
+};
+
+BOOST_MPL_AUX_NA_SPEC(1, deref)
+
+}}
+
+#endif // BOOST_MPL_DEREF_HPP_INCLUDED
diff --git a/boost/boost/mpl/distance.hpp b/boost/boost/mpl/distance.hpp
new file mode 100644
index 00000000000..7d16862930b
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/distance.hpp,v $
+// $Date: 2005/01/26 01:58:33 $
+// $Revision: 1.10 $
+
+#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/boost/boost/mpl/distance_fwd.hpp b/boost/boost/mpl/distance_fwd.hpp
new file mode 100644
index 00000000000..d0a419c34dd
--- /dev/null
+++ b/boost/boost/mpl/distance_fwd.hpp
@@ -0,0 +1,28 @@
+
+#ifndef BOOST_MPL_DISTANCE_FWD_HPP_INCLUDED
+#define BOOST_MPL_DISTANCE_FWD_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/distance_fwd.hpp,v $
+// $Date: 2004/11/28 01:53:40 $
+// $Revision: 1.3 $
+
+#include <boost/mpl/aux_/common_name_wknd.hpp>
+
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_COMMON_NAME_WKND(distance)
+
+template< typename Tag > struct distance_impl;
+template< typename First, typename Last > struct distance;
+
+}}
+
+#endif // BOOST_MPL_DISTANCE_FWD_HPP_INCLUDED
diff --git a/boost/boost/mpl/divides.hpp b/boost/boost/mpl/divides.hpp
new file mode 100644
index 00000000000..06f768b3919
--- /dev/null
+++ b/boost/boost/mpl/divides.hpp
@@ -0,0 +1,21 @@
+
+#ifndef BOOST_MPL_DIVIDES_HPP_INCLUDED
+#define BOOST_MPL_DIVIDES_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/divides.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.3 $
+
+#define AUX778076_OP_NAME divides
+#define AUX778076_OP_TOKEN /
+#include <boost/mpl/aux_/arithmetic_op.hpp>
+
+#endif // BOOST_MPL_DIVIDES_HPP_INCLUDED
diff --git a/boost/boost/mpl/empty.hpp b/boost/boost/mpl/empty.hpp
new file mode 100644
index 00000000000..244681dc8e2
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/empty.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.4 $
+
+#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/boost/boost/mpl/empty_base.hpp b/boost/boost/mpl/empty_base.hpp
new file mode 100644
index 00000000000..0f45ce05a62
--- /dev/null
+++ b/boost/boost/mpl/empty_base.hpp
@@ -0,0 +1,59 @@
+
+#ifndef BOOST_MPL_EMPTY_BASE_HPP_INCLUDED
+#define BOOST_MPL_EMPTY_BASE_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/empty_base.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#include <boost/type_traits/is_empty.hpp>
+
+// should be always the last #include directive
+#include <boost/type_traits/detail/bool_trait_def.hpp>
+
+namespace boost { namespace mpl {
+
+// empty base class, guaranteed to have no members; inheritance from
+// 'empty_base' through the 'inherit' metafunction is a no-op - see
+// "mpl/inherit.hpp> header for the details
+struct empty_base {};
+
+template< typename T >
+struct is_empty_base
+ : false_
+{
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ using false_::value;
+#endif
+};
+
+template<>
+struct is_empty_base<empty_base>
+ : true_
+{
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ using true_::value;
+#endif
+};
+
+}}
+
+namespace boost {
+BOOST_TT_AUX_BOOL_TRAIT_SPEC1(is_empty, mpl::empty_base, true)
+}
+
+#include <boost/type_traits/detail/bool_trait_undef.hpp>
+
+#endif // BOOST_MPL_EMPTY_BASE_HPP_INCLUDED
diff --git a/boost/boost/mpl/empty_fwd.hpp b/boost/boost/mpl/empty_fwd.hpp
new file mode 100644
index 00000000000..f4313c1abf0
--- /dev/null
+++ b/boost/boost/mpl/empty_fwd.hpp
@@ -0,0 +1,24 @@
+
+#ifndef BOOST_MPL_EMPTY_FWD_HPP_INCLUDED
+#define BOOST_MPL_EMPTY_FWD_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/empty_fwd.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.4 $
+
+namespace boost { namespace mpl {
+
+template< typename Tag > struct empty_impl;
+template< typename Sequence > struct empty;
+
+}}
+
+#endif // BOOST_MPL_EMPTY_FWD_HPP_INCLUDED
diff --git a/boost/boost/mpl/empty_sequence.hpp b/boost/boost/mpl/empty_sequence.hpp
new file mode 100644
index 00000000000..47e82c44426
--- /dev/null
+++ b/boost/boost/mpl/empty_sequence.hpp
@@ -0,0 +1,42 @@
+
+#ifndef BOOST_MPL_EMPTY_SEQUENCE_HPP_INCLUDED
+#define BOOST_MPL_EMPTY_SEQUENCE_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2004
+// Copyright Alexander Nasonov 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/empty_sequence.hpp,v $
+// $Date: 2004/11/28 01:53:40 $
+// $Revision: 1.2 $
+
+#include <boost/mpl/size_fwd.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/iterator_tags.hpp>
+
+namespace boost { namespace mpl {
+
+struct empty_sequence
+{
+ struct tag;
+ struct begin { typedef random_access_iterator_tag category; };
+ typedef begin end;
+};
+
+template<>
+struct size_impl<empty_sequence::tag>
+{
+ template< typename Sequence > struct apply
+ : int_<0>
+ {
+ };
+};
+
+}}
+
+#endif // #ifndef BOOST_MPL_EMPTY_SEQUENCE_HPP_INCLUDED
diff --git a/boost/boost/mpl/end.hpp b/boost/boost/mpl/end.hpp
new file mode 100644
index 00000000000..d052dbf4d33
--- /dev/null
+++ b/boost/boost/mpl/end.hpp
@@ -0,0 +1,19 @@
+
+#ifndef BOOST_MPL_END_HPP_INCLUDED
+#define BOOST_MPL_END_HPP_INCLUDED
+
+// 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/end.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.2 $
+
+#include <boost/mpl/begin_end.hpp>
+
+#endif // BOOST_MPL_END_HPP_INCLUDED
diff --git a/boost/boost/mpl/equal.hpp b/boost/boost/mpl/equal.hpp
new file mode 100644
index 00000000000..671c9ae2fbc
--- /dev/null
+++ b/boost/boost/mpl/equal.hpp
@@ -0,0 +1,112 @@
+
+#ifndef BOOST_MPL_EQUAL_HPP_INCLUDED
+#define BOOST_MPL_EQUAL_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/equal.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.6 $
+
+#include <boost/mpl/aux_/iter_fold_if_impl.hpp>
+#include <boost/mpl/aux_/iter_apply.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/begin_end.hpp>
+#include <boost/mpl/next.hpp>
+#include <boost/mpl/always.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/lambda.hpp>
+#include <boost/mpl/bind.hpp>
+#include <boost/mpl/apply.hpp>
+#include <boost/mpl/void.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/mpl/aux_/msvc_eti_base.hpp>
+
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template<
+ typename Predicate
+ , typename LastIterator1
+ , typename LastIterator2
+ >
+struct equal_pred
+{
+ template<
+ typename Iterator2
+ , typename Iterator1
+ >
+ struct apply
+ {
+ typedef typename and_<
+ not_< is_same<Iterator1,LastIterator1> >
+ , not_< is_same<Iterator2,LastIterator2> >
+ , aux::iter_apply2<Predicate,Iterator1,Iterator2>
+ >::type type;
+ };
+};
+
+template<
+ typename Sequence1
+ , typename Sequence2
+ , typename Predicate
+ >
+struct equal_impl
+{
+ typedef typename begin<Sequence1>::type first1_;
+ typedef typename begin<Sequence2>::type first2_;
+ typedef typename end<Sequence1>::type last1_;
+ typedef typename end<Sequence2>::type last2_;
+
+ typedef aux::iter_fold_if_impl<
+ first1_
+ , first2_
+ , next<>
+ , protect< aux::equal_pred<Predicate,last1_,last2_> >
+ , void_
+ , always<false_>
+ > fold_;
+
+ typedef typename fold_::iterator iter1_;
+ typedef typename fold_::state iter2_;
+ typedef and_<
+ is_same<iter1_,last1_>
+ , is_same<iter2_,last2_>
+ > result_;
+
+ typedef typename result_::type type;
+};
+
+
+} // namespace aux
+
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(Sequence1)
+ , typename BOOST_MPL_AUX_NA_PARAM(Sequence2)
+ , typename Predicate = is_same<_,_>
+ >
+struct equal
+ : aux::msvc_eti_base<
+ typename aux::equal_impl<Sequence1,Sequence2,Predicate>::type
+ >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2,equal,(Sequence1,Sequence2))
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, equal)
+
+}}
+
+#endif // BOOST_MPL_EQUAL_HPP_INCLUDED
diff --git a/boost/boost/mpl/equal_to.hpp b/boost/boost/mpl/equal_to.hpp
new file mode 100644
index 00000000000..fb9be1bd0ff
--- /dev/null
+++ b/boost/boost/mpl/equal_to.hpp
@@ -0,0 +1,21 @@
+
+#ifndef BOOST_MPL_EQUAL_TO_HPP_INCLUDED
+#define BOOST_MPL_EQUAL_TO_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/equal_to.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.3 $
+
+#define AUX778076_OP_NAME equal_to
+#define AUX778076_OP_TOKEN ==
+#include <boost/mpl/aux_/comparison_op.hpp>
+
+#endif // BOOST_MPL_EQUAL_TO_HPP_INCLUDED
diff --git a/boost/boost/mpl/erase.hpp b/boost/boost/mpl/erase.hpp
new file mode 100644
index 00000000000..cf6104e0fb2
--- /dev/null
+++ b/boost/boost/mpl/erase.hpp
@@ -0,0 +1,42 @@
+
+#ifndef BOOST_MPL_ERASE_HPP_INCLUDED
+#define BOOST_MPL_ERASE_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/erase.hpp,v $
+// $Date: 2004/11/28 01:54:10 $
+// $Revision: 1.5 $
+
+#include <boost/mpl/erase_fwd.hpp>
+#include <boost/mpl/sequence_tag.hpp>
+#include <boost/mpl/aux_/erase_impl.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/mpl/aux_/config/msvc_typename.hpp>
+
+namespace boost { namespace mpl {
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+ , typename BOOST_MPL_AUX_NA_PARAM(First)
+ , typename BOOST_MPL_AUX_NA_PARAM(Last)
+ >
+struct erase
+ : erase_impl< typename sequence_tag<Sequence>::type >
+ ::template apply< Sequence,First,Last >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(3,erase,(Sequence,First,Last))
+};
+
+BOOST_MPL_AUX_NA_SPEC(3,erase)
+
+}}
+
+#endif // BOOST_MPL_ERASE_HPP_INCLUDED
diff --git a/boost/boost/mpl/erase_fwd.hpp b/boost/boost/mpl/erase_fwd.hpp
new file mode 100644
index 00000000000..02a50a1967a
--- /dev/null
+++ b/boost/boost/mpl/erase_fwd.hpp
@@ -0,0 +1,24 @@
+
+#ifndef BOOST_MPL_ERASE_FWD_HPP_INCLUDED
+#define BOOST_MPL_ERASE_FWD_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/erase_fwd.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.4 $
+
+namespace boost { namespace mpl {
+
+template< typename Tag > struct erase_impl;
+template< typename Sequence, typename First, typename Last > struct erase;
+
+}}
+
+#endif // BOOST_MPL_ERASE_FWD_HPP_INCLUDED
diff --git a/boost/boost/mpl/erase_key.hpp b/boost/boost/mpl/erase_key.hpp
new file mode 100644
index 00000000000..8a89e5d5ca0
--- /dev/null
+++ b/boost/boost/mpl/erase_key.hpp
@@ -0,0 +1,41 @@
+
+#ifndef BOOST_MPL_ERASE_KEY_HPP_INCLUDED
+#define BOOST_MPL_ERASE_KEY_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/erase_key.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.2 $
+
+#include <boost/mpl/erase_key_fwd.hpp>
+#include <boost/mpl/sequence_tag.hpp>
+#include <boost/mpl/aux_/erase_key_impl.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/mpl/aux_/config/msvc_typename.hpp>
+
+namespace boost { namespace mpl {
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+ , typename BOOST_MPL_AUX_NA_PARAM(Key)
+ >
+struct erase_key
+ : erase_key_impl< typename sequence_tag<Sequence>::type >
+ ::template apply< Sequence,Key >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2,erase_key,(Sequence,Key))
+};
+
+BOOST_MPL_AUX_NA_SPEC(2,erase_key)
+
+}}
+
+#endif // BOOST_MPL_ERASE_KEY_HPP_INCLUDED
diff --git a/boost/boost/mpl/erase_key_fwd.hpp b/boost/boost/mpl/erase_key_fwd.hpp
new file mode 100644
index 00000000000..12c7c5d666c
--- /dev/null
+++ b/boost/boost/mpl/erase_key_fwd.hpp
@@ -0,0 +1,24 @@
+
+#ifndef BOOST_MPL_ERASE_KEY_FWD_HPP_INCLUDED
+#define BOOST_MPL_ERASE_KEY_FWD_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/erase_key_fwd.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.2 $
+
+namespace boost { namespace mpl {
+
+template< typename Tag > struct erase_key_impl;
+template< typename Sequence, typename Key > struct erase_key;
+
+}}
+
+#endif // BOOST_MPL_ERASE_KEY_FWD_HPP_INCLUDED
diff --git a/boost/boost/mpl/eval_if.hpp b/boost/boost/mpl/eval_if.hpp
new file mode 100644
index 00000000000..a15ac72f9dc
--- /dev/null
+++ b/boost/boost/mpl/eval_if.hpp
@@ -0,0 +1,71 @@
+
+#ifndef BOOST_MPL_EVAL_IF_HPP_INCLUDED
+#define BOOST_MPL_EVAL_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/eval_if.hpp,v $
+// $Date: 2004/11/28 01:54:10 $
+// $Revision: 1.3 $
+
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/gcc.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+namespace boost { namespace mpl {
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(C)
+ , typename BOOST_MPL_AUX_NA_PARAM(F1)
+ , typename BOOST_MPL_AUX_NA_PARAM(F2)
+ >
+struct eval_if
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \
+ || ( BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, >= 0x0300) \
+ && BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, BOOST_TESTED_AT(0x0304)) \
+ )
+{
+ typedef typename if_<C,F1,F2>::type f_;
+ typedef typename f_::type type;
+#else
+ : if_<C,F1,F2>::type
+{
+#endif
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(3,eval_if,(C,F1,F2))
+};
+
+// (almost) copy & paste in order to save one more
+// recursively nested template instantiation to user
+template<
+ bool C
+ , typename F1
+ , typename F2
+ >
+struct eval_if_c
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \
+ || ( BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, >= 0x0300) \
+ && BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, BOOST_TESTED_AT(0x0304)) \
+ )
+{
+ typedef typename if_c<C,F1,F2>::type f_;
+ typedef typename f_::type type;
+#else
+ : if_c<C,F1,F2>::type
+{
+#endif
+};
+
+BOOST_MPL_AUX_NA_SPEC(3, eval_if)
+
+}}
+
+#endif // BOOST_MPL_EVAL_IF_HPP_INCLUDED
diff --git a/boost/boost/mpl/filter_view.hpp b/boost/boost/mpl/filter_view.hpp
new file mode 100644
index 00000000000..67c81905d8c
--- /dev/null
+++ b/boost/boost/mpl/filter_view.hpp
@@ -0,0 +1,46 @@
+
+#ifndef BOOST_MPL_FILTER_VIEW_HPP_INCLUDED
+#define BOOST_MPL_FILTER_VIEW_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/filter_view.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.5 $
+
+#include <boost/mpl/begin_end.hpp>
+#include <boost/mpl/lambda.hpp>
+#include <boost/mpl/aux_/filter_iter.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(Predicate)
+ >
+struct filter_view
+{
+ private:
+ typedef typename lambda<Predicate>::type pred_;
+ typedef typename begin<Sequence>::type first_;
+ typedef typename end<Sequence>::type last_;
+
+ public:
+ struct tag;
+ typedef filter_view type;
+ typedef typename aux::next_filter_iter< first_,last_,pred_ >::type begin;
+ typedef aux::filter_iter< last_,last_,pred_ > end;
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, filter_view)
+
+}}
+
+#endif // BOOST_MPL_FILTER_VIEW_HPP_INCLUDED
diff --git a/boost/boost/mpl/find.hpp b/boost/boost/mpl/find.hpp
new file mode 100644
index 00000000000..a77f3cc9d28
--- /dev/null
+++ b/boost/boost/mpl/find.hpp
@@ -0,0 +1,38 @@
+
+#ifndef BOOST_MPL_FIND_HPP_INCLUDED
+#define BOOST_MPL_FIND_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/find.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.5 $
+
+#include <boost/mpl/find_if.hpp>
+#include <boost/mpl/same_as.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 find
+ : find_if< Sequence,same_as<T> >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2,find,(Sequence,T))
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, find)
+
+}}
+
+#endif // BOOST_MPL_FIND_HPP_INCLUDED
diff --git a/boost/boost/mpl/find_if.hpp b/boost/boost/mpl/find_if.hpp
new file mode 100644
index 00000000000..db06ecc317f
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/find_if.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.10 $
+
+#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
+ , 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/boost/boost/mpl/fold.hpp b/boost/boost/mpl/fold.hpp
new file mode 100644
index 00000000000..69fa823bb5b
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/fold.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.4 $
+
+#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/boost/boost/mpl/for_each.hpp b/boost/boost/mpl/for_each.hpp
new file mode 100644
index 00000000000..b87deb67b0c
--- /dev/null
+++ b/boost/boost/mpl/for_each.hpp
@@ -0,0 +1,112 @@
+
+#ifndef BOOST_MPL_FOR_EACH_HPP_INCLUDED
+#define BOOST_MPL_FOR_EACH_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/for_each.hpp,v $
+// $Date: 2004/09/04 01:33:46 $
+// $Revision: 1.9 $
+
+#include <boost/mpl/begin_end.hpp>
+#include <boost/mpl/apply.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/next_prior.hpp>
+#include <boost/mpl/deref.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/aux_/unwrap.hpp>
+
+#include <boost/type_traits/is_same.hpp>
+#include <boost/utility/value_init.hpp>
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template< bool done = true >
+struct for_each_impl
+{
+ template<
+ typename Iterator
+ , typename LastIterator
+ , typename TransformFunc
+ , typename F
+ >
+ static void execute(
+ Iterator*
+ , LastIterator*
+ , TransformFunc*
+ , F
+ )
+ {
+ }
+};
+
+template<>
+struct for_each_impl<false>
+{
+ template<
+ typename Iterator
+ , typename LastIterator
+ , typename TransformFunc
+ , typename F
+ >
+ static void execute(
+ Iterator*
+ , LastIterator*
+ , TransformFunc*
+ , F f
+ )
+ {
+ typedef typename deref<Iterator>::type item;
+ typedef typename apply1<TransformFunc,item>::type arg;
+
+ // dwa 2002/9/10 -- make sure not to invoke undefined behavior
+ // when we pass arg.
+ value_initialized<arg> x;
+ aux::unwrap(f, 0)(boost::get(x));
+
+ typedef typename mpl::next<Iterator>::type iter;
+ for_each_impl<boost::is_same<iter,LastIterator>::value>
+ ::execute((iter*)0, (LastIterator*)0, (TransformFunc*)0, f);
+ }
+};
+
+} // namespace aux
+
+// agurt, 17/mar/02: pointer default parameters are necessary to workaround
+// MSVC 6.5 function template signature's mangling bug
+template<
+ typename Sequence
+ , typename TransformOp
+ , typename F
+ >
+inline
+void for_each(F f, Sequence* = 0, TransformOp* = 0)
+{
+ typedef typename begin<Sequence>::type first;
+ typedef typename end<Sequence>::type last;
+
+ aux::for_each_impl< boost::is_same<first,last>::value >
+ ::execute((first*)0, (last*)0, (TransformOp*)0, f);
+}
+
+template<
+ typename Sequence
+ , typename F
+ >
+inline
+void for_each(F f, Sequence* = 0)
+{
+ for_each<Sequence, identity<> >(f);
+}
+
+}}
+
+#endif // BOOST_MPL_FOR_EACH_HPP_INCLUDED
diff --git a/boost/boost/mpl/front.hpp b/boost/boost/mpl/front.hpp
new file mode 100644
index 00000000000..cfcdcaac805
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/front.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.4 $
+
+#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/boost/boost/mpl/front_fwd.hpp b/boost/boost/mpl/front_fwd.hpp
new file mode 100644
index 00000000000..158210a45ad
--- /dev/null
+++ b/boost/boost/mpl/front_fwd.hpp
@@ -0,0 +1,24 @@
+
+#ifndef BOOST_MPL_FRONT_FWD_HPP_INCLUDED
+#define BOOST_MPL_FRONT_FWD_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/front_fwd.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.4 $
+
+namespace boost { namespace mpl {
+
+template< typename Tag > struct front_impl;
+template< typename Sequence > struct front;
+
+}}
+
+#endif // BOOST_MPL_FRONT_FWD_HPP_INCLUDED
diff --git a/boost/boost/mpl/front_inserter.hpp b/boost/boost/mpl/front_inserter.hpp
new file mode 100644
index 00000000000..44d864e4dc0
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/front_inserter.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.2 $
+
+#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/boost/boost/mpl/greater.hpp b/boost/boost/mpl/greater.hpp
new file mode 100644
index 00000000000..a76e5f85e00
--- /dev/null
+++ b/boost/boost/mpl/greater.hpp
@@ -0,0 +1,21 @@
+
+#ifndef BOOST_MPL_GREATER_HPP_INCLUDED
+#define BOOST_MPL_GREATER_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/greater.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.3 $
+
+#define AUX778076_OP_NAME greater
+#define AUX778076_OP_TOKEN >
+#include <boost/mpl/aux_/comparison_op.hpp>
+
+#endif // BOOST_MPL_GREATER_HPP_INCLUDED
diff --git a/boost/boost/mpl/greater_equal.hpp b/boost/boost/mpl/greater_equal.hpp
new file mode 100644
index 00000000000..9f9151de219
--- /dev/null
+++ b/boost/boost/mpl/greater_equal.hpp
@@ -0,0 +1,21 @@
+
+#ifndef BOOST_MPL_GREATER_EQUAL_HPP_INCLUDED
+#define BOOST_MPL_GREATER_EQUAL_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/greater_equal.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.3 $
+
+#define AUX778076_OP_NAME greater_equal
+#define AUX778076_OP_TOKEN >=
+#include <boost/mpl/aux_/comparison_op.hpp>
+
+#endif // BOOST_MPL_GREATER_EQUAL_HPP_INCLUDED
diff --git a/boost/boost/mpl/has_key.hpp b/boost/boost/mpl/has_key.hpp
new file mode 100644
index 00000000000..d1cbe8832da
--- /dev/null
+++ b/boost/boost/mpl/has_key.hpp
@@ -0,0 +1,41 @@
+
+#ifndef BOOST_MPL_HAS_KEY_HPP_INCLUDED
+#define BOOST_MPL_HAS_KEY_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/has_key.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.3 $
+
+#include <boost/mpl/has_key_fwd.hpp>
+#include <boost/mpl/sequence_tag.hpp>
+#include <boost/mpl/aux_/has_key_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(AssociativeSequence)
+ , typename BOOST_MPL_AUX_NA_PARAM(Key)
+ >
+struct has_key
+ : has_key_impl< typename sequence_tag<AssociativeSequence>::type >
+ ::template apply<AssociativeSequence,Key>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2,has_key,(AssociativeSequence,Key))
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, has_key)
+
+}}
+
+#endif // BOOST_MPL_HAS_KEY_HPP_INCLUDED
diff --git a/boost/boost/mpl/has_key_fwd.hpp b/boost/boost/mpl/has_key_fwd.hpp
new file mode 100644
index 00000000000..49ecb1f6ef4
--- /dev/null
+++ b/boost/boost/mpl/has_key_fwd.hpp
@@ -0,0 +1,25 @@
+
+#ifndef BOOST_MPL_HAS_KEY_FWD_HPP_INCLUDED
+#define BOOST_MPL_HAS_KEY_FWD_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/has_key_fwd.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.3 $
+
+namespace boost { namespace mpl {
+
+template< typename Tag > struct has_key_impl;
+template< typename AssociativeSequence, typename Key > struct has_key;
+
+}}
+
+#endif // BOOST_MPL_HAS_KEY_FWD_HPP_INCLUDED
diff --git a/boost/boost/mpl/has_xxx.hpp b/boost/boost/mpl/has_xxx.hpp
new file mode 100644
index 00000000000..a2f150eae39
--- /dev/null
+++ b/boost/boost/mpl/has_xxx.hpp
@@ -0,0 +1,233 @@
+
+#ifndef BOOST_MPL_HAS_XXX_HPP_INCLUDED
+#define BOOST_MPL_HAS_XXX_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2002-2006
+// Copyright David Abrahams 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/libs/mpl for documentation.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/has_xxx.hpp,v $
+// $Date: 2006/11/09 01:05:31 $
+// $Revision: 1.4.6.1 $
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/aux_/type_wrapper.hpp>
+#include <boost/mpl/aux_/yes_no.hpp>
+#include <boost/mpl/aux_/config/has_xxx.hpp>
+#include <boost/mpl/aux_/config/msvc_typename.hpp>
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/static_constant.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#include <boost/preprocessor/cat.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_HAS_XXX)
+
+# if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+
+// agurt, 11/sep/02: MSVC-specific version (< 7.1), based on a USENET
+// newsgroup's posting by John Madsen (comp.lang.c++.moderated,
+// 1999-11-12 19:17:06 GMT); the code is _not_ standard-conforming, but
+// it works way more reliably than the SFINAE-based implementation
+
+// Modified dwa 8/Oct/02 to handle reference types.
+
+# include <boost/mpl/if.hpp>
+# include <boost/mpl/bool.hpp>
+
+namespace boost { namespace mpl { namespace aux {
+
+struct has_xxx_tag;
+
+#if BOOST_WORKAROUND(BOOST_MSVC, == 1300)
+template< typename U > struct msvc_incomplete_array
+{
+ typedef char (&type)[sizeof(U) + 1];
+};
+#endif
+
+template< typename T >
+struct msvc_is_incomplete
+{
+ // MSVC is capable of some kinds of SFINAE. If U is an incomplete
+ // type, it won't pick the second overload
+ static char tester(...);
+
+#if BOOST_WORKAROUND(BOOST_MSVC, == 1300)
+ template< typename U >
+ static typename msvc_incomplete_array<U>::type tester(type_wrapper<U>);
+#else
+ template< typename U >
+ static char (& tester(type_wrapper<U>) )[sizeof(U)+1];
+#endif
+
+ BOOST_STATIC_CONSTANT(bool, value =
+ sizeof(tester(type_wrapper<T>())) == 1
+ );
+};
+
+template<>
+struct msvc_is_incomplete<int>
+{
+ BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+}}}
+
+# define BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF_(trait, name, default_) \
+template< typename T, typename name = ::boost::mpl::aux::has_xxx_tag > \
+struct BOOST_PP_CAT(trait,_impl) : T \
+{ \
+ static boost::mpl::aux::no_tag \
+ test(void(*)(::boost::mpl::aux::has_xxx_tag)); \
+ \
+ static boost::mpl::aux::yes_tag test(...); \
+ \
+ BOOST_STATIC_CONSTANT(bool, value = \
+ sizeof(test(static_cast<void(*)(name)>(0))) \
+ != sizeof(boost::mpl::aux::no_tag) \
+ ); \
+ typedef boost::mpl::bool_<value> type; \
+}; \
+\
+template< typename T, typename fallback_ = boost::mpl::bool_<default_> > \
+struct trait \
+ : boost::mpl::if_c< \
+ boost::mpl::aux::msvc_is_incomplete<T>::value \
+ , boost::mpl::bool_<false> \
+ , BOOST_PP_CAT(trait,_impl)<T> \
+ >::type \
+{ \
+}; \
+\
+BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, void) \
+BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, bool) \
+BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, char) \
+BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, signed char) \
+BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, unsigned char) \
+BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, signed short) \
+BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, unsigned short) \
+BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, signed int) \
+BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, unsigned int) \
+BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, signed long) \
+BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, unsigned long) \
+BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, float) \
+BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, double) \
+BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, long double) \
+/**/
+
+# define BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, T) \
+template<> struct trait<T> \
+{ \
+ BOOST_STATIC_CONSTANT(bool, value = false); \
+ typedef boost::mpl::bool_<false> type; \
+}; \
+/**/
+
+#if !defined(BOOST_NO_INTRINSIC_WCHAR_T)
+# define BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(trait, name, unused) \
+ BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF_(trait, name, unused) \
+ BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, wchar_t) \
+/**/
+#else
+# define BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(trait, name, unused) \
+ BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF_(trait, name, unused) \
+/**/
+#endif
+
+
+// SFINAE-based implementations below are derived from a USENET newsgroup's
+// posting by Rani Sharoni (comp.lang.c++.moderated, 2002-03-17 07:45:09 PST)
+
+# elif BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) \
+ || BOOST_WORKAROUND(__IBMCPP__, <= 700)
+
+// MSVC 7.1+ & VACPP
+
+// agurt, 15/jun/05: replace overload-based SFINAE implementation with SFINAE
+// applied to partial specialization to fix some apparently random failures
+// (thanks to Daniel Wallin for researching this!)
+
+namespace boost { namespace mpl { namespace aux {
+template< typename T > struct msvc71_sfinae_helper { typedef void type; };
+}}}
+
+# define BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(trait, name, default_) \
+template< typename T, typename U = void > \
+struct BOOST_PP_CAT(trait,_impl_) \
+{ \
+ BOOST_STATIC_CONSTANT(bool, value = false); \
+ typedef boost::mpl::bool_<value> type; \
+}; \
+\
+template< typename T > \
+struct BOOST_PP_CAT(trait,_impl_)< \
+ T \
+ , typename boost::mpl::aux::msvc71_sfinae_helper< typename T::name >::type \
+ > \
+{ \
+ BOOST_STATIC_CONSTANT(bool, value = true); \
+ typedef boost::mpl::bool_<value> type; \
+}; \
+\
+template< typename T, typename fallback_ = boost::mpl::bool_<default_> > \
+struct trait \
+ : BOOST_PP_CAT(trait,_impl_)<T> \
+{ \
+}; \
+/**/
+
+# else // other SFINAE-capable compilers
+
+# define BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(trait, name, default_) \
+template< typename T, typename fallback_ = boost::mpl::bool_<default_> > \
+struct trait \
+{ \
+ struct gcc_3_2_wknd \
+ { \
+ template< typename U > \
+ static boost::mpl::aux::yes_tag test( \
+ boost::mpl::aux::type_wrapper<U> const volatile* \
+ , boost::mpl::aux::type_wrapper<BOOST_MSVC_TYPENAME U::name>* = 0 \
+ ); \
+ \
+ static boost::mpl::aux::no_tag test(...); \
+ }; \
+ \
+ typedef boost::mpl::aux::type_wrapper<T> t_; \
+ BOOST_STATIC_CONSTANT(bool, value = \
+ sizeof(gcc_3_2_wknd::test(static_cast<t_*>(0))) \
+ == sizeof(boost::mpl::aux::yes_tag) \
+ ); \
+ typedef boost::mpl::bool_<value> type; \
+}; \
+/**/
+
+# endif // BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+
+
+#else // BOOST_MPL_CFG_NO_HAS_XXX
+
+// placeholder implementation
+
+# define BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(trait, name, default_) \
+template< typename T, typename fallback_ = boost::mpl::bool_<default_> > \
+struct trait \
+{ \
+ BOOST_STATIC_CONSTANT(bool, value = fallback_::value); \
+ typedef fallback_ type; \
+}; \
+/**/
+
+#endif
+
+#define BOOST_MPL_HAS_XXX_TRAIT_DEF(name) \
+ BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(BOOST_PP_CAT(has_,name), name, false) \
+/**/
+
+#endif // BOOST_MPL_HAS_XXX_HPP_INCLUDED
diff --git a/boost/boost/mpl/identity.hpp b/boost/boost/mpl/identity.hpp
new file mode 100644
index 00000000000..247b9d9bdcb
--- /dev/null
+++ b/boost/boost/mpl/identity.hpp
@@ -0,0 +1,45 @@
+
+#ifndef BOOST_MPL_IDENTITY_HPP_INCLUDED
+#define BOOST_MPL_IDENTITY_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/identity.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.4 $
+
+#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 identity
+{
+ typedef T type;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1, identity, (T))
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(T)
+ >
+struct make_identity
+{
+ typedef identity<T> type;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1, make_identity, (T))
+};
+
+BOOST_MPL_AUX_NA_SPEC_NO_ETI(1, identity)
+BOOST_MPL_AUX_NA_SPEC_NO_ETI(1, make_identity)
+
+}}
+
+#endif // BOOST_MPL_IDENTITY_HPP_INCLUDED
diff --git a/boost/boost/mpl/if.hpp b/boost/boost/mpl/if.hpp
new file mode 100644
index 00000000000..03acd5bcf19
--- /dev/null
+++ b/boost/boost/mpl/if.hpp
@@ -0,0 +1,135 @@
+
+#ifndef BOOST_MPL_IF_HPP_INCLUDED
+#define BOOST_MPL_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/if.hpp,v $
+// $Date: 2004/09/07 08:51:31 $
+// $Revision: 1.25 $
+
+#include <boost/mpl/aux_/value_wknd.hpp>
+#include <boost/mpl/aux_/static_cast.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/mpl/aux_/config/integral.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+namespace boost { namespace mpl {
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template<
+ bool C
+ , typename T1
+ , typename T2
+ >
+struct if_c
+{
+ typedef T1 type;
+};
+
+template<
+ typename T1
+ , typename T2
+ >
+struct if_c<false,T1,T2>
+{
+ typedef T2 type;
+};
+
+// agurt, 05/sep/04: nondescriptive parameter names for the sake of DigitalMars
+// (and possibly MWCW < 8.0); see http://article.gmane.org/gmane.comp.lib.boost.devel/108959
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(T1)
+ , typename BOOST_MPL_AUX_NA_PARAM(T2)
+ , typename BOOST_MPL_AUX_NA_PARAM(T3)
+ >
+struct if_
+{
+ private:
+ // agurt, 02/jan/03: two-step 'type' definition for the sake of aCC
+ typedef if_c<
+#if defined(BOOST_MPL_CFG_BCC_INTEGRAL_CONSTANTS)
+ BOOST_MPL_AUX_VALUE_WKND(T1)::value
+#else
+ BOOST_MPL_AUX_STATIC_CAST(bool, BOOST_MPL_AUX_VALUE_WKND(T1)::value)
+#endif
+ , T2
+ , T3
+ > almost_type_;
+
+ public:
+ typedef typename almost_type_::type type;
+
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(3,if_,(T1,T2,T3))
+};
+
+#else
+
+// no partial class template specialization
+
+namespace aux {
+
+template< bool C >
+struct if_impl
+{
+ template< typename T1, typename T2 > struct result_
+ {
+ typedef T1 type;
+ };
+};
+
+template<>
+struct if_impl<false>
+{
+ template< typename T1, typename T2 > struct result_
+ {
+ typedef T2 type;
+ };
+};
+
+} // namespace aux
+
+template<
+ bool C_
+ , typename T1
+ , typename T2
+ >
+struct if_c
+{
+ typedef typename aux::if_impl< C_ >
+ ::template result_<T1,T2>::type type;
+};
+
+// (almost) copy & paste in order to save one more
+// recursively nested template instantiation to user
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(C_)
+ , typename BOOST_MPL_AUX_NA_PARAM(T1)
+ , typename BOOST_MPL_AUX_NA_PARAM(T2)
+ >
+struct if_
+{
+ enum { msvc_wknd_ = BOOST_MPL_AUX_MSVC_VALUE_WKND(C_)::value };
+
+ typedef typename aux::if_impl< BOOST_MPL_AUX_STATIC_CAST(bool, msvc_wknd_) >
+ ::template result_<T1,T2>::type type;
+
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(3,if_,(C_,T1,T2))
+};
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+BOOST_MPL_AUX_NA_SPEC(3, if_)
+
+}}
+
+#endif // BOOST_MPL_IF_HPP_INCLUDED
diff --git a/boost/boost/mpl/index_if.hpp b/boost/boost/mpl/index_if.hpp
new file mode 100644
index 00000000000..fa627ad8b14
--- /dev/null
+++ b/boost/boost/mpl/index_if.hpp
@@ -0,0 +1,60 @@
+
+#ifndef BOOST_MPL_INDEX_IF_HPP_INCLUDED
+#define BOOST_MPL_INDEX_IF_HPP_INCLUDED
+
+// 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/index_if.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.7 $
+
+#include <boost/mpl/aux_/find_if_pred.hpp>
+#include <boost/mpl/begin_end.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/iter_fold_if.hpp>
+#include <boost/mpl/next.hpp>
+#include <boost/mpl/void.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace mpl {
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+ , typename BOOST_MPL_AUX_NA_PARAM(Predicate)
+ >
+struct index_if
+{
+ typedef typename iter_fold_if<
+ Sequence
+ , int_<0>
+ , next<>
+ , aux::find_if_pred<Predicate>
+ >::type result_;
+
+ typedef typename end<Sequence>::type not_found_;
+ typedef typename first<result_>::type result_index_;
+ typedef typename second<result_>::type result_iterator_;
+
+ typedef typename if_<
+ is_same< result_iterator_,not_found_ >
+ , void_
+ , result_index_
+ >::type type;
+
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2,index_if,(Sequence,Predicate))
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, index_if)
+
+}}
+
+#endif // BOOST_MPL_INDEX_IF_HPP_INCLUDED
diff --git a/boost/boost/mpl/index_of.hpp b/boost/boost/mpl/index_of.hpp
new file mode 100644
index 00000000000..f77bd24b7df
--- /dev/null
+++ b/boost/boost/mpl/index_of.hpp
@@ -0,0 +1,39 @@
+
+#ifndef BOOST_MPL_INDEX_OF_HPP_INCLUDED
+#define BOOST_MPL_INDEX_OF_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/index_of.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.3 $
+
+#include <boost/mpl/index_if.hpp>
+#include <boost/mpl/same_as.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 index_of
+ : index_if< Sequence,same_as<T> >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2,index_of,(Sequence,T))
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, index_of)
+
+}}
+
+#endif // BOOST_MPL_INDEX_OF_HPP_INCLUDED
diff --git a/boost/boost/mpl/inherit.hpp b/boost/boost/mpl/inherit.hpp
new file mode 100644
index 00000000000..43b41cec2de
--- /dev/null
+++ b/boost/boost/mpl/inherit.hpp
@@ -0,0 +1,229 @@
+
+#if !defined(BOOST_PP_IS_ITERATING)
+
+///// header body
+
+#ifndef BOOST_MPL_INHERIT_HPP_INCLUDED
+#define BOOST_MPL_INHERIT_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/inherit.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.5 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/empty_base.hpp>
+# include <boost/mpl/aux_/na_spec.hpp>
+# include <boost/mpl/aux_/lambda_support.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 inherit.hpp
+# include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#else
+
+# include <boost/mpl/limits/arity.hpp>
+# include <boost/mpl/aux_/preprocessor/params.hpp>
+# include <boost/mpl/aux_/preprocessor/default_params.hpp>
+# include <boost/mpl/aux_/preprocessor/enum.hpp>
+# include <boost/mpl/aux_/config/ctps.hpp>
+# include <boost/mpl/aux_/config/dtp.hpp>
+
+# include <boost/preprocessor/iterate.hpp>
+# include <boost/preprocessor/dec.hpp>
+# include <boost/preprocessor/cat.hpp>
+
+namespace boost { namespace mpl {
+
+// 'inherit<T1,T2,..,Tn>' metafunction; returns an unspecified class type
+// produced by public derivation from all metafunction's parameters
+// (T1,T2,..,Tn), except the parameters of 'empty_base' class type;
+// regardless the position and number of 'empty_base' parameters in the
+// metafunction's argument list, derivation from them is always a no-op;
+// for instance:
+// inherit<her>::type == her
+// inherit<her,my>::type == struct unspecified : her, my {};
+// inherit<empty_base,her>::type == her
+// inherit<empty_base,her,empty_base,empty_base>::type == her
+// inherit<her,empty_base,my>::type == struct unspecified : her, my {};
+// inherit<empty_base,empty_base>::type == empty_base
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(T1)
+ , typename BOOST_MPL_AUX_NA_PARAM(T2)
+ >
+struct inherit2
+ : T1, T2
+{
+ typedef inherit2 type;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, inherit2, (T1,T2))
+};
+
+template< typename T1 >
+struct inherit2<T1,empty_base>
+{
+ typedef T1 type;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (T1,empty_base))
+};
+
+template< typename T2 >
+struct inherit2<empty_base,T2>
+{
+ typedef T2 type;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base,T2))
+};
+
+// needed to disambiguate the previous two in case when both
+// T1 and T2 == empty_base
+template<>
+struct inherit2<empty_base,empty_base>
+{
+ typedef empty_base type;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base,empty_base))
+};
+
+#else
+
+namespace aux {
+
+template< bool C1, bool C2 >
+struct inherit2_impl
+{
+ template< typename Derived, typename T1, typename T2 > struct result_
+ : T1, T2
+ {
+ typedef Derived type_;
+ };
+};
+
+template<>
+struct inherit2_impl<false,true>
+{
+ template< typename Derived, typename T1, typename T2 > struct result_
+ : T1
+ {
+ typedef T1 type_;
+ };
+};
+
+template<>
+struct inherit2_impl<true,false>
+{
+ template< typename Derived, typename T1, typename T2 > struct result_
+ : T2
+ {
+ typedef T2 type_;
+ };
+};
+
+template<>
+struct inherit2_impl<true,true>
+{
+ template< typename Derived, typename T1, typename T2 > struct result_
+ {
+ typedef T1 type_;
+ };
+};
+
+} // namespace aux
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(T1)
+ , typename BOOST_MPL_AUX_NA_PARAM(T2)
+ >
+struct inherit2
+ : aux::inherit2_impl<
+ is_empty_base<T1>::value
+ , is_empty_base<T2>::value
+ >::template result_< inherit2<T1,T2>,T1,T2 >
+{
+ typedef typename inherit2::type_ type;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, inherit2, (T1,T2))
+};
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+BOOST_MPL_AUX_NA_SPEC(2, inherit2)
+
+#define BOOST_PP_ITERATION_PARAMS_1 \
+ (3,(3, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, <boost/mpl/inherit.hpp>))
+#include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#endif // BOOST_MPL_INHERIT_HPP_INCLUDED
+
+///// iteration
+
+#else
+#define n_ BOOST_PP_FRAME_ITERATION(1)
+
+template<
+ BOOST_MPL_PP_DEFAULT_PARAMS(n_, typename T, na)
+ >
+struct BOOST_PP_CAT(inherit,n_)
+ : inherit2<
+ typename BOOST_PP_CAT(inherit,BOOST_PP_DEC(n_))<
+ BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(n_), T)
+ >::type
+ , BOOST_PP_CAT(T,n_)
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ n_
+ , BOOST_PP_CAT(inherit,n_)
+ , (BOOST_MPL_PP_PARAMS(n_, T))
+ )
+};
+
+BOOST_MPL_AUX_NA_SPEC(n_, BOOST_PP_CAT(inherit,n_))
+
+#if n_ == BOOST_MPL_LIMIT_METAFUNCTION_ARITY
+/// primary template
+template<
+ BOOST_MPL_PP_DEFAULT_PARAMS(n_, typename T, empty_base)
+ >
+struct inherit
+ : BOOST_PP_CAT(inherit,n_)<BOOST_MPL_PP_PARAMS(n_, T)>
+{
+};
+
+// 'na' specialization
+template<>
+struct inherit< BOOST_MPL_PP_ENUM(5, na) >
+{
+ template<
+#if !defined(BOOST_MPL_CFG_NO_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES)
+ BOOST_MPL_PP_DEFAULT_PARAMS(n_, typename T, empty_base)
+#else
+ BOOST_MPL_PP_PARAMS(n_, typename T)
+#endif
+ >
+ struct apply
+ : inherit< BOOST_MPL_PP_PARAMS(n_, T) >
+ {
+ };
+};
+
+BOOST_MPL_AUX_NA_SPEC_LAMBDA(n_, inherit)
+BOOST_MPL_AUX_NA_SPEC_ARITY(n_, inherit)
+BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(n_, n_, inherit)
+#endif
+
+#undef n_
+#endif // BOOST_PP_IS_ITERATING
diff --git a/boost/boost/mpl/inherit_linearly.hpp b/boost/boost/mpl/inherit_linearly.hpp
new file mode 100644
index 00000000000..8575f3166c6
--- /dev/null
+++ b/boost/boost/mpl/inherit_linearly.hpp
@@ -0,0 +1,39 @@
+
+#ifndef BOOST_MPL_INHERIT_FRONT_TO_BACK_HPP_INCLUDED
+#define BOOST_MPL_INHERIT_FRONT_TO_BACK_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/inherit_linearly.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.3 $
+
+#include <boost/mpl/fold.hpp>
+#include <boost/mpl/empty_base.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(Types_)
+ , typename BOOST_MPL_AUX_NA_PARAM(Node_)
+ , typename Root_ = empty_base
+ >
+struct inherit_linearly
+ : fold<Types_,Root_,Node_>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(3,inherit_linearly,(Types_,Node_,Root_))
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, inherit_linearly)
+
+}}
+
+#endif // BOOST_MPL_INHERIT_FRONT_TO_BACK_HPP_INCLUDED
diff --git a/boost/boost/mpl/insert.hpp b/boost/boost/mpl/insert.hpp
new file mode 100644
index 00000000000..7b8e3df6bd5
--- /dev/null
+++ b/boost/boost/mpl/insert.hpp
@@ -0,0 +1,41 @@
+
+#ifndef BOOST_MPL_INSERT_HPP_INCLUDED
+#define BOOST_MPL_INSERT_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/insert.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.5 $
+
+#include <boost/mpl/insert_fwd.hpp>
+#include <boost/mpl/sequence_tag.hpp>
+#include <boost/mpl/aux_/insert_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(Pos_or_T)
+ , typename BOOST_MPL_AUX_NA_PARAM(T)
+ >
+struct insert
+ : insert_impl< typename sequence_tag<Sequence>::type >
+ ::template apply< Sequence,Pos_or_T,T >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(3,insert,(Sequence,Pos_or_T,T))
+};
+
+BOOST_MPL_AUX_NA_SPEC(3, insert)
+
+}}
+
+#endif // BOOST_MPL_INSERT_HPP_INCLUDED
diff --git a/boost/boost/mpl/insert_fwd.hpp b/boost/boost/mpl/insert_fwd.hpp
new file mode 100644
index 00000000000..b1063153201
--- /dev/null
+++ b/boost/boost/mpl/insert_fwd.hpp
@@ -0,0 +1,24 @@
+
+#ifndef BOOST_MPL_INSERT_FWD_HPP_INCLUDED
+#define BOOST_MPL_INSERT_FWD_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/insert_fwd.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.5 $
+
+namespace boost { namespace mpl {
+
+template< typename Tag > struct insert_impl;
+template< typename Sequence, typename Pos_or_T, typename T > struct insert;
+
+}}
+
+#endif // BOOST_MPL_INSERT_FWD_HPP_INCLUDED
diff --git a/boost/boost/mpl/insert_range.hpp b/boost/boost/mpl/insert_range.hpp
new file mode 100644
index 00000000000..79bb227c3c3
--- /dev/null
+++ b/boost/boost/mpl/insert_range.hpp
@@ -0,0 +1,41 @@
+
+#ifndef BOOST_MPL_INSERT_RANGE_HPP_INCLUDED
+#define BOOST_MPL_INSERT_RANGE_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/insert_range.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/insert_range_fwd.hpp>
+#include <boost/mpl/sequence_tag.hpp>
+#include <boost/mpl/aux_/insert_range_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(Pos)
+ , typename BOOST_MPL_AUX_NA_PARAM(Range)
+ >
+struct insert_range
+ : insert_range_impl< typename sequence_tag<Sequence>::type >
+ ::template apply< Sequence,Pos,Range >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(3,insert_range,(Sequence,Pos,Range))
+};
+
+BOOST_MPL_AUX_NA_SPEC(3, insert_range)
+
+}}
+
+#endif // BOOST_MPL_INSERT_RANGE_HPP_INCLUDED
diff --git a/boost/boost/mpl/insert_range_fwd.hpp b/boost/boost/mpl/insert_range_fwd.hpp
new file mode 100644
index 00000000000..5a2a711acac
--- /dev/null
+++ b/boost/boost/mpl/insert_range_fwd.hpp
@@ -0,0 +1,24 @@
+
+#ifndef BOOST_MPL_INSERT_RANGE_FWD_HPP_INCLUDED
+#define BOOST_MPL_INSERT_RANGE_FWD_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/insert_range_fwd.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.4 $
+
+namespace boost { namespace mpl {
+
+template< typename Tag > struct insert_range_impl;
+template< typename Sequence, typename Pos, typename Range > struct insert_range;
+
+}}
+
+#endif // BOOST_MPL_INSERT_RANGE_FWD_HPP_INCLUDED
diff --git a/boost/boost/mpl/inserter.hpp b/boost/boost/mpl/inserter.hpp
new file mode 100644
index 00000000000..e09c6ec0d00
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/inserter.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.2 $
+
+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/boost/boost/mpl/int.hpp b/boost/boost/mpl/int.hpp
new file mode 100644
index 00000000000..f0078daad86
--- /dev/null
+++ b/boost/boost/mpl/int.hpp
@@ -0,0 +1,22 @@
+
+#ifndef BOOST_MPL_INT_HPP_INCLUDED
+#define BOOST_MPL_INT_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/int.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/int_fwd.hpp>
+
+#define AUX_WRAPPER_VALUE_TYPE int
+#include <boost/mpl/aux_/integral_wrapper.hpp>
+
+#endif // BOOST_MPL_INT_HPP_INCLUDED
diff --git a/boost/boost/mpl/int_fwd.hpp b/boost/boost/mpl/int_fwd.hpp
new file mode 100644
index 00000000000..919c6f1a9a7
--- /dev/null
+++ b/boost/boost/mpl/int_fwd.hpp
@@ -0,0 +1,27 @@
+
+#ifndef BOOST_MPL_INT_FWD_HPP_INCLUDED
+#define BOOST_MPL_INT_FWD_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/int_fwd.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.3 $
+
+#include <boost/mpl/aux_/adl_barrier.hpp>
+#include <boost/mpl/aux_/nttp_decl.hpp>
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+
+template< BOOST_MPL_AUX_NTTP_DECL(int, N) > struct int_;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+BOOST_MPL_AUX_ADL_BARRIER_DECL(int_)
+
+#endif // BOOST_MPL_INT_FWD_HPP_INCLUDED
diff --git a/boost/boost/mpl/integral_c.hpp b/boost/boost/mpl/integral_c.hpp
new file mode 100644
index 00000000000..dd647edb3b3
--- /dev/null
+++ b/boost/boost/mpl/integral_c.hpp
@@ -0,0 +1,51 @@
+
+#ifndef BOOST_MPL_INTEGRAL_C_HPP_INCLUDED
+#define BOOST_MPL_INTEGRAL_C_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/integral_c.hpp,v $
+// $Date: 2006/11/08 21:44:27 $
+// $Revision: 1.22.6.1 $
+
+#include <boost/mpl/integral_c_fwd.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+#include <boost/mpl/aux_/config/static_constant.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#if BOOST_WORKAROUND(__HP_aCC, <= 53800)
+// the type of non-type template arguments may not depend on template arguments
+# define AUX_WRAPPER_PARAMS(N) typename T, long N
+#else
+# define AUX_WRAPPER_PARAMS(N) typename T, T N
+#endif
+
+#define AUX_WRAPPER_NAME integral_c
+#define AUX_WRAPPER_VALUE_TYPE T
+#define AUX_WRAPPER_INST(value) AUX_WRAPPER_NAME< T, value >
+#include <boost/mpl/aux_/integral_wrapper.hpp>
+
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
+ && !BOOST_WORKAROUND(__BORLANDC__, <= 0x551)
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+// 'bool' constant doesn't have 'next'/'prior' members
+template< bool C >
+struct integral_c<bool, C>
+{
+ BOOST_STATIC_CONSTANT(bool, value = C);
+ typedef integral_c_tag tag;
+ typedef integral_c type;
+ typedef bool value_type;
+ operator bool() const { return this->value; }
+};
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+#endif
+
+#endif // BOOST_MPL_INTEGRAL_C_HPP_INCLUDED
diff --git a/boost/boost/mpl/integral_c_fwd.hpp b/boost/boost/mpl/integral_c_fwd.hpp
new file mode 100644
index 00000000000..aa7ea837300
--- /dev/null
+++ b/boost/boost/mpl/integral_c_fwd.hpp
@@ -0,0 +1,32 @@
+
+#ifndef BOOST_MPL_INTEGRAL_C_FWD_HPP_INCLUDED
+#define BOOST_MPL_INTEGRAL_C_FWD_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/integral_c_fwd.hpp,v $
+// $Date: 2006/11/08 21:44:27 $
+// $Revision: 1.4.14.1 $
+
+#include <boost/mpl/aux_/config/workaround.hpp>
+#include <boost/mpl/aux_/adl_barrier.hpp>
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+
+#if BOOST_WORKAROUND(__HP_aCC, <= 53800)
+// the type of non-type template arguments may not depend on template arguments
+template< typename T, long N > struct integral_c;
+#else
+template< typename T, T N > struct integral_c;
+#endif
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+BOOST_MPL_AUX_ADL_BARRIER_DECL(integral_c)
+
+#endif // BOOST_MPL_INTEGRAL_C_FWD_HPP_INCLUDED
diff --git a/boost/boost/mpl/integral_c_tag.hpp b/boost/boost/mpl/integral_c_tag.hpp
new file mode 100644
index 00000000000..87dc16b8ac2
--- /dev/null
+++ b/boost/boost/mpl/integral_c_tag.hpp
@@ -0,0 +1,26 @@
+
+#ifndef BOOST_MPL_INTEGRAL_C_TAG_HPP_INCLUDED
+#define BOOST_MPL_INTEGRAL_C_TAG_HPP_INCLUDED
+
+// 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/integral_c_tag.hpp,v $
+// $Date: 2004/09/28 13:56:58 $
+// $Revision: 1.2 $
+
+
+#include <boost/mpl/aux_/adl_barrier.hpp>
+#include <boost/mpl/aux_/config/static_constant.hpp>
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+struct integral_c_tag { BOOST_STATIC_CONSTANT(int, value = 0); };
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+BOOST_MPL_AUX_ADL_BARRIER_DECL(integral_c_tag)
+
+#endif // BOOST_MPL_INTEGRAL_C_TAG_HPP_INCLUDED
diff --git a/boost/boost/mpl/is_placeholder.hpp b/boost/boost/mpl/is_placeholder.hpp
new file mode 100644
index 00000000000..9618e31b2ed
--- /dev/null
+++ b/boost/boost/mpl/is_placeholder.hpp
@@ -0,0 +1,67 @@
+
+#ifndef BOOST_MPL_IS_PLACEHOLDER_HPP_INCLUDED
+#define BOOST_MPL_IS_PLACEHOLDER_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/is_placeholder.hpp,v $
+// $Date: 2004/09/07 08:51:31 $
+// $Revision: 1.6 $
+
+#include <boost/mpl/arg_fwd.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/aux_/yes_no.hpp>
+#include <boost/mpl/aux_/type_wrapper.hpp>
+#include <boost/mpl/aux_/nttp_decl.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+#include <boost/mpl/aux_/config/static_constant.hpp>
+
+namespace boost { namespace mpl {
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template< typename T >
+struct is_placeholder
+ : bool_<false>
+{
+};
+
+template< BOOST_MPL_AUX_NTTP_DECL(int, N) >
+struct is_placeholder< arg<N> >
+ : bool_<true>
+{
+};
+
+#else
+
+namespace aux {
+
+aux::no_tag is_placeholder_helper(...);
+
+template< BOOST_MPL_AUX_NTTP_DECL(int, N) >
+aux::yes_tag is_placeholder_helper(aux::type_wrapper< arg<N> >*);
+
+} // namespace aux
+
+template< typename T >
+struct is_placeholder
+{
+ static aux::type_wrapper<T>* get();
+ BOOST_STATIC_CONSTANT(bool, value =
+ sizeof(aux::is_placeholder_helper(get())) == sizeof(aux::yes_tag)
+ );
+
+ typedef bool_<value> type;
+};
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+}}
+
+#endif // BOOST_MPL_IS_PLACEHOLDER_HPP_INCLUDED
diff --git a/boost/boost/mpl/is_sequence.hpp b/boost/boost/mpl/is_sequence.hpp
new file mode 100644
index 00000000000..a9d536d4434
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/is_sequence.hpp,v $
+// $Date: 2005/08/25 16:27:21 $
+// $Revision: 1.9 $
+
+#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/boost/boost/mpl/iter_fold.hpp b/boost/boost/mpl/iter_fold.hpp
new file mode 100644
index 00000000000..59978de6876
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/iter_fold.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.4 $
+
+#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/boost/boost/mpl/iter_fold_if.hpp b/boost/boost/mpl/iter_fold_if.hpp
new file mode 100644
index 00000000000..3328c9d1a58
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/iter_fold_if.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.7 $
+
+#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/boost/boost/mpl/iterator_category.hpp b/boost/boost/mpl/iterator_category.hpp
new file mode 100644
index 00000000000..f522d74be96
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/iterator_category.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.6 $
+
+#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/boost/boost/mpl/iterator_range.hpp b/boost/boost/mpl/iterator_range.hpp
new file mode 100644
index 00000000000..ed6766d8c8e
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/iterator_range.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.4 $
+
+#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/boost/boost/mpl/iterator_tags.hpp b/boost/boost/mpl/iterator_tags.hpp
new file mode 100644
index 00000000000..93a8256ea61
--- /dev/null
+++ b/boost/boost/mpl/iterator_tags.hpp
@@ -0,0 +1,27 @@
+
+#ifndef BOOST_MPL_ITERATOR_TAG_HPP_INCLUDED
+#define BOOST_MPL_ITERATOR_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/iterator_tags.hpp,v $
+// $Date: 2004/11/28 01:54:51 $
+// $Revision: 1.3 $
+
+#include <boost/mpl/int.hpp>
+
+namespace boost { namespace mpl {
+
+struct forward_iterator_tag : int_<0> { typedef forward_iterator_tag type; };
+struct bidirectional_iterator_tag : int_<1> { typedef bidirectional_iterator_tag type; };
+struct random_access_iterator_tag : int_<2> { typedef random_access_iterator_tag type; };
+
+}}
+
+#endif // BOOST_MPL_ITERATOR_TAG_HPP_INCLUDED
diff --git a/boost/boost/mpl/joint_view.hpp b/boost/boost/mpl/joint_view.hpp
new file mode 100644
index 00000000000..5af5eb106ea
--- /dev/null
+++ b/boost/boost/mpl/joint_view.hpp
@@ -0,0 +1,65 @@
+
+#ifndef BOOST_MPL_JOINT_VIEW_HPP_INCLUDED
+#define BOOST_MPL_JOINT_VIEW_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/joint_view.hpp,v $
+// $Date: 2004/10/02 19:08:57 $
+// $Revision: 1.8 $
+
+#include <boost/mpl/aux_/joint_iter.hpp>
+#include <boost/mpl/plus.hpp>
+#include <boost/mpl/size_fwd.hpp>
+#include <boost/mpl/begin_end.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+
+namespace boost { namespace mpl {
+
+namespace aux {
+struct joint_view_tag;
+}
+
+template<>
+struct size_impl< aux::joint_view_tag >
+{
+ template < typename JointView > struct apply
+ : plus<
+ size<typename JointView::sequence1_>
+ , size<typename JointView::sequence2_>
+ >
+ {};
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(Sequence1_)
+ , typename BOOST_MPL_AUX_NA_PARAM(Sequence2_)
+ >
+struct joint_view
+{
+ typedef typename mpl::begin<Sequence1_>::type first1_;
+ typedef typename mpl::end<Sequence1_>::type last1_;
+ typedef typename mpl::begin<Sequence2_>::type first2_;
+ typedef typename mpl::end<Sequence2_>::type last2_;
+
+ // agurt, 25/may/03: for the 'size_traits' implementation above
+ typedef Sequence1_ sequence1_;
+ typedef Sequence2_ sequence2_;
+
+ typedef joint_view type;
+ typedef aux::joint_view_tag tag;
+ typedef joint_iter<first1_,last1_,first2_> begin;
+ typedef joint_iter<last1_,last1_,last2_> end;
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, joint_view)
+
+}}
+
+#endif // BOOST_MPL_JOINT_VIEW_HPP_INCLUDED
diff --git a/boost/boost/mpl/key_type.hpp b/boost/boost/mpl/key_type.hpp
new file mode 100644
index 00000000000..6e330bc048f
--- /dev/null
+++ b/boost/boost/mpl/key_type.hpp
@@ -0,0 +1,42 @@
+
+#ifndef BOOST_MPL_KEY_TYPE_HPP_INCLUDED
+#define BOOST_MPL_KEY_TYPE_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/key_type.hpp,v $
+// $Date: 2004/12/14 22:34:44 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/key_type_fwd.hpp>
+#include <boost/mpl/sequence_tag.hpp>
+#include <boost/mpl/apply_wrap.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(AssociativeSequence)
+ , typename BOOST_MPL_AUX_NA_PARAM(T)
+ >
+struct key_type
+ : apply_wrap2<
+ key_type_impl< typename sequence_tag<AssociativeSequence>::type >
+ , AssociativeSequence, T>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2,key_type,(AssociativeSequence,T))
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, key_type)
+
+}}
+
+#endif // BOOST_MPL_KEY_TYPE_HPP_INCLUDED
diff --git a/boost/boost/mpl/key_type_fwd.hpp b/boost/boost/mpl/key_type_fwd.hpp
new file mode 100644
index 00000000000..aad6313c0d3
--- /dev/null
+++ b/boost/boost/mpl/key_type_fwd.hpp
@@ -0,0 +1,25 @@
+
+#ifndef BOOST_MPL_KEY_TYPE_FWD_HPP_INCLUDED
+#define BOOST_MPL_KEY_TYPE_FWD_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/key_type_fwd.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.2 $
+
+namespace boost { namespace mpl {
+
+template< typename Tag > struct key_type_impl;
+template< typename AssociativeSequence, typename T > struct key_type;
+
+}}
+
+#endif // BOOST_MPL_KEY_TYPE_FWD_HPP_INCLUDED
diff --git a/boost/boost/mpl/lambda.hpp b/boost/boost/mpl/lambda.hpp
new file mode 100644
index 00000000000..2f19eddc2ce
--- /dev/null
+++ b/boost/boost/mpl/lambda.hpp
@@ -0,0 +1,29 @@
+
+#ifndef BOOST_MPL_LAMBDA_HPP_INCLUDED
+#define BOOST_MPL_LAMBDA_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/lambda.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.5 $
+
+#include <boost/mpl/lambda_fwd.hpp>
+#include <boost/mpl/bind.hpp>
+#include <boost/mpl/aux_/config/lambda.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT)
+# include <boost/mpl/aux_/full_lambda.hpp>
+#else
+# include <boost/mpl/aux_/lambda_no_ctps.hpp>
+# include <boost/mpl/aux_/lambda_support.hpp>
+# define BOOST_MPL_CFG_NO_IMPLICIT_METAFUNCTIONS
+#endif
+
+#endif // BOOST_MPL_LAMBDA_HPP_INCLUDED
diff --git a/boost/boost/mpl/lambda_fwd.hpp b/boost/boost/mpl/lambda_fwd.hpp
new file mode 100644
index 00000000000..096a4a61efd
--- /dev/null
+++ b/boost/boost/mpl/lambda_fwd.hpp
@@ -0,0 +1,57 @@
+
+#ifndef BOOST_MPL_LAMBDA_FWD_HPP_INCLUDED
+#define BOOST_MPL_LAMBDA_FWD_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/lambda_fwd.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.7 $
+
+#include <boost/mpl/void_fwd.hpp>
+#include <boost/mpl/aux_/na.hpp>
+#include <boost/mpl/aux_/config/lambda.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT)
+
+# include <boost/mpl/int.hpp>
+# include <boost/mpl/aux_/lambda_arity_param.hpp>
+# include <boost/mpl/aux_/template_arity_fwd.hpp>
+
+namespace boost { namespace mpl {
+
+template<
+ typename T = na
+ , typename Tag = void_
+ BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(
+ typename Arity = int_< aux::template_arity<T>::value >
+ )
+ >
+struct lambda;
+
+}}
+
+#else // BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT
+
+# include <boost/mpl/bool.hpp>
+
+namespace boost { namespace mpl {
+
+template<
+ typename T = na
+ , typename Tag = void_
+ , typename Protect = true_
+ >
+struct lambda;
+
+}}
+
+#endif
+
+#endif // BOOST_MPL_LAMBDA_FWD_HPP_INCLUDED
diff --git a/boost/boost/mpl/less.hpp b/boost/boost/mpl/less.hpp
new file mode 100644
index 00000000000..39fc27f5704
--- /dev/null
+++ b/boost/boost/mpl/less.hpp
@@ -0,0 +1,21 @@
+
+#ifndef BOOST_MPL_LESS_HPP_INCLUDED
+#define BOOST_MPL_LESS_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/less.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.4 $
+
+#define AUX778076_OP_NAME less
+#define AUX778076_OP_TOKEN <
+#include <boost/mpl/aux_/comparison_op.hpp>
+
+#endif // BOOST_MPL_LESS_HPP_INCLUDED
diff --git a/boost/boost/mpl/less_equal.hpp b/boost/boost/mpl/less_equal.hpp
new file mode 100644
index 00000000000..c36d4799104
--- /dev/null
+++ b/boost/boost/mpl/less_equal.hpp
@@ -0,0 +1,21 @@
+
+#ifndef BOOST_MPL_LESS_EQUAL_HPP_INCLUDED
+#define BOOST_MPL_LESS_EQUAL_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/less_equal.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.3 $
+
+#define AUX778076_OP_NAME less_equal
+#define AUX778076_OP_TOKEN <=
+#include <boost/mpl/aux_/comparison_op.hpp>
+
+#endif // BOOST_MPL_LESS_EQUAL_HPP_INCLUDED
diff --git a/boost/boost/mpl/limits/arity.hpp b/boost/boost/mpl/limits/arity.hpp
new file mode 100644
index 00000000000..18d87d99313
--- /dev/null
+++ b/boost/boost/mpl/limits/arity.hpp
@@ -0,0 +1,21 @@
+
+#ifndef BOOST_MPL_LIMITS_ARITY_HPP_INCLUDED
+#define BOOST_MPL_LIMITS_ARITY_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/limits/arity.hpp,v $
+// $Date: 2004/09/02 15:40:57 $
+// $Revision: 1.4 $
+
+#if !defined(BOOST_MPL_LIMIT_METAFUNCTION_ARITY)
+# define BOOST_MPL_LIMIT_METAFUNCTION_ARITY 5
+#endif
+
+#endif // BOOST_MPL_LIMITS_ARITY_HPP_INCLUDED
diff --git a/boost/boost/mpl/limits/list.hpp b/boost/boost/mpl/limits/list.hpp
new file mode 100644
index 00000000000..83c0ca37b55
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/limits/list.hpp,v $
+// $Date: 2004/09/02 15:40:57 $
+// $Revision: 1.4 $
+
+#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/boost/boost/mpl/limits/map.hpp b/boost/boost/mpl/limits/map.hpp
new file mode 100644
index 00000000000..16d9240f746
--- /dev/null
+++ b/boost/boost/mpl/limits/map.hpp
@@ -0,0 +1,21 @@
+
+#ifndef BOOST_MPL_LIMITS_MAP_HPP_INCLUDED
+#define BOOST_MPL_LIMITS_MAP_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/limits/map.hpp,v $
+// $Date: 2004/09/02 15:40:57 $
+// $Revision: 1.2 $
+
+#if !defined(BOOST_MPL_LIMIT_MAP_SIZE)
+# define BOOST_MPL_LIMIT_MAP_SIZE 20
+#endif
+
+#endif // BOOST_MPL_LIMITS_MAP_HPP_INCLUDED
diff --git a/boost/boost/mpl/limits/set.hpp b/boost/boost/mpl/limits/set.hpp
new file mode 100644
index 00000000000..3ba1e64cb59
--- /dev/null
+++ b/boost/boost/mpl/limits/set.hpp
@@ -0,0 +1,21 @@
+
+#ifndef BOOST_MPL_LIMITS_SET_HPP_INCLUDED
+#define BOOST_MPL_LIMITS_SET_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/limits/set.hpp,v $
+// $Date: 2004/09/02 15:40:57 $
+// $Revision: 1.2 $
+
+#if !defined(BOOST_MPL_LIMIT_SET_SIZE)
+# define BOOST_MPL_LIMIT_SET_SIZE 20
+#endif
+
+#endif // BOOST_MPL_LIMITS_SET_HPP_INCLUDED
diff --git a/boost/boost/mpl/limits/unrolling.hpp b/boost/boost/mpl/limits/unrolling.hpp
new file mode 100644
index 00000000000..773e16aabdb
--- /dev/null
+++ b/boost/boost/mpl/limits/unrolling.hpp
@@ -0,0 +1,21 @@
+
+#ifndef BOOST_MPL_LIMITS_UNROLLING_HPP_INCLUDED
+#define BOOST_MPL_LIMITS_UNROLLING_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/limits/unrolling.hpp,v $
+// $Date: 2004/09/02 15:40:57 $
+// $Revision: 1.4 $
+
+#if !defined(BOOST_MPL_LIMIT_UNROLLING)
+# define BOOST_MPL_LIMIT_UNROLLING 4
+#endif
+
+#endif // BOOST_MPL_LIMITS_UNROLLING_HPP_INCLUDED
diff --git a/boost/boost/mpl/limits/vector.hpp b/boost/boost/mpl/limits/vector.hpp
new file mode 100644
index 00000000000..ca79aea8f14
--- /dev/null
+++ b/boost/boost/mpl/limits/vector.hpp
@@ -0,0 +1,21 @@
+
+#ifndef BOOST_MPL_LIMITS_VECTOR_HPP_INCLUDED
+#define BOOST_MPL_LIMITS_VECTOR_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/limits/vector.hpp,v $
+// $Date: 2004/09/02 15:40:57 $
+// $Revision: 1.4 $
+
+#if !defined(BOOST_MPL_LIMIT_VECTOR_SIZE)
+# define BOOST_MPL_LIMIT_VECTOR_SIZE 20
+#endif
+
+#endif // BOOST_MPL_LIMITS_VECTOR_HPP_INCLUDED
diff --git a/boost/boost/mpl/list.hpp b/boost/boost/mpl/list.hpp
new file mode 100644
index 00000000000..b3f74086698
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/list.hpp,v $
+// $Date: 2004/11/28 01:54:51 $
+// $Revision: 1.9 $
+
+#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/boost/boost/mpl/list/aux_/O1_size.hpp b/boost/boost/mpl/list/aux_/O1_size.hpp
new file mode 100644
index 00000000000..4040d66583c
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/list/aux_/O1_size.hpp,v $
+// $Date: 2004/09/02 15:40:58 $
+// $Revision: 1.4 $
+
+#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/boost/boost/mpl/list/aux_/begin_end.hpp b/boost/boost/mpl/list/aux_/begin_end.hpp
new file mode 100644
index 00000000000..3a60dee7bc6
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/list/aux_/begin_end.hpp,v $
+// $Date: 2004/09/02 15:40:58 $
+// $Revision: 1.4 $
+
+#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/boost/boost/mpl/list/aux_/clear.hpp b/boost/boost/mpl/list/aux_/clear.hpp
new file mode 100644
index 00000000000..e5d977245fe
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/list/aux_/clear.hpp,v $
+// $Date: 2004/09/02 15:40:58 $
+// $Revision: 1.4 $
+
+#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/boost/boost/mpl/list/aux_/empty.hpp b/boost/boost/mpl/list/aux_/empty.hpp
new file mode 100644
index 00000000000..d2681fcac63
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/list/aux_/empty.hpp,v $
+// $Date: 2004/09/02 15:40:58 $
+// $Revision: 1.5 $
+
+#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/boost/boost/mpl/list/aux_/front.hpp b/boost/boost/mpl/list/aux_/front.hpp
new file mode 100644
index 00000000000..267063dc58a
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/list/aux_/front.hpp,v $
+// $Date: 2004/09/02 15:40:58 $
+// $Revision: 1.4 $
+
+#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/boost/boost/mpl/list/aux_/include_preprocessed.hpp b/boost/boost/mpl/list/aux_/include_preprocessed.hpp
new file mode 100644
index 00000000000..6066bb56ea7
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/list/aux_/include_preprocessed.hpp,v $
+// $Date: 2006/11/09 01:39:54 $
+// $Revision: 1.4.8.1 $
+
+// 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/boost/boost/mpl/list/aux_/item.hpp b/boost/boost/mpl/list/aux_/item.hpp
new file mode 100644
index 00000000000..9110efe121f
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/list/aux_/item.hpp,v $
+// $Date: 2004/09/02 15:40:58 $
+// $Revision: 1.2 $
+
+#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/boost/boost/mpl/list/aux_/iterator.hpp b/boost/boost/mpl/list/aux_/iterator.hpp
new file mode 100644
index 00000000000..a51b154648f
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/list/aux_/iterator.hpp,v $
+// $Date: 2004/10/01 16:29:37 $
+// $Revision: 1.6 $
+
+#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/boost/boost/mpl/list/aux_/numbered.hpp b/boost/boost/mpl/list/aux_/numbered.hpp
new file mode 100644
index 00000000000..e9447eadeb9
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/list/aux_/numbered.hpp,v $
+// $Date: 2004/09/02 15:40:58 $
+// $Revision: 1.4 $
+
+#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/boost/boost/mpl/list/aux_/numbered_c.hpp b/boost/boost/mpl/list/aux_/numbered_c.hpp
new file mode 100644
index 00000000000..7c5329a3861
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/list/aux_/numbered_c.hpp,v $
+// $Date: 2004/11/28 01:48:53 $
+// $Revision: 1.5 $
+
+#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/boost/boost/mpl/list/aux_/pop_front.hpp b/boost/boost/mpl/list/aux_/pop_front.hpp
new file mode 100644
index 00000000000..f58471d55e0
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/list/aux_/pop_front.hpp,v $
+// $Date: 2004/10/24 08:18:08 $
+// $Revision: 1.5 $
+
+#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/boost/boost/mpl/list/aux_/preprocessed/plain/list10.hpp b/boost/boost/mpl/list/aux_/preprocessed/plain/list10.hpp
new file mode 100644
index 00000000000..99368d2c18a
--- /dev/null
+++ b/boost/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/boost/boost/mpl/list/aux_/preprocessed/plain/list10_c.hpp b/boost/boost/mpl/list/aux_/preprocessed/plain/list10_c.hpp
new file mode 100644
index 00000000000..7133d712167
--- /dev/null
+++ b/boost/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/boost/boost/mpl/list/aux_/preprocessed/plain/list20.hpp b/boost/boost/mpl/list/aux_/preprocessed/plain/list20.hpp
new file mode 100644
index 00000000000..750e495f3fe
--- /dev/null
+++ b/boost/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/boost/boost/mpl/list/aux_/preprocessed/plain/list20_c.hpp b/boost/boost/mpl/list/aux_/preprocessed/plain/list20_c.hpp
new file mode 100644
index 00000000000..7f15acf3e96
--- /dev/null
+++ b/boost/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/boost/boost/mpl/list/aux_/preprocessed/plain/list30.hpp b/boost/boost/mpl/list/aux_/preprocessed/plain/list30.hpp
new file mode 100644
index 00000000000..54591011961
--- /dev/null
+++ b/boost/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/boost/boost/mpl/list/aux_/preprocessed/plain/list30_c.hpp b/boost/boost/mpl/list/aux_/preprocessed/plain/list30_c.hpp
new file mode 100644
index 00000000000..5393d792bdb
--- /dev/null
+++ b/boost/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/boost/boost/mpl/list/aux_/preprocessed/plain/list40.hpp b/boost/boost/mpl/list/aux_/preprocessed/plain/list40.hpp
new file mode 100644
index 00000000000..68c67613648
--- /dev/null
+++ b/boost/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/boost/boost/mpl/list/aux_/preprocessed/plain/list40_c.hpp b/boost/boost/mpl/list/aux_/preprocessed/plain/list40_c.hpp
new file mode 100644
index 00000000000..0c51ba20956
--- /dev/null
+++ b/boost/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/boost/boost/mpl/list/aux_/preprocessed/plain/list50.hpp b/boost/boost/mpl/list/aux_/preprocessed/plain/list50.hpp
new file mode 100644
index 00000000000..4cc22da278c
--- /dev/null
+++ b/boost/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/boost/boost/mpl/list/aux_/preprocessed/plain/list50_c.hpp b/boost/boost/mpl/list/aux_/preprocessed/plain/list50_c.hpp
new file mode 100644
index 00000000000..28c061d5bf3
--- /dev/null
+++ b/boost/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/boost/boost/mpl/list/aux_/push_back.hpp b/boost/boost/mpl/list/aux_/push_back.hpp
new file mode 100644
index 00000000000..38ae8ec6ee9
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/list/aux_/push_back.hpp,v $
+// $Date: 2004/09/02 15:40:59 $
+// $Revision: 1.2 $
+
+#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/boost/boost/mpl/list/aux_/push_front.hpp b/boost/boost/mpl/list/aux_/push_front.hpp
new file mode 100644
index 00000000000..deb6bb327b5
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/list/aux_/push_front.hpp,v $
+// $Date: 2004/09/02 15:40:59 $
+// $Revision: 1.4 $
+
+#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/boost/boost/mpl/list/aux_/size.hpp b/boost/boost/mpl/list/aux_/size.hpp
new file mode 100644
index 00000000000..f390ed7c28d
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/list/aux_/size.hpp,v $
+// $Date: 2004/09/02 15:40:59 $
+// $Revision: 1.4 $
+
+#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/boost/boost/mpl/list/aux_/tag.hpp b/boost/boost/mpl/list/aux_/tag.hpp
new file mode 100644
index 00000000000..c484f37470c
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/list/aux_/tag.hpp,v $
+// $Date: 2004/09/02 15:40:59 $
+// $Revision: 1.4 $
+
+namespace boost { namespace mpl { namespace aux {
+
+struct list_tag;
+struct l_iter_tag;
+
+}}}
+
+#endif // BOOST_MPL_LIST_AUX_TAG_HPP_INCLUDED
diff --git a/boost/boost/mpl/list/list0.hpp b/boost/boost/mpl/list/list0.hpp
new file mode 100644
index 00000000000..b2d41f43227
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/list/list0.hpp,v $
+// $Date: 2004/09/02 15:40:58 $
+// $Revision: 1.4 $
+
+#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/boost/boost/mpl/list/list0_c.hpp b/boost/boost/mpl/list/list0_c.hpp
new file mode 100644
index 00000000000..43f8ad8340c
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/list/list0_c.hpp,v $
+// $Date: 2004/11/28 07:18:24 $
+// $Revision: 1.5 $
+
+#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/boost/boost/mpl/list/list10.hpp b/boost/boost/mpl/list/list10.hpp
new file mode 100644
index 00000000000..6b1de483c58
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/list/list10.hpp,v $
+// $Date: 2004/09/02 15:40:58 $
+// $Revision: 1.6 $
+
+#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/boost/boost/mpl/list/list10_c.hpp b/boost/boost/mpl/list/list10_c.hpp
new file mode 100644
index 00000000000..af77809466e
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/list/list10_c.hpp,v $
+// $Date: 2004/09/02 15:40:58 $
+// $Revision: 1.6 $
+
+#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/boost/boost/mpl/list/list20.hpp b/boost/boost/mpl/list/list20.hpp
new file mode 100644
index 00000000000..71fe5f42901
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/list/list20.hpp,v $
+// $Date: 2004/09/02 15:40:58 $
+// $Revision: 1.6 $
+
+#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/boost/boost/mpl/list/list20_c.hpp b/boost/boost/mpl/list/list20_c.hpp
new file mode 100644
index 00000000000..14112eb8944
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/list/list20_c.hpp,v $
+// $Date: 2004/09/02 15:40:58 $
+// $Revision: 1.6 $
+
+#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/boost/boost/mpl/list/list30.hpp b/boost/boost/mpl/list/list30.hpp
new file mode 100644
index 00000000000..6b7324c53b2
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/list/list30.hpp,v $
+// $Date: 2004/09/02 15:40:58 $
+// $Revision: 1.6 $
+
+#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/boost/boost/mpl/list/list30_c.hpp b/boost/boost/mpl/list/list30_c.hpp
new file mode 100644
index 00000000000..c0b6a99f0c7
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/list/list30_c.hpp,v $
+// $Date: 2004/09/02 15:40:58 $
+// $Revision: 1.6 $
+
+#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/boost/boost/mpl/list/list40.hpp b/boost/boost/mpl/list/list40.hpp
new file mode 100644
index 00000000000..0f807cd4f1b
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/list/list40.hpp,v $
+// $Date: 2004/09/02 15:40:58 $
+// $Revision: 1.6 $
+
+#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/boost/boost/mpl/list/list40_c.hpp b/boost/boost/mpl/list/list40_c.hpp
new file mode 100644
index 00000000000..07f26822ede
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/list/list40_c.hpp,v $
+// $Date: 2004/09/02 15:40:58 $
+// $Revision: 1.6 $
+
+#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/boost/boost/mpl/list/list50.hpp b/boost/boost/mpl/list/list50.hpp
new file mode 100644
index 00000000000..9c95c484587
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/list/list50.hpp,v $
+// $Date: 2004/09/02 15:40:58 $
+// $Revision: 1.6 $
+
+#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/boost/boost/mpl/list/list50_c.hpp b/boost/boost/mpl/list/list50_c.hpp
new file mode 100644
index 00000000000..a25bc470f37
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/list/list50_c.hpp,v $
+// $Date: 2004/09/02 15:40:58 $
+// $Revision: 1.6 $
+
+#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/boost/boost/mpl/list_c.hpp b/boost/boost/mpl/list_c.hpp
new file mode 100644
index 00000000000..e33fa584a6b
--- /dev/null
+++ b/boost/boost/mpl/list_c.hpp
@@ -0,0 +1,60 @@
+
+#ifndef BOOST_MPL_LIST_C_HPP_INCLUDED
+#define BOOST_MPL_LIST_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/list_c.hpp,v $
+// $Date: 2004/11/28 01:54:51 $
+// $Revision: 1.8 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/limits/list.hpp>
+# include <boost/mpl/aux_/nttp_decl.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_C_HEADER \
+ BOOST_PP_CAT(BOOST_PP_CAT(list,BOOST_MPL_LIMIT_LIST_SIZE),_c).hpp \
+ /**/
+#else
+# define AUX778076_LIST_C_HEADER \
+ BOOST_PP_CAT(BOOST_PP_CAT(list,BOOST_MPL_LIMIT_LIST_SIZE),_c)##.hpp \
+ /**/
+#endif
+
+# include BOOST_PP_STRINGIZE(boost/mpl/list/AUX778076_LIST_C_HEADER)
+# undef AUX778076_LIST_C_HEADER
+# include <climits>
+#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_c.hpp
+# include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#else
+
+# include <boost/mpl/limits/list.hpp>
+
+# define AUX778076_SEQUENCE_NAME list_c
+# define AUX778076_SEQUENCE_LIMIT BOOST_MPL_LIMIT_LIST_SIZE
+# define AUX778076_SEQUENCE_NAME_N(n) BOOST_PP_CAT(BOOST_PP_CAT(list,n),_c)
+# define AUX778076_SEQUENCE_INTEGRAL_WRAPPER
+# include <boost/mpl/aux_/sequence_wrapper.hpp>
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#endif // BOOST_MPL_LIST_C_HPP_INCLUDED
diff --git a/boost/boost/mpl/logical.hpp b/boost/boost/mpl/logical.hpp
new file mode 100644
index 00000000000..391d9e0e9bc
--- /dev/null
+++ b/boost/boost/mpl/logical.hpp
@@ -0,0 +1,21 @@
+
+#ifndef BOOST_MPL_LOGICAL_HPP_INCLUDED
+#define BOOST_MPL_LOGICAL_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/logical.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.5 $
+
+#include <boost/mpl/or.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/not.hpp>
+
+#endif // BOOST_MPL_LOGICAL_HPP_INCLUDED
diff --git a/boost/boost/mpl/long.hpp b/boost/boost/mpl/long.hpp
new file mode 100644
index 00000000000..e6f16c8b926
--- /dev/null
+++ b/boost/boost/mpl/long.hpp
@@ -0,0 +1,22 @@
+
+#ifndef BOOST_MPL_LONG_HPP_INCLUDED
+#define BOOST_MPL_LONG_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/long.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/long_fwd.hpp>
+
+#define AUX_WRAPPER_VALUE_TYPE long
+#include <boost/mpl/aux_/integral_wrapper.hpp>
+
+#endif // BOOST_MPL_LONG_HPP_INCLUDED
diff --git a/boost/boost/mpl/long_fwd.hpp b/boost/boost/mpl/long_fwd.hpp
new file mode 100644
index 00000000000..7c0df6d724a
--- /dev/null
+++ b/boost/boost/mpl/long_fwd.hpp
@@ -0,0 +1,27 @@
+
+#ifndef BOOST_MPL_LONG_FWD_HPP_INCLUDED
+#define BOOST_MPL_LONG_FWD_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/long_fwd.hpp,v $
+// $Date: 2004/09/28 13:56:58 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/aux_/adl_barrier.hpp>
+#include <boost/mpl/aux_/nttp_decl.hpp>
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+
+template< BOOST_MPL_AUX_NTTP_DECL(long, N) > struct long_;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+BOOST_MPL_AUX_ADL_BARRIER_DECL(long_)
+
+#endif // BOOST_MPL_LONG_FWD_HPP_INCLUDED
diff --git a/boost/boost/mpl/lower_bound.hpp b/boost/boost/mpl/lower_bound.hpp
new file mode 100644
index 00000000000..6d59c0a83c8
--- /dev/null
+++ b/boost/boost/mpl/lower_bound.hpp
@@ -0,0 +1,143 @@
+
+#ifndef BOOST_MPL_LOWER_BOUND_HPP_INCLUDED
+#define BOOST_MPL_LOWER_BOUND_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/lower_bound.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.8 $
+
+#include <boost/mpl/less.hpp>
+#include <boost/mpl/lambda.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#if BOOST_WORKAROUND(__BORLANDC__, < 0x600)
+# define BOOST_MPL_CFG_STRIPPED_DOWN_LOWER_BOUND_IMPL
+#endif
+
+#if !defined(BOOST_MPL_CFG_STRIPPED_DOWN_LOWER_BOUND_IMPL)
+# include <boost/mpl/minus.hpp>
+# include <boost/mpl/divides.hpp>
+# include <boost/mpl/size.hpp>
+# include <boost/mpl/advance.hpp>
+# include <boost/mpl/begin_end.hpp>
+# include <boost/mpl/long.hpp>
+# include <boost/mpl/eval_if.hpp>
+# include <boost/mpl/prior.hpp>
+# include <boost/mpl/deref.hpp>
+# include <boost/mpl/apply.hpp>
+# include <boost/mpl/aux_/value_wknd.hpp>
+#else
+# include <boost/mpl/not.hpp>
+# include <boost/mpl/find.hpp>
+# include <boost/mpl/bind.hpp>
+#endif
+
+#include <boost/config.hpp>
+
+namespace boost { namespace mpl {
+
+#if defined(BOOST_MPL_CFG_STRIPPED_DOWN_LOWER_BOUND_IMPL)
+
+// agurt 23/oct/02: has a wrong complexity etc., but at least it works
+// feel free to contribute a better implementation!
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+ , typename BOOST_MPL_AUX_NA_PARAM(T)
+ , typename Predicate = less<>
+ , typename pred_ = typename lambda<Predicate>::type
+ >
+struct lower_bound
+ : find_if< Sequence, bind1< not_<>, bind2<pred_,_,T> > >
+{
+};
+
+#else
+
+namespace aux {
+
+template<
+ typename Distance
+ , typename Predicate
+ , typename T
+ , typename DeferredIterator
+ >
+struct lower_bound_step_impl;
+
+template<
+ typename Distance
+ , typename Predicate
+ , typename T
+ , typename DeferredIterator
+ >
+struct lower_bound_step
+{
+ typedef typename eval_if<
+ Distance
+ , lower_bound_step_impl<Distance,Predicate,T,DeferredIterator>
+ , DeferredIterator
+ >::type type;
+};
+
+template<
+ typename Distance
+ , typename Predicate
+ , typename T
+ , typename DeferredIterator
+ >
+struct lower_bound_step_impl
+{
+ typedef typename divides< Distance, long_<2> >::type offset_;
+ typedef typename DeferredIterator::type iter_;
+ typedef typename advance< iter_,offset_ >::type middle_;
+ typedef typename apply2<
+ Predicate
+ , typename deref<middle_>::type
+ , T
+ >::type cond_;
+
+ typedef typename prior< minus< Distance, offset_> >::type step_;
+ typedef lower_bound_step< offset_,Predicate,T,DeferredIterator > step_forward_;
+ typedef lower_bound_step< step_,Predicate,T,next<middle_> > step_backward_;
+ typedef typename eval_if<
+ cond_
+ , step_backward_
+ , step_forward_
+ >::type type;
+};
+
+
+} // namespace aux
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+ , typename BOOST_MPL_AUX_NA_PARAM(T)
+ , typename Predicate = less<>
+ >
+struct lower_bound
+{
+ private:
+ typedef typename lambda<Predicate>::type pred_;
+ typedef typename size<Sequence>::type size_;
+
+ public:
+ typedef typename aux::lower_bound_step<
+ size_,pred_,T,begin<Sequence>
+ >::type type;
+};
+
+#endif // BOOST_MPL_CFG_STRIPPED_DOWN_LOWER_BOUND_IMPL
+
+BOOST_MPL_AUX_NA_SPEC(2, lower_bound)
+
+}}
+
+#endif // BOOST_MPL_LOWER_BOUND_HPP_INCLUDED
diff --git a/boost/boost/mpl/map.hpp b/boost/boost/mpl/map.hpp
new file mode 100644
index 00000000000..af6c8398576
--- /dev/null
+++ b/boost/boost/mpl/map.hpp
@@ -0,0 +1,57 @@
+
+#ifndef BOOST_MPL_MAP_HPP_INCLUDED
+#define BOOST_MPL_MAP_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/map.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.2 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/limits/map.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_MAP_HEADER \
+ BOOST_PP_CAT(map, BOOST_MPL_LIMIT_MAP_SIZE).hpp \
+ /**/
+#else
+# define AUX778076_MAP_HEADER \
+ BOOST_PP_CAT(map, BOOST_MPL_LIMIT_MAP_SIZE)##.hpp \
+ /**/
+#endif
+
+# include BOOST_PP_STRINGIZE(boost/mpl/map/AUX778076_MAP_HEADER)
+# undef AUX778076_MAP_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 map.hpp
+# include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#else
+
+# include <boost/mpl/limits/map.hpp>
+
+# define AUX778076_SEQUENCE_NAME map
+# define AUX778076_SEQUENCE_LIMIT BOOST_MPL_LIMIT_MAP_SIZE
+# include <boost/mpl/aux_/sequence_wrapper.hpp>
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#endif // BOOST_MPL_MAP_HPP_INCLUDED
diff --git a/boost/boost/mpl/map/aux_/at_impl.hpp b/boost/boost/mpl/map/aux_/at_impl.hpp
new file mode 100644
index 00000000000..0790123b505
--- /dev/null
+++ b/boost/boost/mpl/map/aux_/at_impl.hpp
@@ -0,0 +1,144 @@
+
+#ifndef BOOST_MPL_MAP_AUX_AT_IMPL_HPP_INCLUDED
+#define BOOST_MPL_MAP_AUX_AT_IMPL_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/map/aux_/at_impl.hpp,v $
+// $Date: 2005/12/05 17:59:21 $
+// $Revision: 1.7 $
+
+#include <boost/mpl/at_fwd.hpp>
+#include <boost/mpl/long.hpp>
+#include <boost/mpl/map/aux_/tag.hpp>
+#include <boost/mpl/aux_/order_impl.hpp>
+#include <boost/mpl/aux_/overload_names.hpp>
+#include <boost/mpl/aux_/type_wrapper.hpp>
+#include <boost/mpl/aux_/ptr_to_ref.hpp>
+#include <boost/mpl/aux_/static_cast.hpp>
+#include <boost/mpl/aux_/config/typeof.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+
+#if !defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
+# include <boost/mpl/eval_if.hpp>
+# include <boost/mpl/pair.hpp>
+# include <boost/mpl/void.hpp>
+# include <boost/mpl/aux_/config/static_constant.hpp>
+#endif
+
+namespace boost { namespace mpl {
+
+#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
+
+template< typename Map, typename Key >
+struct m_at
+{
+ typedef aux::type_wrapper<Key> key_;
+ typedef __typeof__( BOOST_MPL_AUX_OVERLOAD_CALL_VALUE_BY_KEY(
+ Map
+ , BOOST_MPL_AUX_STATIC_CAST(key_*, 0)
+ ) ) type;
+};
+
+template<>
+struct at_impl< aux::map_tag >
+{
+ template< typename Map, typename Key > struct apply
+ : aux::wrapped_type< typename m_at<
+ Map
+ , Key
+ >::type >
+ {
+ };
+};
+
+// agurt 31/jan/04: two-step implementation for the sake of GCC 3.x
+template< typename Map, long order >
+struct item_by_order_impl
+{
+ typedef __typeof__( BOOST_MPL_AUX_OVERLOAD_CALL_ITEM_BY_ORDER(
+ Map
+ , BOOST_MPL_AUX_STATIC_CAST(long_<order>*, 0)
+ ) ) type;
+};
+
+template< typename Map, long order >
+struct item_by_order
+ : aux::wrapped_type<
+ typename item_by_order_impl<Map,order>::type
+ >
+{
+};
+
+#else // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES
+
+# if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template< typename Map, long n > struct m_at
+{
+ typedef void_ type;
+};
+
+# else
+
+template< long n > struct m_at_impl
+{
+ template< typename Map > struct result_
+ {
+ typedef void_ type;
+ };
+};
+
+template< typename Map, long n > struct m_at
+{
+ typedef typename m_at_impl<n>::result_<Map>::type type;
+};
+
+# endif
+
+
+template<>
+struct at_impl< aux::map_tag >
+{
+ template< typename Map, typename Key > struct apply
+ {
+ typedef typename m_at< Map, (x_order_impl<Map,Key>::value - 2) >::type item_;
+ typedef typename eval_if<
+ is_void_<item_>
+ , void_
+ , second<item_>
+ >::type type;
+ };
+};
+
+template< typename Map, long order > struct is_item_masked
+{
+ BOOST_STATIC_CONSTANT(bool, value =
+ sizeof( BOOST_MPL_AUX_OVERLOAD_CALL_IS_MASKED(
+ Map
+ , BOOST_MPL_AUX_STATIC_CAST(long_<order>*, 0)
+ ) ) == sizeof(aux::yes_tag)
+ );
+};
+
+template< typename Map, long order > struct item_by_order
+{
+ typedef typename eval_if_c<
+ is_item_masked<Map,order>::value
+ , void_
+ , m_at<Map,(order - 2)>
+ >::type type;
+};
+
+#endif
+
+}}
+
+#endif // BOOST_MPL_SET_AUX_AT_IMPL_HPP_INCLUDED
diff --git a/boost/boost/mpl/map/aux_/begin_end_impl.hpp b/boost/boost/mpl/map/aux_/begin_end_impl.hpp
new file mode 100644
index 00000000000..76f7616dce8
--- /dev/null
+++ b/boost/boost/mpl/map/aux_/begin_end_impl.hpp
@@ -0,0 +1,50 @@
+
+#ifndef BOOST_MPL_MAP_AUX_BEGIN_END_IMPL_HPP_INCLUDED
+#define BOOST_MPL_MAP_AUX_BEGIN_END_IMPL_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/map/aux_/begin_end_impl.hpp,v $
+// $Date: 2004/09/05 09:42:58 $
+// $Revision: 1.3 $
+
+#include <boost/mpl/begin_end_fwd.hpp>
+#include <boost/mpl/next_prior.hpp>
+#include <boost/mpl/map/aux_/iterator.hpp>
+
+namespace boost { namespace mpl {
+
+template<>
+struct begin_impl< aux::map_tag >
+{
+ template< typename Map > struct apply
+ {
+ typedef typename next< typename Map::order >::type max_order_;
+ typedef m_iter<
+ Map
+ , next_order<Map,1,max_order_::value>::value
+ , max_order_::value
+ > type;
+ };
+};
+
+template<>
+struct end_impl< aux::map_tag >
+{
+ template< typename Map > struct apply
+ {
+ typedef typename next< typename Map::order >::type max_order_;
+ typedef m_iter< Map,max_order_::value,max_order_::value > type;
+ };
+};
+
+}}
+
+#endif // BOOST_MPL_MAP_AUX_BEGIN_END_IMPL_HPP_INCLUDED
diff --git a/boost/boost/mpl/map/aux_/clear_impl.hpp b/boost/boost/mpl/map/aux_/clear_impl.hpp
new file mode 100644
index 00000000000..40faddfc41f
--- /dev/null
+++ b/boost/boost/mpl/map/aux_/clear_impl.hpp
@@ -0,0 +1,35 @@
+
+#ifndef BOOST_MPL_MAP_AUX_CLEAR_IMPL_HPP_INCLUDED
+#define BOOST_MPL_MAP_AUX_CLEAR_IMPL_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/map/aux_/clear_impl.hpp,v $
+// $Date: 2004/09/02 15:41:00 $
+// $Revision: 1.2 $
+
+#include <boost/mpl/clear_fwd.hpp>
+#include <boost/mpl/map/aux_/map0.hpp>
+#include <boost/mpl/map/aux_/tag.hpp>
+
+namespace boost { namespace mpl {
+
+template<>
+struct clear_impl< aux::map_tag >
+{
+ template< typename Map > struct apply
+ {
+ typedef map0<> type;
+ };
+};
+
+}}
+
+#endif // BOOST_MPL_MAP_AUX_CLEAR_IMPL_HPP_INCLUDED
diff --git a/boost/boost/mpl/map/aux_/contains_impl.hpp b/boost/boost/mpl/map/aux_/contains_impl.hpp
new file mode 100644
index 00000000000..67a48c7bab6
--- /dev/null
+++ b/boost/boost/mpl/map/aux_/contains_impl.hpp
@@ -0,0 +1,43 @@
+
+#ifndef BOOST_MPL_MAP_AUX_CONTAINS_IMPL_HPP_INCLUDED
+#define BOOST_MPL_MAP_AUX_CONTAINS_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/map/aux_/contains_impl.hpp,v $
+// $Date: 2004/09/02 15:41:00 $
+// $Revision: 1.2 $
+
+#include <boost/mpl/contains_fwd.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/map/aux_/at_impl.hpp>
+#include <boost/mpl/map/aux_/tag.hpp>
+
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace mpl {
+
+template<>
+struct contains_impl< aux::map_tag >
+{
+ template< typename Map, typename Pair > struct apply
+ : is_same<
+ typename at_impl<aux::map_tag>::apply<
+ Map
+ , typename Pair::first
+ >::type
+ , typename Pair::second
+ >
+ {
+ };
+};
+
+}}
+
+#endif // BOOST_MPL_MAP_AUX_CONTAINS_IMPL_HPP_INCLUDED
diff --git a/boost/boost/mpl/map/aux_/empty_impl.hpp b/boost/boost/mpl/map/aux_/empty_impl.hpp
new file mode 100644
index 00000000000..35bee0c275f
--- /dev/null
+++ b/boost/boost/mpl/map/aux_/empty_impl.hpp
@@ -0,0 +1,34 @@
+
+#ifndef BOOST_MPL_MAP_AUX_EMPTY_IMPL_HPP_INCLUDED
+#define BOOST_MPL_MAP_AUX_EMPTY_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/map/aux_/empty_impl.hpp,v $
+// $Date: 2004/09/02 15:41:00 $
+// $Revision: 1.2 $
+
+#include <boost/mpl/empty_fwd.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/map/aux_/tag.hpp>
+
+namespace boost { namespace mpl {
+
+template<>
+struct empty_impl< aux::map_tag >
+{
+ template< typename Map > struct apply
+ : not_< typename Map::size >
+ {
+ };
+};
+
+}}
+
+#endif // BOOST_MPL_MAP_AUX_EMPTY_IMPL_HPP_INCLUDED
diff --git a/boost/boost/mpl/map/aux_/erase_impl.hpp b/boost/boost/mpl/map/aux_/erase_impl.hpp
new file mode 100644
index 00000000000..d8c1d83d8b9
--- /dev/null
+++ b/boost/boost/mpl/map/aux_/erase_impl.hpp
@@ -0,0 +1,41 @@
+
+#ifndef BOOST_MPL_MAP_AUX_ERASE_IMPL_HPP_INCLUDED
+#define BOOST_MPL_MAP_AUX_ERASE_IMPL_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/map/aux_/erase_impl.hpp,v $
+// $Date: 2004/09/05 09:42:58 $
+// $Revision: 1.3 $
+
+#include <boost/mpl/erase_fwd.hpp>
+#include <boost/mpl/map/aux_/erase_key_impl.hpp>
+#include <boost/mpl/map/aux_/tag.hpp>
+
+namespace boost { namespace mpl {
+
+template<>
+struct erase_impl< aux::map_tag >
+{
+ template<
+ typename Map
+ , typename Pos
+ , typename unused_
+ >
+ struct apply
+ : erase_key_impl<aux::map_tag>
+ ::apply<Map,typename Pos::type::first>
+ {
+ };
+};
+
+}}
+
+#endif // BOOST_MPL_MAP_AUX_ERASE_IMPL_HPP_INCLUDED
diff --git a/boost/boost/mpl/map/aux_/erase_key_impl.hpp b/boost/boost/mpl/map/aux_/erase_key_impl.hpp
new file mode 100644
index 00000000000..98bb2a1eb0a
--- /dev/null
+++ b/boost/boost/mpl/map/aux_/erase_key_impl.hpp
@@ -0,0 +1,53 @@
+
+#ifndef BOOST_MPL_MAP_AUX_ERASE_KEY_IMPL_HPP_INCLUDED
+#define BOOST_MPL_MAP_AUX_ERASE_KEY_IMPL_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/map/aux_/erase_key_impl.hpp,v $
+// $Date: 2004/09/05 09:42:58 $
+// $Revision: 1.3 $
+
+#include <boost/mpl/erase_key_fwd.hpp>
+#include <boost/mpl/map/aux_/has_key_impl.hpp>
+#include <boost/mpl/map/aux_/item.hpp>
+#include <boost/mpl/map/aux_/tag.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/base.hpp>
+#include <boost/mpl/eval_if.hpp>
+
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace mpl {
+
+template<>
+struct erase_key_impl< aux::map_tag >
+{
+ template<
+ typename Map
+ , typename Key
+ >
+ struct apply
+ : eval_if<
+ has_key_impl<aux::map_tag>::apply<Map,Key>
+ , eval_if<
+ is_same< Key,typename Map::key_ >
+ , base<Map>
+ , identity< m_mask<Key,Map> >
+ >
+ , identity<Map>
+ >
+ {
+ };
+};
+
+}}
+
+#endif // BOOST_MPL_MAP_AUX_ERASE_KEY_IMPL_HPP_INCLUDED
diff --git a/boost/boost/mpl/map/aux_/has_key_impl.hpp b/boost/boost/mpl/map/aux_/has_key_impl.hpp
new file mode 100644
index 00000000000..3a529f0e059
--- /dev/null
+++ b/boost/boost/mpl/map/aux_/has_key_impl.hpp
@@ -0,0 +1,44 @@
+
+#ifndef BOOST_MPL_MAP_AUX_HAS_KEY_IMPL_HPP_INCLUDED
+#define BOOST_MPL_MAP_AUX_HAS_KEY_IMPL_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/map/aux_/has_key_impl.hpp,v $
+// $Date: 2004/09/05 09:42:58 $
+// $Revision: 1.3 $
+
+#include <boost/mpl/has_key_fwd.hpp>
+#include <boost/mpl/map/aux_/tag.hpp>
+#include <boost/mpl/map/aux_/at_impl.hpp>
+#include <boost/mpl/void.hpp>
+#include <boost/mpl/aux_/config/typeof.hpp>
+
+namespace boost { namespace mpl {
+
+template<>
+struct has_key_impl< aux::map_tag >
+{
+ template< typename Map, typename Key > struct apply
+#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
+ : is_not_void_<
+ typename at_impl<aux::map_tag>
+ ::apply<Map,Key>::type
+ >
+#else
+ : bool_< ( x_order_impl<Map,Key>::value > 1 ) >
+#endif
+ {
+ };
+};
+
+}}
+
+#endif // BOOST_MPL_MAP_AUX_HAS_KEY_IMPL_HPP_INCLUDED
diff --git a/boost/boost/mpl/map/aux_/include_preprocessed.hpp b/boost/boost/mpl/map/aux_/include_preprocessed.hpp
new file mode 100644
index 00000000000..04616fd6643
--- /dev/null
+++ b/boost/boost/mpl/map/aux_/include_preprocessed.hpp
@@ -0,0 +1,53 @@
+
+// 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/map/aux_/include_preprocessed.hpp,v $
+// $Date: 2006/11/09 01:41:51 $
+// $Revision: 1.3.14.1 $
+
+// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION!
+
+#include <boost/mpl/aux_/config/typeof.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+#include <boost/mpl/aux_/config/preprocessor.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/stringize.hpp>
+
+#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
+# define AUX778076_INCLUDE_DIR typeof_based
+#elif defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+# define AUX778076_INCLUDE_DIR no_ctps
+#else
+# define AUX778076_INCLUDE_DIR plain
+#endif
+
+#if !defined(BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING)
+# define AUX778076_HEADER \
+ AUX778076_INCLUDE_DIR/BOOST_MPL_PREPROCESSED_HEADER \
+/**/
+#else
+# define AUX778076_HEADER \
+ BOOST_PP_CAT(AUX778076_INCLUDE_DIR,/)##BOOST_MPL_PREPROCESSED_HEADER \
+/**/
+#endif
+
+#if BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(700))
+# define AUX778076_INCLUDE_STRING BOOST_PP_STRINGIZE(boost/mpl/map/aux_/preprocessed/AUX778076_HEADER)
+# include AUX778076_INCLUDE_STRING
+# undef AUX778076_INCLUDE_STRING
+#else
+# include BOOST_PP_STRINGIZE(boost/mpl/map/aux_/preprocessed/AUX778076_HEADER)
+#endif
+
+# undef AUX778076_HEADER
+# undef AUX778076_INCLUDE_DIR
+
+#undef BOOST_MPL_PREPROCESSED_HEADER
diff --git a/boost/boost/mpl/map/aux_/insert_impl.hpp b/boost/boost/mpl/map/aux_/insert_impl.hpp
new file mode 100644
index 00000000000..86b60109d24
--- /dev/null
+++ b/boost/boost/mpl/map/aux_/insert_impl.hpp
@@ -0,0 +1,72 @@
+
+#ifndef BOOST_MPL_MAP_AUX_INSERT_IMPL_HPP_INCLUDED
+#define BOOST_MPL_MAP_AUX_INSERT_IMPL_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/map/aux_/insert_impl.hpp,v $
+// $Date: 2004/12/14 14:05:31 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/insert_fwd.hpp>
+#include <boost/mpl/next_prior.hpp>
+#include <boost/mpl/map/aux_/contains_impl.hpp>
+#include <boost/mpl/map/aux_/item.hpp>
+#include <boost/mpl/map/aux_/tag.hpp>
+#include <boost/mpl/aux_/na.hpp>
+#include <boost/mpl/aux_/config/typeof.hpp>
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< typename Map, typename Pair >
+struct map_insert_impl
+ : if_<
+ contains_impl<aux::map_tag>::apply<Map,Pair>
+ , Map
+#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
+ , m_item<
+ typename Pair::first
+ , typename Pair::second
+ , Map
+ >
+#else
+ , m_item<
+ next< typename Map::size >::type::value
+ , typename Pair::first
+ , typename Pair::second
+ , Map
+ >
+#endif
+ >
+{
+};
+}
+
+template<>
+struct insert_impl< aux::map_tag >
+{
+ template<
+ typename Map
+ , typename PosOrKey
+ , typename KeyOrNA
+ >
+ struct apply
+ : aux::map_insert_impl<
+ Map
+ , typename if_na<KeyOrNA,PosOrKey>::type
+ >
+ {
+ };
+};
+
+}}
+
+#endif // BOOST_MPL_MAP_AUX_INSERT_IMPL_HPP_INCLUDED
diff --git a/boost/boost/mpl/map/aux_/item.hpp b/boost/boost/mpl/map/aux_/item.hpp
new file mode 100644
index 00000000000..516ebeab120
--- /dev/null
+++ b/boost/boost/mpl/map/aux_/item.hpp
@@ -0,0 +1,138 @@
+
+#ifndef BOOST_MPL_MAP_AUX_ITEM_HPP_INCLUDED
+#define BOOST_MPL_MAP_AUX_ITEM_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/map/aux_/item.hpp,v $
+// $Date: 2004/12/14 14:05:32 $
+// $Revision: 1.5 $
+
+#include <boost/mpl/void.hpp>
+#include <boost/mpl/pair.hpp>
+#include <boost/mpl/long.hpp>
+#include <boost/mpl/next.hpp>
+#include <boost/mpl/prior.hpp>
+#include <boost/mpl/map/aux_/map0.hpp>
+#include <boost/mpl/aux_/order_impl.hpp>
+#include <boost/mpl/aux_/yes_no.hpp>
+#include <boost/mpl/aux_/type_wrapper.hpp>
+#include <boost/mpl/aux_/config/arrays.hpp>
+#include <boost/mpl/aux_/config/typeof.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+
+
+namespace boost { namespace mpl {
+
+#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
+
+template< typename Key, typename T, typename Base >
+struct m_item
+ : Base
+{
+ typedef Key key_;
+ typedef pair<Key,T> item;
+ typedef Base base;
+
+ typedef typename next< typename Base::size >::type size;
+ typedef typename next< typename Base::order >::type order;
+
+#if defined(BOOST_MPL_CFG_NO_DEPENDENT_ARRAY_TYPES)
+ typedef typename aux::weighted_tag<BOOST_MPL_AUX_MSVC_VALUE_WKND(order)::value>::type order_tag_;
+#else
+ typedef char (&order_tag_)[BOOST_MPL_AUX_MSVC_VALUE_WKND(order)::value];
+#endif
+
+ BOOST_MPL_AUX_MAP_OVERLOAD( aux::type_wrapper<T>, VALUE_BY_KEY, m_item, aux::type_wrapper<Key>* );
+ BOOST_MPL_AUX_MAP_OVERLOAD( aux::type_wrapper<item>, ITEM_BY_ORDER, m_item, order* );
+ BOOST_MPL_AUX_MAP_OVERLOAD( order_tag_, ORDER_BY_KEY, m_item, aux::type_wrapper<Key>* );
+};
+
+
+template< typename Key, typename Base >
+struct m_mask
+ : Base
+{
+ typedef void_ key_;
+ typedef Base base;
+
+ typedef typename prior< typename Base::size >::type size;
+ typedef typename x_order_impl<Base,Key>::type key_order_;
+
+ BOOST_MPL_AUX_MAP_OVERLOAD( aux::type_wrapper<void_>, VALUE_BY_KEY, m_mask, aux::type_wrapper<Key>* );
+ BOOST_MPL_AUX_MAP_OVERLOAD( aux::type_wrapper<void_>, ITEM_BY_ORDER, m_mask, key_order_* );
+};
+
+#else // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES
+
+
+# if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template< long n, typename Key, typename T, typename Base >
+struct m_item;
+
+# else
+
+template< long n >
+struct m_item_impl
+{
+ template< typename Key, typename T, typename Base >
+ struct result_;
+};
+
+template< long n, typename Key, typename T, typename Base >
+struct m_item
+ : m_item_impl<n>::result_<Key,T,Base>
+{
+};
+
+
+# endif
+
+
+template< typename Key, typename T, typename Base >
+struct m_item_
+ : Base
+{
+ typedef Key key_;
+ typedef Base base;
+ typedef m_item_ type;
+
+ typedef typename next< typename Base::size >::type size;
+ typedef typename next< typename Base::order >::type order;
+
+#if defined(BOOST_MPL_CFG_NO_DEPENDENT_ARRAY_TYPES)
+ typedef typename aux::weighted_tag<BOOST_MPL_AUX_MSVC_VALUE_WKND(order)::value>::type order_tag_;
+#else
+ typedef char (&order_tag_)[BOOST_MPL_AUX_MSVC_VALUE_WKND(order)::value];
+#endif
+
+ BOOST_MPL_AUX_MAP_OVERLOAD( order_tag_, ORDER_BY_KEY, m_item_, aux::type_wrapper<Key>* );
+};
+
+template< typename Key, typename Base >
+struct m_mask
+ : Base
+{
+ typedef void_ key_;
+ typedef Base base;
+
+ typedef typename prior< typename Base::size >::type size;
+ typedef typename x_order_impl<Base,Key>::type key_order_;
+
+ BOOST_MPL_AUX_MAP_OVERLOAD( aux::no_tag, ORDER_BY_KEY, m_mask, aux::type_wrapper<Key>* );
+ BOOST_MPL_AUX_MAP_OVERLOAD( aux::yes_tag, IS_MASKED, m_mask, key_order_* );
+};
+
+#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES
+
+}}
+
+#endif // BOOST_MPL_MAP_AUX_ITEM_HPP_INCLUDED
diff --git a/boost/boost/mpl/map/aux_/iterator.hpp b/boost/boost/mpl/map/aux_/iterator.hpp
new file mode 100644
index 00000000000..85fe3a52a06
--- /dev/null
+++ b/boost/boost/mpl/map/aux_/iterator.hpp
@@ -0,0 +1,169 @@
+
+#ifndef BOOST_MPL_MAP_AUX_ITERATOR_HPP_INCLUDED
+#define BOOST_MPL_MAP_AUX_ITERATOR_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/map/aux_/iterator.hpp,v $
+// $Date: 2004/12/14 14:05:32 $
+// $Revision: 1.3 $
+
+#include <boost/mpl/map/aux_/map0.hpp>
+#include <boost/mpl/map/aux_/at_impl.hpp>
+#include <boost/mpl/map/aux_/tag.hpp>
+#include <boost/mpl/iterator_tags.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/next.hpp>
+#include <boost/mpl/deref.hpp>
+#include <boost/mpl/long.hpp>
+#include <boost/mpl/void.hpp>
+#include <boost/mpl/aux_/nttp_decl.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+
+namespace boost { namespace mpl {
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template<
+ typename Map
+ , long order
+ , long max_order
+ >
+struct next_order
+ : if_<
+ is_void_< typename item_by_order<Map,order>::type >
+ , next_order<Map,(order+1),max_order>
+ , long_<order>
+ >::type
+{
+};
+
+template<
+ typename Map
+ , long max_order
+ >
+struct next_order<Map,max_order,max_order>
+ : long_<max_order>
+{
+};
+
+
+template< typename Map, long order, long max_order >
+struct m_iter
+{
+ typedef forward_iterator_tag category;
+ typedef typename item_by_order<Map,order>::type type;
+};
+
+template< typename Map, long max_order >
+struct m_iter<Map,max_order,max_order>
+{
+ typedef forward_iterator_tag category;
+};
+
+
+template< typename Map, long order, long max_order >
+struct next< m_iter<Map,order,max_order> >
+{
+ typedef m_iter<
+ Map
+ , next_order<Map,order+1,max_order>::value
+ , max_order
+ > type;
+};
+
+template< typename Map, long max_order >
+struct next< m_iter<Map,max_order,max_order> >
+{
+};
+
+#else
+
+template<
+ typename Map
+ , BOOST_MPL_AUX_NTTP_DECL(long, order)
+ , BOOST_MPL_AUX_NTTP_DECL(long, max_order)
+ >
+struct next_order;
+
+template<
+ typename Map
+ , BOOST_MPL_AUX_NTTP_DECL(long, order)
+ , BOOST_MPL_AUX_NTTP_DECL(long, max_order)
+ >
+struct next_order_impl
+ : if_<
+ is_void_< typename item_by_order<Map,order>::type >
+ , next_order<Map,(order+1),max_order>
+ , long_<order>
+ >::type
+ {
+ };
+
+template<
+ typename Map
+ , BOOST_MPL_AUX_NTTP_DECL(long, order)
+ , BOOST_MPL_AUX_NTTP_DECL(long, max_order)
+ >
+struct next_order
+ : if_c<
+ (order != max_order)
+ , next_order_impl<Map,order,max_order>
+ , long_<order>
+ >::type
+{
+};
+
+
+template<
+ typename Map
+ , BOOST_MPL_AUX_NTTP_DECL(long, order)
+ , BOOST_MPL_AUX_NTTP_DECL(long, max_order)
+ >
+struct m_iter;
+
+struct m_iter_empty_base {};
+
+template<
+ typename Map
+ , BOOST_MPL_AUX_NTTP_DECL(long, order)
+ , BOOST_MPL_AUX_NTTP_DECL(long, max_order)
+ >
+struct m_iter_base
+{
+ typedef typename item_by_order<Map,order>::type type;
+
+ typedef m_iter<
+ Map
+ , next_order<Map,order+1,max_order>::value
+ , max_order
+ > next;
+};
+
+template<
+ typename Map
+ , BOOST_MPL_AUX_NTTP_DECL(long, order)
+ , BOOST_MPL_AUX_NTTP_DECL(long, max_order)
+ >
+struct m_iter
+ : if_c<
+ (order == max_order)
+ , m_iter_empty_base
+ , m_iter_base<Map,order,max_order>
+ >::type
+{
+ typedef forward_iterator_tag category;
+};
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+}}
+
+#endif // BOOST_MPL_MAP_AUX_ITERATOR_HPP_INCLUDED
diff --git a/boost/boost/mpl/map/aux_/key_type_impl.hpp b/boost/boost/mpl/map/aux_/key_type_impl.hpp
new file mode 100644
index 00000000000..0a50415e31e
--- /dev/null
+++ b/boost/boost/mpl/map/aux_/key_type_impl.hpp
@@ -0,0 +1,36 @@
+
+#ifndef BOOST_MPL_MAP_AUX_KEY_TYPE_IMPL_HPP_INCLUDED
+#define BOOST_MPL_MAP_AUX_KEY_TYPE_IMPL_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/map/aux_/key_type_impl.hpp,v $
+// $Date: 2004/09/02 15:41:00 $
+// $Revision: 1.2 $
+
+#include <boost/mpl/key_type_fwd.hpp>
+#include <boost/mpl/pair.hpp>
+#include <boost/mpl/map/aux_/tag.hpp>
+
+namespace boost {
+namespace mpl {
+
+template<>
+struct key_type_impl< aux::map_tag >
+{
+ template< typename Map, typename T > struct apply
+ : first<T>
+ {
+ };
+};
+
+}}
+
+#endif // BOOST_MPL_MAP_AUX_KEY_TYPE_IMPL_HPP_INCLUDED
diff --git a/boost/boost/mpl/map/aux_/map0.hpp b/boost/boost/mpl/map/aux_/map0.hpp
new file mode 100644
index 00000000000..e4a52f6c47b
--- /dev/null
+++ b/boost/boost/mpl/map/aux_/map0.hpp
@@ -0,0 +1,74 @@
+
+#ifndef BOOST_MPL_MAP_AUX_MAP0_HPP_INCLUDED
+#define BOOST_MPL_MAP_AUX_MAP0_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/map/aux_/map0.hpp,v $
+// $Date: 2004/10/13 18:23:36 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/long.hpp>
+#include <boost/mpl/void.hpp>
+#include <boost/mpl/map/aux_/tag.hpp>
+#include <boost/mpl/aux_/na.hpp>
+#include <boost/mpl/aux_/yes_no.hpp>
+#include <boost/mpl/aux_/overload_names.hpp>
+#include <boost/mpl/aux_/config/operators.hpp>
+
+#include <boost/preprocessor/cat.hpp>
+
+namespace boost { namespace mpl {
+
+#if defined(BOOST_MPL_CFG_USE_OPERATORS_OVERLOADING)
+
+# define BOOST_MPL_AUX_MAP0_OVERLOAD(R, f, X, T) \
+ friend R BOOST_PP_CAT(BOOST_MPL_AUX_OVERLOAD_,f)(X const&, T) \
+/**/
+
+# define BOOST_MPL_AUX_MAP_OVERLOAD(R, f, X, T) \
+ BOOST_MPL_AUX_MAP0_OVERLOAD(R, f, X, T) \
+/**/
+
+#else
+
+# define BOOST_MPL_AUX_MAP0_OVERLOAD(R, f, X, T) \
+ static R BOOST_PP_CAT(BOOST_MPL_AUX_OVERLOAD_,f)(X const&, T) \
+/**/
+
+# define BOOST_MPL_AUX_MAP_OVERLOAD(R, f, X, T) \
+ BOOST_MPL_AUX_MAP0_OVERLOAD(R, f, X, T); \
+ using Base::BOOST_PP_CAT(BOOST_MPL_AUX_OVERLOAD_,f) \
+/**/
+
+#endif
+
+
+template< typename Dummy = na > struct map0
+{
+ typedef map0 type;
+ typedef aux::map_tag tag;
+ typedef void_ key_;
+ typedef long_<1> order;
+ typedef long_<0> size;
+
+#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
+ BOOST_MPL_AUX_MAP0_OVERLOAD( aux::type_wrapper<void_>, VALUE_BY_KEY, map0<>, void const volatile* );
+ BOOST_MPL_AUX_MAP0_OVERLOAD( aux::type_wrapper<void_>, ITEM_BY_ORDER, map0<>, long_<1>* );
+ BOOST_MPL_AUX_MAP0_OVERLOAD( aux::no_tag, ORDER_BY_KEY, map0<>, void const volatile* );
+#else
+ BOOST_MPL_AUX_MAP0_OVERLOAD( aux::no_tag, ORDER_BY_KEY, map0<>, void const volatile* );
+ BOOST_MPL_AUX_MAP0_OVERLOAD( aux::no_tag, IS_MASKED, map0<>, void const volatile* );
+#endif
+};
+
+}}
+
+#endif // BOOST_MPL_MAP_AUX_MAP0_HPP_INCLUDED
diff --git a/boost/boost/mpl/map/aux_/numbered.hpp b/boost/boost/mpl/map/aux_/numbered.hpp
new file mode 100644
index 00000000000..8dd0dd0f0f3
--- /dev/null
+++ b/boost/boost/mpl/map/aux_/numbered.hpp
@@ -0,0 +1,110 @@
+
+// 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/map/aux_/numbered.hpp,v $
+// $Date: 2004/12/14 14:05:32 $
+// $Revision: 1.4 $
+
+#else
+
+#include <boost/mpl/aux_/config/typeof.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+#include <boost/preprocessor/enum_params.hpp>
+#include <boost/preprocessor/dec.hpp>
+#include <boost/preprocessor/cat.hpp>
+
+#define i_ BOOST_PP_FRAME_ITERATION(1)
+
+# define AUX778076_MAP_TAIL(map, i_, P) \
+ BOOST_PP_CAT(map,i_)< \
+ BOOST_PP_ENUM_PARAMS(i_, P) \
+ > \
+ /**/
+
+
+#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
+
+template<
+ BOOST_PP_ENUM_PARAMS(i_, typename P)
+ >
+struct BOOST_PP_CAT(map,i_)
+ : m_item<
+ typename BOOST_PP_CAT(P,BOOST_PP_DEC(i_))::first
+ , typename BOOST_PP_CAT(P,BOOST_PP_DEC(i_))::second
+ , AUX778076_MAP_TAIL(map,BOOST_PP_DEC(i_),P)
+ >
+{
+ typedef BOOST_PP_CAT(map,i_) type;
+};
+
+#else // "brute force" implementation
+
+# if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template< typename Map>
+struct m_at<Map,BOOST_PP_DEC(i_)>
+{
+ typedef typename Map::BOOST_PP_CAT(item,BOOST_PP_DEC(i_)) type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item<i_,Key,T,Base>
+ : m_item_<Key,T,Base>
+{
+ typedef pair<Key,T> BOOST_PP_CAT(item,BOOST_PP_DEC(i_));
+};
+
+# else
+
+template<>
+struct m_at_impl<BOOST_PP_DEC(i_)>
+{
+ template< typename Map > struct result_
+ {
+ typedef typename Map::BOOST_PP_CAT(item,BOOST_PP_DEC(i_)) type;
+ };
+};
+
+template<>
+struct m_item_impl<i_>
+{
+ template< typename Key, typename T, typename Base > struct result_
+ : m_item_<Key,T,Base>
+ {
+ typedef pair<Key,T> BOOST_PP_CAT(item,BOOST_PP_DEC(i_));
+ };
+};
+
+# endif
+
+template<
+ BOOST_PP_ENUM_PARAMS(i_, typename P)
+ >
+struct BOOST_PP_CAT(map,i_)
+ : m_item<
+ i_
+ , typename BOOST_PP_CAT(P,BOOST_PP_DEC(i_))::first
+ , typename BOOST_PP_CAT(P,BOOST_PP_DEC(i_))::second
+ , AUX778076_MAP_TAIL(map,BOOST_PP_DEC(i_),P)
+ >
+{
+ typedef BOOST_PP_CAT(map,i_) type;
+};
+
+#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES
+
+# undef AUX778076_MAP_TAIL
+
+#undef i_
+
+#endif // BOOST_PP_IS_ITERATING
diff --git a/boost/boost/mpl/map/aux_/preprocessed/no_ctps/map10.hpp b/boost/boost/mpl/map/aux_/preprocessed/no_ctps/map10.hpp
new file mode 100644
index 00000000000..626c456361c
--- /dev/null
+++ b/boost/boost/mpl/map/aux_/preprocessed/no_ctps/map10.hpp
@@ -0,0 +1,350 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/map/map10.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<>
+struct m_at_impl<0>
+{
+ template< typename Map > struct result_
+ {
+ typedef typename Map::item0 type;
+ };
+};
+
+template<>
+struct m_item_impl<1>
+{
+ template< typename Key, typename T, typename Base > struct result_
+ : m_item_< Key,T,Base >
+ {
+ typedef pair< Key,T > item0;
+ };
+};
+
+template<
+ typename P0
+ >
+struct map1
+ : m_item<
+ 1
+ , typename P0::first
+ , typename P0::second
+ , map0< >
+ >
+{
+ typedef map1 type;
+};
+
+template<>
+struct m_at_impl<1>
+{
+ template< typename Map > struct result_
+ {
+ typedef typename Map::item1 type;
+ };
+};
+
+template<>
+struct m_item_impl<2>
+{
+ template< typename Key, typename T, typename Base > struct result_
+ : m_item_< Key,T,Base >
+ {
+ typedef pair< Key,T > item1;
+ };
+};
+
+template<
+ typename P0, typename P1
+ >
+struct map2
+ : m_item<
+ 2
+ , typename P1::first
+ , typename P1::second
+ , map1<P0>
+ >
+{
+ typedef map2 type;
+};
+
+template<>
+struct m_at_impl<2>
+{
+ template< typename Map > struct result_
+ {
+ typedef typename Map::item2 type;
+ };
+};
+
+template<>
+struct m_item_impl<3>
+{
+ template< typename Key, typename T, typename Base > struct result_
+ : m_item_< Key,T,Base >
+ {
+ typedef pair< Key,T > item2;
+ };
+};
+
+template<
+ typename P0, typename P1, typename P2
+ >
+struct map3
+ : m_item<
+ 3
+ , typename P2::first
+ , typename P2::second
+ , map2< P0,P1 >
+ >
+{
+ typedef map3 type;
+};
+
+template<>
+struct m_at_impl<3>
+{
+ template< typename Map > struct result_
+ {
+ typedef typename Map::item3 type;
+ };
+};
+
+template<>
+struct m_item_impl<4>
+{
+ template< typename Key, typename T, typename Base > struct result_
+ : m_item_< Key,T,Base >
+ {
+ typedef pair< Key,T > item3;
+ };
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3
+ >
+struct map4
+ : m_item<
+ 4
+ , typename P3::first
+ , typename P3::second
+ , map3< P0,P1,P2 >
+ >
+{
+ typedef map4 type;
+};
+
+template<>
+struct m_at_impl<4>
+{
+ template< typename Map > struct result_
+ {
+ typedef typename Map::item4 type;
+ };
+};
+
+template<>
+struct m_item_impl<5>
+{
+ template< typename Key, typename T, typename Base > struct result_
+ : m_item_< Key,T,Base >
+ {
+ typedef pair< Key,T > item4;
+ };
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ >
+struct map5
+ : m_item<
+ 5
+ , typename P4::first
+ , typename P4::second
+ , map4< P0,P1,P2,P3 >
+ >
+{
+ typedef map5 type;
+};
+
+template<>
+struct m_at_impl<5>
+{
+ template< typename Map > struct result_
+ {
+ typedef typename Map::item5 type;
+ };
+};
+
+template<>
+struct m_item_impl<6>
+{
+ template< typename Key, typename T, typename Base > struct result_
+ : m_item_< Key,T,Base >
+ {
+ typedef pair< Key,T > item5;
+ };
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5
+ >
+struct map6
+ : m_item<
+ 6
+ , typename P5::first
+ , typename P5::second
+ , map5< P0,P1,P2,P3,P4 >
+ >
+{
+ typedef map6 type;
+};
+
+template<>
+struct m_at_impl<6>
+{
+ template< typename Map > struct result_
+ {
+ typedef typename Map::item6 type;
+ };
+};
+
+template<>
+struct m_item_impl<7>
+{
+ template< typename Key, typename T, typename Base > struct result_
+ : m_item_< Key,T,Base >
+ {
+ typedef pair< Key,T > item6;
+ };
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6
+ >
+struct map7
+ : m_item<
+ 7
+ , typename P6::first
+ , typename P6::second
+ , map6< P0,P1,P2,P3,P4,P5 >
+ >
+{
+ typedef map7 type;
+};
+
+template<>
+struct m_at_impl<7>
+{
+ template< typename Map > struct result_
+ {
+ typedef typename Map::item7 type;
+ };
+};
+
+template<>
+struct m_item_impl<8>
+{
+ template< typename Key, typename T, typename Base > struct result_
+ : m_item_< Key,T,Base >
+ {
+ typedef pair< Key,T > item7;
+ };
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7
+ >
+struct map8
+ : m_item<
+ 8
+ , typename P7::first
+ , typename P7::second
+ , map7< P0,P1,P2,P3,P4,P5,P6 >
+ >
+{
+ typedef map8 type;
+};
+
+template<>
+struct m_at_impl<8>
+{
+ template< typename Map > struct result_
+ {
+ typedef typename Map::item8 type;
+ };
+};
+
+template<>
+struct m_item_impl<9>
+{
+ template< typename Key, typename T, typename Base > struct result_
+ : m_item_< Key,T,Base >
+ {
+ typedef pair< Key,T > item8;
+ };
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8
+ >
+struct map9
+ : m_item<
+ 9
+ , typename P8::first
+ , typename P8::second
+ , map8< P0,P1,P2,P3,P4,P5,P6,P7 >
+ >
+{
+ typedef map9 type;
+};
+
+template<>
+struct m_at_impl<9>
+{
+ template< typename Map > struct result_
+ {
+ typedef typename Map::item9 type;
+ };
+};
+
+template<>
+struct m_item_impl<10>
+{
+ template< typename Key, typename T, typename Base > struct result_
+ : m_item_< Key,T,Base >
+ {
+ typedef pair< Key,T > item9;
+ };
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ >
+struct map10
+ : m_item<
+ 10
+ , typename P9::first
+ , typename P9::second
+ , map9< P0,P1,P2,P3,P4,P5,P6,P7,P8 >
+ >
+{
+ typedef map10 type;
+};
+
+}}
diff --git a/boost/boost/mpl/map/aux_/preprocessed/no_ctps/map20.hpp b/boost/boost/mpl/map/aux_/preprocessed/no_ctps/map20.hpp
new file mode 100644
index 00000000000..ac9e3791c56
--- /dev/null
+++ b/boost/boost/mpl/map/aux_/preprocessed/no_ctps/map20.hpp
@@ -0,0 +1,370 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/map/map20.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<>
+struct m_at_impl<10>
+{
+ template< typename Map > struct result_
+ {
+ typedef typename Map::item10 type;
+ };
+};
+
+template<>
+struct m_item_impl<11>
+{
+ template< typename Key, typename T, typename Base > struct result_
+ : m_item_< Key,T,Base >
+ {
+ typedef pair< Key,T > item10;
+ };
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10
+ >
+struct map11
+ : m_item<
+ 11
+ , typename P10::first
+ , typename P10::second
+ , map10< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9 >
+ >
+{
+ typedef map11 type;
+};
+
+template<>
+struct m_at_impl<11>
+{
+ template< typename Map > struct result_
+ {
+ typedef typename Map::item11 type;
+ };
+};
+
+template<>
+struct m_item_impl<12>
+{
+ template< typename Key, typename T, typename Base > struct result_
+ : m_item_< Key,T,Base >
+ {
+ typedef pair< Key,T > item11;
+ };
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11
+ >
+struct map12
+ : m_item<
+ 12
+ , typename P11::first
+ , typename P11::second
+ , map11< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10 >
+ >
+{
+ typedef map12 type;
+};
+
+template<>
+struct m_at_impl<12>
+{
+ template< typename Map > struct result_
+ {
+ typedef typename Map::item12 type;
+ };
+};
+
+template<>
+struct m_item_impl<13>
+{
+ template< typename Key, typename T, typename Base > struct result_
+ : m_item_< Key,T,Base >
+ {
+ typedef pair< Key,T > item12;
+ };
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12
+ >
+struct map13
+ : m_item<
+ 13
+ , typename P12::first
+ , typename P12::second
+ , map12< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11 >
+ >
+{
+ typedef map13 type;
+};
+
+template<>
+struct m_at_impl<13>
+{
+ template< typename Map > struct result_
+ {
+ typedef typename Map::item13 type;
+ };
+};
+
+template<>
+struct m_item_impl<14>
+{
+ template< typename Key, typename T, typename Base > struct result_
+ : m_item_< Key,T,Base >
+ {
+ typedef pair< Key,T > item13;
+ };
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13
+ >
+struct map14
+ : m_item<
+ 14
+ , typename P13::first
+ , typename P13::second
+ , map13< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12 >
+ >
+{
+ typedef map14 type;
+};
+
+template<>
+struct m_at_impl<14>
+{
+ template< typename Map > struct result_
+ {
+ typedef typename Map::item14 type;
+ };
+};
+
+template<>
+struct m_item_impl<15>
+{
+ template< typename Key, typename T, typename Base > struct result_
+ : m_item_< Key,T,Base >
+ {
+ typedef pair< Key,T > item14;
+ };
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ >
+struct map15
+ : m_item<
+ 15
+ , typename P14::first
+ , typename P14::second
+ , map14< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13 >
+ >
+{
+ typedef map15 type;
+};
+
+template<>
+struct m_at_impl<15>
+{
+ template< typename Map > struct result_
+ {
+ typedef typename Map::item15 type;
+ };
+};
+
+template<>
+struct m_item_impl<16>
+{
+ template< typename Key, typename T, typename Base > struct result_
+ : m_item_< Key,T,Base >
+ {
+ typedef pair< Key,T > item15;
+ };
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15
+ >
+struct map16
+ : m_item<
+ 16
+ , typename P15::first
+ , typename P15::second
+ , map15< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14 >
+ >
+{
+ typedef map16 type;
+};
+
+template<>
+struct m_at_impl<16>
+{
+ template< typename Map > struct result_
+ {
+ typedef typename Map::item16 type;
+ };
+};
+
+template<>
+struct m_item_impl<17>
+{
+ template< typename Key, typename T, typename Base > struct result_
+ : m_item_< Key,T,Base >
+ {
+ typedef pair< Key,T > item16;
+ };
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16
+ >
+struct map17
+ : m_item<
+ 17
+ , typename P16::first
+ , typename P16::second
+ , map16< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15 >
+ >
+{
+ typedef map17 type;
+};
+
+template<>
+struct m_at_impl<17>
+{
+ template< typename Map > struct result_
+ {
+ typedef typename Map::item17 type;
+ };
+};
+
+template<>
+struct m_item_impl<18>
+{
+ template< typename Key, typename T, typename Base > struct result_
+ : m_item_< Key,T,Base >
+ {
+ typedef pair< Key,T > item17;
+ };
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17
+ >
+struct map18
+ : m_item<
+ 18
+ , typename P17::first
+ , typename P17::second
+ , map17< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16 >
+ >
+{
+ typedef map18 type;
+};
+
+template<>
+struct m_at_impl<18>
+{
+ template< typename Map > struct result_
+ {
+ typedef typename Map::item18 type;
+ };
+};
+
+template<>
+struct m_item_impl<19>
+{
+ template< typename Key, typename T, typename Base > struct result_
+ : m_item_< Key,T,Base >
+ {
+ typedef pair< Key,T > item18;
+ };
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18
+ >
+struct map19
+ : m_item<
+ 19
+ , typename P18::first
+ , typename P18::second
+ , map18< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17 >
+ >
+{
+ typedef map19 type;
+};
+
+template<>
+struct m_at_impl<19>
+{
+ template< typename Map > struct result_
+ {
+ typedef typename Map::item19 type;
+ };
+};
+
+template<>
+struct m_item_impl<20>
+{
+ template< typename Key, typename T, typename Base > struct result_
+ : m_item_< Key,T,Base >
+ {
+ typedef pair< Key,T > item19;
+ };
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ >
+struct map20
+ : m_item<
+ 20
+ , typename P19::first
+ , typename P19::second
+ , map19< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18 >
+ >
+{
+ typedef map20 type;
+};
+
+}}
diff --git a/boost/boost/mpl/map/aux_/preprocessed/no_ctps/map30.hpp b/boost/boost/mpl/map/aux_/preprocessed/no_ctps/map30.hpp
new file mode 100644
index 00000000000..5aa118f224a
--- /dev/null
+++ b/boost/boost/mpl/map/aux_/preprocessed/no_ctps/map30.hpp
@@ -0,0 +1,390 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/map/map30.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<>
+struct m_at_impl<20>
+{
+ template< typename Map > struct result_
+ {
+ typedef typename Map::item20 type;
+ };
+};
+
+template<>
+struct m_item_impl<21>
+{
+ template< typename Key, typename T, typename Base > struct result_
+ : m_item_< Key,T,Base >
+ {
+ typedef pair< Key,T > item20;
+ };
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20
+ >
+struct map21
+ : m_item<
+ 21
+ , typename P20::first
+ , typename P20::second
+ , map20< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19 >
+ >
+{
+ typedef map21 type;
+};
+
+template<>
+struct m_at_impl<21>
+{
+ template< typename Map > struct result_
+ {
+ typedef typename Map::item21 type;
+ };
+};
+
+template<>
+struct m_item_impl<22>
+{
+ template< typename Key, typename T, typename Base > struct result_
+ : m_item_< Key,T,Base >
+ {
+ typedef pair< Key,T > item21;
+ };
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21
+ >
+struct map22
+ : m_item<
+ 22
+ , typename P21::first
+ , typename P21::second
+ , map21< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20 >
+ >
+{
+ typedef map22 type;
+};
+
+template<>
+struct m_at_impl<22>
+{
+ template< typename Map > struct result_
+ {
+ typedef typename Map::item22 type;
+ };
+};
+
+template<>
+struct m_item_impl<23>
+{
+ template< typename Key, typename T, typename Base > struct result_
+ : m_item_< Key,T,Base >
+ {
+ typedef pair< Key,T > item22;
+ };
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22
+ >
+struct map23
+ : m_item<
+ 23
+ , typename P22::first
+ , typename P22::second
+ , map22< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21 >
+ >
+{
+ typedef map23 type;
+};
+
+template<>
+struct m_at_impl<23>
+{
+ template< typename Map > struct result_
+ {
+ typedef typename Map::item23 type;
+ };
+};
+
+template<>
+struct m_item_impl<24>
+{
+ template< typename Key, typename T, typename Base > struct result_
+ : m_item_< Key,T,Base >
+ {
+ typedef pair< Key,T > item23;
+ };
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23
+ >
+struct map24
+ : m_item<
+ 24
+ , typename P23::first
+ , typename P23::second
+ , map23< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22 >
+ >
+{
+ typedef map24 type;
+};
+
+template<>
+struct m_at_impl<24>
+{
+ template< typename Map > struct result_
+ {
+ typedef typename Map::item24 type;
+ };
+};
+
+template<>
+struct m_item_impl<25>
+{
+ template< typename Key, typename T, typename Base > struct result_
+ : m_item_< Key,T,Base >
+ {
+ typedef pair< Key,T > item24;
+ };
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ >
+struct map25
+ : m_item<
+ 25
+ , typename P24::first
+ , typename P24::second
+ , map24< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23 >
+ >
+{
+ typedef map25 type;
+};
+
+template<>
+struct m_at_impl<25>
+{
+ template< typename Map > struct result_
+ {
+ typedef typename Map::item25 type;
+ };
+};
+
+template<>
+struct m_item_impl<26>
+{
+ template< typename Key, typename T, typename Base > struct result_
+ : m_item_< Key,T,Base >
+ {
+ typedef pair< Key,T > item25;
+ };
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25
+ >
+struct map26
+ : m_item<
+ 26
+ , typename P25::first
+ , typename P25::second
+ , map25< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24 >
+ >
+{
+ typedef map26 type;
+};
+
+template<>
+struct m_at_impl<26>
+{
+ template< typename Map > struct result_
+ {
+ typedef typename Map::item26 type;
+ };
+};
+
+template<>
+struct m_item_impl<27>
+{
+ template< typename Key, typename T, typename Base > struct result_
+ : m_item_< Key,T,Base >
+ {
+ typedef pair< Key,T > item26;
+ };
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26
+ >
+struct map27
+ : m_item<
+ 27
+ , typename P26::first
+ , typename P26::second
+ , map26< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25 >
+ >
+{
+ typedef map27 type;
+};
+
+template<>
+struct m_at_impl<27>
+{
+ template< typename Map > struct result_
+ {
+ typedef typename Map::item27 type;
+ };
+};
+
+template<>
+struct m_item_impl<28>
+{
+ template< typename Key, typename T, typename Base > struct result_
+ : m_item_< Key,T,Base >
+ {
+ typedef pair< Key,T > item27;
+ };
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27
+ >
+struct map28
+ : m_item<
+ 28
+ , typename P27::first
+ , typename P27::second
+ , map27< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26 >
+ >
+{
+ typedef map28 type;
+};
+
+template<>
+struct m_at_impl<28>
+{
+ template< typename Map > struct result_
+ {
+ typedef typename Map::item28 type;
+ };
+};
+
+template<>
+struct m_item_impl<29>
+{
+ template< typename Key, typename T, typename Base > struct result_
+ : m_item_< Key,T,Base >
+ {
+ typedef pair< Key,T > item28;
+ };
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28
+ >
+struct map29
+ : m_item<
+ 29
+ , typename P28::first
+ , typename P28::second
+ , map28< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27 >
+ >
+{
+ typedef map29 type;
+};
+
+template<>
+struct m_at_impl<29>
+{
+ template< typename Map > struct result_
+ {
+ typedef typename Map::item29 type;
+ };
+};
+
+template<>
+struct m_item_impl<30>
+{
+ template< typename Key, typename T, typename Base > struct result_
+ : m_item_< Key,T,Base >
+ {
+ typedef pair< Key,T > item29;
+ };
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ >
+struct map30
+ : m_item<
+ 30
+ , typename P29::first
+ , typename P29::second
+ , map29< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28 >
+ >
+{
+ typedef map30 type;
+};
+
+}}
diff --git a/boost/boost/mpl/map/aux_/preprocessed/no_ctps/map40.hpp b/boost/boost/mpl/map/aux_/preprocessed/no_ctps/map40.hpp
new file mode 100644
index 00000000000..dca60d5e4a7
--- /dev/null
+++ b/boost/boost/mpl/map/aux_/preprocessed/no_ctps/map40.hpp
@@ -0,0 +1,410 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/map/map40.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<>
+struct m_at_impl<30>
+{
+ template< typename Map > struct result_
+ {
+ typedef typename Map::item30 type;
+ };
+};
+
+template<>
+struct m_item_impl<31>
+{
+ template< typename Key, typename T, typename Base > struct result_
+ : m_item_< Key,T,Base >
+ {
+ typedef pair< Key,T > item30;
+ };
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30
+ >
+struct map31
+ : m_item<
+ 31
+ , typename P30::first
+ , typename P30::second
+ , map30< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29 >
+ >
+{
+ typedef map31 type;
+};
+
+template<>
+struct m_at_impl<31>
+{
+ template< typename Map > struct result_
+ {
+ typedef typename Map::item31 type;
+ };
+};
+
+template<>
+struct m_item_impl<32>
+{
+ template< typename Key, typename T, typename Base > struct result_
+ : m_item_< Key,T,Base >
+ {
+ typedef pair< Key,T > item31;
+ };
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31
+ >
+struct map32
+ : m_item<
+ 32
+ , typename P31::first
+ , typename P31::second
+ , map31< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30 >
+ >
+{
+ typedef map32 type;
+};
+
+template<>
+struct m_at_impl<32>
+{
+ template< typename Map > struct result_
+ {
+ typedef typename Map::item32 type;
+ };
+};
+
+template<>
+struct m_item_impl<33>
+{
+ template< typename Key, typename T, typename Base > struct result_
+ : m_item_< Key,T,Base >
+ {
+ typedef pair< Key,T > item32;
+ };
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31, typename P32
+ >
+struct map33
+ : m_item<
+ 33
+ , typename P32::first
+ , typename P32::second
+ , map32< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31 >
+ >
+{
+ typedef map33 type;
+};
+
+template<>
+struct m_at_impl<33>
+{
+ template< typename Map > struct result_
+ {
+ typedef typename Map::item33 type;
+ };
+};
+
+template<>
+struct m_item_impl<34>
+{
+ template< typename Key, typename T, typename Base > struct result_
+ : m_item_< Key,T,Base >
+ {
+ typedef pair< Key,T > item33;
+ };
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31, typename P32, typename P33
+ >
+struct map34
+ : m_item<
+ 34
+ , typename P33::first
+ , typename P33::second
+ , map33< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32 >
+ >
+{
+ typedef map34 type;
+};
+
+template<>
+struct m_at_impl<34>
+{
+ template< typename Map > struct result_
+ {
+ typedef typename Map::item34 type;
+ };
+};
+
+template<>
+struct m_item_impl<35>
+{
+ template< typename Key, typename T, typename Base > struct result_
+ : m_item_< Key,T,Base >
+ {
+ typedef pair< Key,T > item34;
+ };
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31, typename P32, typename P33, typename P34
+ >
+struct map35
+ : m_item<
+ 35
+ , typename P34::first
+ , typename P34::second
+ , map34< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33 >
+ >
+{
+ typedef map35 type;
+};
+
+template<>
+struct m_at_impl<35>
+{
+ template< typename Map > struct result_
+ {
+ typedef typename Map::item35 type;
+ };
+};
+
+template<>
+struct m_item_impl<36>
+{
+ template< typename Key, typename T, typename Base > struct result_
+ : m_item_< Key,T,Base >
+ {
+ typedef pair< Key,T > item35;
+ };
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31, typename P32, typename P33, typename P34
+ , typename P35
+ >
+struct map36
+ : m_item<
+ 36
+ , typename P35::first
+ , typename P35::second
+ , map35< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34 >
+ >
+{
+ typedef map36 type;
+};
+
+template<>
+struct m_at_impl<36>
+{
+ template< typename Map > struct result_
+ {
+ typedef typename Map::item36 type;
+ };
+};
+
+template<>
+struct m_item_impl<37>
+{
+ template< typename Key, typename T, typename Base > struct result_
+ : m_item_< Key,T,Base >
+ {
+ typedef pair< Key,T > item36;
+ };
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31, typename P32, typename P33, typename P34
+ , typename P35, typename P36
+ >
+struct map37
+ : m_item<
+ 37
+ , typename P36::first
+ , typename P36::second
+ , map36< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35 >
+ >
+{
+ typedef map37 type;
+};
+
+template<>
+struct m_at_impl<37>
+{
+ template< typename Map > struct result_
+ {
+ typedef typename Map::item37 type;
+ };
+};
+
+template<>
+struct m_item_impl<38>
+{
+ template< typename Key, typename T, typename Base > struct result_
+ : m_item_< Key,T,Base >
+ {
+ typedef pair< Key,T > item37;
+ };
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31, typename P32, typename P33, typename P34
+ , typename P35, typename P36, typename P37
+ >
+struct map38
+ : m_item<
+ 38
+ , typename P37::first
+ , typename P37::second
+ , map37< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36 >
+ >
+{
+ typedef map38 type;
+};
+
+template<>
+struct m_at_impl<38>
+{
+ template< typename Map > struct result_
+ {
+ typedef typename Map::item38 type;
+ };
+};
+
+template<>
+struct m_item_impl<39>
+{
+ template< typename Key, typename T, typename Base > struct result_
+ : m_item_< Key,T,Base >
+ {
+ typedef pair< Key,T > item38;
+ };
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31, typename P32, typename P33, typename P34
+ , typename P35, typename P36, typename P37, typename P38
+ >
+struct map39
+ : m_item<
+ 39
+ , typename P38::first
+ , typename P38::second
+ , map38< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37 >
+ >
+{
+ typedef map39 type;
+};
+
+template<>
+struct m_at_impl<39>
+{
+ template< typename Map > struct result_
+ {
+ typedef typename Map::item39 type;
+ };
+};
+
+template<>
+struct m_item_impl<40>
+{
+ template< typename Key, typename T, typename Base > struct result_
+ : m_item_< Key,T,Base >
+ {
+ typedef pair< Key,T > item39;
+ };
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31, typename P32, typename P33, typename P34
+ , typename P35, typename P36, typename P37, typename P38, typename P39
+ >
+struct map40
+ : m_item<
+ 40
+ , typename P39::first
+ , typename P39::second
+ , map39< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38 >
+ >
+{
+ typedef map40 type;
+};
+
+}}
diff --git a/boost/boost/mpl/map/aux_/preprocessed/no_ctps/map50.hpp b/boost/boost/mpl/map/aux_/preprocessed/no_ctps/map50.hpp
new file mode 100644
index 00000000000..cd8190887f2
--- /dev/null
+++ b/boost/boost/mpl/map/aux_/preprocessed/no_ctps/map50.hpp
@@ -0,0 +1,430 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/map/map50.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<>
+struct m_at_impl<40>
+{
+ template< typename Map > struct result_
+ {
+ typedef typename Map::item40 type;
+ };
+};
+
+template<>
+struct m_item_impl<41>
+{
+ template< typename Key, typename T, typename Base > struct result_
+ : m_item_< Key,T,Base >
+ {
+ typedef pair< Key,T > item40;
+ };
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31, typename P32, typename P33, typename P34
+ , typename P35, typename P36, typename P37, typename P38, typename P39
+ , typename P40
+ >
+struct map41
+ : m_item<
+ 41
+ , typename P40::first
+ , typename P40::second
+ , map40< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39 >
+ >
+{
+ typedef map41 type;
+};
+
+template<>
+struct m_at_impl<41>
+{
+ template< typename Map > struct result_
+ {
+ typedef typename Map::item41 type;
+ };
+};
+
+template<>
+struct m_item_impl<42>
+{
+ template< typename Key, typename T, typename Base > struct result_
+ : m_item_< Key,T,Base >
+ {
+ typedef pair< Key,T > item41;
+ };
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31, typename P32, typename P33, typename P34
+ , typename P35, typename P36, typename P37, typename P38, typename P39
+ , typename P40, typename P41
+ >
+struct map42
+ : m_item<
+ 42
+ , typename P41::first
+ , typename P41::second
+ , map41< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40 >
+ >
+{
+ typedef map42 type;
+};
+
+template<>
+struct m_at_impl<42>
+{
+ template< typename Map > struct result_
+ {
+ typedef typename Map::item42 type;
+ };
+};
+
+template<>
+struct m_item_impl<43>
+{
+ template< typename Key, typename T, typename Base > struct result_
+ : m_item_< Key,T,Base >
+ {
+ typedef pair< Key,T > item42;
+ };
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31, typename P32, typename P33, typename P34
+ , typename P35, typename P36, typename P37, typename P38, typename P39
+ , typename P40, typename P41, typename P42
+ >
+struct map43
+ : m_item<
+ 43
+ , typename P42::first
+ , typename P42::second
+ , map42< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41 >
+ >
+{
+ typedef map43 type;
+};
+
+template<>
+struct m_at_impl<43>
+{
+ template< typename Map > struct result_
+ {
+ typedef typename Map::item43 type;
+ };
+};
+
+template<>
+struct m_item_impl<44>
+{
+ template< typename Key, typename T, typename Base > struct result_
+ : m_item_< Key,T,Base >
+ {
+ typedef pair< Key,T > item43;
+ };
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31, typename P32, typename P33, typename P34
+ , typename P35, typename P36, typename P37, typename P38, typename P39
+ , typename P40, typename P41, typename P42, typename P43
+ >
+struct map44
+ : m_item<
+ 44
+ , typename P43::first
+ , typename P43::second
+ , map43< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42 >
+ >
+{
+ typedef map44 type;
+};
+
+template<>
+struct m_at_impl<44>
+{
+ template< typename Map > struct result_
+ {
+ typedef typename Map::item44 type;
+ };
+};
+
+template<>
+struct m_item_impl<45>
+{
+ template< typename Key, typename T, typename Base > struct result_
+ : m_item_< Key,T,Base >
+ {
+ typedef pair< Key,T > item44;
+ };
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31, typename P32, typename P33, typename P34
+ , typename P35, typename P36, typename P37, typename P38, typename P39
+ , typename P40, typename P41, typename P42, typename P43, typename P44
+ >
+struct map45
+ : m_item<
+ 45
+ , typename P44::first
+ , typename P44::second
+ , map44< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42,P43 >
+ >
+{
+ typedef map45 type;
+};
+
+template<>
+struct m_at_impl<45>
+{
+ template< typename Map > struct result_
+ {
+ typedef typename Map::item45 type;
+ };
+};
+
+template<>
+struct m_item_impl<46>
+{
+ template< typename Key, typename T, typename Base > struct result_
+ : m_item_< Key,T,Base >
+ {
+ typedef pair< Key,T > item45;
+ };
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31, typename P32, typename P33, typename P34
+ , typename P35, typename P36, typename P37, typename P38, typename P39
+ , typename P40, typename P41, typename P42, typename P43, typename P44
+ , typename P45
+ >
+struct map46
+ : m_item<
+ 46
+ , typename P45::first
+ , typename P45::second
+ , map45< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42,P43,P44 >
+ >
+{
+ typedef map46 type;
+};
+
+template<>
+struct m_at_impl<46>
+{
+ template< typename Map > struct result_
+ {
+ typedef typename Map::item46 type;
+ };
+};
+
+template<>
+struct m_item_impl<47>
+{
+ template< typename Key, typename T, typename Base > struct result_
+ : m_item_< Key,T,Base >
+ {
+ typedef pair< Key,T > item46;
+ };
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31, typename P32, typename P33, typename P34
+ , typename P35, typename P36, typename P37, typename P38, typename P39
+ , typename P40, typename P41, typename P42, typename P43, typename P44
+ , typename P45, typename P46
+ >
+struct map47
+ : m_item<
+ 47
+ , typename P46::first
+ , typename P46::second
+ , map46< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42,P43,P44,P45 >
+ >
+{
+ typedef map47 type;
+};
+
+template<>
+struct m_at_impl<47>
+{
+ template< typename Map > struct result_
+ {
+ typedef typename Map::item47 type;
+ };
+};
+
+template<>
+struct m_item_impl<48>
+{
+ template< typename Key, typename T, typename Base > struct result_
+ : m_item_< Key,T,Base >
+ {
+ typedef pair< Key,T > item47;
+ };
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31, typename P32, typename P33, typename P34
+ , typename P35, typename P36, typename P37, typename P38, typename P39
+ , typename P40, typename P41, typename P42, typename P43, typename P44
+ , typename P45, typename P46, typename P47
+ >
+struct map48
+ : m_item<
+ 48
+ , typename P47::first
+ , typename P47::second
+ , map47< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42,P43,P44,P45,P46 >
+ >
+{
+ typedef map48 type;
+};
+
+template<>
+struct m_at_impl<48>
+{
+ template< typename Map > struct result_
+ {
+ typedef typename Map::item48 type;
+ };
+};
+
+template<>
+struct m_item_impl<49>
+{
+ template< typename Key, typename T, typename Base > struct result_
+ : m_item_< Key,T,Base >
+ {
+ typedef pair< Key,T > item48;
+ };
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31, typename P32, typename P33, typename P34
+ , typename P35, typename P36, typename P37, typename P38, typename P39
+ , typename P40, typename P41, typename P42, typename P43, typename P44
+ , typename P45, typename P46, typename P47, typename P48
+ >
+struct map49
+ : m_item<
+ 49
+ , typename P48::first
+ , typename P48::second
+ , map48< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42,P43,P44,P45,P46,P47 >
+ >
+{
+ typedef map49 type;
+};
+
+template<>
+struct m_at_impl<49>
+{
+ template< typename Map > struct result_
+ {
+ typedef typename Map::item49 type;
+ };
+};
+
+template<>
+struct m_item_impl<50>
+{
+ template< typename Key, typename T, typename Base > struct result_
+ : m_item_< Key,T,Base >
+ {
+ typedef pair< Key,T > item49;
+ };
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31, typename P32, typename P33, typename P34
+ , typename P35, typename P36, typename P37, typename P38, typename P39
+ , typename P40, typename P41, typename P42, typename P43, typename P44
+ , typename P45, typename P46, typename P47, typename P48, typename P49
+ >
+struct map50
+ : m_item<
+ 50
+ , typename P49::first
+ , typename P49::second
+ , map49< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42,P43,P44,P45,P46,P47,P48 >
+ >
+{
+ typedef map50 type;
+};
+
+}}
diff --git a/boost/boost/mpl/map/aux_/preprocessed/plain/map10.hpp b/boost/boost/mpl/map/aux_/preprocessed/plain/map10.hpp
new file mode 100644
index 00000000000..ce0d2fb86f5
--- /dev/null
+++ b/boost/boost/mpl/map/aux_/preprocessed/plain/map10.hpp
@@ -0,0 +1,290 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/map/map10.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template< typename Map>
+struct m_at< Map,0 >
+{
+ typedef typename Map::item0 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 1,Key,T,Base >
+ : m_item_< Key,T,Base >
+{
+ typedef pair< Key,T > item0;
+};
+
+template<
+ typename P0
+ >
+struct map1
+ : m_item<
+ 1
+ , typename P0::first
+ , typename P0::second
+ , map0< >
+ >
+{
+ typedef map1 type;
+};
+
+template< typename Map>
+struct m_at< Map,1 >
+{
+ typedef typename Map::item1 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 2,Key,T,Base >
+ : m_item_< Key,T,Base >
+{
+ typedef pair< Key,T > item1;
+};
+
+template<
+ typename P0, typename P1
+ >
+struct map2
+ : m_item<
+ 2
+ , typename P1::first
+ , typename P1::second
+ , map1<P0>
+ >
+{
+ typedef map2 type;
+};
+
+template< typename Map>
+struct m_at< Map,2 >
+{
+ typedef typename Map::item2 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 3,Key,T,Base >
+ : m_item_< Key,T,Base >
+{
+ typedef pair< Key,T > item2;
+};
+
+template<
+ typename P0, typename P1, typename P2
+ >
+struct map3
+ : m_item<
+ 3
+ , typename P2::first
+ , typename P2::second
+ , map2< P0,P1 >
+ >
+{
+ typedef map3 type;
+};
+
+template< typename Map>
+struct m_at< Map,3 >
+{
+ typedef typename Map::item3 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 4,Key,T,Base >
+ : m_item_< Key,T,Base >
+{
+ typedef pair< Key,T > item3;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3
+ >
+struct map4
+ : m_item<
+ 4
+ , typename P3::first
+ , typename P3::second
+ , map3< P0,P1,P2 >
+ >
+{
+ typedef map4 type;
+};
+
+template< typename Map>
+struct m_at< Map,4 >
+{
+ typedef typename Map::item4 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 5,Key,T,Base >
+ : m_item_< Key,T,Base >
+{
+ typedef pair< Key,T > item4;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ >
+struct map5
+ : m_item<
+ 5
+ , typename P4::first
+ , typename P4::second
+ , map4< P0,P1,P2,P3 >
+ >
+{
+ typedef map5 type;
+};
+
+template< typename Map>
+struct m_at< Map,5 >
+{
+ typedef typename Map::item5 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 6,Key,T,Base >
+ : m_item_< Key,T,Base >
+{
+ typedef pair< Key,T > item5;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5
+ >
+struct map6
+ : m_item<
+ 6
+ , typename P5::first
+ , typename P5::second
+ , map5< P0,P1,P2,P3,P4 >
+ >
+{
+ typedef map6 type;
+};
+
+template< typename Map>
+struct m_at< Map,6 >
+{
+ typedef typename Map::item6 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 7,Key,T,Base >
+ : m_item_< Key,T,Base >
+{
+ typedef pair< Key,T > item6;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6
+ >
+struct map7
+ : m_item<
+ 7
+ , typename P6::first
+ , typename P6::second
+ , map6< P0,P1,P2,P3,P4,P5 >
+ >
+{
+ typedef map7 type;
+};
+
+template< typename Map>
+struct m_at< Map,7 >
+{
+ typedef typename Map::item7 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 8,Key,T,Base >
+ : m_item_< Key,T,Base >
+{
+ typedef pair< Key,T > item7;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7
+ >
+struct map8
+ : m_item<
+ 8
+ , typename P7::first
+ , typename P7::second
+ , map7< P0,P1,P2,P3,P4,P5,P6 >
+ >
+{
+ typedef map8 type;
+};
+
+template< typename Map>
+struct m_at< Map,8 >
+{
+ typedef typename Map::item8 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 9,Key,T,Base >
+ : m_item_< Key,T,Base >
+{
+ typedef pair< Key,T > item8;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8
+ >
+struct map9
+ : m_item<
+ 9
+ , typename P8::first
+ , typename P8::second
+ , map8< P0,P1,P2,P3,P4,P5,P6,P7 >
+ >
+{
+ typedef map9 type;
+};
+
+template< typename Map>
+struct m_at< Map,9 >
+{
+ typedef typename Map::item9 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 10,Key,T,Base >
+ : m_item_< Key,T,Base >
+{
+ typedef pair< Key,T > item9;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ >
+struct map10
+ : m_item<
+ 10
+ , typename P9::first
+ , typename P9::second
+ , map9< P0,P1,P2,P3,P4,P5,P6,P7,P8 >
+ >
+{
+ typedef map10 type;
+};
+
+}}
diff --git a/boost/boost/mpl/map/aux_/preprocessed/plain/map20.hpp b/boost/boost/mpl/map/aux_/preprocessed/plain/map20.hpp
new file mode 100644
index 00000000000..e0a147cbdbb
--- /dev/null
+++ b/boost/boost/mpl/map/aux_/preprocessed/plain/map20.hpp
@@ -0,0 +1,310 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/map/map20.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template< typename Map>
+struct m_at< Map,10 >
+{
+ typedef typename Map::item10 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 11,Key,T,Base >
+ : m_item_< Key,T,Base >
+{
+ typedef pair< Key,T > item10;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10
+ >
+struct map11
+ : m_item<
+ 11
+ , typename P10::first
+ , typename P10::second
+ , map10< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9 >
+ >
+{
+ typedef map11 type;
+};
+
+template< typename Map>
+struct m_at< Map,11 >
+{
+ typedef typename Map::item11 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 12,Key,T,Base >
+ : m_item_< Key,T,Base >
+{
+ typedef pair< Key,T > item11;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11
+ >
+struct map12
+ : m_item<
+ 12
+ , typename P11::first
+ , typename P11::second
+ , map11< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10 >
+ >
+{
+ typedef map12 type;
+};
+
+template< typename Map>
+struct m_at< Map,12 >
+{
+ typedef typename Map::item12 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 13,Key,T,Base >
+ : m_item_< Key,T,Base >
+{
+ typedef pair< Key,T > item12;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12
+ >
+struct map13
+ : m_item<
+ 13
+ , typename P12::first
+ , typename P12::second
+ , map12< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11 >
+ >
+{
+ typedef map13 type;
+};
+
+template< typename Map>
+struct m_at< Map,13 >
+{
+ typedef typename Map::item13 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 14,Key,T,Base >
+ : m_item_< Key,T,Base >
+{
+ typedef pair< Key,T > item13;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13
+ >
+struct map14
+ : m_item<
+ 14
+ , typename P13::first
+ , typename P13::second
+ , map13< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12 >
+ >
+{
+ typedef map14 type;
+};
+
+template< typename Map>
+struct m_at< Map,14 >
+{
+ typedef typename Map::item14 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 15,Key,T,Base >
+ : m_item_< Key,T,Base >
+{
+ typedef pair< Key,T > item14;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ >
+struct map15
+ : m_item<
+ 15
+ , typename P14::first
+ , typename P14::second
+ , map14< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13 >
+ >
+{
+ typedef map15 type;
+};
+
+template< typename Map>
+struct m_at< Map,15 >
+{
+ typedef typename Map::item15 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 16,Key,T,Base >
+ : m_item_< Key,T,Base >
+{
+ typedef pair< Key,T > item15;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15
+ >
+struct map16
+ : m_item<
+ 16
+ , typename P15::first
+ , typename P15::second
+ , map15< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14 >
+ >
+{
+ typedef map16 type;
+};
+
+template< typename Map>
+struct m_at< Map,16 >
+{
+ typedef typename Map::item16 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 17,Key,T,Base >
+ : m_item_< Key,T,Base >
+{
+ typedef pair< Key,T > item16;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16
+ >
+struct map17
+ : m_item<
+ 17
+ , typename P16::first
+ , typename P16::second
+ , map16< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15 >
+ >
+{
+ typedef map17 type;
+};
+
+template< typename Map>
+struct m_at< Map,17 >
+{
+ typedef typename Map::item17 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 18,Key,T,Base >
+ : m_item_< Key,T,Base >
+{
+ typedef pair< Key,T > item17;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17
+ >
+struct map18
+ : m_item<
+ 18
+ , typename P17::first
+ , typename P17::second
+ , map17< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16 >
+ >
+{
+ typedef map18 type;
+};
+
+template< typename Map>
+struct m_at< Map,18 >
+{
+ typedef typename Map::item18 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 19,Key,T,Base >
+ : m_item_< Key,T,Base >
+{
+ typedef pair< Key,T > item18;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18
+ >
+struct map19
+ : m_item<
+ 19
+ , typename P18::first
+ , typename P18::second
+ , map18< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17 >
+ >
+{
+ typedef map19 type;
+};
+
+template< typename Map>
+struct m_at< Map,19 >
+{
+ typedef typename Map::item19 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 20,Key,T,Base >
+ : m_item_< Key,T,Base >
+{
+ typedef pair< Key,T > item19;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ >
+struct map20
+ : m_item<
+ 20
+ , typename P19::first
+ , typename P19::second
+ , map19< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18 >
+ >
+{
+ typedef map20 type;
+};
+
+}}
diff --git a/boost/boost/mpl/map/aux_/preprocessed/plain/map30.hpp b/boost/boost/mpl/map/aux_/preprocessed/plain/map30.hpp
new file mode 100644
index 00000000000..d2f2e17b1c3
--- /dev/null
+++ b/boost/boost/mpl/map/aux_/preprocessed/plain/map30.hpp
@@ -0,0 +1,330 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/map/map30.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template< typename Map>
+struct m_at< Map,20 >
+{
+ typedef typename Map::item20 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 21,Key,T,Base >
+ : m_item_< Key,T,Base >
+{
+ typedef pair< Key,T > item20;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20
+ >
+struct map21
+ : m_item<
+ 21
+ , typename P20::first
+ , typename P20::second
+ , map20< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19 >
+ >
+{
+ typedef map21 type;
+};
+
+template< typename Map>
+struct m_at< Map,21 >
+{
+ typedef typename Map::item21 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 22,Key,T,Base >
+ : m_item_< Key,T,Base >
+{
+ typedef pair< Key,T > item21;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21
+ >
+struct map22
+ : m_item<
+ 22
+ , typename P21::first
+ , typename P21::second
+ , map21< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20 >
+ >
+{
+ typedef map22 type;
+};
+
+template< typename Map>
+struct m_at< Map,22 >
+{
+ typedef typename Map::item22 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 23,Key,T,Base >
+ : m_item_< Key,T,Base >
+{
+ typedef pair< Key,T > item22;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22
+ >
+struct map23
+ : m_item<
+ 23
+ , typename P22::first
+ , typename P22::second
+ , map22< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21 >
+ >
+{
+ typedef map23 type;
+};
+
+template< typename Map>
+struct m_at< Map,23 >
+{
+ typedef typename Map::item23 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 24,Key,T,Base >
+ : m_item_< Key,T,Base >
+{
+ typedef pair< Key,T > item23;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23
+ >
+struct map24
+ : m_item<
+ 24
+ , typename P23::first
+ , typename P23::second
+ , map23< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22 >
+ >
+{
+ typedef map24 type;
+};
+
+template< typename Map>
+struct m_at< Map,24 >
+{
+ typedef typename Map::item24 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 25,Key,T,Base >
+ : m_item_< Key,T,Base >
+{
+ typedef pair< Key,T > item24;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ >
+struct map25
+ : m_item<
+ 25
+ , typename P24::first
+ , typename P24::second
+ , map24< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23 >
+ >
+{
+ typedef map25 type;
+};
+
+template< typename Map>
+struct m_at< Map,25 >
+{
+ typedef typename Map::item25 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 26,Key,T,Base >
+ : m_item_< Key,T,Base >
+{
+ typedef pair< Key,T > item25;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25
+ >
+struct map26
+ : m_item<
+ 26
+ , typename P25::first
+ , typename P25::second
+ , map25< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24 >
+ >
+{
+ typedef map26 type;
+};
+
+template< typename Map>
+struct m_at< Map,26 >
+{
+ typedef typename Map::item26 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 27,Key,T,Base >
+ : m_item_< Key,T,Base >
+{
+ typedef pair< Key,T > item26;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26
+ >
+struct map27
+ : m_item<
+ 27
+ , typename P26::first
+ , typename P26::second
+ , map26< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25 >
+ >
+{
+ typedef map27 type;
+};
+
+template< typename Map>
+struct m_at< Map,27 >
+{
+ typedef typename Map::item27 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 28,Key,T,Base >
+ : m_item_< Key,T,Base >
+{
+ typedef pair< Key,T > item27;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27
+ >
+struct map28
+ : m_item<
+ 28
+ , typename P27::first
+ , typename P27::second
+ , map27< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26 >
+ >
+{
+ typedef map28 type;
+};
+
+template< typename Map>
+struct m_at< Map,28 >
+{
+ typedef typename Map::item28 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 29,Key,T,Base >
+ : m_item_< Key,T,Base >
+{
+ typedef pair< Key,T > item28;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28
+ >
+struct map29
+ : m_item<
+ 29
+ , typename P28::first
+ , typename P28::second
+ , map28< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27 >
+ >
+{
+ typedef map29 type;
+};
+
+template< typename Map>
+struct m_at< Map,29 >
+{
+ typedef typename Map::item29 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 30,Key,T,Base >
+ : m_item_< Key,T,Base >
+{
+ typedef pair< Key,T > item29;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ >
+struct map30
+ : m_item<
+ 30
+ , typename P29::first
+ , typename P29::second
+ , map29< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28 >
+ >
+{
+ typedef map30 type;
+};
+
+}}
diff --git a/boost/boost/mpl/map/aux_/preprocessed/plain/map40.hpp b/boost/boost/mpl/map/aux_/preprocessed/plain/map40.hpp
new file mode 100644
index 00000000000..692f014c650
--- /dev/null
+++ b/boost/boost/mpl/map/aux_/preprocessed/plain/map40.hpp
@@ -0,0 +1,350 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/map/map40.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template< typename Map>
+struct m_at< Map,30 >
+{
+ typedef typename Map::item30 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 31,Key,T,Base >
+ : m_item_< Key,T,Base >
+{
+ typedef pair< Key,T > item30;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30
+ >
+struct map31
+ : m_item<
+ 31
+ , typename P30::first
+ , typename P30::second
+ , map30< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29 >
+ >
+{
+ typedef map31 type;
+};
+
+template< typename Map>
+struct m_at< Map,31 >
+{
+ typedef typename Map::item31 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 32,Key,T,Base >
+ : m_item_< Key,T,Base >
+{
+ typedef pair< Key,T > item31;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31
+ >
+struct map32
+ : m_item<
+ 32
+ , typename P31::first
+ , typename P31::second
+ , map31< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30 >
+ >
+{
+ typedef map32 type;
+};
+
+template< typename Map>
+struct m_at< Map,32 >
+{
+ typedef typename Map::item32 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 33,Key,T,Base >
+ : m_item_< Key,T,Base >
+{
+ typedef pair< Key,T > item32;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31, typename P32
+ >
+struct map33
+ : m_item<
+ 33
+ , typename P32::first
+ , typename P32::second
+ , map32< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31 >
+ >
+{
+ typedef map33 type;
+};
+
+template< typename Map>
+struct m_at< Map,33 >
+{
+ typedef typename Map::item33 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 34,Key,T,Base >
+ : m_item_< Key,T,Base >
+{
+ typedef pair< Key,T > item33;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31, typename P32, typename P33
+ >
+struct map34
+ : m_item<
+ 34
+ , typename P33::first
+ , typename P33::second
+ , map33< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32 >
+ >
+{
+ typedef map34 type;
+};
+
+template< typename Map>
+struct m_at< Map,34 >
+{
+ typedef typename Map::item34 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 35,Key,T,Base >
+ : m_item_< Key,T,Base >
+{
+ typedef pair< Key,T > item34;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31, typename P32, typename P33, typename P34
+ >
+struct map35
+ : m_item<
+ 35
+ , typename P34::first
+ , typename P34::second
+ , map34< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33 >
+ >
+{
+ typedef map35 type;
+};
+
+template< typename Map>
+struct m_at< Map,35 >
+{
+ typedef typename Map::item35 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 36,Key,T,Base >
+ : m_item_< Key,T,Base >
+{
+ typedef pair< Key,T > item35;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31, typename P32, typename P33, typename P34
+ , typename P35
+ >
+struct map36
+ : m_item<
+ 36
+ , typename P35::first
+ , typename P35::second
+ , map35< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34 >
+ >
+{
+ typedef map36 type;
+};
+
+template< typename Map>
+struct m_at< Map,36 >
+{
+ typedef typename Map::item36 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 37,Key,T,Base >
+ : m_item_< Key,T,Base >
+{
+ typedef pair< Key,T > item36;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31, typename P32, typename P33, typename P34
+ , typename P35, typename P36
+ >
+struct map37
+ : m_item<
+ 37
+ , typename P36::first
+ , typename P36::second
+ , map36< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35 >
+ >
+{
+ typedef map37 type;
+};
+
+template< typename Map>
+struct m_at< Map,37 >
+{
+ typedef typename Map::item37 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 38,Key,T,Base >
+ : m_item_< Key,T,Base >
+{
+ typedef pair< Key,T > item37;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31, typename P32, typename P33, typename P34
+ , typename P35, typename P36, typename P37
+ >
+struct map38
+ : m_item<
+ 38
+ , typename P37::first
+ , typename P37::second
+ , map37< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36 >
+ >
+{
+ typedef map38 type;
+};
+
+template< typename Map>
+struct m_at< Map,38 >
+{
+ typedef typename Map::item38 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 39,Key,T,Base >
+ : m_item_< Key,T,Base >
+{
+ typedef pair< Key,T > item38;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31, typename P32, typename P33, typename P34
+ , typename P35, typename P36, typename P37, typename P38
+ >
+struct map39
+ : m_item<
+ 39
+ , typename P38::first
+ , typename P38::second
+ , map38< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37 >
+ >
+{
+ typedef map39 type;
+};
+
+template< typename Map>
+struct m_at< Map,39 >
+{
+ typedef typename Map::item39 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 40,Key,T,Base >
+ : m_item_< Key,T,Base >
+{
+ typedef pair< Key,T > item39;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31, typename P32, typename P33, typename P34
+ , typename P35, typename P36, typename P37, typename P38, typename P39
+ >
+struct map40
+ : m_item<
+ 40
+ , typename P39::first
+ , typename P39::second
+ , map39< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38 >
+ >
+{
+ typedef map40 type;
+};
+
+}}
diff --git a/boost/boost/mpl/map/aux_/preprocessed/plain/map50.hpp b/boost/boost/mpl/map/aux_/preprocessed/plain/map50.hpp
new file mode 100644
index 00000000000..3bd2a25a314
--- /dev/null
+++ b/boost/boost/mpl/map/aux_/preprocessed/plain/map50.hpp
@@ -0,0 +1,370 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/map/map50.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template< typename Map>
+struct m_at< Map,40 >
+{
+ typedef typename Map::item40 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 41,Key,T,Base >
+ : m_item_< Key,T,Base >
+{
+ typedef pair< Key,T > item40;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31, typename P32, typename P33, typename P34
+ , typename P35, typename P36, typename P37, typename P38, typename P39
+ , typename P40
+ >
+struct map41
+ : m_item<
+ 41
+ , typename P40::first
+ , typename P40::second
+ , map40< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39 >
+ >
+{
+ typedef map41 type;
+};
+
+template< typename Map>
+struct m_at< Map,41 >
+{
+ typedef typename Map::item41 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 42,Key,T,Base >
+ : m_item_< Key,T,Base >
+{
+ typedef pair< Key,T > item41;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31, typename P32, typename P33, typename P34
+ , typename P35, typename P36, typename P37, typename P38, typename P39
+ , typename P40, typename P41
+ >
+struct map42
+ : m_item<
+ 42
+ , typename P41::first
+ , typename P41::second
+ , map41< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40 >
+ >
+{
+ typedef map42 type;
+};
+
+template< typename Map>
+struct m_at< Map,42 >
+{
+ typedef typename Map::item42 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 43,Key,T,Base >
+ : m_item_< Key,T,Base >
+{
+ typedef pair< Key,T > item42;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31, typename P32, typename P33, typename P34
+ , typename P35, typename P36, typename P37, typename P38, typename P39
+ , typename P40, typename P41, typename P42
+ >
+struct map43
+ : m_item<
+ 43
+ , typename P42::first
+ , typename P42::second
+ , map42< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41 >
+ >
+{
+ typedef map43 type;
+};
+
+template< typename Map>
+struct m_at< Map,43 >
+{
+ typedef typename Map::item43 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 44,Key,T,Base >
+ : m_item_< Key,T,Base >
+{
+ typedef pair< Key,T > item43;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31, typename P32, typename P33, typename P34
+ , typename P35, typename P36, typename P37, typename P38, typename P39
+ , typename P40, typename P41, typename P42, typename P43
+ >
+struct map44
+ : m_item<
+ 44
+ , typename P43::first
+ , typename P43::second
+ , map43< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42 >
+ >
+{
+ typedef map44 type;
+};
+
+template< typename Map>
+struct m_at< Map,44 >
+{
+ typedef typename Map::item44 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 45,Key,T,Base >
+ : m_item_< Key,T,Base >
+{
+ typedef pair< Key,T > item44;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31, typename P32, typename P33, typename P34
+ , typename P35, typename P36, typename P37, typename P38, typename P39
+ , typename P40, typename P41, typename P42, typename P43, typename P44
+ >
+struct map45
+ : m_item<
+ 45
+ , typename P44::first
+ , typename P44::second
+ , map44< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42,P43 >
+ >
+{
+ typedef map45 type;
+};
+
+template< typename Map>
+struct m_at< Map,45 >
+{
+ typedef typename Map::item45 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 46,Key,T,Base >
+ : m_item_< Key,T,Base >
+{
+ typedef pair< Key,T > item45;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31, typename P32, typename P33, typename P34
+ , typename P35, typename P36, typename P37, typename P38, typename P39
+ , typename P40, typename P41, typename P42, typename P43, typename P44
+ , typename P45
+ >
+struct map46
+ : m_item<
+ 46
+ , typename P45::first
+ , typename P45::second
+ , map45< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42,P43,P44 >
+ >
+{
+ typedef map46 type;
+};
+
+template< typename Map>
+struct m_at< Map,46 >
+{
+ typedef typename Map::item46 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 47,Key,T,Base >
+ : m_item_< Key,T,Base >
+{
+ typedef pair< Key,T > item46;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31, typename P32, typename P33, typename P34
+ , typename P35, typename P36, typename P37, typename P38, typename P39
+ , typename P40, typename P41, typename P42, typename P43, typename P44
+ , typename P45, typename P46
+ >
+struct map47
+ : m_item<
+ 47
+ , typename P46::first
+ , typename P46::second
+ , map46< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42,P43,P44,P45 >
+ >
+{
+ typedef map47 type;
+};
+
+template< typename Map>
+struct m_at< Map,47 >
+{
+ typedef typename Map::item47 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 48,Key,T,Base >
+ : m_item_< Key,T,Base >
+{
+ typedef pair< Key,T > item47;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31, typename P32, typename P33, typename P34
+ , typename P35, typename P36, typename P37, typename P38, typename P39
+ , typename P40, typename P41, typename P42, typename P43, typename P44
+ , typename P45, typename P46, typename P47
+ >
+struct map48
+ : m_item<
+ 48
+ , typename P47::first
+ , typename P47::second
+ , map47< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42,P43,P44,P45,P46 >
+ >
+{
+ typedef map48 type;
+};
+
+template< typename Map>
+struct m_at< Map,48 >
+{
+ typedef typename Map::item48 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 49,Key,T,Base >
+ : m_item_< Key,T,Base >
+{
+ typedef pair< Key,T > item48;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31, typename P32, typename P33, typename P34
+ , typename P35, typename P36, typename P37, typename P38, typename P39
+ , typename P40, typename P41, typename P42, typename P43, typename P44
+ , typename P45, typename P46, typename P47, typename P48
+ >
+struct map49
+ : m_item<
+ 49
+ , typename P48::first
+ , typename P48::second
+ , map48< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42,P43,P44,P45,P46,P47 >
+ >
+{
+ typedef map49 type;
+};
+
+template< typename Map>
+struct m_at< Map,49 >
+{
+ typedef typename Map::item49 type;
+};
+
+template< typename Key, typename T, typename Base >
+struct m_item< 50,Key,T,Base >
+ : m_item_< Key,T,Base >
+{
+ typedef pair< Key,T > item49;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31, typename P32, typename P33, typename P34
+ , typename P35, typename P36, typename P37, typename P38, typename P39
+ , typename P40, typename P41, typename P42, typename P43, typename P44
+ , typename P45, typename P46, typename P47, typename P48, typename P49
+ >
+struct map50
+ : m_item<
+ 50
+ , typename P49::first
+ , typename P49::second
+ , map49< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42,P43,P44,P45,P46,P47,P48 >
+ >
+{
+ typedef map50 type;
+};
+
+}}
diff --git a/boost/boost/mpl/map/aux_/preprocessed/typeof_based/map10.hpp b/boost/boost/mpl/map/aux_/preprocessed/typeof_based/map10.hpp
new file mode 100644
index 00000000000..e48e9919ce7
--- /dev/null
+++ b/boost/boost/mpl/map/aux_/preprocessed/typeof_based/map10.hpp
@@ -0,0 +1,150 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/map/map10.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename P0
+ >
+struct map1
+ : m_item<
+ typename P0::first
+ , typename P0::second
+ , map0< >
+ >
+{
+ typedef map1 type;
+};
+
+template<
+ typename P0, typename P1
+ >
+struct map2
+ : m_item<
+ typename P1::first
+ , typename P1::second
+ , map1<P0>
+ >
+{
+ typedef map2 type;
+};
+
+template<
+ typename P0, typename P1, typename P2
+ >
+struct map3
+ : m_item<
+ typename P2::first
+ , typename P2::second
+ , map2< P0,P1 >
+ >
+{
+ typedef map3 type;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3
+ >
+struct map4
+ : m_item<
+ typename P3::first
+ , typename P3::second
+ , map3< P0,P1,P2 >
+ >
+{
+ typedef map4 type;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ >
+struct map5
+ : m_item<
+ typename P4::first
+ , typename P4::second
+ , map4< P0,P1,P2,P3 >
+ >
+{
+ typedef map5 type;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5
+ >
+struct map6
+ : m_item<
+ typename P5::first
+ , typename P5::second
+ , map5< P0,P1,P2,P3,P4 >
+ >
+{
+ typedef map6 type;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6
+ >
+struct map7
+ : m_item<
+ typename P6::first
+ , typename P6::second
+ , map6< P0,P1,P2,P3,P4,P5 >
+ >
+{
+ typedef map7 type;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7
+ >
+struct map8
+ : m_item<
+ typename P7::first
+ , typename P7::second
+ , map7< P0,P1,P2,P3,P4,P5,P6 >
+ >
+{
+ typedef map8 type;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8
+ >
+struct map9
+ : m_item<
+ typename P8::first
+ , typename P8::second
+ , map8< P0,P1,P2,P3,P4,P5,P6,P7 >
+ >
+{
+ typedef map9 type;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ >
+struct map10
+ : m_item<
+ typename P9::first
+ , typename P9::second
+ , map9< P0,P1,P2,P3,P4,P5,P6,P7,P8 >
+ >
+{
+ typedef map10 type;
+};
+
+}}
diff --git a/boost/boost/mpl/map/aux_/preprocessed/typeof_based/map20.hpp b/boost/boost/mpl/map/aux_/preprocessed/typeof_based/map20.hpp
new file mode 100644
index 00000000000..bb8d3881e05
--- /dev/null
+++ b/boost/boost/mpl/map/aux_/preprocessed/typeof_based/map20.hpp
@@ -0,0 +1,170 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/map/map20.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10
+ >
+struct map11
+ : m_item<
+ typename P10::first
+ , typename P10::second
+ , map10< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9 >
+ >
+{
+ typedef map11 type;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11
+ >
+struct map12
+ : m_item<
+ typename P11::first
+ , typename P11::second
+ , map11< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10 >
+ >
+{
+ typedef map12 type;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12
+ >
+struct map13
+ : m_item<
+ typename P12::first
+ , typename P12::second
+ , map12< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11 >
+ >
+{
+ typedef map13 type;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13
+ >
+struct map14
+ : m_item<
+ typename P13::first
+ , typename P13::second
+ , map13< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12 >
+ >
+{
+ typedef map14 type;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ >
+struct map15
+ : m_item<
+ typename P14::first
+ , typename P14::second
+ , map14< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13 >
+ >
+{
+ typedef map15 type;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15
+ >
+struct map16
+ : m_item<
+ typename P15::first
+ , typename P15::second
+ , map15< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14 >
+ >
+{
+ typedef map16 type;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16
+ >
+struct map17
+ : m_item<
+ typename P16::first
+ , typename P16::second
+ , map16< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15 >
+ >
+{
+ typedef map17 type;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17
+ >
+struct map18
+ : m_item<
+ typename P17::first
+ , typename P17::second
+ , map17< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16 >
+ >
+{
+ typedef map18 type;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18
+ >
+struct map19
+ : m_item<
+ typename P18::first
+ , typename P18::second
+ , map18< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17 >
+ >
+{
+ typedef map19 type;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ >
+struct map20
+ : m_item<
+ typename P19::first
+ , typename P19::second
+ , map19< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18 >
+ >
+{
+ typedef map20 type;
+};
+
+}}
diff --git a/boost/boost/mpl/map/aux_/preprocessed/typeof_based/map30.hpp b/boost/boost/mpl/map/aux_/preprocessed/typeof_based/map30.hpp
new file mode 100644
index 00000000000..6a45c0d6a23
--- /dev/null
+++ b/boost/boost/mpl/map/aux_/preprocessed/typeof_based/map30.hpp
@@ -0,0 +1,190 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/map/map30.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20
+ >
+struct map21
+ : m_item<
+ typename P20::first
+ , typename P20::second
+ , map20< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19 >
+ >
+{
+ typedef map21 type;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21
+ >
+struct map22
+ : m_item<
+ typename P21::first
+ , typename P21::second
+ , map21< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20 >
+ >
+{
+ typedef map22 type;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22
+ >
+struct map23
+ : m_item<
+ typename P22::first
+ , typename P22::second
+ , map22< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21 >
+ >
+{
+ typedef map23 type;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23
+ >
+struct map24
+ : m_item<
+ typename P23::first
+ , typename P23::second
+ , map23< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22 >
+ >
+{
+ typedef map24 type;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ >
+struct map25
+ : m_item<
+ typename P24::first
+ , typename P24::second
+ , map24< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23 >
+ >
+{
+ typedef map25 type;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25
+ >
+struct map26
+ : m_item<
+ typename P25::first
+ , typename P25::second
+ , map25< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24 >
+ >
+{
+ typedef map26 type;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26
+ >
+struct map27
+ : m_item<
+ typename P26::first
+ , typename P26::second
+ , map26< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25 >
+ >
+{
+ typedef map27 type;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27
+ >
+struct map28
+ : m_item<
+ typename P27::first
+ , typename P27::second
+ , map27< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26 >
+ >
+{
+ typedef map28 type;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28
+ >
+struct map29
+ : m_item<
+ typename P28::first
+ , typename P28::second
+ , map28< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27 >
+ >
+{
+ typedef map29 type;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ >
+struct map30
+ : m_item<
+ typename P29::first
+ , typename P29::second
+ , map29< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28 >
+ >
+{
+ typedef map30 type;
+};
+
+}}
diff --git a/boost/boost/mpl/map/aux_/preprocessed/typeof_based/map40.hpp b/boost/boost/mpl/map/aux_/preprocessed/typeof_based/map40.hpp
new file mode 100644
index 00000000000..6fc4f4b4a0a
--- /dev/null
+++ b/boost/boost/mpl/map/aux_/preprocessed/typeof_based/map40.hpp
@@ -0,0 +1,210 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/map/map40.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30
+ >
+struct map31
+ : m_item<
+ typename P30::first
+ , typename P30::second
+ , map30< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29 >
+ >
+{
+ typedef map31 type;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31
+ >
+struct map32
+ : m_item<
+ typename P31::first
+ , typename P31::second
+ , map31< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30 >
+ >
+{
+ typedef map32 type;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31, typename P32
+ >
+struct map33
+ : m_item<
+ typename P32::first
+ , typename P32::second
+ , map32< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31 >
+ >
+{
+ typedef map33 type;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31, typename P32, typename P33
+ >
+struct map34
+ : m_item<
+ typename P33::first
+ , typename P33::second
+ , map33< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32 >
+ >
+{
+ typedef map34 type;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31, typename P32, typename P33, typename P34
+ >
+struct map35
+ : m_item<
+ typename P34::first
+ , typename P34::second
+ , map34< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33 >
+ >
+{
+ typedef map35 type;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31, typename P32, typename P33, typename P34
+ , typename P35
+ >
+struct map36
+ : m_item<
+ typename P35::first
+ , typename P35::second
+ , map35< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34 >
+ >
+{
+ typedef map36 type;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31, typename P32, typename P33, typename P34
+ , typename P35, typename P36
+ >
+struct map37
+ : m_item<
+ typename P36::first
+ , typename P36::second
+ , map36< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35 >
+ >
+{
+ typedef map37 type;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31, typename P32, typename P33, typename P34
+ , typename P35, typename P36, typename P37
+ >
+struct map38
+ : m_item<
+ typename P37::first
+ , typename P37::second
+ , map37< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36 >
+ >
+{
+ typedef map38 type;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31, typename P32, typename P33, typename P34
+ , typename P35, typename P36, typename P37, typename P38
+ >
+struct map39
+ : m_item<
+ typename P38::first
+ , typename P38::second
+ , map38< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37 >
+ >
+{
+ typedef map39 type;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31, typename P32, typename P33, typename P34
+ , typename P35, typename P36, typename P37, typename P38, typename P39
+ >
+struct map40
+ : m_item<
+ typename P39::first
+ , typename P39::second
+ , map39< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38 >
+ >
+{
+ typedef map40 type;
+};
+
+}}
diff --git a/boost/boost/mpl/map/aux_/preprocessed/typeof_based/map50.hpp b/boost/boost/mpl/map/aux_/preprocessed/typeof_based/map50.hpp
new file mode 100644
index 00000000000..7b3980dfaec
--- /dev/null
+++ b/boost/boost/mpl/map/aux_/preprocessed/typeof_based/map50.hpp
@@ -0,0 +1,230 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/map/map50.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31, typename P32, typename P33, typename P34
+ , typename P35, typename P36, typename P37, typename P38, typename P39
+ , typename P40
+ >
+struct map41
+ : m_item<
+ typename P40::first
+ , typename P40::second
+ , map40< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39 >
+ >
+{
+ typedef map41 type;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31, typename P32, typename P33, typename P34
+ , typename P35, typename P36, typename P37, typename P38, typename P39
+ , typename P40, typename P41
+ >
+struct map42
+ : m_item<
+ typename P41::first
+ , typename P41::second
+ , map41< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40 >
+ >
+{
+ typedef map42 type;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31, typename P32, typename P33, typename P34
+ , typename P35, typename P36, typename P37, typename P38, typename P39
+ , typename P40, typename P41, typename P42
+ >
+struct map43
+ : m_item<
+ typename P42::first
+ , typename P42::second
+ , map42< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41 >
+ >
+{
+ typedef map43 type;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31, typename P32, typename P33, typename P34
+ , typename P35, typename P36, typename P37, typename P38, typename P39
+ , typename P40, typename P41, typename P42, typename P43
+ >
+struct map44
+ : m_item<
+ typename P43::first
+ , typename P43::second
+ , map43< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42 >
+ >
+{
+ typedef map44 type;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31, typename P32, typename P33, typename P34
+ , typename P35, typename P36, typename P37, typename P38, typename P39
+ , typename P40, typename P41, typename P42, typename P43, typename P44
+ >
+struct map45
+ : m_item<
+ typename P44::first
+ , typename P44::second
+ , map44< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42,P43 >
+ >
+{
+ typedef map45 type;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31, typename P32, typename P33, typename P34
+ , typename P35, typename P36, typename P37, typename P38, typename P39
+ , typename P40, typename P41, typename P42, typename P43, typename P44
+ , typename P45
+ >
+struct map46
+ : m_item<
+ typename P45::first
+ , typename P45::second
+ , map45< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42,P43,P44 >
+ >
+{
+ typedef map46 type;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31, typename P32, typename P33, typename P34
+ , typename P35, typename P36, typename P37, typename P38, typename P39
+ , typename P40, typename P41, typename P42, typename P43, typename P44
+ , typename P45, typename P46
+ >
+struct map47
+ : m_item<
+ typename P46::first
+ , typename P46::second
+ , map46< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42,P43,P44,P45 >
+ >
+{
+ typedef map47 type;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31, typename P32, typename P33, typename P34
+ , typename P35, typename P36, typename P37, typename P38, typename P39
+ , typename P40, typename P41, typename P42, typename P43, typename P44
+ , typename P45, typename P46, typename P47
+ >
+struct map48
+ : m_item<
+ typename P47::first
+ , typename P47::second
+ , map47< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42,P43,P44,P45,P46 >
+ >
+{
+ typedef map48 type;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31, typename P32, typename P33, typename P34
+ , typename P35, typename P36, typename P37, typename P38, typename P39
+ , typename P40, typename P41, typename P42, typename P43, typename P44
+ , typename P45, typename P46, typename P47, typename P48
+ >
+struct map49
+ : m_item<
+ typename P48::first
+ , typename P48::second
+ , map48< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42,P43,P44,P45,P46,P47 >
+ >
+{
+ typedef map49 type;
+};
+
+template<
+ typename P0, typename P1, typename P2, typename P3, typename P4
+ , typename P5, typename P6, typename P7, typename P8, typename P9
+ , typename P10, typename P11, typename P12, typename P13, typename P14
+ , typename P15, typename P16, typename P17, typename P18, typename P19
+ , typename P20, typename P21, typename P22, typename P23, typename P24
+ , typename P25, typename P26, typename P27, typename P28, typename P29
+ , typename P30, typename P31, typename P32, typename P33, typename P34
+ , typename P35, typename P36, typename P37, typename P38, typename P39
+ , typename P40, typename P41, typename P42, typename P43, typename P44
+ , typename P45, typename P46, typename P47, typename P48, typename P49
+ >
+struct map50
+ : m_item<
+ typename P49::first
+ , typename P49::second
+ , map49< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31,P32,P33,P34,P35,P36,P37,P38,P39,P40,P41,P42,P43,P44,P45,P46,P47,P48 >
+ >
+{
+ typedef map50 type;
+};
+
+}}
diff --git a/boost/boost/mpl/map/aux_/size_impl.hpp b/boost/boost/mpl/map/aux_/size_impl.hpp
new file mode 100644
index 00000000000..881a6484d4e
--- /dev/null
+++ b/boost/boost/mpl/map/aux_/size_impl.hpp
@@ -0,0 +1,33 @@
+
+#ifndef BOOST_MPL_MAP_AUX_SIZE_IMPL_HPP_INCLUDED
+#define BOOST_MPL_MAP_AUX_SIZE_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/map/aux_/size_impl.hpp,v $
+// $Date: 2004/09/02 15:41:00 $
+// $Revision: 1.2 $
+
+#include <boost/mpl/size_fwd.hpp>
+#include <boost/mpl/map/aux_/tag.hpp>
+
+namespace boost { namespace mpl {
+
+template<>
+struct size_impl< aux::map_tag >
+{
+ template< typename Map > struct apply
+ : Map::size
+ {
+ };
+};
+
+}}
+
+#endif // BOOST_MPL_MAP_AUX_SIZE_IMPL_HPP_INCLUDED
diff --git a/boost/boost/mpl/map/aux_/tag.hpp b/boost/boost/mpl/map/aux_/tag.hpp
new file mode 100644
index 00000000000..a585b990756
--- /dev/null
+++ b/boost/boost/mpl/map/aux_/tag.hpp
@@ -0,0 +1,24 @@
+
+#ifndef BOOST_MPL_MAP_AUX_TAG_HPP_INCLUDED
+#define BOOST_MPL_MAP_AUX_TAG_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/map/aux_/tag.hpp,v $
+// $Date: 2004/09/02 15:41:00 $
+// $Revision: 1.2 $
+
+namespace boost { namespace mpl { namespace aux {
+
+struct map_tag;
+
+}}}
+
+#endif // BOOST_MPL_MAP_AUX_TAG_HPP_INCLUDED
diff --git a/boost/boost/mpl/map/aux_/value_type_impl.hpp b/boost/boost/mpl/map/aux_/value_type_impl.hpp
new file mode 100644
index 00000000000..bf64269db1b
--- /dev/null
+++ b/boost/boost/mpl/map/aux_/value_type_impl.hpp
@@ -0,0 +1,36 @@
+
+#ifndef BOOST_MPL_MAP_AUX_VALUE_TYPE_IMPL_HPP_INCLUDED
+#define BOOST_MPL_MAP_AUX_VALUE_TYPE_IMPL_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/map/aux_/value_type_impl.hpp,v $
+// $Date: 2004/09/02 15:41:00 $
+// $Revision: 1.2 $
+
+#include <boost/mpl/value_type_fwd.hpp>
+#include <boost/mpl/pair.hpp>
+#include <boost/mpl/map/aux_/tag.hpp>
+
+namespace boost {
+namespace mpl {
+
+template<>
+struct value_type_impl< aux::map_tag >
+{
+ template< typename Map, typename T > struct apply
+ : second<T>
+ {
+ };
+};
+
+}}
+
+#endif // BOOST_MPL_MAP_AUX_VALUE_TYPE_IMPL_HPP_INCLUDED
diff --git a/boost/boost/mpl/map/map0.hpp b/boost/boost/mpl/map/map0.hpp
new file mode 100644
index 00000000000..16fd46935c1
--- /dev/null
+++ b/boost/boost/mpl/map/map0.hpp
@@ -0,0 +1,36 @@
+
+#ifndef BOOST_MPL_MAP_MAP0_HPP_INCLUDED
+#define BOOST_MPL_MAP_MAP0_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/map/map0.hpp,v $
+// $Date: 2004/09/02 15:40:59 $
+// $Revision: 1.2 $
+
+#include <boost/mpl/map/aux_/contains_impl.hpp>
+#include <boost/mpl/map/aux_/at_impl.hpp>
+//#include <boost/mpl/map/aux_/O1_size.hpp>
+#include <boost/mpl/map/aux_/insert_impl.hpp>
+#include <boost/mpl/map/aux_/erase_impl.hpp>
+#include <boost/mpl/map/aux_/erase_key_impl.hpp>
+#include <boost/mpl/map/aux_/has_key_impl.hpp>
+#include <boost/mpl/map/aux_/key_type_impl.hpp>
+#include <boost/mpl/map/aux_/value_type_impl.hpp>
+#include <boost/mpl/map/aux_/clear_impl.hpp>
+#include <boost/mpl/map/aux_/size_impl.hpp>
+#include <boost/mpl/map/aux_/empty_impl.hpp>
+#include <boost/mpl/map/aux_/begin_end_impl.hpp>
+#include <boost/mpl/map/aux_/iterator.hpp>
+#include <boost/mpl/map/aux_/item.hpp>
+#include <boost/mpl/map/aux_/map0.hpp>
+#include <boost/mpl/map/aux_/tag.hpp>
+
+#endif // BOOST_MPL_MAP_MAP0_HPP_INCLUDED
diff --git a/boost/boost/mpl/map/map10.hpp b/boost/boost/mpl/map/map10.hpp
new file mode 100644
index 00000000000..c5c05ab842c
--- /dev/null
+++ b/boost/boost/mpl/map/map10.hpp
@@ -0,0 +1,44 @@
+
+#ifndef BOOST_MPL_MAP_MAP10_HPP_INCLUDED
+#define BOOST_MPL_MAP_MAP10_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/map/map10.hpp,v $
+// $Date: 2004/09/05 09:42:58 $
+// $Revision: 1.3 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/map/map0.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 map10.hpp
+# include <boost/mpl/map/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/map/aux_/numbered.hpp>))
+# include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_MAP_MAP10_HPP_INCLUDED
diff --git a/boost/boost/mpl/map/map20.hpp b/boost/boost/mpl/map/map20.hpp
new file mode 100644
index 00000000000..a2e3a307298
--- /dev/null
+++ b/boost/boost/mpl/map/map20.hpp
@@ -0,0 +1,44 @@
+
+#ifndef BOOST_MPL_MAP_MAP20_HPP_INCLUDED
+#define BOOST_MPL_MAP_MAP20_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/map/map20.hpp,v $
+// $Date: 2004/09/02 15:40:59 $
+// $Revision: 1.2 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/map/map10.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 map20.hpp
+# include <boost/mpl/map/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/map/aux_/numbered.hpp>))
+# include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_MAP_MAP20_HPP_INCLUDED
diff --git a/boost/boost/mpl/map/map30.hpp b/boost/boost/mpl/map/map30.hpp
new file mode 100644
index 00000000000..0997fb70079
--- /dev/null
+++ b/boost/boost/mpl/map/map30.hpp
@@ -0,0 +1,44 @@
+
+#ifndef BOOST_MPL_MAP_MAP30_HPP_INCLUDED
+#define BOOST_MPL_MAP_MAP30_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/map/map30.hpp,v $
+// $Date: 2004/09/02 15:40:59 $
+// $Revision: 1.2 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/map/map20.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 map30.hpp
+# include <boost/mpl/map/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/map/aux_/numbered.hpp>))
+# include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_MAP_MAP30_HPP_INCLUDED
diff --git a/boost/boost/mpl/map/map40.hpp b/boost/boost/mpl/map/map40.hpp
new file mode 100644
index 00000000000..0f044728006
--- /dev/null
+++ b/boost/boost/mpl/map/map40.hpp
@@ -0,0 +1,44 @@
+
+#ifndef BOOST_MPL_MAP_MAP40_HPP_INCLUDED
+#define BOOST_MPL_MAP_MAP40_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/map/map40.hpp,v $
+// $Date: 2004/09/02 15:40:59 $
+// $Revision: 1.2 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/map/map30.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 map40.hpp
+# include <boost/mpl/map/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/map/aux_/numbered.hpp>))
+# include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_MAP_MAP40_HPP_INCLUDED
diff --git a/boost/boost/mpl/map/map50.hpp b/boost/boost/mpl/map/map50.hpp
new file mode 100644
index 00000000000..55809362620
--- /dev/null
+++ b/boost/boost/mpl/map/map50.hpp
@@ -0,0 +1,44 @@
+
+#ifndef BOOST_MPL_MAP_MAP50_HPP_INCLUDED
+#define BOOST_MPL_MAP_MAP50_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/map/map50.hpp,v $
+// $Date: 2004/09/02 15:40:59 $
+// $Revision: 1.2 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/map/map40.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 map50.hpp
+# include <boost/mpl/map/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/map/aux_/numbered.hpp>))
+# include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_MAP_MAP50_HPP_INCLUDED
diff --git a/boost/boost/mpl/math/fixed_c.hpp b/boost/boost/mpl/math/fixed_c.hpp
new file mode 100644
index 00000000000..62feed163ef
--- /dev/null
+++ b/boost/boost/mpl/math/fixed_c.hpp
@@ -0,0 +1,36 @@
+
+#ifndef BOOST_MPL_FIXED_C_HPP_INCLUDED
+#define BOOST_MPL_FIXED_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/math/fixed_c.hpp,v $
+// $Date: 2004/09/02 15:41:01 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/aux_/config/static_constant.hpp>
+
+namespace boost { namespace mpl {
+
+template<
+ long IntegerPart
+ , unsigned long FractionPart
+ >
+struct fixed_c
+{
+ BOOST_STATIC_CONSTANT(long, integer_part = IntegerPart);
+ BOOST_STATIC_CONSTANT(unsigned long, fraction_part = FractionPart);
+ typedef fixed_c<IntegerPart, FractionPart> type;
+
+ fixed_c() {}
+};
+
+}}
+
+#endif // BOOST_MPL_FIXED_C_HPP_INCLUDED
diff --git a/boost/boost/mpl/math/is_even.hpp b/boost/boost/mpl/math/is_even.hpp
new file mode 100644
index 00000000000..41dbafbb645
--- /dev/null
+++ b/boost/boost/mpl/math/is_even.hpp
@@ -0,0 +1,54 @@
+
+#ifndef BOOST_MPL_MATH_IS_EVEN_HPP_INCLUDED
+#define BOOST_MPL_MATH_IS_EVEN_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/math/is_even.hpp,v $
+// $Date: 2004/09/02 15:41:01 $
+// $Revision: 1.5 $
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+namespace boost { namespace mpl {
+
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+namespace aux
+{
+ template <class N>
+ struct is_even_base
+ {
+ enum { value = (N::value % 2) == 0 };
+ typedef bool_<value> type;
+ };
+}
+#endif
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N)
+ >
+struct is_even
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+ : aux::is_even_base<N>::type
+#else
+ : bool_<((N::value % 2) == 0)>
+#endif
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_even,(N))
+};
+
+BOOST_MPL_AUX_NA_SPEC(1, is_even)
+
+}}
+
+#endif // BOOST_MPL_MATH_IS_EVEN_HPP_INCLUDED
diff --git a/boost/boost/mpl/math/rational_c.hpp b/boost/boost/mpl/math/rational_c.hpp
new file mode 100644
index 00000000000..e99f06f7a07
--- /dev/null
+++ b/boost/boost/mpl/math/rational_c.hpp
@@ -0,0 +1,37 @@
+
+#ifndef BOOST_MPL_RATIONAL_C_HPP_INCLUDED
+#define BOOST_MPL_RATIONAL_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/math/rational_c.hpp,v $
+// $Date: 2004/09/02 15:41:01 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/aux_/config/static_constant.hpp>
+
+namespace boost { namespace mpl {
+
+template<
+ typename IntegerType
+ , IntegerType N
+ , IntegerType D = 1
+ >
+struct rational_c
+{
+ BOOST_STATIC_CONSTANT(IntegerType, numerator = N);
+ BOOST_STATIC_CONSTANT(IntegerType, denominator = D);
+
+ typedef rational_c<IntegerType,N,D> type;
+ rational_c() {}
+};
+
+}}
+
+#endif // BOOST_MPL_RATIONAL_C_HPP_INCLUDED
diff --git a/boost/boost/mpl/max.hpp b/boost/boost/mpl/max.hpp
new file mode 100644
index 00000000000..b307f34ef36
--- /dev/null
+++ b/boost/boost/mpl/max.hpp
@@ -0,0 +1,19 @@
+
+#ifndef BOOST_MPL_MAX_HPP_INCLUDED
+#define BOOST_MPL_MAX_HPP_INCLUDED
+
+// 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/max.hpp,v $
+// $Date: 2004/11/28 01:55:27 $
+// $Revision: 1.2 $
+
+#include <boost/mpl/min_max.hpp>
+
+#endif // BOOST_MPL_MAX_HPP_INCLUDED
diff --git a/boost/boost/mpl/max_element.hpp b/boost/boost/mpl/max_element.hpp
new file mode 100644
index 00000000000..916ca2cb065
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/max_element.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.7 $
+
+#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/boost/boost/mpl/min.hpp b/boost/boost/mpl/min.hpp
new file mode 100644
index 00000000000..34487c92996
--- /dev/null
+++ b/boost/boost/mpl/min.hpp
@@ -0,0 +1,19 @@
+
+#ifndef BOOST_MPL_MIN_HPP_INCLUDED
+#define BOOST_MPL_MIN_HPP_INCLUDED
+
+// 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/min.hpp,v $
+// $Date: 2004/11/28 01:55:27 $
+// $Revision: 1.2 $
+
+#include <boost/mpl/min_max.hpp>
+
+#endif // BOOST_MPL_MIN_HPP_INCLUDED
diff --git a/boost/boost/mpl/min_element.hpp b/boost/boost/mpl/min_element.hpp
new file mode 100644
index 00000000000..9f4b00636df
--- /dev/null
+++ b/boost/boost/mpl/min_element.hpp
@@ -0,0 +1,40 @@
+
+#ifndef BOOST_MPL_MIN_ELEMENT_HPP_INCLUDED
+#define BOOST_MPL_MIN_ELEMENT_HPP_INCLUDED
+
+// Copyright David Abrahams 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/min_element.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.2 $
+
+#include <boost/mpl/max_element.hpp>
+#include <boost/mpl/not.hpp>
+
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_COMMON_NAME_WKND(min_element)
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+ , typename Predicate = less<_,_>
+ >
+struct min_element
+ : max_element<
+ Sequence
+ , mpl::not_<Predicate>
+ >
+{
+};
+
+BOOST_MPL_AUX_NA_SPEC(1, min_element)
+
+}}
+
+#endif // BOOST_MPL_MIN_ELEMENT_HPP_INCLUDED
diff --git a/boost/boost/mpl/min_max.hpp b/boost/boost/mpl/min_max.hpp
new file mode 100644
index 00000000000..f28b1c6d415
--- /dev/null
+++ b/boost/boost/mpl/min_max.hpp
@@ -0,0 +1,46 @@
+
+#ifndef BOOST_MPL_MAX_HPP_INCLUDED
+#define BOOST_MPL_MAX_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/min_max.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.2 $
+
+#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_MAX_HPP_INCLUDED
diff --git a/boost/boost/mpl/minus.hpp b/boost/boost/mpl/minus.hpp
new file mode 100644
index 00000000000..fe6e2ace659
--- /dev/null
+++ b/boost/boost/mpl/minus.hpp
@@ -0,0 +1,21 @@
+
+#ifndef BOOST_MPL_MINUS_HPP_INCLUDED
+#define BOOST_MPL_MINUS_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/minus.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.3 $
+
+#define AUX778076_OP_NAME minus
+#define AUX778076_OP_TOKEN -
+#include <boost/mpl/aux_/arithmetic_op.hpp>
+
+#endif // BOOST_MPL_MINUS_HPP_INCLUDED
diff --git a/boost/boost/mpl/modulus.hpp b/boost/boost/mpl/modulus.hpp
new file mode 100644
index 00000000000..292e58e92fd
--- /dev/null
+++ b/boost/boost/mpl/modulus.hpp
@@ -0,0 +1,22 @@
+
+#ifndef BOOST_MPL_MODULUS_HPP_INCLUDED
+#define BOOST_MPL_MODULUS_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/modulus.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.3 $
+
+#define AUX778076_OP_NAME modulus
+#define AUX778076_OP_TOKEN %
+#define AUX778076_OP_ARITY 2
+#include <boost/mpl/aux_/arithmetic_op.hpp>
+
+#endif // BOOST_MPL_MODULUS_HPP_INCLUDED
diff --git a/boost/boost/mpl/multiplies.hpp b/boost/boost/mpl/multiplies.hpp
new file mode 100644
index 00000000000..14ae36144b7
--- /dev/null
+++ b/boost/boost/mpl/multiplies.hpp
@@ -0,0 +1,53 @@
+
+#ifndef BOOST_MPL_MULTIPLIES_HPP_INCLUDED
+#define BOOST_MPL_MULTIPLIES_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/multiplies.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.3 $
+
+#include <boost/mpl/times.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/mpl/aux_/preprocessor/default_params.hpp>
+#include <boost/mpl/aux_/preprocessor/params.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+
+// backward compatibility header, deprecated
+
+namespace boost { namespace mpl {
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+# define AUX778076_OP_ARITY BOOST_MPL_LIMIT_METAFUNCTION_ARITY
+#else
+# define AUX778076_OP_ARITY 2
+#endif
+
+template<
+ BOOST_MPL_PP_DEFAULT_PARAMS(AUX778076_OP_ARITY, typename N, na)
+ >
+struct multiplies
+ : times< BOOST_MPL_PP_PARAMS(AUX778076_OP_ARITY, N) >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ AUX778076_OP_ARITY
+ , multiplies
+ , ( BOOST_MPL_PP_PARAMS(AUX778076_OP_ARITY, N) )
+ )
+};
+
+BOOST_MPL_AUX_NA_SPEC(AUX778076_OP_ARITY, multiplies)
+
+#undef AUX778076_OP_ARITY
+
+}}
+
+#endif // BOOST_MPL_MULTIPLIES_HPP_INCLUDED
diff --git a/boost/boost/mpl/multiset/aux_/count_impl.hpp b/boost/boost/mpl/multiset/aux_/count_impl.hpp
new file mode 100644
index 00000000000..0969dcee1d1
--- /dev/null
+++ b/boost/boost/mpl/multiset/aux_/count_impl.hpp
@@ -0,0 +1,82 @@
+
+#ifndef BOOST_MPL_MULTISET_AUX_COUNT_IMPL_HPP_INCLUDED
+#define BOOST_MPL_MULTISET_AUX_COUNT_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/multiset/aux_/count_impl.hpp,v $
+// $Date: 2004/09/02 15:41:02 $
+// $Revision: 1.2 $
+
+#include <boost/mpl/multiset/aux_/tag.hpp>
+#include <boost/mpl/count_fwd.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/aux_/type_wrapper.hpp>
+#include <boost/mpl/aux_/static_cast.hpp>
+#include <boost/mpl/aux_/config/static_constant.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+#include <boost/mpl/aux_/config/msvc.hpp>
+
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+# include <boost/mpl/if.hpp>
+# include <boost/type_traits/is_reference.hpp>
+#endif
+
+namespace boost { namespace mpl {
+
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+
+namespace aux {
+template< typename S, typename U >
+struct multiset_count_impl
+ : int_< sizeof(S::key_count(BOOST_MPL_AUX_STATIC_CAST(U*,0))) - 1 >
+{
+};
+
+template< typename S, typename U >
+struct multiset_count_ref_impl
+{
+ typedef U (* u_)();
+ typedef int_< sizeof(S::ref_key_count(BOOST_MPL_AUX_STATIC_CAST(u_,0))) - 1 > type_;
+ BOOST_STATIC_CONSTANT(int, value = type_::value);
+ typedef type_ type;
+};
+}
+
+template<>
+struct count_impl< aux::multiset_tag >
+{
+ template< typename Set, typename Key > struct apply
+ : if_<
+ is_reference<Key>
+ , aux::multiset_count_ref_impl<Set,Key>
+ , aux::multiset_count_impl<Set,Key>
+ >::type
+ {
+ };
+};
+
+#else
+
+template<>
+struct count_impl< aux::multiset_tag >
+{
+ template< typename Set, typename Key > struct apply
+ {
+ enum { msvc71_wknd_ = sizeof(Set::key_count(BOOST_MPL_AUX_STATIC_CAST(aux::type_wrapper<Key>*,0))) - 1 };
+ typedef int_< msvc71_wknd_ > type;
+ BOOST_STATIC_CONSTANT(int, value = msvc71_wknd_);
+ };
+};
+
+#endif // BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+
+}}
+
+#endif // BOOST_MPL_MULTISET_AUX_COUNT_IMPL_HPP_INCLUDED
diff --git a/boost/boost/mpl/multiset/aux_/insert_impl.hpp b/boost/boost/mpl/multiset/aux_/insert_impl.hpp
new file mode 100644
index 00000000000..60a25fc573a
--- /dev/null
+++ b/boost/boost/mpl/multiset/aux_/insert_impl.hpp
@@ -0,0 +1,34 @@
+
+#ifndef BOOST_MPL_MULTISET_AUX_INSERT_IMPL_HPP_INCLUDED
+#define BOOST_MPL_MULTISET_AUX_INSERT_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/multiset/aux_/insert_impl.hpp,v $
+// $Date: 2004/09/02 15:41:02 $
+// $Revision: 1.2 $
+
+#include <boost/mpl/multiset/aux_/item.hpp>
+#include <boost/mpl/multiset/aux_/tag.hpp>
+#include <boost/mpl/insert_fwd.hpp>
+
+namespace boost { namespace mpl {
+
+template<>
+struct insert_impl< aux::multiset_tag >
+{
+ template< typename Set, typename Key, typename unused_ > struct apply
+ {
+ typedef ms_item<Key,Set> type;
+ };
+};
+
+}}
+
+#endif // BOOST_MPL_MULTISET_AUX_INSERT_IMPL_HPP_INCLUDED
diff --git a/boost/boost/mpl/multiset/aux_/item.hpp b/boost/boost/mpl/multiset/aux_/item.hpp
new file mode 100644
index 00000000000..a102b0a6d54
--- /dev/null
+++ b/boost/boost/mpl/multiset/aux_/item.hpp
@@ -0,0 +1,114 @@
+
+#ifndef BOOST_MPL_MULTISET_AUX_ITEM_HPP_INCLUDED
+#define BOOST_MPL_MULTISET_AUX_ITEM_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/multiset/aux_/item.hpp,v $
+// $Date: 2004/09/02 15:41:02 $
+// $Revision: 1.2 $
+
+#include <boost/mpl/multiset/aux_/tag.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/aux_/type_wrapper.hpp>
+#include <boost/mpl/aux_/yes_no.hpp>
+#include <boost/mpl/aux_/value_wknd.hpp>
+#include <boost/mpl/aux_/static_cast.hpp>
+#include <boost/mpl/aux_/config/arrays.hpp>
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+# include <boost/mpl/eval_if.hpp>
+# include <boost/mpl/next.hpp>
+# include <boost/type_traits/is_same.hpp>
+#endif
+
+
+namespace boost { namespace mpl {
+
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+
+template< typename T, typename Base >
+struct ms_item
+{
+ typedef aux::multiset_tag tag;
+
+ template< typename U > struct prior_count
+ {
+ enum { msvc70_wknd_ = sizeof(Base::key_count(BOOST_MPL_AUX_STATIC_CAST(U*,0))) };
+ typedef int_< msvc70_wknd_ > count_;
+ typedef typename eval_if< is_same<T,U>, next<count_>, count_ >::type c_;
+#if defined(BOOST_MPL_CFG_NO_DEPENDENT_ARRAY_TYPES)
+ typedef typename aux::weighted_tag<BOOST_MPL_AUX_MSVC_VALUE_WKND(c_)::value>::type type;
+#else
+ typedef char (&type)[BOOST_MPL_AUX_MSVC_VALUE_WKND(c_)::value];
+#endif
+ };
+
+ template< typename U > struct prior_ref_count
+ {
+ typedef U (* u_)();
+ enum { msvc70_wknd_ = sizeof(Base::ref_key_count(BOOST_MPL_AUX_STATIC_CAST(u_,0))) };
+ typedef int_< msvc70_wknd_ > count_;
+ typedef typename eval_if< is_same<T,U>, next<count_>, count_ >::type c_;
+#if defined(BOOST_MPL_CFG_NO_DEPENDENT_ARRAY_TYPES)
+ typedef typename aux::weighted_tag<BOOST_MPL_AUX_MSVC_VALUE_WKND(c_)::value>::type type;
+#else
+ typedef char (&type)[BOOST_MPL_AUX_MSVC_VALUE_WKND(c_)::value];
+#endif
+ };
+
+ template< typename U >
+ static typename prior_count<U>::type key_count(U*);
+
+ template< typename U >
+ static typename prior_ref_count<U>::type ref_key_count(U (*)());
+};
+
+#else // BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+
+namespace aux {
+template< typename U, typename Base >
+struct prior_key_count
+{
+ enum { msvc71_wknd_ = sizeof(Base::key_count(BOOST_MPL_AUX_STATIC_CAST(aux::type_wrapper<U>*,0))) };
+ typedef int_< msvc71_wknd_ > count_;
+#if defined(BOOST_MPL_CFG_NO_DEPENDENT_ARRAY_TYPES)
+ typedef typename aux::weighted_tag< BOOST_MPL_AUX_VALUE_WKND(count_)::value >::type type;
+#else
+ typedef char (&type)[count_::value];
+#endif
+};
+}
+
+template< typename T, typename Base >
+struct ms_item
+{
+ typedef aux::multiset_tag tag;
+
+ enum { msvc71_wknd_ = sizeof(Base::key_count(BOOST_MPL_AUX_STATIC_CAST(aux::type_wrapper<T>*,0))) + 1 };
+ typedef int_< msvc71_wknd_ > count_;
+#if defined(BOOST_MPL_CFG_NO_DEPENDENT_ARRAY_TYPES)
+ static
+ typename aux::weighted_tag< BOOST_MPL_AUX_VALUE_WKND(count_)::value >::type
+ key_count(aux::type_wrapper<T>*);
+#else
+ static char (& key_count(aux::type_wrapper<T>*) )[count_::value];
+#endif
+
+ template< typename U >
+ static typename aux::prior_key_count<U,Base>::type key_count(aux::type_wrapper<U>*);
+};
+
+#endif // BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+
+}}
+
+#endif // BOOST_MPL_MULTISET_AUX_ITEM_HPP_INCLUDED
diff --git a/boost/boost/mpl/multiset/aux_/multiset0.hpp b/boost/boost/mpl/multiset/aux_/multiset0.hpp
new file mode 100644
index 00000000000..01cefada7c5
--- /dev/null
+++ b/boost/boost/mpl/multiset/aux_/multiset0.hpp
@@ -0,0 +1,34 @@
+
+#ifndef BOOST_MPL_MULTISET_AUX_MULTISET0_HPP_INCLUDED
+#define BOOST_MPL_MULTISET_AUX_MULTISET0_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/multiset/aux_/multiset0.hpp,v $
+// $Date: 2004/09/02 15:41:02 $
+// $Revision: 1.2 $
+
+#include <boost/mpl/multiset/aux_/tag.hpp>
+#include <boost/mpl/int.hpp>
+
+namespace boost { namespace mpl {
+
+template< int dummy_ = 0 >
+struct multiset0
+{
+ typedef aux::multiset_tag tag;
+
+ typedef int_<1> count_;
+ static char (& key_count(...) )[count_::value];
+ static char (& ref_key_count(...) )[count_::value];
+};
+
+}}
+
+#endif // BOOST_MPL_MULTISET_AUX_MULTISET0_HPP_INCLUDED
diff --git a/boost/boost/mpl/multiset/aux_/tag.hpp b/boost/boost/mpl/multiset/aux_/tag.hpp
new file mode 100644
index 00000000000..c2e61641151
--- /dev/null
+++ b/boost/boost/mpl/multiset/aux_/tag.hpp
@@ -0,0 +1,23 @@
+
+#ifndef BOOST_MPL_MULTISET_AUX_TAG_HPP_INCLUDED
+#define BOOST_MPL_MULTISET_AUX_TAG_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/multiset/aux_/tag.hpp,v $
+// $Date: 2004/09/02 15:41:02 $
+// $Revision: 1.2 $
+
+namespace boost { namespace mpl { namespace aux {
+
+struct multiset_tag;
+
+}}}
+
+#endif // BOOST_MPL_MULTISET_AUX_TAG_HPP_INCLUDED
diff --git a/boost/boost/mpl/multiset/multiset0.hpp b/boost/boost/mpl/multiset/multiset0.hpp
new file mode 100644
index 00000000000..9b23635facc
--- /dev/null
+++ b/boost/boost/mpl/multiset/multiset0.hpp
@@ -0,0 +1,36 @@
+
+#ifndef BOOST_MPL_MULTISET_MULTISET0_HPP_INCLUDED
+#define BOOST_MPL_MULTISET_MULTISET0_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/multiset/multiset0.hpp,v $
+// $Date: 2004/09/02 15:41:01 $
+// $Revision: 1.2 $
+
+//#include <boost/mpl/multiset/aux_/at.hpp>
+//#include <boost/mpl/multiset/aux_/front.hpp>
+//#include <boost/mpl/multiset/aux_/push_front.hpp>
+//#include <boost/mpl/multiset/aux_/pop_front.hpp>
+//#include <boost/mpl/multiset/aux_/back.hpp>
+//#include <boost/mpl/multiset/aux_/clear.hpp>
+//#include <boost/mpl/multiset/aux_/O1_size.hpp>
+//#include <boost/mpl/multiset/aux_/size.hpp>
+//#include <boost/mpl/multiset/aux_/empty.hpp>
+//#include <boost/mpl/multiset/aux_/empty.hpp>
+#include <boost/mpl/multiset/aux_/insert_impl.hpp>
+#include <boost/mpl/multiset/aux_/count_impl.hpp>
+//#include <boost/mpl/multiset/aux_/has_key_impl.hpp>
+//#include <boost/mpl/multiset/aux_/begin_end_impl.hpp>
+//#include <boost/mpl/multiset/aux_/iterator.hpp>
+#include <boost/mpl/multiset/aux_/item.hpp>
+#include <boost/mpl/multiset/aux_/multiset0.hpp>
+#include <boost/mpl/multiset/aux_/tag.hpp>
+
+#endif // BOOST_MPL_MULTISET_MULTISET0_HPP_INCLUDED
diff --git a/boost/boost/mpl/negate.hpp b/boost/boost/mpl/negate.hpp
new file mode 100644
index 00000000000..5d158bc4819
--- /dev/null
+++ b/boost/boost/mpl/negate.hpp
@@ -0,0 +1,81 @@
+
+#ifndef BOOST_MPL_NEGATE_HPP_INCLUDED
+#define BOOST_MPL_NEGATE_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/negate.hpp,v $
+// $Date: 2004/09/07 09:06:08 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/integral_c.hpp>
+#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>
+#include <boost/mpl/aux_/config/integral.hpp>
+#include <boost/mpl/aux_/config/static_constant.hpp>
+
+namespace boost { namespace mpl {
+
+template< typename Tag > struct negate_impl;
+
+template< typename T > struct negate_tag
+{
+ typedef typename T::tag type;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N)
+ >
+struct negate
+#if !defined(BOOST_MPL_CFG_MSVC_ETI_BUG)
+ : negate_impl<
+ typename negate_tag<N>::type
+ >::template apply<N>::type
+#else
+ : aux::msvc_eti_base< typename apply_wrap1<
+ negate_impl< typename negate_tag<N>::type >
+ , N
+ >::type >::type
+#endif
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1, negate, (N))
+};
+
+BOOST_MPL_AUX_NA_SPEC(1, negate)
+
+
+#if defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC)
+namespace aux {
+template< typename T, T n > struct negate_wknd
+{
+ BOOST_STATIC_CONSTANT(T, value = -n);
+ typedef integral_c<T,value> type;
+};
+}
+#endif
+
+template<>
+struct negate_impl<integral_c_tag>
+{
+#if defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC)
+ template< typename N > struct apply
+ : aux::negate_wknd< typename N::value_type, N::value >
+#else
+ template< typename N > struct apply
+ : integral_c< typename N::value_type, (-N::value) >
+#endif
+ {
+ };
+};
+
+}}
+
+#endif // BOOST_MPL_NEGATE_HPP_INCLUDED
diff --git a/boost/boost/mpl/next.hpp b/boost/boost/mpl/next.hpp
new file mode 100644
index 00000000000..3aec2236ff4
--- /dev/null
+++ b/boost/boost/mpl/next.hpp
@@ -0,0 +1,19 @@
+
+#ifndef BOOST_MPL_NEXT_HPP_INCLUDED
+#define BOOST_MPL_NEXT_HPP_INCLUDED
+
+// 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/next.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.7 $
+
+#include <boost/mpl/next_prior.hpp>
+
+#endif // BOOST_MPL_NEXT_HPP_INCLUDED
diff --git a/boost/boost/mpl/next_prior.hpp b/boost/boost/mpl/next_prior.hpp
new file mode 100644
index 00000000000..c8f4ca3ace0
--- /dev/null
+++ b/boost/boost/mpl/next_prior.hpp
@@ -0,0 +1,49 @@
+
+#ifndef BOOST_MPL_NEXT_PRIOR_HPP_INCLUDED
+#define BOOST_MPL_NEXT_PRIOR_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/next_prior.hpp,v $
+// $Date: 2004/09/17 06:09:38 $
+// $Revision: 1.3 $
+
+#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(next)
+BOOST_MPL_AUX_COMMON_NAME_WKND(prior)
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(T)
+ >
+struct next
+{
+ typedef typename T::next type;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,next,(T))
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(T)
+ >
+struct prior
+{
+ typedef typename T::prior type;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,prior,(T))
+};
+
+BOOST_MPL_AUX_NA_SPEC(1, next)
+BOOST_MPL_AUX_NA_SPEC(1, prior)
+
+}}
+
+#endif // BOOST_MPL_NEXT_PRIOR_HPP_INCLUDED
diff --git a/boost/boost/mpl/not.hpp b/boost/boost/mpl/not.hpp
new file mode 100644
index 00000000000..9a51fc50f9d
--- /dev/null
+++ b/boost/boost/mpl/not.hpp
@@ -0,0 +1,51 @@
+
+#ifndef BOOST_MPL_NOT_HPP_INCLUDED
+#define BOOST_MPL_NOT_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/not.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.3 $
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/aux_/nttp_decl.hpp>
+#include <boost/mpl/aux_/nested_type_wknd.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template< BOOST_MPL_AUX_NTTP_DECL(long, C_) > // 'long' is intentional here
+struct not_impl
+ : bool_<!C_>
+{
+};
+
+} // namespace aux
+
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(T)
+ >
+struct not_
+ : aux::not_impl<
+ BOOST_MPL_AUX_NESTED_TYPE_WKND(T)::value
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,not_,(T))
+};
+
+BOOST_MPL_AUX_NA_SPEC(1,not_)
+
+}}
+
+#endif // BOOST_MPL_NOT_HPP_INCLUDED
diff --git a/boost/boost/mpl/not_equal_to.hpp b/boost/boost/mpl/not_equal_to.hpp
new file mode 100644
index 00000000000..74787e1a1ed
--- /dev/null
+++ b/boost/boost/mpl/not_equal_to.hpp
@@ -0,0 +1,21 @@
+
+#ifndef BOOST_MPL_NOT_EQUAL_TO_HPP_INCLUDED
+#define BOOST_MPL_NOT_EQUAL_TO_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/not_equal_to.hpp,v $
+// $Date: 2004/09/02 15:40:41 $
+// $Revision: 1.3 $
+
+#define AUX778076_OP_NAME not_equal_to
+#define AUX778076_OP_TOKEN !=
+#include <boost/mpl/aux_/comparison_op.hpp>
+
+#endif // BOOST_MPL_NOT_EQUAL_TO_HPP_INCLUDED
diff --git a/boost/boost/mpl/numeric_cast.hpp b/boost/boost/mpl/numeric_cast.hpp
new file mode 100644
index 00000000000..106a2d0432d
--- /dev/null
+++ b/boost/boost/mpl/numeric_cast.hpp
@@ -0,0 +1,41 @@
+
+#ifndef BOOST_MPL_NUMERIC_CAST_HPP_INCLUDED
+#define BOOST_MPL_NUMERIC_CAST_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/numeric_cast.hpp,v $
+// $Date: 2005/06/26 17:14:04 $
+// $Revision: 1.9 $
+
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+// agurt 21/sep/04: portability macro for the sake of MSVC 6.x-7.0;
+// resolves conflicts with 'boost::numeric_cast' function template.
+// use it in your own code _only_ if you care about compatibility with
+// these outdated compilers!
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x570) )
+# define BOOST_MPL_AUX_NUMERIC_CAST numeric_cast_
+#else
+# define BOOST_MPL_AUX_NUMERIC_CAST numeric_cast
+#endif
+
+namespace boost { namespace mpl {
+
+// no default implementation; the definition is needed to make MSVC happy
+
+template< typename SourceTag, typename TargetTag > struct BOOST_MPL_AUX_NUMERIC_CAST
+{
+ template< typename N > struct apply;
+};
+
+}}
+
+#endif // BOOST_MPL_NUMERIC_CAST_HPP_INCLUDED
diff --git a/boost/boost/mpl/or.hpp b/boost/boost/mpl/or.hpp
new file mode 100644
index 00000000000..7ab97ff8b50
--- /dev/null
+++ b/boost/boost/mpl/or.hpp
@@ -0,0 +1,57 @@
+
+#ifndef BOOST_MPL_OR_HPP_INCLUDED
+#define BOOST_MPL_OR_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/or.hpp,v $
+// $Date: 2004/09/02 15:40:42 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+ && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+# include <boost/mpl/bool.hpp>
+# include <boost/mpl/aux_/nested_type_wknd.hpp>
+# include <boost/mpl/aux_/na_spec.hpp>
+# include <boost/mpl/aux_/lambda_support.hpp>
+# include <boost/mpl/aux_/config/msvc.hpp>
+
+// agurt, 19/may/04: workaround a conflict with <iso646.h> header's
+// 'or' and 'and' macros, see http://tinyurl.com/3et69; 'defined(or)'
+// has to be checked in a separate condition, otherwise GCC complains
+// about 'or' being an alternative token
+#if defined(_MSC_VER)
+#if defined(or)
+# pragma push_macro("or")
+# undef or
+# define or(x)
+#endif
+#endif
+
+# define BOOST_MPL_PREPROCESSED_HEADER or.hpp
+# include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#if defined(_MSC_VER)
+#if defined(or)
+# pragma pop_macro("or")
+#endif
+#endif
+
+#else
+
+# define AUX778076_OP_NAME or_
+# define AUX778076_OP_VALUE1 true
+# define AUX778076_OP_VALUE2 false
+# include <boost/mpl/aux_/logical_op.hpp>
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#endif // BOOST_MPL_OR_HPP_INCLUDED
diff --git a/boost/boost/mpl/order.hpp b/boost/boost/mpl/order.hpp
new file mode 100644
index 00000000000..23a5fb61b04
--- /dev/null
+++ b/boost/boost/mpl/order.hpp
@@ -0,0 +1,41 @@
+
+#ifndef BOOST_MPL_ORDER_HPP_INCLUDED
+#define BOOST_MPL_ORDER_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/order.hpp,v $
+// $Date: 2004/09/02 15:40:42 $
+// $Revision: 1.3 $
+
+#include <boost/mpl/order_fwd.hpp>
+#include <boost/mpl/sequence_tag.hpp>
+#include <boost/mpl/aux_/order_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(AssociativeSequence)
+ , typename BOOST_MPL_AUX_NA_PARAM(Key)
+ >
+struct order
+ : order_impl< typename sequence_tag<AssociativeSequence>::type >
+ ::template apply<AssociativeSequence,Key>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2,order,(AssociativeSequence,Key))
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, order)
+
+}}
+
+#endif // BOOST_MPL_ORDER_HPP_INCLUDED
diff --git a/boost/boost/mpl/order_fwd.hpp b/boost/boost/mpl/order_fwd.hpp
new file mode 100644
index 00000000000..ecaa285ffa3
--- /dev/null
+++ b/boost/boost/mpl/order_fwd.hpp
@@ -0,0 +1,25 @@
+
+#ifndef BOOST_MPL_ORDER_FWD_HPP_INCLUDED
+#define BOOST_MPL_ORDER_FWD_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/order_fwd.hpp,v $
+// $Date: 2004/09/02 15:40:42 $
+// $Revision: 1.3 $
+
+namespace boost { namespace mpl {
+
+template< typename Tag > struct order_impl;
+template< typename AssociativeSequence, typename Key > struct order;
+
+}}
+
+#endif // BOOST_MPL_ORDER_FWD_HPP_INCLUDED
diff --git a/boost/boost/mpl/pair.hpp b/boost/boost/mpl/pair.hpp
new file mode 100644
index 00000000000..8a9a47331ae
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/pair.hpp,v $
+// $Date: 2004/12/14 14:05:31 $
+// $Revision: 1.5 $
+
+#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/boost/boost/mpl/pair_view.hpp b/boost/boost/mpl/pair_view.hpp
new file mode 100644
index 00000000000..04bea087ca7
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/pair_view.hpp,v $
+// $Date: 2004/11/28 01:56:21 $
+// $Revision: 1.5 $
+
+#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/boost/boost/mpl/partition.hpp b/boost/boost/mpl/partition.hpp
new file mode 100644
index 00000000000..264b68725c6
--- /dev/null
+++ b/boost/boost/mpl/partition.hpp
@@ -0,0 +1,53 @@
+
+#ifndef BOOST_MPL_PARTITION_HPP_INCLUDED
+#define BOOST_MPL_PARTITION_HPP_INCLUDED
+
+// Copyright Eric Friedman 2002-2003
+// 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/partition.hpp,v $
+// $Date: 2004/11/28 01:56:21 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/stable_partition.hpp>
+#include <boost/mpl/aux_/inserter_algorithm.hpp>
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template <
+ typename Sequence
+ , typename Pred
+ , typename In1
+ , typename In2
+ >
+struct partition_impl
+ : stable_partition_impl<Sequence,Pred,In1,In2>
+{
+};
+
+template <
+ typename Sequence
+ , typename Pred
+ , typename In1
+ , typename In2
+ >
+struct reverse_partition_impl
+ : reverse_stable_partition_impl<Sequence,Pred,In1,In2>
+{
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(4, partition)
+
+}}
+
+#endif // BOOST_MPL_PARTITION_HPP_INCLUDED
diff --git a/boost/boost/mpl/placeholders.hpp b/boost/boost/mpl/placeholders.hpp
new file mode 100644
index 00000000000..f12f5a85310
--- /dev/null
+++ b/boost/boost/mpl/placeholders.hpp
@@ -0,0 +1,100 @@
+
+#if !defined(BOOST_PP_IS_ITERATING)
+
+///// header body
+
+#ifndef BOOST_MPL_PLACEHOLDERS_HPP_INCLUDED
+#define BOOST_MPL_PLACEHOLDERS_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2001-2004
+// Copyright Peter Dimov 2001-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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/placeholders.hpp,v $
+// $Date: 2004/09/16 14:08:46 $
+// $Revision: 1.4 $
+
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/arg.hpp>
+# include <boost/mpl/aux_/adl_barrier.hpp>
+
+# if !defined(BOOST_MPL_CFG_NO_ADL_BARRIER_NAMESPACE)
+# define BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(type) \
+ using ::BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::type; \
+ /**/
+# else
+# define BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(type) /**/
+# 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 placeholders.hpp
+# include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#else
+
+# include <boost/mpl/aux_/nttp_decl.hpp>
+# include <boost/mpl/limits/arity.hpp>
+# include <boost/preprocessor/iterate.hpp>
+# include <boost/preprocessor/cat.hpp>
+
+// watch out for GNU gettext users, who #define _(x)
+#if !defined(_) || defined(BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT)
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<-1> _;
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_;
+}
+
+}}
+#endif
+
+/// agurt, 17/mar/02: one more placeholder for the last 'apply#'
+/// specialization
+#define BOOST_PP_ITERATION_PARAMS_1 \
+ (3,(1, BOOST_MPL_LIMIT_METAFUNCTION_ARITY + 1, <boost/mpl/placeholders.hpp>))
+#include BOOST_PP_ITERATE()
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#endif // BOOST_MPL_PLACEHOLDERS_HPP_INCLUDED
+
+///// iteration
+
+#else
+#define i_ BOOST_PP_FRAME_ITERATION(1)
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+
+typedef arg<i_> BOOST_PP_CAT(_,i_);
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(BOOST_PP_CAT(_,i_))
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::BOOST_PP_CAT(_,i_);
+}
+
+}}
+
+#undef i_
+#endif // BOOST_PP_IS_ITERATING
diff --git a/boost/boost/mpl/plus.hpp b/boost/boost/mpl/plus.hpp
new file mode 100644
index 00000000000..fefe79aacb1
--- /dev/null
+++ b/boost/boost/mpl/plus.hpp
@@ -0,0 +1,21 @@
+
+#ifndef BOOST_MPL_PLUS_HPP_INCLUDED
+#define BOOST_MPL_PLUS_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/plus.hpp,v $
+// $Date: 2004/09/02 15:40:42 $
+// $Revision: 1.4 $
+
+#define AUX778076_OP_NAME plus
+#define AUX778076_OP_TOKEN +
+#include <boost/mpl/aux_/arithmetic_op.hpp>
+
+#endif // BOOST_MPL_PLUS_HPP_INCLUDED
diff --git a/boost/boost/mpl/pop_back.hpp b/boost/boost/mpl/pop_back.hpp
new file mode 100644
index 00000000000..61173d486d0
--- /dev/null
+++ b/boost/boost/mpl/pop_back.hpp
@@ -0,0 +1,39 @@
+
+#ifndef BOOST_MPL_POP_BACK_HPP_INCLUDED
+#define BOOST_MPL_POP_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/pop_back.hpp,v $
+// $Date: 2004/09/02 15:40:42 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/pop_back_fwd.hpp>
+#include <boost/mpl/aux_/pop_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)
+ >
+struct pop_back
+ : pop_back_impl< typename sequence_tag<Sequence>::type >
+ ::template apply< Sequence >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,pop_back,(Sequence))
+};
+
+BOOST_MPL_AUX_NA_SPEC(1, pop_back)
+
+}}
+
+#endif // BOOST_MPL_POP_BACK_HPP_INCLUDED
diff --git a/boost/boost/mpl/pop_back_fwd.hpp b/boost/boost/mpl/pop_back_fwd.hpp
new file mode 100644
index 00000000000..f776842c2fe
--- /dev/null
+++ b/boost/boost/mpl/pop_back_fwd.hpp
@@ -0,0 +1,24 @@
+
+#ifndef BOOST_MPL_POP_BACK_FWD_HPP_INCLUDED
+#define BOOST_MPL_POP_BACK_FWD_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/pop_back_fwd.hpp,v $
+// $Date: 2004/09/02 15:40:42 $
+// $Revision: 1.4 $
+
+namespace boost { namespace mpl {
+
+template< typename Tag > struct pop_back_impl;
+template< typename Sequence > struct pop_back;
+
+}}
+
+#endif // BOOST_MPL_POP_BACK_FWD_HPP_INCLUDED
diff --git a/boost/boost/mpl/pop_front.hpp b/boost/boost/mpl/pop_front.hpp
new file mode 100644
index 00000000000..871d5e18def
--- /dev/null
+++ b/boost/boost/mpl/pop_front.hpp
@@ -0,0 +1,39 @@
+
+#ifndef BOOST_MPL_POP_FRONT_HPP_INCLUDED
+#define BOOST_MPL_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/pop_front.hpp,v $
+// $Date: 2004/09/02 15:40:42 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/pop_front_fwd.hpp>
+#include <boost/mpl/aux_/pop_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 pop_front
+ : pop_front_impl< typename sequence_tag<Sequence>::type >
+ ::template apply< Sequence >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,pop_front,(Sequence))
+};
+
+BOOST_MPL_AUX_NA_SPEC(1, pop_front)
+
+}}
+
+#endif // BOOST_MPL_POP_FRONT_HPP_INCLUDED
diff --git a/boost/boost/mpl/pop_front_fwd.hpp b/boost/boost/mpl/pop_front_fwd.hpp
new file mode 100644
index 00000000000..0d0ef38d1a6
--- /dev/null
+++ b/boost/boost/mpl/pop_front_fwd.hpp
@@ -0,0 +1,24 @@
+
+#ifndef BOOST_MPL_POP_FRONT_FWD_HPP_INCLUDED
+#define BOOST_MPL_POP_FRONT_FWD_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/pop_front_fwd.hpp,v $
+// $Date: 2004/09/02 15:40:42 $
+// $Revision: 1.4 $
+
+namespace boost { namespace mpl {
+
+template< typename Tag > struct pop_front_impl;
+template< typename Sequence > struct pop_front;
+
+}}
+
+#endif // BOOST_MPL_POP_FRONT_FWD_HPP_INCLUDED
diff --git a/boost/boost/mpl/print.hpp b/boost/boost/mpl/print.hpp
new file mode 100644
index 00000000000..0dc04f35c65
--- /dev/null
+++ b/boost/boost/mpl/print.hpp
@@ -0,0 +1,74 @@
+
+#ifndef BOOST_MPL_PRINT_HPP_INCLUDED
+#define BOOST_MPL_PRINT_HPP_INCLUDED
+
+// Copyright David Abrahams 2003
+// 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/print.hpp,v $
+// $Date: 2006/11/10 23:15:49 $
+// $Revision: 1.2.14.1 $
+
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/identity.hpp>
+
+namespace boost { namespace mpl {
+
+namespace aux {
+#if defined(BOOST_MSVC)
+# pragma warning(push, 3)
+// we only want one warning from MSVC, so turn off the other one
+# pragma warning(disable: 4307)
+#elif defined(__MWERKS__)
+# pragma warn_hidevirtual on
+ struct print_base { virtual void f() {} };
+#endif
+
+#if defined(__EDG_VERSION__)
+ template <class T>
+ struct dependent_unsigned
+ {
+ static const unsigned value = 1;
+ };
+#endif
+} // namespace aux
+
+
+template <class T>
+struct print
+ : mpl::identity<T>
+#if defined(__MWERKS__)
+ , aux::print_base
+#endif
+{
+#if defined(BOOST_MSVC)
+ enum { n = sizeof(T) + -1 };
+#elif defined(__MWERKS__)
+ void f(int);
+#else
+ enum {
+ n =
+# if defined(__EDG_VERSION__)
+ aux::dependent_unsigned<T>::value > -1
+# else
+ sizeof(T) > -1
+# endif
+ };
+#endif
+};
+
+#if defined(BOOST_MSVC)
+# pragma warning(pop)
+#elif defined(__MWERKS__)
+# pragma warn_hidevirtual reset
+#endif
+
+}}
+
+#endif // BOOST_MPL_PRINT_HPP_INCLUDED
diff --git a/boost/boost/mpl/prior.hpp b/boost/boost/mpl/prior.hpp
new file mode 100644
index 00000000000..376cc275f93
--- /dev/null
+++ b/boost/boost/mpl/prior.hpp
@@ -0,0 +1,19 @@
+
+#ifndef BOOST_MPL_PRIOR_HPP_INCLUDED
+#define BOOST_MPL_PRIOR_HPP_INCLUDED
+
+// 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/prior.hpp,v $
+// $Date: 2004/09/02 15:40:42 $
+// $Revision: 1.7 $
+
+#include <boost/mpl/next_prior.hpp>
+
+#endif // BOOST_MPL_PRIOR_HPP_INCLUDED
diff --git a/boost/boost/mpl/protect.hpp b/boost/boost/mpl/protect.hpp
new file mode 100644
index 00000000000..6a87fea6890
--- /dev/null
+++ b/boost/boost/mpl/protect.hpp
@@ -0,0 +1,55 @@
+
+#ifndef BOOST_MPL_PROTECT_HPP_INCLUDED
+#define BOOST_MPL_PROTECT_HPP_INCLUDED
+
+// Copyright Peter Dimov 2001
+// 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/protect.hpp,v $
+// $Date: 2004/09/07 21:37:24 $
+// $Revision: 1.10 $
+
+#include <boost/mpl/aux_/arity.hpp>
+#include <boost/mpl/aux_/config/dtp.hpp>
+#include <boost/mpl/aux_/nttp_decl.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+
+namespace boost { namespace mpl {
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(T)
+ , int not_le_ = 0
+ >
+struct protect : T
+{
+#if BOOST_WORKAROUND(__EDG_VERSION__, == 238)
+ typedef mpl::protect type;
+#else
+ typedef protect type;
+#endif
+};
+
+#if defined(BOOST_MPL_CFG_BROKEN_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES)
+namespace aux {
+template< BOOST_MPL_AUX_NTTP_DECL(int, N), typename T >
+struct arity< protect<T>, N >
+ : arity<T,N>
+{
+};
+} // namespace aux
+#endif
+
+BOOST_MPL_AUX_NA_SPEC_MAIN(1, protect)
+#if !defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT)
+BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(1, 1, protect)
+#endif
+
+}}
+
+#endif // BOOST_MPL_PROTECT_HPP_INCLUDED
diff --git a/boost/boost/mpl/push_back.hpp b/boost/boost/mpl/push_back.hpp
new file mode 100644
index 00000000000..8b17541205a
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/push_back.hpp,v $
+// $Date: 2004/09/02 15:40:42 $
+// $Revision: 1.4 $
+
+#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/boost/boost/mpl/push_back_fwd.hpp b/boost/boost/mpl/push_back_fwd.hpp
new file mode 100644
index 00000000000..2701ce14060
--- /dev/null
+++ b/boost/boost/mpl/push_back_fwd.hpp
@@ -0,0 +1,24 @@
+
+#ifndef BOOST_MPL_PUSH_BACK_FWD_HPP_INCLUDED
+#define BOOST_MPL_PUSH_BACK_FWD_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/push_back_fwd.hpp,v $
+// $Date: 2004/09/02 15:40:42 $
+// $Revision: 1.4 $
+
+namespace boost { namespace mpl {
+
+template< typename Tag > struct push_back_impl;
+template< typename Sequence, typename T > struct push_back;
+
+}}
+
+#endif // BOOST_MPL_PUSH_BACK_FWD_HPP_INCLUDED
diff --git a/boost/boost/mpl/push_front.hpp b/boost/boost/mpl/push_front.hpp
new file mode 100644
index 00000000000..a9a02f93061
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/push_front.hpp,v $
+// $Date: 2004/09/02 15:40:42 $
+// $Revision: 1.4 $
+
+#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/boost/boost/mpl/push_front_fwd.hpp b/boost/boost/mpl/push_front_fwd.hpp
new file mode 100644
index 00000000000..155480a236c
--- /dev/null
+++ b/boost/boost/mpl/push_front_fwd.hpp
@@ -0,0 +1,24 @@
+
+#ifndef BOOST_MPL_PUSH_FRONT_FWD_HPP_INCLUDED
+#define BOOST_MPL_PUSH_FRONT_FWD_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/push_front_fwd.hpp,v $
+// $Date: 2004/09/02 15:40:42 $
+// $Revision: 1.4 $
+
+namespace boost { namespace mpl {
+
+template< typename Tag > struct push_front_impl;
+template< typename Sequence, typename T > struct push_front;
+
+}}
+
+#endif // BOOST_MPL_PUSH_FRONT_FWD_HPP_INCLUDED
diff --git a/boost/boost/mpl/quote.hpp b/boost/boost/mpl/quote.hpp
new file mode 100644
index 00000000000..37228f5ff24
--- /dev/null
+++ b/boost/boost/mpl/quote.hpp
@@ -0,0 +1,140 @@
+
+#if !defined(BOOST_PP_IS_ITERATING)
+
+///// header body
+
+#ifndef BOOST_MPL_QUOTE_HPP_INCLUDED
+#define BOOST_MPL_QUOTE_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/quote.hpp,v $
+// $Date: 2006/05/03 03:27:58 $
+// $Revision: 1.5.14.2 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/void.hpp>
+# include <boost/mpl/aux_/has_type.hpp>
+#endif
+
+#include <boost/mpl/aux_/config/ttp.hpp>
+
+#if defined(BOOST_MPL_CFG_NO_TEMPLATE_TEMPLATE_PARAMETERS)
+# define BOOST_MPL_CFG_NO_QUOTE_TEMPLATE
+#endif
+
+#if !defined(BOOST_MPL_CFG_NO_IMPLICIT_METAFUNCTIONS) \
+ && defined(BOOST_MPL_CFG_NO_HAS_XXX)
+# define BOOST_MPL_CFG_NO_IMPLICIT_METAFUNCTIONS
+#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 quote.hpp
+# include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#else
+
+# include <boost/mpl/limits/arity.hpp>
+# include <boost/mpl/aux_/preprocessor/params.hpp>
+# include <boost/mpl/aux_/config/ctps.hpp>
+# include <boost/mpl/aux_/config/workaround.hpp>
+
+# include <boost/preprocessor/iterate.hpp>
+# include <boost/preprocessor/cat.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_QUOTE_TEMPLATE)
+
+namespace boost { namespace mpl {
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template< typename T, bool has_type_ >
+struct quote_impl
+// GCC has a problem with metafunction forwarding when T is a
+// specialization of a template called 'type'.
+# if BOOST_WORKAROUND(__GNUC__, BOOST_TESTED_AT(4)) \
+ && BOOST_WORKAROUND(__GNUC_MINOR__, BOOST_TESTED_AT(0)) \
+ && BOOST_WORKAROUND(__GNUC_PATCHLEVEL__, BOOST_TESTED_AT(2))
+{
+ typedef typename T::type type;
+};
+# else
+ : T
+{
+};
+# endif
+
+template< typename T >
+struct quote_impl<T,false>
+{
+ typedef T type;
+};
+
+#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+template< bool > struct quote_impl
+{
+ template< typename T > struct result_
+ : T
+ {
+ };
+};
+
+template<> struct quote_impl<false>
+{
+ template< typename T > struct result_
+ {
+ typedef T type;
+ };
+};
+
+#endif
+
+#define BOOST_PP_ITERATION_PARAMS_1 \
+ (3,(1, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, <boost/mpl/quote.hpp>))
+#include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_QUOTE_TEMPLATE
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#endif // BOOST_MPL_QUOTE_HPP_INCLUDED
+
+///// iteration
+
+#else
+#define i_ BOOST_PP_FRAME_ITERATION(1)
+
+template<
+ template< BOOST_MPL_PP_PARAMS(i_, typename P) > class F
+ , typename Tag = void_
+ >
+struct BOOST_PP_CAT(quote,i_)
+{
+ template< BOOST_MPL_PP_PARAMS(i_, typename U) > struct apply
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+ : quote_impl<
+ F< BOOST_MPL_PP_PARAMS(i_, U) >
+ , aux::has_type< F< BOOST_MPL_PP_PARAMS(i_, U) > >::value
+ >
+#else
+ : quote_impl< aux::has_type< F< BOOST_MPL_PP_PARAMS(i_, U) > >::value >
+ ::template result_< F< BOOST_MPL_PP_PARAMS(i_, U) > >
+#endif
+ {
+ };
+};
+
+#undef i_
+#endif // BOOST_PP_IS_ITERATING
diff --git a/boost/boost/mpl/range_c.hpp b/boost/boost/mpl/range_c.hpp
new file mode 100644
index 00000000000..4a969bdd2aa
--- /dev/null
+++ b/boost/boost/mpl/range_c.hpp
@@ -0,0 +1,48 @@
+
+#ifndef BOOST_MPL_RANGE_C_HPP_INCLUDED
+#define BOOST_MPL_RANGE_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/range_c.hpp,v $
+// $Date: 2004/11/28 01:57:09 $
+// $Revision: 1.5 $
+
+#include <boost/mpl/integral_c.hpp>
+#include <boost/mpl/aux_/range_c/front.hpp>
+#include <boost/mpl/aux_/range_c/back.hpp>
+#include <boost/mpl/aux_/range_c/size.hpp>
+#include <boost/mpl/aux_/range_c/O1_size.hpp>
+#include <boost/mpl/aux_/range_c/empty.hpp>
+#include <boost/mpl/aux_/range_c/iterator.hpp>
+#include <boost/mpl/aux_/range_c/tag.hpp>
+
+namespace boost { namespace mpl {
+
+template<
+ typename T
+ , T Start
+ , T Finish
+ >
+struct range_c
+{
+ typedef aux::half_open_range_tag tag;
+ typedef T value_type;
+ typedef range_c type;
+
+ typedef integral_c<T,Start> start;
+ typedef integral_c<T,Finish> finish;
+
+ typedef r_iter<start> begin;
+ typedef r_iter<finish> end;
+};
+
+}}
+
+#endif // BOOST_MPL_RANGE_C_HPP_INCLUDED
diff --git a/boost/boost/mpl/remove.hpp b/boost/boost/mpl/remove.hpp
new file mode 100644
index 00000000000..2345da1e01d
--- /dev/null
+++ b/boost/boost/mpl/remove.hpp
@@ -0,0 +1,52 @@
+
+#ifndef BOOST_MPL_REMOVE_HPP_INCLUDED
+#define BOOST_MPL_REMOVE_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/remove.hpp,v $
+// $Date: 2004/09/02 15:40:42 $
+// $Revision: 1.5 $
+
+#include <boost/mpl/remove_if.hpp>
+#include <boost/mpl/same_as.hpp>
+#include <boost/mpl/aux_/inserter_algorithm.hpp>
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template<
+ typename Sequence
+ , typename T
+ , typename Inserter
+ >
+struct remove_impl
+ : remove_if_impl< Sequence, same_as<T>, Inserter >
+{
+};
+
+template<
+ typename Sequence
+ , typename T
+ , typename Inserter
+ >
+struct reverse_remove_impl
+ : reverse_remove_if_impl< Sequence, same_as<T>, Inserter >
+{
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(3, remove)
+
+}}
+
+#endif // BOOST_MPL_REMOVE_HPP_INCLUDED
diff --git a/boost/boost/mpl/remove_if.hpp b/boost/boost/mpl/remove_if.hpp
new file mode 100644
index 00000000000..25d0c1c042d
--- /dev/null
+++ b/boost/boost/mpl/remove_if.hpp
@@ -0,0 +1,83 @@
+
+#ifndef BOOST_MPL_REMOVE_IF_HPP_INCLUDED
+#define BOOST_MPL_REMOVE_IF_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/remove_if.hpp,v $
+// $Date: 2004/09/02 15:40:42 $
+// $Revision: 1.7 $
+
+#include <boost/mpl/fold.hpp>
+#include <boost/mpl/reverse_fold.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/protect.hpp>
+#include <boost/mpl/lambda.hpp>
+#include <boost/mpl/apply.hpp>
+#include <boost/mpl/aux_/inserter_algorithm.hpp>
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template< typename Pred, typename InsertOp > struct remove_if_helper
+{
+ template< typename Sequence, typename U > struct apply
+ {
+ typedef typename eval_if<
+ typename apply1<Pred,U>::type
+ , identity<Sequence>
+ , apply2<InsertOp,Sequence,U>
+ >::type type;
+ };
+};
+
+template<
+ typename Sequence
+ , typename Predicate
+ , typename Inserter
+ >
+struct remove_if_impl
+ : fold<
+ Sequence
+ , typename Inserter::state
+ , protect< aux::remove_if_helper<
+ typename lambda<Predicate>::type
+ , typename Inserter::operation
+ > >
+ >
+{
+};
+
+template<
+ typename Sequence
+ , typename Predicate
+ , typename Inserter
+ >
+struct reverse_remove_if_impl
+ : reverse_fold<
+ Sequence
+ , typename Inserter::state
+ , protect< aux::remove_if_helper<
+ typename lambda<Predicate>::type
+ , typename Inserter::operation
+ > >
+ >
+{
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(3, remove_if)
+
+}}
+
+#endif // BOOST_MPL_REMOVE_IF_HPP_INCLUDED
diff --git a/boost/boost/mpl/replace.hpp b/boost/boost/mpl/replace.hpp
new file mode 100644
index 00000000000..50992b06ec8
--- /dev/null
+++ b/boost/boost/mpl/replace.hpp
@@ -0,0 +1,55 @@
+
+#ifndef BOOST_MPL_REPLACE_HPP_INCLUDED
+#define BOOST_MPL_REPLACE_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright John R. Bandela 2000-2002
+// 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/replace.hpp,v $
+// $Date: 2004/11/28 01:57:09 $
+// $Revision: 1.8 $
+
+#include <boost/mpl/replace_if.hpp>
+#include <boost/mpl/same_as.hpp>
+#include <boost/mpl/aux_/inserter_algorithm.hpp>
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template<
+ typename Sequence
+ , typename OldType
+ , typename NewType
+ , typename Inserter
+ >
+struct replace_impl
+ : replace_if_impl< Sequence, same_as<OldType>, NewType, Inserter >
+{
+};
+
+template<
+ typename Sequence
+ , typename OldType
+ , typename NewType
+ , typename Inserter
+ >
+struct reverse_replace_impl
+ : reverse_replace_if_impl< Sequence, same_as<OldType>, NewType, Inserter >
+{
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(4, replace)
+
+}}
+
+#endif // BOOST_MPL_REPLACE_HPP_INCLUDED
diff --git a/boost/boost/mpl/replace_if.hpp b/boost/boost/mpl/replace_if.hpp
new file mode 100644
index 00000000000..a5a5668c66a
--- /dev/null
+++ b/boost/boost/mpl/replace_if.hpp
@@ -0,0 +1,88 @@
+
+#ifndef BOOST_MPL_REPLACE_IF_HPP_INCLUDED
+#define BOOST_MPL_REPLACE_IF_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright John R. Bandela 2000-2002
+// 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/replace_if.hpp,v $
+// $Date: 2004/11/28 01:57:09 $
+// $Revision: 1.7 $
+
+#include <boost/mpl/transform.hpp>
+#include <boost/mpl/apply.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/aux_/inserter_algorithm.hpp>
+#include <boost/mpl/aux_/config/forwarding.hpp>
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template< typename Predicate, typename T >
+struct replace_if_op
+{
+ template< typename U > struct apply
+#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)
+ : if_<
+ typename apply1<Predicate,U>::type
+ , T
+ , U
+ >
+ {
+#else
+ {
+ typedef typename if_<
+ typename apply1<Predicate,U>::type
+ , T
+ , U
+ >::type type;
+#endif
+ };
+};
+
+
+template<
+ typename Sequence
+ , typename Predicate
+ , typename T
+ , typename Inserter
+ >
+struct replace_if_impl
+ : transform1_impl<
+ Sequence
+ , protect< aux::replace_if_op<Predicate,T> >
+ , Inserter
+ >
+{
+};
+
+template<
+ typename Sequence
+ , typename Predicate
+ , typename T
+ , typename Inserter
+ >
+struct reverse_replace_if_impl
+ : reverse_transform1_impl<
+ Sequence
+ , protect< aux::replace_if_op<Predicate,T> >
+ , Inserter
+ >
+{
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(4, replace_if)
+
+}}
+
+#endif // BOOST_MPL_REPLACE_IF_HPP_INCLUDED
diff --git a/boost/boost/mpl/reverse.hpp b/boost/boost/mpl/reverse.hpp
new file mode 100644
index 00000000000..83fee4e1698
--- /dev/null
+++ b/boost/boost/mpl/reverse.hpp
@@ -0,0 +1,38 @@
+
+#ifndef BOOST_MPL_REVERSE_HPP_INCLUDED
+#define BOOST_MPL_REVERSE_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/reverse.hpp,v $
+// $Date: 2004/09/02 15:40:42 $
+// $Revision: 1.5 $
+
+#include <boost/mpl/copy.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(Inserter)
+ >
+struct reverse
+ : reverse_copy<
+ Sequence
+ , Inserter
+ >
+{
+};
+
+BOOST_MPL_AUX_NA_SPEC(1, reverse)
+
+}}
+
+#endif // BOOST_MPL_REVERSE_HPP_INCLUDED
diff --git a/boost/boost/mpl/reverse_fold.hpp b/boost/boost/mpl/reverse_fold.hpp
new file mode 100644
index 00000000000..12259038fb6
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/reverse_fold.hpp,v $
+// $Date: 2004/09/02 15:40:42 $
+// $Revision: 1.2 $
+
+#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/boost/boost/mpl/reverse_iter_fold.hpp b/boost/boost/mpl/reverse_iter_fold.hpp
new file mode 100644
index 00000000000..3aa7f2881da
--- /dev/null
+++ b/boost/boost/mpl/reverse_iter_fold.hpp
@@ -0,0 +1,56 @@
+
+#ifndef BOOST_MPL_ITER_FOLD_BACKWARD_HPP_INCLUDED
+#define BOOST_MPL_ITER_FOLD_BACKWARD_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2001-2004
+// Copyright Dave 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/reverse_iter_fold.hpp,v $
+// $Date: 2004/09/02 15:40:42 $
+// $Revision: 1.2 $
+
+#include <boost/mpl/begin_end.hpp>
+#include <boost/mpl/O1_size.hpp>
+#include <boost/mpl/arg.hpp>
+#include <boost/mpl/lambda.hpp>
+#include <boost/mpl/aux_/reverse_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(BackwardOp)
+ , typename ForwardOp = arg<1>
+ >
+struct reverse_iter_fold
+{
+ typedef typename aux::reverse_iter_fold_impl<
+ ::boost::mpl::O1_size<Sequence>::value
+ , typename begin<Sequence>::type
+ , typename end<Sequence>::type
+ , State
+ , typename lambda<BackwardOp>::type
+ , typename lambda<ForwardOp>::type
+ >::state type;
+
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 4
+ , reverse_iter_fold
+ , (Sequence,State,BackwardOp,ForwardOp)
+ )
+};
+
+BOOST_MPL_AUX_NA_SPEC(3, reverse_iter_fold)
+
+}}
+
+#endif // BOOST_MPL_ITER_FOLD_BACKWARD_HPP_INCLUDED
diff --git a/boost/boost/mpl/same_as.hpp b/boost/boost/mpl/same_as.hpp
new file mode 100644
index 00000000000..28f882cb063
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/same_as.hpp,v $
+// $Date: 2004/09/02 15:40:42 $
+// $Revision: 1.6 $
+
+#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/boost/boost/mpl/sequence_tag.hpp b/boost/boost/mpl/sequence_tag.hpp
new file mode 100644
index 00000000000..f4e891304d0
--- /dev/null
+++ b/boost/boost/mpl/sequence_tag.hpp
@@ -0,0 +1,124 @@
+
+#ifndef BOOST_MPL_SEQUENCE_TAG_HPP_INCLUDED
+#define BOOST_MPL_SEQUENCE_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/sequence_tag.hpp,v $
+// $Date: 2004/09/02 15:40:42 $
+// $Revision: 1.8 $
+
+#include <boost/mpl/sequence_tag_fwd.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_/is_msvc_eti_arg.hpp>
+#include <boost/mpl/aux_/config/eti.hpp>
+#include <boost/mpl/aux_/yes_no.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+namespace boost { namespace mpl {
+
+// agurt, 27/nov/02: have to use a simplistic 'sequence_tag' implementation
+// on MSVC to avoid dreadful "internal structure overflow" error
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) \
+ || defined(BOOST_MPL_CFG_NO_HAS_XXX)
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+ >
+struct sequence_tag
+{
+ typedef typename Sequence::tag type;
+};
+
+#elif BOOST_WORKAROUND(BOOST_MSVC, == 1300)
+
+// agurt, 07/feb/03: workaround for what seems to be MSVC 7.0-specific ETI issue
+
+namespace aux {
+
+template< bool >
+struct sequence_tag_impl
+{
+ template< typename Sequence > struct result_
+ {
+ typedef typename Sequence::tag type;
+ };
+};
+
+template<>
+struct sequence_tag_impl<false>
+{
+ template< typename Sequence > struct result_
+ {
+ typedef int type;
+ };
+};
+
+} // namespace aux
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+ >
+struct sequence_tag
+ : aux::sequence_tag_impl< !aux::is_msvc_eti_arg<Sequence>::value >
+ ::template result_<Sequence>
+{
+};
+
+#else
+
+namespace aux {
+
+template< bool has_tag_, bool has_begin_ >
+struct sequence_tag_impl
+{
+ // agurt 24/nov/02: MSVC 6.5 gets confused in 'sequence_tag_impl<true>'
+ // specialization below, if we name it 'result_' here
+ template< typename Sequence > struct result2_;
+};
+
+# define AUX_CLASS_SEQUENCE_TAG_SPEC(has_tag, has_begin, result_type) \
+template<> struct sequence_tag_impl<has_tag,has_begin> \
+{ \
+ template< typename Sequence > struct result2_ \
+ { \
+ typedef result_type type; \
+ }; \
+}; \
+/**/
+
+AUX_CLASS_SEQUENCE_TAG_SPEC(true, true, typename Sequence::tag)
+AUX_CLASS_SEQUENCE_TAG_SPEC(true, false, typename Sequence::tag)
+AUX_CLASS_SEQUENCE_TAG_SPEC(false, true, nested_begin_end_tag)
+AUX_CLASS_SEQUENCE_TAG_SPEC(false, false, non_sequence_tag)
+
+# undef AUX_CLASS_SEQUENCE_TAG_SPEC
+
+} // namespace aux
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+ >
+struct sequence_tag
+ : aux::sequence_tag_impl<
+ ::boost::mpl::aux::has_tag<Sequence>::value
+ , ::boost::mpl::aux::has_begin<Sequence>::value
+ >::template result2_<Sequence>
+{
+};
+
+#endif // BOOST_MSVC
+
+BOOST_MPL_AUX_NA_SPEC(1, sequence_tag)
+
+}}
+
+#endif // BOOST_MPL_SEQUENCE_TAG_HPP_INCLUDED
diff --git a/boost/boost/mpl/sequence_tag_fwd.hpp b/boost/boost/mpl/sequence_tag_fwd.hpp
new file mode 100644
index 00000000000..a9dd7776e32
--- /dev/null
+++ b/boost/boost/mpl/sequence_tag_fwd.hpp
@@ -0,0 +1,26 @@
+
+#ifndef BOOST_MPL_SEQUENCE_TAG_FWD_HPP_INCLUDED
+#define BOOST_MPL_SEQUENCE_TAG_FWD_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/sequence_tag_fwd.hpp,v $
+// $Date: 2004/09/02 15:40:42 $
+// $Revision: 1.3 $
+
+namespace boost { namespace mpl {
+
+struct nested_begin_end_tag;
+struct non_sequence_tag;
+
+template< typename Sequence > struct sequence_tag;
+
+}}
+
+#endif // BOOST_MPL_SEQUENCE_TAG_FWD_HPP_INCLUDED
diff --git a/boost/boost/mpl/set.hpp b/boost/boost/mpl/set.hpp
new file mode 100644
index 00000000000..61749a261fc
--- /dev/null
+++ b/boost/boost/mpl/set.hpp
@@ -0,0 +1,57 @@
+
+#ifndef BOOST_MPL_SET_HPP_INCLUDED
+#define BOOST_MPL_SET_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/set.hpp,v $
+// $Date: 2004/09/02 15:40:42 $
+// $Revision: 1.2 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/limits/set.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_SET_HEADER \
+ BOOST_PP_CAT(set, BOOST_MPL_LIMIT_SET_SIZE).hpp \
+ /**/
+#else
+# define AUX778076_SET_HEADER \
+ BOOST_PP_CAT(set, BOOST_MPL_LIMIT_SET_SIZE)##.hpp \
+ /**/
+#endif
+
+# include BOOST_PP_STRINGIZE(boost/mpl/set/AUX778076_SET_HEADER)
+# undef AUX778076_SET_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 set.hpp
+# include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#else
+
+# include <boost/mpl/limits/set.hpp>
+
+# define AUX778076_SEQUENCE_NAME set
+# define AUX778076_SEQUENCE_LIMIT BOOST_MPL_LIMIT_SET_SIZE
+# include <boost/mpl/aux_/sequence_wrapper.hpp>
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#endif // BOOST_MPL_SET_HPP_INCLUDED
diff --git a/boost/boost/mpl/set/aux_/at_impl.hpp b/boost/boost/mpl/set/aux_/at_impl.hpp
new file mode 100644
index 00000000000..d5120d44c16
--- /dev/null
+++ b/boost/boost/mpl/set/aux_/at_impl.hpp
@@ -0,0 +1,40 @@
+
+#ifndef BOOST_MPL_SET_AUX_AT_IMPL_HPP_INCLUDED
+#define BOOST_MPL_SET_AUX_AT_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/set/aux_/at_impl.hpp,v $
+// $Date: 2004/09/02 15:41:02 $
+// $Revision: 1.2 $
+
+#include <boost/mpl/at_fwd.hpp>
+#include <boost/mpl/set/aux_/has_key_impl.hpp>
+#include <boost/mpl/set/aux_/tag.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/void.hpp>
+
+namespace boost { namespace mpl {
+
+template<>
+struct at_impl< aux::set_tag >
+{
+ template< typename Set, typename T > struct apply
+ {
+ typedef typename if_<
+ has_key_impl<aux::set_tag>::apply<Set,T>
+ , T
+ , void_
+ >::type type;
+ };
+};
+
+}}
+
+#endif // BOOST_MPL_SET_AUX_AT_IMPL_HPP_INCLUDED
diff --git a/boost/boost/mpl/set/aux_/begin_end_impl.hpp b/boost/boost/mpl/set/aux_/begin_end_impl.hpp
new file mode 100644
index 00000000000..e9647a4e4fe
--- /dev/null
+++ b/boost/boost/mpl/set/aux_/begin_end_impl.hpp
@@ -0,0 +1,43 @@
+
+#ifndef BOOST_MPL_SET_AUX_BEGIN_END_IMPL_HPP_INCLUDED
+#define BOOST_MPL_SET_AUX_BEGIN_END_IMPL_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/set/aux_/begin_end_impl.hpp,v $
+// $Date: 2004/09/02 15:41:02 $
+// $Revision: 1.3 $
+
+#include <boost/mpl/begin_end_fwd.hpp>
+#include <boost/mpl/set/aux_/iterator.hpp>
+
+namespace boost { namespace mpl {
+
+template<>
+struct begin_impl< aux::set_tag >
+{
+ template< typename Set > struct apply
+ {
+ typedef s_iter<Set,Set> type;
+ };
+};
+
+template<>
+struct end_impl< aux::set_tag >
+{
+ template< typename Set > struct apply
+ {
+ typedef s_iter< Set,set0<> > type;
+ };
+};
+
+}}
+
+#endif // BOOST_MPL_SET_AUX_BEGIN_END_IMPL_HPP_INCLUDED
diff --git a/boost/boost/mpl/set/aux_/clear_impl.hpp b/boost/boost/mpl/set/aux_/clear_impl.hpp
new file mode 100644
index 00000000000..20fd4fe41a0
--- /dev/null
+++ b/boost/boost/mpl/set/aux_/clear_impl.hpp
@@ -0,0 +1,35 @@
+
+#ifndef BOOST_MPL_SET_AUX_CLEAR_IMPL_HPP_INCLUDED
+#define BOOST_MPL_SET_AUX_CLEAR_IMPL_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/set/aux_/clear_impl.hpp,v $
+// $Date: 2004/09/02 15:41:02 $
+// $Revision: 1.2 $
+
+#include <boost/mpl/clear_fwd.hpp>
+#include <boost/mpl/set/aux_/set0.hpp>
+#include <boost/mpl/set/aux_/tag.hpp>
+
+namespace boost { namespace mpl {
+
+template<>
+struct clear_impl< aux::set_tag >
+{
+ template< typename Set > struct apply
+ {
+ typedef set0<> type;
+ };
+};
+
+}}
+
+#endif // BOOST_MPL_SET_AUX_CLEAR_IMPL_HPP_INCLUDED
diff --git a/boost/boost/mpl/set/aux_/empty_impl.hpp b/boost/boost/mpl/set/aux_/empty_impl.hpp
new file mode 100644
index 00000000000..622390b4930
--- /dev/null
+++ b/boost/boost/mpl/set/aux_/empty_impl.hpp
@@ -0,0 +1,34 @@
+
+#ifndef BOOST_MPL_SET_AUX_EMPTY_IMPL_HPP_INCLUDED
+#define BOOST_MPL_SET_AUX_EMPTY_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/set/aux_/empty_impl.hpp,v $
+// $Date: 2004/09/02 15:41:02 $
+// $Revision: 1.2 $
+
+#include <boost/mpl/empty_fwd.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/set/aux_/tag.hpp>
+
+namespace boost { namespace mpl {
+
+template<>
+struct empty_impl< aux::set_tag >
+{
+ template< typename Set > struct apply
+ : not_< typename Set::size >
+ {
+ };
+};
+
+}}
+
+#endif // BOOST_MPL_SET_AUX_EMPTY_IMPL_HPP_INCLUDED
diff --git a/boost/boost/mpl/set/aux_/erase_impl.hpp b/boost/boost/mpl/set/aux_/erase_impl.hpp
new file mode 100644
index 00000000000..d74c41a5a3e
--- /dev/null
+++ b/boost/boost/mpl/set/aux_/erase_impl.hpp
@@ -0,0 +1,41 @@
+
+#ifndef BOOST_MPL_SET_AUX_ERASE_IMPL_HPP_INCLUDED
+#define BOOST_MPL_SET_AUX_ERASE_IMPL_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/set/aux_/erase_impl.hpp,v $
+// $Date: 2004/09/02 15:41:02 $
+// $Revision: 1.2 $
+
+#include <boost/mpl/erase_fwd.hpp>
+#include <boost/mpl/set/aux_/erase_key_impl.hpp>
+#include <boost/mpl/set/aux_/tag.hpp>
+
+namespace boost { namespace mpl {
+
+template<>
+struct erase_impl< aux::set_tag >
+{
+ template<
+ typename Set
+ , typename Pos
+ , typename unused_
+ >
+ struct apply
+ : erase_key_impl<aux::set_tag>
+ ::apply<Set,typename Pos::type>
+ {
+ };
+};
+
+}}
+
+#endif // BOOST_MPL_SET_AUX_ERASE_IMPL_HPP_INCLUDED
diff --git a/boost/boost/mpl/set/aux_/erase_key_impl.hpp b/boost/boost/mpl/set/aux_/erase_key_impl.hpp
new file mode 100644
index 00000000000..fd448bb0745
--- /dev/null
+++ b/boost/boost/mpl/set/aux_/erase_key_impl.hpp
@@ -0,0 +1,53 @@
+
+#ifndef BOOST_MPL_SET_AUX_ERASE_KEY_IMPL_HPP_INCLUDED
+#define BOOST_MPL_SET_AUX_ERASE_KEY_IMPL_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/set/aux_/erase_key_impl.hpp,v $
+// $Date: 2004/09/02 15:41:02 $
+// $Revision: 1.2 $
+
+#include <boost/mpl/erase_key_fwd.hpp>
+#include <boost/mpl/set/aux_/has_key_impl.hpp>
+#include <boost/mpl/set/aux_/item.hpp>
+#include <boost/mpl/set/aux_/tag.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/base.hpp>
+#include <boost/mpl/eval_if.hpp>
+
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace mpl {
+
+template<>
+struct erase_key_impl< aux::set_tag >
+{
+ template<
+ typename Set
+ , typename T
+ >
+ struct apply
+ : eval_if<
+ has_key_impl<aux::set_tag>::apply<Set,T>
+ , eval_if<
+ is_same< T,typename Set::item_type_ >
+ , base<Set>
+ , identity< s_mask<T,Set> >
+ >
+ , identity<Set>
+ >
+ {
+ };
+};
+
+}}
+
+#endif // BOOST_MPL_SET_AUX_ERASE_KEY_IMPL_HPP_INCLUDED
diff --git a/boost/boost/mpl/set/aux_/has_key_impl.hpp b/boost/boost/mpl/set/aux_/has_key_impl.hpp
new file mode 100644
index 00000000000..55aaa25cd32
--- /dev/null
+++ b/boost/boost/mpl/set/aux_/has_key_impl.hpp
@@ -0,0 +1,60 @@
+
+#ifndef BOOST_MPL_SET_AUX_HAS_KEY_IMPL_HPP_INCLUDED
+#define BOOST_MPL_SET_AUX_HAS_KEY_IMPL_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/set/aux_/has_key_impl.hpp,v $
+// $Date: 2004/10/13 18:23:37 $
+// $Revision: 1.7 $
+
+#include <boost/mpl/set/aux_/tag.hpp>
+#include <boost/mpl/has_key_fwd.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/aux_/overload_names.hpp>
+#include <boost/mpl/aux_/static_cast.hpp>
+#include <boost/mpl/aux_/yes_no.hpp>
+#include <boost/mpl/aux_/type_wrapper.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+#include <boost/mpl/aux_/config/static_constant.hpp>
+
+namespace boost { namespace mpl {
+
+template<>
+struct has_key_impl< aux::set_tag >
+{
+ template< typename Set, typename T > struct apply
+#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) \
+ || BOOST_WORKAROUND(__EDG_VERSION__, <= 245)
+ {
+ BOOST_STATIC_CONSTANT(bool, value =
+ ( sizeof( BOOST_MPL_AUX_OVERLOAD_CALL_IS_MASKED(
+ Set
+ , BOOST_MPL_AUX_STATIC_CAST(aux::type_wrapper<T>*, 0)
+ ) ) == sizeof(aux::no_tag) )
+ );
+
+ typedef bool_<value> type;
+
+#else // ISO98 C++
+ : bool_<
+ ( sizeof( BOOST_MPL_AUX_OVERLOAD_CALL_IS_MASKED(
+ Set
+ , BOOST_MPL_AUX_STATIC_CAST(aux::type_wrapper<T>*, 0)
+ ) ) == sizeof(aux::no_tag) )
+ >
+ {
+#endif
+ };
+};
+
+}}
+
+#endif // BOOST_MPL_SET_AUX_HAS_KEY_IMPL_HPP_INCLUDED
diff --git a/boost/boost/mpl/set/aux_/include_preprocessed.hpp b/boost/boost/mpl/set/aux_/include_preprocessed.hpp
new file mode 100644
index 00000000000..b72525d003d
--- /dev/null
+++ b/boost/boost/mpl/set/aux_/include_preprocessed.hpp
@@ -0,0 +1,42 @@
+
+// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION
+
+// 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/set/aux_/include_preprocessed.hpp,v $
+// $Date: 2006/11/09 01:44:00 $
+// $Revision: 1.2.14.1 $
+
+#include <boost/mpl/aux_/config/preprocessor.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/stringize.hpp>
+
+#if !defined(BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING)
+# define AUX778076_HEADER \
+ plain/BOOST_MPL_PREPROCESSED_HEADER \
+/**/
+#else
+# define AUX778076_HEADER \
+ BOOST_PP_CAT(plain,/)##BOOST_MPL_PREPROCESSED_HEADER \
+/**/
+#endif
+
+#if BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(700))
+# define AUX778076_INCLUDE_STRING BOOST_PP_STRINGIZE(boost/mpl/set/aux_/preprocessed/AUX778076_HEADER)
+# include AUX778076_INCLUDE_STRING
+# undef AUX778076_INCLUDE_STRING
+#else
+# include BOOST_PP_STRINGIZE(boost/mpl/set/aux_/preprocessed/AUX778076_HEADER)
+#endif
+
+# undef AUX778076_HEADER
+
+#undef BOOST_MPL_PREPROCESSED_HEADER
diff --git a/boost/boost/mpl/set/aux_/insert_impl.hpp b/boost/boost/mpl/set/aux_/insert_impl.hpp
new file mode 100644
index 00000000000..64ac3172731
--- /dev/null
+++ b/boost/boost/mpl/set/aux_/insert_impl.hpp
@@ -0,0 +1,65 @@
+
+#ifndef BOOST_MPL_SET_AUX_INSERT_IMPL_HPP_INCLUDED
+#define BOOST_MPL_SET_AUX_INSERT_IMPL_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/set/aux_/insert_impl.hpp,v $
+// $Date: 2004/09/05 09:42:59 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/insert_fwd.hpp>
+#include <boost/mpl/set/aux_/has_key_impl.hpp>
+#include <boost/mpl/set/aux_/item.hpp>
+#include <boost/mpl/set/aux_/tag.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/base.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/aux_/na.hpp>
+
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< typename Set, typename T > struct set_insert_impl
+ : eval_if<
+ has_key_impl<aux::set_tag>::apply<Set,T>
+ , identity<Set>
+ , eval_if<
+ is_same< T,typename Set::last_masked_ >
+ , base<Set>
+ , identity< s_item<T,Set> >
+ >
+ >
+{
+};
+}
+
+template<>
+struct insert_impl< aux::set_tag >
+{
+ template<
+ typename Set
+ , typename PosOrKey
+ , typename KeyOrNA
+ >
+ struct apply
+ : aux::set_insert_impl<
+ Set
+ , typename if_na<KeyOrNA,PosOrKey>::type
+ >
+ {
+ };
+};
+
+}}
+
+#endif // BOOST_MPL_SET_AUX_INSERT_IMPL_HPP_INCLUDED
diff --git a/boost/boost/mpl/set/aux_/item.hpp b/boost/boost/mpl/set/aux_/item.hpp
new file mode 100644
index 00000000000..5a66be40168
--- /dev/null
+++ b/boost/boost/mpl/set/aux_/item.hpp
@@ -0,0 +1,82 @@
+
+#ifndef BOOST_MPL_SET_AUX_ITEM_HPP_INCLUDED
+#define BOOST_MPL_SET_AUX_ITEM_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/set/aux_/item.hpp,v $
+// $Date: 2005/06/18 22:03:09 $
+// $Revision: 1.7 $
+
+#include <boost/mpl/long.hpp>
+#include <boost/mpl/void.hpp>
+#include <boost/mpl/next.hpp>
+#include <boost/mpl/prior.hpp>
+#include <boost/mpl/set/aux_/set0.hpp>
+#include <boost/mpl/aux_/type_wrapper.hpp>
+#include <boost/mpl/aux_/config/arrays.hpp>
+
+namespace boost { namespace mpl {
+
+template< typename T, typename Base >
+struct s_item
+ : Base
+{
+ typedef s_item<T,Base> item_;
+ typedef void_ last_masked_;
+ typedef Base next_;
+ typedef T item_type_;
+ typedef item_type_ type;
+ typedef Base base;
+
+ typedef typename next< typename Base::size >::type size;
+ typedef typename next< typename Base::order >::type order;
+
+#if defined(BOOST_MPL_CFG_NO_DEPENDENT_ARRAY_TYPES)
+ typedef typename aux::weighted_tag<BOOST_MPL_AUX_MSVC_VALUE_WKND(order)::value>::type order_tag_;
+#else
+ typedef char (&order_tag_)[BOOST_MPL_AUX_MSVC_VALUE_WKND(order)::value];
+#endif
+
+ BOOST_MPL_AUX_SET_OVERLOAD( order_tag_, ORDER_BY_KEY, s_item, aux::type_wrapper<T>* );
+ BOOST_MPL_AUX_SET_OVERLOAD( aux::no_tag, IS_MASKED, s_item, aux::type_wrapper<T>* );
+};
+
+
+template< typename T, typename Base >
+struct s_mask
+ : Base
+{
+ typedef s_mask<T,Base> item_;
+ typedef T last_masked_;
+ typedef void_ item_type_;
+ typedef Base base;
+ typedef typename prior< typename Base::size >::type size;
+
+ BOOST_MPL_AUX_SET_OVERLOAD( aux::yes_tag, IS_MASKED, s_mask, aux::type_wrapper<T>* );
+};
+
+
+template< typename T, typename Base >
+struct s_unmask
+ : Base
+{
+ typedef s_unmask<T,Base> item_;
+ typedef void_ last_masked_;
+ typedef T item_type_;
+ typedef Base base;
+ typedef typename next< typename Base::size >::type size;
+
+ BOOST_MPL_AUX_SET_OVERLOAD( aux::no_tag, IS_MASKED, s_unmask, aux::type_wrapper<T>* );
+};
+
+}}
+
+#endif // BOOST_MPL_SET_AUX_ITEM_HPP_INCLUDED
diff --git a/boost/boost/mpl/set/aux_/iterator.hpp b/boost/boost/mpl/set/aux_/iterator.hpp
new file mode 100644
index 00000000000..cb1c9482ce0
--- /dev/null
+++ b/boost/boost/mpl/set/aux_/iterator.hpp
@@ -0,0 +1,97 @@
+
+#ifndef BOOST_MPL_SET_AUX_ITERATOR_HPP_INCLUDED
+#define BOOST_MPL_SET_AUX_ITERATOR_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/set/aux_/iterator.hpp,v $
+// $Date: 2005/06/18 22:03:09 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/set/aux_/set0.hpp>
+#include <boost/mpl/has_key.hpp>
+#include <boost/mpl/iterator_tags.hpp>
+#include <boost/mpl/next.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+
+namespace boost { namespace mpl {
+
+// used by 's_iter_impl'
+template< typename Set, typename Tail > struct s_iter;
+
+template< typename Set, typename Tail > struct s_iter_impl
+{
+ typedef Tail tail_;
+ typedef forward_iterator_tag category;
+ typedef typename Tail::item_::type type;
+
+#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+ typedef typename eval_if<
+ has_key< Set,typename Tail::next_::type >
+ , identity< s_iter<Set,typename Tail::next_> >
+ , next< s_iter<Set,typename Tail::next_> >
+ >::type next;
+#endif
+};
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template< typename Set, typename Tail >
+struct next< s_iter<Set,Tail> >
+ : eval_if<
+ has_key< Set,typename Tail::next_::type >
+ , identity< s_iter<Set,typename Tail::next_> >
+ , next< s_iter<Set,typename Tail::next_> >
+ >
+{
+};
+
+template< typename Set >
+struct next< s_iter<Set,set0<> > >
+{
+ typedef s_iter<Set,set0<> > type;
+};
+
+template< typename Set, typename Tail > struct s_iter
+ : s_iter_impl<Set,Tail>
+{
+};
+
+template< typename Set > struct s_iter<Set, set0<> >
+{
+ typedef forward_iterator_tag category;
+};
+
+#else
+
+template< typename Set >
+struct s_end_iter
+{
+ typedef forward_iterator_tag category;
+ typedef s_iter<Set,set0<> > next;
+};
+
+template< typename Set, typename Tail > struct s_iter
+ : if_<
+ is_same< Tail,set0<> >
+ , s_end_iter<Set>
+ , s_iter_impl<Set,Tail>
+ >::type
+{
+};
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+}}
+
+#endif // BOOST_MPL_SET_AUX_ITERATOR_HPP_INCLUDED
diff --git a/boost/boost/mpl/set/aux_/key_type_impl.hpp b/boost/boost/mpl/set/aux_/key_type_impl.hpp
new file mode 100644
index 00000000000..2810169bc7a
--- /dev/null
+++ b/boost/boost/mpl/set/aux_/key_type_impl.hpp
@@ -0,0 +1,34 @@
+
+#ifndef BOOST_MPL_SET_AUX_KEY_TYPE_IMPL_HPP_INCLUDED
+#define BOOST_MPL_SET_AUX_KEY_TYPE_IMPL_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/set/aux_/key_type_impl.hpp,v $
+// $Date: 2004/09/02 15:41:02 $
+// $Revision: 1.2 $
+
+#include <boost/mpl/key_type_fwd.hpp>
+#include <boost/mpl/set/aux_/tag.hpp>
+
+namespace boost { namespace mpl {
+
+template<>
+struct key_type_impl< aux::set_tag >
+{
+ template< typename Set, typename T > struct apply
+ {
+ typedef T type;
+ };
+};
+
+}}
+
+#endif // BOOST_MPL_SET_AUX_KEY_TYPE_IMPL_HPP_INCLUDED
diff --git a/boost/boost/mpl/set/aux_/numbered.hpp b/boost/boost/mpl/set/aux_/numbered.hpp
new file mode 100644
index 00000000000..45b158d41e3
--- /dev/null
+++ b/boost/boost/mpl/set/aux_/numbered.hpp
@@ -0,0 +1,48 @@
+
+// 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/set/aux_/numbered.hpp,v $
+// $Date: 2005/06/18 22:03:09 $
+// $Revision: 1.4 $
+
+#include <boost/preprocessor/enum_params.hpp>
+#include <boost/preprocessor/dec.hpp>
+#include <boost/preprocessor/cat.hpp>
+
+#define i_ BOOST_PP_FRAME_ITERATION(1)
+
+# define AUX778076_SET_TAIL(set, i_, T) \
+ typename BOOST_PP_CAT(set,i_)< \
+ BOOST_PP_ENUM_PARAMS(i_, T) \
+ >::item_ \
+ /**/
+
+#if i_ > 0
+template<
+ BOOST_PP_ENUM_PARAMS(i_, typename T)
+ >
+struct BOOST_PP_CAT(set,i_)
+ : s_item<
+ BOOST_PP_CAT(T,BOOST_PP_DEC(i_))
+ , AUX778076_SET_TAIL(set,BOOST_PP_DEC(i_),T)
+ >
+{
+ typedef BOOST_PP_CAT(set,i_) type;
+};
+#endif
+
+# undef AUX778076_SET_TAIL
+
+#undef i_
+
+#endif // BOOST_PP_IS_ITERATING
diff --git a/boost/boost/mpl/set/aux_/numbered_c.hpp b/boost/boost/mpl/set/aux_/numbered_c.hpp
new file mode 100644
index 00000000000..4bf85d1f5ae
--- /dev/null
+++ b/boost/boost/mpl/set/aux_/numbered_c.hpp
@@ -0,0 +1,48 @@
+
+// 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/set/aux_/numbered_c.hpp,v $
+// $Date: 2004/11/28 01:50:43 $
+// $Revision: 1.2 $
+
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_trailing_params.hpp>
+#include <boost/preprocessor/dec.hpp>
+#include <boost/preprocessor/cat.hpp>
+
+#define i_ BOOST_PP_FRAME_ITERATION(1)
+
+# define AUX778076_SET_C_TAIL(set, i_, T, C) \
+ BOOST_PP_CAT(BOOST_PP_CAT(set,i_),_c)< \
+ T BOOST_PP_ENUM_TRAILING_PARAMS(i_, C) \
+ > \
+ /**/
+
+template<
+ typename T
+ , BOOST_PP_ENUM_PARAMS(i_, T C)
+ >
+struct BOOST_PP_CAT(BOOST_PP_CAT(set,i_),_c)
+ : s_item<
+ integral_c<T,BOOST_PP_CAT(C,BOOST_PP_DEC(i_))>
+ , AUX778076_SET_C_TAIL(set,BOOST_PP_DEC(i_), T, C)
+ >
+{
+ typedef BOOST_PP_CAT(BOOST_PP_CAT(set,i_),_c) type;
+};
+
+# undef AUX778076_SET_C_TAIL
+
+#undef i_
+
+#endif // BOOST_PP_IS_ITERATING
diff --git a/boost/boost/mpl/set/aux_/preprocessed/plain/set10.hpp b/boost/boost/mpl/set/aux_/preprocessed/plain/set10.hpp
new file mode 100644
index 00000000000..2c42b383981
--- /dev/null
+++ b/boost/boost/mpl/set/aux_/preprocessed/plain/set10.hpp
@@ -0,0 +1,140 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/set/set10.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T0
+ >
+struct set1
+ : s_item<
+ T0
+ , typename set0< >::item_
+ >
+{
+ typedef set1 type;
+};
+
+template<
+ typename T0, typename T1
+ >
+struct set2
+ : s_item<
+ T1
+ , typename set1<T0>::item_
+ >
+{
+ typedef set2 type;
+};
+
+template<
+ typename T0, typename T1, typename T2
+ >
+struct set3
+ : s_item<
+ T2
+ , typename set2< T0,T1 >::item_
+ >
+{
+ typedef set3 type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3
+ >
+struct set4
+ : s_item<
+ T3
+ , typename set3< T0,T1,T2 >::item_
+ >
+{
+ typedef set4 type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ >
+struct set5
+ : s_item<
+ T4
+ , typename set4< T0,T1,T2,T3 >::item_
+ >
+{
+ typedef set5 type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct set6
+ : s_item<
+ T5
+ , typename set5< T0,T1,T2,T3,T4 >::item_
+ >
+{
+ typedef set6 type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6
+ >
+struct set7
+ : s_item<
+ T6
+ , typename set6< T0,T1,T2,T3,T4,T5 >::item_
+ >
+{
+ typedef set7 type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7
+ >
+struct set8
+ : s_item<
+ T7
+ , typename set7< T0,T1,T2,T3,T4,T5,T6 >::item_
+ >
+{
+ typedef set8 type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8
+ >
+struct set9
+ : s_item<
+ T8
+ , typename set8< T0,T1,T2,T3,T4,T5,T6,T7 >::item_
+ >
+{
+ typedef set9 type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ >
+struct set10
+ : s_item<
+ T9
+ , typename set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::item_
+ >
+{
+ typedef set10 type;
+};
+
+}}
diff --git a/boost/boost/mpl/set/aux_/preprocessed/plain/set10_c.hpp b/boost/boost/mpl/set/aux_/preprocessed/plain/set10_c.hpp
new file mode 100644
index 00000000000..e9bdb29eb82
--- /dev/null
+++ b/boost/boost/mpl/set/aux_/preprocessed/plain/set10_c.hpp
@@ -0,0 +1,145 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/set/set10_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T
+ , T C0
+ >
+struct set1_c
+ : s_item<
+ integral_c< T,C0 >
+ , set0_c<T>
+ >
+{
+ typedef set1_c type;
+};
+
+template<
+ typename T
+ , T C0, T C1
+ >
+struct set2_c
+ : s_item<
+ integral_c< T,C1 >
+ , set1_c< T,C0 >
+ >
+{
+ typedef set2_c type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2
+ >
+struct set3_c
+ : s_item<
+ integral_c< T,C2 >
+ , set2_c< T,C0,C1 >
+ >
+{
+ typedef set3_c type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3
+ >
+struct set4_c
+ : s_item<
+ integral_c< T,C3 >
+ , set3_c< T,C0,C1,C2 >
+ >
+{
+ typedef set4_c type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4
+ >
+struct set5_c
+ : s_item<
+ integral_c< T,C4 >
+ , set4_c< T,C0,C1,C2,C3 >
+ >
+{
+ typedef set5_c type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5
+ >
+struct set6_c
+ : s_item<
+ integral_c< T,C5 >
+ , set5_c< T,C0,C1,C2,C3,C4 >
+ >
+{
+ typedef set6_c type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5, T C6
+ >
+struct set7_c
+ : s_item<
+ integral_c< T,C6 >
+ , set6_c< T,C0,C1,C2,C3,C4,C5 >
+ >
+{
+ typedef set7_c type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7
+ >
+struct set8_c
+ : s_item<
+ integral_c< T,C7 >
+ , set7_c< T,C0,C1,C2,C3,C4,C5,C6 >
+ >
+{
+ typedef set8_c type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8
+ >
+struct set9_c
+ : s_item<
+ integral_c< T,C8 >
+ , set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >
+ >
+{
+ typedef set9_c 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 set10_c
+ : s_item<
+ integral_c< T,C9 >
+ , set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >
+ >
+{
+ typedef set10_c type;
+};
+
+}}
diff --git a/boost/boost/mpl/set/aux_/preprocessed/plain/set20.hpp b/boost/boost/mpl/set/aux_/preprocessed/plain/set20.hpp
new file mode 100644
index 00000000000..cb4e4666888
--- /dev/null
+++ b/boost/boost/mpl/set/aux_/preprocessed/plain/set20.hpp
@@ -0,0 +1,168 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/set/set20.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 set11
+ : s_item<
+ T10
+ , typename set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::item_
+ >
+{
+ typedef set11 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 set12
+ : s_item<
+ T11
+ , typename set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::item_
+ >
+{
+ typedef set12 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 set13
+ : s_item<
+ T12
+ , typename set12< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10
+ , T11 >::item_
+ >
+{
+ typedef set13 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 set14
+ : s_item<
+ T13
+ , typename set13< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
+ , T12 >::item_
+ >
+{
+ typedef set14 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 set15
+ : s_item<
+ T14
+ , typename set14< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
+ , T12, T13 >::item_
+ >
+{
+ typedef set15 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 set16
+ : s_item<
+ T15
+ , typename set15< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
+ , T12, T13, T14 >::item_
+ >
+{
+ typedef set16 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 set17
+ : s_item<
+ T16
+ , typename set16< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
+ , T12, T13, T14, T15 >::item_
+ >
+{
+ typedef set17 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 set18
+ : s_item<
+ T17
+ , typename set17< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
+ , T12, T13, T14, T15, T16 >::item_
+ >
+{
+ typedef set18 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 set19
+ : s_item<
+ T18
+ , typename set18< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
+ , T12, T13, T14, T15, T16, T17 >::item_
+ >
+{
+ typedef set19 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 set20
+ : s_item<
+ T19
+ , typename set19< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
+ , T12, T13, T14, T15, T16, T17, T18 >::item_
+ >
+{
+ typedef set20 type;
+};
+
+}}
diff --git a/boost/boost/mpl/set/aux_/preprocessed/plain/set20_c.hpp b/boost/boost/mpl/set/aux_/preprocessed/plain/set20_c.hpp
new file mode 100644
index 00000000000..445b5467ca3
--- /dev/null
+++ b/boost/boost/mpl/set/aux_/preprocessed/plain/set20_c.hpp
@@ -0,0 +1,154 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/set/set20_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 set11_c
+ : s_item<
+ integral_c< T,C10 >
+ , set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >
+ >
+{
+ typedef set11_c 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 set12_c
+ : s_item<
+ integral_c< T,C11 >
+ , set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >
+ >
+{
+ typedef set12_c 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 set13_c
+ : s_item<
+ integral_c< T,C12 >
+ , set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >
+ >
+{
+ typedef set13_c 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 set14_c
+ : s_item<
+ integral_c< T,C13 >
+ , set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >
+ >
+{
+ typedef set14_c 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 set15_c
+ : s_item<
+ integral_c< T,C14 >
+ , set14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >
+ >
+{
+ typedef set15_c 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 set16_c
+ : s_item<
+ integral_c< T,C15 >
+ , set15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >
+ >
+{
+ typedef set16_c 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 set17_c
+ : s_item<
+ integral_c< T,C16 >
+ , set16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >
+ >
+{
+ typedef set17_c 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 set18_c
+ : s_item<
+ integral_c< T,C17 >
+ , set17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >
+ >
+{
+ typedef set18_c 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 set19_c
+ : s_item<
+ integral_c< T,C18 >
+ , set18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >
+ >
+{
+ typedef set19_c 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 set20_c
+ : s_item<
+ integral_c< T,C19 >
+ , set19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >
+ >
+{
+ typedef set20_c type;
+};
+
+}}
diff --git a/boost/boost/mpl/set/aux_/preprocessed/plain/set30.hpp b/boost/boost/mpl/set/aux_/preprocessed/plain/set30.hpp
new file mode 100644
index 00000000000..08f2cda27ac
--- /dev/null
+++ b/boost/boost/mpl/set/aux_/preprocessed/plain/set30.hpp
@@ -0,0 +1,195 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/set/set30.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 set21
+ : s_item<
+ T20
+ , typename set20< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
+ , T12, T13, T14, T15, T16, T17, T18, T19 >::item_
+ >
+{
+ typedef set21 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 set22
+ : s_item<
+ T21
+ , typename set21< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
+ , T12, T13, T14, T15, T16, T17, T18, T19, T20 >::item_
+ >
+{
+ typedef set22 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 set23
+ : s_item<
+ T22
+ , typename set22< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
+ , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21 >::item_
+ >
+{
+ typedef set23 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 set24
+ : s_item<
+ T23
+ , typename set23< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
+ , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22 >::item_
+ >
+{
+ typedef set24 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 set25
+ : s_item<
+ T24
+ , typename set24< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
+ , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23 >::item_
+ >
+{
+ typedef set25 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 set26
+ : s_item<
+ T25
+ , typename set25< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
+ , T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23
+ , T24 >::item_
+ >
+{
+ typedef set26 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 set27
+ : s_item<
+ T26
+ , typename set26< T0, 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 >::item_
+ >
+{
+ typedef set27 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 set28
+ : s_item<
+ T27
+ , typename set27< T0, 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 >::item_
+ >
+{
+ typedef set28 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 set29
+ : s_item<
+ T28
+ , typename set28< T0, 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 >::item_
+ >
+{
+ typedef set29 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 set30
+ : s_item<
+ T29
+ , typename set29< T0, 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 >::item_
+ >
+{
+ typedef set30 type;
+};
+
+}}
diff --git a/boost/boost/mpl/set/aux_/preprocessed/plain/set30_c.hpp b/boost/boost/mpl/set/aux_/preprocessed/plain/set30_c.hpp
new file mode 100644
index 00000000000..7c0150ca396
--- /dev/null
+++ b/boost/boost/mpl/set/aux_/preprocessed/plain/set30_c.hpp
@@ -0,0 +1,164 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/set/set30_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 set21_c
+ : s_item<
+ integral_c< T,C20 >
+ , set20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >
+ >
+{
+ typedef set21_c 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 set22_c
+ : s_item<
+ integral_c< T,C21 >
+ , set21_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20 >
+ >
+{
+ typedef set22_c 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 set23_c
+ : s_item<
+ integral_c< T,C22 >
+ , set22_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21 >
+ >
+{
+ typedef set23_c 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 set24_c
+ : s_item<
+ integral_c< T,C23 >
+ , set23_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22 >
+ >
+{
+ typedef set24_c 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 set25_c
+ : s_item<
+ integral_c< T,C24 >
+ , set24_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23 >
+ >
+{
+ typedef set25_c 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 set26_c
+ : s_item<
+ integral_c< T,C25 >
+ , set25_c< T,C0,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 set26_c 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 set27_c
+ : s_item<
+ integral_c< T,C26 >
+ , set26_c< T,C0,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 set27_c 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 set28_c
+ : s_item<
+ integral_c< T,C27 >
+ , set27_c< T,C0,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 set28_c 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 set29_c
+ : s_item<
+ integral_c< T,C28 >
+ , set28_c< T,C0,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 set29_c 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 set30_c
+ : s_item<
+ integral_c< T,C29 >
+ , set29_c< T,C0,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 set30_c type;
+};
+
+}}
diff --git a/boost/boost/mpl/set/aux_/preprocessed/plain/set40.hpp b/boost/boost/mpl/set/aux_/preprocessed/plain/set40.hpp
new file mode 100644
index 00000000000..a8571a61fe6
--- /dev/null
+++ b/boost/boost/mpl/set/aux_/preprocessed/plain/set40.hpp
@@ -0,0 +1,221 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/set/set40.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 set31
+ : s_item<
+ T30
+ , typename set30< T0, 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 >::item_
+ >
+{
+ typedef set31 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 set32
+ : s_item<
+ T31
+ , typename set31< T0, 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 >::item_
+ >
+{
+ typedef set32 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 set33
+ : s_item<
+ T32
+ , typename set32< T0, 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 >::item_
+ >
+{
+ typedef set33 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 set34
+ : s_item<
+ T33
+ , typename set33< T0, 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 >::item_
+ >
+{
+ typedef set34 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 set35
+ : s_item<
+ T34
+ , typename set34< T0, 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 >::item_
+ >
+{
+ typedef set35 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 set36
+ : s_item<
+ T35
+ , typename set35< T0, 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 >::item_
+ >
+{
+ typedef set36 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 set37
+ : s_item<
+ T36
+ , typename set36< T0, 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 >::item_
+ >
+{
+ typedef set37 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 set38
+ : s_item<
+ T37
+ , typename set37< T0, 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 >::item_
+ >
+{
+ typedef set38 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 set39
+ : s_item<
+ T38
+ , typename set38< T0, 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 >::item_
+ >
+{
+ typedef set39 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 set40
+ : s_item<
+ T39
+ , typename set39< T0, 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 >::item_
+ >
+{
+ typedef set40 type;
+};
+
+}}
diff --git a/boost/boost/mpl/set/aux_/preprocessed/plain/set40_c.hpp b/boost/boost/mpl/set/aux_/preprocessed/plain/set40_c.hpp
new file mode 100644
index 00000000000..0b0e49cdd9f
--- /dev/null
+++ b/boost/boost/mpl/set/aux_/preprocessed/plain/set40_c.hpp
@@ -0,0 +1,174 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/set/set40_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 set31_c
+ : s_item<
+ integral_c< T,C30 >
+ , set30_c< T,C0,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 set31_c 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 set32_c
+ : s_item<
+ integral_c< T,C31 >
+ , set31_c< T,C0,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 set32_c 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 set33_c
+ : s_item<
+ integral_c< T,C32 >
+ , set32_c< T,C0,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 set33_c 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 set34_c
+ : s_item<
+ integral_c< T,C33 >
+ , set33_c< T,C0,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 set34_c 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 set35_c
+ : s_item<
+ integral_c< T,C34 >
+ , set34_c< T,C0,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 set35_c 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 set36_c
+ : s_item<
+ integral_c< T,C35 >
+ , set35_c< T,C0,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 set36_c 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 set37_c
+ : s_item<
+ integral_c< T,C36 >
+ , set36_c< T,C0,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 set37_c 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 set38_c
+ : s_item<
+ integral_c< T,C37 >
+ , set37_c< T,C0,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 set38_c 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 set39_c
+ : s_item<
+ integral_c< T,C38 >
+ , set38_c< T,C0,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 set39_c 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 set40_c
+ : s_item<
+ integral_c< T,C39 >
+ , set39_c< T,C0,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 set40_c type;
+};
+
+}}
diff --git a/boost/boost/mpl/set/aux_/preprocessed/plain/set50.hpp b/boost/boost/mpl/set/aux_/preprocessed/plain/set50.hpp
new file mode 100644
index 00000000000..79798ab49c8
--- /dev/null
+++ b/boost/boost/mpl/set/aux_/preprocessed/plain/set50.hpp
@@ -0,0 +1,250 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/set/set50.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 set41
+ : s_item<
+ T40
+ , typename set40< T0, 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 >::item_
+ >
+{
+ typedef set41 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 set42
+ : s_item<
+ T41
+ , typename set41< T0, 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 >::item_
+ >
+{
+ typedef set42 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 set43
+ : s_item<
+ T42
+ , typename set42< T0, 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 >::item_
+ >
+{
+ typedef set43 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 set44
+ : s_item<
+ T43
+ , typename set43< T0, 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 >::item_
+ >
+{
+ typedef set44 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 set45
+ : s_item<
+ T44
+ , typename set44< T0, 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 >::item_
+ >
+{
+ typedef set45 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 set46
+ : s_item<
+ T45
+ , typename set45< T0, 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 >::item_
+ >
+{
+ typedef set46 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 set47
+ : s_item<
+ T46
+ , typename set46< T0, 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 >::item_
+ >
+{
+ typedef set47 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 set48
+ : s_item<
+ T47
+ , typename set47< T0, 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 >::item_
+ >
+{
+ typedef set48 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 set49
+ : s_item<
+ T48
+ , typename set48< T0, 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 >::item_
+ >
+{
+ typedef set49 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 set50
+ : s_item<
+ T49
+ , typename set49< T0, 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 >::item_
+ >
+{
+ typedef set50 type;
+};
+
+}}
diff --git a/boost/boost/mpl/set/aux_/preprocessed/plain/set50_c.hpp b/boost/boost/mpl/set/aux_/preprocessed/plain/set50_c.hpp
new file mode 100644
index 00000000000..83627fa13da
--- /dev/null
+++ b/boost/boost/mpl/set/aux_/preprocessed/plain/set50_c.hpp
@@ -0,0 +1,184 @@
+
+// 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)
+//
+
+// Preprocessed version of "boost/mpl/set/set50_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 set41_c
+ : s_item<
+ integral_c< T,C40 >
+ , set40_c< T,C0,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 set41_c 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 set42_c
+ : s_item<
+ integral_c< T,C41 >
+ , set41_c< T,C0,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 set42_c 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 set43_c
+ : s_item<
+ integral_c< T,C42 >
+ , set42_c< T,C0,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 set43_c 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 set44_c
+ : s_item<
+ integral_c< T,C43 >
+ , set43_c< T,C0,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 set44_c 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 set45_c
+ : s_item<
+ integral_c< T,C44 >
+ , set44_c< T,C0,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 set45_c 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 set46_c
+ : s_item<
+ integral_c< T,C45 >
+ , set45_c< T,C0,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 set46_c 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 set47_c
+ : s_item<
+ integral_c< T,C46 >
+ , set46_c< T,C0,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 set47_c 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 set48_c
+ : s_item<
+ integral_c< T,C47 >
+ , set47_c< T,C0,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 set48_c 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 set49_c
+ : s_item<
+ integral_c< T,C48 >
+ , set48_c< T,C0,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 set49_c 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 set50_c
+ : s_item<
+ integral_c< T,C49 >
+ , set49_c< T,C0,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 set50_c type;
+};
+
+}}
diff --git a/boost/boost/mpl/set/aux_/set0.hpp b/boost/boost/mpl/set/aux_/set0.hpp
new file mode 100644
index 00000000000..617d0990af0
--- /dev/null
+++ b/boost/boost/mpl/set/aux_/set0.hpp
@@ -0,0 +1,69 @@
+
+#ifndef BOOST_MPL_SET_AUX_SET0_HPP_INCLUDED
+#define BOOST_MPL_SET_AUX_SET0_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/set/aux_/set0.hpp,v $
+// $Date: 2005/06/18 22:03:08 $
+// $Revision: 1.8 $
+
+#include <boost/mpl/long.hpp>
+#include <boost/mpl/void.hpp>
+#include <boost/mpl/aux_/na.hpp>
+#include <boost/mpl/set/aux_/tag.hpp>
+#include <boost/mpl/aux_/yes_no.hpp>
+#include <boost/mpl/aux_/overload_names.hpp>
+#include <boost/mpl/aux_/config/operators.hpp>
+
+#include <boost/preprocessor/cat.hpp>
+
+namespace boost { namespace mpl {
+
+#if defined(BOOST_MPL_CFG_USE_OPERATORS_OVERLOADING)
+
+# define BOOST_MPL_AUX_SET0_OVERLOAD(R, f, X, T) \
+ friend R BOOST_PP_CAT(BOOST_MPL_AUX_OVERLOAD_,f)(X const&, T) \
+/**/
+
+# define BOOST_MPL_AUX_SET_OVERLOAD(R, f, X, T) \
+ BOOST_MPL_AUX_SET0_OVERLOAD(R, f, X, T) \
+/**/
+
+#else
+
+# define BOOST_MPL_AUX_SET0_OVERLOAD(R, f, X, T) \
+ static R BOOST_PP_CAT(BOOST_MPL_AUX_OVERLOAD_,f)(X const&, T) \
+/**/
+
+# define BOOST_MPL_AUX_SET_OVERLOAD(R, f, X, T) \
+ BOOST_MPL_AUX_SET0_OVERLOAD(R, f, X, T); \
+ using Base::BOOST_PP_CAT(BOOST_MPL_AUX_OVERLOAD_,f) \
+/**/
+
+#endif
+
+template< typename Dummy = na > struct set0
+{
+ typedef set0<> item_;
+ typedef aux::set_tag tag;
+ typedef void_ last_masked_;
+ typedef void_ item_type_;
+ typedef item_type_ type;
+ typedef long_<0> size;
+ typedef long_<1> order;
+
+ BOOST_MPL_AUX_SET0_OVERLOAD( aux::no_tag, ORDER_BY_KEY, set0<>, void const volatile* );
+ BOOST_MPL_AUX_SET0_OVERLOAD( aux::yes_tag, IS_MASKED, set0<>, void const volatile* );
+};
+
+}}
+
+#endif // BOOST_MPL_SET_AUX_SET0_HPP_INCLUDED
diff --git a/boost/boost/mpl/set/aux_/size_impl.hpp b/boost/boost/mpl/set/aux_/size_impl.hpp
new file mode 100644
index 00000000000..ff2dd4fb78a
--- /dev/null
+++ b/boost/boost/mpl/set/aux_/size_impl.hpp
@@ -0,0 +1,33 @@
+
+#ifndef BOOST_MPL_SET_AUX_SIZE_IMPL_HPP_INCLUDED
+#define BOOST_MPL_SET_AUX_SIZE_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/set/aux_/size_impl.hpp,v $
+// $Date: 2004/09/02 15:41:02 $
+// $Revision: 1.2 $
+
+#include <boost/mpl/size_fwd.hpp>
+#include <boost/mpl/set/aux_/tag.hpp>
+
+namespace boost { namespace mpl {
+
+template<>
+struct size_impl< aux::set_tag >
+{
+ template< typename Set > struct apply
+ : Set::size
+ {
+ };
+};
+
+}}
+
+#endif // BOOST_MPL_SET_AUX_SIZE_IMPL_HPP_INCLUDED
diff --git a/boost/boost/mpl/set/aux_/tag.hpp b/boost/boost/mpl/set/aux_/tag.hpp
new file mode 100644
index 00000000000..6aedcb26f0a
--- /dev/null
+++ b/boost/boost/mpl/set/aux_/tag.hpp
@@ -0,0 +1,24 @@
+
+#ifndef BOOST_MPL_SET_AUX_TAG_HPP_INCLUDED
+#define BOOST_MPL_SET_AUX_TAG_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/set/aux_/tag.hpp,v $
+// $Date: 2004/09/02 15:41:02 $
+// $Revision: 1.3 $
+
+namespace boost { namespace mpl { namespace aux {
+
+struct set_tag;
+
+}}}
+
+#endif // BOOST_MPL_SET_AUX_TAG_HPP_INCLUDED
diff --git a/boost/boost/mpl/set/aux_/value_type_impl.hpp b/boost/boost/mpl/set/aux_/value_type_impl.hpp
new file mode 100644
index 00000000000..a02d85e6863
--- /dev/null
+++ b/boost/boost/mpl/set/aux_/value_type_impl.hpp
@@ -0,0 +1,34 @@
+
+#ifndef BOOST_MPL_SET_AUX_VALUE_TYPE_IMPL_HPP_INCLUDED
+#define BOOST_MPL_SET_AUX_VALUE_TYPE_IMPL_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/set/aux_/value_type_impl.hpp,v $
+// $Date: 2004/09/02 15:41:02 $
+// $Revision: 1.2 $
+
+#include <boost/mpl/value_type_fwd.hpp>
+#include <boost/mpl/set/aux_/tag.hpp>
+
+namespace boost { namespace mpl {
+
+template<>
+struct value_type_impl< aux::set_tag >
+{
+ template< typename Set, typename T > struct apply
+ {
+ typedef T type;
+ };
+};
+
+}}
+
+#endif // BOOST_MPL_SET_AUX_VALUE_TYPE_IMPL_HPP_INCLUDED
diff --git a/boost/boost/mpl/set/set0.hpp b/boost/boost/mpl/set/set0.hpp
new file mode 100644
index 00000000000..52f2b992c77
--- /dev/null
+++ b/boost/boost/mpl/set/set0.hpp
@@ -0,0 +1,35 @@
+
+#ifndef BOOST_MPL_SET_SET0_HPP_INCLUDED
+#define BOOST_MPL_SET_SET0_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/set/set0.hpp,v $
+// $Date: 2004/09/02 15:41:02 $
+// $Revision: 1.5 $
+
+#include <boost/mpl/set/aux_/at_impl.hpp>
+#include <boost/mpl/set/aux_/clear_impl.hpp>
+//#include <boost/mpl/set/aux_/O1_size.hpp>
+#include <boost/mpl/set/aux_/size_impl.hpp>
+#include <boost/mpl/set/aux_/empty_impl.hpp>
+#include <boost/mpl/set/aux_/insert_impl.hpp>
+#include <boost/mpl/set/aux_/erase_impl.hpp>
+#include <boost/mpl/set/aux_/erase_key_impl.hpp>
+#include <boost/mpl/set/aux_/has_key_impl.hpp>
+#include <boost/mpl/set/aux_/key_type_impl.hpp>
+#include <boost/mpl/set/aux_/value_type_impl.hpp>
+#include <boost/mpl/set/aux_/begin_end_impl.hpp>
+#include <boost/mpl/set/aux_/iterator.hpp>
+#include <boost/mpl/set/aux_/item.hpp>
+#include <boost/mpl/set/aux_/set0.hpp>
+#include <boost/mpl/set/aux_/tag.hpp>
+
+#endif // BOOST_MPL_SET_SET0_HPP_INCLUDED
diff --git a/boost/boost/mpl/set/set0_c.hpp b/boost/boost/mpl/set/set0_c.hpp
new file mode 100644
index 00000000000..4602e7d0742
--- /dev/null
+++ b/boost/boost/mpl/set/set0_c.hpp
@@ -0,0 +1,32 @@
+
+#ifndef BOOST_MPL_SET_SET0_C_HPP_INCLUDED
+#define BOOST_MPL_SET_SET0_C_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/set/set0_c.hpp,v $
+// $Date: 2004/11/28 01:51:10 $
+// $Revision: 1.2 $
+
+#include <boost/mpl/set/set0.hpp>
+#include <boost/mpl/integral_c.hpp>
+
+namespace boost { namespace mpl {
+
+template< typename T > struct set0_c
+ : set0<>
+{
+ typedef set0_c type;
+ typedef T value_type;
+};
+
+}}
+
+#endif // BOOST_MPL_SET_SET0_C_HPP_INCLUDED
diff --git a/boost/boost/mpl/set/set10.hpp b/boost/boost/mpl/set/set10.hpp
new file mode 100644
index 00000000000..acb513545d6
--- /dev/null
+++ b/boost/boost/mpl/set/set10.hpp
@@ -0,0 +1,44 @@
+
+#ifndef BOOST_MPL_SET_SET10_HPP_INCLUDED
+#define BOOST_MPL_SET_SET10_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/set/set10.hpp,v $
+// $Date: 2004/09/02 15:41:02 $
+// $Revision: 1.2 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/set/set0.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 set10.hpp
+# include <boost/mpl/set/aux_/include_preprocessed.hpp>
+
+#else
+
+# include <boost/preprocessor/iterate.hpp>
+
+namespace boost { namespace mpl {
+
+# define BOOST_PP_ITERATION_PARAMS_1 \
+ (3,(0, 10, <boost/mpl/set/aux_/numbered.hpp>))
+# include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_SET_SET10_HPP_INCLUDED
diff --git a/boost/boost/mpl/set/set10_c.hpp b/boost/boost/mpl/set/set10_c.hpp
new file mode 100644
index 00000000000..02af4b9c2ef
--- /dev/null
+++ b/boost/boost/mpl/set/set10_c.hpp
@@ -0,0 +1,45 @@
+
+#ifndef BOOST_MPL_SET_SET10_C_HPP_INCLUDED
+#define BOOST_MPL_SET_SET10_C_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/set/set10_c.hpp,v $
+// $Date: 2004/11/28 01:51:10 $
+// $Revision: 1.2 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/set/set0_c.hpp>
+# include <boost/mpl/set/set10.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 set10_c.hpp
+# include <boost/mpl/set/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/set/aux_/numbered_c.hpp>))
+# include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_SET_SET10_C_HPP_INCLUDED
diff --git a/boost/boost/mpl/set/set20.hpp b/boost/boost/mpl/set/set20.hpp
new file mode 100644
index 00000000000..0003ca9aeba
--- /dev/null
+++ b/boost/boost/mpl/set/set20.hpp
@@ -0,0 +1,44 @@
+
+#ifndef BOOST_MPL_SET_SET20_HPP_INCLUDED
+#define BOOST_MPL_SET_SET20_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/set/set20.hpp,v $
+// $Date: 2004/09/02 15:41:02 $
+// $Revision: 1.2 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/set/set10.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 set20.hpp
+# include <boost/mpl/set/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/set/aux_/numbered.hpp>))
+# include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_SET_SET20_HPP_INCLUDED
diff --git a/boost/boost/mpl/set/set20_c.hpp b/boost/boost/mpl/set/set20_c.hpp
new file mode 100644
index 00000000000..9f5f64adb62
--- /dev/null
+++ b/boost/boost/mpl/set/set20_c.hpp
@@ -0,0 +1,45 @@
+
+#ifndef BOOST_MPL_SET_SET20_C_HPP_INCLUDED
+#define BOOST_MPL_SET_SET20_C_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/set/set20_c.hpp,v $
+// $Date: 2004/11/28 01:51:10 $
+// $Revision: 1.2 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/set/set10_c.hpp>
+# include <boost/mpl/set/set20.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 set20_c.hpp
+# include <boost/mpl/set/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/set/aux_/numbered_c.hpp>))
+# include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_SET_SET20_C_HPP_INCLUDED
diff --git a/boost/boost/mpl/set/set30.hpp b/boost/boost/mpl/set/set30.hpp
new file mode 100644
index 00000000000..66745a204e5
--- /dev/null
+++ b/boost/boost/mpl/set/set30.hpp
@@ -0,0 +1,44 @@
+
+#ifndef BOOST_MPL_SET_SET30_HPP_INCLUDED
+#define BOOST_MPL_SET_SET30_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/set/set30.hpp,v $
+// $Date: 2004/09/02 15:41:02 $
+// $Revision: 1.2 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/set/set20.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 set30.hpp
+# include <boost/mpl/set/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/set/aux_/numbered.hpp>))
+# include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_SET_SET30_HPP_INCLUDED
diff --git a/boost/boost/mpl/set/set30_c.hpp b/boost/boost/mpl/set/set30_c.hpp
new file mode 100644
index 00000000000..f4b2ccf3d86
--- /dev/null
+++ b/boost/boost/mpl/set/set30_c.hpp
@@ -0,0 +1,45 @@
+
+#ifndef BOOST_MPL_SET_SET30_C_HPP_INCLUDED
+#define BOOST_MPL_SET_SET30_C_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/set/set30_c.hpp,v $
+// $Date: 2004/11/28 01:51:10 $
+// $Revision: 1.2 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/set/set20_c.hpp>
+# include <boost/mpl/set/set30.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 set30_c.hpp
+# include <boost/mpl/set/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/set/aux_/numbered_c.hpp>))
+# include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_SET_SET30_C_HPP_INCLUDED
diff --git a/boost/boost/mpl/set/set40.hpp b/boost/boost/mpl/set/set40.hpp
new file mode 100644
index 00000000000..110f639e1c4
--- /dev/null
+++ b/boost/boost/mpl/set/set40.hpp
@@ -0,0 +1,44 @@
+
+#ifndef BOOST_MPL_SET_SET40_HPP_INCLUDED
+#define BOOST_MPL_SET_SET40_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/set/set40.hpp,v $
+// $Date: 2004/09/02 15:41:02 $
+// $Revision: 1.2 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/set/set30.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 set40.hpp
+# include <boost/mpl/set/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/set/aux_/numbered.hpp>))
+# include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_SET_SET40_HPP_INCLUDED
diff --git a/boost/boost/mpl/set/set40_c.hpp b/boost/boost/mpl/set/set40_c.hpp
new file mode 100644
index 00000000000..b42c62b0187
--- /dev/null
+++ b/boost/boost/mpl/set/set40_c.hpp
@@ -0,0 +1,45 @@
+
+#ifndef BOOST_MPL_SET_SET40_C_HPP_INCLUDED
+#define BOOST_MPL_SET_SET40_C_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/set/set40_c.hpp,v $
+// $Date: 2004/11/28 01:51:10 $
+// $Revision: 1.2 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/set/set30_c.hpp>
+# include <boost/mpl/set/set40.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 set40_c.hpp
+# include <boost/mpl/set/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/set/aux_/numbered_c.hpp>))
+# include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_SET_SET40_C_HPP_INCLUDED
diff --git a/boost/boost/mpl/set/set50.hpp b/boost/boost/mpl/set/set50.hpp
new file mode 100644
index 00000000000..9e953f19096
--- /dev/null
+++ b/boost/boost/mpl/set/set50.hpp
@@ -0,0 +1,44 @@
+
+#ifndef BOOST_MPL_SET_SET50_HPP_INCLUDED
+#define BOOST_MPL_SET_SET50_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/set/set50.hpp,v $
+// $Date: 2004/09/02 15:41:02 $
+// $Revision: 1.2 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/set/set40.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 set50.hpp
+# include <boost/mpl/set/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/set/aux_/numbered.hpp>))
+# include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_SET_SET50_HPP_INCLUDED
diff --git a/boost/boost/mpl/set/set50_c.hpp b/boost/boost/mpl/set/set50_c.hpp
new file mode 100644
index 00000000000..c856cd20390
--- /dev/null
+++ b/boost/boost/mpl/set/set50_c.hpp
@@ -0,0 +1,45 @@
+
+#ifndef BOOST_MPL_SET_SET50_C_HPP_INCLUDED
+#define BOOST_MPL_SET_SET50_C_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/set/set50_c.hpp,v $
+// $Date: 2004/11/28 01:51:10 $
+// $Revision: 1.2 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/set/set40_c.hpp>
+# include <boost/mpl/set/set50.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 set50_c.hpp
+# include <boost/mpl/set/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/set/aux_/numbered_c.hpp>))
+# include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_SET_SET50_C_HPP_INCLUDED
diff --git a/boost/boost/mpl/set_c.hpp b/boost/boost/mpl/set_c.hpp
new file mode 100644
index 00000000000..c27002901cb
--- /dev/null
+++ b/boost/boost/mpl/set_c.hpp
@@ -0,0 +1,60 @@
+
+#ifndef BOOST_MPL_SET_C_HPP_INCLUDED
+#define BOOST_MPL_SET_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/set_c.hpp,v $
+// $Date: 2004/11/28 01:58:03 $
+// $Revision: 1.2 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/limits/set.hpp>
+# include <boost/mpl/aux_/nttp_decl.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_SET_C_HEADER \
+ BOOST_PP_CAT(BOOST_PP_CAT(set,BOOST_MPL_LIMIT_SET_SIZE),_c).hpp \
+ /**/
+#else
+# define AUX778076_SET_C_HEADER \
+ BOOST_PP_CAT(BOOST_PP_CAT(set,BOOST_MPL_LIMIT_SET_SIZE),_c)##.hpp \
+ /**/
+#endif
+
+# include BOOST_PP_STRINGIZE(boost/mpl/set/AUX778076_SET_C_HEADER)
+# undef AUX778076_SET_C_HEADER
+# include <climits>
+#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 set_c.hpp
+# include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#else
+
+# include <boost/mpl/limits/set.hpp>
+
+# define AUX778076_SEQUENCE_NAME set_c
+# define AUX778076_SEQUENCE_LIMIT BOOST_MPL_LIMIT_SET_SIZE
+# define AUX778076_SEQUENCE_NAME_N(n) BOOST_PP_CAT(BOOST_PP_CAT(set,n),_c)
+# define AUX778076_SEQUENCE_INTEGRAL_WRAPPER
+# include <boost/mpl/aux_/sequence_wrapper.hpp>
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#endif // BOOST_MPL_SET_C_HPP_INCLUDED
diff --git a/boost/boost/mpl/shift_left.hpp b/boost/boost/mpl/shift_left.hpp
new file mode 100644
index 00000000000..ac38e9d3345
--- /dev/null
+++ b/boost/boost/mpl/shift_left.hpp
@@ -0,0 +1,22 @@
+
+#ifndef BOOST_MPL_SHIFT_LEFT_HPP_INCLUDED
+#define BOOST_MPL_SHIFT_LEFT_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/shift_left.hpp,v $
+// $Date: 2004/09/02 15:40:42 $
+// $Revision: 1.2 $
+
+#define AUX778076_OP_NAME shift_left
+#define AUX778076_OP_TOKEN <<
+#include <boost/mpl/aux_/shift_op.hpp>
+
+#endif // BOOST_MPL_SHIFT_LEFT_HPP_INCLUDED
diff --git a/boost/boost/mpl/shift_right.hpp b/boost/boost/mpl/shift_right.hpp
new file mode 100644
index 00000000000..26a7ef4e0e3
--- /dev/null
+++ b/boost/boost/mpl/shift_right.hpp
@@ -0,0 +1,22 @@
+
+#ifndef BOOST_MPL_SHIFT_RIGHT_HPP_INCLUDED
+#define BOOST_MPL_SHIFT_RIGHT_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/shift_right.hpp,v $
+// $Date: 2004/09/02 15:40:42 $
+// $Revision: 1.2 $
+
+#define AUX778076_OP_NAME shift_right
+#define AUX778076_OP_TOKEN >>
+#include <boost/mpl/aux_/shift_op.hpp>
+
+#endif // BOOST_MPL_SHIFT_RIGHT_HPP_INCLUDED
diff --git a/boost/boost/mpl/single_view.hpp b/boost/boost/mpl/single_view.hpp
new file mode 100644
index 00000000000..e9bb990d379
--- /dev/null
+++ b/boost/boost/mpl/single_view.hpp
@@ -0,0 +1,38 @@
+
+#ifndef BOOST_MPL_SINGLE_VIEW_HPP_INCLUDED
+#define BOOST_MPL_SINGLE_VIEW_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/single_view.hpp,v $
+// $Date: 2004/11/28 01:58:03 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/aux_/single_element_iter.hpp>
+#include <boost/mpl/iterator_range.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+
+namespace boost { namespace mpl {
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(T)
+ >
+struct single_view
+ : iterator_range<
+ aux::sel_iter<T,0>
+ , aux::sel_iter<T,1>
+ >
+{
+};
+
+BOOST_MPL_AUX_NA_SPEC_NO_ETI(1, single_view)
+
+}}
+
+#endif // BOOST_MPL_SINGLE_VIEW_HPP_INCLUDED
diff --git a/boost/boost/mpl/size.hpp b/boost/boost/mpl/size.hpp
new file mode 100644
index 00000000000..3a01f013c1b
--- /dev/null
+++ b/boost/boost/mpl/size.hpp
@@ -0,0 +1,42 @@
+
+#ifndef BOOST_MPL_SIZE_HPP_INCLUDED
+#define BOOST_MPL_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/size.hpp,v $
+// $Date: 2004/09/02 15:40:42 $
+// $Revision: 1.5 $
+
+#include <boost/mpl/size_fwd.hpp>
+#include <boost/mpl/sequence_tag.hpp>
+#include <boost/mpl/aux_/size_impl.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/mpl/aux_/msvc_eti_base.hpp>
+
+namespace boost { namespace mpl {
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+ >
+struct size
+ : aux::msvc_eti_base<
+ typename size_impl< typename sequence_tag<Sequence>::type >
+ ::template apply< Sequence >::type
+ >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1, size, (Sequence))
+};
+
+BOOST_MPL_AUX_NA_SPEC(1, size)
+
+}}
+
+#endif // BOOST_MPL_SIZE_HPP_INCLUDED
diff --git a/boost/boost/mpl/size_fwd.hpp b/boost/boost/mpl/size_fwd.hpp
new file mode 100644
index 00000000000..53a999bd23d
--- /dev/null
+++ b/boost/boost/mpl/size_fwd.hpp
@@ -0,0 +1,24 @@
+
+#ifndef BOOST_MPL_SIZE_FWD_HPP_INCLUDED
+#define BOOST_MPL_SIZE_FWD_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/size_fwd.hpp,v $
+// $Date: 2004/09/02 15:40:42 $
+// $Revision: 1.4 $
+
+namespace boost { namespace mpl {
+
+template< typename Tag > struct size_impl;
+template< typename Sequence > struct size;
+
+}}
+
+#endif // BOOST_MPL_SIZE_FWD_HPP_INCLUDED
diff --git a/boost/boost/mpl/size_t.hpp b/boost/boost/mpl/size_t.hpp
new file mode 100644
index 00000000000..3e71f4c6f1a
--- /dev/null
+++ b/boost/boost/mpl/size_t.hpp
@@ -0,0 +1,25 @@
+
+#ifndef BOOST_MPL_SIZE_T_HPP_INCLUDED
+#define BOOST_MPL_SIZE_T_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/size_t.hpp,v $
+// $Date: 2004/09/02 15:40:42 $
+// $Revision: 1.3 $
+
+#include <boost/mpl/size_t_fwd.hpp>
+
+#define AUX_WRAPPER_VALUE_TYPE std::size_t
+#define AUX_WRAPPER_NAME size_t
+#define AUX_WRAPPER_PARAMS(N) std::size_t N
+
+#include <boost/mpl/aux_/integral_wrapper.hpp>
+
+#endif // BOOST_MPL_SIZE_T_HPP_INCLUDED
diff --git a/boost/boost/mpl/size_t_fwd.hpp b/boost/boost/mpl/size_t_fwd.hpp
new file mode 100644
index 00000000000..746fb4d5126
--- /dev/null
+++ b/boost/boost/mpl/size_t_fwd.hpp
@@ -0,0 +1,28 @@
+
+#ifndef BOOST_MPL_SIZE_T_FWD_HPP_INCLUDED
+#define BOOST_MPL_SIZE_T_FWD_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/size_t_fwd.hpp,v $
+// $Date: 2004/09/02 15:40:42 $
+// $Revision: 1.3 $
+
+#include <boost/mpl/aux_/adl_barrier.hpp>
+#include <boost/config.hpp> // make sure 'size_t' is placed into 'std'
+#include <cstddef>
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+
+template< std::size_t N > struct size_t;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+BOOST_MPL_AUX_ADL_BARRIER_DECL(size_t)
+
+#endif // BOOST_MPL_SIZE_T_FWD_HPP_INCLUDED
diff --git a/boost/boost/mpl/sizeof.hpp b/boost/boost/mpl/sizeof.hpp
new file mode 100644
index 00000000000..8b89d6ce7b7
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/sizeof.hpp,v $
+// $Date: 2004/09/02 15:40:42 $
+// $Revision: 1.4 $
+
+#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/boost/boost/mpl/sort.hpp b/boost/boost/mpl/sort.hpp
new file mode 100644
index 00000000000..bde4352a9ae
--- /dev/null
+++ b/boost/boost/mpl/sort.hpp
@@ -0,0 +1,27 @@
+
+#ifndef BOOST_MPL_SORT_HPP_INCLUDED
+#define BOOST_MPL_SORT_HPP_INCLUDED
+
+// Copyright Eric Friedman 2002-2003
+// 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/sort.hpp,v $
+// $Date: 2004/11/28 01:58:03 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/aux_/sort_impl.hpp>
+#include <boost/mpl/aux_/inserter_algorithm.hpp>
+
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(3, sort)
+
+}}
+
+#endif // BOOST_MPL_SORT_HPP_INCLUDED
diff --git a/boost/boost/mpl/stable_partition.hpp b/boost/boost/mpl/stable_partition.hpp
new file mode 100644
index 00000000000..c46faa4369a
--- /dev/null
+++ b/boost/boost/mpl/stable_partition.hpp
@@ -0,0 +1,75 @@
+
+#ifndef BOOST_MPL_STABLE_PARTITION_HPP_INCLUDED
+#define BOOST_MPL_STABLE_PARTITION_HPP_INCLUDED
+
+// Copyright Eric Friedman 2002-2003
+// 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/stable_partition.hpp,v $
+// $Date: 2004/11/28 01:58:27 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/fold.hpp>
+#include <boost/mpl/reverse_fold.hpp>
+#include <boost/mpl/protect.hpp>
+#include <boost/mpl/aux_/partition_op.hpp>
+#include <boost/mpl/aux_/inserter_algorithm.hpp>
+#include <boost/mpl/aux_/na.hpp>
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template <
+ typename Sequence
+ , typename Pred
+ , typename In
+ , typename In2
+ , typename In1 = typename if_na<In,In2>::type
+ >
+struct stable_partition_impl
+ : fold<
+ Sequence
+ , pair< typename In1::state, typename In2::state >
+ , protect< partition_op<
+ Pred
+ , typename In1::operation
+ , typename In2::operation
+ > >
+ >
+{
+};
+
+template <
+ typename Sequence
+ , typename Pred
+ , typename In
+ , typename In2
+ , typename In1 = typename if_na<In,In2>::type
+ >
+struct reverse_stable_partition_impl
+ : reverse_fold<
+ Sequence
+ , pair< typename In1::state, typename In2::state >
+ , protect< partition_op<
+ Pred
+ , typename In1::operation
+ , typename In2::operation
+ > >
+ >
+{
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(4, stable_partition)
+
+}}
+
+#endif // BOOST_MPL_STABLE_PARTITION_HPP_INCLUDED
diff --git a/boost/boost/mpl/switch.hpp b/boost/boost/mpl/switch.hpp
new file mode 100644
index 00000000000..5744f35b892
--- /dev/null
+++ b/boost/boost/mpl/switch.hpp
@@ -0,0 +1,49 @@
+
+#ifndef BOOST_MPL_SWITCH_HPP_INCLUDED
+#define BOOST_MPL_SWITCH_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/switch.hpp,v $
+// $Date: 2004/09/02 15:40:42 $
+// $Revision: 1.3 $
+
+#include <boost/mpl/find_if.hpp>
+#include <boost/mpl/deref.hpp>
+#include <boost/mpl/lambda.hpp>
+#include <boost/mpl/apply.hpp>
+#include <boost/mpl/pair.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(Body)
+ , typename BOOST_MPL_AUX_NA_PARAM(T)
+ >
+struct switch_
+{
+ typedef typename find_if<
+ Body
+ , apply1< lambda< first<_1> >, T >
+ >::type iter_;
+
+ typedef typename deref<iter_>::type pair_;
+ typedef typename lambda< typename second<pair_>::type >::type f_;
+ typedef typename apply1<f_,T>::type type;
+
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2,switch_,(Body,T))
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, switch_)
+
+}}
+
+#endif // BOOST_MPL_SWITCH_HPP_INCLUDED
diff --git a/boost/boost/mpl/tag.hpp b/boost/boost/mpl/tag.hpp
new file mode 100644
index 00000000000..c0cf4c191c5
--- /dev/null
+++ b/boost/boost/mpl/tag.hpp
@@ -0,0 +1,52 @@
+
+#ifndef BOOST_MPL_TAG_HPP_INCLUDED
+#define BOOST_MPL_TAG_HPP_INCLUDED
+
+// 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/tag.hpp,v $
+// $Date: 2004/09/02 15:40:42 $
+// $Revision: 1.2 $
+
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/void.hpp>
+#include <boost/mpl/aux_/has_tag.hpp>
+#include <boost/mpl/aux_/config/eti.hpp>
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template< typename T > struct tag_impl
+{
+ typedef typename T::tag type;
+};
+}
+
+template< typename T, typename Default = void_ > struct tag
+#if !defined(BOOST_MPL_CFG_MSVC_ETI_BUG)
+ : if_<
+ aux::has_tag<T>
+ , aux::tag_impl<T>
+ , Default
+ >::type
+{
+#else
+{
+ typedef typename eval_if<
+ aux::has_tag<T>
+ , aux::tag_impl<T>
+ , Default
+ >::type type;
+
+#endif
+};
+
+}}
+
+#endif // BOOST_MPL_TAG_HPP_INCLUDED
diff --git a/boost/boost/mpl/times.hpp b/boost/boost/mpl/times.hpp
new file mode 100644
index 00000000000..9d56d1941ca
--- /dev/null
+++ b/boost/boost/mpl/times.hpp
@@ -0,0 +1,21 @@
+
+#ifndef BOOST_MPL_TIMES_HPP_INCLUDED
+#define BOOST_MPL_TIMES_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/times.hpp,v $
+// $Date: 2004/09/02 15:40:42 $
+// $Revision: 1.2 $
+
+#define AUX778076_OP_NAME times
+#define AUX778076_OP_TOKEN *
+#include <boost/mpl/aux_/arithmetic_op.hpp>
+
+#endif // BOOST_MPL_TIMES_HPP_INCLUDED
diff --git a/boost/boost/mpl/transform.hpp b/boost/boost/mpl/transform.hpp
new file mode 100644
index 00000000000..023a99a373a
--- /dev/null
+++ b/boost/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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/transform.hpp,v $
+// $Date: 2004/12/20 17:18:17 $
+// $Revision: 1.10 $
+
+#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/boost/boost/mpl/transform_view.hpp b/boost/boost/mpl/transform_view.hpp
new file mode 100644
index 00000000000..28cccb02705
--- /dev/null
+++ b/boost/boost/mpl/transform_view.hpp
@@ -0,0 +1,46 @@
+
+#ifndef BOOST_MPL_TRANSFORM_VIEW_HPP_INCLUDED
+#define BOOST_MPL_TRANSFORM_VIEW_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/transform_view.hpp,v $
+// $Date: 2004/09/02 15:40:42 $
+// $Revision: 1.5 $
+
+#include <boost/mpl/begin_end.hpp>
+#include <boost/mpl/lambda.hpp>
+#include <boost/mpl/aux_/transform_iter.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(F)
+ >
+struct transform_view
+{
+ private:
+ typedef typename lambda<F>::type f_;
+ typedef typename begin<Sequence>::type first_;
+ typedef typename end<Sequence>::type last_;
+
+ public:
+ struct tag;
+ typedef transform_view type;
+ typedef aux::transform_iter< first_,last_,f_ > begin;
+ typedef aux::transform_iter< last_,last_,f_ > end;
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, transform_view)
+
+}}
+
+#endif // BOOST_MPL_TRANSFORM_VIEW_HPP_INCLUDED
diff --git a/boost/boost/mpl/unique.hpp b/boost/boost/mpl/unique.hpp
new file mode 100644
index 00000000000..5a01d0df2c7
--- /dev/null
+++ b/boost/boost/mpl/unique.hpp
@@ -0,0 +1,85 @@
+
+#ifndef BOOST_MPL_UNIQUE_HPP_INCLUDED
+#define BOOST_MPL_UNIQUE_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright John R. Bandela 2000-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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/unique.hpp,v $
+// $Date: 2004/09/02 15:40:42 $
+// $Revision: 1.7 $
+
+#include <boost/mpl/fold.hpp>
+#include <boost/mpl/reverse_fold.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/pair.hpp>
+#include <boost/mpl/apply.hpp>
+#include <boost/mpl/aux_/inserter_algorithm.hpp>
+#include <boost/mpl/aux_/na.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_spec.hpp>
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template< typename Predicate, typename Operation >
+struct unique_op
+{
+ template< typename Pair, typename T > struct apply
+ {
+ typedef typename Pair::first seq_;
+ typedef typename Pair::second prior_;
+ typedef typename eval_if<
+ and_< is_not_na<prior_>, apply2<Predicate,prior_,T> >
+ , identity<seq_>
+ , apply2<Operation,seq_,T>
+ >::type new_seq_;
+
+ typedef pair<new_seq_,T> type;
+ };
+};
+
+template<
+ typename Sequence
+ , typename Predicate
+ , typename Inserter
+ >
+struct unique_impl
+ : first< typename fold<
+ Sequence
+ , pair< typename Inserter::state,na >
+ , protect< aux::unique_op<Predicate,typename Inserter::operation> >
+ >::type >
+{
+};
+
+template<
+ typename Sequence
+ , typename Predicate
+ , typename Inserter
+ >
+struct reverse_unique_impl
+ : first< typename reverse_fold<
+ Sequence
+ , pair< typename Inserter::state,na >
+ , protect< aux::unique_op<Predicate,typename Inserter::operation> >
+ >::type >
+{
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(3, unique)
+
+}}
+
+#endif // BOOST_MPL_UNIQUE_HPP_INCLUDED
diff --git a/boost/boost/mpl/unpack_args.hpp b/boost/boost/mpl/unpack_args.hpp
new file mode 100644
index 00000000000..85e6bf10f62
--- /dev/null
+++ b/boost/boost/mpl/unpack_args.hpp
@@ -0,0 +1,146 @@
+
+#if !defined(BOOST_PP_IS_ITERATING)
+
+///// header body
+
+#ifndef BOOST_MPL_UNPACK_ARGS_HPP_INCLUDED
+#define BOOST_MPL_UNPACK_ARGS_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/unpack_args.hpp,v $
+// $Date: 2004/09/02 15:40:42 $
+// $Revision: 1.2 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/apply.hpp>
+# include <boost/mpl/at.hpp>
+# include <boost/mpl/size.hpp>
+# include <boost/mpl/aux_/nttp_decl.hpp>
+# include <boost/mpl/aux_/lambda_spec.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 unpack_args.hpp
+# include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#else
+
+# include <boost/mpl/limits/arity.hpp>
+# include <boost/mpl/aux_/preprocessor/repeat.hpp>
+# include <boost/mpl/aux_/config/ctps.hpp>
+# include <boost/mpl/aux_/config/forwarding.hpp>
+# include <boost/preprocessor/iterate.hpp>
+# include <boost/preprocessor/cat.hpp>
+
+
+namespace boost { namespace mpl {
+
+// local macros, #undef-ined at the end of the header
+
+# define AUX778076_UNPACK(unused, i, Args) \
+ , typename at_c<Args,i>::type \
+ /**/
+
+# define AUX778076_UNPACKED_ARGS(n, Args) \
+ BOOST_MPL_PP_REPEAT(n, AUX778076_UNPACK, Args) \
+ /**/
+
+namespace aux {
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+template< int size, typename F, typename Args >
+struct unpack_args_impl;
+#else
+template< BOOST_MPL_AUX_NTTP_DECL(int, size) > struct unpack_args_impl
+{
+ template< typename F, typename Args > struct apply;
+};
+#endif
+
+#define BOOST_PP_ITERATION_PARAMS_1 \
+ (3,(0, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, <boost/mpl/unpack_args.hpp>))
+#include BOOST_PP_ITERATE()
+
+}
+
+template<
+ typename F
+ >
+struct unpack_args
+{
+ template< typename Args > struct apply
+#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)
+# if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+ : aux::unpack_args_impl< size<Args>::value,F,Args >
+# else
+ : aux::unpack_args_impl< size<Args>::value >
+ ::template apply< F,Args >
+# endif
+ {
+#else // BOOST_MPL_CFG_NO_NESTED_FORWARDING
+ {
+ typedef typename aux::unpack_args_impl<
+ size<Args>::value
+ , F
+ , Args
+ >::type type;
+#endif
+ };
+};
+
+BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args)
+
+# undef AUX778076_UNPACK
+# undef AUX778076_UNPACKED_ARGS
+
+}}
+
+#endif // BOOST_MPL_CFG_USE_PREPROCESSED_HEADERS
+#endif // BOOST_MPL_UNPACK_ARGS_HPP_INCLUDED
+
+///// iteration, depth == 1
+
+#elif BOOST_PP_ITERATION_DEPTH() == 1
+
+# define i_ BOOST_PP_FRAME_ITERATION(1)
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template< typename F, typename Args >
+struct unpack_args_impl<i_,F,Args>
+ : BOOST_PP_CAT(apply,i_)<
+ F
+ AUX778076_UNPACKED_ARGS(i_, Args)
+ >
+{
+};
+
+#else
+
+template<> struct unpack_args_impl<i_>
+{
+ template< typename F, typename Args > struct apply
+ : BOOST_PP_CAT(apply,i_)<
+ F
+ AUX778076_UNPACKED_ARGS(i_, Args)
+ >
+ {
+ };
+};
+
+#endif
+
+# undef i_
+
+#endif // BOOST_PP_IS_ITERATING
diff --git a/boost/boost/mpl/upper_bound.hpp b/boost/boost/mpl/upper_bound.hpp
new file mode 100644
index 00000000000..95df961ea4b
--- /dev/null
+++ b/boost/boost/mpl/upper_bound.hpp
@@ -0,0 +1,141 @@
+
+#ifndef BOOST_MPL_UPPER_BOUND_HPP_INCLUDED
+#define BOOST_MPL_UPPER_BOUND_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/upper_bound.hpp,v $
+// $Date: 2004/09/02 15:40:42 $
+// $Revision: 1.8 $
+
+#include <boost/mpl/less.hpp>
+#include <boost/mpl/lambda.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#if BOOST_WORKAROUND(__BORLANDC__, < 0x600)
+# define BOOST_MPL_CFG_STRIPPED_DOWN_UPPER_BOUND_IMPL
+#endif
+
+#if !defined(BOOST_MPL_CFG_STRIPPED_DOWN_UPPER_BOUND_IMPL)
+# include <boost/mpl/minus.hpp>
+# include <boost/mpl/divides.hpp>
+# include <boost/mpl/size.hpp>
+# include <boost/mpl/advance.hpp>
+# include <boost/mpl/begin_end.hpp>
+# include <boost/mpl/long.hpp>
+# include <boost/mpl/eval_if.hpp>
+# include <boost/mpl/prior.hpp>
+# include <boost/mpl/deref.hpp>
+# include <boost/mpl/apply.hpp>
+# include <boost/mpl/aux_/value_wknd.hpp>
+#else
+# include <boost/mpl/find.hpp>
+# include <boost/mpl/bind.hpp>
+#endif
+
+#include <boost/config.hpp>
+
+namespace boost { namespace mpl {
+
+#if defined(BOOST_MPL_CFG_STRIPPED_DOWN_UPPER_BOUND_IMPL)
+
+// agurt 23/oct/02: has a wrong complexity etc., but at least it works;
+// feel free to contribute a better implementation!
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+ , typename BOOST_MPL_AUX_NA_PARAM(T)
+ , typename Predicate = less<>
+ , typename pred_ = typename lambda<Predicate>::type
+ >
+struct upper_bound
+ : find_if< Sequence, bind2<pred_,T,_> >
+{
+};
+
+#else
+
+namespace aux {
+
+template<
+ typename Distance
+ , typename Predicate
+ , typename T
+ , typename DeferredIterator
+ >
+struct upper_bound_step_impl;
+
+template<
+ typename Distance
+ , typename Predicate
+ , typename T
+ , typename DeferredIterator
+ >
+struct upper_bound_step
+{
+ typedef typename eval_if<
+ Distance
+ , upper_bound_step_impl<Distance,Predicate,T,DeferredIterator>
+ , DeferredIterator
+ >::type type;
+};
+
+template<
+ typename Distance
+ , typename Predicate
+ , typename T
+ , typename DeferredIterator
+ >
+struct upper_bound_step_impl
+{
+ typedef typename divides< Distance, long_<2> >::type offset_;
+ typedef typename DeferredIterator::type iter_;
+ typedef typename advance< iter_,offset_ >::type middle_;
+ typedef typename apply2<
+ Predicate
+ , T
+ , typename deref<middle_>::type
+ >::type cond_;
+
+ typedef typename prior< minus< Distance, offset_ > >::type step_;
+ typedef upper_bound_step< offset_,Predicate,T,DeferredIterator > step_forward_;
+ typedef upper_bound_step< step_,Predicate,T,next<middle_> > step_backward_;
+ typedef typename eval_if<
+ cond_
+ , step_forward_
+ , step_backward_
+ >::type type;
+};
+
+} // namespace aux
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+ , typename BOOST_MPL_AUX_NA_PARAM(T)
+ , typename Predicate = less<>
+ >
+struct upper_bound
+{
+ private:
+ typedef typename lambda<Predicate>::type pred_;
+ typedef typename size<Sequence>::type size_;
+
+ public:
+ typedef typename aux::upper_bound_step<
+ size_,pred_,T,begin<Sequence>
+ >::type type;
+};
+
+#endif // BOOST_MPL_CFG_STRIPPED_DOWN_UPPER_BOUND_IMPL
+
+BOOST_MPL_AUX_NA_SPEC(2, upper_bound)
+
+}}
+
+#endif // BOOST_MPL_UPPER_BOUND_HPP_INCLUDED
diff --git a/boost/boost/mpl/value_type.hpp b/boost/boost/mpl/value_type.hpp
new file mode 100644
index 00000000000..5aa3a54cb92
--- /dev/null
+++ b/boost/boost/mpl/value_type.hpp
@@ -0,0 +1,42 @@
+
+#ifndef BOOST_MPL_VALUE_TYPE_HPP_INCLUDED
+#define BOOST_MPL_VALUE_TYPE_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/value_type.hpp,v $
+// $Date: 2004/12/14 22:34:44 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/value_type_fwd.hpp>
+#include <boost/mpl/sequence_tag.hpp>
+#include <boost/mpl/apply_wrap.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(AssociativeSequence)
+ , typename BOOST_MPL_AUX_NA_PARAM(T)
+ >
+struct value_type
+ : apply_wrap2<
+ value_type_impl< typename sequence_tag<AssociativeSequence>::type >
+ , AssociativeSequence, T >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2,value_type,(AssociativeSequence,T))
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, value_type)
+
+}}
+
+#endif // BOOST_MPL_VALUE_TYPE_HPP_INCLUDED
diff --git a/boost/boost/mpl/value_type_fwd.hpp b/boost/boost/mpl/value_type_fwd.hpp
new file mode 100644
index 00000000000..875a758df5e
--- /dev/null
+++ b/boost/boost/mpl/value_type_fwd.hpp
@@ -0,0 +1,25 @@
+
+#ifndef BOOST_MPL_VALUE_TYPE_FWD_HPP_INCLUDED
+#define BOOST_MPL_VALUE_TYPE_FWD_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/value_type_fwd.hpp,v $
+// $Date: 2004/09/02 15:40:42 $
+// $Revision: 1.2 $
+
+namespace boost { namespace mpl {
+
+template< typename Tag > struct value_type_impl;
+template< typename AssociativeSequence, typename T > struct value_type;
+
+}}
+
+#endif // BOOST_MPL_VALUE_TYPE_FWD_HPP_INCLUDED
diff --git a/boost/boost/mpl/vector.hpp b/boost/boost/mpl/vector.hpp
new file mode 100644
index 00000000000..56f1c955919
--- /dev/null
+++ b/boost/boost/mpl/vector.hpp
@@ -0,0 +1,57 @@
+
+#ifndef BOOST_MPL_VECTOR_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/vector.hpp,v $
+// $Date: 2004/11/28 01:58:27 $
+// $Revision: 1.8 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/limits/vector.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_VECTOR_HEADER \
+ BOOST_PP_CAT(vector, BOOST_MPL_LIMIT_VECTOR_SIZE).hpp \
+ /**/
+#else
+# define AUX778076_VECTOR_HEADER \
+ BOOST_PP_CAT(vector, BOOST_MPL_LIMIT_VECTOR_SIZE)##.hpp \
+ /**/
+#endif
+
+# include BOOST_PP_STRINGIZE(boost/mpl/vector/AUX778076_VECTOR_HEADER)
+# undef AUX778076_VECTOR_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 vector.hpp
+# include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#else
+
+# include <boost/mpl/limits/vector.hpp>
+
+# define AUX778076_SEQUENCE_NAME vector
+# define AUX778076_SEQUENCE_LIMIT BOOST_MPL_LIMIT_VECTOR_SIZE
+# include <boost/mpl/aux_/sequence_wrapper.hpp>
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#endif // BOOST_MPL_VECTOR_HPP_INCLUDED
diff --git a/boost/boost/mpl/vector/aux_/O1_size.hpp b/boost/boost/mpl/vector/aux_/O1_size.hpp
new file mode 100644
index 00000000000..2bc734233a8
--- /dev/null
+++ b/boost/boost/mpl/vector/aux_/O1_size.hpp
@@ -0,0 +1,56 @@
+
+#ifndef BOOST_MPL_VECTOR_AUX_O1_SIZE_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/vector/aux_/O1_size.hpp,v $
+// $Date: 2004/09/04 01:33:47 $
+// $Revision: 1.5 $
+
+#include <boost/mpl/O1_size_fwd.hpp>
+#include <boost/mpl/minus.hpp>
+#include <boost/mpl/long.hpp>
+#include <boost/mpl/vector/aux_/tag.hpp>
+#include <boost/mpl/aux_/config/typeof.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+
+namespace boost { namespace mpl {
+
+#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
+
+template<>
+struct O1_size_impl< aux::vector_tag >
+{
+ template< typename Vector > struct apply
+ : Vector::size
+ {
+ };
+};
+
+#else
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template< long N >
+struct O1_size_impl< aux::vector_tag<N> >
+{
+ template< typename Vector > struct apply
+ : mpl::long_<N>
+ {
+ };
+};
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES
+
+}}
+
+#endif // BOOST_MPL_VECTOR_AUX_O1_SIZE_HPP_INCLUDED
diff --git a/boost/boost/mpl/vector/aux_/at.hpp b/boost/boost/mpl/vector/aux_/at.hpp
new file mode 100644
index 00000000000..a3276b409df
--- /dev/null
+++ b/boost/boost/mpl/vector/aux_/at.hpp
@@ -0,0 +1,116 @@
+
+#ifndef BOOST_MPL_VECTOR_AUX_AT_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_AUX_AT_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/vector/aux_/at.hpp,v $
+// $Date: 2004/12/20 19:35:33 $
+// $Revision: 1.6 $
+
+#include <boost/mpl/at_fwd.hpp>
+#include <boost/mpl/vector/aux_/tag.hpp>
+#include <boost/mpl/long.hpp>
+#include <boost/mpl/void.hpp>
+#include <boost/mpl/aux_/nttp_decl.hpp>
+#include <boost/mpl/aux_/type_wrapper.hpp>
+#include <boost/mpl/aux_/value_wknd.hpp>
+#include <boost/mpl/aux_/config/typeof.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+
+namespace boost { namespace mpl {
+
+#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
+
+template< typename Vector, long n_ >
+struct v_at_impl
+{
+ typedef long_< (Vector::lower_bound_::value + n_) > index_;
+ typedef __typeof__( Vector::item_(index_()) ) type;
+};
+
+
+template< typename Vector, long n_ >
+struct v_at
+ : aux::wrapped_type< typename v_at_impl<Vector,n_>::type >
+{
+};
+
+template<>
+struct at_impl< aux::vector_tag >
+{
+ template< typename Vector, typename N > struct apply
+ : v_at<
+ Vector
+ , BOOST_MPL_AUX_VALUE_WKND(N)::value
+ >
+ {
+ };
+};
+
+#else
+
+# if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
+ && !defined(BOOST_MPL_CFG_NO_NONTYPE_TEMPLATE_PARTIAL_SPEC)
+
+template< typename Vector, BOOST_MPL_AUX_NTTP_DECL(long, n_) > struct v_at;
+
+template< BOOST_MPL_AUX_NTTP_DECL(long, n_) >
+struct at_impl< aux::vector_tag<n_> >
+{
+ template< typename Vector, typename N > struct apply
+#if !defined(__BORLANDC__)
+ : v_at<
+ Vector
+ , BOOST_MPL_AUX_VALUE_WKND(N)::value
+ >
+ {
+#else
+ {
+ typedef typename v_at<
+ Vector
+ , BOOST_MPL_AUX_VALUE_WKND(N)::value
+ >::type type;
+#endif
+ };
+};
+
+# else
+
+namespace aux {
+
+template< BOOST_MPL_AUX_NTTP_DECL(long, n_) > struct v_at_impl
+{
+ template< typename V > struct result_;
+};
+
+// to work around ETI, etc.
+template<> struct v_at_impl<-1>
+{
+ template< typename V > struct result_
+ {
+ typedef void_ type;
+ };
+};
+
+} // namespace aux
+
+template< typename T, BOOST_MPL_AUX_NTTP_DECL(long, n_) >
+struct v_at
+ : aux::v_at_impl<n_>::template result_<T>
+{
+};
+
+# endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES
+
+}}
+
+#endif // BOOST_MPL_VECTOR_AUX_AT_HPP_INCLUDED
diff --git a/boost/boost/mpl/vector/aux_/back.hpp b/boost/boost/mpl/vector/aux_/back.hpp
new file mode 100644
index 00000000000..a067b29634f
--- /dev/null
+++ b/boost/boost/mpl/vector/aux_/back.hpp
@@ -0,0 +1,59 @@
+
+#ifndef BOOST_MPL_VECTOR_AUX_BACK_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_AUX_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/vector/aux_/back.hpp,v $
+// $Date: 2004/09/02 15:41:19 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/back_fwd.hpp>
+#include <boost/mpl/next_prior.hpp>
+#include <boost/mpl/vector/aux_/at.hpp>
+#include <boost/mpl/vector/aux_/tag.hpp>
+#include <boost/mpl/aux_/config/typeof.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+
+namespace boost { namespace mpl {
+
+#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
+
+template<>
+struct back_impl< aux::vector_tag >
+{
+ template< typename Vector > struct apply
+ : v_at<
+ Vector
+ , prior<typename Vector::size>::type::value
+ >
+ {
+ };
+};
+
+#else
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template< long n_ >
+struct back_impl< aux::vector_tag<n_> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::back type;
+ };
+};
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES
+
+}}
+
+#endif // BOOST_MPL_VECTOR_AUX_BACK_HPP_INCLUDED
diff --git a/boost/boost/mpl/vector/aux_/begin_end.hpp b/boost/boost/mpl/vector/aux_/begin_end.hpp
new file mode 100644
index 00000000000..976fa1275a3
--- /dev/null
+++ b/boost/boost/mpl/vector/aux_/begin_end.hpp
@@ -0,0 +1,49 @@
+
+#ifndef BOOST_MPL_VECTOR_AUX_BEGIN_END_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/vector/aux_/begin_end.hpp,v $
+// $Date: 2004/09/02 15:41:19 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/aux_/config/typeof.hpp>
+
+#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
+
+# include <boost/mpl/begin_end_fwd.hpp>
+# include <boost/mpl/vector/aux_/iterator.hpp>
+# include <boost/mpl/vector/aux_/tag.hpp>
+
+namespace boost { namespace mpl {
+
+template<>
+struct begin_impl< aux::vector_tag >
+{
+ template< typename Vector > struct apply
+ {
+ typedef v_iter<Vector,0> type;
+ };
+};
+
+template<>
+struct end_impl< aux::vector_tag >
+{
+ template< typename Vector > struct apply
+ {
+ typedef v_iter<Vector,Vector::size::value> type;
+ };
+};
+
+}}
+
+#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES
+
+#endif // BOOST_MPL_VECTOR_AUX_BEGIN_END_HPP_INCLUDED
diff --git a/boost/boost/mpl/vector/aux_/clear.hpp b/boost/boost/mpl/vector/aux_/clear.hpp
new file mode 100644
index 00000000000..5c468aea925
--- /dev/null
+++ b/boost/boost/mpl/vector/aux_/clear.hpp
@@ -0,0 +1,55 @@
+
+#ifndef BOOST_MPL_VECTOR_AUX_CLEAR_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/vector/aux_/clear.hpp,v $
+// $Date: 2004/09/02 15:41:19 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/clear_fwd.hpp>
+#include <boost/mpl/vector/aux_/vector0.hpp>
+#include <boost/mpl/vector/aux_/tag.hpp>
+#include <boost/mpl/aux_/config/typeof.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+
+namespace boost { namespace mpl {
+
+#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
+
+template<>
+struct clear_impl< aux::vector_tag >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<> type;
+ };
+};
+
+#else
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template< long N >
+struct clear_impl< aux::vector_tag<N> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<> type;
+ };
+};
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES
+
+}}
+
+#endif // BOOST_MPL_VECTOR_AUX_CLEAR_HPP_INCLUDED
diff --git a/boost/boost/mpl/vector/aux_/empty.hpp b/boost/boost/mpl/vector/aux_/empty.hpp
new file mode 100644
index 00000000000..dfb986a9130
--- /dev/null
+++ b/boost/boost/mpl/vector/aux_/empty.hpp
@@ -0,0 +1,68 @@
+
+#ifndef BOOST_MPL_VECTOR_AUX_EMPTY_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/vector/aux_/empty.hpp,v $
+// $Date: 2004/09/02 15:41:19 $
+// $Revision: 1.5 $
+
+#include <boost/mpl/empty_fwd.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/vector/aux_/tag.hpp>
+#include <boost/mpl/aux_/config/typeof.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace mpl {
+
+#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
+
+template<>
+struct empty_impl< aux::vector_tag >
+{
+ template< typename Vector > struct apply
+ : is_same<
+ typename Vector::lower_bound_
+ , typename Vector::upper_bound_
+ >
+ {
+ };
+};
+
+#else
+
+template<>
+struct empty_impl< aux::vector_tag<0> >
+{
+ template< typename Vector > struct apply
+ : true_
+ {
+ };
+};
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template< long N >
+struct empty_impl< aux::vector_tag<N> >
+{
+ template< typename Vector > struct apply
+ : false_
+ {
+ };
+};
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES
+
+}}
+
+#endif // BOOST_MPL_VECTOR_AUX_EMPTY_HPP_INCLUDED
diff --git a/boost/boost/mpl/vector/aux_/front.hpp b/boost/boost/mpl/vector/aux_/front.hpp
new file mode 100644
index 00000000000..7e54e68ec2f
--- /dev/null
+++ b/boost/boost/mpl/vector/aux_/front.hpp
@@ -0,0 +1,56 @@
+
+#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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/vector/aux_/front.hpp,v $
+// $Date: 2004/09/02 15:41:19 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/front_fwd.hpp>
+#include <boost/mpl/vector/aux_/at.hpp>
+#include <boost/mpl/vector/aux_/tag.hpp>
+#include <boost/mpl/aux_/nttp_decl.hpp>
+#include <boost/mpl/aux_/config/typeof.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+
+namespace boost { namespace mpl {
+
+#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
+
+template<>
+struct front_impl< aux::vector_tag >
+{
+ template< typename Vector > struct apply
+ : v_at<Vector,0>
+ {
+ };
+};
+
+#else
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template< BOOST_MPL_AUX_NTTP_DECL(long, n_) >
+struct front_impl< aux::vector_tag<n_> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::item0 type;
+ };
+};
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES
+
+}}
+
+#endif // BOOST_MPL_LIST_AUX_FRONT_HPP_INCLUDED
diff --git a/boost/boost/mpl/vector/aux_/include_preprocessed.hpp b/boost/boost/mpl/vector/aux_/include_preprocessed.hpp
new file mode 100644
index 00000000000..2a084c3f661
--- /dev/null
+++ b/boost/boost/mpl/vector/aux_/include_preprocessed.hpp
@@ -0,0 +1,55 @@
+
+// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION
+
+// Copyright Aleksey Gurtovoy 2000-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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/vector/aux_/include_preprocessed.hpp,v $
+// $Date: 2006/11/09 01:21:03 $
+// $Revision: 1.4.8.1 $
+
+#include <boost/mpl/aux_/config/typeof.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+#include <boost/mpl/aux_/config/preprocessor.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/stringize.hpp>
+
+#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
+# define AUX778076_INCLUDE_DIR typeof_based
+#elif defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
+ || defined(BOOST_MPL_CFG_NO_NONTYPE_TEMPLATE_PARTIAL_SPEC)
+# define AUX778076_INCLUDE_DIR no_ctps
+#else
+# define AUX778076_INCLUDE_DIR plain
+#endif
+
+#if !defined(BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING)
+# define AUX778076_HEADER \
+ AUX778076_INCLUDE_DIR/BOOST_MPL_PREPROCESSED_HEADER \
+/**/
+#else
+# define AUX778076_HEADER \
+ BOOST_PP_CAT(AUX778076_INCLUDE_DIR,/)##BOOST_MPL_PREPROCESSED_HEADER \
+/**/
+#endif
+
+
+#if BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(700))
+# define AUX778076_INCLUDE_STRING BOOST_PP_STRINGIZE(boost/mpl/vector/aux_/preprocessed/AUX778076_HEADER)
+# include AUX778076_INCLUDE_STRING
+# undef AUX778076_INCLUDE_STRING
+#else
+# include BOOST_PP_STRINGIZE(boost/mpl/vector/aux_/preprocessed/AUX778076_HEADER)
+#endif
+
+# undef AUX778076_HEADER
+# undef AUX778076_INCLUDE_DIR
+
+#undef BOOST_MPL_PREPROCESSED_HEADER
diff --git a/boost/boost/mpl/vector/aux_/item.hpp b/boost/boost/mpl/vector/aux_/item.hpp
new file mode 100644
index 00000000000..84673463f7d
--- /dev/null
+++ b/boost/boost/mpl/vector/aux_/item.hpp
@@ -0,0 +1,103 @@
+
+#ifndef BOOST_MPL_VECTOR_AUX_ITEM_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_AUX_ITEM_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/vector/aux_/item.hpp,v $
+// $Date: 2005/05/15 00:39:04 $
+// $Revision: 1.8 $
+
+#include <boost/mpl/long.hpp>
+#include <boost/mpl/void.hpp>
+#include <boost/mpl/next_prior.hpp>
+#include <boost/mpl/aux_/type_wrapper.hpp>
+#include <boost/mpl/aux_/config/typeof.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+
+namespace boost { namespace mpl {
+
+#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
+
+template<
+ typename T
+ , typename Base
+ , int at_front = 0
+ >
+struct v_item
+ : Base
+{
+ typedef typename Base::upper_bound_ index_;
+ typedef typename next<index_>::type upper_bound_;
+ typedef typename next<typename Base::size>::type size;
+ typedef Base base;
+ typedef v_item type;
+
+ // agurt 10/sep/04: MWCW <= 9.3 workaround here and below; the compiler
+ // breaks if using declaration comes _before_ the new overload
+ static aux::type_wrapper<T> item_(index_);
+ using Base::item_;
+};
+
+template<
+ typename T
+ , typename Base
+ >
+struct v_item<T,Base,1>
+ : Base
+{
+ typedef typename prior<typename Base::lower_bound_>::type index_;
+ typedef index_ lower_bound_;
+ typedef typename next<typename Base::size>::type size;
+ typedef Base base;
+ typedef v_item type;
+
+ static aux::type_wrapper<T> item_(index_);
+ using Base::item_;
+};
+
+// "erasure" item
+template<
+ typename Base
+ , int at_front
+ >
+struct v_mask
+ : Base
+{
+ typedef typename prior<typename Base::upper_bound_>::type index_;
+ typedef index_ upper_bound_;
+ typedef typename prior<typename Base::size>::type size;
+ typedef Base base;
+ typedef v_mask type;
+
+ static aux::type_wrapper<void_> item_(index_);
+ using Base::item_;
+};
+
+template<
+ typename Base
+ >
+struct v_mask<Base,1>
+ : Base
+{
+ typedef typename Base::lower_bound_ index_;
+ typedef typename next<index_>::type lower_bound_;
+ typedef typename prior<typename Base::size>::type size;
+ typedef Base base;
+ typedef v_mask type;
+
+ static aux::type_wrapper<void_> item_(index_);
+ using Base::item_;
+};
+
+#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES
+
+}}
+
+#endif // BOOST_MPL_VECTOR_AUX_ITEM_HPP_INCLUDED
diff --git a/boost/boost/mpl/vector/aux_/iterator.hpp b/boost/boost/mpl/vector/aux_/iterator.hpp
new file mode 100644
index 00000000000..493048324a6
--- /dev/null
+++ b/boost/boost/mpl/vector/aux_/iterator.hpp
@@ -0,0 +1,130 @@
+
+#ifndef BOOST_MPL_AUX_VECTOR_ITERATOR_HPP_INCLUDED
+#define BOOST_MPL_AUX_VECTOR_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/vector/aux_/iterator.hpp,v $
+// $Date: 2004/11/28 01:52:12 $
+// $Revision: 1.11 $
+
+#include <boost/mpl/vector/aux_/at.hpp>
+#include <boost/mpl/iterator_tags.hpp>
+#include <boost/mpl/plus.hpp>
+#include <boost/mpl/minus.hpp>
+#include <boost/mpl/advance_fwd.hpp>
+#include <boost/mpl/distance_fwd.hpp>
+#include <boost/mpl/next.hpp>
+#include <boost/mpl/prior.hpp>
+#include <boost/mpl/aux_/nttp_decl.hpp>
+#include <boost/mpl/aux_/value_wknd.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+namespace boost { namespace mpl {
+
+template<
+ typename Vector
+ , BOOST_MPL_AUX_NTTP_DECL(long, n_)
+ >
+struct v_iter
+{
+ typedef aux::v_iter_tag tag;
+ typedef random_access_iterator_tag category;
+ typedef typename v_at<Vector,n_>::type type;
+
+ typedef Vector vector_;
+ typedef mpl::long_<n_> pos;
+
+#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+ enum {
+ next_ = n_ + 1
+ , prior_ = n_ - 1
+ , pos_ = n_
+ };
+
+ typedef v_iter<Vector,next_> next;
+ typedef v_iter<Vector,prior_> prior;
+#endif
+
+};
+
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template<
+ typename Vector
+ , BOOST_MPL_AUX_NTTP_DECL(long, n_)
+ >
+struct next< v_iter<Vector,n_> >
+{
+ typedef v_iter<Vector,(n_ + 1)> type;
+};
+
+template<
+ typename Vector
+ , BOOST_MPL_AUX_NTTP_DECL(long, n_)
+ >
+struct prior< v_iter<Vector,n_> >
+{
+ typedef v_iter<Vector,(n_ - 1)> type;
+};
+
+template<
+ typename Vector
+ , BOOST_MPL_AUX_NTTP_DECL(long, n_)
+ , typename Distance
+ >
+struct advance< v_iter<Vector,n_>,Distance>
+{
+ typedef v_iter<
+ Vector
+ , (n_ + BOOST_MPL_AUX_NESTED_VALUE_WKND(long, Distance))
+ > type;
+};
+
+template<
+ typename Vector
+ , BOOST_MPL_AUX_NTTP_DECL(long, n_)
+ , BOOST_MPL_AUX_NTTP_DECL(long, m_)
+ >
+struct distance< v_iter<Vector,n_>, v_iter<Vector,m_> >
+ : mpl::long_<(m_ - n_)>
+{
+};
+
+#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+template<> struct advance_impl<aux::v_iter_tag>
+{
+ template< typename Iterator, typename N > struct apply
+ {
+ enum { pos_ = Iterator::pos_, n_ = N::value };
+ typedef v_iter<
+ typename Iterator::vector_
+ , (pos_ + n_)
+ > type;
+ };
+};
+
+template<> struct distance_impl<aux::v_iter_tag>
+{
+ template< typename Iter1, typename Iter2 > struct apply
+ {
+ enum { pos1_ = Iter1::pos_, pos2_ = Iter2::pos_ };
+ typedef long_<( pos2_ - pos1_ )> type;
+ BOOST_STATIC_CONSTANT(long, value = ( pos2_ - pos1_ ));
+ };
+};
+
+#endif
+
+}}
+
+#endif // BOOST_MPL_AUX_VECTOR_ITERATOR_HPP_INCLUDED
diff --git a/boost/boost/mpl/vector/aux_/numbered.hpp b/boost/boost/mpl/vector/aux_/numbered.hpp
new file mode 100644
index 00000000000..29348e357b4
--- /dev/null
+++ b/boost/boost/mpl/vector/aux_/numbered.hpp
@@ -0,0 +1,218 @@
+
+// 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/vector/aux_/numbered.hpp,v $
+// $Date: 2004/09/02 15:41:19 $
+// $Revision: 1.8 $
+
+#include <boost/preprocessor/enum_params.hpp>
+#include <boost/preprocessor/enum_shifted_params.hpp>
+#include <boost/preprocessor/comma_if.hpp>
+#include <boost/preprocessor/repeat.hpp>
+#include <boost/preprocessor/dec.hpp>
+#include <boost/preprocessor/cat.hpp>
+
+#define i_ BOOST_PP_FRAME_ITERATION(1)
+
+#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
+
+# define AUX778076_VECTOR_TAIL(vector, i_, T) \
+ BOOST_PP_CAT(vector,i_)< \
+ BOOST_PP_ENUM_PARAMS(i_, T) \
+ > \
+ /**/
+
+#if i_ > 0
+template<
+ BOOST_PP_ENUM_PARAMS(i_, typename T)
+ >
+struct BOOST_PP_CAT(vector,i_)
+ : v_item<
+ BOOST_PP_CAT(T,BOOST_PP_DEC(i_))
+ , AUX778076_VECTOR_TAIL(vector,BOOST_PP_DEC(i_),T)
+ >
+{
+ typedef BOOST_PP_CAT(vector,i_) type;
+};
+#endif
+
+# undef AUX778076_VECTOR_TAIL
+
+#else // "brute force" implementation
+
+# if i_ > 0
+
+template<
+ BOOST_PP_ENUM_PARAMS(i_, typename T)
+ >
+struct BOOST_PP_CAT(vector,i_)
+{
+ typedef aux::vector_tag<i_> tag;
+ typedef BOOST_PP_CAT(vector,i_) type;
+
+# define AUX778076_VECTOR_ITEM(unused, i_, unused2) \
+ typedef BOOST_PP_CAT(T,i_) BOOST_PP_CAT(item,i_); \
+ /**/
+
+ BOOST_PP_REPEAT(i_, AUX778076_VECTOR_ITEM, unused)
+# undef AUX778076_VECTOR_ITEM
+ typedef void_ BOOST_PP_CAT(item,i_);
+ typedef BOOST_PP_CAT(T,BOOST_PP_DEC(i_)) back;
+
+ // Borland forces us to use 'type' here (instead of the class name)
+ typedef v_iter<type,0> begin;
+ typedef v_iter<type,i_> end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<BOOST_PP_DEC(i_)> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef BOOST_PP_CAT(vector,i_)<
+ T
+ BOOST_PP_COMMA_IF(BOOST_PP_DEC(i_))
+ BOOST_PP_ENUM_PARAMS(BOOST_PP_DEC(i_), typename Vector::item)
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<i_> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef BOOST_PP_CAT(vector,BOOST_PP_DEC(i_))<
+ BOOST_PP_ENUM_SHIFTED_PARAMS(i_, typename Vector::item)
+ > type;
+ };
+};
+
+
+template<>
+struct push_back_impl< aux::vector_tag<BOOST_PP_DEC(i_)> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef BOOST_PP_CAT(vector,i_)<
+ BOOST_PP_ENUM_PARAMS(BOOST_PP_DEC(i_), typename Vector::item)
+ BOOST_PP_COMMA_IF(BOOST_PP_DEC(i_))
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<i_> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef BOOST_PP_CAT(vector,BOOST_PP_DEC(i_))<
+ BOOST_PP_ENUM_PARAMS(BOOST_PP_DEC(i_), typename Vector::item)
+ > type;
+ };
+};
+
+# endif // i_ > 0
+
+# if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
+ && !defined(BOOST_MPL_CFG_NO_NONTYPE_TEMPLATE_PARTIAL_SPEC)
+
+template< typename V >
+struct v_at<V,i_>
+{
+ typedef typename V::BOOST_PP_CAT(item,i_) type;
+};
+
+# else
+
+namespace aux {
+template<> struct v_at_impl<i_>
+{
+ template< typename V_ > struct result_
+ {
+ typedef typename V_::BOOST_PP_CAT(item,i_) type;
+ };
+};
+}
+
+template<>
+struct at_impl< aux::vector_tag<i_> >
+{
+ template< typename V_, typename N > struct apply
+ {
+ typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+ ::template result_<V_>::type type;
+ };
+};
+
+#if i_ > 0
+template<>
+struct front_impl< aux::vector_tag<i_> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::item0 type;
+ };
+};
+
+template<>
+struct back_impl< aux::vector_tag<i_> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::back type;
+ };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<i_> >
+{
+ template< typename Vector > struct apply
+ : false_
+ {
+ };
+};
+#endif
+
+template<>
+struct size_impl< aux::vector_tag<i_> >
+{
+ template< typename Vector > struct apply
+ : long_<i_>
+ {
+ };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<i_> >
+ : size_impl< aux::vector_tag<i_> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<i_> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<> type;
+ };
+};
+
+# endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES
+
+#undef i_
+
+#endif // BOOST_PP_IS_ITERATING
diff --git a/boost/boost/mpl/vector/aux_/numbered_c.hpp b/boost/boost/mpl/vector/aux_/numbered_c.hpp
new file mode 100644
index 00000000000..1ed78acd354
--- /dev/null
+++ b/boost/boost/mpl/vector/aux_/numbered_c.hpp
@@ -0,0 +1,77 @@
+
+// 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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/vector/aux_/numbered_c.hpp,v $
+// $Date: 2004/11/28 01:52:12 $
+// $Revision: 1.6 $
+
+#include <boost/preprocessor/enum_params.hpp>
+#include <boost/preprocessor/enum_shifted_params.hpp>
+#include <boost/preprocessor/comma_if.hpp>
+#include <boost/preprocessor/repeat.hpp>
+#include <boost/preprocessor/dec.hpp>
+#include <boost/preprocessor/cat.hpp>
+
+#define i_ BOOST_PP_FRAME_ITERATION(1)
+
+#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
+
+# define AUX778076_VECTOR_TAIL(vector, i_, C) \
+ BOOST_PP_CAT(BOOST_PP_CAT(vector,i_),_c)<T \
+ BOOST_PP_COMMA_IF(i_) BOOST_PP_ENUM_PARAMS(i_, C) \
+ > \
+ /**/
+
+#if i_ > 0
+template<
+ typename T
+ , BOOST_PP_ENUM_PARAMS(i_, T C)
+ >
+struct BOOST_PP_CAT(BOOST_PP_CAT(vector,i_),_c)
+ : v_item<
+ integral_c<T,BOOST_PP_CAT(C,BOOST_PP_DEC(i_))>
+ , AUX778076_VECTOR_TAIL(vector,BOOST_PP_DEC(i_),C)
+ >
+{
+ typedef BOOST_PP_CAT(BOOST_PP_CAT(vector,i_),_c) type;
+ typedef T value_type;
+};
+#endif
+
+# undef AUX778076_VECTOR_TAIL
+
+#else // "brute force" implementation
+
+# define AUX778076_VECTOR_C_PARAM_FUNC(unused, i_, param) \
+ BOOST_PP_COMMA_IF(i_) \
+ integral_c<T,BOOST_PP_CAT(param,i_)> \
+ /**/
+
+template<
+ typename T
+ , BOOST_PP_ENUM_PARAMS(i_, T C)
+ >
+struct BOOST_PP_CAT(BOOST_PP_CAT(vector,i_),_c)
+ : BOOST_PP_CAT(vector,i_)< BOOST_PP_REPEAT(i_,AUX778076_VECTOR_C_PARAM_FUNC,C) >
+{
+ typedef BOOST_PP_CAT(BOOST_PP_CAT(vector,i_),_c) type;
+ typedef T value_type;
+};
+
+# undef AUX778076_VECTOR_C_PARAM_FUNC
+
+#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES
+
+#undef i_
+
+#endif // BOOST_PP_IS_ITERATING
diff --git a/boost/boost/mpl/vector/aux_/pop_back.hpp b/boost/boost/mpl/vector/aux_/pop_back.hpp
new file mode 100644
index 00000000000..ebca7767730
--- /dev/null
+++ b/boost/boost/mpl/vector/aux_/pop_back.hpp
@@ -0,0 +1,40 @@
+
+#ifndef BOOST_MPL_VECTOR_AUX_POP_BACK_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_AUX_POP_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/vector/aux_/pop_back.hpp,v $
+// $Date: 2004/09/02 15:41:19 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/pop_back_fwd.hpp>
+#include <boost/mpl/aux_/config/typeof.hpp>
+
+#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
+
+# include <boost/mpl/vector/aux_/item.hpp>
+# include <boost/mpl/vector/aux_/tag.hpp>
+
+namespace boost { namespace mpl {
+
+template<>
+struct pop_back_impl< aux::vector_tag >
+{
+ template< typename Vector > struct apply
+ {
+ typedef v_mask<Vector,0> type;
+ };
+};
+
+}}
+
+#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES
+
+#endif // BOOST_MPL_VECTOR_AUX_POP_BACK_HPP_INCLUDED
diff --git a/boost/boost/mpl/vector/aux_/pop_front.hpp b/boost/boost/mpl/vector/aux_/pop_front.hpp
new file mode 100644
index 00000000000..25fd86927fe
--- /dev/null
+++ b/boost/boost/mpl/vector/aux_/pop_front.hpp
@@ -0,0 +1,40 @@
+
+#ifndef BOOST_MPL_VECTOR_AUX_POP_FRONT_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/vector/aux_/pop_front.hpp,v $
+// $Date: 2004/09/02 15:41:19 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/pop_front_fwd.hpp>
+#include <boost/mpl/aux_/config/typeof.hpp>
+
+#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
+
+# include <boost/mpl/vector/aux_/item.hpp>
+# include <boost/mpl/vector/aux_/tag.hpp>
+
+namespace boost { namespace mpl {
+
+template<>
+struct pop_front_impl< aux::vector_tag >
+{
+ template< typename Vector > struct apply
+ {
+ typedef v_mask<Vector,1> type;
+ };
+};
+
+}}
+
+#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES
+
+#endif // BOOST_MPL_VECTOR_AUX_POP_FRONT_HPP_INCLUDED
diff --git a/boost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector10.hpp b/boost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector10.hpp
new file mode 100644
index 00000000000..c79a1ac6061
--- /dev/null
+++ b/boost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector10.hpp
@@ -0,0 +1,1528 @@
+
+// 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/vector/vector10.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+namespace aux {
+template<> struct v_at_impl<0>
+{
+ template< typename V_ > struct result_
+ {
+ typedef typename V_::item0 type;
+ };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<0> >
+{
+ template< typename V_, typename N > struct apply
+ {
+ typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+ ::template result_<V_>::type type;
+ };
+};
+
+template<>
+struct size_impl< aux::vector_tag<0> >
+{
+ template< typename Vector > struct apply
+ : long_<0>
+ {
+ };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<0> >
+ : size_impl< aux::vector_tag<0> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<0> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<> type;
+ };
+};
+
+template<
+ typename T0
+ >
+struct vector1
+{
+ typedef aux::vector_tag<1> tag;
+ typedef vector1 type;
+ typedef T0 item0;
+ typedef void_ item1;
+ typedef T0 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,1 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<0> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector1<
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<1> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<
+
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<0> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector1<
+
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<1> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<
+
+ > type;
+ };
+};
+
+namespace aux {
+template<> struct v_at_impl<1>
+{
+ template< typename V_ > struct result_
+ {
+ typedef typename V_::item1 type;
+ };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<1> >
+{
+ template< typename V_, typename N > struct apply
+ {
+ typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+ ::template result_<V_>::type type;
+ };
+};
+
+template<>
+struct front_impl< aux::vector_tag<1> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::item0 type;
+ };
+};
+
+template<>
+struct back_impl< aux::vector_tag<1> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::back type;
+ };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<1> >
+{
+ template< typename Vector > struct apply
+ : false_
+ {
+ };
+};
+
+template<>
+struct size_impl< aux::vector_tag<1> >
+{
+ template< typename Vector > struct apply
+ : long_<1>
+ {
+ };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<1> >
+ : size_impl< aux::vector_tag<1> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<1> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<> type;
+ };
+};
+
+template<
+ typename T0, typename T1
+ >
+struct vector2
+{
+ typedef aux::vector_tag<2> tag;
+ typedef vector2 type;
+ typedef T0 item0;
+ typedef T1 item1;
+
+
+ typedef void_ item2;
+ typedef T1 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,2 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<1> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector2<
+ T
+ ,
+ typename Vector::item0
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<2> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector1<
+ typename Vector::item1
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<1> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector2<
+ typename Vector::item0
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<2> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector1<
+ typename Vector::item0
+ > type;
+ };
+};
+
+namespace aux {
+template<> struct v_at_impl<2>
+{
+ template< typename V_ > struct result_
+ {
+ typedef typename V_::item2 type;
+ };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<2> >
+{
+ template< typename V_, typename N > struct apply
+ {
+ typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+ ::template result_<V_>::type type;
+ };
+};
+
+template<>
+struct front_impl< aux::vector_tag<2> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::item0 type;
+ };
+};
+
+template<>
+struct back_impl< aux::vector_tag<2> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::back type;
+ };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<2> >
+{
+ template< typename Vector > struct apply
+ : false_
+ {
+ };
+};
+
+template<>
+struct size_impl< aux::vector_tag<2> >
+{
+ template< typename Vector > struct apply
+ : long_<2>
+ {
+ };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<2> >
+ : size_impl< aux::vector_tag<2> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<2> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<> type;
+ };
+};
+
+template<
+ typename T0, typename T1, typename T2
+ >
+struct vector3
+{
+ typedef aux::vector_tag<3> tag;
+ typedef vector3 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+
+
+ typedef void_ item3;
+ typedef T2 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,3 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<2> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector3<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<3> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector2<
+ typename Vector::item1, typename Vector::item2
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<2> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector3<
+ typename Vector::item0, typename Vector::item1
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<3> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector2<
+ typename Vector::item0, typename Vector::item1
+ > type;
+ };
+};
+
+namespace aux {
+template<> struct v_at_impl<3>
+{
+ template< typename V_ > struct result_
+ {
+ typedef typename V_::item3 type;
+ };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<3> >
+{
+ template< typename V_, typename N > struct apply
+ {
+ typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+ ::template result_<V_>::type type;
+ };
+};
+
+template<>
+struct front_impl< aux::vector_tag<3> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::item0 type;
+ };
+};
+
+template<>
+struct back_impl< aux::vector_tag<3> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::back type;
+ };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<3> >
+{
+ template< typename Vector > struct apply
+ : false_
+ {
+ };
+};
+
+template<>
+struct size_impl< aux::vector_tag<3> >
+{
+ template< typename Vector > struct apply
+ : long_<3>
+ {
+ };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<3> >
+ : size_impl< aux::vector_tag<3> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<3> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<> type;
+ };
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3
+ >
+struct vector4
+{
+ typedef aux::vector_tag<4> tag;
+ typedef vector4 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+
+
+ typedef void_ item4;
+ typedef T3 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,4 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<3> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector4<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<4> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector3<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<3> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector4<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<4> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector3<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2
+ > type;
+ };
+};
+
+namespace aux {
+template<> struct v_at_impl<4>
+{
+ template< typename V_ > struct result_
+ {
+ typedef typename V_::item4 type;
+ };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<4> >
+{
+ template< typename V_, typename N > struct apply
+ {
+ typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+ ::template result_<V_>::type type;
+ };
+};
+
+template<>
+struct front_impl< aux::vector_tag<4> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::item0 type;
+ };
+};
+
+template<>
+struct back_impl< aux::vector_tag<4> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::back type;
+ };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<4> >
+{
+ template< typename Vector > struct apply
+ : false_
+ {
+ };
+};
+
+template<>
+struct size_impl< aux::vector_tag<4> >
+{
+ template< typename Vector > struct apply
+ : long_<4>
+ {
+ };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<4> >
+ : size_impl< aux::vector_tag<4> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<4> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<> type;
+ };
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ >
+struct vector5
+{
+ typedef aux::vector_tag<5> tag;
+ typedef vector5 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+
+
+ typedef void_ item5;
+ typedef T4 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,5 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<4> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector5<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<5> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector4<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<4> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector5<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<5> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector4<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ > type;
+ };
+};
+
+namespace aux {
+template<> struct v_at_impl<5>
+{
+ template< typename V_ > struct result_
+ {
+ typedef typename V_::item5 type;
+ };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<5> >
+{
+ template< typename V_, typename N > struct apply
+ {
+ typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+ ::template result_<V_>::type type;
+ };
+};
+
+template<>
+struct front_impl< aux::vector_tag<5> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::item0 type;
+ };
+};
+
+template<>
+struct back_impl< aux::vector_tag<5> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::back type;
+ };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<5> >
+{
+ template< typename Vector > struct apply
+ : false_
+ {
+ };
+};
+
+template<>
+struct size_impl< aux::vector_tag<5> >
+{
+ template< typename Vector > struct apply
+ : long_<5>
+ {
+ };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<5> >
+ : size_impl< aux::vector_tag<5> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<5> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<> type;
+ };
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct vector6
+{
+ typedef aux::vector_tag<6> tag;
+ typedef vector6 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+
+
+ typedef void_ item6;
+ typedef T5 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,6 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<5> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector6<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<6> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector5<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<5> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector6<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<6> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector5<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4
+ > type;
+ };
+};
+
+namespace aux {
+template<> struct v_at_impl<6>
+{
+ template< typename V_ > struct result_
+ {
+ typedef typename V_::item6 type;
+ };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<6> >
+{
+ template< typename V_, typename N > struct apply
+ {
+ typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+ ::template result_<V_>::type type;
+ };
+};
+
+template<>
+struct front_impl< aux::vector_tag<6> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::item0 type;
+ };
+};
+
+template<>
+struct back_impl< aux::vector_tag<6> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::back type;
+ };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<6> >
+{
+ template< typename Vector > struct apply
+ : false_
+ {
+ };
+};
+
+template<>
+struct size_impl< aux::vector_tag<6> >
+{
+ template< typename Vector > struct apply
+ : long_<6>
+ {
+ };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<6> >
+ : size_impl< aux::vector_tag<6> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<6> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<> type;
+ };
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6
+ >
+struct vector7
+{
+ typedef aux::vector_tag<7> tag;
+ typedef vector7 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+
+
+ typedef void_ item7;
+ typedef T6 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,7 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<6> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector7<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<7> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector6<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<6> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector7<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<7> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector6<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ > type;
+ };
+};
+
+namespace aux {
+template<> struct v_at_impl<7>
+{
+ template< typename V_ > struct result_
+ {
+ typedef typename V_::item7 type;
+ };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<7> >
+{
+ template< typename V_, typename N > struct apply
+ {
+ typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+ ::template result_<V_>::type type;
+ };
+};
+
+template<>
+struct front_impl< aux::vector_tag<7> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::item0 type;
+ };
+};
+
+template<>
+struct back_impl< aux::vector_tag<7> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::back type;
+ };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<7> >
+{
+ template< typename Vector > struct apply
+ : false_
+ {
+ };
+};
+
+template<>
+struct size_impl< aux::vector_tag<7> >
+{
+ template< typename Vector > struct apply
+ : long_<7>
+ {
+ };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<7> >
+ : size_impl< aux::vector_tag<7> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<7> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<> type;
+ };
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7
+ >
+struct vector8
+{
+ typedef aux::vector_tag<8> tag;
+ typedef vector8 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+
+
+ typedef void_ item8;
+ typedef T7 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,8 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<7> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector8<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<8> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector7<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<7> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector8<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<8> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector7<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6
+ > type;
+ };
+};
+
+namespace aux {
+template<> struct v_at_impl<8>
+{
+ template< typename V_ > struct result_
+ {
+ typedef typename V_::item8 type;
+ };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<8> >
+{
+ template< typename V_, typename N > struct apply
+ {
+ typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+ ::template result_<V_>::type type;
+ };
+};
+
+template<>
+struct front_impl< aux::vector_tag<8> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::item0 type;
+ };
+};
+
+template<>
+struct back_impl< aux::vector_tag<8> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::back type;
+ };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<8> >
+{
+ template< typename Vector > struct apply
+ : false_
+ {
+ };
+};
+
+template<>
+struct size_impl< aux::vector_tag<8> >
+{
+ template< typename Vector > struct apply
+ : long_<8>
+ {
+ };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<8> >
+ : size_impl< aux::vector_tag<8> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<8> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<> type;
+ };
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8
+ >
+struct vector9
+{
+ typedef aux::vector_tag<9> tag;
+ typedef vector9 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+
+
+ typedef void_ item9;
+ typedef T8 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,9 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<8> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector9<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<9> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector8<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<8> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector9<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<9> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector8<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ > type;
+ };
+};
+
+namespace aux {
+template<> struct v_at_impl<9>
+{
+ template< typename V_ > struct result_
+ {
+ typedef typename V_::item9 type;
+ };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<9> >
+{
+ template< typename V_, typename N > struct apply
+ {
+ typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+ ::template result_<V_>::type type;
+ };
+};
+
+template<>
+struct front_impl< aux::vector_tag<9> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::item0 type;
+ };
+};
+
+template<>
+struct back_impl< aux::vector_tag<9> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::back type;
+ };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<9> >
+{
+ template< typename Vector > struct apply
+ : false_
+ {
+ };
+};
+
+template<>
+struct size_impl< aux::vector_tag<9> >
+{
+ template< typename Vector > struct apply
+ : long_<9>
+ {
+ };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<9> >
+ : size_impl< aux::vector_tag<9> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<9> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<> type;
+ };
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ >
+struct vector10
+{
+ typedef aux::vector_tag<10> tag;
+ typedef vector10 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+
+
+ typedef void_ item10;
+ typedef T9 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,10 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<9> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector10<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<10> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector9<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<9> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector10<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<10> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector9<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8
+ > type;
+ };
+};
+
+namespace aux {
+template<> struct v_at_impl<10>
+{
+ template< typename V_ > struct result_
+ {
+ typedef typename V_::item10 type;
+ };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<10> >
+{
+ template< typename V_, typename N > struct apply
+ {
+ typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+ ::template result_<V_>::type type;
+ };
+};
+
+template<>
+struct front_impl< aux::vector_tag<10> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::item0 type;
+ };
+};
+
+template<>
+struct back_impl< aux::vector_tag<10> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::back type;
+ };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<10> >
+{
+ template< typename Vector > struct apply
+ : false_
+ {
+ };
+};
+
+template<>
+struct size_impl< aux::vector_tag<10> >
+{
+ template< typename Vector > struct apply
+ : long_<10>
+ {
+ };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<10> >
+ : size_impl< aux::vector_tag<10> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<10> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<> type;
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector10_c.hpp b/boost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector10_c.hpp
new file mode 100644
index 00000000000..8b36f6a3ed7
--- /dev/null
+++ b/boost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector10_c.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/vector/vector10_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T
+ , T C0
+ >
+struct vector1_c
+ : vector1< integral_c< T,C0 > >
+{
+ typedef vector1_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1
+ >
+struct vector2_c
+ : vector2< integral_c< T,C0 >, integral_c< T,C1 > >
+{
+ typedef vector2_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2
+ >
+struct vector3_c
+ : vector3< integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 > >
+{
+ typedef vector3_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3
+ >
+struct vector4_c
+ : vector4<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >, integral_c<T
+ , C3>
+ >
+{
+ typedef vector4_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4
+ >
+struct vector5_c
+ : vector5<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >
+ >
+{
+ typedef vector5_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5
+ >
+struct vector6_c
+ : vector6<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >
+ >
+{
+ typedef vector6_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5, T C6
+ >
+struct vector7_c
+ : vector7<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c<T
+ , C6>
+ >
+{
+ typedef vector7_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 vector8_c
+ : vector8<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >
+ >
+{
+ typedef vector8_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 vector9_c
+ : vector9<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >
+ >
+{
+ typedef vector9_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 vector10_c
+ : vector10<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ >
+{
+ typedef vector10_c type;
+ typedef T value_type;
+};
+
+}}
diff --git a/boost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector20.hpp b/boost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector20.hpp
new file mode 100644
index 00000000000..eb92a7814c1
--- /dev/null
+++ b/boost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector20.hpp
@@ -0,0 +1,1804 @@
+
+// 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/vector/vector20.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 vector11
+{
+ typedef aux::vector_tag<11> tag;
+ typedef vector11 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+
+
+ typedef void_ item11;
+ typedef T10 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,11 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<10> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector11<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<11> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector10<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<10> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector11<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<11> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector10<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ > type;
+ };
+};
+
+namespace aux {
+template<> struct v_at_impl<11>
+{
+ template< typename V_ > struct result_
+ {
+ typedef typename V_::item11 type;
+ };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<11> >
+{
+ template< typename V_, typename N > struct apply
+ {
+ typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+ ::template result_<V_>::type type;
+ };
+};
+
+template<>
+struct front_impl< aux::vector_tag<11> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::item0 type;
+ };
+};
+
+template<>
+struct back_impl< aux::vector_tag<11> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::back type;
+ };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<11> >
+{
+ template< typename Vector > struct apply
+ : false_
+ {
+ };
+};
+
+template<>
+struct size_impl< aux::vector_tag<11> >
+{
+ template< typename Vector > struct apply
+ : long_<11>
+ {
+ };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<11> >
+ : size_impl< aux::vector_tag<11> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<11> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<> 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 vector12
+{
+ typedef aux::vector_tag<12> tag;
+ typedef vector12 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+
+
+ typedef void_ item12;
+ typedef T11 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,12 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<11> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector12<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<12> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector11<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<11> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector12<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<12> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector11<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10
+ > type;
+ };
+};
+
+namespace aux {
+template<> struct v_at_impl<12>
+{
+ template< typename V_ > struct result_
+ {
+ typedef typename V_::item12 type;
+ };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<12> >
+{
+ template< typename V_, typename N > struct apply
+ {
+ typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+ ::template result_<V_>::type type;
+ };
+};
+
+template<>
+struct front_impl< aux::vector_tag<12> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::item0 type;
+ };
+};
+
+template<>
+struct back_impl< aux::vector_tag<12> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::back type;
+ };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<12> >
+{
+ template< typename Vector > struct apply
+ : false_
+ {
+ };
+};
+
+template<>
+struct size_impl< aux::vector_tag<12> >
+{
+ template< typename Vector > struct apply
+ : long_<12>
+ {
+ };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<12> >
+ : size_impl< aux::vector_tag<12> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<12> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<> 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 vector13
+{
+ typedef aux::vector_tag<13> tag;
+ typedef vector13 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+
+
+ typedef void_ item13;
+ typedef T12 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,13 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<12> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector13<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<13> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector12<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<12> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector13<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<13> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector12<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ > type;
+ };
+};
+
+namespace aux {
+template<> struct v_at_impl<13>
+{
+ template< typename V_ > struct result_
+ {
+ typedef typename V_::item13 type;
+ };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<13> >
+{
+ template< typename V_, typename N > struct apply
+ {
+ typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+ ::template result_<V_>::type type;
+ };
+};
+
+template<>
+struct front_impl< aux::vector_tag<13> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::item0 type;
+ };
+};
+
+template<>
+struct back_impl< aux::vector_tag<13> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::back type;
+ };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<13> >
+{
+ template< typename Vector > struct apply
+ : false_
+ {
+ };
+};
+
+template<>
+struct size_impl< aux::vector_tag<13> >
+{
+ template< typename Vector > struct apply
+ : long_<13>
+ {
+ };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<13> >
+ : size_impl< aux::vector_tag<13> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<13> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<> 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 vector14
+{
+ typedef aux::vector_tag<14> tag;
+ typedef vector14 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+
+
+ typedef void_ item14;
+ typedef T13 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,14 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<13> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector14<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<14> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector13<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<13> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector14<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<14> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector13<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12
+ > type;
+ };
+};
+
+namespace aux {
+template<> struct v_at_impl<14>
+{
+ template< typename V_ > struct result_
+ {
+ typedef typename V_::item14 type;
+ };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<14> >
+{
+ template< typename V_, typename N > struct apply
+ {
+ typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+ ::template result_<V_>::type type;
+ };
+};
+
+template<>
+struct front_impl< aux::vector_tag<14> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::item0 type;
+ };
+};
+
+template<>
+struct back_impl< aux::vector_tag<14> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::back type;
+ };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<14> >
+{
+ template< typename Vector > struct apply
+ : false_
+ {
+ };
+};
+
+template<>
+struct size_impl< aux::vector_tag<14> >
+{
+ template< typename Vector > struct apply
+ : long_<14>
+ {
+ };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<14> >
+ : size_impl< aux::vector_tag<14> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<14> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<> 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 vector15
+{
+ typedef aux::vector_tag<15> tag;
+ typedef vector15 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+
+
+ typedef void_ item15;
+ typedef T14 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,15 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<14> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector15<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<15> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector14<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<14> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector15<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<15> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector14<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ > type;
+ };
+};
+
+namespace aux {
+template<> struct v_at_impl<15>
+{
+ template< typename V_ > struct result_
+ {
+ typedef typename V_::item15 type;
+ };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<15> >
+{
+ template< typename V_, typename N > struct apply
+ {
+ typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+ ::template result_<V_>::type type;
+ };
+};
+
+template<>
+struct front_impl< aux::vector_tag<15> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::item0 type;
+ };
+};
+
+template<>
+struct back_impl< aux::vector_tag<15> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::back type;
+ };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<15> >
+{
+ template< typename Vector > struct apply
+ : false_
+ {
+ };
+};
+
+template<>
+struct size_impl< aux::vector_tag<15> >
+{
+ template< typename Vector > struct apply
+ : long_<15>
+ {
+ };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<15> >
+ : size_impl< aux::vector_tag<15> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<15> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<> 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 vector16
+{
+ typedef aux::vector_tag<16> tag;
+ typedef vector16 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+
+
+ typedef void_ item16;
+ typedef T15 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,16 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<15> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector16<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<16> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector15<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<15> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector16<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<16> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector15<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14
+ > type;
+ };
+};
+
+namespace aux {
+template<> struct v_at_impl<16>
+{
+ template< typename V_ > struct result_
+ {
+ typedef typename V_::item16 type;
+ };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<16> >
+{
+ template< typename V_, typename N > struct apply
+ {
+ typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+ ::template result_<V_>::type type;
+ };
+};
+
+template<>
+struct front_impl< aux::vector_tag<16> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::item0 type;
+ };
+};
+
+template<>
+struct back_impl< aux::vector_tag<16> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::back type;
+ };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<16> >
+{
+ template< typename Vector > struct apply
+ : false_
+ {
+ };
+};
+
+template<>
+struct size_impl< aux::vector_tag<16> >
+{
+ template< typename Vector > struct apply
+ : long_<16>
+ {
+ };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<16> >
+ : size_impl< aux::vector_tag<16> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<16> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<> 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 vector17
+{
+ typedef aux::vector_tag<17> tag;
+ typedef vector17 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+
+
+ typedef void_ item17;
+ typedef T16 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,17 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<16> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector17<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<17> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector16<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<16> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector17<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<17> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector16<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ > type;
+ };
+};
+
+namespace aux {
+template<> struct v_at_impl<17>
+{
+ template< typename V_ > struct result_
+ {
+ typedef typename V_::item17 type;
+ };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<17> >
+{
+ template< typename V_, typename N > struct apply
+ {
+ typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+ ::template result_<V_>::type type;
+ };
+};
+
+template<>
+struct front_impl< aux::vector_tag<17> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::item0 type;
+ };
+};
+
+template<>
+struct back_impl< aux::vector_tag<17> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::back type;
+ };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<17> >
+{
+ template< typename Vector > struct apply
+ : false_
+ {
+ };
+};
+
+template<>
+struct size_impl< aux::vector_tag<17> >
+{
+ template< typename Vector > struct apply
+ : long_<17>
+ {
+ };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<17> >
+ : size_impl< aux::vector_tag<17> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<17> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<> 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 vector18
+{
+ typedef aux::vector_tag<18> tag;
+ typedef vector18 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+
+
+ typedef void_ item18;
+ typedef T17 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,18 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<17> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector18<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<18> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector17<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<17> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector18<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<18> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector17<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16
+ > type;
+ };
+};
+
+namespace aux {
+template<> struct v_at_impl<18>
+{
+ template< typename V_ > struct result_
+ {
+ typedef typename V_::item18 type;
+ };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<18> >
+{
+ template< typename V_, typename N > struct apply
+ {
+ typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+ ::template result_<V_>::type type;
+ };
+};
+
+template<>
+struct front_impl< aux::vector_tag<18> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::item0 type;
+ };
+};
+
+template<>
+struct back_impl< aux::vector_tag<18> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::back type;
+ };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<18> >
+{
+ template< typename Vector > struct apply
+ : false_
+ {
+ };
+};
+
+template<>
+struct size_impl< aux::vector_tag<18> >
+{
+ template< typename Vector > struct apply
+ : long_<18>
+ {
+ };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<18> >
+ : size_impl< aux::vector_tag<18> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<18> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<> 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 vector19
+{
+ typedef aux::vector_tag<19> tag;
+ typedef vector19 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+
+
+ typedef void_ item19;
+ typedef T18 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,19 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<18> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector19<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<19> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector18<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<18> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector19<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<19> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector18<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ > type;
+ };
+};
+
+namespace aux {
+template<> struct v_at_impl<19>
+{
+ template< typename V_ > struct result_
+ {
+ typedef typename V_::item19 type;
+ };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<19> >
+{
+ template< typename V_, typename N > struct apply
+ {
+ typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+ ::template result_<V_>::type type;
+ };
+};
+
+template<>
+struct front_impl< aux::vector_tag<19> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::item0 type;
+ };
+};
+
+template<>
+struct back_impl< aux::vector_tag<19> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::back type;
+ };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<19> >
+{
+ template< typename Vector > struct apply
+ : false_
+ {
+ };
+};
+
+template<>
+struct size_impl< aux::vector_tag<19> >
+{
+ template< typename Vector > struct apply
+ : long_<19>
+ {
+ };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<19> >
+ : size_impl< aux::vector_tag<19> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<19> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<> 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 vector20
+{
+ typedef aux::vector_tag<20> tag;
+ typedef vector20 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+
+
+ typedef void_ item20;
+ typedef T19 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,20 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<19> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector20<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<20> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector19<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<19> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector20<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<20> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector19<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18
+ > type;
+ };
+};
+
+namespace aux {
+template<> struct v_at_impl<20>
+{
+ template< typename V_ > struct result_
+ {
+ typedef typename V_::item20 type;
+ };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<20> >
+{
+ template< typename V_, typename N > struct apply
+ {
+ typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+ ::template result_<V_>::type type;
+ };
+};
+
+template<>
+struct front_impl< aux::vector_tag<20> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::item0 type;
+ };
+};
+
+template<>
+struct back_impl< aux::vector_tag<20> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::back type;
+ };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<20> >
+{
+ template< typename Vector > struct apply
+ : false_
+ {
+ };
+};
+
+template<>
+struct size_impl< aux::vector_tag<20> >
+{
+ template< typename Vector > struct apply
+ : long_<20>
+ {
+ };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<20> >
+ : size_impl< aux::vector_tag<20> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<20> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<> type;
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector20_c.hpp b/boost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector20_c.hpp
new file mode 100644
index 00000000000..56ca53f4ea3
--- /dev/null
+++ b/boost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector20_c.hpp
@@ -0,0 +1,195 @@
+
+// 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/vector/vector20_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 vector11_c
+ : vector11<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >, integral_c<T
+ , C10>
+ >
+{
+ typedef vector11_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 vector12_c
+ : vector12<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >
+ >
+{
+ typedef vector12_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 vector13_c
+ : vector13<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ >
+{
+ typedef vector13_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 vector14_c
+ : vector14<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >, integral_c<T
+ , C13>
+ >
+{
+ typedef vector14_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 vector15_c
+ : vector15<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >
+ >
+{
+ typedef vector15_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 vector16_c
+ : vector16<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ >
+{
+ typedef vector16_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 vector17_c
+ : vector17<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >, integral_c<T
+ , C16>
+ >
+{
+ typedef vector17_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 vector18_c
+ : vector18<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >
+ >
+{
+ typedef vector18_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 vector19_c
+ : vector19<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ >
+{
+ typedef vector19_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 vector20_c
+ : vector20<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >, integral_c<T
+ , C19>
+ >
+{
+ typedef vector20_c type;
+ typedef T value_type;
+};
+
+}}
diff --git a/boost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector30.hpp b/boost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector30.hpp
new file mode 100644
index 00000000000..a685019b486
--- /dev/null
+++ b/boost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector30.hpp
@@ -0,0 +1,2124 @@
+
+// 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/vector/vector30.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 vector21
+{
+ typedef aux::vector_tag<21> tag;
+ typedef vector21 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+
+
+ typedef void_ item21;
+ typedef T20 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,21 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<20> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector21<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<21> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector20<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<20> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector21<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<21> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector20<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ > type;
+ };
+};
+
+namespace aux {
+template<> struct v_at_impl<21>
+{
+ template< typename V_ > struct result_
+ {
+ typedef typename V_::item21 type;
+ };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<21> >
+{
+ template< typename V_, typename N > struct apply
+ {
+ typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+ ::template result_<V_>::type type;
+ };
+};
+
+template<>
+struct front_impl< aux::vector_tag<21> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::item0 type;
+ };
+};
+
+template<>
+struct back_impl< aux::vector_tag<21> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::back type;
+ };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<21> >
+{
+ template< typename Vector > struct apply
+ : false_
+ {
+ };
+};
+
+template<>
+struct size_impl< aux::vector_tag<21> >
+{
+ template< typename Vector > struct apply
+ : long_<21>
+ {
+ };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<21> >
+ : size_impl< aux::vector_tag<21> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<21> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<> 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 vector22
+{
+ typedef aux::vector_tag<22> tag;
+ typedef vector22 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+
+
+ typedef void_ item22;
+ typedef T21 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,22 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<21> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector22<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<22> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector21<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<21> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector22<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<22> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector21<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20
+ > type;
+ };
+};
+
+namespace aux {
+template<> struct v_at_impl<22>
+{
+ template< typename V_ > struct result_
+ {
+ typedef typename V_::item22 type;
+ };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<22> >
+{
+ template< typename V_, typename N > struct apply
+ {
+ typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+ ::template result_<V_>::type type;
+ };
+};
+
+template<>
+struct front_impl< aux::vector_tag<22> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::item0 type;
+ };
+};
+
+template<>
+struct back_impl< aux::vector_tag<22> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::back type;
+ };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<22> >
+{
+ template< typename Vector > struct apply
+ : false_
+ {
+ };
+};
+
+template<>
+struct size_impl< aux::vector_tag<22> >
+{
+ template< typename Vector > struct apply
+ : long_<22>
+ {
+ };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<22> >
+ : size_impl< aux::vector_tag<22> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<22> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<> 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 vector23
+{
+ typedef aux::vector_tag<23> tag;
+ typedef vector23 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+
+
+ typedef void_ item23;
+ typedef T22 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,23 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<22> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector23<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<23> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector22<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<22> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector23<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<23> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector22<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ > type;
+ };
+};
+
+namespace aux {
+template<> struct v_at_impl<23>
+{
+ template< typename V_ > struct result_
+ {
+ typedef typename V_::item23 type;
+ };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<23> >
+{
+ template< typename V_, typename N > struct apply
+ {
+ typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+ ::template result_<V_>::type type;
+ };
+};
+
+template<>
+struct front_impl< aux::vector_tag<23> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::item0 type;
+ };
+};
+
+template<>
+struct back_impl< aux::vector_tag<23> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::back type;
+ };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<23> >
+{
+ template< typename Vector > struct apply
+ : false_
+ {
+ };
+};
+
+template<>
+struct size_impl< aux::vector_tag<23> >
+{
+ template< typename Vector > struct apply
+ : long_<23>
+ {
+ };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<23> >
+ : size_impl< aux::vector_tag<23> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<23> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<> 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 vector24
+{
+ typedef aux::vector_tag<24> tag;
+ typedef vector24 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+ typedef T23 item23;
+
+
+ typedef void_ item24;
+ typedef T23 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,24 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<23> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector24<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<24> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector23<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ , typename Vector::item23
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<23> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector24<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<24> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector23<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22
+ > type;
+ };
+};
+
+namespace aux {
+template<> struct v_at_impl<24>
+{
+ template< typename V_ > struct result_
+ {
+ typedef typename V_::item24 type;
+ };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<24> >
+{
+ template< typename V_, typename N > struct apply
+ {
+ typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+ ::template result_<V_>::type type;
+ };
+};
+
+template<>
+struct front_impl< aux::vector_tag<24> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::item0 type;
+ };
+};
+
+template<>
+struct back_impl< aux::vector_tag<24> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::back type;
+ };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<24> >
+{
+ template< typename Vector > struct apply
+ : false_
+ {
+ };
+};
+
+template<>
+struct size_impl< aux::vector_tag<24> >
+{
+ template< typename Vector > struct apply
+ : long_<24>
+ {
+ };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<24> >
+ : size_impl< aux::vector_tag<24> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<24> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<> 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 vector25
+{
+ typedef aux::vector_tag<25> tag;
+ typedef vector25 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+ typedef T23 item23;
+ typedef T24 item24;
+
+
+ typedef void_ item25;
+ typedef T24 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,25 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<24> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector25<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<25> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector24<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ , typename Vector::item23, typename Vector::item24
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<24> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector25<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<25> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector24<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ > type;
+ };
+};
+
+namespace aux {
+template<> struct v_at_impl<25>
+{
+ template< typename V_ > struct result_
+ {
+ typedef typename V_::item25 type;
+ };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<25> >
+{
+ template< typename V_, typename N > struct apply
+ {
+ typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+ ::template result_<V_>::type type;
+ };
+};
+
+template<>
+struct front_impl< aux::vector_tag<25> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::item0 type;
+ };
+};
+
+template<>
+struct back_impl< aux::vector_tag<25> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::back type;
+ };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<25> >
+{
+ template< typename Vector > struct apply
+ : false_
+ {
+ };
+};
+
+template<>
+struct size_impl< aux::vector_tag<25> >
+{
+ template< typename Vector > struct apply
+ : long_<25>
+ {
+ };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<25> >
+ : size_impl< aux::vector_tag<25> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<25> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<> 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 vector26
+{
+ typedef aux::vector_tag<26> tag;
+ typedef vector26 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+ typedef T23 item23;
+ typedef T24 item24;
+ typedef T25 item25;
+
+
+ typedef void_ item26;
+ typedef T25 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,26 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<25> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector26<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<26> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector25<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ , typename Vector::item23, typename Vector::item24
+ , typename Vector::item25
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<25> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector26<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<26> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector25<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24
+ > type;
+ };
+};
+
+namespace aux {
+template<> struct v_at_impl<26>
+{
+ template< typename V_ > struct result_
+ {
+ typedef typename V_::item26 type;
+ };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<26> >
+{
+ template< typename V_, typename N > struct apply
+ {
+ typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+ ::template result_<V_>::type type;
+ };
+};
+
+template<>
+struct front_impl< aux::vector_tag<26> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::item0 type;
+ };
+};
+
+template<>
+struct back_impl< aux::vector_tag<26> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::back type;
+ };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<26> >
+{
+ template< typename Vector > struct apply
+ : false_
+ {
+ };
+};
+
+template<>
+struct size_impl< aux::vector_tag<26> >
+{
+ template< typename Vector > struct apply
+ : long_<26>
+ {
+ };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<26> >
+ : size_impl< aux::vector_tag<26> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<26> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<> 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 vector27
+{
+ typedef aux::vector_tag<27> tag;
+ typedef vector27 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+ typedef T23 item23;
+ typedef T24 item24;
+ typedef T25 item25;
+ typedef T26 item26;
+
+
+ typedef void_ item27;
+ typedef T26 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,27 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<26> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector27<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<27> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector26<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ , typename Vector::item23, typename Vector::item24
+ , typename Vector::item25, typename Vector::item26
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<26> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector27<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<27> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector26<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ > type;
+ };
+};
+
+namespace aux {
+template<> struct v_at_impl<27>
+{
+ template< typename V_ > struct result_
+ {
+ typedef typename V_::item27 type;
+ };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<27> >
+{
+ template< typename V_, typename N > struct apply
+ {
+ typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+ ::template result_<V_>::type type;
+ };
+};
+
+template<>
+struct front_impl< aux::vector_tag<27> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::item0 type;
+ };
+};
+
+template<>
+struct back_impl< aux::vector_tag<27> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::back type;
+ };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<27> >
+{
+ template< typename Vector > struct apply
+ : false_
+ {
+ };
+};
+
+template<>
+struct size_impl< aux::vector_tag<27> >
+{
+ template< typename Vector > struct apply
+ : long_<27>
+ {
+ };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<27> >
+ : size_impl< aux::vector_tag<27> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<27> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<> 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 vector28
+{
+ typedef aux::vector_tag<28> tag;
+ typedef vector28 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+ typedef T23 item23;
+ typedef T24 item24;
+ typedef T25 item25;
+ typedef T26 item26;
+ typedef T27 item27;
+
+
+ typedef void_ item28;
+ typedef T27 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,28 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<27> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector28<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<28> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector27<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ , typename Vector::item23, typename Vector::item24
+ , typename Vector::item25, typename Vector::item26
+ , typename Vector::item27
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<27> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector28<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<28> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector27<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26
+ > type;
+ };
+};
+
+namespace aux {
+template<> struct v_at_impl<28>
+{
+ template< typename V_ > struct result_
+ {
+ typedef typename V_::item28 type;
+ };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<28> >
+{
+ template< typename V_, typename N > struct apply
+ {
+ typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+ ::template result_<V_>::type type;
+ };
+};
+
+template<>
+struct front_impl< aux::vector_tag<28> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::item0 type;
+ };
+};
+
+template<>
+struct back_impl< aux::vector_tag<28> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::back type;
+ };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<28> >
+{
+ template< typename Vector > struct apply
+ : false_
+ {
+ };
+};
+
+template<>
+struct size_impl< aux::vector_tag<28> >
+{
+ template< typename Vector > struct apply
+ : long_<28>
+ {
+ };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<28> >
+ : size_impl< aux::vector_tag<28> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<28> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<> 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 vector29
+{
+ typedef aux::vector_tag<29> tag;
+ typedef vector29 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+ typedef T23 item23;
+ typedef T24 item24;
+ typedef T25 item25;
+ typedef T26 item26;
+ typedef T27 item27;
+ typedef T28 item28;
+
+
+ typedef void_ item29;
+ typedef T28 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,29 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<28> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector29<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<29> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector28<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ , typename Vector::item23, typename Vector::item24
+ , typename Vector::item25, typename Vector::item26
+ , typename Vector::item27, typename Vector::item28
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<28> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector29<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<29> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector28<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ > type;
+ };
+};
+
+namespace aux {
+template<> struct v_at_impl<29>
+{
+ template< typename V_ > struct result_
+ {
+ typedef typename V_::item29 type;
+ };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<29> >
+{
+ template< typename V_, typename N > struct apply
+ {
+ typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+ ::template result_<V_>::type type;
+ };
+};
+
+template<>
+struct front_impl< aux::vector_tag<29> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::item0 type;
+ };
+};
+
+template<>
+struct back_impl< aux::vector_tag<29> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::back type;
+ };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<29> >
+{
+ template< typename Vector > struct apply
+ : false_
+ {
+ };
+};
+
+template<>
+struct size_impl< aux::vector_tag<29> >
+{
+ template< typename Vector > struct apply
+ : long_<29>
+ {
+ };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<29> >
+ : size_impl< aux::vector_tag<29> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<29> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<> 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 vector30
+{
+ typedef aux::vector_tag<30> tag;
+ typedef vector30 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+ typedef T23 item23;
+ typedef T24 item24;
+ typedef T25 item25;
+ typedef T26 item26;
+ typedef T27 item27;
+ typedef T28 item28;
+ typedef T29 item29;
+
+
+ typedef void_ item30;
+ typedef T29 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,30 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<29> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector30<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<30> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector29<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ , typename Vector::item23, typename Vector::item24
+ , typename Vector::item25, typename Vector::item26
+ , typename Vector::item27, typename Vector::item28
+ , typename Vector::item29
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<29> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector30<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<30> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector29<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28
+ > type;
+ };
+};
+
+namespace aux {
+template<> struct v_at_impl<30>
+{
+ template< typename V_ > struct result_
+ {
+ typedef typename V_::item30 type;
+ };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<30> >
+{
+ template< typename V_, typename N > struct apply
+ {
+ typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+ ::template result_<V_>::type type;
+ };
+};
+
+template<>
+struct front_impl< aux::vector_tag<30> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::item0 type;
+ };
+};
+
+template<>
+struct back_impl< aux::vector_tag<30> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::back type;
+ };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<30> >
+{
+ template< typename Vector > struct apply
+ : false_
+ {
+ };
+};
+
+template<>
+struct size_impl< aux::vector_tag<30> >
+{
+ template< typename Vector > struct apply
+ : long_<30>
+ {
+ };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<30> >
+ : size_impl< aux::vector_tag<30> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<30> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<> type;
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector30_c.hpp b/boost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector30_c.hpp
new file mode 100644
index 00000000000..6251dbc5467
--- /dev/null
+++ b/boost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector30_c.hpp
@@ -0,0 +1,238 @@
+
+// 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/vector/vector30_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 vector21_c
+ : vector21<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >
+ >
+{
+ typedef vector21_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 vector22_c
+ : vector22<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ >
+{
+ typedef vector22_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 vector23_c
+ : vector23<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >, integral_c<T
+ , C22>
+ >
+{
+ typedef vector23_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 vector24_c
+ : vector24<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ , integral_c< T,C22 >, integral_c< T,C23 >
+ >
+{
+ typedef vector24_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 vector25_c
+ : vector25<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+ >
+{
+ typedef vector25_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 vector26_c
+ : vector26<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >, integral_c<T
+ , C25>
+ >
+{
+ typedef vector26_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 vector27_c
+ : vector27<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+ , integral_c< T,C25 >, integral_c< T,C26 >
+ >
+{
+ typedef vector27_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 vector28_c
+ : vector28<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+ , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+ >
+{
+ typedef vector28_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 vector29_c
+ : vector29<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+ , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >, integral_c<T
+ , C28>
+ >
+{
+ typedef vector29_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 vector30_c
+ : vector30<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+ , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+ , integral_c< T,C28 >, integral_c< T,C29 >
+ >
+{
+ typedef vector30_c type;
+ typedef T value_type;
+};
+
+}}
diff --git a/boost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector40.hpp b/boost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector40.hpp
new file mode 100644
index 00000000000..1ed648a9d0a
--- /dev/null
+++ b/boost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector40.hpp
@@ -0,0 +1,2444 @@
+
+// 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/vector/vector40.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 vector31
+{
+ typedef aux::vector_tag<31> tag;
+ typedef vector31 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+ typedef T23 item23;
+ typedef T24 item24;
+ typedef T25 item25;
+ typedef T26 item26;
+ typedef T27 item27;
+ typedef T28 item28;
+ typedef T29 item29;
+ typedef T30 item30;
+
+
+ typedef void_ item31;
+ typedef T30 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,31 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<30> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector31<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<31> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector30<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ , typename Vector::item23, typename Vector::item24
+ , typename Vector::item25, typename Vector::item26
+ , typename Vector::item27, typename Vector::item28
+ , typename Vector::item29, typename Vector::item30
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<30> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector31<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<31> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector30<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ > type;
+ };
+};
+
+namespace aux {
+template<> struct v_at_impl<31>
+{
+ template< typename V_ > struct result_
+ {
+ typedef typename V_::item31 type;
+ };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<31> >
+{
+ template< typename V_, typename N > struct apply
+ {
+ typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+ ::template result_<V_>::type type;
+ };
+};
+
+template<>
+struct front_impl< aux::vector_tag<31> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::item0 type;
+ };
+};
+
+template<>
+struct back_impl< aux::vector_tag<31> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::back type;
+ };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<31> >
+{
+ template< typename Vector > struct apply
+ : false_
+ {
+ };
+};
+
+template<>
+struct size_impl< aux::vector_tag<31> >
+{
+ template< typename Vector > struct apply
+ : long_<31>
+ {
+ };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<31> >
+ : size_impl< aux::vector_tag<31> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<31> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<> 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 vector32
+{
+ typedef aux::vector_tag<32> tag;
+ typedef vector32 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+ typedef T23 item23;
+ typedef T24 item24;
+ typedef T25 item25;
+ typedef T26 item26;
+ typedef T27 item27;
+ typedef T28 item28;
+ typedef T29 item29;
+ typedef T30 item30;
+ typedef T31 item31;
+
+
+ typedef void_ item32;
+ typedef T31 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,32 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<31> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector32<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<32> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector31<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ , typename Vector::item23, typename Vector::item24
+ , typename Vector::item25, typename Vector::item26
+ , typename Vector::item27, typename Vector::item28
+ , typename Vector::item29, typename Vector::item30
+ , typename Vector::item31
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<31> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector32<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<32> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector31<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30
+ > type;
+ };
+};
+
+namespace aux {
+template<> struct v_at_impl<32>
+{
+ template< typename V_ > struct result_
+ {
+ typedef typename V_::item32 type;
+ };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<32> >
+{
+ template< typename V_, typename N > struct apply
+ {
+ typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+ ::template result_<V_>::type type;
+ };
+};
+
+template<>
+struct front_impl< aux::vector_tag<32> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::item0 type;
+ };
+};
+
+template<>
+struct back_impl< aux::vector_tag<32> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::back type;
+ };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<32> >
+{
+ template< typename Vector > struct apply
+ : false_
+ {
+ };
+};
+
+template<>
+struct size_impl< aux::vector_tag<32> >
+{
+ template< typename Vector > struct apply
+ : long_<32>
+ {
+ };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<32> >
+ : size_impl< aux::vector_tag<32> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<32> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<> 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 vector33
+{
+ typedef aux::vector_tag<33> tag;
+ typedef vector33 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+ typedef T23 item23;
+ typedef T24 item24;
+ typedef T25 item25;
+ typedef T26 item26;
+ typedef T27 item27;
+ typedef T28 item28;
+ typedef T29 item29;
+ typedef T30 item30;
+ typedef T31 item31;
+ typedef T32 item32;
+
+
+ typedef void_ item33;
+ typedef T32 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,33 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<32> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector33<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<33> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector32<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ , typename Vector::item23, typename Vector::item24
+ , typename Vector::item25, typename Vector::item26
+ , typename Vector::item27, typename Vector::item28
+ , typename Vector::item29, typename Vector::item30
+ , typename Vector::item31, typename Vector::item32
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<32> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector33<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<33> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector32<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ > type;
+ };
+};
+
+namespace aux {
+template<> struct v_at_impl<33>
+{
+ template< typename V_ > struct result_
+ {
+ typedef typename V_::item33 type;
+ };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<33> >
+{
+ template< typename V_, typename N > struct apply
+ {
+ typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+ ::template result_<V_>::type type;
+ };
+};
+
+template<>
+struct front_impl< aux::vector_tag<33> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::item0 type;
+ };
+};
+
+template<>
+struct back_impl< aux::vector_tag<33> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::back type;
+ };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<33> >
+{
+ template< typename Vector > struct apply
+ : false_
+ {
+ };
+};
+
+template<>
+struct size_impl< aux::vector_tag<33> >
+{
+ template< typename Vector > struct apply
+ : long_<33>
+ {
+ };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<33> >
+ : size_impl< aux::vector_tag<33> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<33> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<> 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 vector34
+{
+ typedef aux::vector_tag<34> tag;
+ typedef vector34 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+ typedef T23 item23;
+ typedef T24 item24;
+ typedef T25 item25;
+ typedef T26 item26;
+ typedef T27 item27;
+ typedef T28 item28;
+ typedef T29 item29;
+ typedef T30 item30;
+ typedef T31 item31;
+ typedef T32 item32;
+ typedef T33 item33;
+
+
+ typedef void_ item34;
+ typedef T33 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,34 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<33> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector34<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<34> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector33<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ , typename Vector::item23, typename Vector::item24
+ , typename Vector::item25, typename Vector::item26
+ , typename Vector::item27, typename Vector::item28
+ , typename Vector::item29, typename Vector::item30
+ , typename Vector::item31, typename Vector::item32
+ , typename Vector::item33
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<33> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector34<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<34> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector33<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32
+ > type;
+ };
+};
+
+namespace aux {
+template<> struct v_at_impl<34>
+{
+ template< typename V_ > struct result_
+ {
+ typedef typename V_::item34 type;
+ };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<34> >
+{
+ template< typename V_, typename N > struct apply
+ {
+ typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+ ::template result_<V_>::type type;
+ };
+};
+
+template<>
+struct front_impl< aux::vector_tag<34> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::item0 type;
+ };
+};
+
+template<>
+struct back_impl< aux::vector_tag<34> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::back type;
+ };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<34> >
+{
+ template< typename Vector > struct apply
+ : false_
+ {
+ };
+};
+
+template<>
+struct size_impl< aux::vector_tag<34> >
+{
+ template< typename Vector > struct apply
+ : long_<34>
+ {
+ };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<34> >
+ : size_impl< aux::vector_tag<34> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<34> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<> 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 vector35
+{
+ typedef aux::vector_tag<35> tag;
+ typedef vector35 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+ typedef T23 item23;
+ typedef T24 item24;
+ typedef T25 item25;
+ typedef T26 item26;
+ typedef T27 item27;
+ typedef T28 item28;
+ typedef T29 item29;
+ typedef T30 item30;
+ typedef T31 item31;
+ typedef T32 item32;
+ typedef T33 item33;
+ typedef T34 item34;
+
+
+ typedef void_ item35;
+ typedef T34 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,35 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<34> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector35<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<35> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector34<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ , typename Vector::item23, typename Vector::item24
+ , typename Vector::item25, typename Vector::item26
+ , typename Vector::item27, typename Vector::item28
+ , typename Vector::item29, typename Vector::item30
+ , typename Vector::item31, typename Vector::item32
+ , typename Vector::item33, typename Vector::item34
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<34> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector35<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<35> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector34<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ > type;
+ };
+};
+
+namespace aux {
+template<> struct v_at_impl<35>
+{
+ template< typename V_ > struct result_
+ {
+ typedef typename V_::item35 type;
+ };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<35> >
+{
+ template< typename V_, typename N > struct apply
+ {
+ typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+ ::template result_<V_>::type type;
+ };
+};
+
+template<>
+struct front_impl< aux::vector_tag<35> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::item0 type;
+ };
+};
+
+template<>
+struct back_impl< aux::vector_tag<35> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::back type;
+ };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<35> >
+{
+ template< typename Vector > struct apply
+ : false_
+ {
+ };
+};
+
+template<>
+struct size_impl< aux::vector_tag<35> >
+{
+ template< typename Vector > struct apply
+ : long_<35>
+ {
+ };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<35> >
+ : size_impl< aux::vector_tag<35> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<35> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<> 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 vector36
+{
+ typedef aux::vector_tag<36> tag;
+ typedef vector36 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+ typedef T23 item23;
+ typedef T24 item24;
+ typedef T25 item25;
+ typedef T26 item26;
+ typedef T27 item27;
+ typedef T28 item28;
+ typedef T29 item29;
+ typedef T30 item30;
+ typedef T31 item31;
+ typedef T32 item32;
+ typedef T33 item33;
+ typedef T34 item34;
+ typedef T35 item35;
+
+
+ typedef void_ item36;
+ typedef T35 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,36 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<35> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector36<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<36> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector35<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ , typename Vector::item23, typename Vector::item24
+ , typename Vector::item25, typename Vector::item26
+ , typename Vector::item27, typename Vector::item28
+ , typename Vector::item29, typename Vector::item30
+ , typename Vector::item31, typename Vector::item32
+ , typename Vector::item33, typename Vector::item34
+ , typename Vector::item35
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<35> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector36<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<36> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector35<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34
+ > type;
+ };
+};
+
+namespace aux {
+template<> struct v_at_impl<36>
+{
+ template< typename V_ > struct result_
+ {
+ typedef typename V_::item36 type;
+ };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<36> >
+{
+ template< typename V_, typename N > struct apply
+ {
+ typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+ ::template result_<V_>::type type;
+ };
+};
+
+template<>
+struct front_impl< aux::vector_tag<36> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::item0 type;
+ };
+};
+
+template<>
+struct back_impl< aux::vector_tag<36> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::back type;
+ };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<36> >
+{
+ template< typename Vector > struct apply
+ : false_
+ {
+ };
+};
+
+template<>
+struct size_impl< aux::vector_tag<36> >
+{
+ template< typename Vector > struct apply
+ : long_<36>
+ {
+ };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<36> >
+ : size_impl< aux::vector_tag<36> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<36> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<> 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 vector37
+{
+ typedef aux::vector_tag<37> tag;
+ typedef vector37 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+ typedef T23 item23;
+ typedef T24 item24;
+ typedef T25 item25;
+ typedef T26 item26;
+ typedef T27 item27;
+ typedef T28 item28;
+ typedef T29 item29;
+ typedef T30 item30;
+ typedef T31 item31;
+ typedef T32 item32;
+ typedef T33 item33;
+ typedef T34 item34;
+ typedef T35 item35;
+ typedef T36 item36;
+
+
+ typedef void_ item37;
+ typedef T36 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,37 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<36> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector37<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<37> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector36<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ , typename Vector::item23, typename Vector::item24
+ , typename Vector::item25, typename Vector::item26
+ , typename Vector::item27, typename Vector::item28
+ , typename Vector::item29, typename Vector::item30
+ , typename Vector::item31, typename Vector::item32
+ , typename Vector::item33, typename Vector::item34
+ , typename Vector::item35, typename Vector::item36
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<36> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector37<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<37> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector36<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ > type;
+ };
+};
+
+namespace aux {
+template<> struct v_at_impl<37>
+{
+ template< typename V_ > struct result_
+ {
+ typedef typename V_::item37 type;
+ };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<37> >
+{
+ template< typename V_, typename N > struct apply
+ {
+ typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+ ::template result_<V_>::type type;
+ };
+};
+
+template<>
+struct front_impl< aux::vector_tag<37> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::item0 type;
+ };
+};
+
+template<>
+struct back_impl< aux::vector_tag<37> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::back type;
+ };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<37> >
+{
+ template< typename Vector > struct apply
+ : false_
+ {
+ };
+};
+
+template<>
+struct size_impl< aux::vector_tag<37> >
+{
+ template< typename Vector > struct apply
+ : long_<37>
+ {
+ };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<37> >
+ : size_impl< aux::vector_tag<37> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<37> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<> 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 vector38
+{
+ typedef aux::vector_tag<38> tag;
+ typedef vector38 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+ typedef T23 item23;
+ typedef T24 item24;
+ typedef T25 item25;
+ typedef T26 item26;
+ typedef T27 item27;
+ typedef T28 item28;
+ typedef T29 item29;
+ typedef T30 item30;
+ typedef T31 item31;
+ typedef T32 item32;
+ typedef T33 item33;
+ typedef T34 item34;
+ typedef T35 item35;
+ typedef T36 item36;
+ typedef T37 item37;
+
+
+ typedef void_ item38;
+ typedef T37 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,38 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<37> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector38<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<38> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector37<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ , typename Vector::item23, typename Vector::item24
+ , typename Vector::item25, typename Vector::item26
+ , typename Vector::item27, typename Vector::item28
+ , typename Vector::item29, typename Vector::item30
+ , typename Vector::item31, typename Vector::item32
+ , typename Vector::item33, typename Vector::item34
+ , typename Vector::item35, typename Vector::item36
+ , typename Vector::item37
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<37> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector38<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<38> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector37<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36
+ > type;
+ };
+};
+
+namespace aux {
+template<> struct v_at_impl<38>
+{
+ template< typename V_ > struct result_
+ {
+ typedef typename V_::item38 type;
+ };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<38> >
+{
+ template< typename V_, typename N > struct apply
+ {
+ typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+ ::template result_<V_>::type type;
+ };
+};
+
+template<>
+struct front_impl< aux::vector_tag<38> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::item0 type;
+ };
+};
+
+template<>
+struct back_impl< aux::vector_tag<38> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::back type;
+ };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<38> >
+{
+ template< typename Vector > struct apply
+ : false_
+ {
+ };
+};
+
+template<>
+struct size_impl< aux::vector_tag<38> >
+{
+ template< typename Vector > struct apply
+ : long_<38>
+ {
+ };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<38> >
+ : size_impl< aux::vector_tag<38> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<38> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<> 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 vector39
+{
+ typedef aux::vector_tag<39> tag;
+ typedef vector39 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+ typedef T23 item23;
+ typedef T24 item24;
+ typedef T25 item25;
+ typedef T26 item26;
+ typedef T27 item27;
+ typedef T28 item28;
+ typedef T29 item29;
+ typedef T30 item30;
+ typedef T31 item31;
+ typedef T32 item32;
+ typedef T33 item33;
+ typedef T34 item34;
+ typedef T35 item35;
+ typedef T36 item36;
+ typedef T37 item37;
+ typedef T38 item38;
+
+
+ typedef void_ item39;
+ typedef T38 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,39 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<38> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector39<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<39> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector38<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ , typename Vector::item23, typename Vector::item24
+ , typename Vector::item25, typename Vector::item26
+ , typename Vector::item27, typename Vector::item28
+ , typename Vector::item29, typename Vector::item30
+ , typename Vector::item31, typename Vector::item32
+ , typename Vector::item33, typename Vector::item34
+ , typename Vector::item35, typename Vector::item36
+ , typename Vector::item37, typename Vector::item38
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<38> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector39<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<39> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector38<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ > type;
+ };
+};
+
+namespace aux {
+template<> struct v_at_impl<39>
+{
+ template< typename V_ > struct result_
+ {
+ typedef typename V_::item39 type;
+ };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<39> >
+{
+ template< typename V_, typename N > struct apply
+ {
+ typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+ ::template result_<V_>::type type;
+ };
+};
+
+template<>
+struct front_impl< aux::vector_tag<39> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::item0 type;
+ };
+};
+
+template<>
+struct back_impl< aux::vector_tag<39> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::back type;
+ };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<39> >
+{
+ template< typename Vector > struct apply
+ : false_
+ {
+ };
+};
+
+template<>
+struct size_impl< aux::vector_tag<39> >
+{
+ template< typename Vector > struct apply
+ : long_<39>
+ {
+ };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<39> >
+ : size_impl< aux::vector_tag<39> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<39> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<> 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 vector40
+{
+ typedef aux::vector_tag<40> tag;
+ typedef vector40 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+ typedef T23 item23;
+ typedef T24 item24;
+ typedef T25 item25;
+ typedef T26 item26;
+ typedef T27 item27;
+ typedef T28 item28;
+ typedef T29 item29;
+ typedef T30 item30;
+ typedef T31 item31;
+ typedef T32 item32;
+ typedef T33 item33;
+ typedef T34 item34;
+ typedef T35 item35;
+ typedef T36 item36;
+ typedef T37 item37;
+ typedef T38 item38;
+ typedef T39 item39;
+
+
+ typedef void_ item40;
+ typedef T39 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,40 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<39> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector40<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<40> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector39<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ , typename Vector::item23, typename Vector::item24
+ , typename Vector::item25, typename Vector::item26
+ , typename Vector::item27, typename Vector::item28
+ , typename Vector::item29, typename Vector::item30
+ , typename Vector::item31, typename Vector::item32
+ , typename Vector::item33, typename Vector::item34
+ , typename Vector::item35, typename Vector::item36
+ , typename Vector::item37, typename Vector::item38
+ , typename Vector::item39
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<39> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector40<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<40> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector39<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38
+ > type;
+ };
+};
+
+namespace aux {
+template<> struct v_at_impl<40>
+{
+ template< typename V_ > struct result_
+ {
+ typedef typename V_::item40 type;
+ };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<40> >
+{
+ template< typename V_, typename N > struct apply
+ {
+ typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+ ::template result_<V_>::type type;
+ };
+};
+
+template<>
+struct front_impl< aux::vector_tag<40> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::item0 type;
+ };
+};
+
+template<>
+struct back_impl< aux::vector_tag<40> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::back type;
+ };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<40> >
+{
+ template< typename Vector > struct apply
+ : false_
+ {
+ };
+};
+
+template<>
+struct size_impl< aux::vector_tag<40> >
+{
+ template< typename Vector > struct apply
+ : long_<40>
+ {
+ };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<40> >
+ : size_impl< aux::vector_tag<40> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<40> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<> type;
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector40_c.hpp b/boost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector40_c.hpp
new file mode 100644
index 00000000000..ba0ffa88ee0
--- /dev/null
+++ b/boost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector40_c.hpp
@@ -0,0 +1,281 @@
+
+// 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/vector/vector40_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 vector31_c
+ : vector31<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+ , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+ , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+ >
+{
+ typedef vector31_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 vector32_c
+ : vector32<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+ , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+ , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >, integral_c<T
+ , C31>
+ >
+{
+ typedef vector32_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 vector33_c
+ : vector33<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+ , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+ , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+ , integral_c< T,C31 >, integral_c< T,C32 >
+ >
+{
+ typedef vector33_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 vector34_c
+ : vector34<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+ , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+ , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+ , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+ >
+{
+ typedef vector34_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 vector35_c
+ : vector35<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+ , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+ , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+ , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >, integral_c<T
+ , C34>
+ >
+{
+ typedef vector35_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 vector36_c
+ : vector36<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+ , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+ , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+ , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+ , integral_c< T,C34 >, integral_c< T,C35 >
+ >
+{
+ typedef vector36_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 vector37_c
+ : vector37<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+ , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+ , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+ , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+ , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >
+ >
+{
+ typedef vector37_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 vector38_c
+ : vector38<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+ , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+ , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+ , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+ , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >, integral_c<T
+ , C37>
+ >
+{
+ typedef vector38_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 vector39_c
+ : vector39<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+ , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+ , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+ , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+ , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >
+ , integral_c< T,C37 >, integral_c< T,C38 >
+ >
+{
+ typedef vector39_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 vector40_c
+ : vector40<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+ , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+ , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+ , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+ , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >
+ , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >
+ >
+{
+ typedef vector40_c type;
+ typedef T value_type;
+};
+
+}}
diff --git a/boost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector50.hpp b/boost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector50.hpp
new file mode 100644
index 00000000000..3da323a998f
--- /dev/null
+++ b/boost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector50.hpp
@@ -0,0 +1,2764 @@
+
+// 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/vector/vector50.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 vector41
+{
+ typedef aux::vector_tag<41> tag;
+ typedef vector41 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+ typedef T23 item23;
+ typedef T24 item24;
+ typedef T25 item25;
+ typedef T26 item26;
+ typedef T27 item27;
+ typedef T28 item28;
+ typedef T29 item29;
+ typedef T30 item30;
+ typedef T31 item31;
+ typedef T32 item32;
+ typedef T33 item33;
+ typedef T34 item34;
+ typedef T35 item35;
+ typedef T36 item36;
+ typedef T37 item37;
+ typedef T38 item38;
+ typedef T39 item39;
+ typedef T40 item40;
+
+
+ typedef void_ item41;
+ typedef T40 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,41 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<40> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector41<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<41> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector40<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ , typename Vector::item23, typename Vector::item24
+ , typename Vector::item25, typename Vector::item26
+ , typename Vector::item27, typename Vector::item28
+ , typename Vector::item29, typename Vector::item30
+ , typename Vector::item31, typename Vector::item32
+ , typename Vector::item33, typename Vector::item34
+ , typename Vector::item35, typename Vector::item36
+ , typename Vector::item37, typename Vector::item38
+ , typename Vector::item39, typename Vector::item40
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<40> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector41<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<41> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector40<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ > type;
+ };
+};
+
+namespace aux {
+template<> struct v_at_impl<41>
+{
+ template< typename V_ > struct result_
+ {
+ typedef typename V_::item41 type;
+ };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<41> >
+{
+ template< typename V_, typename N > struct apply
+ {
+ typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+ ::template result_<V_>::type type;
+ };
+};
+
+template<>
+struct front_impl< aux::vector_tag<41> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::item0 type;
+ };
+};
+
+template<>
+struct back_impl< aux::vector_tag<41> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::back type;
+ };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<41> >
+{
+ template< typename Vector > struct apply
+ : false_
+ {
+ };
+};
+
+template<>
+struct size_impl< aux::vector_tag<41> >
+{
+ template< typename Vector > struct apply
+ : long_<41>
+ {
+ };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<41> >
+ : size_impl< aux::vector_tag<41> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<41> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<> 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 vector42
+{
+ typedef aux::vector_tag<42> tag;
+ typedef vector42 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+ typedef T23 item23;
+ typedef T24 item24;
+ typedef T25 item25;
+ typedef T26 item26;
+ typedef T27 item27;
+ typedef T28 item28;
+ typedef T29 item29;
+ typedef T30 item30;
+ typedef T31 item31;
+ typedef T32 item32;
+ typedef T33 item33;
+ typedef T34 item34;
+ typedef T35 item35;
+ typedef T36 item36;
+ typedef T37 item37;
+ typedef T38 item38;
+ typedef T39 item39;
+ typedef T40 item40;
+ typedef T41 item41;
+
+
+ typedef void_ item42;
+ typedef T41 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,42 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<41> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector42<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ , typename Vector::item40
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<42> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector41<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ , typename Vector::item23, typename Vector::item24
+ , typename Vector::item25, typename Vector::item26
+ , typename Vector::item27, typename Vector::item28
+ , typename Vector::item29, typename Vector::item30
+ , typename Vector::item31, typename Vector::item32
+ , typename Vector::item33, typename Vector::item34
+ , typename Vector::item35, typename Vector::item36
+ , typename Vector::item37, typename Vector::item38
+ , typename Vector::item39, typename Vector::item40
+ , typename Vector::item41
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<41> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector42<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ , typename Vector::item40
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<42> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector41<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ , typename Vector::item40
+ > type;
+ };
+};
+
+namespace aux {
+template<> struct v_at_impl<42>
+{
+ template< typename V_ > struct result_
+ {
+ typedef typename V_::item42 type;
+ };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<42> >
+{
+ template< typename V_, typename N > struct apply
+ {
+ typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+ ::template result_<V_>::type type;
+ };
+};
+
+template<>
+struct front_impl< aux::vector_tag<42> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::item0 type;
+ };
+};
+
+template<>
+struct back_impl< aux::vector_tag<42> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::back type;
+ };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<42> >
+{
+ template< typename Vector > struct apply
+ : false_
+ {
+ };
+};
+
+template<>
+struct size_impl< aux::vector_tag<42> >
+{
+ template< typename Vector > struct apply
+ : long_<42>
+ {
+ };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<42> >
+ : size_impl< aux::vector_tag<42> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<42> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<> 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 vector43
+{
+ typedef aux::vector_tag<43> tag;
+ typedef vector43 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+ typedef T23 item23;
+ typedef T24 item24;
+ typedef T25 item25;
+ typedef T26 item26;
+ typedef T27 item27;
+ typedef T28 item28;
+ typedef T29 item29;
+ typedef T30 item30;
+ typedef T31 item31;
+ typedef T32 item32;
+ typedef T33 item33;
+ typedef T34 item34;
+ typedef T35 item35;
+ typedef T36 item36;
+ typedef T37 item37;
+ typedef T38 item38;
+ typedef T39 item39;
+ typedef T40 item40;
+ typedef T41 item41;
+ typedef T42 item42;
+
+
+ typedef void_ item43;
+ typedef T42 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,43 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<42> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector43<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ , typename Vector::item40, typename Vector::item41
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<43> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector42<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ , typename Vector::item23, typename Vector::item24
+ , typename Vector::item25, typename Vector::item26
+ , typename Vector::item27, typename Vector::item28
+ , typename Vector::item29, typename Vector::item30
+ , typename Vector::item31, typename Vector::item32
+ , typename Vector::item33, typename Vector::item34
+ , typename Vector::item35, typename Vector::item36
+ , typename Vector::item37, typename Vector::item38
+ , typename Vector::item39, typename Vector::item40
+ , typename Vector::item41, typename Vector::item42
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<42> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector43<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ , typename Vector::item40, typename Vector::item41
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<43> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector42<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ , typename Vector::item40, typename Vector::item41
+ > type;
+ };
+};
+
+namespace aux {
+template<> struct v_at_impl<43>
+{
+ template< typename V_ > struct result_
+ {
+ typedef typename V_::item43 type;
+ };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<43> >
+{
+ template< typename V_, typename N > struct apply
+ {
+ typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+ ::template result_<V_>::type type;
+ };
+};
+
+template<>
+struct front_impl< aux::vector_tag<43> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::item0 type;
+ };
+};
+
+template<>
+struct back_impl< aux::vector_tag<43> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::back type;
+ };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<43> >
+{
+ template< typename Vector > struct apply
+ : false_
+ {
+ };
+};
+
+template<>
+struct size_impl< aux::vector_tag<43> >
+{
+ template< typename Vector > struct apply
+ : long_<43>
+ {
+ };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<43> >
+ : size_impl< aux::vector_tag<43> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<43> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<> 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 vector44
+{
+ typedef aux::vector_tag<44> tag;
+ typedef vector44 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+ typedef T23 item23;
+ typedef T24 item24;
+ typedef T25 item25;
+ typedef T26 item26;
+ typedef T27 item27;
+ typedef T28 item28;
+ typedef T29 item29;
+ typedef T30 item30;
+ typedef T31 item31;
+ typedef T32 item32;
+ typedef T33 item33;
+ typedef T34 item34;
+ typedef T35 item35;
+ typedef T36 item36;
+ typedef T37 item37;
+ typedef T38 item38;
+ typedef T39 item39;
+ typedef T40 item40;
+ typedef T41 item41;
+ typedef T42 item42;
+ typedef T43 item43;
+
+
+ typedef void_ item44;
+ typedef T43 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,44 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<43> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector44<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ , typename Vector::item40, typename Vector::item41
+ , typename Vector::item42
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<44> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector43<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ , typename Vector::item23, typename Vector::item24
+ , typename Vector::item25, typename Vector::item26
+ , typename Vector::item27, typename Vector::item28
+ , typename Vector::item29, typename Vector::item30
+ , typename Vector::item31, typename Vector::item32
+ , typename Vector::item33, typename Vector::item34
+ , typename Vector::item35, typename Vector::item36
+ , typename Vector::item37, typename Vector::item38
+ , typename Vector::item39, typename Vector::item40
+ , typename Vector::item41, typename Vector::item42
+ , typename Vector::item43
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<43> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector44<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ , typename Vector::item40, typename Vector::item41
+ , typename Vector::item42
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<44> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector43<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ , typename Vector::item40, typename Vector::item41
+ , typename Vector::item42
+ > type;
+ };
+};
+
+namespace aux {
+template<> struct v_at_impl<44>
+{
+ template< typename V_ > struct result_
+ {
+ typedef typename V_::item44 type;
+ };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<44> >
+{
+ template< typename V_, typename N > struct apply
+ {
+ typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+ ::template result_<V_>::type type;
+ };
+};
+
+template<>
+struct front_impl< aux::vector_tag<44> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::item0 type;
+ };
+};
+
+template<>
+struct back_impl< aux::vector_tag<44> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::back type;
+ };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<44> >
+{
+ template< typename Vector > struct apply
+ : false_
+ {
+ };
+};
+
+template<>
+struct size_impl< aux::vector_tag<44> >
+{
+ template< typename Vector > struct apply
+ : long_<44>
+ {
+ };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<44> >
+ : size_impl< aux::vector_tag<44> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<44> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<> 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 vector45
+{
+ typedef aux::vector_tag<45> tag;
+ typedef vector45 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+ typedef T23 item23;
+ typedef T24 item24;
+ typedef T25 item25;
+ typedef T26 item26;
+ typedef T27 item27;
+ typedef T28 item28;
+ typedef T29 item29;
+ typedef T30 item30;
+ typedef T31 item31;
+ typedef T32 item32;
+ typedef T33 item33;
+ typedef T34 item34;
+ typedef T35 item35;
+ typedef T36 item36;
+ typedef T37 item37;
+ typedef T38 item38;
+ typedef T39 item39;
+ typedef T40 item40;
+ typedef T41 item41;
+ typedef T42 item42;
+ typedef T43 item43;
+ typedef T44 item44;
+
+
+ typedef void_ item45;
+ typedef T44 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,45 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<44> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector45<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ , typename Vector::item40, typename Vector::item41
+ , typename Vector::item42, typename Vector::item43
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<45> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector44<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ , typename Vector::item23, typename Vector::item24
+ , typename Vector::item25, typename Vector::item26
+ , typename Vector::item27, typename Vector::item28
+ , typename Vector::item29, typename Vector::item30
+ , typename Vector::item31, typename Vector::item32
+ , typename Vector::item33, typename Vector::item34
+ , typename Vector::item35, typename Vector::item36
+ , typename Vector::item37, typename Vector::item38
+ , typename Vector::item39, typename Vector::item40
+ , typename Vector::item41, typename Vector::item42
+ , typename Vector::item43, typename Vector::item44
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<44> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector45<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ , typename Vector::item40, typename Vector::item41
+ , typename Vector::item42, typename Vector::item43
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<45> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector44<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ , typename Vector::item40, typename Vector::item41
+ , typename Vector::item42, typename Vector::item43
+ > type;
+ };
+};
+
+namespace aux {
+template<> struct v_at_impl<45>
+{
+ template< typename V_ > struct result_
+ {
+ typedef typename V_::item45 type;
+ };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<45> >
+{
+ template< typename V_, typename N > struct apply
+ {
+ typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+ ::template result_<V_>::type type;
+ };
+};
+
+template<>
+struct front_impl< aux::vector_tag<45> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::item0 type;
+ };
+};
+
+template<>
+struct back_impl< aux::vector_tag<45> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::back type;
+ };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<45> >
+{
+ template< typename Vector > struct apply
+ : false_
+ {
+ };
+};
+
+template<>
+struct size_impl< aux::vector_tag<45> >
+{
+ template< typename Vector > struct apply
+ : long_<45>
+ {
+ };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<45> >
+ : size_impl< aux::vector_tag<45> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<45> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<> 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 vector46
+{
+ typedef aux::vector_tag<46> tag;
+ typedef vector46 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+ typedef T23 item23;
+ typedef T24 item24;
+ typedef T25 item25;
+ typedef T26 item26;
+ typedef T27 item27;
+ typedef T28 item28;
+ typedef T29 item29;
+ typedef T30 item30;
+ typedef T31 item31;
+ typedef T32 item32;
+ typedef T33 item33;
+ typedef T34 item34;
+ typedef T35 item35;
+ typedef T36 item36;
+ typedef T37 item37;
+ typedef T38 item38;
+ typedef T39 item39;
+ typedef T40 item40;
+ typedef T41 item41;
+ typedef T42 item42;
+ typedef T43 item43;
+ typedef T44 item44;
+ typedef T45 item45;
+
+
+ typedef void_ item46;
+ typedef T45 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,46 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<45> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector46<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ , typename Vector::item40, typename Vector::item41
+ , typename Vector::item42, typename Vector::item43
+ , typename Vector::item44
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<46> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector45<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ , typename Vector::item23, typename Vector::item24
+ , typename Vector::item25, typename Vector::item26
+ , typename Vector::item27, typename Vector::item28
+ , typename Vector::item29, typename Vector::item30
+ , typename Vector::item31, typename Vector::item32
+ , typename Vector::item33, typename Vector::item34
+ , typename Vector::item35, typename Vector::item36
+ , typename Vector::item37, typename Vector::item38
+ , typename Vector::item39, typename Vector::item40
+ , typename Vector::item41, typename Vector::item42
+ , typename Vector::item43, typename Vector::item44
+ , typename Vector::item45
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<45> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector46<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ , typename Vector::item40, typename Vector::item41
+ , typename Vector::item42, typename Vector::item43
+ , typename Vector::item44
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<46> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector45<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ , typename Vector::item40, typename Vector::item41
+ , typename Vector::item42, typename Vector::item43
+ , typename Vector::item44
+ > type;
+ };
+};
+
+namespace aux {
+template<> struct v_at_impl<46>
+{
+ template< typename V_ > struct result_
+ {
+ typedef typename V_::item46 type;
+ };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<46> >
+{
+ template< typename V_, typename N > struct apply
+ {
+ typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+ ::template result_<V_>::type type;
+ };
+};
+
+template<>
+struct front_impl< aux::vector_tag<46> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::item0 type;
+ };
+};
+
+template<>
+struct back_impl< aux::vector_tag<46> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::back type;
+ };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<46> >
+{
+ template< typename Vector > struct apply
+ : false_
+ {
+ };
+};
+
+template<>
+struct size_impl< aux::vector_tag<46> >
+{
+ template< typename Vector > struct apply
+ : long_<46>
+ {
+ };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<46> >
+ : size_impl< aux::vector_tag<46> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<46> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<> 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 vector47
+{
+ typedef aux::vector_tag<47> tag;
+ typedef vector47 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+ typedef T23 item23;
+ typedef T24 item24;
+ typedef T25 item25;
+ typedef T26 item26;
+ typedef T27 item27;
+ typedef T28 item28;
+ typedef T29 item29;
+ typedef T30 item30;
+ typedef T31 item31;
+ typedef T32 item32;
+ typedef T33 item33;
+ typedef T34 item34;
+ typedef T35 item35;
+ typedef T36 item36;
+ typedef T37 item37;
+ typedef T38 item38;
+ typedef T39 item39;
+ typedef T40 item40;
+ typedef T41 item41;
+ typedef T42 item42;
+ typedef T43 item43;
+ typedef T44 item44;
+ typedef T45 item45;
+ typedef T46 item46;
+
+
+ typedef void_ item47;
+ typedef T46 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,47 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<46> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector47<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ , typename Vector::item40, typename Vector::item41
+ , typename Vector::item42, typename Vector::item43
+ , typename Vector::item44, typename Vector::item45
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<47> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector46<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ , typename Vector::item23, typename Vector::item24
+ , typename Vector::item25, typename Vector::item26
+ , typename Vector::item27, typename Vector::item28
+ , typename Vector::item29, typename Vector::item30
+ , typename Vector::item31, typename Vector::item32
+ , typename Vector::item33, typename Vector::item34
+ , typename Vector::item35, typename Vector::item36
+ , typename Vector::item37, typename Vector::item38
+ , typename Vector::item39, typename Vector::item40
+ , typename Vector::item41, typename Vector::item42
+ , typename Vector::item43, typename Vector::item44
+ , typename Vector::item45, typename Vector::item46
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<46> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector47<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ , typename Vector::item40, typename Vector::item41
+ , typename Vector::item42, typename Vector::item43
+ , typename Vector::item44, typename Vector::item45
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<47> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector46<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ , typename Vector::item40, typename Vector::item41
+ , typename Vector::item42, typename Vector::item43
+ , typename Vector::item44, typename Vector::item45
+ > type;
+ };
+};
+
+namespace aux {
+template<> struct v_at_impl<47>
+{
+ template< typename V_ > struct result_
+ {
+ typedef typename V_::item47 type;
+ };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<47> >
+{
+ template< typename V_, typename N > struct apply
+ {
+ typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+ ::template result_<V_>::type type;
+ };
+};
+
+template<>
+struct front_impl< aux::vector_tag<47> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::item0 type;
+ };
+};
+
+template<>
+struct back_impl< aux::vector_tag<47> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::back type;
+ };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<47> >
+{
+ template< typename Vector > struct apply
+ : false_
+ {
+ };
+};
+
+template<>
+struct size_impl< aux::vector_tag<47> >
+{
+ template< typename Vector > struct apply
+ : long_<47>
+ {
+ };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<47> >
+ : size_impl< aux::vector_tag<47> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<47> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<> 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 vector48
+{
+ typedef aux::vector_tag<48> tag;
+ typedef vector48 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+ typedef T23 item23;
+ typedef T24 item24;
+ typedef T25 item25;
+ typedef T26 item26;
+ typedef T27 item27;
+ typedef T28 item28;
+ typedef T29 item29;
+ typedef T30 item30;
+ typedef T31 item31;
+ typedef T32 item32;
+ typedef T33 item33;
+ typedef T34 item34;
+ typedef T35 item35;
+ typedef T36 item36;
+ typedef T37 item37;
+ typedef T38 item38;
+ typedef T39 item39;
+ typedef T40 item40;
+ typedef T41 item41;
+ typedef T42 item42;
+ typedef T43 item43;
+ typedef T44 item44;
+ typedef T45 item45;
+ typedef T46 item46;
+ typedef T47 item47;
+
+
+ typedef void_ item48;
+ typedef T47 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,48 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<47> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector48<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ , typename Vector::item40, typename Vector::item41
+ , typename Vector::item42, typename Vector::item43
+ , typename Vector::item44, typename Vector::item45
+ , typename Vector::item46
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<48> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector47<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ , typename Vector::item23, typename Vector::item24
+ , typename Vector::item25, typename Vector::item26
+ , typename Vector::item27, typename Vector::item28
+ , typename Vector::item29, typename Vector::item30
+ , typename Vector::item31, typename Vector::item32
+ , typename Vector::item33, typename Vector::item34
+ , typename Vector::item35, typename Vector::item36
+ , typename Vector::item37, typename Vector::item38
+ , typename Vector::item39, typename Vector::item40
+ , typename Vector::item41, typename Vector::item42
+ , typename Vector::item43, typename Vector::item44
+ , typename Vector::item45, typename Vector::item46
+ , typename Vector::item47
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<47> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector48<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ , typename Vector::item40, typename Vector::item41
+ , typename Vector::item42, typename Vector::item43
+ , typename Vector::item44, typename Vector::item45
+ , typename Vector::item46
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<48> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector47<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ , typename Vector::item40, typename Vector::item41
+ , typename Vector::item42, typename Vector::item43
+ , typename Vector::item44, typename Vector::item45
+ , typename Vector::item46
+ > type;
+ };
+};
+
+namespace aux {
+template<> struct v_at_impl<48>
+{
+ template< typename V_ > struct result_
+ {
+ typedef typename V_::item48 type;
+ };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<48> >
+{
+ template< typename V_, typename N > struct apply
+ {
+ typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+ ::template result_<V_>::type type;
+ };
+};
+
+template<>
+struct front_impl< aux::vector_tag<48> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::item0 type;
+ };
+};
+
+template<>
+struct back_impl< aux::vector_tag<48> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::back type;
+ };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<48> >
+{
+ template< typename Vector > struct apply
+ : false_
+ {
+ };
+};
+
+template<>
+struct size_impl< aux::vector_tag<48> >
+{
+ template< typename Vector > struct apply
+ : long_<48>
+ {
+ };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<48> >
+ : size_impl< aux::vector_tag<48> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<48> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<> 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 vector49
+{
+ typedef aux::vector_tag<49> tag;
+ typedef vector49 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+ typedef T23 item23;
+ typedef T24 item24;
+ typedef T25 item25;
+ typedef T26 item26;
+ typedef T27 item27;
+ typedef T28 item28;
+ typedef T29 item29;
+ typedef T30 item30;
+ typedef T31 item31;
+ typedef T32 item32;
+ typedef T33 item33;
+ typedef T34 item34;
+ typedef T35 item35;
+ typedef T36 item36;
+ typedef T37 item37;
+ typedef T38 item38;
+ typedef T39 item39;
+ typedef T40 item40;
+ typedef T41 item41;
+ typedef T42 item42;
+ typedef T43 item43;
+ typedef T44 item44;
+ typedef T45 item45;
+ typedef T46 item46;
+ typedef T47 item47;
+ typedef T48 item48;
+
+
+ typedef void_ item49;
+ typedef T48 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,49 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<48> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector49<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ , typename Vector::item40, typename Vector::item41
+ , typename Vector::item42, typename Vector::item43
+ , typename Vector::item44, typename Vector::item45
+ , typename Vector::item46, typename Vector::item47
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<49> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector48<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ , typename Vector::item23, typename Vector::item24
+ , typename Vector::item25, typename Vector::item26
+ , typename Vector::item27, typename Vector::item28
+ , typename Vector::item29, typename Vector::item30
+ , typename Vector::item31, typename Vector::item32
+ , typename Vector::item33, typename Vector::item34
+ , typename Vector::item35, typename Vector::item36
+ , typename Vector::item37, typename Vector::item38
+ , typename Vector::item39, typename Vector::item40
+ , typename Vector::item41, typename Vector::item42
+ , typename Vector::item43, typename Vector::item44
+ , typename Vector::item45, typename Vector::item46
+ , typename Vector::item47, typename Vector::item48
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<48> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector49<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ , typename Vector::item40, typename Vector::item41
+ , typename Vector::item42, typename Vector::item43
+ , typename Vector::item44, typename Vector::item45
+ , typename Vector::item46, typename Vector::item47
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<49> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector48<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ , typename Vector::item40, typename Vector::item41
+ , typename Vector::item42, typename Vector::item43
+ , typename Vector::item44, typename Vector::item45
+ , typename Vector::item46, typename Vector::item47
+ > type;
+ };
+};
+
+namespace aux {
+template<> struct v_at_impl<49>
+{
+ template< typename V_ > struct result_
+ {
+ typedef typename V_::item49 type;
+ };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<49> >
+{
+ template< typename V_, typename N > struct apply
+ {
+ typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+ ::template result_<V_>::type type;
+ };
+};
+
+template<>
+struct front_impl< aux::vector_tag<49> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::item0 type;
+ };
+};
+
+template<>
+struct back_impl< aux::vector_tag<49> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::back type;
+ };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<49> >
+{
+ template< typename Vector > struct apply
+ : false_
+ {
+ };
+};
+
+template<>
+struct size_impl< aux::vector_tag<49> >
+{
+ template< typename Vector > struct apply
+ : long_<49>
+ {
+ };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<49> >
+ : size_impl< aux::vector_tag<49> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<49> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<> 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 vector50
+{
+ typedef aux::vector_tag<50> tag;
+ typedef vector50 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+ typedef T23 item23;
+ typedef T24 item24;
+ typedef T25 item25;
+ typedef T26 item26;
+ typedef T27 item27;
+ typedef T28 item28;
+ typedef T29 item29;
+ typedef T30 item30;
+ typedef T31 item31;
+ typedef T32 item32;
+ typedef T33 item33;
+ typedef T34 item34;
+ typedef T35 item35;
+ typedef T36 item36;
+ typedef T37 item37;
+ typedef T38 item38;
+ typedef T39 item39;
+ typedef T40 item40;
+ typedef T41 item41;
+ typedef T42 item42;
+ typedef T43 item43;
+ typedef T44 item44;
+ typedef T45 item45;
+ typedef T46 item46;
+ typedef T47 item47;
+ typedef T48 item48;
+ typedef T49 item49;
+
+
+ typedef void_ item50;
+ typedef T49 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,50 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<49> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector50<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ , typename Vector::item40, typename Vector::item41
+ , typename Vector::item42, typename Vector::item43
+ , typename Vector::item44, typename Vector::item45
+ , typename Vector::item46, typename Vector::item47
+ , typename Vector::item48
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<50> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector49<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ , typename Vector::item23, typename Vector::item24
+ , typename Vector::item25, typename Vector::item26
+ , typename Vector::item27, typename Vector::item28
+ , typename Vector::item29, typename Vector::item30
+ , typename Vector::item31, typename Vector::item32
+ , typename Vector::item33, typename Vector::item34
+ , typename Vector::item35, typename Vector::item36
+ , typename Vector::item37, typename Vector::item38
+ , typename Vector::item39, typename Vector::item40
+ , typename Vector::item41, typename Vector::item42
+ , typename Vector::item43, typename Vector::item44
+ , typename Vector::item45, typename Vector::item46
+ , typename Vector::item47, typename Vector::item48
+ , typename Vector::item49
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<49> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector50<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ , typename Vector::item40, typename Vector::item41
+ , typename Vector::item42, typename Vector::item43
+ , typename Vector::item44, typename Vector::item45
+ , typename Vector::item46, typename Vector::item47
+ , typename Vector::item48
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<50> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector49<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ , typename Vector::item40, typename Vector::item41
+ , typename Vector::item42, typename Vector::item43
+ , typename Vector::item44, typename Vector::item45
+ , typename Vector::item46, typename Vector::item47
+ , typename Vector::item48
+ > type;
+ };
+};
+
+namespace aux {
+template<> struct v_at_impl<50>
+{
+ template< typename V_ > struct result_
+ {
+ typedef typename V_::item50 type;
+ };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<50> >
+{
+ template< typename V_, typename N > struct apply
+ {
+ typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+ ::template result_<V_>::type type;
+ };
+};
+
+template<>
+struct front_impl< aux::vector_tag<50> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::item0 type;
+ };
+};
+
+template<>
+struct back_impl< aux::vector_tag<50> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef typename Vector::back type;
+ };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<50> >
+{
+ template< typename Vector > struct apply
+ : false_
+ {
+ };
+};
+
+template<>
+struct size_impl< aux::vector_tag<50> >
+{
+ template< typename Vector > struct apply
+ : long_<50>
+ {
+ };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<50> >
+ : size_impl< aux::vector_tag<50> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<50> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<> type;
+ };
+};
+
+}}
diff --git a/boost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector50_c.hpp b/boost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector50_c.hpp
new file mode 100644
index 00000000000..e07f2b3ad56
--- /dev/null
+++ b/boost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector50_c.hpp
@@ -0,0 +1,325 @@
+
+// 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/vector/vector50_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 vector41_c
+ : vector41<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+ , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+ , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+ , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+ , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >
+ , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >, integral_c<T
+ , C40>
+ >
+{
+ typedef vector41_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 vector42_c
+ : vector42<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+ , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+ , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+ , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+ , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >
+ , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >
+ , integral_c< T,C40 >, integral_c< T,C41 >
+ >
+{
+ typedef vector42_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 vector43_c
+ : vector43<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+ , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+ , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+ , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+ , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >
+ , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >
+ , integral_c< T,C40 >, integral_c< T,C41 >, integral_c< T,C42 >
+ >
+{
+ typedef vector43_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 vector44_c
+ : vector44<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+ , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+ , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+ , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+ , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >
+ , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >
+ , integral_c< T,C40 >, integral_c< T,C41 >, integral_c< T,C42 >, integral_c<T
+ , C43>
+ >
+{
+ typedef vector44_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 vector45_c
+ : vector45<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+ , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+ , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+ , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+ , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >
+ , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >
+ , integral_c< T,C40 >, integral_c< T,C41 >, integral_c< T,C42 >
+ , integral_c< T,C43 >, integral_c< T,C44 >
+ >
+{
+ typedef vector45_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 vector46_c
+ : vector46<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+ , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+ , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+ , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+ , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >
+ , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >
+ , integral_c< T,C40 >, integral_c< T,C41 >, integral_c< T,C42 >
+ , integral_c< T,C43 >, integral_c< T,C44 >, integral_c< T,C45 >
+ >
+{
+ typedef vector46_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 vector47_c
+ : vector47<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+ , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+ , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+ , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+ , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >
+ , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >
+ , integral_c< T,C40 >, integral_c< T,C41 >, integral_c< T,C42 >
+ , integral_c< T,C43 >, integral_c< T,C44 >, integral_c< T,C45 >, integral_c<T
+ , C46>
+ >
+{
+ typedef vector47_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 vector48_c
+ : vector48<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+ , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+ , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+ , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+ , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >
+ , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >
+ , integral_c< T,C40 >, integral_c< T,C41 >, integral_c< T,C42 >
+ , integral_c< T,C43 >, integral_c< T,C44 >, integral_c< T,C45 >
+ , integral_c< T,C46 >, integral_c< T,C47 >
+ >
+{
+ typedef vector48_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 vector49_c
+ : vector49<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+ , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+ , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+ , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+ , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >
+ , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >
+ , integral_c< T,C40 >, integral_c< T,C41 >, integral_c< T,C42 >
+ , integral_c< T,C43 >, integral_c< T,C44 >, integral_c< T,C45 >
+ , integral_c< T,C46 >, integral_c< T,C47 >, integral_c< T,C48 >
+ >
+{
+ typedef vector49_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 vector50_c
+ : vector50<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+ , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+ , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+ , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+ , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >
+ , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >
+ , integral_c< T,C40 >, integral_c< T,C41 >, integral_c< T,C42 >
+ , integral_c< T,C43 >, integral_c< T,C44 >, integral_c< T,C45 >
+ , integral_c< T,C46 >, integral_c< T,C47 >, integral_c< T,C48 >, integral_c<T
+ , C49>
+ >
+{
+ typedef vector50_c type;
+ typedef T value_type;
+};
+
+}}
diff --git a/boost/boost/mpl/vector/aux_/preprocessed/plain/vector10.hpp b/boost/boost/mpl/vector/aux_/preprocessed/plain/vector10.hpp
new file mode 100644
index 00000000000..88bbd3b318d
--- /dev/null
+++ b/boost/boost/mpl/vector/aux_/preprocessed/plain/vector10.hpp
@@ -0,0 +1,829 @@
+
+// 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/vector/vector10.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template< typename V >
+struct v_at< V,0 >
+{
+ typedef typename V::item0 type;
+};
+
+template<
+ typename T0
+ >
+struct vector1
+{
+ typedef aux::vector_tag<1> tag;
+ typedef vector1 type;
+ typedef T0 item0;
+ typedef void_ item1;
+ typedef T0 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,1 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<0> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector1<
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<1> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<
+
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<0> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector1<
+
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<1> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector0<
+
+ > type;
+ };
+};
+
+template< typename V >
+struct v_at< V,1 >
+{
+ typedef typename V::item1 type;
+};
+
+template<
+ typename T0, typename T1
+ >
+struct vector2
+{
+ typedef aux::vector_tag<2> tag;
+ typedef vector2 type;
+ typedef T0 item0;
+ typedef T1 item1;
+
+
+ typedef void_ item2;
+ typedef T1 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,2 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<1> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector2<
+ T
+ ,
+ typename Vector::item0
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<2> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector1<
+ typename Vector::item1
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<1> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector2<
+ typename Vector::item0
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<2> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector1<
+ typename Vector::item0
+ > type;
+ };
+};
+
+template< typename V >
+struct v_at< V,2 >
+{
+ typedef typename V::item2 type;
+};
+
+template<
+ typename T0, typename T1, typename T2
+ >
+struct vector3
+{
+ typedef aux::vector_tag<3> tag;
+ typedef vector3 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+
+
+ typedef void_ item3;
+ typedef T2 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,3 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<2> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector3<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<3> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector2<
+ typename Vector::item1, typename Vector::item2
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<2> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector3<
+ typename Vector::item0, typename Vector::item1
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<3> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector2<
+ typename Vector::item0, typename Vector::item1
+ > type;
+ };
+};
+
+template< typename V >
+struct v_at< V,3 >
+{
+ typedef typename V::item3 type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3
+ >
+struct vector4
+{
+ typedef aux::vector_tag<4> tag;
+ typedef vector4 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+
+
+ typedef void_ item4;
+ typedef T3 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,4 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<3> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector4<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<4> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector3<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<3> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector4<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<4> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector3<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2
+ > type;
+ };
+};
+
+template< typename V >
+struct v_at< V,4 >
+{
+ typedef typename V::item4 type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ >
+struct vector5
+{
+ typedef aux::vector_tag<5> tag;
+ typedef vector5 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+
+
+ typedef void_ item5;
+ typedef T4 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,5 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<4> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector5<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<5> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector4<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<4> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector5<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<5> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector4<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ > type;
+ };
+};
+
+template< typename V >
+struct v_at< V,5 >
+{
+ typedef typename V::item5 type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct vector6
+{
+ typedef aux::vector_tag<6> tag;
+ typedef vector6 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+
+
+ typedef void_ item6;
+ typedef T5 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,6 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<5> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector6<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<6> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector5<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<5> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector6<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<6> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector5<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4
+ > type;
+ };
+};
+
+template< typename V >
+struct v_at< V,6 >
+{
+ typedef typename V::item6 type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6
+ >
+struct vector7
+{
+ typedef aux::vector_tag<7> tag;
+ typedef vector7 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+
+
+ typedef void_ item7;
+ typedef T6 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,7 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<6> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector7<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<7> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector6<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<6> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector7<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<7> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector6<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ > type;
+ };
+};
+
+template< typename V >
+struct v_at< V,7 >
+{
+ typedef typename V::item7 type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7
+ >
+struct vector8
+{
+ typedef aux::vector_tag<8> tag;
+ typedef vector8 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+
+
+ typedef void_ item8;
+ typedef T7 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,8 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<7> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector8<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<8> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector7<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<7> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector8<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<8> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector7<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6
+ > type;
+ };
+};
+
+template< typename V >
+struct v_at< V,8 >
+{
+ typedef typename V::item8 type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8
+ >
+struct vector9
+{
+ typedef aux::vector_tag<9> tag;
+ typedef vector9 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+
+
+ typedef void_ item9;
+ typedef T8 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,9 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<8> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector9<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<9> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector8<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<8> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector9<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<9> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector8<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ > type;
+ };
+};
+
+template< typename V >
+struct v_at< V,9 >
+{
+ typedef typename V::item9 type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ >
+struct vector10
+{
+ typedef aux::vector_tag<10> tag;
+ typedef vector10 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+
+
+ typedef void_ item10;
+ typedef T9 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,10 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<9> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector10<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<10> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector9<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<9> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector10<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<10> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector9<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8
+ > type;
+ };
+};
+
+template< typename V >
+struct v_at< V,10 >
+{
+ typedef typename V::item10 type;
+};
+
+}}
diff --git a/boost/boost/mpl/vector/aux_/preprocessed/plain/vector10_c.hpp b/boost/boost/mpl/vector/aux_/preprocessed/plain/vector10_c.hpp
new file mode 100644
index 00000000000..8b36f6a3ed7
--- /dev/null
+++ b/boost/boost/mpl/vector/aux_/preprocessed/plain/vector10_c.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/vector/vector10_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T
+ , T C0
+ >
+struct vector1_c
+ : vector1< integral_c< T,C0 > >
+{
+ typedef vector1_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1
+ >
+struct vector2_c
+ : vector2< integral_c< T,C0 >, integral_c< T,C1 > >
+{
+ typedef vector2_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2
+ >
+struct vector3_c
+ : vector3< integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 > >
+{
+ typedef vector3_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3
+ >
+struct vector4_c
+ : vector4<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >, integral_c<T
+ , C3>
+ >
+{
+ typedef vector4_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4
+ >
+struct vector5_c
+ : vector5<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >
+ >
+{
+ typedef vector5_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5
+ >
+struct vector6_c
+ : vector6<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >
+ >
+{
+ typedef vector6_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5, T C6
+ >
+struct vector7_c
+ : vector7<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c<T
+ , C6>
+ >
+{
+ typedef vector7_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 vector8_c
+ : vector8<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >
+ >
+{
+ typedef vector8_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 vector9_c
+ : vector9<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >
+ >
+{
+ typedef vector9_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 vector10_c
+ : vector10<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ >
+{
+ typedef vector10_c type;
+ typedef T value_type;
+};
+
+}}
diff --git a/boost/boost/mpl/vector/aux_/preprocessed/plain/vector20.hpp b/boost/boost/mpl/vector/aux_/preprocessed/plain/vector20.hpp
new file mode 100644
index 00000000000..8c6c8bbb97c
--- /dev/null
+++ b/boost/boost/mpl/vector/aux_/preprocessed/plain/vector20.hpp
@@ -0,0 +1,1144 @@
+
+// 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/vector/vector20.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 vector11
+{
+ typedef aux::vector_tag<11> tag;
+ typedef vector11 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+
+
+ typedef void_ item11;
+ typedef T10 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,11 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<10> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector11<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<11> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector10<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<10> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector11<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<11> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector10<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ > type;
+ };
+};
+
+template< typename V >
+struct v_at< V,11 >
+{
+ typedef typename V::item11 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 vector12
+{
+ typedef aux::vector_tag<12> tag;
+ typedef vector12 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+
+
+ typedef void_ item12;
+ typedef T11 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,12 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<11> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector12<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<12> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector11<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<11> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector12<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<12> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector11<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10
+ > type;
+ };
+};
+
+template< typename V >
+struct v_at< V,12 >
+{
+ typedef typename V::item12 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 vector13
+{
+ typedef aux::vector_tag<13> tag;
+ typedef vector13 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+
+
+ typedef void_ item13;
+ typedef T12 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,13 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<12> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector13<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<13> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector12<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<12> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector13<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<13> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector12<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ > type;
+ };
+};
+
+template< typename V >
+struct v_at< V,13 >
+{
+ typedef typename V::item13 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 vector14
+{
+ typedef aux::vector_tag<14> tag;
+ typedef vector14 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+
+
+ typedef void_ item14;
+ typedef T13 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,14 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<13> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector14<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<14> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector13<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<13> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector14<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<14> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector13<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12
+ > type;
+ };
+};
+
+template< typename V >
+struct v_at< V,14 >
+{
+ typedef typename V::item14 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 vector15
+{
+ typedef aux::vector_tag<15> tag;
+ typedef vector15 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+
+
+ typedef void_ item15;
+ typedef T14 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,15 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<14> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector15<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<15> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector14<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<14> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector15<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<15> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector14<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ > type;
+ };
+};
+
+template< typename V >
+struct v_at< V,15 >
+{
+ typedef typename V::item15 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 vector16
+{
+ typedef aux::vector_tag<16> tag;
+ typedef vector16 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+
+
+ typedef void_ item16;
+ typedef T15 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,16 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<15> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector16<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<16> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector15<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<15> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector16<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<16> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector15<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14
+ > type;
+ };
+};
+
+template< typename V >
+struct v_at< V,16 >
+{
+ typedef typename V::item16 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 vector17
+{
+ typedef aux::vector_tag<17> tag;
+ typedef vector17 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+
+
+ typedef void_ item17;
+ typedef T16 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,17 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<16> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector17<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<17> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector16<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<16> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector17<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<17> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector16<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ > type;
+ };
+};
+
+template< typename V >
+struct v_at< V,17 >
+{
+ typedef typename V::item17 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 vector18
+{
+ typedef aux::vector_tag<18> tag;
+ typedef vector18 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+
+
+ typedef void_ item18;
+ typedef T17 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,18 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<17> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector18<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<18> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector17<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<17> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector18<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<18> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector17<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16
+ > type;
+ };
+};
+
+template< typename V >
+struct v_at< V,18 >
+{
+ typedef typename V::item18 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 vector19
+{
+ typedef aux::vector_tag<19> tag;
+ typedef vector19 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+
+
+ typedef void_ item19;
+ typedef T18 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,19 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<18> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector19<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<19> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector18<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<18> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector19<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<19> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector18<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ > type;
+ };
+};
+
+template< typename V >
+struct v_at< V,19 >
+{
+ typedef typename V::item19 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 vector20
+{
+ typedef aux::vector_tag<20> tag;
+ typedef vector20 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+
+
+ typedef void_ item20;
+ typedef T19 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,20 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<19> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector20<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<20> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector19<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<19> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector20<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<20> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector19<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18
+ > type;
+ };
+};
+
+template< typename V >
+struct v_at< V,20 >
+{
+ typedef typename V::item20 type;
+};
+
+}}
diff --git a/boost/boost/mpl/vector/aux_/preprocessed/plain/vector20_c.hpp b/boost/boost/mpl/vector/aux_/preprocessed/plain/vector20_c.hpp
new file mode 100644
index 00000000000..56ca53f4ea3
--- /dev/null
+++ b/boost/boost/mpl/vector/aux_/preprocessed/plain/vector20_c.hpp
@@ -0,0 +1,195 @@
+
+// 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/vector/vector20_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 vector11_c
+ : vector11<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >, integral_c<T
+ , C10>
+ >
+{
+ typedef vector11_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 vector12_c
+ : vector12<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >
+ >
+{
+ typedef vector12_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 vector13_c
+ : vector13<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ >
+{
+ typedef vector13_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 vector14_c
+ : vector14<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >, integral_c<T
+ , C13>
+ >
+{
+ typedef vector14_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 vector15_c
+ : vector15<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >
+ >
+{
+ typedef vector15_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 vector16_c
+ : vector16<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ >
+{
+ typedef vector16_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 vector17_c
+ : vector17<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >, integral_c<T
+ , C16>
+ >
+{
+ typedef vector17_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 vector18_c
+ : vector18<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >
+ >
+{
+ typedef vector18_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 vector19_c
+ : vector19<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ >
+{
+ typedef vector19_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 vector20_c
+ : vector20<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >, integral_c<T
+ , C19>
+ >
+{
+ typedef vector20_c type;
+ typedef T value_type;
+};
+
+}}
diff --git a/boost/boost/mpl/vector/aux_/preprocessed/plain/vector30.hpp b/boost/boost/mpl/vector/aux_/preprocessed/plain/vector30.hpp
new file mode 100644
index 00000000000..b7da8e76b6f
--- /dev/null
+++ b/boost/boost/mpl/vector/aux_/preprocessed/plain/vector30.hpp
@@ -0,0 +1,1464 @@
+
+// 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/vector/vector30.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 vector21
+{
+ typedef aux::vector_tag<21> tag;
+ typedef vector21 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+
+
+ typedef void_ item21;
+ typedef T20 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,21 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<20> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector21<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<21> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector20<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<20> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector21<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<21> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector20<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ > type;
+ };
+};
+
+template< typename V >
+struct v_at< V,21 >
+{
+ typedef typename V::item21 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 vector22
+{
+ typedef aux::vector_tag<22> tag;
+ typedef vector22 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+
+
+ typedef void_ item22;
+ typedef T21 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,22 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<21> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector22<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<22> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector21<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<21> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector22<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<22> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector21<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20
+ > type;
+ };
+};
+
+template< typename V >
+struct v_at< V,22 >
+{
+ typedef typename V::item22 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 vector23
+{
+ typedef aux::vector_tag<23> tag;
+ typedef vector23 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+
+
+ typedef void_ item23;
+ typedef T22 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,23 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<22> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector23<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<23> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector22<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<22> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector23<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<23> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector22<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ > type;
+ };
+};
+
+template< typename V >
+struct v_at< V,23 >
+{
+ typedef typename V::item23 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 vector24
+{
+ typedef aux::vector_tag<24> tag;
+ typedef vector24 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+ typedef T23 item23;
+
+
+ typedef void_ item24;
+ typedef T23 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,24 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<23> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector24<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<24> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector23<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ , typename Vector::item23
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<23> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector24<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<24> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector23<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22
+ > type;
+ };
+};
+
+template< typename V >
+struct v_at< V,24 >
+{
+ typedef typename V::item24 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 vector25
+{
+ typedef aux::vector_tag<25> tag;
+ typedef vector25 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+ typedef T23 item23;
+ typedef T24 item24;
+
+
+ typedef void_ item25;
+ typedef T24 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,25 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<24> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector25<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<25> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector24<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ , typename Vector::item23, typename Vector::item24
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<24> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector25<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<25> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector24<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ > type;
+ };
+};
+
+template< typename V >
+struct v_at< V,25 >
+{
+ typedef typename V::item25 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 vector26
+{
+ typedef aux::vector_tag<26> tag;
+ typedef vector26 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+ typedef T23 item23;
+ typedef T24 item24;
+ typedef T25 item25;
+
+
+ typedef void_ item26;
+ typedef T25 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,26 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<25> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector26<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<26> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector25<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ , typename Vector::item23, typename Vector::item24
+ , typename Vector::item25
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<25> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector26<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<26> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector25<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24
+ > type;
+ };
+};
+
+template< typename V >
+struct v_at< V,26 >
+{
+ typedef typename V::item26 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 vector27
+{
+ typedef aux::vector_tag<27> tag;
+ typedef vector27 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+ typedef T23 item23;
+ typedef T24 item24;
+ typedef T25 item25;
+ typedef T26 item26;
+
+
+ typedef void_ item27;
+ typedef T26 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,27 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<26> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector27<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<27> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector26<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ , typename Vector::item23, typename Vector::item24
+ , typename Vector::item25, typename Vector::item26
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<26> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector27<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<27> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector26<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ > type;
+ };
+};
+
+template< typename V >
+struct v_at< V,27 >
+{
+ typedef typename V::item27 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 vector28
+{
+ typedef aux::vector_tag<28> tag;
+ typedef vector28 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+ typedef T23 item23;
+ typedef T24 item24;
+ typedef T25 item25;
+ typedef T26 item26;
+ typedef T27 item27;
+
+
+ typedef void_ item28;
+ typedef T27 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,28 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<27> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector28<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<28> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector27<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ , typename Vector::item23, typename Vector::item24
+ , typename Vector::item25, typename Vector::item26
+ , typename Vector::item27
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<27> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector28<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<28> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector27<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26
+ > type;
+ };
+};
+
+template< typename V >
+struct v_at< V,28 >
+{
+ typedef typename V::item28 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 vector29
+{
+ typedef aux::vector_tag<29> tag;
+ typedef vector29 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+ typedef T23 item23;
+ typedef T24 item24;
+ typedef T25 item25;
+ typedef T26 item26;
+ typedef T27 item27;
+ typedef T28 item28;
+
+
+ typedef void_ item29;
+ typedef T28 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,29 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<28> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector29<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<29> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector28<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ , typename Vector::item23, typename Vector::item24
+ , typename Vector::item25, typename Vector::item26
+ , typename Vector::item27, typename Vector::item28
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<28> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector29<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<29> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector28<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ > type;
+ };
+};
+
+template< typename V >
+struct v_at< V,29 >
+{
+ typedef typename V::item29 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 vector30
+{
+ typedef aux::vector_tag<30> tag;
+ typedef vector30 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+ typedef T23 item23;
+ typedef T24 item24;
+ typedef T25 item25;
+ typedef T26 item26;
+ typedef T27 item27;
+ typedef T28 item28;
+ typedef T29 item29;
+
+
+ typedef void_ item30;
+ typedef T29 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,30 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<29> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector30<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<30> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector29<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ , typename Vector::item23, typename Vector::item24
+ , typename Vector::item25, typename Vector::item26
+ , typename Vector::item27, typename Vector::item28
+ , typename Vector::item29
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<29> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector30<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<30> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector29<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28
+ > type;
+ };
+};
+
+template< typename V >
+struct v_at< V,30 >
+{
+ typedef typename V::item30 type;
+};
+
+}}
diff --git a/boost/boost/mpl/vector/aux_/preprocessed/plain/vector30_c.hpp b/boost/boost/mpl/vector/aux_/preprocessed/plain/vector30_c.hpp
new file mode 100644
index 00000000000..6251dbc5467
--- /dev/null
+++ b/boost/boost/mpl/vector/aux_/preprocessed/plain/vector30_c.hpp
@@ -0,0 +1,238 @@
+
+// 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/vector/vector30_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 vector21_c
+ : vector21<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >
+ >
+{
+ typedef vector21_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 vector22_c
+ : vector22<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ >
+{
+ typedef vector22_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 vector23_c
+ : vector23<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >, integral_c<T
+ , C22>
+ >
+{
+ typedef vector23_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 vector24_c
+ : vector24<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ , integral_c< T,C22 >, integral_c< T,C23 >
+ >
+{
+ typedef vector24_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 vector25_c
+ : vector25<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+ >
+{
+ typedef vector25_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 vector26_c
+ : vector26<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >, integral_c<T
+ , C25>
+ >
+{
+ typedef vector26_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 vector27_c
+ : vector27<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+ , integral_c< T,C25 >, integral_c< T,C26 >
+ >
+{
+ typedef vector27_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 vector28_c
+ : vector28<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+ , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+ >
+{
+ typedef vector28_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 vector29_c
+ : vector29<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+ , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >, integral_c<T
+ , C28>
+ >
+{
+ typedef vector29_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 vector30_c
+ : vector30<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+ , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+ , integral_c< T,C28 >, integral_c< T,C29 >
+ >
+{
+ typedef vector30_c type;
+ typedef T value_type;
+};
+
+}}
diff --git a/boost/boost/mpl/vector/aux_/preprocessed/plain/vector40.hpp b/boost/boost/mpl/vector/aux_/preprocessed/plain/vector40.hpp
new file mode 100644
index 00000000000..7487be4b06b
--- /dev/null
+++ b/boost/boost/mpl/vector/aux_/preprocessed/plain/vector40.hpp
@@ -0,0 +1,1784 @@
+
+// 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/vector/vector40.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 vector31
+{
+ typedef aux::vector_tag<31> tag;
+ typedef vector31 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+ typedef T23 item23;
+ typedef T24 item24;
+ typedef T25 item25;
+ typedef T26 item26;
+ typedef T27 item27;
+ typedef T28 item28;
+ typedef T29 item29;
+ typedef T30 item30;
+
+
+ typedef void_ item31;
+ typedef T30 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,31 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<30> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector31<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<31> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector30<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ , typename Vector::item23, typename Vector::item24
+ , typename Vector::item25, typename Vector::item26
+ , typename Vector::item27, typename Vector::item28
+ , typename Vector::item29, typename Vector::item30
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<30> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector31<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<31> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector30<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ > type;
+ };
+};
+
+template< typename V >
+struct v_at< V,31 >
+{
+ typedef typename V::item31 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 vector32
+{
+ typedef aux::vector_tag<32> tag;
+ typedef vector32 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+ typedef T23 item23;
+ typedef T24 item24;
+ typedef T25 item25;
+ typedef T26 item26;
+ typedef T27 item27;
+ typedef T28 item28;
+ typedef T29 item29;
+ typedef T30 item30;
+ typedef T31 item31;
+
+
+ typedef void_ item32;
+ typedef T31 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,32 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<31> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector32<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<32> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector31<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ , typename Vector::item23, typename Vector::item24
+ , typename Vector::item25, typename Vector::item26
+ , typename Vector::item27, typename Vector::item28
+ , typename Vector::item29, typename Vector::item30
+ , typename Vector::item31
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<31> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector32<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<32> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector31<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30
+ > type;
+ };
+};
+
+template< typename V >
+struct v_at< V,32 >
+{
+ typedef typename V::item32 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 vector33
+{
+ typedef aux::vector_tag<33> tag;
+ typedef vector33 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+ typedef T23 item23;
+ typedef T24 item24;
+ typedef T25 item25;
+ typedef T26 item26;
+ typedef T27 item27;
+ typedef T28 item28;
+ typedef T29 item29;
+ typedef T30 item30;
+ typedef T31 item31;
+ typedef T32 item32;
+
+
+ typedef void_ item33;
+ typedef T32 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,33 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<32> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector33<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<33> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector32<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ , typename Vector::item23, typename Vector::item24
+ , typename Vector::item25, typename Vector::item26
+ , typename Vector::item27, typename Vector::item28
+ , typename Vector::item29, typename Vector::item30
+ , typename Vector::item31, typename Vector::item32
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<32> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector33<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<33> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector32<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ > type;
+ };
+};
+
+template< typename V >
+struct v_at< V,33 >
+{
+ typedef typename V::item33 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 vector34
+{
+ typedef aux::vector_tag<34> tag;
+ typedef vector34 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+ typedef T23 item23;
+ typedef T24 item24;
+ typedef T25 item25;
+ typedef T26 item26;
+ typedef T27 item27;
+ typedef T28 item28;
+ typedef T29 item29;
+ typedef T30 item30;
+ typedef T31 item31;
+ typedef T32 item32;
+ typedef T33 item33;
+
+
+ typedef void_ item34;
+ typedef T33 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,34 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<33> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector34<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<34> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector33<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ , typename Vector::item23, typename Vector::item24
+ , typename Vector::item25, typename Vector::item26
+ , typename Vector::item27, typename Vector::item28
+ , typename Vector::item29, typename Vector::item30
+ , typename Vector::item31, typename Vector::item32
+ , typename Vector::item33
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<33> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector34<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<34> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector33<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32
+ > type;
+ };
+};
+
+template< typename V >
+struct v_at< V,34 >
+{
+ typedef typename V::item34 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 vector35
+{
+ typedef aux::vector_tag<35> tag;
+ typedef vector35 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+ typedef T23 item23;
+ typedef T24 item24;
+ typedef T25 item25;
+ typedef T26 item26;
+ typedef T27 item27;
+ typedef T28 item28;
+ typedef T29 item29;
+ typedef T30 item30;
+ typedef T31 item31;
+ typedef T32 item32;
+ typedef T33 item33;
+ typedef T34 item34;
+
+
+ typedef void_ item35;
+ typedef T34 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,35 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<34> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector35<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<35> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector34<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ , typename Vector::item23, typename Vector::item24
+ , typename Vector::item25, typename Vector::item26
+ , typename Vector::item27, typename Vector::item28
+ , typename Vector::item29, typename Vector::item30
+ , typename Vector::item31, typename Vector::item32
+ , typename Vector::item33, typename Vector::item34
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<34> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector35<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<35> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector34<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ > type;
+ };
+};
+
+template< typename V >
+struct v_at< V,35 >
+{
+ typedef typename V::item35 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 vector36
+{
+ typedef aux::vector_tag<36> tag;
+ typedef vector36 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+ typedef T23 item23;
+ typedef T24 item24;
+ typedef T25 item25;
+ typedef T26 item26;
+ typedef T27 item27;
+ typedef T28 item28;
+ typedef T29 item29;
+ typedef T30 item30;
+ typedef T31 item31;
+ typedef T32 item32;
+ typedef T33 item33;
+ typedef T34 item34;
+ typedef T35 item35;
+
+
+ typedef void_ item36;
+ typedef T35 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,36 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<35> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector36<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<36> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector35<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ , typename Vector::item23, typename Vector::item24
+ , typename Vector::item25, typename Vector::item26
+ , typename Vector::item27, typename Vector::item28
+ , typename Vector::item29, typename Vector::item30
+ , typename Vector::item31, typename Vector::item32
+ , typename Vector::item33, typename Vector::item34
+ , typename Vector::item35
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<35> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector36<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<36> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector35<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34
+ > type;
+ };
+};
+
+template< typename V >
+struct v_at< V,36 >
+{
+ typedef typename V::item36 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 vector37
+{
+ typedef aux::vector_tag<37> tag;
+ typedef vector37 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+ typedef T23 item23;
+ typedef T24 item24;
+ typedef T25 item25;
+ typedef T26 item26;
+ typedef T27 item27;
+ typedef T28 item28;
+ typedef T29 item29;
+ typedef T30 item30;
+ typedef T31 item31;
+ typedef T32 item32;
+ typedef T33 item33;
+ typedef T34 item34;
+ typedef T35 item35;
+ typedef T36 item36;
+
+
+ typedef void_ item37;
+ typedef T36 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,37 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<36> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector37<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<37> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector36<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ , typename Vector::item23, typename Vector::item24
+ , typename Vector::item25, typename Vector::item26
+ , typename Vector::item27, typename Vector::item28
+ , typename Vector::item29, typename Vector::item30
+ , typename Vector::item31, typename Vector::item32
+ , typename Vector::item33, typename Vector::item34
+ , typename Vector::item35, typename Vector::item36
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<36> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector37<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<37> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector36<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ > type;
+ };
+};
+
+template< typename V >
+struct v_at< V,37 >
+{
+ typedef typename V::item37 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 vector38
+{
+ typedef aux::vector_tag<38> tag;
+ typedef vector38 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+ typedef T23 item23;
+ typedef T24 item24;
+ typedef T25 item25;
+ typedef T26 item26;
+ typedef T27 item27;
+ typedef T28 item28;
+ typedef T29 item29;
+ typedef T30 item30;
+ typedef T31 item31;
+ typedef T32 item32;
+ typedef T33 item33;
+ typedef T34 item34;
+ typedef T35 item35;
+ typedef T36 item36;
+ typedef T37 item37;
+
+
+ typedef void_ item38;
+ typedef T37 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,38 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<37> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector38<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<38> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector37<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ , typename Vector::item23, typename Vector::item24
+ , typename Vector::item25, typename Vector::item26
+ , typename Vector::item27, typename Vector::item28
+ , typename Vector::item29, typename Vector::item30
+ , typename Vector::item31, typename Vector::item32
+ , typename Vector::item33, typename Vector::item34
+ , typename Vector::item35, typename Vector::item36
+ , typename Vector::item37
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<37> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector38<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<38> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector37<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36
+ > type;
+ };
+};
+
+template< typename V >
+struct v_at< V,38 >
+{
+ typedef typename V::item38 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 vector39
+{
+ typedef aux::vector_tag<39> tag;
+ typedef vector39 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+ typedef T23 item23;
+ typedef T24 item24;
+ typedef T25 item25;
+ typedef T26 item26;
+ typedef T27 item27;
+ typedef T28 item28;
+ typedef T29 item29;
+ typedef T30 item30;
+ typedef T31 item31;
+ typedef T32 item32;
+ typedef T33 item33;
+ typedef T34 item34;
+ typedef T35 item35;
+ typedef T36 item36;
+ typedef T37 item37;
+ typedef T38 item38;
+
+
+ typedef void_ item39;
+ typedef T38 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,39 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<38> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector39<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<39> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector38<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ , typename Vector::item23, typename Vector::item24
+ , typename Vector::item25, typename Vector::item26
+ , typename Vector::item27, typename Vector::item28
+ , typename Vector::item29, typename Vector::item30
+ , typename Vector::item31, typename Vector::item32
+ , typename Vector::item33, typename Vector::item34
+ , typename Vector::item35, typename Vector::item36
+ , typename Vector::item37, typename Vector::item38
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<38> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector39<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<39> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector38<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ > type;
+ };
+};
+
+template< typename V >
+struct v_at< V,39 >
+{
+ typedef typename V::item39 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 vector40
+{
+ typedef aux::vector_tag<40> tag;
+ typedef vector40 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+ typedef T23 item23;
+ typedef T24 item24;
+ typedef T25 item25;
+ typedef T26 item26;
+ typedef T27 item27;
+ typedef T28 item28;
+ typedef T29 item29;
+ typedef T30 item30;
+ typedef T31 item31;
+ typedef T32 item32;
+ typedef T33 item33;
+ typedef T34 item34;
+ typedef T35 item35;
+ typedef T36 item36;
+ typedef T37 item37;
+ typedef T38 item38;
+ typedef T39 item39;
+
+
+ typedef void_ item40;
+ typedef T39 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,40 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<39> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector40<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<40> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector39<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ , typename Vector::item23, typename Vector::item24
+ , typename Vector::item25, typename Vector::item26
+ , typename Vector::item27, typename Vector::item28
+ , typename Vector::item29, typename Vector::item30
+ , typename Vector::item31, typename Vector::item32
+ , typename Vector::item33, typename Vector::item34
+ , typename Vector::item35, typename Vector::item36
+ , typename Vector::item37, typename Vector::item38
+ , typename Vector::item39
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<39> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector40<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<40> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector39<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38
+ > type;
+ };
+};
+
+template< typename V >
+struct v_at< V,40 >
+{
+ typedef typename V::item40 type;
+};
+
+}}
diff --git a/boost/boost/mpl/vector/aux_/preprocessed/plain/vector40_c.hpp b/boost/boost/mpl/vector/aux_/preprocessed/plain/vector40_c.hpp
new file mode 100644
index 00000000000..ba0ffa88ee0
--- /dev/null
+++ b/boost/boost/mpl/vector/aux_/preprocessed/plain/vector40_c.hpp
@@ -0,0 +1,281 @@
+
+// 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/vector/vector40_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 vector31_c
+ : vector31<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+ , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+ , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+ >
+{
+ typedef vector31_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 vector32_c
+ : vector32<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+ , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+ , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >, integral_c<T
+ , C31>
+ >
+{
+ typedef vector32_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 vector33_c
+ : vector33<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+ , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+ , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+ , integral_c< T,C31 >, integral_c< T,C32 >
+ >
+{
+ typedef vector33_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 vector34_c
+ : vector34<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+ , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+ , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+ , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+ >
+{
+ typedef vector34_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 vector35_c
+ : vector35<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+ , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+ , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+ , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >, integral_c<T
+ , C34>
+ >
+{
+ typedef vector35_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 vector36_c
+ : vector36<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+ , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+ , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+ , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+ , integral_c< T,C34 >, integral_c< T,C35 >
+ >
+{
+ typedef vector36_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 vector37_c
+ : vector37<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+ , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+ , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+ , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+ , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >
+ >
+{
+ typedef vector37_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 vector38_c
+ : vector38<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+ , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+ , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+ , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+ , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >, integral_c<T
+ , C37>
+ >
+{
+ typedef vector38_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 vector39_c
+ : vector39<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+ , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+ , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+ , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+ , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >
+ , integral_c< T,C37 >, integral_c< T,C38 >
+ >
+{
+ typedef vector39_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 vector40_c
+ : vector40<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+ , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+ , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+ , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+ , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >
+ , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >
+ >
+{
+ typedef vector40_c type;
+ typedef T value_type;
+};
+
+}}
diff --git a/boost/boost/mpl/vector/aux_/preprocessed/plain/vector50.hpp b/boost/boost/mpl/vector/aux_/preprocessed/plain/vector50.hpp
new file mode 100644
index 00000000000..5a4c6d75dfe
--- /dev/null
+++ b/boost/boost/mpl/vector/aux_/preprocessed/plain/vector50.hpp
@@ -0,0 +1,2104 @@
+
+// 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/vector/vector50.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 vector41
+{
+ typedef aux::vector_tag<41> tag;
+ typedef vector41 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+ typedef T23 item23;
+ typedef T24 item24;
+ typedef T25 item25;
+ typedef T26 item26;
+ typedef T27 item27;
+ typedef T28 item28;
+ typedef T29 item29;
+ typedef T30 item30;
+ typedef T31 item31;
+ typedef T32 item32;
+ typedef T33 item33;
+ typedef T34 item34;
+ typedef T35 item35;
+ typedef T36 item36;
+ typedef T37 item37;
+ typedef T38 item38;
+ typedef T39 item39;
+ typedef T40 item40;
+
+
+ typedef void_ item41;
+ typedef T40 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,41 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<40> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector41<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<41> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector40<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ , typename Vector::item23, typename Vector::item24
+ , typename Vector::item25, typename Vector::item26
+ , typename Vector::item27, typename Vector::item28
+ , typename Vector::item29, typename Vector::item30
+ , typename Vector::item31, typename Vector::item32
+ , typename Vector::item33, typename Vector::item34
+ , typename Vector::item35, typename Vector::item36
+ , typename Vector::item37, typename Vector::item38
+ , typename Vector::item39, typename Vector::item40
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<40> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector41<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<41> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector40<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ > type;
+ };
+};
+
+template< typename V >
+struct v_at< V,41 >
+{
+ typedef typename V::item41 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 vector42
+{
+ typedef aux::vector_tag<42> tag;
+ typedef vector42 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+ typedef T23 item23;
+ typedef T24 item24;
+ typedef T25 item25;
+ typedef T26 item26;
+ typedef T27 item27;
+ typedef T28 item28;
+ typedef T29 item29;
+ typedef T30 item30;
+ typedef T31 item31;
+ typedef T32 item32;
+ typedef T33 item33;
+ typedef T34 item34;
+ typedef T35 item35;
+ typedef T36 item36;
+ typedef T37 item37;
+ typedef T38 item38;
+ typedef T39 item39;
+ typedef T40 item40;
+ typedef T41 item41;
+
+
+ typedef void_ item42;
+ typedef T41 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,42 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<41> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector42<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ , typename Vector::item40
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<42> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector41<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ , typename Vector::item23, typename Vector::item24
+ , typename Vector::item25, typename Vector::item26
+ , typename Vector::item27, typename Vector::item28
+ , typename Vector::item29, typename Vector::item30
+ , typename Vector::item31, typename Vector::item32
+ , typename Vector::item33, typename Vector::item34
+ , typename Vector::item35, typename Vector::item36
+ , typename Vector::item37, typename Vector::item38
+ , typename Vector::item39, typename Vector::item40
+ , typename Vector::item41
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<41> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector42<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ , typename Vector::item40
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<42> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector41<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ , typename Vector::item40
+ > type;
+ };
+};
+
+template< typename V >
+struct v_at< V,42 >
+{
+ typedef typename V::item42 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 vector43
+{
+ typedef aux::vector_tag<43> tag;
+ typedef vector43 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+ typedef T23 item23;
+ typedef T24 item24;
+ typedef T25 item25;
+ typedef T26 item26;
+ typedef T27 item27;
+ typedef T28 item28;
+ typedef T29 item29;
+ typedef T30 item30;
+ typedef T31 item31;
+ typedef T32 item32;
+ typedef T33 item33;
+ typedef T34 item34;
+ typedef T35 item35;
+ typedef T36 item36;
+ typedef T37 item37;
+ typedef T38 item38;
+ typedef T39 item39;
+ typedef T40 item40;
+ typedef T41 item41;
+ typedef T42 item42;
+
+
+ typedef void_ item43;
+ typedef T42 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,43 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<42> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector43<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ , typename Vector::item40, typename Vector::item41
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<43> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector42<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ , typename Vector::item23, typename Vector::item24
+ , typename Vector::item25, typename Vector::item26
+ , typename Vector::item27, typename Vector::item28
+ , typename Vector::item29, typename Vector::item30
+ , typename Vector::item31, typename Vector::item32
+ , typename Vector::item33, typename Vector::item34
+ , typename Vector::item35, typename Vector::item36
+ , typename Vector::item37, typename Vector::item38
+ , typename Vector::item39, typename Vector::item40
+ , typename Vector::item41, typename Vector::item42
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<42> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector43<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ , typename Vector::item40, typename Vector::item41
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<43> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector42<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ , typename Vector::item40, typename Vector::item41
+ > type;
+ };
+};
+
+template< typename V >
+struct v_at< V,43 >
+{
+ typedef typename V::item43 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 vector44
+{
+ typedef aux::vector_tag<44> tag;
+ typedef vector44 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+ typedef T23 item23;
+ typedef T24 item24;
+ typedef T25 item25;
+ typedef T26 item26;
+ typedef T27 item27;
+ typedef T28 item28;
+ typedef T29 item29;
+ typedef T30 item30;
+ typedef T31 item31;
+ typedef T32 item32;
+ typedef T33 item33;
+ typedef T34 item34;
+ typedef T35 item35;
+ typedef T36 item36;
+ typedef T37 item37;
+ typedef T38 item38;
+ typedef T39 item39;
+ typedef T40 item40;
+ typedef T41 item41;
+ typedef T42 item42;
+ typedef T43 item43;
+
+
+ typedef void_ item44;
+ typedef T43 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,44 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<43> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector44<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ , typename Vector::item40, typename Vector::item41
+ , typename Vector::item42
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<44> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector43<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ , typename Vector::item23, typename Vector::item24
+ , typename Vector::item25, typename Vector::item26
+ , typename Vector::item27, typename Vector::item28
+ , typename Vector::item29, typename Vector::item30
+ , typename Vector::item31, typename Vector::item32
+ , typename Vector::item33, typename Vector::item34
+ , typename Vector::item35, typename Vector::item36
+ , typename Vector::item37, typename Vector::item38
+ , typename Vector::item39, typename Vector::item40
+ , typename Vector::item41, typename Vector::item42
+ , typename Vector::item43
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<43> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector44<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ , typename Vector::item40, typename Vector::item41
+ , typename Vector::item42
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<44> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector43<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ , typename Vector::item40, typename Vector::item41
+ , typename Vector::item42
+ > type;
+ };
+};
+
+template< typename V >
+struct v_at< V,44 >
+{
+ typedef typename V::item44 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 vector45
+{
+ typedef aux::vector_tag<45> tag;
+ typedef vector45 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+ typedef T23 item23;
+ typedef T24 item24;
+ typedef T25 item25;
+ typedef T26 item26;
+ typedef T27 item27;
+ typedef T28 item28;
+ typedef T29 item29;
+ typedef T30 item30;
+ typedef T31 item31;
+ typedef T32 item32;
+ typedef T33 item33;
+ typedef T34 item34;
+ typedef T35 item35;
+ typedef T36 item36;
+ typedef T37 item37;
+ typedef T38 item38;
+ typedef T39 item39;
+ typedef T40 item40;
+ typedef T41 item41;
+ typedef T42 item42;
+ typedef T43 item43;
+ typedef T44 item44;
+
+
+ typedef void_ item45;
+ typedef T44 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,45 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<44> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector45<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ , typename Vector::item40, typename Vector::item41
+ , typename Vector::item42, typename Vector::item43
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<45> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector44<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ , typename Vector::item23, typename Vector::item24
+ , typename Vector::item25, typename Vector::item26
+ , typename Vector::item27, typename Vector::item28
+ , typename Vector::item29, typename Vector::item30
+ , typename Vector::item31, typename Vector::item32
+ , typename Vector::item33, typename Vector::item34
+ , typename Vector::item35, typename Vector::item36
+ , typename Vector::item37, typename Vector::item38
+ , typename Vector::item39, typename Vector::item40
+ , typename Vector::item41, typename Vector::item42
+ , typename Vector::item43, typename Vector::item44
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<44> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector45<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ , typename Vector::item40, typename Vector::item41
+ , typename Vector::item42, typename Vector::item43
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<45> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector44<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ , typename Vector::item40, typename Vector::item41
+ , typename Vector::item42, typename Vector::item43
+ > type;
+ };
+};
+
+template< typename V >
+struct v_at< V,45 >
+{
+ typedef typename V::item45 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 vector46
+{
+ typedef aux::vector_tag<46> tag;
+ typedef vector46 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+ typedef T23 item23;
+ typedef T24 item24;
+ typedef T25 item25;
+ typedef T26 item26;
+ typedef T27 item27;
+ typedef T28 item28;
+ typedef T29 item29;
+ typedef T30 item30;
+ typedef T31 item31;
+ typedef T32 item32;
+ typedef T33 item33;
+ typedef T34 item34;
+ typedef T35 item35;
+ typedef T36 item36;
+ typedef T37 item37;
+ typedef T38 item38;
+ typedef T39 item39;
+ typedef T40 item40;
+ typedef T41 item41;
+ typedef T42 item42;
+ typedef T43 item43;
+ typedef T44 item44;
+ typedef T45 item45;
+
+
+ typedef void_ item46;
+ typedef T45 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,46 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<45> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector46<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ , typename Vector::item40, typename Vector::item41
+ , typename Vector::item42, typename Vector::item43
+ , typename Vector::item44
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<46> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector45<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ , typename Vector::item23, typename Vector::item24
+ , typename Vector::item25, typename Vector::item26
+ , typename Vector::item27, typename Vector::item28
+ , typename Vector::item29, typename Vector::item30
+ , typename Vector::item31, typename Vector::item32
+ , typename Vector::item33, typename Vector::item34
+ , typename Vector::item35, typename Vector::item36
+ , typename Vector::item37, typename Vector::item38
+ , typename Vector::item39, typename Vector::item40
+ , typename Vector::item41, typename Vector::item42
+ , typename Vector::item43, typename Vector::item44
+ , typename Vector::item45
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<45> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector46<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ , typename Vector::item40, typename Vector::item41
+ , typename Vector::item42, typename Vector::item43
+ , typename Vector::item44
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<46> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector45<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ , typename Vector::item40, typename Vector::item41
+ , typename Vector::item42, typename Vector::item43
+ , typename Vector::item44
+ > type;
+ };
+};
+
+template< typename V >
+struct v_at< V,46 >
+{
+ typedef typename V::item46 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 vector47
+{
+ typedef aux::vector_tag<47> tag;
+ typedef vector47 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+ typedef T23 item23;
+ typedef T24 item24;
+ typedef T25 item25;
+ typedef T26 item26;
+ typedef T27 item27;
+ typedef T28 item28;
+ typedef T29 item29;
+ typedef T30 item30;
+ typedef T31 item31;
+ typedef T32 item32;
+ typedef T33 item33;
+ typedef T34 item34;
+ typedef T35 item35;
+ typedef T36 item36;
+ typedef T37 item37;
+ typedef T38 item38;
+ typedef T39 item39;
+ typedef T40 item40;
+ typedef T41 item41;
+ typedef T42 item42;
+ typedef T43 item43;
+ typedef T44 item44;
+ typedef T45 item45;
+ typedef T46 item46;
+
+
+ typedef void_ item47;
+ typedef T46 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,47 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<46> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector47<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ , typename Vector::item40, typename Vector::item41
+ , typename Vector::item42, typename Vector::item43
+ , typename Vector::item44, typename Vector::item45
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<47> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector46<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ , typename Vector::item23, typename Vector::item24
+ , typename Vector::item25, typename Vector::item26
+ , typename Vector::item27, typename Vector::item28
+ , typename Vector::item29, typename Vector::item30
+ , typename Vector::item31, typename Vector::item32
+ , typename Vector::item33, typename Vector::item34
+ , typename Vector::item35, typename Vector::item36
+ , typename Vector::item37, typename Vector::item38
+ , typename Vector::item39, typename Vector::item40
+ , typename Vector::item41, typename Vector::item42
+ , typename Vector::item43, typename Vector::item44
+ , typename Vector::item45, typename Vector::item46
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<46> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector47<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ , typename Vector::item40, typename Vector::item41
+ , typename Vector::item42, typename Vector::item43
+ , typename Vector::item44, typename Vector::item45
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<47> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector46<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ , typename Vector::item40, typename Vector::item41
+ , typename Vector::item42, typename Vector::item43
+ , typename Vector::item44, typename Vector::item45
+ > type;
+ };
+};
+
+template< typename V >
+struct v_at< V,47 >
+{
+ typedef typename V::item47 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 vector48
+{
+ typedef aux::vector_tag<48> tag;
+ typedef vector48 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+ typedef T23 item23;
+ typedef T24 item24;
+ typedef T25 item25;
+ typedef T26 item26;
+ typedef T27 item27;
+ typedef T28 item28;
+ typedef T29 item29;
+ typedef T30 item30;
+ typedef T31 item31;
+ typedef T32 item32;
+ typedef T33 item33;
+ typedef T34 item34;
+ typedef T35 item35;
+ typedef T36 item36;
+ typedef T37 item37;
+ typedef T38 item38;
+ typedef T39 item39;
+ typedef T40 item40;
+ typedef T41 item41;
+ typedef T42 item42;
+ typedef T43 item43;
+ typedef T44 item44;
+ typedef T45 item45;
+ typedef T46 item46;
+ typedef T47 item47;
+
+
+ typedef void_ item48;
+ typedef T47 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,48 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<47> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector48<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ , typename Vector::item40, typename Vector::item41
+ , typename Vector::item42, typename Vector::item43
+ , typename Vector::item44, typename Vector::item45
+ , typename Vector::item46
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<48> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector47<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ , typename Vector::item23, typename Vector::item24
+ , typename Vector::item25, typename Vector::item26
+ , typename Vector::item27, typename Vector::item28
+ , typename Vector::item29, typename Vector::item30
+ , typename Vector::item31, typename Vector::item32
+ , typename Vector::item33, typename Vector::item34
+ , typename Vector::item35, typename Vector::item36
+ , typename Vector::item37, typename Vector::item38
+ , typename Vector::item39, typename Vector::item40
+ , typename Vector::item41, typename Vector::item42
+ , typename Vector::item43, typename Vector::item44
+ , typename Vector::item45, typename Vector::item46
+ , typename Vector::item47
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<47> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector48<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ , typename Vector::item40, typename Vector::item41
+ , typename Vector::item42, typename Vector::item43
+ , typename Vector::item44, typename Vector::item45
+ , typename Vector::item46
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<48> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector47<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ , typename Vector::item40, typename Vector::item41
+ , typename Vector::item42, typename Vector::item43
+ , typename Vector::item44, typename Vector::item45
+ , typename Vector::item46
+ > type;
+ };
+};
+
+template< typename V >
+struct v_at< V,48 >
+{
+ typedef typename V::item48 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 vector49
+{
+ typedef aux::vector_tag<49> tag;
+ typedef vector49 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+ typedef T23 item23;
+ typedef T24 item24;
+ typedef T25 item25;
+ typedef T26 item26;
+ typedef T27 item27;
+ typedef T28 item28;
+ typedef T29 item29;
+ typedef T30 item30;
+ typedef T31 item31;
+ typedef T32 item32;
+ typedef T33 item33;
+ typedef T34 item34;
+ typedef T35 item35;
+ typedef T36 item36;
+ typedef T37 item37;
+ typedef T38 item38;
+ typedef T39 item39;
+ typedef T40 item40;
+ typedef T41 item41;
+ typedef T42 item42;
+ typedef T43 item43;
+ typedef T44 item44;
+ typedef T45 item45;
+ typedef T46 item46;
+ typedef T47 item47;
+ typedef T48 item48;
+
+
+ typedef void_ item49;
+ typedef T48 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,49 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<48> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector49<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ , typename Vector::item40, typename Vector::item41
+ , typename Vector::item42, typename Vector::item43
+ , typename Vector::item44, typename Vector::item45
+ , typename Vector::item46, typename Vector::item47
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<49> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector48<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ , typename Vector::item23, typename Vector::item24
+ , typename Vector::item25, typename Vector::item26
+ , typename Vector::item27, typename Vector::item28
+ , typename Vector::item29, typename Vector::item30
+ , typename Vector::item31, typename Vector::item32
+ , typename Vector::item33, typename Vector::item34
+ , typename Vector::item35, typename Vector::item36
+ , typename Vector::item37, typename Vector::item38
+ , typename Vector::item39, typename Vector::item40
+ , typename Vector::item41, typename Vector::item42
+ , typename Vector::item43, typename Vector::item44
+ , typename Vector::item45, typename Vector::item46
+ , typename Vector::item47, typename Vector::item48
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<48> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector49<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ , typename Vector::item40, typename Vector::item41
+ , typename Vector::item42, typename Vector::item43
+ , typename Vector::item44, typename Vector::item45
+ , typename Vector::item46, typename Vector::item47
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<49> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector48<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ , typename Vector::item40, typename Vector::item41
+ , typename Vector::item42, typename Vector::item43
+ , typename Vector::item44, typename Vector::item45
+ , typename Vector::item46, typename Vector::item47
+ > type;
+ };
+};
+
+template< typename V >
+struct v_at< V,49 >
+{
+ typedef typename V::item49 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 vector50
+{
+ typedef aux::vector_tag<50> tag;
+ typedef vector50 type;
+ typedef T0 item0;
+ typedef T1 item1;
+ typedef T2 item2;
+ typedef T3 item3;
+ typedef T4 item4;
+ typedef T5 item5;
+ typedef T6 item6;
+ typedef T7 item7;
+ typedef T8 item8;
+ typedef T9 item9;
+ typedef T10 item10;
+ typedef T11 item11;
+ typedef T12 item12;
+ typedef T13 item13;
+ typedef T14 item14;
+ typedef T15 item15;
+ typedef T16 item16;
+ typedef T17 item17;
+ typedef T18 item18;
+ typedef T19 item19;
+ typedef T20 item20;
+ typedef T21 item21;
+ typedef T22 item22;
+ typedef T23 item23;
+ typedef T24 item24;
+ typedef T25 item25;
+ typedef T26 item26;
+ typedef T27 item27;
+ typedef T28 item28;
+ typedef T29 item29;
+ typedef T30 item30;
+ typedef T31 item31;
+ typedef T32 item32;
+ typedef T33 item33;
+ typedef T34 item34;
+ typedef T35 item35;
+ typedef T36 item36;
+ typedef T37 item37;
+ typedef T38 item38;
+ typedef T39 item39;
+ typedef T40 item40;
+ typedef T41 item41;
+ typedef T42 item42;
+ typedef T43 item43;
+ typedef T44 item44;
+ typedef T45 item45;
+ typedef T46 item46;
+ typedef T47 item47;
+ typedef T48 item48;
+ typedef T49 item49;
+
+
+ typedef void_ item50;
+ typedef T49 back;
+ typedef v_iter< type,0 > begin;
+ typedef v_iter< type,50 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<49> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector50<
+ T
+ ,
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ , typename Vector::item40, typename Vector::item41
+ , typename Vector::item42, typename Vector::item43
+ , typename Vector::item44, typename Vector::item45
+ , typename Vector::item46, typename Vector::item47
+ , typename Vector::item48
+ > type;
+ };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<50> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector49<
+ typename Vector::item1, typename Vector::item2
+ , typename Vector::item3, typename Vector::item4
+ , typename Vector::item5, typename Vector::item6
+ , typename Vector::item7, typename Vector::item8
+ , typename Vector::item9, typename Vector::item10
+ , typename Vector::item11, typename Vector::item12
+ , typename Vector::item13, typename Vector::item14
+ , typename Vector::item15, typename Vector::item16
+ , typename Vector::item17, typename Vector::item18
+ , typename Vector::item19, typename Vector::item20
+ , typename Vector::item21, typename Vector::item22
+ , typename Vector::item23, typename Vector::item24
+ , typename Vector::item25, typename Vector::item26
+ , typename Vector::item27, typename Vector::item28
+ , typename Vector::item29, typename Vector::item30
+ , typename Vector::item31, typename Vector::item32
+ , typename Vector::item33, typename Vector::item34
+ , typename Vector::item35, typename Vector::item36
+ , typename Vector::item37, typename Vector::item38
+ , typename Vector::item39, typename Vector::item40
+ , typename Vector::item41, typename Vector::item42
+ , typename Vector::item43, typename Vector::item44
+ , typename Vector::item45, typename Vector::item46
+ , typename Vector::item47, typename Vector::item48
+ , typename Vector::item49
+ > type;
+ };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<49> >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef vector50<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ , typename Vector::item40, typename Vector::item41
+ , typename Vector::item42, typename Vector::item43
+ , typename Vector::item44, typename Vector::item45
+ , typename Vector::item46, typename Vector::item47
+ , typename Vector::item48
+ ,
+ T
+ > type;
+ };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<50> >
+{
+ template< typename Vector > struct apply
+ {
+ typedef vector49<
+ typename Vector::item0, typename Vector::item1
+ , typename Vector::item2, typename Vector::item3
+ , typename Vector::item4, typename Vector::item5
+ , typename Vector::item6, typename Vector::item7
+ , typename Vector::item8, typename Vector::item9
+ , typename Vector::item10, typename Vector::item11
+ , typename Vector::item12, typename Vector::item13
+ , typename Vector::item14, typename Vector::item15
+ , typename Vector::item16, typename Vector::item17
+ , typename Vector::item18, typename Vector::item19
+ , typename Vector::item20, typename Vector::item21
+ , typename Vector::item22, typename Vector::item23
+ , typename Vector::item24, typename Vector::item25
+ , typename Vector::item26, typename Vector::item27
+ , typename Vector::item28, typename Vector::item29
+ , typename Vector::item30, typename Vector::item31
+ , typename Vector::item32, typename Vector::item33
+ , typename Vector::item34, typename Vector::item35
+ , typename Vector::item36, typename Vector::item37
+ , typename Vector::item38, typename Vector::item39
+ , typename Vector::item40, typename Vector::item41
+ , typename Vector::item42, typename Vector::item43
+ , typename Vector::item44, typename Vector::item45
+ , typename Vector::item46, typename Vector::item47
+ , typename Vector::item48
+ > type;
+ };
+};
+
+template< typename V >
+struct v_at< V,50 >
+{
+ typedef typename V::item50 type;
+};
+
+}}
diff --git a/boost/boost/mpl/vector/aux_/preprocessed/plain/vector50_c.hpp b/boost/boost/mpl/vector/aux_/preprocessed/plain/vector50_c.hpp
new file mode 100644
index 00000000000..e07f2b3ad56
--- /dev/null
+++ b/boost/boost/mpl/vector/aux_/preprocessed/plain/vector50_c.hpp
@@ -0,0 +1,325 @@
+
+// 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/vector/vector50_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 vector41_c
+ : vector41<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+ , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+ , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+ , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+ , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >
+ , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >, integral_c<T
+ , C40>
+ >
+{
+ typedef vector41_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 vector42_c
+ : vector42<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+ , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+ , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+ , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+ , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >
+ , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >
+ , integral_c< T,C40 >, integral_c< T,C41 >
+ >
+{
+ typedef vector42_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 vector43_c
+ : vector43<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+ , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+ , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+ , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+ , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >
+ , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >
+ , integral_c< T,C40 >, integral_c< T,C41 >, integral_c< T,C42 >
+ >
+{
+ typedef vector43_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 vector44_c
+ : vector44<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+ , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+ , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+ , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+ , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >
+ , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >
+ , integral_c< T,C40 >, integral_c< T,C41 >, integral_c< T,C42 >, integral_c<T
+ , C43>
+ >
+{
+ typedef vector44_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 vector45_c
+ : vector45<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+ , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+ , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+ , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+ , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >
+ , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >
+ , integral_c< T,C40 >, integral_c< T,C41 >, integral_c< T,C42 >
+ , integral_c< T,C43 >, integral_c< T,C44 >
+ >
+{
+ typedef vector45_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 vector46_c
+ : vector46<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+ , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+ , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+ , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+ , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >
+ , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >
+ , integral_c< T,C40 >, integral_c< T,C41 >, integral_c< T,C42 >
+ , integral_c< T,C43 >, integral_c< T,C44 >, integral_c< T,C45 >
+ >
+{
+ typedef vector46_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 vector47_c
+ : vector47<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+ , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+ , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+ , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+ , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >
+ , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >
+ , integral_c< T,C40 >, integral_c< T,C41 >, integral_c< T,C42 >
+ , integral_c< T,C43 >, integral_c< T,C44 >, integral_c< T,C45 >, integral_c<T
+ , C46>
+ >
+{
+ typedef vector47_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 vector48_c
+ : vector48<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+ , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+ , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+ , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+ , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >
+ , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >
+ , integral_c< T,C40 >, integral_c< T,C41 >, integral_c< T,C42 >
+ , integral_c< T,C43 >, integral_c< T,C44 >, integral_c< T,C45 >
+ , integral_c< T,C46 >, integral_c< T,C47 >
+ >
+{
+ typedef vector48_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 vector49_c
+ : vector49<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+ , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+ , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+ , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+ , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >
+ , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >
+ , integral_c< T,C40 >, integral_c< T,C41 >, integral_c< T,C42 >
+ , integral_c< T,C43 >, integral_c< T,C44 >, integral_c< T,C45 >
+ , integral_c< T,C46 >, integral_c< T,C47 >, integral_c< T,C48 >
+ >
+{
+ typedef vector49_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 vector50_c
+ : vector50<
+ integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+ , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+ , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+ , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+ , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+ , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+ , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+ , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+ , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+ , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+ , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+ , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >
+ , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >
+ , integral_c< T,C40 >, integral_c< T,C41 >, integral_c< T,C42 >
+ , integral_c< T,C43 >, integral_c< T,C44 >, integral_c< T,C45 >
+ , integral_c< T,C46 >, integral_c< T,C47 >, integral_c< T,C48 >, integral_c<T
+ , C49>
+ >
+{
+ typedef vector50_c type;
+ typedef T value_type;
+};
+
+}}
diff --git a/boost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector10.hpp b/boost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector10.hpp
new file mode 100644
index 00000000000..e4c640709a1
--- /dev/null
+++ b/boost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector10.hpp
@@ -0,0 +1,139 @@
+
+// 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/vector/vector10.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T0
+ >
+struct vector1
+ : v_item<
+ T0
+ , vector0< >
+ >
+{
+ typedef vector1 type;
+};
+
+template<
+ typename T0, typename T1
+ >
+struct vector2
+ : v_item<
+ T1
+ , vector1<T0>
+ >
+{
+ typedef vector2 type;
+};
+
+template<
+ typename T0, typename T1, typename T2
+ >
+struct vector3
+ : v_item<
+ T2
+ , vector2< T0,T1 >
+ >
+{
+ typedef vector3 type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3
+ >
+struct vector4
+ : v_item<
+ T3
+ , vector3< T0,T1,T2 >
+ >
+{
+ typedef vector4 type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ >
+struct vector5
+ : v_item<
+ T4
+ , vector4< T0,T1,T2,T3 >
+ >
+{
+ typedef vector5 type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct vector6
+ : v_item<
+ T5
+ , vector5< T0,T1,T2,T3,T4 >
+ >
+{
+ typedef vector6 type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6
+ >
+struct vector7
+ : v_item<
+ T6
+ , vector6< T0,T1,T2,T3,T4,T5 >
+ >
+{
+ typedef vector7 type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7
+ >
+struct vector8
+ : v_item<
+ T7
+ , vector7< T0,T1,T2,T3,T4,T5,T6 >
+ >
+{
+ typedef vector8 type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8
+ >
+struct vector9
+ : v_item<
+ T8
+ , vector8< T0,T1,T2,T3,T4,T5,T6,T7 >
+ >
+{
+ typedef vector9 type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ >
+struct vector10
+ : v_item<
+ T9
+ , vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+ >
+{
+ typedef vector10 type;
+};
+
+}}
diff --git a/boost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector10_c.hpp b/boost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector10_c.hpp
new file mode 100644
index 00000000000..18eabc64daa
--- /dev/null
+++ b/boost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector10_c.hpp
@@ -0,0 +1,154 @@
+
+// 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/vector/vector10_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T
+ , T C0
+ >
+struct vector1_c
+ : v_item<
+ integral_c< T,C0 >
+ , vector0_c<T>
+ >
+{
+ typedef vector1_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1
+ >
+struct vector2_c
+ : v_item<
+ integral_c< T,C1 >
+ , vector1_c< T,C0 >
+ >
+{
+ typedef vector2_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2
+ >
+struct vector3_c
+ : v_item<
+ integral_c< T,C2 >
+ , vector2_c< T,C0,C1 >
+ >
+{
+ typedef vector3_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3
+ >
+struct vector4_c
+ : v_item<
+ integral_c< T,C3 >
+ , vector3_c< T,C0,C1,C2 >
+ >
+{
+ typedef vector4_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4
+ >
+struct vector5_c
+ : v_item<
+ integral_c< T,C4 >
+ , vector4_c< T,C0,C1,C2,C3 >
+ >
+{
+ typedef vector5_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5
+ >
+struct vector6_c
+ : v_item<
+ integral_c< T,C5 >
+ , vector5_c< T,C0,C1,C2,C3,C4 >
+ >
+{
+ typedef vector6_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5, T C6
+ >
+struct vector7_c
+ : v_item<
+ integral_c< T,C6 >
+ , vector6_c< T,C0,C1,C2,C3,C4,C5 >
+ >
+{
+ typedef vector7_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 vector8_c
+ : v_item<
+ integral_c< T,C7 >
+ , vector7_c< T,C0,C1,C2,C3,C4,C5,C6 >
+ >
+{
+ typedef vector8_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 vector9_c
+ : v_item<
+ integral_c< T,C8 >
+ , vector8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >
+ >
+{
+ typedef vector9_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 vector10_c
+ : v_item<
+ integral_c< T,C9 >
+ , vector9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >
+ >
+{
+ typedef vector10_c type;
+ typedef T value_type;
+};
+
+}}
diff --git a/boost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector20.hpp b/boost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector20.hpp
new file mode 100644
index 00000000000..78ccac4e91e
--- /dev/null
+++ b/boost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector20.hpp
@@ -0,0 +1,159 @@
+
+// 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/vector/vector20.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 vector11
+ : v_item<
+ T10
+ , vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+ >
+{
+ typedef vector11 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 vector12
+ : v_item<
+ T11
+ , vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+ >
+{
+ typedef vector12 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 vector13
+ : v_item<
+ T12
+ , vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+ >
+{
+ typedef vector13 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 vector14
+ : v_item<
+ T13
+ , vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+ >
+{
+ typedef vector14 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 vector15
+ : v_item<
+ T14
+ , vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+ >
+{
+ typedef vector15 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 vector16
+ : v_item<
+ T15
+ , vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >
+ >
+{
+ typedef vector16 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 vector17
+ : v_item<
+ T16
+ , vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >
+ >
+{
+ typedef vector17 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 vector18
+ : v_item<
+ T17
+ , vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >
+ >
+{
+ typedef vector18 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 vector19
+ : v_item<
+ T18
+ , vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >
+ >
+{
+ typedef vector19 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 vector20
+ : v_item<
+ T19
+ , vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >
+ >
+{
+ typedef vector20 type;
+};
+
+}}
diff --git a/boost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector20_c.hpp b/boost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector20_c.hpp
new file mode 100644
index 00000000000..4bf67423062
--- /dev/null
+++ b/boost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector20_c.hpp
@@ -0,0 +1,163 @@
+
+// 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/vector/vector20_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 vector11_c
+ : v_item<
+ integral_c< T,C10 >
+ , vector10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >
+ >
+{
+ typedef vector11_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 vector12_c
+ : v_item<
+ integral_c< T,C11 >
+ , vector11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >
+ >
+{
+ typedef vector12_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 vector13_c
+ : v_item<
+ integral_c< T,C12 >
+ , vector12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >
+ >
+{
+ typedef vector13_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 vector14_c
+ : v_item<
+ integral_c< T,C13 >
+ , vector13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >
+ >
+{
+ typedef vector14_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 vector15_c
+ : v_item<
+ integral_c< T,C14 >
+ , vector14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >
+ >
+{
+ typedef vector15_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 vector16_c
+ : v_item<
+ integral_c< T,C15 >
+ , vector15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >
+ >
+{
+ typedef vector16_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 vector17_c
+ : v_item<
+ integral_c< T,C16 >
+ , vector16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >
+ >
+{
+ typedef vector17_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 vector18_c
+ : v_item<
+ integral_c< T,C17 >
+ , vector17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >
+ >
+{
+ typedef vector18_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 vector19_c
+ : v_item<
+ integral_c< T,C18 >
+ , vector18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >
+ >
+{
+ typedef vector19_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 vector20_c
+ : v_item<
+ integral_c< T,C19 >
+ , vector19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >
+ >
+{
+ typedef vector20_c type;
+ typedef T value_type;
+};
+
+}}
diff --git a/boost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector30.hpp b/boost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector30.hpp
new file mode 100644
index 00000000000..c4049906f3b
--- /dev/null
+++ b/boost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector30.hpp
@@ -0,0 +1,179 @@
+
+// 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/vector/vector30.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 vector21
+ : v_item<
+ T20
+ , vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >
+ >
+{
+ typedef vector21 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 vector22
+ : v_item<
+ T21
+ , vector21< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20 >
+ >
+{
+ typedef vector22 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 vector23
+ : v_item<
+ T22
+ , vector22< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21 >
+ >
+{
+ typedef vector23 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 vector24
+ : v_item<
+ T23
+ , vector23< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22 >
+ >
+{
+ typedef vector24 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 vector25
+ : v_item<
+ T24
+ , vector24< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23 >
+ >
+{
+ typedef vector25 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 vector26
+ : v_item<
+ T25
+ , vector25< T0,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 vector26 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 vector27
+ : v_item<
+ T26
+ , vector26< T0,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 vector27 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 vector28
+ : v_item<
+ T27
+ , vector27< T0,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 vector28 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 vector29
+ : v_item<
+ T28
+ , vector28< T0,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 vector29 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 vector30
+ : v_item<
+ T29
+ , vector29< T0,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 vector30 type;
+};
+
+}}
diff --git a/boost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector30_c.hpp b/boost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector30_c.hpp
new file mode 100644
index 00000000000..5741bb4b654
--- /dev/null
+++ b/boost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector30_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/vector/vector30_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 vector21_c
+ : v_item<
+ integral_c< T,C20 >
+ , vector20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >
+ >
+{
+ typedef vector21_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 vector22_c
+ : v_item<
+ integral_c< T,C21 >
+ , vector21_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20 >
+ >
+{
+ typedef vector22_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 vector23_c
+ : v_item<
+ integral_c< T,C22 >
+ , vector22_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21 >
+ >
+{
+ typedef vector23_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 vector24_c
+ : v_item<
+ integral_c< T,C23 >
+ , vector23_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22 >
+ >
+{
+ typedef vector24_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 vector25_c
+ : v_item<
+ integral_c< T,C24 >
+ , vector24_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23 >
+ >
+{
+ typedef vector25_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 vector26_c
+ : v_item<
+ integral_c< T,C25 >
+ , vector25_c< T,C0,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 vector26_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 vector27_c
+ : v_item<
+ integral_c< T,C26 >
+ , vector26_c< T,C0,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 vector27_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 vector28_c
+ : v_item<
+ integral_c< T,C27 >
+ , vector27_c< T,C0,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 vector28_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 vector29_c
+ : v_item<
+ integral_c< T,C28 >
+ , vector28_c< T,C0,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 vector29_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 vector30_c
+ : v_item<
+ integral_c< T,C29 >
+ , vector29_c< T,C0,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 vector30_c type;
+ typedef T value_type;
+};
+
+}}
diff --git a/boost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector40.hpp b/boost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector40.hpp
new file mode 100644
index 00000000000..debcf7027da
--- /dev/null
+++ b/boost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector40.hpp
@@ -0,0 +1,199 @@
+
+// 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/vector/vector40.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 vector31
+ : v_item<
+ T30
+ , vector30< T0,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 vector31 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 vector32
+ : v_item<
+ T31
+ , vector31< T0,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 vector32 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 vector33
+ : v_item<
+ T32
+ , vector32< T0,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 vector33 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 vector34
+ : v_item<
+ T33
+ , vector33< T0,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 vector34 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 vector35
+ : v_item<
+ T34
+ , vector34< T0,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 vector35 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 vector36
+ : v_item<
+ T35
+ , vector35< T0,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 vector36 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 vector37
+ : v_item<
+ T36
+ , vector36< T0,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 vector37 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 vector38
+ : v_item<
+ T37
+ , vector37< T0,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 vector38 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 vector39
+ : v_item<
+ T38
+ , vector38< T0,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 vector39 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 vector40
+ : v_item<
+ T39
+ , vector39< T0,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 vector40 type;
+};
+
+}}
diff --git a/boost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector40_c.hpp b/boost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector40_c.hpp
new file mode 100644
index 00000000000..88d742e0a5c
--- /dev/null
+++ b/boost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector40_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/vector/vector40_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 vector31_c
+ : v_item<
+ integral_c< T,C30 >
+ , vector30_c< T,C0,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 vector31_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 vector32_c
+ : v_item<
+ integral_c< T,C31 >
+ , vector31_c< T,C0,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 vector32_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 vector33_c
+ : v_item<
+ integral_c< T,C32 >
+ , vector32_c< T,C0,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 vector33_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 vector34_c
+ : v_item<
+ integral_c< T,C33 >
+ , vector33_c< T,C0,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 vector34_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 vector35_c
+ : v_item<
+ integral_c< T,C34 >
+ , vector34_c< T,C0,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 vector35_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 vector36_c
+ : v_item<
+ integral_c< T,C35 >
+ , vector35_c< T,C0,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 vector36_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 vector37_c
+ : v_item<
+ integral_c< T,C36 >
+ , vector36_c< T,C0,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 vector37_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 vector38_c
+ : v_item<
+ integral_c< T,C37 >
+ , vector37_c< T,C0,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 vector38_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 vector39_c
+ : v_item<
+ integral_c< T,C38 >
+ , vector38_c< T,C0,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 vector39_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 vector40_c
+ : v_item<
+ integral_c< T,C39 >
+ , vector39_c< T,C0,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 vector40_c type;
+ typedef T value_type;
+};
+
+}}
diff --git a/boost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector50.hpp b/boost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector50.hpp
new file mode 100644
index 00000000000..8db06df4540
--- /dev/null
+++ b/boost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector50.hpp
@@ -0,0 +1,219 @@
+
+// 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/vector/vector50.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 vector41
+ : v_item<
+ T40
+ , vector40< T0,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 vector41 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 vector42
+ : v_item<
+ T41
+ , vector41< T0,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 vector42 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 vector43
+ : v_item<
+ T42
+ , vector42< T0,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 vector43 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 vector44
+ : v_item<
+ T43
+ , vector43< T0,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 vector44 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 vector45
+ : v_item<
+ T44
+ , vector44< T0,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 vector45 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 vector46
+ : v_item<
+ T45
+ , vector45< T0,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 vector46 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 vector47
+ : v_item<
+ T46
+ , vector46< T0,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 vector47 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 vector48
+ : v_item<
+ T47
+ , vector47< T0,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 vector48 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 vector49
+ : v_item<
+ T48
+ , vector48< T0,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 vector49 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 vector50
+ : v_item<
+ T49
+ , vector49< T0,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 vector50 type;
+};
+
+}}
diff --git a/boost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector50_c.hpp b/boost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector50_c.hpp
new file mode 100644
index 00000000000..f56d6aff067
--- /dev/null
+++ b/boost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector50_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/vector/vector50_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 vector41_c
+ : v_item<
+ integral_c< T,C40 >
+ , vector40_c< T,C0,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 vector41_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 vector42_c
+ : v_item<
+ integral_c< T,C41 >
+ , vector41_c< T,C0,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 vector42_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 vector43_c
+ : v_item<
+ integral_c< T,C42 >
+ , vector42_c< T,C0,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 vector43_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 vector44_c
+ : v_item<
+ integral_c< T,C43 >
+ , vector43_c< T,C0,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 vector44_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 vector45_c
+ : v_item<
+ integral_c< T,C44 >
+ , vector44_c< T,C0,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 vector45_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 vector46_c
+ : v_item<
+ integral_c< T,C45 >
+ , vector45_c< T,C0,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 vector46_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 vector47_c
+ : v_item<
+ integral_c< T,C46 >
+ , vector46_c< T,C0,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 vector47_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 vector48_c
+ : v_item<
+ integral_c< T,C47 >
+ , vector47_c< T,C0,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 vector48_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 vector49_c
+ : v_item<
+ integral_c< T,C48 >
+ , vector48_c< T,C0,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 vector49_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 vector50_c
+ : v_item<
+ integral_c< T,C49 >
+ , vector49_c< T,C0,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 vector50_c type;
+ typedef T value_type;
+};
+
+}}
diff --git a/boost/boost/mpl/vector/aux_/push_back.hpp b/boost/boost/mpl/vector/aux_/push_back.hpp
new file mode 100644
index 00000000000..ab7197116b9
--- /dev/null
+++ b/boost/boost/mpl/vector/aux_/push_back.hpp
@@ -0,0 +1,40 @@
+
+#ifndef BOOST_MPL_VECTOR_AUX_PUSH_BACK_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/vector/aux_/push_back.hpp,v $
+// $Date: 2004/09/02 15:41:19 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/push_back_fwd.hpp>
+#include <boost/mpl/aux_/config/typeof.hpp>
+
+#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
+
+# include <boost/mpl/vector/aux_/item.hpp>
+# include <boost/mpl/vector/aux_/tag.hpp>
+
+namespace boost { namespace mpl {
+
+template<>
+struct push_back_impl< aux::vector_tag >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef v_item<T,Vector,0> type;
+ };
+};
+
+}}
+
+#endif
+
+#endif // BOOST_MPL_VECTOR_AUX_PUSH_BACK_HPP_INCLUDED
diff --git a/boost/boost/mpl/vector/aux_/push_front.hpp b/boost/boost/mpl/vector/aux_/push_front.hpp
new file mode 100644
index 00000000000..1ea7f2cf1a2
--- /dev/null
+++ b/boost/boost/mpl/vector/aux_/push_front.hpp
@@ -0,0 +1,40 @@
+
+#ifndef BOOST_MPL_VECTOR_AUX_PUSH_FRONT_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/vector/aux_/push_front.hpp,v $
+// $Date: 2004/09/02 15:41:19 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/push_front_fwd.hpp>
+#include <boost/mpl/aux_/config/typeof.hpp>
+
+#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
+
+# include <boost/mpl/vector/aux_/item.hpp>
+# include <boost/mpl/vector/aux_/tag.hpp>
+
+namespace boost { namespace mpl {
+
+template<>
+struct push_front_impl< aux::vector_tag >
+{
+ template< typename Vector, typename T > struct apply
+ {
+ typedef v_item<T,Vector,1> type;
+ };
+};
+
+}}
+
+#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES
+
+#endif // BOOST_MPL_VECTOR_AUX_PUSH_FRONT_HPP_INCLUDED
diff --git a/boost/boost/mpl/vector/aux_/size.hpp b/boost/boost/mpl/vector/aux_/size.hpp
new file mode 100644
index 00000000000..f20297d25a1
--- /dev/null
+++ b/boost/boost/mpl/vector/aux_/size.hpp
@@ -0,0 +1,49 @@
+
+#ifndef BOOST_MPL_VECTOR_AUX_SIZE_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/vector/aux_/size.hpp,v $
+// $Date: 2004/09/02 15:41:19 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/size_fwd.hpp>
+#include <boost/mpl/vector/aux_/O1_size.hpp>
+#include <boost/mpl/vector/aux_/tag.hpp>
+#include <boost/mpl/aux_/config/typeof.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+
+namespace boost { namespace mpl {
+
+#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
+
+template<>
+struct size_impl< aux::vector_tag >
+ : O1_size_impl< aux::vector_tag >
+{
+};
+
+#else
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template< long N >
+struct size_impl< aux::vector_tag<N> >
+ : O1_size_impl< aux::vector_tag<N> >
+{
+};
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES
+
+}}
+
+#endif // BOOST_MPL_VECTOR_AUX_SIZE_HPP_INCLUDED
diff --git a/boost/boost/mpl/vector/aux_/tag.hpp b/boost/boost/mpl/vector/aux_/tag.hpp
new file mode 100644
index 00000000000..03beee98d30
--- /dev/null
+++ b/boost/boost/mpl/vector/aux_/tag.hpp
@@ -0,0 +1,32 @@
+
+#ifndef BOOST_MPL_VECTOR_AUX_TAG_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/vector/aux_/tag.hpp,v $
+// $Date: 2004/11/28 01:52:12 $
+// $Revision: 1.5 $
+
+#include <boost/mpl/aux_/config/typeof.hpp>
+#include <boost/mpl/aux_/nttp_decl.hpp>
+
+namespace boost { namespace mpl { namespace aux {
+
+struct v_iter_tag;
+
+#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
+struct vector_tag;
+#else
+template< BOOST_MPL_AUX_NTTP_DECL(long, N) > struct vector_tag;
+#endif
+
+}}}
+
+#endif // BOOST_MPL_VECTOR_AUX_TAG_HPP_INCLUDED
diff --git a/boost/boost/mpl/vector/aux_/vector0.hpp b/boost/boost/mpl/vector/aux_/vector0.hpp
new file mode 100644
index 00000000000..98797f47e80
--- /dev/null
+++ b/boost/boost/mpl/vector/aux_/vector0.hpp
@@ -0,0 +1,52 @@
+
+#ifndef BOOST_MPL_VECTOR_AUX_VECTOR0_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_AUX_VECTOR0_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/vector/aux_/vector0.hpp,v $
+// $Date: 2004/09/02 15:41:19 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/long.hpp>
+#include <boost/mpl/void.hpp>
+#include <boost/mpl/aux_/na.hpp>
+#include <boost/mpl/aux_/type_wrapper.hpp>
+
+#include <boost/mpl/vector/aux_/iterator.hpp>
+#include <boost/mpl/vector/aux_/tag.hpp>
+#include <boost/mpl/aux_/config/typeof.hpp>
+
+namespace boost { namespace mpl {
+
+template< typename Dummy = na > struct vector0;
+
+template<> struct vector0<na>
+{
+#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
+ typedef aux::vector_tag tag;
+ typedef vector0 type;
+ typedef long_<32768> lower_bound_;
+ typedef lower_bound_ upper_bound_;
+ typedef long_<0> size;
+
+ static aux::type_wrapper<void_> item_(...);
+#else
+ typedef aux::vector_tag<0> tag;
+ typedef vector0 type;
+ typedef void_ item0;
+
+ typedef v_iter<vector0<>,0> begin;
+ typedef v_iter<vector0<>,0> end;
+#endif
+};
+
+}}
+
+#endif // BOOST_MPL_VECTOR_AUX_VECTOR0_HPP_INCLUDED
diff --git a/boost/boost/mpl/vector/vector0.hpp b/boost/boost/mpl/vector/vector0.hpp
new file mode 100644
index 00000000000..84792c264fd
--- /dev/null
+++ b/boost/boost/mpl/vector/vector0.hpp
@@ -0,0 +1,34 @@
+
+#ifndef BOOST_MPL_VECTOR_VECTOR0_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_VECTOR0_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/vector/vector0.hpp,v $
+// $Date: 2004/09/02 15:41:19 $
+// $Revision: 1.4 $
+
+#include <boost/mpl/vector/aux_/at.hpp>
+#include <boost/mpl/vector/aux_/front.hpp>
+#include <boost/mpl/vector/aux_/push_front.hpp>
+#include <boost/mpl/vector/aux_/pop_front.hpp>
+#include <boost/mpl/vector/aux_/push_back.hpp>
+#include <boost/mpl/vector/aux_/pop_back.hpp>
+#include <boost/mpl/vector/aux_/back.hpp>
+#include <boost/mpl/vector/aux_/clear.hpp>
+#include <boost/mpl/vector/aux_/O1_size.hpp>
+#include <boost/mpl/vector/aux_/size.hpp>
+#include <boost/mpl/vector/aux_/empty.hpp>
+#include <boost/mpl/vector/aux_/item.hpp>
+#include <boost/mpl/vector/aux_/iterator.hpp>
+#include <boost/mpl/vector/aux_/vector0.hpp>
+#include <boost/mpl/vector/aux_/begin_end.hpp>
+#include <boost/mpl/vector/aux_/tag.hpp>
+
+#endif // BOOST_MPL_VECTOR_VECTOR0_HPP_INCLUDED
diff --git a/boost/boost/mpl/vector/vector0_c.hpp b/boost/boost/mpl/vector/vector0_c.hpp
new file mode 100644
index 00000000000..13e6297b6ef
--- /dev/null
+++ b/boost/boost/mpl/vector/vector0_c.hpp
@@ -0,0 +1,31 @@
+
+#ifndef BOOST_MPL_VECTOR_VECTOR0_C_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_VECTOR0_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/vector/vector0_c.hpp,v $
+// $Date: 2004/11/28 01:52:56 $
+// $Revision: 1.5 $
+
+#include <boost/mpl/vector/vector0.hpp>
+#include <boost/mpl/integral_c.hpp>
+
+namespace boost { namespace mpl {
+
+template< typename T > struct vector0_c
+ : vector0<>
+{
+ typedef vector0_c type;
+ typedef T value_type;
+};
+
+}}
+
+#endif // BOOST_MPL_VECTOR_VECTOR0_C_HPP_INCLUDED
diff --git a/boost/boost/mpl/vector/vector10.hpp b/boost/boost/mpl/vector/vector10.hpp
new file mode 100644
index 00000000000..cd4f9760cfb
--- /dev/null
+++ b/boost/boost/mpl/vector/vector10.hpp
@@ -0,0 +1,45 @@
+
+#ifndef BOOST_MPL_VECTOR_VECTOR10_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_VECTOR10_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/vector/vector10.hpp,v $
+// $Date: 2004/09/02 15:41:19 $
+// $Revision: 1.6 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/vector/vector0.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 vector10.hpp
+# include <boost/mpl/vector/aux_/include_preprocessed.hpp>
+
+#else
+
+# include <boost/mpl/aux_/config/typeof.hpp>
+# include <boost/mpl/aux_/config/ctps.hpp>
+# include <boost/preprocessor/iterate.hpp>
+
+namespace boost { namespace mpl {
+
+# define BOOST_PP_ITERATION_PARAMS_1 \
+ (3,(0, 10, <boost/mpl/vector/aux_/numbered.hpp>))
+# include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_VECTOR_VECTOR10_HPP_INCLUDED
diff --git a/boost/boost/mpl/vector/vector10_c.hpp b/boost/boost/mpl/vector/vector10_c.hpp
new file mode 100644
index 00000000000..b5419c448d0
--- /dev/null
+++ b/boost/boost/mpl/vector/vector10_c.hpp
@@ -0,0 +1,46 @@
+
+#ifndef BOOST_MPL_VECTOR_VECTOR10_C_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_VECTOR10_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/vector/vector10_c.hpp,v $
+// $Date: 2004/09/02 15:41:19 $
+// $Revision: 1.6 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/vector/vector0_c.hpp>
+# include <boost/mpl/vector/vector10.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 vector10_c.hpp
+# include <boost/mpl/vector/aux_/include_preprocessed.hpp>
+
+#else
+
+# include <boost/mpl/aux_/config/typeof.hpp>
+# include <boost/mpl/aux_/config/ctps.hpp>
+# include <boost/preprocessor/iterate.hpp>
+
+namespace boost { namespace mpl {
+
+# define BOOST_PP_ITERATION_PARAMS_1 \
+ (3,(1, 10, <boost/mpl/vector/aux_/numbered_c.hpp>))
+# include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_VECTOR_VECTOR10_C_HPP_INCLUDED
diff --git a/boost/boost/mpl/vector/vector20.hpp b/boost/boost/mpl/vector/vector20.hpp
new file mode 100644
index 00000000000..25557df3d8b
--- /dev/null
+++ b/boost/boost/mpl/vector/vector20.hpp
@@ -0,0 +1,45 @@
+
+#ifndef BOOST_MPL_VECTOR_VECTOR20_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_VECTOR20_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/vector/vector20.hpp,v $
+// $Date: 2004/09/02 15:41:19 $
+// $Revision: 1.6 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/vector/vector10.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 vector20.hpp
+# include <boost/mpl/vector/aux_/include_preprocessed.hpp>
+
+#else
+
+# include <boost/mpl/aux_/config/typeof.hpp>
+# include <boost/mpl/aux_/config/ctps.hpp>
+# include <boost/preprocessor/iterate.hpp>
+
+namespace boost { namespace mpl {
+
+# define BOOST_PP_ITERATION_PARAMS_1 \
+ (3,(11, 20, <boost/mpl/vector/aux_/numbered.hpp>))
+# include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_VECTOR_VECTOR20_HPP_INCLUDED
diff --git a/boost/boost/mpl/vector/vector20_c.hpp b/boost/boost/mpl/vector/vector20_c.hpp
new file mode 100644
index 00000000000..2682254aa5f
--- /dev/null
+++ b/boost/boost/mpl/vector/vector20_c.hpp
@@ -0,0 +1,46 @@
+
+#ifndef BOOST_MPL_VECTOR_VECTOR20_C_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_VECTOR20_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/vector/vector20_c.hpp,v $
+// $Date: 2004/09/02 15:41:19 $
+// $Revision: 1.6 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/vector/vector10_c.hpp>
+# include <boost/mpl/vector/vector20.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 vector20_c.hpp
+# include <boost/mpl/vector/aux_/include_preprocessed.hpp>
+
+#else
+
+# include <boost/mpl/aux_/config/typeof.hpp>
+# include <boost/mpl/aux_/config/ctps.hpp>
+# include <boost/preprocessor/iterate.hpp>
+
+namespace boost { namespace mpl {
+
+# define BOOST_PP_ITERATION_PARAMS_1 \
+ (3,(11, 20, <boost/mpl/vector/aux_/numbered_c.hpp>))
+# include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_VECTOR_VECTOR20_C_HPP_INCLUDED
diff --git a/boost/boost/mpl/vector/vector30.hpp b/boost/boost/mpl/vector/vector30.hpp
new file mode 100644
index 00000000000..55f772e5612
--- /dev/null
+++ b/boost/boost/mpl/vector/vector30.hpp
@@ -0,0 +1,45 @@
+
+#ifndef BOOST_MPL_VECTOR_VECTOR30_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_VECTOR30_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/vector/vector30.hpp,v $
+// $Date: 2004/09/02 15:41:19 $
+// $Revision: 1.6 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/vector/vector20.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 vector30.hpp
+# include <boost/mpl/vector/aux_/include_preprocessed.hpp>
+
+#else
+
+# include <boost/mpl/aux_/config/typeof.hpp>
+# include <boost/mpl/aux_/config/ctps.hpp>
+# include <boost/preprocessor/iterate.hpp>
+
+namespace boost { namespace mpl {
+
+# define BOOST_PP_ITERATION_PARAMS_1 \
+ (3,(21, 30, <boost/mpl/vector/aux_/numbered.hpp>))
+# include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_VECTOR_VECTOR30_HPP_INCLUDED
diff --git a/boost/boost/mpl/vector/vector30_c.hpp b/boost/boost/mpl/vector/vector30_c.hpp
new file mode 100644
index 00000000000..2a1b4cae51d
--- /dev/null
+++ b/boost/boost/mpl/vector/vector30_c.hpp
@@ -0,0 +1,47 @@
+
+#ifndef BOOST_MPL_VECTOR_VECTOR30_C_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_VECTOR30_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/vector/vector30_c.hpp,v $
+// $Date: 2004/09/02 15:41:19 $
+// $Revision: 1.6 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/vector/vector20_c.hpp>
+# include <boost/mpl/vector/vector30.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 vector30_c.hpp
+# include <boost/mpl/vector/aux_/include_preprocessed.hpp>
+
+#else
+
+# include <boost/mpl/aux_/config/typeof.hpp>
+# include <boost/mpl/aux_/config/ctps.hpp>
+# include <boost/preprocessor/iterate.hpp>
+# include <boost/config.hpp>
+
+namespace boost { namespace mpl {
+
+# define BOOST_PP_ITERATION_PARAMS_1 \
+ (3,(21, 30, <boost/mpl/vector/aux_/numbered_c.hpp>))
+# include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_USE_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_VECTOR_VECTOR30_C_HPP_INCLUDED
diff --git a/boost/boost/mpl/vector/vector40.hpp b/boost/boost/mpl/vector/vector40.hpp
new file mode 100644
index 00000000000..1c9f81d27c3
--- /dev/null
+++ b/boost/boost/mpl/vector/vector40.hpp
@@ -0,0 +1,45 @@
+
+#ifndef BOOST_MPL_VECTOR_VECTOR40_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_VECTOR40_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/vector/vector40.hpp,v $
+// $Date: 2004/09/02 15:41:19 $
+// $Revision: 1.6 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/vector/vector30.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 vector40.hpp
+# include <boost/mpl/vector/aux_/include_preprocessed.hpp>
+
+#else
+
+# include <boost/mpl/aux_/config/typeof.hpp>
+# include <boost/mpl/aux_/config/ctps.hpp>
+# include <boost/preprocessor/iterate.hpp>
+
+namespace boost { namespace mpl {
+
+# define BOOST_PP_ITERATION_PARAMS_1 \
+ (3,(31, 40, <boost/mpl/vector/aux_/numbered.hpp>))
+# include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_VECTOR_VECTOR40_HPP_INCLUDED
diff --git a/boost/boost/mpl/vector/vector40_c.hpp b/boost/boost/mpl/vector/vector40_c.hpp
new file mode 100644
index 00000000000..a62b3b38e96
--- /dev/null
+++ b/boost/boost/mpl/vector/vector40_c.hpp
@@ -0,0 +1,46 @@
+
+#ifndef BOOST_MPL_VECTOR_VECTOR40_C_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_VECTOR40_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/vector/vector40_c.hpp,v $
+// $Date: 2004/09/02 15:41:19 $
+// $Revision: 1.6 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/vector/vector30_c.hpp>
+# include <boost/mpl/vector/vector40.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 vector40_c.hpp
+# include <boost/mpl/vector/aux_/include_preprocessed.hpp>
+
+#else
+
+# include <boost/mpl/aux_/config/typeof.hpp>
+# include <boost/mpl/aux_/config/ctps.hpp>
+# include <boost/preprocessor/iterate.hpp>
+
+namespace boost { namespace mpl {
+
+# define BOOST_PP_ITERATION_PARAMS_1 \
+ (3,(31, 40, <boost/mpl/vector/aux_/numbered_c.hpp>))
+# include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_VECTOR_VECTOR40_C_HPP_INCLUDED
diff --git a/boost/boost/mpl/vector/vector50.hpp b/boost/boost/mpl/vector/vector50.hpp
new file mode 100644
index 00000000000..119798ff83a
--- /dev/null
+++ b/boost/boost/mpl/vector/vector50.hpp
@@ -0,0 +1,45 @@
+
+#ifndef BOOST_MPL_VECTOR_VECTOR50_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_VECTOR50_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/vector/vector50.hpp,v $
+// $Date: 2004/09/02 15:41:19 $
+// $Revision: 1.6 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/vector/vector40.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 vector50.hpp
+# include <boost/mpl/vector/aux_/include_preprocessed.hpp>
+
+#else
+
+# include <boost/mpl/aux_/config/typeof.hpp>
+# include <boost/mpl/aux_/config/ctps.hpp>
+# include <boost/preprocessor/iterate.hpp>
+
+namespace boost { namespace mpl {
+
+# define BOOST_PP_ITERATION_PARAMS_1 \
+ (3,(41, 50, <boost/mpl/vector/aux_/numbered.hpp>))
+# include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_VECTOR_VECTOR50_HPP_INCLUDED
diff --git a/boost/boost/mpl/vector/vector50_c.hpp b/boost/boost/mpl/vector/vector50_c.hpp
new file mode 100644
index 00000000000..96f9488026d
--- /dev/null
+++ b/boost/boost/mpl/vector/vector50_c.hpp
@@ -0,0 +1,46 @@
+
+#ifndef BOOST_MPL_VECTOR_VECTOR50_C_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_VECTOR50_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/vector/vector50_c.hpp,v $
+// $Date: 2004/09/02 15:41:19 $
+// $Revision: 1.6 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/vector/vector40_c.hpp>
+# include <boost/mpl/vector/vector50.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 vector50_c.hpp
+# include <boost/mpl/vector/aux_/include_preprocessed.hpp>
+
+#else
+
+# include <boost/mpl/aux_/config/typeof.hpp>
+# include <boost/mpl/aux_/config/ctps.hpp>
+# include <boost/preprocessor/iterate.hpp>
+
+namespace boost { namespace mpl {
+
+# define BOOST_PP_ITERATION_PARAMS_1 \
+ (3,(41, 50, <boost/mpl/vector/aux_/numbered_c.hpp>))
+# include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_VECTOR_VECTOR50_C_HPP_INCLUDED
diff --git a/boost/boost/mpl/vector_c.hpp b/boost/boost/mpl/vector_c.hpp
new file mode 100644
index 00000000000..f0c326a92b0
--- /dev/null
+++ b/boost/boost/mpl/vector_c.hpp
@@ -0,0 +1,60 @@
+
+#ifndef BOOST_MPL_VECTOR_C_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/vector_c.hpp,v $
+// $Date: 2004/11/28 01:58:27 $
+// $Revision: 1.8 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/limits/vector.hpp>
+# include <boost/mpl/aux_/nttp_decl.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_VECTOR_C_HEADER \
+ BOOST_PP_CAT(BOOST_PP_CAT(vector,BOOST_MPL_LIMIT_VECTOR_SIZE),_c).hpp \
+ /**/
+#else
+# define AUX778076_VECTOR_C_HEADER \
+ BOOST_PP_CAT(BOOST_PP_CAT(vector,BOOST_MPL_LIMIT_VECTOR_SIZE),_c)##.hpp \
+ /**/
+#endif
+
+# include BOOST_PP_STRINGIZE(boost/mpl/vector/AUX778076_VECTOR_C_HEADER)
+# undef AUX778076_VECTOR_C_HEADER
+# include <climits>
+#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 vector_c.hpp
+# include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#else
+
+# include <boost/mpl/limits/vector.hpp>
+
+# define AUX778076_SEQUENCE_NAME vector_c
+# define AUX778076_SEQUENCE_LIMIT BOOST_MPL_LIMIT_VECTOR_SIZE
+# define AUX778076_SEQUENCE_NAME_N(n) BOOST_PP_CAT(BOOST_PP_CAT(vector,n),_c)
+# define AUX778076_SEQUENCE_INTEGRAL_WRAPPER
+# include <boost/mpl/aux_/sequence_wrapper.hpp>
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#endif // BOOST_MPL_VECTOR_C_HPP_INCLUDED
diff --git a/boost/boost/mpl/void.hpp b/boost/boost/mpl/void.hpp
new file mode 100644
index 00000000000..9c429a3f81a
--- /dev/null
+++ b/boost/boost/mpl/void.hpp
@@ -0,0 +1,76 @@
+
+#ifndef BOOST_MPL_VOID_HPP_INCLUDED
+#define BOOST_MPL_VOID_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/void.hpp,v $
+// $Date: 2004/09/02 15:40:42 $
+// $Revision: 1.9 $
+
+#include <boost/mpl/void_fwd.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+
+// [JDG Feb-4-2003] made void_ a complete type to allow it to be
+// instantiated so that it can be passed in as an object that can be
+// used to select an overloaded function. Possible use includes signaling
+// a zero arity functor evaluation call.
+struct void_ { typedef void_ type; };
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+
+namespace boost { namespace mpl {
+
+template< typename T >
+struct is_void_
+ : false_
+{
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ using false_::value;
+#endif
+};
+
+template<>
+struct is_void_<void_>
+ : true_
+{
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ using true_::value;
+#endif
+};
+
+template< typename T >
+struct is_not_void_
+ : true_
+{
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ using true_::value;
+#endif
+};
+
+template<>
+struct is_not_void_<void_>
+ : false_
+{
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ using false_::value;
+#endif
+};
+
+BOOST_MPL_AUX_NA_SPEC(1, is_void_)
+BOOST_MPL_AUX_NA_SPEC(1, is_not_void_)
+
+}}
+
+#endif // BOOST_MPL_VOID_HPP_INCLUDED
diff --git a/boost/boost/mpl/void_fwd.hpp b/boost/boost/mpl/void_fwd.hpp
new file mode 100644
index 00000000000..13381b6babf
--- /dev/null
+++ b/boost/boost/mpl/void_fwd.hpp
@@ -0,0 +1,26 @@
+
+#ifndef BOOST_MPL_VOID_FWD_HPP_INCLUDED
+#define BOOST_MPL_VOID_FWD_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/void_fwd.hpp,v $
+// $Date: 2004/09/02 15:40:42 $
+// $Revision: 1.3 $
+
+#include <boost/mpl/aux_/adl_barrier.hpp>
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+
+struct void_;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+BOOST_MPL_AUX_ADL_BARRIER_DECL(void_)
+
+#endif // BOOST_MPL_VOID_FWD_HPP_INCLUDED
diff --git a/boost/boost/mpl/zip_view.hpp b/boost/boost/mpl/zip_view.hpp
new file mode 100644
index 00000000000..c09215c766a
--- /dev/null
+++ b/boost/boost/mpl/zip_view.hpp
@@ -0,0 +1,64 @@
+
+#ifndef BOOST_MPL_ZIP_VIEW_HPP_INCLUDED
+#define BOOST_MPL_ZIP_VIEW_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2002
+// Copyright David Abrahams 2000-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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/zip_view.hpp,v $
+// $Date: 2004/09/02 15:40:42 $
+// $Revision: 1.3 $
+
+#include <boost/mpl/transform.hpp>
+#include <boost/mpl/begin_end.hpp>
+#include <boost/mpl/iterator_tags.hpp>
+#include <boost/mpl/next.hpp>
+#include <boost/mpl/lambda.hpp>
+#include <boost/mpl/deref.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+
+namespace boost { namespace mpl {
+
+template< typename IteratorSeq >
+struct zip_iterator
+{
+ typedef forward_iterator_tag category;
+ typedef typename transform1<
+ IteratorSeq
+ , deref<_1>
+ >::type type;
+
+ typedef zip_iterator<
+ typename transform1<
+ IteratorSeq
+ , next<_1>
+ >::type
+ > next;
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(Sequences)
+ >
+struct zip_view
+{
+ private:
+ typedef typename transform1< Sequences, begin<_1> >::type first_ones_;
+ typedef typename transform1< Sequences, end<_1> >::type last_ones_;
+
+ public:
+ typedef nested_begin_end_tag tag;
+ typedef zip_iterator<first_ones_> begin;
+ typedef zip_iterator<last_ones_> end;
+};
+
+BOOST_MPL_AUX_NA_SPEC(1, zip_view)
+
+}}
+
+#endif // BOOST_MPL_ZIP_VIEW_HPP_INCLUDED
diff --git a/boost/boost/multi_array.hpp b/boost/boost/multi_array.hpp
new file mode 100644
index 00000000000..e6a91e2f62f
--- /dev/null
+++ b/boost/boost/multi_array.hpp
@@ -0,0 +1,499 @@
+// Copyright 2002 The Trustees of Indiana University.
+
+// Use, modification and distribution is 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)
+
+// Boost.MultiArray Library
+// Authors: Ronald Garcia
+// Jeremy Siek
+// Andrew Lumsdaine
+// See http://www.boost.org/libs/multi_array for documentation.
+
+#ifndef BOOST_MULTI_ARRAY_RG071801_HPP
+#define BOOST_MULTI_ARRAY_RG071801_HPP
+
+//
+// multi_array.hpp - contains the multi_array class template
+// declaration and definition
+//
+
+#include "boost/multi_array/base.hpp"
+#include "boost/multi_array/collection_concept.hpp"
+#include "boost/multi_array/copy_array.hpp"
+#include "boost/multi_array/iterator.hpp"
+#include "boost/multi_array/subarray.hpp"
+#include "boost/multi_array/multi_array_ref.hpp"
+#include "boost/multi_array/algorithm.hpp"
+#include "boost/array.hpp"
+#include "boost/mpl/if.hpp"
+#include "boost/type_traits.hpp"
+#include <algorithm>
+#include <cstddef>
+#include <functional>
+#include <numeric>
+#include <vector>
+
+
+
+namespace boost {
+ namespace detail {
+ namespace multi_array {
+
+ struct populate_index_ranges {
+ multi_array_types::index_range
+ // RG: underscore on extent_ to stifle strange MSVC warning.
+ operator()(multi_array_types::index base,
+ multi_array_types::size_type extent_) {
+ return multi_array_types::index_range(base,base+extent_);
+ }
+ };
+
+#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+//
+// Compilers that don't support partial ordering may need help to
+// disambiguate multi_array's templated constructors. Even vc6/7 are
+// capable of some limited SFINAE, so we take the most-general version
+// out of the overload set with disable_multi_array_impl.
+//
+template <typename T, std::size_t NumDims, typename TPtr>
+char is_multi_array_impl_help(const_multi_array_view<T,NumDims,TPtr>&);
+template <typename T, std::size_t NumDims, typename TPtr>
+char is_multi_array_impl_help(const_sub_array<T,NumDims,TPtr>&);
+template <typename T, std::size_t NumDims, typename TPtr>
+char is_multi_array_impl_help(const_multi_array_ref<T,NumDims,TPtr>&);
+
+char ( &is_multi_array_impl_help(...) )[2];
+
+template <class T>
+struct is_multi_array_impl
+{
+ static T x;
+ BOOST_STATIC_CONSTANT(bool, value = sizeof((is_multi_array_impl_help)(x)) == 1);
+
+ typedef mpl::bool_<value> type;
+};
+
+template <bool multi_array = false>
+struct disable_multi_array_impl_impl
+{
+ typedef int type;
+};
+
+template <>
+struct disable_multi_array_impl_impl<true>
+{
+ // forming a pointer to a reference triggers SFINAE
+ typedef int& type;
+};
+
+
+template <class T>
+struct disable_multi_array_impl :
+ disable_multi_array_impl_impl<is_multi_array_impl<T>::value>
+{ };
+
+
+template <>
+struct disable_multi_array_impl<int>
+{
+ typedef int type;
+};
+
+
+#endif
+
+ } //namespace multi_array
+ } // namespace detail
+
+template<typename T, std::size_t NumDims,
+ typename Allocator>
+class multi_array :
+ public multi_array_ref<T,NumDims>
+{
+ typedef multi_array_ref<T,NumDims> super_type;
+public:
+ typedef typename super_type::value_type value_type;
+ typedef typename super_type::reference reference;
+ typedef typename super_type::const_reference const_reference;
+ typedef typename super_type::iterator iterator;
+ typedef typename super_type::const_iterator const_iterator;
+ typedef typename super_type::reverse_iterator reverse_iterator;
+ typedef typename super_type::const_reverse_iterator const_reverse_iterator;
+ typedef typename super_type::element element;
+ typedef typename super_type::size_type size_type;
+ typedef typename super_type::difference_type difference_type;
+ typedef typename super_type::index index;
+ typedef typename super_type::extent_range extent_range;
+
+
+ template <std::size_t NDims>
+ struct const_array_view {
+ typedef boost::detail::multi_array::const_multi_array_view<T,NDims> type;
+ };
+
+ template <std::size_t NDims>
+ struct array_view {
+ typedef boost::detail::multi_array::multi_array_view<T,NDims> type;
+ };
+
+ explicit multi_array() :
+ super_type((T*)initial_base_,c_storage_order(),
+ /*index_bases=*/0, /*extents=*/0) {
+ allocate_space();
+ }
+
+ template <class ExtentList>
+ explicit multi_array(
+ ExtentList const& extents
+#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+ , typename mpl::if_<
+ detail::multi_array::is_multi_array_impl<ExtentList>,
+ int&,int>::type* = 0
+#endif
+ ) :
+ super_type((T*)initial_base_,extents) {
+ boost::function_requires<
+ detail::multi_array::CollectionConcept<ExtentList> >();
+ allocate_space();
+ }
+
+
+ template <class ExtentList>
+ explicit multi_array(ExtentList const& extents,
+ const general_storage_order<NumDims>& so) :
+ super_type((T*)initial_base_,extents,so) {
+ boost::function_requires<
+ detail::multi_array::CollectionConcept<ExtentList> >();
+ allocate_space();
+ }
+
+ template <class ExtentList>
+ explicit multi_array(ExtentList const& extents,
+ const general_storage_order<NumDims>& so,
+ Allocator const& alloc) :
+ super_type((T*)initial_base_,extents,so), allocator_(alloc) {
+ boost::function_requires<
+ detail::multi_array::CollectionConcept<ExtentList> >();
+ allocate_space();
+ }
+
+
+ explicit multi_array(const detail::multi_array
+ ::extent_gen<NumDims>& ranges) :
+ super_type((T*)initial_base_,ranges) {
+
+ allocate_space();
+ }
+
+
+ explicit multi_array(const detail::multi_array
+ ::extent_gen<NumDims>& ranges,
+ const general_storage_order<NumDims>& so) :
+ super_type((T*)initial_base_,ranges,so) {
+
+ allocate_space();
+ }
+
+
+ explicit multi_array(const detail::multi_array
+ ::extent_gen<NumDims>& ranges,
+ const general_storage_order<NumDims>& so,
+ Allocator const& alloc) :
+ super_type((T*)initial_base_,ranges,so), allocator_(alloc) {
+
+ allocate_space();
+ }
+
+ multi_array(const multi_array& rhs) :
+ super_type(rhs), allocator_(rhs.allocator_) {
+ allocate_space();
+ boost::detail::multi_array::copy_n(rhs.base_,rhs.num_elements(),base_);
+ }
+
+
+ //
+ // A multi_array is constructible from any multi_array_ref, subarray, or
+ // array_view object. The following constructors ensure that.
+ //
+
+ // Due to limited support for partial template ordering,
+ // MSVC 6&7 confuse the following with the most basic ExtentList
+ // constructor.
+#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+ template <typename OPtr>
+ multi_array(const const_multi_array_ref<T,NumDims,OPtr>& rhs,
+ const general_storage_order<NumDims>& so = c_storage_order())
+ : super_type(0,so,rhs.index_bases(),rhs.shape())
+ {
+ allocate_space();
+ // Warning! storage order may change, hence the following copy technique.
+ std::copy(rhs.begin(),rhs.end(),this->begin());
+ }
+
+ template <typename OPtr>
+ multi_array(const detail::multi_array::
+ const_sub_array<T,NumDims,OPtr>& rhs,
+ const general_storage_order<NumDims>& so = c_storage_order())
+ : super_type(0,so,rhs.index_bases(),rhs.shape())
+ {
+ allocate_space();
+ std::copy(rhs.begin(),rhs.end(),this->begin());
+ }
+
+
+ template <typename OPtr>
+ multi_array(const detail::multi_array::
+ const_multi_array_view<T,NumDims,OPtr>& rhs,
+ const general_storage_order<NumDims>& so = c_storage_order())
+ : super_type(0,so,rhs.index_bases(),rhs.shape())
+ {
+ allocate_space();
+ std::copy(rhs.begin(),rhs.end(),this->begin());
+ }
+
+#else // BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+ // More limited support for MSVC
+
+
+ multi_array(const const_multi_array_ref<T,NumDims>& rhs)
+ : super_type(0,c_storage_order(),rhs.index_bases(),rhs.shape())
+ {
+ allocate_space();
+ // Warning! storage order may change, hence the following copy technique.
+ std::copy(rhs.begin(),rhs.end(),this->begin());
+ }
+
+ multi_array(const const_multi_array_ref<T,NumDims>& rhs,
+ const general_storage_order<NumDims>& so)
+ : super_type(0,so,rhs.index_bases(),rhs.shape())
+ {
+ allocate_space();
+ // Warning! storage order may change, hence the following copy technique.
+ std::copy(rhs.begin(),rhs.end(),this->begin());
+ }
+
+ multi_array(const detail::multi_array::
+ const_sub_array<T,NumDims>& rhs)
+ : super_type(0,c_storage_order(),rhs.index_bases(),rhs.shape())
+ {
+ allocate_space();
+ std::copy(rhs.begin(),rhs.end(),this->begin());
+ }
+
+ multi_array(const detail::multi_array::
+ const_sub_array<T,NumDims>& rhs,
+ const general_storage_order<NumDims>& so)
+ : super_type(0,so,rhs.index_bases(),rhs.shape())
+ {
+ allocate_space();
+ std::copy(rhs.begin(),rhs.end(),this->begin());
+ }
+
+
+ multi_array(const detail::multi_array::
+ const_multi_array_view<T,NumDims>& rhs)
+ : super_type(0,c_storage_order(),rhs.index_bases(),rhs.shape())
+ {
+ allocate_space();
+ std::copy(rhs.begin(),rhs.end(),this->begin());
+ }
+
+ multi_array(const detail::multi_array::
+ const_multi_array_view<T,NumDims>& rhs,
+ const general_storage_order<NumDims>& so)
+ : super_type(0,so,rhs.index_bases(),rhs.shape())
+ {
+ allocate_space();
+ std::copy(rhs.begin(),rhs.end(),this->begin());
+ }
+
+#endif // !BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+ // Thes constructors are necessary because of more exact template matches.
+ multi_array(const multi_array_ref<T,NumDims>& rhs)
+ : super_type(0,c_storage_order(),rhs.index_bases(),rhs.shape())
+ {
+ allocate_space();
+ // Warning! storage order may change, hence the following copy technique.
+ std::copy(rhs.begin(),rhs.end(),this->begin());
+ }
+
+ multi_array(const multi_array_ref<T,NumDims>& rhs,
+ const general_storage_order<NumDims>& so)
+ : super_type(0,so,rhs.index_bases(),rhs.shape())
+ {
+ allocate_space();
+ // Warning! storage order may change, hence the following copy technique.
+ std::copy(rhs.begin(),rhs.end(),this->begin());
+ }
+
+
+ multi_array(const detail::multi_array::
+ sub_array<T,NumDims>& rhs)
+ : super_type(0,c_storage_order(),rhs.index_bases(),rhs.shape())
+ {
+ allocate_space();
+ std::copy(rhs.begin(),rhs.end(),this->begin());
+ }
+
+ multi_array(const detail::multi_array::
+ sub_array<T,NumDims>& rhs,
+ const general_storage_order<NumDims>& so)
+ : super_type(0,so,rhs.index_bases(),rhs.shape())
+ {
+ allocate_space();
+ std::copy(rhs.begin(),rhs.end(),this->begin());
+ }
+
+
+ multi_array(const detail::multi_array::
+ multi_array_view<T,NumDims>& rhs)
+ : super_type(0,c_storage_order(),rhs.index_bases(),rhs.shape())
+ {
+ allocate_space();
+ std::copy(rhs.begin(),rhs.end(),this->begin());
+ }
+
+ multi_array(const detail::multi_array::
+ multi_array_view<T,NumDims>& rhs,
+ const general_storage_order<NumDims>& so)
+ : super_type(0,so,rhs.index_bases(),rhs.shape())
+ {
+ allocate_space();
+ std::copy(rhs.begin(),rhs.end(),this->begin());
+ }
+
+ // Since assignment is a deep copy, multi_array_ref
+ // contains all the necessary code.
+ template <typename ConstMultiArray>
+ multi_array& operator=(const ConstMultiArray& other) {
+ super_type::operator=(other);
+ return *this;
+ }
+
+ multi_array& operator=(const multi_array& other) {
+ if (&other != this) {
+ super_type::operator=(other);
+ }
+ return *this;
+ }
+
+
+ template <typename ExtentList>
+ multi_array& resize(const ExtentList& extents) {
+ boost::function_requires<
+ detail::multi_array::CollectionConcept<ExtentList> >();
+
+ typedef detail::multi_array::extent_gen<NumDims> gen_type;
+ gen_type ranges;
+
+ for (int i=0; i != NumDims; ++i) {
+ typedef typename gen_type::range range_type;
+ ranges.ranges_[i] = range_type(0,extents[i]);
+ }
+
+ return this->resize(ranges);
+ }
+
+
+
+ multi_array& resize(const detail::multi_array
+ ::extent_gen<NumDims>& ranges) {
+
+
+ // build a multi_array with the specs given
+ multi_array new_array(ranges,this->storage_order());
+
+
+ // build a view of tmp with the minimum extents
+
+ // Get the minimum extents of the arrays.
+ boost::array<size_type,NumDims> min_extents;
+
+ const size_type& (*min)(const size_type&, const size_type&) =
+ std::min;
+ std::transform(new_array.extent_list_.begin(),new_array.extent_list_.end(),
+ this->extent_list_.begin(),
+ min_extents.begin(),
+ min);
+
+
+ // typedef boost::array<index,NumDims> index_list;
+ // Build index_gen objects to create views with the same shape
+
+ // these need to be separate to handle non-zero index bases
+ typedef detail::multi_array::index_gen<NumDims,NumDims> index_gen;
+ index_gen old_idxes;
+ index_gen new_idxes;
+
+ std::transform(new_array.index_base_list_.begin(),
+ new_array.index_base_list_.end(),
+ min_extents.begin(),old_idxes.ranges_.begin(),
+ detail::multi_array::populate_index_ranges());
+
+ std::transform(this->index_base_list_.begin(),
+ this->index_base_list_.end(),
+ min_extents.begin(),new_idxes.ranges_.begin(),
+ detail::multi_array::populate_index_ranges());
+
+ // Build same-shape views of the two arrays
+ typename
+ multi_array::BOOST_NESTED_TEMPLATE array_view<NumDims>::type view_old = (*this)[old_idxes];
+ typename
+ multi_array::BOOST_NESTED_TEMPLATE array_view<NumDims>::type view_new = new_array[new_idxes];
+
+ // Set the right portion of the new array
+ view_new = view_old;
+
+ using std::swap;
+ // Swap the internals of these arrays.
+ swap(this->super_type::base_,new_array.super_type::base_);
+ swap(this->storage_,new_array.storage_);
+ swap(this->extent_list_,new_array.extent_list_);
+ swap(this->stride_list_,new_array.stride_list_);
+ swap(this->index_base_list_,new_array.index_base_list_);
+ swap(this->origin_offset_,new_array.origin_offset_);
+ swap(this->directional_offset_,new_array.directional_offset_);
+ swap(this->num_elements_,new_array.num_elements_);
+ swap(this->allocator_,new_array.allocator_);
+ swap(this->base_,new_array.base_);
+ swap(this->allocated_elements_,new_array.allocated_elements_);
+
+ return *this;
+ }
+
+
+ ~multi_array() {
+ deallocate_space();
+ }
+
+private:
+ void allocate_space() {
+ typename Allocator::const_pointer no_hint=0;
+ base_ = allocator_.allocate(this->num_elements(),no_hint);
+ this->set_base_ptr(base_);
+ allocated_elements_ = this->num_elements();
+ std::uninitialized_fill_n(base_,allocated_elements_,T());
+ }
+
+ void deallocate_space() {
+ if(base_) {
+ for(T* i = base_; i != base_+allocated_elements_; ++i)
+ allocator_.destroy(i);
+ allocator_.deallocate(base_,allocated_elements_);
+ }
+ }
+
+ typedef boost::array<size_type,NumDims> size_list;
+ typedef boost::array<index,NumDims> index_list;
+
+ Allocator allocator_;
+ T* base_;
+ size_type allocated_elements_;
+ enum {initial_base_ = 0};
+};
+
+} // namespace boost
+
+#endif // BOOST_MULTI_ARRAY_RG071801_HPP
diff --git a/boost/boost/multi_array/algorithm.hpp b/boost/boost/multi_array/algorithm.hpp
new file mode 100644
index 00000000000..c749c3f9747
--- /dev/null
+++ b/boost/boost/multi_array/algorithm.hpp
@@ -0,0 +1,103 @@
+#ifndef BOOST_ALGORITHM_RG071801_HPP
+#define BOOST_ALGORITHM_RG071801_HPP
+
+//
+//
+// Copyright (c) 1994
+// Hewlett-Packard Company
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without fee,
+// provided that the above copyright notice appear in all copies and
+// that both that copyright notice and this permission notice appear
+// in supporting documentation. Hewlett-Packard Company makes no
+// representations about the suitability of this software for any
+// purpose. It is provided "as is" without express or implied warranty.
+//
+//
+// Copyright (c) 1996-1998
+// Silicon Graphics Computer Systems, Inc.
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without fee,
+// provided that the above copyright notice appear in all copies and
+// that both that copyright notice and this permission notice appear
+// in supporting documentation. Silicon Graphics makes no
+// representations about the suitability of this software for any
+// purpose. It is provided "as is" without express or implied warranty.
+//
+
+// Copyright 2002 The Trustees of Indiana University.
+
+// Use, modification and distribution is 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)
+
+// Boost.MultiArray Library
+// Authors: Ronald Garcia
+// Jeremy Siek
+// Andrew Lumsdaine
+// See http://www.boost.org/libs/multi_array for documentation.
+
+
+#include "boost/iterator.hpp"
+
+namespace boost {
+namespace detail {
+namespace multi_array {
+//--------------------------------------------------
+// copy_n (not part of the C++ standard)
+#if 1
+
+template <class InputIter, class Size, class OutputIter>
+OutputIter copy_n(InputIter first, Size count,
+ OutputIter result) {
+ for ( ; count > 0; --count) {
+ *result = *first;
+ ++first;
+ ++result;
+ }
+ return result;
+}
+#else // !1
+
+template <class InputIter, class Size, class OutputIter>
+OutputIter copy_n__(InputIter first, Size count,
+ OutputIter result,
+ std::input_iterator_tag) {
+ for ( ; count > 0; --count) {
+ *result = *first;
+ ++first;
+ ++result;
+ }
+ return result;
+}
+
+template <class RAIter, class Size, class OutputIter>
+inline OutputIter
+copy_n__(RAIter first, Size count,
+ OutputIter result,
+ std::random_access_iterator_tag) {
+ RAIter last = first + count;
+ return std::copy(first, last, result);
+}
+
+template <class InputIter, class Size, class OutputIter>
+inline OutputIter
+copy_n__(InputIter first, Size count, OutputIter result) {
+ typedef typename std::iterator_traits<InputIter>::iterator_category cat;
+ return copy_n__(first, count, result, cat());
+}
+
+template <class InputIter, class Size, class OutputIter>
+inline OutputIter
+copy_n(InputIter first, Size count, OutputIter result) {
+ return copy_n__(first, count, result);
+}
+
+#endif // 1
+} // namespace multi_array
+} // namespace detail
+} // namespace boost
+
+#endif // BOOST_ALGORITHM_RG071801_HPP
diff --git a/boost/boost/multi_array/base.hpp b/boost/boost/multi_array/base.hpp
new file mode 100644
index 00000000000..5341be5824c
--- /dev/null
+++ b/boost/boost/multi_array/base.hpp
@@ -0,0 +1,479 @@
+// Copyright 2002 The Trustees of Indiana University.
+
+// Use, modification and distribution is 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)
+
+// Boost.MultiArray Library
+// Authors: Ronald Garcia
+// Jeremy Siek
+// Andrew Lumsdaine
+// See http://www.boost.org/libs/multi_array for documentation.
+
+#ifndef BASE_RG071801_HPP
+#define BASE_RG071801_HPP
+
+//
+// base.hpp - some implementation base classes for from which
+// functionality is acquired
+//
+
+#include "boost/multi_array/extent_range.hpp"
+#include "boost/multi_array/extent_gen.hpp"
+#include "boost/multi_array/index_range.hpp"
+#include "boost/multi_array/index_gen.hpp"
+#include "boost/multi_array/storage_order.hpp"
+#include "boost/multi_array/types.hpp"
+#include "boost/config.hpp"
+#include "boost/multi_array/concept_checks.hpp" //for ignore_unused_...
+#include "boost/mpl/eval_if.hpp"
+#include "boost/mpl/if.hpp"
+#include "boost/mpl/size_t.hpp"
+#include "boost/mpl/aux_/msvc_eti_base.hpp"
+#include "boost/iterator/reverse_iterator.hpp"
+#include "boost/static_assert.hpp"
+#include "boost/type.hpp"
+#include "boost/assert.hpp"
+#include <cstddef>
+#include <memory>
+
+namespace boost {
+
+/////////////////////////////////////////////////////////////////////////
+// class declarations
+/////////////////////////////////////////////////////////////////////////
+
+template<typename T, std::size_t NumDims,
+ typename Allocator = std::allocator<T> >
+class multi_array;
+
+// This is a public interface for use by end users!
+namespace multi_array_types {
+ typedef boost::detail::multi_array::size_type size_type;
+ typedef std::ptrdiff_t difference_type;
+ typedef boost::detail::multi_array::index index;
+ typedef detail::multi_array::index_range<index,size_type> index_range;
+ typedef detail::multi_array::extent_range<index,size_type> extent_range;
+ typedef detail::multi_array::index_gen<0,0> index_gen;
+ typedef detail::multi_array::extent_gen<0> extent_gen;
+}
+
+
+// boost::extents and boost::indices are now a part of the public
+// interface. That way users don't necessarily have to create their
+// own objects. On the other hand, one may not want the overhead of
+// object creation in small-memory environments. Thus, the objects
+// can be left undefined by defining BOOST_MULTI_ARRAY_NO_GENERATORS
+// before loading multi_array.hpp.
+#if !BOOST_MULTI_ARRAY_NO_GENERATORS
+namespace {
+ multi_array_types::extent_gen extents;
+ multi_array_types::index_gen indices;
+}
+#endif // BOOST_MULTI_ARRAY_NO_GENERATORS
+
+namespace detail {
+namespace multi_array {
+
+template <typename T, std::size_t NumDims>
+class sub_array;
+
+template <typename T, std::size_t NumDims, typename TPtr = const T*>
+class const_sub_array;
+
+template <typename T, typename TPtr, typename NumDims, typename Reference>
+class array_iterator;
+
+template <typename T, std::size_t NumDims, typename TPtr = const T*>
+class const_multi_array_view;
+
+template <typename T, std::size_t NumDims>
+class multi_array_view;
+
+/////////////////////////////////////////////////////////////////////////
+// class interfaces
+/////////////////////////////////////////////////////////////////////////
+
+class multi_array_base {
+public:
+ typedef multi_array_types::size_type size_type;
+ typedef multi_array_types::difference_type difference_type;
+ typedef multi_array_types::index index;
+ typedef multi_array_types::index_range index_range;
+ typedef multi_array_types::extent_range extent_range;
+ typedef multi_array_types::index_gen index_gen;
+ typedef multi_array_types::extent_gen extent_gen;
+};
+
+//
+// value_accessor_n
+// contains the routines for accessing elements from
+// N-dimensional views.
+//
+template<typename T, std::size_t NumDims>
+class value_accessor_n : public multi_array_base {
+ typedef multi_array_base super_type;
+public:
+ typedef typename super_type::index index;
+
+ //
+ // public typedefs used by classes that inherit from this base
+ //
+ typedef T element;
+ typedef boost::multi_array<T,NumDims-1> value_type;
+ typedef sub_array<T,NumDims-1> reference;
+ typedef const_sub_array<T,NumDims-1> const_reference;
+
+protected:
+ // used by array operator[] and iterators to get reference types.
+ template <typename Reference, typename TPtr>
+ Reference access(boost::type<Reference>,index idx,TPtr base,
+ const size_type* extents,
+ const index* strides,
+ const index* index_bases) const {
+
+ BOOST_ASSERT(idx - index_bases[0] >= 0);
+ BOOST_ASSERT(size_type(idx - index_bases[0]) < extents[0]);
+ // return a sub_array<T,NDims-1> proxy object
+ TPtr newbase = base + idx * strides[0];
+ return Reference(newbase,extents+1,strides+1,index_bases+1);
+
+ }
+
+ value_accessor_n() { }
+ ~value_accessor_n() { }
+};
+
+
+
+//
+// value_accessor_one
+// contains the routines for accessing reference elements from
+// 1-dimensional views.
+//
+template<typename T>
+class value_accessor_one : public multi_array_base {
+ typedef multi_array_base super_type;
+public:
+ typedef typename super_type::index index;
+ //
+ // public typedefs for use by classes that inherit it.
+ //
+ typedef T element;
+ typedef T value_type;
+ typedef T& reference;
+ typedef T const& const_reference;
+
+protected:
+ // used by array operator[] and iterators to get reference types.
+ template <typename Reference, typename TPtr>
+ Reference access(boost::type<Reference>,index idx,TPtr base,
+ const size_type* extents,
+ const index* strides,
+ const index* index_bases) const {
+
+ ignore_unused_variable_warning(index_bases);
+ ignore_unused_variable_warning(extents);
+ BOOST_ASSERT(idx - index_bases[0] >= 0);
+ BOOST_ASSERT(size_type(idx - index_bases[0]) < extents[0]);
+ return *(base + idx * strides[0]);
+ }
+
+ value_accessor_one() { }
+ ~value_accessor_one() { }
+};
+
+
+/////////////////////////////////////////////////////////////////////////
+// choose value accessor begins
+//
+
+template <typename T, std::size_t NumDims>
+struct choose_value_accessor_n {
+ typedef value_accessor_n<T,NumDims> type;
+};
+
+template <typename T>
+struct choose_value_accessor_one {
+ typedef value_accessor_one<T> type;
+};
+
+template <typename T, typename NumDims>
+struct value_accessor_generator {
+ BOOST_STATIC_CONSTANT(std::size_t, dimensionality = NumDims::value);
+
+ typedef typename
+ mpl::eval_if_c<(dimensionality == 1),
+ choose_value_accessor_one<T>,
+ choose_value_accessor_n<T,dimensionality>
+ >::type type;
+};
+
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+
+struct eti_value_accessor
+{
+ typedef int index;
+ typedef int size_type;
+ typedef int element;
+ typedef int index_range;
+ typedef int value_type;
+ typedef int reference;
+ typedef int const_reference;
+};
+
+template <>
+struct value_accessor_generator<int,int>
+{
+ typedef eti_value_accessor type;
+};
+
+template <class T, class NumDims>
+struct associated_types
+ : mpl::aux::msvc_eti_base<
+ typename value_accessor_generator<T,NumDims>::type
+ >::type
+{};
+
+template <>
+struct associated_types<int,int> : eti_value_accessor {};
+
+#else
+
+template <class T, class NumDims>
+struct associated_types
+ : value_accessor_generator<T,NumDims>::type
+{};
+
+#endif
+
+//
+// choose value accessor ends
+/////////////////////////////////////////////////////////////////////////
+
+
+
+////////////////////////////////////////////////////////////////////////
+// multi_array_base
+////////////////////////////////////////////////////////////////////////
+template <typename T, std::size_t NumDims>
+class multi_array_impl_base
+ :
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ public mpl::aux::msvc_eti_base<
+ typename value_accessor_generator<T,mpl::size_t<NumDims> >::type
+ >::type
+#else
+ public value_accessor_generator<T,mpl::size_t<NumDims> >::type
+#endif
+{
+ typedef associated_types<T,mpl::size_t<NumDims> > types;
+public:
+ typedef typename types::index index;
+ typedef typename types::size_type size_type;
+ typedef typename types::element element;
+ typedef typename types::index_range index_range;
+ typedef typename types::value_type value_type;
+ typedef typename types::reference reference;
+ typedef typename types::const_reference const_reference;
+
+ template <std::size_t NDims>
+ struct subarray {
+ typedef boost::detail::multi_array::sub_array<T,NDims> type;
+ };
+
+ template <std::size_t NDims>
+ struct const_subarray {
+ typedef boost::detail::multi_array::const_sub_array<T,NDims> type;
+ };
+
+ template <std::size_t NDims>
+ struct array_view {
+ typedef boost::detail::multi_array::multi_array_view<T,NDims> type;
+ };
+
+ template <std::size_t NDims>
+ struct const_array_view {
+ public:
+ typedef boost::detail::multi_array::const_multi_array_view<T,NDims> type;
+ };
+
+ //
+ // iterator support
+ //
+ typedef array_iterator<T,T*,mpl::size_t<NumDims>,reference> iterator;
+ typedef array_iterator<T,T const*,mpl::size_t<NumDims>,const_reference> const_iterator;
+
+ typedef ::boost::reverse_iterator<iterator> reverse_iterator;
+ typedef ::boost::reverse_iterator<const_iterator> const_reverse_iterator;
+
+ BOOST_STATIC_CONSTANT(std::size_t, dimensionality = NumDims);
+protected:
+
+ multi_array_impl_base() { }
+ ~multi_array_impl_base() { }
+
+ // Used by operator() in our array classes
+ template <typename Reference, typename IndexList, typename TPtr>
+ Reference access_element(boost::type<Reference>,
+ const IndexList& indices,
+ TPtr base,
+ const size_type* extents,
+ const index* strides,
+ const index* index_bases) const {
+
+ ignore_unused_variable_warning(index_bases);
+ ignore_unused_variable_warning(extents);
+#if !defined(NDEBUG) && !defined(BOOST_DISABLE_ASSERTS)
+ for (size_type i = 0; i != NumDims; ++i) {
+ BOOST_ASSERT(indices[i] - index_bases[i] >= 0);
+ BOOST_ASSERT(size_type(indices[i] - index_bases[i]) < extents[i]);
+ }
+#endif
+
+ index offset = 0;
+ for (size_type n = 0; n != NumDims; ++n)
+ offset += indices[n] * strides[n];
+
+ return base[offset];
+ }
+
+ template <typename StrideList, typename ExtentList>
+ void compute_strides(StrideList& stride_list, ExtentList& extent_list,
+ const general_storage_order<NumDims>& storage)
+ {
+ // invariant: stride = the stride for dimension n
+ index stride = 1;
+ for (size_type n = 0; n != NumDims; ++n) {
+ index stride_sign = +1;
+
+ if (!storage.ascending(storage.ordering(n)))
+ stride_sign = -1;
+
+ // The stride for this dimension is the product of the
+ // lengths of the ranks minor to it.
+ stride_list[storage.ordering(n)] = stride * stride_sign;
+
+ stride *= extent_list[storage.ordering(n)];
+ }
+ }
+
+ // This calculates the offset to the array base pointer due to:
+ // 1. dimensions stored in descending order
+ // 2. non-zero dimension index bases
+ template <typename StrideList, typename ExtentList, typename BaseList>
+ index
+ calculate_origin_offset(const StrideList& stride_list,
+ const ExtentList& extent_list,
+ const general_storage_order<NumDims>& storage,
+ const BaseList& index_base_list)
+ {
+ return
+ calculate_descending_dimension_offset(stride_list,extent_list,
+ storage) +
+ calculate_indexing_offset(stride_list,index_base_list);
+ }
+
+ // This calculates the offset added to the base pointer that are
+ // caused by descending dimensions
+ template <typename StrideList, typename ExtentList>
+ index
+ calculate_descending_dimension_offset(const StrideList& stride_list,
+ const ExtentList& extent_list,
+ const general_storage_order<NumDims>& storage)
+ {
+ index offset = 0;
+ if (!storage.all_dims_ascending())
+ for (size_type n = 0; n != NumDims; ++n)
+ if (!storage.ascending(n))
+ offset -= (extent_list[n] - 1) * stride_list[n];
+
+ return offset;
+ }
+
+ // This is used to reindex array_views, which are no longer
+ // concerned about storage order (specifically, whether dimensions
+ // are ascending or descending) since the viewed array handled it.
+
+ template <typename StrideList, typename BaseList>
+ index
+ calculate_indexing_offset(const StrideList& stride_list,
+ const BaseList& index_base_list)
+ {
+ index offset = 0;
+ for (size_type n = 0; n != NumDims; ++n)
+ offset -= stride_list[n] * index_base_list[n];
+ return offset;
+ }
+
+ // Slicing using an index_gen.
+ // Note that populating an index_gen creates a type that encodes
+ // both the number of dimensions in the current Array (NumDims), and
+ // the Number of dimensions for the resulting view. This allows the
+ // compiler to fail if the dimensions aren't completely accounted
+ // for. For reasons unbeknownst to me, a BOOST_STATIC_ASSERT
+ // within the member function template does not work. I should add a
+ // note to the documentation specifying that you get a damn ugly
+ // error message if you screw up in your slicing code.
+ template <typename ArrayRef, int NDims, typename TPtr>
+ ArrayRef
+ generate_array_view(boost::type<ArrayRef>,
+ const boost::detail::multi_array::
+ index_gen<NumDims,NDims>& indices,
+ const size_type* extents,
+ const index* strides,
+ const index* index_bases,
+ TPtr base) const {
+
+ boost::array<index,NDims> new_strides;
+ boost::array<index,NDims> new_extents;
+
+ index offset = 0;
+ size_type dim = 0;
+ for (size_type n = 0; n != NumDims; ++n) {
+ const index default_start = index_bases[n];
+ const index default_finish = default_start+extents[n];
+ const index_range& current_range = indices.ranges_[n];
+ index start = current_range.get_start(default_start);
+ index finish = current_range.get_finish(default_finish);
+ index index_factor = current_range.stride();
+ index len = (finish - start + (index_factor - 1)) / index_factor;
+
+ BOOST_ASSERT(index_bases[n] <= start &&
+ start <= index_bases[n]+index(extents[n]));
+ BOOST_ASSERT(index_bases[n] <= finish &&
+ finish <= index_bases[n]+index(extents[n]));
+ BOOST_ASSERT(index_factor > 0);
+
+ // the array data pointer is modified to account for non-zero
+ // bases during slicing (see [Garcia] for the math involved)
+ offset += start * strides[n];
+
+ if (!current_range.is_degenerate()) {
+
+ // The index_factor for each dimension is included into the
+ // strides for the array_view (see [Garcia] for the math involved).
+ new_strides[dim] = index_factor * strides[n];
+
+ // calculate new extents
+ new_extents[dim] = len;
+ ++dim;
+ }
+ }
+ BOOST_ASSERT(dim == NDims);
+
+ return
+ ArrayRef(base+offset,
+ new_extents,
+ new_strides);
+ }
+
+
+};
+
+} // namespace multi_array
+} // namespace detail
+
+} // namespace boost
+
+#endif // BASE_RG071801_HPP
diff --git a/boost/boost/multi_array/collection_concept.hpp b/boost/boost/multi_array/collection_concept.hpp
new file mode 100644
index 00000000000..c79ace1bd8a
--- /dev/null
+++ b/boost/boost/multi_array/collection_concept.hpp
@@ -0,0 +1,62 @@
+// Copyright 2002 The Trustees of Indiana University.
+
+// Use, modification and distribution is 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)
+
+// Boost.MultiArray Library
+// Authors: Ronald Garcia
+// Jeremy Siek
+// Andrew Lumsdaine
+// See http://www.boost.org/libs/multi_array for documentation.
+
+#ifndef COLLECTION_CONCEPT_RG103101_HPP
+#define COLLECTION_CONCEPT_RG103101_HPP
+
+#include "boost/concept_check.hpp"
+
+namespace boost {
+namespace detail {
+namespace multi_array {
+
+ //===========================================================================
+ // Collection Concept
+
+ template <class Collection>
+ struct CollectionConcept
+ {
+ typedef typename Collection::value_type value_type;
+ typedef typename Collection::iterator iterator;
+ typedef typename Collection::const_iterator const_iterator;
+ typedef typename Collection::reference reference;
+ typedef typename Collection::const_reference const_reference;
+ // typedef typename Collection::pointer pointer;
+ typedef typename Collection::difference_type difference_type;
+ typedef typename Collection::size_type size_type;
+
+ void constraints() {
+ boost::function_requires<boost::InputIteratorConcept<iterator> >();
+ boost::function_requires<boost::InputIteratorConcept<const_iterator> >();
+ boost::function_requires<boost::CopyConstructibleConcept<value_type> >();
+ const_constraints(c);
+ i = c.begin();
+ i = c.end();
+ c.swap(c);
+ }
+ void const_constraints(const Collection& c) {
+ ci = c.begin();
+ ci = c.end();
+ n = c.size();
+ b = c.empty();
+ }
+ Collection c;
+ bool b;
+ iterator i;
+ const_iterator ci;
+ size_type n;
+ };
+
+}
+}
+}
+#endif // COLLECTION_CONCEPT_RG103101_HPP
diff --git a/boost/boost/multi_array/concept_checks.hpp b/boost/boost/multi_array/concept_checks.hpp
new file mode 100644
index 00000000000..49502e08d45
--- /dev/null
+++ b/boost/boost/multi_array/concept_checks.hpp
@@ -0,0 +1,214 @@
+// Copyright 2002 The Trustees of Indiana University.
+
+// Use, modification and distribution is 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)
+
+// Boost.MultiArray Library
+// Authors: Ronald Garcia
+// Jeremy Siek
+// Andrew Lumsdaine
+// See http://www.boost.org/libs/multi_array for documentation.
+
+#ifndef BOOST_MULTI_ARRAY_CONCEPT_CHECKS_RG110101_HPP
+#define BOOST_MULTI_ARRAY_CONCEPT_CHECKS_RG110101_HPP
+
+//
+// concept-checks.hpp - Checks out Const MultiArray and MultiArray
+// concepts
+//
+
+#include "boost/concept_check.hpp"
+#include "boost/iterator/iterator_concepts.hpp"
+
+namespace boost {
+namespace detail {
+namespace multi_array {
+
+ //
+ // idgen_helper -
+ // This is a helper for generating index_gen instantiations with
+ // the right type in order to test the call to
+ // operator[](index_gen). Since one would normally write:
+ // A[ indices[range1][range2] ]; // or
+ // B[ indices[index1][index2][range1] ];
+ // idgen helper allows us to generate the "indices" type by
+ // creating it through recursive calls.
+ template <std::size_t N>
+ struct idgen_helper {
+
+ template <typename Array, typename IdxGen, typename Call_Type>
+ static void call(Array& a, const IdxGen& idgen, Call_Type c) {
+ typedef typename Array::index_range index_range;
+ typedef typename Array::index index;
+ idgen_helper<N-1>::call(a,idgen[c],c);
+ }
+ };
+
+ template <>
+ struct idgen_helper<0> {
+
+ template <typename Array, typename IdxGen, typename Call_Type>
+ static void call(Array& a, const IdxGen& idgen, Call_Type) {
+ typedef typename Array::index_range index_range;
+ typedef typename Array::index index;
+ a[ idgen ];
+ }
+ };
+
+
+ template <typename Array, std::size_t NumDims >
+ struct ConstMultiArrayConcept
+ {
+ void constraints() {
+ // function_requires< CopyConstructibleConcept<Array> >();
+ function_requires< boost_concepts::ForwardTraversalConcept<iterator> >();
+ function_requires< boost_concepts::ReadableIteratorConcept<iterator> >();
+ function_requires< boost_concepts::ForwardTraversalConcept<const_iterator> >();
+ function_requires< boost_concepts::ReadableIteratorConcept<const_iterator> >();
+
+ // RG - a( CollectionArchetype) when available...
+ a[ id ];
+ // Test slicing, keeping only the first dimension, losing the rest
+ idgen_helper<NumDims-1>::call(a,idgen[range],id);
+
+ // Test slicing, keeping all dimensions.
+ idgen_helper<NumDims-1>::call(a,idgen[range],range);
+
+ st = a.size();
+ st = a.num_dimensions();
+ st = a.num_elements();
+ stp = a.shape();
+ idp = a.strides();
+ idp = a.index_bases();
+ cit = a.begin();
+ cit = a.end();
+ crit = a.rbegin();
+ crit = a.rend();
+ eltp = a.origin();
+ }
+
+ typedef typename Array::value_type value_type;
+ typedef typename Array::reference reference;
+ typedef typename Array::const_reference const_reference;
+ typedef typename Array::size_type size_type;
+ typedef typename Array::difference_type difference_type;
+ typedef typename Array::iterator iterator;
+ typedef typename Array::const_iterator const_iterator;
+ typedef typename Array::reverse_iterator reverse_iterator;
+ typedef typename Array::const_reverse_iterator const_reverse_iterator;
+ typedef typename Array::element element;
+ typedef typename Array::index index;
+ typedef typename Array::index_gen index_gen;
+ typedef typename Array::index_range index_range;
+ typedef typename Array::extent_gen extent_gen;
+ typedef typename Array::extent_range extent_range;
+
+ Array a;
+ size_type st;
+ const size_type* stp;
+ index id;
+ const index* idp;
+ const_iterator cit;
+ const_reverse_iterator crit;
+ const element* eltp;
+ index_gen idgen;
+ index_range range;
+ };
+
+
+ template <typename Array, std::size_t NumDims >
+ struct MutableMultiArrayConcept
+ {
+ void constraints() {
+ // function_requires< CopyConstructibleConcept<Array> >();
+
+ function_requires< boost_concepts::ForwardTraversalConcept<iterator> >();
+ function_requires< boost_concepts::ReadableIteratorConcept<iterator> >();
+ function_requires< boost_concepts::WritableIteratorConcept<iterator> >();
+ function_requires< boost_concepts::ForwardTraversalConcept<const_iterator> >();
+ function_requires< boost_concepts::ReadableIteratorConcept<const_iterator> >();
+
+ // RG - a( CollectionArchetype) when available...
+ value_type vt = a[ id ];
+
+ // Test slicing, keeping only the first dimension, losing the rest
+ idgen_helper<NumDims-1>::call(a,idgen[range],id);
+
+ // Test slicing, keeping all dimensions.
+ idgen_helper<NumDims-1>::call(a,idgen[range],range);
+
+ st = a.size();
+ st = a.num_dimensions();
+ st = a.num_elements();
+ stp = a.shape();
+ idp = a.strides();
+ idp = a.index_bases();
+ it = a.begin();
+ it = a.end();
+ rit = a.rbegin();
+ rit = a.rend();
+ eltp = a.origin();
+ const_constraints(a);
+ }
+
+ void const_constraints(const Array& a) {
+
+ // value_type vt = a[ id ];
+
+ // Test slicing, keeping only the first dimension, losing the rest
+ idgen_helper<NumDims-1>::call(a,idgen[range],id);
+
+ // Test slicing, keeping all dimensions.
+ idgen_helper<NumDims-1>::call(a,idgen[range],range);
+
+ st = a.size();
+ st = a.num_dimensions();
+ st = a.num_elements();
+ stp = a.shape();
+ idp = a.strides();
+ idp = a.index_bases();
+ cit = a.begin();
+ cit = a.end();
+ crit = a.rbegin();
+ crit = a.rend();
+ eltp = a.origin();
+ }
+
+ typedef typename Array::value_type value_type;
+ typedef typename Array::reference reference;
+ typedef typename Array::const_reference const_reference;
+ typedef typename Array::size_type size_type;
+ typedef typename Array::difference_type difference_type;
+ typedef typename Array::iterator iterator;
+ typedef typename Array::const_iterator const_iterator;
+ typedef typename Array::reverse_iterator reverse_iterator;
+ typedef typename Array::const_reverse_iterator const_reverse_iterator;
+ typedef typename Array::element element;
+ typedef typename Array::index index;
+ typedef typename Array::index_gen index_gen;
+ typedef typename Array::index_range index_range;
+ typedef typename Array::extent_gen extent_gen;
+ typedef typename Array::extent_range extent_range;
+
+ Array a;
+ size_type st;
+ const size_type* stp;
+ index id;
+ const index* idp;
+ iterator it;
+ const_iterator cit;
+ reverse_iterator rit;
+ const_reverse_iterator crit;
+ const element* eltp;
+ index_gen idgen;
+ index_range range;
+ };
+
+
+} // namespace multi_array
+} // namespace detail
+} // namespace boost
+
+
+#endif // BOOST_MULTI_ARRAY_CONCEPT_CHECKS_RG110101_HPP
diff --git a/boost/boost/multi_array/copy_array.hpp b/boost/boost/multi_array/copy_array.hpp
new file mode 100644
index 00000000000..143ddda85dc
--- /dev/null
+++ b/boost/boost/multi_array/copy_array.hpp
@@ -0,0 +1,68 @@
+// Copyright 2002 The Trustees of Indiana University.
+
+// Use, modification and distribution is 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)
+
+// Boost.MultiArray Library
+// Authors: Ronald Garcia
+// Jeremy Siek
+// Andrew Lumsdaine
+// See http://www.boost.org/libs/multi_array for documentation.
+
+#ifndef COPY_ARRAY_RG092101_HPP
+#define COPY_ARRAY_RG092101_HPP
+
+//
+// copy_array.hpp - generic code for copying the contents of one
+// Basic_MultiArray to another. We assume that they are of the same
+// shape
+//
+#include "boost/type.hpp"
+#include <cassert>
+
+namespace boost {
+namespace detail {
+namespace multi_array {
+
+template <typename Element>
+class copy_dispatch {
+public:
+ template <typename SourceIterator, typename DestIterator>
+ static void copy_array (SourceIterator first, SourceIterator last,
+ DestIterator result) {
+ while (first != last) {
+ copy_array(*first++,*result++);
+ }
+ }
+private:
+ // Array2 has to be passed by VALUE here because subarray
+ // pseudo-references are temporaries created by iterator::operator*()
+ template <typename Array1, typename Array2>
+ static void copy_array (const Array1& source, Array2 dest) {
+ copy_array(source.begin(),source.end(),dest.begin());
+ }
+
+ static void copy_array (const Element& source, Element& dest) {
+ dest = source;
+ }
+
+};
+
+
+template <typename Array1, typename Array2>
+void copy_array (Array1& source, Array2& dest) {
+ assert(std::equal(source.shape(),source.shape()+source.num_dimensions(),
+ dest.shape()));
+ // Dispatch to the proper function
+ typedef typename Array1::element element_type;
+ copy_dispatch<element_type>::
+ copy_array(source.begin(),source.end(),dest.begin());
+}
+
+
+} // namespace multi_array
+} // namespace detail
+} // namespace boost
+
+#endif // COPY_ARRAY_RG092101_HPP
diff --git a/boost/boost/multi_array/extent_gen.hpp b/boost/boost/multi_array/extent_gen.hpp
new file mode 100644
index 00000000000..b009f66fd09
--- /dev/null
+++ b/boost/boost/multi_array/extent_gen.hpp
@@ -0,0 +1,75 @@
+// Copyright 2002 The Trustees of Indiana University.
+
+// Use, modification and distribution is 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)
+
+// Boost.MultiArray Library
+// Authors: Ronald Garcia
+// Jeremy Siek
+// Andrew Lumsdaine
+// See http://www.boost.org/libs/multi_array for documentation.
+
+#ifndef BOOST_EXTENT_GEN_RG071801_HPP
+#define BOOST_EXTENT_GEN_RG071801_HPP
+
+#include "boost/multi_array/extent_range.hpp"
+#include "boost/multi_array/range_list.hpp"
+#include "boost/multi_array/types.hpp"
+#include "boost/array.hpp"
+#include <algorithm>
+
+namespace boost {
+namespace detail {
+namespace multi_array {
+
+
+template <std::size_t NumRanges>
+class extent_gen {
+public:
+ typedef boost::detail::multi_array::index index;
+ typedef boost::detail::multi_array::size_type size_type;
+ typedef extent_range<index,size_type> range;
+private:
+ typedef typename range_list_generator<range,NumRanges>::type range_list;
+public:
+ template <std::size_t Ranges>
+ struct gen_type {
+ typedef extent_gen<Ranges> type;
+ };
+
+ range_list ranges_;
+
+ extent_gen() { }
+
+ // Used by operator[] to expand extent_gens
+ extent_gen(const extent_gen<NumRanges-1>& rhs,
+ const range& a_range)
+ {
+ std::copy(rhs.ranges_.begin(),rhs.ranges_.end(),ranges_.begin());
+ *ranges_.rbegin() = a_range;
+ }
+
+ extent_gen<NumRanges+1>
+ operator[](const range& a_range)
+ {
+ return extent_gen<NumRanges+1>(*this,a_range);
+ }
+
+ extent_gen<NumRanges+1>
+ operator[](index idx)
+ {
+ return extent_gen<NumRanges+1>(*this,range(0,idx));
+ }
+
+ static extent_gen<0> extents() {
+ return extent_gen<0>();
+ }
+};
+
+} // namespace multi_array
+} // namespace detail
+} // namespace boost
+
+
+#endif // BOOST_EXTENT_GEN_RG071801_HPP
diff --git a/boost/boost/multi_array/extent_range.hpp b/boost/boost/multi_array/extent_range.hpp
new file mode 100644
index 00000000000..d7a2eafd0d4
--- /dev/null
+++ b/boost/boost/multi_array/extent_range.hpp
@@ -0,0 +1,49 @@
+// Copyright 2002 The Trustees of Indiana University.
+
+// Use, modification and distribution is 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)
+
+// Boost.MultiArray Library
+// Authors: Ronald Garcia
+// Jeremy Siek
+// Andrew Lumsdaine
+// See http://www.boost.org/libs/multi_array for documentation.
+
+#ifndef BOOST_EXTENT_RANGE_RG071801_HPP
+#define BOOST_EXTENT_RANGE_RG071801_HPP
+
+#include <utility>
+
+namespace boost {
+namespace detail {
+namespace multi_array {
+
+template <typename Extent, typename SizeType>
+class extent_range : private std::pair<Extent,Extent> {
+ typedef std::pair<Extent,Extent> super_type;
+public:
+ typedef Extent index;
+ typedef SizeType size_type;
+
+ extent_range(index start, index finish) :
+ super_type(start,finish) { }
+
+ extent_range(index finish) :
+ super_type(0,finish) { }
+
+ extent_range() : super_type(0,0) { }
+
+ index start() const { return super_type::first; }
+
+ index finish() const { return super_type::second; }
+
+ size_type size() const { return super_type::second - super_type::first; }
+};
+
+} // namespace multi_array
+} // namespace detail
+} // namespace boost
+
+
+#endif // BOOST_EXTENT_RANGE_RG071801_HPP
diff --git a/boost/boost/multi_array/index_gen.hpp b/boost/boost/multi_array/index_gen.hpp
new file mode 100644
index 00000000000..da8e1fdda73
--- /dev/null
+++ b/boost/boost/multi_array/index_gen.hpp
@@ -0,0 +1,81 @@
+// Copyright 2002 The Trustees of Indiana University.
+
+// Use, modification and distribution is 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)
+
+// Boost.MultiArray Library
+// Authors: Ronald Garcia
+// Jeremy Siek
+// Andrew Lumsdaine
+// See http://www.boost.org/libs/multi_array for documentation.
+
+#ifndef BOOST_INDEX_GEN_RG071801_HPP
+#define BOOST_INDEX_GEN_RG071801_HPP
+
+#include "boost/array.hpp"
+#include "boost/multi_array/index_range.hpp"
+#include "boost/multi_array/range_list.hpp"
+#include "boost/multi_array/types.hpp"
+#include <algorithm>
+#include <cstddef>
+
+namespace boost {
+namespace detail {
+namespace multi_array {
+
+
+template <int NumRanges, int NumDims>
+struct index_gen {
+private:
+ typedef ::boost::detail::multi_array::index index;
+ typedef ::boost::detail::multi_array::size_type size_type;
+ typedef index_range<index,size_type> range;
+public:
+ template <int Dims, int Ranges>
+ struct gen_type {
+ typedef index_gen<Ranges,Dims> type;
+ };
+
+ typedef typename range_list_generator<range,NumRanges>::type range_list;
+ range_list ranges_;
+
+ index_gen() { }
+
+ template <int ND>
+ explicit index_gen(const index_gen<NumRanges-1,ND>& rhs,
+ const range& r)
+ {
+ std::copy(rhs.ranges_.begin(),rhs.ranges_.end(),ranges_.begin());
+ *ranges_.rbegin() = r;
+ }
+
+ index_gen<NumRanges+1,NumDims+1>
+ operator[](const range& r) const
+ {
+ index_gen<NumRanges+1,NumDims+1> tmp;
+ std::copy(ranges_.begin(),ranges_.end(),tmp.ranges_.begin());
+ *tmp.ranges_.rbegin() = r;
+ return tmp;
+ }
+
+ index_gen<NumRanges+1,NumDims>
+ operator[](index idx) const
+ {
+ index_gen<NumRanges+1,NumDims> tmp;
+ std::copy(ranges_.begin(),ranges_.end(),tmp.ranges_.begin());
+ *tmp.ranges_.rbegin() = range(idx);
+ return tmp;
+ }
+
+ static index_gen<0,0> indices() {
+ return index_gen<0,0>();
+ }
+};
+
+} // namespace multi_array
+} // namespace detail
+} // namespace boost
+
+
+#endif // BOOST_INDEX_GEN_RG071801_HPP
diff --git a/boost/boost/multi_array/index_range.hpp b/boost/boost/multi_array/index_range.hpp
new file mode 100644
index 00000000000..3d6035e7444
--- /dev/null
+++ b/boost/boost/multi_array/index_range.hpp
@@ -0,0 +1,188 @@
+// Copyright 2002 The Trustees of Indiana University.
+
+// Use, modification and distribution is 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)
+
+// Boost.MultiArray Library
+// Authors: Ronald Garcia
+// Jeremy Siek
+// Andrew Lumsdaine
+// See http://www.boost.org/libs/multi_array for documentation.
+
+#ifndef BOOST_INDEX_RANGE_RG071801_HPP
+#define BOOST_INDEX_RANGE_RG071801_HPP
+
+#include <boost/config.hpp>
+#include <utility>
+#include <boost/limits.hpp>
+
+// For representing intervals, also with stride.
+// A degenerate range is a range with one element.
+
+// Thanks to Doug Gregor for the really cool idea of using the
+// comparison operators to express various interval types!
+
+// Internally, we represent the interval as half-open.
+
+namespace boost {
+namespace detail {
+namespace multi_array {
+
+ template <typename Index,typename SizeType>
+ class index_range {
+ public:
+ typedef Index index;
+ typedef SizeType size_type;
+
+ private:
+ static index from_start()
+ { return (std::numeric_limits<index>::min)(); }
+
+ static index to_end()
+ { return (std::numeric_limits<index>::max)(); }
+
+ public:
+
+ index_range()
+ {
+ start_ = from_start();
+ finish_ = to_end();
+ stride_ = 1;
+ degenerate_ = false;
+ }
+
+ explicit index_range(index pos)
+ {
+ start_ = pos;
+ finish_ = pos+1;
+ stride_ = 1;
+ degenerate_ = true;
+ }
+
+ explicit index_range(index start, index finish, index stride=1)
+ : start_(start), finish_(finish), stride_(stride),
+ degenerate_(false)
+ { }
+
+
+ // These are for chaining assignments to an index_range
+ index_range& start(index s) {
+ start_ = s;
+ degenerate_ = false;
+ return *this;
+ }
+
+ index_range& finish(index f) {
+ finish_ = f;
+ degenerate_ = false;
+ return *this;
+ }
+
+ index_range& stride(index s) { stride_ = s; return *this; }
+
+ index start() const
+ {
+ return start_;
+ }
+
+ index get_start(index low_index_range = index_range::from_start()) const
+ {
+ if (start_ == from_start())
+ return low_index_range;
+ return start_;
+ }
+
+ index finish() const
+ {
+ return finish_;
+ }
+
+ index get_finish(index high_index_range = index_range::to_end()) const
+ {
+ if (finish_ == to_end())
+ return high_index_range;
+ return finish_;
+ }
+
+ index stride() const { return stride_; }
+
+ void set_index_range(index start, index finish, index stride=1)
+ {
+ start_ = start;
+ finish_ = finish;
+ stride_ = stride;
+ }
+
+ static index_range all()
+ { return index_range(from_start(), to_end(), 1); }
+
+ bool is_degenerate() const { return degenerate_; }
+
+ index_range operator-(index shift) const
+ {
+ return index_range(start_ - shift, finish_ - shift, stride_);
+ }
+
+ index_range operator+(index shift) const
+ {
+ return index_range(start_ + shift, finish_ + shift, stride_);
+ }
+
+ index operator[](unsigned i) const
+ {
+ return start_ + i * stride_;
+ }
+
+ index operator()(unsigned i) const
+ {
+ return start_ + i * stride_;
+ }
+
+ // add conversion to std::slice?
+
+ public:
+ index start_, finish_, stride_;
+ bool degenerate_;
+ };
+
+ // Express open and closed interval end-points using the comparison
+ // operators.
+
+ // left closed
+ template <typename Index, typename SizeType>
+ inline index_range<Index,SizeType>
+ operator<=(Index s, const index_range<Index,SizeType>& r)
+ {
+ return index_range<Index,SizeType>(s, r.finish(), r.stride());
+ }
+
+ // left open
+ template <typename Index, typename SizeType>
+ inline index_range<Index,SizeType>
+ operator<(Index s, const index_range<Index,SizeType>& r)
+ {
+ return index_range<Index,SizeType>(s + 1, r.finish(), r.stride());
+ }
+
+ // right open
+ template <typename Index, typename SizeType>
+ inline index_range<Index,SizeType>
+ operator<(const index_range<Index,SizeType>& r, Index f)
+ {
+ return index_range<Index,SizeType>(r.start(), f, r.stride());
+ }
+
+ // right closed
+ template <typename Index, typename SizeType>
+ inline index_range<Index,SizeType>
+ operator<=(const index_range<Index,SizeType>& r, Index f)
+ {
+ return index_range<Index,SizeType>(r.start(), f + 1, r.stride());
+ }
+
+} // namespace multi_array
+} // namespace detail
+} // namespace boost
+
+#endif // BOOST_INDEX_RANGE_RG071801_HPP
diff --git a/boost/boost/multi_array/iterator.hpp b/boost/boost/multi_array/iterator.hpp
new file mode 100644
index 00000000000..59e7724f550
--- /dev/null
+++ b/boost/boost/multi_array/iterator.hpp
@@ -0,0 +1,170 @@
+// Copyright 2002 The Trustees of Indiana University.
+
+// Use, modification and distribution is 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)
+
+// Boost.MultiArray Library
+// Authors: Ronald Garcia
+// Jeremy Siek
+// Andrew Lumsdaine
+// See http://www.boost.org/libs/multi_array for documentation.
+
+#ifndef ITERATOR_RG071801_HPP
+#define ITERATOR_RG071801_HPP
+
+//
+// iterator.hpp - implementation of iterators for the
+// multi-dimensional array class
+//
+
+#include "boost/multi_array/base.hpp"
+#include "boost/iterator/iterator_facade.hpp"
+#include "boost/mpl/aux_/msvc_eti_base.hpp"
+#include <algorithm>
+#include <cstddef>
+#include <iterator>
+
+namespace boost {
+namespace detail {
+namespace multi_array {
+
+/////////////////////////////////////////////////////////////////////////
+// iterator components
+/////////////////////////////////////////////////////////////////////////
+
+template <class T>
+struct operator_arrow_proxy
+{
+ operator_arrow_proxy(T const& px) : value_(px) {}
+ T* operator->() const { return &value_; }
+ // This function is needed for MWCW and BCC, which won't call operator->
+ // again automatically per 13.3.1.2 para 8
+ operator T*() const { return &value_; }
+ mutable T value_;
+};
+
+template <typename T, typename TPtr, typename NumDims, typename Reference>
+class array_iterator;
+
+template <typename T, typename TPtr, typename NumDims, typename Reference>
+class array_iterator
+ : public
+ iterator_facade<
+ array_iterator<T,TPtr,NumDims,Reference>
+ , typename associated_types<T,NumDims>::value_type
+ , boost::random_access_traversal_tag
+ , Reference
+ >
+ , private
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ mpl::aux::msvc_eti_base<typename
+#endif
+ value_accessor_generator<T,NumDims>::type
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ >::type
+#endif
+{
+ friend class iterator_core_access;
+ typedef detail::multi_array::associated_types<T,NumDims> access_t;
+
+ typedef iterator_facade<
+ array_iterator<T,TPtr,NumDims,Reference>
+ , typename detail::multi_array::associated_types<T,NumDims>::value_type
+ , boost::random_access_traversal_tag
+ , Reference
+ > facade_type;
+
+ typedef typename access_t::index index;
+ typedef typename access_t::size_type size_type;
+
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+ template <typename, typename, typename, typename>
+ friend class array_iterator;
+#else
+ public:
+#endif
+
+ index idx_;
+ TPtr base_;
+ const size_type* extents_;
+ const index* strides_;
+ const index* index_base_;
+
+public:
+ // Typedefs to circumvent ambiguities between parent classes
+ typedef typename facade_type::reference reference;
+ typedef typename facade_type::value_type value_type;
+ typedef typename facade_type::difference_type difference_type;
+
+ array_iterator() {}
+
+ array_iterator(index idx, TPtr base, const size_type* extents,
+ const index* strides,
+ const index* index_base) :
+ idx_(idx), base_(base), extents_(extents),
+ strides_(strides), index_base_(index_base) { }
+
+ template <typename OPtr, typename ORef>
+ array_iterator(
+ const array_iterator<T,OPtr,NumDims,ORef>& rhs
+ , typename boost::enable_if_convertible<OPtr,TPtr>::type* = 0
+ )
+ : idx_(rhs.idx_), base_(rhs.base_), extents_(rhs.extents_),
+ strides_(rhs.strides_), index_base_(rhs.index_base_) { }
+
+
+ // RG - we make our own operator->
+ operator_arrow_proxy<reference>
+ operator->() const
+ {
+ return operator_arrow_proxy<reference>(this->dereference());
+ }
+
+
+ reference dereference() const
+ {
+ typedef typename value_accessor_generator<T,NumDims>::type accessor;
+ return accessor::access(boost::type<reference>(),
+ idx_,
+ base_,
+ extents_,
+ strides_,
+ index_base_);
+ }
+
+ void increment() { ++idx_; }
+ void decrement() { --idx_; }
+
+ template <class IteratorAdaptor>
+ bool equal(IteratorAdaptor& rhs) const {
+ const std::size_t N = NumDims::value;
+ return (idx_ == rhs.idx_) &&
+ (base_ == rhs.base_) &&
+ ( (extents_ == rhs.extents_) ||
+ std::equal(extents_,extents_+N,rhs.extents_) ) &&
+ ( (strides_ == rhs.strides_) ||
+ std::equal(strides_,strides_+N,rhs.strides_) ) &&
+ ( (index_base_ == rhs.index_base_) ||
+ std::equal(index_base_,index_base_+N,rhs.index_base_) );
+ }
+
+ template <class DifferenceType>
+ void advance(DifferenceType n) {
+ idx_ += n;
+ }
+
+ template <class IteratorAdaptor>
+ typename facade_type::difference_type
+ distance_to(IteratorAdaptor& rhs) const {
+ return rhs.idx_ - idx_;
+ }
+
+
+};
+
+} // namespace multi_array
+} // namespace detail
+} // namespace boost
+
+#endif // ITERATOR_RG071801_HPP
diff --git a/boost/boost/multi_array/multi_array_ref.hpp b/boost/boost/multi_array/multi_array_ref.hpp
new file mode 100644
index 00000000000..41b962a8ebe
--- /dev/null
+++ b/boost/boost/multi_array/multi_array_ref.hpp
@@ -0,0 +1,633 @@
+// Copyright 2002 The Trustees of Indiana University.
+
+// Use, modification and distribution is 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)
+
+// Boost.MultiArray Library
+// Authors: Ronald Garcia
+// Jeremy Siek
+// Andrew Lumsdaine
+// See http://www.boost.org/libs/multi_array for documentation.
+
+#ifndef BOOST_MULTI_ARRAY_REF_RG071801_HPP
+#define BOOST_MULTI_ARRAY_REF_RG071801_HPP
+
+//
+// multi_array_ref.hpp - code for creating "views" of array data.
+//
+
+#include "boost/multi_array/base.hpp"
+#include "boost/multi_array/collection_concept.hpp"
+#include "boost/multi_array/concept_checks.hpp"
+#include "boost/multi_array/iterator.hpp"
+#include "boost/multi_array/storage_order.hpp"
+#include "boost/multi_array/subarray.hpp"
+#include "boost/multi_array/view.hpp"
+#include "boost/multi_array/algorithm.hpp"
+#include "boost/type_traits/is_integral.hpp"
+#include "boost/array.hpp"
+#include "boost/concept_check.hpp"
+#include "boost/functional.hpp"
+#include "boost/limits.hpp"
+#include <algorithm>
+#include <cassert>
+#include <cstddef>
+#include <functional>
+#include <numeric>
+
+namespace boost {
+
+template <typename T, std::size_t NumDims,
+ typename TPtr = const T*
+>
+class const_multi_array_ref :
+ public detail::multi_array::multi_array_impl_base<T,NumDims>
+{
+ typedef detail::multi_array::multi_array_impl_base<T,NumDims> super_type;
+public:
+ typedef typename super_type::value_type value_type;
+ typedef typename super_type::const_reference const_reference;
+ typedef typename super_type::const_iterator const_iterator;
+ typedef typename super_type::const_reverse_iterator const_reverse_iterator;
+ typedef typename super_type::element element;
+ typedef typename super_type::size_type size_type;
+ typedef typename super_type::difference_type difference_type;
+ typedef typename super_type::index index;
+ typedef typename super_type::extent_range extent_range;
+ typedef general_storage_order<NumDims> storage_order_type;
+
+ // template typedefs
+ template <std::size_t NDims>
+ struct const_array_view {
+ typedef boost::detail::multi_array::const_multi_array_view<T,NDims> type;
+ };
+
+ template <std::size_t NDims>
+ struct array_view {
+ typedef boost::detail::multi_array::multi_array_view<T,NDims> type;
+ };
+
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+ // make const_multi_array_ref a friend of itself
+ template <typename,std::size_t,typename>
+ friend class const_multi_array_ref;
+#endif
+
+ // This ensures that const_multi_array_ref types with different TPtr
+ // types can convert to each other
+ template <typename OPtr>
+ const_multi_array_ref(const const_multi_array_ref<T,NumDims,OPtr>& other)
+ : base_(other.base_), storage_(other.storage_),
+ extent_list_(other.extent_list_),
+ stride_list_(other.stride_list_),
+ index_base_list_(other.index_base_list_),
+ origin_offset_(other.origin_offset_),
+ directional_offset_(other.directional_offset_),
+ num_elements_(other.num_elements_) { }
+
+ template <typename ExtentList>
+ explicit const_multi_array_ref(TPtr base, const ExtentList& extents) :
+ base_(base), storage_(c_storage_order()) {
+ boost::function_requires<
+ detail::multi_array::CollectionConcept<ExtentList> >();
+
+ index_base_list_.assign(0);
+ init_multi_array_ref(extents.begin());
+ }
+
+ template <typename ExtentList>
+ explicit const_multi_array_ref(TPtr base, const ExtentList& extents,
+ const general_storage_order<NumDims>& so) :
+ base_(base), storage_(so) {
+ boost::function_requires<
+ detail::multi_array::CollectionConcept<ExtentList> >();
+
+ index_base_list_.assign(0);
+ init_multi_array_ref(extents.begin());
+ }
+
+ explicit const_multi_array_ref(TPtr base,
+ const detail::multi_array::
+ extent_gen<NumDims>& ranges) :
+ base_(base), storage_(c_storage_order()) {
+
+ init_from_extent_gen(ranges);
+ }
+
+ explicit const_multi_array_ref(TPtr base,
+ const detail::multi_array::
+ extent_gen<NumDims>& ranges,
+ const general_storage_order<NumDims>& so) :
+ base_(base), storage_(so) {
+
+ init_from_extent_gen(ranges);
+ }
+
+ template <class InputIterator>
+ void assign(InputIterator begin, InputIterator end) {
+ boost::function_requires<InputIteratorConcept<InputIterator> >();
+
+ InputIterator in_iter = begin;
+ T* out_iter = base_;
+ std::size_t copy_count=0;
+ while (in_iter != end && copy_count < num_elements_) {
+ *out_iter++ = *in_iter++;
+ copy_count++;
+ }
+ }
+
+ template <class BaseList>
+#ifdef BOOST_NO_SFINAE
+ void
+#else
+ typename
+ disable_if<typename boost::is_integral<BaseList>::type,void >::type
+#endif // BOOST_NO_SFINAE
+ reindex(const BaseList& values) {
+ boost::function_requires<
+ detail::multi_array::CollectionConcept<BaseList> >();
+ boost::detail::multi_array::
+ copy_n(values.begin(),num_dimensions(),index_base_list_.begin());
+ origin_offset_ =
+ this->calculate_origin_offset(stride_list_,extent_list_,
+ storage_,index_base_list_);
+ }
+
+ void reindex(index value) {
+ index_base_list_.assign(value);
+ origin_offset_ =
+ this->calculate_origin_offset(stride_list_,extent_list_,
+ storage_,index_base_list_);
+ }
+
+ template <typename SizeList>
+ void reshape(const SizeList& extents) {
+ boost::function_requires<
+ detail::multi_array::CollectionConcept<SizeList> >();
+ assert(num_elements_ ==
+ std::accumulate(extents.begin(),extents.end(),
+ size_type(1),std::multiplies<size_type>()));
+
+ std::copy(extents.begin(),extents.end(),extent_list_.begin());
+ this->compute_strides(stride_list_,extent_list_,storage_);
+
+ origin_offset_ =
+ this->calculate_origin_offset(stride_list_,extent_list_,
+ storage_,index_base_list_);
+ }
+
+ size_type num_dimensions() const { return NumDims; }
+
+ size_type size() const { return extent_list_.front(); }
+
+ // given reshaping functionality, this is the max possible size.
+ size_type max_size() const { return num_elements(); }
+
+ bool empty() const { return size() == 0; }
+
+ const size_type* shape() const {
+ return extent_list_.data();
+ }
+
+ const index* strides() const {
+ return stride_list_.data();
+ }
+
+ const element* origin() const { return base_+origin_offset_; }
+ const element* data() const { return base_; }
+
+ size_type num_elements() const { return num_elements_; }
+
+ const index* index_bases() const {
+ return index_base_list_.data();
+ }
+
+
+ const storage_order_type& storage_order() const {
+ return storage_;
+ }
+
+ template <typename IndexList>
+ const element& operator()(IndexList indices) const {
+ boost::function_requires<
+ detail::multi_array::CollectionConcept<IndexList> >();
+ return super_type::access_element(boost::type<const element&>(),
+ indices,origin(),
+ shape(),strides(),index_bases());
+ }
+
+ // Only allow const element access
+ const_reference operator[](index idx) const {
+ return super_type::access(boost::type<const_reference>(),
+ idx,origin(),
+ shape(),strides(),index_bases());
+ }
+
+ // see generate_array_view in base.hpp
+#if !defined(BOOST_MSVC) || BOOST_MSVC > 1300
+ template <int NDims>
+#else
+ template <int NumDims, int NDims> // else ICE
+#endif // BOOST_MSVC
+ typename const_array_view<NDims>::type
+ operator[](const detail::multi_array::
+ index_gen<NumDims,NDims>& indices)
+ const {
+ typedef typename const_array_view<NDims>::type return_type;
+ return
+ super_type::generate_array_view(boost::type<return_type>(),
+ indices,
+ shape(),
+ strides(),
+ index_bases(),
+ origin());
+ }
+
+ const_iterator begin() const {
+ return const_iterator(*index_bases(),origin(),
+ shape(),strides(),index_bases());
+ }
+
+ const_iterator end() const {
+ return const_iterator(*index_bases()+(index)*shape(),origin(),
+ shape(),strides(),index_bases());
+ }
+
+ const_reverse_iterator rbegin() const {
+ return const_reverse_iterator(end());
+ }
+
+ const_reverse_iterator rend() const {
+ return const_reverse_iterator(begin());
+ }
+
+
+ template <typename OPtr>
+ bool operator==(const
+ const_multi_array_ref<T,NumDims,OPtr>& rhs)
+ const {
+ if(std::equal(extent_list_.begin(),
+ extent_list_.end(),
+ rhs.extent_list_.begin()))
+ return std::equal(begin(),end(),rhs.begin());
+ else return false;
+ }
+
+ template <typename OPtr>
+ bool operator<(const
+ const_multi_array_ref<T,NumDims,OPtr>& rhs)
+ const {
+ return std::lexicographical_compare(begin(),end(),rhs.begin(),rhs.end());
+ }
+
+ template <typename OPtr>
+ bool operator!=(const
+ const_multi_array_ref<T,NumDims,OPtr>& rhs)
+ const {
+ return !(*this == rhs);
+ }
+
+ template <typename OPtr>
+ bool operator>(const
+ const_multi_array_ref<T,NumDims,OPtr>& rhs)
+ const {
+ return rhs < *this;
+ }
+
+ template <typename OPtr>
+ bool operator<=(const
+ const_multi_array_ref<T,NumDims,OPtr>& rhs)
+ const {
+ return !(*this > rhs);
+ }
+
+ template <typename OPtr>
+ bool operator>=(const
+ const_multi_array_ref<T,NumDims,OPtr>& rhs)
+ const {
+ return !(*this < rhs);
+ }
+
+
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+protected:
+#else
+public:
+#endif
+
+ typedef boost::array<size_type,NumDims> size_list;
+ typedef boost::array<index,NumDims> index_list;
+
+ // This is used by multi_array, which is a subclass of this
+ void set_base_ptr(TPtr new_base) { base_ = new_base; }
+
+
+ // This constructor supports multi_array's default constructor
+ // and constructors from multi_array_ref, subarray, and array_view
+ explicit
+ const_multi_array_ref(TPtr base,
+ const storage_order_type& so,
+ const index * index_bases,
+ const size_type* extents) :
+ base_(base), storage_(so), origin_offset_(0), directional_offset_(0)
+ {
+ // If index_bases or extents is null, then initialize the corresponding
+ // private data to zeroed lists.
+ if(index_bases) {
+ boost::detail::multi_array::
+ copy_n(index_bases,NumDims,index_base_list_.begin());
+ } else {
+ std::fill_n(index_base_list_.begin(),NumDims,0);
+ }
+ if(extents) {
+ init_multi_array_ref(extents);
+ } else {
+ boost::array<index,NumDims> extent_list;
+ extent_list.assign(0);
+ init_multi_array_ref(extent_list.begin());
+ }
+ }
+
+
+ TPtr base_;
+ storage_order_type storage_;
+ size_list extent_list_;
+ index_list stride_list_;
+ index_list index_base_list_;
+ index origin_offset_;
+ index directional_offset_;
+ size_type num_elements_;
+
+private:
+ // const_multi_array_ref cannot be assigned to (no deep copies!)
+ const_multi_array_ref& operator=(const const_multi_array_ref& other);
+
+ void init_from_extent_gen(const
+ detail::multi_array::
+ extent_gen<NumDims>& ranges) {
+
+ typedef boost::array<index,NumDims> extent_list;
+
+ // get the index_base values
+ std::transform(ranges.ranges_.begin(),ranges.ranges_.end(),
+ index_base_list_.begin(),
+ boost::mem_fun_ref(&extent_range::start));
+
+ // calculate the extents
+ extent_list extents;
+ std::transform(ranges.ranges_.begin(),ranges.ranges_.end(),
+ extents.begin(),
+ boost::mem_fun_ref(&extent_range::size));
+
+ init_multi_array_ref(extents.begin());
+ }
+
+
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+protected:
+#else
+public:
+#endif
+ // RG - move me!
+ template <class InputIterator>
+ void init_multi_array_ref(InputIterator extents_iter) {
+ boost::function_requires<InputIteratorConcept<InputIterator> >();
+
+ boost::detail::multi_array::
+ copy_n(extents_iter,num_dimensions(),extent_list_.begin());
+
+ // Calculate the array size
+ num_elements_ = std::accumulate(extent_list_.begin(),extent_list_.end(),
+ size_type(1),std::multiplies<size_type>());
+
+ this->compute_strides(stride_list_,extent_list_,storage_);
+
+ origin_offset_ =
+ this->calculate_origin_offset(stride_list_,extent_list_,
+ storage_,index_base_list_);
+ directional_offset_ =
+ this->calculate_descending_dimension_offset(stride_list_,extent_list_,
+ storage_);
+ }
+};
+
+template <typename T, std::size_t NumDims>
+class multi_array_ref :
+ public const_multi_array_ref<T,NumDims,T*>
+{
+ typedef const_multi_array_ref<T,NumDims,T*> super_type;
+public:
+ typedef typename super_type::value_type value_type;
+ typedef typename super_type::reference reference;
+ typedef typename super_type::iterator iterator;
+ typedef typename super_type::reverse_iterator reverse_iterator;
+ typedef typename super_type::const_reference const_reference;
+ typedef typename super_type::const_iterator const_iterator;
+ typedef typename super_type::const_reverse_iterator const_reverse_iterator;
+ typedef typename super_type::element element;
+ typedef typename super_type::size_type size_type;
+ typedef typename super_type::difference_type difference_type;
+ typedef typename super_type::index index;
+ typedef typename super_type::extent_range extent_range;
+
+ typedef typename super_type::storage_order_type storage_order_type;
+ typedef typename super_type::index_list index_list;
+ typedef typename super_type::size_list size_list;
+
+ template <std::size_t NDims>
+ struct const_array_view {
+ typedef boost::detail::multi_array::const_multi_array_view<T,NDims> type;
+ };
+
+ template <std::size_t NDims>
+ struct array_view {
+ typedef boost::detail::multi_array::multi_array_view<T,NDims> type;
+ };
+
+ template <class ExtentList>
+ explicit multi_array_ref(T* base, const ExtentList& extents) :
+ super_type(base,extents) {
+ boost::function_requires<
+ detail::multi_array::CollectionConcept<ExtentList> >();
+ }
+
+ template <class ExtentList>
+ explicit multi_array_ref(T* base, const ExtentList& extents,
+ const general_storage_order<NumDims>& so) :
+ super_type(base,extents,so) {
+ boost::function_requires<
+ detail::multi_array::CollectionConcept<ExtentList> >();
+ }
+
+
+ explicit multi_array_ref(T* base,
+ const detail::multi_array::
+ extent_gen<NumDims>& ranges) :
+ super_type(base,ranges) { }
+
+
+ explicit multi_array_ref(T* base,
+ const detail::multi_array::
+ extent_gen<NumDims>&
+ ranges,
+ const general_storage_order<NumDims>& so) :
+ super_type(base,ranges,so) { }
+
+
+ // Assignment from other ConstMultiArray types.
+ template <typename ConstMultiArray>
+ multi_array_ref& operator=(const ConstMultiArray& other) {
+ function_requires<
+ detail::multi_array::
+ ConstMultiArrayConcept<ConstMultiArray,NumDims> >();
+
+ // make sure the dimensions agree
+ assert(other.num_dimensions() == this->num_dimensions());
+ assert(std::equal(other.shape(),other.shape()+this->num_dimensions(),
+ this->shape()));
+ // iterator-based copy
+ std::copy(other.begin(),other.end(),this->begin());
+ return *this;
+ }
+
+ multi_array_ref& operator=(const multi_array_ref& other) {
+ if (&other != this) {
+ // make sure the dimensions agree
+
+ assert(other.num_dimensions() == this->num_dimensions());
+ assert(std::equal(other.shape(),other.shape()+this->num_dimensions(),
+ this->shape()));
+ // iterator-based copy
+ std::copy(other.begin(),other.end(),this->begin());
+ }
+ return *this;
+ }
+
+ element* origin() { return super_type::base_+super_type::origin_offset_; }
+
+ element* data() { return super_type::base_; }
+
+ template <class IndexList>
+ element& operator()(const IndexList& indices) {
+ boost::function_requires<
+ detail::multi_array::CollectionConcept<IndexList> >();
+ return super_type::access_element(boost::type<element&>(),
+ indices,origin(),
+ this->shape(),this->strides(),
+ this->index_bases());
+ }
+
+
+ reference operator[](index idx) {
+ return super_type::access(boost::type<reference>(),
+ idx,origin(),
+ this->shape(),this->strides(),
+ this->index_bases());
+ }
+
+
+ // See note attached to generate_array_view in base.hpp
+#if !defined(BOOST_MSVC) || BOOST_MSVC > 1300
+ template <int NDims>
+#else
+ template <int NumDims, int NDims> // else ICE
+#endif // BOOST_MSVC
+ typename array_view<NDims>::type
+ operator[](const detail::multi_array::
+ index_gen<NumDims,NDims>& indices) {
+ typedef typename array_view<NDims>::type return_type;
+ return
+ super_type::generate_array_view(boost::type<return_type>(),
+ indices,
+ this->shape(),
+ this->strides(),
+ this->index_bases(),
+ origin());
+ }
+
+
+ iterator begin() {
+ return iterator(*this->index_bases(),origin(),this->shape(),
+ this->strides(),this->index_bases());
+ }
+
+ iterator end() {
+ return iterator(*this->index_bases()+(index)*this->shape(),origin(),
+ this->shape(),this->strides(),
+ this->index_bases());
+ }
+
+ // rbegin() and rend() written naively to thwart MSVC ICE.
+ reverse_iterator rbegin() {
+ reverse_iterator ri(end());
+ return ri;
+ }
+
+ reverse_iterator rend() {
+ reverse_iterator ri(begin());
+ return ri;
+ }
+
+ // Using declarations don't seem to work for g++
+ // These are the proxies to work around this.
+
+ const element* origin() const { return super_type::origin(); }
+ const element* data() const { return super_type::data(); }
+
+ template <class IndexList>
+ const element& operator()(const IndexList& indices) const {
+ boost::function_requires<
+ detail::multi_array::CollectionConcept<IndexList> >();
+ return super_type::operator()(indices);
+ }
+
+ const_reference operator[](index idx) const {
+ return super_type::access(boost::type<const_reference>(),
+ idx,origin(),
+ this->shape(),this->strides(),
+ this->index_bases());
+ }
+
+ // See note attached to generate_array_view in base.hpp
+#if !defined(BOOST_MSVC) || BOOST_MSVC > 1300
+ template <int NDims>
+#else
+ template <int NumDims, int NDims> // else ICE
+#endif // BOOST_MSVC
+ typename const_array_view<NDims>::type
+ operator[](const detail::multi_array::
+ index_gen<NumDims,NDims>& indices)
+ const {
+ return super_type::operator[](indices);
+ }
+
+ const_iterator begin() const {
+ return super_type::begin();
+ }
+
+ const_iterator end() const {
+ return super_type::end();
+ }
+
+ const_reverse_iterator rbegin() const {
+ return super_type::rbegin();
+ }
+
+ const_reverse_iterator rend() const {
+ return super_type::rend();
+ }
+
+protected:
+ // This is only supplied to support multi_array's default constructor
+ explicit multi_array_ref(T* base,
+ const storage_order_type& so,
+ const index* index_bases,
+ const size_type* extents) :
+ super_type(base,so,index_bases,extents) { }
+
+};
+
+} // namespace boost
+
+#endif // BOOST_MULTI_ARRAY_REF_RG071801_HPP
diff --git a/boost/boost/multi_array/range_list.hpp b/boost/boost/multi_array/range_list.hpp
new file mode 100644
index 00000000000..406571c5b03
--- /dev/null
+++ b/boost/boost/multi_array/range_list.hpp
@@ -0,0 +1,70 @@
+// Copyright 2002 The Trustees of Indiana University.
+
+// Use, modification and distribution is 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)
+
+// Boost.MultiArray Library
+// Authors: Ronald Garcia
+// Jeremy Siek
+// Andrew Lumsdaine
+// See http://www.boost.org/libs/multi_array for documentation.
+
+#ifndef RANGE_LIST_RG072501_HPP
+#define RANGE_LIST_RG072501_HPP
+//
+// range_list.hpp - helper to build boost::arrays for *_set types
+//
+
+#include "boost/array.hpp"
+
+namespace boost {
+namespace detail {
+namespace multi_array {
+
+/////////////////////////////////////////////////////////////////////////
+// choose range list begins
+//
+
+struct choose_range_list_n {
+ template <typename T, std::size_t NumRanges>
+ struct bind {
+ typedef boost::array<T,NumRanges> type;
+ };
+};
+
+struct choose_range_list_zero {
+ template <typename T, std::size_t NumRanges>
+ struct bind {
+ typedef boost::array<T,1> type;
+ };
+};
+
+
+template <std::size_t NumRanges>
+struct range_list_gen_helper {
+ typedef choose_range_list_n choice;
+};
+
+template <>
+struct range_list_gen_helper<0> {
+ typedef choose_range_list_zero choice;
+};
+
+template <typename T, std::size_t NumRanges>
+struct range_list_generator {
+private:
+ typedef typename range_list_gen_helper<NumRanges>::choice Choice;
+public:
+ typedef typename Choice::template bind<T,NumRanges>::type type;
+};
+
+//
+// choose range list ends
+/////////////////////////////////////////////////////////////////////////
+
+} // namespace multi_array
+} // namespace detail
+} // namespace boost
+
+#endif // RANGE_LIST_RG072501_HPP
diff --git a/boost/boost/multi_array/storage_order.hpp b/boost/boost/multi_array/storage_order.hpp
new file mode 100644
index 00000000000..3eb71360c1c
--- /dev/null
+++ b/boost/boost/multi_array/storage_order.hpp
@@ -0,0 +1,125 @@
+// Copyright 2002 The Trustees of Indiana University.
+
+// Use, modification and distribution is 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)
+
+// Boost.MultiArray Library
+// Authors: Ronald Garcia
+// Jeremy Siek
+// Andrew Lumsdaine
+// See http://www.boost.org/libs/multi_array for documentation.
+
+#ifndef BOOST_STORAGE_ORDER_RG071801_HPP
+#define BOOST_STORAGE_ORDER_RG071801_HPP
+
+#include "boost/multi_array/types.hpp"
+#include "boost/array.hpp"
+#include "boost/multi_array/algorithm.hpp"
+#include <algorithm>
+#include <cstddef>
+#include <functional>
+#include <numeric>
+#include <vector>
+
+namespace boost {
+
+ // RG - This is to make things work with VC++. So sad, so sad.
+ class c_storage_order;
+ class fortran_storage_order;
+
+ template <std::size_t NumDims>
+ class general_storage_order
+ {
+ public:
+ typedef detail::multi_array::size_type size_type;
+ template <typename OrderingIter, typename AscendingIter>
+ general_storage_order(OrderingIter ordering,
+ AscendingIter ascending) {
+ boost::detail::multi_array::copy_n(ordering,NumDims,ordering_.begin());
+ boost::detail::multi_array::copy_n(ascending,NumDims,ascending_.begin());
+ }
+
+ // RG - ideally these would not be necessary, but some compilers
+ // don't like template conversion operators. I suspect that not
+ // too many folk will feel the need to use customized
+ // storage_order objects, I sacrifice that feature for compiler support.
+ general_storage_order(const c_storage_order&) {
+ for (size_type i=0; i != NumDims; ++i) {
+ ordering_[i] = NumDims - 1 - i;
+ }
+ ascending_.assign(true);
+ }
+
+ general_storage_order(const fortran_storage_order&) {
+ for (size_type i=0; i != NumDims; ++i) {
+ ordering_[i] = i;
+ }
+ ascending_.assign(true);
+ }
+
+ size_type ordering(size_type dim) const { return ordering_[dim]; }
+ bool ascending(size_type dim) const { return ascending_[dim]; }
+
+ bool all_dims_ascending() const {
+ return std::accumulate(ascending_.begin(),ascending_.end(),true,
+ std::logical_and<bool>());
+ }
+
+ bool operator==(general_storage_order const& rhs) const {
+ return (ordering_ == rhs.ordering_) &&
+ (ascending_ == rhs.ascending_);
+ }
+
+ protected:
+ boost::array<size_type,NumDims> ordering_;
+ boost::array<bool,NumDims> ascending_;
+ };
+
+ class c_storage_order
+ {
+ typedef detail::multi_array::size_type size_type;
+ public:
+ // This is the idiom for creating your own custom storage orders.
+ // Not supported by all compilers though!
+#ifndef __MWERKS__ // Metrowerks screams "ambiguity!"
+ template <std::size_t NumDims>
+ operator general_storage_order<NumDims>() const {
+ boost::array<size_type,NumDims> ordering;
+ boost::array<bool,NumDims> ascending;
+
+ for (size_type i=0; i != NumDims; ++i) {
+ ordering[i] = NumDims - 1 - i;
+ ascending[i] = true;
+ }
+ return general_storage_order<NumDims>(ordering.begin(),
+ ascending.begin());
+ }
+#endif
+ };
+
+ class fortran_storage_order
+ {
+ typedef detail::multi_array::size_type size_type;
+ public:
+ // This is the idiom for creating your own custom storage orders.
+ // Not supported by all compilers though!
+#ifndef __MWERKS__ // Metrowerks screams "ambiguity!"
+ template <std::size_t NumDims>
+ operator general_storage_order<NumDims>() const {
+ boost::array<size_type,NumDims> ordering;
+ boost::array<bool,NumDims> ascending;
+
+ for (size_type i=0; i != NumDims; ++i) {
+ ordering[i] = i;
+ ascending[i] = true;
+ }
+ return general_storage_order<NumDims>(ordering.begin(),
+ ascending.begin());
+ }
+#endif
+ };
+
+} // namespace boost
+
+#endif // BOOST_ARRAY_STORAGE_RG071801_HPP
diff --git a/boost/boost/multi_array/subarray.hpp b/boost/boost/multi_array/subarray.hpp
new file mode 100644
index 00000000000..359d00e951a
--- /dev/null
+++ b/boost/boost/multi_array/subarray.hpp
@@ -0,0 +1,398 @@
+// Copyright 2002 The Trustees of Indiana University.
+
+// Use, modification and distribution is 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)
+
+// Boost.MultiArray Library
+// Authors: Ronald Garcia
+// Jeremy Siek
+// Andrew Lumsdaine
+// See http://www.boost.org/libs/multi_array for documentation.
+
+#ifndef SUBARRAY_RG071801_HPP
+#define SUBARRAY_RG071801_HPP
+
+//
+// subarray.hpp - used to implement standard operator[] on
+// multi_arrays
+//
+
+#include "boost/multi_array/base.hpp"
+#include "boost/multi_array/concept_checks.hpp"
+#include "boost/limits.hpp"
+#include "boost/type.hpp"
+#include <algorithm>
+#include <cstddef>
+#include <functional>
+
+namespace boost {
+namespace detail {
+namespace multi_array {
+
+//
+// const_sub_array
+// multi_array's proxy class to allow multiple overloads of
+// operator[] in order to provide a clean multi-dimensional array
+// interface.
+template <typename T, std::size_t NumDims, typename TPtr>
+class const_sub_array :
+ public boost::detail::multi_array::multi_array_impl_base<T,NumDims>
+{
+ typedef boost::detail::multi_array::multi_array_impl_base<T,NumDims> super_type;
+public:
+ typedef typename super_type::value_type value_type;
+ typedef typename super_type::const_reference const_reference;
+ typedef typename super_type::const_iterator const_iterator;
+ typedef typename super_type::const_reverse_iterator const_reverse_iterator;
+ typedef typename super_type::element element;
+ typedef typename super_type::size_type size_type;
+ typedef typename super_type::difference_type difference_type;
+ typedef typename super_type::index index;
+ typedef typename super_type::extent_range extent_range;
+
+ // template typedefs
+ template <std::size_t NDims>
+ struct const_array_view {
+ typedef boost::detail::multi_array::const_multi_array_view<T,NDims> type;
+ };
+
+ template <std::size_t NDims>
+ struct array_view {
+ typedef boost::detail::multi_array::multi_array_view<T,NDims> type;
+ };
+
+ // Allow default copy constructor as well.
+
+ template <typename OPtr>
+ const_sub_array (const const_sub_array<T,NumDims,OPtr>& rhs) :
+ base_(rhs.base_), extents_(rhs.extents_), strides_(rhs.strides_),
+ index_base_(rhs.index_base_) {
+ }
+
+ // const_sub_array always returns const types, regardless of its own
+ // constness.
+ const_reference operator[](index idx) const {
+ return super_type::access(boost::type<const_reference>(),
+ idx,base_,shape(),strides(),index_bases());
+ }
+
+ template <typename IndexList>
+ const element& operator()(const IndexList& indices) const {
+ boost::function_requires<
+ detail::multi_array::CollectionConcept<IndexList> >();
+ return super_type::access_element(boost::type<const element&>(),
+ indices,origin(),
+ shape(),strides(),index_bases());
+ }
+
+ // see generate_array_view in base.hpp
+#if !defined(BOOST_MSVC) || BOOST_MSVC > 1300
+ template <int NDims>
+#else
+ template <int NumDims, int NDims> // else ICE
+#endif // BOOST_MSVC
+ typename const_array_view<NDims>::type
+ operator[](const boost::detail::multi_array::
+ index_gen<NumDims,NDims>& indices)
+ const {
+ typedef typename const_array_view<NDims>::type return_type;
+ return
+ super_type::generate_array_view(boost::type<return_type>(),
+ indices,
+ shape(),
+ strides(),
+ index_bases(),
+ base_);
+ }
+
+ template <typename OPtr>
+ bool operator<(const const_sub_array<T,NumDims,OPtr>& rhs) const {
+ return std::lexicographical_compare(begin(),end(),rhs.begin(),rhs.end());
+ }
+
+ template <typename OPtr>
+ bool operator==(const const_sub_array<T,NumDims,OPtr>& rhs) const {
+ if(std::equal(shape(),shape()+num_dimensions(),rhs.shape()))
+ return std::equal(begin(),end(),rhs.begin());
+ else return false;
+ }
+
+ template <typename OPtr>
+ bool operator!=(const const_sub_array<T,NumDims,OPtr>& rhs) const {
+ return !(*this == rhs);
+ }
+
+ template <typename OPtr>
+ bool operator>(const const_sub_array<T,NumDims,OPtr>& rhs) const {
+ return rhs < *this;
+ }
+
+ template <typename OPtr>
+ bool operator<=(const const_sub_array<T,NumDims,OPtr>& rhs) const {
+ return !(*this > rhs);
+ }
+
+ template <typename OPtr>
+ bool operator>=(const const_sub_array<T,NumDims,OPtr>& rhs) const {
+ return !(*this < rhs);
+ }
+
+ const_iterator begin() const {
+ return const_iterator(*index_bases(),origin(),
+ shape(),strides(),index_bases());
+ }
+
+ const_iterator end() const {
+ return const_iterator(*index_bases()+(index)*shape(),origin(),
+ shape(),strides(),index_bases());
+ }
+
+ const_reverse_iterator rbegin() const {
+ return const_reverse_iterator(end());
+ }
+
+ const_reverse_iterator rend() const {
+ return const_reverse_iterator(begin());
+ }
+
+ TPtr origin() const { return base_; }
+ size_type size() const { return extents_[0]; }
+ size_type max_size() const { return num_elements(); }
+ bool empty() const { return size() == 0; }
+ size_type num_dimensions() const { return NumDims; }
+ const size_type* shape() const { return extents_; }
+ const index* strides() const { return strides_; }
+ const index* index_bases() const { return index_base_; }
+
+ size_type num_elements() const {
+ return std::accumulate(shape(),shape() + num_dimensions(),
+ size_type(1), std::multiplies<size_type>());
+ }
+
+
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+protected:
+ template <typename,std::size_t> friend class value_accessor_n;
+ template <typename,std::size_t,typename> friend class const_sub_array;
+#else
+public: // Should be protected
+#endif
+
+ const_sub_array (TPtr base,
+ const size_type* extents,
+ const index* strides,
+ const index* index_base) :
+ base_(base), extents_(extents), strides_(strides),
+ index_base_(index_base) {
+ }
+
+ TPtr base_;
+ const size_type* extents_;
+ const index* strides_;
+ const index* index_base_;
+private:
+ // const_sub_array cannot be assigned to (no deep copies!)
+ const_sub_array& operator=(const const_sub_array&);
+};
+
+
+//
+// sub_array
+// multi_array's proxy class to allow multiple overloads of
+// operator[] in order to provide a clean multi-dimensional array
+// interface.
+template <typename T, std::size_t NumDims>
+class sub_array : public const_sub_array<T,NumDims,T*>
+{
+ typedef const_sub_array<T,NumDims,T*> super_type;
+public:
+ typedef typename super_type::element element;
+ typedef typename super_type::reference reference;
+ typedef typename super_type::index index;
+ typedef typename super_type::size_type size_type;
+ typedef typename super_type::iterator iterator;
+ typedef typename super_type::reverse_iterator reverse_iterator;
+ typedef typename super_type::const_reference const_reference;
+ typedef typename super_type::const_iterator const_iterator;
+ typedef typename super_type::const_reverse_iterator const_reverse_iterator;
+
+ // template typedefs
+ template <std::size_t NDims>
+ struct const_array_view {
+ typedef boost::detail::multi_array::const_multi_array_view<T,NDims> type;
+ };
+
+ template <std::size_t NDims>
+ struct array_view {
+ typedef boost::detail::multi_array::multi_array_view<T,NDims> type;
+ };
+
+ // Assignment from other ConstMultiArray types.
+ template <typename ConstMultiArray>
+ sub_array& operator=(const ConstMultiArray& other) {
+ function_requires< boost::detail::multi_array::ConstMultiArrayConcept<
+ ConstMultiArray, NumDims> >();
+
+ // make sure the dimensions agree
+ assert(other.num_dimensions() == this->num_dimensions());
+ assert(std::equal(other.shape(),other.shape()+this->num_dimensions(),
+ this->shape()));
+ // iterator-based copy
+ std::copy(other.begin(),other.end(),begin());
+ return *this;
+ }
+
+
+ sub_array& operator=(const sub_array& other) {
+ if (&other != this) {
+ // make sure the dimensions agree
+ assert(other.num_dimensions() == this->num_dimensions());
+ assert(std::equal(other.shape(),other.shape()+this->num_dimensions(),
+ this->shape()));
+ // iterator-based copy
+ std::copy(other.begin(),other.end(),begin());
+ }
+ return *this;
+ }
+
+ T* origin() { return this->base_; }
+ const T* origin() const { return this->base_; }
+
+ reference operator[](index idx) {
+ return super_type::access(boost::type<reference>(),
+ idx,this->base_,this->shape(),this->strides(),
+ this->index_bases());
+ }
+
+ // see generate_array_view in base.hpp
+#if !defined(BOOST_MSVC) || BOOST_MSVC > 1300
+ template <int NDims>
+#else
+ template <int NumDims, int NDims> // else ICE
+#endif // BOOST_MSVC
+ typename array_view<NDims>::type
+ operator[](const boost::detail::multi_array::
+ index_gen<NumDims,NDims>& indices) {
+ typedef typename array_view<NDims>::type return_type;
+ return
+ super_type::generate_array_view(boost::type<return_type>(),
+ indices,
+ this->shape(),
+ this->strides(),
+ this->index_bases(),
+ origin());
+ }
+
+ template <class IndexList>
+ element& operator()(const IndexList& indices) {
+ boost::function_requires<
+ detail::multi_array::CollectionConcept<IndexList> >();
+ return super_type::access_element(boost::type<element&>(),
+ indices,origin(),
+ this->shape(),this->strides(),
+ this->index_bases());
+ }
+
+ iterator begin() {
+ return iterator(*this->index_bases(),origin(),
+ this->shape(),this->strides(),this->index_bases());
+ }
+
+ iterator end() {
+ return iterator(*this->index_bases()+(index)*this->shape(),origin(),
+ this->shape(),this->strides(),this->index_bases());
+ }
+
+ // RG - rbegin() and rend() written naively to thwart MSVC ICE.
+ reverse_iterator rbegin() {
+ reverse_iterator ri(end());
+ return ri;
+ }
+
+ reverse_iterator rend() {
+ reverse_iterator ri(begin());
+ return ri;
+ }
+
+ //
+ // proxies
+ //
+
+ template <class IndexList>
+ const element& operator()(const IndexList& indices) const {
+ boost::function_requires<
+ detail::multi_array::CollectionConcept<IndexList> >();
+ return super_type::operator()(indices);
+ }
+
+ const_reference operator[](index idx) const {
+ return super_type::operator[](idx);
+ }
+
+ // see generate_array_view in base.hpp
+#if !defined(BOOST_MSVC) || BOOST_MSVC > 1300
+ template <int NDims>
+#else
+ template <int NumDims, int NDims> // else ICE
+#endif // BOOST_MSVC
+ typename const_array_view<NDims>::type
+ operator[](const boost::detail::multi_array::
+ index_gen<NumDims,NDims>& indices)
+ const {
+ return super_type::operator[](indices);
+ }
+
+ const_iterator begin() const {
+ return super_type::begin();
+ }
+
+ const_iterator end() const {
+ return super_type::end();
+ }
+
+ const_reverse_iterator rbegin() const {
+ return super_type::rbegin();
+ }
+
+ const_reverse_iterator rend() const {
+ return super_type::rend();
+ }
+
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+private:
+ template <typename,std::size_t> friend class value_accessor_n;
+#else
+public: // should be private
+#endif
+
+ sub_array (T* base,
+ const size_type* extents,
+ const index* strides,
+ const index* index_base) :
+ super_type(base,extents,strides,index_base) {
+ }
+
+};
+
+} // namespace multi_array
+} // namespace detail
+//
+// traits classes to get sub_array types
+//
+template <typename Array, int N>
+class subarray_gen {
+ typedef typename Array::element element;
+public:
+ typedef boost::detail::multi_array::sub_array<element,N> type;
+};
+
+template <typename Array, int N>
+class const_subarray_gen {
+ typedef typename Array::element element;
+public:
+ typedef boost::detail::multi_array::const_sub_array<element,N> type;
+};
+} // namespace boost
+
+#endif // SUBARRAY_RG071801_HPP
diff --git a/boost/boost/multi_array/types.hpp b/boost/boost/multi_array/types.hpp
new file mode 100644
index 00000000000..5ef173b6233
--- /dev/null
+++ b/boost/boost/multi_array/types.hpp
@@ -0,0 +1,38 @@
+// Copyright 2002 The Trustees of Indiana University.
+
+// Use, modification and distribution is 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)
+
+// Boost.MultiArray Library
+// Authors: Ronald Garcia
+// Jeremy Siek
+// Andrew Lumsdaine
+// See http://www.boost.org/libs/multi_array for documentation.
+
+
+#ifndef BOOST_MULTI_ARRAY_TYPES_RG071801_HPP
+#define BOOST_MULTI_ARRAY_TYPES_RG071801_HPP
+
+//
+// types.hpp - supply types that are needed by several headers
+//
+#include "boost/config.hpp"
+#include <cstddef>
+
+namespace boost {
+namespace detail {
+namespace multi_array{
+
+// needed typedefs
+typedef std::size_t size_type;
+typedef std::ptrdiff_t index;
+
+} // namespace multi_array
+} // namespace detail
+} // namespace boost
+
+
+
+
+#endif // BOOST_MULTI_ARRAY_TYPES_RG071801_HPP
diff --git a/boost/boost/multi_array/view.hpp b/boost/boost/multi_array/view.hpp
new file mode 100644
index 00000000000..067fb020986
--- /dev/null
+++ b/boost/boost/multi_array/view.hpp
@@ -0,0 +1,474 @@
+// Copyright 2002 The Trustees of Indiana University.
+
+// Use, modification and distribution is 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)
+
+// Boost.MultiArray Library
+// Authors: Ronald Garcia
+// Jeremy Siek
+// Andrew Lumsdaine
+// See http://www.boost.org/libs/multi_array for documentation.
+
+#ifndef BOOST_MULTI_ARRAY_VIEW_RG071301_HPP
+#define BOOST_MULTI_ARRAY_VIEW_RG071301_HPP
+
+//
+// view.hpp - code for creating "views" of array data.
+//
+
+#include "boost/multi_array/base.hpp"
+#include "boost/multi_array/concept_checks.hpp"
+#include "boost/multi_array/iterator.hpp"
+#include "boost/multi_array/storage_order.hpp"
+#include "boost/multi_array/subarray.hpp"
+#include "boost/multi_array/algorithm.hpp"
+#include "boost/type_traits/is_integral.hpp"
+#include "boost/array.hpp"
+#include "boost/limits.hpp"
+#include <algorithm>
+#include <cstddef>
+#include <functional>
+#include <numeric>
+
+namespace boost {
+namespace detail {
+namespace multi_array {
+
+// TPtr = const T* defaulted in base.hpp
+template <typename T, std::size_t NumDims, typename TPtr>
+class const_multi_array_view :
+ public boost::detail::multi_array::multi_array_impl_base<T,NumDims>
+{
+ typedef boost::detail::multi_array::multi_array_impl_base<T,NumDims> super_type;
+public:
+ typedef typename super_type::value_type value_type;
+ typedef typename super_type::const_reference const_reference;
+ typedef typename super_type::const_iterator const_iterator;
+ typedef typename super_type::const_reverse_iterator const_reverse_iterator;
+ typedef typename super_type::element element;
+ typedef typename super_type::size_type size_type;
+ typedef typename super_type::difference_type difference_type;
+ typedef typename super_type::index index;
+ typedef typename super_type::extent_range extent_range;
+
+ // template typedefs
+ template <std::size_t NDims>
+ struct const_array_view {
+ typedef boost::detail::multi_array::const_multi_array_view<T,NDims> type;
+ };
+
+ template <std::size_t NDims>
+ struct array_view {
+ typedef boost::detail::multi_array::multi_array_view<T,NDims> type;
+ };
+
+ template <typename OPtr>
+ const_multi_array_view(const
+ const_multi_array_view<T,NumDims,OPtr>& other) :
+ base_(other.base_), origin_offset_(other.origin_offset_),
+ num_elements_(other.num_elements_), extent_list_(other.extent_list_),
+ stride_list_(other.stride_list_), index_base_list_(other.index_base_list_)
+ { }
+
+
+ template <class BaseList>
+#ifdef BOOST_NO_SFINAE
+ void
+#else
+ typename
+ disable_if<typename boost::is_integral<BaseList>::type,void >::type
+#endif
+ reindex(const BaseList& values) {
+ boost::function_requires<
+ detail::multi_array::CollectionConcept<BaseList> >();
+ boost::detail::multi_array::
+ copy_n(values.begin(),num_dimensions(),index_base_list_.begin());
+ origin_offset_ =
+ this->calculate_indexing_offset(stride_list_,index_base_list_);
+ }
+
+ void reindex(index value) {
+ index_base_list_.assign(value);
+ origin_offset_ =
+ this->calculate_indexing_offset(stride_list_,index_base_list_);
+ }
+
+ size_type num_dimensions() const { return NumDims; }
+
+ size_type size() const { return extent_list_.front(); }
+ size_type max_size() const { return num_elements(); }
+ bool empty() const { return size() == 0; }
+
+ const size_type* shape() const {
+ return extent_list_.data();
+ }
+
+ const index* strides() const {
+ return stride_list_.data();
+ }
+
+ const T* origin() const { return base_+origin_offset_; }
+
+ size_type num_elements() const { return num_elements_; }
+
+ const index* index_bases() const {
+ return index_base_list_.data();
+ }
+
+ template <typename IndexList>
+ const element& operator()(IndexList indices) const {
+ boost::function_requires<
+ detail::multi_array::CollectionConcept<IndexList> >();
+ return super_type::access_element(boost::type<const element&>(),
+ indices,origin(),
+ shape(),strides(),index_bases());
+ }
+
+ // Only allow const element access
+ const_reference operator[](index idx) const {
+ return super_type::access(boost::type<const_reference>(),
+ idx,origin(),
+ shape(),strides(),
+ index_bases());
+ }
+
+ // see generate_array_view in base.hpp
+#if !defined(BOOST_MSVC) || BOOST_MSVC > 1300
+ template <int NDims>
+#else
+ template <int NumDims, int NDims> // else ICE
+#endif // BOOST_MSVC
+ typename const_array_view<NDims>::type
+ operator[](const boost::detail::multi_array::
+ index_gen<NumDims,NDims>& indices)
+ const {
+ typedef typename const_array_view<NDims>::type return_type;
+ return
+ super_type::generate_array_view(boost::type<return_type>(),
+ indices,
+ shape(),
+ strides(),
+ index_bases(),
+ origin());
+ }
+ const_iterator begin() const {
+ return const_iterator(*index_bases(),origin(),
+ shape(),strides(),index_bases());
+ }
+
+ const_iterator end() const {
+ return const_iterator(*index_bases()+(index)*shape(),origin(),
+ shape(),strides(),index_bases());
+ }
+
+ const_reverse_iterator rbegin() const {
+ return const_reverse_iterator(end());
+ }
+
+ const_reverse_iterator rend() const {
+ return const_reverse_iterator(begin());
+ }
+
+
+ template <typename OPtr>
+ bool operator==(const
+ const_multi_array_view<T,NumDims,OPtr>& rhs)
+ const {
+ if(std::equal(extent_list_.begin(),
+ extent_list_.end(),
+ rhs.extent_list_.begin()))
+ return std::equal(begin(),end(),rhs.begin());
+ else return false;
+ }
+
+ template <typename OPtr>
+ bool operator<(const
+ const_multi_array_view<T,NumDims,OPtr>& rhs)
+ const {
+ return std::lexicographical_compare(begin(),end(),rhs.begin(),rhs.end());
+ }
+
+ template <typename OPtr>
+ bool operator!=(const
+ const_multi_array_view<T,NumDims,OPtr>& rhs)
+ const {
+ return !(*this == rhs);
+ }
+
+ template <typename OPtr>
+ bool operator>(const
+ const_multi_array_view<T,NumDims,OPtr>& rhs)
+ const {
+ return rhs < *this;
+ }
+
+ template <typename OPtr>
+ bool operator<=(const
+ const_multi_array_view<T,NumDims,OPtr>& rhs)
+ const {
+ return !(*this > rhs);
+ }
+
+ template <typename OPtr>
+ bool operator>=(const
+ const_multi_array_view<T,NumDims,OPtr>& rhs)
+ const {
+ return !(*this < rhs);
+ }
+
+
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+protected:
+ template <typename,std::size_t> friend class multi_array_impl_base;
+ template <typename,std::size_t,typename> friend class const_multi_array_view;
+#else
+public: // should be protected
+#endif
+
+ // This constructor is used by multi_array_impl_base::generate_array_view
+ // to create strides
+ template <typename ExtentList, typename Index>
+ explicit const_multi_array_view(TPtr base,
+ const ExtentList& extents,
+ const boost::array<Index,NumDims>& strides):
+ base_(base), origin_offset_(0) {
+
+ index_base_list_.assign(0);
+
+ // Get the extents and strides
+ boost::detail::multi_array::
+ copy_n(extents.begin(),NumDims,extent_list_.begin());
+ boost::detail::multi_array::
+ copy_n(strides.begin(),NumDims,stride_list_.begin());
+
+ // Calculate the array size
+ num_elements_ = std::accumulate(extent_list_.begin(),extent_list_.end(),
+ size_type(1),std::multiplies<size_type>());
+#if 0
+ assert(num_elements_ != 0);
+#endif
+ }
+
+ typedef boost::array<size_type,NumDims> size_list;
+ typedef boost::array<index,NumDims> index_list;
+
+ TPtr base_;
+ index origin_offset_;
+ size_type num_elements_;
+ size_list extent_list_;
+ index_list stride_list_;
+ index_list index_base_list_;
+
+private:
+ // const_multi_array_view cannot be assigned to (no deep copies!)
+ const_multi_array_view& operator=(const const_multi_array_view& other);
+};
+
+
+template <typename T, std::size_t NumDims>
+class multi_array_view :
+ public const_multi_array_view<T,NumDims,T*>
+{
+ typedef const_multi_array_view<T,NumDims,T*> super_type;
+public:
+ typedef typename super_type::value_type value_type;
+ typedef typename super_type::reference reference;
+ typedef typename super_type::iterator iterator;
+ typedef typename super_type::reverse_iterator reverse_iterator;
+ typedef typename super_type::const_reference const_reference;
+ typedef typename super_type::const_iterator const_iterator;
+ typedef typename super_type::const_reverse_iterator const_reverse_iterator;
+ typedef typename super_type::element element;
+ typedef typename super_type::size_type size_type;
+ typedef typename super_type::difference_type difference_type;
+ typedef typename super_type::index index;
+ typedef typename super_type::extent_range extent_range;
+
+ // template typedefs
+ template <std::size_t NDims>
+ struct const_array_view {
+ typedef boost::detail::multi_array::const_multi_array_view<T,NDims> type;
+ };
+
+ template <std::size_t NDims>
+ struct array_view {
+ typedef boost::detail::multi_array::multi_array_view<T,NDims> type;
+ };
+
+ // Assignment from other ConstMultiArray types.
+ template <typename ConstMultiArray>
+ multi_array_view& operator=(const ConstMultiArray& other) {
+ function_requires<
+ boost::detail::multi_array::
+ ConstMultiArrayConcept<ConstMultiArray,NumDims> >();
+
+ // make sure the dimensions agree
+ assert(other.num_dimensions() == this->num_dimensions());
+ assert(std::equal(other.shape(),other.shape()+this->num_dimensions(),
+ this->shape()));
+ // iterator-based copy
+ std::copy(other.begin(),other.end(),begin());
+ return *this;
+ }
+
+
+ multi_array_view& operator=(const multi_array_view& other) {
+ if (&other != this) {
+ // make sure the dimensions agree
+ assert(other.num_dimensions() == this->num_dimensions());
+ assert(std::equal(other.shape(),other.shape()+this->num_dimensions(),
+ this->shape()));
+ // iterator-based copy
+ std::copy(other.begin(),other.end(),begin());
+ }
+ return *this;
+ }
+
+ element* origin() { return this->base_+this->origin_offset_; }
+
+ template <class IndexList>
+ element& operator()(const IndexList& indices) {
+ boost::function_requires<
+ detail::multi_array::CollectionConcept<IndexList> >();
+ return super_type::access_element(boost::type<element&>(),
+ indices,origin(),
+ this->shape(),this->strides(),
+ this->index_bases());
+ }
+
+
+ reference operator[](index idx) {
+ return super_type::access(boost::type<reference>(),
+ idx,origin(),
+ this->shape(),this->strides(),
+ this->index_bases());
+ }
+
+
+ // see generate_array_view in base.hpp
+#if !defined(BOOST_MSVC) || BOOST_MSVC > 1300
+ template <int NDims>
+#else
+ template <int NumDims, int NDims> // else ICE
+#endif // BOOST_MSVC
+ typename array_view<NDims>::type
+ operator[](const boost::detail::multi_array::
+ index_gen<NumDims,NDims>& indices) {
+ typedef typename array_view<NDims>::type return_type;
+ return
+ super_type::generate_array_view(boost::type<return_type>(),
+ indices,
+ this->shape(),
+ this->strides(),
+ this->index_bases(),
+ origin());
+ }
+
+
+ iterator begin() {
+ return iterator(*this->index_bases(),origin(),
+ this->shape(),this->strides(),
+ this->index_bases());
+ }
+
+ iterator end() {
+ return iterator(*this->index_bases()+(index)*this->shape(),origin(),
+ this->shape(),this->strides(),
+ this->index_bases());
+ }
+
+ reverse_iterator rbegin() {
+ return reverse_iterator(end());
+ }
+
+ reverse_iterator rend() {
+ return reverse_iterator(begin());
+ }
+
+ // Using declarations don't seem to work for g++
+ // These are the proxies to work around this.
+
+ const element* origin() const { return super_type::origin(); }
+
+ template <class IndexList>
+ const element& operator()(const IndexList& indices) const {
+ boost::function_requires<
+ detail::multi_array::CollectionConcept<IndexList> >();
+ return super_type::operator()(indices);
+ }
+
+ const_reference operator[](index idx) const {
+ return super_type::operator[](idx);
+ }
+
+ // see generate_array_view in base.hpp
+#if !defined(BOOST_MSVC) || BOOST_MSVC > 1300
+ template <int NDims>
+#else
+ template <int NumDims, int NDims> // else ICE
+#endif // BOOST_MSVC
+ typename const_array_view<NDims>::type
+ operator[](const boost::detail::multi_array::
+ index_gen<NumDims,NDims>& indices)
+ const {
+ return super_type::operator[](indices);
+ }
+
+ const_iterator begin() const {
+ return super_type::begin();
+ }
+
+ const_iterator end() const {
+ return super_type::end();
+ }
+
+ const_reverse_iterator rbegin() const {
+ return super_type::rbegin();
+ }
+
+ const_reverse_iterator rend() const {
+ return super_type::rend();
+ }
+
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+private:
+ template <typename,std::size_t> friend class multi_array_impl_base;
+#else
+public: // should be private
+#endif
+
+ // constructor used by multi_array_impl_base::generate_array_view to
+ // generate array views
+ template <typename ExtentList, typename Index>
+ explicit multi_array_view(T* base,
+ const ExtentList& extents,
+ const boost::array<Index,NumDims>& strides) :
+ super_type(base,extents,strides) { }
+
+};
+
+} // namespace multi_array
+} // namespace detail
+
+//
+// traits classes to get array_view types
+//
+template <typename Array, int N>
+class array_view_gen {
+ typedef typename Array::element element;
+public:
+ typedef boost::detail::multi_array::multi_array_view<element,N> type;
+};
+
+template <typename Array, int N>
+class const_array_view_gen {
+ typedef typename Array::element element;
+public:
+ typedef boost::detail::multi_array::const_multi_array_view<element,N> type;
+};
+
+} // namespace boost
+
+#endif // BOOST_MULTI_ARRAY_VIEW_RG071301_HPP
+
diff --git a/boost/boost/multi_index/composite_key.hpp b/boost/boost/multi_index/composite_key.hpp
new file mode 100644
index 00000000000..56f6d1b5821
--- /dev/null
+++ b/boost/boost/multi_index/composite_key.hpp
@@ -0,0 +1,1315 @@
+/* Copyright 2003-2006 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_COMPOSITE_KEY_HPP
+#define BOOST_MULTI_INDEX_COMPOSITE_KEY_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/multi_index/detail/access_specifier.hpp>
+#include <boost/multi_index/detail/prevent_eti.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/mpl/aux_/nttp_decl.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/control/expr_if.hpp>
+#include <boost/preprocessor/list/at.hpp>
+#include <boost/preprocessor/repetition/enum.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/tuple/tuple.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <functional>
+
+#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
+#include <boost/ref.hpp>
+#endif
+
+#if !defined(BOOST_NO_SFINAE)
+#include <boost/type_traits/is_convertible.hpp>
+#endif
+
+/* A composite key stores n key extractors and "computes" the
+ * result on a given value as a packed reference to the value and
+ * the composite key itself. Actual invocations to the component
+ * key extractors are lazily performed when executing an operation
+ * on composite_key results (equality, comparison, hashing.)
+ * As the other key extractors in Boost.MultiIndex, composite_key<T,...>
+ * is overloaded to work on chained pointers to T and reference_wrappers
+ * of T.
+ */
+
+/* This user_definable macro limits the number of elements of a composite
+ * key; useful for shortening resulting symbol names (MSVC++ 6.0, for
+ * instance has problems coping with very long symbol names.)
+ * NB: This cannot exceed the maximum number of arguments of
+ * boost::tuple. In Boost 1.32, the limit is 10.
+ */
+
+#if !defined(BOOST_MULTI_INDEX_LIMIT_COMPOSITE_KEY_SIZE)
+#if defined(BOOST_MSVC)&&(BOOST_MSVC<1300)
+#define BOOST_MULTI_INDEX_LIMIT_COMPOSITE_KEY_SIZE 5
+#else
+#define BOOST_MULTI_INDEX_LIMIT_COMPOSITE_KEY_SIZE 10
+#endif
+#endif
+
+/* maximum number of key extractors in a composite key */
+
+#if BOOST_MULTI_INDEX_LIMIT_COMPOSITE_KEY_SIZE<10 /* max length of a tuple */
+#define BOOST_MULTI_INDEX_COMPOSITE_KEY_SIZE \
+ BOOST_MULTI_INDEX_LIMIT_COMPOSITE_KEY_SIZE
+#else
+#define BOOST_MULTI_INDEX_COMPOSITE_KEY_SIZE 10
+#endif
+
+/* BOOST_PP_ENUM of BOOST_MULTI_INDEX_COMPOSITE_KEY_SIZE elements */
+
+#define BOOST_MULTI_INDEX_CK_ENUM(macro,data) \
+ BOOST_PP_ENUM(BOOST_MULTI_INDEX_COMPOSITE_KEY_SIZE,macro,data)
+
+/* BOOST_PP_ENUM_PARAMS of BOOST_MULTI_INDEX_COMPOSITE_KEY_SIZE elements */
+
+#define BOOST_MULTI_INDEX_CK_ENUM_PARAMS(param) \
+ BOOST_PP_ENUM_PARAMS(BOOST_MULTI_INDEX_COMPOSITE_KEY_SIZE,param)
+
+/* if n==0 -> text0
+ * otherwise -> textn=tuples::null_type
+ */
+
+#define BOOST_MULTI_INDEX_CK_TEMPLATE_PARM(z,n,text) \
+ typename BOOST_PP_CAT(text,n) BOOST_PP_EXPR_IF(n,=tuples::null_type)
+
+/* const textn& kn=textn() */
+
+#define BOOST_MULTI_INDEX_CK_CTOR_ARG(z,n,text) \
+ const BOOST_PP_CAT(text,n)& BOOST_PP_CAT(k,n) = BOOST_PP_CAT(text,n)()
+
+/* typename list(0)<list(1),n>::type */
+
+#define BOOST_MULTI_INDEX_CK_APPLY_METAFUNCTION_N(z,n,list) \
+ BOOST_DEDUCED_TYPENAME BOOST_PP_LIST_AT(list,0)< \
+ BOOST_PP_LIST_AT(list,1),n \
+ >::type
+
+namespace boost{
+
+template<class T> class reference_wrapper; /* fwd decl. */
+template<class T> struct hash; /* fwd decl. */
+
+namespace multi_index{
+
+namespace detail{
+
+/* n-th key extractor of a composite key */
+
+template<typename CompositeKey,BOOST_MPL_AUX_NTTP_DECL(int, N)>
+struct nth_key_from_value
+{
+ typedef typename CompositeKey::key_extractor_tuple key_extractor_tuple;
+ typedef typename prevent_eti<
+ tuples::element<N,key_extractor_tuple>,
+ typename mpl::eval_if_c<
+ N<tuples::length<key_extractor_tuple>::value,
+ tuples::element<N,key_extractor_tuple>,
+ mpl::identity<tuples::null_type>
+ >::type
+ >::type type;
+};
+
+/* nth_composite_key_##name<CompositeKey,N>::type yields
+ * functor<nth_key_from_value<CompositeKey,N> >, or tuples::null_type
+ * if N exceeds the length of the composite key.
+ */
+
+#define BOOST_MULTI_INDEX_CK_NTH_COMPOSITE_KEY_FUNCTOR(name,functor) \
+template<typename KeyFromValue> \
+struct BOOST_PP_CAT(key_,name) \
+{ \
+ typedef functor<typename KeyFromValue::result_type> type; \
+}; \
+ \
+template<> \
+struct BOOST_PP_CAT(key_,name)<tuples::null_type> \
+{ \
+ typedef tuples::null_type type; \
+}; \
+ \
+template<typename CompositeKey,BOOST_MPL_AUX_NTTP_DECL(int, N)> \
+struct BOOST_PP_CAT(nth_composite_key_,name) \
+{ \
+ typedef typename nth_key_from_value<CompositeKey,N>::type key_from_value; \
+ typedef typename BOOST_PP_CAT(key_,name)<key_from_value>::type type; \
+};
+
+/* nth_composite_key_equal_to
+ * nth_composite_key_less
+ * nth_composite_key_greater
+ * nth_composite_key_hash
+ */
+
+BOOST_MULTI_INDEX_CK_NTH_COMPOSITE_KEY_FUNCTOR(equal_to,std::equal_to)
+BOOST_MULTI_INDEX_CK_NTH_COMPOSITE_KEY_FUNCTOR(less,std::less)
+BOOST_MULTI_INDEX_CK_NTH_COMPOSITE_KEY_FUNCTOR(greater,std::greater)
+BOOST_MULTI_INDEX_CK_NTH_COMPOSITE_KEY_FUNCTOR(hash,boost::hash)
+
+/* used for defining equality and comparison ops of composite_key_result */
+
+#define BOOST_MULTI_INDEX_CK_IDENTITY_ENUM_MACRO(z,n,text) text
+
+struct generic_operator_equal
+{
+ template<typename T,typename Q>
+ bool operator()(const T& x,const Q& y)const{return x==y;}
+};
+
+typedef tuple<
+ BOOST_MULTI_INDEX_CK_ENUM(
+ BOOST_MULTI_INDEX_CK_IDENTITY_ENUM_MACRO,
+ detail::generic_operator_equal)> generic_operator_equal_tuple;
+
+struct generic_operator_less
+{
+ template<typename T,typename Q>
+ bool operator()(const T& x,const Q& y)const{return x<y;}
+};
+
+typedef tuple<
+ BOOST_MULTI_INDEX_CK_ENUM(
+ BOOST_MULTI_INDEX_CK_IDENTITY_ENUM_MACRO,
+ detail::generic_operator_less)> generic_operator_less_tuple;
+
+/* Metaprogramming machinery for implementing equality, comparison and
+ * hashing operations of composite_key_result.
+ *
+ * equal_* checks for equality between composite_key_results and
+ * between those and tuples, accepting a tuple of basic equality functors.
+ * compare_* does lexicographical comparison.
+ * hash_* computes a combination of elementwise hash values.
+ */
+
+template
+<
+ typename KeyCons1,typename Value1,
+ typename KeyCons2, typename Value2,
+ typename EqualCons
+>
+struct equal_ckey_ckey; /* fwd decl. */
+
+template
+<
+ typename KeyCons1,typename Value1,
+ typename KeyCons2, typename Value2,
+ typename EqualCons
+>
+struct equal_ckey_ckey_terminal
+{
+ static bool compare(
+ const KeyCons1&,const Value1&,
+ const KeyCons2&,const Value2&,
+ const EqualCons&)
+ {
+ return true;
+ }
+};
+
+template
+<
+ typename KeyCons1,typename Value1,
+ typename KeyCons2, typename Value2,
+ typename EqualCons
+>
+struct equal_ckey_ckey_normal
+{
+ static bool compare(
+ const KeyCons1& c0,const Value1& v0,
+ const KeyCons2& c1,const Value2& v1,
+ const EqualCons& eq)
+ {
+ if(!eq.get_head()(c0.get_head()(v0),c1.get_head()(v1)))return false;
+ return equal_ckey_ckey<
+ BOOST_DEDUCED_TYPENAME KeyCons1::tail_type,Value1,
+ BOOST_DEDUCED_TYPENAME KeyCons2::tail_type,Value2,
+ BOOST_DEDUCED_TYPENAME EqualCons::tail_type
+ >::compare(c0.get_tail(),v0,c1.get_tail(),v1,eq.get_tail());
+ }
+};
+
+template
+<
+ typename KeyCons1,typename Value1,
+ typename KeyCons2, typename Value2,
+ typename EqualCons
+>
+struct equal_ckey_ckey:
+ mpl::if_<
+ mpl::or_<
+ is_same<KeyCons1,tuples::null_type>,
+ is_same<KeyCons2,tuples::null_type>
+ >,
+ equal_ckey_ckey_terminal<KeyCons1,Value1,KeyCons2,Value2,EqualCons>,
+ equal_ckey_ckey_normal<KeyCons1,Value1,KeyCons2,Value2,EqualCons>
+ >::type
+{
+};
+
+template
+<
+ typename KeyCons,typename Value,
+ typename ValCons,typename EqualCons
+>
+struct equal_ckey_cval; /* fwd decl. */
+
+template
+<
+ typename KeyCons,typename Value,
+ typename ValCons,typename EqualCons
+>
+struct equal_ckey_cval_terminal
+{
+ static bool compare(
+ const KeyCons&,const Value&,const ValCons&,const EqualCons&)
+ {
+ return true;
+ }
+
+ static bool compare(
+ const ValCons&,const KeyCons&,const Value&,const EqualCons&)
+ {
+ return true;
+ }
+};
+
+template
+<
+ typename KeyCons,typename Value,
+ typename ValCons,typename EqualCons
+>
+struct equal_ckey_cval_normal
+{
+ static bool compare(
+ const KeyCons& c,const Value& v,const ValCons& vc,
+ const EqualCons& eq)
+ {
+ if(!eq.get_head()(c.get_head()(v),vc.get_head()))return false;
+ return equal_ckey_cval<
+ BOOST_DEDUCED_TYPENAME KeyCons::tail_type,Value,
+ BOOST_DEDUCED_TYPENAME ValCons::tail_type,
+ BOOST_DEDUCED_TYPENAME EqualCons::tail_type
+ >::compare(c.get_tail(),v,vc.get_tail(),eq.get_tail());
+ }
+
+ static bool compare(
+ const ValCons& vc,const KeyCons& c,const Value& v,
+ const EqualCons& eq)
+ {
+ if(!eq.get_head()(vc.get_head(),c.get_head()(v)))return false;
+ return equal_ckey_cval<
+ BOOST_DEDUCED_TYPENAME KeyCons::tail_type,Value,
+ BOOST_DEDUCED_TYPENAME ValCons::tail_type,
+ BOOST_DEDUCED_TYPENAME EqualCons::tail_type
+ >::compare(vc.get_tail(),c.get_tail(),v,eq.get_tail());
+ }
+};
+
+template
+<
+ typename KeyCons,typename Value,
+ typename ValCons,typename EqualCons
+>
+struct equal_ckey_cval:
+ mpl::if_<
+ mpl::or_<
+ is_same<KeyCons,tuples::null_type>,
+ is_same<ValCons,tuples::null_type>
+ >,
+ equal_ckey_cval_terminal<KeyCons,Value,ValCons,EqualCons>,
+ equal_ckey_cval_normal<KeyCons,Value,ValCons,EqualCons>
+ >::type
+{
+};
+
+template
+<
+ typename KeyCons1,typename Value1,
+ typename KeyCons2, typename Value2,
+ typename CompareCons
+>
+struct compare_ckey_ckey; /* fwd decl. */
+
+template
+<
+ typename KeyCons1,typename Value1,
+ typename KeyCons2, typename Value2,
+ typename CompareCons
+>
+struct compare_ckey_ckey_terminal
+{
+ static bool compare(
+ const KeyCons1&,const Value1&,
+ const KeyCons2&,const Value2&,
+ const CompareCons&)
+ {
+ return false;
+ }
+};
+
+template
+<
+ typename KeyCons1,typename Value1,
+ typename KeyCons2, typename Value2,
+ typename CompareCons
+>
+struct compare_ckey_ckey_normal
+{
+ static bool compare(
+ const KeyCons1& c0,const Value1& v0,
+ const KeyCons2& c1,const Value2& v1,
+ const CompareCons& comp)
+ {
+ if(comp.get_head()(c0.get_head()(v0),c1.get_head()(v1)))return true;
+ if(comp.get_head()(c1.get_head()(v1),c0.get_head()(v0)))return false;
+ return compare_ckey_ckey<
+ BOOST_DEDUCED_TYPENAME KeyCons1::tail_type,Value1,
+ BOOST_DEDUCED_TYPENAME KeyCons2::tail_type,Value2,
+ BOOST_DEDUCED_TYPENAME CompareCons::tail_type
+ >::compare(c0.get_tail(),v0,c1.get_tail(),v1,comp.get_tail());
+ }
+};
+
+template
+<
+ typename KeyCons1,typename Value1,
+ typename KeyCons2, typename Value2,
+ typename CompareCons
+>
+struct compare_ckey_ckey:
+ mpl::if_<
+ mpl::or_<
+ is_same<KeyCons1,tuples::null_type>,
+ is_same<KeyCons2,tuples::null_type>
+ >,
+ compare_ckey_ckey_terminal<KeyCons1,Value1,KeyCons2,Value2,CompareCons>,
+ compare_ckey_ckey_normal<KeyCons1,Value1,KeyCons2,Value2,CompareCons>
+ >::type
+{
+};
+
+template
+<
+ typename KeyCons,typename Value,
+ typename ValCons,typename CompareCons
+>
+struct compare_ckey_cval; /* fwd decl. */
+
+template
+<
+ typename KeyCons,typename Value,
+ typename ValCons,typename CompareCons
+>
+struct compare_ckey_cval_terminal
+{
+ static bool compare(
+ const KeyCons&,const Value&,const ValCons&,const CompareCons&)
+ {
+ return false;
+ }
+
+ static bool compare(
+ const ValCons&,const KeyCons&,const Value&,const CompareCons&)
+ {
+ return false;
+ }
+};
+
+template
+<
+ typename KeyCons,typename Value,
+ typename ValCons,typename CompareCons
+>
+struct compare_ckey_cval_normal
+{
+ static bool compare(
+ const KeyCons& c,const Value& v,const ValCons& vc,
+ const CompareCons& comp)
+ {
+ if(comp.get_head()(c.get_head()(v),vc.get_head()))return true;
+ if(comp.get_head()(vc.get_head(),c.get_head()(v)))return false;
+ return compare_ckey_cval<
+ BOOST_DEDUCED_TYPENAME KeyCons::tail_type,Value,
+ BOOST_DEDUCED_TYPENAME ValCons::tail_type,
+ BOOST_DEDUCED_TYPENAME CompareCons::tail_type
+ >::compare(c.get_tail(),v,vc.get_tail(),comp.get_tail());
+ }
+
+ static bool compare(
+ const ValCons& vc,const KeyCons& c,const Value& v,
+ const CompareCons& comp)
+ {
+ if(comp.get_head()(vc.get_head(),c.get_head()(v)))return true;
+ if(comp.get_head()(c.get_head()(v),vc.get_head()))return false;
+ return compare_ckey_cval<
+ BOOST_DEDUCED_TYPENAME KeyCons::tail_type,Value,
+ BOOST_DEDUCED_TYPENAME ValCons::tail_type,
+ BOOST_DEDUCED_TYPENAME CompareCons::tail_type
+ >::compare(vc.get_tail(),c.get_tail(),v,comp.get_tail());
+ }
+};
+
+template
+<
+ typename KeyCons,typename Value,
+ typename ValCons,typename CompareCons
+>
+struct compare_ckey_cval:
+ mpl::if_<
+ mpl::or_<
+ is_same<KeyCons,tuples::null_type>,
+ is_same<ValCons,tuples::null_type>
+ >,
+ compare_ckey_cval_terminal<KeyCons,Value,ValCons,CompareCons>,
+ compare_ckey_cval_normal<KeyCons,Value,ValCons,CompareCons>
+ >::type
+{
+};
+
+template<typename KeyCons,typename Value,typename HashCons>
+struct hash_ckey; /* fwd decl. */
+
+template<typename KeyCons,typename Value,typename HashCons>
+struct hash_ckey_terminal
+{
+ static std::size_t hash(
+ const KeyCons&,const Value&,const HashCons&,std::size_t carry)
+ {
+ return carry;
+ }
+};
+
+template<typename KeyCons,typename Value,typename HashCons>
+struct hash_ckey_normal
+{
+ static std::size_t hash(
+ const KeyCons& c,const Value& v,const HashCons& h,std::size_t carry=0)
+ {
+ /* same hashing formula as boost::hash_combine */
+
+ carry^=h.get_head()(c.get_head()(v))+0x9e3779b9+(carry<<6)+(carry>>2);
+ return hash_ckey<
+ BOOST_DEDUCED_TYPENAME KeyCons::tail_type,Value,
+ BOOST_DEDUCED_TYPENAME HashCons::tail_type
+ >::hash(c.get_tail(),v,h.get_tail(),carry);
+ }
+};
+
+template<typename KeyCons,typename Value,typename HashCons>
+struct hash_ckey:
+ mpl::if_<
+ is_same<KeyCons,tuples::null_type>,
+ hash_ckey_terminal<KeyCons,Value,HashCons>,
+ hash_ckey_normal<KeyCons,Value,HashCons>
+ >::type
+{
+};
+
+template<typename ValCons,typename HashCons>
+struct hash_cval; /* fwd decl. */
+
+template<typename ValCons,typename HashCons>
+struct hash_cval_terminal
+{
+ static std::size_t hash(const ValCons&,const HashCons&,std::size_t carry)
+ {
+ return carry;
+ }
+};
+
+template<typename ValCons,typename HashCons>
+struct hash_cval_normal
+{
+ static std::size_t hash(
+ const ValCons& vc,const HashCons& h,std::size_t carry=0)
+ {
+ carry^=h.get_head()(vc.get_head())+0x9e3779b9+(carry<<6)+(carry>>2);
+ return hash_cval<
+ BOOST_DEDUCED_TYPENAME ValCons::tail_type,
+ BOOST_DEDUCED_TYPENAME HashCons::tail_type
+ >::hash(vc.get_tail(),h.get_tail(),carry);
+ }
+};
+
+template<typename ValCons,typename HashCons>
+struct hash_cval:
+ mpl::if_<
+ is_same<ValCons,tuples::null_type>,
+ hash_cval_terminal<ValCons,HashCons>,
+ hash_cval_normal<ValCons,HashCons>
+ >::type
+{
+};
+
+} /* namespace multi_index::detail */
+
+/* composite_key_result */
+
+template<typename CompositeKey>
+struct composite_key_result
+{
+ typedef CompositeKey composite_key_type;
+ typedef typename composite_key_type::value_type value_type;
+
+ composite_key_result(
+ const composite_key_type& composite_key_,const value_type& value_):
+ composite_key(composite_key_),value(value_)
+ {}
+
+ const composite_key_type& composite_key;
+ const value_type& value;
+};
+
+/* composite_key */
+
+/* NB. Some overloads of operator() have an extra dummy parameter int=0.
+ * This disambiguator serves several purposes:
+ * - Without it, MSVC++ 6.0 incorrectly regards some overloads as
+ * specializations of a previous member function template.
+ * - MSVC++ 6.0/7.0 seem to incorrectly treat some different memfuns
+ * as if they have the same signature.
+ * - If remove_const is broken due to lack of PTS, int=0 avoids the
+ * declaration of memfuns with identical signature.
+ */
+
+template<
+ typename Value,
+ BOOST_MULTI_INDEX_CK_ENUM(BOOST_MULTI_INDEX_CK_TEMPLATE_PARM,KeyFromValue)
+>
+struct composite_key:
+ private tuple<BOOST_MULTI_INDEX_CK_ENUM_PARAMS(KeyFromValue)>
+{
+private:
+ typedef tuple<BOOST_MULTI_INDEX_CK_ENUM_PARAMS(KeyFromValue)> super;
+
+public:
+ typedef super key_extractor_tuple;
+ typedef Value value_type;
+ typedef composite_key_result<composite_key> result_type;
+
+ composite_key(
+ BOOST_MULTI_INDEX_CK_ENUM(BOOST_MULTI_INDEX_CK_CTOR_ARG,KeyFromValue)):
+ super(BOOST_MULTI_INDEX_CK_ENUM_PARAMS(k))
+ {}
+
+ composite_key(const key_extractor_tuple& x):super(x){}
+
+ const key_extractor_tuple& key_extractors()const{return *this;}
+ key_extractor_tuple& key_extractors(){return *this;}
+
+ template<typename ChainedPtr>
+
+#if !defined(BOOST_NO_SFINAE)
+ typename disable_if<
+ is_convertible<const ChainedPtr&,const value_type&>,result_type>::type
+#else
+ result_type
+#endif
+
+ operator()(const ChainedPtr& x)const
+ {
+ return operator()(*x);
+ }
+
+ result_type operator()(const value_type& x)const
+ {
+ return result_type(*this,x);
+ }
+
+ result_type operator()(const reference_wrapper<const value_type>& x)const
+ {
+ return result_type(*this,x.get());
+ }
+
+ result_type operator()(const reference_wrapper<value_type>& x,int=0)const
+ {
+ return result_type(*this,x.get());
+ }
+};
+
+/* comparison operators */
+
+/* == */
+
+template<typename CompositeKey1,typename CompositeKey2>
+inline bool operator==(
+ const composite_key_result<CompositeKey1>& x,
+ const composite_key_result<CompositeKey2>& y)
+{
+ typedef typename CompositeKey1::key_extractor_tuple key_extractor_tuple1;
+ typedef typename CompositeKey1::value_type value_type1;
+ typedef typename CompositeKey2::key_extractor_tuple key_extractor_tuple2;
+ typedef typename CompositeKey2::value_type value_type2;
+
+ BOOST_STATIC_ASSERT(
+ tuples::length<key_extractor_tuple1>::value==
+ tuples::length<key_extractor_tuple2>::value);
+
+ return detail::equal_ckey_ckey<
+ key_extractor_tuple1,value_type1,
+ key_extractor_tuple2,value_type2,
+ detail::generic_operator_equal_tuple
+ >::compare(
+ x.composite_key.key_extractors(),x.value,
+ y.composite_key.key_extractors(),y.value,
+ detail::generic_operator_equal_tuple());
+}
+
+template<
+ typename CompositeKey,
+ BOOST_MULTI_INDEX_CK_ENUM_PARAMS(typename Value)
+>
+inline bool operator==(
+ const composite_key_result<CompositeKey>& x,
+ const tuple<BOOST_MULTI_INDEX_CK_ENUM_PARAMS(Value)>& y)
+{
+ typedef typename CompositeKey::key_extractor_tuple key_extractor_tuple;
+ typedef typename CompositeKey::value_type value_type;
+ typedef tuple<BOOST_MULTI_INDEX_CK_ENUM_PARAMS(Value)> key_tuple;
+
+ BOOST_STATIC_ASSERT(
+ tuples::length<key_extractor_tuple>::value==
+ tuples::length<key_tuple>::value);
+
+ return detail::equal_ckey_cval<
+ key_extractor_tuple,value_type,
+ key_tuple,detail::generic_operator_equal_tuple
+ >::compare(
+ x.composite_key.key_extractors(),x.value,
+ y,detail::generic_operator_equal_tuple());
+}
+
+template
+<
+ BOOST_MULTI_INDEX_CK_ENUM_PARAMS(typename Value),
+ typename CompositeKey
+>
+inline bool operator==(
+ const tuple<BOOST_MULTI_INDEX_CK_ENUM_PARAMS(Value)>& x,
+ const composite_key_result<CompositeKey>& y)
+{
+ typedef typename CompositeKey::key_extractor_tuple key_extractor_tuple;
+ typedef typename CompositeKey::value_type value_type;
+ typedef tuple<BOOST_MULTI_INDEX_CK_ENUM_PARAMS(Value)> key_tuple;
+
+ BOOST_STATIC_ASSERT(
+ tuples::length<key_extractor_tuple>::value==
+ tuples::length<key_tuple>::value);
+
+ return detail::equal_ckey_cval<
+ key_extractor_tuple,value_type,
+ key_tuple,detail::generic_operator_equal_tuple
+ >::compare(
+ x,y.composite_key.key_extractors(),
+ y.value,detail::generic_operator_equal_tuple());
+}
+
+/* < */
+
+template<typename CompositeKey1,typename CompositeKey2>
+inline bool operator<(
+ const composite_key_result<CompositeKey1>& x,
+ const composite_key_result<CompositeKey2>& y)
+{
+ typedef typename CompositeKey1::key_extractor_tuple key_extractor_tuple1;
+ typedef typename CompositeKey1::value_type value_type1;
+ typedef typename CompositeKey2::key_extractor_tuple key_extractor_tuple2;
+ typedef typename CompositeKey2::value_type value_type2;
+
+ return detail::compare_ckey_ckey<
+ key_extractor_tuple1,value_type1,
+ key_extractor_tuple2,value_type2,
+ detail::generic_operator_less_tuple
+ >::compare(
+ x.composite_key.key_extractors(),x.value,
+ y.composite_key.key_extractors(),y.value,
+ detail::generic_operator_less_tuple());
+}
+
+template
+<
+ typename CompositeKey,
+ BOOST_MULTI_INDEX_CK_ENUM_PARAMS(typename Value)
+>
+inline bool operator<(
+ const composite_key_result<CompositeKey>& x,
+ const tuple<BOOST_MULTI_INDEX_CK_ENUM_PARAMS(Value)>& y)
+{
+ typedef typename CompositeKey::key_extractor_tuple key_extractor_tuple;
+ typedef typename CompositeKey::value_type value_type;
+ typedef tuple<BOOST_MULTI_INDEX_CK_ENUM_PARAMS(Value)> key_tuple;
+
+ return detail::compare_ckey_cval<
+ key_extractor_tuple,value_type,
+ key_tuple,detail::generic_operator_less_tuple
+ >::compare(
+ x.composite_key.key_extractors(),x.value,
+ y,detail::generic_operator_less_tuple());
+}
+
+template
+<
+ BOOST_MULTI_INDEX_CK_ENUM_PARAMS(typename Value),
+ typename CompositeKey
+>
+inline bool operator<(
+ const tuple<BOOST_MULTI_INDEX_CK_ENUM_PARAMS(Value)>& x,
+ const composite_key_result<CompositeKey>& y)
+{
+ typedef typename CompositeKey::key_extractor_tuple key_extractor_tuple;
+ typedef typename CompositeKey::value_type value_type;
+ typedef tuple<BOOST_MULTI_INDEX_CK_ENUM_PARAMS(Value)> key_tuple;
+
+ return detail::compare_ckey_cval<
+ key_extractor_tuple,value_type,
+ key_tuple,detail::generic_operator_less_tuple
+ >::compare(
+ x,y.composite_key.key_extractors(),
+ y.value,detail::generic_operator_less_tuple());
+}
+
+/* rest of comparison operators */
+
+#define BOOST_MULTI_INDEX_CK_COMPLETE_COMP_OPS(t1,t2,a1,a2) \
+template<t1,t2> inline bool operator!=(const a1& x,const a2& y) \
+{ \
+ return !(x==y); \
+} \
+ \
+template<t1,t2> inline bool operator>(const a1& x,const a2& y) \
+{ \
+ return y<x; \
+} \
+ \
+template<t1,t2> inline bool operator>=(const a1& x,const a2& y) \
+{ \
+ return !(x<y); \
+} \
+ \
+template<t1,t2> inline bool operator<=(const a1& x,const a2& y) \
+{ \
+ return !(y<x); \
+}
+
+BOOST_MULTI_INDEX_CK_COMPLETE_COMP_OPS(
+ typename CompositeKey1,
+ typename CompositeKey2,
+ composite_key_result<CompositeKey1>,
+ composite_key_result<CompositeKey2>
+)
+
+BOOST_MULTI_INDEX_CK_COMPLETE_COMP_OPS(
+ typename CompositeKey,
+ BOOST_MULTI_INDEX_CK_ENUM_PARAMS(typename Value),
+ composite_key_result<CompositeKey>,
+ tuple<BOOST_MULTI_INDEX_CK_ENUM_PARAMS(Value)>
+)
+
+BOOST_MULTI_INDEX_CK_COMPLETE_COMP_OPS(
+ BOOST_MULTI_INDEX_CK_ENUM_PARAMS(typename Value),
+ typename CompositeKey,
+ tuple<BOOST_MULTI_INDEX_CK_ENUM_PARAMS(Value)>,
+ composite_key_result<CompositeKey>
+)
+
+/* composite_key_equal_to */
+
+template
+<
+ BOOST_MULTI_INDEX_CK_ENUM(BOOST_MULTI_INDEX_CK_TEMPLATE_PARM,Pred)
+>
+struct composite_key_equal_to:
+ private tuple<BOOST_MULTI_INDEX_CK_ENUM_PARAMS(Pred)>
+{
+private:
+ typedef tuple<BOOST_MULTI_INDEX_CK_ENUM_PARAMS(Pred)> super;
+
+public:
+ typedef super key_eq_tuple;
+
+ composite_key_equal_to(
+ BOOST_MULTI_INDEX_CK_ENUM(BOOST_MULTI_INDEX_CK_CTOR_ARG,Pred)):
+ super(BOOST_MULTI_INDEX_CK_ENUM_PARAMS(k))
+ {}
+
+ composite_key_equal_to(const key_eq_tuple& x):super(x){}
+
+ const key_eq_tuple& key_eqs()const{return *this;}
+ key_eq_tuple& key_eqs(){return *this;}
+
+ template<typename CompositeKey1,typename CompositeKey2>
+ bool operator()(
+ const composite_key_result<CompositeKey1> & x,
+ const composite_key_result<CompositeKey2> & y)const
+ {
+ typedef typename CompositeKey1::key_extractor_tuple key_extractor_tuple1;
+ typedef typename CompositeKey1::value_type value_type1;
+ typedef typename CompositeKey2::key_extractor_tuple key_extractor_tuple2;
+ typedef typename CompositeKey2::value_type value_type2;
+
+ BOOST_STATIC_ASSERT(
+ tuples::length<key_extractor_tuple1>::value<=
+ tuples::length<key_eq_tuple>::value&&
+ tuples::length<key_extractor_tuple1>::value==
+ tuples::length<key_extractor_tuple2>::value);
+
+ return detail::equal_ckey_ckey<
+ key_extractor_tuple1,value_type1,
+ key_extractor_tuple2,value_type2,
+ key_eq_tuple
+ >::compare(
+ x.composite_key.key_extractors(),x.value,
+ y.composite_key.key_extractors(),y.value,
+ key_eqs());
+ }
+
+ template
+ <
+ typename CompositeKey,
+ BOOST_MULTI_INDEX_CK_ENUM_PARAMS(typename Value)
+ >
+ bool operator()(
+ const composite_key_result<CompositeKey>& x,
+ const tuple<BOOST_MULTI_INDEX_CK_ENUM_PARAMS(Value)>& y)const
+ {
+ typedef typename CompositeKey::key_extractor_tuple key_extractor_tuple;
+ typedef typename CompositeKey::value_type value_type;
+ typedef tuple<BOOST_MULTI_INDEX_CK_ENUM_PARAMS(Value)> key_tuple;
+
+ BOOST_STATIC_ASSERT(
+ tuples::length<key_extractor_tuple>::value<=
+ tuples::length<key_eq_tuple>::value&&
+ tuples::length<key_extractor_tuple>::value==
+ tuples::length<key_tuple>::value);
+
+ return detail::equal_ckey_cval<
+ key_extractor_tuple,value_type,
+ key_tuple,key_eq_tuple
+ >::compare(x.composite_key.key_extractors(),x.value,y,key_eqs());
+ }
+
+ template
+ <
+ BOOST_MULTI_INDEX_CK_ENUM_PARAMS(typename Value),
+ typename CompositeKey
+ >
+ bool operator()(
+ const tuple<BOOST_MULTI_INDEX_CK_ENUM_PARAMS(Value)>& x,
+ const composite_key_result<CompositeKey>& y)const
+ {
+ typedef typename CompositeKey::key_extractor_tuple key_extractor_tuple;
+ typedef typename CompositeKey::value_type value_type;
+ typedef tuple<BOOST_MULTI_INDEX_CK_ENUM_PARAMS(Value)> key_tuple;
+
+ BOOST_STATIC_ASSERT(
+ tuples::length<key_tuple>::value<=
+ tuples::length<key_eq_tuple>::value&&
+ tuples::length<key_tuple>::value==
+ tuples::length<key_extractor_tuple>::value);
+
+ return detail::equal_ckey_cval<
+ key_extractor_tuple,value_type,
+ key_tuple,key_eq_tuple
+ >::compare(x,y.composite_key.key_extractors(),y.value,key_eqs());
+ }
+};
+
+/* composite_key_compare */
+
+template
+<
+ BOOST_MULTI_INDEX_CK_ENUM(BOOST_MULTI_INDEX_CK_TEMPLATE_PARM,Compare)
+>
+struct composite_key_compare:
+ private tuple<BOOST_MULTI_INDEX_CK_ENUM_PARAMS(Compare)>
+{
+private:
+ typedef tuple<BOOST_MULTI_INDEX_CK_ENUM_PARAMS(Compare)> super;
+
+public:
+ typedef super key_comp_tuple;
+
+ composite_key_compare(
+ BOOST_MULTI_INDEX_CK_ENUM(BOOST_MULTI_INDEX_CK_CTOR_ARG,Compare)):
+ super(BOOST_MULTI_INDEX_CK_ENUM_PARAMS(k))
+ {}
+
+ composite_key_compare(const key_comp_tuple& x):super(x){}
+
+ const key_comp_tuple& key_comps()const{return *this;}
+ key_comp_tuple& key_comps(){return *this;}
+
+ template<typename CompositeKey1,typename CompositeKey2>
+ bool operator()(
+ const composite_key_result<CompositeKey1> & x,
+ const composite_key_result<CompositeKey2> & y)const
+ {
+ typedef typename CompositeKey1::key_extractor_tuple key_extractor_tuple1;
+ typedef typename CompositeKey1::value_type value_type1;
+ typedef typename CompositeKey2::key_extractor_tuple key_extractor_tuple2;
+ typedef typename CompositeKey2::value_type value_type2;
+
+ BOOST_STATIC_ASSERT(
+ tuples::length<key_extractor_tuple1>::value<=
+ tuples::length<key_comp_tuple>::value||
+ tuples::length<key_extractor_tuple2>::value<=
+ tuples::length<key_comp_tuple>::value);
+
+ return detail::compare_ckey_ckey<
+ key_extractor_tuple1,value_type1,
+ key_extractor_tuple2,value_type2,
+ key_comp_tuple
+ >::compare(
+ x.composite_key.key_extractors(),x.value,
+ y.composite_key.key_extractors(),y.value,
+ key_comps());
+ }
+
+#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
+ template<typename CompositeKey,typename Value>
+ bool operator()(
+ const composite_key_result<CompositeKey>& x,
+ const Value& y)const
+ {
+ return operator()(x,make_tuple(cref(y)));
+ }
+#endif
+
+ template
+ <
+ typename CompositeKey,
+ BOOST_MULTI_INDEX_CK_ENUM_PARAMS(typename Value)
+ >
+ bool operator()(
+ const composite_key_result<CompositeKey>& x,
+ const tuple<BOOST_MULTI_INDEX_CK_ENUM_PARAMS(Value)>& y)const
+ {
+ typedef typename CompositeKey::key_extractor_tuple key_extractor_tuple;
+ typedef typename CompositeKey::value_type value_type;
+ typedef tuple<BOOST_MULTI_INDEX_CK_ENUM_PARAMS(Value)> key_tuple;
+
+ BOOST_STATIC_ASSERT(
+ tuples::length<key_extractor_tuple>::value<=
+ tuples::length<key_comp_tuple>::value||
+ tuples::length<key_tuple>::value<=
+ tuples::length<key_comp_tuple>::value);
+
+ return detail::compare_ckey_cval<
+ key_extractor_tuple,value_type,
+ key_tuple,key_comp_tuple
+ >::compare(x.composite_key.key_extractors(),x.value,y,key_comps());
+ }
+
+#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
+ template<typename Value,typename CompositeKey>
+ bool operator()(
+ const Value& x,
+ const composite_key_result<CompositeKey>& y)const
+ {
+ return operator()(make_tuple(cref(x)),y);
+ }
+#endif
+
+ template
+ <
+ BOOST_MULTI_INDEX_CK_ENUM_PARAMS(typename Value),
+ typename CompositeKey
+ >
+ bool operator()(
+ const tuple<BOOST_MULTI_INDEX_CK_ENUM_PARAMS(Value)>& x,
+ const composite_key_result<CompositeKey>& y)const
+ {
+ typedef typename CompositeKey::key_extractor_tuple key_extractor_tuple;
+ typedef typename CompositeKey::value_type value_type;
+ typedef tuple<BOOST_MULTI_INDEX_CK_ENUM_PARAMS(Value)> key_tuple;
+
+ BOOST_STATIC_ASSERT(
+ tuples::length<key_tuple>::value<=
+ tuples::length<key_comp_tuple>::value||
+ tuples::length<key_extractor_tuple>::value<=
+ tuples::length<key_comp_tuple>::value);
+
+ return detail::compare_ckey_cval<
+ key_extractor_tuple,value_type,
+ key_tuple,key_comp_tuple
+ >::compare(x,y.composite_key.key_extractors(),y.value,key_comps());
+ }
+};
+
+/* composite_key_hash */
+
+template
+<
+ BOOST_MULTI_INDEX_CK_ENUM(BOOST_MULTI_INDEX_CK_TEMPLATE_PARM,Hash)
+>
+struct composite_key_hash:
+ private tuple<BOOST_MULTI_INDEX_CK_ENUM_PARAMS(Hash)>
+{
+private:
+ typedef tuple<BOOST_MULTI_INDEX_CK_ENUM_PARAMS(Hash)> super;
+
+public:
+ typedef super key_hasher_tuple;
+
+ composite_key_hash(
+ BOOST_MULTI_INDEX_CK_ENUM(BOOST_MULTI_INDEX_CK_CTOR_ARG,Hash)):
+ super(BOOST_MULTI_INDEX_CK_ENUM_PARAMS(k))
+ {}
+
+ composite_key_hash(const key_hasher_tuple& x):super(x){}
+
+ const key_hasher_tuple& key_hash_functions()const{return *this;}
+ key_hasher_tuple& key_hash_functions(){return *this;}
+
+ template<typename CompositeKey>
+ std::size_t operator()(const composite_key_result<CompositeKey> & x)const
+ {
+ typedef typename CompositeKey::key_extractor_tuple key_extractor_tuple;
+ typedef typename CompositeKey::value_type value_type;
+
+ BOOST_STATIC_ASSERT(
+ tuples::length<key_extractor_tuple>::value==
+ tuples::length<key_hasher_tuple>::value);
+
+ return detail::hash_ckey<
+ key_extractor_tuple,value_type,
+ key_hasher_tuple
+ >::hash(x.composite_key.key_extractors(),x.value,key_hash_functions());
+ }
+
+ template<BOOST_MULTI_INDEX_CK_ENUM_PARAMS(typename Value)>
+ std::size_t operator()(
+ const tuple<BOOST_MULTI_INDEX_CK_ENUM_PARAMS(Value)>& x)const
+ {
+ typedef tuple<BOOST_MULTI_INDEX_CK_ENUM_PARAMS(Value)> key_tuple;
+
+ BOOST_STATIC_ASSERT(
+ tuples::length<key_tuple>::value==
+ tuples::length<key_hasher_tuple>::value);
+
+ return detail::hash_cval<
+ key_tuple,key_hasher_tuple
+ >::hash(x,key_hash_functions());
+ }
+};
+
+/* Instantiations of the former functors with "natural" basic components:
+ * composite_key_result_equal_to uses std::equal_to of the values.
+ * composite_key_result_less uses std::less.
+ * composite_key_result_greater uses std::greater.
+ * composite_key_result_hash uses boost::hash.
+ */
+
+#define BOOST_MULTI_INDEX_CK_RESULT_EQUAL_TO_SUPER \
+composite_key_equal_to< \
+ BOOST_MULTI_INDEX_CK_ENUM( \
+ BOOST_MULTI_INDEX_CK_APPLY_METAFUNCTION_N, \
+ /* the argument is a PP list */ \
+ (detail::nth_composite_key_equal_to, \
+ (BOOST_DEDUCED_TYPENAME CompositeKeyResult::composite_key_type, \
+ BOOST_PP_NIL))) \
+ >
+
+template<typename CompositeKeyResult>
+struct composite_key_result_equal_to:
+BOOST_MULTI_INDEX_PRIVATE_IF_USING_DECL_FOR_TEMPL_FUNCTIONS
+BOOST_MULTI_INDEX_CK_RESULT_EQUAL_TO_SUPER
+{
+private:
+ typedef BOOST_MULTI_INDEX_CK_RESULT_EQUAL_TO_SUPER super;
+
+public:
+ typedef CompositeKeyResult first_argument_type;
+ typedef first_argument_type second_argument_type;
+ typedef bool result_type;
+
+ using super::operator();
+};
+
+#define BOOST_MULTI_INDEX_CK_RESULT_LESS_SUPER \
+composite_key_compare< \
+ BOOST_MULTI_INDEX_CK_ENUM( \
+ BOOST_MULTI_INDEX_CK_APPLY_METAFUNCTION_N, \
+ /* the argument is a PP list */ \
+ (detail::nth_composite_key_less, \
+ (BOOST_DEDUCED_TYPENAME CompositeKeyResult::composite_key_type, \
+ BOOST_PP_NIL))) \
+ >
+
+template<typename CompositeKeyResult>
+struct composite_key_result_less:
+BOOST_MULTI_INDEX_PRIVATE_IF_USING_DECL_FOR_TEMPL_FUNCTIONS
+BOOST_MULTI_INDEX_CK_RESULT_LESS_SUPER
+{
+private:
+ typedef BOOST_MULTI_INDEX_CK_RESULT_LESS_SUPER super;
+
+public:
+ typedef CompositeKeyResult first_argument_type;
+ typedef first_argument_type second_argument_type;
+ typedef bool result_type;
+
+ using super::operator();
+};
+
+#define BOOST_MULTI_INDEX_CK_RESULT_GREATER_SUPER \
+composite_key_compare< \
+ BOOST_MULTI_INDEX_CK_ENUM( \
+ BOOST_MULTI_INDEX_CK_APPLY_METAFUNCTION_N, \
+ /* the argument is a PP list */ \
+ (detail::nth_composite_key_greater, \
+ (BOOST_DEDUCED_TYPENAME CompositeKeyResult::composite_key_type, \
+ BOOST_PP_NIL))) \
+ >
+
+template<typename CompositeKeyResult>
+struct composite_key_result_greater:
+BOOST_MULTI_INDEX_PRIVATE_IF_USING_DECL_FOR_TEMPL_FUNCTIONS
+BOOST_MULTI_INDEX_CK_RESULT_GREATER_SUPER
+{
+private:
+ typedef BOOST_MULTI_INDEX_CK_RESULT_GREATER_SUPER super;
+
+public:
+ typedef CompositeKeyResult first_argument_type;
+ typedef first_argument_type second_argument_type;
+ typedef bool result_type;
+
+ using super::operator();
+};
+
+#define BOOST_MULTI_INDEX_CK_RESULT_HASH_SUPER \
+composite_key_hash< \
+ BOOST_MULTI_INDEX_CK_ENUM( \
+ BOOST_MULTI_INDEX_CK_APPLY_METAFUNCTION_N, \
+ /* the argument is a PP list */ \
+ (detail::nth_composite_key_hash, \
+ (BOOST_DEDUCED_TYPENAME CompositeKeyResult::composite_key_type, \
+ BOOST_PP_NIL))) \
+ >
+
+template<typename CompositeKeyResult>
+struct composite_key_result_hash:
+BOOST_MULTI_INDEX_PRIVATE_IF_USING_DECL_FOR_TEMPL_FUNCTIONS
+BOOST_MULTI_INDEX_CK_RESULT_HASH_SUPER
+{
+private:
+ typedef BOOST_MULTI_INDEX_CK_RESULT_HASH_SUPER super;
+
+public:
+ typedef CompositeKeyResult argument_type;
+ typedef std::size_t result_type;
+
+ using super::operator();
+};
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+/* Specializations of std::equal_to, std::less, std::greater and boost::hash
+ * for composite_key_results enabling interoperation with tuples of values.
+ */
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+namespace std{
+
+template<typename CompositeKey>
+struct equal_to<boost::multi_index::composite_key_result<CompositeKey> >:
+ boost::multi_index::composite_key_result_equal_to<
+ boost::multi_index::composite_key_result<CompositeKey>
+ >
+{
+};
+
+template<typename CompositeKey>
+struct less<boost::multi_index::composite_key_result<CompositeKey> >:
+ boost::multi_index::composite_key_result_less<
+ boost::multi_index::composite_key_result<CompositeKey>
+ >
+{
+};
+
+template<typename CompositeKey>
+struct greater<boost::multi_index::composite_key_result<CompositeKey> >:
+ boost::multi_index::composite_key_result_greater<
+ boost::multi_index::composite_key_result<CompositeKey>
+ >
+{
+};
+
+} /* namespace std */
+
+namespace boost{
+
+template<typename CompositeKey>
+struct hash<boost::multi_index::composite_key_result<CompositeKey> >:
+ boost::multi_index::composite_key_result_hash<
+ boost::multi_index::composite_key_result<CompositeKey>
+ >
+{
+};
+
+} /* namespace boost */
+#else
+/* Lacking template partial specialization, std::equal_to, std::less and
+ * std::greater will still work for composite_key_results although without
+ * tuple interoperability. To achieve the same graceful degrading with
+ * boost::hash, we define the appropriate hash_value overload.
+ */
+
+namespace boost{
+
+#if !defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP)
+namespace multi_index{
+#endif
+
+template<typename CompositeKey>
+inline std::size_t hash_value(
+ const boost::multi_index::composite_key_result<CompositeKey>& x)
+{
+ boost::multi_index::composite_key_result_hash<
+ boost::multi_index::composite_key_result<CompositeKey> > h;
+ return h(x);
+}
+
+#if !defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP)
+} /* namespace multi_index */
+#endif
+
+} /* namespace boost */
+#endif
+
+#undef BOOST_MULTI_INDEX_CK_RESULT_HASH_SUPER
+#undef BOOST_MULTI_INDEX_CK_RESULT_GREATER_SUPER
+#undef BOOST_MULTI_INDEX_CK_RESULT_LESS_SUPER
+#undef BOOST_MULTI_INDEX_CK_RESULT_EQUAL_TO_SUPER
+#undef BOOST_MULTI_INDEX_CK_COMPLETE_COMP_OPS
+#undef BOOST_MULTI_INDEX_CK_IDENTITY_ENUM_MACRO
+#undef BOOST_MULTI_INDEX_CK_NTH_COMPOSITE_KEY_FUNCTOR
+#undef BOOST_MULTI_INDEX_CK_APPLY_METAFUNCTION_N
+#undef BOOST_MULTI_INDEX_CK_CTOR_ARG
+#undef BOOST_MULTI_INDEX_CK_TEMPLATE_PARM
+#undef BOOST_MULTI_INDEX_CK_ENUM_PARAMS
+#undef BOOST_MULTI_INDEX_CK_ENUM
+#undef BOOST_MULTI_INDEX_COMPOSITE_KEY_SIZE
+
+#endif
diff --git a/boost/boost/multi_index/detail/access_specifier.hpp b/boost/boost/multi_index/detail/access_specifier.hpp
new file mode 100644
index 00000000000..5b44d251466
--- /dev/null
+++ b/boost/boost/multi_index/detail/access_specifier.hpp
@@ -0,0 +1,55 @@
+/* Copyright 2003-2006 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_ACCESS_SPECIFIER_HPP
+#define BOOST_MULTI_INDEX_DETAIL_ACCESS_SPECIFIER_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+/* In those compilers that do not accept the member template friend syntax,
+ * some protected and private sections might need to be specified as
+ * public.
+ */
+
+#if defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS)
+#define BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS public
+#define BOOST_MULTI_INDEX_PRIVATE_IF_MEMBER_TEMPLATE_FRIENDS public
+#else
+#define BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS protected
+#define BOOST_MULTI_INDEX_PRIVATE_IF_MEMBER_TEMPLATE_FRIENDS private
+#endif
+
+/* GCC does not correctly support in-class using declarations for template
+ * functions. See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=9810
+ * MSVC 7.1/8.0 seem to have a similar problem, though the conditions in
+ * which the error happens are not that simple. I have yet to isolate this
+ * into a snippet suitable for bug reporting.
+ * Sun Studio also has this problem, which might be related, from the
+ * information gathered at Sun forums, with a known issue notified at the
+ * internal bug report 6421933. The bug is present up to Studio Express 2,
+ * the latest preview version of the future Sun Studio 12. As of this writing
+ * (October 2006) it is not known whether a fix will finally make it into the
+ * official Sun Studio 12.
+ */
+
+#if BOOST_WORKAROUND(__GNUC__, <3)||\
+ BOOST_WORKAROUND(__GNUC__,==3)&&(__GNUC_MINOR__<4)||\
+ BOOST_WORKAROUND(BOOST_MSVC,==1310)||\
+ BOOST_WORKAROUND(BOOST_MSVC,==1400)||\
+ BOOST_WORKAROUND(__SUNPRO_CC,BOOST_TESTED_AT(0x590))
+#define BOOST_MULTI_INDEX_PRIVATE_IF_USING_DECL_FOR_TEMPL_FUNCTIONS public
+#else
+#define BOOST_MULTI_INDEX_PRIVATE_IF_USING_DECL_FOR_TEMPL_FUNCTIONS private
+#endif
+
+#endif
diff --git a/boost/boost/multi_index/detail/archive_constructed.hpp b/boost/boost/multi_index/detail/archive_constructed.hpp
new file mode 100644
index 00000000000..3ae6fca8e83
--- /dev/null
+++ b/boost/boost/multi_index/detail/archive_constructed.hpp
@@ -0,0 +1,79 @@
+/* Copyright 2003-2005 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_ARCHIVE_CONSTRUCTED_HPP
+#define BOOST_MULTI_INDEX_DETAIL_ARCHIVE_CONSTRUCTED_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/detail/no_exceptions_support.hpp>
+#include <boost/noncopyable.hpp>
+#include <boost/serialization/serialization.hpp>
+#include <boost/type_traits/aligned_storage.hpp>
+#include <boost/type_traits/alignment_of.hpp>
+
+namespace boost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* constructs a stack-based object from a serialization archive */
+
+template<typename T>
+struct archive_constructed:private noncopyable
+{
+ template<class Archive>
+ archive_constructed(Archive& ar,const unsigned int version)
+ {
+ serialization::load_construct_data_adl(ar,&get(),version);
+ BOOST_TRY{
+ ar>>get();
+ }
+ BOOST_CATCH(...){
+ (&get())->~T();
+ BOOST_RETHROW;
+ }
+ BOOST_CATCH_END
+ }
+
+ template<class Archive>
+ archive_constructed(const char* name,Archive& ar,const unsigned int version)
+ {
+ serialization::load_construct_data_adl(ar,&get(),version);
+ BOOST_TRY{
+ ar>>serialization::make_nvp(name,get());
+ }
+ BOOST_CATCH(...){
+ (&get())->~T();
+ BOOST_RETHROW;
+ }
+ BOOST_CATCH_END
+ }
+
+ ~archive_constructed()
+ {
+ (&get())->~T();
+ }
+
+ T& get(){return *static_cast<T*>(static_cast<void*>(&space));}
+
+private:
+ typename aligned_storage<sizeof(T),alignment_of<T>::value>::type space;
+};
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#endif
diff --git a/boost/boost/multi_index/detail/auto_space.hpp b/boost/boost/multi_index/detail/auto_space.hpp
new file mode 100644
index 00000000000..2eeb1acd404
--- /dev/null
+++ b/boost/boost/multi_index/detail/auto_space.hpp
@@ -0,0 +1,85 @@
+/* Copyright 2003-2005 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_AUTO_SPACE_HPP
+#define BOOST_MULTI_INDEX_DETAIL_AUTO_SPACE_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <algorithm>
+#include <boost/detail/allocator_utilities.hpp>
+#include <boost/noncopyable.hpp>
+#include <memory>
+
+namespace boost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* auto_space provides uninitialized space suitably to store
+ * a given number of elements of a given type.
+ */
+
+/* NB: it is not clear whether using an allocator to handle
+ * zero-sized arrays of elements is conformant or not. GCC 3.3.1
+ * and prior fail here, other stdlibs handle the issue gracefully.
+ * To be on the safe side, the case n==0 is given special treatment.
+ * References:
+ * GCC Bugzilla, "standard allocator crashes when deallocating segment
+ * "of zero length", http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14176
+ * C++ Standard Library Defect Report List (Revision 28), issue 199
+ * "What does allocate(0) return?",
+ * http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/lwg-defects.html#199
+ */
+
+template<typename T,typename Allocator=std::allocator<T> >
+struct auto_space:private noncopyable
+{
+ explicit auto_space(const Allocator& al=Allocator(),std::size_t n=1):
+ al_(al),n_(n),data_(n_?al_.allocate(n_):0)
+ {}
+
+ ~auto_space()
+ {
+ if(n_)al_.deallocate(data_,n_);
+ }
+
+ Allocator get_allocator()const{return al_;}
+
+ T* data()const{return data_;}
+
+ void swap(auto_space& x)
+ {
+ std::swap(n_,x.n_);
+ std::swap(data_,x.data_);
+ }
+
+private:
+ typename boost::detail::allocator::rebind_to<
+ Allocator,T>::type al_;
+ std::size_t n_;
+ T* data_;
+};
+
+template<typename T,typename Allocator>
+void swap(auto_space<T,Allocator>& x,auto_space<T,Allocator>& y)
+{
+ x.swap(y);
+}
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#endif
diff --git a/boost/boost/multi_index/detail/base_type.hpp b/boost/boost/multi_index/detail/base_type.hpp
new file mode 100644
index 00000000000..fd6e364c908
--- /dev/null
+++ b/boost/boost/multi_index/detail/base_type.hpp
@@ -0,0 +1,87 @@
+/* Copyright 2003-2005 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_BASE_TYPE_HPP
+#define BOOST_MULTI_INDEX_DETAIL_BASE_TYPE_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/detail/workaround.hpp>
+#include <boost/mpl/at.hpp>
+#include <boost/mpl/apply.hpp>
+#include <boost/mpl/size.hpp>
+#include <boost/multi_index/detail/index_base.hpp>
+#include <boost/multi_index/detail/is_index_list.hpp>
+#include <boost/multi_index/detail/msvc_index_specifier.hpp>
+#include <boost/static_assert.hpp>
+
+namespace boost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* MPL machinery to construct a linear hierarchy of indices out of
+ * a index list.
+ */
+
+#if BOOST_WORKAROUND(BOOST_MSVC,<1310)
+struct index_applier
+{
+ template<typename IndexSpecifierMeta,typename SuperMeta>
+ struct apply:
+ msvc_index_specifier<IndexSpecifierMeta::type>::
+ template result_index_class<SuperMeta>
+ {
+ };
+};
+#else
+struct index_applier
+{
+ template<typename IndexSpecifierMeta,typename SuperMeta>
+ struct apply
+ {
+ typedef typename IndexSpecifierMeta::type index_specifier;
+ typedef typename index_specifier::
+ BOOST_NESTED_TEMPLATE index_class<SuperMeta>::type type;
+ };
+};
+#endif
+
+template<int N,typename Value,typename IndexSpecifierList,typename Allocator>
+struct nth_layer
+{
+ BOOST_STATIC_CONSTANT(int,length=mpl::size<IndexSpecifierList>::value);
+
+ typedef typename mpl::eval_if_c<
+ N==length,
+ mpl::identity<index_base<Value,IndexSpecifierList,Allocator> >,
+ mpl::apply2<
+ index_applier,
+ mpl::at_c<IndexSpecifierList,N>,
+ nth_layer<N+1,Value,IndexSpecifierList,Allocator>
+ >
+ >::type type;
+};
+
+template<typename Value,typename IndexSpecifierList,typename Allocator>
+struct multi_index_base_type:nth_layer<0,Value,IndexSpecifierList,Allocator>
+{
+ BOOST_STATIC_ASSERT(detail::is_index_list<IndexSpecifierList>::value);
+};
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#endif
diff --git a/boost/boost/multi_index/detail/bidir_node_iterator.hpp b/boost/boost/multi_index/detail/bidir_node_iterator.hpp
new file mode 100644
index 00000000000..fb4e87e4a0b
--- /dev/null
+++ b/boost/boost/multi_index/detail/bidir_node_iterator.hpp
@@ -0,0 +1,111 @@
+/* Copyright 2003-2006 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_BIDIR_NODE_ITERATOR_HPP
+#define BOOST_MULTI_INDEX_DETAIL_BIDIR_NODE_ITERATOR_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/operators.hpp>
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+#include <boost/serialization/nvp.hpp>
+#include <boost/serialization/split_member.hpp>
+#endif
+
+namespace boost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* Iterator class for node-based indices with bidirectional
+ * iterators (ordered and sequenced indices.)
+ */
+
+template<typename Node,typename Derived=mpl::na>
+class bidir_node_iterator:
+ public bidirectional_iterator_helper<
+ bidir_node_iterator<Node,Derived>,
+ typename Node::value_type,
+ std::ptrdiff_t,
+ const typename Node::value_type*,
+ const typename Node::value_type&>
+{
+public:
+ bidir_node_iterator(){}
+ explicit bidir_node_iterator(Node* node_):node(node_){}
+
+ const typename Node::value_type& operator*()const
+ {
+ return node->value();
+ }
+
+ friend bool operator==(
+ const bidir_node_iterator& x,const bidir_node_iterator& y)
+ {
+ return x.node==y.node;
+ }
+
+ bidir_node_iterator& operator++()
+ {
+ Node::increment(node);
+ return *this;
+ }
+
+ bidir_node_iterator& operator--()
+ {
+ Node::decrement(node);
+ return *this;
+ }
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+ /* Serialization. As for why the following is public,
+ * see explanation in safe_mode_iterator notes in safe_mode.hpp.
+ */
+
+ BOOST_SERIALIZATION_SPLIT_MEMBER()
+
+ typedef typename Node::base_type node_base_type;
+
+ template<class Archive>
+ void save(Archive& ar,const unsigned int)const
+ {
+ node_base_type* bnode=node;
+ ar<<serialization::make_nvp("pointer",bnode);
+ }
+
+ template<class Archive>
+ void load(Archive& ar,const unsigned int)
+ {
+ node_base_type* bnode;
+ ar>>serialization::make_nvp("pointer",bnode);
+ node=static_cast<Node*>(bnode);
+ }
+#endif
+
+ /* get_node is not to be used by the user */
+
+ typedef Node node_type;
+
+ Node* get_node()const{return node;}
+
+private:
+ Node* node;
+};
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#endif
diff --git a/boost/boost/multi_index/detail/bucket_array.hpp b/boost/boost/multi_index/detail/bucket_array.hpp
new file mode 100644
index 00000000000..7180d1be639
--- /dev/null
+++ b/boost/boost/multi_index/detail/bucket_array.hpp
@@ -0,0 +1,198 @@
+/* Copyright 2003-2005 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_BUCKET_ARRAY_HPP
+#define BOOST_MULTI_INDEX_DETAIL_BUCKET_ARRAY_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <algorithm>
+#include <boost/multi_index/detail/auto_space.hpp>
+#include <boost/multi_index/detail/hash_index_node.hpp>
+#include <boost/noncopyable.hpp>
+#include <cstddef>
+#include <limits.h>
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+#include <boost/archive/archive_exception.hpp>
+#include <boost/serialization/access.hpp>
+#include <boost/throw_exception.hpp>
+#endif
+
+namespace boost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* bucket structure for use by hashed indices */
+
+class bucket_array_base:private noncopyable
+{
+protected:
+ inline static std::size_t next_prime(std::size_t n)
+ {
+ static const std::size_t prime_list[]={
+ 53ul, 97ul, 193ul, 389ul, 769ul,
+ 1543ul, 3079ul, 6151ul, 12289ul, 24593ul,
+ 49157ul, 98317ul, 196613ul, 393241ul, 786433ul,
+ 1572869ul, 3145739ul, 6291469ul, 12582917ul, 25165843ul,
+ 50331653ul, 100663319ul, 201326611ul, 402653189ul, 805306457ul,
+ 1610612741ul, 3221225473ul,
+
+#if ((((ULONG_MAX>>16)>>16)>>16)>>15)==0 /* unsigned long less than 64 bits */
+ 4294967291ul
+#else
+ /* obtained with aid from
+ * http://javaboutique.internet.com/prime_numb/
+ * http://www.rsok.com/~jrm/next_ten_primes.html
+ * and verified with
+ * http://www.alpertron.com.ar/ECM.HTM
+ */
+
+ 6442450939ul, 12884901893ul, 25769803751ul, 51539607551ul,
+ 103079215111ul, 206158430209ul, 412316860441ul, 824633720831ul,
+ 1649267441651ul, 3298534883309ul, 6597069766657ul, 13194139533299ul,
+ 26388279066623ul, 52776558133303ul, 105553116266489ul, 211106232532969ul,
+ 422212465066001ul, 844424930131963ul, 1688849860263953ul,
+ 3377699720527861ul, 6755399441055731ul, 13510798882111483ul,
+ 27021597764222939ul, 54043195528445957ul, 108086391056891903ul,
+ 216172782113783843ul, 432345564227567621ul, 864691128455135207ul,
+ 1729382256910270481ul, 3458764513820540933ul, 6917529027641081903ul,
+ 13835058055282163729ul, 18446744073709551557ul
+#endif
+
+ };
+ static const std::size_t prime_list_size=
+ sizeof(prime_list)/sizeof(prime_list[0]);
+
+ std::size_t const *bound=
+ std::lower_bound(prime_list,prime_list+prime_list_size,n);
+ if(bound==prime_list+prime_list_size)bound--;
+ return *bound;
+ }
+};
+
+template<typename Allocator>
+class bucket_array:public bucket_array_base
+{
+public:
+ bucket_array(const Allocator& al,hashed_index_node_impl* end_,std::size_t size):
+ size_(bucket_array_base::next_prime(size)),
+ spc(al,size_+1)
+ {
+ clear();
+ end()->next()=end_;
+ end_->next()=end();
+ }
+
+ std::size_t size()const
+ {
+ return size_;
+ }
+
+ std::size_t position(std::size_t hash)const
+ {
+ return hash%size_;
+ }
+
+ hashed_index_node_impl* begin()const{return &buckets()[0];}
+ hashed_index_node_impl* end()const{return &buckets()[size_];}
+ hashed_index_node_impl* at(std::size_t n)const{return &buckets()[n];}
+
+ std::size_t first_nonempty(std::size_t n)const
+ {
+ for(;;++n){
+ hashed_index_node_impl* x=at(n);
+ if(x->next()!=x)return n;
+ }
+ }
+
+ void clear()
+ {
+ for(hashed_index_node_impl* x=begin(),*y=end();x!=y;++x)x->next()=x;
+ }
+
+ void swap(bucket_array& x)
+ {
+ std::swap(size_,x.size_);
+ spc.swap(x.spc);
+ }
+
+private:
+ std::size_t size_;
+ auto_space<hashed_index_node_impl,Allocator> spc;
+
+ hashed_index_node_impl* buckets()const
+ {
+ return spc.data();
+ }
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+ friend class boost::serialization::access;
+
+ /* bucket_arrays do not emit any kind of serialization info. They are
+ * fed to Boost.Serialization as hashed index iterators need to track
+ * them during serialization.
+ */
+
+ template<class Archive>
+ void serialize(Archive&,const unsigned int)
+ {
+ }
+#endif
+};
+
+template<typename Allocator>
+void swap(bucket_array<Allocator>& x,bucket_array<Allocator>& y)
+{
+ x.swap(y);
+}
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+/* bucket_arrays never get constructed directly by Boost.Serialization,
+ * as archives are always fed pointers to previously existent
+ * arrays. So, if this is called it means we are dealing with a
+ * somehow invalid archive.
+ */
+
+#if defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP)
+namespace serialization{
+#else
+namespace multi_index{
+namespace detail{
+#endif
+
+template<class Archive,typename Allocator>
+inline void load_construct_data(
+ Archive&,boost::multi_index::detail::bucket_array<Allocator>*,
+ const unsigned int)
+{
+ throw_exception(
+ archive::archive_exception(archive::archive_exception::other_exception));
+}
+
+#if defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP)
+} /* namespace serialization */
+#else
+} /* namespace multi_index::detail */
+} /* namespace multi_index */
+#endif
+
+#endif
+
+} /* namespace boost */
+
+#endif
diff --git a/boost/boost/multi_index/detail/converter.hpp b/boost/boost/multi_index/detail/converter.hpp
new file mode 100644
index 00000000000..f4fb47b1939
--- /dev/null
+++ b/boost/boost/multi_index/detail/converter.hpp
@@ -0,0 +1,52 @@
+/* Copyright 2003-2005 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_CONVERTER_HPP
+#define BOOST_MULTI_INDEX_DETAIL_CONVERTER_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+namespace boost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* converter offers means to access indices of a given multi_index_container
+ * and for convertibilty between index iterators, so providing a
+ * localized access point for get() and project() functions.
+ */
+
+template<typename MultiIndexContainer,typename Index>
+struct converter
+{
+ static const Index& index(const MultiIndexContainer& x){return x;}
+ static Index& index(MultiIndexContainer& x){return x;}
+
+ static typename Index::const_iterator const_iterator(
+ const MultiIndexContainer& x,typename MultiIndexContainer::node_type* node)
+ {
+ return x.Index::make_iterator(node);
+ }
+
+ static typename Index::iterator iterator(
+ MultiIndexContainer& x,typename MultiIndexContainer::node_type* node)
+ {
+ return x.Index::make_iterator(node);
+ }
+};
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#endif
diff --git a/boost/boost/multi_index/detail/copy_map.hpp b/boost/boost/multi_index/detail/copy_map.hpp
new file mode 100644
index 00000000000..d116ed09007
--- /dev/null
+++ b/boost/boost/multi_index/detail/copy_map.hpp
@@ -0,0 +1,133 @@
+/* Copyright 2003-2005 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_COPY_MAP_HPP
+#define BOOST_MULTI_INDEX_DETAIL_COPY_MAP_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <algorithm>
+#include <boost/detail/no_exceptions_support.hpp>
+#include <boost/multi_index/detail/auto_space.hpp>
+#include <boost/noncopyable.hpp>
+#include <cstddef>
+#include <functional>
+
+namespace boost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* copy_map is used as an auxiliary structure during copy_() operations.
+ * When a container with n nodes is replicated, node_map holds the pairings
+ * between original and copied nodes, and provides a fast way to find a
+ * copied node from an original one.
+ * The semantics of the class are not simple, and no attempt has been made
+ * to enforce it: multi_index_container handles it right. On the other hand,
+ * the const interface, which is the one provided to index implementations,
+ * only allows for:
+ * - Enumeration of pairs of (original,copied) nodes (excluding the headers),
+ * - fast retrieval of copied nodes (including the headers.)
+ */
+
+template <typename Node>
+struct copy_map_entry
+{
+ copy_map_entry(Node* f,Node* s):first(f),second(s){}
+
+ Node* first;
+ Node* second;
+
+ bool operator<(const copy_map_entry<Node>& x)const
+ {
+ return std::less<Node*>()(first,x.first);
+ }
+};
+
+template <typename Node,typename Allocator>
+class copy_map:private noncopyable
+{
+public:
+ typedef const copy_map_entry<Node>* const_iterator;
+
+ copy_map(
+ const Allocator& al,std::size_t size,Node* header_org,Node* header_cpy):
+ al_(al),size_(size),spc(al_,size_),n(0),
+ header_org_(header_org),header_cpy_(header_cpy),released(false)
+ {}
+
+ ~copy_map()
+ {
+ if(!released){
+ for(std::size_t i=0;i<n;++i){
+ boost::detail::allocator::destroy(&spc.data()[i].second->value());
+ deallocate(spc.data()[i].second);
+ }
+ }
+ }
+
+ const_iterator begin()const{return spc.data();}
+ const_iterator end()const{return spc.data()+n;}
+
+ void clone(Node* node)
+ {
+ spc.data()[n].first=node;
+ spc.data()[n].second=al_.allocate(1);
+ BOOST_TRY{
+ boost::detail::allocator::construct(
+ &spc.data()[n].second->value(),node->value());
+ }
+ BOOST_CATCH(...){
+ deallocate(spc.data()[n].second);
+ BOOST_RETHROW;
+ }
+ BOOST_CATCH_END
+ ++n;
+
+ if(n==size_)std::sort(spc.data(),spc.data()+size_);
+ }
+
+ Node* find(Node* node)const
+ {
+ if(node==header_org_)return header_cpy_;
+ return std::lower_bound(
+ begin(),end(),copy_map_entry<Node>(node,0))->second;
+ }
+
+ void release()
+ {
+ released=true;
+ }
+
+private:
+ typename boost::detail::allocator::rebind_to<
+ Allocator,Node>::type al_;
+ std::size_t size_;
+ auto_space<copy_map_entry<Node>,Allocator> spc;
+ std::size_t n;
+ Node* header_org_;
+ Node* header_cpy_;
+ bool released;
+
+ void deallocate(Node* node)
+ {
+ al_.deallocate(node,1);
+ }
+};
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#endif
diff --git a/boost/boost/multi_index/detail/def_ctor_tuple_cons.hpp b/boost/boost/multi_index/detail/def_ctor_tuple_cons.hpp
new file mode 100644
index 00000000000..e5490f03dff
--- /dev/null
+++ b/boost/boost/multi_index/detail/def_ctor_tuple_cons.hpp
@@ -0,0 +1,59 @@
+/* Copyright 2003-2005 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_DEF_CTOR_TUPLE_CONS_HPP
+#define BOOST_MULTI_INDEX_DETAIL_DEF_CTOR_TUPLE_CONS_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/config.hpp>
+
+#if defined(BOOST_MSVC)
+/* In MSVC, tuples::cons is not default constructible. We provide a
+ * tiny wrapper around tuple::cons filling that hole.
+ */
+
+#include <boost/tuple/tuple.hpp>
+
+namespace boost{
+
+namespace multi_index{
+
+namespace detail{
+
+template<typename Cons>
+struct default_constructible_tuple_cons:Cons
+{
+ default_constructible_tuple_cons():
+ Cons(
+ Cons::head_type(),
+ static_cast<const Cons::tail_type&>(
+ default_constructible_tuple_cons<Cons::tail_type>()))
+ {}
+
+ default_constructible_tuple_cons(const Cons& cons):Cons(cons){}
+};
+
+template<>
+struct default_constructible_tuple_cons<tuples::null_type>:tuples::null_type
+{
+ default_constructible_tuple_cons(){}
+ default_constructible_tuple_cons(const tuples::null_type&){}
+};
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#endif /* BOOST_MSVC */
+
+#endif
diff --git a/boost/boost/multi_index/detail/duplicates_iterator.hpp b/boost/boost/multi_index/detail/duplicates_iterator.hpp
new file mode 100644
index 00000000000..7cc126c998d
--- /dev/null
+++ b/boost/boost/multi_index/detail/duplicates_iterator.hpp
@@ -0,0 +1,120 @@
+/* Copyright 2003-2006 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_DUPLICATES_ITERATOR_HPP
+#define BOOST_MULTI_INDEX_DETAIL_DUPLICATES_ITERATOR_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <cstddef>
+#include <iterator>
+
+namespace boost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* duplicates_operator is given a range of ordered elements and
+ * passes only over those which are duplicated.
+ */
+
+template<typename Node,typename Predicate>
+class duplicates_iterator
+{
+public:
+ typedef typename Node::value_type value_type;
+ typedef std::ptrdiff_t difference_type;
+ typedef const typename Node::value_type* pointer;
+ typedef const typename Node::value_type& reference;
+ typedef std::forward_iterator_tag iterator_category;
+
+ duplicates_iterator(Node* node_,Node* end_,Predicate pred_):
+ node(node_),begin_chunk(0),end(end_),pred(pred_)
+ {
+ advance();
+ }
+
+ duplicates_iterator(Node* end_,Predicate pred_):
+ node(end_),begin_chunk(end_),end(end_),pred(pred_)
+ {
+ }
+
+ reference operator*()const
+ {
+ return node->value();
+ }
+
+ pointer operator->()const
+ {
+ return &node->value();
+ }
+
+ duplicates_iterator& operator++()
+ {
+ Node::increment(node);
+ sync();
+ return *this;
+ }
+
+ duplicates_iterator operator++(int)
+ {
+ duplicates_iterator tmp(*this);
+ ++(*this);
+ return tmp;
+ }
+
+ Node* get_node()const{return node;}
+
+private:
+ void sync()
+ {
+ if(node!=end&&pred(begin_chunk->value(),node->value()))advance();
+ }
+
+ void advance()
+ {
+ for(Node* node2=node;node!=end;node=node2){
+ Node::increment(node2);
+ if(node2!=end&&!pred(node->value(),node2->value()))break;
+ }
+ begin_chunk=node;
+ }
+
+ Node* node;
+ Node* begin_chunk;
+ Node* end;
+ Predicate pred;
+};
+
+template<typename Node,typename Predicate>
+bool operator==(
+ const duplicates_iterator<Node,Predicate>& x,
+ const duplicates_iterator<Node,Predicate>& y)
+{
+ return x.get_node()==y.get_node();
+}
+
+template<typename Node,typename Predicate>
+bool operator!=(
+ const duplicates_iterator<Node,Predicate>& x,
+ const duplicates_iterator<Node,Predicate>& y)
+{
+ return !(x==y);
+}
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#endif
diff --git a/boost/boost/multi_index/detail/has_tag.hpp b/boost/boost/multi_index/detail/has_tag.hpp
new file mode 100644
index 00000000000..10379784a3a
--- /dev/null
+++ b/boost/boost/multi_index/detail/has_tag.hpp
@@ -0,0 +1,42 @@
+/* Copyright 2003-2005 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_HAS_TAG_HPP
+#define BOOST_MULTI_INDEX_DETAIL_HAS_TAG_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/mpl/contains.hpp>
+
+namespace boost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* determines whether an index type has a given tag in its tag list */
+
+template<typename Tag>
+struct has_tag
+{
+ template<typename Index>
+ struct apply:mpl::contains<BOOST_DEDUCED_TYPENAME Index::tag_list,Tag>
+ {
+ };
+};
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#endif
diff --git a/boost/boost/multi_index/detail/hash_index_args.hpp b/boost/boost/multi_index/detail/hash_index_args.hpp
new file mode 100644
index 00000000000..b2d10f6c878
--- /dev/null
+++ b/boost/boost/multi_index/detail/hash_index_args.hpp
@@ -0,0 +1,107 @@
+/* Copyright 2003-2005 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_HASH_INDEX_ARGS_HPP
+#define BOOST_MULTI_INDEX_DETAIL_HASH_INDEX_ARGS_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/functional/hash/hash.hpp>
+#include <boost/mpl/aux_/na.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/multi_index/tag.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <functional>
+
+namespace boost{
+
+template<class T> struct hash; /* fwd decl. */
+
+namespace multi_index{
+
+namespace detail{
+
+/* Hashed index specifiers can be instantiated in two forms:
+ *
+ * (hashed_unique|hashed_non_unique)<
+ * KeyFromValue,
+ * Hash=boost::hash<KeyFromValue::result_type>,
+ * Pred=std::equal_to<KeyFromValue::result_type> >
+ * (hashed_unique|hashed_non_unique)<
+ * TagList,
+ * KeyFromValue,
+ * Hash=boost::hash<KeyFromValue::result_type>,
+ * Pred=std::equal_to<KeyFromValue::result_type> >
+ *
+ * hashed_index_args implements the machinery to accept this
+ * argument-dependent polymorphism.
+ */
+
+template<typename KeyFromValue>
+struct index_args_default_hash
+{
+ typedef ::boost::hash<typename KeyFromValue::result_type> type;
+};
+
+template<typename KeyFromValue>
+struct index_args_default_pred
+{
+ typedef std::equal_to<typename KeyFromValue::result_type> type;
+};
+
+template<typename Arg1,typename Arg2,typename Arg3,typename Arg4>
+struct hashed_index_args
+{
+ typedef is_tag<Arg1> full_form;
+
+ typedef typename mpl::if_<
+ full_form,
+ Arg1,
+ tag< > >::type tag_list_type;
+ typedef typename mpl::if_<
+ full_form,
+ Arg2,
+ Arg1>::type key_from_value_type;
+ typedef typename mpl::if_<
+ full_form,
+ Arg3,
+ Arg2>::type supplied_hash_type;
+ typedef typename mpl::eval_if<
+ mpl::is_na<supplied_hash_type>,
+ index_args_default_hash<key_from_value_type>,
+ mpl::identity<supplied_hash_type>
+ >::type hash_type;
+ typedef typename mpl::if_<
+ full_form,
+ Arg4,
+ Arg3>::type supplied_pred_type;
+ typedef typename mpl::eval_if<
+ mpl::is_na<supplied_pred_type>,
+ index_args_default_pred<key_from_value_type>,
+ mpl::identity<supplied_pred_type>
+ >::type pred_type;
+
+ BOOST_STATIC_ASSERT(is_tag<tag_list_type>::value);
+ BOOST_STATIC_ASSERT(!mpl::is_na<key_from_value_type>::value);
+ BOOST_STATIC_ASSERT(!mpl::is_na<hash_type>::value);
+ BOOST_STATIC_ASSERT(!mpl::is_na<pred_type>::value);
+};
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#endif
diff --git a/boost/boost/multi_index/detail/hash_index_iterator.hpp b/boost/boost/multi_index/detail/hash_index_iterator.hpp
new file mode 100644
index 00000000000..7844d1ad20a
--- /dev/null
+++ b/boost/boost/multi_index/detail/hash_index_iterator.hpp
@@ -0,0 +1,109 @@
+/* Copyright 2003-2006 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_HASH_INDEX_ITERATOR_HPP
+#define BOOST_MULTI_INDEX_DETAIL_HASH_INDEX_ITERATOR_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/operators.hpp>
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+#include <boost/serialization/nvp.hpp>
+#include <boost/serialization/split_member.hpp>
+#endif
+
+namespace boost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* Iterator class for hashed indices.
+ */
+
+template<typename Node,typename BucketArray,typename Derived=mpl::na>
+class hashed_index_iterator:
+ public forward_iterator_helper<
+ hashed_index_iterator<Node,BucketArray,Derived>,
+ typename Node::value_type,
+ std::ptrdiff_t,
+ const typename Node::value_type*,
+ const typename Node::value_type&>
+{
+public:
+ hashed_index_iterator(){}
+ hashed_index_iterator(Node* node_,BucketArray* buckets_):
+ node(node_),buckets(buckets_)
+ {}
+
+ const typename Node::value_type& operator*()const
+ {
+ return node->value();
+ }
+
+ friend bool operator==(
+ const hashed_index_iterator& x,const hashed_index_iterator& y)
+ {
+ return x.node==y.node;
+ }
+
+ hashed_index_iterator& operator++()
+ {
+ Node::increment(node,buckets->begin(),buckets->end());
+ return *this;
+ }
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+ /* Serialization. As for why the following is public,
+ * see explanation in safe_mode_iterator notes in safe_mode.hpp.
+ */
+
+ BOOST_SERIALIZATION_SPLIT_MEMBER()
+
+ typedef typename Node::base_type node_base_type;
+
+ template<class Archive>
+ void save(Archive& ar,const unsigned int)const
+ {
+ node_base_type* bnode=node;
+ ar<<serialization::make_nvp("pointer",bnode);
+ ar<<serialization::make_nvp("pointer",buckets);
+ }
+
+ template<class Archive>
+ void load(Archive& ar,const unsigned int)
+ {
+ node_base_type* bnode;
+ ar>>serialization::make_nvp("pointer",bnode);
+ node=static_cast<Node*>(bnode);
+ ar>>serialization::make_nvp("pointer",buckets);
+ }
+#endif
+
+ /* get_node is not to be used by the user */
+
+ typedef Node node_type;
+
+ Node* get_node()const{return node;}
+
+private:
+ Node* node;
+ BucketArray* buckets;
+};
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#endif
diff --git a/boost/boost/multi_index/detail/hash_index_node.hpp b/boost/boost/multi_index/detail/hash_index_node.hpp
new file mode 100644
index 00000000000..cf8d17a63bc
--- /dev/null
+++ b/boost/boost/multi_index/detail/hash_index_node.hpp
@@ -0,0 +1,117 @@
+/* Copyright 2003-2006 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_HASH_INDEX_NODE_HPP
+#define BOOST_MULTI_INDEX_DETAIL_HASH_INDEX_NODE_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <functional>
+
+namespace boost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* singly-linked node for use by hashed_index */
+
+struct hashed_index_node_impl
+{
+ hashed_index_node_impl*& next(){return next_;}
+ hashed_index_node_impl* next()const{return next_;}
+
+ /* algorithmic stuff */
+
+ static void increment(
+ hashed_index_node_impl*& x,
+ hashed_index_node_impl* bbegin,hashed_index_node_impl* bbend)
+ {
+ std::less_equal<hashed_index_node_impl*> leq;
+
+ x=x->next();
+ if(leq(bbegin,x)&&leq(x,bbend)){ /* bucket node */
+ do{
+ ++x;
+ }while(x->next()==x);
+ x=x->next();
+ }
+ }
+
+ static void link(
+ hashed_index_node_impl* x,hashed_index_node_impl* pos)
+ {
+ x->next()=pos->next();
+ pos->next()=x;
+ };
+
+ static void unlink(hashed_index_node_impl* x)
+ {
+ hashed_index_node_impl* y=x->next();
+ while(y->next()!=x){y=y->next();}
+ y->next()=x->next();
+ }
+
+ static hashed_index_node_impl* prev(hashed_index_node_impl* x)
+ {
+ hashed_index_node_impl* y=x->next();
+ while(y->next()!=x){y=y->next();}
+ return y;
+ }
+
+ static void unlink_next(hashed_index_node_impl* x)
+ {
+ x->next()=x->next()->next();
+ }
+
+private:
+ hashed_index_node_impl* next_;
+};
+
+template<typename Super>
+struct hashed_index_node_trampoline:hashed_index_node_impl{};
+
+template<typename Super>
+struct hashed_index_node:Super,hashed_index_node_trampoline<Super>
+{
+ hashed_index_node_impl* impl()
+ {return static_cast<impl_type*>(this);}
+ const hashed_index_node_impl* impl()const
+ {return static_cast<const impl_type*>(this);}
+
+ static hashed_index_node* from_impl(hashed_index_node_impl *x)
+ {return static_cast<hashed_index_node*>(static_cast<impl_type*>(x));}
+ static const hashed_index_node* from_impl(const hashed_index_node_impl* x)
+ {
+ return static_cast<const hashed_index_node*>(
+ static_cast<const impl_type*>(x));
+ }
+
+ static void increment(
+ hashed_index_node*& x,
+ hashed_index_node_impl* bbegin,hashed_index_node_impl* bend)
+ {
+ hashed_index_node_impl* xi=x->impl();
+ impl_type::increment(xi,bbegin,bend);
+ x=from_impl(xi);
+ }
+
+private:
+ typedef hashed_index_node_trampoline<Super> impl_type;
+};
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#endif
diff --git a/boost/boost/multi_index/detail/header_holder.hpp b/boost/boost/multi_index/detail/header_holder.hpp
new file mode 100644
index 00000000000..7dbf138783b
--- /dev/null
+++ b/boost/boost/multi_index/detail/header_holder.hpp
@@ -0,0 +1,50 @@
+/* Copyright 2003-2005 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_HEADER_HOLDER_HPP
+#define BOOST_MULTI_INDEX_DETAIL_HEADER_HOLDER_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/noncopyable.hpp>
+
+namespace boost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* A utility class used to hold a pointer to the header node.
+ * The base from member idiom is used because index classes, which are
+ * superclasses of multi_index_container, need this header in construction
+ * time. The allocation is made by the allocator of the multi_index_container
+ * class --hence, this allocator needs also be stored resorting
+ * to the base from member trick.
+ */
+
+template<typename NodeType,typename Final>
+struct header_holder:private noncopyable
+{
+ header_holder():member(final().allocate_node()){}
+ ~header_holder(){final().deallocate_node(member);}
+
+ NodeType* member;
+
+private:
+ Final& final(){return *static_cast<Final*>(this);}
+};
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#endif
diff --git a/boost/boost/multi_index/detail/index_base.hpp b/boost/boost/multi_index/detail/index_base.hpp
new file mode 100644
index 00000000000..c41d08bae70
--- /dev/null
+++ b/boost/boost/multi_index/detail/index_base.hpp
@@ -0,0 +1,179 @@
+/* Copyright 2003-2005 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_INDEX_BASE_HPP
+#define BOOST_MULTI_INDEX_DETAIL_INDEX_BASE_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/call_traits.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/mpl/vector.hpp>
+#include <boost/multi_index/detail/copy_map.hpp>
+#include <boost/multi_index/detail/node_type.hpp>
+#include <boost/multi_index_container_fwd.hpp>
+#include <boost/tuple/tuple.hpp>
+#include <utility>
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+#include <boost/multi_index/detail/index_loader.hpp>
+#include <boost/multi_index/detail/index_saver.hpp>
+#endif
+
+namespace boost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* The role of this class is threefold:
+ * - tops the linear hierarchy of indices.
+ * - terminates some cascading backbone function calls (insert_, etc.),
+ * - grants access to the backbone functions of the final
+ * multi_index_container class (for access restriction reasons, these
+ * cannot be called directly from the index classes.)
+ */
+
+template<typename Value,typename IndexSpecifierList,typename Allocator>
+class index_base
+{
+protected:
+ typedef index_node_base<Value> node_type;
+ typedef typename multi_index_node_type<
+ Value,IndexSpecifierList,Allocator>::type final_node_type;
+ typedef multi_index_container<
+ Value,IndexSpecifierList,Allocator> final_type;
+ typedef tuples::null_type ctor_args_list;
+ typedef typename
+ boost::detail::allocator::rebind_to<
+ Allocator,
+ typename Allocator::value_type>::type final_allocator_type;
+ typedef mpl::vector0<> index_type_list;
+ typedef mpl::vector0<> iterator_type_list;
+ typedef mpl::vector0<> const_iterator_type_list;
+ typedef copy_map<
+ final_node_type,
+ final_allocator_type> copy_map_type;
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+ typedef index_saver<
+ node_type,
+ final_allocator_type> index_saver_type;
+ typedef index_loader<
+ node_type,
+ final_node_type,
+ final_allocator_type> index_loader_type;
+#endif
+
+private:
+ typedef typename call_traits<Value>::param_type value_param_type;
+
+protected:
+ explicit index_base(const ctor_args_list&,const Allocator&){}
+
+ void copy_(
+ const index_base<Value,IndexSpecifierList,Allocator>&,const copy_map_type&)
+ {}
+
+ node_type* insert_(value_param_type v,node_type* x)
+ {
+ boost::detail::allocator::construct(&x->value(),v);
+ return x;
+ }
+
+ node_type* insert_(value_param_type v,node_type*,node_type* x)
+ {
+ boost::detail::allocator::construct(&x->value(),v);
+ return x;
+ }
+
+ void erase_(node_type* x)
+ {
+ boost::detail::allocator::destroy(&x->value());
+ }
+
+ void delete_node_(node_type* x)
+ {
+ boost::detail::allocator::destroy(&x->value());
+ }
+
+ void clear_(){}
+
+ void swap_(index_base<Value,IndexSpecifierList,Allocator>&){}
+
+ bool replace_(value_param_type v,node_type* x)
+ {
+ x->value()=v;
+ return true;
+ }
+
+ bool modify_(node_type*){return true;}
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+ /* serialization */
+
+ template<typename Archive>
+ void save_(Archive&,const unsigned int,const index_saver_type&)const{}
+
+ template<typename Archive>
+ void load_(Archive&,const unsigned int,const index_loader_type&){}
+#endif
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)
+ /* invariant stuff */
+
+ bool invariant_()const{return true;}
+#endif
+
+ /* access to backbone memfuns of Final class */
+
+ final_type& final(){return *static_cast<final_type*>(this);}
+ const final_type& final()const{return *static_cast<const final_type*>(this);}
+
+ final_node_type* final_header()const{return final().header();}
+
+ bool final_empty_()const{return final().empty_();}
+ std::size_t final_size_()const{return final().size_();}
+ std::size_t final_max_size_()const{return final().max_size_();}
+
+ std::pair<final_node_type*,bool> final_insert_(value_param_type x)
+ {return final().insert_(x);}
+ std::pair<final_node_type*,bool> final_insert_(
+ value_param_type x,final_node_type* position)
+ {return final().insert_(x,position);}
+
+ void final_erase_(final_node_type* x){final().erase_(x);}
+
+ void final_delete_node_(final_node_type* x){final().delete_node_(x);}
+ void final_delete_all_nodes_(){final().delete_all_nodes_();}
+ void final_clear_(){final().clear_();}
+
+ void final_swap_(final_type& x){final().swap_(x);}
+ bool final_replace_(
+ value_param_type k,final_node_type* x)
+ {return final().replace_(k,x);}
+
+ template<typename Modifier>
+ bool final_modify_(Modifier mod,final_node_type* x)
+ {return final().modify_(mod,x);}
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)
+ void final_check_invariant_()const{final().check_invariant_();}
+#endif
+};
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#endif
diff --git a/boost/boost/multi_index/detail/index_loader.hpp b/boost/boost/multi_index/detail/index_loader.hpp
new file mode 100644
index 00000000000..1f8fd8ccbc7
--- /dev/null
+++ b/boost/boost/multi_index/detail/index_loader.hpp
@@ -0,0 +1,138 @@
+/* Copyright 2003-2005 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_INDEX_LOADER_HPP
+#define BOOST_MULTI_INDEX_DETAIL_INDEX_LOADER_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <algorithm>
+#include <boost/archive/archive_exception.hpp>
+#include <boost/noncopyable.hpp>
+#include <boost/multi_index/detail/auto_space.hpp>
+#include <boost/serialization/nvp.hpp>
+#include <boost/throw_exception.hpp>
+#include <cstddef>
+
+namespace boost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* Counterpart of index_saver (check index_saver.hpp for serialization
+ * details.)* multi_index_container is in charge of supplying the info about
+ * the base sequence, and each index can subsequently load itself using the
+ * const interface of index_loader.
+ */
+
+template<typename Node,typename FinalNode,typename Allocator>
+class index_loader:private noncopyable
+{
+public:
+ index_loader(const Allocator& al,std::size_t size):
+ spc(al,size),size_(size),n(0),sorted(false)
+ {
+ }
+
+ template<class Archive>
+ void add(Node* node,Archive& ar,const unsigned int)
+ {
+ ar>>serialization::make_nvp("position",*node);
+ entries()[n++]=node;
+ }
+
+ template<class Archive>
+ void add_track(Node* node,Archive& ar,const unsigned int)
+ {
+ ar>>serialization::make_nvp("position",*node);
+ }
+
+ /* A rearranger is passed two nodes, and is expected to
+ * reposition the second after the first.
+ * If the first node is 0, then the second should be moved
+ * to the beginning of the sequence.
+ */
+
+ template<typename Rearranger,class Archive>
+ void load(Rearranger r,Archive& ar,const unsigned int)const
+ {
+ FinalNode* prev=unchecked_load_node(ar);
+ if(!prev)return;
+
+ if(!sorted){
+ std::sort(entries(),entries()+size_);
+ sorted=true;
+ }
+
+ check_node(prev);
+
+ for(;;){
+ for(;;){
+ FinalNode* node=load_node(ar);
+ if(!node)break;
+
+ if(node==prev)prev=0;
+ r(prev,node);
+
+ prev=node;
+ }
+ prev=load_node(ar);
+ if(!prev)break;
+ }
+ }
+
+private:
+ Node** entries()const{return spc.data();}
+
+ /* We try to delay sorting as much as possible just in case it
+ * is not necessary, hence this version of load_node.
+ */
+
+ template<class Archive>
+ FinalNode* unchecked_load_node(Archive& ar)const
+ {
+ Node* node=0;
+ ar>>serialization::make_nvp("pointer",node);
+ return static_cast<FinalNode*>(node);
+ }
+
+ template<class Archive>
+ FinalNode* load_node(Archive& ar)const
+ {
+ Node* node=0;
+ ar>>serialization::make_nvp("pointer",node);
+ check_node(node);
+ return static_cast<FinalNode*>(node);
+ }
+
+ void check_node(Node* node)const
+ {
+ if(node!=0&&!std::binary_search(entries(),entries()+size_,node)){
+ throw_exception(
+ archive::archive_exception(
+ archive::archive_exception::other_exception));
+ }
+ }
+
+ auto_space<Node*,Allocator> spc;
+ std::size_t size_;
+ std::size_t n;
+ mutable bool sorted;
+};
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#endif
diff --git a/boost/boost/multi_index/detail/index_matcher.hpp b/boost/boost/multi_index/detail/index_matcher.hpp
new file mode 100644
index 00000000000..18bb93559d2
--- /dev/null
+++ b/boost/boost/multi_index/detail/index_matcher.hpp
@@ -0,0 +1,248 @@
+/* Copyright 2003-2005 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_INDEX_MATCHER_HPP
+#define BOOST_MULTI_INDEX_DETAIL_INDEX_MATCHER_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <algorithm>
+#include <boost/noncopyable.hpp>
+#include <boost/multi_index/detail/auto_space.hpp>
+#include <cstddef>
+#include <functional>
+
+namespace boost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* index_matcher compares a sequence of elements against a
+ * base sequence, identifying those elements that belong to the
+ * longest subsequence which is ordered with respect to the base.
+ * For instance, if the base sequence is:
+ *
+ * 0 1 2 3 4 5 6 7 8 9
+ *
+ * and the compared sequence (not necesarilly the same length):
+ *
+ * 1 4 2 3 0 7 8 9
+ *
+ * the elements of the longest ordered subsequence are:
+ *
+ * 1 2 3 7 8 9
+ *
+ * The algorithm for obtaining such a subsequence is called
+ * Patience Sorting, described in ch. 1 of:
+ * Aldous, D., Diaconis, P.: "Longest increasing subsequences: from
+ * patience sorting to the Baik-Deift-Johansson Theorem", Bulletin
+ * of the American Mathematical Society, vol. 36, no 4, pp. 413-432,
+ * July 1999.
+ * http://www.ams.org/bull/1999-36-04/S0273-0979-99-00796-X/
+ * S0273-0979-99-00796-X.pdf
+ *
+ * This implementation is not fully generic since it assumes that
+ * the sequences given are pointed to by index iterators (having a
+ * get_node() memfun.)
+ */
+
+namespace index_matcher{
+
+/* The algorithm stores the nodes of the base sequence and a number
+ * of "piles" that are dynamically updated during the calculation
+ * stage. From a logical point of view, nodes form an independent
+ * sequence from piles. They are stored together so as to minimize
+ * allocated memory.
+ */
+
+struct entry
+{
+ entry(void* node_,std::size_t pos_=0):node(node_),pos(pos_){}
+
+ /* node stuff */
+
+ void* node;
+ std::size_t pos;
+ entry* previous;
+ bool ordered;
+
+ struct less_by_node
+ {
+ bool operator()(
+ const entry& x,const entry& y)const
+ {
+ return std::less<void*>()(x.node,y.node);
+ }
+ };
+
+ /* pile stuff */
+
+ std::size_t pile_top;
+ entry* pile_top_entry;
+
+ struct less_by_pile_top
+ {
+ bool operator()(
+ const entry& x,const entry& y)const
+ {
+ return x.pile_top<y.pile_top;
+ }
+ };
+};
+
+/* common code operating on void *'s */
+
+template<typename Allocator>
+class algorithm_base:private noncopyable
+{
+protected:
+ algorithm_base(const Allocator& al,std::size_t size):
+ spc(al,size),size_(size),n(0),sorted(false)
+ {
+ }
+
+ void add(void* node)
+ {
+ entries()[n]=entry(node,n);
+ ++n;
+ }
+
+ void begin_algorithm()const
+ {
+ if(!sorted){
+ std::sort(entries(),entries()+size_,entry::less_by_node());
+ sorted=true;
+ }
+ num_piles=0;
+ }
+
+ void add_node_to_algorithm(void* node)const
+ {
+ entry* ent=
+ std::lower_bound(
+ entries(),entries()+size_,
+ entry(node),entry::less_by_node()); /* localize entry */
+ ent->ordered=false;
+ std::size_t n=ent->pos; /* get its position */
+
+ entry dummy(0);
+ dummy.pile_top=n;
+
+ entry* pile_ent= /* find the first available pile */
+ std::lower_bound( /* to stack the entry */
+ entries(),entries()+num_piles,
+ dummy,entry::less_by_pile_top());
+
+ pile_ent->pile_top=n; /* stack the entry */
+ pile_ent->pile_top_entry=ent;
+
+ /* if not the first pile, link entry to top of the preceding pile */
+ if(pile_ent>&entries()[0]){
+ ent->previous=(pile_ent-1)->pile_top_entry;
+ }
+
+ if(pile_ent==&entries()[num_piles]){ /* new pile? */
+ ++num_piles;
+ }
+ }
+
+ void finish_algorithm()const
+ {
+ if(num_piles>0){
+ /* Mark those elements which are in their correct position, i.e. those
+ * belonging to the longest increasing subsequence. These are those
+ * elements linked from the top of the last pile.
+ */
+
+ entry* ent=entries()[num_piles-1].pile_top_entry;
+ for(std::size_t n=num_piles;n--;){
+ ent->ordered=true;
+ ent=ent->previous;
+ }
+ }
+ }
+
+ bool is_ordered(void * node)const
+ {
+ return std::lower_bound(
+ entries(),entries()+size_,
+ entry(node),entry::less_by_node())->ordered;
+ }
+
+private:
+ entry* entries()const{return spc.data();}
+
+ auto_space<entry,Allocator> spc;
+ std::size_t size_;
+ std::size_t n;
+ mutable bool sorted;
+ mutable std::size_t num_piles;
+};
+
+/* The algorithm has three phases:
+ * - Initialization, during which the nodes of the base sequence are added.
+ * - Execution.
+ * - Results querying, through the is_ordered memfun.
+ */
+
+template<typename Node,typename Allocator>
+class algorithm:private algorithm_base<Allocator>
+{
+ typedef algorithm_base<Allocator> super;
+
+public:
+ algorithm(const Allocator& al,std::size_t size):super(al,size){}
+
+ void add(Node* node)
+ {
+ super::add(node);
+ }
+
+ template<typename IndexIterator>
+ void execute(IndexIterator first,IndexIterator last)const
+ {
+ super::begin_algorithm();
+
+ for(IndexIterator it=first;it!=last;++it){
+ add_node_to_algorithm(get_node(it));
+ }
+
+ super::finish_algorithm();
+ }
+
+ bool is_ordered(Node* node)const
+ {
+ return super::is_ordered(node);
+ }
+
+private:
+ void add_node_to_algorithm(Node* node)const
+ {
+ super::add_node_to_algorithm(node);
+ }
+
+ template<typename IndexIterator>
+ static Node* get_node(IndexIterator it)
+ {
+ return static_cast<Node*>(it.get_node());
+ }
+};
+
+} /* namespace multi_index::detail::index_matcher */
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#endif
diff --git a/boost/boost/multi_index/detail/index_node_base.hpp b/boost/boost/multi_index/detail/index_node_base.hpp
new file mode 100644
index 00000000000..b1a1f6267e2
--- /dev/null
+++ b/boost/boost/multi_index/detail/index_node_base.hpp
@@ -0,0 +1,132 @@
+/* Copyright 2003-2006 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_INDEX_NODE_BASE_HPP
+#define BOOST_MULTI_INDEX_DETAIL_INDEX_NODE_BASE_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/type_traits/aligned_storage.hpp>
+#include <boost/type_traits/alignment_of.hpp>
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+#include <boost/archive/archive_exception.hpp>
+#include <boost/serialization/access.hpp>
+#include <boost/throw_exception.hpp>
+#endif
+
+namespace boost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* index_node_base tops the node hierarchy of multi_index_container. It holds
+ * the value of the element contained.
+ */
+
+template<typename Value>
+struct pod_value_holder
+{
+ typename aligned_storage<
+ sizeof(Value),
+ alignment_of<Value>::value
+ >::type space;
+};
+
+template<typename Value>
+struct index_node_base:private pod_value_holder<Value>
+{
+ typedef index_node_base base_type; /* used for serialization purposes */
+ typedef Value value_type;
+
+ value_type& value()
+ {
+ return *static_cast<value_type*>(
+ static_cast<void*>(&this->space));
+ }
+
+ const value_type& value()const
+ {
+ return *static_cast<const value_type*>(
+ static_cast<const void*>(&this->space));
+ }
+
+ static index_node_base* from_value(const value_type* p)
+ {
+ return static_cast<index_node_base *>(
+ reinterpret_cast<pod_value_holder<Value>*>( /* std 9.2.17 */
+ const_cast<value_type*>(p)));
+ }
+
+private:
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+ friend class boost::serialization::access;
+
+ /* nodes do not emit any kind of serialization info. They are
+ * fed to Boost.Serialization so that pointers to nodes are
+ * tracked correctly.
+ */
+
+ template<class Archive>
+ void serialize(Archive&,const unsigned int)
+ {
+ }
+#endif
+};
+
+template<typename Node,typename Value>
+Node* node_from_value(
+ const Value* p
+ BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(Node))
+{
+ return static_cast<Node*>(index_node_base<Value>::from_value(p));
+}
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+/* Index nodes never get constructed directly by Boost.Serialization,
+ * as archives are always fed pointers to previously existent
+ * nodes. So, if this is called it means we are dealing with a
+ * somehow invalid archive.
+ */
+
+#if defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP)
+namespace serialization{
+#else
+namespace multi_index{
+namespace detail{
+#endif
+
+template<class Archive,typename Value>
+inline void load_construct_data(
+ Archive&,boost::multi_index::detail::index_node_base<Value>*,
+ const unsigned int)
+{
+ throw_exception(
+ archive::archive_exception(archive::archive_exception::other_exception));
+}
+
+#if defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP)
+} /* namespace serialization */
+#else
+} /* namespace multi_index::detail */
+} /* namespace multi_index */
+#endif
+
+#endif
+
+} /* namespace boost */
+
+#endif
diff --git a/boost/boost/multi_index/detail/index_saver.hpp b/boost/boost/multi_index/detail/index_saver.hpp
new file mode 100644
index 00000000000..470e2b72d8a
--- /dev/null
+++ b/boost/boost/multi_index/detail/index_saver.hpp
@@ -0,0 +1,135 @@
+/* Copyright 2003-2005 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_INDEX_SAVER_HPP
+#define BOOST_MULTI_INDEX_DETAIL_INDEX_SAVER_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/multi_index/detail/index_matcher.hpp>
+#include <boost/noncopyable.hpp>
+#include <boost/serialization/nvp.hpp>
+#include <cstddef>
+
+namespace boost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* index_saver accepts a base sequence of previously saved elements
+ * and saves a possibly reordered subsequence in an efficient manner,
+ * serializing only the information needed to rearrange the subsequence
+ * based on the original order of the base.
+ * multi_index_container is in charge of supplying the info about the
+ * base sequence, and each index can subsequently save itself using the
+ * const interface of index_saver.
+ */
+
+template<typename Node,typename Allocator>
+class index_saver:private noncopyable
+{
+public:
+ index_saver(const Allocator& al,std::size_t size):alg(al,size){}
+
+ template<class Archive>
+ void add(Node* node,Archive& ar,const unsigned int)
+ {
+ ar<<serialization::make_nvp("position",*node);
+ alg.add(node);
+ }
+
+ template<class Archive>
+ void add_track(Node* node,Archive& ar,const unsigned int)
+ {
+ ar<<serialization::make_nvp("position",*node);
+ }
+
+ template<typename IndexIterator,class Archive>
+ void save(
+ IndexIterator first,IndexIterator last,Archive& ar,
+ const unsigned int)const
+ {
+ /* calculate ordered positions */
+
+ alg.execute(first,last);
+
+ /* Given a consecutive subsequence of displaced elements
+ * x1,...,xn, the following information is serialized:
+ *
+ * p0,p1,...,pn,0
+ *
+ * where pi is a pointer to xi and p0 is a pointer to the element
+ * preceding x1. Crealy, from this information is possible to
+ * restore the original order on loading time. If x1 is the first
+ * element in the sequence, the following is serialized instead:
+ *
+ * p1,p1,...,pn,0
+ *
+ * For each subsequence of n elements, n+2 pointers are serialized.
+ * An optimization policy is applied: consider for instance the
+ * sequence
+ *
+ * a,B,c,D
+ *
+ * where B and D are displaced, but c is in its correct position.
+ * Applying the schema described above we would serialize 6 pointers:
+ *
+ * p(a),p(B),0
+ * p(c),p(D),0
+ *
+ * but this can be reduced to 5 pointers by treating c as a displaced
+ * element:
+ *
+ * p(a),p(B),p(c),p(D),0
+ */
+
+ std::size_t last_saved=3; /* distance to last pointer saved */
+ for(IndexIterator it=first,prev=first;it!=last;prev=it++,++last_saved){
+ if(!alg.is_ordered(get_node(it))){
+ if(last_saved>1)save_node(get_node(prev),ar);
+ save_node(get_node(it),ar);
+ last_saved=0;
+ }
+ else if(last_saved==2)save_node(null_node(),ar);
+ }
+ if(last_saved<=2)save_node(null_node(),ar);
+
+ /* marks the end of the serialization info for [first,last) */
+
+ save_node(null_node(),ar);
+ }
+
+private:
+ template<typename IndexIterator>
+ static Node* get_node(IndexIterator it)
+ {
+ return it.get_node();
+ }
+
+ static Node* null_node(){return 0;}
+
+ template<typename Archive>
+ static void save_node(Node* node,Archive& ar)
+ {
+ ar<<serialization::make_nvp("pointer",node);
+ }
+
+ index_matcher::algorithm<Node,Allocator> alg;
+};
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#endif
diff --git a/boost/boost/multi_index/detail/invariant_assert.hpp b/boost/boost/multi_index/detail/invariant_assert.hpp
new file mode 100644
index 00000000000..5f08dce7763
--- /dev/null
+++ b/boost/boost/multi_index/detail/invariant_assert.hpp
@@ -0,0 +1,21 @@
+/* Copyright 2003-2005 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_INVARIANT_ASSERT_HPP
+#define BOOST_MULTI_INDEX_DETAIL_INVARIANT_ASSERT_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#if !defined(BOOST_MULTI_INDEX_INVARIANT_ASSERT)
+#include <boost/assert.hpp>
+#define BOOST_MULTI_INDEX_INVARIANT_ASSERT BOOST_ASSERT
+#endif
+
+#endif
diff --git a/boost/boost/multi_index/detail/is_index_list.hpp b/boost/boost/multi_index/detail/is_index_list.hpp
new file mode 100644
index 00000000000..fd801daaab8
--- /dev/null
+++ b/boost/boost/multi_index/detail/is_index_list.hpp
@@ -0,0 +1,40 @@
+/* Copyright 2003-2005 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_IS_INDEX_LIST_HPP
+#define BOOST_MULTI_INDEX_DETAIL_IS_INDEX_LIST_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/mpl/empty.hpp>
+#include <boost/mpl/is_sequence.hpp>
+
+namespace boost{
+
+namespace multi_index{
+
+namespace detail{
+
+template<typename T>
+struct is_index_list
+{
+ BOOST_STATIC_CONSTANT(bool,mpl_sequence=mpl::is_sequence<T>::value);
+ BOOST_STATIC_CONSTANT(bool,non_empty=!mpl::empty<T>::value);
+ BOOST_STATIC_CONSTANT(bool,value=mpl_sequence&&non_empty);
+};
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#endif
diff --git a/boost/boost/multi_index/detail/iter_adaptor.hpp b/boost/boost/multi_index/detail/iter_adaptor.hpp
new file mode 100644
index 00000000000..9ba90b9eb1e
--- /dev/null
+++ b/boost/boost/multi_index/detail/iter_adaptor.hpp
@@ -0,0 +1,273 @@
+/* Copyright 2003-2005 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_ITER_ADAPTOR_HPP
+#define BOOST_MULTI_INDEX_DETAIL_ITER_ADAPTOR_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/mpl/apply.hpp>
+#include <boost/multi_index/detail/prevent_eti.hpp>
+#include <boost/operators.hpp>
+
+namespace boost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* Poor man's version of boost::iterator_adaptor. Used instead of the
+ * original as compile times for the latter are significantly higher.
+ * The interface is not replicated exactly, only to the extent necessary
+ * for internal consumption.
+ */
+
+class iter_adaptor_access
+{
+public:
+ template<class Class>
+ static typename Class::reference dereference(const Class& x)
+ {
+ return x.dereference();
+ }
+
+ template<class Class>
+ static bool equal(const Class& x,const Class& y)
+ {
+ return x.equal(y);
+ }
+
+ template<class Class>
+ static void increment(Class& x)
+ {
+ x.increment();
+ }
+
+ template<class Class>
+ static void decrement(Class& x)
+ {
+ x.decrement();
+ }
+
+ template<class Class>
+ static void advance(Class& x,typename Class::difference_type n)
+ {
+ x.advance(n);
+ }
+
+ template<class Class>
+ static typename Class::difference_type distance_to(
+ const Class& x,const Class& y)
+ {
+ return x.distance_to(y);
+ }
+};
+
+template<typename Category>
+struct iter_adaptor_selector;
+
+template<class Derived,class Base>
+class forward_iter_adaptor_base:
+ public forward_iterator_helper<
+ Derived,
+ typename Base::value_type,
+ typename Base::difference_type,
+ typename Base::pointer,
+ typename Base::reference>
+{
+public:
+ typedef typename Base::reference reference;
+
+ reference operator*()const
+ {
+ return iter_adaptor_access::dereference(final());
+ }
+
+ friend bool operator==(const Derived& x,const Derived& y)
+ {
+ return iter_adaptor_access::equal(x,y);
+ }
+
+ Derived& operator++()
+ {
+ iter_adaptor_access::increment(final());
+ return final();
+ }
+
+private:
+ Derived& final(){return *static_cast<Derived*>(this);}
+ const Derived& final()const{return *static_cast<const Derived*>(this);}
+};
+
+template<>
+struct iter_adaptor_selector<std::forward_iterator_tag>
+{
+ template<class Derived,class Base>
+ struct apply
+ {
+ typedef forward_iter_adaptor_base<Derived,Base> type;
+ };
+};
+
+template<class Derived,class Base>
+class bidirectional_iter_adaptor_base:
+ public bidirectional_iterator_helper<
+ Derived,
+ typename Base::value_type,
+ typename Base::difference_type,
+ typename Base::pointer,
+ typename Base::reference>
+{
+public:
+ typedef typename Base::reference reference;
+
+ reference operator*()const
+ {
+ return iter_adaptor_access::dereference(final());
+ }
+
+ friend bool operator==(const Derived& x,const Derived& y)
+ {
+ return iter_adaptor_access::equal(x,y);
+ }
+
+ Derived& operator++()
+ {
+ iter_adaptor_access::increment(final());
+ return final();
+ }
+
+ Derived& operator--()
+ {
+ iter_adaptor_access::decrement(final());
+ return final();
+ }
+
+private:
+ Derived& final(){return *static_cast<Derived*>(this);}
+ const Derived& final()const{return *static_cast<const Derived*>(this);}
+};
+
+template<>
+struct iter_adaptor_selector<std::bidirectional_iterator_tag>
+{
+ template<class Derived,class Base>
+ struct apply
+ {
+ typedef bidirectional_iter_adaptor_base<Derived,Base> type;
+ };
+};
+
+template<class Derived,class Base>
+class random_access_iter_adaptor_base:
+ public random_access_iterator_helper<
+ Derived,
+ typename Base::value_type,
+ typename Base::difference_type,
+ typename Base::pointer,
+ typename Base::reference>
+{
+public:
+ typedef typename Base::reference reference;
+ typedef typename Base::difference_type difference_type;
+
+ reference operator*()const
+ {
+ return iter_adaptor_access::dereference(final());
+ }
+
+ friend bool operator==(const Derived& x,const Derived& y)
+ {
+ return iter_adaptor_access::equal(x,y);
+ }
+
+ friend bool operator<(const Derived& x,const Derived& y)
+ {
+ return iter_adaptor_access::distance_to(x,y)>0;
+ }
+
+ Derived& operator++()
+ {
+ iter_adaptor_access::increment(final());
+ return final();
+ }
+
+ Derived& operator--()
+ {
+ iter_adaptor_access::decrement(final());
+ return final();
+ }
+
+ Derived& operator+=(difference_type n)
+ {
+ iter_adaptor_access::advance(final(),n);
+ return final();
+ }
+
+ Derived& operator-=(difference_type n)
+ {
+ iter_adaptor_access::advance(final(),-n);
+ return final();
+ }
+
+ friend difference_type operator-(const Derived& x,const Derived& y)
+ {
+ return iter_adaptor_access::distance_to(y,x);
+ }
+
+private:
+ Derived& final(){return *static_cast<Derived*>(this);}
+ const Derived& final()const{return *static_cast<const Derived*>(this);}
+};
+
+template<>
+struct iter_adaptor_selector<std::random_access_iterator_tag>
+{
+ template<class Derived,class Base>
+ struct apply
+ {
+ typedef random_access_iter_adaptor_base<Derived,Base> type;
+ };
+};
+
+template<class Derived,class Base>
+struct iter_adaptor_base
+{
+ typedef iter_adaptor_selector<
+ typename Base::iterator_category> selector;
+ typedef typename prevent_eti<
+ selector,
+ typename mpl::apply2<
+ selector,Derived,Base>::type
+ >::type type;
+};
+
+template<class Derived,class Base>
+class iter_adaptor:public iter_adaptor_base<Derived,Base>::type
+{
+protected:
+ iter_adaptor(){}
+ explicit iter_adaptor(const Base& b_):b(b_){}
+
+ const Base& base_reference()const{return b;}
+ Base& base_reference(){return b;}
+
+private:
+ Base b;
+};
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#endif
diff --git a/boost/boost/multi_index/detail/modify_key_adaptor.hpp b/boost/boost/multi_index/detail/modify_key_adaptor.hpp
new file mode 100644
index 00000000000..6f3cbfa5084
--- /dev/null
+++ b/boost/boost/multi_index/detail/modify_key_adaptor.hpp
@@ -0,0 +1,49 @@
+/* Copyright 2003-2005 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_MODIFY_KEY_ADAPTOR_HPP
+#define BOOST_MULTI_INDEX_DETAIL_MODIFY_KEY_ADAPTOR_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+namespace boost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* Functional adaptor to resolve modify_key as a call to modify.
+ * Preferred over compose_f_gx and stuff cause it eliminates problems
+ * with references to references, dealing with function pointers, etc.
+ */
+
+template<typename Modifier,typename Value,typename KeyFromValue>
+struct modify_key_adaptor
+{
+
+ modify_key_adaptor(Modifier mod_,KeyFromValue kfv_):mod(mod_),kfv(kfv_){}
+
+ void operator()(Value& x)
+ {
+ mod(kfv(x));
+ }
+
+private:
+ Modifier mod;
+ KeyFromValue kfv;
+};
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#endif
diff --git a/boost/boost/multi_index/detail/msvc_index_specifier.hpp b/boost/boost/multi_index/detail/msvc_index_specifier.hpp
new file mode 100644
index 00000000000..694e866f731
--- /dev/null
+++ b/boost/boost/multi_index/detail/msvc_index_specifier.hpp
@@ -0,0 +1,69 @@
+/* Copyright 2003-2005 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_MSVC_INDEX_SPECIFIER_HPP
+#define BOOST_MULTI_INDEX_DETAIL_MSVC_INDEX_SPECIFIER_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/detail/workaround.hpp>
+
+#if BOOST_WORKAROUND(BOOST_MSVC,<1310)
+/* Workaround for a problem in MSVC with dependent template typedefs
+ * when accesing index specifiers.
+ * Modeled after <boost/mpl/aux_/msvc_dtw.hpp> (thanks, Aleksey!)
+ */
+
+#include <boost/mpl/aux_/msvc_never_true.hpp>
+
+namespace boost{
+
+namespace multi_index{
+
+namespace detail{
+
+template<typename IndexSpecifier>
+struct msvc_index_specifier
+{
+ template<bool> struct fake_index_type:IndexSpecifier{};
+ template<> struct fake_index_type<true>
+ {
+ template<typename Super>
+ struct node_class{};
+
+ template<typename Super>
+ struct index_class{};
+ };
+
+ template<typename Super>
+ struct result_node_class:
+ fake_index_type<mpl::aux::msvc_never_true<IndexSpecifier>::value>::
+ template node_class<Super>
+ {
+ };
+
+ template<typename Super>
+ struct result_index_class:
+ fake_index_type<mpl::aux::msvc_never_true<IndexSpecifier>::value>::
+ template index_class<Super>
+ {
+ };
+};
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#endif /* workaround */
+
+#endif
diff --git a/boost/boost/multi_index/detail/no_duplicate_tags.hpp b/boost/boost/multi_index/detail/no_duplicate_tags.hpp
new file mode 100644
index 00000000000..dbca6af4fa3
--- /dev/null
+++ b/boost/boost/multi_index/detail/no_duplicate_tags.hpp
@@ -0,0 +1,97 @@
+/* Copyright 2003-2005 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_NO_DUPLICATE_TAGS_HPP
+#define BOOST_MULTI_INDEX_DETAIL_NO_DUPLICATE_TAGS_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/mpl/fold.hpp>
+#include <boost/mpl/set/set0.hpp>
+
+namespace boost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* no_duplicate_tags check at compile-time that a tag list
+ * has no duplicate tags.
+ * The algorithm deserves some explanation: tags
+ * are sequentially inserted into a mpl::set if they were
+ * not already present. Due to the magic of mpl::set
+ * (mpl::has_key is contant time), this operation takes linear
+ * time, and even MSVC++ 6.5 handles it gracefully (other obvious
+ * solutions are quadratic.)
+ */
+
+struct duplicate_tag_mark{};
+
+struct duplicate_tag_marker
+{
+ template <typename MplSet,typename Tag>
+ struct apply
+ {
+ typedef mpl::s_item<
+ typename mpl::if_<mpl::has_key<MplSet,Tag>,duplicate_tag_mark,Tag>::type,
+ MplSet
+ > type;
+ };
+};
+
+template<typename TagList>
+struct no_duplicate_tags
+{
+ typedef typename mpl::fold<
+ TagList,
+ mpl::set0<>,
+ duplicate_tag_marker
+ >::type aux;
+
+ BOOST_STATIC_CONSTANT(
+ bool,value=!(mpl::has_key<aux,duplicate_tag_mark>::value));
+};
+
+/* Variant for an index list: duplication is checked
+ * across all the indices.
+ */
+
+struct duplicate_tag_list_marker
+{
+ template <typename MplSet,typename Index>
+ struct apply:mpl::fold<
+ BOOST_DEDUCED_TYPENAME Index::tag_list,
+ MplSet,
+ duplicate_tag_marker>
+ {
+ };
+};
+
+template<typename IndexList>
+struct no_duplicate_tags_in_index_list
+{
+ typedef typename mpl::fold<
+ IndexList,
+ mpl::set0<>,
+ duplicate_tag_list_marker
+ >::type aux;
+
+ BOOST_STATIC_CONSTANT(
+ bool,value=!(mpl::has_key<aux,duplicate_tag_mark>::value));
+};
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#endif
diff --git a/boost/boost/multi_index/detail/node_type.hpp b/boost/boost/multi_index/detail/node_type.hpp
new file mode 100644
index 00000000000..907535aed6c
--- /dev/null
+++ b/boost/boost/multi_index/detail/node_type.hpp
@@ -0,0 +1,79 @@
+/* Copyright 2003-2005 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_NODE_TYPE_HPP
+#define BOOST_MULTI_INDEX_DETAIL_NODE_TYPE_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/detail/workaround.hpp>
+#include <boost/mpl/bind.hpp>
+#include <boost/mpl/reverse_iter_fold.hpp>
+#include <boost/mpl/deref.hpp>
+#include <boost/multi_index_container_fwd.hpp>
+#include <boost/multi_index/detail/header_holder.hpp>
+#include <boost/multi_index/detail/index_node_base.hpp>
+#include <boost/multi_index/detail/is_index_list.hpp>
+#include <boost/multi_index/detail/msvc_index_specifier.hpp>
+#include <boost/static_assert.hpp>
+
+namespace boost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* MPL machinery to construct the internal node type associated to an
+ * index list.
+ */
+
+#if BOOST_WORKAROUND(BOOST_MSVC,<1310)
+struct index_node_applier
+{
+ template<typename IndexSpecifierIterator,typename Super>
+ struct apply:
+ msvc_index_specifier< mpl::deref<IndexSpecifierIterator>::type >::
+ template result_node_class<Super>
+ {
+ };
+};
+#else
+struct index_node_applier
+{
+ template<typename IndexSpecifierIterator,typename Super>
+ struct apply
+ {
+ typedef typename mpl::deref<IndexSpecifierIterator>::type index_specifier;
+ typedef typename index_specifier::
+ BOOST_NESTED_TEMPLATE node_class<Super>::type type;
+ };
+};
+#endif
+
+template<typename Value,typename IndexSpecifierList,typename Allocator>
+struct multi_index_node_type
+{
+ BOOST_STATIC_ASSERT(detail::is_index_list<IndexSpecifierList>::value);
+
+ typedef typename mpl::reverse_iter_fold<
+ IndexSpecifierList,
+ index_node_base<Value>,
+ mpl::bind2<index_node_applier,mpl::_2,mpl::_1>
+ >::type type;
+};
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#endif
diff --git a/boost/boost/multi_index/detail/ord_index_args.hpp b/boost/boost/multi_index/detail/ord_index_args.hpp
new file mode 100644
index 00000000000..86d5967e224
--- /dev/null
+++ b/boost/boost/multi_index/detail/ord_index_args.hpp
@@ -0,0 +1,83 @@
+/* Copyright 2003-2005 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_ORD_INDEX_ARGS_HPP
+#define BOOST_MULTI_INDEX_DETAIL_ORD_INDEX_ARGS_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/mpl/aux_/na.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/multi_index/tag.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <functional>
+
+namespace boost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* Oredered index specifiers can be instantiated in two forms:
+ *
+ * (ordered_unique|ordered_non_unique)<
+ * KeyFromValue,Compare=std::less<KeyFromValue::result_type> >
+ * (ordered_unique|ordered_non_unique)<
+ * TagList,KeyFromValue,Compare=std::less<KeyFromValue::result_type> >
+ *
+ * index_args implements the machinery to accept this argument-dependent
+ * polymorphism.
+ */
+
+template<typename KeyFromValue>
+struct index_args_default_compare
+{
+ typedef std::less<typename KeyFromValue::result_type> type;
+};
+
+template<typename Arg1,typename Arg2,typename Arg3>
+struct ordered_index_args
+{
+ typedef is_tag<Arg1> full_form;
+
+ typedef typename mpl::if_<
+ full_form,
+ Arg1,
+ tag< > >::type tag_list_type;
+ typedef typename mpl::if_<
+ full_form,
+ Arg2,
+ Arg1>::type key_from_value_type;
+ typedef typename mpl::if_<
+ full_form,
+ Arg3,
+ Arg2>::type supplied_compare_type;
+ typedef typename mpl::eval_if<
+ mpl::is_na<supplied_compare_type>,
+ index_args_default_compare<key_from_value_type>,
+ mpl::identity<supplied_compare_type>
+ >::type compare_type;
+
+ BOOST_STATIC_ASSERT(is_tag<tag_list_type>::value);
+ BOOST_STATIC_ASSERT(!mpl::is_na<key_from_value_type>::value);
+ BOOST_STATIC_ASSERT(!mpl::is_na<compare_type>::value);
+};
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#endif
diff --git a/boost/boost/multi_index/detail/ord_index_node.hpp b/boost/boost/multi_index/detail/ord_index_node.hpp
new file mode 100644
index 00000000000..e83e67d80fb
--- /dev/null
+++ b/boost/boost/multi_index/detail/ord_index_node.hpp
@@ -0,0 +1,580 @@
+/* Copyright 2003-2007 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ *
+ * The internal implementation of red-black trees is based on that of SGI STL
+ * stl_tree.h file:
+ *
+ * Copyright (c) 1996,1997
+ * Silicon Graphics Computer Systems, Inc.
+ *
+ * Permission to use, copy, modify, distribute and sell this software
+ * and its documentation for any purpose is hereby granted without fee,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear
+ * in supporting documentation. Silicon Graphics makes no
+ * representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ *
+ * Copyright (c) 1994
+ * Hewlett-Packard Company
+ *
+ * Permission to use, copy, modify, distribute and sell this software
+ * and its documentation for any purpose is hereby granted without fee,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear
+ * in supporting documentation. Hewlett-Packard Company makes no
+ * representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_ORD_INDEX_NODE_HPP
+#define BOOST_MULTI_INDEX_DETAIL_ORD_INDEX_NODE_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <cstddef>
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_COMPRESSED_ORDERED_INDEX_NODES)
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/multi_index/detail/uintptr_type.hpp>
+#include <boost/type_traits/alignment_of.hpp>
+#endif
+
+namespace boost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* definition of red-black nodes for ordered_index */
+
+enum ordered_index_color{red=false,black=true};
+enum ordered_index_side{to_left=false,to_right=true};
+
+struct ordered_index_node_impl; /* fwd decl. */
+
+struct ordered_index_node_std_base
+{
+ typedef ordered_index_color& color_ref;
+ typedef ordered_index_node_impl*& parent_ref;
+
+ ordered_index_color& color(){return color_;}
+ ordered_index_color color()const{return color_;}
+ ordered_index_node_impl*& parent(){return parent_;}
+ ordered_index_node_impl* parent()const{return parent_;}
+ ordered_index_node_impl*& left(){return left_;}
+ ordered_index_node_impl* left()const{return left_;}
+ ordered_index_node_impl*& right(){return right_;}
+ ordered_index_node_impl* right()const{return right_;}
+
+private:
+ ordered_index_color color_;
+ ordered_index_node_impl* parent_;
+ ordered_index_node_impl* left_;
+ ordered_index_node_impl* right_;
+};
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_COMPRESSED_ORDERED_INDEX_NODES)
+/* If ordered_index_node_impl has even alignment, we can use the least
+ * significant bit of one of the ordered_index_node_impl pointers to
+ * store color information. This typically reduces the size of
+ * ordered_index_node_impl by 25%.
+ */
+
+#if defined(BOOST_MSVC)
+/* This code casts pointers to an integer type that has been computed
+ * to be large enough to hold the pointer, however the metaprogramming
+ * logic is not always spotted by the VC++ code analyser that issues a
+ * long list of warnings.
+ */
+
+#pragma warning(push)
+#pragma warning(disable:4312 4311)
+#endif
+
+struct ordered_index_node_compressed_base
+{
+ struct color_ref
+ {
+ color_ref(uintptr_type* r_):r(r_){}
+
+ operator ordered_index_color()const
+ {
+ return ordered_index_color(*r&uintptr_type(1));
+ }
+
+ color_ref& operator=(ordered_index_color c)
+ {
+ *r&=~uintptr_type(1);
+ *r|=uintptr_type(c);
+ return *this;
+ }
+
+ color_ref& operator=(const color_ref& x)
+ {
+ return operator=(x.operator ordered_index_color());
+ }
+
+ private:
+ uintptr_type* r;
+ };
+
+ struct parent_ref
+ {
+ parent_ref(uintptr_type* r_):r(r_){}
+
+ operator ordered_index_node_impl*()const
+ {
+ return (ordered_index_node_impl*)(void*)(*r&~uintptr_type(1));
+ }
+
+ parent_ref& operator=(ordered_index_node_impl* p)
+ {
+ *r=((uintptr_type)(void*)p)|(*r&uintptr_type(1));
+ return *this;
+ }
+
+ parent_ref& operator=(const parent_ref& x)
+ {
+ return operator=(x.operator ordered_index_node_impl*());
+ }
+
+ ordered_index_node_impl* operator->()const
+ {
+ return operator ordered_index_node_impl*();
+ }
+
+ private:
+ uintptr_type* r;
+ };
+
+ color_ref color(){return color_ref(&parentcolor_);}
+ ordered_index_color color()const
+ {
+ return ordered_index_color(parentcolor_&std::size_t(1ul));
+ }
+
+ parent_ref parent(){return parent_ref(&parentcolor_);}
+ ordered_index_node_impl* parent()const
+ {
+ return (ordered_index_node_impl*)(void*)(parentcolor_&~uintptr_type(1));
+ }
+
+ ordered_index_node_impl*& left(){return left_;}
+ ordered_index_node_impl* left()const{return left_;}
+ ordered_index_node_impl*& right(){return right_;}
+ ordered_index_node_impl* right()const{return right_;}
+
+private:
+ uintptr_type parentcolor_;
+ ordered_index_node_impl* left_;
+ ordered_index_node_impl* right_;
+};
+#if defined(BOOST_MSVC)
+#pragma warning(pop)
+#endif
+#endif
+
+struct ordered_index_node_impl:
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_COMPRESSED_ORDERED_INDEX_NODES)
+ mpl::if_c<
+ !(has_uintptr_type::value)||
+ (alignment_of<ordered_index_node_compressed_base>::value%2),
+ ordered_index_node_std_base,
+ ordered_index_node_compressed_base
+ >::type
+#else
+ ordered_index_node_std_base
+#endif
+
+{
+ /* interoperability with bidir_node_iterator */
+
+ static void increment(ordered_index_node_impl*& x)
+ {
+ if(x->right()){
+ x=x->right();
+ while(x->left())x=x->left();
+ }
+ else{
+ ordered_index_node_impl* y=x->parent();
+ while(x==y->right()){
+ x=y;
+ y=y->parent();
+ }
+ if(x->right()!=y)x=y;
+ }
+ }
+
+ static void decrement(ordered_index_node_impl*& x)
+ {
+ if(x->color()==red&&x->parent()->parent()==x){
+ x=x->right();
+ }
+ else if(x->left()){
+ ordered_index_node_impl* y=x->left();
+ while(y->right())y=y->right();
+ x=y;
+ }else{
+ ordered_index_node_impl* y=x->parent();
+ while(x==y->left()){
+ x=y;
+ y=y->parent();
+ }
+ x=y;
+ }
+ }
+
+ /* algorithmic stuff */
+
+ static void rotate_left(
+ ordered_index_node_impl* x,parent_ref root)
+ {
+ ordered_index_node_impl* y=x->right();
+ x->right()=y->left();
+ if(y->left())y->left()->parent()=x;
+ y->parent()=x->parent();
+
+ if(x==root) root=y;
+ else if(x==x->parent()->left())x->parent()->left()=y;
+ else x->parent()->right()=y;
+ y->left()=x;
+ x->parent()=y;
+ }
+
+ static ordered_index_node_impl* minimum(ordered_index_node_impl* x)
+ {
+ while(x->left())x=x->left();
+ return x;
+ }
+
+ static ordered_index_node_impl* maximum(ordered_index_node_impl* x)
+ {
+ while(x->right())x=x->right();
+ return x;
+ }
+
+ static void rotate_right(
+ ordered_index_node_impl* x,parent_ref root)
+ {
+ ordered_index_node_impl* y=x->left();
+ x->left()=y->right();
+ if(y->right())y->right()->parent()=x;
+ y->parent()=x->parent();
+
+ if(x==root) root=y;
+ else if(x==x->parent()->right())x->parent()->right()=y;
+ else x->parent()->left()=y;
+ y->right()=x;
+ x->parent()=y;
+ }
+
+ static void rebalance(
+ ordered_index_node_impl* x,parent_ref root)
+ {
+ x->color()=red;
+ while(x!=root&&x->parent()->color()==red){
+ if(x->parent()==x->parent()->parent()->left()){
+ ordered_index_node_impl* y=x->parent()->parent()->right();
+ if(y&&y->color()==red){
+ x->parent()->color()=black;
+ y->color()=black;
+ x->parent()->parent()->color()=red;
+ x=x->parent()->parent();
+ }
+ else{
+ if(x==x->parent()->right()){
+ x=x->parent();
+ rotate_left(x,root);
+ }
+ x->parent()->color()=black;
+ x->parent()->parent()->color()=red;
+ rotate_right(x->parent()->parent(),root);
+ }
+ }
+ else{
+ ordered_index_node_impl* y=x->parent()->parent()->left();
+ if(y&&y->color()==red){
+ x->parent()->color()=black;
+ y->color()=black;
+ x->parent()->parent()->color()=red;
+ x=x->parent()->parent();
+ }
+ else{
+ if(x==x->parent()->left()){
+ x=x->parent();
+ rotate_right(x,root);
+ }
+ x->parent()->color()=black;
+ x->parent()->parent()->color()=red;
+ rotate_left(x->parent()->parent(),root);
+ }
+ }
+ }
+ root->color()=black;
+ }
+
+ static void link(
+ ordered_index_node_impl* x,
+ ordered_index_side side,ordered_index_node_impl* position,
+ ordered_index_node_impl* header)
+ {
+ if(side==to_left){
+ position->left()=x; /* also makes leftmost=x when parent==header */
+ if(position==header){
+ header->parent()=x;
+ header->right()=x;
+ }
+ else if(position==header->left()){
+ header->left()=x; /* maintain leftmost pointing to min node */
+ }
+ }
+ else{
+ position->right()=x;
+ if(position==header->right()){
+ header->right()=x; /* maintain rightmost pointing to max node */
+ }
+ }
+ x->parent()=position;
+ x->left()=0;
+ x->right()=0;
+ ordered_index_node_impl::rebalance(x,header->parent());
+ }
+
+ static ordered_index_node_impl* rebalance_for_erase(
+ ordered_index_node_impl* z,parent_ref root,
+ ordered_index_node_impl*& leftmost,ordered_index_node_impl*& rightmost)
+ {
+ ordered_index_node_impl* y=z;
+ ordered_index_node_impl* x=0;
+ ordered_index_node_impl* x_parent=0;
+ if(y->left()==0){ /* z has at most one non-null child. y==z. */
+ x=y->right(); /* x might be null */
+ }
+ else{
+ if(y->right()==0) { /* z has exactly one non-null child. y==z. */
+ x=y->left(); /* x is not null */
+ }
+ else{ /* z has two non-null children. Set y to */
+ y=y->right(); /* z's successor. x might be null. */
+ while(y->left())y=y->left();
+ x=y->right();
+ }
+ }
+ if(y!=z){
+ z->left()->parent()=y; /* relink y in place of z. y is z's successor */
+ y->left()=z->left();
+ if(y!=z->right()){
+ x_parent=y->parent();
+ if(x) x->parent()=y->parent();
+ y->parent()->left()=x; /* y must be a child of left */
+ y->right()=z->right();
+ z->right()->parent()=y;
+ }
+ else{
+ x_parent=y;
+ }
+
+ if(root==z) root=y;
+ else if(z->parent()->left()==z)z->parent()->left()=y;
+ else z->parent()->right()=y;
+ y->parent()=z->parent();
+ ordered_index_color c=y->color();
+ y->color()=z->color();
+ z->color()=c;
+ y=z; /* y now points to node to be actually deleted */
+ }
+ else{ /* y==z */
+ x_parent=y->parent();
+ if(x)x->parent()=y->parent();
+ if(root==z){
+ root=x;
+ }
+ else{
+ if(z->parent()->left()==z)z->parent()->left()=x;
+ else z->parent()->right()=x;
+ }
+ if(leftmost==z){
+ if(z->right()==0){ /* z->left() must be null also */
+ leftmost=z->parent();
+ }
+ else{
+ leftmost=minimum(x); /* makes leftmost==header if z==root */
+ }
+ }
+ if(rightmost==z){
+ if(z->left()==0){ /* z->right() must be null also */
+ rightmost=z->parent();
+ }
+ else{ /* x==z->left() */
+ rightmost=maximum(x); /* makes rightmost==header if z==root */
+ }
+ }
+ }
+ if(y->color()!=red){
+ while(x!=root&&(x==0 || x->color()==black)){
+ if(x==x_parent->left()){
+ ordered_index_node_impl* w=x_parent->right();
+ if(w->color()==red){
+ w->color()=black;
+ x_parent->color()=red;
+ rotate_left(x_parent,root);
+ w=x_parent->right();
+ }
+ if((w->left()==0||w->left()->color()==black) &&
+ (w->right()==0||w->right()->color()==black)){
+ w->color()=red;
+ x=x_parent;
+ x_parent=x_parent->parent();
+ }
+ else{
+ if(w->right()==0
+ || w->right()->color()==black){
+ if(w->left()) w->left()->color()=black;
+ w->color()=red;
+ rotate_right(w,root);
+ w=x_parent->right();
+ }
+ w->color()=x_parent->color();
+ x_parent->color()=black;
+ if(w->right())w->right()->color()=black;
+ rotate_left(x_parent,root);
+ break;
+ }
+ }
+ else{ /* same as above,with right <-> left */
+ ordered_index_node_impl* w=x_parent->left();
+ if(w->color()==red){
+ w->color()=black;
+ x_parent->color()=red;
+ rotate_right(x_parent,root);
+ w=x_parent->left();
+ }
+ if((w->right()==0||w->right()->color()==black) &&
+ (w->left()==0||w->left()->color()==black)){
+ w->color()=red;
+ x=x_parent;
+ x_parent=x_parent->parent();
+ }
+ else{
+ if(w->left()==0||w->left()->color()==black){
+ if(w->right())w->right()->color()=black;
+ w->color()=red;
+ rotate_left(w,root);
+ w=x_parent->left();
+ }
+ w->color()=x_parent->color();
+ x_parent->color()=black;
+ if(w->left())w->left()->color()=black;
+ rotate_right(x_parent,root);
+ break;
+ }
+ }
+ }
+ if(x)x->color()=black;
+ }
+ return y;
+ }
+
+ static void restore(
+ ordered_index_node_impl* x,ordered_index_node_impl* position,
+ ordered_index_node_impl* header)
+ {
+ if(position->left()==0||position->left()==header){
+ link(x,to_left,position,header);
+ }
+ else{
+ decrement(position);
+ link(x,to_right,position,header);
+ }
+ }
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)
+ /* invariant stuff */
+
+ static std::size_t black_count(
+ ordered_index_node_impl* node,ordered_index_node_impl* root)
+ {
+ if(!node)return 0;
+ std::size_t sum=0;
+ for(;;){
+ if(node->color()==black)++sum;
+ if(node==root)break;
+ node=node->parent();
+ }
+ return sum;
+ }
+#endif
+};
+
+template<typename Super>
+struct ordered_index_node_trampoline:ordered_index_node_impl{};
+
+template<typename Super>
+struct ordered_index_node:Super,ordered_index_node_trampoline<Super>
+{
+private:
+ typedef ordered_index_node_trampoline<Super> impl_type;
+ typedef typename impl_type::color_ref color_ref;
+ typedef typename impl_type::parent_ref parent_ref;
+
+public:
+ color_ref color(){return impl_type::color();}
+ ordered_index_color color()const{return impl_type::color();}
+ parent_ref parent(){return impl_type::parent();}
+ ordered_index_node_impl* parent()const{return impl_type::parent();}
+ ordered_index_node_impl*& left(){return impl_type::left();}
+ ordered_index_node_impl* left()const{return impl_type::left();}
+ ordered_index_node_impl*& right(){return impl_type::right();}
+ ordered_index_node_impl* right()const{return impl_type::right();}
+
+ ordered_index_node_impl* impl(){return static_cast<impl_type*>(this);}
+ const ordered_index_node_impl* impl()const
+ {return static_cast<const impl_type*>(this);}
+
+ static ordered_index_node* from_impl(ordered_index_node_impl *x)
+ {
+ return static_cast<ordered_index_node*>(static_cast<impl_type*>(x));
+ }
+
+ static const ordered_index_node* from_impl(const ordered_index_node_impl* x)
+ {
+ return static_cast<const ordered_index_node*>(
+ static_cast<const impl_type*>(x));
+ }
+
+ /* interoperability with bidir_node_iterator */
+
+ static void increment(ordered_index_node*& x)
+ {
+ ordered_index_node_impl* xi=x->impl();
+ impl_type::increment(xi);
+ x=from_impl(xi);
+ }
+
+ static void decrement(ordered_index_node*& x)
+ {
+ ordered_index_node_impl* xi=x->impl();
+ impl_type::decrement(xi);
+ x=from_impl(xi);
+ }
+};
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#endif
diff --git a/boost/boost/multi_index/detail/ord_index_ops.hpp b/boost/boost/multi_index/detail/ord_index_ops.hpp
new file mode 100644
index 00000000000..0286d9d9fca
--- /dev/null
+++ b/boost/boost/multi_index/detail/ord_index_ops.hpp
@@ -0,0 +1,125 @@
+/* Copyright 2003-2005 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ *
+ * The internal implementation of red-black trees is based on that of SGI STL
+ * stl_tree.h file:
+ *
+ * Copyright (c) 1996,1997
+ * Silicon Graphics Computer Systems, Inc.
+ *
+ * Permission to use, copy, modify, distribute and sell this software
+ * and its documentation for any purpose is hereby granted without fee,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear
+ * in supporting documentation. Silicon Graphics makes no
+ * representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ *
+ * Copyright (c) 1994
+ * Hewlett-Packard Company
+ *
+ * Permission to use, copy, modify, distribute and sell this software
+ * and its documentation for any purpose is hereby granted without fee,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear
+ * in supporting documentation. Hewlett-Packard Company makes no
+ * representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_ORD_INDEX_OPS_HPP
+#define BOOST_MULTI_INDEX_DETAIL_ORD_INDEX_OPS_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+namespace boost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* Common code for index memfuns having templatized and
+ * non-templatized versions.
+ */
+
+template<
+ typename Node,typename KeyFromValue,
+ typename CompatibleKey,typename CompatibleCompare
+>
+inline Node* ordered_index_find(
+ Node* header,const KeyFromValue& key,const CompatibleKey& x,
+ const CompatibleCompare& comp)
+{
+ Node* y=header;
+ Node* z=Node::from_impl(header->parent());
+
+ while (z){
+ if(!comp(key(z->value()),x)){
+ y=z;
+ z=Node::from_impl(z->left());
+ }
+ else z=Node::from_impl(z->right());
+ }
+
+ return (y==header||comp(x,key(y->value())))?header:y;
+}
+
+template<
+ typename Node,typename KeyFromValue,
+ typename CompatibleKey,typename CompatibleCompare
+>
+inline Node* ordered_index_lower_bound(
+ Node* header,const KeyFromValue& key,const CompatibleKey& x,
+ const CompatibleCompare& comp)
+{
+ Node* y=header;
+ Node* z=Node::from_impl(header->parent());
+
+ while(z){
+ if(!comp(key(z->value()),x)){
+ y=z;
+ z=Node::from_impl(z->left());
+ }
+ else z=Node::from_impl(z->right());
+ }
+
+ return y;
+}
+
+template<
+ typename Node,typename KeyFromValue,
+ typename CompatibleKey,typename CompatibleCompare
+>
+inline Node* ordered_index_upper_bound(
+ Node* header,const KeyFromValue& key,const CompatibleKey& x,
+ const CompatibleCompare& comp)
+{
+ Node* y=header;
+ Node* z=Node::from_impl(header->parent());
+
+ while(z){
+ if(comp(x,key(z->value()))){
+ y=z;
+ z=Node::from_impl(z->left());
+ }
+ else z=Node::from_impl(z->right());
+ }
+
+ return y;
+}
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#endif
diff --git a/boost/boost/multi_index/detail/prevent_eti.hpp b/boost/boost/multi_index/detail/prevent_eti.hpp
new file mode 100644
index 00000000000..39edf60a2ec
--- /dev/null
+++ b/boost/boost/multi_index/detail/prevent_eti.hpp
@@ -0,0 +1,60 @@
+/* Copyright 2003-2005 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_PREVENT_ETI_HPP
+#define BOOST_MULTI_INDEX_DETAIL_PREVENT_ETI_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/detail/workaround.hpp>
+
+#if BOOST_WORKAROUND(BOOST_MSVC,<1300)
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/integral_c.hpp>
+#include <boost/mpl/aux_/msvc_never_true.hpp>
+#endif
+
+namespace boost{
+
+namespace multi_index{
+
+namespace detail{
+
+#if BOOST_WORKAROUND(BOOST_MSVC,<1300)
+/* See
+ * http://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl?Effective_MPL
+ * Item 5.6, Beware of the 'early template instantiation' trap.
+ */
+
+template<typename Type,typename Construct>
+struct prevent_eti
+{
+ typedef typename mpl::if_<
+ mpl::aux::msvc_never_true<Type>,
+ mpl::integral_c<int,0>,
+ Construct
+ >::type type;
+};
+#else
+template<typename Type,typename Construct>
+struct prevent_eti
+{
+ typedef Construct type;
+};
+#endif
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#endif
diff --git a/boost/boost/multi_index/detail/rnd_index_loader.hpp b/boost/boost/multi_index/detail/rnd_index_loader.hpp
new file mode 100644
index 00000000000..4a58b719dbe
--- /dev/null
+++ b/boost/boost/multi_index/detail/rnd_index_loader.hpp
@@ -0,0 +1,163 @@
+/* Copyright 2003-2006 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_RND_INDEX_LOADER_HPP
+#define BOOST_MULTI_INDEX_DETAIL_RND_INDEX_LOADER_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <algorithm>
+#include <boost/multi_index/detail/auto_space.hpp>
+#include <boost/multi_index/detail/rnd_index_ptr_array.hpp>
+#include <boost/noncopyable.hpp>
+#include <cstddef>
+
+namespace boost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* This class implements a serialization rearranger for random access
+ * indices. In order to achieve O(n) performance, the following strategy
+ * is followed: the nodes of the index are handled as if in a bidirectional
+ * list, where the next pointers are stored in the original
+ * random_access_index_ptr_array and the prev pointers are stored in
+ * an auxiliary array. Rearranging of nodes in such a bidirectional list
+ * is constant time. Once all the arrangements are performed (on destruction
+ * time) the list is traversed in reverse order and
+ * pointers are swapped and set accordingly so that they recover its
+ * original semantics ( *(node->up())==node ) while retaining the
+ * new order.
+ */
+
+template<typename Allocator>
+class random_access_index_loader_base:private noncopyable
+{
+protected:
+ typedef random_access_index_node_impl node_type;
+ typedef random_access_index_ptr_array<Allocator> ptr_array_type;
+
+ random_access_index_loader_base(const Allocator& al_,ptr_array_type& ptrs_):
+ al(al_),
+ ptrs(ptrs_),
+ header(*ptrs.end()),
+ prev_spc(al,0),
+ preprocessed(false)
+ {}
+
+ ~random_access_index_loader_base()
+ {
+ if(preprocessed)
+ {
+ node_type* n=header;
+ next(n)=n;
+
+ for(std::size_t i=ptrs.size();i--;){
+ n=prev(n);
+ std::size_t d=position(n);
+ if(d!=i){
+ node_type* m=prev(next_at(i));
+ std::swap(m->up(),n->up());
+ next_at(d)=next_at(i);
+ std::swap(prev_at(d),prev_at(i));
+ }
+ next(n)=n;
+ }
+ }
+ }
+
+ void rearrange(node_type* position,node_type *x)
+ {
+ preprocess(); /* only incur this penalty if rearrange() is ever called */
+ if(!position)position=header;
+ next(prev(x))=next(x);
+ prev(next(x))=prev(x);
+ prev(x)=position;
+ next(x)=next(position);
+ next(prev(x))=prev(next(x))=x;
+ }
+
+private:
+ void preprocess()
+ {
+ if(!preprocessed){
+ /* get space for the auxiliary prev array */
+ auto_space<node_type*,Allocator> tmp(al,ptrs.size()+1);
+ prev_spc.swap(tmp);
+
+ /* prev_spc elements point to the prev nodes */
+ std::rotate_copy(ptrs.begin(),ptrs.end(),ptrs.end()+1,prev_spc.data());
+
+ /* ptrs elements point to the next nodes */
+ std::rotate(ptrs.begin(),ptrs.begin()+1,ptrs.end()+1);
+
+ preprocessed=true;
+ }
+ }
+
+ std::size_t position(node_type* x)const
+ {
+ return (std::size_t)(x->up()-ptrs.begin());
+ }
+
+ node_type*& next_at(std::size_t n)const
+ {
+ return *ptrs.at(n);
+ }
+
+ node_type*& prev_at(std::size_t n)const
+ {
+ return prev_spc.data()[n];
+ }
+
+ node_type*& next(node_type* x)const
+ {
+ return *(x->up());
+ }
+
+ node_type*& prev(node_type* x)const
+ {
+ return prev_at(position(x));
+ }
+
+ Allocator al;
+ ptr_array_type& ptrs;
+ node_type* header;
+ auto_space<node_type*,Allocator> prev_spc;
+ bool preprocessed;
+};
+
+template<typename Node,typename Allocator>
+class random_access_index_loader:
+ private random_access_index_loader_base<Allocator>
+{
+ typedef random_access_index_loader_base<Allocator> super;
+ typedef typename super::ptr_array_type ptr_array_type;
+
+public:
+ random_access_index_loader(const Allocator& al_,ptr_array_type& ptrs_):
+ super(al_,ptrs_)
+ {}
+
+ void rearrange(Node* position,Node *x)
+ {
+ super::rearrange(position?position->impl():0,x->impl());
+ }
+};
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#endif
diff --git a/boost/boost/multi_index/detail/rnd_index_node.hpp b/boost/boost/multi_index/detail/rnd_index_node.hpp
new file mode 100644
index 00000000000..e2145f57c6a
--- /dev/null
+++ b/boost/boost/multi_index/detail/rnd_index_node.hpp
@@ -0,0 +1,240 @@
+/* Copyright 2003-2006 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_RND_INDEX_NODE_HPP
+#define BOOST_MULTI_INDEX_DETAIL_RND_INDEX_NODE_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <algorithm>
+#include <boost/math/common_factor_rt.hpp>
+#include <cstddef>
+#include <functional>
+
+namespace boost{
+
+namespace multi_index{
+
+namespace detail{
+
+struct random_access_index_node_impl
+{
+ random_access_index_node_impl**& up(){return up_;}
+ random_access_index_node_impl** up()const{return up_;}
+
+ /* interoperability with rnd_node_iterator */
+
+ static void increment(random_access_index_node_impl*& x)
+ {
+ x=*(x->up()+1);
+ }
+
+ static void decrement(random_access_index_node_impl*& x)
+ {
+ x=*(x->up()-1);
+ }
+
+ static void advance(
+ random_access_index_node_impl*& x,std::ptrdiff_t n)
+ {
+ x=*(x->up()+n);
+ }
+
+ static std::ptrdiff_t distance(
+ random_access_index_node_impl* x,random_access_index_node_impl* y)
+ {
+ return y->up()-x->up();
+ }
+
+ /* algorithmic stuff */
+
+ static void relocate(
+ random_access_index_node_impl** pos,
+ random_access_index_node_impl** x)
+ {
+ random_access_index_node_impl* n=*x;
+ if(x<pos){
+ extract(x,pos);
+ *(pos-1)=n;
+ n->up()=pos-1;
+ }
+ else{
+ while(x!=pos){
+ *x=*(x-1);
+ (*x)->up()=x;
+ --x;
+ }
+ *pos=n;
+ n->up()=pos;
+ }
+ };
+
+ static void relocate(
+ random_access_index_node_impl** pos,
+ random_access_index_node_impl** first,
+ random_access_index_node_impl** last)
+ {
+ random_access_index_node_impl** begin,**middle,**end;
+ if(pos<first){
+ begin=pos;
+ middle=first;
+ end=last;
+ }
+ else{
+ begin=first;
+ middle=last;
+ end=pos;
+ }
+
+ std::ptrdiff_t n=end-begin;
+ std::ptrdiff_t m=middle-begin;
+ std::ptrdiff_t n_m=n-m;
+ std::ptrdiff_t p=math::gcd(n,m);
+
+ for(std::ptrdiff_t i=0;i<p;++i){
+ random_access_index_node_impl* tmp=begin[i];
+ for(std::ptrdiff_t j=i,k;;){
+ if(j<n_m)k=j+m;
+ else k=j-n_m;
+ if(k==i){
+ begin[j]=tmp;
+ begin[j]->up()=&begin[j];
+ break;
+ }
+ else{
+ begin[j]=begin[k];
+ begin[j]->up()=&begin[j];
+ }
+
+ if(k<n_m)j=k+m;
+ else j=k-n_m;
+ if(j==i){
+ begin[k]=tmp;
+ begin[k]->up()=&begin[k];
+ break;
+ }
+ else{
+ begin[k]=begin[j];
+ begin[k]->up()=&begin[k];
+ }
+ }
+ }
+ };
+
+ static void extract(
+ random_access_index_node_impl** x,
+ random_access_index_node_impl** pend)
+ {
+ --pend;
+ while(x!=pend){
+ *x=*(x+1);
+ (*x)->up()=x;
+ ++x;
+ }
+ }
+
+ static void transfer(
+ random_access_index_node_impl** pbegin0,
+ random_access_index_node_impl** pend0,
+ random_access_index_node_impl** pbegin1)
+ {
+ while(pbegin0!=pend0){
+ *pbegin1=*pbegin0++;
+ (*pbegin1)->up()=pbegin1;
+ ++pbegin1;
+ }
+ }
+
+ static void reverse(
+ random_access_index_node_impl** pbegin,
+ random_access_index_node_impl** pend)
+ {
+ std::ptrdiff_t d=(pend-pbegin)/2;
+ for(std::ptrdiff_t i=0;i<d;++i){
+ std::swap(*pbegin,*--pend);
+ (*pbegin)->up()=pbegin;
+ (*pend)->up()=pend;
+ ++pbegin;
+ }
+ }
+
+private:
+ random_access_index_node_impl** up_;
+};
+
+template<typename Super>
+struct random_access_index_node_trampoline:random_access_index_node_impl{};
+
+template<typename Super>
+struct random_access_index_node:
+ Super,random_access_index_node_trampoline<Super>
+{
+ random_access_index_node_impl**& up(){return impl_type::up();}
+ random_access_index_node_impl** up()const{return impl_type::up();}
+
+ random_access_index_node_impl* impl()
+ {return static_cast<impl_type*>(this);}
+ const random_access_index_node_impl* impl()const
+ {return static_cast<const impl_type*>(this);}
+
+ static random_access_index_node* from_impl(random_access_index_node_impl *x)
+ {
+ return static_cast<random_access_index_node*>(
+ static_cast<impl_type*>(x));
+ }
+
+ static const random_access_index_node* from_impl(
+ const random_access_index_node_impl* x)
+ {
+ return static_cast<const random_access_index_node*>(
+ static_cast<const impl_type*>(x));
+ }
+
+ /* interoperability with rnd_node_iterator */
+
+ static void increment(random_access_index_node*& x)
+ {
+ random_access_index_node_impl* xi=x->impl();
+ impl_type::increment(xi);
+ x=from_impl(xi);
+ }
+
+ static void decrement(random_access_index_node*& x)
+ {
+ random_access_index_node_impl* xi=x->impl();
+ impl_type::decrement(xi);
+ x=from_impl(xi);
+ }
+
+ static void advance(random_access_index_node*& x,std::ptrdiff_t n)
+ {
+ random_access_index_node_impl* xi=x->impl();
+ impl_type::advance(xi,n);
+ x=from_impl(xi);
+ }
+
+ static std::ptrdiff_t distance(
+ random_access_index_node* x,random_access_index_node* y)
+ {
+ return impl_type::distance(x->impl(),y->impl());
+ }
+
+private:
+ typedef random_access_index_node_trampoline<Super> impl_type;
+};
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#endif
diff --git a/boost/boost/multi_index/detail/rnd_index_ops.hpp b/boost/boost/multi_index/detail/rnd_index_ops.hpp
new file mode 100644
index 00000000000..cdd9c72311d
--- /dev/null
+++ b/boost/boost/multi_index/detail/rnd_index_ops.hpp
@@ -0,0 +1,200 @@
+/* Copyright 2003-2005 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_RND_INDEX_OPS_HPP
+#define BOOST_MULTI_INDEX_DETAIL_RND_INDEX_OPS_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <algorithm>
+#include <boost/multi_index/detail/rnd_index_ptr_array.hpp>
+#include <functional>
+
+namespace boost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* Common code for random_access_index memfuns having templatized and
+ * non-templatized versions.
+ */
+
+template<typename Node,typename Allocator,typename Predicate>
+Node* random_access_index_remove(
+ random_access_index_ptr_array<Allocator>& ptrs,Predicate pred
+ BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(Node))
+{
+ typedef typename Node::value_type value_type;
+
+ random_access_index_node_impl** first=ptrs.begin(),
+ ** res=first,
+ ** last=ptrs.end();
+ for(;first!=last;++first){
+ if(!pred(
+ const_cast<const value_type&>(Node::from_impl(*first)->value()))){
+ if(first!=res){
+ std::swap(*first,*res);
+ (*first)->up()=first;
+ (*res)->up()=res;
+ }
+ ++res;
+ }
+ }
+ return Node::from_impl(*res);
+}
+
+template<typename Node,typename Allocator,class BinaryPredicate>
+Node* random_access_index_unique(
+ random_access_index_ptr_array<Allocator>& ptrs,BinaryPredicate binary_pred
+ BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(Node))
+{
+ typedef typename Node::value_type value_type;
+
+ random_access_index_node_impl** first=ptrs.begin(),
+ ** res=first,
+ ** last=ptrs.end();
+ if(first!=last){
+ for(;++first!=last;){
+ if(!binary_pred(
+ const_cast<const value_type&>(Node::from_impl(*res)->value()),
+ const_cast<const value_type&>(Node::from_impl(*first)->value()))){
+ ++res;
+ if(first!=res){
+ std::swap(*first,*res);
+ (*first)->up()=first;
+ (*res)->up()=res;
+ }
+ }
+ }
+ ++res;
+ }
+ return Node::from_impl(*res);
+}
+
+template<typename Node,typename Allocator,typename Compare>
+void random_access_index_inplace_merge(
+ const Allocator& al,
+ random_access_index_ptr_array<Allocator>& ptrs,
+ random_access_index_node_impl** first1,Compare comp
+ BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(Node))
+{
+ typedef typename Node::value_type value_type;
+
+ auto_space<random_access_index_node_impl*,Allocator> spc(al,ptrs.size());
+
+ random_access_index_node_impl** first0=ptrs.begin(),
+ ** last0=first1,
+ ** last1=ptrs.end(),
+ ** out=spc.data();
+ while(first0!=last0&&first1!=last1){
+ if(comp(
+ const_cast<const value_type&>(Node::from_impl(*first1)->value()),
+ const_cast<const value_type&>(Node::from_impl(*first0)->value()))){
+ *out++=*first1++;
+ }
+ else{
+ *out++=*first0++;
+ }
+ }
+ std::copy(first0,last0,out);
+ std::copy(first1,last1,out);
+
+ first1=ptrs.begin();
+ out=spc.data();
+ while(first1!=last1){
+ *first1=*out++;
+ (*first1)->up()=first1;
+ ++first1;
+ }
+}
+
+/* sorting */
+
+/* auxiliary stuff */
+
+template<typename Node,typename Compare>
+struct random_access_index_sort_compare:
+ std::binary_function<
+ const typename Node::value_type*,const typename Node::value_type*,bool>
+{
+ random_access_index_sort_compare(Compare comp_=Compare()):comp(comp_){}
+
+ bool operator()(
+ random_access_index_node_impl* x,
+ random_access_index_node_impl* y)const
+ {
+ typedef typename Node::value_type value_type;
+
+ return comp(
+ const_cast<const value_type&>(Node::from_impl(x)->value()),
+ const_cast<const value_type&>(Node::from_impl(y)->value()));
+ }
+
+private:
+ Compare comp;
+};
+
+template<typename Node,typename Allocator,class Compare>
+void random_access_index_sort(
+ const Allocator& al,
+ random_access_index_ptr_array<Allocator>& ptrs,
+ Compare comp
+ BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(Node))
+{
+ /* The implementation is extremely simple: an auxiliary
+ * array of pointers is sorted using stdlib facilities and
+ * then used to rearrange the index. This is suboptimal
+ * in space and time, but has some advantages over other
+ * possible approaches:
+ * - Use std::stable_sort() directly on ptrs using some
+ * special iterator in charge of maintaining pointers
+ * and up() pointers in sync: we cannot guarantee
+ * preservation of the container invariants in the face of
+ * exceptions, if, for instance, std::stable_sort throws
+ * when ptrs transitorily contains duplicate elements.
+ * - Rewrite the internal algorithms of std::stable_sort
+ * adapted for this case: besides being a fair amount of
+ * work, making a stable sort compatible with Boost.MultiIndex
+ * invariants (basically, no duplicates or missing elements
+ * even if an exception is thrown) is complicated, error-prone
+ * and possibly won't perform much better than the
+ * solution adopted.
+ */
+
+ typedef typename Node::value_type value_type;
+ typedef random_access_index_sort_compare<
+ Node,Compare> ptr_compare;
+
+ random_access_index_node_impl** first=ptrs.begin();
+ random_access_index_node_impl** last=ptrs.end();
+ auto_space<
+ random_access_index_node_impl*,
+ Allocator> spc(al,ptrs.size());
+ random_access_index_node_impl** buf=spc.data();
+
+ std::copy(first,last,buf);
+ std::stable_sort(buf,buf+ptrs.size(),ptr_compare(comp));
+
+ while(first!=last){
+ *first=*buf++;
+ (*first)->up()=first;
+ ++first;
+ }
+}
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#endif
diff --git a/boost/boost/multi_index/detail/rnd_index_ptr_array.hpp b/boost/boost/multi_index/detail/rnd_index_ptr_array.hpp
new file mode 100644
index 00000000000..82978108b7a
--- /dev/null
+++ b/boost/boost/multi_index/detail/rnd_index_ptr_array.hpp
@@ -0,0 +1,125 @@
+/* Copyright 2003-2005 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_RND_INDEX_PTR_ARRAY_HPP
+#define BOOST_MULTI_INDEX_DETAIL_RND_INDEX_PTR_ARRAY_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <algorithm>
+#include <boost/multi_index/detail/auto_space.hpp>
+#include <boost/multi_index/detail/rnd_index_node.hpp>
+#include <boost/noncopyable.hpp>
+#include <cstddef>
+
+namespace boost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* pointer structure for use by random access indices */
+
+template<typename Allocator>
+class random_access_index_ptr_array:private noncopyable
+{
+public:
+ typedef random_access_index_node_impl* value_type;
+
+ random_access_index_ptr_array(
+ const Allocator& al,value_type end_,std::size_t size):
+ size_(size),
+ capacity_(size),
+ spc(al,capacity_+1)
+ {
+ *end()=end_;
+ end_->up()=end();
+ }
+
+ std::size_t size()const{return size_;}
+ std::size_t capacity()const{return capacity_;}
+
+ void room_for_one()
+ {
+ if(size_==capacity_){
+ reserve(capacity_<=10?15:capacity_+capacity_/2);
+ }
+ }
+
+ void reserve(std::size_t c)
+ {
+ if(c>capacity_){
+ auto_space<value_type,Allocator> spc1(spc.get_allocator(),c+1);
+ random_access_index_node_impl::transfer(begin(),end()+1,spc1.data());
+ spc.swap(spc1);
+ capacity_=c;
+ }
+ }
+
+ value_type* begin()const{return &ptrs()[0];}
+ value_type* end()const{return &ptrs()[size_];}
+ value_type* at(std::size_t n)const{return &ptrs()[n];}
+
+ void push_back(value_type x)
+ {
+ *(end()+1)=*end();
+ (*(end()+1))->up()=end()+1;
+ *end()=x;
+ (*end())->up()=end();
+ ++size_;
+ }
+
+ void erase(value_type x)
+ {
+ random_access_index_node_impl::extract(x->up(),end()+1);
+ --size_;
+ }
+
+ void clear()
+ {
+ *begin()=*end();
+ (*begin())->up()=begin();
+ size_=0;
+ }
+
+ void swap(random_access_index_ptr_array& x)
+ {
+ std::swap(size_,x.size_);
+ std::swap(capacity_,x.capacity_);
+ spc.swap(x.spc);
+ }
+
+private:
+ std::size_t size_;
+ std::size_t capacity_;
+ auto_space<value_type,Allocator> spc;
+
+ value_type* ptrs()const
+ {
+ return spc.data();
+ }
+};
+
+template<typename Allocator>
+void swap(
+ random_access_index_ptr_array<Allocator>& x,
+ random_access_index_ptr_array<Allocator>& y)
+{
+ x.swap(y);
+}
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#endif
diff --git a/boost/boost/multi_index/detail/rnd_node_iterator.hpp b/boost/boost/multi_index/detail/rnd_node_iterator.hpp
new file mode 100644
index 00000000000..56266143447
--- /dev/null
+++ b/boost/boost/multi_index/detail/rnd_node_iterator.hpp
@@ -0,0 +1,133 @@
+/* Copyright 2003-2006 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_RND_NODE_ITERATOR_HPP
+#define BOOST_MULTI_INDEX_DETAIL_RND_NODE_ITERATOR_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/operators.hpp>
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+#include <boost/serialization/nvp.hpp>
+#include <boost/serialization/split_member.hpp>
+#endif
+
+namespace boost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* Iterator class for node-based indices with random access iterators. */
+
+template<typename Node,typename Derived=mpl::na>
+class rnd_node_iterator:
+ public random_access_iterator_helper<
+ rnd_node_iterator<Node,Derived>,
+ typename Node::value_type,
+ std::ptrdiff_t,
+ const typename Node::value_type*,
+ const typename Node::value_type&>
+{
+public:
+ rnd_node_iterator(){}
+ explicit rnd_node_iterator(Node* node_):node(node_){}
+
+ const typename Node::value_type& operator*()const
+ {
+ return node->value();
+ }
+
+ friend bool operator==(
+ const rnd_node_iterator& x,const rnd_node_iterator& y)
+ {
+ return x.node==y.node;
+ }
+
+ friend bool operator<(
+ const rnd_node_iterator& x,const rnd_node_iterator& y)
+ {
+ return Node::distance(x.node,y.node)>0;
+ }
+
+ rnd_node_iterator& operator++()
+ {
+ Node::increment(node);
+ return *this;
+ }
+
+ rnd_node_iterator& operator--()
+ {
+ Node::decrement(node);
+ return *this;
+ }
+
+ rnd_node_iterator& operator+=(std::ptrdiff_t n)
+ {
+ Node::advance(node,n);
+ return *this;
+ }
+
+ rnd_node_iterator& operator-=(std::ptrdiff_t n)
+ {
+ Node::advance(node,-n);
+ return *this;
+ }
+
+ friend std::ptrdiff_t operator-(
+ const rnd_node_iterator& x,const rnd_node_iterator& y)
+ {
+ return Node::distance(y.node,x.node);
+ }
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+ /* Serialization. As for why the following is public,
+ * see explanation in safe_mode_iterator notes in safe_mode.hpp.
+ */
+
+ BOOST_SERIALIZATION_SPLIT_MEMBER()
+
+ typedef typename Node::base_type node_base_type;
+
+ template<class Archive>
+ void save(Archive& ar,const unsigned int)const
+ {
+ node_base_type* bnode=node;
+ ar<<serialization::make_nvp("pointer",bnode);
+ }
+
+ template<class Archive>
+ void load(Archive& ar,const unsigned int)
+ {
+ node_base_type* bnode;
+ ar>>serialization::make_nvp("pointer",bnode);
+ node=static_cast<Node*>(bnode);
+ }
+#endif
+
+ /* get_node is not to be used by the user */
+
+ typedef Node node_type;
+
+ Node* get_node()const{return node;}
+
+private:
+ Node* node;
+};
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#endif
diff --git a/boost/boost/multi_index/detail/safe_ctr_proxy.hpp b/boost/boost/multi_index/detail/safe_ctr_proxy.hpp
new file mode 100644
index 00000000000..2f6f11a00e3
--- /dev/null
+++ b/boost/boost/multi_index/detail/safe_ctr_proxy.hpp
@@ -0,0 +1,105 @@
+/* Copyright 2003-2006 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_SAFE_CTR_PROXY_HPP
+#define BOOST_MULTI_INDEX_DETAIL_SAFE_CTR_PROXY_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/detail/workaround.hpp>
+
+#if BOOST_WORKAROUND(BOOST_MSVC,<1300)
+#include <boost/multi_index/detail/safe_mode.hpp>
+
+namespace boost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* A safe iterator is instantiated in the form
+ * safe_iterator<Iterator,Container>: MSVC++ 6.0 has serious troubles with
+ * the resulting symbols names, given that index names (which stand for
+ * Container) are fairly long themselves. safe_ctr_proxy does not statically
+ * depend on Container, and provides the necessary methods (begin and end) to
+ * the safe mode framework via an abstract interface. With safe_ctr_proxy,
+ * instead of deriving from safe_container<Container> the following base class
+ * must be used:
+ *
+ * safe_ctr_proxy_impl<Iterator,Container>
+ *
+ * where Iterator is the type of the *unsafe* iterator being wrapped.
+ * The corresponding safe iterator instantiation is then
+ *
+ * safe_iterator<Iterator,safe_ctr_proxy<Iterator> >,
+ *
+ * which does not include the name of Container.
+ */
+
+template<typename Iterator>
+class safe_ctr_proxy:
+ public safe_mode::safe_container<safe_ctr_proxy<Iterator> >
+{
+public:
+ typedef safe_mode::safe_iterator<Iterator,safe_ctr_proxy> iterator;
+ typedef iterator const_iterator;
+
+ iterator begin(){return begin_impl();}
+ const_iterator begin()const{return begin_impl();}
+ iterator end(){return end_impl();}
+ const_iterator end()const{return end_impl();}
+
+protected:
+ virtual iterator begin_impl()=0;
+ virtual const_iterator begin_impl()const=0;
+ virtual iterator end_impl()=0;
+ virtual const_iterator end_impl()const=0;
+};
+
+template<typename Iterator,typename Container>
+class safe_ctr_proxy_impl:public safe_ctr_proxy<Iterator>
+{
+ typedef safe_ctr_proxy<Iterator> super;
+ typedef Container container_type;
+
+public:
+ typedef typename super::iterator iterator;
+ typedef typename super::const_iterator const_iterator;
+
+ virtual iterator begin_impl(){return container().begin();}
+ virtual const_iterator begin_impl()const{return container().begin();}
+ virtual iterator end_impl(){return container().end();}
+ virtual const_iterator end_impl()const{return container().end();}
+
+private:
+ container_type& container()
+ {
+ return *static_cast<container_type*>(this);
+ }
+
+ const container_type& container()const
+ {
+ return *static_cast<const container_type*>(this);
+ }
+};
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#endif /* workaround */
+
+#endif /* BOOST_MULTI_INDEX_ENABLE_SAFE_MODE */
+
+#endif
diff --git a/boost/boost/multi_index/detail/safe_mode.hpp b/boost/boost/multi_index/detail/safe_mode.hpp
new file mode 100644
index 00000000000..41885d0a226
--- /dev/null
+++ b/boost/boost/multi_index/detail/safe_mode.hpp
@@ -0,0 +1,568 @@
+/* Copyright 2003-2006 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_SAFE_MODE_HPP
+#define BOOST_MULTI_INDEX_DETAIL_SAFE_MODE_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+/* Safe mode machinery, in the spirit of Cay Hortmann's "Safe STL"
+ * (http://www.horstmann.com/safestl.html).
+ * In this mode, containers of type Container are derived from
+ * safe_container<Container>, and their corresponding iterators
+ * are wrapped with safe_iterator. These classes provide
+ * an internal record of which iterators are at a given moment associated
+ * to a given container, and properly mark the iterators as invalid
+ * when the container gets destroyed.
+ * Iterators are chained in a single attached list, whose header is
+ * kept by the container. More elaborate data structures would yield better
+ * performance, but I decided to keep complexity to a minimum since
+ * speed is not an issue here.
+ * Safe mode iterators automatically check that only proper operations
+ * are performed on them: for instance, an invalid iterator cannot be
+ * dereferenced. Additionally, a set of utilty macros and functions are
+ * provided that serve to implement preconditions and cooperate with
+ * the framework within the container.
+ * Iterators can also be unchecked, i.e. they do not have info about
+ * which container they belong in. This situation arises when the iterator
+ * is restored from a serialization archive: only information on the node
+ * is available, and it is not possible to determine to which container
+ * the iterator is associated to. The only sensible policy is to assume
+ * unchecked iterators are valid, though this can certainly generate false
+ * positive safe mode checks.
+ * This is not a full-fledged safe mode framework, and is only intended
+ * for use within the limits of Boost.MultiIndex.
+ */
+
+/* Assertion macros. These resolve to no-ops if
+ * !defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE).
+ */
+
+#if !defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+#undef BOOST_MULTI_INDEX_SAFE_MODE_ASSERT
+#define BOOST_MULTI_INDEX_SAFE_MODE_ASSERT(expr,error_code) ((void)0)
+#else
+#if !defined(BOOST_MULTI_INDEX_SAFE_MODE_ASSERT)
+#include <boost/assert.hpp>
+#define BOOST_MULTI_INDEX_SAFE_MODE_ASSERT(expr,error_code) BOOST_ASSERT(expr)
+#endif
+#endif
+
+#define BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(it) \
+ BOOST_MULTI_INDEX_SAFE_MODE_ASSERT( \
+ safe_mode::check_valid_iterator(it), \
+ safe_mode::invalid_iterator);
+
+#define BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(it) \
+ BOOST_MULTI_INDEX_SAFE_MODE_ASSERT( \
+ safe_mode::check_dereferenceable_iterator(it), \
+ safe_mode::not_dereferenceable_iterator);
+
+#define BOOST_MULTI_INDEX_CHECK_INCREMENTABLE_ITERATOR(it) \
+ BOOST_MULTI_INDEX_SAFE_MODE_ASSERT( \
+ safe_mode::check_incrementable_iterator(it), \
+ safe_mode::not_incrementable_iterator);
+
+#define BOOST_MULTI_INDEX_CHECK_DECREMENTABLE_ITERATOR(it) \
+ BOOST_MULTI_INDEX_SAFE_MODE_ASSERT( \
+ safe_mode::check_decrementable_iterator(it), \
+ safe_mode::not_decrementable_iterator);
+
+#define BOOST_MULTI_INDEX_CHECK_IS_OWNER(it,cont) \
+ BOOST_MULTI_INDEX_SAFE_MODE_ASSERT( \
+ safe_mode::check_is_owner(it,cont), \
+ safe_mode::not_owner);
+
+#define BOOST_MULTI_INDEX_CHECK_SAME_OWNER(it0,it1) \
+ BOOST_MULTI_INDEX_SAFE_MODE_ASSERT( \
+ safe_mode::check_same_owner(it0,it1), \
+ safe_mode::not_same_owner);
+
+#define BOOST_MULTI_INDEX_CHECK_VALID_RANGE(it0,it1) \
+ BOOST_MULTI_INDEX_SAFE_MODE_ASSERT( \
+ safe_mode::check_valid_range(it0,it1), \
+ safe_mode::invalid_range);
+
+#define BOOST_MULTI_INDEX_CHECK_OUTSIDE_RANGE(it,it0,it1) \
+ BOOST_MULTI_INDEX_SAFE_MODE_ASSERT( \
+ safe_mode::check_outside_range(it,it0,it1), \
+ safe_mode::inside_range);
+
+#define BOOST_MULTI_INDEX_CHECK_IN_BOUNDS(it,n) \
+ BOOST_MULTI_INDEX_SAFE_MODE_ASSERT( \
+ safe_mode::check_in_bounds(it,n), \
+ safe_mode::out_of_bounds);
+
+#define BOOST_MULTI_INDEX_CHECK_DIFFERENT_CONTAINER(cont0,cont1) \
+ BOOST_MULTI_INDEX_SAFE_MODE_ASSERT( \
+ safe_mode::check_different_container(cont0,cont1), \
+ safe_mode::same_container);
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <algorithm>
+#include <boost/detail/iterator.hpp>
+#include <boost/multi_index/detail/access_specifier.hpp>
+#include <boost/multi_index/detail/iter_adaptor.hpp>
+#include <boost/multi_index/safe_mode_errors.hpp>
+#include <boost/noncopyable.hpp>
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+#include <boost/serialization/split_member.hpp>
+#endif
+
+#if defined(BOOST_HAS_THREADS)
+#include <boost/detail/lightweight_mutex.hpp>
+#endif
+
+namespace boost{
+
+namespace multi_index{
+
+namespace safe_mode{
+
+/* Checking routines. Assume the best for unchecked iterators
+ * (i.e. they pass the checking when there is not enough info
+ * to know.)
+ */
+
+template<typename Iterator>
+inline bool check_valid_iterator(const Iterator& it)
+{
+ return it.valid()||it.unchecked();
+}
+
+template<typename Iterator>
+inline bool check_dereferenceable_iterator(const Iterator& it)
+{
+ return it.valid()&&it!=it.owner()->end()||it.unchecked();
+}
+
+template<typename Iterator>
+inline bool check_incrementable_iterator(const Iterator& it)
+{
+ return it.valid()&&it!=it.owner()->end()||it.unchecked();
+}
+
+template<typename Iterator>
+inline bool check_decrementable_iterator(const Iterator& it)
+{
+ return it.valid()&&it!=it.owner()->begin()||it.unchecked();
+}
+
+template<typename Iterator>
+inline bool check_is_owner(
+ const Iterator& it,const typename Iterator::container_type& cont)
+{
+ return it.valid()&&it.owner()==&cont||it.unchecked();
+}
+
+template<typename Iterator>
+inline bool check_same_owner(const Iterator& it0,const Iterator& it1)
+{
+ return it0.valid()&&it1.valid()&&it0.owner()==it1.owner()||
+ it0.unchecked()||it1.unchecked();
+}
+
+template<typename Iterator>
+inline bool check_valid_range(const Iterator& it0,const Iterator& it1)
+{
+ if(!check_same_owner(it0,it1))return false;
+
+ if(it0.valid()){
+ Iterator last=it0.owner()->end();
+ if(it1==last)return true;
+
+ for(Iterator first=it0;first!=last;++first){
+ if(first==it1)return true;
+ }
+ return false;
+ }
+ return true;
+}
+
+template<typename Iterator>
+inline bool check_outside_range(
+ const Iterator& it,const Iterator& it0,const Iterator& it1)
+{
+ if(!check_same_owner(it0,it1))return false;
+
+ if(it0.valid()){
+ Iterator last=it0.owner()->end();
+ bool found=false;
+
+ Iterator first=it0;
+ for(;first!=last;++first){
+ if(first==it1)break;
+
+ /* crucial that this check goes after previous break */
+
+ if(first==it)found=true;
+ }
+ if(first!=it1)return false;
+ return !found;
+ }
+ return true;
+}
+
+template<typename Iterator,typename Difference>
+inline bool check_in_bounds(const Iterator& it,Difference n)
+{
+ if(it.unchecked())return true;
+ if(!it.valid()) return false;
+ if(n>0) return it.owner()->end()-it>=n;
+ else return it.owner()->begin()-it<=n;
+}
+
+template<typename Container>
+inline bool check_different_container(
+ const Container& cont0,const Container& cont1)
+{
+ return &cont0!=&cont1;
+}
+
+/* Invalidates all iterators equivalent to that given. Safe containers
+ * must call this when deleting elements: the safe mode framework cannot
+ * perform this operation automatically without outside help.
+ */
+
+template<typename Iterator>
+inline void detach_equivalent_iterators(Iterator& it)
+{
+ if(it.valid()){
+ Iterator *prev_,*next_;
+ for(
+ prev_=static_cast<Iterator*>(&it.cont->header);
+ (next_=static_cast<Iterator*>(prev_->next))!=0;){
+ if(next_!=&it&&*next_==it){
+ prev_->next=next_->next;
+ next_->cont=0;
+ }
+ else prev_=next_;
+ }
+ it.detach();
+ }
+}
+
+template<typename Container> class safe_container; /* fwd decl. */
+
+} /* namespace multi_index::safe_mode */
+
+namespace detail{
+
+class safe_container_base; /* fwd decl. */
+
+class safe_iterator_base
+{
+public:
+ bool valid()const{return cont!=0;}
+ bool unchecked()const{return unchecked_;}
+
+ inline void detach();
+
+ void uncheck()
+ {
+ detach();
+ unchecked_=true;
+ }
+
+protected:
+ safe_iterator_base():cont(0),next(0),unchecked_(false){}
+
+ explicit safe_iterator_base(safe_container_base* cont_):
+ unchecked_(false)
+ {
+ attach(cont_);
+ }
+
+ safe_iterator_base(const safe_iterator_base& it):
+ unchecked_(it.unchecked_)
+ {
+ attach(it.cont);
+ }
+
+ safe_iterator_base& operator=(const safe_iterator_base& it)
+ {
+ unchecked_=it.unchecked_;
+ safe_container_base* new_cont=it.cont;
+ if(cont!=new_cont){
+ detach();
+ attach(new_cont);
+ }
+ return *this;
+ }
+
+ ~safe_iterator_base()
+ {
+ detach();
+ }
+
+ const safe_container_base* owner()const{return cont;}
+
+BOOST_MULTI_INDEX_PRIVATE_IF_MEMBER_TEMPLATE_FRIENDS:
+ friend class safe_container_base;
+
+#if !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS)
+ template<typename> friend class safe_mode::safe_container;
+ template<typename Iterator> friend
+ void safe_mode::detach_equivalent_iterators(Iterator&);
+#endif
+
+ inline void attach(safe_container_base* cont_);
+
+ safe_container_base* cont;
+ safe_iterator_base* next;
+ bool unchecked_;
+};
+
+class safe_container_base:private noncopyable
+{
+public:
+ safe_container_base(){}
+
+BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS:
+ friend class safe_iterator_base;
+
+#if !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS)
+ template<typename Iterator> friend
+ void safe_mode::detach_equivalent_iterators(Iterator&);
+#endif
+
+ ~safe_container_base()
+ {
+ /* Detaches all remaining iterators, which by now will
+ * be those pointing to the end of the container.
+ */
+
+ for(safe_iterator_base* it=header.next;it;it=it->next)it->cont=0;
+ header.next=0;
+ }
+
+ void swap(safe_container_base& x)
+ {
+ for(safe_iterator_base* it0=header.next;it0;it0=it0->next)it0->cont=&x;
+ for(safe_iterator_base* it1=x.header.next;it1;it1=it1->next)it1->cont=this;
+ std::swap(header.cont,x.header.cont);
+ std::swap(header.next,x.header.next);
+ }
+
+ safe_iterator_base header;
+
+#if defined(BOOST_HAS_THREADS)
+ boost::detail::lightweight_mutex mutex;
+#endif
+};
+
+void safe_iterator_base::attach(safe_container_base* cont_)
+{
+ cont=cont_;
+ if(cont){
+#if defined(BOOST_HAS_THREADS)
+ boost::detail::lightweight_mutex::scoped_lock lock(cont->mutex);
+#endif
+
+ next=cont->header.next;
+ cont->header.next=this;
+ }
+}
+
+void safe_iterator_base::detach()
+{
+ if(cont){
+#if defined(BOOST_HAS_THREADS)
+ boost::detail::lightweight_mutex::scoped_lock lock(cont->mutex);
+#endif
+
+ safe_iterator_base *prev_,*next_;
+ for(prev_=&cont->header;(next_=prev_->next)!=this;prev_=next_){}
+ prev_->next=next;
+ cont=0;
+ }
+}
+
+} /* namespace multi_index::detail */
+
+namespace safe_mode{
+
+/* In order to enable safe mode on a container:
+ * - The container must derive from safe_container<container_type>,
+ * - iterators must be generated via safe_iterator, which adapts a
+ * preexistent unsafe iterator class.
+ */
+
+template<typename Container>
+class safe_container;
+
+template<typename Iterator,typename Container>
+class safe_iterator:
+ public detail::iter_adaptor<safe_iterator<Iterator,Container>,Iterator>,
+ public detail::safe_iterator_base
+{
+ typedef detail::iter_adaptor<safe_iterator,Iterator> super;
+ typedef detail::safe_iterator_base safe_super;
+
+public:
+ typedef Container container_type;
+ typedef typename Iterator::reference reference;
+ typedef typename Iterator::difference_type difference_type;
+
+ safe_iterator(){}
+ explicit safe_iterator(safe_container<container_type>* cont_):
+ safe_super(cont_){}
+ template<typename T0>
+ safe_iterator(const T0& t0,safe_container<container_type>* cont_):
+ super(Iterator(t0)),safe_super(cont_){}
+ template<typename T0,typename T1>
+ safe_iterator(
+ const T0& t0,const T1& t1,safe_container<container_type>* cont_):
+ super(Iterator(t0,t1)),safe_super(cont_){}
+
+ safe_iterator& operator=(const safe_iterator& x)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(x);
+ this->base_reference()=x.base_reference();
+ safe_super::operator=(x);
+ return *this;
+ }
+
+ const container_type* owner()const
+ {
+ return
+ static_cast<const container_type*>(
+ static_cast<const safe_container<container_type>*>(
+ this->safe_super::owner()));
+ }
+
+ /* get_node is not to be used by the user */
+
+ typedef typename Iterator::node_type node_type;
+
+ node_type* get_node()const{return this->base_reference().get_node();}
+
+private:
+ friend class boost::multi_index::detail::iter_adaptor_access;
+
+ reference dereference()const
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(*this);
+ BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(*this);
+ return *(this->base_reference());
+ }
+
+ bool equal(const safe_iterator& x)const
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(*this);
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(x);
+ BOOST_MULTI_INDEX_CHECK_SAME_OWNER(*this,x);
+ return this->base_reference()==x.base_reference();
+ }
+
+ void increment()
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(*this);
+ BOOST_MULTI_INDEX_CHECK_INCREMENTABLE_ITERATOR(*this);
+ ++(this->base_reference());
+ }
+
+ void decrement()
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(*this);
+ BOOST_MULTI_INDEX_CHECK_DECREMENTABLE_ITERATOR(*this);
+ --(this->base_reference());
+ }
+
+ void advance(difference_type n)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(*this);
+ BOOST_MULTI_INDEX_CHECK_IN_BOUNDS(*this,n);
+ this->base_reference()+=n;
+ }
+
+ difference_type distance_to(const safe_iterator& x)const
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(*this);
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(x);
+ BOOST_MULTI_INDEX_CHECK_SAME_OWNER(*this,x);
+ return x.base_reference()-this->base_reference();
+ }
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+ /* Serialization. Note that Iterator::save and Iterator:load
+ * are assumed to be defined and public: at first sight it seems
+ * like we could have resorted to the public serialization interface
+ * for doing the forwarding to the adapted iterator class:
+ * ar<<base_reference();
+ * ar>>base_reference();
+ * but this would cause incompatibilities if a saving
+ * program is in safe mode and the loading program is not, or
+ * viceversa --in safe mode, the archived iterator data is one layer
+ * deeper, this is especially relevant with XML archives.
+ * It'd be nice if Boost.Serialization provided some forwarding
+ * facility for use by adaptor classes.
+ */
+
+ friend class boost::serialization::access;
+
+ BOOST_SERIALIZATION_SPLIT_MEMBER()
+
+ template<class Archive>
+ void save(Archive& ar,const unsigned int version)const
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(*this);
+ this->base_reference().save(ar,version);
+ }
+
+ template<class Archive>
+ void load(Archive& ar,const unsigned int version)
+ {
+ this->base_reference().load(ar,version);
+ safe_super::uncheck();
+ }
+#endif
+};
+
+template<typename Container>
+class safe_container:public detail::safe_container_base
+{
+ typedef detail::safe_container_base super;
+
+public:
+ void detach_dereferenceable_iterators()
+ {
+ typedef typename Container::iterator iterator;
+
+ iterator end_=static_cast<Container*>(this)->end();
+ iterator *prev_,*next_;
+ for(
+ prev_=static_cast<iterator*>(&this->header);
+ (next_=static_cast<iterator*>(prev_->next))!=0;){
+ if(*next_!=end_){
+ prev_->next=next_->next;
+ next_->cont=0;
+ }
+ else prev_=next_;
+ }
+ }
+
+ void swap(safe_container<Container>& x)
+ {
+ super::swap(x);
+ }
+};
+
+} /* namespace multi_index::safe_mode */
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#endif /* BOOST_MULTI_INDEX_ENABLE_SAFE_MODE */
+
+#endif
diff --git a/boost/boost/multi_index/detail/scope_guard.hpp b/boost/boost/multi_index/detail/scope_guard.hpp
new file mode 100644
index 00000000000..5288c808e40
--- /dev/null
+++ b/boost/boost/multi_index/detail/scope_guard.hpp
@@ -0,0 +1,277 @@
+/* Copyright 2003-2005 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_SCOPE_GUARD_HPP
+#define BOOST_MULTI_INDEX_DETAIL_SCOPE_GUARD_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+namespace boost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* Until some official version of the ScopeGuard idiom makes it into Boost,
+ * we locally define our own. This is a merely reformated version of
+ * ScopeGuard.h as defined in:
+ * Alexandrescu, A., Marginean, P.:"Generic<Programming>: Change the Way You
+ * Write Exception-Safe Code - Forever", C/C++ Users Jornal, Dec 2000,
+ * http://www.cuj.com/documents/s=8000/cujcexp1812alexandr/
+ * with the following modifications:
+ * - General pretty formatting (pretty to my taste at least.)
+ * - Naming style changed to standard C++ library requirements.
+ * - safe_execute does not feature a try-catch protection, so we can
+ * use this even if BOOST_NO_EXCEPTIONS is defined.
+ * - Added scope_guard_impl4 and obj_scope_guard_impl3, (Boost.MultiIndex
+ * needs them). A better design would provide guards for many more
+ * arguments through the Boost Preprocessor Library.
+ * - Added scope_guard_impl_base::touch (see below.)
+ * - Removed RefHolder and ByRef, whose functionality is provided
+ * already by Boost.Ref.
+ * - Removed static make_guard's and make_obj_guard's, so that the code
+ * will work even if BOOST_NO_MEMBER_TEMPLATES is defined. This forces
+ * us to move some private ctors to public, though.
+ *
+ * NB: CodeWarrior Pro 8 seems to have problems looking up safe_execute
+ * without an explicit qualification.
+ */
+
+class scope_guard_impl_base
+{
+public:
+ scope_guard_impl_base():dismissed_(false){}
+ void dismiss()const{dismissed_=true;}
+
+ /* This helps prevent some "unused variable" warnings under, for instance,
+ * GCC 3.2.
+ */
+ void touch()const{}
+
+protected:
+ ~scope_guard_impl_base(){}
+
+ scope_guard_impl_base(const scope_guard_impl_base& other):
+ dismissed_(other.dismissed_)
+ {
+ other.dismiss();
+ }
+
+ template<typename J>
+ static void safe_execute(J& j){if(!j.dismissed_)j.execute();}
+
+ mutable bool dismissed_;
+
+private:
+ scope_guard_impl_base& operator=(const scope_guard_impl_base&);
+};
+
+typedef const scope_guard_impl_base& scope_guard;
+
+template<typename F>
+class scope_guard_impl0:public scope_guard_impl_base
+{
+public:
+ scope_guard_impl0(F fun):fun_(fun){}
+ ~scope_guard_impl0(){scope_guard_impl_base::safe_execute(*this);}
+ void execute(){fun_();}
+
+protected:
+
+ F fun_;
+};
+
+template<typename F>
+inline scope_guard_impl0<F> make_guard(F fun)
+{
+ return scope_guard_impl0<F>(fun);
+}
+
+template<typename F,typename P1>
+class scope_guard_impl1:public scope_guard_impl_base
+{
+public:
+ scope_guard_impl1(F fun,P1 p1):fun_(fun),p1_(p1){}
+ ~scope_guard_impl1(){scope_guard_impl_base::safe_execute(*this);}
+ void execute(){fun_(p1_);}
+
+protected:
+ F fun_;
+ const P1 p1_;
+};
+
+template<typename F,typename P1>
+inline scope_guard_impl1<F,P1> make_guard(F fun,P1 p1)
+{
+ return scope_guard_impl1<F,P1>(fun,p1);
+}
+
+template<typename F,typename P1,typename P2>
+class scope_guard_impl2:public scope_guard_impl_base
+{
+public:
+ scope_guard_impl2(F fun,P1 p1,P2 p2):fun_(fun),p1_(p1),p2_(p2){}
+ ~scope_guard_impl2(){scope_guard_impl_base::safe_execute(*this);}
+ void execute(){fun_(p1_,p2_);}
+
+protected:
+ F fun_;
+ const P1 p1_;
+ const P2 p2_;
+};
+
+template<typename F,typename P1,typename P2>
+inline scope_guard_impl2<F,P1,P2> make_guard(F fun,P1 p1,P2 p2)
+{
+ return scope_guard_impl2<F,P1,P2>(fun,p1,p2);
+}
+
+template<typename F,typename P1,typename P2,typename P3>
+class scope_guard_impl3:public scope_guard_impl_base
+{
+public:
+ scope_guard_impl3(F fun,P1 p1,P2 p2,P3 p3):fun_(fun),p1_(p1),p2_(p2),p3_(p3){}
+ ~scope_guard_impl3(){scope_guard_impl_base::safe_execute(*this);}
+ void execute(){fun_(p1_,p2_,p3_);}
+
+protected:
+ F fun_;
+ const P1 p1_;
+ const P2 p2_;
+ const P3 p3_;
+};
+
+template<typename F,typename P1,typename P2,typename P3>
+inline scope_guard_impl3<F,P1,P2,P3> make_guard(F fun,P1 p1,P2 p2,P3 p3)
+{
+ return scope_guard_impl3<F,P1,P2,P3>(fun,p1,p2,p3);
+}
+
+template<typename F,typename P1,typename P2,typename P3,typename P4>
+class scope_guard_impl4:public scope_guard_impl_base
+{
+public:
+ scope_guard_impl4(F fun,P1 p1,P2 p2,P3 p3,P4 p4):
+ fun_(fun),p1_(p1),p2_(p2),p3_(p3),p4_(p4){}
+ ~scope_guard_impl4(){scope_guard_impl_base::safe_execute(*this);}
+ void execute(){fun_(p1_,p2_,p3_,p4_);}
+
+protected:
+ F fun_;
+ const P1 p1_;
+ const P2 p2_;
+ const P3 p3_;
+ const P4 p4_;
+};
+
+template<typename F,typename P1,typename P2,typename P3,typename P4>
+inline scope_guard_impl4<F,P1,P2,P3,P4> make_guard(
+ F fun,P1 p1,P2 p2,P3 p3,P4 p4)
+{
+ return scope_guard_impl4<F,P1,P2,P3,P4>(fun,p1,p2,p3,p4);
+}
+
+template<class Obj,typename MemFun>
+class obj_scope_guard_impl0:public scope_guard_impl_base
+{
+public:
+ obj_scope_guard_impl0(Obj& obj,MemFun mem_fun):obj_(obj),mem_fun_(mem_fun){}
+ ~obj_scope_guard_impl0(){scope_guard_impl_base::safe_execute(*this);}
+ void execute(){(obj_.*mem_fun_)();}
+
+protected:
+ Obj& obj_;
+ MemFun mem_fun_;
+};
+
+template<class Obj,typename MemFun>
+inline obj_scope_guard_impl0<Obj,MemFun> make_obj_guard(Obj& obj,MemFun mem_fun)
+{
+ return obj_scope_guard_impl0<Obj,MemFun>(obj,mem_fun);
+}
+
+template<class Obj,typename MemFun,typename P1>
+class obj_scope_guard_impl1:public scope_guard_impl_base
+{
+public:
+ obj_scope_guard_impl1(Obj& obj,MemFun mem_fun,P1 p1):
+ obj_(obj),mem_fun_(mem_fun),p1_(p1){}
+ ~obj_scope_guard_impl1(){scope_guard_impl_base::safe_execute(*this);}
+ void execute(){(obj_.*mem_fun_)(p1_);}
+
+protected:
+ Obj& obj_;
+ MemFun mem_fun_;
+ const P1 p1_;
+};
+
+template<class Obj,typename MemFun,typename P1>
+inline obj_scope_guard_impl1<Obj,MemFun,P1> make_obj_guard(
+ Obj& obj,MemFun mem_fun,P1 p1)
+{
+ return obj_scope_guard_impl1<Obj,MemFun,P1>(obj,mem_fun,p1);
+}
+
+template<class Obj,typename MemFun,typename P1,typename P2>
+class obj_scope_guard_impl2:public scope_guard_impl_base
+{
+public:
+ obj_scope_guard_impl2(Obj& obj,MemFun mem_fun,P1 p1,P2 p2):
+ obj_(obj),mem_fun_(mem_fun),p1_(p1),p2_(p2)
+ {}
+ ~obj_scope_guard_impl2(){scope_guard_impl_base::safe_execute(*this);}
+ void execute(){(obj_.*mem_fun_)(p1_,p2_);}
+
+protected:
+ Obj& obj_;
+ MemFun mem_fun_;
+ const P1 p1_;
+ const P2 p2_;
+};
+
+template<class Obj,typename MemFun,typename P1,typename P2>
+inline obj_scope_guard_impl2<Obj,MemFun,P1,P2>
+make_obj_guard(Obj& obj,MemFun mem_fun,P1 p1,P2 p2)
+{
+ return obj_scope_guard_impl2<Obj,MemFun,P1,P2>(obj,mem_fun,p1,p2);
+}
+
+template<class Obj,typename MemFun,typename P1,typename P2,typename P3>
+class obj_scope_guard_impl3:public scope_guard_impl_base
+{
+public:
+ obj_scope_guard_impl3(Obj& obj,MemFun mem_fun,P1 p1,P2 p2,P3 p3):
+ obj_(obj),mem_fun_(mem_fun),p1_(p1),p2_(p2),p3_(p3)
+ {}
+ ~obj_scope_guard_impl3(){scope_guard_impl_base::safe_execute(*this);}
+ void execute(){(obj_.*mem_fun_)(p1_,p2_,p3_);}
+
+protected:
+ Obj& obj_;
+ MemFun mem_fun_;
+ const P1 p1_;
+ const P2 p2_;
+ const P3 p3_;
+};
+
+template<class Obj,typename MemFun,typename P1,typename P2,typename P3>
+inline obj_scope_guard_impl3<Obj,MemFun,P1,P2,P3>
+make_obj_guard(Obj& obj,MemFun mem_fun,P1 p1,P2 p2,P3 p3)
+{
+ return obj_scope_guard_impl3<Obj,MemFun,P1,P2,P3>(obj,mem_fun,p1,p2,p3);
+}
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#endif
diff --git a/boost/boost/multi_index/detail/seq_index_node.hpp b/boost/boost/multi_index/detail/seq_index_node.hpp
new file mode 100644
index 00000000000..faa602a8469
--- /dev/null
+++ b/boost/boost/multi_index/detail/seq_index_node.hpp
@@ -0,0 +1,175 @@
+/* Copyright 2003-2006 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_SEQ_INDEX_NODE_HPP
+#define BOOST_MULTI_INDEX_DETAIL_SEQ_INDEX_NODE_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <algorithm>
+
+namespace boost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* doubly-linked node for use by sequenced_index */
+
+struct sequenced_index_node_impl
+{
+ sequenced_index_node_impl*& prior(){return prior_;}
+ sequenced_index_node_impl* prior()const{return prior_;}
+ sequenced_index_node_impl*& next(){return next_;}
+ sequenced_index_node_impl* next()const{return next_;}
+
+ /* interoperability with bidir_node_iterator */
+
+ static void increment(sequenced_index_node_impl*& x){x=x->next();}
+ static void decrement(sequenced_index_node_impl*& x){x=x->prior();}
+
+ /* algorithmic stuff */
+
+ static void link(
+ sequenced_index_node_impl* x,sequenced_index_node_impl* header)
+ {
+ x->prior()=header->prior();
+ x->next()=header;
+ x->prior()->next()=x->next()->prior()=x;
+ };
+
+ static void unlink(sequenced_index_node_impl* x)
+ {
+ x->prior()->next()=x->next();
+ x->next()->prior()=x->prior();
+ }
+
+ static void relink(
+ sequenced_index_node_impl* position,sequenced_index_node_impl* x)
+ {
+ unlink(x);
+ x->prior()=position->prior();
+ x->next()=position;
+ x->prior()->next()=x->next()->prior()=x;
+ }
+
+ static void relink(
+ sequenced_index_node_impl* position,
+ sequenced_index_node_impl* x,sequenced_index_node_impl* y)
+ {
+ /* position is assumed not to be in [x,y) */
+
+ if(x!=y){
+ sequenced_index_node_impl* z=y->prior();
+ x->prior()->next()=y;
+ y->prior()=x->prior();
+ x->prior()=position->prior();
+ z->next()=position;
+ x->prior()->next()=x;
+ z->next()->prior()=z;
+ }
+ }
+
+ static void reverse(sequenced_index_node_impl* header)
+ {
+ sequenced_index_node_impl* x=header;
+ do{
+ sequenced_index_node_impl* y=x->next();
+ std::swap(x->prior(),x->next());
+ x=y;
+ }while(x!=header);
+ }
+
+ static void swap(sequenced_index_node_impl* x,sequenced_index_node_impl* y)
+ {
+ /* This swap function does not exchange the header nodes,
+ * but rather their pointers. This is *not* used for implementing
+ * sequenced_index::swap.
+ */
+
+ if(x->next()!=x){
+ if(y->next()!=y){
+ std::swap(x->next(),y->next());
+ std::swap(x->prior(),y->prior());
+ x->next()->prior()=x->prior()->next()=x;
+ y->next()->prior()=y->prior()->next()=y;
+ }
+ else{
+ y->next()=x->next();
+ y->prior()=x->prior();
+ x->next()=x->prior()=x;
+ y->next()->prior()=y->prior()->next()=y;
+ }
+ }
+ else if(y->next()!=y){
+ x->next()=y->next();
+ x->prior()=y->prior();
+ y->next()=y->prior()=y;
+ x->next()->prior()=x->prior()->next()=x;
+ }
+ }
+
+private:
+ sequenced_index_node_impl* prior_;
+ sequenced_index_node_impl* next_;
+};
+
+template<typename Super>
+struct sequenced_index_node_trampoline:sequenced_index_node_impl{};
+
+template<typename Super>
+struct sequenced_index_node:Super,sequenced_index_node_trampoline<Super>
+{
+ sequenced_index_node_impl*& prior(){return impl_type::prior();}
+ sequenced_index_node_impl* prior()const{return impl_type::prior();}
+ sequenced_index_node_impl*& next(){return impl_type::next();}
+ sequenced_index_node_impl* next()const{return impl_type::next();}
+
+ sequenced_index_node_impl* impl()
+ {return static_cast<impl_type*>(this);}
+ const sequenced_index_node_impl* impl()const
+ {return static_cast<const impl_type*>(this);}
+
+ static sequenced_index_node* from_impl(sequenced_index_node_impl *x)
+ {return static_cast<sequenced_index_node*>(static_cast<impl_type*>(x));}
+ static const sequenced_index_node* from_impl(
+ const sequenced_index_node_impl* x)
+ {
+ return static_cast<const sequenced_index_node*>(
+ static_cast<const impl_type*>(x));
+ }
+
+ /* interoperability with bidir_node_iterator */
+
+ static void increment(sequenced_index_node*& x)
+ {
+ sequenced_index_node_impl* xi=x->impl();
+ impl_type::increment(xi);
+ x=from_impl(xi);
+ }
+
+ static void decrement(sequenced_index_node*& x)
+ {
+ sequenced_index_node_impl* xi=x->impl();
+ impl_type::decrement(xi);
+ x=from_impl(xi);
+ }
+
+private:
+ typedef sequenced_index_node_trampoline<Super> impl_type;
+};
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#endif
diff --git a/boost/boost/multi_index/detail/seq_index_ops.hpp b/boost/boost/multi_index/detail/seq_index_ops.hpp
new file mode 100644
index 00000000000..0e71572683d
--- /dev/null
+++ b/boost/boost/multi_index/detail/seq_index_ops.hpp
@@ -0,0 +1,185 @@
+/* Copyright 2003-2006 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_SEQ_INDEX_OPS_HPP
+#define BOOST_MULTI_INDEX_DETAIL_SEQ_INDEX_OPS_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/detail/no_exceptions_support.hpp>
+#include <boost/multi_index/detail/seq_index_node.hpp>
+#include <boost/limits.hpp>
+#include <boost/type_traits/aligned_storage.hpp>
+#include <boost/type_traits/alignment_of.hpp>
+#include <cstddef>
+
+namespace boost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* Common code for sequenced_index memfuns having templatized and
+ * non-templatized versions.
+ */
+
+template <typename SequencedIndex,typename Predicate>
+void sequenced_index_remove(SequencedIndex& x,Predicate pred)
+{
+ typedef typename SequencedIndex::iterator iterator;
+ iterator first=x.begin(),last=x.end();
+ while(first!=last){
+ if(pred(*first))x.erase(first++);
+ else ++first;
+ }
+}
+
+template <typename SequencedIndex,class BinaryPredicate>
+void sequenced_index_unique(SequencedIndex& x,BinaryPredicate binary_pred)
+{
+ typedef typename SequencedIndex::iterator iterator;
+ iterator first=x.begin();
+ iterator last=x.end();
+ if(first!=last){
+ for(iterator middle=first;++middle!=last;middle=first){
+ if(binary_pred(*middle,*first))x.erase(middle);
+ else first=middle;
+ }
+ }
+}
+
+template <typename SequencedIndex,typename Compare>
+void sequenced_index_merge(SequencedIndex& x,SequencedIndex& y,Compare comp)
+{
+ typedef typename SequencedIndex::iterator iterator;
+ if(&x!=&y){
+ iterator first0=x.begin(),last0=x.end();
+ iterator first1=y.begin(),last1=y.end();
+ while(first0!=last0&&first1!=last1){
+ if(comp(*first1,*first0))x.splice(first0,y,first1++);
+ else ++first0;
+ }
+ x.splice(last0,y,first1,last1);
+ }
+}
+
+/* sorting */
+
+/* auxiliary stuff */
+
+template<typename Node,typename Compare>
+void sequenced_index_collate(
+ sequenced_index_node_impl* x,sequenced_index_node_impl* y,Compare comp
+ BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(Node))
+{
+ sequenced_index_node_impl* first0=x->next();
+ sequenced_index_node_impl* last0=x;
+ sequenced_index_node_impl* first1=y->next();
+ sequenced_index_node_impl* last1=y;
+ while(first0!=last0&&first1!=last1){
+ if(comp(
+ Node::from_impl(first1)->value(),Node::from_impl(first0)->value())){
+ sequenced_index_node_impl* tmp=first1->next();
+ sequenced_index_node_impl::relink(first0,first1);
+ first1=tmp;
+ }
+ else first0=first0->next();
+ }
+ sequenced_index_node_impl::relink(last0,first1,last1);
+}
+
+/* Some versions of CGG require a bogus typename in counter_spc
+ * inside sequenced_index_sort if the following is defined
+ * also inside sequenced_index_sort.
+ */
+
+BOOST_STATIC_CONSTANT(
+ std::size_t,
+ sequenced_index_sort_max_fill=
+ (std::size_t)std::numeric_limits<std::size_t>::digits+1);
+
+template<typename Node,typename Compare>
+void sequenced_index_sort(Node* header,Compare comp)
+{
+ /* Musser's mergesort, see http://www.cs.rpi.edu/~musser/gp/List/lists1.html.
+ * The implementation is a little convoluted: in the original code
+ * counter elements and carry are std::lists: here we do not want
+ * to use multi_index instead, so we do things at a lower level, managing
+ * directly the internal node representation.
+ * Incidentally, the implementations I've seen of this algorithm (SGI,
+ * Dinkumware, STLPort) are not exception-safe: this is. Moreover, we do not
+ * use any dynamic storage.
+ */
+
+ if(header->next()==header->impl()||
+ header->next()->next()==header->impl())return;
+
+ aligned_storage<
+ sizeof(sequenced_index_node_impl),
+ alignment_of<
+ sequenced_index_node_impl>::value
+ >::type carry_spc;
+ sequenced_index_node_impl& carry=
+ *static_cast<sequenced_index_node_impl*>(static_cast<void*>(&carry_spc));
+ aligned_storage<
+ sizeof(
+ sequenced_index_node_impl
+ [sequenced_index_sort_max_fill]),
+ alignment_of<
+ sequenced_index_node_impl
+ [sequenced_index_sort_max_fill]
+ >::value
+ >::type counter_spc;
+ sequenced_index_node_impl* counter=
+ static_cast<sequenced_index_node_impl*>(static_cast<void*>(&counter_spc));
+ std::size_t fill=0;
+
+ carry.prior()=carry.next()=&carry;
+ counter[0].prior()=counter[0].next()=&counter[0];
+
+ BOOST_TRY{
+ while(header->next()!=header->impl()){
+ sequenced_index_node_impl::relink(carry.next(),header->next());
+ std::size_t i=0;
+ while(i<fill&&counter[i].next()!=&counter[i]){
+ sequenced_index_collate<Node>(&carry,&counter[i++],comp);
+ }
+ sequenced_index_node_impl::swap(&carry,&counter[i]);
+ if(i==fill){
+ ++fill;
+ counter[fill].prior()=counter[fill].next()=&counter[fill];
+ }
+ }
+
+ for(std::size_t i=1;i<fill;++i){
+ sequenced_index_collate<Node>(&counter[i],&counter[i-1],comp);
+ }
+ sequenced_index_node_impl::swap(header->impl(),&counter[fill-1]);
+ }
+ BOOST_CATCH(...)
+ {
+ sequenced_index_node_impl::relink(header->impl(),carry.next(),&carry);
+ for(std::size_t i=0;i<=fill;++i){
+ sequenced_index_node_impl::relink(
+ header->impl(),counter[i].next(),&counter[i]);
+ }
+ BOOST_RETHROW;
+ }
+ BOOST_CATCH_END
+}
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#endif
diff --git a/boost/boost/multi_index/detail/uintptr_type.hpp b/boost/boost/multi_index/detail/uintptr_type.hpp
new file mode 100644
index 00000000000..931f442770a
--- /dev/null
+++ b/boost/boost/multi_index/detail/uintptr_type.hpp
@@ -0,0 +1,69 @@
+/* Copyright 2003-2005 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_UINTPTR_TYPE_HPP
+#define BOOST_MULTI_INDEX_DETAIL_UINTPTR_TYPE_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/mpl/bool.hpp>
+
+namespace boost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* has_uintptr_type is an MPL integral constant determining whether
+ * there exists an unsigned integral type with the same size as
+ * void *.
+ * uintptr_type is such a type if has_uintptr is true, or unsigned int
+ * otherwise.
+ * Note that uintptr_type is more restrictive than C99 uintptr_t,
+ * where an integral type with size greater than that of void *
+ * would be conformant.
+ */
+
+template<int N>struct uintptr_candidates;
+template<>struct uintptr_candidates<-1>{typedef unsigned int type;};
+template<>struct uintptr_candidates<0> {typedef unsigned int type;};
+template<>struct uintptr_candidates<1> {typedef unsigned short type;};
+template<>struct uintptr_candidates<2> {typedef unsigned long type;};
+
+#if defined(BOOST_HAS_LONG_LONG)
+template<>struct uintptr_candidates<3> {typedef unsigned long long type;};
+#else
+template<>struct uintptr_candidates<3> {typedef unsigned int type;};
+#endif
+
+struct uintptr_aux
+{
+ BOOST_STATIC_CONSTANT(int,index=
+ sizeof(void*)==sizeof(uintptr_candidates<0>::type)?0:
+ sizeof(void*)==sizeof(uintptr_candidates<1>::type)?1:
+ sizeof(void*)==sizeof(uintptr_candidates<2>::type)?2:
+ sizeof(void*)==sizeof(uintptr_candidates<3>::type)?3:-1);
+
+ BOOST_STATIC_CONSTANT(bool,has_uintptr_type=(index>=0));
+
+ typedef uintptr_candidates<index>::type type;
+};
+
+typedef mpl::bool_<uintptr_aux::has_uintptr_type> has_uintptr_type;
+typedef uintptr_aux::type uintptr_type;
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#endif
diff --git a/boost/boost/multi_index/detail/unbounded.hpp b/boost/boost/multi_index/detail/unbounded.hpp
new file mode 100644
index 00000000000..8571b25aec0
--- /dev/null
+++ b/boost/boost/multi_index/detail/unbounded.hpp
@@ -0,0 +1,52 @@
+/* Copyright 2003-2006 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_UNBOUNDED_HPP
+#define BOOST_MULTI_INDEX_DETAIL_UNBOUNDED_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/detail/workaround.hpp>
+
+namespace boost{
+
+namespace multi_index{
+
+/* dummy type and variable for use in ordered_index::range() */
+
+namespace detail{
+
+struct unbounded_type{};
+
+} /* namespace multi_index::detail */
+
+namespace{
+
+#if BOOST_WORKAROUND(BOOST_MSVC,<1300)
+/* The default branch actually works for MSVC 6.0, but seems like
+ * the const qualifier reduces the performance of ordered indices! This
+ * behavior is hard to explain and probably a test artifact, but it
+ * does not hurt to have the workaround anyway.
+ */
+
+static detail::unbounded_type unbounded_obj=detail::unbounded_type();
+static detail::unbounded_type& unbounded=unbounded_obj;
+#else
+const detail::unbounded_type unbounded=detail::unbounded_type();
+#endif
+
+} /* unnamed */
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#endif
diff --git a/boost/boost/multi_index/detail/value_compare.hpp b/boost/boost/multi_index/detail/value_compare.hpp
new file mode 100644
index 00000000000..a55046d05da
--- /dev/null
+++ b/boost/boost/multi_index/detail/value_compare.hpp
@@ -0,0 +1,52 @@
+/* Copyright 2003-2005 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_VALUE_COMPARE_HPP
+#define BOOST_MULTI_INDEX_DETAIL_VALUE_COMPARE_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/call_traits.hpp>
+#include <functional>
+
+namespace boost{
+
+namespace multi_index{
+
+namespace detail{
+
+template<typename Value,typename KeyFromValue,typename Compare>
+struct value_comparison:std::binary_function<Value,Value,bool>
+{
+ value_comparison(KeyFromValue key_=KeyFromValue(),Compare comp_=Compare()):
+ key(key_),comp(comp_)
+ {
+ }
+
+ bool operator()(
+ typename call_traits<Value>::param_type x,
+ typename call_traits<Value>::param_type y)const
+ {
+ return comp(key(x),key(y));
+ }
+
+private:
+ KeyFromValue key;
+ Compare comp;
+};
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#endif
diff --git a/boost/boost/multi_index/hashed_index.hpp b/boost/boost/multi_index/hashed_index.hpp
new file mode 100644
index 00000000000..54af2438223
--- /dev/null
+++ b/boost/boost/multi_index/hashed_index.hpp
@@ -0,0 +1,1075 @@
+/* Copyright 2003-2007 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_HASHED_INDEX_HPP
+#define BOOST_MULTI_INDEX_HASHED_INDEX_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <algorithm>
+#include <boost/call_traits.hpp>
+#include <boost/detail/allocator_utilities.hpp>
+#include <boost/detail/no_exceptions_support.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/limits.hpp>
+#include <boost/mpl/push_front.hpp>
+#include <boost/multi_index/detail/access_specifier.hpp>
+#include <boost/multi_index/detail/auto_space.hpp>
+#include <boost/multi_index/detail/bucket_array.hpp>
+#include <boost/multi_index/detail/hash_index_iterator.hpp>
+#include <boost/multi_index/detail/modify_key_adaptor.hpp>
+#include <boost/multi_index/detail/safe_ctr_proxy.hpp>
+#include <boost/multi_index/detail/safe_mode.hpp>
+#include <boost/multi_index/detail/scope_guard.hpp>
+#include <boost/multi_index/hashed_index_fwd.hpp>
+#include <boost/tuple/tuple.hpp>
+#include <cstddef>
+#include <functional>
+#include <utility>
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+#include <boost/serialization/nvp.hpp>
+#endif
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)
+#define BOOST_MULTI_INDEX_HASHED_INDEX_CHECK_INVARIANT \
+ detail::scope_guard BOOST_JOIN(check_invariant_,__LINE__)= \
+ detail::make_obj_guard(*this,&hashed_index::check_invariant_); \
+ BOOST_JOIN(check_invariant_,__LINE__).touch();
+#else
+#define BOOST_MULTI_INDEX_HASHED_INDEX_CHECK_INVARIANT
+#endif
+
+namespace boost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* hashed_index adds a layer of hashed indexing to a given Super */
+
+/* Most of the implementation of unique and non-unique indices is
+ * shared. We tell from one another on instantiation time by using
+ * these tags.
+ */
+
+struct hashed_unique_tag{};
+struct hashed_non_unique_tag{};
+
+template<
+ typename KeyFromValue,typename Hash,typename Pred,
+ typename SuperMeta,typename TagList,typename Category
+>
+class hashed_index:
+ BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS SuperMeta::type
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+#if BOOST_WORKAROUND(BOOST_MSVC,<1300)
+ ,public safe_ctr_proxy_impl<
+ hashed_index_iterator<
+ hashed_index_node<typename SuperMeta::type::node_type>,
+ bucket_array<typename SuperMeta::type::final_allocator_type> >,
+ hashed_index<KeyFromValue,Hash,Pred,SuperMeta,TagList,Category> >
+#else
+ ,public safe_mode::safe_container<
+ hashed_index<KeyFromValue,Hash,Pred,SuperMeta,TagList,Category> >
+#endif
+#endif
+
+{
+#if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)&&\
+ BOOST_WORKAROUND(__MWERKS__,<=0x3003)
+/* The "ISO C++ Template Parser" option in CW8.3 has a problem with the
+ * lifetime of const references bound to temporaries --precisely what
+ * scopeguards are.
+ */
+
+#pragma parse_mfunc_templ off
+#endif
+
+ typedef typename SuperMeta::type super;
+
+protected:
+ typedef hashed_index_node<
+ typename super::node_type> node_type;
+ typedef bucket_array<
+ typename super::final_allocator_type> bucket_array_type;
+
+public:
+ /* types */
+
+ typedef typename KeyFromValue::result_type key_type;
+ typedef typename node_type::value_type value_type;
+ typedef KeyFromValue key_from_value;
+ typedef Hash hasher;
+ typedef Pred key_equal;
+ typedef tuple<std::size_t,
+ key_from_value,hasher,key_equal> ctor_args;
+ typedef typename super::final_allocator_type allocator_type;
+ typedef typename allocator_type::pointer pointer;
+ typedef typename allocator_type::const_pointer const_pointer;
+ typedef typename allocator_type::reference reference;
+ typedef typename allocator_type::const_reference const_reference;
+ typedef std::size_t size_type;
+ typedef std::ptrdiff_t difference_type;
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+#if BOOST_WORKAROUND(BOOST_MSVC,<1300)
+ typedef safe_mode::safe_iterator<
+ hashed_index_iterator<
+ node_type,bucket_array_type>,
+ safe_ctr_proxy<
+ hashed_index_iterator<
+ node_type,bucket_array_type> > > iterator;
+#else
+ typedef safe_mode::safe_iterator<
+ hashed_index_iterator<
+ node_type,bucket_array_type>,
+ hashed_index> iterator;
+#endif
+#else
+ typedef hashed_index_iterator<
+ node_type,bucket_array_type> iterator;
+#endif
+
+ typedef iterator const_iterator;
+
+ typedef iterator local_iterator;
+ typedef const_iterator const_local_iterator;
+ typedef TagList tag_list;
+
+protected:
+ typedef typename super::final_node_type final_node_type;
+ typedef tuples::cons<
+ ctor_args,
+ typename super::ctor_args_list> ctor_args_list;
+ typedef typename mpl::push_front<
+ typename super::index_type_list,
+ hashed_index>::type index_type_list;
+ typedef typename mpl::push_front<
+ typename super::iterator_type_list,
+ iterator>::type iterator_type_list;
+ typedef typename mpl::push_front<
+ typename super::const_iterator_type_list,
+ const_iterator>::type const_iterator_type_list;
+ typedef typename super::copy_map_type copy_map_type;
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+ typedef typename super::index_saver_type index_saver_type;
+ typedef typename super::index_loader_type index_loader_type;
+#endif
+
+private:
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+#if BOOST_WORKAROUND(BOOST_MSVC,<1300)
+ typedef safe_ctr_proxy_impl<
+ hashed_index_iterator<
+ node_type,
+ bucket_array_type>,
+ hashed_index> safe_super;
+#else
+ typedef safe_mode::safe_container<
+ hashed_index> safe_super;
+#endif
+#endif
+
+ typedef typename call_traits<value_type>::param_type value_param_type;
+ typedef typename call_traits<
+ key_type>::param_type key_param_type;
+
+public:
+
+ /* construct/destroy/copy
+ * Default and copy ctors are in the protected section as indices are
+ * not supposed to be created on their own. No range ctor either.
+ */
+
+ hashed_index<KeyFromValue,Hash,Pred,SuperMeta,TagList,Category>& operator=(
+ const hashed_index<KeyFromValue,Hash,Pred,SuperMeta,TagList,Category>& x)
+ {
+ this->final()=x.final();
+ return *this;
+ }
+
+ allocator_type get_allocator()const
+ {
+ return this->final().get_allocator();
+ }
+
+ /* size and capacity */
+
+ bool empty()const{return this->final_empty_();}
+ size_type size()const{return this->final_size_();}
+ size_type max_size()const{return this->final_max_size_();}
+
+ /* iterators */
+
+ iterator begin()
+ {
+ return make_iterator(
+ node_type::from_impl(buckets.at(first_bucket)->next()));
+ }
+
+ const_iterator begin()const
+ {
+ return make_iterator(
+ node_type::from_impl(buckets.at(first_bucket)->next()));
+ }
+
+ iterator end(){return make_iterator(header());}
+ const_iterator end()const{return make_iterator(header());}
+
+ /* modifiers */
+
+ std::pair<iterator,bool> insert(value_param_type x)
+ {
+ BOOST_MULTI_INDEX_HASHED_INDEX_CHECK_INVARIANT;
+ std::pair<final_node_type*,bool> p=this->final_insert_(x);
+ return std::pair<iterator,bool>(make_iterator(p.first),p.second);
+ }
+
+ iterator insert(iterator position,value_param_type x)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+ BOOST_MULTI_INDEX_HASHED_INDEX_CHECK_INVARIANT;
+ std::pair<final_node_type*,bool> p=this->final_insert_(
+ x,static_cast<final_node_type*>(position.get_node()));
+ return make_iterator(p.first);
+ }
+
+ template<typename InputIterator>
+ void insert(InputIterator first,InputIterator last)
+ {
+ BOOST_MULTI_INDEX_HASHED_INDEX_CHECK_INVARIANT;
+ iterator hint=end();
+ for(;first!=last;++first)hint=insert(hint,*first);
+ }
+
+ iterator erase(iterator position)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+ BOOST_MULTI_INDEX_HASHED_INDEX_CHECK_INVARIANT;
+ this->final_erase_(static_cast<final_node_type*>(position++.get_node()));
+ return position;
+ }
+
+ size_type erase(key_param_type k)
+ {
+ BOOST_MULTI_INDEX_HASHED_INDEX_CHECK_INVARIANT;
+
+ size_type s=0;
+ std::size_t buc=buckets.position(hash(k));
+ hashed_index_node_impl* x=buckets.at(buc);
+ hashed_index_node_impl* y=x->next();
+ while(y!=x){
+ if(eq(k,key(node_type::from_impl(y)->value()))){
+ bool b;
+ do{
+ hashed_index_node_impl* z=y->next();
+ b=z!=x&&eq(
+ key(node_type::from_impl(y)->value()),
+ key(node_type::from_impl(z)->value()));
+ this->final_erase_(
+ static_cast<final_node_type*>(node_type::from_impl(y)));
+ y=z;
+ ++s;
+ }while(b);
+ break;
+ }
+ y=y->next();
+ }
+ return s;
+ }
+
+ iterator erase(iterator first,iterator last)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(first);
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(last);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(first,*this);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(last,*this);
+ BOOST_MULTI_INDEX_CHECK_VALID_RANGE(first,last);
+ BOOST_MULTI_INDEX_HASHED_INDEX_CHECK_INVARIANT;
+ while(first!=last){
+ first=erase(first);
+ }
+ return first;
+ }
+
+ bool replace(iterator position,value_param_type x)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+ BOOST_MULTI_INDEX_HASHED_INDEX_CHECK_INVARIANT;
+ return this->final_replace_(
+ x,static_cast<final_node_type*>(position.get_node()));
+ }
+
+ template<typename Modifier>
+ bool modify(iterator position,Modifier mod)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+ BOOST_MULTI_INDEX_HASHED_INDEX_CHECK_INVARIANT;
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ /* MSVC++ 6.0 optimizer on safe mode code chokes if this
+ * this is not added. Left it for all compilers as it does no
+ * harm.
+ */
+
+ position.detach();
+#endif
+
+ return this->final_modify_(
+ mod,static_cast<final_node_type*>(position.get_node()));
+ }
+
+ template<typename Modifier>
+ bool modify_key(iterator position,Modifier mod)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+ BOOST_MULTI_INDEX_HASHED_INDEX_CHECK_INVARIANT;
+ return modify(
+ position,modify_key_adaptor<Modifier,value_type,KeyFromValue>(mod,key));
+ }
+
+ void clear()
+ {
+ BOOST_MULTI_INDEX_HASHED_INDEX_CHECK_INVARIANT;
+ this->final_clear_();
+ }
+
+ void swap(hashed_index<KeyFromValue,Hash,Pred,SuperMeta,TagList,Category>& x)
+ {
+ BOOST_MULTI_INDEX_HASHED_INDEX_CHECK_INVARIANT;
+ this->final_swap_(x.final());
+ }
+
+ /* observers */
+
+ key_from_value key_extractor()const{return key;}
+ hasher hash_function()const{return hash;}
+ key_equal key_eq()const{return eq;}
+
+ /* lookup */
+
+ /* Internally, these ops rely on const_iterator being the same
+ * type as iterator.
+ */
+
+ template<typename CompatibleKey>
+ iterator find(const CompatibleKey& k)const
+ {
+ return find(k,hash,eq);
+ }
+
+ template<
+ typename CompatibleKey,typename CompatibleHash,typename CompatiblePred
+ >
+ iterator find(
+ const CompatibleKey& k,
+ const CompatibleHash& hash,const CompatiblePred& eq)const
+ {
+ std::size_t buc=buckets.position(hash(k));
+ hashed_index_node_impl* x=buckets.at(buc);
+ hashed_index_node_impl* y=x->next();
+ while(y!=x){
+ if(eq(k,key(node_type::from_impl(y)->value()))){
+ return make_iterator(node_type::from_impl(y));
+ }
+ y=y->next();
+ }
+ return end();
+ }
+
+ template<typename CompatibleKey>
+ size_type count(const CompatibleKey& k)const
+ {
+ return count(k,hash,eq);
+ }
+
+ template<
+ typename CompatibleKey,typename CompatibleHash,typename CompatiblePred
+ >
+ size_type count(
+ const CompatibleKey& k,
+ const CompatibleHash& hash,const CompatiblePred& eq)const
+ {
+ size_type res=0;
+ std::size_t buc=buckets.position(hash(k));
+ hashed_index_node_impl* x=buckets.at(buc);
+ hashed_index_node_impl* y=x->next();
+ while(y!=x){
+ if(eq(k,key(node_type::from_impl(y)->value()))){
+ do{
+ ++res;
+ y=y->next();
+ }while(y!=x&&eq(k,key(node_type::from_impl(y)->value())));
+ break;
+ }
+ y=y->next();
+ }
+ return res;
+ }
+
+ template<typename CompatibleKey>
+ std::pair<iterator,iterator> equal_range(const CompatibleKey& k)const
+ {
+ return equal_range(k,hash,eq);
+ }
+
+ template<
+ typename CompatibleKey,typename CompatibleHash,typename CompatiblePred
+ >
+ std::pair<iterator,iterator> equal_range(
+ const CompatibleKey& k,
+ const CompatibleHash& hash,const CompatiblePred& eq)const
+ {
+ std::size_t buc=buckets.position(hash(k));
+ hashed_index_node_impl* x=buckets.at(buc);
+ hashed_index_node_impl* y=x->next();
+ while(y!=x){
+ if(eq(k,key(node_type::from_impl(y)->value()))){
+ hashed_index_node_impl* y0=y;
+ do{
+ y=y->next();
+ }while(y!=x&&eq(k,key(node_type::from_impl(y)->value())));
+ if(y==x){
+ do{
+ ++y;
+ }while(y==y->next());
+ y=y->next();
+ }
+ return std::pair<iterator,iterator>(
+ make_iterator(node_type::from_impl(y0)),
+ make_iterator(node_type::from_impl(y)));
+ }
+ y=y->next();
+ }
+ return std::pair<iterator,iterator>(end(),end());
+ }
+
+ /* bucket interface */
+
+ size_type bucket_count()const{return buckets.size();}
+ size_type max_bucket_count()const{return static_cast<size_type>(-1);}
+
+ size_type bucket_size(size_type n)const
+ {
+ size_type res=0;
+ hashed_index_node_impl* x=buckets.at(n);
+ hashed_index_node_impl* y=x->next();
+ while(y!=x){
+ ++res;
+ y=y->next();
+ }
+ return res;
+ }
+
+ size_type bucket(key_param_type k)const
+ {
+ return buckets.position(hash(k));
+ }
+
+ local_iterator begin(size_type n)
+ {
+ return const_cast<const hashed_index*>(this)->begin(n);
+ }
+
+ const_local_iterator begin(size_type n)const
+ {
+ hashed_index_node_impl* x=buckets.at(n);
+ hashed_index_node_impl* y=x->next();
+ if(y==x)return end();
+ return make_iterator(node_type::from_impl(y));
+ }
+
+ local_iterator end(size_type n)
+ {
+ return const_cast<const hashed_index*>(this)->end(n);
+ }
+
+ const_local_iterator end(size_type n)const
+ {
+ hashed_index_node_impl* x=buckets.at(n);
+ if(x==x->next())return end();
+ do{
+ ++x;
+ }while(x==x->next());
+ return make_iterator(node_type::from_impl(x->next()));
+ }
+
+ /* hash policy */
+
+ float load_factor()const{return static_cast<float>(size())/bucket_count();}
+ float max_load_factor()const{return mlf;}
+ void max_load_factor(float z){mlf=z;calculate_max_load();}
+
+ void rehash(size_type n)
+ {
+ BOOST_MULTI_INDEX_HASHED_INDEX_CHECK_INVARIANT;
+ if(size()<max_load&&n<=bucket_count())return;
+
+ size_type bc =(std::numeric_limits<size_type>::max)();
+ float fbc=static_cast<float>(1+size()/mlf);
+ if(bc>fbc){
+ bc=static_cast<size_type>(fbc);
+ if(bc<n)bc=n;
+ }
+ unchecked_rehash(bc);
+ }
+
+BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS:
+ hashed_index(const ctor_args_list& args_list,const allocator_type& al):
+ super(args_list.get_tail(),al),
+ key(tuples::get<1>(args_list.get_head())),
+ hash(tuples::get<2>(args_list.get_head())),
+ eq(tuples::get<3>(args_list.get_head())),
+ buckets(al,header()->impl(),tuples::get<0>(args_list.get_head())),
+ mlf(1.0),
+ first_bucket(buckets.size())
+ {
+ calculate_max_load();
+ }
+
+ hashed_index(
+ const hashed_index<KeyFromValue,Hash,Pred,SuperMeta,TagList,Category>& x):
+ super(x),
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ safe_super(),
+#endif
+
+ key(x.key),
+ hash(x.hash),
+ eq(x.eq),
+ buckets(x.get_allocator(),header()->impl(),x.buckets.size()),
+ mlf(x.mlf),
+ max_load(x.max_load),
+ first_bucket(x.first_bucket)
+ {
+ /* Copy ctor just takes the internal configuration objects from x. The rest
+ * is done in subsequent call to copy_().
+ */
+ }
+
+ ~hashed_index()
+ {
+ /* the container is guaranteed to be empty by now */
+ }
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ iterator make_iterator(node_type* node)
+ {
+ return iterator(node,&buckets,this);
+ }
+
+ const_iterator make_iterator(node_type* node)const
+ {
+ return const_iterator(
+ node,
+ &const_cast<bucket_array_type&>(buckets),
+ const_cast<hashed_index*>(this));
+ }
+#else
+ iterator make_iterator(node_type* node)
+ {
+ return iterator(node,&buckets);
+ }
+
+ const_iterator make_iterator(node_type* node)const
+ {
+ return const_iterator(node,&const_cast<bucket_array_type&>(buckets));
+ }
+#endif
+
+ void copy_(
+ const hashed_index<KeyFromValue,Hash,Pred,SuperMeta,TagList,Category>& x,
+ const copy_map_type& map)
+ {
+ for(hashed_index_node_impl* begin_org=x.buckets.begin(),
+ * begin_cpy=buckets.begin(),
+ * end_org=x.buckets.end();
+ begin_org!=end_org;++begin_org,++begin_cpy){
+
+ hashed_index_node_impl* next_org=begin_org->next();
+ hashed_index_node_impl* cpy=begin_cpy;
+ while(next_org!=begin_org){
+ cpy->next()=
+ static_cast<node_type*>(
+ map.find(
+ static_cast<final_node_type*>(
+ node_type::from_impl(next_org))))->impl();
+ next_org=next_org->next();
+ cpy=cpy->next();
+ }
+ cpy->next()=begin_cpy;
+ }
+
+ super::copy_(x,map);
+ }
+
+ node_type* insert_(value_param_type v,node_type* x)
+ {
+ reserve(size()+1);
+
+ std::size_t buc=find_bucket(v);
+ hashed_index_node_impl* pos=buckets.at(buc);
+ if(!link_point(v,pos,Category()))return node_type::from_impl(pos);
+
+ node_type* res=static_cast<node_type*>(super::insert_(v,x));
+ if(res==x){
+ link(x,pos);
+ if(first_bucket>buc)first_bucket=buc;
+ }
+ return res;
+ }
+
+ node_type* insert_(value_param_type v,node_type* position,node_type* x)
+ {
+ reserve(size()+1);
+
+ std::size_t buc=find_bucket(v);
+ hashed_index_node_impl* pos=buckets.at(buc);
+ if(!link_point(v,pos,Category()))return node_type::from_impl(pos);
+
+ node_type* res=static_cast<node_type*>(super::insert_(v,position,x));
+ if(res==x){
+ link(x,pos);
+ if(first_bucket>buc)first_bucket=buc;
+ }
+ return res;
+ }
+
+ void erase_(node_type* x)
+ {
+ unlink(x);
+ first_bucket=buckets.first_nonempty(first_bucket);
+ super::erase_(x);
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ detach_iterators(x);
+#endif
+ }
+
+ void delete_all_nodes_()
+ {
+ for(hashed_index_node_impl* x=buckets.begin(),*x_end=buckets.end();
+ x!=x_end;++x){
+ hashed_index_node_impl* y=x->next();
+ while(y!=x){
+ hashed_index_node_impl* z=y->next();
+ this->final_delete_node_(
+ static_cast<final_node_type*>(node_type::from_impl(y)));
+ y=z;
+ }
+ }
+ }
+
+ void clear_()
+ {
+ super::clear_();
+ buckets.clear();
+ first_bucket=buckets.size();
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ safe_super::detach_dereferenceable_iterators();
+#endif
+ }
+
+ void swap_(
+ hashed_index<KeyFromValue,Hash,Pred,SuperMeta,TagList,Category>& x)
+ {
+ std::swap(key,x.key);
+ std::swap(hash,x.hash);
+ std::swap(eq,x.eq);
+ buckets.swap(x.buckets);
+ std::swap(mlf,x.mlf);
+ std::swap(max_load,x.max_load);
+ std::swap(first_bucket,x.first_bucket);
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ safe_super::swap(x);
+#endif
+
+ super::swap_(x);
+ }
+
+ bool replace_(value_param_type v,node_type* x)
+ {
+ if(eq(key(v),key(x->value()))){
+ return super::replace_(v,x);
+ }
+
+ hashed_index_node_impl* y=prev(x);
+ unlink_next(y);
+
+ BOOST_TRY{
+ std::size_t buc=find_bucket(v);
+ hashed_index_node_impl* pos=buckets.at(buc);
+ if(link_point(v,pos,Category())&&super::replace_(v,x)){
+ link(x,pos);
+ if(first_bucket>buc){
+ first_bucket=buc;
+ }
+ else if(first_bucket<buc){
+ first_bucket=buckets.first_nonempty(first_bucket);
+ }
+ return true;
+ }
+ link(x,y);
+ return false;
+ }
+ BOOST_CATCH(...){
+ link(x,y);
+ BOOST_RETHROW;
+ }
+ BOOST_CATCH_END
+ }
+
+ bool modify_(node_type* x)
+ {
+ unlink(x);
+
+ std::size_t buc;
+ hashed_index_node_impl* pos;
+ BOOST_TRY
+ {
+ buc=find_bucket(x->value());
+ pos=buckets.at(buc);
+ if(!link_point(x->value(),pos,Category())){
+ first_bucket=buckets.first_nonempty(first_bucket);
+ super::erase_(x);
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ detach_iterators(x);
+#endif
+ return false;
+ }
+
+ }
+ BOOST_CATCH(...){
+ first_bucket=buckets.first_nonempty(first_bucket);
+ super::erase_(x);
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ detach_iterators(x);
+#endif
+
+ BOOST_RETHROW;
+ }
+ BOOST_CATCH_END
+
+ BOOST_TRY{
+ if(super::modify_(x)){
+ link(x,pos);
+ if(first_bucket>buc){
+ first_bucket=buc;
+ }
+ else if(first_bucket<buc){
+ first_bucket=buckets.first_nonempty(first_bucket);
+ }
+ return true;
+ }
+
+ first_bucket=buckets.first_nonempty(first_bucket);
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ detach_iterators(x);
+#endif
+ return false;
+ }
+ BOOST_CATCH(...){
+ first_bucket=buckets.first_nonempty(first_bucket);
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ detach_iterators(x);
+#endif
+
+ BOOST_RETHROW;
+ }
+ BOOST_CATCH_END
+ }
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+ /* serialization */
+
+ template<typename Archive>
+ void save_(
+ Archive& ar,const unsigned int version,const index_saver_type& sm)const
+ {
+ ar<<serialization::make_nvp("position",buckets);
+ super::save_(ar,version,sm);
+ }
+
+ template<typename Archive>
+ void load_(Archive& ar,const unsigned int version,const index_loader_type& lm)
+ {
+ ar>>serialization::make_nvp("position",buckets);
+ super::load_(ar,version,lm);
+ }
+#endif
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)
+ /* invariant stuff */
+
+ bool invariant_()const
+ {
+ if(size()==0||begin()==end()){
+ if(size()!=0||begin()!=end())return false;
+ }
+ else{
+ size_type s0=0;
+ for(const_iterator it=begin(),it_end=end();it!=it_end;++it,++s0){}
+ if(s0!=size())return false;
+
+ size_type s1=0;
+ for(size_type buc=0;buc<bucket_count();++buc){
+ size_type ss1=0;
+ for(const_local_iterator it=begin(buc),it_end=end(buc);
+ it!=it_end;++it,++ss1){
+ if(find_bucket(*it)!=buc)return false;
+ }
+ if(ss1!=bucket_size(buc))return false;
+ s1+=ss1;
+ }
+ if(s1!=size())return false;
+ }
+
+ if(first_bucket!=buckets.first_nonempty(0))return false;
+
+ return super::invariant_();
+ }
+
+ /* This forwarding function eases things for the boost::mem_fn construct
+ * in BOOST_MULTI_INDEX_HASHED_INDEX_CHECK_INVARIANT. Actually,
+ * final_check_invariant is already an inherited member function of index.
+ */
+ void check_invariant_()const{this->final_check_invariant_();}
+#endif
+
+private:
+ node_type* header()const{return this->final_header();}
+
+ std::size_t find_bucket(value_param_type v)const
+ {
+ return bucket(key(v));
+ }
+
+ bool link_point(
+ value_param_type v,hashed_index_node_impl*& pos,hashed_unique_tag)
+ {
+ hashed_index_node_impl* x=pos->next();
+ while(x!=pos){
+ if(eq(key(v),key(node_type::from_impl(x)->value()))){
+ pos=x;
+ return false;
+ }
+ x=x->next();
+ }
+ return true;
+ }
+
+ bool link_point(
+ value_param_type v,hashed_index_node_impl*& pos,hashed_non_unique_tag)
+ {
+ hashed_index_node_impl* prev=pos;
+ hashed_index_node_impl* x=pos->next();
+ while(x!=pos){
+ if(eq(key(v),key(node_type::from_impl(x)->value()))){
+ pos=prev;
+ return true;
+ }
+ prev=x;
+ x=x->next();
+ }
+ return true;
+ }
+
+ void link(node_type* x,hashed_index_node_impl* pos)
+ {
+ hashed_index_node_impl::link(x->impl(),pos);
+ };
+
+ void link(hashed_index_node_impl* x,hashed_index_node_impl* pos)
+ {
+ hashed_index_node_impl::link(x,pos);
+ };
+
+ void unlink(node_type* x)
+ {
+ hashed_index_node_impl::unlink(x->impl());
+ };
+
+ static hashed_index_node_impl* prev(node_type* x)
+ {
+ return hashed_index_node_impl::prev(x->impl());
+ }
+
+ static void unlink_next(hashed_index_node_impl* x)
+ {
+ hashed_index_node_impl::unlink_next(x);
+ }
+
+ void calculate_max_load()
+ {
+ float fml=static_cast<float>(mlf*bucket_count());
+ max_load=(std::numeric_limits<size_type>::max)();
+ if(max_load>fml)max_load=static_cast<size_type>(fml);
+ }
+
+ void reserve(size_type n)
+ {
+ if(n>max_load){
+ size_type bc =(std::numeric_limits<size_type>::max)();
+ float fbc=static_cast<float>(1+n/mlf);
+ if(bc>fbc)bc =static_cast<size_type>(fbc);
+ unchecked_rehash(bc);
+ }
+ }
+
+ void unchecked_rehash(size_type n)
+ {
+ bucket_array_type buckets1(get_allocator(),header()->impl(),n);
+ auto_space<std::size_t,allocator_type> hashes(get_allocator(),size());
+
+ std::size_t i=0;
+ hashed_index_node_impl* x=buckets.begin();
+ hashed_index_node_impl* x_end=buckets.end();
+ for(;x!=x_end;++x){
+ hashed_index_node_impl* y=x->next();
+ while(y!=x){
+ hashes.data()[i++]=hash(key(node_type::from_impl(y)->value()));
+ y=y->next();
+ }
+ }
+
+ i=0;
+ x=buckets.begin();
+ for(;x!=x_end;++x){
+ hashed_index_node_impl* y=x->next();
+ while(y!=x){
+ hashed_index_node_impl* z=y->next();
+ std::size_t buc1=buckets1.position(hashes.data()[i++]);
+ hashed_index_node_impl* x1=buckets1.at(buc1);
+ link(y,x1);
+ y=z;
+ }
+ }
+
+ buckets.swap(buckets1);
+ calculate_max_load();
+ first_bucket=buckets.first_nonempty(0);
+ }
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ void detach_iterators(node_type* x)
+ {
+ iterator it=make_iterator(x);
+ safe_mode::detach_equivalent_iterators(it);
+ }
+#endif
+
+ key_from_value key;
+ hasher hash;
+ key_equal eq;
+ bucket_array_type buckets;
+ float mlf;
+ size_type max_load;
+ std::size_t first_bucket;
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)&&\
+ BOOST_WORKAROUND(__MWERKS__,<=0x3003)
+#pragma parse_mfunc_templ reset
+#endif
+};
+
+/* specialized algorithms */
+
+template<
+ typename KeyFromValue,typename Hash,typename Pred,
+ typename SuperMeta,typename TagList,typename Category
+>
+void swap(
+ hashed_index<KeyFromValue,Hash,Pred,SuperMeta,TagList,Category>& x,
+ hashed_index<KeyFromValue,Hash,Pred,SuperMeta,TagList,Category>& y)
+{
+ x.swap(y);
+}
+
+} /* namespace multi_index::detail */
+
+/* sequenced index specifiers */
+
+template<typename Arg1,typename Arg2,typename Arg3,typename Arg4>
+struct hashed_unique
+{
+ typedef typename detail::hashed_index_args<
+ Arg1,Arg2,Arg3,Arg4> index_args;
+ typedef typename index_args::tag_list_type::type tag_list_type;
+ typedef typename index_args::key_from_value_type key_from_value_type;
+ typedef typename index_args::hash_type hash_type;
+ typedef typename index_args::pred_type pred_type;
+
+ template<typename Super>
+ struct node_class
+ {
+ typedef detail::hashed_index_node<Super> type;
+ };
+
+ template<typename SuperMeta>
+ struct index_class
+ {
+ typedef detail::hashed_index<
+ key_from_value_type,hash_type,pred_type,
+ SuperMeta,tag_list_type,detail::hashed_unique_tag> type;
+ };
+};
+
+template<typename Arg1,typename Arg2,typename Arg3,typename Arg4>
+struct hashed_non_unique
+{
+ typedef typename detail::hashed_index_args<
+ Arg1,Arg2,Arg3,Arg4> index_args;
+ typedef typename index_args::tag_list_type::type tag_list_type;
+ typedef typename index_args::key_from_value_type key_from_value_type;
+ typedef typename index_args::hash_type hash_type;
+ typedef typename index_args::pred_type pred_type;
+
+ template<typename Super>
+ struct node_class
+ {
+ typedef detail::hashed_index_node<Super> type;
+ };
+
+ template<typename SuperMeta>
+ struct index_class
+ {
+ typedef detail::hashed_index<
+ key_from_value_type,hash_type,pred_type,
+ SuperMeta,tag_list_type,detail::hashed_non_unique_tag> type;
+ };
+};
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#undef BOOST_MULTI_INDEX_HASHED_INDEX_CHECK_INVARIANT
+
+#endif
diff --git a/boost/boost/multi_index/hashed_index_fwd.hpp b/boost/boost/multi_index/hashed_index_fwd.hpp
new file mode 100644
index 00000000000..f436f687df7
--- /dev/null
+++ b/boost/boost/multi_index/hashed_index_fwd.hpp
@@ -0,0 +1,58 @@
+/* Copyright 2003-2005 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_HASHED_INDEX_FWD_HPP
+#define BOOST_MULTI_INDEX_HASHED_INDEX_FWD_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/multi_index/detail/hash_index_args.hpp>
+
+namespace boost{
+
+namespace multi_index{
+
+namespace detail{
+
+template<
+ typename KeyFromValue,typename Hash,typename Pred,
+ typename SuperMeta,typename TagList,typename Category
+>
+class hashed_index;
+
+template<
+ typename KeyFromValue,typename Hash,typename Pred,
+ typename SuperMeta,typename TagList,typename Category
+>
+void swap(
+ hashed_index<KeyFromValue,Hash,Pred,SuperMeta,TagList,Category>& x,
+ hashed_index<KeyFromValue,Hash,Pred,SuperMeta,TagList,Category>& y);
+
+} /* namespace multi_index::detail */
+
+/* hashed_index specifiers */
+
+template<
+ typename Arg1,typename Arg2=mpl::na,
+ typename Arg3=mpl::na,typename Arg4=mpl::na
+>
+struct hashed_unique;
+
+template<
+ typename Arg1,typename Arg2=mpl::na,
+ typename Arg3=mpl::na,typename Arg4=mpl::na
+>
+struct hashed_non_unique;
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#endif
diff --git a/boost/boost/multi_index/identity.hpp b/boost/boost/multi_index/identity.hpp
new file mode 100644
index 00000000000..b3c95680357
--- /dev/null
+++ b/boost/boost/multi_index/identity.hpp
@@ -0,0 +1,147 @@
+/* Copyright 2003-2006 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_IDENTITY_HPP
+#define BOOST_MULTI_INDEX_IDENTITY_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/config.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/multi_index/identity_fwd.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/utility/enable_if.hpp>
+
+#if !defined(BOOST_NO_SFINAE)
+#include <boost/type_traits/is_convertible.hpp>
+#endif
+
+namespace boost{
+
+template<class Type> class reference_wrapper; /* fwd decl. */
+
+namespace multi_index{
+
+namespace detail{
+
+/* identity is a do-nothing key extractor that returns the [const] Type&
+ * object passed.
+ * Additionally, identity is overloaded to support referece_wrappers
+ * of Type and "chained pointers" to Type's. By chained pointer to Type we
+ * mean a type P such that, given a p of type P
+ * *...n...*x is convertible to Type&, for some n>=1.
+ * Examples of chained pointers are raw and smart pointers, iterators and
+ * arbitrary combinations of these (vg. Type** or auto_ptr<Type*>.)
+ */
+
+/* NB. Some overloads of operator() have an extra dummy parameter int=0.
+ * This disambiguator serves several purposes:
+ * - Without it, MSVC++ 6.0 incorrectly regards some overloads as
+ * specializations of a previous member function template.
+ * - MSVC++ 6.0/7.0 seem to incorrectly treat some different memfuns
+ * as if they have the same signature.
+ * - If remove_const is broken due to lack of PTS, int=0 avoids the
+ * declaration of memfuns with identical signature.
+ */
+
+template<typename Type>
+struct const_identity_base
+{
+ typedef Type result_type;
+
+ template<typename ChainedPtr>
+
+#if !defined(BOOST_NO_SFINAE)
+ typename disable_if<is_convertible<const ChainedPtr&,Type&>,Type&>::type
+#else
+ Type&
+#endif
+
+ operator()(const ChainedPtr& x)const
+ {
+ return operator()(*x);
+ }
+
+ Type& operator()(Type& x)const
+ {
+ return x;
+ }
+
+ Type& operator()(const reference_wrapper<Type>& x)const
+ {
+ return x.get();
+ }
+
+ Type& operator()(
+ const reference_wrapper<typename remove_const<Type>::type>& x,int=0)const
+ {
+ return x.get();
+ }
+};
+
+template<typename Type>
+struct non_const_identity_base
+{
+ typedef Type result_type;
+
+ /* templatized for pointer-like types */
+
+ template<typename ChainedPtr>
+
+#if !defined(BOOST_NO_SFINAE)
+ typename disable_if<
+ is_convertible<const ChainedPtr&,const Type&>,Type&>::type
+#else
+ Type&
+#endif
+
+ operator()(const ChainedPtr& x)const
+ {
+ return operator()(*x);
+ }
+
+ const Type& operator()(const Type& x,int=0)const
+ {
+ return x;
+ }
+
+ Type& operator()(Type& x)const
+ {
+ return x;
+ }
+
+ const Type& operator()(const reference_wrapper<const Type>& x,int=0)const
+ {
+ return x.get();
+ }
+
+ Type& operator()(const reference_wrapper<Type>& x)const
+ {
+ return x.get();
+ }
+};
+
+} /* namespace multi_index::detail */
+
+template<class Type>
+struct identity:
+ mpl::if_c<
+ is_const<Type>::value,
+ detail::const_identity_base<Type>,detail::non_const_identity_base<Type>
+ >::type
+{
+};
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#endif
diff --git a/boost/boost/multi_index/identity_fwd.hpp b/boost/boost/multi_index/identity_fwd.hpp
new file mode 100644
index 00000000000..3f95af02d0b
--- /dev/null
+++ b/boost/boost/multi_index/identity_fwd.hpp
@@ -0,0 +1,26 @@
+/* Copyright 2003-2005 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_IDENTITY_HPP
+#define BOOST_MULTI_INDEX_IDENTITY_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+namespace boost{
+
+namespace multi_index{
+
+template<class Type> struct identity;
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#endif
diff --git a/boost/boost/multi_index/indexed_by.hpp b/boost/boost/multi_index/indexed_by.hpp
new file mode 100644
index 00000000000..acac93a82da
--- /dev/null
+++ b/boost/boost/multi_index/indexed_by.hpp
@@ -0,0 +1,72 @@
+/* Copyright 2003-2005 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_INDEXED_BY_HPP
+#define BOOST_MULTI_INDEX_INDEXED_BY_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/mpl/vector.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/control/expr_if.hpp>
+#include <boost/preprocessor/repetition/enum.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+
+/* An alias to mpl::vector used to hide MPL from the user.
+ * indexed_by contains the index specifiers for instantiation
+ * of a multi_index_container.
+ */
+
+/* This user_definable macro limits the number of elements of an index list;
+ * useful for shortening resulting symbol names (MSVC++ 6.0, for instance,
+ * has problems coping with very long symbol names.)
+ */
+
+#if !defined(BOOST_MULTI_INDEX_LIMIT_INDEXED_BY_SIZE)
+#if defined(BOOST_MSVC)&&(BOOST_MSVC<1300)
+#define BOOST_MULTI_INDEX_LIMIT_INDEXED_BY_SIZE 5
+#else
+#define BOOST_MULTI_INDEX_LIMIT_INDEXED_BY_SIZE BOOST_MPL_LIMIT_VECTOR_SIZE
+#endif
+#endif
+
+#if BOOST_MULTI_INDEX_LIMIT_INDEXED_BY_SIZE<BOOST_MPL_LIMIT_VECTOR_SIZE
+#define BOOST_MULTI_INDEX_INDEXED_BY_SIZE \
+ BOOST_MULTI_INDEX_LIMIT_INDEXED_BY_SIZE
+#else
+#define BOOST_MULTI_INDEX_INDEXED_BY_SIZE BOOST_MPL_LIMIT_VECTOR_SIZE
+#endif
+
+#define BOOST_MULTI_INDEX_INDEXED_BY_TEMPLATE_PARM(z,n,var) \
+ typename BOOST_PP_CAT(var,n) BOOST_PP_EXPR_IF(n,=mpl::na)
+
+namespace boost{
+
+namespace multi_index{
+
+template<
+ BOOST_PP_ENUM(
+ BOOST_MULTI_INDEX_INDEXED_BY_SIZE,
+ BOOST_MULTI_INDEX_INDEXED_BY_TEMPLATE_PARM,T)
+>
+struct indexed_by:
+ mpl::vector<BOOST_PP_ENUM_PARAMS(BOOST_MULTI_INDEX_INDEXED_BY_SIZE,T)>
+{
+};
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#undef BOOST_MULTI_INDEX_INDEXED_BY_TEMPLATE_PARM
+#undef BOOST_MULTI_INDEX_INDEXED_BY_SIZE
+
+#endif
diff --git a/boost/boost/multi_index/key_extractors.hpp b/boost/boost/multi_index/key_extractors.hpp
new file mode 100644
index 00000000000..469c26f3081
--- /dev/null
+++ b/boost/boost/multi_index/key_extractors.hpp
@@ -0,0 +1,21 @@
+/* Copyright 2003-2005 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_KEY_EXTRACTORS_HPP
+#define BOOST_MULTI_INDEX_KEY_EXTRACTORS_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/multi_index/composite_key.hpp>
+#include <boost/multi_index/identity.hpp>
+#include <boost/multi_index/member.hpp>
+#include <boost/multi_index/mem_fun.hpp>
+
+#endif
diff --git a/boost/boost/multi_index/mem_fun.hpp b/boost/boost/multi_index/mem_fun.hpp
new file mode 100644
index 00000000000..9ef5a63e741
--- /dev/null
+++ b/boost/boost/multi_index/mem_fun.hpp
@@ -0,0 +1,222 @@
+/* Copyright 2003-2006 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_MEM_FUN_HPP
+#define BOOST_MULTI_INDEX_MEM_FUN_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/utility/enable_if.hpp>
+
+#if !defined(BOOST_NO_SFINAE)
+#include <boost/type_traits/is_convertible.hpp>
+#endif
+
+namespace boost{
+
+template<class T> class reference_wrapper; /* fwd decl. */
+
+namespace multi_index{
+
+/* mem_fun implements a read-only key extractor based on a given non-const
+ * member function of a class.
+ * const_mem_fun does the same for const member functions.
+ * Additionally, mem_fun and const_mem_fun are overloaded to support
+ * referece_wrappers of T and "chained pointers" to T's. By chained pointer
+ * to T we mean a type P such that, given a p of Type P
+ * *...n...*x is convertible to T&, for some n>=1.
+ * Examples of chained pointers are raw and smart pointers, iterators and
+ * arbitrary combinations of these (vg. T** or auto_ptr<T*>.)
+ */
+
+/* NB. Some overloads of operator() have an extra dummy parameter int=0.
+ * This disambiguator serves several purposes:
+ * - Without it, MSVC++ 6.0 incorrectly regards some overloads as
+ * specializations of a previous member function template.
+ * - MSVC++ 6.0/7.0 seem to incorrectly treat some different memfuns
+ * as if they have the same signature.
+ * - If remove_const is broken due to lack of PTS, int=0 avoids the
+ * declaration of memfuns with identical signature.
+ */
+
+template<class Class,typename Type,Type (Class::*PtrToMemberFunction)()const>
+struct const_mem_fun
+{
+ typedef typename remove_reference<Type>::type result_type;
+
+ template<typename ChainedPtr>
+
+#if !defined(BOOST_NO_SFINAE)
+ typename disable_if<
+ is_convertible<const ChainedPtr&,const Class&>,Type>::type
+#else
+ Type
+#endif
+
+ operator()(const ChainedPtr& x)const
+ {
+ return operator()(*x);
+ }
+
+ Type operator()(const Class& x)const
+ {
+ return (x.*PtrToMemberFunction)();
+ }
+
+ Type operator()(const reference_wrapper<const Class>& x)const
+ {
+ return operator()(x.get());
+ }
+
+ Type operator()(const reference_wrapper<Class>& x,int=0)const
+ {
+ return operator()(x.get());
+ }
+};
+
+template<class Class,typename Type,Type (Class::*PtrToMemberFunction)()>
+struct mem_fun
+{
+ typedef typename remove_reference<Type>::type result_type;
+
+ template<typename ChainedPtr>
+
+#if !defined(BOOST_NO_SFINAE)
+ typename disable_if<
+ is_convertible<ChainedPtr&,Class&>,Type>::type
+#else
+ Type
+#endif
+
+ operator()(const ChainedPtr& x)const
+ {
+ return operator()(*x);
+ }
+
+ Type operator()(Class& x)const
+ {
+ return (x.*PtrToMemberFunction)();
+ }
+
+ Type operator()(const reference_wrapper<Class>& x)const
+ {
+ return operator()(x.get());
+ }
+};
+
+/* MSVC++ 6.0 has problems with const member functions as non-type template
+ * parameters, somehow it takes them as non-const. mem_fun_explicit workarounds
+ * this defficiency by accepting an extra type parameter that specifies the
+ * signature of he member function. The workaround was found at:
+ * Daniel, C.:"Re: weird typedef problem in VC",
+ * news:microsoft.public.vc.language, 21st nov 2002,
+ * http://groups.google.com/groups?
+ * hl=en&lr=&ie=UTF-8&selm=ukwvg3O0BHA.1512%40tkmsftngp05
+ */
+
+template<
+ class Class,typename Type,
+ typename PtrToMemberFunctionType,PtrToMemberFunctionType PtrToMemberFunction>
+struct const_mem_fun_explicit
+{
+ typedef typename remove_reference<Type>::type result_type;
+
+ template<typename ChainedPtr>
+
+#if !defined(BOOST_NO_SFINAE)
+ typename disable_if<
+ is_convertible<const ChainedPtr&,const Class&>,Type>::type
+#else
+ Type
+#endif
+
+ operator()(const ChainedPtr& x)const
+ {
+ return operator()(*x);
+ }
+
+ Type operator()(const Class& x)const
+ {
+ return (x.*PtrToMemberFunction)();
+ }
+
+ Type operator()(const reference_wrapper<const Class>& x)const
+ {
+ return operator()(x.get());
+ }
+
+ Type operator()(const reference_wrapper<Class>& x,int=0)const
+ {
+ return operator()(x.get());
+ }
+};
+
+template<
+ class Class,typename Type,
+ typename PtrToMemberFunctionType,PtrToMemberFunctionType PtrToMemberFunction>
+struct mem_fun_explicit
+{
+ typedef typename remove_reference<Type>::type result_type;
+
+ template<typename ChainedPtr>
+
+#if !defined(BOOST_NO_SFINAE)
+ typename disable_if<
+ is_convertible<ChainedPtr&,Class&>,Type>::type
+#else
+ Type
+#endif
+
+ operator()(const ChainedPtr& x)const
+ {
+ return operator()(*x);
+ }
+
+ Type operator()(Class& x)const
+ {
+ return (x.*PtrToMemberFunction)();
+ }
+
+ Type operator()(const reference_wrapper<Class>& x)const
+ {
+ return operator()(x.get());
+ }
+};
+
+/* BOOST_MULTI_INDEX_CONST_MEM_FUN and BOOST_MULTI_INDEX_MEM_FUN resolve to
+ * mem_fun_explicit for MSVC++ 6.0 and to [const_]mem_fun otherwise.
+ */
+
+#if defined(BOOST_MSVC)&&(BOOST_MSVC<1300)
+
+#define BOOST_MULTI_INDEX_CONST_MEM_FUN(Class,Type,MemberFunName) \
+::boost::multi_index::const_mem_fun_explicit<\
+ Class,Type,Type (Class::*)()const,&Class::MemberFunName >
+#define BOOST_MULTI_INDEX_MEM_FUN(Class,Type,MemberFunName) \
+::boost::multi_index::mem_fun_explicit<\
+ Class,Type,Type (Class::*)(),&Class::MemberFunName >
+
+#else
+
+#define BOOST_MULTI_INDEX_CONST_MEM_FUN(Class,Type,MemberFunName) \
+::boost::multi_index::const_mem_fun< Class,Type,&Class::MemberFunName >
+#define BOOST_MULTI_INDEX_MEM_FUN(Class,Type,MemberFunName) \
+::boost::multi_index::mem_fun< Class,Type,&Class::MemberFunName >
+
+#endif
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#endif
diff --git a/boost/boost/multi_index/member.hpp b/boost/boost/multi_index/member.hpp
new file mode 100644
index 00000000000..0aff2dc23b5
--- /dev/null
+++ b/boost/boost/multi_index/member.hpp
@@ -0,0 +1,269 @@
+/* Copyright 2003-2006 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_MEMBER_HPP
+#define BOOST_MULTI_INDEX_MEMBER_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <cstddef>
+
+#if !defined(BOOST_NO_SFINAE)
+#include <boost/type_traits/is_convertible.hpp>
+#endif
+
+namespace boost{
+
+template<class T> class reference_wrapper; /* fwd decl. */
+
+namespace multi_index{
+
+namespace detail{
+
+/* member is a read/write key extractor for accessing a given
+ * member of a class.
+ * Additionally, member is overloaded to support referece_wrappers
+ * of T and "chained pointers" to T's. By chained pointer to T we mean
+ * a type P such that, given a p of Type P
+ * *...n...*x is convertible to T&, for some n>=1.
+ * Examples of chained pointers are raw and smart pointers, iterators and
+ * arbitrary combinations of these (vg. T** or auto_ptr<T*>.)
+ */
+
+/* NB. Some overloads of operator() have an extra dummy parameter int=0.
+ * This disambiguator serves several purposes:
+ * - Without it, MSVC++ 6.0 incorrectly regards some overloads as
+ * specializations of a previous member function template.
+ * - MSVC++ 6.0/7.0 seem to incorrectly treat some different memfuns
+ * as if they have the same signature.
+ * - If remove_const is broken due to lack of PTS, int=0 avoids the
+ * declaration of memfuns with identical signature.
+ */
+
+template<class Class,typename Type,Type Class::*PtrToMember>
+struct const_member_base
+{
+ typedef Type result_type;
+
+ template<typename ChainedPtr>
+
+#if !defined(BOOST_NO_SFINAE)
+ typename disable_if<
+ is_convertible<const ChainedPtr&,const Class&>,Type&>::type
+#else
+ Type&
+#endif
+
+ operator()(const ChainedPtr& x)const
+ {
+ return operator()(*x);
+ }
+
+ Type& operator()(const Class& x)const
+ {
+ return x.*PtrToMember;
+ }
+
+ Type& operator()(const reference_wrapper<const Class>& x)const
+ {
+ return operator()(x.get());
+ }
+
+ Type& operator()(const reference_wrapper<Class>& x,int=0)const
+ {
+ return operator()(x.get());
+ }
+};
+
+template<class Class,typename Type,Type Class::*PtrToMember>
+struct non_const_member_base
+{
+ typedef Type result_type;
+
+ template<typename ChainedPtr>
+
+#if !defined(BOOST_NO_SFINAE)
+ typename disable_if<
+ is_convertible<const ChainedPtr&,const Class&>,Type&>::type
+#else
+ Type&
+#endif
+
+ operator()(const ChainedPtr& x)const
+ {
+ return operator()(*x);
+ }
+
+ const Type& operator()(const Class& x,int=0)const
+ {
+ return x.*PtrToMember;
+ }
+
+ Type& operator()(Class& x)const
+ {
+ return x.*PtrToMember;
+ }
+
+ const Type& operator()(const reference_wrapper<const Class>& x,int=0)const
+ {
+ return operator()(x.get());
+ }
+
+ Type& operator()(const reference_wrapper<Class>& x)const
+ {
+ return operator()(x.get());
+ }
+};
+
+} /* namespace multi_index::detail */
+
+template<class Class,typename Type,Type Class::*PtrToMember>
+struct member:
+ mpl::if_c<
+ is_const<Type>::value,
+ detail::const_member_base<Class,Type,PtrToMember>,
+ detail::non_const_member_base<Class,Type,PtrToMember>
+ >::type
+{
+};
+
+namespace detail{
+
+/* MSVC++ 6.0 does not support properly pointers to members as
+ * non-type template arguments, as reported in
+ * http://support.microsoft.com/default.aspx?scid=kb;EN-US;249045
+ * A similar problem (though not identical) is shown by MSVC++ 7.0.
+ * We provide an alternative to member<> accepting offsets instead
+ * of pointers to members. This happens to work even for non-POD
+ * types (although the standard forbids use of offsetof on these),
+ * so it serves as a workaround in this compiler for all practical
+ * purposes.
+ * Surprisingly enough, other compilers, like Intel C++ 7.0/7.1 and
+ * Visual Age 6.0, have similar bugs. This replacement of member<>
+ * can be used for them too.
+ */
+
+template<class Class,typename Type,std::size_t OffsetOfMember>
+struct const_member_offset_base
+{
+ typedef Type result_type;
+
+ template<typename ChainedPtr>
+
+#if !defined(BOOST_NO_SFINAE)
+ typename disable_if<
+ is_convertible<const ChainedPtr&,const Class&>,Type&>::type
+#else
+ Type&
+#endif
+
+ operator()(const ChainedPtr& x)const
+ {
+ return operator()(*x);
+ }
+
+ Type& operator()(const Class& x)const
+ {
+ return *static_cast<const Type*>(
+ static_cast<const void*>(
+ static_cast<const char*>(
+ static_cast<const void *>(&x))+OffsetOfMember));
+ }
+
+ Type& operator()(const reference_wrapper<const Class>& x)const
+ {
+ return operator()(x.get());
+ }
+
+ Type& operator()(const reference_wrapper<Class>& x,int=0)const
+ {
+ return operator()(x.get());
+ }
+};
+
+template<class Class,typename Type,std::size_t OffsetOfMember>
+struct non_const_member_offset_base
+{
+ typedef Type result_type;
+
+ template<typename ChainedPtr>
+
+#if !defined(BOOST_NO_SFINAE)
+ typename disable_if<
+ is_convertible<const ChainedPtr&,const Class&>,Type&>::type
+#else
+ Type&
+#endif
+
+ operator()(const ChainedPtr& x)const
+ {
+ return operator()(*x);
+ }
+
+ const Type& operator()(const Class& x,int=0)const
+ {
+ return *static_cast<const Type*>(
+ static_cast<const void*>(
+ static_cast<const char*>(
+ static_cast<const void *>(&x))+OffsetOfMember));
+ }
+
+ Type& operator()(Class& x)const
+ {
+ return *static_cast<Type*>(
+ static_cast<void*>(
+ static_cast<char*>(static_cast<void *>(&x))+OffsetOfMember));
+ }
+
+ const Type& operator()(const reference_wrapper<const Class>& x,int=0)const
+ {
+ return operator()(x.get());
+ }
+
+ Type& operator()(const reference_wrapper<Class>& x)const
+ {
+ return operator()(x.get());
+ }
+};
+
+} /* namespace multi_index::detail */
+
+template<class Class,typename Type,std::size_t OffsetOfMember>
+struct member_offset:
+ mpl::if_c<
+ is_const<Type>::value,
+ detail::const_member_offset_base<Class,Type,OffsetOfMember>,
+ detail::non_const_member_offset_base<Class,Type,OffsetOfMember>
+ >::type
+{
+};
+
+/* BOOST_MULTI_INDEX_MEMBER resolves to member in the normal cases,
+ * and to member_offset as a workaround in those defective compilers for
+ * which BOOST_NO_POINTER_TO_MEMBER_TEMPLATE_PARAMETERS is defined.
+ */
+
+#if defined(BOOST_NO_POINTER_TO_MEMBER_TEMPLATE_PARAMETERS)
+#define BOOST_MULTI_INDEX_MEMBER(Class,Type,MemberName) \
+::boost::multi_index::member_offset< Class,Type,offsetof(Class,MemberName) >
+#else
+#define BOOST_MULTI_INDEX_MEMBER(Class,Type,MemberName) \
+::boost::multi_index::member< Class,Type,&Class::MemberName >
+#endif
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#endif
diff --git a/boost/boost/multi_index/ordered_index.hpp b/boost/boost/multi_index/ordered_index.hpp
new file mode 100644
index 00000000000..ecdd9b49fb0
--- /dev/null
+++ b/boost/boost/multi_index/ordered_index.hpp
@@ -0,0 +1,1239 @@
+/* Copyright 2003-2007 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ *
+ * The internal implementation of red-black trees is based on that of SGI STL
+ * stl_tree.h file:
+ *
+ * Copyright (c) 1996,1997
+ * Silicon Graphics Computer Systems, Inc.
+ *
+ * Permission to use, copy, modify, distribute and sell this software
+ * and its documentation for any purpose is hereby granted without fee,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear
+ * in supporting documentation. Silicon Graphics makes no
+ * representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ *
+ * Copyright (c) 1994
+ * Hewlett-Packard Company
+ *
+ * Permission to use, copy, modify, distribute and sell this software
+ * and its documentation for any purpose is hereby granted without fee,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear
+ * in supporting documentation. Hewlett-Packard Company makes no
+ * representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ */
+
+#ifndef BOOST_MULTI_INDEX_ORDERED_INDEX_HPP
+#define BOOST_MULTI_INDEX_ORDERED_INDEX_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <algorithm>
+#include <boost/call_traits.hpp>
+#include <boost/detail/no_exceptions_support.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/iterator/reverse_iterator.hpp>
+#include <boost/mpl/push_front.hpp>
+#include <boost/multi_index/detail/access_specifier.hpp>
+#include <boost/multi_index/detail/bidir_node_iterator.hpp>
+#include <boost/multi_index/detail/modify_key_adaptor.hpp>
+#include <boost/multi_index/detail/ord_index_node.hpp>
+#include <boost/multi_index/detail/ord_index_ops.hpp>
+#include <boost/multi_index/detail/safe_ctr_proxy.hpp>
+#include <boost/multi_index/detail/safe_mode.hpp>
+#include <boost/multi_index/detail/scope_guard.hpp>
+#include <boost/multi_index/detail/unbounded.hpp>
+#include <boost/multi_index/detail/value_compare.hpp>
+#include <boost/multi_index/ordered_index_fwd.hpp>
+#include <boost/ref.hpp>
+#include <boost/tuple/tuple.hpp>
+#include <utility>
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+#include <boost/archive/archive_exception.hpp>
+#include <boost/bind.hpp>
+#include <boost/multi_index/detail/duplicates_iterator.hpp>
+#include <boost/throw_exception.hpp>
+#endif
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)
+#define BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT \
+ detail::scope_guard BOOST_JOIN(check_invariant_,__LINE__)= \
+ detail::make_obj_guard(*this,&ordered_index::check_invariant_); \
+ BOOST_JOIN(check_invariant_,__LINE__).touch();
+#else
+#define BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT
+#endif
+
+namespace boost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* ordered_index adds a layer of ordered indexing to a given Super */
+
+/* Most of the implementation of unique and non-unique indices is
+ * shared. We tell from one another on instantiation time by using
+ * these tags.
+ */
+
+struct ordered_unique_tag{};
+struct ordered_non_unique_tag{};
+
+template<
+ typename KeyFromValue,typename Compare,
+ typename SuperMeta,typename TagList,typename Category
+>
+class ordered_index:
+ BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS SuperMeta::type
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+#if BOOST_WORKAROUND(BOOST_MSVC,<1300)
+ ,public safe_ctr_proxy_impl<
+ bidir_node_iterator<
+ ordered_index_node<typename SuperMeta::type::node_type> >,
+ ordered_index<KeyFromValue,Compare,SuperMeta,TagList,Category> >
+#else
+ ,public safe_mode::safe_container<
+ ordered_index<KeyFromValue,Compare,SuperMeta,TagList,Category> >
+#endif
+#endif
+
+{
+#if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)&&\
+ BOOST_WORKAROUND(__MWERKS__,<=0x3003)
+/* The "ISO C++ Template Parser" option in CW8.3 has a problem with the
+ * lifetime of const references bound to temporaries --precisely what
+ * scopeguards are.
+ */
+
+#pragma parse_mfunc_templ off
+#endif
+
+ typedef typename SuperMeta::type super;
+
+protected:
+ typedef ordered_index_node<
+ typename super::node_type> node_type;
+
+public:
+ /* types */
+
+ typedef typename KeyFromValue::result_type key_type;
+ typedef typename node_type::value_type value_type;
+ typedef KeyFromValue key_from_value;
+ typedef Compare key_compare;
+ typedef value_comparison<
+ value_type,KeyFromValue,Compare> value_compare;
+ typedef tuple<key_from_value,key_compare> ctor_args;
+ typedef typename super::final_allocator_type allocator_type;
+ typedef typename allocator_type::reference reference;
+ typedef typename allocator_type::const_reference const_reference;
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+#if BOOST_WORKAROUND(BOOST_MSVC,<1300)
+ typedef safe_mode::safe_iterator<
+ bidir_node_iterator<node_type>,
+ safe_ctr_proxy<
+ bidir_node_iterator<node_type> > > iterator;
+#else
+ typedef safe_mode::safe_iterator<
+ bidir_node_iterator<node_type>,
+ ordered_index> iterator;
+#endif
+#else
+ typedef bidir_node_iterator<node_type> iterator;
+#endif
+
+ typedef iterator const_iterator;
+
+ typedef std::size_t size_type;
+ typedef std::ptrdiff_t difference_type;
+ typedef typename allocator_type::pointer pointer;
+ typedef typename allocator_type::const_pointer const_pointer;
+ typedef typename
+ boost::reverse_iterator<iterator> reverse_iterator;
+ typedef typename
+ boost::reverse_iterator<const_iterator> const_reverse_iterator;
+ typedef TagList tag_list;
+
+protected:
+ typedef typename super::final_node_type final_node_type;
+ typedef tuples::cons<
+ ctor_args,
+ typename super::ctor_args_list> ctor_args_list;
+ typedef typename mpl::push_front<
+ typename super::index_type_list,
+ ordered_index>::type index_type_list;
+ typedef typename mpl::push_front<
+ typename super::iterator_type_list,
+ iterator>::type iterator_type_list;
+ typedef typename mpl::push_front<
+ typename super::const_iterator_type_list,
+ const_iterator>::type const_iterator_type_list;
+ typedef typename super::copy_map_type copy_map_type;
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+ typedef typename super::index_saver_type index_saver_type;
+ typedef typename super::index_loader_type index_loader_type;
+#endif
+
+private:
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+#if BOOST_WORKAROUND(BOOST_MSVC,<1300)
+ typedef safe_ctr_proxy_impl<
+ bidir_node_iterator<node_type>,
+ ordered_index> safe_super;
+#else
+ typedef safe_mode::safe_container<ordered_index> safe_super;
+#endif
+#endif
+
+ typedef typename call_traits<
+ value_type>::param_type value_param_type;
+ typedef typename call_traits<
+ key_type>::param_type key_param_type;
+
+public:
+
+ /* construct/copy/destroy
+ * Default and copy ctors are in the protected section as indices are
+ * not supposed to be created on their own. No range ctor either.
+ */
+
+ ordered_index<KeyFromValue,Compare,SuperMeta,TagList,Category>& operator=(
+ const ordered_index<KeyFromValue,Compare,SuperMeta,TagList,Category>& x)
+ {
+ this->final()=x.final();
+ return *this;
+ }
+
+ allocator_type get_allocator()const
+ {
+ return this->final().get_allocator();
+ }
+
+ /* iterators */
+
+ iterator begin(){return make_iterator(leftmost());}
+ const_iterator begin()const{return make_iterator(leftmost());}
+ iterator end(){return make_iterator(header());}
+ const_iterator end()const{return make_iterator(header());}
+ reverse_iterator rbegin(){return make_reverse_iterator(end());}
+ const_reverse_iterator rbegin()const{return make_reverse_iterator(end());}
+ reverse_iterator rend(){return make_reverse_iterator(begin());}
+ const_reverse_iterator rend()const{return make_reverse_iterator(begin());}
+
+ /* capacity */
+
+ bool empty()const{return this->final_empty_();}
+ size_type size()const{return this->final_size_();}
+ size_type max_size()const{return this->final_max_size_();}
+
+ /* modifiers */
+
+ std::pair<iterator,bool> insert(value_param_type x)
+ {
+ BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT;
+ std::pair<final_node_type*,bool> p=this->final_insert_(x);
+ return std::pair<iterator,bool>(make_iterator(p.first),p.second);
+ }
+
+ iterator insert(iterator position,value_param_type x)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+ BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT;
+ std::pair<final_node_type*,bool> p=this->final_insert_(
+ x,static_cast<final_node_type*>(position.get_node()));
+ return make_iterator(p.first);
+ }
+
+ template<typename InputIterator>
+ void insert(InputIterator first,InputIterator last)
+ {
+ BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT;
+ iterator hint=end();
+ for(;first!=last;++first)hint=insert(hint,*first);
+ }
+
+ iterator erase(iterator position)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+ BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT;
+ this->final_erase_(static_cast<final_node_type*>(position++.get_node()));
+ return position;
+ }
+
+ size_type erase(key_param_type x)
+ {
+ BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT;
+ std::pair<iterator,iterator> p=equal_range(x);
+ size_type s=0;
+ while(p.first!=p.second){
+ p.first=erase(p.first);
+ ++s;
+ }
+ return s;
+ }
+
+ iterator erase(iterator first,iterator last)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(first);
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(last);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(first,*this);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(last,*this);
+ BOOST_MULTI_INDEX_CHECK_VALID_RANGE(first,last);
+ BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT;
+ while(first!=last){
+ first=erase(first);
+ }
+ return first;
+ }
+
+ bool replace(iterator position,value_param_type x)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+ BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT;
+ return this->final_replace_(
+ x,static_cast<final_node_type*>(position.get_node()));
+ }
+
+ template<typename Modifier>
+ bool modify(iterator position,Modifier mod)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+ BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT;
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ /* MSVC++ 6.0 optimizer on safe mode code chokes if this
+ * this is not added. Left it for all compilers as it does no
+ * harm.
+ */
+
+ position.detach();
+#endif
+
+ return this->final_modify_(
+ mod,static_cast<final_node_type*>(position.get_node()));
+ }
+
+ template<typename Modifier>
+ bool modify_key(iterator position,Modifier mod)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+ BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT;
+ return modify(
+ position,modify_key_adaptor<Modifier,value_type,KeyFromValue>(mod,key));
+ }
+
+ void swap(ordered_index<KeyFromValue,Compare,SuperMeta,TagList,Category>& x)
+ {
+ BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT;
+ this->final_swap_(x.final());
+ }
+
+ void clear()
+ {
+ BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT;
+ this->final_clear_();
+ }
+
+ /* observers */
+
+ key_from_value key_extractor()const{return key;}
+ key_compare key_comp()const{return comp;}
+ value_compare value_comp()const{return value_compare(key,comp);}
+
+ /* set operations */
+
+ /* Internally, these ops rely on const_iterator being the same
+ * type as iterator.
+ */
+
+ template<typename CompatibleKey>
+ iterator find(const CompatibleKey& x)const
+ {
+ return make_iterator(ordered_index_find(header(),key,x,comp));
+ }
+
+ template<typename CompatibleKey,typename CompatibleCompare>
+ iterator find(
+ const CompatibleKey& x,const CompatibleCompare& comp)const
+ {
+ return make_iterator(ordered_index_find(header(),key,x,comp));
+ }
+
+ template<typename CompatibleKey>
+ size_type count(const CompatibleKey& x)const
+ {
+ return count(x,comp);
+ }
+
+ template<typename CompatibleKey,typename CompatibleCompare>
+ size_type count(const CompatibleKey& x,const CompatibleCompare& comp)const
+ {
+ std::pair<iterator,iterator> p=equal_range(x,comp);
+ size_type n=std::distance(p.first,p.second);
+ return n;
+ }
+
+ template<typename CompatibleKey>
+ iterator lower_bound(const CompatibleKey& x)const
+ {
+ return make_iterator(ordered_index_lower_bound(header(),key,x,comp));
+ }
+
+ template<typename CompatibleKey,typename CompatibleCompare>
+ iterator lower_bound(
+ const CompatibleKey& x,const CompatibleCompare& comp)const
+ {
+ return make_iterator(ordered_index_lower_bound(header(),key,x,comp));
+ }
+
+ template<typename CompatibleKey>
+ iterator upper_bound(const CompatibleKey& x)const
+ {
+ return make_iterator(ordered_index_upper_bound(header(),key,x,comp));
+ }
+
+ template<typename CompatibleKey,typename CompatibleCompare>
+ iterator upper_bound(
+ const CompatibleKey& x,const CompatibleCompare& comp)const
+ {
+ return make_iterator(ordered_index_upper_bound(header(),key,x,comp));
+ }
+
+ template<typename CompatibleKey>
+ std::pair<iterator,iterator> equal_range(
+ const CompatibleKey& x)const
+ {
+ return equal_range(x,comp);
+ }
+
+ template<typename CompatibleKey,typename CompatibleCompare>
+ std::pair<iterator,iterator> equal_range(
+ const CompatibleKey& x,const CompatibleCompare& comp)const
+ {
+ return std::pair<iterator,iterator>(
+ lower_bound(x,comp),upper_bound(x,comp));
+ }
+
+ /* range */
+
+ template<typename LowerBounder,typename UpperBounder>
+ std::pair<iterator,iterator>
+ range(LowerBounder lower,UpperBounder upper)const
+ {
+ std::pair<iterator,iterator> p(
+ lower_range(lower),upper_range(upper));
+ if(p.second!=end()&&(p.first==end()||comp(key(*p.second),key(*p.first)))){
+ p.second=p.first;
+ }
+ return p;
+ }
+
+BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS:
+ ordered_index(const ctor_args_list& args_list,const allocator_type& al):
+ super(args_list.get_tail(),al),
+ key(tuples::get<0>(args_list.get_head())),
+ comp(tuples::get<1>(args_list.get_head()))
+ {
+ empty_initialize();
+ }
+
+ ordered_index(
+ const ordered_index<KeyFromValue,Compare,SuperMeta,TagList,Category>& x):
+ super(x),
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ safe_super(),
+#endif
+
+ key(x.key),
+ comp(x.comp)
+ {
+ /* Copy ctor just takes the key and compare objects from x. The rest is
+ * done in subsequent call to copy_().
+ */
+ }
+
+ ~ordered_index()
+ {
+ /* the container is guaranteed to be empty by now */
+ }
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ iterator make_iterator(node_type* node){return iterator(node,this);}
+ const_iterator make_iterator(node_type* node)const
+ {return const_iterator(node,const_cast<ordered_index*>(this));}
+#else
+ iterator make_iterator(node_type* node){return iterator(node);}
+ const_iterator make_iterator(node_type* node)const
+ {return const_iterator(node);}
+#endif
+
+ void copy_(
+ const ordered_index<KeyFromValue,Compare,SuperMeta,TagList,Category>& x,
+ const copy_map_type& map)
+ {
+ if(!x.root()){
+ empty_initialize();
+ }
+ else{
+ header()->color()=x.header()->color();
+
+ node_type* root_cpy=map.find(static_cast<final_node_type*>(x.root()));
+ header()->parent()=root_cpy->impl();
+
+ node_type* leftmost_cpy=map.find(
+ static_cast<final_node_type*>(x.leftmost()));
+ header()->left()=leftmost_cpy->impl();
+
+ node_type* rightmost_cpy=map.find(
+ static_cast<final_node_type*>(x.rightmost()));
+ header()->right()=rightmost_cpy->impl();
+
+ typedef typename copy_map_type::const_iterator copy_map_iterator;
+ for(copy_map_iterator it=map.begin(),it_end=map.end();it!=it_end;++it){
+ node_type* org=it->first;
+ node_type* cpy=it->second;
+
+ cpy->color()=org->color();
+
+ ordered_index_node_impl* parent_org=org->parent();
+ if(!parent_org)cpy->parent()=0;
+ else{
+ node_type* parent_cpy=map.find(
+ static_cast<final_node_type*>(node_type::from_impl(parent_org)));
+ cpy->parent()=parent_cpy->impl();
+ if(parent_org->left()==org->impl()){
+ parent_cpy->left()=cpy->impl();
+ }
+ else if(parent_org->right()==org->impl()){
+ /* header() does not satisfy this nor the previous check */
+ parent_cpy->right()=cpy->impl();
+ }
+ }
+
+ if(!org->left())cpy->left()=0;
+ if(!org->right())cpy->right()=0;
+ }
+ }
+
+ super::copy_(x,map);
+ }
+
+ node_type* insert_(value_param_type v,node_type* x)
+ {
+ link_info inf;
+ if(!link_point(key(v),inf,Category())){
+ return node_type::from_impl(inf.pos);
+ }
+
+ node_type* res=static_cast<node_type*>(super::insert_(v,x));
+ if(res==x){
+ ordered_index_node_impl::link(
+ x->impl(),inf.side,inf.pos,header()->impl());
+ }
+ return res;
+ }
+
+ node_type* insert_(value_param_type v,node_type* position,node_type* x)
+ {
+ link_info inf;
+ if(!hinted_link_point(key(v),position,inf,Category())){
+ return node_type::from_impl(inf.pos);
+ }
+
+ node_type* res=static_cast<node_type*>(super::insert_(v,position,x));
+ if(res==x){
+ ordered_index_node_impl::link(
+ x->impl(),inf.side,inf.pos,header()->impl());
+ }
+ return res;
+ }
+
+ void erase_(node_type* x)
+ {
+ ordered_index_node_impl::rebalance_for_erase(
+ x->impl(),header()->parent(),header()->left(),header()->right());
+ super::erase_(x);
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ detach_iterators(x);
+#endif
+ }
+
+ void delete_all_nodes_()
+ {
+ delete_all_nodes(root());
+ }
+
+ void clear_()
+ {
+ super::clear_();
+ empty_initialize();
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ safe_super::detach_dereferenceable_iterators();
+#endif
+ }
+
+ void swap_(ordered_index<KeyFromValue,Compare,SuperMeta,TagList,Category>& x)
+ {
+ std::swap(key,x.key);
+ std::swap(comp,x.comp);
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ safe_super::swap(x);
+#endif
+
+ super::swap_(x);
+ }
+
+ bool replace_(value_param_type v,node_type* x)
+ {
+ if(in_place(v,x,Category())){
+ return super::replace_(v,x);
+ }
+
+ node_type* next=x;
+ node_type::increment(next);
+
+ ordered_index_node_impl::rebalance_for_erase(
+ x->impl(),header()->parent(),header()->left(),header()->right());
+
+ BOOST_TRY{
+ link_info inf;
+ if(link_point(key(v),inf,Category())&&super::replace_(v,x)){
+ ordered_index_node_impl::link(
+ x->impl(),inf.side,inf.pos,header()->impl());
+ return true;
+ }
+ ordered_index_node_impl::restore(
+ x->impl(),next->impl(),header()->impl());
+ return false;
+ }
+ BOOST_CATCH(...){
+ ordered_index_node_impl::restore(
+ x->impl(),next->impl(),header()->impl());
+ BOOST_RETHROW;
+ }
+ BOOST_CATCH_END
+ }
+
+ bool modify_(node_type* x)
+ {
+ bool b;
+ BOOST_TRY{
+ b=in_place(x->value(),x,Category());
+ }
+ BOOST_CATCH(...){
+ erase_(x);
+ BOOST_RETHROW;
+ }
+ BOOST_CATCH_END
+ if(!b){
+ ordered_index_node_impl::rebalance_for_erase(
+ x->impl(),header()->parent(),header()->left(),header()->right());
+ BOOST_TRY{
+ link_info inf;
+ if(!link_point(key(x->value()),inf,Category())){
+ super::erase_(x);
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ detach_iterators(x);
+#endif
+ return false;
+ }
+ ordered_index_node_impl::link(
+ x->impl(),inf.side,inf.pos,header()->impl());
+ }
+ BOOST_CATCH(...){
+ super::erase_(x);
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ detach_iterators(x);
+#endif
+
+ BOOST_RETHROW;
+ }
+ BOOST_CATCH_END
+ }
+
+ BOOST_TRY{
+ if(!super::modify_(x)){
+ ordered_index_node_impl::rebalance_for_erase(
+ x->impl(),header()->parent(),header()->left(),header()->right());
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ detach_iterators(x);
+#endif
+
+ return false;
+ }
+ else return true;
+ }
+ BOOST_CATCH(...){
+ ordered_index_node_impl::rebalance_for_erase(
+ x->impl(),header()->parent(),header()->left(),header()->right());
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ detach_iterators(x);
+#endif
+
+ BOOST_RETHROW;
+ }
+ BOOST_CATCH_END
+ }
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+ /* serialization */
+
+ template<typename Archive>
+ void save_(
+ Archive& ar,const unsigned int version,const index_saver_type& sm)const
+ {
+ save_(ar,version,sm,Category());
+ }
+
+ template<typename Archive>
+ void load_(Archive& ar,const unsigned int version,const index_loader_type& lm)
+ {
+ load_(ar,version,lm,Category());
+ }
+#endif
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)
+ /* invariant stuff */
+
+ bool invariant_()const
+ {
+ if(size()==0||begin()==end()){
+ if(size()!=0||begin()!=end()||
+ header()->left()!=header()->impl()||
+ header()->right()!=header()->impl())return false;
+ }
+ else{
+ if((size_type)std::distance(begin(),end())!=size())return false;
+
+ std::size_t len=ordered_index_node_impl::black_count(
+ leftmost()->impl(),root()->impl());
+ for(const_iterator it=begin(),it_end=end();it!=it_end;++it){
+ node_type* x=it.get_node();
+ node_type* left_x=node_type::from_impl(x->left());
+ node_type* right_x=node_type::from_impl(x->right());
+
+ if(x->color()==red){
+ if((left_x&&left_x->color()==red)||
+ (right_x&&right_x->color()==red))return false;
+ }
+ if(left_x&&comp(key(x->value()),key(left_x->value())))return false;
+ if(right_x&&comp(key(right_x->value()),key(x->value())))return false;
+ if(!left_x&&!right_x&&
+ ordered_index_node_impl::black_count(
+ x->impl(),root()->impl())!=len)
+ return false;
+ }
+
+ if(leftmost()->impl()!=
+ ordered_index_node_impl::minimum(root()->impl()))
+ return false;
+ if(rightmost()->impl()!=
+ ordered_index_node_impl::maximum(root()->impl()))
+ return false;
+ }
+
+ return super::invariant_();
+ }
+
+
+ /* This forwarding function eases things for the boost::mem_fn construct
+ * in BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT. Actually,
+ * final_check_invariant is already an inherited member function of
+ * ordered_index.
+ */
+ void check_invariant_()const{this->final_check_invariant_();}
+#endif
+
+private:
+ node_type* header()const{return this->final_header();}
+ node_type* root()const{return node_type::from_impl(header()->parent());}
+ node_type* leftmost()const{return node_type::from_impl(header()->left());}
+ node_type* rightmost()const{return node_type::from_impl(header()->right());}
+
+ void empty_initialize()
+ {
+ header()->color()=red;
+ /* used to distinguish header() from root, in iterator.operator++ */
+
+ header()->parent()=0;
+ header()->left()=header()->impl();
+ header()->right()=header()->impl();
+ }
+
+ struct link_info
+ {
+ ordered_index_side side;
+ ordered_index_node_impl* pos;
+ };
+
+ bool link_point(key_param_type k,link_info& inf,ordered_unique_tag)
+ {
+ node_type* y=header();
+ node_type* x=root();
+ bool c=true;
+ while(x){
+ y=x;
+ c=comp(k,key(x->value()));
+ x=node_type::from_impl(c?x->left():x->right());
+ }
+ node_type* yy=y;
+ if(c){
+ if(yy==leftmost()){
+ inf.side=to_left;
+ inf.pos=y->impl();
+ return true;
+ }
+ else node_type::decrement(yy);
+ }
+
+ if(comp(key(yy->value()),k)){
+ inf.side=c?to_left:to_right;
+ inf.pos=y->impl();
+ return true;
+ }
+ else{
+ inf.pos=yy->impl();
+ return false;
+ }
+ }
+
+ bool link_point(key_param_type k,link_info& inf,ordered_non_unique_tag)
+ {
+ node_type* y=header();
+ node_type* x=root();
+ bool c=true;
+ while (x){
+ y=x;
+ c=comp(k,key(x->value()));
+ x=node_type::from_impl(c?x->left():x->right());
+ }
+ inf.side=c?to_left:to_right;
+ inf.pos=y->impl();
+ return true;
+ }
+
+ bool hinted_link_point(
+ key_param_type k,node_type* position,link_info& inf,ordered_unique_tag)
+ {
+ if(position->impl()==header()->left()){
+ if(size()>0&&comp(k,key(position->value()))){
+ inf.side=to_left;
+ inf.pos=position->impl();
+ return true;
+ }
+ else return link_point(k,inf,ordered_unique_tag());
+ }
+ else if(position==header()){
+ if(comp(key(rightmost()->value()),k)){
+ inf.side=to_right;
+ inf.pos=rightmost()->impl();
+ return true;
+ }
+ else return link_point(k,inf,ordered_unique_tag());
+ }
+ else{
+ node_type* before=position;
+ node_type::decrement(before);
+ if(comp(key(before->value()),k)&&comp(k,key(position->value()))){
+ if(before->right()==0){
+ inf.side=to_right;
+ inf.pos=before->impl();
+ return true;
+ }
+ else{
+ inf.side=to_left;
+ inf.pos=position->impl();
+ return true;
+ }
+ }
+ else return link_point(k,inf,ordered_unique_tag());
+ }
+ }
+
+ bool hinted_link_point(
+ key_param_type k,node_type* position,link_info& inf,ordered_non_unique_tag)
+ {
+ if(position->impl()==header()->left()){
+ if(size()>0&&!comp(key(position->value()),k)){
+ inf.side=to_left;
+ inf.pos=position->impl();
+ return true;
+ }
+ else return link_point(k,inf,ordered_non_unique_tag());
+ }
+ else if(position==header()){
+ if(!comp(k,key(rightmost()->value()))){
+ inf.side=to_right;
+ inf.pos=rightmost()->impl();
+ return true;
+ }
+ else return link_point(k,inf,ordered_non_unique_tag());
+ }
+ else{
+ node_type* before=position;
+ node_type::decrement(before);
+ if (!comp(k,key(before->value()))&&!comp(key(position->value()),k)){
+ if(before->right()==0){
+ inf.side=to_right;
+ inf.pos=before->impl();
+ return true;
+ }
+ else{
+ inf.side=to_left;
+ inf.pos=position->impl();
+ return true;
+ }
+ }
+ else return link_point(k,inf,ordered_non_unique_tag());
+ }
+ }
+
+ void delete_all_nodes(node_type* x)
+ {
+ if(!x)return;
+
+ delete_all_nodes(node_type::from_impl(x->left()));
+ delete_all_nodes(node_type::from_impl(x->right()));
+ this->final_delete_node_(static_cast<final_node_type*>(x));
+ }
+
+ bool in_place(value_param_type v,node_type* x,ordered_unique_tag)
+ {
+ node_type* y;
+ if(x!=leftmost()){
+ y=x;
+ node_type::decrement(y);
+ if(!comp(key(y->value()),key(v)))return false;
+ }
+
+ y=x;
+ node_type::increment(y);
+ return y==header()||comp(key(v),key(y->value()));
+ }
+
+ bool in_place(value_param_type v,node_type* x,ordered_non_unique_tag)
+ {
+ node_type* y;
+ if(x!=leftmost()){
+ y=x;
+ node_type::decrement(y);
+ if(comp(key(v),key(y->value())))return false;
+ }
+
+ y=x;
+ node_type::increment(y);
+ return y==header()||!comp(key(y->value()),key(v));
+ }
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ void detach_iterators(node_type* x)
+ {
+ iterator it=make_iterator(x);
+ safe_mode::detach_equivalent_iterators(it);
+ }
+#endif
+
+ template<typename LowerBounder>
+ iterator lower_range(LowerBounder lower)const
+ {
+ node_type* y=header();
+ node_type* z=root();
+
+ while(z){
+ if(lower(key(z->value()))){
+ y=z;
+ z=node_type::from_impl(z->left());
+ }
+ else z=node_type::from_impl(z->right());
+ }
+
+ return make_iterator(y);
+ }
+
+ iterator lower_range(unbounded_type)const
+ {
+ return begin();
+ }
+
+ template<typename UpperBounder>
+ iterator upper_range(UpperBounder upper)const
+ {
+ node_type* y=header();
+ node_type* z=root();
+
+ while(z){
+ if(!upper(key(z->value()))){
+ y=z;
+ z=node_type::from_impl(z->left());
+ }
+ else z=node_type::from_impl(z->right());
+ }
+
+ return make_iterator(y);
+ }
+
+ iterator upper_range(unbounded_type)const
+ {
+ return end();
+ }
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+ template<typename Archive>
+ void save_(
+ Archive& ar,const unsigned int version,const index_saver_type& sm,
+ ordered_unique_tag)const
+ {
+ super::save_(ar,version,sm);
+ }
+
+ template<typename Archive>
+ void load_(
+ Archive& ar,const unsigned int version,const index_loader_type& lm,
+ ordered_unique_tag)
+ {
+ super::load_(ar,version,lm);
+ }
+
+ template<typename Archive>
+ void save_(
+ Archive& ar,const unsigned int version,const index_saver_type& sm,
+ ordered_non_unique_tag)const
+ {
+ typedef duplicates_iterator<node_type,value_compare> dup_iterator;
+
+ sm.save(
+ dup_iterator(begin().get_node(),end().get_node(),value_comp()),
+ dup_iterator(end().get_node(),value_comp()),
+ ar,version);
+ super::save_(ar,version,sm);
+ }
+
+ template<typename Archive>
+ void load_(
+ Archive& ar,const unsigned int version,const index_loader_type& lm,
+ ordered_non_unique_tag)
+ {
+ lm.load(
+ ::boost::bind(&ordered_index::rearranger,this,_1,_2),
+ ar,version);
+ super::load_(ar,version,lm);
+ }
+
+ void rearranger(node_type* position,node_type *x)
+ {
+ if(!position||comp(key(position->value()),key(x->value()))){
+ position=lower_bound(key(x->value())).get_node();
+ }
+ else if(comp(key(x->value()),key(position->value()))){
+ /* inconsistent rearrangement */
+ throw_exception(
+ archive::archive_exception(
+ archive::archive_exception::other_exception));
+ }
+ else node_type::increment(position);
+
+ if(position!=x){
+ ordered_index_node_impl::rebalance_for_erase(
+ x->impl(),header()->parent(),header()->left(),header()->right());
+ ordered_index_node_impl::restore(
+ x->impl(),position->impl(),header()->impl());
+ }
+ }
+#endif /* serialization */
+
+ key_from_value key;
+ key_compare comp;
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)&&\
+ BOOST_WORKAROUND(__MWERKS__,<=0x3003)
+#pragma parse_mfunc_templ reset
+#endif
+};
+
+/* comparison */
+
+template<
+ typename KeyFromValue1,typename Compare1,
+ typename SuperMeta1,typename TagList1,typename Category1,
+ typename KeyFromValue2,typename Compare2,
+ typename SuperMeta2,typename TagList2,typename Category2
+>
+bool operator==(
+ const ordered_index<KeyFromValue1,Compare1,SuperMeta1,TagList1,Category1>& x,
+ const ordered_index<KeyFromValue2,Compare2,SuperMeta2,TagList2,Category2>& y)
+{
+ return x.size()==y.size()&&std::equal(x.begin(),x.end(),y.begin());
+}
+
+template<
+ typename KeyFromValue1,typename Compare1,
+ typename SuperMeta1,typename TagList1,typename Category1,
+ typename KeyFromValue2,typename Compare2,
+ typename SuperMeta2,typename TagList2,typename Category2
+>
+bool operator<(
+ const ordered_index<KeyFromValue1,Compare1,SuperMeta1,TagList1,Category1>& x,
+ const ordered_index<KeyFromValue2,Compare2,SuperMeta2,TagList2,Category2>& y)
+{
+ return std::lexicographical_compare(x.begin(),x.end(),y.begin(),y.end());
+}
+
+template<
+ typename KeyFromValue1,typename Compare1,
+ typename SuperMeta1,typename TagList1,typename Category1,
+ typename KeyFromValue2,typename Compare2,
+ typename SuperMeta2,typename TagList2,typename Category2
+>
+bool operator!=(
+ const ordered_index<KeyFromValue1,Compare1,SuperMeta1,TagList1,Category1>& x,
+ const ordered_index<KeyFromValue2,Compare2,SuperMeta2,TagList2,Category2>& y)
+{
+ return !(x==y);
+}
+
+template<
+ typename KeyFromValue1,typename Compare1,
+ typename SuperMeta1,typename TagList1,typename Category1,
+ typename KeyFromValue2,typename Compare2,
+ typename SuperMeta2,typename TagList2,typename Category2
+>
+bool operator>(
+ const ordered_index<KeyFromValue1,Compare1,SuperMeta1,TagList1,Category1>& x,
+ const ordered_index<KeyFromValue2,Compare2,SuperMeta2,TagList2,Category2>& y)
+{
+ return y<x;
+}
+
+template<
+ typename KeyFromValue1,typename Compare1,
+ typename SuperMeta1,typename TagList1,typename Category1,
+ typename KeyFromValue2,typename Compare2,
+ typename SuperMeta2,typename TagList2,typename Category2
+>
+bool operator>=(
+ const ordered_index<KeyFromValue1,Compare1,SuperMeta1,TagList1,Category1>& x,
+ const ordered_index<KeyFromValue2,Compare2,SuperMeta2,TagList2,Category2>& y)
+{
+ return !(x<y);
+}
+
+template<
+ typename KeyFromValue1,typename Compare1,
+ typename SuperMeta1,typename TagList1,typename Category1,
+ typename KeyFromValue2,typename Compare2,
+ typename SuperMeta2,typename TagList2,typename Category2
+>
+bool operator<=(
+ const ordered_index<KeyFromValue1,Compare1,SuperMeta1,TagList1,Category1>& x,
+ const ordered_index<KeyFromValue2,Compare2,SuperMeta2,TagList2,Category2>& y)
+{
+ return !(x>y);
+}
+
+/* specialized algorithms */
+
+template<
+ typename KeyFromValue,typename Compare,
+ typename SuperMeta,typename TagList,typename Category
+>
+void swap(
+ ordered_index<KeyFromValue,Compare,SuperMeta,TagList,Category>& x,
+ ordered_index<KeyFromValue,Compare,SuperMeta,TagList,Category>& y)
+{
+ x.swap(y);
+}
+
+} /* namespace multi_index::detail */
+
+/* ordered_index specifiers */
+
+template<typename Arg1,typename Arg2,typename Arg3>
+struct ordered_unique
+{
+ typedef typename detail::ordered_index_args<
+ Arg1,Arg2,Arg3> index_args;
+ typedef typename index_args::tag_list_type::type tag_list_type;
+ typedef typename index_args::key_from_value_type key_from_value_type;
+ typedef typename index_args::compare_type compare_type;
+
+ template<typename Super>
+ struct node_class
+ {
+ typedef detail::ordered_index_node<Super> type;
+ };
+
+ template<typename SuperMeta>
+ struct index_class
+ {
+ typedef detail::ordered_index<
+ key_from_value_type,compare_type,
+ SuperMeta,tag_list_type,detail::ordered_unique_tag> type;
+ };
+};
+
+template<typename Arg1,typename Arg2,typename Arg3>
+struct ordered_non_unique
+{
+ typedef detail::ordered_index_args<
+ Arg1,Arg2,Arg3> index_args;
+ typedef typename index_args::tag_list_type::type tag_list_type;
+ typedef typename index_args::key_from_value_type key_from_value_type;
+ typedef typename index_args::compare_type compare_type;
+
+ template<typename Super>
+ struct node_class
+ {
+ typedef detail::ordered_index_node<Super> type;
+ };
+
+ template<typename SuperMeta>
+ struct index_class
+ {
+ typedef detail::ordered_index<
+ key_from_value_type,compare_type,
+ SuperMeta,tag_list_type,detail::ordered_non_unique_tag> type;
+ };
+};
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#undef BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT
+
+#endif
diff --git a/boost/boost/multi_index/ordered_index_fwd.hpp b/boost/boost/multi_index/ordered_index_fwd.hpp
new file mode 100644
index 00000000000..9ee6a0a0d81
--- /dev/null
+++ b/boost/boost/multi_index/ordered_index_fwd.hpp
@@ -0,0 +1,124 @@
+/* Copyright 2003-2005 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_ORDERED_INDEX_FWD_HPP
+#define BOOST_MULTI_INDEX_ORDERED_INDEX_FWD_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/multi_index/detail/ord_index_args.hpp>
+
+namespace boost{
+
+namespace multi_index{
+
+namespace detail{
+
+template<
+ typename KeyFromValue,typename Compare,
+ typename SuperMeta,typename TagList,typename Category
+>
+class ordered_index;
+
+template<
+ typename KeyFromValue1,typename Compare1,
+ typename SuperMeta1,typename TagList1,typename Category1,
+ typename KeyFromValue2,typename Compare2,
+ typename SuperMeta2,typename TagList2,typename Category2
+>
+bool operator==(
+ const ordered_index<
+ KeyFromValue1,Compare1,SuperMeta1,TagList1,Category1>& x,
+ const ordered_index<
+ KeyFromValue2,Compare2,SuperMeta2,TagList2,Category2>& y);
+
+template<
+ typename KeyFromValue1,typename Compare1,
+ typename SuperMeta1,typename TagList1,typename Category1,
+ typename KeyFromValue2,typename Compare2,
+ typename SuperMeta2,typename TagList2,typename Category2
+>
+bool operator<(
+ const ordered_index<
+ KeyFromValue1,Compare1,SuperMeta1,TagList1,Category1>& x,
+ const ordered_index<
+ KeyFromValue2,Compare2,SuperMeta2,TagList2,Category2>& y);
+
+template<
+ typename KeyFromValue1,typename Compare1,
+ typename SuperMeta1,typename TagList1,typename Category1,
+ typename KeyFromValue2,typename Compare2,
+ typename SuperMeta2,typename TagList2,typename Category2
+>
+bool operator!=(
+ const ordered_index<
+ KeyFromValue1,Compare1,SuperMeta1,TagList1,Category1>& x,
+ const ordered_index<
+ KeyFromValue2,Compare2,SuperMeta2,TagList2,Category2>& y);
+
+template<
+ typename KeyFromValue1,typename Compare1,
+ typename SuperMeta1,typename TagList1,typename Category1,
+ typename KeyFromValue2,typename Compare2,
+ typename SuperMeta2,typename TagList2,typename Category2
+>
+bool operator>(
+ const ordered_index<
+ KeyFromValue1,Compare1,SuperMeta1,TagList1,Category1>& x,
+ const ordered_index<
+ KeyFromValue2,Compare2,SuperMeta2,TagList2,Category2>& y);
+
+template<
+ typename KeyFromValue1,typename Compare1,
+ typename SuperMeta1,typename TagList1,typename Category1,
+ typename KeyFromValue2,typename Compare2,
+ typename SuperMeta2,typename TagList2,typename Category2
+>
+bool operator>=(
+ const ordered_index<
+ KeyFromValue1,Compare1,SuperMeta1,TagList1,Category1>& x,
+ const ordered_index<
+ KeyFromValue2,Compare2,SuperMeta2,TagList2,Category2>& y);
+
+template<
+ typename KeyFromValue1,typename Compare1,
+ typename SuperMeta1,typename TagList1,typename Category1,
+ typename KeyFromValue2,typename Compare2,
+ typename SuperMeta2,typename TagList2,typename Category2
+>
+bool operator<=(
+ const ordered_index<
+ KeyFromValue1,Compare1,SuperMeta1,TagList1,Category1>& x,
+ const ordered_index<
+ KeyFromValue2,Compare2,SuperMeta2,TagList2,Category2>& y);
+
+template<
+ typename KeyFromValue,typename Compare,
+ typename SuperMeta,typename TagList,typename Category
+>
+void swap(
+ ordered_index<KeyFromValue,Compare,SuperMeta,TagList,Category>& x,
+ ordered_index<KeyFromValue,Compare,SuperMeta,TagList,Category>& y);
+
+} /* namespace multi_index::detail */
+
+/* ordered_index specifiers */
+
+template<typename Arg1,typename Arg2=mpl::na,typename Arg3=mpl::na>
+struct ordered_unique;
+
+template<typename Arg1,typename Arg2=mpl::na,typename Arg3=mpl::na>
+struct ordered_non_unique;
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#endif
diff --git a/boost/boost/multi_index/random_access_index.hpp b/boost/boost/multi_index/random_access_index.hpp
new file mode 100644
index 00000000000..476300848d2
--- /dev/null
+++ b/boost/boost/multi_index/random_access_index.hpp
@@ -0,0 +1,920 @@
+/* Copyright 2003-2007 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_RANDOM_ACCESS_INDEX_HPP
+#define BOOST_MULTI_INDEX_RANDOM_ACCESS_INDEX_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <algorithm>
+#include <boost/call_traits.hpp>
+#include <boost/detail/no_exceptions_support.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/iterator/reverse_iterator.hpp>
+#include <boost/mpl/push_front.hpp>
+#include <boost/multi_index/detail/access_specifier.hpp>
+#include <boost/multi_index/detail/index_node_base.hpp>
+#include <boost/multi_index/detail/rnd_node_iterator.hpp>
+#include <boost/multi_index/detail/rnd_index_node.hpp>
+#include <boost/multi_index/detail/rnd_index_ops.hpp>
+#include <boost/multi_index/detail/rnd_index_ptr_array.hpp>
+#include <boost/multi_index/detail/safe_ctr_proxy.hpp>
+#include <boost/multi_index/detail/safe_mode.hpp>
+#include <boost/multi_index/detail/scope_guard.hpp>
+#include <boost/multi_index/random_access_index_fwd.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/tuple/tuple.hpp>
+#include <cstddef>
+#include <functional>
+#include <stdexcept>
+#include <utility>
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+#include <boost/bind.hpp>
+#include <boost/multi_index/detail/rnd_index_loader.hpp>
+#endif
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)
+#define BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT \
+ detail::scope_guard BOOST_JOIN(check_invariant_,__LINE__)= \
+ detail::make_obj_guard(*this,&random_access_index::check_invariant_); \
+ BOOST_JOIN(check_invariant_,__LINE__).touch();
+#else
+#define BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT
+#endif
+
+namespace boost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* random_access_index adds a layer of random access indexing
+ * to a given Super
+ */
+
+template<typename SuperMeta,typename TagList>
+class random_access_index:
+ BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS SuperMeta::type
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+#if BOOST_WORKAROUND(BOOST_MSVC,<1300)
+ ,public safe_ctr_proxy_impl<
+ rnd_node_iterator<
+ random_access_index_node<typename SuperMeta::type::node_type> >,
+ random_access_index<SuperMeta,TagList> >
+#else
+ ,public safe_mode::safe_container<
+ random_access_index<SuperMeta,TagList> >
+#endif
+#endif
+
+{
+#if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)&&\
+ BOOST_WORKAROUND(__MWERKS__,<=0x3003)
+/* The "ISO C++ Template Parser" option in CW8.3 has a problem with the
+ * lifetime of const references bound to temporaries --precisely what
+ * scopeguards are.
+ */
+
+#pragma parse_mfunc_templ off
+#endif
+
+ typedef typename SuperMeta::type super;
+
+protected:
+ typedef random_access_index_node<
+ typename super::node_type> node_type;
+
+public:
+ /* types */
+
+ typedef typename node_type::value_type value_type;
+ typedef tuples::null_type ctor_args;
+ typedef typename super::final_allocator_type allocator_type;
+ typedef typename allocator_type::reference reference;
+ typedef typename allocator_type::const_reference const_reference;
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+#if BOOST_WORKAROUND(BOOST_MSVC,<1300)
+ typedef safe_mode::safe_iterator<
+ rnd_node_iterator<node_type>,
+ safe_ctr_proxy<
+ rnd_node_iterator<node_type> > > iterator;
+#else
+ typedef safe_mode::safe_iterator<
+ rnd_node_iterator<node_type>,
+ random_access_index> iterator;
+#endif
+#else
+ typedef rnd_node_iterator<node_type> iterator;
+#endif
+
+ typedef iterator const_iterator;
+
+ typedef std::size_t size_type;
+ typedef std::ptrdiff_t difference_type;
+ typedef typename allocator_type::pointer pointer;
+ typedef typename allocator_type::const_pointer const_pointer;
+ typedef typename
+ boost::reverse_iterator<iterator> reverse_iterator;
+ typedef typename
+ boost::reverse_iterator<const_iterator> const_reverse_iterator;
+ typedef TagList tag_list;
+
+protected:
+ typedef typename super::final_node_type final_node_type;
+ typedef tuples::cons<
+ ctor_args,
+ typename super::ctor_args_list> ctor_args_list;
+ typedef typename mpl::push_front<
+ typename super::index_type_list,
+ random_access_index>::type index_type_list;
+ typedef typename mpl::push_front<
+ typename super::iterator_type_list,
+ iterator>::type iterator_type_list;
+ typedef typename mpl::push_front<
+ typename super::const_iterator_type_list,
+ const_iterator>::type const_iterator_type_list;
+ typedef typename super::copy_map_type copy_map_type;
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+ typedef typename super::index_saver_type index_saver_type;
+ typedef typename super::index_loader_type index_loader_type;
+#endif
+
+private:
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+#if BOOST_WORKAROUND(BOOST_MSVC,<1300)
+ typedef safe_ctr_proxy_impl<
+ rnd_node_iterator<node_type>,
+ random_access_index> safe_super;
+#else
+ typedef safe_mode::safe_container<
+ random_access_index> safe_super;
+#endif
+#endif
+
+ typedef typename call_traits<
+ value_type>::param_type value_param_type;
+
+public:
+
+ /* construct/copy/destroy
+ * Default and copy ctors are in the protected section as indices are
+ * not supposed to be created on their own. No range ctor either.
+ */
+
+ random_access_index<SuperMeta,TagList>& operator=(
+ const random_access_index<SuperMeta,TagList>& x)
+ {
+ this->final()=x.final();
+ return *this;
+ }
+
+ template <class InputIterator>
+ void assign(InputIterator first,InputIterator last)
+ {
+ BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT;
+ clear();
+ for(;first!=last;++first)push_back(*first);
+ }
+
+ void assign(size_type n,value_param_type value)
+ {
+ BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT;
+ clear();
+ for(size_type i=0;i<n;++i)push_back(value);
+ }
+
+ allocator_type get_allocator()const
+ {
+ return this->final().get_allocator();
+ }
+
+ /* iterators */
+
+ iterator begin()
+ {return make_iterator(node_type::from_impl(*ptrs.begin()));}
+ const_iterator begin()const
+ {return make_iterator(node_type::from_impl(*ptrs.begin()));}
+ iterator end(){return make_iterator(header());}
+ const_iterator end()const{return make_iterator(header());}
+ reverse_iterator rbegin(){return make_reverse_iterator(end());}
+ const_reverse_iterator rbegin()const{return make_reverse_iterator(end());}
+ reverse_iterator rend(){return make_reverse_iterator(begin());}
+ const_reverse_iterator rend()const{return make_reverse_iterator(begin());}
+
+ /* capacity */
+
+ bool empty()const{return this->final_empty_();}
+ size_type size()const{return this->final_size_();}
+ size_type max_size()const{return this->final_max_size_();}
+ size_type capacity()const{return ptrs.capacity();}
+ void reserve(size_type n){ptrs.reserve(n);}
+
+ void resize(size_type n,value_param_type x=value_type())
+ {
+ BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT;
+ if(n>size())insert(end(),n-size(),x);
+ else if(n<size())erase(begin()+n,end());
+ }
+
+ /* access: no non-const versions provided as random_access_index
+ * handles const elements.
+ */
+
+ const_reference operator[](size_type n)const
+ {
+ BOOST_MULTI_INDEX_SAFE_MODE_ASSERT(n<size(),safe_mode::out_of_bounds);
+ return node_type::from_impl(*ptrs.at(n))->value();
+ }
+
+ const_reference at(size_type n)const
+ {
+ if(n>=size())throw_exception(std::out_of_range("random access index"));
+ return node_type::from_impl(*ptrs.at(n))->value();
+ }
+
+ const_reference front()const{return operator[](0);}
+ const_reference back()const{return operator[](size()-1);}
+
+ /* modifiers */
+
+ std::pair<iterator,bool> push_front(value_param_type x)
+ {return insert(begin(),x);}
+ void pop_front(){erase(begin());}
+ std::pair<iterator,bool> push_back(value_param_type x)
+ {return insert(end(),x);}
+ void pop_back(){erase(--end());}
+
+ std::pair<iterator,bool> insert(iterator position,value_param_type x)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+ BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT;
+ std::pair<final_node_type*,bool> p=this->final_insert_(x);
+ if(p.second&&position.get_node()!=header()){
+ relocate(position.get_node(),p.first);
+ }
+ return std::pair<iterator,bool>(make_iterator(p.first),p.second);
+ }
+
+ void insert(iterator position,size_type n,value_param_type x)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+ BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT;
+ size_type s=0;
+ BOOST_TRY{
+ while(n--){
+ if(push_back(x).second)++s;
+ }
+ }
+ BOOST_CATCH(...){
+ relocate(position,end()-s,end());
+ BOOST_RETHROW;
+ }
+ BOOST_CATCH_END
+ relocate(position,end()-s,end());
+ }
+
+ template<typename InputIterator>
+ void insert(iterator position,InputIterator first,InputIterator last)
+ {
+ BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT;
+ size_type s=0;
+ BOOST_TRY{
+ for(;first!=last;++first){
+ if(push_back(*first).second)++s;
+ }
+ }
+ BOOST_CATCH(...){
+ relocate(position,end()-s,end());
+ BOOST_RETHROW;
+ }
+ BOOST_CATCH_END
+ relocate(position,end()-s,end());
+ }
+
+ iterator erase(iterator position)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+ BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT;
+ this->final_erase_(static_cast<final_node_type*>(position++.get_node()));
+ return position;
+ }
+
+ iterator erase(iterator first,iterator last)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(first);
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(last);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(first,*this);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(last,*this);
+ BOOST_MULTI_INDEX_CHECK_VALID_RANGE(first,last);
+ BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT;
+ difference_type n=last-first;
+ relocate(end(),first,last);
+ while(n--)pop_back();
+ return last;
+ }
+
+ bool replace(iterator position,value_param_type x)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+ BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT;
+ return this->final_replace_(
+ x,static_cast<final_node_type*>(position.get_node()));
+ }
+
+ template<typename Modifier>
+ bool modify(iterator position,Modifier mod)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+ BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT;
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ /* MSVC++ 6.0 optimizer on safe mode code chokes if this
+ * this is not added. Left it for all compilers as it does no
+ * harm.
+ */
+
+ position.detach();
+#endif
+
+ return this->final_modify_(
+ mod,static_cast<final_node_type*>(position.get_node()));
+ }
+
+ void swap(random_access_index<SuperMeta,TagList>& x)
+ {
+ BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT;
+ this->final_swap_(x.final());
+ }
+
+ void clear()
+ {
+ BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT;
+ this->final_clear_();
+ }
+
+ /* list operations */
+
+ void splice(iterator position,random_access_index<SuperMeta,TagList>& x)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+ BOOST_MULTI_INDEX_CHECK_DIFFERENT_CONTAINER(*this,x);
+ BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT;
+ iterator first=x.begin(),last=x.end();
+ size_type n=0;
+ BOOST_TRY{
+ while(first!=last){
+ if(push_back(*first).second){
+ first=x.erase(first);
+ ++n;
+ }
+ else ++first;
+ }
+ }
+ BOOST_CATCH(...){
+ relocate(position,end()-n,end());
+ BOOST_RETHROW;
+ }
+ BOOST_CATCH_END
+ relocate(position,end()-n,end());
+ }
+
+ void splice(
+ iterator position,random_access_index<SuperMeta,TagList>& x,iterator i)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(i);
+ BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(i);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(i,x);
+ BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT;
+ if(&x==this)relocate(position,i);
+ else{
+ if(insert(position,*i).second){
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ /* MSVC++ 6.0 optimizer has a hard time with safe mode, and the following
+ * workaround is needed. Left it for all compilers as it does no
+ * harm.
+ */
+ i.detach();
+ x.erase(x.make_iterator(i.get_node()));
+#else
+ x.erase(i);
+#endif
+
+ }
+ }
+ }
+
+ void splice(
+ iterator position,random_access_index<SuperMeta,TagList>& x,
+ iterator first,iterator last)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(first);
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(last);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(first,x);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(last,x);
+ BOOST_MULTI_INDEX_CHECK_VALID_RANGE(first,last);
+ BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT;
+ if(&x==this)relocate(position,first,last);
+ else{
+ size_type n=0;
+ BOOST_TRY{
+ while(first!=last){
+ if(push_back(*first).second){
+ first=x.erase(first);
+ ++n;
+ }
+ else ++first;
+ }
+ }
+ BOOST_CATCH(...){
+ relocate(position,end()-n,end());
+ BOOST_RETHROW;
+ }
+ BOOST_CATCH_END
+ relocate(position,end()-n,end());
+ }
+ }
+
+ void remove(value_param_type value)
+ {
+ BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT;
+ difference_type n=
+ end()-make_iterator(
+ random_access_index_remove<node_type>(
+ ptrs,std::bind2nd(std::equal_to<value_type>(),value)));
+ while(n--)pop_back();
+ }
+
+ template<typename Predicate>
+ void remove_if(Predicate pred)
+ {
+ BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT;
+ difference_type n=
+ end()-make_iterator(random_access_index_remove<node_type>(ptrs,pred));
+ while(n--)pop_back();
+ }
+
+ void unique()
+ {
+ BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT;
+ difference_type n=
+ end()-make_iterator(
+ random_access_index_unique<node_type>(
+ ptrs,std::equal_to<value_type>()));
+ while(n--)pop_back();
+ }
+
+ template <class BinaryPredicate>
+ void unique(BinaryPredicate binary_pred)
+ {
+ BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT;
+ difference_type n=
+ end()-make_iterator(
+ random_access_index_unique<node_type>(ptrs,binary_pred));
+ while(n--)pop_back();
+ }
+
+ void merge(random_access_index<SuperMeta,TagList>& x)
+ {
+ if(this!=&x){
+ BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT;
+ size_type s=size();
+ splice(end(),x);
+ random_access_index_inplace_merge<node_type>(
+ get_allocator(),ptrs,ptrs.at(s),std::less<value_type>());
+ }
+ }
+
+ template <typename Compare>
+ void merge(random_access_index<SuperMeta,TagList>& x,Compare comp)
+ {
+ if(this!=&x){
+ BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT;
+ size_type s=size();
+ splice(end(),x);
+ random_access_index_inplace_merge<node_type>(
+ get_allocator(),ptrs,ptrs.at(s),comp);
+ }
+ }
+
+ void sort()
+ {
+ BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT;
+ random_access_index_sort<node_type>(
+ get_allocator(),ptrs,std::less<value_type>());
+ }
+
+ template <typename Compare>
+ void sort(Compare comp)
+ {
+ BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT;
+ random_access_index_sort<node_type>(
+ get_allocator(),ptrs,comp);
+ }
+
+ void reverse()
+ {
+ BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT;
+ random_access_index_node_impl::reverse(ptrs.begin(),ptrs.end());
+ }
+
+ /* rearrange operations */
+
+ void relocate(iterator position,iterator i)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(i);
+ BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(i);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(i,*this);
+ BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT;
+ if(position!=i)relocate(position.get_node(),i.get_node());
+ }
+
+ void relocate(iterator position,iterator first,iterator last)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(first);
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(last);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(first,*this);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(last,*this);
+ BOOST_MULTI_INDEX_CHECK_VALID_RANGE(first,last);
+ BOOST_MULTI_INDEX_CHECK_OUTSIDE_RANGE(position,first,last);
+ BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT;
+ if(position!=last)relocate(
+ position.get_node(),first.get_node(),last.get_node());
+ }
+
+ template<typename InputIterator>
+ void rearrange(InputIterator first)
+ {
+ BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT;
+ for(random_access_index_node_impl** p0=ptrs.begin(),** p0_end=ptrs.end();
+ p0!=p0_end;++first,++p0){
+ const value_type& v1=*first;
+ random_access_index_node_impl** p1=node_from_value<node_type>(&v1)->up();
+
+ std::swap(*p0,*p1);
+ (*p0)->up()=p0;
+ (*p1)->up()=p1;
+ }
+ }
+
+BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS:
+ random_access_index(
+ const ctor_args_list& args_list,const allocator_type& al):
+ super(args_list.get_tail(),al),
+ ptrs(al,header()->impl(),0)
+ {
+ }
+
+ random_access_index(const random_access_index<SuperMeta,TagList>& x):
+ super(x),
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ safe_super(),
+#endif
+
+ ptrs(x.get_allocator(),header()->impl(),x.size())
+ {
+ /* The actual copying takes place in subsequent call to copy_().
+ */
+ }
+
+ ~random_access_index()
+ {
+ /* the container is guaranteed to be empty by now */
+ }
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ iterator make_iterator(node_type* node){return iterator(node,this);}
+ const_iterator make_iterator(node_type* node)const
+ {return const_iterator(node,const_cast<random_access_index*>(this));}
+#else
+ iterator make_iterator(node_type* node){return iterator(node);}
+ const_iterator make_iterator(node_type* node)const
+ {return const_iterator(node);}
+#endif
+
+ void copy_(
+ const random_access_index<SuperMeta,TagList>& x,const copy_map_type& map)
+ {
+ for(random_access_index_node_impl** begin_org=x.ptrs.begin(),
+ ** begin_cpy=ptrs.begin(),
+ ** end_org=x.ptrs.end();
+ begin_org!=end_org;++begin_org,++begin_cpy){
+ *begin_cpy=
+ static_cast<node_type*>(
+ map.find(
+ static_cast<final_node_type*>(
+ node_type::from_impl(*begin_org))))->impl();
+ (*begin_cpy)->up()=begin_cpy;
+ }
+
+ super::copy_(x,map);
+ }
+
+ node_type* insert_(value_param_type v,node_type* x)
+ {
+ ptrs.room_for_one();
+ node_type* res=static_cast<node_type*>(super::insert_(v,x));
+ if(res==x)ptrs.push_back(x->impl());
+ return res;
+ }
+
+ node_type* insert_(value_param_type v,node_type* position,node_type* x)
+ {
+ ptrs.room_for_one();
+ node_type* res=static_cast<node_type*>(super::insert_(v,position,x));
+ if(res==x)ptrs.push_back(x->impl());
+ return res;
+ }
+
+ void erase_(node_type* x)
+ {
+ ptrs.erase(x->impl());
+ super::erase_(x);
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ detach_iterators(x);
+#endif
+ }
+
+ void delete_all_nodes_()
+ {
+ for(random_access_index_node_impl** x=ptrs.begin(),**x_end=ptrs.end();
+ x!=x_end;++x){
+ this->final_delete_node_(
+ static_cast<final_node_type*>(node_type::from_impl(*x)));
+ }
+ }
+
+ void clear_()
+ {
+ super::clear_();
+ ptrs.clear();
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ safe_super::detach_dereferenceable_iterators();
+#endif
+ }
+
+ void swap_(random_access_index<SuperMeta,TagList>& x)
+ {
+ ptrs.swap(x.ptrs);
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ safe_super::swap(x);
+#endif
+
+ super::swap_(x);
+ }
+
+ bool replace_(value_param_type v,node_type* x)
+ {
+ return super::replace_(v,x);
+ }
+
+ bool modify_(node_type* x)
+ {
+ BOOST_TRY{
+ if(!super::modify_(x)){
+ ptrs.erase(x->impl());
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ detach_iterators(x);
+#endif
+
+ return false;
+ }
+ else return true;
+ }
+ BOOST_CATCH(...){
+ ptrs.erase(x->impl());
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ detach_iterators(x);
+#endif
+
+ BOOST_RETHROW;
+ }
+ BOOST_CATCH_END
+ }
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+ /* serialization */
+
+ template<typename Archive>
+ void save_(
+ Archive& ar,const unsigned int version,const index_saver_type& sm)const
+ {
+ sm.save(begin(),end(),ar,version);
+ super::save_(ar,version,sm);
+ }
+
+ template<typename Archive>
+ void load_(
+ Archive& ar,const unsigned int version,const index_loader_type& lm)
+ {
+ {
+ typedef random_access_index_loader<node_type,allocator_type> loader;
+
+ loader ld(get_allocator(),ptrs);
+ lm.load(::boost::bind(&loader::rearrange,&ld,_1,_2),ar,version);
+ } /* exit scope so that ld frees its resources */
+ super::load_(ar,version,lm);
+ }
+#endif
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)
+ /* invariant stuff */
+
+ bool invariant_()const
+ {
+ if(size()>capacity())return false;
+ if(size()==0||begin()==end()){
+ if(size()!=0||begin()!=end())return false;
+ }
+ else{
+ size_type s=0;
+ for(const_iterator it=begin(),it_end=end();;++it,++s){
+ if(*(it.get_node()->up())!=it.get_node()->impl())return false;
+ if(it==it_end)break;
+ }
+ if(s!=size())return false;
+ }
+
+ return super::invariant_();
+ }
+
+ /* This forwarding function eases things for the boost::mem_fn construct
+ * in BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT. Actually,
+ * final_check_invariant is already an inherited member function of index.
+ */
+ void check_invariant_()const{this->final_check_invariant_();}
+#endif
+
+private:
+ node_type* header()const{return this->final_header();}
+
+ static void relocate(node_type* position,node_type* x)
+ {
+ random_access_index_node_impl::relocate(position->up(),x->up());
+ }
+
+ static void relocate(node_type* position,node_type* first,node_type* last)
+ {
+ random_access_index_node_impl::relocate(
+ position->up(),first->up(),last->up());
+ }
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ void detach_iterators(node_type* x)
+ {
+ iterator it=make_iterator(x);
+ safe_mode::detach_equivalent_iterators(it);
+ }
+#endif
+
+ random_access_index_ptr_array<typename super::final_allocator_type> ptrs;
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)&&\
+ BOOST_WORKAROUND(__MWERKS__,<=0x3003)
+#pragma parse_mfunc_templ reset
+#endif
+};
+
+/* comparison */
+
+template<
+ typename SuperMeta1,typename TagList1,
+ typename SuperMeta2,typename TagList2
+>
+bool operator==(
+ const random_access_index<SuperMeta1,TagList1>& x,
+ const random_access_index<SuperMeta2,TagList2>& y)
+{
+ return x.size()==y.size()&&std::equal(x.begin(),x.end(),y.begin());
+}
+
+template<
+ typename SuperMeta1,typename TagList1,
+ typename SuperMeta2,typename TagList2
+>
+bool operator<(
+ const random_access_index<SuperMeta1,TagList1>& x,
+ const random_access_index<SuperMeta2,TagList2>& y)
+{
+ return std::lexicographical_compare(x.begin(),x.end(),y.begin(),y.end());
+}
+
+template<
+ typename SuperMeta1,typename TagList1,
+ typename SuperMeta2,typename TagList2
+>
+bool operator!=(
+ const random_access_index<SuperMeta1,TagList1>& x,
+ const random_access_index<SuperMeta2,TagList2>& y)
+{
+ return !(x==y);
+}
+
+template<
+ typename SuperMeta1,typename TagList1,
+ typename SuperMeta2,typename TagList2
+>
+bool operator>(
+ const random_access_index<SuperMeta1,TagList1>& x,
+ const random_access_index<SuperMeta2,TagList2>& y)
+{
+ return y<x;
+}
+
+template<
+ typename SuperMeta1,typename TagList1,
+ typename SuperMeta2,typename TagList2
+>
+bool operator>=(
+ const random_access_index<SuperMeta1,TagList1>& x,
+ const random_access_index<SuperMeta2,TagList2>& y)
+{
+ return !(x<y);
+}
+
+template<
+ typename SuperMeta1,typename TagList1,
+ typename SuperMeta2,typename TagList2
+>
+bool operator<=(
+ const random_access_index<SuperMeta1,TagList1>& x,
+ const random_access_index<SuperMeta2,TagList2>& y)
+{
+ return !(x>y);
+}
+
+/* specialized algorithms */
+
+template<typename SuperMeta,typename TagList>
+void swap(
+ random_access_index<SuperMeta,TagList>& x,
+ random_access_index<SuperMeta,TagList>& y)
+{
+ x.swap(y);
+}
+
+} /* namespace multi_index::detail */
+
+/* random access index specifier */
+
+template <typename TagList>
+struct random_access
+{
+ BOOST_STATIC_ASSERT(detail::is_tag<TagList>::value);
+
+ template<typename Super>
+ struct node_class
+ {
+ typedef detail::random_access_index_node<Super> type;
+ };
+
+ template<typename SuperMeta>
+ struct index_class
+ {
+ typedef detail::random_access_index<
+ SuperMeta,typename TagList::type> type;
+ };
+};
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#undef BOOST_MULTI_INDEX_RND_INDEX_CHECK_INVARIANT
+
+#endif
diff --git a/boost/boost/multi_index/random_access_index_fwd.hpp b/boost/boost/multi_index/random_access_index_fwd.hpp
new file mode 100644
index 00000000000..9e1be3596ef
--- /dev/null
+++ b/boost/boost/multi_index/random_access_index_fwd.hpp
@@ -0,0 +1,91 @@
+/* Copyright 2003-2005 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_RANDOM_ACCESS_INDEX_FWD_HPP
+#define BOOST_MULTI_INDEX_RANDOM_ACCESS_INDEX_FWD_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/multi_index/tag.hpp>
+
+namespace boost{
+
+namespace multi_index{
+
+namespace detail{
+
+template<typename SuperMeta,typename TagList>
+class random_access_index;
+
+template<
+ typename SuperMeta1,typename TagList1,
+ typename SuperMeta2,typename TagList2
+>
+bool operator==(
+ const random_access_index<SuperMeta1,TagList1>& x,
+ const random_access_index<SuperMeta2,TagList2>& y);
+
+template<
+ typename SuperMeta1,typename TagList1,
+ typename SuperMeta2,typename TagList2
+>
+bool operator<(
+ const random_access_index<SuperMeta1,TagList1>& x,
+ const random_access_index<SuperMeta2,TagList2>& y);
+
+template<
+ typename SuperMeta1,typename TagList1,
+ typename SuperMeta2,typename TagList2
+>
+bool operator!=(
+ const random_access_index<SuperMeta1,TagList1>& x,
+ const random_access_index<SuperMeta2,TagList2>& y);
+
+template<
+ typename SuperMeta1,typename TagList1,
+ typename SuperMeta2,typename TagList2
+>
+bool operator>(
+ const random_access_index<SuperMeta1,TagList1>& x,
+ const random_access_index<SuperMeta2,TagList2>& y);
+
+template<
+ typename SuperMeta1,typename TagList1,
+ typename SuperMeta2,typename TagList2
+>
+bool operator>=(
+ const random_access_index<SuperMeta1,TagList1>& x,
+ const random_access_index<SuperMeta2,TagList2>& y);
+
+template<
+ typename SuperMeta1,typename TagList1,
+ typename SuperMeta2,typename TagList2
+>
+bool operator<=(
+ const random_access_index<SuperMeta1,TagList1>& x,
+ const random_access_index<SuperMeta2,TagList2>& y);
+
+template<typename SuperMeta,typename TagList>
+void swap(
+ random_access_index<SuperMeta,TagList>& x,
+ random_access_index<SuperMeta,TagList>& y);
+
+} /* namespace multi_index::detail */
+
+/* index specifiers */
+
+template <typename TagList=tag<> >
+struct random_access;
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#endif
diff --git a/boost/boost/multi_index/safe_mode_errors.hpp b/boost/boost/multi_index/safe_mode_errors.hpp
new file mode 100644
index 00000000000..bfaf31b4411
--- /dev/null
+++ b/boost/boost/multi_index/safe_mode_errors.hpp
@@ -0,0 +1,48 @@
+/* Copyright 2003-2006 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_SAFE_MODE_ERRORS_HPP
+#define BOOST_MULTI_INDEX_SAFE_MODE_ERRORS_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+namespace boost{
+
+namespace multi_index{
+
+namespace safe_mode{
+
+/* Error codes for Boost.MultiIndex safe mode. These go in a separate
+ * header so that the user can include it when redefining
+ * BOOST_MULTI_INDEX_SAFE_MODE_ASSERT prior to the inclusion of
+ * any other header of Boost.MultiIndex.
+ */
+
+enum error_code
+{
+ invalid_iterator=0,
+ not_dereferenceable_iterator,
+ not_incrementable_iterator,
+ not_decrementable_iterator,
+ not_owner,
+ not_same_owner,
+ invalid_range,
+ inside_range,
+ out_of_bounds,
+ same_container
+};
+
+} /* namespace multi_index::safe_mode */
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#endif
diff --git a/boost/boost/multi_index/sequenced_index.hpp b/boost/boost/multi_index/sequenced_index.hpp
new file mode 100644
index 00000000000..7740101fdc8
--- /dev/null
+++ b/boost/boost/multi_index/sequenced_index.hpp
@@ -0,0 +1,839 @@
+/* Copyright 2003-2007 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_SEQUENCED_INDEX_HPP
+#define BOOST_MULTI_INDEX_SEQUENCED_INDEX_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/call_traits.hpp>
+#include <boost/detail/no_exceptions_support.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/iterator/reverse_iterator.hpp>
+#include <boost/mpl/push_front.hpp>
+#include <boost/multi_index/detail/access_specifier.hpp>
+#include <boost/multi_index/detail/bidir_node_iterator.hpp>
+#include <boost/multi_index/detail/index_node_base.hpp>
+#include <boost/multi_index/detail/safe_ctr_proxy.hpp>
+#include <boost/multi_index/detail/safe_mode.hpp>
+#include <boost/multi_index/detail/scope_guard.hpp>
+#include <boost/multi_index/detail/seq_index_node.hpp>
+#include <boost/multi_index/detail/seq_index_ops.hpp>
+#include <boost/multi_index/sequenced_index_fwd.hpp>
+#include <boost/tuple/tuple.hpp>
+#include <cstddef>
+#include <functional>
+#include <utility>
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+#include <boost/bind.hpp>
+#endif
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)
+#define BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT \
+ detail::scope_guard BOOST_JOIN(check_invariant_,__LINE__)= \
+ detail::make_obj_guard(*this,&sequenced_index::check_invariant_); \
+ BOOST_JOIN(check_invariant_,__LINE__).touch();
+#else
+#define BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT
+#endif
+
+namespace boost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* sequenced_index adds a layer of sequenced indexing to a given Super */
+
+template<typename SuperMeta,typename TagList>
+class sequenced_index:
+ BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS SuperMeta::type
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+#if BOOST_WORKAROUND(BOOST_MSVC,<1300)
+ ,public safe_ctr_proxy_impl<
+ bidir_node_iterator<
+ sequenced_index_node<typename SuperMeta::type::node_type> >,
+ sequenced_index<SuperMeta,TagList> >
+#else
+ ,public safe_mode::safe_container<
+ sequenced_index<SuperMeta,TagList> >
+#endif
+#endif
+
+{
+#if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)&&\
+ BOOST_WORKAROUND(__MWERKS__,<=0x3003)
+/* The "ISO C++ Template Parser" option in CW8.3 has a problem with the
+ * lifetime of const references bound to temporaries --precisely what
+ * scopeguards are.
+ */
+
+#pragma parse_mfunc_templ off
+#endif
+
+ typedef typename SuperMeta::type super;
+
+protected:
+ typedef sequenced_index_node<
+ typename super::node_type> node_type;
+
+public:
+ /* types */
+
+ typedef typename node_type::value_type value_type;
+ typedef tuples::null_type ctor_args;
+ typedef typename super::final_allocator_type allocator_type;
+ typedef typename allocator_type::reference reference;
+ typedef typename allocator_type::const_reference const_reference;
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+#if BOOST_WORKAROUND(BOOST_MSVC,<1300)
+ typedef safe_mode::safe_iterator<
+ bidir_node_iterator<node_type>,
+ safe_ctr_proxy<
+ bidir_node_iterator<node_type> > > iterator;
+#else
+ typedef safe_mode::safe_iterator<
+ bidir_node_iterator<node_type>,
+ sequenced_index> iterator;
+#endif
+#else
+ typedef bidir_node_iterator<node_type> iterator;
+#endif
+
+ typedef iterator const_iterator;
+
+ typedef std::size_t size_type;
+ typedef std::ptrdiff_t difference_type;
+ typedef typename allocator_type::pointer pointer;
+ typedef typename allocator_type::const_pointer const_pointer;
+ typedef typename
+ boost::reverse_iterator<iterator> reverse_iterator;
+ typedef typename
+ boost::reverse_iterator<const_iterator> const_reverse_iterator;
+ typedef TagList tag_list;
+
+protected:
+ typedef typename super::final_node_type final_node_type;
+ typedef tuples::cons<
+ ctor_args,
+ typename super::ctor_args_list> ctor_args_list;
+ typedef typename mpl::push_front<
+ typename super::index_type_list,
+ sequenced_index>::type index_type_list;
+ typedef typename mpl::push_front<
+ typename super::iterator_type_list,
+ iterator>::type iterator_type_list;
+ typedef typename mpl::push_front<
+ typename super::const_iterator_type_list,
+ const_iterator>::type const_iterator_type_list;
+ typedef typename super::copy_map_type copy_map_type;
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+ typedef typename super::index_saver_type index_saver_type;
+ typedef typename super::index_loader_type index_loader_type;
+#endif
+
+private:
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+#if BOOST_WORKAROUND(BOOST_MSVC,<1300)
+ typedef safe_ctr_proxy_impl<
+ bidir_node_iterator<node_type>,
+ sequenced_index> safe_super;
+#else
+ typedef safe_mode::safe_container<
+ sequenced_index> safe_super;
+#endif
+#endif
+
+ typedef typename call_traits<value_type>::param_type value_param_type;
+
+public:
+
+ /* construct/copy/destroy
+ * Default and copy ctors are in the protected section as indices are
+ * not supposed to be created on their own. No range ctor either.
+ */
+
+ sequenced_index<SuperMeta,TagList>& operator=(
+ const sequenced_index<SuperMeta,TagList>& x)
+ {
+ this->final()=x.final();
+ return *this;
+ }
+
+ template <class InputIterator>
+ void assign(InputIterator first,InputIterator last)
+ {
+ BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+ clear();
+ for(;first!=last;++first)push_back(*first);
+ }
+
+ void assign(size_type n,value_param_type value)
+ {
+ BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+ clear();
+ for(size_type i=0;i<n;++i)push_back(value);
+ }
+
+ allocator_type get_allocator()const
+ {
+ return this->final().get_allocator();
+ }
+
+ /* iterators */
+
+ iterator begin()
+ {return make_iterator(node_type::from_impl(header()->next()));}
+ const_iterator begin()const
+ {return make_iterator(node_type::from_impl(header()->next()));}
+ iterator end(){return make_iterator(header());}
+ const_iterator end()const{return make_iterator(header());}
+ reverse_iterator rbegin(){return make_reverse_iterator(end());}
+ const_reverse_iterator rbegin()const{return make_reverse_iterator(end());}
+ reverse_iterator rend(){return make_reverse_iterator(begin());}
+ const_reverse_iterator rend()const{return make_reverse_iterator(begin());}
+
+ /* capacity */
+
+ bool empty()const{return this->final_empty_();}
+ size_type size()const{return this->final_size_();}
+ size_type max_size()const{return this->final_max_size_();}
+
+ void resize(size_type n,value_param_type x=value_type())
+ {
+ BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+ if(n>size())insert(end(),n-size(),x);
+ else if(n<size()){
+ iterator it=begin();
+ std::advance(it,n);
+ erase(it,end());
+ }
+ }
+
+ /* access: no non-const versions provided as sequenced_index
+ * handles const elements.
+ */
+
+ const_reference front()const{return *begin();}
+ const_reference back()const{return *--end();}
+
+ /* modifiers */
+
+ std::pair<iterator,bool> push_front(value_param_type x)
+ {return insert(begin(),x);}
+ void pop_front(){erase(begin());}
+ std::pair<iterator,bool> push_back(value_param_type x)
+ {return insert(end(),x);}
+ void pop_back(){erase(--end());}
+
+ std::pair<iterator,bool> insert(iterator position,value_param_type x)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+ BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+ std::pair<final_node_type*,bool> p=this->final_insert_(x);
+ if(p.second&&position.get_node()!=header()){
+ relink(position.get_node(),p.first);
+ }
+ return std::pair<iterator,bool>(make_iterator(p.first),p.second);
+ }
+
+ void insert(iterator position,size_type n,value_param_type x)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+ BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+ for(size_type i=0;i<n;++i)insert(position,x);
+ }
+
+ template<typename InputIterator>
+ void insert(iterator position,InputIterator first,InputIterator last)
+ {
+ BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+ for(;first!=last;++first)insert(position,*first);
+ }
+
+ iterator erase(iterator position)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+ BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+ this->final_erase_(static_cast<final_node_type*>(position++.get_node()));
+ return position;
+ }
+
+ iterator erase(iterator first,iterator last)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(first);
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(last);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(first,*this);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(last,*this);
+ BOOST_MULTI_INDEX_CHECK_VALID_RANGE(first,last);
+ BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+ while(first!=last){
+ first=erase(first);
+ }
+ return first;
+ }
+
+ bool replace(iterator position,value_param_type x)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+ BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+ return this->final_replace_(
+ x,static_cast<final_node_type*>(position.get_node()));
+ }
+
+ template<typename Modifier>
+ bool modify(iterator position,Modifier mod)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+ BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ /* MSVC++ 6.0 optimizer on safe mode code chokes if this
+ * this is not added. Left it for all compilers as it does no
+ * harm.
+ */
+
+ position.detach();
+#endif
+
+ return this->final_modify_(
+ mod,static_cast<final_node_type*>(position.get_node()));
+ }
+
+ void swap(sequenced_index<SuperMeta,TagList>& x)
+ {
+ BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+ this->final_swap_(x.final());
+ }
+
+ void clear()
+ {
+ BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+ this->final_clear_();
+ }
+
+ /* list operations */
+
+ void splice(iterator position,sequenced_index<SuperMeta,TagList>& x)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+ BOOST_MULTI_INDEX_CHECK_DIFFERENT_CONTAINER(*this,x);
+ BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+ iterator first=x.begin(),last=x.end();
+ while(first!=last){
+ if(insert(position,*first).second)first=x.erase(first);
+ else ++first;
+ }
+ }
+
+ void splice(iterator position,sequenced_index<SuperMeta,TagList>& x,iterator i)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(i);
+ BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(i);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(i,x);
+ BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+ if(&x==this){
+ if(position!=i)relink(position.get_node(),i.get_node());
+ }
+ else{
+ if(insert(position,*i).second){
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ /* MSVC++ 6.0 optimizer has a hard time with safe mode, and the following
+ * workaround is needed. Left it for all compilers as it does no
+ * harm.
+ */
+ i.detach();
+ x.erase(x.make_iterator(i.get_node()));
+#else
+ x.erase(i);
+#endif
+
+ }
+ }
+ }
+
+ void splice(
+ iterator position,sequenced_index<SuperMeta,TagList>& x,
+ iterator first,iterator last)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(first);
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(last);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(first,x);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(last,x);
+ BOOST_MULTI_INDEX_CHECK_VALID_RANGE(first,last);
+ BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+ if(&x==this){
+ BOOST_MULTI_INDEX_CHECK_OUTSIDE_RANGE(position,first,last);
+ if(position!=last)relink(
+ position.get_node(),first.get_node(),last.get_node());
+ }
+ else{
+ while(first!=last){
+ if(insert(position,*first).second)first=x.erase(first);
+ else ++first;
+ }
+ }
+ }
+
+ void remove(value_param_type value)
+ {
+ sequenced_index_remove(
+ *this,std::bind2nd(std::equal_to<value_type>(),value));
+ }
+
+ template<typename Predicate>
+ void remove_if(Predicate pred)
+ {
+ sequenced_index_remove(*this,pred);
+ }
+
+ void unique()
+ {
+ sequenced_index_unique(*this,std::equal_to<value_type>());
+ }
+
+ template <class BinaryPredicate>
+ void unique(BinaryPredicate binary_pred)
+ {
+ sequenced_index_unique(*this,binary_pred);
+ }
+
+ void merge(sequenced_index<SuperMeta,TagList>& x)
+ {
+ sequenced_index_merge(*this,x,std::less<value_type>());
+ }
+
+ template <typename Compare>
+ void merge(sequenced_index<SuperMeta,TagList>& x,Compare comp)
+ {
+ sequenced_index_merge(*this,x,comp);
+ }
+
+ void sort()
+ {
+ BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+ sequenced_index_sort(header(),std::less<value_type>());
+ }
+
+ template <typename Compare>
+ void sort(Compare comp)
+ {
+ BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+ sequenced_index_sort(header(),comp);
+ }
+
+ void reverse()
+ {
+ BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+ sequenced_index_node_impl::reverse(header()->impl());
+ }
+
+ /* rearrange operations */
+
+ void relocate(iterator position,iterator i)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(i);
+ BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(i);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(i,*this);
+ BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+ if(position!=i)relink(position.get_node(),i.get_node());
+ }
+
+ void relocate(iterator position,iterator first,iterator last)
+ {
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(first);
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(last);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(first,*this);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(last,*this);
+ BOOST_MULTI_INDEX_CHECK_VALID_RANGE(first,last);
+ BOOST_MULTI_INDEX_CHECK_OUTSIDE_RANGE(position,first,last);
+ BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+ if(position!=last)relink(
+ position.get_node(),first.get_node(),last.get_node());
+ }
+
+ template<typename InputIterator>
+ void rearrange(InputIterator first)
+ {
+ BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+ node_type* pos=header();
+ for(size_type s=size();s--;){
+ const value_type& v=*first++;
+ relink(pos,node_from_value<node_type>(&v));
+ }
+ }
+
+BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS:
+ sequenced_index(const ctor_args_list& args_list,const allocator_type& al):
+ super(args_list.get_tail(),al)
+ {
+ empty_initialize();
+ }
+
+ sequenced_index(const sequenced_index<SuperMeta,TagList>& x):
+ super(x)
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ ,safe_super()
+#endif
+
+ {
+ /* The actual copying takes place in subsequent call to copy_().
+ */
+ }
+
+ ~sequenced_index()
+ {
+ /* the container is guaranteed to be empty by now */
+ }
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ iterator make_iterator(node_type* node){return iterator(node,this);}
+ const_iterator make_iterator(node_type* node)const
+ {return const_iterator(node,const_cast<sequenced_index*>(this));}
+#else
+ iterator make_iterator(node_type* node){return iterator(node);}
+ const_iterator make_iterator(node_type* node)const
+ {return const_iterator(node);}
+#endif
+
+ void copy_(
+ const sequenced_index<SuperMeta,TagList>& x,const copy_map_type& map)
+ {
+ node_type* org=x.header();
+ node_type* cpy=header();
+ do{
+ node_type* next_org=node_type::from_impl(org->next());
+ node_type* next_cpy=map.find(static_cast<final_node_type*>(next_org));
+ cpy->next()=next_cpy->impl();
+ next_cpy->prior()=cpy->impl();
+ org=next_org;
+ cpy=next_cpy;
+ }while(org!=x.header());
+
+ super::copy_(x,map);
+ }
+
+ node_type* insert_(value_param_type v,node_type* x)
+ {
+ node_type* res=static_cast<node_type*>(super::insert_(v,x));
+ if(res==x)link(x);
+ return res;
+ }
+
+ node_type* insert_(value_param_type v,node_type* position,node_type* x)
+ {
+ node_type* res=static_cast<node_type*>(super::insert_(v,position,x));
+ if(res==x)link(x);
+ return res;
+ }
+
+ void erase_(node_type* x)
+ {
+ unlink(x);
+ super::erase_(x);
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ detach_iterators(x);
+#endif
+ }
+
+ void delete_all_nodes_()
+ {
+ for(node_type* x=node_type::from_impl(header()->next());x!=header();){
+ node_type* y=node_type::from_impl(x->next());
+ this->final_delete_node_(static_cast<final_node_type*>(x));
+ x=y;
+ }
+ }
+
+ void clear_()
+ {
+ super::clear_();
+ empty_initialize();
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ safe_super::detach_dereferenceable_iterators();
+#endif
+ }
+
+ void swap_(sequenced_index<SuperMeta,TagList>& x)
+ {
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ safe_super::swap(x);
+#endif
+
+ super::swap_(x);
+ }
+
+ bool replace_(value_param_type v,node_type* x)
+ {
+ return super::replace_(v,x);
+ }
+
+ bool modify_(node_type* x)
+ {
+ BOOST_TRY{
+ if(!super::modify_(x)){
+ unlink(x);
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ detach_iterators(x);
+#endif
+
+ return false;
+ }
+ else return true;
+ }
+ BOOST_CATCH(...){
+ unlink(x);
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ detach_iterators(x);
+#endif
+
+ BOOST_RETHROW;
+ }
+ BOOST_CATCH_END
+ }
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+ /* serialization */
+
+ template<typename Archive>
+ void save_(
+ Archive& ar,const unsigned int version,const index_saver_type& sm)const
+ {
+ sm.save(begin(),end(),ar,version);
+ super::save_(ar,version,sm);
+ }
+
+ template<typename Archive>
+ void load_(
+ Archive& ar,const unsigned int version,const index_loader_type& lm)
+ {
+ lm.load(
+ ::boost::bind(&sequenced_index::rearranger,this,_1,_2),
+ ar,version);
+ super::load_(ar,version,lm);
+ }
+#endif
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)
+ /* invariant stuff */
+
+ bool invariant_()const
+ {
+ if(size()==0||begin()==end()){
+ if(size()!=0||begin()!=end()||
+ header()->next()!=header()->impl()||
+ header()->prior()!=header()->impl())return false;
+ }
+ else{
+ size_type s=0;
+ for(const_iterator it=begin(),it_end=end();it!=it_end;++it,++s){
+ if(it.get_node()->next()->prior()!=it.get_node()->impl())return false;
+ if(it.get_node()->prior()->next()!=it.get_node()->impl())return false;
+ }
+ if(s!=size())return false;
+ }
+
+ return super::invariant_();
+ }
+
+ /* This forwarding function eases things for the boost::mem_fn construct
+ * in BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT. Actually,
+ * final_check_invariant is already an inherited member function of index.
+ */
+ void check_invariant_()const{this->final_check_invariant_();}
+#endif
+
+private:
+ node_type* header()const{return this->final_header();}
+
+ void empty_initialize()
+ {
+ header()->prior()=header()->next()=header()->impl();
+ }
+
+ void link(node_type* x)
+ {
+ sequenced_index_node_impl::link(x->impl(),header()->impl());
+ };
+
+ static void unlink(node_type* x)
+ {
+ sequenced_index_node_impl::unlink(x->impl());
+ }
+
+ static void relink(node_type* position,node_type* x)
+ {
+ sequenced_index_node_impl::relink(position->impl(),x->impl());
+ }
+
+ static void relink(node_type* position,node_type* first,node_type* last)
+ {
+ sequenced_index_node_impl::relink(
+ position->impl(),first->impl(),last->impl());
+ }
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+ void rearranger(node_type* position,node_type *x)
+ {
+ if(!position)position=header();
+ node_type::increment(position);
+ if(position!=x)relink(position,x);
+ }
+#endif
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ void detach_iterators(node_type* x)
+ {
+ iterator it=make_iterator(x);
+ safe_mode::detach_equivalent_iterators(it);
+ }
+#endif
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)&&\
+ BOOST_WORKAROUND(__MWERKS__,<=0x3003)
+#pragma parse_mfunc_templ reset
+#endif
+};
+
+/* comparison */
+
+template<
+ typename SuperMeta1,typename TagList1,
+ typename SuperMeta2,typename TagList2
+>
+bool operator==(
+ const sequenced_index<SuperMeta1,TagList1>& x,
+ const sequenced_index<SuperMeta2,TagList2>& y)
+{
+ return x.size()==y.size()&&std::equal(x.begin(),x.end(),y.begin());
+}
+
+template<
+ typename SuperMeta1,typename TagList1,
+ typename SuperMeta2,typename TagList2
+>
+bool operator<(
+ const sequenced_index<SuperMeta1,TagList1>& x,
+ const sequenced_index<SuperMeta2,TagList2>& y)
+{
+ return std::lexicographical_compare(x.begin(),x.end(),y.begin(),y.end());
+}
+
+template<
+ typename SuperMeta1,typename TagList1,
+ typename SuperMeta2,typename TagList2
+>
+bool operator!=(
+ const sequenced_index<SuperMeta1,TagList1>& x,
+ const sequenced_index<SuperMeta2,TagList2>& y)
+{
+ return !(x==y);
+}
+
+template<
+ typename SuperMeta1,typename TagList1,
+ typename SuperMeta2,typename TagList2
+>
+bool operator>(
+ const sequenced_index<SuperMeta1,TagList1>& x,
+ const sequenced_index<SuperMeta2,TagList2>& y)
+{
+ return y<x;
+}
+
+template<
+ typename SuperMeta1,typename TagList1,
+ typename SuperMeta2,typename TagList2
+>
+bool operator>=(
+ const sequenced_index<SuperMeta1,TagList1>& x,
+ const sequenced_index<SuperMeta2,TagList2>& y)
+{
+ return !(x<y);
+}
+
+template<
+ typename SuperMeta1,typename TagList1,
+ typename SuperMeta2,typename TagList2
+>
+bool operator<=(
+ const sequenced_index<SuperMeta1,TagList1>& x,
+ const sequenced_index<SuperMeta2,TagList2>& y)
+{
+ return !(x>y);
+}
+
+/* specialized algorithms */
+
+template<typename SuperMeta,typename TagList>
+void swap(
+ sequenced_index<SuperMeta,TagList>& x,
+ sequenced_index<SuperMeta,TagList>& y)
+{
+ x.swap(y);
+}
+
+} /* namespace multi_index::detail */
+
+/* sequenced index specifier */
+
+template <typename TagList>
+struct sequenced
+{
+ BOOST_STATIC_ASSERT(detail::is_tag<TagList>::value);
+
+ template<typename Super>
+ struct node_class
+ {
+ typedef detail::sequenced_index_node<Super> type;
+ };
+
+ template<typename SuperMeta>
+ struct index_class
+ {
+ typedef detail::sequenced_index<SuperMeta,typename TagList::type> type;
+ };
+};
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#undef BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT
+
+#endif
diff --git a/boost/boost/multi_index/sequenced_index_fwd.hpp b/boost/boost/multi_index/sequenced_index_fwd.hpp
new file mode 100644
index 00000000000..221a1493f89
--- /dev/null
+++ b/boost/boost/multi_index/sequenced_index_fwd.hpp
@@ -0,0 +1,91 @@
+/* Copyright 2003-2005 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_SEQUENCED_INDEX_FWD_HPP
+#define BOOST_MULTI_INDEX_SEQUENCED_INDEX_FWD_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/multi_index/tag.hpp>
+
+namespace boost{
+
+namespace multi_index{
+
+namespace detail{
+
+template<typename SuperMeta,typename TagList>
+class sequenced_index;
+
+template<
+ typename SuperMeta1,typename TagList1,
+ typename SuperMeta2,typename TagList2
+>
+bool operator==(
+ const sequenced_index<SuperMeta1,TagList1>& x,
+ const sequenced_index<SuperMeta2,TagList2>& y);
+
+template<
+ typename SuperMeta1,typename TagList1,
+ typename SuperMeta2,typename TagList2
+>
+bool operator<(
+ const sequenced_index<SuperMeta1,TagList1>& x,
+ const sequenced_index<SuperMeta2,TagList2>& y);
+
+template<
+ typename SuperMeta1,typename TagList1,
+ typename SuperMeta2,typename TagList2
+>
+bool operator!=(
+ const sequenced_index<SuperMeta1,TagList1>& x,
+ const sequenced_index<SuperMeta2,TagList2>& y);
+
+template<
+ typename SuperMeta1,typename TagList1,
+ typename SuperMeta2,typename TagList2
+>
+bool operator>(
+ const sequenced_index<SuperMeta1,TagList1>& x,
+ const sequenced_index<SuperMeta2,TagList2>& y);
+
+template<
+ typename SuperMeta1,typename TagList1,
+ typename SuperMeta2,typename TagList2
+>
+bool operator>=(
+ const sequenced_index<SuperMeta1,TagList1>& x,
+ const sequenced_index<SuperMeta2,TagList2>& y);
+
+template<
+ typename SuperMeta1,typename TagList1,
+ typename SuperMeta2,typename TagList2
+>
+bool operator<=(
+ const sequenced_index<SuperMeta1,TagList1>& x,
+ const sequenced_index<SuperMeta2,TagList2>& y);
+
+template<typename SuperMeta,typename TagList>
+void swap(
+ sequenced_index<SuperMeta,TagList>& x,
+ sequenced_index<SuperMeta,TagList>& y);
+
+} /* namespace multi_index::detail */
+
+/* index specifiers */
+
+template <typename TagList=tag<> >
+struct sequenced;
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#endif
diff --git a/boost/boost/multi_index/tag.hpp b/boost/boost/multi_index/tag.hpp
new file mode 100644
index 00000000000..57fb987dea5
--- /dev/null
+++ b/boost/boost/multi_index/tag.hpp
@@ -0,0 +1,92 @@
+/* Copyright 2003-2005 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_TAG_HPP
+#define BOOST_MULTI_INDEX_TAG_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/multi_index/detail/no_duplicate_tags.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/transform.hpp>
+#include <boost/mpl/vector.hpp>
+#include <boost/preprocessor/facilities/intercept.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_base_and_derived.hpp>
+
+/* A wrapper of mpl::vector used to hide MPL from the user.
+ * tag contains types used as tag names for indices in get() functions.
+ */
+
+/* This user_definable macro limits the number of elements of a tag;
+ * useful for shortening resulting symbol names (MSVC++ 6.0, for instance,
+ * has problems coping with very long symbol names.)
+ */
+
+#if !defined(BOOST_MULTI_INDEX_LIMIT_TAG_SIZE)
+#if defined(BOOST_MSVC)&&(BOOST_MSVC<1300)
+#define BOOST_MULTI_INDEX_LIMIT_TAG_SIZE 3
+#else
+#define BOOST_MULTI_INDEX_LIMIT_TAG_SIZE BOOST_MPL_LIMIT_VECTOR_SIZE
+#endif
+#endif
+
+#if BOOST_MULTI_INDEX_LIMIT_TAG_SIZE<BOOST_MPL_LIMIT_VECTOR_SIZE
+#define BOOST_MULTI_INDEX_TAG_SIZE BOOST_MULTI_INDEX_LIMIT_TAG_SIZE
+#else
+#define BOOST_MULTI_INDEX_TAG_SIZE BOOST_MPL_LIMIT_VECTOR_SIZE
+#endif
+
+namespace boost{
+
+namespace multi_index{
+
+namespace detail{
+
+struct tag_marker{};
+
+template<typename T>
+struct is_tag
+{
+ BOOST_STATIC_CONSTANT(bool,value=(is_base_and_derived<tag_marker,T>::value));
+};
+
+} /* namespace multi_index::detail */
+
+template<
+ BOOST_PP_ENUM_BINARY_PARAMS(
+ BOOST_MULTI_INDEX_TAG_SIZE,
+ typename T,
+ =mpl::na BOOST_PP_INTERCEPT)
+>
+struct tag:private detail::tag_marker
+{
+ /* The mpl::transform pass produces shorter symbols (without
+ * trailing mpl::na's.)
+ */
+
+ typedef typename mpl::transform<
+ mpl::vector<BOOST_PP_ENUM_PARAMS(BOOST_MULTI_INDEX_TAG_SIZE,T)>,
+ mpl::identity<mpl::_1>
+ >::type type;
+
+ BOOST_STATIC_ASSERT(detail::no_duplicate_tags<type>::value);
+};
+
+} /* namespace multi_index */
+
+} /* namespace boost */
+
+#undef BOOST_MULTI_INDEX_TAG_SIZE
+
+#endif
diff --git a/boost/boost/multi_index_container.hpp b/boost/boost/multi_index_container.hpp
new file mode 100644
index 00000000000..9b8350d7f5c
--- /dev/null
+++ b/boost/boost/multi_index_container.hpp
@@ -0,0 +1,1027 @@
+/* Multiply indexed container.
+ *
+ * Copyright 2003-2007 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_HPP
+#define BOOST_MULTI_INDEX_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <algorithm>
+#include <boost/detail/allocator_utilities.hpp>
+#include <boost/detail/no_exceptions_support.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/mpl/at.hpp>
+#include <boost/mpl/contains.hpp>
+#include <boost/mpl/find_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/size.hpp>
+#include <boost/mpl/deref.hpp>
+#include <boost/multi_index_container_fwd.hpp>
+#include <boost/multi_index/detail/access_specifier.hpp>
+#include <boost/multi_index/detail/base_type.hpp>
+#include <boost/multi_index/detail/converter.hpp>
+#include <boost/multi_index/detail/def_ctor_tuple_cons.hpp>
+#include <boost/multi_index/detail/header_holder.hpp>
+#include <boost/multi_index/detail/has_tag.hpp>
+#include <boost/multi_index/detail/no_duplicate_tags.hpp>
+#include <boost/multi_index/detail/prevent_eti.hpp>
+#include <boost/multi_index/detail/safe_mode.hpp>
+#include <boost/multi_index/detail/scope_guard.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/utility/base_from_member.hpp>
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+#include <boost/multi_index/detail/archive_constructed.hpp>
+#include <boost/serialization/nvp.hpp>
+#include <boost/serialization/split_member.hpp>
+#include <boost/throw_exception.hpp>
+#endif
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)
+#include <boost/multi_index/detail/invariant_assert.hpp>
+#define BOOST_MULTI_INDEX_CHECK_INVARIANT \
+ detail::scope_guard BOOST_JOIN(check_invariant_,__LINE__)= \
+ detail::make_obj_guard(*this,&multi_index_container::check_invariant_); \
+ BOOST_JOIN(check_invariant_,__LINE__).touch();
+#else
+#define BOOST_MULTI_INDEX_CHECK_INVARIANT
+#endif
+
+namespace boost{
+
+namespace multi_index{
+
+template<typename Value,typename IndexSpecifierList,typename Allocator>
+class multi_index_container:
+ private ::boost::base_from_member<
+ typename boost::detail::allocator::rebind_to<
+ Allocator,
+ typename detail::multi_index_node_type<
+ Value,IndexSpecifierList,Allocator>::type
+ >::type>,
+ BOOST_MULTI_INDEX_PRIVATE_IF_MEMBER_TEMPLATE_FRIENDS detail::header_holder<
+ typename detail::multi_index_node_type<
+ Value,IndexSpecifierList,Allocator>::type,
+ multi_index_container<Value,IndexSpecifierList,Allocator> >,
+ public detail::multi_index_base_type<
+ Value,IndexSpecifierList,Allocator>::type
+{
+#if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)&&\
+ BOOST_WORKAROUND(__MWERKS__,<=0x3003)
+/* The "ISO C++ Template Parser" option in CW8.3 has a problem with the
+ * lifetime of const references bound to temporaries --precisely what
+ * scopeguards are.
+ */
+
+#pragma parse_mfunc_templ off
+#endif
+
+private:
+#if !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS)
+ template <typename,typename,typename> friend class detail::index_base;
+ template <typename,typename> friend class detail::header_holder;
+ template <typename,typename> friend class detail::converter;
+#endif
+
+ typedef typename detail::multi_index_base_type<
+ Value,IndexSpecifierList,Allocator>::type super;
+ typedef ::boost::base_from_member<
+ typename boost::detail::allocator::rebind_to<
+ Allocator,
+ typename super::node_type
+ >::type> bfm_allocator;
+ typedef detail::header_holder<
+ typename super::node_type,
+ multi_index_container> bfm_header;
+
+#if BOOST_WORKAROUND(BOOST_MSVC,<1300)
+ /* see definition of index_type_list below */
+ typedef typename super::index_type_list super_index_type_list;
+#endif
+
+public:
+ /* All types are inherited from super, a few are explicitly
+ * brought forward here to save us some typename's.
+ */
+
+#if defined(BOOST_MSVC)
+ typedef
+ detail::default_constructible_tuple_cons<
+ typename super::ctor_args_list> ctor_args_list;
+#else
+ typedef typename super::ctor_args_list ctor_args_list;
+#endif
+
+ typedef IndexSpecifierList index_specifier_type_list;
+
+#if BOOST_WORKAROUND(BOOST_MSVC,<1300)
+ /* MSVC++ 6.0 chokes on moderately long index lists (around 6 indices
+ * or more), with errors ranging from corrupt exes to duplicate
+ * comdats. The following type hiding hack alleviates this condition;
+ * best results combined with type hiding of the indexed_by construct
+ * itself, as explained in the "Compiler specifics" section of
+ * the documentation.
+ */
+
+ struct index_type_list:super_index_type_list
+ {
+ typedef index_type_list type;
+ typedef typename super_index_type_list::back back;
+ typedef mpl::v_iter<type,0> begin;
+ typedef mpl::v_iter<
+ type,
+ mpl::size<super_index_type_list>::value> end;
+ };
+#else
+ typedef typename super::index_type_list index_type_list;
+#endif
+
+ typedef typename super::iterator_type_list iterator_type_list;
+ typedef typename super::const_iterator_type_list const_iterator_type_list;
+ typedef typename super::value_type value_type;
+ typedef typename super::final_allocator_type allocator_type;
+ typedef typename super::iterator iterator;
+ typedef typename super::const_iterator const_iterator;
+
+ BOOST_STATIC_ASSERT(
+ detail::no_duplicate_tags_in_index_list<index_type_list>::value);
+
+ /* global project() needs to see this publicly */
+
+ typedef typename super::node_type node_type;
+
+ /* construct/copy/destroy */
+
+ explicit multi_index_container(
+
+#if BOOST_WORKAROUND(__IBMCPP__,<=600)
+ /* VisualAge seems to have an ETI issue with the default values
+ * for arguments args_list and al.
+ */
+
+ const ctor_args_list& args_list=
+ typename mpl::identity<multi_index_container>::type::
+ ctor_args_list(),
+ const allocator_type& al=
+ typename mpl::identity<multi_index_container>::type::
+ allocator_type()):
+#else
+ const ctor_args_list& args_list=ctor_args_list(),
+ const allocator_type& al=allocator_type()):
+#endif
+
+ bfm_allocator(al),
+ super(args_list,bfm_allocator::member),
+ node_count(0)
+ {
+ BOOST_MULTI_INDEX_CHECK_INVARIANT;
+ }
+
+ template<typename InputIterator>
+ multi_index_container(
+ InputIterator first,InputIterator last,
+
+#if BOOST_WORKAROUND(__IBMCPP__,<=600)
+ /* VisualAge seems to have an ETI issue with the default values
+ * for arguments args_list and al.
+ */
+
+ const ctor_args_list& args_list=
+ typename mpl::identity<multi_index_container>::type::
+ ctor_args_list(),
+ const allocator_type& al=
+ typename mpl::identity<multi_index_container>::type::
+ allocator_type()):
+#else
+ const ctor_args_list& args_list=ctor_args_list(),
+ const allocator_type& al=allocator_type()):
+#endif
+
+ bfm_allocator(al),
+ super(args_list,bfm_allocator::member),
+ node_count(0)
+ {
+ BOOST_MULTI_INDEX_CHECK_INVARIANT;
+ BOOST_TRY{
+ iterator hint=super::end();
+ for(;first!=last;++first){
+ hint=super::make_iterator(insert_(*first,hint.get_node()).first);
+ }
+ }
+ BOOST_CATCH(...){
+ clear_();
+ BOOST_RETHROW;
+ }
+ BOOST_CATCH_END
+ }
+
+ multi_index_container(
+ const multi_index_container<Value,IndexSpecifierList,Allocator>& x):
+ bfm_allocator(x.bfm_allocator::member),
+ bfm_header(),
+ super(x),
+ node_count(0)
+ {
+ copy_map_type map(bfm_allocator::member,x.size(),x.header(),header());
+ for(const_iterator it=x.begin(),it_end=x.end();it!=it_end;++it){
+ map.clone(it.get_node());
+ }
+ super::copy_(x,map);
+ map.release();
+ node_count=x.size();
+
+ /* Not until this point are the indices required to be consistent,
+ * hence the position of the invariant checker.
+ */
+
+ BOOST_MULTI_INDEX_CHECK_INVARIANT;
+ }
+
+ ~multi_index_container()
+ {
+ delete_all_nodes_();
+ }
+
+ multi_index_container<Value,IndexSpecifierList,Allocator>& operator=(
+ const multi_index_container<Value,IndexSpecifierList,Allocator>& x)
+ {
+ BOOST_MULTI_INDEX_CHECK_INVARIANT;
+ multi_index_container<Value,IndexSpecifierList,Allocator> tmp(x);
+ this->swap(tmp);
+ return *this;
+ }
+
+ allocator_type get_allocator()const
+ {
+ return allocator_type(bfm_allocator::member);
+ }
+
+ /* retrieval of indices by number */
+
+#if !defined(BOOST_NO_MEMBER_TEMPLATES)
+ template<int N>
+ struct nth_index
+ {
+ BOOST_STATIC_ASSERT(N>=0&&N<mpl::size<index_type_list>::type::value);
+ typedef typename mpl::at_c<index_type_list,N>::type type;
+ };
+
+ template<int N>
+ typename nth_index<N>::type& get(BOOST_EXPLICIT_TEMPLATE_NON_TYPE(int,N))
+ {
+ BOOST_STATIC_ASSERT(N>=0&&N<mpl::size<index_type_list>::type::value);
+ return *this;
+ }
+
+ template<int N>
+ const typename nth_index<N>::type& get(
+ BOOST_EXPLICIT_TEMPLATE_NON_TYPE(int,N))const
+ {
+ BOOST_STATIC_ASSERT(N>=0&&N<mpl::size<index_type_list>::type::value);
+ return *this;
+ }
+#endif
+
+ /* retrieval of indices by tag */
+
+#if !defined(BOOST_NO_MEMBER_TEMPLATES)
+ template<typename Tag>
+ struct index
+ {
+ typedef typename mpl::find_if<
+ index_type_list,
+ detail::has_tag<Tag>
+ >::type iter;
+
+ BOOST_STATIC_CONSTANT(
+ bool,index_found=!(is_same<iter,typename mpl::end<index_type_list>::type >::value));
+ BOOST_STATIC_ASSERT(index_found);
+
+ typedef typename mpl::deref<iter>::type type;
+ };
+
+ template<typename Tag>
+ typename index<Tag>::type& get(BOOST_EXPLICIT_TEMPLATE_TYPE(Tag))
+ {
+ return *this;
+ }
+
+ template<typename Tag>
+ const typename index<Tag>::type& get(
+ BOOST_EXPLICIT_TEMPLATE_TYPE(Tag))const
+ {
+ return *this;
+ }
+#endif
+
+ /* projection of iterators by number */
+
+#if !defined(BOOST_NO_MEMBER_TEMPLATES)
+ template<int N>
+ struct nth_index_iterator
+ {
+ typedef typename nth_index<N>::type::iterator type;
+ };
+
+ template<int N>
+ struct nth_index_const_iterator
+ {
+ typedef typename nth_index<N>::type::const_iterator type;
+ };
+
+ template<int N,typename IteratorType>
+ typename nth_index_iterator<N>::type project(
+ IteratorType it
+ BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(int,N))
+ {
+ typedef typename nth_index<N>::type index;
+
+ BOOST_STATIC_ASSERT(
+ (mpl::contains<iterator_type_list,IteratorType>::value));
+
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(it);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(
+ it,static_cast<typename IteratorType::container_type&>(*this));
+
+ return index::make_iterator(static_cast<node_type*>(it.get_node()));
+ }
+
+ template<int N,typename IteratorType>
+ typename nth_index_const_iterator<N>::type project(
+ IteratorType it
+ BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(int,N))const
+ {
+ typedef typename nth_index<N>::type index;
+
+ BOOST_STATIC_ASSERT((
+ mpl::contains<iterator_type_list,IteratorType>::value||
+ mpl::contains<const_iterator_type_list,IteratorType>::value));
+
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(it);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(
+ it,static_cast<const typename IteratorType::container_type&>(*this));
+ return index::make_iterator(static_cast<node_type*>(it.get_node()));
+ }
+#endif
+
+ /* projection of iterators by tag */
+
+#if !defined(BOOST_NO_MEMBER_TEMPLATES)
+ template<typename Tag>
+ struct index_iterator
+ {
+ typedef typename index<Tag>::type::iterator type;
+ };
+
+ template<typename Tag>
+ struct index_const_iterator
+ {
+ typedef typename index<Tag>::type::const_iterator type;
+ };
+
+ template<typename Tag,typename IteratorType>
+ typename index_iterator<Tag>::type project(
+ IteratorType it
+ BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(Tag))
+ {
+ typedef typename index<Tag>::type index;
+
+ BOOST_STATIC_ASSERT(
+ (mpl::contains<iterator_type_list,IteratorType>::value));
+
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(it);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(
+ it,static_cast<typename IteratorType::container_type&>(*this));
+ return index::make_iterator(static_cast<node_type*>(it.get_node()));
+ }
+
+ template<typename Tag,typename IteratorType>
+ typename index_const_iterator<Tag>::type project(
+ IteratorType it
+ BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(Tag))const
+ {
+ typedef typename index<Tag>::type index;
+
+ BOOST_STATIC_ASSERT((
+ mpl::contains<iterator_type_list,IteratorType>::value||
+ mpl::contains<const_iterator_type_list,IteratorType>::value));
+
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(it);
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(
+ it,static_cast<const typename IteratorType::container_type&>(*this));
+ return index::make_iterator(static_cast<node_type*>(it.get_node()));
+ }
+#endif
+
+BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS:
+ typedef typename super::copy_map_type copy_map_type;
+
+ node_type* header()const
+ {
+ return bfm_header::member;
+ }
+
+ node_type* allocate_node()
+ {
+ return bfm_allocator::member.allocate(1);
+ }
+
+ void deallocate_node(node_type* x)
+ {
+ bfm_allocator::member.deallocate(x,1);
+ }
+
+ bool empty_()const
+ {
+ return node_count==0;
+ }
+
+ std::size_t size_()const
+ {
+ return node_count;
+ }
+
+ std::size_t max_size_()const
+ {
+ return static_cast<std::size_t >(-1);
+ }
+
+ std::pair<node_type*,bool> insert_(const Value& v)
+ {
+ node_type* x=allocate_node();
+ BOOST_TRY{
+ node_type* res=super::insert_(v,x);
+ if(res==x){
+ ++node_count;
+ return std::pair<node_type*,bool>(res,true);
+ }
+ else{
+ deallocate_node(x);
+ return std::pair<node_type*,bool>(res,false);
+ }
+ }
+ BOOST_CATCH(...){
+ deallocate_node(x);
+ BOOST_RETHROW;
+ }
+ BOOST_CATCH_END
+ }
+
+ std::pair<node_type*,bool> insert_(const Value& v,node_type* position)
+ {
+ node_type* x=allocate_node();
+ BOOST_TRY{
+ node_type* res=super::insert_(v,position,x);
+ if(res==x){
+ ++node_count;
+ return std::pair<node_type*,bool>(res,true);
+ }
+ else{
+ deallocate_node(x);
+ return std::pair<node_type*,bool>(res,false);
+ }
+ }
+ BOOST_CATCH(...){
+ deallocate_node(x);
+ BOOST_RETHROW;
+ }
+ BOOST_CATCH_END
+ }
+
+ void erase_(node_type* x)
+ {
+ super::erase_(x);
+ deallocate_node(x);
+ --node_count;
+ }
+
+ void delete_node_(node_type* x)
+ {
+ super::delete_node_(x);
+ deallocate_node(x);
+ }
+
+ void delete_all_nodes_()
+ {
+ super::delete_all_nodes_();
+ }
+
+ void clear_()
+ {
+ delete_all_nodes_();
+ super::clear_();
+ node_count=0;
+ }
+
+ void swap_(multi_index_container<Value,IndexSpecifierList,Allocator>& x)
+ {
+ std::swap(bfm_header::member,x.bfm_header::member);
+ super::swap_(x);
+ std::swap(node_count,x.node_count);
+ }
+
+ bool replace_(const Value& k,node_type* x)
+ {
+ return super::replace_(k,x);
+ }
+
+ template<typename Modifier>
+ bool modify_(Modifier mod,node_type* x)
+ {
+ mod(const_cast<value_type&>(x->value()));
+
+ BOOST_TRY{
+ if(!super::modify_(x)){
+ deallocate_node(x);
+ --node_count;
+ return false;
+ }
+ else return true;
+ }
+ BOOST_CATCH(...){
+ deallocate_node(x);
+ --node_count;
+ BOOST_RETHROW;
+ }
+ BOOST_CATCH_END
+ }
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+ /* serialization */
+
+ friend class boost::serialization::access;
+
+ BOOST_SERIALIZATION_SPLIT_MEMBER()
+
+ typedef typename super::index_saver_type index_saver_type;
+ typedef typename super::index_loader_type index_loader_type;
+
+ template<class Archive>
+ void save(Archive& ar,const unsigned int version)const
+ {
+ const std::size_t s=size_();
+ ar<<serialization::make_nvp("count",s);
+ index_saver_type sm(bfm_allocator::member,s);
+
+ for(iterator it=super::begin(),it_end=super::end();it!=it_end;++it){
+ ar<<serialization::make_nvp("item",*it);
+ sm.add(it.get_node(),ar,version);
+ }
+ sm.add_track(header(),ar,version);
+
+ super::save_(ar,version,sm);
+ }
+
+ template<class Archive>
+ void load(Archive& ar,const unsigned int version)
+ {
+ BOOST_MULTI_INDEX_CHECK_INVARIANT;
+
+ clear_();
+
+ std::size_t s;
+ ar>>serialization::make_nvp("count",s);
+ index_loader_type lm(bfm_allocator::member,s);
+
+ for(std::size_t n=0;n<s;++n){
+ detail::archive_constructed<Value> value("item",ar,version);
+ std::pair<node_type*,bool> p=insert_(
+ value.get(),super::end().get_node());
+ if(!p.second)throw_exception(
+ archive::archive_exception(
+ archive::archive_exception::other_exception));
+ ar.reset_object_address(&p.first->value(),&value.get());
+ lm.add(p.first,ar,version);
+ }
+ lm.add_track(header(),ar,version);
+
+ super::load_(ar,version,lm);
+ }
+#endif
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)
+ /* invariant stuff */
+
+ bool invariant_()const
+ {
+ return super::invariant_();
+ }
+
+ void check_invariant_()const
+ {
+ BOOST_MULTI_INDEX_INVARIANT_ASSERT(invariant_());
+ }
+#endif
+
+private:
+ std::size_t node_count;
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)&&\
+ BOOST_WORKAROUND(__MWERKS__,<=0x3003)
+#pragma parse_mfunc_templ reset
+#endif
+};
+
+/* retrieval of indices by number */
+
+template<typename MultiIndexContainer,int N>
+struct nth_index
+{
+ BOOST_STATIC_CONSTANT(
+ int,
+ M=mpl::size<typename MultiIndexContainer::index_type_list>::type::value);
+ BOOST_STATIC_ASSERT(N>=0&&N<M);
+ typedef typename mpl::at_c<
+ typename MultiIndexContainer::index_type_list,N>::type type;
+};
+
+template<int N,typename Value,typename IndexSpecifierList,typename Allocator>
+typename nth_index<
+ multi_index_container<Value,IndexSpecifierList,Allocator>,N>::type&
+get(
+ multi_index_container<Value,IndexSpecifierList,Allocator>& m
+ BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(int,N))
+{
+ typedef multi_index_container<
+ Value,IndexSpecifierList,Allocator> multi_index_type;
+ typedef typename nth_index<
+ multi_index_container<
+ Value,IndexSpecifierList,Allocator>,
+ N
+ >::type index;
+
+ BOOST_STATIC_ASSERT(N>=0&&
+ N<
+ mpl::size<
+ BOOST_DEDUCED_TYPENAME multi_index_type::index_type_list
+ >::type::value);
+
+ return detail::converter<multi_index_type,index>::index(m);
+}
+
+template<int N,typename Value,typename IndexSpecifierList,typename Allocator>
+const typename nth_index<
+ multi_index_container<Value,IndexSpecifierList,Allocator>,N>::type&
+get(
+ const multi_index_container<Value,IndexSpecifierList,Allocator>& m
+ BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(int,N))
+{
+ typedef multi_index_container<
+ Value,IndexSpecifierList,Allocator> multi_index_type;
+ typedef typename nth_index<
+ multi_index_container<
+ Value,IndexSpecifierList,Allocator>,
+ N
+ >::type index;
+
+ BOOST_STATIC_ASSERT(N>=0&&
+ N<
+ mpl::size<
+ BOOST_DEDUCED_TYPENAME multi_index_type::index_type_list
+ >::type::value);
+
+ return detail::converter<multi_index_type,index>::index(m);
+}
+
+/* retrieval of indices by tag */
+
+template<typename MultiIndexContainer,typename Tag>
+struct index
+{
+ typedef typename MultiIndexContainer::index_type_list index_type_list;
+
+ typedef typename mpl::find_if<
+ index_type_list,
+ detail::has_tag<Tag>
+ >::type iter;
+
+ BOOST_STATIC_CONSTANT(
+ bool,index_found=!(is_same<iter,typename mpl::end<index_type_list>::type >::value));
+ BOOST_STATIC_ASSERT(index_found);
+
+ typedef typename mpl::deref<iter>::type type;
+};
+
+template<
+ typename Tag,typename Value,typename IndexSpecifierList,typename Allocator
+>
+typename ::boost::multi_index::index<
+ multi_index_container<Value,IndexSpecifierList,Allocator>,Tag>::type&
+get(
+ multi_index_container<Value,IndexSpecifierList,Allocator>& m
+ BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(Tag))
+{
+ typedef multi_index_container<
+ Value,IndexSpecifierList,Allocator> multi_index_type;
+ typedef typename ::boost::multi_index::index<
+ multi_index_container<
+ Value,IndexSpecifierList,Allocator>,
+ Tag
+ >::type index;
+
+ return detail::converter<multi_index_type,index>::index(m);
+}
+
+template<
+ typename Tag,typename Value,typename IndexSpecifierList,typename Allocator
+>
+const typename ::boost::multi_index::index<
+ multi_index_container<Value,IndexSpecifierList,Allocator>,Tag>::type&
+get(
+ const multi_index_container<Value,IndexSpecifierList,Allocator>& m
+ BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(Tag))
+{
+ typedef multi_index_container<
+ Value,IndexSpecifierList,Allocator> multi_index_type;
+ typedef typename ::boost::multi_index::index<
+ multi_index_container<
+ Value,IndexSpecifierList,Allocator>,
+ Tag
+ >::type index;
+
+ return detail::converter<multi_index_type,index>::index(m);
+}
+
+/* projection of iterators by number */
+
+template<typename MultiIndexContainer,int N>
+struct nth_index_iterator
+{
+ typedef typename detail::prevent_eti<
+ nth_index<MultiIndexContainer,N>,
+ typename nth_index<MultiIndexContainer,N>::type>::type::iterator type;
+};
+
+template<typename MultiIndexContainer,int N>
+struct nth_index_const_iterator
+{
+ typedef typename detail::prevent_eti<
+ nth_index<MultiIndexContainer,N>,
+ typename nth_index<MultiIndexContainer,N>::type
+ >::type::const_iterator type;
+};
+
+template<
+ int N,typename IteratorType,
+ typename Value,typename IndexSpecifierList,typename Allocator>
+typename nth_index_iterator<
+ multi_index_container<Value,IndexSpecifierList,Allocator>,N>::type
+project(
+ multi_index_container<Value,IndexSpecifierList,Allocator>& m,
+ IteratorType it
+ BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(int,N))
+{
+ typedef multi_index_container<
+ Value,IndexSpecifierList,Allocator> multi_index_type;
+ typedef typename nth_index<multi_index_type,N>::type index;
+
+#if !defined(BOOST_MSVC)||!(BOOST_MSVC<1310) /* ain't work in MSVC++ 6.0/7.0 */
+ BOOST_STATIC_ASSERT((
+ mpl::contains<
+ BOOST_DEDUCED_TYPENAME multi_index_type::iterator_type_list,
+ IteratorType>::value));
+#endif
+
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(it);
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ typedef detail::converter<
+ multi_index_type,
+ BOOST_DEDUCED_TYPENAME IteratorType::container_type> converter;
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(it,converter::index(m));
+#endif
+
+ return detail::converter<multi_index_type,index>::iterator(
+ m,static_cast<typename multi_index_type::node_type*>(it.get_node()));
+}
+
+template<
+ int N,typename IteratorType,
+ typename Value,typename IndexSpecifierList,typename Allocator>
+typename nth_index_const_iterator<
+ multi_index_container<Value,IndexSpecifierList,Allocator>,N>::type
+project(
+ const multi_index_container<Value,IndexSpecifierList,Allocator>& m,
+ IteratorType it
+ BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(int,N))
+{
+ typedef multi_index_container<
+ Value,IndexSpecifierList,Allocator> multi_index_type;
+ typedef typename nth_index<multi_index_type,N>::type index;
+
+#if !defined(BOOST_MSVC)||!(BOOST_MSVC<1310) /* ain't work in MSVC++ 6.0/7.0 */
+ BOOST_STATIC_ASSERT((
+ mpl::contains<
+ BOOST_DEDUCED_TYPENAME multi_index_type::iterator_type_list,
+ IteratorType>::value||
+ mpl::contains<
+ BOOST_DEDUCED_TYPENAME multi_index_type::const_iterator_type_list,
+ IteratorType>::value));
+#endif
+
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(it);
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ typedef detail::converter<
+ multi_index_type,
+ BOOST_DEDUCED_TYPENAME IteratorType::container_type> converter;
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(it,converter::index(m));
+#endif
+
+ return detail::converter<multi_index_type,index>::const_iterator(
+ m,static_cast<typename multi_index_type::node_type*>(it.get_node()));
+}
+
+/* projection of iterators by tag */
+
+template<typename MultiIndexContainer,typename Tag>
+struct index_iterator
+{
+ typedef typename ::boost::multi_index::index<
+ MultiIndexContainer,Tag>::type::iterator type;
+};
+
+template<typename MultiIndexContainer,typename Tag>
+struct index_const_iterator
+{
+ typedef typename ::boost::multi_index::index<
+ MultiIndexContainer,Tag>::type::const_iterator type;
+};
+
+template<
+ typename Tag,typename IteratorType,
+ typename Value,typename IndexSpecifierList,typename Allocator>
+typename index_iterator<
+ multi_index_container<Value,IndexSpecifierList,Allocator>,Tag>::type
+project(
+ multi_index_container<Value,IndexSpecifierList,Allocator>& m,
+ IteratorType it
+ BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(Tag))
+{
+ typedef multi_index_container<
+ Value,IndexSpecifierList,Allocator> multi_index_type;
+ typedef typename ::boost::multi_index::index<
+ multi_index_type,Tag>::type index;
+
+#if !defined(BOOST_MSVC)||!(BOOST_MSVC<1310) /* ain't work in MSVC++ 6.0/7.0 */
+ BOOST_STATIC_ASSERT((
+ mpl::contains<
+ BOOST_DEDUCED_TYPENAME multi_index_type::iterator_type_list,
+ IteratorType>::value));
+#endif
+
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(it);
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ typedef detail::converter<
+ multi_index_type,
+ BOOST_DEDUCED_TYPENAME IteratorType::container_type> converter;
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(it,converter::index(m));
+#endif
+
+ return detail::converter<multi_index_type,index>::iterator(
+ m,static_cast<typename multi_index_type::node_type*>(it.get_node()));
+}
+
+template<
+ typename Tag,typename IteratorType,
+ typename Value,typename IndexSpecifierList,typename Allocator>
+typename index_const_iterator<
+ multi_index_container<Value,IndexSpecifierList,Allocator>,Tag>::type
+project(
+ const multi_index_container<Value,IndexSpecifierList,Allocator>& m,
+ IteratorType it
+ BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(Tag))
+{
+ typedef multi_index_container<
+ Value,IndexSpecifierList,Allocator> multi_index_type;
+ typedef typename ::boost::multi_index::index<
+ multi_index_type,Tag>::type index;
+
+#if !defined(BOOST_MSVC)||!(BOOST_MSVC<1310) /* ain't work in MSVC++ 6.0/7.0 */
+ BOOST_STATIC_ASSERT((
+ mpl::contains<
+ BOOST_DEDUCED_TYPENAME multi_index_type::iterator_type_list,
+ IteratorType>::value||
+ mpl::contains<
+ BOOST_DEDUCED_TYPENAME multi_index_type::const_iterator_type_list,
+ IteratorType>::value));
+#endif
+
+ BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(it);
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+ typedef detail::converter<
+ multi_index_type,
+ BOOST_DEDUCED_TYPENAME IteratorType::container_type> converter;
+ BOOST_MULTI_INDEX_CHECK_IS_OWNER(it,converter::index(m));
+#endif
+
+ return detail::converter<multi_index_type,index>::const_iterator(
+ m,static_cast<typename multi_index_type::node_type*>(it.get_node()));
+}
+
+/* Comparison. Simple forward to first index. */
+
+template<
+ typename Value1,typename IndexSpecifierList1,typename Allocator1,
+ typename Value2,typename IndexSpecifierList2,typename Allocator2
+>
+bool operator==(
+ const multi_index_container<Value1,IndexSpecifierList1,Allocator1>& x,
+ const multi_index_container<Value2,IndexSpecifierList2,Allocator2>& y)
+{
+ return get<0>(x)==get<0>(y);
+}
+
+template<
+ typename Value1,typename IndexSpecifierList1,typename Allocator1,
+ typename Value2,typename IndexSpecifierList2,typename Allocator2
+>
+bool operator<(
+ const multi_index_container<Value1,IndexSpecifierList1,Allocator1>& x,
+ const multi_index_container<Value2,IndexSpecifierList2,Allocator2>& y)
+{
+ return get<0>(x)<get<0>(y);
+}
+
+template<
+ typename Value1,typename IndexSpecifierList1,typename Allocator1,
+ typename Value2,typename IndexSpecifierList2,typename Allocator2
+>
+bool operator!=(
+ const multi_index_container<Value1,IndexSpecifierList1,Allocator1>& x,
+ const multi_index_container<Value2,IndexSpecifierList2,Allocator2>& y)
+{
+ return get<0>(x)!=get<0>(y);
+}
+
+template<
+ typename Value1,typename IndexSpecifierList1,typename Allocator1,
+ typename Value2,typename IndexSpecifierList2,typename Allocator2
+>
+bool operator>(
+ const multi_index_container<Value1,IndexSpecifierList1,Allocator1>& x,
+ const multi_index_container<Value2,IndexSpecifierList2,Allocator2>& y)
+{
+ return get<0>(x)>get<0>(y);
+}
+
+template<
+ typename Value1,typename IndexSpecifierList1,typename Allocator1,
+ typename Value2,typename IndexSpecifierList2,typename Allocator2
+>
+bool operator>=(
+ const multi_index_container<Value1,IndexSpecifierList1,Allocator1>& x,
+ const multi_index_container<Value2,IndexSpecifierList2,Allocator2>& y)
+{
+ return get<0>(x)>=get<0>(y);
+}
+
+template<
+ typename Value1,typename IndexSpecifierList1,typename Allocator1,
+ typename Value2,typename IndexSpecifierList2,typename Allocator2
+>
+bool operator<=(
+ const multi_index_container<Value1,IndexSpecifierList1,Allocator1>& x,
+ const multi_index_container<Value2,IndexSpecifierList2,Allocator2>& y)
+{
+ return get<0>(x)<=get<0>(y);
+}
+
+/* specialized algorithms */
+
+template<typename Value,typename IndexSpecifierList,typename Allocator>
+void swap(
+ multi_index_container<Value,IndexSpecifierList,Allocator>& x,
+ multi_index_container<Value,IndexSpecifierList,Allocator>& y)
+{
+ x.swap(y);
+}
+
+} /* namespace multi_index */
+
+/* Associated global functions are promoted to namespace boost, except
+ * comparison operators and swap, which are meant to be Koenig looked-up.
+ */
+
+using multi_index::get;
+using multi_index::project;
+
+} /* namespace boost */
+
+#undef BOOST_MULTI_INDEX_CHECK_INVARIANT
+
+#endif
diff --git a/boost/boost/multi_index_container_fwd.hpp b/boost/boost/multi_index_container_fwd.hpp
new file mode 100644
index 00000000000..6e377edcd97
--- /dev/null
+++ b/boost/boost/multi_index_container_fwd.hpp
@@ -0,0 +1,121 @@
+/* Copyright 2003-2005 Joaquín M López Muñoz.
+ * 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/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_FWD_HPP
+#define BOOST_MULTI_INDEX_FWD_HPP
+
+#if defined(_MSC_VER)&&(_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/multi_index/identity.hpp>
+#include <boost/multi_index/indexed_by.hpp>
+#include <boost/multi_index/ordered_index_fwd.hpp>
+#include <memory>
+
+namespace boost{
+
+namespace multi_index{
+
+/* Default value for IndexSpecifierList specifies a container
+ * equivalent to std::set<Value>.
+ */
+
+template<
+ typename Value,
+ typename IndexSpecifierList=indexed_by<ordered_unique<identity<Value> > >,
+ typename Allocator=std::allocator<Value> >
+class multi_index_container;
+
+template<typename MultiIndexContainer,int N>
+struct nth_index;
+
+template<typename MultiIndexContainer,typename Tag>
+struct index;
+
+template<typename MultiIndexContainer,int N>
+struct nth_index_iterator;
+
+template<typename MultiIndexContainer,int N>
+struct nth_index_const_iterator;
+
+template<typename MultiIndexContainer,typename Tag>
+struct index_iterator;
+
+template<typename MultiIndexContainer,typename Tag>
+struct index_const_iterator;
+
+/* get and project functions not fwd declared due to problems
+ * with dependent typenames
+ */
+
+template<
+ typename Value1,typename IndexSpecifierList1,typename Allocator1,
+ typename Value2,typename IndexSpecifierList2,typename Allocator2
+>
+bool operator==(
+ const multi_index_container<Value1,IndexSpecifierList1,Allocator1>& x,
+ const multi_index_container<Value2,IndexSpecifierList2,Allocator2>& y);
+
+template<
+ typename Value1,typename IndexSpecifierList1,typename Allocator1,
+ typename Value2,typename IndexSpecifierList2,typename Allocator2
+>
+bool operator<(
+ const multi_index_container<Value1,IndexSpecifierList1,Allocator1>& x,
+ const multi_index_container<Value2,IndexSpecifierList2,Allocator2>& y);
+
+template<
+ typename Value1,typename IndexSpecifierList1,typename Allocator1,
+ typename Value2,typename IndexSpecifierList2,typename Allocator2
+>
+bool operator!=(
+ const multi_index_container<Value1,IndexSpecifierList1,Allocator1>& x,
+ const multi_index_container<Value2,IndexSpecifierList2,Allocator2>& y);
+
+template<
+ typename Value1,typename IndexSpecifierList1,typename Allocator1,
+ typename Value2,typename IndexSpecifierList2,typename Allocator2
+>
+bool operator>(
+ const multi_index_container<Value1,IndexSpecifierList1,Allocator1>& x,
+ const multi_index_container<Value2,IndexSpecifierList2,Allocator2>& y);
+
+template<
+ typename Value1,typename IndexSpecifierList1,typename Allocator1,
+ typename Value2,typename IndexSpecifierList2,typename Allocator2
+>
+bool operator>=(
+ const multi_index_container<Value1,IndexSpecifierList1,Allocator1>& x,
+ const multi_index_container<Value2,IndexSpecifierList2,Allocator2>& y);
+
+template<
+ typename Value1,typename IndexSpecifierList1,typename Allocator1,
+ typename Value2,typename IndexSpecifierList2,typename Allocator2
+>
+bool operator<=(
+ const multi_index_container<Value1,IndexSpecifierList1,Allocator1>& x,
+ const multi_index_container<Value2,IndexSpecifierList2,Allocator2>& y);
+
+template<typename Value,typename IndexSpecifierList,typename Allocator>
+void swap(
+ multi_index_container<Value,IndexSpecifierList,Allocator>& x,
+ multi_index_container<Value,IndexSpecifierList,Allocator>& y);
+
+} /* namespace multi_index */
+
+/* multi_index_container, being the main type of this library, is promoted to
+ * namespace boost.
+ */
+
+using multi_index::multi_index_container;
+
+} /* namespace boost */
+
+#endif
diff --git a/boost/boost/next_prior.hpp b/boost/boost/next_prior.hpp
new file mode 100644
index 00000000000..e1d2e428919
--- /dev/null
+++ b/boost/boost/next_prior.hpp
@@ -0,0 +1,51 @@
+// Boost next_prior.hpp header file ---------------------------------------//
+
+// (C) Copyright Dave Abrahams and Daniel Walker 1999-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/utility for documentation.
+
+// Revision History
+// 13 Dec 2003 Added next(x, n) and prior(x, n) (Daniel Walker)
+
+#ifndef BOOST_NEXT_PRIOR_HPP_INCLUDED
+#define BOOST_NEXT_PRIOR_HPP_INCLUDED
+
+#include <iterator>
+
+namespace boost {
+
+// Helper functions for classes like bidirectional iterators not supporting
+// operator+ and operator-
+//
+// Usage:
+// const std::list<T>::iterator p = get_some_iterator();
+// const std::list<T>::iterator prev = boost::prior(p);
+// const std::list<T>::iterator next = boost::next(prev, 2);
+
+// Contributed by Dave Abrahams
+
+template <class T>
+inline T next(T x) { return ++x; }
+
+template <class T, class Distance>
+inline T next(T x, Distance n)
+{
+ std::advance(x, n);
+ return x;
+}
+
+template <class T>
+inline T prior(T x) { return --x; }
+
+template <class T, class Distance>
+inline T prior(T x, Distance n)
+{
+ std::advance(x, -n);
+ return x;
+}
+
+} // namespace boost
+
+#endif // BOOST_NEXT_PRIOR_HPP_INCLUDED
diff --git a/boost/boost/non_type.hpp b/boost/boost/non_type.hpp
new file mode 100644
index 00000000000..896aed4d34b
--- /dev/null
+++ b/boost/boost/non_type.hpp
@@ -0,0 +1,27 @@
+// -------------------------------------
+//
+// (C) Copyright Gennaro Prota 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)
+//
+// ------------------------------------------------------
+
+#ifndef BOOST_NON_TYPE_HPP_GP_20030417
+#define BOOST_NON_TYPE_HPP_GP_20030417
+
+
+namespace boost {
+
+ // Just a simple "envelope" for non-type template parameters. Useful
+ // to work around some MSVC deficiencies.
+
+ template <typename T, T n>
+ struct non_type { };
+
+
+}
+
+
+#endif // include guard
diff --git a/boost/boost/noncopyable.hpp b/boost/boost/noncopyable.hpp
new file mode 100644
index 00000000000..7770bdbd372
--- /dev/null
+++ b/boost/boost/noncopyable.hpp
@@ -0,0 +1,36 @@
+// Boost noncopyable.hpp header file --------------------------------------//
+
+// (C) Copyright Beman Dawes 1999-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/utility for documentation.
+
+#ifndef BOOST_NONCOPYABLE_HPP_INCLUDED
+#define BOOST_NONCOPYABLE_HPP_INCLUDED
+
+namespace boost {
+
+// Private copy constructor and copy assignment ensure classes derived from
+// class noncopyable cannot be copied.
+
+// Contributed by Dave Abrahams
+
+namespace noncopyable_ // protection from unintended ADL
+{
+ class noncopyable
+ {
+ protected:
+ noncopyable() {}
+ ~noncopyable() {}
+ private: // emphasize the following members are private
+ noncopyable( const noncopyable& );
+ const noncopyable& operator=( const noncopyable& );
+ };
+}
+
+typedef noncopyable_::noncopyable noncopyable;
+
+} // namespace boost
+
+#endif // BOOST_NONCOPYABLE_HPP_INCLUDED
diff --git a/boost/boost/nondet_random.hpp b/boost/boost/nondet_random.hpp
new file mode 100644
index 00000000000..80a57478ae4
--- /dev/null
+++ b/boost/boost/nondet_random.hpp
@@ -0,0 +1,64 @@
+/* boost nondet_random.hpp header file
+ *
+ * Copyright Jens Maurer 2000
+ * 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)
+ *
+ * $Id: nondet_random.hpp,v 1.9 2004/07/27 03:43:27 dgregor Exp $
+ *
+ * Revision history
+ * 2000-02-18 Portability fixes (thanks to Beman Dawes)
+ */
+
+// See http://www.boost.org/libs/random for documentation.
+
+
+#ifndef BOOST_NONDET_RANDOM_HPP
+#define BOOST_NONDET_RANDOM_HPP
+
+#include <string> // std::abs
+#include <algorithm> // std::min
+#include <cmath>
+#include <boost/config.hpp>
+#include <boost/utility.hpp> // noncopyable
+#include <boost/integer_traits.hpp> // compile-time integral limits
+
+namespace boost {
+
+// use some OS service to generate non-deterministic random numbers
+class random_device : private noncopyable
+{
+public:
+ typedef unsigned int result_type;
+ BOOST_STATIC_CONSTANT(bool, has_fixed_range = true);
+ BOOST_STATIC_CONSTANT(result_type, min_value = integer_traits<result_type>::const_min);
+ BOOST_STATIC_CONSTANT(result_type, max_value = integer_traits<result_type>::const_max);
+
+ result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return min_value; }
+ result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return max_value; }
+ explicit random_device(const std::string& token = default_token);
+ ~random_device();
+ double entropy() const;
+ unsigned int operator()();
+
+private:
+ static const char * const default_token;
+
+ /*
+ * std:5.3.5/5 [expr.delete]: "If the object being deleted has incomplete
+ * class type at the point of deletion and the complete class has a
+ * non-trivial destructor [...], the behavior is undefined".
+ * This disallows the use of scoped_ptr<> with pimpl-like classes
+ * having a non-trivial destructor.
+ */
+ class impl;
+ impl * pimpl;
+};
+
+
+// TODO: put Schneier's Yarrow-160 algorithm here.
+
+} // namespace boost
+
+#endif /* BOOST_NONDET_RANDOM_HPP */
diff --git a/boost/boost/none.hpp b/boost/boost/none.hpp
new file mode 100644
index 00000000000..6f6f0a64e1c
--- /dev/null
+++ b/boost/boost/none.hpp
@@ -0,0 +1,43 @@
+// Copyright (C) 2003, Fernando Luis Cacciola Carballal.
+// Copyright (C) 2007, Anthony Williams
+// Copyright (C) 2007, Steven Watanabe, Richard Smith
+//
+// 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/lib/optional/ for documentation.
+//
+// You are welcome to contact the author at:
+// fernando.cacciola@gmail.com
+//
+#ifndef BOOST_NONE_17SEP2003_HPP
+#define BOOST_NONE_17SEP2003_HPP
+
+namespace boost
+{
+ namespace detail
+ {
+ class none_helper;
+ }
+
+ inline void none(detail::none_helper);
+
+ namespace detail
+ {
+ class none_helper
+ {
+ private:
+
+ none_helper( none_helper const& ) {}
+
+ friend void boost::none(none_helper);
+ };
+ }
+
+ typedef void (*none_t)(detail::none_helper);
+
+ inline void none(detail::none_helper) {}
+}
+
+#endif
diff --git a/boost/boost/numeric/conversion/bounds.hpp b/boost/boost/numeric/conversion/bounds.hpp
new file mode 100644
index 00000000000..20e2734d502
--- /dev/null
+++ b/boost/boost/numeric/conversion/bounds.hpp
@@ -0,0 +1,24 @@
+// © Copyright Fernando Luis Cacciola Carballal 2000-2004
+// Use, modification, and distribution is 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)
+
+// See library home page at http://www.boost.org/libs/numeric/conversion
+//
+// Contact the author at: fernando_cacciola@hotmail.com
+//
+#ifndef BOOST_NUMERIC_CONVERSION_BOUNDS_12NOV2002_HPP
+#define BOOST_NUMERIC_CONVERSION_BOUNDS_12NOV2002_HPP
+
+#include "boost/numeric/conversion/detail/bounds.hpp"
+
+namespace boost { namespace numeric
+{
+
+template<class N>
+struct bounds : boundsdetail::get_impl<N>::type
+{} ;
+
+} } // namespace boost::numeric
+
+#endif
diff --git a/boost/boost/numeric/conversion/cast.hpp b/boost/boost/numeric/conversion/cast.hpp
new file mode 100644
index 00000000000..6c3d977650d
--- /dev/null
+++ b/boost/boost/numeric/conversion/cast.hpp
@@ -0,0 +1,51 @@
+// © Copyright Fernando Luis Cacciola Carballal 2000-2004
+// Use, modification, and distribution is 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)
+
+// See library home page at http://www.boost.org/libs/numeric/conversion
+//
+// Contact the author at: fernando_cacciola@hotmail.com
+//
+//
+// Revision History
+//
+// 19 Nov 2001 Syntatic changes as suggested by Darin Adler (Fernando Cacciola)
+// 08 Nov 2001 Fixes to accommodate MSVC (Fernando Cacciola)
+// 04 Nov 2001 Fixes to accommodate gcc2.92 (Fernando Cacciola)
+// 30 Oct 2001 Some fixes suggested by Daryle Walker (Fernando Cacciola)
+// 25 Oct 2001 Initial boostification (Fernando Cacciola)
+// 23 Jan 2004 Inital add to cvs (post review)s
+//
+#ifndef BOOST_NUMERIC_CONVERSION_CAST_25OCT2001_HPP
+#define BOOST_NUMERIC_CONVERSION_CAST_25OCT2001_HPP
+
+#include <boost/detail/workaround.hpp>
+
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
+
+# include<boost/numeric/conversion/detail/old_numeric_cast.hpp>
+
+#else
+
+#include <boost/type.hpp>
+#include <boost/numeric/conversion/converter.hpp>
+
+namespace boost
+{
+ template<typename Target, typename Source>
+ inline
+ Target numeric_cast ( Source arg )
+ {
+ typedef boost::numeric::converter<Target,Source> Converter ;
+ return Converter::convert(arg);
+ }
+
+ using numeric::bad_numeric_cast;
+
+} // namespace boost
+
+#endif
+
+
+#endif
diff --git a/boost/boost/numeric/conversion/conversion_traits.hpp b/boost/boost/numeric/conversion/conversion_traits.hpp
new file mode 100644
index 00000000000..dc9da78a880
--- /dev/null
+++ b/boost/boost/numeric/conversion/conversion_traits.hpp
@@ -0,0 +1,39 @@
+// © Copyright Fernando Luis Cacciola Carballal 2000-2004
+// Use, modification, and distribution is 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)
+
+// See library home page at http://www.boost.org/libs/numeric/conversion
+//
+// Contact the author at: fernando_cacciola@hotmail.com
+//
+#ifndef BOOST_NUMERIC_CONVERSION_CONVERSION_TRAITS_FLC_12NOV2002_HPP
+#define BOOST_NUMERIC_CONVERSION_CONVERSION_TRAITS_FLC_12NOV2002_HPP
+
+#include "boost/numeric/conversion/detail/conversion_traits.hpp"
+#include "boost/detail/workaround.hpp"
+#include "boost/config.hpp"
+
+namespace boost { namespace numeric
+{
+
+template<class T, class S>
+struct conversion_traits
+ : convdetail::get_conversion_traits<T,S>::type
+{
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+ typedef typename convdetail::get_conversion_traits<T,S>::type base_;
+ typedef typename base_::target_type target_type;
+ typedef typename base_::source_type source_type;
+ typedef typename base_::result_type result_type;
+ typedef typename base_::argument_type argument_type;
+#endif
+} ;
+
+} } // namespace boost::numeric
+
+#endif
+//
+///////////////////////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/boost/boost/numeric/conversion/converter.hpp b/boost/boost/numeric/conversion/converter.hpp
new file mode 100644
index 00000000000..d50853e01f6
--- /dev/null
+++ b/boost/boost/numeric/conversion/converter.hpp
@@ -0,0 +1,68 @@
+// © Copyright Fernando Luis Cacciola Carballal 2000-2004
+// Use, modification, and distribution is 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)
+
+// See library home page at http://www.boost.org/libs/numeric/conversion
+//
+// Contact the author at: fernando_cacciola@hotmail.com
+//
+#ifndef BOOST_NUMERIC_CONVERSION_CONVERTER_FLC_12NOV2002_HPP
+#define BOOST_NUMERIC_CONVERSION_CONVERTER_FLC_12NOV2002_HPP
+
+#include "boost/numeric/conversion/conversion_traits.hpp"
+#include "boost/numeric/conversion/converter_policies.hpp"
+
+#include "boost/numeric/conversion/detail/converter.hpp"
+
+namespace boost { namespace numeric
+{
+
+template<class T,
+ class S,
+ class Traits = conversion_traits<T,S>,
+ class OverflowHandler = def_overflow_handler,
+ class Float2IntRounder = Trunc< BOOST_DEDUCED_TYPENAME Traits::source_type> ,
+ class RawConverter = raw_converter<Traits>,
+ class UserRangeChecker = UseInternalRangeChecker
+ >
+struct converter : convdetail::get_converter_impl<Traits,
+ OverflowHandler,
+ Float2IntRounder,
+ RawConverter,
+ UserRangeChecker
+ >::type
+{
+ typedef Traits traits ;
+
+ typedef typename Traits::argument_type argument_type ;
+ typedef typename Traits::result_type result_type ;
+
+ result_type operator() ( argument_type s ) const { return this->convert(s) ; }
+} ;
+
+
+
+template<class S,
+ class OverflowHandler = def_overflow_handler,
+ class Float2IntRounder = Trunc<S> ,
+ class UserRangeChecker = UseInternalRangeChecker
+ >
+struct make_converter_from
+{
+ template<class T,
+ class Traits = conversion_traits<T,S>,
+ class RawConverter = raw_converter<Traits>
+ >
+ struct to
+ {
+ typedef converter<T,S,Traits,OverflowHandler,Float2IntRounder,RawConverter,UserRangeChecker> type ;
+ } ;
+
+} ;
+
+} } // namespace boost::numeric
+
+#endif
+
+
diff --git a/boost/boost/numeric/conversion/converter_policies.hpp b/boost/boost/numeric/conversion/converter_policies.hpp
new file mode 100644
index 00000000000..fe5c18e0a6c
--- /dev/null
+++ b/boost/boost/numeric/conversion/converter_policies.hpp
@@ -0,0 +1,186 @@
+// © Copyright Fernando Luis Cacciola Carballal 2000-2004
+// Use, modification, and distribution is 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)
+
+// See library home page at http://www.boost.org/libs/numeric/conversion
+//
+// Contact the author at: fernando_cacciola@hotmail.com
+//
+#ifndef BOOST_NUMERIC_CONVERSION_CONVERTER_POLICIES_FLC_12NOV2002_HPP
+#define BOOST_NUMERIC_CONVERSION_CONVERTER_POLICIES_FLC_12NOV2002_HPP
+
+#include <typeinfo> // for std::bad_cast
+
+#include <cmath> // for std::floor and std::ceil
+
+#include <functional>
+
+#include "boost/type_traits/is_arithmetic.hpp"
+
+#include "boost/mpl/if.hpp"
+#include "boost/mpl/integral_c.hpp"
+
+namespace boost { namespace numeric
+{
+
+template<class S>
+struct Trunc
+{
+ typedef S source_type ;
+
+ typedef typename mpl::if_< is_arithmetic<S>,S,S const&>::type argument_type ;
+
+ static source_type nearbyint ( argument_type s )
+ {
+#if !defined(BOOST_NO_STDC_NAMESPACE)
+ using std::floor ;
+ using std::ceil ;
+#endif
+
+ return s < static_cast<S>(0) ? ceil(s) : floor(s) ;
+ }
+
+ typedef mpl::integral_c< std::float_round_style, std::round_toward_zero> round_style ;
+} ;
+
+
+
+template<class S>
+struct Floor
+{
+ typedef S source_type ;
+
+ typedef typename mpl::if_< is_arithmetic<S>,S,S const&>::type argument_type ;
+
+ static source_type nearbyint ( argument_type s )
+ {
+#if !defined(BOOST_NO_STDC_NAMESPACE)
+ using std::floor ;
+#endif
+
+ return floor(s) ;
+ }
+
+ typedef mpl::integral_c< std::float_round_style, std::round_toward_neg_infinity> round_style ;
+} ;
+
+template<class S>
+struct Ceil
+{
+ typedef S source_type ;
+
+ typedef typename mpl::if_< is_arithmetic<S>,S,S const&>::type argument_type ;
+
+ static source_type nearbyint ( argument_type s )
+ {
+#if !defined(BOOST_NO_STDC_NAMESPACE)
+ using std::ceil ;
+#endif
+
+ return ceil(s) ;
+ }
+
+ typedef mpl::integral_c< std::float_round_style, std::round_toward_infinity> round_style ;
+} ;
+
+template<class S>
+struct RoundEven
+{
+ typedef S source_type ;
+
+ typedef typename mpl::if_< is_arithmetic<S>,S,S const&>::type argument_type ;
+
+ static source_type nearbyint ( argument_type s )
+ {
+ // Algorithm contributed by Guillaume Melquiond
+
+#if !defined(BOOST_NO_STDC_NAMESPACE)
+ using std::floor ;
+ using std::ceil ;
+#endif
+
+ // only works inside the range not at the boundaries
+ S prev = floor(s);
+ S next = ceil(s);
+
+ S rt = (s - prev) - (next - s); // remainder type
+
+ S const zero(0.0);
+ S const two(2.0);
+
+ if ( rt < zero )
+ return prev;
+ else if ( rt > zero )
+ return next;
+ else
+ {
+ bool is_prev_even = two * floor(prev / two) == prev ;
+ return ( is_prev_even ? prev : next ) ;
+ }
+ }
+
+ typedef mpl::integral_c< std::float_round_style, std::round_to_nearest> round_style ;
+} ;
+
+
+enum range_check_result
+{
+ cInRange = 0 ,
+ cNegOverflow = 1 ,
+ cPosOverflow = 2
+} ;
+
+class bad_numeric_cast : public std::bad_cast
+{
+ public:
+
+ virtual const char * what() const throw()
+ { return "bad numeric conversion: overflow"; }
+};
+
+class negative_overflow : public bad_numeric_cast
+{
+ public:
+
+ virtual const char * what() const throw()
+ { return "bad numeric conversion: negative overflow"; }
+};
+class positive_overflow : public bad_numeric_cast
+{
+ public:
+
+ virtual const char * what() const throw()
+ { return "bad numeric conversion: positive overflow"; }
+};
+
+struct def_overflow_handler
+{
+ void operator() ( range_check_result r ) // throw(negative_overflow,positive_overflow)
+ {
+ if ( r == cNegOverflow )
+ throw negative_overflow() ;
+ else if ( r == cPosOverflow )
+ throw positive_overflow() ;
+ }
+} ;
+
+struct silent_overflow_handler
+{
+ void operator() ( range_check_result ) {} // throw()
+} ;
+
+template<class Traits>
+struct raw_converter
+{
+ typedef typename Traits::result_type result_type ;
+ typedef typename Traits::argument_type argument_type ;
+
+ static result_type low_level_convert ( argument_type s ) { return static_cast<result_type>(s) ; }
+} ;
+
+struct UseInternalRangeChecker {} ;
+
+} } // namespace boost::numeric
+
+#endif
diff --git a/boost/boost/numeric/conversion/detail/bounds.hpp b/boost/boost/numeric/conversion/detail/bounds.hpp
new file mode 100644
index 00000000000..b72beea4477
--- /dev/null
+++ b/boost/boost/numeric/conversion/detail/bounds.hpp
@@ -0,0 +1,58 @@
+// © Copyright Fernando Luis Cacciola Carballal 2000-2004
+// Use, modification, and distribution is 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)
+
+// See library home page at http://www.boost.org/libs/numeric/conversion
+//
+// Contact the author at: fernando_cacciola@hotmail.com
+//
+#ifndef BOOST_NUMERIC_CONVERSION_BOUNDS_DETAIL_FLC_12NOV2002_HPP
+#define BOOST_NUMERIC_CONVERSION_BOUNDS_DETAIL_FLC_12NOV2002_HPP
+
+#include "boost/limits.hpp"
+#include "boost/config.hpp"
+#include "boost/mpl/if.hpp"
+
+namespace boost { namespace numeric { namespace boundsdetail
+{
+ template<class N>
+ class Integral
+ {
+ typedef std::numeric_limits<N> limits ;
+
+ public :
+
+ static N lowest () { return limits::min BOOST_PREVENT_MACRO_SUBSTITUTION (); }
+ static N highest () { return limits::max BOOST_PREVENT_MACRO_SUBSTITUTION (); }
+ static N smallest() { return static_cast<N>(1); }
+ } ;
+
+ template<class N>
+ class Float
+ {
+ typedef std::numeric_limits<N> limits ;
+
+ public :
+
+ static N lowest () { return static_cast<N>(-limits::max BOOST_PREVENT_MACRO_SUBSTITUTION ()) ; }
+ static N highest () { return limits::max BOOST_PREVENT_MACRO_SUBSTITUTION (); }
+ static N smallest() { return limits::min BOOST_PREVENT_MACRO_SUBSTITUTION (); }
+ } ;
+
+ template<class N>
+ struct get_impl
+ {
+ typedef mpl::bool_< ::std::numeric_limits<N>::is_integer > is_int ;
+
+ typedef Integral<N> impl_int ;
+ typedef Float <N> impl_float ;
+
+ typedef typename mpl::if_<is_int,impl_int,impl_float>::type type ;
+ } ;
+
+} } } // namespace boost::numeric::boundsdetail.
+
+#endif
+//
+///////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/boost/boost/numeric/conversion/detail/conversion_traits.hpp b/boost/boost/numeric/conversion/detail/conversion_traits.hpp
new file mode 100644
index 00000000000..fb55dad876f
--- /dev/null
+++ b/boost/boost/numeric/conversion/detail/conversion_traits.hpp
@@ -0,0 +1,97 @@
+// © Copyright Fernando Luis Cacciola Carballal 2000-2004
+// Use, modification, and distribution is 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)
+
+// See library home page at http://www.boost.org/libs/numeric/conversion
+//
+// Contact the author at: fernando_cacciola@hotmail.com
+//
+#ifndef BOOST_NUMERIC_CONVERSION_DETAIL_CONVERSION_TRAITS_FLC_12NOV2002_HPP
+#define BOOST_NUMERIC_CONVERSION_DETAIL_CONVERSION_TRAITS_FLC_12NOV2002_HPP
+
+#include "boost/type_traits/is_arithmetic.hpp"
+#include "boost/type_traits/is_same.hpp"
+#include "boost/type_traits/remove_cv.hpp"
+
+#include "boost/numeric/conversion/detail/meta.hpp"
+#include "boost/numeric/conversion/detail/int_float_mixture.hpp"
+#include "boost/numeric/conversion/detail/sign_mixture.hpp"
+#include "boost/numeric/conversion/detail/udt_builtin_mixture.hpp"
+#include "boost/numeric/conversion/detail/is_subranged.hpp"
+
+namespace boost { namespace numeric { namespace convdetail
+{
+ //-------------------------------------------------------------------
+ // Implementation of the Conversion Traits for T != S
+ //
+ // This is a VISIBLE base class of the user-level conversion_traits<> class.
+ //-------------------------------------------------------------------
+ template<class T,class S>
+ struct non_trivial_traits_impl
+ {
+ typedef typename get_int_float_mixture <T,S>::type int_float_mixture ;
+ typedef typename get_sign_mixture <T,S>::type sign_mixture ;
+ typedef typename get_udt_builtin_mixture <T,S>::type udt_builtin_mixture ;
+
+ typedef typename get_is_subranged<T,S>::type subranged ;
+
+ typedef mpl::false_ trivial ;
+
+ typedef T target_type ;
+ typedef S source_type ;
+ typedef T result_type ;
+
+ typedef typename mpl::if_< is_arithmetic<S>, S, S const&>::type argument_type ;
+
+ typedef typename mpl::if_<subranged,S,T>::type supertype ;
+ typedef typename mpl::if_<subranged,T,S>::type subtype ;
+ } ;
+
+ //-------------------------------------------------------------------
+ // Implementation of the Conversion Traits for T == S
+ //
+ // This is a VISIBLE base class of the user-level conversion_traits<> class.
+ //-------------------------------------------------------------------
+ template<class N>
+ struct trivial_traits_impl
+ {
+ typedef typename get_int_float_mixture <N,N>::type int_float_mixture ;
+ typedef typename get_sign_mixture <N,N>::type sign_mixture ;
+ typedef typename get_udt_builtin_mixture<N,N>::type udt_builtin_mixture ;
+
+ typedef mpl::false_ subranged ;
+ typedef mpl::true_ trivial ;
+
+ typedef N target_type ;
+ typedef N source_type ;
+ typedef N const& result_type ;
+ typedef N const& argument_type ;
+
+ typedef N supertype ;
+ typedef N subtype ;
+
+ } ;
+
+ //-------------------------------------------------------------------
+ // Top level implementation selector.
+ //-------------------------------------------------------------------
+ template<class T, class S>
+ struct get_conversion_traits
+ {
+ typedef typename remove_cv<T>::type target_type ;
+ typedef typename remove_cv<S>::type source_type ;
+
+ typedef typename is_same<target_type,source_type>::type is_trivial ;
+
+ typedef trivial_traits_impl <target_type> trivial_imp ;
+ typedef non_trivial_traits_impl<target_type,source_type> non_trivial_imp ;
+
+ typedef typename mpl::if_<is_trivial,trivial_imp,non_trivial_imp>::type type ;
+ } ;
+
+} } } // namespace boost::numeric::convdetail
+
+#endif
+
+
diff --git a/boost/boost/numeric/conversion/detail/converter.hpp b/boost/boost/numeric/conversion/detail/converter.hpp
new file mode 100644
index 00000000000..c84269e7693
--- /dev/null
+++ b/boost/boost/numeric/conversion/detail/converter.hpp
@@ -0,0 +1,602 @@
+// © Copyright Fernando Luis Cacciola Carballal 2000-2004
+// Use, modification, and distribution is 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)
+
+// See library home page at http://www.boost.org/libs/numeric/conversion
+//
+// Contact the author at: fernando_cacciola@hotmail.com
+//
+#ifndef BOOST_NUMERIC_CONVERSION_DETAIL_CONVERTER_FLC_12NOV2002_HPP
+#define BOOST_NUMERIC_CONVERSION_DETAIL_CONVERTER_FLC_12NOV2002_HPP
+
+#include <functional>
+
+#include "boost/numeric/conversion/detail/meta.hpp"
+#include "boost/numeric/conversion/detail/conversion_traits.hpp"
+#include "boost/numeric/conversion/bounds.hpp"
+
+#include "boost/type_traits/is_same.hpp"
+
+#include "boost/mpl/integral_c.hpp"
+
+namespace boost { namespace numeric { namespace convdetail
+{
+ // Integral Constants representing rounding modes
+ typedef mpl::integral_c<std::float_round_style, std::round_toward_zero> round2zero_c ;
+ typedef mpl::integral_c<std::float_round_style, std::round_to_nearest> round2nearest_c ;
+ typedef mpl::integral_c<std::float_round_style, std::round_toward_infinity> round2inf_c ;
+ typedef mpl::integral_c<std::float_round_style, std::round_toward_neg_infinity> round2neg_inf_c ;
+
+ // Metafunction:
+ //
+ // for_round_style<RoundStyle,RoundToZero,RoundToNearest,RoundToInf,RoundToNegInf>::type
+ //
+ // {RoundStyle} Integral Constant specifying a round style as declared above.
+ // {RoundToZero,RoundToNearest,RoundToInf,RoundToNegInf} arbitrary types.
+ //
+ // Selects one of the 4 types according to the value of RoundStyle.
+ //
+ template<class RoundStyle,class RoundToZero,class RoundToNearest,class RoundToInf,class RoundToNegInf>
+ struct for_round_style
+ {
+ typedef ct_switch4<RoundStyle
+ , round2zero_c, round2nearest_c, round2inf_c // round2neg_inf_c
+ , RoundToZero , RoundToNearest , RoundToInf , RoundToNegInf
+ > selector ;
+
+ typedef typename selector::type type ;
+ } ;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+//--------------------------------------------------------------------------
+// Range Checking Logic.
+//
+// The range checking logic is built up by combining 1 or 2 predicates.
+// Each predicate is encapsulated in a template class and exposes
+// the static member function 'apply'.
+//
+//--------------------------------------------------------------------------
+
+
+ // Because a particular logic can combine either 1 or two predicates, the following
+ // tags are used to allow the predicate applier to receive 2 preds, but optimize away
+ // one of them if it is 'non-applicable'
+ struct non_applicable { typedef mpl::false_ do_apply ; } ;
+ struct applicable { typedef mpl::true_ do_apply ; } ;
+
+
+ //--------------------------------------------------------------------------
+ //
+ // Range Checking Logic implementations.
+ //
+ // The following classes, collectivelly named 'Predicates', are instantiated within
+ // the corresponding range checkers.
+ // Their static member function 'apply' is called to perform the actual range checking logic.
+ //--------------------------------------------------------------------------
+
+ // s < Lowest(T) ? cNegOverflow : cInRange
+ //
+ template<class Traits>
+ struct LT_LoT : applicable
+ {
+ typedef typename Traits::target_type T ;
+ typedef typename Traits::source_type S ;
+ typedef typename Traits::argument_type argument_type ;
+
+ static range_check_result apply ( argument_type s )
+ {
+ return s < static_cast<S>(bounds<T>::lowest()) ? cNegOverflow : cInRange ;
+ }
+ } ;
+
+ // s < 0 ? cNegOverflow : cInRange
+ //
+ template<class Traits>
+ struct LT_Zero : applicable
+ {
+ typedef typename Traits::source_type S ;
+ typedef typename Traits::argument_type argument_type ;
+
+ static range_check_result apply ( argument_type s )
+ {
+ return s < static_cast<S>(0) ? cNegOverflow : cInRange ;
+ }
+ } ;
+
+ // s <= Lowest(T)-1 ? cNegOverflow : cInRange
+ //
+ template<class Traits>
+ struct LE_PrevLoT : applicable
+ {
+ typedef typename Traits::target_type T ;
+ typedef typename Traits::source_type S ;
+ typedef typename Traits::argument_type argument_type ;
+
+ static range_check_result apply ( argument_type s )
+ {
+ return s <= static_cast<S>(bounds<T>::lowest()) - static_cast<S>(1.0)
+ ? cNegOverflow : cInRange ;
+ }
+ } ;
+
+ // s < Lowest(T)-0.5 ? cNegOverflow : cInRange
+ //
+ template<class Traits>
+ struct LT_HalfPrevLoT : applicable
+ {
+ typedef typename Traits::target_type T ;
+ typedef typename Traits::source_type S ;
+ typedef typename Traits::argument_type argument_type ;
+
+ static range_check_result apply ( argument_type s )
+ {
+ return s < static_cast<S>(bounds<T>::lowest()) - static_cast<S>(0.5)
+ ? cNegOverflow : cInRange ;
+ }
+ } ;
+
+ // s > Highest(T) ? cPosOverflow : cInRange
+ //
+ template<class Traits>
+ struct GT_HiT : applicable
+ {
+ typedef typename Traits::target_type T ;
+ typedef typename Traits::source_type S ;
+ typedef typename Traits::argument_type argument_type ;
+
+ static range_check_result apply ( argument_type s )
+ {
+ return s > static_cast<S>(bounds<T>::highest())
+ ? cPosOverflow : cInRange ;
+ }
+ } ;
+
+ // s >= Lowest(T) + 1 ? cPosOverflow : cInRange
+ //
+ template<class Traits>
+ struct GE_SuccHiT : applicable
+ {
+ typedef typename Traits::target_type T ;
+ typedef typename Traits::source_type S ;
+ typedef typename Traits::argument_type argument_type ;
+
+ static range_check_result apply ( argument_type s )
+ {
+ return s >= static_cast<S>(bounds<T>::highest()) + static_cast<S>(1.0)
+ ? cPosOverflow : cInRange ;
+ }
+ } ;
+
+ // s >= Lowest(T) + 0.5 ? cPosgOverflow : cInRange
+ //
+ template<class Traits>
+ struct GT_HalfSuccHiT : applicable
+ {
+ typedef typename Traits::target_type T ;
+ typedef typename Traits::source_type S ;
+ typedef typename Traits::argument_type argument_type ;
+
+ static range_check_result apply ( argument_type s )
+ {
+ return s >= static_cast<S>(bounds<T>::highest()) + static_cast<S>(0.5)
+ ? cPosOverflow : cInRange ;
+ }
+ } ;
+
+
+ //--------------------------------------------------------------------------
+ //
+ // Predicate Combiner.
+ //
+ // This helper classes are used to possibly combine the range checking logic
+ // individually performed by the predicates
+ //
+ //--------------------------------------------------------------------------
+
+
+ // Applies both predicates: first 'PredA', and if it equals 'cInRange', 'PredB'
+ template<class PredA, class PredB>
+ struct applyBoth
+ {
+ typedef typename PredA::argument_type argument_type ;
+
+ static range_check_result apply ( argument_type s )
+ {
+ range_check_result r = PredA::apply(s) ;
+ if ( r == cInRange )
+ r = PredB::apply(s);
+ return r ;
+ }
+ } ;
+
+ template<class PredA, class PredB>
+ struct combine
+ {
+ typedef applyBoth<PredA,PredB> Both ;
+ typedef void NNone ; // 'None' is defined as a macro in (/usr/X11R6/include/X11/X.h)
+
+ typedef typename PredA::do_apply do_applyA ;
+ typedef typename PredB::do_apply do_applyB ;
+
+ typedef typename for_both<do_applyA, do_applyB, Both, PredA, PredB, NNone>::type type ;
+ } ;
+
+
+
+
+
+
+
+
+
+
+
+
+//--------------------------------------------------------------------------
+// Range Checker classes.
+//
+// The following classes are VISIBLE base classes of the user-level converter<> class.
+// They supply the optimized 'out_of_range()' and 'validate_range()' static member functions
+// visible in the user interface.
+//
+//--------------------------------------------------------------------------
+
+ // Dummy range checker.
+ template<class Traits>
+ struct dummy_range_checker
+ {
+ typedef typename Traits::argument_type argument_type ;
+
+ static range_check_result out_of_range ( argument_type ) { return cInRange ; }
+ static void validate_range ( argument_type ) {}
+ } ;
+
+ // Generic range checker.
+ //
+ // All the range checking logic for all possible combinations of source and target
+ // can be arranged in terms of one or two predicates, which test overflow on both neg/pos 'sides'
+ // of the ranges.
+ //
+ // These predicates are given here as IsNegOverflow and IsPosOverflow.
+ //
+ template<class Traits, class IsNegOverflow, class IsPosOverflow, class OverflowHandler>
+ struct generic_range_checker
+ {
+ typedef OverflowHandler overflow_handler ;
+
+ typedef typename Traits::argument_type argument_type ;
+
+ static range_check_result out_of_range ( argument_type s )
+ {
+ typedef typename combine<IsNegOverflow,IsPosOverflow>::type Predicate ;
+
+ return Predicate::apply(s);
+ }
+
+ static void validate_range ( argument_type s )
+ { OverflowHandler()( out_of_range(s) ) ; }
+ } ;
+
+
+
+//--------------------------------------------------------------------------
+//
+// Selectors for the optimized Range Checker class.
+//
+//--------------------------------------------------------------------------
+
+ template<class Traits,class OverflowHandler>
+ struct GetRC_Sig2Sig_or_Unsig2Unsig
+ {
+ typedef dummy_range_checker<Traits> Dummy ;
+
+ typedef LT_LoT<Traits> Pred1 ;
+ typedef GT_HiT<Traits> Pred2 ;
+
+ typedef generic_range_checker<Traits,Pred1,Pred2,OverflowHandler> Normal ;
+
+ typedef typename Traits::subranged subranged ;
+
+ typedef typename mpl::if_<subranged,Normal,Dummy>::type type ;
+ } ;
+
+ template<class Traits, class OverflowHandler>
+ struct GetRC_Sig2Unsig
+ {
+ typedef LT_Zero<Traits> Pred1 ;
+ typedef GT_HiT <Traits> Pred2 ;
+
+ typedef generic_range_checker<Traits,Pred1,Pred2,OverflowHandler> ChoiceA ;
+
+ typedef generic_range_checker<Traits,Pred1,non_applicable,OverflowHandler> ChoiceB ;
+
+ typedef typename Traits::target_type T ;
+ typedef typename Traits::source_type S ;
+
+ typedef typename subranged_Unsig2Sig<S,T>::type oposite_subranged ;
+
+ typedef typename mpl::not_<oposite_subranged>::type positively_subranged ;
+
+ typedef typename mpl::if_<positively_subranged,ChoiceA,ChoiceB>::type type ;
+ } ;
+
+ template<class Traits, class OverflowHandler>
+ struct GetRC_Unsig2Sig
+ {
+ typedef GT_HiT<Traits> Pred1 ;
+
+ typedef generic_range_checker<Traits,non_applicable,Pred1,OverflowHandler> type ;
+ } ;
+
+ template<class Traits,class OverflowHandler>
+ struct GetRC_Int2Int
+ {
+ typedef GetRC_Sig2Sig_or_Unsig2Unsig<Traits,OverflowHandler> Sig2SigQ ;
+ typedef GetRC_Sig2Unsig <Traits,OverflowHandler> Sig2UnsigQ ;
+ typedef GetRC_Unsig2Sig <Traits,OverflowHandler> Unsig2SigQ ;
+ typedef Sig2SigQ Unsig2UnsigQ ;
+
+ typedef typename Traits::sign_mixture sign_mixture ;
+
+ typedef typename
+ for_sign_mixture<sign_mixture,Sig2SigQ,Sig2UnsigQ,Unsig2SigQ,Unsig2UnsigQ>::type
+ selector ;
+
+ typedef typename selector::type type ;
+ } ;
+
+ template<class Traits>
+ struct GetRC_Int2Float
+ {
+ typedef dummy_range_checker<Traits> type ;
+ } ;
+
+ template<class Traits, class OverflowHandler, class Float2IntRounder>
+ struct GetRC_Float2Int
+ {
+ typedef LE_PrevLoT <Traits> Pred1 ;
+ typedef GE_SuccHiT <Traits> Pred2 ;
+ typedef LT_HalfPrevLoT<Traits> Pred3 ;
+ typedef GT_HalfSuccHiT<Traits> Pred4 ;
+ typedef GT_HiT <Traits> Pred5 ;
+ typedef LT_LoT <Traits> Pred6 ;
+
+ typedef generic_range_checker<Traits,Pred1,Pred2,OverflowHandler> ToZero ;
+ typedef generic_range_checker<Traits,Pred3,Pred4,OverflowHandler> ToNearest ;
+ typedef generic_range_checker<Traits,Pred1,Pred5,OverflowHandler> ToInf ;
+ typedef generic_range_checker<Traits,Pred6,Pred2,OverflowHandler> ToNegInf ;
+
+ typedef typename Float2IntRounder::round_style round_style ;
+
+ typedef typename for_round_style<round_style,ToZero,ToNearest,ToInf,ToNegInf>::type type ;
+ } ;
+
+ template<class Traits, class OverflowHandler>
+ struct GetRC_Float2Float
+ {
+ typedef dummy_range_checker<Traits> Dummy ;
+
+ typedef LT_LoT<Traits> Pred1 ;
+ typedef GT_HiT<Traits> Pred2 ;
+
+ typedef generic_range_checker<Traits,Pred1,Pred2,OverflowHandler> Normal ;
+
+ typedef typename Traits::subranged subranged ;
+
+ typedef typename mpl::if_<subranged,Normal,Dummy>::type type ;
+ } ;
+
+ template<class Traits, class OverflowHandler, class Float2IntRounder>
+ struct GetRC_BuiltIn2BuiltIn
+ {
+ typedef GetRC_Int2Int<Traits,OverflowHandler> Int2IntQ ;
+ typedef GetRC_Int2Float<Traits> Int2FloatQ ;
+ typedef GetRC_Float2Int<Traits,OverflowHandler,Float2IntRounder> Float2IntQ ;
+ typedef GetRC_Float2Float<Traits,OverflowHandler> Float2FloatQ ;
+
+ typedef typename Traits::int_float_mixture int_float_mixture ;
+
+ typedef typename for_int_float_mixture<int_float_mixture, Int2IntQ, Int2FloatQ, Float2IntQ, Float2FloatQ>::type selector ;
+
+ typedef typename selector::type type ;
+ } ;
+
+ template<class Traits, class OverflowHandler, class Float2IntRounder>
+ struct GetRC
+ {
+ typedef GetRC_BuiltIn2BuiltIn<Traits,OverflowHandler,Float2IntRounder> BuiltIn2BuiltInQ ;
+
+ typedef dummy_range_checker<Traits> Dummy ;
+
+ typedef mpl::identity<Dummy> DummyQ ;
+
+ typedef typename Traits::udt_builtin_mixture udt_builtin_mixture ;
+
+ typedef typename for_udt_builtin_mixture<udt_builtin_mixture,BuiltIn2BuiltInQ,DummyQ,DummyQ,DummyQ>::type selector ;
+
+ typedef typename selector::type type ;
+ } ;
+
+
+
+
+//--------------------------------------------------------------------------
+// Converter classes.
+//
+// The following classes are VISIBLE base classes of the user-level converter<> class.
+// They supply the optimized 'nearbyint()' and 'convert()' static member functions
+// visible in the user interface.
+//
+//--------------------------------------------------------------------------
+
+ //
+ // Trivial Converter : used when (cv-unqualified) T == (cv-unqualified) S
+ //
+ template<class Traits>
+ struct trivial_converter_impl : public std::unary_function< BOOST_DEDUCED_TYPENAME Traits::argument_type
+ ,BOOST_DEDUCED_TYPENAME Traits::result_type
+ >
+ ,public dummy_range_checker<Traits>
+ {
+ typedef Traits traits ;
+
+ typedef typename Traits::source_type source_type ;
+ typedef typename Traits::argument_type argument_type ;
+ typedef typename Traits::result_type result_type ;
+
+ static result_type low_level_convert ( argument_type s ) { return s ; }
+ static source_type nearbyint ( argument_type s ) { return s ; }
+ static result_type convert ( argument_type s ) { return s ; }
+ } ;
+
+
+ //
+ // Rounding Converter : used for float to integral conversions.
+ //
+ template<class Traits,class RangeChecker,class RawConverter,class Float2IntRounder>
+ struct rounding_converter : public std::unary_function< BOOST_DEDUCED_TYPENAME Traits::argument_type
+ ,BOOST_DEDUCED_TYPENAME Traits::result_type
+ >
+ ,public RangeChecker
+ ,public Float2IntRounder
+ ,public RawConverter
+ {
+ typedef RangeChecker RangeCheckerBase ;
+ typedef Float2IntRounder Float2IntRounderBase ;
+ typedef RawConverter RawConverterBase ;
+
+ typedef Traits traits ;
+
+ typedef typename Traits::source_type source_type ;
+ typedef typename Traits::argument_type argument_type ;
+ typedef typename Traits::result_type result_type ;
+
+ static result_type convert ( argument_type s )
+ {
+ RangeCheckerBase::validate_range(s);
+ source_type s1 = Float2IntRounderBase::nearbyint(s);
+ return RawConverterBase::low_level_convert(s1);
+ }
+ } ;
+
+
+ //
+ // Non-Rounding Converter : used for all other conversions.
+ //
+ template<class Traits,class RangeChecker,class RawConverter>
+ struct non_rounding_converter : public std::unary_function< BOOST_DEDUCED_TYPENAME Traits::argument_type
+ ,BOOST_DEDUCED_TYPENAME Traits::result_type
+ >
+ ,public RangeChecker
+ ,public RawConverter
+ {
+ typedef RangeChecker RangeCheckerBase ;
+ typedef RawConverter RawConverterBase ;
+
+ typedef Traits traits ;
+
+ typedef typename Traits::source_type source_type ;
+ typedef typename Traits::argument_type argument_type ;
+ typedef typename Traits::result_type result_type ;
+
+ static source_type nearbyint ( argument_type s ) { return s ; }
+
+ static result_type convert ( argument_type s )
+ {
+ RangeCheckerBase::validate_range(s);
+ return RawConverterBase::low_level_convert(s);
+ }
+ } ;
+
+
+
+
+//--------------------------------------------------------------------------
+//
+// Selectors for the optimized Converter class.
+//
+//--------------------------------------------------------------------------
+
+ template<class Traits,class OverflowHandler,class Float2IntRounder,class RawConverter, class UserRangeChecker>
+ struct get_non_trivial_converter
+ {
+ typedef GetRC<Traits,OverflowHandler,Float2IntRounder> InternalRangeCheckerQ ;
+
+ typedef is_same<UserRangeChecker,UseInternalRangeChecker> use_internal_RC ;
+
+ typedef mpl::identity<UserRangeChecker> UserRangeCheckerQ ;
+
+ typedef typename
+ mpl::eval_if<use_internal_RC,InternalRangeCheckerQ,UserRangeCheckerQ>::type
+ RangeChecker ;
+
+ typedef non_rounding_converter<Traits,RangeChecker,RawConverter> NonRounding ;
+ typedef rounding_converter<Traits,RangeChecker,RawConverter,Float2IntRounder> Rounding ;
+
+ typedef mpl::identity<NonRounding> NonRoundingQ ;
+ typedef mpl::identity<Rounding> RoundingQ ;
+
+ typedef typename Traits::int_float_mixture int_float_mixture ;
+
+ typedef typename
+ for_int_float_mixture<int_float_mixture, NonRoundingQ, NonRoundingQ, RoundingQ, NonRoundingQ>::type
+ selector ;
+
+ typedef typename selector::type type ;
+ } ;
+
+ template< class Traits
+ ,class OverflowHandler
+ ,class Float2IntRounder
+ ,class RawConverter
+ ,class UserRangeChecker
+ >
+ struct get_converter_impl
+ {
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT( 0x0561 ) )
+ // bcc55 prefers sometimes template parameters to be explicit local types.
+ // (notice that is is illegal to reuse the names like this)
+ typedef Traits Traits ;
+ typedef OverflowHandler OverflowHandler ;
+ typedef Float2IntRounder Float2IntRounder ;
+ typedef RawConverter RawConverter ;
+ typedef UserRangeChecker UserRangeChecker ;
+#endif
+
+ typedef trivial_converter_impl<Traits> Trivial ;
+ typedef mpl::identity <Trivial> TrivialQ ;
+
+ typedef get_non_trivial_converter< Traits
+ ,OverflowHandler
+ ,Float2IntRounder
+ ,RawConverter
+ ,UserRangeChecker
+ > NonTrivialQ ;
+
+ typedef typename Traits::trivial trivial ;
+
+ typedef typename mpl::eval_if<trivial,TrivialQ,NonTrivialQ>::type type ;
+ } ;
+
+} } } // namespace boost::numeric::convdetail
+
+#endif
+
+
diff --git a/boost/boost/numeric/conversion/detail/int_float_mixture.hpp b/boost/boost/numeric/conversion/detail/int_float_mixture.hpp
new file mode 100644
index 00000000000..ff39119a251
--- /dev/null
+++ b/boost/boost/numeric/conversion/detail/int_float_mixture.hpp
@@ -0,0 +1,72 @@
+// © Copyright Fernando Luis Cacciola Carballal 2000-2004
+// Use, modification, and distribution is 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)
+
+// See library home page at http://www.boost.org/libs/numeric/conversion
+//
+// Contact the author at: fernando_cacciola@hotmail.com
+//
+#ifndef BOOST_NUMERIC_CONVERSION_DETAIL_INT_FLOAT_MIXTURE_FLC_12NOV2002_HPP
+#define BOOST_NUMERIC_CONVERSION_DETAIL_INT_FLOAT_MIXTURE_FLC_12NOV2002_HPP
+
+#include "boost/config.hpp"
+#include "boost/limits.hpp"
+
+#include "boost/numeric/conversion/int_float_mixture_enum.hpp"
+#include "boost/numeric/conversion/detail/meta.hpp"
+
+#include "boost/mpl/integral_c.hpp"
+
+namespace boost { namespace numeric { namespace convdetail
+{
+ // Integral Constants for 'IntFloatMixture'
+ typedef mpl::integral_c<int_float_mixture_enum, integral_to_integral> int2int_c ;
+ typedef mpl::integral_c<int_float_mixture_enum, integral_to_float> int2float_c ;
+ typedef mpl::integral_c<int_float_mixture_enum, float_to_integral> float2int_c ;
+ typedef mpl::integral_c<int_float_mixture_enum, float_to_float> float2float_c ;
+
+ // Metafunction:
+ //
+ // get_int_float_mixture<T,S>::type
+ //
+ // Selects the appropriate Int-Float Mixture Integral Constant for the combination T,S.
+ //
+ template<class T,class S>
+ struct get_int_float_mixture
+ {
+ typedef mpl::bool_< ::std::numeric_limits<S>::is_integer > S_int ;
+ typedef mpl::bool_< ::std::numeric_limits<T>::is_integer > T_int ;
+
+ typedef typename
+ for_both<S_int, T_int, int2int_c, int2float_c, float2int_c, float2float_c>::type
+ type ;
+ } ;
+
+ // Metafunction:
+ //
+ // for_int_float_mixture<Mixture,int_int,int_float,float_int,float_float>::type
+ //
+ // {Mixture} is one of the Integral Constants for Mixture, declared above.
+ // {int_int,int_float,float_int,float_float} are aribtrary types. (not metafunctions)
+ //
+ // According to the value of 'IntFloatMixture', selects the corresponding type.
+ //
+ template<class IntFloatMixture, class Int2Int, class Int2Float, class Float2Int, class Float2Float>
+ struct for_int_float_mixture
+ {
+ typedef typename
+ ct_switch4<IntFloatMixture
+ ,int2int_c, int2float_c, float2int_c // default
+ ,Int2Int , Int2Float , Float2Int , Float2Float
+ >::type
+ type ;
+ } ;
+
+} } } // namespace boost::numeric::convdetail
+
+#endif
+//
+///////////////////////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/boost/boost/numeric/conversion/detail/is_subranged.hpp b/boost/boost/numeric/conversion/detail/is_subranged.hpp
new file mode 100644
index 00000000000..0043dc51a22
--- /dev/null
+++ b/boost/boost/numeric/conversion/detail/is_subranged.hpp
@@ -0,0 +1,234 @@
+// © Copyright Fernando Luis Cacciola Carballal 2000-2004
+// Use, modification, and distribution is 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)
+
+// See library home page at http://www.boost.org/libs/numeric/conversion
+//
+// Contact the author at: fernando_cacciola@hotmail.com
+//
+#ifndef BOOST_NUMERIC_CONVERSION_DETAIL_IS_SUBRANGED_FLC_12NOV2002_HPP
+#define BOOST_NUMERIC_CONVERSION_DETAIL_IS_SUBRANGED_FLC_12NOV2002_HPP
+
+#include "boost/config.hpp"
+#include "boost/limits.hpp"
+
+#include "boost/mpl/int.hpp"
+#include "boost/mpl/multiplies.hpp"
+#include "boost/mpl/less.hpp"
+#include "boost/mpl/equal_to.hpp"
+
+#include "boost/type_traits/is_same.hpp"
+
+#include "boost/numeric/conversion/detail/meta.hpp"
+#include "boost/numeric/conversion/detail/int_float_mixture.hpp"
+#include "boost/numeric/conversion/detail/sign_mixture.hpp"
+#include "boost/numeric/conversion/detail/udt_builtin_mixture.hpp"
+
+namespace boost { namespace numeric { namespace convdetail
+{
+ //---------------------------------------------------------------
+ // Implementations of the compile time predicate "T is subranged"
+ //---------------------------------------------------------------
+
+ // for integral to integral conversions
+ template<class T,class S>
+ struct subranged_Sig2Unsig
+ {
+ // Signed to unsigned conversions are 'subranged' because of possible loose
+ // of negative values.
+ typedef mpl::true_ type ;
+ } ;
+
+ // for unsigned integral to signed integral conversions
+ template<class T,class S>
+ struct subranged_Unsig2Sig
+ {
+ // IMPORTANT NOTE:
+ //
+ // This code assumes that signed/unsigned integral values are represented
+ // such that:
+ //
+ // numeric_limits<signed T>::digits + 1 == numeric_limits<unsigned T>::digits
+ //
+ // The '+1' is required since numeric_limits<>::digits gives 1 bit less for signed integral types.
+ //
+ // This fact is used by the following logic:
+ //
+ // if ( (numeric_limits<T>::digits+1) < (2*numeric_limits<S>::digits) )
+ // then the conversion is subranged.
+ //
+
+ typedef mpl::int_< ::std::numeric_limits<S>::digits > S_digits ;
+ typedef mpl::int_< ::std::numeric_limits<T>::digits > T_digits ;
+
+ // T is signed, so take digits+1
+ typedef typename T_digits::next u_T_digits ;
+
+ typedef mpl::int_<2> Two ;
+
+ typedef typename mpl::multiplies<S_digits,Two>::type S_digits_times_2 ;
+
+ typedef typename mpl::less<u_T_digits,S_digits_times_2>::type type ;
+ } ;
+
+ // for integral to integral conversions of the same sign.
+ template<class T,class S>
+ struct subranged_SameSign
+ {
+ // An integral conversion of the same sign is subranged if digits(T) < digits(S).
+
+ typedef mpl::int_< ::std::numeric_limits<S>::digits > S_digits ;
+ typedef mpl::int_< ::std::numeric_limits<T>::digits > T_digits ;
+
+ typedef typename mpl::less<T_digits,S_digits>::type type ;
+ } ;
+
+ // for integral to float conversions
+ template<class T,class S>
+ struct subranged_Int2Float
+ {
+ typedef mpl::false_ type ;
+ } ;
+
+ // for float to integral conversions
+ template<class T,class S>
+ struct subranged_Float2Int
+ {
+ typedef mpl::true_ type ;
+ } ;
+
+ // for float to float conversions
+ template<class T,class S>
+ struct subranged_Float2Float
+ {
+ // If both T and S are floats,
+ // compare exponent bits and if they match, mantisa bits.
+
+ typedef mpl::int_< ::std::numeric_limits<S>::digits > S_mantisa ;
+ typedef mpl::int_< ::std::numeric_limits<T>::digits > T_mantisa ;
+
+ typedef mpl::int_< ::std::numeric_limits<S>::max_exponent > S_exponent ;
+ typedef mpl::int_< ::std::numeric_limits<T>::max_exponent > T_exponent ;
+
+ typedef typename mpl::less<T_exponent,S_exponent>::type T_smaller_exponent ;
+
+ typedef typename mpl::equal_to<T_exponent,S_exponent>::type equal_exponents ;
+
+ typedef mpl::less<T_mantisa,S_mantisa> T_smaller_mantisa ;
+
+ typedef mpl::eval_if<equal_exponents,T_smaller_mantisa,mpl::false_> not_bigger_exponent_case ;
+
+ typedef typename
+ mpl::eval_if<T_smaller_exponent,mpl::true_,not_bigger_exponent_case>::type
+ type ;
+ } ;
+
+ // for Udt to built-in conversions
+ template<class T,class S>
+ struct subranged_Udt2BuiltIn
+ {
+ typedef mpl::true_ type ;
+ } ;
+
+ // for built-in to Udt conversions
+ template<class T,class S>
+ struct subranged_BuiltIn2Udt
+ {
+ typedef mpl::false_ type ;
+ } ;
+
+ // for Udt to Udt conversions
+ template<class T,class S>
+ struct subranged_Udt2Udt
+ {
+ typedef mpl::false_ type ;
+ } ;
+
+ //-------------------------------------------------------------------
+ // Selectors for the implementations of the subranged predicate
+ //-------------------------------------------------------------------
+
+ template<class T,class S>
+ struct get_subranged_Int2Int
+ {
+ typedef subranged_SameSign<T,S> Sig2Sig ;
+ typedef subranged_Sig2Unsig<T,S> Sig2Unsig ;
+ typedef subranged_Unsig2Sig<T,S> Unsig2Sig ;
+ typedef Sig2Sig Unsig2Unsig ;
+
+ typedef typename get_sign_mixture<T,S>::type sign_mixture ;
+
+ typedef typename
+ for_sign_mixture<sign_mixture, Sig2Sig, Sig2Unsig, Unsig2Sig, Unsig2Unsig>::type
+ type ;
+ } ;
+
+ template<class T,class S>
+ struct get_subranged_BuiltIn2BuiltIn
+ {
+ typedef get_subranged_Int2Int<T,S> Int2IntQ ;
+
+ typedef subranged_Int2Float <T,S> Int2Float ;
+ typedef subranged_Float2Int <T,S> Float2Int ;
+ typedef subranged_Float2Float<T,S> Float2Float ;
+
+ typedef mpl::identity<Int2Float > Int2FloatQ ;
+ typedef mpl::identity<Float2Int > Float2IntQ ;
+ typedef mpl::identity<Float2Float> Float2FloatQ ;
+
+ typedef typename get_int_float_mixture<T,S>::type int_float_mixture ;
+
+ typedef for_int_float_mixture<int_float_mixture, Int2IntQ, Int2FloatQ, Float2IntQ, Float2FloatQ> for_ ;
+
+ typedef typename for_::type selected ;
+
+ typedef typename selected::type type ;
+ } ;
+
+ template<class T,class S>
+ struct get_subranged
+ {
+ typedef get_subranged_BuiltIn2BuiltIn<T,S> BuiltIn2BuiltInQ ;
+
+ typedef subranged_BuiltIn2Udt<T,S> BuiltIn2Udt ;
+ typedef subranged_Udt2BuiltIn<T,S> Udt2BuiltIn ;
+ typedef subranged_Udt2Udt<T,S> Udt2Udt ;
+
+ typedef mpl::identity<BuiltIn2Udt> BuiltIn2UdtQ ;
+ typedef mpl::identity<Udt2BuiltIn> Udt2BuiltInQ ;
+ typedef mpl::identity<Udt2Udt > Udt2UdtQ ;
+
+ typedef typename get_udt_builtin_mixture<T,S>::type udt_builtin_mixture ;
+
+ typedef typename
+ for_udt_builtin_mixture<udt_builtin_mixture, BuiltIn2BuiltInQ, BuiltIn2UdtQ, Udt2BuiltInQ, Udt2UdtQ>::type
+ selected ;
+
+ typedef typename selected::type selected2 ;
+
+ typedef typename selected2::type type ;
+ } ;
+
+
+ //-------------------------------------------------------------------
+ // Top level implementation selector.
+ //-------------------------------------------------------------------
+ template<class T, class S>
+ struct get_is_subranged
+ {
+ typedef get_subranged<T,S> non_trivial_case ;
+ typedef mpl::identity<mpl::false_> trivial_case ;
+
+ typedef is_same<T,S> is_trivial ;
+
+ typedef typename mpl::if_<is_trivial,trivial_case,non_trivial_case>::type selected ;
+
+ typedef typename selected::type type ;
+ } ;
+
+} } } // namespace boost::numeric::convdetail
+
+#endif
+
+
diff --git a/boost/boost/numeric/conversion/detail/meta.hpp b/boost/boost/numeric/conversion/detail/meta.hpp
new file mode 100644
index 00000000000..cbe6a4979ab
--- /dev/null
+++ b/boost/boost/numeric/conversion/detail/meta.hpp
@@ -0,0 +1,120 @@
+// © Copyright Fernando Luis Cacciola Carballal 2000-2004
+// Use, modification, and distribution is 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)
+
+// See library home page at http://www.boost.org/libs/numeric/conversion
+//
+// Contact the author at: fernando_cacciola@hotmail.com
+//
+#ifndef BOOST_NUMERIC_CONVERSION_DETAIL_META_FLC_12NOV2002_HPP
+#define BOOST_NUMERIC_CONVERSION_DETAIL_META_FLC_12NOV2002_HPP
+
+#include "boost/type_traits/remove_cv.hpp"
+
+#include "boost/mpl/if.hpp"
+#include "boost/mpl/eval_if.hpp"
+#include "boost/mpl/equal_to.hpp"
+#include "boost/mpl/not.hpp"
+#include "boost/mpl/and.hpp"
+#include "boost/mpl/bool.hpp"
+#include "boost/mpl/identity.hpp"
+
+namespace boost { namespace numeric { namespace convdetail
+{
+ template< class T1, class T2>
+ struct equal_to
+ {
+ #if !defined(__BORLANDC__)
+
+ enum { x = ( BOOST_MPL_AUX_VALUE_WKND(T1)::value == BOOST_MPL_AUX_VALUE_WKND(T2)::value ) };
+
+ BOOST_STATIC_CONSTANT(bool, value = x);
+
+ typedef mpl::bool_<value> type;
+
+ #else
+
+ BOOST_STATIC_CONSTANT(bool, value = (
+ BOOST_MPL_AUX_VALUE_WKND(T1)::value
+ == BOOST_MPL_AUX_VALUE_WKND(T2)::value
+ ));
+
+ typedef mpl::bool_<(
+ BOOST_MPL_AUX_VALUE_WKND(T1)::value
+ == BOOST_MPL_AUX_VALUE_WKND(T2)::value
+ )> type;
+ #endif
+ };
+
+// Metafunction:
+ //
+ // ct_switch4<Value,Case0Val,Case1Val,Case2Val,Case0Type,Case1Type,Case2Type,DefaultType>::type
+ //
+ // {Value,Case(X)Val} are Integral Constants (such as: mpl::int_<>)
+ // {Case(X)Type,DefaultType} are arbitrary types. (not metafunctions)
+ //
+ // Returns Case(X)Type if Val==Case(X)Val; DefaultType otherwise.
+ //
+ template<class Value,
+ class Case0Val,
+ class Case1Val,
+ class Case2Val,
+ class Case0Type,
+ class Case1Type,
+ class Case2Type,
+ class DefaultType
+ >
+ struct ct_switch4
+ {
+ typedef mpl::identity<Case0Type> Case0TypeQ ;
+ typedef mpl::identity<Case1Type> Case1TypeQ ;
+
+ typedef equal_to<Value,Case0Val> is_case0 ;
+ typedef equal_to<Value,Case1Val> is_case1 ;
+ typedef equal_to<Value,Case2Val> is_case2 ;
+
+ typedef mpl::if_<is_case2,Case2Type,DefaultType> choose_2_3Q ;
+ typedef mpl::eval_if<is_case1,Case1TypeQ,choose_2_3Q> choose_1_2_3Q ;
+
+ typedef typename
+ mpl::eval_if<is_case0,Case0TypeQ,choose_1_2_3Q>::type
+ type ;
+ } ;
+
+
+
+
+ // Metafunction:
+ //
+ // for_both<expr0,expr1,TT,TF,FT,FF>::type
+ //
+ // {exp0,expr1} are Boolean Integral Constants
+ // {TT,TF,FT,FF} are aribtrary types. (not metafunctions)
+ //
+ // According to the combined boolean value of 'expr0 && expr1', selects the corresponding type.
+ //
+ template<class expr0, class expr1, class TT, class TF, class FT, class FF>
+ struct for_both
+ {
+ typedef mpl::identity<TF> TF_Q ;
+ typedef mpl::identity<TT> TT_Q ;
+
+ typedef typename mpl::not_<expr0>::type not_expr0 ;
+ typedef typename mpl::not_<expr1>::type not_expr1 ;
+
+ typedef typename mpl::and_<expr0,expr1>::type caseTT ;
+ typedef typename mpl::and_<expr0,not_expr1>::type caseTF ;
+ typedef typename mpl::and_<not_expr0,expr1>::type caseFT ;
+
+ typedef mpl::if_<caseFT,FT,FF> choose_FT_FF_Q ;
+ typedef mpl::eval_if<caseTF,TF_Q,choose_FT_FF_Q> choose_TF_FT_FF_Q ;
+
+ typedef typename mpl::eval_if<caseTT,TT_Q,choose_TF_FT_FF_Q>::type type ;
+ } ;
+
+} } } // namespace boost::numeric::convdetail
+
+#endif
+
+
diff --git a/boost/boost/numeric/conversion/detail/old_numeric_cast.hpp b/boost/boost/numeric/conversion/detail/old_numeric_cast.hpp
new file mode 100644
index 00000000000..47b86d2c8ca
--- /dev/null
+++ b/boost/boost/numeric/conversion/detail/old_numeric_cast.hpp
@@ -0,0 +1,339 @@
+// boost cast.hpp header file ----------------------------------------------//
+
+// (C) Copyright Kevlin Henney and Dave Abrahams 1999.
+// 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/conversion for Documentation.
+
+// Revision History
+// 23 JUN 05 Code extracted from /boost/cast.hpp into this new header.
+// Keeps this legacy version of numeric_cast<> for old compilers
+// wich can't compile the new version in /boost/numeric/conversion/cast.hpp
+// (Fernando Cacciola)
+// 02 Apr 01 Removed BOOST_NO_LIMITS workarounds and included
+// <boost/limits.hpp> instead (the workaround did not
+// actually compile when BOOST_NO_LIMITS was defined in
+// any case, so we loose nothing). (John Maddock)
+// 21 Jan 01 Undid a bug I introduced yesterday. numeric_cast<> never
+// worked with stock GCC; trying to get it to do that broke
+// vc-stlport.
+// 20 Jan 01 Moved BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS to config.hpp.
+// Removed unused BOOST_EXPLICIT_TARGET macro. Moved
+// boost::detail::type to boost/type.hpp. Made it compile with
+// stock gcc again (Dave Abrahams)
+// 29 Nov 00 Remove nested namespace cast, cleanup spacing before Formal
+// Review (Beman Dawes)
+// 19 Oct 00 Fix numeric_cast for floating-point types (Dave Abrahams)
+// 15 Jul 00 Suppress numeric_cast warnings for GCC, Borland and MSVC
+// (Dave Abrahams)
+// 30 Jun 00 More MSVC6 wordarounds. See comments below. (Dave Abrahams)
+// 28 Jun 00 Removed implicit_cast<>. See comment below. (Beman Dawes)
+// 27 Jun 00 More MSVC6 workarounds
+// 15 Jun 00 Add workarounds for MSVC6
+// 2 Feb 00 Remove bad_numeric_cast ";" syntax error (Doncho Angelov)
+// 26 Jan 00 Add missing throw() to bad_numeric_cast::what(0 (Adam Levar)
+// 29 Dec 99 Change using declarations so usages in other namespaces work
+// correctly (Dave Abrahams)
+// 23 Sep 99 Change polymorphic_downcast assert to also detect M.I. errors
+// as suggested Darin Adler and improved by Valentin Bonnard.
+// 2 Sep 99 Remove controversial asserts, simplify, rename.
+// 30 Aug 99 Move to cast.hpp, replace value_cast with numeric_cast,
+// place in nested namespace.
+// 3 Aug 99 Initial version
+
+#ifndef BOOST_OLD_NUMERIC_CAST_HPP
+#define BOOST_OLD_NUMERIC_CAST_HPP
+
+# include <boost/config.hpp>
+# include <cassert>
+# include <typeinfo>
+# include <boost/type.hpp>
+# include <boost/limits.hpp>
+# include <boost/numeric/conversion/converter_policies.hpp>
+
+// It has been demonstrated numerous times that MSVC 6.0 fails silently at link
+// time if you use a template function which has template parameters that don't
+// appear in the function's argument list.
+//
+// TODO: Add this to config.hpp?
+// FLC: This macro is repeated in boost/cast.hpp but only locally (is undefined at the bottom)
+// so is OK to reproduce it here.
+# if defined(BOOST_MSVC) && BOOST_MSVC < 1300
+# define BOOST_EXPLICIT_DEFAULT_TARGET , ::boost::type<Target>* = 0
+# else
+# define BOOST_EXPLICIT_DEFAULT_TARGET
+# endif
+
+namespace boost
+{
+ using numeric::bad_numeric_cast;
+
+// LEGACY numeric_cast [only for some old broken compilers] --------------------------------------//
+
+// Contributed by Kevlin Henney
+
+// numeric_cast ------------------------------------------------------------//
+
+#if !defined(BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS) || defined(BOOST_SGI_CPP_LIMITS)
+
+ namespace detail
+ {
+ template <class T>
+ struct signed_numeric_limits : std::numeric_limits<T>
+ {
+ static inline T min BOOST_PREVENT_MACRO_SUBSTITUTION ()
+ {
+ return (std::numeric_limits<T>::min)() >= 0
+ // unary minus causes integral promotion, thus the static_cast<>
+ ? static_cast<T>(-(std::numeric_limits<T>::max)())
+ : (std::numeric_limits<T>::min)();
+ };
+ };
+
+ // Move to namespace boost in utility.hpp?
+ template <class T, bool specialized>
+ struct fixed_numeric_limits_base
+ : public if_true< std::numeric_limits<T>::is_signed >
+ ::BOOST_NESTED_TEMPLATE then< signed_numeric_limits<T>,
+ std::numeric_limits<T>
+ >::type
+ {};
+
+ template <class T>
+ struct fixed_numeric_limits
+ : fixed_numeric_limits_base<T,(std::numeric_limits<T>::is_specialized)>
+ {};
+
+# ifdef BOOST_HAS_LONG_LONG
+ // cover implementations which supply no specialization for long
+ // long / unsigned long long. Not intended to be full
+ // numeric_limits replacements, but good enough for numeric_cast<>
+ template <>
+ struct fixed_numeric_limits_base< ::boost::long_long_type, false>
+ {
+ BOOST_STATIC_CONSTANT(bool, is_specialized = true);
+ BOOST_STATIC_CONSTANT(bool, is_signed = true);
+ static ::boost::long_long_type max BOOST_PREVENT_MACRO_SUBSTITUTION ()
+ {
+# ifdef LONGLONG_MAX
+ return LONGLONG_MAX;
+# else
+ return 9223372036854775807LL; // hope this is portable
+# endif
+ }
+
+ static ::boost::long_long_type min BOOST_PREVENT_MACRO_SUBSTITUTION ()
+ {
+# ifdef LONGLONG_MIN
+ return LONGLONG_MIN;
+# else
+ return -( 9223372036854775807LL )-1; // hope this is portable
+# endif
+ }
+ };
+
+ template <>
+ struct fixed_numeric_limits_base< ::boost::ulong_long_type, false>
+ {
+ BOOST_STATIC_CONSTANT(bool, is_specialized = true);
+ BOOST_STATIC_CONSTANT(bool, is_signed = false);
+ static ::boost::ulong_long_type max BOOST_PREVENT_MACRO_SUBSTITUTION ()
+ {
+# ifdef ULONGLONG_MAX
+ return ULONGLONG_MAX;
+# else
+ return 0xffffffffffffffffULL; // hope this is portable
+# endif
+ }
+
+ static ::boost::ulong_long_type min BOOST_PREVENT_MACRO_SUBSTITUTION () { return 0; }
+ };
+# endif
+ } // namespace detail
+
+// less_than_type_min -
+ // x_is_signed should be numeric_limits<X>::is_signed
+ // y_is_signed should be numeric_limits<Y>::is_signed
+ // y_min should be numeric_limits<Y>::min()
+ //
+ // check(x, y_min) returns true iff x < y_min without invoking comparisons
+ // between signed and unsigned values.
+ //
+ // "poor man's partial specialization" is in use here.
+ template <bool x_is_signed, bool y_is_signed>
+ struct less_than_type_min
+ {
+ template <class X, class Y>
+ static bool check(X x, Y y_min)
+ { return x < y_min; }
+ };
+
+ template <>
+ struct less_than_type_min<false, true>
+ {
+ template <class X, class Y>
+ static bool check(X, Y)
+ { return false; }
+ };
+
+ template <>
+ struct less_than_type_min<true, false>
+ {
+ template <class X, class Y>
+ static bool check(X x, Y)
+ { return x < 0; }
+ };
+
+ // greater_than_type_max -
+ // same_sign should be:
+ // numeric_limits<X>::is_signed == numeric_limits<Y>::is_signed
+ // y_max should be numeric_limits<Y>::max()
+ //
+ // check(x, y_max) returns true iff x > y_max without invoking comparisons
+ // between signed and unsigned values.
+ //
+ // "poor man's partial specialization" is in use here.
+ template <bool same_sign, bool x_is_signed>
+ struct greater_than_type_max;
+
+ template<>
+ struct greater_than_type_max<true, true>
+ {
+ template <class X, class Y>
+ static inline bool check(X x, Y y_max)
+ { return x > y_max; }
+ };
+
+ template <>
+ struct greater_than_type_max<false, true>
+ {
+ // What does the standard say about this? I think it's right, and it
+ // will work with every compiler I know of.
+ template <class X, class Y>
+ static inline bool check(X x, Y)
+ { return x >= 0 && static_cast<X>(static_cast<Y>(x)) != x; }
+
+# if defined(BOOST_MSVC) && BOOST_MSVC < 1300
+ // MSVC6 can't static_cast unsigned __int64 -> floating types
+# define BOOST_UINT64_CAST(src_type) \
+ static inline bool check(src_type x, unsigned __int64) \
+ { \
+ if (x < 0) return false; \
+ unsigned __int64 y = static_cast<unsigned __int64>(x); \
+ bool odd = y & 0x1; \
+ __int64 div2 = static_cast<__int64>(y >> 1); \
+ return ((static_cast<src_type>(div2) * 2.0) + odd) != x; \
+ }
+
+ BOOST_UINT64_CAST(long double);
+ BOOST_UINT64_CAST(double);
+ BOOST_UINT64_CAST(float);
+# undef BOOST_UINT64_CAST
+# endif
+ };
+
+ template<>
+ struct greater_than_type_max<true, false>
+ {
+ template <class X, class Y>
+ static inline bool check(X x, Y y_max)
+ { return x > y_max; }
+ };
+
+ template <>
+ struct greater_than_type_max<false, false>
+ {
+ // What does the standard say about this? I think it's right, and it
+ // will work with every compiler I know of.
+ template <class X, class Y>
+ static inline bool check(X x, Y)
+ { return static_cast<X>(static_cast<Y>(x)) != x; }
+ };
+
+#else // use #pragma hacks if available
+
+ namespace detail
+ {
+# if BOOST_MSVC
+# pragma warning(push)
+# pragma warning(disable : 4018)
+# pragma warning(disable : 4146)
+#elif defined(__BORLANDC__)
+# pragma option push -w-8041
+# endif
+
+ // Move to namespace boost in utility.hpp?
+ template <class T>
+ struct fixed_numeric_limits : public std::numeric_limits<T>
+ {
+ static inline T min BOOST_PREVENT_MACRO_SUBSTITUTION ()
+ {
+ return std::numeric_limits<T>::is_signed && (std::numeric_limits<T>::min)() >= 0
+ ? T(-(std::numeric_limits<T>::max)()) : (std::numeric_limits<T>::min)();
+ }
+ };
+
+# if BOOST_MSVC
+# pragma warning(pop)
+#elif defined(__BORLANDC__)
+# pragma option pop
+# endif
+ } // namespace detail
+
+#endif
+
+ template<typename Target, typename Source>
+ inline Target numeric_cast(Source arg BOOST_EXPLICIT_DEFAULT_TARGET)
+ {
+ // typedefs abbreviating respective trait classes
+ typedef detail::fixed_numeric_limits<Source> arg_traits;
+ typedef detail::fixed_numeric_limits<Target> result_traits;
+
+#if defined(BOOST_STRICT_CONFIG) \
+ || (!defined(__HP_aCC) || __HP_aCC > 33900) \
+ && (!defined(BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS) \
+ || defined(BOOST_SGI_CPP_LIMITS))
+ // typedefs that act as compile time assertions
+ // (to be replaced by boost compile time assertions
+ // as and when they become available and are stable)
+ typedef bool argument_must_be_numeric[arg_traits::is_specialized];
+ typedef bool result_must_be_numeric[result_traits::is_specialized];
+
+ const bool arg_is_signed = arg_traits::is_signed;
+ const bool result_is_signed = result_traits::is_signed;
+ const bool same_sign = arg_is_signed == result_is_signed;
+
+ if (less_than_type_min<arg_is_signed, result_is_signed>::check(arg, (result_traits::min)())
+ || greater_than_type_max<same_sign, arg_is_signed>::check(arg, (result_traits::max)())
+ )
+
+#else // We need to use #pragma hacks if available
+
+# if BOOST_MSVC
+# pragma warning(push)
+# pragma warning(disable : 4018)
+#elif defined(__BORLANDC__)
+#pragma option push -w-8012
+# endif
+ if ((arg < 0 && !result_traits::is_signed) // loss of negative range
+ || (arg_traits::is_signed && arg < (result_traits::min)()) // underflow
+ || arg > (result_traits::max)()) // overflow
+# if BOOST_MSVC
+# pragma warning(pop)
+#elif defined(__BORLANDC__)
+#pragma option pop
+# endif
+#endif
+ {
+ throw bad_numeric_cast();
+ }
+ return static_cast<Target>(arg);
+ } // numeric_cast
+
+# undef BOOST_EXPLICIT_DEFAULT_TARGET
+
+} // namespace boost
+
+#endif // BOOST_OLD_NUMERIC_CAST_HPP
diff --git a/boost/boost/numeric/conversion/detail/sign_mixture.hpp b/boost/boost/numeric/conversion/detail/sign_mixture.hpp
new file mode 100644
index 00000000000..b2f1c7c061f
--- /dev/null
+++ b/boost/boost/numeric/conversion/detail/sign_mixture.hpp
@@ -0,0 +1,72 @@
+// © Copyright Fernando Luis Cacciola Carballal 2000-2004
+// Use, modification, and distribution is 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)
+
+// See library home page at http://www.boost.org/libs/numeric/conversion
+//
+// Contact the author at: fernando_cacciola@hotmail.com
+//
+#ifndef BOOST_NUMERIC_CONVERSION_DETAIL_SIGN_MIXTURE_FLC_12NOV2002_HPP
+#define BOOST_NUMERIC_CONVERSION_DETAIL_SIGN_MIXTURE_FLC_12NOV2002_HPP
+
+#include "boost/config.hpp"
+#include "boost/limits.hpp"
+
+#include "boost/numeric/conversion/sign_mixture_enum.hpp"
+#include "boost/numeric/conversion/detail/meta.hpp"
+
+#include "boost/mpl/integral_c.hpp"
+
+namespace boost { namespace numeric { namespace convdetail
+{
+ // Integral Constants for 'SignMixture'
+ typedef mpl::integral_c<sign_mixture_enum, unsigned_to_unsigned> unsig2unsig_c ;
+ typedef mpl::integral_c<sign_mixture_enum, signed_to_signed> sig2sig_c ;
+ typedef mpl::integral_c<sign_mixture_enum, signed_to_unsigned> sig2unsig_c ;
+ typedef mpl::integral_c<sign_mixture_enum, unsigned_to_signed> unsig2sig_c ;
+
+ // Metafunction:
+ //
+ // get_sign_mixture<T,S>::type
+ //
+ // Selects the appropriate SignMixture Integral Constant for the combination T,S.
+ //
+ template<class T,class S>
+ struct get_sign_mixture
+ {
+ typedef mpl::bool_< ::std::numeric_limits<S>::is_signed > S_signed ;
+ typedef mpl::bool_< ::std::numeric_limits<T>::is_signed > T_signed ;
+
+ typedef typename
+ for_both<S_signed, T_signed, sig2sig_c, sig2unsig_c, unsig2sig_c, unsig2unsig_c>::type
+ type ;
+ } ;
+
+ // Metafunction:
+ //
+ // for_sign_mixture<SignMixture,Sig2Sig,Sig2Unsig,Unsig2Sig,Unsig2Unsig>::type
+ //
+ // {SignMixture} is one of the Integral Constants for SignMixture, declared above.
+ // {Sig2Sig,Sig2Unsig,Unsig2Sig,Unsig2Unsig} are aribtrary types. (not metafunctions)
+ //
+ // According to the value of 'SignMixture', selects the corresponding type.
+ //
+ template<class SignMixture, class Sig2Sig, class Sig2Unsig, class Unsig2Sig, class Unsig2Unsig>
+ struct for_sign_mixture
+ {
+ typedef typename
+ ct_switch4<SignMixture
+ , sig2sig_c, sig2unsig_c, unsig2sig_c // default
+ , Sig2Sig , Sig2Unsig , Unsig2Sig , Unsig2Unsig
+ >::type
+ type ;
+ } ;
+
+} } } // namespace boost::numeric::convdetail
+
+#endif
+//
+///////////////////////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/boost/boost/numeric/conversion/detail/udt_builtin_mixture.hpp b/boost/boost/numeric/conversion/detail/udt_builtin_mixture.hpp
new file mode 100644
index 00000000000..1a197ee89e5
--- /dev/null
+++ b/boost/boost/numeric/conversion/detail/udt_builtin_mixture.hpp
@@ -0,0 +1,69 @@
+// © Copyright Fernando Luis Cacciola Carballal 2000-2004
+// Use, modification, and distribution is 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)
+
+// See library home page at http://www.boost.org/libs/numeric/conversion
+//
+// Contact the author at: fernando_cacciola@hotmail.com
+//
+#ifndef BOOST_NUMERIC_CONVERSION_DETAIL_UDT_BUILTIN_MIXTURE_FLC_12NOV2002_HPP
+#define BOOST_NUMERIC_CONVERSION_DETAIL_UDT_BUILTIN_MIXTURE_FLC_12NOV2002_HPP
+
+#include "boost/type_traits/is_arithmetic.hpp"
+
+#include "boost/numeric/conversion/udt_builtin_mixture_enum.hpp"
+#include "boost/numeric/conversion/detail/meta.hpp"
+
+#include "boost/mpl/integral_c.hpp"
+
+namespace boost { namespace numeric { namespace convdetail
+{
+ // Integral Constants for 'UdtMixture'
+ typedef mpl::integral_c<udt_builtin_mixture_enum, builtin_to_builtin> builtin2builtin_c ;
+ typedef mpl::integral_c<udt_builtin_mixture_enum, builtin_to_udt> builtin2udt_c ;
+ typedef mpl::integral_c<udt_builtin_mixture_enum, udt_to_builtin> udt2builtin_c ;
+ typedef mpl::integral_c<udt_builtin_mixture_enum, udt_to_udt> udt2udt_c ;
+
+ // Metafunction:
+ //
+ // for_udt_mixture<UdtMixture,BuiltIn2BuiltIn,BuiltIn2Udt,Udt2BuiltIn,Udt2Udt>::type
+ //
+ // {UdtMixture} is one of the Integral Constants for UdMixture, declared above.
+ // {BuiltIn2BuiltIn,BuiltIn2Udt,Udt2BuiltIn,Udt2Udt} are aribtrary types. (not metafunctions)
+ //
+ // According to the value of 'UdtMixture', selects the corresponding type.
+ //
+ template<class UdtMixture, class BuiltIn2BuiltIn, class BuiltIn2Udt, class Udt2BuiltIn, class Udt2Udt>
+ struct for_udt_builtin_mixture
+ {
+ typedef typename
+ ct_switch4<UdtMixture
+ , builtin2builtin_c, builtin2udt_c, udt2builtin_c // default
+ , BuiltIn2BuiltIn , BuiltIn2Udt , Udt2BuiltIn , Udt2Udt
+ >::type
+ type ;
+ } ;
+
+ // Metafunction:
+ //
+ // get_udt_mixture<T,S>::type
+ //
+ // Selects the appropriate UdtMixture Integral Constant for the combination T,S.
+ //
+ template<class T,class S>
+ struct get_udt_builtin_mixture
+ {
+ typedef is_arithmetic<S> S_builtin ;
+ typedef is_arithmetic<T> T_builtin ;
+
+ typedef typename
+ for_both<S_builtin, T_builtin, builtin2builtin_c, builtin2udt_c, udt2builtin_c, udt2udt_c>::type
+ type ;
+ } ;
+
+} } } // namespace boost::numeric::convdetail
+
+#endif
+
+
diff --git a/boost/boost/numeric/conversion/int_float_mixture.hpp b/boost/boost/numeric/conversion/int_float_mixture.hpp
new file mode 100644
index 00000000000..2a5844cdb8b
--- /dev/null
+++ b/boost/boost/numeric/conversion/int_float_mixture.hpp
@@ -0,0 +1,30 @@
+// © Copyright Fernando Luis Cacciola Carballal 2000-2004
+// Use, modification, and distribution is 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)
+
+// See library home page at http://www.boost.org/libs/numeric/conversion
+//
+// Contact the author at: fernando_cacciola@hotmail.com
+//
+#ifndef BOOST_NUMERIC_CONVERSION_INT_FLOAT_MIXTURE_FLC_12NOV2002_HPP
+#define BOOST_NUMERIC_CONVERSION_INT_FLOAT_MIXTURE_FLC_12NOV2002_HPP
+
+#include "boost/numeric/conversion/detail/int_float_mixture.hpp"
+
+namespace boost { namespace numeric
+{
+
+template<class T, class S>
+struct int_float_mixture
+ : convdetail::get_int_float_mixture< BOOST_DEDUCED_TYPENAME remove_cv<T>::type
+ ,BOOST_DEDUCED_TYPENAME remove_cv<S>::type
+ >::type {} ;
+
+} } // namespace boost::numeric
+
+#endif
+//
+///////////////////////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/boost/boost/numeric/conversion/int_float_mixture_enum.hpp b/boost/boost/numeric/conversion/int_float_mixture_enum.hpp
new file mode 100644
index 00000000000..f6bdb7993a7
--- /dev/null
+++ b/boost/boost/numeric/conversion/int_float_mixture_enum.hpp
@@ -0,0 +1,29 @@
+// © Copyright Fernando Luis Cacciola Carballal 2000-2004
+// Use, modification, and distribution is 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)
+
+// See library home page at http://www.boost.org/libs/numeric/conversion
+//
+// Contact the author at: fernando_cacciola@hotmail.com
+//
+#ifndef BOOST_NUMERIC_CONVERSION_INT_FLOAT_MIXTURE_ENUM_FLC_12NOV2002_HPP
+#define BOOST_NUMERIC_CONVERSION_INT_FLOAT_MIXTURE_ENUM_FLC_12NOV2002_HPP
+
+namespace boost { namespace numeric
+{
+ enum int_float_mixture_enum
+ {
+ integral_to_integral
+ ,integral_to_float
+ ,float_to_integral
+ ,float_to_float
+ } ;
+
+} } // namespace boost::numeric
+
+#endif
+//
+///////////////////////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/boost/boost/numeric/conversion/is_subranged.hpp b/boost/boost/numeric/conversion/is_subranged.hpp
new file mode 100644
index 00000000000..339ca5504c0
--- /dev/null
+++ b/boost/boost/numeric/conversion/is_subranged.hpp
@@ -0,0 +1,27 @@
+// © Copyright Fernando Luis Cacciola Carballal 2000-2004
+// Use, modification, and distribution is 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)
+
+// See library home page at http://www.boost.org/libs/numeric/conversion
+//
+// Contact the author at: fernando_cacciola@hotmail.com
+//
+#ifndef BOOST_NUMERIC_CONVERSION_IS_SUBRANGED_FLC_12NOV2002_HPP
+#define BOOST_NUMERIC_CONVERSION_IS_SUBRANGED_FLC_12NOV2002_HPP
+
+#include "boost/numeric/conversion/detail/is_subranged.hpp"
+
+namespace boost { namespace numeric {
+
+template<class T, class S>
+struct is_subranged
+ : convdetail::get_is_subranged< BOOST_DEDUCED_TYPENAME remove_cv<T>::type
+ ,BOOST_DEDUCED_TYPENAME remove_cv<S>::type
+ >::type {} ;
+
+} } // namespace boost::numeric
+
+#endif
+
+
diff --git a/boost/boost/numeric/conversion/sign_mixture.hpp b/boost/boost/numeric/conversion/sign_mixture.hpp
new file mode 100644
index 00000000000..90f50d78e64
--- /dev/null
+++ b/boost/boost/numeric/conversion/sign_mixture.hpp
@@ -0,0 +1,30 @@
+// © Copyright Fernando Luis Cacciola Carballal 2000-2004
+// Use, modification, and distribution is 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)
+
+// See library home page at http://www.boost.org/libs/numeric/conversion
+//
+// Contact the author at: fernando_cacciola@hotmail.com
+//
+#ifndef BOOST_NUMERIC_CONVERSION_SIGN_MIXTURE_FLC_12NOV2002_HPP
+#define BOOST_NUMERIC_CONVERSION_SIGN_MIXTURE_FLC_12NOV2002_HPP
+
+#include "boost/numeric/conversion/detail/sign_mixture.hpp"
+
+namespace boost { namespace numeric
+{
+
+template<class T, class S>
+struct sign_mixture
+ : convdetail::get_sign_mixture< BOOST_DEDUCED_TYPENAME remove_cv<T>::type
+ ,BOOST_DEDUCED_TYPENAME remove_cv<S>::type
+ >::type {} ;
+
+} } // namespace boost::numeric
+
+#endif
+//
+///////////////////////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/boost/boost/numeric/conversion/sign_mixture_enum.hpp b/boost/boost/numeric/conversion/sign_mixture_enum.hpp
new file mode 100644
index 00000000000..6edd5693746
--- /dev/null
+++ b/boost/boost/numeric/conversion/sign_mixture_enum.hpp
@@ -0,0 +1,29 @@
+// © Copyright Fernando Luis Cacciola Carballal 2000-2004
+// Use, modification, and distribution is 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)
+
+// See library home page at http://www.boost.org/libs/numeric/conversion
+//
+// Contact the author at: fernando_cacciola@hotmail.com
+//
+#ifndef BOOST_NUMERIC_CONVERSION_SIGN_MIXTURE_ENUM_FLC_12NOV2002_HPP
+#define BOOST_NUMERIC_CONVERSION_SIGN_MIXTURE_ENUM_FLC_12NOV2002_HPP
+
+namespace boost { namespace numeric
+{
+ enum sign_mixture_enum
+ {
+ unsigned_to_unsigned
+ ,signed_to_signed
+ ,signed_to_unsigned
+ ,unsigned_to_signed
+ } ;
+
+} } // namespace boost::numeric
+
+#endif
+//
+///////////////////////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/boost/boost/numeric/conversion/udt_builtin_mixture.hpp b/boost/boost/numeric/conversion/udt_builtin_mixture.hpp
new file mode 100644
index 00000000000..606df60d74b
--- /dev/null
+++ b/boost/boost/numeric/conversion/udt_builtin_mixture.hpp
@@ -0,0 +1,28 @@
+// © Copyright Fernando Luis Cacciola Carballal 2000-2004
+// Use, modification, and distribution is 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)
+
+// See library home page at http://www.boost.org/libs/numeric/conversion
+//
+// Contact the author at: fernando_cacciola@hotmail.com
+//
+#ifndef BOOST_NUMERIC_CONVERSION_UDT_BUILTIN_MIXTURE_FLC_12NOV2002_HPP
+#define BOOST_NUMERIC_CONVERSION_UDT_BUILTIN_MIXTURE_FLC_12NOV2002_HPP
+
+#include "boost/numeric/conversion/detail/udt_builtin_mixture.hpp"
+
+namespace boost { namespace numeric
+{
+
+template<class T, class S>
+struct udt_builtin_mixture
+ : convdetail::get_udt_builtin_mixture< BOOST_DEDUCED_TYPENAME remove_cv<T>::type
+ ,BOOST_DEDUCED_TYPENAME remove_cv<S>::type
+ >::type {} ;
+
+} } // namespace boost::numeric
+
+#endif
+
+
diff --git a/boost/boost/numeric/conversion/udt_builtin_mixture_enum.hpp b/boost/boost/numeric/conversion/udt_builtin_mixture_enum.hpp
new file mode 100644
index 00000000000..d9605999b45
--- /dev/null
+++ b/boost/boost/numeric/conversion/udt_builtin_mixture_enum.hpp
@@ -0,0 +1,26 @@
+// © Copyright Fernando Luis Cacciola Carballal 2000-2004
+// Use, modification, and distribution is 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)
+
+// See library home page at http://www.boost.org/libs/numeric/conversion
+//
+// Contact the author at: fernando_cacciola@hotmail.com
+//
+#ifndef BOOST_NUMERIC_CONVERSION_UDT_BUILTIN_MIXTURE_ENUM_FLC_12NOV2002_HPP
+#define BOOST_NUMERIC_CONVERSION_UDT_BUILTIN_MIXTURE_ENUM_FLC_12NOV2002_HPP
+
+namespace boost { namespace numeric
+{
+ enum udt_builtin_mixture_enum
+ {
+ builtin_to_builtin
+ ,builtin_to_udt
+ ,udt_to_builtin
+ ,udt_to_udt
+ } ;
+
+} } // namespace boost::numeric
+
+#endif
+
diff --git a/boost/boost/numeric/interval.hpp b/boost/boost/numeric/interval.hpp
new file mode 100644
index 00000000000..e6f976df038
--- /dev/null
+++ b/boost/boost/numeric/interval.hpp
@@ -0,0 +1,32 @@
+/* Boost interval.hpp header file
+ *
+ * Copyright 2000 Jens Maurer
+ * Copyright 2002 Hervé Brönnimann, Guillaume Melquiond, Sylvain Pion
+ *
+ * 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_NUMERIC_INTERVAL_HPP
+#define BOOST_NUMERIC_INTERVAL_HPP
+
+#include <boost/limits.hpp>
+#include <boost/numeric/interval/interval.hpp>
+#include <boost/numeric/interval/policies.hpp>
+
+#include <boost/numeric/interval/hw_rounding.hpp>
+#include <boost/numeric/interval/rounded_arith.hpp>
+#include <boost/numeric/interval/rounded_transc.hpp>
+#include <boost/numeric/interval/constants.hpp>
+
+#include <boost/numeric/interval/checking.hpp>
+#include <boost/numeric/interval/compare.hpp>
+#include <boost/numeric/interval/utility.hpp>
+
+#include <boost/numeric/interval/arith.hpp>
+#include <boost/numeric/interval/arith2.hpp>
+#include <boost/numeric/interval/arith3.hpp>
+#include <boost/numeric/interval/transc.hpp>
+
+#endif // BOOST_NUMERIC_INTERVAL_HPP
diff --git a/boost/boost/numeric/interval/arith.hpp b/boost/boost/numeric/interval/arith.hpp
new file mode 100644
index 00000000000..c0320c45ef9
--- /dev/null
+++ b/boost/boost/numeric/interval/arith.hpp
@@ -0,0 +1,305 @@
+/* Boost interval/arith.hpp template implementation file
+ *
+ * Copyright 2000 Jens Maurer
+ * Copyright 2002-2003 Hervé Brönnimann, Guillaume Melquiond, Sylvain Pion
+ *
+ * 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_NUMERIC_INTERVAL_ARITH_HPP
+#define BOOST_NUMERIC_INTERVAL_ARITH_HPP
+
+#include <boost/config.hpp>
+#include <boost/numeric/interval/interval.hpp>
+#include <boost/numeric/interval/detail/bugs.hpp>
+#include <boost/numeric/interval/detail/test_input.hpp>
+#include <boost/numeric/interval/detail/division.hpp>
+#include <algorithm>
+
+namespace boost {
+namespace numeric {
+
+/*
+ * Basic arithmetic operators
+ */
+
+template<class T, class Policies> inline
+const interval<T, Policies>& operator+(const interval<T, Policies>& x)
+{
+ return x;
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> operator-(const interval<T, Policies>& x)
+{
+ if (interval_lib::detail::test_input(x))
+ return interval<T, Policies>::empty();
+ return interval<T, Policies>(-x.upper(), -x.lower(), true);
+}
+
+template<class T, class Policies> inline
+interval<T, Policies>& interval<T, Policies>::operator+=(const interval<T, Policies>& r)
+{
+ if (interval_lib::detail::test_input(*this, r))
+ set_empty();
+ else {
+ typename Policies::rounding rnd;
+ set(rnd.add_down(low, r.low), rnd.add_up(up, r.up));
+ }
+ return *this;
+}
+
+template<class T, class Policies> inline
+interval<T, Policies>& interval<T, Policies>::operator+=(const T& r)
+{
+ if (interval_lib::detail::test_input(*this, r))
+ set_empty();
+ else {
+ typename Policies::rounding rnd;
+ set(rnd.add_down(low, r), rnd.add_up(up, r));
+ }
+ return *this;
+}
+
+template<class T, class Policies> inline
+interval<T, Policies>& interval<T, Policies>::operator-=(const interval<T, Policies>& r)
+{
+ if (interval_lib::detail::test_input(*this, r))
+ set_empty();
+ else {
+ typename Policies::rounding rnd;
+ set(rnd.sub_down(low, r.up), rnd.sub_up(up, r.low));
+ }
+ return *this;
+}
+
+template<class T, class Policies> inline
+interval<T, Policies>& interval<T, Policies>::operator-=(const T& r)
+{
+ if (interval_lib::detail::test_input(*this, r))
+ set_empty();
+ else {
+ typename Policies::rounding rnd;
+ set(rnd.sub_down(low, r), rnd.sub_up(up, r));
+ }
+ return *this;
+}
+
+template<class T, class Policies> inline
+interval<T, Policies>& interval<T, Policies>::operator*=(const interval<T, Policies>& r)
+{
+ return *this = *this * r;
+}
+
+template<class T, class Policies> inline
+interval<T, Policies>& interval<T, Policies>::operator*=(const T& r)
+{
+ return *this = r * *this;
+}
+
+template<class T, class Policies> inline
+interval<T, Policies>& interval<T, Policies>::operator/=(const interval<T, Policies>& r)
+{
+ return *this = *this / r;
+}
+
+template<class T, class Policies> inline
+interval<T, Policies>& interval<T, Policies>::operator/=(const T& r)
+{
+ return *this = *this / r;
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> operator+(const interval<T, Policies>& x,
+ const interval<T, Policies>& y)
+{
+ if (interval_lib::detail::test_input(x, y))
+ return interval<T, Policies>::empty();
+ typename Policies::rounding rnd;
+ return interval<T,Policies>(rnd.add_down(x.lower(), y.lower()),
+ rnd.add_up (x.upper(), y.upper()), true);
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> operator+(const T& x, const interval<T, Policies>& y)
+{
+ if (interval_lib::detail::test_input(x, y))
+ return interval<T, Policies>::empty();
+ typename Policies::rounding rnd;
+ return interval<T,Policies>(rnd.add_down(x, y.lower()),
+ rnd.add_up (x, y.upper()), true);
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> operator+(const interval<T, Policies>& x, const T& y)
+{ return y + x; }
+
+template<class T, class Policies> inline
+interval<T, Policies> operator-(const interval<T, Policies>& x,
+ const interval<T, Policies>& y)
+{
+ if (interval_lib::detail::test_input(x, y))
+ return interval<T, Policies>::empty();
+ typename Policies::rounding rnd;
+ return interval<T,Policies>(rnd.sub_down(x.lower(), y.upper()),
+ rnd.sub_up (x.upper(), y.lower()), true);
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> operator-(const T& x, const interval<T, Policies>& y)
+{
+ if (interval_lib::detail::test_input(x, y))
+ return interval<T, Policies>::empty();
+ typename Policies::rounding rnd;
+ return interval<T,Policies>(rnd.sub_down(x, y.upper()),
+ rnd.sub_up (x, y.lower()), true);
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> operator-(const interval<T, Policies>& x, const T& y)
+{
+ if (interval_lib::detail::test_input(x, y))
+ return interval<T, Policies>::empty();
+ typename Policies::rounding rnd;
+ return interval<T,Policies>(rnd.sub_down(x.lower(), y),
+ rnd.sub_up (x.upper(), y), true);
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> operator*(const interval<T, Policies>& x,
+ const interval<T, Policies>& y)
+{
+ BOOST_USING_STD_MIN();
+ BOOST_USING_STD_MAX();
+ typedef interval<T, Policies> I;
+ if (interval_lib::detail::test_input(x, y))
+ return I::empty();
+ typename Policies::rounding rnd;
+ const T& xl = x.lower();
+ const T& xu = x.upper();
+ const T& yl = y.lower();
+ const T& yu = y.upper();
+
+ if (interval_lib::user::is_neg(xl))
+ if (interval_lib::user::is_pos(xu))
+ if (interval_lib::user::is_neg(yl))
+ if (interval_lib::user::is_pos(yu)) // M * M
+ return I(min BOOST_PREVENT_MACRO_SUBSTITUTION(rnd.mul_down(xl, yu), rnd.mul_down(xu, yl)),
+ max BOOST_PREVENT_MACRO_SUBSTITUTION(rnd.mul_up (xl, yl), rnd.mul_up (xu, yu)), true);
+ else // M * N
+ return I(rnd.mul_down(xu, yl), rnd.mul_up(xl, yl), true);
+ else
+ if (interval_lib::user::is_pos(yu)) // M * P
+ return I(rnd.mul_down(xl, yu), rnd.mul_up(xu, yu), true);
+ else // M * Z
+ return I(static_cast<T>(0), static_cast<T>(0), true);
+ else
+ if (interval_lib::user::is_neg(yl))
+ if (interval_lib::user::is_pos(yu)) // N * M
+ return I(rnd.mul_down(xl, yu), rnd.mul_up(xl, yl), true);
+ else // N * N
+ return I(rnd.mul_down(xu, yu), rnd.mul_up(xl, yl), true);
+ else
+ if (interval_lib::user::is_pos(yu)) // N * P
+ return I(rnd.mul_down(xl, yu), rnd.mul_up(xu, yl), true);
+ else // N * Z
+ return I(static_cast<T>(0), static_cast<T>(0), true);
+ else
+ if (interval_lib::user::is_pos(xu))
+ if (interval_lib::user::is_neg(yl))
+ if (interval_lib::user::is_pos(yu)) // P * M
+ return I(rnd.mul_down(xu, yl), rnd.mul_up(xu, yu), true);
+ else // P * N
+ return I(rnd.mul_down(xu, yl), rnd.mul_up(xl, yu), true);
+ else
+ if (interval_lib::user::is_pos(yu)) // P * P
+ return I(rnd.mul_down(xl, yl), rnd.mul_up(xu, yu), true);
+ else // P * Z
+ return I(static_cast<T>(0), static_cast<T>(0), true);
+ else // Z * ?
+ return I(static_cast<T>(0), static_cast<T>(0), true);
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> operator*(const T& x, const interval<T, Policies>& y)
+{
+ typedef interval<T, Policies> I;
+ if (interval_lib::detail::test_input(x, y))
+ return I::empty();
+ typename Policies::rounding rnd;
+ const T& yl = y.lower();
+ const T& yu = y.upper();
+ // x is supposed not to be infinite
+ if (interval_lib::user::is_neg(x))
+ return I(rnd.mul_down(x, yu), rnd.mul_up(x, yl), true);
+ else if (interval_lib::user::is_zero(x))
+ return I(static_cast<T>(0), static_cast<T>(0), true);
+ else
+ return I(rnd.mul_down(x, yl), rnd.mul_up(x, yu), true);
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> operator*(const interval<T, Policies>& x, const T& y)
+{ return y * x; }
+
+template<class T, class Policies> inline
+interval<T, Policies> operator/(const interval<T, Policies>& x,
+ const interval<T, Policies>& y)
+{
+ if (interval_lib::detail::test_input(x, y))
+ return interval<T, Policies>::empty();
+ if (zero_in(y))
+ if (!interval_lib::user::is_zero(y.lower()))
+ if (!interval_lib::user::is_zero(y.upper()))
+ return interval_lib::detail::div_zero(x);
+ else
+ return interval_lib::detail::div_negative(x, y.lower());
+ else
+ if (!interval_lib::user::is_zero(y.upper()))
+ return interval_lib::detail::div_positive(x, y.upper());
+ else
+ return interval<T, Policies>::empty();
+ else
+ return interval_lib::detail::div_non_zero(x, y);
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> operator/(const T& x, const interval<T, Policies>& y)
+{
+ if (interval_lib::detail::test_input(x, y))
+ return interval<T, Policies>::empty();
+ if (zero_in(y))
+ if (!interval_lib::user::is_zero(y.lower()))
+ if (!interval_lib::user::is_zero(y.upper()))
+ return interval_lib::detail::div_zero<T, Policies>(x);
+ else
+ return interval_lib::detail::div_negative<T, Policies>(x, y.lower());
+ else
+ if (!interval_lib::user::is_zero(y.upper()))
+ return interval_lib::detail::div_positive<T, Policies>(x, y.upper());
+ else
+ return interval<T, Policies>::empty();
+ else
+ return interval_lib::detail::div_non_zero(x, y);
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> operator/(const interval<T, Policies>& x, const T& y)
+{
+ if (interval_lib::detail::test_input(x, y) || interval_lib::user::is_zero(y))
+ return interval<T, Policies>::empty();
+ typename Policies::rounding rnd;
+ const T& xl = x.lower();
+ const T& xu = x.upper();
+ if (interval_lib::user::is_neg(y))
+ return interval<T, Policies>(rnd.div_down(xu, y), rnd.div_up(xl, y), true);
+ else
+ return interval<T, Policies>(rnd.div_down(xl, y), rnd.div_up(xu, y), true);
+}
+
+} // namespace numeric
+} // namespace boost
+
+#endif // BOOST_NUMERIC_INTERVAL_ARITH_HPP
diff --git a/boost/boost/numeric/interval/arith2.hpp b/boost/boost/numeric/interval/arith2.hpp
new file mode 100644
index 00000000000..a44076e5bbf
--- /dev/null
+++ b/boost/boost/numeric/interval/arith2.hpp
@@ -0,0 +1,227 @@
+/* Boost interval/arith2.hpp template implementation file
+ *
+ * This header provides some auxiliary arithmetic
+ * functions: fmod, sqrt, square, pov, inverse and
+ * a multi-interval division.
+ *
+ * Copyright 2002-2003 Hervé Brönnimann, Guillaume Melquiond, Sylvain Pion
+ *
+ * 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_NUMERIC_INTERVAL_ARITH2_HPP
+#define BOOST_NUMERIC_INTERVAL_ARITH2_HPP
+
+#include <boost/config.hpp>
+#include <boost/numeric/interval/detail/interval_prototype.hpp>
+#include <boost/numeric/interval/detail/test_input.hpp>
+#include <boost/numeric/interval/detail/bugs.hpp>
+#include <boost/numeric/interval/detail/division.hpp>
+#include <boost/numeric/interval/arith.hpp>
+#include <boost/numeric/interval/policies.hpp>
+#include <algorithm>
+#include <cmath>
+
+namespace boost {
+namespace numeric {
+
+template<class T, class Policies> inline
+interval<T, Policies> fmod(const interval<T, Policies>& x,
+ const interval<T, Policies>& y)
+{
+ if (interval_lib::detail::test_input(x, y))
+ return interval<T, Policies>::empty();
+ typename Policies::rounding rnd;
+ typedef typename interval_lib::unprotect<interval<T, Policies> >::type I;
+ T const &yb = interval_lib::user::is_neg(x.lower()) ? y.lower() : y.upper();
+ T n = rnd.int_down(rnd.div_down(x.lower(), yb));
+ return (const I&)x - n * (const I&)y;
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> fmod(const interval<T, Policies>& x, const T& y)
+{
+ if (interval_lib::detail::test_input(x, y))
+ return interval<T, Policies>::empty();
+ typename Policies::rounding rnd;
+ typedef typename interval_lib::unprotect<interval<T, Policies> >::type I;
+ T n = rnd.int_down(rnd.div_down(x.lower(), y));
+ return (const I&)x - n * I(y);
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> fmod(const T& x, const interval<T, Policies>& y)
+{
+ if (interval_lib::detail::test_input(x, y))
+ return interval<T, Policies>::empty();
+ typename Policies::rounding rnd;
+ typedef typename interval_lib::unprotect<interval<T, Policies> >::type I;
+ T const &yb = interval_lib::user::is_neg(x) ? y.lower() : y.upper();
+ T n = rnd.int_down(rnd.div_down(x, yb));
+ return x - n * (const I&)y;
+}
+
+namespace interval_lib {
+
+template<class T, class Policies> inline
+interval<T, Policies> division_part1(const interval<T, Policies>& x,
+ const interval<T, Policies>& y, bool& b)
+{
+ typedef interval<T, Policies> I;
+ b = false;
+ if (detail::test_input(x, y))
+ return I::empty();
+ if (zero_in(y))
+ if (!user::is_zero(y.lower()))
+ if (!user::is_zero(y.upper()))
+ return detail::div_zero_part1(x, y, b);
+ else
+ return detail::div_negative(x, y.lower());
+ else
+ if (!user::is_zero(y.upper()))
+ return detail::div_positive(x, y.upper());
+ else
+ return I::empty();
+ else
+ return detail::div_non_zero(x, y);
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> division_part2(const interval<T, Policies>& x,
+ const interval<T, Policies>& y, bool b = true)
+{
+ if (!b) return interval<T, Policies>::empty();
+ return detail::div_zero_part2(x, y);
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> multiplicative_inverse(const interval<T, Policies>& x)
+{
+ typedef interval<T, Policies> I;
+ if (detail::test_input(x))
+ return I::empty();
+ T one = static_cast<T>(1);
+ typename Policies::rounding rnd;
+ if (zero_in(x)) {
+ typedef typename Policies::checking checking;
+ if (!user::is_zero(x.lower()))
+ if (!user::is_zero(x.upper()))
+ return I::whole();
+ else
+ return I(checking::neg_inf(), rnd.div_up(one, x.lower()), true);
+ else
+ if (!user::is_zero(x.upper()))
+ return I(rnd.div_down(one, x.upper()), checking::pos_inf(), true);
+ else
+ return I::empty();
+ } else
+ return I(rnd.div_down(one, x.upper()), rnd.div_up(one, x.lower()), true);
+}
+
+namespace detail {
+
+template<class T, class Rounding> inline
+T pow_dn(const T& x_, int pwr, Rounding& rnd) // x and pwr are positive
+{
+ T x = x_;
+ T y = (pwr & 1) ? x_ : static_cast<T>(1);
+ pwr >>= 1;
+ while (pwr > 0) {
+ x = rnd.mul_down(x, x);
+ if (pwr & 1) y = rnd.mul_down(x, y);
+ pwr >>= 1;
+ }
+ return y;
+}
+
+template<class T, class Rounding> inline
+T pow_up(const T& x_, int pwr, Rounding& rnd) // x and pwr are positive
+{
+ T x = x_;
+ T y = (pwr & 1) ? x_ : static_cast<T>(1);
+ pwr >>= 1;
+ while (pwr > 0) {
+ x = rnd.mul_up(x, x);
+ if (pwr & 1) y = rnd.mul_up(x, y);
+ pwr >>= 1;
+ }
+ return y;
+}
+
+} // namespace detail
+} // namespace interval_lib
+
+template<class T, class Policies> inline
+interval<T, Policies> pow(const interval<T, Policies>& x, int pwr)
+{
+ BOOST_USING_STD_MAX();
+ using interval_lib::detail::pow_dn;
+ using interval_lib::detail::pow_up;
+ typedef interval<T, Policies> I;
+
+ if (interval_lib::detail::test_input(x))
+ return I::empty();
+
+ if (pwr == 0)
+ if (interval_lib::user::is_zero(x.lower())
+ && interval_lib::user::is_zero(x.upper()))
+ return I::empty();
+ else
+ return I(static_cast<T>(1));
+ else if (pwr < 0)
+ return interval_lib::multiplicative_inverse(pow(x, -pwr));
+
+ typename Policies::rounding rnd;
+
+ if (interval_lib::user::is_neg(x.upper())) { // [-2,-1]
+ T yl = pow_dn(static_cast<T>(-x.upper()), pwr, rnd);
+ T yu = pow_up(static_cast<T>(-x.lower()), pwr, rnd);
+ if (pwr & 1) // [-2,-1]^1
+ return I(-yu, -yl, true);
+ else // [-2,-1]^2
+ return I(yl, yu, true);
+ } else if (interval_lib::user::is_neg(x.lower())) { // [-1,1]
+ if (pwr & 1) { // [-1,1]^1
+ return I(-pow_up(-x.lower(), pwr, rnd), pow_up(x.upper(), pwr, rnd), true);
+ } else { // [-1,1]^2
+ return I(static_cast<T>(0), pow_up(max BOOST_PREVENT_MACRO_SUBSTITUTION(static_cast<T>(-x.lower()), x.upper()), pwr, rnd), true);
+ }
+ } else { // [1,2]
+ return I(pow_dn(x.lower(), pwr, rnd), pow_up(x.upper(), pwr, rnd), true);
+ }
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> sqrt(const interval<T, Policies>& x)
+{
+ typedef interval<T, Policies> I;
+ if (interval_lib::detail::test_input(x) || interval_lib::user::is_neg(x.upper()))
+ return I::empty();
+ typename Policies::rounding rnd;
+ T l = !interval_lib::user::is_pos(x.lower()) ? static_cast<T>(0) : rnd.sqrt_down(x.lower());
+ return I(l, rnd.sqrt_up(x.upper()), true);
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> square(const interval<T, Policies>& x)
+{
+ typedef interval<T, Policies> I;
+ if (interval_lib::detail::test_input(x))
+ return I::empty();
+ typename Policies::rounding rnd;
+ const T& xl = x.lower();
+ const T& xu = x.upper();
+ if (interval_lib::user::is_neg(xu))
+ return I(rnd.mul_down(xu, xu), rnd.mul_up(xl, xl), true);
+ else if (interval_lib::user::is_pos(x.lower()))
+ return I(rnd.mul_down(xl, xl), rnd.mul_up(xu, xu), true);
+ else
+ return I(static_cast<T>(0), (-xl > xu ? rnd.mul_up(xl, xl) : rnd.mul_up(xu, xu)), true);
+}
+
+} // namespace numeric
+} // namespace boost
+
+#endif // BOOST_NUMERIC_INTERVAL_ARITH2_HPP
diff --git a/boost/boost/numeric/interval/arith3.hpp b/boost/boost/numeric/interval/arith3.hpp
new file mode 100644
index 00000000000..518e6182f37
--- /dev/null
+++ b/boost/boost/numeric/interval/arith3.hpp
@@ -0,0 +1,69 @@
+/* Boost interval/arith3.hpp template implementation file
+ *
+ * This headers provides arithmetical functions
+ * which compute an interval given some base
+ * numbers. The resulting interval encloses the
+ * real result of the arithmetic operation.
+ *
+ * Copyright 2003 Guillaume Melquiond
+ *
+ * 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_NUMERIC_INTERVAL_ARITH3_HPP
+#define BOOST_NUMERIC_INTERVAL_ARITH3_HPP
+
+#include <boost/numeric/interval/detail/interval_prototype.hpp>
+#include <boost/numeric/interval/detail/test_input.hpp>
+
+namespace boost {
+namespace numeric {
+namespace interval_lib {
+
+template<class I> inline
+I add(const typename I::base_type& x, const typename I::base_type& y)
+{
+ typedef typename I::traits_type Policies;
+ if (detail::test_input<typename I::base_type, Policies>(x, y))
+ return I::empty();
+ typename Policies::rounding rnd;
+ return I(rnd.add_down(x, y), rnd.add_up(x, y), true);
+}
+
+template<class I> inline
+I sub(const typename I::base_type& x, const typename I::base_type& y)
+{
+ typedef typename I::traits_type Policies;
+ if (detail::test_input<typename I::base_type, Policies>(x, y))
+ return I::empty();
+ typename Policies::rounding rnd;
+ return I(rnd.sub_down(x, y), rnd.sub_up(x, y), true);
+}
+
+template<class I> inline
+I mul(const typename I::base_type& x, const typename I::base_type& y)
+{
+ typedef typename I::traits_type Policies;
+ if (detail::test_input<typename I::base_type, Policies>(x, y))
+ return I::empty();
+ typename Policies::rounding rnd;
+ return I(rnd.mul_down(x, y), rnd.mul_up(x, y), true);
+}
+
+template<class I> inline
+I div(const typename I::base_type& x, const typename I::base_type& y)
+{
+ typedef typename I::traits_type Policies;
+ if (detail::test_input<typename I::base_type, Policies>(x, y) || user::is_zero(y))
+ return I::empty();
+ typename Policies::rounding rnd;
+ return I(rnd.div_down(x, y), rnd.div_up(x, y), true);
+}
+
+} // namespace interval_lib
+} // namespace numeric
+} // namespace boost
+
+#endif // BOOST_NUMERIC_INTERVAL_ARITH3_HPP
diff --git a/boost/boost/numeric/interval/checking.hpp b/boost/boost/numeric/interval/checking.hpp
new file mode 100644
index 00000000000..2db486a0bee
--- /dev/null
+++ b/boost/boost/numeric/interval/checking.hpp
@@ -0,0 +1,130 @@
+/* Boost interval/checking.hpp template implementation file
+ *
+ * Copyright 2002 Hervé Brönnimann, Guillaume Melquiond, Sylvain Pion
+ *
+ * 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_NUMERIC_INTERVAL_CHECKING_HPP
+#define BOOST_NUMERIC_INTERVAL_CHECKING_HPP
+
+#include <stdexcept>
+#include <string>
+#include <cassert>
+#include <boost/limits.hpp>
+
+namespace boost {
+namespace numeric {
+namespace interval_lib {
+
+struct exception_create_empty
+{
+ void operator()()
+ {
+ throw std::runtime_error("boost::interval: empty interval created");
+ }
+};
+
+struct exception_invalid_number
+{
+ void operator()()
+ {
+ throw std::invalid_argument("boost::interval: invalid number");
+ }
+};
+
+template<class T>
+struct checking_base
+{
+ static T pos_inf()
+ {
+ assert(std::numeric_limits<T>::has_infinity);
+ return std::numeric_limits<T>::infinity();
+ }
+ static T neg_inf()
+ {
+ assert(std::numeric_limits<T>::has_infinity);
+ return -std::numeric_limits<T>::infinity();
+ }
+ static T nan()
+ {
+ assert(std::numeric_limits<T>::has_quiet_NaN);
+ return std::numeric_limits<T>::quiet_NaN();
+ }
+ static bool is_nan(const T& x)
+ {
+ return std::numeric_limits<T>::has_quiet_NaN && (x != x);
+ }
+ static T empty_lower()
+ {
+ return (std::numeric_limits<T>::has_quiet_NaN ?
+ std::numeric_limits<T>::quiet_NaN() : static_cast<T>(1));
+ }
+ static T empty_upper()
+ {
+ return (std::numeric_limits<T>::has_quiet_NaN ?
+ std::numeric_limits<T>::quiet_NaN() : static_cast<T>(0));
+ }
+ static bool is_empty(const T& l, const T& u)
+ {
+ return !(l <= u); // safety for partial orders
+ }
+};
+
+template<class T, class Checking = checking_base<T>,
+ class Exception = exception_create_empty>
+struct checking_no_empty: Checking
+{
+ static T nan()
+ {
+ assert(false);
+ return Checking::nan();
+ }
+ static T empty_lower()
+ {
+ Exception()();
+ return Checking::empty_lower();
+ }
+ static T empty_upper()
+ {
+ Exception()();
+ return Checking::empty_upper();
+ }
+ static bool is_empty(const T&, const T&)
+ {
+ return false;
+ }
+};
+
+template<class T, class Checking = checking_base<T> >
+struct checking_no_nan: Checking
+{
+ static bool is_nan(const T&)
+ {
+ return false;
+ }
+};
+
+template<class T, class Checking = checking_base<T>,
+ class Exception = exception_invalid_number>
+struct checking_catch_nan: Checking
+{
+ static bool is_nan(const T& x)
+ {
+ if (Checking::is_nan(x)) Exception()();
+ return false;
+ }
+};
+
+template<class T>
+struct checking_strict:
+ checking_no_nan<T, checking_no_empty<T> >
+{};
+
+} // namespace interval_lib
+} // namespace numeric
+} // namespace boost
+
+#endif // BOOST_NUMERIC_INTERVAL_CHECKING_HPP
diff --git a/boost/boost/numeric/interval/compare.hpp b/boost/boost/numeric/interval/compare.hpp
new file mode 100644
index 00000000000..f21753e7110
--- /dev/null
+++ b/boost/boost/numeric/interval/compare.hpp
@@ -0,0 +1,19 @@
+/* Boost interval/compare.hpp template implementation file
+ *
+ * Copyright 2002 Hervé Brönnimann, Guillaume Melquiond, Sylvain Pion
+ *
+ * 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_NUMERIC_INTERVAL_COMPARE_HPP
+#define BOOST_NUMERIC_INTERVAL_COMPARE_HPP
+
+#include <boost/numeric/interval/compare/certain.hpp>
+#include <boost/numeric/interval/compare/possible.hpp>
+#include <boost/numeric/interval/compare/explicit.hpp>
+#include <boost/numeric/interval/compare/lexicographic.hpp>
+#include <boost/numeric/interval/compare/set.hpp>
+
+#endif // BOOST_NUMERIC_INTERVAL_COMPARE_HPP
diff --git a/boost/boost/numeric/interval/compare/certain.hpp b/boost/boost/numeric/interval/compare/certain.hpp
new file mode 100644
index 00000000000..9232d5cd880
--- /dev/null
+++ b/boost/boost/numeric/interval/compare/certain.hpp
@@ -0,0 +1,113 @@
+/* Boost interval/compare/certain.hpp template implementation file
+ *
+ * Copyright 2003 Guillaume Melquiond
+ *
+ * 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_NUMERIC_INTERVAL_COMPARE_CERTAIN_HPP
+#define BOOST_NUMERIC_INTERVAL_COMPARE_CERTAIN_HPP
+
+#include <boost/numeric/interval/detail/interval_prototype.hpp>
+#include <boost/numeric/interval/detail/test_input.hpp>
+
+namespace boost {
+namespace numeric {
+namespace interval_lib {
+namespace compare {
+namespace certain {
+
+template<class T, class Policies1, class Policies2> inline
+bool operator<(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
+{
+ if (detail::test_input(x, y)) throw comparison_error();
+ return x.upper() < y.lower();
+}
+
+template<class T, class Policies> inline
+bool operator<(const interval<T, Policies>& x, const T& y)
+{
+ if (detail::test_input(x, y)) throw comparison_error();
+ return x.upper() < y;
+}
+
+template<class T, class Policies1, class Policies2> inline
+bool operator<=(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
+{
+ if (detail::test_input(x, y)) throw comparison_error();
+ return x.upper() <= y.lower();
+}
+
+template<class T, class Policies> inline
+bool operator<=(const interval<T, Policies>& x, const T& y)
+{
+ if (detail::test_input(x, y)) throw comparison_error();
+ return x.upper() <= y;
+}
+
+template<class T, class Policies1, class Policies2> inline
+bool operator>(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
+{
+ if (detail::test_input(x, y)) throw comparison_error();
+ return x.lower() > y.upper();
+}
+
+template<class T, class Policies> inline
+bool operator>(const interval<T, Policies>& x, const T& y)
+{
+ if (detail::test_input(x, y)) throw comparison_error();
+ return x.lower() > y;
+}
+
+template<class T, class Policies1, class Policies2> inline
+bool operator>=(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
+{
+ if (detail::test_input(x, y)) throw comparison_error();
+ return x.lower() >= y.upper();
+}
+
+template<class T, class Policies> inline
+bool operator>=(const interval<T, Policies>& x, const T& y)
+{
+ if (detail::test_input(x, y)) throw comparison_error();
+ return x.lower() >= y;
+}
+
+template<class T, class Policies1, class Policies2> inline
+bool operator==(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
+{
+ if (detail::test_input(x, y)) throw comparison_error();
+ return x.upper() == y.lower() && x.lower() == y.upper();
+}
+
+template<class T, class Policies> inline
+bool operator==(const interval<T, Policies>& x, const T& y)
+{
+ if (detail::test_input(x, y)) throw comparison_error();
+ return x.upper() == y && x.lower() == y;
+}
+
+template<class T, class Policies1, class Policies2> inline
+bool operator!=(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
+{
+ if (detail::test_input(x, y)) throw comparison_error();
+ return x.upper() < y.lower() || x.lower() > y.upper();
+}
+
+template<class T, class Policies> inline
+bool operator!=(const interval<T, Policies>& x, const T& y)
+{
+ if (detail::test_input(x, y)) throw comparison_error();
+ return x.upper() < y || x.lower() > y;
+}
+
+} // namespace certain
+} // namespace compare
+} // namespace interval_lib
+} // namespace numeric
+} // namespace boost
+
+
+#endif // BOOST_NUMERIC_INTERVAL_COMPARE_CERTAIN_HPP
diff --git a/boost/boost/numeric/interval/compare/explicit.hpp b/boost/boost/numeric/interval/compare/explicit.hpp
new file mode 100644
index 00000000000..8c68be8916b
--- /dev/null
+++ b/boost/boost/numeric/interval/compare/explicit.hpp
@@ -0,0 +1,248 @@
+/* Boost interval/compare/explicit.hpp template implementation file
+ *
+ * Copyright 2000 Jens Maurer
+ * Copyright 2002 Hervé Brönnimann, Guillaume Melquiond, Sylvain Pion
+ *
+ * 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_NUMERIC_INTERVAL_COMPARE_EXPLICIT_HPP
+#define BOOST_NUMERIC_INTERVAL_COMPARE_EXPLICIT_HPP
+
+#include <boost/numeric/interval/detail/interval_prototype.hpp>
+
+namespace boost {
+namespace numeric {
+namespace interval_lib {
+
+/*
+ * Certainly... operations
+ */
+
+template<class T, class Policies1, class Policies2> inline
+bool cerlt(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
+{
+ return x.upper() < y.lower();
+}
+
+template<class T, class Policies> inline
+bool cerlt(const interval<T, Policies>& x, const T& y)
+{
+ return x.upper() < y;
+}
+
+template<class T, class Policies> inline
+bool cerlt(const T& x, const interval<T, Policies>& y)
+{
+ return x < y.lower();
+}
+
+template<class T, class Policies1, class Policies2> inline
+bool cerle(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
+{
+ return x.upper() <= y.lower();
+}
+
+template<class T, class Policies> inline
+bool cerle(const interval<T, Policies>& x, const T& y)
+{
+ return x.upper() <= y;
+}
+
+template<class T, class Policies> inline
+bool cerle(const T& x, const interval<T, Policies>& y)
+{
+ return x <= y.lower();
+}
+
+template<class T, class Policies1, class Policies2> inline
+bool cergt(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
+{
+ return x.lower() > y.upper();
+}
+
+template<class T, class Policies> inline
+bool cergt(const interval<T, Policies>& x, const T& y)
+{
+ return x.lower() > y;
+}
+
+template<class T, class Policies> inline
+bool cergt(const T& x, const interval<T, Policies>& y)
+{
+ return x > y.upper();
+}
+
+template<class T, class Policies1, class Policies2> inline
+bool cerge(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
+{
+ return x.lower() >= y.upper();
+}
+
+template<class T, class Policies> inline
+bool cerge(const interval<T, Policies>& x, const T& y)
+{
+ return x.lower() >= y;
+}
+
+template<class T, class Policies> inline
+bool cerge(const T& x, const interval<T, Policies>& y)
+{
+ return x >= y.upper();
+}
+
+template<class T, class Policies1, class Policies2> inline
+bool cereq(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
+{
+ return x.lower() == y.upper() && y.lower() == x.upper();
+}
+
+template<class T, class Policies> inline
+bool cereq(const interval<T, Policies>& x, const T& y)
+{
+ return x.lower() == y && x.upper() == y;
+}
+
+template<class T, class Policies> inline
+bool cereq(const T& x, const interval<T, Policies>& y)
+{
+ return x == y.lower() && x == y.upper();
+}
+
+template<class T, class Policies1, class Policies2> inline
+bool cerne(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
+{
+ return x.upper() < y.lower() || y.upper() < x.lower();
+}
+
+template<class T, class Policies> inline
+bool cerne(const interval<T, Policies>& x, const T& y)
+{
+ return x.upper() < y || y < x.lower();
+}
+
+template<class T, class Policies> inline
+bool cerne(const T& x, const interval<T, Policies>& y)
+{
+ return x < y.lower() || y.upper() < x;
+}
+
+/*
+ * Possibly... comparisons
+ */
+
+template<class T, class Policies1, class Policies2> inline
+bool poslt(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
+{
+ return x.lower() < y.upper();
+}
+
+template<class T, class Policies> inline
+bool poslt(const interval<T, Policies>& x, const T& y)
+{
+ return x.lower() < y;
+}
+
+template<class T, class Policies> inline
+bool poslt(const T& x, const interval<T, Policies>& y)
+{
+ return x < y.upper();
+}
+
+template<class T, class Policies1, class Policies2> inline
+bool posle(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
+{
+ return x.lower() <= y.upper();
+}
+
+template<class T, class Policies> inline
+bool posle(const interval<T, Policies>& x, const T& y)
+{
+ return x.lower() <= y;
+}
+
+template<class T, class Policies> inline
+bool posle(const T& x, const interval<T, Policies>& y)
+{
+ return x <= y.upper();
+}
+
+template<class T, class Policies1, class Policies2> inline
+bool posgt(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
+{
+ return x.upper() > y.lower();
+}
+
+template<class T, class Policies> inline
+bool posgt(const interval<T, Policies>& x, const T& y)
+{
+ return x.upper() > y;
+}
+
+template<class T, class Policies> inline
+bool posgt(const T& x, const interval<T, Policies> & y)
+{
+ return x > y.lower();
+}
+
+template<class T, class Policies1, class Policies2> inline
+bool posge(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
+{
+ return x.upper() >= y.lower();
+}
+
+template<class T, class Policies> inline
+bool posge(const interval<T, Policies>& x, const T& y)
+{
+ return x.upper() >= y;
+}
+
+template<class T, class Policies> inline
+bool posge(const T& x, const interval<T, Policies>& y)
+{
+ return x >= y.lower();
+}
+
+template<class T, class Policies1, class Policies2> inline
+bool poseq(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
+{
+ return x.upper() >= y.lower() && y.upper() >= x.lower();
+}
+
+template<class T, class Policies> inline
+bool poseq(const interval<T, Policies>& x, const T& y)
+{
+ return x.upper() >= y && y >= x.lower();
+}
+
+template<class T, class Policies> inline
+bool poseq(const T& x, const interval<T, Policies>& y)
+{
+ return x >= y.lower() && y.upper() >= x;
+}
+
+template<class T, class Policies1, class Policies2> inline
+bool posne(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
+{
+ return x.upper() != y.lower() || y.upper() != x.lower();
+}
+
+template<class T, class Policies> inline
+bool posne(const interval<T, Policies>& x, const T& y)
+{
+ return x.upper() != y || y != x.lower();
+}
+
+template<class T, class Policies> inline
+bool posne(const T& x, const interval<T, Policies>& y)
+{
+ return x != y.lower() || y.upper() != x;
+}
+
+} // namespace interval_lib
+} // namespace numeric
+} //namespace boost
+
+#endif // BOOST_NUMERIC_INTERVAL_COMPARE_EXPLICIT_HPP
diff --git a/boost/boost/numeric/interval/compare/lexicographic.hpp b/boost/boost/numeric/interval/compare/lexicographic.hpp
new file mode 100644
index 00000000000..03f6036d2b8
--- /dev/null
+++ b/boost/boost/numeric/interval/compare/lexicographic.hpp
@@ -0,0 +1,122 @@
+/* Boost interval/compare/lexicographic.hpp template implementation file
+ *
+ * Copyright 2002-2003 Guillaume Melquiond
+ *
+ * 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_NUMERIC_INTERVAL_COMPARE_LEXICOGRAPHIC_HPP
+#define BOOST_NUMERIC_INTERVAL_COMPARE_LEXICOGRAPHIC_HPP
+
+#include <boost/numeric/interval/detail/interval_prototype.hpp>
+#include <boost/numeric/interval/detail/test_input.hpp>
+
+namespace boost {
+namespace numeric {
+namespace interval_lib {
+namespace compare {
+namespace lexicographic {
+
+template<class T, class Policies1, class Policies2> inline
+bool operator<(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
+{
+ if (detail::test_input(x, y)) throw comparison_error();
+ const T& xl = x.lower();
+ const T& yl = y.lower();
+ return xl < yl || (xl == yl && x.upper() < y.upper());
+}
+
+template<class T, class Policies> inline
+bool operator<(const interval<T, Policies>& x, const T& y)
+{
+ if (detail::test_input(x, y)) throw comparison_error();
+ return x.lower() < y;
+}
+
+template<class T, class Policies1, class Policies2> inline
+bool operator<=(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
+{
+ if (detail::test_input(x, y)) throw comparison_error();
+ const T& xl = x.lower();
+ const T& yl = y.lower();
+ return xl < yl || (xl == yl && x.upper() <= y.upper());
+}
+
+template<class T, class Policies> inline
+bool operator<=(const interval<T, Policies>& x, const T& y)
+{
+ if (detail::test_input(x, y)) throw comparison_error();
+ const T& xl = x.lower();
+ return xl < y || (xl == y && x.upper() <= y);
+}
+
+template<class T, class Policies1, class Policies2> inline
+bool operator>(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
+{
+ if (detail::test_input(x, y)) throw comparison_error();
+ const T& xl = x.lower();
+ const T& yl = y.lower();
+ return xl > yl || (xl == yl && x.upper() > y.upper());
+}
+
+template<class T, class Policies> inline
+bool operator>(const interval<T, Policies>& x, const T& y)
+{
+ if (detail::test_input(x, y)) throw comparison_error();
+ const T& xl = x.lower();
+ return xl > y || (xl == y && x.upper() > y);
+}
+
+template<class T, class Policies1, class Policies2> inline
+bool operator>=(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
+{
+ if (detail::test_input(x, y)) throw comparison_error();
+ const T& xl = x.lower();
+ const T& yl = y.lower();
+ return xl > yl || (xl == yl && x.upper() >= y.upper());
+}
+
+template<class T, class Policies> inline
+bool operator>=(const interval<T, Policies>& x, const T& y)
+{
+ if (detail::test_input(x, y)) throw comparison_error();
+ return x.lower() >= y;
+}
+
+template<class T, class Policies1, class Policies2> inline
+bool operator==(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
+{
+ if (detail::test_input(x, y)) throw comparison_error();
+ return x.lower() == y.lower() && x.upper() == y.upper();
+}
+
+template<class T, class Policies> inline
+bool operator==(const interval<T, Policies>& x, const T& y)
+{
+ if (detail::test_input(x, y)) throw comparison_error();
+ return x.lower() == y && x.upper() == y;
+}
+
+template<class T, class Policies1, class Policies2> inline
+bool operator!=(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
+{
+ if (detail::test_input(x, y)) throw comparison_error();
+ return x.lower() != y.lower() || x.upper() != y.upper();
+}
+
+template<class T, class Policies> inline
+bool operator!=(const interval<T, Policies>& x, const T& y)
+{
+ if (detail::test_input(x, y)) throw comparison_error();
+ return x.lower() != y || x.upper() != y;
+}
+
+} // namespace lexicographic
+} // namespace compare
+} // namespace interval_lib
+} // namespace numeric
+} // namespace boost
+
+#endif // BOOST_NUMERIC_INTERVAL_COMPARE_LEXICOGRAPHIC_HPP
diff --git a/boost/boost/numeric/interval/compare/possible.hpp b/boost/boost/numeric/interval/compare/possible.hpp
new file mode 100644
index 00000000000..59bec31b9f6
--- /dev/null
+++ b/boost/boost/numeric/interval/compare/possible.hpp
@@ -0,0 +1,113 @@
+/* Boost interval/compare/possible.hpp template implementation file
+ *
+ * Copyright 2003 Guillaume Melquiond
+ *
+ * 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_NUMERIC_INTERVAL_COMPARE_POSSIBLE_HPP
+#define BOOST_NUMERIC_INTERVAL_COMPARE_POSSIBLE_HPP
+
+#include <boost/numeric/interval/detail/interval_prototype.hpp>
+#include <boost/numeric/interval/detail/test_input.hpp>
+
+namespace boost {
+namespace numeric {
+namespace interval_lib {
+namespace compare {
+namespace possible {
+
+template<class T, class Policies1, class Policies2> inline
+bool operator<(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
+{
+ if (detail::test_input(x, y)) throw comparison_error();
+ return x.lower() < y.upper();
+}
+
+template<class T, class Policies> inline
+bool operator<(const interval<T, Policies>& x, const T& y)
+{
+ if (detail::test_input(x, y)) throw comparison_error();
+ return x.lower() < y;
+}
+
+template<class T, class Policies1, class Policies2> inline
+bool operator<=(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
+{
+ if (detail::test_input(x, y)) throw comparison_error();
+ return x.lower() <= y.upper();
+}
+
+template<class T, class Policies> inline
+bool operator<=(const interval<T, Policies>& x, const T& y)
+{
+ if (detail::test_input(x, y)) throw comparison_error();
+ return x.lower() <= y;
+}
+
+template<class T, class Policies1, class Policies2> inline
+bool operator>(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
+{
+ if (detail::test_input(x, y)) throw comparison_error();
+ return x.upper() > y.lower();
+}
+
+template<class T, class Policies> inline
+bool operator>(const interval<T, Policies>& x, const T& y)
+{
+ if (detail::test_input(x, y)) throw comparison_error();
+ return x.upper() > y;
+}
+
+template<class T, class Policies1, class Policies2> inline
+bool operator>=(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
+{
+ if (detail::test_input(x, y)) throw comparison_error();
+ return x.upper() >= y.lower();
+}
+
+template<class T, class Policies> inline
+bool operator>=(const interval<T, Policies>& x, const T& y)
+{
+ if (detail::test_input(x, y)) throw comparison_error();
+ return x.upper() >= y;
+}
+
+template<class T, class Policies1, class Policies2> inline
+bool operator==(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
+{
+ if (detail::test_input(x, y)) throw comparison_error();
+ return x.lower() <= y.upper() && x.upper() >= y.lower();
+}
+
+template<class T, class Policies> inline
+bool operator==(const interval<T, Policies>& x, const T& y)
+{
+ if (detail::test_input(x, y)) throw comparison_error();
+ return x.lower() <= y && x.upper() >= y;
+}
+
+template<class T, class Policies1, class Policies2> inline
+bool operator!=(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
+{
+ if (detail::test_input(x, y)) throw comparison_error();
+ return x.lower() != y.upper() || x.upper() != y.lower();
+}
+
+template<class T, class Policies> inline
+bool operator!=(const interval<T, Policies>& x, const T& y)
+{
+ if (detail::test_input(x, y)) throw comparison_error();
+ return x.lower() != y || x.upper() != y;
+}
+
+} // namespace possible
+} // namespace compare
+} // namespace interval_lib
+} // namespace numeric
+} // namespace boost
+
+
+#endif // BOOST_NUMERIC_INTERVAL_COMPARE_POSSIBLE_HPP
diff --git a/boost/boost/numeric/interval/compare/set.hpp b/boost/boost/numeric/interval/compare/set.hpp
new file mode 100644
index 00000000000..aa4f1716b2c
--- /dev/null
+++ b/boost/boost/numeric/interval/compare/set.hpp
@@ -0,0 +1,101 @@
+/* Boost interval/compare/set.hpp template implementation file
+ *
+ * Copyright 2002-2003 Guillaume Melquiond
+ *
+ * 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_NUMERIC_INTERVAL_COMPARE_SET_HPP
+#define BOOST_NUMERIC_INTERVAL_COMPARE_SET_HPP
+
+#include <boost/numeric/interval/detail/interval_prototype.hpp>
+#include <boost/numeric/interval/detail/test_input.hpp>
+#include <boost/numeric/interval/utility.hpp>
+
+namespace boost {
+namespace numeric {
+namespace interval_lib {
+namespace compare {
+namespace set {
+
+template<class T, class Policies1, class Policies2> inline
+bool operator<(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
+{
+ return proper_subset(x, y);
+}
+
+template<class T, class Policies> inline
+bool operator<(const interval<T, Policies>& x, const T& y)
+{
+ throw comparison_error();
+}
+
+template<class T, class Policies1, class Policies2> inline
+bool operator<=(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
+{
+ return subset(x, y);
+}
+
+template<class T, class Policies> inline
+bool operator<=(const interval<T, Policies>& x, const T& y)
+{
+ throw comparison_error();
+}
+
+template<class T, class Policies1, class Policies2> inline
+bool operator>(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
+{
+ return proper_subset(y, x);
+}
+
+template<class T, class Policies> inline
+bool operator>(const interval<T, Policies>& x, const T& y)
+{
+ throw comparison_error();
+}
+
+template<class T, class Policies1, class Policies2> inline
+bool operator>=(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
+{
+ return subset(y, x);
+}
+
+template<class T, class Policies> inline
+bool operator>=(const interval<T, Policies>& x, const T& y)
+{
+ throw comparison_error();
+}
+
+template<class T, class Policies1, class Policies2> inline
+bool operator==(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
+{
+ return equal(y, x);
+}
+
+template<class T, class Policies> inline
+bool operator==(const interval<T, Policies>& x, const T& y)
+{
+ throw comparison_error();
+}
+
+template<class T, class Policies1, class Policies2> inline
+bool operator!=(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
+{
+ return !equal(y, x);
+}
+
+template<class T, class Policies> inline
+bool operator!=(const interval<T, Policies>& x, const T& y)
+{
+ throw comparison_error();
+}
+
+} // namespace set
+} // namespace compare
+} // namespace interval_lib
+} // namespace numeric
+} // namespace boost
+
+#endif // BOOST_NUMERIC_INTERVAL_COMPARE_SET_HPP
diff --git a/boost/boost/numeric/interval/compare/tribool.hpp b/boost/boost/numeric/interval/compare/tribool.hpp
new file mode 100644
index 00000000000..6e4a83e2757
--- /dev/null
+++ b/boost/boost/numeric/interval/compare/tribool.hpp
@@ -0,0 +1,138 @@
+/* Boost interval/compare/tribool.hpp template implementation file
+ *
+ * Copyright 2002-2003 Guillaume Melquiond
+ *
+ * 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_NUMERIC_INTERVAL_COMPARE_TRIBOOL_HPP
+#define BOOST_NUMERIC_INTERVAL_COMPARE_TRIBOOL_HPP
+
+#include <boost/numeric/interval/detail/interval_prototype.hpp>
+#include <boost/numeric/interval/detail/test_input.hpp>
+#include <boost/logic/tribool.hpp>
+
+namespace boost {
+namespace numeric {
+namespace interval_lib {
+namespace compare {
+namespace tribool {
+
+template<class T, class Policies1, class Policies2> inline
+logic::tribool operator<(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
+{
+ if (detail::test_input(x, y)) throw comparison_error();
+ if (x.upper() < y.lower()) return true;
+ if (x.lower() >= y.upper()) return false;
+ return logic::indeterminate;
+}
+
+template<class T, class Policies> inline
+logic::tribool operator<(const interval<T, Policies>& x, const T& y)
+{
+ if (detail::test_input(x, y)) throw comparison_error();
+ if (x.upper() < y) return true;
+ if (x.lower() >= y) return false;
+ return logic::indeterminate;
+}
+
+template<class T, class Policies1, class Policies2> inline
+logic::tribool operator<=(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
+{
+ if (detail::test_input(x, y)) throw comparison_error();
+ if (x.upper() <= y.lower()) return true;
+ if (x.lower() > y.upper()) return false;
+ return logic::indeterminate;
+}
+
+template<class T, class Policies> inline
+logic::tribool operator<=(const interval<T, Policies>& x, const T& y)
+{
+ if (detail::test_input(x, y)) throw comparison_error();
+ if (x.upper() <= y) return true;
+ if (x.lower() > y) return false;
+ return logic::indeterminate;
+}
+
+template<class T, class Policies1, class Policies2> inline
+logic::tribool operator>(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
+{
+ if (detail::test_input(x, y)) throw comparison_error();
+ if (x.lower() > y.upper()) return true;
+ if (x.upper() <= y.lower()) return false;
+ return logic::indeterminate;
+}
+
+template<class T, class Policies> inline
+logic::tribool operator>(const interval<T, Policies>& x, const T& y)
+{
+ if (detail::test_input(x, y)) throw comparison_error();
+ if (x.lower() > y) return true;
+ if (x.upper() <= y) return false;
+ return logic::indeterminate;
+}
+
+template<class T, class Policies1, class Policies2> inline
+logic::tribool operator>=(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
+{
+ if (detail::test_input(x, y)) throw comparison_error();
+ if (x.lower() >= y.upper()) return true;
+ if (x.upper() < y.lower()) return false;
+ return logic::indeterminate;
+}
+
+template<class T, class Policies> inline
+logic::tribool operator>=(const interval<T, Policies>& x, const T& y)
+{
+ if (detail::test_input(x, y)) throw comparison_error();
+ if (x.lower() >= y) return true;
+ if (x.upper() < y) return false;
+ return logic::indeterminate;
+}
+
+template<class T, class Policies1, class Policies2> inline
+logic::tribool operator==(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
+{
+ if (detail::test_input(x, y)) throw comparison_error();
+ if (x.upper() == y.lower() && x.lower() == y.upper()) return true;
+ if (x.upper() < y.lower() || x.lower() > y.upper()) return false;
+ return logic::indeterminate;
+}
+
+template<class T, class Policies> inline
+logic::tribool operator==(const interval<T, Policies>& x, const T& y)
+{
+ if (detail::test_input(x, y)) throw comparison_error();
+ if (x.upper() == y && x.lower() == y) return true;
+ if (x.upper() < y || x.lower() > y) return false;
+ return logic::indeterminate;
+}
+
+template<class T, class Policies1, class Policies2> inline
+logic::tribool operator!=(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
+{
+ if (detail::test_input(x, y)) throw comparison_error();
+ if (x.upper() < y.lower() || x.lower() > y.upper()) return true;
+ if (x.upper() == y.lower() && x.lower() == y.upper()) return false;
+ return logic::indeterminate;
+}
+
+template<class T, class Policies> inline
+logic::tribool operator!=(const interval<T, Policies>& x, const T& y)
+{
+ if (detail::test_input(x, y)) throw comparison_error();
+ if (x.upper() < y || x.lower() > y) return true;
+ if (x.upper() == y && x.lower() == y) return false;
+ return logic::indeterminate;
+}
+
+} // namespace tribool
+} // namespace compare
+} // namespace interval_lib
+} // namespace numeric
+} // namespace boost
+
+
+#endif // BOOST_NUMERIC_INTERVAL_COMPARE_TRIBOOL_HPP
diff --git a/boost/boost/numeric/interval/constants.hpp b/boost/boost/numeric/interval/constants.hpp
new file mode 100644
index 00000000000..a3a42efecee
--- /dev/null
+++ b/boost/boost/numeric/interval/constants.hpp
@@ -0,0 +1,85 @@
+/* Boost interval/constants.hpp template implementation file
+ *
+ * Copyright 2002 Hervé Brönnimann, Guillaume Melquiond, Sylvain Pion
+ *
+ * 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_NUMERIC_INTERVAL_CONSTANTS_HPP
+#define BOOST_NUMERIC_INTERVAL_CONSTANTS_HPP
+
+namespace boost {
+namespace numeric {
+namespace interval_lib {
+namespace constants {
+
+// These constants should be exactly computed.
+// Decimal representations wouldn't do it since the standard doesn't
+// specify the rounding (even nearest) that should be used.
+
+static const float pi_f_l = 13176794.0f/(1<<22);
+static const float pi_f_u = 13176795.0f/(1<<22);
+static const double pi_d_l = (3373259426.0 + 273688.0 / (1<<21)) / (1<<30);
+static const double pi_d_u = (3373259426.0 + 273689.0 / (1<<21)) / (1<<30);
+
+template<class T> inline T pi_lower() { return 3; }
+template<class T> inline T pi_upper() { return 4; }
+template<class T> inline T pi_half_lower() { return 1; }
+template<class T> inline T pi_half_upper() { return 2; }
+template<class T> inline T pi_twice_lower() { return 6; }
+template<class T> inline T pi_twice_upper() { return 7; }
+
+template<> inline float pi_lower<float>() { return pi_f_l; }
+template<> inline float pi_upper<float>() { return pi_f_u; }
+template<> inline float pi_half_lower<float>() { return pi_f_l / 2; }
+template<> inline float pi_half_upper<float>() { return pi_f_u / 2; }
+template<> inline float pi_twice_lower<float>() { return pi_f_l * 2; }
+template<> inline float pi_twice_upper<float>() { return pi_f_u * 2; }
+
+template<> inline double pi_lower<double>() { return pi_d_l; }
+template<> inline double pi_upper<double>() { return pi_d_u; }
+template<> inline double pi_half_lower<double>() { return pi_d_l / 2; }
+template<> inline double pi_half_upper<double>() { return pi_d_u / 2; }
+template<> inline double pi_twice_lower<double>() { return pi_d_l * 2; }
+template<> inline double pi_twice_upper<double>() { return pi_d_u * 2; }
+
+template<> inline long double pi_lower<long double>() { return pi_d_l; }
+template<> inline long double pi_upper<long double>() { return pi_d_u; }
+template<> inline long double pi_half_lower<long double>() { return pi_d_l / 2; }
+template<> inline long double pi_half_upper<long double>() { return pi_d_u / 2; }
+template<> inline long double pi_twice_lower<long double>() { return pi_d_l * 2; }
+template<> inline long double pi_twice_upper<long double>() { return pi_d_u * 2; }
+
+} // namespace constants
+
+template<class I> inline
+I pi()
+{
+ typedef typename I::base_type T;
+ return I(constants::pi_lower<T>(),
+ constants::pi_upper<T>(), true);
+}
+
+template<class I> inline
+I pi_half()
+{
+ typedef typename I::base_type T;
+ return I(constants::pi_half_lower<T>(),
+ constants::pi_half_upper<T>(), true);
+}
+
+template<class I> inline
+I pi_twice()
+{
+ typedef typename I::base_type T;
+ return I(constants::pi_twice_lower<T>(),
+ constants::pi_twice_upper<T>(), true);
+}
+
+} // namespace interval_lib
+} // namespace numeric
+} // namespace boost
+
+#endif // BOOST_NUMERIC_INTERVAL_CONSTANTS_HPP
diff --git a/boost/boost/numeric/interval/detail/alpha_rounding_control.hpp b/boost/boost/numeric/interval/detail/alpha_rounding_control.hpp
new file mode 100644
index 00000000000..4ba66fc2106
--- /dev/null
+++ b/boost/boost/numeric/interval/detail/alpha_rounding_control.hpp
@@ -0,0 +1,114 @@
+/* Boost interval/detail/alpha_rounding_control.hpp file
+ *
+ * Copyright 2005 Felix Höfling, Guillaume Melquiond
+ *
+ * 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_NUMERIC_INTERVAL_DETAIL_ALPHA_ROUNDING_CONTROL_HPP
+#define BOOST_NUMERIC_INTERVAL_DETAIL_ALPHA_ROUNDING_CONTROL_HPP
+
+#if !defined(alpha) && !defined(__alpha__)
+#error This header only works on Alpha CPUs.
+#endif
+
+#if defined(__GNUC__) || defined(__digital__) || defined(__DECCXX)
+
+#include <float.h> // write_rnd() and read_rnd()
+
+namespace boost {
+namespace numeric {
+namespace interval_lib {
+
+namespace detail {
+#if defined(__GNUC__ )
+ typedef union {
+ ::boost::long_long_type imode;
+ double dmode;
+ } rounding_mode_struct;
+
+ // set bits 59-58 (DYN),
+ // clear all exception bits and disable overflow (51) and inexact exceptions (62)
+ static const rounding_mode_struct mode_upward = { 0x4C08000000000000LL };
+ static const rounding_mode_struct mode_downward = { 0x4408000000000000LL };
+ static const rounding_mode_struct mode_to_nearest = { 0x4808000000000000LL };
+ static const rounding_mode_struct mode_toward_zero = { 0x4008000000000000LL };
+
+ struct alpha_rounding_control
+ {
+ typedef double rounding_mode;
+
+ static void set_rounding_mode(const rounding_mode mode)
+ { __asm__ __volatile__ ("mt_fpcr %0" : : "f"(mode)); }
+
+ static void get_rounding_mode(rounding_mode& mode)
+ { __asm__ __volatile__ ("mf_fpcr %0" : "=f"(mode)); }
+
+ static void downward() { set_rounding_mode(mode_downward.dmode); }
+ static void upward() { set_rounding_mode(mode_upward.dmode); }
+ static void to_nearest() { set_rounding_mode(mode_to_nearest.dmode); }
+ static void toward_zero() { set_rounding_mode(mode_toward_zero.dmode); }
+ };
+#elif defined(__digital__) || defined(__DECCXX)
+
+#if defined(__DECCXX) && !(defined(__FLT_ROUNDS) && __FLT_ROUNDS == -1)
+#error Dynamic rounding mode not enabled. See cxx man page for details.
+#endif
+
+
+ struct alpha_rounding_control
+ {
+ typedef unsigned int rounding_mode;
+
+ static void set_rounding_mode(const rounding_mode& mode) { write_rnd(mode); }
+ static void get_rounding_mode(rounding_mode& mode) { mode = read_rnd(); }
+
+ static void downward() { set_rounding_mode(FP_RND_RM); }
+ static void upward() { set_rounding_mode(FP_RND_RP); }
+ static void to_nearest() { set_rounding_mode(FP_RND_RN); }
+ static void toward_zero() { set_rounding_mode(FP_RND_RZ); }
+ };
+#endif
+} // namespace detail
+
+extern "C" {
+ float rintf(float);
+ double rint(double);
+ long double rintl(long double);
+}
+
+template<>
+struct rounding_control<float>:
+ detail::alpha_rounding_control
+{
+ static float force_rounding(const float r)
+ { volatile float _r = r; return _r; }
+ static float to_int(const float& x) { return rintf(x); }
+};
+
+template<>
+struct rounding_control<double>:
+ detail::alpha_rounding_control
+{
+ static const double & force_rounding(const double& r) { return r; }
+ static double to_int(const double& r) { return rint(r); }
+};
+
+template<>
+struct rounding_control<long double>:
+ detail::alpha_rounding_control
+{
+ static const long double & force_rounding(const long double& r) { return r; }
+ static long double to_int(const long double& r) { return rintl(r); }
+};
+
+} // namespace interval_lib
+} // namespace numeric
+} // namespace boost
+
+#undef BOOST_NUMERIC_INTERVAL_NO_HARDWARE
+#endif
+
+#endif /* BOOST_NUMERIC_INTERVAL_DETAIL_ALPHA_ROUNDING_CONTROL_HPP */
diff --git a/boost/boost/numeric/interval/detail/bcc_rounding_control.hpp b/boost/boost/numeric/interval/detail/bcc_rounding_control.hpp
new file mode 100644
index 00000000000..e3aaf046c50
--- /dev/null
+++ b/boost/boost/numeric/interval/detail/bcc_rounding_control.hpp
@@ -0,0 +1,57 @@
+/* Boost interval/detail/bcc_rounding_control.hpp file
+ *
+ * Copyright 2000 Jens Maurer
+ * Copyright 2002 Hervé Brönnimann, Guillaume Melquiond, Sylvain Pion
+ *
+ * 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_NUMERIC_INTERVAL_DETAIL_BCC_ROUNDING_CONTROL_HPP
+#define BOOST_NUMERIC_INTERVAL_DETAIL_BCC_ROUNDING_CONTROL_HPP
+
+#ifndef __BORLANDC__
+# error This header is only intended for Borland C++.
+#endif
+
+#ifndef _M_IX86
+# error This header only works on x86 CPUs.
+#endif
+
+#include <float.h> // Borland C++ rounding control
+
+namespace boost {
+namespace numeric {
+namespace interval_lib {
+namespace detail {
+
+#ifndef BOOST_NUMERIC_INTERVAL_KEEP_EXCEPTIONS_FOR_BCC
+extern "C" { unsigned int _RTLENTRY _fm_init(void); }
+
+struct borland_workaround {
+ borland_workaround() { _fm_init(); }
+};
+
+static borland_workaround borland_workaround_exec;
+#endif // BOOST_NUMERIC_INTERVAL_KEEP_EXCEPTIONS_FOR_BCC
+
+__inline double rint(double)
+{ __emit__(0xD9); __emit__(0xFC); /* asm FRNDINT */ }
+
+struct x86_rounding
+{
+ typedef unsigned int rounding_mode;
+ static void get_rounding_mode(rounding_mode& mode)
+ { mode = _control87(0, 0); }
+ static void set_rounding_mode(const rounding_mode mode)
+ { _control87(mode, 0xffff); }
+ static double to_int(const double& x) { return rint(x); }
+};
+
+} // namespace detail
+} // namespace interval_lib
+} // namespace numeric
+} // namespace boost
+
+#endif /* BOOST_NUMERIC_INTERVAL_DETAIL_BCC_ROUNDING_CONTROL_HPP */
diff --git a/boost/boost/numeric/interval/detail/bugs.hpp b/boost/boost/numeric/interval/detail/bugs.hpp
new file mode 100644
index 00000000000..2058b9aee50
--- /dev/null
+++ b/boost/boost/numeric/interval/detail/bugs.hpp
@@ -0,0 +1,79 @@
+/* Boost interval/detail/bugs.hpp file
+ *
+ * Copyright 2000 Jens Maurer
+ * Copyright 2002 Hervé Brönnimann, Guillaume Melquiond, Sylvain Pion
+ *
+ * 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_NUMERIC_INTERVAL_DETAIL_BUGS
+#define BOOST_NUMERIC_INTERVAL_DETAIL_BUGS
+
+#include <boost/config.hpp>
+
+#if defined(__GLIBC__) && (defined(__USE_MISC) || defined(__USE_XOPEN_EXTENDED) || defined(__USE_ISOC99)) && !defined(__ICC)
+# define BOOST_HAS_INV_HYPERBOLIC
+#endif
+
+#ifdef BOOST_NO_STDC_NAMESPACE
+# define BOOST_NUMERIC_INTERVAL_using_math(a) using ::a
+# ifdef BOOST_HAS_INV_HYPERBOLIC
+# define BOOST_NUMERIC_INTERVAL_using_ahyp(a) using ::a
+# endif
+#else
+# define BOOST_NUMERIC_INTERVAL_using_math(a) using std::a
+# if defined(BOOST_HAS_INV_HYPERBOLIC)
+# if defined(__GLIBCPP__) || defined(__GLIBCXX__)
+# define BOOST_NUMERIC_INTERVAL_using_ahyp(a) using ::a
+# else
+# define BOOST_NUMERIC_INTERVAL_using_ahyp(a) using std::a
+# endif
+# endif
+#endif
+
+#if defined(__COMO__) || defined(BOOST_INTEL)
+# define BOOST_NUMERIC_INTERVAL_using_max(a) using std::a
+#elif defined(BOOST_NO_STDC_NAMESPACE)
+# define BOOST_NUMERIC_INTERVAL_using_max(a) using ::a
+#else
+# define BOOST_NUMERIC_INTERVAL_using_max(a) using std::a
+#endif
+
+#ifndef BOOST_NUMERIC_INTERVAL_using_ahyp
+# define BOOST_NUMERIC_INTERVAL_using_ahyp(a)
+#endif
+
+#if defined(__GNUC__) && (__GNUC__ <= 2)
+// cf PR c++/1981 for a description of the bug
+#include <algorithm>
+#include <cmath>
+namespace boost {
+namespace numeric {
+ using std::min;
+ using std::max;
+ using std::sqrt;
+ using std::exp;
+ using std::log;
+ using std::cos;
+ using std::tan;
+ using std::asin;
+ using std::acos;
+ using std::atan;
+ using std::ceil;
+ using std::floor;
+ using std::sinh;
+ using std::cosh;
+ using std::tanh;
+# undef BOOST_NUMERIC_INTERVAL_using_max
+# undef BOOST_NUMERIC_INTERVAL_using_math
+# define BOOST_NUMERIC_INTERVAL_using_max(a)
+# define BOOST_NUMERIC_INTERVAL_using_math(a)
+# undef BOOST_NUMERIC_INTERVAL_using_ahyp
+# define BOOST_NUMERIC_INTERVAL_using_ahyp(a)
+} // namespace numeric
+} // namespace boost
+#endif
+
+#endif // BOOST_NUMERIC_INTERVAL_DETAIL_BUGS
diff --git a/boost/boost/numeric/interval/detail/c99_rounding_control.hpp b/boost/boost/numeric/interval/detail/c99_rounding_control.hpp
new file mode 100644
index 00000000000..181d2866628
--- /dev/null
+++ b/boost/boost/numeric/interval/detail/c99_rounding_control.hpp
@@ -0,0 +1,47 @@
+/* Boost interval/detail/c99_rounding_control.hpp file
+ *
+ * Copyright 2000 Jens Maurer
+ * Copyright 2002 Hervé Brönnimann, Guillaume Melquiond, Sylvain Pion
+ *
+ * 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_NUMERIC_INTERVAL_DETAIL_C99_ROUNDING_CONTROL_HPP
+#define BOOST_NUMERIC_INTERVAL_DETAIL_C99_ROUNDING_CONTROL_HPP
+
+#include <boost/numeric/interval/detail/c99sub_rounding_control.hpp>
+
+namespace boost {
+namespace numeric {
+namespace interval_lib {
+namespace detail {
+
+struct c99_rounding_control: c99_rounding
+{
+ template<class T>
+ static T force_rounding(const T& r) { volatile T r_ = r; return r_; }
+};
+
+} // namespace detail
+
+template<>
+struct rounding_control<float>:
+ detail::c99_rounding_control { };
+
+template<>
+struct rounding_control<double>:
+ detail::c99_rounding_control { };
+
+template<>
+struct rounding_control<long double>:
+ detail::c99_rounding_control { };
+
+} // namespace interval_lib
+} // namespace numeric
+} // namespace boost
+
+#undef BOOST_NUMERIC_INTERVAL_NO_HARDWARE
+
+#endif // BOOST_NUMERIC_INTERVAL_DETAIL_C99_ROUNDING_CONTROL_HPP
diff --git a/boost/boost/numeric/interval/detail/c99sub_rounding_control.hpp b/boost/boost/numeric/interval/detail/c99sub_rounding_control.hpp
new file mode 100644
index 00000000000..571c51fcc7b
--- /dev/null
+++ b/boost/boost/numeric/interval/detail/c99sub_rounding_control.hpp
@@ -0,0 +1,43 @@
+/* Boost interval/detail/c99sub_rounding_control.hpp file
+ *
+ * Copyright 2000 Jens Maurer
+ * Copyright 2002 Hervé Brönnimann, Guillaume Melquiond, Sylvain Pion
+ *
+ * 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_NUMERIC_INTERVAL_DETAIL_C99SUB_ROUNDING_CONTROL_HPP
+#define BOOST_NUMERIC_INTERVAL_DETAIL_C99SUB_ROUNDING_CONTROL_HPP
+
+#include <fenv.h> // ISO C 99 rounding mode control
+
+namespace boost {
+namespace numeric {
+namespace interval_lib {
+namespace detail {
+
+extern "C" { double rint(double); }
+
+struct c99_rounding
+{
+ typedef int rounding_mode;
+
+ static void set_rounding_mode(const rounding_mode mode) { fesetround(mode); }
+ static void get_rounding_mode(rounding_mode &mode) { mode = fegetround(); }
+ static void downward() { set_rounding_mode(FE_DOWNWARD); }
+ static void upward() { set_rounding_mode(FE_UPWARD); }
+ static void to_nearest() { set_rounding_mode(FE_TONEAREST); }
+ static void toward_zero() { set_rounding_mode(FE_TOWARDZERO); }
+
+ template<class T>
+ static T to_int(const T& r) { return rint(r); }
+};
+
+} // namespace detail
+} // namespace interval_lib
+} // namespace numeric
+} // namespace boost
+
+#endif // BOOST_NUMERIC_INTERVAL_DETAIL_C99SUB_ROUBDING_CONTROL_HPP
diff --git a/boost/boost/numeric/interval/detail/division.hpp b/boost/boost/numeric/interval/detail/division.hpp
new file mode 100644
index 00000000000..24fb025ada1
--- /dev/null
+++ b/boost/boost/numeric/interval/detail/division.hpp
@@ -0,0 +1,194 @@
+/* Boost interval/detail/division.hpp file
+ *
+ * Copyright 2003 Guillaume Melquiond, Sylvain Pion
+ *
+ * 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_NUMERIC_INTERVAL_DETAIL_DIVISION_HPP
+#define BOOST_NUMERIC_INTERVAL_DETAIL_DIVISION_HPP
+
+#include <boost/numeric/interval/detail/interval_prototype.hpp>
+#include <boost/numeric/interval/detail/bugs.hpp>
+#include <boost/numeric/interval/detail/test_input.hpp>
+#include <boost/numeric/interval/rounded_arith.hpp>
+#include <algorithm>
+
+namespace boost {
+namespace numeric {
+namespace interval_lib {
+namespace detail {
+
+template<class T, class Policies> inline
+interval<T, Policies> div_non_zero(const interval<T, Policies>& x,
+ const interval<T, Policies>& y)
+{
+ // assert(!in_zero(y));
+ typename Policies::rounding rnd;
+ typedef interval<T, Policies> I;
+ const T& xl = x.lower();
+ const T& xu = x.upper();
+ const T& yl = y.lower();
+ const T& yu = y.upper();
+ if (::boost::numeric::interval_lib::user::is_neg(xu))
+ if (::boost::numeric::interval_lib::user::is_neg(yu))
+ return I(rnd.div_down(xu, yl), rnd.div_up(xl, yu), true);
+ else
+ return I(rnd.div_down(xl, yl), rnd.div_up(xu, yu), true);
+ else if (::boost::numeric::interval_lib::user::is_neg(xl))
+ if (::boost::numeric::interval_lib::user::is_neg(yu))
+ return I(rnd.div_down(xu, yu), rnd.div_up(xl, yu), true);
+ else
+ return I(rnd.div_down(xl, yl), rnd.div_up(xu, yl), true);
+ else
+ if (::boost::numeric::interval_lib::user::is_neg(yu))
+ return I(rnd.div_down(xu, yu), rnd.div_up(xl, yl), true);
+ else
+ return I(rnd.div_down(xl, yu), rnd.div_up(xu, yl), true);
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> div_non_zero(const T& x, const interval<T, Policies>& y)
+{
+ // assert(!in_zero(y));
+ typename Policies::rounding rnd;
+ typedef interval<T, Policies> I;
+ const T& yl = y.lower();
+ const T& yu = y.upper();
+ if (::boost::numeric::interval_lib::user::is_neg(x))
+ return I(rnd.div_down(x, yl), rnd.div_up(x, yu), true);
+ else
+ return I(rnd.div_down(x, yu), rnd.div_up(x, yl), true);
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> div_positive(const interval<T, Policies>& x, const T& yu)
+{
+ // assert(::boost::numeric::interval_lib::user::is_pos(yu));
+ if (::boost::numeric::interval_lib::user::is_zero(x.lower()) &&
+ ::boost::numeric::interval_lib::user::is_zero(x.upper()))
+ return x;
+ typename Policies::rounding rnd;
+ typedef interval<T, Policies> I;
+ const T& xl = x.lower();
+ const T& xu = x.upper();
+ typedef typename Policies::checking checking;
+ if (::boost::numeric::interval_lib::user::is_neg(xu))
+ return I(checking::neg_inf(), rnd.div_up(xu, yu), true);
+ else if (::boost::numeric::interval_lib::user::is_neg(xl))
+ return I(checking::neg_inf(), checking::pos_inf(), true);
+ else
+ return I(rnd.div_down(xl, yu), checking::pos_inf(), true);
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> div_positive(const T& x, const T& yu)
+{
+ // assert(::boost::numeric::interval_lib::user::is_pos(yu));
+ typedef interval<T, Policies> I;
+ if (::boost::numeric::interval_lib::user::is_zero(x))
+ return I(static_cast<T>(0), static_cast<T>(0), true);
+ typename Policies::rounding rnd;
+ typedef typename Policies::checking checking;
+ if (::boost::numeric::interval_lib::user::is_neg(x))
+ return I(checking::neg_inf(), rnd.div_up(x, yu), true);
+ else
+ return I(rnd.div_down(x, yu), checking::pos_inf(), true);
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> div_negative(const interval<T, Policies>& x, const T& yl)
+{
+ // assert(::boost::numeric::interval_lib::user::is_neg(yl));
+ if (::boost::numeric::interval_lib::user::is_zero(x.lower()) &&
+ ::boost::numeric::interval_lib::user::is_zero(x.upper()))
+ return x;
+ typename Policies::rounding rnd;
+ typedef interval<T, Policies> I;
+ const T& xl = x.lower();
+ const T& xu = x.upper();
+ typedef typename Policies::checking checking;
+ if (::boost::numeric::interval_lib::user::is_neg(xu))
+ return I(rnd.div_down(xu, yl), checking::pos_inf(), true);
+ else if (::boost::numeric::interval_lib::user::is_neg(xl))
+ return I(checking::neg_inf(), checking::pos_inf(), true);
+ else
+ return I(checking::neg_inf(), rnd.div_up(xl, yl), true);
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> div_negative(const T& x, const T& yl)
+{
+ // assert(::boost::numeric::interval_lib::user::is_neg(yl));
+ typedef interval<T, Policies> I;
+ if (::boost::numeric::interval_lib::user::is_zero(x))
+ return I(static_cast<T>(0), static_cast<T>(0), true);
+ typename Policies::rounding rnd;
+ typedef typename Policies::checking checking;
+ if (::boost::numeric::interval_lib::user::is_neg(x))
+ return I(rnd.div_down(x, yl), checking::pos_inf(), true);
+ else
+ return I(checking::neg_inf(), rnd.div_up(x, yl), true);
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> div_zero(const interval<T, Policies>& x)
+{
+ if (::boost::numeric::interval_lib::user::is_zero(x.lower()) &&
+ ::boost::numeric::interval_lib::user::is_zero(x.upper()))
+ return x;
+ else return interval<T, Policies>::whole();
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> div_zero(const T& x)
+{
+ if (::boost::numeric::interval_lib::user::is_zero(x))
+ return interval<T, Policies>(static_cast<T>(0), static_cast<T>(0), true);
+ else return interval<T, Policies>::whole();
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> div_zero_part1(const interval<T, Policies>& x,
+ const interval<T, Policies>& y, bool& b)
+{
+ // assert(::boost::numeric::interval_lib::user::is_neg(y.lower()) && ::boost::numeric::interval_lib::user::is_pos(y.upper()));
+ if (::boost::numeric::interval_lib::user::is_zero(x.lower()) && ::boost::numeric::interval_lib::user::is_zero(x.upper()))
+ { b = false; return x; }
+ typename Policies::rounding rnd;
+ typedef interval<T, Policies> I;
+ const T& xl = x.lower();
+ const T& xu = x.upper();
+ const T& yl = y.lower();
+ const T& yu = y.upper();
+ typedef typename Policies::checking checking;
+ if (::boost::numeric::interval_lib::user::is_neg(xu))
+ { b = true; return I(checking::neg_inf(), rnd.div_up(xu, yu), true); }
+ else if (::boost::numeric::interval_lib::user::is_neg(xl))
+ { b = false; return I(checking::neg_inf(), checking::pos_inf(), true); }
+ else
+ { b = true; return I(checking::neg_inf(), rnd.div_up(xl, yl), true); }
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> div_zero_part2(const interval<T, Policies>& x,
+ const interval<T, Policies>& y)
+{
+ // assert(::boost::numeric::interval_lib::user::is_neg(y.lower()) && ::boost::numeric::interval_lib::user::is_pos(y.upper()) && (div_zero_part1(x, y, b), b));
+ typename Policies::rounding rnd;
+ typedef interval<T, Policies> I;
+ typedef typename Policies::checking checking;
+ if (::boost::numeric::interval_lib::user::is_neg(x.upper()))
+ return I(rnd.div_down(x.upper(), y.lower()), checking::pos_inf(), true);
+ else
+ return I(rnd.div_down(x.lower(), y.upper()), checking::pos_inf(), true);
+}
+
+} // namespace detail
+} // namespace interval_lib
+} // namespace numeric
+} // namespace boost
+
+#endif // BOOST_NUMERIC_INTERVAL_DETAIL_DIVISION_HPP
diff --git a/boost/boost/numeric/interval/detail/ia64_rounding_control.hpp b/boost/boost/numeric/interval/detail/ia64_rounding_control.hpp
new file mode 100644
index 00000000000..0b4eade841b
--- /dev/null
+++ b/boost/boost/numeric/interval/detail/ia64_rounding_control.hpp
@@ -0,0 +1,83 @@
+/* Boost interval/detail/ia64_rounding_control.hpp file
+ *
+ * Copyright 2006 Boris Gubenko
+ *
+ * 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_NUMERIC_INTERVAL_DETAIL_IA64_ROUNDING_CONTROL_HPP
+#define BOOST_NUMERIC_INTERVAL_DETAIL_IA64_ROUNDING_CONTROL_HPP
+
+#if !defined(ia64) && !defined(__ia64) && !defined(__ia64__)
+#error This header only works on ia64 CPUs.
+#endif
+
+#if defined(__HP_aCC)
+
+# include <fenv.h>
+
+namespace boost {
+namespace numeric {
+namespace interval_lib {
+namespace detail {
+
+
+ struct ia64_rounding_control
+ {
+ typedef unsigned int rounding_mode;
+
+ static void set_rounding_mode(const rounding_mode& mode) {
+fesetround(mode); }
+ static void get_rounding_mode(rounding_mode& mode) { mode = fegetround(); }
+
+ static void downward() { set_rounding_mode(FE_DOWNWARD); }
+ static void upward() { set_rounding_mode(FE_UPWARD); }
+ static void to_nearest() { set_rounding_mode(FE_TONEAREST); }
+ static void toward_zero() { set_rounding_mode(FE_TOWARDZERO); }
+ };
+
+} // namespace detail
+
+extern "C" {
+ float rintf(float);
+ double rint(double);
+ long double rintl(long double);
+}
+
+template<>
+struct rounding_control<float>:
+ detail::ia64_rounding_control
+{
+ static float force_rounding(const float r)
+ { volatile float _r = r; return _r; }
+ static float to_int(const float& x) { return rintf(x); }
+};
+
+template<>
+struct rounding_control<double>:
+ detail::ia64_rounding_control
+{
+ static const double & force_rounding(const double& r) { return r; }
+ static double to_int(const double& r) { return rint(r); }
+};
+
+template<>
+struct rounding_control<long double>:
+ detail::ia64_rounding_control
+{
+ static const long double & force_rounding(const long double& r) { return r; }
+ static long double to_int(const long double& r) { return rintl(r); }
+};
+
+} // namespace interval_lib
+} // namespace numeric
+} // namespace boost
+
+#undef BOOST_NUMERIC_INTERVAL_NO_HARDWARE
+
+#endif /* __HP_aCC */
+
+#endif /* BOOST_NUMERIC_INTERVAL_DETAIL_IA64_ROUNDING_CONTROL_HPP */
+
diff --git a/boost/boost/numeric/interval/detail/interval_prototype.hpp b/boost/boost/numeric/interval/detail/interval_prototype.hpp
new file mode 100644
index 00000000000..ac9029b70bd
--- /dev/null
+++ b/boost/boost/numeric/interval/detail/interval_prototype.hpp
@@ -0,0 +1,41 @@
+/* Boost interval/detail/interval_prototype.hpp file
+ *
+ * Copyright 2002 Hervé Brönnimann, Guillaume Melquiond, Sylvain Pion
+ *
+ * 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_NUMERIC_INTERVAL_DETAIL_INTERVAL_PROTOTYPE_HPP
+#define BOOST_NUMERIC_INTERVAL_DETAIL_INTERVAL_PROTOTYPE_HPP
+
+namespace boost {
+namespace numeric {
+
+namespace interval_lib {
+
+template<class T> struct rounded_math;
+template<class T> struct checking_strict;
+class comparison_error;
+template<class Rounding, class Checking> struct policies;
+
+/*
+ * default policies class
+ */
+
+template<class T>
+struct default_policies
+{
+ typedef policies<rounded_math<T>, checking_strict<T> > type;
+};
+
+} // namespace interval_lib
+
+template<class T, class Policies = typename interval_lib::default_policies<T>::type >
+class interval;
+
+} // namespace numeric
+} // namespace boost
+
+#endif // BOOST_NUMERIC_INTERVAL_DETAIL_INTERVAL_PROTOTYPE_HPP
diff --git a/boost/boost/numeric/interval/detail/msvc_rounding_control.hpp b/boost/boost/numeric/interval/detail/msvc_rounding_control.hpp
new file mode 100644
index 00000000000..f7d143a8d09
--- /dev/null
+++ b/boost/boost/numeric/interval/detail/msvc_rounding_control.hpp
@@ -0,0 +1,91 @@
+/* Boost interval/detail/msvc_rounding_control.hpp file
+ *
+ * Copyright 2000 Maarten Keijzer
+ * Copyright 2002 Hervé Brönnimann, Guillaume Melquiond, Sylvain Pion
+ *
+ * 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_NUMERIC_INTERVAL_DETAIL_MSVC_ROUNDING_CONTROL_HPP
+#define BOOST_NUMERIC_INTERVAL_DETAIL_MSVC_ROUNDING_CONTROL_HPP
+
+#ifndef _MSC_VER
+# error This header is only intended for MSVC, but might work for Borland as well
+#endif
+
+#include <float.h> // MSVC rounding control
+
+// Although the function is called _control87, it seems to work for
+// other FPUs too, so it does not have to be changed to _controlfp.
+
+namespace boost {
+namespace numeric {
+namespace interval_lib {
+namespace detail {
+
+extern "C" { double rint(double); }
+
+struct x86_rounding
+{
+ static unsigned int hard2msvc(unsigned short m) {
+ unsigned int n = 0;
+ if (m & 0x01) n |= _EM_INVALID;
+ if (m & 0x02) n |= _EM_DENORMAL;
+ if (m & 0x04) n |= _EM_ZERODIVIDE;
+ if (m & 0x08) n |= _EM_OVERFLOW;
+ if (m & 0x10) n |= _EM_UNDERFLOW;
+ if (m & 0x20) n |= _EM_INEXACT;
+ switch (m & 0x300) {
+ case 0x000: n |= _PC_24; break;
+ case 0x200: n |= _PC_53; break;
+ case 0x300: n |= _PC_64; break;
+ }
+ switch (m & 0xC00) {
+ case 0x000: n |= _RC_NEAR; break;
+ case 0x400: n |= _RC_DOWN; break;
+ case 0x800: n |= _RC_UP; break;
+ case 0xC00: n |= _RC_CHOP; break;
+ }
+ if (m & 0x1000) n |= _IC_AFFINE; // only useful on 287
+ return n;
+ }
+
+ static unsigned short msvc2hard(unsigned int n) {
+ unsigned short m = 0;
+ if (n & _EM_INVALID) m |= 0x01;
+ if (n & _EM_DENORMAL) m |= 0x02;
+ if (n & _EM_ZERODIVIDE) m |= 0x04;
+ if (n & _EM_OVERFLOW) m |= 0x08;
+ if (n & _EM_UNDERFLOW) m |= 0x10;
+ if (n & _EM_INEXACT) m |= 0x20;
+ switch (n & _MCW_RC) {
+ case _RC_NEAR: m |= 0x000; break;
+ case _RC_DOWN: m |= 0x400; break;
+ case _RC_UP: m |= 0x800; break;
+ case _RC_CHOP: m |= 0xC00; break;
+ }
+ switch (n & _MCW_PC) {
+ case _PC_24: m |= 0x000; break;
+ case _PC_53: m |= 0x200; break;
+ case _PC_64: m |= 0x300; break;
+ }
+ if ((n & _MCW_IC) == _IC_AFFINE) m |= 0x1000;
+ return m;
+ }
+
+ typedef unsigned short rounding_mode;
+ static void get_rounding_mode(rounding_mode& mode)
+ { mode = msvc2hard(_control87(0, 0)); }
+ static void set_rounding_mode(const rounding_mode mode)
+ { _control87(hard2msvc(mode), _MCW_EM | _MCW_RC | _MCW_PC | _MCW_IC); }
+ static double to_int(const double& x) { return rint(x); }
+};
+
+} // namespace detail
+} // namespace interval_lib
+} // namespace numeric
+} // namespace boost
+
+#endif /* BOOST_NUMERIC_INTERVAL_DETAIL_MSVC_ROUNDING_CONTROL_HPP */
diff --git a/boost/boost/numeric/interval/detail/ppc_rounding_control.hpp b/boost/boost/numeric/interval/detail/ppc_rounding_control.hpp
new file mode 100644
index 00000000000..d2cf4c80f3f
--- /dev/null
+++ b/boost/boost/numeric/interval/detail/ppc_rounding_control.hpp
@@ -0,0 +1,99 @@
+/* Boost interval/detail/ppc_rounding_control.hpp file
+ *
+ * Copyright 2000 Jens Maurer
+ * Copyright 2002 Hervé Brönnimann, Guillaume Melquiond, Sylvain Pion
+ * Copyright 2005 Guillaume Melquiond
+ *
+ * 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_NUMERIC_INTERVAL_DETAIL_PPC_ROUNDING_CONTROL_HPP
+#define BOOST_NUMERIC_INTERVAL_DETAIL_PPC_ROUNDING_CONTROL_HPP
+
+#if !defined(powerpc) && !defined(__powerpc__) && !defined(__ppc__)
+#error This header only works on PPC CPUs.
+#endif
+
+#if defined(__GNUC__ ) || (__IBMCPP__ >= 700)
+
+namespace boost {
+namespace numeric {
+namespace interval_lib {
+namespace detail {
+
+typedef union {
+ ::boost::long_long_type imode;
+ double dmode;
+} rounding_mode_struct;
+
+static const rounding_mode_struct mode_upward = { 0xFFF8000000000002LL };
+static const rounding_mode_struct mode_downward = { 0xFFF8000000000003LL };
+static const rounding_mode_struct mode_to_nearest = { 0xFFF8000000000000LL };
+static const rounding_mode_struct mode_toward_zero = { 0xFFF8000000000001LL };
+
+struct ppc_rounding_control
+{
+ typedef double rounding_mode;
+
+ static void set_rounding_mode(const rounding_mode mode)
+ { __asm__ __volatile__ ("mtfsf 255,%0" : : "f"(mode)); }
+
+ static void get_rounding_mode(rounding_mode& mode)
+ { __asm__ __volatile__ ("mffs %0" : "=f"(mode)); }
+
+ static void downward() { set_rounding_mode(mode_downward.dmode); }
+ static void upward() { set_rounding_mode(mode_upward.dmode); }
+ static void to_nearest() { set_rounding_mode(mode_to_nearest.dmode); }
+ static void toward_zero() { set_rounding_mode(mode_toward_zero.dmode); }
+};
+
+} // namespace detail
+
+// Do not declare the following C99 symbols if <math.h> provides them.
+// Otherwise, conflicts may occur, due to differences between prototypes.
+#if !defined(_ISOC99_SOURCE) && !defined(__USE_ISOC99)
+extern "C" {
+ float rintf(float);
+ double rint(double);
+}
+#endif
+
+template<>
+struct rounding_control<float>:
+ detail::ppc_rounding_control
+{
+ static float force_rounding(const float r)
+ {
+ float tmp;
+ __asm__ __volatile__ ("frsp %0, %1" : "=f" (tmp) : "f" (r));
+ return tmp;
+ }
+ static float to_int(const float& x) { return rintf(x); }
+};
+
+template<>
+struct rounding_control<double>:
+ detail::ppc_rounding_control
+{
+ static const double & force_rounding(const double& r) { return r; }
+ static double to_int(const double& r) { return rint(r); }
+};
+
+template<>
+struct rounding_control<long double>:
+ detail::ppc_rounding_control
+{
+ static const long double & force_rounding(const long double& r) { return r; }
+ static long double to_int(const long double& r) { return rint(r); }
+};
+
+} // namespace interval_lib
+} // namespace numeric
+} // namespace boost
+
+#undef BOOST_NUMERIC_INTERVAL_NO_HARDWARE
+#endif
+
+#endif /* BOOST_NUMERIC_INTERVAL_DETAIL_PPC_ROUNDING_CONTROL_HPP */
diff --git a/boost/boost/numeric/interval/detail/sparc_rounding_control.hpp b/boost/boost/numeric/interval/detail/sparc_rounding_control.hpp
new file mode 100644
index 00000000000..6ba5baf0383
--- /dev/null
+++ b/boost/boost/numeric/interval/detail/sparc_rounding_control.hpp
@@ -0,0 +1,112 @@
+/* Boost interval/detail/sparc_rounding_control.hpp file
+ *
+ * Copyright 2000 Jens Maurer
+ * Copyright 2002 Hervé Brönnimann, Guillaume Melquiond, Sylvain Pion
+ *
+ * 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)
+ *
+ * The basic code in this file was kindly provided by Jeremy Siek.
+ */
+
+#ifndef BOOST_NUMERIC_INTERVAL_DETAIL_SPARC_ROUNDING_CONTROL_HPP
+#define BOOST_NUMERIC_INTERVAL_DETAIL_SPARC_ROUNDING_CONTROL_HPP
+
+#if !defined(sparc) && !defined(__sparc__)
+# error This header is only intended for SPARC CPUs.
+#endif
+
+#ifdef __SUNPRO_CC
+# include <ieeefp.h>
+#endif
+
+
+namespace boost {
+namespace numeric {
+namespace interval_lib {
+namespace detail {
+
+struct sparc_rounding_control
+{
+ typedef unsigned int rounding_mode;
+
+ static void set_rounding_mode(const rounding_mode& mode)
+ {
+# if defined(__GNUC__)
+ __asm__ __volatile__("ld %0, %%fsr" : : "m"(mode));
+# elif defined (__SUNPRO_CC)
+ fpsetround(fp_rnd(mode));
+# elif defined(__KCC)
+ asm("sethi %hi(mode), %o1");
+ asm("ld [%o1+%lo(mode)], %fsr");
+# else
+# error Unsupported compiler for Sparc rounding control.
+# endif
+ }
+
+ static void get_rounding_mode(rounding_mode& mode)
+ {
+# if defined(__GNUC__)
+ __asm__ __volatile__("st %%fsr, %0" : "=m"(mode));
+# elif defined (__SUNPRO_CC)
+ mode = fpgetround();
+# elif defined(__KCC)
+# error KCC on Sun SPARC get_round_mode: please fix me
+ asm("st %fsr, [mode]");
+# else
+# error Unsupported compiler for Sparc rounding control.
+# endif
+ }
+
+#if defined(__SUNPRO_CC)
+ static void downward() { set_rounding_mode(FP_RM); }
+ static void upward() { set_rounding_mode(FP_RP); }
+ static void to_nearest() { set_rounding_mode(FP_RN); }
+ static void toward_zero() { set_rounding_mode(FP_RZ); }
+#else
+ static void downward() { set_rounding_mode(0xc0000000); }
+ static void upward() { set_rounding_mode(0x80000000); }
+ static void to_nearest() { set_rounding_mode(0x00000000); }
+ static void toward_zero() { set_rounding_mode(0x40000000); }
+#endif
+};
+
+} // namespace detail
+
+extern "C" {
+ float rintf(float);
+ double rint(double);
+}
+
+template<>
+struct rounding_control<float>:
+ detail::sparc_rounding_control
+{
+ static const float& force_rounding(const float& x) { return x; }
+ static float to_int(const float& x) { return rintf(x); }
+};
+
+template<>
+struct rounding_control<double>:
+ detail::sparc_rounding_control
+{
+ static const double& force_rounding(const double& x) { return x; }
+ static double to_int(const double& x) { return rint(x); }
+};
+
+template<>
+struct rounding_control<long double>:
+ detail::sparc_rounding_control
+{
+ static const long double& force_rounding(const long double& x) { return x; }
+ static long double to_int(const long double& x) { return rint(x); }
+};
+
+} // namespace interval_lib
+} // namespace numeric
+} // namespace boost
+
+#undef BOOST_NUMERIC_INTERVAL_NO_HARDWARE
+
+#endif /* BOOST_NUMERIC_INTERVAL_DETAIL_SPARC_ROUNDING_CONTROL_HPP */
diff --git a/boost/boost/numeric/interval/detail/test_input.hpp b/boost/boost/numeric/interval/detail/test_input.hpp
new file mode 100644
index 00000000000..58695fec3cb
--- /dev/null
+++ b/boost/boost/numeric/interval/detail/test_input.hpp
@@ -0,0 +1,76 @@
+/* Boost interval/detail/test_input.hpp file
+ *
+ * Copyright 2002 Hervé Brönnimann, Guillaume Melquiond, Sylvain Pion
+ *
+ * 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_NUMERIC_INTERVAL_DETAIL_TEST_INPUT_HPP
+#define BOOST_NUMERIC_INTERVAL_DETAIL_TEST_INPUT_HPP
+
+#include <boost/numeric/interval/detail/interval_prototype.hpp>
+
+namespace boost {
+namespace numeric {
+namespace interval_lib {
+namespace user {
+
+template<class T> inline
+bool is_zero(T const &v) { return v == static_cast<T>(0); }
+
+template<class T> inline
+bool is_neg (T const &v) { return v < static_cast<T>(0); }
+
+template<class T> inline
+bool is_pos (T const &v) { return v > static_cast<T>(0); }
+
+} // namespace user
+
+namespace detail {
+
+template<class T, class Policies> inline
+bool test_input(const interval<T, Policies>& x) {
+ typedef typename Policies::checking checking;
+ return checking::is_empty(x.lower(), x.upper());
+}
+
+template<class T, class Policies1, class Policies2> inline
+bool test_input(const interval<T, Policies1>& x, const interval<T, Policies2>& y) {
+ typedef typename Policies1::checking checking1;
+ typedef typename Policies2::checking checking2;
+ return checking1::is_empty(x.lower(), x.upper()) ||
+ checking2::is_empty(y.lower(), y.upper());
+}
+
+template<class T, class Policies> inline
+bool test_input(const T& x, const interval<T, Policies>& y) {
+ typedef typename Policies::checking checking;
+ return checking::is_nan(x) || checking::is_empty(y.lower(), y.upper());
+}
+
+template<class T, class Policies> inline
+bool test_input(const interval<T, Policies>& x, const T& y) {
+ typedef typename Policies::checking checking;
+ return checking::is_empty(x.lower(), x.upper()) || checking::is_nan(y);
+}
+
+template<class T, class Policies> inline
+bool test_input(const T& x) {
+ typedef typename Policies::checking checking;
+ return checking::is_nan(x);
+}
+
+template<class T, class Policies> inline
+bool test_input(const T& x, const T& y) {
+ typedef typename Policies::checking checking;
+ return checking::is_nan(x) || checking::is_nan(y);
+}
+
+} // namespace detail
+} // namespace interval_lib
+} // namespace numeric
+} // namespace boost
+
+#endif // BOOST_NUMERIC_INTERVAL_DETAIL_TEST_INPUT_HPP
diff --git a/boost/boost/numeric/interval/detail/x86_rounding_control.hpp b/boost/boost/numeric/interval/detail/x86_rounding_control.hpp
new file mode 100644
index 00000000000..3eebdbac589
--- /dev/null
+++ b/boost/boost/numeric/interval/detail/x86_rounding_control.hpp
@@ -0,0 +1,108 @@
+/* Boost interval/detail/x86_rounding_control.hpp file
+ *
+ * Copyright 2000 Jens Maurer
+ * Copyright 2002 Hervé Brönnimann, Guillaume Melquiond, Sylvain Pion
+ *
+ * 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_NUMERIC_INTERVAL_DETAIL_X86_ROUNDING_CONTROL_HPP
+#define BOOST_NUMERIC_INTERVAL_DETAIL_X86_ROUNDING_CONTROL_HPP
+
+#ifdef __GNUC__
+# include <boost/numeric/interval/detail/x86gcc_rounding_control.hpp>
+#elif defined(__BORLANDC__)
+# include <boost/numeric/interval/detail/bcc_rounding_control.hpp>
+#elif defined(_MSC_VER)
+# include <boost/numeric/interval/detail/msvc_rounding_control.hpp>
+#elif defined(__MWERKS__) || defined(__ICC)
+# define BOOST_NUMERIC_INTERVAL_USE_C99_SUBSYSTEM
+# include <boost/numeric/interval/detail/c99sub_rounding_control.hpp>
+#else
+# error Unsupported C++ compiler.
+#endif
+
+namespace boost {
+namespace numeric {
+namespace interval_lib {
+
+namespace detail {
+
+#ifdef BOOST_NUMERIC_INTERVAL_USE_C99_SUBSYSTEM
+typedef c99_rounding x86_rounding_control;
+#undef BOOST_NUMERIC_INTERVAL_USE_C99_SUBSYSTEM
+#else
+struct fpu_rounding_modes
+{
+ unsigned short to_nearest;
+ unsigned short downward;
+ unsigned short upward;
+ unsigned short toward_zero;
+};
+
+// exceptions masked, extended precision
+// hardware default is 0x037f (0x1000 only has a meaning on 287)
+static const fpu_rounding_modes rnd_mode = { 0x137f, 0x177f, 0x1b7f, 0x1f7f };
+
+struct x86_rounding_control: x86_rounding
+{
+ static void to_nearest() { set_rounding_mode(rnd_mode.to_nearest); }
+ static void downward() { set_rounding_mode(rnd_mode.downward); }
+ static void upward() { set_rounding_mode(rnd_mode.upward); }
+ static void toward_zero() { set_rounding_mode(rnd_mode.toward_zero); }
+};
+#endif // BOOST_NUMERIC_INTERVAL_USE_C99_SUBSYSTEM
+
+} // namespace detail
+
+template<>
+struct rounding_control<float>: detail::x86_rounding_control
+{
+ static float force_rounding(const float& r)
+ { volatile float r_ = r; return r_; }
+};
+
+template<>
+struct rounding_control<double>: detail::x86_rounding_control
+{
+ /*static double force_rounding(double r)
+ { asm volatile ("" : "+m"(r) : ); return r; }*/
+ static double force_rounding(const double& r)
+ { volatile double r_ = r; return r_; }
+};
+
+namespace detail {
+
+template<bool>
+struct x86_rounding_control_long_double;
+
+template<>
+struct x86_rounding_control_long_double<false>: x86_rounding_control
+{
+ static long double force_rounding(long double const &r)
+ { volatile long double r_ = r; return r_; }
+};
+
+template<>
+struct x86_rounding_control_long_double<true>: x86_rounding_control
+{
+ static long double const &force_rounding(long double const &r)
+ { return r; }
+};
+
+} // namespace detail
+
+template<>
+struct rounding_control<long double>:
+ detail::x86_rounding_control_long_double< (sizeof(long double) >= 10) >
+{};
+
+} // namespace interval_lib
+} // namespace numeric
+} // namespace boost
+
+#undef BOOST_NUMERIC_INTERVAL_NO_HARDWARE
+
+#endif /* BOOST_NUMERIC_INTERVAL_DETAIL_X86_ROUNDING_CONTROL_HPP */
diff --git a/boost/boost/numeric/interval/detail/x86gcc_rounding_control.hpp b/boost/boost/numeric/interval/detail/x86gcc_rounding_control.hpp
new file mode 100644
index 00000000000..079d681df96
--- /dev/null
+++ b/boost/boost/numeric/interval/detail/x86gcc_rounding_control.hpp
@@ -0,0 +1,51 @@
+/* Boost interval/detail/x86gcc_rounding_control.hpp file
+ *
+ * Copyright 2000 Jens Maurer
+ * Copyright 2002 Hervé Brönnimann, Guillaume Melquiond, Sylvain Pion
+ *
+ * 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_NUMERIC_INTERVAL_DETAIL_X86GCC_ROUNDING_CONTROL_HPP
+#define BOOST_NUMERIC_INTERVAL_DETAIL_X86GCC_ROUNDING_CONTROL_HPP
+
+#ifndef __GNUC__
+# error This header only works with GNU CC.
+#endif
+
+#ifndef __i386__
+# error This header only works on x86 CPUs.
+#endif
+
+namespace boost {
+namespace numeric {
+namespace interval_lib {
+namespace detail {
+
+struct x86_rounding
+{
+ typedef unsigned short rounding_mode;
+
+ static void set_rounding_mode(const rounding_mode& mode)
+ { __asm__ __volatile__ ("fldcw %0" : : "m"(mode)); }
+
+ static void get_rounding_mode(rounding_mode& mode)
+ { __asm__ __volatile__ ("fnstcw %0" : "=m"(mode)); }
+
+ template<class T>
+ static T to_int(T r)
+ {
+ T r_;
+ __asm__ ("frndint" : "=&t"(r_) : "0"(r));
+ return r_;
+ }
+};
+
+} // namespace detail
+} // namespace interval_lib
+} // namespace numeric
+} // namespace boost
+
+#endif /* BOOST_NUMERIC_INTERVAL_DETAIL_X86GCC_ROUNDING_CONTROL_HPP */
diff --git a/boost/boost/numeric/interval/ext/integer.hpp b/boost/boost/numeric/interval/ext/integer.hpp
new file mode 100644
index 00000000000..628a343ac88
--- /dev/null
+++ b/boost/boost/numeric/interval/ext/integer.hpp
@@ -0,0 +1,70 @@
+/* Boost interval/ext/integer.hpp template implementation file
+ *
+ * Copyright 2003 Guillaume Melquiond
+ *
+ * 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_NUMERIC_INTERVAL_EXT_INTEGER_HPP
+#define BOOST_NUMERIC_INTERVAL_EXT_INTEGER_HPP
+
+#include <boost/numeric/interval/detail/interval_prototype.hpp>
+#include <boost/numeric/interval/detail/test_input.hpp>
+
+namespace boost {
+namespace numeric {
+
+template<class T, class Policies> inline
+interval<T, Policies> operator+ (const interval<T, Policies>& x, int y)
+{
+ return x + static_cast<T>(y);
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> operator+ (int x, const interval<T, Policies>& y)
+{
+ return static_cast<T>(x) + y;
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> operator- (const interval<T, Policies>& x, int y)
+{
+ return x - static_cast<T>(y);
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> operator- (int x, const interval<T, Policies>& y)
+{
+ return static_cast<T>(x) - y;
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> operator* (const interval<T, Policies>& x, int y)
+{
+ return x * static_cast<T>(y);
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> operator* (int x, const interval<T, Policies>& y)
+{
+ return static_cast<T>(x) * y;
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> operator/ (const interval<T, Policies>& x, int y)
+{
+ return x / static_cast<T>(y);
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> operator/ (int x, const interval<T, Policies>& y)
+{
+ return static_cast<T>(x) / y;
+}
+
+} // namespace numeric
+} // namespace boost
+
+#endif // BOOST_NUMERIC_INTERVAL_EXT_INTEGER_HPP
diff --git a/boost/boost/numeric/interval/ext/x86_fast_rounding_control.hpp b/boost/boost/numeric/interval/ext/x86_fast_rounding_control.hpp
new file mode 100644
index 00000000000..7f89a4e5494
--- /dev/null
+++ b/boost/boost/numeric/interval/ext/x86_fast_rounding_control.hpp
@@ -0,0 +1,70 @@
+/* Boost interval/detail/x86gcc_rounding_control.hpp file
+ *
+ * This header provides a rounding control policy
+ * that avoids flushing results to memory. In
+ * order for this optimization to be reliable, it
+ * should be used only when no underflow or
+ * overflow would happen without it. Indeed, only
+ * values in range are correctly rounded.
+ *
+ * Copyright 2002 Hervé Brönnimann, Guillaume Melquiond, Sylvain Pion
+ *
+ * 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_NUMERIC_INTERVAL_EXT_X86_FAST_ROUNDING_CONTROL_HPP
+#define BOOST_NUMERIC_INTERVAL_EXT_X86_FAST_ROUNDING_CONTROL_HPP
+
+namespace boost {
+namespace numeric {
+namespace interval_lib {
+
+namespace detail {
+
+// exceptions masked, expected precision (the mask is 0x0300)
+static const fpu_rounding_modes rnd_mode_f = { 0x107f, 0x147f, 0x187f, 0x1c7f };
+static const fpu_rounding_modes rnd_mode_d = { 0x127f, 0x167f, 0x1a7f, 0x1e7f };
+static const fpu_rounding_modes rnd_mode_l = { 0x137f, 0x177f, 0x1b7f, 0x1f7f };
+
+} // namespace detail
+
+template<class T>
+struct x86_fast_rounding_control;
+
+template<>
+struct x86_fast_rounding_control<float>: detail::x86_rounding
+{
+ static void to_nearest() { set_rounding_mode(detail::rnd_mode_f.to_nearest); }
+ static void downward() { set_rounding_mode(detail::rnd_mode_f.downward); }
+ static void upward() { set_rounding_mode(detail::rnd_mode_f.upward); }
+ static void toward_zero() { set_rounding_mode(detail::rnd_mode_f.toward_zero); }
+ static const float& force_rounding(const float& r) { return r; }
+};
+
+template<>
+struct x86_fast_rounding_control<double>: detail::x86_rounding
+{
+ static void to_nearest() { set_rounding_mode(detail::rnd_mode_d.to_nearest); }
+ static void downward() { set_rounding_mode(detail::rnd_mode_d.downward); }
+ static void upward() { set_rounding_mode(detail::rnd_mode_d.upward); }
+ static void toward_zero() { set_rounding_mode(detail::rnd_mode_d.toward_zero); }
+ static const double& force_rounding(const double& r) { return r; }
+};
+
+template<>
+struct x86_fast_rounding_control<long double>: detail::x86_rounding
+{
+ static void to_nearest() { set_rounding_mode(detail::rnd_mode_l.to_nearest); }
+ static void downward() { set_rounding_mode(detail::rnd_mode_l.downward); }
+ static void upward() { set_rounding_mode(detail::rnd_mode_l.upward); }
+ static void toward_zero() { set_rounding_mode(detail::rnd_mode_l.toward_zero); }
+ static const long double& force_rounding(const long double& r) { return r; }
+};
+
+} // namespace interval_lib
+} // namespace numeric
+} // namespace boost
+
+#endif // BOOST_NUMERIC_INTERVAL_EXT_X86_FAST_ROUNDING_CONTROL_HPP
diff --git a/boost/boost/numeric/interval/hw_rounding.hpp b/boost/boost/numeric/interval/hw_rounding.hpp
new file mode 100644
index 00000000000..8309354a574
--- /dev/null
+++ b/boost/boost/numeric/interval/hw_rounding.hpp
@@ -0,0 +1,68 @@
+/* Boost interval/hw_rounding.hpp template implementation file
+ *
+ * Copyright 2002 Hervé Brönnimann, Guillaume Melquiond, Sylvain Pion
+ * Copyright 2005 Guillaume Melquiond
+ *
+ * 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_NUMERIC_INTERVAL_HW_ROUNDING_HPP
+#define BOOST_NUMERIC_INTERVAL_HW_ROUNDING_HPP
+
+#include <boost/numeric/interval/rounding.hpp>
+#include <boost/numeric/interval/rounded_arith.hpp>
+
+#define BOOST_NUMERIC_INTERVAL_NO_HARDWARE
+
+// define appropriate specialization of rounding_control for built-in types
+#if defined(__i386__) || defined(_M_IX86) || defined(__BORLANDC__) || defined(_M_X64)
+# include <boost/numeric/interval/detail/x86_rounding_control.hpp>
+#elif defined(powerpc) || defined(__powerpc__) || defined(__ppc__)
+# include <boost/numeric/interval/detail/ppc_rounding_control.hpp>
+#elif defined(sparc) || defined(__sparc__)
+# include <boost/numeric/interval/detail/sparc_rounding_control.hpp>
+#elif defined(alpha) || defined(__alpha__)
+# include <boost/numeric/interval/detail/alpha_rounding_control.hpp>
+#elif defined(ia64) || defined(__ia64) || defined(__ia64__)
+# include <boost/numeric/interval/detail/ia64_rounding_control.hpp>
+#endif
+
+#if defined(BOOST_NUMERIC_INTERVAL_NO_HARDWARE) && (defined(__USE_ISOC99) || defined(__MSL__))
+# include <boost/numeric/interval/detail/c99_rounding_control.hpp>
+#endif
+
+#if defined(BOOST_NUMERIC_INTERVAL_NO_HARDWARE)
+# undef BOOST_NUMERIC_INTERVAL_NO_HARDWARE
+# error Boost.Numeric.Interval: Please specify rounding control mechanism.
+#endif
+
+namespace boost {
+namespace numeric {
+namespace interval_lib {
+
+/*
+ * Three specializations of rounded_math<T>
+ */
+
+template<>
+struct rounded_math<float>
+ : save_state<rounded_arith_opp<float> >
+{};
+
+template<>
+struct rounded_math<double>
+ : save_state<rounded_arith_opp<double> >
+{};
+
+template<>
+struct rounded_math<long double>
+ : save_state<rounded_arith_opp<long double> >
+{};
+
+} // namespace interval_lib
+} // namespace numeric
+} // namespace boost
+
+#endif // BOOST_NUMERIC_INTERVAL_HW_ROUNDING_HPP
diff --git a/boost/boost/numeric/interval/interval.hpp b/boost/boost/numeric/interval/interval.hpp
new file mode 100644
index 00000000000..0b2d0eec6ea
--- /dev/null
+++ b/boost/boost/numeric/interval/interval.hpp
@@ -0,0 +1,450 @@
+/* Boost interval/interval.hpp header file
+ *
+ * Copyright 2002-2003 Hervé Brönnimann, Guillaume Melquiond, Sylvain Pion
+ *
+ * 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_NUMERIC_INTERVAL_INTERVAL_HPP
+#define BOOST_NUMERIC_INTERVAL_INTERVAL_HPP
+
+#include <stdexcept>
+#include <string>
+#include <boost/numeric/interval/detail/interval_prototype.hpp>
+
+namespace boost {
+namespace numeric {
+
+namespace interval_lib {
+
+class comparison_error
+ : public std::runtime_error
+{
+public:
+ comparison_error()
+ : std::runtime_error("boost::interval: uncertain comparison")
+ { }
+};
+
+} // namespace interval_lib
+
+/*
+ * interval class
+ */
+
+template<class T, class Policies>
+class interval
+{
+private:
+ struct interval_holder;
+ struct number_holder;
+public:
+ typedef T base_type;
+ typedef Policies traits_type;
+
+ T const &lower() const;
+ T const &upper() const;
+
+ interval();
+ interval(T const &v);
+ template<class T1> interval(T1 const &v);
+ interval(T const &l, T const &u);
+ template<class T1, class T2> interval(T1 const &l, T2 const &u);
+ interval(interval<T, Policies> const &r);
+ template<class Policies1> interval(interval<T, Policies1> const &r);
+ template<class T1, class Policies1> interval(interval<T1, Policies1> const &r);
+
+ interval &operator=(T const &v);
+ template<class T1> interval &operator=(T1 const &v);
+ interval &operator=(interval<T, Policies> const &r);
+ template<class Policies1> interval &operator=(interval<T, Policies1> const &r);
+ template<class T1, class Policies1> interval &operator=(interval<T1, Policies1> const &r);
+
+ void assign(const T& l, const T& u);
+
+ static interval empty();
+ static interval whole();
+ static interval hull(const T& x, const T& y);
+
+ interval& operator+= (const T& r);
+ interval& operator+= (const interval& r);
+ interval& operator-= (const T& r);
+ interval& operator-= (const interval& r);
+ interval& operator*= (const T& r);
+ interval& operator*= (const interval& r);
+ interval& operator/= (const T& r);
+ interval& operator/= (const interval& r);
+
+ bool operator< (const interval_holder& r) const;
+ bool operator> (const interval_holder& r) const;
+ bool operator<= (const interval_holder& r) const;
+ bool operator>= (const interval_holder& r) const;
+ bool operator== (const interval_holder& r) const;
+ bool operator!= (const interval_holder& r) const;
+
+ bool operator< (const number_holder& r) const;
+ bool operator> (const number_holder& r) const;
+ bool operator<= (const number_holder& r) const;
+ bool operator>= (const number_holder& r) const;
+ bool operator== (const number_holder& r) const;
+ bool operator!= (const number_holder& r) const;
+
+ // the following is for internal use only, it is not a published interface
+ // nevertheless, it's public because friends don't always work correctly.
+ interval(const T& l, const T& u, bool): low(l), up(u) {}
+ void set_empty();
+ void set_whole();
+ void set(const T& l, const T& u);
+
+private:
+ struct interval_holder {
+ template<class Policies2>
+ interval_holder(const interval<T, Policies2>& r)
+ : low(r.lower()), up(r.upper())
+ {
+ typedef typename Policies2::checking checking2;
+ if (checking2::is_empty(low, up))
+ throw interval_lib::comparison_error();
+ }
+
+ const T& low;
+ const T& up;
+ };
+
+ struct number_holder {
+ number_holder(const T& r) : val(r)
+ {
+ typedef typename Policies::checking checking;
+ if (checking::is_nan(r))
+ throw interval_lib::comparison_error();
+ }
+
+ const T& val;
+ };
+
+ typedef typename Policies::checking checking;
+ typedef typename Policies::rounding rounding;
+
+ T low;
+ T up;
+};
+
+template<class T, class Policies> inline
+interval<T, Policies>::interval():
+ low(static_cast<T>(0)), up(static_cast<T>(0))
+{}
+
+template<class T, class Policies> inline
+interval<T, Policies>::interval(T const &v): low(v), up(v)
+{
+ if (checking::is_nan(v)) set_empty();
+}
+
+template<class T, class Policies> template<class T1> inline
+interval<T, Policies>::interval(T1 const &v)
+{
+ if (checking::is_nan(v)) set_empty();
+ else {
+ rounding rnd;
+ low = rnd.conv_down(v);
+ up = rnd.conv_up (v);
+ }
+}
+
+template<class T, class Policies> template<class T1, class T2> inline
+interval<T, Policies>::interval(T1 const &l, T2 const &u)
+{
+ if (checking::is_nan(l) || checking::is_nan(u) || !(l <= u)) set_empty();
+ else {
+ rounding rnd;
+ low = rnd.conv_down(l);
+ up = rnd.conv_up (u);
+ }
+}
+
+template<class T, class Policies> inline
+interval<T, Policies>::interval(T const &l, T const &u): low(l), up(u)
+{
+ if (checking::is_nan(l) || checking::is_nan(u) || !(l <= u))
+ set_empty();
+}
+
+
+template<class T, class Policies> inline
+interval<T, Policies>::interval(interval<T, Policies> const &r): low(r.lower()), up(r.upper())
+{}
+
+template<class T, class Policies> template<class Policies1> inline
+interval<T, Policies>::interval(interval<T, Policies1> const &r): low(r.lower()), up(r.upper())
+{
+ typedef typename Policies1::checking checking1;
+ if (checking1::is_empty(r.lower(), r.upper())) set_empty();
+}
+
+template<class T, class Policies> template<class T1, class Policies1> inline
+interval<T, Policies>::interval(interval<T1, Policies1> const &r)
+{
+ typedef typename Policies1::checking checking1;
+ if (checking1::is_empty(r.lower(), r.upper())) set_empty();
+ else {
+ rounding rnd;
+ low = rnd.conv_down(r.lower());
+ up = rnd.conv_up (r.upper());
+ }
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> &interval<T, Policies>::operator=(T const &v)
+{
+ if (checking::is_nan(v)) set_empty();
+ else low = up = v;
+ return *this;
+}
+
+template<class T, class Policies> template<class T1> inline
+interval<T, Policies> &interval<T, Policies>::operator=(T1 const &v)
+{
+ if (checking::is_nan(v)) set_empty();
+ else {
+ rounding rnd;
+ low = rnd.conv_down(v);
+ up = rnd.conv_up (v);
+ }
+ return *this;
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> &interval<T, Policies>::operator=(interval<T, Policies> const &r)
+{
+ low = r.lower();
+ up = r.upper();
+ return *this;
+}
+
+template<class T, class Policies> template<class Policies1> inline
+interval<T, Policies> &interval<T, Policies>::operator=(interval<T, Policies1> const &r)
+{
+ typedef typename Policies1::checking checking1;
+ if (checking1::is_empty(r.lower(), r.upper())) set_empty();
+ else {
+ low = r.lower();
+ up = r.upper();
+ }
+ return *this;
+}
+
+template<class T, class Policies> template<class T1, class Policies1> inline
+interval<T, Policies> &interval<T, Policies>::operator=(interval<T1, Policies1> const &r)
+{
+ typedef typename Policies1::checking checking1;
+ if (checking1::is_empty(r.lower(), r.upper())) set_empty();
+ else {
+ rounding rnd;
+ low = rnd.conv_down(r.lower());
+ up = rnd.conv_up (r.upper());
+ }
+ return *this;
+}
+
+template<class T, class Policies> inline
+void interval<T, Policies>::assign(const T& l, const T& u)
+{
+ if (checking::is_nan(l) || checking::is_nan(u) || !(l <= u))
+ set_empty();
+ else set(l, u);
+}
+
+template<class T, class Policies> inline
+void interval<T, Policies>::set(const T& l, const T& u)
+{
+ low = l;
+ up = u;
+}
+
+template<class T, class Policies> inline
+void interval<T, Policies>::set_empty()
+{
+ low = checking::empty_lower();
+ up = checking::empty_upper();
+}
+
+template<class T, class Policies> inline
+void interval<T, Policies>::set_whole()
+{
+ low = checking::neg_inf();
+ up = checking::pos_inf();
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> interval<T, Policies>::hull(const T& x, const T& y)
+{
+ bool bad_x = checking::is_nan(x);
+ bool bad_y = checking::is_nan(y);
+ if (bad_x)
+ if (bad_y) return interval::empty();
+ else return interval(y, y, true);
+ else
+ if (bad_y) return interval(x, x, true);
+ if (x <= y) return interval(x, y, true);
+ else return interval(y, x, true);
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> interval<T, Policies>::empty()
+{
+ return interval<T, Policies>(checking::empty_lower(),
+ checking::empty_upper(), true);
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> interval<T, Policies>::whole()
+{
+ return interval<T, Policies>(checking::neg_inf(), checking::pos_inf(), true);
+}
+
+template<class T, class Policies> inline
+const T& interval<T, Policies>::lower() const
+{
+ return low;
+}
+
+template<class T, class Policies> inline
+const T& interval<T, Policies>::upper() const
+{
+ return up;
+}
+
+/*
+ * interval/interval comparisons
+ */
+
+template<class T, class Policies> inline
+bool interval<T, Policies>::operator< (const interval_holder& r) const
+{
+ if (!checking::is_empty(low, up)) {
+ if (up < r.low) return true;
+ else if (low >= r.up) return false;
+ }
+ throw interval_lib::comparison_error();
+}
+
+template<class T, class Policies> inline
+bool interval<T, Policies>::operator> (const interval_holder& r) const
+{
+ if (!checking::is_empty(low, up)) {
+ if (low > r.up) return true;
+ else if (up <= r.low) return false;
+ }
+ throw interval_lib::comparison_error();
+}
+
+template<class T, class Policies> inline
+bool interval<T, Policies>::operator<= (const interval_holder& r) const
+{
+ if (!checking::is_empty(low, up)) {
+ if (up <= r.low) return true;
+ else if (low > r.up) return false;
+ }
+ throw interval_lib::comparison_error();
+}
+
+template<class T, class Policies> inline
+bool interval<T, Policies>::operator>= (const interval_holder& r) const
+{
+ if (!checking::is_empty(low, up)) {
+ if (low >= r.up) return true;
+ else if (up < r.low) return false;
+ }
+ throw interval_lib::comparison_error();
+}
+
+template<class T, class Policies> inline
+bool interval<T, Policies>::operator== (const interval_holder& r) const
+{
+ if (!checking::is_empty(low, up)) {
+ if (up == r.low && low == r.up) return true;
+ else if (up < r.low || low > r.up) return false;
+ }
+ throw interval_lib::comparison_error();
+}
+
+template<class T, class Policies> inline
+bool interval<T, Policies>::operator!= (const interval_holder& r) const
+{
+ if (!checking::is_empty(low, up)) {
+ if (up < r.low || low > r.up) return true;
+ else if (up == r.low && low == r.up) return false;
+ }
+ throw interval_lib::comparison_error();
+}
+
+/*
+ * interval/number comparisons
+ */
+
+template<class T, class Policies> inline
+bool interval<T, Policies>::operator< (const number_holder& r) const
+{
+ if (!checking::is_empty(low, up)) {
+ if (up < r.val) return true;
+ else if (low >= r.val) return false;
+ }
+ throw interval_lib::comparison_error();
+}
+
+template<class T, class Policies> inline
+bool interval<T, Policies>::operator> (const number_holder& r) const
+{
+ if (!checking::is_empty(low, up)) {
+ if (low > r.val) return true;
+ else if (up <= r.val) return false;
+ }
+ throw interval_lib::comparison_error();
+}
+
+template<class T, class Policies> inline
+bool interval<T, Policies>::operator<= (const number_holder& r) const
+{
+ if (!checking::is_empty(low, up)) {
+ if (up <= r.val) return true;
+ else if (low > r.val) return false;
+ }
+ throw interval_lib::comparison_error();
+}
+
+template<class T, class Policies> inline
+bool interval<T, Policies>::operator>= (const number_holder& r) const
+{
+ if (!checking::is_empty(low, up)) {
+ if (low >= r.val) return true;
+ else if (up < r.val) return false;
+ }
+ throw interval_lib::comparison_error();
+}
+
+template<class T, class Policies> inline
+bool interval<T, Policies>::operator== (const number_holder& r) const
+{
+ if (!checking::is_empty(low, up)) {
+ if (up == r.val && low == r.val) return true;
+ else if (up < r.val || low > r.val) return false;
+ }
+ throw interval_lib::comparison_error();
+}
+
+template<class T, class Policies> inline
+bool interval<T, Policies>::operator!= (const number_holder& r) const
+{
+ if (!checking::is_empty(low, up)) {
+ if (up < r.val || low > r.val) return true;
+ else if (up == r.val && low == r.val) return false;
+ }
+ throw interval_lib::comparison_error();
+}
+
+} // namespace numeric
+} // namespace boost
+
+#endif // BOOST_NUMERIC_INTERVAL_INTERVAL_HPP
diff --git a/boost/boost/numeric/interval/io.hpp b/boost/boost/numeric/interval/io.hpp
new file mode 100644
index 00000000000..dc4179e52c7
--- /dev/null
+++ b/boost/boost/numeric/interval/io.hpp
@@ -0,0 +1,41 @@
+/* Boost interval/io.hpp header file
+ *
+ * This file is only meant to provide a quick
+ * implementation of the output operator. It is
+ * provided for test programs that aren't even
+ * interested in the precision of the results.
+ * A real progam should define its own operators
+ * and never include this header.
+ *
+ * Copyright 2003 Guillaume Melquiond
+ *
+ * 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_NUMERIC_INTERVAL_IO_HPP
+#define BOOST_NUMERIC_INTERVAL_IO_HPP
+
+#include <boost/numeric/interval/interval.hpp>
+#include <boost/numeric/interval/utility.hpp>
+#include <ostream>
+
+namespace boost {
+namespace numeric {
+
+template<class CharType, class CharTraits, class T, class Policies>
+std::basic_ostream<CharType, CharTraits> &operator<<
+ (std::basic_ostream<CharType, CharTraits> &stream,
+ interval<T, Policies> const &value)
+{
+ if (empty(value))
+ return stream << "[]";
+ else
+ return stream << '[' << lower(value) << ',' << upper(value) << ']';
+}
+
+} // namespace numeric
+} // namespace boost
+
+#endif // BOOST_NUMERIC_INTERVAL_IO_HPP
diff --git a/boost/boost/numeric/interval/limits.hpp b/boost/boost/numeric/interval/limits.hpp
new file mode 100644
index 00000000000..d691ccee229
--- /dev/null
+++ b/boost/boost/numeric/interval/limits.hpp
@@ -0,0 +1,51 @@
+/* Boost interval/limits.hpp template implementation file
+ *
+ * Copyright 2000 Jens Maurer
+ * Copyright 2002-2003 Hervé Brönnimann, Guillaume Melquiond, Sylvain Pion
+ *
+ * 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_NUMERIC_INTERVAL_LIMITS_HPP
+#define BOOST_NUMERIC_INTERVAL_LIMITS_HPP
+
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#include <boost/config.hpp>
+#include <boost/limits.hpp>
+#include <boost/numeric/interval/detail/interval_prototype.hpp>
+
+namespace std {
+
+template<class T, class Policies>
+class numeric_limits<boost::numeric::interval<T, Policies> >
+ : public numeric_limits<T>
+{
+private:
+ typedef boost::numeric::interval<T, Policies> I;
+ typedef numeric_limits<T> bl;
+public:
+ static I min BOOST_PREVENT_MACRO_SUBSTITUTION () throw() { return I((bl::min)(), (bl::min)()); }
+ static I max BOOST_PREVENT_MACRO_SUBSTITUTION () throw() { return I((bl::max)(), (bl::max)()); }
+ static I epsilon() throw() { return I(bl::epsilon(), bl::epsilon()); }
+
+ BOOST_STATIC_CONSTANT(float_round_style, round_style = round_indeterminate);
+ BOOST_STATIC_CONSTANT(bool, is_iec559 = false);
+
+ static I infinity () throw() { return I::whole(); }
+ static I quiet_NaN() throw() { return I::empty(); }
+ static I signaling_NaN() throw()
+ { return I(bl::signaling_NaN(), bl::signaling_Nan()); }
+ static I denorm_min() throw()
+ { return I(bl::denorm_min(), bl::denorm_min()); }
+private:
+ static I round_error(); // hide this on purpose, not yet implemented
+};
+
+} // namespace std
+
+#endif
+
+#endif // BOOST_NUMERIC_INTERVAL_LIMITS_HPP
diff --git a/boost/boost/numeric/interval/policies.hpp b/boost/boost/numeric/interval/policies.hpp
new file mode 100644
index 00000000000..70ad220d9a5
--- /dev/null
+++ b/boost/boost/numeric/interval/policies.hpp
@@ -0,0 +1,75 @@
+/* Boost interval/policies.hpp template implementation file
+ *
+ * Copyright 2003 Guillaume Melquiond
+ *
+ * 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_NUMERIC_INTERVAL_POLICIES_HPP
+#define BOOST_NUMERIC_INTERVAL_POLICIES_HPP
+
+#include <boost/numeric/interval/interval.hpp>
+
+namespace boost {
+namespace numeric {
+namespace interval_lib {
+
+/*
+ * policies class
+ */
+
+template<class Rounding, class Checking>
+struct policies
+{
+ typedef Rounding rounding;
+ typedef Checking checking;
+};
+
+/*
+ * policies switching classes
+ */
+
+template<class OldInterval, class NewRounding>
+class change_rounding
+{
+ typedef typename OldInterval::base_type T;
+ typedef typename OldInterval::traits_type p;
+ typedef typename p::checking checking;
+public:
+ typedef interval<T, policies<NewRounding, checking> > type;
+};
+
+template<class OldInterval, class NewChecking>
+class change_checking
+{
+ typedef typename OldInterval::base_type T;
+ typedef typename OldInterval::traits_type p;
+ typedef typename p::rounding rounding;
+public:
+ typedef interval<T, policies<rounding, NewChecking> > type;
+};
+
+/*
+ * Protect / unprotect: control whether the rounding mode is set/reset
+ * at each operation, rather than once and for all.
+ */
+
+template<class OldInterval>
+class unprotect
+{
+ typedef typename OldInterval::base_type T;
+ typedef typename OldInterval::traits_type p;
+ typedef typename p::rounding r;
+ typedef typename r::unprotected_rounding newRounding;
+public:
+ typedef typename change_rounding<OldInterval, newRounding>::type type;
+};
+
+} // namespace interval_lib
+} // namespace numeric
+} // namespace boost
+
+
+#endif // BOOST_NUMERIC_INTERVAL_POLICIES_HPP
diff --git a/boost/boost/numeric/interval/rounded_arith.hpp b/boost/boost/numeric/interval/rounded_arith.hpp
new file mode 100644
index 00000000000..6ce5c7f7e2c
--- /dev/null
+++ b/boost/boost/numeric/interval/rounded_arith.hpp
@@ -0,0 +1,120 @@
+/* Boost interval/rounded_arith.hpp template implementation file
+ *
+ * Copyright 2002-2003 Hervé Brönnimann, Guillaume Melquiond, Sylvain Pion
+ *
+ * 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_NUMERIC_INTERVAL_ROUNDED_ARITH_HPP
+#define BOOST_NUMERIC_INTERVAL_ROUNDED_ARITH_HPP
+
+#include <boost/numeric/interval/rounding.hpp>
+#include <boost/numeric/interval/detail/bugs.hpp>
+#include <cmath>
+
+namespace boost {
+namespace numeric {
+namespace interval_lib {
+
+/*
+ * Three classes of rounding: exact, std, opp
+ * See documentation for details.
+ */
+
+template<class T, class Rounding>
+struct rounded_arith_exact: Rounding {
+ void init() { }
+ template<class U> T conv_down(U const &v) { return v; }
+ template<class U> T conv_up (U const &v) { return v; }
+ T add_down (const T& x, const T& y) { return x + y; }
+ T add_up (const T& x, const T& y) { return x + y; }
+ T sub_down (const T& x, const T& y) { return x - y; }
+ T sub_up (const T& x, const T& y) { return x - y; }
+ T mul_down (const T& x, const T& y) { return x * y; }
+ T mul_up (const T& x, const T& y) { return x * y; }
+ T div_down (const T& x, const T& y) { return x / y; }
+ T div_up (const T& x, const T& y) { return x / y; }
+ T median (const T& x, const T& y) { return (x + y) / 2; }
+ T sqrt_down(const T& x)
+ { BOOST_NUMERIC_INTERVAL_using_math(sqrt); return sqrt(x); }
+ T sqrt_up (const T& x)
+ { BOOST_NUMERIC_INTERVAL_using_math(sqrt); return sqrt(x); }
+ T int_down (const T& x)
+ { BOOST_NUMERIC_INTERVAL_using_math(floor); return floor(x); }
+ T int_up (const T& x)
+ { BOOST_NUMERIC_INTERVAL_using_math(ceil); return ceil(x); }
+};
+
+template<class T, class Rounding>
+struct rounded_arith_std: Rounding {
+# define BOOST_DN(EXPR) this->downward(); return this->force_rounding(EXPR)
+# define BOOST_NR(EXPR) this->to_nearest(); return this->force_rounding(EXPR)
+# define BOOST_UP(EXPR) this->upward(); return this->force_rounding(EXPR)
+ void init() { }
+ template<class U> T conv_down(U const &v) { BOOST_DN(v); }
+ template<class U> T conv_up (U const &v) { BOOST_UP(v); }
+ T add_down(const T& x, const T& y) { BOOST_DN(x + y); }
+ T sub_down(const T& x, const T& y) { BOOST_DN(x - y); }
+ T mul_down(const T& x, const T& y) { BOOST_DN(x * y); }
+ T div_down(const T& x, const T& y) { BOOST_DN(x / y); }
+ T add_up (const T& x, const T& y) { BOOST_UP(x + y); }
+ T sub_up (const T& x, const T& y) { BOOST_UP(x - y); }
+ T mul_up (const T& x, const T& y) { BOOST_UP(x * y); }
+ T div_up (const T& x, const T& y) { BOOST_UP(x / y); }
+ T median(const T& x, const T& y) { BOOST_NR((x + y) / 2); }
+ T sqrt_down(const T& x)
+ { BOOST_NUMERIC_INTERVAL_using_math(sqrt); BOOST_DN(sqrt(x)); }
+ T sqrt_up (const T& x)
+ { BOOST_NUMERIC_INTERVAL_using_math(sqrt); BOOST_UP(sqrt(x)); }
+ T int_down(const T& x) { this->downward(); return to_int(x); }
+ T int_up (const T& x) { this->upward(); return to_int(x); }
+# undef BOOST_DN
+# undef BOOST_NR
+# undef BOOST_UP
+};
+
+template<class T, class Rounding>
+struct rounded_arith_opp: Rounding {
+ void init() { this->upward(); }
+# define BOOST_DN(EXPR) \
+ this->downward(); \
+ T r = this->force_rounding(EXPR); \
+ this->upward(); \
+ return r
+# define BOOST_NR(EXPR) \
+ this->to_nearest(); \
+ T r = this->force_rounding(EXPR); \
+ this->upward(); \
+ return r
+# define BOOST_UP(EXPR) return this->force_rounding(EXPR)
+# define BOOST_UP_NEG(EXPR) return -this->force_rounding(EXPR)
+ template<class U> T conv_down(U const &v) { BOOST_UP_NEG(-v); }
+ template<class U> T conv_up (U const &v) { BOOST_UP(v); }
+ T add_down(const T& x, const T& y) { BOOST_UP_NEG((-x) - y); }
+ T sub_down(const T& x, const T& y) { BOOST_UP_NEG(y - x); }
+ T mul_down(const T& x, const T& y) { BOOST_UP_NEG(x * (-y)); }
+ T div_down(const T& x, const T& y) { BOOST_UP_NEG(x / (-y)); }
+ T add_up (const T& x, const T& y) { BOOST_UP(x + y); }
+ T sub_up (const T& x, const T& y) { BOOST_UP(x - y); }
+ T mul_up (const T& x, const T& y) { BOOST_UP(x * y); }
+ T div_up (const T& x, const T& y) { BOOST_UP(x / y); }
+ T median (const T& x, const T& y) { BOOST_NR((x + y) / 2); }
+ T sqrt_down(const T& x)
+ { BOOST_NUMERIC_INTERVAL_using_math(sqrt); BOOST_DN(sqrt(x)); }
+ T sqrt_up (const T& x)
+ { BOOST_NUMERIC_INTERVAL_using_math(sqrt); BOOST_UP(sqrt(x)); }
+ T int_down(const T& x) { return -to_int(-x); }
+ T int_up (const T& x) { return to_int(x); }
+# undef BOOST_DN
+# undef BOOST_NR
+# undef BOOST_UP
+# undef BOOST_UP_NEG
+};
+
+} // namespace interval_lib
+} // namespace numeric
+} // namespace boost
+
+#endif // BOOST_NUMERIC_INTERVAL_ROUNDED_ARITH_HPP
diff --git a/boost/boost/numeric/interval/rounded_transc.hpp b/boost/boost/numeric/interval/rounded_transc.hpp
new file mode 100644
index 00000000000..e1704f5f2b3
--- /dev/null
+++ b/boost/boost/numeric/interval/rounded_transc.hpp
@@ -0,0 +1,140 @@
+/* Boost interval/rounded_transc.hpp template implementation file
+ *
+ * Copyright 2002-2003 Hervé Brönnimann, Guillaume Melquiond, Sylvain Pion
+ *
+ * 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_NUMERIC_INTERVAL_ROUNDED_TRANSC_HPP
+#define BOOST_NUMERIC_INTERVAL_ROUNDED_TRANSC_HPP
+
+#include <boost/numeric/interval/rounding.hpp>
+#include <boost/numeric/interval/detail/bugs.hpp>
+#include <cmath>
+
+namespace boost {
+namespace numeric {
+namespace interval_lib {
+
+template<class T, class Rounding>
+struct rounded_transc_exact: Rounding
+{
+# define BOOST_NUMERIC_INTERVAL_new_func(f) \
+ T f##_down(const T& x) { BOOST_NUMERIC_INTERVAL_using_math(f); return f(x); } \
+ T f##_up (const T& x) { BOOST_NUMERIC_INTERVAL_using_math(f); return f(x); }
+ BOOST_NUMERIC_INTERVAL_new_func(exp)
+ BOOST_NUMERIC_INTERVAL_new_func(log)
+ BOOST_NUMERIC_INTERVAL_new_func(sin)
+ BOOST_NUMERIC_INTERVAL_new_func(cos)
+ BOOST_NUMERIC_INTERVAL_new_func(tan)
+ BOOST_NUMERIC_INTERVAL_new_func(asin)
+ BOOST_NUMERIC_INTERVAL_new_func(acos)
+ BOOST_NUMERIC_INTERVAL_new_func(atan)
+ BOOST_NUMERIC_INTERVAL_new_func(sinh)
+ BOOST_NUMERIC_INTERVAL_new_func(cosh)
+ BOOST_NUMERIC_INTERVAL_new_func(tanh)
+# undef BOOST_NUMERIC_INTERVAL_new_func
+# define BOOST_NUMERIC_INTERVAL_new_func(f) \
+ T f##_down(const T& x) { BOOST_NUMERIC_INTERVAL_using_ahyp(f); return f(x); } \
+ T f##_up (const T& x) { BOOST_NUMERIC_INTERVAL_using_ahyp(f); return f(x); }
+ BOOST_NUMERIC_INTERVAL_new_func(asinh)
+ BOOST_NUMERIC_INTERVAL_new_func(acosh)
+ BOOST_NUMERIC_INTERVAL_new_func(atanh)
+# undef BOOST_NUMERIC_INTERVAL_new_func
+};
+
+template<class T, class Rounding>
+struct rounded_transc_std: Rounding
+{
+# define BOOST_NUMERIC_INTERVAL_new_func(f) \
+ T f##_down(const T& x) \
+ { BOOST_NUMERIC_INTERVAL_using_math(f); \
+ this->downward(); return this->force_rounding(f(x)); } \
+ T f##_up (const T& x) \
+ { BOOST_NUMERIC_INTERVAL_using_math(f); \
+ this->upward(); return this->force_rounding(f(x)); }
+ BOOST_NUMERIC_INTERVAL_new_func(exp)
+ BOOST_NUMERIC_INTERVAL_new_func(log)
+ BOOST_NUMERIC_INTERVAL_new_func(sin)
+ BOOST_NUMERIC_INTERVAL_new_func(cos)
+ BOOST_NUMERIC_INTERVAL_new_func(tan)
+ BOOST_NUMERIC_INTERVAL_new_func(asin)
+ BOOST_NUMERIC_INTERVAL_new_func(acos)
+ BOOST_NUMERIC_INTERVAL_new_func(atan)
+ BOOST_NUMERIC_INTERVAL_new_func(sinh)
+ BOOST_NUMERIC_INTERVAL_new_func(cosh)
+ BOOST_NUMERIC_INTERVAL_new_func(tanh)
+# undef BOOST_NUMERIC_INTERVAL_new_func
+# define BOOST_NUMERIC_INTERVAL_new_func(f) \
+ T f##_down(const T& x) \
+ { BOOST_NUMERIC_INTERVAL_using_ahyp(f); \
+ this->downward(); return this->force_rounding(f(x)); } \
+ T f##_up (const T& x) \
+ { BOOST_NUMERIC_INTERVAL_using_ahyp(f); \
+ this->upward(); return this->force_rounding(f(x)); }
+ BOOST_NUMERIC_INTERVAL_new_func(asinh)
+ BOOST_NUMERIC_INTERVAL_new_func(acosh)
+ BOOST_NUMERIC_INTERVAL_new_func(atanh)
+# undef BOOST_NUMERIC_INTERVAL_new_func
+};
+
+template<class T, class Rounding>
+struct rounded_transc_opp: Rounding
+{
+# define BOOST_NUMERIC_INTERVAL_new_func(f) \
+ T f##_down(const T& x) \
+ { BOOST_NUMERIC_INTERVAL_using_math(f); \
+ this->downward(); T y = this->force_rounding(f(x)); \
+ this->upward(); return y; } \
+ T f##_up (const T& x) \
+ { BOOST_NUMERIC_INTERVAL_using_math(f); \
+ return this->force_rounding(f(x)); }
+ BOOST_NUMERIC_INTERVAL_new_func(exp)
+ BOOST_NUMERIC_INTERVAL_new_func(log)
+ BOOST_NUMERIC_INTERVAL_new_func(cos)
+ BOOST_NUMERIC_INTERVAL_new_func(acos)
+ BOOST_NUMERIC_INTERVAL_new_func(cosh)
+# undef BOOST_NUMERIC_INTERVAL_new_func
+# define BOOST_NUMERIC_INTERVAL_new_func(f) \
+ T f##_down(const T& x) \
+ { BOOST_NUMERIC_INTERVAL_using_math(f); \
+ return -this->force_rounding(-f(x)); } \
+ T f##_up (const T& x) \
+ { BOOST_NUMERIC_INTERVAL_using_math(f); \
+ return this->force_rounding(f(x)); }
+ BOOST_NUMERIC_INTERVAL_new_func(sin)
+ BOOST_NUMERIC_INTERVAL_new_func(tan)
+ BOOST_NUMERIC_INTERVAL_new_func(asin)
+ BOOST_NUMERIC_INTERVAL_new_func(atan)
+ BOOST_NUMERIC_INTERVAL_new_func(sinh)
+ BOOST_NUMERIC_INTERVAL_new_func(tanh)
+# undef BOOST_NUMERIC_INTERVAL_new_func
+# define BOOST_NUMERIC_INTERVAL_new_func(f) \
+ T f##_down(const T& x) \
+ { BOOST_NUMERIC_INTERVAL_using_ahyp(f); \
+ this->downward(); T y = this->force_rounding(f(x)); \
+ this->upward(); return y; } \
+ T f##_up (const T& x) \
+ { BOOST_NUMERIC_INTERVAL_using_ahyp(f); \
+ return this->force_rounding(f(x)); }
+ BOOST_NUMERIC_INTERVAL_new_func(asinh)
+ BOOST_NUMERIC_INTERVAL_new_func(atanh)
+# undef BOOST_NUMERIC_INTERVAL_new_func
+# define BOOST_NUMERIC_INTERVAL_new_func(f) \
+ T f##_down(const T& x) \
+ { BOOST_NUMERIC_INTERVAL_using_ahyp(f); \
+ return -this->force_rounding(-f(x)); } \
+ T f##_up (const T& x) \
+ { BOOST_NUMERIC_INTERVAL_using_ahyp(f); \
+ return this->force_rounding(f(x)); }
+ BOOST_NUMERIC_INTERVAL_new_func(acosh)
+# undef BOOST_NUMERIC_INTERVAL_new_func
+};
+
+} // namespace interval_lib
+} // namespace numeric
+} // namespace boost
+
+#endif // BOOST_NUMERIC_INTERVAL_ROUNDED_TRANSC_HPP
diff --git a/boost/boost/numeric/interval/rounding.hpp b/boost/boost/numeric/interval/rounding.hpp
new file mode 100644
index 00000000000..f69e2e4b538
--- /dev/null
+++ b/boost/boost/numeric/interval/rounding.hpp
@@ -0,0 +1,101 @@
+/* Boost interval/rounding.hpp template implementation file
+ *
+ * Copyright 2002-2003 Hervé Brönnimann, Guillaume Melquiond, Sylvain Pion
+ *
+ * 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_NUMERIC_INTERVAL_ROUNDING_HPP
+#define BOOST_NUMERIC_INTERVAL_ROUNDING_HPP
+
+namespace boost {
+namespace numeric {
+namespace interval_lib {
+
+/*
+ * Default rounding_control class (does nothing)
+ */
+
+template<class T>
+struct rounding_control
+{
+ typedef int rounding_mode;
+ static void get_rounding_mode(rounding_mode&) {}
+ static void set_rounding_mode(rounding_mode) {}
+ static void upward() {}
+ static void downward() {}
+ static void to_nearest() {}
+ static const T& to_int(const T& x) { return x; }
+ static const T& force_rounding(const T& x) { return x; }
+};
+
+/*
+ * A few rounding control classes (exact/std/opp: see documentation)
+ * rounded_arith_* control the rounding of the arithmetic operators
+ * rounded_transc_* control the rounding of the transcendental functions
+ */
+
+template<class T, class Rounding = rounding_control<T> >
+struct rounded_arith_exact;
+
+template<class T, class Rounding = rounding_control<T> >
+struct rounded_arith_std;
+
+template<class T, class Rounding = rounding_control<T> >
+struct rounded_arith_opp;
+
+template<class T, class Rounding>
+struct rounded_transc_dummy;
+
+template<class T, class Rounding = rounded_arith_exact<T> >
+struct rounded_transc_exact;
+
+template<class T, class Rounding = rounded_arith_std<T> >
+struct rounded_transc_std;
+
+template<class T, class Rounding = rounded_arith_opp<T> >
+struct rounded_transc_opp;
+
+/*
+ * State-saving classes: allow to set and reset rounding control
+ */
+
+namespace detail {
+
+template<class Rounding>
+struct save_state_unprotected: Rounding
+{
+ typedef save_state_unprotected<Rounding> unprotected_rounding;
+};
+
+} // namespace detail
+
+template<class Rounding>
+struct save_state: Rounding
+{
+ typename Rounding::rounding_mode mode;
+ save_state() {
+ this->get_rounding_mode(mode);
+ this->init();
+ }
+ ~save_state() { this->set_rounding_mode(mode); }
+ typedef detail::save_state_unprotected<Rounding> unprotected_rounding;
+};
+
+template<class Rounding>
+struct save_state_nothing: Rounding
+{
+ typedef save_state_nothing<Rounding> unprotected_rounding;
+};
+
+template<class T>
+struct rounded_math: save_state_nothing<rounded_arith_exact<T> >
+{};
+
+} // namespace interval_lib
+} // namespace numeric
+} // namespace boost
+
+#endif // BOOST_NUMERIC_INTERVAL_ROUNDING_HPP
diff --git a/boost/boost/numeric/interval/transc.hpp b/boost/boost/numeric/interval/transc.hpp
new file mode 100644
index 00000000000..88aebd6b366
--- /dev/null
+++ b/boost/boost/numeric/interval/transc.hpp
@@ -0,0 +1,232 @@
+/* Boost interval/transc.hpp template implementation file
+ *
+ * Copyright 2000 Jens Maurer
+ * Copyright 2002 Hervé Brönnimann, Guillaume Melquiond, Sylvain Pion
+ *
+ * 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_NUMERIC_INTERVAL_TRANSC_HPP
+#define BOOST_NUMERIC_INTERVAL_TRANSC_HPP
+
+#include <boost/config.hpp>
+#include <boost/numeric/interval/detail/interval_prototype.hpp>
+#include <boost/numeric/interval/detail/bugs.hpp>
+#include <boost/numeric/interval/detail/test_input.hpp>
+#include <boost/numeric/interval/rounding.hpp>
+#include <boost/numeric/interval/constants.hpp>
+#include <boost/numeric/interval/arith.hpp>
+#include <boost/numeric/interval/arith2.hpp>
+#include <algorithm>
+
+namespace boost {
+namespace numeric {
+
+template<class T, class Policies> inline
+interval<T, Policies> exp(const interval<T, Policies>& x)
+{
+ typedef interval<T, Policies> I;
+ if (interval_lib::detail::test_input(x))
+ return I::empty();
+ typename Policies::rounding rnd;
+ return I(rnd.exp_down(x.lower()), rnd.exp_up(x.upper()), true);
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> log(const interval<T, Policies>& x)
+{
+ typedef interval<T, Policies> I;
+ if (interval_lib::detail::test_input(x) ||
+ !interval_lib::user::is_pos(x.upper()))
+ return I::empty();
+ typename Policies::rounding rnd;
+ typedef typename Policies::checking checking;
+ T l = !interval_lib::user::is_pos(x.lower())
+ ? checking::neg_inf() : rnd.log_down(x.lower());
+ return I(l, rnd.log_up(x.upper()), true);
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> cos(const interval<T, Policies>& x)
+{
+ if (interval_lib::detail::test_input(x))
+ return interval<T, Policies>::empty();
+ typename Policies::rounding rnd;
+ typedef interval<T, Policies> I;
+ typedef typename interval_lib::unprotect<I>::type R;
+
+ // get lower bound within [0, pi]
+ const R pi2 = interval_lib::pi_twice<R>();
+ R tmp = fmod((const R&)x, pi2);
+ if (width(tmp) >= pi2.lower())
+ return I(static_cast<T>(-1), static_cast<T>(1), true); // we are covering a full period
+ if (tmp.lower() >= interval_lib::constants::pi_upper<T>())
+ return -cos(tmp - interval_lib::pi<R>());
+ T l = tmp.lower();
+ T u = tmp.upper();
+
+ BOOST_USING_STD_MIN();
+ // separate into monotone subintervals
+ if (u <= interval_lib::constants::pi_lower<T>())
+ return I(rnd.cos_down(u), rnd.cos_up(l), true);
+ else if (u <= pi2.lower())
+ return I(static_cast<T>(-1), rnd.cos_up(min BOOST_PREVENT_MACRO_SUBSTITUTION(rnd.sub_down(pi2.lower(), u), l)), true);
+ else
+ return I(static_cast<T>(-1), static_cast<T>(1), true);
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> sin(const interval<T, Policies>& x)
+{
+ typedef interval<T, Policies> I;
+ if (interval_lib::detail::test_input(x))
+ return I::empty();
+ typename Policies::rounding rnd;
+ typedef typename interval_lib::unprotect<I>::type R;
+ I r = cos((const R&)x - interval_lib::pi_half<R>());
+ (void)&rnd;
+ return r;
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> tan(const interval<T, Policies>& x)
+{
+ typedef interval<T, Policies> I;
+ if (interval_lib::detail::test_input(x))
+ return I::empty();
+ typename Policies::rounding rnd;
+ typedef typename interval_lib::unprotect<I>::type R;
+
+ // get lower bound within [-pi/2, pi/2]
+ const R pi = interval_lib::pi<R>();
+ R tmp = fmod((const R&)x, pi);
+ const T pi_half_d = interval_lib::constants::pi_half_lower<T>();
+ if (tmp.lower() >= pi_half_d)
+ tmp -= pi;
+ if (tmp.lower() <= -pi_half_d || tmp.upper() >= pi_half_d)
+ return I::whole();
+ return I(rnd.tan_down(tmp.lower()), rnd.tan_up(tmp.upper()), true);
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> asin(const interval<T, Policies>& x)
+{
+ typedef interval<T, Policies> I;
+ if (interval_lib::detail::test_input(x)
+ || x.upper() < static_cast<T>(-1) || x.lower() > static_cast<T>(1))
+ return I::empty();
+ typename Policies::rounding rnd;
+ T l = (x.lower() <= static_cast<T>(-1))
+ ? -interval_lib::constants::pi_half_upper<T>()
+ : rnd.asin_down(x.lower());
+ T u = (x.upper() >= static_cast<T>(1) )
+ ? interval_lib::constants::pi_half_upper<T>()
+ : rnd.asin_up (x.upper());
+ return I(l, u, true);
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> acos(const interval<T, Policies>& x)
+{
+ typedef interval<T, Policies> I;
+ if (interval_lib::detail::test_input(x)
+ || x.upper() < static_cast<T>(-1) || x.lower() > static_cast<T>(1))
+ return I::empty();
+ typename Policies::rounding rnd;
+ T l = (x.upper() >= static_cast<T>(1) )
+ ? static_cast<T>(0)
+ : rnd.acos_down(x.upper());
+ T u = (x.lower() <= static_cast<T>(-1))
+ ? interval_lib::constants::pi_upper<T>()
+ : rnd.acos_up (x.lower());
+ return I(l, u, true);
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> atan(const interval<T, Policies>& x)
+{
+ typedef interval<T, Policies> I;
+ if (interval_lib::detail::test_input(x))
+ return I::empty();
+ typename Policies::rounding rnd;
+ return I(rnd.atan_down(x.lower()), rnd.atan_up(x.upper()), true);
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> sinh(const interval<T, Policies>& x)
+{
+ typedef interval<T, Policies> I;
+ if (interval_lib::detail::test_input(x))
+ return I::empty();
+ typename Policies::rounding rnd;
+ return I(rnd.sinh_down(x.lower()), rnd.sinh_up(x.upper()), true);
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> cosh(const interval<T, Policies>& x)
+{
+ typedef interval<T, Policies> I;
+ if (interval_lib::detail::test_input(x))
+ return I::empty();
+ typename Policies::rounding rnd;
+ if (interval_lib::user::is_neg(x.upper()))
+ return I(rnd.cosh_down(x.upper()), rnd.cosh_up(x.lower()), true);
+ else if (!interval_lib::user::is_neg(x.lower()))
+ return I(rnd.cosh_down(x.lower()), rnd.cosh_up(x.upper()), true);
+ else
+ return I(static_cast<T>(0), rnd.cosh_up(-x.lower() > x.upper() ? x.lower() : x.upper()), true);
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> tanh(const interval<T, Policies>& x)
+{
+ typedef interval<T, Policies> I;
+ if (interval_lib::detail::test_input(x))
+ return I::empty();
+ typename Policies::rounding rnd;
+ return I(rnd.tanh_down(x.lower()), rnd.tanh_up(x.upper()), true);
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> asinh(const interval<T, Policies>& x)
+{
+ typedef interval<T, Policies> I;
+ if (interval_lib::detail::test_input(x))
+ return I::empty();
+ typename Policies::rounding rnd;
+ return I(rnd.asinh_down(x.lower()), rnd.asinh_up(x.upper()), true);
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> acosh(const interval<T, Policies>& x)
+{
+ typedef interval<T, Policies> I;
+ if (interval_lib::detail::test_input(x) || x.upper() < static_cast<T>(1))
+ return I::empty();
+ typename Policies::rounding rnd;
+ T l = x.lower() <= static_cast<T>(1) ? static_cast<T>(0) : rnd.acosh_down(x.lower());
+ return I(l, rnd.acosh_up(x.upper()), true);
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> atanh(const interval<T, Policies>& x)
+{
+ typedef interval<T, Policies> I;
+ if (interval_lib::detail::test_input(x)
+ || x.upper() < static_cast<T>(-1) || x.lower() > static_cast<T>(1))
+ return I::empty();
+ typename Policies::rounding rnd;
+ typedef typename Policies::checking checking;
+ T l = (x.lower() <= static_cast<T>(-1))
+ ? checking::neg_inf() : rnd.atanh_down(x.lower());
+ T u = (x.upper() >= static_cast<T>(1) )
+ ? checking::pos_inf() : rnd.atanh_up (x.upper());
+ return I(l, u, true);
+}
+
+} // namespace numeric
+} // namespace boost
+
+#endif // BOOST_NUMERIC_INTERVAL_TRANSC_HPP
diff --git a/boost/boost/numeric/interval/utility.hpp b/boost/boost/numeric/interval/utility.hpp
new file mode 100644
index 00000000000..b1052b19456
--- /dev/null
+++ b/boost/boost/numeric/interval/utility.hpp
@@ -0,0 +1,337 @@
+/* Boost interval/utility.hpp template implementation file
+ *
+ * Copyright 2000 Jens Maurer
+ * Copyright 2002-2003 Hervé Brönnimann, Guillaume Melquiond, Sylvain Pion
+ *
+ * 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_NUMERIC_INTERVAL_UTILITY_HPP
+#define BOOST_NUMERIC_INTERVAL_UTILITY_HPP
+
+#include <boost/config.hpp>
+#include <boost/numeric/interval/detail/interval_prototype.hpp>
+#include <boost/numeric/interval/detail/test_input.hpp>
+#include <boost/numeric/interval/detail/bugs.hpp>
+#include <algorithm>
+#include <utility>
+
+/*
+ * Implementation of simple functions
+ */
+
+namespace boost {
+namespace numeric {
+
+/*
+ * Utility Functions
+ */
+
+template<class T, class Policies> inline
+const T& lower(const interval<T, Policies>& x)
+{
+ return x.lower();
+}
+
+template<class T, class Policies> inline
+const T& upper(const interval<T, Policies>& x)
+{
+ return x.upper();
+}
+
+template<class T, class Policies> inline
+T checked_lower(const interval<T, Policies>& x)
+{
+ if (empty(x)) {
+ typedef typename Policies::checking checking;
+ return checking::nan();
+ }
+ return x.lower();
+}
+
+template<class T, class Policies> inline
+T checked_upper(const interval<T, Policies>& x)
+{
+ if (empty(x)) {
+ typedef typename Policies::checking checking;
+ return checking::nan();
+ }
+ return x.upper();
+}
+
+template<class T, class Policies> inline
+T width(const interval<T, Policies>& x)
+{
+ if (interval_lib::detail::test_input(x)) return static_cast<T>(0);
+ typename Policies::rounding rnd;
+ return rnd.sub_up(x.upper(), x.lower());
+}
+
+template<class T, class Policies> inline
+T median(const interval<T, Policies>& x)
+{
+ if (interval_lib::detail::test_input(x)) {
+ typedef typename Policies::checking checking;
+ return checking::nan();
+ }
+ typename Policies::rounding rnd;
+ return rnd.median(x.lower(), x.upper());
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> widen(const interval<T, Policies>& x, const T& v)
+{
+ if (interval_lib::detail::test_input(x))
+ return interval<T, Policies>::empty();
+ typename Policies::rounding rnd;
+ return interval<T, Policies>(rnd.sub_down(x.lower(), v),
+ rnd.add_up (x.upper(), v), true);
+}
+
+/*
+ * Set-like operations
+ */
+
+template<class T, class Policies> inline
+bool empty(const interval<T, Policies>& x)
+{
+ return interval_lib::detail::test_input(x);
+}
+
+template<class T, class Policies> inline
+bool zero_in(const interval<T, Policies>& x)
+{
+ if (interval_lib::detail::test_input(x)) return false;
+ return (!interval_lib::user::is_pos(x.lower())) &&
+ (!interval_lib::user::is_neg(x.upper()));
+}
+
+template<class T, class Policies> inline
+bool in_zero(const interval<T, Policies>& x) // DEPRECATED
+{
+ return zero_in<T, Policies>(x);
+}
+
+template<class T, class Policies> inline
+bool in(const T& x, const interval<T, Policies>& y)
+{
+ if (interval_lib::detail::test_input(x, y)) return false;
+ return y.lower() <= x && x <= y.upper();
+}
+
+template<class T, class Policies> inline
+bool subset(const interval<T, Policies>& x,
+ const interval<T, Policies>& y)
+{
+ if (empty(x)) return true;
+ return !empty(y) && y.lower() <= x.lower() && x.upper() <= y.upper();
+}
+
+template<class T, class Policies1, class Policies2> inline
+bool proper_subset(const interval<T, Policies1>& x,
+ const interval<T, Policies2>& y)
+{
+ if (empty(y)) return false;
+ if (empty(x)) return true;
+ return y.lower() <= x.lower() && x.upper() <= y.upper() &&
+ (y.lower() != x.lower() || x.upper() != y.upper());
+}
+
+template<class T, class Policies1, class Policies2> inline
+bool overlap(const interval<T, Policies1>& x,
+ const interval<T, Policies2>& y)
+{
+ if (interval_lib::detail::test_input(x, y)) return false;
+ return x.lower() <= y.lower() && y.lower() <= x.upper() ||
+ y.lower() <= x.lower() && x.lower() <= y.upper();
+}
+
+template<class T, class Policies> inline
+bool singleton(const interval<T, Policies>& x)
+{
+ return !empty(x) && x.lower() == x.upper();
+}
+
+template<class T, class Policies1, class Policies2> inline
+bool equal(const interval<T, Policies1>& x, const interval<T, Policies2>& y)
+{
+ if (empty(x)) return empty(y);
+ return !empty(y) && x.lower() == y.lower() && x.upper() == y.upper();
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> intersect(const interval<T, Policies>& x,
+ const interval<T, Policies>& y)
+{
+ BOOST_USING_STD_MIN();
+ BOOST_USING_STD_MAX();
+ if (interval_lib::detail::test_input(x, y))
+ return interval<T, Policies>::empty();
+ const T& l = max BOOST_PREVENT_MACRO_SUBSTITUTION(x.lower(), y.lower());
+ const T& u = min BOOST_PREVENT_MACRO_SUBSTITUTION(x.upper(), y.upper());
+ if (l <= u) return interval<T, Policies>(l, u, true);
+ else return interval<T, Policies>::empty();
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> hull(const interval<T, Policies>& x,
+ const interval<T, Policies>& y)
+{
+ BOOST_USING_STD_MIN();
+ BOOST_USING_STD_MAX();
+ bool bad_x = interval_lib::detail::test_input(x);
+ bool bad_y = interval_lib::detail::test_input(y);
+ if (bad_x)
+ if (bad_y) return interval<T, Policies>::empty();
+ else return y;
+ else
+ if (bad_y) return x;
+ return interval<T, Policies>(min BOOST_PREVENT_MACRO_SUBSTITUTION(x.lower(), y.lower()),
+ max BOOST_PREVENT_MACRO_SUBSTITUTION(x.upper(), y.upper()), true);
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> hull(const interval<T, Policies>& x, const T& y)
+{
+ BOOST_USING_STD_MIN();
+ BOOST_USING_STD_MAX();
+ bool bad_x = interval_lib::detail::test_input(x);
+ bool bad_y = interval_lib::detail::test_input<T, Policies>(y);
+ if (bad_y)
+ if (bad_x) return interval<T, Policies>::empty();
+ else return x;
+ else
+ if (bad_x) return interval<T, Policies>(y, y, true);
+ return interval<T, Policies>(min BOOST_PREVENT_MACRO_SUBSTITUTION(x.lower(), y),
+ max BOOST_PREVENT_MACRO_SUBSTITUTION(x.upper(), y), true);
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> hull(const T& x, const interval<T, Policies>& y)
+{
+ BOOST_USING_STD_MIN();
+ BOOST_USING_STD_MAX();
+ bool bad_x = interval_lib::detail::test_input<T, Policies>(x);
+ bool bad_y = interval_lib::detail::test_input(y);
+ if (bad_x)
+ if (bad_y) return interval<T, Policies>::empty();
+ else return y;
+ else
+ if (bad_y) return interval<T, Policies>(x, x, true);
+ return interval<T, Policies>(min BOOST_PREVENT_MACRO_SUBSTITUTION(x, y.lower()),
+ max BOOST_PREVENT_MACRO_SUBSTITUTION(x, y.upper()), true);
+}
+
+template<class T> inline
+interval<T> hull(const T& x, const T& y)
+{
+ return interval<T>::hull(x, y);
+}
+
+template<class T, class Policies> inline
+std::pair<interval<T, Policies>, interval<T, Policies> >
+bisect(const interval<T, Policies>& x)
+{
+ typedef interval<T, Policies> I;
+ if (interval_lib::detail::test_input(x))
+ return std::pair<I,I>(I::empty(), I::empty());
+ const T m = median(x);
+ return std::pair<I,I>(I(x.lower(), m, true), I(m, x.upper(), true));
+}
+
+/*
+ * Elementary functions
+ */
+
+template<class T, class Policies> inline
+T norm(const interval<T, Policies>& x)
+{
+ typedef interval<T, Policies> I;
+ if (interval_lib::detail::test_input(x)) {
+ typedef typename Policies::checking checking;
+ return checking::nan();
+ }
+ BOOST_USING_STD_MAX();
+ return max BOOST_PREVENT_MACRO_SUBSTITUTION(static_cast<T>(-x.lower()), x.upper());
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> abs(const interval<T, Policies>& x)
+{
+ typedef interval<T, Policies> I;
+ if (interval_lib::detail::test_input(x))
+ return I::empty();
+ if (!interval_lib::user::is_neg(x.lower())) return x;
+ if (!interval_lib::user::is_pos(x.upper())) return -x;
+ BOOST_USING_STD_MAX();
+ return I(static_cast<T>(0), max BOOST_PREVENT_MACRO_SUBSTITUTION(static_cast<T>(-x.lower()), x.upper()), true);
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> max BOOST_PREVENT_MACRO_SUBSTITUTION (const interval<T, Policies>& x,
+ const interval<T, Policies>& y)
+{
+ typedef interval<T, Policies> I;
+ if (interval_lib::detail::test_input(x, y))
+ return I::empty();
+ BOOST_USING_STD_MAX();
+ return I(max BOOST_PREVENT_MACRO_SUBSTITUTION(x.lower(), y.lower()), max BOOST_PREVENT_MACRO_SUBSTITUTION(x.upper(), y.upper()), true);
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> max BOOST_PREVENT_MACRO_SUBSTITUTION (const interval<T, Policies>& x, const T& y)
+{
+ typedef interval<T, Policies> I;
+ if (interval_lib::detail::test_input(x, y))
+ return I::empty();
+ BOOST_USING_STD_MAX();
+ return I(max BOOST_PREVENT_MACRO_SUBSTITUTION(x.lower(), y), max BOOST_PREVENT_MACRO_SUBSTITUTION(x.upper(), y), true);
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> max BOOST_PREVENT_MACRO_SUBSTITUTION (const T& x, const interval<T, Policies>& y)
+{
+ typedef interval<T, Policies> I;
+ if (interval_lib::detail::test_input(x, y))
+ return I::empty();
+ BOOST_USING_STD_MAX();
+ return I(max BOOST_PREVENT_MACRO_SUBSTITUTION(x, y.lower()), max BOOST_PREVENT_MACRO_SUBSTITUTION(x, y.upper()), true);
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> min BOOST_PREVENT_MACRO_SUBSTITUTION (const interval<T, Policies>& x,
+ const interval<T, Policies>& y)
+{
+ typedef interval<T, Policies> I;
+ if (interval_lib::detail::test_input(x, y))
+ return I::empty();
+ BOOST_USING_STD_MIN();
+ return I(min BOOST_PREVENT_MACRO_SUBSTITUTION(x.lower(), y.lower()), min BOOST_PREVENT_MACRO_SUBSTITUTION(x.upper(), y.upper()), true);
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> min BOOST_PREVENT_MACRO_SUBSTITUTION (const interval<T, Policies>& x, const T& y)
+{
+ typedef interval<T, Policies> I;
+ if (interval_lib::detail::test_input(x, y))
+ return I::empty();
+ BOOST_USING_STD_MIN();
+ return I(min BOOST_PREVENT_MACRO_SUBSTITUTION(x.lower(), y), min BOOST_PREVENT_MACRO_SUBSTITUTION(x.upper(), y), true);
+}
+
+template<class T, class Policies> inline
+interval<T, Policies> min BOOST_PREVENT_MACRO_SUBSTITUTION (const T& x, const interval<T, Policies>& y)
+{
+ typedef interval<T, Policies> I;
+ if (interval_lib::detail::test_input(x, y))
+ return I::empty();
+ BOOST_USING_STD_MIN();
+ return I(min BOOST_PREVENT_MACRO_SUBSTITUTION(x, y.lower()), min BOOST_PREVENT_MACRO_SUBSTITUTION(x, y.upper()), true);
+}
+
+} // namespace numeric
+} // namespace boost
+
+#endif // BOOST_NUMERIC_INTERVAL_UTILITY_HPP
diff --git a/boost/boost/numeric/ublas/banded.hpp b/boost/boost/numeric/ublas/banded.hpp
new file mode 100644
index 00000000000..1fb590a2ac1
--- /dev/null
+++ b/boost/boost/numeric/ublas/banded.hpp
@@ -0,0 +1,2025 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without fee,
+// provided that the above copyright notice appear in all copies and
+// that both that copyright notice and this permission notice appear
+// in supporting documentation. The authors make no representations
+// about the suitability of this software for any purpose.
+// It is provided "as is" without express or implied warranty.
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#ifndef _BOOST_UBLAS_BANDED_
+#define _BOOST_UBLAS_BANDED_
+
+#include <boost/numeric/ublas/matrix.hpp>
+#include <boost/numeric/ublas/detail/temporary.hpp>
+
+// Iterators based on ideas of Jeremy Siek
+
+namespace boost { namespace numeric { namespace ublas {
+
+ // Array based banded matrix class
+ template<class T, class L, class A>
+ class banded_matrix:
+ public matrix_container<banded_matrix<T, L, A> > {
+
+ typedef T *pointer;
+ typedef L layout_type;
+ typedef banded_matrix<T, L, A> self_type;
+ public:
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using matrix_container<self_type>::operator ();
+#endif
+ typedef typename A::size_type size_type;
+ typedef typename A::difference_type difference_type;
+ typedef T value_type;
+ typedef const T &const_reference;
+ typedef T &reference;
+ typedef A array_type;
+ typedef const matrix_reference<const self_type> const_closure_type;
+ typedef matrix_reference<self_type> closure_type;
+ typedef vector<T, A> vector_temporary_type;
+ typedef matrix<T, L, A> matrix_temporary_type; // general sub-matrix
+ typedef packed_tag storage_category;
+ typedef typename L::orientation_category orientation_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ banded_matrix ():
+ matrix_container<self_type> (),
+ size1_ (0), size2_ (0),
+ lower_ (0), upper_ (0), data_ (0) {}
+ BOOST_UBLAS_INLINE
+ banded_matrix (size_type size1, size_type size2, size_type lower = 0, size_type upper = 0):
+ matrix_container<self_type> (),
+ size1_ (size1), size2_ (size2),
+ lower_ (lower), upper_ (upper), data_ ((std::max) (size1, size2) * (lower + 1 + upper)) {
+ }
+ BOOST_UBLAS_INLINE
+ banded_matrix (size_type size1, size_type size2, size_type lower, size_type upper, const array_type &data):
+ matrix_container<self_type> (),
+ size1_ (size1), size2_ (size2),
+ lower_ (lower), upper_ (upper), data_ (data) {}
+ BOOST_UBLAS_INLINE
+ banded_matrix (const banded_matrix &m):
+ matrix_container<self_type> (),
+ size1_ (m.size1_), size2_ (m.size2_),
+ lower_ (m.lower_), upper_ (m.upper_), data_ (m.data_) {}
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ banded_matrix (const matrix_expression<AE> &ae, size_type lower = 0, size_type upper = 0):
+ matrix_container<self_type> (),
+ size1_ (ae ().size1 ()), size2_ (ae ().size2 ()),
+ lower_ (lower), upper_ (upper),
+ data_ ((std::max) (size1_, size2_) * (lower_ + 1 + upper_)) {
+ matrix_assign<scalar_assign> (*this, ae);
+ }
+
+ // Accessors
+ BOOST_UBLAS_INLINE
+ size_type size1 () const {
+ return size1_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type size2 () const {
+ return size2_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type lower () const {
+ return lower_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type upper () const {
+ return upper_;
+ }
+
+ // Storage accessors
+ BOOST_UBLAS_INLINE
+ const array_type &data () const {
+ return data_;
+ }
+ BOOST_UBLAS_INLINE
+ array_type &data () {
+ return data_;
+ }
+
+ // Resizing
+ BOOST_UBLAS_INLINE
+ void resize (size_type size1, size_type size2, size_type lower = 0, size_type upper = 0, bool preserve = true) {
+ if (preserve) {
+ self_type temporary (size1, size2, lower, upper);
+ detail::matrix_resize_preserve<layout_type> (*this, temporary);
+ }
+ else {
+ data ().resize ((std::max) (size1, size2) * (lower + 1 + upper));
+ size1_ = size1;
+ size2_ = size2;
+ lower_ = lower;
+ upper_ = upper;
+ }
+ }
+
+ BOOST_UBLAS_INLINE
+ void resize_packed_preserve (size_type size1, size_type size2, size_type lower = 0, size_type upper = 0) {
+ size1_ = size1;
+ size2_ = size2;
+ lower_ = lower;
+ upper_ = upper;
+ data ().resize ((std::max) (size1, size2) * (lower + 1 + upper), value_type ());
+ }
+
+ // Element access
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type i, size_type j) const {
+ BOOST_UBLAS_CHECK (i < size1_, bad_index ());
+ BOOST_UBLAS_CHECK (j < size2_, bad_index ());
+#ifdef BOOST_UBLAS_OWN_BANDED
+ const size_type k = (std::max) (i, j);
+ const size_type l = lower_ + j - i;
+ if (k < (std::max) (size1_, size2_) &&
+ l < lower_ + 1 + upper_)
+ return data () [layout_type::element (k, (std::max) (size1_, size2_),
+ l, lower_ + 1 + upper_)];
+#else
+ const size_type k = j;
+ const size_type l = upper_ + i - j;
+ if (k < size2_ &&
+ l < lower_ + 1 + upper_)
+ return data () [layout_type::element (k, size2_,
+ l, lower_ + 1 + upper_)];
+#endif
+ return zero_;
+ }
+ BOOST_UBLAS_INLINE
+ reference at_element (size_type i, size_type j) {
+ BOOST_UBLAS_CHECK (i < size1_, bad_index ());
+ BOOST_UBLAS_CHECK (j < size2_, bad_index ());
+#ifdef BOOST_UBLAS_OWN_BANDED
+ const size_type k = (std::max) (i, j);
+ const size_type l = lower_ + j - i;
+ return data () [layout_type::element (k, (std::max) (size1_, size2_),
+ l, lower_ + 1 + upper_)];
+#else
+ const size_type k = j;
+ const size_type l = upper_ + i - j;
+ return data () [layout_type::element (k, size2_,
+ l, lower_ + 1 + upper_)];
+#endif
+ }
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type i, size_type j) {
+ BOOST_UBLAS_CHECK (i < size1_, bad_index ());
+ BOOST_UBLAS_CHECK (j < size2_, bad_index ());
+#ifdef BOOST_UBLAS_OWN_BANDED
+ const size_type k = (std::max) (i, j);
+ const size_type l = lower_ + j - i;
+ if (k < (std::max) (size1_, size2_) &&
+ l < lower_ + 1 + upper_)
+ return data () [layout_type::element (k, (std::max) (size1_, size2_),
+ l, lower_ + 1 + upper_)];
+#else
+ const size_type k = j;
+ const size_type l = upper_ + i - j;
+ if (k < size2_ &&
+ l < lower_ + 1 + upper_)
+ return data () [layout_type::element (k, size2_,
+ l, lower_ + 1 + upper_)];
+#endif
+ bad_index ().raise ();
+ // arbitary return value
+ return const_cast<reference>(zero_);
+ }
+
+ // Element assignment
+ BOOST_UBLAS_INLINE
+ reference insert_element (size_type i, size_type j, const_reference t) {
+ return (operator () (i, j) = t);
+ }
+ BOOST_UBLAS_INLINE
+ void erase_element (size_type i, size_type j) {
+ operator () (i, j) = value_type/*zero*/();
+ }
+
+ // Zeroing
+ BOOST_UBLAS_INLINE
+ void clear () {
+ std::fill (data ().begin (), data ().end (), value_type/*zero*/());
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ banded_matrix &operator = (const banded_matrix &m) {
+ size1_ = m.size1_;
+ size2_ = m.size2_;
+ lower_ = m.lower_;
+ upper_ = m.upper_;
+ data () = m.data ();
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ banded_matrix &assign_temporary (banded_matrix &m) {
+ swap (m);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ banded_matrix &operator = (const matrix_expression<AE> &ae) {
+ self_type temporary (ae, lower_, upper_);
+ return assign_temporary (temporary);
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ banded_matrix &assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_assign> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ banded_matrix& operator += (const matrix_expression<AE> &ae) {
+ self_type temporary (*this + ae, lower_, upper_);
+ return assign_temporary (temporary);
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ banded_matrix &plus_assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_plus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ banded_matrix& operator -= (const matrix_expression<AE> &ae) {
+ self_type temporary (*this - ae, lower_, upper_);
+ return assign_temporary (temporary);
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ banded_matrix &minus_assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_minus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ banded_matrix& operator *= (const AT &at) {
+ matrix_assign_scalar<scalar_multiplies_assign> (*this, at);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ banded_matrix& operator /= (const AT &at) {
+ matrix_assign_scalar<scalar_divides_assign> (*this, at);
+ return *this;
+ }
+
+ // Swapping
+ BOOST_UBLAS_INLINE
+ void swap (banded_matrix &m) {
+ if (this != &m) {
+ std::swap (size1_, m.size1_);
+ std::swap (size2_, m.size2_);
+ std::swap (lower_, m.lower_);
+ std::swap (upper_, m.upper_);
+ data ().swap (m.data ());
+ }
+ }
+ BOOST_UBLAS_INLINE
+ friend void swap (banded_matrix &m1, banded_matrix &m2) {
+ m1.swap (m2);
+ }
+
+ // Iterator types
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ typedef indexed_iterator1<self_type, packed_random_access_iterator_tag> iterator1;
+ typedef indexed_iterator2<self_type, packed_random_access_iterator_tag> iterator2;
+ typedef indexed_const_iterator1<self_type, packed_random_access_iterator_tag> const_iterator1;
+ typedef indexed_const_iterator2<self_type, packed_random_access_iterator_tag> const_iterator2;
+#else
+ class const_iterator1;
+ class iterator1;
+ class const_iterator2;
+ class iterator2;
+#endif
+ typedef reverse_iterator_base1<const_iterator1> const_reverse_iterator1;
+ typedef reverse_iterator_base1<iterator1> reverse_iterator1;
+ typedef reverse_iterator_base2<const_iterator2> const_reverse_iterator2;
+ typedef reverse_iterator_base2<iterator2> reverse_iterator2;
+
+ // Element lookup
+ BOOST_UBLAS_INLINE
+ const_iterator1 find1 (int rank, size_type i, size_type j) const {
+ if (rank == 1) {
+ size_type lower_i = (std::max) (difference_type (j - upper_), difference_type (0));
+ i = (std::max) (i, lower_i);
+ size_type upper_i = (std::min) (j + 1 + lower_, size1_);
+ i = (std::min) (i, upper_i);
+ }
+ return const_iterator1 (*this, i, j);
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 find1 (int rank, size_type i, size_type j) {
+ if (rank == 1) {
+ size_type lower_i = (std::max) (difference_type (j - upper_), difference_type (0));
+ i = (std::max) (i, lower_i);
+ size_type upper_i = (std::min) (j + 1 + lower_, size1_);
+ i = (std::min) (i, upper_i);
+ }
+ return iterator1 (*this, i, j);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 find2 (int rank, size_type i, size_type j) const {
+ if (rank == 1) {
+ size_type lower_j = (std::max) (difference_type (i - lower_), difference_type (0));
+ j = (std::max) (j, lower_j);
+ size_type upper_j = (std::min) (i + 1 + upper_, size2_);
+ j = (std::min) (j, upper_j);
+ }
+ return const_iterator2 (*this, i, j);
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 find2 (int rank, size_type i, size_type j) {
+ if (rank == 1) {
+ size_type lower_j = (std::max) (difference_type (i - lower_), difference_type (0));
+ j = (std::max) (j, lower_j);
+ size_type upper_j = (std::min) (i + 1 + upper_, size2_);
+ j = (std::min) (j, upper_j);
+ }
+ return iterator2 (*this, i, j);
+ }
+
+ // Iterators simply are indices.
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator1:
+ public container_const_reference<banded_matrix>,
+ public random_access_iterator_base<packed_random_access_iterator_tag,
+ const_iterator1, value_type> {
+ public:
+ typedef typename banded_matrix::value_type value_type;
+ typedef typename banded_matrix::difference_type difference_type;
+ typedef typename banded_matrix::const_reference reference;
+ typedef const typename banded_matrix::pointer pointer;
+
+ typedef const_iterator2 dual_iterator_type;
+ typedef const_reverse_iterator2 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator1 ():
+ container_const_reference<self_type> (), it1_ (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator1 (const self_type &m, size_type it1, size_type it2):
+ container_const_reference<self_type> (m), it1_ (it1), it2_ (it2) {}
+ BOOST_UBLAS_INLINE
+ const_iterator1 (const iterator1 &it):
+ container_const_reference<self_type> (it ()), it1_ (it.it1_), it2_ (it.it2_) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator ++ () {
+ ++ it1_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator -- () {
+ -- it1_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator += (difference_type n) {
+ it1_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator -= (difference_type n) {
+ it1_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ - it.it1_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ return (*this) () (it1_, it2_);
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 begin () const {
+ return (*this) ().find2 (1, it1_, 0);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 end () const {
+ return (*this) ().find2 (1, it1_, (*this) ().size2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rbegin () const {
+ return const_reverse_iterator2 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rend () const {
+ return const_reverse_iterator2 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it1_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it2_;
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator = (const const_iterator1 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it1_ = it.it1_;
+ it2_ = it.it2_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ == it.it1_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ < it.it1_;
+ }
+
+ private:
+ size_type it1_;
+ size_type it2_;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator1 begin1 () const {
+ return find1 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 end1 () const {
+ return find1 (0, size1_, 0);
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class iterator1:
+ public container_reference<banded_matrix>,
+ public random_access_iterator_base<packed_random_access_iterator_tag,
+ iterator1, value_type> {
+ public:
+ typedef typename banded_matrix::value_type value_type;
+ typedef typename banded_matrix::difference_type difference_type;
+ typedef typename banded_matrix::reference reference;
+ typedef typename banded_matrix::pointer pointer;
+
+ typedef iterator2 dual_iterator_type;
+ typedef reverse_iterator2 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ iterator1 ():
+ container_reference<self_type> (), it1_ (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ iterator1 (self_type &m, size_type it1, size_type it2):
+ container_reference<self_type> (m), it1_ (it1), it2_ (it2) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ iterator1 &operator ++ () {
+ ++ it1_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 &operator -- () {
+ -- it1_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 &operator += (difference_type n) {
+ it1_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 &operator -= (difference_type n) {
+ it1_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ - it.it1_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ return (*this) ().at_element (it1_, it2_);
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator2 begin () const {
+ return (*this) ().find2 (1, it1_, 0);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator2 end () const {
+ return (*this) ().find2 (1, it1_, (*this) ().size2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator2 rbegin () const {
+ return reverse_iterator2 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator2 rend () const {
+ return reverse_iterator2 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it1_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it2_;
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ iterator1 &operator = (const iterator1 &it) {
+ container_reference<self_type>::assign (&it ());
+ it1_ = it.it1_;
+ it2_ = it.it2_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ == it.it1_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ < it.it1_;
+ }
+
+ private:
+ size_type it1_;
+ size_type it2_;
+
+ friend class const_iterator1;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ iterator1 begin1 () {
+ return find1 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 end1 () {
+ return find1 (0, size1_, 0);
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator2:
+ public container_const_reference<banded_matrix>,
+ public random_access_iterator_base<packed_random_access_iterator_tag,
+ const_iterator2, value_type> {
+ public:
+ typedef typename banded_matrix::value_type value_type;
+ typedef typename banded_matrix::difference_type difference_type;
+ typedef typename banded_matrix::const_reference reference;
+ typedef const typename banded_matrix::pointer pointer;
+
+ typedef const_iterator1 dual_iterator_type;
+ typedef const_reverse_iterator1 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator2 ():
+ container_const_reference<self_type> (), it1_ (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator2 (const self_type &m, size_type it1, size_type it2):
+ container_const_reference<self_type> (m), it1_ (it1), it2_ (it2) {}
+ BOOST_UBLAS_INLINE
+ const_iterator2 (const iterator2 &it):
+ container_const_reference<self_type> (it ()), it1_ (it.it1_), it2_ (it.it2_) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator ++ () {
+ ++ it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator -- () {
+ -- it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator += (difference_type n) {
+ it2_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator -= (difference_type n) {
+ it2_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ - it.it2_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ return (*this) () (it1_, it2_);
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 begin () const {
+ return (*this) ().find1 (1, 0, it2_);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 end () const {
+ return (*this) ().find1 (1, (*this) ().size1 (), it2_);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rbegin () const {
+ return const_reverse_iterator1 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rend () const {
+ return const_reverse_iterator1 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it1_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it2_;
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator = (const const_iterator2 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it1_ = it.it1_;
+ it2_ = it.it2_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ == it.it2_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ < it.it2_;
+ }
+
+ private:
+ size_type it1_;
+ size_type it2_;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator2 begin2 () const {
+ return find2 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 end2 () const {
+ return find2 (0, 0, size2_);
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class iterator2:
+ public container_reference<banded_matrix>,
+ public random_access_iterator_base<packed_random_access_iterator_tag,
+ iterator2, value_type> {
+ public:
+ typedef typename banded_matrix::value_type value_type;
+ typedef typename banded_matrix::difference_type difference_type;
+ typedef typename banded_matrix::reference reference;
+ typedef typename banded_matrix::pointer pointer;
+
+ typedef iterator1 dual_iterator_type;
+ typedef reverse_iterator1 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ iterator2 ():
+ container_reference<self_type> (), it1_ (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ iterator2 (self_type &m, size_type it1, size_type it2):
+ container_reference<self_type> (m), it1_ (it1), it2_ (it2) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ iterator2 &operator ++ () {
+ ++ it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 &operator -- () {
+ -- it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 &operator += (difference_type n) {
+ it2_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 &operator -= (difference_type n) {
+ it2_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ - it.it2_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ return (*this) ().at_element (it1_, it2_);
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator1 begin () const {
+ return (*this) ().find1 (1, 0, it2_);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator1 end () const {
+ return (*this) ().find1 (1, (*this) ().size1 (), it2_);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator1 rbegin () const {
+ return reverse_iterator1 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator1 rend () const {
+ return reverse_iterator1 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it1_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it2_;
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ iterator2 &operator = (const iterator2 &it) {
+ container_reference<self_type>::assign (&it ());
+ it1_ = it.it1_;
+ it2_ = it.it2_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ == it.it2_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ < it.it2_;
+ }
+
+ private:
+ size_type it1_;
+ size_type it2_;
+
+ friend class const_iterator2;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ iterator2 begin2 () {
+ return find2 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 end2 () {
+ return find2 (0, 0, size2_);
+ }
+
+ // Reverse iterators
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rbegin1 () const {
+ return const_reverse_iterator1 (end1 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rend1 () const {
+ return const_reverse_iterator1 (begin1 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ reverse_iterator1 rbegin1 () {
+ return reverse_iterator1 (end1 ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator1 rend1 () {
+ return reverse_iterator1 (begin1 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rbegin2 () const {
+ return const_reverse_iterator2 (end2 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rend2 () const {
+ return const_reverse_iterator2 (begin2 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ reverse_iterator2 rbegin2 () {
+ return reverse_iterator2 (end2 ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator2 rend2 () {
+ return reverse_iterator2 (begin2 ());
+ }
+
+ private:
+ size_type size1_;
+ size_type size2_;
+ size_type lower_;
+ size_type upper_;
+ array_type data_;
+ typedef const value_type const_value_type;
+ static const_value_type zero_;
+ };
+
+ template<class T, class L, class A>
+ typename banded_matrix<T, L, A>::const_value_type banded_matrix<T, L, A>::zero_ = value_type/*zero*/();
+
+
+ // Diagonal matrix class
+ template<class T, class L, class A>
+ class diagonal_matrix:
+ public banded_matrix<T, L, A> {
+ public:
+ typedef typename A::size_type size_type;
+ typedef banded_matrix<T, L, A> matrix_type;
+ typedef A array_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ diagonal_matrix ():
+ matrix_type () {}
+ BOOST_UBLAS_INLINE
+ diagonal_matrix (size_type size):
+ matrix_type (size, size) {}
+ BOOST_UBLAS_INLINE
+ diagonal_matrix (size_type size, const array_type& data):
+ matrix_type (size, size, 0, 0, data) {}
+ BOOST_UBLAS_INLINE
+ diagonal_matrix (size_type size1, size_type size2):
+ matrix_type (size1, size2) {}
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ diagonal_matrix (const matrix_expression<AE> &ae):
+ matrix_type (ae) {}
+ BOOST_UBLAS_INLINE
+ ~diagonal_matrix () {}
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ diagonal_matrix &operator = (const diagonal_matrix &m) {
+ matrix_type::operator = (m);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ diagonal_matrix &operator = (const matrix_expression<AE> &ae) {
+ matrix_type::operator = (ae);
+ return *this;
+ }
+ };
+
+ // Banded matrix adaptor class
+ template<class M>
+ class banded_adaptor:
+ public matrix_expression<banded_adaptor<M> > {
+
+ typedef banded_adaptor<M> self_type;
+ public:
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using matrix_expression<self_type>::operator ();
+#endif
+ typedef const M const_matrix_type;
+ typedef M matrix_type;
+ typedef typename M::size_type size_type;
+ typedef typename M::difference_type difference_type;
+ typedef typename M::value_type value_type;
+ typedef typename M::const_reference const_reference;
+ typedef typename boost::mpl::if_<boost::is_const<M>,
+ typename M::const_reference,
+ typename M::reference>::type reference;
+ typedef typename boost::mpl::if_<boost::is_const<M>,
+ typename M::const_closure_type,
+ typename M::closure_type>::type matrix_closure_type;
+ typedef const self_type const_closure_type;
+ typedef self_type closure_type;
+ // Replaced by _temporary_traits to avoid type requirements on M
+ //typedef typename M::vector_temporary_type vector_temporary_type;
+ //typedef typename M::matrix_temporary_type matrix_temporary_type;
+ typedef typename storage_restrict_traits<typename M::storage_category,
+ packed_proxy_tag>::storage_category storage_category;
+ typedef typename M::orientation_category orientation_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ banded_adaptor (matrix_type &data, size_type lower = 0, size_type upper = 0):
+ matrix_expression<self_type> (),
+ data_ (data), lower_ (lower), upper_ (upper) {}
+ BOOST_UBLAS_INLINE
+ banded_adaptor (const banded_adaptor &m):
+ matrix_expression<self_type> (),
+ data_ (m.data_), lower_ (m.lower_), upper_ (m.upper_) {}
+
+ // Accessors
+ BOOST_UBLAS_INLINE
+ size_type size1 () const {
+ return data_.size1 ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type size2 () const {
+ return data_.size2 ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type lower () const {
+ return lower_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type upper () const {
+ return upper_;
+ }
+
+ // Storage accessors
+ BOOST_UBLAS_INLINE
+ const matrix_closure_type &data () const {
+ return data_;
+ }
+ BOOST_UBLAS_INLINE
+ matrix_closure_type &data () {
+ return data_;
+ }
+
+ // Element access
+#ifndef BOOST_UBLAS_PROXY_CONST_MEMBER
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type i, size_type j) const {
+ BOOST_UBLAS_CHECK (i < size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (j < size2 (), bad_index ());
+#ifdef BOOST_UBLAS_OWN_BANDED
+ size_type k = (std::max) (i, j);
+ size_type l = lower_ + j - i;
+ if (k < (std::max) (size1 (), size2 ()) &&
+ l < lower_ + 1 + upper_)
+ return data () (i, j);
+#else
+ size_type k = j;
+ size_type l = upper_ + i - j;
+ if (k < size2 () &&
+ l < lower_ + 1 + upper_)
+ return data () (i, j);
+#endif
+ return zero_;
+ }
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type i, size_type j) {
+ BOOST_UBLAS_CHECK (i < size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (j < size2 (), bad_index ());
+#ifdef BOOST_UBLAS_OWN_BANDED
+ size_type k = (std::max) (i, j);
+ size_type l = lower_ + j - i;
+ if (k < (std::max) (size1 (), size2 ()) &&
+ l < lower_ + 1 + upper_)
+ return data () (i, j);
+#else
+ size_type k = j;
+ size_type l = upper_ + i - j;
+ if (k < size2 () &&
+ l < lower_ + 1 + upper_)
+ return data () (i, j);
+#endif
+#ifndef BOOST_UBLAS_REFERENCE_CONST_MEMBER
+ bad_index ().raise ();
+#endif
+ return const_cast<reference>(zero_);
+ }
+#else
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type i, size_type j) const {
+ BOOST_UBLAS_CHECK (i < size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (j < size2 (), bad_index ());
+#ifdef BOOST_UBLAS_OWN_BANDED
+ size_type k = (std::max) (i, j);
+ size_type l = lower_ + j - i;
+ if (k < (std::max) (size1 (), size2 ()) &&
+ l < lower_ + 1 + upper_)
+ return data () (i, j);
+#else
+ size_type k = j;
+ size_type l = upper_ + i - j;
+ if (k < size2 () &&
+ l < lower_ + 1 + upper_)
+ return data () (i, j);
+#endif
+#ifndef BOOST_UBLAS_REFERENCE_CONST_MEMBER
+ bad_index ().raise ();
+#endif
+ return const_cast<reference>(zero_);
+ }
+#endif
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ banded_adaptor &operator = (const banded_adaptor &m) {
+ matrix_assign<scalar_assign> (*this, m);
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ banded_adaptor &assign_temporary (banded_adaptor &m) {
+ *this = m;
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ banded_adaptor &operator = (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_assign> (*this, matrix<value_type> (ae));
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ banded_adaptor &assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_assign> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ banded_adaptor& operator += (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_assign> (*this, matrix<value_type> (*this + ae));
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ banded_adaptor &plus_assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_plus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ banded_adaptor& operator -= (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_assign> (*this, matrix<value_type> (*this - ae));
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ banded_adaptor &minus_assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_minus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ banded_adaptor& operator *= (const AT &at) {
+ matrix_assign_scalar<scalar_multiplies_assign> (*this, at);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ banded_adaptor& operator /= (const AT &at) {
+ matrix_assign_scalar<scalar_divides_assign> (*this, at);
+ return *this;
+ }
+
+ // Closure comparison
+ BOOST_UBLAS_INLINE
+ bool same_closure (const banded_adaptor &ba) const {
+ return (*this).data ().same_closure (ba.data ());
+ }
+
+ // Swapping
+ BOOST_UBLAS_INLINE
+ void swap (banded_adaptor &m) {
+ if (this != &m) {
+ BOOST_UBLAS_CHECK (lower_ == m.lower_, bad_size ());
+ BOOST_UBLAS_CHECK (upper_ == m.upper_, bad_size ());
+ matrix_swap<scalar_swap> (*this, m);
+ }
+ }
+ BOOST_UBLAS_INLINE
+ friend void swap (banded_adaptor &m1, banded_adaptor &m2) {
+ m1.swap (m2);
+ }
+
+ // Iterator types
+ private:
+ // Use the matrix iterator
+ typedef typename M::const_iterator1 const_subiterator1_type;
+ typedef typename boost::mpl::if_<boost::is_const<M>,
+ typename M::const_iterator1,
+ typename M::iterator1>::type subiterator1_type;
+ typedef typename M::const_iterator2 const_subiterator2_type;
+ typedef typename boost::mpl::if_<boost::is_const<M>,
+ typename M::const_iterator2,
+ typename M::iterator2>::type subiterator2_type;
+
+ public:
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ typedef indexed_iterator1<self_type, packed_random_access_iterator_tag> iterator1;
+ typedef indexed_iterator2<self_type, packed_random_access_iterator_tag> iterator2;
+ typedef indexed_const_iterator1<self_type, packed_random_access_iterator_tag> const_iterator1;
+ typedef indexed_const_iterator2<self_type, packed_random_access_iterator_tag> const_iterator2;
+#else
+ class const_iterator1;
+ class iterator1;
+ class const_iterator2;
+ class iterator2;
+#endif
+ typedef reverse_iterator_base1<const_iterator1> const_reverse_iterator1;
+ typedef reverse_iterator_base1<iterator1> reverse_iterator1;
+ typedef reverse_iterator_base2<const_iterator2> const_reverse_iterator2;
+ typedef reverse_iterator_base2<iterator2> reverse_iterator2;
+
+ // Element lookup
+ BOOST_UBLAS_INLINE
+ const_iterator1 find1 (int rank, size_type i, size_type j) const {
+ if (rank == 1) {
+ size_type lower_i = (std::max) (difference_type (j - upper_), difference_type (0));
+ i = (std::max) (i, lower_i);
+ size_type upper_i = (std::min) (j + 1 + lower_, size1 ());
+ i = (std::min) (i, upper_i);
+ }
+ return const_iterator1 (*this, data ().find1 (rank, i, j));
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 find1 (int rank, size_type i, size_type j) {
+ if (rank == 1) {
+ size_type lower_i = (std::max) (difference_type (j - upper_), difference_type (0));
+ i = (std::max) (i, lower_i);
+ size_type upper_i = (std::min) (j + 1 + lower_, size1 ());
+ i = (std::min) (i, upper_i);
+ }
+ return iterator1 (*this, data ().find1 (rank, i, j));
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 find2 (int rank, size_type i, size_type j) const {
+ if (rank == 1) {
+ size_type lower_j = (std::max) (difference_type (i - lower_), difference_type (0));
+ j = (std::max) (j, lower_j);
+ size_type upper_j = (std::min) (i + 1 + upper_, size2 ());
+ j = (std::min) (j, upper_j);
+ }
+ return const_iterator2 (*this, data ().find2 (rank, i, j));
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 find2 (int rank, size_type i, size_type j) {
+ if (rank == 1) {
+ size_type lower_j = (std::max) (difference_type (i - lower_), difference_type (0));
+ j = (std::max) (j, lower_j);
+ size_type upper_j = (std::min) (i + 1 + upper_, size2 ());
+ j = (std::min) (j, upper_j);
+ }
+ return iterator2 (*this, data ().find2 (rank, i, j));
+ }
+
+ // Iterators simply are indices.
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator1:
+ public container_const_reference<banded_adaptor>,
+ public random_access_iterator_base<typename iterator_restrict_traits<
+ typename const_subiterator1_type::iterator_category, packed_random_access_iterator_tag>::iterator_category,
+ const_iterator1, value_type> {
+ public:
+ typedef typename const_subiterator1_type::value_type value_type;
+ typedef typename const_subiterator1_type::difference_type difference_type;
+ typedef typename const_subiterator1_type::reference reference;
+ typedef typename const_subiterator1_type::pointer pointer;
+
+ typedef const_iterator2 dual_iterator_type;
+ typedef const_reverse_iterator2 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator1 ():
+ container_const_reference<self_type> (), it1_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator1 (const self_type &m, const const_subiterator1_type &it1):
+ container_const_reference<self_type> (m), it1_ (it1) {}
+ BOOST_UBLAS_INLINE
+ const_iterator1 (const iterator1 &it):
+ container_const_reference<self_type> (it ()), it1_ (it.it1_) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator ++ () {
+ ++ it1_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator -- () {
+ -- it1_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator += (difference_type n) {
+ it1_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator -= (difference_type n) {
+ it1_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it1_ - it.it1_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ size_type i = index1 ();
+ size_type j = index2 ();
+ BOOST_UBLAS_CHECK (i < (*this) ().size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (j < (*this) ().size2 (), bad_index ());
+#ifdef BOOST_UBLAS_OWN_BANDED
+ size_type k = (std::max) (i, j);
+ size_type l = (*this) ().lower () + j - i;
+ if (k < (std::max) ((*this) ().size1 (), (*this) ().size2 ()) &&
+ l < (*this) ().lower () + 1 + (*this) ().upper ())
+ return *it1_;
+#else
+ size_type k = j;
+ size_type l = (*this) ().upper () + i - j;
+ if (k < (*this) ().size2 () &&
+ l < (*this) ().lower () + 1 + (*this) ().upper ())
+ return *it1_;
+#endif
+ return (*this) () (i, j);
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 begin () const {
+ return (*this) ().find2 (1, index1 (), 0);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 end () const {
+ return (*this) ().find2 (1, index1 (), (*this) ().size2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rbegin () const {
+ return const_reverse_iterator2 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rend () const {
+ return const_reverse_iterator2 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it1_.index1 ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it1_.index2 ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator = (const const_iterator1 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it1_ = it.it1_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it1_ == it.it1_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it1_ < it.it1_;
+ }
+
+ private:
+ const_subiterator1_type it1_;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator1 begin1 () const {
+ return find1 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 end1 () const {
+ return find1 (0, size1 (), 0);
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class iterator1:
+ public container_reference<banded_adaptor>,
+ public random_access_iterator_base<typename iterator_restrict_traits<
+ typename subiterator1_type::iterator_category, packed_random_access_iterator_tag>::iterator_category,
+ iterator1, value_type> {
+ public:
+ typedef typename subiterator1_type::value_type value_type;
+ typedef typename subiterator1_type::difference_type difference_type;
+ typedef typename subiterator1_type::reference reference;
+ typedef typename subiterator1_type::pointer pointer;
+
+ typedef iterator2 dual_iterator_type;
+ typedef reverse_iterator2 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ iterator1 ():
+ container_reference<self_type> (), it1_ () {}
+ BOOST_UBLAS_INLINE
+ iterator1 (self_type &m, const subiterator1_type &it1):
+ container_reference<self_type> (m), it1_ (it1) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ iterator1 &operator ++ () {
+ ++ it1_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 &operator -- () {
+ -- it1_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 &operator += (difference_type n) {
+ it1_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 &operator -= (difference_type n) {
+ it1_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it1_ - it.it1_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ size_type i = index1 ();
+ size_type j = index2 ();
+ BOOST_UBLAS_CHECK (i < (*this) ().size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (j < (*this) ().size2 (), bad_index ());
+#ifdef BOOST_UBLAS_OWN_BANDED
+ size_type k = (std::max) (i, j);
+ size_type l = (*this) ().lower () + j - i;
+ if (k < (std::max) ((*this) ().size1 (), (*this) ().size2 ()) &&
+ l < (*this) ().lower () + 1 + (*this) ().upper ())
+ return *it1_;
+#else
+ size_type k = j;
+ size_type l = (*this) ().upper () + i - j;
+ if (k < (*this) ().size2 () &&
+ l < (*this) ().lower () + 1 + (*this) ().upper ())
+ return *it1_;
+#endif
+ return (*this) () (i, j);
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator2 begin () const {
+ return (*this) ().find2 (1, index1 (), 0);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator2 end () const {
+ return (*this) ().find2 (1, index1 (), (*this) ().size2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator2 rbegin () const {
+ return reverse_iterator2 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator2 rend () const {
+ return reverse_iterator2 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it1_.index1 ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it1_.index2 ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ iterator1 &operator = (const iterator1 &it) {
+ container_reference<self_type>::assign (&it ());
+ it1_ = it.it1_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it1_ == it.it1_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it1_ < it.it1_;
+ }
+
+ private:
+ subiterator1_type it1_;
+
+ friend class const_iterator1;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ iterator1 begin1 () {
+ return find1 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 end1 () {
+ return find1 (0, size1 (), 0);
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator2:
+ public container_const_reference<banded_adaptor>,
+ public random_access_iterator_base<packed_random_access_iterator_tag,
+ const_iterator2, value_type> {
+ public:
+ typedef typename iterator_restrict_traits<typename const_subiterator2_type::iterator_category,
+ packed_random_access_iterator_tag>::iterator_category iterator_category;
+ typedef typename const_subiterator2_type::value_type value_type;
+ typedef typename const_subiterator2_type::difference_type difference_type;
+ typedef typename const_subiterator2_type::reference reference;
+ typedef typename const_subiterator2_type::pointer pointer;
+
+ typedef const_iterator1 dual_iterator_type;
+ typedef const_reverse_iterator1 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator2 ():
+ container_const_reference<self_type> (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator2 (const self_type &m, const const_subiterator2_type &it2):
+ container_const_reference<self_type> (m), it2_ (it2) {}
+ BOOST_UBLAS_INLINE
+ const_iterator2 (const iterator2 &it):
+ container_const_reference<self_type> (it ()), it2_ (it.it2_) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator ++ () {
+ ++ it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator -- () {
+ -- it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator += (difference_type n) {
+ it2_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator -= (difference_type n) {
+ it2_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it2_ - it.it2_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ size_type i = index1 ();
+ size_type j = index2 ();
+ BOOST_UBLAS_CHECK (i < (*this) ().size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (j < (*this) ().size2 (), bad_index ());
+#ifdef BOOST_UBLAS_OWN_BANDED
+ size_type k = (std::max) (i, j);
+ size_type l = (*this) ().lower () + j - i;
+ if (k < (std::max) ((*this) ().size1 (), (*this) ().size2 ()) &&
+ l < (*this) ().lower () + 1 + (*this) ().upper ())
+ return *it2_;
+#else
+ size_type k = j;
+ size_type l = (*this) ().upper () + i - j;
+ if (k < (*this) ().size2 () &&
+ l < (*this) ().lower () + 1 + (*this) ().upper ())
+ return *it2_;
+#endif
+ return (*this) () (i, j);
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 begin () const {
+ return (*this) ().find1 (1, 0, index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 end () const {
+ return (*this) ().find1 (1, (*this) ().size1 (), index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rbegin () const {
+ return const_reverse_iterator1 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rend () const {
+ return const_reverse_iterator1 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it2_.index1 ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it2_.index2 ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator = (const const_iterator2 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it2_ = it.it2_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it2_ == it.it2_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it2_ < it.it2_;
+ }
+
+ private:
+ const_subiterator2_type it2_;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator2 begin2 () const {
+ return find2 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 end2 () const {
+ return find2 (0, 0, size2 ());
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class iterator2:
+ public container_reference<banded_adaptor>,
+ public random_access_iterator_base<typename iterator_restrict_traits<
+ typename subiterator2_type::iterator_category, packed_random_access_iterator_tag>::iterator_category,
+ iterator2, value_type> {
+ public:
+ typedef typename subiterator2_type::value_type value_type;
+ typedef typename subiterator2_type::difference_type difference_type;
+ typedef typename subiterator2_type::reference reference;
+ typedef typename subiterator2_type::pointer pointer;
+
+ typedef iterator1 dual_iterator_type;
+ typedef reverse_iterator1 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ iterator2 ():
+ container_reference<self_type> (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ iterator2 (self_type &m, const subiterator2_type &it2):
+ container_reference<self_type> (m), it2_ (it2) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ iterator2 &operator ++ () {
+ ++ it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 &operator -- () {
+ -- it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 &operator += (difference_type n) {
+ it2_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 &operator -= (difference_type n) {
+ it2_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it2_ - it.it2_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ size_type i = index1 ();
+ size_type j = index2 ();
+ BOOST_UBLAS_CHECK (i < (*this) ().size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (j < (*this) ().size2 (), bad_index ());
+#ifdef BOOST_UBLAS_OWN_BANDED
+ size_type k = (std::max) (i, j);
+ size_type l = (*this) ().lower () + j - i;
+ if (k < (std::max) ((*this) ().size1 (), (*this) ().size2 ()) &&
+ l < (*this) ().lower () + 1 + (*this) ().upper ())
+ return *it2_;
+#else
+ size_type k = j;
+ size_type l = (*this) ().upper () + i - j;
+ if (k < (*this) ().size2 () &&
+ l < (*this) ().lower () + 1 + (*this) ().upper ())
+ return *it2_;
+#endif
+ return (*this) () (i, j);
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator1 begin () const {
+ return (*this) ().find1 (1, 0, index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator1 end () const {
+ return (*this) ().find1 (1, (*this) ().size1 (), index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator1 rbegin () const {
+ return reverse_iterator1 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator1 rend () const {
+ return reverse_iterator1 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it2_.index1 ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it2_.index2 ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ iterator2 &operator = (const iterator2 &it) {
+ container_reference<self_type>::assign (&it ());
+ it2_ = it.it2_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it2_ == it.it2_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it2_ < it.it2_;
+ }
+
+ private:
+ subiterator2_type it2_;
+
+ friend class const_iterator2;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ iterator2 begin2 () {
+ return find2 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 end2 () {
+ return find2 (0, 0, size2 ());
+ }
+
+ // Reverse iterators
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rbegin1 () const {
+ return const_reverse_iterator1 (end1 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rend1 () const {
+ return const_reverse_iterator1 (begin1 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ reverse_iterator1 rbegin1 () {
+ return reverse_iterator1 (end1 ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator1 rend1 () {
+ return reverse_iterator1 (begin1 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rbegin2 () const {
+ return const_reverse_iterator2 (end2 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rend2 () const {
+ return const_reverse_iterator2 (begin2 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ reverse_iterator2 rbegin2 () {
+ return reverse_iterator2 (end2 ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator2 rend2 () {
+ return reverse_iterator2 (begin2 ());
+ }
+
+ private:
+ matrix_closure_type data_;
+ size_type lower_;
+ size_type upper_;
+ typedef const value_type const_value_type;
+ static const_value_type zero_;
+ };
+
+ // Specialization for temporary_traits
+ template <class M>
+ struct vector_temporary_traits< banded_adaptor<M> >
+ : vector_temporary_traits< M > {} ;
+ template <class M>
+ struct vector_temporary_traits< const banded_adaptor<M> >
+ : vector_temporary_traits< M > {} ;
+
+ template <class M>
+ struct matrix_temporary_traits< banded_adaptor<M> >
+ : matrix_temporary_traits< M > {} ;
+ template <class M>
+ struct matrix_temporary_traits< const banded_adaptor<M> >
+ : matrix_temporary_traits< M > {} ;
+
+
+ template<class M>
+ typename banded_adaptor<M>::const_value_type banded_adaptor<M>::zero_ = value_type/*zero*/();
+
+ // Diagonal matrix adaptor class
+ template<class M>
+ class diagonal_adaptor:
+ public banded_adaptor<M> {
+ public:
+ typedef M matrix_type;
+ typedef banded_adaptor<M> adaptor_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ diagonal_adaptor ():
+ adaptor_type () {}
+ BOOST_UBLAS_INLINE
+ diagonal_adaptor (matrix_type &data):
+ adaptor_type (data) {}
+ BOOST_UBLAS_INLINE
+ ~diagonal_adaptor () {}
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ diagonal_adaptor &operator = (const diagonal_adaptor &m) {
+ adaptor_type::operator = (m);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ diagonal_adaptor &operator = (const matrix_expression<AE> &ae) {
+ adaptor_type::operator = (ae);
+ return *this;
+ }
+ };
+
+}}}
+
+#endif
diff --git a/boost/boost/numeric/ublas/blas.hpp b/boost/boost/numeric/ublas/blas.hpp
new file mode 100644
index 00000000000..ab78cb486c5
--- /dev/null
+++ b/boost/boost/numeric/ublas/blas.hpp
@@ -0,0 +1,300 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without fee,
+// provided that the above copyright notice appear in all copies and
+// that both that copyright notice and this permission notice appear
+// in supporting documentation. The authors make no representations
+// about the suitability of this software for any purpose.
+// It is provided "as is" without express or implied warranty.
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#ifndef _BOOST_UBLAS_BLAS_
+#define _BOOST_UBLAS_BLAS_
+
+#include <boost/numeric/ublas/traits.hpp>
+
+namespace boost { namespace numeric { namespace ublas {
+
+ namespace blas_1 {
+
+ /** \namespace boost::numeric::ublas::blas_1
+ \brief wrapper functions for level 1 blas
+ */
+
+
+ /** \brief 1-Norm: \f$\sum_i |x_i|\f$
+ \ingroup blas1
+ */
+ template<class V>
+ typename type_traits<typename V::value_type>::real_type
+ asum (const V &v) {
+ return norm_1 (v);
+ }
+ /** \brief 2-Norm: \f$\sum_i |x_i|^2\f$
+ \ingroup blas1
+ */
+ template<class V>
+ typename type_traits<typename V::value_type>::real_type
+ nrm2 (const V &v) {
+ return norm_2 (v);
+ }
+ /** \brief element with larges absolute value: \f$\max_i |x_i|\f$
+ \ingroup blas1
+ */
+ template<class V>
+ typename type_traits<typename V::value_type>::real_type
+ amax (const V &v) {
+ return norm_inf (v);
+ }
+
+ /** \brief inner product of vectors \a v1 and \a v2
+ \ingroup blas1
+ */
+ template<class V1, class V2>
+ typename promote_traits<typename V1::value_type, typename V2::value_type>::promote_type
+ dot (const V1 &v1, const V2 &v2) {
+ return inner_prod (v1, v2);
+ }
+
+ /** \brief copy vector \a v2 to \a v1
+ \ingroup blas1
+ */
+ template<class V1, class V2>
+ V1 &
+ copy (V1 &v1, const V2 &v2) {
+ return v1.assign (v2);
+ }
+
+ /** \brief swap vectors \a v1 and \a v2
+ \ingroup blas1
+ */
+ template<class V1, class V2>
+ void swap (V1 &v1, V2 &v2) {
+ v1.swap (v2);
+ }
+
+ /** \brief scale vector \a v with scalar \a t
+ \ingroup blas1
+ */
+ template<class V, class T>
+ V &
+ scal (V &v, const T &t) {
+ return v *= t;
+ }
+
+ /** \brief compute \a v1 = \a v1 + \a t * \a v2
+ \ingroup blas1
+ */
+ template<class V1, class T, class V2>
+ V1 &
+ axpy (V1 &v1, const T &t, const V2 &v2) {
+ return v1.plus_assign (t * v2);
+ }
+
+ /** \brief apply plane rotation
+ \ingroup blas1
+ */
+ template<class T1, class V1, class T2, class V2>
+ void
+ rot (const T1 &t1, V1 &v1, const T2 &t2, V2 &v2) {
+ typedef typename promote_traits<typename V1::value_type, typename V2::value_type>::promote_type promote_type;
+ vector<promote_type> vt (t1 * v1 + t2 * v2);
+ v2.assign (- t2 * v1 + t1 * v2);
+ v1.assign (vt);
+ }
+
+ }
+
+ namespace blas_2 {
+
+ /** \namespace boost::numeric::ublas::blas_2
+ \brief wrapper functions for level 2 blas
+ */
+
+ /** \brief multiply vector \a v with triangular matrix \a m
+ \ingroup blas2
+ \todo: check that matrix is really triangular
+ */
+ template<class V, class M>
+ V &
+ tmv (V &v, const M &m) {
+ return v = prod (m, v);
+ }
+
+ /** \brief solve \a m \a x = \a v in place, \a m is triangular matrix
+ \ingroup blas2
+ */
+ template<class V, class M, class C>
+ V &
+ tsv (V &v, const M &m, C) {
+ return v = solve (m, v, C ());
+ }
+
+ /** \brief compute \a v1 = \a t1 * \a v1 + \a t2 * (\a m * \a v2)
+ \ingroup blas2
+ */
+ template<class V1, class T1, class T2, class M, class V2>
+ V1 &
+ gmv (V1 &v1, const T1 &t1, const T2 &t2, const M &m, const V2 &v2) {
+ return v1 = t1 * v1 + t2 * prod (m, v2);
+ }
+
+ /** \brief rank 1 update: \a m = \a m + \a t * (\a v1 * \a v2<sup>T</sup>)
+ \ingroup blas2
+ */
+ template<class M, class T, class V1, class V2>
+ M &
+ gr (M &m, const T &t, const V1 &v1, const V2 &v2) {
+#ifndef BOOST_UBLAS_SIMPLE_ET_DEBUG
+ return m += t * outer_prod (v1, v2);
+#else
+ return m = m + t * outer_prod (v1, v2);
+#endif
+ }
+
+ /** \brief symmetric rank 1 update: \a m = \a m + \a t * (\a v * \a v<sup>T</sup>)
+ \ingroup blas2
+ */
+ template<class M, class T, class V>
+ M &
+ sr (M &m, const T &t, const V &v) {
+#ifndef BOOST_UBLAS_SIMPLE_ET_DEBUG
+ return m += t * outer_prod (v, v);
+#else
+ return m = m + t * outer_prod (v, v);
+#endif
+ }
+ /** \brief hermitian rank 1 update: \a m = \a m + \a t * (\a v * \a v<sup>H</sup>)
+ \ingroup blas2
+ */
+ template<class M, class T, class V>
+ M &
+ hr (M &m, const T &t, const V &v) {
+#ifndef BOOST_UBLAS_SIMPLE_ET_DEBUG
+ return m += t * outer_prod (v, conj (v));
+#else
+ return m = m + t * outer_prod (v, conj (v));
+#endif
+ }
+
+ /** \brief symmetric rank 2 update: \a m = \a m + \a t *
+ (\a v1 * \a v2<sup>T</sup> + \a v2 * \a v1<sup>T</sup>)
+ \ingroup blas2
+ */
+ template<class M, class T, class V1, class V2>
+ M &
+ sr2 (M &m, const T &t, const V1 &v1, const V2 &v2) {
+#ifndef BOOST_UBLAS_SIMPLE_ET_DEBUG
+ return m += t * (outer_prod (v1, v2) + outer_prod (v2, v1));
+#else
+ return m = m + t * (outer_prod (v1, v2) + outer_prod (v2, v1));
+#endif
+ }
+ /** \brief hermitian rank 2 update: \a m = \a m +
+ \a t * (\a v1 * \a v2<sup>H</sup>)
+ + \a v2 * (\a t * \a v1)<sup>H</sup>)
+ \ingroup blas2
+ */
+ template<class M, class T, class V1, class V2>
+ M &
+ hr2 (M &m, const T &t, const V1 &v1, const V2 &v2) {
+#ifndef BOOST_UBLAS_SIMPLE_ET_DEBUG
+ return m += t * outer_prod (v1, conj (v2)) + type_traits<T>::conj (t) * outer_prod (v2, conj (v1));
+#else
+ return m = m + t * outer_prod (v1, conj (v2)) + type_traits<T>::conj (t) * outer_prod (v2, conj (v1));
+#endif
+ }
+
+ }
+
+ namespace blas_3 {
+
+ /** \namespace boost::numeric::ublas::blas_3
+ \brief wrapper functions for level 3 blas
+ */
+
+ /** \brief triangular matrix multiplication
+ \ingroup blas3
+ */
+ template<class M1, class T, class M2, class M3>
+ M1 &
+ tmm (M1 &m1, const T &t, const M2 &m2, const M3 &m3) {
+ return m1 = t * prod (m2, m3);
+ }
+
+ /** \brief triangular solve \a m2 * \a x = \a t * \a m1 in place,
+ \a m2 is a triangular matrix
+ \ingroup blas3
+ */
+ template<class M1, class T, class M2, class C>
+ M1 &
+ tsm (M1 &m1, const T &t, const M2 &m2, C) {
+ return m1 = solve (m2, t * m1, C ());
+ }
+
+ /** \brief general matrix multiplication
+ \ingroup blas3
+ */
+ template<class M1, class T1, class T2, class M2, class M3>
+ M1 &
+ gmm (M1 &m1, const T1 &t1, const T2 &t2, const M2 &m2, const M3 &m3) {
+ return m1 = t1 * m1 + t2 * prod (m2, m3);
+ }
+
+ /** \brief symmetric rank k update: \a m1 = \a t * \a m1 +
+ \a t2 * (\a m2 * \a m2<sup>T</sup>)
+ \ingroup blas3
+ \todo use opb_prod()
+ */
+ template<class M1, class T1, class T2, class M2>
+ M1 &
+ srk (M1 &m1, const T1 &t1, const T2 &t2, const M2 &m2) {
+ return m1 = t1 * m1 + t2 * prod (m2, trans (m2));
+ }
+ /** \brief hermitian rank k update: \a m1 = \a t * \a m1 +
+ \a t2 * (\a m2 * \a m2<sup>H</sup>)
+ \ingroup blas3
+ \todo use opb_prod()
+ */
+ template<class M1, class T1, class T2, class M2>
+ M1 &
+ hrk (M1 &m1, const T1 &t1, const T2 &t2, const M2 &m2) {
+ return m1 = t1 * m1 + t2 * prod (m2, herm (m2));
+ }
+
+ /** \brief generalized symmetric rank k update:
+ \a m1 = \a t1 * \a m1 + \a t2 * (\a m2 * \a m3<sup>T</sup>)
+ + \a t2 * (\a m3 * \a m2<sup>T</sup>)
+ \ingroup blas3
+ \todo use opb_prod()
+ */
+ template<class M1, class T1, class T2, class M2, class M3>
+ M1 &
+ sr2k (M1 &m1, const T1 &t1, const T2 &t2, const M2 &m2, const M3 &m3) {
+ return m1 = t1 * m1 + t2 * (prod (m2, trans (m3)) + prod (m3, trans (m2)));
+ }
+ /** \brief generalized hermitian rank k update:
+ \a m1 = \a t1 * \a m1 + \a t2 * (\a m2 * \a m3<sup>H</sup>)
+ + (\a m3 * (\a t2 * \a m2)<sup>H</sup>)
+ \ingroup blas3
+ \todo use opb_prod()
+ */
+ template<class M1, class T1, class T2, class M2, class M3>
+ M1 &
+ hr2k (M1 &m1, const T1 &t1, const T2 &t2, const M2 &m2, const M3 &m3) {
+ return m1 = t1 * m1 + t2 * prod (m2, herm (m3)) + type_traits<T2>::conj (t2) * prod (m3, herm (m2));
+ }
+
+ }
+
+}}}
+
+#endif
+
+
diff --git a/boost/boost/numeric/ublas/detail/concepts.hpp b/boost/boost/numeric/ublas/detail/concepts.hpp
new file mode 100644
index 00000000000..943672e9224
--- /dev/null
+++ b/boost/boost/numeric/ublas/detail/concepts.hpp
@@ -0,0 +1,1494 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without fee,
+// provided that the above copyright notice appear in all copies and
+// that both that copyright notice and this permission notice appear
+// in supporting documentation. The authors make no representations
+// about the suitability of this software for any purpose.
+// It is provided "as is" without express or implied warranty.
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#ifndef _BOOST_UBLAS_CONCEPTS_
+#define _BOOST_UBLAS_CONCEPTS_
+
+#include <boost/concept_check.hpp>
+
+// Concept checks based on ideas of Jeremy Siek
+
+namespace boost { namespace numeric { namespace ublas {
+
+
+ template<class I>
+ struct Indexed1DIteratorConcept {
+ typedef I iterator_type;
+
+ void constraints () {
+ iterator_type it = iterator_type ();
+ // Index
+ it.index ();
+ }
+ };
+
+ template<class I>
+ struct IndexedBidirectional1DIteratorConcept {
+ typedef I iterator_type;
+
+ void constraints () {
+ function_requires< BidirectionalIteratorConcept<iterator_type> >();
+ function_requires< Indexed1DIteratorConcept<iterator_type> >();
+ }
+ };
+
+ template<class I>
+ struct Mutable_IndexedBidirectional1DIteratorConcept {
+ typedef I iterator_type;
+
+ void constraints () {
+ function_requires< Mutable_BidirectionalIteratorConcept<iterator_type> >();
+ function_requires< Indexed1DIteratorConcept<iterator_type> >();
+ }
+ };
+
+ template<class I>
+ struct IndexedRandomAccess1DIteratorConcept {
+ typedef I iterator_type;
+
+ void constraints () {
+ function_requires< RandomAccessIteratorConcept<iterator_type> >();
+ function_requires< Indexed1DIteratorConcept<iterator_type> >();
+ }
+ };
+
+ template<class I>
+ struct Mutable_IndexedRandomAccess1DIteratorConcept {
+ typedef I iterator_type;
+
+ void constraints () {
+ function_requires< Mutable_RandomAccessIteratorConcept<iterator_type> >();
+ function_requires< Indexed1DIteratorConcept<iterator_type> >();
+ }
+ };
+
+ template<class I>
+ struct Indexed2DIteratorConcept {
+ typedef I iterator_type;
+ typedef typename I::dual_iterator_type dual_iterator_type;
+ typedef typename I::dual_reverse_iterator_type dual_reverse_iterator_type;
+
+ void constraints () {
+ iterator_type it = iterator_type ();
+ // Indices
+ it.index1 ();
+ it.index2 ();
+ // Iterator begin/end
+ dual_iterator_type it_begin (it.begin ());
+ dual_iterator_type it_end (it.end ());
+ // Reverse iterator begin/end
+ dual_reverse_iterator_type it_rbegin (it.rbegin ());
+ dual_reverse_iterator_type it_rend (it.rend ());
+ ignore_unused_variable_warning (it_begin);
+ ignore_unused_variable_warning (it_end);
+ ignore_unused_variable_warning (it_rbegin);
+ ignore_unused_variable_warning (it_rend);
+ }
+ };
+
+ template<class I1, class I2>
+ struct IndexedBidirectional2DIteratorConcept {
+ typedef I1 subiterator1_type;
+ typedef I2 subiterator2_type;
+
+ void constraints () {
+ function_requires< BidirectionalIteratorConcept<subiterator1_type> >();
+ function_requires< BidirectionalIteratorConcept<subiterator2_type> >();
+ function_requires< Indexed2DIteratorConcept<subiterator1_type> >();
+ function_requires< Indexed2DIteratorConcept<subiterator2_type> >();
+ }
+ };
+
+ template<class I1, class I2>
+ struct Mutable_IndexedBidirectional2DIteratorConcept {
+ typedef I1 subiterator1_type;
+ typedef I2 subiterator2_type;
+
+ void constraints () {
+ function_requires< Mutable_BidirectionalIteratorConcept<subiterator1_type> >();
+ function_requires< Mutable_BidirectionalIteratorConcept<subiterator2_type> >();
+ function_requires< Indexed2DIteratorConcept<subiterator1_type> >();
+ function_requires< Indexed2DIteratorConcept<subiterator2_type> >();
+ }
+ };
+
+ template<class I1, class I2>
+ struct IndexedRandomAccess2DIteratorConcept {
+ typedef I1 subiterator1_type;
+ typedef I2 subiterator2_type;
+
+ void constraints () {
+ function_requires< RandomAccessIteratorConcept<subiterator1_type> >();
+ function_requires< RandomAccessIteratorConcept<subiterator2_type> >();
+ function_requires< Indexed2DIteratorConcept<subiterator1_type> >();
+ function_requires< Indexed2DIteratorConcept<subiterator2_type> >();
+ }
+ };
+
+ template<class I1, class I2>
+ struct Mutable_IndexedRandomAccess2DIteratorConcept {
+ typedef I1 subiterator1_type;
+ typedef I2 subiterator2_type;
+
+ void constraints () {
+ function_requires< Mutable_RandomAccessIteratorConcept<subiterator1_type> >();
+ function_requires< Mutable_RandomAccessIteratorConcept<subiterator2_type> >();
+ function_requires< Indexed2DIteratorConcept<subiterator1_type> >();
+ function_requires< Indexed2DIteratorConcept<subiterator2_type> >();
+ }
+ };
+
+ template<class C>
+ struct StorageArrayConcept {
+ typedef C container_type;
+ typedef typename C::size_type size_type;
+ typedef typename C::value_type value_type;
+
+ void constraints () {
+ function_requires< RandomAccessContainerConcept<container_type> >();
+ size_type n (0);
+ // Sizing constructor
+ container_type c = container_type (n);
+ // Initialised sizing constructor
+ container_type (n, value_type (5));
+ ignore_unused_variable_warning (c);
+ }
+ };
+
+ template<class C>
+ struct Mutable_StorageArrayConcept {
+ typedef C container_type;
+ typedef typename C::size_type size_type;
+ typedef typename C::value_type value_type;
+ typedef typename C::iterator iterator_type;
+
+ void constraints () {
+ function_requires< Mutable_RandomAccessContainerConcept<container_type> > ();
+ size_type n (0);
+ // Sizing constructor
+ container_type c = container_type (n);
+ // Initialised sizing constructor
+ c = container_type (n, value_type (3));
+ // Resize
+ c.resize (n, value_type (5));
+ // Resize - none preserving
+ c.resize (n);
+ }
+ };
+
+ template<class C>
+ struct StorageSparseConcept {
+ typedef C container_type;
+ typedef typename C::size_type size_type;
+
+ void constraints () {
+ function_requires< ReversibleContainerConcept<container_type> > ();
+ }
+ };
+
+ template<class C>
+ struct Mutable_StorageSparseConcept {
+ typedef C container_type;
+ typedef typename C::size_type size_type;
+ typedef typename C::value_type value_type;
+ typedef typename C::iterator iterator_type;
+
+ void constraints () {
+ // NOTE - Not Mutable_ReversibleContainerConcept
+ function_requires< ReversibleContainerConcept<container_type> >();
+ container_type c = container_type ();
+ value_type t = value_type ();
+ iterator_type it = iterator_type (), it1 = iterator_type (), it2 = iterator_type ();
+ // Insert
+ c.insert (it, t);
+ // Erase
+ c.erase (it);
+ // Range erase
+ c.erase (it1, it2);
+ // Clear
+ c.clear ();
+ }
+ };
+
+ template<class G>
+ struct IndexSetConcept {
+ typedef G generator_type;
+ typedef typename G::size_type size_type;
+ typedef typename G::value_type value_type;
+
+ void constraints () {
+ function_requires< AssignableConcept<generator_type> >();
+ function_requires< ReversibleContainerConcept<generator_type> >();
+ generator_type g = generator_type ();
+ size_type n (0);
+ value_type t;
+ // Element access
+ t = g (n);
+ ignore_unused_variable_warning (t);
+ }
+ };
+
+ template<class SE>
+ struct ScalarExpressionConcept {
+ typedef SE scalar_expression_type;
+ typedef typename SE::value_type value_type;
+
+ void constraints () {
+ scalar_expression_type *sp;
+ scalar_expression_type s = *sp;
+ value_type t;
+ // Conversion
+ t = s;
+ ignore_unused_variable_warning (t);
+ }
+ };
+
+ template<class VE>
+ struct VectorExpressionConcept {
+ typedef VE vector_expression_type;
+ typedef typename VE::type_category type_category;
+ typedef typename VE::size_type size_type;
+ typedef typename VE::value_type value_type;
+ typedef typename VE::const_iterator const_iterator_type;
+ typedef typename VE::const_reverse_iterator const_reverse_iterator_type;
+
+ void constraints () {
+ vector_expression_type *vp;
+ const vector_expression_type *cvp;
+ vector_expression_type v = *vp;
+ const vector_expression_type cv = *cvp;
+ size_type n (0), i (0);
+ value_type t;
+ // Find (internal?)
+ const_iterator_type cit (v.find (i));
+ // Beginning of range
+ const_iterator_type cit_begin (v.begin ());
+ // End of range
+ const_iterator_type cit_end (v.end ());
+ // Size
+ n = v.size ();
+ // Beginning of reverse range
+ const_reverse_iterator_type crit_begin (cv.rbegin ());
+ // End of reverse range
+ const_reverse_iterator_type crit_end (cv.rend ());
+ // Element access
+ t = v (i);
+ ignore_unused_variable_warning (n);
+ ignore_unused_variable_warning (cit);
+ ignore_unused_variable_warning (cit_begin);
+ ignore_unused_variable_warning (cit_end);
+ ignore_unused_variable_warning (crit_begin);
+ ignore_unused_variable_warning (crit_end);
+ ignore_unused_variable_warning (t);
+ }
+ };
+
+ template<class VE>
+ struct Mutable_VectorExpressionConcept {
+ typedef VE vector_expression_type;
+ typedef typename VE::size_type size_type;
+ typedef typename VE::value_type value_type;
+ typedef typename VE::iterator iterator_type;
+ typedef typename VE::reverse_iterator reverse_iterator_type;
+
+ void constraints () {
+ function_requires< AssignableConcept<vector_expression_type> >();
+ function_requires< VectorExpressionConcept<vector_expression_type> >();
+ vector_expression_type *vp;
+ vector_expression_type v = *vp, v1 = *vp, v2 = *vp;
+ size_type i (0);
+ value_type t = value_type ();
+ // Find (internal?)
+ iterator_type it (v.find (i));
+ // Beginning of range
+ iterator_type it_begin (v.begin ());
+ // End of range
+ iterator_type it_end (v.end ());
+ // Swap
+ v1.swap (v2);
+ // Beginning of reverse range
+ reverse_iterator_type rit_begin (v.rbegin ());
+ // End of reverse range
+ reverse_iterator_type rit_end (v.rend ());
+ // Assignments
+ v2 = v1;
+ v2.assign (v1);
+ v2 += v1;
+ v2.plus_assign (v1);
+ v2 -= v1;
+ v2.minus_assign (v1);
+ v *= t;
+ ignore_unused_variable_warning (it);
+ ignore_unused_variable_warning (it_begin);
+ ignore_unused_variable_warning (it_end);
+ ignore_unused_variable_warning (rit_begin);
+ ignore_unused_variable_warning (rit_end);
+ }
+ };
+
+ template<class ME>
+ struct MatrixExpressionConcept {
+ typedef ME matrix_expression_type;
+ typedef typename ME::type_category type_category;
+ typedef typename ME::size_type size_type;
+ typedef typename ME::value_type value_type;
+ typedef typename ME::const_iterator1 const_subiterator1_type;
+ typedef typename ME::const_iterator2 const_subiterator2_type;
+ typedef typename ME::const_reverse_iterator1 const_reverse_subiterator1_type;
+ typedef typename ME::const_reverse_iterator2 const_reverse_subiterator2_type;
+
+ void constraints () {
+ matrix_expression_type *mp;
+ const matrix_expression_type *cmp;
+ matrix_expression_type m = *mp;
+ const matrix_expression_type cm = *cmp;
+ size_type n (0), i (0), j (0);
+ value_type t;
+ // Find (internal?)
+ const_subiterator1_type cit1 (m.find1 (0, i, j));
+ const_subiterator2_type cit2 (m.find2 (0, i, j));
+ // Beginning of range
+ const_subiterator1_type cit1_begin (m.begin1 ());
+ const_subiterator2_type cit2_begin (m.begin2 ());
+ // End of range
+ const_subiterator1_type cit1_end (m.end1 ());
+ const_subiterator2_type cit2_end (m.end2 ());
+ // Size
+ n = m.size1 ();
+ n = m.size2 ();
+ // Beginning of reverse range
+ const_reverse_subiterator1_type crit1_begin (cm.rbegin1 ());
+ const_reverse_subiterator2_type crit2_begin (cm.rbegin2 ());
+ // End of reverse range
+ const_reverse_subiterator1_type crit1_end (cm.rend1 ());
+ const_reverse_subiterator2_type crit2_end (cm.rend2 ());
+ // Element access
+ t = m (i, j);
+ ignore_unused_variable_warning (n);
+ ignore_unused_variable_warning (cit1);
+ ignore_unused_variable_warning (cit2);
+ ignore_unused_variable_warning (cit1_begin);
+ ignore_unused_variable_warning (cit2_begin);
+ ignore_unused_variable_warning (cit1_end);
+ ignore_unused_variable_warning (cit2_end);
+ ignore_unused_variable_warning (crit1_begin);
+ ignore_unused_variable_warning (crit2_begin);
+ ignore_unused_variable_warning (crit1_end);
+ ignore_unused_variable_warning (crit2_end);
+ ignore_unused_variable_warning (t);
+ }
+ };
+
+ template<class ME>
+ struct Mutable_MatrixExpressionConcept {
+ typedef ME matrix_expression_type;
+ typedef typename ME::size_type size_type;
+ typedef typename ME::value_type value_type;
+ typedef typename ME::iterator1 subiterator1_type;
+ typedef typename ME::iterator2 subiterator2_type;
+ typedef typename ME::reverse_iterator1 reverse_subiterator1_type;
+ typedef typename ME::reverse_iterator2 reverse_subiterator2_type;
+
+ void constraints () {
+ function_requires< AssignableConcept<matrix_expression_type> >();
+ function_requires< MatrixExpressionConcept<matrix_expression_type> >();
+ matrix_expression_type *mp;
+ matrix_expression_type m = *mp, m1 = *mp, m2 = *mp;
+ size_type i (0), j (0);
+ value_type t = value_type ();
+ // Find (internal?)
+ subiterator1_type it1 (m.find1 (0, i, j));
+ subiterator2_type it2 (m.find2 (0, i, j));
+ // Beginning of range
+ subiterator1_type it1_begin (m.begin1 ());
+ subiterator2_type it2_begin (m.begin2 ());
+ // End of range
+ subiterator1_type it1_end (m.end1 ());
+ subiterator2_type it2_end (m.end2 ());
+ // Swap
+ m1.swap (m2);
+ // Beginning of reverse range
+ reverse_subiterator1_type rit1_begin (m.rbegin1 ());
+ reverse_subiterator2_type rit2_begin (m.rbegin2 ());
+ // End of reverse range
+ reverse_subiterator1_type rit1_end (m.rend1 ());
+ reverse_subiterator2_type rit2_end (m.rend2 ());
+ // Assignments
+ m2 = m1;
+ m2.assign (m1);
+ m2 += m1;
+ m2.plus_assign (m1);
+ m2 -= m1;
+ m2.minus_assign (m1);
+ m *= t;
+ ignore_unused_variable_warning (it1);
+ ignore_unused_variable_warning (it2);
+ ignore_unused_variable_warning (it1_begin);
+ ignore_unused_variable_warning (it2_begin);
+ ignore_unused_variable_warning (it1_end);
+ ignore_unused_variable_warning (it2_end);
+ ignore_unused_variable_warning (rit1_begin);
+ ignore_unused_variable_warning (rit2_begin);
+ ignore_unused_variable_warning (rit1_end);
+ ignore_unused_variable_warning (rit2_end);
+ }
+ };
+
+ template<class V>
+ struct VectorConcept {
+ typedef V vector_type;
+ typedef typename V::size_type size_type;
+ typedef typename V::value_type value_type;
+ typedef const value_type *const_pointer;
+
+ void constraints () {
+ function_requires< VectorExpressionConcept<vector_type> >();
+ size_type n (0);
+ size_type i (0);
+ // Sizing constructor
+ vector_type v (n);
+ // Element support
+ const_pointer p = v.find_element (i);
+
+ ignore_unused_variable_warning (p);
+ }
+ };
+
+ template<class V>
+ struct Mutable_VectorConcept {
+ typedef V vector_type;
+ typedef typename V::size_type size_type;
+ typedef typename V::value_type value_type;
+ typedef value_type *pointer;
+
+ void constraints () {
+ function_requires< VectorConcept<vector_type> >();
+ function_requires< Mutable_VectorExpressionConcept<vector_type> >();
+ size_type n (0);
+ value_type t = value_type ();
+ size_type i (0);
+ vector_type v;
+ // Element support
+ pointer p = v.find_element (i);
+ // Element assignment
+ value_type r = v.insert_element (i, t);
+ v.insert_element (i, t) = r;
+ // Zeroing
+ v.clear ();
+ // Resize
+ v.resize (n);
+
+ ignore_unused_variable_warning (p);
+ ignore_unused_variable_warning (r);
+ }
+ };
+
+ template<class V>
+ struct SparseVectorConcept {
+ typedef V vector_type;
+ typedef typename V::size_type size_type;
+
+ void constraints () {
+ function_requires< VectorConcept<vector_type> >();
+ }
+ };
+
+ template<class V>
+ struct Mutable_SparseVectorConcept {
+ typedef V vector_type;
+ typedef typename V::size_type size_type;
+ typedef typename V::value_type value_type;
+
+ void constraints () {
+ function_requires< SparseVectorConcept<vector_type> >();
+ function_requires< Mutable_VectorConcept<vector_type> >();
+ size_type i (0);
+ vector_type v;
+ // Element erasure
+ v.erase_element (i);
+ }
+ };
+
+ template<class M>
+ struct MatrixConcept {
+ typedef M matrix_type;
+ typedef typename M::size_type size_type;
+ typedef typename M::value_type value_type;
+ typedef const value_type *const_pointer;
+
+ void constraints () {
+ function_requires< MatrixExpressionConcept<matrix_type> >();
+ size_type n (0);
+ size_type i (0), j (0);
+ // Sizing constructor
+ matrix_type m (n, n);
+ // Element support
+#ifndef SKIP_BAD
+ const_pointer p = m.find_element (i, j);
+#else
+ const_pointer p;
+ ignore_unused_variable_warning (i);
+ ignore_unused_variable_warning (j);
+#endif
+ ignore_unused_variable_warning (p);
+ }
+ };
+
+ template<class M>
+ struct Mutable_MatrixConcept {
+ typedef M matrix_type;
+ typedef typename M::size_type size_type;
+ typedef typename M::value_type value_type;
+ typedef value_type *pointer;
+
+ void constraints () {
+ function_requires< MatrixConcept<matrix_type> >();
+ function_requires< Mutable_MatrixExpressionConcept<matrix_type> >();
+ size_type n (0);
+ value_type t = value_type ();
+ size_type i (0), j (0);
+ matrix_type m;
+ // Element support
+#ifndef SKIP_BAD
+ pointer p = m.find_element (i, j);
+ ignore_unused_variable_warning (i);
+ ignore_unused_variable_warning (j);
+#else
+ pointer p;
+#endif
+ // Element assigment
+ value_type r = m.insert_element (i, j, t);
+ m.insert_element (i, j, t) = r;
+ // Zeroing
+ m.clear ();
+ // Resize
+ m.resize (n, n);
+ m.resize (n, n, false);
+
+ ignore_unused_variable_warning (p);
+ ignore_unused_variable_warning (r);
+ }
+ };
+
+ template<class M>
+ struct SparseMatrixConcept {
+ typedef M matrix_type;
+ typedef typename M::size_type size_type;
+
+ void constraints () {
+ function_requires< MatrixConcept<matrix_type> >();
+ }
+ };
+
+ template<class M>
+ struct Mutable_SparseMatrixConcept {
+ typedef M matrix_type;
+ typedef typename M::size_type size_type;
+ typedef typename M::value_type value_type;
+
+ void constraints () {
+ function_requires< SparseMatrixConcept<matrix_type> >();
+ function_requires< Mutable_MatrixConcept<matrix_type> >();
+ size_type i (0), j (0);
+ matrix_type m;
+ // Elemnent erasure
+ m.erase_element (i, j);
+ }
+ };
+
+ template<class T>
+ T
+ ZeroElement (T);
+ template<>
+ float
+ ZeroElement (float) {
+ return 0.f;
+ }
+ template<>
+ double
+ ZeroElement (double) {
+ return 0.;
+ }
+ template<>
+ vector<float>
+ ZeroElement (vector<float>) {
+ return zero_vector<float> ();
+ }
+ template<>
+ vector<double>
+ ZeroElement (vector<double>) {
+ return zero_vector<double> ();
+ }
+ template<>
+ matrix<float>
+ ZeroElement (matrix<float>) {
+ return zero_matrix<float> ();
+ }
+ template<>
+ matrix<double>
+ ZeroElement (matrix<double>) {
+ return zero_matrix<double> ();
+ }
+ template<>
+ std::complex<float>
+ ZeroElement (std::complex<float>) {
+ return std::complex<float> (0.f);
+ }
+ template<>
+ std::complex<double>
+ ZeroElement (std::complex<double>) {
+ return std::complex<double> (0.);
+ }
+ template<>
+ vector<std::complex<float> >
+ ZeroElement (vector<std::complex<float> >) {
+ return zero_vector<std::complex<float> > ();
+ }
+ template<>
+ vector<std::complex<double> >
+ ZeroElement (vector<std::complex<double> >) {
+ return zero_vector<std::complex<double> > ();
+ }
+ template<>
+ matrix<std::complex<float> >
+ ZeroElement (matrix<std::complex<float> >) {
+ return zero_matrix<std::complex<float> > ();
+ }
+ template<>
+ matrix<std::complex<double> >
+ ZeroElement (matrix<std::complex<double> >) {
+ return zero_matrix<std::complex<double> > ();
+ }
+
+ template<class T>
+ T
+ OneElement (T);
+ template<>
+ float
+ OneElement (float) {
+ return 1.f;
+ }
+ template<>
+ double
+ OneElement (double) {
+ return 1.;
+ }
+ template<>
+ matrix<float>
+ OneElement (matrix<float>) {
+ return identity_matrix<float> ();
+ }
+ template<>
+ matrix<double>
+ OneElement (matrix<double>) {
+ return identity_matrix<double> ();
+ }
+ template<>
+ std::complex<float>
+ OneElement (std::complex<float>) {
+ return std::complex<float> (1.f);
+ }
+ template<>
+ std::complex<double>
+ OneElement (std::complex<double>) {
+ return std::complex<double> (1.);
+ }
+ template<>
+ matrix<std::complex<float> >
+ OneElement (matrix<std::complex<float> >) {
+ return identity_matrix<std::complex<float> > ();
+ }
+ template<>
+ matrix<std::complex<double> >
+ OneElement (matrix<std::complex<double> >) {
+ return identity_matrix<std::complex<double> > ();
+ }
+
+ template<class E1, class E2>
+ bool
+ operator == (const vector_expression<E1> &e1, const vector_expression<E2> &e2) {
+ typedef typename promote_traits<typename E1::value_type,
+ typename E2::value_type>::promote_type value_type;
+ typedef typename type_traits<value_type>::real_type real_type;
+ return norm_inf (e1 - e2) == real_type/*zero*/();
+ }
+ template<class E1, class E2>
+ bool
+ operator == (const matrix_expression<E1> &e1, const matrix_expression<E2> &e2) {
+ typedef typename promote_traits<typename E1::value_type,
+ typename E2::value_type>::promote_type value_type;
+ typedef typename type_traits<value_type>::real_type real_type;
+ return norm_inf (e1 - e2) == real_type/*zero*/();
+ }
+
+ template<class T>
+ struct AdditiveAbelianGroupConcept {
+ typedef T value_type;
+
+ void constraints () {
+ bool r;
+ value_type a = value_type (), b = value_type (), c = value_type ();
+ r = (a + b) + c == a + (b + c);
+ r = ZeroElement (value_type ()) + a == a;
+ r = a + ZeroElement (value_type ()) == a;
+ r = a + (- a) == ZeroElement (value_type ());
+ r = (- a) + a == ZeroElement (value_type ());
+ r = a + b == b + a;
+ ignore_unused_variable_warning (r);
+ }
+ };
+
+ template<class T>
+ struct MultiplicativeAbelianGroupConcept {
+ typedef T value_type;
+
+ void constraints () {
+ bool r;
+ value_type a = value_type (), b = value_type (), c = value_type ();
+ r = (a * b) * c == a * (b * c);
+ r = OneElement (value_type ()) * a == a;
+ r = a * OneElement (value_type ()) == a;
+ r = a * (OneElement (value_type ()) / a) == a;
+ r = (OneElement (value_type ()) / a) * a == a;
+ r = a * b == b * a;
+ ignore_unused_variable_warning (r);
+ }
+ };
+
+ template<class T>
+ struct RingWithIdentityConcept {
+ typedef T value_type;
+
+ void constraints () {
+ function_requires< AdditiveAbelianGroupConcept<value_type> >();
+ bool r;
+ value_type a = value_type (), b = value_type (), c = value_type ();
+ r = (a * b) * c == a * (b * c);
+ r = (a + b) * c == a * c + b * c;
+ r = OneElement (value_type ()) * a == a;
+ r = a * OneElement (value_type ()) == a;
+ ignore_unused_variable_warning (r);
+ }
+ };
+
+ template<class T>
+ struct Prod_RingWithIdentityConcept {
+ typedef T value_type;
+
+ void constraints () {
+ function_requires< AdditiveAbelianGroupConcept<value_type> >();
+ bool r;
+ value_type a = value_type (), b = value_type (), c = value_type ();
+ r = prod (T (prod (a, b)), c) == prod (a, T (prod (b, c)));
+ r = prod (a + b, c) == prod (a, c) + prod (b, c);
+ r = prod (OneElement (value_type ()), a) == a;
+ r = prod (a, OneElement (value_type ())) == a;
+ ignore_unused_variable_warning (r);
+ }
+ };
+
+ template<class T>
+ struct CommutativeRingWithIdentityConcept {
+ typedef T value_type;
+
+ void constraints () {
+ function_requires< RingWithIdentityConcept<value_type> >();
+ bool r;
+ value_type a = value_type (), b = value_type ();
+ r = a * b == b * a;
+ ignore_unused_variable_warning (r);
+ }
+ };
+
+ template<class T>
+ struct FieldConcept {
+ typedef T value_type;
+
+ void constraints () {
+ function_requires< CommutativeRingWithIdentityConcept<value_type> >();
+ bool r;
+ value_type a = value_type ();
+ r = a == ZeroElement (value_type ()) || a * (OneElement (value_type ()) / a) == a;
+ r = a == ZeroElement (value_type ()) || (OneElement (value_type ()) / a) * a == a;
+ ignore_unused_variable_warning (r);
+ }
+ };
+
+ template<class T, class V>
+ struct VectorSpaceConcept {
+ typedef T value_type;
+ typedef V vector_type;
+
+ void constraints () {
+ function_requires< FieldConcept<value_type> >();
+ function_requires< AdditiveAbelianGroupConcept<vector_type> >();
+ bool r;
+ value_type alpha = value_type (), beta = value_type ();
+ vector_type a = vector_type (), b = vector_type ();
+ r = alpha * (a + b) == alpha * a + alpha * b;
+ r = (alpha + beta) * a == alpha * a + beta * a;
+ r = (alpha * beta) * a == alpha * (beta * a);
+ r = OneElement (value_type ()) * a == a;
+ ignore_unused_variable_warning (r);
+ }
+ };
+
+ template<class T, class V, class M>
+ struct LinearOperatorConcept {
+ typedef T value_type;
+ typedef V vector_type;
+ typedef M matrix_type;
+
+ void constraints () {
+ function_requires< VectorSpaceConcept<value_type, vector_type> >();
+ bool r;
+ value_type alpha = value_type (), beta = value_type ();
+ vector_type a = vector_type (), b = vector_type ();
+ matrix_type A = matrix_type ();
+ r = prod (A, alpha * a + beta * b) == alpha * prod (A, a) + beta * prod (A, b);
+ ignore_unused_variable_warning (r);
+ }
+ };
+
+ void concept_checks () {
+
+ // Allow tests to be group to keep down compiler storage requirement
+#ifdef INTERAL
+#define INTERNAL_STORAGE
+#define INTERNAL_VECTOR
+#define INTERNAL_MATRIX
+#define INTERNAL_SPECIAL
+#define INTERNAL_SPARSE
+#define INTERNAL_EXPRESSION
+#endif
+
+ // Element value type for tests
+ typedef float T;
+
+ // Storage Array
+#if defined (INTERNAL_STORAGE) || defined (INTERNAL_STORAGE_DENSE)
+ {
+ typedef std::vector<T> container_model;
+ function_requires< Mutable_StorageArrayConcept<container_model> >();
+ function_requires< RandomAccessIteratorConcept<container_model::const_iterator> >();
+ function_requires< Mutable_RandomAccessIteratorConcept<container_model::iterator> >();
+ }
+
+ {
+ typedef bounded_array<T, 1> container_model;
+ function_requires< Mutable_StorageArrayConcept<container_model> >();
+ function_requires< RandomAccessIteratorConcept<container_model::const_iterator> >();
+ function_requires< Mutable_RandomAccessIteratorConcept<container_model::iterator> >();
+ }
+
+ {
+ typedef unbounded_array<T> container_model;
+ function_requires< Mutable_StorageArrayConcept<container_model> >();
+ function_requires< RandomAccessIteratorConcept<container_model::const_iterator> >();
+ function_requires< Mutable_RandomAccessIteratorConcept<container_model::iterator> >();
+ }
+
+/* FIXME array_adaptors are in progress
+ {
+ typedef array_adaptor<T> container_model;
+ function_requires< Mutable_StorageArrayConcept<container_model> >();
+ function_requires< RandomAccessIteratorConcept<container_model::const_iterator> >();
+ function_requires< Mutable_RandomAccessIteratorConcept<container_model::iterator> >();
+ }
+*/
+
+ {
+ typedef range container_model;
+ function_requires< IndexSetConcept<range> >();
+ function_requires< RandomAccessIteratorConcept<range::const_iterator> >();
+ }
+
+ {
+ typedef slice container_model;
+ function_requires< IndexSetConcept<range> >();
+ function_requires< RandomAccessIteratorConcept<range::const_iterator> >();
+ }
+
+ {
+ typedef indirect_array<> container_model;
+ function_requires< IndexSetConcept<range> >();
+ function_requires< RandomAccessIteratorConcept<range::const_iterator> >();
+ }
+#endif
+
+ // Storage Sparse
+#if defined (INTERNAL_STORAGE) || defined (INTERNAL_STORAGE_SPARSE)
+ {
+ typedef map_array<std::size_t, T> container_model;
+ function_requires< Mutable_StorageSparseConcept<container_model> >();
+ function_requires< RandomAccessIteratorConcept<container_model::const_iterator> >();
+ function_requires< RandomAccessIteratorConcept<container_model::iterator> >();
+ }
+
+ {
+ typedef std::map<std::size_t, T> container_model;
+ function_requires< Mutable_StorageSparseConcept<container_model > >();
+ function_requires< BidirectionalIteratorConcept<container_model::const_iterator> >();
+ function_requires< BidirectionalIteratorConcept<container_model::iterator> >();
+ }
+#endif
+
+ // Vector
+#if defined (INTERNAL_VECTOR) || defined (INTERNAL_VECTOR_DENSE)
+ {
+ typedef vector<T> container_model;
+ function_requires< RandomAccessContainerConcept<container_model> >();
+ function_requires< Mutable_VectorConcept<container_model> >();
+ function_requires< IndexedRandomAccess1DIteratorConcept<container_model::const_iterator> >();
+ function_requires< Mutable_IndexedRandomAccess1DIteratorConcept<container_model::iterator> >();
+ function_requires< IndexedRandomAccess1DIteratorConcept<container_model::const_reverse_iterator> >();
+ function_requires< Mutable_IndexedRandomAccess1DIteratorConcept<container_model::reverse_iterator> >();
+ }
+
+ {
+ typedef zero_vector<T> container_model;
+ function_requires< VectorConcept<container_model> >();
+ function_requires< IndexedBidirectional1DIteratorConcept<container_model::const_iterator> >();
+ function_requires< IndexedBidirectional1DIteratorConcept<container_model::const_reverse_iterator> >();
+ }
+
+ {
+ typedef unit_vector<T> container_model;
+ function_requires< VectorConcept<container_model> >();
+ function_requires< IndexedBidirectional1DIteratorConcept<container_model::const_iterator> >();
+ function_requires< IndexedBidirectional1DIteratorConcept<container_model::const_reverse_iterator> >();
+ }
+
+ {
+ typedef scalar_vector<T> container_model;
+ function_requires< VectorConcept<container_model> >();
+ function_requires< IndexedRandomAccess1DIteratorConcept<container_model::const_iterator> >();
+ function_requires< IndexedRandomAccess1DIteratorConcept<container_model::const_reverse_iterator> >();
+ }
+
+ {
+ typedef c_vector<T, 1> container_model;
+ function_requires< Mutable_VectorConcept<container_model> >();
+ function_requires< IndexedRandomAccess1DIteratorConcept<container_model::const_iterator> >();
+ function_requires< Mutable_IndexedRandomAccess1DIteratorConcept<container_model::iterator> >();
+ function_requires< IndexedRandomAccess1DIteratorConcept<container_model::const_reverse_iterator> >();
+ function_requires< Mutable_IndexedRandomAccess1DIteratorConcept<container_model::reverse_iterator> >();
+ }
+#endif
+
+ // Vector Proxies
+#if defined (INTERNAL_VECTOR) || defined (INTERNAL_VECTOR_PROXY)
+ {
+ typedef vector_range<vector<T> > container_model;
+ function_requires< Mutable_VectorExpressionConcept<container_model> >();
+ function_requires< IndexedRandomAccess1DIteratorConcept<container_model::const_iterator> >();
+ function_requires< Mutable_IndexedRandomAccess1DIteratorConcept<container_model::iterator> >();
+ function_requires< IndexedRandomAccess1DIteratorConcept<container_model::const_reverse_iterator> >();
+ function_requires< Mutable_IndexedRandomAccess1DIteratorConcept<container_model::reverse_iterator> >();
+ }
+
+ {
+ typedef vector_slice<vector<T> > container_model;
+ function_requires< Mutable_VectorExpressionConcept<container_model> >();
+ function_requires< IndexedRandomAccess1DIteratorConcept<container_model::const_iterator> >();
+ function_requires< Mutable_IndexedRandomAccess1DIteratorConcept<container_model::iterator> >();
+ function_requires< IndexedRandomAccess1DIteratorConcept<container_model::const_reverse_iterator> >();
+ function_requires< Mutable_IndexedRandomAccess1DIteratorConcept<container_model::reverse_iterator> >();
+ }
+
+ {
+ typedef vector_indirect<vector<T> > container_model;
+ function_requires< Mutable_VectorExpressionConcept<container_model> >();
+ function_requires< IndexedRandomAccess1DIteratorConcept<container_model::const_iterator> >();
+ function_requires< Mutable_IndexedRandomAccess1DIteratorConcept<container_model::iterator> >();
+ function_requires< IndexedRandomAccess1DIteratorConcept<container_model::const_reverse_iterator> >();
+ function_requires< Mutable_IndexedRandomAccess1DIteratorConcept<container_model::reverse_iterator> >();
+ }
+#endif
+
+ // Sparse Vector
+#if defined (INTERNAL_SPARSE) || defined (INTERNAL_VECTOR_SPARSE)
+ {
+ typedef mapped_vector<T> container_model;
+ function_requires< Mutable_SparseVectorConcept<container_model> >();
+ function_requires< IndexedBidirectional1DIteratorConcept<container_model::const_iterator> >();
+ function_requires< Mutable_IndexedBidirectional1DIteratorConcept<container_model::iterator> >();
+ function_requires< IndexedBidirectional1DIteratorConcept<container_model::const_reverse_iterator> >();
+ function_requires< Mutable_IndexedBidirectional1DIteratorConcept<container_model::reverse_iterator> >();
+ }
+
+ {
+ typedef compressed_vector<T> container_model;
+ function_requires< Mutable_SparseVectorConcept<container_model> >();
+ function_requires< IndexedBidirectional1DIteratorConcept<container_model::const_iterator> >();
+ function_requires< Mutable_IndexedBidirectional1DIteratorConcept<container_model::iterator> >();
+ function_requires< IndexedBidirectional1DIteratorConcept<container_model::const_reverse_iterator> >();
+ function_requires< Mutable_IndexedBidirectional1DIteratorConcept<container_model::reverse_iterator> >();
+ }
+
+ {
+ typedef coordinate_vector<T> container_model;
+ function_requires< Mutable_SparseVectorConcept<container_model> >();
+ function_requires< IndexedBidirectional1DIteratorConcept<container_model::const_iterator> >();
+ function_requires< Mutable_IndexedBidirectional1DIteratorConcept<container_model::iterator> >();
+ function_requires< IndexedBidirectional1DIteratorConcept<container_model::const_reverse_iterator> >();
+ function_requires< Mutable_IndexedBidirectional1DIteratorConcept<container_model::reverse_iterator> >();
+ }
+#endif
+
+ // Matrix
+#if defined (INTERNAL_MATRIX) || defined (INTERNAL_MATRIX_DENSE)
+ {
+ typedef matrix<T> container_model;
+ function_requires< Mutable_MatrixConcept<matrix<T> > >();
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_iterator1, container_model::const_iterator2> >();
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::iterator1, container_model::iterator2> >();
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_reverse_iterator1, container_model::const_reverse_iterator2> >();
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::reverse_iterator1, container_model::reverse_iterator2> >();
+ }
+
+ {
+ typedef vector_of_vector<T> container_model;
+ function_requires< Mutable_MatrixConcept<matrix<T> > >();
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_iterator1, container_model::const_iterator2> >();
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::iterator1, container_model::iterator2> >();
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_reverse_iterator1, container_model::const_reverse_iterator2> >();
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::reverse_iterator1, container_model::reverse_iterator2> >();
+ }
+
+ {
+ typedef zero_matrix<T> container_model;
+ function_requires< Mutable_MatrixConcept<matrix<T> > >();
+ function_requires< IndexedBidirectional2DIteratorConcept<container_model::const_iterator1, container_model::const_iterator2> >();
+ function_requires< IndexedBidirectional2DIteratorConcept<container_model::const_reverse_iterator1, container_model::const_reverse_iterator2> >();
+ }
+
+ {
+ typedef identity_matrix<T> container_model;
+ function_requires< Mutable_MatrixConcept<matrix<T> > >();
+ function_requires< IndexedBidirectional2DIteratorConcept<container_model::const_iterator1, container_model::const_iterator2> >();
+ function_requires< IndexedBidirectional2DIteratorConcept<container_model::const_reverse_iterator1, container_model::const_reverse_iterator2> >();
+ }
+
+ {
+ typedef scalar_matrix<T> container_model;
+ function_requires< Mutable_MatrixConcept<matrix<T> > >();
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_iterator1, container_model::const_iterator2> >();
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_reverse_iterator1, container_model::const_reverse_iterator2> >();
+ }
+
+ {
+ typedef c_matrix<T, 1, 1> container_model;
+ function_requires< Mutable_MatrixConcept<matrix<T> > >();
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_iterator1, container_model::const_iterator2> >();
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::iterator1, container_model::iterator2> >();
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_reverse_iterator1, container_model::const_reverse_iterator2> >();
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::reverse_iterator1, container_model::reverse_iterator2> >();
+ }
+#endif
+
+ // Matrix Proxies
+#if defined (INTERNAL_MATRIX) || defined (INTERNAL_MATRIX_PROXY)
+ {
+ typedef matrix_row<matrix<T> > container_model;
+ function_requires< Mutable_VectorExpressionConcept<container_model> >();
+ function_requires< IndexedRandomAccess1DIteratorConcept<container_model::const_iterator> >();
+ function_requires< Mutable_IndexedRandomAccess1DIteratorConcept<container_model::iterator> >();
+ function_requires< IndexedRandomAccess1DIteratorConcept<container_model::const_reverse_iterator> >();
+ function_requires< Mutable_IndexedRandomAccess1DIteratorConcept<container_model::reverse_iterator> >();
+ }
+
+ {
+ typedef matrix_column<matrix<T> > container_model;
+ function_requires< Mutable_VectorExpressionConcept<container_model> >();
+ function_requires< IndexedRandomAccess1DIteratorConcept<container_model::const_iterator> >();
+ function_requires< Mutable_IndexedRandomAccess1DIteratorConcept<container_model::iterator> >();
+ function_requires< IndexedRandomAccess1DIteratorConcept<container_model::const_reverse_iterator> >();
+ function_requires< Mutable_IndexedRandomAccess1DIteratorConcept<container_model::reverse_iterator> >();
+ }
+
+ {
+ typedef matrix_vector_range<matrix<T> > container_model;
+ function_requires< Mutable_VectorExpressionConcept<container_model> >();
+ function_requires< IndexedRandomAccess1DIteratorConcept<container_model::const_iterator> >();
+ function_requires< Mutable_IndexedRandomAccess1DIteratorConcept<container_model::iterator> >();
+ function_requires< IndexedRandomAccess1DIteratorConcept<container_model::const_reverse_iterator> >();
+ function_requires< Mutable_IndexedRandomAccess1DIteratorConcept<container_model::reverse_iterator> >();
+ }
+
+ {
+ typedef matrix_vector_slice<matrix<T> > container_model;
+ function_requires< Mutable_VectorExpressionConcept<container_model> >();
+ function_requires< IndexedRandomAccess1DIteratorConcept<container_model::const_iterator> >();
+ function_requires< Mutable_IndexedRandomAccess1DIteratorConcept<container_model::iterator> >();
+ function_requires< IndexedRandomAccess1DIteratorConcept<container_model::const_reverse_iterator> >();
+ function_requires< Mutable_IndexedRandomAccess1DIteratorConcept<container_model::reverse_iterator> >();
+ }
+
+ {
+ typedef matrix_vector_indirect<matrix<T> > container_model;
+ function_requires< Mutable_VectorExpressionConcept<container_model> >();
+ function_requires< IndexedRandomAccess1DIteratorConcept<container_model::const_iterator> >();
+ function_requires< Mutable_IndexedRandomAccess1DIteratorConcept<container_model::iterator> >();
+ function_requires< IndexedRandomAccess1DIteratorConcept<container_model::const_reverse_iterator> >();
+ function_requires< Mutable_IndexedRandomAccess1DIteratorConcept<container_model::reverse_iterator> >();
+ }
+
+ {
+ typedef matrix_range<matrix<T> > container_model;
+ function_requires< Mutable_MatrixExpressionConcept<container_model> >();
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_iterator1, container_model::const_iterator2> >();
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::iterator1, container_model::iterator2> >();
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_reverse_iterator1, container_model::const_reverse_iterator2> >();
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::reverse_iterator1, container_model::reverse_iterator2> >();
+ }
+
+ {
+ typedef matrix_slice<matrix<T> > container_model;
+ function_requires< Mutable_MatrixExpressionConcept<container_model> >();
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_iterator1, container_model::const_iterator2> >();
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::iterator1, container_model::iterator2> >();
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_reverse_iterator1, container_model::const_reverse_iterator2> >();
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::reverse_iterator1, container_model::reverse_iterator2> >();
+ }
+
+ {
+ typedef matrix_indirect<matrix<T> > container_model;
+ function_requires< Mutable_MatrixExpressionConcept<container_model> >();
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_iterator1, container_model::const_iterator2> >();
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::iterator1, container_model::iterator2> >();
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_reverse_iterator1, container_model::const_reverse_iterator2> >();
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::reverse_iterator1, container_model::reverse_iterator2> >();
+ }
+#endif
+
+ // Banded Matrix
+#if defined (INTERNAL_SPECIAL) || defined (INTERNAL_BANDED)
+ {
+ typedef banded_matrix<T> container_model;
+ function_requires< Mutable_MatrixConcept<container_model> >();
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_iterator1, container_model::const_iterator2> >();
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::iterator1, container_model::iterator2> >();
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_reverse_iterator1, container_model::const_reverse_iterator2> >();
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::reverse_iterator1, container_model::reverse_iterator2> >();
+ }
+
+ {
+ typedef banded_adaptor<matrix<T> > container_model;
+ function_requires< Mutable_MatrixExpressionConcept<container_model> >();
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_iterator1, container_model::const_iterator2> >();
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::iterator1, container_model::iterator2> >();
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_reverse_iterator1, container_model::const_reverse_iterator2> >();
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::reverse_iterator1, container_model::reverse_iterator2> >();
+ }
+#endif
+
+ // Triangular Matrix
+#if defined (INTERNAL_SPECIAL) || defined (INTERNAL_TRIANGULAR)
+ {
+ typedef triangular_matrix<T> container_model;
+ function_requires< Mutable_MatrixConcept<container_model> >();
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_iterator1, container_model::const_iterator2> >();
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::iterator1, container_model::iterator2> >();
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_reverse_iterator1, container_model::const_reverse_iterator2> >();
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::reverse_iterator1, container_model::reverse_iterator2> >();
+ }
+
+ {
+ typedef triangular_adaptor<matrix<T> > container_model;
+ function_requires< Mutable_MatrixExpressionConcept<container_model> >();
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_iterator1, container_model::const_iterator2> >();
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::iterator1, container_model::iterator2> >();
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_reverse_iterator1, container_model::const_reverse_iterator2> >();
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::reverse_iterator1, container_model::reverse_iterator2> >();
+ }
+#endif
+
+ // Symmetric Matrix
+#if defined (INTERNA_SPECIAL) || defined (INTERNAL_SYMMETRIC)
+ {
+ typedef symmetric_matrix<T> container_model;
+ function_requires< Mutable_MatrixConcept<container_model> >();
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_iterator1, container_model::const_iterator2> >();
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::iterator1, container_model::iterator2> >();
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_reverse_iterator1, container_model::const_reverse_iterator2> >();
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::reverse_iterator1, container_model::reverse_iterator2> >();
+ }
+
+ {
+ typedef banded_adaptor<matrix<T> > container_model;
+#ifndef SKIP_BAD
+ // const_iterator (iterator) constructor is bad
+ function_requires< Mutable_MatrixExpressionConcept<container_model> >();
+#endif
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_iterator1, container_model::const_iterator2> >();
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::iterator1, container_model::iterator2> >();
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_reverse_iterator1, container_model::const_reverse_iterator2> >();
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::reverse_iterator1, container_model::reverse_iterator2> >();
+ }
+#endif
+
+ // Hermitian Matrix
+#if defined (INTERNAL_SPECIAL) || defined (INTERNAL_HERMITIAN)
+ {
+ typedef hermitian_matrix<T> container_model;
+ function_requires< Mutable_MatrixConcept<container_model> >();
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_iterator1, container_model::const_iterator2> >();
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::iterator1, container_model::iterator2> >();
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_reverse_iterator1, container_model::const_reverse_iterator2> >();
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::reverse_iterator1, container_model::reverse_iterator2> >();
+ }
+
+ {
+ typedef hermitian_adaptor<matrix<T> > container_model;
+#ifndef SKIP_BAD
+ // const_iterator (iterator) constructor is bad
+ function_requires< Mutable_MatrixExpressionConcept<container_model> >();
+#endif
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_iterator1, container_model::const_iterator2> >();
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::iterator1, container_model::iterator2> >();
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_reverse_iterator1, container_model::const_reverse_iterator2> >();
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::reverse_iterator1, container_model::reverse_iterator2> >();
+ }
+#endif
+
+ // Sparse Matrix
+#if defined (INTERNAL_SPARSE) || defined (INTERNAL_MATRIX_SPARSE)
+ {
+ typedef mapped_matrix<T> container_model;
+ function_requires< Mutable_SparseMatrixConcept<container_model> >();
+ function_requires< IndexedBidirectional2DIteratorConcept<container_model::const_iterator1, container_model::const_iterator2> >();
+ function_requires< Mutable_IndexedBidirectional2DIteratorConcept<container_model::iterator1, container_model::iterator2> >();
+ function_requires< IndexedBidirectional2DIteratorConcept<container_model::const_reverse_iterator1, container_model::const_reverse_iterator2> >();
+ function_requires< Mutable_IndexedBidirectional2DIteratorConcept<container_model::reverse_iterator1, container_model::reverse_iterator2> >();
+ }
+ {
+ typedef mapped_vector_of_mapped_vector<T> container_model;
+ function_requires< Mutable_SparseMatrixConcept<container_model> >();
+ function_requires< IndexedBidirectional2DIteratorConcept<container_model::const_iterator1, container_model::const_iterator2> >();
+ function_requires< Mutable_IndexedBidirectional2DIteratorConcept<container_model::iterator1, container_model::iterator2> >();
+ function_requires< IndexedBidirectional2DIteratorConcept<container_model::const_reverse_iterator1, container_model::const_reverse_iterator2> >();
+ function_requires< Mutable_IndexedBidirectional2DIteratorConcept<container_model::reverse_iterator1, container_model::reverse_iterator2> >();
+ }
+ {
+ typedef compressed_matrix<T> container_model;
+ function_requires< Mutable_SparseMatrixConcept<container_model> >();
+ function_requires< IndexedBidirectional2DIteratorConcept<container_model::const_iterator1, container_model::const_iterator2> >();
+ function_requires< Mutable_IndexedBidirectional2DIteratorConcept<container_model::iterator1, container_model::iterator2> >();
+ function_requires< IndexedBidirectional2DIteratorConcept<container_model::const_reverse_iterator1, container_model::const_reverse_iterator2> >();
+ function_requires< Mutable_IndexedBidirectional2DIteratorConcept<container_model::reverse_iterator1, container_model::reverse_iterator2> >();
+ }
+ {
+ typedef coordinate_matrix<T> container_model;
+ function_requires< Mutable_SparseMatrixConcept<container_model> >();
+ function_requires< IndexedBidirectional2DIteratorConcept<container_model::const_iterator1, container_model::const_iterator2> >();
+ function_requires< Mutable_IndexedBidirectional2DIteratorConcept<container_model::iterator1, container_model::iterator2> >();
+ function_requires< IndexedBidirectional2DIteratorConcept<container_model::const_reverse_iterator1, container_model::const_reverse_iterator2> >();
+ function_requires< Mutable_IndexedBidirectional2DIteratorConcept<container_model::reverse_iterator1, container_model::reverse_iterator2> >();
+ }
+ {
+ typedef generalized_vector_of_vector<T, row_major, vector< coordinate_vector<T> > > container_model;
+ function_requires< Mutable_SparseMatrixConcept<container_model> >();
+ function_requires< IndexedBidirectional2DIteratorConcept<container_model::const_iterator1, container_model::const_iterator2> >();
+ function_requires< Mutable_IndexedBidirectional2DIteratorConcept<container_model::iterator1, container_model::iterator2> >();
+ function_requires< IndexedBidirectional2DIteratorConcept<container_model::const_reverse_iterator1, container_model::const_reverse_iterator2> >();
+ function_requires< Mutable_IndexedBidirectional2DIteratorConcept<container_model::reverse_iterator1, container_model::reverse_iterator2> >();
+ }
+
+#endif
+
+ // Scalar Expressions
+#if defined (INTERNAL_EXPRESSION) || defined (INTERNAL_VECTOR_EXPRESSION)
+ function_requires< ScalarExpressionConcept<scalar_value<T> > >();
+ function_requires< ScalarExpressionConcept<scalar_reference<T> > >();
+
+ // Vector Expressions
+ {
+ typedef vector_reference<vector<T> > expression_model;
+ function_requires< VectorExpressionConcept<expression_model> >();
+ function_requires< Mutable_VectorExpressionConcept<expression_model> >();
+ function_requires< IndexedRandomAccess1DIteratorConcept<expression_model::const_iterator> >();
+ function_requires< Mutable_IndexedRandomAccess1DIteratorConcept<expression_model::iterator> >();
+ function_requires< IndexedRandomAccess1DIteratorConcept<expression_model::const_reverse_iterator> >();
+ function_requires< Mutable_IndexedRandomAccess1DIteratorConcept<expression_model::reverse_iterator> >();
+ }
+
+ {
+ typedef vector_unary<vector<T>, scalar_identity<T> > expression_model;
+ function_requires< VectorExpressionConcept<expression_model> >();
+ function_requires< IndexedRandomAccess1DIteratorConcept<expression_model::const_iterator> >();
+ function_requires< IndexedRandomAccess1DIteratorConcept<expression_model::const_reverse_iterator> >();
+ }
+
+ {
+ typedef vector_binary<vector<T>, vector<T>, scalar_plus<T, T> > expression_model;
+ function_requires< VectorExpressionConcept<expression_model> >();
+ function_requires< IndexedRandomAccess1DIteratorConcept<expression_model::const_iterator> >();
+ function_requires< IndexedRandomAccess1DIteratorConcept<expression_model::const_reverse_iterator> >();
+ }
+
+ {
+ typedef vector_binary_scalar1<T, vector<T>, scalar_multiplies<T, T> > expression_model;
+ function_requires< VectorExpressionConcept<expression_model> >();
+ function_requires< IndexedRandomAccess1DIteratorConcept<expression_model::const_iterator> >();
+ function_requires< IndexedRandomAccess1DIteratorConcept<expression_model::const_reverse_iterator> >();
+ }
+
+ {
+ typedef vector_binary_scalar2<vector<T>, scalar_value<T>, scalar_multiplies<T, T> > expression_model;
+ function_requires< VectorExpressionConcept<expression_model> >();
+ function_requires< IndexedRandomAccess1DIteratorConcept<expression_model::const_iterator> >();
+ function_requires< IndexedRandomAccess1DIteratorConcept<expression_model::const_reverse_iterator> >();
+ }
+
+ {
+ typedef vector_binary_scalar1<scalar_value<T>, vector<T>, scalar_multiplies<T, T> > expression_model;
+ function_requires< VectorExpressionConcept<expression_model> >();
+ function_requires< IndexedRandomAccess1DIteratorConcept<expression_model::const_iterator> >();
+ function_requires< IndexedRandomAccess1DIteratorConcept<expression_model::const_reverse_iterator> >();
+ }
+
+ {
+ typedef vector_binary_scalar2<vector<T>, scalar_value<T>, scalar_multiplies<T, T> > expression_model;
+ function_requires< VectorExpressionConcept<expression_model> >();
+ function_requires< IndexedRandomAccess1DIteratorConcept<expression_model::const_iterator> >();
+ function_requires< IndexedRandomAccess1DIteratorConcept<expression_model::const_reverse_iterator> >();
+ }
+
+ function_requires< ScalarExpressionConcept<vector_scalar_unary<vector<T>, vector_sum<T> > > >();
+ function_requires< ScalarExpressionConcept<vector_scalar_unary<vector<T>, vector_norm_1<T> > > >();
+ function_requires< ScalarExpressionConcept<vector_scalar_unary<vector<T>, vector_norm_2<T> > > >();
+ function_requires< ScalarExpressionConcept<vector_scalar_unary<vector<T>, vector_norm_inf<T> > > >();
+
+ function_requires< ScalarExpressionConcept<vector_scalar_binary<vector<T>, vector<T>, vector_inner_prod<T, T, T> > > >();
+#endif
+
+ // Matrix Expressions
+#if defined (INTERNAL_EXPRESSION) || defined (INTERNAL_MATRIX_EXPRESSION)
+ {
+ typedef matrix_reference<matrix<T> > expression_model;
+ function_requires< MatrixExpressionConcept<expression_model> >();
+ function_requires< Mutable_MatrixExpressionConcept<expression_model> >();
+ function_requires< IndexedRandomAccess2DIteratorConcept<expression_model::const_iterator1, expression_model::const_iterator2> >();
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<expression_model::iterator1, expression_model::iterator2> >();
+ function_requires< IndexedRandomAccess2DIteratorConcept<expression_model::const_reverse_iterator1, expression_model::const_reverse_iterator2> >();
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<expression_model::reverse_iterator1, expression_model::reverse_iterator2> >();
+ }
+
+ {
+ typedef vector_matrix_binary<vector<T>, vector<T>, scalar_multiplies<T, T> > expression_model;
+ function_requires< MatrixExpressionConcept<expression_model> >();
+ function_requires< IndexedRandomAccess2DIteratorConcept<expression_model::const_iterator1, expression_model::const_iterator2> >();
+ function_requires< IndexedRandomAccess2DIteratorConcept<expression_model::const_reverse_iterator1, expression_model::const_reverse_iterator2> >();
+ }
+
+ {
+ typedef matrix_unary1<matrix<T>, scalar_identity<T> > expression_model;
+ function_requires< MatrixExpressionConcept<expression_model> >();
+ function_requires< IndexedRandomAccess2DIteratorConcept<expression_model::const_iterator1, expression_model::const_iterator2> >();
+ function_requires< IndexedRandomAccess2DIteratorConcept<expression_model::const_reverse_iterator1, expression_model::const_reverse_iterator2> >();
+ }
+
+ {
+ typedef matrix_unary2<matrix<T>, scalar_identity<T> > expression_model;
+ function_requires< MatrixExpressionConcept<expression_model> >();
+ function_requires< IndexedRandomAccess2DIteratorConcept<expression_model::const_iterator1, expression_model::const_iterator2> >();
+ function_requires< IndexedRandomAccess2DIteratorConcept<expression_model::const_reverse_iterator1, expression_model::const_reverse_iterator2> >();
+ }
+
+ {
+ typedef matrix_binary<matrix<T>, matrix<T>, scalar_plus<T, T> > expression_model;
+ function_requires< MatrixExpressionConcept<expression_model> >();
+ function_requires< IndexedRandomAccess2DIteratorConcept<expression_model::const_iterator1, expression_model::const_iterator2> >();
+ function_requires< IndexedRandomAccess2DIteratorConcept<expression_model::const_reverse_iterator1, expression_model::const_reverse_iterator2> >();
+ }
+
+ {
+ typedef matrix_binary_scalar1<T, matrix<T>, scalar_multiplies<T, T> > expression_model;
+ function_requires< MatrixExpressionConcept<expression_model> >();
+ function_requires< IndexedRandomAccess2DIteratorConcept<expression_model::const_iterator1, expression_model::const_iterator2> >();
+ function_requires< IndexedRandomAccess2DIteratorConcept<expression_model::const_reverse_iterator1, expression_model::const_reverse_iterator2> >();
+ }
+
+ {
+ typedef matrix_binary_scalar2<matrix<T>, T, scalar_multiplies<T, T> > expression_model;
+ function_requires< MatrixExpressionConcept<expression_model> >();
+ function_requires< IndexedRandomAccess2DIteratorConcept<expression_model::const_iterator1, expression_model::const_iterator2> >();
+ function_requires< IndexedRandomAccess2DIteratorConcept<expression_model::const_reverse_iterator1, expression_model::const_reverse_iterator2> >();
+ }
+
+ {
+ typedef matrix_binary_scalar1<scalar_value<T>, matrix<T>, scalar_multiplies<T, T> > expression_model;
+ function_requires< MatrixExpressionConcept<expression_model> >();
+ function_requires< IndexedRandomAccess2DIteratorConcept<expression_model::const_iterator1, expression_model::const_iterator2> >();
+ function_requires< IndexedRandomAccess2DIteratorConcept<expression_model::const_reverse_iterator1, expression_model::const_reverse_iterator2> >();
+ }
+
+ {
+ typedef matrix_binary_scalar2<matrix<T>, scalar_value<T>, scalar_multiplies<T, T> > expression_model;
+ function_requires< MatrixExpressionConcept<expression_model> >();
+ function_requires< IndexedRandomAccess2DIteratorConcept<expression_model::const_iterator1, expression_model::const_iterator2> >();
+ function_requires< IndexedRandomAccess2DIteratorConcept<expression_model::const_reverse_iterator1, expression_model::const_reverse_iterator2> >();
+ }
+
+ {
+ typedef matrix_vector_binary1<matrix<T>, vector<T>, matrix_vector_prod1<T, T, T> > expression_model;
+ function_requires< VectorExpressionConcept<expression_model> >();
+ function_requires< IndexedRandomAccess1DIteratorConcept<expression_model::const_iterator> >();
+ function_requires< IndexedRandomAccess1DIteratorConcept<expression_model::const_reverse_iterator> >();
+ }
+
+ {
+ typedef matrix_vector_binary2<vector<T>, matrix<T>, matrix_vector_prod2<T, T, T> > expression_model;
+ function_requires< VectorExpressionConcept<expression_model> >();
+ function_requires< IndexedRandomAccess1DIteratorConcept<expression_model::const_iterator> >();
+ function_requires< IndexedRandomAccess1DIteratorConcept<expression_model::const_reverse_iterator> >();
+ }
+
+ {
+ typedef matrix_matrix_binary<matrix<T>, matrix<T>, matrix_matrix_prod<T, T, T> > expression_model;
+ function_requires< MatrixExpressionConcept<expression_model> >();
+ function_requires< IndexedRandomAccess2DIteratorConcept<expression_model::const_iterator1, expression_model::const_iterator2> >();
+ function_requires< IndexedRandomAccess2DIteratorConcept<expression_model::const_reverse_iterator1, expression_model::const_reverse_iterator2> >();
+ }
+
+ function_requires< ScalarExpressionConcept<matrix_scalar_unary<matrix<T>, matrix_norm_1<T> > > >();
+ function_requires< ScalarExpressionConcept<matrix_scalar_unary<matrix<T>, matrix_norm_frobenius<T> > > >();
+ function_requires< ScalarExpressionConcept<matrix_scalar_unary<matrix<T>, matrix_norm_inf<T> > > >();
+#endif
+
+#ifdef EXTERNAL
+ function_requires< AdditiveAbelianGroupConcept<float> >();
+ function_requires< CommutativeRingWithIdentityConcept<float> >();
+ function_requires< FieldConcept<float> >();
+ function_requires< VectorSpaceConcept<float, vector<float> > >();
+ function_requires< Prod_RingWithIdentityConcept<matrix<float> > >();
+ function_requires< VectorSpaceConcept<float, matrix<float> > >();
+ function_requires< LinearOperatorConcept<float, vector<float>, matrix<float> > >();
+
+ function_requires< AdditiveAbelianGroupConcept<std::complex<float> > >();
+ function_requires< CommutativeRingWithIdentityConcept<std::complex<float> > >();
+ function_requires< FieldConcept<std::complex<float> > >();
+ function_requires< VectorSpaceConcept<std::complex<float>, vector<std::complex<float> > > >();
+ function_requires< Prod_RingWithIdentityConcept<matrix<std::complex<float> > > >();
+ function_requires< VectorSpaceConcept<std::complex<float>, matrix<std::complex<float> > > >();
+ function_requires< LinearOperatorConcept<std::complex<float>, vector<std::complex<float> >, matrix<std::complex<float> > > >();
+#endif
+ }
+
+}}}
+
+#endif
diff --git a/boost/boost/numeric/ublas/detail/config.hpp b/boost/boost/numeric/ublas/detail/config.hpp
new file mode 100644
index 00000000000..37bf297eddc
--- /dev/null
+++ b/boost/boost/numeric/ublas/detail/config.hpp
@@ -0,0 +1,294 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without fee,
+// provided that the above copyright notice appear in all copies and
+// that both that copyright notice and this permission notice appear
+// in supporting documentation. The authors make no representations
+// about the suitability of this software for any purpose.
+// It is provided "as is" without express or implied warranty.
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#ifndef _BOOST_UBLAS_CONFIG_
+#define _BOOST_UBLAS_CONFIG_
+
+#include <cassert>
+#include <cstddef>
+#include <algorithm>
+#include <limits>
+
+#include <boost/config.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/noncopyable.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+
+
+// Microsoft Visual C++
+#if defined (BOOST_MSVC) && ! defined (BOOST_STRICT_CONFIG)
+
+// Version 6.0 and 7.0
+#if BOOST_MSVC <= 1300
+#define BOOST_UBLAS_UNSUPPORTED_COMPILER 1
+#endif
+
+// Version 7.1
+#if BOOST_MSVC == 1310
+// One of these workarounds is needed for MSVC 7.1 AFAIK
+// (thanks to John Maddock and Martin Lauer).
+#if !(defined(BOOST_UBLAS_NO_NESTED_CLASS_RELATION) || defined(BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION))
+#define BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+#endif
+
+#endif
+
+#endif
+
+
+// GNU Compiler Collection
+#if defined (__GNUC__) && ! defined (BOOST_STRICT_CONFIG)
+
+#if __GNUC__ >= 4 || (__GNUC__ >= 3 && __GNUC_MINOR__ >= 4)
+// Specified by ABI definition see GCC bug id 9982
+#define BOOST_UBLAS_USEFUL_ARRAY_PLACEMENT_NEW
+#endif
+
+#if __GNUC__ < 3
+#define BOOST_UBLAS_UNSUPPORTED_COMPILER 1
+#endif
+
+#endif
+
+
+// Intel Compiler
+#if defined (BOOST_INTEL) && ! defined (BOOST_STRICT_CONFIG)
+
+#if defined (BOOST_INTEL_LINUX) && (BOOST_INTEL_LINUX >= 800)
+// By inspection of compiler results
+#define BOOST_UBLAS_USEFUL_ARRAY_PLACEMENT_NEW
+#endif
+
+#if (BOOST_INTEL < 700)
+#define BOOST_UBLAS_UNSUPPORTED_COMPILER 1
+#endif
+
+// Define swap for index_pair and triple.
+#if (BOOST_INTEL <= 800)
+namespace boost { namespace numeric { namespace ublas {
+ template<class C, class IC>
+ class indexed_iterator;
+
+ template<class V>
+ class index_pair;
+ template<class M>
+ class index_triple;
+}}}
+
+namespace std {
+ template<class V>
+ inline
+ void swap (boost::numeric::ublas::index_pair<V> i1, boost::numeric::ublas::index_pair<V> i2) {
+ i1.swap (i2);
+ }
+ template<class M>
+ inline
+ void swap (boost::numeric::ublas::index_triple<M> i1, boost::numeric::ublas::index_triple<M> i2) {
+ i1.swap (i2);
+ }
+ // iter_swap also needed for ICC on Itanium?
+ template<class C, class IC>
+ inline
+ void iter_swap (boost::numeric::ublas::indexed_iterator<C, IC> it1,
+ boost::numeric::ublas::indexed_iterator<C, IC> it2) {
+ swap (*it1, *it2);
+ }
+}
+#endif
+
+#endif
+
+
+// Comeau compiler - thanks to Kresimir Fresl
+#if defined (__COMO__) && ! defined (BOOST_STRICT_CONFIG)
+
+// Missing std::abs overloads for float types in <cmath> are in <cstdlib>
+#if defined(__LIBCOMO__) && (__LIBCOMO_VERSION__ <= 31)
+#include <cstdlib>
+#endif
+
+#endif
+
+
+// HP aCC C++ compiler
+#if defined (__HP_aCC) && ! defined (BOOST_STRICT_CONFIG)
+# if (__HP_aCC >= 60000 )
+# define BOOST_UBLAS_USEFUL_ARRAY_PLACEMENT_NEW
+#endif
+#endif
+
+
+// SGI MIPSpro C++ compiler
+#if defined (__sgi) && ! defined (BOOST_STRICT_CONFIG)
+
+// Missing std::abs overloads for float types in <cmath> are in <cstdlib>
+// This test should be library version specific.
+#include <cstdlib>
+
+#if __COMPILER_VERSION >=650
+// By inspection of compiler results - thanks to Peter Schmitteckert
+#define BOOST_UBLAS_USEFUL_ARRAY_PLACEMENT_NEW
+#endif
+
+#endif
+
+
+// Metrowerks Codewarrior
+#if defined (__MWERKS__) && ! defined (BOOST_STRICT_CONFIG)
+
+// 8.x
+#if __MWERKS__ <= 0x3003
+#define BOOST_UBLAS_UNSUPPORTED_COMPILER 1
+#endif
+
+#endif
+
+
+// Detect other compilers with serious defects - override by defineing BOOST_UBLAS_UNSUPPORTED_COMPILER=0
+#ifndef BOOST_UBLAS_UNSUPPORTED_COMPILER
+#if defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) || defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) || defined(BOOST_NO_SFINAE) || defined(BOOST_NO_STDC_NAMESPACE)
+#define BOOST_UBLAS_UNSUPPORTED_COMPILER 1
+#endif
+#endif
+
+// Cannot continue with an unsupported compiler
+#if defined(BOOST_UBLAS_UNSUPPORTED_COMPILER) && (BOOST_UBLAS_UNSUPPORTED_COMPILER != 0)
+#error Your compiler is unsupported by this verions of uBLAS. Boost 1.32.0 includes uBLAS with support for many old compilers.
+#endif
+
+
+
+// Enable performance options in RELEASE mode
+#ifdef NDEBUG
+
+#ifndef BOOST_UBLAS_INLINE
+#define BOOST_UBLAS_INLINE inline
+#endif
+
+// Do not check sizes!
+#define BOOST_UBLAS_USE_FAST_SAME
+
+// NO runtime error checks with BOOST_UBLAS_CHECK macro
+#ifndef BOOST_UBLAS_CHECK_ENABLE
+#define BOOST_UBLAS_CHECK_ENABLE 0
+#endif
+
+// NO type compatibility numeric checks
+#ifndef BOOST_UBLAS_TYPE_CHECK
+#define BOOST_UBLAS_TYPE_CHECK 0
+#endif
+
+
+// Disable performance options in DEBUG mode
+#else
+
+#ifndef BOOST_UBLAS_INLINE
+#define BOOST_UBLAS_INLINE
+#endif
+
+// Enable runtime error checks with BOOST_UBLAS_CHECK macro. Check bounds etc
+#ifndef BOOST_UBLAS_CHECK_ENABLE
+#define BOOST_UBLAS_CHECK_ENABLE 1
+#endif
+
+// Type compatibiltity numeric checks
+#ifndef BOOST_UBLAS_TYPE_CHECK
+#define BOOST_UBLAS_TYPE_CHECK 1
+#endif
+
+#endif
+
+
+/*
+ * Type compatibility checks
+ * Control type compatibility numeric runtime checks for non dense matrices.
+ * Require additional storage and complexity
+ */
+#if BOOST_UBLAS_TYPE_CHECK
+template <class Dummy>
+struct disable_type_check
+{
+ static bool value;
+};
+template <class Dummy>
+bool disable_type_check<Dummy>::value = false;
+#endif
+#ifndef BOOST_UBLAS_TYPE_CHECK_EPSILON
+#define BOOST_UBLAS_TYPE_CHECK_EPSILON (type_traits<real_type>::type_sqrt (std::numeric_limits<real_type>::epsilon ()))
+#endif
+#ifndef BOOST_UBLAS_TYPE_CHECK_MIN
+#define BOOST_UBLAS_TYPE_CHECK_MIN (type_traits<real_type>::type_sqrt ( (std::numeric_limits<real_type>::min) ()))
+#endif
+
+
+/*
+ * General Configuration
+ */
+
+// Proxy shortcuts overload the alreadly heavily over used operator ()
+//#define BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+
+// In order to simplify debugging is is possible to simplify expression template
+// so they are restricted to a single operation
+// #define BOOST_UBLAS_SIMPLE_ET_DEBUG
+
+// Use invariant hoisting.
+// #define BOOST_UBLAS_USE_INVARIANT_HOISTING
+
+// Use Duff's device in element access loops
+// #define BOOST_UBLAS_USE_DUFF_DEVICE
+
+// Choose evaluation method for dense vectors and matrices
+#if !(defined(BOOST_UBLAS_USE_INDEXING) || defined(BOOST_UBLAS_USE_ITERATING))
+#define BOOST_UBLAS_USE_INDEXING
+#endif
+// #define BOOST_UBLAS_ITERATOR_THRESHOLD 0
+
+// Use indexed iterators - unsupported implementation experiment
+// #define BOOST_UBLAS_USE_INDEXED_ITERATOR
+
+// Alignment of bounded_array type
+#ifndef BOOST_UBLAS_BOUNDED_ARRAY_ALIGN
+#define BOOST_UBLAS_BOUNDED_ARRAY_ALIGN
+#endif
+
+// Enable different sparse element proxies
+#ifndef BOOST_UBLAS_NO_ELEMENT_PROXIES
+// Sparse proxies prevent reference invalidation problems in expressions such as:
+// a [1] = a [0] = 1 Thanks to Marc Duflot for spotting this.
+// #define BOOST_UBLAS_STRICT_MAP_ARRAY
+#define BOOST_UBLAS_STRICT_VECTOR_SPARSE
+#define BOOST_UBLAS_STRICT_MATRIX_SPARSE
+// Hermitian matrices use element proxies to allow assignment to conjugate triangle
+#define BOOST_UBLAS_STRICT_HERMITIAN
+#endif
+
+// Define to configure special settings for reference returning members
+// #define BOOST_UBLAS_REFERENCE_CONST_MEMBER
+// #define BOOST_UBLAS_PROXY_CONST_MEMBER
+
+
+// Include type declerations and functions
+#include <boost/numeric/ublas/fwd.hpp>
+#include <boost/numeric/ublas/detail/definitions.hpp>
+
+
+#endif
diff --git a/boost/boost/numeric/ublas/detail/definitions.hpp b/boost/boost/numeric/ublas/detail/definitions.hpp
new file mode 100644
index 00000000000..7a978e7ea5a
--- /dev/null
+++ b/boost/boost/numeric/ublas/detail/definitions.hpp
@@ -0,0 +1,216 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without fee,
+// provided that the above copyright notice appear in all copies and
+// that both that copyright notice and this permission notice appear
+// in supporting documentation. The authors make no representations
+// about the suitability of this software for any purpose.
+// It is provided "as is" without express or implied warranty.
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#ifndef _BOOST_UBLAS_DEFINITIONS_
+#define _BOOST_UBLAS_DEFINITIONS_
+
+
+namespace boost { namespace numeric { namespace ublas {
+
+ namespace detail {
+ /* Borrowed from boost/concept_checks.hpp
+ "inline" is used for ignore_unused_variable_warning()
+ to make sure there is no overhead with g++.
+ */
+ template <class T> inline
+ void ignore_unused_variable_warning(const T&) {}
+ } // namespace detail
+
+ // Borrowed from Dave Abraham's noncopyable.
+ // I believe this should be part of utility.hpp one day...
+ namespace nonassignable_ // protection from unintended ADL
+ {
+ class nonassignable {
+ protected:
+ nonassignable () {}
+ ~nonassignable () {}
+ private: // emphasize the following members are private
+ const nonassignable& operator= (const nonassignable &);
+ }; // nonassignable
+ }
+ typedef nonassignable_::nonassignable nonassignable;
+
+
+ // Assignment proxy.
+ // Provides temporary free assigment when LHS has no alias on RHS
+ template<class C>
+ class noalias_proxy:
+ private nonassignable {
+ public:
+ typedef typename C::closure_type closure_type;
+
+ BOOST_UBLAS_INLINE
+ noalias_proxy (C& lval):
+ nonassignable (), lval_ (lval) {}
+ BOOST_UBLAS_INLINE
+ noalias_proxy (const noalias_proxy& p):
+ nonassignable (), lval_ (p.lval_) {}
+
+ template <class E>
+ BOOST_UBLAS_INLINE
+ closure_type &operator= (const E& e) {
+ lval_.assign (e);
+ return lval_;
+ }
+
+ template <class E>
+ BOOST_UBLAS_INLINE
+ closure_type &operator+= (const E& e) {
+ lval_.plus_assign (e);
+ return lval_;
+ }
+
+ template <class E>
+ BOOST_UBLAS_INLINE
+ closure_type &operator-= (const E& e) {
+ lval_.minus_assign (e);
+ return lval_;
+ }
+
+ private:
+ closure_type lval_;
+ };
+
+ // Improve syntax of effcient assignment where no aliases of LHS appear on the RHS
+ // noalias(lhs) = rhs_expression
+ template <class C>
+ BOOST_UBLAS_INLINE
+ noalias_proxy<C> noalias (C& lvalue) {
+ return noalias_proxy<C> (lvalue);
+ }
+ template <class C>
+ BOOST_UBLAS_INLINE
+ noalias_proxy<const C> noalias (const C& lvalue) {
+ return noalias_proxy<const C> (lvalue);
+ }
+
+ // Possible future compatible syntax where lvalue possible has an unsafe alias on the RHS
+ // safe(lhs) = rhs_expression
+ template <class C>
+ BOOST_UBLAS_INLINE
+ C& safe (C& lvalue) {
+ return lvalue;
+ }
+ template <class C>
+ BOOST_UBLAS_INLINE
+ const C& safe (const C& lvalue) {
+ return lvalue;
+ }
+
+
+ // Dimension accessors
+ namespace dimension {
+
+ // Generic accessors
+ template<unsigned dimension>
+ struct dimension_properties {};
+
+ template<>
+ struct dimension_properties<1> {
+ template <class E>
+ BOOST_UBLAS_INLINE static
+ typename E::size_type size (const vector_expression<E> &e) {
+ return e ().size ();
+ }
+ template <class E>
+ BOOST_UBLAS_INLINE static
+ typename E::size_type size (const matrix_expression<E> &e) {
+ return e ().size1 ();
+ }
+ // Note: Index functions cannot deduce dependant template parameter V or M from i
+ template <class V>
+ BOOST_UBLAS_INLINE static
+ typename V::size_type index (const typename V::iterator &i) {
+ return i.index ();
+ }
+ template <class M>
+ BOOST_UBLAS_INLINE static
+ typename M::size_type index (const typename M::iterator1 &i) {
+ return i.index1 ();
+ }
+ template <class M>
+ BOOST_UBLAS_INLINE static
+ typename M::size_type index (const typename M::iterator2 &i) {
+ return i.index1 ();
+ }
+ };
+ template<>
+ struct dimension_properties<2> {
+ template <class E>
+ BOOST_UBLAS_INLINE static
+ typename E::size_type size (const vector_expression<E> &) {
+ return 1;
+ }
+ template <class E>
+ BOOST_UBLAS_INLINE static
+ typename E::size_type size (const matrix_expression<E> &e) {
+ return e ().size2 ();
+ }
+ template <class V>
+ BOOST_UBLAS_INLINE static
+ typename V::size_type index (const typename V::iterator &) {
+ return 1;
+ }
+ template <class M>
+ BOOST_UBLAS_INLINE static
+ typename M::size_type index (const typename M::iterator1 &i) {
+ return i.index2 ();
+ }
+ template <class M>
+ BOOST_UBLAS_INLINE static
+ typename M::size_type index (const typename M::iterator2 &i) {
+ return i.index2 ();
+ }
+ };
+
+ template<unsigned dimension, class E>
+ BOOST_UBLAS_INLINE
+ typename E::size_type size (const E& e) {
+ return dimension_properties<dimension>::size (e);
+ }
+
+ template<unsigned dimension, class I>
+ BOOST_UBLAS_INLINE
+ typename I::container_type::size_type
+ index (const I& i) {
+ typedef typename I::container_type container_type;
+ return dimension_properties<dimension>::template index<container_type> (i);
+ }
+
+
+ // Named accessors - just syntactic sugar
+ template<class V>
+ typename V::size_type num_elements (const V &v) {
+ return v.size ();
+ }
+ template<class M>
+ typename M::size_type num_rows (const M &m) {
+ return m.size1 ();
+ }
+ template<class M>
+ typename M::size_type num_columns (const M &m) {
+ return m.size2 ();
+ }
+ template<class MV>
+ typename MV::size_type num_non_zeros (const MV &mv) {
+ return mv.non_zeros ();
+ }
+ }
+
+
+}}}
+
+#endif
diff --git a/boost/boost/numeric/ublas/detail/documentation.hpp b/boost/boost/numeric/ublas/detail/documentation.hpp
new file mode 100644
index 00000000000..6c91e328214
--- /dev/null
+++ b/boost/boost/numeric/ublas/detail/documentation.hpp
@@ -0,0 +1,37 @@
+//
+// Copyright (c) 2000-2004
+// Joerg Walter, Mathias Koch and uBLAS developers
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without fee,
+// provided that the above copyright notice appear in all copies and
+// that both that copyright notice and this permission notice appear
+// in supporting documentation. The authors make no representations
+// about the suitability of this software for any purpose.
+// It is provided "as is" without express or implied warranty.
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+// this file should not contain any code, but the documentation
+// global to all files
+
+/** \namespace boost::numeric::ublas
+ \brief contains all important classes and functions of uBLAS
+
+ all ublas definitions ...
+ \todo expand this section
+ */
+
+/** \defgroup blas1 Level 1 BLAS
+ \brief level 1 basic linear algebra subroutines
+*/
+
+/** \defgroup blas2 Level 2 BLAS
+ \brief level 2 basic linear algebra subroutines
+*/
+
+/** \defgroup blas3 Level 3 BLAS
+ \brief level 3 basic linear algebra subroutines
+*/
diff --git a/boost/boost/numeric/ublas/detail/duff.hpp b/boost/boost/numeric/ublas/detail/duff.hpp
new file mode 100644
index 00000000000..bce971f70f7
--- /dev/null
+++ b/boost/boost/numeric/ublas/detail/duff.hpp
@@ -0,0 +1,60 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without fee,
+// provided that the above copyright notice appear in all copies and
+// that both that copyright notice and this permission notice appear
+// in supporting documentation. The authors make no representations
+// about the suitability of this software for any purpose.
+// It is provided "as is" without express or implied warranty.
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#ifndef _BOOST_UBLAS_DUFF_
+#define _BOOST_UBLAS_DUFF_
+
+#define DD_SWITCH(n, d, r, expr) \
+ { \
+ unsigned r = ((n) + (d) - 1) / (d); \
+ switch ((n) % (d)) { \
+ case 0: do { expr;
+#define DD_CASE_I(i, expr) \
+ case (i): expr;
+#define DD_WHILE(r) \
+ } while (-- (r) > 0); \
+ } \
+ }
+
+#define DD_1T(n, d, r, expr) \
+ DD_WHILE(r)
+#define DD_2T(n, d, r, expr) \
+ DD_CASE_I(1, expr) \
+ DD_1T(n, d, r, expr)
+#define DD_3T(n, d, r, expr) \
+ DD_CASE_I(2, expr) \
+ DD_2T(n, d, r, expr)
+#define DD_4T(n, d, r, expr) \
+ DD_CASE_I(3, expr) \
+ DD_3T(n, d, r, expr)
+#define DD_5T(n, d, r, expr) \
+ DD_CASE_I(4, expr) \
+ DD_4T(n, d, r, expr)
+#define DD_6T(n, d, r, expr) \
+ DD_CASE_I(5, expr) \
+ DD_5T(n, d, r, expr)
+#define DD_7T(n, d, r, expr) \
+ DD_CASE_I(6, expr) \
+ DD_6T(n, d, r, expr)
+#define DD_8T(n, d, r, expr) \
+ DD_CASE_I(7, expr) \
+ DD_7T(n, d, r, expr)
+
+#define DD(n, d, r, expr) \
+ DD_SWITCH(n, d, r, expr) \
+ DD_##d##T(n, d, r, expr)
+
+#endif
diff --git a/boost/boost/numeric/ublas/detail/iterator.hpp b/boost/boost/numeric/ublas/detail/iterator.hpp
new file mode 100644
index 00000000000..8fdbffd3eab
--- /dev/null
+++ b/boost/boost/numeric/ublas/detail/iterator.hpp
@@ -0,0 +1,1440 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without fee,
+// provided that the above copyright notice appear in all copies and
+// that both that copyright notice and this permission notice appear
+// in supporting documentation. The authors make no representations
+// about the suitability of this software for any purpose.
+// It is provided "as is" without express or implied warranty.
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#ifndef _BOOST_UBLAS_ITERATOR_
+#define _BOOST_UBLAS_ITERATOR_
+
+#include <boost/numeric/ublas/exception.hpp>
+#include <iterator>
+
+
+namespace boost { namespace numeric { namespace ublas {
+
+ /** \brief Base class of all proxy classes that contain
+ * a (redirectable) reference to an immutable object.
+ *
+ * \param C the type of the container referred to
+ */
+ template<class C>
+ class container_const_reference:
+ private nonassignable {
+ public:
+ typedef C container_type;
+
+ BOOST_UBLAS_INLINE
+ container_const_reference ():
+ c_ (0) {}
+ BOOST_UBLAS_INLINE
+ container_const_reference (const container_type &c):
+ c_ (&c) {}
+
+ BOOST_UBLAS_INLINE
+ const container_type &operator () () const {
+ return *c_;
+ }
+
+ BOOST_UBLAS_INLINE
+ container_const_reference &assign (const container_type *c) {
+ c_ = c;
+ return *this;
+ }
+
+ // Closure comparison
+ BOOST_UBLAS_INLINE
+ bool same_closure (const container_const_reference &cr) const {
+ return c_ == cr.c_;
+ }
+
+ private:
+ const container_type *c_;
+ };
+
+ /** \brief Base class of all proxy classes that contain
+ * a (redirectable) reference to a mutable object.
+ *
+ * \param C the type of the container referred to
+ */
+ template<class C>
+ class container_reference:
+ private nonassignable {
+ public:
+ typedef C container_type;
+
+ BOOST_UBLAS_INLINE
+ container_reference ():
+ c_ (0) {}
+ BOOST_UBLAS_INLINE
+ container_reference (container_type &c):
+ c_ (&c) {}
+
+ BOOST_UBLAS_INLINE
+ container_type &operator () () const {
+ return *c_;
+ }
+
+ BOOST_UBLAS_INLINE
+ container_reference &assign (container_type *c) {
+ c_ = c;
+ return *this;
+ }
+
+ // Closure comparison
+ BOOST_UBLAS_INLINE
+ bool same_closure (const container_reference &cr) const {
+ return c_ == cr.c_;
+ }
+
+ private:
+ container_type *c_;
+ };
+
+ /** \brief Base class of all forward iterators.
+ *
+ * \param IC the iterator category
+ * \param I the derived iterator type
+ * \param T the value type
+ *
+ * The forward iterator can only proceed in one direction
+ * via the post increment operator.
+ */
+ template<class IC, class I, class T>
+ struct forward_iterator_base:
+ public std::iterator<IC, T> {
+ typedef I derived_iterator_type;
+ typedef T derived_value_type;
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ derived_iterator_type operator ++ (int) {
+ derived_iterator_type &d (*static_cast<const derived_iterator_type *> (this));
+ derived_iterator_type tmp (d);
+ ++ d;
+ return tmp;
+ }
+ BOOST_UBLAS_INLINE
+ friend derived_iterator_type operator ++ (derived_iterator_type &d, int) {
+ derived_iterator_type tmp (d);
+ ++ d;
+ return tmp;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator != (const derived_iterator_type &it) const {
+ const derived_iterator_type *d = static_cast<const derived_iterator_type *> (this);
+ return ! (*d == it);
+ }
+ };
+
+ /** \brief Base class of all bidirectional iterators.
+ *
+ * \param IC the iterator category
+ * \param I the derived iterator type
+ * \param T the value type
+ *
+ * The bidirectional iterator can proceed in both directions
+ * via the post increment and post decrement operator.
+ */
+ template<class IC, class I, class T>
+ struct bidirectional_iterator_base:
+ public std::iterator<IC, T> {
+ typedef I derived_iterator_type;
+ typedef T derived_value_type;
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ derived_iterator_type operator ++ (int) {
+ derived_iterator_type &d (*static_cast<const derived_iterator_type *> (this));
+ derived_iterator_type tmp (d);
+ ++ d;
+ return tmp;
+ }
+ BOOST_UBLAS_INLINE
+ friend derived_iterator_type operator ++ (derived_iterator_type &d, int) {
+ derived_iterator_type tmp (d);
+ ++ d;
+ return tmp;
+ }
+ BOOST_UBLAS_INLINE
+ derived_iterator_type operator -- (int) {
+ derived_iterator_type &d (*static_cast<const derived_iterator_type *> (this));
+ derived_iterator_type tmp (d);
+ -- d;
+ return tmp;
+ }
+ BOOST_UBLAS_INLINE
+ friend derived_iterator_type operator -- (derived_iterator_type &d, int) {
+ derived_iterator_type tmp (d);
+ -- d;
+ return tmp;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator != (const derived_iterator_type &it) const {
+ const derived_iterator_type *d = static_cast<const derived_iterator_type *> (this);
+ return ! (*d == it);
+ }
+ };
+
+ /** \brief Base class of all random access iterators.
+ *
+ * \param IC the iterator category
+ * \param I the derived iterator type
+ * \param T the value type
+ * \param D the difference type, default: std::ptrdiff_t
+ *
+ * The random access iterator can proceed in both directions
+ * via the post increment/decrement operator or in larger steps
+ * via the +, - and +=, -= operators. The random access iterator
+ * is LessThan Comparable.
+ */
+ template<class IC, class I, class T, class D = std::ptrdiff_t>
+ // ISSUE the default here seems rather dangerous as it can easlly be (silently) incorrect
+ struct random_access_iterator_base:
+ public std::iterator<IC, T> {
+ typedef I derived_iterator_type;
+ typedef T derived_value_type;
+ typedef D derived_difference_type;
+
+ /* FIXME Need to explicitly pass derived_reference_type as otherwise I undefined type or forward declared
+ typedef typename derived_iterator_type::reference derived_reference_type;
+ // Indexed element
+ BOOST_UBLAS_INLINE
+ derived_reference_type operator [] (derived_difference_type n) {
+ return *(*this + n);
+ }
+ */
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ derived_iterator_type operator ++ (int) {
+ derived_iterator_type &d (*static_cast<derived_iterator_type *> (this));
+ derived_iterator_type tmp (d);
+ ++ d;
+ return tmp;
+ }
+ BOOST_UBLAS_INLINE
+ friend derived_iterator_type operator ++ (derived_iterator_type &d, int) {
+ derived_iterator_type tmp (d);
+ ++ d;
+ return tmp;
+ }
+ BOOST_UBLAS_INLINE
+ derived_iterator_type operator -- (int) {
+ derived_iterator_type &d (*static_cast<derived_iterator_type *> (this));
+ derived_iterator_type tmp (d);
+ -- d;
+ return tmp;
+ }
+ BOOST_UBLAS_INLINE
+ friend derived_iterator_type operator -- (derived_iterator_type &d, int) {
+ derived_iterator_type tmp (d);
+ -- d;
+ return tmp;
+ }
+ BOOST_UBLAS_INLINE
+ derived_iterator_type operator + (derived_difference_type n) const {
+ derived_iterator_type tmp (*static_cast<const derived_iterator_type *> (this));
+ return tmp += n;
+ }
+ BOOST_UBLAS_INLINE
+ friend derived_iterator_type operator + (const derived_iterator_type &d, derived_difference_type n) {
+ derived_iterator_type tmp (d);
+ return tmp += n;
+ }
+ BOOST_UBLAS_INLINE
+ friend derived_iterator_type operator + (derived_difference_type n, const derived_iterator_type &d) {
+ derived_iterator_type tmp (d);
+ return tmp += n;
+ }
+ BOOST_UBLAS_INLINE
+ derived_iterator_type operator - (derived_difference_type n) const {
+ derived_iterator_type tmp (*static_cast<const derived_iterator_type *> (this));
+ return tmp -= n;
+ }
+ BOOST_UBLAS_INLINE
+ friend derived_iterator_type operator - (const derived_iterator_type &d, derived_difference_type n) {
+ derived_iterator_type tmp (d);
+ return tmp -= n;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator != (const derived_iterator_type &it) const {
+ const derived_iterator_type *d = static_cast<const derived_iterator_type *> (this);
+ return ! (*d == it);
+ }
+ BOOST_UBLAS_INLINE
+ bool operator <= (const derived_iterator_type &it) const {
+ const derived_iterator_type *d = static_cast<const derived_iterator_type *> (this);
+ return ! (it < *d);
+ }
+ BOOST_UBLAS_INLINE
+ bool operator >= (const derived_iterator_type &it) const {
+ const derived_iterator_type *d = static_cast<const derived_iterator_type *> (this);
+ return ! (*d < it);
+ }
+ BOOST_UBLAS_INLINE
+ bool operator > (const derived_iterator_type &it) const {
+ const derived_iterator_type *d = static_cast<const derived_iterator_type *> (this);
+ return it < *d;
+ }
+ };
+
+ /** \brief Base class of all reverse iterators. (non-MSVC version)
+ *
+ * \param I the derived iterator type
+ * \param T the value type
+ * \param R the reference type
+ *
+ * The reverse iterator implements a bidirectional iterator
+ * reversing the elements of the underlying iterator. It
+ * implements most operators of a random access iterator.
+ *
+ * uBLAS extension: it.index()
+ */
+
+ // Renamed this class from reverse_iterator to get
+ // typedef reverse_iterator<...> reverse_iterator
+ // working. Thanks to Gabriel Dos Reis for explaining this.
+ template <class I>
+ class reverse_iterator_base:
+ public std::reverse_iterator<I> {
+ public:
+ typedef typename I::container_type container_type;
+ typedef typename container_type::size_type size_type;
+ typedef typename I::difference_type difference_type;
+ typedef I iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ reverse_iterator_base ():
+ std::reverse_iterator<iterator_type> () {}
+ BOOST_UBLAS_INLINE
+ reverse_iterator_base (const iterator_type &it):
+ std::reverse_iterator<iterator_type> (it) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ reverse_iterator_base &operator ++ () {
+ return *this = -- this->base ();
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator_base operator ++ (int) {
+ reverse_iterator_base tmp (*this);
+ *this = -- this->base ();
+ return tmp;
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator_base &operator -- () {
+ return *this = ++ this->base ();
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator_base operator -- (int) {
+ reverse_iterator_base tmp (*this);
+ *this = ++ this->base ();
+ return tmp;
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator_base &operator += (difference_type n) {
+ return *this = this->base () - n;
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator_base &operator -= (difference_type n) {
+ return *this = this->base () + n;
+ }
+
+ BOOST_UBLAS_INLINE
+ friend reverse_iterator_base operator + (const reverse_iterator_base &it, difference_type n) {
+ reverse_iterator_base tmp (it);
+ return tmp += n;
+ }
+ BOOST_UBLAS_INLINE
+ friend reverse_iterator_base operator + (difference_type n, const reverse_iterator_base &it) {
+ reverse_iterator_base tmp (it);
+ return tmp += n;
+ }
+ BOOST_UBLAS_INLINE
+ friend reverse_iterator_base operator - (const reverse_iterator_base &it, difference_type n) {
+ reverse_iterator_base tmp (it);
+ return tmp -= n;
+ }
+ BOOST_UBLAS_INLINE
+ friend difference_type operator - (const reverse_iterator_base &it1, const reverse_iterator_base &it2) {
+ return it2.base () - it1.base ();
+ }
+
+ BOOST_UBLAS_INLINE
+ const container_type &operator () () const {
+ return this->base () ();
+ }
+
+ BOOST_UBLAS_INLINE
+ size_type index () const {
+ iterator_type tmp (this->base ());
+ return (-- tmp).index ();
+ }
+ };
+
+ /** \brief 1st base class of all matrix reverse iterators. (non-MSVC version)
+ *
+ * \param I the derived iterator type
+ *
+ * The reverse iterator implements a bidirectional iterator
+ * reversing the elements of the underlying iterator. It
+ * implements most operators of a random access iterator.
+ *
+ * uBLAS extension: it.index1(), it.index2() and access to
+ * the dual iterator via begin(), end(), rbegin(), rend()
+ */
+
+ // Renamed this class from reverse_iterator1 to get
+ // typedef reverse_iterator1<...> reverse_iterator1
+ // working. Thanks to Gabriel Dos Reis for explaining this.
+ template <class I>
+ class reverse_iterator_base1:
+ public std::reverse_iterator<I> {
+ public:
+ typedef typename I::container_type container_type;
+ typedef typename container_type::size_type size_type;
+ typedef typename I::difference_type difference_type;
+ typedef I iterator_type;
+ typedef typename I::dual_iterator_type dual_iterator_type;
+ typedef typename I::dual_reverse_iterator_type dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ reverse_iterator_base1 ():
+ std::reverse_iterator<iterator_type> () {}
+ BOOST_UBLAS_INLINE
+ reverse_iterator_base1 (const iterator_type &it):
+ std::reverse_iterator<iterator_type> (it) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ reverse_iterator_base1 &operator ++ () {
+ return *this = -- this->base ();
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator_base1 operator ++ (int) {
+ reverse_iterator_base1 tmp (*this);
+ *this = -- this->base ();
+ return tmp;
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator_base1 &operator -- () {
+ return *this = ++ this->base ();
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator_base1 operator -- (int) {
+ reverse_iterator_base1 tmp (*this);
+ *this = ++ this->base ();
+ return tmp;
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator_base1 &operator += (difference_type n) {
+ return *this = this->base () - n;
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator_base1 &operator -= (difference_type n) {
+ return *this = this->base () + n;
+ }
+
+ BOOST_UBLAS_INLINE
+ friend reverse_iterator_base1 operator + (const reverse_iterator_base1 &it, difference_type n) {
+ reverse_iterator_base1 tmp (it);
+ return tmp += n;
+ }
+ BOOST_UBLAS_INLINE
+ friend reverse_iterator_base1 operator + (difference_type n, const reverse_iterator_base1 &it) {
+ reverse_iterator_base1 tmp (it);
+ return tmp += n;
+ }
+ BOOST_UBLAS_INLINE
+ friend reverse_iterator_base1 operator - (const reverse_iterator_base1 &it, difference_type n) {
+ reverse_iterator_base1 tmp (it);
+ return tmp -= n;
+ }
+ BOOST_UBLAS_INLINE
+ friend difference_type operator - (const reverse_iterator_base1 &it1, const reverse_iterator_base1 &it2) {
+ return it2.base () - it1.base ();
+ }
+
+ BOOST_UBLAS_INLINE
+ const container_type &operator () () const {
+ return this->base () ();
+ }
+
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ iterator_type tmp (this->base ());
+ return (-- tmp).index1 ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ iterator_type tmp (this->base ());
+ return (-- tmp).index2 ();
+ }
+
+ BOOST_UBLAS_INLINE
+ dual_iterator_type begin () const {
+ iterator_type tmp (this->base ());
+ return (-- tmp).begin ();
+ }
+ BOOST_UBLAS_INLINE
+ dual_iterator_type end () const {
+ iterator_type tmp (this->base ());
+ return (-- tmp).end ();
+ }
+ BOOST_UBLAS_INLINE
+ dual_reverse_iterator_type rbegin () const {
+ return dual_reverse_iterator_type (end ());
+ }
+ BOOST_UBLAS_INLINE
+ dual_reverse_iterator_type rend () const {
+ return dual_reverse_iterator_type (begin ());
+ }
+ };
+
+ /** \brief 2nd base class of all matrix reverse iterators. (non-MSVC version)
+ *
+ * \param I the derived iterator type
+ *
+ * The reverse iterator implements a bidirectional iterator
+ * reversing the elements of the underlying iterator. It
+ * implements most operators of a random access iterator.
+ *
+ * uBLAS extension: it.index1(), it.index2() and access to
+ * the dual iterator via begin(), end(), rbegin(), rend()
+ *
+ * Note: this type is _identical_ to reverse_iterator_base1
+ */
+
+ // Renamed this class from reverse_iterator2 to get
+ // typedef reverse_iterator2<...> reverse_iterator2
+ // working. Thanks to Gabriel Dos Reis for explaining this.
+ template <class I>
+ class reverse_iterator_base2:
+ public std::reverse_iterator<I> {
+ public:
+ typedef typename I::container_type container_type;
+ typedef typename container_type::size_type size_type;
+ typedef typename I::difference_type difference_type;
+ typedef I iterator_type;
+ typedef typename I::dual_iterator_type dual_iterator_type;
+ typedef typename I::dual_reverse_iterator_type dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ reverse_iterator_base2 ():
+ std::reverse_iterator<iterator_type> () {}
+ BOOST_UBLAS_INLINE
+ reverse_iterator_base2 (const iterator_type &it):
+ std::reverse_iterator<iterator_type> (it) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ reverse_iterator_base2 &operator ++ () {
+ return *this = -- this->base ();
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator_base2 operator ++ (int) {
+ reverse_iterator_base2 tmp (*this);
+ *this = -- this->base ();
+ return tmp;
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator_base2 &operator -- () {
+ return *this = ++ this->base ();
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator_base2 operator -- (int) {
+ reverse_iterator_base2 tmp (*this);
+ *this = ++ this->base ();
+ return tmp;
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator_base2 &operator += (difference_type n) {
+ return *this = this->base () - n;
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator_base2 &operator -= (difference_type n) {
+ return *this = this->base () + n;
+ }
+
+ BOOST_UBLAS_INLINE
+ friend reverse_iterator_base2 operator + (const reverse_iterator_base2 &it, difference_type n) {
+ reverse_iterator_base2 tmp (it);
+ return tmp += n;
+ }
+ BOOST_UBLAS_INLINE
+ friend reverse_iterator_base2 operator + (difference_type n, const reverse_iterator_base2 &it) {
+ reverse_iterator_base2 tmp (it);
+ return tmp += n;
+ }
+ BOOST_UBLAS_INLINE
+ friend reverse_iterator_base2 operator - (const reverse_iterator_base2 &it, difference_type n) {
+ reverse_iterator_base2 tmp (it);
+ return tmp -= n;
+ }
+ BOOST_UBLAS_INLINE
+ friend difference_type operator - (const reverse_iterator_base2 &it1, const reverse_iterator_base2 &it2) {
+ return it2.base () - it1.base ();
+ }
+
+ BOOST_UBLAS_INLINE
+ const container_type &operator () () const {
+ return this->base () ();
+ }
+
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ iterator_type tmp (this->base ());
+ return (-- tmp).index1 ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ iterator_type tmp (this->base ());
+ return (-- tmp).index2 ();
+ }
+
+ BOOST_UBLAS_INLINE
+ dual_iterator_type begin () const {
+ iterator_type tmp (this->base ());
+ return (-- tmp).begin ();
+ }
+ BOOST_UBLAS_INLINE
+ dual_iterator_type end () const {
+ iterator_type tmp (this->base ());
+ return (-- tmp).end ();
+ }
+ BOOST_UBLAS_INLINE
+ dual_reverse_iterator_type rbegin () const {
+ return dual_reverse_iterator_type (end ());
+ }
+ BOOST_UBLAS_INLINE
+ dual_reverse_iterator_type rend () const {
+ return dual_reverse_iterator_type (begin ());
+ }
+ };
+
+ /** \brief A class implementing an indexed random access iterator.
+ *
+ * \param C the mutable container type
+ * \param IC the iterator category
+ *
+ * This class implements a random access iterator. The current
+ * position is stored as the unsigned integer it_ and the
+ * values are accessed via operator()(it_) of the container.
+ *
+ * uBLAS extension: index()
+ */
+
+ template<class C, class IC>
+ class indexed_iterator:
+ public container_reference<C>,
+ public random_access_iterator_base<IC,
+ indexed_iterator<C, IC>,
+ typename C::value_type,
+ typename C::difference_type> {
+ public:
+ typedef C container_type;
+ typedef IC iterator_category;
+ typedef typename container_type::size_type size_type;
+ typedef typename container_type::difference_type difference_type;
+ typedef typename container_type::value_type value_type;
+ typedef typename container_type::reference reference;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ indexed_iterator ():
+ container_reference<container_type> (), it_ () {}
+ BOOST_UBLAS_INLINE
+ indexed_iterator (container_type &c, size_type it):
+ container_reference<container_type> (c), it_ (it) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ indexed_iterator &operator ++ () {
+ ++ it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ indexed_iterator &operator -- () {
+ -- it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ indexed_iterator &operator += (difference_type n) {
+ it_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ indexed_iterator &operator -= (difference_type n) {
+ it_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const indexed_iterator &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it_ - it.it_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ BOOST_UBLAS_CHECK (index () < (*this) ().size (), bad_index ());
+ return (*this) () (it_);
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (difference_type n) const {
+ return *((*this) + n);
+ }
+
+ // Index
+ BOOST_UBLAS_INLINE
+ size_type index () const {
+ return it_;
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ indexed_iterator &operator = (const indexed_iterator &it) {
+ // FIX: ICC needs full qualification?!
+ // assign (&it ());
+ container_reference<C>::assign (&it ());
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const indexed_iterator &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it_ == it.it_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const indexed_iterator &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it_ < it.it_;
+ }
+
+ private:
+ size_type it_;
+ };
+
+ /** \brief A class implementing an indexed random access iterator.
+ *
+ * \param C the mutable container type
+ * \param IC the iterator category
+ *
+ * This class implements a random access iterator. The current
+ * position is stored as the unsigned integer \c it_ and the
+ * values are accessed via \c operator()(it_) of the container.
+ *
+ * uBLAS extension: \c index()
+ *
+ * Note: there is an automatic conversion from
+ * \c indexed_iterator to \c indexed_const_iterator
+ */
+
+ template<class C, class IC>
+ class indexed_const_iterator:
+ public container_const_reference<C>,
+ public random_access_iterator_base<IC,
+ indexed_const_iterator<C, IC>,
+ typename C::value_type,
+ typename C::difference_type> {
+ public:
+ typedef C container_type;
+ typedef IC iterator_category;
+ typedef typename container_type::size_type size_type;
+ typedef typename container_type::difference_type difference_type;
+ typedef typename container_type::value_type value_type;
+ typedef typename container_type::const_reference reference;
+ typedef indexed_iterator<container_type, iterator_category> iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ indexed_const_iterator ():
+ container_const_reference<container_type> (), it_ () {}
+ BOOST_UBLAS_INLINE
+ indexed_const_iterator (const container_type &c, size_type it):
+ container_const_reference<container_type> (c), it_ (it) {}
+ BOOST_UBLAS_INLINE
+ indexed_const_iterator (const iterator_type &it):
+ container_const_reference<container_type> (it ()), it_ (it.index ()) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ indexed_const_iterator &operator ++ () {
+ ++ it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ indexed_const_iterator &operator -- () {
+ -- it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ indexed_const_iterator &operator += (difference_type n) {
+ it_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ indexed_const_iterator &operator -= (difference_type n) {
+ it_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const indexed_const_iterator &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it_ - it.it_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ BOOST_UBLAS_CHECK (index () < (*this) ().size (), bad_index ());
+ return (*this) () (it_);
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (difference_type n) const {
+ return *((*this) + n);
+ }
+
+ // Index
+ BOOST_UBLAS_INLINE
+ size_type index () const {
+ return it_;
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ indexed_const_iterator &operator = (const indexed_const_iterator &it) {
+ // FIX: ICC needs full qualification?!
+ // assign (&it ());
+ container_const_reference<C>::assign (&it ());
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const indexed_const_iterator &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it_ == it.it_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const indexed_const_iterator &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it_ < it.it_;
+ }
+
+ private:
+ size_type it_;
+
+ friend class indexed_iterator<container_type, iterator_category>;
+ };
+
+ template<class C, class IC>
+ class indexed_iterator2;
+
+ /** \brief A class implementing an indexed random access iterator
+ * of a matrix.
+ *
+ * \param C the mutable container type
+ * \param IC the iterator category
+ *
+ * This class implements a random access iterator. The current
+ * position is stored as two unsigned integers \c it1_ and \c it2_
+ * and the values are accessed via \c operator()(it1_, it2_) of the
+ * container. The iterator changes the first index.
+ *
+ * uBLAS extension: \c index1(), \c index2() and access to the
+ * dual iterator via \c begin(), \c end(), \c rbegin() and \c rend()
+ *
+ * Note: The container has to support the \code find2(rank, i, j) \endcode
+ * method
+ */
+
+ template<class C, class IC>
+ class indexed_iterator1:
+ public container_reference<C>,
+ public random_access_iterator_base<IC,
+ indexed_iterator1<C, IC>,
+ typename C::value_type,
+ typename C::reference> {
+ public:
+ typedef C container_type;
+ typedef IC iterator_category;
+ typedef typename container_type::size_type size_type;
+ typedef typename container_type::difference_type difference_type;
+ typedef typename container_type::value_type value_type;
+ typedef typename container_type::reference reference;
+
+ typedef indexed_iterator2<container_type, iterator_category> dual_iterator_type;
+ typedef reverse_iterator_base2<dual_iterator_type> dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ indexed_iterator1 ():
+ container_reference<container_type> (), it1_ (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ indexed_iterator1 (container_type &c, size_type it1, size_type it2):
+ container_reference<container_type> (c), it1_ (it1), it2_ (it2) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ indexed_iterator1 &operator ++ () {
+ ++ it1_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ indexed_iterator1 &operator -- () {
+ -- it1_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ indexed_iterator1 &operator += (difference_type n) {
+ it1_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ indexed_iterator1 &operator -= (difference_type n) {
+ it1_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const indexed_iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ - it.it1_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ BOOST_UBLAS_CHECK (index1 () < (*this) ().size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (index2 () < (*this) ().size2 (), bad_index ());
+ return (*this) () (it1_, it2_);
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (difference_type n) const {
+ return *((*this) + n);
+ }
+
+ // Index
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it1_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it2_;
+ }
+
+ BOOST_UBLAS_INLINE
+ dual_iterator_type begin () const {
+ return (*this) ().find2 (1, index1 (), 0);
+ }
+ BOOST_UBLAS_INLINE
+ dual_iterator_type end () const {
+ return (*this) ().find2 (1, index1 (), (*this) ().size2 ());
+ }
+ BOOST_UBLAS_INLINE
+ dual_reverse_iterator_type rbegin () const {
+ return dual_reverse_iterator_type (end ());
+ }
+ BOOST_UBLAS_INLINE
+ dual_reverse_iterator_type rend () const {
+ return dual_reverse_iterator_type (begin ());
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ indexed_iterator1 &operator = (const indexed_iterator1 &it) {
+ // FIX: ICC needs full qualification?!
+ // assign (&it ());
+ container_reference<C>::assign (&it ());
+ it1_ = it.it1_;
+ it2_ = it.it2_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const indexed_iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ == it.it1_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const indexed_iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ < it.it1_;
+ }
+
+ private:
+ size_type it1_;
+ size_type it2_;
+ };
+
+ template<class C, class IC>
+ class indexed_const_iterator2;
+
+ /** \brief A class implementing an indexed random access iterator
+ * of a matrix.
+ *
+ * \param C the (immutable) container type
+ * \param IC the iterator category
+ *
+ * This class implements a random access iterator. The current
+ * position is stored as two unsigned integers \c it1_ and \c it2_
+ * and the values are accessed via \c operator()(it1_, it2_) of the
+ * container. The iterator changes the first index.
+ *
+ * uBLAS extension: \c index1(), \c index2() and access to the
+ * dual iterator via \c begin(), \c end(), \c rbegin() and \c rend()
+ *
+ * Note 1: The container has to support the find2(rank, i, j) method
+ *
+ * Note 2: there is an automatic conversion from
+ * \c indexed_iterator1 to \c indexed_const_iterator1
+ */
+
+ template<class C, class IC>
+ class indexed_const_iterator1:
+ public container_const_reference<C>,
+ public random_access_iterator_base<IC,
+ indexed_const_iterator1<C, IC>,
+ typename C::value_type,
+ typename C::const_reference> {
+ public:
+ typedef C container_type;
+ typedef IC iterator_category;
+ typedef typename container_type::size_type size_type;
+ typedef typename container_type::difference_type difference_type;
+ typedef typename container_type::value_type value_type;
+ typedef typename container_type::const_reference reference;
+
+ typedef indexed_iterator1<container_type, iterator_category> iterator_type;
+ typedef indexed_const_iterator2<container_type, iterator_category> dual_iterator_type;
+ typedef reverse_iterator_base2<dual_iterator_type> dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ indexed_const_iterator1 ():
+ container_const_reference<container_type> (), it1_ (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ indexed_const_iterator1 (const container_type &c, size_type it1, size_type it2):
+ container_const_reference<container_type> (c), it1_ (it1), it2_ (it2) {}
+ BOOST_UBLAS_INLINE
+ indexed_const_iterator1 (const iterator_type &it):
+ container_const_reference<container_type> (it ()), it1_ (it.index1 ()), it2_ (it.index2 ()) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ indexed_const_iterator1 &operator ++ () {
+ ++ it1_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ indexed_const_iterator1 &operator -- () {
+ -- it1_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ indexed_const_iterator1 &operator += (difference_type n) {
+ it1_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ indexed_const_iterator1 &operator -= (difference_type n) {
+ it1_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const indexed_const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ - it.it1_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ BOOST_UBLAS_CHECK (index1 () < (*this) ().size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (index2 () < (*this) ().size2 (), bad_index ());
+ return (*this) () (it1_, it2_);
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (difference_type n) const {
+ return *((*this) + n);
+ }
+
+ // Index
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it1_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it2_;
+ }
+
+ BOOST_UBLAS_INLINE
+ dual_iterator_type begin () const {
+ return (*this) ().find2 (1, index1 (), 0);
+ }
+ BOOST_UBLAS_INLINE
+ dual_iterator_type end () const {
+ return (*this) ().find2 (1, index1 (), (*this) ().size2 ());
+ }
+ BOOST_UBLAS_INLINE
+ dual_reverse_iterator_type rbegin () const {
+ return dual_reverse_iterator_type (end ());
+ }
+ BOOST_UBLAS_INLINE
+ dual_reverse_iterator_type rend () const {
+ return dual_reverse_iterator_type (begin ());
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ indexed_const_iterator1 &operator = (const indexed_const_iterator1 &it) {
+ // FIX: ICC needs full qualification?!
+ // assign (&it ());
+ container_const_reference<C>::assign (&it ());
+ it1_ = it.it1_;
+ it2_ = it.it2_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const indexed_const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ == it.it1_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const indexed_const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ < it.it1_;
+ }
+
+ private:
+ size_type it1_;
+ size_type it2_;
+
+ friend class indexed_iterator1<container_type, iterator_category>;
+ };
+
+ /** \brief A class implementing an indexed random access iterator
+ * of a matrix.
+ *
+ * \param C the mutable container type
+ * \param IC the iterator category
+ *
+ * This class implements a random access iterator. The current
+ * position is stored as two unsigned integers \c it1_ and \c it2_
+ * and the values are accessed via \c operator()(it1_, it2_) of the
+ * container. The iterator changes the second index.
+ *
+ * uBLAS extension: \c index1(), \c index2() and access to the
+ * dual iterator via \c begin(), \c end(), \c rbegin() and \c rend()
+ *
+ * Note: The container has to support the find1(rank, i, j) method
+ */
+ template<class C, class IC>
+ class indexed_iterator2:
+ public container_reference<C>,
+ public random_access_iterator_base<IC,
+ indexed_iterator2<C, IC>,
+ typename C::value_type,
+ typename C::reference> {
+ public:
+ typedef C container_type;
+ typedef IC iterator_category;
+ typedef typename container_type::size_type size_type;
+ typedef typename container_type::difference_type difference_type;
+ typedef typename container_type::value_type value_type;
+ typedef typename container_type::reference reference;
+
+ typedef indexed_iterator1<container_type, iterator_category> dual_iterator_type;
+ typedef reverse_iterator_base1<dual_iterator_type> dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ indexed_iterator2 ():
+ container_reference<container_type> (), it1_ (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ indexed_iterator2 (container_type &c, size_type it1, size_type it2):
+ container_reference<container_type> (c), it1_ (it1), it2_ (it2) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ indexed_iterator2 &operator ++ () {
+ ++ it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ indexed_iterator2 &operator -- () {
+ -- it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ indexed_iterator2 &operator += (difference_type n) {
+ it2_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ indexed_iterator2 &operator -= (difference_type n) {
+ it2_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const indexed_iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ - it.it2_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ BOOST_UBLAS_CHECK (index1 () < (*this) ().size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (index2 () < (*this) ().size2 (), bad_index ());
+ return (*this) () (it1_, it2_);
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (difference_type n) const {
+ return *((*this) + n);
+ }
+
+ // Index
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it1_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it2_;
+ }
+
+ BOOST_UBLAS_INLINE
+ dual_iterator_type begin () const {
+ return (*this) ().find1 (1, 0, index2 ());
+ }
+ BOOST_UBLAS_INLINE
+ dual_iterator_type end () const {
+ return (*this) ().find1 (1, (*this) ().size1 (), index2 ());
+ }
+ BOOST_UBLAS_INLINE
+ dual_reverse_iterator_type rbegin () const {
+ return dual_reverse_iterator_type (end ());
+ }
+ BOOST_UBLAS_INLINE
+ dual_reverse_iterator_type rend () const {
+ return dual_reverse_iterator_type (begin ());
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ indexed_iterator2 &operator = (const indexed_iterator2 &it) {
+ // FIX: ICC needs full qualification?!
+ // assign (&it ());
+ container_reference<C>::assign (&it ());
+ it1_ = it.it1_;
+ it2_ = it.it2_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const indexed_iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ == it.it2_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const indexed_iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ < it.it2_;
+ }
+
+ private:
+ size_type it1_;
+ size_type it2_;
+ };
+
+ /** \brief A class implementing an indexed random access iterator
+ * of a matrix.
+ *
+ * \param C the (immutable) container type
+ * \param IC the iterator category
+ *
+ * This class implements a random access iterator. The current
+ * position is stored as two unsigned integers \c it1_ and \c it2_
+ * and the values are accessed via \c operator()(it1_, it2_) of the
+ * container. The iterator changes the second index.
+ *
+ * uBLAS extension: \c index1(), \c index2() and access to the
+ * dual iterator via \c begin(), \c end(), \c rbegin() and \c rend()
+ *
+ * Note 1: The container has to support the \c find2(rank, i, j) method
+ *
+ * Note 2: there is an automatic conversion from
+ * \c indexed_iterator2 to \c indexed_const_iterator2
+ */
+
+ template<class C, class IC>
+ class indexed_const_iterator2:
+ public container_const_reference<C>,
+ public random_access_iterator_base<IC,
+ indexed_const_iterator2<C, IC>,
+ typename C::value_type,
+ typename C::const_reference> {
+ public:
+ typedef C container_type;
+ typedef IC iterator_category;
+ typedef typename container_type::size_type size_type;
+ typedef typename container_type::difference_type difference_type;
+ typedef typename container_type::value_type value_type;
+ typedef typename container_type::const_reference reference;
+
+ typedef indexed_iterator2<container_type, iterator_category> iterator_type;
+ typedef indexed_const_iterator1<container_type, iterator_category> dual_iterator_type;
+ typedef reverse_iterator_base1<dual_iterator_type> dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ indexed_const_iterator2 ():
+ container_const_reference<container_type> (), it1_ (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ indexed_const_iterator2 (const container_type &c, size_type it1, size_type it2):
+ container_const_reference<container_type> (c), it1_ (it1), it2_ (it2) {}
+ BOOST_UBLAS_INLINE
+ indexed_const_iterator2 (const iterator_type &it):
+ container_const_reference<container_type> (it ()), it1_ (it.index1 ()), it2_ (it.index2 ()) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ indexed_const_iterator2 &operator ++ () {
+ ++ it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ indexed_const_iterator2 &operator -- () {
+ -- it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ indexed_const_iterator2 &operator += (difference_type n) {
+ it2_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ indexed_const_iterator2 &operator -= (difference_type n) {
+ it2_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const indexed_const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ - it.it2_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ BOOST_UBLAS_CHECK (index1 () < (*this) ().size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (index2 () < (*this) ().size2 (), bad_index ());
+ return (*this) () (it1_, it2_);
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (difference_type n) const {
+ return *((*this) + n);
+ }
+
+ // Index
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it1_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it2_;
+ }
+
+ BOOST_UBLAS_INLINE
+ dual_iterator_type begin () const {
+ return (*this) ().find1 (1, 0, index2 ());
+ }
+ BOOST_UBLAS_INLINE
+ dual_iterator_type end () const {
+ return (*this) ().find1 (1, (*this) ().size1 (), index2 ());
+ }
+ BOOST_UBLAS_INLINE
+ dual_reverse_iterator_type rbegin () const {
+ return dual_reverse_iterator_type (end ());
+ }
+ BOOST_UBLAS_INLINE
+ dual_reverse_iterator_type rend () const {
+ return dual_reverse_iterator_type (begin ());
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ indexed_const_iterator2 &operator = (const indexed_const_iterator2 &it) {
+ // FIX: ICC needs full qualification?!
+ // assign (&it ());
+ container_const_reference<C>::assign (&it ());
+ it1_ = it.it1_;
+ it2_ = it.it2_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const indexed_const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ == it.it2_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const indexed_const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ < it.it2_;
+ }
+
+ private:
+ size_type it1_;
+ size_type it2_;
+
+ friend class indexed_iterator2<container_type, iterator_category>;
+ };
+
+}}}
+
+#endif
diff --git a/boost/boost/numeric/ublas/detail/matrix_assign.hpp b/boost/boost/numeric/ublas/detail/matrix_assign.hpp
new file mode 100644
index 00000000000..195175caf5f
--- /dev/null
+++ b/boost/boost/numeric/ublas/detail/matrix_assign.hpp
@@ -0,0 +1,1632 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without fee,
+// provided that the above copyright notice appear in all copies and
+// that both that copyright notice and this permission notice appear
+// in supporting documentation. The authors make no representations
+// about the suitability of this software for any purpose.
+// It is provided "as is" without express or implied warranty.
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#ifndef _BOOST_UBLAS_MATRIX_ASSIGN_
+#define _BOOST_UBLAS_MATRIX_ASSIGN_
+
+// Required for make_conformant storage
+#include <vector>
+
+// Iterators based on ideas of Jeremy Siek
+
+namespace boost { namespace numeric { namespace ublas {
+namespace detail {
+
+ // Weak equality check - useful to compare equality two arbitary matrix expression results.
+ // Since the actual expressions are unknown, we check for and arbitary error bound
+ // on the relative error.
+ // For a linear expression the infinity norm makes sense as we do not know how the elements will be
+ // combined in the expression. False positive results are inevitable for arbirary expressions!
+ template<class E1, class E2, class S>
+ BOOST_UBLAS_INLINE
+ bool equals (const matrix_expression<E1> &e1, const matrix_expression<E2> &e2, S epsilon, S min_norm) {
+ return norm_inf (e1 - e2) < epsilon *
+ std::max<S> (std::max<S> (norm_inf (e1), norm_inf (e2)), min_norm);
+ }
+
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ bool expression_type_check (const matrix_expression<E1> &e1, const matrix_expression<E2> &e2) {
+ typedef typename type_traits<typename promote_traits<typename E1::value_type,
+ typename E2::value_type>::promote_type>::real_type real_type;
+ return equals (e1, e2, BOOST_UBLAS_TYPE_CHECK_EPSILON, BOOST_UBLAS_TYPE_CHECK_MIN);
+ }
+
+
+ template<class M, class E, class R>
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ void make_conformant (M &m, const matrix_expression<E> &e, row_major_tag, R) {
+ BOOST_UBLAS_CHECK (m.size1 () == e ().size1 (), bad_size ());
+ BOOST_UBLAS_CHECK (m.size2 () == e ().size2 (), bad_size ());
+ typedef R conformant_restrict_type;
+ typedef typename M::size_type size_type;
+ typedef typename M::difference_type difference_type;
+ typedef typename M::value_type value_type;
+ // FIXME unbounded_array with push_back maybe better
+ std::vector<std::pair<size_type, size_type> > index;
+ typename M::iterator1 it1 (m.begin1 ());
+ typename M::iterator1 it1_end (m.end1 ());
+ typename E::const_iterator1 it1e (e ().begin1 ());
+ typename E::const_iterator1 it1e_end (e ().end1 ());
+ while (it1 != it1_end && it1e != it1e_end) {
+ difference_type compare = it1.index1 () - it1e.index1 ();
+ if (compare == 0) {
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ typename M::iterator2 it2 (it1.begin ());
+ typename M::iterator2 it2_end (it1.end ());
+ typename E::const_iterator2 it2e (it1e.begin ());
+ typename E::const_iterator2 it2e_end (it1e.end ());
+#else
+ typename M::iterator2 it2 (begin (it1, iterator1_tag ()));
+ typename M::iterator2 it2_end (end (it1, iterator1_tag ()));
+ typename E::const_iterator2 it2e (begin (it1e, iterator1_tag ()));
+ typename E::const_iterator2 it2e_end (end (it1e, iterator1_tag ()));
+#endif
+ if (it2 != it2_end && it2e != it2e_end) {
+ size_type it2_index = it2.index2 (), it2e_index = it2e.index2 ();
+ while (true) {
+ difference_type compare = it2_index - it2e_index;
+ if (compare == 0) {
+ ++ it2, ++ it2e;
+ if (it2 != it2_end && it2e != it2e_end) {
+ it2_index = it2.index2 ();
+ it2e_index = it2e.index2 ();
+ } else
+ break;
+ } else if (compare < 0) {
+ increment (it2, it2_end, - compare);
+ if (it2 != it2_end)
+ it2_index = it2.index2 ();
+ else
+ break;
+ } else if (compare > 0) {
+ if (conformant_restrict_type::other (it2e.index1 (), it2e.index2 ()))
+ if (*it2e != value_type/*zero*/())
+ index.push_back (std::pair<size_type, size_type> (it2e.index1 (), it2e.index2 ()));
+ ++ it2e;
+ if (it2e != it2e_end)
+ it2e_index = it2e.index2 ();
+ else
+ break;
+ }
+ }
+ }
+ while (it2e != it2e_end) {
+ if (conformant_restrict_type::other (it2e.index1 (), it2e.index2 ()))
+ if (*it2e != value_type/*zero*/())
+ index.push_back (std::pair<size_type, size_type> (it2e.index1 (), it2e.index2 ()));
+ ++ it2e;
+ }
+ ++ it1, ++ it1e;
+ } else if (compare < 0) {
+ increment (it1, it1_end, - compare);
+ } else if (compare > 0) {
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ typename E::const_iterator2 it2e (it1e.begin ());
+ typename E::const_iterator2 it2e_end (it1e.end ());
+#else
+ typename E::const_iterator2 it2e (begin (it1e, iterator1_tag ()));
+ typename E::const_iterator2 it2e_end (end (it1e, iterator1_tag ()));
+#endif
+ while (it2e != it2e_end) {
+ if (conformant_restrict_type::other (it2e.index1 (), it2e.index2 ()))
+ if (*it2e != value_type/*zero*/())
+ index.push_back (std::pair<size_type, size_type> (it2e.index1 (), it2e.index2 ()));
+ ++ it2e;
+ }
+ ++ it1e;
+ }
+ }
+ while (it1e != it1e_end) {
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ typename E::const_iterator2 it2e (it1e.begin ());
+ typename E::const_iterator2 it2e_end (it1e.end ());
+#else
+ typename E::const_iterator2 it2e (begin (it1e, iterator1_tag ()));
+ typename E::const_iterator2 it2e_end (end (it1e, iterator1_tag ()));
+#endif
+ while (it2e != it2e_end) {
+ if (conformant_restrict_type::other (it2e.index1 (), it2e.index2 ()))
+ if (*it2e != value_type/*zero*/())
+ index.push_back (std::pair<size_type, size_type> (it2e.index1 (), it2e.index2 ()));
+ ++ it2e;
+ }
+ ++ it1e;
+ }
+ // ISSUE proxies require insert_element
+ for (size_type k = 0; k < index.size (); ++ k)
+ m (index [k].first, index [k].second) = value_type/*zero*/();
+ }
+ template<class M, class E, class R>
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ void make_conformant (M &m, const matrix_expression<E> &e, column_major_tag, R) {
+ BOOST_UBLAS_CHECK (m.size1 () == e ().size1 (), bad_size ());
+ BOOST_UBLAS_CHECK (m.size2 () == e ().size2 (), bad_size ());
+ typedef R conformant_restrict_type;
+ typedef typename M::size_type size_type;
+ typedef typename M::difference_type difference_type;
+ typedef typename M::value_type value_type;
+ std::vector<std::pair<size_type, size_type> > index;
+ typename M::iterator2 it2 (m.begin2 ());
+ typename M::iterator2 it2_end (m.end2 ());
+ typename E::const_iterator2 it2e (e ().begin2 ());
+ typename E::const_iterator2 it2e_end (e ().end2 ());
+ while (it2 != it2_end && it2e != it2e_end) {
+ difference_type compare = it2.index2 () - it2e.index2 ();
+ if (compare == 0) {
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ typename M::iterator1 it1 (it2.begin ());
+ typename M::iterator1 it1_end (it2.end ());
+ typename E::const_iterator1 it1e (it2e.begin ());
+ typename E::const_iterator1 it1e_end (it2e.end ());
+#else
+ typename M::iterator1 it1 (begin (it2, iterator2_tag ()));
+ typename M::iterator1 it1_end (end (it2, iterator2_tag ()));
+ typename E::const_iterator1 it1e (begin (it2e, iterator2_tag ()));
+ typename E::const_iterator1 it1e_end (end (it2e, iterator2_tag ()));
+#endif
+ if (it1 != it1_end && it1e != it1e_end) {
+ size_type it1_index = it1.index1 (), it1e_index = it1e.index1 ();
+ while (true) {
+ difference_type compare = it1_index - it1e_index;
+ if (compare == 0) {
+ ++ it1, ++ it1e;
+ if (it1 != it1_end && it1e != it1e_end) {
+ it1_index = it1.index1 ();
+ it1e_index = it1e.index1 ();
+ } else
+ break;
+ } else if (compare < 0) {
+ increment (it1, it1_end, - compare);
+ if (it1 != it1_end)
+ it1_index = it1.index1 ();
+ else
+ break;
+ } else if (compare > 0) {
+ if (conformant_restrict_type::other (it1e.index1 (), it1e.index2 ()))
+ if (*it1e != value_type/*zero*/())
+ index.push_back (std::pair<size_type, size_type> (it1e.index1 (), it1e.index2 ()));
+ ++ it1e;
+ if (it1e != it1e_end)
+ it1e_index = it1e.index1 ();
+ else
+ break;
+ }
+ }
+ }
+ while (it1e != it1e_end) {
+ if (conformant_restrict_type::other (it1e.index1 (), it1e.index2 ()))
+ if (*it1e != value_type/*zero*/())
+ index.push_back (std::pair<size_type, size_type> (it1e.index1 (), it1e.index2 ()));
+ ++ it1e;
+ }
+ ++ it2, ++ it2e;
+ } else if (compare < 0) {
+ increment (it2, it2_end, - compare);
+ } else if (compare > 0) {
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ typename E::const_iterator1 it1e (it2e.begin ());
+ typename E::const_iterator1 it1e_end (it2e.end ());
+#else
+ typename E::const_iterator1 it1e (begin (it2e, iterator2_tag ()));
+ typename E::const_iterator1 it1e_end (end (it2e, iterator2_tag ()));
+#endif
+ while (it1e != it1e_end) {
+ if (conformant_restrict_type::other (it1e.index1 (), it1e.index2 ()))
+ if (*it1e != value_type/*zero*/())
+ index.push_back (std::pair<size_type, size_type> (it1e.index1 (), it1e.index2 ()));
+ ++ it1e;
+ }
+ ++ it2e;
+ }
+ }
+ while (it2e != it2e_end) {
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ typename E::const_iterator1 it1e (it2e.begin ());
+ typename E::const_iterator1 it1e_end (it2e.end ());
+#else
+ typename E::const_iterator1 it1e (begin (it2e, iterator2_tag ()));
+ typename E::const_iterator1 it1e_end (end (it2e, iterator2_tag ()));
+#endif
+ while (it1e != it1e_end) {
+ if (conformant_restrict_type::other (it1e.index1 (), it1e.index2 ()))
+ if (*it1e != value_type/*zero*/())
+ index.push_back (std::pair<size_type, size_type> (it1e.index1 (), it1e.index2 ()));
+ ++ it1e;
+ }
+ ++ it2e;
+ }
+ // ISSUE proxies require insert_element
+ for (size_type k = 0; k < index.size (); ++ k)
+ m (index [k].first, index [k].second) = value_type/*zero*/();
+ }
+
+}//namespace detail
+
+
+ // Explicitly iterating row major
+ template<template <class T1, class T2> class F, class M, class T>
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ void iterating_matrix_assign_scalar (M &m, const T &t, row_major_tag) {
+ typedef F<typename M::iterator2::reference, T> functor_type;
+ typedef typename M::difference_type difference_type;
+ difference_type size1 (m.size1 ());
+ difference_type size2 (m.size2 ());
+ typename M::iterator1 it1 (m.begin1 ());
+ BOOST_UBLAS_CHECK (size2 == 0 || m.end1 () - it1 == size1, bad_size ());
+ while (-- size1 >= 0) {
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ typename M::iterator2 it2 (it1.begin ());
+#else
+ typename M::iterator2 it2 (begin (it1, iterator1_tag ()));
+#endif
+ BOOST_UBLAS_CHECK (it1.end () - it2 == size2, bad_size ());
+ difference_type temp_size2 (size2);
+#ifndef BOOST_UBLAS_USE_DUFF_DEVICE
+ while (-- temp_size2 >= 0)
+ functor_type::apply (*it2, t), ++ it2;
+#else
+ DD (temp_size2, 4, r, (functor_type::apply (*it2, t), ++ it2));
+#endif
+ ++ it1;
+ }
+ }
+ // Explicitly iterating column major
+ template<template <class T1, class T2> class F, class M, class T>
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ void iterating_matrix_assign_scalar (M &m, const T &t, column_major_tag) {
+ typedef F<typename M::iterator1::reference, T> functor_type;
+ typedef typename M::difference_type difference_type;
+ difference_type size2 (m.size2 ());
+ difference_type size1 (m.size1 ());
+ typename M::iterator2 it2 (m.begin2 ());
+ BOOST_UBLAS_CHECK (size1 == 0 || m.end2 () - it2 == size2, bad_size ());
+ while (-- size2 >= 0) {
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ typename M::iterator1 it1 (it2.begin ());
+#else
+ typename M::iterator1 it1 (begin (it2, iterator2_tag ()));
+#endif
+ BOOST_UBLAS_CHECK (it2.end () - it1 == size1, bad_size ());
+ difference_type temp_size1 (size1);
+#ifndef BOOST_UBLAS_USE_DUFF_DEVICE
+ while (-- temp_size1 >= 0)
+ functor_type::apply (*it1, t), ++ it1;
+#else
+ DD (temp_size1, 4, r, (functor_type::apply (*it1, t), ++ it1));
+#endif
+ ++ it2;
+ }
+ }
+ // Explicitly indexing row major
+ template<template <class T1, class T2> class F, class M, class T>
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ void indexing_matrix_assign_scalar (M &m, const T &t, row_major_tag) {
+ typedef F<typename M::reference, T> functor_type;
+ typedef typename M::size_type size_type;
+ size_type size1 (m.size1 ());
+ size_type size2 (m.size2 ());
+ for (size_type i = 0; i < size1; ++ i) {
+#ifndef BOOST_UBLAS_USE_DUFF_DEVICE
+ for (size_type j = 0; j < size2; ++ j)
+ functor_type::apply (m (i, j), t);
+#else
+ size_type j (0);
+ DD (size2, 4, r, (functor_type::apply (m (i, j), t), ++ j));
+#endif
+ }
+ }
+ // Explicitly indexing column major
+ template<template <class T1, class T2> class F, class M, class T>
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ void indexing_matrix_assign_scalar (M &m, const T &t, column_major_tag) {
+ typedef F<typename M::reference, T> functor_type;
+ typedef typename M::size_type size_type;
+ size_type size2 (m.size2 ());
+ size_type size1 (m.size1 ());
+ for (size_type j = 0; j < size2; ++ j) {
+#ifndef BOOST_UBLAS_USE_DUFF_DEVICE
+ for (size_type i = 0; i < size1; ++ i)
+ functor_type::apply (m (i, j), t);
+#else
+ size_type i (0);
+ DD (size1, 4, r, (functor_type::apply (m (i, j), t), ++ i));
+#endif
+ }
+ }
+
+ // Dense (proxy) case
+ template<template <class T1, class T2> class F, class M, class T, class C>
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ void matrix_assign_scalar (M &m, const T &t, dense_proxy_tag, C) {
+ typedef C orientation_category;
+#ifdef BOOST_UBLAS_USE_INDEXING
+ indexing_matrix_assign_scalar<F> (m, t, orientation_category ());
+#elif BOOST_UBLAS_USE_ITERATING
+ iterating_matrix_assign_scalar<F> (m, t, orientation_category ());
+#else
+ typedef typename M::size_type size_type;
+ size_type size1 (m.size1 ());
+ size_type size2 (m.size2 ());
+ if (size1 >= BOOST_UBLAS_ITERATOR_THRESHOLD &&
+ size2 >= BOOST_UBLAS_ITERATOR_THRESHOLD)
+ iterating_matrix_assign_scalar<F> (m, t, orientation_category ());
+ else
+ indexing_matrix_assign_scalar<F> (m, t, orientation_category ());
+#endif
+ }
+ // Packed (proxy) row major case
+ template<template <class T1, class T2> class F, class M, class T>
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ void matrix_assign_scalar (M &m, const T &t, packed_proxy_tag, row_major_tag) {
+ typedef F<typename M::iterator2::reference, T> functor_type;
+ typedef typename M::difference_type difference_type;
+ typename M::iterator1 it1 (m.begin1 ());
+ difference_type size1 (m.end1 () - it1);
+ while (-- size1 >= 0) {
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ typename M::iterator2 it2 (it1.begin ());
+ difference_type size2 (it1.end () - it2);
+#else
+ typename M::iterator2 it2 (begin (it1, iterator1_tag ()));
+ difference_type size2 (end (it1, iterator1_tag ()) - it2);
+#endif
+ while (-- size2 >= 0)
+ functor_type::apply (*it2, t), ++ it2;
+ ++ it1;
+ }
+ }
+ // Packed (proxy) column major case
+ template<template <class T1, class T2> class F, class M, class T>
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ void matrix_assign_scalar (M &m, const T &t, packed_proxy_tag, column_major_tag) {
+ typedef F<typename M::iterator1::reference, T> functor_type;
+ typedef typename M::difference_type difference_type;
+ typename M::iterator2 it2 (m.begin2 ());
+ difference_type size2 (m.end2 () - it2);
+ while (-- size2 >= 0) {
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ typename M::iterator1 it1 (it2.begin ());
+ difference_type size1 (it2.end () - it1);
+#else
+ typename M::iterator1 it1 (begin (it2, iterator2_tag ()));
+ difference_type size1 (end (it2, iterator2_tag ()) - it1);
+#endif
+ while (-- size1 >= 0)
+ functor_type::apply (*it1, t), ++ it1;
+ ++ it2;
+ }
+ }
+ // Sparse (proxy) row major case
+ template<template <class T1, class T2> class F, class M, class T>
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ void matrix_assign_scalar (M &m, const T &t, sparse_proxy_tag, row_major_tag) {
+ typedef F<typename M::iterator2::reference, T> functor_type;
+ typename M::iterator1 it1 (m.begin1 ());
+ typename M::iterator1 it1_end (m.end1 ());
+ while (it1 != it1_end) {
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ typename M::iterator2 it2 (it1.begin ());
+ typename M::iterator2 it2_end (it1.end ());
+#else
+ typename M::iterator2 it2 (begin (it1, iterator1_tag ()));
+ typename M::iterator2 it2_end (end (it1, iterator1_tag ()));
+#endif
+ while (it2 != it2_end)
+ functor_type::apply (*it2, t), ++ it2;
+ ++ it1;
+ }
+ }
+ // Sparse (proxy) column major case
+ template<template <class T1, class T2> class F, class M, class T>
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ void matrix_assign_scalar (M &m, const T &t, sparse_proxy_tag, column_major_tag) {
+ typedef F<typename M::iterator1::reference, T> functor_type;
+ typename M::iterator2 it2 (m.begin2 ());
+ typename M::iterator2 it2_end (m.end2 ());
+ while (it2 != it2_end) {
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ typename M::iterator1 it1 (it2.begin ());
+ typename M::iterator1 it1_end (it2.end ());
+#else
+ typename M::iterator1 it1 (begin (it2, iterator2_tag ()));
+ typename M::iterator1 it1_end (end (it2, iterator2_tag ()));
+#endif
+ while (it1 != it1_end)
+ functor_type::apply (*it1, t), ++ it1;
+ ++ it2;
+ }
+ }
+
+ // Dispatcher
+ template<template <class T1, class T2> class F, class M, class T>
+ BOOST_UBLAS_INLINE
+ void matrix_assign_scalar (M &m, const T &t) {
+ typedef typename M::storage_category storage_category;
+ typedef typename M::orientation_category orientation_category;
+ matrix_assign_scalar<F> (m, t, storage_category (), orientation_category ());
+ }
+
+ template<class SC, bool COMPUTED, class RI1, class RI2>
+ struct matrix_assign_traits {
+ typedef SC storage_category;
+ };
+
+ template<bool COMPUTED>
+ struct matrix_assign_traits<dense_tag, COMPUTED, packed_random_access_iterator_tag, packed_random_access_iterator_tag> {
+ typedef packed_tag storage_category;
+ };
+ template<>
+ struct matrix_assign_traits<dense_tag, false, sparse_bidirectional_iterator_tag, sparse_bidirectional_iterator_tag> {
+ typedef sparse_tag storage_category;
+ };
+ template<>
+ struct matrix_assign_traits<dense_tag, true, sparse_bidirectional_iterator_tag, sparse_bidirectional_iterator_tag> {
+ typedef sparse_proxy_tag storage_category;
+ };
+
+ template<bool COMPUTED>
+ struct matrix_assign_traits<dense_proxy_tag, COMPUTED, packed_random_access_iterator_tag, packed_random_access_iterator_tag> {
+ typedef packed_proxy_tag storage_category;
+ };
+ template<bool COMPUTED>
+ struct matrix_assign_traits<dense_proxy_tag, COMPUTED, sparse_bidirectional_iterator_tag, sparse_bidirectional_iterator_tag> {
+ typedef sparse_proxy_tag storage_category;
+ };
+
+ template<>
+ struct matrix_assign_traits<packed_tag, false, sparse_bidirectional_iterator_tag, sparse_bidirectional_iterator_tag> {
+ typedef sparse_tag storage_category;
+ };
+ template<>
+ struct matrix_assign_traits<packed_tag, true, sparse_bidirectional_iterator_tag, sparse_bidirectional_iterator_tag> {
+ typedef sparse_proxy_tag storage_category;
+ };
+
+ template<bool COMPUTED>
+ struct matrix_assign_traits<packed_proxy_tag, COMPUTED, sparse_bidirectional_iterator_tag, sparse_bidirectional_iterator_tag> {
+ typedef sparse_proxy_tag storage_category;
+ };
+
+ template<>
+ struct matrix_assign_traits<sparse_tag, true, dense_random_access_iterator_tag, dense_random_access_iterator_tag> {
+ typedef sparse_proxy_tag storage_category;
+ };
+ template<>
+ struct matrix_assign_traits<sparse_tag, true, packed_random_access_iterator_tag, packed_random_access_iterator_tag> {
+ typedef sparse_proxy_tag storage_category;
+ };
+ template<>
+ struct matrix_assign_traits<sparse_tag, true, sparse_bidirectional_iterator_tag, sparse_bidirectional_iterator_tag> {
+ typedef sparse_proxy_tag storage_category;
+ };
+
+ // Explicitly iterating row major
+ template<template <class T1, class T2> class F, class M, class E>
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ void iterating_matrix_assign (M &m, const matrix_expression<E> &e, row_major_tag) {
+ typedef F<typename M::iterator2::reference, typename E::value_type> functor_type;
+ typedef typename M::difference_type difference_type;
+ difference_type size1 (BOOST_UBLAS_SAME (m.size1 (), e ().size1 ()));
+ difference_type size2 (BOOST_UBLAS_SAME (m.size2 (), e ().size2 ()));
+ typename M::iterator1 it1 (m.begin1 ());
+ BOOST_UBLAS_CHECK (size2 == 0 || m.end1 () - it1 == size1, bad_size ());
+ typename E::const_iterator1 it1e (e ().begin1 ());
+ BOOST_UBLAS_CHECK (size2 == 0 || e ().end1 () - it1e == size1, bad_size ());
+ while (-- size1 >= 0) {
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ typename M::iterator2 it2 (it1.begin ());
+ typename E::const_iterator2 it2e (it1e.begin ());
+#else
+ typename M::iterator2 it2 (begin (it1, iterator1_tag ()));
+ typename E::const_iterator2 it2e (begin (it1e, iterator1_tag ()));
+#endif
+ BOOST_UBLAS_CHECK (it1.end () - it2 == size2, bad_size ());
+ BOOST_UBLAS_CHECK (it1e.end () - it2e == size2, bad_size ());
+ difference_type temp_size2 (size2);
+#ifndef BOOST_UBLAS_USE_DUFF_DEVICE
+ while (-- temp_size2 >= 0)
+ functor_type::apply (*it2, *it2e), ++ it2, ++ it2e;
+#else
+ DD (temp_size2, 2, r, (functor_type::apply (*it2, *it2e), ++ it2, ++ it2e));
+#endif
+ ++ it1, ++ it1e;
+ }
+ }
+ // Explicitly iterating column major
+ template<template <class T1, class T2> class F, class M, class E>
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ void iterating_matrix_assign (M &m, const matrix_expression<E> &e, column_major_tag) {
+ typedef F<typename M::iterator1::reference, typename E::value_type> functor_type;
+ typedef typename M::difference_type difference_type;
+ difference_type size2 (BOOST_UBLAS_SAME (m.size2 (), e ().size2 ()));
+ difference_type size1 (BOOST_UBLAS_SAME (m.size1 (), e ().size1 ()));
+ typename M::iterator2 it2 (m.begin2 ());
+ BOOST_UBLAS_CHECK (size1 == 0 || m.end2 () - it2 == size2, bad_size ());
+ typename E::const_iterator2 it2e (e ().begin2 ());
+ BOOST_UBLAS_CHECK (size1 == 0 || e ().end2 () - it2e == size2, bad_size ());
+ while (-- size2 >= 0) {
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ typename M::iterator1 it1 (it2.begin ());
+ typename E::const_iterator1 it1e (it2e.begin ());
+#else
+ typename M::iterator1 it1 (begin (it2, iterator2_tag ()));
+ typename E::const_iterator1 it1e (begin (it2e, iterator2_tag ()));
+#endif
+ BOOST_UBLAS_CHECK (it2.end () - it1 == size1, bad_size ());
+ BOOST_UBLAS_CHECK (it2e.end () - it1e == size1, bad_size ());
+ difference_type temp_size1 (size1);
+#ifndef BOOST_UBLAS_USE_DUFF_DEVICE
+ while (-- temp_size1 >= 0)
+ functor_type::apply (*it1, *it1e), ++ it1, ++ it1e;
+#else
+ DD (temp_size1, 2, r, (functor_type::apply (*it1, *it1e), ++ it1, ++ it1e));
+#endif
+ ++ it2, ++ it2e;
+ }
+ }
+ // Explicitly indexing row major
+ template<template <class T1, class T2> class F, class M, class E>
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ void indexing_matrix_assign (M &m, const matrix_expression<E> &e, row_major_tag) {
+ typedef F<typename M::reference, typename E::value_type> functor_type;
+ typedef typename M::size_type size_type;
+ size_type size1 (BOOST_UBLAS_SAME (m.size1 (), e ().size1 ()));
+ size_type size2 (BOOST_UBLAS_SAME (m.size2 (), e ().size2 ()));
+ for (size_type i = 0; i < size1; ++ i) {
+#ifndef BOOST_UBLAS_USE_DUFF_DEVICE
+ for (size_type j = 0; j < size2; ++ j)
+ functor_type::apply (m (i, j), e () (i, j));
+#else
+ size_type j (0);
+ DD (size2, 2, r, (functor_type::apply (m (i, j), e () (i, j)), ++ j));
+#endif
+ }
+ }
+ // Explicitly indexing column major
+ template<template <class T1, class T2> class F, class M, class E>
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ void indexing_matrix_assign (M &m, const matrix_expression<E> &e, column_major_tag) {
+ typedef F<typename M::reference, typename E::value_type> functor_type;
+ typedef typename M::size_type size_type;
+ size_type size2 (BOOST_UBLAS_SAME (m.size2 (), e ().size2 ()));
+ size_type size1 (BOOST_UBLAS_SAME (m.size1 (), e ().size1 ()));
+ for (size_type j = 0; j < size2; ++ j) {
+#ifndef BOOST_UBLAS_USE_DUFF_DEVICE
+ for (size_type i = 0; i < size1; ++ i)
+ functor_type::apply (m (i, j), e () (i, j));
+#else
+ size_type i (0);
+ DD (size1, 2, r, (functor_type::apply (m (i, j), e () (i, j)), ++ i));
+#endif
+ }
+ }
+
+ // Dense (proxy) case
+ template<template <class T1, class T2> class F, class R, class M, class E, class C>
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ void matrix_assign (M &m, const matrix_expression<E> &e, dense_proxy_tag, C) {
+ // R unnecessary, make_conformant not required
+ typedef C orientation_category;
+#ifdef BOOST_UBLAS_USE_INDEXING
+ indexing_matrix_assign<F> (m, e, orientation_category ());
+#elif BOOST_UBLAS_USE_ITERATING
+ iterating_matrix_assign<F> (m, e, orientation_category ());
+#else
+ typedef typename M::difference_type difference_type;
+ size_type size1 (BOOST_UBLAS_SAME (m.size1 (), e ().size1 ()));
+ size_type size2 (BOOST_UBLAS_SAME (m.size2 (), e ().size2 ()));
+ if (size1 >= BOOST_UBLAS_ITERATOR_THRESHOLD &&
+ size2 >= BOOST_UBLAS_ITERATOR_THRESHOLD)
+ iterating_matrix_assign<F> (m, e, orientation_category ());
+ else
+ indexing_matrix_assign<F> (m, e, orientation_category ());
+#endif
+ }
+ // Packed (proxy) row major case
+ template<template <class T1, class T2> class F, class R, class M, class E>
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ void matrix_assign (M &m, const matrix_expression<E> &e, packed_proxy_tag, row_major_tag) {
+ typedef F<typename M::iterator2::reference, typename E::value_type> functor_type;
+ // R unnecessary, make_conformant not required
+ typedef typename M::difference_type difference_type;
+ typedef typename M::value_type value_type;
+ BOOST_UBLAS_CHECK (m.size1 () == e ().size1 (), bad_size ());
+ BOOST_UBLAS_CHECK (m.size2 () == e ().size2 (), bad_size ());
+#if BOOST_UBLAS_TYPE_CHECK
+ matrix<value_type, row_major> cm (m.size1 (), m.size2 ());
+ indexing_matrix_assign<scalar_assign> (cm, m, row_major_tag ());
+ indexing_matrix_assign<F> (cm, e, row_major_tag ());
+#endif
+ typename M::iterator1 it1 (m.begin1 ());
+ typename M::iterator1 it1_end (m.end1 ());
+ typename E::const_iterator1 it1e (e ().begin1 ());
+ typename E::const_iterator1 it1e_end (e ().end1 ());
+ difference_type it1_size (it1_end - it1);
+ difference_type it1e_size (it1e_end - it1e);
+ difference_type diff1 (0);
+ if (it1_size > 0 && it1e_size > 0)
+ diff1 = it1.index1 () - it1e.index1 ();
+ if (diff1 != 0) {
+ difference_type size1 = (std::min) (diff1, it1e_size);
+ if (size1 > 0) {
+ it1e += size1;
+ it1e_size -= size1;
+ diff1 -= size1;
+ }
+ size1 = (std::min) (- diff1, it1_size);
+ if (size1 > 0) {
+ it1_size -= size1;
+ if (!functor_type::computed) {
+ while (-- size1 >= 0) { // zeroing
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ typename M::iterator2 it2 (it1.begin ());
+ typename M::iterator2 it2_end (it1.end ());
+#else
+ typename M::iterator2 it2 (begin (it1, iterator1_tag ()));
+ typename M::iterator2 it2_end (end (it1, iterator1_tag ()));
+#endif
+ difference_type size2 (it2_end - it2);
+ while (-- size2 >= 0)
+ functor_type::apply (*it2, value_type/*zero*/()), ++ it2;
+ ++ it1;
+ }
+ } else {
+ it1 += size1;
+ }
+ diff1 += size1;
+ }
+ }
+ difference_type size1 ((std::min) (it1_size, it1e_size));
+ it1_size -= size1;
+ it1e_size -= size1;
+ while (-- size1 >= 0) {
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ typename M::iterator2 it2 (it1.begin ());
+ typename M::iterator2 it2_end (it1.end ());
+ typename E::const_iterator2 it2e (it1e.begin ());
+ typename E::const_iterator2 it2e_end (it1e.end ());
+#else
+ typename M::iterator2 it2 (begin (it1, iterator1_tag ()));
+ typename M::iterator2 it2_end (end (it1, iterator1_tag ()));
+ typename E::const_iterator2 it2e (begin (it1e, iterator1_tag ()));
+ typename E::const_iterator2 it2e_end (end (it1e, iterator1_tag ()));
+#endif
+ difference_type it2_size (it2_end - it2);
+ difference_type it2e_size (it2e_end - it2e);
+ difference_type diff2 (0);
+ if (it2_size > 0 && it2e_size > 0) {
+ diff2 = it2.index2 () - it2e.index2 ();
+ difference_type size2 = (std::min) (diff2, it2e_size);
+ if (size2 > 0) {
+ it2e += size2;
+ it2e_size -= size2;
+ diff2 -= size2;
+ }
+ size2 = (std::min) (- diff2, it2_size);
+ if (size2 > 0) {
+ it2_size -= size2;
+ if (!functor_type::computed) {
+ while (-- size2 >= 0) // zeroing
+ functor_type::apply (*it2, value_type/*zero*/()), ++ it2;
+ } else {
+ it2 += size2;
+ }
+ diff2 += size2;
+ }
+ }
+ difference_type size2 ((std::min) (it2_size, it2e_size));
+ it2_size -= size2;
+ it2e_size -= size2;
+ while (-- size2 >= 0)
+ functor_type::apply (*it2, *it2e), ++ it2, ++ it2e;
+ size2 = it2_size;
+ if (!functor_type::computed) {
+ while (-- size2 >= 0) // zeroing
+ functor_type::apply (*it2, value_type/*zero*/()), ++ it2;
+ } else {
+ it2 += size2;
+ }
+ ++ it1, ++ it1e;
+ }
+ size1 = it1_size;
+ if (!functor_type::computed) {
+ while (-- size1 >= 0) { // zeroing
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ typename M::iterator2 it2 (it1.begin ());
+ typename M::iterator2 it2_end (it1.end ());
+#else
+ typename M::iterator2 it2 (begin (it1, iterator1_tag ()));
+ typename M::iterator2 it2_end (end (it1, iterator1_tag ()));
+#endif
+ difference_type size2 (it2_end - it2);
+ while (-- size2 >= 0)
+ functor_type::apply (*it2, value_type/*zero*/()), ++ it2;
+ ++ it1;
+ }
+ } else {
+ it1 += size1;
+ }
+#if BOOST_UBLAS_TYPE_CHECK
+ if (! disable_type_check<bool>::value)
+ BOOST_UBLAS_CHECK (detail::expression_type_check (m, cm), external_logic ());
+#endif
+ }
+ // Packed (proxy) column major case
+ template<template <class T1, class T2> class F, class R, class M, class E>
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ void matrix_assign (M &m, const matrix_expression<E> &e, packed_proxy_tag, column_major_tag) {
+ typedef F<typename M::iterator1::reference, typename E::value_type> functor_type;
+ // R unnecessary, make_conformant not required
+ typedef typename M::difference_type difference_type;
+ typedef typename M::value_type value_type;
+ BOOST_UBLAS_CHECK (m.size2 () == e ().size2 (), bad_size ());
+ BOOST_UBLAS_CHECK (m.size1 () == e ().size1 (), bad_size ());
+#if BOOST_UBLAS_TYPE_CHECK
+ matrix<value_type, column_major> cm (m.size1 (), m.size2 ());
+ indexing_matrix_assign<scalar_assign> (cm, m, column_major_tag ());
+ indexing_matrix_assign<F> (cm, e, column_major_tag ());
+#endif
+ typename M::iterator2 it2 (m.begin2 ());
+ typename M::iterator2 it2_end (m.end2 ());
+ typename E::const_iterator2 it2e (e ().begin2 ());
+ typename E::const_iterator2 it2e_end (e ().end2 ());
+ difference_type it2_size (it2_end - it2);
+ difference_type it2e_size (it2e_end - it2e);
+ difference_type diff2 (0);
+ if (it2_size > 0 && it2e_size > 0)
+ diff2 = it2.index2 () - it2e.index2 ();
+ if (diff2 != 0) {
+ difference_type size2 = (std::min) (diff2, it2e_size);
+ if (size2 > 0) {
+ it2e += size2;
+ it2e_size -= size2;
+ diff2 -= size2;
+ }
+ size2 = (std::min) (- diff2, it2_size);
+ if (size2 > 0) {
+ it2_size -= size2;
+ if (!functor_type::computed) {
+ while (-- size2 >= 0) { // zeroing
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ typename M::iterator1 it1 (it2.begin ());
+ typename M::iterator1 it1_end (it2.end ());
+#else
+ typename M::iterator1 it1 (begin (it2, iterator2_tag ()));
+ typename M::iterator1 it1_end (end (it2, iterator2_tag ()));
+#endif
+ difference_type size1 (it1_end - it1);
+ while (-- size1 >= 0)
+ functor_type::apply (*it1, value_type/*zero*/()), ++ it1;
+ ++ it2;
+ }
+ } else {
+ it2 += size2;
+ }
+ diff2 += size2;
+ }
+ }
+ difference_type size2 ((std::min) (it2_size, it2e_size));
+ it2_size -= size2;
+ it2e_size -= size2;
+ while (-- size2 >= 0) {
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ typename M::iterator1 it1 (it2.begin ());
+ typename M::iterator1 it1_end (it2.end ());
+ typename E::const_iterator1 it1e (it2e.begin ());
+ typename E::const_iterator1 it1e_end (it2e.end ());
+#else
+ typename M::iterator1 it1 (begin (it2, iterator2_tag ()));
+ typename M::iterator1 it1_end (end (it2, iterator2_tag ()));
+ typename E::const_iterator1 it1e (begin (it2e, iterator2_tag ()));
+ typename E::const_iterator1 it1e_end (end (it2e, iterator2_tag ()));
+#endif
+ difference_type it1_size (it1_end - it1);
+ difference_type it1e_size (it1e_end - it1e);
+ difference_type diff1 (0);
+ if (it1_size > 0 && it1e_size > 0) {
+ diff1 = it1.index1 () - it1e.index1 ();
+ difference_type size1 = (std::min) (diff1, it1e_size);
+ if (size1 > 0) {
+ it1e += size1;
+ it1e_size -= size1;
+ diff1 -= size1;
+ }
+ size1 = (std::min) (- diff1, it1_size);
+ if (size1 > 0) {
+ it1_size -= size1;
+ if (!functor_type::computed) {
+ while (-- size1 >= 0) // zeroing
+ functor_type::apply (*it1, value_type/*zero*/()), ++ it1;
+ } else {
+ it1 += size1;
+ }
+ diff1 += size1;
+ }
+ }
+ difference_type size1 ((std::min) (it1_size, it1e_size));
+ it1_size -= size1;
+ it1e_size -= size1;
+ while (-- size1 >= 0)
+ functor_type::apply (*it1, *it1e), ++ it1, ++ it1e;
+ size1 = it1_size;
+ if (!functor_type::computed) {
+ while (-- size1 >= 0) // zeroing
+ functor_type::apply (*it1, value_type/*zero*/()), ++ it1;
+ } else {
+ it1 += size1;
+ }
+ ++ it2, ++ it2e;
+ }
+ size2 = it2_size;
+ if (!functor_type::computed) {
+ while (-- size2 >= 0) { // zeroing
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ typename M::iterator1 it1 (it2.begin ());
+ typename M::iterator1 it1_end (it2.end ());
+#else
+ typename M::iterator1 it1 (begin (it2, iterator2_tag ()));
+ typename M::iterator1 it1_end (end (it2, iterator2_tag ()));
+#endif
+ difference_type size1 (it1_end - it1);
+ while (-- size1 >= 0)
+ functor_type::apply (*it1, value_type/*zero*/()), ++ it1;
+ ++ it2;
+ }
+ } else {
+ it2 += size2;
+ }
+#if BOOST_UBLAS_TYPE_CHECK
+ if (! disable_type_check<bool>::value)
+ BOOST_UBLAS_CHECK (detail::expression_type_check (m, cm), external_logic ());
+#endif
+ }
+ // Sparse row major case
+ template<template <class T1, class T2> class F, class R, class M, class E>
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ void matrix_assign (M &m, const matrix_expression<E> &e, sparse_tag, row_major_tag) {
+ typedef F<typename M::iterator2::reference, typename E::value_type> functor_type;
+ // R unnecessary, make_conformant not required
+ BOOST_STATIC_ASSERT ((!functor_type::computed));
+ BOOST_UBLAS_CHECK (m.size1 () == e ().size1 (), bad_size ());
+ BOOST_UBLAS_CHECK (m.size2 () == e ().size2 (), bad_size ());
+ typedef typename M::value_type value_type;
+ // Sparse type has no numeric constraints to check
+
+ m.clear ();
+ typename E::const_iterator1 it1e (e ().begin1 ());
+ typename E::const_iterator1 it1e_end (e ().end1 ());
+ while (it1e != it1e_end) {
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ typename E::const_iterator2 it2e (it1e.begin ());
+ typename E::const_iterator2 it2e_end (it1e.end ());
+#else
+ typename E::const_iterator2 it2e (begin (it1e, iterator1_tag ()));
+ typename E::const_iterator2 it2e_end (end (it1e, iterator1_tag ()));
+#endif
+ while (it2e != it2e_end) {
+ value_type t (*it2e);
+ if (t != value_type/*zero*/())
+ m.insert_element (it2e.index1 (), it2e.index2 (), t);
+ ++ it2e;
+ }
+ ++ it1e;
+ }
+ }
+ // Sparse column major case
+ template<template <class T1, class T2> class F, class R, class M, class E>
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ void matrix_assign (M &m, const matrix_expression<E> &e, sparse_tag, column_major_tag) {
+ typedef F<typename M::iterator1::reference, typename E::value_type> functor_type;
+ // R unnecessary, make_conformant not required
+ BOOST_STATIC_ASSERT ((!functor_type::computed));
+ BOOST_UBLAS_CHECK (m.size1 () == e ().size1 (), bad_size ());
+ BOOST_UBLAS_CHECK (m.size2 () == e ().size2 (), bad_size ());
+ typedef typename M::value_type value_type;
+ // Sparse type has no numeric constraints to check
+
+ m.clear ();
+ typename E::const_iterator2 it2e (e ().begin2 ());
+ typename E::const_iterator2 it2e_end (e ().end2 ());
+ while (it2e != it2e_end) {
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ typename E::const_iterator1 it1e (it2e.begin ());
+ typename E::const_iterator1 it1e_end (it2e.end ());
+#else
+ typename E::const_iterator1 it1e (begin (it2e, iterator2_tag ()));
+ typename E::const_iterator1 it1e_end (end (it2e, iterator2_tag ()));
+#endif
+ while (it1e != it1e_end) {
+ value_type t (*it1e);
+ if (t != value_type/*zero*/())
+ m.insert_element (it1e.index1 (), it1e.index2 (), t);
+ ++ it1e;
+ }
+ ++ it2e;
+ }
+ }
+ // Sparse proxy or functional row major case
+ template<template <class T1, class T2> class F, class R, class M, class E>
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ void matrix_assign (M &m, const matrix_expression<E> &e, sparse_proxy_tag, row_major_tag) {
+ typedef F<typename M::iterator2::reference, typename E::value_type> functor_type;
+ typedef R conformant_restrict_type;
+ typedef typename M::size_type size_type;
+ typedef typename M::difference_type difference_type;
+ typedef typename M::value_type value_type;
+ BOOST_UBLAS_CHECK (m.size1 () == e ().size1 (), bad_size ());
+ BOOST_UBLAS_CHECK (m.size2 () == e ().size2 (), bad_size ());
+#if BOOST_UBLAS_TYPE_CHECK
+ matrix<value_type, row_major> cm (m.size1 (), m.size2 ());
+ indexing_matrix_assign<scalar_assign> (cm, m, row_major_tag ());
+ indexing_matrix_assign<F> (cm, e, row_major_tag ());
+#endif
+ detail::make_conformant (m, e, row_major_tag (), conformant_restrict_type ());
+
+ typename M::iterator1 it1 (m.begin1 ());
+ typename M::iterator1 it1_end (m.end1 ());
+ typename E::const_iterator1 it1e (e ().begin1 ());
+ typename E::const_iterator1 it1e_end (e ().end1 ());
+ while (it1 != it1_end && it1e != it1e_end) {
+ difference_type compare = it1.index1 () - it1e.index1 ();
+ if (compare == 0) {
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ typename M::iterator2 it2 (it1.begin ());
+ typename M::iterator2 it2_end (it1.end ());
+ typename E::const_iterator2 it2e (it1e.begin ());
+ typename E::const_iterator2 it2e_end (it1e.end ());
+#else
+ typename M::iterator2 it2 (begin (it1, iterator1_tag ()));
+ typename M::iterator2 it2_end (end (it1, iterator1_tag ()));
+ typename E::const_iterator2 it2e (begin (it1e, iterator1_tag ()));
+ typename E::const_iterator2 it2e_end (end (it1e, iterator1_tag ()));
+#endif
+ if (it2 != it2_end && it2e != it2e_end) {
+ size_type it2_index = it2.index2 (), it2e_index = it2e.index2 ();
+ while (true) {
+ difference_type compare = it2_index - it2e_index;
+ if (compare == 0) {
+ functor_type::apply (*it2, *it2e);
+ ++ it2, ++ it2e;
+ if (it2 != it2_end && it2e != it2e_end) {
+ it2_index = it2.index2 ();
+ it2e_index = it2e.index2 ();
+ } else
+ break;
+ } else if (compare < 0) {
+ if (!functor_type::computed) {
+ functor_type::apply (*it2, value_type/*zero*/());
+ ++ it2;
+ } else
+ increment (it2, it2_end, - compare);
+ if (it2 != it2_end)
+ it2_index = it2.index2 ();
+ else
+ break;
+ } else if (compare > 0) {
+ increment (it2e, it2e_end, compare);
+ if (it2e != it2e_end)
+ it2e_index = it2e.index2 ();
+ else
+ break;
+ }
+ }
+ }
+ if (!functor_type::computed) {
+ while (it2 != it2_end) { // zeroing
+ functor_type::apply (*it2, value_type/*zero*/());
+ ++ it2;
+ }
+ } else {
+ it2 = it2_end;
+ }
+ ++ it1, ++ it1e;
+ } else if (compare < 0) {
+ if (!functor_type::computed) {
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ typename M::iterator2 it2 (it1.begin ());
+ typename M::iterator2 it2_end (it1.end ());
+#else
+ typename M::iterator2 it2 (begin (it1, iterator1_tag ()));
+ typename M::iterator2 it2_end (end (it1, iterator1_tag ()));
+#endif
+ while (it2 != it2_end) { // zeroing
+ functor_type::apply (*it2, value_type/*zero*/());
+ ++ it2;
+ }
+ ++ it1;
+ } else {
+ increment (it1, it1_end, - compare);
+ }
+ } else if (compare > 0) {
+ increment (it1e, it1e_end, compare);
+ }
+ }
+ if (!functor_type::computed) {
+ while (it1 != it1_end) {
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ typename M::iterator2 it2 (it1.begin ());
+ typename M::iterator2 it2_end (it1.end ());
+#else
+ typename M::iterator2 it2 (begin (it1, iterator1_tag ()));
+ typename M::iterator2 it2_end (end (it1, iterator1_tag ()));
+#endif
+ while (it2 != it2_end) { // zeroing
+ functor_type::apply (*it2, value_type/*zero*/());
+ ++ it2;
+ }
+ ++ it1;
+ }
+ } else {
+ it1 = it1_end;
+ }
+#if BOOST_UBLAS_TYPE_CHECK
+ if (! disable_type_check<bool>::value)
+ BOOST_UBLAS_CHECK (detail::expression_type_check (m, cm), external_logic ());
+#endif
+ }
+ // Sparse proxy or functional column major case
+ template<template <class T1, class T2> class F, class R, class M, class E>
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ void matrix_assign (M &m, const matrix_expression<E> &e, sparse_proxy_tag, column_major_tag) {
+ typedef F<typename M::iterator1::reference, typename E::value_type> functor_type;
+ typedef R conformant_restrict_type;
+ typedef typename M::size_type size_type;
+ typedef typename M::difference_type difference_type;
+ typedef typename M::value_type value_type;
+ BOOST_UBLAS_CHECK (m.size1 () == e ().size1 (), bad_size ());
+ BOOST_UBLAS_CHECK (m.size2 () == e ().size2 (), bad_size ());
+#if BOOST_UBLAS_TYPE_CHECK
+ matrix<value_type, column_major> cm (m.size1 (), m.size2 ());
+ indexing_matrix_assign<scalar_assign> (cm, m, column_major_tag ());
+ indexing_matrix_assign<F> (cm, e, column_major_tag ());
+#endif
+ detail::make_conformant (m, e, column_major_tag (), conformant_restrict_type ());
+
+ typename M::iterator2 it2 (m.begin2 ());
+ typename M::iterator2 it2_end (m.end2 ());
+ typename E::const_iterator2 it2e (e ().begin2 ());
+ typename E::const_iterator2 it2e_end (e ().end2 ());
+ while (it2 != it2_end && it2e != it2e_end) {
+ difference_type compare = it2.index2 () - it2e.index2 ();
+ if (compare == 0) {
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ typename M::iterator1 it1 (it2.begin ());
+ typename M::iterator1 it1_end (it2.end ());
+ typename E::const_iterator1 it1e (it2e.begin ());
+ typename E::const_iterator1 it1e_end (it2e.end ());
+#else
+ typename M::iterator1 it1 (begin (it2, iterator2_tag ()));
+ typename M::iterator1 it1_end (end (it2, iterator2_tag ()));
+ typename E::const_iterator1 it1e (begin (it2e, iterator2_tag ()));
+ typename E::const_iterator1 it1e_end (end (it2e, iterator2_tag ()));
+#endif
+ if (it1 != it1_end && it1e != it1e_end) {
+ size_type it1_index = it1.index1 (), it1e_index = it1e.index1 ();
+ while (true) {
+ difference_type compare = it1_index - it1e_index;
+ if (compare == 0) {
+ functor_type::apply (*it1, *it1e);
+ ++ it1, ++ it1e;
+ if (it1 != it1_end && it1e != it1e_end) {
+ it1_index = it1.index1 ();
+ it1e_index = it1e.index1 ();
+ } else
+ break;
+ } else if (compare < 0) {
+ if (!functor_type::computed) {
+ functor_type::apply (*it1, value_type/*zero*/()); // zeroing
+ ++ it1;
+ } else
+ increment (it1, it1_end, - compare);
+ if (it1 != it1_end)
+ it1_index = it1.index1 ();
+ else
+ break;
+ } else if (compare > 0) {
+ increment (it1e, it1e_end, compare);
+ if (it1e != it1e_end)
+ it1e_index = it1e.index1 ();
+ else
+ break;
+ }
+ }
+ }
+ if (!functor_type::computed) {
+ while (it1 != it1_end) { // zeroing
+ functor_type::apply (*it1, value_type/*zero*/());
+ ++ it1;
+ }
+ } else {
+ it1 = it1_end;
+ }
+ ++ it2, ++ it2e;
+ } else if (compare < 0) {
+ if (!functor_type::computed) {
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ typename M::iterator1 it1 (it2.begin ());
+ typename M::iterator1 it1_end (it2.end ());
+#else
+ typename M::iterator1 it1 (begin (it2, iterator2_tag ()));
+ typename M::iterator1 it1_end (end (it2, iterator2_tag ()));
+#endif
+ while (it1 != it1_end) { // zeroing
+ functor_type::apply (*it1, value_type/*zero*/());
+ ++ it1;
+ }
+ ++ it2;
+ } else {
+ increment (it2, it2_end, - compare);
+ }
+ } else if (compare > 0) {
+ increment (it2e, it2e_end, compare);
+ }
+ }
+ if (!functor_type::computed) {
+ while (it2 != it2_end) {
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ typename M::iterator1 it1 (it2.begin ());
+ typename M::iterator1 it1_end (it2.end ());
+#else
+ typename M::iterator1 it1 (begin (it2, iterator2_tag ()));
+ typename M::iterator1 it1_end (end (it2, iterator2_tag ()));
+#endif
+ while (it1 != it1_end) { // zeroing
+ functor_type::apply (*it1, value_type/*zero*/());
+ ++ it1;
+ }
+ ++ it2;
+ }
+ } else {
+ it2 = it2_end;
+ }
+#if BOOST_UBLAS_TYPE_CHECK
+ if (! disable_type_check<bool>::value)
+ BOOST_UBLAS_CHECK (detail::expression_type_check (m, cm), external_logic ());
+#endif
+ }
+
+ // Dispatcher
+ template<template <class T1, class T2> class F, class M, class E>
+ BOOST_UBLAS_INLINE
+ void matrix_assign (M &m, const matrix_expression<E> &e) {
+ typedef typename matrix_assign_traits<typename M::storage_category,
+ F<typename M::reference, typename E::value_type>::computed,
+ typename E::const_iterator1::iterator_category,
+ typename E::const_iterator2::iterator_category>::storage_category storage_category;
+ // give preference to matrix M's orientation if known
+ typedef typename boost::mpl::if_<boost::is_same<typename M::orientation_category, unknown_orientation_tag>,
+ typename E::orientation_category ,
+ typename M::orientation_category >::type orientation_category;
+ typedef basic_full<typename M::size_type> unrestricted;
+ matrix_assign<F, unrestricted> (m, e, storage_category (), orientation_category ());
+ }
+ template<template <class T1, class T2> class F, class R, class M, class E>
+ BOOST_UBLAS_INLINE
+ void matrix_assign (M &m, const matrix_expression<E> &e) {
+ typedef R conformant_restrict_type;
+ typedef typename matrix_assign_traits<typename M::storage_category,
+ F<typename M::reference, typename E::value_type>::computed,
+ typename E::const_iterator1::iterator_category,
+ typename E::const_iterator2::iterator_category>::storage_category storage_category;
+ // give preference to matrix M's orientation if known
+ typedef typename boost::mpl::if_<boost::is_same<typename M::orientation_category, unknown_orientation_tag>,
+ typename E::orientation_category ,
+ typename M::orientation_category >::type orientation_category;
+ matrix_assign<F, conformant_restrict_type> (m, e, storage_category (), orientation_category ());
+ }
+
+ template<class SC, class RI1, class RI2>
+ struct matrix_swap_traits {
+ typedef SC storage_category;
+ };
+
+ template<>
+ struct matrix_swap_traits<dense_proxy_tag, sparse_bidirectional_iterator_tag, sparse_bidirectional_iterator_tag> {
+ typedef sparse_proxy_tag storage_category;
+ };
+
+ template<>
+ struct matrix_swap_traits<packed_proxy_tag, sparse_bidirectional_iterator_tag, sparse_bidirectional_iterator_tag> {
+ typedef sparse_proxy_tag storage_category;
+ };
+
+ // Dense (proxy) row major case
+ template<template <class T1, class T2> class F, class R, class M, class E>
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ void matrix_swap (M &m, matrix_expression<E> &e, dense_proxy_tag, row_major_tag) {
+ typedef F<typename M::iterator2::reference, typename E::reference> functor_type;
+ // R unnecessary, make_conformant not required
+ typedef typename M::size_type size_type;
+ typedef typename M::difference_type difference_type;
+ typename M::iterator1 it1 (m.begin1 ());
+ typename E::iterator1 it1e (e ().begin1 ());
+ difference_type size1 (BOOST_UBLAS_SAME (m.size1 (), size_type (e ().end1 () - it1e)));
+ while (-- size1 >= 0) {
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ typename M::iterator2 it2 (it1.begin ());
+ typename E::iterator2 it2e (it1e.begin ());
+ difference_type size2 (BOOST_UBLAS_SAME (m.size2 (), size_type (it1e.end () - it2e)));
+#else
+ typename M::iterator2 it2 (begin (it1, iterator1_tag ()));
+ typename E::iterator2 it2e (begin (it1e, iterator1_tag ()));
+ difference_type size2 (BOOST_UBLAS_SAME (m.size2 (), size_type (end (it1e, iterator1_tag ()) - it2e)));
+#endif
+ while (-- size2 >= 0)
+ functor_type::apply (*it2, *it2e), ++ it2, ++ it2e;
+ ++ it1, ++ it1e;
+ }
+ }
+ // Dense (proxy) column major case
+ template<template <class T1, class T2> class F, class R, class M, class E>
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ void matrix_swap (M &m, matrix_expression<E> &e, dense_proxy_tag, column_major_tag) {
+ typedef F<typename M::iterator1::reference, typename E::reference> functor_type;
+ // R unnecessary, make_conformant not required
+ typedef typename M::size_type size_type;
+ typedef typename M::difference_type difference_type;
+ typename M::iterator2 it2 (m.begin2 ());
+ typename E::iterator2 it2e (e ().begin2 ());
+ difference_type size2 (BOOST_UBLAS_SAME (m.size2 (), size_type (e ().end2 () - it2e)));
+ while (-- size2 >= 0) {
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ typename M::iterator1 it1 (it2.begin ());
+ typename E::iterator1 it1e (it2e.begin ());
+ difference_type size1 (BOOST_UBLAS_SAME (m.size1 (), size_type (it2e.end () - it1e)));
+#else
+ typename M::iterator1 it1 (begin (it2, iterator2_tag ()));
+ typename E::iterator1 it1e (begin (it2e, iterator2_tag ()));
+ difference_type size1 (BOOST_UBLAS_SAME (m.size1 (), size_type (end (it2e, iterator2_tag ()) - it1e)));
+#endif
+ while (-- size1 >= 0)
+ functor_type::apply (*it1, *it1e), ++ it1, ++ it1e;
+ ++ it2, ++ it2e;
+ }
+ }
+ // Packed (proxy) row major case
+ template<template <class T1, class T2> class F, class R, class M, class E>
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ void matrix_swap (M &m, matrix_expression<E> &e, packed_proxy_tag, row_major_tag) {
+ typedef F<typename M::iterator2::reference, typename E::reference> functor_type;
+ // R unnecessary, make_conformant not required
+ typedef typename M::size_type size_type;
+ typedef typename M::difference_type difference_type;
+ typename M::iterator1 it1 (m.begin1 ());
+ typename E::iterator1 it1e (e ().begin1 ());
+ difference_type size1 (BOOST_UBLAS_SAME (m.end1 () - it1, e ().end1 () - it1e));
+ while (-- size1 >= 0) {
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ typename M::iterator2 it2 (it1.begin ());
+ typename E::iterator2 it2e (it1e.begin ());
+ difference_type size2 (BOOST_UBLAS_SAME (it1.end () - it2, it1e.end () - it2e));
+#else
+ typename M::iterator2 it2 (begin (it1, iterator1_tag ()));
+ typename E::iterator2 it2e (begin (it1e, iterator1_tag ()));
+ difference_type size2 (BOOST_UBLAS_SAME (end (it1, iterator1_tag ()) - it2, end (it1e, iterator1_tag ()) - it2e));
+#endif
+ while (-- size2 >= 0)
+ functor_type::apply (*it2, *it2e), ++ it2, ++ it2e;
+ ++ it1, ++ it1e;
+ }
+ }
+ // Packed (proxy) column major case
+ template<template <class T1, class T2> class F, class R, class M, class E>
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ void matrix_swap (M &m, matrix_expression<E> &e, packed_proxy_tag, column_major_tag) {
+ typedef F<typename M::iterator1::reference, typename E::reference> functor_type;
+ // R unnecessary, make_conformant not required
+ typedef typename M::size_type size_type;
+ typedef typename M::difference_type difference_type;
+ typename M::iterator2 it2 (m.begin2 ());
+ typename E::iterator2 it2e (e ().begin2 ());
+ difference_type size2 (BOOST_UBLAS_SAME (m.end2 () - it2, e ().end2 () - it2e));
+ while (-- size2 >= 0) {
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ typename M::iterator1 it1 (it2.begin ());
+ typename E::iterator1 it1e (it2e.begin ());
+ difference_type size1 (BOOST_UBLAS_SAME (it2.end () - it1, it2e.end () - it1e));
+#else
+ typename M::iterator1 it1 (begin (it2, iterator2_tag ()));
+ typename E::iterator1 it1e (begin (it2e, iterator2_tag ()));
+ difference_type size1 (BOOST_UBLAS_SAME (end (it2, iterator2_tag ()) - it1, end (it2e, iterator2_tag ()) - it1e));
+#endif
+ while (-- size1 >= 0)
+ functor_type::apply (*it1, *it1e), ++ it1, ++ it1e;
+ ++ it2, ++ it2e;
+ }
+ }
+ // Sparse (proxy) row major case
+ template<template <class T1, class T2> class F, class R, class M, class E>
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ void matrix_swap (M &m, matrix_expression<E> &e, sparse_proxy_tag, row_major_tag) {
+ typedef F<typename M::iterator2::reference, typename E::reference> functor_type;
+ typedef R conformant_restrict_type;
+ typedef typename M::size_type size_type;
+ typedef typename M::difference_type difference_type;
+ typedef typename M::value_type value_type;
+ BOOST_UBLAS_CHECK (m.size1 () == e ().size1 (), bad_size ());
+ BOOST_UBLAS_CHECK (m.size2 () == e ().size2 (), bad_size ());
+
+ detail::make_conformant (m, e, row_major_tag (), conformant_restrict_type ());
+ // FIXME should be a seperate restriction for E
+ detail::make_conformant (e (), m, row_major_tag (), conformant_restrict_type ());
+
+ typename M::iterator1 it1 (m.begin1 ());
+ typename M::iterator1 it1_end (m.end1 ());
+ typename E::iterator1 it1e (e ().begin1 ());
+ typename E::iterator1 it1e_end (e ().end1 ());
+ while (it1 != it1_end && it1e != it1e_end) {
+ difference_type compare = it1.index1 () - it1e.index1 ();
+ if (compare == 0) {
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ typename M::iterator2 it2 (it1.begin ());
+ typename M::iterator2 it2_end (it1.end ());
+ typename E::iterator2 it2e (it1e.begin ());
+ typename E::iterator2 it2e_end (it1e.end ());
+#else
+ typename M::iterator2 it2 (begin (it1, iterator1_tag ()));
+ typename M::iterator2 it2_end (end (it1, iterator1_tag ()));
+ typename E::iterator2 it2e (begin (it1e, iterator1_tag ()));
+ typename E::iterator2 it2e_end (end (it1e, iterator1_tag ()));
+#endif
+ if (it2 != it2_end && it2e != it2e_end) {
+ size_type it2_index = it2.index2 (), it2e_index = it2e.index2 ();
+ while (true) {
+ difference_type compare = it2_index - it2e_index;
+ if (compare == 0) {
+ functor_type::apply (*it2, *it2e);
+ ++ it2, ++ it2e;
+ if (it2 != it2_end && it2e != it2e_end) {
+ it2_index = it2.index2 ();
+ it2e_index = it2e.index2 ();
+ } else
+ break;
+ } else if (compare < 0) {
+ increment (it2, it2_end, - compare);
+ if (it2 != it2_end)
+ it2_index = it2.index2 ();
+ else
+ break;
+ } else if (compare > 0) {
+ increment (it2e, it2e_end, compare);
+ if (it2e != it2e_end)
+ it2e_index = it2e.index2 ();
+ else
+ break;
+ }
+ }
+ }
+#if BOOST_UBLAS_TYPE_CHECK
+ increment (it2e, it2e_end);
+ increment (it2, it2_end);
+#endif
+ ++ it1, ++ it1e;
+ } else if (compare < 0) {
+#if BOOST_UBLAS_TYPE_CHECK
+ while (it1.index1 () < it1e.index1 ()) {
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ typename M::iterator2 it2 (it1.begin ());
+ typename M::iterator2 it2_end (it1.end ());
+#else
+ typename M::iterator2 it2 (begin (it1, iterator1_tag ()));
+ typename M::iterator2 it2_end (end (it1, iterator1_tag ()));
+#endif
+ increment (it2, it2_end);
+ ++ it1;
+ }
+#else
+ increment (it1, it1_end, - compare);
+#endif
+ } else if (compare > 0) {
+#if BOOST_UBLAS_TYPE_CHECK
+ while (it1e.index1 () < it1.index1 ()) {
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ typename E::iterator2 it2e (it1e.begin ());
+ typename E::iterator2 it2e_end (it1e.end ());
+#else
+ typename E::iterator2 it2e (begin (it1e, iterator1_tag ()));
+ typename E::iterator2 it2e_end (end (it1e, iterator1_tag ()));
+#endif
+ increment (it2e, it2e_end);
+ ++ it1e;
+ }
+#else
+ increment (it1e, it1e_end, compare);
+#endif
+ }
+ }
+#if BOOST_UBLAS_TYPE_CHECK
+ while (it1e != it1e_end) {
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ typename E::iterator2 it2e (it1e.begin ());
+ typename E::iterator2 it2e_end (it1e.end ());
+#else
+ typename E::iterator2 it2e (begin (it1e, iterator1_tag ()));
+ typename E::iterator2 it2e_end (end (it1e, iterator1_tag ()));
+#endif
+ increment (it2e, it2e_end);
+ ++ it1e;
+ }
+ while (it1 != it1_end) {
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ typename M::iterator2 it2 (it1.begin ());
+ typename M::iterator2 it2_end (it1.end ());
+#else
+ typename M::iterator2 it2 (begin (it1, iterator1_tag ()));
+ typename M::iterator2 it2_end (end (it1, iterator1_tag ()));
+#endif
+ increment (it2, it2_end);
+ ++ it1;
+ }
+#endif
+ }
+ // Sparse (proxy) column major case
+ template<template <class T1, class T2> class F, class R, class M, class E>
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ void matrix_swap (M &m, matrix_expression<E> &e, sparse_proxy_tag, column_major_tag) {
+ typedef F<typename M::iterator1::reference, typename E::reference> functor_type;
+ typedef R conformant_restrict_type;
+ typedef typename M::size_type size_type;
+ typedef typename M::difference_type difference_type;
+ typedef typename M::value_type value_type;
+ BOOST_UBLAS_CHECK (m.size1 () == e ().size1 (), bad_size ());
+ BOOST_UBLAS_CHECK (m.size2 () == e ().size2 (), bad_size ());
+
+ detail::make_conformant (m, e, column_major_tag (), conformant_restrict_type ());
+ // FIXME should be a seperate restriction for E
+ detail::make_conformant (e (), m, column_major_tag (), conformant_restrict_type ());
+
+ typename M::iterator2 it2 (m.begin2 ());
+ typename M::iterator2 it2_end (m.end2 ());
+ typename E::iterator2 it2e (e ().begin2 ());
+ typename E::iterator2 it2e_end (e ().end2 ());
+ while (it2 != it2_end && it2e != it2e_end) {
+ difference_type compare = it2.index2 () - it2e.index2 ();
+ if (compare == 0) {
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ typename M::iterator1 it1 (it2.begin ());
+ typename M::iterator1 it1_end (it2.end ());
+ typename E::iterator1 it1e (it2e.begin ());
+ typename E::iterator1 it1e_end (it2e.end ());
+#else
+ typename M::iterator1 it1 (begin (it2, iterator2_tag ()));
+ typename M::iterator1 it1_end (end (it2, iterator2_tag ()));
+ typename E::iterator1 it1e (begin (it2e, iterator2_tag ()));
+ typename E::iterator1 it1e_end (end (it2e, iterator2_tag ()));
+#endif
+ if (it1 != it1_end && it1e != it1e_end) {
+ size_type it1_index = it1.index1 (), it1e_index = it1e.index1 ();
+ while (true) {
+ difference_type compare = it1_index - it1e_index;
+ if (compare == 0) {
+ functor_type::apply (*it1, *it1e);
+ ++ it1, ++ it1e;
+ if (it1 != it1_end && it1e != it1e_end) {
+ it1_index = it1.index1 ();
+ it1e_index = it1e.index1 ();
+ } else
+ break;
+ } else if (compare < 0) {
+ increment (it1, it1_end, - compare);
+ if (it1 != it1_end)
+ it1_index = it1.index1 ();
+ else
+ break;
+ } else if (compare > 0) {
+ increment (it1e, it1e_end, compare);
+ if (it1e != it1e_end)
+ it1e_index = it1e.index1 ();
+ else
+ break;
+ }
+ }
+ }
+#if BOOST_UBLAS_TYPE_CHECK
+ increment (it1e, it1e_end);
+ increment (it1, it1_end);
+#endif
+ ++ it2, ++ it2e;
+ } else if (compare < 0) {
+#if BOOST_UBLAS_TYPE_CHECK
+ while (it2.index2 () < it2e.index2 ()) {
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ typename M::iterator1 it1 (it2.begin ());
+ typename M::iterator1 it1_end (it2.end ());
+#else
+ typename M::iterator1 it1 (begin (it2, iterator2_tag ()));
+ typename M::iterator1 it1_end (end (it2, iterator2_tag ()));
+#endif
+ increment (it1, it1_end);
+ ++ it2;
+ }
+#else
+ increment (it2, it2_end, - compare);
+#endif
+ } else if (compare > 0) {
+#if BOOST_UBLAS_TYPE_CHECK
+ while (it2e.index2 () < it2.index2 ()) {
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ typename E::iterator1 it1e (it2e.begin ());
+ typename E::iterator1 it1e_end (it2e.end ());
+#else
+ typename E::iterator1 it1e (begin (it2e, iterator2_tag ()));
+ typename E::iterator1 it1e_end (end (it2e, iterator2_tag ()));
+#endif
+ increment (it1e, it1e_end);
+ ++ it2e;
+ }
+#else
+ increment (it2e, it2e_end, compare);
+#endif
+ }
+ }
+#if BOOST_UBLAS_TYPE_CHECK
+ while (it2e != it2e_end) {
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ typename E::iterator1 it1e (it2e.begin ());
+ typename E::iterator1 it1e_end (it2e.end ());
+#else
+ typename E::iterator1 it1e (begin (it2e, iterator2_tag ()));
+ typename E::iterator1 it1e_end (end (it2e, iterator2_tag ()));
+#endif
+ increment (it1e, it1e_end);
+ ++ it2e;
+ }
+ while (it2 != it2_end) {
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ typename M::iterator1 it1 (it2.begin ());
+ typename M::iterator1 it1_end (it2.end ());
+#else
+ typename M::iterator1 it1 (begin (it2, iterator2_tag ()));
+ typename M::iterator1 it1_end (end (it2, iterator2_tag ()));
+#endif
+ increment (it1, it1_end);
+ ++ it2;
+ }
+#endif
+ }
+
+ // Dispatcher
+ template<template <class T1, class T2> class F, class M, class E>
+ BOOST_UBLAS_INLINE
+ void matrix_swap (M &m, matrix_expression<E> &e) {
+ typedef typename matrix_swap_traits<typename M::storage_category,
+ typename E::const_iterator1::iterator_category,
+ typename E::const_iterator2::iterator_category>::storage_category storage_category;
+ // give preference to matrix M's orientation if known
+ typedef typename boost::mpl::if_<boost::is_same<typename M::orientation_category, unknown_orientation_tag>,
+ typename E::orientation_category ,
+ typename M::orientation_category >::type orientation_category;
+ typedef basic_full<typename M::size_type> unrestricted;
+ matrix_swap<F, unrestricted> (m, e, storage_category (), orientation_category ());
+ }
+ template<template <class T1, class T2> class F, class R, class M, class E>
+ BOOST_UBLAS_INLINE
+ void matrix_swap (M &m, matrix_expression<E> &e) {
+ typedef R conformant_restrict_type;
+ typedef typename matrix_swap_traits<typename M::storage_category,
+ typename E::const_iterator1::iterator_category,
+ typename E::const_iterator2::iterator_category>::storage_category storage_category;
+ // give preference to matrix M's orientation if known
+ typedef typename boost::mpl::if_<boost::is_same<typename M::orientation_category, unknown_orientation_tag>,
+ typename E::orientation_category ,
+ typename M::orientation_category >::type orientation_category;
+ matrix_swap<F, conformant_restrict_type> (m, e, storage_category (), orientation_category ());
+ }
+
+}}}
+
+#endif
diff --git a/boost/boost/numeric/ublas/detail/raw.hpp b/boost/boost/numeric/ublas/detail/raw.hpp
new file mode 100644
index 00000000000..143d31f4971
--- /dev/null
+++ b/boost/boost/numeric/ublas/detail/raw.hpp
@@ -0,0 +1,882 @@
+//
+// Copyright (c) 2002-2003
+// Toon Knapen, Kresimir Fresl, Joerg Walter
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without fee,
+// provided that the above copyright notice appear in all copies and
+// that both that copyright notice and this permission notice appear
+// in supporting documentation. The authors make no representations
+// about the suitability of this software for any purpose.
+// It is provided "as is" without express or implied warranty.
+//
+//
+
+#ifndef _BOOST_UBLAS_RAW_
+#define _BOOST_UBLAS_RAW_
+
+namespace boost { namespace numeric { namespace ublas { namespace raw {
+
+ // We need data_const() mostly due to MSVC 6.0.
+ // But how shall we write portable code otherwise?
+
+ template < typename V >
+ BOOST_UBLAS_INLINE
+ int size( const V &v ) ;
+
+ template < typename V >
+ BOOST_UBLAS_INLINE
+ int size( const vector_reference<V> &v ) ;
+
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ int size1( const M &m ) ;
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ int size2( const M &m ) ;
+
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ int size1( const matrix_reference<M> &m ) ;
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ int size2( const matrix_reference<M> &m ) ;
+
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ int leading_dimension( const M &m, row_major_tag ) ;
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ int leading_dimension( const M &m, column_major_tag ) ;
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ int leading_dimension( const M &m ) ;
+
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ int leading_dimension( const matrix_reference<M> &m ) ;
+
+ template < typename V >
+ BOOST_UBLAS_INLINE
+ int stride( const V &v ) ;
+
+ template < typename V >
+ BOOST_UBLAS_INLINE
+ int stride( const vector_range<V> &v ) ;
+ template < typename V >
+ BOOST_UBLAS_INLINE
+ int stride( const vector_slice<V> &v ) ;
+
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ int stride( const matrix_row<M> &v ) ;
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ int stride( const matrix_column<M> &v ) ;
+
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ int stride1( const M &m ) ;
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ int stride2( const M &m ) ;
+
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ int stride1( const matrix_reference<M> &m ) ;
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ int stride2( const matrix_reference<M> &m ) ;
+
+ template < typename T, std::size_t M, std::size_t N >
+ BOOST_UBLAS_INLINE
+ int stride1( const c_matrix<T, M, N> &m ) ;
+ template < typename T, std::size_t M, std::size_t N >
+ BOOST_UBLAS_INLINE
+ int stride2( const c_matrix<T, M, N> &m ) ;
+
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ int stride1( const matrix_range<M> &m ) ;
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ int stride1( const matrix_slice<M> &m ) ;
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ int stride2( const matrix_range<M> &m ) ;
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ int stride2( const matrix_slice<M> &m ) ;
+
+ template < typename MV >
+ BOOST_UBLAS_INLINE
+ typename MV::array_type::array_type::const_pointer data( const MV &mv ) ;
+ template < typename MV >
+ BOOST_UBLAS_INLINE
+ typename MV::array_type::array_type::const_pointer data_const( const MV &mv ) ;
+ template < typename MV >
+ BOOST_UBLAS_INLINE
+ typename MV::array_type::pointer data( MV &mv ) ;
+
+ template < typename V >
+ BOOST_UBLAS_INLINE
+ typename V::array_type::array_type::const_pointer data( const vector_reference<V> &v ) ;
+ template < typename V >
+ BOOST_UBLAS_INLINE
+ typename V::array_type::array_type::const_pointer data_const( const vector_reference<V> &v ) ;
+ template < typename V >
+ BOOST_UBLAS_INLINE
+ typename V::array_type::pointer data( vector_reference<V> &v ) ;
+
+ template < typename T, std::size_t N >
+ BOOST_UBLAS_INLINE
+ typename c_vector<T, N>::array_type::array_type::const_pointer data( const c_vector<T, N> &v ) ;
+ template < typename T, std::size_t N >
+ BOOST_UBLAS_INLINE
+ typename c_vector<T, N>::array_type::array_type::const_pointer data_const( const c_vector<T, N> &v ) ;
+ template < typename T, std::size_t N >
+ BOOST_UBLAS_INLINE
+ typename c_vector<T, N>::pointer data( c_vector<T, N> &v ) ;
+
+ template < typename V >
+ BOOST_UBLAS_INLINE
+ typename V::array_type::array_type::const_pointer data( const vector_range<V> &v ) ;
+ template < typename V >
+ BOOST_UBLAS_INLINE
+ typename V::array_type::array_type::const_pointer data( const vector_slice<V> &v ) ;
+ template < typename V >
+ BOOST_UBLAS_INLINE
+ typename V::array_type::array_type::const_pointer data_const( const vector_range<V> &v ) ;
+ template < typename V >
+ BOOST_UBLAS_INLINE
+ typename V::array_type::array_type::const_pointer data_const( const vector_slice<V> &v ) ;
+ template < typename V >
+ BOOST_UBLAS_INLINE
+ typename V::array_type::pointer data( vector_range<V> &v ) ;
+ template < typename V >
+ BOOST_UBLAS_INLINE
+ typename V::array_type::pointer data( vector_slice<V> &v ) ;
+
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::array_type::const_pointer data( const matrix_reference<M> &m ) ;
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::array_type::const_pointer data_const( const matrix_reference<M> &m ) ;
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::pointer data( matrix_reference<M> &m ) ;
+
+ template < typename T, std::size_t M, std::size_t N >
+ BOOST_UBLAS_INLINE
+ typename c_matrix<T, M, N>::array_type::array_type::const_pointer data( const c_matrix<T, M, N> &m ) ;
+ template < typename T, std::size_t M, std::size_t N >
+ BOOST_UBLAS_INLINE
+ typename c_matrix<T, M, N>::array_type::array_type::const_pointer data_const( const c_matrix<T, M, N> &m ) ;
+ template < typename T, std::size_t M, std::size_t N >
+ BOOST_UBLAS_INLINE
+ typename c_matrix<T, M, N>::pointer data( c_matrix<T, M, N> &m ) ;
+
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::array_type::const_pointer data( const matrix_row<M> &v ) ;
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::array_type::const_pointer data( const matrix_column<M> &v ) ;
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::array_type::const_pointer data_const( const matrix_row<M> &v ) ;
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::array_type::const_pointer data_const( const matrix_column<M> &v ) ;
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::pointer data( matrix_row<M> &v ) ;
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::pointer data( matrix_column<M> &v ) ;
+
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::array_type::const_pointer data( const matrix_range<M> &m ) ;
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::array_type::const_pointer data( const matrix_slice<M> &m ) ;
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::array_type::const_pointer data_const( const matrix_range<M> &m ) ;
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::array_type::const_pointer data_const( const matrix_slice<M> &m ) ;
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::pointer data( matrix_range<M> &m ) ;
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::pointer data( matrix_slice<M> &m ) ;
+
+ template < typename MV >
+ BOOST_UBLAS_INLINE
+ typename MV::array_type::array_type::const_pointer base( const MV &mv ) ;
+
+ template < typename MV >
+ BOOST_UBLAS_INLINE
+ typename MV::array_type::array_type::const_pointer base_const( const MV &mv ) ;
+ template < typename MV >
+ BOOST_UBLAS_INLINE
+ typename MV::array_type::pointer base( MV &mv ) ;
+
+ template < typename V >
+ BOOST_UBLAS_INLINE
+ typename V::array_type::array_type::const_pointer base( const vector_reference<V> &v ) ;
+ template < typename V >
+ BOOST_UBLAS_INLINE
+ typename V::array_type::array_type::const_pointer base_const( const vector_reference<V> &v ) ;
+ template < typename V >
+ BOOST_UBLAS_INLINE
+ typename V::array_type::pointer base( vector_reference<V> &v ) ;
+
+ template < typename T, std::size_t N >
+ BOOST_UBLAS_INLINE
+ typename c_vector<T, N>::array_type::array_type::const_pointer base( const c_vector<T, N> &v ) ;
+ template < typename T, std::size_t N >
+ BOOST_UBLAS_INLINE
+ typename c_vector<T, N>::array_type::array_type::const_pointer base_const( const c_vector<T, N> &v ) ;
+ template < typename T, std::size_t N >
+ BOOST_UBLAS_INLINE
+ typename c_vector<T, N>::pointer base( c_vector<T, N> &v ) ;
+
+ template < typename V >
+ BOOST_UBLAS_INLINE
+ typename V::array_type::array_type::const_pointer base( const vector_range<V> &v ) ;
+ template < typename V >
+ BOOST_UBLAS_INLINE
+ typename V::array_type::array_type::const_pointer base( const vector_slice<V> &v ) ;
+ template < typename V >
+ BOOST_UBLAS_INLINE
+ typename V::array_type::array_type::const_pointer base_const( const vector_range<V> &v ) ;
+ template < typename V >
+ BOOST_UBLAS_INLINE
+ typename V::array_type::array_type::const_pointer base_const( const vector_slice<V> &v ) ;
+ template < typename V >
+ BOOST_UBLAS_INLINE
+ typename V::array_type::pointer base( vector_range<V> &v ) ;
+ template < typename V >
+ BOOST_UBLAS_INLINE
+ typename V::array_type::pointer base( vector_slice<V> &v ) ;
+
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::array_type::const_pointer base( const matrix_reference<M> &m ) ;
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::array_type::const_pointer base_const( const matrix_reference<M> &m ) ;
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::pointer base( matrix_reference<M> &m ) ;
+
+ template < typename T, std::size_t M, std::size_t N >
+ BOOST_UBLAS_INLINE
+ typename c_matrix<T, M, N>::array_type::array_type::const_pointer base( const c_matrix<T, M, N> &m ) ;
+ template < typename T, std::size_t M, std::size_t N >
+ BOOST_UBLAS_INLINE
+ typename c_matrix<T, M, N>::array_type::array_type::const_pointer base_const( const c_matrix<T, M, N> &m ) ;
+ template < typename T, std::size_t M, std::size_t N >
+ BOOST_UBLAS_INLINE
+ typename c_matrix<T, M, N>::pointer base( c_matrix<T, M, N> &m ) ;
+
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::array_type::const_pointer base( const matrix_row<M> &v ) ;
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::array_type::const_pointer base( const matrix_column<M> &v ) ;
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::array_type::const_pointer base_const( const matrix_row<M> &v ) ;
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::array_type::const_pointer base_const( const matrix_column<M> &v ) ;
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::pointer base( matrix_row<M> &v ) ;
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::pointer base( matrix_column<M> &v ) ;
+
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::array_type::const_pointer base( const matrix_range<M> &m ) ;
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::array_type::const_pointer base( const matrix_slice<M> &m ) ;
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::array_type::const_pointer base_const( const matrix_range<M> &m ) ;
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::array_type::const_pointer base_const( const matrix_slice<M> &m ) ;
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::pointer base( matrix_range<M> &m ) ;
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::pointer base( matrix_slice<M> &m ) ;
+
+ template < typename MV >
+ BOOST_UBLAS_INLINE
+ typename MV::size_type start( const MV &mv ) ;
+
+ template < typename V >
+ BOOST_UBLAS_INLINE
+ typename V::size_type start( const vector_range<V> &v ) ;
+ template < typename V >
+ BOOST_UBLAS_INLINE
+ typename V::size_type start( const vector_slice<V> &v ) ;
+
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::size_type start( const matrix_row<M> &v ) ;
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::size_type start( const matrix_column<M> &v ) ;
+
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::size_type start( const matrix_range<M> &m ) ;
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::size_type start( const matrix_slice<M> &m ) ;
+
+
+
+ template < typename V >
+ BOOST_UBLAS_INLINE
+ int size( const V &v ) {
+ return v.size() ;
+ }
+
+ template < typename V >
+ BOOST_UBLAS_INLINE
+ int size( const vector_reference<V> &v ) {
+ return size( v ) ;
+ }
+
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ int size1( const M &m ) {
+ return m.size1() ;
+ }
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ int size2( const M &m ) {
+ return m.size2() ;
+ }
+
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ int size1( const matrix_reference<M> &m ) {
+ return size1( m.expression() ) ;
+ }
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ int size2( const matrix_reference<M> &m ) {
+ return size2( m.expression() ) ;
+ }
+
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ int leading_dimension( const M &m, row_major_tag ) {
+ return m.size2() ;
+ }
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ int leading_dimension( const M &m, column_major_tag ) {
+ return m.size1() ;
+ }
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ int leading_dimension( const M &m ) {
+ return leading_dimension( m, typename M::orientation_category() ) ;
+ }
+
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ int leading_dimension( const matrix_reference<M> &m ) {
+ return leading_dimension( m.expression() ) ;
+ }
+
+ template < typename V >
+ BOOST_UBLAS_INLINE
+ int stride( const V &v ) {
+ return 1 ;
+ }
+
+ template < typename V >
+ BOOST_UBLAS_INLINE
+ int stride( const vector_range<V> &v ) {
+ return stride( v.data() ) ;
+ }
+ template < typename V >
+ BOOST_UBLAS_INLINE
+ int stride( const vector_slice<V> &v ) {
+ return v.stride() * stride( v.data() ) ;
+ }
+
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ int stride( const matrix_row<M> &v ) {
+ return stride2( v.data() ) ;
+ }
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ int stride( const matrix_column<M> &v ) {
+ return stride1( v.data() ) ;
+ }
+
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ int stride1( const M &m ) {
+ typedef typename M::functor_type functor_type;
+ return functor_type::one1( m.size1(), m.size2() ) ;
+ }
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ int stride2( const M &m ) {
+ typedef typename M::functor_type functor_type;
+ return functor_type::one2( m.size1(), m.size2() ) ;
+ }
+
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ int stride1( const matrix_reference<M> &m ) {
+ return stride1( m.expression() ) ;
+ }
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ int stride2( const matrix_reference<M> &m ) {
+ return stride2( m.expression() ) ;
+ }
+
+ template < typename T, std::size_t M, std::size_t N >
+ BOOST_UBLAS_INLINE
+ int stride1( const c_matrix<T, M, N> &m ) {
+ return N ;
+ }
+ template < typename T, std::size_t M, std::size_t N >
+ BOOST_UBLAS_INLINE
+ int stride2( const c_matrix<T, M, N> &m ) {
+ return 1 ;
+ }
+
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ int stride1( const matrix_range<M> &m ) {
+ return stride1( m.data() ) ;
+ }
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ int stride1( const matrix_slice<M> &m ) {
+ return m.stride1() * stride1( m.data() ) ;
+ }
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ int stride2( const matrix_range<M> &m ) {
+ return stride2( m.data() ) ;
+ }
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ int stride2( const matrix_slice<M> &m ) {
+ return m.stride2() * stride2( m.data() ) ;
+ }
+
+ template < typename MV >
+ BOOST_UBLAS_INLINE
+ typename MV::array_type::array_type::array_type::const_pointer data( const MV &mv ) {
+ return &mv.data().begin()[0] ;
+ }
+ template < typename MV >
+ BOOST_UBLAS_INLINE
+ typename MV::array_type::array_type::const_pointer data_const( const MV &mv ) {
+ return &mv.data().begin()[0] ;
+ }
+ template < typename MV >
+ BOOST_UBLAS_INLINE
+ typename MV::array_type::pointer data( MV &mv ) {
+ return &mv.data().begin()[0] ;
+ }
+
+
+ template < typename V >
+ BOOST_UBLAS_INLINE
+ typename V::array_type::array_type::const_pointer data( const vector_reference<V> &v ) {
+ return data( v.expression () ) ;
+ }
+ template < typename V >
+ BOOST_UBLAS_INLINE
+ typename V::array_type::array_type::const_pointer data_const( const vector_reference<V> &v ) {
+ return data_const( v.expression () ) ;
+ }
+ template < typename V >
+ BOOST_UBLAS_INLINE
+ typename V::array_type::pointer data( vector_reference<V> &v ) {
+ return data( v.expression () ) ;
+ }
+
+ template < typename T, std::size_t N >
+ BOOST_UBLAS_INLINE
+ typename c_vector<T, N>::array_type::array_type::const_pointer data( const c_vector<T, N> &v ) {
+ return v.data() ;
+ }
+ template < typename T, std::size_t N >
+ BOOST_UBLAS_INLINE
+ typename c_vector<T, N>::array_type::array_type::const_pointer data_const( const c_vector<T, N> &v ) {
+ return v.data() ;
+ }
+ template < typename T, std::size_t N >
+ BOOST_UBLAS_INLINE
+ typename c_vector<T, N>::pointer data( c_vector<T, N> &v ) {
+ return v.data() ;
+ }
+
+ template < typename V >
+ BOOST_UBLAS_INLINE
+ typename V::array_type::array_type::const_pointer data( const vector_range<V> &v ) {
+ return data( v.data() ) + v.start() * stride (v.data() ) ;
+ }
+ template < typename V >
+ BOOST_UBLAS_INLINE
+ typename V::array_type::array_type::const_pointer data( const vector_slice<V> &v ) {
+ return data( v.data() ) + v.start() * stride (v.data() ) ;
+ }
+ template < typename V >
+ BOOST_UBLAS_INLINE
+ typename V::array_type::array_type::const_pointer data_const( const vector_range<V> &v ) {
+ return data_const( v.data() ) + v.start() * stride (v.data() ) ;
+ }
+ template < typename V >
+ BOOST_UBLAS_INLINE
+ typename V::array_type::const_pointer data_const( const vector_slice<V> &v ) {
+ return data_const( v.data() ) + v.start() * stride (v.data() ) ;
+ }
+ template < typename V >
+ BOOST_UBLAS_INLINE
+ typename V::array_type::pointer data( vector_range<V> &v ) {
+ return data( v.data() ) + v.start() * stride (v.data() ) ;
+ }
+ template < typename V >
+ BOOST_UBLAS_INLINE
+ typename V::array_type::pointer data( vector_slice<V> &v ) {
+ return data( v.data() ) + v.start() * stride (v.data() ) ;
+ }
+
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::const_pointer data( const matrix_reference<M> &m ) {
+ return data( m.expression () ) ;
+ }
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::const_pointer data_const( const matrix_reference<M> &m ) {
+ return data_const( m.expression () ) ;
+ }
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::pointer data( matrix_reference<M> &m ) {
+ return data( m.expression () ) ;
+ }
+
+ template < typename T, std::size_t M, std::size_t N >
+ BOOST_UBLAS_INLINE
+ typename c_matrix<T, M, N>::array_type::const_pointer data( const c_matrix<T, M, N> &m ) {
+ return m.data() ;
+ }
+ template < typename T, std::size_t M, std::size_t N >
+ BOOST_UBLAS_INLINE
+ typename c_matrix<T, M, N>::array_type::const_pointer data_const( const c_matrix<T, M, N> &m ) {
+ return m.data() ;
+ }
+ template < typename T, std::size_t M, std::size_t N >
+ BOOST_UBLAS_INLINE
+ typename c_matrix<T, M, N>::pointer data( c_matrix<T, M, N> &m ) {
+ return m.data() ;
+ }
+
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::const_pointer data( const matrix_row<M> &v ) {
+ return data( v.data() ) + v.index() * stride1( v.data() ) ;
+ }
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::const_pointer data( const matrix_column<M> &v ) {
+ return data( v.data() ) + v.index() * stride2( v.data() ) ;
+ }
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::const_pointer data_const( const matrix_row<M> &v ) {
+ return data_const( v.data() ) + v.index() * stride1( v.data() ) ;
+ }
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::const_pointer data_const( const matrix_column<M> &v ) {
+ return data_const( v.data() ) + v.index() * stride2( v.data() ) ;
+ }
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::pointer data( matrix_row<M> &v ) {
+ return data( v.data() ) + v.index() * stride1( v.data() ) ;
+ }
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::pointer data( matrix_column<M> &v ) {
+ return data( v.data() ) + v.index() * stride2( v.data() ) ;
+ }
+
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::const_pointer data( const matrix_range<M> &m ) {
+ return data( m.data() ) + m.start1() * stride1( m.data () ) + m.start2() * stride2( m.data () ) ;
+ }
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::const_pointer data( const matrix_slice<M> &m ) {
+ return data( m.data() ) + m.start1() * stride1( m.data () ) + m.start2() * stride2( m.data () ) ;
+ }
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::const_pointer data_const( const matrix_range<M> &m ) {
+ return data_const( m.data() ) + m.start1() * stride1( m.data () ) + m.start2() * stride2( m.data () ) ;
+ }
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::const_pointer data_const( const matrix_slice<M> &m ) {
+ return data_const( m.data() ) + m.start1() * stride1( m.data () ) + m.start2() * stride2( m.data () ) ;
+ }
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::pointer data( matrix_range<M> &m ) {
+ return data( m.data() ) + m.start1() * stride1( m.data () ) + m.start2() * stride2( m.data () ) ;
+ }
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::pointer data( matrix_slice<M> &m ) {
+ return data( m.data() ) + m.start1() * stride1( m.data () ) + m.start2() * stride2( m.data () ) ;
+ }
+
+
+ template < typename MV >
+ BOOST_UBLAS_INLINE
+ typename MV::array_type::const_pointer base( const MV &mv ) {
+ return &mv.data().begin()[0] ;
+ }
+ template < typename MV >
+ BOOST_UBLAS_INLINE
+ typename MV::array_type::const_pointer base_const( const MV &mv ) {
+ return &mv.data().begin()[0] ;
+ }
+ template < typename MV >
+ BOOST_UBLAS_INLINE
+ typename MV::array_type::pointer base( MV &mv ) {
+ return &mv.data().begin()[0] ;
+ }
+
+ template < typename V >
+ BOOST_UBLAS_INLINE
+ typename V::array_type::const_pointer base( const vector_reference<V> &v ) {
+ return base( v.expression () ) ;
+ }
+ template < typename V >
+ BOOST_UBLAS_INLINE
+ typename V::array_type::const_pointer base_const( const vector_reference<V> &v ) {
+ return base_const( v.expression () ) ;
+ }
+ template < typename V >
+ BOOST_UBLAS_INLINE
+ typename V::array_type::pointer base( vector_reference<V> &v ) {
+ return base( v.expression () ) ;
+ }
+
+ template < typename T, std::size_t N >
+ BOOST_UBLAS_INLINE
+ typename c_vector<T, N>::array_type::const_pointer base( const c_vector<T, N> &v ) {
+ return v.data() ;
+ }
+ template < typename T, std::size_t N >
+ BOOST_UBLAS_INLINE
+ typename c_vector<T, N>::array_type::const_pointer base_const( const c_vector<T, N> &v ) {
+ return v.data() ;
+ }
+ template < typename T, std::size_t N >
+ BOOST_UBLAS_INLINE
+ typename c_vector<T, N>::pointer base( c_vector<T, N> &v ) {
+ return v.data() ;
+ }
+
+ template < typename V >
+ BOOST_UBLAS_INLINE
+ typename V::array_type::const_pointer base( const vector_range<V> &v ) {
+ return base( v.data() ) ;
+ }
+ template < typename V >
+ BOOST_UBLAS_INLINE
+ typename V::array_type::const_pointer base( const vector_slice<V> &v ) {
+ return base( v.data() ) ;
+ }
+ template < typename V >
+ BOOST_UBLAS_INLINE
+ typename V::array_type::const_pointer base_const( const vector_range<V> &v ) {
+ return base_const( v.data() ) ;
+ }
+ template < typename V >
+ BOOST_UBLAS_INLINE
+ typename V::array_type::const_pointer base_const( const vector_slice<V> &v ) {
+ return base_const( v.data() ) ;
+ }
+ template < typename V >
+ BOOST_UBLAS_INLINE
+ typename V::array_type::pointer base( vector_range<V> &v ) {
+ return base( v.data() ) ;
+ }
+ template < typename V >
+ BOOST_UBLAS_INLINE
+ typename V::array_type::pointer base( vector_slice<V> &v ) {
+ return base( v.data() ) ;
+ }
+
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::const_pointer base( const matrix_reference<M> &m ) {
+ return base( m.expression () ) ;
+ }
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::const_pointer base_const( const matrix_reference<M> &m ) {
+ return base_const( m.expression () ) ;
+ }
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::pointer base( matrix_reference<M> &m ) {
+ return base( m.expression () ) ;
+ }
+
+ template < typename T, std::size_t M, std::size_t N >
+ BOOST_UBLAS_INLINE
+ typename c_matrix<T, M, N>::array_type::const_pointer base( const c_matrix<T, M, N> &m ) {
+ return m.data() ;
+ }
+ template < typename T, std::size_t M, std::size_t N >
+ BOOST_UBLAS_INLINE
+ typename c_matrix<T, M, N>::array_type::const_pointer base_const( const c_matrix<T, M, N> &m ) {
+ return m.data() ;
+ }
+ template < typename T, std::size_t M, std::size_t N >
+ BOOST_UBLAS_INLINE
+ typename c_matrix<T, M, N>::pointer base( c_matrix<T, M, N> &m ) {
+ return m.data() ;
+ }
+
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::const_pointer base( const matrix_row<M> &v ) {
+ return base( v.data() ) ;
+ }
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::const_pointer base( const matrix_column<M> &v ) {
+ return base( v.data() ) ;
+ }
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::const_pointer base_const( const matrix_row<M> &v ) {
+ return base_const( v.data() ) ;
+ }
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::const_pointer base_const( const matrix_column<M> &v ) {
+ return base_const( v.data() ) ;
+ }
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::pointer base( matrix_row<M> &v ) {
+ return base( v.data() ) ;
+ }
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::pointer base( matrix_column<M> &v ) {
+ return base( v.data() ) ;
+ }
+
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::const_pointer base( const matrix_range<M> &m ) {
+ return base( m.data() ) ;
+ }
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::const_pointer base( const matrix_slice<M> &m ) {
+ return base( m.data() ) ;
+ }
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::const_pointer base_const( const matrix_range<M> &m ) {
+ return base_const( m.data() ) ;
+ }
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::const_pointer base_const( const matrix_slice<M> &m ) {
+ return base_const( m.data() ) ;
+ }
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::pointer base( matrix_range<M> &m ) {
+ return base( m.data() ) ;
+ }
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::array_type::pointer base( matrix_slice<M> &m ) {
+ return base( m.data() ) ;
+ }
+
+ template < typename MV >
+ BOOST_UBLAS_INLINE
+ typename MV::size_type start( const MV &mv ) {
+ return 0 ;
+ }
+
+ template < typename V >
+ BOOST_UBLAS_INLINE
+ typename V::size_type start( const vector_range<V> &v ) {
+ return v.start() * stride (v.data() ) ;
+ }
+ template < typename V >
+ BOOST_UBLAS_INLINE
+ typename V::size_type start( const vector_slice<V> &v ) {
+ return v.start() * stride (v.data() ) ;
+ }
+
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::size_type start( const matrix_row<M> &v ) {
+ return v.index() * stride1( v.data() ) ;
+ }
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::size_type start( const matrix_column<M> &v ) {
+ return v.index() * stride2( v.data() ) ;
+ }
+
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::size_type start( const matrix_range<M> &m ) {
+ return m.start1() * stride1( m.data () ) + m.start2() * stride2( m.data () ) ;
+ }
+ template < typename M >
+ BOOST_UBLAS_INLINE
+ typename M::size_type start( const matrix_slice<M> &m ) {
+ return m.start1() * stride1( m.data () ) + m.start2() * stride2( m.data () ) ;
+ }
+
+}}}}
+
+#endif
diff --git a/boost/boost/numeric/ublas/detail/returntype_deduction.hpp b/boost/boost/numeric/ublas/detail/returntype_deduction.hpp
new file mode 100644
index 00000000000..030d1f6b243
--- /dev/null
+++ b/boost/boost/numeric/ublas/detail/returntype_deduction.hpp
@@ -0,0 +1,174 @@
+/*
+ * Copyright (c) 2001-2003 Joel de Guzman
+ *
+ * Use, modification and distribution is 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)
+ */
+#ifndef _BOOST_UBLAS_NUMERICTYPE_DEDUCTION_
+#define _BOOST_UBLAS_NUMERICTYPE_DEDUCTION_
+
+// See original in boost-sandbox/boost/utility/type_deduction.hpp for comments
+
+#include <boost/mpl/vector/vector20.hpp>
+#include <boost/mpl/at.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/utility/enable_if.hpp>
+
+namespace boost { namespace numeric { namespace ublas {
+
+struct error_cant_deduce_type {};
+
+ namespace type_deduction_detail
+ {
+ typedef char(&bool_value_type)[1];
+ typedef char(&float_value_type)[2];
+ typedef char(&double_value_type)[3];
+ typedef char(&long_double_value_type)[4];
+ typedef char(&char_value_type)[5];
+ typedef char(&schar_value_type)[6];
+ typedef char(&uchar_value_type)[7];
+ typedef char(&short_value_type)[8];
+ typedef char(&ushort_value_type)[9];
+ typedef char(&int_value_type)[10];
+ typedef char(&uint_value_type)[11];
+ typedef char(&long_value_type)[12];
+ typedef char(&ulong_value_type)[13];
+
+ typedef char(&x_value_type)[14];
+ typedef char(&y_value_type)[15];
+
+ typedef char(&cant_deduce_type)[16];
+
+ template <typename T, typename PlainT = typename remove_cv<T>::type>
+ struct is_basic
+ : mpl::or_<
+ typename mpl::or_<
+ is_same<PlainT, bool>
+ , is_same<PlainT, float>
+ , is_same<PlainT, double>
+ , is_same<PlainT, long double>
+ > ::type,
+ typename mpl::or_<
+ is_same<PlainT, char>
+ , is_same<PlainT, signed char>
+ , is_same<PlainT, unsigned char>
+ , is_same<PlainT, short>
+ , is_same<PlainT, unsigned short>
+ > ::type,
+ typename mpl::or_<
+ is_same<PlainT, int>
+ , is_same<PlainT, unsigned int>
+ , is_same<PlainT, long>
+ , is_same<PlainT, unsigned long>
+ > ::type
+ > {};
+
+ struct asymmetric;
+
+ template <typename X, typename Y>
+ cant_deduce_type
+ test(...); // The black hole !!!
+
+ template <typename X, typename Y>
+ bool_value_type
+ test(bool const&);
+
+ template <typename X, typename Y>
+ float_value_type
+ test(float const&);
+
+ template <typename X, typename Y>
+ double_value_type
+ test(double const&);
+
+ template <typename X, typename Y>
+ long_double_value_type
+ test(long double const&);
+
+ template <typename X, typename Y>
+ char_value_type
+ test(char const&);
+
+ template <typename X, typename Y>
+ schar_value_type
+ test(signed char const&);
+
+ template <typename X, typename Y>
+ uchar_value_type
+ test(unsigned char const&);
+
+ template <typename X, typename Y>
+ short_value_type
+ test(short const&);
+
+ template <typename X, typename Y>
+ ushort_value_type
+ test(unsigned short const&);
+
+ template <typename X, typename Y>
+ int_value_type
+ test(int const&);
+
+ template <typename X, typename Y>
+ uint_value_type
+ test(unsigned int const&);
+
+ template <typename X, typename Y>
+ long_value_type
+ test(long const&);
+
+ template <typename X, typename Y>
+ ulong_value_type
+ test(unsigned long const&);
+
+ template <typename X, typename Y>
+ typename disable_if<
+ is_basic<X>, x_value_type
+ >::type
+ test(X const&);
+
+ template <typename X, typename Y>
+ typename disable_if<
+ mpl::or_<
+ is_basic<Y>
+ , is_same<Y, asymmetric>
+ , is_same<const X, const Y>
+ >
+ , y_value_type
+ >::type
+ test(Y const&);
+
+ template <typename X, typename Y>
+ struct base_result_of
+ {
+ typedef typename remove_cv<X>::type x_type;
+ typedef typename remove_cv<Y>::type y_type;
+
+ typedef mpl::vector16<
+ mpl::identity<bool>
+ , mpl::identity<float>
+ , mpl::identity<double>
+ , mpl::identity<long double>
+ , mpl::identity<char>
+ , mpl::identity<signed char>
+ , mpl::identity<unsigned char>
+ , mpl::identity<short>
+ , mpl::identity<unsigned short>
+ , mpl::identity<int>
+ , mpl::identity<unsigned int>
+ , mpl::identity<long>
+ , mpl::identity<unsigned long>
+ , mpl::identity<x_type>
+ , mpl::identity<y_type>
+ , mpl::identity<error_cant_deduce_type>
+ >
+ types;
+ };
+
+}}} } // namespace boost::numeric::ublas ::type_deduction_detail
+
+#endif
diff --git a/boost/boost/numeric/ublas/detail/temporary.hpp b/boost/boost/numeric/ublas/detail/temporary.hpp
new file mode 100644
index 00000000000..0e79359238d
--- /dev/null
+++ b/boost/boost/numeric/ublas/detail/temporary.hpp
@@ -0,0 +1,37 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without fee,
+// provided that the above copyright notice appear in all copies and
+// that both that copyright notice and this permission notice appear
+// in supporting documentation. The authors make no representations
+// about the suitability of this software for any purpose.
+// It is provided "as is" without express or implied warranty.
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#ifndef _BOOST_UBLAS_TEMPORARY_
+#define _BOOST_UBLAS_TEMPORARY_
+
+
+namespace boost { namespace numeric { namespace ublas {
+
+/// For the creation of temporary vectors in the assignment of proxies
+template <class M>
+struct vector_temporary_traits {
+ typedef typename M::vector_temporary_type type ;
+};
+
+/// For the creation of temporary vectors in the assignment of proxies
+template <class M>
+struct matrix_temporary_traits {
+ typedef typename M::matrix_temporary_type type ;
+};
+
+} } }
+
+#endif
diff --git a/boost/boost/numeric/ublas/detail/vector_assign.hpp b/boost/boost/numeric/ublas/detail/vector_assign.hpp
new file mode 100644
index 00000000000..a93cd1c48d8
--- /dev/null
+++ b/boost/boost/numeric/ublas/detail/vector_assign.hpp
@@ -0,0 +1,571 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without fee,
+// provided that the above copyright notice appear in all copies and
+// that both that copyright notice and this permission notice appear
+// in supporting documentation. The authors make no representations
+// about the suitability of this software for any purpose.
+// It is provided "as is" without express or implied warranty.
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#ifndef _BOOST_UBLAS_VECTOR_ASSIGN_
+#define _BOOST_UBLAS_VECTOR_ASSIGN_
+
+// Required for make_conformant storage
+#include <vector>
+
+// Iterators based on ideas of Jeremy Siek
+
+namespace boost { namespace numeric { namespace ublas {
+namespace detail {
+
+ // Weak equality check - useful to compare equality two arbitary vector expression results.
+ // Since the actual expressions are unknown, we check for and arbitary error bound
+ // on the relative error.
+ // For a linear expression the infinity norm makes sense as we do not know how the elements will be
+ // combined in the expression. False positive results are inevitable for arbirary expressions!
+ template<class E1, class E2, class S>
+ BOOST_UBLAS_INLINE
+ bool equals (const vector_expression<E1> &e1, const vector_expression<E2> &e2, S epsilon, S min_norm) {
+ return norm_inf (e1 - e2) < epsilon *
+ std::max<S> (std::max<S> (norm_inf (e1), norm_inf (e2)), min_norm);
+ }
+
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ bool expression_type_check (const vector_expression<E1> &e1, const vector_expression<E2> &e2) {
+ typedef typename type_traits<typename promote_traits<typename E1::value_type,
+ typename E2::value_type>::promote_type>::real_type real_type;
+ return equals (e1, e2, BOOST_UBLAS_TYPE_CHECK_EPSILON, BOOST_UBLAS_TYPE_CHECK_MIN);
+ }
+
+
+ // Make sparse proxies conformant
+ template<class V, class E>
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ void make_conformant (V &v, const vector_expression<E> &e) {
+ BOOST_UBLAS_CHECK (v.size () == e ().size (), bad_size ());
+ typedef typename V::size_type size_type;
+ typedef typename V::difference_type difference_type;
+ typedef typename V::value_type value_type;
+ // FIXME unbounded_array with push_back maybe better
+ std::vector<size_type> index;
+ typename V::iterator it (v.begin ());
+ typename V::iterator it_end (v.end ());
+ typename E::const_iterator ite (e ().begin ());
+ typename E::const_iterator ite_end (e ().end ());
+ if (it != it_end && ite != ite_end) {
+ size_type it_index = it.index (), ite_index = ite.index ();
+ while (true) {
+ difference_type compare = it_index - ite_index;
+ if (compare == 0) {
+ ++ it, ++ ite;
+ if (it != it_end && ite != ite_end) {
+ it_index = it.index ();
+ ite_index = ite.index ();
+ } else
+ break;
+ } else if (compare < 0) {
+ increment (it, it_end, - compare);
+ if (it != it_end)
+ it_index = it.index ();
+ else
+ break;
+ } else if (compare > 0) {
+ if (*ite != value_type/*zero*/())
+ index.push_back (ite.index ());
+ ++ ite;
+ if (ite != ite_end)
+ ite_index = ite.index ();
+ else
+ break;
+ }
+ }
+ }
+
+ while (ite != ite_end) {
+ if (*ite != value_type/*zero*/())
+ index.push_back (ite.index ());
+ ++ ite;
+ }
+ for (size_type k = 0; k < index.size (); ++ k)
+ v (index [k]) = value_type/*zero*/();
+ }
+
+}//namespace detail
+
+
+ // Explicitly iterating
+ template<template <class T1, class T2> class F, class V, class T>
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ void iterating_vector_assign_scalar (V &v, const T &t) {
+ typedef F<typename V::iterator::reference, T> functor_type;
+ typedef typename V::difference_type difference_type;
+ difference_type size (v.size ());
+ typename V::iterator it (v.begin ());
+ BOOST_UBLAS_CHECK (v.end () - it == size, bad_size ());
+#ifndef BOOST_UBLAS_USE_DUFF_DEVICE
+ while (-- size >= 0)
+ functor_type::apply (*it, t), ++ it;
+#else
+ DD (size, 4, r, (functor_type::apply (*it, t), ++ it));
+#endif
+ }
+ // Explicitly case
+ template<template <class T1, class T2> class F, class V, class T>
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ void indexing_vector_assign_scalar (V &v, const T &t) {
+ typedef F<typename V::reference, T> functor_type;
+ typedef typename V::size_type size_type;
+ size_type size (v.size ());
+#ifndef BOOST_UBLAS_USE_DUFF_DEVICE
+ for (size_type i = 0; i < size; ++ i)
+ functor_type::apply (v (i), t);
+#else
+ size_type i (0);
+ DD (size, 4, r, (functor_type::apply (v (i), t), ++ i));
+#endif
+ }
+
+ // Dense (proxy) case
+ template<template <class T1, class T2> class F, class V, class T>
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ void vector_assign_scalar (V &v, const T &t, dense_proxy_tag) {
+#ifdef BOOST_UBLAS_USE_INDEXING
+ indexing_vector_assign_scalar<F> (v, t);
+#elif BOOST_UBLAS_USE_ITERATING
+ iterating_vector_assign_scalar<F> (v, t);
+#else
+ typedef typename V::size_type size_type;
+ size_type size (v.size ());
+ if (size >= BOOST_UBLAS_ITERATOR_THRESHOLD)
+ iterating_vector_assign_scalar<F> (v, t);
+ else
+ indexing_vector_assign_scalar<F> (v, t);
+#endif
+ }
+ // Packed (proxy) case
+ template<template <class T1, class T2> class F, class V, class T>
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ void vector_assign_scalar (V &v, const T &t, packed_proxy_tag) {
+ typedef F<typename V::iterator::reference, T> functor_type;
+ typedef typename V::difference_type difference_type;
+ typename V::iterator it (v.begin ());
+ difference_type size (v.end () - it);
+ while (-- size >= 0)
+ functor_type::apply (*it, t), ++ it;
+ }
+ // Sparse (proxy) case
+ template<template <class T1, class T2> class F, class V, class T>
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ void vector_assign_scalar (V &v, const T &t, sparse_proxy_tag) {
+ typedef F<typename V::iterator::reference, T> functor_type;
+ typename V::iterator it (v.begin ());
+ typename V::iterator it_end (v.end ());
+ while (it != it_end)
+ functor_type::apply (*it, t), ++ it;
+ }
+
+ // Dispatcher
+ template<template <class T1, class T2> class F, class V, class T>
+ BOOST_UBLAS_INLINE
+ void vector_assign_scalar (V &v, const T &t) {
+ typedef typename V::storage_category storage_category;
+ vector_assign_scalar<F> (v, t, storage_category ());
+ }
+
+ template<class SC, bool COMPUTED, class RI>
+ struct vector_assign_traits {
+ typedef SC storage_category;
+ };
+
+ template<bool COMPUTED>
+ struct vector_assign_traits<dense_tag, COMPUTED, packed_random_access_iterator_tag> {
+ typedef packed_tag storage_category;
+ };
+ template<>
+ struct vector_assign_traits<dense_tag, false, sparse_bidirectional_iterator_tag> {
+ typedef sparse_tag storage_category;
+ };
+ template<>
+ struct vector_assign_traits<dense_tag, true, sparse_bidirectional_iterator_tag> {
+ typedef sparse_proxy_tag storage_category;
+ };
+
+ template<bool COMPUTED>
+ struct vector_assign_traits<dense_proxy_tag, COMPUTED, packed_random_access_iterator_tag> {
+ typedef packed_proxy_tag storage_category;
+ };
+ template<>
+ struct vector_assign_traits<dense_proxy_tag, false, sparse_bidirectional_iterator_tag> {
+ typedef sparse_proxy_tag storage_category;
+ };
+ template<>
+ struct vector_assign_traits<dense_proxy_tag, true, sparse_bidirectional_iterator_tag> {
+ typedef sparse_proxy_tag storage_category;
+ };
+
+ template<>
+ struct vector_assign_traits<packed_tag, false, sparse_bidirectional_iterator_tag> {
+ typedef sparse_tag storage_category;
+ };
+ template<>
+ struct vector_assign_traits<packed_tag, true, sparse_bidirectional_iterator_tag> {
+ typedef sparse_proxy_tag storage_category;
+ };
+
+ template<bool COMPUTED>
+ struct vector_assign_traits<packed_proxy_tag, COMPUTED, sparse_bidirectional_iterator_tag> {
+ typedef sparse_proxy_tag storage_category;
+ };
+
+ template<>
+ struct vector_assign_traits<sparse_tag, true, dense_random_access_iterator_tag> {
+ typedef sparse_proxy_tag storage_category;
+ };
+ template<>
+ struct vector_assign_traits<sparse_tag, true, packed_random_access_iterator_tag> {
+ typedef sparse_proxy_tag storage_category;
+ };
+ template<>
+ struct vector_assign_traits<sparse_tag, true, sparse_bidirectional_iterator_tag> {
+ typedef sparse_proxy_tag storage_category;
+ };
+
+ // Explicitly iterating
+ template<template <class T1, class T2> class F, class V, class E>
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ void iterating_vector_assign (V &v, const vector_expression<E> &e) {
+ typedef F<typename V::iterator::reference, typename E::value_type> functor_type;
+ typedef typename V::difference_type difference_type;
+ difference_type size (BOOST_UBLAS_SAME (v.size (), e ().size ()));
+ typename V::iterator it (v.begin ());
+ BOOST_UBLAS_CHECK (v.end () - it == size, bad_size ());
+ typename E::const_iterator ite (e ().begin ());
+ BOOST_UBLAS_CHECK (e ().end () - ite == size, bad_size ());
+#ifndef BOOST_UBLAS_USE_DUFF_DEVICE
+ while (-- size >= 0)
+ functor_type::apply (*it, *ite), ++ it, ++ ite;
+#else
+ DD (size, 2, r, (functor_type::apply (*it, *ite), ++ it, ++ ite));
+#endif
+ }
+ // Explicitly indexing
+ template<template <class T1, class T2> class F, class V, class E>
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ void indexing_vector_assign (V &v, const vector_expression<E> &e) {
+ typedef F<typename V::reference, typename E::value_type> functor_type;
+ typedef typename V::size_type size_type;
+ size_type size (BOOST_UBLAS_SAME (v.size (), e ().size ()));
+#ifndef BOOST_UBLAS_USE_DUFF_DEVICE
+ for (size_type i = 0; i < size; ++ i)
+ functor_type::apply (v (i), e () (i));
+#else
+ size_type i (0);
+ DD (size, 2, r, (functor_type::apply (v (i), e () (i)), ++ i));
+#endif
+ }
+
+ // Dense (proxy) case
+ template<template <class T1, class T2> class F, class V, class E>
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ void vector_assign (V &v, const vector_expression<E> &e, dense_proxy_tag) {
+#ifdef BOOST_UBLAS_USE_INDEXING
+ indexing_vector_assign<F> (v, e);
+#elif BOOST_UBLAS_USE_ITERATING
+ iterating_vector_assign<F> (v, e);
+#else
+ typedef typename V::size_type size_type;
+ size_type size (BOOST_UBLAS_SAME (v.size (), e ().size ()));
+ if (size >= BOOST_UBLAS_ITERATOR_THRESHOLD)
+ iterating_vector_assign<F> (v, e);
+ else
+ indexing_vector_assign<F> (v, e);
+#endif
+ }
+ // Packed (proxy) case
+ template<template <class T1, class T2> class F, class V, class E>
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ void vector_assign (V &v, const vector_expression<E> &e, packed_proxy_tag) {
+ BOOST_UBLAS_CHECK (v.size () == e ().size (), bad_size ());
+ typedef F<typename V::iterator::reference, typename E::value_type> functor_type;
+ typedef typename V::difference_type difference_type;
+ typedef typename V::value_type value_type;
+#if BOOST_UBLAS_TYPE_CHECK
+ vector<value_type> cv (v.size ());
+ indexing_vector_assign<scalar_assign> (cv, v);
+ indexing_vector_assign<F> (cv, e);
+#endif
+ typename V::iterator it (v.begin ());
+ typename V::iterator it_end (v.end ());
+ typename E::const_iterator ite (e ().begin ());
+ typename E::const_iterator ite_end (e ().end ());
+ difference_type it_size (it_end - it);
+ difference_type ite_size (ite_end - ite);
+ if (it_size > 0 && ite_size > 0) {
+ difference_type size ((std::min) (difference_type (it.index () - ite.index ()), ite_size));
+ if (size > 0) {
+ ite += size;
+ ite_size -= size;
+ }
+ }
+ if (it_size > 0 && ite_size > 0) {
+ difference_type size ((std::min) (difference_type (ite.index () - it.index ()), it_size));
+ if (size > 0) {
+ it_size -= size;
+ if (!functor_type::computed) {
+ while (-- size >= 0) // zeroing
+ functor_type::apply (*it, value_type/*zero*/()), ++ it;
+ } else {
+ it += size;
+ }
+ }
+ }
+ difference_type size ((std::min) (it_size, ite_size));
+ it_size -= size;
+ ite_size -= size;
+ while (-- size >= 0)
+ functor_type::apply (*it, *ite), ++ it, ++ ite;
+ size = it_size;
+ if (!functor_type::computed) {
+ while (-- size >= 0) // zeroing
+ functor_type::apply (*it, value_type/*zero*/()), ++ it;
+ } else {
+ it += size;
+ }
+#if BOOST_UBLAS_TYPE_CHECK
+ if (! disable_type_check<bool>::value)
+ BOOST_UBLAS_CHECK (detail::expression_type_check (v, cv), external_logic ());
+#endif
+ }
+ // Sparse case
+ template<template <class T1, class T2> class F, class V, class E>
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ void vector_assign (V &v, const vector_expression<E> &e, sparse_tag) {
+ BOOST_UBLAS_CHECK (v.size () == e ().size (), bad_size ());
+ typedef F<typename V::iterator::reference, typename E::value_type> functor_type;
+ BOOST_STATIC_ASSERT ((!functor_type::computed));
+ typedef typename V::value_type value_type;
+#if BOOST_UBLAS_TYPE_CHECK
+ vector<value_type> cv (v.size ());
+ indexing_vector_assign<scalar_assign> (cv, v);
+ indexing_vector_assign<F> (cv, e);
+#endif
+ v.clear ();
+ typename E::const_iterator ite (e ().begin ());
+ typename E::const_iterator ite_end (e ().end ());
+ while (ite != ite_end) {
+ value_type t (*ite);
+ if (t != value_type/*zero*/())
+ v.insert_element (ite.index (), t);
+ ++ ite;
+ }
+#if BOOST_UBLAS_TYPE_CHECK
+ if (! disable_type_check<bool>::value)
+ BOOST_UBLAS_CHECK (detail::expression_type_check (v, cv), external_logic ());
+#endif
+ }
+ // Sparse proxy or functional case
+ template<template <class T1, class T2> class F, class V, class E>
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ void vector_assign (V &v, const vector_expression<E> &e, sparse_proxy_tag) {
+ BOOST_UBLAS_CHECK (v.size () == e ().size (), bad_size ());
+ typedef F<typename V::iterator::reference, typename E::value_type> functor_type;
+ typedef typename V::size_type size_type;
+ typedef typename V::difference_type difference_type;
+ typedef typename V::value_type value_type;
+ typedef typename V::reference reference;
+#if BOOST_UBLAS_TYPE_CHECK
+ vector<value_type> cv (v.size ());
+ indexing_vector_assign<scalar_assign> (cv, v);
+ indexing_vector_assign<F> (cv, e);
+#endif
+ detail::make_conformant (v, e);
+
+ typename V::iterator it (v.begin ());
+ typename V::iterator it_end (v.end ());
+ typename E::const_iterator ite (e ().begin ());
+ typename E::const_iterator ite_end (e ().end ());
+ if (it != it_end && ite != ite_end) {
+ size_type it_index = it.index (), ite_index = ite.index ();
+ while (true) {
+ difference_type compare = it_index - ite_index;
+ if (compare == 0) {
+ functor_type::apply (*it, *ite);
+ ++ it, ++ ite;
+ if (it != it_end && ite != ite_end) {
+ it_index = it.index ();
+ ite_index = ite.index ();
+ } else
+ break;
+ } else if (compare < 0) {
+ if (!functor_type::computed) {
+ functor_type::apply (*it, value_type/*zero*/());
+ ++ it;
+ } else
+ increment (it, it_end, - compare);
+ if (it != it_end)
+ it_index = it.index ();
+ else
+ break;
+ } else if (compare > 0) {
+ increment (ite, ite_end, compare);
+ if (ite != ite_end)
+ ite_index = ite.index ();
+ else
+ break;
+ }
+ }
+ }
+
+ if (!functor_type::computed) {
+ while (it != it_end) { // zeroing
+ functor_type::apply (*it, value_type/*zero*/());
+ ++ it;
+ }
+ } else {
+ it = it_end;
+ }
+#if BOOST_UBLAS_TYPE_CHECK
+ if (! disable_type_check<bool>::value)
+ BOOST_UBLAS_CHECK (detail::expression_type_check (v, cv), external_logic ());
+#endif
+ }
+
+ // Dispatcher
+ template<template <class T1, class T2> class F, class V, class E>
+ BOOST_UBLAS_INLINE
+ void vector_assign (V &v, const vector_expression<E> &e) {
+ typedef typename vector_assign_traits<typename V::storage_category,
+ F<typename V::reference, typename E::value_type>::computed,
+ typename E::const_iterator::iterator_category>::storage_category storage_category;
+ vector_assign<F> (v, e, storage_category ());
+ }
+
+ template<class SC, class RI>
+ struct vector_swap_traits {
+ typedef SC storage_category;
+ };
+
+ template<>
+ struct vector_swap_traits<dense_proxy_tag, sparse_bidirectional_iterator_tag> {
+ typedef sparse_proxy_tag storage_category;
+ };
+
+ template<>
+ struct vector_swap_traits<packed_proxy_tag, sparse_bidirectional_iterator_tag> {
+ typedef sparse_proxy_tag storage_category;
+ };
+
+ // Dense (proxy) case
+ template<template <class T1, class T2> class F, class V, class E>
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ void vector_swap (V &v, vector_expression<E> &e, dense_proxy_tag) {
+ typedef F<typename V::iterator::reference, typename E::iterator::reference> functor_type;
+ typedef typename V::difference_type difference_type;
+ difference_type size (BOOST_UBLAS_SAME (v.size (), e ().size ()));
+ typename V::iterator it (v.begin ());
+ typename E::iterator ite (e ().begin ());
+ while (-- size >= 0)
+ functor_type::apply (*it, *ite), ++ it, ++ ite;
+ }
+ // Packed (proxy) case
+ template<template <class T1, class T2> class F, class V, class E>
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ void vector_swap (V &v, vector_expression<E> &e, packed_proxy_tag) {
+ typedef F<typename V::iterator::reference, typename E::iterator::reference> functor_type;
+ typedef typename V::difference_type difference_type;
+ typename V::iterator it (v.begin ());
+ typename V::iterator it_end (v.end ());
+ typename E::iterator ite (e ().begin ());
+ typename E::iterator ite_end (e ().end ());
+ difference_type it_size (it_end - it);
+ difference_type ite_size (ite_end - ite);
+ if (it_size > 0 && ite_size > 0) {
+ difference_type size ((std::min) (difference_type (it.index () - ite.index ()), ite_size));
+ if (size > 0) {
+ ite += size;
+ ite_size -= size;
+ }
+ }
+ if (it_size > 0 && ite_size > 0) {
+ difference_type size ((std::min) (difference_type (ite.index () - it.index ()), it_size));
+ if (size > 0)
+ it_size -= size;
+ }
+ difference_type size ((std::min) (it_size, ite_size));
+ it_size -= size;
+ ite_size -= size;
+ while (-- size >= 0)
+ functor_type::apply (*it, *ite), ++ it, ++ ite;
+ }
+ // Sparse proxy case
+ template<template <class T1, class T2> class F, class V, class E>
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ void vector_swap (V &v, vector_expression<E> &e, sparse_proxy_tag) {
+ BOOST_UBLAS_CHECK (v.size () == e ().size (), bad_size ());
+ typedef F<typename V::iterator::reference, typename E::iterator::reference> functor_type;
+ typedef typename V::size_type size_type;
+ typedef typename V::difference_type difference_type;
+ typedef typename V::value_type value_type;
+
+ detail::make_conformant (v, e);
+ // FIXME should be a seperate restriction for E
+ detail::make_conformant (e (), v);
+
+ typename V::iterator it (v.begin ());
+ typename V::iterator it_end (v.end ());
+ typename E::iterator ite (e ().begin ());
+ typename E::iterator ite_end (e ().end ());
+ if (it != it_end && ite != ite_end) {
+ size_type it_index = it.index (), ite_index = ite.index ();
+ while (true) {
+ difference_type compare = it_index - ite_index;
+ if (compare == 0) {
+ functor_type::apply (*it, *ite);
+ ++ it, ++ ite;
+ if (it != it_end && ite != ite_end) {
+ it_index = it.index ();
+ ite_index = ite.index ();
+ } else
+ break;
+ } else if (compare < 0) {
+ increment (it, it_end, - compare);
+ if (it != it_end)
+ it_index = it.index ();
+ else
+ break;
+ } else if (compare > 0) {
+ increment (ite, ite_end, compare);
+ if (ite != ite_end)
+ ite_index = ite.index ();
+ else
+ break;
+ }
+ }
+ }
+
+#if BOOST_UBLAS_TYPE_CHECK
+ increment (ite, ite_end);
+ increment (it, it_end);
+#endif
+ }
+
+ // Dispatcher
+ template<template <class T1, class T2> class F, class V, class E>
+ BOOST_UBLAS_INLINE
+ void vector_swap (V &v, vector_expression<E> &e) {
+ typedef typename vector_swap_traits<typename V::storage_category,
+ typename E::const_iterator::iterator_category>::storage_category storage_category;
+ vector_swap<F> (v, e, storage_category ());
+ }
+
+}}}
+
+#endif
diff --git a/boost/boost/numeric/ublas/exception.hpp b/boost/boost/numeric/ublas/exception.hpp
new file mode 100644
index 00000000000..90f32e413eb
--- /dev/null
+++ b/boost/boost/numeric/ublas/exception.hpp
@@ -0,0 +1,293 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without fee,
+// provided that the above copyright notice appear in all copies and
+// that both that copyright notice and this permission notice appear
+// in supporting documentation. The authors make no representations
+// about the suitability of this software for any purpose.
+// It is provided "as is" without express or implied warranty.
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#ifndef _BOOST_UBLAS_EXCEPTION_
+#define _BOOST_UBLAS_EXCEPTION_
+
+#if ! defined (BOOST_NO_EXCEPTIONS) && ! defined (BOOST_UBLAS_NO_EXCEPTIONS)
+#include <stdexcept>
+#else
+#include <cstdlib>
+#endif
+#ifndef BOOST_UBLAS_NO_STD_CERR
+#include <iostream>
+#endif
+
+#include <boost/numeric/ublas/detail/config.hpp>
+
+namespace boost { namespace numeric { namespace ublas {
+
+ struct divide_by_zero
+#if ! defined (BOOST_NO_EXCEPTIONS) && ! defined (BOOST_UBLAS_NO_EXCEPTIONS)
+ // Inherit from standard exceptions as requested during review.
+ : public std::runtime_error {
+ explicit divide_by_zero (const char *s = "divide by zero") :
+ std::runtime_error (s) {}
+ void raise () {
+ throw *this;
+ }
+#else
+ {
+ divide_by_zero ()
+ {}
+ explicit divide_by_zero (const char *)
+ {}
+ void raise () {
+ std::abort ();
+ }
+#endif
+ };
+
+ struct internal_logic
+#if ! defined (BOOST_NO_EXCEPTIONS) && ! defined (BOOST_UBLAS_NO_EXCEPTIONS)
+ // Inherit from standard exceptions as requested during review.
+ : public std::logic_error {
+ explicit internal_logic (const char *s = "internal logic") :
+ std::logic_error (s) {}
+ void raise () {
+ throw *this;
+ }
+#else
+ {
+ internal_logic ()
+ {}
+ explicit internal_logic (const char *)
+ {}
+ void raise () {
+ std::abort ();
+ }
+#endif
+ };
+
+ struct external_logic
+#if ! defined (BOOST_NO_EXCEPTIONS) && ! defined (BOOST_UBLAS_NO_EXCEPTIONS)
+ // Inherit from standard exceptions as requested during review.
+ : public std::logic_error {
+ explicit external_logic (const char *s = "external logic") :
+ std::logic_error (s) {}
+ // virtual const char *what () const throw () {
+ // return "exception: external logic";
+ // }
+ void raise () {
+ throw *this;
+ }
+#else
+ {
+ external_logic ()
+ {}
+ explicit external_logic (const char *)
+ {}
+ void raise () {
+ std::abort ();
+ }
+#endif
+ };
+
+ struct bad_argument
+#if ! defined (BOOST_NO_EXCEPTIONS) && ! defined (BOOST_UBLAS_NO_EXCEPTIONS)
+ // Inherit from standard exceptions as requested during review.
+ : public std::invalid_argument {
+ explicit bad_argument (const char *s = "bad argument") :
+ std::invalid_argument (s) {}
+ void raise () {
+ throw *this;
+ }
+#else
+ {
+ bad_argument ()
+ {}
+ explicit bad_argument (const char *)
+ {}
+ void raise () {
+ std::abort ();
+ }
+#endif
+ };
+
+ struct bad_size
+#if ! defined (BOOST_NO_EXCEPTIONS) && ! defined (BOOST_UBLAS_NO_EXCEPTIONS)
+ // Inherit from standard exceptions as requested during review.
+ : public std::domain_error {
+ explicit bad_size (const char *s = "bad size") :
+ std::domain_error (s) {}
+ void raise () {
+ throw *this;
+ }
+#else
+ {
+ bad_size ()
+ {}
+ explicit bad_size (const char *)
+ {}
+ void raise () {
+ std::abort ();
+ }
+#endif
+ };
+
+ struct bad_index
+#if ! defined (BOOST_NO_EXCEPTIONS) && ! defined (BOOST_UBLAS_NO_EXCEPTIONS)
+ // Inherit from standard exceptions as requested during review.
+ : public std::out_of_range {
+ explicit bad_index (const char *s = "bad index") :
+ std::out_of_range (s) {}
+ void raise () {
+ throw *this;
+ }
+#else
+ {
+ bad_index ()
+ {}
+ explicit bad_index (const char *)
+ {}
+ void raise () {
+ std::abort ();
+ }
+#endif
+ };
+
+ struct singular
+#if ! defined (BOOST_NO_EXCEPTIONS) && ! defined (BOOST_UBLAS_NO_EXCEPTIONS)
+ // Inherit from standard exceptions as requested during review.
+ : public std::runtime_error {
+ explicit singular (const char *s = "singular") :
+ std::runtime_error (s) {}
+ void raise () {
+ throw *this;
+ }
+#else
+ {
+ singular ()
+ {}
+ explicit singular (const char *)
+ {}
+ void raise () {
+ throw *this;
+ std::abort ();
+ }
+#endif
+ };
+
+ struct non_real
+#if ! defined (BOOST_NO_EXCEPTIONS) && ! defined (BOOST_UBLAS_NO_EXCEPTIONS)
+ // Inherit from standard exceptions as requested during review.
+ : public std::domain_error {
+ explicit non_real (const char *s = "exception: non real") :
+ std::domain_error (s) {}
+ void raise () {
+ throw *this;
+ }
+#else
+ {
+ non_real ()
+ {}
+ explicit non_real (const char *)
+ {}
+ void raise () {
+ std::abort ();
+ }
+#endif
+ };
+
+#if BOOST_UBLAS_CHECK_ENABLE
+// Macros are equivilent to
+// template<class E>
+// BOOST_UBLAS_INLINE
+// void check (bool expression, const E &e) {
+// if (! expression)
+// e.raise ();
+// }
+// template<class E>
+// BOOST_UBLAS_INLINE
+// void check_ex (bool expression, const char *file, int line, const E &e) {
+// if (! expression)
+// e.raise ();
+// }
+#ifndef BOOST_UBLAS_NO_STD_CERR
+#define BOOST_UBLAS_CHECK_FALSE(e) \
+ std::cerr << "Check failed in file " << __FILE__ << " at line " << __LINE__ << ":" << std::endl; \
+ e.raise ();
+#define BOOST_UBLAS_CHECK(expression, e) \
+ if (! (expression)) { \
+ std::cerr << "Check failed in file " << __FILE__ << " at line " << __LINE__ << ":" << std::endl; \
+ std::cerr << #expression << std::endl; \
+ e.raise (); \
+ }
+#define BOOST_UBLAS_CHECK_EX(expression, file, line, e) \
+ if (! (expression)) { \
+ std::cerr << "Check failed in file " << (file) << " at line " << (line) << ":" << std::endl; \
+ std::cerr << #expression << std::endl; \
+ e.raise (); \
+ }
+#else
+#define BOOST_UBLAS_CHECK_FALSE(e) \
+ e.raise ();
+#define BOOST_UBLAS_CHECK(expression, e) \
+ if (! (expression)) { \
+ e.raise (); \
+ }
+#define BOOST_UBLAS_CHECK_EX(expression, file, line, e) \
+ if (! (expression)) { \
+ e.raise (); \
+ }
+#endif
+#else
+// Macros are equivilent to
+// template<class E>
+// BOOST_UBLAS_INLINE
+// void check (bool expression, const E &e) {}
+// template<class E>
+// BOOST_UBLAS_INLINE
+// void check_ex (bool expression, const char *file, int line, const E &e) {}
+#define BOOST_UBLAS_CHECK_FALSE(e)
+#define BOOST_UBLAS_CHECK(expression, e)
+#define BOOST_UBLAS_CHECK_EX(expression, file, line, e)
+#endif
+
+
+#ifndef BOOST_UBLAS_USE_FAST_SAME
+// Macro is equivilent to
+// template<class T>
+// BOOST_UBLAS_INLINE
+// const T &same_impl (const T &size1, const T &size2) {
+// BOOST_UBLAS_CHECK (size1 == size2, bad_argument ());
+// return (std::min) (size1, size2);
+// }
+// #define BOOST_UBLAS_SAME(size1, size2) same_impl ((size1), (size2))
+ template<class T>
+ BOOST_UBLAS_INLINE
+ // Kresimir Fresl and Dan Muller reported problems with COMO.
+ // We better change the signature instead of libcomo ;-)
+ // const T &same_impl_ex (const T &size1, const T &size2, const char *file, int line) {
+ T same_impl_ex (const T &size1, const T &size2, const char *file, int line) {
+ BOOST_UBLAS_CHECK_EX (size1 == size2, file, line, bad_argument ());
+ return (std::min) (size1, size2);
+ }
+#define BOOST_UBLAS_SAME(size1, size2) same_impl_ex ((size1), (size2), __FILE__, __LINE__)
+#else
+// Macros are equivilent to
+// template<class T>
+// BOOST_UBLAS_INLINE
+// const T &same_impl (const T &size1, const T &size2) {
+// return size1;
+// }
+// #define BOOST_UBLAS_SAME(size1, size2) same_impl ((size1), (size2))
+#define BOOST_UBLAS_SAME(size1, size2) (size1)
+#endif
+
+}}}
+
+#endif
diff --git a/boost/boost/numeric/ublas/expression_types.hpp b/boost/boost/numeric/ublas/expression_types.hpp
new file mode 100644
index 00000000000..f6147abdda1
--- /dev/null
+++ b/boost/boost/numeric/ublas/expression_types.hpp
@@ -0,0 +1,492 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without fee,
+// provided that the above copyright notice appear in all copies and
+// that both that copyright notice and this permission notice appear
+// in supporting documentation. The authors make no representations
+// about the suitability of this software for any purpose.
+// It is provided "as is" without express or implied warranty.
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+#ifndef _BOOST_UBLAS_EXPRESSION_TYPE_
+#define _BOOST_UBLAS_EXPRESSION_TYPE_
+
+#include <boost/numeric/ublas/exception.hpp>
+#include <boost/numeric/ublas/traits.hpp>
+#include <boost/numeric/ublas/functional.hpp>
+
+
+// Expression templates based on ideas of Todd Veldhuizen and Geoffrey Furnish
+// Iterators based on ideas of Jeremy Siek
+
+namespace boost { namespace numeric { namespace ublas {
+
+ // Base class for uBLAS staticaly derived expressions - see the Barton Nackman trick
+ // Provides numeric properties for linear algebra
+ template<class E>
+ class ublas_expression {
+ public:
+ typedef E expression_type;
+ /* E can be an incomplete type - to define the following we would need more template arguments
+ typedef typename E::type_category type_category;
+ typedef typename E::value_type value_type;
+ */
+
+ // Directly implement nonassignable - simplifes debugging call trace!
+ protected:
+ ublas_expression () {}
+ ~ublas_expression () {}
+ private:
+ const ublas_expression& operator= (const ublas_expression &);
+ };
+
+
+ // Base class for Scalar Expression models -
+ // it does not model the Scalar Expression concept but all derived types should.
+ // The class defines a common base type and some common interface for all
+ // statically derived Scalar Expression classes
+ // We implement the casts to the statically derived type.
+ template<class E>
+ class scalar_expression:
+ public ublas_expression<E> {
+ public:
+ typedef E expression_type;
+ typedef scalar_tag type_category;
+
+ BOOST_UBLAS_INLINE
+ const expression_type &operator () () const {
+ return *static_cast<const expression_type *> (this);
+ }
+ BOOST_UBLAS_INLINE
+ expression_type &operator () () {
+ return *static_cast<expression_type *> (this);
+ }
+ };
+
+ template<class T>
+ class scalar_reference:
+ public scalar_expression<scalar_reference<T> > {
+
+ typedef scalar_reference<T> self_type;
+ public:
+ typedef T value_type;
+ typedef const value_type &const_reference;
+ typedef typename boost::mpl::if_<boost::is_const<T>,
+ const_reference,
+ value_type &>::type reference;
+ typedef const self_type const_closure_type;
+ typedef const_closure_type closure_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ explicit scalar_reference (reference t):
+ t_ (t) {}
+
+ // Conversion
+ BOOST_UBLAS_INLINE
+ operator value_type () const {
+ return t_;
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ scalar_reference &operator = (const scalar_reference &s) {
+ t_ = s.t_;
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ scalar_reference &operator = (const scalar_expression<AE> &ae) {
+ t_ = ae;
+ return *this;
+ }
+
+ // Closure comparison
+ BOOST_UBLAS_INLINE
+ bool same_closure (const scalar_reference &sr) const {
+ return &t_ == &sr.t_;
+ }
+
+ private:
+ reference t_;
+ };
+
+ template<class T>
+ class scalar_value:
+ public scalar_expression<scalar_value<T> > {
+
+ typedef scalar_value<T> self_type;
+ public:
+ typedef T value_type;
+ typedef const value_type &const_reference;
+ typedef typename boost::mpl::if_<boost::is_const<T>,
+ const_reference,
+ value_type &>::type reference;
+ typedef const scalar_reference<const self_type> const_closure_type;
+ typedef scalar_reference<self_type> closure_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ scalar_value ():
+ t_ () {}
+ BOOST_UBLAS_INLINE
+ scalar_value (const value_type &t):
+ t_ (t) {}
+
+ BOOST_UBLAS_INLINE
+ operator value_type () const {
+ return t_;
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ scalar_value &operator = (const scalar_value &s) {
+ t_ = s.t_;
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ scalar_value &operator = (const scalar_expression<AE> &ae) {
+ t_ = ae;
+ return *this;
+ }
+
+ // Closure comparison
+ BOOST_UBLAS_INLINE
+ bool same_closure (const scalar_value &sv) const {
+ return this == &sv; // self closing on instances value
+ }
+
+ private:
+ value_type t_;
+ };
+
+
+ // Base class for Vector Expression models -
+ // it does not model the Vector Expression concept but all derived types should.
+ // The class defines a common base type and some common interface for all
+ // statically derived Vector Expression classes
+ // We implement the casts to the statically derived type.
+ template<class E>
+ class vector_expression:
+ public ublas_expression<E> {
+ public:
+ static const unsigned complexity = 0;
+ typedef E expression_type;
+ typedef vector_tag type_category;
+ /* E can be an incomplete type - to define the following we would need more template arguments
+ typedef typename E::size_type size_type;
+ */
+
+ BOOST_UBLAS_INLINE
+ const expression_type &operator () () const {
+ return *static_cast<const expression_type *> (this);
+ }
+ BOOST_UBLAS_INLINE
+ expression_type &operator () () {
+ return *static_cast<expression_type *> (this);
+ }
+
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ private:
+ // projection types
+ typedef vector_range<E> vector_range_type;
+ typedef vector_range<const E> const_vector_range_type;
+ typedef vector_slice<E> vector_slice_type;
+ typedef vector_slice<const E> const_vector_slice_type;
+ // vector_indirect_type will depend on the A template parameter
+ typedef basic_range<> default_range; // required to avoid range/slice name confusion
+ typedef basic_slice<> default_slice;
+ public:
+ BOOST_UBLAS_INLINE
+ const_vector_range_type operator () (const default_range &r) const {
+ return const_vector_range_type (operator () (), r);
+ }
+ BOOST_UBLAS_INLINE
+ vector_range_type operator () (const default_range &r) {
+ return vector_range_type (operator () (), r);
+ }
+ BOOST_UBLAS_INLINE
+ const_vector_slice_type operator () (const default_slice &s) const {
+ return const_vector_slice_type (operator () (), s);
+ }
+ BOOST_UBLAS_INLINE
+ vector_slice_type operator () (const default_slice &s) {
+ return vector_slice_type (operator () (), s);
+ }
+ template<class A>
+ BOOST_UBLAS_INLINE
+ const vector_indirect<const E, A> operator () (const indirect_array<A> &ia) const {
+ return vector_indirect<const E, A> (operator () (), ia);
+ }
+ template<class A>
+ BOOST_UBLAS_INLINE
+ vector_indirect<E, A> operator () (const indirect_array<A> &ia) {
+ return vector_indirect<E, A> (operator () (), ia);
+ }
+
+ BOOST_UBLAS_INLINE
+ const_vector_range_type project (const default_range &r) const {
+ return const_vector_range_type (operator () (), r);
+ }
+ BOOST_UBLAS_INLINE
+ vector_range_type project (const default_range &r) {
+ return vector_range_type (operator () (), r);
+ }
+ BOOST_UBLAS_INLINE
+ const_vector_slice_type project (const default_slice &s) const {
+ return const_vector_slice_type (operator () (), s);
+ }
+ BOOST_UBLAS_INLINE
+ vector_slice_type project (const default_slice &s) {
+ return vector_slice_type (operator () (), s);
+ }
+ template<class A>
+ BOOST_UBLAS_INLINE
+ const vector_indirect<const E, A> project (const indirect_array<A> &ia) const {
+ return vector_indirect<const E, A> (operator () (), ia);
+ }
+ template<class A>
+ BOOST_UBLAS_INLINE
+ vector_indirect<E, A> project (const indirect_array<A> &ia) {
+ return vector_indirect<E, A> (operator () (), ia);
+ }
+#endif
+ };
+
+ // Base class for Vector container models -
+ // it does not model the Vector concept but all derived types should.
+ // The class defines a common base type and some common interface for all
+ // statically derived Vector classes
+ // We implement the casts to the statically derived type.
+ template<class C>
+ class vector_container:
+ public vector_expression<C> {
+ public:
+ static const unsigned complexity = 0;
+ typedef C container_type;
+ typedef vector_tag type_category;
+
+ BOOST_UBLAS_INLINE
+ const container_type &operator () () const {
+ return *static_cast<const container_type *> (this);
+ }
+ BOOST_UBLAS_INLINE
+ container_type &operator () () {
+ return *static_cast<container_type *> (this);
+ }
+
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using vector_expression<C>::operator ();
+#endif
+ };
+
+
+ // Base class for Matrix Expression models -
+ // it does not model the Matrix Expression concept but all derived types should.
+ // The class defines a common base type and some common interface for all
+ // statically derived Matrix Expression classes
+ // We implement the casts to the statically derived type.
+ template<class E>
+ class matrix_expression:
+ public ublas_expression<E> {
+ public:
+ static const unsigned complexity = 0;
+ typedef E expression_type;
+ typedef matrix_tag type_category;
+ /* E can be an incomplete type - to define the following we would need more template arguments
+ typedef typename E::size_type size_type;
+ */
+
+ BOOST_UBLAS_INLINE
+ const expression_type &operator () () const {
+ return *static_cast<const expression_type *> (this);
+ }
+ BOOST_UBLAS_INLINE
+ expression_type &operator () () {
+ return *static_cast<expression_type *> (this);
+ }
+
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ private:
+ // projection types
+ typedef vector_range<E> vector_range_type;
+ typedef const vector_range<const E> const_vector_range_type;
+ typedef vector_slice<E> vector_slice_type;
+ typedef const vector_slice<const E> const_vector_slice_type;
+ typedef matrix_row<E> matrix_row_type;
+ typedef const matrix_row<const E> const_matrix_row_type;
+ typedef matrix_column<E> matrix_column_type;
+ typedef const matrix_column<const E> const_matrix_column_type;
+ typedef matrix_range<E> matrix_range_type;
+ typedef const matrix_range<const E> const_matrix_range_type;
+ typedef matrix_slice<E> matrix_slice_type;
+ typedef const matrix_slice<const E> const_matrix_slice_type;
+ // matrix_indirect_type will depend on the A template parameter
+ typedef basic_range<> default_range; // required to avoid range/slice name confusion
+ typedef basic_slice<> default_slice;
+
+ public:
+ BOOST_UBLAS_INLINE
+ const_matrix_row_type operator [] (std::size_t i) const {
+ return const_matrix_row_type (operator () (), i);
+ }
+ BOOST_UBLAS_INLINE
+ matrix_row_type operator [] (std::size_t i) {
+ return matrix_row_type (operator () (), i);
+ }
+ BOOST_UBLAS_INLINE
+ const_matrix_row_type row (std::size_t i) const {
+ return const_matrix_row_type (operator () (), i);
+ }
+ BOOST_UBLAS_INLINE
+ matrix_row_type row (std::size_t i) {
+ return matrix_row_type (operator () (), i);
+ }
+ BOOST_UBLAS_INLINE
+ const_matrix_column_type column (std::size_t j) const {
+ return const_matrix_column_type (operator () (), j);
+ }
+ BOOST_UBLAS_INLINE
+ matrix_column_type column (std::size_t j) {
+ return matrix_column_type (operator () (), j);
+ }
+
+ BOOST_UBLAS_INLINE
+ const_matrix_range_type operator () (const default_range &r1, const default_range &r2) const {
+ return const_matrix_range_type (operator () (), r1, r2);
+ }
+ BOOST_UBLAS_INLINE
+ matrix_range_type operator () (const default_range &r1, const default_range &r2) {
+ return matrix_range_type (operator () (), r1, r2);
+ }
+ BOOST_UBLAS_INLINE
+ const_matrix_slice_type operator () (const default_slice &s1, const default_slice &s2) const {
+ return const_matrix_slice_type (operator () (), s1, s2);
+ }
+ BOOST_UBLAS_INLINE
+ matrix_slice_type operator () (const default_slice &s1, const default_slice &s2) {
+ return matrix_slice_type (operator () (), s1, s2);
+ }
+ template<class A>
+ BOOST_UBLAS_INLINE
+ const matrix_indirect<const E, A> operator () (const indirect_array<A> &ia1, const indirect_array<A> &ia2) const {
+ return matrix_indirect<const E, A> (operator () (), ia1, ia2);
+ }
+ template<class A>
+ BOOST_UBLAS_INLINE
+ matrix_indirect<E, A> operator () (const indirect_array<A> &ia1, const indirect_array<A> &ia2) {
+ return matrix_indirect<E, A> (operator () (), ia1, ia2);
+ }
+
+ BOOST_UBLAS_INLINE
+ const_matrix_range_type project (const default_range &r1, const default_range &r2) const {
+ return const_matrix_range_type (operator () (), r1, r2);
+ }
+ BOOST_UBLAS_INLINE
+ matrix_range_type project (const default_range &r1, const default_range &r2) {
+ return matrix_range_type (operator () (), r1, r2);
+ }
+ BOOST_UBLAS_INLINE
+ const_matrix_slice_type project (const default_slice &s1, const default_slice &s2) const {
+ return const_matrix_slice_type (operator () (), s1, s2);
+ }
+ BOOST_UBLAS_INLINE
+ matrix_slice_type project (const default_slice &s1, const default_slice &s2) {
+ return matrix_slice_type (operator () (), s1, s2);
+ }
+ template<class A>
+ BOOST_UBLAS_INLINE
+ const matrix_indirect<const E, A> project (const indirect_array<A> &ia1, const indirect_array<A> &ia2) const {
+ return matrix_indirect<const E, A> (operator () (), ia1, ia2);
+ }
+ template<class A>
+ BOOST_UBLAS_INLINE
+ matrix_indirect<E, A> project (const indirect_array<A> &ia1, const indirect_array<A> &ia2) {
+ return matrix_indirect<E, A> (operator () (), ia1, ia2);
+ }
+#endif
+ };
+
+#ifdef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ struct iterator1_tag {};
+ struct iterator2_tag {};
+
+ template<class I>
+ BOOST_UBLAS_INLINE
+ typename I::dual_iterator_type begin (const I &it, iterator1_tag) {
+ return it ().find2 (1, it.index1 (), 0);
+ }
+ template<class I>
+ BOOST_UBLAS_INLINE
+ typename I::dual_iterator_type end (const I &it, iterator1_tag) {
+ return it ().find2 (1, it.index1 (), it ().size2 ());
+ }
+ template<class I>
+ BOOST_UBLAS_INLINE
+ typename I::dual_reverse_iterator_type rbegin (const I &it, iterator1_tag) {
+ return typename I::dual_reverse_iterator_type (end (it, iterator1_tag ()));
+ }
+ template<class I>
+ BOOST_UBLAS_INLINE
+ typename I::dual_reverse_iterator_type rend (const I &it, iterator1_tag) {
+ return typename I::dual_reverse_iterator_type (begin (it, iterator1_tag ()));
+ }
+
+ template<class I>
+ BOOST_UBLAS_INLINE
+ typename I::dual_iterator_type begin (const I &it, iterator2_tag) {
+ return it ().find1 (1, 0, it.index2 ());
+ }
+ template<class I>
+ BOOST_UBLAS_INLINE
+ typename I::dual_iterator_type end (const I &it, iterator2_tag) {
+ return it ().find1 (1, it ().size1 (), it.index2 ());
+ }
+ template<class I>
+ BOOST_UBLAS_INLINE
+ typename I::dual_reverse_iterator_type rbegin (const I &it, iterator2_tag) {
+ return typename I::dual_reverse_iterator_type (end (it, iterator2_tag ()));
+ }
+ template<class I>
+ BOOST_UBLAS_INLINE
+ typename I::dual_reverse_iterator_type rend (const I &it, iterator2_tag) {
+ return typename I::dual_reverse_iterator_type (begin (it, iterator2_tag ()));
+ }
+#endif
+
+ // Base class for Matrix container models -
+ // it does not model the Matrix concept but all derived types should.
+ // The class defines a common base type and some common interface for all
+ // statically derived Matrix classes
+ // We implement the casts to the statically derived type.
+ template<class C>
+ class matrix_container:
+ public matrix_expression<C> {
+ public:
+ static const unsigned complexity = 0;
+ typedef C container_type;
+ typedef matrix_tag type_category;
+
+ BOOST_UBLAS_INLINE
+ const container_type &operator () () const {
+ return *static_cast<const container_type *> (this);
+ }
+ BOOST_UBLAS_INLINE
+ container_type &operator () () {
+ return *static_cast<container_type *> (this);
+ }
+
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using matrix_expression<C>::operator ();
+#endif
+ };
+
+}}}
+
+#endif
diff --git a/boost/boost/numeric/ublas/functional.hpp b/boost/boost/numeric/ublas/functional.hpp
new file mode 100644
index 00000000000..d3885dfcb74
--- /dev/null
+++ b/boost/boost/numeric/ublas/functional.hpp
@@ -0,0 +1,2087 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without fee,
+// provided that the above copyright notice appear in all copies and
+// that both that copyright notice and this permission notice appear
+// in supporting documentation. The authors make no representations
+// about the suitability of this software for any purpose.
+// It is provided "as is" without express or implied warranty.
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#ifndef _BOOST_UBLAS_FUNCTIONAL_
+#define _BOOST_UBLAS_FUNCTIONAL_
+
+#include <functional>
+
+#include <boost/numeric/ublas/traits.hpp>
+#ifdef BOOST_UBLAS_USE_DUFF_DEVICE
+#include <boost/numeric/ublas/detail/duff.hpp>
+#endif
+#ifdef BOOST_UBLAS_USE_SIMD
+#include <boost/numeric/ublas/detail/raw.hpp>
+#else
+namespace boost { namespace numeric { namespace ublas { namespace raw {
+}}}}
+#endif
+#ifdef BOOST_UBLAS_HAVE_BINDINGS
+#include <boost/numeric/bindings/traits/std_vector.hpp>
+#include <boost/numeric/bindings/traits/ublas_vector.hpp>
+#include <boost/numeric/bindings/traits/ublas_matrix.hpp>
+#include <boost/numeric/bindings/atlas/cblas.hpp>
+#endif
+
+#include <boost/numeric/ublas/detail/definitions.hpp>
+
+
+
+namespace boost { namespace numeric { namespace ublas {
+
+ // Scalar functors
+
+ // Unary
+ template<class T>
+ struct scalar_unary_functor {
+ typedef T value_type;
+ typedef typename type_traits<T>::const_reference argument_type;
+ typedef typename type_traits<T>::value_type result_type;
+ };
+
+ template<class T>
+ struct scalar_identity:
+ public scalar_unary_functor<T> {
+ typedef typename scalar_unary_functor<T>::argument_type argument_type;
+ typedef typename scalar_unary_functor<T>::result_type result_type;
+
+ static BOOST_UBLAS_INLINE
+ result_type apply (argument_type t) {
+ return t;
+ }
+ };
+ template<class T>
+ struct scalar_negate:
+ public scalar_unary_functor<T> {
+ typedef typename scalar_unary_functor<T>::argument_type argument_type;
+ typedef typename scalar_unary_functor<T>::result_type result_type;
+
+ static BOOST_UBLAS_INLINE
+ result_type apply (argument_type t) {
+ return - t;
+ }
+ };
+ template<class T>
+ struct scalar_conj:
+ public scalar_unary_functor<T> {
+ typedef typename scalar_unary_functor<T>::value_type value_type;
+ typedef typename scalar_unary_functor<T>::argument_type argument_type;
+ typedef typename scalar_unary_functor<T>::result_type result_type;
+
+ static BOOST_UBLAS_INLINE
+ result_type apply (argument_type t) {
+ return type_traits<value_type>::conj (t);
+ }
+ };
+
+ // Unary returning real
+ template<class T>
+ struct scalar_real_unary_functor {
+ typedef T value_type;
+ typedef typename type_traits<T>::const_reference argument_type;
+ typedef typename type_traits<T>::real_type result_type;
+ };
+
+ template<class T>
+ struct scalar_real:
+ public scalar_real_unary_functor<T> {
+ typedef typename scalar_real_unary_functor<T>::value_type value_type;
+ typedef typename scalar_real_unary_functor<T>::argument_type argument_type;
+ typedef typename scalar_real_unary_functor<T>::result_type result_type;
+
+ static BOOST_UBLAS_INLINE
+ result_type apply (argument_type t) {
+ return type_traits<value_type>::real (t);
+ }
+ };
+ template<class T>
+ struct scalar_imag:
+ public scalar_real_unary_functor<T> {
+ typedef typename scalar_real_unary_functor<T>::value_type value_type;
+ typedef typename scalar_real_unary_functor<T>::argument_type argument_type;
+ typedef typename scalar_real_unary_functor<T>::result_type result_type;
+
+ static BOOST_UBLAS_INLINE
+ result_type apply (argument_type t) {
+ return type_traits<value_type>::imag (t);
+ }
+ };
+
+ // Binary
+ template<class T1, class T2>
+ struct scalar_binary_functor {
+ typedef typename type_traits<T1>::const_reference argument1_type;
+ typedef typename type_traits<T2>::const_reference argument2_type;
+ typedef typename promote_traits<T1, T2>::promote_type result_type;
+ };
+
+ template<class T1, class T2>
+ struct scalar_plus:
+ public scalar_binary_functor<T1, T2> {
+ typedef typename scalar_binary_functor<T1, T2>::argument1_type argument1_type;
+ typedef typename scalar_binary_functor<T1, T2>::argument2_type argument2_type;
+ typedef typename scalar_binary_functor<T1, T2>::result_type result_type;
+
+ static BOOST_UBLAS_INLINE
+ result_type apply (argument1_type t1, argument2_type t2) {
+ return t1 + t2;
+ }
+ };
+ template<class T1, class T2>
+ struct scalar_minus:
+ public scalar_binary_functor<T1, T2> {
+ typedef typename scalar_binary_functor<T1, T2>::argument1_type argument1_type;
+ typedef typename scalar_binary_functor<T1, T2>::argument2_type argument2_type;
+ typedef typename scalar_binary_functor<T1, T2>::result_type result_type;
+
+ static BOOST_UBLAS_INLINE
+ result_type apply (argument1_type t1, argument2_type t2) {
+ return t1 - t2;
+ }
+ };
+ template<class T1, class T2>
+ struct scalar_multiplies:
+ public scalar_binary_functor<T1, T2> {
+ typedef typename scalar_binary_functor<T1, T2>::argument1_type argument1_type;
+ typedef typename scalar_binary_functor<T1, T2>::argument2_type argument2_type;
+ typedef typename scalar_binary_functor<T1, T2>::result_type result_type;
+
+ static BOOST_UBLAS_INLINE
+ result_type apply (argument1_type t1, argument2_type t2) {
+ return t1 * t2;
+ }
+ };
+ template<class T1, class T2>
+ struct scalar_divides:
+ public scalar_binary_functor<T1, T2> {
+ typedef typename scalar_binary_functor<T1, T2>::argument1_type argument1_type;
+ typedef typename scalar_binary_functor<T1, T2>::argument2_type argument2_type;
+ typedef typename scalar_binary_functor<T1, T2>::result_type result_type;
+
+ static BOOST_UBLAS_INLINE
+ result_type apply (argument1_type t1, argument2_type t2) {
+ return t1 / t2;
+ }
+ };
+
+ template<class T1, class T2>
+ struct scalar_binary_assign_functor {
+ // ISSUE Remove reference to avoid reference to reference problems
+ typedef typename type_traits<typename boost::remove_reference<T1>::type>::reference argument1_type;
+ typedef typename type_traits<T2>::const_reference argument2_type;
+ };
+
+ struct assign_tag {};
+ struct computed_assign_tag {};
+
+ template<class T1, class T2>
+ struct scalar_assign:
+ public scalar_binary_assign_functor<T1, T2> {
+ typedef typename scalar_binary_assign_functor<T1, T2>::argument1_type argument1_type;
+ typedef typename scalar_binary_assign_functor<T1, T2>::argument2_type argument2_type;
+#if BOOST_WORKAROUND( __IBMCPP__, <=600 )
+ static const bool computed ;
+#else
+ static const bool computed = false ;
+#endif
+
+ static BOOST_UBLAS_INLINE
+ void apply (argument1_type t1, argument2_type t2) {
+ t1 = t2;
+ }
+
+ template<class U1, class U2>
+ struct rebind {
+ typedef scalar_assign<U1, U2> other;
+ };
+ };
+
+#if BOOST_WORKAROUND( __IBMCPP__, <=600 )
+ template<class T1, class T2>
+ const bool scalar_assign<T1,T2>::computed = false;
+#endif
+
+ template<class T1, class T2>
+ struct scalar_plus_assign:
+ public scalar_binary_assign_functor<T1, T2> {
+ typedef typename scalar_binary_assign_functor<T1, T2>::argument1_type argument1_type;
+ typedef typename scalar_binary_assign_functor<T1, T2>::argument2_type argument2_type;
+#if BOOST_WORKAROUND( __IBMCPP__, <=600 )
+ static const bool computed ;
+#else
+ static const bool computed = true ;
+#endif
+
+ static BOOST_UBLAS_INLINE
+ void apply (argument1_type t1, argument2_type t2) {
+ t1 += t2;
+ }
+
+ template<class U1, class U2>
+ struct rebind {
+ typedef scalar_plus_assign<U1, U2> other;
+ };
+ };
+
+#if BOOST_WORKAROUND( __IBMCPP__, <=600 )
+ template<class T1, class T2>
+ const bool scalar_plus_assign<T1,T2>::computed = true;
+#endif
+
+ template<class T1, class T2>
+ struct scalar_minus_assign:
+ public scalar_binary_assign_functor<T1, T2> {
+ typedef typename scalar_binary_assign_functor<T1, T2>::argument1_type argument1_type;
+ typedef typename scalar_binary_assign_functor<T1, T2>::argument2_type argument2_type;
+#if BOOST_WORKAROUND( __IBMCPP__, <=600 )
+ static const bool computed ;
+#else
+ static const bool computed = true ;
+#endif
+
+ static BOOST_UBLAS_INLINE
+ void apply (argument1_type t1, argument2_type t2) {
+ t1 -= t2;
+ }
+
+ template<class U1, class U2>
+ struct rebind {
+ typedef scalar_minus_assign<U1, U2> other;
+ };
+ };
+
+#if BOOST_WORKAROUND( __IBMCPP__, <=600 )
+ template<class T1, class T2>
+ const bool scalar_minus_assign<T1,T2>::computed = true;
+#endif
+
+ template<class T1, class T2>
+ struct scalar_multiplies_assign:
+ public scalar_binary_assign_functor<T1, T2> {
+ typedef typename scalar_binary_assign_functor<T1, T2>::argument1_type argument1_type;
+ typedef typename scalar_binary_assign_functor<T1, T2>::argument2_type argument2_type;
+ static const bool computed = true;
+
+ static BOOST_UBLAS_INLINE
+ void apply (argument1_type t1, argument2_type t2) {
+ t1 *= t2;
+ }
+
+ template<class U1, class U2>
+ struct rebind {
+ typedef scalar_multiplies_assign<U1, U2> other;
+ };
+ };
+ template<class T1, class T2>
+ struct scalar_divides_assign:
+ public scalar_binary_assign_functor<T1, T2> {
+ typedef typename scalar_binary_assign_functor<T1, T2>::argument1_type argument1_type;
+ typedef typename scalar_binary_assign_functor<T1, T2>::argument2_type argument2_type;
+ static const bool computed ;
+
+ static BOOST_UBLAS_INLINE
+ void apply (argument1_type t1, argument2_type t2) {
+ t1 /= t2;
+ }
+
+ template<class U1, class U2>
+ struct rebind {
+ typedef scalar_divides_assign<U1, U2> other;
+ };
+ };
+ template<class T1, class T2>
+ const bool scalar_divides_assign<T1,T2>::computed = true;
+
+ template<class T1, class T2>
+ struct scalar_binary_swap_functor {
+ typedef typename type_traits<typename boost::remove_reference<T1>::type>::reference argument1_type;
+ typedef typename type_traits<typename boost::remove_reference<T2>::type>::reference argument2_type;
+ };
+
+ template<class T1, class T2>
+ struct scalar_swap:
+ public scalar_binary_swap_functor<T1, T2> {
+ typedef typename scalar_binary_swap_functor<T1, T2>::argument1_type argument1_type;
+ typedef typename scalar_binary_swap_functor<T1, T2>::argument2_type argument2_type;
+
+ static BOOST_UBLAS_INLINE
+ void apply (argument1_type t1, argument2_type t2) {
+ std::swap (t1, t2);
+ }
+
+ template<class U1, class U2>
+ struct rebind {
+ typedef scalar_swap<U1, U2> other;
+ };
+ };
+
+ // Vector functors
+
+ // Unary returning scalar
+ template<class T>
+ struct vector_scalar_unary_functor {
+ typedef std::size_t size_type;
+ typedef std::ptrdiff_t difference_type;
+ typedef T value_type;
+ typedef T result_type;
+ };
+
+ template<class T>
+ struct vector_sum:
+ public vector_scalar_unary_functor<T> {
+ typedef typename vector_scalar_unary_functor<T>::size_type size_type;
+ typedef typename vector_scalar_unary_functor<T>::difference_type difference_type;
+ typedef typename vector_scalar_unary_functor<T>::value_type value_type;
+ typedef typename vector_scalar_unary_functor<T>::result_type result_type;
+
+ template<class E>
+ static BOOST_UBLAS_INLINE
+ result_type apply (const vector_expression<E> &e) {
+ result_type t = result_type (0);
+ size_type size (e ().size ());
+ for (size_type i = 0; i < size; ++ i)
+ t += e () (i);
+ return t;
+ }
+ // Dense case
+ template<class I>
+ static BOOST_UBLAS_INLINE
+ result_type apply (difference_type size, I it) {
+ result_type t = result_type (0);
+ while (-- size >= 0)
+ t += *it, ++ it;
+ return t;
+ }
+ // Sparse case
+ template<class I>
+ static BOOST_UBLAS_INLINE
+ result_type apply (I it, const I &it_end) {
+ result_type t = result_type (0);
+ while (it != it_end)
+ t += *it, ++ it;
+ return t;
+ }
+ };
+
+ // Unary returning real scalar
+ template<class T>
+ struct vector_scalar_real_unary_functor {
+ typedef std::size_t size_type;
+ typedef std::ptrdiff_t difference_type;
+ typedef T value_type;
+ typedef typename type_traits<T>::real_type real_type;
+ typedef real_type result_type;
+ };
+
+ template<class T>
+ struct vector_norm_1:
+ public vector_scalar_real_unary_functor<T> {
+ typedef typename vector_scalar_real_unary_functor<T>::size_type size_type;
+ typedef typename vector_scalar_real_unary_functor<T>::difference_type difference_type;
+ typedef typename vector_scalar_real_unary_functor<T>::value_type value_type;
+ typedef typename vector_scalar_real_unary_functor<T>::real_type real_type;
+ typedef typename vector_scalar_real_unary_functor<T>::result_type result_type;
+
+ template<class E>
+ static BOOST_UBLAS_INLINE
+ result_type apply (const vector_expression<E> &e) {
+ real_type t = real_type ();
+ size_type size (e ().size ());
+ for (size_type i = 0; i < size; ++ i) {
+ real_type u (type_traits<value_type>::type_abs (e () (i)));
+ t += u;
+ }
+ return t;
+ }
+ // Dense case
+ template<class I>
+ static BOOST_UBLAS_INLINE
+ result_type apply (difference_type size, I it) {
+ real_type t = real_type ();
+ while (-- size >= 0) {
+ real_type u (type_traits<value_type>::norm_1 (*it));
+ t += u;
+ ++ it;
+ }
+ return t;
+ }
+ // Sparse case
+ template<class I>
+ static BOOST_UBLAS_INLINE
+ result_type apply (I it, const I &it_end) {
+ real_type t = real_type ();
+ while (it != it_end) {
+ real_type u (type_traits<value_type>::norm_1 (*it));
+ t += u;
+ ++ it;
+ }
+ return t;
+ }
+ };
+ template<class T>
+ struct vector_norm_2:
+ public vector_scalar_real_unary_functor<T> {
+ typedef typename vector_scalar_real_unary_functor<T>::size_type size_type;
+ typedef typename vector_scalar_real_unary_functor<T>::difference_type difference_type;
+ typedef typename vector_scalar_real_unary_functor<T>::value_type value_type;
+ typedef typename vector_scalar_real_unary_functor<T>::real_type real_type;
+ typedef typename vector_scalar_real_unary_functor<T>::result_type result_type;
+
+ template<class E>
+ static BOOST_UBLAS_INLINE
+ result_type apply (const vector_expression<E> &e) {
+#ifndef BOOST_UBLAS_SCALED_NORM
+ real_type t = real_type ();
+ size_type size (e ().size ());
+ for (size_type i = 0; i < size; ++ i) {
+ real_type u (type_traits<value_type>::norm_2 (e () (i)));
+ t += u * u;
+ }
+ return type_traits<real_type>::type_sqrt (t);
+#else
+ real_type scale = real_type ();
+ real_type sum_squares (1);
+ size_type size (e ().size ());
+ for (size_type i = 0; i < size; ++ i) {
+ real_type u (type_traits<value_type>::norm_2 (e () (i)));
+ if (scale < u) {
+ real_type v (scale / u);
+ sum_squares = sum_squares * v * v + real_type (1);
+ scale = u;
+ } else {
+ real_type v (u / scale);
+ sum_squares += v * v;
+ }
+ }
+ return scale * type_traits<real_type>::type_sqrt (sum_squares);
+#endif
+ }
+ // Dense case
+ template<class I>
+ static BOOST_UBLAS_INLINE
+ result_type apply (difference_type size, I it) {
+#ifndef BOOST_UBLAS_SCALED_NORM
+ real_type t = real_type ();
+ while (-- size >= 0) {
+ real_type u (type_traits<value_type>::norm_2 (*it));
+ t += u * u;
+ ++ it;
+ }
+ return type_traits<real_type>::type_sqrt (t);
+#else
+ real_type scale = real_type ();
+ real_type sum_squares (1);
+ while (-- size >= 0) {
+ real_type u (type_traits<value_type>::norm_2 (*it));
+ if (scale < u) {
+ real_type v (scale / u);
+ sum_squares = sum_squares * v * v + real_type (1);
+ scale = u;
+ } else {
+ real_type v (u / scale);
+ sum_squares += v * v;
+ }
+ ++ it;
+ }
+ return scale * type_traits<real_type>::type_sqrt (sum_squares);
+#endif
+ }
+ // Sparse case
+ template<class I>
+ static BOOST_UBLAS_INLINE
+ result_type apply (I it, const I &it_end) {
+#ifndef BOOST_UBLAS_SCALED_NORM
+ real_type t = real_type ();
+ while (it != it_end) {
+ real_type u (type_traits<value_type>::norm_2 (*it));
+ t += u * u;
+ ++ it;
+ }
+ return type_traits<real_type>::type_sqrt (t);
+#else
+ real_type scale = real_type ();
+ real_type sum_squares (1);
+ while (it != it_end) {
+ real_type u (type_traits<value_type>::norm_2 (*it));
+ if (scale < u) {
+ real_type v (scale / u);
+ sum_squares = sum_squares * v * v + real_type (1);
+ scale = u;
+ } else {
+ real_type v (u / scale);
+ sum_squares += v * v;
+ }
+ ++ it;
+ }
+ return scale * type_traits<real_type>::type_sqrt (sum_squares);
+#endif
+ }
+ };
+ template<class T>
+ struct vector_norm_inf:
+ public vector_scalar_real_unary_functor<T> {
+ typedef typename vector_scalar_real_unary_functor<T>::size_type size_type;
+ typedef typename vector_scalar_real_unary_functor<T>::difference_type difference_type;
+ typedef typename vector_scalar_real_unary_functor<T>::value_type value_type;
+ typedef typename vector_scalar_real_unary_functor<T>::real_type real_type;
+ typedef typename vector_scalar_real_unary_functor<T>::result_type result_type;
+
+ template<class E>
+ static BOOST_UBLAS_INLINE
+ result_type apply (const vector_expression<E> &e) {
+ real_type t = real_type ();
+ size_type size (e ().size ());
+ for (size_type i = 0; i < size; ++ i) {
+ real_type u (type_traits<value_type>::norm_inf (e () (i)));
+ if (u > t)
+ t = u;
+ }
+ return t;
+ }
+ // Dense case
+ template<class I>
+ static BOOST_UBLAS_INLINE
+ result_type apply (difference_type size, I it) {
+ real_type t = real_type ();
+ while (-- size >= 0) {
+ real_type u (type_traits<value_type>::norm_inf (*it));
+ if (u > t)
+ t = u;
+ ++ it;
+ }
+ return t;
+ }
+ // Sparse case
+ template<class I>
+ static BOOST_UBLAS_INLINE
+ result_type apply (I it, const I &it_end) {
+ real_type t = real_type ();
+ while (it != it_end) {
+ real_type u (type_traits<value_type>::norm_inf (*it));
+ if (u > t)
+ t = u;
+ ++ it;
+ }
+ return t;
+ }
+ };
+
+ // Unary returning index
+ template<class T>
+ struct vector_scalar_index_unary_functor {
+ typedef std::size_t size_type;
+ typedef std::ptrdiff_t difference_type;
+ typedef T value_type;
+ typedef typename type_traits<T>::real_type real_type;
+ typedef size_type result_type;
+ };
+
+ template<class T>
+ struct vector_index_norm_inf:
+ public vector_scalar_index_unary_functor<T> {
+ typedef typename vector_scalar_index_unary_functor<T>::size_type size_type;
+ typedef typename vector_scalar_index_unary_functor<T>::difference_type difference_type;
+ typedef typename vector_scalar_index_unary_functor<T>::value_type value_type;
+ typedef typename vector_scalar_index_unary_functor<T>::real_type real_type;
+ typedef typename vector_scalar_index_unary_functor<T>::result_type result_type;
+
+ template<class E>
+ static BOOST_UBLAS_INLINE
+ result_type apply (const vector_expression<E> &e) {
+ // ISSUE For CBLAS compatibility return 0 index in empty case
+ result_type i_norm_inf (0);
+ real_type t = real_type ();
+ size_type size (e ().size ());
+ for (size_type i = 0; i < size; ++ i) {
+ real_type u (type_traits<value_type>::norm_inf (e () (i)));
+ if (u > t) {
+ i_norm_inf = i;
+ t = u;
+ }
+ }
+ return i_norm_inf;
+ }
+ // Dense case
+ template<class I>
+ static BOOST_UBLAS_INLINE
+ result_type apply (difference_type size, I it) {
+ // ISSUE For CBLAS compatibility return 0 index in empty case
+ result_type i_norm_inf (0);
+ real_type t = real_type ();
+ while (-- size >= 0) {
+ real_type u (type_traits<value_type>::norm_inf (*it));
+ if (u > t) {
+ i_norm_inf = it.index ();
+ t = u;
+ }
+ ++ it;
+ }
+ return i_norm_inf;
+ }
+ // Sparse case
+ template<class I>
+ static BOOST_UBLAS_INLINE
+ result_type apply (I it, const I &it_end) {
+ // ISSUE For CBLAS compatibility return 0 index in empty case
+ result_type i_norm_inf (0);
+ real_type t = real_type ();
+ while (it != it_end) {
+ real_type u (type_traits<value_type>::norm_inf (*it));
+ if (u > t) {
+ i_norm_inf = it.index ();
+ t = u;
+ }
+ ++ it;
+ }
+ return i_norm_inf;
+ }
+ };
+
+ // Binary returning scalar
+ template<class T1, class T2, class TR>
+ struct vector_scalar_binary_functor {
+ typedef std::size_t size_type;
+ typedef std::ptrdiff_t difference_type;
+ typedef TR value_type;
+ typedef TR result_type;
+ };
+
+ template<class T1, class T2, class TR>
+ struct vector_inner_prod:
+ public vector_scalar_binary_functor<T1, T2, TR> {
+ typedef typename vector_scalar_binary_functor<T1, T2, TR>::size_type size_type ;
+ typedef typename vector_scalar_binary_functor<T1, T2, TR>::difference_type difference_type;
+ typedef typename vector_scalar_binary_functor<T1, T2, TR>::value_type value_type;
+ typedef typename vector_scalar_binary_functor<T1, T2, TR>::result_type result_type;
+
+ template<class C1, class C2>
+ static BOOST_UBLAS_INLINE
+ result_type apply (const vector_container<C1> &c1,
+ const vector_container<C2> &c2) {
+#ifdef BOOST_UBLAS_USE_SIMD
+ using namespace raw;
+ size_type size (BOOST_UBLAS_SAME (c1 ().size (), c2 ().size ()));
+ const T1 *data1 = data_const (c1 ());
+ const T2 *data2 = data_const (c2 ());
+ size_type s1 = stride (c1 ());
+ size_type s2 = stride (c2 ());
+ result_type t = result_type (0);
+ if (s1 == 1 && s2 == 1) {
+ for (size_type i = 0; i < size; ++ i)
+ t += data1 [i] * data2 [i];
+ } else if (s2 == 1) {
+ for (size_type i = 0, i1 = 0; i < size; ++ i, i1 += s1)
+ t += data1 [i1] * data2 [i];
+ } else if (s1 == 1) {
+ for (size_type i = 0, i2 = 0; i < size; ++ i, i2 += s2)
+ t += data1 [i] * data2 [i2];
+ } else {
+ for (size_type i = 0, i1 = 0, i2 = 0; i < size; ++ i, i1 += s1, i2 += s2)
+ t += data1 [i1] * data2 [i2];
+ }
+ return t;
+#elif defined(BOOST_UBLAS_HAVE_BINDINGS)
+ return boost::numeric::bindings::atlas::dot (c1 (), c2 ());
+#else
+ return apply (static_cast<const vector_expression<C1> > (c1), static_cast<const vector_expression<C2> > (c2));
+#endif
+ }
+ template<class E1, class E2>
+ static BOOST_UBLAS_INLINE
+ result_type apply (const vector_expression<E1> &e1,
+ const vector_expression<E2> &e2) {
+ size_type size (BOOST_UBLAS_SAME (e1 ().size (), e2 ().size ()));
+ result_type t = result_type (0);
+#ifndef BOOST_UBLAS_USE_DUFF_DEVICE
+ for (size_type i = 0; i < size; ++ i)
+ t += e1 () (i) * e2 () (i);
+#else
+ size_type i (0);
+ DD (size, 4, r, (t += e1 () (i) * e2 () (i), ++ i));
+#endif
+ return t;
+ }
+ // Dense case
+ template<class I1, class I2>
+ static BOOST_UBLAS_INLINE
+ result_type apply (difference_type size, I1 it1, I2 it2) {
+ result_type t = result_type (0);
+#ifndef BOOST_UBLAS_USE_DUFF_DEVICE
+ while (-- size >= 0)
+ t += *it1 * *it2, ++ it1, ++ it2;
+#else
+ DD (size, 4, r, (t += *it1 * *it2, ++ it1, ++ it2));
+#endif
+ return t;
+ }
+ // Packed case
+ template<class I1, class I2>
+ static BOOST_UBLAS_INLINE
+ result_type apply (I1 it1, const I1 &it1_end, I2 it2, const I2 &it2_end) {
+ result_type t = result_type (0);
+ difference_type it1_size (it1_end - it1);
+ difference_type it2_size (it2_end - it2);
+ difference_type diff (0);
+ if (it1_size > 0 && it2_size > 0)
+ diff = it2.index () - it1.index ();
+ if (diff != 0) {
+ difference_type size = (std::min) (diff, it1_size);
+ if (size > 0) {
+ it1 += size;
+ it1_size -= size;
+ diff -= size;
+ }
+ size = (std::min) (- diff, it2_size);
+ if (size > 0) {
+ it2 += size;
+ it2_size -= size;
+ diff += size;
+ }
+ }
+ difference_type size ((std::min) (it1_size, it2_size));
+ while (-- size >= 0)
+ t += *it1 * *it2, ++ it1, ++ it2;
+ return t;
+ }
+ // Sparse case
+ template<class I1, class I2>
+ static BOOST_UBLAS_INLINE
+ result_type apply (I1 it1, const I1 &it1_end, I2 it2, const I2 &it2_end, sparse_bidirectional_iterator_tag) {
+ result_type t = result_type (0);
+ if (it1 != it1_end && it2 != it2_end) {
+ size_type it1_index = it1.index (), it2_index = it2.index ();
+ while (true) {
+ difference_type compare = it1_index - it2_index;
+ if (compare == 0) {
+ t += *it1 * *it2, ++ it1, ++ it2;
+ if (it1 != it1_end && it2 != it2_end) {
+ it1_index = it1.index ();
+ it2_index = it2.index ();
+ } else
+ break;
+ } else if (compare < 0) {
+ increment (it1, it1_end, - compare);
+ if (it1 != it1_end)
+ it1_index = it1.index ();
+ else
+ break;
+ } else if (compare > 0) {
+ increment (it2, it2_end, compare);
+ if (it2 != it2_end)
+ it2_index = it2.index ();
+ else
+ break;
+ }
+ }
+ }
+ return t;
+ }
+ };
+
+ // Matrix functors
+
+ // Binary returning vector
+ template<class T1, class T2, class TR>
+ struct matrix_vector_binary_functor {
+ typedef std::size_t size_type;
+ typedef std::ptrdiff_t difference_type;
+ typedef TR value_type;
+ typedef TR result_type;
+ };
+
+ template<class T1, class T2, class TR>
+ struct matrix_vector_prod1:
+ public matrix_vector_binary_functor<T1, T2, TR> {
+ typedef typename matrix_vector_binary_functor<T1, T2, TR>::size_type size_type;
+ typedef typename matrix_vector_binary_functor<T1, T2, TR>::difference_type difference_type;
+ typedef typename matrix_vector_binary_functor<T1, T2, TR>::value_type value_type;
+ typedef typename matrix_vector_binary_functor<T1, T2, TR>::result_type result_type;
+
+ template<class C1, class C2>
+ static BOOST_UBLAS_INLINE
+ result_type apply (const matrix_container<C1> &c1,
+ const vector_container<C2> &c2,
+ size_type i) {
+#ifdef BOOST_UBLAS_USE_SIMD
+ using namespace raw;
+ size_type size = BOOST_UBLAS_SAME (c1 ().size2 (), c2 ().size ());
+ const T1 *data1 = data_const (c1 ()) + i * stride1 (c1 ());
+ const T2 *data2 = data_const (c2 ());
+ size_type s1 = stride2 (c1 ());
+ size_type s2 = stride (c2 ());
+ result_type t = result_type (0);
+ if (s1 == 1 && s2 == 1) {
+ for (size_type j = 0; j < size; ++ j)
+ t += data1 [j] * data2 [j];
+ } else if (s2 == 1) {
+ for (size_type j = 0, j1 = 0; j < size; ++ j, j1 += s1)
+ t += data1 [j1] * data2 [j];
+ } else if (s1 == 1) {
+ for (size_type j = 0, j2 = 0; j < size; ++ j, j2 += s2)
+ t += data1 [j] * data2 [j2];
+ } else {
+ for (size_type j = 0, j1 = 0, j2 = 0; j < size; ++ j, j1 += s1, j2 += s2)
+ t += data1 [j1] * data2 [j2];
+ }
+ return t;
+#elif defined(BOOST_UBLAS_HAVE_BINDINGS)
+ return boost::numeric::bindings::atlas::dot (c1 ().row (i), c2 ());
+#else
+ return apply (static_cast<const matrix_expression<C1> > (c1), static_cast<const vector_expression<C2> > (c2, i));
+#endif
+ }
+ template<class E1, class E2>
+ static BOOST_UBLAS_INLINE
+ result_type apply (const matrix_expression<E1> &e1,
+ const vector_expression<E2> &e2,
+ size_type i) {
+ size_type size = BOOST_UBLAS_SAME (e1 ().size2 (), e2 ().size ());
+ result_type t = result_type (0);
+#ifndef BOOST_UBLAS_USE_DUFF_DEVICE
+ for (size_type j = 0; j < size; ++ j)
+ t += e1 () (i, j) * e2 () (j);
+#else
+ size_type j (0);
+ DD (size, 4, r, (t += e1 () (i, j) * e2 () (j), ++ j));
+#endif
+ return t;
+ }
+ // Dense case
+ template<class I1, class I2>
+ static BOOST_UBLAS_INLINE
+ result_type apply (difference_type size, I1 it1, I2 it2) {
+ result_type t = result_type (0);
+#ifndef BOOST_UBLAS_USE_DUFF_DEVICE
+ while (-- size >= 0)
+ t += *it1 * *it2, ++ it1, ++ it2;
+#else
+ DD (size, 4, r, (t += *it1 * *it2, ++ it1, ++ it2));
+#endif
+ return t;
+ }
+ // Packed case
+ template<class I1, class I2>
+ static BOOST_UBLAS_INLINE
+ result_type apply (I1 it1, const I1 &it1_end, I2 it2, const I2 &it2_end) {
+ result_type t = result_type (0);
+ difference_type it1_size (it1_end - it1);
+ difference_type it2_size (it2_end - it2);
+ difference_type diff (0);
+ if (it1_size > 0 && it2_size > 0)
+ diff = it2.index () - it1.index2 ();
+ if (diff != 0) {
+ difference_type size = (std::min) (diff, it1_size);
+ if (size > 0) {
+ it1 += size;
+ it1_size -= size;
+ diff -= size;
+ }
+ size = (std::min) (- diff, it2_size);
+ if (size > 0) {
+ it2 += size;
+ it2_size -= size;
+ diff += size;
+ }
+ }
+ difference_type size ((std::min) (it1_size, it2_size));
+ while (-- size >= 0)
+ t += *it1 * *it2, ++ it1, ++ it2;
+ return t;
+ }
+ // Sparse case
+ template<class I1, class I2>
+ static BOOST_UBLAS_INLINE
+ result_type apply (I1 it1, const I1 &it1_end, I2 it2, const I2 &it2_end,
+ sparse_bidirectional_iterator_tag, sparse_bidirectional_iterator_tag) {
+ result_type t = result_type (0);
+ if (it1 != it1_end && it2 != it2_end) {
+ size_type it1_index = it1.index2 (), it2_index = it2.index ();
+ while (true) {
+ difference_type compare = it1_index - it2_index;
+ if (compare == 0) {
+ t += *it1 * *it2, ++ it1, ++ it2;
+ if (it1 != it1_end && it2 != it2_end) {
+ it1_index = it1.index2 ();
+ it2_index = it2.index ();
+ } else
+ break;
+ } else if (compare < 0) {
+ increment (it1, it1_end, - compare);
+ if (it1 != it1_end)
+ it1_index = it1.index2 ();
+ else
+ break;
+ } else if (compare > 0) {
+ increment (it2, it2_end, compare);
+ if (it2 != it2_end)
+ it2_index = it2.index ();
+ else
+ break;
+ }
+ }
+ }
+ return t;
+ }
+ // Sparse packed case
+ template<class I1, class I2>
+ static BOOST_UBLAS_INLINE
+ result_type apply (I1 it1, const I1 &it1_end, I2 it2, const I2 &/* it2_end */,
+ sparse_bidirectional_iterator_tag, packed_random_access_iterator_tag) {
+ result_type t = result_type (0);
+ while (it1 != it1_end) {
+ t += *it1 * it2 () (it1.index2 ());
+ ++ it1;
+ }
+ return t;
+ }
+ // Packed sparse case
+ template<class I1, class I2>
+ static BOOST_UBLAS_INLINE
+ result_type apply (I1 it1, const I1 &/* it1_end */, I2 it2, const I2 &it2_end,
+ packed_random_access_iterator_tag, sparse_bidirectional_iterator_tag) {
+ result_type t = result_type (0);
+ while (it2 != it2_end) {
+ t += it1 () (it1.index1 (), it2.index ()) * *it2;
+ ++ it2;
+ }
+ return t;
+ }
+ // Another dispatcher
+ template<class I1, class I2>
+ static BOOST_UBLAS_INLINE
+ result_type apply (I1 it1, const I1 &it1_end, I2 it2, const I2 &it2_end,
+ sparse_bidirectional_iterator_tag) {
+ typedef typename I1::iterator_category iterator1_category;
+ typedef typename I2::iterator_category iterator2_category;
+ return apply (it1, it1_end, it2, it2_end, iterator1_category (), iterator2_category ());
+ }
+ };
+
+ template<class T1, class T2, class TR>
+ struct matrix_vector_prod2:
+ public matrix_vector_binary_functor<T1, T2, TR> {
+ typedef typename matrix_vector_binary_functor<T1, T2, TR>::size_type size_type;
+ typedef typename matrix_vector_binary_functor<T1, T2, TR>::difference_type difference_type;
+ typedef typename matrix_vector_binary_functor<T1, T2, TR>::value_type value_type;
+ typedef typename matrix_vector_binary_functor<T1, T2, TR>::result_type result_type;
+
+ template<class C1, class C2>
+ static BOOST_UBLAS_INLINE
+ result_type apply (const vector_container<C1> &c1,
+ const matrix_container<C2> &c2,
+ size_type i) {
+#ifdef BOOST_UBLAS_USE_SIMD
+ using namespace raw;
+ size_type size = BOOST_UBLAS_SAME (c1 ().size (), c2 ().size1 ());
+ const T1 *data1 = data_const (c1 ());
+ const T2 *data2 = data_const (c2 ()) + i * stride2 (c2 ());
+ size_type s1 = stride (c1 ());
+ size_type s2 = stride1 (c2 ());
+ result_type t = result_type (0);
+ if (s1 == 1 && s2 == 1) {
+ for (size_type j = 0; j < size; ++ j)
+ t += data1 [j] * data2 [j];
+ } else if (s2 == 1) {
+ for (size_type j = 0, j1 = 0; j < size; ++ j, j1 += s1)
+ t += data1 [j1] * data2 [j];
+ } else if (s1 == 1) {
+ for (size_type j = 0, j2 = 0; j < size; ++ j, j2 += s2)
+ t += data1 [j] * data2 [j2];
+ } else {
+ for (size_type j = 0, j1 = 0, j2 = 0; j < size; ++ j, j1 += s1, j2 += s2)
+ t += data1 [j1] * data2 [j2];
+ }
+ return t;
+#elif defined(BOOST_UBLAS_HAVE_BINDINGS)
+ return boost::numeric::bindings::atlas::dot (c1 (), c2 ().column (i));
+#else
+ return apply (static_cast<const vector_expression<C1> > (c1), static_cast<const matrix_expression<C2> > (c2, i));
+#endif
+ }
+ template<class E1, class E2>
+ static BOOST_UBLAS_INLINE
+ result_type apply (const vector_expression<E1> &e1,
+ const matrix_expression<E2> &e2,
+ size_type i) {
+ size_type size = BOOST_UBLAS_SAME (e1 ().size (), e2 ().size1 ());
+ result_type t = result_type (0);
+#ifndef BOOST_UBLAS_USE_DUFF_DEVICE
+ for (size_type j = 0; j < size; ++ j)
+ t += e1 () (j) * e2 () (j, i);
+#else
+ size_type j (0);
+ DD (size, 4, r, (t += e1 () (j) * e2 () (j, i), ++ j));
+#endif
+ return t;
+ }
+ // Dense case
+ template<class I1, class I2>
+ static BOOST_UBLAS_INLINE
+ result_type apply (difference_type size, I1 it1, I2 it2) {
+ result_type t = result_type (0);
+#ifndef BOOST_UBLAS_USE_DUFF_DEVICE
+ while (-- size >= 0)
+ t += *it1 * *it2, ++ it1, ++ it2;
+#else
+ DD (size, 4, r, (t += *it1 * *it2, ++ it1, ++ it2));
+#endif
+ return t;
+ }
+ // Packed case
+ template<class I1, class I2>
+ static BOOST_UBLAS_INLINE
+ result_type apply (I1 it1, const I1 &it1_end, I2 it2, const I2 &it2_end) {
+ result_type t = result_type (0);
+ difference_type it1_size (it1_end - it1);
+ difference_type it2_size (it2_end - it2);
+ difference_type diff (0);
+ if (it1_size > 0 && it2_size > 0)
+ diff = it2.index1 () - it1.index ();
+ if (diff != 0) {
+ difference_type size = (std::min) (diff, it1_size);
+ if (size > 0) {
+ it1 += size;
+ it1_size -= size;
+ diff -= size;
+ }
+ size = (std::min) (- diff, it2_size);
+ if (size > 0) {
+ it2 += size;
+ it2_size -= size;
+ diff += size;
+ }
+ }
+ difference_type size ((std::min) (it1_size, it2_size));
+ while (-- size >= 0)
+ t += *it1 * *it2, ++ it1, ++ it2;
+ return t;
+ }
+ // Sparse case
+ template<class I1, class I2>
+ static BOOST_UBLAS_INLINE
+ result_type apply (I1 it1, const I1 &it1_end, I2 it2, const I2 &it2_end,
+ sparse_bidirectional_iterator_tag, sparse_bidirectional_iterator_tag) {
+ result_type t = result_type (0);
+ if (it1 != it1_end && it2 != it2_end) {
+ size_type it1_index = it1.index (), it2_index = it2.index1 ();
+ while (true) {
+ difference_type compare = it1_index - it2_index;
+ if (compare == 0) {
+ t += *it1 * *it2, ++ it1, ++ it2;
+ if (it1 != it1_end && it2 != it2_end) {
+ it1_index = it1.index ();
+ it2_index = it2.index1 ();
+ } else
+ break;
+ } else if (compare < 0) {
+ increment (it1, it1_end, - compare);
+ if (it1 != it1_end)
+ it1_index = it1.index ();
+ else
+ break;
+ } else if (compare > 0) {
+ increment (it2, it2_end, compare);
+ if (it2 != it2_end)
+ it2_index = it2.index1 ();
+ else
+ break;
+ }
+ }
+ }
+ return t;
+ }
+ // Packed sparse case
+ template<class I1, class I2>
+ static BOOST_UBLAS_INLINE
+ result_type apply (I1 it1, const I1 &/* it1_end */, I2 it2, const I2 &it2_end,
+ packed_random_access_iterator_tag, sparse_bidirectional_iterator_tag) {
+ result_type t = result_type (0);
+ while (it2 != it2_end) {
+ t += it1 () (it2.index1 ()) * *it2;
+ ++ it2;
+ }
+ return t;
+ }
+ // Sparse packed case
+ template<class I1, class I2>
+ static BOOST_UBLAS_INLINE
+ result_type apply (I1 it1, const I1 &it1_end, I2 it2, const I2 &/* it2_end */,
+ sparse_bidirectional_iterator_tag, packed_random_access_iterator_tag) {
+ result_type t = result_type (0);
+ while (it1 != it1_end) {
+ t += *it1 * it2 () (it1.index (), it2.index2 ());
+ ++ it1;
+ }
+ return t;
+ }
+ // Another dispatcher
+ template<class I1, class I2>
+ static BOOST_UBLAS_INLINE
+ result_type apply (I1 it1, const I1 &it1_end, I2 it2, const I2 &it2_end,
+ sparse_bidirectional_iterator_tag) {
+ typedef typename I1::iterator_category iterator1_category;
+ typedef typename I2::iterator_category iterator2_category;
+ return apply (it1, it1_end, it2, it2_end, iterator1_category (), iterator2_category ());
+ }
+ };
+
+ // Binary returning matrix
+ template<class T1, class T2, class TR>
+ struct matrix_matrix_binary_functor {
+ typedef std::size_t size_type;
+ typedef std::ptrdiff_t difference_type;
+ typedef TR value_type;
+ typedef TR result_type;
+ };
+
+ template<class T1, class T2, class TR>
+ struct matrix_matrix_prod:
+ public matrix_matrix_binary_functor<T1, T2, TR> {
+ typedef typename matrix_matrix_binary_functor<T1, T2, TR>::size_type size_type;
+ typedef typename matrix_matrix_binary_functor<T1, T2, TR>::difference_type difference_type;
+ typedef typename matrix_matrix_binary_functor<T1, T2, TR>::value_type value_type;
+ typedef typename matrix_matrix_binary_functor<T1, T2, TR>::result_type result_type;
+
+ template<class C1, class C2>
+ static BOOST_UBLAS_INLINE
+ result_type apply (const matrix_container<C1> &c1,
+ const matrix_container<C2> &c2,
+ size_type i, size_type j) {
+#ifdef BOOST_UBLAS_USE_SIMD
+ using namespace raw;
+ size_type size = BOOST_UBLAS_SAME (c1 ().size2 (), c2 ().sizc1 ());
+ const T1 *data1 = data_const (c1 ()) + i * stride1 (c1 ());
+ const T2 *data2 = data_const (c2 ()) + j * stride2 (c2 ());
+ size_type s1 = stride2 (c1 ());
+ size_type s2 = stride1 (c2 ());
+ result_type t = result_type (0);
+ if (s1 == 1 && s2 == 1) {
+ for (size_type k = 0; k < size; ++ k)
+ t += data1 [k] * data2 [k];
+ } else if (s2 == 1) {
+ for (size_type k = 0, k1 = 0; k < size; ++ k, k1 += s1)
+ t += data1 [k1] * data2 [k];
+ } else if (s1 == 1) {
+ for (size_type k = 0, k2 = 0; k < size; ++ k, k2 += s2)
+ t += data1 [k] * data2 [k2];
+ } else {
+ for (size_type k = 0, k1 = 0, k2 = 0; k < size; ++ k, k1 += s1, k2 += s2)
+ t += data1 [k1] * data2 [k2];
+ }
+ return t;
+#elif defined(BOOST_UBLAS_HAVE_BINDINGS)
+ return boost::numeric::bindings::atlas::dot (c1 ().row (i), c2 ().column (j));
+#else
+ return apply (static_cast<const matrix_expression<C1> > (c1), static_cast<const matrix_expression<C2> > (c2, i));
+#endif
+ }
+ template<class E1, class E2>
+ static BOOST_UBLAS_INLINE
+ result_type apply (const matrix_expression<E1> &e1,
+ const matrix_expression<E2> &e2,
+ size_type i, size_type j) {
+ size_type size = BOOST_UBLAS_SAME (e1 ().size2 (), e2 ().size1 ());
+ result_type t = result_type (0);
+#ifndef BOOST_UBLAS_USE_DUFF_DEVICE
+ for (size_type k = 0; k < size; ++ k)
+ t += e1 () (i, k) * e2 () (k, j);
+#else
+ size_type k (0);
+ DD (size, 4, r, (t += e1 () (i, k) * e2 () (k, j), ++ k));
+#endif
+ return t;
+ }
+ // Dense case
+ template<class I1, class I2>
+ static BOOST_UBLAS_INLINE
+ result_type apply (difference_type size, I1 it1, I2 it2) {
+ result_type t = result_type (0);
+#ifndef BOOST_UBLAS_USE_DUFF_DEVICE
+ while (-- size >= 0)
+ t += *it1 * *it2, ++ it1, ++ it2;
+#else
+ DD (size, 4, r, (t += *it1 * *it2, ++ it1, ++ it2));
+#endif
+ return t;
+ }
+ // Packed case
+ template<class I1, class I2>
+ static BOOST_UBLAS_INLINE
+ result_type apply (I1 it1, const I1 &it1_end, I2 it2, const I2 &it2_end, packed_random_access_iterator_tag) {
+ result_type t = result_type (0);
+ difference_type it1_size (it1_end - it1);
+ difference_type it2_size (it2_end - it2);
+ difference_type diff (0);
+ if (it1_size > 0 && it2_size > 0)
+ diff = it2.index1 () - it1.index2 ();
+ if (diff != 0) {
+ difference_type size = (std::min) (diff, it1_size);
+ if (size > 0) {
+ it1 += size;
+ it1_size -= size;
+ diff -= size;
+ }
+ size = (std::min) (- diff, it2_size);
+ if (size > 0) {
+ it2 += size;
+ it2_size -= size;
+ diff += size;
+ }
+ }
+ difference_type size ((std::min) (it1_size, it2_size));
+ while (-- size >= 0)
+ t += *it1 * *it2, ++ it1, ++ it2;
+ return t;
+ }
+ // Sparse case
+ template<class I1, class I2>
+ static BOOST_UBLAS_INLINE
+ result_type apply (I1 it1, const I1 &it1_end, I2 it2, const I2 &it2_end, sparse_bidirectional_iterator_tag) {
+ result_type t = result_type (0);
+ if (it1 != it1_end && it2 != it2_end) {
+ size_type it1_index = it1.index2 (), it2_index = it2.index1 ();
+ while (true) {
+ difference_type compare = it1_index - it2_index;
+ if (compare == 0) {
+ t += *it1 * *it2, ++ it1, ++ it2;
+ if (it1 != it1_end && it2 != it2_end) {
+ it1_index = it1.index2 ();
+ it2_index = it2.index1 ();
+ } else
+ break;
+ } else if (compare < 0) {
+ increment (it1, it1_end, - compare);
+ if (it1 != it1_end)
+ it1_index = it1.index2 ();
+ else
+ break;
+ } else if (compare > 0) {
+ increment (it2, it2_end, compare);
+ if (it2 != it2_end)
+ it2_index = it2.index1 ();
+ else
+ break;
+ }
+ }
+ }
+ return t;
+ }
+ };
+
+ // Unary returning scalar norm
+ template<class T>
+ struct matrix_scalar_real_unary_functor {
+ typedef std::size_t size_type;
+ typedef std::ptrdiff_t difference_type;
+ typedef T value_type;
+ typedef typename type_traits<T>::real_type real_type;
+ typedef real_type result_type;
+ };
+
+ template<class T>
+ struct matrix_norm_1:
+ public matrix_scalar_real_unary_functor<T> {
+ typedef typename matrix_scalar_real_unary_functor<T>::size_type size_type;
+ typedef typename matrix_scalar_real_unary_functor<T>::difference_type difference_type;
+ typedef typename matrix_scalar_real_unary_functor<T>::value_type value_type;
+ typedef typename matrix_scalar_real_unary_functor<T>::real_type real_type;
+ typedef typename matrix_scalar_real_unary_functor<T>::result_type result_type;
+
+ template<class E>
+ static BOOST_UBLAS_INLINE
+ result_type apply (const matrix_expression<E> &e) {
+ real_type t = real_type ();
+ size_type size2 (e ().size2 ());
+ for (size_type j = 0; j < size2; ++ j) {
+ real_type u = real_type ();
+ size_type size1 (e ().size1 ());
+ for (size_type i = 0; i < size1; ++ i) {
+ real_type v (type_traits<value_type>::norm_1 (e () (i, j)));
+ u += v;
+ }
+ if (u > t)
+ t = u;
+ }
+ return t;
+ }
+ };
+ template<class T>
+ struct matrix_norm_frobenius:
+ public matrix_scalar_real_unary_functor<T> {
+ typedef typename matrix_scalar_real_unary_functor<T>::size_type size_type;
+ typedef typename matrix_scalar_real_unary_functor<T>::difference_type difference_type;
+ typedef typename matrix_scalar_real_unary_functor<T>::value_type value_type;
+ typedef typename matrix_scalar_real_unary_functor<T>::real_type real_type;
+ typedef typename matrix_scalar_real_unary_functor<T>::result_type result_type;
+
+ template<class E>
+ static BOOST_UBLAS_INLINE
+ result_type apply (const matrix_expression<E> &e) {
+ real_type t = real_type ();
+ size_type size1 (e ().size1 ());
+ for (size_type i = 0; i < size1; ++ i) {
+ size_type size2 (e ().size2 ());
+ for (size_type j = 0; j < size2; ++ j) {
+ real_type u (type_traits<value_type>::norm_2 (e () (i, j)));
+ t += u * u;
+ }
+ }
+ return type_traits<real_type>::type_sqrt (t);
+ }
+ };
+ template<class T>
+ struct matrix_norm_inf:
+ public matrix_scalar_real_unary_functor<T> {
+ typedef typename matrix_scalar_real_unary_functor<T>::size_type size_type;
+ typedef typename matrix_scalar_real_unary_functor<T>::difference_type difference_type;
+ typedef typename matrix_scalar_real_unary_functor<T>::value_type value_type;
+ typedef typename matrix_scalar_real_unary_functor<T>::real_type real_type;
+ typedef typename matrix_scalar_real_unary_functor<T>::result_type result_type;
+
+ template<class E>
+ static BOOST_UBLAS_INLINE
+ result_type apply (const matrix_expression<E> &e) {
+ real_type t = real_type ();
+ size_type size1 (e ().size1 ());
+ for (size_type i = 0; i < size1; ++ i) {
+ real_type u = real_type ();
+ size_type size2 (e ().size2 ());
+ for (size_type j = 0; j < size2; ++ j) {
+ real_type v (type_traits<value_type>::norm_inf (e () (i, j)));
+ u += v;
+ }
+ if (u > t)
+ t = u;
+ }
+ return t;
+ }
+ };
+
+ // This functor computes the address translation
+ // matrix [i] [j] -> storage [i * size2 + j]
+ template <class Z, class D>
+ struct basic_row_major {
+ typedef Z size_type;
+ typedef D difference_type;
+ typedef row_major_tag orientation_category;
+
+ static
+ BOOST_UBLAS_INLINE
+ size_type storage_size (size_type size1, size_type size2) {
+ // Guard against size_type overflow
+ BOOST_UBLAS_CHECK (size2 == 0 || size1 <= (std::numeric_limits<size_type>::max) () / size2, bad_size ());
+ return size1 * size2;
+ }
+
+ // Indexing
+ static
+ BOOST_UBLAS_INLINE
+ size_type element (size_type i, size_type size1, size_type j, size_type size2) {
+ BOOST_UBLAS_CHECK (i < size1, bad_index ());
+ BOOST_UBLAS_CHECK (j < size2, bad_index ());
+ detail::ignore_unused_variable_warning(size1);
+ // Guard against size_type overflow
+ BOOST_UBLAS_CHECK (i <= ((std::numeric_limits<size_type>::max) () - j) / size2, bad_index ());
+ return i * size2 + j;
+ }
+ static
+ BOOST_UBLAS_INLINE
+ size_type address (size_type i, size_type size1, size_type j, size_type size2) {
+ BOOST_UBLAS_CHECK (i <= size1, bad_index ());
+ BOOST_UBLAS_CHECK (j <= size2, bad_index ());
+ // Guard against size_type overflow - address may be size2 past end of storage
+ BOOST_UBLAS_CHECK (size2 == 0 || i <= ((std::numeric_limits<size_type>::max) () - j) / size2, bad_index ());
+ detail::ignore_unused_variable_warning(size1);
+ return i * size2 + j;
+ }
+ static
+ BOOST_UBLAS_INLINE
+ difference_type distance1 (difference_type k, size_type /* size1 */, size_type size2) {
+ return size2 != 0 ? k / size2 : 0;
+ }
+ static
+ BOOST_UBLAS_INLINE
+ difference_type distance2 (difference_type k, size_type /* size1 */, size_type /* size2 */) {
+ return k;
+ }
+ static
+ BOOST_UBLAS_INLINE
+ size_type index1 (difference_type k, size_type /* size1 */, size_type size2) {
+ return size2 != 0 ? k / size2 : 0;
+ }
+ static
+ BOOST_UBLAS_INLINE
+ size_type index2 (difference_type k, size_type /* size1 */, size_type size2) {
+ return size2 != 0 ? k % size2 : 0;
+ }
+ static
+ BOOST_UBLAS_INLINE
+ bool fast1 () {
+ return false;
+ }
+ static
+ BOOST_UBLAS_INLINE
+ size_type one1 (size_type /* size1 */, size_type size2) {
+ return size2;
+ }
+ static
+ BOOST_UBLAS_INLINE
+ bool fast2 () {
+ return true;
+ }
+ static
+ BOOST_UBLAS_INLINE
+ size_type one2 (size_type /* size1 */, size_type /* size2 */) {
+ return 1;
+ }
+
+ static
+ BOOST_UBLAS_INLINE
+ size_type triangular_size (size_type size1, size_type size2) {
+ size_type size = (std::max) (size1, size2);
+ // Guard against size_type overflow - simplified
+ BOOST_UBLAS_CHECK (size == 0 || size / 2 < (std::numeric_limits<size_type>::max) () / size /* +1/2 */, bad_size ());
+ return ((size + 1) * size) / 2;
+ }
+ static
+ BOOST_UBLAS_INLINE
+ size_type lower_element (size_type i, size_type size1, size_type j, size_type size2) {
+ BOOST_UBLAS_CHECK (i < size1, bad_index ());
+ BOOST_UBLAS_CHECK (j < size2, bad_index ());
+ BOOST_UBLAS_CHECK (i >= j, bad_index ());
+ detail::ignore_unused_variable_warning(size1);
+ detail::ignore_unused_variable_warning(size2);
+ // FIXME size_type overflow
+ // sigma_i (i + 1) = (i + 1) * i / 2
+ // i = 0 1 2 3, sigma = 0 1 3 6
+ return ((i + 1) * i) / 2 + j;
+ }
+ static
+ BOOST_UBLAS_INLINE
+ size_type upper_element (size_type i, size_type size1, size_type j, size_type size2) {
+ BOOST_UBLAS_CHECK (i < size1, bad_index ());
+ BOOST_UBLAS_CHECK (j < size2, bad_index ());
+ BOOST_UBLAS_CHECK (i <= j, bad_index ());
+ // FIXME size_type overflow
+ // sigma_i (size - i) = size * i - i * (i - 1) / 2
+ // i = 0 1 2 3, sigma = 0 4 7 9
+ return (i * (2 * (std::max) (size1, size2) - i + 1)) / 2 + j - i;
+ }
+
+ static
+ BOOST_UBLAS_INLINE
+ size_type element1 (size_type i, size_type size1, size_type /* j */, size_type /* size2 */) {
+ BOOST_UBLAS_CHECK (i < size1, bad_index ());
+ detail::ignore_unused_variable_warning(size1);
+ return i;
+ }
+ static
+ BOOST_UBLAS_INLINE
+ size_type element2 (size_type /* i */, size_type /* size1 */, size_type j, size_type size2) {
+ BOOST_UBLAS_CHECK (j < size2, bad_index ());
+ detail::ignore_unused_variable_warning(size2);
+ return j;
+ }
+ static
+ BOOST_UBLAS_INLINE
+ size_type address1 (size_type i, size_type size1, size_type /* j */, size_type /* size2 */) {
+ BOOST_UBLAS_CHECK (i <= size1, bad_index ());
+ detail::ignore_unused_variable_warning(size1);
+ return i;
+ }
+ static
+ BOOST_UBLAS_INLINE
+ size_type address2 (size_type /* i */, size_type /* size1 */, size_type j, size_type size2) {
+ BOOST_UBLAS_CHECK (j <= size2, bad_index ());
+ detail::ignore_unused_variable_warning(size2);
+ return j;
+ }
+ static
+ BOOST_UBLAS_INLINE
+ size_type index1 (size_type index1, size_type /* index2 */) {
+ return index1;
+ }
+ static
+ BOOST_UBLAS_INLINE
+ size_type index2 (size_type /* index1 */, size_type index2) {
+ return index2;
+ }
+ static
+ BOOST_UBLAS_INLINE
+ size_type size1 (size_type size1, size_type /* size2 */) {
+ return size1;
+ }
+ static
+ BOOST_UBLAS_INLINE
+ size_type size2 (size_type /* size1 */, size_type size2) {
+ return size2;
+ }
+
+ // Iterating
+ template<class I>
+ static
+ BOOST_UBLAS_INLINE
+ void increment1 (I &it, size_type /* size1 */, size_type size2) {
+ it += size2;
+ }
+ template<class I>
+ static
+ BOOST_UBLAS_INLINE
+ void decrement1 (I &it, size_type /* size1 */, size_type size2) {
+ it -= size2;
+ }
+ template<class I>
+ static
+ BOOST_UBLAS_INLINE
+ void increment2 (I &it, size_type /* size1 */, size_type /* size2 */) {
+ ++ it;
+ }
+ template<class I>
+ static
+ BOOST_UBLAS_INLINE
+ void decrement2 (I &it, size_type /* size1 */, size_type /* size2 */) {
+ -- it;
+ }
+ };
+
+ // This functor computes the address translation
+ // matrix [i] [j] -> storage [i + j * size1]
+ template <class Z, class D>
+ struct basic_column_major {
+ typedef Z size_type;
+ typedef D difference_type;
+ typedef column_major_tag orientation_category;
+
+ static
+ BOOST_UBLAS_INLINE
+ size_type storage_size (size_type size1, size_type size2) {
+ // Guard against size_type overflow
+ BOOST_UBLAS_CHECK (size1 == 0 || size2 <= (std::numeric_limits<size_type>::max) () / size1, bad_size ());
+ return size1 * size2;
+ }
+
+ // Indexing
+ static
+ BOOST_UBLAS_INLINE
+ size_type element (size_type i, size_type size1, size_type j, size_type size2) {
+ BOOST_UBLAS_CHECK (i < size1, bad_index ());
+ BOOST_UBLAS_CHECK (j < size2, bad_index ());
+ detail::ignore_unused_variable_warning(size2);
+ // Guard against size_type overflow
+ BOOST_UBLAS_CHECK (j <= ((std::numeric_limits<size_type>::max) () - i) / size1, bad_index ());
+ return i + j * size1;
+ }
+ static
+ BOOST_UBLAS_INLINE
+ size_type address (size_type i, size_type size1, size_type j, size_type size2) {
+ BOOST_UBLAS_CHECK (i <= size1, bad_index ());
+ BOOST_UBLAS_CHECK (j <= size2, bad_index ());
+ detail::ignore_unused_variable_warning(size2);
+ // Guard against size_type overflow - address may be size1 past end of storage
+ BOOST_UBLAS_CHECK (size1 == 0 || j <= ((std::numeric_limits<size_type>::max) () - i) / size1, bad_index ());
+ return i + j * size1;
+ }
+ static
+ BOOST_UBLAS_INLINE
+ difference_type distance1 (difference_type k, size_type /* size1 */, size_type /* size2 */) {
+ return k;
+ }
+ static
+ BOOST_UBLAS_INLINE
+ difference_type distance2 (difference_type k, size_type size1, size_type /* size2 */) {
+ return size1 != 0 ? k / size1 : 0;
+ }
+ static
+ BOOST_UBLAS_INLINE
+ size_type index1 (difference_type k, size_type size1, size_type /* size2 */) {
+ return size1 != 0 ? k % size1 : 0;
+ }
+ static
+ BOOST_UBLAS_INLINE
+ size_type index2 (difference_type k, size_type size1, size_type /* size2 */) {
+ return size1 != 0 ? k / size1 : 0;
+ }
+ static
+ BOOST_UBLAS_INLINE
+ bool fast1 () {
+ return true;
+ }
+ static
+ BOOST_UBLAS_INLINE
+ size_type one1 (size_type /* size1 */, size_type /* size2 */) {
+ return 1;
+ }
+ static
+ BOOST_UBLAS_INLINE
+ bool fast2 () {
+ return false;
+ }
+ static
+ BOOST_UBLAS_INLINE
+ size_type one2 (size_type size1, size_type /* size2 */) {
+ return size1;
+ }
+
+ static
+ BOOST_UBLAS_INLINE
+ size_type triangular_size (size_type size1, size_type size2) {
+ size_type size = (std::max) (size1, size2);
+ // Guard against size_type overflow - simplified
+ BOOST_UBLAS_CHECK (size == 0 || size / 2 < (std::numeric_limits<size_type>::max) () / size /* +1/2 */, bad_size ());
+ return ((size + 1) * size) / 2;
+ }
+ static
+ BOOST_UBLAS_INLINE
+ size_type lower_element (size_type i, size_type size1, size_type j, size_type size2) {
+ BOOST_UBLAS_CHECK (i < size1, bad_index ());
+ BOOST_UBLAS_CHECK (j < size2, bad_index ());
+ BOOST_UBLAS_CHECK (i >= j, bad_index ());
+ // FIXME size_type overflow
+ // sigma_j (size - j) = size * j - j * (j - 1) / 2
+ // j = 0 1 2 3, sigma = 0 4 7 9
+ return i - j + (j * (2 * (std::max) (size1, size2) - j + 1)) / 2;
+ }
+ static
+ BOOST_UBLAS_INLINE
+ size_type upper_element (size_type i, size_type size1, size_type j, size_type size2) {
+ BOOST_UBLAS_CHECK (i < size1, bad_index ());
+ BOOST_UBLAS_CHECK (j < size2, bad_index ());
+ BOOST_UBLAS_CHECK (i <= j, bad_index ());
+ // FIXME size_type overflow
+ // sigma_j (j + 1) = (j + 1) * j / 2
+ // j = 0 1 2 3, sigma = 0 1 3 6
+ return i + ((j + 1) * j) / 2;
+ }
+
+ static
+ BOOST_UBLAS_INLINE
+ size_type element1 (size_type /* i */, size_type /* size1 */, size_type j, size_type size2) {
+ BOOST_UBLAS_CHECK (j < size2, bad_index ());
+ detail::ignore_unused_variable_warning(size2);
+ return j;
+ }
+ static
+ BOOST_UBLAS_INLINE
+ size_type element2 (size_type i, size_type size1, size_type /* j */, size_type /* size2 */) {
+ BOOST_UBLAS_CHECK (i < size1, bad_index ());
+ detail::ignore_unused_variable_warning(size1);
+ return i;
+ }
+ static
+ BOOST_UBLAS_INLINE
+ size_type address1 (size_type /* i */, size_type /* size1 */, size_type j, size_type size2) {
+ BOOST_UBLAS_CHECK (j <= size2, bad_index ());
+ detail::ignore_unused_variable_warning(size2);
+ return j;
+ }
+ static
+ BOOST_UBLAS_INLINE
+ size_type address2 (size_type i, size_type size1, size_type /* j */, size_type /* size2 */) {
+ BOOST_UBLAS_CHECK (i <= size1, bad_index ());
+ detail::ignore_unused_variable_warning(size1);
+ return i;
+ }
+ static
+ BOOST_UBLAS_INLINE
+ size_type index1 (size_type /* index1 */, size_type index2) {
+ return index2;
+ }
+ static
+ BOOST_UBLAS_INLINE
+ size_type index2 (size_type index1, size_type /* index2 */) {
+ return index1;
+ }
+ static
+ BOOST_UBLAS_INLINE
+ size_type size1 (size_type /* size1 */, size_type size2) {
+ return size2;
+ }
+ static
+ BOOST_UBLAS_INLINE
+ size_type size2 (size_type size1, size_type /* size2 */) {
+ return size1;
+ }
+
+ // Iterating
+ template<class I>
+ static
+ BOOST_UBLAS_INLINE
+ void increment1 (I &it, size_type /* size1 */, size_type /* size2 */) {
+ ++ it;
+ }
+ template<class I>
+ static
+ BOOST_UBLAS_INLINE
+ void decrement1 (I &it, size_type /* size1 */, size_type /* size2 */) {
+ -- it;
+ }
+ template<class I>
+ static
+ BOOST_UBLAS_INLINE
+ void increment2 (I &it, size_type size1, size_type /* size2 */) {
+ it += size1;
+ }
+ template<class I>
+ static
+ BOOST_UBLAS_INLINE
+ void decrement2 (I &it, size_type size1, size_type /* size2 */) {
+ it -= size1;
+ }
+ };
+
+
+ template <class Z>
+ struct basic_full {
+ typedef Z size_type;
+
+ template<class L>
+ static
+ BOOST_UBLAS_INLINE
+ size_type packed_size (size_type size1, size_type size2) {
+ return L::storage_size (size1, size2);
+ }
+
+ static
+ BOOST_UBLAS_INLINE
+ bool zero (size_type /* i */, size_type /* j */) {
+ return false;
+ }
+ static
+ BOOST_UBLAS_INLINE
+ bool one (size_type /* i */, size_type /* j */) {
+ return false;
+ }
+ static
+ BOOST_UBLAS_INLINE
+ bool other (size_type /* i */, size_type /* j */) {
+ return true;
+ }
+ };
+
+ template <class Z>
+ struct basic_lower {
+ typedef Z size_type;
+
+ template<class L>
+ static
+ BOOST_UBLAS_INLINE
+ size_type packed_size (L, size_type size1, size_type size2) {
+ return L::triangular_size (size1, size2);
+ }
+
+ static
+ BOOST_UBLAS_INLINE
+ bool zero (size_type i, size_type j) {
+ return j > i;
+ }
+ static
+ BOOST_UBLAS_INLINE
+ bool one (size_type /* i */, size_type /* j */) {
+ return false;
+ }
+ static
+ BOOST_UBLAS_INLINE
+ bool other (size_type i, size_type j) {
+ return j <= i;
+ }
+ template<class L>
+ static
+ BOOST_UBLAS_INLINE
+ size_type element (L, size_type i, size_type size1, size_type j, size_type size2) {
+ return L::lower_element (i, size1, j, size2);
+ }
+
+ static
+ BOOST_UBLAS_INLINE
+ size_type restrict1 (size_type i, size_type j) {
+ return (std::max) (i, j);
+ }
+ static
+ BOOST_UBLAS_INLINE
+ size_type restrict2 (size_type i, size_type j) {
+ return (std::min) (i + 1, j);
+ }
+ static
+ BOOST_UBLAS_INLINE
+ size_type mutable_restrict1 (size_type i, size_type j) {
+ return (std::max) (i, j);
+ }
+ static
+ BOOST_UBLAS_INLINE
+ size_type mutable_restrict2 (size_type i, size_type j) {
+ return (std::min) (i + 1, j);
+ }
+ };
+ template <class Z>
+ struct basic_upper {
+ typedef Z size_type;
+
+ template<class L>
+ static
+ BOOST_UBLAS_INLINE
+ size_type packed_size (L, size_type size1, size_type size2) {
+ return L::triangular_size (size1, size2);
+ }
+
+ static
+ BOOST_UBLAS_INLINE
+ bool zero (size_type i, size_type j) {
+ return j < i;
+ }
+ static
+ BOOST_UBLAS_INLINE
+ bool one (size_type /* i */, size_type /* j */) {
+ return false;
+ }
+ static
+ BOOST_UBLAS_INLINE
+ bool other (size_type i, size_type j) {
+ return j >= i;
+ }
+ template<class L>
+ static
+ BOOST_UBLAS_INLINE
+ size_type element (L, size_type i, size_type size1, size_type j, size_type size2) {
+ return L::upper_element (i, size1, j, size2);
+ }
+
+ static
+ BOOST_UBLAS_INLINE
+ size_type restrict1 (size_type i, size_type j) {
+ return (std::min) (i, j + 1);
+ }
+ static
+ BOOST_UBLAS_INLINE
+ size_type restrict2 (size_type i, size_type j) {
+ return (std::max) (i, j);
+ }
+ static
+ BOOST_UBLAS_INLINE
+ size_type mutable_restrict1 (size_type i, size_type j) {
+ return (std::min) (i, j + 1);
+ }
+ static
+ BOOST_UBLAS_INLINE
+ size_type mutable_restrict2 (size_type i, size_type j) {
+ return (std::max) (i, j);
+ }
+ };
+ template <class Z>
+ struct basic_unit_lower : public basic_lower<Z> {
+ typedef Z size_type;
+
+ template<class L>
+ static
+ BOOST_UBLAS_INLINE
+ size_type packed_size (L, size_type size1, size_type size2) {
+ // Zero size strict triangles are bad at this point
+ BOOST_UBLAS_CHECK (size1 != 0 && size2 != 0, bad_index ());
+ return L::triangular_size (size1 - 1, size2 - 1);
+ }
+
+ static
+ BOOST_UBLAS_INLINE
+ bool one (size_type i, size_type j) {
+ return j == i;
+ }
+ static
+ BOOST_UBLAS_INLINE
+ bool other (size_type i, size_type j) {
+ return j < i;
+ }
+ template<class L>
+ static
+ BOOST_UBLAS_INLINE
+ size_type element (L, size_type i, size_type size1, size_type j, size_type size2) {
+ // Zero size strict triangles are bad at this point
+ BOOST_UBLAS_CHECK (size1 != 0 && size2 != 0, bad_index ());
+ return L::lower_element (i, size1 - 1, j, size2 - 1);
+ }
+
+ static
+ BOOST_UBLAS_INLINE
+ size_type mutable_restrict1 (size_type i, size_type j) {
+ return (std::max) (i, j);
+ }
+ static
+ BOOST_UBLAS_INLINE
+ size_type mutable_restrict2 (size_type i, size_type j) {
+ return (std::min) (i, j);
+ }
+ };
+ template <class Z>
+ struct basic_unit_upper : public basic_upper<Z> {
+ typedef Z size_type;
+
+ template<class L>
+ static
+ BOOST_UBLAS_INLINE
+ size_type packed_size (L, size_type size1, size_type size2) {
+ // Zero size strict triangles are bad at this point
+ BOOST_UBLAS_CHECK (size1 != 0 && size2 != 0, bad_index ());
+ return L::triangular_size (size1 - 1, size2 - 1);
+ }
+
+ static
+ BOOST_UBLAS_INLINE
+ bool one (size_type i, size_type j) {
+ return j == i;
+ }
+ static
+ BOOST_UBLAS_INLINE
+ bool other (size_type i, size_type j) {
+ return j > i;
+ }
+ template<class L>
+ static
+ BOOST_UBLAS_INLINE
+ size_type element (L, size_type i, size_type size1, size_type j, size_type size2) {
+ // Zero size strict triangles are bad at this point
+ BOOST_UBLAS_CHECK (size1 != 0 && size2 != 0, bad_index ());
+ return L::upper_element (i, size1 - 1, j, size2 - 1);
+ }
+
+ static
+ BOOST_UBLAS_INLINE
+ size_type mutable_restrict1 (size_type i, size_type j) {
+ return (std::min) (i, j);
+ }
+ static
+ BOOST_UBLAS_INLINE
+ size_type mutable_restrict2 (size_type i, size_type j) {
+ return (std::max) (i, j);
+ }
+ };
+ template <class Z>
+ struct basic_strict_lower : public basic_lower<Z> {
+ typedef Z size_type;
+
+ template<class L>
+ static
+ BOOST_UBLAS_INLINE
+ size_type packed_size (L, size_type size1, size_type size2) {
+ // Zero size strict triangles are bad at this point
+ BOOST_UBLAS_CHECK (size1 != 0 && size2 != 0, bad_index ());
+ return L::triangular_size (size1 - 1, size2 - 1);
+ }
+
+ static
+ BOOST_UBLAS_INLINE
+ bool zero (size_type i, size_type j) {
+ return j >= i;
+ }
+ static
+ BOOST_UBLAS_INLINE
+ bool one (size_type /*i*/, size_type /*j*/) {
+ return false;
+ }
+ static
+ BOOST_UBLAS_INLINE
+ bool other (size_type i, size_type j) {
+ return j < i;
+ }
+ template<class L>
+ static
+ BOOST_UBLAS_INLINE
+ size_type element (L, size_type i, size_type size1, size_type j, size_type size2) {
+ // Zero size strict triangles are bad at this point
+ BOOST_UBLAS_CHECK (size1 != 0 && size2 != 0, bad_index ());
+ return L::lower_element (i, size1 - 1, j, size2 - 1);
+ }
+
+ static
+ BOOST_UBLAS_INLINE
+ size_type restrict1 (size_type i, size_type j) {
+ return (std::max) (i, j);
+ }
+ static
+ BOOST_UBLAS_INLINE
+ size_type restrict2 (size_type i, size_type j) {
+ return (std::min) (i, j);
+ }
+ static
+ BOOST_UBLAS_INLINE
+ size_type mutable_restrict1 (size_type i, size_type j) {
+ return (std::max) (i, j);
+ }
+ static
+ BOOST_UBLAS_INLINE
+ size_type mutable_restrict2 (size_type i, size_type j) {
+ return (std::min) (i, j);
+ }
+ };
+ template <class Z>
+ struct basic_strict_upper : public basic_upper<Z> {
+ typedef Z size_type;
+
+ template<class L>
+ static
+ BOOST_UBLAS_INLINE
+ size_type packed_size (L, size_type size1, size_type size2) {
+ // Zero size strict triangles are bad at this point
+ BOOST_UBLAS_CHECK (size1 != 0 && size2 != 0, bad_index ());
+ return L::triangular_size (size1 - 1, size2 - 1);
+ }
+
+ static
+ BOOST_UBLAS_INLINE
+ bool zero (size_type i, size_type j) {
+ return j <= i;
+ }
+ static
+ BOOST_UBLAS_INLINE
+ bool one (size_type /*i*/, size_type /*j*/) {
+ return false;
+ }
+ static
+ BOOST_UBLAS_INLINE
+ bool other (size_type i, size_type j) {
+ return j > i;
+ }
+ template<class L>
+ static
+ BOOST_UBLAS_INLINE
+ size_type element (L, size_type i, size_type size1, size_type j, size_type size2) {
+ // Zero size strict triangles are bad at this point
+ BOOST_UBLAS_CHECK (size1 != 0 && size2 != 0, bad_index ());
+ return L::upper_element (i, size1 - 1, j, size2 - 1);
+ }
+
+ static
+ BOOST_UBLAS_INLINE
+ size_type restrict1 (size_type i, size_type j) {
+ return (std::min) (i, j);
+ }
+ static
+ BOOST_UBLAS_INLINE
+ size_type restrict2 (size_type i, size_type j) {
+ return (std::max) (i, j);
+ }
+ static
+ BOOST_UBLAS_INLINE
+ size_type mutable_restrict1 (size_type i, size_type j) {
+ return (std::min) (i, j);
+ }
+ static
+ BOOST_UBLAS_INLINE
+ size_type mutable_restrict2 (size_type i, size_type j) {
+ return (std::max) (i, j);
+ }
+ };
+
+}}}
+
+#endif
diff --git a/boost/boost/numeric/ublas/fwd.hpp b/boost/boost/numeric/ublas/fwd.hpp
new file mode 100644
index 00000000000..57f912c69bf
--- /dev/null
+++ b/boost/boost/numeric/ublas/fwd.hpp
@@ -0,0 +1,216 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without fee,
+// provided that the above copyright notice appear in all copies and
+// that both that copyright notice and this permission notice appear
+// in supporting documentation. The authors make no representations
+// about the suitability of this software for any purpose.
+// It is provided "as is" without express or implied warranty.
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#ifndef BOOST_UBLAS_FWD_H
+#define BOOST_UBLAS_FWD_H
+
+#include <memory>
+
+namespace boost { namespace numeric { namespace ublas {
+
+ // Storage types
+ template<class T, class ALLOC = std::allocator<T> >
+ class unbounded_array;
+
+ template<class T, std::size_t N, class ALLOC = std::allocator<T> >
+ class bounded_array;
+
+ template <class Z = std::size_t, class D = std::ptrdiff_t>
+ class basic_range;
+ template <class Z = std::size_t, class D = std::ptrdiff_t>
+ class basic_slice;
+ typedef basic_range<> range;
+ typedef basic_slice<> slice;
+ template<class A = unbounded_array<std::size_t> >
+ class indirect_array;
+
+ template<class I, class T, class ALLOC = std::allocator<std::pair<const I, T> > >
+ class map_std;
+ template<class I, class T, class ALLOC = std::allocator<std::pair<I, T> > >
+ class map_array;
+
+ // Expression types
+ struct scalar_tag {};
+
+ struct vector_tag {};
+ template<class E>
+ class vector_expression;
+ template<class C>
+ class vector_container;
+
+ template<class E>
+ class vector_reference;
+
+ struct matrix_tag {};
+
+ template<class E>
+ class matrix_expression;
+ template<class C>
+ class matrix_container;
+
+ template<class E>
+ class matrix_reference;
+
+ template<class V>
+ class vector_range;
+ template<class V>
+ class vector_slice;
+ template<class V, class IA = indirect_array<> >
+ class vector_indirect;
+
+ template<class M>
+ class matrix_row;
+ template<class M>
+ class matrix_column;
+ template<class M>
+ class matrix_vector_range;
+ template<class M>
+ class matrix_vector_slice;
+ template<class M, class IA = indirect_array<> >
+ class matrix_vector_indirect;
+ template<class M>
+ class matrix_range;
+ template<class M>
+ class matrix_slice;
+ template<class M, class IA = indirect_array<> >
+ class matrix_indirect;
+
+ template<class T, class A = unbounded_array<T> >
+ class vector;
+ template<class T, std::size_t N>
+ class bounded_vector;
+
+ template<class T = int>
+ class unit_vector;
+ template<class T = int>
+ class zero_vector;
+ template<class T = int>
+ class scalar_vector;
+
+ template<class T, std::size_t N>
+ class c_vector;
+
+ // Sparse vectors
+ template<class T, class A = map_std<std::size_t, T> >
+ class mapped_vector;
+ template<class T, std::size_t IB = 0, class IA = unbounded_array<std::size_t>, class TA = unbounded_array<T> >
+ class compressed_vector;
+ template<class T, std::size_t IB = 0, class IA = unbounded_array<std::size_t>, class TA = unbounded_array<T> >
+ class coordinate_vector;
+
+ // Matrix orientation type
+ struct unknown_orientation_tag {};
+ struct row_major_tag {};
+ struct column_major_tag {};
+
+ // Matrix storage layout parameterisation
+ template <class Z = std::size_t, class D = std::ptrdiff_t>
+ struct basic_row_major;
+ typedef basic_row_major<> row_major;
+
+ template <class Z = std::size_t, class D = std::ptrdiff_t>
+ struct basic_column_major;
+ typedef basic_column_major<> column_major;
+
+ template<class T, class L = row_major, class A = unbounded_array<T> >
+ class matrix;
+ template<class T, std::size_t M, std::size_t N, class L = row_major>
+ class bounded_matrix;
+
+ template<class T = int>
+ class identity_matrix;
+ template<class T = int>
+ class zero_matrix;
+ template<class T = int>
+ class scalar_matrix;
+
+ template<class T, std::size_t M, std::size_t N>
+ class c_matrix;
+
+ template<class T, class L = row_major, class A = unbounded_array<unbounded_array<T> > >
+ class vector_of_vector;
+
+ // Triangular matrix type
+ struct lower_tag {};
+ struct upper_tag {};
+ struct unit_lower_tag : public lower_tag {};
+ struct unit_upper_tag : public upper_tag {};
+ struct strict_lower_tag : public lower_tag {};
+ struct strict_upper_tag : public upper_tag {};
+
+ // Triangular matrix parameterisation
+ template <class Z = std::size_t>
+ struct basic_full;
+ typedef basic_full<> full;
+
+ template <class Z = std::size_t>
+ struct basic_lower;
+ typedef basic_lower<> lower;
+
+ template <class Z = std::size_t>
+ struct basic_upper;
+ typedef basic_upper<> upper;
+
+ template <class Z = std::size_t>
+ struct basic_unit_lower;
+ typedef basic_unit_lower<> unit_lower;
+
+ template <class Z = std::size_t>
+ struct basic_unit_upper;
+ typedef basic_unit_upper<> unit_upper;
+
+ template <class Z = std::size_t>
+ struct basic_strict_lower;
+ typedef basic_strict_lower<> strict_lower;
+
+ template <class Z = std::size_t>
+ struct basic_strict_upper;
+ typedef basic_strict_upper<> strict_upper;
+
+ // Special matrices
+ template<class T, class L = row_major, class A = unbounded_array<T> >
+ class banded_matrix;
+ template<class T, class L = row_major, class A = unbounded_array<T> >
+ class diagonal_matrix;
+
+ template<class T, class TRI = lower, class L = row_major, class A = unbounded_array<T> >
+ class triangular_matrix;
+ template<class M, class TRI = lower>
+ class triangular_adaptor;
+
+ template<class T, class TRI = lower, class L = row_major, class A = unbounded_array<T> >
+ class symmetric_matrix;
+ template<class M, class TRI = lower>
+ class symmetric_adaptor;
+
+ template<class T, class TRI = lower, class L = row_major, class A = unbounded_array<T> >
+ class hermitian_matrix;
+ template<class M, class TRI = lower>
+ class hermitian_adaptor;
+
+ // Sparse matrices
+ template<class T, class L = row_major, class A = map_std<std::size_t, T> >
+ class mapped_matrix;
+ template<class T, class L = row_major, class A = map_std<std::size_t, map_std<std::size_t, T> > >
+ class mapped_vector_of_mapped_vector;
+ template<class T, class L = row_major, std::size_t IB = 0, class IA = unbounded_array<std::size_t>, class TA = unbounded_array<T> >
+ class compressed_matrix;
+ template<class T, class L = row_major, std::size_t IB = 0, class IA = unbounded_array<std::size_t>, class TA = unbounded_array<T> >
+ class coordinate_matrix;
+
+}}}
+
+#endif
diff --git a/boost/boost/numeric/ublas/hermitian.hpp b/boost/boost/numeric/ublas/hermitian.hpp
new file mode 100644
index 00000000000..de88a76960d
--- /dev/null
+++ b/boost/boost/numeric/ublas/hermitian.hpp
@@ -0,0 +1,2434 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without fee,
+// provided that the above copyright notice appear in all copies and
+// that both that copyright notice and this permission notice appear
+// in supporting documentation. The authors make no representations
+// about the suitability of this software for any purpose.
+// It is provided "as is" without express or implied warranty.
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#ifndef BOOST_UBLAS_HERMITIAN_H
+#define BOOST_UBLAS_HERMITIAN_H
+
+#include <boost/numeric/ublas/matrix.hpp>
+#include <boost/numeric/ublas/detail/temporary.hpp>
+
+// Iterators based on ideas of Jeremy Siek
+// Hermitian matrices are square. Thanks to Peter Schmitteckert for spotting this.
+
+namespace boost { namespace numeric { namespace ublas {
+
+ template<class M>
+ bool is_hermitian (const M &m) {
+ typedef typename M::size_type size_type;
+
+ if (m.size1 () != m.size2 ())
+ return false;
+ size_type size = BOOST_UBLAS_SAME (m.size1 (), m.size2 ());
+ for (size_type i = 0; i < size; ++ i) {
+ for (size_type j = i; j < size; ++ j) {
+ if (m (i, j) != conj (m (j, i)))
+ return false;
+ }
+ }
+ return true;
+ }
+
+#ifdef BOOST_UBLAS_STRICT_HERMITIAN
+
+ template<class M>
+ class hermitian_matrix_element:
+ public container_reference<M> {
+ public:
+ typedef M matrix_type;
+ typedef typename M::size_type size_type;
+ typedef typename M::value_type value_type;
+ typedef const value_type &const_reference;
+ typedef value_type &reference;
+ typedef value_type *pointer;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ hermitian_matrix_element (matrix_type &m, size_type i, size_type j, value_type d):
+ container_reference<matrix_type> (m), i_ (i), j_ (j), d_ (d), dirty_ (false) {}
+ BOOST_UBLAS_INLINE
+ hermitian_matrix_element (const hermitian_matrix_element &p):
+ container_reference<matrix_type> (p), i_ (p.i_), d_ (p.d_), dirty_ (p.dirty_) {}
+ BOOST_UBLAS_INLINE
+ ~hermitian_matrix_element () {
+ if (dirty_)
+ (*this) ().insert_element (i_, j_, d_);
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ hermitian_matrix_element &operator = (const hermitian_matrix_element &p) {
+ // Overide the implict copy assignment
+ d_ = p.d_;
+ dirty_ = true;
+ return *this;
+ }
+ template<class D>
+ BOOST_UBLAS_INLINE
+ hermitian_matrix_element &operator = (const D &d) {
+ d_ = d;
+ dirty_ = true;
+ return *this;
+ }
+ template<class D>
+ BOOST_UBLAS_INLINE
+ hermitian_matrix_element &operator += (const D &d) {
+ d_ += d;
+ dirty_ = true;
+ return *this;
+ }
+ template<class D>
+ BOOST_UBLAS_INLINE
+ hermitian_matrix_element &operator -= (const D &d) {
+ d_ -= d;
+ dirty_ = true;
+ return *this;
+ }
+ template<class D>
+ BOOST_UBLAS_INLINE
+ hermitian_matrix_element &operator *= (const D &d) {
+ d_ *= d;
+ dirty_ = true;
+ return *this;
+ }
+ template<class D>
+ BOOST_UBLAS_INLINE
+ hermitian_matrix_element &operator /= (const D &d) {
+ d_ /= d;
+ dirty_ = true;
+ return *this;
+ }
+
+ // Comparison
+ template<class D>
+ BOOST_UBLAS_INLINE
+ bool operator == (const D &d) const {
+ return d_ == d;
+ }
+ template<class D>
+ BOOST_UBLAS_INLINE
+ bool operator != (const D &d) const {
+ return d_ != d;
+ }
+
+ // Conversion
+ BOOST_UBLAS_INLINE
+ operator const_reference () const {
+ return d_;
+ }
+
+ // Swapping
+ BOOST_UBLAS_INLINE
+ void swap (hermitian_matrix_element p) {
+ if (this != &p) {
+ dirty_ = true;
+ p.dirty_ = true;
+ std::swap (d_, p.d_);
+ }
+ }
+ BOOST_UBLAS_INLINE
+ friend void swap (hermitian_matrix_element p1, hermitian_matrix_element p2) {
+ p1.swap (p2);
+ }
+
+ private:
+ size_type i_;
+ size_type j_;
+ value_type d_;
+ bool dirty_;
+ };
+
+ template<class M>
+ struct type_traits<hermitian_matrix_element<M> > {
+ typedef typename M::value_type element_type;
+ typedef type_traits<hermitian_matrix_element<M> > self_type;
+ typedef typename type_traits<element_type>::value_type value_type;
+ typedef typename type_traits<element_type>::const_reference const_reference;
+ typedef hermitian_matrix_element<M> reference;
+ typedef typename type_traits<element_type>::real_type real_type;
+ typedef typename type_traits<element_type>::precision_type precision_type;
+
+ static const unsigned plus_complexity = type_traits<element_type>::plus_complexity;
+ static const unsigned multiplies_complexity = type_traits<element_type>::multiplies_complexity;
+
+ static
+ BOOST_UBLAS_INLINE
+ real_type real (const_reference t) {
+ return type_traits<element_type>::real (t);
+ }
+ static
+ BOOST_UBLAS_INLINE
+ real_type imag (const_reference t) {
+ return type_traits<element_type>::imag (t);
+ }
+ static
+ BOOST_UBLAS_INLINE
+ value_type conj (const_reference t) {
+ return type_traits<element_type>::conj (t);
+ }
+
+ static
+ BOOST_UBLAS_INLINE
+ real_type type_abs (const_reference t) {
+ return type_traits<element_type>::type_abs (t);
+ }
+ static
+ BOOST_UBLAS_INLINE
+ value_type type_sqrt (const_reference t) {
+ return type_traits<element_type>::type_sqrt (t);
+ }
+
+ static
+ BOOST_UBLAS_INLINE
+ real_type norm_1 (const_reference t) {
+ return type_traits<element_type>::norm_1 (t);
+ }
+ static
+ BOOST_UBLAS_INLINE
+ real_type norm_2 (const_reference t) {
+ return type_traits<element_type>::norm_2 (t);
+ }
+ static
+ BOOST_UBLAS_INLINE
+ real_type norm_inf (const_reference t) {
+ return type_traits<element_type>::norm_inf (t);
+ }
+
+ static
+ BOOST_UBLAS_INLINE
+ bool equals (const_reference t1, const_reference t2) {
+ return type_traits<element_type>::equals (t1, t2);
+ }
+ };
+
+ template<class M1, class T2>
+ struct promote_traits<hermitian_matrix_element<M1>, T2> {
+ typedef typename promote_traits<typename hermitian_matrix_element<M1>::value_type, T2>::promote_type promote_type;
+ };
+ template<class T1, class M2>
+ struct promote_traits<T1, hermitian_matrix_element<M2> > {
+ typedef typename promote_traits<T1, typename hermitian_matrix_element<M2>::value_type>::promote_type promote_type;
+ };
+ template<class M1, class M2>
+ struct promote_traits<hermitian_matrix_element<M1>, hermitian_matrix_element<M2> > {
+ typedef typename promote_traits<typename hermitian_matrix_element<M1>::value_type,
+ typename hermitian_matrix_element<M2>::value_type>::promote_type promote_type;
+ };
+
+#endif
+
+ // Array based hermitian matrix class
+ template<class T, class TRI, class L, class A>
+ class hermitian_matrix:
+ public matrix_container<hermitian_matrix<T, TRI, L, A> > {
+
+ typedef T &true_reference;
+ typedef T *pointer;
+ typedef TRI triangular_type;
+ typedef L layout_type;
+ typedef hermitian_matrix<T, TRI, L, A> self_type;
+ public:
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using matrix_container<self_type>::operator ();
+#endif
+ typedef typename A::size_type size_type;
+ typedef typename A::difference_type difference_type;
+ typedef T value_type;
+ // FIXME no better way to not return the address of a temporary?
+ // typedef const T &const_reference;
+ typedef const T const_reference;
+#ifndef BOOST_UBLAS_STRICT_HERMITIAN
+ typedef T &reference;
+#else
+ typedef hermitian_matrix_element<self_type> reference;
+#endif
+ typedef A array_type;
+
+ typedef const matrix_reference<const self_type> const_closure_type;
+ typedef matrix_reference<self_type> closure_type;
+ typedef vector<T, A> vector_temporary_type;
+ typedef matrix<T, L, A> matrix_temporary_type; // general sub-matrix
+ typedef packed_tag storage_category;
+ typedef typename L::orientation_category orientation_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ hermitian_matrix ():
+ matrix_container<self_type> (),
+ size_ (0), data_ (0) {}
+ BOOST_UBLAS_INLINE
+ hermitian_matrix (size_type size):
+ matrix_container<self_type> (),
+ size_ (BOOST_UBLAS_SAME (size, size)), data_ (triangular_type::packed_size (layout_type (), size, size)) {
+ }
+ BOOST_UBLAS_INLINE
+ hermitian_matrix (size_type size1, size_type size2):
+ matrix_container<self_type> (),
+ size_ (BOOST_UBLAS_SAME (size1, size2)), data_ (triangular_type::packed_size (layout_type (), size1, size2)) {
+ }
+ BOOST_UBLAS_INLINE
+ hermitian_matrix (size_type size, const array_type &data):
+ matrix_container<self_type> (),
+ size_ (size), data_ (data) {}
+ BOOST_UBLAS_INLINE
+ hermitian_matrix (const hermitian_matrix &m):
+ matrix_container<self_type> (),
+ size_ (m.size_), data_ (m.data_) {}
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ hermitian_matrix (const matrix_expression<AE> &ae):
+ matrix_container<self_type> (),
+ size_ (BOOST_UBLAS_SAME (ae ().size1 (), ae ().size2 ())),
+ data_ (triangular_type::packed_size (layout_type (), size_, size_)) {
+ matrix_assign<scalar_assign> (*this, ae);
+ }
+
+ // Accessors
+ BOOST_UBLAS_INLINE
+ size_type size1 () const {
+ return size_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type size2 () const {
+ return size_;
+ }
+
+ // Storage accessors
+ BOOST_UBLAS_INLINE
+ const array_type &data () const {
+ return data_;
+ }
+ BOOST_UBLAS_INLINE
+ array_type &data () {
+ return data_;
+ }
+
+ // Resizing
+ BOOST_UBLAS_INLINE
+ void resize (size_type size, bool preserve = true) {
+ if (preserve) {
+ self_type temporary (size, size);
+ detail::matrix_resize_preserve<layout_type> (*this, temporary);
+ }
+ else {
+ data ().resize (triangular_type::packed_size (layout_type (), size, size));
+ size_ = size;
+ }
+ }
+ BOOST_UBLAS_INLINE
+ void resize (size_type size1, size_type size2, bool preserve = true) {
+ resize (BOOST_UBLAS_SAME (size1, size2), preserve);
+ }
+ BOOST_UBLAS_INLINE
+ void resize_packed_preserve (size_type size) {
+ size_ = BOOST_UBLAS_SAME (size, size);
+ data ().resize (triangular_type::packed_size (layout_type (), size_, size_), value_type ());
+ }
+
+ // Element access
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type i, size_type j) const {
+ BOOST_UBLAS_CHECK (i < size_, bad_index ());
+ BOOST_UBLAS_CHECK (j < size_, bad_index ());
+ // if (i == j)
+ // return type_traits<value_type>::real (data () [triangular_type::element (layout_type (), i, size_, i, size_)]);
+ // else
+ if (triangular_type::other (i, j))
+ return data () [triangular_type::element (layout_type (), i, size_, j, size_)];
+ else
+ return type_traits<value_type>::conj (data () [triangular_type::element (layout_type (), j, size_, i, size_)]);
+ }
+ BOOST_UBLAS_INLINE
+ true_reference at_element (size_type i, size_type j) {
+ BOOST_UBLAS_CHECK (i < size_, bad_index ());
+ BOOST_UBLAS_CHECK (j < size_, bad_index ());
+ BOOST_UBLAS_CHECK (triangular_type::other (i, j), bad_index ());
+ return data () [triangular_type::element (layout_type (), i, size_, j, size_)];
+ }
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type i, size_type j) {
+#ifndef BOOST_UBLAS_STRICT_HERMITIAN
+ if (triangular_type::other (i, j))
+ return at_element (i, j);
+ else {
+ external_logic ().raise ();
+ // arbitary return value
+ return data () [triangular_type::element (layout_type (), j, size_, i, size_)];
+ }
+#else
+ if (triangular_type::other (i, j))
+ return reference (*this, i, j, data () [triangular_type::element (layout_type (), i, size_, j, size_)]);
+ else
+ return reference (*this, i, j, type_traits<value_type>::conj (data () [triangular_type::element (layout_type (), j, size_, i, size_)]));
+#endif
+ }
+
+ // Element assignemnt
+ BOOST_UBLAS_INLINE
+ true_reference insert_element (size_type i, size_type j, const_reference t) {
+ BOOST_UBLAS_CHECK (i < size_, bad_index ());
+ BOOST_UBLAS_CHECK (j < size_, bad_index ());
+ if (triangular_type::other (i, j)) {
+ return (data () [triangular_type::element (layout_type (), i, size_, j, size_)] = t);
+ } else {
+ return (data () [triangular_type::element (layout_type (), j, size_, i, size_)] = type_traits<value_type>::conj (t));
+ }
+ }
+ BOOST_UBLAS_INLINE
+ void erase_element (size_type i, size_type j) {
+ BOOST_UBLAS_CHECK (i < size_, bad_index ());
+ BOOST_UBLAS_CHECK (j < size_, bad_index ());
+ data () [triangular_type::element (layout_type (), i, size_, j, size_)] = value_type/*zero*/();
+ }
+
+ // Zeroing
+ BOOST_UBLAS_INLINE
+ void clear () {
+ std::fill (data ().begin (), data ().end (), value_type/*zero*/());
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ hermitian_matrix &operator = (const hermitian_matrix &m) {
+ size_ = m.size_;
+ data () = m.data ();
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ hermitian_matrix &assign_temporary (hermitian_matrix &m) {
+ swap (m);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ hermitian_matrix &operator = (const matrix_expression<AE> &ae) {
+ self_type temporary (ae);
+ return assign_temporary (temporary);
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ hermitian_matrix &assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_assign> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ hermitian_matrix& operator += (const matrix_expression<AE> &ae) {
+ self_type temporary (*this + ae);
+ return assign_temporary (temporary);
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ hermitian_matrix &plus_assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_plus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ hermitian_matrix& operator -= (const matrix_expression<AE> &ae) {
+ self_type temporary (*this - ae);
+ return assign_temporary (temporary);
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ hermitian_matrix &minus_assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_minus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ hermitian_matrix& operator *= (const AT &at) {
+ // Multiplication is only allowed for real scalars,
+ // otherwise the resulting matrix isn't hermitian.
+ // Thanks to Peter Schmitteckert for spotting this.
+ BOOST_UBLAS_CHECK (type_traits<value_type>::imag (at) == 0, non_real ());
+ matrix_assign_scalar<scalar_multiplies_assign> (*this, at);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ hermitian_matrix& operator /= (const AT &at) {
+ // Multiplication is only allowed for real scalars,
+ // otherwise the resulting matrix isn't hermitian.
+ // Thanks to Peter Schmitteckert for spotting this.
+ BOOST_UBLAS_CHECK (type_traits<value_type>::imag (at) == 0, non_real ());
+ matrix_assign_scalar<scalar_divides_assign> (*this, at);
+ return *this;
+ }
+
+ // Swapping
+ BOOST_UBLAS_INLINE
+ void swap (hermitian_matrix &m) {
+ if (this != &m) {
+ std::swap (size_, m.size_);
+ data ().swap (m.data ());
+ }
+ }
+ BOOST_UBLAS_INLINE
+ friend void swap (hermitian_matrix &m1, hermitian_matrix &m2) {
+ m1.swap (m2);
+ }
+
+ // Iterator types
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ typedef indexed_iterator1<self_type, packed_random_access_iterator_tag> iterator1;
+ typedef indexed_iterator2<self_type, packed_random_access_iterator_tag> iterator2;
+ typedef indexed_const_iterator1<self_type, packed_random_access_iterator_tag> const_iterator1;
+ typedef indexed_const_iterator2<self_type, packed_random_access_iterator_tag> const_iterator2;
+#else
+ class const_iterator1;
+ class iterator1;
+ class const_iterator2;
+ class iterator2;
+#endif
+ typedef reverse_iterator_base1<const_iterator1> const_reverse_iterator1;
+ typedef reverse_iterator_base1<iterator1> reverse_iterator1;
+ typedef reverse_iterator_base2<const_iterator2> const_reverse_iterator2;
+ typedef reverse_iterator_base2<iterator2> reverse_iterator2;
+
+ // Element lookup
+ BOOST_UBLAS_INLINE
+ const_iterator1 find1 (int /* rank */, size_type i, size_type j) const {
+ return const_iterator1 (*this, i, j);
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 find1 (int rank, size_type i, size_type j) {
+ if (rank == 1)
+ i = triangular_type::mutable_restrict1 (i, j);
+ return iterator1 (*this, i, j);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 find2 (int /* rank */, size_type i, size_type j) const {
+ return const_iterator2 (*this, i, j);
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 find2 (int rank, size_type i, size_type j) {
+ if (rank == 1)
+ j = triangular_type::mutable_restrict2 (i, j);
+ return iterator2 (*this, i, j);
+ }
+
+ // Iterators simply are indices.
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator1:
+ public container_const_reference<hermitian_matrix>,
+ public random_access_iterator_base<packed_random_access_iterator_tag,
+ const_iterator1, value_type> {
+ public:
+ typedef typename hermitian_matrix::value_type value_type;
+ typedef typename hermitian_matrix::difference_type difference_type;
+ typedef typename hermitian_matrix::const_reference reference;
+ typedef const typename hermitian_matrix::pointer pointer;
+
+ typedef const_iterator2 dual_iterator_type;
+ typedef const_reverse_iterator2 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator1 ():
+ container_const_reference<self_type> (), it1_ (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator1 (const self_type &m, size_type it1, size_type it2):
+ container_const_reference<self_type> (m), it1_ (it1), it2_ (it2) {}
+ BOOST_UBLAS_INLINE
+ const_iterator1 (const iterator1 &it):
+ container_const_reference<self_type> (it ()), it1_ (it.it1_), it2_ (it.it2_) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator ++ () {
+ ++ it1_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator -- () {
+ -- it1_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator += (difference_type n) {
+ it1_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator -= (difference_type n) {
+ it1_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ - it.it1_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ return (*this) () (it1_, it2_);
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 begin () const {
+ return (*this) ().find2 (1, it1_, 0);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 end () const {
+ return (*this) ().find2 (1, it1_, (*this) ().size2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rbegin () const {
+ return const_reverse_iterator2 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rend () const {
+ return const_reverse_iterator2 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it1_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it2_;
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator = (const const_iterator1 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it1_ = it.it1_;
+ it2_ = it.it2_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ == it.it1_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ < it.it1_;
+ }
+
+ private:
+ size_type it1_;
+ size_type it2_;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator1 begin1 () const {
+ return find1 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 end1 () const {
+ return find1 (0, size_, 0);
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class iterator1:
+ public container_reference<hermitian_matrix>,
+ public random_access_iterator_base<packed_random_access_iterator_tag,
+ iterator1, value_type> {
+ public:
+ typedef typename hermitian_matrix::value_type value_type;
+ typedef typename hermitian_matrix::difference_type difference_type;
+ typedef typename hermitian_matrix::true_reference reference;
+ typedef typename hermitian_matrix::pointer pointer;
+
+ typedef iterator2 dual_iterator_type;
+ typedef reverse_iterator2 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ iterator1 ():
+ container_reference<self_type> (), it1_ (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ iterator1 (self_type &m, size_type it1, size_type it2):
+ container_reference<self_type> (m), it1_ (it1), it2_ (it2) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ iterator1 &operator ++ () {
+ ++ it1_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 &operator -- () {
+ -- it1_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 &operator += (difference_type n) {
+ it1_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 &operator -= (difference_type n) {
+ it1_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ - it.it1_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ return (*this) ().at_element (it1_, it2_);
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator2 begin () const {
+ return (*this) ().find2 (1, it1_, 0);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator2 end () const {
+ return (*this) ().find2 (1, it1_, (*this) ().size2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator2 rbegin () const {
+ return reverse_iterator2 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator2 rend () const {
+ return reverse_iterator2 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it1_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it2_;
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ iterator1 &operator = (const iterator1 &it) {
+ container_reference<self_type>::assign (&it ());
+ it1_ = it.it1_;
+ it2_ = it.it2_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ == it.it1_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ < it.it1_;
+ }
+
+ private:
+ size_type it1_;
+ size_type it2_;
+
+ friend class const_iterator1;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ iterator1 begin1 () {
+ return find1 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 end1 () {
+ return find1 (0, size_, 0);
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator2:
+ public container_const_reference<hermitian_matrix>,
+ public random_access_iterator_base<packed_random_access_iterator_tag,
+ const_iterator2, value_type> {
+ public:
+ typedef typename hermitian_matrix::value_type value_type;
+ typedef typename hermitian_matrix::difference_type difference_type;
+ typedef typename hermitian_matrix::const_reference reference;
+ typedef const typename hermitian_matrix::pointer pointer;
+
+ typedef const_iterator1 dual_iterator_type;
+ typedef const_reverse_iterator1 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator2 ():
+ container_const_reference<self_type> (), it1_ (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator2 (const self_type &m, size_type it1, size_type it2):
+ container_const_reference<self_type> (m), it1_ (it1), it2_ (it2) {}
+ BOOST_UBLAS_INLINE
+ const_iterator2 (const iterator2 &it):
+ container_const_reference<self_type> (it ()), it1_ (it.it1_), it2_ (it.it2_) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator ++ () {
+ ++ it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator -- () {
+ -- it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator += (difference_type n) {
+ it2_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator -= (difference_type n) {
+ it2_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ - it.it2_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ return (*this) () (it1_, it2_);
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 begin () const {
+ return (*this) ().find1 (1, 0, it2_);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 end () const {
+ return (*this) ().find1 (1, (*this) ().size1 (), it2_);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rbegin () const {
+ return const_reverse_iterator1 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rend () const {
+ return const_reverse_iterator1 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it1_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it2_;
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator = (const const_iterator2 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it1_ = it.it1_;
+ it2_ = it.it2_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ == it.it2_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ < it.it2_;
+ }
+
+ private:
+ size_type it1_;
+ size_type it2_;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator2 begin2 () const {
+ return find2 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 end2 () const {
+ return find2 (0, 0, size_);
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class iterator2:
+ public container_reference<hermitian_matrix>,
+ public random_access_iterator_base<packed_random_access_iterator_tag,
+ iterator2, value_type> {
+ public:
+ typedef typename hermitian_matrix::value_type value_type;
+ typedef typename hermitian_matrix::difference_type difference_type;
+ typedef typename hermitian_matrix::true_reference reference;
+ typedef typename hermitian_matrix::pointer pointer;
+
+ typedef iterator1 dual_iterator_type;
+ typedef reverse_iterator1 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ iterator2 ():
+ container_reference<self_type> (), it1_ (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ iterator2 (self_type &m, size_type it1, size_type it2):
+ container_reference<self_type> (m), it1_ (it1), it2_ (it2) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ iterator2 &operator ++ () {
+ ++ it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 &operator -- () {
+ -- it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 &operator += (difference_type n) {
+ it2_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 &operator -= (difference_type n) {
+ it2_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ - it.it2_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ return (*this) ().at_element (it1_, it2_);
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator1 begin () const {
+ return (*this) ().find1 (1, 0, it2_);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator1 end () const {
+ return (*this) ().find1 (1, (*this) ().size1 (), it2_);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator1 rbegin () const {
+ return reverse_iterator1 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator1 rend () const {
+ return reverse_iterator1 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it1_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it2_;
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ iterator2 &operator = (const iterator2 &it) {
+ container_reference<self_type>::assign (&it ());
+ it1_ = it.it1_;
+ it2_ = it.it2_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ == it.it2_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ < it.it2_;
+ }
+
+ private:
+ size_type it1_;
+ size_type it2_;
+
+ friend class const_iterator2;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ iterator2 begin2 () {
+ return find2 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 end2 () {
+ return find2 (0, 0, size_);
+ }
+
+ // Reverse iterators
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rbegin1 () const {
+ return const_reverse_iterator1 (end1 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rend1 () const {
+ return const_reverse_iterator1 (begin1 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ reverse_iterator1 rbegin1 () {
+ return reverse_iterator1 (end1 ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator1 rend1 () {
+ return reverse_iterator1 (begin1 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rbegin2 () const {
+ return const_reverse_iterator2 (end2 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rend2 () const {
+ return const_reverse_iterator2 (begin2 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ reverse_iterator2 rbegin2 () {
+ return reverse_iterator2 (end2 ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator2 rend2 () {
+ return reverse_iterator2 (begin2 ());
+ }
+
+ private:
+ size_type size_;
+ array_type data_;
+ };
+
+
+ // Hermitian matrix adaptor class
+ template<class M, class TRI>
+ class hermitian_adaptor:
+ public matrix_expression<hermitian_adaptor<M, TRI> > {
+
+ typedef hermitian_adaptor<M, TRI> self_type;
+ typedef typename M::value_type &true_reference;
+ public:
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using matrix_expression<self_type>::operator ();
+#endif
+ typedef const M const_matrix_type;
+ typedef M matrix_type;
+ typedef TRI triangular_type;
+ typedef typename M::size_type size_type;
+ typedef typename M::difference_type difference_type;
+ typedef typename M::value_type value_type;
+ typedef typename M::value_type const_reference;
+#ifndef BOOST_UBLAS_STRICT_HERMITIAN
+ typedef typename boost::mpl::if_<boost::is_const<M>,
+ typename M::value_type,
+ typename M::reference>::type reference;
+#else
+ typedef typename boost::mpl::if_<boost::is_const<M>,
+ typename M::value_type,
+ hermitian_matrix_element<self_type> >::type reference;
+#endif
+ typedef typename boost::mpl::if_<boost::is_const<M>,
+ typename M::const_closure_type,
+ typename M::closure_type>::type matrix_closure_type;
+ typedef const self_type const_closure_type;
+ typedef self_type closure_type;
+ // Replaced by _temporary_traits to avoid type requirements on M
+ //typedef typename M::vector_temporary_type vector_temporary_type;
+ //typedef typename M::matrix_temporary_type matrix_temporary_type;
+ typedef typename storage_restrict_traits<typename M::storage_category,
+ packed_proxy_tag>::storage_category storage_category;
+ typedef typename M::orientation_category orientation_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ hermitian_adaptor (matrix_type &data):
+ matrix_expression<self_type> (),
+ data_ (data) {
+ BOOST_UBLAS_CHECK (data_.size1 () == data_.size2 (), bad_size ());
+ }
+ BOOST_UBLAS_INLINE
+ hermitian_adaptor (const hermitian_adaptor &m):
+ matrix_expression<self_type> (),
+ data_ (m.data_) {
+ BOOST_UBLAS_CHECK (data_.size1 () == data_.size2 (), bad_size ());
+ }
+
+ // Accessors
+ BOOST_UBLAS_INLINE
+ size_type size1 () const {
+ return data_.size1 ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type size2 () const {
+ return data_.size2 ();
+ }
+
+ // Storage accessors
+ BOOST_UBLAS_INLINE
+ const matrix_closure_type &data () const {
+ return data_;
+ }
+ BOOST_UBLAS_INLINE
+ matrix_closure_type &data () {
+ return data_;
+ }
+
+ // Element access
+#ifndef BOOST_UBLAS_PROXY_CONST_MEMBER
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type i, size_type j) const {
+ BOOST_UBLAS_CHECK (i < size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (j < size2 (), bad_index ());
+ // if (i == j)
+ // return type_traits<value_type>::real (data () (i, i));
+ // else
+ if (triangular_type::other (i, j))
+ return data () (i, j);
+ else
+ return type_traits<value_type>::conj (data () (j, i));
+ }
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type i, size_type j) {
+ BOOST_UBLAS_CHECK (i < size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (j < size2 (), bad_index ());
+#ifndef BOOST_UBLAS_STRICT_HERMITIAN
+ if (triangular_type::other (i, j))
+ return data () (i, j);
+ else {
+ external_logic ().raise ();
+ return conj_ = type_traits<value_type>::conj (data () (j, i));
+ }
+#else
+ if (triangular_type::other (i, j))
+ return reference (*this, i, j, data () (i, j));
+ else
+ return reference (*this, i, j, type_traits<value_type>::conj (data () (j, i)));
+#endif
+ }
+ BOOST_UBLAS_INLINE
+ true_reference insert_element (size_type i, size_type j, value_type t) {
+ BOOST_UBLAS_CHECK (i < size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (j < size2 (), bad_index ());
+ // if (i == j)
+ // data () (i, i) = type_traits<value_type>::real (t);
+ // else
+ if (triangular_type::other (i, j))
+ return data () (i, j) = t;
+ else
+ return data () (j, i) = type_traits<value_type>::conj (t);
+ }
+#else
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type i, size_type j) {
+ BOOST_UBLAS_CHECK (i < size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (j < size2 (), bad_index ());
+#ifndef BOOST_UBLAS_STRICT_HERMITIAN
+ if (triangular_type::other (i, j))
+ return data () (i, j);
+ else {
+ external_logic ().raise ();
+ return conj_ = type_traits<value_type>::conj (data () (j, i));
+ }
+#else
+ if (triangular_type::other (i, j))
+ return reference (*this, i, j, data () (i, j));
+ else
+ return reference (*this, i, j, type_traits<value_type>::conj (data () (j, i)));
+#endif
+ }
+ BOOST_UBLAS_INLINE
+ true_reference insert_element (size_type i, size_type j, value_type t) {
+ BOOST_UBLAS_CHECK (i < size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (j < size2 (), bad_index ());
+ // if (i == j)
+ // data () (i, i) = type_traits<value_type>::real (t);
+ // else
+ if (triangular_type::other (i, j))
+ return data () (i, j) = t;
+ else
+ return data () (j, i) = type_traits<value_type>::conj (t);
+ }
+#endif
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ hermitian_adaptor &operator = (const hermitian_adaptor &m) {
+ matrix_assign<scalar_assign, triangular_type> (*this, m);
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ hermitian_adaptor &assign_temporary (hermitian_adaptor &m) {
+ *this = m;
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ hermitian_adaptor &operator = (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_assign, triangular_type> (*this, matrix<value_type> (ae));
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ hermitian_adaptor &assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_assign, triangular_type> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ hermitian_adaptor& operator += (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_assign, triangular_type> (*this, matrix<value_type> (*this + ae));
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ hermitian_adaptor &plus_assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_plus_assign, triangular_type> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ hermitian_adaptor& operator -= (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_assign, triangular_type> (*this, matrix<value_type> (*this - ae));
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ hermitian_adaptor &minus_assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_minus_assign, triangular_type> (*this, ae);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ hermitian_adaptor& operator *= (const AT &at) {
+ // Multiplication is only allowed for real scalars,
+ // otherwise the resulting matrix isn't hermitian.
+ // Thanks to Peter Schmitteckert for spotting this.
+ BOOST_UBLAS_CHECK (type_traits<value_type>::imag (at) == 0, non_real ());
+ matrix_assign_scalar<scalar_multiplies_assign> (*this, at);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ hermitian_adaptor& operator /= (const AT &at) {
+ // Multiplication is only allowed for real scalars,
+ // otherwise the resulting matrix isn't hermitian.
+ // Thanks to Peter Schmitteckert for spotting this.
+ BOOST_UBLAS_CHECK (type_traits<value_type>::imag (at) == 0, non_real ());
+ matrix_assign_scalar<scalar_divides_assign> (*this, at);
+ return *this;
+ }
+
+ // Closure comparison
+ BOOST_UBLAS_INLINE
+ bool same_closure (const hermitian_adaptor &ha) const {
+ return (*this).data ().same_closure (ha.data ());
+ }
+
+ // Swapping
+ BOOST_UBLAS_INLINE
+ void swap (hermitian_adaptor &m) {
+ if (this != &m)
+ matrix_swap<scalar_swap, triangular_type> (*this, m);
+ }
+ BOOST_UBLAS_INLINE
+ friend void swap (hermitian_adaptor &m1, hermitian_adaptor &m2) {
+ m1.swap (m2);
+ }
+
+ // Iterator types
+ private:
+ // Use matrix iterator
+ typedef typename M::const_iterator1 const_subiterator1_type;
+ typedef typename boost::mpl::if_<boost::is_const<M>,
+ typename M::const_iterator1,
+ typename M::iterator1>::type subiterator1_type;
+ typedef typename M::const_iterator2 const_subiterator2_type;
+ typedef typename boost::mpl::if_<boost::is_const<M>,
+ typename M::const_iterator2,
+ typename M::iterator2>::type subiterator2_type;
+
+ public:
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ typedef indexed_iterator1<self_type, packed_random_access_iterator_tag> iterator1;
+ typedef indexed_iterator2<self_type, packed_random_access_iterator_tag> iterator2;
+ typedef indexed_const_iterator1<self_type, dense_random_access_iterator_tag> const_iterator1;
+ typedef indexed_const_iterator2<self_type, dense_random_access_iterator_tag> const_iterator2;
+#else
+ class const_iterator1;
+ class iterator1;
+ class const_iterator2;
+ class iterator2;
+#endif
+ typedef reverse_iterator_base1<const_iterator1> const_reverse_iterator1;
+ typedef reverse_iterator_base1<iterator1> reverse_iterator1;
+ typedef reverse_iterator_base2<const_iterator2> const_reverse_iterator2;
+ typedef reverse_iterator_base2<iterator2> reverse_iterator2;
+
+ // Element lookup
+ BOOST_UBLAS_INLINE
+ const_iterator1 find1 (int rank, size_type i, size_type j) const {
+ if (triangular_type::other (i, j)) {
+ if (triangular_type::other (size1 (), j)) {
+ return const_iterator1 (*this, 0, 0,
+ data ().find1 (rank, i, j), data ().find1 (rank, size1 (), j),
+ data ().find2 (rank, size2 (), size1 ()), data ().find2 (rank, size2 (), size1 ()));
+ } else {
+ return const_iterator1 (*this, 0, 1,
+ data ().find1 (rank, i, j), data ().find1 (rank, j, j),
+ data ().find2 (rank, j, j), data ().find2 (rank, j, size1 ()));
+ }
+ } else {
+ if (triangular_type::other (size1 (), j)) {
+ return const_iterator1 (*this, 1, 0,
+ data ().find1 (rank, j, j), data ().find1 (rank, size1 (), j),
+ data ().find2 (rank, j, i), data ().find2 (rank, j, j));
+ } else {
+ return const_iterator1 (*this, 1, 1,
+ data ().find1 (rank, size1 (), size2 ()), data ().find1 (rank, size1 (), size2 ()),
+ data ().find2 (rank, j, i), data ().find2 (rank, j, size1 ()));
+ }
+ }
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 find1 (int rank, size_type i, size_type j) {
+ if (rank == 1)
+ i = triangular_type::mutable_restrict1 (i, j);
+ return iterator1 (*this, data ().find1 (rank, i, j));
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 find2 (int rank, size_type i, size_type j) const {
+ if (triangular_type::other (i, j)) {
+ if (triangular_type::other (i, size2 ())) {
+ return const_iterator2 (*this, 1, 1,
+ data ().find1 (rank, size2 (), size1 ()), data ().find1 (rank, size2 (), size1 ()),
+ data ().find2 (rank, i, j), data ().find2 (rank, i, size2 ()));
+ } else {
+ return const_iterator2 (*this, 1, 0,
+ data ().find1 (rank, i, i), data ().find1 (rank, size2 (), i),
+ data ().find2 (rank, i, j), data ().find2 (rank, i, i));
+ }
+ } else {
+ if (triangular_type::other (i, size2 ())) {
+ return const_iterator2 (*this, 0, 1,
+ data ().find1 (rank, j, i), data ().find1 (rank, i, i),
+ data ().find2 (rank, i, i), data ().find2 (rank, i, size2 ()));
+ } else {
+ return const_iterator2 (*this, 0, 0,
+ data ().find1 (rank, j, i), data ().find1 (rank, size2 (), i),
+ data ().find2 (rank, size1 (), size2 ()), data ().find2 (rank, size2 (), size2 ()));
+ }
+ }
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 find2 (int rank, size_type i, size_type j) {
+ if (rank == 1)
+ j = triangular_type::mutable_restrict2 (i, j);
+ return iterator2 (*this, data ().find2 (rank, i, j));
+ }
+
+ // Iterators simply are indices.
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator1:
+ public container_const_reference<hermitian_adaptor>,
+ public random_access_iterator_base<typename iterator_restrict_traits<
+ typename const_subiterator1_type::iterator_category, dense_random_access_iterator_tag>::iterator_category,
+ const_iterator1, value_type> {
+ public:
+ typedef typename const_subiterator1_type::value_type value_type;
+ typedef typename const_subiterator1_type::difference_type difference_type;
+ // FIXME no better way to not return the address of a temporary?
+ // typedef typename const_subiterator1_type::reference reference;
+ typedef typename const_subiterator1_type::value_type reference;
+ typedef typename const_subiterator1_type::pointer pointer;
+
+ typedef const_iterator2 dual_iterator_type;
+ typedef const_reverse_iterator2 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator1 ():
+ container_const_reference<self_type> (),
+ begin_ (-1), end_ (-1), current_ (-1),
+ it1_begin_ (), it1_end_ (), it1_ (),
+ it2_begin_ (), it2_end_ (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator1 (const self_type &m, int begin, int end,
+ const const_subiterator1_type &it1_begin, const const_subiterator1_type &it1_end,
+ const const_subiterator2_type &it2_begin, const const_subiterator2_type &it2_end):
+ container_const_reference<self_type> (m),
+ begin_ (begin), end_ (end), current_ (begin),
+ it1_begin_ (it1_begin), it1_end_ (it1_end), it1_ (it1_begin_),
+ it2_begin_ (it2_begin), it2_end_ (it2_end), it2_ (it2_begin_) {
+ if (current_ == 0 && it1_ == it1_end_)
+ current_ = 1;
+ if (current_ == 1 && it2_ == it2_end_)
+ current_ = 0;
+ if ((current_ == 0 && it1_ == it1_end_) ||
+ (current_ == 1 && it2_ == it2_end_))
+ current_ = end_;
+ BOOST_UBLAS_CHECK (current_ == end_ ||
+ (current_ == 0 && it1_ != it1_end_) ||
+ (current_ == 1 && it2_ != it2_end_), internal_logic ());
+ }
+ // FIXME cannot compile
+ // iterator1 does not have these members!
+ BOOST_UBLAS_INLINE
+ const_iterator1 (const iterator1 &it):
+ container_const_reference<self_type> (it ()),
+ begin_ (it.begin_), end_ (it.end_), current_ (it.current_),
+ it1_begin_ (it.it1_begin_), it1_end_ (it.it1_end_), it1_ (it.it1_),
+ it2_begin_ (it.it2_begin_), it2_end_ (it.it2_end_), it2_ (it.it2_) {
+ BOOST_UBLAS_CHECK (current_ == end_ ||
+ (current_ == 0 && it1_ != it1_end_) ||
+ (current_ == 1 && it2_ != it2_end_), internal_logic ());
+ }
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator ++ () {
+ BOOST_UBLAS_CHECK (current_ == 0 || current_ == 1, internal_logic ());
+ if (current_ == 0) {
+ BOOST_UBLAS_CHECK (it1_ != it1_end_, internal_logic ());
+ ++ it1_;
+ if (it1_ == it1_end_ && end_ == 1) {
+ it2_ = it2_begin_;
+ current_ = 1;
+ }
+ } else /* if (current_ == 1) */ {
+ BOOST_UBLAS_CHECK (it2_ != it2_end_, internal_logic ());
+ ++ it2_;
+ if (it2_ == it2_end_ && end_ == 0) {
+ it1_ = it1_begin_;
+ current_ = 0;
+ }
+ }
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator -- () {
+ BOOST_UBLAS_CHECK (current_ == 0 || current_ == 1, internal_logic ());
+ if (current_ == 0) {
+ if (it1_ == it1_begin_ && begin_ == 1) {
+ it2_ = it2_end_;
+ BOOST_UBLAS_CHECK (it2_ != it2_begin_, internal_logic ());
+ -- it2_;
+ current_ = 1;
+ } else {
+ -- it1_;
+ }
+ } else /* if (current_ == 1) */ {
+ if (it2_ == it2_begin_ && begin_ == 0) {
+ it1_ = it1_end_;
+ BOOST_UBLAS_CHECK (it1_ != it1_begin_, internal_logic ());
+ -- it1_;
+ current_ = 0;
+ } else {
+ -- it2_;
+ }
+ }
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator += (difference_type n) {
+ BOOST_UBLAS_CHECK (current_ == 0 || current_ == 1, internal_logic ());
+ if (current_ == 0) {
+ size_type d = (std::min) (n, it1_end_ - it1_);
+ it1_ += d;
+ n -= d;
+ if (n > 0 || (end_ == 1 && it1_ == it1_end_)) {
+ BOOST_UBLAS_CHECK (end_ == 1, external_logic ());
+ d = (std::min) (n, it2_end_ - it2_begin_);
+ it2_ = it2_begin_ + d;
+ n -= d;
+ current_ = 1;
+ }
+ } else /* if (current_ == 1) */ {
+ size_type d = (std::min) (n, it2_end_ - it2_);
+ it2_ += d;
+ n -= d;
+ if (n > 0 || (end_ == 0 && it2_ == it2_end_)) {
+ BOOST_UBLAS_CHECK (end_ == 0, external_logic ());
+ d = (std::min) (n, it1_end_ - it1_begin_);
+ it1_ = it1_begin_ + d;
+ n -= d;
+ current_ = 0;
+ }
+ }
+ BOOST_UBLAS_CHECK (n == 0, external_logic ());
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator -= (difference_type n) {
+ BOOST_UBLAS_CHECK (current_ == 0 || current_ == 1, internal_logic ());
+ if (current_ == 0) {
+ size_type d = (std::min) (n, it1_ - it1_begin_);
+ it1_ -= d;
+ n -= d;
+ if (n > 0) {
+ BOOST_UBLAS_CHECK (end_ == 1, external_logic ());
+ d = (std::min) (n, it2_end_ - it2_begin_);
+ it2_ = it2_end_ - d;
+ n -= d;
+ current_ = 1;
+ }
+ } else /* if (current_ == 1) */ {
+ size_type d = (std::min) (n, it2_ - it2_begin_);
+ it2_ -= d;
+ n -= d;
+ if (n > 0) {
+ BOOST_UBLAS_CHECK (end_ == 0, external_logic ());
+ d = (std::min) (n, it1_end_ - it1_begin_);
+ it1_ = it1_end_ - d;
+ n -= d;
+ current_ = 0;
+ }
+ }
+ BOOST_UBLAS_CHECK (n == 0, external_logic ());
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (current_ == 0 || current_ == 1, internal_logic ());
+ BOOST_UBLAS_CHECK (it.current_ == 0 || it.current_ == 1, internal_logic ());
+ BOOST_UBLAS_CHECK (/* begin_ == it.begin_ && */ end_ == it.end_, internal_logic ());
+ if (current_ == 0 && it.current_ == 0) {
+ return it1_ - it.it1_;
+ } else if (current_ == 0 && it.current_ == 1) {
+ if (end_ == 1 && it.end_ == 1) {
+ return (it1_ - it.it1_end_) + (it.it2_begin_ - it.it2_);
+ } else /* if (end_ == 0 && it.end_ == 0) */ {
+ return (it1_ - it.it1_begin_) + (it.it2_end_ - it.it2_);
+ }
+
+ } else if (current_ == 1 && it.current_ == 0) {
+ if (end_ == 1 && it.end_ == 1) {
+ return (it2_ - it.it2_begin_) + (it.it1_end_ - it.it1_);
+ } else /* if (end_ == 0 && it.end_ == 0) */ {
+ return (it2_ - it.it2_end_) + (it.it1_begin_ - it.it1_);
+ }
+ } else /* if (current_ == 1 && it.current_ == 1) */ {
+ return it2_ - it.it2_;
+ }
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ BOOST_UBLAS_CHECK (current_ == 0 || current_ == 1, internal_logic ());
+ if (current_ == 0) {
+ BOOST_UBLAS_CHECK (it1_ != it1_end_, internal_logic ());
+ if (triangular_type::other (index1 (), index2 ()))
+ return *it1_;
+ else
+ return type_traits<value_type>::conj (*it1_);
+ } else /* if (current_ == 1) */ {
+ BOOST_UBLAS_CHECK (it2_ != it2_end_, internal_logic ());
+ if (triangular_type::other (index1 (), index2 ()))
+ return *it2_;
+ else
+ return type_traits<value_type>::conj (*it2_);
+ }
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 begin () const {
+ return (*this) ().find2 (1, index1 (), 0);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 end () const {
+ return (*this) ().find2 (1, index1 (), (*this) ().size2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rbegin () const {
+ return const_reverse_iterator2 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rend () const {
+ return const_reverse_iterator2 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ BOOST_UBLAS_CHECK (current_ == 0 || current_ == 1, internal_logic ());
+ if (current_ == 0) {
+ BOOST_UBLAS_CHECK (it1_ != it1_end_, internal_logic ());
+ return it1_.index1 ();
+ } else /* if (current_ == 1) */ {
+ BOOST_UBLAS_CHECK (it2_ != it2_end_, internal_logic ());
+ return it2_.index2 ();
+ }
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ BOOST_UBLAS_CHECK (current_ == 0 || current_ == 1, internal_logic ());
+ if (current_ == 0) {
+ BOOST_UBLAS_CHECK (it1_ != it1_end_, internal_logic ());
+ return it1_.index2 ();
+ } else /* if (current_ == 1) */ {
+ BOOST_UBLAS_CHECK (it2_ != it2_end_, internal_logic ());
+ return it2_.index1 ();
+ }
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator = (const const_iterator1 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ begin_ = it.begin_;
+ end_ = it.end_;
+ current_ = it.current_;
+ it1_begin_ = it.it1_begin_;
+ it1_end_ = it.it1_end_;
+ it1_ = it.it1_;
+ it2_begin_ = it.it2_begin_;
+ it2_end_ = it.it2_end_;
+ it2_ = it.it2_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (current_ == 0 || current_ == 1, internal_logic ());
+ BOOST_UBLAS_CHECK (it.current_ == 0 || it.current_ == 1, internal_logic ());
+ BOOST_UBLAS_CHECK (/* begin_ == it.begin_ && */ end_ == it.end_, internal_logic ());
+ return (current_ == 0 && it.current_ == 0 && it1_ == it.it1_) ||
+ (current_ == 1 && it.current_ == 1 && it2_ == it.it2_);
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it - *this > 0;
+ }
+
+ private:
+ int begin_;
+ int end_;
+ int current_;
+ const_subiterator1_type it1_begin_;
+ const_subiterator1_type it1_end_;
+ const_subiterator1_type it1_;
+ const_subiterator2_type it2_begin_;
+ const_subiterator2_type it2_end_;
+ const_subiterator2_type it2_;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator1 begin1 () const {
+ return find1 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 end1 () const {
+ return find1 (0, size1 (), 0);
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class iterator1:
+ public container_reference<hermitian_adaptor>,
+ public random_access_iterator_base<typename iterator_restrict_traits<
+ typename subiterator1_type::iterator_category, packed_random_access_iterator_tag>::iterator_category,
+ iterator1, value_type> {
+ public:
+ typedef typename subiterator1_type::value_type value_type;
+ typedef typename subiterator1_type::difference_type difference_type;
+ typedef typename subiterator1_type::reference reference;
+ typedef typename subiterator1_type::pointer pointer;
+
+ typedef iterator2 dual_iterator_type;
+ typedef reverse_iterator2 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ iterator1 ():
+ container_reference<self_type> (), it1_ () {}
+ BOOST_UBLAS_INLINE
+ iterator1 (self_type &m, const subiterator1_type &it1):
+ container_reference<self_type> (m), it1_ (it1) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ iterator1 &operator ++ () {
+ ++ it1_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 &operator -- () {
+ -- it1_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 &operator += (difference_type n) {
+ it1_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 &operator -= (difference_type n) {
+ it1_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it1_ - it.it1_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ return *it1_;
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator2 begin () const {
+ return (*this) ().find2 (1, index1 (), 0);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator2 end () const {
+ return (*this) ().find2 (1, index1 (), (*this) ().size2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator2 rbegin () const {
+ return reverse_iterator2 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator2 rend () const {
+ return reverse_iterator2 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it1_.index1 ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it1_.index2 ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ iterator1 &operator = (const iterator1 &it) {
+ container_reference<self_type>::assign (&it ());
+ it1_ = it.it1_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it1_ == it.it1_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it1_ < it.it1_;
+ }
+
+ private:
+ subiterator1_type it1_;
+
+ friend class const_iterator1;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ iterator1 begin1 () {
+ return find1 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 end1 () {
+ return find1 (0, size1 (), 0);
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator2:
+ public container_const_reference<hermitian_adaptor>,
+ public random_access_iterator_base<typename iterator_restrict_traits<
+ typename const_subiterator2_type::iterator_category, dense_random_access_iterator_tag>::iterator_category,
+ const_iterator2, value_type> {
+ public:
+ typedef typename const_subiterator2_type::value_type value_type;
+ typedef typename const_subiterator2_type::difference_type difference_type;
+ // FIXME no better way to not return the address of a temporary?
+ // typedef typename const_subiterator2_type::reference reference;
+ typedef typename const_subiterator2_type::value_type reference;
+ typedef typename const_subiterator2_type::pointer pointer;
+
+ typedef const_iterator1 dual_iterator_type;
+ typedef const_reverse_iterator1 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator2 ():
+ container_const_reference<self_type> (),
+ begin_ (-1), end_ (-1), current_ (-1),
+ it1_begin_ (), it1_end_ (), it1_ (),
+ it2_begin_ (), it2_end_ (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator2 (const self_type &m, int begin, int end,
+ const const_subiterator1_type &it1_begin, const const_subiterator1_type &it1_end,
+ const const_subiterator2_type &it2_begin, const const_subiterator2_type &it2_end):
+ container_const_reference<self_type> (m),
+ begin_ (begin), end_ (end), current_ (begin),
+ it1_begin_ (it1_begin), it1_end_ (it1_end), it1_ (it1_begin_),
+ it2_begin_ (it2_begin), it2_end_ (it2_end), it2_ (it2_begin_) {
+ if (current_ == 0 && it1_ == it1_end_)
+ current_ = 1;
+ if (current_ == 1 && it2_ == it2_end_)
+ current_ = 0;
+ if ((current_ == 0 && it1_ == it1_end_) ||
+ (current_ == 1 && it2_ == it2_end_))
+ current_ = end_;
+ BOOST_UBLAS_CHECK (current_ == end_ ||
+ (current_ == 0 && it1_ != it1_end_) ||
+ (current_ == 1 && it2_ != it2_end_), internal_logic ());
+ }
+ // FIXME cannot compiler
+ // iterator2 does not have these members!
+ BOOST_UBLAS_INLINE
+ const_iterator2 (const iterator2 &it):
+ container_const_reference<self_type> (it ()),
+ begin_ (it.begin_), end_ (it.end_), current_ (it.current_),
+ it1_begin_ (it.it1_begin_), it1_end_ (it.it1_end_), it1_ (it.it1_),
+ it2_begin_ (it.it2_begin_), it2_end_ (it.it2_end_), it2_ (it.it2_) {
+ BOOST_UBLAS_CHECK (current_ == end_ ||
+ (current_ == 0 && it1_ != it1_end_) ||
+ (current_ == 1 && it2_ != it2_end_), internal_logic ());
+ }
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator ++ () {
+ BOOST_UBLAS_CHECK (current_ == 0 || current_ == 1, internal_logic ());
+ if (current_ == 0) {
+ BOOST_UBLAS_CHECK (it1_ != it1_end_, internal_logic ());
+ ++ it1_;
+ if (it1_ == it1_end_ && end_ == 1) {
+ it2_ = it2_begin_;
+ current_ = 1;
+ }
+ } else /* if (current_ == 1) */ {
+ BOOST_UBLAS_CHECK (it2_ != it2_end_, internal_logic ());
+ ++ it2_;
+ if (it2_ == it2_end_ && end_ == 0) {
+ it1_ = it1_begin_;
+ current_ = 0;
+ }
+ }
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator -- () {
+ BOOST_UBLAS_CHECK (current_ == 0 || current_ == 1, internal_logic ());
+ if (current_ == 0) {
+ if (it1_ == it1_begin_ && begin_ == 1) {
+ it2_ = it2_end_;
+ BOOST_UBLAS_CHECK (it2_ != it2_begin_, internal_logic ());
+ -- it2_;
+ current_ = 1;
+ } else {
+ -- it1_;
+ }
+ } else /* if (current_ == 1) */ {
+ if (it2_ == it2_begin_ && begin_ == 0) {
+ it1_ = it1_end_;
+ BOOST_UBLAS_CHECK (it1_ != it1_begin_, internal_logic ());
+ -- it1_;
+ current_ = 0;
+ } else {
+ -- it2_;
+ }
+ }
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator += (difference_type n) {
+ BOOST_UBLAS_CHECK (current_ == 0 || current_ == 1, internal_logic ());
+ if (current_ == 0) {
+ size_type d = (std::min) (n, it1_end_ - it1_);
+ it1_ += d;
+ n -= d;
+ if (n > 0 || (end_ == 1 && it1_ == it1_end_)) {
+ BOOST_UBLAS_CHECK (end_ == 1, external_logic ());
+ d = (std::min) (n, it2_end_ - it2_begin_);
+ it2_ = it2_begin_ + d;
+ n -= d;
+ current_ = 1;
+ }
+ } else /* if (current_ == 1) */ {
+ size_type d = (std::min) (n, it2_end_ - it2_);
+ it2_ += d;
+ n -= d;
+ if (n > 0 || (end_ == 0 && it2_ == it2_end_)) {
+ BOOST_UBLAS_CHECK (end_ == 0, external_logic ());
+ d = (std::min) (n, it1_end_ - it1_begin_);
+ it1_ = it1_begin_ + d;
+ n -= d;
+ current_ = 0;
+ }
+ }
+ BOOST_UBLAS_CHECK (n == 0, external_logic ());
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator -= (difference_type n) {
+ BOOST_UBLAS_CHECK (current_ == 0 || current_ == 1, internal_logic ());
+ if (current_ == 0) {
+ size_type d = (std::min) (n, it1_ - it1_begin_);
+ it1_ -= d;
+ n -= d;
+ if (n > 0) {
+ BOOST_UBLAS_CHECK (end_ == 1, external_logic ());
+ d = (std::min) (n, it2_end_ - it2_begin_);
+ it2_ = it2_end_ - d;
+ n -= d;
+ current_ = 1;
+ }
+ } else /* if (current_ == 1) */ {
+ size_type d = (std::min) (n, it2_ - it2_begin_);
+ it2_ -= d;
+ n -= d;
+ if (n > 0) {
+ BOOST_UBLAS_CHECK (end_ == 0, external_logic ());
+ d = (std::min) (n, it1_end_ - it1_begin_);
+ it1_ = it1_end_ - d;
+ n -= d;
+ current_ = 0;
+ }
+ }
+ BOOST_UBLAS_CHECK (n == 0, external_logic ());
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (current_ == 0 || current_ == 1, internal_logic ());
+ BOOST_UBLAS_CHECK (it.current_ == 0 || it.current_ == 1, internal_logic ());
+ BOOST_UBLAS_CHECK (/* begin_ == it.begin_ && */ end_ == it.end_, internal_logic ());
+ if (current_ == 0 && it.current_ == 0) {
+ return it1_ - it.it1_;
+ } else if (current_ == 0 && it.current_ == 1) {
+ if (end_ == 1 && it.end_ == 1) {
+ return (it1_ - it.it1_end_) + (it.it2_begin_ - it.it2_);
+ } else /* if (end_ == 0 && it.end_ == 0) */ {
+ return (it1_ - it.it1_begin_) + (it.it2_end_ - it.it2_);
+ }
+
+ } else if (current_ == 1 && it.current_ == 0) {
+ if (end_ == 1 && it.end_ == 1) {
+ return (it2_ - it.it2_begin_) + (it.it1_end_ - it.it1_);
+ } else /* if (end_ == 0 && it.end_ == 0) */ {
+ return (it2_ - it.it2_end_) + (it.it1_begin_ - it.it1_);
+ }
+ } else /* if (current_ == 1 && it.current_ == 1) */ {
+ return it2_ - it.it2_;
+ }
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ BOOST_UBLAS_CHECK (current_ == 0 || current_ == 1, internal_logic ());
+ if (current_ == 0) {
+ BOOST_UBLAS_CHECK (it1_ != it1_end_, internal_logic ());
+ if (triangular_type::other (index1 (), index2 ()))
+ return *it1_;
+ else
+ return type_traits<value_type>::conj (*it1_);
+ } else /* if (current_ == 1) */ {
+ BOOST_UBLAS_CHECK (it2_ != it2_end_, internal_logic ());
+ if (triangular_type::other (index1 (), index2 ()))
+ return *it2_;
+ else
+ return type_traits<value_type>::conj (*it2_);
+ }
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 begin () const {
+ return (*this) ().find1 (1, 0, index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 end () const {
+ return (*this) ().find1 (1, (*this) ().size1 (), index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rbegin () const {
+ return const_reverse_iterator1 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rend () const {
+ return const_reverse_iterator1 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ BOOST_UBLAS_CHECK (current_ == 0 || current_ == 1, internal_logic ());
+ if (current_ == 0) {
+ BOOST_UBLAS_CHECK (it1_ != it1_end_, internal_logic ());
+ return it1_.index2 ();
+ } else /* if (current_ == 1) */ {
+ BOOST_UBLAS_CHECK (it2_ != it2_end_, internal_logic ());
+ return it2_.index1 ();
+ }
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ BOOST_UBLAS_CHECK (current_ == 0 || current_ == 1, internal_logic ());
+ if (current_ == 0) {
+ BOOST_UBLAS_CHECK (it1_ != it1_end_, internal_logic ());
+ return it1_.index1 ();
+ } else /* if (current_ == 1) */ {
+ BOOST_UBLAS_CHECK (it2_ != it2_end_, internal_logic ());
+ return it2_.index2 ();
+ }
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator = (const const_iterator2 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ begin_ = it.begin_;
+ end_ = it.end_;
+ current_ = it.current_;
+ it1_begin_ = it.it1_begin_;
+ it1_end_ = it.it1_end_;
+ it1_ = it.it1_;
+ it2_begin_ = it.it2_begin_;
+ it2_end_ = it.it2_end_;
+ it2_ = it.it2_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (current_ == 0 || current_ == 1, internal_logic ());
+ BOOST_UBLAS_CHECK (it.current_ == 0 || it.current_ == 1, internal_logic ());
+ BOOST_UBLAS_CHECK (/* begin_ == it.begin_ && */ end_ == it.end_, internal_logic ());
+ return (current_ == 0 && it.current_ == 0 && it1_ == it.it1_) ||
+ (current_ == 1 && it.current_ == 1 && it2_ == it.it2_);
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it - *this > 0;
+ }
+
+ private:
+ int begin_;
+ int end_;
+ int current_;
+ const_subiterator1_type it1_begin_;
+ const_subiterator1_type it1_end_;
+ const_subiterator1_type it1_;
+ const_subiterator2_type it2_begin_;
+ const_subiterator2_type it2_end_;
+ const_subiterator2_type it2_;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator2 begin2 () const {
+ return find2 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 end2 () const {
+ return find2 (0, 0, size2 ());
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class iterator2:
+ public container_reference<hermitian_adaptor>,
+ public random_access_iterator_base<typename iterator_restrict_traits<
+ typename subiterator2_type::iterator_category, packed_random_access_iterator_tag>::iterator_category,
+ iterator2, value_type> {
+ public:
+ typedef typename subiterator2_type::value_type value_type;
+ typedef typename subiterator2_type::difference_type difference_type;
+ typedef typename subiterator2_type::reference reference;
+ typedef typename subiterator2_type::pointer pointer;
+
+ typedef iterator1 dual_iterator_type;
+ typedef reverse_iterator1 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ iterator2 ():
+ container_reference<self_type> (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ iterator2 (self_type &m, const subiterator2_type &it2):
+ container_reference<self_type> (m), it2_ (it2) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ iterator2 &operator ++ () {
+ ++ it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 &operator -- () {
+ -- it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 &operator += (difference_type n) {
+ it2_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 &operator -= (difference_type n) {
+ it2_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it2_ - it.it2_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ return *it2_;
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator1 begin () const {
+ return (*this) ().find1 (1, 0, index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator1 end () const {
+ return (*this) ().find1 (1, (*this) ().size1 (), index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator1 rbegin () const {
+ return reverse_iterator1 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator1 rend () const {
+ return reverse_iterator1 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it2_.index1 ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it2_.index2 ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ iterator2 &operator = (const iterator2 &it) {
+ container_reference<self_type>::assign (&it ());
+ it2_ = it.it2_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it2_ == it.it2_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it2_ < it.it2_;
+ }
+
+ private:
+ subiterator2_type it2_;
+
+ friend class const_iterator2;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ iterator2 begin2 () {
+ return find2 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 end2 () {
+ return find2 (0, 0, size2 ());
+ }
+
+ // Reverse iterators
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rbegin1 () const {
+ return const_reverse_iterator1 (end1 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rend1 () const {
+ return const_reverse_iterator1 (begin1 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ reverse_iterator1 rbegin1 () {
+ return reverse_iterator1 (end1 ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator1 rend1 () {
+ return reverse_iterator1 (begin1 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rbegin2 () const {
+ return const_reverse_iterator2 (end2 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rend2 () const {
+ return const_reverse_iterator2 (begin2 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ reverse_iterator2 rbegin2 () {
+ return reverse_iterator2 (end2 ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator2 rend2 () {
+ return reverse_iterator2 (begin2 ());
+ }
+
+ private:
+ matrix_closure_type data_;
+ static value_type conj_;
+ };
+
+ template<class M, class TRI>
+ typename hermitian_adaptor<M, TRI>::value_type hermitian_adaptor<M, TRI>::conj_;
+
+ // Specialization for temporary_traits
+ template <class M, class TRI>
+ struct vector_temporary_traits< hermitian_adaptor<M, TRI> >
+ : vector_temporary_traits< M > {} ;
+ template <class M, class TRI>
+ struct vector_temporary_traits< const hermitian_adaptor<M, TRI> >
+ : vector_temporary_traits< M > {} ;
+
+ template <class M, class TRI>
+ struct matrix_temporary_traits< hermitian_adaptor<M, TRI> >
+ : matrix_temporary_traits< M > {} ;
+ template <class M, class TRI>
+ struct matrix_temporary_traits< const hermitian_adaptor<M, TRI> >
+ : matrix_temporary_traits< M > {} ;
+
+}}}
+
+#endif
diff --git a/boost/boost/numeric/ublas/io.hpp b/boost/boost/numeric/ublas/io.hpp
new file mode 100644
index 00000000000..ef02d396173
--- /dev/null
+++ b/boost/boost/numeric/ublas/io.hpp
@@ -0,0 +1,252 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without fee,
+// provided that the above copyright notice appear in all copies and
+// that both that copyright notice and this permission notice appear
+// in supporting documentation. The authors make no representations
+// about the suitability of this software for any purpose.
+// It is provided "as is" without express or implied warranty.
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#ifndef _BOOST_UBLAS_IO_
+#define _BOOST_UBLAS_IO_
+
+// Only forward definition required to define stream operations
+#include <iosfwd>
+#include <boost/numeric/ublas/matrix_expression.hpp>
+
+
+namespace boost { namespace numeric { namespace ublas {
+
+ template<class E, class T, class VE>
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ std::basic_ostream<E, T> &operator << (std::basic_ostream<E, T> &os,
+ const vector_expression<VE> &v) {
+ typedef typename VE::size_type size_type;
+ size_type size = v ().size ();
+ std::basic_ostringstream<E, T, std::allocator<E> > s;
+ s.flags (os.flags ());
+ s.imbue (os.getloc ());
+ s.precision (os.precision ());
+ s << '[' << size << "](";
+ if (size > 0)
+ s << v () (0);
+ for (size_type i = 1; i < size; ++ i)
+ s << ',' << v () (i);
+ s << ')';
+ return os << s.str ().c_str ();
+ }
+
+ template<class E, class T, class VT, class VA>
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ std::basic_istream<E, T> &operator >> (std::basic_istream<E, T> &is,
+ vector<VT, VA> &v) {
+ typedef typename vector<VT, VA>::size_type size_type;
+ E ch;
+ size_type size;
+ if (is >> ch && ch != '[') {
+ is.putback (ch);
+ is.setstate (std::ios_base::failbit);
+ } else if (is >> size >> ch && ch != ']') {
+ is.putback (ch);
+ is.setstate (std::ios_base::failbit);
+ } else if (! is.fail ()) {
+ vector<VT, VA> s (size);
+ if (is >> ch && ch != '(') {
+ is.putback (ch);
+ is.setstate (std::ios_base::failbit);
+ } else if (! is.fail ()) {
+ for (size_type i = 0; i < size; i ++) {
+ if (is >> s (i) >> ch && ch != ',') {
+ is.putback (ch);
+ if (i < size - 1)
+ is.setstate (std::ios_base::failbit);
+ break;
+ }
+ }
+ if (is >> ch && ch != ')') {
+ is.putback (ch);
+ is.setstate (std::ios_base::failbit);
+ }
+ }
+ if (! is.fail ())
+ v.swap (s);
+ }
+ return is;
+ }
+
+ template<class E, class T, class ME>
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ std::basic_ostream<E, T> &operator << (std::basic_ostream<E, T> &os,
+ const matrix_expression<ME> &m) {
+ typedef typename ME::size_type size_type;
+ size_type size1 = m ().size1 ();
+ size_type size2 = m ().size2 ();
+ std::basic_ostringstream<E, T, std::allocator<E> > s;
+ s.flags (os.flags ());
+ s.imbue (os.getloc ());
+ s.precision (os.precision ());
+ s << '[' << size1 << ',' << size2 << "](";
+ if (size1 > 0) {
+ s << '(' ;
+ if (size2 > 0)
+ s << m () (0, 0);
+ for (size_type j = 1; j < size2; ++ j)
+ s << ',' << m () (0, j);
+ s << ')';
+ }
+ for (size_type i = 1; i < size1; ++ i) {
+ s << ",(" ;
+ if (size2 > 0)
+ s << m () (i, 0);
+ for (size_type j = 1; j < size2; ++ j)
+ s << ',' << m () (i, j);
+ s << ')';
+ }
+ s << ')';
+ return os << s.str ().c_str ();
+ }
+
+ template<class E, class T, class MT, class MF, class MA>
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ std::basic_istream<E, T> &operator >> (std::basic_istream<E, T> &is,
+ matrix<MT, MF, MA> &m) {
+ typedef typename matrix<MT, MF, MA>::size_type size_type;
+ E ch;
+ size_type size1, size2;
+ if (is >> ch && ch != '[') {
+ is.putback (ch);
+ is.setstate (std::ios_base::failbit);
+ } else if (is >> size1 >> ch && ch != ',') {
+ is.putback (ch);
+ is.setstate (std::ios_base::failbit);
+ } else if (is >> size2 >> ch && ch != ']') {
+ is.putback (ch);
+ is.setstate (std::ios_base::failbit);
+ } else if (! is.fail ()) {
+ matrix<MT, MF, MA> s (size1, size2);
+ if (is >> ch && ch != '(') {
+ is.putback (ch);
+ is.setstate (std::ios_base::failbit);
+ } else if (! is.fail ()) {
+ for (size_type i = 0; i < size1; i ++) {
+ if (is >> ch && ch != '(') {
+ is.putback (ch);
+ is.setstate (std::ios_base::failbit);
+ break;
+ }
+ for (size_type j = 0; j < size2; j ++) {
+ if (is >> s (i, j) >> ch && ch != ',') {
+ is.putback (ch);
+ if (j < size2 - 1) {
+ is.setstate (std::ios_base::failbit);
+ break;
+ }
+ }
+ }
+ if (is >> ch && ch != ')') {
+ is.putback (ch);
+ is.setstate (std::ios_base::failbit);
+ break;
+ }
+ if (is >> ch && ch != ',') {
+ is.putback (ch);
+ if (i < size1 - 1) {
+ is.setstate (std::ios_base::failbit);
+ break;
+ }
+ }
+ }
+ if (is >> ch && ch != ')') {
+ is.putback (ch);
+ is.setstate (std::ios_base::failbit);
+ }
+ }
+ if (! is.fail ())
+ m.swap (s);
+ }
+ return is;
+ }
+
+ // Special input operator for symmetrix_matrix
+ template<class E, class T, class MT, class MF1, class MF2, class MA>
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ std::basic_istream<E, T> &operator >> (std::basic_istream<E, T> &is,
+ symmetric_matrix<MT, MF1, MF2, MA> &m) {
+ typedef typename symmetric_matrix<MT, MF1, MF2, MA>::size_type size_type;
+ E ch;
+ size_type size1, size2;
+ MT value;
+ if (is >> ch && ch != '[') {
+ is.putback (ch);
+ is.setstate (std::ios_base::failbit);
+ } else if (is >> size1 >> ch && ch != ',') {
+ is.putback (ch);
+ is.setstate (std::ios_base::failbit);
+ } else if (is >> size2 >> ch && (size2 != size1 || ch != ']')) { // symmetric matrix must be square
+ is.putback (ch);
+ is.setstate (std::ios_base::failbit);
+ } else if (! is.fail ()) {
+ symmetric_matrix<MT, MF1, MF2, MA> s (size1, size2);
+ if (is >> ch && ch != '(') {
+ is.putback (ch);
+ is.setstate (std::ios_base::failbit);
+ } else if (! is.fail ()) {
+ for (size_type i = 0; i < size1; i ++) {
+ if (is >> ch && ch != '(') {
+ is.putback (ch);
+ is.setstate (std::ios_base::failbit);
+ break;
+ }
+ for (size_type j = 0; j < size2; j ++) {
+ if (is >> value >> ch && ch != ',') {
+ is.putback (ch);
+ if (j < size2 - 1) {
+ is.setstate (std::ios_base::failbit);
+ break;
+ }
+ }
+ if (i <= j) {
+ // this is the first time we read this element - set the value
+ s(i,j) = value;
+ }
+ else if ( s(i,j) != value ) {
+ // matrix is not symmetric
+ is.setstate (std::ios_base::failbit);
+ break;
+ }
+ }
+ if (is >> ch && ch != ')') {
+ is.putback (ch);
+ is.setstate (std::ios_base::failbit);
+ break;
+ }
+ if (is >> ch && ch != ',') {
+ is.putback (ch);
+ if (i < size1 - 1) {
+ is.setstate (std::ios_base::failbit);
+ break;
+ }
+ }
+ }
+ if (is >> ch && ch != ')') {
+ is.putback (ch);
+ is.setstate (std::ios_base::failbit);
+ }
+ }
+ if (! is.fail ())
+ m.swap (s);
+ }
+ return is;
+ }
+
+
+}}}
+
+#endif
diff --git a/boost/boost/numeric/ublas/lu.hpp b/boost/boost/numeric/ublas/lu.hpp
new file mode 100644
index 00000000000..73b5fed2b52
--- /dev/null
+++ b/boost/boost/numeric/ublas/lu.hpp
@@ -0,0 +1,342 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without fee,
+// provided that the above copyright notice appear in all copies and
+// that both that copyright notice and this permission notice appear
+// in supporting documentation. The authors make no representations
+// about the suitability of this software for any purpose.
+// It is provided "as is" without express or implied warranty.
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#ifndef _BOOST_UBLAS_LU_
+#define _BOOST_UBLAS_LU_
+
+#include <boost/numeric/ublas/operation.hpp>
+#include <boost/numeric/ublas/vector_proxy.hpp>
+#include <boost/numeric/ublas/matrix_proxy.hpp>
+#include <boost/numeric/ublas/vector.hpp>
+#include <boost/numeric/ublas/triangular.hpp>
+
+// LU factorizations in the spirit of LAPACK and Golub & van Loan
+
+namespace boost { namespace numeric { namespace ublas {
+
+ template<class T = std::size_t, class A = unbounded_array<T> >
+ class permutation_matrix:
+ public vector<T, A> {
+ public:
+ typedef vector<T, A> vector_type;
+ typedef typename vector_type::size_type size_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ permutation_matrix (size_type size):
+ vector<T, A> (size) {
+ for (size_type i = 0; i < size; ++ i)
+ (*this) (i) = i;
+ }
+ BOOST_UBLAS_INLINE
+ ~permutation_matrix () {}
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ permutation_matrix &operator = (const permutation_matrix &m) {
+ vector_type::operator = (m);
+ return *this;
+ }
+ };
+
+ template<class PM, class MV>
+ BOOST_UBLAS_INLINE
+ void swap_rows (const PM &pm, MV &mv, vector_tag) {
+ typedef typename PM::size_type size_type;
+ typedef typename MV::value_type value_type;
+
+ size_type size = pm.size ();
+ for (size_type i = 0; i < size; ++ i) {
+ if (i != pm (i))
+ std::swap (mv (i), mv (pm (i)));
+ }
+ }
+ template<class PM, class MV>
+ BOOST_UBLAS_INLINE
+ void swap_rows (const PM &pm, MV &mv, matrix_tag) {
+ typedef typename PM::size_type size_type;
+ typedef typename MV::value_type value_type;
+
+ size_type size = pm.size ();
+ for (size_type i = 0; i < size; ++ i) {
+ if (i != pm (i))
+ row (mv, i).swap (row (mv, pm (i)));
+ }
+ }
+ // Dispatcher
+ template<class PM, class MV>
+ BOOST_UBLAS_INLINE
+ void swap_rows (const PM &pm, MV &mv) {
+ swap_rows (pm, mv, typename MV::type_category ());
+ }
+
+ // LU factorization without pivoting
+ template<class M>
+ typename M::size_type lu_factorize (M &m) {
+ typedef M matrix_type;
+ typedef typename M::size_type size_type;
+ typedef typename M::value_type value_type;
+
+#if BOOST_UBLAS_TYPE_CHECK
+ matrix_type cm (m);
+#endif
+ int singular = 0;
+ size_type size1 = m.size1 ();
+ size_type size2 = m.size2 ();
+ size_type size = (std::min) (size1, size2);
+ for (size_type i = 0; i < size; ++ i) {
+ matrix_column<M> mci (column (m, i));
+ matrix_row<M> mri (row (m, i));
+ if (m (i, i) != value_type/*zero*/()) {
+ project (mci, range (i + 1, size1)) *= value_type (1) / m (i, i);
+ } else if (singular == 0) {
+ singular = i + 1;
+ }
+ project (m, range (i + 1, size1), range (i + 1, size2)).minus_assign (
+ outer_prod (project (mci, range (i + 1, size1)),
+ project (mri, range (i + 1, size2))));
+ }
+#if BOOST_UBLAS_TYPE_CHECK
+ BOOST_UBLAS_CHECK (singular != 0 ||
+ detail::expression_type_check (prod (triangular_adaptor<matrix_type, unit_lower> (m),
+ triangular_adaptor<matrix_type, upper> (m)),
+ cm), internal_logic ());
+#endif
+ return singular;
+ }
+
+ // LU factorization with partial pivoting
+ template<class M, class PM>
+ typename M::size_type lu_factorize (M &m, PM &pm) {
+ typedef M matrix_type;
+ typedef typename M::size_type size_type;
+ typedef typename M::value_type value_type;
+
+#if BOOST_UBLAS_TYPE_CHECK
+ matrix_type cm (m);
+#endif
+ int singular = 0;
+ size_type size1 = m.size1 ();
+ size_type size2 = m.size2 ();
+ size_type size = (std::min) (size1, size2);
+ for (size_type i = 0; i < size; ++ i) {
+ matrix_column<M> mci (column (m, i));
+ matrix_row<M> mri (row (m, i));
+ size_type i_norm_inf = i + index_norm_inf (project (mci, range (i, size1)));
+ BOOST_UBLAS_CHECK (i_norm_inf < size1, external_logic ());
+ if (m (i_norm_inf, i) != value_type/*zero*/()) {
+ if (i_norm_inf != i) {
+ pm (i) = i_norm_inf;
+ row (m, i_norm_inf).swap (mri);
+ } else {
+ BOOST_UBLAS_CHECK (pm (i) == i_norm_inf, external_logic ());
+ }
+ project (mci, range (i + 1, size1)) *= value_type (1) / m (i, i);
+ } else if (singular == 0) {
+ singular = i + 1;
+ }
+ project (m, range (i + 1, size1), range (i + 1, size2)).minus_assign (
+ outer_prod (project (mci, range (i + 1, size1)),
+ project (mri, range (i + 1, size2))));
+ }
+#if BOOST_UBLAS_TYPE_CHECK
+ swap_rows (pm, cm);
+ BOOST_UBLAS_CHECK (singular != 0 ||
+ detail::expression_type_check (prod (triangular_adaptor<matrix_type, unit_lower> (m),
+ triangular_adaptor<matrix_type, upper> (m)), cm), internal_logic ());
+#endif
+ return singular;
+ }
+
+ template<class M, class PM>
+ typename M::size_type axpy_lu_factorize (M &m, PM &pm) {
+ typedef M matrix_type;
+ typedef typename M::size_type size_type;
+ typedef typename M::value_type value_type;
+ typedef vector<value_type> vector_type;
+
+#if BOOST_UBLAS_TYPE_CHECK
+ matrix_type cm (m);
+#endif
+ int singular = 0;
+ size_type size1 = m.size1 ();
+ size_type size2 = m.size2 ();
+ size_type size = (std::min) (size1, size2);
+#ifndef BOOST_UBLAS_LU_WITH_INPLACE_SOLVE
+ matrix_type mr (m);
+ mr.assign (zero_matrix<value_type> (size1, size2));
+ vector_type v (size1);
+ for (size_type i = 0; i < size; ++ i) {
+ matrix_range<matrix_type> lrr (project (mr, range (0, i), range (0, i)));
+ vector_range<matrix_column<matrix_type> > urr (project (column (mr, i), range (0, i)));
+ urr.assign (solve (lrr, project (column (m, i), range (0, i)), unit_lower_tag ()));
+ project (v, range (i, size1)).assign (
+ project (column (m, i), range (i, size1)) -
+ axpy_prod<vector_type> (project (mr, range (i, size1), range (0, i)), urr));
+ size_type i_norm_inf = i + index_norm_inf (project (v, range (i, size1)));
+ BOOST_UBLAS_CHECK (i_norm_inf < size1, external_logic ());
+ if (v (i_norm_inf) != value_type/*zero*/()) {
+ if (i_norm_inf != i) {
+ pm (i) = i_norm_inf;
+ std::swap (v (i_norm_inf), v (i));
+ project (row (m, i_norm_inf), range (i + 1, size2)).swap (project (row (m, i), range (i + 1, size2)));
+ } else {
+ BOOST_UBLAS_CHECK (pm (i) == i_norm_inf, external_logic ());
+ }
+ project (column (mr, i), range (i + 1, size1)).assign (
+ project (v, range (i + 1, size1)) / v (i));
+ if (i_norm_inf != i) {
+ project (row (mr, i_norm_inf), range (0, i)).swap (project (row (mr, i), range (0, i)));
+ }
+ } else if (singular == 0) {
+ singular = i + 1;
+ }
+ mr (i, i) = v (i);
+ }
+ m.assign (mr);
+#else
+ matrix_type lr (m);
+ matrix_type ur (m);
+ lr.assign (identity_matrix<value_type> (size1, size2));
+ ur.assign (zero_matrix<value_type> (size1, size2));
+ vector_type v (size1);
+ for (size_type i = 0; i < size; ++ i) {
+ matrix_range<matrix_type> lrr (project (lr, range (0, i), range (0, i)));
+ vector_range<matrix_column<matrix_type> > urr (project (column (ur, i), range (0, i)));
+ urr.assign (project (column (m, i), range (0, i)));
+ inplace_solve (lrr, urr, unit_lower_tag ());
+ project (v, range (i, size1)).assign (
+ project (column (m, i), range (i, size1)) -
+ axpy_prod<vector_type> (project (lr, range (i, size1), range (0, i)), urr));
+ size_type i_norm_inf = i + index_norm_inf (project (v, range (i, size1)));
+ BOOST_UBLAS_CHECK (i_norm_inf < size1, external_logic ());
+ if (v (i_norm_inf) != value_type/*zero*/()) {
+ if (i_norm_inf != i) {
+ pm (i) = i_norm_inf;
+ std::swap (v (i_norm_inf), v (i));
+ project (row (m, i_norm_inf), range (i + 1, size2)).swap (project (row (m, i), range (i + 1, size2)));
+ } else {
+ BOOST_UBLAS_CHECK (pm (i) == i_norm_inf, external_logic ());
+ }
+ project (column (lr, i), range (i + 1, size1)).assign (
+ project (v, range (i + 1, size1)) / v (i));
+ if (i_norm_inf != i) {
+ project (row (lr, i_norm_inf), range (0, i)).swap (project (row (lr, i), range (0, i)));
+ }
+ } else if (singular == 0) {
+ singular = i + 1;
+ }
+ ur (i, i) = v (i);
+ }
+ m.assign (triangular_adaptor<matrix_type, strict_lower> (lr) +
+ triangular_adaptor<matrix_type, upper> (ur));
+#endif
+#if BOOST_UBLAS_TYPE_CHECK
+ swap_rows (pm, cm);
+ BOOST_UBLAS_CHECK (singular != 0 ||
+ detail::expression_type_check (prod (triangular_adaptor<matrix_type, unit_lower> (m),
+ triangular_adaptor<matrix_type, upper> (m)), cm), internal_logic ());
+#endif
+ return singular;
+ }
+
+ // LU substitution
+ template<class M, class E>
+ void lu_substitute (const M &m, vector_expression<E> &e) {
+ typedef const M const_matrix_type;
+ typedef vector<typename E::value_type> vector_type;
+
+#if BOOST_UBLAS_TYPE_CHECK
+ vector_type cv1 (e);
+#endif
+ inplace_solve (m, e, unit_lower_tag ());
+#if BOOST_UBLAS_TYPE_CHECK
+ BOOST_UBLAS_CHECK (detail::expression_type_check (prod (triangular_adaptor<const_matrix_type, unit_lower> (m), e), cv1), internal_logic ());
+ vector_type cv2 (e);
+#endif
+ inplace_solve (m, e, upper_tag ());
+#if BOOST_UBLAS_TYPE_CHECK
+ BOOST_UBLAS_CHECK (detail::expression_type_check (prod (triangular_adaptor<const_matrix_type, upper> (m), e), cv2), internal_logic ());
+#endif
+ }
+ template<class M, class E>
+ void lu_substitute (const M &m, matrix_expression<E> &e) {
+ typedef const M const_matrix_type;
+ typedef matrix<typename E::value_type> matrix_type;
+
+#if BOOST_UBLAS_TYPE_CHECK
+ matrix_type cm1 (e);
+#endif
+ inplace_solve (m, e, unit_lower_tag ());
+#if BOOST_UBLAS_TYPE_CHECK
+ BOOST_UBLAS_CHECK (detail::expression_type_check (prod (triangular_adaptor<const_matrix_type, unit_lower> (m), e), cm1), internal_logic ());
+ matrix_type cm2 (e);
+#endif
+ inplace_solve (m, e, upper_tag ());
+#if BOOST_UBLAS_TYPE_CHECK
+ BOOST_UBLAS_CHECK (detail::expression_type_check (prod (triangular_adaptor<const_matrix_type, upper> (m), e), cm2), internal_logic ());
+#endif
+ }
+ template<class M, class PMT, class PMA, class MV>
+ void lu_substitute (const M &m, const permutation_matrix<PMT, PMA> &pm, MV &mv) {
+ swap_rows (pm, mv);
+ lu_substitute (m, mv);
+ }
+ template<class E, class M>
+ void lu_substitute (vector_expression<E> &e, const M &m) {
+ typedef const M const_matrix_type;
+ typedef vector<typename E::value_type> vector_type;
+
+#if BOOST_UBLAS_TYPE_CHECK
+ vector_type cv1 (e);
+#endif
+ inplace_solve (e, m, upper_tag ());
+#if BOOST_UBLAS_TYPE_CHECK
+ BOOST_UBLAS_CHECK (detail::expression_type_check (prod (e, triangular_adaptor<const_matrix_type, upper> (m)), cv1), internal_logic ());
+ vector_type cv2 (e);
+#endif
+ inplace_solve (e, m, unit_lower_tag ());
+#if BOOST_UBLAS_TYPE_CHECK
+ BOOST_UBLAS_CHECK (detail::expression_type_check (prod (e, triangular_adaptor<const_matrix_type, unit_lower> (m)), cv2), internal_logic ());
+#endif
+ }
+ template<class E, class M>
+ void lu_substitute (matrix_expression<E> &e, const M &m) {
+ typedef const M const_matrix_type;
+ typedef matrix<typename E::value_type> matrix_type;
+
+#if BOOST_UBLAS_TYPE_CHECK
+ matrix_type cm1 (e);
+#endif
+ inplace_solve (e, m, upper_tag ());
+#if BOOST_UBLAS_TYPE_CHECK
+ BOOST_UBLAS_CHECK (detail::expression_type_check (prod (e, triangular_adaptor<const_matrix_type, upper> (m)), cm1), internal_logic ());
+ matrix_type cm2 (e);
+#endif
+ inplace_solve (e, m, unit_lower_tag ());
+#if BOOST_UBLAS_TYPE_CHECK
+ BOOST_UBLAS_CHECK (detail::expression_type_check (prod (e, triangular_adaptor<const_matrix_type, unit_lower> (m)), cm2), internal_logic ());
+#endif
+ }
+ template<class MV, class M, class PMT, class PMA>
+ void lu_substitute (MV &mv, const M &m, const permutation_matrix<PMT, PMA> &pm) {
+ swap_rows (pm, mv);
+ lu_substitute (mv, m);
+ }
+
+}}}
+
+#endif
diff --git a/boost/boost/numeric/ublas/matrix.hpp b/boost/boost/numeric/ublas/matrix.hpp
new file mode 100644
index 00000000000..68c57e0d299
--- /dev/null
+++ b/boost/boost/numeric/ublas/matrix.hpp
@@ -0,0 +1,4045 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without fee,
+// provided that the above copyright notice appear in all copies and
+// that both that copyright notice and this permission notice appear
+// in supporting documentation. The authors make no representations
+// about the suitability of this software for any purpose.
+// It is provided "as is" without express or implied warranty.
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#ifndef _BOOST_UBLAS_MATRIX_
+#define _BOOST_UBLAS_MATRIX_
+
+#include <boost/numeric/ublas/vector.hpp>
+#include <boost/numeric/ublas/matrix_expression.hpp>
+#include <boost/numeric/ublas/detail/matrix_assign.hpp>
+
+// Iterators based on ideas of Jeremy Siek
+
+namespace boost { namespace numeric { namespace ublas {
+
+ namespace detail {
+ using namespace boost::numeric::ublas;
+
+ // Matrix resizing algorithm
+ template <class L, class M>
+ BOOST_UBLAS_INLINE
+ void matrix_resize_preserve (M& m, M& temporary) {
+ typedef L layout_type;
+ typedef typename M::size_type size_type;
+ const size_type msize1 (m.size1 ()); // original size
+ const size_type msize2 (m.size2 ());
+ const size_type size1 (temporary.size1 ()); // new size is specified by temporary
+ const size_type size2 (temporary.size2 ());
+ // Common elements to preserve
+ const size_type size1_min = (std::min) (size1, msize1);
+ const size_type size2_min = (std::min) (size2, msize2);
+ // Order loop for i-major and j-minor sizes
+ const size_type i_size = layout_type::size1 (size1_min, size2_min);
+ const size_type j_size = layout_type::size2 (size1_min, size2_min);
+ for (size_type i = 0; i != i_size; ++i) { // indexing copy over major
+ for (size_type j = 0; j != j_size; ++j) {
+ const size_type element1 = layout_type::element1(i,i_size, j,j_size);
+ const size_type element2 = layout_type::element2(i,i_size, j,j_size);
+ temporary.data () [layout_type::element (element1, size1, element2, size2)] =
+ m.data() [layout_type::element (element1, msize1, element2, msize2)];
+ }
+ }
+ m.assign_temporary (temporary);
+ }
+ }
+
+
+ // Array based matrix class
+ template<class T, class L, class A>
+ class matrix:
+ public matrix_container<matrix<T, L, A> > {
+
+ typedef T *pointer;
+ typedef L layout_type;
+ typedef matrix<T, L, A> self_type;
+ public:
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using matrix_container<self_type>::operator ();
+#endif
+ typedef typename A::size_type size_type;
+ typedef typename A::difference_type difference_type;
+ typedef T value_type;
+ typedef const T &const_reference;
+ typedef T &reference;
+ typedef A array_type;
+ typedef const matrix_reference<const self_type> const_closure_type;
+ typedef matrix_reference<self_type> closure_type;
+ typedef vector<T, A> vector_temporary_type;
+ typedef self_type matrix_temporary_type;
+ typedef dense_tag storage_category;
+ // This could be better for performance,
+ // typedef typename unknown_orientation_tag orientation_category;
+ // but others depend on the orientation information...
+ typedef typename L::orientation_category orientation_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ matrix ():
+ matrix_container<self_type> (),
+ size1_ (0), size2_ (0), data_ () {}
+ BOOST_UBLAS_INLINE
+ matrix (size_type size1, size_type size2):
+ matrix_container<self_type> (),
+ size1_ (size1), size2_ (size2), data_ (layout_type::storage_size (size1, size2)) {
+ }
+ BOOST_UBLAS_INLINE
+ matrix (size_type size1, size_type size2, const array_type &data):
+ matrix_container<self_type> (),
+ size1_ (size1), size2_ (size2), data_ (data) {}
+ BOOST_UBLAS_INLINE
+ matrix (const matrix &m):
+ matrix_container<self_type> (),
+ size1_ (m.size1_), size2_ (m.size2_), data_ (m.data_) {}
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix (const matrix_expression<AE> &ae):
+ matrix_container<self_type> (),
+ size1_ (ae ().size1 ()), size2_ (ae ().size2 ()), data_ (layout_type::storage_size (size1_, size2_)) {
+ matrix_assign<scalar_assign> (*this, ae);
+ }
+
+ // Accessors
+ BOOST_UBLAS_INLINE
+ size_type size1 () const {
+ return size1_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type size2 () const {
+ return size2_;
+ }
+
+ // Storage accessors
+ BOOST_UBLAS_INLINE
+ const array_type &data () const {
+ return data_;
+ }
+ BOOST_UBLAS_INLINE
+ array_type &data () {
+ return data_;
+ }
+
+ // Resizing
+ BOOST_UBLAS_INLINE
+ void resize (size_type size1, size_type size2, bool preserve = true) {
+ if (preserve) {
+ self_type temporary (size1, size2);
+ detail::matrix_resize_preserve<layout_type> (*this, temporary);
+ }
+ else {
+ data ().resize (layout_type::storage_size (size1, size2));
+ size1_ = size1;
+ size2_ = size2;
+ }
+ }
+
+ // Element access
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type i, size_type j) const {
+ return data () [layout_type::element (i, size1_, j, size2_)];
+ }
+ BOOST_UBLAS_INLINE
+ reference at_element (size_type i, size_type j) {
+ return data () [layout_type::element (i, size1_, j, size2_)];
+ }
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type i, size_type j) {
+ return at_element (i, j);
+ }
+
+ // Element assignment
+ BOOST_UBLAS_INLINE
+ reference insert_element (size_type i, size_type j, const_reference t) {
+ return (at_element (i, j) = t);
+ }
+ void erase_element (size_type i, size_type j) {
+ at_element (i, j) = value_type/*zero*/();
+ }
+
+ // Zeroing
+ BOOST_UBLAS_INLINE
+ void clear () {
+ std::fill (data ().begin (), data ().end (), value_type/*zero*/());
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ matrix &operator = (const matrix &m) {
+ size1_ = m.size1_;
+ size2_ = m.size2_;
+ data () = m.data ();
+ return *this;
+ }
+ template<class C> // Container assignment without temporary
+ BOOST_UBLAS_INLINE
+ matrix &operator = (const matrix_container<C> &m) {
+ resize (m ().size1 (), m ().size2 (), false);
+ assign (m);
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ matrix &assign_temporary (matrix &m) {
+ swap (m);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix &operator = (const matrix_expression<AE> &ae) {
+ self_type temporary (ae);
+ return assign_temporary (temporary);
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix &assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_assign> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix& operator += (const matrix_expression<AE> &ae) {
+ self_type temporary (*this + ae);
+ return assign_temporary (temporary);
+ }
+ template<class C> // Container assignment without temporary
+ BOOST_UBLAS_INLINE
+ matrix &operator += (const matrix_container<C> &m) {
+ plus_assign (m);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix &plus_assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_plus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix& operator -= (const matrix_expression<AE> &ae) {
+ self_type temporary (*this - ae);
+ return assign_temporary (temporary);
+ }
+ template<class C> // Container assignment without temporary
+ BOOST_UBLAS_INLINE
+ matrix &operator -= (const matrix_container<C> &m) {
+ minus_assign (m);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix &minus_assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_minus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ matrix& operator *= (const AT &at) {
+ matrix_assign_scalar<scalar_multiplies_assign> (*this, at);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ matrix& operator /= (const AT &at) {
+ matrix_assign_scalar<scalar_divides_assign> (*this, at);
+ return *this;
+ }
+
+ // Swapping
+ BOOST_UBLAS_INLINE
+ void swap (matrix &m) {
+ if (this != &m) {
+ std::swap (size1_, m.size1_);
+ std::swap (size2_, m.size2_);
+ data ().swap (m.data ());
+ }
+ }
+ BOOST_UBLAS_INLINE
+ friend void swap (matrix &m1, matrix &m2) {
+ m1.swap (m2);
+ }
+
+ // Iterator types
+ private:
+ // Use the storage array iterator
+ typedef typename A::const_iterator const_subiterator_type;
+ typedef typename A::iterator subiterator_type;
+
+ public:
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ typedef indexed_iterator1<self_type, dense_random_access_iterator_tag> iterator1;
+ typedef indexed_iterator2<self_type, dense_random_access_iterator_tag> iterator2;
+ typedef indexed_const_iterator1<self_type, dense_random_access_iterator_tag> const_iterator1;
+ typedef indexed_const_iterator2<self_type, dense_random_access_iterator_tag> const_iterator2;
+#else
+ class const_iterator1;
+ class iterator1;
+ class const_iterator2;
+ class iterator2;
+#endif
+ typedef reverse_iterator_base1<const_iterator1> const_reverse_iterator1;
+ typedef reverse_iterator_base1<iterator1> reverse_iterator1;
+ typedef reverse_iterator_base2<const_iterator2> const_reverse_iterator2;
+ typedef reverse_iterator_base2<iterator2> reverse_iterator2;
+
+ // Element lookup
+ BOOST_UBLAS_INLINE
+ const_iterator1 find1 (int /* rank */, size_type i, size_type j) const {
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ return const_iterator1 (*this, i, j);
+#else
+ return const_iterator1 (*this, data ().begin () + layout_type::address (i, size1_, j, size2_));
+#endif
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 find1 (int /* rank */, size_type i, size_type j) {
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ return iterator1 (*this, i, j);
+#else
+ return iterator1 (*this, data ().begin () + layout_type::address (i, size1_, j, size2_));
+#endif
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 find2 (int /* rank */, size_type i, size_type j) const {
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ return const_iterator2 (*this, i, j);
+#else
+ return const_iterator2 (*this, data ().begin () + layout_type::address (i, size1_, j, size2_));
+#endif
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 find2 (int /* rank */, size_type i, size_type j) {
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ return iterator2 (*this, i, j);
+#else
+ return iterator2 (*this, data ().begin () + layout_type::address (i, size1_, j, size2_));
+#endif
+ }
+
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator1:
+ public container_const_reference<matrix>,
+ public random_access_iterator_base<dense_random_access_iterator_tag,
+ const_iterator1, value_type> {
+ public:
+ typedef typename matrix::value_type value_type;
+ typedef typename matrix::difference_type difference_type;
+ typedef typename matrix::const_reference reference;
+ typedef const typename matrix::pointer pointer;
+
+ typedef const_iterator2 dual_iterator_type;
+ typedef const_reverse_iterator2 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator1 ():
+ container_const_reference<self_type> (), it_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator1 (const self_type &m, const const_subiterator_type &it):
+ container_const_reference<self_type> (m), it_ (it) {}
+ BOOST_UBLAS_INLINE
+ const_iterator1 (const iterator1 &it):
+ container_const_reference<self_type> (it ()), it_ (it.it_) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator ++ () {
+ layout_type::increment1 (it_, (*this) ().size1 (), (*this) ().size2 ());
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator -- () {
+ layout_type::decrement1 (it_, (*this) ().size1 (), (*this) ().size2 ());
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator += (difference_type n) {
+ it_ += n * layout_type::one1 ((*this) ().size1 (), (*this) ().size2 ());
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator -= (difference_type n) {
+ it_ -= n * layout_type::one1 ((*this) ().size1 (), (*this) ().size2 ());
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return layout_type::distance1 (it_ - it.it_, (*this) ().size1 (), (*this) ().size2 ());
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ BOOST_UBLAS_CHECK (index1 () < (*this) ().size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (index2 () < (*this) ().size2 (), bad_index ());
+ return *it_;
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 begin () const {
+ const self_type &m = (*this) ();
+ return m.find2 (1, index1 (), 0);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 end () const {
+ const self_type &m = (*this) ();
+ return m.find2 (1, index1 (), m.size2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rbegin () const {
+ return const_reverse_iterator2 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rend () const {
+ return const_reverse_iterator2 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ const self_type &m = (*this) ();
+ return layout_type::index1 (it_ - m.begin1 ().it_, m.size1 (), m.size2 ());
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ const self_type &m = (*this) ();
+ return layout_type::index2 (it_ - m.begin1 ().it_, m.size1 (), m.size2 ());
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator = (const const_iterator1 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it_ == it.it_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it_ < it.it_;
+ }
+
+ private:
+ const_subiterator_type it_;
+
+ friend class iterator1;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator1 begin1 () const {
+ return find1 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 end1 () const {
+ return find1 (0, size1_, 0);
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class iterator1:
+ public container_reference<matrix>,
+ public random_access_iterator_base<dense_random_access_iterator_tag,
+ iterator1, value_type> {
+ public:
+ typedef typename matrix::value_type value_type;
+ typedef typename matrix::difference_type difference_type;
+ typedef typename matrix::reference reference;
+ typedef typename matrix::pointer pointer;
+
+ typedef iterator2 dual_iterator_type;
+ typedef reverse_iterator2 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ iterator1 ():
+ container_reference<self_type> (), it_ () {}
+ BOOST_UBLAS_INLINE
+ iterator1 (self_type &m, const subiterator_type &it):
+ container_reference<self_type> (m), it_ (it) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ iterator1 &operator ++ () {
+ layout_type::increment1 (it_, (*this) ().size1 (), (*this) ().size2 ());
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 &operator -- () {
+ layout_type::decrement1 (it_, (*this) ().size1 (), (*this) ().size2 ());
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 &operator += (difference_type n) {
+ it_ += n * layout_type::one1 ((*this) ().size1 (), (*this) ().size2 ());
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 &operator -= (difference_type n) {
+ it_ -= n * layout_type::one1 ((*this) ().size1 (), (*this) ().size2 ());
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return layout_type::distance1 (it_ - it.it_, (*this) ().size1 (), (*this) ().size2 ());
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ BOOST_UBLAS_CHECK (index1 () < (*this) ().size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (index2 () < (*this) ().size2 (), bad_index ());
+ return *it_;
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator2 begin () const {
+ self_type &m = (*this) ();
+ return m.find2 (1, index1 (), 0);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator2 end () const {
+ self_type &m = (*this) ();
+ return m.find2 (1, index1 (), m.size2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator2 rbegin () const {
+ return reverse_iterator2 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator2 rend () const {
+ return reverse_iterator2 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ self_type &m = (*this) ();
+ return layout_type::index1 (it_ - m.begin1 ().it_, m.size1 (), m.size2 ());
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ self_type &m = (*this) ();
+ return layout_type::index2 (it_ - m.begin1 ().it_, m.size1 (), m.size2 ());
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ iterator1 &operator = (const iterator1 &it) {
+ container_reference<self_type>::assign (&it ());
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it_ == it.it_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it_ < it.it_;
+ }
+
+ private:
+ subiterator_type it_;
+
+ friend class const_iterator1;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ iterator1 begin1 () {
+ return find1 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 end1 () {
+ return find1 (0, size1_, 0);
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator2:
+ public container_const_reference<matrix>,
+ public random_access_iterator_base<dense_random_access_iterator_tag,
+ const_iterator2, value_type> {
+ public:
+ typedef typename matrix::value_type value_type;
+ typedef typename matrix::difference_type difference_type;
+ typedef typename matrix::const_reference reference;
+ typedef const typename matrix::pointer pointer;
+
+ typedef const_iterator1 dual_iterator_type;
+ typedef const_reverse_iterator1 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator2 ():
+ container_const_reference<self_type> (), it_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator2 (const self_type &m, const const_subiterator_type &it):
+ container_const_reference<self_type> (m), it_ (it) {}
+ BOOST_UBLAS_INLINE
+ const_iterator2 (const iterator2 &it):
+ container_const_reference<self_type> (it ()), it_ (it.it_) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator ++ () {
+ layout_type::increment2 (it_, (*this) ().size1 (), (*this) ().size2 ());
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator -- () {
+ layout_type::decrement2 (it_, (*this) ().size1 (), (*this) ().size2 ());
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator += (difference_type n) {
+ it_ += n * layout_type::one2 ((*this) ().size1 (), (*this) ().size2 ());
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator -= (difference_type n) {
+ it_ -= n * layout_type::one2 ((*this) ().size1 (), (*this) ().size2 ());
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return layout_type::distance2 (it_ - it.it_, (*this) ().size1 (), (*this) ().size2 ());
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ BOOST_UBLAS_CHECK (index1 () < (*this) ().size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (index2 () < (*this) ().size2 (), bad_index ());
+ return *it_;
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 begin () const {
+ const self_type &m = (*this) ();
+ return m.find1 (1, 0, index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 end () const {
+ const self_type &m = (*this) ();
+ return m.find1 (1, m.size1 (), index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rbegin () const {
+ return const_reverse_iterator1 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rend () const {
+ return const_reverse_iterator1 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ const self_type &m = (*this) ();
+ return layout_type::index1 (it_ - m.begin2 ().it_, m.size1 (), m.size2 ());
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ const self_type &m = (*this) ();
+ return layout_type::index2 (it_ - m.begin2 ().it_, m.size1 (), m.size2 ());
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator = (const const_iterator2 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it_ == it.it_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it_ < it.it_;
+ }
+
+ private:
+ const_subiterator_type it_;
+
+ friend class iterator2;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator2 begin2 () const {
+ return find2 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 end2 () const {
+ return find2 (0, 0, size2_);
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class iterator2:
+ public container_reference<matrix>,
+ public random_access_iterator_base<dense_random_access_iterator_tag,
+ iterator2, value_type> {
+ public:
+ typedef typename matrix::value_type value_type;
+ typedef typename matrix::difference_type difference_type;
+ typedef typename matrix::reference reference;
+ typedef typename matrix::pointer pointer;
+
+ typedef iterator1 dual_iterator_type;
+ typedef reverse_iterator1 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ iterator2 ():
+ container_reference<self_type> (), it_ () {}
+ BOOST_UBLAS_INLINE
+ iterator2 (self_type &m, const subiterator_type &it):
+ container_reference<self_type> (m), it_ (it) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ iterator2 &operator ++ () {
+ layout_type::increment2 (it_, (*this) ().size1 (), (*this) ().size2 ());
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 &operator -- () {
+ layout_type::decrement2 (it_, (*this) ().size1 (), (*this) ().size2 ());
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 &operator += (difference_type n) {
+ it_ += n * layout_type::one2 ((*this) ().size1 (), (*this) ().size2 ());
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 &operator -= (difference_type n) {
+ it_ -= n * layout_type::one2 ((*this) ().size1 (), (*this) ().size2 ());
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return layout_type::distance2 (it_ - it.it_, (*this) ().size1 (), (*this) ().size2 ());
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ BOOST_UBLAS_CHECK (index1 () < (*this) ().size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (index2 () < (*this) ().size2 (), bad_index ());
+ return *it_;
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator1 begin () const {
+ self_type &m = (*this) ();
+ return m.find1 (1, 0, index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator1 end () const {
+ self_type &m = (*this) ();
+ return m.find1 (1, m.size1 (), index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator1 rbegin () const {
+ return reverse_iterator1 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator1 rend () const {
+ return reverse_iterator1 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ self_type &m = (*this) ();
+ return layout_type::index1 (it_ - m.begin2 ().it_, m.size1 (), m.size2 ());
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ self_type &m = (*this) ();
+ return layout_type::index2 (it_ - m.begin2 ().it_, m.size1 (), m.size2 ());
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ iterator2 &operator = (const iterator2 &it) {
+ container_reference<self_type>::assign (&it ());
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it_ == it.it_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it_ < it.it_;
+ }
+
+ private:
+ subiterator_type it_;
+
+ friend class const_iterator2;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ iterator2 begin2 () {
+ return find2 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 end2 () {
+ return find2 (0, 0, size2_);
+ }
+
+ // Reverse iterators
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rbegin1 () const {
+ return const_reverse_iterator1 (end1 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rend1 () const {
+ return const_reverse_iterator1 (begin1 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ reverse_iterator1 rbegin1 () {
+ return reverse_iterator1 (end1 ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator1 rend1 () {
+ return reverse_iterator1 (begin1 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rbegin2 () const {
+ return const_reverse_iterator2 (end2 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rend2 () const {
+ return const_reverse_iterator2 (begin2 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ reverse_iterator2 rbegin2 () {
+ return reverse_iterator2 (end2 ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator2 rend2 () {
+ return reverse_iterator2 (begin2 ());
+ }
+
+ private:
+ size_type size1_;
+ size_type size2_;
+ array_type data_;
+ };
+
+
+ // Bounded matrix class
+ template<class T, std::size_t M, std::size_t N, class L>
+ class bounded_matrix:
+ public matrix<T, L, bounded_array<T, M * N> > {
+
+ typedef matrix<T, L, bounded_array<T, M * N> > matrix_type;
+ public:
+ typedef typename matrix_type::size_type size_type;
+ static const size_type max_size1 = M;
+ static const size_type max_size2 = N;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ bounded_matrix ():
+ matrix_type (M, N) {}
+ BOOST_UBLAS_INLINE
+ bounded_matrix (size_type size1, size_type size2):
+ matrix_type (size1, size2) {}
+ BOOST_UBLAS_INLINE
+ bounded_matrix (const bounded_matrix &m):
+ matrix_type (m) {}
+ template<class A2> // Allow matrix<T, L, bounded_array<M,N> > construction
+ BOOST_UBLAS_INLINE
+ bounded_matrix (const matrix<T, L, A2> &m):
+ matrix_type (m) {}
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ bounded_matrix (const matrix_expression<AE> &ae):
+ matrix_type (ae) {}
+ BOOST_UBLAS_INLINE
+ ~bounded_matrix () {}
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ bounded_matrix &operator = (const bounded_matrix &m) {
+ matrix_type::operator = (m);
+ return *this;
+ }
+ template<class L2, class A2> // Generic matrix assignment
+ BOOST_UBLAS_INLINE
+ bounded_matrix &operator = (const matrix<T, L2, A2> &m) {
+ matrix_type::operator = (m);
+ return *this;
+ }
+ template<class C> // Container assignment without temporary
+ BOOST_UBLAS_INLINE
+ bounded_matrix &operator = (const matrix_container<C> &m) {
+ matrix_type::operator = (m);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ bounded_matrix &operator = (const matrix_expression<AE> &ae) {
+ matrix_type::operator = (ae);
+ return *this;
+ }
+ };
+
+
+ // Array based matrix class
+ template<class T, class L, class A>
+ class vector_of_vector:
+ public matrix_container<vector_of_vector<T, L, A> > {
+
+ typedef T *pointer;
+ typedef L layout_type;
+ typedef vector_of_vector<T, L, A> self_type;
+ public:
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using matrix_container<self_type>::operator ();
+#endif
+ typedef typename A::size_type size_type;
+ typedef typename A::difference_type difference_type;
+ typedef T value_type;
+ typedef const T &const_reference;
+ typedef T &reference;
+ typedef A array_type;
+ typedef const matrix_reference<const self_type> const_closure_type;
+ typedef matrix_reference<self_type> closure_type;
+ typedef vector<T, typename A::value_type> vector_temporary_type;
+ typedef self_type matrix_temporary_type;
+ typedef dense_tag storage_category;
+ // This could be better for performance,
+ // typedef typename unknown_orientation_tag orientation_category;
+ // but others depend on the orientation information...
+ typedef typename L::orientation_category orientation_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ vector_of_vector ():
+ matrix_container<self_type> (),
+ size1_ (0), size2_ (0), data_ (1) {}
+ BOOST_UBLAS_INLINE
+ vector_of_vector (size_type size1, size_type size2):
+ matrix_container<self_type> (),
+ size1_ (size1), size2_ (size2), data_ (1) {
+ resize (size1, size2, true);
+ }
+ BOOST_UBLAS_INLINE
+ vector_of_vector (const vector_of_vector &m):
+ matrix_container<self_type> (),
+ size1_ (m.size1_), size2_ (m.size2_), data_ (m.data_) {}
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ vector_of_vector (const matrix_expression<AE> &ae):
+ matrix_container<self_type> (),
+ size1_ (ae ().size1 ()), size2_ (ae ().size2 ()), data_ (layout_type::size1 (size1_, size2_) + 1) {
+ for (size_type k = 0; k < layout_type::size1 (size1_, size2_); ++ k)
+ data ()[k].resize (layout_type::size2 (size1_, size2_));
+ matrix_assign<scalar_assign> (*this, ae);
+ }
+
+ // Accessors
+ BOOST_UBLAS_INLINE
+ size_type size1 () const {
+ return size1_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type size2 () const {
+ return size2_;
+ }
+
+ // Storage accessors
+ BOOST_UBLAS_INLINE
+ const array_type &data () const {
+ return data_;
+ }
+ BOOST_UBLAS_INLINE
+ array_type &data () {
+ return data_;
+ }
+
+ // Resizing
+ BOOST_UBLAS_INLINE
+ void resize (size_type size1, size_type size2, bool preserve = true) {
+ size1_ = size1;
+ size2_ = size2;
+ if (preserve)
+ data ().resize (layout_type::size1 (size1, size2) + 1, typename array_type::value_type ());
+ else
+ data ().resize (layout_type::size1 (size1, size2) + 1);
+ for (size_type k = 0; k < layout_type::size1 (size1, size2); ++ k) {
+ if (preserve)
+ data () [k].resize (layout_type::size2 (size1, size2), value_type ());
+ else
+ data () [k].resize (layout_type::size2 (size1, size2));
+ }
+ }
+
+ // Element access
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type i, size_type j) const {
+ return data () [layout_type::element1 (i, size1_, j, size2_)] [layout_type::element2 (i, size1_, j, size2_)];
+ }
+ BOOST_UBLAS_INLINE
+ reference at_element (size_type i, size_type j) {
+ return data () [layout_type::element1 (i, size1_, j, size2_)] [layout_type::element2 (i, size1_, j, size2_)];
+ }
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type i, size_type j) {
+ return at_element (i, j);
+ }
+
+ // Element assignment
+ BOOST_UBLAS_INLINE
+ reference insert_element (size_type i, size_type j, const_reference t) {
+ return (at_element (i, j) = t);
+ }
+ BOOST_UBLAS_INLINE
+ void erase_element (size_type i, size_type j) {
+ at_element (i, j) = value_type/*zero*/();
+ }
+
+ // Zeroing
+ BOOST_UBLAS_INLINE
+ void clear () {
+ for (size_type k = 0; k < layout_type::size1 (size1_, size2_); ++ k)
+ std::fill (data () [k].begin (), data () [k].end (), value_type/*zero*/());
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ vector_of_vector &operator = (const vector_of_vector &m) {
+ size1_ = m.size1_;
+ size2_ = m.size2_;
+ data () = m.data ();
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ vector_of_vector &assign_temporary (vector_of_vector &m) {
+ swap (m);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ vector_of_vector &operator = (const matrix_expression<AE> &ae) {
+ self_type temporary (ae);
+ return assign_temporary (temporary);
+ }
+ template<class C> // Container assignment without temporary
+ BOOST_UBLAS_INLINE
+ vector_of_vector &operator = (const matrix_container<C> &m) {
+ resize (m ().size1 (), m ().size2 (), false);
+ assign (m);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ vector_of_vector &assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_assign> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ vector_of_vector& operator += (const matrix_expression<AE> &ae) {
+ self_type temporary (*this + ae);
+ return assign_temporary (temporary);
+ }
+ template<class C> // Container assignment without temporary
+ BOOST_UBLAS_INLINE
+ vector_of_vector &operator += (const matrix_container<C> &m) {
+ plus_assign (m);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ vector_of_vector &plus_assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_plus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ vector_of_vector& operator -= (const matrix_expression<AE> &ae) {
+ self_type temporary (*this - ae);
+ return assign_temporary (temporary);
+ }
+ template<class C> // Container assignment without temporary
+ BOOST_UBLAS_INLINE
+ vector_of_vector &operator -= (const matrix_container<C> &m) {
+ minus_assign (m);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ vector_of_vector &minus_assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_minus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ vector_of_vector& operator *= (const AT &at) {
+ matrix_assign_scalar<scalar_multiplies_assign> (*this, at);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ vector_of_vector& operator /= (const AT &at) {
+ matrix_assign_scalar<scalar_divides_assign> (*this, at);
+ return *this;
+ }
+
+ // Swapping
+ BOOST_UBLAS_INLINE
+ void swap (vector_of_vector &m) {
+ if (this != &m) {
+ std::swap (size1_, m.size1_);
+ std::swap (size2_, m.size2_);
+ data ().swap (m.data ());
+ }
+ }
+ BOOST_UBLAS_INLINE
+ friend void swap (vector_of_vector &m1, vector_of_vector &m2) {
+ m1.swap (m2);
+ }
+
+ // Iterator types
+ private:
+ // Use the vector iterator
+ typedef typename A::value_type::const_iterator const_subiterator_type;
+ typedef typename A::value_type::iterator subiterator_type;
+ public:
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ typedef indexed_iterator1<self_type, dense_random_access_iterator_tag> iterator1;
+ typedef indexed_iterator2<self_type, dense_random_access_iterator_tag> iterator2;
+ typedef indexed_const_iterator1<self_type, dense_random_access_iterator_tag> const_iterator1;
+ typedef indexed_const_iterator2<self_type, dense_random_access_iterator_tag> const_iterator2;
+#else
+ class const_iterator1;
+ class iterator1;
+ class const_iterator2;
+ class iterator2;
+#endif
+ typedef reverse_iterator_base1<const_iterator1> const_reverse_iterator1;
+ typedef reverse_iterator_base1<iterator1> reverse_iterator1;
+ typedef reverse_iterator_base2<const_iterator2> const_reverse_iterator2;
+ typedef reverse_iterator_base2<iterator2> reverse_iterator2;
+
+ // Element lookup
+ BOOST_UBLAS_INLINE
+ const_iterator1 find1 (int /*rank*/, size_type i, size_type j) const {
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ return const_iterator1 (*this, i, j);
+#else
+ return const_iterator1 (*this, i, j, data () [layout_type::address1 (i, size1_, j, size2_)].begin () + layout_type::address2 (i, size1_, j, size2_));
+#endif
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 find1 (int /*rank*/, size_type i, size_type j) {
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ return iterator1 (*this, i, j);
+#else
+ return iterator1 (*this, i, j, data () [layout_type::address1 (i, size1_, j, size2_)].begin () + layout_type::address2 (i, size1_, j, size2_));
+#endif
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 find2 (int /*rank*/, size_type i, size_type j) const {
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ return const_iterator2 (*this, i, j);
+#else
+ return const_iterator2 (*this, i, j, data () [layout_type::address1 (i, size1_, j, size2_)].begin () + layout_type::address2 (i, size1_, j, size2_));
+#endif
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 find2 (int /*rank*/, size_type i, size_type j) {
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ return iterator2 (*this, i, j);
+#else
+ return iterator2 (*this, i, j, data () [layout_type::address1 (i, size1_, j, size2_)].begin () + layout_type::address2 (i, size1_, j, size2_));
+#endif
+ }
+
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator1:
+ public container_const_reference<vector_of_vector>,
+ public random_access_iterator_base<dense_random_access_iterator_tag,
+ const_iterator1, value_type> {
+ public:
+ typedef typename vector_of_vector::value_type value_type;
+ typedef typename vector_of_vector::difference_type difference_type;
+ typedef typename vector_of_vector::const_reference reference;
+ typedef const typename vector_of_vector::pointer pointer;
+
+ typedef const_iterator2 dual_iterator_type;
+ typedef const_reverse_iterator2 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator1 ():
+ container_const_reference<self_type> (), i_ (), j_ (), it_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator1 (const self_type &m, size_type i, size_type j, const const_subiterator_type &it):
+ container_const_reference<self_type> (m), i_ (i), j_ (j), it_ (it) {}
+ BOOST_UBLAS_INLINE
+ const_iterator1 (const iterator1 &it):
+ container_const_reference<self_type> (it ()), i_ (it.i_), j_ (it.j_), it_ (it.it_) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator ++ () {
+ ++ i_;
+ const self_type &m = (*this) ();
+ if (layout_type::fast1 ())
+ ++ it_;
+ else
+ it_ = m.find1 (1, i_, j_).it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator -- () {
+ -- i_;
+ const self_type &m = (*this) ();
+ if (layout_type::fast1 ())
+ -- it_;
+ else
+ it_ = m.find1 (1, i_, j_).it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator += (difference_type n) {
+ i_ += n;
+ const self_type &m = (*this) ();
+ it_ = m.find1 (1, i_, j_).it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator -= (difference_type n) {
+ i_ -= n;
+ const self_type &m = (*this) ();
+ it_ = m.find1 (1, i_, j_).it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (index2 () == it.index2 (), bad_index ());
+ return index1 () - it.index1 ();
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ BOOST_UBLAS_CHECK (index1 () < (*this) ().size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (index2 () < (*this) ().size2 (), bad_index ());
+ return *it_;
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 begin () const {
+ const self_type &m = (*this) ();
+ return m.find2 (1, index1 (), 0);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 end () const {
+ const self_type &m = (*this) ();
+ return m.find2 (1, index1 (), m.size2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rbegin () const {
+ return const_reverse_iterator2 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rend () const {
+ return const_reverse_iterator2 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return i_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return j_;
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator = (const const_iterator1 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (index2 () == it.index2 (), bad_index ());
+ return it_ == it.it_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (index2 () == it.index2 (), bad_index ());
+ return it_ < it.it_;
+ }
+
+ private:
+ size_type i_;
+ size_type j_;
+ const_subiterator_type it_;
+
+ friend class iterator1;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator1 begin1 () const {
+ return find1 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 end1 () const {
+ return find1 (0, size1_, 0);
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class iterator1:
+ public container_reference<vector_of_vector>,
+ public random_access_iterator_base<dense_random_access_iterator_tag,
+ iterator1, value_type> {
+ public:
+ typedef typename vector_of_vector::value_type value_type;
+ typedef typename vector_of_vector::difference_type difference_type;
+ typedef typename vector_of_vector::reference reference;
+ typedef typename vector_of_vector::pointer pointer;
+
+ typedef iterator2 dual_iterator_type;
+ typedef reverse_iterator2 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ iterator1 ():
+ container_reference<self_type> (), i_ (), j_ (), it_ () {}
+ BOOST_UBLAS_INLINE
+ iterator1 (self_type &m, size_type i, size_type j, const subiterator_type &it):
+ container_reference<self_type> (m), i_ (i), j_ (j), it_ (it) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ iterator1 &operator ++ () {
+ ++ i_;
+ self_type &m = (*this) ();
+ if (layout_type::fast1 ())
+ ++ it_;
+ else
+ it_ = m.find1 (1, i_, j_).it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 &operator -- () {
+ -- i_;
+ self_type &m = (*this) ();
+ if (layout_type::fast1 ())
+ -- it_;
+ else
+ it_ = m.find1 (1, i_, j_).it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 &operator += (difference_type n) {
+ i_ += n;
+ self_type &m = (*this) ();
+ it_ = m.find1 (1, i_, j_).it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 &operator -= (difference_type n) {
+ i_ -= n;
+ self_type &m = (*this) ();
+ it_ = m.find1 (1, i_, j_).it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (index2 () == it.index2 (), bad_index ());
+ return index1 () - it.index1 ();
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ BOOST_UBLAS_CHECK (index1 () < (*this) ().size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (index2 () < (*this) ().size2 (), bad_index ());
+ return *it_;
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator2 begin () const {
+ self_type &m = (*this) ();
+ return m.find2 (1, index1 (), 0);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator2 end () const {
+ self_type &m = (*this) ();
+ return m.find2 (1, index1 (), m.size2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator2 rbegin () const {
+ return reverse_iterator2 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator2 rend () const {
+ return reverse_iterator2 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return i_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return j_;
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ iterator1 &operator = (const iterator1 &it) {
+ container_reference<self_type>::assign (&it ());
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (index2 () == it.index2 (), bad_index ());
+ return it_ == it.it_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (index2 () == it.index2 (), bad_index ());
+ return it_ < it.it_;
+ }
+
+ private:
+ size_type i_;
+ size_type j_;
+ subiterator_type it_;
+
+ friend class const_iterator1;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ iterator1 begin1 () {
+ return find1 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 end1 () {
+ return find1 (0, size1_, 0);
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator2:
+ public container_const_reference<vector_of_vector>,
+ public random_access_iterator_base<dense_random_access_iterator_tag,
+ const_iterator2, value_type> {
+ public:
+ typedef typename vector_of_vector::value_type value_type;
+ typedef typename vector_of_vector::difference_type difference_type;
+ typedef typename vector_of_vector::const_reference reference;
+ typedef const typename vector_of_vector::pointer pointer;
+
+ typedef const_iterator1 dual_iterator_type;
+ typedef const_reverse_iterator1 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator2 ():
+ container_const_reference<self_type> (), i_ (), j_ (), it_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator2 (const self_type &m, size_type i, size_type j, const const_subiterator_type &it):
+ container_const_reference<self_type> (m), i_ (i), j_ (j), it_ (it) {}
+ BOOST_UBLAS_INLINE
+ const_iterator2 (const iterator2 &it):
+ container_const_reference<self_type> (it ()), i_ (it.i_), j_ (it.j_), it_ (it.it_) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator ++ () {
+ ++ j_;
+ const self_type &m = (*this) ();
+ if (layout_type::fast2 ())
+ ++ it_;
+ else
+ it_ = m.find2 (1, i_, j_).it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator -- () {
+ -- j_;
+ const self_type &m = (*this) ();
+ if (layout_type::fast2 ())
+ -- it_;
+ else
+ it_ = m.find2 (1, i_, j_).it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator += (difference_type n) {
+ j_ += n;
+ const self_type &m = (*this) ();
+ it_ = m.find2 (1, i_, j_).it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator -= (difference_type n) {
+ j_ -= n;
+ const self_type &m = (*this) ();
+ it_ = m.find2 (1, i_, j_).it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (index1 () == it.index1 (), bad_index ());
+ return index2 () - it.index2 ();
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ BOOST_UBLAS_CHECK (index1 () < (*this) ().size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (index2 () < (*this) ().size2 (), bad_index ());
+ return *it_;
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 begin () const {
+ const self_type &m = (*this) ();
+ return m.find1 (1, 0, index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 end () const {
+ const self_type &m = (*this) ();
+ return m.find1 (1, m.size1 (), index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rbegin () const {
+ return const_reverse_iterator1 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rend () const {
+ return const_reverse_iterator1 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return i_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return j_;
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator = (const const_iterator2 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (index1 () == it.index1 (), bad_index ());
+ return it_ == it.it_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (index1 () == it.index1 (), bad_index ());
+ return it_ < it.it_;
+ }
+
+ private:
+ size_type i_;
+ size_type j_;
+ const_subiterator_type it_;
+
+ friend class iterator2;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator2 begin2 () const {
+ return find2 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 end2 () const {
+ return find2 (0, 0, size2_);
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class iterator2:
+ public container_reference<vector_of_vector>,
+ public random_access_iterator_base<dense_random_access_iterator_tag,
+ iterator2, value_type> {
+ public:
+ typedef typename vector_of_vector::value_type value_type;
+ typedef typename vector_of_vector::difference_type difference_type;
+ typedef typename vector_of_vector::reference reference;
+ typedef typename vector_of_vector::pointer pointer;
+
+ typedef iterator1 dual_iterator_type;
+ typedef reverse_iterator1 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ iterator2 ():
+ container_reference<self_type> (), i_ (), j_ (), it_ () {}
+ BOOST_UBLAS_INLINE
+ iterator2 (self_type &m, size_type i, size_type j, const subiterator_type &it):
+ container_reference<self_type> (m), i_ (i), j_ (j), it_ (it) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ iterator2 &operator ++ () {
+ ++ j_;
+ self_type &m = (*this) ();
+ if (layout_type::fast2 ())
+ ++ it_;
+ else
+ it_ = m.find2 (1, i_, j_).it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 &operator -- () {
+ -- j_;
+ self_type &m = (*this) ();
+ if (layout_type::fast2 ())
+ -- it_;
+ else
+ it_ = m.find2 (1, i_, j_).it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 &operator += (difference_type n) {
+ j_ += n;
+ self_type &m = (*this) ();
+ it_ = m.find2 (1, i_, j_).it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 &operator -= (difference_type n) {
+ j_ -= n;
+ self_type &m = (*this) ();
+ it_ = m.find2 (1, i_, j_).it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (index1 () == it.index1 (), bad_index ());
+ return index2 () - it.index2 ();
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ BOOST_UBLAS_CHECK (index1 () < (*this) ().size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (index2 () < (*this) ().size2 (), bad_index ());
+ return *it_;
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator1 begin () const {
+ self_type &m = (*this) ();
+ return m.find1 (1, 0, index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator1 end () const {
+ self_type &m = (*this) ();
+ return m.find1 (1, m.size1 (), index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator1 rbegin () const {
+ return reverse_iterator1 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator1 rend () const {
+ return reverse_iterator1 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return i_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return j_;
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ iterator2 &operator = (const iterator2 &it) {
+ container_reference<self_type>::assign (&it ());
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (index1 () == it.index1 (), bad_index ());
+ return it_ == it.it_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (index1 () == it.index1 (), bad_index ());
+ return it_ < it.it_;
+ }
+
+ private:
+ size_type i_;
+ size_type j_;
+ subiterator_type it_;
+
+ friend class const_iterator2;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ iterator2 begin2 () {
+ return find2 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 end2 () {
+ return find2 (0, 0, size2_);
+ }
+
+ // Reverse iterators
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rbegin1 () const {
+ return const_reverse_iterator1 (end1 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rend1 () const {
+ return const_reverse_iterator1 (begin1 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ reverse_iterator1 rbegin1 () {
+ return reverse_iterator1 (end1 ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator1 rend1 () {
+ return reverse_iterator1 (begin1 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rbegin2 () const {
+ return const_reverse_iterator2 (end2 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rend2 () const {
+ return const_reverse_iterator2 (begin2 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ reverse_iterator2 rbegin2 () {
+ return reverse_iterator2 (end2 ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator2 rend2 () {
+ return reverse_iterator2 (begin2 ());
+ }
+
+ private:
+ size_type size1_;
+ size_type size2_;
+ array_type data_;
+ };
+
+
+ // Zero matrix class
+ template<class T>
+ class zero_matrix:
+ public matrix_container<zero_matrix<T> > {
+
+ typedef const T *const_pointer;
+ typedef zero_matrix<T> self_type;
+ public:
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using matrix_container<self_type>::operator ();
+#endif
+ typedef std::size_t size_type;
+ typedef std::ptrdiff_t difference_type;
+ typedef T value_type;
+ typedef const T &const_reference;
+ typedef T &reference;
+ typedef const matrix_reference<const self_type> const_closure_type;
+ typedef matrix_reference<self_type> closure_type;
+ typedef sparse_tag storage_category;
+ typedef unknown_orientation_tag orientation_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ zero_matrix ():
+ matrix_container<self_type> (),
+ size1_ (0), size2_ (0) {}
+ BOOST_UBLAS_INLINE
+ zero_matrix (size_type size):
+ matrix_container<self_type> (),
+ size1_ (size), size2_ (size) {}
+ BOOST_UBLAS_INLINE
+ zero_matrix (size_type size1, size_type size2):
+ matrix_container<self_type> (),
+ size1_ (size1), size2_ (size2) {}
+ BOOST_UBLAS_INLINE
+ zero_matrix (const zero_matrix &m):
+ matrix_container<self_type> (),
+ size1_ (m.size1_), size2_ (m.size2_) {}
+
+ // Accessors
+ BOOST_UBLAS_INLINE
+ size_type size1 () const {
+ return size1_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type size2 () const {
+ return size2_;
+ }
+
+ // Resizing
+ BOOST_UBLAS_INLINE
+ void resize (size_type size, bool preserve = true) {
+ size1_ = size;
+ size2_ = size;
+ }
+ BOOST_UBLAS_INLINE
+ void resize (size_type size1, size_type size2, bool /*preserve*/ = true) {
+ size1_ = size1;
+ size2_ = size2;
+ }
+
+ // Element access
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type /* i */, size_type /* j */) const {
+ return zero_;
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ zero_matrix &operator = (const zero_matrix &m) {
+ size1_ = m.size1_;
+ size2_ = m.size2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ zero_matrix &assign_temporary (zero_matrix &m) {
+ swap (m);
+ return *this;
+ }
+
+ // Swapping
+ BOOST_UBLAS_INLINE
+ void swap (zero_matrix &m) {
+ if (this != &m) {
+ std::swap (size1_, m.size1_);
+ std::swap (size2_, m.size2_);
+ }
+ }
+ BOOST_UBLAS_INLINE
+ friend void swap (zero_matrix &m1, zero_matrix &m2) {
+ m1.swap (m2);
+ }
+
+ // Iterator types
+ public:
+ class const_iterator1;
+ class const_iterator2;
+ typedef reverse_iterator_base1<const_iterator1> const_reverse_iterator1;
+ typedef reverse_iterator_base2<const_iterator2> const_reverse_iterator2;
+
+ // Element lookup
+ BOOST_UBLAS_INLINE
+ const_iterator1 find1 (int /*rank*/, size_type /*i*/, size_type /*j*/) const {
+ return const_iterator1 (*this);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 find2 (int /*rank*/, size_type /*i*/, size_type /*j*/) const {
+ return const_iterator2 (*this);
+ }
+
+ class const_iterator1:
+ public container_const_reference<zero_matrix>,
+ public bidirectional_iterator_base<sparse_bidirectional_iterator_tag,
+ const_iterator1, value_type> {
+ public:
+ typedef typename zero_matrix::value_type value_type;
+ typedef typename zero_matrix::difference_type difference_type;
+ typedef typename zero_matrix::const_reference reference;
+ typedef typename zero_matrix::const_pointer pointer;
+
+ typedef const_iterator2 dual_iterator_type;
+ typedef const_reverse_iterator2 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator1 ():
+ container_const_reference<self_type> () {}
+ BOOST_UBLAS_INLINE
+ const_iterator1 (const self_type &m):
+ container_const_reference<self_type> (m) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator ++ () {
+ BOOST_UBLAS_CHECK_FALSE (bad_index ());
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator -- () {
+ BOOST_UBLAS_CHECK_FALSE (bad_index ());
+ return *this;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ BOOST_UBLAS_CHECK_FALSE (bad_index ());
+ return zero_; // arbitary return value
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 begin () const {
+ return const_iterator2 ((*this) ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 end () const {
+ return const_iterator2 ((*this) ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rbegin () const {
+ return const_reverse_iterator2 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rend () const {
+ return const_reverse_iterator2 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ BOOST_UBLAS_CHECK_FALSE (bad_index ());
+ return 0; // arbitary return value
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ BOOST_UBLAS_CHECK_FALSE (bad_index ());
+ return 0; // arbitary return value
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator = (const const_iterator1 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return true;
+ }
+ };
+
+ typedef const_iterator1 iterator1;
+
+ BOOST_UBLAS_INLINE
+ const_iterator1 begin1 () const {
+ return const_iterator1 (*this);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 end1 () const {
+ return const_iterator1 (*this);
+ }
+
+ class const_iterator2:
+ public container_const_reference<zero_matrix>,
+ public bidirectional_iterator_base<sparse_bidirectional_iterator_tag,
+ const_iterator2, value_type> {
+ public:
+ typedef typename zero_matrix::value_type value_type;
+ typedef typename zero_matrix::difference_type difference_type;
+ typedef typename zero_matrix::const_reference reference;
+ typedef typename zero_matrix::const_pointer pointer;
+
+ typedef const_iterator1 dual_iterator_type;
+ typedef const_reverse_iterator1 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator2 ():
+ container_const_reference<self_type> () {}
+ BOOST_UBLAS_INLINE
+ const_iterator2 (const self_type &m):
+ container_const_reference<self_type> (m) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator ++ () {
+ BOOST_UBLAS_CHECK_FALSE (bad_index ());
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator -- () {
+ BOOST_UBLAS_CHECK_FALSE (bad_index ());
+ return *this;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ BOOST_UBLAS_CHECK_FALSE (bad_index ());
+ return zero_; // arbitary return value
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 begin () const {
+ return const_iterator1 ((*this) ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 end () const {
+ return const_iterator1 ((*this) ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rbegin () const {
+ return const_reverse_iterator1 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rend () const {
+ return const_reverse_iterator1 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ BOOST_UBLAS_CHECK_FALSE (bad_index ());
+ return 0; // arbitary return value
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ BOOST_UBLAS_CHECK_FALSE (bad_index ());
+ return 0; // arbitary return value
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator = (const const_iterator2 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return true;
+ }
+ };
+
+ typedef const_iterator2 iterator2;
+
+ BOOST_UBLAS_INLINE
+ const_iterator2 begin2 () const {
+ return find2 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 end2 () const {
+ return find2 (0, 0, size2_);
+ }
+
+ // Reverse iterators
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rbegin1 () const {
+ return const_reverse_iterator1 (end1 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rend1 () const {
+ return const_reverse_iterator1 (begin1 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rbegin2 () const {
+ return const_reverse_iterator2 (end2 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rend2 () const {
+ return const_reverse_iterator2 (begin2 ());
+ }
+
+ private:
+ size_type size1_;
+ size_type size2_;
+ static const value_type zero_;
+ };
+
+ template<class T>
+ const typename zero_matrix<T>::value_type zero_matrix<T>::zero_ (0);
+
+
+ // Identity matrix class
+ template<class T>
+ class identity_matrix:
+ public matrix_container<identity_matrix<T> > {
+
+ typedef const T *const_pointer;
+ typedef identity_matrix<T> self_type;
+ public:
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using matrix_container<self_type>::operator ();
+#endif
+ typedef std::size_t size_type;
+ typedef std::ptrdiff_t difference_type;
+ typedef T value_type;
+ typedef const T &const_reference;
+ typedef T &reference;
+ typedef const matrix_reference<const self_type> const_closure_type;
+ typedef matrix_reference<self_type> closure_type;
+ typedef sparse_tag storage_category;
+ typedef unknown_orientation_tag orientation_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ identity_matrix ():
+ matrix_container<self_type> (),
+ size1_ (0), size2_ (0), size_common_ (0) {}
+ BOOST_UBLAS_INLINE
+ identity_matrix (size_type size):
+ matrix_container<self_type> (),
+ size1_ (size), size2_ (size), size_common_ ((std::min) (size1_, size2_)) {}
+ BOOST_UBLAS_INLINE
+ identity_matrix (size_type size1, size_type size2):
+ matrix_container<self_type> (),
+ size1_ (size1), size2_ (size2), size_common_ ((std::min) (size1_, size2_)) {}
+ BOOST_UBLAS_INLINE
+ identity_matrix (const identity_matrix &m):
+ matrix_container<self_type> (),
+ size1_ (m.size1_), size2_ (m.size2_), size_common_ ((std::min) (size1_, size2_)) {}
+
+ // Accessors
+ BOOST_UBLAS_INLINE
+ size_type size1 () const {
+ return size1_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type size2 () const {
+ return size2_;
+ }
+
+ // Resizing
+ BOOST_UBLAS_INLINE
+ void resize (size_type size, bool preserve = true) {
+ size1_ = size;
+ size2_ = size;
+ }
+ BOOST_UBLAS_INLINE
+ void resize (size_type size1, size_type size2, bool /*preserve*/ = true) {
+ size1_ = size1;
+ size2_ = size2;
+ }
+
+ // Element access
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type i, size_type j) const {
+ if (i == j)
+ return one_;
+ else
+ return zero_;
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ identity_matrix &operator = (const identity_matrix &m) {
+ size1_ = m.size1_;
+ size2_ = m.size2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ identity_matrix &assign_temporary (identity_matrix &m) {
+ swap (m);
+ return *this;
+ }
+
+ // Swapping
+ BOOST_UBLAS_INLINE
+ void swap (identity_matrix &m) {
+ if (this != &m) {
+ std::swap (size1_, m.size1_);
+ std::swap (size2_, m.size2_);
+ }
+ }
+ BOOST_UBLAS_INLINE
+ friend void swap (identity_matrix &m1, identity_matrix &m2) {
+ m1.swap (m2);
+ }
+
+ // Iterator types
+ private:
+ // Use an index
+ typedef size_type const_subiterator_type;
+
+ public:
+ class const_iterator1;
+ class const_iterator2;
+ typedef reverse_iterator_base1<const_iterator1> const_reverse_iterator1;
+ typedef reverse_iterator_base2<const_iterator2> const_reverse_iterator2;
+
+ // Element lookup
+ BOOST_UBLAS_INLINE
+ const_iterator1 find1 (int rank, size_type i, size_type j) const {
+ if (rank == 1) {
+ i = (std::max) (i, j);
+ i = (std::min) (i, j + 1);
+ }
+ return const_iterator1 (*this, i);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 find2 (int rank, size_type i, size_type j) const {
+ if (rank == 1) {
+ j = (std::max) (j, i);
+ j = (std::min) (j, i + 1);
+ }
+ return const_iterator2 (*this, j);
+ }
+
+
+ class const_iterator1:
+ public container_const_reference<identity_matrix>,
+ public bidirectional_iterator_base<sparse_bidirectional_iterator_tag,
+ const_iterator1, value_type> {
+ public:
+ typedef typename identity_matrix::value_type value_type;
+ typedef typename identity_matrix::difference_type difference_type;
+ typedef typename identity_matrix::const_reference reference;
+ typedef typename identity_matrix::const_pointer pointer;
+
+ typedef const_iterator2 dual_iterator_type;
+ typedef const_reverse_iterator2 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator1 ():
+ container_const_reference<self_type> (), it_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator1 (const self_type &m, const const_subiterator_type &it):
+ container_const_reference<self_type> (m), it_ (it) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator ++ () {
+ BOOST_UBLAS_CHECK (it_ < (*this) ().size1 (), bad_index ());
+ ++it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator -- () {
+ BOOST_UBLAS_CHECK (it_ > 0, bad_index ());
+ --it_;
+ return *this;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ return one_;
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 begin () const {
+ return const_iterator2 ((*this) (), it_);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 end () const {
+ return const_iterator2 ((*this) (), it_ + 1);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rbegin () const {
+ return const_reverse_iterator2 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rend () const {
+ return const_reverse_iterator2 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it_;
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator = (const const_iterator1 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it_ == it.it_;
+ }
+
+ private:
+ const_subiterator_type it_;
+ };
+
+ typedef const_iterator1 iterator1;
+
+ BOOST_UBLAS_INLINE
+ const_iterator1 begin1 () const {
+ return const_iterator1 (*this, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 end1 () const {
+ return const_iterator1 (*this, size_common_);
+ }
+
+ class const_iterator2:
+ public container_const_reference<identity_matrix>,
+ public bidirectional_iterator_base<sparse_bidirectional_iterator_tag,
+ const_iterator2, value_type> {
+ public:
+ typedef typename identity_matrix::value_type value_type;
+ typedef typename identity_matrix::difference_type difference_type;
+ typedef typename identity_matrix::const_reference reference;
+ typedef typename identity_matrix::const_pointer pointer;
+
+ typedef const_iterator1 dual_iterator_type;
+ typedef const_reverse_iterator1 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator2 ():
+ container_const_reference<self_type> (), it_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator2 (const self_type &m, const const_subiterator_type &it):
+ container_const_reference<self_type> (m), it_ (it) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator ++ () {
+ BOOST_UBLAS_CHECK (it_ < (*this) ().size_common_, bad_index ());
+ ++it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator -- () {
+ BOOST_UBLAS_CHECK (it_ > 0, bad_index ());
+ --it_;
+ return *this;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ return one_;
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 begin () const {
+ return const_iterator1 ((*this) (), it_);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 end () const {
+ return const_iterator1 ((*this) (), it_ + 1);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rbegin () const {
+ return const_reverse_iterator1 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rend () const {
+ return const_reverse_iterator1 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it_;
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator = (const const_iterator2 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it_ == it.it_;
+ }
+
+ private:
+ const_subiterator_type it_;
+ };
+
+ typedef const_iterator2 iterator2;
+
+ BOOST_UBLAS_INLINE
+ const_iterator2 begin2 () const {
+ return const_iterator2 (*this, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 end2 () const {
+ return const_iterator2 (*this, size_common_);
+ }
+
+ // Reverse iterators
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rbegin1 () const {
+ return const_reverse_iterator1 (end1 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rend1 () const {
+ return const_reverse_iterator1 (begin1 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rbegin2 () const {
+ return const_reverse_iterator2 (end2 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rend2 () const {
+ return const_reverse_iterator2 (begin2 ());
+ }
+
+ private:
+ size_type size1_;
+ size_type size2_;
+ size_type size_common_;
+ static const value_type zero_;
+ static const value_type one_;
+ };
+
+ template<class T>
+ const typename identity_matrix<T>::value_type identity_matrix<T>::zero_ (0);
+ template<class T>
+ const typename identity_matrix<T>::value_type identity_matrix<T>::one_ (1);
+
+
+ // Scalar matrix class
+ template<class T>
+ class scalar_matrix:
+ public matrix_container<scalar_matrix<T> > {
+
+ typedef const T *const_pointer;
+ typedef scalar_matrix<T> self_type;
+ public:
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using matrix_container<self_type>::operator ();
+#endif
+ typedef std::size_t size_type;
+ typedef std::ptrdiff_t difference_type;
+ typedef T value_type;
+ typedef const T &const_reference;
+ typedef T &reference;
+ typedef const matrix_reference<const self_type> const_closure_type;
+ typedef dense_tag storage_category;
+ typedef unknown_orientation_tag orientation_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ scalar_matrix ():
+ matrix_container<self_type> (),
+ size1_ (0), size2_ (0), value_ () {}
+ BOOST_UBLAS_INLINE
+ scalar_matrix (size_type size1, size_type size2, const value_type &value = value_type(1)):
+ matrix_container<self_type> (),
+ size1_ (size1), size2_ (size2), value_ (value) {}
+ BOOST_UBLAS_INLINE
+ scalar_matrix (const scalar_matrix &m):
+ matrix_container<self_type> (),
+ size1_ (m.size1_), size2_ (m.size2_), value_ (m.value_) {}
+
+ // Accessors
+ BOOST_UBLAS_INLINE
+ size_type size1 () const {
+ return size1_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type size2 () const {
+ return size2_;
+ }
+
+ // Resizing
+ BOOST_UBLAS_INLINE
+ void resize (size_type size1, size_type size2, bool /*preserve*/ = true) {
+ size1_ = size1;
+ size2_ = size2;
+ }
+
+ // Element access
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type /*i*/, size_type /*j*/) const {
+ return value_;
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ scalar_matrix &operator = (const scalar_matrix &m) {
+ size1_ = m.size1_;
+ size2_ = m.size2_;
+ value_ = m.value_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ scalar_matrix &assign_temporary (scalar_matrix &m) {
+ swap (m);
+ return *this;
+ }
+
+ // Swapping
+ BOOST_UBLAS_INLINE
+ void swap (scalar_matrix &m) {
+ if (this != &m) {
+ std::swap (size1_, m.size1_);
+ std::swap (size2_, m.size2_);
+ std::swap (value_, m.value_);
+ }
+ }
+ BOOST_UBLAS_INLINE
+ friend void swap (scalar_matrix &m1, scalar_matrix &m2) {
+ m1.swap (m2);
+ }
+
+ // Iterator types
+ private:
+ // Use an index
+ typedef size_type const_subiterator_type;
+
+ public:
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ typedef indexed_const_iterator1<self_type, dense_random_access_iterator_tag> iterator1;
+ typedef indexed_const_iterator2<self_type, dense_random_access_iterator_tag> iterator2;
+ typedef indexed_const_iterator1<self_type, dense_random_access_iterator_tag> const_iterator1;
+ typedef indexed_const_iterator2<self_type, dense_random_access_iterator_tag> const_iterator2;
+#else
+ class const_iterator1;
+ class const_iterator2;
+#endif
+ typedef reverse_iterator_base1<const_iterator1> const_reverse_iterator1;
+ typedef reverse_iterator_base2<const_iterator2> const_reverse_iterator2;
+
+ // Element lookup
+ BOOST_UBLAS_INLINE
+ const_iterator1 find1 (int /*rank*/, size_type i, size_type j) const {
+ return const_iterator1 (*this, i, j);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 find2 (int /*rank*/, size_type i, size_type j) const {
+ return const_iterator2 (*this, i, j);
+ }
+
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator1:
+ public container_const_reference<scalar_matrix>,
+ public random_access_iterator_base<dense_random_access_iterator_tag,
+ const_iterator1, value_type> {
+ public:
+ typedef typename scalar_matrix::value_type value_type;
+ typedef typename scalar_matrix::difference_type difference_type;
+ typedef typename scalar_matrix::const_reference reference;
+ typedef typename scalar_matrix::const_pointer pointer;
+
+ typedef const_iterator2 dual_iterator_type;
+ typedef const_reverse_iterator2 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator1 ():
+ container_const_reference<scalar_matrix> (), it1_ (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator1 (const scalar_matrix &m, const const_subiterator_type &it1, const const_subiterator_type &it2):
+ container_const_reference<scalar_matrix> (m), it1_ (it1), it2_ (it2) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator ++ () {
+ ++ it1_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator -- () {
+ -- it1_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator += (difference_type n) {
+ it1_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator -= (difference_type n) {
+ it1_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ - it.it1_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ BOOST_UBLAS_CHECK (index1 () < (*this) ().size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (index2 () < (*this) ().size2 (), bad_index ());
+ return (*this) () (index1 (), index2 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 begin () const {
+ const scalar_matrix &m = (*this) ();
+ return m.find2 (1, index1 (), 0);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 end () const {
+ const scalar_matrix &m = (*this) ();
+ return m.find2 (1, index1 (), m.size2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rbegin () const {
+ return const_reverse_iterator2 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rend () const {
+ return const_reverse_iterator2 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it1_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it2_;
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator = (const const_iterator1 &it) {
+ container_const_reference<scalar_matrix>::assign (&it ());
+ it1_ = it.it1_;
+ it2_ = it.it2_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ == it.it1_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ < it.it1_;
+ }
+
+ private:
+ const_subiterator_type it1_;
+ const_subiterator_type it2_;
+ };
+
+ typedef const_iterator1 iterator1;
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator1 begin1 () const {
+ return find1 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 end1 () const {
+ return find1 (0, size1_, 0);
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator2:
+ public container_const_reference<scalar_matrix>,
+ public random_access_iterator_base<dense_random_access_iterator_tag,
+ const_iterator2, value_type> {
+ public:
+ typedef typename scalar_matrix::value_type value_type;
+ typedef typename scalar_matrix::difference_type difference_type;
+ typedef typename scalar_matrix::const_reference reference;
+ typedef typename scalar_matrix::const_pointer pointer;
+
+ typedef const_iterator1 dual_iterator_type;
+ typedef const_reverse_iterator1 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator2 ():
+ container_const_reference<scalar_matrix> (), it1_ (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator2 (const scalar_matrix &m, const const_subiterator_type &it1, const const_subiterator_type &it2):
+ container_const_reference<scalar_matrix> (m), it1_ (it1), it2_ (it2) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator ++ () {
+ ++ it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator -- () {
+ -- it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator += (difference_type n) {
+ it2_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator -= (difference_type n) {
+ it2_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ - it.it2_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ BOOST_UBLAS_CHECK (index1 () < (*this) ().size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (index2 () < (*this) ().size2 (), bad_index ());
+ return (*this) () (index1 (), index2 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 begin () const {
+ const scalar_matrix &m = (*this) ();
+ return m.find1 (1, 0, index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 end () const {
+ const scalar_matrix &m = (*this) ();
+ return m.find1 (1, m.size1 (), index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rbegin () const {
+ return const_reverse_iterator1 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rend () const {
+ return const_reverse_iterator1 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it1_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it2_;
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator = (const const_iterator2 &it) {
+ container_const_reference<scalar_matrix>::assign (&it ());
+ it1_ = it.it1_;
+ it2_ = it.it2_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ == it.it2_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ < it.it2_;
+ }
+
+ private:
+ const_subiterator_type it1_;
+ const_subiterator_type it2_;
+ };
+
+ typedef const_iterator2 iterator2;
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator2 begin2 () const {
+ return find2 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 end2 () const {
+ return find2 (0, 0, size2_);
+ }
+
+ // Reverse iterators
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rbegin1 () const {
+ return const_reverse_iterator1 (end1 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rend1 () const {
+ return const_reverse_iterator1 (begin1 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rbegin2 () const {
+ return const_reverse_iterator2 (end2 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rend2 () const {
+ return const_reverse_iterator2 (begin2 ());
+ }
+
+ private:
+ size_type size1_;
+ size_type size2_;
+ value_type value_;
+ };
+
+
+ // Array based matrix class
+ template<class T, std::size_t N, std::size_t M>
+ class c_matrix:
+ public matrix_container<c_matrix<T, N, M> > {
+
+ typedef c_matrix<T, N, M> self_type;
+ public:
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using matrix_container<self_type>::operator ();
+#endif
+ typedef std::size_t size_type;
+ typedef std::ptrdiff_t difference_type;
+ typedef T value_type;
+ typedef const T &const_reference;
+ typedef T &reference;
+ typedef const T *const_pointer;
+ typedef T *pointer;
+ typedef const matrix_reference<const self_type> const_closure_type;
+ typedef matrix_reference<self_type> closure_type;
+ typedef c_vector<T, N * M> vector_temporary_type; // vector able to store all elements of c_matrix
+ typedef self_type matrix_temporary_type;
+ typedef dense_tag storage_category;
+ // This could be better for performance,
+ // typedef typename unknown_orientation_tag orientation_category;
+ // but others depend on the orientation information...
+ typedef row_major_tag orientation_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ c_matrix ():
+ size1_ (N), size2_ (M) /* , data_ () */ {
+ }
+ BOOST_UBLAS_INLINE
+ c_matrix (size_type size1, size_type size2):
+ size1_ (size1), size2_ (size2) /* , data_ () */ {
+ if (size1_ > N || size2_ > M)
+ bad_size ().raise ();
+ }
+ BOOST_UBLAS_INLINE
+ c_matrix (const c_matrix &m):
+ size1_ (m.size1_), size2_ (m.size2_) /* , data_ () */ {
+ if (size1_ > N || size2_ > M)
+ bad_size ().raise ();
+ *this = m;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ c_matrix (const matrix_expression<AE> &ae):
+ size1_ (ae ().size1 ()), size2_ (ae ().size2 ()) /* , data_ () */ {
+ if (size1_ > N || size2_ > M)
+ bad_size ().raise ();
+ matrix_assign<scalar_assign> (*this, ae);
+ }
+
+ // Accessors
+ BOOST_UBLAS_INLINE
+ size_type size1 () const {
+ return size1_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type size2 () const {
+ return size2_;
+ }
+ BOOST_UBLAS_INLINE
+ const_pointer data () const {
+ return reinterpret_cast<const_pointer> (data_);
+ }
+ BOOST_UBLAS_INLINE
+ pointer data () {
+ return reinterpret_cast<pointer> (data_);
+ }
+
+ // Resizing
+ BOOST_UBLAS_INLINE
+ void resize (size_type size1, size_type size2, bool preserve = true) {
+ if (size1 > N || size2 > M)
+ bad_size ().raise ();
+ if (preserve) {
+ self_type temporary (size1, size2);
+ // Common elements to preserve
+ const size_type size1_min = (std::min) (size1, size1_);
+ const size_type size2_min = (std::min) (size2, size2_);
+ for (size_type i = 0; i != size1_min; ++i) { // indexing copy over major
+ for (size_type j = 0; j != size2_min; ++j) {
+ temporary.data_[i][j] = data_[i][j];
+ }
+ }
+ assign_temporary (temporary);
+ }
+ else {
+ size1_ = size1;
+ size2_ = size2;
+ }
+ }
+
+ // Element access
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type i, size_type j) const {
+ BOOST_UBLAS_CHECK (i < size1_, bad_index ());
+ BOOST_UBLAS_CHECK (j < size2_, bad_index ());
+ return data_ [i] [j];
+ }
+ BOOST_UBLAS_INLINE
+ reference at_element (size_type i, size_type j) {
+ BOOST_UBLAS_CHECK (i < size1_, bad_index ());
+ BOOST_UBLAS_CHECK (j < size2_, bad_index ());
+ return data_ [i] [j];
+ }
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type i, size_type j) {
+ return at_element (i, j);
+ }
+
+ // Element assignment
+ BOOST_UBLAS_INLINE
+ reference insert_element (size_type i, size_type j, const_reference t) {
+ return (at_element (i, j) = t);
+ }
+
+ // Zeroing
+ BOOST_UBLAS_INLINE
+ void clear () {
+ for (size_type i = 0; i < size1_; ++ i)
+ std::fill (data_ [i], data_ [i] + size2_, value_type/*zero*/());
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ c_matrix &operator = (const c_matrix &m) {
+ size1_ = m.size1_;
+ size2_ = m.size2_;
+ for (size_type i = 0; i < m.size1_; ++ i)
+ std::copy (m.data_ [i], m.data_ [i] + m.size2_, data_ [i]);
+ return *this;
+ }
+ template<class C> // Container assignment without temporary
+ BOOST_UBLAS_INLINE
+ c_matrix &operator = (const matrix_container<C> &m) {
+ resize (m ().size1 (), m ().size2 (), false);
+ assign (m);
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ c_matrix &assign_temporary (c_matrix &m) {
+ swap (m);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ c_matrix &operator = (const matrix_expression<AE> &ae) {
+ self_type temporary (ae);
+ return assign_temporary (temporary);
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ c_matrix &assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_assign> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ c_matrix& operator += (const matrix_expression<AE> &ae) {
+ self_type temporary (*this + ae);
+ return assign_temporary (temporary);
+ }
+ template<class C> // Container assignment without temporary
+ BOOST_UBLAS_INLINE
+ c_matrix &operator += (const matrix_container<C> &m) {
+ plus_assign (m);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ c_matrix &plus_assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_plus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ c_matrix& operator -= (const matrix_expression<AE> &ae) {
+ self_type temporary (*this - ae);
+ return assign_temporary (temporary);
+ }
+ template<class C> // Container assignment without temporary
+ BOOST_UBLAS_INLINE
+ c_matrix &operator -= (const matrix_container<C> &m) {
+ minus_assign (m);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ c_matrix &minus_assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_minus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ c_matrix& operator *= (const AT &at) {
+ matrix_assign_scalar<scalar_multiplies_assign> (*this, at);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ c_matrix& operator /= (const AT &at) {
+ matrix_assign_scalar<scalar_divides_assign> (*this, at);
+ return *this;
+ }
+
+ // Swapping
+ BOOST_UBLAS_INLINE
+ void swap (c_matrix &m) {
+ if (this != &m) {
+ BOOST_UBLAS_CHECK (size1_ == m.size1_, bad_size ());
+ BOOST_UBLAS_CHECK (size2_ == m.size2_, bad_size ());
+ std::swap (size1_, m.size1_);
+ std::swap (size2_, m.size2_);
+ for (size_type i = 0; i < size1_; ++ i)
+ std::swap_ranges (data_ [i], data_ [i] + size2_, m.data_ [i]);
+ }
+ }
+ BOOST_UBLAS_INLINE
+ friend void swap (c_matrix &m1, c_matrix &m2) {
+ m1.swap (m2);
+ }
+
+ // Iterator types
+ private:
+ // Use pointers for iterator
+ typedef const_pointer const_subiterator_type;
+ typedef pointer subiterator_type;
+
+ public:
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ typedef indexed_iterator1<self_type, dense_random_access_iterator_tag> iterator1;
+ typedef indexed_iterator2<self_type, dense_random_access_iterator_tag> iterator2;
+ typedef indexed_const_iterator1<self_type, dense_random_access_iterator_tag> const_iterator1;
+ typedef indexed_const_iterator2<self_type, dense_random_access_iterator_tag> const_iterator2;
+#else
+ class const_iterator1;
+ class iterator1;
+ class const_iterator2;
+ class iterator2;
+#endif
+ typedef reverse_iterator_base1<const_iterator1> const_reverse_iterator1;
+ typedef reverse_iterator_base1<iterator1> reverse_iterator1;
+ typedef reverse_iterator_base2<const_iterator2> const_reverse_iterator2;
+ typedef reverse_iterator_base2<iterator2> reverse_iterator2;
+
+ // Element lookup
+ BOOST_UBLAS_INLINE
+ const_iterator1 find1 (int rank, size_type i, size_type j) const {
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ return const_iterator1 (*this, i, j);
+#else
+ return const_iterator1 (*this, &data_ [i] [j]);
+#endif
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 find1 (int rank, size_type i, size_type j) {
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ return iterator1 (*this, i, j);
+#else
+ return iterator1 (*this, &data_ [i] [j]);
+#endif
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 find2 (int rank, size_type i, size_type j) const {
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ return const_iterator2 (*this, i, j);
+#else
+ return const_iterator2 (*this, &data_ [i] [j]);
+#endif
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 find2 (int rank, size_type i, size_type j) {
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ return iterator2 (*this, i, j);
+#else
+ return iterator2 (*this, &data_ [i] [j]);
+#endif
+ }
+
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator1:
+ public container_const_reference<c_matrix>,
+ public random_access_iterator_base<dense_random_access_iterator_tag,
+ const_iterator1, value_type> {
+ public:
+ typedef typename c_matrix::difference_type difference_type;
+ typedef typename c_matrix::value_type value_type;
+ typedef typename c_matrix::const_reference reference;
+ typedef typename c_matrix::const_pointer pointer;
+
+ typedef const_iterator2 dual_iterator_type;
+ typedef const_reverse_iterator2 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator1 ():
+ container_const_reference<self_type> (), it_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator1 (const self_type &m, const const_subiterator_type &it):
+ container_const_reference<self_type> (m), it_ (it) {}
+ BOOST_UBLAS_INLINE
+ const_iterator1 (const iterator1 &it):
+ container_const_reference<self_type> (it ()), it_ (it.it_) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator ++ () {
+ it_ += M;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator -- () {
+ it_ -= M;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator += (difference_type n) {
+ it_ += n * M;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator -= (difference_type n) {
+ it_ -= n * M;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return (it_ - it.it_) / M;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ BOOST_UBLAS_CHECK (index1 () < (*this) ().size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (index2 () < (*this) ().size2 (), bad_index ());
+ return *it_;
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 begin () const {
+ const self_type &m = (*this) ();
+ return m.find2 (1, index1 (), 0);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 end () const {
+ const self_type &m = (*this) ();
+ return m.find2 (1, index1 (), m.size2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rbegin () const {
+ return const_reverse_iterator2 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rend () const {
+ return const_reverse_iterator2 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ const self_type &m = (*this) ();
+ return (it_ - m.begin1 ().it_) / M;
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ const self_type &m = (*this) ();
+ return (it_ - m.begin1 ().it_) % M;
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator = (const const_iterator1 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it_ == it.it_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it_ < it.it_;
+ }
+
+ private:
+ const_subiterator_type it_;
+
+ friend class iterator1;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator1 begin1 () const {
+ return find1 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 end1 () const {
+ return find1 (0, size1_, 0);
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class iterator1:
+ public container_reference<c_matrix>,
+ public random_access_iterator_base<dense_random_access_iterator_tag,
+ iterator1, value_type> {
+ public:
+
+ typedef typename c_matrix::difference_type difference_type;
+ typedef typename c_matrix::value_type value_type;
+ typedef typename c_matrix::reference reference;
+ typedef typename c_matrix::pointer pointer;
+
+ typedef iterator2 dual_iterator_type;
+ typedef reverse_iterator2 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ iterator1 ():
+ container_reference<self_type> (), it_ () {}
+ BOOST_UBLAS_INLINE
+ iterator1 (self_type &m, const subiterator_type &it):
+ container_reference<self_type> (m), it_ (it) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ iterator1 &operator ++ () {
+ it_ += M;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 &operator -- () {
+ it_ -= M;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 &operator += (difference_type n) {
+ it_ += n * M;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 &operator -= (difference_type n) {
+ it_ -= n * M;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return (it_ - it.it_) / M;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ BOOST_UBLAS_CHECK (index1 () < (*this) ().size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (index2 () < (*this) ().size2 (), bad_index ());
+ return *it_;
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator2 begin () const {
+ self_type &m = (*this) ();
+ return m.find2 (1, index1 (), 0);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator2 end () const {
+ self_type &m = (*this) ();
+ return m.find2 (1, index1 (), m.size2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator2 rbegin () const {
+ return reverse_iterator2 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator2 rend () const {
+ return reverse_iterator2 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ const self_type &m = (*this) ();
+ return (it_ - m.begin1 ().it_) / M;
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ const self_type &m = (*this) ();
+ return (it_ - m.begin1 ().it_) % M;
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ iterator1 &operator = (const iterator1 &it) {
+ container_reference<self_type>::assign (&it ());
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it_ == it.it_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it_ < it.it_;
+ }
+
+ private:
+ subiterator_type it_;
+
+ friend class const_iterator1;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ iterator1 begin1 () {
+ return find1 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 end1 () {
+ return find1 (0, size1_, 0);
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator2:
+ public container_const_reference<c_matrix>,
+ public random_access_iterator_base<dense_random_access_iterator_tag,
+ const_iterator2, value_type> {
+ public:
+ typedef typename c_matrix::difference_type difference_type;
+ typedef typename c_matrix::value_type value_type;
+ typedef typename c_matrix::const_reference reference;
+ typedef typename c_matrix::const_reference pointer;
+
+ typedef const_iterator1 dual_iterator_type;
+ typedef const_reverse_iterator1 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator2 ():
+ container_const_reference<self_type> (), it_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator2 (const self_type &m, const const_subiterator_type &it):
+ container_const_reference<self_type> (m), it_ (it) {}
+ BOOST_UBLAS_INLINE
+ const_iterator2 (const iterator2 &it):
+ container_const_reference<self_type> (it ()), it_ (it.it_) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator ++ () {
+ ++ it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator -- () {
+ -- it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator += (difference_type n) {
+ it_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator -= (difference_type n) {
+ it_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it_ - it.it_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ BOOST_UBLAS_CHECK (index1 () < (*this) ().size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (index2 () < (*this) ().size2 (), bad_index ());
+ return *it_;
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 begin () const {
+ const self_type &m = (*this) ();
+ return m.find1 (1, 0, index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 end () const {
+ const self_type &m = (*this) ();
+ return m.find1 (1, m.size1 (), index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rbegin () const {
+ return const_reverse_iterator1 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rend () const {
+ return const_reverse_iterator1 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ const self_type &m = (*this) ();
+ return (it_ - m.begin2 ().it_) / M;
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ const self_type &m = (*this) ();
+ return (it_ - m.begin2 ().it_) % M;
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator = (const const_iterator2 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it_ == it.it_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it_ < it.it_;
+ }
+
+ private:
+ const_subiterator_type it_;
+
+ friend class iterator2;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator2 begin2 () const {
+ return find2 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 end2 () const {
+ return find2 (0, 0, size2_);
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class iterator2:
+ public container_reference<c_matrix>,
+ public random_access_iterator_base<dense_random_access_iterator_tag,
+ iterator2, value_type> {
+ public:
+ typedef typename c_matrix::difference_type difference_type;
+ typedef typename c_matrix::value_type value_type;
+ typedef typename c_matrix::reference reference;
+ typedef typename c_matrix::pointer pointer;
+
+ typedef iterator1 dual_iterator_type;
+ typedef reverse_iterator1 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ iterator2 ():
+ container_reference<self_type> (), it_ () {}
+ BOOST_UBLAS_INLINE
+ iterator2 (self_type &m, const subiterator_type &it):
+ container_reference<self_type> (m), it_ (it) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ iterator2 &operator ++ () {
+ ++ it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 &operator -- () {
+ -- it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 &operator += (difference_type n) {
+ it_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 &operator -= (difference_type n) {
+ it_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it_ - it.it_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ BOOST_UBLAS_CHECK (index1 () < (*this) ().size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (index2 () < (*this) ().size2 (), bad_index ());
+ return *it_;
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator1 begin () const {
+ self_type &m = (*this) ();
+ return m.find1 (1, 0, index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator1 end () const {
+ self_type &m = (*this) ();
+ return m.find1 (1, m.size1 (), index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator1 rbegin () const {
+ return reverse_iterator1 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator1 rend () const {
+ return reverse_iterator1 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ const self_type &m = (*this) ();
+ return (it_ - m.begin2 ().it_) / M;
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ const self_type &m = (*this) ();
+ return (it_ - m.begin2 ().it_) % M;
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ iterator2 &operator = (const iterator2 &it) {
+ container_reference<self_type>::assign (&it ());
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it_ == it.it_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it_ < it.it_;
+ }
+
+ private:
+ subiterator_type it_;
+
+ friend class const_iterator2;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ iterator2 begin2 () {
+ return find2 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 end2 () {
+ return find2 (0, 0, size2_);
+ }
+
+ // Reverse iterators
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rbegin1 () const {
+ return const_reverse_iterator1 (end1 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rend1 () const {
+ return const_reverse_iterator1 (begin1 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ reverse_iterator1 rbegin1 () {
+ return reverse_iterator1 (end1 ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator1 rend1 () {
+ return reverse_iterator1 (begin1 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rbegin2 () const {
+ return const_reverse_iterator2 (end2 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rend2 () const {
+ return const_reverse_iterator2 (begin2 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ reverse_iterator2 rbegin2 () {
+ return reverse_iterator2 (end2 ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator2 rend2 () {
+ return reverse_iterator2 (begin2 ());
+ }
+
+ private:
+ size_type size1_;
+ size_type size2_;
+ value_type data_ [N] [M];
+ };
+
+}}}
+
+#endif
diff --git a/boost/boost/numeric/ublas/matrix_expression.hpp b/boost/boost/numeric/ublas/matrix_expression.hpp
new file mode 100644
index 00000000000..ac86f658e6b
--- /dev/null
+++ b/boost/boost/numeric/ublas/matrix_expression.hpp
@@ -0,0 +1,4952 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without fee,
+// provided that the above copyright notice appear in all copies and
+// that both that copyright notice and this permission notice appear
+// in supporting documentation. The authors make no representations
+// about the suitability of this software for any purpose.
+// It is provided "as is" without express or implied warranty.
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#ifndef _BOOST_UBLAS_MATRIX_EXPRESSION_
+#define _BOOST_UBLAS_MATRIX_EXPRESSION_
+
+#include <boost/numeric/ublas/vector_expression.hpp>
+
+// Expression templates based on ideas of Todd Veldhuizen and Geoffrey Furnish
+// Iterators based on ideas of Jeremy Siek
+//
+// Classes that model the Matrix Expression concept
+
+namespace boost { namespace numeric { namespace ublas {
+
+ template<class E>
+ class matrix_reference:
+ public matrix_expression<matrix_reference<E> > {
+
+ typedef matrix_reference<E> self_type;
+ public:
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using matrix_expression<self_type>::operator ();
+#endif
+ typedef typename E::size_type size_type;
+ typedef typename E::difference_type difference_type;
+ typedef typename E::value_type value_type;
+ typedef typename E::const_reference const_reference;
+ typedef typename boost::mpl::if_<boost::is_const<E>,
+ typename E::const_reference,
+ typename E::reference>::type reference;
+ typedef E referred_type;
+ typedef const self_type const_closure_type;
+ typedef self_type closure_type;
+ typedef typename E::orientation_category orientation_category;
+ typedef typename E::storage_category storage_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ explicit matrix_reference (referred_type &e):
+ e_ (e) {}
+
+ // Accessors
+ BOOST_UBLAS_INLINE
+ size_type size1 () const {
+ return e_.size1 ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type size2 () const {
+ return e_.size2 ();
+ }
+
+ public:
+ // Expression accessors - const correct
+ BOOST_UBLAS_INLINE
+ const referred_type &expression () const {
+ return e_;
+ }
+ BOOST_UBLAS_INLINE
+ referred_type &expression () {
+ return e_;
+ }
+
+ public:
+ // Element access
+#ifndef BOOST_UBLAS_REFERENCE_CONST_MEMBER
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type i, size_type j) const {
+ return expression () (i, j);
+ }
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type i, size_type j) {
+ return expression () (i, j);
+ }
+#else
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type i, size_type j) const {
+ return expression () (i, j);
+ }
+#endif
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ matrix_reference &operator = (const matrix_reference &m) {
+ expression ().operator = (m);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix_reference &operator = (const matrix_expression<AE> &ae) {
+ expression ().operator = (ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix_reference &assign (const matrix_expression<AE> &ae) {
+ expression ().assign (ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix_reference &operator += (const matrix_expression<AE> &ae) {
+ expression ().operator += (ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix_reference &plus_assign (const matrix_expression<AE> &ae) {
+ expression ().plus_assign (ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix_reference &operator -= (const matrix_expression<AE> &ae) {
+ expression ().operator -= (ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix_reference &minus_assign (const matrix_expression<AE> &ae) {
+ expression ().minus_assign (ae);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ matrix_reference &operator *= (const AT &at) {
+ expression ().operator *= (at);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ matrix_reference &operator /= (const AT &at) {
+ expression ().operator /= (at);
+ return *this;
+ }
+
+ // Swapping
+ BOOST_UBLAS_INLINE
+ void swap (matrix_reference &m) {
+ expression ().swap (m.expression ());
+ }
+
+ // Closure comparison
+ BOOST_UBLAS_INLINE
+ bool same_closure (const matrix_reference &mr) const {
+ return &(*this).e_ == &mr.e_;
+ }
+
+ // Iterator types
+ typedef typename E::const_iterator1 const_iterator1;
+ typedef typename boost::mpl::if_<boost::is_const<E>,
+ typename E::const_iterator1,
+ typename E::iterator1>::type iterator1;
+ typedef typename E::const_iterator2 const_iterator2;
+ typedef typename boost::mpl::if_<boost::is_const<E>,
+ typename E::const_iterator2,
+ typename E::iterator2>::type iterator2;
+
+ // Element lookup
+ BOOST_UBLAS_INLINE
+ const_iterator1 find1 (int rank, size_type i, size_type j) const {
+ return expression ().find1 (rank, i, j);
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 find1 (int rank, size_type i, size_type j) {
+ return expression ().find1 (rank, i, j);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 find2 (int rank, size_type i, size_type j) const {
+ return expression ().find2 (rank, i, j);
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 find2 (int rank, size_type i, size_type j) {
+ return expression ().find2 (rank, i, j);
+ }
+
+ // Iterators are the iterators of the referenced expression.
+
+ BOOST_UBLAS_INLINE
+ const_iterator1 begin1 () const {
+ return expression ().begin1 ();
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 end1 () const {
+ return expression ().end1 ();
+ }
+
+ BOOST_UBLAS_INLINE
+ iterator1 begin1 () {
+ return expression ().begin1 ();
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 end1 () {
+ return expression ().end1 ();
+ }
+
+ BOOST_UBLAS_INLINE
+ const_iterator2 begin2 () const {
+ return expression ().begin2 ();
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 end2 () const {
+ return expression ().end2 ();
+ }
+
+ BOOST_UBLAS_INLINE
+ iterator2 begin2 () {
+ return expression ().begin2 ();
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 end2 () {
+ return expression ().end2 ();
+ }
+
+ // Reverse iterators
+ typedef reverse_iterator_base1<const_iterator1> const_reverse_iterator1;
+ typedef reverse_iterator_base1<iterator1> reverse_iterator1;
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rbegin1 () const {
+ return const_reverse_iterator1 (end1 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rend1 () const {
+ return const_reverse_iterator1 (begin1 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ reverse_iterator1 rbegin1 () {
+ return reverse_iterator1 (end1 ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator1 rend1 () {
+ return reverse_iterator1 (begin1 ());
+ }
+
+ typedef reverse_iterator_base2<const_iterator2> const_reverse_iterator2;
+ typedef reverse_iterator_base2<iterator2> reverse_iterator2;
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rbegin2 () const {
+ return const_reverse_iterator2 (end2 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rend2 () const {
+ return const_reverse_iterator2 (begin2 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ reverse_iterator2 rbegin2 () {
+ return reverse_iterator2 (end2 ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator2 rend2 () {
+ return reverse_iterator2 (begin2 ());
+ }
+
+ private:
+ referred_type &e_;
+ };
+
+
+ template<class E1, class E2, class F>
+ class vector_matrix_binary:
+ public matrix_expression<vector_matrix_binary<E1, E2, F> > {
+
+ typedef E1 expression1_type;
+ typedef E2 expression2_type;
+ public:
+ typedef typename E1::const_closure_type expression1_closure_type;
+ typedef typename E2::const_closure_type expression2_closure_type;
+ private:
+ typedef vector_matrix_binary<E1, E2, F> self_type;
+ public:
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using matrix_expression<self_type>::operator ();
+#endif
+ typedef F functor_type;
+ typedef typename promote_traits<typename E1::size_type, typename E2::size_type>::promote_type size_type;
+ typedef typename promote_traits<typename E1::difference_type, typename E2::difference_type>::promote_type difference_type;
+ typedef typename F::result_type value_type;
+ typedef value_type const_reference;
+ typedef const_reference reference;
+ typedef const self_type const_closure_type;
+ typedef const_closure_type closure_type;
+ typedef unknown_orientation_tag orientation_category;
+ typedef unknown_storage_tag storage_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ vector_matrix_binary (const expression1_type &e1, const expression2_type &e2):
+ e1_ (e1), e2_ (e2) {}
+
+ // Accessors
+ BOOST_UBLAS_INLINE
+ size_type size1 () const {
+ return e1_.size ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type size2 () const {
+ return e2_.size ();
+ }
+
+ public:
+ // Expression accessors
+ BOOST_UBLAS_INLINE
+ const expression1_closure_type &expression1 () const {
+ return e1_;
+ }
+ BOOST_UBLAS_INLINE
+ const expression2_closure_type &expression2 () const {
+ return e2_;
+ }
+
+ public:
+ // Element access
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type i, size_type j) const {
+ return functor_type::apply (e1_ (i), e2_ (j));
+ }
+
+ // Closure comparison
+ BOOST_UBLAS_INLINE
+ bool same_closure (const vector_matrix_binary &vmb) const {
+ return (*this).expression1 ().same_closure (vmb.expression1 ()) &&
+ (*this).expression2 ().same_closure (vmb.expression2 ());
+ }
+
+ // Iterator types
+ private:
+ typedef typename E1::const_iterator const_subiterator1_type;
+ typedef typename E2::const_iterator const_subiterator2_type;
+ typedef const value_type *const_pointer;
+
+ public:
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ typedef typename iterator_restrict_traits<typename const_subiterator1_type::iterator_category,
+ typename const_subiterator2_type::iterator_category>::iterator_category iterator_category;
+ typedef indexed_const_iterator1<const_closure_type, iterator_category> const_iterator1;
+ typedef const_iterator1 iterator1;
+ typedef indexed_const_iterator2<const_closure_type, iterator_category> const_iterator2;
+ typedef const_iterator2 iterator2;
+#else
+ class const_iterator1;
+ typedef const_iterator1 iterator1;
+ class const_iterator2;
+ typedef const_iterator2 iterator2;
+#endif
+ typedef reverse_iterator_base1<const_iterator1> const_reverse_iterator1;
+ typedef reverse_iterator_base2<const_iterator2> const_reverse_iterator2;
+
+ // Element lookup
+ BOOST_UBLAS_INLINE
+ const_iterator1 find1 (int rank, size_type i, size_type j) const {
+ const_subiterator1_type it1 (e1_.find (i));
+ const_subiterator1_type it1_end (e1_.find (size1 ()));
+ const_subiterator2_type it2 (e2_.find (j));
+ const_subiterator2_type it2_end (e2_.find (size2 ()));
+ if (it2 == it2_end || (rank == 1 && (it2.index () != j || *it2 == value_type/*zero*/()))) {
+ it1 = it1_end;
+ it2 = it2_end;
+ }
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ return const_iterator1 (*this, it1.index (), it2.index ());
+#else
+#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING
+ return const_iterator1 (*this, it1, it2, it2 != it2_end ? *it2 : value_type/*zero*/());
+#else
+ return const_iterator1 (*this, it1, it2);
+#endif
+#endif
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 find2 (int rank, size_type i, size_type j) const {
+ const_subiterator2_type it2 (e2_.find (j));
+ const_subiterator2_type it2_end (e2_.find (size2 ()));
+ const_subiterator1_type it1 (e1_.find (i));
+ const_subiterator1_type it1_end (e1_.find (size1 ()));
+ if (it1 == it1_end || (rank == 1 && (it1.index () != i || *it1 == value_type/*zero*/()))) {
+ it2 = it2_end;
+ it1 = it1_end;
+ }
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ return const_iterator2 (*this, it1.index (), it2.index ());
+#else
+#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING
+ return const_iterator2 (*this, it1, it2, it1 != it1_end ? *it1 : value_type/*zero*/());
+#else
+ return const_iterator2 (*this, it1, it2);
+#endif
+#endif
+ }
+
+ // Iterators enhance the iterators of the referenced expressions
+ // with the binary functor.
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator1:
+ public container_const_reference<vector_matrix_binary>,
+ public iterator_base_traits<typename iterator_restrict_traits<typename E1::const_iterator::iterator_category,
+ typename E2::const_iterator::iterator_category>::iterator_category>::template
+ iterator_base<const_iterator1, value_type>::type {
+ public:
+ typedef typename iterator_restrict_traits<typename E1::const_iterator::iterator_category,
+ typename E2::const_iterator::iterator_category>::iterator_category iterator_category;
+ typedef typename vector_matrix_binary::difference_type difference_type;
+ typedef typename vector_matrix_binary::value_type value_type;
+ typedef typename vector_matrix_binary::const_reference reference;
+ typedef typename vector_matrix_binary::const_pointer pointer;
+
+ typedef const_iterator2 dual_iterator_type;
+ typedef const_reverse_iterator2 dual_reverse_iterator_type;
+
+ // Construction and destruction
+#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING
+ BOOST_UBLAS_INLINE
+ const_iterator1 ():
+ container_const_reference<self_type> (), it1_ (), it2_ (), t2_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator1 (const self_type &vmb, const const_subiterator1_type &it1, const const_subiterator2_type &it2, value_type t2):
+ container_const_reference<self_type> (vmb), it1_ (it1), it2_ (it2), t2_ (t2) {}
+#else
+ BOOST_UBLAS_INLINE
+ const_iterator1 ():
+ container_const_reference<self_type> (), it1_ (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator1 (const self_type &vmb, const const_subiterator1_type &it1, const const_subiterator2_type &it2):
+ container_const_reference<self_type> (vmb), it1_ (it1), it2_ (it2) {}
+#endif
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator ++ () {
+ ++ it1_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator -- () {
+ -- it1_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator += (difference_type n) {
+ it1_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator -= (difference_type n) {
+ it1_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ - it.it1_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING
+ return functor_type::apply (*it1_, t2_);
+#else
+ return functor_type::apply (*it1_, *it2_);
+#endif
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 begin () const {
+ return (*this) ().find2 (1, index1 (), 0);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 end () const {
+ return (*this) ().find2 (1, index1 (), (*this) ().size2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rbegin () const {
+ return const_reverse_iterator2 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rend () const {
+ return const_reverse_iterator2 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it1_.index ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it2_.index ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator = (const const_iterator1 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it1_ = it.it1_;
+ it2_ = it.it2_;
+#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING
+ t2_ = it.t2_;
+#endif
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ == it.it1_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ < it.it1_;
+ }
+
+ private:
+#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING
+ const_subiterator1_type it1_;
+ // Mutable due to assignment
+ /* const */ const_subiterator2_type it2_;
+ value_type t2_;
+#else
+ const_subiterator1_type it1_;
+ const_subiterator2_type it2_;
+#endif
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator1 begin1 () const {
+ return find1 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 end1 () const {
+ return find1 (0, size1 (), 0);
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator2:
+ public container_const_reference<vector_matrix_binary>,
+ public iterator_base_traits<typename iterator_restrict_traits<typename E1::const_iterator::iterator_category,
+ typename E2::const_iterator::iterator_category>::iterator_category>::template
+ iterator_base<const_iterator2, value_type>::type {
+ public:
+ typedef typename iterator_restrict_traits<typename E1::const_iterator::iterator_category,
+ typename E2::const_iterator::iterator_category>::iterator_category iterator_category;
+ typedef typename vector_matrix_binary::difference_type difference_type;
+ typedef typename vector_matrix_binary::value_type value_type;
+ typedef typename vector_matrix_binary::const_reference reference;
+ typedef typename vector_matrix_binary::const_pointer pointer;
+
+ typedef const_iterator1 dual_iterator_type;
+ typedef const_reverse_iterator1 dual_reverse_iterator_type;
+
+ // Construction and destruction
+#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING
+ BOOST_UBLAS_INLINE
+ const_iterator2 ():
+ container_const_reference<self_type> (), it1_ (), it2_ (), t1_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator2 (const self_type &vmb, const const_subiterator1_type &it1, const const_subiterator2_type &it2, value_type t1):
+ container_const_reference<self_type> (vmb), it1_ (it1), it2_ (it2), t1_ (t1) {}
+#else
+ BOOST_UBLAS_INLINE
+ const_iterator2 ():
+ container_const_reference<self_type> (), it1_ (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator2 (const self_type &vmb, const const_subiterator1_type &it1, const const_subiterator2_type &it2):
+ container_const_reference<self_type> (vmb), it1_ (it1), it2_ (it2) {}
+#endif
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator ++ () {
+ ++ it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator -- () {
+ -- it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator += (difference_type n) {
+ it2_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator -= (difference_type n) {
+ it2_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure(it ()), external_logic ());
+ BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ - it.it2_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING
+ return functor_type::apply (t1_, *it2_);
+#else
+ return functor_type::apply (*it1_, *it2_);
+#endif
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 begin () const {
+ return (*this) ().find1 (1, 0, index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 end () const {
+ return (*this) ().find1 (1, (*this) ().size1 (), index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rbegin () const {
+ return const_reverse_iterator1 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rend () const {
+ return const_reverse_iterator1 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it1_.index ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it2_.index ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator = (const const_iterator2 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it1_ = it.it1_;
+ it2_ = it.it2_;
+#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING
+ t1_ = it.t1_;
+#endif
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure( it ()), external_logic ());
+ BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ == it.it2_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ < it.it2_;
+ }
+
+ private:
+#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING
+ // Mutable due to assignment
+ /* const */ const_subiterator1_type it1_;
+ const_subiterator2_type it2_;
+ value_type t1_;
+#else
+ const_subiterator1_type it1_;
+ const_subiterator2_type it2_;
+#endif
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator2 begin2 () const {
+ return find2 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 end2 () const {
+ return find2 (0, 0, size2 ());
+ }
+
+ // Reverse iterators
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rbegin1 () const {
+ return const_reverse_iterator1 (end1 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rend1 () const {
+ return const_reverse_iterator1 (begin1 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rbegin2 () const {
+ return const_reverse_iterator2 (end2 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rend2 () const {
+ return const_reverse_iterator2 (begin2 ());
+ }
+
+ private:
+ expression1_closure_type e1_;
+ expression2_closure_type e2_;
+ };
+
+ template<class E1, class E2, class F>
+ struct vector_matrix_binary_traits {
+ typedef vector_matrix_binary<E1, E2, F> expression_type;
+#ifndef BOOST_UBLAS_SIMPLE_ET_DEBUG
+ typedef expression_type result_type;
+#else
+ // ISSUE matrix is arbitary temporary type
+ typedef matrix<typename F::value_type> result_type;
+#endif
+ };
+
+ // (outer_prod (v1, v2)) [i] [j] = v1 [i] * v2 [j]
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ typename vector_matrix_binary_traits<E1, E2, scalar_multiplies<typename E1::value_type, typename E2::value_type> >::result_type
+ outer_prod (const vector_expression<E1> &e1,
+ const vector_expression<E2> &e2) {
+ BOOST_STATIC_ASSERT (E1::complexity == 0 && E2::complexity == 0);
+ typedef typename vector_matrix_binary_traits<E1, E2, scalar_multiplies<typename E1::value_type, typename E2::value_type> >::expression_type expression_type;
+ return expression_type (e1 (), e2 ());
+ }
+
+ template<class E, class F>
+ class matrix_unary1:
+ public matrix_expression<matrix_unary1<E, F> > {
+
+ typedef E expression_type;
+ typedef F functor_type;
+ public:
+ typedef typename E::const_closure_type expression_closure_type;
+ private:
+ typedef matrix_unary1<E, F> self_type;
+ public:
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using matrix_expression<self_type>::operator ();
+#endif
+ typedef typename E::size_type size_type;
+ typedef typename E::difference_type difference_type;
+ typedef typename F::result_type value_type;
+ typedef value_type const_reference;
+ typedef const_reference reference;
+ typedef const self_type const_closure_type;
+ typedef const_closure_type closure_type;
+ typedef typename E::orientation_category orientation_category;
+ typedef unknown_storage_tag storage_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ explicit matrix_unary1 (const expression_type &e):
+ e_ (e) {}
+
+ // Accessors
+ BOOST_UBLAS_INLINE
+ size_type size1 () const {
+ return e_.size1 ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type size2 () const {
+ return e_.size2 ();
+ }
+
+ public:
+ // Expression accessors
+ BOOST_UBLAS_INLINE
+ const expression_closure_type &expression () const {
+ return e_;
+ }
+
+ public:
+ // Element access
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type i, size_type j) const {
+ return functor_type::apply (e_ (i, j));
+ }
+
+ // Closure comparison
+ BOOST_UBLAS_INLINE
+ bool same_closure (const matrix_unary1 &mu1) const {
+ return (*this).expression ().same_closure (mu1.expression ());
+ }
+
+ // Iterator types
+ private:
+ typedef typename E::const_iterator1 const_subiterator1_type;
+ typedef typename E::const_iterator2 const_subiterator2_type;
+ typedef const value_type *const_pointer;
+
+ public:
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ typedef indexed_const_iterator1<const_closure_type, typename const_subiterator1_type::iterator_category> const_iterator1;
+ typedef const_iterator1 iterator1;
+ typedef indexed_const_iterator2<const_closure_type, typename const_subiterator2_type::iterator_category> const_iterator2;
+ typedef const_iterator2 iterator2;
+#else
+ class const_iterator1;
+ typedef const_iterator1 iterator1;
+ class const_iterator2;
+ typedef const_iterator2 iterator2;
+#endif
+ typedef reverse_iterator_base1<const_iterator1> const_reverse_iterator1;
+ typedef reverse_iterator_base2<const_iterator2> const_reverse_iterator2;
+
+ // Element lookup
+ BOOST_UBLAS_INLINE
+ const_iterator1 find1 (int rank, size_type i, size_type j) const {
+ const_subiterator1_type it1 (e_.find1 (rank, i, j));
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ return const_iterator1 (*this, it1.index1 (), it1.index2 ());
+#else
+ return const_iterator1 (*this, it1);
+#endif
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 find2 (int rank, size_type i, size_type j) const {
+ const_subiterator2_type it2 (e_.find2 (rank, i, j));
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ return const_iterator2 (*this, it2.index1 (), it2.index2 ());
+#else
+ return const_iterator2 (*this, it2);
+#endif
+ }
+
+ // Iterators enhance the iterators of the referenced expression
+ // with the unary functor.
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator1:
+ public container_const_reference<matrix_unary1>,
+ public iterator_base_traits<typename E::const_iterator1::iterator_category>::template
+ iterator_base<const_iterator1, value_type>::type {
+ public:
+ typedef typename E::const_iterator1::iterator_category iterator_category;
+ typedef typename matrix_unary1::difference_type difference_type;
+ typedef typename matrix_unary1::value_type value_type;
+ typedef typename matrix_unary1::const_reference reference;
+ typedef typename matrix_unary1::const_pointer pointer;
+
+ typedef const_iterator2 dual_iterator_type;
+ typedef const_reverse_iterator2 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator1 ():
+ container_const_reference<self_type> (), it_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator1 (const self_type &mu, const const_subiterator1_type &it):
+ container_const_reference<self_type> (mu), it_ (it) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator ++ () {
+ ++ it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator -- () {
+ -- it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator += (difference_type n) {
+ it_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator -= (difference_type n) {
+ it_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ - it.it_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ return functor_type::apply (*it_);
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 begin () const {
+ return (*this) ().find2 (1, index1 (), 0);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 end () const {
+ return (*this) ().find2 (1, index1 (), (*this) ().size2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rbegin () const {
+ return const_reverse_iterator2 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rend () const {
+ return const_reverse_iterator2 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it_.index1 ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it_.index2 ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator = (const const_iterator1 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ == it.it_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ < it.it_;
+ }
+
+ private:
+ const_subiterator1_type it_;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator1 begin1 () const {
+ return find1 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 end1 () const {
+ return find1 (0, size1 (), 0);
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator2:
+ public container_const_reference<matrix_unary1>,
+ public iterator_base_traits<typename E::const_iterator2::iterator_category>::template
+ iterator_base<const_iterator2, value_type>::type {
+ public:
+ typedef typename E::const_iterator2::iterator_category iterator_category;
+ typedef typename matrix_unary1::difference_type difference_type;
+ typedef typename matrix_unary1::value_type value_type;
+ typedef typename matrix_unary1::const_reference reference;
+ typedef typename matrix_unary1::const_pointer pointer;
+
+ typedef const_iterator1 dual_iterator_type;
+ typedef const_reverse_iterator1 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator2 ():
+ container_const_reference<self_type> (), it_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator2 (const self_type &mu, const const_subiterator2_type &it):
+ container_const_reference<self_type> (mu), it_ (it) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator ++ () {
+ ++ it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator -- () {
+ -- it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator += (difference_type n) {
+ it_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator -= (difference_type n) {
+ it_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ - it.it_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ return functor_type::apply (*it_);
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 begin () const {
+ return (*this) ().find1 (1, 0, index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 end () const {
+ return (*this) ().find1 (1, (*this) ().size1 (), index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rbegin () const {
+ return const_reverse_iterator1 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rend () const {
+ return const_reverse_iterator1 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it_.index1 ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it_.index2 ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator = (const const_iterator2 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ == it.it_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ < it.it_;
+ }
+
+ private:
+ const_subiterator2_type it_;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator2 begin2 () const {
+ return find2 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 end2 () const {
+ return find2 (0, 0, size2 ());
+ }
+
+ // Reverse iterators
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rbegin1 () const {
+ return const_reverse_iterator1 (end1 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rend1 () const {
+ return const_reverse_iterator1 (begin1 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rbegin2 () const {
+ return const_reverse_iterator2 (end2 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rend2 () const {
+ return const_reverse_iterator2 (begin2 ());
+ }
+
+ private:
+ expression_closure_type e_;
+ };
+
+ template<class E, class F>
+ struct matrix_unary1_traits {
+ typedef matrix_unary1<E, F> expression_type;
+#ifndef BOOST_UBLAS_SIMPLE_ET_DEBUG
+ typedef expression_type result_type;
+#else
+ typedef typename E::matrix_temporary_type result_type;
+#endif
+ };
+
+ // (- m) [i] [j] = - m [i] [j]
+ template<class E>
+ BOOST_UBLAS_INLINE
+ typename matrix_unary1_traits<E, scalar_negate<typename E::value_type> >::result_type
+ operator - (const matrix_expression<E> &e) {
+ typedef typename matrix_unary1_traits<E, scalar_negate<typename E::value_type> >::expression_type expression_type;
+ return expression_type (e ());
+ }
+
+ // (conj m) [i] [j] = conj (m [i] [j])
+ template<class E>
+ BOOST_UBLAS_INLINE
+ typename matrix_unary1_traits<E, scalar_conj<typename E::value_type> >::result_type
+ conj (const matrix_expression<E> &e) {
+ typedef typename matrix_unary1_traits<E, scalar_conj<typename E::value_type> >::expression_type expression_type;
+ return expression_type (e ());
+ }
+
+ // (real m) [i] [j] = real (m [i] [j])
+ template<class E>
+ BOOST_UBLAS_INLINE
+ typename matrix_unary1_traits<E, scalar_real<typename E::value_type> >::result_type
+ real (const matrix_expression<E> &e) {
+ typedef typename matrix_unary1_traits<E, scalar_real<typename E::value_type> >::expression_type expression_type;
+ return expression_type (e ());
+ }
+
+ // (imag m) [i] [j] = imag (m [i] [j])
+ template<class E>
+ BOOST_UBLAS_INLINE
+ typename matrix_unary1_traits<E, scalar_imag<typename E::value_type> >::result_type
+ imag (const matrix_expression<E> &e) {
+ typedef typename matrix_unary1_traits<E, scalar_imag<typename E::value_type> >::expression_type expression_type;
+ return expression_type (e ());
+ }
+
+ template<class E, class F>
+ class matrix_unary2:
+ public matrix_expression<matrix_unary2<E, F> > {
+
+ typedef typename boost::mpl::if_<boost::is_same<F, scalar_identity<typename E::value_type> >,
+ E,
+ const E>::type expression_type;
+ typedef F functor_type;
+ public:
+ typedef typename boost::mpl::if_<boost::is_const<expression_type>,
+ typename E::const_closure_type,
+ typename E::closure_type>::type expression_closure_type;
+ private:
+ typedef matrix_unary2<E, F> self_type;
+ public:
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using matrix_expression<self_type>::operator ();
+#endif
+ typedef typename E::size_type size_type;
+ typedef typename E::difference_type difference_type;
+ typedef typename F::result_type value_type;
+ typedef value_type const_reference;
+ typedef typename boost::mpl::if_<boost::is_same<F, scalar_identity<value_type> >,
+ typename E::reference,
+ value_type>::type reference;
+
+ typedef const self_type const_closure_type;
+ typedef self_type closure_type;
+ typedef typename boost::mpl::if_<boost::is_same<typename E::orientation_category,
+ row_major_tag>,
+ column_major_tag,
+ typename boost::mpl::if_<boost::is_same<typename E::orientation_category,
+ column_major_tag>,
+ row_major_tag,
+ typename E::orientation_category>::type>::type orientation_category;
+ typedef typename E::storage_category storage_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ // matrix_unary2 may be used as mutable expression -
+ // this is the only non const expression constructor
+ explicit matrix_unary2 (expression_type &e):
+ e_ (e) {}
+
+ // Accessors
+ BOOST_UBLAS_INLINE
+ size_type size1 () const {
+ return e_.size2 ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type size2 () const {
+ return e_.size1 ();
+ }
+
+ public:
+ // Expression accessors
+ BOOST_UBLAS_INLINE
+ const expression_closure_type &expression () const {
+ return e_;
+ }
+
+ public:
+ // Element access
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type i, size_type j) const {
+ return functor_type::apply (e_ (j, i));
+ }
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type i, size_type j) {
+ BOOST_STATIC_ASSERT ((boost::is_same<functor_type, scalar_identity<value_type > >::value));
+ return e_ (j, i);
+ }
+
+ // Closure comparison
+ BOOST_UBLAS_INLINE
+ bool same_closure (const matrix_unary2 &mu2) const {
+ return (*this).expression ().same_closure (mu2.expression ());
+ }
+
+ // Iterator types
+ private:
+ typedef typename E::const_iterator1 const_subiterator2_type;
+ typedef typename E::const_iterator2 const_subiterator1_type;
+ typedef const value_type *const_pointer;
+
+ public:
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ typedef indexed_const_iterator1<const_closure_type, typename const_subiterator1_type::iterator_category> const_iterator1;
+ typedef const_iterator1 iterator1;
+ typedef indexed_const_iterator2<const_closure_type, typename const_subiterator2_type::iterator_category> const_iterator2;
+ typedef const_iterator2 iterator2;
+#else
+ class const_iterator1;
+ typedef const_iterator1 iterator1;
+ class const_iterator2;
+ typedef const_iterator2 iterator2;
+#endif
+ typedef reverse_iterator_base1<const_iterator1> const_reverse_iterator1;
+ typedef reverse_iterator_base2<const_iterator2> const_reverse_iterator2;
+
+ // Element lookup
+ BOOST_UBLAS_INLINE
+ const_iterator1 find1 (int rank, size_type i, size_type j) const {
+ const_subiterator1_type it1 (e_.find2 (rank, j, i));
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ return const_iterator1 (*this, it1.index2 (), it1.index1 ());
+#else
+ return const_iterator1 (*this, it1);
+#endif
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 find2 (int rank, size_type i, size_type j) const {
+ const_subiterator2_type it2 (e_.find1 (rank, j, i));
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ return const_iterator2 (*this, it2.index2 (), it2.index1 ());
+#else
+ return const_iterator2 (*this, it2);
+#endif
+ }
+
+ // Iterators enhance the iterators of the referenced expression
+ // with the unary functor.
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator1:
+ public container_const_reference<matrix_unary2>,
+ public iterator_base_traits<typename E::const_iterator2::iterator_category>::template
+ iterator_base<const_iterator1, value_type>::type {
+ public:
+ typedef typename E::const_iterator2::iterator_category iterator_category;
+ typedef typename matrix_unary2::difference_type difference_type;
+ typedef typename matrix_unary2::value_type value_type;
+ typedef typename matrix_unary2::const_reference reference;
+ typedef typename matrix_unary2::const_pointer pointer;
+
+ typedef const_iterator2 dual_iterator_type;
+ typedef const_reverse_iterator2 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator1 ():
+ container_const_reference<self_type> (), it_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator1 (const self_type &mu, const const_subiterator1_type &it):
+ container_const_reference<self_type> (mu), it_ (it) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator ++ () {
+ ++ it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator -- () {
+ -- it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator += (difference_type n) {
+ it_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator -= (difference_type n) {
+ it_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ - it.it_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ return functor_type::apply (*it_);
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 begin () const {
+ return (*this) ().find2 (1, index1 (), 0);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 end () const {
+ return (*this) ().find2 (1, index1 (), (*this) ().size2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rbegin () const {
+ return const_reverse_iterator2 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rend () const {
+ return const_reverse_iterator2 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it_.index2 ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it_.index1 ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator = (const const_iterator1 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ == it.it_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ < it.it_;
+ }
+
+ private:
+ const_subiterator1_type it_;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator1 begin1 () const {
+ return find1 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 end1 () const {
+ return find1 (0, size1 (), 0);
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator2:
+ public container_const_reference<matrix_unary2>,
+ public iterator_base_traits<typename E::const_iterator1::iterator_category>::template
+ iterator_base<const_iterator2, value_type>::type {
+ public:
+ typedef typename E::const_iterator1::iterator_category iterator_category;
+ typedef typename matrix_unary2::difference_type difference_type;
+ typedef typename matrix_unary2::value_type value_type;
+ typedef typename matrix_unary2::const_reference reference;
+ typedef typename matrix_unary2::const_pointer pointer;
+
+ typedef const_iterator1 dual_iterator_type;
+ typedef const_reverse_iterator1 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator2 ():
+ container_const_reference<self_type> (), it_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator2 (const self_type &mu, const const_subiterator2_type &it):
+ container_const_reference<self_type> (mu), it_ (it) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator ++ () {
+ ++ it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator -- () {
+ -- it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator += (difference_type n) {
+ it_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator -= (difference_type n) {
+ it_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ - it.it_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ return functor_type::apply (*it_);
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 begin () const {
+ return (*this) ().find1 (1, 0, index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 end () const {
+ return (*this) ().find1 (1, (*this) ().size1 (), index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rbegin () const {
+ return const_reverse_iterator1 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rend () const {
+ return const_reverse_iterator1 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it_.index2 ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it_.index1 ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator = (const const_iterator2 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ == it.it_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ < it.it_;
+ }
+
+ private:
+ const_subiterator2_type it_;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator2 begin2 () const {
+ return find2 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 end2 () const {
+ return find2 (0, 0, size2 ());
+ }
+
+ // Reverse iterators
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rbegin1 () const {
+ return const_reverse_iterator1 (end1 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rend1 () const {
+ return const_reverse_iterator1 (begin1 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rbegin2 () const {
+ return const_reverse_iterator2 (end2 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rend2 () const {
+ return const_reverse_iterator2 (begin2 ());
+ }
+
+ private:
+ expression_closure_type e_;
+ };
+
+ template<class E, class F>
+ struct matrix_unary2_traits {
+ typedef matrix_unary2<E, F> expression_type;
+#ifndef BOOST_UBLAS_SIMPLE_ET_DEBUG
+ typedef expression_type result_type;
+#else
+ typedef typename E::matrix_temporary_type result_type;
+#endif
+ };
+
+ // (trans m) [i] [j] = m [j] [i]
+ template<class E>
+ BOOST_UBLAS_INLINE
+ typename matrix_unary2_traits<const E, scalar_identity<typename E::value_type> >::result_type
+ trans (const matrix_expression<E> &e) {
+ typedef typename matrix_unary2_traits<const E, scalar_identity<typename E::value_type> >::expression_type expression_type;
+ return expression_type (e ());
+ }
+ template<class E>
+ BOOST_UBLAS_INLINE
+ typename matrix_unary2_traits<E, scalar_identity<typename E::value_type> >::result_type
+ trans (matrix_expression<E> &e) {
+ typedef typename matrix_unary2_traits<E, scalar_identity<typename E::value_type> >::expression_type expression_type;
+ return expression_type (e ());
+ }
+
+ // (herm m) [i] [j] = conj (m [j] [i])
+ template<class E>
+ BOOST_UBLAS_INLINE
+ typename matrix_unary2_traits<E, scalar_conj<typename E::value_type> >::result_type
+ herm (const matrix_expression<E> &e) {
+ typedef typename matrix_unary2_traits<E, scalar_conj<typename E::value_type> >::expression_type expression_type;
+ return expression_type (e ());
+ }
+
+ template<class E1, class E2, class F>
+ class matrix_binary:
+ public matrix_expression<matrix_binary<E1, E2, F> > {
+
+ typedef E1 expression1_type;
+ typedef E2 expression2_type;
+ typedef F functor_type;
+ public:
+ typedef typename E1::const_closure_type expression1_closure_type;
+ typedef typename E2::const_closure_type expression2_closure_type;
+ private:
+ typedef matrix_binary<E1, E2, F> self_type;
+ public:
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using matrix_expression<self_type>::operator ();
+#endif
+ typedef typename promote_traits<typename E1::size_type, typename E2::size_type>::promote_type size_type;
+ typedef typename promote_traits<typename E1::difference_type, typename E2::difference_type>::promote_type difference_type;
+ typedef typename F::result_type value_type;
+ typedef value_type const_reference;
+ typedef const_reference reference;
+ typedef const self_type const_closure_type;
+ typedef const_closure_type closure_type;
+ typedef unknown_orientation_tag orientation_category;
+ typedef unknown_storage_tag storage_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ matrix_binary (const E1 &e1, const E2 &e2):
+ e1_ (e1), e2_ (e2) {}
+
+ // Accessors
+ BOOST_UBLAS_INLINE
+ size_type size1 () const {
+ return BOOST_UBLAS_SAME (e1_.size1 (), e2_.size1 ());
+ }
+ BOOST_UBLAS_INLINE
+ size_type size2 () const {
+ return BOOST_UBLAS_SAME (e1_.size2 (), e2_.size2 ());
+ }
+
+ public:
+ // Expression accessors
+ BOOST_UBLAS_INLINE
+ const expression1_closure_type &expression1 () const {
+ return e1_;
+ }
+ BOOST_UBLAS_INLINE
+ const expression2_closure_type &expression2 () const {
+ return e2_;
+ }
+
+ public:
+ // Element access
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type i, size_type j) const {
+ return functor_type::apply (e1_ (i, j), e2_ (i, j));
+ }
+
+ // Closure comparison
+ BOOST_UBLAS_INLINE
+ bool same_closure (const matrix_binary &mb) const {
+ return (*this).expression1 ().same_closure (mb.expression1 ()) &&
+ (*this).expression2 ().same_closure (mb.expression2 ());
+ }
+
+ // Iterator types
+ private:
+ typedef typename E1::const_iterator1 const_iterator11_type;
+ typedef typename E1::const_iterator2 const_iterator12_type;
+ typedef typename E2::const_iterator1 const_iterator21_type;
+ typedef typename E2::const_iterator2 const_iterator22_type;
+ typedef const value_type *const_pointer;
+
+ public:
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ typedef typename iterator_restrict_traits<typename const_iterator11_type::iterator_category,
+ typename const_iterator21_type::iterator_category>::iterator_category iterator_category1;
+ typedef indexed_const_iterator1<const_closure_type, iterator_category1> const_iterator1;
+ typedef const_iterator1 iterator1;
+ typedef typename iterator_restrict_traits<typename const_iterator12_type::iterator_category,
+ typename const_iterator22_type::iterator_category>::iterator_category iterator_category2;
+ typedef indexed_const_iterator2<const_closure_type, iterator_category2> const_iterator2;
+ typedef const_iterator2 iterator2;
+#else
+ class const_iterator1;
+ typedef const_iterator1 iterator1;
+ class const_iterator2;
+ typedef const_iterator2 iterator2;
+#endif
+ typedef reverse_iterator_base1<const_iterator1> const_reverse_iterator1;
+ typedef reverse_iterator_base2<const_iterator2> const_reverse_iterator2;
+
+ // Element lookup
+ BOOST_UBLAS_INLINE
+ const_iterator1 find1 (int rank, size_type i, size_type j) const {
+ const_iterator11_type it11 (e1_.find1 (rank, i, j));
+ const_iterator11_type it11_end (e1_.find1 (rank, size1 (), j));
+ const_iterator21_type it21 (e2_.find1 (rank, i, j));
+ const_iterator21_type it21_end (e2_.find1 (rank, size1 (), j));
+ BOOST_UBLAS_CHECK (rank == 0 || it11 == it11_end || it11.index2 () == j, internal_logic ())
+ BOOST_UBLAS_CHECK (rank == 0 || it21 == it21_end || it21.index2 () == j, internal_logic ())
+ i = (std::min) (it11 != it11_end ? it11.index1 () : size1 (),
+ it21 != it21_end ? it21.index1 () : size1 ());
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ return const_iterator1 (*this, i, j);
+#else
+ return const_iterator1 (*this, i, j, it11, it11_end, it21, it21_end);
+#endif
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 find2 (int rank, size_type i, size_type j) const {
+ const_iterator12_type it12 (e1_.find2 (rank, i, j));
+ const_iterator12_type it12_end (e1_.find2 (rank, i, size2 ()));
+ const_iterator22_type it22 (e2_.find2 (rank, i, j));
+ const_iterator22_type it22_end (e2_.find2 (rank, i, size2 ()));
+ BOOST_UBLAS_CHECK (rank == 0 || it12 == it12_end || it12.index1 () == i, internal_logic ())
+ BOOST_UBLAS_CHECK (rank == 0 || it22 == it22_end || it22.index1 () == i, internal_logic ())
+ j = (std::min) (it12 != it12_end ? it12.index2 () : size2 (),
+ it22 != it22_end ? it22.index2 () : size2 ());
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ return const_iterator2 (*this, i, j);
+#else
+ return const_iterator2 (*this, i, j, it12, it12_end, it22, it22_end);
+#endif
+ }
+
+ // Iterators enhance the iterators of the referenced expression
+ // with the binary functor.
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator1:
+ public container_const_reference<matrix_binary>,
+ public iterator_base_traits<typename iterator_restrict_traits<typename E1::const_iterator1::iterator_category,
+ typename E2::const_iterator1::iterator_category>::iterator_category>::template
+ iterator_base<const_iterator1, value_type>::type {
+ public:
+ typedef typename iterator_restrict_traits<typename E1::const_iterator1::iterator_category,
+ typename E2::const_iterator1::iterator_category>::iterator_category iterator_category;
+ typedef typename matrix_binary::difference_type difference_type;
+ typedef typename matrix_binary::value_type value_type;
+ typedef typename matrix_binary::const_reference reference;
+ typedef typename matrix_binary::const_pointer pointer;
+
+ typedef const_iterator2 dual_iterator_type;
+ typedef const_reverse_iterator2 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator1 ():
+ container_const_reference<self_type> (), i_ (), j_ (), it1_ (), it1_end_ (), it2_ (), it2_end_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator1 (const self_type &mb, size_type i, size_type j,
+ const const_iterator11_type &it1, const const_iterator11_type &it1_end,
+ const const_iterator21_type &it2, const const_iterator21_type &it2_end):
+ container_const_reference<self_type> (mb), i_ (i), j_ (j), it1_ (it1), it1_end_ (it1_end), it2_ (it2), it2_end_ (it2_end) {}
+
+ private:
+ // Dense specializations
+ BOOST_UBLAS_INLINE
+ void increment (dense_random_access_iterator_tag) {
+ ++ i_; ++ it1_; ++ it2_;
+ }
+ BOOST_UBLAS_INLINE
+ void decrement (dense_random_access_iterator_tag) {
+ -- i_; -- it1_; -- it2_;
+ }
+ BOOST_UBLAS_INLINE
+ void increment (dense_random_access_iterator_tag, difference_type n) {
+ i_ += n; it1_ += n; it2_ += n;
+ }
+ BOOST_UBLAS_INLINE
+ void decrement (dense_random_access_iterator_tag, difference_type n) {
+ i_ -= n; it1_ -= n; it2_ -= n;
+ }
+ BOOST_UBLAS_INLINE
+ value_type dereference (dense_random_access_iterator_tag) const {
+ return functor_type::apply (*it1_, *it2_);
+ }
+
+ // Packed specializations
+ BOOST_UBLAS_INLINE
+ void increment (packed_random_access_iterator_tag) {
+ if (it1_ != it1_end_)
+ if (it1_.index1 () <= i_)
+ ++ it1_;
+ if (it2_ != it2_end_)
+ if (it2_.index1 () <= i_)
+ ++ it2_;
+ ++ i_;
+ }
+ BOOST_UBLAS_INLINE
+ void decrement (packed_random_access_iterator_tag) {
+ if (it1_ != it1_end_)
+ if (i_ <= it1_.index1 ())
+ -- it1_;
+ if (it2_ != it2_end_)
+ if (i_ <= it2_.index1 ())
+ -- it2_;
+ -- i_;
+ }
+ BOOST_UBLAS_INLINE
+ void increment (packed_random_access_iterator_tag, difference_type n) {
+ while (n > 0) {
+ increment (packed_random_access_iterator_tag ());
+ --n;
+ }
+ while (n < 0) {
+ decrement (packed_random_access_iterator_tag ());
+ ++n;
+ }
+ }
+ BOOST_UBLAS_INLINE
+ void decrement (packed_random_access_iterator_tag, difference_type n) {
+ while (n > 0) {
+ decrement (packed_random_access_iterator_tag ());
+ --n;
+ }
+ while (n < 0) {
+ increment (packed_random_access_iterator_tag ());
+ ++n;
+ }
+ }
+ BOOST_UBLAS_INLINE
+ value_type dereference (packed_random_access_iterator_tag) const {
+ value_type t1 = value_type/*zero*/();
+ if (it1_ != it1_end_) {
+ BOOST_UBLAS_CHECK (it1_.index2 () == j_, internal_logic ());
+ if (it1_.index1 () == i_)
+ t1 = *it1_;
+ }
+ value_type t2 = value_type/*zero*/();
+ if (it2_ != it2_end_) {
+ BOOST_UBLAS_CHECK (it2_.index2 () == j_, internal_logic ());
+ if (it2_.index1 () == i_)
+ t2 = *it2_;
+ }
+ return functor_type::apply (t1, t2);
+ }
+
+ // Sparse specializations
+ BOOST_UBLAS_INLINE
+ void increment (sparse_bidirectional_iterator_tag) {
+ size_type index1 = (*this) ().size1 ();
+ if (it1_ != it1_end_) {
+ if (it1_.index1 () <= i_)
+ ++ it1_;
+ if (it1_ != it1_end_)
+ index1 = it1_.index1 ();
+ }
+ size_type index2 = (*this) ().size1 ();
+ if (it2_ != it2_end_)
+ if (it2_.index1 () <= i_)
+ ++ it2_;
+ if (it2_ != it2_end_) {
+ index2 = it2_.index1 ();
+ }
+ i_ = (std::min) (index1, index2);
+ }
+ BOOST_UBLAS_INLINE
+ void decrement (sparse_bidirectional_iterator_tag) {
+ size_type index1 = (*this) ().size1 ();
+ if (it1_ != it1_end_) {
+ if (i_ <= it1_.index1 ())
+ -- it1_;
+ if (it1_ != it1_end_)
+ index1 = it1_.index1 ();
+ }
+ size_type index2 = (*this) ().size1 ();
+ if (it2_ != it2_end_) {
+ if (i_ <= it2_.index1 ())
+ -- it2_;
+ if (it2_ != it2_end_)
+ index2 = it2_.index1 ();
+ }
+ i_ = (std::max) (index1, index2);
+ }
+ BOOST_UBLAS_INLINE
+ void increment (sparse_bidirectional_iterator_tag, difference_type n) {
+ while (n > 0) {
+ increment (sparse_bidirectional_iterator_tag ());
+ --n;
+ }
+ while (n < 0) {
+ decrement (sparse_bidirectional_iterator_tag ());
+ ++n;
+ }
+ }
+ BOOST_UBLAS_INLINE
+ void decrement (sparse_bidirectional_iterator_tag, difference_type n) {
+ while (n > 0) {
+ decrement (sparse_bidirectional_iterator_tag ());
+ --n;
+ }
+ while (n < 0) {
+ increment (sparse_bidirectional_iterator_tag ());
+ ++n;
+ }
+ }
+ BOOST_UBLAS_INLINE
+ value_type dereference (sparse_bidirectional_iterator_tag) const {
+ value_type t1 = value_type/*zero*/();
+ if (it1_ != it1_end_) {
+ BOOST_UBLAS_CHECK (it1_.index2 () == j_, internal_logic ());
+ if (it1_.index1 () == i_)
+ t1 = *it1_;
+ }
+ value_type t2 = value_type/*zero*/();
+ if (it2_ != it2_end_) {
+ BOOST_UBLAS_CHECK (it2_.index2 () == j_, internal_logic ());
+ if (it2_.index1 () == i_)
+ t2 = *it2_;
+ }
+ return functor_type::apply (t1, t2);
+ }
+
+ public:
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator ++ () {
+ increment (iterator_category ());
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator -- () {
+ decrement (iterator_category ());
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator += (difference_type n) {
+ increment (iterator_category (), n);
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator -= (difference_type n) {
+ decrement (iterator_category (), n);
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ BOOST_UBLAS_CHECK (index2 () == it.index2 (), external_logic ());
+ return index1 () - it.index1 ();
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ return dereference (iterator_category ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 begin () const {
+ return (*this) ().find2 (1, index1 (), 0);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 end () const {
+ return (*this) ().find2 (1, index1 (), (*this) ().size2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rbegin () const {
+ return const_reverse_iterator2 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rend () const {
+ return const_reverse_iterator2 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return i_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ // if (it1_ != it1_end_ && it2_ != it2_end_)
+ // return BOOST_UBLAS_SAME (it1_.index2 (), it2_.index2 ());
+ // else
+ return j_;
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator = (const const_iterator1 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ i_ = it.i_;
+ j_ = it.j_;
+ it1_ = it.it1_;
+ it1_end_ = it.it1_end_;
+ it2_ = it.it2_;
+ it2_end_ = it.it2_end_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ BOOST_UBLAS_CHECK (index2 () == it.index2 (), external_logic ());
+ return index1 () == it.index1 ();
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ BOOST_UBLAS_CHECK (index2 () == it.index2 (), external_logic ());
+ return index1 () < it.index1 ();
+ }
+
+ private:
+ size_type i_;
+ size_type j_;
+ const_iterator11_type it1_;
+ const_iterator11_type it1_end_;
+ const_iterator21_type it2_;
+ const_iterator21_type it2_end_;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator1 begin1 () const {
+ return find1 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 end1 () const {
+ return find1 (0, size1 (), 0);
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator2:
+ public container_const_reference<matrix_binary>,
+ public iterator_base_traits<typename iterator_restrict_traits<typename E1::const_iterator2::iterator_category,
+ typename E2::const_iterator2::iterator_category>::iterator_category>::template
+ iterator_base<const_iterator2, value_type>::type {
+ public:
+ typedef typename iterator_restrict_traits<typename E1::const_iterator2::iterator_category,
+ typename E2::const_iterator2::iterator_category>::iterator_category iterator_category;
+ typedef typename matrix_binary::difference_type difference_type;
+ typedef typename matrix_binary::value_type value_type;
+ typedef typename matrix_binary::const_reference reference;
+ typedef typename matrix_binary::const_pointer pointer;
+
+ typedef const_iterator1 dual_iterator_type;
+ typedef const_reverse_iterator1 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator2 ():
+ container_const_reference<self_type> (), i_ (), j_ (), it1_ (), it1_end_ (), it2_ (), it2_end_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator2 (const self_type &mb, size_type i, size_type j,
+ const const_iterator12_type &it1, const const_iterator12_type &it1_end,
+ const const_iterator22_type &it2, const const_iterator22_type &it2_end):
+ container_const_reference<self_type> (mb), i_ (i), j_ (j), it1_ (it1), it1_end_ (it1_end), it2_ (it2), it2_end_ (it2_end) {}
+
+ private:
+ // Dense access specializations
+ BOOST_UBLAS_INLINE
+ void increment (dense_random_access_iterator_tag) {
+ ++ j_; ++ it1_; ++ it2_;
+ }
+ BOOST_UBLAS_INLINE
+ void decrement (dense_random_access_iterator_tag) {
+ -- j_; -- it1_; -- it2_;
+ }
+ BOOST_UBLAS_INLINE
+ void increment (dense_random_access_iterator_tag, difference_type n) {
+ j_ += n; it1_ += n; it2_ += n;
+ }
+ BOOST_UBLAS_INLINE
+ void decrement (dense_random_access_iterator_tag, difference_type n) {
+ j_ -= n; it1_ -= n; it2_ -= n;
+ }
+ BOOST_UBLAS_INLINE
+ value_type dereference (dense_random_access_iterator_tag) const {
+ return functor_type::apply (*it1_, *it2_);
+ }
+
+ // Packed specializations
+ BOOST_UBLAS_INLINE
+ void increment (packed_random_access_iterator_tag) {
+ if (it1_ != it1_end_)
+ if (it1_.index2 () <= j_)
+ ++ it1_;
+ if (it2_ != it2_end_)
+ if (it2_.index2 () <= j_)
+ ++ it2_;
+ ++ j_;
+ }
+ BOOST_UBLAS_INLINE
+ void decrement (packed_random_access_iterator_tag) {
+ if (it1_ != it1_end_)
+ if (j_ <= it1_.index2 ())
+ -- it1_;
+ if (it2_ != it2_end_)
+ if (j_ <= it2_.index2 ())
+ -- it2_;
+ -- j_;
+ }
+ BOOST_UBLAS_INLINE
+ void increment (packed_random_access_iterator_tag, difference_type n) {
+ while (n > 0) {
+ increment (packed_random_access_iterator_tag ());
+ --n;
+ }
+ while (n < 0) {
+ decrement (packed_random_access_iterator_tag ());
+ ++n;
+ }
+ }
+ BOOST_UBLAS_INLINE
+ void decrement (packed_random_access_iterator_tag, difference_type n) {
+ while (n > 0) {
+ decrement (packed_random_access_iterator_tag ());
+ --n;
+ }
+ while (n < 0) {
+ increment (packed_random_access_iterator_tag ());
+ ++n;
+ }
+ }
+ BOOST_UBLAS_INLINE
+ value_type dereference (packed_random_access_iterator_tag) const {
+ value_type t1 = value_type/*zero*/();
+ if (it1_ != it1_end_) {
+ BOOST_UBLAS_CHECK (it1_.index1 () == i_, internal_logic ());
+ if (it1_.index2 () == j_)
+ t1 = *it1_;
+ }
+ value_type t2 = value_type/*zero*/();
+ if (it2_ != it2_end_) {
+ BOOST_UBLAS_CHECK (it2_.index1 () == i_, internal_logic ());
+ if (it2_.index2 () == j_)
+ t2 = *it2_;
+ }
+ return functor_type::apply (t1, t2);
+ }
+
+ // Sparse specializations
+ BOOST_UBLAS_INLINE
+ void increment (sparse_bidirectional_iterator_tag) {
+ size_type index1 = (*this) ().size2 ();
+ if (it1_ != it1_end_) {
+ if (it1_.index2 () <= j_)
+ ++ it1_;
+ if (it1_ != it1_end_)
+ index1 = it1_.index2 ();
+ }
+ size_type index2 = (*this) ().size2 ();
+ if (it2_ != it2_end_) {
+ if (it2_.index2 () <= j_)
+ ++ it2_;
+ if (it2_ != it2_end_)
+ index2 = it2_.index2 ();
+ }
+ j_ = (std::min) (index1, index2);
+ }
+ BOOST_UBLAS_INLINE
+ void decrement (sparse_bidirectional_iterator_tag) {
+ size_type index1 = (*this) ().size2 ();
+ if (it1_ != it1_end_) {
+ if (j_ <= it1_.index2 ())
+ -- it1_;
+ if (it1_ != it1_end_)
+ index1 = it1_.index2 ();
+ }
+ size_type index2 = (*this) ().size2 ();
+ if (it2_ != it2_end_) {
+ if (j_ <= it2_.index2 ())
+ -- it2_;
+ if (it2_ != it2_end_)
+ index2 = it2_.index2 ();
+ }
+ j_ = (std::max) (index1, index2);
+ }
+ BOOST_UBLAS_INLINE
+ void increment (sparse_bidirectional_iterator_tag, difference_type n) {
+ while (n > 0) {
+ increment (sparse_bidirectional_iterator_tag ());
+ --n;
+ }
+ while (n < 0) {
+ decrement (sparse_bidirectional_iterator_tag ());
+ ++n;
+ }
+ }
+ BOOST_UBLAS_INLINE
+ void decrement (sparse_bidirectional_iterator_tag, difference_type n) {
+ while (n > 0) {
+ decrement (sparse_bidirectional_iterator_tag ());
+ --n;
+ }
+ while (n < 0) {
+ increment (sparse_bidirectional_iterator_tag ());
+ ++n;
+ }
+ }
+ BOOST_UBLAS_INLINE
+ value_type dereference (sparse_bidirectional_iterator_tag) const {
+ value_type t1 = value_type/*zero*/();
+ if (it1_ != it1_end_) {
+ BOOST_UBLAS_CHECK (it1_.index1 () == i_, internal_logic ());
+ if (it1_.index2 () == j_)
+ t1 = *it1_;
+ }
+ value_type t2 = value_type/*zero*/();
+ if (it2_ != it2_end_) {
+ BOOST_UBLAS_CHECK (it2_.index1 () == i_, internal_logic ());
+ if (it2_.index2 () == j_)
+ t2 = *it2_;
+ }
+ return functor_type::apply (t1, t2);
+ }
+
+ public:
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator ++ () {
+ increment (iterator_category ());
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator -- () {
+ decrement (iterator_category ());
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator += (difference_type n) {
+ increment (iterator_category (), n);
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator -= (difference_type n) {
+ decrement (iterator_category (), n);
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ BOOST_UBLAS_CHECK (index1 () == it.index1 (), external_logic ());
+ return index2 () - it.index2 ();
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ return dereference (iterator_category ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 begin () const {
+ return (*this) ().find1 (1, 0, index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 end () const {
+ return (*this) ().find1 (1, (*this) ().size1 (), index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rbegin () const {
+ return const_reverse_iterator1 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rend () const {
+ return const_reverse_iterator1 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ // if (it1_ != it1_end_ && it2_ != it2_end_)
+ // return BOOST_UBLAS_SAME (it1_.index1 (), it2_.index1 ());
+ // else
+ return i_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return j_;
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator = (const const_iterator2 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ i_ = it.i_;
+ j_ = it.j_;
+ it1_ = it.it1_;
+ it1_end_ = it.it1_end_;
+ it2_ = it.it2_;
+ it2_end_ = it.it2_end_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ BOOST_UBLAS_CHECK (index1 () == it.index1 (), external_logic ());
+ return index2 () == it.index2 ();
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ BOOST_UBLAS_CHECK (index1 () == it.index1 (), external_logic ());
+ return index2 () < it.index2 ();
+ }
+
+ private:
+ size_type i_;
+ size_type j_;
+ const_iterator12_type it1_;
+ const_iterator12_type it1_end_;
+ const_iterator22_type it2_;
+ const_iterator22_type it2_end_;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator2 begin2 () const {
+ return find2 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 end2 () const {
+ return find2 (0, 0, size2 ());
+ }
+
+ // Reverse iterators
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rbegin1 () const {
+ return const_reverse_iterator1 (end1 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rend1 () const {
+ return const_reverse_iterator1 (begin1 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rbegin2 () const {
+ return const_reverse_iterator2 (end2 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rend2 () const {
+ return const_reverse_iterator2 (begin2 ());
+ }
+
+ private:
+ expression1_closure_type e1_;
+ expression2_closure_type e2_;
+ };
+
+ template<class E1, class E2, class F>
+ struct matrix_binary_traits {
+ typedef matrix_binary<E1, E2, F> expression_type;
+#ifndef BOOST_UBLAS_SIMPLE_ET_DEBUG
+ typedef expression_type result_type;
+#else
+ typedef typename E1::matrix_temporary_type result_type;
+#endif
+ };
+
+ // (m1 + m2) [i] [j] = m1 [i] [j] + m2 [i] [j]
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ typename matrix_binary_traits<E1, E2, scalar_plus<typename E1::value_type,
+ typename E2::value_type> >::result_type
+ operator + (const matrix_expression<E1> &e1,
+ const matrix_expression<E2> &e2) {
+ typedef typename matrix_binary_traits<E1, E2, scalar_plus<typename E1::value_type,
+ typename E2::value_type> >::expression_type expression_type;
+ return expression_type (e1 (), e2 ());
+ }
+
+ // (m1 - m2) [i] [j] = m1 [i] [j] - m2 [i] [j]
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ typename matrix_binary_traits<E1, E2, scalar_minus<typename E1::value_type,
+ typename E2::value_type> >::result_type
+ operator - (const matrix_expression<E1> &e1,
+ const matrix_expression<E2> &e2) {
+ typedef typename matrix_binary_traits<E1, E2, scalar_minus<typename E1::value_type,
+ typename E2::value_type> >::expression_type expression_type;
+ return expression_type (e1 (), e2 ());
+ }
+
+ // (m1 * m2) [i] [j] = m1 [i] [j] * m2 [i] [j]
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ typename matrix_binary_traits<E1, E2, scalar_multiplies<typename E1::value_type,
+ typename E2::value_type> >::result_type
+ element_prod (const matrix_expression<E1> &e1,
+ const matrix_expression<E2> &e2) {
+ typedef typename matrix_binary_traits<E1, E2, scalar_multiplies<typename E1::value_type,
+ typename E2::value_type> >::expression_type expression_type;
+ return expression_type (e1 (), e2 ());
+ }
+
+ // (m1 / m2) [i] [j] = m1 [i] [j] / m2 [i] [j]
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ typename matrix_binary_traits<E1, E2, scalar_divides<typename E1::value_type,
+ typename E2::value_type> >::result_type
+ element_div (const matrix_expression<E1> &e1,
+ const matrix_expression<E2> &e2) {
+ typedef typename matrix_binary_traits<E1, E2, scalar_divides<typename E1::value_type,
+ typename E2::value_type> >::expression_type expression_type;
+ return expression_type (e1 (), e2 ());
+ }
+
+ template<class E1, class E2, class F>
+ class matrix_binary_scalar1:
+ public matrix_expression<matrix_binary_scalar1<E1, E2, F> > {
+
+ typedef E1 expression1_type;
+ typedef E2 expression2_type;
+ typedef F functor_type;
+ typedef const E1& expression1_closure_type;
+ typedef typename E2::const_closure_type expression2_closure_type;
+ typedef matrix_binary_scalar1<E1, E2, F> self_type;
+ public:
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using matrix_expression<self_type>::operator ();
+#endif
+ typedef typename E2::size_type size_type;
+ typedef typename E2::difference_type difference_type;
+ typedef typename F::result_type value_type;
+ typedef value_type const_reference;
+ typedef const_reference reference;
+ typedef const self_type const_closure_type;
+ typedef const_closure_type closure_type;
+ typedef typename E2::orientation_category orientation_category;
+ typedef unknown_storage_tag storage_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ matrix_binary_scalar1 (const expression1_type &e1, const expression2_type &e2):
+ e1_ (e1), e2_ (e2) {}
+
+ // Accessors
+ BOOST_UBLAS_INLINE
+ size_type size1 () const {
+ return e2_.size1 ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type size2 () const {
+ return e2_.size2 ();
+ }
+
+ public:
+ // Element access
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type i, size_type j) const {
+ return functor_type::apply (expression1_type (e1_), e2_ (i, j));
+ }
+
+ // Closure comparison
+ BOOST_UBLAS_INLINE
+ bool same_closure (const matrix_binary_scalar1 &mbs1) const {
+ return &e1_ == &(mbs1.e1_) &&
+ (*this).e2_.same_closure (mbs1.e2_);
+ }
+
+ // Iterator types
+ private:
+ typedef expression1_type const_subiterator1_type;
+ typedef typename E2::const_iterator1 const_iterator21_type;
+ typedef typename E2::const_iterator2 const_iterator22_type;
+ typedef const value_type *const_pointer;
+
+ public:
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ typedef indexed_const_iterator1<const_closure_type, typename const_iterator21_type::iterator_category> const_iterator1;
+ typedef const_iterator1 iterator1;
+ typedef indexed_const_iterator2<const_closure_type, typename const_iterator22_type::iterator_category> const_iterator2;
+ typedef const_iterator2 iterator2;
+#else
+ class const_iterator1;
+ typedef const_iterator1 iterator1;
+ class const_iterator2;
+ typedef const_iterator2 iterator2;
+#endif
+ typedef reverse_iterator_base1<const_iterator1> const_reverse_iterator1;
+ typedef reverse_iterator_base2<const_iterator2> const_reverse_iterator2;
+
+ // Element lookup
+ BOOST_UBLAS_INLINE
+ const_iterator1 find1 (int rank, size_type i, size_type j) const {
+ const_iterator21_type it21 (e2_.find1 (rank, i, j));
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ return const_iterator1 (*this, it21.index1 (), it21.index2 ());
+#else
+ return const_iterator1 (*this, const_subiterator1_type (e1_), it21);
+#endif
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 find2 (int rank, size_type i, size_type j) const {
+ const_iterator22_type it22 (e2_.find2 (rank, i, j));
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ return const_iterator2 (*this, it22.index1 (), it22.index2 ());
+#else
+ return const_iterator2 (*this, const_subiterator1_type (e1_), it22);
+#endif
+ }
+
+ // Iterators enhance the iterators of the referenced expression
+ // with the binary functor.
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator1:
+ public container_const_reference<matrix_binary_scalar1>,
+ public iterator_base_traits<typename E2::const_iterator1::iterator_category>::template
+ iterator_base<const_iterator1, value_type>::type {
+ public:
+ typedef typename E2::const_iterator1::iterator_category iterator_category;
+ typedef typename matrix_binary_scalar1::difference_type difference_type;
+ typedef typename matrix_binary_scalar1::value_type value_type;
+ typedef typename matrix_binary_scalar1::const_reference reference;
+ typedef typename matrix_binary_scalar1::const_pointer pointer;
+
+ typedef const_iterator2 dual_iterator_type;
+ typedef const_reverse_iterator2 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator1 ():
+ container_const_reference<self_type> (), it1_ (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator1 (const self_type &mbs, const const_subiterator1_type &it1, const const_iterator21_type &it2):
+ container_const_reference<self_type> (mbs), it1_ (it1), it2_ (it2) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator ++ () {
+ ++ it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator -- () {
+ -- it2_ ;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator += (difference_type n) {
+ it2_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator -= (difference_type n) {
+ it2_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ // FIXME we shouldn't compare floats
+ // BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ - it.it2_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ return functor_type::apply (it1_, *it2_);
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 begin () const {
+ return (*this) ().find2 (1, index1 (), 0);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 end () const {
+ return (*this) ().find2 (1, index1 (), (*this) ().size2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rbegin () const {
+ return const_reverse_iterator2 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rend () const {
+ return const_reverse_iterator2 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it2_.index1 ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it2_.index2 ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator = (const const_iterator1 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it1_ = it.it1_;
+ it2_ = it.it2_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ // FIXME we shouldn't compare floats
+ // BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ == it.it2_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ // FIXME we shouldn't compare floats
+ // BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ < it.it2_;
+ }
+
+ private:
+ const_subiterator1_type it1_;
+ const_iterator21_type it2_;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator1 begin1 () const {
+ return find1 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 end1 () const {
+ return find1 (0, size1 (), 0);
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator2:
+ public container_const_reference<matrix_binary_scalar1>,
+ public iterator_base_traits<typename E2::const_iterator2::iterator_category>::template
+ iterator_base<const_iterator2, value_type>::type {
+ public:
+ typedef typename E2::const_iterator2::iterator_category iterator_category;
+ typedef typename matrix_binary_scalar1::difference_type difference_type;
+ typedef typename matrix_binary_scalar1::value_type value_type;
+ typedef typename matrix_binary_scalar1::const_reference reference;
+ typedef typename matrix_binary_scalar1::const_pointer pointer;
+
+ typedef const_iterator1 dual_iterator_type;
+ typedef const_reverse_iterator1 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator2 ():
+ container_const_reference<self_type> (), it1_ (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator2 (const self_type &mbs, const const_subiterator1_type &it1, const const_iterator22_type &it2):
+ container_const_reference<self_type> (mbs), it1_ (it1), it2_ (it2) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator ++ () {
+ ++ it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator -- () {
+ -- it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator += (difference_type n) {
+ it2_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator -= (difference_type n) {
+ it2_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ // FIXME we shouldn't compare floats
+ // BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ - it.it2_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ return functor_type::apply (it1_, *it2_);
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 begin () const {
+ return (*this) ().find1 (1, 0, index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 end () const {
+ return (*this) ().find1 (1, (*this) ().size1 (), index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rbegin () const {
+ return const_reverse_iterator1 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rend () const {
+ return const_reverse_iterator1 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it2_.index1 ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it2_.index2 ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator = (const const_iterator2 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it1_ = it.it1_;
+ it2_ = it.it2_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ // FIXME we shouldn't compare floats
+ // BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ == it.it2_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ // FIXME we shouldn't compare floats
+ // BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ < it.it2_;
+ }
+
+ private:
+ const_subiterator1_type it1_;
+ const_iterator22_type it2_;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator2 begin2 () const {
+ return find2 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 end2 () const {
+ return find2 (0, 0, size2 ());
+ }
+
+ // Reverse iterators
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rbegin1 () const {
+ return const_reverse_iterator1 (end1 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rend1 () const {
+ return const_reverse_iterator1 (begin1 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rbegin2 () const {
+ return const_reverse_iterator2 (end2 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rend2 () const {
+ return const_reverse_iterator2 (begin2 ());
+ }
+
+ private:
+ expression1_closure_type e1_;
+ expression2_closure_type e2_;
+ };
+
+ template<class E1, class E2, class F>
+ struct matrix_binary_scalar1_traits {
+ typedef matrix_binary_scalar1<E1, E2, F> expression_type; // allow E1 to be builtin type
+#ifndef BOOST_UBLAS_SIMPLE_ET_DEBUG
+ typedef expression_type result_type;
+#else
+ typedef typename E2::matrix_temporary_type result_type;
+#endif
+ };
+
+ // (t * m) [i] [j] = t * m [i] [j]
+ template<class T1, class E2>
+ BOOST_UBLAS_INLINE
+ typename matrix_binary_scalar1_traits<const T1, E2, scalar_multiplies<T1, typename E2::value_type> >::result_type
+ operator * (const T1 &e1,
+ const matrix_expression<E2> &e2) {
+ typedef typename matrix_binary_scalar1_traits<const T1, E2, scalar_multiplies<T1, typename E2::value_type> >::expression_type expression_type;
+ return expression_type (e1, e2 ());
+ }
+
+
+ template<class E1, class E2, class F>
+ class matrix_binary_scalar2:
+ public matrix_expression<matrix_binary_scalar2<E1, E2, F> > {
+
+ typedef E1 expression1_type;
+ typedef E2 expression2_type;
+ typedef F functor_type;
+ public:
+ typedef typename E1::const_closure_type expression1_closure_type;
+ typedef const E2& expression2_closure_type;
+ private:
+ typedef matrix_binary_scalar2<E1, E2, F> self_type;
+ public:
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using matrix_expression<self_type>::operator ();
+#endif
+ typedef typename E1::size_type size_type;
+ typedef typename E1::difference_type difference_type;
+ typedef typename F::result_type value_type;
+ typedef value_type const_reference;
+ typedef const_reference reference;
+
+ typedef const self_type const_closure_type;
+ typedef const_closure_type closure_type;
+ typedef typename E1::orientation_category orientation_category;
+ typedef unknown_storage_tag storage_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ matrix_binary_scalar2 (const expression1_type &e1, const expression2_type &e2):
+ e1_ (e1), e2_ (e2) {}
+
+ // Accessors
+ BOOST_UBLAS_INLINE
+ size_type size1 () const {
+ return e1_.size1 ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type size2 () const {
+ return e1_.size2 ();
+ }
+
+ public:
+ // Element access
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type i, size_type j) const {
+ return functor_type::apply (e1_ (i, j), expression2_type (e2_));
+ }
+
+ // Closure comparison
+ BOOST_UBLAS_INLINE
+ bool same_closure (const matrix_binary_scalar2 &mbs2) const {
+ return (*this).e1_.same_closure (mbs2.e1_) &&
+ &e2_ == &(mbs2.e2_);
+ }
+
+ // Iterator types
+ private:
+ typedef typename E1::const_iterator1 const_iterator11_type;
+ typedef typename E1::const_iterator2 const_iterator12_type;
+ typedef expression2_type const_subiterator2_type;
+ typedef const value_type *const_pointer;
+
+ public:
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ typedef indexed_const_iterator1<const_closure_type, typename const_iterator11_type::iterator_category> const_iterator1;
+ typedef const_iterator1 iterator1;
+ typedef indexed_const_iterator2<const_closure_type, typename const_iterator12_type::iterator_category> const_iterator2;
+ typedef const_iterator2 iterator2;
+#else
+ class const_iterator1;
+ typedef const_iterator1 iterator1;
+ class const_iterator2;
+ typedef const_iterator2 iterator2;
+#endif
+ typedef reverse_iterator_base1<const_iterator1> const_reverse_iterator1;
+ typedef reverse_iterator_base2<const_iterator2> const_reverse_iterator2;
+
+ // Element lookup
+ BOOST_UBLAS_INLINE
+ const_iterator1 find1 (int rank, size_type i, size_type j) const {
+ const_iterator11_type it11 (e1_.find1 (rank, i, j));
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ return const_iterator1 (*this, it11.index1 (), it11.index2 ());
+#else
+ return const_iterator1 (*this, it11, const_subiterator2_type (e2_));
+#endif
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 find2 (int rank, size_type i, size_type j) const {
+ const_iterator12_type it12 (e1_.find2 (rank, i, j));
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ return const_iterator2 (*this, it12.index1 (), it12.index2 ());
+#else
+ return const_iterator2 (*this, it12, const_subiterator2_type (e2_));
+#endif
+ }
+
+ // Iterators enhance the iterators of the referenced expression
+ // with the binary functor.
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator1:
+ public container_const_reference<matrix_binary_scalar2>,
+ public iterator_base_traits<typename E1::const_iterator1::iterator_category>::template
+ iterator_base<const_iterator1, value_type>::type {
+ public:
+ typedef typename E1::const_iterator1::iterator_category iterator_category;
+ typedef typename matrix_binary_scalar2::difference_type difference_type;
+ typedef typename matrix_binary_scalar2::value_type value_type;
+ typedef typename matrix_binary_scalar2::const_reference reference;
+ typedef typename matrix_binary_scalar2::const_pointer pointer;
+
+ typedef const_iterator2 dual_iterator_type;
+ typedef const_reverse_iterator2 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator1 ():
+ container_const_reference<self_type> (), it1_ (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator1 (const self_type &mbs, const const_iterator11_type &it1, const const_subiterator2_type &it2):
+ container_const_reference<self_type> (mbs), it1_ (it1), it2_ (it2) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator ++ () {
+ ++ it1_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator -- () {
+ -- it1_ ;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator += (difference_type n) {
+ it1_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator -= (difference_type n) {
+ it1_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ // FIXME we shouldn't compare floats
+ // BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ - it.it1_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ return functor_type::apply (*it1_, it2_);
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 begin () const {
+ return (*this) ().find2 (1, index1 (), 0);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 end () const {
+ return (*this) ().find2 (1, index1 (), (*this) ().size2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rbegin () const {
+ return const_reverse_iterator2 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rend () const {
+ return const_reverse_iterator2 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it1_.index1 ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it1_.index2 ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator = (const const_iterator1 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it1_ = it.it1_;
+ it2_ = it.it2_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ // FIXME we shouldn't compare floats
+ // BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ == it.it1_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ // FIXME we shouldn't compare floats
+ // BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ < it.it1_;
+ }
+
+ private:
+ const_iterator11_type it1_;
+ const_subiterator2_type it2_;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator1 begin1 () const {
+ return find1 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 end1 () const {
+ return find1 (0, size1 (), 0);
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator2:
+ public container_const_reference<matrix_binary_scalar2>,
+ public iterator_base_traits<typename E1::const_iterator2::iterator_category>::template
+ iterator_base<const_iterator2, value_type>::type {
+ public:
+ typedef typename E1::const_iterator2::iterator_category iterator_category;
+ typedef typename matrix_binary_scalar2::difference_type difference_type;
+ typedef typename matrix_binary_scalar2::value_type value_type;
+ typedef typename matrix_binary_scalar2::const_reference reference;
+ typedef typename matrix_binary_scalar2::const_pointer pointer;
+
+ typedef const_iterator1 dual_iterator_type;
+ typedef const_reverse_iterator1 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator2 ():
+ container_const_reference<self_type> (), it1_ (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator2 (const self_type &mbs, const const_iterator12_type &it1, const const_subiterator2_type &it2):
+ container_const_reference<self_type> (mbs), it1_ (it1), it2_ (it2) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator ++ () {
+ ++ it1_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator -- () {
+ -- it1_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator += (difference_type n) {
+ it1_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator -= (difference_type n) {
+ it1_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ // FIXME we shouldn't compare floats
+ // BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ - it.it1_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ return functor_type::apply (*it1_, it2_);
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 begin () const {
+ return (*this) ().find1 (1, 0, index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 end () const {
+ return (*this) ().find1 (1, (*this) ().size1 (), index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rbegin () const {
+ return const_reverse_iterator1 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rend () const {
+ return const_reverse_iterator1 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it1_.index1 ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it1_.index2 ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator = (const const_iterator2 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it1_ = it.it1_;
+ it2_ = it.it2_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ // FIXME we shouldn't compare floats
+ // BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ == it.it1_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ // FIXME we shouldn't compare floats
+ // BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ < it.it1_;
+ }
+
+ private:
+ const_iterator12_type it1_;
+ const_subiterator2_type it2_;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator2 begin2 () const {
+ return find2 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 end2 () const {
+ return find2 (0, 0, size2 ());
+ }
+
+ // Reverse iterators
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rbegin1 () const {
+ return const_reverse_iterator1 (end1 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rend1 () const {
+ return const_reverse_iterator1 (begin1 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rbegin2 () const {
+ return const_reverse_iterator2 (end2 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rend2 () const {
+ return const_reverse_iterator2 (begin2 ());
+ }
+
+ private:
+ expression1_closure_type e1_;
+ expression2_closure_type e2_;
+ };
+
+ template<class E1, class E2, class F>
+ struct matrix_binary_scalar2_traits {
+ typedef matrix_binary_scalar2<E1, E2, F> expression_type; // allow E2 to be builtin type
+#ifndef BOOST_UBLAS_SIMPLE_ET_DEBUG
+ typedef expression_type result_type;
+#else
+ typedef typename E1::matrix_temporary_type result_type;
+#endif
+ };
+
+ // (m * t) [i] [j] = m [i] [j] * t
+ template<class E1, class T2>
+ BOOST_UBLAS_INLINE
+ typename matrix_binary_scalar2_traits<E1, const T2, scalar_multiplies<typename E1::value_type, T2> >::result_type
+ operator * (const matrix_expression<E1> &e1,
+ const T2 &e2) {
+ typedef typename matrix_binary_scalar2_traits<E1, const T2, scalar_multiplies<typename E1::value_type, T2> >::expression_type expression_type;
+ return expression_type (e1 (), e2);
+ }
+
+ // (m / t) [i] [j] = m [i] [j] / t
+ template<class E1, class T2>
+ BOOST_UBLAS_INLINE
+ typename matrix_binary_scalar2_traits<E1, const T2, scalar_divides<typename E1::value_type, T2> >::result_type
+ operator / (const matrix_expression<E1> &e1,
+ const T2 &e2) {
+ typedef typename matrix_binary_scalar2_traits<E1, const T2, scalar_divides<typename E1::value_type, T2> >::expression_type expression_type;
+ return expression_type (e1 (), e2);
+ }
+
+
+ template<class E1, class E2, class F>
+ class matrix_vector_binary1:
+ public vector_expression<matrix_vector_binary1<E1, E2, F> > {
+
+ public:
+ typedef E1 expression1_type;
+ typedef E2 expression2_type;
+ private:
+ typedef F functor_type;
+ public:
+ typedef typename E1::const_closure_type expression1_closure_type;
+ typedef typename E2::const_closure_type expression2_closure_type;
+ private:
+ typedef matrix_vector_binary1<E1, E2, F> self_type;
+ public:
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using vector_expression<self_type>::operator ();
+#endif
+ static const unsigned complexity = 1;
+ typedef typename promote_traits<typename E1::size_type, typename E2::size_type>::promote_type size_type;
+ typedef typename promote_traits<typename E1::difference_type, typename E2::difference_type>::promote_type difference_type;
+ typedef typename F::result_type value_type;
+ typedef value_type const_reference;
+ typedef const_reference reference;
+ typedef const self_type const_closure_type;
+ typedef const_closure_type closure_type;
+ typedef unknown_storage_tag storage_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ matrix_vector_binary1 (const expression1_type &e1, const expression2_type &e2):
+ e1_ (e1), e2_ (e2) {}
+
+ // Accessors
+ BOOST_UBLAS_INLINE
+ size_type size () const {
+ return e1_.size1 ();
+ }
+
+ public:
+ // Expression accessors
+ BOOST_UBLAS_INLINE
+ const expression1_closure_type &expression1 () const {
+ return e1_;
+ }
+ BOOST_UBLAS_INLINE
+ const expression2_closure_type &expression2 () const {
+ return e2_;
+ }
+
+ public:
+ // Element access
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type i) const {
+ return functor_type::apply (e1_, e2_, i);
+ }
+
+ // Closure comparison
+ BOOST_UBLAS_INLINE
+ bool same_closure (const matrix_vector_binary1 &mvb1) const {
+ return (*this).expression1 ().same_closure (mvb1.expression1 ()) &&
+ (*this).expression2 ().same_closure (mvb1.expression2 ());
+ }
+
+ // Iterator types
+ private:
+ typedef typename E1::const_iterator1 const_subiterator1_type;
+ typedef typename E2::const_iterator const_subiterator2_type;
+ typedef const value_type *const_pointer;
+
+ public:
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ typedef indexed_const_iterator<const_closure_type, typename const_subiterator1_type::iterator_category> const_iterator;
+ typedef const_iterator iterator;
+#else
+ class const_iterator;
+ typedef const_iterator iterator;
+#endif
+
+ // Element lookup
+ BOOST_UBLAS_INLINE
+ const_iterator find (size_type i) const {
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ const_subiterator1_type it1 (e1_.find1 (0, i, 0));
+ return const_iterator (*this, it1.index1 ());
+#else
+ return const_iterator (*this, e1_.find1 (0, i, 0));
+#endif
+ }
+
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator:
+ public container_const_reference<matrix_vector_binary1>,
+ public iterator_base_traits<typename iterator_restrict_traits<typename E1::const_iterator1::iterator_category,
+ typename E2::const_iterator::iterator_category>::iterator_category>::template
+ iterator_base<const_iterator, value_type>::type {
+ public:
+ typedef typename iterator_restrict_traits<typename E1::const_iterator1::iterator_category,
+ typename E2::const_iterator::iterator_category>::iterator_category iterator_category;
+ typedef typename matrix_vector_binary1::difference_type difference_type;
+ typedef typename matrix_vector_binary1::value_type value_type;
+ typedef typename matrix_vector_binary1::const_reference reference;
+ typedef typename matrix_vector_binary1::const_pointer pointer;
+
+ // Construction and destruction
+#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING
+ BOOST_UBLAS_INLINE
+ const_iterator ():
+ container_const_reference<self_type> (), it1_ (), e2_begin_ (), e2_end_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator (const self_type &mvb, const const_subiterator1_type &it1):
+ container_const_reference<self_type> (mvb), it1_ (it1), e2_begin_ (mvb.expression2 ().begin ()), e2_end_ (mvb.expression2 ().end ()) {}
+#else
+ BOOST_UBLAS_INLINE
+ const_iterator ():
+ container_const_reference<self_type> (), it1_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator (const self_type &mvb, const const_subiterator1_type &it1):
+ container_const_reference<self_type> (mvb), it1_ (it1) {}
+#endif
+
+ private:
+ // Dense random access specialization
+ BOOST_UBLAS_INLINE
+ value_type dereference (dense_random_access_iterator_tag) const {
+ const self_type &mvb = (*this) ();
+#ifdef BOOST_UBLAS_USE_INDEXING
+ return mvb (index ());
+#elif BOOST_UBLAS_USE_ITERATING
+ difference_type size = BOOST_UBLAS_SAME (mvb.expression1 ().size2 (), mvb.expression2 ().size ());
+#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING
+ return functor_type::apply (size, it1_.begin (), e2_begin_);
+#else
+ return functor_type::apply (size, it1_.begin (), mvb.expression2 ().begin ());
+#endif
+#else
+ difference_type size = BOOST_UBLAS_SAME (mvb.expression1 ().size2 (), mvb.expression2 ().size ());
+ if (size >= BOOST_UBLAS_ITERATOR_THRESHOLD)
+#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING
+ return functor_type::apply (size, it1_.begin (), e2_begin_);
+#else
+ return functor_type::apply (size, it1_.begin (), mvb.expression2 ().begin ());
+#endif
+ else
+ return mvb (index ());
+#endif
+ }
+
+ // Packed bidirectional specialization
+ BOOST_UBLAS_INLINE
+ value_type dereference (packed_random_access_iterator_tag) const {
+#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING
+ return functor_type::apply (it1_.begin (), it1_.end (), e2_begin_, e2_end_);
+#else
+ const self_type &mvb = (*this) ();
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ return functor_type::apply (it1_.begin (), it1_.end (),
+ mvb.expression2 ().begin (), mvb.expression2 ().end ());
+#else
+ return functor_type::apply (boost::numeric::ublas::begin (it1_, iterator1_tag ()),
+ boost::numeric::ublas::end (it1_, iterator1_tag ()),
+ mvb.expression2 ().begin (), mvb.expression2 ().end ());
+#endif
+#endif
+ }
+
+ // Sparse bidirectional specialization
+ BOOST_UBLAS_INLINE
+ value_type dereference (sparse_bidirectional_iterator_tag) const {
+#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING
+ return functor_type::apply (it1_.begin (), it1_.end (), e2_begin_, e2_end_, sparse_bidirectional_iterator_tag ());
+#else
+ const self_type &mvb = (*this) ();
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ return functor_type::apply (it1_.begin (), it1_.end (),
+ mvb.expression2 ().begin (), mvb.expression2 ().end (), sparse_bidirectional_iterator_tag ());
+#else
+ return functor_type::apply (boost::numeric::ublas::begin (it1_, iterator1_tag ()),
+ boost::numeric::ublas::end (it1_, iterator1_tag ()),
+ mvb.expression2 ().begin (), mvb.expression2 ().end (), sparse_bidirectional_iterator_tag ());
+#endif
+#endif
+ }
+
+ public:
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator &operator ++ () {
+ ++ it1_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator -- () {
+ -- it1_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator += (difference_type n) {
+ it1_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator -= (difference_type n) {
+ it1_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it1_ - it.it1_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ return dereference (iterator_category ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+ // Index
+ BOOST_UBLAS_INLINE
+ size_type index () const {
+ return it1_.index1 ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator &operator = (const const_iterator &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it1_ = it.it1_;
+#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING
+ e2_begin_ = it.e2_begin_;
+ e2_end_ = it.e2_end_;
+#endif
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it1_ == it.it1_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it1_ < it.it1_;
+ }
+
+ private:
+ const_subiterator1_type it1_;
+#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING
+ // Mutable due to assignment
+ /* const */ const_subiterator2_type e2_begin_;
+ /* const */ const_subiterator2_type e2_end_;
+#endif
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator begin () const {
+ return find (0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator end () const {
+ return find (size ());
+ }
+
+ // Reverse iterator
+ typedef reverse_iterator_base<const_iterator> const_reverse_iterator;
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rbegin () const {
+ return const_reverse_iterator (end ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rend () const {
+ return const_reverse_iterator (begin ());
+ }
+
+ private:
+ expression1_closure_type e1_;
+ expression2_closure_type e2_;
+ };
+
+ template<class T1, class E1, class T2, class E2>
+ struct matrix_vector_binary1_traits {
+ typedef unknown_storage_tag storage_category;
+ typedef row_major_tag orientation_category;
+ typedef typename promote_traits<T1, T2>::promote_type promote_type;
+ typedef matrix_vector_binary1<E1, E2, matrix_vector_prod1<T1, T2, promote_type> > expression_type;
+#ifndef BOOST_UBLAS_SIMPLE_ET_DEBUG
+ typedef expression_type result_type;
+#else
+ typedef typename E1::vector_temporary_type result_type;
+#endif
+ };
+
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ typename matrix_vector_binary1_traits<typename E1::value_type, E1,
+ typename E2::value_type, E2>::result_type
+ prod (const matrix_expression<E1> &e1,
+ const vector_expression<E2> &e2,
+ unknown_storage_tag,
+ row_major_tag) {
+ typedef typename matrix_vector_binary1_traits<typename E1::value_type, E1,
+ typename E2::value_type, E2>::expression_type expression_type;
+ return expression_type (e1 (), e2 ());
+ }
+
+ // Dispatcher
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ typename matrix_vector_binary1_traits<typename E1::value_type, E1,
+ typename E2::value_type, E2>::result_type
+ prod (const matrix_expression<E1> &e1,
+ const vector_expression<E2> &e2) {
+ BOOST_STATIC_ASSERT (E2::complexity == 0);
+ typedef typename matrix_vector_binary1_traits<typename E1::value_type, E1,
+ typename E2::value_type, E2>::storage_category storage_category;
+ typedef typename matrix_vector_binary1_traits<typename E1::value_type, E1,
+ typename E2::value_type, E2>::orientation_category orientation_category;
+ return prod (e1, e2, storage_category (), orientation_category ());
+ }
+
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ typename matrix_vector_binary1_traits<typename type_traits<typename E1::value_type>::precision_type, E1,
+ typename type_traits<typename E2::value_type>::precision_type, E2>::result_type
+ prec_prod (const matrix_expression<E1> &e1,
+ const vector_expression<E2> &e2,
+ unknown_storage_tag,
+ row_major_tag) {
+ typedef typename matrix_vector_binary1_traits<typename type_traits<typename E1::value_type>::precision_type, E1,
+ typename type_traits<typename E2::value_type>::precision_type, E2>::expression_type expression_type;
+ return expression_type (e1 (), e2 ());
+ }
+
+ // Dispatcher
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ typename matrix_vector_binary1_traits<typename type_traits<typename E1::value_type>::precision_type, E1,
+ typename type_traits<typename E2::value_type>::precision_type, E2>::result_type
+ prec_prod (const matrix_expression<E1> &e1,
+ const vector_expression<E2> &e2) {
+ BOOST_STATIC_ASSERT (E2::complexity == 0);
+ typedef typename matrix_vector_binary1_traits<typename type_traits<typename E1::value_type>::precision_type, E1,
+ typename type_traits<typename E2::value_type>::precision_type, E2>::storage_category storage_category;
+ typedef typename matrix_vector_binary1_traits<typename type_traits<typename E1::value_type>::precision_type, E1,
+ typename type_traits<typename E2::value_type>::precision_type, E2>::orientation_category orientation_category;
+ return prec_prod (e1, e2, storage_category (), orientation_category ());
+ }
+
+ template<class V, class E1, class E2>
+ BOOST_UBLAS_INLINE
+ V &
+ prod (const matrix_expression<E1> &e1,
+ const vector_expression<E2> &e2,
+ V &v) {
+ return v.assign (prod (e1, e2));
+ }
+
+ template<class V, class E1, class E2>
+ BOOST_UBLAS_INLINE
+ V &
+ prec_prod (const matrix_expression<E1> &e1,
+ const vector_expression<E2> &e2,
+ V &v) {
+ return v.assign (prec_prod (e1, e2));
+ }
+
+ template<class V, class E1, class E2>
+ BOOST_UBLAS_INLINE
+ V
+ prod (const matrix_expression<E1> &e1,
+ const vector_expression<E2> &e2) {
+ return V (prod (e1, e2));
+ }
+
+ template<class V, class E1, class E2>
+ BOOST_UBLAS_INLINE
+ V
+ prec_prod (const matrix_expression<E1> &e1,
+ const vector_expression<E2> &e2) {
+ return V (prec_prod (e1, e2));
+ }
+
+ template<class E1, class E2, class F>
+ class matrix_vector_binary2:
+ public vector_expression<matrix_vector_binary2<E1, E2, F> > {
+
+ typedef E1 expression1_type;
+ typedef E2 expression2_type;
+ typedef F functor_type;
+ public:
+ typedef typename E1::const_closure_type expression1_closure_type;
+ typedef typename E2::const_closure_type expression2_closure_type;
+ private:
+ typedef matrix_vector_binary2<E1, E2, F> self_type;
+ public:
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using vector_expression<self_type>::operator ();
+#endif
+ static const unsigned complexity = 1;
+ typedef typename promote_traits<typename E1::size_type, typename E2::size_type>::promote_type size_type;
+ typedef typename promote_traits<typename E1::difference_type, typename E2::difference_type>::promote_type difference_type;
+ typedef typename F::result_type value_type;
+ typedef value_type const_reference;
+ typedef const_reference reference;
+ typedef const self_type const_closure_type;
+ typedef const_closure_type closure_type;
+ typedef unknown_storage_tag storage_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ matrix_vector_binary2 (const expression1_type &e1, const expression2_type &e2):
+ e1_ (e1), e2_ (e2) {}
+
+ // Accessors
+ BOOST_UBLAS_INLINE
+ size_type size () const {
+ return e2_.size2 ();
+ }
+
+ public:
+ // Expression accessors
+ BOOST_UBLAS_INLINE
+ const expression1_closure_type &expression1 () const {
+ return e1_;
+ }
+ BOOST_UBLAS_INLINE
+ const expression2_closure_type &expression2 () const {
+ return e2_;
+ }
+ public:
+
+ // Element access
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type j) const {
+ return functor_type::apply (e1_, e2_, j);
+ }
+
+ // Closure comparison
+ BOOST_UBLAS_INLINE
+ bool same_closure (const matrix_vector_binary2 &mvb2) const {
+ return (*this).expression1 ().same_closure (mvb2.expression1 ()) &&
+ (*this).expression2 ().same_closure (mvb2.expression2 ());
+ }
+
+ // Iterator types
+ private:
+ typedef typename E1::const_iterator const_subiterator1_type;
+ typedef typename E2::const_iterator2 const_subiterator2_type;
+ typedef const value_type *const_pointer;
+
+ public:
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ typedef indexed_const_iterator<const_closure_type, typename const_subiterator2_type::iterator_category> const_iterator;
+ typedef const_iterator iterator;
+#else
+ class const_iterator;
+ typedef const_iterator iterator;
+#endif
+
+ // Element lookup
+ BOOST_UBLAS_INLINE
+ const_iterator find (size_type j) const {
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ const_subiterator2_type it2 (e2_.find2 (0, 0, j));
+ return const_iterator (*this, it2.index2 ());
+#else
+ return const_iterator (*this, e2_.find2 (0, 0, j));
+#endif
+ }
+
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator:
+ public container_const_reference<matrix_vector_binary2>,
+ public iterator_base_traits<typename iterator_restrict_traits<typename E1::const_iterator::iterator_category,
+ typename E2::const_iterator2::iterator_category>::iterator_category>::template
+ iterator_base<const_iterator, value_type>::type {
+ public:
+ typedef typename iterator_restrict_traits<typename E1::const_iterator::iterator_category,
+ typename E2::const_iterator2::iterator_category>::iterator_category iterator_category;
+ typedef typename matrix_vector_binary2::difference_type difference_type;
+ typedef typename matrix_vector_binary2::value_type value_type;
+ typedef typename matrix_vector_binary2::const_reference reference;
+ typedef typename matrix_vector_binary2::const_pointer pointer;
+
+ // Construction and destruction
+#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING
+ BOOST_UBLAS_INLINE
+ const_iterator ():
+ container_const_reference<self_type> (), it2_ (), e1_begin_ (), e1_end_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator (const self_type &mvb, const const_subiterator2_type &it2):
+ container_const_reference<self_type> (mvb), it2_ (it2), e1_begin_ (mvb.expression1 ().begin ()), e1_end_ (mvb.expression1 ().end ()) {}
+#else
+ BOOST_UBLAS_INLINE
+ const_iterator ():
+ container_const_reference<self_type> (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator (const self_type &mvb, const const_subiterator2_type &it2):
+ container_const_reference<self_type> (mvb), it2_ (it2) {}
+#endif
+
+ private:
+ // Dense random access specialization
+ BOOST_UBLAS_INLINE
+ value_type dereference (dense_random_access_iterator_tag) const {
+ const self_type &mvb = (*this) ();
+#ifdef BOOST_UBLAS_USE_INDEXING
+ return mvb (index ());
+#elif BOOST_UBLAS_USE_ITERATING
+ difference_type size = BOOST_UBLAS_SAME (mvb.expression2 ().size1 (), mvb.expression1 ().size ());
+#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING
+ return functor_type::apply (size, e1_begin_, it2_.begin ());
+#else
+ return functor_type::apply (size, mvb.expression1 ().begin (), it2_.begin ());
+#endif
+#else
+ difference_type size = BOOST_UBLAS_SAME (mvb.expression2 ().size1 (), mvb.expression1 ().size ());
+ if (size >= BOOST_UBLAS_ITERATOR_THRESHOLD)
+#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING
+ return functor_type::apply (size, e1_begin_, it2_.begin ());
+#else
+ return functor_type::apply (size, mvb.expression1 ().begin (), it2_.begin ());
+#endif
+ else
+ return mvb (index ());
+#endif
+ }
+
+ // Packed bidirectional specialization
+ BOOST_UBLAS_INLINE
+ value_type dereference (packed_random_access_iterator_tag) const {
+#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING
+ return functor_type::apply (e1_begin_, e1_end_, it2_.begin (), it2_.end ());
+#else
+ const self_type &mvb = (*this) ();
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ return functor_type::apply (mvb.expression1 ().begin (), mvb.expression1 ().end (),
+ it2_.begin (), it2_.end ());
+#else
+ return functor_type::apply (mvb.expression1 ().begin (), mvb.expression1 ().end (),
+ boost::numeric::ublas::begin (it2_, iterator2_tag ()),
+ boost::numeric::ublas::end (it2_, iterator2_tag ()));
+#endif
+#endif
+ }
+
+ // Sparse bidirectional specialization
+ BOOST_UBLAS_INLINE
+ value_type dereference (sparse_bidirectional_iterator_tag) const {
+#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING
+ return functor_type::apply (e1_begin_, e1_end_, it2_.begin (), it2_.end (), sparse_bidirectional_iterator_tag ());
+#else
+ const self_type &mvb = (*this) ();
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ return functor_type::apply (mvb.expression1 ().begin (), mvb.expression1 ().end (),
+ it2_.begin (), it2_.end (), sparse_bidirectional_iterator_tag ());
+#else
+ return functor_type::apply (mvb.expression1 ().begin (), mvb.expression1 ().end (),
+ boost::numeric::ublas::begin (it2_, iterator2_tag ()),
+ boost::numeric::ublas::end (it2_, iterator2_tag ()), sparse_bidirectional_iterator_tag ());
+#endif
+#endif
+ }
+
+ public:
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator &operator ++ () {
+ ++ it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator -- () {
+ -- it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator += (difference_type n) {
+ it2_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator -= (difference_type n) {
+ it2_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it2_ - it.it2_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ return dereference (iterator_category ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+ // Index
+ BOOST_UBLAS_INLINE
+ size_type index () const {
+ return it2_.index2 ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator &operator = (const const_iterator &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it2_ = it.it2_;
+#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING
+ e1_begin_ = it.e1_begin_;
+ e1_end_ = it.e1_end_;
+#endif
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it2_ == it.it2_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it2_ < it.it2_;
+ }
+
+ private:
+ const_subiterator2_type it2_;
+#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING
+ // Mutable due to assignment
+ /* const */ const_subiterator1_type e1_begin_;
+ /* const */ const_subiterator1_type e1_end_;
+#endif
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator begin () const {
+ return find (0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator end () const {
+ return find (size ());
+ }
+
+ // Reverse iterator
+ typedef reverse_iterator_base<const_iterator> const_reverse_iterator;
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rbegin () const {
+ return const_reverse_iterator (end ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rend () const {
+ return const_reverse_iterator (begin ());
+ }
+
+ private:
+ expression1_closure_type e1_;
+ expression2_closure_type e2_;
+ };
+
+ template<class T1, class E1, class T2, class E2>
+ struct matrix_vector_binary2_traits {
+ typedef unknown_storage_tag storage_category;
+ typedef column_major_tag orientation_category;
+ typedef typename promote_traits<T1, T2>::promote_type promote_type;
+ typedef matrix_vector_binary2<E1, E2, matrix_vector_prod2<T1, T2, promote_type> > expression_type;
+#ifndef BOOST_UBLAS_SIMPLE_ET_DEBUG
+ typedef expression_type result_type;
+#else
+ typedef typename E2::vector_temporary_type result_type;
+#endif
+ };
+
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ typename matrix_vector_binary2_traits<typename E1::value_type, E1,
+ typename E2::value_type, E2>::result_type
+ prod (const vector_expression<E1> &e1,
+ const matrix_expression<E2> &e2,
+ unknown_storage_tag,
+ column_major_tag) {
+ typedef typename matrix_vector_binary2_traits<typename E1::value_type, E1,
+ typename E2::value_type, E2>::expression_type expression_type;
+ return expression_type (e1 (), e2 ());
+ }
+
+ // Dispatcher
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ typename matrix_vector_binary2_traits<typename E1::value_type, E1,
+ typename E2::value_type, E2>::result_type
+ prod (const vector_expression<E1> &e1,
+ const matrix_expression<E2> &e2) {
+ BOOST_STATIC_ASSERT (E1::complexity == 0);
+ typedef typename matrix_vector_binary2_traits<typename E1::value_type, E1,
+ typename E2::value_type, E2>::storage_category storage_category;
+ typedef typename matrix_vector_binary2_traits<typename E1::value_type, E1,
+ typename E2::value_type, E2>::orientation_category orientation_category;
+ return prod (e1, e2, storage_category (), orientation_category ());
+ }
+
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ typename matrix_vector_binary2_traits<typename type_traits<typename E1::value_type>::precision_type, E1,
+ typename type_traits<typename E2::value_type>::precision_type, E2>::result_type
+ prec_prod (const vector_expression<E1> &e1,
+ const matrix_expression<E2> &e2,
+ unknown_storage_tag,
+ column_major_tag) {
+ typedef typename matrix_vector_binary2_traits<typename type_traits<typename E1::value_type>::precision_type, E1,
+ typename type_traits<typename E2::value_type>::precision_type, E2>::expression_type expression_type;
+ return expression_type (e1 (), e2 ());
+ }
+
+ // Dispatcher
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ typename matrix_vector_binary2_traits<typename type_traits<typename E1::value_type>::precision_type, E1,
+ typename type_traits<typename E2::value_type>::precision_type, E2>::result_type
+ prec_prod (const vector_expression<E1> &e1,
+ const matrix_expression<E2> &e2) {
+ BOOST_STATIC_ASSERT (E1::complexity == 0);
+ typedef typename matrix_vector_binary2_traits<typename type_traits<typename E1::value_type>::precision_type, E1,
+ typename type_traits<typename E2::value_type>::precision_type, E2>::storage_category storage_category;
+ typedef typename matrix_vector_binary2_traits<typename type_traits<typename E1::value_type>::precision_type, E1,
+ typename type_traits<typename E2::value_type>::precision_type, E2>::orientation_category orientation_category;
+ return prec_prod (e1, e2, storage_category (), orientation_category ());
+ }
+
+ template<class V, class E1, class E2>
+ BOOST_UBLAS_INLINE
+ V &
+ prod (const vector_expression<E1> &e1,
+ const matrix_expression<E2> &e2,
+ V &v) {
+ return v.assign (prod (e1, e2));
+ }
+
+ template<class V, class E1, class E2>
+ BOOST_UBLAS_INLINE
+ V &
+ prec_prod (const vector_expression<E1> &e1,
+ const matrix_expression<E2> &e2,
+ V &v) {
+ return v.assign (prec_prod (e1, e2));
+ }
+
+ template<class V, class E1, class E2>
+ BOOST_UBLAS_INLINE
+ V
+ prod (const vector_expression<E1> &e1,
+ const matrix_expression<E2> &e2) {
+ return V (prod (e1, e2));
+ }
+
+ template<class V, class E1, class E2>
+ BOOST_UBLAS_INLINE
+ V
+ prec_prod (const vector_expression<E1> &e1,
+ const matrix_expression<E2> &e2) {
+ return V (prec_prod (e1, e2));
+ }
+
+ template<class E1, class E2, class F>
+ class matrix_matrix_binary:
+ public matrix_expression<matrix_matrix_binary<E1, E2, F> > {
+
+ public:
+ typedef E1 expression1_type;
+ typedef E2 expression2_type;
+ private:
+ typedef F functor_type;
+ public:
+ typedef typename E1::const_closure_type expression1_closure_type;
+ typedef typename E2::const_closure_type expression2_closure_type;
+ private:
+ typedef matrix_matrix_binary<E1, E2, F> self_type;
+ public:
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using matrix_expression<self_type>::operator ();
+#endif
+ static const unsigned complexity = 1;
+ typedef typename promote_traits<typename E1::size_type, typename E2::size_type>::promote_type size_type;
+ typedef typename promote_traits<typename E1::difference_type, typename E2::difference_type>::promote_type difference_type;
+ typedef typename F::result_type value_type;
+ typedef value_type const_reference;
+ typedef const_reference reference;
+ typedef const self_type const_closure_type;
+ typedef const_closure_type closure_type;
+ typedef unknown_orientation_tag orientation_category;
+ typedef unknown_storage_tag storage_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ matrix_matrix_binary (const expression1_type &e1, const expression2_type &e2):
+ e1_ (e1), e2_ (e2) {}
+
+ // Accessors
+ BOOST_UBLAS_INLINE
+ size_type size1 () const {
+ return e1_.size1 ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type size2 () const {
+ return e2_.size2 ();
+ }
+
+ public:
+ // Expression accessors
+ BOOST_UBLAS_INLINE
+ const expression1_closure_type &expression1 () const {
+ return e1_;
+ }
+ BOOST_UBLAS_INLINE
+ const expression2_closure_type &expression2 () const {
+ return e2_;
+ }
+
+ public:
+ // Element access
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type i, size_type j) const {
+ return functor_type::apply (e1_, e2_, i, j);
+ }
+
+ // Closure comparison
+ BOOST_UBLAS_INLINE
+ bool same_closure (const matrix_matrix_binary &mmb) const {
+ return (*this).expression1 ().same_closure (mmb.expression1 ()) &&
+ (*this).expression2 ().same_closure (mmb.expression2 ());
+ }
+
+ // Iterator types
+ private:
+ typedef typename E1::const_iterator1 const_iterator11_type;
+ typedef typename E1::const_iterator2 const_iterator12_type;
+ typedef typename E2::const_iterator1 const_iterator21_type;
+ typedef typename E2::const_iterator2 const_iterator22_type;
+ typedef const value_type *const_pointer;
+
+ public:
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ typedef typename iterator_restrict_traits<typename const_iterator11_type::iterator_category,
+ typename const_iterator22_type::iterator_category>::iterator_category iterator_category;
+ typedef indexed_const_iterator1<const_closure_type, iterator_category> const_iterator1;
+ typedef const_iterator1 iterator1;
+ typedef indexed_const_iterator2<const_closure_type, iterator_category> const_iterator2;
+ typedef const_iterator2 iterator2;
+#else
+ class const_iterator1;
+ typedef const_iterator1 iterator1;
+ class const_iterator2;
+ typedef const_iterator2 iterator2;
+#endif
+ typedef reverse_iterator_base1<const_iterator1> const_reverse_iterator1;
+ typedef reverse_iterator_base2<const_iterator2> const_reverse_iterator2;
+
+ // Element lookup
+ BOOST_UBLAS_INLINE
+ const_iterator1 find1 (int /* rank */, size_type i, size_type j) const {
+ // FIXME sparse matrix tests fail!
+ // const_iterator11_type it11 (e1_.find1 (rank, i, 0));
+ const_iterator11_type it11 (e1_.find1 (0, i, 0));
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ return const_iterator1 (*this, it11.index1 (), j);
+#else
+ // FIXME sparse matrix tests fail!
+ // const_iterator22_type it22 (e2_.find2 (rank, 0, j));
+ const_iterator22_type it22 (e2_.find2 (0, 0, j));
+ return const_iterator1 (*this, it11, it22);
+#endif
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 find2 (int /* rank */, size_type i, size_type j) const {
+ // FIXME sparse matrix tests fail!
+ // const_iterator22_type it22 (e2_.find2 (rank, 0, j));
+ const_iterator22_type it22 (e2_.find2 (0, 0, j));
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ return const_iterator2 (*this, i, it22.index2 ());
+#else
+ // FIXME sparse matrix tests fail!
+ // const_iterator11_type it11 (e1_.find1 (rank, i, 0));
+ const_iterator11_type it11 (e1_.find1 (0, i, 0));
+ return const_iterator2 (*this, it11, it22);
+#endif
+ }
+
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator1:
+ public container_const_reference<matrix_matrix_binary>,
+ public iterator_base_traits<typename iterator_restrict_traits<typename E1::const_iterator1::iterator_category,
+ typename E2::const_iterator2::iterator_category>::iterator_category>::template
+ iterator_base<const_iterator1, value_type>::type {
+ public:
+ typedef typename iterator_restrict_traits<typename E1::const_iterator1::iterator_category,
+ typename E2::const_iterator2::iterator_category>::iterator_category iterator_category;
+ typedef typename matrix_matrix_binary::difference_type difference_type;
+ typedef typename matrix_matrix_binary::value_type value_type;
+ typedef typename matrix_matrix_binary::const_reference reference;
+ typedef typename matrix_matrix_binary::const_pointer pointer;
+
+ typedef const_iterator2 dual_iterator_type;
+ typedef const_reverse_iterator2 dual_reverse_iterator_type;
+
+ // Construction and destruction
+#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING
+ BOOST_UBLAS_INLINE
+ const_iterator1 ():
+ container_const_reference<self_type> (), it1_ (), it2_ (), it2_begin_ (), it2_end_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator1 (const self_type &mmb, const const_iterator11_type &it1, const const_iterator22_type &it2):
+ container_const_reference<self_type> (mmb), it1_ (it1), it2_ (it2), it2_begin_ (it2.begin ()), it2_end_ (it2.end ()) {}
+#else
+ BOOST_UBLAS_INLINE
+ const_iterator1 ():
+ container_const_reference<self_type> (), it1_ (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator1 (const self_type &mmb, const const_iterator11_type &it1, const const_iterator22_type &it2):
+ container_const_reference<self_type> (mmb), it1_ (it1), it2_ (it2) {}
+#endif
+
+ private:
+ // Random access specialization
+ BOOST_UBLAS_INLINE
+ value_type dereference (dense_random_access_iterator_tag) const {
+ const self_type &mmb = (*this) ();
+#ifdef BOOST_UBLAS_USE_INDEXING
+ return mmb (index1 (), index2 ());
+#elif BOOST_UBLAS_USE_ITERATING
+ difference_type size = BOOST_UBLAS_SAME (mmb.expression1 ().size2 (), mmb.expression2 ().size1 ());
+#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING
+ return functor_type::apply (size, it1_.begin (), it2_begin_);
+#else
+ return functor_type::apply (size, it1_.begin (), it2_.begin ());
+#endif
+#else
+ difference_type size = BOOST_UBLAS_SAME (mmb.expression1 ().size2 (), mmb.expression2 ().size1 ());
+ if (size >= BOOST_UBLAS_ITERATOR_THRESHOLD)
+#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING
+ return functor_type::apply (size, it1_.begin (), it2_begin_);
+#else
+ return functor_type::apply (size, it1_.begin (), it2_.begin ());
+#endif
+ else
+ return mmb (index1 (), index2 ());
+#endif
+ }
+
+ // Packed bidirectional specialization
+ BOOST_UBLAS_INLINE
+ value_type dereference (packed_random_access_iterator_tag) const {
+#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING
+ return functor_type::apply (it1_.begin (), it1_.end (),
+ it2_begin_, it2_end_, packed_random_access_iterator_tag ());
+#else
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ return functor_type::apply (it1_.begin (), it1_.end (),
+ it2_.begin (), it2_.end (), packed_random_access_iterator_tag ());
+#else
+ return functor_type::apply (boost::numeric::ublas::begin (it1_, iterator1_tag ()),
+ boost::numeric::ublas::end (it1_, iterator1_tag ()),
+ boost::numeric::ublas::begin (it2_, iterator2_tag ()),
+ boost::numeric::ublas::end (it2_, iterator2_tag ()), packed_random_access_iterator_tag ());
+#endif
+#endif
+ }
+
+ // Sparse bidirectional specialization
+ BOOST_UBLAS_INLINE
+ value_type dereference (sparse_bidirectional_iterator_tag) const {
+#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING
+ return functor_type::apply (it1_.begin (), it1_.end (),
+ it2_begin_, it2_end_, sparse_bidirectional_iterator_tag ());
+#else
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ return functor_type::apply (it1_.begin (), it1_.end (),
+ it2_.begin (), it2_.end (), sparse_bidirectional_iterator_tag ());
+#else
+ return functor_type::apply (boost::numeric::ublas::begin (it1_, iterator1_tag ()),
+ boost::numeric::ublas::end (it1_, iterator1_tag ()),
+ boost::numeric::ublas::begin (it2_, iterator2_tag ()),
+ boost::numeric::ublas::end (it2_, iterator2_tag ()), sparse_bidirectional_iterator_tag ());
+#endif
+#endif
+ }
+
+ public:
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator ++ () {
+ ++ it1_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator -- () {
+ -- it1_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator += (difference_type n) {
+ it1_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator -= (difference_type n) {
+ it1_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ - it.it1_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ return dereference (iterator_category ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 begin () const {
+ return (*this) ().find2 (1, index1 (), 0);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 end () const {
+ return (*this) ().find2 (1, index1 (), (*this) ().size2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rbegin () const {
+ return const_reverse_iterator2 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rend () const {
+ return const_reverse_iterator2 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it1_.index1 ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it2_.index2 ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator = (const const_iterator1 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it1_ = it.it1_;
+ it2_ = it.it2_;
+#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING
+ it2_begin_ = it.it2_begin_;
+ it2_end_ = it.it2_end_;
+#endif
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ == it.it1_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ < it.it1_;
+ }
+
+ private:
+ const_iterator11_type it1_;
+ // Mutable due to assignment
+ /* const */ const_iterator22_type it2_;
+#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING
+ /* const */ const_iterator21_type it2_begin_;
+ /* const */ const_iterator21_type it2_end_;
+#endif
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator1 begin1 () const {
+ return find1 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 end1 () const {
+ return find1 (0, size1 (), 0);
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator2:
+ public container_const_reference<matrix_matrix_binary>,
+ public iterator_base_traits<typename iterator_restrict_traits<typename E1::const_iterator1::iterator_category,
+ typename E2::const_iterator2::iterator_category>::iterator_category>::template
+ iterator_base<const_iterator2, value_type>::type {
+ public:
+ typedef typename iterator_restrict_traits<typename E1::const_iterator1::iterator_category,
+ typename E2::const_iterator2::iterator_category>::iterator_category iterator_category;
+ typedef typename matrix_matrix_binary::difference_type difference_type;
+ typedef typename matrix_matrix_binary::value_type value_type;
+ typedef typename matrix_matrix_binary::const_reference reference;
+ typedef typename matrix_matrix_binary::const_pointer pointer;
+
+ typedef const_iterator1 dual_iterator_type;
+ typedef const_reverse_iterator1 dual_reverse_iterator_type;
+
+ // Construction and destruction
+#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING
+ BOOST_UBLAS_INLINE
+ const_iterator2 ():
+ container_const_reference<self_type> (), it1_ (), it2_ (), it1_begin_ (), it1_end_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator2 (const self_type &mmb, const const_iterator11_type &it1, const const_iterator22_type &it2):
+ container_const_reference<self_type> (mmb), it1_ (it1), it2_ (it2), it1_begin_ (it1.begin ()), it1_end_ (it1.end ()) {}
+#else
+ BOOST_UBLAS_INLINE
+ const_iterator2 ():
+ container_const_reference<self_type> (), it1_ (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator2 (const self_type &mmb, const const_iterator11_type &it1, const const_iterator22_type &it2):
+ container_const_reference<self_type> (mmb), it1_ (it1), it2_ (it2) {}
+#endif
+
+ private:
+ // Random access specialization
+ BOOST_UBLAS_INLINE
+ value_type dereference (dense_random_access_iterator_tag) const {
+ const self_type &mmb = (*this) ();
+#ifdef BOOST_UBLAS_USE_INDEXING
+ return mmb (index1 (), index2 ());
+#elif BOOST_UBLAS_USE_ITERATING
+ difference_type size = BOOST_UBLAS_SAME (mmb.expression1 ().size2 (), mmb.expression2 ().size1 ());
+#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING
+ return functor_type::apply (size, it1_begin_, it2_.begin ());
+#else
+ return functor_type::apply (size, it1_.begin (), it2_.begin ());
+#endif
+#else
+ difference_type size = BOOST_UBLAS_SAME (mmb.expression1 ().size2 (), mmb.expression2 ().size1 ());
+ if (size >= BOOST_UBLAS_ITERATOR_THRESHOLD)
+#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING
+ return functor_type::apply (size, it1_begin_, it2_.begin ());
+#else
+ return functor_type::apply (size, it1_.begin (), it2_.begin ());
+#endif
+ else
+ return mmb (index1 (), index2 ());
+#endif
+ }
+
+ // Packed bidirectional specialization
+ BOOST_UBLAS_INLINE
+ value_type dereference (packed_random_access_iterator_tag) const {
+#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING
+ return functor_type::apply (it1_begin_, it1_end_,
+ it2_.begin (), it2_.end (), packed_random_access_iterator_tag ());
+#else
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ return functor_type::apply (it1_.begin (), it1_.end (),
+ it2_.begin (), it2_.end (), packed_random_access_iterator_tag ());
+#else
+ return functor_type::apply (boost::numeric::ublas::begin (it1_, iterator1_tag ()),
+ boost::numeric::ublas::end (it1_, iterator1_tag ()),
+ boost::numeric::ublas::begin (it2_, iterator2_tag ()),
+ boost::numeric::ublas::end (it2_, iterator2_tag ()), packed_random_access_iterator_tag ());
+#endif
+#endif
+ }
+
+ // Sparse bidirectional specialization
+ BOOST_UBLAS_INLINE
+ value_type dereference (sparse_bidirectional_iterator_tag) const {
+#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING
+ return functor_type::apply (it1_begin_, it1_end_,
+ it2_.begin (), it2_.end (), sparse_bidirectional_iterator_tag ());
+#else
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ return functor_type::apply (it1_.begin (), it1_.end (),
+ it2_.begin (), it2_.end (), sparse_bidirectional_iterator_tag ());
+#else
+ return functor_type::apply (boost::numeric::ublas::begin (it1_, iterator1_tag ()),
+ boost::numeric::ublas::end (it1_, iterator1_tag ()),
+ boost::numeric::ublas::begin (it2_, iterator2_tag ()),
+ boost::numeric::ublas::end (it2_, iterator2_tag ()), sparse_bidirectional_iterator_tag ());
+#endif
+#endif
+ }
+
+ public:
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator ++ () {
+ ++ it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator -- () {
+ -- it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator += (difference_type n) {
+ it2_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator -= (difference_type n) {
+ it2_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ - it.it2_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ return dereference (iterator_category ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 begin () const {
+ return (*this) ().find1 (1, 0, index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 end () const {
+ return (*this) ().find1 (1, (*this) ().size1 (), index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rbegin () const {
+ return const_reverse_iterator1 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rend () const {
+ return const_reverse_iterator1 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it1_.index1 ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it2_.index2 ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator = (const const_iterator2 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it1_ = it.it1_;
+ it2_ = it.it2_;
+#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING
+ it1_begin_ = it.it1_begin_;
+ it1_end_ = it.it1_end_;
+#endif
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ == it.it2_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ < it.it2_;
+ }
+
+ private:
+ // Mutable due to assignment
+ /* const */ const_iterator11_type it1_;
+ const_iterator22_type it2_;
+#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING
+ /* const */ const_iterator12_type it1_begin_;
+ /* const */ const_iterator12_type it1_end_;
+#endif
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator2 begin2 () const {
+ return find2 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 end2 () const {
+ return find2 (0, 0, size2 ());
+ }
+
+ // Reverse iterators
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rbegin1 () const {
+ return const_reverse_iterator1 (end1 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rend1 () const {
+ return const_reverse_iterator1 (begin1 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rbegin2 () const {
+ return const_reverse_iterator2 (end2 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rend2 () const {
+ return const_reverse_iterator2 (begin2 ());
+ }
+
+ private:
+ expression1_closure_type e1_;
+ expression2_closure_type e2_;
+ };
+
+ template<class T1, class E1, class T2, class E2>
+ struct matrix_matrix_binary_traits {
+ typedef unknown_storage_tag storage_category;
+ typedef unknown_orientation_tag orientation_category;
+ typedef typename promote_traits<T1, T2>::promote_type promote_type;
+ typedef matrix_matrix_binary<E1, E2, matrix_matrix_prod<T1, T2, promote_type> > expression_type;
+#ifndef BOOST_UBLAS_SIMPLE_ET_DEBUG
+ typedef expression_type result_type;
+#else
+ typedef typename E1::matrix_temporary_type result_type;
+#endif
+ };
+
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ typename matrix_matrix_binary_traits<typename E1::value_type, E1,
+ typename E2::value_type, E2>::result_type
+ prod (const matrix_expression<E1> &e1,
+ const matrix_expression<E2> &e2,
+ unknown_storage_tag,
+ unknown_orientation_tag) {
+ typedef typename matrix_matrix_binary_traits<typename E1::value_type, E1,
+ typename E2::value_type, E2>::expression_type expression_type;
+ return expression_type (e1 (), e2 ());
+ }
+
+ // Dispatcher
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ typename matrix_matrix_binary_traits<typename E1::value_type, E1,
+ typename E2::value_type, E2>::result_type
+ prod (const matrix_expression<E1> &e1,
+ const matrix_expression<E2> &e2) {
+ BOOST_STATIC_ASSERT (E1::complexity == 0 && E2::complexity == 0);
+ typedef typename matrix_matrix_binary_traits<typename E1::value_type, E1,
+ typename E2::value_type, E2>::storage_category storage_category;
+ typedef typename matrix_matrix_binary_traits<typename E1::value_type, E1,
+ typename E2::value_type, E2>::orientation_category orientation_category;
+ return prod (e1, e2, storage_category (), orientation_category ());
+ }
+
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ typename matrix_matrix_binary_traits<typename type_traits<typename E1::value_type>::precision_type, E1,
+ typename type_traits<typename E2::value_type>::precision_type, E2>::result_type
+ prec_prod (const matrix_expression<E1> &e1,
+ const matrix_expression<E2> &e2,
+ unknown_storage_tag,
+ unknown_orientation_tag) {
+ typedef typename matrix_matrix_binary_traits<typename type_traits<typename E1::value_type>::precision_type, E1,
+ typename type_traits<typename E2::value_type>::precision_type, E2>::expression_type expression_type;
+ return expression_type (e1 (), e2 ());
+ }
+
+ // Dispatcher
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ typename matrix_matrix_binary_traits<typename type_traits<typename E1::value_type>::precision_type, E1,
+ typename type_traits<typename E2::value_type>::precision_type, E2>::result_type
+ prec_prod (const matrix_expression<E1> &e1,
+ const matrix_expression<E2> &e2) {
+ BOOST_STATIC_ASSERT (E1::complexity == 0 && E2::complexity == 0);
+ typedef typename matrix_matrix_binary_traits<typename type_traits<typename E1::value_type>::precision_type, E1,
+ typename type_traits<typename E2::value_type>::precision_type, E2>::storage_category storage_category;
+ typedef typename matrix_matrix_binary_traits<typename type_traits<typename E1::value_type>::precision_type, E1,
+ typename type_traits<typename E2::value_type>::precision_type, E2>::orientation_category orientation_category;
+ return prec_prod (e1, e2, storage_category (), orientation_category ());
+ }
+
+ template<class M, class E1, class E2>
+ BOOST_UBLAS_INLINE
+ M &
+ prod (const matrix_expression<E1> &e1,
+ const matrix_expression<E2> &e2,
+ M &m) {
+ return m.assign (prod (e1, e2));
+ }
+
+ template<class M, class E1, class E2>
+ BOOST_UBLAS_INLINE
+ M &
+ prec_prod (const matrix_expression<E1> &e1,
+ const matrix_expression<E2> &e2,
+ M &m) {
+ return m.assign (prec_prod (e1, e2));
+ }
+
+ template<class M, class E1, class E2>
+ BOOST_UBLAS_INLINE
+ M
+ prod (const matrix_expression<E1> &e1,
+ const matrix_expression<E2> &e2) {
+ return M (prod (e1, e2));
+ }
+
+ template<class M, class E1, class E2>
+ BOOST_UBLAS_INLINE
+ M
+ prec_prod (const matrix_expression<E1> &e1,
+ const matrix_expression<E2> &e2) {
+ return M (prec_prod (e1, e2));
+ }
+
+ template<class E, class F>
+ class matrix_scalar_unary:
+ public scalar_expression<matrix_scalar_unary<E, F> > {
+ public:
+ typedef E expression_type;
+ typedef F functor_type;
+ typedef typename F::result_type value_type;
+ typedef typename E::const_closure_type expression_closure_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ explicit matrix_scalar_unary (const expression_type &e):
+ e_ (e) {}
+
+ private:
+ // Expression accessors
+ BOOST_UBLAS_INLINE
+ const expression_closure_type &expression () const {
+ return e_;
+ }
+
+ public:
+ BOOST_UBLAS_INLINE
+ operator value_type () const {
+ return functor_type::apply (e_);
+ }
+
+ private:
+ expression_closure_type e_;
+ };
+
+ template<class E, class F>
+ struct matrix_scalar_unary_traits {
+ typedef matrix_scalar_unary<E, F> expression_type;
+#ifndef BOOST_UBLAS_SIMPLE_ET_DEBUG
+ typedef expression_type result_type;
+#else
+ typedef typename F::result_type result_type;
+#endif
+ };
+
+ template<class E>
+ BOOST_UBLAS_INLINE
+ typename matrix_scalar_unary_traits<E, matrix_norm_1<typename E::value_type> >::result_type
+ norm_1 (const matrix_expression<E> &e) {
+ typedef typename matrix_scalar_unary_traits<E, matrix_norm_1<typename E::value_type> >::expression_type expression_type;
+ return expression_type (e ());
+ }
+
+ template<class E>
+ BOOST_UBLAS_INLINE
+ typename matrix_scalar_unary_traits<E, matrix_norm_frobenius<typename E::value_type> >::result_type
+ norm_frobenius (const matrix_expression<E> &e) {
+ typedef typename matrix_scalar_unary_traits<E, matrix_norm_frobenius<typename E::value_type> >::expression_type expression_type;
+ return expression_type (e ());
+ }
+
+ template<class E>
+ BOOST_UBLAS_INLINE
+ typename matrix_scalar_unary_traits<E, matrix_norm_inf<typename E::value_type> >::result_type
+ norm_inf (const matrix_expression<E> &e) {
+ typedef typename matrix_scalar_unary_traits<E, matrix_norm_inf<typename E::value_type> >::expression_type expression_type;
+ return expression_type (e ());
+ }
+
+}}}
+
+#endif
diff --git a/boost/boost/numeric/ublas/matrix_proxy.hpp b/boost/boost/numeric/ublas/matrix_proxy.hpp
new file mode 100644
index 00000000000..764461d21f7
--- /dev/null
+++ b/boost/boost/numeric/ublas/matrix_proxy.hpp
@@ -0,0 +1,5097 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without fee,
+// provided that the above copyright notice appear in all copies and
+// that both that copyright notice and this permission notice appear
+// in supporting documentation. The authors make no representations
+// about the suitability of this software for any purpose.
+// It is provided "as is" without express or implied warranty.
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#ifndef _BOOST_UBLAS_MATRIX_PROXY_
+#define _BOOST_UBLAS_MATRIX_PROXY_
+
+#include <boost/numeric/ublas/matrix_expression.hpp>
+#include <boost/numeric/ublas/detail/vector_assign.hpp>
+#include <boost/numeric/ublas/detail/matrix_assign.hpp>
+#include <boost/numeric/ublas/detail/temporary.hpp>
+
+// Iterators based on ideas of Jeremy Siek
+
+namespace boost { namespace numeric { namespace ublas {
+
+ // Matrix based row vector class
+ template<class M>
+ class matrix_row:
+ public vector_expression<matrix_row<M> > {
+
+ typedef matrix_row<M> self_type;
+ public:
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using vector_expression<self_type>::operator ();
+#endif
+ typedef M matrix_type;
+ typedef typename M::size_type size_type;
+ typedef typename M::difference_type difference_type;
+ typedef typename M::value_type value_type;
+ typedef typename M::const_reference const_reference;
+ typedef typename boost::mpl::if_<boost::is_const<M>,
+ typename M::const_reference,
+ typename M::reference>::type reference;
+ typedef typename boost::mpl::if_<boost::is_const<M>,
+ typename M::const_closure_type,
+ typename M::closure_type>::type matrix_closure_type;
+ typedef const self_type const_closure_type;
+ typedef self_type closure_type;
+ typedef typename storage_restrict_traits<typename M::storage_category,
+ dense_proxy_tag>::storage_category storage_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ matrix_row (matrix_type &data, size_type i):
+ data_ (data), i_ (i) {
+ // Early checking of preconditions here.
+ // BOOST_UBLAS_CHECK (i_ < data_.size1 (), bad_index ());
+ }
+
+ // Accessors
+ BOOST_UBLAS_INLINE
+ size_type size () const {
+ return data_.size2 ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type index () const {
+ return i_;
+ }
+
+ // Storage accessors
+ BOOST_UBLAS_INLINE
+ const matrix_closure_type &data () const {
+ return data_;
+ }
+ BOOST_UBLAS_INLINE
+ matrix_closure_type &data () {
+ return data_;
+ }
+
+ // Element access
+#ifndef BOOST_UBLAS_PROXY_CONST_MEMBER
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type j) const {
+ return data_ (i_, j);
+ }
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type j) {
+ return data_ (i_, j);
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (size_type j) const {
+ return (*this) (j);
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (size_type j) {
+ return (*this) (j);
+ }
+#else
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type j) const {
+ return data_ (i_, j);
+ }
+
+ BOOST_UBLAS_INLINE
+ reference operator [] (size_type j) const {
+ return (*this) (j);
+ }
+#endif
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ matrix_row &operator = (const matrix_row &mr) {
+ // ISSUE need a temporary, proxy can be overlaping alias
+ vector_assign<scalar_assign> (*this, typename vector_temporary_traits<M>::type (mr));
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ matrix_row &assign_temporary (matrix_row &mr) {
+ // assign elements, proxied container remains the same
+ vector_assign<scalar_assign> (*this, mr);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix_row &operator = (const vector_expression<AE> &ae) {
+ vector_assign<scalar_assign> (*this, typename vector_temporary_traits<M>::type (ae));
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix_row &assign (const vector_expression<AE> &ae) {
+ vector_assign<scalar_assign> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix_row &operator += (const vector_expression<AE> &ae) {
+ vector_assign<scalar_assign> (*this, typename vector_temporary_traits<M>::type (*this + ae));
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix_row &plus_assign (const vector_expression<AE> &ae) {
+ vector_assign<scalar_plus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix_row &operator -= (const vector_expression<AE> &ae) {
+ vector_assign<scalar_assign> (*this, typename vector_temporary_traits<M>::type (*this - ae));
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix_row &minus_assign (const vector_expression<AE> &ae) {
+ vector_assign<scalar_minus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ matrix_row &operator *= (const AT &at) {
+ vector_assign_scalar<scalar_multiplies_assign> (*this, at);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ matrix_row &operator /= (const AT &at) {
+ vector_assign_scalar<scalar_divides_assign> (*this, at);
+ return *this;
+ }
+
+ // Closure comparison
+ BOOST_UBLAS_INLINE
+ bool same_closure (const matrix_row &mr) const {
+ return (*this).data_.same_closure (mr.data_);
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const matrix_row &mr) const {
+ return (*this).data_ == mr.data_ && index () == mr.index ();
+ }
+
+ // Swapping
+ BOOST_UBLAS_INLINE
+ void swap (matrix_row mr) {
+ if (this != &mr) {
+ BOOST_UBLAS_CHECK (size () == mr.size (), bad_size ());
+ // Sparse ranges may be nonconformant now.
+ // std::swap_ranges (begin (), end (), mr.begin ());
+ vector_swap<scalar_swap> (*this, mr);
+ }
+ }
+ BOOST_UBLAS_INLINE
+ friend void swap (matrix_row mr1, matrix_row mr2) {
+ mr1.swap (mr2);
+ }
+
+ // Iterator types
+ private:
+ typedef typename M::const_iterator2 const_subiterator_type;
+ typedef typename boost::mpl::if_<boost::is_const<M>,
+ typename M::const_iterator2,
+ typename M::iterator2>::type subiterator_type;
+
+ public:
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ typedef indexed_iterator<matrix_row<matrix_type>,
+ typename subiterator_type::iterator_category> iterator;
+ typedef indexed_const_iterator<matrix_row<matrix_type>,
+ typename const_subiterator_type::iterator_category> const_iterator;
+#else
+ class const_iterator;
+ class iterator;
+#endif
+
+ // Element lookup
+ BOOST_UBLAS_INLINE
+ const_iterator find (size_type j) const {
+ const_subiterator_type it2 (data_.find2 (1, i_, j));
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ return const_iterator (*this, it2.index2 ());
+#else
+ return const_iterator (*this, it2);
+#endif
+ }
+ BOOST_UBLAS_INLINE
+ iterator find (size_type j) {
+ subiterator_type it2 (data_.find2 (1, i_, j));
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ return iterator (*this, it2.index2 ());
+#else
+ return iterator (*this, it2);
+#endif
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator:
+ public container_const_reference<matrix_row>,
+ public iterator_base_traits<typename const_subiterator_type::iterator_category>::template
+ iterator_base<const_iterator, value_type>::type {
+ public:
+ typedef typename const_subiterator_type::value_type value_type;
+ typedef typename const_subiterator_type::difference_type difference_type;
+ typedef typename const_subiterator_type::reference reference;
+ typedef typename const_subiterator_type::pointer pointer;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator ():
+ container_const_reference<self_type> (), it_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator (const self_type &mr, const const_subiterator_type &it):
+ container_const_reference<self_type> (mr), it_ (it) {}
+ BOOST_UBLAS_INLINE
+ const_iterator (const typename self_type::iterator &it): // ISSUE self_type:: stops VC8 using std::iterator here
+ container_const_reference<self_type> (it ()), it_ (it.it_) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator &operator ++ () {
+ ++ it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator -- () {
+ -- it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator += (difference_type n) {
+ it_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator -= (difference_type n) {
+ it_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ - it.it_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ BOOST_UBLAS_CHECK (index () < (*this) ().size (), bad_index ());
+ return *it_;
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+ // Index
+ BOOST_UBLAS_INLINE
+ size_type index () const {
+ return it_.index2 ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator &operator = (const const_iterator &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ == it.it_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ < it.it_;
+ }
+
+ private:
+ const_subiterator_type it_;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator begin () const {
+ return find (0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator end () const {
+ return find (size ());
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class iterator:
+ public container_reference<matrix_row>,
+ public iterator_base_traits<typename subiterator_type::iterator_category>::template
+ iterator_base<iterator, value_type>::type {
+ public:
+ typedef typename subiterator_type::value_type value_type;
+ typedef typename subiterator_type::difference_type difference_type;
+ typedef typename subiterator_type::reference reference;
+ typedef typename subiterator_type::pointer pointer;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ iterator ():
+ container_reference<self_type> (), it_ () {}
+ BOOST_UBLAS_INLINE
+ iterator (self_type &mr, const subiterator_type &it):
+ container_reference<self_type> (mr), it_ (it) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ iterator &operator ++ () {
+ ++ it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator &operator -- () {
+ -- it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator &operator += (difference_type n) {
+ it_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator &operator -= (difference_type n) {
+ it_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ - it.it_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ BOOST_UBLAS_CHECK (index () < (*this) ().size (), bad_index ());
+ return *it_;
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+ // Index
+ BOOST_UBLAS_INLINE
+ size_type index () const {
+ return it_.index2 ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ iterator &operator = (const iterator &it) {
+ container_reference<self_type>::assign (&it ());
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ == it.it_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ < it.it_;
+ }
+
+ private:
+ subiterator_type it_;
+
+ friend class const_iterator;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ iterator begin () {
+ return find (0);
+ }
+ BOOST_UBLAS_INLINE
+ iterator end () {
+ return find (size ());
+ }
+
+ // Reverse iterator
+ typedef reverse_iterator_base<const_iterator> const_reverse_iterator;
+ typedef reverse_iterator_base<iterator> reverse_iterator;
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rbegin () const {
+ return const_reverse_iterator (end ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rend () const {
+ return const_reverse_iterator (begin ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator rbegin () {
+ return reverse_iterator (end ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator rend () {
+ return reverse_iterator (begin ());
+ }
+
+ private:
+ matrix_closure_type data_;
+ size_type i_;
+ };
+
+ // Projections
+ template<class M>
+ BOOST_UBLAS_INLINE
+ matrix_row<M> row (M &data, typename M::size_type i) {
+ return matrix_row<M> (data, i);
+ }
+ template<class M>
+ BOOST_UBLAS_INLINE
+ const matrix_row<const M> row (const M &data, typename M::size_type i) {
+ return matrix_row<const M> (data, i);
+ }
+
+ // Specialize temporary
+ template <class M>
+ struct vector_temporary_traits< matrix_row<M> >
+ : vector_temporary_traits< M > {} ;
+ template <class M>
+ struct vector_temporary_traits< const matrix_row<M> >
+ : vector_temporary_traits< M > {} ;
+
+ // Matrix based column vector class
+ template<class M>
+ class matrix_column:
+ public vector_expression<matrix_column<M> > {
+
+ typedef matrix_column<M> self_type;
+ public:
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using vector_expression<self_type>::operator ();
+#endif
+ typedef M matrix_type;
+ typedef typename M::size_type size_type;
+ typedef typename M::difference_type difference_type;
+ typedef typename M::value_type value_type;
+ typedef typename M::const_reference const_reference;
+ typedef typename boost::mpl::if_<boost::is_const<M>,
+ typename M::const_reference,
+ typename M::reference>::type reference;
+ typedef typename boost::mpl::if_<boost::is_const<M>,
+ typename M::const_closure_type,
+ typename M::closure_type>::type matrix_closure_type;
+ typedef const self_type const_closure_type;
+ typedef self_type closure_type;
+ typedef typename storage_restrict_traits<typename M::storage_category,
+ dense_proxy_tag>::storage_category storage_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ matrix_column (matrix_type &data, size_type j):
+ data_ (data), j_ (j) {
+ // Early checking of preconditions here.
+ // BOOST_UBLAS_CHECK (j_ < data_.size2 (), bad_index ());
+ }
+
+ // Accessors
+ BOOST_UBLAS_INLINE
+ size_type size () const {
+ return data_.size1 ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type index () const {
+ return j_;
+ }
+
+ // Storage accessors
+ BOOST_UBLAS_INLINE
+ const matrix_closure_type &data () const {
+ return data_;
+ }
+ BOOST_UBLAS_INLINE
+ matrix_closure_type &data () {
+ return data_;
+ }
+
+ // Element access
+#ifndef BOOST_UBLAS_PROXY_CONST_MEMBER
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type i) const {
+ return data_ (i, j_);
+ }
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type i) {
+ return data_ (i, j_);
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (size_type i) const {
+ return (*this) (i);
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (size_type i) {
+ return (*this) (i);
+ }
+#else
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type i) const {
+ return data_ (i, j_);
+ }
+
+ BOOST_UBLAS_INLINE
+ reference operator [] (size_type i) const {
+ return (*this) (i);
+ }
+#endif
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ matrix_column &operator = (const matrix_column &mc) {
+ // ISSUE need a temporary, proxy can be overlaping alias
+ vector_assign<scalar_assign> (*this, typename vector_temporary_traits<M>::type (mc));
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ matrix_column &assign_temporary (matrix_column &mc) {
+ // assign elements, proxied container remains the same
+ vector_assign<scalar_assign> (*this, mc);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix_column &operator = (const vector_expression<AE> &ae) {
+ vector_assign<scalar_assign> (*this, typename vector_temporary_traits<M>::type (ae));
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix_column &assign (const vector_expression<AE> &ae) {
+ vector_assign<scalar_assign> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix_column &operator += (const vector_expression<AE> &ae) {
+ vector_assign<scalar_assign> (*this, typename vector_temporary_traits<M>::type (*this + ae));
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix_column &plus_assign (const vector_expression<AE> &ae) {
+ vector_assign<scalar_plus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix_column &operator -= (const vector_expression<AE> &ae) {
+ vector_assign<scalar_assign> (*this, typename vector_temporary_traits<M>::type (*this - ae));
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix_column &minus_assign (const vector_expression<AE> &ae) {
+ vector_assign<scalar_minus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ matrix_column &operator *= (const AT &at) {
+ vector_assign_scalar<scalar_multiplies_assign> (*this, at);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ matrix_column &operator /= (const AT &at) {
+ vector_assign_scalar<scalar_divides_assign> (*this, at);
+ return *this;
+ }
+
+ // Closure comparison
+ BOOST_UBLAS_INLINE
+ bool same_closure (const matrix_column &mc) const {
+ return (*this).data_.same_closure (mc.data_);
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const matrix_column &mc) const {
+ return (*this).data_ == mc.data_ && index () == mc.index ();
+ }
+
+ // Swapping
+ BOOST_UBLAS_INLINE
+ void swap (matrix_column mc) {
+ if (this != &mc) {
+ BOOST_UBLAS_CHECK (size () == mc.size (), bad_size ());
+ // Sparse ranges may be nonconformant now.
+ // std::swap_ranges (begin (), end (), mc.begin ());
+ vector_swap<scalar_swap> (*this, mc);
+ }
+ }
+ BOOST_UBLAS_INLINE
+ friend void swap (matrix_column mc1, matrix_column mc2) {
+ mc1.swap (mc2);
+ }
+
+ // Iterator types
+ private:
+ typedef typename M::const_iterator1 const_subiterator_type;
+ typedef typename boost::mpl::if_<boost::is_const<M>,
+ typename M::const_iterator1,
+ typename M::iterator1>::type subiterator_type;
+
+ public:
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ typedef indexed_iterator<matrix_column<matrix_type>,
+ typename subiterator_type::iterator_category> iterator;
+ typedef indexed_const_iterator<matrix_column<matrix_type>,
+ typename const_subiterator_type::iterator_category> const_iterator;
+#else
+ class const_iterator;
+ class iterator;
+#endif
+
+ // Element lookup
+ BOOST_UBLAS_INLINE
+ const_iterator find (size_type i) const {
+ const_subiterator_type it1 (data_.find1 (1, i, j_));
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ return const_iterator (*this, it1.index1 ());
+#else
+ return const_iterator (*this, it1);
+#endif
+ }
+ BOOST_UBLAS_INLINE
+ iterator find (size_type i) {
+ subiterator_type it1 (data_.find1 (1, i, j_));
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ return iterator (*this, it1.index1 ());
+#else
+ return iterator (*this, it1);
+#endif
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator:
+ public container_const_reference<matrix_column>,
+ public iterator_base_traits<typename const_subiterator_type::iterator_category>::template
+ iterator_base<const_iterator, value_type>::type {
+ public:
+ typedef typename const_subiterator_type::value_type value_type;
+ typedef typename const_subiterator_type::difference_type difference_type;
+ typedef typename const_subiterator_type::reference reference;
+ typedef typename const_subiterator_type::pointer pointer;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator ():
+ container_const_reference<self_type> (), it_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator (const self_type &mc, const const_subiterator_type &it):
+ container_const_reference<self_type> (mc), it_ (it) {}
+ BOOST_UBLAS_INLINE
+ const_iterator (const typename self_type::iterator &it): // ISSUE self_type:: stops VC8 using std::iterator here
+ container_const_reference<self_type> (it ()), it_ (it.it_) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator &operator ++ () {
+ ++ it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator -- () {
+ -- it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator += (difference_type n) {
+ it_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator -= (difference_type n) {
+ it_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ - it.it_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ BOOST_UBLAS_CHECK (index () < (*this) ().size (), bad_index ());
+ return *it_;
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+ // Index
+ BOOST_UBLAS_INLINE
+ size_type index () const {
+ return it_.index1 ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator &operator = (const const_iterator &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ == it.it_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ < it.it_;
+ }
+
+ private:
+ const_subiterator_type it_;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator begin () const {
+ return find (0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator end () const {
+ return find (size ());
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class iterator:
+ public container_reference<matrix_column>,
+ public iterator_base_traits<typename subiterator_type::iterator_category>::template
+ iterator_base<iterator, value_type>::type {
+ public:
+ typedef typename subiterator_type::value_type value_type;
+ typedef typename subiterator_type::difference_type difference_type;
+ typedef typename subiterator_type::reference reference;
+ typedef typename subiterator_type::pointer pointer;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ iterator ():
+ container_reference<self_type> (), it_ () {}
+ BOOST_UBLAS_INLINE
+ iterator (self_type &mc, const subiterator_type &it):
+ container_reference<self_type> (mc), it_ (it) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ iterator &operator ++ () {
+ ++ it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator &operator -- () {
+ -- it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator &operator += (difference_type n) {
+ it_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator &operator -= (difference_type n) {
+ it_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ - it.it_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ BOOST_UBLAS_CHECK (index () < (*this) ().size (), bad_index ());
+ return *it_;
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+ // Index
+ BOOST_UBLAS_INLINE
+ size_type index () const {
+ return it_.index1 ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ iterator &operator = (const iterator &it) {
+ container_reference<self_type>::assign (&it ());
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ == it.it_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ < it.it_;
+ }
+
+ private:
+ subiterator_type it_;
+
+ friend class const_iterator;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ iterator begin () {
+ return find (0);
+ }
+ BOOST_UBLAS_INLINE
+ iterator end () {
+ return find (size ());
+ }
+
+ // Reverse iterator
+ typedef reverse_iterator_base<const_iterator> const_reverse_iterator;
+ typedef reverse_iterator_base<iterator> reverse_iterator;
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rbegin () const {
+ return const_reverse_iterator (end ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rend () const {
+ return const_reverse_iterator (begin ());
+ }
+ reverse_iterator rbegin () {
+ return reverse_iterator (end ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator rend () {
+ return reverse_iterator (begin ());
+ }
+
+ private:
+ matrix_closure_type data_;
+ size_type j_;
+ };
+
+ // Projections
+ template<class M>
+ BOOST_UBLAS_INLINE
+ matrix_column<M> column (M &data, typename M::size_type j) {
+ return matrix_column<M> (data, j);
+ }
+ template<class M>
+ BOOST_UBLAS_INLINE
+ const matrix_column<const M> column (const M &data, typename M::size_type j) {
+ return matrix_column<const M> (data, j);
+ }
+
+ // Specialize temporary
+ template <class M>
+ struct vector_temporary_traits< matrix_column<M> >
+ : vector_temporary_traits< M > {} ;
+ template <class M>
+ struct vector_temporary_traits< const matrix_column<M> >
+ : vector_temporary_traits< M > {} ;
+
+ // Matrix based vector range class
+ template<class M>
+ class matrix_vector_range:
+ public vector_expression<matrix_vector_range<M> > {
+
+ typedef matrix_vector_range<M> self_type;
+ public:
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using vector_expression<self_type>::operator ();
+#endif
+ typedef M matrix_type;
+ typedef typename M::size_type size_type;
+ typedef typename M::difference_type difference_type;
+ typedef typename M::value_type value_type;
+ typedef typename M::const_reference const_reference;
+ typedef typename boost::mpl::if_<boost::is_const<M>,
+ typename M::const_reference,
+ typename M::reference>::type reference;
+ typedef typename boost::mpl::if_<boost::is_const<M>,
+ typename M::const_closure_type,
+ typename M::closure_type>::type matrix_closure_type;
+ typedef basic_range<size_type, difference_type> range_type;
+ typedef const self_type const_closure_type;
+ typedef self_type closure_type;
+ typedef typename storage_restrict_traits<typename M::storage_category,
+ dense_proxy_tag>::storage_category storage_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ matrix_vector_range (matrix_type &data, const range_type &r1, const range_type &r2):
+ data_ (data), r1_ (r1.preprocess (data.size1 ())), r2_ (r2.preprocess (data.size2 ())) {
+ // Early checking of preconditions here.
+ // BOOST_UBLAS_CHECK (r1_.start () <= data_.size1 () &&
+ // r1_.start () + r1_.size () <= data_.size1 (), bad_index ());
+ // BOOST_UBLAS_CHECK (r2_.start () <= data_.size2 () &&
+ // r2_.start () + r2_.size () <= data_.size2 (), bad_index ());
+ // BOOST_UBLAS_CHECK (r1_.size () == r2_.size (), bad_size ());
+ }
+
+ // Accessors
+ BOOST_UBLAS_INLINE
+ size_type start1 () const {
+ return r1_.start ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type start2 () const {
+ return r2_.start ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type size () const {
+ return BOOST_UBLAS_SAME (r1_.size (), r2_.size ());
+ }
+
+ // Storage accessors
+ BOOST_UBLAS_INLINE
+ const matrix_closure_type &data () const {
+ return data_;
+ }
+ BOOST_UBLAS_INLINE
+ matrix_closure_type &data () {
+ return data_;
+ }
+
+ // Element access
+#ifndef BOOST_UBLAS_PROXY_CONST_MEMBER
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type i) const {
+ return data_ (r1_ (i), r2_ (i));
+ }
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type i) {
+ return data_ (r1_ (i), r2_ (i));
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (size_type i) const {
+ return (*this) (i);
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (size_type i) {
+ return (*this) (i);
+ }
+#else
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type i) const {
+ return data_ (r1_ (i), r2_ (i));
+ }
+
+ BOOST_UBLAS_INLINE
+ reference operator [] (size_type i) const {
+ return (*this) (i);
+ }
+#endif
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ matrix_vector_range &operator = (const matrix_vector_range &mvr) {
+ // ISSUE need a temporary, proxy can be overlaping alias
+ vector_assign<scalar_assign> (*this, typename vector_temporary_traits<M>::type (mvr));
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ matrix_vector_range &assign_temporary (matrix_vector_range &mvr) {
+ // assign elements, proxied container remains the same
+ vector_assign<scalar_assign> (*this, mvr);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix_vector_range &operator = (const vector_expression<AE> &ae) {
+ vector_assign<scalar_assign> (*this, typename vector_temporary_traits<M>::type (ae));
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix_vector_range &assign (const vector_expression<AE> &ae) {
+ vector_assign<scalar_assign> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix_vector_range &operator += (const vector_expression<AE> &ae) {
+ vector_assign<scalar_assign> (*this, typename vector_temporary_traits<M>::type (*this + ae));
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix_vector_range &plus_assign (const vector_expression<AE> &ae) {
+ vector_assign<scalar_plus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix_vector_range &operator -= (const vector_expression<AE> &ae) {
+ vector_assign<scalar_assign> (*this, typename vector_temporary_traits<M>::type (*this - ae));
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix_vector_range &minus_assign (const vector_expression<AE> &ae) {
+ vector_assign<scalar_minus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ matrix_vector_range &operator *= (const AT &at) {
+ vector_assign_scalar<scalar_multiplies_assign> (*this, at);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ matrix_vector_range &operator /= (const AT &at) {
+ vector_assign_scalar<scalar_divides_assign> (*this, at);
+ return *this;
+ }
+
+ // Closure comparison
+ BOOST_UBLAS_INLINE
+ bool same_closure (const matrix_vector_range &mvr) const {
+ return (*this).data_.same_closure (mvr.data_);
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const matrix_vector_range &mvr) const {
+ return (*this).data_ == mvr.data_ && r1_ == mvr.r1_ && r2_ == mvr.r2_;
+ }
+
+ // Swapping
+ BOOST_UBLAS_INLINE
+ void swap (matrix_vector_range mvr) {
+ if (this != &mvr) {
+ BOOST_UBLAS_CHECK (size () == mvr.size (), bad_size ());
+ // Sparse ranges may be nonconformant now.
+ // std::swap_ranges (begin (), end (), mvr.begin ());
+ vector_swap<scalar_swap> (*this, mvr);
+ }
+ }
+ BOOST_UBLAS_INLINE
+ friend void swap (matrix_vector_range mvr1, matrix_vector_range mvr2) {
+ mvr1.swap (mvr2);
+ }
+
+ // Iterator types
+ private:
+ // Use range as an index - FIXME this fails for packed assignment
+ typedef typename range_type::const_iterator const_subiterator1_type;
+ typedef typename range_type::const_iterator subiterator1_type;
+ typedef typename range_type::const_iterator const_subiterator2_type;
+ typedef typename range_type::const_iterator subiterator2_type;
+
+ public:
+ class const_iterator;
+ class iterator;
+
+ // Element lookup
+ BOOST_UBLAS_INLINE
+ const_iterator find (size_type i) const {
+ return const_iterator (*this, r1_.begin () + i, r2_.begin () + i);
+ }
+ BOOST_UBLAS_INLINE
+ iterator find (size_type i) {
+ return iterator (*this, r1_.begin () + i, r2_.begin () + i);
+ }
+
+ class const_iterator:
+ public container_const_reference<matrix_vector_range>,
+ public iterator_base_traits<typename M::const_iterator1::iterator_category>::template
+ iterator_base<const_iterator, value_type>::type {
+ public:
+ // FIXME Iterator can never be different code was:
+ // typename iterator_restrict_traits<typename M::const_iterator1::iterator_category, typename M::const_iterator2::iterator_category>::iterator_category>
+ BOOST_STATIC_ASSERT ((boost::is_same<typename M::const_iterator1::iterator_category, typename M::const_iterator2::iterator_category>::value ));
+
+ typedef typename matrix_vector_range::value_type value_type;
+ typedef typename matrix_vector_range::difference_type difference_type;
+ typedef typename matrix_vector_range::const_reference reference;
+ typedef const typename matrix_vector_range::value_type *pointer;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator ():
+ container_const_reference<self_type> (), it1_ (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator (const self_type &mvr, const const_subiterator1_type &it1, const const_subiterator2_type &it2):
+ container_const_reference<self_type> (mvr), it1_ (it1), it2_ (it2) {}
+ BOOST_UBLAS_INLINE
+ const_iterator (const typename self_type::iterator &it): // ISSUE self_type:: stops VC8 using std::iterator here
+ container_const_reference<self_type> (it ()), it1_ (it.it1_), it2_ (it.it2_) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator &operator ++ () {
+ ++ it1_;
+ ++ it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator -- () {
+ -- it1_;
+ -- it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator += (difference_type n) {
+ it1_ += n;
+ it2_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator -= (difference_type n) {
+ it1_ -= n;
+ it2_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return BOOST_UBLAS_SAME (it1_ - it.it1_, it2_ - it.it2_);
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ // FIXME replace find with at_element
+ return (*this) ().data_ (*it1_, *it2_);
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+ // Index
+ BOOST_UBLAS_INLINE
+ size_type index () const {
+ return BOOST_UBLAS_SAME (it1_.index (), it2_.index ());
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator &operator = (const const_iterator &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it1_ = it.it1_;
+ it2_ = it.it2_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it1_ == it.it1_ && it2_ == it.it2_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it1_ < it.it1_ && it2_ < it.it2_;
+ }
+
+ private:
+ const_subiterator1_type it1_;
+ const_subiterator2_type it2_;
+ };
+
+ BOOST_UBLAS_INLINE
+ const_iterator begin () const {
+ return find (0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator end () const {
+ return find (size ());
+ }
+
+ class iterator:
+ public container_reference<matrix_vector_range>,
+ public iterator_base_traits<typename M::iterator1::iterator_category>::template
+ iterator_base<iterator, value_type>::type {
+ public:
+ // FIXME Iterator can never be different code was:
+ // typename iterator_restrict_traits<typename M::const_iterator1::iterator_category, typename M::const_iterator2::iterator_category>::iterator_category>
+ BOOST_STATIC_ASSERT ((boost::is_same<typename M::const_iterator1::iterator_category, typename M::const_iterator2::iterator_category>::value ));
+
+ typedef typename matrix_vector_range::value_type value_type;
+ typedef typename matrix_vector_range::difference_type difference_type;
+ typedef typename matrix_vector_range::reference reference;
+ typedef typename matrix_vector_range::value_type *pointer;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ iterator ():
+ container_reference<self_type> (), it1_ (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ iterator (self_type &mvr, const subiterator1_type &it1, const subiterator2_type &it2):
+ container_reference<self_type> (mvr), it1_ (it1), it2_ (it2) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ iterator &operator ++ () {
+ ++ it1_;
+ ++ it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator &operator -- () {
+ -- it1_;
+ -- it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator &operator += (difference_type n) {
+ it1_ += n;
+ it2_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator &operator -= (difference_type n) {
+ it1_ -= n;
+ it2_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return BOOST_UBLAS_SAME (it1_ - it.it1_, it2_ - it.it2_);
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ // FIXME replace find with at_element
+ return (*this) ().data_ (*it1_, *it2_);
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+ // Index
+ BOOST_UBLAS_INLINE
+ size_type index () const {
+ return BOOST_UBLAS_SAME (it1_.index (), it2_.index ());
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ iterator &operator = (const iterator &it) {
+ container_reference<self_type>::assign (&it ());
+ it1_ = it.it1_;
+ it2_ = it.it2_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it1_ == it.it1_ && it2_ == it.it2_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it1_ < it.it1_ && it2_ < it.it2_;
+ }
+
+ private:
+ subiterator1_type it1_;
+ subiterator2_type it2_;
+
+ friend class const_iterator;
+ };
+
+ BOOST_UBLAS_INLINE
+ iterator begin () {
+ return find (0);
+ }
+ BOOST_UBLAS_INLINE
+ iterator end () {
+ return find (size ());
+ }
+
+ // Reverse iterator
+ typedef reverse_iterator_base<const_iterator> const_reverse_iterator;
+ typedef reverse_iterator_base<iterator> reverse_iterator;
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rbegin () const {
+ return const_reverse_iterator (end ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rend () const {
+ return const_reverse_iterator (begin ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator rbegin () {
+ return reverse_iterator (end ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator rend () {
+ return reverse_iterator (begin ());
+ }
+
+ private:
+ matrix_closure_type data_;
+ range_type r1_;
+ range_type r2_;
+ };
+
+ // Specialize temporary
+ template <class M>
+ struct vector_temporary_traits< matrix_vector_range<M> >
+ : vector_temporary_traits< M > {} ;
+ template <class M>
+ struct vector_temporary_traits< const matrix_vector_range<M> >
+ : vector_temporary_traits< M > {} ;
+
+ // Matrix based vector slice class
+ template<class M>
+ class matrix_vector_slice:
+ public vector_expression<matrix_vector_slice<M> > {
+
+ typedef matrix_vector_slice<M> self_type;
+ public:
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using vector_expression<self_type>::operator ();
+#endif
+ typedef M matrix_type;
+ typedef typename M::size_type size_type;
+ typedef typename M::difference_type difference_type;
+ typedef typename M::value_type value_type;
+ typedef typename M::const_reference const_reference;
+ typedef typename boost::mpl::if_<boost::is_const<M>,
+ typename M::const_reference,
+ typename M::reference>::type reference;
+ typedef typename boost::mpl::if_<boost::is_const<M>,
+ typename M::const_closure_type,
+ typename M::closure_type>::type matrix_closure_type;
+ typedef basic_range<size_type, difference_type> range_type;
+ typedef basic_slice<size_type, difference_type> slice_type;
+ typedef const self_type const_closure_type;
+ typedef self_type closure_type;
+ typedef typename storage_restrict_traits<typename M::storage_category,
+ dense_proxy_tag>::storage_category storage_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ matrix_vector_slice (matrix_type &data, const slice_type &s1, const slice_type &s2):
+ data_ (data), s1_ (s1.preprocess (data.size1 ())), s2_ (s2.preprocess (data.size2 ())) {
+ // Early checking of preconditions here.
+ // BOOST_UBLAS_CHECK (s1_.start () <= data_.size1 () &&
+ // s1_.start () + s1_.stride () * (s1_.size () - (s1_.size () > 0)) <= data_.size1 (), bad_index ());
+ // BOOST_UBLAS_CHECK (s2_.start () <= data_.size2 () &&
+ // s2_.start () + s2_.stride () * (s2_.size () - (s2_.size () > 0)) <= data_.size2 (), bad_index ());
+ }
+
+ // Accessors
+ BOOST_UBLAS_INLINE
+ size_type start1 () const {
+ return s1_.start ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type start2 () const {
+ return s2_.start ();
+ }
+ BOOST_UBLAS_INLINE
+ difference_type stride1 () const {
+ return s1_.stride ();
+ }
+ BOOST_UBLAS_INLINE
+ difference_type stride2 () const {
+ return s2_.stride ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type size () const {
+ return BOOST_UBLAS_SAME (s1_.size (), s2_.size ());
+ }
+
+ // Storage accessors
+ BOOST_UBLAS_INLINE
+ const matrix_closure_type &data () const {
+ return data_;
+ }
+ BOOST_UBLAS_INLINE
+ matrix_closure_type &data () {
+ return data_;
+ }
+
+ // Element access
+#ifndef BOOST_UBLAS_PROXY_CONST_MEMBER
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type i) const {
+ return data_ (s1_ (i), s2_ (i));
+ }
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type i) {
+ return data_ (s1_ (i), s2_ (i));
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (size_type i) const {
+ return (*this) (i);
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (size_type i) {
+ return (*this) (i);
+ }
+#else
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type i) const {
+ return data_ (s1_ (i), s2_ (i));
+ }
+
+ BOOST_UBLAS_INLINE
+ reference operator [] (size_type i) const {
+ return (*this) (i);
+ }
+#endif
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ matrix_vector_slice &operator = (const matrix_vector_slice &mvs) {
+ // ISSUE need a temporary, proxy can be overlaping alias
+ vector_assign<scalar_assign> (*this, typename vector_temporary_traits<M>::type (mvs));
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ matrix_vector_slice &assign_temporary (matrix_vector_slice &mvs) {
+ // assign elements, proxied container remains the same
+ vector_assign<scalar_assign> (*this, mvs);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix_vector_slice &operator = (const vector_expression<AE> &ae) {
+ vector_assign<scalar_assign> (*this, typename vector_temporary_traits<M>::type (ae));
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix_vector_slice &assign (const vector_expression<AE> &ae) {
+ vector_assign<scalar_assign> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix_vector_slice &operator += (const vector_expression<AE> &ae) {
+ vector_assign<scalar_assign> (*this, typename vector_temporary_traits<M>::type (*this + ae));
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix_vector_slice &plus_assign (const vector_expression<AE> &ae) {
+ vector_assign<scalar_plus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix_vector_slice &operator -= (const vector_expression<AE> &ae) {
+ vector_assign<scalar_assign> (*this, typename vector_temporary_traits<M>::type (*this - ae));
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix_vector_slice &minus_assign (const vector_expression<AE> &ae) {
+ vector_assign<scalar_minus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ matrix_vector_slice &operator *= (const AT &at) {
+ vector_assign_scalar<scalar_multiplies_assign> (*this, at);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ matrix_vector_slice &operator /= (const AT &at) {
+ vector_assign_scalar<scalar_divides_assign> (*this, at);
+ return *this;
+ }
+
+ // Closure comparison
+ BOOST_UBLAS_INLINE
+ bool same_closure (const matrix_vector_slice &mvs) const {
+ return (*this).data_.same_closure (mvs.data_);
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const matrix_vector_slice &mvs) const {
+ return (*this).data_ == mvs.data_ && s1_ == mvs.s1_ && s2_ == mvs.s2_;
+ }
+
+ // Swapping
+ BOOST_UBLAS_INLINE
+ void swap (matrix_vector_slice mvs) {
+ if (this != &mvs) {
+ BOOST_UBLAS_CHECK (size () == mvs.size (), bad_size ());
+ // Sparse ranges may be nonconformant now.
+ // std::swap_ranges (begin (), end (), mvs.begin ());
+ vector_swap<scalar_swap> (*this, mvs);
+ }
+ }
+ BOOST_UBLAS_INLINE
+ friend void swap (matrix_vector_slice mvs1, matrix_vector_slice mvs2) {
+ mvs1.swap (mvs2);
+ }
+
+ // Iterator types
+ private:
+ // Use slice as an index - FIXME this fails for packed assignment
+ typedef typename slice_type::const_iterator const_subiterator1_type;
+ typedef typename slice_type::const_iterator subiterator1_type;
+ typedef typename slice_type::const_iterator const_subiterator2_type;
+ typedef typename slice_type::const_iterator subiterator2_type;
+
+ public:
+ class const_iterator;
+ class iterator;
+
+ // Element lookup
+ BOOST_UBLAS_INLINE
+ const_iterator find (size_type i) const {
+ return const_iterator (*this, s1_.begin () + i, s2_.begin () + i);
+ }
+ BOOST_UBLAS_INLINE
+ iterator find (size_type i) {
+ return iterator (*this, s1_.begin () + i, s2_.begin () + i);
+ }
+
+ // Iterators simply are indices.
+
+ class const_iterator:
+ public container_const_reference<matrix_vector_slice>,
+ public iterator_base_traits<typename M::const_iterator1::iterator_category>::template
+ iterator_base<const_iterator, value_type>::type {
+ public:
+ // FIXME Iterator can never be different code was:
+ // typename iterator_restrict_traits<typename M::const_iterator1::iterator_category, typename M::const_iterator2::iterator_category>::iterator_category>
+ BOOST_STATIC_ASSERT ((boost::is_same<typename M::const_iterator1::iterator_category, typename M::const_iterator2::iterator_category>::value ));
+
+ typedef typename matrix_vector_slice::value_type value_type;
+ typedef typename matrix_vector_slice::difference_type difference_type;
+ typedef typename matrix_vector_slice::const_reference reference;
+ typedef const typename matrix_vector_slice::value_type *pointer;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator ():
+ container_const_reference<self_type> (), it1_ (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator (const self_type &mvs, const const_subiterator1_type &it1, const const_subiterator2_type &it2):
+ container_const_reference<self_type> (mvs), it1_ (it1), it2_ (it2) {}
+ BOOST_UBLAS_INLINE
+ const_iterator (const typename self_type::iterator &it): // ISSUE vector:: stops VC8 using std::iterator here
+ container_const_reference<self_type> (it ()), it1_ (it.it1_), it2_ (it.it2_) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator &operator ++ () {
+ ++ it1_;
+ ++ it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator -- () {
+ -- it1_;
+ -- it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator += (difference_type n) {
+ it1_ += n;
+ it2_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator -= (difference_type n) {
+ it1_ -= n;
+ it2_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return BOOST_UBLAS_SAME (it1_ - it.it1_, it2_ - it.it2_);
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ // FIXME replace find with at_element
+ return (*this) ().data_ (*it1_, *it2_);
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+ // Index
+ BOOST_UBLAS_INLINE
+ size_type index () const {
+ return BOOST_UBLAS_SAME (it1_.index (), it2_.index ());
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator &operator = (const const_iterator &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it1_ = it.it1_;
+ it2_ = it.it2_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it1_ == it.it1_ && it2_ == it.it2_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it1_ < it.it1_ && it2_ < it.it2_;
+ }
+
+ private:
+ const_subiterator1_type it1_;
+ const_subiterator2_type it2_;
+ };
+
+ BOOST_UBLAS_INLINE
+ const_iterator begin () const {
+ return find (0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator end () const {
+ return find (size ());
+ }
+
+ class iterator:
+ public container_reference<matrix_vector_slice>,
+ public iterator_base_traits<typename M::iterator1::iterator_category>::template
+ iterator_base<iterator, value_type>::type {
+ public:
+ // FIXME Iterator can never be different code was:
+ // typename iterator_restrict_traits<typename M::const_iterator1::iterator_category, typename M::const_iterator2::iterator_category>::iterator_category>
+ BOOST_STATIC_ASSERT ((boost::is_same<typename M::const_iterator1::iterator_category, typename M::const_iterator2::iterator_category>::value ));
+
+ typedef typename matrix_vector_slice::value_type value_type;
+ typedef typename matrix_vector_slice::difference_type difference_type;
+ typedef typename matrix_vector_slice::reference reference;
+ typedef typename matrix_vector_slice::value_type *pointer;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ iterator ():
+ container_reference<self_type> (), it1_ (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ iterator (self_type &mvs, const subiterator1_type &it1, const subiterator2_type &it2):
+ container_reference<self_type> (mvs), it1_ (it1), it2_ (it2) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ iterator &operator ++ () {
+ ++ it1_;
+ ++ it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator &operator -- () {
+ -- it1_;
+ -- it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator &operator += (difference_type n) {
+ it1_ += n;
+ it2_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator &operator -= (difference_type n) {
+ it1_ -= n;
+ it2_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return BOOST_UBLAS_SAME (it1_ - it.it1_, it2_ - it.it2_);
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ // FIXME replace find with at_element
+ return (*this) ().data_ (*it1_, *it2_);
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+ // Index
+ BOOST_UBLAS_INLINE
+ size_type index () const {
+ return BOOST_UBLAS_SAME (it1_.index (), it2_.index ());
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ iterator &operator = (const iterator &it) {
+ container_reference<self_type>::assign (&it ());
+ it1_ = it.it1_;
+ it2_ = it.it2_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it1_ == it.it1_ && it2_ == it.it2_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it1_ < it.it1_ && it2_ < it.it2_;
+ }
+
+ private:
+ subiterator1_type it1_;
+ subiterator2_type it2_;
+
+ friend class const_iterator;
+ };
+
+ BOOST_UBLAS_INLINE
+ iterator begin () {
+ return find (0);
+ }
+ BOOST_UBLAS_INLINE
+ iterator end () {
+ return find (size ());
+ }
+
+ // Reverse iterator
+ typedef reverse_iterator_base<const_iterator> const_reverse_iterator;
+ typedef reverse_iterator_base<iterator> reverse_iterator;
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rbegin () const {
+ return const_reverse_iterator (end ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rend () const {
+ return const_reverse_iterator (begin ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator rbegin () {
+ return reverse_iterator (end ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator rend () {
+ return reverse_iterator (begin ());
+ }
+
+ private:
+ matrix_closure_type data_;
+ slice_type s1_;
+ slice_type s2_;
+ };
+
+ // Specialize temporary
+ template <class M>
+ struct vector_temporary_traits< matrix_vector_slice<M> >
+ : vector_temporary_traits< M > {} ;
+ template <class M>
+ struct vector_temporary_traits< const matrix_vector_slice<M> >
+ : vector_temporary_traits< M > {} ;
+
+ // Matrix based vector indirection class
+ template<class M, class IA>
+ class matrix_vector_indirect:
+ public vector_expression<matrix_vector_indirect<M, IA> > {
+
+ typedef matrix_vector_indirect<M, IA> self_type;
+ public:
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using vector_expression<self_type>::operator ();
+#endif
+ typedef M matrix_type;
+ typedef IA indirect_array_type;
+ typedef typename M::size_type size_type;
+ typedef typename M::difference_type difference_type;
+ typedef typename M::value_type value_type;
+ typedef typename M::const_reference const_reference;
+ typedef typename boost::mpl::if_<boost::is_const<M>,
+ typename M::const_reference,
+ typename M::reference>::type reference;
+ typedef typename boost::mpl::if_<boost::is_const<M>,
+ typename M::const_closure_type,
+ typename M::closure_type>::type matrix_closure_type;
+ typedef const self_type const_closure_type;
+ typedef self_type closure_type;
+ typedef typename storage_restrict_traits<typename M::storage_category,
+ dense_proxy_tag>::storage_category storage_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ matrix_vector_indirect (matrix_type &data, size_type size):
+ data_ (data), ia1_ (size), ia2_ (size) {}
+ BOOST_UBLAS_INLINE
+ matrix_vector_indirect (matrix_type &data, const indirect_array_type &ia1, const indirect_array_type &ia2):
+ data_ (data), ia1_ (ia1), ia2_ (ia2) {
+ // Early checking of preconditions here.
+ // BOOST_UBLAS_CHECK (ia1_.size () == ia2_.size (), bad_size ());
+ }
+
+ // Accessors
+ BOOST_UBLAS_INLINE
+ size_type size () const {
+ return BOOST_UBLAS_SAME (ia1_.size (), ia2_.size ());
+ }
+ BOOST_UBLAS_INLINE
+ const indirect_array_type &indirect1 () const {
+ return ia1_;
+ }
+ BOOST_UBLAS_INLINE
+ indirect_array_type &indirect1 () {
+ return ia1_;
+ }
+ BOOST_UBLAS_INLINE
+ const indirect_array_type &indirect2 () const {
+ return ia2_;
+ }
+ BOOST_UBLAS_INLINE
+ indirect_array_type &indirect2 () {
+ return ia2_;
+ }
+
+ // Storage accessors
+ BOOST_UBLAS_INLINE
+ const matrix_closure_type &data () const {
+ return data_;
+ }
+ BOOST_UBLAS_INLINE
+ matrix_closure_type &data () {
+ return data_;
+ }
+
+ // Element access
+#ifndef BOOST_UBLAS_PROXY_CONST_MEMBER
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type i) const {
+ return data_ (ia1_ (i), ia2_ (i));
+ }
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type i) {
+ return data_ (ia1_ (i), ia2_ (i));
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (size_type i) const {
+ return (*this) (i);
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (size_type i) {
+ return (*this) (i);
+ }
+#else
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type i) const {
+ return data_ (ia1_ (i), ia2_ (i));
+ }
+
+ BOOST_UBLAS_INLINE
+ reference operator [] (size_type i) const {
+ return (*this) (i);
+ }
+#endif
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ matrix_vector_indirect &operator = (const matrix_vector_indirect &mvi) {
+ // ISSUE need a temporary, proxy can be overlaping alias
+ vector_assign<scalar_assign> (*this, typename vector_temporary_traits<M>::type (mvi));
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ matrix_vector_indirect &assign_temporary (matrix_vector_indirect &mvi) {
+ // assign elements, proxied container remains the same
+ vector_assign<scalar_assign> (*this, mvi);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix_vector_indirect &operator = (const vector_expression<AE> &ae) {
+ vector_assign<scalar_assign> (*this, typename vector_temporary_traits<M>::type (ae));
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix_vector_indirect &assign (const vector_expression<AE> &ae) {
+ vector_assign<scalar_assign> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix_vector_indirect &operator += (const vector_expression<AE> &ae) {
+ vector_assign<scalar_assign> (*this, typename vector_temporary_traits<M>::type (*this + ae));
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix_vector_indirect &plus_assign (const vector_expression<AE> &ae) {
+ vector_assign<scalar_plus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix_vector_indirect &operator -= (const vector_expression<AE> &ae) {
+ vector_assign<scalar_assign> (*this, typename vector_temporary_traits<M>::type (*this - ae));
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix_vector_indirect &minus_assign (const vector_expression<AE> &ae) {
+ vector_assign<scalar_minus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ matrix_vector_indirect &operator *= (const AT &at) {
+ vector_assign_scalar<scalar_multiplies_assign> (*this, at);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ matrix_vector_indirect &operator /= (const AT &at) {
+ vector_assign_scalar<scalar_divides_assign> (*this, at);
+ return *this;
+ }
+
+ // Closure comparison
+ BOOST_UBLAS_INLINE
+ bool same_closure (const matrix_vector_indirect &mvi) const {
+ return (*this).data_.same_closure (mvi.data_);
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const matrix_vector_indirect &mvi) const {
+ return (*this).data_ == mvi.data_ && ia1_ == mvi.ia1_ && ia2_ == mvi.ia2_;
+ }
+
+ // Swapping
+ BOOST_UBLAS_INLINE
+ void swap (matrix_vector_indirect mvi) {
+ if (this != &mvi) {
+ BOOST_UBLAS_CHECK (size () == mvi.size (), bad_size ());
+ // Sparse ranges may be nonconformant now.
+ // std::swap_ranges (begin (), end (), mvi.begin ());
+ vector_swap<scalar_swap> (*this, mvi);
+ }
+ }
+ BOOST_UBLAS_INLINE
+ friend void swap (matrix_vector_indirect mvi1, matrix_vector_indirect mvi2) {
+ mvi1.swap (mvi2);
+ }
+
+ // Iterator types
+ private:
+ // Use indirect array as an index - FIXME this fails for packed assignment
+ typedef typename IA::const_iterator const_subiterator1_type;
+ typedef typename IA::const_iterator subiterator1_type;
+ typedef typename IA::const_iterator const_subiterator2_type;
+ typedef typename IA::const_iterator subiterator2_type;
+
+ public:
+ class const_iterator;
+ class iterator;
+
+ // Element lookup
+ BOOST_UBLAS_INLINE
+ const_iterator find (size_type i) const {
+ return const_iterator (*this, ia1_.begin () + i, ia2_.begin () + i);
+ }
+ BOOST_UBLAS_INLINE
+ iterator find (size_type i) {
+ return iterator (*this, ia1_.begin () + i, ia2_.begin () + i);
+ }
+
+ // Iterators simply are indices.
+
+ class const_iterator:
+ public container_const_reference<matrix_vector_indirect>,
+ public iterator_base_traits<typename M::const_iterator1::iterator_category>::template
+ iterator_base<const_iterator, value_type>::type {
+ public:
+ // FIXME Iterator can never be different code was:
+ // typename iterator_restrict_traits<typename M::const_iterator1::iterator_category, typename M::const_iterator2::iterator_category>::iterator_category>
+ BOOST_STATIC_ASSERT ((boost::is_same<typename M::const_iterator1::iterator_category, typename M::const_iterator2::iterator_category>::value ));
+
+ typedef typename matrix_vector_indirect::value_type value_type;
+ typedef typename matrix_vector_indirect::difference_type difference_type;
+ typedef typename matrix_vector_indirect::const_reference reference;
+ typedef const typename matrix_vector_indirect::value_type *pointer;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator ():
+ container_const_reference<self_type> (), it1_ (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator (const self_type &mvi, const const_subiterator1_type &it1, const const_subiterator2_type &it2):
+ container_const_reference<self_type> (mvi), it1_ (it1), it2_ (it2) {}
+ BOOST_UBLAS_INLINE
+ const_iterator (const typename self_type::iterator &it): // ISSUE self_type:: stops VC8 using std::iterator here
+ container_const_reference<self_type> (it ()), it1_ (it.it1_), it2_ (it.it2_) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator &operator ++ () {
+ ++ it1_;
+ ++ it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator -- () {
+ -- it1_;
+ -- it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator += (difference_type n) {
+ it1_ += n;
+ it2_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator -= (difference_type n) {
+ it1_ -= n;
+ it2_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return BOOST_UBLAS_SAME (it1_ - it.it1_, it2_ - it.it2_);
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ // FIXME replace find with at_element
+ return (*this) ().data_ (*it1_, *it2_);
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+ // Index
+ BOOST_UBLAS_INLINE
+ size_type index () const {
+ return BOOST_UBLAS_SAME (it1_.index (), it2_.index ());
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator &operator = (const const_iterator &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it1_ = it.it1_;
+ it2_ = it.it2_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it1_ == it.it1_ && it2_ == it.it2_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it1_ < it.it1_ && it2_ < it.it2_;
+ }
+
+ private:
+ const_subiterator1_type it1_;
+ const_subiterator2_type it2_;
+ };
+
+ BOOST_UBLAS_INLINE
+ const_iterator begin () const {
+ return find (0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator end () const {
+ return find (size ());
+ }
+
+ class iterator:
+ public container_reference<matrix_vector_indirect>,
+ public iterator_base_traits<typename M::iterator1::iterator_category>::template
+ iterator_base<iterator, value_type>::type {
+ public:
+ // FIXME Iterator can never be different code was:
+ // typename iterator_restrict_traits<typename M::const_iterator1::iterator_category, typename M::const_iterator2::iterator_category>::iterator_category>
+ BOOST_STATIC_ASSERT ((boost::is_same<typename M::const_iterator1::iterator_category, typename M::const_iterator2::iterator_category>::value ));
+
+ typedef typename matrix_vector_indirect::value_type value_type;
+ typedef typename matrix_vector_indirect::difference_type difference_type;
+ typedef typename matrix_vector_indirect::reference reference;
+ typedef typename matrix_vector_indirect::value_type *pointer;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ iterator ():
+ container_reference<self_type> (), it1_ (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ iterator (self_type &mvi, const subiterator1_type &it1, const subiterator2_type &it2):
+ container_reference<self_type> (mvi), it1_ (it1), it2_ (it2) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ iterator &operator ++ () {
+ ++ it1_;
+ ++ it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator &operator -- () {
+ -- it1_;
+ -- it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator &operator += (difference_type n) {
+ it1_ += n;
+ it2_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator &operator -= (difference_type n) {
+ it1_ -= n;
+ it2_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return BOOST_UBLAS_SAME (it1_ - it.it1_, it2_ - it.it2_);
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ // FIXME replace find with at_element
+ return (*this) ().data_ (*it1_, *it2_);
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+ // Index
+ BOOST_UBLAS_INLINE
+ size_type index () const {
+ return BOOST_UBLAS_SAME (it1_.index (), it2_.index ());
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ iterator &operator = (const iterator &it) {
+ container_reference<self_type>::assign (&it ());
+ it1_ = it.it1_;
+ it2_ = it.it2_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it1_ == it.it1_ && it2_ == it.it2_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it1_ < it.it1_ && it2_ < it.it2_;
+ }
+
+ private:
+ subiterator1_type it1_;
+ subiterator2_type it2_;
+
+ friend class const_iterator;
+ };
+
+ BOOST_UBLAS_INLINE
+ iterator begin () {
+ return find (0);
+ }
+ BOOST_UBLAS_INLINE
+ iterator end () {
+ return find (size ());
+ }
+
+ // Reverse iterator
+ typedef reverse_iterator_base<const_iterator> const_reverse_iterator;
+ typedef reverse_iterator_base<iterator> reverse_iterator;
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rbegin () const {
+ return const_reverse_iterator (end ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rend () const {
+ return const_reverse_iterator (begin ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator rbegin () {
+ return reverse_iterator (end ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator rend () {
+ return reverse_iterator (begin ());
+ }
+
+ private:
+ matrix_closure_type data_;
+ indirect_array_type ia1_;
+ indirect_array_type ia2_;
+ };
+
+ // Specialize temporary
+ template <class M, class IA>
+ struct vector_temporary_traits< matrix_vector_indirect<M,IA> >
+ : vector_temporary_traits< M > {} ;
+ template <class M, class IA>
+ struct vector_temporary_traits< const matrix_vector_indirect<M,IA> >
+ : vector_temporary_traits< M > {} ;
+
+ // Matrix based range class
+ template<class M>
+ class matrix_range:
+ public matrix_expression<matrix_range<M> > {
+
+ typedef matrix_range<M> self_type;
+ public:
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using matrix_expression<self_type>::operator ();
+#endif
+ typedef M matrix_type;
+ typedef typename M::size_type size_type;
+ typedef typename M::difference_type difference_type;
+ typedef typename M::value_type value_type;
+ typedef typename M::const_reference const_reference;
+ typedef typename boost::mpl::if_<boost::is_const<M>,
+ typename M::const_reference,
+ typename M::reference>::type reference;
+ typedef typename boost::mpl::if_<boost::is_const<M>,
+ typename M::const_closure_type,
+ typename M::closure_type>::type matrix_closure_type;
+ typedef basic_range<size_type, difference_type> range_type;
+ typedef const self_type const_closure_type;
+ typedef self_type closure_type;
+ typedef typename storage_restrict_traits<typename M::storage_category,
+ dense_proxy_tag>::storage_category storage_category;
+ typedef typename M::orientation_category orientation_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ matrix_range (matrix_type &data, const range_type &r1, const range_type &r2):
+ data_ (data), r1_ (r1.preprocess (data.size1 ())), r2_ (r2.preprocess (data.size2 ())) {
+ // Early checking of preconditions here.
+ // BOOST_UBLAS_CHECK (r1_.start () <= data_.size1 () &&
+ // r1_.start () + r1_.size () <= data_.size1 (), bad_index ());
+ // BOOST_UBLAS_CHECK (r2_.start () <= data_.size2 () &&
+ // r2_.start () + r2_.size () <= data_.size2 (), bad_index ());
+ }
+ BOOST_UBLAS_INLINE
+ matrix_range (const matrix_closure_type &data, const range_type &r1, const range_type &r2, int):
+ data_ (data), r1_ (r1.preprocess (data.size1 ())), r2_ (r2.preprocess (data.size2 ())) {
+ // Early checking of preconditions here.
+ // BOOST_UBLAS_CHECK (r1_.start () <= data_.size1 () &&
+ // r1_.start () + r1_.size () <= data_.size1 (), bad_index ());
+ // BOOST_UBLAS_CHECK (r2_.start () <= data_.size2 () &&
+ // r2_.start () + r2_.size () <= data_.size2 (), bad_index ());
+ }
+
+ // Accessors
+ BOOST_UBLAS_INLINE
+ size_type start1 () const {
+ return r1_.start ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type size1 () const {
+ return r1_.size ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type start2() const {
+ return r2_.start ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type size2 () const {
+ return r2_.size ();
+ }
+
+ // Storage accessors
+ BOOST_UBLAS_INLINE
+ const matrix_closure_type &data () const {
+ return data_;
+ }
+ BOOST_UBLAS_INLINE
+ matrix_closure_type &data () {
+ return data_;
+ }
+
+ // Element access
+#ifndef BOOST_UBLAS_PROXY_CONST_MEMBER
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type i, size_type j) const {
+ return data_ (r1_ (i), r2_ (j));
+ }
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type i, size_type j) {
+ return data_ (r1_ (i), r2_ (j));
+ }
+#else
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type i, size_type j) const {
+ return data_ (r1_ (i), r2_ (j));
+ }
+#endif
+
+ // ISSUE can this be done in free project function?
+ // Although a const function can create a non-const proxy to a non-const object
+ // Critical is that matrix_type and data_ (vector_closure_type) are const correct
+ BOOST_UBLAS_INLINE
+ matrix_range<matrix_type> project (const range_type &r1, const range_type &r2) const {
+ return matrix_range<matrix_type> (data_, r1_.compose (r1.preprocess (data_.size1 ())), r2_.compose (r2.preprocess (data_.size2 ())), 0);
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ matrix_range &operator = (const matrix_range &mr) {
+ matrix_assign<scalar_assign> (*this, mr);
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ matrix_range &assign_temporary (matrix_range &mr) {
+ return *this = mr;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix_range &operator = (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_assign> (*this, typename matrix_temporary_traits<M>::type (ae));
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix_range &assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_assign> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix_range& operator += (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_assign> (*this, typename matrix_temporary_traits<M>::type (*this + ae));
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix_range &plus_assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_plus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix_range& operator -= (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_assign> (*this, typename matrix_temporary_traits<M>::type (*this - ae));
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix_range &minus_assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_minus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ matrix_range& operator *= (const AT &at) {
+ matrix_assign_scalar<scalar_multiplies_assign> (*this, at);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ matrix_range& operator /= (const AT &at) {
+ matrix_assign_scalar<scalar_divides_assign> (*this, at);
+ return *this;
+ }
+
+ // Closure comparison
+ BOOST_UBLAS_INLINE
+ bool same_closure (const matrix_range &mr) const {
+ return (*this).data_.same_closure (mr.data_);
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const matrix_range &mr) const {
+ return (*this).data_ == (mr.data_) && r1_ == mr.r1_ && r2_ == mr.r2_;
+ }
+
+ // Swapping
+ BOOST_UBLAS_INLINE
+ void swap (matrix_range mr) {
+ if (this != &mr) {
+ BOOST_UBLAS_CHECK (size1 () == mr.size1 (), bad_size ());
+ BOOST_UBLAS_CHECK (size2 () == mr.size2 (), bad_size ());
+ matrix_swap<scalar_swap> (*this, mr);
+ }
+ }
+ BOOST_UBLAS_INLINE
+ friend void swap (matrix_range mr1, matrix_range mr2) {
+ mr1.swap (mr2);
+ }
+
+ // Iterator types
+ private:
+ typedef typename M::const_iterator1 const_subiterator1_type;
+ typedef typename boost::mpl::if_<boost::is_const<M>,
+ typename M::const_iterator1,
+ typename M::iterator1>::type subiterator1_type;
+ typedef typename M::const_iterator2 const_subiterator2_type;
+ typedef typename boost::mpl::if_<boost::is_const<M>,
+ typename M::const_iterator2,
+ typename M::iterator2>::type subiterator2_type;
+
+ public:
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ typedef indexed_iterator1<matrix_range<matrix_type>,
+ typename subiterator1_type::iterator_category> iterator1;
+ typedef indexed_iterator2<matrix_range<matrix_type>,
+ typename subiterator2_type::iterator_category> iterator2;
+ typedef indexed_const_iterator1<matrix_range<matrix_type>,
+ typename const_subiterator1_type::iterator_category> const_iterator1;
+ typedef indexed_const_iterator2<matrix_range<matrix_type>,
+ typename const_subiterator2_type::iterator_category> const_iterator2;
+#else
+ class const_iterator1;
+ class iterator1;
+ class const_iterator2;
+ class iterator2;
+#endif
+ typedef reverse_iterator_base1<const_iterator1> const_reverse_iterator1;
+ typedef reverse_iterator_base1<iterator1> reverse_iterator1;
+ typedef reverse_iterator_base2<const_iterator2> const_reverse_iterator2;
+ typedef reverse_iterator_base2<iterator2> reverse_iterator2;
+
+ // Element lookup
+ BOOST_UBLAS_INLINE
+ const_iterator1 find1 (int rank, size_type i, size_type j) const {
+ const_subiterator1_type it1 (data_.find1 (rank, start1 () + i, start2 () + j));
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ return const_iterator1 (*this, it1.index1 (), it1.index2 ());
+#else
+ return const_iterator1 (*this, it1);
+#endif
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 find1 (int rank, size_type i, size_type j) {
+ subiterator1_type it1 (data_.find1 (rank, start1 () + i, start2 () + j));
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ return iterator1 (*this, it1.index1 (), it1.index2 ());
+#else
+ return iterator1 (*this, it1);
+#endif
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 find2 (int rank, size_type i, size_type j) const {
+ const_subiterator2_type it2 (data_.find2 (rank, start1 () + i, start2 () + j));
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ return const_iterator2 (*this, it2.index1 (), it2.index2 ());
+#else
+ return const_iterator2 (*this, it2);
+#endif
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 find2 (int rank, size_type i, size_type j) {
+ subiterator2_type it2 (data_.find2 (rank, start1 () + i, start2 () + j));
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ return iterator2 (*this, it2.index1 (), it2.index2 ());
+#else
+ return iterator2 (*this, it2);
+#endif
+ }
+
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator1:
+ public container_const_reference<matrix_range>,
+ public iterator_base_traits<typename const_subiterator1_type::iterator_category>::template
+ iterator_base<const_iterator1, value_type>::type {
+ public:
+ typedef typename const_subiterator1_type::value_type value_type;
+ typedef typename const_subiterator1_type::difference_type difference_type;
+ typedef typename const_subiterator1_type::reference reference;
+ typedef typename const_subiterator1_type::pointer pointer;
+ typedef const_iterator2 dual_iterator_type;
+ typedef const_reverse_iterator2 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator1 ():
+ container_const_reference<self_type> (), it_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator1 (const self_type &mr, const const_subiterator1_type &it):
+ container_const_reference<self_type> (mr), it_ (it) {}
+ BOOST_UBLAS_INLINE
+ const_iterator1 (const iterator1 &it):
+ container_const_reference<self_type> (it ()), it_ (it.it_) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator ++ () {
+ ++ it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator -- () {
+ -- it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator += (difference_type n) {
+ it_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator -= (difference_type n) {
+ it_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ - it.it_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ return *it_;
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 begin () const {
+ const self_type &mr = (*this) ();
+ return mr.find2 (1, index1 (), 0);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 end () const {
+ const self_type &mr = (*this) ();
+ return mr.find2 (1, index1 (), mr.size2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rbegin () const {
+ return const_reverse_iterator2 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rend () const {
+ return const_reverse_iterator2 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it_.index1 () - (*this) ().start1 ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it_.index2 () - (*this) ().start2 ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator = (const const_iterator1 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ == it.it_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ < it.it_;
+ }
+
+ private:
+ const_subiterator1_type it_;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator1 begin1 () const {
+ return find1 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 end1 () const {
+ return find1 (0, size1 (), 0);
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class iterator1:
+ public container_reference<matrix_range>,
+ public iterator_base_traits<typename subiterator1_type::iterator_category>::template
+ iterator_base<iterator1, value_type>::type {
+ public:
+ typedef typename subiterator1_type::value_type value_type;
+ typedef typename subiterator1_type::difference_type difference_type;
+ typedef typename subiterator1_type::reference reference;
+ typedef typename subiterator1_type::pointer pointer;
+ typedef iterator2 dual_iterator_type;
+ typedef reverse_iterator2 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ iterator1 ():
+ container_reference<self_type> (), it_ () {}
+ BOOST_UBLAS_INLINE
+ iterator1 (self_type &mr, const subiterator1_type &it):
+ container_reference<self_type> (mr), it_ (it) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ iterator1 &operator ++ () {
+ ++ it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 &operator -- () {
+ -- it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 &operator += (difference_type n) {
+ it_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 &operator -= (difference_type n) {
+ it_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const iterator1 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ - it.it_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ return *it_;
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator2 begin () const {
+ self_type &mr = (*this) ();
+ return mr.find2 (1, index1 (), 0);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator2 end () const {
+ self_type &mr = (*this) ();
+ return mr.find2 (1, index1 (), mr.size2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator2 rbegin () const {
+ return reverse_iterator2 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator2 rend () const {
+ return reverse_iterator2 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it_.index1 () - (*this) ().start1 ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it_.index2 () - (*this) ().start2 ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ iterator1 &operator = (const iterator1 &it) {
+ container_reference<self_type>::assign (&it ());
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const iterator1 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ == it.it_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const iterator1 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ < it.it_;
+ }
+
+ private:
+ subiterator1_type it_;
+
+ friend class const_iterator1;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ iterator1 begin1 () {
+ return find1 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 end1 () {
+ return find1 (0, size1 (), 0);
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator2:
+ public container_const_reference<matrix_range>,
+ public iterator_base_traits<typename const_subiterator2_type::iterator_category>::template
+ iterator_base<const_iterator2, value_type>::type {
+ public:
+ typedef typename const_subiterator2_type::value_type value_type;
+ typedef typename const_subiterator2_type::difference_type difference_type;
+ typedef typename const_subiterator2_type::reference reference;
+ typedef typename const_subiterator2_type::pointer pointer;
+ typedef const_iterator1 dual_iterator_type;
+ typedef const_reverse_iterator1 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator2 ():
+ container_const_reference<self_type> (), it_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator2 (const self_type &mr, const const_subiterator2_type &it):
+ container_const_reference<self_type> (mr), it_ (it) {}
+ BOOST_UBLAS_INLINE
+ const_iterator2 (const iterator2 &it):
+ container_const_reference<self_type> (it ()), it_ (it.it_) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator ++ () {
+ ++ it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator -- () {
+ -- it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator += (difference_type n) {
+ it_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator -= (difference_type n) {
+ it_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ - it.it_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ return *it_;
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 begin () const {
+ const self_type &mr = (*this) ();
+ return mr.find1 (1, 0, index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 end () const {
+ const self_type &mr = (*this) ();
+ return mr.find1 (1, mr.size1 (), index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rbegin () const {
+ return const_reverse_iterator1 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rend () const {
+ return const_reverse_iterator1 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it_.index1 () - (*this) ().start1 ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it_.index2 () - (*this) ().start2 ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator = (const const_iterator2 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ == it.it_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ < it.it_;
+ }
+
+ private:
+ const_subiterator2_type it_;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator2 begin2 () const {
+ return find2 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 end2 () const {
+ return find2 (0, 0, size2 ());
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class iterator2:
+ public container_reference<matrix_range>,
+ public iterator_base_traits<typename subiterator2_type::iterator_category>::template
+ iterator_base<iterator2, value_type>::type {
+ public:
+ typedef typename subiterator2_type::value_type value_type;
+ typedef typename subiterator2_type::difference_type difference_type;
+ typedef typename subiterator2_type::reference reference;
+ typedef typename subiterator2_type::pointer pointer;
+ typedef iterator1 dual_iterator_type;
+ typedef reverse_iterator1 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ iterator2 ():
+ container_reference<self_type> (), it_ () {}
+ BOOST_UBLAS_INLINE
+ iterator2 (self_type &mr, const subiterator2_type &it):
+ container_reference<self_type> (mr), it_ (it) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ iterator2 &operator ++ () {
+ ++ it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 &operator -- () {
+ -- it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 &operator += (difference_type n) {
+ it_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 &operator -= (difference_type n) {
+ it_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const iterator2 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ - it.it_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ return *it_;
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator1 begin () const {
+ self_type &mr = (*this) ();
+ return mr.find1 (1, 0, index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator1 end () const {
+ self_type &mr = (*this) ();
+ return mr.find1 (1, mr.size1 (), index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator1 rbegin () const {
+ return reverse_iterator1 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator1 rend () const {
+ return reverse_iterator1 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it_.index1 () - (*this) ().start1 ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it_.index2 () - (*this) ().start2 ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ iterator2 &operator = (const iterator2 &it) {
+ container_reference<self_type>::assign (&it ());
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const iterator2 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ == it.it_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const iterator2 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ < it.it_;
+ }
+
+ private:
+ subiterator2_type it_;
+
+ friend class const_iterator2;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ iterator2 begin2 () {
+ return find2 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 end2 () {
+ return find2 (0, 0, size2 ());
+ }
+
+ // Reverse iterators
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rbegin1 () const {
+ return const_reverse_iterator1 (end1 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rend1 () const {
+ return const_reverse_iterator1 (begin1 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ reverse_iterator1 rbegin1 () {
+ return reverse_iterator1 (end1 ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator1 rend1 () {
+ return reverse_iterator1 (begin1 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rbegin2 () const {
+ return const_reverse_iterator2 (end2 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rend2 () const {
+ return const_reverse_iterator2 (begin2 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ reverse_iterator2 rbegin2 () {
+ return reverse_iterator2 (end2 ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator2 rend2 () {
+ return reverse_iterator2 (begin2 ());
+ }
+
+ private:
+ matrix_closure_type data_;
+ range_type r1_;
+ range_type r2_;
+ };
+
+ // Simple Projections
+ template<class M>
+ BOOST_UBLAS_INLINE
+ matrix_range<M> subrange (M &data, typename M::size_type start1, typename M::size_type stop1, typename M::size_type start2, typename M::size_type stop2) {
+ typedef basic_range<typename M::size_type, typename M::difference_type> range_type;
+ return matrix_range<M> (data, range_type (start1, stop1), range_type (start2, stop2));
+ }
+ template<class M>
+ BOOST_UBLAS_INLINE
+ matrix_range<const M> subrange (const M &data, typename M::size_type start1, typename M::size_type stop1, typename M::size_type start2, typename M::size_type stop2) {
+ typedef basic_range<typename M::size_type, typename M::difference_type> range_type;
+ return matrix_range<const M> (data, range_type (start1, stop1), range_type (start2, stop2));
+ }
+
+ // Generic Projections
+ template<class M>
+ BOOST_UBLAS_INLINE
+ matrix_range<M> project (M &data, const typename matrix_range<M>::range_type &r1, const typename matrix_range<M>::range_type &r2) {
+ return matrix_range<M> (data, r1, r2);
+ }
+ template<class M>
+ BOOST_UBLAS_INLINE
+ const matrix_range<const M> project (const M &data, const typename matrix_range<M>::range_type &r1, const typename matrix_range<M>::range_type &r2) {
+ // ISSUE was: return matrix_range<M> (const_cast<M &> (data), r1, r2);
+ return matrix_range<const M> (data, r1, r2);
+ }
+ template<class M>
+ BOOST_UBLAS_INLINE
+ matrix_range<M> project (matrix_range<M> &data, const typename matrix_range<M>::range_type &r1, const typename matrix_range<M>::range_type &r2) {
+ return data.project (r1, r2);
+ }
+ template<class M>
+ BOOST_UBLAS_INLINE
+ const matrix_range<M> project (const matrix_range<M> &data, const typename matrix_range<M>::range_type &r1, const typename matrix_range<M>::range_type &r2) {
+ return data.project (r1, r2);
+ }
+
+ // Specialization of temporary_traits
+ template <class M>
+ struct matrix_temporary_traits< matrix_range<M> >
+ : matrix_temporary_traits< M > {} ;
+ template <class M>
+ struct matrix_temporary_traits< const matrix_range<M> >
+ : matrix_temporary_traits< M > {} ;
+
+ template <class M>
+ struct vector_temporary_traits< matrix_range<M> >
+ : vector_temporary_traits< M > {} ;
+ template <class M>
+ struct vector_temporary_traits< const matrix_range<M> >
+ : vector_temporary_traits< M > {} ;
+
+ // Matrix based slice class
+ template<class M>
+ class matrix_slice:
+ public matrix_expression<matrix_slice<M> > {
+
+ typedef matrix_slice<M> self_type;
+ public:
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using matrix_expression<self_type>::operator ();
+#endif
+ typedef M matrix_type;
+ typedef typename M::size_type size_type;
+ typedef typename M::difference_type difference_type;
+ typedef typename M::value_type value_type;
+ typedef typename M::const_reference const_reference;
+ typedef typename boost::mpl::if_<boost::is_const<M>,
+ typename M::const_reference,
+ typename M::reference>::type reference;
+ typedef typename boost::mpl::if_<boost::is_const<M>,
+ typename M::const_closure_type,
+ typename M::closure_type>::type matrix_closure_type;
+ typedef basic_range<size_type, difference_type> range_type;
+ typedef basic_slice<size_type, difference_type> slice_type;
+ typedef const self_type const_closure_type;
+ typedef self_type closure_type;
+ typedef typename storage_restrict_traits<typename M::storage_category,
+ dense_proxy_tag>::storage_category storage_category;
+ typedef typename M::orientation_category orientation_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ matrix_slice (matrix_type &data, const slice_type &s1, const slice_type &s2):
+ data_ (data), s1_ (s1.preprocess (data.size1 ())), s2_ (s2.preprocess (data.size2 ())) {
+ // Early checking of preconditions here.
+ // BOOST_UBLAS_CHECK (s1_.start () <= data_.size1 () &&
+ // s1_.start () + s1_.stride () * (s1_.size () - (s1_.size () > 0)) <= data_.size1 (), bad_index ());
+ // BOOST_UBLAS_CHECK (s2_.start () <= data_.size2 () &&
+ // s2_.start () + s2_.stride () * (s2_.size () - (s2_.size () > 0)) <= data_.size2 (), bad_index ());
+ }
+ BOOST_UBLAS_INLINE
+ matrix_slice (const matrix_closure_type &data, const slice_type &s1, const slice_type &s2, int):
+ data_ (data), s1_ (s1.preprocess (data.size1 ())), s2_ (s2.preprocess (data.size2 ())) {
+ // Early checking of preconditions.
+ // BOOST_UBLAS_CHECK (s1_.start () <= data_.size1 () &&
+ // s1_.start () + s1_.stride () * (s1_.size () - (s1_.size () > 0)) <= data_.size1 (), bad_index ());
+ // BOOST_UBLAS_CHECK (s2_.start () <= data_.size2 () &&
+ // s2_.start () + s2_.stride () * (s2_.size () - (s2_.size () > 0)) <= data_.size2 (), bad_index ());
+ }
+
+ // Accessors
+ BOOST_UBLAS_INLINE
+ size_type start1 () const {
+ return s1_.start ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type start2 () const {
+ return s2_.start ();
+ }
+ BOOST_UBLAS_INLINE
+ difference_type stride1 () const {
+ return s1_.stride ();
+ }
+ BOOST_UBLAS_INLINE
+ difference_type stride2 () const {
+ return s2_.stride ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type size1 () const {
+ return s1_.size ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type size2 () const {
+ return s2_.size ();
+ }
+
+ // Storage accessors
+ BOOST_UBLAS_INLINE
+ const matrix_closure_type &data () const {
+ return data_;
+ }
+ BOOST_UBLAS_INLINE
+ matrix_closure_type &data () {
+ return data_;
+ }
+
+ // Element access
+#ifndef BOOST_UBLAS_PROXY_CONST_MEMBER
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type i, size_type j) const {
+ return data_ (s1_ (i), s2_ (j));
+ }
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type i, size_type j) {
+ return data_ (s1_ (i), s2_ (j));
+ }
+#else
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type i, size_type j) const {
+ return data_ (s1_ (i), s2_ (j));
+ }
+#endif
+
+ // ISSUE can this be done in free project function?
+ // Although a const function can create a non-const proxy to a non-const object
+ // Critical is that matrix_type and data_ (vector_closure_type) are const correct
+ BOOST_UBLAS_INLINE
+ matrix_slice<matrix_type> project (const range_type &r1, const range_type &r2) const {
+ return matrix_slice<matrix_type> (data_, s1_.compose (r1.preprocess (data_.size1 ())), s2_.compose (r2.preprocess (data_.size2 ())), 0);
+ }
+ BOOST_UBLAS_INLINE
+ matrix_slice<matrix_type> project (const slice_type &s1, const slice_type &s2) const {
+ return matrix_slice<matrix_type> (data_, s1_.compose (s1.preprocess (data_.size1 ())), s2_.compose (s2.preprocess (data_.size2 ())), 0);
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ matrix_slice &operator = (const matrix_slice &ms) {
+ matrix_assign<scalar_assign> (*this, ms);
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ matrix_slice &assign_temporary (matrix_slice &ms) {
+ return *this = ms;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix_slice &operator = (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_assign> (*this, typename matrix_temporary_traits<M>::type (ae));
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix_slice &assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_assign> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix_slice& operator += (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_assign> (*this, typename matrix_temporary_traits<M>::type (*this + ae));
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix_slice &plus_assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_plus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix_slice& operator -= (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_assign> (*this, typename matrix_temporary_traits<M>::type (*this - ae));
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix_slice &minus_assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_minus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ matrix_slice& operator *= (const AT &at) {
+ matrix_assign_scalar<scalar_multiplies_assign> (*this, at);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ matrix_slice& operator /= (const AT &at) {
+ matrix_assign_scalar<scalar_divides_assign> (*this, at);
+ return *this;
+ }
+
+ // Closure comparison
+ BOOST_UBLAS_INLINE
+ bool same_closure (const matrix_slice &ms) const {
+ return (*this).data_.same_closure (ms.data_);
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const matrix_slice &ms) const {
+ return (*this).data_ == ms.data_ && s1_ == ms.s1_ && s2_ == ms.s2_;
+ }
+
+ // Swapping
+ BOOST_UBLAS_INLINE
+ void swap (matrix_slice ms) {
+ if (this != &ms) {
+ BOOST_UBLAS_CHECK (size1 () == ms.size1 (), bad_size ());
+ BOOST_UBLAS_CHECK (size2 () == ms.size2 (), bad_size ());
+ matrix_swap<scalar_swap> (*this, ms);
+ }
+ }
+ BOOST_UBLAS_INLINE
+ friend void swap (matrix_slice ms1, matrix_slice ms2) {
+ ms1.swap (ms2);
+ }
+
+ // Iterator types
+ private:
+ // Use slice as an index - FIXME this fails for packed assignment
+ typedef typename slice_type::const_iterator const_subiterator1_type;
+ typedef typename slice_type::const_iterator subiterator1_type;
+ typedef typename slice_type::const_iterator const_subiterator2_type;
+ typedef typename slice_type::const_iterator subiterator2_type;
+
+ public:
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ typedef indexed_iterator1<matrix_slice<matrix_type>,
+ typename matrix_type::iterator1::iterator_category> iterator1;
+ typedef indexed_iterator2<matrix_slice<matrix_type>,
+ typename matrix_type::iterator2::iterator_category> iterator2;
+ typedef indexed_const_iterator1<matrix_slice<matrix_type>,
+ typename matrix_type::const_iterator1::iterator_category> const_iterator1;
+ typedef indexed_const_iterator2<matrix_slice<matrix_type>,
+ typename matrix_type::const_iterator2::iterator_category> const_iterator2;
+#else
+ class const_iterator1;
+ class iterator1;
+ class const_iterator2;
+ class iterator2;
+#endif
+ typedef reverse_iterator_base1<const_iterator1> const_reverse_iterator1;
+ typedef reverse_iterator_base1<iterator1> reverse_iterator1;
+ typedef reverse_iterator_base2<const_iterator2> const_reverse_iterator2;
+ typedef reverse_iterator_base2<iterator2> reverse_iterator2;
+
+ // Element lookup
+ BOOST_UBLAS_INLINE
+ const_iterator1 find1 (int /* rank */, size_type i, size_type j) const {
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ return const_iterator1 (*this, i, j);
+#else
+ return const_iterator1 (*this, s1_.begin () + i, s2_.begin () + j);
+#endif
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 find1 (int /* rank */, size_type i, size_type j) {
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ return iterator1 (*this, i, j);
+#else
+ return iterator1 (*this, s1_.begin () + i, s2_.begin () + j);
+#endif
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 find2 (int /* rank */, size_type i, size_type j) const {
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ return const_iterator2 (*this, i, j);
+#else
+ return const_iterator2 (*this, s1_.begin () + i, s2_.begin () + j);
+#endif
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 find2 (int /* rank */, size_type i, size_type j) {
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ return iterator2 (*this, i, j);
+#else
+ return iterator2 (*this, s1_.begin () + i, s2_.begin () + j);
+#endif
+ }
+
+ // Iterators simply are indices.
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator1:
+ public container_const_reference<matrix_slice>,
+ public iterator_base_traits<typename M::const_iterator1::iterator_category>::template
+ iterator_base<const_iterator1, value_type>::type {
+ public:
+ typedef typename M::const_iterator1::value_type value_type;
+ typedef typename M::const_iterator1::difference_type difference_type;
+ typedef typename M::const_reference reference; //FIXME due to indexing access
+ typedef typename M::const_iterator1::pointer pointer;
+ typedef const_iterator2 dual_iterator_type;
+ typedef const_reverse_iterator2 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator1 ():
+ container_const_reference<self_type> (), it1_ (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator1 (const self_type &ms, const const_subiterator1_type &it1, const const_subiterator2_type &it2):
+ container_const_reference<self_type> (ms), it1_ (it1), it2_ (it2) {}
+ BOOST_UBLAS_INLINE
+ const_iterator1 (const iterator1 &it):
+ container_const_reference<self_type> (it ()), it1_ (it.it1_), it2_ (it.it2_) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator ++ () {
+ ++ it1_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator -- () {
+ -- it1_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator += (difference_type n) {
+ it1_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator -= (difference_type n) {
+ it1_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ - it.it1_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ // FIXME replace find with at_element
+ return (*this) ().data_ (*it1_, *it2_);
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 begin () const {
+ return const_iterator2 ((*this) (), it1_, it2_ ().begin ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 end () const {
+ return const_iterator2 ((*this) (), it1_, it2_ ().end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rbegin () const {
+ return const_reverse_iterator2 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rend () const {
+ return const_reverse_iterator2 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it1_.index ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it2_.index ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator = (const const_iterator1 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it1_ = it.it1_;
+ it2_ = it.it2_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ == it.it1_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ < it.it1_;
+ }
+
+ private:
+ const_subiterator1_type it1_;
+ const_subiterator2_type it2_;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator1 begin1 () const {
+ return find1 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 end1 () const {
+ return find1 (0, size1 (), 0);
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class iterator1:
+ public container_reference<matrix_slice>,
+ public iterator_base_traits<typename M::iterator1::iterator_category>::template
+ iterator_base<iterator1, value_type>::type {
+ public:
+ typedef typename M::iterator1::value_type value_type;
+ typedef typename M::iterator1::difference_type difference_type;
+ typedef typename M::reference reference; //FIXME due to indexing access
+ typedef typename M::iterator1::pointer pointer;
+ typedef iterator2 dual_iterator_type;
+ typedef reverse_iterator2 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ iterator1 ():
+ container_reference<self_type> (), it1_ (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ iterator1 (self_type &ms, const subiterator1_type &it1, const subiterator2_type &it2):
+ container_reference<self_type> (ms), it1_ (it1), it2_ (it2) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ iterator1 &operator ++ () {
+ ++ it1_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 &operator -- () {
+ -- it1_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 &operator += (difference_type n) {
+ it1_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 &operator -= (difference_type n) {
+ it1_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const iterator1 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ - it.it1_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ // FIXME replace find with at_element
+ return (*this) ().data_ (*it1_, *it2_);
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator2 begin () const {
+ return iterator2 ((*this) (), it1_, it2_ ().begin ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator2 end () const {
+ return iterator2 ((*this) (), it1_, it2_ ().end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator2 rbegin () const {
+ return reverse_iterator2 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator2 rend () const {
+ return reverse_iterator2 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it1_.index ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it2_.index ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ iterator1 &operator = (const iterator1 &it) {
+ container_reference<self_type>::assign (&it ());
+ it1_ = it.it1_;
+ it2_ = it.it2_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const iterator1 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ == it.it1_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const iterator1 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ < it.it1_;
+ }
+
+ private:
+ subiterator1_type it1_;
+ subiterator2_type it2_;
+
+ friend class const_iterator1;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ iterator1 begin1 () {
+ return find1 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 end1 () {
+ return find1 (0, size1 (), 0);
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator2:
+ public container_const_reference<matrix_slice>,
+ public iterator_base_traits<typename M::const_iterator2::iterator_category>::template
+ iterator_base<const_iterator2, value_type>::type {
+ public:
+ typedef typename M::const_iterator2::value_type value_type;
+ typedef typename M::const_iterator2::difference_type difference_type;
+ typedef typename M::const_reference reference; //FIXME due to indexing access
+ typedef typename M::const_iterator2::pointer pointer;
+ typedef const_iterator1 dual_iterator_type;
+ typedef const_reverse_iterator1 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator2 ():
+ container_const_reference<self_type> (), it1_ (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator2 (const self_type &ms, const const_subiterator1_type &it1, const const_subiterator2_type &it2):
+ container_const_reference<self_type> (ms), it1_ (it1), it2_ (it2) {}
+ BOOST_UBLAS_INLINE
+ const_iterator2 (const iterator2 &it):
+ container_const_reference<self_type> (it ()), it1_ (it.it1_), it2_ (it.it2_) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator ++ () {
+ ++ it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator -- () {
+ -- it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator += (difference_type n) {
+ it2_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator -= (difference_type n) {
+ it2_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ - it.it2_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ // FIXME replace find with at_element
+ return (*this) ().data_ (*it1_, *it2_);
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 begin () const {
+ return const_iterator1 ((*this) (), it1_ ().begin (), it2_);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 end () const {
+ return const_iterator1 ((*this) (), it1_ ().end (), it2_);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rbegin () const {
+ return const_reverse_iterator1 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rend () const {
+ return const_reverse_iterator1 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it1_.index ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it2_.index ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator = (const const_iterator2 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it1_ = it.it1_;
+ it2_ = it.it2_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ == it.it2_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ < it.it2_;
+ }
+
+ private:
+ const_subiterator1_type it1_;
+ const_subiterator2_type it2_;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator2 begin2 () const {
+ return find2 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 end2 () const {
+ return find2 (0, 0, size2 ());
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class iterator2:
+ public container_reference<matrix_slice>,
+ public iterator_base_traits<typename M::iterator2::iterator_category>::template
+ iterator_base<iterator2, value_type>::type {
+ public:
+ typedef typename M::iterator2::value_type value_type;
+ typedef typename M::iterator2::difference_type difference_type;
+ typedef typename M::reference reference; //FIXME due to indexing access
+ typedef typename M::iterator2::pointer pointer;
+ typedef iterator1 dual_iterator_type;
+ typedef reverse_iterator1 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ iterator2 ():
+ container_reference<self_type> (), it1_ (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ iterator2 (self_type &ms, const subiterator1_type &it1, const subiterator2_type &it2):
+ container_reference<self_type> (ms), it1_ (it1), it2_ (it2) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ iterator2 &operator ++ () {
+ ++ it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 &operator -- () {
+ -- it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 &operator += (difference_type n) {
+ it2_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 &operator -= (difference_type n) {
+ it2_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const iterator2 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ - it.it2_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ // FIXME replace find with at_element
+ return (*this) ().data_ (*it1_, *it2_);
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator1 begin () const {
+ return iterator1 ((*this) (), it1_ ().begin (), it2_);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator1 end () const {
+ return iterator1 ((*this) (), it1_ ().end (), it2_);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator1 rbegin () const {
+ return reverse_iterator1 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator1 rend () const {
+ return reverse_iterator1 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it1_.index ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it2_.index ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ iterator2 &operator = (const iterator2 &it) {
+ container_reference<self_type>::assign (&it ());
+ it1_ = it.it1_;
+ it2_ = it.it2_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const iterator2 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ == it.it2_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const iterator2 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ < it.it2_;
+ }
+
+ private:
+ subiterator1_type it1_;
+ subiterator2_type it2_;
+
+ friend class const_iterator2;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ iterator2 begin2 () {
+ return find2 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 end2 () {
+ return find2 (0, 0, size2 ());
+ }
+
+ // Reverse iterators
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rbegin1 () const {
+ return const_reverse_iterator1 (end1 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rend1 () const {
+ return const_reverse_iterator1 (begin1 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ reverse_iterator1 rbegin1 () {
+ return reverse_iterator1 (end1 ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator1 rend1 () {
+ return reverse_iterator1 (begin1 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rbegin2 () const {
+ return const_reverse_iterator2 (end2 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rend2 () const {
+ return const_reverse_iterator2 (begin2 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ reverse_iterator2 rbegin2 () {
+ return reverse_iterator2 (end2 ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator2 rend2 () {
+ return reverse_iterator2 (begin2 ());
+ }
+
+ private:
+ matrix_closure_type data_;
+ slice_type s1_;
+ slice_type s2_;
+ };
+
+ // Simple Projections
+ template<class M>
+ BOOST_UBLAS_INLINE
+ matrix_slice<M> subslice (M &data, typename M::size_type start1, typename M::difference_type stride1, typename M::size_type size1, typename M::size_type start2, typename M::difference_type stride2, typename M::size_type size2) {
+ typedef basic_slice<typename M::size_type, typename M::difference_type> slice_type;
+ return matrix_slice<M> (data, slice_type (start1, stride1, size1), slice_type (start2, stride2, size2));
+ }
+ template<class M>
+ BOOST_UBLAS_INLINE
+ matrix_slice<const M> subslice (const M &data, typename M::size_type start1, typename M::difference_type stride1, typename M::size_type size1, typename M::size_type start2, typename M::difference_type stride2, typename M::size_type size2) {
+ typedef basic_slice<typename M::size_type, typename M::difference_type> slice_type;
+ return matrix_slice<const M> (data (), slice_type (start1, stride1, size1), slice_type (start2, stride2, size2));
+ }
+
+ // Generic Projections
+ template<class M>
+ BOOST_UBLAS_INLINE
+ matrix_slice<M> project (M &data, const typename matrix_slice<M>::slice_type &s1, const typename matrix_slice<M>::slice_type &s2) {
+ return matrix_slice<M> (data, s1, s2);
+ }
+ template<class M>
+ BOOST_UBLAS_INLINE
+ const matrix_slice<const M> project (const M &data, const typename matrix_slice<M>::slice_type &s1, const typename matrix_slice<M>::slice_type &s2) {
+ // ISSUE was: return matrix_slice<M> (const_cast<M &> (data), s1, s2);
+ return matrix_slice<const M> (data, s1, s2);
+ }
+ // ISSUE in the following two functions it would be logical to use matrix_slice<V>::range_type but this confuses VC7.1 and 8.0
+ template<class M>
+ BOOST_UBLAS_INLINE
+ matrix_slice<M> project (matrix_slice<M> &data, const typename matrix_range<M>::range_type &r1, const typename matrix_range<M>::range_type &r2) {
+ return data.project (r1, r2);
+ }
+ template<class M>
+ BOOST_UBLAS_INLINE
+ const matrix_slice<M> project (const matrix_slice<M> &data, const typename matrix_range<M>::range_type &r1, const typename matrix_range<M>::range_type &r2) {
+ return data.project (r1, r2);
+ }
+ template<class M>
+ BOOST_UBLAS_INLINE
+ matrix_slice<M> project (matrix_slice<M> &data, const typename matrix_slice<M>::slice_type &s1, const typename matrix_slice<M>::slice_type &s2) {
+ return data.project (s1, s2);
+ }
+ template<class M>
+ BOOST_UBLAS_INLINE
+ const matrix_slice<M> project (const matrix_slice<M> &data, const typename matrix_slice<M>::slice_type &s1, const typename matrix_slice<M>::slice_type &s2) {
+ return data.project (s1, s2);
+ }
+
+ // Specialization of temporary_traits
+ template <class M>
+ struct matrix_temporary_traits< matrix_slice<M> >
+ : matrix_temporary_traits< M > {};
+ template <class M>
+ struct matrix_temporary_traits< const matrix_slice<M> >
+ : matrix_temporary_traits< M > {};
+
+ template <class M>
+ struct vector_temporary_traits< matrix_slice<M> >
+ : vector_temporary_traits< M > {};
+ template <class M>
+ struct vector_temporary_traits< const matrix_slice<M> >
+ : vector_temporary_traits< M > {};
+
+ // Matrix based indirection class
+ // Contributed by Toon Knapen.
+ // Extended and optimized by Kresimir Fresl.
+ template<class M, class IA>
+ class matrix_indirect:
+ public matrix_expression<matrix_indirect<M, IA> > {
+
+ typedef matrix_indirect<M, IA> self_type;
+ public:
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using matrix_expression<self_type>::operator ();
+#endif
+ typedef M matrix_type;
+ typedef IA indirect_array_type;
+ typedef typename M::size_type size_type;
+ typedef typename M::difference_type difference_type;
+ typedef typename M::value_type value_type;
+ typedef typename M::const_reference const_reference;
+ typedef typename boost::mpl::if_<boost::is_const<M>,
+ typename M::const_reference,
+ typename M::reference>::type reference;
+ typedef typename boost::mpl::if_<boost::is_const<M>,
+ typename M::const_closure_type,
+ typename M::closure_type>::type matrix_closure_type;
+ typedef basic_range<size_type, difference_type> range_type;
+ typedef basic_slice<size_type, difference_type> slice_type;
+ typedef const self_type const_closure_type;
+ typedef self_type closure_type;
+ typedef typename storage_restrict_traits<typename M::storage_category,
+ dense_proxy_tag>::storage_category storage_category;
+ typedef typename M::orientation_category orientation_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ matrix_indirect (matrix_type &data, size_type size1, size_type size2):
+ data_ (data), ia1_ (size1), ia2_ (size2) {}
+ BOOST_UBLAS_INLINE
+ matrix_indirect (matrix_type &data, const indirect_array_type &ia1, const indirect_array_type &ia2):
+ data_ (data), ia1_ (ia1.preprocess (data.size1 ())), ia2_ (ia2.preprocess (data.size2 ())) {}
+ BOOST_UBLAS_INLINE
+ matrix_indirect (const matrix_closure_type &data, const indirect_array_type &ia1, const indirect_array_type &ia2, int):
+ data_ (data), ia1_ (ia1.preprocess (data.size1 ())), ia2_ (ia2.preprocess (data.size2 ())) {}
+
+ // Accessors
+ BOOST_UBLAS_INLINE
+ size_type size1 () const {
+ return ia1_.size ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type size2 () const {
+ return ia2_.size ();
+ }
+ BOOST_UBLAS_INLINE
+ const indirect_array_type &indirect1 () const {
+ return ia1_;
+ }
+ BOOST_UBLAS_INLINE
+ indirect_array_type &indirect1 () {
+ return ia1_;
+ }
+ BOOST_UBLAS_INLINE
+ const indirect_array_type &indirect2 () const {
+ return ia2_;
+ }
+ BOOST_UBLAS_INLINE
+ indirect_array_type &indirect2 () {
+ return ia2_;
+ }
+
+ // Storage accessors
+ BOOST_UBLAS_INLINE
+ const matrix_closure_type &data () const {
+ return data_;
+ }
+ BOOST_UBLAS_INLINE
+ matrix_closure_type &data () {
+ return data_;
+ }
+
+ // Element access
+#ifndef BOOST_UBLAS_PROXY_CONST_MEMBER
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type i, size_type j) const {
+ return data_ (ia1_ (i), ia2_ (j));
+ }
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type i, size_type j) {
+ return data_ (ia1_ (i), ia2_ (j));
+ }
+#else
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type i, size_type j) const {
+ return data_ (ia1_ (i), ia2_ (j));
+ }
+#endif
+
+ // ISSUE can this be done in free project function?
+ // Although a const function can create a non-const proxy to a non-const object
+ // Critical is that matrix_type and data_ (vector_closure_type) are const correct
+ BOOST_UBLAS_INLINE
+ matrix_indirect<matrix_type, indirect_array_type> project (const range_type &r1, const range_type &r2) const {
+ return matrix_indirect<matrix_type, indirect_array_type> (data_, ia1_.compose (r1.preprocess (data_.size1 ())), ia2_.compose (r2.preprocess (data_.size2 ())), 0);
+ }
+ BOOST_UBLAS_INLINE
+ matrix_indirect<matrix_type, indirect_array_type> project (const slice_type &s1, const slice_type &s2) const {
+ return matrix_indirect<matrix_type, indirect_array_type> (data_, ia1_.compose (s1.preprocess (data_.size1 ())), ia2_.compose (s2.preprocess (data_.size2 ())), 0);
+ }
+ BOOST_UBLAS_INLINE
+ matrix_indirect<matrix_type, indirect_array_type> project (const indirect_array_type &ia1, const indirect_array_type &ia2) const {
+ return matrix_indirect<matrix_type, indirect_array_type> (data_, ia1_.compose (ia1.preprocess (data_.size1 ())), ia2_.compose (ia2.preprocess (data_.size2 ())), 0);
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ matrix_indirect &operator = (const matrix_indirect &mi) {
+ matrix_assign<scalar_assign> (*this, mi);
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ matrix_indirect &assign_temporary (matrix_indirect &mi) {
+ return *this = mi;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix_indirect &operator = (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_assign> (*this, typename matrix_temporary_traits<M>::type (ae));
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix_indirect &assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_assign> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix_indirect& operator += (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_assign> (*this, typename matrix_temporary_traits<M>::type (*this + ae));
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix_indirect &plus_assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_plus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix_indirect& operator -= (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_assign> (*this, typename matrix_temporary_traits<M>::type (*this - ae));
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ matrix_indirect &minus_assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_minus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ matrix_indirect& operator *= (const AT &at) {
+ matrix_assign_scalar<scalar_multiplies_assign> (*this, at);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ matrix_indirect& operator /= (const AT &at) {
+ matrix_assign_scalar<scalar_divides_assign> (*this, at);
+ return *this;
+ }
+
+ // Closure comparison
+ BOOST_UBLAS_INLINE
+ bool same_closure (const matrix_indirect &mi) const {
+ return (*this).data_.same_closure (mi.data_);
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const matrix_indirect &mi) const {
+ return (*this).data_ == mi.data_ && ia1_ == mi.ia1_ && ia2_ == mi.ia2_;
+ }
+
+ // Swapping
+ BOOST_UBLAS_INLINE
+ void swap (matrix_indirect mi) {
+ if (this != &mi) {
+ BOOST_UBLAS_CHECK (size1 () == mi.size1 (), bad_size ());
+ BOOST_UBLAS_CHECK (size2 () == mi.size2 (), bad_size ());
+ matrix_swap<scalar_swap> (*this, mi);
+ }
+ }
+ BOOST_UBLAS_INLINE
+ friend void swap (matrix_indirect mi1, matrix_indirect mi2) {
+ mi1.swap (mi2);
+ }
+
+ // Iterator types
+ private:
+ typedef typename IA::const_iterator const_subiterator1_type;
+ typedef typename IA::const_iterator subiterator1_type;
+ typedef typename IA::const_iterator const_subiterator2_type;
+ typedef typename IA::const_iterator subiterator2_type;
+
+ public:
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ typedef indexed_iterator1<matrix_indirect<matrix_type, indirect_array_type>,
+ typename matrix_type::iterator1::iterator_category> iterator1;
+ typedef indexed_iterator2<matrix_indirect<matrix_type, indirect_array_type>,
+ typename matrix_type::iterator2::iterator_category> iterator2;
+ typedef indexed_const_iterator1<matrix_indirect<matrix_type, indirect_array_type>,
+ typename matrix_type::const_iterator1::iterator_category> const_iterator1;
+ typedef indexed_const_iterator2<matrix_indirect<matrix_type, indirect_array_type>,
+ typename matrix_type::const_iterator2::iterator_category> const_iterator2;
+#else
+ class const_iterator1;
+ class iterator1;
+ class const_iterator2;
+ class iterator2;
+#endif
+ typedef reverse_iterator_base1<const_iterator1> const_reverse_iterator1;
+ typedef reverse_iterator_base1<iterator1> reverse_iterator1;
+ typedef reverse_iterator_base2<const_iterator2> const_reverse_iterator2;
+ typedef reverse_iterator_base2<iterator2> reverse_iterator2;
+
+ // Element lookup
+ BOOST_UBLAS_INLINE
+ const_iterator1 find1 (int /* rank */, size_type i, size_type j) const {
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ return const_iterator1 (*this, i, j);
+#else
+ return const_iterator1 (*this, ia1_.begin () + i, ia2_.begin () + j);
+#endif
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 find1 (int /* rank */, size_type i, size_type j) {
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ return iterator1 (*this, i, j);
+#else
+ return iterator1 (*this, ia1_.begin () + i, ia2_.begin () + j);
+#endif
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 find2 (int /* rank */, size_type i, size_type j) const {
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ return const_iterator2 (*this, i, j);
+#else
+ return const_iterator2 (*this, ia1_.begin () + i, ia2_.begin () + j);
+#endif
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 find2 (int /* rank */, size_type i, size_type j) {
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ return iterator2 (*this, i, j);
+#else
+ return iterator2 (*this, ia1_.begin () + i, ia2_.begin () + j);
+#endif
+ }
+
+ // Iterators simply are indices.
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator1:
+ public container_const_reference<matrix_indirect>,
+ public iterator_base_traits<typename M::const_iterator1::iterator_category>::template
+ iterator_base<const_iterator1, value_type>::type {
+ public:
+ typedef typename M::const_iterator1::value_type value_type;
+ typedef typename M::const_iterator1::difference_type difference_type;
+ typedef typename M::const_reference reference; //FIXME due to indexing access
+ typedef typename M::const_iterator1::pointer pointer;
+ typedef const_iterator2 dual_iterator_type;
+ typedef const_reverse_iterator2 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator1 ():
+ container_const_reference<self_type> (), it1_ (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator1 (const self_type &mi, const const_subiterator1_type &it1, const const_subiterator2_type &it2):
+ container_const_reference<self_type> (mi), it1_ (it1), it2_ (it2) {}
+ BOOST_UBLAS_INLINE
+ const_iterator1 (const iterator1 &it):
+ container_const_reference<self_type> (it ()), it1_ (it.it1_), it2_ (it.it2_) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator ++ () {
+ ++ it1_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator -- () {
+ -- it1_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator += (difference_type n) {
+ it1_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator -= (difference_type n) {
+ it1_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ - it.it1_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ // FIXME replace find with at_element
+ return (*this) ().data_ (*it1_, *it2_);
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 begin () const {
+ return const_iterator2 ((*this) (), it1_, it2_ ().begin ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 end () const {
+ return const_iterator2 ((*this) (), it1_, it2_ ().end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rbegin () const {
+ return const_reverse_iterator2 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rend () const {
+ return const_reverse_iterator2 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it1_.index ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it2_.index ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator = (const const_iterator1 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it1_ = it.it1_;
+ it2_ = it.it2_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ == it.it1_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ < it.it1_;
+ }
+
+ private:
+ const_subiterator1_type it1_;
+ const_subiterator2_type it2_;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator1 begin1 () const {
+ return find1 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 end1 () const {
+ return find1 (0, size1 (), 0);
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class iterator1:
+ public container_reference<matrix_indirect>,
+ public iterator_base_traits<typename M::iterator1::iterator_category>::template
+ iterator_base<iterator1, value_type>::type {
+ public:
+ typedef typename M::iterator1::value_type value_type;
+ typedef typename M::iterator1::difference_type difference_type;
+ typedef typename M::reference reference; //FIXME due to indexing access
+ typedef typename M::iterator1::pointer pointer;
+ typedef iterator2 dual_iterator_type;
+ typedef reverse_iterator2 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ iterator1 ():
+ container_reference<self_type> (), it1_ (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ iterator1 (self_type &mi, const subiterator1_type &it1, const subiterator2_type &it2):
+ container_reference<self_type> (mi), it1_ (it1), it2_ (it2) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ iterator1 &operator ++ () {
+ ++ it1_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 &operator -- () {
+ -- it1_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 &operator += (difference_type n) {
+ it1_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 &operator -= (difference_type n) {
+ it1_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const iterator1 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ - it.it1_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ // FIXME replace find with at_element
+ return (*this) ().data_ (*it1_, *it2_);
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator2 begin () const {
+ return iterator2 ((*this) (), it1_, it2_ ().begin ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator2 end () const {
+ return iterator2 ((*this) (), it1_, it2_ ().end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator2 rbegin () const {
+ return reverse_iterator2 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator2 rend () const {
+ return reverse_iterator2 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it1_.index ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it2_.index ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ iterator1 &operator = (const iterator1 &it) {
+ container_reference<self_type>::assign (&it ());
+ it1_ = it.it1_;
+ it2_ = it.it2_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const iterator1 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ == it.it1_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const iterator1 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ < it.it1_;
+ }
+
+ private:
+ subiterator1_type it1_;
+ subiterator2_type it2_;
+
+ friend class const_iterator1;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ iterator1 begin1 () {
+ return find1 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 end1 () {
+ return find1 (0, size1 (), 0);
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator2:
+ public container_const_reference<matrix_indirect>,
+ public iterator_base_traits<typename M::const_iterator2::iterator_category>::template
+ iterator_base<const_iterator2, value_type>::type {
+ public:
+ typedef typename M::const_iterator2::value_type value_type;
+ typedef typename M::const_iterator2::difference_type difference_type;
+ typedef typename M::const_reference reference; //FIXME due to indexing access
+ typedef typename M::const_iterator2::pointer pointer;
+ typedef const_iterator1 dual_iterator_type;
+ typedef const_reverse_iterator1 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator2 ():
+ container_const_reference<self_type> (), it1_ (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator2 (const self_type &mi, const const_subiterator1_type &it1, const const_subiterator2_type &it2):
+ container_const_reference<self_type> (mi), it1_ (it1), it2_ (it2) {}
+ BOOST_UBLAS_INLINE
+ const_iterator2 (const iterator2 &it):
+ container_const_reference<self_type> (it ()), it1_ (it.it1_), it2_ (it.it2_) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator ++ () {
+ ++ it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator -- () {
+ -- it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator += (difference_type n) {
+ it2_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator -= (difference_type n) {
+ it2_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ - it.it2_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ // FIXME replace find with at_element
+ return (*this) ().data_ (*it1_, *it2_);
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 begin () const {
+ return const_iterator1 ((*this) (), it1_ ().begin (), it2_);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 end () const {
+ return const_iterator1 ((*this) (), it1_ ().end (), it2_);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rbegin () const {
+ return const_reverse_iterator1 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rend () const {
+ return const_reverse_iterator1 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it1_.index ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it2_.index ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator = (const const_iterator2 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it1_ = it.it1_;
+ it2_ = it.it2_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ == it.it2_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ < it.it2_;
+ }
+
+ private:
+ const_subiterator1_type it1_;
+ const_subiterator2_type it2_;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator2 begin2 () const {
+ return find2 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 end2 () const {
+ return find2 (0, 0, size2 ());
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class iterator2:
+ public container_reference<matrix_indirect>,
+ public iterator_base_traits<typename M::iterator2::iterator_category>::template
+ iterator_base<iterator2, value_type>::type {
+ public:
+ typedef typename M::iterator2::value_type value_type;
+ typedef typename M::iterator2::difference_type difference_type;
+ typedef typename M::reference reference; //FIXME due to indexing access
+ typedef typename M::iterator2::pointer pointer;
+ typedef iterator1 dual_iterator_type;
+ typedef reverse_iterator1 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ iterator2 ():
+ container_reference<self_type> (), it1_ (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ iterator2 (self_type &mi, const subiterator1_type &it1, const subiterator2_type &it2):
+ container_reference<self_type> (mi), it1_ (it1), it2_ (it2) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ iterator2 &operator ++ () {
+ ++ it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 &operator -- () {
+ -- it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 &operator += (difference_type n) {
+ it2_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 &operator -= (difference_type n) {
+ it2_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const iterator2 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ - it.it2_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ // FIXME replace find with at_element
+ return (*this) ().data_ (*it1_, *it2_);
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator1 begin () const {
+ return iterator1 ((*this) (), it1_ ().begin (), it2_);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator1 end () const {
+ return iterator1 ((*this) (), it1_ ().end (), it2_);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator1 rbegin () const {
+ return reverse_iterator1 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator1 rend () const {
+ return reverse_iterator1 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it1_.index ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it2_.index ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ iterator2 &operator = (const iterator2 &it) {
+ container_reference<self_type>::assign (&it ());
+ it1_ = it.it1_;
+ it2_ = it.it2_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const iterator2 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ == it.it2_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const iterator2 &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ < it.it2_;
+ }
+
+ private:
+ subiterator1_type it1_;
+ subiterator2_type it2_;
+
+ friend class const_iterator2;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ iterator2 begin2 () {
+ return find2 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 end2 () {
+ return find2 (0, 0, size2 ());
+ }
+
+ // Reverse iterators
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rbegin1 () const {
+ return const_reverse_iterator1 (end1 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rend1 () const {
+ return const_reverse_iterator1 (begin1 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ reverse_iterator1 rbegin1 () {
+ return reverse_iterator1 (end1 ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator1 rend1 () {
+ return reverse_iterator1 (begin1 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rbegin2 () const {
+ return const_reverse_iterator2 (end2 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rend2 () const {
+ return const_reverse_iterator2 (begin2 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ reverse_iterator2 rbegin2 () {
+ return reverse_iterator2 (end2 ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator2 rend2 () {
+ return reverse_iterator2 (begin2 ());
+ }
+
+ private:
+ matrix_closure_type data_;
+ indirect_array_type ia1_;
+ indirect_array_type ia2_;
+ };
+
+ // Projections
+ template<class M, class A>
+ BOOST_UBLAS_INLINE
+ matrix_indirect<M, indirect_array<A> > project (M &data, const indirect_array<A> &ia1, const indirect_array<A> &ia2) {
+ return matrix_indirect<M, indirect_array<A> > (data, ia1, ia2);
+ }
+ template<class M, class A>
+ BOOST_UBLAS_INLINE
+ const matrix_indirect<const M, indirect_array<A> > project (const M &data, const indirect_array<A> &ia1, const indirect_array<A> &ia2) {
+ // ISSUE was: return matrix_indirect<M, indirect_array<A> > (const_cast<M &> (data), ia1, ia2);
+ return matrix_indirect<const M, indirect_array<A> > (data, ia1, ia2);
+ }
+ template<class M, class IA>
+ BOOST_UBLAS_INLINE
+ matrix_indirect<M, IA> project (matrix_indirect<M, IA> &data, const typename matrix_indirect<M, IA>::range_type &r1, const typename matrix_indirect<M, IA>::range_type &r2) {
+ return data.project (r1, r2);
+ }
+ template<class M, class IA>
+ BOOST_UBLAS_INLINE
+ const matrix_indirect<M, IA> project (const matrix_indirect<M, IA> &data, const typename matrix_indirect<M, IA>::range_type &r1, const typename matrix_indirect<M, IA>::range_type &r2) {
+ return data.project (r1, r2);
+ }
+ template<class M, class IA>
+ BOOST_UBLAS_INLINE
+ matrix_indirect<M, IA> project (matrix_indirect<M, IA> &data, const typename matrix_indirect<M, IA>::slice_type &s1, const typename matrix_indirect<M, IA>::slice_type &s2) {
+ return data.project (s1, s2);
+ }
+ template<class M, class IA>
+ BOOST_UBLAS_INLINE
+ const matrix_indirect<M, IA> project (const matrix_indirect<M, IA> &data, const typename matrix_indirect<M, IA>::slice_type &s1, const typename matrix_indirect<M, IA>::slice_type &s2) {
+ return data.project (s1, s2);
+ }
+ template<class M, class A>
+ BOOST_UBLAS_INLINE
+ matrix_indirect<M, indirect_array<A> > project (matrix_indirect<M, indirect_array<A> > &data, const indirect_array<A> &ia1, const indirect_array<A> &ia2) {
+ return data.project (ia1, ia2);
+ }
+ template<class M, class A>
+ BOOST_UBLAS_INLINE
+ const matrix_indirect<M, indirect_array<A> > project (const matrix_indirect<M, indirect_array<A> > &data, const indirect_array<A> &ia1, const indirect_array<A> &ia2) {
+ return data.project (ia1, ia2);
+ }
+
+ /// Specialization of temporary_traits
+ template <class M>
+ struct matrix_temporary_traits< matrix_indirect<M> >
+ : matrix_temporary_traits< M > {};
+ template <class M>
+ struct matrix_temporary_traits< const matrix_indirect<M> >
+ : matrix_temporary_traits< M > {};
+
+ template <class M>
+ struct vector_temporary_traits< matrix_indirect<M> >
+ : vector_temporary_traits< M > {};
+ template <class M>
+ struct vector_temporary_traits< const matrix_indirect<M> >
+ : vector_temporary_traits< M > {};
+
+}}}
+
+#endif
diff --git a/boost/boost/numeric/ublas/matrix_sparse.hpp b/boost/boost/numeric/ublas/matrix_sparse.hpp
new file mode 100644
index 00000000000..3bb02f958b6
--- /dev/null
+++ b/boost/boost/numeric/ublas/matrix_sparse.hpp
@@ -0,0 +1,5205 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without fee,
+// provided that the above copyright notice appear in all copies and
+// that both that copyright notice and this permission notice appear
+// in supporting documentation. The authors make no representations
+// about the suitability of this software for any purpose.
+// It is provided "as is" without express or implied warranty.
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#ifndef _BOOST_UBLAS_MATRIX_SPARSE_
+#define _BOOST_UBLAS_MATRIX_SPARSE_
+
+#include <boost/numeric/ublas/vector_sparse.hpp>
+#include <boost/numeric/ublas/matrix_expression.hpp>
+#include <boost/numeric/ublas/detail/matrix_assign.hpp>
+#if BOOST_UBLAS_TYPE_CHECK
+#include <boost/numeric/ublas/matrix.hpp>
+#endif
+
+// Iterators based on ideas of Jeremy Siek
+
+namespace boost { namespace numeric { namespace ublas {
+
+#ifdef BOOST_UBLAS_STRICT_MATRIX_SPARSE
+
+ template<class M>
+ class sparse_matrix_element:
+ public container_reference<M> {
+ public:
+ typedef M matrix_type;
+ typedef typename M::size_type size_type;
+ typedef typename M::value_type value_type;
+ typedef const value_type &const_reference;
+ typedef value_type *pointer;
+ typedef const value_type *const_pointer;
+
+ private:
+ // Proxied element operations
+ void get_d () const {
+ const_pointer p = (*this) ().find_element (i_, j_);
+ if (p)
+ d_ = *p;
+ else
+ d_ = value_type/*zero*/();
+ }
+
+ void set (const value_type &s) const {
+ pointer p = (*this) ().find_element (i_, j_);
+ if (!p)
+ (*this) ().insert_element (i_, j_, s);
+ else
+ *p = s;
+ }
+
+ public:
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ sparse_matrix_element (matrix_type &m, size_type i, size_type j):
+ container_reference<matrix_type> (m), i_ (i), j_ (j) {
+ }
+ BOOST_UBLAS_INLINE
+ sparse_matrix_element (const sparse_matrix_element &p):
+ container_reference<matrix_type> (p), i_ (p.i_), j_ (p.j_) {}
+ BOOST_UBLAS_INLINE
+ ~sparse_matrix_element () {
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ sparse_matrix_element &operator = (const sparse_matrix_element &p) {
+ // Overide the implict copy assignment
+ p.get_d ();
+ set (p.d_);
+ return *this;
+ }
+ template<class D>
+ BOOST_UBLAS_INLINE
+ sparse_matrix_element &operator = (const D &d) {
+ set (d);
+ return *this;
+ }
+ template<class D>
+ BOOST_UBLAS_INLINE
+ sparse_matrix_element &operator += (const D &d) {
+ get_d ();
+ d_ += d;
+ set (d_);
+ return *this;
+ }
+ template<class D>
+ BOOST_UBLAS_INLINE
+ sparse_matrix_element &operator -= (const D &d) {
+ get_d ();
+ d_ -= d;
+ set (d_);
+ return *this;
+ }
+ template<class D>
+ BOOST_UBLAS_INLINE
+ sparse_matrix_element &operator *= (const D &d) {
+ get_d ();
+ d_ *= d;
+ set (d_);
+ return *this;
+ }
+ template<class D>
+ BOOST_UBLAS_INLINE
+ sparse_matrix_element &operator /= (const D &d) {
+ get_d ();
+ d_ /= d;
+ set (d_);
+ return *this;
+ }
+
+ // Comparison
+ template<class D>
+ BOOST_UBLAS_INLINE
+ bool operator == (const D &d) const {
+ get_d ();
+ return d_ == d;
+ }
+ template<class D>
+ BOOST_UBLAS_INLINE
+ bool operator != (const D &d) const {
+ get_d ();
+ return d_ != d;
+ }
+
+ // Conversion - weak link in proxy as d_ is not a perfect alias for the element
+ BOOST_UBLAS_INLINE
+ operator const_reference () const {
+ get_d ();
+ return d_;
+ }
+
+ // Conversion to reference - may be invalidated
+ BOOST_UBLAS_INLINE
+ value_type& ref () const {
+ const pointer p = (*this) ().find_element (i_, j_);
+ if (!p)
+ return (*this) ().insert_element (i_, j_, value_type/*zero*/());
+ else
+ return *p;
+ }
+
+ private:
+ size_type i_;
+ size_type j_;
+ mutable value_type d_;
+ };
+
+ /*
+ * Generalise explicit reference access
+ */
+ namespace detail {
+ template <class V>
+ struct element_reference<sparse_matrix_element<V> > {
+ typedef typename V::value_type& reference;
+ static reference get_reference (const sparse_matrix_element<V>& sve)
+ {
+ return sve.ref ();
+ }
+ };
+ }
+
+
+ template<class M>
+ struct type_traits<sparse_matrix_element<M> > {
+ typedef typename M::value_type element_type;
+ typedef type_traits<sparse_matrix_element<M> > self_type;
+ typedef typename type_traits<element_type>::value_type value_type;
+ typedef typename type_traits<element_type>::const_reference const_reference;
+ typedef sparse_matrix_element<M> reference;
+ typedef typename type_traits<element_type>::real_type real_type;
+ typedef typename type_traits<element_type>::precision_type precision_type;
+
+ static const unsigned plus_complexity = type_traits<element_type>::plus_complexity;
+ static const unsigned multiplies_complexity = type_traits<element_type>::multiplies_complexity;
+
+ static
+ BOOST_UBLAS_INLINE
+ real_type real (const_reference t) {
+ return type_traits<element_type>::real (t);
+ }
+ static
+ BOOST_UBLAS_INLINE
+ real_type imag (const_reference t) {
+ return type_traits<element_type>::imag (t);
+ }
+ static
+ BOOST_UBLAS_INLINE
+ value_type conj (const_reference t) {
+ return type_traits<element_type>::conj (t);
+ }
+
+ static
+ BOOST_UBLAS_INLINE
+ real_type type_abs (const_reference t) {
+ return type_traits<element_type>::type_abs (t);
+ }
+ static
+ BOOST_UBLAS_INLINE
+ value_type type_sqrt (const_reference t) {
+ return type_traits<element_type>::type_sqrt (t);
+ }
+
+ static
+ BOOST_UBLAS_INLINE
+ real_type norm_1 (const_reference t) {
+ return type_traits<element_type>::norm_1 (t);
+ }
+ static
+ BOOST_UBLAS_INLINE
+ real_type norm_2 (const_reference t) {
+ return type_traits<element_type>::norm_2 (t);
+ }
+ static
+ BOOST_UBLAS_INLINE
+ real_type norm_inf (const_reference t) {
+ return type_traits<element_type>::norm_inf (t);
+ }
+
+ static
+ BOOST_UBLAS_INLINE
+ bool equals (const_reference t1, const_reference t2) {
+ return type_traits<element_type>::equals (t1, t2);
+ }
+ };
+
+ template<class M1, class T2>
+ struct promote_traits<sparse_matrix_element<M1>, T2> {
+ typedef typename promote_traits<typename sparse_matrix_element<M1>::value_type, T2>::promote_type promote_type;
+ };
+ template<class T1, class M2>
+ struct promote_traits<T1, sparse_matrix_element<M2> > {
+ typedef typename promote_traits<T1, typename sparse_matrix_element<M2>::value_type>::promote_type promote_type;
+ };
+ template<class M1, class M2>
+ struct promote_traits<sparse_matrix_element<M1>, sparse_matrix_element<M2> > {
+ typedef typename promote_traits<typename sparse_matrix_element<M1>::value_type,
+ typename sparse_matrix_element<M2>::value_type>::promote_type promote_type;
+ };
+
+#endif
+
+
+ // Index map based sparse matrix class
+ template<class T, class L, class A>
+ class mapped_matrix:
+ public matrix_container<mapped_matrix<T, L, A> > {
+
+ typedef T &true_reference;
+ typedef T *pointer;
+ typedef const T * const_pointer;
+ typedef L layout_type;
+ typedef mapped_matrix<T, L, A> self_type;
+ public:
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using matrix_container<self_type>::operator ();
+#endif
+ typedef typename A::size_type size_type;
+ typedef typename A::difference_type difference_type;
+ typedef T value_type;
+ typedef A array_type;
+ typedef const T &const_reference;
+#ifndef BOOST_UBLAS_STRICT_MATRIX_SPARSE
+ typedef typename detail::map_traits<A, T>::reference reference;
+#else
+ typedef sparse_matrix_element<self_type> reference;
+#endif
+ typedef const matrix_reference<const self_type> const_closure_type;
+ typedef matrix_reference<self_type> closure_type;
+ typedef mapped_vector<T, A> vector_temporary_type;
+ typedef self_type matrix_temporary_type;
+ typedef sparse_tag storage_category;
+ typedef typename L::orientation_category orientation_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ mapped_matrix ():
+ matrix_container<self_type> (),
+ size1_ (0), size2_ (0), data_ () {}
+ BOOST_UBLAS_INLINE
+ mapped_matrix (size_type size1, size_type size2, size_type non_zeros = 0):
+ matrix_container<self_type> (),
+ size1_ (size1), size2_ (size2), data_ () {
+ detail::map_reserve (data (), restrict_capacity (non_zeros));
+ }
+ BOOST_UBLAS_INLINE
+ mapped_matrix (const mapped_matrix &m):
+ matrix_container<self_type> (),
+ size1_ (m.size1_), size2_ (m.size2_), data_ (m.data_) {}
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ mapped_matrix (const matrix_expression<AE> &ae, size_type non_zeros = 0):
+ matrix_container<self_type> (),
+ size1_ (ae ().size1 ()), size2_ (ae ().size2 ()), data_ () {
+ detail::map_reserve (data (), restrict_capacity (non_zeros));
+ matrix_assign<scalar_assign> (*this, ae);
+ }
+
+ // Accessors
+ BOOST_UBLAS_INLINE
+ size_type size1 () const {
+ return size1_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type size2 () const {
+ return size2_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type nnz_capacity () const {
+ return detail::map_capacity (data ());
+ }
+ BOOST_UBLAS_INLINE
+ size_type nnz () const {
+ return data (). size ();
+ }
+
+ // Storage accessors
+ BOOST_UBLAS_INLINE
+ const array_type &data () const {
+ return data_;
+ }
+ BOOST_UBLAS_INLINE
+ array_type &data () {
+ return data_;
+ }
+
+ // Resizing
+ private:
+ BOOST_UBLAS_INLINE
+ size_type restrict_capacity (size_type non_zeros) const {
+ // Guarding against overflow - thanks to Alexei Novakov for the hint.
+ // non_zeros = (std::min) (non_zeros, size1_ * size2_);
+ if (size1_ > 0 && non_zeros / size1_ >= size2_)
+ non_zeros = size1_ * size2_;
+ return non_zeros;
+ }
+ public:
+ BOOST_UBLAS_INLINE
+ void resize (size_type size1, size_type size2, bool preserve = true) {
+ // FIXME preserve unimplemented
+ BOOST_UBLAS_CHECK (!preserve, internal_logic ());
+ size1_ = size1;
+ size2_ = size2;
+ data ().clear ();
+ }
+
+ // Reserving
+ BOOST_UBLAS_INLINE
+ void reserve (size_type non_zeros, bool preserve = true) {
+ detail::map_reserve (data (), restrict_capacity (non_zeros));
+ }
+
+ // Element support
+ BOOST_UBLAS_INLINE
+ pointer find_element (size_type i, size_type j) {
+ return const_cast<pointer> (const_cast<const self_type&>(*this).find_element (i, j));
+ }
+ BOOST_UBLAS_INLINE
+ const_pointer find_element (size_type i, size_type j) const {
+ const size_type element = layout_type::element (i, size1_, j, size2_);
+ const_subiterator_type it (data ().find (element));
+ if (it == data ().end ())
+ return 0;
+ BOOST_UBLAS_CHECK ((*it).first == element, internal_logic ()); // broken map
+ return &(*it).second;
+ }
+
+ // Element access
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type i, size_type j) const {
+ const size_type element = layout_type::element (i, size1_, j, size2_);
+ const_subiterator_type it (data ().find (element));
+ if (it == data ().end ())
+ return zero_;
+ BOOST_UBLAS_CHECK ((*it).first == element, internal_logic ()); // broken map
+ return (*it).second;
+ }
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type i, size_type j) {
+#ifndef BOOST_UBLAS_STRICT_MATRIX_SPARSE
+ const size_type element = layout_type::element (i, size1_, j, size2_);
+ std::pair<subiterator_type, bool> ii (data ().insert (typename array_type::value_type (element, value_type/*zero*/())));
+ BOOST_UBLAS_CHECK ((ii.first)->first == element, internal_logic ()); // broken map
+ return (ii.first)->second;
+#else
+ return reference (*this, i, j);
+#endif
+ }
+
+ // Element assingment
+ BOOST_UBLAS_INLINE
+ true_reference insert_element (size_type i, size_type j, const_reference t) {
+ BOOST_UBLAS_CHECK (!find_element (i, j), bad_index ()); // duplicate element
+ const size_type element = layout_type::element (i, size1_, j, size2_);
+ std::pair<subiterator_type, bool> ii (data ().insert (typename array_type::value_type (element, t)));
+ BOOST_UBLAS_CHECK ((ii.first)->first == element, internal_logic ()); // broken map
+ if (!ii.second) // existing element
+ (ii.first)->second = t;
+ return (ii.first)->second;
+ }
+ BOOST_UBLAS_INLINE
+ void erase_element (size_type i, size_type j) {
+ subiterator_type it = data ().find (layout_type::element (i, size1_, j, size2_));
+ if (it == data ().end ())
+ return;
+ data ().erase (it);
+ }
+
+ // Zeroing
+ BOOST_UBLAS_INLINE
+ void clear () {
+ data ().clear ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ mapped_matrix &operator = (const mapped_matrix &m) {
+ if (this != &m) {
+ size1_ = m.size1_;
+ size2_ = m.size2_;
+ data () = m.data ();
+ }
+ return *this;
+ }
+ template<class C> // Container assignment without temporary
+ BOOST_UBLAS_INLINE
+ mapped_matrix &operator = (const matrix_container<C> &m) {
+ resize (m ().size1 (), m ().size2 (), false);
+ assign (m);
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ mapped_matrix &assign_temporary (mapped_matrix &m) {
+ swap (m);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ mapped_matrix &operator = (const matrix_expression<AE> &ae) {
+ self_type temporary (ae, detail::map_capacity (data ()));
+ return assign_temporary (temporary);
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ mapped_matrix &assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_assign> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ mapped_matrix& operator += (const matrix_expression<AE> &ae) {
+ self_type temporary (*this + ae, detail::map_capacity (data ()));
+ return assign_temporary (temporary);
+ }
+ template<class C> // Container assignment without temporary
+ BOOST_UBLAS_INLINE
+ mapped_matrix &operator += (const matrix_container<C> &m) {
+ plus_assign (m);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ mapped_matrix &plus_assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_plus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ mapped_matrix& operator -= (const matrix_expression<AE> &ae) {
+ self_type temporary (*this - ae, detail::map_capacity (data ()));
+ return assign_temporary (temporary);
+ }
+ template<class C> // Container assignment without temporary
+ BOOST_UBLAS_INLINE
+ mapped_matrix &operator -= (const matrix_container<C> &m) {
+ minus_assign (m);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ mapped_matrix &minus_assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_minus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ mapped_matrix& operator *= (const AT &at) {
+ matrix_assign_scalar<scalar_multiplies_assign> (*this, at);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ mapped_matrix& operator /= (const AT &at) {
+ matrix_assign_scalar<scalar_divides_assign> (*this, at);
+ return *this;
+ }
+
+ // Swapping
+ BOOST_UBLAS_INLINE
+ void swap (mapped_matrix &m) {
+ if (this != &m) {
+ std::swap (size1_, m.size1_);
+ std::swap (size2_, m.size2_);
+ data ().swap (m.data ());
+ }
+ }
+ BOOST_UBLAS_INLINE
+ friend void swap (mapped_matrix &m1, mapped_matrix &m2) {
+ m1.swap (m2);
+ }
+
+ // Iterator types
+ private:
+ // Use storage iterator
+ typedef typename A::const_iterator const_subiterator_type;
+ typedef typename A::iterator subiterator_type;
+
+ BOOST_UBLAS_INLINE
+ true_reference at_element (size_type i, size_type j) {
+ const size_type element = layout_type::element (i, size1_, j, size2_);
+ subiterator_type it (data ().find (element));
+ BOOST_UBLAS_CHECK (it != data ().end(), bad_index ());
+ BOOST_UBLAS_CHECK ((*it).first == element, internal_logic ()); // broken map
+ return it->second;
+ }
+
+ public:
+ class const_iterator1;
+ class iterator1;
+ class const_iterator2;
+ class iterator2;
+ typedef reverse_iterator_base1<const_iterator1> const_reverse_iterator1;
+ typedef reverse_iterator_base1<iterator1> reverse_iterator1;
+ typedef reverse_iterator_base2<const_iterator2> const_reverse_iterator2;
+ typedef reverse_iterator_base2<iterator2> reverse_iterator2;
+
+ // Element lookup
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ const_iterator1 find1 (int rank, size_type i, size_type j, int direction = 1) const {
+ const_subiterator_type it (data ().lower_bound (layout_type::address (i, size1_, j, size2_)));
+ const_subiterator_type it_end (data ().end ());
+ size_type index1 = size_type (-1);
+ size_type index2 = size_type (-1);
+ while (rank == 1 && it != it_end) {
+ index1 = layout_type::index1 ((*it).first, size1_, size2_);
+ index2 = layout_type::index2 ((*it).first, size1_, size2_);
+ if (direction > 0) {
+ if ((index1 >= i && index2 == j) || (i >= size1_))
+ break;
+ ++ i;
+ } else /* if (direction < 0) */ {
+ if ((index1 <= i && index2 == j) || (i == 0))
+ break;
+ -- i;
+ }
+ it = data ().lower_bound (layout_type::address (i, size1_, j, size2_));
+ }
+ if (rank == 1 && index2 != j) {
+ if (direction > 0)
+ i = size1_;
+ else /* if (direction < 0) */
+ i = 0;
+ rank = 0;
+ }
+ return const_iterator1 (*this, rank, i, j, it);
+ }
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ iterator1 find1 (int rank, size_type i, size_type j, int direction = 1) {
+ subiterator_type it (data ().lower_bound (layout_type::address (i, size1_, j, size2_)));
+ subiterator_type it_end (data ().end ());
+ size_type index1 = size_type (-1);
+ size_type index2 = size_type (-1);
+ while (rank == 1 && it != it_end) {
+ index1 = layout_type::index1 ((*it).first, size1_, size2_);
+ index2 = layout_type::index2 ((*it).first, size1_, size2_);
+ if (direction > 0) {
+ if ((index1 >= i && index2 == j) || (i >= size1_))
+ break;
+ ++ i;
+ } else /* if (direction < 0) */ {
+ if ((index1 <= i && index2 == j) || (i == 0))
+ break;
+ -- i;
+ }
+ it = data ().lower_bound (layout_type::address (i, size1_, j, size2_));
+ }
+ if (rank == 1 && index2 != j) {
+ if (direction > 0)
+ i = size1_;
+ else /* if (direction < 0) */
+ i = 0;
+ rank = 0;
+ }
+ return iterator1 (*this, rank, i, j, it);
+ }
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ const_iterator2 find2 (int rank, size_type i, size_type j, int direction = 1) const {
+ const_subiterator_type it (data ().lower_bound (layout_type::address (i, size1_, j, size2_)));
+ const_subiterator_type it_end (data ().end ());
+ size_type index1 = size_type (-1);
+ size_type index2 = size_type (-1);
+ while (rank == 1 && it != it_end) {
+ index1 = layout_type::index1 ((*it).first, size1_, size2_);
+ index2 = layout_type::index2 ((*it).first, size1_, size2_);
+ if (direction > 0) {
+ if ((index2 >= j && index1 == i) || (j >= size2_))
+ break;
+ ++ j;
+ } else /* if (direction < 0) */ {
+ if ((index2 <= j && index1 == i) || (j == 0))
+ break;
+ -- j;
+ }
+ it = data ().lower_bound (layout_type::address (i, size1_, j, size2_));
+ }
+ if (rank == 1 && index1 != i) {
+ if (direction > 0)
+ j = size2_;
+ else /* if (direction < 0) */
+ j = 0;
+ rank = 0;
+ }
+ return const_iterator2 (*this, rank, i, j, it);
+ }
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ iterator2 find2 (int rank, size_type i, size_type j, int direction = 1) {
+ subiterator_type it (data ().lower_bound (layout_type::address (i, size1_, j, size2_)));
+ subiterator_type it_end (data ().end ());
+ size_type index1 = size_type (-1);
+ size_type index2 = size_type (-1);
+ while (rank == 1 && it != it_end) {
+ index1 = layout_type::index1 ((*it).first, size1_, size2_);
+ index2 = layout_type::index2 ((*it).first, size1_, size2_);
+ if (direction > 0) {
+ if ((index2 >= j && index1 == i) || (j >= size2_))
+ break;
+ ++ j;
+ } else /* if (direction < 0) */ {
+ if ((index2 <= j && index1 == i) || (j == 0))
+ break;
+ -- j;
+ }
+ it = data ().lower_bound (layout_type::address (i, size1_, j, size2_));
+ }
+ if (rank == 1 && index1 != i) {
+ if (direction > 0)
+ j = size2_;
+ else /* if (direction < 0) */
+ j = 0;
+ rank = 0;
+ }
+ return iterator2 (*this, rank, i, j, it);
+ }
+
+
+ class const_iterator1:
+ public container_const_reference<mapped_matrix>,
+ public bidirectional_iterator_base<sparse_bidirectional_iterator_tag,
+ const_iterator1, value_type> {
+ public:
+ typedef typename mapped_matrix::value_type value_type;
+ typedef typename mapped_matrix::difference_type difference_type;
+ typedef typename mapped_matrix::const_reference reference;
+ typedef const typename mapped_matrix::pointer pointer;
+
+ typedef const_iterator2 dual_iterator_type;
+ typedef const_reverse_iterator2 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator1 ():
+ container_const_reference<self_type> (), rank_ (), i_ (), j_ (), it_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator1 (const self_type &m, int rank, size_type i, size_type j, const const_subiterator_type &it):
+ container_const_reference<self_type> (m), rank_ (rank), i_ (i), j_ (j), it_ (it) {}
+ BOOST_UBLAS_INLINE
+ const_iterator1 (const iterator1 &it):
+ container_const_reference<self_type> (it ()), rank_ (it.rank_), i_ (it.i_), j_ (it.j_), it_ (it.it_) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator ++ () {
+ if (rank_ == 1 && layout_type::fast1 ())
+ ++ it_;
+ else
+ *this = (*this) ().find1 (rank_, index1 () + 1, j_, 1);
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator -- () {
+ if (rank_ == 1 && layout_type::fast1 ())
+ -- it_;
+ else
+ *this = (*this) ().find1 (rank_, index1 () - 1, j_, -1);
+ return *this;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ BOOST_UBLAS_CHECK (index1 () < (*this) ().size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (index2 () < (*this) ().size2 (), bad_index ());
+ if (rank_ == 1) {
+ return (*it_).second;
+ } else {
+ return (*this) () (i_, j_);
+ }
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 begin () const {
+ const self_type &m = (*this) ();
+ return m.find2 (1, index1 (), 0);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 end () const {
+ const self_type &m = (*this) ();
+ return m.find2 (1, index1 (), m.size2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rbegin () const {
+ return const_reverse_iterator2 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rend () const {
+ return const_reverse_iterator2 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ BOOST_UBLAS_CHECK (*this != (*this) ().find1 (0, (*this) ().size1 (), j_), bad_index ());
+ if (rank_ == 1) {
+ const self_type &m = (*this) ();
+ BOOST_UBLAS_CHECK (layout_type::index1 ((*it_).first, m.size1 (), m.size2 ()) < (*this) ().size1 (), bad_index ());
+ return layout_type::index1 ((*it_).first, m.size1 (), m.size2 ());
+ } else {
+ return i_;
+ }
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ if (rank_ == 1) {
+ const self_type &m = (*this) ();
+ BOOST_UBLAS_CHECK (layout_type::index2 ((*it_).first, m.size1 (), m.size2 ()) < (*this) ().size2 (), bad_index ());
+ return layout_type::index2 ((*it_).first, m.size1 (), m.size2 ());
+ } else {
+ return j_;
+ }
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator = (const const_iterator1 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ rank_ = it.rank_;
+ i_ = it.i_;
+ j_ = it.j_;
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ // BOOST_UBLAS_CHECK (rank_ == it.rank_, internal_logic ());
+ if (rank_ == 1 || it.rank_ == 1) {
+ return it_ == it.it_;
+ } else {
+ return i_ == it.i_ && j_ == it.j_;
+ }
+ }
+
+ private:
+ int rank_;
+ size_type i_;
+ size_type j_;
+ const_subiterator_type it_;
+ };
+
+ BOOST_UBLAS_INLINE
+ const_iterator1 begin1 () const {
+ return find1 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 end1 () const {
+ return find1 (0, size1_, 0);
+ }
+
+ class iterator1:
+ public container_reference<mapped_matrix>,
+ public bidirectional_iterator_base<sparse_bidirectional_iterator_tag,
+ iterator1, value_type> {
+ public:
+ typedef typename mapped_matrix::value_type value_type;
+ typedef typename mapped_matrix::difference_type difference_type;
+ typedef typename mapped_matrix::true_reference reference;
+ typedef typename mapped_matrix::pointer pointer;
+
+ typedef iterator2 dual_iterator_type;
+ typedef reverse_iterator2 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ iterator1 ():
+ container_reference<self_type> (), rank_ (), i_ (), j_ (), it_ () {}
+ BOOST_UBLAS_INLINE
+ iterator1 (self_type &m, int rank, size_type i, size_type j, const subiterator_type &it):
+ container_reference<self_type> (m), rank_ (rank), i_ (i), j_ (j), it_ (it) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ iterator1 &operator ++ () {
+ if (rank_ == 1 && layout_type::fast1 ())
+ ++ it_;
+ else
+ *this = (*this) ().find1 (rank_, index1 () + 1, j_, 1);
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 &operator -- () {
+ if (rank_ == 1 && layout_type::fast1 ())
+ -- it_;
+ else
+ *this = (*this) ().find1 (rank_, index1 () - 1, j_, -1);
+ return *this;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ BOOST_UBLAS_CHECK (index1 () < (*this) ().size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (index2 () < (*this) ().size2 (), bad_index ());
+ if (rank_ == 1) {
+ return (*it_).second;
+ } else {
+ return (*this) ().at_element (i_, j_);
+ }
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator2 begin () const {
+ self_type &m = (*this) ();
+ return m.find2 (1, index1 (), 0);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator2 end () const {
+ self_type &m = (*this) ();
+ return m.find2 (1, index1 (), m.size2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator2 rbegin () const {
+ return reverse_iterator2 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator2 rend () const {
+ return reverse_iterator2 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ BOOST_UBLAS_CHECK (*this != (*this) ().find1 (0, (*this) ().size1 (), j_), bad_index ());
+ if (rank_ == 1) {
+ const self_type &m = (*this) ();
+ BOOST_UBLAS_CHECK (layout_type::index1 ((*it_).first, m.size1 (), m.size2 ()) < (*this) ().size1 (), bad_index ());
+ return layout_type::index1 ((*it_).first, m.size1 (), m.size2 ());
+ } else {
+ return i_;
+ }
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ if (rank_ == 1) {
+ const self_type &m = (*this) ();
+ BOOST_UBLAS_CHECK (layout_type::index2 ((*it_).first, m.size1 (), m.size2 ()) < (*this) ().size2 (), bad_index ());
+ return layout_type::index2 ((*it_).first, m.size1 (), m.size2 ());
+ } else {
+ return j_;
+ }
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ iterator1 &operator = (const iterator1 &it) {
+ container_reference<self_type>::assign (&it ());
+ rank_ = it.rank_;
+ i_ = it.i_;
+ j_ = it.j_;
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ // BOOST_UBLAS_CHECK (rank_ == it.rank_, internal_logic ());
+ if (rank_ == 1 || it.rank_ == 1) {
+ return it_ == it.it_;
+ } else {
+ return i_ == it.i_ && j_ == it.j_;
+ }
+ }
+
+ private:
+ int rank_;
+ size_type i_;
+ size_type j_;
+ subiterator_type it_;
+
+ friend class const_iterator1;
+ };
+
+ BOOST_UBLAS_INLINE
+ iterator1 begin1 () {
+ return find1 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 end1 () {
+ return find1 (0, size1_, 0);
+ }
+
+ class const_iterator2:
+ public container_const_reference<mapped_matrix>,
+ public bidirectional_iterator_base<sparse_bidirectional_iterator_tag,
+ const_iterator2, value_type> {
+ public:
+ typedef typename mapped_matrix::value_type value_type;
+ typedef typename mapped_matrix::difference_type difference_type;
+ typedef typename mapped_matrix::const_reference reference;
+ typedef const typename mapped_matrix::pointer pointer;
+
+ typedef const_iterator1 dual_iterator_type;
+ typedef const_reverse_iterator1 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator2 ():
+ container_const_reference<self_type> (), rank_ (), i_ (), j_ (), it_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator2 (const self_type &m, int rank, size_type i, size_type j, const const_subiterator_type &it):
+ container_const_reference<self_type> (m), rank_ (rank), i_ (i), j_ (j), it_ (it) {}
+ BOOST_UBLAS_INLINE
+ const_iterator2 (const iterator2 &it):
+ container_const_reference<self_type> (it ()), rank_ (it.rank_), i_ (it.i_), j_ (it.j_), it_ (it.it_) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator ++ () {
+ if (rank_ == 1 && layout_type::fast2 ())
+ ++ it_;
+ else
+ *this = (*this) ().find2 (rank_, i_, index2 () + 1, 1);
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator -- () {
+ if (rank_ == 1 && layout_type::fast2 ())
+ -- it_;
+ else
+ *this = (*this) ().find2 (rank_, i_, index2 () - 1, -1);
+ return *this;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ BOOST_UBLAS_CHECK (index1 () < (*this) ().size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (index2 () < (*this) ().size2 (), bad_index ());
+ if (rank_ == 1) {
+ return (*it_).second;
+ } else {
+ return (*this) () (i_, j_);
+ }
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 begin () const {
+ const self_type &m = (*this) ();
+ return m.find1 (1, 0, index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 end () const {
+ const self_type &m = (*this) ();
+ return m.find1 (1, m.size1 (), index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rbegin () const {
+ return const_reverse_iterator1 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rend () const {
+ return const_reverse_iterator1 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ if (rank_ == 1) {
+ const self_type &m = (*this) ();
+ BOOST_UBLAS_CHECK (layout_type::index1 ((*it_).first, m.size1 (), m.size2 ()) < (*this) ().size1 (), bad_index ());
+ return layout_type::index1 ((*it_).first, m.size1 (), m.size2 ());
+ } else {
+ return i_;
+ }
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ BOOST_UBLAS_CHECK (*this != (*this) ().find2 (0, i_, (*this) ().size2 ()), bad_index ());
+ if (rank_ == 1) {
+ const self_type &m = (*this) ();
+ BOOST_UBLAS_CHECK (layout_type::index2 ((*it_).first, m.size1 (), m.size2 ()) < (*this) ().size2 (), bad_index ());
+ return layout_type::index2 ((*it_).first, m.size1 (), m.size2 ());
+ } else {
+ return j_;
+ }
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator = (const const_iterator2 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ rank_ = it.rank_;
+ i_ = it.i_;
+ j_ = it.j_;
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ // BOOST_UBLAS_CHECK (rank_ == it.rank_, internal_logic ());
+ if (rank_ == 1 || it.rank_ == 1) {
+ return it_ == it.it_;
+ } else {
+ return i_ == it.i_ && j_ == it.j_;
+ }
+ }
+
+ private:
+ int rank_;
+ size_type i_;
+ size_type j_;
+ const_subiterator_type it_;
+ };
+
+ BOOST_UBLAS_INLINE
+ const_iterator2 begin2 () const {
+ return find2 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 end2 () const {
+ return find2 (0, 0, size2_);
+ }
+
+ class iterator2:
+ public container_reference<mapped_matrix>,
+ public bidirectional_iterator_base<sparse_bidirectional_iterator_tag,
+ iterator2, value_type> {
+ public:
+ typedef typename mapped_matrix::value_type value_type;
+ typedef typename mapped_matrix::difference_type difference_type;
+ typedef typename mapped_matrix::true_reference reference;
+ typedef typename mapped_matrix::pointer pointer;
+
+ typedef iterator1 dual_iterator_type;
+ typedef reverse_iterator1 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ iterator2 ():
+ container_reference<self_type> (), rank_ (), i_ (), j_ (), it_ () {}
+ BOOST_UBLAS_INLINE
+ iterator2 (self_type &m, int rank, size_type i, size_type j, const subiterator_type &it):
+ container_reference<self_type> (m), rank_ (rank), i_ (i), j_ (j), it_ (it) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ iterator2 &operator ++ () {
+ if (rank_ == 1 && layout_type::fast2 ())
+ ++ it_;
+ else
+ *this = (*this) ().find2 (rank_, i_, index2 () + 1, 1);
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 &operator -- () {
+ if (rank_ == 1 && layout_type::fast2 ())
+ -- it_;
+ else
+ *this = (*this) ().find2 (rank_, i_, index2 () - 1, -1);
+ return *this;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ BOOST_UBLAS_CHECK (index1 () < (*this) ().size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (index2 () < (*this) ().size2 (), bad_index ());
+ if (rank_ == 1) {
+ return (*it_).second;
+ } else {
+ return (*this) ().at_element (i_, j_);
+ }
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator1 begin () const {
+ self_type &m = (*this) ();
+ return m.find1 (1, 0, index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator1 end () const {
+ self_type &m = (*this) ();
+ return m.find1 (1, m.size1 (), index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator1 rbegin () const {
+ return reverse_iterator1 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator1 rend () const {
+ return reverse_iterator1 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ if (rank_ == 1) {
+ const self_type &m = (*this) ();
+ BOOST_UBLAS_CHECK (layout_type::index1 ((*it_).first, m.size1 (), m.size2 ()) < (*this) ().size1 (), bad_index ());
+ return layout_type::index1 ((*it_).first, m.size1 (), m.size2 ());
+ } else {
+ return i_;
+ }
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ BOOST_UBLAS_CHECK (*this != (*this) ().find2 (0, i_, (*this) ().size2 ()), bad_index ());
+ if (rank_ == 1) {
+ const self_type &m = (*this) ();
+ BOOST_UBLAS_CHECK (layout_type::index2 ((*it_).first, m.size1 (), m.size2 ()) < (*this) ().size2 (), bad_index ());
+ return layout_type::index2 ((*it_).first, m.size1 (), m.size2 ());
+ } else {
+ return j_;
+ }
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ iterator2 &operator = (const iterator2 &it) {
+ container_reference<self_type>::assign (&it ());
+ rank_ = it.rank_;
+ i_ = it.i_;
+ j_ = it.j_;
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ // BOOST_UBLAS_CHECK (rank_ == it.rank_, internal_logic ());
+ if (rank_ == 1 || it.rank_ == 1) {
+ return it_ == it.it_;
+ } else {
+ return i_ == it.i_ && j_ == it.j_;
+ }
+ }
+
+ private:
+ int rank_;
+ size_type i_;
+ size_type j_;
+ subiterator_type it_;
+
+ friend class const_iterator2;
+ };
+
+ BOOST_UBLAS_INLINE
+ iterator2 begin2 () {
+ return find2 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 end2 () {
+ return find2 (0, 0, size2_);
+ }
+
+ // Reverse iterators
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rbegin1 () const {
+ return const_reverse_iterator1 (end1 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rend1 () const {
+ return const_reverse_iterator1 (begin1 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ reverse_iterator1 rbegin1 () {
+ return reverse_iterator1 (end1 ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator1 rend1 () {
+ return reverse_iterator1 (begin1 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rbegin2 () const {
+ return const_reverse_iterator2 (end2 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rend2 () const {
+ return const_reverse_iterator2 (begin2 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ reverse_iterator2 rbegin2 () {
+ return reverse_iterator2 (end2 ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator2 rend2 () {
+ return reverse_iterator2 (begin2 ());
+ }
+
+ private:
+ size_type size1_;
+ size_type size2_;
+ array_type data_;
+ static const value_type zero_;
+ };
+
+ template<class T, class L, class A>
+ const typename mapped_matrix<T, L, A>::value_type mapped_matrix<T, L, A>::zero_ = value_type/*zero*/();
+
+
+ // Vector index map based sparse matrix class
+ template<class T, class L, class A>
+ class mapped_vector_of_mapped_vector:
+ public matrix_container<mapped_vector_of_mapped_vector<T, L, A> > {
+
+ typedef T &true_reference;
+ typedef T *pointer;
+ typedef const T *const_pointer;
+ typedef A array_type;
+ typedef const A const_array_type;
+ typedef L layout_type;
+ typedef mapped_vector_of_mapped_vector<T, L, A> self_type;
+ public:
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using matrix_container<self_type>::operator ();
+#endif
+ typedef typename A::size_type size_type;
+ typedef typename A::difference_type difference_type;
+ typedef T value_type;
+ typedef const T &const_reference;
+#ifndef BOOST_UBLAS_STRICT_MATRIX_SPARSE
+ typedef typename detail::map_traits<typename A::data_value_type, T>::reference reference;
+#else
+ typedef sparse_matrix_element<self_type> reference;
+#endif
+ typedef const matrix_reference<const self_type> const_closure_type;
+ typedef matrix_reference<self_type> closure_type;
+ typedef mapped_vector<T, typename A::value_type> vector_temporary_type;
+ typedef self_type matrix_temporary_type;
+ typedef typename A::value_type::second_type vector_data_value_type;
+ typedef sparse_tag storage_category;
+ typedef typename L::orientation_category orientation_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ mapped_vector_of_mapped_vector ():
+ matrix_container<self_type> (),
+ size1_ (0), size2_ (0), data_ () {
+ data_ [layout_type::size1 (size1_, size2_)] = vector_data_value_type ();
+ }
+ BOOST_UBLAS_INLINE
+ mapped_vector_of_mapped_vector (size_type size1, size_type size2, size_type non_zeros = 0):
+ matrix_container<self_type> (),
+ size1_ (size1), size2_ (size2), data_ () {
+ data_ [layout_type::size1 (size1_, size2_)] = vector_data_value_type ();
+ }
+ BOOST_UBLAS_INLINE
+ mapped_vector_of_mapped_vector (const mapped_vector_of_mapped_vector &m):
+ matrix_container<self_type> (),
+ size1_ (m.size1_), size2_ (m.size2_), data_ (m.data_) {}
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ mapped_vector_of_mapped_vector (const matrix_expression<AE> &ae, size_type non_zeros = 0):
+ matrix_container<self_type> (),
+ size1_ (ae ().size1 ()), size2_ (ae ().size2 ()), data_ () {
+ data_ [layout_type::size1 (size1_, size2_)] = vector_data_value_type ();
+ matrix_assign<scalar_assign> (*this, ae);
+ }
+
+ // Accessors
+ BOOST_UBLAS_INLINE
+ size_type size1 () const {
+ return size1_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type size2 () const {
+ return size2_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type nnz_capacity () const {
+ size_type non_zeros = 0;
+ for (vector_const_subiterator_type itv = data_ ().begin (); itv != data_ ().end (); ++ itv)
+ non_zeros += detail::map_capacity (*itv);
+ return non_zeros;
+ }
+ BOOST_UBLAS_INLINE
+ size_type nnz () const {
+ size_type filled = 0;
+ for (vector_const_subiterator_type itv = data_ ().begin (); itv != data_ ().end (); ++ itv)
+ filled += (*itv).size ();
+ return filled;
+ }
+
+ // Storage accessors
+ BOOST_UBLAS_INLINE
+ const_array_type &data () const {
+ return data_;
+ }
+ BOOST_UBLAS_INLINE
+ array_type &data () {
+ return data_;
+ }
+
+ // Resizing
+ BOOST_UBLAS_INLINE
+ void resize (size_type size1, size_type size2, bool preserve = true) {
+ // FIXME preserve unimplemented
+ BOOST_UBLAS_CHECK (!preserve, internal_logic ());
+ size1_ = size1;
+ size2_ = size2;
+ data ().clear ();
+ data () [layout_type::size1 (size1_, size2_)] = vector_data_value_type ();
+ }
+
+ // Element support
+ BOOST_UBLAS_INLINE
+ pointer find_element (size_type i, size_type j) {
+ return const_cast<pointer> (const_cast<const self_type&>(*this).find_element (i, j));
+ }
+ BOOST_UBLAS_INLINE
+ const_pointer find_element (size_type i, size_type j) const {
+ const size_type element1 = layout_type::element1 (i, size1_, j, size2_);
+ const size_type element2 = layout_type::element2 (i, size1_, j, size2_);
+ vector_const_subiterator_type itv (data ().find (element1));
+ if (itv == data ().end ())
+ return 0;
+ BOOST_UBLAS_CHECK ((*itv).first == element1, internal_logic ()); // broken map
+ const_subiterator_type it ((*itv).second.find (element2));
+ if (it == (*itv).second.end ())
+ return 0;
+ BOOST_UBLAS_CHECK ((*it).first == element2, internal_logic ()); // broken map
+ return &(*it).second;
+ }
+
+ // Element access
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type i, size_type j) const {
+ const size_type element1 = layout_type::element1 (i, size1_, j, size2_);
+ const size_type element2 = layout_type::element2 (i, size1_, j, size2_);
+ vector_const_subiterator_type itv (data ().find (element1));
+ if (itv == data ().end ())
+ return zero_;
+ BOOST_UBLAS_CHECK ((*itv).first == element1, internal_logic ()); // broken map
+ const_subiterator_type it ((*itv).second.find (element2));
+ if (it == (*itv).second.end ())
+ return zero_;
+ BOOST_UBLAS_CHECK ((*itv).first == element1, internal_logic ()); // broken map
+ return (*it).second;
+ }
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type i, size_type j) {
+#ifndef BOOST_UBLAS_STRICT_MATRIX_SPARSE
+ const size_type element1 = layout_type::element1 (i, size1_, j, size2_);
+ const size_type element2 = layout_type::element2 (i, size1_, j, size2_);
+ vector_data_value_type& vd (data () [element1]);
+ std::pair<subiterator_type, bool> ii (vd.insert (typename array_type::value_type::second_type::value_type (element2, value_type/*zero*/())));
+ BOOST_UBLAS_CHECK ((ii.first)->first == element2, internal_logic ()); // broken map
+ return (ii.first)->second;
+#else
+ return reference (*this, i, j);
+#endif
+ }
+
+ // Element assignment
+ BOOST_UBLAS_INLINE
+ true_reference insert_element (size_type i, size_type j, const_reference t) {
+ BOOST_UBLAS_CHECK (!find_element (i, j), bad_index ()); // duplicate element
+ const size_type element1 = layout_type::element1 (i, size1_, j, size2_);
+ const size_type element2 = layout_type::element2 (i, size1_, j, size2_);
+
+ vector_data_value_type& vd (data () [element1]);
+ std::pair<subiterator_type, bool> ii (vd.insert (typename vector_data_value_type::value_type (element2, t)));
+ BOOST_UBLAS_CHECK ((ii.first)->first == element2, internal_logic ()); // broken map
+ if (!ii.second) // existing element
+ (ii.first)->second = t;
+ return (ii.first)->second;
+ }
+ BOOST_UBLAS_INLINE
+ void erase_element (size_type i, size_type j) {
+ vector_subiterator_type itv (data ().find (layout_type::element1 (i, size1_, j, size2_)));
+ if (itv == data ().end ())
+ return;
+ subiterator_type it ((*itv).second.find (layout_type::element2 (i, size1_, j, size2_)));
+ if (it == (*itv).second.end ())
+ return;
+ (*itv).second.erase (it);
+ }
+
+ // Zeroing
+ BOOST_UBLAS_INLINE
+ void clear () {
+ data ().clear ();
+ data_ [layout_type::size1 (size1_, size2_)] = vector_data_value_type ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ mapped_vector_of_mapped_vector &operator = (const mapped_vector_of_mapped_vector &m) {
+ if (this != &m) {
+ size1_ = m.size1_;
+ size2_ = m.size2_;
+ data () = m.data ();
+ }
+ return *this;
+ }
+ template<class C> // Container assignment without temporary
+ BOOST_UBLAS_INLINE
+ mapped_vector_of_mapped_vector &operator = (const matrix_container<C> &m) {
+ resize (m ().size1 (), m ().size2 ());
+ assign (m);
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ mapped_vector_of_mapped_vector &assign_temporary (mapped_vector_of_mapped_vector &m) {
+ swap (m);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ mapped_vector_of_mapped_vector &operator = (const matrix_expression<AE> &ae) {
+ self_type temporary (ae);
+ return assign_temporary (temporary);
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ mapped_vector_of_mapped_vector &assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_assign> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ mapped_vector_of_mapped_vector& operator += (const matrix_expression<AE> &ae) {
+ self_type temporary (*this + ae);
+ return assign_temporary (temporary);
+ }
+ template<class C> // Container assignment without temporary
+ BOOST_UBLAS_INLINE
+ mapped_vector_of_mapped_vector &operator += (const matrix_container<C> &m) {
+ plus_assign (m);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ mapped_vector_of_mapped_vector &plus_assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_plus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ mapped_vector_of_mapped_vector& operator -= (const matrix_expression<AE> &ae) {
+ self_type temporary (*this - ae);
+ return assign_temporary (temporary);
+ }
+ template<class C> // Container assignment without temporary
+ BOOST_UBLAS_INLINE
+ mapped_vector_of_mapped_vector &operator -= (const matrix_container<C> &m) {
+ minus_assign (m);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ mapped_vector_of_mapped_vector &minus_assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_minus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ mapped_vector_of_mapped_vector& operator *= (const AT &at) {
+ matrix_assign_scalar<scalar_multiplies_assign> (*this, at);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ mapped_vector_of_mapped_vector& operator /= (const AT &at) {
+ matrix_assign_scalar<scalar_divides_assign> (*this, at);
+ return *this;
+ }
+
+ // Swapping
+ BOOST_UBLAS_INLINE
+ void swap (mapped_vector_of_mapped_vector &m) {
+ if (this != &m) {
+ std::swap (size1_, m.size1_);
+ std::swap (size2_, m.size2_);
+ data ().swap (m.data ());
+ }
+ }
+ BOOST_UBLAS_INLINE
+ friend void swap (mapped_vector_of_mapped_vector &m1, mapped_vector_of_mapped_vector &m2) {
+ m1.swap (m2);
+ }
+
+ // Iterator types
+ private:
+ // Use storage iterators
+ typedef typename A::const_iterator vector_const_subiterator_type;
+ typedef typename A::iterator vector_subiterator_type;
+ typedef typename A::value_type::second_type::const_iterator const_subiterator_type;
+ typedef typename A::value_type::second_type::iterator subiterator_type;
+
+ BOOST_UBLAS_INLINE
+ true_reference at_element (size_type i, size_type j) {
+ const size_type element1 = layout_type::element1 (i, size1_, j, size2_);
+ const size_type element2 = layout_type::element2 (i, size1_, j, size2_);
+ vector_subiterator_type itv (data ().find (element1));
+ BOOST_UBLAS_CHECK (itv != data ().end(), bad_index ());
+ BOOST_UBLAS_CHECK ((*itv).first == element1, internal_logic ()); // broken map
+ subiterator_type it ((*itv).second.find (element2));
+ BOOST_UBLAS_CHECK (it != (*itv).second.end (), bad_index ());
+ BOOST_UBLAS_CHECK ((*it).first == element2, internal_logic ()); // broken map
+
+ return it->second;
+ }
+
+ public:
+ class const_iterator1;
+ class iterator1;
+ class const_iterator2;
+ class iterator2;
+ typedef reverse_iterator_base1<const_iterator1> const_reverse_iterator1;
+ typedef reverse_iterator_base1<iterator1> reverse_iterator1;
+ typedef reverse_iterator_base2<const_iterator2> const_reverse_iterator2;
+ typedef reverse_iterator_base2<iterator2> reverse_iterator2;
+
+ // Element lookup
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ const_iterator1 find1 (int rank, size_type i, size_type j, int direction = 1) const {
+ BOOST_UBLAS_CHECK (data ().begin () != data ().end (), internal_logic ());
+ for (;;) {
+ vector_const_subiterator_type itv (data ().lower_bound (layout_type::address1 (i, size1_, j, size2_)));
+ vector_const_subiterator_type itv_end (data ().end ());
+ if (itv == itv_end)
+ return const_iterator1 (*this, rank, i, j, itv_end, (*(-- itv)).second.end ());
+
+ const_subiterator_type it ((*itv).second.lower_bound (layout_type::address2 (i, size1_, j, size2_)));
+ const_subiterator_type it_end ((*itv).second.end ());
+ if (rank == 0)
+ return const_iterator1 (*this, rank, i, j, itv, it);
+ if (it != it_end && (*it).first == layout_type::address2 (i, size1_, j, size2_))
+ return const_iterator1 (*this, rank, i, j, itv, it);
+ if (direction > 0) {
+ if (layout_type::fast1 ()) {
+ if (it == it_end)
+ return const_iterator1 (*this, rank, i, j, itv, it);
+ i = (*it).first;
+ } else {
+ if (i >= size1_)
+ return const_iterator1 (*this, rank, i, j, itv, it);
+ ++ i;
+ }
+ } else /* if (direction < 0) */ {
+ if (layout_type::fast1 ()) {
+ if (it == (*itv).second.begin ())
+ return const_iterator1 (*this, rank, i, j, itv, it);
+ -- it;
+ i = (*it).first;
+ } else {
+ if (i == 0)
+ return const_iterator1 (*this, rank, i, j, itv, it);
+ -- i;
+ }
+ }
+ }
+ }
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ iterator1 find1 (int rank, size_type i, size_type j, int direction = 1) {
+ BOOST_UBLAS_CHECK (data ().begin () != data ().end (), internal_logic ());
+ for (;;) {
+ vector_subiterator_type itv (data ().lower_bound (layout_type::address1 (i, size1_, j, size2_)));
+ vector_subiterator_type itv_end (data ().end ());
+ if (itv == itv_end)
+ return iterator1 (*this, rank, i, j, itv_end, (*(-- itv)).second.end ());
+
+ subiterator_type it ((*itv).second.lower_bound (layout_type::address2 (i, size1_, j, size2_)));
+ subiterator_type it_end ((*itv).second.end ());
+ if (rank == 0)
+ return iterator1 (*this, rank, i, j, itv, it);
+ if (it != it_end && (*it).first == layout_type::address2 (i, size1_, j, size2_))
+ return iterator1 (*this, rank, i, j, itv, it);
+ if (direction > 0) {
+ if (layout_type::fast1 ()) {
+ if (it == it_end)
+ return iterator1 (*this, rank, i, j, itv, it);
+ i = (*it).first;
+ } else {
+ if (i >= size1_)
+ return iterator1 (*this, rank, i, j, itv, it);
+ ++ i;
+ }
+ } else /* if (direction < 0) */ {
+ if (layout_type::fast1 ()) {
+ if (it == (*itv).second.begin ())
+ return iterator1 (*this, rank, i, j, itv, it);
+ -- it;
+ i = (*it).first;
+ } else {
+ if (i == 0)
+ return iterator1 (*this, rank, i, j, itv, it);
+ -- i;
+ }
+ }
+ }
+ }
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ const_iterator2 find2 (int rank, size_type i, size_type j, int direction = 1) const {
+ BOOST_UBLAS_CHECK (data ().begin () != data ().end (), internal_logic ());
+ for (;;) {
+ vector_const_subiterator_type itv (data ().lower_bound (layout_type::address1 (i, size1_, j, size2_)));
+ vector_const_subiterator_type itv_end (data ().end ());
+ if (itv == itv_end)
+ return const_iterator2 (*this, rank, i, j, itv_end, (*(-- itv)).second.end ());
+
+ const_subiterator_type it ((*itv).second.lower_bound (layout_type::address2 (i, size1_, j, size2_)));
+ const_subiterator_type it_end ((*itv).second.end ());
+ if (rank == 0)
+ return const_iterator2 (*this, rank, i, j, itv, it);
+ if (it != it_end && (*it).first == layout_type::address2 (i, size1_, j, size2_))
+ return const_iterator2 (*this, rank, i, j, itv, it);
+ if (direction > 0) {
+ if (layout_type::fast2 ()) {
+ if (it == it_end)
+ return const_iterator2 (*this, rank, i, j, itv, it);
+ j = (*it).first;
+ } else {
+ if (j >= size2_)
+ return const_iterator2 (*this, rank, i, j, itv, it);
+ ++ j;
+ }
+ } else /* if (direction < 0) */ {
+ if (layout_type::fast2 ()) {
+ if (it == (*itv).second.begin ())
+ return const_iterator2 (*this, rank, i, j, itv, it);
+ -- it;
+ j = (*it).first;
+ } else {
+ if (j == 0)
+ return const_iterator2 (*this, rank, i, j, itv, it);
+ -- j;
+ }
+ }
+ }
+ }
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ iterator2 find2 (int rank, size_type i, size_type j, int direction = 1) {
+ BOOST_UBLAS_CHECK (data ().begin () != data ().end (), internal_logic ());
+ for (;;) {
+ vector_subiterator_type itv (data ().lower_bound (layout_type::address1 (i, size1_, j, size2_)));
+ vector_subiterator_type itv_end (data ().end ());
+ if (itv == itv_end)
+ return iterator2 (*this, rank, i, j, itv_end, (*(-- itv)).second.end ());
+
+ subiterator_type it ((*itv).second.lower_bound (layout_type::address2 (i, size1_, j, size2_)));
+ subiterator_type it_end ((*itv).second.end ());
+ if (rank == 0)
+ return iterator2 (*this, rank, i, j, itv, it);
+ if (it != it_end && (*it).first == layout_type::address2 (i, size1_, j, size2_))
+ return iterator2 (*this, rank, i, j, itv, it);
+ if (direction > 0) {
+ if (layout_type::fast2 ()) {
+ if (it == it_end)
+ return iterator2 (*this, rank, i, j, itv, it);
+ j = (*it).first;
+ } else {
+ if (j >= size2_)
+ return iterator2 (*this, rank, i, j, itv, it);
+ ++ j;
+ }
+ } else /* if (direction < 0) */ {
+ if (layout_type::fast2 ()) {
+ if (it == (*itv).second.begin ())
+ return iterator2 (*this, rank, i, j, itv, it);
+ -- it;
+ j = (*it).first;
+ } else {
+ if (j == 0)
+ return iterator2 (*this, rank, i, j, itv, it);
+ -- j;
+ }
+ }
+ }
+ }
+
+ class const_iterator1:
+ public container_const_reference<mapped_vector_of_mapped_vector>,
+ public bidirectional_iterator_base<sparse_bidirectional_iterator_tag,
+ const_iterator1, value_type> {
+ public:
+ typedef typename mapped_vector_of_mapped_vector::value_type value_type;
+ typedef typename mapped_vector_of_mapped_vector::difference_type difference_type;
+ typedef typename mapped_vector_of_mapped_vector::const_reference reference;
+ typedef const typename mapped_vector_of_mapped_vector::pointer pointer;
+
+ typedef const_iterator2 dual_iterator_type;
+ typedef const_reverse_iterator2 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator1 ():
+ container_const_reference<self_type> (), rank_ (), i_ (), j_ (), itv_ (), it_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator1 (const self_type &m, int rank, size_type i, size_type j, const vector_const_subiterator_type &itv, const const_subiterator_type &it):
+ container_const_reference<self_type> (m), rank_ (rank), i_ (i), j_ (j), itv_ (itv), it_ (it) {}
+ BOOST_UBLAS_INLINE
+ const_iterator1 (const iterator1 &it):
+ container_const_reference<self_type> (it ()), rank_ (it.rank_), i_ (it.i_), j_ (it.j_), itv_ (it.itv_), it_ (it.it_) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator ++ () {
+ if (rank_ == 1 && layout_type::fast1 ())
+ ++ it_;
+ else {
+ const self_type &m = (*this) ();
+ i_ = index1 () + 1;
+ if (rank_ == 1 && ++ itv_ == m.end1 ().itv_)
+ *this = m.find1 (rank_, i_, j_, 1);
+ else if (rank_ == 1) {
+ it_ = (*itv_).second.begin ();
+ if (it_ == (*itv_).second.end () || index2 () != j_)
+ *this = m.find1 (rank_, i_, j_, 1);
+ }
+ }
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator -- () {
+ if (rank_ == 1 && layout_type::fast1 ())
+ -- it_;
+ else {
+ const self_type &m = (*this) ();
+ i_ = index1 () - 1;
+ if (rank_ == 1 && -- itv_ == m.end1 ().itv_)
+ *this = m.find1 (rank_, i_, j_, -1);
+ else if (rank_ == 1) {
+ it_ = (*itv_).second.begin ();
+ if (it_ == (*itv_).second.end () || index2 () != j_)
+ *this = m.find1 (rank_, i_, j_, -1);
+ }
+ }
+ return *this;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ BOOST_UBLAS_CHECK (index1 () < (*this) ().size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (index2 () < (*this) ().size2 (), bad_index ());
+ if (rank_ == 1) {
+ return (*it_).second;
+ } else {
+ return (*this) () (i_, j_);
+ }
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 begin () const {
+ const self_type &m = (*this) ();
+ return m.find2 (1, index1 (), 0);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 end () const {
+ const self_type &m = (*this) ();
+ return m.find2 (1, index1 (), m.size2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rbegin () const {
+ return const_reverse_iterator2 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rend () const {
+ return const_reverse_iterator2 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ BOOST_UBLAS_CHECK (*this != (*this) ().find1 (0, (*this) ().size1 (), j_), bad_index ());
+ if (rank_ == 1) {
+ BOOST_UBLAS_CHECK (layout_type::index1 ((*itv_).first, (*it_).first) < (*this) ().size1 (), bad_index ());
+ return layout_type::index1 ((*itv_).first, (*it_).first);
+ } else {
+ return i_;
+ }
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ if (rank_ == 1) {
+ BOOST_UBLAS_CHECK (layout_type::index2 ((*itv_).first, (*it_).first) < (*this) ().size2 (), bad_index ());
+ return layout_type::index2 ((*itv_).first, (*it_).first);
+ } else {
+ return j_;
+ }
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator = (const const_iterator1 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ rank_ = it.rank_;
+ i_ = it.i_;
+ j_ = it.j_;
+ itv_ = it.itv_;
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ // BOOST_UBLAS_CHECK (rank_ == it.rank_, internal_logic ());
+ if (rank_ == 1 || it.rank_ == 1) {
+ return it_ == it.it_;
+ } else {
+ return i_ == it.i_ && j_ == it.j_;
+ }
+ }
+
+ private:
+ int rank_;
+ size_type i_;
+ size_type j_;
+ vector_const_subiterator_type itv_;
+ const_subiterator_type it_;
+ };
+
+ BOOST_UBLAS_INLINE
+ const_iterator1 begin1 () const {
+ return find1 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 end1 () const {
+ return find1 (0, size1_, 0);
+ }
+
+ class iterator1:
+ public container_reference<mapped_vector_of_mapped_vector>,
+ public bidirectional_iterator_base<sparse_bidirectional_iterator_tag,
+ iterator1, value_type> {
+ public:
+ typedef typename mapped_vector_of_mapped_vector::value_type value_type;
+ typedef typename mapped_vector_of_mapped_vector::difference_type difference_type;
+ typedef typename mapped_vector_of_mapped_vector::true_reference reference;
+ typedef typename mapped_vector_of_mapped_vector::pointer pointer;
+
+ typedef iterator2 dual_iterator_type;
+ typedef reverse_iterator2 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ iterator1 ():
+ container_reference<self_type> (), rank_ (), i_ (), j_ (), itv_ (), it_ () {}
+ BOOST_UBLAS_INLINE
+ iterator1 (self_type &m, int rank, size_type i, size_type j, const vector_subiterator_type &itv, const subiterator_type &it):
+ container_reference<self_type> (m), rank_ (rank), i_ (i), j_ (j), itv_ (itv), it_ (it) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ iterator1 &operator ++ () {
+ if (rank_ == 1 && layout_type::fast1 ())
+ ++ it_;
+ else {
+ self_type &m = (*this) ();
+ i_ = index1 () + 1;
+ if (rank_ == 1 && ++ itv_ == m.end1 ().itv_)
+ *this = m.find1 (rank_, i_, j_, 1);
+ else if (rank_ == 1) {
+ it_ = (*itv_).second.begin ();
+ if (it_ == (*itv_).second.end () || index2 () != j_)
+ *this = m.find1 (rank_, i_, j_, 1);
+ }
+ }
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 &operator -- () {
+ if (rank_ == 1 && layout_type::fast1 ())
+ -- it_;
+ else {
+ self_type &m = (*this) ();
+ i_ = index1 () - 1;
+ if (rank_ == 1 && -- itv_ == m.end1 ().itv_)
+ *this = m.find1 (rank_, i_, j_, -1);
+ else if (rank_ == 1) {
+ it_ = (*itv_).second.begin ();
+ if (it_ == (*itv_).second.end () || index2 () != j_)
+ *this = m.find1 (rank_, i_, j_, -1);
+ }
+ }
+ return *this;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ BOOST_UBLAS_CHECK (index1 () < (*this) ().size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (index2 () < (*this) ().size2 (), bad_index ());
+ if (rank_ == 1) {
+ return (*it_).second;
+ } else {
+ return (*this) ().at_element (i_, j_);
+ }
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator2 begin () const {
+ self_type &m = (*this) ();
+ return m.find2 (1, index1 (), 0);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator2 end () const {
+ self_type &m = (*this) ();
+ return m.find2 (1, index1 (), m.size2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator2 rbegin () const {
+ return reverse_iterator2 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator2 rend () const {
+ return reverse_iterator2 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ BOOST_UBLAS_CHECK (*this != (*this) ().find1 (0, (*this) ().size1 (), j_), bad_index ());
+ if (rank_ == 1) {
+ BOOST_UBLAS_CHECK (layout_type::index1 ((*itv_).first, (*it_).first) < (*this) ().size1 (), bad_index ());
+ return layout_type::index1 ((*itv_).first, (*it_).first);
+ } else {
+ return i_;
+ }
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ if (rank_ == 1) {
+ BOOST_UBLAS_CHECK (layout_type::index2 ((*itv_).first, (*it_).first) < (*this) ().size2 (), bad_index ());
+ return layout_type::index2 ((*itv_).first, (*it_).first);
+ } else {
+ return j_;
+ }
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ iterator1 &operator = (const iterator1 &it) {
+ container_reference<self_type>::assign (&it ());
+ rank_ = it.rank_;
+ i_ = it.i_;
+ j_ = it.j_;
+ itv_ = it.itv_;
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ // BOOST_UBLAS_CHECK (rank_ == it.rank_, internal_logic ());
+ if (rank_ == 1 || it.rank_ == 1) {
+ return it_ == it.it_;
+ } else {
+ return i_ == it.i_ && j_ == it.j_;
+ }
+ }
+
+ private:
+ int rank_;
+ size_type i_;
+ size_type j_;
+ vector_subiterator_type itv_;
+ subiterator_type it_;
+
+ friend class const_iterator1;
+ };
+
+ BOOST_UBLAS_INLINE
+ iterator1 begin1 () {
+ return find1 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 end1 () {
+ return find1 (0, size1_, 0);
+ }
+
+ class const_iterator2:
+ public container_const_reference<mapped_vector_of_mapped_vector>,
+ public bidirectional_iterator_base<sparse_bidirectional_iterator_tag,
+ const_iterator2, value_type> {
+ public:
+ typedef typename mapped_vector_of_mapped_vector::value_type value_type;
+ typedef typename mapped_vector_of_mapped_vector::difference_type difference_type;
+ typedef typename mapped_vector_of_mapped_vector::const_reference reference;
+ typedef const typename mapped_vector_of_mapped_vector::pointer pointer;
+
+ typedef const_iterator1 dual_iterator_type;
+ typedef const_reverse_iterator1 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator2 ():
+ container_const_reference<self_type> (), rank_ (), i_ (), j_ (), itv_ (), it_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator2 (const self_type &m, int rank, size_type i, size_type j, const vector_const_subiterator_type &itv, const const_subiterator_type &it):
+ container_const_reference<self_type> (m), rank_ (rank), i_ (i), j_ (j), itv_ (itv), it_ (it) {}
+ BOOST_UBLAS_INLINE
+ const_iterator2 (const iterator2 &it):
+ container_const_reference<self_type> (it ()), rank_ (it.rank_), i_ (it.i_), j_ (it.j_), itv_ (it.itv_), it_ (it.it_) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator ++ () {
+ if (rank_ == 1 && layout_type::fast2 ())
+ ++ it_;
+ else {
+ const self_type &m = (*this) ();
+ j_ = index2 () + 1;
+ if (rank_ == 1 && ++ itv_ == m.end2 ().itv_)
+ *this = m.find2 (rank_, i_, j_, 1);
+ else if (rank_ == 1) {
+ it_ = (*itv_).second.begin ();
+ if (it_ == (*itv_).second.end () || index1 () != i_)
+ *this = m.find2 (rank_, i_, j_, 1);
+ }
+ }
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator -- () {
+ if (rank_ == 1 && layout_type::fast2 ())
+ -- it_;
+ else {
+ const self_type &m = (*this) ();
+ j_ = index2 () - 1;
+ if (rank_ == 1 && -- itv_ == m.end2 ().itv_)
+ *this = m.find2 (rank_, i_, j_, -1);
+ else if (rank_ == 1) {
+ it_ = (*itv_).second.begin ();
+ if (it_ == (*itv_).second.end () || index1 () != i_)
+ *this = m.find2 (rank_, i_, j_, -1);
+ }
+ }
+ return *this;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ BOOST_UBLAS_CHECK (index1 () < (*this) ().size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (index2 () < (*this) ().size2 (), bad_index ());
+ if (rank_ == 1) {
+ return (*it_).second;
+ } else {
+ return (*this) () (i_, j_);
+ }
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 begin () const {
+ const self_type &m = (*this) ();
+ return m.find1 (1, 0, index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 end () const {
+ const self_type &m = (*this) ();
+ return m.find1 (1, m.size1 (), index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rbegin () const {
+ return const_reverse_iterator1 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rend () const {
+ return const_reverse_iterator1 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ if (rank_ == 1) {
+ BOOST_UBLAS_CHECK (layout_type::index1 ((*itv_).first, (*it_).first) < (*this) ().size1 (), bad_index ());
+ return layout_type::index1 ((*itv_).first, (*it_).first);
+ } else {
+ return i_;
+ }
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ BOOST_UBLAS_CHECK (*this != (*this) ().find2 (0, i_, (*this) ().size2 ()), bad_index ());
+ if (rank_ == 1) {
+ BOOST_UBLAS_CHECK (layout_type::index2 ((*itv_).first, (*it_).first) < (*this) ().size2 (), bad_index ());
+ return layout_type::index2 ((*itv_).first, (*it_).first);
+ } else {
+ return j_;
+ }
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator = (const const_iterator2 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ rank_ = it.rank_;
+ i_ = it.i_;
+ j_ = it.j_;
+ itv_ = it.itv_;
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ // BOOST_UBLAS_CHECK (rank_ == it.rank_, internal_logic ());
+ if (rank_ == 1 || it.rank_ == 1) {
+ return it_ == it.it_;
+ } else {
+ return i_ == it.i_ && j_ == it.j_;
+ }
+ }
+
+ private:
+ int rank_;
+ size_type i_;
+ size_type j_;
+ vector_const_subiterator_type itv_;
+ const_subiterator_type it_;
+ };
+
+ BOOST_UBLAS_INLINE
+ const_iterator2 begin2 () const {
+ return find2 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 end2 () const {
+ return find2 (0, 0, size2_);
+ }
+
+ class iterator2:
+ public container_reference<mapped_vector_of_mapped_vector>,
+ public bidirectional_iterator_base<sparse_bidirectional_iterator_tag,
+ iterator2, value_type> {
+ public:
+ typedef typename mapped_vector_of_mapped_vector::value_type value_type;
+ typedef typename mapped_vector_of_mapped_vector::difference_type difference_type;
+ typedef typename mapped_vector_of_mapped_vector::true_reference reference;
+ typedef typename mapped_vector_of_mapped_vector::pointer pointer;
+
+ typedef iterator1 dual_iterator_type;
+ typedef reverse_iterator1 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ iterator2 ():
+ container_reference<self_type> (), rank_ (), i_ (), j_ (), itv_ (), it_ () {}
+ BOOST_UBLAS_INLINE
+ iterator2 (self_type &m, int rank, size_type i, size_type j, const vector_subiterator_type &itv, const subiterator_type &it):
+ container_reference<self_type> (m), rank_ (rank), i_ (i), j_ (j), itv_ (itv), it_ (it) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ iterator2 &operator ++ () {
+ if (rank_ == 1 && layout_type::fast2 ())
+ ++ it_;
+ else {
+ self_type &m = (*this) ();
+ j_ = index2 () + 1;
+ if (rank_ == 1 && ++ itv_ == m.end2 ().itv_)
+ *this = m.find2 (rank_, i_, j_, 1);
+ else if (rank_ == 1) {
+ it_ = (*itv_).second.begin ();
+ if (it_ == (*itv_).second.end () || index1 () != i_)
+ *this = m.find2 (rank_, i_, j_, 1);
+ }
+ }
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 &operator -- () {
+ if (rank_ == 1 && layout_type::fast2 ())
+ -- it_;
+ else {
+ self_type &m = (*this) ();
+ j_ = index2 () - 1;
+ if (rank_ == 1 && -- itv_ == m.end2 ().itv_)
+ *this = m.find2 (rank_, i_, j_, -1);
+ else if (rank_ == 1) {
+ it_ = (*itv_).second.begin ();
+ if (it_ == (*itv_).second.end () || index1 () != i_)
+ *this = m.find2 (rank_, i_, j_, -1);
+ }
+ }
+ return *this;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ BOOST_UBLAS_CHECK (index1 () < (*this) ().size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (index2 () < (*this) ().size2 (), bad_index ());
+ if (rank_ == 1) {
+ return (*it_).second;
+ } else {
+ return (*this) ().at_element (i_, j_);
+ }
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator1 begin () const {
+ self_type &m = (*this) ();
+ return m.find1 (1, 0, index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator1 end () const {
+ self_type &m = (*this) ();
+ return m.find1 (1, m.size1 (), index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator1 rbegin () const {
+ return reverse_iterator1 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator1 rend () const {
+ return reverse_iterator1 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ if (rank_ == 1) {
+ BOOST_UBLAS_CHECK (layout_type::index1 ((*itv_).first, (*it_).first) < (*this) ().size1 (), bad_index ());
+ return layout_type::index1 ((*itv_).first, (*it_).first);
+ } else {
+ return i_;
+ }
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ BOOST_UBLAS_CHECK (*this != (*this) ().find2 (0, i_, (*this) ().size2 ()), bad_index ());
+ if (rank_ == 1) {
+ BOOST_UBLAS_CHECK (layout_type::index2 ((*itv_).first, (*it_).first) < (*this) ().size2 (), bad_index ());
+ return layout_type::index2 ((*itv_).first, (*it_).first);
+ } else {
+ return j_;
+ }
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ iterator2 &operator = (const iterator2 &it) {
+ container_reference<self_type>::assign (&it ());
+ rank_ = it.rank_;
+ i_ = it.i_;
+ j_ = it.j_;
+ itv_ = it.itv_;
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ // BOOST_UBLAS_CHECK (rank_ == it.rank_, internal_logic ());
+ if (rank_ == 1 || it.rank_ == 1) {
+ return it_ == it.it_;
+ } else {
+ return i_ == it.i_ && j_ == it.j_;
+ }
+ }
+
+ private:
+ int rank_;
+ size_type i_;
+ size_type j_;
+ vector_subiterator_type itv_;
+ subiterator_type it_;
+
+ friend class const_iterator2;
+ };
+
+ BOOST_UBLAS_INLINE
+ iterator2 begin2 () {
+ return find2 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 end2 () {
+ return find2 (0, 0, size2_);
+ }
+
+ // Reverse iterators
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rbegin1 () const {
+ return const_reverse_iterator1 (end1 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rend1 () const {
+ return const_reverse_iterator1 (begin1 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ reverse_iterator1 rbegin1 () {
+ return reverse_iterator1 (end1 ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator1 rend1 () {
+ return reverse_iterator1 (begin1 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rbegin2 () const {
+ return const_reverse_iterator2 (end2 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rend2 () const {
+ return const_reverse_iterator2 (begin2 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ reverse_iterator2 rbegin2 () {
+ return reverse_iterator2 (end2 ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator2 rend2 () {
+ return reverse_iterator2 (begin2 ());
+ }
+
+ private:
+ size_type size1_;
+ size_type size2_;
+ array_type data_;
+ static const value_type zero_;
+ };
+
+ template<class T, class L, class A>
+ const typename mapped_vector_of_mapped_vector<T, L, A>::value_type mapped_vector_of_mapped_vector<T, L, A>::zero_ = value_type/*zero*/();
+
+
+ // Comperssed array based sparse matrix class
+ // Thanks to Kresimir Fresl for extending this to cover different index bases.
+ template<class T, class L, std::size_t IB, class IA, class TA>
+ class compressed_matrix:
+ public matrix_container<compressed_matrix<T, L, IB, IA, TA> > {
+
+ typedef T &true_reference;
+ typedef T *pointer;
+ typedef const T *const_pointer;
+ typedef L layout_type;
+ typedef compressed_matrix<T, L, IB, IA, TA> self_type;
+ public:
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using matrix_container<self_type>::operator ();
+#endif
+ // ISSUE require type consistency check
+ // is_convertable (IA::size_type, TA::size_type)
+ typedef typename IA::value_type size_type;
+ // size_type for the data arrays.
+ typedef typename IA::size_type array_size_type;
+ // FIXME difference type for sparse storage iterators should it be in the container?
+ typedef typename IA::difference_type difference_type;
+ typedef T value_type;
+ typedef const T &const_reference;
+#ifndef BOOST_UBLAS_STRICT_MATRIX_SPARSE
+ typedef T &reference;
+#else
+ typedef sparse_matrix_element<self_type> reference;
+#endif
+ typedef IA index_array_type;
+ typedef TA value_array_type;
+ typedef const matrix_reference<const self_type> const_closure_type;
+ typedef matrix_reference<self_type> closure_type;
+ typedef compressed_vector<T, IB, IA, TA> vector_temporary_type;
+ typedef self_type matrix_temporary_type;
+ typedef sparse_tag storage_category;
+ typedef typename L::orientation_category orientation_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ compressed_matrix ():
+ matrix_container<self_type> (),
+ size1_ (0), size2_ (0), capacity_ (restrict_capacity (0)),
+ filled1_ (1), filled2_ (0),
+ index1_data_ (layout_type::size1 (size1_, size2_) + 1), index2_data_ (capacity_), value_data_ (capacity_) {
+ index1_data_ [filled1_ - 1] = k_based (filled2_);
+ storage_invariants ();
+ }
+ BOOST_UBLAS_INLINE
+ compressed_matrix (size_type size1, size_type size2, size_type non_zeros = 0):
+ matrix_container<self_type> (),
+ size1_ (size1), size2_ (size2), capacity_ (restrict_capacity (non_zeros)),
+ filled1_ (1), filled2_ (0),
+ index1_data_ (layout_type::size1 (size1_, size2_) + 1), index2_data_ (capacity_), value_data_ (capacity_) {
+ index1_data_ [filled1_ - 1] = k_based (filled2_);
+ storage_invariants ();
+ }
+ BOOST_UBLAS_INLINE
+ compressed_matrix (const compressed_matrix &m):
+ matrix_container<self_type> (),
+ size1_ (m.size1_), size2_ (m.size2_), capacity_ (m.capacity_),
+ filled1_ (m.filled1_), filled2_ (m.filled2_),
+ index1_data_ (m.index1_data_), index2_data_ (m.index2_data_), value_data_ (m.value_data_) {
+ storage_invariants ();
+ }
+
+ BOOST_UBLAS_INLINE
+ compressed_matrix (const coordinate_matrix<T, L, IB, IA, TA> &m):
+ matrix_container<self_type> (),
+ size1_ (m.size1()), size2_ (m.size2()),
+ index1_data_ (layout_type::size1 (size1_, size2_) + 1)
+ {
+ m.sort();
+ reserve(m.nnz(), false);
+ filled2_ = m.nnz();
+ const_subiterator_type i_start = m.index1_data().begin();
+ const_subiterator_type i_end = (i_start + filled2_);
+ const_subiterator_type i = i_start;
+ size_type r = 1;
+ for (; (r < layout_type::size1 (size1_, size2_)) && (i != i_end); ++r) {
+ i = std::lower_bound(i, i_end, r);
+ index1_data_[r] = k_based( i - i_start );
+ }
+ filled1_ = r + 1;
+ std::copy( m.index2_data().begin(), m.index2_data().begin() + filled2_, index2_data_.begin());
+ std::copy( m.value_data().begin(), m.value_data().begin() + filled2_, value_data_.begin());
+ index1_data_ [filled1_ - 1] = k_based(filled2_);
+ storage_invariants ();
+ }
+
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ compressed_matrix (const matrix_expression<AE> &ae, size_type non_zeros = 0):
+ matrix_container<self_type> (),
+ size1_ (ae ().size1 ()), size2_ (ae ().size2 ()), capacity_ (restrict_capacity (non_zeros)),
+ filled1_ (1), filled2_ (0),
+ index1_data_ (layout_type::size1 (ae ().size1 (), ae ().size2 ()) + 1),
+ index2_data_ (capacity_), value_data_ (capacity_) {
+ index1_data_ [filled1_ - 1] = k_based (filled2_);
+ storage_invariants ();
+ matrix_assign<scalar_assign> (*this, ae);
+ }
+
+ // Accessors
+ BOOST_UBLAS_INLINE
+ size_type size1 () const {
+ return size1_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type size2 () const {
+ return size2_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type nnz_capacity () const {
+ return capacity_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type nnz () const {
+ return filled2_;
+ }
+
+ // Storage accessors
+ BOOST_UBLAS_INLINE
+ static size_type index_base () {
+ return IB;
+ }
+ BOOST_UBLAS_INLINE
+ array_size_type filled1 () const {
+ return filled1_;
+ }
+ BOOST_UBLAS_INLINE
+ array_size_type filled2 () const {
+ return filled2_;
+ }
+ BOOST_UBLAS_INLINE
+ const index_array_type &index1_data () const {
+ return index1_data_;
+ }
+ BOOST_UBLAS_INLINE
+ const index_array_type &index2_data () const {
+ return index2_data_;
+ }
+ BOOST_UBLAS_INLINE
+ const value_array_type &value_data () const {
+ return value_data_;
+ }
+ BOOST_UBLAS_INLINE
+ void set_filled (const array_size_type& filled1, const array_size_type& filled2) {
+ filled1_ = filled1;
+ filled2_ = filled2;
+ storage_invariants ();
+ }
+ BOOST_UBLAS_INLINE
+ index_array_type &index1_data () {
+ return index1_data_;
+ }
+ BOOST_UBLAS_INLINE
+ index_array_type &index2_data () {
+ return index2_data_;
+ }
+ BOOST_UBLAS_INLINE
+ value_array_type &value_data () {
+ return value_data_;
+ }
+ BOOST_UBLAS_INLINE
+ void complete_index1_data () {
+ while (filled1_ <= layout_type::size1 (size1_, size2_)) {
+ this->index1_data_ [filled1_] = k_based (filled2_);
+ ++ this->filled1_;
+ }
+ }
+
+ // Resizing
+ private:
+ BOOST_UBLAS_INLINE
+ size_type restrict_capacity (size_type non_zeros) const {
+ non_zeros = (std::max) (non_zeros, (std::min) (size1_, size2_));
+ // Guarding against overflow - Thanks to Alexei Novakov for the hint.
+ // non_zeros = (std::min) (non_zeros, size1_ * size2_);
+ if (size1_ > 0 && non_zeros / size1_ >= size2_)
+ non_zeros = size1_ * size2_;
+ return non_zeros;
+ }
+ public:
+ BOOST_UBLAS_INLINE
+ void resize (size_type size1, size_type size2, bool preserve = true) {
+ // FIXME preserve unimplemented
+ BOOST_UBLAS_CHECK (!preserve, internal_logic ());
+ size1_ = size1;
+ size2_ = size2;
+ capacity_ = restrict_capacity (capacity_);
+ filled1_ = 1;
+ filled2_ = 0;
+ index1_data_.resize (layout_type::size1 (size1_, size2_) + 1);
+ index2_data_.resize (capacity_);
+ value_data_.resize (capacity_);
+ index1_data_ [filled1_ - 1] = k_based (filled2_);
+ storage_invariants ();
+ }
+
+ // Reserving
+ BOOST_UBLAS_INLINE
+ void reserve (size_type non_zeros, bool preserve = true) {
+ capacity_ = restrict_capacity (non_zeros);
+ if (preserve) {
+ index2_data_.resize (capacity_, size_type ());
+ value_data_.resize (capacity_, value_type ());
+ filled2_ = (std::min) (capacity_, filled2_);
+ }
+ else {
+ index2_data_.resize (capacity_);
+ value_data_.resize (capacity_);
+ filled1_ = 1;
+ filled2_ = 0;
+ index1_data_ [filled1_ - 1] = k_based (filled2_);
+ }
+ storage_invariants ();
+ }
+
+ // Element support
+ BOOST_UBLAS_INLINE
+ pointer find_element (size_type i, size_type j) {
+ return const_cast<pointer> (const_cast<const self_type&>(*this).find_element (i, j));
+ }
+ BOOST_UBLAS_INLINE
+ const_pointer find_element (size_type i, size_type j) const {
+ size_type element1 (layout_type::element1 (i, size1_, j, size2_));
+ size_type element2 (layout_type::element2 (i, size1_, j, size2_));
+ if (filled1_ <= element1 + 1)
+ return 0;
+ vector_const_subiterator_type itv (index1_data_.begin () + element1);
+ const_subiterator_type it_begin (index2_data_.begin () + zero_based (*itv));
+ const_subiterator_type it_end (index2_data_.begin () + zero_based (*(itv + 1)));
+ const_subiterator_type it (detail::lower_bound (it_begin, it_end, k_based (element2), std::less<size_type> ()));
+ if (it == it_end || *it != k_based (element2))
+ return 0;
+ return &value_data_ [it - index2_data_.begin ()];
+ }
+
+ // Element access
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type i, size_type j) const {
+ const_pointer p = find_element (i, j);
+ if (p)
+ return *p;
+ else
+ return zero_;
+ }
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type i, size_type j) {
+#ifndef BOOST_UBLAS_STRICT_MATRIX_SPARSE
+ size_type element1 (layout_type::element1 (i, size1_, j, size2_));
+ size_type element2 (layout_type::element2 (i, size1_, j, size2_));
+ if (filled1_ <= element1 + 1)
+ return insert_element (i, j, value_type/*zero*/());
+ pointer p = find_element (i, j);
+ if (p)
+ return *p;
+ else
+ return insert_element (i, j, value_type/*zero*/());
+#else
+ return reference (*this, i, j);
+#endif
+ }
+
+ // Element assignment
+ BOOST_UBLAS_INLINE
+ true_reference insert_element (size_type i, size_type j, const_reference t) {
+ BOOST_UBLAS_CHECK (!find_element (i, j), bad_index ()); // duplicate element
+ if (filled2_ >= capacity_)
+ reserve (2 * filled2_, true);
+ BOOST_UBLAS_CHECK (filled2_ < capacity_, internal_logic ());
+ size_type element1 = layout_type::element1 (i, size1_, j, size2_);
+ size_type element2 = layout_type::element2 (i, size1_, j, size2_);
+ while (filled1_ <= element1 + 1) {
+ index1_data_ [filled1_] = k_based (filled2_);
+ ++ filled1_;
+ }
+ vector_subiterator_type itv (index1_data_.begin () + element1);
+ subiterator_type it_begin (index2_data_.begin () + zero_based (*itv));
+ subiterator_type it_end (index2_data_.begin () + zero_based (*(itv + 1)));
+ subiterator_type it (detail::lower_bound (it_begin, it_end, k_based (element2), std::less<size_type> ()));
+ typename std::iterator_traits<subiterator_type>::difference_type n = it - index2_data_.begin ();
+ BOOST_UBLAS_CHECK (it == it_end || *it != k_based (element2), internal_logic ()); // duplicate bound by lower_bound
+ ++ filled2_;
+ it = index2_data_.begin () + n;
+ std::copy_backward (it, index2_data_.begin () + filled2_ - 1, index2_data_.begin () + filled2_);
+ *it = k_based (element2);
+ typename value_array_type::iterator itt (value_data_.begin () + n);
+ std::copy_backward (itt, value_data_.begin () + filled2_ - 1, value_data_.begin () + filled2_);
+ *itt = t;
+ while (element1 + 1 < filled1_) {
+ ++ index1_data_ [element1 + 1];
+ ++ element1;
+ }
+ storage_invariants ();
+ return *itt;
+ }
+ BOOST_UBLAS_INLINE
+ void erase_element (size_type i, size_type j) {
+ size_type element1 = layout_type::element1 (i, size1_, j, size2_);
+ size_type element2 = layout_type::element2 (i, size1_, j, size2_);
+ if (element1 + 1 > filled1_)
+ return;
+ vector_subiterator_type itv (index1_data_.begin () + element1);
+ subiterator_type it_begin (index2_data_.begin () + zero_based (*itv));
+ subiterator_type it_end (index2_data_.begin () + zero_based (*(itv + 1)));
+ subiterator_type it (detail::lower_bound (it_begin, it_end, k_based (element2), std::less<size_type> ()));
+ if (it != it_end && *it == k_based (element2)) {
+ typename std::iterator_traits<subiterator_type>::difference_type n = it - index2_data_.begin ();
+ std::copy (it + 1, index2_data_.begin () + filled2_, it);
+ typename value_array_type::iterator itt (value_data_.begin () + n);
+ std::copy (itt + 1, value_data_.begin () + filled2_, itt);
+ -- filled2_;
+ while (index1_data_ [filled1_ - 2] > k_based (filled2_)) {
+ index1_data_ [filled1_ - 1] = 0;
+ -- filled1_;
+ }
+ while (element1 + 1 < filled1_) {
+ -- index1_data_ [element1 + 1];
+ ++ element1;
+ }
+ }
+ storage_invariants ();
+ }
+
+ // Zeroing
+ BOOST_UBLAS_INLINE
+ void clear () {
+ filled1_ = 1;
+ filled2_ = 0;
+ index1_data_ [filled1_ - 1] = k_based (filled2_);
+ storage_invariants ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ compressed_matrix &operator = (const compressed_matrix &m) {
+ if (this != &m) {
+ size1_ = m.size1_;
+ size2_ = m.size2_;
+ capacity_ = m.capacity_;
+ filled1_ = m.filled1_;
+ filled2_ = m.filled2_;
+ index1_data_ = m.index1_data_;
+ index2_data_ = m.index2_data_;
+ value_data_ = m.value_data_;
+ }
+ storage_invariants ();
+ return *this;
+ }
+ template<class C> // Container assignment without temporary
+ BOOST_UBLAS_INLINE
+ compressed_matrix &operator = (const matrix_container<C> &m) {
+ resize (m ().size1 (), m ().size2 (), false);
+ assign (m);
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ compressed_matrix &assign_temporary (compressed_matrix &m) {
+ swap (m);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ compressed_matrix &operator = (const matrix_expression<AE> &ae) {
+ self_type temporary (ae, capacity_);
+ return assign_temporary (temporary);
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ compressed_matrix &assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_assign> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ compressed_matrix& operator += (const matrix_expression<AE> &ae) {
+ self_type temporary (*this + ae, capacity_);
+ return assign_temporary (temporary);
+ }
+ template<class C> // Container assignment without temporary
+ BOOST_UBLAS_INLINE
+ compressed_matrix &operator += (const matrix_container<C> &m) {
+ plus_assign (m);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ compressed_matrix &plus_assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_plus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ compressed_matrix& operator -= (const matrix_expression<AE> &ae) {
+ self_type temporary (*this - ae, capacity_);
+ return assign_temporary (temporary);
+ }
+ template<class C> // Container assignment without temporary
+ BOOST_UBLAS_INLINE
+ compressed_matrix &operator -= (const matrix_container<C> &m) {
+ minus_assign (m);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ compressed_matrix &minus_assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_minus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ compressed_matrix& operator *= (const AT &at) {
+ matrix_assign_scalar<scalar_multiplies_assign> (*this, at);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ compressed_matrix& operator /= (const AT &at) {
+ matrix_assign_scalar<scalar_divides_assign> (*this, at);
+ return *this;
+ }
+
+ // Swapping
+ BOOST_UBLAS_INLINE
+ void swap (compressed_matrix &m) {
+ if (this != &m) {
+ std::swap (size1_, m.size1_);
+ std::swap (size2_, m.size2_);
+ std::swap (capacity_, m.capacity_);
+ std::swap (filled1_, m.filled1_);
+ std::swap (filled2_, m.filled2_);
+ index1_data_.swap (m.index1_data_);
+ index2_data_.swap (m.index2_data_);
+ value_data_.swap (m.value_data_);
+ }
+ storage_invariants ();
+ }
+ BOOST_UBLAS_INLINE
+ friend void swap (compressed_matrix &m1, compressed_matrix &m2) {
+ m1.swap (m2);
+ }
+
+ // Back element insertion and erasure
+ BOOST_UBLAS_INLINE
+ void push_back (size_type i, size_type j, const_reference t) {
+ if (filled2_ >= capacity_)
+ reserve (2 * filled2_, true);
+ BOOST_UBLAS_CHECK (filled2_ < capacity_, internal_logic ());
+ size_type element1 = layout_type::element1 (i, size1_, j, size2_);
+ size_type element2 = layout_type::element2 (i, size1_, j, size2_);
+ while (filled1_ < element1 + 2) {
+ index1_data_ [filled1_] = k_based (filled2_);
+ ++ filled1_;
+ }
+ // must maintain sort order
+ BOOST_UBLAS_CHECK ((filled1_ == element1 + 2 &&
+ (filled2_ == zero_based (index1_data_ [filled1_ - 2]) ||
+ index2_data_ [filled2_ - 1] < k_based (element2))), external_logic ());
+ ++ filled2_;
+ index1_data_ [filled1_ - 1] = k_based (filled2_);
+ index2_data_ [filled2_ - 1] = k_based (element2);
+ value_data_ [filled2_ - 1] = t;
+ storage_invariants ();
+ }
+ BOOST_UBLAS_INLINE
+ void pop_back () {
+ BOOST_UBLAS_CHECK (filled1_ > 0 && filled2_ > 0, external_logic ());
+ -- filled2_;
+ while (index1_data_ [filled1_ - 2] > k_based (filled2_)) {
+ index1_data_ [filled1_ - 1] = 0;
+ -- filled1_;
+ }
+ -- index1_data_ [filled1_ - 1];
+ storage_invariants ();
+ }
+
+ // Iterator types
+ private:
+ // Use index array iterator
+ typedef typename IA::const_iterator vector_const_subiterator_type;
+ typedef typename IA::iterator vector_subiterator_type;
+ typedef typename IA::const_iterator const_subiterator_type;
+ typedef typename IA::iterator subiterator_type;
+
+ BOOST_UBLAS_INLINE
+ true_reference at_element (size_type i, size_type j) {
+ pointer p = find_element (i, j);
+ BOOST_UBLAS_CHECK (p, bad_index ());
+ return *p;
+ }
+
+ public:
+ class const_iterator1;
+ class iterator1;
+ class const_iterator2;
+ class iterator2;
+ typedef reverse_iterator_base1<const_iterator1> const_reverse_iterator1;
+ typedef reverse_iterator_base1<iterator1> reverse_iterator1;
+ typedef reverse_iterator_base2<const_iterator2> const_reverse_iterator2;
+ typedef reverse_iterator_base2<iterator2> reverse_iterator2;
+
+ // Element lookup
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ const_iterator1 find1 (int rank, size_type i, size_type j, int direction = 1) const {
+ for (;;) {
+ array_size_type address1 (layout_type::address1 (i, size1_, j, size2_));
+ array_size_type address2 (layout_type::address2 (i, size1_, j, size2_));
+ vector_const_subiterator_type itv (index1_data_.begin () + (std::min) (filled1_ - 1, address1));
+ if (filled1_ <= address1 + 1)
+ return const_iterator1 (*this, rank, i, j, itv, index2_data_.begin () + filled2_);
+
+ const_subiterator_type it_begin (index2_data_.begin () + zero_based (*itv));
+ const_subiterator_type it_end (index2_data_.begin () + zero_based (*(itv + 1)));
+
+ const_subiterator_type it (detail::lower_bound (it_begin, it_end, k_based (address2), std::less<size_type> ()));
+ if (rank == 0)
+ return const_iterator1 (*this, rank, i, j, itv, it);
+ if (it != it_end && zero_based (*it) == address2)
+ return const_iterator1 (*this, rank, i, j, itv, it);
+ if (direction > 0) {
+ if (layout_type::fast1 ()) {
+ if (it == it_end)
+ return const_iterator1 (*this, rank, i, j, itv, it);
+ i = zero_based (*it);
+ } else {
+ if (i >= size1_)
+ return const_iterator1 (*this, rank, i, j, itv, it);
+ ++ i;
+ }
+ } else /* if (direction < 0) */ {
+ if (layout_type::fast1 ()) {
+ if (it == index2_data_.begin () + zero_based (*itv))
+ return const_iterator1 (*this, rank, i, j, itv, it);
+ i = zero_based (*(it - 1));
+ } else {
+ if (i == 0)
+ return const_iterator1 (*this, rank, i, j, itv, it);
+ -- i;
+ }
+ }
+ }
+ }
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ iterator1 find1 (int rank, size_type i, size_type j, int direction = 1) {
+ for (;;) {
+ array_size_type address1 (layout_type::address1 (i, size1_, j, size2_));
+ array_size_type address2 (layout_type::address2 (i, size1_, j, size2_));
+ vector_subiterator_type itv (index1_data_.begin () + (std::min) (filled1_ - 1, address1));
+ if (filled1_ <= address1 + 1)
+ return iterator1 (*this, rank, i, j, itv, index2_data_.begin () + filled2_);
+
+ subiterator_type it_begin (index2_data_.begin () + zero_based (*itv));
+ subiterator_type it_end (index2_data_.begin () + zero_based (*(itv + 1)));
+
+ subiterator_type it (detail::lower_bound (it_begin, it_end, k_based (address2), std::less<size_type> ()));
+ if (rank == 0)
+ return iterator1 (*this, rank, i, j, itv, it);
+ if (it != it_end && zero_based (*it) == address2)
+ return iterator1 (*this, rank, i, j, itv, it);
+ if (direction > 0) {
+ if (layout_type::fast1 ()) {
+ if (it == it_end)
+ return iterator1 (*this, rank, i, j, itv, it);
+ i = zero_based (*it);
+ } else {
+ if (i >= size1_)
+ return iterator1 (*this, rank, i, j, itv, it);
+ ++ i;
+ }
+ } else /* if (direction < 0) */ {
+ if (layout_type::fast1 ()) {
+ if (it == index2_data_.begin () + zero_based (*itv))
+ return iterator1 (*this, rank, i, j, itv, it);
+ i = zero_based (*(it - 1));
+ } else {
+ if (i == 0)
+ return iterator1 (*this, rank, i, j, itv, it);
+ -- i;
+ }
+ }
+ }
+ }
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ const_iterator2 find2 (int rank, size_type i, size_type j, int direction = 1) const {
+ for (;;) {
+ array_size_type address1 (layout_type::address1 (i, size1_, j, size2_));
+ array_size_type address2 (layout_type::address2 (i, size1_, j, size2_));
+ vector_const_subiterator_type itv (index1_data_.begin () + (std::min) (filled1_ - 1, address1));
+ if (filled1_ <= address1 + 1)
+ return const_iterator2 (*this, rank, i, j, itv, index2_data_.begin () + filled2_);
+
+ const_subiterator_type it_begin (index2_data_.begin () + zero_based (*itv));
+ const_subiterator_type it_end (index2_data_.begin () + zero_based (*(itv + 1)));
+
+ const_subiterator_type it (detail::lower_bound (it_begin, it_end, k_based (address2), std::less<size_type> ()));
+ if (rank == 0)
+ return const_iterator2 (*this, rank, i, j, itv, it);
+ if (it != it_end && zero_based (*it) == address2)
+ return const_iterator2 (*this, rank, i, j, itv, it);
+ if (direction > 0) {
+ if (layout_type::fast2 ()) {
+ if (it == it_end)
+ return const_iterator2 (*this, rank, i, j, itv, it);
+ j = zero_based (*it);
+ } else {
+ if (j >= size2_)
+ return const_iterator2 (*this, rank, i, j, itv, it);
+ ++ j;
+ }
+ } else /* if (direction < 0) */ {
+ if (layout_type::fast2 ()) {
+ if (it == index2_data_.begin () + zero_based (*itv))
+ return const_iterator2 (*this, rank, i, j, itv, it);
+ j = zero_based (*(it - 1));
+ } else {
+ if (j == 0)
+ return const_iterator2 (*this, rank, i, j, itv, it);
+ -- j;
+ }
+ }
+ }
+ }
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ iterator2 find2 (int rank, size_type i, size_type j, int direction = 1) {
+ for (;;) {
+ array_size_type address1 (layout_type::address1 (i, size1_, j, size2_));
+ array_size_type address2 (layout_type::address2 (i, size1_, j, size2_));
+ vector_subiterator_type itv (index1_data_.begin () + (std::min) (filled1_ - 1, address1));
+ if (filled1_ <= address1 + 1)
+ return iterator2 (*this, rank, i, j, itv, index2_data_.begin () + filled2_);
+
+ subiterator_type it_begin (index2_data_.begin () + zero_based (*itv));
+ subiterator_type it_end (index2_data_.begin () + zero_based (*(itv + 1)));
+
+ subiterator_type it (detail::lower_bound (it_begin, it_end, k_based (address2), std::less<size_type> ()));
+ if (rank == 0)
+ return iterator2 (*this, rank, i, j, itv, it);
+ if (it != it_end && zero_based (*it) == address2)
+ return iterator2 (*this, rank, i, j, itv, it);
+ if (direction > 0) {
+ if (layout_type::fast2 ()) {
+ if (it == it_end)
+ return iterator2 (*this, rank, i, j, itv, it);
+ j = zero_based (*it);
+ } else {
+ if (j >= size2_)
+ return iterator2 (*this, rank, i, j, itv, it);
+ ++ j;
+ }
+ } else /* if (direction < 0) */ {
+ if (layout_type::fast2 ()) {
+ if (it == index2_data_.begin () + zero_based (*itv))
+ return iterator2 (*this, rank, i, j, itv, it);
+ j = zero_based (*(it - 1));
+ } else {
+ if (j == 0)
+ return iterator2 (*this, rank, i, j, itv, it);
+ -- j;
+ }
+ }
+ }
+ }
+
+
+ class const_iterator1:
+ public container_const_reference<compressed_matrix>,
+ public bidirectional_iterator_base<sparse_bidirectional_iterator_tag,
+ const_iterator1, value_type> {
+ public:
+ typedef typename compressed_matrix::value_type value_type;
+ typedef typename compressed_matrix::difference_type difference_type;
+ typedef typename compressed_matrix::const_reference reference;
+ typedef const typename compressed_matrix::pointer pointer;
+
+ typedef const_iterator2 dual_iterator_type;
+ typedef const_reverse_iterator2 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator1 ():
+ container_const_reference<self_type> (), rank_ (), i_ (), j_ (), itv_ (), it_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator1 (const self_type &m, int rank, size_type i, size_type j, const vector_const_subiterator_type &itv, const const_subiterator_type &it):
+ container_const_reference<self_type> (m), rank_ (rank), i_ (i), j_ (j), itv_ (itv), it_ (it) {}
+ BOOST_UBLAS_INLINE
+ const_iterator1 (const iterator1 &it):
+ container_const_reference<self_type> (it ()), rank_ (it.rank_), i_ (it.i_), j_ (it.j_), itv_ (it.itv_), it_ (it.it_) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator ++ () {
+ if (rank_ == 1 && layout_type::fast1 ())
+ ++ it_;
+ else {
+ i_ = index1 () + 1;
+ if (rank_ == 1)
+ *this = (*this) ().find1 (rank_, i_, j_, 1);
+ }
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator -- () {
+ if (rank_ == 1 && layout_type::fast1 ())
+ -- it_;
+ else {
+ i_ = index1 () - 1;
+ if (rank_ == 1)
+ *this = (*this) ().find1 (rank_, i_, j_, -1);
+ }
+ return *this;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ BOOST_UBLAS_CHECK (index1 () < (*this) ().size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (index2 () < (*this) ().size2 (), bad_index ());
+ if (rank_ == 1) {
+ return (*this) ().value_data_ [it_ - (*this) ().index2_data_.begin ()];
+ } else {
+ return (*this) () (i_, j_);
+ }
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 begin () const {
+ const self_type &m = (*this) ();
+ return m.find2 (1, index1 (), 0);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 end () const {
+ const self_type &m = (*this) ();
+ return m.find2 (1, index1 (), m.size2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rbegin () const {
+ return const_reverse_iterator2 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rend () const {
+ return const_reverse_iterator2 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ BOOST_UBLAS_CHECK (*this != (*this) ().find1 (0, (*this) ().size1 (), j_), bad_index ());
+ if (rank_ == 1) {
+ BOOST_UBLAS_CHECK (layout_type::index1 (itv_ - (*this) ().index1_data_.begin (), (*this) ().zero_based (*it_)) < (*this) ().size1 (), bad_index ());
+ return layout_type::index1 (itv_ - (*this) ().index1_data_.begin (), (*this) ().zero_based (*it_));
+ } else {
+ return i_;
+ }
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ if (rank_ == 1) {
+ BOOST_UBLAS_CHECK (layout_type::index2 (itv_ - (*this) ().index1_data_.begin (), (*this) ().zero_based (*it_)) < (*this) ().size2 (), bad_index ());
+ return layout_type::index2 (itv_ - (*this) ().index1_data_.begin (), (*this) ().zero_based (*it_));
+ } else {
+ return j_;
+ }
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator = (const const_iterator1 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ rank_ = it.rank_;
+ i_ = it.i_;
+ j_ = it.j_;
+ itv_ = it.itv_;
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ // BOOST_UBLAS_CHECK (rank_ == it.rank_, internal_logic ());
+ if (rank_ == 1 || it.rank_ == 1) {
+ return it_ == it.it_;
+ } else {
+ return i_ == it.i_ && j_ == it.j_;
+ }
+ }
+
+ private:
+ int rank_;
+ size_type i_;
+ size_type j_;
+ vector_const_subiterator_type itv_;
+ const_subiterator_type it_;
+ };
+
+ BOOST_UBLAS_INLINE
+ const_iterator1 begin1 () const {
+ return find1 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 end1 () const {
+ return find1 (0, size1_, 0);
+ }
+
+ class iterator1:
+ public container_reference<compressed_matrix>,
+ public bidirectional_iterator_base<sparse_bidirectional_iterator_tag,
+ iterator1, value_type> {
+ public:
+ typedef typename compressed_matrix::value_type value_type;
+ typedef typename compressed_matrix::difference_type difference_type;
+ typedef typename compressed_matrix::true_reference reference;
+ typedef typename compressed_matrix::pointer pointer;
+
+ typedef iterator2 dual_iterator_type;
+ typedef reverse_iterator2 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ iterator1 ():
+ container_reference<self_type> (), rank_ (), i_ (), j_ (), itv_ (), it_ () {}
+ BOOST_UBLAS_INLINE
+ iterator1 (self_type &m, int rank, size_type i, size_type j, const vector_subiterator_type &itv, const subiterator_type &it):
+ container_reference<self_type> (m), rank_ (rank), i_ (i), j_ (j), itv_ (itv), it_ (it) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ iterator1 &operator ++ () {
+ if (rank_ == 1 && layout_type::fast1 ())
+ ++ it_;
+ else {
+ i_ = index1 () + 1;
+ if (rank_ == 1)
+ *this = (*this) ().find1 (rank_, i_, j_, 1);
+ }
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 &operator -- () {
+ if (rank_ == 1 && layout_type::fast1 ())
+ -- it_;
+ else {
+ i_ = index1 () - 1;
+ if (rank_ == 1)
+ *this = (*this) ().find1 (rank_, i_, j_, -1);
+ }
+ return *this;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ BOOST_UBLAS_CHECK (index1 () < (*this) ().size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (index2 () < (*this) ().size2 (), bad_index ());
+ if (rank_ == 1) {
+ return (*this) ().value_data_ [it_ - (*this) ().index2_data_.begin ()];
+ } else {
+ return (*this) ().at_element (i_, j_);
+ }
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator2 begin () const {
+ self_type &m = (*this) ();
+ return m.find2 (1, index1 (), 0);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator2 end () const {
+ self_type &m = (*this) ();
+ return m.find2 (1, index1 (), m.size2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator2 rbegin () const {
+ return reverse_iterator2 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator2 rend () const {
+ return reverse_iterator2 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ BOOST_UBLAS_CHECK (*this != (*this) ().find1 (0, (*this) ().size1 (), j_), bad_index ());
+ if (rank_ == 1) {
+ BOOST_UBLAS_CHECK (layout_type::index1 (itv_ - (*this) ().index1_data_.begin (), (*this) ().zero_based (*it_)) < (*this) ().size1 (), bad_index ());
+ return layout_type::index1 (itv_ - (*this) ().index1_data_.begin (), (*this) ().zero_based (*it_));
+ } else {
+ return i_;
+ }
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ if (rank_ == 1) {
+ BOOST_UBLAS_CHECK (layout_type::index2 (itv_ - (*this) ().index1_data_.begin (), (*this) ().zero_based (*it_)) < (*this) ().size2 (), bad_index ());
+ return layout_type::index2 (itv_ - (*this) ().index1_data_.begin (), (*this) ().zero_based (*it_));
+ } else {
+ return j_;
+ }
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ iterator1 &operator = (const iterator1 &it) {
+ container_reference<self_type>::assign (&it ());
+ rank_ = it.rank_;
+ i_ = it.i_;
+ j_ = it.j_;
+ itv_ = it.itv_;
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ // BOOST_UBLAS_CHECK (rank_ == it.rank_, internal_logic ());
+ if (rank_ == 1 || it.rank_ == 1) {
+ return it_ == it.it_;
+ } else {
+ return i_ == it.i_ && j_ == it.j_;
+ }
+ }
+
+ private:
+ int rank_;
+ size_type i_;
+ size_type j_;
+ vector_subiterator_type itv_;
+ subiterator_type it_;
+
+ friend class const_iterator1;
+ };
+
+ BOOST_UBLAS_INLINE
+ iterator1 begin1 () {
+ return find1 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 end1 () {
+ return find1 (0, size1_, 0);
+ }
+
+ class const_iterator2:
+ public container_const_reference<compressed_matrix>,
+ public bidirectional_iterator_base<sparse_bidirectional_iterator_tag,
+ const_iterator2, value_type> {
+ public:
+ typedef typename compressed_matrix::value_type value_type;
+ typedef typename compressed_matrix::difference_type difference_type;
+ typedef typename compressed_matrix::const_reference reference;
+ typedef const typename compressed_matrix::pointer pointer;
+
+ typedef const_iterator1 dual_iterator_type;
+ typedef const_reverse_iterator1 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator2 ():
+ container_const_reference<self_type> (), rank_ (), i_ (), j_ (), itv_ (), it_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator2 (const self_type &m, int rank, size_type i, size_type j, const vector_const_subiterator_type itv, const const_subiterator_type &it):
+ container_const_reference<self_type> (m), rank_ (rank), i_ (i), j_ (j), itv_ (itv), it_ (it) {}
+ BOOST_UBLAS_INLINE
+ const_iterator2 (const iterator2 &it):
+ container_const_reference<self_type> (it ()), rank_ (it.rank_), i_ (it.i_), j_ (it.j_), itv_ (it.itv_), it_ (it.it_) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator ++ () {
+ if (rank_ == 1 && layout_type::fast2 ())
+ ++ it_;
+ else {
+ j_ = index2 () + 1;
+ if (rank_ == 1)
+ *this = (*this) ().find2 (rank_, i_, j_, 1);
+ }
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator -- () {
+ if (rank_ == 1 && layout_type::fast2 ())
+ -- it_;
+ else {
+ j_ = index2 () - 1;
+ if (rank_ == 1)
+ *this = (*this) ().find2 (rank_, i_, j_, -1);
+ }
+ return *this;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ BOOST_UBLAS_CHECK (index1 () < (*this) ().size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (index2 () < (*this) ().size2 (), bad_index ());
+ if (rank_ == 1) {
+ return (*this) ().value_data_ [it_ - (*this) ().index2_data_.begin ()];
+ } else {
+ return (*this) () (i_, j_);
+ }
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 begin () const {
+ const self_type &m = (*this) ();
+ return m.find1 (1, 0, index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 end () const {
+ const self_type &m = (*this) ();
+ return m.find1 (1, m.size1 (), index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rbegin () const {
+ return const_reverse_iterator1 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rend () const {
+ return const_reverse_iterator1 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ if (rank_ == 1) {
+ BOOST_UBLAS_CHECK (layout_type::index1 (itv_ - (*this) ().index1_data_.begin (), (*this) ().zero_based (*it_)) < (*this) ().size1 (), bad_index ());
+ return layout_type::index1 (itv_ - (*this) ().index1_data_.begin (), (*this) ().zero_based (*it_));
+ } else {
+ return i_;
+ }
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ BOOST_UBLAS_CHECK (*this != (*this) ().find2 (0, i_, (*this) ().size2 ()), bad_index ());
+ if (rank_ == 1) {
+ BOOST_UBLAS_CHECK (layout_type::index2 (itv_ - (*this) ().index1_data_.begin (), (*this) ().zero_based (*it_)) < (*this) ().size2 (), bad_index ());
+ return layout_type::index2 (itv_ - (*this) ().index1_data_.begin (), (*this) ().zero_based (*it_));
+ } else {
+ return j_;
+ }
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator = (const const_iterator2 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ rank_ = it.rank_;
+ i_ = it.i_;
+ j_ = it.j_;
+ itv_ = it.itv_;
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ // BOOST_UBLAS_CHECK (rank_ == it.rank_, internal_logic ());
+ if (rank_ == 1 || it.rank_ == 1) {
+ return it_ == it.it_;
+ } else {
+ return i_ == it.i_ && j_ == it.j_;
+ }
+ }
+
+ private:
+ int rank_;
+ size_type i_;
+ size_type j_;
+ vector_const_subiterator_type itv_;
+ const_subiterator_type it_;
+ };
+
+ BOOST_UBLAS_INLINE
+ const_iterator2 begin2 () const {
+ return find2 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 end2 () const {
+ return find2 (0, 0, size2_);
+ }
+
+ class iterator2:
+ public container_reference<compressed_matrix>,
+ public bidirectional_iterator_base<sparse_bidirectional_iterator_tag,
+ iterator2, value_type> {
+ public:
+ typedef typename compressed_matrix::value_type value_type;
+ typedef typename compressed_matrix::difference_type difference_type;
+ typedef typename compressed_matrix::true_reference reference;
+ typedef typename compressed_matrix::pointer pointer;
+
+ typedef iterator1 dual_iterator_type;
+ typedef reverse_iterator1 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ iterator2 ():
+ container_reference<self_type> (), rank_ (), i_ (), j_ (), itv_ (), it_ () {}
+ BOOST_UBLAS_INLINE
+ iterator2 (self_type &m, int rank, size_type i, size_type j, const vector_subiterator_type &itv, const subiterator_type &it):
+ container_reference<self_type> (m), rank_ (rank), i_ (i), j_ (j), itv_ (itv), it_ (it) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ iterator2 &operator ++ () {
+ if (rank_ == 1 && layout_type::fast2 ())
+ ++ it_;
+ else {
+ j_ = index2 () + 1;
+ if (rank_ == 1)
+ *this = (*this) ().find2 (rank_, i_, j_, 1);
+ }
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 &operator -- () {
+ if (rank_ == 1 && layout_type::fast2 ())
+ -- it_;
+ else {
+ j_ = index2 ();
+ if (rank_ == 1)
+ *this = (*this) ().find2 (rank_, i_, j_, -1);
+ }
+ return *this;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ BOOST_UBLAS_CHECK (index1 () < (*this) ().size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (index2 () < (*this) ().size2 (), bad_index ());
+ if (rank_ == 1) {
+ return (*this) ().value_data_ [it_ - (*this) ().index2_data_.begin ()];
+ } else {
+ return (*this) ().at_element (i_, j_);
+ }
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator1 begin () const {
+ self_type &m = (*this) ();
+ return m.find1 (1, 0, index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator1 end () const {
+ self_type &m = (*this) ();
+ return m.find1 (1, m.size1 (), index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator1 rbegin () const {
+ return reverse_iterator1 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator1 rend () const {
+ return reverse_iterator1 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ if (rank_ == 1) {
+ BOOST_UBLAS_CHECK (layout_type::index1 (itv_ - (*this) ().index1_data_.begin (), (*this) ().zero_based (*it_)) < (*this) ().size1 (), bad_index ());
+ return layout_type::index1 (itv_ - (*this) ().index1_data_.begin (), (*this) ().zero_based (*it_));
+ } else {
+ return i_;
+ }
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ BOOST_UBLAS_CHECK (*this != (*this) ().find2 (0, i_, (*this) ().size2 ()), bad_index ());
+ if (rank_ == 1) {
+ BOOST_UBLAS_CHECK (layout_type::index2 (itv_ - (*this) ().index1_data_.begin (), (*this) ().zero_based (*it_)) < (*this) ().size2 (), bad_index ());
+ return layout_type::index2 (itv_ - (*this) ().index1_data_.begin (), (*this) ().zero_based (*it_));
+ } else {
+ return j_;
+ }
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ iterator2 &operator = (const iterator2 &it) {
+ container_reference<self_type>::assign (&it ());
+ rank_ = it.rank_;
+ i_ = it.i_;
+ j_ = it.j_;
+ itv_ = it.itv_;
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ // BOOST_UBLAS_CHECK (rank_ == it.rank_, internal_logic ());
+ if (rank_ == 1 || it.rank_ == 1) {
+ return it_ == it.it_;
+ } else {
+ return i_ == it.i_ && j_ == it.j_;
+ }
+ }
+
+ private:
+ int rank_;
+ size_type i_;
+ size_type j_;
+ vector_subiterator_type itv_;
+ subiterator_type it_;
+
+ friend class const_iterator2;
+ };
+
+ BOOST_UBLAS_INLINE
+ iterator2 begin2 () {
+ return find2 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 end2 () {
+ return find2 (0, 0, size2_);
+ }
+
+ // Reverse iterators
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rbegin1 () const {
+ return const_reverse_iterator1 (end1 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rend1 () const {
+ return const_reverse_iterator1 (begin1 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ reverse_iterator1 rbegin1 () {
+ return reverse_iterator1 (end1 ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator1 rend1 () {
+ return reverse_iterator1 (begin1 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rbegin2 () const {
+ return const_reverse_iterator2 (end2 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rend2 () const {
+ return const_reverse_iterator2 (begin2 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ reverse_iterator2 rbegin2 () {
+ return reverse_iterator2 (end2 ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator2 rend2 () {
+ return reverse_iterator2 (begin2 ());
+ }
+
+ private:
+ void storage_invariants () const {
+ BOOST_UBLAS_CHECK (layout_type::size1 (size1_, size2_) + 1 == index1_data_.size (), internal_logic ());
+ BOOST_UBLAS_CHECK (capacity_ == index2_data_.size (), internal_logic ());
+ BOOST_UBLAS_CHECK (capacity_ == value_data_.size (), internal_logic ());
+ BOOST_UBLAS_CHECK (filled1_ > 0 && filled1_ <= layout_type::size1 (size1_, size2_) + 1, internal_logic ());
+ BOOST_UBLAS_CHECK (filled2_ <= capacity_, internal_logic ());
+ BOOST_UBLAS_CHECK (index1_data_ [filled1_ - 1] == k_based (filled2_), internal_logic ());
+ }
+
+ size_type size1_;
+ size_type size2_;
+ array_size_type capacity_;
+ array_size_type filled1_;
+ array_size_type filled2_;
+ index_array_type index1_data_;
+ index_array_type index2_data_;
+ value_array_type value_data_;
+ static const value_type zero_;
+
+ BOOST_UBLAS_INLINE
+ static size_type zero_based (size_type k_based_index) {
+ return k_based_index - IB;
+ }
+ BOOST_UBLAS_INLINE
+ static size_type k_based (size_type zero_based_index) {
+ return zero_based_index + IB;
+ }
+
+ friend class iterator1;
+ friend class iterator2;
+ friend class const_iterator1;
+ friend class const_iterator2;
+ };
+
+ template<class T, class L, std::size_t IB, class IA, class TA>
+ const typename compressed_matrix<T, L, IB, IA, TA>::value_type compressed_matrix<T, L, IB, IA, TA>::zero_ = value_type/*zero*/();
+
+
+ // Coordinate array based sparse matrix class
+ // Thanks to Kresimir Fresl for extending this to cover different index bases.
+ template<class T, class L, std::size_t IB, class IA, class TA>
+ class coordinate_matrix:
+ public matrix_container<coordinate_matrix<T, L, IB, IA, TA> > {
+
+ typedef T &true_reference;
+ typedef T *pointer;
+ typedef const T *const_pointer;
+ typedef L layout_type;
+ typedef coordinate_matrix<T, L, IB, IA, TA> self_type;
+ public:
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using matrix_container<self_type>::operator ();
+#endif
+ // ISSUE require type consistency check
+ // is_convertable (IA::size_type, TA::size_type)
+ typedef typename IA::value_type size_type;
+ // size_type for the data arrays.
+ typedef typename IA::size_type array_size_type;
+ // FIXME difference type for sprase storage iterators should it be in the container?
+ typedef typename IA::difference_type difference_type;
+ typedef T value_type;
+ typedef const T &const_reference;
+#ifndef BOOST_UBLAS_STRICT_MATRIX_SPARSE
+ typedef T &reference;
+#else
+ typedef sparse_matrix_element<self_type> reference;
+#endif
+ typedef IA index_array_type;
+ typedef TA value_array_type;
+ typedef const matrix_reference<const self_type> const_closure_type;
+ typedef matrix_reference<self_type> closure_type;
+ typedef coordinate_vector<T, IB, IA, TA> vector_temporary_type;
+ typedef self_type matrix_temporary_type;
+ typedef sparse_tag storage_category;
+ typedef typename L::orientation_category orientation_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ coordinate_matrix ():
+ matrix_container<self_type> (),
+ size1_ (0), size2_ (0), capacity_ (restrict_capacity (0)),
+ filled_ (0), sorted_filled_ (filled_), sorted_ (true),
+ index1_data_ (capacity_), index2_data_ (capacity_), value_data_ (capacity_) {
+ storage_invariants ();
+ }
+ BOOST_UBLAS_INLINE
+ coordinate_matrix (size_type size1, size_type size2, size_type non_zeros = 0):
+ matrix_container<self_type> (),
+ size1_ (size1), size2_ (size2), capacity_ (restrict_capacity (non_zeros)),
+ filled_ (0), sorted_filled_ (filled_), sorted_ (true),
+ index1_data_ (capacity_), index2_data_ (capacity_), value_data_ (capacity_) {
+ storage_invariants ();
+ }
+ BOOST_UBLAS_INLINE
+ coordinate_matrix (const coordinate_matrix &m):
+ matrix_container<self_type> (),
+ size1_ (m.size1_), size2_ (m.size2_), capacity_ (m.capacity_),
+ filled_ (m.filled_), sorted_filled_ (m.sorted_filled_), sorted_ (m.sorted_),
+ index1_data_ (m.index1_data_), index2_data_ (m.index2_data_), value_data_ (m.value_data_) {
+ storage_invariants ();
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ coordinate_matrix (const matrix_expression<AE> &ae, size_type non_zeros = 0):
+ matrix_container<self_type> (),
+ size1_ (ae ().size1 ()), size2_ (ae ().size2 ()), capacity_ (restrict_capacity (non_zeros)),
+ filled_ (0), sorted_filled_ (filled_), sorted_ (true),
+ index1_data_ (capacity_), index2_data_ (capacity_), value_data_ (capacity_) {
+ storage_invariants ();
+ matrix_assign<scalar_assign> (*this, ae);
+ }
+
+ // Accessors
+ BOOST_UBLAS_INLINE
+ size_type size1 () const {
+ return size1_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type size2 () const {
+ return size2_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type nnz_capacity () const {
+ return capacity_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type nnz () const {
+ return filled_;
+ }
+
+ // Storage accessors
+ BOOST_UBLAS_INLINE
+ static size_type index_base () {
+ return IB;
+ }
+ BOOST_UBLAS_INLINE
+ array_size_type filled () const {
+ return filled_;
+ }
+ BOOST_UBLAS_INLINE
+ const index_array_type &index1_data () const {
+ return index1_data_;
+ }
+ BOOST_UBLAS_INLINE
+ const index_array_type &index2_data () const {
+ return index2_data_;
+ }
+ BOOST_UBLAS_INLINE
+ const value_array_type &value_data () const {
+ return value_data_;
+ }
+ BOOST_UBLAS_INLINE
+ void set_filled (const array_size_type &filled) {
+ // Make sure that storage_invariants() succeeds
+ if (sorted_ && filled < filled_)
+ sorted_filled_ = filled;
+ else
+ sorted_ = (sorted_filled_ == filled);
+ filled_ = filled;
+ storage_invariants ();
+ }
+ BOOST_UBLAS_INLINE
+ index_array_type &index1_data () {
+ return index1_data_;
+ }
+ BOOST_UBLAS_INLINE
+ index_array_type &index2_data () {
+ return index2_data_;
+ }
+ BOOST_UBLAS_INLINE
+ value_array_type &value_data () {
+ return value_data_;
+ }
+
+ // Resizing
+ private:
+ BOOST_UBLAS_INLINE
+ size_type restrict_capacity (size_type non_zeros) const {
+ // minimum non_zeros
+ non_zeros = (std::max) (non_zeros, (std::min) (size1_, size2_));
+ // ISSUE no maximum as coordinate may contain inserted duplicates
+ return non_zeros;
+ }
+ public:
+ BOOST_UBLAS_INLINE
+ void resize (size_type size1, size_type size2, bool preserve = true) {
+ // FIXME preserve unimplemented
+ BOOST_UBLAS_CHECK (!preserve, internal_logic ());
+ size1_ = size1;
+ size2_ = size2;
+ capacity_ = restrict_capacity (capacity_);
+ index1_data_.resize (capacity_);
+ index2_data_.resize (capacity_);
+ value_data_.resize (capacity_);
+ filled_ = 0;
+ sorted_filled_ = filled_;
+ sorted_ = true;
+ storage_invariants ();
+ }
+
+ // Reserving
+ BOOST_UBLAS_INLINE
+ void reserve (size_type non_zeros, bool preserve = true) {
+ sort (); // remove duplicate elements
+ capacity_ = restrict_capacity (non_zeros);
+ if (preserve) {
+ index1_data_.resize (capacity_, size_type ());
+ index2_data_.resize (capacity_, size_type ());
+ value_data_.resize (capacity_, value_type ());
+ filled_ = (std::min) (capacity_, filled_);
+ }
+ else {
+ index1_data_.resize (capacity_);
+ index2_data_.resize (capacity_);
+ value_data_.resize (capacity_);
+ filled_ = 0;
+ }
+ sorted_filled_ = filled_;
+ storage_invariants ();
+ }
+
+ // Element support
+ BOOST_UBLAS_INLINE
+ pointer find_element (size_type i, size_type j) {
+ return const_cast<pointer> (const_cast<const self_type&>(*this).find_element (i, j));
+ }
+ BOOST_UBLAS_INLINE
+ const_pointer find_element (size_type i, size_type j) const {
+ sort ();
+ size_type element1 (layout_type::element1 (i, size1_, j, size2_));
+ size_type element2 (layout_type::element2 (i, size1_, j, size2_));
+ vector_const_subiterator_type itv_begin (detail::lower_bound (index1_data_.begin (), index1_data_.begin () + filled_, k_based (element1), std::less<size_type> ()));
+ vector_const_subiterator_type itv_end (detail::upper_bound (index1_data_.begin (), index1_data_.begin () + filled_, k_based (element1), std::less<size_type> ()));
+ if (itv_begin == itv_end)
+ return 0;
+ const_subiterator_type it_begin (index2_data_.begin () + (itv_begin - index1_data_.begin ()));
+ const_subiterator_type it_end (index2_data_.begin () + (itv_end - index1_data_.begin ()));
+ const_subiterator_type it (detail::lower_bound (it_begin, it_end, k_based (element2), std::less<size_type> ()));
+ if (it == it_end || *it != k_based (element2))
+ return 0;
+ return &value_data_ [it - index2_data_.begin ()];
+ }
+
+ // Element access
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type i, size_type j) const {
+ const_pointer p = find_element (i, j);
+ if (p)
+ return *p;
+ else
+ return zero_;
+ }
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type i, size_type j) {
+#ifndef BOOST_UBLAS_STRICT_MATRIX_SPARSE
+ pointer p = find_element (i, j);
+ if (p)
+ return *p;
+ else
+ return insert_element (i, j, value_type/*zero*/());
+#else
+ return reference (*this, i, j);
+#endif
+ }
+
+ // Element assignment
+ BOOST_UBLAS_INLINE
+ void append_element (size_type i, size_type j, const_reference t) {
+ if (filled_ >= capacity_)
+ reserve (2 * filled_, true);
+ BOOST_UBLAS_CHECK (filled_ < capacity_, internal_logic ());
+ size_type element1 = layout_type::element1 (i, size1_, j, size2_);
+ size_type element2 = layout_type::element2 (i, size1_, j, size2_);
+ index1_data_ [filled_] = k_based (element1);
+ index2_data_ [filled_] = k_based (element2);
+ value_data_ [filled_] = t;
+ ++ filled_;
+ sorted_ = false;
+ storage_invariants ();
+ }
+ BOOST_UBLAS_INLINE
+ true_reference insert_element (size_type i, size_type j, const_reference t) {
+ BOOST_UBLAS_CHECK (!find_element (i, j), bad_index ()); // duplicate element
+ append_element (i, j, t);
+ return value_data_ [filled_ - 1];
+ }
+ BOOST_UBLAS_INLINE
+ void erase_element (size_type i, size_type j) {
+ size_type element1 = layout_type::element1 (i, size1_, j, size2_);
+ size_type element2 = layout_type::element2 (i, size1_, j, size2_);
+ sort ();
+ vector_subiterator_type itv_begin (detail::lower_bound (index1_data_.begin (), index1_data_.begin () + filled_, k_based (element1), std::less<size_type> ()));
+ vector_subiterator_type itv_end (detail::upper_bound (index1_data_.begin (), index1_data_.begin () + filled_, k_based (element1), std::less<size_type> ()));
+ subiterator_type it_begin (index2_data_.begin () + (itv_begin - index1_data_.begin ()));
+ subiterator_type it_end (index2_data_.begin () + (itv_end - index1_data_.begin ()));
+ subiterator_type it (detail::lower_bound (it_begin, it_end, k_based (element2), std::less<size_type> ()));
+ if (it != it_end && *it == k_based (element2)) {
+ typename std::iterator_traits<subiterator_type>::difference_type n = it - index2_data_.begin ();
+ vector_subiterator_type itv (index1_data_.begin () + n);
+ std::copy (itv + 1, index1_data_.begin () + filled_, itv);
+ std::copy (it + 1, index2_data_.begin () + filled_, it);
+ typename value_array_type::iterator itt (value_data_.begin () + n);
+ std::copy (itt + 1, value_data_.begin () + filled_, itt);
+ -- filled_;
+ sorted_filled_ = filled_;
+ }
+ storage_invariants ();
+ }
+
+ // Zeroing
+ BOOST_UBLAS_INLINE
+ void clear () {
+ filled_ = 0;
+ sorted_filled_ = filled_;
+ sorted_ = true;
+ storage_invariants ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ coordinate_matrix &operator = (const coordinate_matrix &m) {
+ if (this != &m) {
+ size1_ = m.size1_;
+ size2_ = m.size2_;
+ capacity_ = m.capacity_;
+ filled_ = m.filled_;
+ sorted_filled_ = m.sorted_filled_;
+ sorted_ = m.sorted_;
+ index1_data_ = m.index1_data_;
+ index2_data_ = m.index2_data_;
+ value_data_ = m.value_data_;
+ BOOST_UBLAS_CHECK (capacity_ == index1_data_.size (), internal_logic ());
+ BOOST_UBLAS_CHECK (capacity_ == index2_data_.size (), internal_logic ());
+ BOOST_UBLAS_CHECK (capacity_ == value_data_.size (), internal_logic ());
+ }
+ storage_invariants ();
+ return *this;
+ }
+ template<class C> // Container assignment without temporary
+ BOOST_UBLAS_INLINE
+ coordinate_matrix &operator = (const matrix_container<C> &m) {
+ resize (m ().size1 (), m ().size2 (), false);
+ assign (m);
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ coordinate_matrix &assign_temporary (coordinate_matrix &m) {
+ swap (m);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ coordinate_matrix &operator = (const matrix_expression<AE> &ae) {
+ self_type temporary (ae, capacity_);
+ return assign_temporary (temporary);
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ coordinate_matrix &assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_assign> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ coordinate_matrix& operator += (const matrix_expression<AE> &ae) {
+ self_type temporary (*this + ae, capacity_);
+ return assign_temporary (temporary);
+ }
+ template<class C> // Container assignment without temporary
+ BOOST_UBLAS_INLINE
+ coordinate_matrix &operator += (const matrix_container<C> &m) {
+ plus_assign (m);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ coordinate_matrix &plus_assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_plus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ coordinate_matrix& operator -= (const matrix_expression<AE> &ae) {
+ self_type temporary (*this - ae, capacity_);
+ return assign_temporary (temporary);
+ }
+ template<class C> // Container assignment without temporary
+ BOOST_UBLAS_INLINE
+ coordinate_matrix &operator -= (const matrix_container<C> &m) {
+ minus_assign (m);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ coordinate_matrix &minus_assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_minus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ coordinate_matrix& operator *= (const AT &at) {
+ matrix_assign_scalar<scalar_multiplies_assign> (*this, at);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ coordinate_matrix& operator /= (const AT &at) {
+ matrix_assign_scalar<scalar_divides_assign> (*this, at);
+ return *this;
+ }
+
+ // Swapping
+ BOOST_UBLAS_INLINE
+ void swap (coordinate_matrix &m) {
+ if (this != &m) {
+ std::swap (size1_, m.size1_);
+ std::swap (size2_, m.size2_);
+ std::swap (capacity_, m.capacity_);
+ std::swap (filled_, m.filled_);
+ std::swap (sorted_filled_, m.sorted_filled_);
+ std::swap (sorted_, m.sorted_);
+ index1_data_.swap (m.index1_data_);
+ index2_data_.swap (m.index2_data_);
+ value_data_.swap (m.value_data_);
+ }
+ storage_invariants ();
+ }
+ BOOST_UBLAS_INLINE
+ friend void swap (coordinate_matrix &m1, coordinate_matrix &m2) {
+ m1.swap (m2);
+ }
+
+ // Sorting and summation of duplicates
+ BOOST_UBLAS_INLINE
+ void sort () const {
+ if (! sorted_ && filled_ > 0) {
+ typedef index_triple_array<index_array_type, index_array_type, value_array_type> array_triple;
+ array_triple ita (filled_, index1_data_, index2_data_, value_data_);
+ const typename array_triple::iterator iunsorted = ita.begin () + sorted_filled_;
+ // sort new elements and merge
+ std::sort (iunsorted, ita.end ());
+ std::inplace_merge (ita.begin (), iunsorted, ita.end ());
+
+ // sum duplicates with += and remove
+ array_size_type filled = 0;
+ for (array_size_type i = 1; i < filled_; ++ i) {
+ if (index1_data_ [filled] != index1_data_ [i] ||
+ index2_data_ [filled] != index2_data_ [i]) {
+ ++ filled;
+ if (filled != i) {
+ index1_data_ [filled] = index1_data_ [i];
+ index2_data_ [filled] = index2_data_ [i];
+ value_data_ [filled] = value_data_ [i];
+ }
+ } else {
+ value_data_ [filled] += value_data_ [i];
+ }
+ }
+ filled_ = filled + 1;
+ sorted_filled_ = filled_;
+ sorted_ = true;
+ storage_invariants ();
+ }
+ }
+
+ // Back element insertion and erasure
+ BOOST_UBLAS_INLINE
+ void push_back (size_type i, size_type j, const_reference t) {
+ size_type element1 = layout_type::element1 (i, size1_, j, size2_);
+ size_type element2 = layout_type::element2 (i, size1_, j, size2_);
+ // must maintain sort order
+ BOOST_UBLAS_CHECK (sorted_ &&
+ (filled_ == 0 ||
+ index1_data_ [filled_ - 1] < k_based (element1) ||
+ (index1_data_ [filled_ - 1] == k_based (element1) && index2_data_ [filled_ - 1] < k_based (element2)))
+ , external_logic ());
+ if (filled_ >= capacity_)
+ reserve (2 * filled_, true);
+ BOOST_UBLAS_CHECK (filled_ < capacity_, internal_logic ());
+ index1_data_ [filled_] = k_based (element1);
+ index2_data_ [filled_] = k_based (element2);
+ value_data_ [filled_] = t;
+ ++ filled_;
+ sorted_filled_ = filled_;
+ storage_invariants ();
+ }
+ BOOST_UBLAS_INLINE
+ void pop_back () {
+ // ISSUE invariants could be simpilfied if sorted required as precondition
+ BOOST_UBLAS_CHECK (filled_ > 0, external_logic ());
+ -- filled_;
+ sorted_filled_ = (std::min) (sorted_filled_, filled_);
+ sorted_ = sorted_filled_ = filled_;
+ storage_invariants ();
+ }
+
+ // Iterator types
+ private:
+ // Use index array iterator
+ typedef typename IA::const_iterator vector_const_subiterator_type;
+ typedef typename IA::iterator vector_subiterator_type;
+ typedef typename IA::const_iterator const_subiterator_type;
+ typedef typename IA::iterator subiterator_type;
+
+ BOOST_UBLAS_INLINE
+ true_reference at_element (size_type i, size_type j) {
+ pointer p = find_element (i, j);
+ BOOST_UBLAS_CHECK (p, bad_index ());
+ return *p;
+ }
+
+ public:
+ class const_iterator1;
+ class iterator1;
+ class const_iterator2;
+ class iterator2;
+ typedef reverse_iterator_base1<const_iterator1> const_reverse_iterator1;
+ typedef reverse_iterator_base1<iterator1> reverse_iterator1;
+ typedef reverse_iterator_base2<const_iterator2> const_reverse_iterator2;
+ typedef reverse_iterator_base2<iterator2> reverse_iterator2;
+
+ // Element lookup
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ const_iterator1 find1 (int rank, size_type i, size_type j, int direction = 1) const {
+ sort ();
+ for (;;) {
+ size_type address1 (layout_type::address1 (i, size1_, j, size2_));
+ size_type address2 (layout_type::address2 (i, size1_, j, size2_));
+ vector_const_subiterator_type itv_begin (detail::lower_bound (index1_data_.begin (), index1_data_.begin () + filled_, k_based (address1), std::less<size_type> ()));
+ vector_const_subiterator_type itv_end (detail::upper_bound (index1_data_.begin (), index1_data_.begin () + filled_, k_based (address1), std::less<size_type> ()));
+
+ const_subiterator_type it_begin (index2_data_.begin () + (itv_begin - index1_data_.begin ()));
+ const_subiterator_type it_end (index2_data_.begin () + (itv_end - index1_data_.begin ()));
+
+ const_subiterator_type it (detail::lower_bound (it_begin, it_end, k_based (address2), std::less<size_type> ()));
+ vector_const_subiterator_type itv (index1_data_.begin () + (it - index2_data_.begin ()));
+ if (rank == 0)
+ return const_iterator1 (*this, rank, i, j, itv, it);
+ if (it != it_end && zero_based (*it) == address2)
+ return const_iterator1 (*this, rank, i, j, itv, it);
+ if (direction > 0) {
+ if (layout_type::fast1 ()) {
+ if (it == it_end)
+ return const_iterator1 (*this, rank, i, j, itv, it);
+ i = zero_based (*it);
+ } else {
+ if (i >= size1_)
+ return const_iterator1 (*this, rank, i, j, itv, it);
+ ++ i;
+ }
+ } else /* if (direction < 0) */ {
+ if (layout_type::fast1 ()) {
+ if (it == index2_data_.begin () + zero_based (*itv))
+ return const_iterator1 (*this, rank, i, j, itv, it);
+ i = zero_based (*(it - 1));
+ } else {
+ if (i == 0)
+ return const_iterator1 (*this, rank, i, j, itv, it);
+ -- i;
+ }
+ }
+ }
+ }
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ iterator1 find1 (int rank, size_type i, size_type j, int direction = 1) {
+ sort ();
+ for (;;) {
+ size_type address1 (layout_type::address1 (i, size1_, j, size2_));
+ size_type address2 (layout_type::address2 (i, size1_, j, size2_));
+ vector_subiterator_type itv_begin (detail::lower_bound (index1_data_.begin (), index1_data_.begin () + filled_, k_based (address1), std::less<size_type> ()));
+ vector_subiterator_type itv_end (detail::upper_bound (index1_data_.begin (), index1_data_.begin () + filled_, k_based (address1), std::less<size_type> ()));
+
+ subiterator_type it_begin (index2_data_.begin () + (itv_begin - index1_data_.begin ()));
+ subiterator_type it_end (index2_data_.begin () + (itv_end - index1_data_.begin ()));
+
+ subiterator_type it (detail::lower_bound (it_begin, it_end, k_based (address2), std::less<size_type> ()));
+ vector_subiterator_type itv (index1_data_.begin () + (it - index2_data_.begin ()));
+ if (rank == 0)
+ return iterator1 (*this, rank, i, j, itv, it);
+ if (it != it_end && zero_based (*it) == address2)
+ return iterator1 (*this, rank, i, j, itv, it);
+ if (direction > 0) {
+ if (layout_type::fast1 ()) {
+ if (it == it_end)
+ return iterator1 (*this, rank, i, j, itv, it);
+ i = zero_based (*it);
+ } else {
+ if (i >= size1_)
+ return iterator1 (*this, rank, i, j, itv, it);
+ ++ i;
+ }
+ } else /* if (direction < 0) */ {
+ if (layout_type::fast1 ()) {
+ if (it == index2_data_.begin () + zero_based (*itv))
+ return iterator1 (*this, rank, i, j, itv, it);
+ i = zero_based (*(it - 1));
+ } else {
+ if (i == 0)
+ return iterator1 (*this, rank, i, j, itv, it);
+ -- i;
+ }
+ }
+ }
+ }
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ const_iterator2 find2 (int rank, size_type i, size_type j, int direction = 1) const {
+ sort ();
+ for (;;) {
+ size_type address1 (layout_type::address1 (i, size1_, j, size2_));
+ size_type address2 (layout_type::address2 (i, size1_, j, size2_));
+ vector_const_subiterator_type itv_begin (detail::lower_bound (index1_data_.begin (), index1_data_.begin () + filled_, k_based (address1), std::less<size_type> ()));
+ vector_const_subiterator_type itv_end (detail::upper_bound (index1_data_.begin (), index1_data_.begin () + filled_, k_based (address1), std::less<size_type> ()));
+
+ const_subiterator_type it_begin (index2_data_.begin () + (itv_begin - index1_data_.begin ()));
+ const_subiterator_type it_end (index2_data_.begin () + (itv_end - index1_data_.begin ()));
+
+ const_subiterator_type it (detail::lower_bound (it_begin, it_end, k_based (address2), std::less<size_type> ()));
+ vector_const_subiterator_type itv (index1_data_.begin () + (it - index2_data_.begin ()));
+ if (rank == 0)
+ return const_iterator2 (*this, rank, i, j, itv, it);
+ if (it != it_end && zero_based (*it) == address2)
+ return const_iterator2 (*this, rank, i, j, itv, it);
+ if (direction > 0) {
+ if (layout_type::fast2 ()) {
+ if (it == it_end)
+ return const_iterator2 (*this, rank, i, j, itv, it);
+ j = zero_based (*it);
+ } else {
+ if (j >= size2_)
+ return const_iterator2 (*this, rank, i, j, itv, it);
+ ++ j;
+ }
+ } else /* if (direction < 0) */ {
+ if (layout_type::fast2 ()) {
+ if (it == index2_data_.begin () + zero_based (*itv))
+ return const_iterator2 (*this, rank, i, j, itv, it);
+ j = zero_based (*(it - 1));
+ } else {
+ if (j == 0)
+ return const_iterator2 (*this, rank, i, j, itv, it);
+ -- j;
+ }
+ }
+ }
+ }
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ iterator2 find2 (int rank, size_type i, size_type j, int direction = 1) {
+ sort ();
+ for (;;) {
+ size_type address1 (layout_type::address1 (i, size1_, j, size2_));
+ size_type address2 (layout_type::address2 (i, size1_, j, size2_));
+ vector_subiterator_type itv_begin (detail::lower_bound (index1_data_.begin (), index1_data_.begin () + filled_, k_based (address1), std::less<size_type> ()));
+ vector_subiterator_type itv_end (detail::upper_bound (index1_data_.begin (), index1_data_.begin () + filled_, k_based (address1), std::less<size_type> ()));
+
+ subiterator_type it_begin (index2_data_.begin () + (itv_begin - index1_data_.begin ()));
+ subiterator_type it_end (index2_data_.begin () + (itv_end - index1_data_.begin ()));
+
+ subiterator_type it (detail::lower_bound (it_begin, it_end, k_based (address2), std::less<size_type> ()));
+ vector_subiterator_type itv (index1_data_.begin () + (it - index2_data_.begin ()));
+ if (rank == 0)
+ return iterator2 (*this, rank, i, j, itv, it);
+ if (it != it_end && zero_based (*it) == address2)
+ return iterator2 (*this, rank, i, j, itv, it);
+ if (direction > 0) {
+ if (layout_type::fast2 ()) {
+ if (it == it_end)
+ return iterator2 (*this, rank, i, j, itv, it);
+ j = zero_based (*it);
+ } else {
+ if (j >= size2_)
+ return iterator2 (*this, rank, i, j, itv, it);
+ ++ j;
+ }
+ } else /* if (direction < 0) */ {
+ if (layout_type::fast2 ()) {
+ if (it == index2_data_.begin () + zero_based (*itv))
+ return iterator2 (*this, rank, i, j, itv, it);
+ j = zero_based (*(it - 1));
+ } else {
+ if (j == 0)
+ return iterator2 (*this, rank, i, j, itv, it);
+ -- j;
+ }
+ }
+ }
+ }
+
+
+ class const_iterator1:
+ public container_const_reference<coordinate_matrix>,
+ public bidirectional_iterator_base<sparse_bidirectional_iterator_tag,
+ const_iterator1, value_type> {
+ public:
+ typedef typename coordinate_matrix::value_type value_type;
+ typedef typename coordinate_matrix::difference_type difference_type;
+ typedef typename coordinate_matrix::const_reference reference;
+ typedef const typename coordinate_matrix::pointer pointer;
+
+ typedef const_iterator2 dual_iterator_type;
+ typedef const_reverse_iterator2 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator1 ():
+ container_const_reference<self_type> (), rank_ (), i_ (), j_ (), itv_ (), it_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator1 (const self_type &m, int rank, size_type i, size_type j, const vector_const_subiterator_type &itv, const const_subiterator_type &it):
+ container_const_reference<self_type> (m), rank_ (rank), i_ (i), j_ (j), itv_ (itv), it_ (it) {}
+ BOOST_UBLAS_INLINE
+ const_iterator1 (const iterator1 &it):
+ container_const_reference<self_type> (it ()), rank_ (it.rank_), i_ (it.i_), j_ (it.j_), itv_ (it.itv_), it_ (it.it_) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator ++ () {
+ if (rank_ == 1 && layout_type::fast1 ())
+ ++ it_;
+ else {
+ i_ = index1 () + 1;
+ if (rank_ == 1)
+ *this = (*this) ().find1 (rank_, i_, j_, 1);
+ }
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator -- () {
+ if (rank_ == 1 && layout_type::fast1 ())
+ -- it_;
+ else {
+ i_ = index1 () - 1;
+ if (rank_ == 1)
+ *this = (*this) ().find1 (rank_, i_, j_, -1);
+ }
+ return *this;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ BOOST_UBLAS_CHECK (index1 () < (*this) ().size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (index2 () < (*this) ().size2 (), bad_index ());
+ if (rank_ == 1) {
+ return (*this) ().value_data_ [it_ - (*this) ().index2_data_.begin ()];
+ } else {
+ return (*this) () (i_, j_);
+ }
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 begin () const {
+ const self_type &m = (*this) ();
+ return m.find2 (1, index1 (), 0);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 end () const {
+ const self_type &m = (*this) ();
+ return m.find2 (1, index1 (), m.size2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rbegin () const {
+ return const_reverse_iterator2 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rend () const {
+ return const_reverse_iterator2 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ BOOST_UBLAS_CHECK (*this != (*this) ().find1 (0, (*this) ().size1 (), j_), bad_index ());
+ if (rank_ == 1) {
+ BOOST_UBLAS_CHECK (layout_type::index1 ((*this) ().zero_based (*itv_), (*this) ().zero_based (*it_)) < (*this) ().size1 (), bad_index ());
+ return layout_type::index1 ((*this) ().zero_based (*itv_), (*this) ().zero_based (*it_));
+ } else {
+ return i_;
+ }
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ if (rank_ == 1) {
+ BOOST_UBLAS_CHECK (layout_type::index2 ((*this) ().zero_based (*itv_), (*this) ().zero_based (*it_)) < (*this) ().size2 (), bad_index ());
+ return layout_type::index2 ((*this) ().zero_based (*itv_), (*this) ().zero_based (*it_));
+ } else {
+ return j_;
+ }
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator = (const const_iterator1 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ rank_ = it.rank_;
+ i_ = it.i_;
+ j_ = it.j_;
+ itv_ = it.itv_;
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ // BOOST_UBLAS_CHECK (rank_ == it.rank_, internal_logic ());
+ if (rank_ == 1 || it.rank_ == 1) {
+ return it_ == it.it_;
+ } else {
+ return i_ == it.i_ && j_ == it.j_;
+ }
+ }
+
+ private:
+ int rank_;
+ size_type i_;
+ size_type j_;
+ vector_const_subiterator_type itv_;
+ const_subiterator_type it_;
+ };
+
+ BOOST_UBLAS_INLINE
+ const_iterator1 begin1 () const {
+ return find1 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 end1 () const {
+ return find1 (0, size1_, 0);
+ }
+
+ class iterator1:
+ public container_reference<coordinate_matrix>,
+ public bidirectional_iterator_base<sparse_bidirectional_iterator_tag,
+ iterator1, value_type> {
+ public:
+ typedef typename coordinate_matrix::value_type value_type;
+ typedef typename coordinate_matrix::difference_type difference_type;
+ typedef typename coordinate_matrix::true_reference reference;
+ typedef typename coordinate_matrix::pointer pointer;
+
+ typedef iterator2 dual_iterator_type;
+ typedef reverse_iterator2 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ iterator1 ():
+ container_reference<self_type> (), rank_ (), i_ (), j_ (), itv_ (), it_ () {}
+ BOOST_UBLAS_INLINE
+ iterator1 (self_type &m, int rank, size_type i, size_type j, const vector_subiterator_type &itv, const subiterator_type &it):
+ container_reference<self_type> (m), rank_ (rank), i_ (i), j_ (j), itv_ (itv), it_ (it) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ iterator1 &operator ++ () {
+ if (rank_ == 1 && layout_type::fast1 ())
+ ++ it_;
+ else {
+ i_ = index1 () + 1;
+ if (rank_ == 1)
+ *this = (*this) ().find1 (rank_, i_, j_, 1);
+ }
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 &operator -- () {
+ if (rank_ == 1 && layout_type::fast1 ())
+ -- it_;
+ else {
+ i_ = index1 () - 1;
+ if (rank_ == 1)
+ *this = (*this) ().find1 (rank_, i_, j_, -1);
+ }
+ return *this;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ BOOST_UBLAS_CHECK (index1 () < (*this) ().size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (index2 () < (*this) ().size2 (), bad_index ());
+ if (rank_ == 1) {
+ return (*this) ().value_data_ [it_ - (*this) ().index2_data_.begin ()];
+ } else {
+ return (*this) ().at_element (i_, j_);
+ }
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator2 begin () const {
+ self_type &m = (*this) ();
+ return m.find2 (1, index1 (), 0);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator2 end () const {
+ self_type &m = (*this) ();
+ return m.find2 (1, index1 (), m.size2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator2 rbegin () const {
+ return reverse_iterator2 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator2 rend () const {
+ return reverse_iterator2 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ BOOST_UBLAS_CHECK (*this != (*this) ().find1 (0, (*this) ().size1 (), j_), bad_index ());
+ if (rank_ == 1) {
+ BOOST_UBLAS_CHECK (layout_type::index1 ((*this) ().zero_based (*itv_), (*this) ().zero_based (*it_)) < (*this) ().size1 (), bad_index ());
+ return layout_type::index1 ((*this) ().zero_based (*itv_), (*this) ().zero_based (*it_));
+ } else {
+ return i_;
+ }
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ if (rank_ == 1) {
+ BOOST_UBLAS_CHECK (layout_type::index2 ((*this) ().zero_based (*itv_), (*this) ().zero_based (*it_)) < (*this) ().size2 (), bad_index ());
+ return layout_type::index2 ((*this) ().zero_based (*itv_), (*this) ().zero_based (*it_));
+ } else {
+ return j_;
+ }
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ iterator1 &operator = (const iterator1 &it) {
+ container_reference<self_type>::assign (&it ());
+ rank_ = it.rank_;
+ i_ = it.i_;
+ j_ = it.j_;
+ itv_ = it.itv_;
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ // BOOST_UBLAS_CHECK (rank_ == it.rank_, internal_logic ());
+ if (rank_ == 1 || it.rank_ == 1) {
+ return it_ == it.it_;
+ } else {
+ return i_ == it.i_ && j_ == it.j_;
+ }
+ }
+
+ private:
+ int rank_;
+ size_type i_;
+ size_type j_;
+ vector_subiterator_type itv_;
+ subiterator_type it_;
+
+ friend class const_iterator1;
+ };
+
+ BOOST_UBLAS_INLINE
+ iterator1 begin1 () {
+ return find1 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 end1 () {
+ return find1 (0, size1_, 0);
+ }
+
+ class const_iterator2:
+ public container_const_reference<coordinate_matrix>,
+ public bidirectional_iterator_base<sparse_bidirectional_iterator_tag,
+ const_iterator2, value_type> {
+ public:
+ typedef typename coordinate_matrix::value_type value_type;
+ typedef typename coordinate_matrix::difference_type difference_type;
+ typedef typename coordinate_matrix::const_reference reference;
+ typedef const typename coordinate_matrix::pointer pointer;
+
+ typedef const_iterator1 dual_iterator_type;
+ typedef const_reverse_iterator1 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator2 ():
+ container_const_reference<self_type> (), rank_ (), i_ (), j_ (), itv_ (), it_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator2 (const self_type &m, int rank, size_type i, size_type j, const vector_const_subiterator_type itv, const const_subiterator_type &it):
+ container_const_reference<self_type> (m), rank_ (rank), i_ (i), j_ (j), itv_ (itv), it_ (it) {}
+ BOOST_UBLAS_INLINE
+ const_iterator2 (const iterator2 &it):
+ container_const_reference<self_type> (it ()), rank_ (it.rank_), i_ (it.i_), j_ (it.j_), itv_ (it.itv_), it_ (it.it_) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator ++ () {
+ if (rank_ == 1 && layout_type::fast2 ())
+ ++ it_;
+ else {
+ j_ = index2 () + 1;
+ if (rank_ == 1)
+ *this = (*this) ().find2 (rank_, i_, j_, 1);
+ }
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator -- () {
+ if (rank_ == 1 && layout_type::fast2 ())
+ -- it_;
+ else {
+ j_ = index2 () - 1;
+ if (rank_ == 1)
+ *this = (*this) ().find2 (rank_, i_, j_, -1);
+ }
+ return *this;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ BOOST_UBLAS_CHECK (index1 () < (*this) ().size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (index2 () < (*this) ().size2 (), bad_index ());
+ if (rank_ == 1) {
+ return (*this) ().value_data_ [it_ - (*this) ().index2_data_.begin ()];
+ } else {
+ return (*this) () (i_, j_);
+ }
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 begin () const {
+ const self_type &m = (*this) ();
+ return m.find1 (1, 0, index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 end () const {
+ const self_type &m = (*this) ();
+ return m.find1 (1, m.size1 (), index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rbegin () const {
+ return const_reverse_iterator1 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rend () const {
+ return const_reverse_iterator1 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ if (rank_ == 1) {
+ BOOST_UBLAS_CHECK (layout_type::index1 ((*this) ().zero_based (*itv_), (*this) ().zero_based (*it_)) < (*this) ().size1 (), bad_index ());
+ return layout_type::index1 ((*this) ().zero_based (*itv_), (*this) ().zero_based (*it_));
+ } else {
+ return i_;
+ }
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ BOOST_UBLAS_CHECK (*this != (*this) ().find2 (0, i_, (*this) ().size2 ()), bad_index ());
+ if (rank_ == 1) {
+ BOOST_UBLAS_CHECK (layout_type::index2 ((*this) ().zero_based (*itv_), (*this) ().zero_based (*it_)) < (*this) ().size2 (), bad_index ());
+ return layout_type::index2 ((*this) ().zero_based (*itv_), (*this) ().zero_based (*it_));
+ } else {
+ return j_;
+ }
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator = (const const_iterator2 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ rank_ = it.rank_;
+ i_ = it.i_;
+ j_ = it.j_;
+ itv_ = it.itv_;
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ // BOOST_UBLAS_CHECK (rank_ == it.rank_, internal_logic ());
+ if (rank_ == 1 || it.rank_ == 1) {
+ return it_ == it.it_;
+ } else {
+ return i_ == it.i_ && j_ == it.j_;
+ }
+ }
+
+ private:
+ int rank_;
+ size_type i_;
+ size_type j_;
+ vector_const_subiterator_type itv_;
+ const_subiterator_type it_;
+ };
+
+ BOOST_UBLAS_INLINE
+ const_iterator2 begin2 () const {
+ return find2 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 end2 () const {
+ return find2 (0, 0, size2_);
+ }
+
+ class iterator2:
+ public container_reference<coordinate_matrix>,
+ public bidirectional_iterator_base<sparse_bidirectional_iterator_tag,
+ iterator2, value_type> {
+ public:
+ typedef typename coordinate_matrix::value_type value_type;
+ typedef typename coordinate_matrix::difference_type difference_type;
+ typedef typename coordinate_matrix::true_reference reference;
+ typedef typename coordinate_matrix::pointer pointer;
+
+ typedef iterator1 dual_iterator_type;
+ typedef reverse_iterator1 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ iterator2 ():
+ container_reference<self_type> (), rank_ (), i_ (), j_ (), itv_ (), it_ () {}
+ BOOST_UBLAS_INLINE
+ iterator2 (self_type &m, int rank, size_type i, size_type j, const vector_subiterator_type &itv, const subiterator_type &it):
+ container_reference<self_type> (m), rank_ (rank), i_ (i), j_ (j), itv_ (itv), it_ (it) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ iterator2 &operator ++ () {
+ if (rank_ == 1 && layout_type::fast2 ())
+ ++ it_;
+ else {
+ j_ = index2 () + 1;
+ if (rank_ == 1)
+ *this = (*this) ().find2 (rank_, i_, j_, 1);
+ }
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 &operator -- () {
+ if (rank_ == 1 && layout_type::fast2 ())
+ -- it_;
+ else {
+ j_ = index2 ();
+ if (rank_ == 1)
+ *this = (*this) ().find2 (rank_, i_, j_, -1);
+ }
+ return *this;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ BOOST_UBLAS_CHECK (index1 () < (*this) ().size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (index2 () < (*this) ().size2 (), bad_index ());
+ if (rank_ == 1) {
+ return (*this) ().value_data_ [it_ - (*this) ().index2_data_.begin ()];
+ } else {
+ return (*this) ().at_element (i_, j_);
+ }
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator1 begin () const {
+ self_type &m = (*this) ();
+ return m.find1 (1, 0, index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator1 end () const {
+ self_type &m = (*this) ();
+ return m.find1 (1, m.size1 (), index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator1 rbegin () const {
+ return reverse_iterator1 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator1 rend () const {
+ return reverse_iterator1 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ if (rank_ == 1) {
+ BOOST_UBLAS_CHECK (layout_type::index1 ((*this) ().zero_based (*itv_), (*this) ().zero_based (*it_)) < (*this) ().size1 (), bad_index ());
+ return layout_type::index1 ((*this) ().zero_based (*itv_), (*this) ().zero_based (*it_));
+ } else {
+ return i_;
+ }
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ BOOST_UBLAS_CHECK (*this != (*this) ().find2 (0, i_, (*this) ().size2 ()), bad_index ());
+ if (rank_ == 1) {
+ BOOST_UBLAS_CHECK (layout_type::index2 ((*this) ().zero_based (*itv_), (*this) ().zero_based (*it_)) < (*this) ().size2 (), bad_index ());
+ return layout_type::index2 ((*this) ().zero_based (*itv_), (*this) ().zero_based (*it_));
+ } else {
+ return j_;
+ }
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ iterator2 &operator = (const iterator2 &it) {
+ container_reference<self_type>::assign (&it ());
+ rank_ = it.rank_;
+ i_ = it.i_;
+ j_ = it.j_;
+ itv_ = it.itv_;
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ // BOOST_UBLAS_CHECK (rank_ == it.rank_, internal_logic ());
+ if (rank_ == 1 || it.rank_ == 1) {
+ return it_ == it.it_;
+ } else {
+ return i_ == it.i_ && j_ == it.j_;
+ }
+ }
+
+ private:
+ int rank_;
+ size_type i_;
+ size_type j_;
+ vector_subiterator_type itv_;
+ subiterator_type it_;
+
+ friend class const_iterator2;
+ };
+
+ BOOST_UBLAS_INLINE
+ iterator2 begin2 () {
+ return find2 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 end2 () {
+ return find2 (0, 0, size2_);
+ }
+
+ // Reverse iterators
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rbegin1 () const {
+ return const_reverse_iterator1 (end1 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rend1 () const {
+ return const_reverse_iterator1 (begin1 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ reverse_iterator1 rbegin1 () {
+ return reverse_iterator1 (end1 ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator1 rend1 () {
+ return reverse_iterator1 (begin1 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rbegin2 () const {
+ return const_reverse_iterator2 (end2 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rend2 () const {
+ return const_reverse_iterator2 (begin2 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ reverse_iterator2 rbegin2 () {
+ return reverse_iterator2 (end2 ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator2 rend2 () {
+ return reverse_iterator2 (begin2 ());
+ }
+
+ private:
+ void storage_invariants () const
+ {
+ BOOST_UBLAS_CHECK (capacity_ == index1_data_.size (), internal_logic ());
+ BOOST_UBLAS_CHECK (capacity_ == index2_data_.size (), internal_logic ());
+ BOOST_UBLAS_CHECK (capacity_ == value_data_.size (), internal_logic ());
+ BOOST_UBLAS_CHECK (filled_ <= capacity_, internal_logic ());
+ BOOST_UBLAS_CHECK (sorted_filled_ <= filled_, internal_logic ());
+ BOOST_UBLAS_CHECK (sorted_ == (sorted_filled_ == filled_), internal_logic ());
+ }
+
+ size_type size1_;
+ size_type size2_;
+ array_size_type capacity_;
+ mutable array_size_type filled_;
+ mutable array_size_type sorted_filled_;
+ mutable bool sorted_;
+ mutable index_array_type index1_data_;
+ mutable index_array_type index2_data_;
+ mutable value_array_type value_data_;
+ static const value_type zero_;
+
+ BOOST_UBLAS_INLINE
+ static size_type zero_based (size_type k_based_index) {
+ return k_based_index - IB;
+ }
+ BOOST_UBLAS_INLINE
+ static size_type k_based (size_type zero_based_index) {
+ return zero_based_index + IB;
+ }
+
+ friend class iterator1;
+ friend class iterator2;
+ friend class const_iterator1;
+ friend class const_iterator2;
+ };
+
+ template<class T, class L, std::size_t IB, class IA, class TA>
+ const typename coordinate_matrix<T, L, IB, IA, TA>::value_type coordinate_matrix<T, L, IB, IA, TA>::zero_ = value_type/*zero*/();
+
+}}}
+
+#endif
diff --git a/boost/boost/numeric/ublas/operation.hpp b/boost/boost/numeric/ublas/operation.hpp
new file mode 100644
index 00000000000..48bf2056a07
--- /dev/null
+++ b/boost/boost/numeric/ublas/operation.hpp
@@ -0,0 +1,855 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without fee,
+// provided that the above copyright notice appear in all copies and
+// that both that copyright notice and this permission notice appear
+// in supporting documentation. The authors make no representations
+// about the suitability of this software for any purpose.
+// It is provided "as is" without express or implied warranty.
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#ifndef _BOOST_UBLAS_OPERATION_
+#define _BOOST_UBLAS_OPERATION_
+
+#include <boost/numeric/ublas/matrix_proxy.hpp>
+
+/** \file operation.hpp
+ * \brief This file contains some specialized products.
+ */
+
+// axpy-based products
+// Alexei Novakov had a lot of ideas to improve these. Thanks.
+// Hendrik Kueck proposed some new kernel. Thanks again.
+
+namespace boost { namespace numeric { namespace ublas {
+
+ template<class V, class T1, class IA1, class TA1, class E2>
+ BOOST_UBLAS_INLINE
+ V &
+ axpy_prod (const compressed_matrix<T1, row_major, 0, IA1, TA1> &e1,
+ const vector_expression<E2> &e2,
+ V &v, row_major_tag) {
+ typedef typename V::size_type size_type;
+ typedef typename V::value_type value_type;
+
+ for (size_type i = 0; i < e1.filled1 () -1; ++ i) {
+ size_type begin = e1.index1_data () [i];
+ size_type end = e1.index1_data () [i + 1];
+ value_type t (v (i));
+ for (size_type j = begin; j < end; ++ j)
+ t += e1.value_data () [j] * e2 () (e1.index2_data () [j]);
+ v (i) = t;
+ }
+ return v;
+ }
+
+ template<class V, class T1, class IA1, class TA1, class E2>
+ BOOST_UBLAS_INLINE
+ V &
+ axpy_prod (const compressed_matrix<T1, column_major, 0, IA1, TA1> &e1,
+ const vector_expression<E2> &e2,
+ V &v, column_major_tag) {
+ typedef typename V::size_type size_type;
+
+ for (size_type j = 0; j < e1.filled1 () -1; ++ j) {
+ size_type begin = e1.index1_data () [j];
+ size_type end = e1.index1_data () [j + 1];
+ for (size_type i = begin; i < end; ++ i)
+ v (e1.index2_data () [i]) += e1.value_data () [i] * e2 () (j);
+ }
+ return v;
+ }
+
+ // Dispatcher
+ template<class V, class T1, class L1, class IA1, class TA1, class E2>
+ BOOST_UBLAS_INLINE
+ V &
+ axpy_prod (const compressed_matrix<T1, L1, 0, IA1, TA1> &e1,
+ const vector_expression<E2> &e2,
+ V &v, bool init = true) {
+ typedef typename V::value_type value_type;
+ typedef typename L1::orientation_category orientation_category;
+
+ if (init)
+ v.assign (zero_vector<value_type> (e1.size1 ()));
+#if BOOST_UBLAS_TYPE_CHECK
+ vector<value_type> cv (v);
+ typedef typename type_traits<value_type>::real_type real_type;
+ real_type verrorbound (norm_1 (v) + norm_1 (e1) * norm_1 (e2));
+ indexing_vector_assign<scalar_plus_assign> (cv, prod (e1, e2));
+#endif
+ axpy_prod (e1, e2, v, orientation_category ());
+#if BOOST_UBLAS_TYPE_CHECK
+ BOOST_UBLAS_CHECK (norm_1 (v - cv) <= 2 * std::numeric_limits<real_type>::epsilon () * verrorbound, internal_logic ());
+#endif
+ return v;
+ }
+ template<class V, class T1, class L1, class IA1, class TA1, class E2>
+ BOOST_UBLAS_INLINE
+ V
+ axpy_prod (const compressed_matrix<T1, L1, 0, IA1, TA1> &e1,
+ const vector_expression<E2> &e2) {
+ typedef V vector_type;
+
+ vector_type v (e1.size1 ());
+ return axpy_prod (e1, e2, v, true);
+ }
+
+ template<class V, class T1, class L1, class IA1, class TA1, class E2>
+ BOOST_UBLAS_INLINE
+ V &
+ axpy_prod (const coordinate_matrix<T1, L1, 0, IA1, TA1> &e1,
+ const vector_expression<E2> &e2,
+ V &v, bool init = true) {
+ typedef typename V::size_type size_type;
+ typedef typename V::value_type value_type;
+ typedef L1 layout_type;
+
+ size_type size1 = e1.size1();
+ size_type size2 = e1.size2();
+
+ if (init) {
+ noalias(v) = zero_vector<value_type>(size1);
+ }
+
+ for (size_type i = 0; i < e1.nnz(); ++i) {
+ size_type row_index = layout_type::element1( e1.index1_data () [i], size1, e1.index2_data () [i], size2 );
+ size_type col_index = layout_type::element2( e1.index1_data () [i], size1, e1.index2_data () [i], size2 );
+ v( row_index ) += e1.value_data () [i] * e2 () (col_index);
+ }
+ return v;
+ }
+
+ template<class V, class E1, class E2>
+ BOOST_UBLAS_INLINE
+ V &
+ axpy_prod (const matrix_expression<E1> &e1,
+ const vector_expression<E2> &e2,
+ V &v, packed_random_access_iterator_tag, row_major_tag) {
+ typedef const E1 expression1_type;
+ typedef const E2 expression2_type;
+ typedef typename V::size_type size_type;
+
+ typename expression1_type::const_iterator1 it1 (e1 ().begin1 ());
+ typename expression1_type::const_iterator1 it1_end (e1 ().end1 ());
+ while (it1 != it1_end) {
+ size_type index1 (it1.index1 ());
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ typename expression1_type::const_iterator2 it2 (it1.begin ());
+ typename expression1_type::const_iterator2 it2_end (it1.end ());
+#else
+ typename expression1_type::const_iterator2 it2 (boost::numeric::ublas::begin (it1, iterator1_tag ()));
+ typename expression1_type::const_iterator2 it2_end (boost::numeric::ublas::end (it1, iterator1_tag ()));
+#endif
+ while (it2 != it2_end) {
+ v (index1) += *it2 * e2 () (it2.index2 ());
+ ++ it2;
+ }
+ ++ it1;
+ }
+ return v;
+ }
+
+ template<class V, class E1, class E2>
+ BOOST_UBLAS_INLINE
+ V &
+ axpy_prod (const matrix_expression<E1> &e1,
+ const vector_expression<E2> &e2,
+ V &v, packed_random_access_iterator_tag, column_major_tag) {
+ typedef const E1 expression1_type;
+ typedef const E2 expression2_type;
+ typedef typename V::size_type size_type;
+
+ typename expression1_type::const_iterator2 it2 (e1 ().begin2 ());
+ typename expression1_type::const_iterator2 it2_end (e1 ().end2 ());
+ while (it2 != it2_end) {
+ size_type index2 (it2.index2 ());
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ typename expression1_type::const_iterator1 it1 (it2.begin ());
+ typename expression1_type::const_iterator1 it1_end (it2.end ());
+#else
+ typename expression1_type::const_iterator1 it1 (boost::numeric::ublas::begin (it2, iterator2_tag ()));
+ typename expression1_type::const_iterator1 it1_end (boost::numeric::ublas::end (it2, iterator2_tag ()));
+#endif
+ while (it1 != it1_end) {
+ v (it1.index1 ()) += *it1 * e2 () (index2);
+ ++ it1;
+ }
+ ++ it2;
+ }
+ return v;
+ }
+
+ template<class V, class E1, class E2>
+ BOOST_UBLAS_INLINE
+ V &
+ axpy_prod (const matrix_expression<E1> &e1,
+ const vector_expression<E2> &e2,
+ V &v, sparse_bidirectional_iterator_tag) {
+ typedef const E1 expression1_type;
+ typedef const E2 expression2_type;
+ typedef typename V::size_type size_type;
+
+ typename expression2_type::const_iterator it (e2 ().begin ());
+ typename expression2_type::const_iterator it_end (e2 ().end ());
+ while (it != it_end) {
+ v.plus_assign (column (e1 (), it.index ()) * *it);
+ ++ it;
+ }
+ return v;
+ }
+
+ // Dispatcher
+ template<class V, class E1, class E2>
+ BOOST_UBLAS_INLINE
+ V &
+ axpy_prod (const matrix_expression<E1> &e1,
+ const vector_expression<E2> &e2,
+ V &v, packed_random_access_iterator_tag) {
+ typedef typename E1::orientation_category orientation_category;
+ return axpy_prod (e1, e2, v, packed_random_access_iterator_tag (), orientation_category ());
+ }
+
+
+ /** \brief computes <tt>v += A x</tt> or <tt>v = A x</tt> in an
+ optimized fashion.
+
+ \param e1 the matrix expression \c A
+ \param e2 the vector expression \c x
+ \param v the result vector \c v
+ \param init a boolean parameter
+
+ <tt>axpy_prod(A, x, v, init)</tt> implements the well known
+ axpy-product. Setting \a init to \c true is equivalent to call
+ <tt>v.clear()</tt> before <tt>axpy_prod</tt>. Currently \a init
+ defaults to \c true, but this may change in the future.
+
+ Up to now there are some specialisation for compressed
+ matrices that give a large speed up compared to prod.
+
+ \ingroup blas2
+
+ \internal
+
+ template parameters:
+ \param V type of the result vector \c v
+ \param E1 type of a matrix expression \c A
+ \param E2 type of a vector expression \c x
+ */
+ template<class V, class E1, class E2>
+ BOOST_UBLAS_INLINE
+ V &
+ axpy_prod (const matrix_expression<E1> &e1,
+ const vector_expression<E2> &e2,
+ V &v, bool init = true) {
+ typedef typename V::value_type value_type;
+ typedef typename E2::const_iterator::iterator_category iterator_category;
+
+ if (init)
+ v.assign (zero_vector<value_type> (e1 ().size1 ()));
+#if BOOST_UBLAS_TYPE_CHECK
+ vector<value_type> cv (v);
+ typedef typename type_traits<value_type>::real_type real_type;
+ real_type verrorbound (norm_1 (v) + norm_1 (e1) * norm_1 (e2));
+ indexing_vector_assign<scalar_plus_assign> (cv, prod (e1, e2));
+#endif
+ axpy_prod (e1, e2, v, iterator_category ());
+#if BOOST_UBLAS_TYPE_CHECK
+ BOOST_UBLAS_CHECK (norm_1 (v - cv) <= 2 * std::numeric_limits<real_type>::epsilon () * verrorbound, internal_logic ());
+#endif
+ return v;
+ }
+ template<class V, class E1, class E2>
+ BOOST_UBLAS_INLINE
+ V
+ axpy_prod (const matrix_expression<E1> &e1,
+ const vector_expression<E2> &e2) {
+ typedef V vector_type;
+
+ vector_type v (e1 ().size1 ());
+ return axpy_prod (e1, e2, v, true);
+ }
+
+ template<class V, class E1, class T2, class IA2, class TA2>
+ BOOST_UBLAS_INLINE
+ V &
+ axpy_prod (const vector_expression<E1> &e1,
+ const compressed_matrix<T2, column_major, 0, IA2, TA2> &e2,
+ V &v, column_major_tag) {
+ typedef typename V::size_type size_type;
+ typedef typename V::value_type value_type;
+
+ for (size_type j = 0; j < e2.filled1 () -1; ++ j) {
+ size_type begin = e2.index1_data () [j];
+ size_type end = e2.index1_data () [j + 1];
+ value_type t (v (j));
+ for (size_type i = begin; i < end; ++ i)
+ t += e2.value_data () [i] * e1 () (e2.index2_data () [i]);
+ v (j) = t;
+ }
+ return v;
+ }
+
+ template<class V, class E1, class T2, class IA2, class TA2>
+ BOOST_UBLAS_INLINE
+ V &
+ axpy_prod (const vector_expression<E1> &e1,
+ const compressed_matrix<T2, row_major, 0, IA2, TA2> &e2,
+ V &v, row_major_tag) {
+ typedef typename V::size_type size_type;
+
+ for (size_type i = 0; i < e2.filled1 () -1; ++ i) {
+ size_type begin = e2.index1_data () [i];
+ size_type end = e2.index1_data () [i + 1];
+ for (size_type j = begin; j < end; ++ j)
+ v (e2.index2_data () [j]) += e2.value_data () [j] * e1 () (i);
+ }
+ return v;
+ }
+
+ // Dispatcher
+ template<class V, class E1, class T2, class L2, class IA2, class TA2>
+ BOOST_UBLAS_INLINE
+ V &
+ axpy_prod (const vector_expression<E1> &e1,
+ const compressed_matrix<T2, L2, 0, IA2, TA2> &e2,
+ V &v, bool init = true) {
+ typedef typename V::value_type value_type;
+ typedef typename L2::orientation_category orientation_category;
+
+ if (init)
+ v.assign (zero_vector<value_type> (e2.size2 ()));
+#if BOOST_UBLAS_TYPE_CHECK
+ vector<value_type> cv (v);
+ typedef typename type_traits<value_type>::real_type real_type;
+ real_type verrorbound (norm_1 (v) + norm_1 (e1) * norm_1 (e2));
+ indexing_vector_assign<scalar_plus_assign> (cv, prod (e1, e2));
+#endif
+ axpy_prod (e1, e2, v, orientation_category ());
+#if BOOST_UBLAS_TYPE_CHECK
+ BOOST_UBLAS_CHECK (norm_1 (v - cv) <= 2 * std::numeric_limits<real_type>::epsilon () * verrorbound, internal_logic ());
+#endif
+ return v;
+ }
+ template<class V, class E1, class T2, class L2, class IA2, class TA2>
+ BOOST_UBLAS_INLINE
+ V
+ axpy_prod (const vector_expression<E1> &e1,
+ const compressed_matrix<T2, L2, 0, IA2, TA2> &e2) {
+ typedef V vector_type;
+
+ vector_type v (e2.size2 ());
+ return axpy_prod (e1, e2, v, true);
+ }
+
+ template<class V, class E1, class E2>
+ BOOST_UBLAS_INLINE
+ V &
+ axpy_prod (const vector_expression<E1> &e1,
+ const matrix_expression<E2> &e2,
+ V &v, packed_random_access_iterator_tag, column_major_tag) {
+ typedef const E1 expression1_type;
+ typedef const E2 expression2_type;
+ typedef typename V::size_type size_type;
+
+ typename expression2_type::const_iterator2 it2 (e2 ().begin2 ());
+ typename expression2_type::const_iterator2 it2_end (e2 ().end2 ());
+ while (it2 != it2_end) {
+ size_type index2 (it2.index2 ());
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ typename expression2_type::const_iterator1 it1 (it2.begin ());
+ typename expression2_type::const_iterator1 it1_end (it2.end ());
+#else
+ typename expression2_type::const_iterator1 it1 (boost::numeric::ublas::begin (it2, iterator2_tag ()));
+ typename expression2_type::const_iterator1 it1_end (boost::numeric::ublas::end (it2, iterator2_tag ()));
+#endif
+ while (it1 != it1_end) {
+ v (index2) += *it1 * e1 () (it1.index1 ());
+ ++ it1;
+ }
+ ++ it2;
+ }
+ return v;
+ }
+
+ template<class V, class E1, class E2>
+ BOOST_UBLAS_INLINE
+ V &
+ axpy_prod (const vector_expression<E1> &e1,
+ const matrix_expression<E2> &e2,
+ V &v, packed_random_access_iterator_tag, row_major_tag) {
+ typedef const E1 expression1_type;
+ typedef const E2 expression2_type;
+ typedef typename V::size_type size_type;
+
+ typename expression2_type::const_iterator1 it1 (e2 ().begin1 ());
+ typename expression2_type::const_iterator1 it1_end (e2 ().end1 ());
+ while (it1 != it1_end) {
+ size_type index1 (it1.index1 ());
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ typename expression2_type::const_iterator2 it2 (it1.begin ());
+ typename expression2_type::const_iterator2 it2_end (it1.end ());
+#else
+ typename expression2_type::const_iterator2 it2 (boost::numeric::ublas::begin (it1, iterator1_tag ()));
+ typename expression2_type::const_iterator2 it2_end (boost::numeric::ublas::end (it1, iterator1_tag ()));
+#endif
+ while (it2 != it2_end) {
+ v (it2.index2 ()) += *it2 * e1 () (index1);
+ ++ it2;
+ }
+ ++ it1;
+ }
+ return v;
+ }
+
+ template<class V, class E1, class E2>
+ BOOST_UBLAS_INLINE
+ V &
+ axpy_prod (const vector_expression<E1> &e1,
+ const matrix_expression<E2> &e2,
+ V &v, sparse_bidirectional_iterator_tag) {
+ typedef const E1 expression1_type;
+ typedef const E2 expression2_type;
+ typedef typename V::size_type size_type;
+
+ typename expression1_type::const_iterator it (e1 ().begin ());
+ typename expression1_type::const_iterator it_end (e1 ().end ());
+ while (it != it_end) {
+ v.plus_assign (*it * row (e2 (), it.index ()));
+ ++ it;
+ }
+ return v;
+ }
+
+ // Dispatcher
+ template<class V, class E1, class E2>
+ BOOST_UBLAS_INLINE
+ V &
+ axpy_prod (const vector_expression<E1> &e1,
+ const matrix_expression<E2> &e2,
+ V &v, packed_random_access_iterator_tag) {
+ typedef typename E2::orientation_category orientation_category;
+ return axpy_prod (e1, e2, v, packed_random_access_iterator_tag (), orientation_category ());
+ }
+
+
+ /** \brief computes <tt>v += A<sup>T</sup> x</tt> or <tt>v = A<sup>T</sup> x</tt> in an
+ optimized fashion.
+
+ \param e1 the vector expression \c x
+ \param e2 the matrix expression \c A
+ \param v the result vector \c v
+ \param init a boolean parameter
+
+ <tt>axpy_prod(x, A, v, init)</tt> implements the well known
+ axpy-product. Setting \a init to \c true is equivalent to call
+ <tt>v.clear()</tt> before <tt>axpy_prod</tt>. Currently \a init
+ defaults to \c true, but this may change in the future.
+
+ Up to now there are some specialisation for compressed
+ matrices that give a large speed up compared to prod.
+
+ \ingroup blas2
+
+ \internal
+
+ template parameters:
+ \param V type of the result vector \c v
+ \param E1 type of a vector expression \c x
+ \param E2 type of a matrix expression \c A
+ */
+ template<class V, class E1, class E2>
+ BOOST_UBLAS_INLINE
+ V &
+ axpy_prod (const vector_expression<E1> &e1,
+ const matrix_expression<E2> &e2,
+ V &v, bool init = true) {
+ typedef typename V::value_type value_type;
+ typedef typename E1::const_iterator::iterator_category iterator_category;
+
+ if (init)
+ v.assign (zero_vector<value_type> (e2 ().size2 ()));
+#if BOOST_UBLAS_TYPE_CHECK
+ vector<value_type> cv (v);
+ typedef typename type_traits<value_type>::real_type real_type;
+ real_type verrorbound (norm_1 (v) + norm_1 (e1) * norm_1 (e2));
+ indexing_vector_assign<scalar_plus_assign> (cv, prod (e1, e2));
+#endif
+ axpy_prod (e1, e2, v, iterator_category ());
+#if BOOST_UBLAS_TYPE_CHECK
+ BOOST_UBLAS_CHECK (norm_1 (v - cv) <= 2 * std::numeric_limits<real_type>::epsilon () * verrorbound, internal_logic ());
+#endif
+ return v;
+ }
+ template<class V, class E1, class E2>
+ BOOST_UBLAS_INLINE
+ V
+ axpy_prod (const vector_expression<E1> &e1,
+ const matrix_expression<E2> &e2) {
+ typedef V vector_type;
+
+ vector_type v (e2 ().size2 ());
+ return axpy_prod (e1, e2, v, true);
+ }
+
+ template<class M, class E1, class E2, class TRI>
+ BOOST_UBLAS_INLINE
+ M &
+ axpy_prod (const matrix_expression<E1> &e1,
+ const matrix_expression<E2> &e2,
+ M &m, TRI,
+ dense_proxy_tag, row_major_tag) {
+ typedef M matrix_type;
+ typedef const E1 expression1_type;
+ typedef const E2 expression2_type;
+ typedef typename M::size_type size_type;
+ typedef typename M::value_type value_type;
+
+#if BOOST_UBLAS_TYPE_CHECK
+ matrix<value_type, row_major> cm (m);
+ typedef typename type_traits<value_type>::real_type real_type;
+ real_type merrorbound (norm_1 (m) + norm_1 (e1) * norm_1 (e2));
+ indexing_matrix_assign<scalar_plus_assign> (cm, prod (e1, e2), row_major_tag ());
+#endif
+ size_type size1 (e1 ().size1 ());
+ size_type size2 (e1 ().size2 ());
+ for (size_type i = 0; i < size1; ++ i)
+ for (size_type j = 0; j < size2; ++ j)
+ row (m, i).plus_assign (e1 () (i, j) * row (e2 (), j));
+#if BOOST_UBLAS_TYPE_CHECK
+ BOOST_UBLAS_CHECK (norm_1 (m - cm) <= 2 * std::numeric_limits<real_type>::epsilon () * merrorbound, internal_logic ());
+#endif
+ return m;
+ }
+ template<class M, class E1, class E2, class TRI>
+ BOOST_UBLAS_INLINE
+ M &
+ axpy_prod (const matrix_expression<E1> &e1,
+ const matrix_expression<E2> &e2,
+ M &m, TRI,
+ sparse_proxy_tag, row_major_tag) {
+ typedef M matrix_type;
+ typedef TRI triangular_restriction;
+ typedef const E1 expression1_type;
+ typedef const E2 expression2_type;
+ typedef typename M::size_type size_type;
+ typedef typename M::value_type value_type;
+
+#if BOOST_UBLAS_TYPE_CHECK
+ matrix<value_type, row_major> cm (m);
+ typedef typename type_traits<value_type>::real_type real_type;
+ real_type merrorbound (norm_1 (m) + norm_1 (e1) * norm_1 (e2));
+ indexing_matrix_assign<scalar_plus_assign> (cm, prod (e1, e2), row_major_tag ());
+#endif
+ typename expression1_type::const_iterator1 it1 (e1 ().begin1 ());
+ typename expression1_type::const_iterator1 it1_end (e1 ().end1 ());
+ while (it1 != it1_end) {
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ typename expression1_type::const_iterator2 it2 (it1.begin ());
+ typename expression1_type::const_iterator2 it2_end (it1.end ());
+#else
+ typename expression1_type::const_iterator2 it2 (boost::numeric::ublas::begin (it1, iterator1_tag ()));
+ typename expression1_type::const_iterator2 it2_end (boost::numeric::ublas::end (it1, iterator1_tag ()));
+#endif
+ while (it2 != it2_end) {
+ // row (m, it1.index1 ()).plus_assign (*it2 * row (e2 (), it2.index2 ()));
+ matrix_row<expression2_type> mr (e2 (), it2.index2 ());
+ typename matrix_row<expression2_type>::const_iterator itr (mr.begin ());
+ typename matrix_row<expression2_type>::const_iterator itr_end (mr.end ());
+ while (itr != itr_end) {
+ if (triangular_restriction::other (it1.index1 (), itr.index ()))
+ m (it1.index1 (), itr.index ()) += *it2 * *itr;
+ ++ itr;
+ }
+ ++ it2;
+ }
+ ++ it1;
+ }
+#if BOOST_UBLAS_TYPE_CHECK
+ BOOST_UBLAS_CHECK (norm_1 (m - cm) <= 2 * std::numeric_limits<real_type>::epsilon () * merrorbound, internal_logic ());
+#endif
+ return m;
+ }
+
+ template<class M, class E1, class E2, class TRI>
+ BOOST_UBLAS_INLINE
+ M &
+ axpy_prod (const matrix_expression<E1> &e1,
+ const matrix_expression<E2> &e2,
+ M &m, TRI,
+ dense_proxy_tag, column_major_tag) {
+ typedef M matrix_type;
+ typedef const E1 expression1_type;
+ typedef const E2 expression2_type;
+ typedef typename M::size_type size_type;
+ typedef typename M::value_type value_type;
+
+#if BOOST_UBLAS_TYPE_CHECK
+ matrix<value_type, column_major> cm (m);
+ typedef typename type_traits<value_type>::real_type real_type;
+ real_type merrorbound (norm_1 (m) + norm_1 (e1) * norm_1 (e2));
+ indexing_matrix_assign<scalar_plus_assign> (cm, prod (e1, e2), column_major_tag ());
+#endif
+ size_type size1 (e2 ().size1 ());
+ size_type size2 (e2 ().size2 ());
+ for (size_type j = 0; j < size2; ++ j)
+ for (size_type i = 0; i < size1; ++ i)
+ column (m, j).plus_assign (e2 () (i, j) * column (e1 (), i));
+#if BOOST_UBLAS_TYPE_CHECK
+ BOOST_UBLAS_CHECK (norm_1 (m - cm) <= 2 * std::numeric_limits<real_type>::epsilon () * merrorbound, internal_logic ());
+#endif
+ return m;
+ }
+ template<class M, class E1, class E2, class TRI>
+ BOOST_UBLAS_INLINE
+ M &
+ axpy_prod (const matrix_expression<E1> &e1,
+ const matrix_expression<E2> &e2,
+ M &m, TRI,
+ sparse_proxy_tag, column_major_tag) {
+ typedef M matrix_type;
+ typedef TRI triangular_restriction;
+ typedef const E1 expression1_type;
+ typedef const E2 expression2_type;
+ typedef typename M::size_type size_type;
+ typedef typename M::value_type value_type;
+
+#if BOOST_UBLAS_TYPE_CHECK
+ matrix<value_type, column_major> cm (m);
+ typedef typename type_traits<value_type>::real_type real_type;
+ real_type merrorbound (norm_1 (m) + norm_1 (e1) * norm_1 (e2));
+ indexing_matrix_assign<scalar_plus_assign> (cm, prod (e1, e2), column_major_tag ());
+#endif
+ typename expression2_type::const_iterator2 it2 (e2 ().begin2 ());
+ typename expression2_type::const_iterator2 it2_end (e2 ().end2 ());
+ while (it2 != it2_end) {
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ typename expression2_type::const_iterator1 it1 (it2.begin ());
+ typename expression2_type::const_iterator1 it1_end (it2.end ());
+#else
+ typename expression2_type::const_iterator1 it1 (boost::numeric::ublas::begin (it2, iterator2_tag ()));
+ typename expression2_type::const_iterator1 it1_end (boost::numeric::ublas::end (it2, iterator2_tag ()));
+#endif
+ while (it1 != it1_end) {
+ // column (m, it2.index2 ()).plus_assign (*it1 * column (e1 (), it1.index1 ()));
+ matrix_column<expression1_type> mc (e1 (), it1.index1 ());
+ typename matrix_column<expression1_type>::const_iterator itc (mc.begin ());
+ typename matrix_column<expression1_type>::const_iterator itc_end (mc.end ());
+ while (itc != itc_end) {
+ if (triangular_restriction::functor_type ().other (itc.index (), it2.index2 ()))
+ m (itc.index (), it2.index2 ()) += *it1 * *itc;
+ ++ itc;
+ }
+ ++ it1;
+ }
+ ++ it2;
+ }
+#if BOOST_UBLAS_TYPE_CHECK
+ BOOST_UBLAS_CHECK (norm_1 (m - cm) <= 2 * std::numeric_limits<real_type>::epsilon () * merrorbound, internal_logic ());
+#endif
+ return m;
+ }
+
+ // Dispatcher
+ template<class M, class E1, class E2, class TRI>
+ BOOST_UBLAS_INLINE
+ M &
+ axpy_prod (const matrix_expression<E1> &e1,
+ const matrix_expression<E2> &e2,
+ M &m, TRI, bool init = true) {
+ typedef typename M::value_type value_type;
+ typedef typename M::storage_category storage_category;
+ typedef typename M::orientation_category orientation_category;
+ typedef TRI triangular_restriction;
+
+ if (init)
+ m.assign (zero_matrix<value_type> (e1 ().size1 (), e2 ().size2 ()));
+ return axpy_prod (e1, e2, m, triangular_restriction (), storage_category (), orientation_category ());
+ }
+ template<class M, class E1, class E2, class TRI>
+ BOOST_UBLAS_INLINE
+ M
+ axpy_prod (const matrix_expression<E1> &e1,
+ const matrix_expression<E2> &e2,
+ TRI) {
+ typedef M matrix_type;
+ typedef TRI triangular_restriction;
+
+ matrix_type m (e1 ().size1 (), e2 ().size2 ());
+ return axpy_prod (e1, e2, m, triangular_restriction (), true);
+ }
+
+ /** \brief computes <tt>M += A X</tt> or <tt>M = A X</tt> in an
+ optimized fashion.
+
+ \param e1 the matrix expression \c A
+ \param e2 the matrix expression \c X
+ \param m the result matrix \c M
+ \param init a boolean parameter
+
+ <tt>axpy_prod(A, X, M, init)</tt> implements the well known
+ axpy-product. Setting \a init to \c true is equivalent to call
+ <tt>M.clear()</tt> before <tt>axpy_prod</tt>. Currently \a init
+ defaults to \c true, but this may change in the future.
+
+ Up to now there are no specialisations.
+
+ \ingroup blas3
+
+ \internal
+
+ template parameters:
+ \param M type of the result matrix \c M
+ \param E1 type of a matrix expression \c A
+ \param E2 type of a matrix expression \c X
+ */
+ template<class M, class E1, class E2>
+ BOOST_UBLAS_INLINE
+ M &
+ axpy_prod (const matrix_expression<E1> &e1,
+ const matrix_expression<E2> &e2,
+ M &m, bool init = true) {
+ typedef typename M::value_type value_type;
+ typedef typename M::storage_category storage_category;
+ typedef typename M::orientation_category orientation_category;
+
+ if (init)
+ m.assign (zero_matrix<value_type> (e1 ().size1 (), e2 ().size2 ()));
+ return axpy_prod (e1, e2, m, full (), storage_category (), orientation_category ());
+ }
+ template<class M, class E1, class E2>
+ BOOST_UBLAS_INLINE
+ M
+ axpy_prod (const matrix_expression<E1> &e1,
+ const matrix_expression<E2> &e2) {
+ typedef M matrix_type;
+
+ matrix_type m (e1 ().size1 (), e2 ().size2 ());
+ return axpy_prod (e1, e2, m, full (), true);
+ }
+
+
+ template<class M, class E1, class E2>
+ BOOST_UBLAS_INLINE
+ M &
+ opb_prod (const matrix_expression<E1> &e1,
+ const matrix_expression<E2> &e2,
+ M &m,
+ dense_proxy_tag, row_major_tag) {
+ typedef M matrix_type;
+ typedef const E1 expression1_type;
+ typedef const E2 expression2_type;
+ typedef typename M::size_type size_type;
+ typedef typename M::value_type value_type;
+
+#if BOOST_UBLAS_TYPE_CHECK
+ matrix<value_type, row_major> cm (m);
+ typedef typename type_traits<value_type>::real_type real_type;
+ real_type merrorbound (norm_1 (m) + norm_1 (e1) * norm_1 (e2));
+ indexing_matrix_assign<scalar_plus_assign> (cm, prod (e1, e2), row_major_tag ());
+#endif
+ size_type size (BOOST_UBLAS_SAME (e1 ().size2 (), e2 ().size1 ()));
+ for (size_type k = 0; k < size; ++ k) {
+ vector<value_type> ce1 (column (e1 (), k));
+ vector<value_type> re2 (row (e2 (), k));
+ m.plus_assign (outer_prod (ce1, re2));
+ }
+#if BOOST_UBLAS_TYPE_CHECK
+ BOOST_UBLAS_CHECK (norm_1 (m - cm) <= 2 * std::numeric_limits<real_type>::epsilon () * merrorbound, internal_logic ());
+#endif
+ return m;
+ }
+
+ template<class M, class E1, class E2>
+ BOOST_UBLAS_INLINE
+ M &
+ opb_prod (const matrix_expression<E1> &e1,
+ const matrix_expression<E2> &e2,
+ M &m,
+ dense_proxy_tag, column_major_tag) {
+ typedef M matrix_type;
+ typedef const E1 expression1_type;
+ typedef const E2 expression2_type;
+ typedef typename M::size_type size_type;
+ typedef typename M::value_type value_type;
+
+#if BOOST_UBLAS_TYPE_CHECK
+ matrix<value_type, column_major> cm (m);
+ typedef typename type_traits<value_type>::real_type real_type;
+ real_type merrorbound (norm_1 (m) + norm_1 (e1) * norm_1 (e2));
+ indexing_matrix_assign<scalar_plus_assign> (cm, prod (e1, e2), column_major_tag ());
+#endif
+ size_type size (BOOST_UBLAS_SAME (e1 ().size2 (), e2 ().size1 ()));
+ for (size_type k = 0; k < size; ++ k) {
+ vector<value_type> ce1 (column (e1 (), k));
+ vector<value_type> re2 (row (e2 (), k));
+ m.plus_assign (outer_prod (ce1, re2));
+ }
+#if BOOST_UBLAS_TYPE_CHECK
+ BOOST_UBLAS_CHECK (norm_1 (m - cm) <= 2 * std::numeric_limits<real_type>::epsilon () * merrorbound, internal_logic ());
+#endif
+ return m;
+ }
+
+ // Dispatcher
+
+ /** \brief computes <tt>M += A X</tt> or <tt>M = A X</tt> in an
+ optimized fashion.
+
+ \param e1 the matrix expression \c A
+ \param e2 the matrix expression \c X
+ \param m the result matrix \c M
+ \param init a boolean parameter
+
+ <tt>opb_prod(A, X, M, init)</tt> implements the well known
+ axpy-product. Setting \a init to \c true is equivalent to call
+ <tt>M.clear()</tt> before <tt>opb_prod</tt>. Currently \a init
+ defaults to \c true, but this may change in the future.
+
+ This function may give a speedup if \c A has less columns than
+ rows, because the product is computed as a sum of outer
+ products.
+
+ \ingroup blas3
+
+ \internal
+
+ template parameters:
+ \param M type of the result matrix \c M
+ \param E1 type of a matrix expression \c A
+ \param E2 type of a matrix expression \c X
+ */
+ template<class M, class E1, class E2>
+ BOOST_UBLAS_INLINE
+ M &
+ opb_prod (const matrix_expression<E1> &e1,
+ const matrix_expression<E2> &e2,
+ M &m, bool init = true) {
+ typedef typename M::value_type value_type;
+ typedef typename M::storage_category storage_category;
+ typedef typename M::orientation_category orientation_category;
+
+ if (init)
+ m.assign (zero_matrix<value_type> (e1 ().size1 (), e2 ().size2 ()));
+ return opb_prod (e1, e2, m, storage_category (), orientation_category ());
+ }
+ template<class M, class E1, class E2>
+ BOOST_UBLAS_INLINE
+ M
+ opb_prod (const matrix_expression<E1> &e1,
+ const matrix_expression<E2> &e2) {
+ typedef M matrix_type;
+
+ matrix_type m (e1 ().size1 (), e2 ().size2 ());
+ return opb_prod (e1, e2, m, true);
+ }
+
+}}}
+
+#endif
diff --git a/boost/boost/numeric/ublas/operation_blocked.hpp b/boost/boost/numeric/ublas/operation_blocked.hpp
new file mode 100644
index 00000000000..d5c5e5a0646
--- /dev/null
+++ b/boost/boost/numeric/ublas/operation_blocked.hpp
@@ -0,0 +1,268 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without fee,
+// provided that the above copyright notice appear in all copies and
+// that both that copyright notice and this permission notice appear
+// in supporting documentation. The authors make no representations
+// about the suitability of this software for any purpose.
+// It is provided "as is" without express or implied warranty.
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#ifndef _BOOST_UBLAS_OPERATION_BLOCKED_
+#define _BOOST_UBLAS_OPERATION_BLOCKED_
+
+#include <boost/numeric/ublas/traits.hpp>
+
+
+namespace boost { namespace numeric { namespace ublas {
+
+ template<class V, typename V::size_type BS, class E1, class E2>
+ BOOST_UBLAS_INLINE
+ V
+ block_prod (const matrix_expression<E1> &e1,
+ const vector_expression<E2> &e2) {
+ typedef V vector_type;
+ typedef const E1 expression1_type;
+ typedef const E2 expression2_type;
+ typedef typename V::size_type size_type;
+ typedef typename V::value_type value_type;
+ const size_type block_size = BS;
+
+ V v (e1 ().size1 ());
+#if BOOST_UBLAS_TYPE_CHECK
+ vector<value_type> cv (v.size ());
+ typedef typename type_traits<value_type>::real_type real_type;
+ real_type verrorbound (norm_1 (v) + norm_1 (e1) * norm_1 (e2));
+ indexing_vector_assign<scalar_assign> (cv, prod (e1, e2));
+#endif
+ size_type i_size = e1 ().size1 ();
+ size_type j_size = BOOST_UBLAS_SAME (e1 ().size2 (), e2 ().size ());
+ for (size_type i_begin = 0; i_begin < i_size; i_begin += block_size) {
+ size_type i_end = i_begin + (std::min) (i_size - i_begin, block_size);
+ // FIX: never ignore Martin Weiser's advice ;-(
+#ifdef BOOST_UBLAS_NO_CACHE
+ vector_range<vector_type> v_range (v, range (i_begin, i_end));
+#else
+ // vector<value_type, bounded_array<value_type, block_size> > v_range (i_end - i_begin);
+ vector<value_type> v_range (i_end - i_begin);
+#endif
+ v_range.assign (zero_vector<value_type> (i_end - i_begin));
+ for (size_type j_begin = 0; j_begin < j_size; j_begin += block_size) {
+ size_type j_end = j_begin + (std::min) (j_size - j_begin, block_size);
+#ifdef BOOST_UBLAS_NO_CACHE
+ const matrix_range<expression1_type> e1_range (e1 (), range (i_begin, i_end), range (j_begin, j_end));
+ const vector_range<expression2_type> e2_range (e2 (), range (j_begin, j_end));
+ v_range.plus_assign (prod (e1_range, e2_range));
+#else
+ // const matrix<value_type, row_major, bounded_array<value_type, block_size * block_size> > e1_range (project (e1 (), range (i_begin, i_end), range (j_begin, j_end)));
+ // const vector<value_type, bounded_array<value_type, block_size> > e2_range (project (e2 (), range (j_begin, j_end)));
+ const matrix<value_type, row_major> e1_range (project (e1 (), range (i_begin, i_end), range (j_begin, j_end)));
+ const vector<value_type> e2_range (project (e2 (), range (j_begin, j_end)));
+ v_range.plus_assign (prod (e1_range, e2_range));
+#endif
+ }
+#ifndef BOOST_UBLAS_NO_CACHE
+ project (v, range (i_begin, i_end)).assign (v_range);
+#endif
+ }
+#if BOOST_UBLAS_TYPE_CHECK
+ BOOST_UBLAS_CHECK (norm_1 (v - cv) <= 2 * std::numeric_limits<real_type>::epsilon () * verrorbound, internal_logic ());
+#endif
+ return v;
+ }
+
+ template<class V, typename V::size_type BS, class E1, class E2>
+ BOOST_UBLAS_INLINE
+ V
+ block_prod (const vector_expression<E1> &e1,
+ const matrix_expression<E2> &e2) {
+ typedef V vector_type;
+ typedef const E1 expression1_type;
+ typedef const E2 expression2_type;
+ typedef typename V::size_type size_type;
+ typedef typename V::value_type value_type;
+ const size_type block_size = BS;
+
+ V v (e2 ().size2 ());
+#if BOOST_UBLAS_TYPE_CHECK
+ vector<value_type> cv (v.size ());
+ typedef typename type_traits<value_type>::real_type real_type;
+ real_type verrorbound (norm_1 (v) + norm_1 (e1) * norm_1 (e2));
+ indexing_vector_assign<scalar_assign> (cv, prod (e1, e2));
+#endif
+ size_type i_size = BOOST_UBLAS_SAME (e1 ().size (), e2 ().size1 ());
+ size_type j_size = e2 ().size2 ();
+ for (size_type j_begin = 0; j_begin < j_size; j_begin += block_size) {
+ size_type j_end = j_begin + (std::min) (j_size - j_begin, block_size);
+ // FIX: never ignore Martin Weiser's advice ;-(
+#ifdef BOOST_UBLAS_NO_CACHE
+ vector_range<vector_type> v_range (v, range (j_begin, j_end));
+#else
+ // vector<value_type, bounded_array<value_type, block_size> > v_range (j_end - j_begin);
+ vector<value_type> v_range (j_end - j_begin);
+#endif
+ v_range.assign (zero_vector<value_type> (j_end - j_begin));
+ for (size_type i_begin = 0; i_begin < i_size; i_begin += block_size) {
+ size_type i_end = i_begin + (std::min) (i_size - i_begin, block_size);
+#ifdef BOOST_UBLAS_NO_CACHE
+ const vector_range<expression1_type> e1_range (e1 (), range (i_begin, i_end));
+ const matrix_range<expression2_type> e2_range (e2 (), range (i_begin, i_end), range (j_begin, j_end));
+#else
+ // const vector<value_type, bounded_array<value_type, block_size> > e1_range (project (e1 (), range (i_begin, i_end)));
+ // const matrix<value_type, column_major, bounded_array<value_type, block_size * block_size> > e2_range (project (e2 (), range (i_begin, i_end), range (j_begin, j_end)));
+ const vector<value_type> e1_range (project (e1 (), range (i_begin, i_end)));
+ const matrix<value_type, column_major> e2_range (project (e2 (), range (i_begin, i_end), range (j_begin, j_end)));
+#endif
+ v_range.plus_assign (prod (e1_range, e2_range));
+ }
+#ifndef BOOST_UBLAS_NO_CACHE
+ project (v, range (j_begin, j_end)).assign (v_range);
+#endif
+ }
+#if BOOST_UBLAS_TYPE_CHECK
+ BOOST_UBLAS_CHECK (norm_1 (v - cv) <= 2 * std::numeric_limits<real_type>::epsilon () * verrorbound, internal_logic ());
+#endif
+ return v;
+ }
+
+ template<class M, typename M::size_type BS, class E1, class E2>
+ BOOST_UBLAS_INLINE
+ M
+ block_prod (const matrix_expression<E1> &e1,
+ const matrix_expression<E2> &e2,
+ row_major_tag) {
+ typedef M matrix_type;
+ typedef const E1 expression1_type;
+ typedef const E2 expression2_type;
+ typedef typename M::size_type size_type;
+ typedef typename M::value_type value_type;
+ const size_type block_size = BS;
+
+ M m (e1 ().size1 (), e2 ().size2 ());
+#if BOOST_UBLAS_TYPE_CHECK
+ matrix<value_type, row_major> cm (m.size1 (), m.size2 ());
+ typedef typename type_traits<value_type>::real_type real_type;
+ real_type merrorbound (norm_1 (m) + norm_1 (e1) * norm_1 (e2));
+ indexing_matrix_assign<scalar_assign> (cm, prod (e1, e2), row_major_tag ());
+ disable_type_check<bool>::value = true;
+#endif
+ size_type i_size = e1 ().size1 ();
+ size_type j_size = e2 ().size2 ();
+ size_type k_size = BOOST_UBLAS_SAME (e1 ().size2 (), e2 ().size1 ());
+ for (size_type i_begin = 0; i_begin < i_size; i_begin += block_size) {
+ size_type i_end = i_begin + (std::min) (i_size - i_begin, block_size);
+ for (size_type j_begin = 0; j_begin < j_size; j_begin += block_size) {
+ size_type j_end = j_begin + (std::min) (j_size - j_begin, block_size);
+ // FIX: never ignore Martin Weiser's advice ;-(
+#ifdef BOOST_UBLAS_NO_CACHE
+ matrix_range<matrix_type> m_range (m, range (i_begin, i_end), range (j_begin, j_end));
+#else
+ // matrix<value_type, row_major, bounded_array<value_type, block_size * block_size> > m_range (i_end - i_begin, j_end - j_begin);
+ matrix<value_type, row_major> m_range (i_end - i_begin, j_end - j_begin);
+#endif
+ m_range.assign (zero_matrix<value_type> (i_end - i_begin, j_end - j_begin));
+ for (size_type k_begin = 0; k_begin < k_size; k_begin += block_size) {
+ size_type k_end = k_begin + (std::min) (k_size - k_begin, block_size);
+#ifdef BOOST_UBLAS_NO_CACHE
+ const matrix_range<expression1_type> e1_range (e1 (), range (i_begin, i_end), range (k_begin, k_end));
+ const matrix_range<expression2_type> e2_range (e2 (), range (k_begin, k_end), range (j_begin, j_end));
+#else
+ // const matrix<value_type, row_major, bounded_array<value_type, block_size * block_size> > e1_range (project (e1 (), range (i_begin, i_end), range (k_begin, k_end)));
+ // const matrix<value_type, column_major, bounded_array<value_type, block_size * block_size> > e2_range (project (e2 (), range (k_begin, k_end), range (j_begin, j_end)));
+ const matrix<value_type, row_major> e1_range (project (e1 (), range (i_begin, i_end), range (k_begin, k_end)));
+ const matrix<value_type, column_major> e2_range (project (e2 (), range (k_begin, k_end), range (j_begin, j_end)));
+#endif
+ m_range.plus_assign (prod (e1_range, e2_range));
+ }
+#ifndef BOOST_UBLAS_NO_CACHE
+ project (m, range (i_begin, i_end), range (j_begin, j_end)).assign (m_range);
+#endif
+ }
+ }
+#if BOOST_UBLAS_TYPE_CHECK
+ disable_type_check<bool>::value = false;
+ BOOST_UBLAS_CHECK (norm_1 (m - cm) <= 2 * std::numeric_limits<real_type>::epsilon () * merrorbound, internal_logic ());
+#endif
+ return m;
+ }
+
+ template<class M, typename M::size_type BS, class E1, class E2>
+ BOOST_UBLAS_INLINE
+ M
+ block_prod (const matrix_expression<E1> &e1,
+ const matrix_expression<E2> &e2,
+ column_major_tag) {
+ typedef M matrix_type;
+ typedef const E1 expression1_type;
+ typedef const E2 expression2_type;
+ typedef typename M::size_type size_type;
+ typedef typename M::value_type value_type;
+ const size_type block_size = BS;
+
+ M m (e1 ().size1 (), e2 ().size2 ());
+#if BOOST_UBLAS_TYPE_CHECK
+ matrix<value_type, column_major> cm (m.size1 (), m.size2 ());
+ typedef typename type_traits<value_type>::real_type real_type;
+ real_type merrorbound (norm_1 (m) + norm_1 (e1) * norm_1 (e2));
+ indexing_matrix_assign<scalar_assign> (cm, prod (e1, e2), column_major_tag ());
+ disable_type_check<bool>::value = true;
+#endif
+ size_type i_size = e1 ().size1 ();
+ size_type j_size = e2 ().size2 ();
+ size_type k_size = BOOST_UBLAS_SAME (e1 ().size2 (), e2 ().size1 ());
+ for (size_type j_begin = 0; j_begin < j_size; j_begin += block_size) {
+ size_type j_end = j_begin + (std::min) (j_size - j_begin, block_size);
+ for (size_type i_begin = 0; i_begin < i_size; i_begin += block_size) {
+ size_type i_end = i_begin + (std::min) (i_size - i_begin, block_size);
+ // FIX: never ignore Martin Weiser's advice ;-(
+#ifdef BOOST_UBLAS_NO_CACHE
+ matrix_range<matrix_type> m_range (m, range (i_begin, i_end), range (j_begin, j_end));
+#else
+ // matrix<value_type, column_major, bounded_array<value_type, block_size * block_size> > m_range (i_end - i_begin, j_end - j_begin);
+ matrix<value_type, column_major> m_range (i_end - i_begin, j_end - j_begin);
+#endif
+ m_range.assign (zero_matrix<value_type> (i_end - i_begin, j_end - j_begin));
+ for (size_type k_begin = 0; k_begin < k_size; k_begin += block_size) {
+ size_type k_end = k_begin + (std::min) (k_size - k_begin, block_size);
+#ifdef BOOST_UBLAS_NO_CACHE
+ const matrix_range<expression1_type> e1_range (e1 (), range (i_begin, i_end), range (k_begin, k_end));
+ const matrix_range<expression2_type> e2_range (e2 (), range (k_begin, k_end), range (j_begin, j_end));
+#else
+ // const matrix<value_type, row_major, bounded_array<value_type, block_size * block_size> > e1_range (project (e1 (), range (i_begin, i_end), range (k_begin, k_end)));
+ // const matrix<value_type, column_major, bounded_array<value_type, block_size * block_size> > e2_range (project (e2 (), range (k_begin, k_end), range (j_begin, j_end)));
+ const matrix<value_type, row_major> e1_range (project (e1 (), range (i_begin, i_end), range (k_begin, k_end)));
+ const matrix<value_type, column_major> e2_range (project (e2 (), range (k_begin, k_end), range (j_begin, j_end)));
+#endif
+ m_range.plus_assign (prod (e1_range, e2_range));
+ }
+#ifndef BOOST_UBLAS_NO_CACHE
+ project (m, range (i_begin, i_end), range (j_begin, j_end)).assign (m_range);
+#endif
+ }
+ }
+#if BOOST_UBLAS_TYPE_CHECK
+ disable_type_check<bool>::value = false;
+ BOOST_UBLAS_CHECK (norm_1 (m - cm) <= 2 * std::numeric_limits<real_type>::epsilon () * merrorbound, internal_logic ());
+#endif
+ return m;
+ }
+
+ // Dispatcher
+ template<class M, typename M::size_type BS, class E1, class E2>
+ BOOST_UBLAS_INLINE
+ M
+ block_prod (const matrix_expression<E1> &e1,
+ const matrix_expression<E2> &e2) {
+ typedef typename M::orientation_category orientation_category;
+ return block_prod<M, BS> (e1, e2, orientation_category ());
+ }
+
+}}}
+
+#endif
diff --git a/boost/boost/numeric/ublas/operation_sparse.hpp b/boost/boost/numeric/ublas/operation_sparse.hpp
new file mode 100644
index 00000000000..8210a21f8c0
--- /dev/null
+++ b/boost/boost/numeric/ublas/operation_sparse.hpp
@@ -0,0 +1,220 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without fee,
+// provided that the above copyright notice appear in all copies and
+// that both that copyright notice and this permission notice appear
+// in supporting documentation. The authors make no representations
+// about the suitability of this software for any purpose.
+// It is provided "as is" without express or implied warranty.
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#ifndef _BOOST_UBLAS_OPERATION_SPARSE_
+#define _BOOST_UBLAS_OPERATION_SPARSE_
+
+#include <boost/numeric/ublas/traits.hpp>
+
+// These scaled additions were borrowed from MTL unashamedly.
+// But Alexei Novakov had a lot of ideas to improve these. Thanks.
+
+namespace boost { namespace numeric { namespace ublas {
+
+ template<class M, class E1, class E2, class TRI>
+ BOOST_UBLAS_INLINE
+ M &
+ sparse_prod (const matrix_expression<E1> &e1,
+ const matrix_expression<E2> &e2,
+ M &m, TRI,
+ row_major_tag) {
+ typedef M matrix_type;
+ typedef TRI triangular_restriction;
+ typedef const E1 expression1_type;
+ typedef const E2 expression2_type;
+ typedef typename M::size_type size_type;
+ typedef typename M::value_type value_type;
+
+ // ISSUE why is there a dense vector here?
+ vector<value_type> temporary (e2 ().size2 ());
+ temporary.clear ();
+#if BOOST_UBLAS_TYPE_CHECK
+ matrix<value_type, row_major> cm (m.size1 (), m.size2 ());
+ typedef typename type_traits<value_type>::real_type real_type;
+ real_type merrorbound (norm_1 (m) + norm_1 (e1) * norm_1 (e2));
+ indexing_matrix_assign<scalar_assign> (cm, prod (e1, e2), row_major_tag ());
+#endif
+ typename expression1_type::const_iterator1 it1 (e1 ().begin1 ());
+ typename expression1_type::const_iterator1 it1_end (e1 ().end1 ());
+ while (it1 != it1_end) {
+ size_type jb (temporary.size ());
+ size_type je (0);
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ typename expression1_type::const_iterator2 it2 (it1.begin ());
+ typename expression1_type::const_iterator2 it2_end (it1.end ());
+#else
+ typename expression1_type::const_iterator2 it2 (boost::numeric::ublas::begin (it1, iterator1_tag ()));
+ typename expression1_type::const_iterator2 it2_end (boost::numeric::ublas::end (it1, iterator1_tag ()));
+#endif
+ while (it2 != it2_end) {
+ // temporary.plus_assign (*it2 * row (e2 (), it2.index2 ()));
+ matrix_row<expression2_type> mr (e2 (), it2.index2 ());
+ typename matrix_row<expression2_type>::const_iterator itr (mr.begin ());
+ typename matrix_row<expression2_type>::const_iterator itr_end (mr.end ());
+ while (itr != itr_end) {
+ size_type j (itr.index ());
+ temporary (j) += *it2 * *itr;
+ jb = (std::min) (jb, j);
+ je = (std::max) (je, j);
+ ++ itr;
+ }
+ ++ it2;
+ }
+ for (size_type j = jb; j < je + 1; ++ j) {
+ if (temporary (j) != value_type/*zero*/()) {
+ // FIXME we'll need to extend the container interface!
+ // m.push_back (it1.index1 (), j, temporary (j));
+ // FIXME What to do with adaptors?
+ // m.insert (it1.index1 (), j, temporary (j));
+ if (triangular_restriction::other (it1.index1 (), j))
+ m (it1.index1 (), j) = temporary (j);
+ temporary (j) = value_type/*zero*/();
+ }
+ }
+ ++ it1;
+ }
+#if BOOST_UBLAS_TYPE_CHECK
+ BOOST_UBLAS_CHECK (norm_1 (m - cm) <= 2 * std::numeric_limits<real_type>::epsilon () * merrorbound, internal_logic ());
+#endif
+ return m;
+ }
+
+ template<class M, class E1, class E2, class TRI>
+ BOOST_UBLAS_INLINE
+ M &
+ sparse_prod (const matrix_expression<E1> &e1,
+ const matrix_expression<E2> &e2,
+ M &m, TRI,
+ column_major_tag) {
+ typedef M matrix_type;
+ typedef TRI triangular_restriction;
+ typedef const E1 expression1_type;
+ typedef const E2 expression2_type;
+ typedef typename M::size_type size_type;
+ typedef typename M::value_type value_type;
+
+ // ISSUE why is there a dense vector here?
+ vector<value_type> temporary (e1 ().size1 ());
+ temporary.clear ();
+#if BOOST_UBLAS_TYPE_CHECK
+ matrix<value_type, column_major> cm (m.size1 (), m.size2 ());
+ typedef typename type_traits<value_type>::real_type real_type;
+ real_type merrorbound (norm_1 (m) + norm_1 (e1) * norm_1 (e2));
+ indexing_matrix_assign<scalar_assign> (cm, prod (e1, e2), column_major_tag ());
+#endif
+ typename expression2_type::const_iterator2 it2 (e2 ().begin2 ());
+ typename expression2_type::const_iterator2 it2_end (e2 ().end2 ());
+ while (it2 != it2_end) {
+ size_type ib (temporary.size ());
+ size_type ie (0);
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ typename expression2_type::const_iterator1 it1 (it2.begin ());
+ typename expression2_type::const_iterator1 it1_end (it2.end ());
+#else
+ typename expression2_type::const_iterator1 it1 (boost::numeric::ublas::begin (it2, iterator2_tag ()));
+ typename expression2_type::const_iterator1 it1_end (boost::numeric::ublas::end (it2, iterator2_tag ()));
+#endif
+ while (it1 != it1_end) {
+ // column (m, it2.index2 ()).plus_assign (*it1 * column (e1 (), it1.index1 ()));
+ matrix_column<expression1_type> mc (e1 (), it1.index1 ());
+ typename matrix_column<expression1_type>::const_iterator itc (mc.begin ());
+ typename matrix_column<expression1_type>::const_iterator itc_end (mc.end ());
+ while (itc != itc_end) {
+ size_type i (itc.index ());
+ temporary (i) += *it1 * *itc;
+ ib = (std::min) (ib, i);
+ ie = (std::max) (ie, i);
+ ++ itc;
+ }
+ ++ it1;
+ }
+ for (size_type i = ib; i < ie + 1; ++ i) {
+ if (temporary (i) != value_type/*zero*/()) {
+ // FIXME we'll need to extend the container interface!
+ // m.push_back (i, it2.index2 (), temporary (i));
+ // FIXME What to do with adaptors?
+ // m.insert (i, it2.index2 (), temporary (i));
+ if (triangular_restriction::other (i, it2.index2 ()))
+ m (i, it2.index2 ()) = temporary (i);
+ temporary (i) = value_type/*zero*/();
+ }
+ }
+ ++ it2;
+ }
+#if BOOST_UBLAS_TYPE_CHECK
+ BOOST_UBLAS_CHECK (norm_1 (m - cm) <= 2 * std::numeric_limits<real_type>::epsilon () * merrorbound, internal_logic ());
+#endif
+ return m;
+ }
+
+ // Dispatcher
+ template<class M, class E1, class E2, class TRI>
+ BOOST_UBLAS_INLINE
+ M &
+ sparse_prod (const matrix_expression<E1> &e1,
+ const matrix_expression<E2> &e2,
+ M &m, TRI, bool init = true) {
+ typedef typename M::value_type value_type;
+ typedef TRI triangular_restriction;
+ typedef typename M::orientation_category orientation_category;
+
+ if (init)
+ m.assign (zero_matrix<value_type> (e1 ().size1 (), e2 ().size2 ()));
+ return sparse_prod (e1, e2, m, triangular_restriction (), orientation_category ());
+ }
+ template<class M, class E1, class E2, class TRI>
+ BOOST_UBLAS_INLINE
+ M
+ sparse_prod (const matrix_expression<E1> &e1,
+ const matrix_expression<E2> &e2,
+ TRI) {
+ typedef M matrix_type;
+ typedef TRI triangular_restriction;
+
+ matrix_type m (e1 ().size1 (), e2 ().size2 ());
+ // FIXME needed for c_matrix?!
+ // return sparse_prod (e1, e2, m, triangular_restriction (), false);
+ return sparse_prod (e1, e2, m, triangular_restriction (), true);
+ }
+ template<class M, class E1, class E2>
+ BOOST_UBLAS_INLINE
+ M &
+ sparse_prod (const matrix_expression<E1> &e1,
+ const matrix_expression<E2> &e2,
+ M &m, bool init = true) {
+ typedef typename M::value_type value_type;
+ typedef typename M::orientation_category orientation_category;
+
+ if (init)
+ m.assign (zero_matrix<value_type> (e1 ().size1 (), e2 ().size2 ()));
+ return sparse_prod (e1, e2, m, full (), orientation_category ());
+ }
+ template<class M, class E1, class E2>
+ BOOST_UBLAS_INLINE
+ M
+ sparse_prod (const matrix_expression<E1> &e1,
+ const matrix_expression<E2> &e2) {
+ typedef M matrix_type;
+
+ matrix_type m (e1 ().size1 (), e2 ().size2 ());
+ // FIXME needed for c_matrix?!
+ // return sparse_prod (e1, e2, m, full (), false);
+ return sparse_prod (e1, e2, m, full (), true);
+ }
+
+}}}
+
+#endif
diff --git a/boost/boost/numeric/ublas/storage.hpp b/boost/boost/numeric/ublas/storage.hpp
new file mode 100644
index 00000000000..54bf2274248
--- /dev/null
+++ b/boost/boost/numeric/ublas/storage.hpp
@@ -0,0 +1,1860 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without fee,
+// provided that the above copyright notice appear in all copies and
+// that both that copyright notice and this permission notice appear
+// in supporting documentation. The authors make no representations
+// about the suitability of this software for any purpose.
+// It is provided "as is" without express or implied warranty.
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#ifndef BOOST_UBLAS_STORAGE_H
+#define BOOST_UBLAS_STORAGE_H
+
+#include <algorithm>
+#ifdef BOOST_UBLAS_SHALLOW_ARRAY_ADAPTOR
+#include <boost/shared_array.hpp>
+#endif
+
+#include <boost/numeric/ublas/exception.hpp>
+#include <boost/numeric/ublas/detail/iterator.hpp>
+
+
+namespace boost { namespace numeric { namespace ublas {
+
+
+ // Base class for Storage Arrays - see the Barton Nackman trick
+ template<class E>
+ class storage_array:
+ private nonassignable {
+ };
+
+
+ // Unbounded array - with allocator
+ template<class T, class ALLOC>
+ class unbounded_array:
+ public storage_array<unbounded_array<T, ALLOC> > {
+
+ typedef unbounded_array<T, ALLOC> self_type;
+ public:
+ typedef ALLOC allocator_type;
+ typedef typename ALLOC::size_type size_type;
+ typedef typename ALLOC::difference_type difference_type;
+ typedef T value_type;
+ typedef const T &const_reference;
+ typedef T &reference;
+ typedef const T *const_pointer;
+ typedef T *pointer;
+ typedef const_pointer const_iterator;
+ typedef pointer iterator;
+
+ // Construction and destruction
+ explicit BOOST_UBLAS_INLINE
+ unbounded_array (const ALLOC &a = ALLOC()):
+ alloc_ (a), size_ (0) {
+ data_ = 0;
+ }
+ explicit BOOST_UBLAS_INLINE
+ unbounded_array (size_type size, const ALLOC &a = ALLOC()):
+ alloc_(a), size_ (size) {
+ if (size_) {
+ data_ = alloc_.allocate (size_);
+ // ISSUE some compilers may zero POD here
+#ifdef BOOST_UBLAS_USEFUL_ARRAY_PLACEMENT_NEW
+ // array form fails on some compilers due to size cookie, is it standard conforming?
+ new (data_) value_type[size_];
+#else
+ for (pointer d = data_; d != data_ + size_; ++d)
+ new (d) value_type;
+#endif
+ }
+ else
+ data_ = 0;
+ }
+ // No value initialised, but still be default constructed
+ BOOST_UBLAS_INLINE
+ unbounded_array (size_type size, const value_type &init, const ALLOC &a = ALLOC()):
+ alloc_ (a), size_ (size) {
+ if (size_) {
+ data_ = alloc_.allocate (size_);
+ std::uninitialized_fill (begin(), end(), init);
+ }
+ else
+ data_ = 0;
+ }
+ BOOST_UBLAS_INLINE
+ unbounded_array (const unbounded_array &c):
+ alloc_ (c.alloc_), size_ (c.size_) {
+ if (size_) {
+ data_ = alloc_.allocate (size_);
+ std::uninitialized_copy (c.begin(), c.end(), begin());
+ }
+ else
+ data_ = 0;
+ }
+ BOOST_UBLAS_INLINE
+ ~unbounded_array () {
+ if (size_) {
+ const iterator i_end = end();
+ for (iterator i = begin (); i != i_end; ++i) {
+ iterator_destroy (i);
+ }
+ alloc_.deallocate (data_, size_);
+ }
+ }
+
+ // Resizing
+ private:
+ BOOST_UBLAS_INLINE
+ void resize_internal (const size_type size, const value_type init, const bool preserve) {
+ if (size != size_) {
+ pointer p_data = data_;
+ if (size) {
+ data_ = alloc_.allocate (size);
+ if (preserve) {
+ pointer si = p_data;
+ pointer di = data_;
+ if (size < size_) {
+ for (; di != data_ + size; ++di) {
+ alloc_.construct (di, *si);
+ ++si;
+ }
+ }
+ else {
+ for (pointer si = p_data; si != p_data + size_; ++si) {
+ alloc_.construct (di, *si);
+ ++di;
+ }
+ for (; di != data_ + size; ++di) {
+ alloc_.construct (di, init);
+ }
+ }
+ }
+ else {
+ // ISSUE some compilers may zero POD here
+#ifdef BOOST_UBLAS_USEFUL_ARRAY_PLACEMENT_NEW
+ // array form fails on some compilers due to size cookie, is it standard conforming?
+ new (data_) value_type[size];
+#else
+ for (pointer di = data_; di != data_ + size; ++di)
+ new (di) value_type;
+#endif
+ }
+ }
+
+ if (size_) {
+ for (pointer si = p_data; si != p_data + size_; ++si)
+ alloc_.destroy (si);
+ alloc_.deallocate (p_data, size_);
+ }
+
+ if (!size)
+ data_ = 0;
+ size_ = size;
+ }
+ }
+ public:
+ BOOST_UBLAS_INLINE
+ void resize (size_type size) {
+ resize_internal (size, value_type (), false);
+ }
+ BOOST_UBLAS_INLINE
+ void resize (size_type size, value_type init) {
+ resize_internal (size, init, true);
+ }
+
+ // Random Access Container
+ BOOST_UBLAS_INLINE
+ size_type max_size () const {
+ return ALLOC ().max_size();
+ }
+
+ BOOST_UBLAS_INLINE
+ bool empty () const {
+ return size_ == 0;
+ }
+
+ BOOST_UBLAS_INLINE
+ size_type size () const {
+ return size_;
+ }
+
+ // Element access
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (size_type i) const {
+ BOOST_UBLAS_CHECK (i < size_, bad_index ());
+ return data_ [i];
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (size_type i) {
+ BOOST_UBLAS_CHECK (i < size_, bad_index ());
+ return data_ [i];
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ unbounded_array &operator = (const unbounded_array &a) {
+ if (this != &a) {
+ resize (a.size_);
+ std::copy (a.data_, a.data_ + a.size_, data_);
+ }
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ unbounded_array &assign_temporary (unbounded_array &a) {
+ swap (a);
+ return *this;
+ }
+
+ // Swapping
+ BOOST_UBLAS_INLINE
+ void swap (unbounded_array &a) {
+ if (this != &a) {
+ std::swap (size_, a.size_);
+ std::swap (data_, a.data_);
+ }
+ }
+ BOOST_UBLAS_INLINE
+ friend void swap (unbounded_array &a1, unbounded_array &a2) {
+ a1.swap (a2);
+ }
+
+ BOOST_UBLAS_INLINE
+ const_iterator begin () const {
+ return data_;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator end () const {
+ return data_ + size_;
+ }
+
+ BOOST_UBLAS_INLINE
+ iterator begin () {
+ return data_;
+ }
+ BOOST_UBLAS_INLINE
+ iterator end () {
+ return data_ + size_;
+ }
+
+ // Reverse iterators
+ typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
+ typedef std::reverse_iterator<iterator> reverse_iterator;
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rbegin () const {
+ return const_reverse_iterator (end ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rend () const {
+ return const_reverse_iterator (begin ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator rbegin () {
+ return reverse_iterator (end ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator rend () {
+ return reverse_iterator (begin ());
+ }
+
+ // Allocator
+ allocator_type get_allocator () {
+ return alloc_;
+ }
+
+ private:
+ // Handle explict destroy on a (possibly indexed) iterator
+ BOOST_UBLAS_INLINE
+ static void iterator_destroy (iterator &i) {
+ (&(*i)) -> ~value_type ();
+ }
+ ALLOC alloc_;
+ size_type size_;
+ pointer data_;
+ };
+
+ // Bounded array - with allocator for size_type and difference_type
+ template<class T, std::size_t N, class ALLOC>
+ class bounded_array:
+ public storage_array<bounded_array<T, N, ALLOC> > {
+
+ typedef bounded_array<T, N, ALLOC> self_type;
+ public:
+ // No allocator_type as ALLOC is not used for allocation
+ typedef typename ALLOC::size_type size_type;
+ typedef typename ALLOC::difference_type difference_type;
+ typedef T value_type;
+ typedef const T &const_reference;
+ typedef T &reference;
+ typedef const T *const_pointer;
+ typedef T *pointer;
+ typedef const_pointer const_iterator;
+ typedef pointer iterator;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ bounded_array ():
+ size_ (0) /*, data_ ()*/ { // size 0 - use bounded_vector to default construct with size N
+ }
+ explicit BOOST_UBLAS_INLINE
+ bounded_array (size_type size):
+ size_ (size) /*, data_ ()*/ {
+ BOOST_UBLAS_CHECK (size_ <= N, bad_size ());
+ // data_ (an array) elements are already default constructed
+ }
+ BOOST_UBLAS_INLINE
+ bounded_array (size_type size, const value_type &init):
+ size_ (size) /*, data_ ()*/ {
+ BOOST_UBLAS_CHECK (size_ <= N, bad_size ());
+ // ISSUE elements should be value constructed here, but we must fill instead as already default constructed
+ std::fill (begin(), end(), init) ;
+ }
+ BOOST_UBLAS_INLINE
+ bounded_array (const bounded_array &c):
+ size_ (c.size_) {
+ // ISSUE elements should be copy constructed here, but we must copy instead as already default constructed
+ std::copy (c.data_, c.data_ + c.size_, data_);
+ }
+
+ // Resizing
+ BOOST_UBLAS_INLINE
+ void resize (size_type size) {
+ BOOST_UBLAS_CHECK (size_ <= N, bad_size ());
+ size_ = size;
+ }
+ BOOST_UBLAS_INLINE
+ void resize (size_type size, value_type init) {
+ BOOST_UBLAS_CHECK (size_ <= N, bad_size ());
+ if (size > size_)
+ std::fill (data_ + size_, data_ + size, init);
+ size_ = size;
+ }
+
+ // Random Access Container
+ BOOST_UBLAS_INLINE
+ size_type max_size () const {
+ return ALLOC ().max_size();
+ }
+
+ BOOST_UBLAS_INLINE
+ bool empty () const {
+ return size_ == 0;
+ }
+
+ BOOST_UBLAS_INLINE
+ size_type size () const {
+ return size_;
+ }
+
+ // Element access
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (size_type i) const {
+ BOOST_UBLAS_CHECK (i < size_, bad_index ());
+ return data_ [i];
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (size_type i) {
+ BOOST_UBLAS_CHECK (i < size_, bad_index ());
+ return data_ [i];
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ bounded_array &operator = (const bounded_array &a) {
+ if (this != &a) {
+ resize (a.size_);
+ std::copy (a.data_, a.data_ + a.size_, data_);
+ }
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ bounded_array &assign_temporary (bounded_array &a) {
+ *this = a;
+ return *this;
+ }
+
+ // Swapping
+ BOOST_UBLAS_INLINE
+ void swap (bounded_array &a) {
+ if (this != &a) {
+ std::swap (size_, a.size_);
+ std::swap_ranges (data_, data_ + (std::max) (size_, a.size_), a.data_);
+ }
+ }
+ BOOST_UBLAS_INLINE
+ friend void swap (bounded_array &a1, bounded_array &a2) {
+ a1.swap (a2);
+ }
+
+ BOOST_UBLAS_INLINE
+ const_iterator begin () const {
+ return data_;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator end () const {
+ return data_ + size_;
+ }
+
+ BOOST_UBLAS_INLINE
+ iterator begin () {
+ return data_;
+ }
+ BOOST_UBLAS_INLINE
+ iterator end () {
+ return data_ + size_;
+ }
+
+ // Reverse iterators
+ typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
+ typedef std::reverse_iterator<iterator> reverse_iterator;
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rbegin () const {
+ return const_reverse_iterator (end ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rend () const {
+ return const_reverse_iterator (begin ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator rbegin () {
+ return reverse_iterator (end ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator rend () {
+ return reverse_iterator (begin ());
+ }
+
+ private:
+ size_type size_;
+ BOOST_UBLAS_BOUNDED_ARRAY_ALIGN value_type data_ [N];
+ };
+
+
+ // Array adaptor with normal deep copy semantics of elements
+ template<class T>
+ class array_adaptor:
+ public storage_array<array_adaptor<T> > {
+
+ typedef array_adaptor<T> self_type;
+ public:
+ typedef std::size_t size_type;
+ typedef std::ptrdiff_t difference_type;
+ typedef T value_type;
+ typedef const T &const_reference;
+ typedef T &reference;
+ typedef const T *const_pointer;
+ typedef T *pointer;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ array_adaptor ():
+ size_ (0), own_ (true), data_ (new value_type [0]) {
+ }
+ explicit BOOST_UBLAS_INLINE
+ array_adaptor (size_type size):
+ size_ (size), own_ (true), data_ (new value_type [size]) {
+ }
+ BOOST_UBLAS_INLINE
+ array_adaptor (size_type size, const value_type &init):
+ size_ (size), own_ (true), data_ (new value_type [size]) {
+ std::fill (data_, data_ + size_, init);
+ }
+ BOOST_UBLAS_INLINE
+ array_adaptor (size_type size, pointer data):
+ size_ (size), own_ (false), data_ (data) {}
+ BOOST_UBLAS_INLINE
+ array_adaptor (const array_adaptor &a):
+ storage_array<self_type> (),
+ size_ (a.size_), own_ (true), data_ (new value_type [a.size_]) {
+ *this = a;
+ }
+ BOOST_UBLAS_INLINE
+ ~array_adaptor () {
+ if (own_) {
+ delete [] data_;
+ }
+ }
+
+ // Resizing
+ private:
+ BOOST_UBLAS_INLINE
+ void resize_internal (size_type size, value_type init, bool preserve = true) {
+ if (size != size_) {
+ pointer data = new value_type [size];
+ if (preserve) {
+ std::copy (data_, data_ + (std::min) (size, size_), data);
+ std::fill (data + (std::min) (size, size_), data + size, init);
+ }
+ if (own_)
+ delete [] data_;
+ size_ = size;
+ own_ = true;
+ data_ = data;
+ }
+ }
+ BOOST_UBLAS_INLINE
+ void resize_internal (size_type size, pointer data, value_type init, bool preserve = true) {
+ if (data != data_) {
+ if (preserve) {
+ std::copy (data_, data_ + (std::min) (size, size_), data);
+ std::fill (data + (std::min) (size, size_), data + size, init);
+ }
+ if (own_)
+ delete [] data_;
+ own_ = false;
+ data_ = data;
+ }
+ else {
+ std::fill (data + (std::min) (size, size_), data + size, init);
+ }
+ size_ = size;
+ }
+ public:
+ BOOST_UBLAS_INLINE
+ void resize (size_type size) {
+ resize_internal (size, value_type (), false);
+ }
+ BOOST_UBLAS_INLINE
+ void resize (size_type size, value_type init) {
+ resize_internal (size, init, true);
+ }
+ BOOST_UBLAS_INLINE
+ void resize (size_type size, pointer data) {
+ resize_internal (size, data, value_type (), false);
+ }
+ BOOST_UBLAS_INLINE
+ void resize (size_type size, pointer data, value_type init) {
+ resize_internal (size, data, init, true);
+ }
+
+ BOOST_UBLAS_INLINE
+ size_type size () const {
+ return size_;
+ }
+
+ // Element access
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (size_type i) const {
+ BOOST_UBLAS_CHECK (i < size_, bad_index ());
+ return data_ [i];
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (size_type i) {
+ BOOST_UBLAS_CHECK (i < size_, bad_index ());
+ return data_ [i];
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ array_adaptor &operator = (const array_adaptor &a) {
+ if (this != &a) {
+ resize (a.size_);
+ std::copy (a.data_, a.data_ + a.size_, data_);
+ }
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ array_adaptor &assign_temporary (array_adaptor &a) {
+ if (own_ && a.own_)
+ swap (a);
+ else
+ *this = a;
+ return *this;
+ }
+
+ // Swapping
+ BOOST_UBLAS_INLINE
+ void swap (array_adaptor &a) {
+ if (this != &a) {
+ std::swap (size_, a.size_);
+ std::swap (own_, a.own_);
+ std::swap (data_, a.data_);
+ }
+ }
+ BOOST_UBLAS_INLINE
+ friend void swap (array_adaptor &a1, array_adaptor &a2) {
+ a1.swap (a2);
+ }
+
+ // Iterators simply are pointers.
+
+ typedef const_pointer const_iterator;
+
+ BOOST_UBLAS_INLINE
+ const_iterator begin () const {
+ return data_;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator end () const {
+ return data_ + size_;
+ }
+
+ typedef pointer iterator;
+
+ BOOST_UBLAS_INLINE
+ iterator begin () {
+ return data_;
+ }
+ BOOST_UBLAS_INLINE
+ iterator end () {
+ return data_ + size_;
+ }
+
+ // Reverse iterators
+ typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
+ typedef std::reverse_iterator<iterator> reverse_iterator;
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rbegin () const {
+ return const_reverse_iterator (end ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rend () const {
+ return const_reverse_iterator (begin ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator rbegin () {
+ return reverse_iterator (end ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator rend () {
+ return reverse_iterator (begin ());
+ }
+
+ private:
+ size_type size_;
+ bool own_;
+ pointer data_;
+ };
+
+#ifdef BOOST_UBLAS_SHALLOW_ARRAY_ADAPTOR
+ // Array adaptor with shallow (reference) copy semantics of elements.
+ // shared_array is used to maintain reference counts.
+ // This class breaks the normal copy semantics for a storage container and is very dangerous!
+ template<class T>
+ class shallow_array_adaptor:
+ public storage_array<shallow_array_adaptor<T> > {
+
+ typedef shallow_array_adaptor<T> self_type;
+
+ template<class TT>
+ struct leaker {
+ typedef void result_type;
+ typedef TT *argument_type;
+
+ BOOST_UBLAS_INLINE
+ result_type operator () (argument_type x) {}
+ };
+
+ public:
+ typedef std::size_t size_type;
+ typedef std::ptrdiff_t difference_type;
+ typedef T value_type;
+ typedef const T &const_reference;
+ typedef T &reference;
+ typedef const T *const_pointer;
+ typedef T *pointer;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ shallow_array_adaptor ():
+ size_ (0), own_ (true), data_ (new value_type [0]) {
+ }
+ explicit BOOST_UBLAS_INLINE
+ shallow_array_adaptor (size_type size):
+ size_ (size), own_ (true), data_ (new value_type [size]) {
+ }
+ BOOST_UBLAS_INLINE
+ shallow_array_adaptor (size_type size, const value_type &init):
+ size_ (size), own_ (true), data_ (new value_type [size]) {
+ std::fill (data_.get (), data_.get () + size_, init);
+ }
+ BOOST_UBLAS_INLINE
+ shallow_array_adaptor (size_type size, pointer data):
+ size_ (size), own_ (false), data_ (data, leaker<value_type> ()) {}
+
+ BOOST_UBLAS_INLINE
+ shallow_array_adaptor (const shallow_array_adaptor &a):
+ storage_array<self_type> (),
+ size_ (a.size_), own_ (a.own_), data_ (a.data_) {}
+
+ BOOST_UBLAS_INLINE
+ ~shallow_array_adaptor () {
+ }
+
+ // Resizing
+ private:
+ BOOST_UBLAS_INLINE
+ void resize_internal (size_type size, value_type init, bool preserve = true) {
+ if (size != size_) {
+ shared_array<value_type> data (new value_type [size]);
+ if (preserve) {
+ std::copy (data_.get (), data_.get () + (std::min) (size, size_), data.get ());
+ std::fill (data.get () + (std::min) (size, size_), data.get () + size, init);
+ }
+ size_ = size;
+ data_ = data;
+ }
+ }
+ BOOST_UBLAS_INLINE
+ void resize_internal (size_type size, pointer data, value_type init, bool preserve = true) {
+ if (preserve) {
+ std::copy (data_.get (), data_.get () + (std::min) (size, size_), data);
+ std::fill (data + (std::min) (size, size_), data + size, init);
+ }
+ size_ = size;
+ data_ = data;
+ }
+ public:
+ BOOST_UBLAS_INLINE
+ void resize (size_type size) {
+ resize_internal (size, value_type (), false);
+ }
+ BOOST_UBLAS_INLINE
+ void resize (size_type size, value_type init) {
+ resize_internal (size, init, true);
+ }
+ BOOST_UBLAS_INLINE
+ void resize (size_type size, pointer data) {
+ resize_internal (size, data, value_type (), false);
+ }
+ BOOST_UBLAS_INLINE
+ void resize (size_type size, pointer data, value_type init) {
+ resize_internal (size, data, init, true);
+ }
+
+ BOOST_UBLAS_INLINE
+ size_type size () const {
+ return size_;
+ }
+
+ // Element access
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (size_type i) const {
+ BOOST_UBLAS_CHECK (i < size_, bad_index ());
+ return data_ [i];
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (size_type i) {
+ BOOST_UBLAS_CHECK (i < size_, bad_index ());
+ return data_ [i];
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ shallow_array_adaptor &operator = (const shallow_array_adaptor &a) {
+ if (this != &a) {
+ resize (a.size_);
+ std::copy (a.data_.get (), a.data_.get () + a.size_, data_.get ());
+ }
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ shallow_array_adaptor &assign_temporary (shallow_array_adaptor &a) {
+ if (own_ && a.own_)
+ swap (a);
+ else
+ *this = a;
+ return *this;
+ }
+
+ // Swapping
+ BOOST_UBLAS_INLINE
+ void swap (shallow_array_adaptor &a) {
+ if (this != &a) {
+ std::swap (size_, a.size_);
+ std::swap (own_, a.own_);
+ std::swap (data_, a.data_);
+ }
+ }
+ BOOST_UBLAS_INLINE
+ friend void swap (shallow_array_adaptor &a1, shallow_array_adaptor &a2) {
+ a1.swap (a2);
+ }
+
+ // Iterators simply are pointers.
+
+ typedef const_pointer const_iterator;
+
+ BOOST_UBLAS_INLINE
+ const_iterator begin () const {
+ return data_.get ();
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator end () const {
+ return data_.get () + size_;
+ }
+
+ typedef pointer iterator;
+
+ BOOST_UBLAS_INLINE
+ iterator begin () {
+ return data_.get ();
+ }
+ BOOST_UBLAS_INLINE
+ iterator end () {
+ return data_.get () + size_;
+ }
+
+ // Reverse iterators
+ typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
+ typedef std::reverse_iterator<iterator> reverse_iterator;
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rbegin () const {
+ return const_reverse_iterator (end ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rend () const {
+ return const_reverse_iterator (begin ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator rbegin () {
+ return reverse_iterator (end ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator rend () {
+ return reverse_iterator (begin ());
+ }
+
+ private:
+ size_type size_;
+ bool own_;
+ shared_array<value_type> data_;
+ };
+
+#endif
+
+
+ // Range class
+ template <class Z, class D>
+ class basic_range {
+ typedef basic_range<Z, D> self_type;
+ public:
+ typedef Z size_type;
+ typedef D difference_type;
+ typedef size_type value_type;
+ typedef value_type const_reference;
+ typedef const_reference reference;
+ typedef const value_type *const_pointer;
+ typedef value_type *pointer;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ basic_range ():
+ start_ (0), size_ (0) {}
+ BOOST_UBLAS_INLINE
+ basic_range (size_type start, size_type stop):
+ start_ (start), size_ (stop - start) {
+ BOOST_UBLAS_CHECK (start_ <= stop, bad_index ());
+ }
+
+ BOOST_UBLAS_INLINE
+ size_type start () const {
+ return start_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type size () const {
+ return size_;
+ }
+
+ // Random Access Container
+ BOOST_UBLAS_INLINE
+ size_type max_size () const {
+ return size_;
+ }
+
+ BOOST_UBLAS_INLINE
+ bool empty () const {
+ return size_ == 0;
+ }
+
+ // Element access
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type i) const {
+ BOOST_UBLAS_CHECK (i < size_, bad_index ());
+ return start_ + i;
+ }
+
+ // Composition
+ BOOST_UBLAS_INLINE
+ basic_range compose (const basic_range &r) const {
+ return basic_range (start_ + r.start_, start_ + r.start_ + r.size_);
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const basic_range &r) const {
+ return start_ == r.start_ && size_ == r.size_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator != (const basic_range &r) const {
+ return ! (*this == r);
+ }
+
+ // Iterator types
+ private:
+ // Use and index
+ typedef size_type const_subiterator_type;
+
+ public:
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ typedef indexed_const_iterator<self_type, std::random_access_iterator_tag> const_iterator;
+#else
+ class const_iterator:
+ public container_const_reference<basic_range>,
+ public random_access_iterator_base<std::random_access_iterator_tag,
+ const_iterator, value_type> {
+ public:
+ typedef typename basic_range::value_type value_type;
+ typedef typename basic_range::difference_type difference_type;
+ typedef typename basic_range::const_reference reference;
+ typedef typename basic_range::const_pointer pointer;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator ():
+ container_const_reference<basic_range> (), it_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator (const basic_range &r, const const_subiterator_type &it):
+ container_const_reference<basic_range> (r), it_ (it) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator &operator ++ () {
+ ++ it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator -- () {
+ BOOST_UBLAS_CHECK (it_ > 0, bad_index ());
+ -- it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator += (difference_type n) {
+ BOOST_UBLAS_CHECK (n >= 0 || it_ >= size_type(-n), bad_index ());
+ it_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator -= (difference_type n) {
+ BOOST_UBLAS_CHECK (n <= 0 || it_ >= size_type(n), bad_index ());
+ it_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator &it) const {
+ return it_ - it.it_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ BOOST_UBLAS_CHECK ((*this) ().start () <= it_, bad_index ());
+ BOOST_UBLAS_CHECK (it_ < (*this) ().start () + (*this) ().size (), bad_index ());
+ return it_;
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+ // Index
+ BOOST_UBLAS_INLINE
+ size_type index () const {
+ BOOST_UBLAS_CHECK ((*this) ().start () <= it_, bad_index ());
+ BOOST_UBLAS_CHECK (it_ < (*this) ().start () + (*this) ().size (), bad_index ());
+ return it_ - (*this) ().start ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator &operator = (const const_iterator &it) {
+ // Comeau recommends...
+ this->assign (&it ());
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) () == it (), external_logic ());
+ return it_ == it.it_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) () == it (), external_logic ());
+ return it_ < it.it_;
+ }
+
+ private:
+ const_subiterator_type it_;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator begin () const {
+ return const_iterator (*this, start_);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator end () const {
+ return const_iterator (*this, start_ + size_);
+ }
+
+ // Reverse iterator
+ typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rbegin () const {
+ return const_reverse_iterator (end ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rend () const {
+ return const_reverse_iterator (begin ());
+ }
+
+ BOOST_UBLAS_INLINE
+ basic_range preprocess (size_type size) const {
+ if (this != &all_)
+ return *this;
+ return basic_range (0, size);
+ }
+ static
+ BOOST_UBLAS_INLINE
+ const basic_range &all () {
+ return all_;
+ }
+
+ private:
+ size_type start_;
+ size_type size_;
+ static const basic_range all_;
+ };
+
+ template <class Z, class D>
+ const basic_range<Z,D> basic_range<Z,D>::all_ (0, size_type (-1));
+
+
+ // Slice class
+ template <class Z, class D>
+ class basic_slice {
+ typedef basic_slice<Z, D> self_type;
+ public:
+ typedef Z size_type;
+ typedef D difference_type;
+ typedef size_type value_type;
+ typedef value_type const_reference;
+ typedef const_reference reference;
+ typedef const value_type *const_pointer;
+ typedef value_type *pointer;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ basic_slice ():
+ start_ (0), stride_ (0), size_ (0) {}
+ BOOST_UBLAS_INLINE
+ basic_slice (size_type start, difference_type stride, size_type size):
+ start_ (start), stride_ (stride), size_ (size) {}
+
+ BOOST_UBLAS_INLINE
+ size_type start () const {
+ return start_;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type stride () const {
+ return stride_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type size () const {
+ return size_;
+ }
+
+ // Random Access Container
+ BOOST_UBLAS_INLINE
+ size_type max_size () const {
+ return size_;
+ }
+
+ BOOST_UBLAS_INLINE
+ bool empty () const {
+ return size_ == 0;
+ }
+
+ // Element access
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type i) const {
+ BOOST_UBLAS_CHECK (i < size_, bad_index ());
+ BOOST_UBLAS_CHECK (stride_ >= 0 || start_ >= i * -stride_, bad_index ());
+ return start_ + i * stride_;
+ }
+
+ // Composition
+ BOOST_UBLAS_INLINE
+ basic_slice compose (const basic_range<size_type, difference_type> &r) const {
+ BOOST_UBLAS_CHECK (stride_ >=0 || start_ >= -stride_ * r.start(), bad_index ());
+ return basic_slice (start_ + stride_ * r.start (), stride_, r.size ());
+ }
+ BOOST_UBLAS_INLINE
+ basic_slice compose (const basic_slice &s) const {
+ BOOST_UBLAS_CHECK (stride_ >=0 || start_ >= -stride_ * s.start_, bad_index ());
+ return basic_slice (start_ + stride_ * s.start_, stride_ * s.stride_, s.size_);
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const basic_slice &s) const {
+ return start_ == s.start_ && stride_ == s.stride_ && size_ == s.size_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator != (const basic_slice &s) const {
+ return ! (*this == s);
+ }
+
+ // Iterator types
+ private:
+ // Use and index
+ typedef size_type const_subiterator_type;
+
+ public:
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ typedef indexed_const_iterator<self_type, std::random_access_iterator_tag> const_iterator;
+#else
+ class const_iterator:
+ public container_const_reference<basic_slice>,
+ public random_access_iterator_base<std::random_access_iterator_tag,
+ const_iterator, value_type> {
+ public:
+ typedef typename basic_slice::value_type value_type;
+ typedef typename basic_slice::difference_type difference_type;
+ typedef typename basic_slice::const_reference reference;
+ typedef typename basic_slice::const_pointer pointer;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator ():
+ container_const_reference<basic_slice> (), it_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator (const basic_slice &s, const const_subiterator_type &it):
+ container_const_reference<basic_slice> (s), it_ (it) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator &operator ++ () {
+ ++it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator -- () {
+ BOOST_UBLAS_CHECK (it_ > 0, bad_index ());
+ --it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator += (difference_type n) {
+ BOOST_UBLAS_CHECK (n >= 0 || it_ >= size_type(-n), bad_index ());
+ it_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator -= (difference_type n) {
+ BOOST_UBLAS_CHECK (n <= 0 || it_ >= size_type(n), bad_index ());
+ it_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator &it) const {
+ return it_ - it.it_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ BOOST_UBLAS_CHECK (it_ < (*this) ().size (), bad_index ());
+ return (*this) ().start () + it_* (*this) ().stride ();
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+ // Index
+ BOOST_UBLAS_INLINE
+ size_type index () const {
+ BOOST_UBLAS_CHECK (it_ < (*this) ().size (), bad_index ());
+ return it_;
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator &operator = (const const_iterator &it) {
+ // Comeau recommends...
+ this->assign (&it ());
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) () == it (), external_logic ());
+ return it_ == it.it_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) () == it (), external_logic ());
+ return it_ < it.it_;
+ }
+
+ private:
+ const_subiterator_type it_;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator begin () const {
+ return const_iterator (*this, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator end () const {
+ return const_iterator (*this, size_);
+ }
+
+ // Reverse iterator
+ typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rbegin () const {
+ return const_reverse_iterator (end ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rend () const {
+ return const_reverse_iterator (begin ());
+ }
+
+ BOOST_UBLAS_INLINE
+ basic_slice preprocess (size_type size) const {
+ if (this != &all_)
+ return *this;
+ return basic_slice (0, 1, size);
+ }
+ static
+ BOOST_UBLAS_INLINE
+ const basic_slice &all () {
+ return all_;
+ }
+
+ private:
+ size_type start_;
+ difference_type stride_;
+ size_type size_;
+ static const basic_slice all_;
+ };
+
+ template <class Z, class D>
+ const basic_slice<Z,D> basic_slice<Z,D>::all_ (0, 1, size_type (-1));
+
+
+ // Indirect array class
+ template<class A>
+ class indirect_array {
+ typedef indirect_array<A> self_type;
+ public:
+ typedef A array_type;
+ typedef const A const_array_type;
+ typedef typename A::size_type size_type;
+ typedef typename A::difference_type difference_type;
+ typedef typename A::value_type value_type;
+ typedef typename A::const_reference const_reference;
+ typedef typename A::reference reference;
+ typedef typename A::const_pointer const_pointer;
+ typedef typename A::pointer pointer;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ indirect_array ():
+ size_ (), data_ () {}
+ explicit BOOST_UBLAS_INLINE
+ indirect_array (size_type size):
+ size_ (size), data_ (size) {}
+ BOOST_UBLAS_INLINE
+ indirect_array (size_type size, const array_type &data):
+ size_ (size), data_ (data) {}
+ BOOST_UBLAS_INLINE
+ indirect_array (pointer start, pointer stop):
+ size_ (stop - start), data_ (stop - start) {
+ std::copy (start, stop, data_.begin ());
+ }
+
+ BOOST_UBLAS_INLINE
+ size_type size () const {
+ return size_;
+ }
+ BOOST_UBLAS_INLINE
+ const_array_type data () const {
+ return data_;
+ }
+ BOOST_UBLAS_INLINE
+ array_type data () {
+ return data_;
+ }
+
+ // Random Access Container
+ BOOST_UBLAS_INLINE
+ size_type max_size () const {
+ return size_;
+ }
+
+ BOOST_UBLAS_INLINE
+ bool empty () const {
+ return data_.size () == 0;
+ }
+
+ // Element access
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type i) const {
+ BOOST_UBLAS_CHECK (i < size_, bad_index ());
+ return data_ [i];
+ }
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type i) {
+ BOOST_UBLAS_CHECK (i < size_, bad_index ());
+ return data_ [i];
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (size_type i) const {
+ return (*this) (i);
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (size_type i) {
+ return (*this) (i);
+ }
+
+ // Composition
+ BOOST_UBLAS_INLINE
+ indirect_array compose (const basic_range<size_type, difference_type> &r) const {
+ BOOST_UBLAS_CHECK (r.start () + r.size () <= size_, bad_size ());
+ array_type data (r.size ());
+ for (size_type i = 0; i < r.size (); ++ i)
+ data [i] = data_ [r.start () + i];
+ return indirect_array (r.size (), data);
+ }
+ BOOST_UBLAS_INLINE
+ indirect_array compose (const basic_slice<size_type, difference_type> &s) const {
+ BOOST_UBLAS_CHECK (s.start () + s.stride () * (s.size () - (s.size () > 0)) <= size (), bad_size ());
+ array_type data (s.size ());
+ for (size_type i = 0; i < s.size (); ++ i)
+ data [i] = data_ [s.start () + s.stride () * i];
+ return indirect_array (s.size (), data);
+ }
+ BOOST_UBLAS_INLINE
+ indirect_array compose (const indirect_array &ia) const {
+ array_type data (ia.size_);
+ for (size_type i = 0; i < ia.size_; ++ i) {
+ BOOST_UBLAS_CHECK (ia.data_ [i] <= size_, bad_size ());
+ data [i] = data_ [ia.data_ [i]];
+ }
+ return indirect_array (ia.size_, data);
+ }
+
+ // Comparison
+ template<class OA>
+ BOOST_UBLAS_INLINE
+ bool operator == (const indirect_array<OA> &ia) const {
+ if (size_ != ia.size_)
+ return false;
+ for (size_type i = 0; i < BOOST_UBLAS_SAME (size_, ia.size_); ++ i)
+ if (data_ [i] != ia.data_ [i])
+ return false;
+ return true;
+ }
+ template<class OA>
+ BOOST_UBLAS_INLINE
+ bool operator != (const indirect_array<OA> &ia) const {
+ return ! (*this == ia);
+ }
+
+ // Iterator types
+ private:
+ // Use a index difference
+ typedef difference_type const_subiterator_type;
+
+ public:
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ typedef indexed_const_iterator<indirect_array, std::random_access_iterator_tag> const_iterator;
+#else
+ class const_iterator:
+ public container_const_reference<indirect_array>,
+ public random_access_iterator_base<std::random_access_iterator_tag,
+ const_iterator, value_type> {
+ public:
+ typedef typename indirect_array::value_type value_type;
+ typedef typename indirect_array::difference_type difference_type;
+ typedef typename indirect_array::const_reference reference;
+ typedef typename indirect_array::const_pointer pointer;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator ():
+ container_const_reference<indirect_array> (), it_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator (const indirect_array &ia, const const_subiterator_type &it):
+ container_const_reference<indirect_array> (ia), it_ (it) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator &operator ++ () {
+ ++ it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator -- () {
+ -- it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator += (difference_type n) {
+ it_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator -= (difference_type n) {
+ it_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator &it) const {
+ return it_ - it.it_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ return (*this) () (it_);
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+ // Index
+ BOOST_UBLAS_INLINE
+ size_type index () const {
+ return it_;
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator &operator = (const const_iterator &it) {
+ // Comeau recommends...
+ this->assign (&it ());
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) () == it (), external_logic ());
+ return it_ == it.it_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) () == it (), external_logic ());
+ return it_ < it.it_;
+ }
+
+ private:
+ const_subiterator_type it_;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator begin () const {
+ return const_iterator (*this, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator end () const {
+ return const_iterator (*this, size_);
+ }
+
+ // Reverse iterator
+ typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rbegin () const {
+ return const_reverse_iterator (end ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rend () const {
+ return const_reverse_iterator (begin ());
+ }
+
+ BOOST_UBLAS_INLINE
+ indirect_array preprocess (size_type size) const {
+ if (this != &all_)
+ return *this;
+ indirect_array ia (size);
+ for (size_type i = 0; i < size; ++ i)
+ ia (i) = i;
+ return ia;
+ }
+ static
+ BOOST_UBLAS_INLINE
+ const indirect_array &all () {
+ return all_;
+ }
+
+ private:
+ size_type size_;
+ array_type data_;
+ static const indirect_array all_;
+ };
+
+ template<class A>
+ const indirect_array<A> indirect_array<A>::all_;
+
+
+
+ // Gunter Winkler contributed the classes index_pair, index_pair_array,
+ // index_triple and index_triple_array to enable inplace sort of parallel arrays.
+
+ template <class V>
+ class index_pair :
+ private boost::noncopyable,
+ public container_reference<V> {
+
+ typedef index_pair<V> self_type;
+ public:
+ typedef typename V::size_type size_type;
+
+ BOOST_UBLAS_INLINE
+ index_pair(V& v, size_type i) :
+ container_reference<V>(v), i_(i),
+ v1_(v.data1_[i]), v2_(v.data2_[i]),
+ dirty_(false), is_copy_(false) {}
+ BOOST_UBLAS_INLINE
+ index_pair(const self_type& rhs) :
+ container_reference<V>(rhs()), i_(0),
+ v1_(rhs.v1_), v2_(rhs.v2_),
+ dirty_(false), is_copy_(true) {}
+ BOOST_UBLAS_INLINE
+ ~index_pair() {
+ if (dirty_ && (!is_copy_) ) {
+ (*this)().data1_[i_] = v1_;
+ (*this)().data2_[i_] = v2_;
+ }
+ }
+
+ BOOST_UBLAS_INLINE
+ self_type& operator=(const self_type& rhs) {
+ v1_ = rhs.v1_;
+ v2_ = rhs.v2_;
+ dirty_ = true;
+ return *this;
+ }
+
+ BOOST_UBLAS_INLINE
+ void swap(self_type rhs) {
+ self_type tmp(rhs);
+ rhs = *this;
+ *this = tmp;
+ }
+ BOOST_UBLAS_INLINE
+ friend void swap(self_type lhs, self_type rhs) {
+ lhs.swap(rhs);
+ }
+
+ BOOST_UBLAS_INLINE
+ bool equal(const self_type& rhs) const {
+ return (v1_ == rhs.v1_);
+ }
+ bool less(const self_type& rhs) const {
+ return (v1_ < rhs.v1_);
+ }
+ BOOST_UBLAS_INLINE
+ friend bool operator == (const self_type& lhs, const self_type& rhs) {
+ return lhs.equal(rhs);
+ }
+ BOOST_UBLAS_INLINE
+ friend bool operator != (const self_type& lhs, const self_type& rhs) {
+ return !lhs.equal(rhs);
+ }
+ BOOST_UBLAS_INLINE
+ friend bool operator < (const self_type& lhs, const self_type& rhs) {
+ return lhs.less(rhs);
+ }
+
+ private:
+ size_type i_;
+ typename V::value1_type v1_;
+ typename V::value2_type v2_;
+ bool dirty_;
+ bool is_copy_;
+ };
+
+ template <class V1, class V2>
+ class index_pair_array:
+ private boost::noncopyable {
+
+ typedef index_pair_array<V1, V2> self_type;
+ public:
+ typedef typename V1::value_type value1_type;
+ typedef typename V2::value_type value2_type;
+
+ typedef typename V1::size_type size_type;
+ typedef typename V1::difference_type difference_type;
+ typedef index_pair<self_type> value_type;
+ // There is nothing that can be referenced directly. Always return a copy of the index_pair
+ typedef value_type reference;
+ typedef const value_type const_reference;
+
+ BOOST_UBLAS_INLINE
+ index_pair_array(size_type size, V1& data1, V2& data2) :
+ size_(size),data1_(data1),data2_(data2) {}
+
+ BOOST_UBLAS_INLINE
+ size_type size() const {
+ return size_;
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type i) const {
+ return value_type((*this), i);
+ }
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type i) {
+ return value_type((*this), i);
+ }
+
+ typedef indexed_iterator<self_type, std::random_access_iterator_tag> iterator;
+ typedef indexed_const_iterator<self_type, std::random_access_iterator_tag> const_iterator;
+
+ BOOST_UBLAS_INLINE
+ iterator begin() {
+ return iterator( (*this), 0);
+ }
+ BOOST_UBLAS_INLINE
+ iterator end() {
+ return iterator( (*this), size());
+ }
+
+ BOOST_UBLAS_INLINE
+ const_iterator begin() const {
+ return const_iterator( (*this), 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator end() const {
+ return const_iterator( (*this), size());
+ }
+
+ // unnecessary function:
+ BOOST_UBLAS_INLINE
+ bool equal(size_type i1, size_type i2) const {
+ return data1_[i1] == data1_[i2];
+ }
+ BOOST_UBLAS_INLINE
+ bool less(size_type i1, size_type i2) const {
+ return data1_[i1] < data1_[i2];
+ }
+
+ // gives a large speedup
+ BOOST_UBLAS_INLINE
+ friend void iter_swap(const iterator& lhs, const iterator& rhs) {
+ const size_type i1 = lhs.index();
+ const size_type i2 = rhs.index();
+ std::swap(lhs().data1_[i1], rhs().data1_[i2]);
+ std::swap(lhs().data2_[i1], rhs().data2_[i2]);
+ }
+
+ private:
+ size_type size_;
+ V1& data1_;
+ V2& data2_;
+
+ // friend class value_type;
+ friend class index_pair<self_type>;
+ };
+
+ template <class M>
+ class index_triple :
+ private boost::noncopyable,
+ public container_reference<M> {
+
+ typedef index_triple<M> self_type;
+ public:
+ typedef typename M::size_type size_type;
+
+ BOOST_UBLAS_INLINE
+ index_triple(M& m, size_type i) :
+ container_reference<M>(m), i_(i),
+ v1_(m.data1_[i]), v2_(m.data2_[i]), v3_(m.data3_[i]),
+ dirty_(false), is_copy_(false) {}
+ BOOST_UBLAS_INLINE
+ index_triple(const self_type& rhs) :
+ container_reference<M>(rhs()), i_(0),
+ v1_(rhs.v1_), v2_(rhs.v2_), v3_(rhs.v3_),
+ dirty_(false), is_copy_(true) {}
+ BOOST_UBLAS_INLINE
+ ~index_triple() {
+ if (dirty_ && (!is_copy_) ) {
+ (*this)().data1_[i_] = v1_;
+ (*this)().data2_[i_] = v2_;
+ (*this)().data3_[i_] = v3_;
+ }
+ }
+
+ BOOST_UBLAS_INLINE
+ self_type& operator=(const self_type& rhs) {
+ v1_ = rhs.v1_;
+ v2_ = rhs.v2_;
+ v3_ = rhs.v3_;
+ dirty_ = true;
+ return *this;
+ }
+
+ BOOST_UBLAS_INLINE
+ void swap(self_type rhs) {
+ self_type tmp(rhs);
+ rhs = *this;
+ *this = tmp;
+ }
+ BOOST_UBLAS_INLINE
+ friend void swap(self_type lhs, self_type rhs) {
+ lhs.swap(rhs);
+ }
+
+ BOOST_UBLAS_INLINE
+ bool equal(const self_type& rhs) const {
+ return ((v1_ == rhs.v1_) && (v2_ == rhs.v2_));
+ }
+ BOOST_UBLAS_INLINE
+ bool less(const self_type& rhs) const {
+ return ((v1_ < rhs.v1_) ||
+ (v1_ == rhs.v1_ && v2_ < rhs.v2_));
+ }
+ BOOST_UBLAS_INLINE
+ friend bool operator == (const self_type& lhs, const self_type& rhs) {
+ return lhs.equal(rhs);
+ }
+ BOOST_UBLAS_INLINE
+ friend bool operator != (const self_type& lhs, const self_type& rhs) {
+ return !lhs.equal(rhs);
+ }
+ BOOST_UBLAS_INLINE
+ friend bool operator < (const self_type& lhs, const self_type& rhs) {
+ return lhs.less(rhs);
+ }
+
+ private:
+ size_type i_;
+ typename M::value1_type v1_;
+ typename M::value2_type v2_;
+ typename M::value3_type v3_;
+ bool dirty_;
+ bool is_copy_;
+ };
+
+ template <class V1, class V2, class V3>
+ class index_triple_array:
+ private boost::noncopyable {
+
+ typedef index_triple_array<V1, V2, V3> self_type;
+ public:
+ typedef typename V1::value_type value1_type;
+ typedef typename V2::value_type value2_type;
+ typedef typename V3::value_type value3_type;
+
+ typedef typename V1::size_type size_type;
+ typedef typename V1::difference_type difference_type;
+ typedef index_triple<self_type> value_type;
+ // There is nothing that can be referenced directly. Always return a copy of the index_triple
+ typedef value_type reference;
+ typedef const value_type const_reference;
+
+ BOOST_UBLAS_INLINE
+ index_triple_array(size_type size, V1& data1, V2& data2, V3& data3) :
+ size_(size),data1_(data1),data2_(data2),data3_(data3) {}
+
+ BOOST_UBLAS_INLINE
+ size_type size() const {
+ return size_;
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type i) const {
+ return value_type((*this), i);
+ }
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type i) {
+ return value_type((*this), i);
+ }
+
+ typedef indexed_iterator<self_type, std::random_access_iterator_tag> iterator;
+ typedef indexed_const_iterator<self_type, std::random_access_iterator_tag> const_iterator;
+
+ BOOST_UBLAS_INLINE
+ iterator begin() {
+ return iterator( (*this), 0);
+ }
+ BOOST_UBLAS_INLINE
+ iterator end() {
+ return iterator( (*this), size());
+ }
+
+ BOOST_UBLAS_INLINE
+ const_iterator begin() const {
+ return const_iterator( (*this), 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator end() const {
+ return const_iterator( (*this), size());
+ }
+
+ // unnecessary function:
+ BOOST_UBLAS_INLINE
+ bool equal(size_type i1, size_type i2) const {
+ return ((data1_[i1] == data1_[i2]) && (data2_[i1] == data2_[i2]));
+ }
+ BOOST_UBLAS_INLINE
+ bool less(size_type i1, size_type i2) const {
+ return ((data1_[i1] < data1_[i2]) ||
+ (data1_[i1] == data1_[i2] && data2_[i1] < data2_[i2]));
+ }
+
+ // gives a large speedup
+ BOOST_UBLAS_INLINE
+ friend void iter_swap(const iterator& lhs, const iterator& rhs) {
+ const size_type i1 = lhs.index();
+ const size_type i2 = rhs.index();
+ std::swap(lhs().data1_[i1], rhs().data1_[i2]);
+ std::swap(lhs().data2_[i1], rhs().data2_[i2]);
+ std::swap(lhs().data3_[i1], rhs().data3_[i2]);
+ }
+
+ private:
+ size_type size_;
+ V1& data1_;
+ V2& data2_;
+ V3& data3_;
+
+ // friend class value_type;
+ friend class index_triple<self_type>;
+ };
+
+}}}
+
+#endif
diff --git a/boost/boost/numeric/ublas/storage_sparse.hpp b/boost/boost/numeric/ublas/storage_sparse.hpp
new file mode 100644
index 00000000000..efe7a10899d
--- /dev/null
+++ b/boost/boost/numeric/ublas/storage_sparse.hpp
@@ -0,0 +1,542 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without fee,
+// provided that the above copyright notice appear in all copies and
+// that both that copyright notice and this permission notice appear
+// in supporting documentation. The authors make no representations
+// about the suitability of this software for any purpose.
+// It is provided "as is" without express or implied warranty.
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#ifndef _BOOST_UBLAS_STORAGE_SPARSE_
+#define _BOOST_UBLAS_STORAGE_SPARSE_
+
+#include <map>
+
+#include <boost/numeric/ublas/storage.hpp>
+
+
+namespace boost { namespace numeric { namespace ublas {
+
+ namespace detail {
+
+ template<class I, class T, class C>
+ BOOST_UBLAS_INLINE
+ I lower_bound (const I &begin, const I &end, const T &t, C compare) {
+ // t <= *begin <=> ! (*begin < t)
+ if (begin == end || ! compare (*begin, t))
+ return begin;
+ if (compare (*(end - 1), t))
+ return end;
+ return std::lower_bound (begin, end, t, compare);
+ }
+ template<class I, class T, class C>
+ BOOST_UBLAS_INLINE
+ I upper_bound (const I &begin, const I &end, const T &t, C compare) {
+ if (begin == end || compare (t, *begin))
+ return begin;
+ // (*end - 1) <= t <=> ! (t < *end)
+ if (! compare (t, *(end - 1)))
+ return end;
+ return std::upper_bound (begin, end, t, compare);
+ }
+
+ template<class P>
+ struct less_pair {
+ BOOST_UBLAS_INLINE
+ bool operator () (const P &p1, const P &p2) {
+ return p1.first < p2.first;
+ }
+ };
+ template<class T>
+ struct less_triple {
+ BOOST_UBLAS_INLINE
+ bool operator () (const T &t1, const T &t2) {
+ return t1.first.first < t2.first.first ||
+ (t1.first.first == t2.first.first && t1.first.second < t2.first.second);
+ }
+ };
+
+ }
+
+#ifdef BOOST_UBLAS_STRICT_MAP_ARRAY
+ template<class A>
+ class sparse_storage_element:
+ public container_reference<A> {
+ public:
+ typedef A array_type;
+ typedef typename A::key_type index_type;
+ typedef typename A::mapped_type data_value_type;
+ // typedef const data_value_type &data_const_reference;
+ typedef typename type_traits<data_value_type>::const_reference data_const_reference;
+ typedef data_value_type &data_reference;
+ typedef typename A::value_type value_type;
+ typedef value_type *pointer;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ sparse_storage_element (array_type &a, pointer it):
+ container_reference<array_type> (a), it_ (it), i_ (it->first), d_ (it->second), dirty_ (false) {}
+ BOOST_UBLAS_INLINE
+ sparse_storage_element (array_type &a, index_type i):
+ container_reference<array_type> (a), it_ (), i_ (i), d_ (), dirty_ (false) {
+ pointer it = (*this) ().find (i_);
+ if (it == (*this) ().end ())
+ it = (*this) ().insert ((*this) ().end (), value_type (i_, d_));
+ d_ = it->second;
+ }
+ BOOST_UBLAS_INLINE
+ ~sparse_storage_element () {
+ if (dirty_) {
+ if (! it_)
+ it_ = (*this) ().find (i_);
+ BOOST_UBLAS_CHECK (it_ != (*this) ().end (), internal_logic ());
+ it_->second = d_;
+ }
+ }
+
+ // Element access - only if data_const_reference is defined
+ BOOST_UBLAS_INLINE
+ typename data_value_type::data_const_reference
+ operator [] (index_type i) const {
+ return d_ [i];
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ sparse_storage_element &operator = (const sparse_storage_element &p) {
+ // Overide the implict copy assignment
+ d_ = p.d_;
+ dirty_ = true;
+ return *this;
+ }
+ template<class D>
+ BOOST_UBLAS_INLINE
+ sparse_storage_element &operator = (const D &d) {
+ d_ = d;
+ dirty_ = true;
+ return *this;
+ }
+ template<class D>
+ BOOST_UBLAS_INLINE
+ sparse_storage_element &operator += (const D &d) {
+ d_ += d;
+ dirty_ = true;
+ return *this;
+ }
+ template<class D>
+ BOOST_UBLAS_INLINE
+ sparse_storage_element &operator -= (const D &d) {
+ d_ -= d;
+ dirty_ = true;
+ return *this;
+ }
+ template<class D>
+ BOOST_UBLAS_INLINE
+ sparse_storage_element &operator *= (const D &d) {
+ d_ *= d;
+ dirty_ = true;
+ return *this;
+ }
+ template<class D>
+ BOOST_UBLAS_INLINE
+ sparse_storage_element &operator /= (const D &d) {
+ d_ /= d;
+ dirty_ = true;
+ return *this;
+ }
+
+ // Comparison
+ template<class D>
+ BOOST_UBLAS_INLINE
+ bool operator == (const D &d) const {
+ return d_ == d;
+ }
+ template<class D>
+ BOOST_UBLAS_INLINE
+ bool operator != (const D &d) const {
+ return d_ != d;
+ }
+
+ // Conversion
+ BOOST_UBLAS_INLINE
+ operator data_const_reference () const {
+ return d_;
+ }
+
+ // Swapping
+ BOOST_UBLAS_INLINE
+ void swap (sparse_storage_element p) {
+ if (this != &p) {
+ dirty_ = true;
+ p.dirty_ = true;
+ std::swap (d_, p.d_);
+ }
+ }
+ BOOST_UBLAS_INLINE
+ friend void swap (sparse_storage_element p1, sparse_storage_element p2) {
+ p1.swap (p2);
+ }
+
+ private:
+ pointer it_;
+ index_type i_;
+ data_value_type d_;
+ bool dirty_;
+ };
+#endif
+
+
+ // Default map type is simply forwarded to std::map
+ // FIXME should use ALLOC for map but std::allocator of std::pair<const I, T> and std::pair<I,T> fail to compile
+ template<class I, class T, class ALLOC>
+ class map_std : public std::map<I, T /*, ALLOC */> {
+ };
+
+
+ // Map array
+ // Implementation requires pair<I, T> allocator definition (without const)
+ template<class I, class T, class ALLOC>
+ class map_array {
+ public:
+ typedef ALLOC allocator_type;
+ typedef typename ALLOC::size_type size_type;
+ typedef typename ALLOC::difference_type difference_type;
+ typedef std::pair<I,T> value_type;
+ typedef I key_type;
+ typedef T mapped_type;
+ typedef const value_type &const_reference;
+ typedef value_type &reference;
+ typedef const value_type *const_pointer;
+ typedef value_type *pointer;
+ // Iterators simply are pointers.
+ typedef const_pointer const_iterator;
+ typedef pointer iterator;
+
+ typedef const T &data_const_reference;
+#ifndef BOOST_UBLAS_STRICT_MAP_ARRAY
+ typedef T &data_reference;
+#else
+ typedef sparse_storage_element<map_array> data_reference;
+#endif
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ map_array (const ALLOC &a = ALLOC()):
+ alloc_(a), capacity_ (0), size_ (0) {
+ data_ = 0;
+ }
+ BOOST_UBLAS_INLINE
+ map_array (const map_array &c):
+ alloc_ (c.alloc_), capacity_ (c.size_), size_ (c.size_) {
+ if (capacity_) {
+ data_ = alloc_.allocate (capacity_);
+ std::uninitialized_copy (data_, data_ + capacity_, c.data_);
+ // capacity != size_ requires uninitialized_fill (size_ to capacity_)
+ }
+ else
+ data_ = 0;
+ }
+ BOOST_UBLAS_INLINE
+ ~map_array () {
+ if (capacity_) {
+ std::for_each (data_, data_ + capacity_, static_destroy);
+ alloc_.deallocate (data_, capacity_);
+ }
+ }
+
+ private:
+ // Resizing - implicitly exposses uninitialized (but default constructed) mapped_type
+ BOOST_UBLAS_INLINE
+ void resize (size_type size) {
+ BOOST_UBLAS_CHECK (size_ <= capacity_, internal_logic ());
+ if (size > capacity_) {
+ const size_type capacity = size << 1;
+ BOOST_UBLAS_CHECK (capacity, internal_logic ());
+ pointer data = alloc_.allocate (capacity);
+ std::uninitialized_copy (data_, data_ + (std::min) (size, size_), data);
+ std::uninitialized_fill (data + (std::min) (size, size_), data + capacity, value_type ());
+
+ if (capacity_) {
+ std::for_each (data_, data_ + capacity_, static_destroy);
+ alloc_.deallocate (data_, capacity_);
+ }
+ capacity_ = capacity;
+ data_ = data;
+ }
+ size_ = size;
+ BOOST_UBLAS_CHECK (size_ <= capacity_, internal_logic ());
+ }
+ public:
+
+ // Reserving
+ BOOST_UBLAS_INLINE
+ void reserve (size_type capacity) {
+ BOOST_UBLAS_CHECK (size_ <= capacity_, internal_logic ());
+ // Reduce capacity_ if size_ allows
+ BOOST_UBLAS_CHECK (capacity >= size_, bad_size ());
+ pointer data;
+ if (capacity) {
+ data = alloc_.allocate (capacity);
+ std::uninitialized_copy (data_, data_ + size_, data);
+ std::uninitialized_fill (data + size_, data + capacity, value_type ());
+ }
+ else
+ data = 0;
+
+ if (capacity_) {
+ std::for_each (data_, data_ + capacity_, static_destroy);
+ alloc_.deallocate (data_, capacity_);
+ }
+ capacity_ = capacity;
+ data_ = data;
+ BOOST_UBLAS_CHECK (size_ <= capacity_, internal_logic ());
+ }
+
+ // Random Access Container
+ BOOST_UBLAS_INLINE
+ size_type size () const {
+ return size_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type capacity () const {
+ return capacity_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type max_size () const {
+ return 0; //TODO
+ }
+
+ BOOST_UBLAS_INLINE
+ bool empty () const {
+ return size_ == 0;
+ }
+
+ // Element access
+ BOOST_UBLAS_INLINE
+ data_reference operator [] (key_type i) {
+#ifndef BOOST_UBLAS_STRICT_MAP_ARRAY
+ pointer it = find (i);
+ if (it == end ())
+ it = insert (end (), value_type (i, mapped_type (0)));
+ BOOST_UBLAS_CHECK (it != end (), internal_logic ());
+ return it->second;
+#else
+ return data_reference (*this, i);
+#endif
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ map_array &operator = (const map_array &a) {
+ if (this != &a) {
+ resize (a.size_);
+ std::copy (a.data_, a.data_ + a.size_, data_);
+ }
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ map_array &assign_temporary (map_array &a) {
+ swap (a);
+ return *this;
+ }
+
+ // Swapping
+ BOOST_UBLAS_INLINE
+ void swap (map_array &a) {
+ if (this != &a) {
+ std::swap (capacity_, a.capacity_);
+ std::swap (data_, a.data_);
+ std::swap (size_, a.size_);
+ }
+ }
+ BOOST_UBLAS_INLINE
+ friend void swap (map_array &a1, map_array &a2) {
+ a1.swap (a2);
+ }
+
+ // Element insertion and deletion
+
+ // From Back Insertion Sequence concept
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ iterator push_back (iterator it, const value_type &p) {
+ if (size () == 0 || (it = end () - 1)->first < p.first) {
+ resize (size () + 1);
+ *(it = end () - 1) = p;
+ return it;
+ }
+ external_logic ().raise ();
+ return it;
+ }
+ // Form Unique Associative Container concept
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ std::pair<iterator,bool> insert (const value_type &p) {
+ iterator it = detail::lower_bound (begin (), end (), p, detail::less_pair<value_type> ());
+ if (it != end () && it->first == p.first)
+ return std::make_pair (it, false);
+ difference_type n = it - begin ();
+ BOOST_UBLAS_CHECK (size () == 0 || size () == size_type (n), external_logic ());
+ resize (size () + 1);
+ it = begin () + n; // allow for invalidation
+ std::copy_backward (it, end () - 1, end ());
+ *it = p;
+ return std::make_pair (it, true);
+ }
+ // Form Sorted Associative Container concept
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ iterator insert (iterator hint, const value_type &p) {
+ return insert (p).first;
+ }
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ void erase (iterator it) {
+ BOOST_UBLAS_CHECK (begin () <= it && it < end (), bad_index ());
+ std::copy (it + 1, end (), it);
+ resize (size () - 1);
+ }
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ void erase (iterator it1, iterator it2) {
+ BOOST_UBLAS_CHECK (begin () <= it1 && it1 < it2 && it2 <= end (), bad_index ());
+ std::copy (it2, end (), it1);
+ resize (size () - (it2 - it1));
+ }
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ void clear () {
+ resize (0);
+ }
+
+ // Element lookup
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ const_iterator find (key_type i) const {
+ const_iterator it (detail::lower_bound (begin (), end (), value_type (i, mapped_type (0)), detail::less_pair<value_type> ()));
+ if (it == end () || it->first != i)
+ it = end ();
+ return it;
+ }
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ iterator find (key_type i) {
+ iterator it (detail::lower_bound (begin (), end (), value_type (i, mapped_type (0)), detail::less_pair<value_type> ()));
+ if (it == end () || it->first != i)
+ it = end ();
+ return it;
+ }
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ const_iterator lower_bound (key_type i) const {
+ return detail::lower_bound (begin (), end (), value_type (i, mapped_type (0)), detail::less_pair<value_type> ());
+ }
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ iterator lower_bound (key_type i) {
+ return detail::lower_bound (begin (), end (), value_type (i, mapped_type (0)), detail::less_pair<value_type> ());
+ }
+
+ BOOST_UBLAS_INLINE
+ const_iterator begin () const {
+ return data_;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator end () const {
+ return data_ + size_;
+ }
+
+ BOOST_UBLAS_INLINE
+ iterator begin () {
+ return data_;
+ }
+ BOOST_UBLAS_INLINE
+ iterator end () {
+ return data_ + size_;
+ }
+
+ // Reverse iterators
+ typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
+ typedef std::reverse_iterator<iterator> reverse_iterator;
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rbegin () const {
+ return const_reverse_iterator (end ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rend () const {
+ return const_reverse_iterator (begin ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator rbegin () {
+ return reverse_iterator (end ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator rend () {
+ return reverse_iterator (begin ());
+ }
+
+ // Allocator
+ allocator_type get_allocator () {
+ return alloc_;
+ }
+
+ private:
+ // Provide destroy as a non member function
+ BOOST_UBLAS_INLINE
+ static void static_destroy (reference p) {
+ (&p) -> ~value_type ();
+ }
+ ALLOC alloc_;
+ size_type capacity_;
+ pointer data_;
+ size_type size_;
+ };
+
+
+ namespace detail {
+ template<class A, class T>
+ struct map_traits {
+ typedef typename A::mapped_type &reference;
+ };
+ template<class I, class T, class ALLOC>
+ struct map_traits<map_array<I, T, ALLOC>, T > {
+ typedef typename map_array<I, T, ALLOC>::data_reference reference;
+ };
+
+ // reserve helpers for map_array and generic maps
+ // ISSUE should be in map_traits but want to use on all compilers
+
+ template<class M>
+ BOOST_UBLAS_INLINE
+ void map_reserve (M &/* m */, typename M::size_type /* capacity */) {
+ }
+ template<class I, class T, class ALLOC>
+ BOOST_UBLAS_INLINE
+ void map_reserve (map_array<I, T, ALLOC> &m, typename map_array<I, T, ALLOC>::size_type capacity) {
+ m.reserve (capacity);
+ }
+
+ template<class M>
+ struct map_capacity_traits {
+ typedef typename M::size_type type ;
+ type operator() ( M const& m ) const {
+ return m.size ();
+ }
+ } ;
+
+ template<class I, class T, class ALLOC>
+ struct map_capacity_traits< map_array<I, T, ALLOC> > {
+ typedef typename map_array<I, T, ALLOC>::size_type type ;
+ type operator() ( map_array<I, T, ALLOC> const& m ) const {
+ return m.capacity ();
+ }
+ } ;
+
+ template<class M>
+ BOOST_UBLAS_INLINE
+ typename map_capacity_traits<M>::type map_capacity (M const& m) {
+ return map_capacity_traits<M>() ( m );
+ }
+ }
+
+}}}
+
+#endif
diff --git a/boost/boost/numeric/ublas/symmetric.hpp b/boost/boost/numeric/ublas/symmetric.hpp
new file mode 100644
index 00000000000..949e83aee99
--- /dev/null
+++ b/boost/boost/numeric/ublas/symmetric.hpp
@@ -0,0 +1,2133 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without fee,
+// provided that the above copyright notice appear in all copies and
+// that both that copyright notice and this permission notice appear
+// in supporting documentation. The authors make no representations
+// about the suitability of this software for any purpose.
+// It is provided "as is" without express or implied warranty.
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#ifndef _BOOST_UBLAS_SYMMETRIC_
+#define _BOOST_UBLAS_SYMMETRIC_
+
+#include <boost/numeric/ublas/matrix.hpp>
+#include <boost/numeric/ublas/detail/temporary.hpp>
+
+// Iterators based on ideas of Jeremy Siek
+// Symmetric matrices are square. Thanks to Peter Schmitteckert for spotting this.
+
+namespace boost { namespace numeric { namespace ublas {
+
+ template<class M>
+ bool is_symmetric (const M &m) {
+ typedef typename M::size_type size_type;
+
+ if (m.size1 () != m.size2 ())
+ return false;
+ size_type size = BOOST_UBLAS_SAME (m.size1 (), m.size2 ());
+ for (size_type i = 0; i < size; ++ i) {
+ for (size_type j = i; j < size; ++ j) {
+ if (m (i, j) != m (j, i))
+ return false;
+ }
+ }
+ return true;
+ }
+
+ // Array based symmetric matrix class
+ template<class T, class TRI, class L, class A>
+ class symmetric_matrix:
+ public matrix_container<symmetric_matrix<T, TRI, L, A> > {
+
+ typedef T *pointer;
+ typedef TRI triangular_type;
+ typedef L layout_type;
+ typedef symmetric_matrix<T, TRI, L, A> self_type;
+ public:
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using matrix_container<self_type>::operator ();
+#endif
+ typedef typename A::size_type size_type;
+ typedef typename A::difference_type difference_type;
+ typedef T value_type;
+ typedef const T &const_reference;
+ typedef T &reference;
+ typedef A array_type;
+
+ typedef const matrix_reference<const self_type> const_closure_type;
+ typedef matrix_reference<self_type> closure_type;
+ typedef vector<T, A> vector_temporary_type;
+ typedef matrix<T, L, A> matrix_temporary_type; // general sub-matrix
+ typedef packed_tag storage_category;
+ typedef typename L::orientation_category orientation_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ symmetric_matrix ():
+ matrix_container<self_type> (),
+ size_ (0), data_ (0) {}
+ BOOST_UBLAS_INLINE
+ symmetric_matrix (size_type size):
+ matrix_container<self_type> (),
+ size_ (BOOST_UBLAS_SAME (size, size)), data_ (triangular_type::packed_size (layout_type (), size, size)) {
+ }
+ BOOST_UBLAS_INLINE
+ symmetric_matrix (size_type size1, size_type size2):
+ matrix_container<self_type> (),
+ size_ (BOOST_UBLAS_SAME (size1, size2)), data_ (triangular_type::packed_size (layout_type (), size1, size2)) {
+ }
+ BOOST_UBLAS_INLINE
+ symmetric_matrix (size_type size, const array_type &data):
+ matrix_container<self_type> (),
+ size_ (size), data_ (data) {}
+ BOOST_UBLAS_INLINE
+ symmetric_matrix (const symmetric_matrix &m):
+ matrix_container<self_type> (),
+ size_ (m.size_), data_ (m.data_) {}
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ symmetric_matrix (const matrix_expression<AE> &ae):
+ matrix_container<self_type> (),
+ size_ (BOOST_UBLAS_SAME (ae ().size1 (), ae ().size2 ())),
+ data_ (triangular_type::packed_size (layout_type (), size_, size_)) {
+ matrix_assign<scalar_assign> (*this, ae);
+ }
+
+ // Accessors
+ BOOST_UBLAS_INLINE
+ size_type size1 () const {
+ return size_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type size2 () const {
+ return size_;
+ }
+
+ // Storage accessors
+ BOOST_UBLAS_INLINE
+ const array_type &data () const {
+ return data_;
+ }
+ BOOST_UBLAS_INLINE
+ array_type &data () {
+ return data_;
+ }
+
+ // Resizing
+ BOOST_UBLAS_INLINE
+ void resize (size_type size, bool preserve = true) {
+ if (preserve) {
+ self_type temporary (size, size);
+ detail::matrix_resize_preserve<layout_type> (*this, temporary);
+ }
+ else {
+ data ().resize (triangular_type::packed_size (layout_type (), size, size));
+ size_ = size;
+ }
+ }
+ BOOST_UBLAS_INLINE
+ void resize (size_type size1, size_type size2, bool preserve = true) {
+ resize (BOOST_UBLAS_SAME (size1, size2), preserve);
+ }
+ BOOST_UBLAS_INLINE
+ void resize_packed_preserve (size_type size) {
+ size_ = BOOST_UBLAS_SAME (size, size);
+ data ().resize (triangular_type::packed_size (layout_type (), size_, size_), value_type ());
+ }
+
+ // Element access
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type i, size_type j) const {
+ BOOST_UBLAS_CHECK (i < size_, bad_index ());
+ BOOST_UBLAS_CHECK (j < size_, bad_index ());
+ if (triangular_type::other (i, j))
+ return data () [triangular_type::element (layout_type (), i, size_, j, size_)];
+ else
+ return data () [triangular_type::element (layout_type (), j, size_, i, size_)];
+ }
+ BOOST_UBLAS_INLINE
+ reference at_element (size_type i, size_type j) {
+ BOOST_UBLAS_CHECK (i < size_, bad_index ());
+ BOOST_UBLAS_CHECK (j < size_, bad_index ());
+ return data () [triangular_type::element (layout_type (), i, size_, j, size_)];
+ }
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type i, size_type j) {
+ BOOST_UBLAS_CHECK (i < size_, bad_index ());
+ BOOST_UBLAS_CHECK (j < size_, bad_index ());
+ if (triangular_type::other (i, j))
+ return data () [triangular_type::element (layout_type (), i, size_, j, size_)];
+ else
+ return data () [triangular_type::element (layout_type (), j, size_, i, size_)];
+ }
+
+ // Element assignment
+ BOOST_UBLAS_INLINE
+ reference insert_element (size_type i, size_type j, const_reference t) {
+ return (operator () (i, j) = t);
+ }
+ BOOST_UBLAS_INLINE
+ void erase_element (size_type i, size_type j) {
+ operator () (i, j) = value_type/*zero*/();
+ }
+
+ // Zeroing
+ BOOST_UBLAS_INLINE
+ void clear () {
+ // data ().clear ();
+ std::fill (data ().begin (), data ().end (), value_type/*zero*/());
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ symmetric_matrix &operator = (const symmetric_matrix &m) {
+ size_ = m.size_;
+ data () = m.data ();
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ symmetric_matrix &assign_temporary (symmetric_matrix &m) {
+ swap (m);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ symmetric_matrix &operator = (const matrix_expression<AE> &ae) {
+ self_type temporary (ae);
+ return assign_temporary (temporary);
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ symmetric_matrix &assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_assign> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ symmetric_matrix& operator += (const matrix_expression<AE> &ae) {
+ self_type temporary (*this + ae);
+ return assign_temporary (temporary);
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ symmetric_matrix &plus_assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_plus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ symmetric_matrix& operator -= (const matrix_expression<AE> &ae) {
+ self_type temporary (*this - ae);
+ return assign_temporary (temporary);
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ symmetric_matrix &minus_assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_minus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ symmetric_matrix& operator *= (const AT &at) {
+ matrix_assign_scalar<scalar_multiplies_assign> (*this, at);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ symmetric_matrix& operator /= (const AT &at) {
+ matrix_assign_scalar<scalar_divides_assign> (*this, at);
+ return *this;
+ }
+
+ // Swapping
+ BOOST_UBLAS_INLINE
+ void swap (symmetric_matrix &m) {
+ if (this != &m) {
+ std::swap (size_, m.size_);
+ data ().swap (m.data ());
+ }
+ }
+ BOOST_UBLAS_INLINE
+ friend void swap (symmetric_matrix &m1, symmetric_matrix &m2) {
+ m1.swap (m2);
+ }
+
+ // Iterator types
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ typedef indexed_iterator1<self_type, packed_random_access_iterator_tag> iterator1;
+ typedef indexed_iterator2<self_type, packed_random_access_iterator_tag> iterator2;
+ typedef indexed_const_iterator1<self_type, dense_random_access_iterator_tag> const_iterator1;
+ typedef indexed_const_iterator2<self_type, dense_random_access_iterator_tag> const_iterator2;
+#else
+ class const_iterator1;
+ class iterator1;
+ class const_iterator2;
+ class iterator2;
+#endif
+ typedef reverse_iterator_base1<const_iterator1> const_reverse_iterator1;
+ typedef reverse_iterator_base1<iterator1> reverse_iterator1;
+ typedef reverse_iterator_base2<const_iterator2> const_reverse_iterator2;
+ typedef reverse_iterator_base2<iterator2> reverse_iterator2;
+
+ // Element lookup
+ BOOST_UBLAS_INLINE
+ const_iterator1 find1 (int /* rank */, size_type i, size_type j) const {
+ return const_iterator1 (*this, i, j);
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 find1 (int rank, size_type i, size_type j) {
+ if (rank == 1)
+ i = triangular_type::mutable_restrict1 (i, j);
+ return iterator1 (*this, i, j);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 find2 (int /* rank */, size_type i, size_type j) const {
+ return const_iterator2 (*this, i, j);
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 find2 (int rank, size_type i, size_type j) {
+ if (rank == 1)
+ j = triangular_type::mutable_restrict2 (i, j);
+ return iterator2 (*this, i, j);
+ }
+
+ // Iterators simply are indices.
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator1:
+ public container_const_reference<symmetric_matrix>,
+ public random_access_iterator_base<dense_random_access_iterator_tag,
+ const_iterator1, value_type> {
+ public:
+ typedef typename symmetric_matrix::value_type value_type;
+ typedef typename symmetric_matrix::difference_type difference_type;
+ typedef typename symmetric_matrix::const_reference reference;
+ typedef const typename symmetric_matrix::pointer pointer;
+
+ typedef const_iterator2 dual_iterator_type;
+ typedef const_reverse_iterator2 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator1 ():
+ container_const_reference<self_type> (), it1_ (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator1 (const self_type &m, size_type it1, size_type it2):
+ container_const_reference<self_type> (m), it1_ (it1), it2_ (it2) {}
+ BOOST_UBLAS_INLINE
+ const_iterator1 (const iterator1 &it):
+ container_const_reference<self_type> (it ()), it1_ (it.it1_), it2_ (it.it2_) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator ++ () {
+ ++ it1_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator -- () {
+ -- it1_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator += (difference_type n) {
+ it1_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator -= (difference_type n) {
+ it1_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ - it.it1_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ return (*this) () (it1_, it2_);
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 begin () const {
+ return (*this) ().find2 (1, it1_, 0);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 end () const {
+ return (*this) ().find2 (1, it1_, (*this) ().size2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rbegin () const {
+ return const_reverse_iterator2 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rend () const {
+ return const_reverse_iterator2 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it1_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it2_;
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator = (const const_iterator1 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it1_ = it.it1_;
+ it2_ = it.it2_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ == it.it1_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ < it.it1_;
+ }
+
+ private:
+ size_type it1_;
+ size_type it2_;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator1 begin1 () const {
+ return find1 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 end1 () const {
+ return find1 (0, size_, 0);
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class iterator1:
+ public container_reference<symmetric_matrix>,
+ public random_access_iterator_base<packed_random_access_iterator_tag,
+ iterator1, value_type> {
+ public:
+ typedef typename symmetric_matrix::value_type value_type;
+ typedef typename symmetric_matrix::difference_type difference_type;
+ typedef typename symmetric_matrix::reference reference;
+ typedef typename symmetric_matrix::pointer pointer;
+ typedef iterator2 dual_iterator_type;
+ typedef reverse_iterator2 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ iterator1 ():
+ container_reference<self_type> (), it1_ (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ iterator1 (self_type &m, size_type it1, size_type it2):
+ container_reference<self_type> (m), it1_ (it1), it2_ (it2) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ iterator1 &operator ++ () {
+ ++ it1_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 &operator -- () {
+ -- it1_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 &operator += (difference_type n) {
+ it1_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 &operator -= (difference_type n) {
+ it1_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ - it.it1_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ return (*this) () (it1_, it2_);
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator2 begin () const {
+ return (*this) ().find2 (1, it1_, 0);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator2 end () const {
+ return (*this) ().find2 (1, it1_, (*this) ().size2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator2 rbegin () const {
+ return reverse_iterator2 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator2 rend () const {
+ return reverse_iterator2 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it1_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it2_;
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ iterator1 &operator = (const iterator1 &it) {
+ container_reference<self_type>::assign (&it ());
+ it1_ = it.it1_;
+ it2_ = it.it2_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ == it.it1_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ < it.it1_;
+ }
+
+ private:
+ size_type it1_;
+ size_type it2_;
+
+ friend class const_iterator1;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ iterator1 begin1 () {
+ return find1 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 end1 () {
+ return find1 (0, size_, 0);
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator2:
+ public container_const_reference<symmetric_matrix>,
+ public random_access_iterator_base<dense_random_access_iterator_tag,
+ const_iterator2, value_type> {
+ public:
+ typedef typename symmetric_matrix::value_type value_type;
+ typedef typename symmetric_matrix::difference_type difference_type;
+ typedef typename symmetric_matrix::const_reference reference;
+ typedef const typename symmetric_matrix::pointer pointer;
+
+ typedef const_iterator1 dual_iterator_type;
+ typedef const_reverse_iterator1 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator2 ():
+ container_const_reference<self_type> (), it1_ (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator2 (const self_type &m, size_type it1, size_type it2):
+ container_const_reference<self_type> (m), it1_ (it1), it2_ (it2) {}
+ BOOST_UBLAS_INLINE
+ const_iterator2 (const iterator2 &it):
+ container_const_reference<self_type> (it ()), it1_ (it.it1_), it2_ (it.it2_) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator ++ () {
+ ++ it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator -- () {
+ -- it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator += (difference_type n) {
+ it2_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator -= (difference_type n) {
+ it2_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ - it.it2_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ return (*this) () (it1_, it2_);
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 begin () const {
+ return (*this) ().find1 (1, 0, it2_);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 end () const {
+ return (*this) ().find1 (1, (*this) ().size1 (), it2_);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rbegin () const {
+ return const_reverse_iterator1 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rend () const {
+ return const_reverse_iterator1 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it1_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it2_;
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator = (const const_iterator2 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it1_ = it.it1_;
+ it2_ = it.it2_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ == it.it2_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ < it.it2_;
+ }
+
+ private:
+ size_type it1_;
+ size_type it2_;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator2 begin2 () const {
+ return find2 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 end2 () const {
+ return find2 (0, 0, size_);
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class iterator2:
+ public container_reference<symmetric_matrix>,
+ public random_access_iterator_base<packed_random_access_iterator_tag,
+ iterator2, value_type> {
+ public:
+ typedef typename symmetric_matrix::value_type value_type;
+ typedef typename symmetric_matrix::difference_type difference_type;
+ typedef typename symmetric_matrix::reference reference;
+ typedef typename symmetric_matrix::pointer pointer;
+
+ typedef iterator1 dual_iterator_type;
+ typedef reverse_iterator1 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ iterator2 ():
+ container_reference<self_type> (), it1_ (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ iterator2 (self_type &m, size_type it1, size_type it2):
+ container_reference<self_type> (m), it1_ (it1), it2_ (it2) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ iterator2 &operator ++ () {
+ ++ it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 &operator -- () {
+ -- it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 &operator += (difference_type n) {
+ it2_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 &operator -= (difference_type n) {
+ it2_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ - it.it2_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ return (*this) () (it1_, it2_);
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator1 begin () const {
+ return (*this) ().find1 (1, 0, it2_);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator1 end () const {
+ return (*this) ().find1 (1, (*this) ().size1 (), it2_);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator1 rbegin () const {
+ return reverse_iterator1 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator1 rend () const {
+ return reverse_iterator1 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it1_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it2_;
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ iterator2 &operator = (const iterator2 &it) {
+ container_reference<self_type>::assign (&it ());
+ it1_ = it.it1_;
+ it2_ = it.it2_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ == it.it2_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ < it.it2_;
+ }
+
+ private:
+ size_type it1_;
+ size_type it2_;
+
+ friend class const_iterator2;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ iterator2 begin2 () {
+ return find2 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 end2 () {
+ return find2 (0, 0, size_);
+ }
+
+ // Reverse iterators
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rbegin1 () const {
+ return const_reverse_iterator1 (end1 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rend1 () const {
+ return const_reverse_iterator1 (begin1 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ reverse_iterator1 rbegin1 () {
+ return reverse_iterator1 (end1 ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator1 rend1 () {
+ return reverse_iterator1 (begin1 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rbegin2 () const {
+ return const_reverse_iterator2 (end2 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rend2 () const {
+ return const_reverse_iterator2 (begin2 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ reverse_iterator2 rbegin2 () {
+ return reverse_iterator2 (end2 ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator2 rend2 () {
+ return reverse_iterator2 (begin2 ());
+ }
+
+ private:
+ size_type size_;
+ array_type data_;
+ };
+
+
+ // Symmetric matrix adaptor class
+ template<class M, class TRI>
+ class symmetric_adaptor:
+ public matrix_expression<symmetric_adaptor<M, TRI> > {
+
+ typedef symmetric_adaptor<M, TRI> self_type;
+ public:
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using matrix_expression<self_type>::operator ();
+#endif
+ typedef const M const_matrix_type;
+ typedef M matrix_type;
+ typedef TRI triangular_type;
+ typedef typename M::size_type size_type;
+ typedef typename M::difference_type difference_type;
+ typedef typename M::value_type value_type;
+ typedef typename M::const_reference const_reference;
+ typedef typename boost::mpl::if_<boost::is_const<M>,
+ typename M::const_reference,
+ typename M::reference>::type reference;
+ typedef typename boost::mpl::if_<boost::is_const<M>,
+ typename M::const_closure_type,
+ typename M::closure_type>::type matrix_closure_type;
+ typedef const self_type const_closure_type;
+ typedef self_type closure_type;
+ // Replaced by _temporary_traits to avoid type requirements on M
+ //typedef typename M::vector_temporary_type vector_temporary_type;
+ //typedef typename M::matrix_temporary_type matrix_temporary_type;
+ typedef typename storage_restrict_traits<typename M::storage_category,
+ packed_proxy_tag>::storage_category storage_category;
+ typedef typename M::orientation_category orientation_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ symmetric_adaptor (matrix_type &data):
+ matrix_expression<self_type> (),
+ data_ (data) {
+ BOOST_UBLAS_CHECK (data_.size1 () == data_.size2 (), bad_size ());
+ }
+ BOOST_UBLAS_INLINE
+ symmetric_adaptor (const symmetric_adaptor &m):
+ matrix_expression<self_type> (),
+ data_ (m.data_) {
+ BOOST_UBLAS_CHECK (data_.size1 () == data_.size2 (), bad_size ());
+ }
+
+ // Accessors
+ BOOST_UBLAS_INLINE
+ size_type size1 () const {
+ return data_.size1 ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type size2 () const {
+ return data_.size2 ();
+ }
+
+ // Storage accessors
+ BOOST_UBLAS_INLINE
+ const matrix_closure_type &data () const {
+ return data_;
+ }
+ BOOST_UBLAS_INLINE
+ matrix_closure_type &data () {
+ return data_;
+ }
+
+ // Element access
+#ifndef BOOST_UBLAS_PROXY_CONST_MEMBER
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type i, size_type j) const {
+ BOOST_UBLAS_CHECK (i < size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (j < size2 (), bad_index ());
+ if (triangular_type::other (i, j))
+ return data () (i, j);
+ else
+ return data () (j, i);
+ }
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type i, size_type j) {
+ BOOST_UBLAS_CHECK (i < size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (j < size2 (), bad_index ());
+ if (triangular_type::other (i, j))
+ return data () (i, j);
+ else
+ return data () (j, i);
+ }
+#else
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type i, size_type j) const {
+ BOOST_UBLAS_CHECK (i < size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (j < size2 (), bad_index ());
+ if (triangular_type::other (i, j))
+ return data () (i, j);
+ else
+ return data () (j, i);
+ }
+#endif
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ symmetric_adaptor &operator = (const symmetric_adaptor &m) {
+ matrix_assign<scalar_assign, triangular_type> (*this, m);
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ symmetric_adaptor &assign_temporary (symmetric_adaptor &m) {
+ *this = m;
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ symmetric_adaptor &operator = (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_assign, triangular_type> (*this, matrix<value_type> (ae));
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ symmetric_adaptor &assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_assign, triangular_type> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ symmetric_adaptor& operator += (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_assign, triangular_type> (*this, matrix<value_type> (*this + ae));
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ symmetric_adaptor &plus_assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_plus_assign, triangular_type> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ symmetric_adaptor& operator -= (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_assign, triangular_type> (*this, matrix<value_type> (*this - ae));
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ symmetric_adaptor &minus_assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_minus_assign, triangular_type> (*this, ae);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ symmetric_adaptor& operator *= (const AT &at) {
+ matrix_assign_scalar<scalar_multiplies_assign> (*this, at);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ symmetric_adaptor& operator /= (const AT &at) {
+ matrix_assign_scalar<scalar_divides_assign> (*this, at);
+ return *this;
+ }
+
+ // Closure comparison
+ BOOST_UBLAS_INLINE
+ bool same_closure (const symmetric_adaptor &sa) const {
+ return (*this).data ().same_closure (sa.data ());
+ }
+
+ // Swapping
+ BOOST_UBLAS_INLINE
+ void swap (symmetric_adaptor &m) {
+ if (this != &m)
+ matrix_swap<scalar_swap, triangular_type> (*this, m);
+ }
+ BOOST_UBLAS_INLINE
+ friend void swap (symmetric_adaptor &m1, symmetric_adaptor &m2) {
+ m1.swap (m2);
+ }
+
+ // Iterator types
+ private:
+ // Use matrix iterator
+ typedef typename M::const_iterator1 const_subiterator1_type;
+ typedef typename boost::mpl::if_<boost::is_const<M>,
+ typename M::const_iterator1,
+ typename M::iterator1>::type subiterator1_type;
+ typedef typename M::const_iterator2 const_subiterator2_type;
+ typedef typename boost::mpl::if_<boost::is_const<M>,
+ typename M::const_iterator2,
+ typename M::iterator2>::type subiterator2_type;
+
+ public:
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ typedef indexed_iterator1<self_type, packed_random_access_iterator_tag> iterator1;
+ typedef indexed_iterator2<self_type, packed_random_access_iterator_tag> iterator2;
+ typedef indexed_const_iterator1<self_type, dense_random_access_iterator_tag> const_iterator1;
+ typedef indexed_const_iterator2<self_type, dense_random_access_iterator_tag> const_iterator2;
+#else
+ class const_iterator1;
+ class iterator1;
+ class const_iterator2;
+ class iterator2;
+#endif
+ typedef reverse_iterator_base1<const_iterator1> const_reverse_iterator1;
+ typedef reverse_iterator_base1<iterator1> reverse_iterator1;
+ typedef reverse_iterator_base2<const_iterator2> const_reverse_iterator2;
+ typedef reverse_iterator_base2<iterator2> reverse_iterator2;
+
+ // Element lookup
+ BOOST_UBLAS_INLINE
+ const_iterator1 find1 (int rank, size_type i, size_type j) const {
+ if (triangular_type::other (i, j)) {
+ if (triangular_type::other (size1 (), j)) {
+ return const_iterator1 (*this, 0, 0,
+ data ().find1 (rank, i, j), data ().find1 (rank, size1 (), j),
+ data ().find2 (rank, size2 (), size1 ()), data ().find2 (rank, size2 (), size1 ()));
+ } else {
+ return const_iterator1 (*this, 0, 1,
+ data ().find1 (rank, i, j), data ().find1 (rank, j, j),
+ data ().find2 (rank, j, j), data ().find2 (rank, j, size1 ()));
+ }
+ } else {
+ if (triangular_type::other (size1 (), j)) {
+ return const_iterator1 (*this, 1, 0,
+ data ().find1 (rank, j, j), data ().find1 (rank, size1 (), j),
+ data ().find2 (rank, j, i), data ().find2 (rank, j, j));
+ } else {
+ return const_iterator1 (*this, 1, 1,
+ data ().find1 (rank, size1 (), size2 ()), data ().find1 (rank, size1 (), size2 ()),
+ data ().find2 (rank, j, i), data ().find2 (rank, j, size1 ()));
+ }
+ }
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 find1 (int rank, size_type i, size_type j) {
+ if (rank == 1)
+ i = triangular_type::mutable_restrict1 (i, j);
+ return iterator1 (*this, data ().find1 (rank, i, j));
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 find2 (int rank, size_type i, size_type j) const {
+ if (triangular_type::other (i, j)) {
+ if (triangular_type::other (i, size2 ())) {
+ return const_iterator2 (*this, 1, 1,
+ data ().find1 (rank, size2 (), size1 ()), data ().find1 (rank, size2 (), size1 ()),
+ data ().find2 (rank, i, j), data ().find2 (rank, i, size2 ()));
+ } else {
+ return const_iterator2 (*this, 1, 0,
+ data ().find1 (rank, i, i), data ().find1 (rank, size2 (), i),
+ data ().find2 (rank, i, j), data ().find2 (rank, i, i));
+ }
+ } else {
+ if (triangular_type::other (i, size2 ())) {
+ return const_iterator2 (*this, 0, 1,
+ data ().find1 (rank, j, i), data ().find1 (rank, i, i),
+ data ().find2 (rank, i, i), data ().find2 (rank, i, size2 ()));
+ } else {
+ return const_iterator2 (*this, 0, 0,
+ data ().find1 (rank, j, i), data ().find1 (rank, size2 (), i),
+ data ().find2 (rank, size1 (), size2 ()), data ().find2 (rank, size2 (), size2 ()));
+ }
+ }
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 find2 (int rank, size_type i, size_type j) {
+ if (rank == 1)
+ j = triangular_type::mutable_restrict2 (i, j);
+ return iterator2 (*this, data ().find2 (rank, i, j));
+ }
+
+ // Iterators simply are indices.
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator1:
+ public container_const_reference<symmetric_adaptor>,
+ public random_access_iterator_base<typename iterator_restrict_traits<
+ typename const_subiterator1_type::iterator_category, dense_random_access_iterator_tag>::iterator_category,
+ const_iterator1, value_type> {
+ public:
+ typedef typename const_subiterator1_type::value_type value_type;
+ typedef typename const_subiterator1_type::difference_type difference_type;
+ typedef typename const_subiterator1_type::reference reference;
+ typedef typename const_subiterator1_type::pointer pointer;
+
+ typedef const_iterator2 dual_iterator_type;
+ typedef const_reverse_iterator2 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator1 ():
+ container_const_reference<self_type> (),
+ begin_ (-1), end_ (-1), current_ (-1),
+ it1_begin_ (), it1_end_ (), it1_ (),
+ it2_begin_ (), it2_end_ (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator1 (const self_type &m, int begin, int end,
+ const const_subiterator1_type &it1_begin, const const_subiterator1_type &it1_end,
+ const const_subiterator2_type &it2_begin, const const_subiterator2_type &it2_end):
+ container_const_reference<self_type> (m),
+ begin_ (begin), end_ (end), current_ (begin),
+ it1_begin_ (it1_begin), it1_end_ (it1_end), it1_ (it1_begin_),
+ it2_begin_ (it2_begin), it2_end_ (it2_end), it2_ (it2_begin_) {
+ if (current_ == 0 && it1_ == it1_end_)
+ current_ = 1;
+ if (current_ == 1 && it2_ == it2_end_)
+ current_ = 0;
+ if ((current_ == 0 && it1_ == it1_end_) ||
+ (current_ == 1 && it2_ == it2_end_))
+ current_ = end_;
+ BOOST_UBLAS_CHECK (current_ == end_ ||
+ (current_ == 0 && it1_ != it1_end_) ||
+ (current_ == 1 && it2_ != it2_end_), internal_logic ());
+ }
+ // FIXME cannot compile
+ // iterator1 does not have these members!
+ BOOST_UBLAS_INLINE
+ const_iterator1 (const iterator1 &it):
+ container_const_reference<self_type> (it ()),
+ begin_ (it.begin_), end_ (it.end_), current_ (it.current_),
+ it1_begin_ (it.it1_begin_), it1_end_ (it.it1_end_), it1_ (it.it1_),
+ it2_begin_ (it.it2_begin_), it2_end_ (it.it2_end_), it2_ (it.it2_) {
+ BOOST_UBLAS_CHECK (current_ == end_ ||
+ (current_ == 0 && it1_ != it1_end_) ||
+ (current_ == 1 && it2_ != it2_end_), internal_logic ());
+ }
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator ++ () {
+ BOOST_UBLAS_CHECK (current_ == 0 || current_ == 1, internal_logic ());
+ if (current_ == 0) {
+ BOOST_UBLAS_CHECK (it1_ != it1_end_, internal_logic ());
+ ++ it1_;
+ if (it1_ == it1_end_ && end_ == 1) {
+ it2_ = it2_begin_;
+ current_ = 1;
+ }
+ } else /* if (current_ == 1) */ {
+ BOOST_UBLAS_CHECK (it2_ != it2_end_, internal_logic ());
+ ++ it2_;
+ if (it2_ == it2_end_ && end_ == 0) {
+ it1_ = it1_begin_;
+ current_ = 0;
+ }
+ }
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator -- () {
+ BOOST_UBLAS_CHECK (current_ == 0 || current_ == 1, internal_logic ());
+ if (current_ == 0) {
+ if (it1_ == it1_begin_ && begin_ == 1) {
+ it2_ = it2_end_;
+ BOOST_UBLAS_CHECK (it2_ != it2_begin_, internal_logic ());
+ -- it2_;
+ current_ = 1;
+ } else {
+ -- it1_;
+ }
+ } else /* if (current_ == 1) */ {
+ if (it2_ == it2_begin_ && begin_ == 0) {
+ it1_ = it1_end_;
+ BOOST_UBLAS_CHECK (it1_ != it1_begin_, internal_logic ());
+ -- it1_;
+ current_ = 0;
+ } else {
+ -- it2_;
+ }
+ }
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator += (difference_type n) {
+ BOOST_UBLAS_CHECK (current_ == 0 || current_ == 1, internal_logic ());
+ if (current_ == 0) {
+ size_type d = (std::min) (n, it1_end_ - it1_);
+ it1_ += d;
+ n -= d;
+ if (n > 0 || (end_ == 1 && it1_ == it1_end_)) {
+ BOOST_UBLAS_CHECK (end_ == 1, external_logic ());
+ d = (std::min) (n, it2_end_ - it2_begin_);
+ it2_ = it2_begin_ + d;
+ n -= d;
+ current_ = 1;
+ }
+ } else /* if (current_ == 1) */ {
+ size_type d = (std::min) (n, it2_end_ - it2_);
+ it2_ += d;
+ n -= d;
+ if (n > 0 || (end_ == 0 && it2_ == it2_end_)) {
+ BOOST_UBLAS_CHECK (end_ == 0, external_logic ());
+ d = (std::min) (n, it1_end_ - it1_begin_);
+ it1_ = it1_begin_ + d;
+ n -= d;
+ current_ = 0;
+ }
+ }
+ BOOST_UBLAS_CHECK (n == 0, external_logic ());
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator -= (difference_type n) {
+ BOOST_UBLAS_CHECK (current_ == 0 || current_ == 1, internal_logic ());
+ if (current_ == 0) {
+ size_type d = (std::min) (n, it1_ - it1_begin_);
+ it1_ -= d;
+ n -= d;
+ if (n > 0) {
+ BOOST_UBLAS_CHECK (end_ == 1, external_logic ());
+ d = (std::min) (n, it2_end_ - it2_begin_);
+ it2_ = it2_end_ - d;
+ n -= d;
+ current_ = 1;
+ }
+ } else /* if (current_ == 1) */ {
+ size_type d = (std::min) (n, it2_ - it2_begin_);
+ it2_ -= d;
+ n -= d;
+ if (n > 0) {
+ BOOST_UBLAS_CHECK (end_ == 0, external_logic ());
+ d = (std::min) (n, it1_end_ - it1_begin_);
+ it1_ = it1_end_ - d;
+ n -= d;
+ current_ = 0;
+ }
+ }
+ BOOST_UBLAS_CHECK (n == 0, external_logic ());
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (current_ == 0 || current_ == 1, internal_logic ());
+ BOOST_UBLAS_CHECK (it.current_ == 0 || it.current_ == 1, internal_logic ());
+ BOOST_UBLAS_CHECK (/* begin_ == it.begin_ && */ end_ == it.end_, internal_logic ());
+ if (current_ == 0 && it.current_ == 0) {
+ return it1_ - it.it1_;
+ } else if (current_ == 0 && it.current_ == 1) {
+ if (end_ == 1 && it.end_ == 1) {
+ return (it1_ - it.it1_end_) + (it.it2_begin_ - it.it2_);
+ } else /* if (end_ == 0 && it.end_ == 0) */ {
+ return (it1_ - it.it1_begin_) + (it.it2_end_ - it.it2_);
+ }
+
+ } else if (current_ == 1 && it.current_ == 0) {
+ if (end_ == 1 && it.end_ == 1) {
+ return (it2_ - it.it2_begin_) + (it.it1_end_ - it.it1_);
+ } else /* if (end_ == 0 && it.end_ == 0) */ {
+ return (it2_ - it.it2_end_) + (it.it1_begin_ - it.it1_);
+ }
+ }
+ /* current_ == 1 && it.current_ == 1 */ {
+ return it2_ - it.it2_;
+ }
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ BOOST_UBLAS_CHECK (current_ == 0 || current_ == 1, internal_logic ());
+ if (current_ == 0) {
+ BOOST_UBLAS_CHECK (it1_ != it1_end_, internal_logic ());
+ return *it1_;
+ } else /* if (current_ == 1) */ {
+ BOOST_UBLAS_CHECK (it2_ != it2_end_, internal_logic ());
+ return *it2_;
+ }
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 begin () const {
+ return (*this) ().find2 (1, index1 (), 0);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 end () const {
+ return (*this) ().find2 (1, index1 (), (*this) ().size2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rbegin () const {
+ return const_reverse_iterator2 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rend () const {
+ return const_reverse_iterator2 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ BOOST_UBLAS_CHECK (current_ == 0 || current_ == 1, internal_logic ());
+ if (current_ == 0) {
+ BOOST_UBLAS_CHECK (it1_ != it1_end_, internal_logic ());
+ return it1_.index1 ();
+ } else /* if (current_ == 1) */ {
+ BOOST_UBLAS_CHECK (it2_ != it2_end_, internal_logic ());
+ return it2_.index2 ();
+ }
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ BOOST_UBLAS_CHECK (current_ == 0 || current_ == 1, internal_logic ());
+ if (current_ == 0) {
+ BOOST_UBLAS_CHECK (it1_ != it1_end_, internal_logic ());
+ return it1_.index2 ();
+ } else /* if (current_ == 1) */ {
+ BOOST_UBLAS_CHECK (it2_ != it2_end_, internal_logic ());
+ return it2_.index1 ();
+ }
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator = (const const_iterator1 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ begin_ = it.begin_;
+ end_ = it.end_;
+ current_ = it.current_;
+ it1_begin_ = it.it1_begin_;
+ it1_end_ = it.it1_end_;
+ it1_ = it.it1_;
+ it2_begin_ = it.it2_begin_;
+ it2_end_ = it.it2_end_;
+ it2_ = it.it2_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (current_ == 0 || current_ == 1, internal_logic ());
+ BOOST_UBLAS_CHECK (it.current_ == 0 || it.current_ == 1, internal_logic ());
+ BOOST_UBLAS_CHECK (/* begin_ == it.begin_ && */ end_ == it.end_, internal_logic ());
+ return (current_ == 0 && it.current_ == 0 && it1_ == it.it1_) ||
+ (current_ == 1 && it.current_ == 1 && it2_ == it.it2_);
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it - *this > 0;
+ }
+
+ private:
+ int begin_;
+ int end_;
+ int current_;
+ const_subiterator1_type it1_begin_;
+ const_subiterator1_type it1_end_;
+ const_subiterator1_type it1_;
+ const_subiterator2_type it2_begin_;
+ const_subiterator2_type it2_end_;
+ const_subiterator2_type it2_;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator1 begin1 () const {
+ return find1 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 end1 () const {
+ return find1 (0, size1 (), 0);
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class iterator1:
+ public container_reference<symmetric_adaptor>,
+ public random_access_iterator_base<typename iterator_restrict_traits<
+ typename subiterator1_type::iterator_category, packed_random_access_iterator_tag>::iterator_category,
+ iterator1, value_type> {
+ public:
+ typedef typename subiterator1_type::value_type value_type;
+ typedef typename subiterator1_type::difference_type difference_type;
+ typedef typename subiterator1_type::reference reference;
+ typedef typename subiterator1_type::pointer pointer;
+
+ typedef iterator2 dual_iterator_type;
+ typedef reverse_iterator2 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ iterator1 ():
+ container_reference<self_type> (), it1_ () {}
+ BOOST_UBLAS_INLINE
+ iterator1 (self_type &m, const subiterator1_type &it1):
+ container_reference<self_type> (m), it1_ (it1) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ iterator1 &operator ++ () {
+ ++ it1_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 &operator -- () {
+ -- it1_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 &operator += (difference_type n) {
+ it1_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 &operator -= (difference_type n) {
+ it1_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it1_ - it.it1_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ return *it1_;
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator2 begin () const {
+ return (*this) ().find2 (1, index1 (), 0);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator2 end () const {
+ return (*this) ().find2 (1, index1 (), (*this) ().size2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator2 rbegin () const {
+ return reverse_iterator2 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator2 rend () const {
+ return reverse_iterator2 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it1_.index1 ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it1_.index2 ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ iterator1 &operator = (const iterator1 &it) {
+ container_reference<self_type>::assign (&it ());
+ it1_ = it.it1_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it1_ == it.it1_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it1_ < it.it1_;
+ }
+
+ private:
+ subiterator1_type it1_;
+
+ friend class const_iterator1;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ iterator1 begin1 () {
+ return find1 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 end1 () {
+ return find1 (0, size1 (), 0);
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator2:
+ public container_const_reference<symmetric_adaptor>,
+ public random_access_iterator_base<typename iterator_restrict_traits<
+ typename const_subiterator2_type::iterator_category, dense_random_access_iterator_tag>::iterator_category,
+ const_iterator2, value_type> {
+ public:
+ typedef typename const_subiterator2_type::value_type value_type;
+ typedef typename const_subiterator2_type::difference_type difference_type;
+ typedef typename const_subiterator2_type::reference reference;
+ typedef typename const_subiterator2_type::pointer pointer;
+
+ typedef const_iterator1 dual_iterator_type;
+ typedef const_reverse_iterator1 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator2 ():
+ container_const_reference<self_type> (),
+ begin_ (-1), end_ (-1), current_ (-1),
+ it1_begin_ (), it1_end_ (), it1_ (),
+ it2_begin_ (), it2_end_ (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator2 (const self_type &m, int begin, int end,
+ const const_subiterator1_type &it1_begin, const const_subiterator1_type &it1_end,
+ const const_subiterator2_type &it2_begin, const const_subiterator2_type &it2_end):
+ container_const_reference<self_type> (m),
+ begin_ (begin), end_ (end), current_ (begin),
+ it1_begin_ (it1_begin), it1_end_ (it1_end), it1_ (it1_begin_),
+ it2_begin_ (it2_begin), it2_end_ (it2_end), it2_ (it2_begin_) {
+ if (current_ == 0 && it1_ == it1_end_)
+ current_ = 1;
+ if (current_ == 1 && it2_ == it2_end_)
+ current_ = 0;
+ if ((current_ == 0 && it1_ == it1_end_) ||
+ (current_ == 1 && it2_ == it2_end_))
+ current_ = end_;
+ BOOST_UBLAS_CHECK (current_ == end_ ||
+ (current_ == 0 && it1_ != it1_end_) ||
+ (current_ == 1 && it2_ != it2_end_), internal_logic ());
+ }
+ // FIXME cannot compiler
+ // iterator2 does not have these members!
+ BOOST_UBLAS_INLINE
+ const_iterator2 (const iterator2 &it):
+ container_const_reference<self_type> (it ()),
+ begin_ (it.begin_), end_ (it.end_), current_ (it.current_),
+ it1_begin_ (it.it1_begin_), it1_end_ (it.it1_end_), it1_ (it.it1_),
+ it2_begin_ (it.it2_begin_), it2_end_ (it.it2_end_), it2_ (it.it2_) {
+ BOOST_UBLAS_CHECK (current_ == end_ ||
+ (current_ == 0 && it1_ != it1_end_) ||
+ (current_ == 1 && it2_ != it2_end_), internal_logic ());
+ }
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator ++ () {
+ BOOST_UBLAS_CHECK (current_ == 0 || current_ == 1, internal_logic ());
+ if (current_ == 0) {
+ BOOST_UBLAS_CHECK (it1_ != it1_end_, internal_logic ());
+ ++ it1_;
+ if (it1_ == it1_end_ && end_ == 1) {
+ it2_ = it2_begin_;
+ current_ = 1;
+ }
+ } else /* if (current_ == 1) */ {
+ BOOST_UBLAS_CHECK (it2_ != it2_end_, internal_logic ());
+ ++ it2_;
+ if (it2_ == it2_end_ && end_ == 0) {
+ it1_ = it1_begin_;
+ current_ = 0;
+ }
+ }
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator -- () {
+ BOOST_UBLAS_CHECK (current_ == 0 || current_ == 1, internal_logic ());
+ if (current_ == 0) {
+ if (it1_ == it1_begin_ && begin_ == 1) {
+ it2_ = it2_end_;
+ BOOST_UBLAS_CHECK (it2_ != it2_begin_, internal_logic ());
+ -- it2_;
+ current_ = 1;
+ } else {
+ -- it1_;
+ }
+ } else /* if (current_ == 1) */ {
+ if (it2_ == it2_begin_ && begin_ == 0) {
+ it1_ = it1_end_;
+ BOOST_UBLAS_CHECK (it1_ != it1_begin_, internal_logic ());
+ -- it1_;
+ current_ = 0;
+ } else {
+ -- it2_;
+ }
+ }
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator += (difference_type n) {
+ BOOST_UBLAS_CHECK (current_ == 0 || current_ == 1, internal_logic ());
+ if (current_ == 0) {
+ size_type d = (std::min) (n, it1_end_ - it1_);
+ it1_ += d;
+ n -= d;
+ if (n > 0 || (end_ == 1 && it1_ == it1_end_)) {
+ BOOST_UBLAS_CHECK (end_ == 1, external_logic ());
+ d = (std::min) (n, it2_end_ - it2_begin_);
+ it2_ = it2_begin_ + d;
+ n -= d;
+ current_ = 1;
+ }
+ } else /* if (current_ == 1) */ {
+ size_type d = (std::min) (n, it2_end_ - it2_);
+ it2_ += d;
+ n -= d;
+ if (n > 0 || (end_ == 0 && it2_ == it2_end_)) {
+ BOOST_UBLAS_CHECK (end_ == 0, external_logic ());
+ d = (std::min) (n, it1_end_ - it1_begin_);
+ it1_ = it1_begin_ + d;
+ n -= d;
+ current_ = 0;
+ }
+ }
+ BOOST_UBLAS_CHECK (n == 0, external_logic ());
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator -= (difference_type n) {
+ BOOST_UBLAS_CHECK (current_ == 0 || current_ == 1, internal_logic ());
+ if (current_ == 0) {
+ size_type d = (std::min) (n, it1_ - it1_begin_);
+ it1_ -= d;
+ n -= d;
+ if (n > 0) {
+ BOOST_UBLAS_CHECK (end_ == 1, external_logic ());
+ d = (std::min) (n, it2_end_ - it2_begin_);
+ it2_ = it2_end_ - d;
+ n -= d;
+ current_ = 1;
+ }
+ } else /* if (current_ == 1) */ {
+ size_type d = (std::min) (n, it2_ - it2_begin_);
+ it2_ -= d;
+ n -= d;
+ if (n > 0) {
+ BOOST_UBLAS_CHECK (end_ == 0, external_logic ());
+ d = (std::min) (n, it1_end_ - it1_begin_);
+ it1_ = it1_end_ - d;
+ n -= d;
+ current_ = 0;
+ }
+ }
+ BOOST_UBLAS_CHECK (n == 0, external_logic ());
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (current_ == 0 || current_ == 1, internal_logic ());
+ BOOST_UBLAS_CHECK (it.current_ == 0 || it.current_ == 1, internal_logic ());
+ BOOST_UBLAS_CHECK (/* begin_ == it.begin_ && */ end_ == it.end_, internal_logic ());
+ if (current_ == 0 && it.current_ == 0) {
+ return it1_ - it.it1_;
+ } else if (current_ == 0 && it.current_ == 1) {
+ if (end_ == 1 && it.end_ == 1) {
+ return (it1_ - it.it1_end_) + (it.it2_begin_ - it.it2_);
+ } else /* if (end_ == 0 && it.end_ == 0) */ {
+ return (it1_ - it.it1_begin_) + (it.it2_end_ - it.it2_);
+ }
+
+ } else if (current_ == 1 && it.current_ == 0) {
+ if (end_ == 1 && it.end_ == 1) {
+ return (it2_ - it.it2_begin_) + (it.it1_end_ - it.it1_);
+ } else /* if (end_ == 0 && it.end_ == 0) */ {
+ return (it2_ - it.it2_end_) + (it.it1_begin_ - it.it1_);
+ }
+ }
+ /* current_ == 1 && it.current_ == 1 */ {
+ return it2_ - it.it2_;
+ }
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ BOOST_UBLAS_CHECK (current_ == 0 || current_ == 1, internal_logic ());
+ if (current_ == 0) {
+ BOOST_UBLAS_CHECK (it1_ != it1_end_, internal_logic ());
+ return *it1_;
+ } else /* if (current_ == 1) */ {
+ BOOST_UBLAS_CHECK (it2_ != it2_end_, internal_logic ());
+ return *it2_;
+ }
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 begin () const {
+ return (*this) ().find1 (1, 0, index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 end () const {
+ return (*this) ().find1 (1, (*this) ().size1 (), index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rbegin () const {
+ return const_reverse_iterator1 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rend () const {
+ return const_reverse_iterator1 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ BOOST_UBLAS_CHECK (current_ == 0 || current_ == 1, internal_logic ());
+ if (current_ == 0) {
+ BOOST_UBLAS_CHECK (it1_ != it1_end_, internal_logic ());
+ return it1_.index2 ();
+ } else /* if (current_ == 1) */ {
+ BOOST_UBLAS_CHECK (it2_ != it2_end_, internal_logic ());
+ return it2_.index1 ();
+ }
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ BOOST_UBLAS_CHECK (current_ == 0 || current_ == 1, internal_logic ());
+ if (current_ == 0) {
+ BOOST_UBLAS_CHECK (it1_ != it1_end_, internal_logic ());
+ return it1_.index1 ();
+ } else /* if (current_ == 1) */ {
+ BOOST_UBLAS_CHECK (it2_ != it2_end_, internal_logic ());
+ return it2_.index2 ();
+ }
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator = (const const_iterator2 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ begin_ = it.begin_;
+ end_ = it.end_;
+ current_ = it.current_;
+ it1_begin_ = it.it1_begin_;
+ it1_end_ = it.it1_end_;
+ it1_ = it.it1_;
+ it2_begin_ = it.it2_begin_;
+ it2_end_ = it.it2_end_;
+ it2_ = it.it2_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (current_ == 0 || current_ == 1, internal_logic ());
+ BOOST_UBLAS_CHECK (it.current_ == 0 || it.current_ == 1, internal_logic ());
+ BOOST_UBLAS_CHECK (/* begin_ == it.begin_ && */ end_ == it.end_, internal_logic ());
+ return (current_ == 0 && it.current_ == 0 && it1_ == it.it1_) ||
+ (current_ == 1 && it.current_ == 1 && it2_ == it.it2_);
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it - *this > 0;
+ }
+
+ private:
+ int begin_;
+ int end_;
+ int current_;
+ const_subiterator1_type it1_begin_;
+ const_subiterator1_type it1_end_;
+ const_subiterator1_type it1_;
+ const_subiterator2_type it2_begin_;
+ const_subiterator2_type it2_end_;
+ const_subiterator2_type it2_;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator2 begin2 () const {
+ return find2 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 end2 () const {
+ return find2 (0, 0, size2 ());
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class iterator2:
+ public container_reference<symmetric_adaptor>,
+ public random_access_iterator_base<typename iterator_restrict_traits<
+ typename subiterator2_type::iterator_category, packed_random_access_iterator_tag>::iterator_category,
+ iterator2, value_type> {
+ public:
+ typedef typename subiterator2_type::value_type value_type;
+ typedef typename subiterator2_type::difference_type difference_type;
+ typedef typename subiterator2_type::reference reference;
+ typedef typename subiterator2_type::pointer pointer;
+
+ typedef iterator1 dual_iterator_type;
+ typedef reverse_iterator1 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ iterator2 ():
+ container_reference<self_type> (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ iterator2 (self_type &m, const subiterator2_type &it2):
+ container_reference<self_type> (m), it2_ (it2) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ iterator2 &operator ++ () {
+ ++ it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 &operator -- () {
+ -- it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 &operator += (difference_type n) {
+ it2_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 &operator -= (difference_type n) {
+ it2_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it2_ - it.it2_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ return *it2_;
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator1 begin () const {
+ return (*this) ().find1 (1, 0, index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator1 end () const {
+ return (*this) ().find1 (1, (*this) ().size1 (), index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator1 rbegin () const {
+ return reverse_iterator1 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator1 rend () const {
+ return reverse_iterator1 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it2_.index1 ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it2_.index2 ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ iterator2 &operator = (const iterator2 &it) {
+ container_reference<self_type>::assign (&it ());
+ it2_ = it.it2_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it2_ == it.it2_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it2_ < it.it2_;
+ }
+
+ private:
+ subiterator2_type it2_;
+
+ friend class const_iterator2;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ iterator2 begin2 () {
+ return find2 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 end2 () {
+ return find2 (0, 0, size2 ());
+ }
+
+ // Reverse iterators
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rbegin1 () const {
+ return const_reverse_iterator1 (end1 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rend1 () const {
+ return const_reverse_iterator1 (begin1 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ reverse_iterator1 rbegin1 () {
+ return reverse_iterator1 (end1 ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator1 rend1 () {
+ return reverse_iterator1 (begin1 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rbegin2 () const {
+ return const_reverse_iterator2 (end2 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rend2 () const {
+ return const_reverse_iterator2 (begin2 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ reverse_iterator2 rbegin2 () {
+ return reverse_iterator2 (end2 ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator2 rend2 () {
+ return reverse_iterator2 (begin2 ());
+ }
+
+ private:
+ matrix_closure_type data_;
+ };
+
+ // Specialization for temporary_traits
+ template <class M, class TRI>
+ struct vector_temporary_traits< symmetric_adaptor<M, TRI> >
+ : vector_temporary_traits< M > {} ;
+ template <class M, class TRI>
+ struct vector_temporary_traits< const symmetric_adaptor<M, TRI> >
+ : vector_temporary_traits< M > {} ;
+
+ template <class M, class TRI>
+ struct matrix_temporary_traits< symmetric_adaptor<M, TRI> >
+ : matrix_temporary_traits< M > {} ;
+ template <class M, class TRI>
+ struct matrix_temporary_traits< const symmetric_adaptor<M, TRI> >
+ : matrix_temporary_traits< M > {} ;
+
+}}}
+
+#endif
diff --git a/boost/boost/numeric/ublas/traits.hpp b/boost/boost/numeric/ublas/traits.hpp
new file mode 100644
index 00000000000..a23fa171fd1
--- /dev/null
+++ b/boost/boost/numeric/ublas/traits.hpp
@@ -0,0 +1,537 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without fee,
+// provided that the above copyright notice appear in all copies and
+// that both that copyright notice and this permission notice appear
+// in supporting documentation. The authors make no representations
+// about the suitability of this software for any purpose.
+// It is provided "as is" without express or implied warranty.
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#ifndef _BOOST_UBLAS_TRAITS_
+#define _BOOST_UBLAS_TRAITS_
+
+#include <iterator>
+#include <complex>
+#include <cmath>
+
+#include <boost/numeric/ublas/detail/config.hpp>
+#include <boost/numeric/ublas/detail/iterator.hpp>
+#include <boost/numeric/ublas/detail/returntype_deduction.hpp>
+
+
+namespace boost { namespace numeric { namespace ublas {
+
+ // Use Joel de Guzman's return type deduction
+ // uBLAS assumes a common return type for all binary arithmetic operators
+ template<class X, class Y>
+ struct promote_traits {
+ typedef type_deduction_detail::base_result_of<X, Y> base_type;
+ static typename base_type::x_type x;
+ static typename base_type::y_type y;
+ static const std::size_t size = sizeof (
+ type_deduction_detail::test<
+ typename base_type::x_type
+ , typename base_type::y_type
+ >(x + y) // Use x+y to stand of all the arithmetic actions
+ );
+
+ static const std::size_t index = (size / sizeof (char)) - 1;
+ typedef typename mpl::at_c<
+ typename base_type::types, index>::type id;
+ typedef typename id::type promote_type;
+ };
+
+
+ // Type traits - generic numeric properties and functions
+ template<class T>
+ struct type_traits;
+
+ // Define properties for a generic scalar type
+ template<class T>
+ struct scalar_traits {
+ typedef scalar_traits<T> self_type;
+ typedef T value_type;
+ typedef const T &const_reference;
+ typedef T &reference;
+
+ typedef T real_type;
+ typedef real_type precision_type; // we do not know what type has more precision then the real_type
+
+ static const unsigned plus_complexity = 1;
+ static const unsigned multiplies_complexity = 1;
+
+ static
+ BOOST_UBLAS_INLINE
+ real_type real (const_reference t) {
+ return t;
+ }
+ static
+ BOOST_UBLAS_INLINE
+ real_type imag (const_reference /*t*/) {
+ return 0;
+ }
+ static
+ BOOST_UBLAS_INLINE
+ value_type conj (const_reference t) {
+ return t;
+ }
+
+ static
+ BOOST_UBLAS_INLINE
+ real_type type_abs (const_reference t) {
+ return std::abs (t); // must use explict std:: as bultin types are not in std namespace
+ }
+ static
+ BOOST_UBLAS_INLINE
+ value_type type_sqrt (const_reference t) {
+ // force a type conversion back to value_type for intgral types
+ return value_type (std::sqrt (t)); // must use explict std:: as bultin types are not in std namespace
+ }
+
+ static
+ BOOST_UBLAS_INLINE
+ real_type norm_1 (const_reference t) {
+ return self_type::type_abs (t);
+ }
+ static
+ BOOST_UBLAS_INLINE
+ real_type norm_2 (const_reference t) {
+ return self_type::type_abs (t);
+ }
+ static
+ BOOST_UBLAS_INLINE
+ real_type norm_inf (const_reference t) {
+ return self_type::type_abs (t);
+ }
+
+ static
+ BOOST_UBLAS_INLINE
+ bool equals (const_reference t1, const_reference t2) {
+ return self_type::norm_inf (t1 - t2) < BOOST_UBLAS_TYPE_CHECK_EPSILON *
+ (std::max) ((std::max) (self_type::norm_inf (t1),
+ self_type::norm_inf (t2)),
+ BOOST_UBLAS_TYPE_CHECK_MIN);
+ }
+ };
+
+ // Define default type traits, assume T is a scalar type
+ template<class T>
+ struct type_traits : scalar_traits <T> {
+ typedef type_traits<T> self_type;
+ typedef T value_type;
+ typedef const T &const_reference;
+ typedef T &reference;
+
+ typedef T real_type;
+ typedef real_type precision_type;
+ static const unsigned multiplies_complexity = 1;
+
+ };
+
+ // Define real type traits
+ template<>
+ struct type_traits<float> : scalar_traits<float> {
+ typedef type_traits<float> self_type;
+ typedef float value_type;
+ typedef const value_type &const_reference;
+ typedef value_type &reference;
+ typedef value_type real_type;
+ typedef double precision_type;
+ };
+ template<>
+ struct type_traits<double> : scalar_traits<double> {
+ typedef type_traits<double> self_type;
+ typedef double value_type;
+ typedef const value_type &const_reference;
+ typedef value_type &reference;
+ typedef value_type real_type;
+ typedef long double precision_type;
+ };
+ template<>
+ struct type_traits<long double> : scalar_traits<long double> {
+ typedef type_traits<long double> self_type;
+ typedef long double value_type;
+ typedef const value_type &const_reference;
+ typedef value_type &reference;
+ typedef value_type real_type;
+ typedef value_type precision_type;
+ };
+
+ // Define properties for a generic complex type
+ template<class T>
+ struct complex_traits {
+ typedef complex_traits<T> self_type;
+ typedef T value_type;
+ typedef const T &const_reference;
+ typedef T &reference;
+
+ typedef typename T::value_type real_type;
+ typedef real_type precision_type; // we do not know what type has more precision then the real_type
+
+ static const unsigned plus_complexity = 2;
+ static const unsigned multiplies_complexity = 6;
+
+ static
+ BOOST_UBLAS_INLINE
+ real_type real (const_reference t) {
+ return std::real (t);
+ }
+ static
+ BOOST_UBLAS_INLINE
+ real_type imag (const_reference t) {
+ return std::imag (t);
+ }
+ static
+ BOOST_UBLAS_INLINE
+ value_type conj (const_reference t) {
+ return std::conj (t);
+ }
+
+ static
+ BOOST_UBLAS_INLINE
+ real_type type_abs (const_reference t) {
+ return abs (t);
+ }
+ static
+ BOOST_UBLAS_INLINE
+ value_type type_sqrt (const_reference t) {
+ return sqrt (t);
+ }
+
+ static
+ BOOST_UBLAS_INLINE
+ real_type norm_1 (const_reference t) {
+ return type_traits<real_type>::type_abs (self_type::real (t)) +
+ type_traits<real_type>::type_abs (self_type::imag (t));
+ }
+ static
+ BOOST_UBLAS_INLINE
+ real_type norm_2 (const_reference t) {
+ return self_type::type_abs (t);
+ }
+ static
+ BOOST_UBLAS_INLINE
+ real_type norm_inf (const_reference t) {
+ return (std::max) (type_traits<real_type>::type_abs (self_type::real (t)),
+ type_traits<real_type>::type_abs (self_type::imag (t)));
+ }
+
+ static
+ BOOST_UBLAS_INLINE
+ bool equals (const_reference t1, const_reference t2) {
+ return self_type::norm_inf (t1 - t2) < BOOST_UBLAS_TYPE_CHECK_EPSILON *
+ (std::max) ((std::max) (self_type::norm_inf (t1),
+ self_type::norm_inf (t2)),
+ BOOST_UBLAS_TYPE_CHECK_MIN);
+ }
+ };
+
+ // Define complex type traits
+ template<>
+ struct type_traits<std::complex<float> > : complex_traits<std::complex<float> >{
+ typedef type_traits<std::complex<float> > self_type;
+ typedef std::complex<float> value_type;
+ typedef const value_type &const_reference;
+ typedef value_type &reference;
+ typedef float real_type;
+ typedef std::complex<double> precision_type;
+
+ };
+ template<>
+ struct type_traits<std::complex<double> > : complex_traits<std::complex<double> >{
+ typedef type_traits<std::complex<double> > self_type;
+ typedef std::complex<double> value_type;
+ typedef const value_type &const_reference;
+ typedef value_type &reference;
+ typedef double real_type;
+ typedef std::complex<long double> precision_type;
+ };
+ template<>
+ struct type_traits<std::complex<long double> > : complex_traits<std::complex<long double> > {
+ typedef type_traits<std::complex<long double> > self_type;
+ typedef std::complex<long double> value_type;
+ typedef const value_type &const_reference;
+ typedef value_type &reference;
+ typedef long double real_type;
+ typedef value_type precision_type;
+ };
+
+#ifdef BOOST_UBLAS_USE_INTERVAL
+ // Define properties for a generic scalar interval type
+ template<class T>
+ struct scalar_interval_type_traits : scalar_type_traits<T> {
+ typedef scalar_interval_type_traits<T> self_type;
+ typedef boost::numeric::interval<float> value_type;
+ typedef const value_type &const_reference;
+ typedef value_type &reference;
+ typedef value_type real_type;
+ typedef real_type precision_type; // we do not know what type has more precision then the real_type
+
+ static const unsigned plus_complexity = 1;
+ static const unsigned multiplies_complexity = 1;
+
+ static
+ BOOST_UBLAS_INLINE
+ real_type type_abs (const_reference t) {
+ return abs (t);
+ }
+ static
+ BOOST_UBLAS_INLINE
+ value_type type_sqrt (const_reference t) {
+ return sqrt (t);
+ }
+
+ static
+ BOOST_UBLAS_INLINE
+ real_type norm_1 (const_reference t) {
+ return self_type::type_abs (t);
+ }
+ static
+ BOOST_UBLAS_INLINE
+ real_type norm_2 (const_reference t) {
+ return self_type::type_abs (t);
+ }
+ static
+ BOOST_UBLAS_INLINE
+ real_type norm_inf (const_reference t) {
+ return self_type::type_abs (t);
+ }
+
+ static
+ BOOST_UBLAS_INLINE
+ bool equals (const_reference t1, const_reference t2) {
+ return self_type::norm_inf (t1 - t2) < BOOST_UBLAS_TYPE_CHECK_EPSILON *
+ (std::max) ((std::max) (self_type::norm_inf (t1),
+ self_type::norm_inf (t2)),
+ BOOST_UBLAS_TYPE_CHECK_MIN);
+ }
+ };
+
+ // Define scalar interval type traits
+ template<>
+ struct type_traits<boost::numeric::interval<float> > : scalar_interval_type_traits<boost::numeric::interval<float> > {
+ typedef type_traits<boost::numeric::interval<float> > self_type;
+ typedef boost::numeric::interval<float> value_type;
+ typedef const value_type &const_reference;
+ typedef value_type &reference;
+ typedef value_type real_type;
+ typedef boost::numeric::interval<double> precision_type;
+
+ };
+ template<>
+ struct type_traits<boost::numeric::interval<double> > : scalar_interval_type_traits<boost::numeric::interval<double> > {
+ typedef type_traits<boost::numeric::interval<double> > self_type;
+ typedef boost::numeric::interval<double> value_type;
+ typedef const value_type &const_reference;
+ typedef value_type &reference;
+ typedef value_type real_type;
+ typedef boost::numeric::interval<long double> precision_type;
+ };
+ template<>
+ struct type_traits<boost::numeric::interval<long double> > : scalar_interval_type_traits<boost::numeric::interval<long double> > {
+ typedef type_traits<boost::numeric::interval<long double> > self_type;
+ typedef boost::numeric::interval<long double> value_type;
+ typedef const value_type &const_reference;
+ typedef value_type &reference;
+ typedef value_type real_type;
+ typedef value_type precision_type;
+ };
+
+#endif
+
+
+ // Storage tags -- hierarchical definition of storage characteristics
+
+ struct unknown_storage_tag {};
+ struct sparse_proxy_tag: public unknown_storage_tag {};
+ struct sparse_tag: public sparse_proxy_tag {};
+ struct packed_proxy_tag: public sparse_proxy_tag {};
+ struct packed_tag: public packed_proxy_tag {};
+ struct dense_proxy_tag: public packed_proxy_tag {};
+ struct dense_tag: public dense_proxy_tag {};
+
+ template<class S1, class S2>
+ struct storage_restrict_traits {
+ typedef S1 storage_category;
+ };
+
+ template<>
+ struct storage_restrict_traits<sparse_tag, dense_proxy_tag> {
+ typedef sparse_proxy_tag storage_category;
+ };
+ template<>
+ struct storage_restrict_traits<sparse_tag, packed_proxy_tag> {
+ typedef sparse_proxy_tag storage_category;
+ };
+ template<>
+ struct storage_restrict_traits<sparse_tag, sparse_proxy_tag> {
+ typedef sparse_proxy_tag storage_category;
+ };
+
+ template<>
+ struct storage_restrict_traits<packed_tag, dense_proxy_tag> {
+ typedef packed_proxy_tag storage_category;
+ };
+ template<>
+ struct storage_restrict_traits<packed_tag, packed_proxy_tag> {
+ typedef packed_proxy_tag storage_category;
+ };
+ template<>
+ struct storage_restrict_traits<packed_tag, sparse_proxy_tag> {
+ typedef sparse_proxy_tag storage_category;
+ };
+
+ template<>
+ struct storage_restrict_traits<packed_proxy_tag, sparse_proxy_tag> {
+ typedef sparse_proxy_tag storage_category;
+ };
+
+ template<>
+ struct storage_restrict_traits<dense_tag, dense_proxy_tag> {
+ typedef dense_proxy_tag storage_category;
+ };
+ template<>
+ struct storage_restrict_traits<dense_tag, packed_proxy_tag> {
+ typedef packed_proxy_tag storage_category;
+ };
+ template<>
+ struct storage_restrict_traits<dense_tag, sparse_proxy_tag> {
+ typedef sparse_proxy_tag storage_category;
+ };
+
+ template<>
+ struct storage_restrict_traits<dense_proxy_tag, packed_proxy_tag> {
+ typedef packed_proxy_tag storage_category;
+ };
+ template<>
+ struct storage_restrict_traits<dense_proxy_tag, sparse_proxy_tag> {
+ typedef sparse_proxy_tag storage_category;
+ };
+
+
+ // Iterator tags -- hierarchical definition of storage characteristics
+
+ struct sparse_bidirectional_iterator_tag : public std::bidirectional_iterator_tag {};
+ struct packed_random_access_iterator_tag : public std::random_access_iterator_tag {};
+ struct dense_random_access_iterator_tag : public packed_random_access_iterator_tag {};
+
+ // Thanks to Kresimir Fresl for convincing Comeau with iterator_base_traits ;-)
+ template<class IC>
+ struct iterator_base_traits {};
+
+ template<>
+ struct iterator_base_traits<std::forward_iterator_tag> {
+ template<class I, class T>
+ struct iterator_base {
+ typedef forward_iterator_base<std::forward_iterator_tag, I, T> type;
+ };
+ };
+
+ template<>
+ struct iterator_base_traits<std::bidirectional_iterator_tag> {
+ template<class I, class T>
+ struct iterator_base {
+ typedef bidirectional_iterator_base<std::bidirectional_iterator_tag, I, T> type;
+ };
+ };
+ template<>
+ struct iterator_base_traits<sparse_bidirectional_iterator_tag> {
+ template<class I, class T>
+ struct iterator_base {
+ typedef bidirectional_iterator_base<sparse_bidirectional_iterator_tag, I, T> type;
+ };
+ };
+
+ template<>
+ struct iterator_base_traits<std::random_access_iterator_tag> {
+ template<class I, class T>
+ struct iterator_base {
+ typedef random_access_iterator_base<std::random_access_iterator_tag, I, T> type;
+ };
+ };
+ template<>
+ struct iterator_base_traits<packed_random_access_iterator_tag> {
+ template<class I, class T>
+ struct iterator_base {
+ typedef random_access_iterator_base<packed_random_access_iterator_tag, I, T> type;
+ };
+ };
+ template<>
+ struct iterator_base_traits<dense_random_access_iterator_tag> {
+ template<class I, class T>
+ struct iterator_base {
+ typedef random_access_iterator_base<dense_random_access_iterator_tag, I, T> type;
+ };
+ };
+
+ template<class I1, class I2>
+ struct iterator_restrict_traits {
+ typedef I1 iterator_category;
+ };
+
+ template<>
+ struct iterator_restrict_traits<packed_random_access_iterator_tag, sparse_bidirectional_iterator_tag> {
+ typedef sparse_bidirectional_iterator_tag iterator_category;
+ };
+ template<>
+ struct iterator_restrict_traits<sparse_bidirectional_iterator_tag, packed_random_access_iterator_tag> {
+ typedef sparse_bidirectional_iterator_tag iterator_category;
+ };
+
+ template<>
+ struct iterator_restrict_traits<dense_random_access_iterator_tag, sparse_bidirectional_iterator_tag> {
+ typedef sparse_bidirectional_iterator_tag iterator_category;
+ };
+ template<>
+ struct iterator_restrict_traits<sparse_bidirectional_iterator_tag, dense_random_access_iterator_tag> {
+ typedef sparse_bidirectional_iterator_tag iterator_category;
+ };
+
+ template<>
+ struct iterator_restrict_traits<dense_random_access_iterator_tag, packed_random_access_iterator_tag> {
+ typedef packed_random_access_iterator_tag iterator_category;
+ };
+ template<>
+ struct iterator_restrict_traits<packed_random_access_iterator_tag, dense_random_access_iterator_tag> {
+ typedef packed_random_access_iterator_tag iterator_category;
+ };
+
+ template<class I>
+ BOOST_UBLAS_INLINE
+ void increment (I &it, const I &it_end, typename I::difference_type compare, packed_random_access_iterator_tag) {
+ it += (std::min) (compare, it_end - it);
+ }
+ template<class I>
+ BOOST_UBLAS_INLINE
+ void increment (I &it, const I &/* it_end */, typename I::difference_type /* compare */, sparse_bidirectional_iterator_tag) {
+ ++ it;
+ }
+ template<class I>
+ BOOST_UBLAS_INLINE
+ void increment (I &it, const I &it_end, typename I::difference_type compare) {
+ increment (it, it_end, compare, typename I::iterator_category ());
+ }
+
+ template<class I>
+ BOOST_UBLAS_INLINE
+ void increment (I &it, const I &it_end) {
+#if BOOST_UBLAS_TYPE_CHECK
+ I cit (it);
+ while (cit != it_end) {
+ BOOST_UBLAS_CHECK (*cit == typename I::value_type/*zero*/(), internal_logic ());
+ ++ cit;
+ }
+#endif
+ it = it_end;
+ }
+
+}}}
+
+#endif
diff --git a/boost/boost/numeric/ublas/triangular.hpp b/boost/boost/numeric/ublas/triangular.hpp
new file mode 100644
index 00000000000..3979282a4d5
--- /dev/null
+++ b/boost/boost/numeric/ublas/triangular.hpp
@@ -0,0 +1,2543 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without fee,
+// provided that the above copyright notice appear in all copies and
+// that both that copyright notice and this permission notice appear
+// in supporting documentation. The authors make no representations
+// about the suitability of this software for any purpose.
+// It is provided "as is" without express or implied warranty.
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#ifndef _BOOST_UBLAS_TRIANGULAR_
+#define _BOOST_UBLAS_TRIANGULAR_
+
+#include <boost/numeric/ublas/matrix.hpp>
+#include <boost/numeric/ublas/detail/temporary.hpp>
+#include <boost/type_traits/remove_const.hpp>
+
+// Iterators based on ideas of Jeremy Siek
+
+namespace boost { namespace numeric { namespace ublas {
+
+ // Array based triangular matrix class
+ template<class T, class TRI, class L, class A>
+ class triangular_matrix:
+ public matrix_container<triangular_matrix<T, TRI, L, A> > {
+
+ typedef T *pointer;
+ typedef TRI triangular_type;
+ typedef L layout_type;
+ typedef triangular_matrix<T, TRI, L, A> self_type;
+ public:
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using matrix_container<self_type>::operator ();
+#endif
+ typedef typename A::size_type size_type;
+ typedef typename A::difference_type difference_type;
+ typedef T value_type;
+ typedef const T &const_reference;
+ typedef T &reference;
+ typedef A array_type;
+
+ typedef const matrix_reference<const self_type> const_closure_type;
+ typedef matrix_reference<self_type> closure_type;
+ typedef vector<T, A> vector_temporary_type;
+ typedef matrix<T, L, A> matrix_temporary_type; // general sub-matrix
+ typedef packed_tag storage_category;
+ typedef typename L::orientation_category orientation_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ triangular_matrix ():
+ matrix_container<self_type> (),
+ size1_ (0), size2_ (0), data_ (0) {}
+ BOOST_UBLAS_INLINE
+ triangular_matrix (size_type size1, size_type size2):
+ matrix_container<self_type> (),
+ size1_ (size1), size2_ (size2), data_ (triangular_type::packed_size (layout_type (), size1, size2)) {
+ }
+ BOOST_UBLAS_INLINE
+ triangular_matrix (size_type size1, size_type size2, const array_type &data):
+ matrix_container<self_type> (),
+ size1_ (size1), size2_ (size2), data_ (data) {}
+ BOOST_UBLAS_INLINE
+ triangular_matrix (const triangular_matrix &m):
+ matrix_container<self_type> (),
+ size1_ (m.size1_), size2_ (m.size2_), data_ (m.data_) {}
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ triangular_matrix (const matrix_expression<AE> &ae):
+ matrix_container<self_type> (),
+ size1_ (ae ().size1 ()), size2_ (ae ().size2 ()),
+ data_ (triangular_type::packed_size (layout_type (), size1_, size2_)) {
+ matrix_assign<scalar_assign> (*this, ae);
+ }
+
+ // Accessors
+ BOOST_UBLAS_INLINE
+ size_type size1 () const {
+ return size1_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type size2 () const {
+ return size2_;
+ }
+
+ // Storage accessors
+ BOOST_UBLAS_INLINE
+ const array_type &data () const {
+ return data_;
+ }
+ BOOST_UBLAS_INLINE
+ array_type &data () {
+ return data_;
+ }
+
+ // Resizing
+ BOOST_UBLAS_INLINE
+ void resize (size_type size1, size_type size2, bool preserve = true) {
+ if (preserve) {
+ self_type temporary (size1, size2);
+ detail::matrix_resize_preserve<layout_type> (*this, temporary);
+ }
+ else {
+ data ().resize (triangular_type::packed_size (layout_type (), size1, size2));
+ size1_ = size1;
+ size2_ = size2;
+ }
+ }
+ BOOST_UBLAS_INLINE
+ void resize_packed_preserve (size_type size1, size_type size2) {
+ size1_ = size1;
+ size2_ = size2;
+ data ().resize (triangular_type::packed_size (layout_type (), size1_, size2_), value_type ());
+ }
+
+ // Element access
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type i, size_type j) const {
+ BOOST_UBLAS_CHECK (i < size1_, bad_index ());
+ BOOST_UBLAS_CHECK (j < size2_, bad_index ());
+ if (triangular_type::other (i, j))
+ return data () [triangular_type::element (layout_type (), i, size1_, j, size2_)];
+ else if (triangular_type::one (i, j))
+ return one_;
+ else
+ return zero_;
+ }
+ BOOST_UBLAS_INLINE
+ reference at_element (size_type i, size_type j) {
+ BOOST_UBLAS_CHECK (i < size1_, bad_index ());
+ BOOST_UBLAS_CHECK (j < size2_, bad_index ());
+ return data () [triangular_type::element (layout_type (), i, size1_, j, size2_)];
+ }
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type i, size_type j) {
+ BOOST_UBLAS_CHECK (i < size1_, bad_index ());
+ BOOST_UBLAS_CHECK (j < size2_, bad_index ());
+ if (triangular_type::other (i, j))
+ return data () [triangular_type::element (layout_type (), i, size1_, j, size2_)];
+ else {
+ bad_index ().raise ();
+ // arbitary return value
+ return const_cast<reference>(zero_);
+ }
+ }
+
+ // Element assignment
+ BOOST_UBLAS_INLINE
+ reference insert_element (size_type i, size_type j, const_reference t) {
+ return (operator () (i, j) = t);
+ }
+ BOOST_UBLAS_INLINE
+ void erase_element (size_type i, size_type j) {
+ operator () (i, j) = value_type/*zero*/();
+ }
+
+ // Zeroing
+ BOOST_UBLAS_INLINE
+ void clear () {
+ // data ().clear ();
+ std::fill (data ().begin (), data ().end (), value_type/*zero*/());
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ triangular_matrix &operator = (const triangular_matrix &m) {
+ size1_ = m.size1_;
+ size2_ = m.size2_;
+ data () = m.data ();
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ triangular_matrix &assign_temporary (triangular_matrix &m) {
+ swap (m);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ triangular_matrix &operator = (const matrix_expression<AE> &ae) {
+ self_type temporary (ae);
+ return assign_temporary (temporary);
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ triangular_matrix &assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_assign> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ triangular_matrix& operator += (const matrix_expression<AE> &ae) {
+ self_type temporary (*this + ae);
+ return assign_temporary (temporary);
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ triangular_matrix &plus_assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_plus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ triangular_matrix& operator -= (const matrix_expression<AE> &ae) {
+ self_type temporary (*this - ae);
+ return assign_temporary (temporary);
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ triangular_matrix &minus_assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_minus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ triangular_matrix& operator *= (const AT &at) {
+ matrix_assign_scalar<scalar_multiplies_assign> (*this, at);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ triangular_matrix& operator /= (const AT &at) {
+ matrix_assign_scalar<scalar_divides_assign> (*this, at);
+ return *this;
+ }
+
+ // Swapping
+ BOOST_UBLAS_INLINE
+ void swap (triangular_matrix &m) {
+ if (this != &m) {
+ // BOOST_UBLAS_CHECK (size2_ == m.size2_, bad_size ());
+ std::swap (size1_, m.size1_);
+ std::swap (size2_, m.size2_);
+ data ().swap (m.data ());
+ }
+ }
+ BOOST_UBLAS_INLINE
+ friend void swap (triangular_matrix &m1, triangular_matrix &m2) {
+ m1.swap (m2);
+ }
+
+ // Iterator types
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ typedef indexed_iterator1<self_type, packed_random_access_iterator_tag> iterator1;
+ typedef indexed_iterator2<self_type, packed_random_access_iterator_tag> iterator2;
+ typedef indexed_const_iterator1<self_type, packed_random_access_iterator_tag> const_iterator1;
+ typedef indexed_const_iterator2<self_type, packed_random_access_iterator_tag> const_iterator2;
+#else
+ class const_iterator1;
+ class iterator1;
+ class const_iterator2;
+ class iterator2;
+#endif
+ typedef reverse_iterator_base1<const_iterator1> const_reverse_iterator1;
+ typedef reverse_iterator_base1<iterator1> reverse_iterator1;
+ typedef reverse_iterator_base2<const_iterator2> const_reverse_iterator2;
+ typedef reverse_iterator_base2<iterator2> reverse_iterator2;
+
+ // Element lookup
+ BOOST_UBLAS_INLINE
+ const_iterator1 find1 (int rank, size_type i, size_type j) const {
+ if (rank == 1)
+ i = triangular_type::restrict1 (i, j);
+ return const_iterator1 (*this, i, j);
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 find1 (int rank, size_type i, size_type j) {
+ if (rank == 1)
+ i = triangular_type::mutable_restrict1 (i, j);
+ return iterator1 (*this, i, j);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 find2 (int rank, size_type i, size_type j) const {
+ if (rank == 1)
+ j = triangular_type::restrict2 (i, j);
+ return const_iterator2 (*this, i, j);
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 find2 (int rank, size_type i, size_type j) {
+ if (rank == 1)
+ j = triangular_type::mutable_restrict2 (i, j);
+ return iterator2 (*this, i, j);
+ }
+
+ // Iterators simply are indices.
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator1:
+ public container_const_reference<triangular_matrix>,
+ public random_access_iterator_base<packed_random_access_iterator_tag,
+ const_iterator1, value_type> {
+ public:
+ typedef typename triangular_matrix::value_type value_type;
+ typedef typename triangular_matrix::difference_type difference_type;
+ typedef typename triangular_matrix::const_reference reference;
+ typedef const typename triangular_matrix::pointer pointer;
+
+ typedef const_iterator2 dual_iterator_type;
+ typedef const_reverse_iterator2 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator1 ():
+ container_const_reference<self_type> (), it1_ (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator1 (const self_type &m, size_type it1, size_type it2):
+ container_const_reference<self_type> (m), it1_ (it1), it2_ (it2) {}
+ BOOST_UBLAS_INLINE
+ const_iterator1 (const iterator1 &it):
+ container_const_reference<self_type> (it ()), it1_ (it.it1_), it2_ (it.it2_) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator ++ () {
+ ++ it1_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator -- () {
+ -- it1_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator += (difference_type n) {
+ it1_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator -= (difference_type n) {
+ it1_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ - it.it1_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ return (*this) () (it1_, it2_);
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 begin () const {
+ return (*this) ().find2 (1, it1_, 0);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 end () const {
+ return (*this) ().find2 (1, it1_, (*this) ().size2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rbegin () const {
+ return const_reverse_iterator2 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rend () const {
+ return const_reverse_iterator2 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it1_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it2_;
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator = (const const_iterator1 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it1_ = it.it1_;
+ it2_ = it.it2_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ == it.it1_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ < it.it1_;
+ }
+
+ private:
+ size_type it1_;
+ size_type it2_;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator1 begin1 () const {
+ return find1 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 end1 () const {
+ return find1 (0, size1_, 0);
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class iterator1:
+ public container_reference<triangular_matrix>,
+ public random_access_iterator_base<packed_random_access_iterator_tag,
+ iterator1, value_type> {
+ public:
+ typedef typename triangular_matrix::value_type value_type;
+ typedef typename triangular_matrix::difference_type difference_type;
+ typedef typename triangular_matrix::reference reference;
+ typedef typename triangular_matrix::pointer pointer;
+
+ typedef iterator2 dual_iterator_type;
+ typedef reverse_iterator2 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ iterator1 ():
+ container_reference<self_type> (), it1_ (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ iterator1 (self_type &m, size_type it1, size_type it2):
+ container_reference<self_type> (m), it1_ (it1), it2_ (it2) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ iterator1 &operator ++ () {
+ ++ it1_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 &operator -- () {
+ -- it1_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 &operator += (difference_type n) {
+ it1_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 &operator -= (difference_type n) {
+ it1_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ - it.it1_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ return (*this) () (it1_, it2_);
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator2 begin () const {
+ return (*this) ().find2 (1, it1_, 0);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator2 end () const {
+ return (*this) ().find2 (1, it1_, (*this) ().size2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator2 rbegin () const {
+ return reverse_iterator2 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator2 rend () const {
+ return reverse_iterator2 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it1_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it2_;
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ iterator1 &operator = (const iterator1 &it) {
+ container_reference<self_type>::assign (&it ());
+ it1_ = it.it1_;
+ it2_ = it.it2_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ == it.it1_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ < it.it1_;
+ }
+
+ private:
+ size_type it1_;
+ size_type it2_;
+
+ friend class const_iterator1;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ iterator1 begin1 () {
+ return find1 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 end1 () {
+ return find1 (0, size1_, 0);
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator2:
+ public container_const_reference<triangular_matrix>,
+ public random_access_iterator_base<packed_random_access_iterator_tag,
+ const_iterator2, value_type> {
+ public:
+ typedef typename triangular_matrix::value_type value_type;
+ typedef typename triangular_matrix::difference_type difference_type;
+ typedef typename triangular_matrix::const_reference reference;
+ typedef const typename triangular_matrix::pointer pointer;
+
+ typedef const_iterator1 dual_iterator_type;
+ typedef const_reverse_iterator1 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator2 ():
+ container_const_reference<self_type> (), it1_ (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator2 (const self_type &m, size_type it1, size_type it2):
+ container_const_reference<self_type> (m), it1_ (it1), it2_ (it2) {}
+ BOOST_UBLAS_INLINE
+ const_iterator2 (const iterator2 &it):
+ container_const_reference<self_type> (it ()), it1_ (it.it1_), it2_ (it.it2_) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator ++ () {
+ ++ it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator -- () {
+ -- it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator += (difference_type n) {
+ it2_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator -= (difference_type n) {
+ it2_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ - it.it2_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ return (*this) () (it1_, it2_);
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 begin () const {
+ return (*this) ().find1 (1, 0, it2_);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 end () const {
+ return (*this) ().find1 (1, (*this) ().size1 (), it2_);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rbegin () const {
+ return const_reverse_iterator1 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rend () const {
+ return const_reverse_iterator1 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it1_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it2_;
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator = (const const_iterator2 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it1_ = it.it1_;
+ it2_ = it.it2_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ == it.it2_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ < it.it2_;
+ }
+
+ private:
+ size_type it1_;
+ size_type it2_;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator2 begin2 () const {
+ return find2 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 end2 () const {
+ return find2 (0, 0, size2_);
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class iterator2:
+ public container_reference<triangular_matrix>,
+ public random_access_iterator_base<packed_random_access_iterator_tag,
+ iterator2, value_type> {
+ public:
+ typedef typename triangular_matrix::value_type value_type;
+ typedef typename triangular_matrix::difference_type difference_type;
+ typedef typename triangular_matrix::reference reference;
+ typedef typename triangular_matrix::pointer pointer;
+
+ typedef iterator1 dual_iterator_type;
+ typedef reverse_iterator1 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ iterator2 ():
+ container_reference<self_type> (), it1_ (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ iterator2 (self_type &m, size_type it1, size_type it2):
+ container_reference<self_type> (m), it1_ (it1), it2_ (it2) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ iterator2 &operator ++ () {
+ ++ it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 &operator -- () {
+ -- it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 &operator += (difference_type n) {
+ it2_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 &operator -= (difference_type n) {
+ it2_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ - it.it2_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ return (*this) () (it1_, it2_);
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator1 begin () const {
+ return (*this) ().find1 (1, 0, it2_);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator1 end () const {
+ return (*this) ().find1 (1, (*this) ().size1 (), it2_);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator1 rbegin () const {
+ return reverse_iterator1 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator1 rend () const {
+ return reverse_iterator1 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it1_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it2_;
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ iterator2 &operator = (const iterator2 &it) {
+ container_reference<self_type>::assign (&it ());
+ it1_ = it.it1_;
+ it2_ = it.it2_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ == it.it2_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ < it.it2_;
+ }
+
+ private:
+ size_type it1_;
+ size_type it2_;
+
+ friend class const_iterator2;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ iterator2 begin2 () {
+ return find2 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 end2 () {
+ return find2 (0, 0, size2_);
+ }
+
+ // Reverse iterators
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rbegin1 () const {
+ return const_reverse_iterator1 (end1 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rend1 () const {
+ return const_reverse_iterator1 (begin1 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ reverse_iterator1 rbegin1 () {
+ return reverse_iterator1 (end1 ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator1 rend1 () {
+ return reverse_iterator1 (begin1 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rbegin2 () const {
+ return const_reverse_iterator2 (end2 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rend2 () const {
+ return const_reverse_iterator2 (begin2 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ reverse_iterator2 rbegin2 () {
+ return reverse_iterator2 (end2 ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator2 rend2 () {
+ return reverse_iterator2 (begin2 ());
+ }
+
+ private:
+ size_type size1_;
+ size_type size2_;
+ array_type data_;
+ static const value_type zero_;
+ static const value_type one_;
+ };
+
+ template<class T, class TRI, class L, class A>
+ const typename triangular_matrix<T, TRI, L, A>::value_type triangular_matrix<T, TRI, L, A>::zero_ = value_type/*zero*/();
+ template<class T, class TRI, class L, class A>
+ const typename triangular_matrix<T, TRI, L, A>::value_type triangular_matrix<T, TRI, L, A>::one_ (1);
+
+
+ // Triangular matrix adaptor class
+ template<class M, class TRI>
+ class triangular_adaptor:
+ public matrix_expression<triangular_adaptor<M, TRI> > {
+
+ typedef triangular_adaptor<M, TRI> self_type;
+
+ public:
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using matrix_expression<self_type>::operator ();
+#endif
+ typedef const M const_matrix_type;
+ typedef M matrix_type;
+ typedef TRI triangular_type;
+ typedef typename M::size_type size_type;
+ typedef typename M::difference_type difference_type;
+ typedef typename M::value_type value_type;
+ typedef typename M::const_reference const_reference;
+ typedef typename boost::mpl::if_<boost::is_const<M>,
+ typename M::const_reference,
+ typename M::reference>::type reference;
+ typedef typename boost::mpl::if_<boost::is_const<M>,
+ typename M::const_closure_type,
+ typename M::closure_type>::type matrix_closure_type;
+ typedef const self_type const_closure_type;
+ typedef self_type closure_type;
+ // Replaced by _temporary_traits to avoid type requirements on M
+ //typedef typename M::vector_temporary_type vector_temporary_type;
+ //typedef typename M::matrix_temporary_type matrix_temporary_type;
+ typedef typename storage_restrict_traits<typename M::storage_category,
+ packed_proxy_tag>::storage_category storage_category;
+ typedef typename M::orientation_category orientation_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ triangular_adaptor (matrix_type &data):
+ matrix_expression<self_type> (),
+ data_ (data) {}
+ BOOST_UBLAS_INLINE
+ triangular_adaptor (const triangular_adaptor &m):
+ matrix_expression<self_type> (),
+ data_ (m.data_) {}
+
+ // Accessors
+ BOOST_UBLAS_INLINE
+ size_type size1 () const {
+ return data_.size1 ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type size2 () const {
+ return data_.size2 ();
+ }
+
+ // Storage accessors
+ BOOST_UBLAS_INLINE
+ const matrix_closure_type &data () const {
+ return data_;
+ }
+ BOOST_UBLAS_INLINE
+ matrix_closure_type &data () {
+ return data_;
+ }
+
+ // Element access
+#ifndef BOOST_UBLAS_PROXY_CONST_MEMBER
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type i, size_type j) const {
+ BOOST_UBLAS_CHECK (i < size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (j < size2 (), bad_index ());
+ if (triangular_type::other (i, j))
+ return data () (i, j);
+ else if (triangular_type::one (i, j))
+ return one_;
+ else
+ return zero_;
+ }
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type i, size_type j) {
+ BOOST_UBLAS_CHECK (i < size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (j < size2 (), bad_index ());
+ if (triangular_type::other (i, j))
+ return data () (i, j);
+ else if (triangular_type::one (i, j)) {
+ bad_index ().raise ();
+ // arbitary return value
+ return const_cast<reference>(one_);
+ } else {
+ bad_index ().raise ();
+ // arbitary return value
+ return const_cast<reference>(zero_);
+ }
+ }
+#else
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type i, size_type j) const {
+ BOOST_UBLAS_CHECK (i < size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (j < size2 (), bad_index ());
+ if (triangular_type::other (i, j))
+ return data () (i, j);
+ else if (triangular_type::one (i, j)) {
+ bad_index ().raise ();
+ // arbitary return value
+ return const_cast<reference>(one_);
+ } else {
+ bad_index ().raise ();
+ // arbitary return value
+ return const_cast<reference>(zero_);
+ }
+ }
+#endif
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ triangular_adaptor &operator = (const triangular_adaptor &m) {
+ matrix_assign<scalar_assign> (*this, m);
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ triangular_adaptor &assign_temporary (triangular_adaptor &m) {
+ *this = m;
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ triangular_adaptor &operator = (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_assign> (*this, matrix<value_type> (ae));
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ triangular_adaptor &assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_assign> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ triangular_adaptor& operator += (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_assign> (*this, matrix<value_type> (*this + ae));
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ triangular_adaptor &plus_assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_plus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ triangular_adaptor& operator -= (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_assign> (*this, matrix<value_type> (*this - ae));
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ triangular_adaptor &minus_assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_minus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ triangular_adaptor& operator *= (const AT &at) {
+ matrix_assign_scalar<scalar_multiplies_assign> (*this, at);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ triangular_adaptor& operator /= (const AT &at) {
+ matrix_assign_scalar<scalar_divides_assign> (*this, at);
+ return *this;
+ }
+
+ // Closure comparison
+ BOOST_UBLAS_INLINE
+ bool same_closure (const triangular_adaptor &ta) const {
+ return (*this).data ().same_closure (ta.data ());
+ }
+
+ // Swapping
+ BOOST_UBLAS_INLINE
+ void swap (triangular_adaptor &m) {
+ if (this != &m)
+ matrix_swap<scalar_swap> (*this, m);
+ }
+ BOOST_UBLAS_INLINE
+ friend void swap (triangular_adaptor &m1, triangular_adaptor &m2) {
+ m1.swap (m2);
+ }
+
+ // Iterator types
+ private:
+ typedef typename M::const_iterator1 const_subiterator1_type;
+ typedef typename boost::mpl::if_<boost::is_const<M>,
+ typename M::const_iterator1,
+ typename M::iterator1>::type subiterator1_type;
+ typedef typename M::const_iterator2 const_subiterator2_type;
+ typedef typename boost::mpl::if_<boost::is_const<M>,
+ typename M::const_iterator2,
+ typename M::iterator2>::type subiterator2_type;
+
+ public:
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ typedef indexed_iterator1<self_type, packed_random_access_iterator_tag> iterator1;
+ typedef indexed_iterator2<self_type, packed_random_access_iterator_tag> iterator2;
+ typedef indexed_const_iterator1<self_type, packed_random_access_iterator_tag> const_iterator1;
+ typedef indexed_const_iterator2<self_type, packed_random_access_iterator_tag> const_iterator2;
+#else
+ class const_iterator1;
+ class iterator1;
+ class const_iterator2;
+ class iterator2;
+#endif
+ typedef reverse_iterator_base1<const_iterator1> const_reverse_iterator1;
+ typedef reverse_iterator_base1<iterator1> reverse_iterator1;
+ typedef reverse_iterator_base2<const_iterator2> const_reverse_iterator2;
+ typedef reverse_iterator_base2<iterator2> reverse_iterator2;
+
+ // Element lookup
+ BOOST_UBLAS_INLINE
+ const_iterator1 find1 (int rank, size_type i, size_type j) const {
+ if (rank == 1)
+ i = triangular_type::restrict1 (i, j);
+ return const_iterator1 (*this, data ().find1 (rank, i, j));
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 find1 (int rank, size_type i, size_type j) {
+ if (rank == 1)
+ i = triangular_type::mutable_restrict1 (i, j);
+ return iterator1 (*this, data ().find1 (rank, i, j));
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 find2 (int rank, size_type i, size_type j) const {
+ if (rank == 1)
+ j = triangular_type::restrict2 (i, j);
+ return const_iterator2 (*this, data ().find2 (rank, i, j));
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 find2 (int rank, size_type i, size_type j) {
+ if (rank == 1)
+ j = triangular_type::mutable_restrict2 (i, j);
+ return iterator2 (*this, data ().find2 (rank, i, j));
+ }
+
+ // Iterators simply are indices.
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator1:
+ public container_const_reference<triangular_adaptor>,
+ public random_access_iterator_base<typename iterator_restrict_traits<
+ typename const_subiterator1_type::iterator_category, packed_random_access_iterator_tag>::iterator_category,
+ const_iterator1, value_type> {
+ public:
+ typedef typename const_subiterator1_type::value_type value_type;
+ typedef typename const_subiterator1_type::difference_type difference_type;
+ typedef typename const_subiterator1_type::reference reference;
+ typedef typename const_subiterator1_type::pointer pointer;
+
+ typedef const_iterator2 dual_iterator_type;
+ typedef const_reverse_iterator2 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator1 ():
+ container_const_reference<self_type> (), it1_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator1 (const self_type &m, const const_subiterator1_type &it1):
+ container_const_reference<self_type> (m), it1_ (it1) {}
+ BOOST_UBLAS_INLINE
+ const_iterator1 (const iterator1 &it):
+ container_const_reference<self_type> (it ()), it1_ (it.it1_) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator ++ () {
+ ++ it1_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator -- () {
+ -- it1_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator += (difference_type n) {
+ it1_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator -= (difference_type n) {
+ it1_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it1_ - it.it1_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ size_type i = index1 ();
+ size_type j = index2 ();
+ BOOST_UBLAS_CHECK (i < (*this) ().size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (j < (*this) ().size2 (), bad_index ());
+ if (triangular_type::other (i, j))
+ return *it1_;
+ else
+ return (*this) () (i, j);
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 begin () const {
+ return (*this) ().find2 (1, index1 (), 0);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 end () const {
+ return (*this) ().find2 (1, index1 (), (*this) ().size2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rbegin () const {
+ return const_reverse_iterator2 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rend () const {
+ return const_reverse_iterator2 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it1_.index1 ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it1_.index2 ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator = (const const_iterator1 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it1_ = it.it1_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it1_ == it.it1_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it1_ < it.it1_;
+ }
+
+ private:
+ const_subiterator1_type it1_;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator1 begin1 () const {
+ return find1 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 end1 () const {
+ return find1 (0, size1 (), 0);
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class iterator1:
+ public container_reference<triangular_adaptor>,
+ public random_access_iterator_base<typename iterator_restrict_traits<
+ typename subiterator1_type::iterator_category, packed_random_access_iterator_tag>::iterator_category,
+ iterator1, value_type> {
+ public:
+ typedef typename subiterator1_type::value_type value_type;
+ typedef typename subiterator1_type::difference_type difference_type;
+ typedef typename subiterator1_type::reference reference;
+ typedef typename subiterator1_type::pointer pointer;
+
+ typedef iterator2 dual_iterator_type;
+ typedef reverse_iterator2 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ iterator1 ():
+ container_reference<self_type> (), it1_ () {}
+ BOOST_UBLAS_INLINE
+ iterator1 (self_type &m, const subiterator1_type &it1):
+ container_reference<self_type> (m), it1_ (it1) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ iterator1 &operator ++ () {
+ ++ it1_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 &operator -- () {
+ -- it1_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 &operator += (difference_type n) {
+ it1_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 &operator -= (difference_type n) {
+ it1_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it1_ - it.it1_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ size_type i = index1 ();
+ size_type j = index2 ();
+ BOOST_UBLAS_CHECK (i < (*this) ().size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (j < (*this) ().size2 (), bad_index ());
+ if (triangular_type::other (i, j))
+ return *it1_;
+ else
+ return (*this) () (i, j);
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator2 begin () const {
+ return (*this) ().find2 (1, index1 (), 0);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator2 end () const {
+ return (*this) ().find2 (1, index1 (), (*this) ().size2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator2 rbegin () const {
+ return reverse_iterator2 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator2 rend () const {
+ return reverse_iterator2 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it1_.index1 ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it1_.index2 ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ iterator1 &operator = (const iterator1 &it) {
+ container_reference<self_type>::assign (&it ());
+ it1_ = it.it1_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it1_ == it.it1_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it1_ < it.it1_;
+ }
+
+ private:
+ subiterator1_type it1_;
+
+ friend class const_iterator1;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ iterator1 begin1 () {
+ return find1 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 end1 () {
+ return find1 (0, size1 (), 0);
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator2:
+ public container_const_reference<triangular_adaptor>,
+ public random_access_iterator_base<typename iterator_restrict_traits<
+ typename const_subiterator1_type::iterator_category, packed_random_access_iterator_tag>::iterator_category,
+ const_iterator2, value_type> {
+ public:
+ typedef typename const_subiterator2_type::value_type value_type;
+ typedef typename const_subiterator2_type::difference_type difference_type;
+ typedef typename const_subiterator2_type::reference reference;
+ typedef typename const_subiterator2_type::pointer pointer;
+
+ typedef const_iterator1 dual_iterator_type;
+ typedef const_reverse_iterator1 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator2 ():
+ container_const_reference<self_type> (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator2 (const self_type &m, const const_subiterator2_type &it2):
+ container_const_reference<self_type> (m), it2_ (it2) {}
+ BOOST_UBLAS_INLINE
+ const_iterator2 (const iterator2 &it):
+ container_const_reference<self_type> (it ()), it2_ (it.it2_) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator ++ () {
+ ++ it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator -- () {
+ -- it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator += (difference_type n) {
+ it2_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator -= (difference_type n) {
+ it2_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it2_ - it.it2_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ size_type i = index1 ();
+ size_type j = index2 ();
+ BOOST_UBLAS_CHECK (i < (*this) ().size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (j < (*this) ().size2 (), bad_index ());
+ if (triangular_type::other (i, j))
+ return *it2_;
+ else
+ return (*this) () (i, j);
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 begin () const {
+ return (*this) ().find1 (1, 0, index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 end () const {
+ return (*this) ().find1 (1, (*this) ().size1 (), index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rbegin () const {
+ return const_reverse_iterator1 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rend () const {
+ return const_reverse_iterator1 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it2_.index1 ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it2_.index2 ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator = (const const_iterator2 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it2_ = it.it2_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it2_ == it.it2_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it2_ < it.it2_;
+ }
+
+ private:
+ const_subiterator2_type it2_;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator2 begin2 () const {
+ return find2 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 end2 () const {
+ return find2 (0, 0, size2 ());
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class iterator2:
+ public container_reference<triangular_adaptor>,
+ public random_access_iterator_base<typename iterator_restrict_traits<
+ typename subiterator1_type::iterator_category, packed_random_access_iterator_tag>::iterator_category,
+ iterator2, value_type> {
+ public:
+ typedef typename subiterator2_type::value_type value_type;
+ typedef typename subiterator2_type::difference_type difference_type;
+ typedef typename subiterator2_type::reference reference;
+ typedef typename subiterator2_type::pointer pointer;
+
+ typedef iterator1 dual_iterator_type;
+ typedef reverse_iterator1 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ iterator2 ():
+ container_reference<self_type> (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ iterator2 (self_type &m, const subiterator2_type &it2):
+ container_reference<self_type> (m), it2_ (it2) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ iterator2 &operator ++ () {
+ ++ it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 &operator -- () {
+ -- it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 &operator += (difference_type n) {
+ it2_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 &operator -= (difference_type n) {
+ it2_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it2_ - it.it2_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ size_type i = index1 ();
+ size_type j = index2 ();
+ BOOST_UBLAS_CHECK (i < (*this) ().size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (j < (*this) ().size2 (), bad_index ());
+ if (triangular_type::other (i, j))
+ return *it2_;
+ else
+ return (*this) () (i, j);
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator1 begin () const {
+ return (*this) ().find1 (1, 0, index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator1 end () const {
+ return (*this) ().find1 (1, (*this) ().size1 (), index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator1 rbegin () const {
+ return reverse_iterator1 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator1 rend () const {
+ return reverse_iterator1 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ return it2_.index1 ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ return it2_.index2 ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ iterator2 &operator = (const iterator2 &it) {
+ container_reference<self_type>::assign (&it ());
+ it2_ = it.it2_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it2_ == it.it2_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it2_ < it.it2_;
+ }
+
+ private:
+ subiterator2_type it2_;
+
+ friend class const_iterator2;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ iterator2 begin2 () {
+ return find2 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 end2 () {
+ return find2 (0, 0, size2 ());
+ }
+
+ // Reverse iterators
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rbegin1 () const {
+ return const_reverse_iterator1 (end1 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rend1 () const {
+ return const_reverse_iterator1 (begin1 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ reverse_iterator1 rbegin1 () {
+ return reverse_iterator1 (end1 ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator1 rend1 () {
+ return reverse_iterator1 (begin1 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rbegin2 () const {
+ return const_reverse_iterator2 (end2 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rend2 () const {
+ return const_reverse_iterator2 (begin2 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ reverse_iterator2 rbegin2 () {
+ return reverse_iterator2 (end2 ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator2 rend2 () {
+ return reverse_iterator2 (begin2 ());
+ }
+
+ private:
+ matrix_closure_type data_;
+ static const value_type zero_;
+ static const value_type one_;
+ };
+
+ template<class M, class TRI>
+ const typename triangular_adaptor<M, TRI>::value_type triangular_adaptor<M, TRI>::zero_ = value_type/*zero*/();
+ template<class M, class TRI>
+ const typename triangular_adaptor<M, TRI>::value_type triangular_adaptor<M, TRI>::one_ (1);
+
+ template <class M, class TRI>
+ struct vector_temporary_traits< triangular_adaptor<M, TRI> >
+ : vector_temporary_traits< typename boost::remove_const<M>::type > {} ;
+ template <class M, class TRI>
+ struct vector_temporary_traits< const triangular_adaptor<M, TRI> >
+ : vector_temporary_traits< typename boost::remove_const<M>::type > {} ;
+
+ template <class M, class TRI>
+ struct matrix_temporary_traits< triangular_adaptor<M, TRI> >
+ : matrix_temporary_traits< typename boost::remove_const<M>::type > {};
+ template <class M, class TRI>
+ struct matrix_temporary_traits< const triangular_adaptor<M, TRI> >
+ : matrix_temporary_traits< typename boost::remove_const<M>::type > {};
+
+
+ template<class E1, class E2>
+ struct matrix_vector_solve_traits {
+ typedef typename promote_traits<typename E1::value_type, typename E2::value_type>::promote_type promote_type;
+ typedef vector<promote_type> result_type;
+ };
+
+ // Operations:
+ // n * (n - 1) / 2 + n = n * (n + 1) / 2 multiplications,
+ // n * (n - 1) / 2 additions
+
+ // Dense (proxy) case
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ void inplace_solve (const matrix_expression<E1> &e1, vector_expression<E2> &e2,
+ lower_tag, column_major_tag, dense_proxy_tag) {
+ typedef typename E2::size_type size_type;
+ typedef typename E2::difference_type difference_type;
+ typedef typename E2::value_type value_type;
+
+ BOOST_UBLAS_CHECK (e1 ().size1 () == e1 ().size2 (), bad_size ());
+ BOOST_UBLAS_CHECK (e1 ().size2 () == e2 ().size (), bad_size ());
+ size_type size = e2 ().size ();
+ for (size_type n = 0; n < size; ++ n) {
+#ifndef BOOST_UBLAS_SINGULAR_CHECK
+ BOOST_UBLAS_CHECK (e1 () (n, n) != value_type/*zero*/(), singular ());
+#else
+ if (e1 () (n, n) == value_type/*zero*/())
+ singular ().raise ();
+#endif
+ value_type t = e2 () (n) /= e1 () (n, n);
+ if (t != value_type/*zero*/()) {
+ for (size_type m = n + 1; m < size; ++ m)
+ e2 () (m) -= e1 () (m, n) * t;
+ }
+ }
+ }
+ // Packed (proxy) case
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ void inplace_solve (const matrix_expression<E1> &e1, vector_expression<E2> &e2,
+ lower_tag, column_major_tag, packed_proxy_tag) {
+ typedef typename E2::size_type size_type;
+ typedef typename E2::difference_type difference_type;
+ typedef typename E2::value_type value_type;
+
+ BOOST_UBLAS_CHECK (e1 ().size1 () == e1 ().size2 (), bad_size ());
+ BOOST_UBLAS_CHECK (e1 ().size2 () == e2 ().size (), bad_size ());
+ size_type size = e2 ().size ();
+ for (size_type n = 0; n < size; ++ n) {
+#ifndef BOOST_UBLAS_SINGULAR_CHECK
+ BOOST_UBLAS_CHECK (e1 () (n, n) != value_type/*zero*/(), singular ());
+#else
+ if (e1 () (n, n) == value_type/*zero*/())
+ singular ().raise ();
+#endif
+ value_type t = e2 () (n) /= e1 () (n, n);
+ if (t != value_type/*zero*/()) {
+ typename E1::const_iterator1 it1e1 (e1 ().find1 (1, n + 1, n));
+ typename E1::const_iterator1 it1e1_end (e1 ().find1 (1, e1 ().size1 (), n));
+ difference_type m (it1e1_end - it1e1);
+ while (-- m >= 0)
+ e2 () (it1e1.index1 ()) -= *it1e1 * t, ++ it1e1;
+ }
+ }
+ }
+ // Sparse (proxy) case
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ void inplace_solve (const matrix_expression<E1> &e1, vector_expression<E2> &e2,
+ lower_tag, column_major_tag, unknown_storage_tag) {
+ typedef typename E2::size_type size_type;
+ typedef typename E2::difference_type difference_type;
+ typedef typename E2::value_type value_type;
+
+ BOOST_UBLAS_CHECK (e1 ().size1 () == e1 ().size2 (), bad_size ());
+ BOOST_UBLAS_CHECK (e1 ().size2 () == e2 ().size (), bad_size ());
+ size_type size = e2 ().size ();
+ for (size_type n = 0; n < size; ++ n) {
+#ifndef BOOST_UBLAS_SINGULAR_CHECK
+ BOOST_UBLAS_CHECK (e1 () (n, n) != value_type/*zero*/(), singular ());
+#else
+ if (e1 () (n, n) == value_type/*zero*/())
+ singular ().raise ();
+#endif
+ value_type t = e2 () (n) /= e1 () (n, n);
+ if (t != value_type/*zero*/()) {
+ typename E1::const_iterator1 it1e1 (e1 ().find1 (1, n + 1, n));
+ typename E1::const_iterator1 it1e1_end (e1 ().find1 (1, e1 ().size1 (), n));
+ while (it1e1 != it1e1_end)
+ e2 () (it1e1.index1 ()) -= *it1e1 * t, ++ it1e1;
+ }
+ }
+ }
+ // Redirectors :-)
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ void inplace_solve (const matrix_expression<E1> &e1, vector_expression<E2> &e2,
+ lower_tag, column_major_tag) {
+ typedef typename E1::storage_category storage_category;
+ inplace_solve (e1, e2,
+ lower_tag (), column_major_tag (), storage_category ());
+ }
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ void inplace_solve (const matrix_expression<E1> &e1, vector_expression<E2> &e2,
+ lower_tag, row_major_tag) {
+ typedef typename E1::storage_category storage_category;
+ inplace_solve (e2, trans (e1),
+ upper_tag (), row_major_tag (), storage_category ());
+ }
+ // Dispatcher
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ void inplace_solve (const matrix_expression<E1> &e1, vector_expression<E2> &e2,
+ lower_tag) {
+ typedef typename E1::orientation_category orientation_category;
+ inplace_solve (e1, e2,
+ lower_tag (), orientation_category ());
+ }
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ void inplace_solve (const matrix_expression<E1> &e1, vector_expression<E2> &e2,
+ unit_lower_tag) {
+ typedef typename E1::orientation_category orientation_category;
+ inplace_solve (triangular_adaptor<const E1, unit_lower> (e1 ()), e2,
+ unit_lower_tag (), orientation_category ());
+ }
+
+ // Dense (proxy) case
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ void inplace_solve (const matrix_expression<E1> &e1, vector_expression<E2> &e2,
+ upper_tag, column_major_tag, dense_proxy_tag) {
+ typedef typename E2::size_type size_type;
+ typedef typename E2::difference_type difference_type;
+ typedef typename E2::value_type value_type;
+
+ BOOST_UBLAS_CHECK (e1 ().size1 () == e1 ().size2 (), bad_size ());
+ BOOST_UBLAS_CHECK (e1 ().size2 () == e2 ().size (), bad_size ());
+ size_type size = e2 ().size ();
+ for (difference_type n = size - 1; n >= 0; -- n) {
+#ifndef BOOST_UBLAS_SINGULAR_CHECK
+ BOOST_UBLAS_CHECK (e1 () (n, n) != value_type/*zero*/(), singular ());
+#else
+ if (e1 () (n, n) == value_type/*zero*/())
+ singular ().raise ();
+#endif
+ value_type t = e2 () (n) /= e1 () (n, n);
+ if (t != value_type/*zero*/()) {
+ for (difference_type m = n - 1; m >= 0; -- m)
+ e2 () (m) -= e1 () (m, n) * t;
+ }
+ }
+ }
+ // Packed (proxy) case
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ void inplace_solve (const matrix_expression<E1> &e1, vector_expression<E2> &e2,
+ upper_tag, column_major_tag, packed_proxy_tag) {
+ typedef typename E2::size_type size_type;
+ typedef typename E2::difference_type difference_type;
+ typedef typename E2::value_type value_type;
+
+ BOOST_UBLAS_CHECK (e1 ().size1 () == e1 ().size2 (), bad_size ());
+ BOOST_UBLAS_CHECK (e1 ().size2 () == e2 ().size (), bad_size ());
+ size_type size = e2 ().size ();
+ for (difference_type n = size - 1; n >= 0; -- n) {
+#ifndef BOOST_UBLAS_SINGULAR_CHECK
+ BOOST_UBLAS_CHECK (e1 () (n, n) != value_type/*zero*/(), singular ());
+#else
+ if (e1 () (n, n) == value_type/*zero*/())
+ singular ().raise ();
+#endif
+ value_type t = e2 () (n) /= e1 () (n, n);
+ if (t != value_type/*zero*/()) {
+ typename E1::const_reverse_iterator1 it1e1 (e1 ().find1 (1, n, n));
+ typename E1::const_reverse_iterator1 it1e1_rend (e1 ().find1 (1, 0, n));
+ difference_type m (it1e1_rend - it1e1);
+ while (-- m >= 0)
+ e2 () (it1e1.index1 ()) -= *it1e1 * t, ++ it1e1;
+ }
+ }
+ }
+ // Sparse (proxy) case
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ void inplace_solve (const matrix_expression<E1> &e1, vector_expression<E2> &e2,
+ upper_tag, column_major_tag, unknown_storage_tag) {
+ typedef typename E2::size_type size_type;
+ typedef typename E2::difference_type difference_type;
+ typedef typename E2::value_type value_type;
+
+ BOOST_UBLAS_CHECK (e1 ().size1 () == e1 ().size2 (), bad_size ());
+ BOOST_UBLAS_CHECK (e1 ().size2 () == e2 ().size (), bad_size ());
+ size_type size = e2 ().size ();
+ for (difference_type n = size - 1; n >= 0; -- n) {
+#ifndef BOOST_UBLAS_SINGULAR_CHECK
+ BOOST_UBLAS_CHECK (e1 () (n, n) != value_type/*zero*/(), singular ());
+#else
+ if (e1 () (n, n) == value_type/*zero*/())
+ singular ().raise ();
+#endif
+ value_type t = e2 () (n) /= e1 () (n, n);
+ if (t != value_type/*zero*/()) {
+ typename E1::const_reverse_iterator1 it1e1 (e1 ().find1 (1, n, n));
+ typename E1::const_reverse_iterator1 it1e1_rend (e1 ().find1 (1, 0, n));
+ while (it1e1 != it1e1_rend)
+ e2 () (it1e1.index1 ()) -= *it1e1 * t, ++ it1e1;
+ }
+ }
+ }
+ // Redirectors :-)
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ void inplace_solve (const matrix_expression<E1> &e1, vector_expression<E2> &e2,
+ upper_tag, column_major_tag) {
+ typedef typename E1::storage_category storage_category;
+ inplace_solve (e1, e2,
+ upper_tag (), column_major_tag (), storage_category ());
+ }
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ void inplace_solve (const matrix_expression<E1> &e1, vector_expression<E2> &e2,
+ upper_tag, row_major_tag) {
+ typedef typename E1::storage_category storage_category;
+ inplace_solve (e2, trans (e1),
+ lower_tag (), row_major_tag (), storage_category ());
+ }
+ // Dispatcher
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ void inplace_solve (const matrix_expression<E1> &e1, vector_expression<E2> &e2,
+ upper_tag) {
+ typedef typename E1::orientation_category orientation_category;
+ inplace_solve (e1, e2,
+ upper_tag (), orientation_category ());
+ }
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ void inplace_solve (const matrix_expression<E1> &e1, vector_expression<E2> &e2,
+ unit_upper_tag) {
+ typedef typename E1::orientation_category orientation_category;
+ inplace_solve (triangular_adaptor<const E1, unit_upper> (e1 ()), e2,
+ unit_upper_tag (), orientation_category ());
+ }
+
+ template<class E1, class E2, class C>
+ BOOST_UBLAS_INLINE
+ typename matrix_vector_solve_traits<E1, E2>::result_type
+ solve (const matrix_expression<E1> &e1,
+ const vector_expression<E2> &e2,
+ C) {
+ typename matrix_vector_solve_traits<E1, E2>::result_type r (e2);
+ inplace_solve (e1, r, C ());
+ return r;
+ }
+
+ // Dense (proxy) case
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ void inplace_solve (vector_expression<E1> &e1, const matrix_expression<E2> &e2,
+ lower_tag, row_major_tag, dense_proxy_tag) {
+ typedef typename E1::size_type size_type;
+ typedef typename E1::difference_type difference_type;
+ typedef typename E1::value_type value_type;
+
+ BOOST_UBLAS_CHECK (e1 ().size () == e2 ().size1 (), bad_size ());
+ BOOST_UBLAS_CHECK (e2 ().size1 () == e2 ().size2 (), bad_size ());
+ size_type size = e1 ().size ();
+ for (difference_type n = size - 1; n >= 0; -- n) {
+#ifndef BOOST_UBLAS_SINGULAR_CHECK
+ BOOST_UBLAS_CHECK (e2 () (n, n) != value_type/*zero*/(), singular ());
+#else
+ if (e2 () (n, n) == value_type/*zero*/())
+ singular ().raise ();
+#endif
+ value_type t = e1 () (n) /= e2 () (n, n);
+ if (t != value_type/*zero*/()) {
+ for (difference_type m = n - 1; m >= 0; -- m)
+ e1 () (m) -= t * e2 () (n, m);
+ }
+ }
+ }
+ // Packed (proxy) case
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ void inplace_solve (vector_expression<E1> &e1, const matrix_expression<E2> &e2,
+ lower_tag, row_major_tag, packed_proxy_tag) {
+ typedef typename E1::size_type size_type;
+ typedef typename E1::difference_type difference_type;
+ typedef typename E1::value_type value_type;
+
+ BOOST_UBLAS_CHECK (e1 ().size () == e2 ().size1 (), bad_size ());
+ BOOST_UBLAS_CHECK (e2 ().size1 () == e2 ().size2 (), bad_size ());
+ size_type size = e1 ().size ();
+ for (difference_type n = size - 1; n >= 0; -- n) {
+#ifndef BOOST_UBLAS_SINGULAR_CHECK
+ BOOST_UBLAS_CHECK (e2 () (n, n) != value_type/*zero*/(), singular ());
+#else
+ if (e2 () (n, n) == value_type/*zero*/())
+ singular ().raise ();
+#endif
+ value_type t = e1 () (n) /= e2 () (n, n);
+ if (t != value_type/*zero*/()) {
+ typename E2::const_reverse_iterator2 it2e2 (e2 ().find2 (1, n, n));
+ typename E2::const_reverse_iterator2 it2e2_rend (e2 ().find2 (1, n, 0));
+ difference_type m (it2e2_rend - it2e2);
+ while (-- m >= 0)
+ e1 () (it2e2.index2 ()) -= *it2e2 * t, ++ it2e2;
+ }
+ }
+ }
+ // Sparse (proxy) case
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ void inplace_solve (vector_expression<E1> &e1, const matrix_expression<E2> &e2,
+ lower_tag, row_major_tag, unknown_storage_tag) {
+ typedef typename E1::size_type size_type;
+ typedef typename E1::difference_type difference_type;
+ typedef typename E1::value_type value_type;
+
+ BOOST_UBLAS_CHECK (e1 ().size () == e2 ().size1 (), bad_size ());
+ BOOST_UBLAS_CHECK (e2 ().size1 () == e2 ().size2 (), bad_size ());
+ size_type size = e1 ().size ();
+ for (difference_type n = size - 1; n >= 0; -- n) {
+#ifndef BOOST_UBLAS_SINGULAR_CHECK
+ BOOST_UBLAS_CHECK (e2 () (n, n) != value_type/*zero*/(), singular ());
+#else
+ if (e2 () (n, n) == value_type/*zero*/())
+ singular ().raise ();
+#endif
+ value_type t = e1 () (n) /= e2 () (n, n);
+ if (t != value_type/*zero*/()) {
+ typename E2::const_reverse_iterator2 it2e2 (e2 ().find2 (1, n, n));
+ typename E2::const_reverse_iterator2 it2e2_rend (e2 ().find2 (1, n, 0));
+ while (it2e2 != it2e2_rend)
+ e1 () (it2e2.index2 ()) -= *it2e2 * t, ++ it2e2;
+ }
+ }
+ }
+ // Redirectors :-)
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ void inplace_solve (vector_expression<E1> &e1, const matrix_expression<E2> &e2,
+ lower_tag, row_major_tag) {
+ typedef typename E1::storage_category storage_category;
+ inplace_solve (e1, e2,
+ lower_tag (), row_major_tag (), storage_category ());
+ }
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ void inplace_solve (vector_expression<E1> &e1, const matrix_expression<E2> &e2,
+ lower_tag, column_major_tag) {
+ typedef typename E1::storage_category storage_category;
+ inplace_solve (trans (e2), e1,
+ upper_tag (), row_major_tag (), storage_category ());
+ }
+ // Dispatcher
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ void inplace_solve (vector_expression<E1> &e1, const matrix_expression<E2> &e2,
+ lower_tag) {
+ typedef typename E2::orientation_category orientation_category;
+ inplace_solve (e1, e2,
+ lower_tag (), orientation_category ());
+ }
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ void inplace_solve (vector_expression<E1> &e1, const matrix_expression<E2> &e2,
+ unit_lower_tag) {
+ typedef typename E2::orientation_category orientation_category;
+ inplace_solve (e1, triangular_adaptor<const E2, unit_lower> (e2 ()),
+ unit_lower_tag (), orientation_category ());
+ }
+
+ // Dense (proxy) case
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ void inplace_solve (vector_expression<E1> &e1, const matrix_expression<E2> &e2,
+ upper_tag, row_major_tag, dense_proxy_tag) {
+ typedef typename E1::size_type size_type;
+ typedef typename E1::difference_type difference_type;
+ typedef typename E1::value_type value_type;
+
+ BOOST_UBLAS_CHECK (e1 ().size () == e2 ().size1 (), bad_size ());
+ BOOST_UBLAS_CHECK (e2 ().size1 () == e2 ().size2 (), bad_size ());
+ size_type size = e1 ().size ();
+ for (size_type n = 0; n < size; ++ n) {
+#ifndef BOOST_UBLAS_SINGULAR_CHECK
+ BOOST_UBLAS_CHECK (e2 () (n, n) != value_type/*zero*/(), singular ());
+#else
+ if (e2 () (n, n) == value_type/*zero*/())
+ singular ().raise ();
+#endif
+ value_type t = e1 () (n) /= e2 () (n, n);
+ if (t != value_type/*zero*/()) {
+ for (size_type m = n + 1; m < size; ++ m)
+ e1 () (m) -= t * e2 () (n, m);
+ }
+ }
+ }
+ // Packed (proxy) case
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ void inplace_solve (vector_expression<E1> &e1, const matrix_expression<E2> &e2,
+ upper_tag, row_major_tag, packed_proxy_tag) {
+ typedef typename E1::size_type size_type;
+ typedef typename E1::difference_type difference_type;
+ typedef typename E1::value_type value_type;
+
+ BOOST_UBLAS_CHECK (e1 ().size () == e2 ().size1 (), bad_size ());
+ BOOST_UBLAS_CHECK (e2 ().size1 () == e2 ().size2 (), bad_size ());
+ size_type size = e1 ().size ();
+ for (size_type n = 0; n < size; ++ n) {
+#ifndef BOOST_UBLAS_SINGULAR_CHECK
+ BOOST_UBLAS_CHECK (e2 () (n, n) != value_type/*zero*/(), singular ());
+#else
+ if (e2 () (n, n) == value_type/*zero*/())
+ singular ().raise ();
+#endif
+ value_type t = e1 () (n) /= e2 () (n, n);
+ if (t != value_type/*zero*/()) {
+ typename E2::const_iterator2 it2e2 (e2 ().find2 (1, n, n + 1));
+ typename E2::const_iterator2 it2e2_end (e2 ().find2 (1, n, e2 ().size2 ()));
+ difference_type m (it2e2_end - it2e2);
+ while (-- m >= 0)
+ e1 () (it2e2.index2 ()) -= *it2e2 * t, ++ it2e2;
+ }
+ }
+ }
+ // Sparse (proxy) case
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ void inplace_solve (vector_expression<E1> &e1, const matrix_expression<E2> &e2,
+ upper_tag, row_major_tag, unknown_storage_tag) {
+ typedef typename E1::size_type size_type;
+ typedef typename E1::difference_type difference_type;
+ typedef typename E1::value_type value_type;
+
+ BOOST_UBLAS_CHECK (e1 ().size () == e2 ().size1 (), bad_size ());
+ BOOST_UBLAS_CHECK (e2 ().size1 () == e2 ().size2 (), bad_size ());
+ size_type size = e1 ().size ();
+ for (size_type n = 0; n < size; ++ n) {
+#ifndef BOOST_UBLAS_SINGULAR_CHECK
+ BOOST_UBLAS_CHECK (e2 () (n, n) != value_type/*zero*/(), singular ());
+#else
+ if (e2 () (n, n) == value_type/*zero*/())
+ singular ().raise ();
+#endif
+ value_type t = e1 () (n) /= e2 () (n, n);
+ if (t != value_type/*zero*/()) {
+ typename E2::const_iterator2 it2e2 (e2 ().find2 (1, n, n + 1));
+ typename E2::const_iterator2 it2e2_end (e2 ().find2 (1, n, e2 ().size2 ()));
+ while (it2e2 != it2e2_end)
+ e1 () (it2e2.index2 ()) -= *it2e2 * t, ++ it2e2;
+ }
+ }
+ }
+ // Redirectors :-)
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ void inplace_solve (vector_expression<E1> &e1, const matrix_expression<E2> &e2,
+ upper_tag, row_major_tag) {
+ typedef typename E1::storage_category storage_category;
+ inplace_solve (e1, e2,
+ upper_tag (), row_major_tag (), storage_category ());
+ }
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ void inplace_solve (vector_expression<E1> &e1, const matrix_expression<E2> &e2,
+ upper_tag, column_major_tag) {
+ typedef typename E1::storage_category storage_category;
+ inplace_solve (trans (e2), e1,
+ lower_tag (), row_major_tag (), storage_category ());
+ }
+ // Dispatcher
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ void inplace_solve (vector_expression<E1> &e1, const matrix_expression<E2> &e2,
+ upper_tag) {
+ typedef typename E2::orientation_category orientation_category;
+ inplace_solve (e1, e2,
+ upper_tag (), orientation_category ());
+ }
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ void inplace_solve (vector_expression<E1> &e1, const matrix_expression<E2> &e2,
+ unit_upper_tag) {
+ typedef typename E2::orientation_category orientation_category;
+ inplace_solve (e1, triangular_adaptor<const E2, unit_upper> (e2 ()),
+ unit_upper_tag (), orientation_category ());
+ }
+
+ template<class E1, class E2, class C>
+ BOOST_UBLAS_INLINE
+ typename matrix_vector_solve_traits<E1, E2>::result_type
+ solve (const vector_expression<E1> &e1,
+ const matrix_expression<E2> &e2,
+ C) {
+ typename matrix_vector_solve_traits<E1, E2>::result_type r (e1);
+ inplace_solve (r, e2, C ());
+ return r;
+ }
+
+ template<class E1, class E2>
+ struct matrix_matrix_solve_traits {
+ typedef typename promote_traits<typename E1::value_type, typename E2::value_type>::promote_type promote_type;
+ typedef matrix<promote_type> result_type;
+ };
+
+ // Operations:
+ // k * n * (n - 1) / 2 + k * n = k * n * (n + 1) / 2 multiplications,
+ // k * n * (n - 1) / 2 additions
+
+ // Dense (proxy) case
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ void inplace_solve (const matrix_expression<E1> &e1, matrix_expression<E2> &e2,
+ lower_tag, dense_proxy_tag) {
+ typedef typename E2::size_type size_type;
+ typedef typename E2::difference_type difference_type;
+ typedef typename E2::value_type value_type;
+
+ BOOST_UBLAS_CHECK (e1 ().size1 () == e1 ().size2 (), bad_size ());
+ BOOST_UBLAS_CHECK (e1 ().size2 () == e2 ().size1 (), bad_size ());
+ size_type size1 = e2 ().size1 ();
+ size_type size2 = e2 ().size2 ();
+ for (size_type n = 0; n < size1; ++ n) {
+#ifndef BOOST_UBLAS_SINGULAR_CHECK
+ BOOST_UBLAS_CHECK (e1 () (n, n) != value_type/*zero*/(), singular ());
+#else
+ if (e1 () (n, n) == value_type/*zero*/())
+ singular ().raise ();
+#endif
+ for (size_type l = 0; l < size2; ++ l) {
+ value_type t = e2 () (n, l) /= e1 () (n, n);
+ if (t != value_type/*zero*/()) {
+ for (size_type m = n + 1; m < size1; ++ m)
+ e2 () (m, l) -= e1 () (m, n) * t;
+ }
+ }
+ }
+ }
+ // Packed (proxy) case
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ void inplace_solve (const matrix_expression<E1> &e1, matrix_expression<E2> &e2,
+ lower_tag, packed_proxy_tag) {
+ typedef typename E2::size_type size_type;
+ typedef typename E2::difference_type difference_type;
+ typedef typename E2::value_type value_type;
+
+ BOOST_UBLAS_CHECK (e1 ().size1 () == e1 ().size2 (), bad_size ());
+ BOOST_UBLAS_CHECK (e1 ().size2 () == e2 ().size1 (), bad_size ());
+ size_type size1 = e2 ().size1 ();
+ size_type size2 = e2 ().size2 ();
+ for (size_type n = 0; n < size1; ++ n) {
+#ifndef BOOST_UBLAS_SINGULAR_CHECK
+ BOOST_UBLAS_CHECK (e1 () (n, n) != value_type/*zero*/(), singular ());
+#else
+ if (e1 () (n, n) == value_type/*zero*/())
+ singular ().raise ();
+#endif
+ for (size_type l = 0; l < size2; ++ l) {
+ value_type t = e2 () (n, l) /= e1 () (n, n);
+ if (t != value_type/*zero*/()) {
+ typename E1::const_iterator1 it1e1 (e1 ().find1 (1, n + 1, n));
+ typename E1::const_iterator1 it1e1_end (e1 ().find1 (1, e1 ().size1 (), n));
+ difference_type m (it1e1_end - it1e1);
+ while (-- m >= 0)
+ e2 () (it1e1.index1 (), l) -= *it1e1 * t, ++ it1e1;
+ }
+ }
+ }
+ }
+ // Sparse (proxy) case
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ void inplace_solve (const matrix_expression<E1> &e1, matrix_expression<E2> &e2,
+ lower_tag, unknown_storage_tag) {
+ typedef typename E2::size_type size_type;
+ typedef typename E2::difference_type difference_type;
+ typedef typename E2::value_type value_type;
+
+ BOOST_UBLAS_CHECK (e1 ().size1 () == e1 ().size2 (), bad_size ());
+ BOOST_UBLAS_CHECK (e1 ().size2 () == e2 ().size1 (), bad_size ());
+ size_type size1 = e2 ().size1 ();
+ size_type size2 = e2 ().size2 ();
+ for (size_type n = 0; n < size1; ++ n) {
+#ifndef BOOST_UBLAS_SINGULAR_CHECK
+ BOOST_UBLAS_CHECK (e1 () (n, n) != value_type/*zero*/(), singular ());
+#else
+ if (e1 () (n, n) == value_type/*zero*/())
+ singular ().raise ();
+#endif
+ for (size_type l = 0; l < size2; ++ l) {
+ value_type t = e2 () (n, l) /= e1 () (n, n);
+ if (t != value_type/*zero*/()) {
+ typename E1::const_iterator1 it1e1 (e1 ().find1 (1, n + 1, n));
+ typename E1::const_iterator1 it1e1_end (e1 ().find1 (1, e1 ().size1 (), n));
+ while (it1e1 != it1e1_end)
+ e2 () (it1e1.index1 (), l) -= *it1e1 * t, ++ it1e1;
+ }
+ }
+ }
+ }
+ // Dispatcher
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ void inplace_solve (const matrix_expression<E1> &e1, matrix_expression<E2> &e2,
+ lower_tag) {
+ typedef typename E1::storage_category dispatch_category;
+ inplace_solve (e1, e2,
+ lower_tag (), dispatch_category ());
+ }
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ void inplace_solve (const matrix_expression<E1> &e1, matrix_expression<E2> &e2,
+ unit_lower_tag) {
+ typedef typename E1::storage_category dispatch_category;
+ inplace_solve (triangular_adaptor<const E1, unit_lower> (e1 ()), e2,
+ unit_lower_tag (), dispatch_category ());
+ }
+
+ // Dense (proxy) case
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ void inplace_solve (const matrix_expression<E1> &e1, matrix_expression<E2> &e2,
+ upper_tag, dense_proxy_tag) {
+ typedef typename E2::size_type size_type;
+ typedef typename E2::difference_type difference_type;
+ typedef typename E2::value_type value_type;
+
+ BOOST_UBLAS_CHECK (e1 ().size1 () == e1 ().size2 (), bad_size ());
+ BOOST_UBLAS_CHECK (e1 ().size2 () == e2 ().size1 (), bad_size ());
+ size_type size1 = e2 ().size1 ();
+ size_type size2 = e2 ().size2 ();
+ for (difference_type n = size1 - 1; n >= 0; -- n) {
+#ifndef BOOST_UBLAS_SINGULAR_CHECK
+ BOOST_UBLAS_CHECK (e1 () (n, n) != value_type/*zero*/(), singular ());
+#else
+ if (e1 () (n, n) == value_type/*zero*/())
+ singular ().raise ();
+#endif
+ for (difference_type l = size2 - 1; l >= 0; -- l) {
+ value_type t = e2 () (n, l) /= e1 () (n, n);
+ if (t != value_type/*zero*/()) {
+ for (difference_type m = n - 1; m >= 0; -- m)
+ e2 () (m, l) -= e1 () (m, n) * t;
+ }
+ }
+ }
+ }
+ // Packed (proxy) case
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ void inplace_solve (const matrix_expression<E1> &e1, matrix_expression<E2> &e2,
+ upper_tag, packed_proxy_tag) {
+ typedef typename E2::size_type size_type;
+ typedef typename E2::difference_type difference_type;
+ typedef typename E2::value_type value_type;
+
+ BOOST_UBLAS_CHECK (e1 ().size1 () == e1 ().size2 (), bad_size ());
+ BOOST_UBLAS_CHECK (e1 ().size2 () == e2 ().size1 (), bad_size ());
+ size_type size1 = e2 ().size1 ();
+ size_type size2 = e2 ().size2 ();
+ for (difference_type n = size1 - 1; n >= 0; -- n) {
+#ifndef BOOST_UBLAS_SINGULAR_CHECK
+ BOOST_UBLAS_CHECK (e1 () (n, n) != value_type/*zero*/(), singular ());
+#else
+ if (e1 () (n, n) == value_type/*zero*/())
+ singular ().raise ();
+#endif
+ for (difference_type l = size2 - 1; l >= 0; -- l) {
+ value_type t = e2 () (n, l) /= e1 () (n, n);
+ if (t != value_type/*zero*/()) {
+ typename E1::const_reverse_iterator1 it1e1 (e1 ().find1 (1, n, n));
+ typename E1::const_reverse_iterator1 it1e1_rend (e1 ().find1 (1, 0, n));
+ difference_type m (it1e1_rend - it1e1);
+ while (-- m >= 0)
+ e2 () (it1e1.index1 (), l) -= *it1e1 * t, ++ it1e1;
+ }
+ }
+ }
+ }
+ // Sparse (proxy) case
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ void inplace_solve (const matrix_expression<E1> &e1, matrix_expression<E2> &e2,
+ upper_tag, unknown_storage_tag) {
+ typedef typename E2::size_type size_type;
+ typedef typename E2::difference_type difference_type;
+ typedef typename E2::value_type value_type;
+
+ BOOST_UBLAS_CHECK (e1 ().size1 () == e1 ().size2 (), bad_size ());
+ BOOST_UBLAS_CHECK (e1 ().size2 () == e2 ().size1 (), bad_size ());
+ size_type size1 = e2 ().size1 ();
+ size_type size2 = e2 ().size2 ();
+ for (difference_type n = size1 - 1; n >= 0; -- n) {
+#ifndef BOOST_UBLAS_SINGULAR_CHECK
+ BOOST_UBLAS_CHECK (e1 () (n, n) != value_type/*zero*/(), singular ());
+#else
+ if (e1 () (n, n) == value_type/*zero*/())
+ singular ().raise ();
+#endif
+ for (difference_type l = size2 - 1; l >= 0; -- l) {
+ value_type t = e2 () (n, l) /= e1 () (n, n);
+ if (t != value_type/*zero*/()) {
+ typename E1::const_reverse_iterator1 it1e1 (e1 ().find1 (1, n, n));
+ typename E1::const_reverse_iterator1 it1e1_rend (e1 ().find1 (1, 0, n));
+ while (it1e1 != it1e1_rend)
+ e2 () (it1e1.index1 (), l) -= *it1e1 * t, ++ it1e1;
+ }
+ }
+ }
+ }
+ // Dispatcher
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ void inplace_solve (const matrix_expression<E1> &e1, matrix_expression<E2> &e2,
+ upper_tag) {
+ typedef typename E1::storage_category dispatch_category;
+ inplace_solve (e1, e2,
+ upper_tag (), dispatch_category ());
+ }
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ void inplace_solve (const matrix_expression<E1> &e1, matrix_expression<E2> &e2,
+ unit_upper_tag) {
+ typedef typename E1::storage_category dispatch_category;
+ inplace_solve (triangular_adaptor<const E1, unit_upper> (e1 ()), e2,
+ unit_upper_tag (), dispatch_category ());
+ }
+
+ template<class E1, class E2, class C>
+ BOOST_UBLAS_INLINE
+ typename matrix_matrix_solve_traits<E1, E2>::result_type
+ solve (const matrix_expression<E1> &e1,
+ const matrix_expression<E2> &e2,
+ C) {
+ typename matrix_matrix_solve_traits<E1, E2>::result_type r (e2);
+ inplace_solve (e1, r, C ());
+ return r;
+ }
+
+}}}
+
+#endif
diff --git a/boost/boost/numeric/ublas/vector.hpp b/boost/boost/numeric/ublas/vector.hpp
new file mode 100644
index 00000000000..7c4e47ed279
--- /dev/null
+++ b/boost/boost/numeric/ublas/vector.hpp
@@ -0,0 +1,1683 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without fee,
+// provided that the above copyright notice appear in all copies and
+// that both that copyright notice and this permission notice appear
+// in supporting documentation. The authors make no representations
+// about the suitability of this software for any purpose.
+// It is provided "as is" without express or implied warranty.
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#ifndef _BOOST_UBLAS_VECTOR_
+#define _BOOST_UBLAS_VECTOR_
+
+#include <boost/numeric/ublas/storage.hpp>
+#include <boost/numeric/ublas/vector_expression.hpp>
+#include <boost/numeric/ublas/detail/vector_assign.hpp>
+
+// Iterators based on ideas of Jeremy Siek
+
+namespace boost { namespace numeric { namespace ublas {
+
+ // Array based vector class
+ template<class T, class A>
+ class vector:
+ public vector_container<vector<T, A> > {
+
+ typedef vector<T, A> self_type;
+ public:
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using vector_container<self_type>::operator ();
+#endif
+ typedef typename A::size_type size_type;
+ typedef typename A::difference_type difference_type;
+ typedef T value_type;
+ typedef typename type_traits<T>::const_reference const_reference;
+ typedef T &reference;
+ typedef T *pointer;
+ typedef const T *const_pointer;
+ typedef A array_type;
+ typedef const vector_reference<const self_type> const_closure_type;
+ typedef vector_reference<self_type> closure_type;
+ typedef self_type vector_temporary_type;
+ typedef dense_tag storage_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ vector ():
+ vector_container<self_type> (),
+ data_ () {}
+ explicit BOOST_UBLAS_INLINE
+ vector (size_type size):
+ vector_container<self_type> (),
+ data_ (size) {
+ }
+ BOOST_UBLAS_INLINE
+ vector (size_type size, const array_type &data):
+ vector_container<self_type> (),
+ data_ (data) {}
+ BOOST_UBLAS_INLINE
+ vector (const vector &v):
+ vector_container<self_type> (),
+ data_ (v.data_) {}
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ vector (const vector_expression<AE> &ae):
+ vector_container<self_type> (),
+ data_ (ae ().size ()) {
+ vector_assign<scalar_assign> (*this, ae);
+ }
+
+ // Random Access Container
+ BOOST_UBLAS_INLINE
+ size_type max_size () const {
+ return data_.max_size ();
+ }
+
+ BOOST_UBLAS_INLINE
+ bool empty () const {
+ return data_.size () == 0;
+ }
+ // Accessors
+ BOOST_UBLAS_INLINE
+ size_type size () const {
+ return data_.size ();
+ }
+
+ // Storage accessors
+ BOOST_UBLAS_INLINE
+ const array_type &data () const {
+ return data_;
+ }
+ BOOST_UBLAS_INLINE
+ array_type &data () {
+ return data_;
+ }
+
+ // Resizing
+ BOOST_UBLAS_INLINE
+ void resize (size_type size, bool preserve = true) {
+ if (preserve)
+ data ().resize (size, typename A::value_type ());
+ else
+ data ().resize (size);
+ }
+
+ // Element support
+ BOOST_UBLAS_INLINE
+ pointer find_element (size_type i) {
+ return const_cast<pointer> (const_cast<const self_type&>(*this).find_element (i));
+ }
+ BOOST_UBLAS_INLINE
+ const_pointer find_element (size_type i) const {
+ return & (data () [i]);
+ }
+
+ // Element access
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type i) const {
+ return data () [i];
+ }
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type i) {
+ return data () [i];
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (size_type i) const {
+ return (*this) (i);
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (size_type i) {
+ return (*this) (i);
+ }
+
+ // Element assignment
+ BOOST_UBLAS_INLINE
+ reference insert_element (size_type i, const_reference t) {
+ return (data () [i] = t);
+ }
+ BOOST_UBLAS_INLINE
+ void erase_element (size_type i) {
+ data () [i] = value_type/*zero*/();
+ }
+
+ // Zeroing
+ BOOST_UBLAS_INLINE
+ void clear () {
+ std::fill (data ().begin (), data ().end (), value_type/*zero*/());
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ vector &operator = (const vector &v) {
+ data () = v.data ();
+ return *this;
+ }
+ template<class C> // Container assignment without temporary
+ BOOST_UBLAS_INLINE
+ vector &operator = (const vector_container<C> &v) {
+ resize (v ().size (), false);
+ assign (v);
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ vector &assign_temporary (vector &v) {
+ swap (v);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ vector &operator = (const vector_expression<AE> &ae) {
+ self_type temporary (ae);
+ return assign_temporary (temporary);
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ vector &assign (const vector_expression<AE> &ae) {
+ vector_assign<scalar_assign> (*this, ae);
+ return *this;
+ }
+
+ // Computed assignment
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ vector &operator += (const vector_expression<AE> &ae) {
+ self_type temporary (*this + ae);
+ return assign_temporary (temporary);
+ }
+ template<class C> // Container assignment without temporary
+ BOOST_UBLAS_INLINE
+ vector &operator += (const vector_container<C> &v) {
+ plus_assign (v);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ vector &plus_assign (const vector_expression<AE> &ae) {
+ vector_assign<scalar_plus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ vector &operator -= (const vector_expression<AE> &ae) {
+ self_type temporary (*this - ae);
+ return assign_temporary (temporary);
+ }
+ template<class C> // Container assignment without temporary
+ BOOST_UBLAS_INLINE
+ vector &operator -= (const vector_container<C> &v) {
+ minus_assign (v);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ vector &minus_assign (const vector_expression<AE> &ae) {
+ vector_assign<scalar_minus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ vector &operator *= (const AT &at) {
+ vector_assign_scalar<scalar_multiplies_assign> (*this, at);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ vector &operator /= (const AT &at) {
+ vector_assign_scalar<scalar_divides_assign> (*this, at);
+ return *this;
+ }
+
+ // Swapping
+ BOOST_UBLAS_INLINE
+ void swap (vector &v) {
+ if (this != &v) {
+ data ().swap (v.data ());
+ }
+ }
+ BOOST_UBLAS_INLINE
+ friend void swap (vector &v1, vector &v2) {
+ v1.swap (v2);
+ }
+
+ // Iterator types
+ private:
+ // Use the storage array iterator
+ typedef typename A::const_iterator const_subiterator_type;
+ typedef typename A::iterator subiterator_type;
+
+ public:
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ typedef indexed_iterator<self_type, dense_random_access_iterator_tag> iterator;
+ typedef indexed_const_iterator<self_type, dense_random_access_iterator_tag> const_iterator;
+#else
+ class const_iterator;
+ class iterator;
+#endif
+
+ // Element lookup
+ BOOST_UBLAS_INLINE
+ const_iterator find (size_type i) const {
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ return const_iterator (*this, data ().begin () + i);
+#else
+ return const_iterator (*this, i);
+#endif
+ }
+ BOOST_UBLAS_INLINE
+ iterator find (size_type i) {
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ return iterator (*this, data ().begin () + i);
+#else
+ return iterator (*this, i);
+#endif
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator:
+ public container_const_reference<vector>,
+ public random_access_iterator_base<dense_random_access_iterator_tag,
+ const_iterator, value_type, difference_type> {
+ public:
+ typedef typename vector::difference_type difference_type;
+ typedef typename vector::value_type value_type;
+ typedef typename vector::const_reference reference;
+ typedef const typename vector::pointer pointer;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator ():
+ container_const_reference<self_type> (), it_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator (const self_type &v, const const_subiterator_type &it):
+ container_const_reference<self_type> (v), it_ (it) {}
+ BOOST_UBLAS_INLINE
+ const_iterator (const typename vector::iterator &it): // ISSUE vector:: stops VC8 using std::iterator here
+ container_const_reference<self_type> (it ()), it_ (it.it_) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator &operator ++ () {
+ ++ it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator -- () {
+ -- it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator += (difference_type n) {
+ it_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator -= (difference_type n) {
+ it_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it_ - it.it_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ BOOST_UBLAS_CHECK (it_ >= (*this) ().begin ().it_ && it_ < (*this) ().end ().it_, bad_index ());
+ return *it_;
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(it_ + n);
+ }
+
+ // Index
+ BOOST_UBLAS_INLINE
+ size_type index () const {
+ BOOST_UBLAS_CHECK (it_ >= (*this) ().begin ().it_ && it_ < (*this) ().end ().it_, bad_index ());
+ return it_ - (*this) ().begin ().it_;
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator &operator = (const const_iterator &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it_ == it.it_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it_ < it.it_;
+ }
+
+ private:
+ const_subiterator_type it_;
+
+ friend class iterator;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator begin () const {
+ return find (0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator end () const {
+ return find (data_.size ());
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class iterator:
+ public container_reference<vector>,
+ public random_access_iterator_base<dense_random_access_iterator_tag,
+ iterator, value_type, difference_type> {
+ public:
+ typedef typename vector::difference_type difference_type;
+ typedef typename vector::value_type value_type;
+ typedef typename vector::reference reference;
+ typedef typename vector::pointer pointer;
+
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ iterator ():
+ container_reference<self_type> (), it_ () {}
+ BOOST_UBLAS_INLINE
+ iterator (self_type &v, const subiterator_type &it):
+ container_reference<self_type> (v), it_ (it) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ iterator &operator ++ () {
+ ++ it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator &operator -- () {
+ -- it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator &operator += (difference_type n) {
+ it_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator &operator -= (difference_type n) {
+ it_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const iterator &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it_ - it.it_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ BOOST_UBLAS_CHECK (it_ >= (*this) ().begin ().it_ && it_ < (*this) ().end ().it_ , bad_index ());
+ return *it_;
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (difference_type n) const {
+ return *(it_ + n);
+ }
+
+ // Index
+ BOOST_UBLAS_INLINE
+ size_type index () const {
+ BOOST_UBLAS_CHECK (it_ >= (*this) ().begin ().it_ && it_ < (*this) ().end ().it_ , bad_index ());
+ return it_ - (*this) ().begin ().it_;
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ iterator &operator = (const iterator &it) {
+ container_reference<self_type>::assign (&it ());
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const iterator &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it_ == it.it_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const iterator &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it_ < it.it_;
+ }
+
+ private:
+ subiterator_type it_;
+
+ friend class const_iterator;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ iterator begin () {
+ return find (0);
+ }
+ BOOST_UBLAS_INLINE
+ iterator end () {
+ return find (data_.size ());
+ }
+
+ // Reverse iterator
+ typedef reverse_iterator_base<const_iterator> const_reverse_iterator;
+ typedef reverse_iterator_base<iterator> reverse_iterator;
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rbegin () const {
+ return const_reverse_iterator (end ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rend () const {
+ return const_reverse_iterator (begin ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator rbegin () {
+ return reverse_iterator (end ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator rend () {
+ return reverse_iterator (begin ());
+ }
+
+ private:
+ array_type data_;
+ };
+
+
+ // Bounded vector class
+ template<class T, std::size_t N>
+ class bounded_vector:
+ public vector<T, bounded_array<T, N> > {
+
+ typedef vector<T, bounded_array<T, N> > vector_type;
+ public:
+ typedef typename vector_type::size_type size_type;
+ static const size_type max_size = N;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ bounded_vector ():
+ vector_type (N) {}
+ BOOST_UBLAS_INLINE
+ bounded_vector (size_type size):
+ vector_type (size) {}
+ BOOST_UBLAS_INLINE
+ bounded_vector (const bounded_vector &v):
+ vector_type (v) {}
+ template<class A2> // Allow vector<T,bounded_array<N> construction
+ BOOST_UBLAS_INLINE
+ bounded_vector (const vector<T, A2> &v):
+ vector_type (v) {}
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ bounded_vector (const vector_expression<AE> &ae):
+ vector_type (ae) {}
+ BOOST_UBLAS_INLINE
+ ~bounded_vector () {}
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ bounded_vector &operator = (const bounded_vector &v) {
+ vector_type::operator = (v);
+ return *this;
+ }
+ template<class A2> // Generic vector assignment
+ BOOST_UBLAS_INLINE
+ bounded_vector &operator = (const vector<T, A2> &v) {
+ vector_type::operator = (v);
+ return *this;
+ }
+ template<class C> // Container assignment without temporary
+ BOOST_UBLAS_INLINE
+ bounded_vector &operator = (const vector_container<C> &v) {
+ vector_type::operator = (v);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ bounded_vector &operator = (const vector_expression<AE> &ae) {
+ vector_type::operator = (ae);
+ return *this;
+ }
+ };
+
+
+ // Zero vector class
+ template<class T>
+ class zero_vector:
+ public vector_container<zero_vector<T> > {
+
+ typedef const T *const_pointer;
+ typedef zero_vector<T> self_type;
+ public:
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using vector_container<self_type>::operator ();
+#endif
+ typedef std::size_t size_type;
+ typedef std::ptrdiff_t difference_type;
+ typedef T value_type;
+ typedef const T &const_reference;
+ typedef T &reference;
+ typedef const vector_reference<const self_type> const_closure_type;
+ typedef vector_reference<self_type> closure_type;
+ typedef sparse_tag storage_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ zero_vector ():
+ vector_container<self_type> (),
+ size_ (0) {}
+ explicit BOOST_UBLAS_INLINE
+ zero_vector (size_type size):
+ vector_container<self_type> (),
+ size_ (size) {}
+ BOOST_UBLAS_INLINE
+ zero_vector (const zero_vector &v):
+ vector_container<self_type> (),
+ size_ (v.size_) {}
+
+ // Accessors
+ BOOST_UBLAS_INLINE
+ size_type size () const {
+ return size_;
+ }
+
+ // Resizing
+ BOOST_UBLAS_INLINE
+ void resize (size_type size, bool /*preserve*/ = true) {
+ size_ = size;
+ }
+
+ // Element support
+ BOOST_UBLAS_INLINE
+ const_pointer find_element (size_type i) const {
+ return & zero_;
+ }
+
+ // Element access
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type /* i */) const {
+ return zero_;
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (size_type i) const {
+ return (*this) (i);
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ zero_vector &operator = (const zero_vector &v) {
+ size_ = v.size_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ zero_vector &assign_temporary (zero_vector &v) {
+ swap (v);
+ return *this;
+ }
+
+ // Swapping
+ BOOST_UBLAS_INLINE
+ void swap (zero_vector &v) {
+ if (this != &v) {
+ std::swap (size_, v.size_);
+ }
+ }
+ BOOST_UBLAS_INLINE
+ friend void swap (zero_vector &v1, zero_vector &v2) {
+ v1.swap (v2);
+ }
+
+ // Iterator types
+ public:
+ class const_iterator;
+
+ // Element lookup
+ BOOST_UBLAS_INLINE
+ const_iterator find (size_type /*i*/) const {
+ return const_iterator (*this);
+ }
+
+ class const_iterator:
+ public container_const_reference<zero_vector>,
+ public bidirectional_iterator_base<sparse_bidirectional_iterator_tag,
+ const_iterator, value_type> {
+ public:
+ typedef typename zero_vector::difference_type difference_type;
+ typedef typename zero_vector::value_type value_type;
+ typedef typename zero_vector::const_reference reference;
+ typedef typename zero_vector::const_pointer pointer;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator ():
+ container_const_reference<self_type> () {}
+ BOOST_UBLAS_INLINE
+ const_iterator (const self_type &v):
+ container_const_reference<self_type> (v) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator &operator ++ () {
+ BOOST_UBLAS_CHECK_FALSE (bad_index ());
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator -- () {
+ BOOST_UBLAS_CHECK_FALSE (bad_index ());
+ return *this;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ BOOST_UBLAS_CHECK_FALSE (bad_index ());
+ return zero_; // arbitary return value
+ }
+
+ // Index
+ BOOST_UBLAS_INLINE
+ size_type index () const {
+ BOOST_UBLAS_CHECK_FALSE (bad_index ());
+ return 0; // arbitary return value
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator &operator = (const const_iterator &it) {
+ container_const_reference<self_type>::assign (&it ());
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ detail::ignore_unused_variable_warning(it);
+ return true;
+ }
+ };
+
+ typedef const_iterator iterator;
+
+ BOOST_UBLAS_INLINE
+ const_iterator begin () const {
+ return const_iterator (*this);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator end () const {
+ return const_iterator (*this);
+ }
+
+ // Reverse iterator
+ typedef reverse_iterator_base<const_iterator> const_reverse_iterator;
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rbegin () const {
+ return const_reverse_iterator (end ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rend () const {
+ return const_reverse_iterator (begin ());
+ }
+
+ private:
+ size_type size_;
+ typedef const value_type const_value_type;
+ static const_value_type zero_;
+ };
+
+ template<class T>
+ typename zero_vector<T>::const_value_type zero_vector<T>::zero_ (0);
+
+
+ // Unit vector class
+ template<class T>
+ class unit_vector:
+ public vector_container<unit_vector<T> > {
+
+ typedef const T *const_pointer;
+ typedef unit_vector<T> self_type;
+ public:
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using vector_container<self_type>::operator ();
+#endif
+ typedef std::size_t size_type;
+ typedef std::ptrdiff_t difference_type;
+ typedef T value_type;
+ typedef const T &const_reference;
+ typedef T &reference;
+ typedef const vector_reference<const self_type> const_closure_type;
+ typedef vector_reference<self_type> closure_type;
+ typedef sparse_tag storage_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ unit_vector ():
+ vector_container<self_type> (),
+ size_ (0), index_ (0) {}
+ BOOST_UBLAS_INLINE
+ explicit unit_vector (size_type size, size_type index = 0):
+ vector_container<self_type> (),
+ size_ (size), index_ (index) {}
+ BOOST_UBLAS_INLINE
+ unit_vector (const unit_vector &v):
+ vector_container<self_type> (),
+ size_ (v.size_), index_ (v.index_) {}
+
+ // Accessors
+ BOOST_UBLAS_INLINE
+ size_type size () const {
+ return size_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type index () const {
+ return index_;
+ }
+
+ // Resizing
+ BOOST_UBLAS_INLINE
+ void resize (size_type size, bool /*preserve*/ = true) {
+ size_ = size;
+ }
+
+ // Element support
+ BOOST_UBLAS_INLINE
+ const_pointer find_element (size_type i) const {
+ if (i == index_)
+ return & one_;
+ else
+ return & zero_;
+ }
+
+ // Element access
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type i) const {
+ if (i == index_)
+ return one_;
+ else
+ return zero_;
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (size_type i) const {
+ return (*this) (i);
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ unit_vector &operator = (const unit_vector &v) {
+ size_ = v.size_;
+ index_ = v.index_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ unit_vector &assign_temporary (unit_vector &v) {
+ swap (v);
+ return *this;
+ }
+
+ // Swapping
+ BOOST_UBLAS_INLINE
+ void swap (unit_vector &v) {
+ if (this != &v) {
+ std::swap (size_, v.size_);
+ std::swap (index_, v.index_);
+ }
+ }
+ BOOST_UBLAS_INLINE
+ friend void swap (unit_vector &v1, unit_vector &v2) {
+ v1.swap (v2);
+ }
+
+ // Iterator types
+ private:
+ // Use bool to indicate begin (one_ as value)
+ typedef bool const_subiterator_type;
+ public:
+ class const_iterator;
+
+ // Element lookup
+ BOOST_UBLAS_INLINE
+ const_iterator find (size_type i) const {
+ return const_iterator (*this, i == index_);
+ }
+
+ class const_iterator:
+ public container_const_reference<unit_vector>,
+ public bidirectional_iterator_base<sparse_bidirectional_iterator_tag,
+ const_iterator, value_type> {
+ public:
+ typedef typename unit_vector::difference_type difference_type;
+ typedef typename unit_vector::value_type value_type;
+ typedef typename unit_vector::const_reference reference;
+ typedef typename unit_vector::const_pointer pointer;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator ():
+ container_const_reference<unit_vector> (), it_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator (const unit_vector &v, const const_subiterator_type &it):
+ container_const_reference<unit_vector> (v), it_ (it) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator &operator ++ () {
+ BOOST_UBLAS_CHECK (it_, bad_index ());
+ it_ = !it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator -- () {
+ BOOST_UBLAS_CHECK (!it_, bad_index ());
+ it_ = !it_;
+ return *this;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ BOOST_UBLAS_CHECK (it_, bad_index ());
+ return one_;
+ }
+
+ // Index
+ BOOST_UBLAS_INLINE
+ size_type index () const {
+ BOOST_UBLAS_CHECK (it_, bad_index ());
+ return (*this) ().index_;
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator &operator = (const const_iterator &it) {
+ container_const_reference<unit_vector>::assign (&it ());
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it_ == it.it_;
+ }
+
+ private:
+ const_subiterator_type it_;
+ };
+
+ typedef const_iterator iterator;
+
+ BOOST_UBLAS_INLINE
+ const_iterator begin () const {
+ return const_iterator (*this, true);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator end () const {
+ return const_iterator (*this, false);
+ }
+
+ // Reverse iterator
+ typedef reverse_iterator_base<const_iterator> const_reverse_iterator;
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rbegin () const {
+ return const_reverse_iterator (end ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rend () const {
+ return const_reverse_iterator (begin ());
+ }
+
+ private:
+ size_type size_;
+ size_type index_;
+ typedef const value_type const_value_type;
+ static const_value_type zero_;
+ static const_value_type one_;
+ };
+
+ template<class T>
+ typename unit_vector<T>::const_value_type unit_vector<T>::zero_ (0);
+ template<class T>
+ typename unit_vector<T>::const_value_type unit_vector<T>::one_ (1);
+
+
+ // Scalar vector class
+ template<class T>
+ class scalar_vector:
+ public vector_container<scalar_vector<T> > {
+
+ typedef const T *const_pointer;
+ typedef scalar_vector<T> self_type;
+ public:
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using vector_container<self_type>::operator ();
+#endif
+ typedef std::size_t size_type;
+ typedef std::ptrdiff_t difference_type;
+ typedef T value_type;
+ typedef const T &const_reference;
+ typedef T &reference;
+ typedef const vector_reference<const self_type> const_closure_type;
+ typedef dense_tag storage_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ scalar_vector ():
+ vector_container<self_type> (),
+ size_ (0), value_ () {}
+ BOOST_UBLAS_INLINE
+ explicit scalar_vector (size_type size, const value_type &value = value_type(1)):
+ vector_container<self_type> (),
+ size_ (size), value_ (value) {}
+ BOOST_UBLAS_INLINE
+ scalar_vector (const scalar_vector &v):
+ vector_container<self_type> (),
+ size_ (v.size_), value_ (v.value_) {}
+
+ // Accessors
+ BOOST_UBLAS_INLINE
+ size_type size () const {
+ return size_;
+ }
+
+ // Resizing
+ BOOST_UBLAS_INLINE
+ void resize (size_type size, bool /*preserve*/ = true) {
+ size_ = size;
+ }
+
+ // Element support
+ BOOST_UBLAS_INLINE
+ const_pointer find_element (size_type /*i*/) const {
+ return & value_;
+ }
+
+ // Element access
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type /*i*/) const {
+ return value_;
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (size_type /*i*/) const {
+ return value_;
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ scalar_vector &operator = (const scalar_vector &v) {
+ size_ = v.size_;
+ value_ = v.value_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ scalar_vector &assign_temporary (scalar_vector &v) {
+ swap (v);
+ return *this;
+ }
+
+ // Swapping
+ BOOST_UBLAS_INLINE
+ void swap (scalar_vector &v) {
+ if (this != &v) {
+ std::swap (size_, v.size_);
+ std::swap (value_, v.value_);
+ }
+ }
+ BOOST_UBLAS_INLINE
+ friend void swap (scalar_vector &v1, scalar_vector &v2) {
+ v1.swap (v2);
+ }
+
+ // Iterator types
+ private:
+ // Use an index
+ typedef size_type const_subiterator_type;
+
+ public:
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ typedef indexed_const_iterator<self_type, dense_random_access_iterator_tag> iterator;
+ typedef indexed_const_iterator<self_type, dense_random_access_iterator_tag> const_iterator;
+#else
+ class const_iterator;
+#endif
+
+ // Element lookup
+ BOOST_UBLAS_INLINE
+ const_iterator find (size_type i) const {
+ return const_iterator (*this, i);
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator:
+ public container_const_reference<scalar_vector>,
+ public random_access_iterator_base<dense_random_access_iterator_tag,
+ const_iterator, value_type> {
+ public:
+ typedef typename scalar_vector::difference_type difference_type;
+ typedef typename scalar_vector::value_type value_type;
+ typedef typename scalar_vector::const_reference reference;
+ typedef typename scalar_vector::const_pointer pointer;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator ():
+ container_const_reference<scalar_vector> (), it_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator (const scalar_vector &v, const const_subiterator_type &it):
+ container_const_reference<scalar_vector> (v), it_ (it) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator &operator ++ () {
+ ++ it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator -- () {
+ -- it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator += (difference_type n) {
+ it_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator -= (difference_type n) {
+ it_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it_ - it.it_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ BOOST_UBLAS_CHECK (it_ < (*this) ().size (), bad_index ());
+ return (*this) () (index ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+ // Index
+ BOOST_UBLAS_INLINE
+ size_type index () const {
+ BOOST_UBLAS_CHECK (it_ < (*this) ().size (), bad_index ());
+ return it_;
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator &operator = (const const_iterator &it) {
+ container_const_reference<scalar_vector>::assign (&it ());
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it_ == it.it_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it_ < it.it_;
+ }
+
+ private:
+ const_subiterator_type it_;
+ };
+
+ typedef const_iterator iterator;
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator begin () const {
+ return find (0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator end () const {
+ return find (size_);
+ }
+
+ // Reverse iterator
+ typedef reverse_iterator_base<const_iterator> const_reverse_iterator;
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rbegin () const {
+ return const_reverse_iterator (end ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rend () const {
+ return const_reverse_iterator (begin ());
+ }
+
+ private:
+ size_type size_;
+ value_type value_;
+ };
+
+
+ // Array based vector class
+ template<class T, std::size_t N>
+ class c_vector:
+ public vector_container<c_vector<T, N> > {
+
+ typedef c_vector<T, N> self_type;
+ public:
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using vector_container<self_type>::operator ();
+#endif
+ typedef std::size_t size_type;
+ typedef std::ptrdiff_t difference_type;
+ typedef T value_type;
+ typedef const T &const_reference;
+ typedef T &reference;
+ typedef value_type array_type[N];
+ typedef T *pointer;
+ typedef const T *const_pointer;
+ typedef const vector_reference<const self_type> const_closure_type;
+ typedef vector_reference<self_type> closure_type;
+ typedef self_type vector_temporary_type;
+ typedef dense_tag storage_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ c_vector ():
+ size_ (N) /* , data_ () */ {}
+ explicit BOOST_UBLAS_INLINE
+ c_vector (size_type size):
+ size_ (size) /* , data_ () */ {
+ if (size_ > N)
+ bad_size ().raise ();
+ }
+ BOOST_UBLAS_INLINE
+ c_vector (const c_vector &v):
+ size_ (v.size_) /* , data_ () */ {
+ if (size_ > N)
+ bad_size ().raise ();
+ *this = v;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ c_vector (const vector_expression<AE> &ae):
+ size_ (ae ().size ()) /* , data_ () */ {
+ if (size_ > N)
+ bad_size ().raise ();
+ vector_assign<scalar_assign> (*this, ae);
+ }
+
+ // Accessors
+ BOOST_UBLAS_INLINE
+ size_type size () const {
+ return size_;
+ }
+ BOOST_UBLAS_INLINE
+ const_pointer data () const {
+ return data_;
+ }
+ BOOST_UBLAS_INLINE
+ pointer data () {
+ return data_;
+ }
+
+ // Resizing
+ BOOST_UBLAS_INLINE
+ void resize (size_type size, bool preserve = true) {
+ if (size > N)
+ bad_size ().raise ();
+ size_ = size;
+ }
+
+ // Element support
+ BOOST_UBLAS_INLINE
+ pointer find_element (size_type i) {
+ return const_cast<pointer> (const_cast<const self_type&>(*this).find_element (i));
+ }
+ BOOST_UBLAS_INLINE
+ const_pointer find_element (size_type i) const {
+ return & data_ [i];
+ }
+
+ // Element access
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type i) const {
+ BOOST_UBLAS_CHECK (i < size_, bad_index ());
+ return data_ [i];
+ }
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type i) {
+ BOOST_UBLAS_CHECK (i < size_, bad_index ());
+ return data_ [i];
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (size_type i) const {
+ return (*this) (i);
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (size_type i) {
+ return (*this) (i);
+ }
+
+ // Element assignment
+ BOOST_UBLAS_INLINE
+ reference insert_element (size_type i, const_reference t) {
+ BOOST_UBLAS_CHECK (i < size_, bad_index ());
+ return (data_ [i] = t);
+ }
+ BOOST_UBLAS_INLINE
+ void erase_element (size_type i) {
+ BOOST_UBLAS_CHECK (i < size_, bad_index ());
+ data_ [i] = value_type/*zero*/();
+ }
+
+ // Zeroing
+ BOOST_UBLAS_INLINE
+ void clear () {
+ std::fill (data_, data_ + size_, value_type/*zero*/());
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ c_vector &operator = (const c_vector &v) {
+ size_ = v.size_;
+ std::copy (v.data_, v.data_ + v.size_, data_);
+ return *this;
+ }
+ template<class C> // Container assignment without temporary
+ BOOST_UBLAS_INLINE
+ c_vector &operator = (const vector_container<C> &v) {
+ resize (v ().size (), false);
+ assign (v);
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ c_vector &assign_temporary (c_vector &v) {
+ swap (v);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ c_vector &operator = (const vector_expression<AE> &ae) {
+ self_type temporary (ae);
+ return assign_temporary (temporary);
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ c_vector &assign (const vector_expression<AE> &ae) {
+ vector_assign<scalar_assign> (*this, ae);
+ return *this;
+ }
+
+ // Computed assignment
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ c_vector &operator += (const vector_expression<AE> &ae) {
+ self_type temporary (*this + ae);
+ return assign_temporary (temporary);
+ }
+ template<class C> // Container assignment without temporary
+ BOOST_UBLAS_INLINE
+ c_vector &operator += (const vector_container<C> &v) {
+ plus_assign (v);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ c_vector &plus_assign (const vector_expression<AE> &ae) {
+ vector_assign<scalar_plus_assign> ( *this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ c_vector &operator -= (const vector_expression<AE> &ae) {
+ self_type temporary (*this - ae);
+ return assign_temporary (temporary);
+ }
+ template<class C> // Container assignment without temporary
+ BOOST_UBLAS_INLINE
+ c_vector &operator -= (const vector_container<C> &v) {
+ minus_assign (v);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ c_vector &minus_assign (const vector_expression<AE> &ae) {
+ vector_assign<scalar_minus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ c_vector &operator *= (const AT &at) {
+ vector_assign_scalar<scalar_multiplies_assign> (*this, at);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ c_vector &operator /= (const AT &at) {
+ vector_assign_scalar<scalar_divides_assign> (*this, at);
+ return *this;
+ }
+
+ // Swapping
+ BOOST_UBLAS_INLINE
+ void swap (c_vector &v) {
+ if (this != &v) {
+ BOOST_UBLAS_CHECK (size_ == v.size_, bad_size ());
+ std::swap (size_, v.size_);
+ std::swap_ranges (data_, data_ + size_, v.data_);
+ }
+ }
+ BOOST_UBLAS_INLINE
+ friend void swap (c_vector &v1, c_vector &v2) {
+ v1.swap (v2);
+ }
+
+ // Iterator types
+ private:
+ // Use pointers for iterator
+ typedef const_pointer const_subiterator_type;
+ typedef pointer subiterator_type;
+
+ public:
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ typedef indexed_iterator<self_type, dense_random_access_iterator_tag> iterator;
+ typedef indexed_const_iterator<self_type, dense_random_access_iterator_tag> const_iterator;
+#else
+ class const_iterator;
+ class iterator;
+#endif
+
+ // Element lookup
+ BOOST_UBLAS_INLINE
+ const_iterator find (size_type i) const {
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ return const_iterator (*this, &data_ [i]);
+#else
+ return const_iterator (*this, i);
+#endif
+ }
+ BOOST_UBLAS_INLINE
+ iterator find (size_type i) {
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ return iterator (*this, &data_ [i]);
+#else
+ return iterator (*this, i);
+#endif
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator:
+ public container_const_reference<c_vector>,
+ public random_access_iterator_base<dense_random_access_iterator_tag,
+ const_iterator, value_type> {
+ public:
+ typedef typename c_vector::difference_type difference_type;
+ typedef typename c_vector::value_type value_type;
+ typedef typename c_vector::const_reference reference;
+ typedef typename c_vector::const_pointer pointer;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator ():
+ container_const_reference<self_type> (), it_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator (const self_type &v, const const_subiterator_type &it):
+ container_const_reference<self_type> (v), it_ (it) {}
+ BOOST_UBLAS_INLINE
+ const_iterator (const typename self_type::iterator &it): // ISSUE self_type:: stops VC8 using std::iterator here
+ container_const_reference<self_type> (it ()), it_ (it.it_) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator &operator ++ () {
+ ++ it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator -- () {
+ -- it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator += (difference_type n) {
+ it_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator -= (difference_type n) {
+ it_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it_ - it.it_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ BOOST_UBLAS_CHECK (it_ >= (*this) ().begin ().it_ && it_ < (*this) ().end ().it_, bad_index ());
+ return *it_;
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(it_ + n);
+ }
+
+ // Index
+ BOOST_UBLAS_INLINE
+ size_type index () const {
+ BOOST_UBLAS_CHECK (it_ >= (*this) ().begin ().it_ && it_ < (*this) ().end ().it_, bad_index ());
+ const self_type &v = (*this) ();
+ return it_ - v.begin ().it_;
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator &operator = (const const_iterator &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it_ == it.it_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it_ < it.it_;
+ }
+
+ private:
+ const_subiterator_type it_;
+
+ friend class iterator;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator begin () const {
+ return find (0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator end () const {
+ return find (size_);
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class iterator:
+ public container_reference<c_vector>,
+ public random_access_iterator_base<dense_random_access_iterator_tag,
+ iterator, value_type> {
+ public:
+ typedef typename c_vector::difference_type difference_type;
+ typedef typename c_vector::value_type value_type;
+ typedef typename c_vector::reference reference;
+ typedef typename c_vector::pointer pointer;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ iterator ():
+ container_reference<self_type> (), it_ () {}
+ BOOST_UBLAS_INLINE
+ iterator (self_type &v, const subiterator_type &it):
+ container_reference<self_type> (v), it_ (it) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ iterator &operator ++ () {
+ ++ it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator &operator -- () {
+ -- it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator &operator += (difference_type n) {
+ it_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator &operator -= (difference_type n) {
+ it_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const iterator &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it_ - it.it_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ BOOST_UBLAS_CHECK (it_ >= (*this) ().begin ().it_ && it_ < (*this) ().end ().it_, bad_index ());
+ return *it_;
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (difference_type n) const {
+ return *(it_ + n);
+ }
+
+ // Index
+ BOOST_UBLAS_INLINE
+ size_type index () const {
+ BOOST_UBLAS_CHECK (it_ >= (*this) ().begin ().it_ && it_ < (*this) ().end ().it_, bad_index ());
+ // EDG won't allow const self_type it doesn't allow friend access to it_
+ self_type &v = (*this) ();
+ return it_ - v.begin ().it_;
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ iterator &operator = (const iterator &it) {
+ container_reference<self_type>::assign (&it ());
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const iterator &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it_ == it.it_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const iterator &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it_ < it.it_;
+ }
+
+ private:
+ subiterator_type it_;
+
+ friend class const_iterator;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ iterator begin () {
+ return find (0);
+ }
+ BOOST_UBLAS_INLINE
+ iterator end () {
+ return find (size_);
+ }
+
+ // Reverse iterator
+ typedef reverse_iterator_base<const_iterator> const_reverse_iterator;
+ typedef reverse_iterator_base<iterator> reverse_iterator;
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rbegin () const {
+ return const_reverse_iterator (end ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rend () const {
+ return const_reverse_iterator (begin ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator rbegin () {
+ return reverse_iterator (end ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator rend () {
+ return reverse_iterator (begin ());
+ }
+
+ private:
+ size_type size_;
+ array_type data_;
+ };
+
+}}}
+
+#endif
diff --git a/boost/boost/numeric/ublas/vector_expression.hpp b/boost/boost/numeric/ublas/vector_expression.hpp
new file mode 100644
index 00000000000..f5588de4d5f
--- /dev/null
+++ b/boost/boost/numeric/ublas/vector_expression.hpp
@@ -0,0 +1,1672 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without fee,
+// provided that the above copyright notice appear in all copies and
+// that both that copyright notice and this permission notice appear
+// in supporting documentation. The authors make no representations
+// about the suitability of this software for any purpose.
+// It is provided "as is" without express or implied warranty.
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#ifndef _BOOST_UBLAS_VECTOR_EXPRESSION_
+#define _BOOST_UBLAS_VECTOR_EXPRESSION_
+
+#include <boost/numeric/ublas/expression_types.hpp>
+
+
+// Expression templates based on ideas of Todd Veldhuizen and Geoffrey Furnish
+// Iterators based on ideas of Jeremy Siek
+//
+// Classes that model the Vector Expression concept
+
+namespace boost { namespace numeric { namespace ublas {
+
+ template<class E>
+ class vector_reference:
+ public vector_expression<vector_reference<E> > {
+
+ typedef vector_reference<E> self_type;
+ public:
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using vector_expression<vector_reference<E> >::operator ();
+#endif
+ typedef typename E::size_type size_type;
+ typedef typename E::difference_type difference_type;
+ typedef typename E::value_type value_type;
+ typedef typename E::const_reference const_reference;
+ typedef typename boost::mpl::if_<boost::is_const<E>,
+ typename E::const_reference,
+ typename E::reference>::type reference;
+ typedef E referred_type;
+ typedef const self_type const_closure_type;
+ typedef self_type closure_type;
+ typedef typename E::storage_category storage_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ explicit vector_reference (referred_type &e):
+ e_ (e) {}
+
+ // Accessors
+ BOOST_UBLAS_INLINE
+ size_type size () const {
+ return expression ().size ();
+ }
+
+ public:
+ // Expression accessors - const correct
+ BOOST_UBLAS_INLINE
+ const referred_type &expression () const {
+ return e_;
+ }
+ BOOST_UBLAS_INLINE
+ referred_type &expression () {
+ return e_;
+ }
+
+ public:
+ // Element access
+#ifndef BOOST_UBLAS_REFERENCE_CONST_MEMBER
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type i) const {
+ return expression () (i);
+ }
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type i) {
+ return expression () (i);
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (size_type i) const {
+ return expression () [i];
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (size_type i) {
+ return expression () [i];
+ }
+#else
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type i) const {
+ return expression () (i);
+ }
+
+ BOOST_UBLAS_INLINE
+ reference operator [] (size_type i) const {
+ return expression () [i];
+ }
+#endif
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ vector_reference &operator = (const vector_reference &v) {
+ expression ().operator = (v);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ vector_reference &operator = (const vector_expression<AE> &ae) {
+ expression ().operator = (ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ vector_reference &assign (const vector_expression<AE> &ae) {
+ expression ().assign (ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ vector_reference &operator += (const vector_expression<AE> &ae) {
+ expression ().operator += (ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ vector_reference &plus_assign (const vector_expression<AE> &ae) {
+ expression ().plus_assign (ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ vector_reference &operator -= (const vector_expression<AE> &ae) {
+ expression ().operator -= (ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ vector_reference &minus_assign (const vector_expression<AE> &ae) {
+ expression ().minus_assign (ae);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ vector_reference &operator *= (const AT &at) {
+ expression ().operator *= (at);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ vector_reference &operator /= (const AT &at) {
+ expression ().operator /= (at);
+ return *this;
+ }
+
+ // Swapping
+ BOOST_UBLAS_INLINE
+ void swap (vector_reference &v) {
+ expression ().swap (v.expression ());
+ }
+
+ // Closure comparison
+ BOOST_UBLAS_INLINE
+ bool same_closure (const vector_reference &vr) const {
+ return &(*this).e_ == &vr.e_;
+ }
+
+ // Iterator types
+ typedef typename E::const_iterator const_iterator;
+ typedef typename boost::mpl::if_<boost::is_const<E>,
+ typename E::const_iterator,
+ typename E::iterator>::type iterator;
+
+ // Element lookup
+ BOOST_UBLAS_INLINE
+ const_iterator find (size_type i) const {
+ return expression ().find (i);
+ }
+ BOOST_UBLAS_INLINE
+ iterator find (size_type i) {
+ return expression ().find (i);
+ }
+
+ // Iterator is the iterator of the referenced expression.
+
+ BOOST_UBLAS_INLINE
+ const_iterator begin () const {
+ return expression ().begin ();
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator end () const {
+ return expression ().end ();
+ }
+
+ BOOST_UBLAS_INLINE
+ iterator begin () {
+ return expression ().begin ();
+ }
+ BOOST_UBLAS_INLINE
+ iterator end () {
+ return expression ().end ();
+ }
+
+ // Reverse iterator
+ typedef reverse_iterator_base<const_iterator> const_reverse_iterator;
+ typedef reverse_iterator_base<iterator> reverse_iterator;
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rbegin () const {
+ return const_reverse_iterator (end ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rend () const {
+ return const_reverse_iterator (begin ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator rbegin () {
+ return reverse_iterator (end ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator rend () {
+ return reverse_iterator (begin ());
+ }
+
+ private:
+ referred_type &e_;
+ };
+
+
+ template<class E, class F>
+ class vector_unary:
+ public vector_expression<vector_unary<E, F> > {
+
+ typedef F functor_type;
+ typedef typename boost::mpl::if_<boost::is_same<F, scalar_identity<typename E::value_type> >,
+ E,
+ const E>::type expression_type;
+ typedef typename boost::mpl::if_<boost::is_const<expression_type>,
+ typename E::const_closure_type,
+ typename E::closure_type>::type expression_closure_type;
+ typedef vector_unary<E, F> self_type;
+ public:
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using vector_expression<vector_unary<E, F> >::operator ();
+#endif
+ typedef typename E::size_type size_type;
+ typedef typename E::difference_type difference_type;
+ typedef typename F::result_type value_type;
+ typedef value_type const_reference;
+ typedef typename boost::mpl::if_<boost::is_same<F, scalar_identity<value_type> >,
+ typename E::reference,
+ value_type>::type reference;
+ typedef const self_type const_closure_type;
+ typedef self_type closure_type;
+ typedef unknown_storage_tag storage_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ // May be used as mutable expression.
+ explicit vector_unary (expression_type &e):
+ e_ (e) {}
+
+ // Accessors
+ BOOST_UBLAS_INLINE
+ size_type size () const {
+ return e_.size ();
+ }
+
+ public:
+ // Expression accessors
+ BOOST_UBLAS_INLINE
+ const expression_closure_type &expression () const {
+ return e_;
+ }
+
+ public:
+ // Element access
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type i) const {
+ return functor_type::apply (e_ (i));
+ }
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type i) {
+ BOOST_STATIC_ASSERT ((boost::is_same<functor_type, scalar_identity<value_type > >::value));
+ return e_ (i);
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (size_type i) const {
+ return functor_type::apply (e_ [i]);
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (size_type i) {
+ BOOST_STATIC_ASSERT ((boost::is_same<functor_type, scalar_identity<value_type > >::value));
+ return e_ [i];
+ }
+
+ // Closure comparison
+ BOOST_UBLAS_INLINE
+ bool same_closure (const vector_unary &vu) const {
+ return (*this).expression ().same_closure (vu.expression ());
+ }
+
+ // Iterator types
+ private:
+ typedef typename E::const_iterator const_subiterator_type;
+ typedef const value_type *const_pointer;
+
+ public:
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ typedef indexed_const_iterator<const_closure_type, typename const_subiterator_type::iterator_category> const_iterator;
+ typedef const_iterator iterator;
+#else
+ class const_iterator;
+ typedef const_iterator iterator;
+#endif
+
+ // Element lookup
+ BOOST_UBLAS_INLINE
+ const_iterator find (size_type i) const {
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ const_subiterator_type it (e_.find (i));
+ return const_iterator (*this, it.index ());
+#else
+ return const_iterator (*this, e_.find (i));
+#endif
+ }
+
+ // Iterator enhances the iterator of the referenced expression
+ // with the unary functor.
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator:
+ public container_const_reference<vector_unary>,
+ public iterator_base_traits<typename E::const_iterator::iterator_category>::template
+ iterator_base<const_iterator, value_type>::type {
+ public:
+ typedef typename E::const_iterator::iterator_category iterator_category;
+ typedef typename vector_unary::difference_type difference_type;
+ typedef typename vector_unary::value_type value_type;
+ typedef typename vector_unary::const_reference reference;
+ typedef typename vector_unary::const_pointer pointer;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator ():
+ container_const_reference<self_type> (), it_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator (const self_type &vu, const const_subiterator_type &it):
+ container_const_reference<self_type> (vu), it_ (it) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator &operator ++ () {
+ ++ it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator -- () {
+ -- it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator += (difference_type n) {
+ it_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator -= (difference_type n) {
+ it_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ - it.it_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ return functor_type::apply (*it_);
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+ // Index
+ BOOST_UBLAS_INLINE
+ size_type index () const {
+ return it_.index ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator &operator = (const const_iterator &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ == it.it_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ < it.it_;
+ }
+
+ private:
+ const_subiterator_type it_;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator begin () const {
+ return find (0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator end () const {
+ return find (size ());
+ }
+
+ // Reverse iterator
+ typedef reverse_iterator_base<const_iterator> const_reverse_iterator;
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rbegin () const {
+ return const_reverse_iterator (end ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rend () const {
+ return const_reverse_iterator (begin ());
+ }
+
+ private:
+ expression_closure_type e_;
+ };
+
+ template<class E, class F>
+ struct vector_unary_traits {
+ typedef vector_unary<E, F> expression_type;
+//FIXME
+// #ifndef BOOST_UBLAS_SIMPLE_ET_DEBUG
+ typedef expression_type result_type;
+// #else
+// typedef typename E::vector_temporary_type result_type;
+// #endif
+ };
+
+ // (- v) [i] = - v [i]
+ template<class E>
+ BOOST_UBLAS_INLINE
+ typename vector_unary_traits<E, scalar_negate<typename E::value_type> >::result_type
+ operator - (const vector_expression<E> &e) {
+ typedef typename vector_unary_traits<E, scalar_negate<typename E::value_type> >::expression_type expression_type;
+ return expression_type (e ());
+ }
+
+ // (conj v) [i] = conj (v [i])
+ template<class E>
+ BOOST_UBLAS_INLINE
+ typename vector_unary_traits<E, scalar_conj<typename E::value_type> >::result_type
+ conj (const vector_expression<E> &e) {
+ typedef typename vector_unary_traits<E, scalar_conj<typename E::value_type> >::expression_type expression_type;
+ return expression_type (e ());
+ }
+
+ // (real v) [i] = real (v [i])
+ template<class E>
+ BOOST_UBLAS_INLINE
+ typename vector_unary_traits<E, scalar_real<typename E::value_type> >::result_type
+ real (const vector_expression<E> &e) {
+ typedef typename vector_unary_traits<E, scalar_real<typename E::value_type> >::expression_type expression_type;
+ return expression_type (e ());
+ }
+
+ // (imag v) [i] = imag (v [i])
+ template<class E>
+ BOOST_UBLAS_INLINE
+ typename vector_unary_traits<E, scalar_imag<typename E::value_type> >::result_type
+ imag (const vector_expression<E> &e) {
+ typedef typename vector_unary_traits<E, scalar_imag<typename E::value_type> >::expression_type expression_type;
+ return expression_type (e ());
+ }
+
+ // (trans v) [i] = v [i]
+ template<class E>
+ BOOST_UBLAS_INLINE
+ typename vector_unary_traits<const E, scalar_identity<typename E::value_type> >::result_type
+ trans (const vector_expression<E> &e) {
+ typedef typename vector_unary_traits<const E, scalar_identity<typename E::value_type> >::expression_type expression_type;
+ return expression_type (e ());
+ }
+ template<class E>
+ BOOST_UBLAS_INLINE
+ typename vector_unary_traits<E, scalar_identity<typename E::value_type> >::result_type
+ trans (vector_expression<E> &e) {
+ typedef typename vector_unary_traits<E, scalar_identity<typename E::value_type> >::expression_type expression_type;
+ return expression_type (e ());
+ }
+
+ // (herm v) [i] = conj (v [i])
+ template<class E>
+ BOOST_UBLAS_INLINE
+ typename vector_unary_traits<E, scalar_conj<typename E::value_type> >::result_type
+ herm (const vector_expression<E> &e) {
+ typedef typename vector_unary_traits<E, scalar_conj<typename E::value_type> >::expression_type expression_type;
+ return expression_type (e ());
+ }
+
+ template<class E1, class E2, class F>
+ class vector_binary:
+ public vector_expression<vector_binary<E1, E2, F> > {
+
+ typedef E1 expression1_type;
+ typedef E2 expression2_type;
+ typedef F functor_type;
+ typedef typename E1::const_closure_type expression1_closure_type;
+ typedef typename E2::const_closure_type expression2_closure_type;
+ typedef vector_binary<E1, E2, F> self_type;
+ public:
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using vector_expression<vector_binary<E1, E2, F> >::operator ();
+#endif
+ typedef typename promote_traits<typename E1::size_type, typename E2::size_type>::promote_type size_type;
+ typedef typename promote_traits<typename E1::difference_type, typename E2::difference_type>::promote_type difference_type;
+ typedef typename F::result_type value_type;
+ typedef value_type const_reference;
+ typedef const_reference reference;
+ typedef const self_type const_closure_type;
+ typedef const_closure_type closure_type;
+ typedef unknown_storage_tag storage_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ vector_binary (const expression1_type &e1, const expression2_type &e2):
+ e1_ (e1), e2_ (e2) {}
+
+ // Accessors
+ BOOST_UBLAS_INLINE
+ size_type size () const {
+ return BOOST_UBLAS_SAME (e1_.size (), e2_.size ());
+ }
+
+ private:
+ // Accessors
+ BOOST_UBLAS_INLINE
+ const expression1_closure_type &expression1 () const {
+ return e1_;
+ }
+ BOOST_UBLAS_INLINE
+ const expression2_closure_type &expression2 () const {
+ return e2_;
+ }
+
+ public:
+ // Element access
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type i) const {
+ return functor_type::apply (e1_ (i), e2_ (i));
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (size_type i) const {
+ return functor_type::apply (e1_ [i], e2_ [i]);
+ }
+
+ // Closure comparison
+ BOOST_UBLAS_INLINE
+ bool same_closure (const vector_binary &vb) const {
+ return (*this).expression1 ().same_closure (vb.expression1 ()) &&
+ (*this).expression2 ().same_closure (vb.expression2 ());
+ }
+
+ // Iterator types
+ private:
+ typedef typename E1::const_iterator const_subiterator1_type;
+ typedef typename E2::const_iterator const_subiterator2_type;
+ typedef const value_type *const_pointer;
+
+ public:
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ typedef typename iterator_restrict_traits<typename const_subiterator1_type::iterator_category,
+ typename const_subiterator2_type::iterator_category>::iterator_category iterator_category;
+ typedef indexed_const_iterator<const_closure_type, iterator_category> const_iterator;
+ typedef const_iterator iterator;
+#else
+ class const_iterator;
+ typedef const_iterator iterator;
+#endif
+
+ // Element lookup
+ BOOST_UBLAS_INLINE
+ const_iterator find (size_type i) const {
+ const_subiterator1_type it1 (e1_.find (i));
+ const_subiterator1_type it1_end (e1_.find (size ()));
+ const_subiterator2_type it2 (e2_.find (i));
+ const_subiterator2_type it2_end (e2_.find (size ()));
+ i = (std::min) (it1 != it1_end ? it1.index () : size (),
+ it2 != it2_end ? it2.index () : size ());
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ return const_iterator (*this, i);
+#else
+ return const_iterator (*this, i, it1, it1_end, it2, it2_end);
+#endif
+ }
+
+ // Iterator merges the iterators of the referenced expressions and
+ // enhances them with the binary functor.
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator:
+ public container_const_reference<vector_binary>,
+ public iterator_base_traits<typename iterator_restrict_traits<typename E1::const_iterator::iterator_category,
+ typename E2::const_iterator::iterator_category>::iterator_category>::template
+ iterator_base<const_iterator, value_type>::type {
+ public:
+ typedef typename iterator_restrict_traits<typename E1::const_iterator::iterator_category,
+ typename E2::const_iterator::iterator_category>::iterator_category iterator_category;
+ typedef typename vector_binary::difference_type difference_type;
+ typedef typename vector_binary::value_type value_type;
+ typedef typename vector_binary::const_reference reference;
+ typedef typename vector_binary::const_pointer pointer;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator ():
+ container_const_reference<self_type> (), i_ (), it1_ (), it1_end_ (), it2_ (), it2_end_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator (const self_type &vb, size_type i,
+ const const_subiterator1_type &it1, const const_subiterator1_type &it1_end,
+ const const_subiterator2_type &it2, const const_subiterator2_type &it2_end):
+ container_const_reference<self_type> (vb), i_ (i), it1_ (it1), it1_end_ (it1_end), it2_ (it2), it2_end_ (it2_end) {}
+
+ private:
+ // Dense specializations
+ BOOST_UBLAS_INLINE
+ void increment (dense_random_access_iterator_tag) {
+ ++ i_; ++ it1_; ++ it2_;
+ }
+ BOOST_UBLAS_INLINE
+ void decrement (dense_random_access_iterator_tag) {
+ -- i_; -- it1_; -- it2_;
+ }
+ BOOST_UBLAS_INLINE
+ void increment (dense_random_access_iterator_tag, difference_type n) {
+ i_ += n; it1_ += n; it2_ += n;
+ }
+ BOOST_UBLAS_INLINE
+ void decrement (dense_random_access_iterator_tag, difference_type n) {
+ i_ -= n; it1_ -= n; it2_ -= n;
+ }
+ BOOST_UBLAS_INLINE
+ value_type dereference (dense_random_access_iterator_tag) const {
+ return functor_type::apply (*it1_, *it2_);
+ }
+
+ // Packed specializations
+ BOOST_UBLAS_INLINE
+ void increment (packed_random_access_iterator_tag) {
+ if (it1_ != it1_end_)
+ if (it1_.index () <= i_)
+ ++ it1_;
+ if (it2_ != it2_end_)
+ if (it2_.index () <= i_)
+ ++ it2_;
+ ++ i_;
+ }
+ BOOST_UBLAS_INLINE
+ void decrement (packed_random_access_iterator_tag) {
+ if (it1_ != it1_end_)
+ if (i_ <= it1_.index ())
+ -- it1_;
+ if (it2_ != it2_end_)
+ if (i_ <= it2_.index ())
+ -- it2_;
+ -- i_;
+ }
+ BOOST_UBLAS_INLINE
+ void increment (packed_random_access_iterator_tag, difference_type n) {
+ while (n > 0) {
+ increment (packed_random_access_iterator_tag ());
+ --n;
+ }
+ while (n < 0) {
+ decrement (packed_random_access_iterator_tag ());
+ ++n;
+ }
+ }
+ BOOST_UBLAS_INLINE
+ void decrement (packed_random_access_iterator_tag, difference_type n) {
+ while (n > 0) {
+ decrement (packed_random_access_iterator_tag ());
+ --n;
+ }
+ while (n < 0) {
+ increment (packed_random_access_iterator_tag ());
+ ++n;
+ }
+ }
+ BOOST_UBLAS_INLINE
+ value_type dereference (packed_random_access_iterator_tag) const {
+ value_type t1 = value_type/*zero*/();
+ if (it1_ != it1_end_)
+ if (it1_.index () == i_)
+ t1 = *it1_;
+ value_type t2 = value_type/*zero*/();
+ if (it2_ != it2_end_)
+ if (it2_.index () == i_)
+ t2 = *it2_;
+ return functor_type::apply (t1, t2);
+ }
+
+ // Sparse specializations
+ BOOST_UBLAS_INLINE
+ void increment (sparse_bidirectional_iterator_tag) {
+ size_type index1 = (*this) ().size ();
+ if (it1_ != it1_end_) {
+ if (it1_.index () <= i_)
+ ++ it1_;
+ if (it1_ != it1_end_)
+ index1 = it1_.index ();
+ }
+ size_type index2 = (*this) ().size ();
+ if (it2_ != it2_end_) {
+ if (it2_.index () <= i_)
+ ++ it2_;
+ if (it2_ != it2_end_)
+ index2 = it2_.index ();
+ }
+ i_ = (std::min) (index1, index2);
+ }
+ BOOST_UBLAS_INLINE
+ void decrement (sparse_bidirectional_iterator_tag) {
+ size_type index1 = (*this) ().size ();
+ if (it1_ != it1_end_) {
+ if (i_ <= it1_.index ())
+ -- it1_;
+ if (it1_ != it1_end_)
+ index1 = it1_.index ();
+ }
+ size_type index2 = (*this) ().size ();
+ if (it2_ != it2_end_) {
+ if (i_ <= it2_.index ())
+ -- it2_;
+ if (it2_ != it2_end_)
+ index2 = it2_.index ();
+ }
+ i_ = (std::max) (index1, index2);
+ }
+ BOOST_UBLAS_INLINE
+ void increment (sparse_bidirectional_iterator_tag, difference_type n) {
+ while (n > 0) {
+ increment (sparse_bidirectional_iterator_tag ());
+ --n;
+ }
+ while (n < 0) {
+ decrement (sparse_bidirectional_iterator_tag ());
+ ++n;
+ }
+ }
+ BOOST_UBLAS_INLINE
+ void decrement (sparse_bidirectional_iterator_tag, difference_type n) {
+ while (n > 0) {
+ decrement (sparse_bidirectional_iterator_tag ());
+ --n;
+ }
+ while (n < 0) {
+ increment (sparse_bidirectional_iterator_tag ());
+ ++n;
+ }
+ }
+ BOOST_UBLAS_INLINE
+ value_type dereference (sparse_bidirectional_iterator_tag) const {
+ value_type t1 = value_type/*zero*/();
+ if (it1_ != it1_end_)
+ if (it1_.index () == i_)
+ t1 = *it1_;
+ value_type t2 = value_type/*zero*/();
+ if (it2_ != it2_end_)
+ if (it2_.index () == i_)
+ t2 = *it2_;
+ return functor_type::apply (t1, t2);
+ }
+
+ public:
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator &operator ++ () {
+ increment (iterator_category ());
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator -- () {
+ decrement (iterator_category ());
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator += (difference_type n) {
+ increment (iterator_category (), n);
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator -= (difference_type n) {
+ decrement (iterator_category (), n);
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return index () - it.index ();
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ return dereference (iterator_category ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+ // Index
+ BOOST_UBLAS_INLINE
+ size_type index () const {
+ return i_;
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator &operator = (const const_iterator &it) {
+ container_const_reference<self_type>::assign (&it ());
+ i_ = it.i_;
+ it1_ = it.it1_;
+ it1_end_ = it.it1_end_;
+ it2_ = it.it2_;
+ it2_end_ = it.it2_end_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return index () == it.index ();
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return index () < it.index ();
+ }
+
+ private:
+ size_type i_;
+ const_subiterator1_type it1_;
+ const_subiterator1_type it1_end_;
+ const_subiterator2_type it2_;
+ const_subiterator2_type it2_end_;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator begin () const {
+ return find (0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator end () const {
+ return find (size ());
+ }
+
+ // Reverse iterator
+ typedef reverse_iterator_base<const_iterator> const_reverse_iterator;
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rbegin () const {
+ return const_reverse_iterator (end ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rend () const {
+ return const_reverse_iterator (begin ());
+ }
+
+ private:
+ expression1_closure_type e1_;
+ expression2_closure_type e2_;
+ };
+
+ template<class E1, class E2, class F>
+ struct vector_binary_traits {
+ typedef vector_binary<E1, E2, F> expression_type;
+#ifndef BOOST_UBLAS_SIMPLE_ET_DEBUG
+ typedef expression_type result_type;
+#else
+ typedef typename E1::vector_temporary_type result_type;
+#endif
+ };
+
+ // (v1 + v2) [i] = v1 [i] + v2 [i]
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ typename vector_binary_traits<E1, E2, scalar_plus<typename E1::value_type,
+ typename E2::value_type> >::result_type
+ operator + (const vector_expression<E1> &e1,
+ const vector_expression<E2> &e2) {
+ typedef typename vector_binary_traits<E1, E2, scalar_plus<typename E1::value_type,
+ typename E2::value_type> >::expression_type expression_type;
+ return expression_type (e1 (), e2 ());
+ }
+
+ // (v1 - v2) [i] = v1 [i] - v2 [i]
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ typename vector_binary_traits<E1, E2, scalar_minus<typename E1::value_type,
+ typename E2::value_type> >::result_type
+ operator - (const vector_expression<E1> &e1,
+ const vector_expression<E2> &e2) {
+ typedef typename vector_binary_traits<E1, E2, scalar_minus<typename E1::value_type,
+ typename E2::value_type> >::expression_type expression_type;
+ return expression_type (e1 (), e2 ());
+ }
+
+ // (v1 * v2) [i] = v1 [i] * v2 [i]
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ typename vector_binary_traits<E1, E2, scalar_multiplies<typename E1::value_type,
+ typename E2::value_type> >::result_type
+ element_prod (const vector_expression<E1> &e1,
+ const vector_expression<E2> &e2) {
+ typedef typename vector_binary_traits<E1, E2, scalar_multiplies<typename E1::value_type,
+ typename E2::value_type> >::expression_type expression_type;
+ return expression_type (e1 (), e2 ());
+ }
+
+ // (v1 / v2) [i] = v1 [i] / v2 [i]
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ typename vector_binary_traits<E1, E2, scalar_divides<typename E1::value_type,
+ typename E2::value_type> >::result_type
+ element_div (const vector_expression<E1> &e1,
+ const vector_expression<E2> &e2) {
+ typedef typename vector_binary_traits<E1, E2, scalar_divides<typename E1::value_type,
+ typename E2::value_type> >::expression_type expression_type;
+ return expression_type (e1 (), e2 ());
+ }
+
+
+ template<class E1, class E2, class F>
+ class vector_binary_scalar1:
+ public vector_expression<vector_binary_scalar1<E1, E2, F> > {
+
+ typedef F functor_type;
+ typedef E1 expression1_type;
+ typedef E2 expression2_type;
+ public:
+ typedef const E1& expression1_closure_type;
+ typedef typename E2::const_closure_type expression2_closure_type;
+ private:
+ typedef vector_binary_scalar1<E1, E2, F> self_type;
+ public:
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using vector_expression<vector_binary_scalar1<E1, E2, F> >::operator ();
+#endif
+ typedef typename E2::size_type size_type;
+ typedef typename E2::difference_type difference_type;
+ typedef typename F::result_type value_type;
+ typedef value_type const_reference;
+ typedef const_reference reference;
+ typedef const self_type const_closure_type;
+ typedef const_closure_type closure_type;
+ typedef unknown_storage_tag storage_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ vector_binary_scalar1 (const expression1_type &e1, const expression2_type &e2):
+ e1_ (e1), e2_ (e2) {}
+
+ // Accessors
+ BOOST_UBLAS_INLINE
+ size_type size () const {
+ return e2_.size ();
+ }
+
+ public:
+ // Element access
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type i) const {
+ return functor_type::apply (e1_, e2_ (i));
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (size_type i) const {
+ return functor_type::apply (e1_, e2_ [i]);
+ }
+
+ // Closure comparison
+ BOOST_UBLAS_INLINE
+ bool same_closure (const vector_binary_scalar1 &vbs1) const {
+ return &e1_ == &(vbs1.e1_) &&
+ (*this).e2_.same_closure (vbs1.e2_);
+ }
+
+ // Iterator types
+ private:
+ typedef expression1_type const_subiterator1_type;
+ typedef typename expression2_type::const_iterator const_subiterator2_type;
+ typedef const value_type *const_pointer;
+
+ public:
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ typedef indexed_const_iterator<const_closure_type, typename const_subiterator2_type::iterator_category> const_iterator;
+ typedef const_iterator iterator;
+#else
+ class const_iterator;
+ typedef const_iterator iterator;
+#endif
+
+ // Element lookup
+ BOOST_UBLAS_INLINE
+ const_iterator find (size_type i) const {
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ const_subiterator2_type it (e2_.find (i));
+ return const_iterator (*this, it.index ());
+#else
+ return const_iterator (*this, const_subiterator1_type (e1_), e2_.find (i));
+#endif
+ }
+
+ // Iterator enhances the iterator of the referenced vector expression
+ // with the binary functor.
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator:
+ public container_const_reference<vector_binary_scalar1>,
+ public iterator_base_traits<typename E2::const_iterator::iterator_category>::template
+ iterator_base<const_iterator, value_type>::type {
+ public:
+ typedef typename E2::const_iterator::iterator_category iterator_category;
+ typedef typename vector_binary_scalar1::difference_type difference_type;
+ typedef typename vector_binary_scalar1::value_type value_type;
+ typedef typename vector_binary_scalar1::const_reference reference;
+ typedef typename vector_binary_scalar1::const_pointer pointer;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator ():
+ container_const_reference<self_type> (), it1_ (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator (const self_type &vbs, const const_subiterator1_type &it1, const const_subiterator2_type &it2):
+ container_const_reference<self_type> (vbs), it1_ (it1), it2_ (it2) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator &operator ++ () {
+ ++ it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator -- () {
+ -- it2_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator += (difference_type n) {
+ it2_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator -= (difference_type n) {
+ it2_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ // FIXME we shouldn't compare floats
+ // BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ - it.it2_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ return functor_type::apply (it1_, *it2_);
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+ // Index
+ BOOST_UBLAS_INLINE
+ size_type index () const {
+ return it2_.index ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator &operator = (const const_iterator &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it1_ = it.it1_;
+ it2_ = it.it2_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ // FIXME we shouldn't compare floats
+ // BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ == it.it2_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ // FIXME we shouldn't compare floats
+ // BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());
+ return it2_ < it.it2_;
+ }
+
+ private:
+ const_subiterator1_type it1_;
+ const_subiterator2_type it2_;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator begin () const {
+ return find (0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator end () const {
+ return find (size ());
+ }
+
+ // Reverse iterator
+ typedef reverse_iterator_base<const_iterator> const_reverse_iterator;
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rbegin () const {
+ return const_reverse_iterator (end ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rend () const {
+ return const_reverse_iterator (begin ());
+ }
+
+ private:
+ expression1_closure_type e1_;
+ expression2_closure_type e2_;
+ };
+
+ template<class E1, class E2, class F>
+ struct vector_binary_scalar1_traits {
+ typedef vector_binary_scalar1<E1, E2, F> expression_type; // allow E1 to be builtin type
+#ifndef BOOST_UBLAS_SIMPLE_ET_DEBUG
+ typedef expression_type result_type;
+#else
+ typedef typename E2::vector_temporary_type result_type;
+#endif
+ };
+
+ // (t * v) [i] = t * v [i]
+ template<class T1, class E2>
+ BOOST_UBLAS_INLINE
+ typename vector_binary_scalar1_traits<const T1, E2, scalar_multiplies<T1, typename E2::value_type> >::result_type
+ operator * (const T1 &e1,
+ const vector_expression<E2> &e2) {
+ typedef typename vector_binary_scalar1_traits<const T1, E2, scalar_multiplies<T1, typename E2::value_type> >::expression_type expression_type;
+ return expression_type (e1, e2 ());
+ }
+
+
+ template<class E1, class E2, class F>
+ class vector_binary_scalar2:
+ public vector_expression<vector_binary_scalar2<E1, E2, F> > {
+
+ typedef F functor_type;
+ typedef E1 expression1_type;
+ typedef E2 expression2_type;
+ typedef typename E1::const_closure_type expression1_closure_type;
+ typedef const E2& expression2_closure_type;
+ typedef vector_binary_scalar2<E1, E2, F> self_type;
+ public:
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using vector_expression<vector_binary_scalar2<E1, E2, F> >::operator ();
+#endif
+ typedef typename E1::size_type size_type;
+ typedef typename E1::difference_type difference_type;
+ typedef typename F::result_type value_type;
+ typedef value_type const_reference;
+ typedef const_reference reference;
+ typedef const self_type const_closure_type;
+ typedef const_closure_type closure_type;
+ typedef unknown_storage_tag storage_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ vector_binary_scalar2 (const expression1_type &e1, const expression2_type &e2):
+ e1_ (e1), e2_ (e2) {}
+
+ // Accessors
+ BOOST_UBLAS_INLINE
+ size_type size () const {
+ return e1_.size ();
+ }
+
+ public:
+ // Element access
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type i) const {
+ return functor_type::apply (e1_ (i), e2_);
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (size_type i) const {
+ return functor_type::apply (e1_ [i], e2_);
+ }
+
+ // Closure comparison
+ BOOST_UBLAS_INLINE
+ bool same_closure (const vector_binary_scalar2 &vbs2) const {
+ return (*this).e1_.same_closure (vbs2.e1_) &&
+ &e2_ == &(vbs2.e2_);
+ }
+
+ // Iterator types
+ private:
+ typedef typename expression1_type::const_iterator const_subiterator1_type;
+ typedef expression2_type const_subiterator2_type;
+ typedef const value_type *const_pointer;
+
+ public:
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ typedef indexed_const_iterator<const_closure_type, typename const_subiterator2_type::iterator_category> const_iterator;
+ typedef const_iterator iterator;
+#else
+ class const_iterator;
+ typedef const_iterator iterator;
+#endif
+
+ // Element lookup
+ BOOST_UBLAS_INLINE
+ const_iterator find (size_type i) const {
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ const_subiterator1_type it (e1_.find (i));
+ return const_iterator (*this, it.index ());
+#else
+ return const_iterator (*this, e1_.find (i), const_subiterator2_type (e2_));
+#endif
+ }
+
+ // Iterator enhances the iterator of the referenced vector expression
+ // with the binary functor.
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator:
+ public container_const_reference<vector_binary_scalar2>,
+ public iterator_base_traits<typename E1::const_iterator::iterator_category>::template
+ iterator_base<const_iterator, value_type>::type {
+ public:
+ typedef typename E1::const_iterator::iterator_category iterator_category;
+ typedef typename vector_binary_scalar2::difference_type difference_type;
+ typedef typename vector_binary_scalar2::value_type value_type;
+ typedef typename vector_binary_scalar2::const_reference reference;
+ typedef typename vector_binary_scalar2::const_pointer pointer;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator ():
+ container_const_reference<self_type> (), it1_ (), it2_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator (const self_type &vbs, const const_subiterator1_type &it1, const const_subiterator2_type &it2):
+ container_const_reference<self_type> (vbs), it1_ (it1), it2_ (it2) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator &operator ++ () {
+ ++ it1_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator -- () {
+ -- it1_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator += (difference_type n) {
+ it1_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator -= (difference_type n) {
+ it1_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ // FIXME we shouldn't compare floats
+ // BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ - it.it1_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ return functor_type::apply (*it1_, it2_);
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+ // Index
+ BOOST_UBLAS_INLINE
+ size_type index () const {
+ return it1_.index ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator &operator = (const const_iterator &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it1_ = it.it1_;
+ it2_ = it.it2_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ // FIXME we shouldn't compare floats
+ // BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ == it.it1_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ // FIXME we shouldn't compare floats
+ // BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());
+ return it1_ < it.it1_;
+ }
+
+ private:
+ const_subiterator1_type it1_;
+ const_subiterator2_type it2_;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator begin () const {
+ return find (0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator end () const {
+ return find (size ());
+ }
+
+ // Reverse iterator
+ typedef reverse_iterator_base<const_iterator> const_reverse_iterator;
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rbegin () const {
+ return const_reverse_iterator (end ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rend () const {
+ return const_reverse_iterator (begin ());
+ }
+
+ private:
+ expression1_closure_type e1_;
+ expression2_closure_type e2_;
+ };
+
+ template<class E1, class E2, class F>
+ struct vector_binary_scalar2_traits {
+ typedef vector_binary_scalar2<E1, E2, F> expression_type; // allow E2 to be builtin type
+#ifndef BOOST_UBLAS_SIMPLE_ET_DEBUG
+ typedef expression_type result_type;
+#else
+ typedef typename E1::vector_temporary_type result_type;
+#endif
+ };
+
+ // (v * t) [i] = v [i] * t
+ template<class E1, class T2>
+ BOOST_UBLAS_INLINE
+ typename vector_binary_scalar2_traits<E1, const T2, scalar_multiplies<typename E1::value_type, T2> >::result_type
+ operator * (const vector_expression<E1> &e1,
+ const T2 &e2) {
+ typedef typename vector_binary_scalar2_traits<E1, const T2, scalar_multiplies<typename E1::value_type, T2> >::expression_type expression_type;
+ return expression_type (e1 (), e2);
+ }
+
+ // (v / t) [i] = v [i] / t
+ template<class E1, class T2>
+ BOOST_UBLAS_INLINE
+ typename vector_binary_scalar2_traits<E1, const T2, scalar_divides<typename E1::value_type, T2> >::result_type
+ operator / (const vector_expression<E1> &e1,
+ const T2 &e2) {
+ typedef typename vector_binary_scalar2_traits<E1, const T2, scalar_divides<typename E1::value_type, T2> >::expression_type expression_type;
+ return expression_type (e1 (), e2);
+ }
+
+
+ template<class E, class F>
+ class vector_scalar_unary:
+ public scalar_expression<vector_scalar_unary<E, F> > {
+
+ typedef E expression_type;
+ typedef F functor_type;
+ typedef typename E::const_closure_type expression_closure_type;
+ typedef typename E::const_iterator::iterator_category iterator_category;
+ typedef vector_scalar_unary<E, F> self_type;
+ public:
+ typedef typename F::size_type size_type;
+ typedef typename F::difference_type difference_type;
+ typedef typename F::result_type value_type;
+ typedef const self_type const_closure_type;
+ typedef const_closure_type closure_type;
+ typedef unknown_storage_tag storage_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ explicit vector_scalar_unary (const expression_type &e):
+ e_ (e) {}
+
+ private:
+ // Expression accessors
+ BOOST_UBLAS_INLINE
+ const expression_closure_type &expression () const {
+ return e_;
+ }
+
+ public:
+ BOOST_UBLAS_INLINE
+ operator value_type () const {
+ return evaluate (iterator_category ());
+ }
+
+ private:
+ // Dense random access specialization
+ BOOST_UBLAS_INLINE
+ value_type evaluate (dense_random_access_iterator_tag) const {
+#ifdef BOOST_UBLAS_USE_INDEXING
+ return functor_type::apply (e_);
+#elif BOOST_UBLAS_USE_ITERATING
+ difference_type size = e_.size ();
+ return functor_type::apply (size, e_.begin ());
+#else
+ difference_type size = e_.size ();
+ if (size >= BOOST_UBLAS_ITERATOR_THRESHOLD)
+ return functor_type::apply (size, e_.begin ());
+ else
+ return functor_type::apply (e_);
+#endif
+ }
+
+ // Packed bidirectional specialization
+ BOOST_UBLAS_INLINE
+ value_type evaluate (packed_random_access_iterator_tag) const {
+ return functor_type::apply (e_.begin (), e_.end ());
+ }
+
+ // Sparse bidirectional specialization
+ BOOST_UBLAS_INLINE
+ value_type evaluate (sparse_bidirectional_iterator_tag) const {
+ return functor_type::apply (e_.begin (), e_.end ());
+ }
+
+ private:
+ expression_closure_type e_;
+ };
+
+ template<class E, class F>
+ struct vector_scalar_unary_traits {
+ typedef vector_scalar_unary<E, F> expression_type;
+#if !defined (BOOST_UBLAS_SIMPLE_ET_DEBUG) && defined (BOOST_UBLAS_USE_SCALAR_ET)
+// FIXME don't define USE_SCALAR_ET other then for testing
+// They do not work for complex types
+ typedef expression_type result_type;
+#else
+ typedef typename F::result_type result_type;
+#endif
+ };
+
+ // sum v = sum (v [i])
+ template<class E>
+ BOOST_UBLAS_INLINE
+ typename vector_scalar_unary_traits<E, vector_sum<typename E::value_type> >::result_type
+ sum (const vector_expression<E> &e) {
+ typedef typename vector_scalar_unary_traits<E, vector_sum<typename E::value_type> >::expression_type expression_type;
+ return expression_type (e ());
+ }
+
+ // real: norm_1 v = sum (abs (v [i]))
+ // complex: norm_1 v = sum (abs (real (v [i])) + abs (imag (v [i])))
+ template<class E>
+ BOOST_UBLAS_INLINE
+ typename vector_scalar_unary_traits<E, vector_norm_1<typename E::value_type> >::result_type
+ norm_1 (const vector_expression<E> &e) {
+ typedef typename vector_scalar_unary_traits<E, vector_norm_1<typename E::value_type> >::expression_type expression_type;
+ return expression_type (e ());
+ }
+
+ // real: norm_2 v = sqrt (sum (v [i] * v [i]))
+ // complex: norm_2 v = sqrt (sum (v [i] * conj (v [i])))
+ template<class E>
+ BOOST_UBLAS_INLINE
+ typename vector_scalar_unary_traits<E, vector_norm_2<typename E::value_type> >::result_type
+ norm_2 (const vector_expression<E> &e) {
+ typedef typename vector_scalar_unary_traits<E, vector_norm_2<typename E::value_type> >::expression_type expression_type;
+ return expression_type (e ());
+ }
+
+ // real: norm_inf v = maximum (abs (v [i]))
+ // complex: norm_inf v = maximum (maximum (abs (real (v [i])), abs (imag (v [i]))))
+ template<class E>
+ BOOST_UBLAS_INLINE
+ typename vector_scalar_unary_traits<E, vector_norm_inf<typename E::value_type> >::result_type
+ norm_inf (const vector_expression<E> &e) {
+ typedef typename vector_scalar_unary_traits<E, vector_norm_inf<typename E::value_type> >::expression_type expression_type;
+ return expression_type (e ());
+ }
+
+ // real: index_norm_inf v = minimum (i: abs (v [i]) == maximum (abs (v [i])))
+ template<class E>
+ BOOST_UBLAS_INLINE
+ typename vector_scalar_unary_traits<E, vector_index_norm_inf<typename E::value_type> >::result_type
+ index_norm_inf (const vector_expression<E> &e) {
+ typedef typename vector_scalar_unary_traits<E, vector_index_norm_inf<typename E::value_type> >::expression_type expression_type;
+ return expression_type (e ());
+ }
+
+ template<class E1, class E2, class F>
+ class vector_scalar_binary:
+ public scalar_expression<vector_scalar_binary<E1, E2, F> > {
+
+ typedef E1 expression1_type;
+ typedef E2 expression2_type;
+ typedef F functor_type;
+ typedef typename E1::const_closure_type expression1_closure_type;
+ typedef typename E2::const_closure_type expression2_closure_type;
+ typedef typename iterator_restrict_traits<typename E1::const_iterator::iterator_category,
+ typename E2::const_iterator::iterator_category>::iterator_category iterator_category;
+ typedef vector_scalar_binary<E1, E2, F> self_type;
+ public:
+ static const unsigned complexity = 1;
+ typedef typename F::size_type size_type;
+ typedef typename F::difference_type difference_type;
+ typedef typename F::result_type value_type;
+ typedef const self_type const_closure_type;
+ typedef const_closure_type closure_type;
+ typedef unknown_storage_tag storage_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ vector_scalar_binary (const expression1_type &e1, const expression2_type &e2):
+ e1_ (e1), e2_ (e2) {}
+
+ private:
+ // Accessors
+ BOOST_UBLAS_INLINE
+ const expression1_closure_type &expression1 () const {
+ return e1_;
+ }
+ BOOST_UBLAS_INLINE
+ const expression2_closure_type &expression2 () const {
+ return e2_;
+ }
+
+ public:
+ BOOST_UBLAS_INLINE
+ operator value_type () const {
+ return evaluate (iterator_category ());
+ }
+
+ private:
+ // Dense random access specialization
+ BOOST_UBLAS_INLINE
+ value_type evaluate (dense_random_access_iterator_tag) const {
+#ifdef BOOST_UBLAS_USE_INDEXING
+ return functor_type::apply (e1_, e2_);
+#elif BOOST_UBLAS_USE_ITERATING
+ difference_type size = BOOST_UBLAS_SAME (e1_.size (), e2_.size ());
+ return functor_type::apply (size, e1_.begin (), e2_.begin ());
+#else
+ difference_type size = BOOST_UBLAS_SAME (e1_.size (), e2_.size ());
+ if (size >= BOOST_UBLAS_ITERATOR_THRESHOLD)
+ return functor_type::apply (size, e1_.begin (), e2_.begin ());
+ else
+ return functor_type::apply (e1_, e2_);
+#endif
+ }
+
+ // Packed bidirectional specialization
+ BOOST_UBLAS_INLINE
+ value_type evaluate (packed_random_access_iterator_tag) const {
+ return functor_type::apply (e1_.begin (), e1_.end (), e2_.begin (), e2_.end ());
+ }
+
+ // Sparse bidirectional specialization
+ BOOST_UBLAS_INLINE
+ value_type evaluate (sparse_bidirectional_iterator_tag) const {
+ return functor_type::apply (e1_.begin (), e1_.end (), e2_.begin (), e2_.end (), sparse_bidirectional_iterator_tag ());
+ }
+
+ private:
+ expression1_closure_type e1_;
+ expression2_closure_type e2_;
+ };
+
+ template<class E1, class E2, class F>
+ struct vector_scalar_binary_traits {
+ typedef vector_scalar_binary<E1, E2, F> expression_type;
+#if !defined (BOOST_UBLAS_SIMPLE_ET_DEBUG) && defined (BOOST_UBLAS_USE_SCALAR_ET)
+// FIXME don't define USE_SCALAR_ET other then for testing
+// They do not work for complex types
+ typedef expression_type result_type;
+#else
+ typedef typename F::result_type result_type;
+#endif
+ };
+
+ // inner_prod (v1, v2) = sum (v1 [i] * v2 [i])
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ typename vector_scalar_binary_traits<E1, E2, vector_inner_prod<typename E1::value_type,
+ typename E2::value_type,
+ typename promote_traits<typename E1::value_type,
+ typename E2::value_type>::promote_type> >::result_type
+ inner_prod (const vector_expression<E1> &e1,
+ const vector_expression<E2> &e2) {
+ typedef typename vector_scalar_binary_traits<E1, E2, vector_inner_prod<typename E1::value_type,
+ typename E2::value_type,
+ typename promote_traits<typename E1::value_type,
+ typename E2::value_type>::promote_type> >::expression_type expression_type;
+ return expression_type (e1 (), e2 ());
+ }
+
+ template<class E1, class E2>
+ BOOST_UBLAS_INLINE
+ typename vector_scalar_binary_traits<E1, E2, vector_inner_prod<typename E1::value_type,
+ typename E2::value_type,
+ typename type_traits<typename promote_traits<typename E1::value_type,
+ typename E2::value_type>::promote_type>::precision_type> >::result_type
+ prec_inner_prod (const vector_expression<E1> &e1,
+ const vector_expression<E2> &e2) {
+ typedef typename vector_scalar_binary_traits<E1, E2, vector_inner_prod<typename E1::value_type,
+ typename E2::value_type,
+ typename type_traits<typename promote_traits<typename E1::value_type,
+ typename E2::value_type>::promote_type>::precision_type> >::expression_type expression_type;
+ return expression_type (e1 (), e2 ());
+ }
+
+}}}
+
+#endif
diff --git a/boost/boost/numeric/ublas/vector_of_vector.hpp b/boost/boost/numeric/ublas/vector_of_vector.hpp
new file mode 100644
index 00000000000..bbc48cc723c
--- /dev/null
+++ b/boost/boost/numeric/ublas/vector_of_vector.hpp
@@ -0,0 +1,1231 @@
+//
+// Copyright (c) 2003
+// Gunter Winkler, Joerg Walter
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without fee,
+// provided that the above copyright notice appear in all copies and
+// that both that copyright notice and this permission notice appear
+// in supporting documentation. The authors make no representations
+// about the suitability of this software for any purpose.
+// It is provided "as is" without express or implied warranty.
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#ifndef _BOOST_UBLAS_VECTOR_OF_VECTOR_
+#define _BOOST_UBLAS_VECTOR_OF_VECTOR_
+
+#include <boost/type_traits.hpp>
+
+#include <boost/numeric/ublas/storage_sparse.hpp>
+#include <boost/numeric/ublas/matrix_sparse.hpp>
+
+// Iterators based on ideas of Jeremy Siek
+
+namespace boost { namespace numeric { namespace ublas {
+
+ // uBLAS sparse vector based sparse matrix class
+ // FIXME outer vector can be sparse type but it is completely filled
+ template<class T, class L, class A>
+ class generalized_vector_of_vector:
+ public matrix_container<generalized_vector_of_vector<T, L, A> > {
+
+ typedef T &true_reference;
+ typedef T *pointer;
+ typedef const T *const_pointer;
+ typedef L layout_type;
+ typedef generalized_vector_of_vector<T, L, A> self_type;
+ public:
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using matrix_container<self_type>::operator ();
+#endif
+ typedef typename A::size_type size_type;
+ typedef typename A::difference_type difference_type;
+ typedef T value_type;
+ typedef const T &const_reference;
+#ifndef BOOST_UBLAS_STRICT_VECTOR_SPARSE
+ typedef T &reference;
+#else
+ typedef sparse_matrix_element<self_type> reference;
+#endif
+ typedef A array_type;
+ typedef const matrix_reference<const self_type> const_closure_type;
+ typedef matrix_reference<self_type> closure_type;
+ typedef typename A::value_type vector_data_value_type;
+ typedef vector_data_value_type vector_temporary_type;
+ typedef self_type matrix_temporary_type;
+ typedef sparse_tag storage_category;
+ typedef typename L::orientation_category orientation_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ generalized_vector_of_vector ():
+ matrix_container<self_type> (),
+ size1_ (0), size2_ (0), data_ (1) {
+ const size_type sizeM = layout_type::size1 (size1_, size2_);
+ // create size1+1 empty vector elements
+ data_.insert_element (sizeM, vector_data_value_type ());
+ storage_invariants ();
+ }
+ BOOST_UBLAS_INLINE
+ generalized_vector_of_vector (size_type size1, size_type size2, size_type non_zeros = 0):
+ matrix_container<self_type> (),
+ size1_ (size1), size2_ (size2), data_ (layout_type::size1 (size1_, size2_) + 1) {
+ const size_type sizeM = layout_type::size1 (size1_, size2_);
+ const size_type sizem = layout_type::size2 (size1_, size2_);
+ for (size_type i = 0; i < sizeM; ++ i) // create size1 vector elements
+ data_.insert_element (i, vector_data_value_type ()) .resize (sizem, false);
+ data_.insert_element (sizeM, vector_data_value_type ());
+ storage_invariants ();
+ }
+ BOOST_UBLAS_INLINE
+ generalized_vector_of_vector (const generalized_vector_of_vector &m):
+ matrix_container<self_type> (),
+ size1_ (m.size1_), size2_ (m.size2_), data_ (m.data_) {
+ storage_invariants ();
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ generalized_vector_of_vector (const matrix_expression<AE> &ae, size_type non_zeros = 0):
+ matrix_container<self_type> (),
+ size1_ (ae ().size1 ()), size2_ (ae ().size2 ()), data_ (layout_type::size1 (size1_, size2_) + 1) {
+ const size_type sizeM = layout_type::size1 (size1_, size2_);
+ const size_type sizem = layout_type::size2 (size1_, size2_);
+ for (size_type i = 0; i < sizeM; ++ i) // create size1 vector elements
+ data_.insert_element (i, vector_data_value_type ()) .resize (sizem, false);
+ data_.insert_element (sizeM, vector_data_value_type ());
+ storage_invariants ();
+ matrix_assign<scalar_assign> (*this, ae);
+ }
+
+ // Accessors
+ BOOST_UBLAS_INLINE
+ size_type size1 () const {
+ return size1_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type size2 () const {
+ return size2_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type non_zeros () const {
+ size_type non_zeros = 0;
+ for (const_vectoriterator_type itv = data_ ().begin (); itv != data_ ().end (); ++ itv)
+ non_zeros += (*itv).size ();
+ return non_zeros;
+ }
+
+ // Storage accessors
+ BOOST_UBLAS_INLINE
+ const array_type &data () const {
+ return data_;
+ }
+ BOOST_UBLAS_INLINE
+ array_type &data () {
+ return data_;
+ }
+
+ // Resizing
+ BOOST_UBLAS_INLINE
+ void resize (size_type size1, size_type size2, bool preserve = true) {
+ const size_type oldM = layout_type::size1 (size1_, size2_);
+ size1_ = size1;
+ size2_ = size2;
+ const size_type sizeM = layout_type::size1 (size1_, size2_);
+ const size_type sizem = layout_type::size2 (size1_, size2_);
+ data ().resize (sizeM + 1, preserve);
+ if (preserve) {
+ for (size_type i = 0; (i <= oldM) && (i < sizeM); ++ i)
+ ref (data () [i]).resize (sizem, preserve);
+ for (size_type i = oldM+1; i < sizeM; ++ i) // create new vector elements
+ data_.insert_element (i, vector_data_value_type ()) .resize (sizem, false);
+ if (sizeM > oldM) {
+ data_.insert_element (sizeM, vector_data_value_type ());
+ } else {
+ ref (data () [sizeM]).resize (0, false);
+ }
+ } else {
+ for (size_type i = 0; i < sizeM; ++ i)
+ data_.insert_element (i, vector_data_value_type ()) .resize (sizem, false);
+ data_.insert_element (sizeM, vector_data_value_type ());
+ }
+ storage_invariants ();
+ }
+
+ // Element support
+ BOOST_UBLAS_INLINE
+ pointer find_element (size_type i, size_type j) {
+ return const_cast<pointer> (const_cast<const self_type&>(*this).find_element (i, j));
+ }
+ BOOST_UBLAS_INLINE
+ const_pointer find_element (size_type i, size_type j) const {
+ const size_type elementM = layout_type::element1 (i, size1_, j, size2_);
+ const size_type elementm = layout_type::element2 (i, size1_, j, size2_);
+ // optimise: check the storage_type and index directly if element always exists
+ if (boost::is_convertible<typename array_type::storage_category, packed_tag>::value) {
+ return & (data () [elementM] [elementm]);
+ }
+ else {
+ const typename array_type::value_type *pv = data ().find_element (elementM);
+ if (!pv)
+ return 0;
+ return pv->find_element (elementm);
+ }
+ }
+
+ // Element access
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type i, size_type j) const {
+ const_pointer p = find_element (i, j);
+ // optimise: check the storage_type and index directly if element always exists
+ if (boost::is_convertible<typename array_type::storage_category, packed_tag>::value) {
+ BOOST_UBLAS_CHECK (p, internal_logic () );
+ return *p;
+ }
+ else {
+ if (p)
+ return *p;
+ else
+ return zero_;
+ }
+ }
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type i, size_type j) {
+#ifndef BOOST_UBLAS_STRICT_MATRIX_SPARSE
+ return at_element (i, j);
+#else
+ return reference (*this, i, j);
+#endif
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ generalized_vector_of_vector &operator = (const generalized_vector_of_vector &m) {
+ if (this != &m) {
+ size1_ = m.size1_;
+ size2_ = m.size2_;
+ data () = m.data ();
+ }
+ storage_invariants ();
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ generalized_vector_of_vector &assign_temporary (generalized_vector_of_vector &m) {
+ swap (m);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ generalized_vector_of_vector &operator = (const matrix_expression<AE> &ae) {
+ self_type temporary (ae);
+ return assign_temporary (temporary);
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ generalized_vector_of_vector &assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_assign> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ generalized_vector_of_vector& operator += (const matrix_expression<AE> &ae) {
+ self_type temporary (*this + ae);
+ return assign_temporary (temporary);
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ generalized_vector_of_vector &plus_assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_plus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ generalized_vector_of_vector& operator -= (const matrix_expression<AE> &ae) {
+ self_type temporary (*this - ae);
+ return assign_temporary (temporary);
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ generalized_vector_of_vector &minus_assign (const matrix_expression<AE> &ae) {
+ matrix_assign<scalar_minus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ generalized_vector_of_vector& operator *= (const AT &at) {
+ matrix_assign_scalar<scalar_multiplies_assign> (*this, at);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ generalized_vector_of_vector& operator /= (const AT &at) {
+ matrix_assign_scalar<scalar_divides_assign> (*this, at);
+ return *this;
+ }
+
+ // Swapping
+ BOOST_UBLAS_INLINE
+ void swap (generalized_vector_of_vector &m) {
+ if (this != &m) {
+ std::swap (size1_, m.size1_);
+ std::swap (size2_, m.size2_);
+ data ().swap (m.data ());
+ }
+ storage_invariants ();
+ }
+ BOOST_UBLAS_INLINE
+ friend void swap (generalized_vector_of_vector &m1, generalized_vector_of_vector &m2) {
+ m1.swap (m2);
+ }
+
+ // Sorting
+ void sort () {
+ vectoriterator_type itv (data ().begin ());
+ vectoriterator_type itv_end (data ().end ());
+ while (itv != itv_end) {
+ (*itv).sort ();
+ ++ itv;
+ }
+ }
+
+ // Element insertion and erasure
+ BOOST_UBLAS_INLINE
+ true_reference insert_element (size_type i, size_type j, const_reference t) {
+ const size_type elementM = layout_type::element1 (i, size1_, j, size2_);
+ const size_type elementm = layout_type::element2 (i, size1_, j, size2_);
+ vector_data_value_type& vd (ref (data () [elementM]));
+ storage_invariants ();
+ return vd.insert_element (elementm, t);
+ }
+ BOOST_UBLAS_INLINE
+ void append_element (size_type i, size_type j, const_reference t) {
+ const size_type elementM = layout_type::element1 (i, size1_, j, size2_);
+ const size_type elementm = layout_type::element2 (i, size1_, j, size2_);
+ vector_data_value_type& vd (ref (data () [elementM]));
+ storage_invariants ();
+ return vd.append_element (elementm, t);
+ }
+ BOOST_UBLAS_INLINE
+ void erase_element (size_type i, size_type j) {
+ vectoriterator_type itv (data ().find (layout_type::element1 (i, size1_, j, size2_)));
+ if (itv == data ().end ())
+ return;
+ (*itv).erase_element (layout_type::element2 (i, size1_, j, size2_));
+ storage_invariants ();
+ }
+ BOOST_UBLAS_INLINE
+ void clear () {
+ const size_type sizeM = layout_type::size1 (size1_, size2_);
+ // FIXME should clear data () if this is done via value_type/*zero*/() then it is not size preserving
+ for (size_type i = 0; i < sizeM; ++ i)
+ ref (data () [i]).clear ();
+ storage_invariants ();
+ }
+
+ // Iterator types
+ private:
+ // Use vector iterator
+ typedef typename A::const_iterator const_vectoriterator_type;
+ typedef typename A::iterator vectoriterator_type;
+ typedef typename A::value_type::const_iterator const_subiterator_type;
+ typedef typename A::value_type::iterator subiterator_type;
+
+ BOOST_UBLAS_INLINE
+ true_reference at_element (size_type i, size_type j) {
+ return ref (ref (data () [layout_type::element1 (i, size1_, j, size2_)]) [layout_type::element2 (i, size1_, j, size2_)]);
+ }
+
+ public:
+ class const_iterator1;
+ class iterator1;
+ class const_iterator2;
+ class iterator2;
+ typedef reverse_iterator_base1<const_iterator1> const_reverse_iterator1;
+ typedef reverse_iterator_base1<iterator1> reverse_iterator1;
+ typedef reverse_iterator_base2<const_iterator2> const_reverse_iterator2;
+ typedef reverse_iterator_base2<iterator2> reverse_iterator2;
+
+ // Element lookup
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ const_iterator1 find1 (int rank, size_type i, size_type j, int direction = 1) const {
+ for (;;) {
+ const_vectoriterator_type itv (data ().find (layout_type::address1 (i, size1_, j, size2_)));
+ const_vectoriterator_type itv_end (data ().end ());
+ if (itv == itv_end)
+ return const_iterator1 (*this, rank, i, j, itv_end, (*(-- itv)).end ());
+
+ const_subiterator_type it ((*itv).find (layout_type::address2 (i, size1_, j, size2_)));
+ const_subiterator_type it_end ((*itv).end ());
+ if (rank == 0)
+ return const_iterator1 (*this, rank, i, j, itv, it);
+ if (it != it_end && it.index () == layout_type::address2 (i, size1_, j, size2_))
+ return const_iterator1 (*this, rank, i, j, itv, it);
+ if (direction > 0) {
+ if (layout_type::fast1 ()) {
+ if (it == it_end)
+ return const_iterator1 (*this, rank, i, j, itv, it);
+ i = it.index ();
+ } else {
+ if (i >= size1_)
+ return const_iterator1 (*this, rank, i, j, itv, it);
+ ++ i;
+ }
+ } else /* if (direction < 0) */ {
+ if (layout_type::fast1 ()) {
+ if (it == (*itv).begin ())
+ return const_iterator1 (*this, rank, i, j, itv, it);
+ --it;
+ i = it.index ();
+ } else {
+ if (i == 0)
+ return const_iterator1 (*this, rank, i, j, itv, it);
+ -- i;
+ }
+ }
+ }
+ }
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ iterator1 find1 (int rank, size_type i, size_type j, int direction = 1) {
+ for (;;) {
+ vectoriterator_type itv (data ().find (layout_type::address1 (i, size1_, j, size2_)));
+ vectoriterator_type itv_end (data ().end ());
+ if (itv == itv_end)
+ return iterator1 (*this, rank, i, j, itv_end, (*(-- itv)).end ());
+
+ subiterator_type it ((*itv).find (layout_type::address2 (i, size1_, j, size2_)));
+ subiterator_type it_end ((*itv).end ());
+ if (rank == 0)
+ return iterator1 (*this, rank, i, j, itv, it);
+ if (it != it_end && it.index () == layout_type::address2 (i, size1_, j, size2_))
+ return iterator1 (*this, rank, i, j, itv, it);
+ if (direction > 0) {
+ if (layout_type::fast1 ()) {
+ if (it == it_end)
+ return iterator1 (*this, rank, i, j, itv, it);
+ i = it.index ();
+ } else {
+ if (i >= size1_)
+ return iterator1 (*this, rank, i, j, itv, it);
+ ++ i;
+ }
+ } else /* if (direction < 0) */ {
+ if (layout_type::fast1 ()) {
+ if (it == (*itv).begin ())
+ return iterator1 (*this, rank, i, j, itv, it);
+ --it;
+ i = it.index ();
+ } else {
+ if (i == 0)
+ return iterator1 (*this, rank, i, j, itv, it);
+ -- i;
+ }
+ }
+ }
+ }
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ const_iterator2 find2 (int rank, size_type i, size_type j, int direction = 1) const {
+ for (;;) {
+ const_vectoriterator_type itv (data ().find (layout_type::address1 (i, size1_, j, size2_)));
+ const_vectoriterator_type itv_end (data ().end ());
+ if (itv == itv_end)
+ return const_iterator2 (*this, rank, i, j, itv_end, (*(-- itv)).end ());
+
+ const_subiterator_type it ((*itv).find (layout_type::address2 (i, size1_, j, size2_)));
+ const_subiterator_type it_end ((*itv).end ());
+ if (rank == 0)
+ return const_iterator2 (*this, rank, i, j, itv, it);
+ if (it != it_end && it.index () == layout_type::address2 (i, size1_, j, size2_))
+ return const_iterator2 (*this, rank, i, j, itv, it);
+ if (direction > 0) {
+ if (layout_type::fast2 ()) {
+ if (it == it_end)
+ return const_iterator2 (*this, rank, i, j, itv, it);
+ j = it.index ();
+ } else {
+ if (j >= size2_)
+ return const_iterator2 (*this, rank, i, j, itv, it);
+ ++ j;
+ }
+ } else /* if (direction < 0) */ {
+ if (layout_type::fast2 ()) {
+ if (it == (*itv).begin ())
+ return const_iterator2 (*this, rank, i, j, itv, it);
+ --it;
+ j = it.index ();
+ } else {
+ if (j == 0)
+ return const_iterator2 (*this, rank, i, j, itv, it);
+ -- j;
+ }
+ }
+ }
+ }
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ iterator2 find2 (int rank, size_type i, size_type j, int direction = 1) {
+ for (;;) {
+ vectoriterator_type itv (data ().find (layout_type::address1 (i, size1_, j, size2_)));
+ vectoriterator_type itv_end (data ().end ());
+ if (itv == itv_end)
+ return iterator2 (*this, rank, i, j, itv_end, (*(-- itv)).end ());
+
+ subiterator_type it ((*itv).find (layout_type::address2 (i, size1_, j, size2_)));
+ subiterator_type it_end ((*itv).end ());
+ if (rank == 0)
+ return iterator2 (*this, rank, i, j, itv, it);
+ if (it != it_end && it.index () == layout_type::address2 (i, size1_, j, size2_))
+ return iterator2 (*this, rank, i, j, itv, it);
+ if (direction > 0) {
+ if (layout_type::fast2 ()) {
+ if (it == it_end)
+ return iterator2 (*this, rank, i, j, itv, it);
+ j = it.index ();
+ } else {
+ if (j >= size2_)
+ return iterator2 (*this, rank, i, j, itv, it);
+ ++ j;
+ }
+ } else /* if (direction < 0) */ {
+ if (layout_type::fast2 ()) {
+ if (it == (*itv).begin ())
+ return iterator2 (*this, rank, i, j, itv, it);
+ --it;
+ j = it.index ();
+ } else {
+ if (j == 0)
+ return iterator2 (*this, rank, i, j, itv, it);
+ -- j;
+ }
+ }
+ }
+ }
+
+
+ class const_iterator1:
+ public container_const_reference<generalized_vector_of_vector>,
+ public bidirectional_iterator_base<sparse_bidirectional_iterator_tag,
+ const_iterator1, value_type> {
+ public:
+ typedef typename generalized_vector_of_vector::difference_type difference_type;
+ typedef typename generalized_vector_of_vector::value_type value_type;
+ typedef typename generalized_vector_of_vector::const_reference reference;
+ typedef const typename generalized_vector_of_vector::pointer pointer;
+
+ typedef const_iterator2 dual_iterator_type;
+ typedef const_reverse_iterator2 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator1 ():
+ container_const_reference<self_type> (), rank_ (), i_ (), j_ (), itv_ (), it_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator1 (const self_type &m, int rank, size_type i, size_type j, const const_vectoriterator_type &itv, const const_subiterator_type &it):
+ container_const_reference<self_type> (m), rank_ (rank), i_ (i), j_ (j), itv_ (itv), it_ (it) {}
+ BOOST_UBLAS_INLINE
+ const_iterator1 (const iterator1 &it):
+ container_const_reference<self_type> (it ()), rank_ (it.rank_), i_ (it.i_), j_ (it.j_), itv_ (it.itv_), it_ (it.it_) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator ++ () {
+ if (rank_ == 1 && layout_type::fast1 ())
+ ++ it_;
+ else {
+ const self_type &m = (*this) ();
+ i_ = index1 () + 1;
+ if (rank_ == 1 && ++ itv_ == m.end1 ().itv_)
+ *this = m.find1 (rank_, i_, j_, 1);
+ else if (rank_ == 1) {
+ it_ = (*itv_).begin ();
+ if (it_ == (*itv_).end () || index2 () != j_)
+ *this = m.find1 (rank_, i_, j_, 1);
+ }
+ }
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator -- () {
+ if (rank_ == 1 && layout_type::fast1 ())
+ -- it_;
+ else {
+ const self_type &m = (*this) ();
+ i_ = index1 () - 1;
+ if (rank_ == 1 && -- itv_ == m.end1 ().itv_)
+ *this = m.find1 (rank_, i_, j_, -1);
+ else if (rank_ == 1) {
+ it_ = (*itv_).begin ();
+ if (it_ == (*itv_).end () || index2 () != j_)
+ *this = m.find1 (rank_, i_, j_, -1);
+ }
+ }
+ return *this;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ BOOST_UBLAS_CHECK (index1 () < (*this) ().size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (index2 () < (*this) ().size2 (), bad_index ());
+ if (rank_ == 1) {
+ return *it_;
+ } else {
+ return (*this) () (i_, j_);
+ }
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 begin () const {
+ const self_type &m = (*this) ();
+ return m.find2 (1, index1 (), 0);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator2 end () const {
+ const self_type &m = (*this) ();
+ return m.find2 (1, index1 (), m.size2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rbegin () const {
+ return const_reverse_iterator2 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator2 rend () const {
+ return const_reverse_iterator2 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ BOOST_UBLAS_CHECK (*this != (*this) ().find1 (0, (*this) ().size1 (), j_), bad_index ());
+ if (rank_ == 1) {
+ BOOST_UBLAS_CHECK (layout_type::index1 (itv_.index (), it_.index ()) < (*this) ().size1 (), bad_index ());
+ return layout_type::index1 (itv_.index (), it_.index ());
+ } else {
+ return i_;
+ }
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ BOOST_UBLAS_CHECK (*this != (*this) ().find1 (0, (*this) ().size1 (), j_), bad_index ());
+ if (rank_ == 1) {
+ BOOST_UBLAS_CHECK (layout_type::index2 (itv_.index (), it_.index ()) < (*this) ().size2 (), bad_index ());
+ return layout_type::index2 (itv_.index (), it_.index ());
+ } else {
+ return j_;
+ }
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator1 &operator = (const const_iterator1 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ rank_ = it.rank_;
+ i_ = it.i_;
+ j_ = it.j_;
+ itv_ = it.itv_;
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ // BOOST_UBLAS_CHECK (rank_ == it.rank_, internal_logic ());
+ if (rank_ == 1 || it.rank_ == 1) {
+ return it_ == it.it_;
+ } else {
+ return i_ == it.i_ && j_ == it.j_;
+ }
+ }
+
+ private:
+ int rank_;
+ size_type i_;
+ size_type j_;
+ const_vectoriterator_type itv_;
+ const_subiterator_type it_;
+ };
+
+ BOOST_UBLAS_INLINE
+ const_iterator1 begin1 () const {
+ return find1 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator1 end1 () const {
+ return find1 (0, size1_, 0);
+ }
+
+ class iterator1:
+ public container_reference<generalized_vector_of_vector>,
+ public bidirectional_iterator_base<sparse_bidirectional_iterator_tag,
+ iterator1, value_type> {
+ public:
+ typedef typename generalized_vector_of_vector::difference_type difference_type;
+ typedef typename generalized_vector_of_vector::value_type value_type;
+ typedef typename generalized_vector_of_vector::true_reference reference;
+ typedef typename generalized_vector_of_vector::pointer pointer;
+
+ typedef iterator2 dual_iterator_type;
+ typedef reverse_iterator2 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ iterator1 ():
+ container_reference<self_type> (), rank_ (), i_ (), j_ (), itv_ (), it_ () {}
+ BOOST_UBLAS_INLINE
+ iterator1 (self_type &m, int rank, size_type i, size_type j, const vectoriterator_type &itv, const subiterator_type &it):
+ container_reference<self_type> (m), rank_ (rank), i_ (i), j_ (j), itv_ (itv), it_ (it) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ iterator1 &operator ++ () {
+ if (rank_ == 1 && layout_type::fast1 ())
+ ++ it_;
+ else {
+ self_type &m = (*this) ();
+ i_ = index1 () + 1;
+ if (rank_ == 1 && ++ itv_ == m.end1 ().itv_)
+ *this = m.find1 (rank_, i_, j_, 1);
+ else if (rank_ == 1) {
+ it_ = (*itv_).begin ();
+ if (it_ == (*itv_).end () || index2 () != j_)
+ *this = m.find1 (rank_, i_, j_, 1);
+ }
+ }
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 &operator -- () {
+ if (rank_ == 1 && layout_type::fast1 ())
+ -- it_;
+ else {
+ self_type &m = (*this) ();
+ i_ = index1 () - 1;
+ if (rank_ == 1 && -- itv_ == m.end1 ().itv_)
+ *this = m.find1 (rank_, i_, j_, -1);
+ else if (rank_ == 1) {
+ it_ = (*itv_).begin ();
+ if (it_ == (*itv_).end () || index2 () != j_)
+ *this = m.find1 (rank_, i_, j_, -1);
+ }
+ }
+ return *this;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ true_reference operator * () const {
+ BOOST_UBLAS_CHECK (index1 () < (*this) ().size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (index2 () < (*this) ().size2 (), bad_index ());
+ if (rank_ == 1) {
+ return *it_;
+ } else {
+ return (*this) ().at_element (i_, j_);
+ }
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator2 begin () const {
+ self_type &m = (*this) ();
+ return m.find2 (1, index1 (), 0);
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator2 end () const {
+ self_type &m = (*this) ();
+ return m.find2 (1, index1 (), m.size2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator2 rbegin () const {
+ return reverse_iterator2 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator2 rend () const {
+ return reverse_iterator2 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ BOOST_UBLAS_CHECK (*this != (*this) ().find1 (0, (*this) ().size1 (), j_), bad_index ());
+ if (rank_ == 1) {
+ BOOST_UBLAS_CHECK (layout_type::index1 (itv_.index (), it_.index ()) < (*this) ().size1 (), bad_index ());
+ return layout_type::index1 (itv_.index (), it_.index ());
+ } else {
+ return i_;
+ }
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ BOOST_UBLAS_CHECK (*this != (*this) ().find1 (0, (*this) ().size1 (), j_), bad_index ());
+ if (rank_ == 1) {
+ BOOST_UBLAS_CHECK (layout_type::index2 (itv_.index (), it_.index ()) < (*this) ().size2 (), bad_index ());
+ return layout_type::index2 (itv_.index (), it_.index ());
+ } else {
+ return j_;
+ }
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ iterator1 &operator = (const iterator1 &it) {
+ container_reference<self_type>::assign (&it ());
+ rank_ = it.rank_;
+ i_ = it.i_;
+ j_ = it.j_;
+ itv_ = it.itv_;
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const iterator1 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ // BOOST_UBLAS_CHECK (rank_ == it.rank_, internal_logic ());
+ if (rank_ == 1 || it.rank_ == 1) {
+ return it_ == it.it_;
+ } else {
+ return i_ == it.i_ && j_ == it.j_;
+ }
+ }
+
+ private:
+ int rank_;
+ size_type i_;
+ size_type j_;
+ vectoriterator_type itv_;
+ subiterator_type it_;
+
+ friend class const_iterator1;
+ };
+
+ BOOST_UBLAS_INLINE
+ iterator1 begin1 () {
+ return find1 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ iterator1 end1 () {
+ return find1 (0, size1_, 0);
+ }
+
+ class const_iterator2:
+ public container_const_reference<generalized_vector_of_vector>,
+ public bidirectional_iterator_base<sparse_bidirectional_iterator_tag,
+ const_iterator2, value_type> {
+ public:
+ typedef typename generalized_vector_of_vector::difference_type difference_type;
+ typedef typename generalized_vector_of_vector::value_type value_type;
+ typedef typename generalized_vector_of_vector::const_reference reference;
+ typedef const typename generalized_vector_of_vector::pointer pointer;
+
+ typedef const_iterator1 dual_iterator_type;
+ typedef const_reverse_iterator1 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator2 ():
+ container_const_reference<self_type> (), rank_ (), i_ (), j_ (), itv_ (), it_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator2 (const self_type &m, int rank, size_type i, size_type j, const const_vectoriterator_type &itv, const const_subiterator_type &it):
+ container_const_reference<self_type> (m), rank_ (rank), i_ (i), j_ (j), itv_ (itv), it_ (it) {}
+ BOOST_UBLAS_INLINE
+ const_iterator2 (const iterator2 &it):
+ container_const_reference<self_type> (it ()), rank_ (it.rank_), i_ (it.i_), j_ (it.j_), itv_ (it.itv_), it_ (it.it_) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator ++ () {
+ if (rank_ == 1 && layout_type::fast2 ())
+ ++ it_;
+ else {
+ const self_type &m = (*this) ();
+ j_ = index2 () + 1;
+ if (rank_ == 1 && ++ itv_ == m.end2 ().itv_)
+ *this = m.find2 (rank_, i_, j_, 1);
+ else if (rank_ == 1) {
+ it_ = (*itv_).begin ();
+ if (it_ == (*itv_).end () || index1 () != i_)
+ *this = m.find2 (rank_, i_, j_, 1);
+ }
+ }
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator -- () {
+ if (rank_ == 1 && layout_type::fast2 ())
+ -- it_;
+ else {
+ const self_type &m = (*this) ();
+ j_ = index2 () - 1;
+ if (rank_ == 1 && -- itv_ == m.end2 ().itv_)
+ *this = m.find2 (rank_, i_, j_, -1);
+ else if (rank_ == 1) {
+ it_ = (*itv_).begin ();
+ if (it_ == (*itv_).end () || index1 () != i_)
+ *this = m.find2 (rank_, i_, j_, -1);
+ }
+ }
+ return *this;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ BOOST_UBLAS_CHECK (index1 () < (*this) ().size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (index2 () < (*this) ().size2 (), bad_index ());
+ if (rank_ == 1) {
+ return *it_;
+ } else {
+ return (*this) () (i_, j_);
+ }
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 begin () const {
+ const self_type &m = (*this) ();
+ return m.find1 (1, 0, index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_iterator1 end () const {
+ const self_type &m = (*this) ();
+ return m.find1 (1, m.size1 (), index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rbegin () const {
+ return const_reverse_iterator1 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ const_reverse_iterator1 rend () const {
+ return const_reverse_iterator1 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ BOOST_UBLAS_CHECK (*this != (*this) ().find2 (0, i_, (*this) ().size2 ()), bad_index ());
+ if (rank_ == 1) {
+ BOOST_UBLAS_CHECK (layout_type::index1 (itv_.index (), it_.index ()) < (*this) ().size1 (), bad_index ());
+ return layout_type::index1 (itv_.index (), it_.index ());
+ } else {
+ return i_;
+ }
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ BOOST_UBLAS_CHECK (*this != (*this) ().find2 (0, i_, (*this) ().size2 ()), bad_index ());
+ if (rank_ == 1) {
+ BOOST_UBLAS_CHECK (layout_type::index2 (itv_.index (), it_.index ()) < (*this) ().size2 (), bad_index ());
+ return layout_type::index2 (itv_.index (), it_.index ());
+ } else {
+ return j_;
+ }
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator2 &operator = (const const_iterator2 &it) {
+ container_const_reference<self_type>::assign (&it ());
+ rank_ = it.rank_;
+ i_ = it.i_;
+ j_ = it.j_;
+ itv_ = it.itv_;
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ // BOOST_UBLAS_CHECK (rank_ == it.rank_, internal_logic ());
+ if (rank_ == 1 || it.rank_ == 1) {
+ return it_ == it.it_;
+ } else {
+ return i_ == it.i_ && j_ == it.j_;
+ }
+ }
+
+ private:
+ int rank_;
+ size_type i_;
+ size_type j_;
+ const_vectoriterator_type itv_;
+ const_subiterator_type it_;
+ };
+
+ BOOST_UBLAS_INLINE
+ const_iterator2 begin2 () const {
+ return find2 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator2 end2 () const {
+ return find2 (0, 0, size2_);
+ }
+
+ class iterator2:
+ public container_reference<generalized_vector_of_vector>,
+ public bidirectional_iterator_base<sparse_bidirectional_iterator_tag,
+ iterator2, value_type> {
+ public:
+ typedef typename generalized_vector_of_vector::difference_type difference_type;
+ typedef typename generalized_vector_of_vector::value_type value_type;
+ typedef typename generalized_vector_of_vector::true_reference reference;
+ typedef typename generalized_vector_of_vector::pointer pointer;
+
+ typedef iterator1 dual_iterator_type;
+ typedef reverse_iterator1 dual_reverse_iterator_type;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ iterator2 ():
+ container_reference<self_type> (), rank_ (), i_ (), j_ (), itv_ (), it_ () {}
+ BOOST_UBLAS_INLINE
+ iterator2 (self_type &m, int rank, size_type i, size_type j, const vectoriterator_type &itv, const subiterator_type &it):
+ container_reference<self_type> (m), rank_ (rank), i_ (i), j_ (j), itv_ (itv), it_ (it) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ iterator2 &operator ++ () {
+ if (rank_ == 1 && layout_type::fast2 ())
+ ++ it_;
+ else {
+ self_type &m = (*this) ();
+ j_ = index2 () + 1;
+ if (rank_ == 1 && ++ itv_ == m.end2 ().itv_)
+ *this = m.find2 (rank_, i_, j_, 1);
+ else if (rank_ == 1) {
+ it_ = (*itv_).begin ();
+ if (it_ == (*itv_).end () || index1 () != i_)
+ *this = m.find2 (rank_, i_, j_, 1);
+ }
+ }
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 &operator -- () {
+ if (rank_ == 1 && layout_type::fast2 ())
+ -- it_;
+ else {
+ self_type &m = (*this) ();
+ j_ = index2 () - 1;
+ if (rank_ == 1 && -- itv_ == m.end2 ().itv_)
+ *this = m.find2 (rank_, i_, j_, -1);
+ else if (rank_ == 1) {
+ it_ = (*itv_).begin ();
+ if (it_ == (*itv_).end () || index1 () != i_)
+ *this = m.find2 (rank_, i_, j_, -1);
+ }
+ }
+ return *this;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ true_reference operator * () const {
+ BOOST_UBLAS_CHECK (index1 () < (*this) ().size1 (), bad_index ());
+ BOOST_UBLAS_CHECK (index2 () < (*this) ().size2 (), bad_index ());
+ if (rank_ == 1) {
+ return *it_;
+ } else {
+ return (*this) ().at_element (i_, j_);
+ }
+ }
+
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator1 begin () const {
+ self_type &m = (*this) ();
+ return m.find1 (1, 0, index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ iterator1 end () const {
+ self_type &m = (*this) ();
+ return m.find1 (1, m.size1 (), index2 ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator1 rbegin () const {
+ return reverse_iterator1 (end ());
+ }
+ BOOST_UBLAS_INLINE
+#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION
+ typename self_type::
+#endif
+ reverse_iterator1 rend () const {
+ return reverse_iterator1 (begin ());
+ }
+#endif
+
+ // Indices
+ BOOST_UBLAS_INLINE
+ size_type index1 () const {
+ BOOST_UBLAS_CHECK (*this != (*this) ().find2 (0, i_, (*this) ().size2 ()), bad_index ());
+ if (rank_ == 1) {
+ BOOST_UBLAS_CHECK (layout_type::index1 (itv_.index (), it_.index ()) < (*this) ().size1 (), bad_index ());
+ return layout_type::index1 (itv_.index (), it_.index ());
+ } else {
+ return i_;
+ }
+ }
+ BOOST_UBLAS_INLINE
+ size_type index2 () const {
+ BOOST_UBLAS_CHECK (*this != (*this) ().find2 (0, i_, (*this) ().size2 ()), bad_index ());
+ if (rank_ == 1) {
+ BOOST_UBLAS_CHECK (layout_type::index2 (itv_.index (), it_.index ()) < (*this) ().size2 (), bad_index ());
+ return layout_type::index2 (itv_.index (), it_.index ());
+ } else {
+ return j_;
+ }
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ iterator2 &operator = (const iterator2 &it) {
+ container_reference<self_type>::assign (&it ());
+ rank_ = it.rank_;
+ i_ = it.i_;
+ j_ = it.j_;
+ itv_ = it.itv_;
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const iterator2 &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ // BOOST_UBLAS_CHECK (rank_ == it.rank_, internal_logic ());
+ if (rank_ == 1 || it.rank_ == 1) {
+ return it_ == it.it_;
+ } else {
+ return i_ == it.i_ && j_ == it.j_;
+ }
+ }
+
+ private:
+ int rank_;
+ size_type i_;
+ size_type j_;
+ vectoriterator_type itv_;
+ subiterator_type it_;
+
+ friend class const_iterator2;
+ };
+
+ BOOST_UBLAS_INLINE
+ iterator2 begin2 () {
+ return find2 (0, 0, 0);
+ }
+ BOOST_UBLAS_INLINE
+ iterator2 end2 () {
+ return find2 (0, 0, size2_);
+ }
+
+ // Reverse iterators
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rbegin1 () const {
+ return const_reverse_iterator1 (end1 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator1 rend1 () const {
+ return const_reverse_iterator1 (begin1 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ reverse_iterator1 rbegin1 () {
+ return reverse_iterator1 (end1 ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator1 rend1 () {
+ return reverse_iterator1 (begin1 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rbegin2 () const {
+ return const_reverse_iterator2 (end2 ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator2 rend2 () const {
+ return const_reverse_iterator2 (begin2 ());
+ }
+
+ BOOST_UBLAS_INLINE
+ reverse_iterator2 rbegin2 () {
+ return reverse_iterator2 (end2 ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator2 rend2 () {
+ return reverse_iterator2 (begin2 ());
+ }
+
+ private:
+ void storage_invariants () const
+ {
+ BOOST_UBLAS_CHECK (layout_type::size1 (size1_, size2_) + 1 == data_.size (), internal_logic ());
+ BOOST_UBLAS_CHECK (data ().begin () != data ().end (), internal_logic ());
+
+ }
+ size_type size1_;
+ size_type size2_;
+ array_type data_;
+ static const value_type zero_;
+ };
+
+ template<class T, class L, class A>
+ const typename generalized_vector_of_vector<T, L, A>::value_type generalized_vector_of_vector<T, L, A>::zero_ = value_type/*zero*/();
+
+}}}
+
+#endif
diff --git a/boost/boost/numeric/ublas/vector_proxy.hpp b/boost/boost/numeric/ublas/vector_proxy.hpp
new file mode 100644
index 00000000000..8c5cbceadeb
--- /dev/null
+++ b/boost/boost/numeric/ublas/vector_proxy.hpp
@@ -0,0 +1,1570 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without fee,
+// provided that the above copyright notice appear in all copies and
+// that both that copyright notice and this permission notice appear
+// in supporting documentation. The authors make no representations
+// about the suitability of this software for any purpose.
+// It is provided "as is" without express or implied warranty.
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#ifndef _BOOST_UBLAS_VECTOR_PROXY_
+#define _BOOST_UBLAS_VECTOR_PROXY_
+
+#include <boost/numeric/ublas/vector_expression.hpp>
+#include <boost/numeric/ublas/detail/vector_assign.hpp>
+#include <boost/numeric/ublas/detail/temporary.hpp>
+
+// Iterators based on ideas of Jeremy Siek
+
+namespace boost { namespace numeric { namespace ublas {
+
+ // Vector based range class
+ template<class V>
+ class vector_range:
+ public vector_expression<vector_range<V> > {
+
+ typedef vector_range<V> self_type;
+ public:
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using vector_expression<self_type>::operator ();
+#endif
+ typedef const V const_vector_type;
+ typedef V vector_type;
+ typedef typename V::size_type size_type;
+ typedef typename V::difference_type difference_type;
+ typedef typename V::value_type value_type;
+ typedef typename V::const_reference const_reference;
+ typedef typename boost::mpl::if_<boost::is_const<V>,
+ typename V::const_reference,
+ typename V::reference>::type reference;
+ typedef typename boost::mpl::if_<boost::is_const<V>,
+ typename V::const_closure_type,
+ typename V::closure_type>::type vector_closure_type;
+ typedef basic_range<size_type, difference_type> range_type;
+ typedef const self_type const_closure_type;
+ typedef self_type closure_type;
+ typedef typename storage_restrict_traits<typename V::storage_category,
+ dense_proxy_tag>::storage_category storage_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ vector_range (vector_type &data, const range_type &r):
+ data_ (data), r_ (r.preprocess (data.size ())) {
+ // Early checking of preconditions here.
+ // BOOST_UBLAS_CHECK (r_.start () <= data_.size () &&
+ // r_.start () + r_.size () <= data_.size (), bad_index ());
+ }
+ BOOST_UBLAS_INLINE
+ vector_range (const vector_closure_type &data, const range_type &r, bool):
+ data_ (data), r_ (r.preprocess (data.size ())) {
+ // Early checking of preconditions here.
+ // BOOST_UBLAS_CHECK (r_.start () <= data_.size () &&
+ // r_.start () + r_.size () <= data_.size (), bad_index ());
+ }
+
+ // Accessors
+ BOOST_UBLAS_INLINE
+ size_type start () const {
+ return r_.start ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type size () const {
+ return r_.size ();
+ }
+
+ // Storage accessors
+ BOOST_UBLAS_INLINE
+ const vector_closure_type &data () const {
+ return data_;
+ }
+ BOOST_UBLAS_INLINE
+ vector_closure_type &data () {
+ return data_;
+ }
+
+ // Element access
+#ifndef BOOST_UBLAS_PROXY_CONST_MEMBER
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type i) const {
+ return data_ (r_ (i));
+ }
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type i) {
+ return data_ (r_ (i));
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (size_type i) const {
+ return (*this) (i);
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (size_type i) {
+ return (*this) (i);
+ }
+#else
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type i) const {
+ return data_ (r_ (i));
+ }
+
+ BOOST_UBLAS_INLINE
+ reference operator [] (size_type i) const {
+ return (*this) (i);
+ }
+#endif
+
+ // ISSUE can this be done in free project function?
+ // Although a const function can create a non-const proxy to a non-const object
+ // Critical is that vector_type and data_ (vector_closure_type) are const correct
+ BOOST_UBLAS_INLINE
+ vector_range<vector_type> project (const range_type &r) const {
+ return vector_range<vector_type> (data_, r_.compose (r.preprocess (data_.size ())), false);
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ vector_range &operator = (const vector_range &vr) {
+ // ISSUE need a temporary, proxy can be overlaping alias
+ vector_assign<scalar_assign> (*this, typename vector_temporary_traits<V>::type (vr));
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ vector_range &assign_temporary (vector_range &vr) {
+ // assign elements, proxied container remains the same
+ vector_assign<scalar_assign> (*this, vr);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ vector_range &operator = (const vector_expression<AE> &ae) {
+ vector_assign<scalar_assign> (*this, typename vector_temporary_traits<V>::type (ae));
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ vector_range &assign (const vector_expression<AE> &ae) {
+ vector_assign<scalar_assign> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ vector_range &operator += (const vector_expression<AE> &ae) {
+ vector_assign<scalar_assign> (*this, typename vector_temporary_traits<V>::type (*this + ae));
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ vector_range &plus_assign (const vector_expression<AE> &ae) {
+ vector_assign<scalar_plus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ vector_range &operator -= (const vector_expression<AE> &ae) {
+ vector_assign<scalar_assign> (*this, typename vector_temporary_traits<V>::type (*this - ae));
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ vector_range &minus_assign (const vector_expression<AE> &ae) {
+ vector_assign<scalar_minus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ vector_range &operator *= (const AT &at) {
+ vector_assign_scalar<scalar_multiplies_assign> (*this, at);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ vector_range &operator /= (const AT &at) {
+ vector_assign_scalar<scalar_divides_assign> (*this, at);
+ return *this;
+ }
+
+ // Closure comparison
+ BOOST_UBLAS_INLINE
+ bool same_closure (const vector_range &vr) const {
+ return (*this).data_.same_closure (vr.data_);
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const vector_range &vr) const {
+ return (*this).data_ == vr.data_ && r_ == vr.r_;
+ }
+
+ // Swapping
+ BOOST_UBLAS_INLINE
+ void swap (vector_range vr) {
+ if (this != &vr) {
+ BOOST_UBLAS_CHECK (size () == vr.size (), bad_size ());
+ // Sparse ranges may be nonconformant now.
+ // std::swap_ranges (begin (), end (), vr.begin ());
+ vector_swap<scalar_swap> (*this, vr);
+ }
+ }
+ BOOST_UBLAS_INLINE
+ friend void swap (vector_range vr1, vector_range vr2) {
+ vr1.swap (vr2);
+ }
+
+ // Iterator types
+ private:
+ typedef typename V::const_iterator const_subiterator_type;
+ typedef typename boost::mpl::if_<boost::is_const<V>,
+ typename V::const_iterator,
+ typename V::iterator>::type subiterator_type;
+
+ public:
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ typedef indexed_iterator<vector_range<vector_type>,
+ typename subiterator_type::iterator_category> iterator;
+ typedef indexed_const_iterator<vector_range<vector_type>,
+ typename const_subiterator_type::iterator_category> const_iterator;
+#else
+ class const_iterator;
+ class iterator;
+#endif
+
+ // Element lookup
+ BOOST_UBLAS_INLINE
+ const_iterator find (size_type i) const {
+ const_subiterator_type it (data_.find (start () + i));
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ return const_iterator (*this, it.index ());
+#else
+ return const_iterator (*this, it);
+#endif
+ }
+ BOOST_UBLAS_INLINE
+ iterator find (size_type i) {
+ subiterator_type it (data_.find (start () + i));
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ return iterator (*this, it.index ());
+#else
+ return iterator (*this, it);
+#endif
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator:
+ public container_const_reference<vector_range>,
+ public iterator_base_traits<typename const_subiterator_type::iterator_category>::template
+ iterator_base<const_iterator, value_type>::type {
+ public:
+ typedef typename const_subiterator_type::difference_type difference_type;
+ typedef typename const_subiterator_type::value_type value_type;
+ typedef typename const_subiterator_type::reference reference;
+ typedef typename const_subiterator_type::pointer pointer;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator ():
+ container_const_reference<self_type> (), it_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator (const self_type &vr, const const_subiterator_type &it):
+ container_const_reference<self_type> (vr), it_ (it) {}
+ BOOST_UBLAS_INLINE
+ const_iterator (const typename self_type::iterator &it): // ISSUE self_type:: stops VC8 using std::iterator here
+ container_const_reference<self_type> (it ()), it_ (it.it_) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator &operator ++ () {
+ ++ it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator -- () {
+ -- it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator += (difference_type n) {
+ it_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator -= (difference_type n) {
+ it_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ - it.it_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ BOOST_UBLAS_CHECK (index () < (*this) ().size (), bad_index ());
+ return *it_;
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+ // Index
+ BOOST_UBLAS_INLINE
+ size_type index () const {
+ return it_.index () - (*this) ().start ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator &operator = (const const_iterator &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ == it.it_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ < it.it_;
+ }
+
+ private:
+ const_subiterator_type it_;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator begin () const {
+ return find (0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator end () const {
+ return find (size ());
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class iterator:
+ public container_reference<vector_range>,
+ public iterator_base_traits<typename subiterator_type::iterator_category>::template
+ iterator_base<iterator, value_type>::type {
+ public:
+ typedef typename subiterator_type::difference_type difference_type;
+ typedef typename subiterator_type::value_type value_type;
+ typedef typename subiterator_type::reference reference;
+ typedef typename subiterator_type::pointer pointer;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ iterator ():
+ container_reference<self_type> (), it_ () {}
+ BOOST_UBLAS_INLINE
+ iterator (self_type &vr, const subiterator_type &it):
+ container_reference<self_type> (vr), it_ (it) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ iterator &operator ++ () {
+ ++ it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator &operator -- () {
+ -- it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator &operator += (difference_type n) {
+ it_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator &operator -= (difference_type n) {
+ it_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ - it.it_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ BOOST_UBLAS_CHECK (index () < (*this) ().size (), bad_index ());
+ return *it_;
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+ // Index
+ BOOST_UBLAS_INLINE
+ size_type index () const {
+ return it_.index () - (*this) ().start ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ iterator &operator = (const iterator &it) {
+ container_reference<self_type>::assign (&it ());
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ == it.it_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ < it.it_;
+ }
+
+ private:
+ subiterator_type it_;
+
+ friend class const_iterator;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ iterator begin () {
+ return find (0);
+ }
+ BOOST_UBLAS_INLINE
+ iterator end () {
+ return find (size ());
+ }
+
+ // Reverse iterator
+ typedef reverse_iterator_base<const_iterator> const_reverse_iterator;
+ typedef reverse_iterator_base<iterator> reverse_iterator;
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rbegin () const {
+ return const_reverse_iterator (end ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rend () const {
+ return const_reverse_iterator (begin ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator rbegin () {
+ return reverse_iterator (end ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator rend () {
+ return reverse_iterator (begin ());
+ }
+
+ private:
+ vector_closure_type data_;
+ range_type r_;
+ };
+
+ // Simple Projections
+ template<class V>
+ BOOST_UBLAS_INLINE
+ vector_range<V> subrange (V &data, typename V::size_type start, typename V::size_type stop) {
+ typedef basic_range<typename V::size_type, typename V::difference_type> range_type;
+ return vector_range<V> (data, range_type (start, stop));
+ }
+ template<class V>
+ BOOST_UBLAS_INLINE
+ vector_range<const V> subrange (const V &data, typename V::size_type start, typename V::size_type stop) {
+ typedef basic_range<typename V::size_type, typename V::difference_type> range_type;
+ return vector_range<const V> (data, range_type (start, stop));
+ }
+
+ // Generic Projections
+ template<class V>
+ BOOST_UBLAS_INLINE
+ vector_range<V> project (V &data, typename vector_range<V>::range_type const &r) {
+ return vector_range<V> (data, r);
+ }
+ template<class V>
+ BOOST_UBLAS_INLINE
+ const vector_range<const V> project (const V &data, typename vector_range<V>::range_type const &r) {
+ // ISSUE was: return vector_range<V> (const_cast<V &> (data), r);
+ return vector_range<const V> (data, r);
+ }
+ template<class V>
+ BOOST_UBLAS_INLINE
+ vector_range<V> project (vector_range<V> &data, const typename vector_range<V>::range_type &r) {
+ return data.project (r);
+ }
+ template<class V>
+ BOOST_UBLAS_INLINE
+ const vector_range<V> project (const vector_range<V> &data, const typename vector_range<V>::range_type &r) {
+ return data.project (r);
+ }
+
+ // Specialization of temporary_traits
+ template <class V>
+ struct vector_temporary_traits< vector_range<V> >
+ : vector_temporary_traits< V > {} ;
+ template <class V>
+ struct vector_temporary_traits< const vector_range<V> >
+ : vector_temporary_traits< V > {} ;
+
+
+ // Vector based slice class
+ template<class V>
+ class vector_slice:
+ public vector_expression<vector_slice<V> > {
+
+ typedef vector_slice<V> self_type;
+ public:
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using vector_expression<self_type>::operator ();
+#endif
+ typedef const V const_vector_type;
+ typedef V vector_type;
+ typedef typename V::size_type size_type;
+ typedef typename V::difference_type difference_type;
+ typedef typename V::value_type value_type;
+ typedef typename V::const_reference const_reference;
+ typedef typename boost::mpl::if_<boost::is_const<V>,
+ typename V::const_reference,
+ typename V::reference>::type reference;
+ typedef typename boost::mpl::if_<boost::is_const<V>,
+ typename V::const_closure_type,
+ typename V::closure_type>::type vector_closure_type;
+ typedef basic_range<size_type, difference_type> range_type;
+ typedef basic_slice<size_type, difference_type> slice_type;
+ typedef const self_type const_closure_type;
+ typedef self_type closure_type;
+ typedef typename storage_restrict_traits<typename V::storage_category,
+ dense_proxy_tag>::storage_category storage_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ vector_slice (vector_type &data, const slice_type &s):
+ data_ (data), s_ (s.preprocess (data.size ())) {
+ // Early checking of preconditions here.
+ // BOOST_UBLAS_CHECK (s_.start () <= data_.size () &&
+ // s_.start () + s_.stride () * (s_.size () - (s_.size () > 0)) <= data_.size (), bad_index ());
+ }
+ BOOST_UBLAS_INLINE
+ vector_slice (const vector_closure_type &data, const slice_type &s, int):
+ data_ (data), s_ (s.preprocess (data.size ())) {
+ // Early checking of preconditions here.
+ // BOOST_UBLAS_CHECK (s_.start () <= data_.size () &&
+ // s_.start () + s_.stride () * (s_.size () - (s_.size () > 0)) <= data_.size (), bad_index ());
+ }
+
+ // Accessors
+ BOOST_UBLAS_INLINE
+ size_type start () const {
+ return s_.start ();
+ }
+ BOOST_UBLAS_INLINE
+ difference_type stride () const {
+ return s_.stride ();
+ }
+ BOOST_UBLAS_INLINE
+ size_type size () const {
+ return s_.size ();
+ }
+
+ // Storage accessors
+ BOOST_UBLAS_INLINE
+ const vector_closure_type &data () const {
+ return data_;
+ }
+ BOOST_UBLAS_INLINE
+ vector_closure_type &data () {
+ return data_;
+ }
+
+ // Element access
+#ifndef BOOST_UBLAS_PROXY_CONST_MEMBER
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type i) const {
+ return data_ (s_ (i));
+ }
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type i) {
+ return data_ (s_ (i));
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (size_type i) const {
+ return (*this) (i);
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (size_type i) {
+ return (*this) (i);
+ }
+#else
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type i) const {
+ return data_ (s_ (i));
+ }
+
+ BOOST_UBLAS_INLINE
+ reference operator [] (size_type i) const {
+ return (*this) (i);
+ }
+#endif
+
+ // ISSUE can this be done in free project function?
+ // Although a const function can create a non-const proxy to a non-const object
+ // Critical is that vector_type and data_ (vector_closure_type) are const correct
+ BOOST_UBLAS_INLINE
+ vector_slice<vector_type> project (const range_type &r) const {
+ return vector_slice<vector_type> (data_, s_.compose (r.preprocess (data_.size ())), false);
+ }
+ BOOST_UBLAS_INLINE
+ vector_slice<vector_type> project (const slice_type &s) const {
+ return vector_slice<vector_type> (data_, s_.compose (s.preprocess (data_.size ())), false);
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ vector_slice &operator = (const vector_slice &vs) {
+ // ISSUE need a temporary, proxy can be overlaping alias
+ vector_assign<scalar_assign> (*this, typename vector_temporary_traits<V>::type (vs));
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ vector_slice &assign_temporary (vector_slice &vs) {
+ // assign elements, proxied container remains the same
+ vector_assign<scalar_assign> (*this, vs);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ vector_slice &operator = (const vector_expression<AE> &ae) {
+ vector_assign<scalar_assign> (*this, typename vector_temporary_traits<V>::type (ae));
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ vector_slice &assign (const vector_expression<AE> &ae) {
+ vector_assign<scalar_assign> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ vector_slice &operator += (const vector_expression<AE> &ae) {
+ vector_assign<scalar_assign> (*this, typename vector_temporary_traits<V>::type (*this + ae));
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ vector_slice &plus_assign (const vector_expression<AE> &ae) {
+ vector_assign<scalar_plus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ vector_slice &operator -= (const vector_expression<AE> &ae) {
+ vector_assign<scalar_assign> (*this, typename vector_temporary_traits<V>::type (*this - ae));
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ vector_slice &minus_assign (const vector_expression<AE> &ae) {
+ vector_assign<scalar_minus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ vector_slice &operator *= (const AT &at) {
+ vector_assign_scalar<scalar_multiplies_assign> (*this, at);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ vector_slice &operator /= (const AT &at) {
+ vector_assign_scalar<scalar_divides_assign> (*this, at);
+ return *this;
+ }
+
+ // Closure comparison
+ BOOST_UBLAS_INLINE
+ bool same_closure (const vector_slice &vr) const {
+ return (*this).data_.same_closure (vr.data_);
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const vector_slice &vs) const {
+ return (*this).data_ == vs.data_ && s_ == vs.s_;
+ }
+
+ // Swapping
+ BOOST_UBLAS_INLINE
+ void swap (vector_slice vs) {
+ if (this != &vs) {
+ BOOST_UBLAS_CHECK (size () == vs.size (), bad_size ());
+ // Sparse ranges may be nonconformant now.
+ // std::swap_ranges (begin (), end (), vs.begin ());
+ vector_swap<scalar_swap> (*this, vs);
+ }
+ }
+ BOOST_UBLAS_INLINE
+ friend void swap (vector_slice vs1, vector_slice vs2) {
+ vs1.swap (vs2);
+ }
+
+ // Iterator types
+ private:
+ // Use slice as an index - FIXME this fails for packed assignment
+ typedef typename slice_type::const_iterator const_subiterator_type;
+ typedef typename slice_type::const_iterator subiterator_type;
+
+ public:
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ typedef indexed_iterator<vector_slice<vector_type>,
+ typename vector_type::iterator::iterator_category> iterator;
+ typedef indexed_const_iterator<vector_slice<vector_type>,
+ typename vector_type::const_iterator::iterator_category> const_iterator;
+#else
+ class const_iterator;
+ class iterator;
+#endif
+
+ // Element lookup
+ BOOST_UBLAS_INLINE
+ const_iterator find (size_type i) const {
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ return const_iterator (*this, i);
+#else
+ return const_iterator (*this, s_.begin () + i);
+#endif
+ }
+ BOOST_UBLAS_INLINE
+ iterator find (size_type i) {
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ return iterator (*this, i);
+#else
+ return iterator (*this, s_.begin () + i);
+#endif
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator:
+ public container_const_reference<vector_slice>,
+ public iterator_base_traits<typename V::const_iterator::iterator_category>::template
+ iterator_base<const_iterator, value_type>::type {
+ public:
+ typedef typename V::const_iterator::difference_type difference_type;
+ typedef typename V::const_iterator::value_type value_type;
+ typedef typename V::const_reference reference; //FIXME due to indexing access
+ typedef typename V::const_iterator::pointer pointer;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator ():
+ container_const_reference<self_type> (), it_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator (const self_type &vs, const const_subiterator_type &it):
+ container_const_reference<self_type> (vs), it_ (it) {}
+ BOOST_UBLAS_INLINE
+ const_iterator (const typename self_type::iterator &it): // ISSUE self_type:: stops VC8 using std::iterator here
+ container_const_reference<self_type> (it ()), it_ (it.it_) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator &operator ++ () {
+ ++ it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator -- () {
+ -- it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator += (difference_type n) {
+ it_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator -= (difference_type n) {
+ it_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ - it.it_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ // FIXME replace find with at_element
+ BOOST_UBLAS_CHECK (index () < (*this) ().size (), bad_index ());
+ return (*this) ().data_ (*it_);
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+ // Index
+ BOOST_UBLAS_INLINE
+ size_type index () const {
+ return it_.index ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator &operator = (const const_iterator &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ == it.it_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ < it.it_;
+ }
+
+ private:
+ const_subiterator_type it_;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator begin () const {
+ return find (0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator end () const {
+ return find (size ());
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class iterator:
+ public container_reference<vector_slice>,
+ public iterator_base_traits<typename V::iterator::iterator_category>::template
+ iterator_base<iterator, value_type>::type {
+ public:
+ typedef typename V::iterator::difference_type difference_type;
+ typedef typename V::iterator::value_type value_type;
+ typedef typename V::reference reference; //FIXME due to indexing access
+ typedef typename V::iterator::pointer pointer;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ iterator ():
+ container_reference<self_type> (), it_ () {}
+ BOOST_UBLAS_INLINE
+ iterator (self_type &vs, const subiterator_type &it):
+ container_reference<self_type> (vs), it_ (it) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ iterator &operator ++ () {
+ ++ it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator &operator -- () {
+ -- it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator &operator += (difference_type n) {
+ it_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator &operator -= (difference_type n) {
+ it_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ - it.it_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ // FIXME replace find with at_element
+ BOOST_UBLAS_CHECK (index () < (*this) ().size (), bad_index ());
+ return (*this) ().data_ (*it_);
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+
+ // Index
+ BOOST_UBLAS_INLINE
+ size_type index () const {
+ return it_.index ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ iterator &operator = (const iterator &it) {
+ container_reference<self_type>::assign (&it ());
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ == it.it_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ < it.it_;
+ }
+
+ private:
+ subiterator_type it_;
+
+ friend class const_iterator;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ iterator begin () {
+ return find (0);
+ }
+ BOOST_UBLAS_INLINE
+ iterator end () {
+ return find (size ());
+ }
+
+ // Reverse iterator
+ typedef reverse_iterator_base<const_iterator> const_reverse_iterator;
+ typedef reverse_iterator_base<iterator> reverse_iterator;
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rbegin () const {
+ return const_reverse_iterator (end ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rend () const {
+ return const_reverse_iterator (begin ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator rbegin () {
+ return reverse_iterator (end ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator rend () {
+ return reverse_iterator (begin ());
+ }
+
+ private:
+ vector_closure_type data_;
+ slice_type s_;
+ };
+
+ // Simple Projections
+ template<class V>
+ BOOST_UBLAS_INLINE
+ vector_slice<V> subslice (V &data, typename V::size_type start, typename V::difference_type stride, typename V::size_type size) {
+ typedef basic_slice<typename V::size_type, typename V::difference_type> slice_type;
+ return vector_slice<V> (data, slice_type (start, stride, size));
+ }
+ template<class V>
+ BOOST_UBLAS_INLINE
+ vector_slice<const V> subslice (const V &data, typename V::size_type start, typename V::difference_type stride, typename V::size_type size) {
+ typedef basic_slice<typename V::size_type, typename V::difference_type> slice_type;
+ return vector_slice<const V> (data, slice_type (start, stride, size));
+ }
+
+ // Generic Projections
+ template<class V>
+ BOOST_UBLAS_INLINE
+ vector_slice<V> project (V &data, const typename vector_slice<V>::slice_type &s) {
+ return vector_slice<V> (data, s);
+ }
+ template<class V>
+ BOOST_UBLAS_INLINE
+ const vector_slice<const V> project (const V &data, const typename vector_slice<V>::slice_type &s) {
+ // ISSUE was: return vector_slice<V> (const_cast<V &> (data), s);
+ return vector_slice<const V> (data, s);
+ }
+ template<class V>
+ BOOST_UBLAS_INLINE
+ vector_slice<V> project (vector_slice<V> &data, const typename vector_slice<V>::slice_type &s) {
+ return data.project (s);
+ }
+ template<class V>
+ BOOST_UBLAS_INLINE
+ const vector_slice<V> project (const vector_slice<V> &data, const typename vector_slice<V>::slice_type &s) {
+ return data.project (s);
+ }
+ // ISSUE in the following two functions it would be logical to use vector_slice<V>::range_type but this confuses VC7.1 and 8.0
+ template<class V>
+ BOOST_UBLAS_INLINE
+ vector_slice<V> project (vector_slice<V> &data, const typename vector_range<V>::range_type &r) {
+ return data.project (r);
+ }
+ template<class V>
+ BOOST_UBLAS_INLINE
+ const vector_slice<V> project (const vector_slice<V> &data, const typename vector_range<V>::range_type &r) {
+ return data.project (r);
+ }
+
+ // Specialization of temporary_traits
+ template <class V>
+ struct vector_temporary_traits< vector_slice<V> >
+ : vector_temporary_traits< V > {} ;
+ template <class V>
+ struct vector_temporary_traits< const vector_slice<V> >
+ : vector_temporary_traits< V > {} ;
+
+
+ // Vector based indirection class
+ // Contributed by Toon Knapen.
+ // Extended and optimized by Kresimir Fresl.
+ template<class V, class IA>
+ class vector_indirect:
+ public vector_expression<vector_indirect<V, IA> > {
+
+ typedef vector_indirect<V, IA> self_type;
+ public:
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using vector_expression<self_type>::operator ();
+#endif
+ typedef const V const_vector_type;
+ typedef V vector_type;
+ typedef const IA const_indirect_array_type;
+ typedef IA indirect_array_type;
+ typedef typename V::size_type size_type;
+ typedef typename V::difference_type difference_type;
+ typedef typename V::value_type value_type;
+ typedef typename V::const_reference const_reference;
+ typedef typename boost::mpl::if_<boost::is_const<V>,
+ typename V::const_reference,
+ typename V::reference>::type reference;
+ typedef typename boost::mpl::if_<boost::is_const<V>,
+ typename V::const_closure_type,
+ typename V::closure_type>::type vector_closure_type;
+ typedef basic_range<size_type, difference_type> range_type;
+ typedef basic_slice<size_type, difference_type> slice_type;
+ typedef const self_type const_closure_type;
+ typedef self_type closure_type;
+ typedef typename storage_restrict_traits<typename V::storage_category,
+ dense_proxy_tag>::storage_category storage_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ vector_indirect (vector_type &data, size_type size):
+ data_ (data), ia_ (size) {}
+ BOOST_UBLAS_INLINE
+ vector_indirect (vector_type &data, const indirect_array_type &ia):
+ data_ (data), ia_ (ia.preprocess (data.size ())) {}
+ BOOST_UBLAS_INLINE
+ vector_indirect (const vector_closure_type &data, const indirect_array_type &ia, int):
+ data_ (data), ia_ (ia.preprocess (data.size ())) {}
+
+ // Accessors
+ BOOST_UBLAS_INLINE
+ size_type size () const {
+ return ia_.size ();
+ }
+ BOOST_UBLAS_INLINE
+ const_indirect_array_type &indirect () const {
+ return ia_;
+ }
+ BOOST_UBLAS_INLINE
+ indirect_array_type &indirect () {
+ return ia_;
+ }
+
+ // Storage accessors
+ BOOST_UBLAS_INLINE
+ const vector_closure_type &data () const {
+ return data_;
+ }
+ BOOST_UBLAS_INLINE
+ vector_closure_type &data () {
+ return data_;
+ }
+
+ // Element access
+#ifndef BOOST_UBLAS_PROXY_CONST_MEMBER
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type i) const {
+ return data_ (ia_ (i));
+ }
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type i) {
+ return data_ (ia_ (i));
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (size_type i) const {
+ return (*this) (i);
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (size_type i) {
+ return (*this) (i);
+ }
+#else
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type i) const {
+ return data_ (ia_ (i));
+ }
+
+ BOOST_UBLAS_INLINE
+ reference operator [] (size_type i) const {
+ return (*this) (i);
+ }
+#endif
+
+ // ISSUE can this be done in free project function?
+ // Although a const function can create a non-const proxy to a non-const object
+ // Critical is that vector_type and data_ (vector_closure_type) are const correct
+ BOOST_UBLAS_INLINE
+ vector_indirect<vector_type, indirect_array_type> project (const range_type &r) const {
+ return vector_indirect<vector_type, indirect_array_type> (data_, ia_.compose (r.preprocess (data_.size ())), 0);
+ }
+ BOOST_UBLAS_INLINE
+ vector_indirect<vector_type, indirect_array_type> project (const slice_type &s) const {
+ return vector_indirect<vector_type, indirect_array_type> (data_, ia_.compose (s.preprocess (data_.size ())), 0);
+ }
+ BOOST_UBLAS_INLINE
+ vector_indirect<vector_type, indirect_array_type> project (const indirect_array_type &ia) const {
+ return vector_indirect<vector_type, indirect_array_type> (data_, ia_.compose (ia.preprocess (data_.size ())), 0);
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ vector_indirect &operator = (const vector_indirect &vi) {
+ // ISSUE need a temporary, proxy can be overlaping alias
+ vector_assign<scalar_assign> (*this, typename vector_temporary_traits<V>::type (vi));
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ vector_indirect &assign_temporary (vector_indirect &vi) {
+ // assign elements, proxied container remains the same
+ vector_assign<scalar_assign> (*this, vi);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ vector_indirect &operator = (const vector_expression<AE> &ae) {
+ vector_assign<scalar_assign> (*this, typename vector_temporary_traits<V>::type (ae));
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ vector_indirect &assign (const vector_expression<AE> &ae) {
+ vector_assign<scalar_assign> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ vector_indirect &operator += (const vector_expression<AE> &ae) {
+ vector_assign<scalar_assign> (*this, typename vector_temporary_traits<V>::type (*this + ae));
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ vector_indirect &plus_assign (const vector_expression<AE> &ae) {
+ vector_assign<scalar_plus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ vector_indirect &operator -= (const vector_expression<AE> &ae) {
+ vector_assign<scalar_assign> (*this, typename vector_temporary_traits<V>::type (*this - ae));
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ vector_indirect &minus_assign (const vector_expression<AE> &ae) {
+ vector_assign<scalar_minus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ vector_indirect &operator *= (const AT &at) {
+ vector_assign_scalar<scalar_multiplies_assign> (*this, at);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ vector_indirect &operator /= (const AT &at) {
+ vector_assign_scalar<scalar_divides_assign> (*this, at);
+ return *this;
+ }
+
+ // Closure comparison
+ BOOST_UBLAS_INLINE
+ bool same_closure (const vector_indirect &vr) const {
+return true;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const vector_indirect &vi) const {
+ return (*this).data_ == vi.data_ && ia_ == vi.ia_;
+ }
+
+ // Swapping
+ BOOST_UBLAS_INLINE
+ void swap (vector_indirect vi) {
+ if (this != &vi) {
+ BOOST_UBLAS_CHECK (size () == vi.size (), bad_size ());
+ // Sparse ranges may be nonconformant now.
+ // std::swap_ranges (begin (), end (), vi.begin ());
+ vector_swap<scalar_swap> (*this, vi);
+ }
+ }
+ BOOST_UBLAS_INLINE
+ friend void swap (vector_indirect vi1, vector_indirect vi2) {
+ vi1.swap (vi2);
+ }
+
+ // Iterator types
+ private:
+ // Use indirect array as an index - FIXME this fails for packed assignment
+ typedef typename IA::const_iterator const_subiterator_type;
+ typedef typename IA::const_iterator subiterator_type;
+
+ public:
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ typedef indexed_iterator<vector_indirect<vector_type, indirect_array_type>,
+ typename vector_type::iterator::iterator_category> iterator;
+ typedef indexed_const_iterator<vector_indirect<vector_type, indirect_array_type>,
+ typename vector_type::const_iterator::iterator_category> const_iterator;
+#else
+ class const_iterator;
+ class iterator;
+#endif
+ // Element lookup
+ BOOST_UBLAS_INLINE
+ const_iterator find (size_type i) const {
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ return const_iterator (*this, i);
+#else
+ return const_iterator (*this, ia_.begin () + i);
+#endif
+ }
+ BOOST_UBLAS_INLINE
+ iterator find (size_type i) {
+#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ return iterator (*this, i);
+#else
+ return iterator (*this, ia_.begin () + i);
+#endif
+ }
+
+ // Iterators simply are indices.
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class const_iterator:
+ public container_const_reference<vector_indirect>,
+ public iterator_base_traits<typename V::const_iterator::iterator_category>::template
+ iterator_base<const_iterator, value_type>::type {
+ public:
+ typedef typename V::const_iterator::difference_type difference_type;
+ typedef typename V::const_iterator::value_type value_type;
+ typedef typename V::const_reference reference; //FIXME due to indexing access
+ typedef typename V::const_iterator::pointer pointer;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator ():
+ container_const_reference<self_type> (), it_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator (const self_type &vi, const const_subiterator_type &it):
+ container_const_reference<self_type> (vi), it_ (it) {}
+ BOOST_UBLAS_INLINE
+ const_iterator (const typename self_type::iterator &it): // ISSUE self_type:: stops VC8 using std::iterator here
+ container_const_reference<self_type> (it ()), it_ (it.it_) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator &operator ++ () {
+ ++ it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator -- () {
+ -- it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator += (difference_type n) {
+ it_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator -= (difference_type n) {
+ it_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ - it.it_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ // FIXME replace find with at_element
+ BOOST_UBLAS_CHECK (index () < (*this) ().size (), bad_index ());
+ return (*this) ().data_ (*it_);
+ }
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+ // Index
+ BOOST_UBLAS_INLINE
+ size_type index () const {
+ return it_.index ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator &operator = (const const_iterator &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ == it.it_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ < it.it_;
+ }
+
+ private:
+ const_subiterator_type it_;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ const_iterator begin () const {
+ return find (0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator end () const {
+ return find (size ());
+ }
+
+#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR
+ class iterator:
+ public container_reference<vector_indirect>,
+ public iterator_base_traits<typename V::iterator::iterator_category>::template
+ iterator_base<iterator, value_type>::type {
+ public:
+ typedef typename V::iterator::difference_type difference_type;
+ typedef typename V::iterator::value_type value_type;
+ typedef typename V::reference reference; //FIXME due to indexing access
+ typedef typename V::iterator::pointer pointer;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ iterator ():
+ container_reference<self_type> (), it_ () {}
+ BOOST_UBLAS_INLINE
+ iterator (self_type &vi, const subiterator_type &it):
+ container_reference<self_type> (vi), it_ (it) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ iterator &operator ++ () {
+ ++ it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator &operator -- () {
+ -- it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator &operator += (difference_type n) {
+ it_ += n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator &operator -= (difference_type n) {
+ it_ -= n;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ difference_type operator - (const iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ - it.it_;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ // FIXME replace find with at_element
+ BOOST_UBLAS_CHECK (index () < (*this) ().size (), bad_index ());
+ return (*this) ().data_ (*it_);
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (difference_type n) const {
+ return *(*this + n);
+ }
+
+ // Index
+ BOOST_UBLAS_INLINE
+ size_type index () const {
+ return it_.index ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ iterator &operator = (const iterator &it) {
+ container_reference<self_type>::assign (&it ());
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ == it.it_;
+ }
+ BOOST_UBLAS_INLINE
+ bool operator < (const iterator &it) const {
+ BOOST_UBLAS_CHECK ((*this) ().same_closure (it ()), external_logic ());
+ return it_ < it.it_;
+ }
+
+ private:
+ subiterator_type it_;
+
+ friend class const_iterator;
+ };
+#endif
+
+ BOOST_UBLAS_INLINE
+ iterator begin () {
+ return find (0);
+ }
+ BOOST_UBLAS_INLINE
+ iterator end () {
+ return find (size ());
+ }
+
+ // Reverse iterator
+ typedef reverse_iterator_base<const_iterator> const_reverse_iterator;
+ typedef reverse_iterator_base<iterator> reverse_iterator;
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rbegin () const {
+ return const_reverse_iterator (end ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rend () const {
+ return const_reverse_iterator (begin ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator rbegin () {
+ return reverse_iterator (end ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator rend () {
+ return reverse_iterator (begin ());
+ }
+
+ private:
+ vector_closure_type data_;
+ indirect_array_type ia_;
+ };
+
+ // Projections
+ template<class V, class A>
+ BOOST_UBLAS_INLINE
+ vector_indirect<V, indirect_array<A> > project (V &data, const indirect_array<A> &ia) {
+ return vector_indirect<V, indirect_array<A> > (data, ia);
+ }
+ template<class V, class A>
+ BOOST_UBLAS_INLINE
+ const vector_indirect<const V, indirect_array<A> > project (const V &data, const indirect_array<A> &ia) {
+ // ISSUE was: return vector_indirect<V, indirect_array<A> > (const_cast<V &> (data), ia)
+ return vector_indirect<const V, indirect_array<A> > (data, ia);
+ }
+ template<class V, class IA>
+ BOOST_UBLAS_INLINE
+ vector_indirect<V, IA> project (vector_indirect<V, IA> &data, const typename vector_indirect<V, IA>::range_type &r) {
+ return data.project (r);
+ }
+ template<class V, class IA>
+ BOOST_UBLAS_INLINE
+ const vector_indirect<V, IA> project (const vector_indirect<V, IA> &data, const typename vector_indirect<V, IA>::range_type &r) {
+ return data.project (r);
+ }
+ template<class V, class IA>
+ BOOST_UBLAS_INLINE
+ vector_indirect<V, IA> project (vector_indirect<V, IA> &data, const typename vector_indirect<V, IA>::slice_type &s) {
+ return data.project (s);
+ }
+ template<class V, class IA>
+ BOOST_UBLAS_INLINE
+ const vector_indirect<V, IA> project (const vector_indirect<V, IA> &data, const typename vector_indirect<V, IA>::slice_type &s) {
+ return data.project (s);
+ }
+ template<class V, class A>
+ BOOST_UBLAS_INLINE
+ vector_indirect<V, indirect_array<A> > project (vector_indirect<V, indirect_array<A> > &data, const indirect_array<A> &ia) {
+ return data.project (ia);
+ }
+ template<class V, class A>
+ BOOST_UBLAS_INLINE
+ const vector_indirect<V, indirect_array<A> > project (const vector_indirect<V, indirect_array<A> > &data, const indirect_array<A> &ia) {
+ return data.project (ia);
+ }
+
+ // Specialization of temporary_traits
+ template <class V>
+ struct vector_temporary_traits< vector_indirect<V> >
+ : vector_temporary_traits< V > {} ;
+ template <class V>
+ struct vector_temporary_traits< const vector_indirect<V> >
+ : vector_temporary_traits< V > {} ;
+
+}}}
+
+#endif
diff --git a/boost/boost/numeric/ublas/vector_sparse.hpp b/boost/boost/numeric/ublas/vector_sparse.hpp
new file mode 100644
index 00000000000..abbd28dc1e8
--- /dev/null
+++ b/boost/boost/numeric/ublas/vector_sparse.hpp
@@ -0,0 +1,2009 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without fee,
+// provided that the above copyright notice appear in all copies and
+// that both that copyright notice and this permission notice appear
+// in supporting documentation. The authors make no representations
+// about the suitability of this software for any purpose.
+// It is provided "as is" without express or implied warranty.
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#ifndef _BOOST_UBLAS_VECTOR_SPARSE_
+#define _BOOST_UBLAS_VECTOR_SPARSE_
+
+#include <boost/numeric/ublas/storage_sparse.hpp>
+#include <boost/numeric/ublas/vector_expression.hpp>
+#include <boost/numeric/ublas/detail/vector_assign.hpp>
+#if BOOST_UBLAS_TYPE_CHECK
+#include <boost/numeric/ublas/vector.hpp>
+#endif
+
+// Iterators based on ideas of Jeremy Siek
+
+namespace boost { namespace numeric { namespace ublas {
+
+#ifdef BOOST_UBLAS_STRICT_VECTOR_SPARSE
+
+ template<class V>
+ class sparse_vector_element:
+ public container_reference<V> {
+ public:
+ typedef V vector_type;
+ typedef typename V::size_type size_type;
+ typedef typename V::value_type value_type;
+ typedef const value_type &const_reference;
+ typedef value_type *pointer;
+
+ private:
+ // Proxied element operations
+ void get_d () const {
+ pointer p = (*this) ().find_element (i_);
+ if (p)
+ d_ = *p;
+ else
+ d_ = value_type/*zero*/();
+ }
+
+ void set (const value_type &s) const {
+ pointer p = (*this) ().find_element (i_);
+ if (!p)
+ (*this) ().insert_element (i_, s);
+ else
+ *p = s;
+ }
+
+ public:
+ // Construction and destruction
+ sparse_vector_element (vector_type &v, size_type i):
+ container_reference<vector_type> (v), i_ (i) {
+ }
+ BOOST_UBLAS_INLINE
+ sparse_vector_element (const sparse_vector_element &p):
+ container_reference<vector_type> (p), i_ (p.i_) {}
+ BOOST_UBLAS_INLINE
+ ~sparse_vector_element () {
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ sparse_vector_element &operator = (const sparse_vector_element &p) {
+ // Overide the implict copy assignment
+ p.get_d ();
+ set (p.d_);
+ return *this;
+ }
+ template<class D>
+ BOOST_UBLAS_INLINE
+ sparse_vector_element &operator = (const D &d) {
+ set (d);
+ return *this;
+ }
+ template<class D>
+ BOOST_UBLAS_INLINE
+ sparse_vector_element &operator += (const D &d) {
+ get_d ();
+ d_ += d;
+ set (d_);
+ return *this;
+ }
+ template<class D>
+ BOOST_UBLAS_INLINE
+ sparse_vector_element &operator -= (const D &d) {
+ get_d ();
+ d_ -= d;
+ set (d_);
+ return *this;
+ }
+ template<class D>
+ BOOST_UBLAS_INLINE
+ sparse_vector_element &operator *= (const D &d) {
+ get_d ();
+ d_ *= d;
+ set (d_);
+ return *this;
+ }
+ template<class D>
+ BOOST_UBLAS_INLINE
+ sparse_vector_element &operator /= (const D &d) {
+ get_d ();
+ d_ /= d;
+ set (d_);
+ return *this;
+ }
+
+ // Comparison
+ template<class D>
+ BOOST_UBLAS_INLINE
+ bool operator == (const D &d) const {
+ get_d ();
+ return d_ == d;
+ }
+ template<class D>
+ BOOST_UBLAS_INLINE
+ bool operator != (const D &d) const {
+ get_d ();
+ return d_ != d;
+ }
+
+ // Conversion - weak link in proxy as d_ is not a perfect alias for the element
+ BOOST_UBLAS_INLINE
+ operator const_reference () const {
+ get_d ();
+ return d_;
+ }
+
+ // Conversion to reference - may be invalidated
+ BOOST_UBLAS_INLINE
+ value_type& ref () const {
+ const pointer p = (*this) ().find_element (i_);
+ if (!p)
+ return (*this) ().insert_element (i_, value_type/*zero*/());
+ else
+ return *p;
+ }
+
+ private:
+ size_type i_;
+ mutable value_type d_;
+ };
+
+ /*
+ * Generalise explicit reference access
+ */
+ namespace detail {
+ template <class R>
+ struct element_reference {
+ typedef R& reference;
+ static reference get_reference (reference r)
+ {
+ return r;
+ }
+ };
+ template <class V>
+ struct element_reference<sparse_vector_element<V> > {
+ typedef typename V::value_type& reference;
+ static reference get_reference (const sparse_vector_element<V>& sve)
+ {
+ return sve.ref ();
+ }
+ };
+ }
+ template <class VER>
+ typename detail::element_reference<VER>::reference ref (VER& ver) {
+ return detail::element_reference<VER>::get_reference (ver);
+ }
+ template <class VER>
+ typename detail::element_reference<VER>::reference ref (const VER& ver) {
+ return detail::element_reference<VER>::get_reference (ver);
+ }
+
+
+ template<class V>
+ struct type_traits<sparse_vector_element<V> > {
+ typedef typename V::value_type element_type;
+ typedef type_traits<sparse_vector_element<V> > self_type;
+ typedef typename type_traits<element_type>::value_type value_type;
+ typedef typename type_traits<element_type>::const_reference const_reference;
+ typedef sparse_vector_element<V> reference;
+ typedef typename type_traits<element_type>::real_type real_type;
+ typedef typename type_traits<element_type>::precision_type precision_type;
+
+ static const unsigned plus_complexity = type_traits<element_type>::plus_complexity;
+ static const unsigned multiplies_complexity = type_traits<element_type>::multiplies_complexity;
+
+ static
+ BOOST_UBLAS_INLINE
+ real_type real (const_reference t) {
+ return type_traits<element_type>::real (t);
+ }
+ static
+ BOOST_UBLAS_INLINE
+ real_type imag (const_reference t) {
+ return type_traits<element_type>::imag (t);
+ }
+ static
+ BOOST_UBLAS_INLINE
+ value_type conj (const_reference t) {
+ return type_traits<element_type>::conj (t);
+ }
+
+ static
+ BOOST_UBLAS_INLINE
+ real_type type_abs (const_reference t) {
+ return type_traits<element_type>::type_abs (t);
+ }
+ static
+ BOOST_UBLAS_INLINE
+ value_type type_sqrt (const_reference t) {
+ return type_traits<element_type>::type_sqrt (t);
+ }
+
+ static
+ BOOST_UBLAS_INLINE
+ real_type norm_1 (const_reference t) {
+ return type_traits<element_type>::norm_1 (t);
+ }
+ static
+ BOOST_UBLAS_INLINE
+ real_type norm_2 (const_reference t) {
+ return type_traits<element_type>::norm_2 (t);
+ }
+ static
+ BOOST_UBLAS_INLINE
+ real_type norm_inf (const_reference t) {
+ return type_traits<element_type>::norm_inf (t);
+ }
+
+ static
+ BOOST_UBLAS_INLINE
+ bool equals (const_reference t1, const_reference t2) {
+ return type_traits<element_type>::equals (t1, t2);
+ }
+ };
+
+ template<class V1, class T2>
+ struct promote_traits<sparse_vector_element<V1>, T2> {
+ typedef typename promote_traits<typename sparse_vector_element<V1>::value_type, T2>::promote_type promote_type;
+ };
+ template<class T1, class V2>
+ struct promote_traits<T1, sparse_vector_element<V2> > {
+ typedef typename promote_traits<T1, typename sparse_vector_element<V2>::value_type>::promote_type promote_type;
+ };
+ template<class V1, class V2>
+ struct promote_traits<sparse_vector_element<V1>, sparse_vector_element<V2> > {
+ typedef typename promote_traits<typename sparse_vector_element<V1>::value_type,
+ typename sparse_vector_element<V2>::value_type>::promote_type promote_type;
+ };
+
+#endif
+
+
+ // Index map based sparse vector class
+ template<class T, class A>
+ class mapped_vector:
+ public vector_container<mapped_vector<T, A> > {
+
+ typedef T &true_reference;
+ typedef T *pointer;
+ typedef const T *const_pointer;
+ typedef mapped_vector<T, A> self_type;
+ public:
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using vector_container<self_type>::operator ();
+#endif
+ typedef typename A::size_type size_type;
+ typedef typename A::difference_type difference_type;
+ typedef T value_type;
+ typedef A array_type;
+ typedef const value_type &const_reference;
+#ifndef BOOST_UBLAS_STRICT_VECTOR_SPARSE
+ typedef typename detail::map_traits<A,T>::reference reference;
+#else
+ typedef sparse_vector_element<self_type> reference;
+#endif
+ typedef const vector_reference<const self_type> const_closure_type;
+ typedef vector_reference<self_type> closure_type;
+ typedef self_type vector_temporary_type;
+ typedef sparse_tag storage_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ mapped_vector ():
+ vector_container<self_type> (),
+ size_ (0), data_ () {}
+ BOOST_UBLAS_INLINE
+ mapped_vector (size_type size, size_type non_zeros = 0):
+ vector_container<self_type> (),
+ size_ (size), data_ () {
+ detail::map_reserve (data(), restrict_capacity (non_zeros));
+ }
+ BOOST_UBLAS_INLINE
+ mapped_vector (const mapped_vector &v):
+ vector_container<self_type> (),
+ size_ (v.size_), data_ (v.data_) {}
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ mapped_vector (const vector_expression<AE> &ae, size_type non_zeros = 0):
+ vector_container<self_type> (),
+ size_ (ae ().size ()), data_ () {
+ detail::map_reserve (data(), restrict_capacity (non_zeros));
+ vector_assign<scalar_assign> (*this, ae);
+ }
+
+ // Accessors
+ BOOST_UBLAS_INLINE
+ size_type size () const {
+ return size_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type nnz_capacity () const {
+ return detail::map_capacity (data ());
+ }
+ BOOST_UBLAS_INLINE
+ size_type nnz () const {
+ return data (). size ();
+ }
+
+ // Storage accessors
+ BOOST_UBLAS_INLINE
+ const array_type &data () const {
+ return data_;
+ }
+ BOOST_UBLAS_INLINE
+ array_type &data () {
+ return data_;
+ }
+
+ // Resizing
+ private:
+ BOOST_UBLAS_INLINE
+ size_type restrict_capacity (size_type non_zeros) const {
+ non_zeros = (std::min) (non_zeros, size_);
+ return non_zeros;
+ }
+ public:
+ BOOST_UBLAS_INLINE
+ void resize (size_type size, bool preserve = true) {
+ size_ = size;
+ if (preserve) {
+ data ().erase (data ().lower_bound(size_), data ().end());
+ }
+ else {
+ data ().clear ();
+ }
+ }
+
+ // Reserving
+ BOOST_UBLAS_INLINE
+ void reserve (size_type non_zeros = 0, bool preserve = true) {
+ detail::map_reserve (data (), restrict_capacity (non_zeros));
+ }
+
+ // Element support
+ BOOST_UBLAS_INLINE
+ pointer find_element (size_type i) {
+ return const_cast<pointer> (const_cast<const self_type&>(*this).find_element (i));
+ }
+ BOOST_UBLAS_INLINE
+ const_pointer find_element (size_type i) const {
+ const_subiterator_type it (data ().find (i));
+ if (it == data ().end ())
+ return 0;
+ BOOST_UBLAS_CHECK ((*it).first == i, internal_logic ()); // broken map
+ return &(*it).second;
+ }
+
+ // Element access
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type i) const {
+ BOOST_UBLAS_CHECK (i < size_, bad_index ());
+ const_subiterator_type it (data ().find (i));
+ if (it == data ().end ())
+ return zero_;
+ BOOST_UBLAS_CHECK ((*it).first == i, internal_logic ()); // broken map
+ return (*it).second;
+ }
+ BOOST_UBLAS_INLINE
+ true_reference ref (size_type i) {
+ BOOST_UBLAS_CHECK (i < size_, bad_index ());
+ std::pair<subiterator_type, bool> ii (data ().insert (typename array_type::value_type (i, value_type/*zero*/())));
+ BOOST_UBLAS_CHECK ((ii.first)->first == i, internal_logic ()); // broken map
+ return (ii.first)->second;
+ }
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type i) {
+#ifndef BOOST_UBLAS_STRICT_VECTOR_SPARSE
+ return ref (i);
+#else
+ BOOST_UBLAS_CHECK (i < size_, bad_index ());
+ return reference (*this, i);
+#endif
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (size_type i) const {
+ return (*this) (i);
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (size_type i) {
+ return (*this) (i);
+ }
+
+ // Element assignment
+ BOOST_UBLAS_INLINE
+ true_reference insert_element (size_type i, const_reference t) {
+ std::pair<subiterator_type, bool> ii = data ().insert (typename array_type::value_type (i, t));
+ BOOST_UBLAS_CHECK (ii.second, bad_index ()); // duplicate element
+ BOOST_UBLAS_CHECK ((ii.first)->first == i, internal_logic ()); // broken map
+ if (!ii.second) // existing element
+ (ii.first)->second = t;
+ return (ii.first)->second;
+ }
+ BOOST_UBLAS_INLINE
+ void erase_element (size_type i) {
+ subiterator_type it = data ().find (i);
+ if (it == data ().end ())
+ return;
+ data ().erase (it);
+ }
+
+ // Zeroing
+ BOOST_UBLAS_INLINE
+ void clear () {
+ data ().clear ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ mapped_vector &operator = (const mapped_vector &v) {
+ if (this != &v) {
+ size_ = v.size_;
+ data () = v.data ();
+ }
+ return *this;
+ }
+ template<class C> // Container assignment without temporary
+ BOOST_UBLAS_INLINE
+ mapped_vector &operator = (const vector_container<C> &v) {
+ resize (v ().size (), false);
+ assign (v);
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ mapped_vector &assign_temporary (mapped_vector &v) {
+ swap (v);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ mapped_vector &operator = (const vector_expression<AE> &ae) {
+ self_type temporary (ae, detail::map_capacity (data()));
+ return assign_temporary (temporary);
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ mapped_vector &assign (const vector_expression<AE> &ae) {
+ vector_assign<scalar_assign> (*this, ae);
+ return *this;
+ }
+
+ // Computed assignment
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ mapped_vector &operator += (const vector_expression<AE> &ae) {
+ self_type temporary (*this + ae, detail::map_capacity (data()));
+ return assign_temporary (temporary);
+ }
+ template<class C> // Container assignment without temporary
+ BOOST_UBLAS_INLINE
+ mapped_vector &operator += (const vector_container<C> &v) {
+ plus_assign (v);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ mapped_vector &plus_assign (const vector_expression<AE> &ae) {
+ vector_assign<scalar_plus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ mapped_vector &operator -= (const vector_expression<AE> &ae) {
+ self_type temporary (*this - ae, detail::map_capacity (data()));
+ return assign_temporary (temporary);
+ }
+ template<class C> // Container assignment without temporary
+ BOOST_UBLAS_INLINE
+ mapped_vector &operator -= (const vector_container<C> &v) {
+ minus_assign (v);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ mapped_vector &minus_assign (const vector_expression<AE> &ae) {
+ vector_assign<scalar_minus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ mapped_vector &operator *= (const AT &at) {
+ vector_assign_scalar<scalar_multiplies_assign> (*this, at);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ mapped_vector &operator /= (const AT &at) {
+ vector_assign_scalar<scalar_divides_assign> (*this, at);
+ return *this;
+ }
+
+ // Swapping
+ BOOST_UBLAS_INLINE
+ void swap (mapped_vector &v) {
+ if (this != &v) {
+ std::swap (size_, v.size_);
+ data ().swap (v.data ());
+ }
+ }
+ BOOST_UBLAS_INLINE
+ friend void swap (mapped_vector &v1, mapped_vector &v2) {
+ v1.swap (v2);
+ }
+
+ // Iterator types
+ private:
+ // Use storage iterator
+ typedef typename A::const_iterator const_subiterator_type;
+ typedef typename A::iterator subiterator_type;
+
+ BOOST_UBLAS_INLINE
+ true_reference at_element (size_type i) {
+ BOOST_UBLAS_CHECK (i < size_, bad_index ());
+ subiterator_type it (data ().find (i));
+ BOOST_UBLAS_CHECK (it != data ().end(), bad_index ());
+ BOOST_UBLAS_CHECK ((*it).first == i, internal_logic ()); // broken map
+ return it->second;
+ }
+
+ public:
+ class const_iterator;
+ class iterator;
+
+ // Element lookup
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ const_iterator find (size_type i) const {
+ return const_iterator (*this, data ().lower_bound (i));
+ }
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ iterator find (size_type i) {
+ return iterator (*this, data ().lower_bound (i));
+ }
+
+
+ class const_iterator:
+ public container_const_reference<mapped_vector>,
+ public bidirectional_iterator_base<sparse_bidirectional_iterator_tag,
+ const_iterator, value_type> {
+ public:
+ typedef typename mapped_vector::value_type value_type;
+ typedef typename mapped_vector::difference_type difference_type;
+ typedef typename mapped_vector::const_reference reference;
+ typedef const typename mapped_vector::pointer pointer;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator ():
+ container_const_reference<self_type> (), it_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator (const self_type &v, const const_subiterator_type &it):
+ container_const_reference<self_type> (v), it_ (it) {}
+ BOOST_UBLAS_INLINE
+ const_iterator (const typename self_type::iterator &it): // ISSUE self_type:: stops VC8 using std::iterator here
+ container_const_reference<self_type> (it ()), it_ (it.it_) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator &operator ++ () {
+ ++ it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator -- () {
+ -- it_;
+ return *this;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ BOOST_UBLAS_CHECK (index () < (*this) ().size (), bad_index ());
+ return (*it_).second;
+ }
+
+ // Index
+ BOOST_UBLAS_INLINE
+ size_type index () const {
+ BOOST_UBLAS_CHECK (*this != (*this) ().end (), bad_index ());
+ BOOST_UBLAS_CHECK ((*it_).first < (*this) ().size (), bad_index ());
+ return (*it_).first;
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator &operator = (const const_iterator &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it_ == it.it_;
+ }
+
+ private:
+ const_subiterator_type it_;
+ };
+
+ BOOST_UBLAS_INLINE
+ const_iterator begin () const {
+ return const_iterator (*this, data ().begin ());
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator end () const {
+ return const_iterator (*this, data ().end ());
+ }
+
+ class iterator:
+ public container_reference<mapped_vector>,
+ public bidirectional_iterator_base<sparse_bidirectional_iterator_tag,
+ iterator, value_type> {
+ public:
+ typedef typename mapped_vector::value_type value_type;
+ typedef typename mapped_vector::difference_type difference_type;
+ typedef typename mapped_vector::true_reference reference;
+ typedef typename mapped_vector::pointer pointer;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ iterator ():
+ container_reference<self_type> (), it_ () {}
+ BOOST_UBLAS_INLINE
+ iterator (self_type &v, const subiterator_type &it):
+ container_reference<self_type> (v), it_ (it) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ iterator &operator ++ () {
+ ++ it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator &operator -- () {
+ -- it_;
+ return *this;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ BOOST_UBLAS_CHECK (index () < (*this) ().size (), bad_index ());
+ return (*it_).second;
+ }
+
+ // Index
+ BOOST_UBLAS_INLINE
+ size_type index () const {
+ BOOST_UBLAS_CHECK (*this != (*this) ().end (), bad_index ());
+ BOOST_UBLAS_CHECK ((*it_).first < (*this) ().size (), bad_index ());
+ return (*it_).first;
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ iterator &operator = (const iterator &it) {
+ container_reference<self_type>::assign (&it ());
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const iterator &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it_ == it.it_;
+ }
+
+ private:
+ subiterator_type it_;
+
+ friend class const_iterator;
+ };
+
+ BOOST_UBLAS_INLINE
+ iterator begin () {
+ return iterator (*this, data ().begin ());
+ }
+ BOOST_UBLAS_INLINE
+ iterator end () {
+ return iterator (*this, data ().end ());
+ }
+
+ // Reverse iterator
+ typedef reverse_iterator_base<const_iterator> const_reverse_iterator;
+ typedef reverse_iterator_base<iterator> reverse_iterator;
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rbegin () const {
+ return const_reverse_iterator (end ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rend () const {
+ return const_reverse_iterator (begin ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator rbegin () {
+ return reverse_iterator (end ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator rend () {
+ return reverse_iterator (begin ());
+ }
+
+ private:
+ size_type size_;
+ array_type data_;
+ static const value_type zero_;
+ };
+
+ template<class T, class A>
+ const typename mapped_vector<T, A>::value_type mapped_vector<T, A>::zero_ = value_type/*zero*/();
+
+
+ // Compressed array based sparse vector class
+ // Thanks to Kresimir Fresl for extending this to cover different index bases.
+ template<class T, std::size_t IB, class IA, class TA>
+ class compressed_vector:
+ public vector_container<compressed_vector<T, IB, IA, TA> > {
+
+ typedef T &true_reference;
+ typedef T *pointer;
+ typedef const T *const_pointer;
+ typedef compressed_vector<T, IB, IA, TA> self_type;
+ public:
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using vector_container<self_type>::operator ();
+#endif
+ // ISSUE require type consistency check
+ // is_convertable (IA::size_type, TA::size_type)
+ typedef typename IA::value_type size_type;
+ typedef typename IA::difference_type difference_type;
+ typedef T value_type;
+ typedef const T &const_reference;
+#ifndef BOOST_UBLAS_STRICT_VECTOR_SPARSE
+ typedef T &reference;
+#else
+ typedef sparse_vector_element<self_type> reference;
+#endif
+ typedef IA index_array_type;
+ typedef TA value_array_type;
+ typedef const vector_reference<const self_type> const_closure_type;
+ typedef vector_reference<self_type> closure_type;
+ typedef self_type vector_temporary_type;
+ typedef sparse_tag storage_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ compressed_vector ():
+ vector_container<self_type> (),
+ size_ (0), capacity_ (restrict_capacity (0)), filled_ (0),
+ index_data_ (capacity_), value_data_ (capacity_) {
+ storage_invariants ();
+ }
+ explicit BOOST_UBLAS_INLINE
+ compressed_vector (size_type size, size_type non_zeros = 0):
+ vector_container<self_type> (),
+ size_ (size), capacity_ (restrict_capacity (non_zeros)), filled_ (0),
+ index_data_ (capacity_), value_data_ (capacity_) {
+ storage_invariants ();
+ }
+ BOOST_UBLAS_INLINE
+ compressed_vector (const compressed_vector &v):
+ vector_container<self_type> (),
+ size_ (v.size_), capacity_ (v.capacity_), filled_ (v.filled_),
+ index_data_ (v.index_data_), value_data_ (v.value_data_) {
+ storage_invariants ();
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ compressed_vector (const vector_expression<AE> &ae, size_type non_zeros = 0):
+ vector_container<self_type> (),
+ size_ (ae ().size ()), capacity_ (restrict_capacity (non_zeros)), filled_ (0),
+ index_data_ (capacity_), value_data_ (capacity_) {
+ storage_invariants ();
+ vector_assign<scalar_assign> (*this, ae);
+ }
+
+ // Accessors
+ BOOST_UBLAS_INLINE
+ size_type size () const {
+ return size_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type nnz_capacity () const {
+ return capacity_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type nnz () const {
+ return filled_;
+ }
+
+ // Storage accessors
+ BOOST_UBLAS_INLINE
+ static size_type index_base () {
+ return IB;
+ }
+ BOOST_UBLAS_INLINE
+ typename index_array_type::size_type filled () const {
+ return filled_;
+ }
+ BOOST_UBLAS_INLINE
+ const index_array_type &index_data () const {
+ return index_data_;
+ }
+ BOOST_UBLAS_INLINE
+ const value_array_type &value_data () const {
+ return value_data_;
+ }
+ BOOST_UBLAS_INLINE
+ void set_filled (const typename index_array_type::size_type & filled) {
+ filled_ = filled;
+ storage_invariants ();
+ }
+ BOOST_UBLAS_INLINE
+ index_array_type &index_data () {
+ return index_data_;
+ }
+ BOOST_UBLAS_INLINE
+ value_array_type &value_data () {
+ return value_data_;
+ }
+
+ // Resizing
+ private:
+ BOOST_UBLAS_INLINE
+ size_type restrict_capacity (size_type non_zeros) const {
+ non_zeros = (std::max) (non_zeros, size_type (1));
+ non_zeros = (std::min) (non_zeros, size_);
+ return non_zeros;
+ }
+ public:
+ BOOST_UBLAS_INLINE
+ void resize (size_type size, bool preserve = true) {
+ // FIXME preserve unimplemented
+ BOOST_UBLAS_CHECK (!preserve, internal_logic ());
+ size_ = size;
+ capacity_ = restrict_capacity (capacity_);
+ index_data_. resize (capacity_);
+ value_data_. resize (capacity_);
+ filled_ = 0;
+ storage_invariants ();
+ }
+
+ // Reserving
+ BOOST_UBLAS_INLINE
+ void reserve (size_type non_zeros, bool preserve = true) {
+ capacity_ = restrict_capacity (non_zeros);
+ if (preserve) {
+ index_data_. resize (capacity_, size_type ());
+ value_data_. resize (capacity_, value_type ());
+ filled_ = (std::min) (capacity_, filled_);
+ }
+ else {
+ index_data_. resize (capacity_);
+ value_data_. resize (capacity_);
+ filled_ = 0;
+ }
+ storage_invariants ();
+ }
+
+ // Element support
+ BOOST_UBLAS_INLINE
+ pointer find_element (size_type i) {
+ return const_cast<pointer> (const_cast<const self_type&>(*this).find_element (i));
+ }
+ BOOST_UBLAS_INLINE
+ const_pointer find_element (size_type i) const {
+ const_subiterator_type it (detail::lower_bound (index_data_.begin (), index_data_.begin () + filled_, k_based (i), std::less<size_type> ()));
+ if (it == index_data_.begin () + filled_ || *it != k_based (i))
+ return 0;
+ return &value_data_ [it - index_data_.begin ()];
+ }
+
+ // Element access
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type i) const {
+ BOOST_UBLAS_CHECK (i < size_, bad_index ());
+ const_subiterator_type it (detail::lower_bound (index_data_.begin (), index_data_.begin () + filled_, k_based (i), std::less<size_type> ()));
+ if (it == index_data_.begin () + filled_ || *it != k_based (i))
+ return zero_;
+ return value_data_ [it - index_data_.begin ()];
+ }
+ BOOST_UBLAS_INLINE
+ true_reference ref (size_type i) {
+ BOOST_UBLAS_CHECK (i < size_, bad_index ());
+ subiterator_type it (detail::lower_bound (index_data_.begin (), index_data_.begin () + filled_, k_based (i), std::less<size_type> ()));
+ if (it == index_data_.begin () + filled_ || *it != k_based (i))
+ return insert_element (i, value_type/*zero*/());
+ else
+ return value_data_ [it - index_data_.begin ()];
+ }
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type i) {
+#ifndef BOOST_UBLAS_STRICT_VECTOR_SPARSE
+ return ref (i) ;
+#else
+ BOOST_UBLAS_CHECK (i < size_, bad_index ());
+ return reference (*this, i);
+#endif
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (size_type i) const {
+ return (*this) (i);
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (size_type i) {
+ return (*this) (i);
+ }
+
+ // Element assignment
+ BOOST_UBLAS_INLINE
+ true_reference insert_element (size_type i, const_reference t) {
+ BOOST_UBLAS_CHECK (!find_element (i), bad_index ()); // duplicate element
+ if (filled_ >= capacity_)
+ reserve (2 * capacity_, true);
+ subiterator_type it (detail::lower_bound (index_data_.begin (), index_data_.begin () + filled_, k_based (i), std::less<size_type> ()));
+ // ISSUE max_capacity limit due to difference_type
+ typename std::iterator_traits<subiterator_type>::difference_type n = it - index_data_.begin ();
+ BOOST_UBLAS_CHECK (filled_ == 0 || filled_ == typename index_array_type::size_type (n) || *it != k_based (i), internal_logic ()); // duplicate found by lower_bound
+ ++ filled_;
+ it = index_data_.begin () + n;
+ std::copy_backward (it, index_data_.begin () + filled_ - 1, index_data_.begin () + filled_);
+ *it = k_based (i);
+ typename value_array_type::iterator itt (value_data_.begin () + n);
+ std::copy_backward (itt, value_data_.begin () + filled_ - 1, value_data_.begin () + filled_);
+ *itt = t;
+ storage_invariants ();
+ return *itt;
+ }
+ BOOST_UBLAS_INLINE
+ void erase_element (size_type i) {
+ subiterator_type it (detail::lower_bound (index_data_.begin (), index_data_.begin () + filled_, k_based (i), std::less<size_type> ()));
+ typename std::iterator_traits<subiterator_type>::difference_type n = it - index_data_.begin ();
+ if (filled_ > typename index_array_type::size_type (n) && *it == k_based (i)) {
+ std::copy (it + 1, index_data_.begin () + filled_, it);
+ typename value_array_type::iterator itt (value_data_.begin () + n);
+ std::copy (itt + 1, value_data_.begin () + filled_, itt);
+ -- filled_;
+ }
+ storage_invariants ();
+ }
+
+ // Zeroing
+ BOOST_UBLAS_INLINE
+ void clear () {
+ filled_ = 0;
+ storage_invariants ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ compressed_vector &operator = (const compressed_vector &v) {
+ if (this != &v) {
+ size_ = v.size_;
+ capacity_ = v.capacity_;
+ filled_ = v.filled_;
+ index_data_ = v.index_data_;
+ value_data_ = v.value_data_;
+ }
+ storage_invariants ();
+ return *this;
+ }
+ template<class C> // Container assignment without temporary
+ BOOST_UBLAS_INLINE
+ compressed_vector &operator = (const vector_container<C> &v) {
+ resize (v ().size (), false);
+ assign (v);
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ compressed_vector &assign_temporary (compressed_vector &v) {
+ swap (v);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ compressed_vector &operator = (const vector_expression<AE> &ae) {
+ self_type temporary (ae, capacity_);
+ return assign_temporary (temporary);
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ compressed_vector &assign (const vector_expression<AE> &ae) {
+ vector_assign<scalar_assign> (*this, ae);
+ return *this;
+ }
+
+ // Computed assignment
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ compressed_vector &operator += (const vector_expression<AE> &ae) {
+ self_type temporary (*this + ae, capacity_);
+ return assign_temporary (temporary);
+ }
+ template<class C> // Container assignment without temporary
+ BOOST_UBLAS_INLINE
+ compressed_vector &operator += (const vector_container<C> &v) {
+ plus_assign (v);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ compressed_vector &plus_assign (const vector_expression<AE> &ae) {
+ vector_assign<scalar_plus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ compressed_vector &operator -= (const vector_expression<AE> &ae) {
+ self_type temporary (*this - ae, capacity_);
+ return assign_temporary (temporary);
+ }
+ template<class C> // Container assignment without temporary
+ BOOST_UBLAS_INLINE
+ compressed_vector &operator -= (const vector_container<C> &v) {
+ minus_assign (v);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ compressed_vector &minus_assign (const vector_expression<AE> &ae) {
+ vector_assign<scalar_minus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ compressed_vector &operator *= (const AT &at) {
+ vector_assign_scalar<scalar_multiplies_assign> (*this, at);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ compressed_vector &operator /= (const AT &at) {
+ vector_assign_scalar<scalar_divides_assign> (*this, at);
+ return *this;
+ }
+
+ // Swapping
+ BOOST_UBLAS_INLINE
+ void swap (compressed_vector &v) {
+ if (this != &v) {
+ std::swap (size_, v.size_);
+ std::swap (capacity_, v.capacity_);
+ std::swap (filled_, v.filled_);
+ index_data_.swap (v.index_data_);
+ value_data_.swap (v.value_data_);
+ }
+ storage_invariants ();
+ }
+ BOOST_UBLAS_INLINE
+ friend void swap (compressed_vector &v1, compressed_vector &v2) {
+ v1.swap (v2);
+ }
+
+ // Back element insertion and erasure
+ BOOST_UBLAS_INLINE
+ void push_back (size_type i, const_reference t) {
+ BOOST_UBLAS_CHECK (filled_ == 0 || index_data_ [filled_ - 1] < k_based (i), external_logic ());
+ if (filled_ >= capacity_)
+ reserve (2 * capacity_, true);
+ BOOST_UBLAS_CHECK (filled_ < capacity_, internal_logic ());
+ index_data_ [filled_] = k_based (i);
+ value_data_ [filled_] = t;
+ ++ filled_;
+ storage_invariants ();
+ }
+ BOOST_UBLAS_INLINE
+ void pop_back () {
+ BOOST_UBLAS_CHECK (filled_ > 0, external_logic ());
+ -- filled_;
+ storage_invariants ();
+ }
+
+ // Iterator types
+ private:
+ // Use index array iterator
+ typedef typename IA::const_iterator const_subiterator_type;
+ typedef typename IA::iterator subiterator_type;
+
+ BOOST_UBLAS_INLINE
+ true_reference at_element (size_type i) {
+ BOOST_UBLAS_CHECK (i < size_, bad_index ());
+ subiterator_type it (detail::lower_bound (index_data_.begin (), index_data_.begin () + filled_, k_based (i), std::less<size_type> ()));
+ BOOST_UBLAS_CHECK (it != index_data_.begin () + filled_ && *it == k_based (i), bad_index ());
+ return value_data_ [it - index_data_.begin ()];
+ }
+
+ public:
+ class const_iterator;
+ class iterator;
+
+ // Element lookup
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ const_iterator find (size_type i) const {
+ return const_iterator (*this, detail::lower_bound (index_data_.begin (), index_data_.begin () + filled_, k_based (i), std::less<size_type> ()));
+ }
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ iterator find (size_type i) {
+ return iterator (*this, detail::lower_bound (index_data_.begin (), index_data_.begin () + filled_, k_based (i), std::less<size_type> ()));
+ }
+
+
+ class const_iterator:
+ public container_const_reference<compressed_vector>,
+ public bidirectional_iterator_base<sparse_bidirectional_iterator_tag,
+ const_iterator, value_type> {
+ public:
+ typedef typename compressed_vector::value_type value_type;
+ typedef typename compressed_vector::difference_type difference_type;
+ typedef typename compressed_vector::const_reference reference;
+ typedef const typename compressed_vector::pointer pointer;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator ():
+ container_const_reference<self_type> (), it_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator (const self_type &v, const const_subiterator_type &it):
+ container_const_reference<self_type> (v), it_ (it) {}
+ BOOST_UBLAS_INLINE
+ const_iterator (const typename self_type::iterator &it): // ISSUE self_type:: stops VC8 using std::iterator here
+ container_const_reference<self_type> (it ()), it_ (it.it_) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator &operator ++ () {
+ ++ it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator -- () {
+ -- it_;
+ return *this;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ BOOST_UBLAS_CHECK (index () < (*this) ().size (), bad_index ());
+ return (*this) ().value_data_ [it_ - (*this) ().index_data_.begin ()];
+ }
+
+ // Index
+ BOOST_UBLAS_INLINE
+ size_type index () const {
+ BOOST_UBLAS_CHECK (*this != (*this) ().end (), bad_index ());
+ BOOST_UBLAS_CHECK ((*this) ().zero_based (*it_) < (*this) ().size (), bad_index ());
+ return (*this) ().zero_based (*it_);
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator &operator = (const const_iterator &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it_ == it.it_;
+ }
+
+ private:
+ const_subiterator_type it_;
+ };
+
+ BOOST_UBLAS_INLINE
+ const_iterator begin () const {
+ return find (0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator end () const {
+ return find (size_);
+ }
+
+ class iterator:
+ public container_reference<compressed_vector>,
+ public bidirectional_iterator_base<sparse_bidirectional_iterator_tag,
+ iterator, value_type> {
+ public:
+ typedef typename compressed_vector::value_type value_type;
+ typedef typename compressed_vector::difference_type difference_type;
+ typedef typename compressed_vector::true_reference reference;
+ typedef typename compressed_vector::pointer pointer;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ iterator ():
+ container_reference<self_type> (), it_ () {}
+ BOOST_UBLAS_INLINE
+ iterator (self_type &v, const subiterator_type &it):
+ container_reference<self_type> (v), it_ (it) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ iterator &operator ++ () {
+ ++ it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator &operator -- () {
+ -- it_;
+ return *this;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ BOOST_UBLAS_CHECK (index () < (*this) ().size (), bad_index ());
+ return (*this) ().value_data_ [it_ - (*this) ().index_data_.begin ()];
+ }
+
+ // Index
+ BOOST_UBLAS_INLINE
+ size_type index () const {
+ BOOST_UBLAS_CHECK (*this != (*this) ().end (), bad_index ());
+ BOOST_UBLAS_CHECK ((*this) ().zero_based (*it_) < (*this) ().size (), bad_index ());
+ return (*this) ().zero_based (*it_);
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ iterator &operator = (const iterator &it) {
+ container_reference<self_type>::assign (&it ());
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const iterator &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it_ == it.it_;
+ }
+
+ private:
+ subiterator_type it_;
+
+ friend class const_iterator;
+ };
+
+ BOOST_UBLAS_INLINE
+ iterator begin () {
+ return find (0);
+ }
+ BOOST_UBLAS_INLINE
+ iterator end () {
+ return find (size_);
+ }
+
+ // Reverse iterator
+ typedef reverse_iterator_base<const_iterator> const_reverse_iterator;
+ typedef reverse_iterator_base<iterator> reverse_iterator;
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rbegin () const {
+ return const_reverse_iterator (end ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rend () const {
+ return const_reverse_iterator (begin ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator rbegin () {
+ return reverse_iterator (end ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator rend () {
+ return reverse_iterator (begin ());
+ }
+
+ private:
+ void storage_invariants () const
+ {
+ BOOST_UBLAS_CHECK (capacity_ == index_data_.size (), internal_logic ());
+ BOOST_UBLAS_CHECK (capacity_ == value_data_.size (), internal_logic ());
+ BOOST_UBLAS_CHECK (filled_ <= capacity_, internal_logic ());
+ }
+
+ size_type size_;
+ typename index_array_type::size_type capacity_;
+ typename index_array_type::size_type filled_;
+ index_array_type index_data_;
+ value_array_type value_data_;
+ static const value_type zero_;
+
+ BOOST_UBLAS_INLINE
+ static size_type zero_based (size_type k_based_index) {
+ return k_based_index - IB;
+ }
+ BOOST_UBLAS_INLINE
+ static size_type k_based (size_type zero_based_index) {
+ return zero_based_index + IB;
+ }
+
+ friend class iterator;
+ friend class const_iterator;
+ };
+
+ template<class T, std::size_t IB, class IA, class TA>
+ const typename compressed_vector<T, IB, IA, TA>::value_type compressed_vector<T, IB, IA, TA>::zero_ = value_type/*zero*/();
+
+
+ // Coordimate array based sparse vector class
+ // Thanks to Kresimir Fresl for extending this to cover different index bases.
+ template<class T, std::size_t IB, class IA, class TA>
+ class coordinate_vector:
+ public vector_container<coordinate_vector<T, IB, IA, TA> > {
+
+ typedef T &true_reference;
+ typedef T *pointer;
+ typedef const T *const_pointer;
+ typedef coordinate_vector<T, IB, IA, TA> self_type;
+ public:
+#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
+ using vector_container<self_type>::operator ();
+#endif
+ // ISSUE require type consistency check
+ // is_convertable (IA::size_type, TA::size_type)
+ typedef typename IA::value_type size_type;
+ typedef typename IA::difference_type difference_type;
+ typedef T value_type;
+ typedef const T &const_reference;
+#ifndef BOOST_UBLAS_STRICT_VECTOR_SPARSE
+ typedef T &reference;
+#else
+ typedef sparse_vector_element<self_type> reference;
+#endif
+ typedef IA index_array_type;
+ typedef TA value_array_type;
+ typedef const vector_reference<const self_type> const_closure_type;
+ typedef vector_reference<self_type> closure_type;
+ typedef self_type vector_temporary_type;
+ typedef sparse_tag storage_category;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ coordinate_vector ():
+ vector_container<self_type> (),
+ size_ (0), capacity_ (restrict_capacity (0)),
+ filled_ (0), sorted_filled_ (filled_), sorted_ (true),
+ index_data_ (capacity_), value_data_ (capacity_) {
+ storage_invariants ();
+ }
+ explicit BOOST_UBLAS_INLINE
+ coordinate_vector (size_type size, size_type non_zeros = 0):
+ vector_container<self_type> (),
+ size_ (size), capacity_ (restrict_capacity (non_zeros)),
+ filled_ (0), sorted_filled_ (filled_), sorted_ (true),
+ index_data_ (capacity_), value_data_ (capacity_) {
+ storage_invariants ();
+ }
+ BOOST_UBLAS_INLINE
+ coordinate_vector (const coordinate_vector &v):
+ vector_container<self_type> (),
+ size_ (v.size_), capacity_ (v.capacity_),
+ filled_ (v.filled_), sorted_filled_ (v.sorted_filled_), sorted_ (v.sorted_),
+ index_data_ (v.index_data_), value_data_ (v.value_data_) {
+ storage_invariants ();
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ coordinate_vector (const vector_expression<AE> &ae, size_type non_zeros = 0):
+ vector_container<self_type> (),
+ size_ (ae ().size ()), capacity_ (restrict_capacity (non_zeros)),
+ filled_ (0), sorted_filled_ (filled_), sorted_ (true),
+ index_data_ (capacity_), value_data_ (capacity_) {
+ storage_invariants ();
+ vector_assign<scalar_assign> (*this, ae);
+ }
+
+ // Accessors
+ BOOST_UBLAS_INLINE
+ size_type size () const {
+ return size_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type nnz_capacity () const {
+ return capacity_;
+ }
+ BOOST_UBLAS_INLINE
+ size_type nnz () const {
+ return filled_;
+ }
+
+ // Storage accessors
+ BOOST_UBLAS_INLINE
+ static size_type index_base () {
+ return IB;
+ }
+ BOOST_UBLAS_INLINE
+ typename index_array_type::size_type filled () const {
+ return filled_;
+ }
+ BOOST_UBLAS_INLINE
+ const index_array_type &index_data () const {
+ return index_data_;
+ }
+ BOOST_UBLAS_INLINE
+ const value_array_type &value_data () const {
+ return value_data_;
+ }
+ BOOST_UBLAS_INLINE
+ void set_filled (const typename index_array_type::size_type &sorted, const typename index_array_type::size_type &filled) {
+ sorted_filled_ = sorted;
+ filled_ = filled;
+ storage_invariants ();
+ return filled_;
+ }
+ BOOST_UBLAS_INLINE
+ index_array_type &index_data () {
+ return index_data_;
+ }
+ BOOST_UBLAS_INLINE
+ value_array_type &value_data () {
+ return value_data_;
+ }
+
+ // Resizing
+ private:
+ BOOST_UBLAS_INLINE
+ size_type restrict_capacity (size_type non_zeros) const {
+ // minimum non_zeros
+ non_zeros = (std::max) (non_zeros, size_type (1));
+ // ISSUE no maximum as coordinate may contain inserted duplicates
+ return non_zeros;
+ }
+ public:
+ BOOST_UBLAS_INLINE
+ void resize (size_type size, bool preserve = true) {
+ if (preserve)
+ sort (); // remove duplicate elements.
+ capacity_ = restrict_capacity (capacity_);
+ if (preserve) {
+ index_data_. resize (capacity_, size_type ());
+ value_data_. resize (capacity_, value_type ());
+ filled_ = (std::min) (capacity_, filled_);
+ }
+ else {
+ index_data_. resize (capacity_);
+ value_data_. resize (capacity_);
+ filled_ = 0;
+ }
+ sorted_filled_ = filled_;
+ size_ = size;
+ storage_invariants ();
+ }
+ // Reserving
+ BOOST_UBLAS_INLINE
+ void reserve (size_type non_zeros, bool preserve = true) {
+ if (preserve)
+ sort (); // remove duplicate elements.
+ capacity_ = restrict_capacity (non_zeros);
+ if (preserve) {
+ index_data_. resize (capacity_, size_type ());
+ value_data_. resize (capacity_, value_type ());
+ filled_ = (std::min) (capacity_, filled_);
+ }
+ else {
+ index_data_. resize (capacity_);
+ value_data_. resize (capacity_);
+ filled_ = 0;
+ }
+ sorted_filled_ = filled_;
+ storage_invariants ();
+ }
+
+ // Element support
+ BOOST_UBLAS_INLINE
+ pointer find_element (size_type i) {
+ return const_cast<pointer> (const_cast<const self_type&>(*this).find_element (i));
+ }
+ BOOST_UBLAS_INLINE
+ const_pointer find_element (size_type i) const {
+ sort ();
+ const_subiterator_type it (detail::lower_bound (index_data_.begin (), index_data_.begin () + filled_, k_based (i), std::less<size_type> ()));
+ if (it == index_data_.begin () + filled_ || *it != k_based (i))
+ return 0;
+ return &value_data_ [it - index_data_.begin ()];
+ }
+
+ // Element access
+ BOOST_UBLAS_INLINE
+ const_reference operator () (size_type i) const {
+ BOOST_UBLAS_CHECK (i < size_, bad_index ());
+ sort ();
+ const_subiterator_type it (detail::lower_bound (index_data_.begin (), index_data_.begin () + filled_, k_based (i), std::less<size_type> ()));
+ if (it == index_data_.begin () + filled_ || *it != k_based (i))
+ return zero_;
+ return value_data_ [it - index_data_.begin ()];
+ }
+ BOOST_UBLAS_INLINE
+ true_reference ref (size_type i) {
+ BOOST_UBLAS_CHECK (i < size_, bad_index ());
+ sort ();
+ subiterator_type it (detail::lower_bound (index_data_.begin (), index_data_.begin () + filled_, k_based (i), std::less<size_type> ()));
+ if (it == index_data_.begin () + filled_ || *it != k_based (i))
+ return insert_element (i, value_type/*zero*/());
+ else
+ return value_data_ [it - index_data_.begin ()];
+ }
+ BOOST_UBLAS_INLINE
+ reference operator () (size_type i) {
+#ifndef BOOST_UBLAS_STRICT_VECTOR_SPARSE
+ return ref (i);
+#else
+ BOOST_UBLAS_CHECK (i < size_, bad_index ());
+ return reference (*this, i);
+#endif
+ }
+
+ BOOST_UBLAS_INLINE
+ const_reference operator [] (size_type i) const {
+ return (*this) (i);
+ }
+ BOOST_UBLAS_INLINE
+ reference operator [] (size_type i) {
+ return (*this) (i);
+ }
+
+ // Element assignment
+ BOOST_UBLAS_INLINE
+ void append_element (size_type i, const_reference t) {
+ if (filled_ >= capacity_)
+ reserve (2 * filled_, true);
+ BOOST_UBLAS_CHECK (filled_ < capacity_, internal_logic ());
+ index_data_ [filled_] = k_based (i);
+ value_data_ [filled_] = t;
+ ++ filled_;
+ sorted_ = false;
+ storage_invariants ();
+ }
+ BOOST_UBLAS_INLINE
+ true_reference insert_element (size_type i, const_reference t) {
+ BOOST_UBLAS_CHECK (!find_element (i), bad_index ()); // duplicate element
+ append_element (i, t);
+ return value_data_ [filled_ - 1];
+ }
+ BOOST_UBLAS_INLINE
+ void erase_element (size_type i) {
+ sort ();
+ subiterator_type it (detail::lower_bound (index_data_.begin (), index_data_.begin () + filled_, k_based (i), std::less<size_type> ()));
+ typename std::iterator_traits<subiterator_type>::difference_type n = it - index_data_.begin ();
+ if (filled_ > typename index_array_type::size_type (n) && *it == k_based (i)) {
+ std::copy (it + 1, index_data_.begin () + filled_, it);
+ typename value_array_type::iterator itt (value_data_.begin () + n);
+ std::copy (itt + 1, value_data_.begin () + filled_, itt);
+ -- filled_;
+ sorted_filled_ = filled_;
+ }
+ storage_invariants ();
+ }
+
+ // Zeroing
+ BOOST_UBLAS_INLINE
+ void clear () {
+ filled_ = 0;
+ sorted_filled_ = filled_;
+ sorted_ = true;
+ storage_invariants ();
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ coordinate_vector &operator = (const coordinate_vector &v) {
+ if (this != &v) {
+ size_ = v.size_;
+ capacity_ = v.capacity_;
+ filled_ = v.filled_;
+ sorted_filled_ = v.sorted_filled_;
+ sorted_ = v.sorted_;
+ index_data_ = v.index_data_;
+ value_data_ = v.value_data_;
+ }
+ storage_invariants ();
+ return *this;
+ }
+ template<class C> // Container assignment without temporary
+ BOOST_UBLAS_INLINE
+ coordinate_vector &operator = (const vector_container<C> &v) {
+ resize (v ().size (), false);
+ assign (v);
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ coordinate_vector &assign_temporary (coordinate_vector &v) {
+ swap (v);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ coordinate_vector &operator = (const vector_expression<AE> &ae) {
+ self_type temporary (ae, capacity_);
+ return assign_temporary (temporary);
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ coordinate_vector &assign (const vector_expression<AE> &ae) {
+ vector_assign<scalar_assign> (*this, ae);
+ return *this;
+ }
+
+ // Computed assignment
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ coordinate_vector &operator += (const vector_expression<AE> &ae) {
+ self_type temporary (*this + ae, capacity_);
+ return assign_temporary (temporary);
+ }
+ template<class C> // Container assignment without temporary
+ BOOST_UBLAS_INLINE
+ coordinate_vector &operator += (const vector_container<C> &v) {
+ plus_assign (v);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ coordinate_vector &plus_assign (const vector_expression<AE> &ae) {
+ vector_assign<scalar_plus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ coordinate_vector &operator -= (const vector_expression<AE> &ae) {
+ self_type temporary (*this - ae, capacity_);
+ return assign_temporary (temporary);
+ }
+ template<class C> // Container assignment without temporary
+ BOOST_UBLAS_INLINE
+ coordinate_vector &operator -= (const vector_container<C> &v) {
+ minus_assign (v);
+ return *this;
+ }
+ template<class AE>
+ BOOST_UBLAS_INLINE
+ coordinate_vector &minus_assign (const vector_expression<AE> &ae) {
+ vector_assign<scalar_minus_assign> (*this, ae);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ coordinate_vector &operator *= (const AT &at) {
+ vector_assign_scalar<scalar_multiplies_assign> (*this, at);
+ return *this;
+ }
+ template<class AT>
+ BOOST_UBLAS_INLINE
+ coordinate_vector &operator /= (const AT &at) {
+ vector_assign_scalar<scalar_divides_assign> (*this, at);
+ return *this;
+ }
+
+ // Swapping
+ BOOST_UBLAS_INLINE
+ void swap (coordinate_vector &v) {
+ if (this != &v) {
+ std::swap (size_, v.size_);
+ std::swap (capacity_, v.capacity_);
+ std::swap (filled_, v.filled_);
+ std::swap (sorted_filled_, v.sorted_filled_);
+ std::swap (sorted_, v.sorted_);
+ index_data_.swap (v.index_data_);
+ value_data_.swap (v.value_data_);
+ }
+ storage_invariants ();
+ }
+ BOOST_UBLAS_INLINE
+ friend void swap (coordinate_vector &v1, coordinate_vector &v2) {
+ v1.swap (v2);
+ }
+
+ // Sorting and summation of duplicates
+ BOOST_UBLAS_INLINE
+ void sort () const {
+ if (! sorted_ && filled_ > 0) {
+ typedef index_pair_array<index_array_type, value_array_type> array_pair;
+ array_pair ipa (filled_, index_data_, value_data_);
+ const typename array_pair::iterator iunsorted = ipa.begin () + sorted_filled_;
+ // sort new elements and merge
+ std::sort (iunsorted, ipa.end ());
+ std::inplace_merge (ipa.begin (), iunsorted, ipa.end ());
+
+ // sum duplicates with += and remove
+ size_type filled = 0;
+ for (size_type i = 1; i < filled_; ++ i) {
+ if (index_data_ [filled] != index_data_ [i]) {
+ ++ filled;
+ if (filled != i) {
+ index_data_ [filled] = index_data_ [i];
+ value_data_ [filled] = value_data_ [i];
+ }
+ } else {
+ value_data_ [filled] += value_data_ [i];
+ }
+ }
+ filled_ = filled + 1;
+ sorted_filled_ = filled_;
+ sorted_ = true;
+ storage_invariants ();
+ }
+ }
+
+ // Back element insertion and erasure
+ BOOST_UBLAS_INLINE
+ void push_back (size_type i, const_reference t) {
+ // must maintain sort order
+ BOOST_UBLAS_CHECK (sorted_ && (filled_ == 0 || index_data_ [filled_ - 1] < k_based (i)), external_logic ());
+ if (filled_ >= capacity_)
+ reserve (2 * filled_, true);
+ BOOST_UBLAS_CHECK (filled_ < capacity_, internal_logic ());
+ index_data_ [filled_] = k_based (i);
+ value_data_ [filled_] = t;
+ ++ filled_;
+ sorted_filled_ = filled_;
+ storage_invariants ();
+ }
+ BOOST_UBLAS_INLINE
+ void pop_back () {
+ // ISSUE invariants could be simpilfied if sorted required as precondition
+ BOOST_UBLAS_CHECK (filled_ > 0, external_logic ());
+ -- filled_;
+ sorted_filled_ = (std::min) (sorted_filled_, filled_);
+ sorted_ = sorted_filled_ = filled_;
+ storage_invariants ();
+ }
+
+ // Iterator types
+ private:
+ // Use index array iterator
+ typedef typename IA::const_iterator const_subiterator_type;
+ typedef typename IA::iterator subiterator_type;
+
+ BOOST_UBLAS_INLINE
+ true_reference at_element (size_type i) {
+ BOOST_UBLAS_CHECK (i < size_, bad_index ());
+ sort ();
+ subiterator_type it (detail::lower_bound (index_data_.begin (), index_data_.begin () + filled_, k_based (i), std::less<size_type> ()));
+ BOOST_UBLAS_CHECK (it != index_data_.begin () + filled_ && *it == k_based (i), bad_index ());
+ return value_data_ [it - index_data_.begin ()];
+ }
+
+ public:
+ class const_iterator;
+ class iterator;
+
+ // Element lookup
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ const_iterator find (size_type i) const {
+ sort ();
+ return const_iterator (*this, detail::lower_bound (index_data_.begin (), index_data_.begin () + filled_, k_based (i), std::less<size_type> ()));
+ }
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
+ iterator find (size_type i) {
+ sort ();
+ return iterator (*this, detail::lower_bound (index_data_.begin (), index_data_.begin () + filled_, k_based (i), std::less<size_type> ()));
+ }
+
+
+ class const_iterator:
+ public container_const_reference<coordinate_vector>,
+ public bidirectional_iterator_base<sparse_bidirectional_iterator_tag,
+ const_iterator, value_type> {
+ public:
+ typedef typename coordinate_vector::value_type value_type;
+ typedef typename coordinate_vector::difference_type difference_type;
+ typedef typename coordinate_vector::const_reference reference;
+ typedef const typename coordinate_vector::pointer pointer;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ const_iterator ():
+ container_const_reference<self_type> (), it_ () {}
+ BOOST_UBLAS_INLINE
+ const_iterator (const self_type &v, const const_subiterator_type &it):
+ container_const_reference<self_type> (v), it_ (it) {}
+ BOOST_UBLAS_INLINE
+ const_iterator (const typename self_type::iterator &it): // ISSUE self_type:: stops VC8 using std::iterator here
+ container_const_reference<self_type> (it ()), it_ (it.it_) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ const_iterator &operator ++ () {
+ ++ it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator &operator -- () {
+ -- it_;
+ return *this;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ const_reference operator * () const {
+ BOOST_UBLAS_CHECK (index () < (*this) ().size (), bad_index ());
+ return (*this) ().value_data_ [it_ - (*this) ().index_data_.begin ()];
+ }
+
+ // Index
+ BOOST_UBLAS_INLINE
+ size_type index () const {
+ BOOST_UBLAS_CHECK (*this != (*this) ().end (), bad_index ());
+ BOOST_UBLAS_CHECK ((*this) ().zero_based (*it_) < (*this) ().size (), bad_index ());
+ return (*this) ().zero_based (*it_);
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ const_iterator &operator = (const const_iterator &it) {
+ container_const_reference<self_type>::assign (&it ());
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const const_iterator &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it_ == it.it_;
+ }
+
+ private:
+ const_subiterator_type it_;
+ };
+
+ BOOST_UBLAS_INLINE
+ const_iterator begin () const {
+ return find (0);
+ }
+ BOOST_UBLAS_INLINE
+ const_iterator end () const {
+ return find (size_);
+ }
+
+ class iterator:
+ public container_reference<coordinate_vector>,
+ public bidirectional_iterator_base<sparse_bidirectional_iterator_tag,
+ iterator, value_type> {
+ public:
+ typedef typename coordinate_vector::value_type value_type;
+ typedef typename coordinate_vector::difference_type difference_type;
+ typedef typename coordinate_vector::true_reference reference;
+ typedef typename coordinate_vector::pointer pointer;
+
+ // Construction and destruction
+ BOOST_UBLAS_INLINE
+ iterator ():
+ container_reference<self_type> (), it_ () {}
+ BOOST_UBLAS_INLINE
+ iterator (self_type &v, const subiterator_type &it):
+ container_reference<self_type> (v), it_ (it) {}
+
+ // Arithmetic
+ BOOST_UBLAS_INLINE
+ iterator &operator ++ () {
+ ++ it_;
+ return *this;
+ }
+ BOOST_UBLAS_INLINE
+ iterator &operator -- () {
+ -- it_;
+ return *this;
+ }
+
+ // Dereference
+ BOOST_UBLAS_INLINE
+ reference operator * () const {
+ BOOST_UBLAS_CHECK (index () < (*this) ().size (), bad_index ());
+ return (*this) ().value_data_ [it_ - (*this) ().index_data_.begin ()];
+ }
+
+ // Index
+ BOOST_UBLAS_INLINE
+ size_type index () const {
+ BOOST_UBLAS_CHECK (*this != (*this) ().end (), bad_index ());
+ BOOST_UBLAS_CHECK ((*this) ().zero_based (*it_) < (*this) ().size (), bad_index ());
+ return (*this) ().zero_based (*it_);
+ }
+
+ // Assignment
+ BOOST_UBLAS_INLINE
+ iterator &operator = (const iterator &it) {
+ container_reference<self_type>::assign (&it ());
+ it_ = it.it_;
+ return *this;
+ }
+
+ // Comparison
+ BOOST_UBLAS_INLINE
+ bool operator == (const iterator &it) const {
+ BOOST_UBLAS_CHECK (&(*this) () == &it (), external_logic ());
+ return it_ == it.it_;
+ }
+
+ private:
+ subiterator_type it_;
+
+ friend class const_iterator;
+ };
+
+ BOOST_UBLAS_INLINE
+ iterator begin () {
+ return find (0);
+ }
+ BOOST_UBLAS_INLINE
+ iterator end () {
+ return find (size_);
+ }
+
+ // Reverse iterator
+ typedef reverse_iterator_base<const_iterator> const_reverse_iterator;
+ typedef reverse_iterator_base<iterator> reverse_iterator;
+
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rbegin () const {
+ return const_reverse_iterator (end ());
+ }
+ BOOST_UBLAS_INLINE
+ const_reverse_iterator rend () const {
+ return const_reverse_iterator (begin ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator rbegin () {
+ return reverse_iterator (end ());
+ }
+ BOOST_UBLAS_INLINE
+ reverse_iterator rend () {
+ return reverse_iterator (begin ());
+ }
+
+ private:
+ void storage_invariants () const
+ {
+ BOOST_UBLAS_CHECK (capacity_ == index_data_.size (), internal_logic ());
+ BOOST_UBLAS_CHECK (capacity_ == value_data_.size (), internal_logic ());
+ BOOST_UBLAS_CHECK (filled_ <= capacity_, internal_logic ());
+ BOOST_UBLAS_CHECK (sorted_filled_ <= filled_, internal_logic ());
+ BOOST_UBLAS_CHECK (sorted_ == (sorted_filled_ == filled_), internal_logic ());
+ }
+
+ size_type size_;
+ size_type capacity_;
+ mutable typename index_array_type::size_type filled_;
+ mutable typename index_array_type::size_type sorted_filled_;
+ mutable bool sorted_;
+ mutable index_array_type index_data_;
+ mutable value_array_type value_data_;
+ static const value_type zero_;
+
+ BOOST_UBLAS_INLINE
+ static size_type zero_based (size_type k_based_index) {
+ return k_based_index - IB;
+ }
+ BOOST_UBLAS_INLINE
+ static size_type k_based (size_type zero_based_index) {
+ return zero_based_index + IB;
+ }
+
+ friend class iterator;
+ friend class const_iterator;
+ };
+
+ template<class T, std::size_t IB, class IA, class TA>
+ const typename coordinate_vector<T, IB, IA, TA>::value_type coordinate_vector<T, IB, IA, TA>::zero_ = value_type/*zero*/();
+
+}}}
+
+#endif
diff --git a/boost/boost/operators.hpp b/boost/boost/operators.hpp
new file mode 100644
index 00000000000..b3b1bd72a46
--- /dev/null
+++ b/boost/boost/operators.hpp
@@ -0,0 +1,943 @@
+// Boost operators.hpp header file ----------------------------------------//
+
+// (C) Copyright David Abrahams, Jeremy Siek, Daryle Walker 1999-2001.
+// 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/utility/operators.htm for documentation.
+
+// Revision History
+// 24 May 07 Changed empty_base to depend on T, see
+// http://svn.boost.org/trac/boost/ticket/979
+// 21 Oct 02 Modified implementation of operators to allow compilers with a
+// correct named return value optimization (NRVO) to produce optimal
+// code. (Daniel Frey)
+// 02 Dec 01 Bug fixed in random_access_iteratable. (Helmut Zeisel)
+// 28 Sep 01 Factored out iterator operator groups. (Daryle Walker)
+// 27 Aug 01 'left' form for non commutative operators added;
+// additional classes for groups of related operators added;
+// workaround for empty base class optimization
+// bug of GCC 3.0 (Helmut Zeisel)
+// 25 Jun 01 output_iterator_helper changes: removed default template
+// parameters, added support for self-proxying, additional
+// documentation and tests (Aleksey Gurtovoy)
+// 29 May 01 Added operator classes for << and >>. Added input and output
+// iterator helper classes. Added classes to connect equality and
+// relational operators. Added classes for groups of related
+// operators. Reimplemented example operator and iterator helper
+// classes in terms of the new groups. (Daryle Walker, with help
+// from Alexy Gurtovoy)
+// 11 Feb 01 Fixed bugs in the iterator helpers which prevented explicitly
+// supplied arguments from actually being used (Dave Abrahams)
+// 04 Jul 00 Fixed NO_OPERATORS_IN_NAMESPACE bugs, major cleanup and
+// refactoring of compiler workarounds, additional documentation
+// (Alexy Gurtovoy and Mark Rodgers with some help and prompting from
+// Dave Abrahams)
+// 28 Jun 00 General cleanup and integration of bugfixes from Mark Rodgers and
+// Jeremy Siek (Dave Abrahams)
+// 20 Jun 00 Changes to accommodate Borland C++Builder 4 and Borland C++ 5.5
+// (Mark Rodgers)
+// 20 Jun 00 Minor fixes to the prior revision (Aleksey Gurtovoy)
+// 10 Jun 00 Support for the base class chaining technique was added
+// (Aleksey Gurtovoy). See documentation and the comments below
+// for the details.
+// 12 Dec 99 Initial version with iterator operators (Jeremy Siek)
+// 18 Nov 99 Change name "divideable" to "dividable", remove unnecessary
+// specializations of dividable, subtractable, modable (Ed Brey)
+// 17 Nov 99 Add comments (Beman Dawes)
+// Remove unnecessary specialization of operators<> (Ed Brey)
+// 15 Nov 99 Fix less_than_comparable<T,U> second operand type for first two
+// operators.(Beman Dawes)
+// 12 Nov 99 Add operators templates (Ed Brey)
+// 11 Nov 99 Add single template parameter version for compilers without
+// partial specialization (Beman Dawes)
+// 10 Nov 99 Initial version
+
+// 10 Jun 00:
+// An additional optional template parameter was added to most of
+// operator templates to support the base class chaining technique (see
+// documentation for the details). Unfortunately, a straightforward
+// implementation of this change would have broken compatibility with the
+// previous version of the library by making it impossible to use the same
+// template name (e.g. 'addable') for both the 1- and 2-argument versions of
+// an operator template. This implementation solves the backward-compatibility
+// issue at the cost of some simplicity.
+//
+// One of the complications is an existence of special auxiliary class template
+// 'is_chained_base<>' (see 'detail' namespace below), which is used
+// to determine whether its template parameter is a library's operator template
+// or not. You have to specialize 'is_chained_base<>' for each new
+// operator template you add to the library.
+//
+// However, most of the non-trivial implementation details are hidden behind
+// several local macros defined below, and as soon as you understand them,
+// you understand the whole library implementation.
+
+#ifndef BOOST_OPERATORS_HPP
+#define BOOST_OPERATORS_HPP
+
+#include <boost/config.hpp>
+#include <boost/iterator.hpp>
+#include <boost/detail/workaround.hpp>
+
+#if defined(__sgi) && !defined(__GNUC__)
+# pragma set woff 1234
+#endif
+
+#if defined(BOOST_MSVC)
+# pragma warning( disable : 4284 ) // complaint about return type of
+#endif // operator-> not begin a UDT
+
+namespace boost {
+namespace detail {
+
+template <typename T> class empty_base {
+
+// Helmut Zeisel, empty base class optimization bug with GCC 3.0.0
+#if defined(__GNUC__) && __GNUC__==3 && __GNUC_MINOR__==0 && __GNU_PATCHLEVEL__==0
+ bool dummy;
+#endif
+
+};
+
+} // namespace detail
+} // namespace boost
+
+// In this section we supply the xxxx1 and xxxx2 forms of the operator
+// templates, which are explicitly targeted at the 1-type-argument and
+// 2-type-argument operator forms, respectively. Some compilers get confused
+// when inline friend functions are overloaded in namespaces other than the
+// global namespace. When BOOST_NO_OPERATORS_IN_NAMESPACE is defined, all of
+// these templates must go in the global namespace.
+
+#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE
+namespace boost
+{
+#endif
+
+// Basic operator classes (contributed by Dave Abrahams) ------------------//
+
+// Note that friend functions defined in a class are implicitly inline.
+// See the C++ std, 11.4 [class.friend] paragraph 5
+
+template <class T, class U, class B = ::boost::detail::empty_base<T> >
+struct less_than_comparable2 : B
+{
+ friend bool operator<=(const T& x, const U& y) { return !(x > y); }
+ friend bool operator>=(const T& x, const U& y) { return !(x < y); }
+ friend bool operator>(const U& x, const T& y) { return y < x; }
+ friend bool operator<(const U& x, const T& y) { return y > x; }
+ friend bool operator<=(const U& x, const T& y) { return !(y < x); }
+ friend bool operator>=(const U& x, const T& y) { return !(y > x); }
+};
+
+template <class T, class B = ::boost::detail::empty_base<T> >
+struct less_than_comparable1 : B
+{
+ friend bool operator>(const T& x, const T& y) { return y < x; }
+ friend bool operator<=(const T& x, const T& y) { return !(y < x); }
+ friend bool operator>=(const T& x, const T& y) { return !(x < y); }
+};
+
+template <class T, class U, class B = ::boost::detail::empty_base<T> >
+struct equality_comparable2 : B
+{
+ friend bool operator==(const U& y, const T& x) { return x == y; }
+ friend bool operator!=(const U& y, const T& x) { return !(x == y); }
+ friend bool operator!=(const T& y, const U& x) { return !(y == x); }
+};
+
+template <class T, class B = ::boost::detail::empty_base<T> >
+struct equality_comparable1 : B
+{
+ friend bool operator!=(const T& x, const T& y) { return !(x == y); }
+};
+
+// A macro which produces "name_2left" from "name".
+#define BOOST_OPERATOR2_LEFT(name) name##2##_##left
+
+// NRVO-friendly implementation (contributed by Daniel Frey) ---------------//
+
+#if defined(BOOST_HAS_NRVO) || defined(BOOST_FORCE_SYMMETRIC_OPERATORS)
+
+// This is the optimal implementation for ISO/ANSI C++,
+// but it requires the compiler to implement the NRVO.
+// If the compiler has no NRVO, this is the best symmetric
+// implementation available.
+
+#define BOOST_BINARY_OPERATOR_COMMUTATIVE( NAME, OP ) \
+template <class T, class U, class B = ::boost::detail::empty_base<T> > \
+struct NAME##2 : B \
+{ \
+ friend T operator OP( const T& lhs, const U& rhs ) \
+ { T nrv( lhs ); nrv OP##= rhs; return nrv; } \
+ friend T operator OP( const U& lhs, const T& rhs ) \
+ { T nrv( rhs ); nrv OP##= lhs; return nrv; } \
+}; \
+ \
+template <class T, class B = ::boost::detail::empty_base<T> > \
+struct NAME##1 : B \
+{ \
+ friend T operator OP( const T& lhs, const T& rhs ) \
+ { T nrv( lhs ); nrv OP##= rhs; return nrv; } \
+};
+
+#define BOOST_BINARY_OPERATOR_NON_COMMUTATIVE( NAME, OP ) \
+template <class T, class U, class B = ::boost::detail::empty_base<T> > \
+struct NAME##2 : B \
+{ \
+ friend T operator OP( const T& lhs, const U& rhs ) \
+ { T nrv( lhs ); nrv OP##= rhs; return nrv; } \
+}; \
+ \
+template <class T, class U, class B = ::boost::detail::empty_base<T> > \
+struct BOOST_OPERATOR2_LEFT(NAME) : B \
+{ \
+ friend T operator OP( const U& lhs, const T& rhs ) \
+ { T nrv( lhs ); nrv OP##= rhs; return nrv; } \
+}; \
+ \
+template <class T, class B = ::boost::detail::empty_base<T> > \
+struct NAME##1 : B \
+{ \
+ friend T operator OP( const T& lhs, const T& rhs ) \
+ { T nrv( lhs ); nrv OP##= rhs; return nrv; } \
+};
+
+#else // defined(BOOST_HAS_NRVO) || defined(BOOST_FORCE_SYMMETRIC_OPERATORS)
+
+// For compilers without NRVO the following code is optimal, but not
+// symmetric! Note that the implementation of
+// BOOST_OPERATOR2_LEFT(NAME) only looks cool, but doesn't provide
+// optimization opportunities to the compiler :)
+
+#define BOOST_BINARY_OPERATOR_COMMUTATIVE( NAME, OP ) \
+template <class T, class U, class B = ::boost::detail::empty_base<T> > \
+struct NAME##2 : B \
+{ \
+ friend T operator OP( T lhs, const U& rhs ) { return lhs OP##= rhs; } \
+ friend T operator OP( const U& lhs, T rhs ) { return rhs OP##= lhs; } \
+}; \
+ \
+template <class T, class B = ::boost::detail::empty_base<T> > \
+struct NAME##1 : B \
+{ \
+ friend T operator OP( T lhs, const T& rhs ) { return lhs OP##= rhs; } \
+};
+
+#define BOOST_BINARY_OPERATOR_NON_COMMUTATIVE( NAME, OP ) \
+template <class T, class U, class B = ::boost::detail::empty_base<T> > \
+struct NAME##2 : B \
+{ \
+ friend T operator OP( T lhs, const U& rhs ) { return lhs OP##= rhs; } \
+}; \
+ \
+template <class T, class U, class B = ::boost::detail::empty_base<T> > \
+struct BOOST_OPERATOR2_LEFT(NAME) : B \
+{ \
+ friend T operator OP( const U& lhs, const T& rhs ) \
+ { return T( lhs ) OP##= rhs; } \
+}; \
+ \
+template <class T, class B = ::boost::detail::empty_base<T> > \
+struct NAME##1 : B \
+{ \
+ friend T operator OP( T lhs, const T& rhs ) { return lhs OP##= rhs; } \
+};
+
+#endif // defined(BOOST_HAS_NRVO) || defined(BOOST_FORCE_SYMMETRIC_OPERATORS)
+
+BOOST_BINARY_OPERATOR_COMMUTATIVE( multipliable, * )
+BOOST_BINARY_OPERATOR_COMMUTATIVE( addable, + )
+BOOST_BINARY_OPERATOR_NON_COMMUTATIVE( subtractable, - )
+BOOST_BINARY_OPERATOR_NON_COMMUTATIVE( dividable, / )
+BOOST_BINARY_OPERATOR_NON_COMMUTATIVE( modable, % )
+BOOST_BINARY_OPERATOR_COMMUTATIVE( xorable, ^ )
+BOOST_BINARY_OPERATOR_COMMUTATIVE( andable, & )
+BOOST_BINARY_OPERATOR_COMMUTATIVE( orable, | )
+
+#undef BOOST_BINARY_OPERATOR_COMMUTATIVE
+#undef BOOST_BINARY_OPERATOR_NON_COMMUTATIVE
+#undef BOOST_OPERATOR2_LEFT
+
+// incrementable and decrementable contributed by Jeremy Siek
+
+template <class T, class B = ::boost::detail::empty_base<T> >
+struct incrementable : B
+{
+ friend T operator++(T& x, int)
+ {
+ incrementable_type nrv(x);
+ ++x;
+ return nrv;
+ }
+private: // The use of this typedef works around a Borland bug
+ typedef T incrementable_type;
+};
+
+template <class T, class B = ::boost::detail::empty_base<T> >
+struct decrementable : B
+{
+ friend T operator--(T& x, int)
+ {
+ decrementable_type nrv(x);
+ --x;
+ return nrv;
+ }
+private: // The use of this typedef works around a Borland bug
+ typedef T decrementable_type;
+};
+
+// Iterator operator classes (contributed by Jeremy Siek) ------------------//
+
+template <class T, class P, class B = ::boost::detail::empty_base<T> >
+struct dereferenceable : B
+{
+ P operator->() const
+ {
+ return &*static_cast<const T&>(*this);
+ }
+};
+
+template <class T, class I, class R, class B = ::boost::detail::empty_base<T> >
+struct indexable : B
+{
+ R operator[](I n) const
+ {
+ return *(static_cast<const T&>(*this) + n);
+ }
+};
+
+// More operator classes (contributed by Daryle Walker) --------------------//
+// (NRVO-friendly implementation contributed by Daniel Frey) ---------------//
+
+#if defined(BOOST_HAS_NRVO) || defined(BOOST_FORCE_SYMMETRIC_OPERATORS)
+
+#define BOOST_BINARY_OPERATOR( NAME, OP ) \
+template <class T, class U, class B = ::boost::detail::empty_base<T> > \
+struct NAME##2 : B \
+{ \
+ friend T operator OP( const T& lhs, const U& rhs ) \
+ { T nrv( lhs ); nrv OP##= rhs; return nrv; } \
+}; \
+ \
+template <class T, class B = ::boost::detail::empty_base<T> > \
+struct NAME##1 : B \
+{ \
+ friend T operator OP( const T& lhs, const T& rhs ) \
+ { T nrv( lhs ); nrv OP##= rhs; return nrv; } \
+};
+
+#else // defined(BOOST_HAS_NRVO) || defined(BOOST_FORCE_SYMMETRIC_OPERATORS)
+
+#define BOOST_BINARY_OPERATOR( NAME, OP ) \
+template <class T, class U, class B = ::boost::detail::empty_base<T> > \
+struct NAME##2 : B \
+{ \
+ friend T operator OP( T lhs, const U& rhs ) { return lhs OP##= rhs; } \
+}; \
+ \
+template <class T, class B = ::boost::detail::empty_base<T> > \
+struct NAME##1 : B \
+{ \
+ friend T operator OP( T lhs, const T& rhs ) { return lhs OP##= rhs; } \
+};
+
+#endif // defined(BOOST_HAS_NRVO) || defined(BOOST_FORCE_SYMMETRIC_OPERATORS)
+
+BOOST_BINARY_OPERATOR( left_shiftable, << )
+BOOST_BINARY_OPERATOR( right_shiftable, >> )
+
+#undef BOOST_BINARY_OPERATOR
+
+template <class T, class U, class B = ::boost::detail::empty_base<T> >
+struct equivalent2 : B
+{
+ friend bool operator==(const T& x, const U& y)
+ {
+ return !(x < y) && !(x > y);
+ }
+};
+
+template <class T, class B = ::boost::detail::empty_base<T> >
+struct equivalent1 : B
+{
+ friend bool operator==(const T&x, const T&y)
+ {
+ return !(x < y) && !(y < x);
+ }
+};
+
+template <class T, class U, class B = ::boost::detail::empty_base<T> >
+struct partially_ordered2 : B
+{
+ friend bool operator<=(const T& x, const U& y)
+ { return (x < y) || (x == y); }
+ friend bool operator>=(const T& x, const U& y)
+ { return (x > y) || (x == y); }
+ friend bool operator>(const U& x, const T& y)
+ { return y < x; }
+ friend bool operator<(const U& x, const T& y)
+ { return y > x; }
+ friend bool operator<=(const U& x, const T& y)
+ { return (y > x) || (y == x); }
+ friend bool operator>=(const U& x, const T& y)
+ { return (y < x) || (y == x); }
+};
+
+template <class T, class B = ::boost::detail::empty_base<T> >
+struct partially_ordered1 : B
+{
+ friend bool operator>(const T& x, const T& y)
+ { return y < x; }
+ friend bool operator<=(const T& x, const T& y)
+ { return (x < y) || (x == y); }
+ friend bool operator>=(const T& x, const T& y)
+ { return (y < x) || (x == y); }
+};
+
+// Combined operator classes (contributed by Daryle Walker) ----------------//
+
+template <class T, class U, class B = ::boost::detail::empty_base<T> >
+struct totally_ordered2
+ : less_than_comparable2<T, U
+ , equality_comparable2<T, U, B
+ > > {};
+
+template <class T, class B = ::boost::detail::empty_base<T> >
+struct totally_ordered1
+ : less_than_comparable1<T
+ , equality_comparable1<T, B
+ > > {};
+
+template <class T, class U, class B = ::boost::detail::empty_base<T> >
+struct additive2
+ : addable2<T, U
+ , subtractable2<T, U, B
+ > > {};
+
+template <class T, class B = ::boost::detail::empty_base<T> >
+struct additive1
+ : addable1<T
+ , subtractable1<T, B
+ > > {};
+
+template <class T, class U, class B = ::boost::detail::empty_base<T> >
+struct multiplicative2
+ : multipliable2<T, U
+ , dividable2<T, U, B
+ > > {};
+
+template <class T, class B = ::boost::detail::empty_base<T> >
+struct multiplicative1
+ : multipliable1<T
+ , dividable1<T, B
+ > > {};
+
+template <class T, class U, class B = ::boost::detail::empty_base<T> >
+struct integer_multiplicative2
+ : multiplicative2<T, U
+ , modable2<T, U, B
+ > > {};
+
+template <class T, class B = ::boost::detail::empty_base<T> >
+struct integer_multiplicative1
+ : multiplicative1<T
+ , modable1<T, B
+ > > {};
+
+template <class T, class U, class B = ::boost::detail::empty_base<T> >
+struct arithmetic2
+ : additive2<T, U
+ , multiplicative2<T, U, B
+ > > {};
+
+template <class T, class B = ::boost::detail::empty_base<T> >
+struct arithmetic1
+ : additive1<T
+ , multiplicative1<T, B
+ > > {};
+
+template <class T, class U, class B = ::boost::detail::empty_base<T> >
+struct integer_arithmetic2
+ : additive2<T, U
+ , integer_multiplicative2<T, U, B
+ > > {};
+
+template <class T, class B = ::boost::detail::empty_base<T> >
+struct integer_arithmetic1
+ : additive1<T
+ , integer_multiplicative1<T, B
+ > > {};
+
+template <class T, class U, class B = ::boost::detail::empty_base<T> >
+struct bitwise2
+ : xorable2<T, U
+ , andable2<T, U
+ , orable2<T, U, B
+ > > > {};
+
+template <class T, class B = ::boost::detail::empty_base<T> >
+struct bitwise1
+ : xorable1<T
+ , andable1<T
+ , orable1<T, B
+ > > > {};
+
+template <class T, class B = ::boost::detail::empty_base<T> >
+struct unit_steppable
+ : incrementable<T
+ , decrementable<T, B
+ > > {};
+
+template <class T, class U, class B = ::boost::detail::empty_base<T> >
+struct shiftable2
+ : left_shiftable2<T, U
+ , right_shiftable2<T, U, B
+ > > {};
+
+template <class T, class B = ::boost::detail::empty_base<T> >
+struct shiftable1
+ : left_shiftable1<T
+ , right_shiftable1<T, B
+ > > {};
+
+template <class T, class U, class B = ::boost::detail::empty_base<T> >
+struct ring_operators2
+ : additive2<T, U
+ , subtractable2_left<T, U
+ , multipliable2<T, U, B
+ > > > {};
+
+template <class T, class B = ::boost::detail::empty_base<T> >
+struct ring_operators1
+ : additive1<T
+ , multipliable1<T, B
+ > > {};
+
+template <class T, class U, class B = ::boost::detail::empty_base<T> >
+struct ordered_ring_operators2
+ : ring_operators2<T, U
+ , totally_ordered2<T, U, B
+ > > {};
+
+template <class T, class B = ::boost::detail::empty_base<T> >
+struct ordered_ring_operators1
+ : ring_operators1<T
+ , totally_ordered1<T, B
+ > > {};
+
+template <class T, class U, class B = ::boost::detail::empty_base<T> >
+struct field_operators2
+ : ring_operators2<T, U
+ , dividable2<T, U
+ , dividable2_left<T, U, B
+ > > > {};
+
+template <class T, class B = ::boost::detail::empty_base<T> >
+struct field_operators1
+ : ring_operators1<T
+ , dividable1<T, B
+ > > {};
+
+template <class T, class U, class B = ::boost::detail::empty_base<T> >
+struct ordered_field_operators2
+ : field_operators2<T, U
+ , totally_ordered2<T, U, B
+ > > {};
+
+template <class T, class B = ::boost::detail::empty_base<T> >
+struct ordered_field_operators1
+ : field_operators1<T
+ , totally_ordered1<T, B
+ > > {};
+
+template <class T, class U, class B = ::boost::detail::empty_base<T> >
+struct euclidian_ring_operators2
+ : ring_operators2<T, U
+ , dividable2<T, U
+ , dividable2_left<T, U
+ , modable2<T, U
+ , modable2_left<T, U, B
+ > > > > > {};
+
+template <class T, class B = ::boost::detail::empty_base<T> >
+struct euclidian_ring_operators1
+ : ring_operators1<T
+ , dividable1<T
+ , modable1<T, B
+ > > > {};
+
+template <class T, class U, class B = ::boost::detail::empty_base<T> >
+struct ordered_euclidian_ring_operators2
+ : totally_ordered2<T, U
+ , euclidian_ring_operators2<T, U, B
+ > > {};
+
+template <class T, class B = ::boost::detail::empty_base<T> >
+struct ordered_euclidian_ring_operators1
+ : totally_ordered1<T
+ , euclidian_ring_operators1<T, B
+ > > {};
+
+template <class T, class P, class B = ::boost::detail::empty_base<T> >
+struct input_iteratable
+ : equality_comparable1<T
+ , incrementable<T
+ , dereferenceable<T, P, B
+ > > > {};
+
+template <class T, class B = ::boost::detail::empty_base<T> >
+struct output_iteratable
+ : incrementable<T, B
+ > {};
+
+template <class T, class P, class B = ::boost::detail::empty_base<T> >
+struct forward_iteratable
+ : input_iteratable<T, P, B
+ > {};
+
+template <class T, class P, class B = ::boost::detail::empty_base<T> >
+struct bidirectional_iteratable
+ : forward_iteratable<T, P
+ , decrementable<T, B
+ > > {};
+
+// To avoid repeated derivation from equality_comparable,
+// which is an indirect base class of bidirectional_iterable,
+// random_access_iteratable must not be derived from totally_ordered1
+// but from less_than_comparable1 only. (Helmut Zeisel, 02-Dec-2001)
+template <class T, class P, class D, class R, class B = ::boost::detail::empty_base<T> >
+struct random_access_iteratable
+ : bidirectional_iteratable<T, P
+ , less_than_comparable1<T
+ , additive2<T, D
+ , indexable<T, D, R, B
+ > > > > {};
+
+#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE
+} // namespace boost
+#endif // BOOST_NO_OPERATORS_IN_NAMESPACE
+
+
+// BOOST_IMPORT_TEMPLATE1 .. BOOST_IMPORT_TEMPLATE4 -
+//
+// When BOOST_NO_OPERATORS_IN_NAMESPACE is defined we need a way to import an
+// operator template into the boost namespace. BOOST_IMPORT_TEMPLATE1 is used
+// for one-argument forms of operator templates; BOOST_IMPORT_TEMPLATE2 for
+// two-argument forms. Note that these macros expect to be invoked from within
+// boost.
+
+#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE
+
+ // The template is already in boost so we have nothing to do.
+# define BOOST_IMPORT_TEMPLATE4(template_name)
+# define BOOST_IMPORT_TEMPLATE3(template_name)
+# define BOOST_IMPORT_TEMPLATE2(template_name)
+# define BOOST_IMPORT_TEMPLATE1(template_name)
+
+#else // BOOST_NO_OPERATORS_IN_NAMESPACE
+
+# ifndef BOOST_NO_USING_TEMPLATE
+
+ // Bring the names in with a using-declaration
+ // to avoid stressing the compiler.
+# define BOOST_IMPORT_TEMPLATE4(template_name) using ::template_name;
+# define BOOST_IMPORT_TEMPLATE3(template_name) using ::template_name;
+# define BOOST_IMPORT_TEMPLATE2(template_name) using ::template_name;
+# define BOOST_IMPORT_TEMPLATE1(template_name) using ::template_name;
+
+# else
+
+ // Otherwise, because a Borland C++ 5.5 bug prevents a using declaration
+ // from working, we are forced to use inheritance for that compiler.
+# define BOOST_IMPORT_TEMPLATE4(template_name) \
+ template <class T, class U, class V, class W, class B = ::boost::detail::empty_base<T> > \
+ struct template_name : ::template_name<T, U, V, W, B> {};
+
+# define BOOST_IMPORT_TEMPLATE3(template_name) \
+ template <class T, class U, class V, class B = ::boost::detail::empty_base<T> > \
+ struct template_name : ::template_name<T, U, V, B> {};
+
+# define BOOST_IMPORT_TEMPLATE2(template_name) \
+ template <class T, class U, class B = ::boost::detail::empty_base<T> > \
+ struct template_name : ::template_name<T, U, B> {};
+
+# define BOOST_IMPORT_TEMPLATE1(template_name) \
+ template <class T, class B = ::boost::detail::empty_base<T> > \
+ struct template_name : ::template_name<T, B> {};
+
+# endif // BOOST_NO_USING_TEMPLATE
+
+#endif // BOOST_NO_OPERATORS_IN_NAMESPACE
+
+//
+// Here's where we put it all together, defining the xxxx forms of the templates
+// in namespace boost. We also define specializations of is_chained_base<> for
+// the xxxx, xxxx1, and xxxx2 templates, importing them into boost:: as
+// necessary.
+//
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+// is_chained_base<> - a traits class used to distinguish whether an operator
+// template argument is being used for base class chaining, or is specifying a
+// 2nd argument type.
+
+namespace boost {
+// A type parameter is used instead of a plain bool because Borland's compiler
+// didn't cope well with the more obvious non-type template parameter.
+namespace detail {
+ struct true_t {};
+ struct false_t {};
+} // namespace detail
+
+// Unspecialized version assumes that most types are not being used for base
+// class chaining. We specialize for the operator templates defined in this
+// library.
+template<class T> struct is_chained_base {
+ typedef ::boost::detail::false_t value;
+};
+
+} // namespace boost
+
+// Import a 4-type-argument operator template into boost (if necessary) and
+// provide a specialization of 'is_chained_base<>' for it.
+# define BOOST_OPERATOR_TEMPLATE4(template_name4) \
+ BOOST_IMPORT_TEMPLATE4(template_name4) \
+ template<class T, class U, class V, class W, class B> \
+ struct is_chained_base< ::boost::template_name4<T, U, V, W, B> > { \
+ typedef ::boost::detail::true_t value; \
+ };
+
+// Import a 3-type-argument operator template into boost (if necessary) and
+// provide a specialization of 'is_chained_base<>' for it.
+# define BOOST_OPERATOR_TEMPLATE3(template_name3) \
+ BOOST_IMPORT_TEMPLATE3(template_name3) \
+ template<class T, class U, class V, class B> \
+ struct is_chained_base< ::boost::template_name3<T, U, V, B> > { \
+ typedef ::boost::detail::true_t value; \
+ };
+
+// Import a 2-type-argument operator template into boost (if necessary) and
+// provide a specialization of 'is_chained_base<>' for it.
+# define BOOST_OPERATOR_TEMPLATE2(template_name2) \
+ BOOST_IMPORT_TEMPLATE2(template_name2) \
+ template<class T, class U, class B> \
+ struct is_chained_base< ::boost::template_name2<T, U, B> > { \
+ typedef ::boost::detail::true_t value; \
+ };
+
+// Import a 1-type-argument operator template into boost (if necessary) and
+// provide a specialization of 'is_chained_base<>' for it.
+# define BOOST_OPERATOR_TEMPLATE1(template_name1) \
+ BOOST_IMPORT_TEMPLATE1(template_name1) \
+ template<class T, class B> \
+ struct is_chained_base< ::boost::template_name1<T, B> > { \
+ typedef ::boost::detail::true_t value; \
+ };
+
+// BOOST_OPERATOR_TEMPLATE(template_name) defines template_name<> such that it
+// can be used for specifying both 1-argument and 2-argument forms. Requires the
+// existence of two previously defined class templates named '<template_name>1'
+// and '<template_name>2' which must implement the corresponding 1- and 2-
+// argument forms.
+//
+// The template type parameter O == is_chained_base<U>::value is used to
+// distinguish whether the 2nd argument to <template_name> is being used for
+// base class chaining from another boost operator template or is describing a
+// 2nd operand type. O == true_t only when U is actually an another operator
+// template from the library. Partial specialization is used to select an
+// implementation in terms of either '<template_name>1' or '<template_name>2'.
+//
+
+# define BOOST_OPERATOR_TEMPLATE(template_name) \
+template <class T \
+ ,class U = T \
+ ,class B = ::boost::detail::empty_base<T> \
+ ,class O = typename is_chained_base<U>::value \
+ > \
+struct template_name : template_name##2<T, U, B> {}; \
+ \
+template<class T, class U, class B> \
+struct template_name<T, U, B, ::boost::detail::true_t> \
+ : template_name##1<T, U> {}; \
+ \
+template <class T, class B> \
+struct template_name<T, T, B, ::boost::detail::false_t> \
+ : template_name##1<T, B> {}; \
+ \
+template<class T, class U, class B, class O> \
+struct is_chained_base< ::boost::template_name<T, U, B, O> > { \
+ typedef ::boost::detail::true_t value; \
+}; \
+ \
+BOOST_OPERATOR_TEMPLATE2(template_name##2) \
+BOOST_OPERATOR_TEMPLATE1(template_name##1)
+
+
+#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+# define BOOST_OPERATOR_TEMPLATE4(template_name4) \
+ BOOST_IMPORT_TEMPLATE4(template_name4)
+# define BOOST_OPERATOR_TEMPLATE3(template_name3) \
+ BOOST_IMPORT_TEMPLATE3(template_name3)
+# define BOOST_OPERATOR_TEMPLATE2(template_name2) \
+ BOOST_IMPORT_TEMPLATE2(template_name2)
+# define BOOST_OPERATOR_TEMPLATE1(template_name1) \
+ BOOST_IMPORT_TEMPLATE1(template_name1)
+
+ // In this case we can only assume that template_name<> is equivalent to the
+ // more commonly needed template_name1<> form.
+# define BOOST_OPERATOR_TEMPLATE(template_name) \
+ template <class T, class B = ::boost::detail::empty_base<T> > \
+ struct template_name : template_name##1<T, B> {};
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace boost {
+
+BOOST_OPERATOR_TEMPLATE(less_than_comparable)
+BOOST_OPERATOR_TEMPLATE(equality_comparable)
+BOOST_OPERATOR_TEMPLATE(multipliable)
+BOOST_OPERATOR_TEMPLATE(addable)
+BOOST_OPERATOR_TEMPLATE(subtractable)
+BOOST_OPERATOR_TEMPLATE2(subtractable2_left)
+BOOST_OPERATOR_TEMPLATE(dividable)
+BOOST_OPERATOR_TEMPLATE2(dividable2_left)
+BOOST_OPERATOR_TEMPLATE(modable)
+BOOST_OPERATOR_TEMPLATE2(modable2_left)
+BOOST_OPERATOR_TEMPLATE(xorable)
+BOOST_OPERATOR_TEMPLATE(andable)
+BOOST_OPERATOR_TEMPLATE(orable)
+
+BOOST_OPERATOR_TEMPLATE1(incrementable)
+BOOST_OPERATOR_TEMPLATE1(decrementable)
+
+BOOST_OPERATOR_TEMPLATE2(dereferenceable)
+BOOST_OPERATOR_TEMPLATE3(indexable)
+
+BOOST_OPERATOR_TEMPLATE(left_shiftable)
+BOOST_OPERATOR_TEMPLATE(right_shiftable)
+BOOST_OPERATOR_TEMPLATE(equivalent)
+BOOST_OPERATOR_TEMPLATE(partially_ordered)
+
+BOOST_OPERATOR_TEMPLATE(totally_ordered)
+BOOST_OPERATOR_TEMPLATE(additive)
+BOOST_OPERATOR_TEMPLATE(multiplicative)
+BOOST_OPERATOR_TEMPLATE(integer_multiplicative)
+BOOST_OPERATOR_TEMPLATE(arithmetic)
+BOOST_OPERATOR_TEMPLATE(integer_arithmetic)
+BOOST_OPERATOR_TEMPLATE(bitwise)
+BOOST_OPERATOR_TEMPLATE1(unit_steppable)
+BOOST_OPERATOR_TEMPLATE(shiftable)
+BOOST_OPERATOR_TEMPLATE(ring_operators)
+BOOST_OPERATOR_TEMPLATE(ordered_ring_operators)
+BOOST_OPERATOR_TEMPLATE(field_operators)
+BOOST_OPERATOR_TEMPLATE(ordered_field_operators)
+BOOST_OPERATOR_TEMPLATE(euclidian_ring_operators)
+BOOST_OPERATOR_TEMPLATE(ordered_euclidian_ring_operators)
+BOOST_OPERATOR_TEMPLATE2(input_iteratable)
+BOOST_OPERATOR_TEMPLATE1(output_iteratable)
+BOOST_OPERATOR_TEMPLATE2(forward_iteratable)
+BOOST_OPERATOR_TEMPLATE2(bidirectional_iteratable)
+BOOST_OPERATOR_TEMPLATE4(random_access_iteratable)
+
+#undef BOOST_OPERATOR_TEMPLATE
+#undef BOOST_OPERATOR_TEMPLATE4
+#undef BOOST_OPERATOR_TEMPLATE3
+#undef BOOST_OPERATOR_TEMPLATE2
+#undef BOOST_OPERATOR_TEMPLATE1
+#undef BOOST_IMPORT_TEMPLATE1
+#undef BOOST_IMPORT_TEMPLATE2
+#undef BOOST_IMPORT_TEMPLATE3
+#undef BOOST_IMPORT_TEMPLATE4
+
+// The following 'operators' classes can only be used portably if the derived class
+// declares ALL of the required member operators.
+template <class T, class U>
+struct operators2
+ : totally_ordered2<T,U
+ , integer_arithmetic2<T,U
+ , bitwise2<T,U
+ > > > {};
+
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+template <class T, class U = T>
+struct operators : operators2<T, U> {};
+
+template <class T> struct operators<T, T>
+#else
+template <class T> struct operators
+#endif
+ : totally_ordered<T
+ , integer_arithmetic<T
+ , bitwise<T
+ , unit_steppable<T
+ > > > > {};
+
+// Iterator helper classes (contributed by Jeremy Siek) -------------------//
+// (Input and output iterator helpers contributed by Daryle Walker) -------//
+// (Changed to use combined operator classes by Daryle Walker) ------------//
+template <class T,
+ class V,
+ class D = std::ptrdiff_t,
+ class P = V const *,
+ class R = V const &>
+struct input_iterator_helper
+ : input_iteratable<T, P
+ , boost::iterator<std::input_iterator_tag, V, D, P, R
+ > > {};
+
+template<class T>
+struct output_iterator_helper
+ : output_iteratable<T
+ , boost::iterator<std::output_iterator_tag, void, void, void, void
+ > >
+{
+ T& operator*() { return static_cast<T&>(*this); }
+ T& operator++() { return static_cast<T&>(*this); }
+};
+
+template <class T,
+ class V,
+ class D = std::ptrdiff_t,
+ class P = V*,
+ class R = V&>
+struct forward_iterator_helper
+ : forward_iteratable<T, P
+ , boost::iterator<std::forward_iterator_tag, V, D, P, R
+ > > {};
+
+template <class T,
+ class V,
+ class D = std::ptrdiff_t,
+ class P = V*,
+ class R = V&>
+struct bidirectional_iterator_helper
+ : bidirectional_iteratable<T, P
+ , boost::iterator<std::bidirectional_iterator_tag, V, D, P, R
+ > > {};
+
+template <class T,
+ class V,
+ class D = std::ptrdiff_t,
+ class P = V*,
+ class R = V&>
+struct random_access_iterator_helper
+ : random_access_iteratable<T, P, D, R
+ , boost::iterator<std::random_access_iterator_tag, V, D, P, R
+ > >
+{
+ friend D requires_difference_operator(const T& x, const T& y) {
+ return x - y;
+ }
+}; // random_access_iterator_helper
+
+} // namespace boost
+
+#if defined(__sgi) && !defined(__GNUC__)
+#pragma reset woff 1234
+#endif
+
+#endif // BOOST_OPERATORS_HPP
diff --git a/boost/boost/optional.hpp b/boost/boost/optional.hpp
new file mode 100644
index 00000000000..bc5c5d30a09
--- /dev/null
+++ b/boost/boost/optional.hpp
@@ -0,0 +1,18 @@
+// Copyright (C) 2003, Fernando Luis Cacciola Carballal.
+//
+// Use, modification, and distribution is 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)
+//
+// See http://www.boost.org/lib/optional for documentation.
+//
+// You are welcome to contact the author at:
+// fernando_cacciola@hotmail.com
+//
+#ifndef BOOST_OPTIONAL_FLC_19NOV2002_HPP
+#define BOOST_OPTIONAL_FLC_19NOV2002_HPP
+
+#include "boost/optional/optional.hpp"
+
+#endif
+
diff --git a/boost/boost/optional/optional.hpp b/boost/boost/optional/optional.hpp
new file mode 100644
index 00000000000..42277ba61e5
--- /dev/null
+++ b/boost/boost/optional/optional.hpp
@@ -0,0 +1,922 @@
+// Copyright (C) 2003, Fernando Luis Cacciola Carballal.
+//
+// Use, modification, and distribution is 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)
+//
+// See http://www.boost.org/lib/optional for documentation.
+//
+// You are welcome to contact the author at:
+// fernando_cacciola@hotmail.com
+//
+#ifndef BOOST_OPTIONAL_OPTIONAL_FLC_19NOV2002_HPP
+#define BOOST_OPTIONAL_OPTIONAL_FLC_19NOV2002_HPP
+
+#include<new>
+#include<algorithm>
+
+#include "boost/config.hpp"
+#include "boost/assert.hpp"
+#include "boost/type.hpp"
+#include "boost/type_traits/alignment_of.hpp"
+#include "boost/type_traits/type_with_alignment.hpp"
+#include "boost/type_traits/remove_reference.hpp"
+#include "boost/type_traits/is_reference.hpp"
+#include "boost/mpl/if.hpp"
+#include "boost/mpl/bool.hpp"
+#include "boost/mpl/not.hpp"
+#include "boost/detail/reference_content.hpp"
+#include "boost/none.hpp"
+#include "boost/utility/compare_pointees.hpp"
+
+#include "boost/optional/optional_fwd.hpp"
+
+#if BOOST_WORKAROUND(BOOST_MSVC, == 1200)
+// VC6.0 has the following bug:
+// When a templated assignment operator exist, an implicit conversion
+// constructing an optional<T> is used when assigment of the form:
+// optional<T> opt ; opt = T(...);
+// is compiled.
+// However, optional's ctor is _explicit_ and the assignemt shouldn't compile.
+// Therefore, for VC6.0 templated assignment is disabled.
+//
+#define BOOST_OPTIONAL_NO_CONVERTING_ASSIGNMENT
+#endif
+
+#if BOOST_WORKAROUND(BOOST_MSVC, == 1300)
+// VC7.0 has the following bug:
+// When both a non-template and a template copy-ctor exist
+// and the templated version is made 'explicit', the explicit is also
+// given to the non-templated version, making the class non-implicitely-copyable.
+//
+#define BOOST_OPTIONAL_NO_CONVERTING_COPY_CTOR
+#endif
+
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) || BOOST_WORKAROUND(BOOST_INTEL_CXX_VERSION,<=700)
+// AFAICT only VC7.1 correctly resolves the overload set
+// that includes the in-place factory taking functions,
+// so for the other VC versions, in-place factory support
+// is disabled
+#define BOOST_OPTIONAL_NO_INPLACE_FACTORY_SUPPORT
+#endif
+
+#if BOOST_WORKAROUND(__BORLANDC__, <= 0x551)
+// BCB (5.5.1) cannot parse the nested template struct in an inplace factory.
+#define BOOST_OPTIONAL_NO_INPLACE_FACTORY_SUPPORT
+#endif
+
+#if !defined(BOOST_OPTIONAL_NO_INPLACE_FACTORY_SUPPORT) \
+ && BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x581) )
+// BCB (up to 5.64) has the following bug:
+// If there is a member function/operator template of the form
+// template<class Expr> mfunc( Expr expr ) ;
+// some calls are resolved to this even if there are other better matches.
+// The effect of this bug is that calls to converting ctors and assignments
+// are incrorrectly sink to this general catch-all member function template as shown above.
+#define BOOST_OPTIONAL_WEAK_OVERLOAD_RESOLUTION
+#endif
+
+// Daniel Wallin discovered that bind/apply.hpp badly interacts with the apply<>
+// member template of a factory as used in the optional<> implementation.
+// He proposed this simple fix which is to move the call to apply<> outside
+// namespace boost.
+namespace boost_optional_detail
+{
+ template <class T, class Factory>
+ void construct(Factory const& factory, void* address)
+ {
+ factory.BOOST_NESTED_TEMPLATE apply<T>(address);
+ }
+}
+
+
+namespace boost {
+
+class in_place_factory_base ;
+class typed_in_place_factory_base ;
+
+namespace optional_detail {
+
+// This local class is used instead of that in "aligned_storage.hpp"
+// because I've found the 'official' class to ICE BCB5.5
+// when some types are used with optional<>
+// (due to sizeof() passed down as a non-type template parameter)
+template <class T>
+class aligned_storage
+{
+ // Borland ICEs if unnamed unions are used for this!
+ union dummy_u
+ {
+ char data[ sizeof(T) ];
+ BOOST_DEDUCED_TYPENAME type_with_alignment<
+ ::boost::alignment_of<T>::value >::type aligner_;
+ } dummy_ ;
+
+ public:
+
+ void const* address() const { return &dummy_.data[0]; }
+ void * address() { return &dummy_.data[0]; }
+} ;
+
+template<class T>
+struct types_when_isnt_ref
+{
+ typedef T const& reference_const_type ;
+ typedef T & reference_type ;
+ typedef T const* pointer_const_type ;
+ typedef T * pointer_type ;
+ typedef T const& argument_type ;
+} ;
+template<class T>
+struct types_when_is_ref
+{
+ typedef BOOST_DEDUCED_TYPENAME remove_reference<T>::type raw_type ;
+
+ typedef raw_type& reference_const_type ;
+ typedef raw_type& reference_type ;
+ typedef raw_type* pointer_const_type ;
+ typedef raw_type* pointer_type ;
+ typedef raw_type& argument_type ;
+} ;
+
+struct optional_tag {} ;
+
+template<class T>
+class optional_base : public optional_tag
+{
+ private :
+
+ typedef
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+ BOOST_DEDUCED_TYPENAME
+#endif
+ ::boost::detail::make_reference_content<T>::type internal_type ;
+
+ typedef aligned_storage<internal_type> storage_type ;
+
+ typedef types_when_isnt_ref<T> types_when_not_ref ;
+ typedef types_when_is_ref<T> types_when_ref ;
+
+ typedef optional_base<T> this_type ;
+
+ protected :
+
+ typedef T value_type ;
+
+ typedef mpl::true_ is_reference_tag ;
+ typedef mpl::false_ is_not_reference_tag ;
+
+ typedef BOOST_DEDUCED_TYPENAME is_reference<T>::type is_reference_predicate ;
+
+ typedef BOOST_DEDUCED_TYPENAME mpl::if_<is_reference_predicate,types_when_ref,types_when_not_ref>::type types ;
+
+ typedef bool (this_type::*unspecified_bool_type)() const;
+
+ typedef BOOST_DEDUCED_TYPENAME types::reference_type reference_type ;
+ typedef BOOST_DEDUCED_TYPENAME types::reference_const_type reference_const_type ;
+ typedef BOOST_DEDUCED_TYPENAME types::pointer_type pointer_type ;
+ typedef BOOST_DEDUCED_TYPENAME types::pointer_const_type pointer_const_type ;
+ typedef BOOST_DEDUCED_TYPENAME types::argument_type argument_type ;
+
+ // Creates an optional<T> uninitialized.
+ // No-throw
+ optional_base()
+ :
+ m_initialized(false) {}
+
+ // Creates an optional<T> uninitialized.
+ // No-throw
+ optional_base ( none_t )
+ :
+ m_initialized(false) {}
+
+ // Creates an optional<T> initialized with 'val'.
+ // Can throw if T::T(T const&) does
+ optional_base ( argument_type val )
+ :
+ m_initialized(false)
+ {
+ construct(val);
+ }
+
+ // Creates an optional<T> initialized with 'val' IFF cond is true, otherwise creates an uninitialzed optional<T>.
+ // Can throw if T::T(T const&) does
+ optional_base ( bool cond, argument_type val )
+ :
+ m_initialized(false)
+ {
+ if ( cond )
+ construct(val);
+ }
+
+ // Creates a deep copy of another optional<T>
+ // Can throw if T::T(T const&) does
+ optional_base ( optional_base const& rhs )
+ :
+ m_initialized(false)
+ {
+ if ( rhs.is_initialized() )
+ construct(rhs.get_impl());
+ }
+
+
+ // This is used for both converting and in-place constructions.
+ // Derived classes use the 'tag' to select the appropriate
+ // implementation (the correct 'construct()' overload)
+ template<class Expr>
+ explicit optional_base ( Expr const& expr, Expr const* tag )
+ :
+ m_initialized(false)
+ {
+ construct(expr,tag);
+ }
+
+
+
+ // No-throw (assuming T::~T() doesn't)
+ ~optional_base() { destroy() ; }
+
+ // Assigns from another optional<T> (deep-copies the rhs value)
+ void assign ( optional_base const& rhs )
+ {
+ if (is_initialized())
+ {
+ if ( rhs.is_initialized() )
+ assign_value(rhs.get_impl(), is_reference_predicate() );
+ else destroy();
+ }
+ else
+ {
+ if ( rhs.is_initialized() )
+ construct(rhs.get_impl());
+ }
+ }
+
+ // Assigns from another _convertible_ optional<U> (deep-copies the rhs value)
+ template<class U>
+ void assign ( optional<U> const& rhs )
+ {
+ if (is_initialized())
+ {
+ if ( rhs.is_initialized() )
+ assign_value(static_cast<value_type>(rhs.get()), is_reference_predicate() );
+ else destroy();
+ }
+ else
+ {
+ if ( rhs.is_initialized() )
+ construct(static_cast<value_type>(rhs.get()));
+ }
+ }
+
+ // Assigns from a T (deep-copies the rhs value)
+ void assign ( argument_type val )
+ {
+ if (is_initialized())
+ assign_value(val, is_reference_predicate() );
+ else construct(val);
+ }
+
+ // Assigns from "none", destroying the current value, if any, leaving this UNINITIALIZED
+ // No-throw (assuming T::~T() doesn't)
+ void assign ( none_t ) { destroy(); }
+
+#ifndef BOOST_OPTIONAL_NO_INPLACE_FACTORY_SUPPORT
+ template<class Expr>
+ void assign_expr ( Expr const& expr, Expr const* tag )
+ {
+ if (is_initialized())
+ assign_expr_to_initialized(expr,tag);
+ else construct(expr,tag);
+ }
+#endif
+
+ public :
+
+ // Destroys the current value, if any, leaving this UNINITIALIZED
+ // No-throw (assuming T::~T() doesn't)
+ void reset() { destroy(); }
+
+ // Replaces the current value -if any- with 'val'
+ void reset ( argument_type val ) { assign(val); }
+
+ // Returns a pointer to the value if this is initialized, otherwise,
+ // returns NULL.
+ // No-throw
+ pointer_const_type get_ptr() const { return m_initialized ? get_ptr_impl() : 0 ; }
+ pointer_type get_ptr() { return m_initialized ? get_ptr_impl() : 0 ; }
+
+ bool is_initialized() const { return m_initialized ; }
+
+ protected :
+
+ void construct ( argument_type val )
+ {
+ new (m_storage.address()) internal_type(val) ;
+ m_initialized = true ;
+ }
+
+#ifndef BOOST_OPTIONAL_NO_INPLACE_FACTORY_SUPPORT
+ // Constructs in-place using the given factory
+ template<class Expr>
+ void construct ( Expr const& factory, in_place_factory_base const* )
+ {
+ BOOST_STATIC_ASSERT ( ::boost::mpl::not_<is_reference_predicate>::value ) ;
+ boost_optional_detail::construct<value_type>(factory, m_storage.address());
+ m_initialized = true ;
+ }
+
+ // Constructs in-place using the given typed factory
+ template<class Expr>
+ void construct ( Expr const& factory, typed_in_place_factory_base const* )
+ {
+ BOOST_STATIC_ASSERT ( ::boost::mpl::not_<is_reference_predicate>::value ) ;
+ factory.apply(m_storage.address()) ;
+ m_initialized = true ;
+ }
+
+ template<class Expr>
+ void assign_expr_to_initialized ( Expr const& factory, in_place_factory_base const* tag )
+ {
+ destroy();
+ construct(factory,tag);
+ }
+
+ // Constructs in-place using the given typed factory
+ template<class Expr>
+ void assign_expr_to_initialized ( Expr const& factory, typed_in_place_factory_base const* tag )
+ {
+ destroy();
+ construct(factory,tag);
+ }
+#endif
+
+ // Constructs using any expression implicitely convertible to the single argument
+ // of a one-argument T constructor.
+ // Converting constructions of optional<T> from optional<U> uses this function with
+ // 'Expr' being of type 'U' and relying on a converting constructor of T from U.
+ template<class Expr>
+ void construct ( Expr const& expr, void const* )
+ {
+ new (m_storage.address()) internal_type(expr) ;
+ m_initialized = true ;
+ }
+
+ // Assigns using a form any expression implicitely convertible to the single argument
+ // of a T's assignment operator.
+ // Converting assignments of optional<T> from optional<U> uses this function with
+ // 'Expr' being of type 'U' and relying on a converting assignment of T from U.
+ template<class Expr>
+ void assign_expr_to_initialized ( Expr const& expr, void const* )
+ {
+ assign_value(expr, is_reference_predicate());
+ }
+
+#ifdef BOOST_OPTIONAL_WEAK_OVERLOAD_RESOLUTION
+ // BCB5.64 (and probably lower versions) workaround.
+ // The in-place factories are supported by means of catch-all constructors
+ // and assignment operators (the functions are parameterized in terms of
+ // an arbitrary 'Expr' type)
+ // This compiler incorrectly resolves the overload set and sinks optional<T> and optional<U>
+ // to the 'Expr'-taking functions even though explicit overloads are present for them.
+ // Thus, the following overload is needed to properly handle the case when the 'lhs'
+ // is another optional.
+ //
+ // For VC<=70 compilers this workaround dosen't work becasue the comnpiler issues and error
+ // instead of choosing the wrong overload
+ //
+ // Notice that 'Expr' will be optional<T> or optional<U> (but not optional_base<..>)
+ template<class Expr>
+ void construct ( Expr const& expr, optional_tag const* )
+ {
+ if ( expr.is_initialized() )
+ {
+ // An exception can be thrown here.
+ // It it happens, THIS will be left uninitialized.
+ new (m_storage.address()) internal_type(expr.get()) ;
+ m_initialized = true ;
+ }
+ }
+#endif
+
+ void assign_value ( argument_type val, is_not_reference_tag ) { get_impl() = val; }
+ void assign_value ( argument_type val, is_reference_tag ) { construct(val); }
+
+ void destroy()
+ {
+ if ( m_initialized )
+ destroy_impl(is_reference_predicate()) ;
+ }
+
+ unspecified_bool_type safe_bool() const { return m_initialized ? &this_type::is_initialized : 0 ; }
+
+ reference_const_type get_impl() const { return dereference(get_object(), is_reference_predicate() ) ; }
+ reference_type get_impl() { return dereference(get_object(), is_reference_predicate() ) ; }
+
+ pointer_const_type get_ptr_impl() const { return cast_ptr(get_object(), is_reference_predicate() ) ; }
+ pointer_type get_ptr_impl() { return cast_ptr(get_object(), is_reference_predicate() ) ; }
+
+ private :
+
+ // internal_type can be either T or reference_content<T>
+ internal_type const* get_object() const { return static_cast<internal_type const*>(m_storage.address()); }
+ internal_type * get_object() { return static_cast<internal_type *> (m_storage.address()); }
+
+ // reference_content<T> lacks an implicit conversion to T&, so the following is needed to obtain a proper reference.
+ reference_const_type dereference( internal_type const* p, is_not_reference_tag ) const { return *p ; }
+ reference_type dereference( internal_type* p, is_not_reference_tag ) { return *p ; }
+ reference_const_type dereference( internal_type const* p, is_reference_tag ) const { return p->get() ; }
+ reference_type dereference( internal_type* p, is_reference_tag ) { return p->get() ; }
+
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x581))
+ void destroy_impl ( is_not_reference_tag ) { get_ptr_impl()->internal_type::~internal_type() ; m_initialized = false ; }
+#else
+ void destroy_impl ( is_not_reference_tag ) { get_ptr_impl()->T::~T() ; m_initialized = false ; }
+#endif
+
+ void destroy_impl ( is_reference_tag ) { m_initialized = false ; }
+
+ // If T is of reference type, trying to get a pointer to the held value must result in a compile-time error.
+ // Decent compilers should disallow conversions from reference_content<T>* to T*, but just in case,
+ // the following olverloads are used to filter out the case and guarantee an error in case of T being a reference.
+ pointer_const_type cast_ptr( internal_type const* p, is_not_reference_tag ) const { return p ; }
+ pointer_type cast_ptr( internal_type * p, is_not_reference_tag ) { return p ; }
+ pointer_const_type cast_ptr( internal_type const* p, is_reference_tag ) const { return &p->get() ; }
+ pointer_type cast_ptr( internal_type * p, is_reference_tag ) { return &p->get() ; }
+
+ bool m_initialized ;
+ storage_type m_storage ;
+} ;
+
+} // namespace optional_detail
+
+template<class T>
+class optional : public optional_detail::optional_base<T>
+{
+ typedef optional_detail::optional_base<T> base ;
+
+ typedef BOOST_DEDUCED_TYPENAME base::unspecified_bool_type unspecified_bool_type ;
+
+ public :
+
+ typedef optional<T> this_type ;
+
+ typedef BOOST_DEDUCED_TYPENAME base::value_type value_type ;
+ typedef BOOST_DEDUCED_TYPENAME base::reference_type reference_type ;
+ typedef BOOST_DEDUCED_TYPENAME base::reference_const_type reference_const_type ;
+ typedef BOOST_DEDUCED_TYPENAME base::pointer_type pointer_type ;
+ typedef BOOST_DEDUCED_TYPENAME base::pointer_const_type pointer_const_type ;
+ typedef BOOST_DEDUCED_TYPENAME base::argument_type argument_type ;
+
+ // Creates an optional<T> uninitialized.
+ // No-throw
+ optional() : base() {}
+
+ // Creates an optional<T> uninitialized.
+ // No-throw
+ optional( none_t none_ ) : base(none_) {}
+
+ // Creates an optional<T> initialized with 'val'.
+ // Can throw if T::T(T const&) does
+ optional ( argument_type val ) : base(val) {}
+
+ // Creates an optional<T> initialized with 'val' IFF cond is true, otherwise creates an uninitialized optional.
+ // Can throw if T::T(T const&) does
+ optional ( bool cond, argument_type val ) : base(cond,val) {}
+
+#ifndef BOOST_OPTIONAL_NO_CONVERTING_COPY_CTOR
+ // NOTE: MSVC needs templated versions first
+
+ // Creates a deep copy of another convertible optional<U>
+ // Requires a valid conversion from U to T.
+ // Can throw if T::T(U const&) does
+ template<class U>
+ explicit optional ( optional<U> const& rhs )
+ :
+ base()
+ {
+ if ( rhs.is_initialized() )
+ this->construct(rhs.get());
+ }
+#endif
+
+#ifndef BOOST_OPTIONAL_NO_INPLACE_FACTORY_SUPPORT
+ // Creates an optional<T> with an expression which can be either
+ // (a) An instance of InPlaceFactory (i.e. in_place(a,b,...,n);
+ // (b) An instance of TypedInPlaceFactory ( i.e. in_place<T>(a,b,...,n);
+ // (c) Any expression implicitely convertible to the single type
+ // of a one-argument T's constructor.
+ // (d*) Weak compilers (BCB) might also resolved Expr as optional<T> and optional<U>
+ // even though explicit overloads are present for these.
+ // Depending on the above some T ctor is called.
+ // Can throw is the resolved T ctor throws.
+ template<class Expr>
+ explicit optional ( Expr const& expr ) : base(expr,&expr) {}
+#endif
+
+ // Creates a deep copy of another optional<T>
+ // Can throw if T::T(T const&) does
+ optional ( optional const& rhs ) : base(rhs) {}
+
+ // No-throw (assuming T::~T() doesn't)
+ ~optional() {}
+
+#if !defined(BOOST_OPTIONAL_NO_INPLACE_FACTORY_SUPPORT) && !defined(BOOST_OPTIONAL_WEAK_OVERLOAD_RESOLUTION)
+ // Assigns from an expression. See corresponding constructor.
+ // Basic Guarantee: If the resolved T ctor throws, this is left UNINITIALIZED
+ template<class Expr>
+ optional& operator= ( Expr expr )
+ {
+ this->assign_expr(expr,&expr);
+ return *this ;
+ }
+#endif
+
+
+#ifndef BOOST_OPTIONAL_NO_CONVERTING_ASSIGNMENT
+ // Assigns from another convertible optional<U> (converts && deep-copies the rhs value)
+ // Requires a valid conversion from U to T.
+ // Basic Guarantee: If T::T( U const& ) throws, this is left UNINITIALIZED
+ template<class U>
+ optional& operator= ( optional<U> const& rhs )
+ {
+ this->assign(rhs);
+ return *this ;
+ }
+#endif
+
+ // Assigns from another optional<T> (deep-copies the rhs value)
+ // Basic Guarantee: If T::T( T const& ) throws, this is left UNINITIALIZED
+ // (NOTE: On BCB, this operator is not actually called and left is left UNMODIFIED in case of a throw)
+ optional& operator= ( optional const& rhs )
+ {
+ this->assign( rhs ) ;
+ return *this ;
+ }
+
+ // Assigns from a T (deep-copies the rhs value)
+ // Basic Guarantee: If T::( T const& ) throws, this is left UNINITIALIZED
+ optional& operator= ( argument_type val )
+ {
+ this->assign( val ) ;
+ return *this ;
+ }
+
+ // Assigns from a "none"
+ // Which destroys the current value, if any, leaving this UNINITIALIZED
+ // No-throw (assuming T::~T() doesn't)
+ optional& operator= ( none_t none_ )
+ {
+ this->assign( none_ ) ;
+ return *this ;
+ }
+
+ // Returns a reference to the value if this is initialized, otherwise,
+ // the behaviour is UNDEFINED
+ // No-throw
+ reference_const_type get() const { BOOST_ASSERT(this->is_initialized()) ; return this->get_impl(); }
+ reference_type get() { BOOST_ASSERT(this->is_initialized()) ; return this->get_impl(); }
+
+ // Returns a copy of the value if this is initialized, 'v' otherwise
+ reference_const_type get_value_or ( reference_const_type v ) const { return this->is_initialized() ? get() : v ; }
+ reference_type get_value_or ( reference_type v ) { return this->is_initialized() ? get() : v ; }
+
+ // Returns a pointer to the value if this is initialized, otherwise,
+ // the behaviour is UNDEFINED
+ // No-throw
+ pointer_const_type operator->() const { BOOST_ASSERT(this->is_initialized()) ; return this->get_ptr_impl() ; }
+ pointer_type operator->() { BOOST_ASSERT(this->is_initialized()) ; return this->get_ptr_impl() ; }
+
+ // Returns a reference to the value if this is initialized, otherwise,
+ // the behaviour is UNDEFINED
+ // No-throw
+ reference_const_type operator *() const { return this->get() ; }
+ reference_type operator *() { return this->get() ; }
+
+ // implicit conversion to "bool"
+ // No-throw
+ operator unspecified_bool_type() const { return this->safe_bool() ; }
+
+ // This is provided for those compilers which don't like the conversion to bool
+ // on some contexts.
+ bool operator!() const { return !this->is_initialized() ; }
+} ;
+
+// Returns optional<T>(v)
+template<class T>
+inline
+optional<T> make_optional ( T const& v )
+{
+ return optional<T>(v);
+}
+
+// Returns optional<T>(cond,v)
+template<class T>
+inline
+optional<T> make_optional ( bool cond, T const& v )
+{
+ return optional<T>(cond,v);
+}
+
+// Returns a reference to the value if this is initialized, otherwise, the behaviour is UNDEFINED.
+// No-throw
+template<class T>
+inline
+BOOST_DEDUCED_TYPENAME optional<T>::reference_const_type
+get ( optional<T> const& opt )
+{
+ return opt.get() ;
+}
+
+template<class T>
+inline
+BOOST_DEDUCED_TYPENAME optional<T>::reference_type
+get ( optional<T>& opt )
+{
+ return opt.get() ;
+}
+
+// Returns a pointer to the value if this is initialized, otherwise, returns NULL.
+// No-throw
+template<class T>
+inline
+BOOST_DEDUCED_TYPENAME optional<T>::pointer_const_type
+get ( optional<T> const* opt )
+{
+ return opt->get_ptr() ;
+}
+
+template<class T>
+inline
+BOOST_DEDUCED_TYPENAME optional<T>::pointer_type
+get ( optional<T>* opt )
+{
+ return opt->get_ptr() ;
+}
+
+// Returns a reference to the value if this is initialized, otherwise, the behaviour is UNDEFINED.
+// No-throw
+template<class T>
+inline
+BOOST_DEDUCED_TYPENAME optional<T>::reference_const_type
+get_optional_value_or ( optional<T> const& opt, BOOST_DEDUCED_TYPENAME optional<T>::reference_const_type v )
+{
+ return opt.get_value_or(v) ;
+}
+
+template<class T>
+inline
+BOOST_DEDUCED_TYPENAME optional<T>::reference_type
+get_optional_value_or ( optional<T>& opt, BOOST_DEDUCED_TYPENAME optional<T>::reference_type v )
+{
+ return opt.get_value_or(v) ;
+}
+
+// Returns a pointer to the value if this is initialized, otherwise, returns NULL.
+// No-throw
+template<class T>
+inline
+BOOST_DEDUCED_TYPENAME optional<T>::pointer_const_type
+get_pointer ( optional<T> const& opt )
+{
+ return opt.get_ptr() ;
+}
+
+template<class T>
+inline
+BOOST_DEDUCED_TYPENAME optional<T>::pointer_type
+get_pointer ( optional<T>& opt )
+{
+ return opt.get_ptr() ;
+}
+
+// optional's relational operators ( ==, !=, <, >, <=, >= ) have deep-semantics (compare values).
+// WARNING: This is UNLIKE pointers. Use equal_pointees()/less_pointess() in generic code instead.
+
+
+//
+// optional<T> vs optional<T> cases
+//
+
+template<class T>
+inline
+bool operator == ( optional<T> const& x, optional<T> const& y )
+{ return equal_pointees(x,y); }
+
+template<class T>
+inline
+bool operator < ( optional<T> const& x, optional<T> const& y )
+{ return less_pointees(x,y); }
+
+template<class T>
+inline
+bool operator != ( optional<T> const& x, optional<T> const& y )
+{ return !( x == y ) ; }
+
+template<class T>
+inline
+bool operator > ( optional<T> const& x, optional<T> const& y )
+{ return y < x ; }
+
+template<class T>
+inline
+bool operator <= ( optional<T> const& x, optional<T> const& y )
+{ return !( y < x ) ; }
+
+template<class T>
+inline
+bool operator >= ( optional<T> const& x, optional<T> const& y )
+{ return !( x < y ) ; }
+
+
+//
+// optional<T> vs T cases
+//
+template<class T>
+inline
+bool operator == ( optional<T> const& x, T const& y )
+{ return equal_pointees(x, optional<T>(y)); }
+
+template<class T>
+inline
+bool operator < ( optional<T> const& x, T const& y )
+{ return less_pointees(x, optional<T>(y)); }
+
+template<class T>
+inline
+bool operator != ( optional<T> const& x, T const& y )
+{ return !( x == y ) ; }
+
+template<class T>
+inline
+bool operator > ( optional<T> const& x, T const& y )
+{ return y < x ; }
+
+template<class T>
+inline
+bool operator <= ( optional<T> const& x, T const& y )
+{ return !( y < x ) ; }
+
+template<class T>
+inline
+bool operator >= ( optional<T> const& x, T const& y )
+{ return !( x < y ) ; }
+
+//
+// T vs optional<T> cases
+//
+
+template<class T>
+inline
+bool operator == ( T const& x, optional<T> const& y )
+{ return equal_pointees( optional<T>(x), y ); }
+
+template<class T>
+inline
+bool operator < ( T const& x, optional<T> const& y )
+{ return less_pointees( optional<T>(x), y ); }
+
+template<class T>
+inline
+bool operator != ( T const& x, optional<T> const& y )
+{ return !( x == y ) ; }
+
+template<class T>
+inline
+bool operator > ( T const& x, optional<T> const& y )
+{ return y < x ; }
+
+template<class T>
+inline
+bool operator <= ( T const& x, optional<T> const& y )
+{ return !( y < x ) ; }
+
+template<class T>
+inline
+bool operator >= ( T const& x, optional<T> const& y )
+{ return !( x < y ) ; }
+
+
+//
+// optional<T> vs none cases
+//
+
+template<class T>
+inline
+bool operator == ( optional<T> const& x, none_t )
+{ return equal_pointees(x, optional<T>() ); }
+
+template<class T>
+inline
+bool operator < ( optional<T> const& x, none_t )
+{ return less_pointees(x,optional<T>() ); }
+
+template<class T>
+inline
+bool operator != ( optional<T> const& x, none_t y )
+{ return !( x == y ) ; }
+
+template<class T>
+inline
+bool operator > ( optional<T> const& x, none_t y )
+{ return y < x ; }
+
+template<class T>
+inline
+bool operator <= ( optional<T> const& x, none_t y )
+{ return !( y < x ) ; }
+
+template<class T>
+inline
+bool operator >= ( optional<T> const& x, none_t y )
+{ return !( x < y ) ; }
+
+//
+// none vs optional<T> cases
+//
+
+template<class T>
+inline
+bool operator == ( none_t x, optional<T> const& y )
+{ return equal_pointees(optional<T>() ,y); }
+
+template<class T>
+inline
+bool operator < ( none_t x, optional<T> const& y )
+{ return less_pointees(optional<T>() ,y); }
+
+template<class T>
+inline
+bool operator != ( none_t x, optional<T> const& y )
+{ return !( x == y ) ; }
+
+template<class T>
+inline
+bool operator > ( none_t x, optional<T> const& y )
+{ return y < x ; }
+
+template<class T>
+inline
+bool operator <= ( none_t x, optional<T> const& y )
+{ return !( y < x ) ; }
+
+template<class T>
+inline
+bool operator >= ( none_t x, optional<T> const& y )
+{ return !( x < y ) ; }
+
+//
+// The following swap implementation follows the GCC workaround as found in
+// "boost/detail/compressed_pair.hpp"
+//
+namespace optional_detail {
+
+// GCC < 3.2 gets the using declaration at namespace scope (FLC, DWA)
+#if BOOST_WORKAROUND(__GNUC__, < 3) \
+ || BOOST_WORKAROUND(__GNUC__, == 3) && __GNUC_MINOR__ <= 2
+ using std::swap;
+#define BOOST_OPTIONAL_STD_SWAP_INTRODUCED_AT_NS_SCOPE
+#endif
+
+// optional's swap:
+// If both are initialized, calls swap(T&, T&). If this swap throws, both will remain initialized but their values are now unspecified.
+// If only one is initialized, calls U.reset(*I), THEN I.reset().
+// If U.reset(*I) throws, both are left UNCHANGED (U is kept uinitialized and I is never reset)
+// If both are uninitialized, do nothing (no-throw)
+template<class T>
+inline
+void optional_swap ( optional<T>& x, optional<T>& y )
+{
+ if ( !x && !!y )
+ {
+ x.reset(*y);
+ y.reset();
+ }
+ else if ( !!x && !y )
+ {
+ y.reset(*x);
+ x.reset();
+ }
+ else if ( !!x && !!y )
+ {
+// GCC > 3.2 and all other compilers have the using declaration at function scope (FLC)
+#ifndef BOOST_OPTIONAL_STD_SWAP_INTRODUCED_AT_NS_SCOPE
+ // allow for Koenig lookup
+ using std::swap ;
+#endif
+ swap(*x,*y);
+ }
+}
+
+} // namespace optional_detail
+
+template<class T> inline void swap ( optional<T>& x, optional<T>& y )
+{
+ optional_detail::optional_swap(x,y);
+}
+
+
+} // namespace boost
+
+#endif
+
diff --git a/boost/boost/optional/optional_fwd.hpp b/boost/boost/optional/optional_fwd.hpp
new file mode 100644
index 00000000000..2cf4fa654c3
--- /dev/null
+++ b/boost/boost/optional/optional_fwd.hpp
@@ -0,0 +1,22 @@
+// Copyright (C) 2003, Fernando Luis Cacciola Carballal.
+//
+// Use, modification, and distribution is 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)
+//
+// See http://www.boost.org/lib/optional for documentation.
+//
+// You are welcome to contact the author at:
+// fernando_cacciola@hotmail.com
+//
+#ifndef BOOST_OPTIONAL_OPTIONAL_FWD_FLC_19NOV2002_HPP
+#define BOOST_OPTIONAL_OPTIONAL_FWD_FLC_19NOV2002_HPP
+
+namespace boost {
+
+template<class T> class optional ;
+
+} // namespace boost
+
+#endif
+
diff --git a/boost/boost/optional/optional_io.hpp b/boost/boost/optional/optional_io.hpp
new file mode 100644
index 00000000000..ef1ecaf3a06
--- /dev/null
+++ b/boost/boost/optional/optional_io.hpp
@@ -0,0 +1,84 @@
+// Copyright (C) 2005, Fernando Luis Cacciola Carballal.
+//
+// Use, modification, and distribution is 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)
+//
+// See http://www.boost.org/lib/optional for documentation.
+//
+// You are welcome to contact the author at:
+// fernando_cacciola@hotmail.com
+//
+#ifndef BOOST_OPTIONAL_OPTIONAL_IO_FLC_19NOV2002_HPP
+#define BOOST_OPTIONAL_OPTIONAL_IO_FLC_19NOV2002_HPP
+
+#if defined __GNUC__
+# if (__GNUC__ == 2 && __GNUC_MINOR__ <= 97)
+# define BOOST_OPTIONAL_NO_TEMPLATED_STREAMS
+# endif
+#endif // __GNUC__
+
+#if defined BOOST_OPTIONAL_NO_TEMPLATED_STREAMS
+# include <iostream>
+#else
+# include <istream>
+# include <ostream>
+#endif
+
+
+#include "boost/optional/optional.hpp"
+#include "boost/utility/value_init.hpp"
+
+namespace boost
+{
+
+#if defined (BOOST_NO_TEMPLATED_STREAMS)
+template<class T>
+inline std::ostream& operator<<(std::ostream& out, optional<T> const& v)
+#else
+template<class CharType, class CharTrait, class T>
+inline
+std::basic_ostream<CharType, CharTrait>&
+operator<<(std::basic_ostream<CharType, CharTrait>& out, optional<T> const& v)
+#endif
+{
+ if ( out.good() )
+ {
+ if ( !v )
+ out << "--" ;
+ else out << ' ' << *v ;
+ }
+
+ return out;
+}
+
+#if defined (BOOST_NO_TEMPLATED_STREAMS)
+template<class T>
+inline std::istream& operator>>(std::istream& in, optional<T>& v)
+#else
+template<class CharType, class CharTrait, class T>
+inline
+std::basic_istream<CharType, CharTrait>&
+operator>>(std::basic_istream<CharType, CharTrait>& in, optional<T>& v)
+#endif
+{
+ if ( in.good() )
+ {
+ int d = in.get();
+ if ( d == ' ' )
+ {
+ T x ;
+ in >> x;
+ v = x ;
+ }
+ else
+ v = optional<T>() ;
+ }
+
+ return in;
+}
+
+} // namespace boost
+
+#endif
+
diff --git a/boost/boost/parameter.hpp b/boost/boost/parameter.hpp
new file mode 100644
index 00000000000..714d5bff038
--- /dev/null
+++ b/boost/boost/parameter.hpp
@@ -0,0 +1,19 @@
+// Copyright David Abrahams, Daniel Wallin 2005. Use, modification and
+// distribution is 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)
+
+#ifndef BOOST_PARAMETER_050401_HPP
+#define BOOST_PARAMETER_050401_HPP
+
+#include <boost/parameter/parameters.hpp>
+#include <boost/parameter/keyword.hpp>
+#include <boost/parameter/binding.hpp>
+#include <boost/parameter/value_type.hpp>
+#include <boost/parameter/macros.hpp>
+#include <boost/parameter/match.hpp>
+#include <boost/parameter/name.hpp>
+#include <boost/parameter/preprocessor.hpp>
+
+#endif // BOOST_PARAMETER_050401_HPP
+
diff --git a/boost/boost/parameter/aux_/arg_list.hpp b/boost/boost/parameter/aux_/arg_list.hpp
new file mode 100644
index 00000000000..a031e3e8701
--- /dev/null
+++ b/boost/boost/parameter/aux_/arg_list.hpp
@@ -0,0 +1,467 @@
+// Copyright Daniel Wallin, David Abrahams 2005. Use, modification and
+// distribution is 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)
+
+#ifndef ARG_LIST_050329_HPP
+#define ARG_LIST_050329_HPP
+
+#include <boost/parameter/aux_/void.hpp>
+#include <boost/parameter/aux_/result_of0.hpp>
+#include <boost/parameter/aux_/default.hpp>
+#include <boost/parameter/aux_/parameter_requirements.hpp>
+#include <boost/parameter/aux_/yesno.hpp>
+#include <boost/parameter/config.hpp>
+
+#include <boost/mpl/apply.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/mpl/begin.hpp>
+#include <boost/mpl/end.hpp>
+#include <boost/mpl/iterator_tags.hpp>
+
+#include <boost/type_traits/add_reference.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/is_base_and_derived.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/facilities/intercept.hpp>
+
+namespace boost { namespace parameter {
+
+// Forward declaration for aux::arg_list, below.
+template<class T> struct keyword;
+
+namespace aux {
+
+// Tag type passed to MPL lambda.
+struct lambda_tag;
+
+//
+// Structures used to build the tuple of actual arguments. The
+// tuple is a nested cons-style list of arg_list specializations
+// terminated by an empty_arg_list.
+//
+// Each specialization of arg_list is derived from its successor in
+// the list type. This feature is used along with using
+// declarations to build member function overload sets that can
+// match against keywords.
+//
+
+// MPL sequence support
+struct arg_list_tag;
+
+// Terminates arg_list<> and represents an empty list. Since this
+// is just the terminating case you might want to look at arg_list
+// first, to get a feel for what's really happening here.
+
+struct empty_arg_list
+{
+ empty_arg_list() {}
+
+ // Constructor taking BOOST_PARAMETER_MAX_ARITY empty_arg_list
+ // arguments; this makes initialization
+ empty_arg_list(
+ BOOST_PP_ENUM_PARAMS(
+ BOOST_PARAMETER_MAX_ARITY, void_ BOOST_PP_INTERCEPT
+ ))
+ {}
+
+ // A metafunction class that, given a keyword and a default
+ // type, returns the appropriate result type for a keyword
+ // lookup given that default
+ struct binding
+ {
+ template<class KW, class Default, class Reference>
+ struct apply
+ {
+ typedef Default type;
+ };
+ };
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+ // Terminator for has_key, indicating that the keyword is unique
+ template <class KW>
+ static no_tag has_key(KW*);
+#endif
+
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \
+ || (BOOST_WORKAROUND(__GNUC__, < 3)) \
+ || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+
+ // The overload set technique doesn't work with these older
+ // compilers, so they need some explicit handholding.
+
+ // A metafunction class that, given a keyword, returns the type
+ // of the base sublist whose get() function can produce the
+ // value for that key
+ struct key_owner
+ {
+ template<class KW>
+ struct apply
+ {
+ typedef empty_arg_list type;
+ };
+ };
+
+ template <class K, class T>
+ T& get(default_<K,T> x) const
+ {
+ return x.value;
+ }
+
+ template <class K, class F>
+ typename result_of0<F>::type
+ get(lazy_default<K,F> x) const
+ {
+ return x.compute_default();
+ }
+#endif
+
+ // If this function is called, it means there is no argument
+ // in the list that matches the supplied keyword. Just return
+ // the default value.
+ template <class K, class Default>
+ Default& operator[](default_<K, Default> x) const
+ {
+ return x.value;
+ }
+
+ // If this function is called, it means there is no argument
+ // in the list that matches the supplied keyword. Just evaluate
+ // and return the default value.
+ template <class K, class F>
+ typename result_of0<F>::type
+ operator[](
+ BOOST_PARAMETER_lazy_default_fallback<K,F> x) const
+ {
+ return x.compute_default();
+ }
+
+ // No argument corresponding to ParameterRequirements::key_type
+ // was found if we match this overload, so unless that parameter
+ // has a default, we indicate that the actual arguments don't
+ // match the function's requirements.
+ template <class ParameterRequirements, class ArgPack>
+ static typename ParameterRequirements::has_default
+ satisfies(ParameterRequirements*, ArgPack*);
+
+ // MPL sequence support
+ typedef empty_arg_list type; // convenience
+ typedef arg_list_tag tag; // For dispatching to sequence intrinsics
+};
+
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+template<class KW>
+no_tag operator*(empty_arg_list, KW*);
+#endif
+
+// Forward declaration for arg_list::operator,
+template <class KW, class T>
+struct tagged_argument;
+
+// Forward declaration for arg_list::operator[], with
+// IS_XXX helper
+struct maybe_base;
+
+template <class T>
+struct is_maybe
+ : is_base_and_derived<maybe_base, T>
+{};
+
+template <class T>
+struct get_reference
+{
+ typedef typename T::reference type;
+};
+
+// A tuple of tagged arguments, terminated with empty_arg_list.
+// Every TaggedArg is an instance of tagged_argument<>.
+template <class TaggedArg, class Next = empty_arg_list>
+struct arg_list : Next
+{
+ typedef arg_list<TaggedArg,Next> self;
+ typedef typename TaggedArg::key_type key_type;
+
+ typedef typename is_maybe<typename TaggedArg::value_type>::type holds_maybe;
+
+ typedef typename mpl::eval_if<
+ holds_maybe
+ , get_reference<typename TaggedArg::value_type>
+ , get_reference<TaggedArg>
+ >::type reference;
+
+ typedef typename mpl::if_<
+ holds_maybe
+ , reference
+ , typename TaggedArg::value_type
+ >::type value_type;
+
+ TaggedArg arg; // Stores the argument
+
+ // Store the arguments in successive nodes of this list
+ template< // class A0, class A1, ...
+ BOOST_PP_ENUM_PARAMS(BOOST_PARAMETER_MAX_ARITY, class A)
+ >
+ arg_list( // A0& a0, A1& a1, ...
+ BOOST_PP_ENUM_BINARY_PARAMS(BOOST_PARAMETER_MAX_ARITY, A, & a)
+ )
+ : Next( // a1, a2, ...
+ BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_PARAMETER_MAX_ARITY, a)
+ , void_reference()
+ )
+ , arg(a0)
+ {}
+
+ // Create a new list by prepending arg to a copy of tail. Used
+ // when incrementally building this structure with the comma
+ // operator.
+ arg_list(TaggedArg arg, Next const& tail)
+ : Next(tail)
+ , arg(arg)
+ {}
+
+ // A metafunction class that, given a keyword and a default
+ // type, returns the appropriate result type for a keyword
+ // lookup given that default
+ struct binding
+ {
+ template <class KW, class Default, class Reference>
+ struct apply
+ {
+ typedef typename mpl::eval_if<
+ boost::is_same<KW, key_type>
+ , mpl::if_<Reference, reference, value_type>
+ , mpl::apply_wrap3<typename Next::binding, KW, Default, Reference>
+ >::type type;
+ };
+ };
+
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && !BOOST_WORKAROUND(__GNUC__, == 2)
+# if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+ friend yes_tag operator*(arg_list, key_type*);
+# define BOOST_PARAMETER_CALL_HAS_KEY(next, key) (*(next*)0 * (key*)0)
+# else
+ // Overload for key_type, so the assert below will fire if the
+ // same keyword is used again
+ static yes_tag has_key(key_type*);
+ using Next::has_key;
+
+# define BOOST_PARAMETER_CALL_HAS_KEY(next, key) next::has_key((key*)0)
+# endif
+
+ BOOST_MPL_ASSERT_MSG(
+ sizeof(BOOST_PARAMETER_CALL_HAS_KEY(Next,key_type)) == sizeof(no_tag)
+ , duplicate_keyword, (key_type)
+ );
+
+# undef BOOST_PARAMETER_CALL_HAS_KEY
+#endif
+ //
+ // Begin implementation of indexing operators for looking up
+ // specific arguments by name
+ //
+
+ // Helpers that handle the case when TaggedArg is
+ // empty<T>.
+ template <class D>
+ reference get_default(D const&, mpl::false_) const
+ {
+ return arg.value;
+ }
+
+ template <class D>
+ reference get_default(D const& d, mpl::true_) const
+ {
+ return arg.value ? arg.value.get() : arg.value.construct(d.value);
+ }
+
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \
+ || BOOST_WORKAROUND(__GNUC__, < 3) \
+ || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+ // These older compilers don't support the overload set creation
+ // idiom well, so we need to do all the return type calculation
+ // for the compiler and dispatch through an outer function template
+
+ // A metafunction class that, given a keyword, returns the base
+ // sublist whose get() function can produce the value for that
+ // key.
+ struct key_owner
+ {
+ template<class KW>
+ struct apply
+ {
+ typedef typename mpl::eval_if<
+ boost::is_same<KW, key_type>
+ , mpl::identity<arg_list<TaggedArg,Next> >
+ , mpl::apply_wrap1<typename Next::key_owner,KW>
+ >::type type;
+ };
+ };
+
+ // Outer indexing operators that dispatch to the right node's
+ // get() function.
+ template <class KW>
+ typename mpl::apply_wrap3<binding, KW, void_, mpl::true_>::type
+ operator[](keyword<KW> const& x) const
+ {
+ typename mpl::apply_wrap1<key_owner, KW>::type const& sublist = *this;
+ return sublist.get(x);
+ }
+
+ template <class KW, class Default>
+ typename mpl::apply_wrap3<binding, KW, Default&, mpl::true_>::type
+ operator[](default_<KW, Default> x) const
+ {
+ typename mpl::apply_wrap1<key_owner, KW>::type const& sublist = *this;
+ return sublist.get(x);
+ }
+
+ template <class KW, class F>
+ typename mpl::apply_wrap3<
+ binding,KW
+ , typename result_of0<F>::type
+ , mpl::true_
+ >::type
+ operator[](lazy_default<KW,F> x) const
+ {
+ typename mpl::apply_wrap1<key_owner, KW>::type const& sublist = *this;
+ return sublist.get(x);
+ }
+
+ // These just return the stored value; when empty_arg_list is
+ // reached, indicating no matching argument was passed, the
+ // default is returned, or if no default_ or lazy_default was
+ // passed, compilation fails.
+ reference get(keyword<key_type> const&) const
+ {
+ BOOST_MPL_ASSERT_NOT((holds_maybe));
+ return arg.value;
+ }
+
+ template <class Default>
+ reference get(default_<key_type,Default> const& d) const
+ {
+ return get_default(d, holds_maybe());
+ }
+
+ template <class Default>
+ reference get(lazy_default<key_type, Default>) const
+ {
+ return arg.value;
+ }
+
+#else
+
+ reference operator[](keyword<key_type> const&) const
+ {
+ BOOST_MPL_ASSERT_NOT((holds_maybe));
+ return arg.value;
+ }
+
+ template <class Default>
+ reference operator[](default_<key_type, Default> const& d) const
+ {
+ return get_default(d, holds_maybe());
+ }
+
+ template <class Default>
+ reference operator[](lazy_default<key_type, Default>) const
+ {
+ return arg.value;
+ }
+
+ // Builds an overload set including operator[]s defined in base
+ // classes.
+ using Next::operator[];
+
+ //
+ // End of indexing support
+ //
+
+
+ //
+ // For parameter_requirements matching this node's key_type,
+ // return a bool constant wrapper indicating whether the
+ // requirements are satisfied by TaggedArg. Used only for
+ // compile-time computation and never really called, so a
+ // declaration is enough.
+ //
+ template <class HasDefault, class Predicate, class ArgPack>
+ static typename mpl::apply_wrap2<
+ typename mpl::lambda<Predicate, lambda_tag>::type
+ , value_type, ArgPack
+ >::type
+ satisfies(
+ parameter_requirements<key_type,Predicate,HasDefault>*
+ , ArgPack*
+ );
+
+ // Builds an overload set including satisfies functions defined
+ // in base classes.
+ using Next::satisfies;
+#endif
+
+ // Comma operator to compose argument list without using parameters<>.
+ // Useful for argument lists with undetermined length.
+ template <class KW, class T2>
+ arg_list<tagged_argument<KW, T2>, self>
+ operator,(tagged_argument<KW,T2> x) const
+ {
+ return arg_list<tagged_argument<KW,T2>, self>(x, *this);
+ }
+
+ // MPL sequence support
+ typedef self type; // Convenience for users
+ typedef Next tail_type; // For the benefit of iterators
+ typedef arg_list_tag tag; // For dispatching to sequence intrinsics
+};
+
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) // ETI workaround
+template <> struct arg_list<int,int> {};
+#endif
+
+// MPL sequence support
+template <class ArgumentPack>
+struct arg_list_iterator
+{
+ typedef mpl::forward_iterator_tag category;
+
+ // The incremented iterator
+ typedef arg_list_iterator<typename ArgumentPack::tail_type> next;
+
+ // dereferencing yields the key type
+ typedef typename ArgumentPack::key_type type;
+};
+
+template <>
+struct arg_list_iterator<empty_arg_list> {};
+
+}} // namespace parameter::aux
+
+// MPL sequence support
+namespace mpl
+{
+ template <>
+ struct begin_impl<parameter::aux::arg_list_tag>
+ {
+ template <class S>
+ struct apply
+ {
+ typedef parameter::aux::arg_list_iterator<S> type;
+ };
+ };
+
+ template <>
+ struct end_impl<parameter::aux::arg_list_tag>
+ {
+ template <class>
+ struct apply
+ {
+ typedef parameter::aux::arg_list_iterator<parameter::aux::empty_arg_list> type;
+ };
+ };
+}
+
+} // namespace boost
+
+#endif // ARG_LIST_050329_HPP
+
diff --git a/boost/boost/parameter/aux_/cast.hpp b/boost/boost/parameter/aux_/cast.hpp
new file mode 100644
index 00000000000..5c55b6628de
--- /dev/null
+++ b/boost/boost/parameter/aux_/cast.hpp
@@ -0,0 +1,129 @@
+// Copyright Daniel Wallin 2006. Use, modification and distribution is
+// 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)
+
+#ifndef BOOST_PARAMETER_CAST_060902_HPP
+# define BOOST_PARAMETER_CAST_060902_HPP
+
+# if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
+ && !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+# include <boost/type_traits/add_reference.hpp>
+# include <boost/type_traits/remove_const.hpp>
+# endif
+
+namespace boost { namespace parameter { namespace aux {
+
+struct use_default_tag {};
+
+# if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
+ || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+
+# define BOOST_PARAMETER_FUNCTION_CAST(value, predicate) value
+
+# else
+
+// Handles possible implicit casts. Used by preprocessor.hpp to
+// normalize user input.
+//
+// cast<void*>::execute() is identity
+// cast<void*(X)>::execute() is identity
+// cast<void(X)>::execute() casts to X
+//
+// preprocessor.hpp uses this like this:
+//
+// #define X(value, predicate)
+// cast<void predicate>::execute(value)
+//
+// X(something, *)
+// X(something, *(predicate))
+// X(something, (int))
+
+template <class T>
+struct cast;
+
+template <>
+struct cast<void*>
+{
+ static use_default_tag execute(use_default_tag)
+ {
+ return use_default_tag();
+ }
+
+ static use_default_tag remove_const(use_default_tag)
+ {
+ return use_default_tag();
+ }
+
+ template <class U>
+ static U& execute(U& value)
+ {
+ return value;
+ }
+
+ template <class U>
+ static U& remove_const(U& x)
+ {
+ return x;
+ }
+};
+
+#if BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x580))
+
+typedef void* voidstar;
+
+template <class T>
+struct cast<voidstar(T)>
+ : cast<void*>
+{
+};
+
+#else
+
+template <class T>
+struct cast<void*(T)>
+ : cast<void*>
+{
+};
+
+#endif
+
+template <class T>
+struct cast<void(T)>
+{
+ typedef typename boost::add_reference<
+ typename boost::remove_const<T>::type
+ >::type reference;
+
+ static use_default_tag execute(use_default_tag)
+ {
+ return use_default_tag();
+ }
+
+ static use_default_tag remove_const(use_default_tag)
+ {
+ return use_default_tag();
+ }
+
+ static T execute(T value)
+ {
+ return value;
+ }
+
+ template <class U>
+ static reference remove_const(U const& x)
+ {
+ return const_cast<reference>(x);
+ }
+};
+
+# define BOOST_PARAMETER_FUNCTION_CAST(value, predicate) \
+ boost::parameter::aux::cast<void predicate>::remove_const( \
+ boost::parameter::aux::cast<void predicate>::execute(value) \
+ )
+
+# endif
+
+}}} // namespace boost::parameter::aux
+
+#endif // BOOST_PARAMETER_CAST_060902_HPP
+
diff --git a/boost/boost/parameter/aux_/default.hpp b/boost/boost/parameter/aux_/default.hpp
new file mode 100644
index 00000000000..ee90b955e28
--- /dev/null
+++ b/boost/boost/parameter/aux_/default.hpp
@@ -0,0 +1,67 @@
+// Copyright Daniel Wallin, David Abrahams 2005. Use, modification and
+// distribution is 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)
+
+#ifndef DEFAULT_050329_HPP
+#define DEFAULT_050329_HPP
+
+namespace boost { namespace parameter { namespace aux {
+
+// A wrapper for the default value passed by the user when resolving
+// the value of the parameter with the given Keyword
+template <class Keyword, class Value>
+struct default_
+{
+ default_(Value& x)
+ : value(x)
+ {}
+
+ Value& value;
+};
+
+//
+// lazy_default --
+//
+// A wrapper for the default value computation function passed by
+// the user when resolving the value of the parameter with the
+// given keyword
+//
+#if BOOST_WORKAROUND(__EDG_VERSION__, <= 300)
+// These compilers need a little extra help with overload
+// resolution; we have empty_arg_list's operator[] accept a base
+// class to make that overload less preferable.
+template <class KW, class DefaultComputer>
+struct lazy_default_base
+{
+ lazy_default_base(DefaultComputer const& x)
+ : compute_default(x)
+ {}
+ DefaultComputer const& compute_default;
+};
+
+template <class KW, class DefaultComputer>
+struct lazy_default
+ : lazy_default_base<KW,DefaultComputer>
+ {
+ lazy_default(DefaultComputer const & x)
+ : lazy_default_base<KW,DefaultComputer>(x)
+ {}
+ };
+# define BOOST_PARAMETER_lazy_default_fallback lazy_default_base
+#else
+template <class KW, class DefaultComputer>
+struct lazy_default
+{
+ lazy_default(const DefaultComputer& x)
+ : compute_default(x)
+ {}
+ DefaultComputer const& compute_default;
+};
+# define BOOST_PARAMETER_lazy_default_fallback lazy_default
+#endif
+
+}}} // namespace boost::parameter::aux
+
+#endif // DEFAULT_050329_HPP
+
diff --git a/boost/boost/parameter/aux_/maybe.hpp b/boost/boost/parameter/aux_/maybe.hpp
new file mode 100644
index 00000000000..7728d7b952c
--- /dev/null
+++ b/boost/boost/parameter/aux_/maybe.hpp
@@ -0,0 +1,98 @@
+// Copyright Daniel Wallin 2006. Use, modification and distribution is
+// 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)
+
+#ifndef BOOST_PARAMETER_MAYBE_060211_HPP
+# define BOOST_PARAMETER_MAYBE_060211_HPP
+
+# include <boost/mpl/if.hpp>
+# include <boost/mpl/identity.hpp>
+# include <boost/type_traits/is_reference.hpp>
+# include <boost/type_traits/add_reference.hpp>
+# include <boost/optional.hpp>
+# include <boost/python/detail/referent_storage.hpp>
+# include <boost/type_traits/remove_cv.hpp>
+# include <boost/type_traits/add_const.hpp>
+
+namespace boost { namespace parameter { namespace aux {
+
+struct maybe_base {};
+
+template <class T>
+struct maybe : maybe_base
+{
+ typedef typename add_reference<
+# if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+ T const
+# else
+ typename add_const<T>::type
+# endif
+ >::type reference;
+
+ typedef typename remove_cv<
+ BOOST_DEDUCED_TYPENAME remove_reference<reference>::type
+ >::type non_cv_value;
+
+ explicit maybe(T value)
+ : value(value)
+ , constructed(false)
+ {}
+
+ maybe()
+ : constructed(false)
+ {}
+
+ ~maybe()
+ {
+ if (constructed)
+ this->destroy();
+ }
+
+ reference construct(reference value) const
+ {
+ return value;
+ }
+
+ template <class U>
+ reference construct2(U const& value) const
+ {
+ new (m_storage.bytes) non_cv_value(value);
+ constructed = true;
+ return *(non_cv_value*)m_storage.bytes;
+ }
+
+ template <class U>
+ reference construct(U const& value) const
+ {
+ return this->construct2(value);
+ }
+
+ void destroy()
+ {
+ ((non_cv_value*)m_storage.bytes)->~non_cv_value();
+ }
+
+ typedef reference(maybe<T>::*safe_bool)() const;
+
+ operator safe_bool() const
+ {
+ return value ? &maybe<T>::get : 0 ;
+ }
+
+ reference get() const
+ {
+ return value.get();
+ }
+
+private:
+ boost::optional<T> value;
+ mutable bool constructed;
+ mutable typename boost::python::detail::referent_storage<
+ reference
+ >::type m_storage;
+};
+
+}}} // namespace boost::parameter::aux
+
+#endif // BOOST_PARAMETER_MAYBE_060211_HPP
+
diff --git a/boost/boost/parameter/aux_/overloads.hpp b/boost/boost/parameter/aux_/overloads.hpp
new file mode 100644
index 00000000000..dcc92d4d756
--- /dev/null
+++ b/boost/boost/parameter/aux_/overloads.hpp
@@ -0,0 +1,88 @@
+// Copyright David Abrahams, Daniel Wallin 2003. Use, modification and
+// distribution is 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 generates overloads in this format:
+//
+// template<class A0, class A1>
+// typename mpl::apply_wrap1<
+// aux::make_arg_list<
+// PS0,A0
+// , aux::make_arg_list<
+// PS1,A1
+// , mpl::identity<aux::empty_arg_list>
+// >
+// >
+// , unnamed_list
+// >::type
+// operator()(A0 const& a0, A1 const& a1) const
+// {
+// typedef typename mpl::apply_wrap1<
+// aux::make_arg_list<
+// PS0,A0
+// , aux::make_arg_list<
+// PS1,A1
+// , mpl::identity<aux::empty_arg_list>
+// >
+// >
+// >::type arg_tuple;
+//
+// return arg_tuple(
+// a0
+// , a1
+// , aux::void_()
+// ...
+// );
+// }
+//
+
+#if !defined(BOOST_PP_IS_ITERATING)
+# error Boost.Parameters - do not include this file!
+#endif
+
+#define N BOOST_PP_ITERATION()
+
+#define BOOST_PARAMETER_open_list(z, n, text) \
+ aux::item< \
+ BOOST_PP_CAT(PS, n), BOOST_PP_CAT(A, n)
+
+#define BOOST_PARAMETER_close_list(z, n, text) >
+
+#define BOOST_PARAMETER_arg_list(n) \
+ aux::make_arg_list< \
+ BOOST_PP_ENUM(N, BOOST_PARAMETER_open_list, _) \
+ , void_ \
+ BOOST_PP_REPEAT(N, BOOST_PARAMETER_close_list, _) \
+ , deduced_list \
+ , aux::tag_keyword_arg \
+ >
+
+#define BOOST_PARAMETER_arg_pack_init(z, n, limit) \
+ BOOST_PP_CAT(a, BOOST_PP_SUB(limit,n))
+
+template<BOOST_PP_ENUM_PARAMS(N, class A)>
+typename mpl::first<
+ typename BOOST_PARAMETER_arg_list(N)::type
+>::type
+operator()(BOOST_PP_ENUM_BINARY_PARAMS(N, A, & a)) const
+{
+ typedef typename BOOST_PARAMETER_arg_list(N)::type result;
+
+ typedef typename mpl::first<result>::type result_type;
+ typedef typename mpl::second<result>::type error;
+ error();
+
+ return result_type(
+ BOOST_PP_ENUM(N, BOOST_PARAMETER_arg_pack_init, BOOST_PP_DEC(N))
+ BOOST_PP_ENUM_TRAILING_PARAMS(
+ BOOST_PP_SUB(BOOST_PARAMETER_MAX_ARITY, N)
+ , aux::void_reference() BOOST_PP_INTERCEPT
+ ));
+}
+
+#undef BOOST_PARAMETER_arg_list
+#undef BOOST_PARAMETER_open_list
+#undef BOOST_PARAMETER_close_list
+#undef N
+
diff --git a/boost/boost/parameter/aux_/parameter_requirements.hpp b/boost/boost/parameter/aux_/parameter_requirements.hpp
new file mode 100644
index 00000000000..ad7a129dd70
--- /dev/null
+++ b/boost/boost/parameter/aux_/parameter_requirements.hpp
@@ -0,0 +1,25 @@
+// Copyright Daniel Wallin, David Abrahams 2005. Use, modification and
+// distribution is 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)
+
+#ifndef PARAMETER_REQUIREMENTS_050331_HPP
+#define PARAMETER_REQUIREMENTS_050331_HPP
+
+namespace boost { namespace parameter { namespace aux {
+
+// Used to pass static information about parameter requirements
+// through the satisfies() overload set (below). The
+// matched function is never invoked, but its type indicates whether
+// a parameter matches at compile-time
+template <class Keyword, class Predicate, class HasDefault>
+struct parameter_requirements
+{
+ typedef Keyword keyword;
+ typedef Predicate predicate;
+ typedef HasDefault has_default;
+};
+
+}}} // namespace boost::parameter::aux
+
+#endif // PARAMETER_REQUIREMENTS_050331_HPP
diff --git a/boost/boost/parameter/aux_/parenthesized_type.hpp b/boost/boost/parameter/aux_/parenthesized_type.hpp
new file mode 100644
index 00000000000..c6ddd77f313
--- /dev/null
+++ b/boost/boost/parameter/aux_/parenthesized_type.hpp
@@ -0,0 +1,119 @@
+// Copyright David Abrahams 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)
+#ifndef BOOST_PARAMETER_AUX_PARENTHESIZED_TYPE_DWA2006414_HPP
+# define BOOST_PARAMETER_AUX_PARENTHESIZED_TYPE_DWA2006414_HPP
+
+# include <boost/config.hpp>
+# include <boost/detail/workaround.hpp>
+
+namespace boost { namespace parameter { namespace aux {
+
+// A macro that takes a parenthesized C++ type name (T) and transforms
+// it into an un-parenthesized type expression equivalent to T.
+# define BOOST_PARAMETER_PARENTHESIZED_TYPE(x) \
+ boost::parameter::aux::unaryfunptr_arg_type< void(*)x >::type
+
+// A metafunction that transforms void(*)(T) -> T
+template <class UnaryFunctionPointer>
+struct unaryfunptr_arg_type;
+
+# if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+
+template <class Arg>
+struct unaryfunptr_arg_type<void(*)(Arg)>
+{
+ typedef Arg type;
+};
+
+# else
+
+// Use the "native typeof" bugfeatures of older versions of MSVC to
+// accomplish what we'd normally do with partial specialization. This
+// capability was discovered by Igor Chesnokov.
+
+# if BOOST_WORKAROUND(BOOST_MSVC, != 1300)
+
+// This version applies to VC6.5 and VC7.1 (except that we can just
+// use partial specialization for the latter in this case).
+
+// This gets used as a base class.
+template<typename Address>
+struct msvc_type_memory
+{
+ // A nullary metafunction that will yield the Value type "stored"
+ // at this Address.
+ struct storage;
+};
+
+template<typename Value, typename Address>
+struct msvc_store_type : msvc_type_memory<Address>
+{
+ // VC++ somehow lets us define the base's nested storage
+ // metafunction here, where we have the Value type we'd like to
+ // "store" in it. Later we can come back to the base class and
+ // extract the "stored type."
+ typedef msvc_type_memory<Address> location;
+ struct location::storage
+ {
+ typedef Value type;
+ };
+};
+
+# else
+
+// This slightly more complicated version of the same thing is
+// required for msvc-7.0
+template<typename Address>
+struct msvc_type_memory
+{
+ template<bool>
+ struct storage_impl;
+
+ typedef storage_impl<true> storage;
+};
+
+template<typename Value, typename Address>
+struct msvc_store_type : msvc_type_memory<Address>
+{
+ // Rather than supplying a definition for the base class' nested
+ // class, we specialize the base class' nested template
+ template<>
+ struct storage_impl<true>
+ {
+ typedef Value type;
+ };
+};
+
+# endif
+
+// Function template argument deduction does many of the same things
+// as type matching during partial specialization, so we call a
+// function template to "store" T into the type memory addressed by
+// void(*)(T).
+template <class T>
+msvc_store_type<T,void(*)(T)>
+msvc_store_argument_type(void(*)(T));
+
+template <class FunctionPointer>
+struct unaryfunptr_arg_type
+{
+ // We don't want the function to be evaluated, just instantiated,
+ // so protect it inside of sizeof.
+ enum { dummy = sizeof(msvc_store_argument_type((FunctionPointer)0)) };
+
+ // Now pull the type out of the instantiated base class
+ typedef typename msvc_type_memory<FunctionPointer>::storage::type type;
+};
+
+# endif
+
+template <>
+struct unaryfunptr_arg_type<void(*)(void)>
+{
+ typedef void type;
+};
+
+}}} // namespace boost::parameter::aux
+
+#endif // BOOST_PARAMETER_AUX_PARENTHESIZED_TYPE_DWA2006414_HPP
diff --git a/boost/boost/parameter/aux_/preprocessor/flatten.hpp b/boost/boost/parameter/aux_/preprocessor/flatten.hpp
new file mode 100644
index 00000000000..5d7615e3f35
--- /dev/null
+++ b/boost/boost/parameter/aux_/preprocessor/flatten.hpp
@@ -0,0 +1,115 @@
+// Copyright Daniel Wallin 2005. Use, modification and distribution is
+// 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)
+
+#ifndef BOOST_PARAMETER_FLATTEN_051217_HPP
+# define BOOST_PARAMETER_FLATTEN_051217_HPP
+
+# include <boost/preprocessor/tuple/elem.hpp>
+# include <boost/preprocessor/tuple/rem.hpp>
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/seq/for_each.hpp>
+# include <boost/preprocessor/seq/for_each_i.hpp>
+# include <boost/preprocessor/identity.hpp>
+# include <boost/preprocessor/selection/max.hpp>
+# include <boost/preprocessor/arithmetic/sub.hpp>
+# include <boost/preprocessor/repetition/enum_trailing.hpp>
+# include <boost/parameter/aux_/preprocessor/for_each.hpp>
+
+# define BOOST_PARAMETER_FLATTEN_SPLIT_required required,
+# define BOOST_PARAMETER_FLATTEN_SPLIT_optional optional,
+# define BOOST_PARAMETER_FLATTEN_SPLIT_deduced deduced,
+
+# define BOOST_PARAMETER_FLATTEN_SPLIT(sub) \
+ BOOST_PP_CAT(BOOST_PARAMETER_FLATTEN_SPLIT_, sub)
+
+# define BOOST_PARAMETER_FLATTEN_QUALIFIER(sub) \
+ BOOST_PP_SPLIT(0, BOOST_PARAMETER_FLATTEN_SPLIT(sub))
+
+# define BOOST_PARAMETER_FLATTEN_ARGS(sub) \
+ BOOST_PP_SPLIT(1, BOOST_PARAMETER_FLATTEN_SPLIT(sub))
+
+# define BOOST_PARAMETER_FLATTEN_ARITY_optional(arities) \
+ BOOST_PP_TUPLE_ELEM(3,0,arities)
+
+# define BOOST_PARAMETER_FLATTEN_ARITY_required(arities) \
+ BOOST_PP_TUPLE_ELEM(3,1,arities)
+
+# define BOOST_PARAMETER_FLATTEN_SPEC0_DUMMY_ELEM(z, n, data) ~
+# define BOOST_PARAMETER_FLATTEN_SPEC0(r, n, elem, data) \
+ (( \
+ BOOST_PP_TUPLE_ELEM(3,2,data) \
+ , BOOST_PP_TUPLE_REM(BOOST_PP_TUPLE_ELEM(3,0,data)) elem \
+ BOOST_PP_ENUM_TRAILING( \
+ BOOST_PP_SUB( \
+ BOOST_PP_TUPLE_ELEM(3,1,data) \
+ , BOOST_PP_TUPLE_ELEM(3,0,data) \
+ ) \
+ , BOOST_PARAMETER_FLATTEN_SPEC0_DUMMY_ELEM \
+ , ~ \
+ ) \
+ ))
+
+# define BOOST_PARAMETER_FLATTEN_SPEC_AUX(r, arity, max_arity, spec, transform) \
+ BOOST_PARAMETER_FOR_EACH_R( \
+ r \
+ , arity \
+ , BOOST_PARAMETER_FLATTEN_ARGS(spec) \
+ , (arity, max_arity, transform(BOOST_PARAMETER_FLATTEN_QUALIFIER(spec))) \
+ , BOOST_PARAMETER_FLATTEN_SPEC0 \
+ )
+
+# define BOOST_PARAMETER_FLATTEN_IDENTITY(x) x
+
+# define BOOST_PARAMETER_FLATTEN_SPEC_optional(r, arities, spec) \
+ BOOST_PARAMETER_FLATTEN_SPEC_AUX( \
+ r \
+ , BOOST_PP_CAT( \
+ BOOST_PARAMETER_FLATTEN_ARITY_, BOOST_PARAMETER_FLATTEN_QUALIFIER(spec) \
+ )(arities) \
+ , BOOST_PP_TUPLE_ELEM(3,2,arities) \
+ , spec \
+ , BOOST_PARAMETER_FLATTEN_IDENTITY \
+ )
+
+# define BOOST_PARAMETER_FLATTEN_SPEC_required(r, arities, spec) \
+ BOOST_PARAMETER_FLATTEN_SPEC_optional(r, arities, spec)
+
+# define BOOST_PARAMETER_FLATTEN_SPEC_AS_DEDUCED(x) BOOST_PP_CAT(deduced_,x)
+
+# define BOOST_PARAMETER_FLATTEN_SPEC_deduced_M(r, arities, n, spec) \
+ BOOST_PARAMETER_FLATTEN_SPEC_AUX( \
+ r \
+ , BOOST_PP_CAT( \
+ BOOST_PARAMETER_FLATTEN_ARITY_, BOOST_PARAMETER_FLATTEN_QUALIFIER(spec) \
+ )(arities) \
+ , BOOST_PP_TUPLE_ELEM(3,2,arities) \
+ , spec \
+ , BOOST_PARAMETER_FLATTEN_SPEC_AS_DEDUCED \
+ )
+
+# define BOOST_PARAMETER_FLATTEN_SPEC_deduced(r, arities, spec) \
+ BOOST_PP_SEQ_FOR_EACH_I_R( \
+ r \
+ , BOOST_PARAMETER_FLATTEN_SPEC_deduced_M \
+ , arities \
+ , BOOST_PARAMETER_FLATTEN_ARGS(spec) \
+ )
+
+# define BOOST_PARAMETER_FLATTEN_SPEC(r, arities, spec) \
+ BOOST_PP_CAT( \
+ BOOST_PARAMETER_FLATTEN_SPEC_, BOOST_PARAMETER_FLATTEN_QUALIFIER(spec) \
+ )(r, arities, spec)
+
+# define BOOST_PARAMETER_FLATTEN(optional_arity, required_arity, wanted_arity, specs) \
+ BOOST_PP_SEQ_FOR_EACH( \
+ BOOST_PARAMETER_FLATTEN_SPEC \
+ , ( \
+ optional_arity, required_arity \
+ , wanted_arity \
+ ) \
+ , specs \
+ )
+
+#endif // BOOST_PARAMETER_FLATTEN_051217_HPP
+
diff --git a/boost/boost/parameter/aux_/preprocessor/for_each.hpp b/boost/boost/parameter/aux_/preprocessor/for_each.hpp
new file mode 100644
index 00000000000..0eb1f702dbf
--- /dev/null
+++ b/boost/boost/parameter/aux_/preprocessor/for_each.hpp
@@ -0,0 +1,103 @@
+// Copyright Daniel Wallin 2005. Use, modification and distribution is
+// 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)
+
+#ifndef BOOST_PARAMETER_FOR_EACH_051217_HPP
+# define BOOST_PARAMETER_FOR_EACH_051217_HPP
+
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/detail/split.hpp>
+# include <boost/preprocessor/logical/not.hpp>
+# include <boost/preprocessor/facilities/is_empty.hpp>
+# include <boost/preprocessor/tuple/eat.hpp>
+# include <boost/preprocessor/arithmetic/inc.hpp>
+# include <boost/preprocessor/repeat.hpp>
+# include <boost/preprocessor/punctuation/comma_if.hpp>
+# include <boost/preprocessor/for.hpp>
+# include <boost/preprocessor/repetition/deduce_r.hpp>
+
+# define BOOST_PARAMETER_FOR_EACH_head_aux2(x,y) (x,y), ~
+# define BOOST_PARAMETER_FOR_EACH_head_aux3(x,y,z) (x,y,z), ~
+# define BOOST_PARAMETER_FOR_EACH_head_aux4(x,y,z,u) (x,y,z,u), ~
+# define BOOST_PARAMETER_FOR_EACH_head(n,x) \
+ BOOST_PP_SPLIT(0, BOOST_PP_CAT(BOOST_PARAMETER_FOR_EACH_head_aux,n) x)
+
+# define BOOST_PARAMETER_FOR_EACH_pred_aux_BOOST_PARAMETER_FOR_EACH_END_SENTINEL
+# define BOOST_PARAMETER_FOR_EACH_pred_aux_check(x) \
+ BOOST_PP_NOT(BOOST_PP_IS_EMPTY( \
+ BOOST_PP_CAT(BOOST_PARAMETER_FOR_EACH_pred_aux_, x) \
+ )), ~
+
+# define BOOST_PARAMETER_FOR_EACH_pred_aux2(x,y) \
+ BOOST_PARAMETER_FOR_EACH_pred_aux_check(x)
+# define BOOST_PARAMETER_FOR_EACH_pred_aux3(x,y,z) \
+ BOOST_PARAMETER_FOR_EACH_pred_aux_check(x)
+# define BOOST_PARAMETER_FOR_EACH_pred_aux4(x,y,z,u) \
+ BOOST_PARAMETER_FOR_EACH_pred_aux_check(x)
+
+# define BOOST_PARAMETER_FOR_EACH_pred_aux0(n,x) \
+ BOOST_PP_CAT(BOOST_PARAMETER_FOR_EACH_pred_aux,n) x
+
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()
+# define BOOST_PARAMETER_FOR_EACH_pred_SPLIT_FIRST(x) \
+ BOOST_PP_SPLIT(0, x)
+
+# define BOOST_PARAMETER_FOR_EACH_pred(r, state) \
+ BOOST_PARAMETER_FOR_EACH_pred_SPLIT_FIRST( \
+ BOOST_PARAMETER_FOR_EACH_pred_aux0( \
+ BOOST_PP_TUPLE_ELEM(5,3,state) \
+ , BOOST_PP_TUPLE_ELEM(5,0,state) \
+ ) \
+ )
+# else
+# define BOOST_PARAMETER_FOR_EACH_pred(r, state) \
+ BOOST_PP_SPLIT( \
+ 0 \
+ , BOOST_PARAMETER_FOR_EACH_pred_aux0( \
+ BOOST_PP_TUPLE_ELEM(5,3,state) \
+ , BOOST_PP_TUPLE_ELEM(5,0,state) \
+ ) \
+ )
+# endif
+
+# define BOOST_PARAMETER_FOR_EACH_op(r, state) \
+ ( \
+ BOOST_PP_TUPLE_EAT(BOOST_PP_TUPLE_ELEM(5,3,state)) \
+ BOOST_PP_TUPLE_ELEM(5,0,state) \
+ , BOOST_PP_TUPLE_ELEM(5,1,state) \
+ , BOOST_PP_TUPLE_ELEM(5,2,state) \
+ , BOOST_PP_TUPLE_ELEM(5,3,state) \
+ , BOOST_PP_INC(BOOST_PP_TUPLE_ELEM(5,4,state)) \
+ )
+
+# define BOOST_PARAMETER_FOR_EACH_macro(r, state) \
+ BOOST_PP_TUPLE_ELEM(5,2,state)( \
+ r \
+ , BOOST_PP_TUPLE_ELEM(5,4,state) \
+ , BOOST_PARAMETER_FOR_EACH_head( \
+ BOOST_PP_TUPLE_ELEM(5,3,state) \
+ , BOOST_PP_TUPLE_ELEM(5,0,state) \
+ ) \
+ , BOOST_PP_TUPLE_ELEM(5,1,state) \
+ )
+
+# define BOOST_PARAMETER_FOR_EACH_build_end_sentinel(z,n,text) \
+ BOOST_PP_COMMA_IF(n) BOOST_PARAMETER_FOR_EACH_END_SENTINEL
+# define BOOST_PARAMETER_FOR_EACH_build_end_sentinel_tuple(arity) \
+ ( \
+ BOOST_PP_REPEAT(arity, BOOST_PARAMETER_FOR_EACH_build_end_sentinel, _) \
+ )
+
+# define BOOST_PARAMETER_FOR_EACH_R(r, arity, list, data, macro) \
+ BOOST_PP_CAT(BOOST_PP_FOR_, r)( \
+ (list BOOST_PARAMETER_FOR_EACH_build_end_sentinel_tuple(arity), data, macro, arity, 0) \
+ , BOOST_PARAMETER_FOR_EACH_pred \
+ , BOOST_PARAMETER_FOR_EACH_op \
+ , BOOST_PARAMETER_FOR_EACH_macro \
+ )
+
+# define BOOST_PARAMETER_FOR_EACH(arity, list, data, macro) \
+ BOOST_PARAMETER_FOR_EACH_R(BOOST_PP_DEDUCE_R(), arity, list, data, macro)
+
+#endif // BOOST_PARAMETER_FOR_EACH_051217_HPP
+
diff --git a/boost/boost/parameter/aux_/python/invoker.hpp b/boost/boost/parameter/aux_/python/invoker.hpp
new file mode 100644
index 00000000000..57a585fd7ed
--- /dev/null
+++ b/boost/boost/parameter/aux_/python/invoker.hpp
@@ -0,0 +1,131 @@
+// Copyright Daniel Wallin 2005. Use, modification and distribution is
+// 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)
+
+#ifndef BOOST_PARAMETER_INVOKER_051210_HPP
+# define BOOST_PARAMETER_INVOKER_051210_HPP
+
+# include <boost/mpl/begin.hpp>
+# include <boost/mpl/next.hpp>
+# include <boost/mpl/deref.hpp>
+# include <boost/parameter/keyword.hpp>
+# include <boost/preprocessor/iteration/iterate.hpp>
+
+namespace boost { namespace parameter { namespace python { namespace aux {
+
+template <long Arity, class M, class R, class Args>
+struct invoker;
+
+template <class M, class R>
+struct make_invoker
+{
+ template <class Args>
+ struct apply
+ {
+ typedef invoker<
+ mpl::size<Args>::value, M, R, Args
+ > type;
+ };
+};
+
+template <long Arity, class M, class R, class T, class Args>
+struct member_invoker;
+
+template <class M, class R, class T>
+struct make_member_invoker
+{
+ template <class Args>
+ struct apply
+ {
+ typedef member_invoker<
+ mpl::size<Args>::value, M, R, T, Args
+ > type;
+ };
+};
+
+template <long Arity, class T, class R, class Args>
+struct call_invoker;
+
+template <class T, class R>
+struct make_call_invoker
+{
+ template <class Args>
+ struct apply
+ {
+ typedef call_invoker<
+ mpl::size<Args>::value, T, R, Args
+ > type;
+ };
+};
+
+template <long Arity, class T, class Args>
+struct init_invoker;
+
+template <class T>
+struct make_init_invoker
+{
+ template <class Args>
+ struct apply
+ {
+ typedef init_invoker<
+ mpl::size<Args>::value, T, Args
+ > type;
+ };
+};
+
+template <class M, class R, class Args>
+struct invoker<0, M, R, Args>
+{
+ static R execute()
+ {
+ return M()(boost::type<R>());
+ }
+};
+
+template <class M, class R, class T, class Args>
+struct member_invoker<0, M, R, T, Args>
+{
+ static R execute(T& self)
+ {
+ return M()(boost::type<R>(), self);
+ }
+};
+
+template <class T, class R, class Args>
+struct call_invoker<0, T, R, Args>
+{
+ static R execute(T& self)
+ {
+ return self();
+ }
+};
+
+template <class T, class Args>
+struct init_invoker<0, T, Args>
+{
+ static T* execute(T& self)
+ {
+ return new T;
+ }
+};
+
+# define BOOST_PP_ITERATION_PARAMS_1 (4, \
+ (1, BOOST_PARAMETER_MAX_ARITY, <boost/parameter/aux_/python/invoker_iterate.hpp>, 1))
+# include BOOST_PP_ITERATE()
+
+# define BOOST_PP_ITERATION_PARAMS_1 (4, \
+ (1, BOOST_PARAMETER_MAX_ARITY, <boost/parameter/aux_/python/invoker_iterate.hpp>, 2))
+# include BOOST_PP_ITERATE()
+
+# define BOOST_PP_ITERATION_PARAMS_1 (4, \
+ (1, BOOST_PARAMETER_MAX_ARITY, <boost/parameter/aux_/python/invoker_iterate.hpp>, 3))
+# include BOOST_PP_ITERATE()
+
+# define BOOST_PP_ITERATION_PARAMS_1 (4, \
+ (1, BOOST_PARAMETER_MAX_ARITY, <boost/parameter/aux_/python/invoker_iterate.hpp>, 4))
+# include BOOST_PP_ITERATE()
+
+}}}} // namespace boost::parameter::python::aux
+
+#endif // BOOST_PARAMETER_INVOKER_051210_HPP
+
diff --git a/boost/boost/parameter/aux_/python/invoker_iterate.hpp b/boost/boost/parameter/aux_/python/invoker_iterate.hpp
new file mode 100644
index 00000000000..c18f6d0bbb4
--- /dev/null
+++ b/boost/boost/parameter/aux_/python/invoker_iterate.hpp
@@ -0,0 +1,93 @@
+// Copyright Daniel Wallin 2005. Use, modification and distribution is
+// 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)
+
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/dec.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+
+#define N BOOST_PP_ITERATION()
+
+#define BOOST_PARAMETER_PY_ARG_TYPES(z, n, _) \
+ typedef typename mpl::next< \
+ BOOST_PP_CAT(iter,BOOST_PP_DEC(n)) \
+ >::type BOOST_PP_CAT(iter,n); \
+ \
+ typedef typename mpl::deref<BOOST_PP_CAT(iter,n)>::type BOOST_PP_CAT(spec,n); \
+ typedef typename mpl::if_< \
+ mpl::and_< \
+ mpl::not_<typename BOOST_PP_CAT(spec,n)::required> \
+ , typename BOOST_PP_CAT(spec,n)::optimized_default \
+ > \
+ , parameter::aux::maybe<typename BOOST_PP_CAT(spec,n)::type> \
+ , typename BOOST_PP_CAT(spec,n)::type \
+ >::type BOOST_PP_CAT(arg,n); \
+ typedef typename BOOST_PP_CAT(spec,n)::keyword BOOST_PP_CAT(kw,n);
+
+#if BOOST_PP_ITERATION_FLAGS() == 1
+template <class M, class R, class Args>
+struct invoker<N, M, R, Args>
+#elif BOOST_PP_ITERATION_FLAGS() == 2
+template <class T, class R, class Args>
+struct call_invoker<N, T, R, Args>
+#elif BOOST_PP_ITERATION_FLAGS() == 3
+template <class T, class Args>
+struct init_invoker<N, T, Args>
+#elif BOOST_PP_ITERATION_FLAGS() == 4
+template <class M, class R, class T, class Args>
+struct member_invoker<N, M, R, T, Args>
+#endif
+{
+ typedef typename mpl::begin<Args>::type iter0;
+ typedef typename mpl::deref<iter0>::type spec0;
+ typedef typename mpl::if_<
+ mpl::and_<
+ mpl::not_<typename spec0::required>
+ , typename spec0::optimized_default
+ >
+ , parameter::aux::maybe<typename spec0::type>
+ , typename spec0::type
+ >::type arg0;
+ typedef typename spec0::keyword kw0;
+
+ BOOST_PP_REPEAT_FROM_TO(1, N, BOOST_PARAMETER_PY_ARG_TYPES, ~)
+
+ static
+#if BOOST_PP_ITERATION_FLAGS() == 3
+ T*
+#else
+ R
+#endif
+ execute(
+#if BOOST_PP_ITERATION_FLAGS() == 2 || BOOST_PP_ITERATION_FLAGS() == 4
+ T& self
+ ,
+#endif
+ BOOST_PP_ENUM_BINARY_PARAMS(N, arg, a)
+ )
+ {
+ return
+#if BOOST_PP_ITERATION_FLAGS() == 1 || BOOST_PP_ITERATION_FLAGS() == 4
+ M()(
+ boost::type<R>()
+# if BOOST_PP_ITERATION_FLAGS() == 4
+ , self
+# endif
+ , BOOST_PP_ENUM_BINARY_PARAMS(N, parameter::keyword<kw, >::get() = a)
+ );
+#elif BOOST_PP_ITERATION_FLAGS() == 2
+ self(
+ BOOST_PP_ENUM_BINARY_PARAMS(N, parameter::keyword<kw, >::get() = a)
+ );
+#elif BOOST_PP_ITERATION_FLAGS() == 3
+ new T(
+ BOOST_PP_ENUM_BINARY_PARAMS(N, parameter::keyword<kw, >::get() = a)
+ );
+#endif
+ }
+};
+
+#undef BOOST_PARAMETER_PY_ARG_TYPES
+#undef N
+
diff --git a/boost/boost/parameter/aux_/result_of0.hpp b/boost/boost/parameter/aux_/result_of0.hpp
new file mode 100644
index 00000000000..e0096148b47
--- /dev/null
+++ b/boost/boost/parameter/aux_/result_of0.hpp
@@ -0,0 +1,36 @@
+// Copyright David Abrahams 2005. 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_PARAMETER_AUX_RESULT_OF0_DWA2005511_HPP
+# define BOOST_PARAMETER_AUX_RESULT_OF0_DWA2005511_HPP
+
+# include <boost/utility/result_of.hpp>
+
+// A metafunction returning the result of invoking a nullary function
+// object of the given type.
+
+#ifndef BOOST_NO_RESULT_OF
+
+# include <boost/utility/result_of.hpp>
+namespace boost { namespace parameter { namespace aux {
+template <class F>
+struct result_of0 : result_of<F()>
+{};
+
+}}} // namespace boost::parameter::aux_
+
+#else
+
+namespace boost { namespace parameter { namespace aux {
+template <class F>
+struct result_of0
+{
+ typedef typename F::result_type type;
+};
+
+}}} // namespace boost::parameter::aux_
+
+#endif
+
+
+#endif // BOOST_PARAMETER_AUX_RESULT_OF0_DWA2005511_HPP
diff --git a/boost/boost/parameter/aux_/set.hpp b/boost/boost/parameter/aux_/set.hpp
new file mode 100644
index 00000000000..46c93746413
--- /dev/null
+++ b/boost/boost/parameter/aux_/set.hpp
@@ -0,0 +1,65 @@
+// Copyright Daniel Wallin 2006. Use, modification and distribution is
+// 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)
+
+#ifndef BOOST_PARAMETER_SET_060912_HPP
+# define BOOST_PARAMETER_SET_060912_HPP
+
+# if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) \
+ && !BOOST_WORKAROUND(__GNUC__, < 3)
+# include <boost/mpl/insert.hpp>
+# include <boost/mpl/set/set0.hpp>
+# include <boost/mpl/has_key.hpp>
+
+namespace boost { namespace parameter { namespace aux {
+
+typedef mpl::set0<> set0;
+
+template <class Set, class K>
+struct insert_
+{
+ typedef typename mpl::insert<Set, K>::type type;
+};
+
+template <class Set, class K>
+struct has_key_
+{
+ typedef typename mpl::has_key<Set, K>::type type;
+};
+
+}}} // namespace boost::parameter::aux
+
+# else
+
+# include <boost/mpl/list.hpp>
+# include <boost/mpl/end.hpp>
+# include <boost/mpl/find.hpp>
+# include <boost/mpl/not.hpp>
+# include <boost/mpl/push_front.hpp>
+
+namespace boost { namespace parameter { namespace aux {
+
+typedef mpl::list0<> set0;
+
+template <class Set, class K>
+struct insert_
+{
+ typedef typename mpl::push_front<Set, K>::type type;
+};
+
+template <class Set, class K>
+struct has_key_
+{
+ typedef typename mpl::find<Set, K>::type iter;
+ typedef mpl::not_<
+ is_same<iter, typename mpl::end<Set>::type>
+ > type;
+};
+
+}}} // namespace boost::parameter::aux
+
+# endif
+
+
+#endif // BOOST_PARAMETER_SET_060912_HPP
+
diff --git a/boost/boost/parameter/aux_/tag.hpp b/boost/boost/parameter/aux_/tag.hpp
new file mode 100644
index 00000000000..475efb9e4ac
--- /dev/null
+++ b/boost/boost/parameter/aux_/tag.hpp
@@ -0,0 +1,38 @@
+// Copyright David Abrahams 2005. 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_PARAMETER_AUX_TAG_DWA2005610_HPP
+# define BOOST_PARAMETER_AUX_TAG_DWA2005610_HPP
+
+# include <boost/parameter/aux_/unwrap_cv_reference.hpp>
+# include <boost/parameter/aux_/tagged_argument.hpp>
+
+namespace boost { namespace parameter { namespace aux {
+
+template <class Keyword, class ActualArg
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+ , class = typename is_cv_reference_wrapper<ActualArg>::type
+#endif
+ >
+struct tag
+{
+ typedef tagged_argument<
+ Keyword
+ , typename unwrap_cv_reference<ActualArg>::type
+ > type;
+};
+
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+template <class Keyword, class ActualArg>
+struct tag<Keyword,ActualArg,mpl::false_>
+{
+ typedef tagged_argument<
+ Keyword
+ , ActualArg
+ > type;
+};
+#endif
+
+}}} // namespace boost::parameter::aux_
+
+#endif // BOOST_PARAMETER_AUX_TAG_DWA2005610_HPP
diff --git a/boost/boost/parameter/aux_/tagged_argument.hpp b/boost/boost/parameter/aux_/tagged_argument.hpp
new file mode 100644
index 00000000000..5687158abd3
--- /dev/null
+++ b/boost/boost/parameter/aux_/tagged_argument.hpp
@@ -0,0 +1,187 @@
+// Copyright Daniel Wallin, David Abrahams 2005. Use, modification and
+// distribution is 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)
+
+#ifndef BOOST_PARAMETER_TAGGED_ARGUMENT_050328_HPP
+# define BOOST_PARAMETER_TAGGED_ARGUMENT_050328_HPP
+
+# include <boost/parameter/aux_/void.hpp>
+# include <boost/parameter/aux_/arg_list.hpp>
+# include <boost/parameter/aux_/result_of0.hpp>
+# include <boost/mpl/if.hpp>
+# include <boost/mpl/apply_wrap.hpp>
+# include <boost/mpl/and.hpp>
+# include <boost/mpl/not.hpp>
+# include <boost/type_traits/is_same.hpp>
+# include <boost/type_traits/is_reference.hpp>
+
+namespace boost { namespace parameter { namespace aux {
+
+struct empty_arg_list;
+struct arg_list_tag;
+
+struct tagged_argument_base {};
+
+// Holds a reference to an argument of type Arg associated with
+// keyword Keyword
+
+template <class Keyword, class Arg>
+struct tagged_argument : tagged_argument_base
+{
+ typedef Keyword key_type;
+ typedef Arg value_type;
+ typedef Arg& reference;
+
+ tagged_argument(reference x) : value(x) {}
+
+ // A metafunction class that, given a keyword and a default
+ // type, returns the appropriate result type for a keyword
+ // lookup given that default
+ struct binding
+ {
+ template <class KW, class Default, class Reference>
+ struct apply
+ {
+ typedef typename mpl::eval_if<
+ boost::is_same<KW, key_type>
+ , mpl::if_<Reference, reference, value_type>
+ , mpl::identity<Default>
+ >::type type;
+ };
+ };
+
+ // Comma operator to compose argument list without using parameters<>.
+ // Useful for argument lists with undetermined length.
+ template <class Keyword2, class Arg2>
+ arg_list<
+ tagged_argument<Keyword, Arg>
+ , arg_list<tagged_argument<Keyword2, Arg2> >
+ >
+ operator,(tagged_argument<Keyword2, Arg2> x) const
+ {
+ return arg_list<
+ tagged_argument<Keyword, Arg>
+ , arg_list<tagged_argument<Keyword2, Arg2> >
+ >(
+ *this
+ , arg_list<tagged_argument<Keyword2, Arg2> >(x, empty_arg_list())
+ );
+ }
+
+ reference operator[](keyword<Keyword> const&) const
+ {
+ return value;
+ }
+
+# if defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+ template <class KW, class Default>
+ Default& get_with_default(default_<KW,Default> const& x, int) const
+ {
+ return x.value;
+ }
+
+ template <class Default>
+ reference get_with_default(default_<key_type,Default> const&, long) const
+ {
+ return value;
+ }
+
+ template <class KW, class Default>
+ typename mpl::apply_wrap3<binding, KW, Default&, mpl::true_>::type
+ operator[](default_<KW,Default> const& x) const
+ {
+ return get_with_default(x, 0L);
+ }
+
+ template <class KW, class F>
+ typename result_of0<F>::type
+ get_with_lazy_default(lazy_default<KW,F> const& x, int) const
+ {
+ return x.compute_default();
+ }
+
+ template <class F>
+ reference get_with_lazy_default(lazy_default<key_type,F> const&, long) const
+ {
+ return value;
+ }
+
+ template <class KW, class F>
+ typename mpl::apply_wrap3<
+ binding,KW
+ , typename result_of0<F>::type
+ , mpl::true_
+ >::type
+ operator[](lazy_default<KW,F> const& x) const
+ {
+ return get_with_lazy_default(x, 0L);
+ }
+# else
+ template <class Default>
+ reference operator[](default_<key_type,Default> const& x) const
+ {
+ return value;
+ }
+
+ template <class F>
+ reference operator[](lazy_default<key_type,F> const& x) const
+ {
+ return value;
+ }
+
+ template <class KW, class Default>
+ Default& operator[](default_<KW,Default> const& x) const
+ {
+ return x.value;
+ }
+
+ template <class KW, class F>
+ typename result_of0<F>::type operator[](lazy_default<KW,F> const& x) const
+ {
+ return x.compute_default();
+ }
+
+ template <class ParameterRequirements>
+ static typename ParameterRequirements::has_default
+ satisfies(ParameterRequirements*);
+
+ template <class HasDefault, class Predicate>
+ static typename mpl::apply1<Predicate, value_type>::type
+ satisfies(
+ parameter_requirements<key_type,Predicate,HasDefault>*
+ );
+# endif
+
+ reference value;
+# if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1310))
+ // warning suppression
+ private:
+ void operator=(tagged_argument const&);
+ public:
+# endif
+ // MPL sequence support
+ typedef tagged_argument type; // Convenience for users
+ typedef empty_arg_list tail_type; // For the benefit of iterators
+ typedef arg_list_tag tag; // For dispatching to sequence intrinsics
+};
+
+// Defines a metafunction, is_tagged_argument, that identifies
+// tagged_argument specializations and their derived classes.
+template <class T>
+struct is_tagged_argument_aux
+ : is_convertible<T*,tagged_argument_base const*>
+{};
+
+template <class T>
+struct is_tagged_argument
+ : mpl::and_<
+ mpl::not_<is_reference<T> >
+ , is_tagged_argument_aux<T>
+ >
+{};
+
+}}} // namespace boost::parameter::aux
+
+#endif // BOOST_PARAMETER_TAGGED_ARGUMENT_050328_HPP
+
diff --git a/boost/boost/parameter/aux_/template_keyword.hpp b/boost/boost/parameter/aux_/template_keyword.hpp
new file mode 100644
index 00000000000..5a02f008a32
--- /dev/null
+++ b/boost/boost/parameter/aux_/template_keyword.hpp
@@ -0,0 +1,47 @@
+// Copyright Daniel Wallin 2006. Use, modification and distribution is
+// 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)
+
+#ifndef BOOST_PARAMETER_TEMPLATE_KEYWORD_060203_HPP
+# define BOOST_PARAMETER_TEMPLATE_KEYWORD_060203_HPP
+
+# include <boost/mpl/and.hpp>
+# include <boost/mpl/not.hpp>
+# include <boost/type_traits/is_convertible.hpp>
+# include <boost/type_traits/is_reference.hpp>
+
+namespace boost { namespace parameter {
+
+namespace aux
+{
+
+ struct template_keyword_tag {};
+
+ template <class T, class U>
+ struct is_pointer_convertible
+ : is_convertible<T*, U*>
+ {};
+
+ template <class T>
+ struct is_template_keyword
+ : mpl::and_<
+ mpl::not_<is_reference<T> >
+ , is_pointer_convertible<T, template_keyword_tag>
+ >
+ {};
+
+} // namespace aux
+
+template <class Tag, class T>
+struct template_keyword
+ : aux::template_keyword_tag
+{
+ typedef Tag key_type;
+ typedef T value_type;
+ typedef value_type reference;
+};
+
+}} // namespace boost::parameter
+
+#endif // BOOST_PARAMETER_TEMPLATE_KEYWORD_060203_HPP
+
diff --git a/boost/boost/parameter/aux_/unwrap_cv_reference.hpp b/boost/boost/parameter/aux_/unwrap_cv_reference.hpp
new file mode 100644
index 00000000000..e7aa0c1d3a5
--- /dev/null
+++ b/boost/boost/parameter/aux_/unwrap_cv_reference.hpp
@@ -0,0 +1,97 @@
+// Copyright Daniel Wallin, David Abrahams 2005. Use, modification and
+// distribution is 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)
+
+#ifndef UNWRAP_CV_REFERENCE_050328_HPP
+#define UNWRAP_CV_REFERENCE_050328_HPP
+
+#include <boost/parameter/aux_/yesno.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/eval_if.hpp>
+
+namespace boost { template<class T> class reference_wrapper; }
+
+namespace boost { namespace parameter { namespace aux {
+
+//
+// reference_wrapper support -- because of the forwarding problem,
+// when passing arguments positionally by non-const reference, we
+// ask users of named parameter interfaces to use ref(x) to wrap
+// them.
+//
+
+// is_cv_reference_wrapper returns mpl::true_ if T is of type
+// reference_wrapper<U> cv
+template <class U>
+yes_tag is_cv_reference_wrapper_check(reference_wrapper<U> const volatile*);
+no_tag is_cv_reference_wrapper_check(...);
+
+template <class T>
+struct is_cv_reference_wrapper
+{
+ BOOST_STATIC_CONSTANT(
+ bool, value = (
+ sizeof(is_cv_reference_wrapper_check((T*)0)) == sizeof(yes_tag)
+ )
+ );
+
+ typedef mpl::bool_<
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+ is_cv_reference_wrapper::
+#endif
+ value> type;
+};
+
+#if BOOST_WORKAROUND(MSVC, == 1200)
+template <>
+struct is_cv_reference_wrapper<int>
+ : mpl::false_ {};
+#endif
+
+// Needed for unwrap_cv_reference below. T might be const, so
+// eval_if might fail because of deriving from T const on EDG.
+template <class T>
+struct get_type
+{
+ typedef typename T::type type;
+};
+
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+template <class T, class is_reference_wrapper = typename is_cv_reference_wrapper<T>::type>
+struct unwrap_cv_reference
+{
+ typedef T type;
+};
+
+template <class T>
+struct unwrap_cv_reference<T const, mpl::false_>
+{
+ typedef T const type;
+};
+
+template <class T>
+struct unwrap_cv_reference<T, mpl::true_>
+ : T
+{};
+
+#else
+// Produces the unwrapped type to hold a reference to in named<>
+// Can't use boost::unwrap_reference<> here because it
+// doesn't handle the case where T = reference_wrapper<U> cv
+template <class T>
+struct unwrap_cv_reference
+{
+ typedef typename mpl::eval_if<
+ is_cv_reference_wrapper<T>
+ , get_type<T>
+ , mpl::identity<T>
+ >::type type;
+};
+#endif
+
+}}} // namespace boost::parameter::aux
+
+#endif // UNWRAP_CV_REFERENCE_050328_HPP
+
diff --git a/boost/boost/parameter/aux_/void.hpp b/boost/boost/parameter/aux_/void.hpp
new file mode 100644
index 00000000000..7061a7deb5a
--- /dev/null
+++ b/boost/boost/parameter/aux_/void.hpp
@@ -0,0 +1,29 @@
+// Copyright Daniel Wallin, David Abrahams 2005. Use, modification and
+// distribution is 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)
+
+#ifndef BOOST_PARAMETER_VOID_050329_HPP
+#define BOOST_PARAMETER_VOID_050329_HPP
+
+namespace boost { namespace parameter {
+
+// A placemarker for "no argument passed."
+// MAINTAINER NOTE: Do not make this into a metafunction
+struct void_ {};
+
+namespace aux
+{
+
+ inline void_& void_reference()
+ {
+ static void_ instance;
+ return instance;
+ }
+
+} // namespace aux
+
+}} // namespace boost::parameter
+
+#endif // BOOST_PARAMETER_VOID_050329_HPP
+
diff --git a/boost/boost/parameter/aux_/yesno.hpp b/boost/boost/parameter/aux_/yesno.hpp
new file mode 100644
index 00000000000..13fa545a683
--- /dev/null
+++ b/boost/boost/parameter/aux_/yesno.hpp
@@ -0,0 +1,26 @@
+// Copyright Daniel Wallin, David Abrahams 2005. Use, modification and
+// distribution is 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)
+
+#ifndef YESNO_050328_HPP
+#define YESNO_050328_HPP
+
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace parameter { namespace aux {
+
+// types used with the "sizeof trick" to capture the results of
+// overload resolution at compile-time.
+typedef char yes_tag;
+typedef char (&no_tag)[2];
+
+// mpl::true_ and mpl::false_ are not distinguishable by sizeof(),
+// so we pass them through these functions to get a type that is.
+yes_tag to_yesno(mpl::true_);
+no_tag to_yesno(mpl::false_);
+
+}}} // namespace boost::parameter::aux
+
+#endif // YESNO_050328_HPP
+
diff --git a/boost/boost/parameter/binding.hpp b/boost/boost/parameter/binding.hpp
new file mode 100644
index 00000000000..632f0fdb9d9
--- /dev/null
+++ b/boost/boost/parameter/binding.hpp
@@ -0,0 +1,106 @@
+// Copyright David Abrahams 2005. 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_PARAMETER_BINDING_DWA200558_HPP
+# define BOOST_PARAMETER_BINDING_DWA200558_HPP
+
+# include <boost/mpl/apply.hpp>
+# include <boost/mpl/assert.hpp>
+# include <boost/mpl/and.hpp>
+# include <boost/parameter/aux_/result_of0.hpp>
+# include <boost/parameter/aux_/void.hpp>
+# include <boost/type_traits/is_same.hpp>
+
+# if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+# include <boost/mpl/eval_if.hpp>
+# endif
+
+namespace boost { namespace parameter {
+
+// A metafunction that, given an argument pack, returns the type of
+// the parameter identified by the given keyword. If no such
+// parameter has been specified, returns Default
+
+# if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \
+ || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+template <class Parameters, class Keyword, class Default>
+struct binding0
+{
+ typedef typename mpl::apply_wrap3<
+ typename Parameters::binding,Keyword,Default,mpl::true_
+ >::type type;
+
+ BOOST_MPL_ASSERT_NOT((
+ mpl::and_<
+ is_same<Default, void_>
+ , is_same<type, void_>
+ >
+ ));
+};
+# endif
+
+template <class Parameters, class Keyword, class Default = void_>
+# if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+struct binding
+# else
+struct binding_eti
+# endif
+{
+# if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \
+ || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+ typedef typename mpl::eval_if<
+ mpl::is_placeholder<Parameters>
+ , mpl::identity<int>
+ , binding0<Parameters,Keyword,Default>
+ >::type type;
+# else
+ typedef typename mpl::apply_wrap3<
+ typename Parameters::binding,Keyword,Default,mpl::true_
+ >::type type;
+
+ BOOST_MPL_ASSERT_NOT((
+ mpl::and_<
+ is_same<Default, void_>
+ , is_same<type, void_>
+ >
+ ));
+# endif
+
+# if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(3,binding,(Parameters,Keyword,Default))
+# endif
+};
+
+# if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+template <class Parameters, class Keyword, class Default = void_>
+struct binding
+{
+ typedef typename mpl::eval_if<
+ is_same<Parameters, int>
+ , mpl::identity<int>
+ , binding_eti<Parameters, Keyword, Default>
+ >::type type;
+
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(3,binding,(Parameters,Keyword,Default))
+};
+# endif
+
+// A metafunction that, given an argument pack, returns the type of
+// the parameter identified by the given keyword. If no such
+// parameter has been specified, returns the type returned by invoking
+// DefaultFn
+template <class Parameters, class Keyword, class DefaultFn>
+struct lazy_binding
+{
+ typedef typename mpl::apply_wrap3<
+ typename Parameters::binding
+ , Keyword
+ , typename aux::result_of0<DefaultFn>::type
+ , mpl::true_
+ >::type type;
+};
+
+
+}} // namespace boost::parameter
+
+#endif // BOOST_PARAMETER_BINDING_DWA200558_HPP
diff --git a/boost/boost/parameter/config.hpp b/boost/boost/parameter/config.hpp
new file mode 100644
index 00000000000..e4fcc2960b3
--- /dev/null
+++ b/boost/boost/parameter/config.hpp
@@ -0,0 +1,14 @@
+// Copyright Daniel Wallin, David Abrahams 2005. Use, modification and
+// distribution is 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)
+
+#ifndef BOOST_PARAMETER_CONFIG_050403_HPP
+#define BOOST_PARAMETER_CONFIG_050403_HPP
+
+#ifndef BOOST_PARAMETER_MAX_ARITY
+# define BOOST_PARAMETER_MAX_ARITY 5
+#endif
+
+#endif // BOOST_PARAMETER_CONFIG_050403_HPP
+
diff --git a/boost/boost/parameter/keyword.hpp b/boost/boost/parameter/keyword.hpp
new file mode 100644
index 00000000000..9011aa89f1e
--- /dev/null
+++ b/boost/boost/parameter/keyword.hpp
@@ -0,0 +1,148 @@
+// Copyright Daniel Wallin, David Abrahams 2005. Use, modification and
+// distribution is 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)
+
+#ifndef KEYWORD_050328_HPP
+#define KEYWORD_050328_HPP
+
+#include <boost/parameter/aux_/unwrap_cv_reference.hpp>
+#include <boost/parameter/aux_/tag.hpp>
+#include <boost/parameter/aux_/default.hpp>
+
+namespace boost { namespace parameter {
+
+// Instances of unique specializations of keyword<...> serve to
+// associate arguments with parameter names. For example:
+//
+// struct rate_; // parameter names
+// struct skew_;
+// namespace
+// {
+// keyword<rate_> rate; // keywords
+// keyword<skew_> skew;
+// }
+//
+// ...
+//
+// f(rate = 1, skew = 2.4);
+//
+template <class Tag>
+struct keyword
+{
+ template <class T>
+ typename aux::tag<Tag, T>::type const
+ operator=(T& x) const
+ {
+ typedef typename aux::tag<Tag, T>::type result;
+ return result(x);
+ }
+
+ template <class Default>
+ aux::default_<Tag, Default>
+ operator|(Default& default_) const
+ {
+ return aux::default_<Tag, Default>(default_);
+ }
+
+ template <class Default>
+ aux::lazy_default<Tag, Default>
+ operator||(Default& default_) const
+ {
+ return aux::lazy_default<Tag, Default>(default_);
+ }
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300) // avoid partial ordering bugs
+ template <class T>
+ typename aux::tag<Tag, T const>::type const
+ operator=(T const& x) const
+ {
+ typedef typename aux::tag<Tag, T const>::type result;
+ return result(x);
+ }
+#endif
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300) // avoid partial ordering bugs
+ template <class Default>
+ aux::default_<Tag, const Default>
+ operator|(const Default& default_) const
+#if BOOST_WORKAROUND(BOOST_MSVC, == 1300)
+ volatile
+#endif
+ {
+ return aux::default_<Tag, const Default>(default_);
+ }
+
+ template <class Default>
+ aux::lazy_default<Tag, Default>
+ operator||(Default const& default_) const
+#if BOOST_WORKAROUND(BOOST_MSVC, == 1300)
+ volatile
+#endif
+ {
+ return aux::lazy_default<Tag, Default>(default_);
+ }
+#endif
+
+ public: // Insurance against ODR violations
+
+ // People will need to define these keywords in header files. To
+ // prevent ODR violations, it's important that the keyword used in
+ // every instantiation of a function template is the same object.
+ // We provide a reference to a common instance of each keyword
+ // object and prevent construction by users.
+
+ static keyword<Tag>& get()
+ {
+ static keyword<Tag> result;
+ return result;
+ }
+};
+
+// Reduces boilerplate required to declare and initialize keywords
+// without violating ODR. Declares a keyword tag type with the given
+// name in namespace tag_namespace, and declares and initializes a
+// reference in an anonymous namespace to a singleton instance of that
+// type.
+
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+
+# define BOOST_PARAMETER_KEYWORD(tag_namespace,name) \
+ namespace tag_namespace \
+ { \
+ struct name \
+ { \
+ static char const* keyword_name() \
+ { \
+ return #name; \
+ } \
+ }; \
+ } \
+ static ::boost::parameter::keyword<tag_namespace::name>& name \
+ = ::boost::parameter::keyword<tag_namespace::name>::get();
+
+#else
+
+#define BOOST_PARAMETER_KEYWORD(tag_namespace,name) \
+ namespace tag_namespace \
+ { \
+ struct name \
+ { \
+ static char const* keyword_name() \
+ { \
+ return #name; \
+ } \
+ }; \
+ } \
+ namespace \
+ { \
+ ::boost::parameter::keyword<tag_namespace::name>& name \
+ = ::boost::parameter::keyword<tag_namespace::name>::get(); \
+ }
+
+#endif
+
+}} // namespace boost::parameter
+
+#endif // KEYWORD_050328_HPP
+
diff --git a/boost/boost/parameter/macros.hpp b/boost/boost/parameter/macros.hpp
new file mode 100644
index 00000000000..00b5ae9c0e1
--- /dev/null
+++ b/boost/boost/parameter/macros.hpp
@@ -0,0 +1,98 @@
+// Copyright David Abrahams, Daniel Wallin 2003. Use, modification and
+// distribution is 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)
+
+#ifndef BOOST_PARAMETER_MACROS_050412_HPP
+#define BOOST_PARAMETER_MACROS_050412_HPP
+
+#include <boost/preprocessor/tuple/elem.hpp>
+#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+#include <boost/preprocessor/arithmetic/inc.hpp>
+#include <boost/preprocessor/logical/bool.hpp>
+#include <boost/preprocessor/punctuation/comma_if.hpp>
+#include <boost/preprocessor/control/expr_if.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/cat.hpp>
+
+#define BOOST_PARAMETER_FUN_TEMPLATE_HEAD1(n) \
+ template<BOOST_PP_ENUM_PARAMS(n, class T)>
+
+#define BOOST_PARAMETER_FUN_TEMPLATE_HEAD0(n)
+
+#ifndef BOOST_NO_SFINAE
+
+# define BOOST_PARAMETER_MATCH_TYPE(n, param) \
+ BOOST_PP_EXPR_IF(n, typename) param::match \
+ < \
+ BOOST_PP_ENUM_PARAMS(n, T) \
+ >::type
+
+#else
+
+# define BOOST_PARAMETER_MATCH_TYPE(n, param) param
+
+#endif
+
+#define BOOST_PARAMETER_FUN_DECL(z, n, params) \
+ \
+ BOOST_PP_CAT(BOOST_PARAMETER_FUN_TEMPLATE_HEAD, BOOST_PP_BOOL(n))(n) \
+ \
+ BOOST_PP_TUPLE_ELEM(3, 0, params) \
+ BOOST_PP_TUPLE_ELEM(3, 1, params)( \
+ BOOST_PP_ENUM_BINARY_PARAMS(n, T, const& p) \
+ BOOST_PP_COMMA_IF(n) \
+ BOOST_PARAMETER_MATCH_TYPE(n,BOOST_PP_TUPLE_ELEM(3, 2, params)) \
+ kw = BOOST_PP_TUPLE_ELEM(3, 2, params)() \
+ ) \
+ { \
+ return BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(3, 1, params), _with_named_params)( \
+ kw(BOOST_PP_ENUM_PARAMS(n, p)) \
+ ); \
+ }
+
+// Generates:
+//
+// template<class Params>
+// ret name ## _with_named_params(Params const&);
+//
+// template<class T0>
+// ret name(T0 const& p0, typename parameters::match<T0>::type kw = parameters())
+// {
+// return name ## _with_named_params(kw(p0));
+// }
+//
+// template<class T0, ..., class TN>
+// ret name(T0 const& p0, ..., TN const& PN
+// , typename parameters::match<T0, ..., TN>::type kw = parameters())
+// {
+// return name ## _with_named_params(kw(p0, ..., pN));
+// }
+//
+// template<class Params>
+// ret name ## _with_named_params(Params const&)
+//
+// lo and hi determines the min and max arity of the generated functions.
+
+#define BOOST_PARAMETER_FUN(ret, name, lo, hi, parameters) \
+ \
+ template<class Params> \
+ ret BOOST_PP_CAT(name, _with_named_params)(Params const& p); \
+ \
+ BOOST_PP_REPEAT_FROM_TO( \
+ lo, BOOST_PP_INC(hi), BOOST_PARAMETER_FUN_DECL, (ret, name, parameters)) \
+ \
+ template<class Params> \
+ ret BOOST_PP_CAT(name, _with_named_params)(Params const& p)
+
+#define BOOST_PARAMETER_MEMFUN(ret, name, lo, hi, parameters) \
+ \
+ BOOST_PP_REPEAT_FROM_TO( \
+ lo, BOOST_PP_INC(hi), BOOST_PARAMETER_FUN_DECL, (ret, name, parameters)) \
+ \
+ template<class Params> \
+ ret BOOST_PP_CAT(name, _with_named_params)(Params const& p)
+
+#endif // BOOST_PARAMETER_MACROS_050412_HPP
+
diff --git a/boost/boost/parameter/match.hpp b/boost/boost/parameter/match.hpp
new file mode 100644
index 00000000000..2fa3f1750ae
--- /dev/null
+++ b/boost/boost/parameter/match.hpp
@@ -0,0 +1,55 @@
+// Copyright David Abrahams 2005. 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_PARAMETER_MATCH_DWA2005714_HPP
+# define BOOST_PARAMETER_MATCH_DWA2005714_HPP
+
+# include <boost/detail/workaround.hpp>
+# include <boost/preprocessor/seq/enum.hpp>
+
+# if BOOST_WORKAROUND(__MWERKS__, <= 0x3003)
+// Temporary version of BOOST_PP_SEQ_ENUM until Paul M. integrates the workaround.
+# define BOOST_PARAMETER_SEQ_ENUM_I(size,seq) BOOST_PP_CAT(BOOST_PP_SEQ_ENUM_, size) seq
+# define BOOST_PARAMETER_SEQ_ENUM(seq) BOOST_PARAMETER_SEQ_ENUM_I(BOOST_PP_SEQ_SIZE(seq), seq)
+# else
+# define BOOST_PARAMETER_SEQ_ENUM(seq) BOOST_PP_SEQ_ENUM(seq)
+# endif
+
+# if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+
+# include <boost/parameter/config.hpp>
+# include <boost/parameter/aux_/void.hpp>
+# include <boost/preprocessor/arithmetic/sub.hpp>
+# include <boost/preprocessor/facilities/intercept.hpp>
+# include <boost/preprocessor/repetition/enum_trailing_params.hpp>
+
+# define BOOST_PARAMETER_MATCH_DEFAULTS(ArgTypes) \
+ BOOST_PP_ENUM_TRAILING_PARAMS( \
+ BOOST_PP_SUB( \
+ BOOST_PARAMETER_MAX_ARITY \
+ , BOOST_PP_SEQ_SIZE(ArgTypes) \
+ ) \
+ , ::boost::parameter::void_ BOOST_PP_INTERCEPT \
+ )
+
+# else
+
+# define BOOST_PARAMETER_MATCH_DEFAULTS(ArgTypes)
+
+# endif
+
+//
+// Generates, e.g.
+//
+// typename dfs_params::match<A1,A2>::type name = dfs_params()
+//
+// with workarounds for Borland compatibility.
+//
+
+# define BOOST_PARAMETER_MATCH(ParameterSpec, ArgTypes, name) \
+ typename ParameterSpec ::match< \
+ BOOST_PARAMETER_SEQ_ENUM(ArgTypes) \
+ BOOST_PARAMETER_MATCH_DEFAULTS(ArgTypes) \
+ >::type name = ParameterSpec ()
+
+#endif // BOOST_PARAMETER_MATCH_DWA2005714_HPP
diff --git a/boost/boost/parameter/name.hpp b/boost/boost/parameter/name.hpp
new file mode 100644
index 00000000000..932f8af2188
--- /dev/null
+++ b/boost/boost/parameter/name.hpp
@@ -0,0 +1,155 @@
+// Copyright Daniel Wallin 2006. Use, modification and distribution is
+// 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)
+
+#ifndef BOOST_PARAMETER_NAME_060806_HPP
+# define BOOST_PARAMETER_NAME_060806_HPP
+
+# include <boost/parameter/keyword.hpp>
+# include <boost/parameter/value_type.hpp>
+# include <boost/detail/workaround.hpp>
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/stringize.hpp>
+# include <boost/preprocessor/control/iif.hpp>
+# include <boost/preprocessor/tuple/eat.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+# include <boost/mpl/placeholders.hpp>
+
+# if !defined(BOOST_NO_SFINAE) \
+ && !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+# include <boost/utility/enable_if.hpp>
+# include <boost/mpl/lambda.hpp>
+
+namespace boost { namespace parameter { namespace aux {
+
+// Tag type passed to MPL lambda.
+struct lambda_tag;
+
+struct name_tag_base
+{};
+
+template <class Tag>
+struct name_tag
+{};
+
+template <class T>
+struct is_name_tag
+ : mpl::false_
+{};
+
+}}} // namespace boost::parameter::aux
+
+namespace boost { namespace mpl {
+
+template <class T>
+struct lambda<
+ T
+ , typename enable_if<
+ parameter::aux::is_name_tag<T>, parameter::aux::lambda_tag
+ >::type
+>
+{
+ typedef true_ is_le;
+ typedef bind3< quote3<parameter::value_type>, arg<2>, T, void> result_;
+ typedef result_ type;
+};
+
+}} // namespace boost::mpl
+
+# endif
+
+# if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+# include <boost/preprocessor/detail/split.hpp>
+// From Paul Mensonides
+# define BOOST_PARAMETER_IS_BINARY(x) \
+ BOOST_PP_SPLIT(1, BOOST_PARAMETER_IS_BINARY_C x BOOST_PP_COMMA() 0) \
+ /**/
+# define BOOST_PARAMETER_IS_BINARY_C(x,y) \
+ ~, 1 BOOST_PP_RPAREN() \
+ BOOST_PP_TUPLE_EAT(2) BOOST_PP_LPAREN() ~ \
+ /**/
+# else
+# include <boost/preprocessor/detail/is_binary.hpp>
+# define BOOST_PARAMETER_IS_BINARY(x) BOOST_PP_IS_BINARY(x)
+# endif
+
+# if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+# define BOOST_PARAMETER_NAME_OBJECT(tag, name) \
+ static ::boost::parameter::keyword<tag>& name \
+ = ::boost::parameter::keyword<tag>::get();
+# else
+# define BOOST_PARAMETER_NAME_OBJECT(tag, name) \
+ namespace \
+ { \
+ ::boost::parameter::keyword<tag>& name \
+ = ::boost::parameter::keyword<tag>::get(); \
+ }
+# endif
+
+# define BOOST_PARAMETER_BASIC_NAME(tag_namespace, tag, name) \
+ namespace tag_namespace \
+ { \
+ struct tag \
+ { \
+ static char const* keyword_name() \
+ { \
+ return BOOST_PP_STRINGIZE(tag); \
+ } \
+ \
+ typedef boost::parameter::value_type< \
+ boost::mpl::_2, tag, boost::parameter::void_ \
+ > _; \
+ \
+ typedef boost::parameter::value_type< \
+ boost::mpl::_2, tag, boost::parameter::void_ \
+ > _1; \
+ }; \
+ } \
+ BOOST_PARAMETER_NAME_OBJECT(tag_namespace::tag, name)
+
+# define BOOST_PARAMETER_COMPLEX_NAME_TUPLE1(tag,namespace) \
+ (tag, namespace), ~
+
+# define BOOST_PARAMETER_COMPLEX_NAME_TUPLE(name) \
+ BOOST_PP_TUPLE_ELEM(2, 0, (BOOST_PARAMETER_COMPLEX_NAME_TUPLE1 name))
+
+# define BOOST_PARAMETER_COMPLEX_NAME_TAG(name) \
+ BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PARAMETER_COMPLEX_NAME_TUPLE(name))
+
+# define BOOST_PARAMETER_COMPLEX_NAME_NAMESPACE(name) \
+ BOOST_PP_TUPLE_ELEM(2, 1, BOOST_PARAMETER_COMPLEX_NAME_TUPLE(name))
+
+# define BOOST_PARAMETER_COMPLEX_NAME(name) \
+ BOOST_PARAMETER_BASIC_NAME( \
+ BOOST_PARAMETER_COMPLEX_NAME_NAMESPACE(name) \
+ , BOOST_PP_TUPLE_EAT(2) name \
+ , BOOST_PARAMETER_COMPLEX_NAME_TAG(name) \
+ ) \
+/**/
+
+# define BOOST_PARAMETER_SIMPLE_NAME(name) \
+ BOOST_PARAMETER_BASIC_NAME(tag, name, BOOST_PP_CAT(_, name))
+
+# define BOOST_PARAMETER_NAME(name) \
+ BOOST_PP_IIF( \
+ BOOST_PARAMETER_IS_BINARY(name) \
+ , BOOST_PARAMETER_COMPLEX_NAME \
+ , BOOST_PARAMETER_SIMPLE_NAME \
+ )(name) \
+/**/
+
+
+# define BOOST_PARAMETER_TEMPLATE_KEYWORD(name) \
+ namespace tag \
+ { \
+ struct name; \
+ } \
+ template <class T> \
+ struct name \
+ : boost::parameter::template_keyword<tag::name, T> \
+ {}; \
+/**/
+
+#endif // BOOST_PARAMETER_NAME_060806_HPP
+
diff --git a/boost/boost/parameter/parameters.hpp b/boost/boost/parameter/parameters.hpp
new file mode 100644
index 00000000000..3080cf0a4af
--- /dev/null
+++ b/boost/boost/parameter/parameters.hpp
@@ -0,0 +1,931 @@
+// Copyright David Abrahams, Daniel Wallin 2003. Use, modification and
+// distribution is 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)
+
+#ifndef BOOST_PARAMETERS_031014_HPP
+#define BOOST_PARAMETERS_031014_HPP
+
+#include <boost/detail/is_xxx.hpp>
+
+#include <boost/type_traits/is_const.hpp>
+
+#include <boost/mpl/lambda.hpp>
+#include <boost/mpl/apply.hpp>
+#include <boost/mpl/always.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/pair.hpp>
+
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+
+#include <boost/preprocessor/repetition/enum.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_trailing_params.hpp>
+#include <boost/preprocessor/arithmetic/sub.hpp>
+#include <boost/preprocessor/repetition/repeat.hpp>
+#include <boost/preprocessor/repetition/enum_shifted.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/repetition/enum_shifted_params.hpp>
+#include <boost/preprocessor/seq/elem.hpp>
+#include <boost/preprocessor/iteration/iterate.hpp>
+#include <boost/preprocessor/facilities/intercept.hpp>
+#include <boost/preprocessor/cat.hpp>
+
+#include <boost/parameter/aux_/arg_list.hpp>
+#include <boost/parameter/aux_/yesno.hpp>
+#include <boost/parameter/aux_/void.hpp>
+#include <boost/parameter/aux_/default.hpp>
+#include <boost/parameter/aux_/unwrap_cv_reference.hpp>
+#include <boost/parameter/aux_/tagged_argument.hpp>
+#include <boost/parameter/aux_/tag.hpp>
+#include <boost/parameter/aux_/template_keyword.hpp>
+#include <boost/parameter/aux_/set.hpp>
+#include <boost/parameter/config.hpp>
+
+namespace parameter_
+{
+ template <class T>
+ struct unmatched_argument
+ {
+ BOOST_MPL_ASSERT((boost::is_same<T,void>));
+ typedef int type;
+ };
+} // namespace parameter_
+
+namespace boost {
+
+template<class T> class reference_wrapper;
+
+namespace parameter {
+
+namespace aux { struct use_default {}; }
+
+// These templates can be used to describe the treatment of particular
+// named parameters for the purposes of overload elimination with
+// SFINAE, by placing specializations in the parameters<...> list. In
+// order for a treated function to participate in overload resolution:
+//
+// - all keyword tags wrapped in required<...> must have a matching
+// actual argument
+//
+// - The actual argument type matched by every keyword tag
+// associated with a predicate must satisfy that predicate
+//
+// If a keyword k is specified without an optional<...> or
+// required<...>, wrapper, it is treated as though optional<k> were
+// specified.
+//
+// If a keyword k is specified with deduced<...>, that keyword
+// will be automatically deduced from the argument list.
+//
+template <class Tag, class Predicate = aux::use_default>
+struct required
+{
+ typedef Tag key_type;
+ typedef Predicate predicate;
+};
+
+template <class Tag, class Predicate = aux::use_default>
+struct optional
+{
+ typedef Tag key_type;
+ typedef Predicate predicate;
+};
+
+template <class Tag>
+struct deduced
+{
+ typedef Tag key_type;
+};
+
+namespace aux
+{
+ // Defines metafunctions, is_required and is_optional, that
+ // identify required<...>, optional<...> and deduced<...> specializations.
+ BOOST_DETAIL_IS_XXX_DEF(required, required, 2)
+ BOOST_DETAIL_IS_XXX_DEF(optional, optional, 2)
+ BOOST_DETAIL_IS_XXX_DEF(deduced_aux, deduced, 1)
+
+ template <class S>
+ struct is_deduced0
+ : is_deduced_aux<
+ typename S::key_type
+ >::type
+ {};
+
+ template <class S>
+ struct is_deduced
+ : mpl::eval_if<
+ mpl::or_<
+ is_optional<S>, is_required<S>
+ >
+ , is_deduced0<S>
+ , mpl::false_
+ >::type
+ {};
+
+ //
+ // key_type, has_default, and predicate --
+ //
+ // These metafunctions accept a ParameterSpec and extract the
+ // keyword tag, whether or not a default is supplied for the
+ // parameter, and the predicate that the corresponding actual
+ // argument type is required match.
+ //
+ // a ParameterSpec is a specialization of either keyword<...>,
+ // required<...>, optional<...>
+ //
+
+ // helper for key_type<...>, below.
+ template <class T>
+ struct get_tag_type0
+ {
+ typedef typename T::key_type type;
+ };
+
+ template <class T>
+ struct get_tag_type
+ : mpl::eval_if<
+ is_deduced_aux<typename T::key_type>
+ , get_tag_type0<typename T::key_type>
+ , mpl::identity<typename T::key_type>
+ >
+ {};
+
+ template <class T>
+ struct tag_type
+ : mpl::eval_if<
+ mpl::or_<
+ is_optional<T>
+ , is_required<T>
+ >
+ , get_tag_type<T>
+ , mpl::identity<T>
+ >
+ {};
+
+ template <class T>
+ struct has_default
+ : mpl::not_<is_required<T> >
+ {};
+
+ // helper for get_predicate<...>, below
+ template <class T>
+ struct get_predicate_or_default
+ {
+ typedef T type;
+ };
+
+ template <>
+ struct get_predicate_or_default<use_default>
+ {
+ typedef mpl::always<mpl::true_> type;
+ };
+
+ // helper for predicate<...>, below
+ template <class T>
+ struct get_predicate
+ {
+ typedef typename
+ get_predicate_or_default<typename T::predicate>::type
+ type;
+ };
+
+ template <class T>
+ struct predicate
+ : mpl::eval_if<
+ mpl::or_<
+ is_optional<T>
+ , is_required<T>
+ >
+ , get_predicate<T>
+ , mpl::identity<mpl::always<mpl::true_> >
+ >
+ {
+ };
+
+
+ // Converts a ParameterSpec into a specialization of
+ // parameter_requirements. We need to do this in order to get the
+ // tag_type into the type in a way that can be conveniently matched
+ // by a satisfies(...) member function in arg_list.
+ template <class ParameterSpec>
+ struct as_parameter_requirements
+ {
+ typedef parameter_requirements<
+ typename tag_type<ParameterSpec>::type
+ , typename predicate<ParameterSpec>::type
+ , typename has_default<ParameterSpec>::type
+ > type;
+ };
+
+ template <class T>
+ struct is_named_argument
+ : mpl::or_<
+ is_template_keyword<T>
+ , is_tagged_argument<T>
+ >
+ {};
+
+ // Returns mpl::true_ iff the given ParameterRequirements are
+ // satisfied by ArgList.
+ template <class ArgList, class ParameterRequirements>
+ struct satisfies
+ {
+#if BOOST_WORKAROUND(BOOST_MSVC, == 1310)
+ // VC7.1 can't handle the sizeof() implementation below,
+ // so we use this instead.
+ typedef typename mpl::apply_wrap3<
+ typename ArgList::binding
+ , typename ParameterRequirements::keyword
+ , void_
+ , mpl::false_
+ >::type bound;
+
+ typedef typename mpl::eval_if<
+ is_same<bound, void_>
+ , typename ParameterRequirements::has_default
+ , mpl::apply_wrap2<
+ typename mpl::lambda<
+ typename ParameterRequirements::predicate, lambda_tag
+ >::type
+ , bound
+ , ArgList
+ >
+ >::type type;
+#else
+ BOOST_STATIC_CONSTANT(
+ bool, value = (
+ sizeof(
+ aux::to_yesno(
+ ArgList::satisfies((ParameterRequirements*)0, (ArgList*)0)
+ )
+ ) == sizeof(yes_tag)
+ )
+ );
+
+ typedef mpl::bool_<satisfies::value> type;
+#endif
+ };
+
+ // Returns mpl::true_ if the requirements of the given ParameterSpec
+ // are satisfied by ArgList.
+ template <class ArgList, class ParameterSpec>
+ struct satisfies_requirements_of
+ : satisfies<
+ ArgList
+ , typename as_parameter_requirements<ParameterSpec>::type
+ >
+ {};
+
+ // Tags a deduced argument Arg with the keyword tag of Spec using TagFn.
+ // Returns the tagged argument and the mpl::set<> UsedArgs with the
+ // tag of Spec inserted.
+ template <class UsedArgs, class Spec, class Arg, class TagFn>
+ struct tag_deduced
+ {
+ typedef mpl::pair<
+ typename mpl::apply_wrap2<TagFn, typename tag_type<Spec>::type, Arg>::type
+ , typename aux::insert_<UsedArgs, typename tag_type<Spec>::type>::type
+ > type;
+ };
+
+ template <
+ class Argument
+ , class ArgumentPack
+ , class DeducedArgs
+ , class UsedArgs
+ , class TagFn
+ >
+ struct deduce_tag;
+
+ // Tag type passed to MPL lambda.
+ struct lambda_tag;
+
+ // Helper for deduce_tag<> below.
+ template <
+ class Argument
+ , class ArgumentPack
+ , class DeducedArgs
+ , class UsedArgs
+ , class TagFn
+ >
+ struct deduce_tag0
+ {
+ typedef typename DeducedArgs::spec spec;
+
+ typedef typename mpl::apply_wrap2<
+ typename mpl::lambda<
+ typename spec::predicate, lambda_tag
+ >::type
+ , Argument
+ , ArgumentPack
+ >::type condition;
+
+ // Deduced parameter matches several arguments.
+
+ BOOST_MPL_ASSERT((
+ mpl::not_<mpl::and_<
+ condition
+ , aux::has_key_<UsedArgs, typename tag_type<spec>::type>
+ > >
+ ));
+
+ typedef typename mpl::eval_if<
+ condition
+ , tag_deduced<UsedArgs, spec, Argument, TagFn>
+ , deduce_tag<Argument, ArgumentPack, typename DeducedArgs::tail, UsedArgs, TagFn>
+ >::type type;
+ };
+
+ // Tries to deduced a keyword tag for a given Argument.
+ // Returns an mpl::pair<> consisting of the tagged_argument<>,
+ // and an mpl::set<> where the new tag has been inserted.
+ //
+ // Argument: The argument type to be tagged.
+ //
+ // ArgumentPack: The ArgumentPack built so far.
+ //
+ // DeducedArgs: A specialization of deduced_item<> (see below).
+ // A list containing only the deduced ParameterSpecs.
+ //
+ // UsedArgs: An mpl::set<> containing the keyword tags used so far.
+ //
+ // TagFn: A metafunction class used to tag positional or deduced
+ // arguments with a keyword tag.
+
+ template <
+ class Argument
+ , class ArgumentPack
+ , class DeducedArgs
+ , class UsedArgs
+ , class TagFn
+ >
+ struct deduce_tag
+ {
+ typedef typename mpl::eval_if<
+ is_same<DeducedArgs, void_>
+ , mpl::pair<void_, UsedArgs>
+ , deduce_tag0<Argument, ArgumentPack, DeducedArgs, UsedArgs, TagFn>
+ >::type type;
+ };
+
+ template <
+ class List
+ , class DeducedArgs
+ , class TagFn
+ , class Positional
+ , class UsedArgs
+ , class ArgumentPack
+ , class Error
+ >
+ struct make_arg_list_aux;
+
+ // Inserts Tagged::key_type into the UserArgs set.
+ // Extra indirection to lazily evaluate Tagged::key_type.
+ template <class UsedArgs, class Tagged>
+ struct insert_tagged
+ {
+ typedef typename aux::insert_<
+ UsedArgs, typename Tagged::key_type
+ >::type type;
+ };
+
+ // Borland needs the insane extra-indirection workaround below
+ // so that it doesn't magically drop the const qualifier from
+ // the argument type.
+
+ template <
+ class List
+ , class DeducedArgs
+ , class TagFn
+ , class Positional
+ , class UsedArgs
+ , class ArgumentPack
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+ , class argument
+#endif
+ , class Error
+ >
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+ struct make_arg_list00
+#else
+ struct make_arg_list0
+#endif
+ {
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+ typedef typename List::arg argument;
+#endif
+ typedef typename List::spec parameter_spec;
+ typedef typename tag_type<parameter_spec>::type tag_;
+
+ typedef is_named_argument<argument> is_tagged;
+
+ // If this argument is either explicitly tagged or a deduced
+ // parameter, we turn off positional matching.
+ typedef mpl::and_<
+ mpl::not_<
+ mpl::or_<is_deduced<parameter_spec>, is_tagged>
+ >
+ , Positional
+ > positional;
+
+ // If this parameter is explicitly tagged we add it to the
+ // used-parmeters set. We only really need to add parameters
+ // that are deduced, but we would need a way to check if
+ // a given tag corresponds to a deduced parameter spec.
+ typedef typename mpl::eval_if<
+ is_tagged
+ , insert_tagged<UsedArgs, argument>
+ , mpl::identity<UsedArgs>
+ >::type used_args;
+
+ // If this parameter is neither explicitly tagged, nor
+ // positionally matched; deduce the tag from the deduced
+ // parameter specs.
+ typedef typename mpl::eval_if<
+ mpl::or_<is_tagged, positional>
+ , mpl::pair<void_, used_args>
+ , deduce_tag<argument, ArgumentPack, DeducedArgs, used_args, TagFn>
+ >::type deduced_data;
+
+ // If this parameter is explicitly tagged..
+ typedef typename mpl::eval_if<
+ is_tagged
+ , mpl::identity<argument> // .. just use it
+ , mpl::eval_if< // .. else, if positional matching is turned on..
+ positional
+ , mpl::apply_wrap2<TagFn, tag_, argument> // .. tag it positionally
+ , mpl::first<deduced_data> // .. else, use the deduced tag
+ >
+ >::type tagged;
+
+ // We build the arg_list incrementally as we go, prepending new
+ // nodes.
+
+ typedef typename mpl::if_<
+ mpl::and_<
+ is_same<Error, void_>
+ , is_same<tagged, void_>
+ >
+ , parameter_::unmatched_argument<argument>
+ , void_
+ >::type error;
+
+ typedef typename mpl::if_<
+ is_same<tagged, void_>
+ , ArgumentPack
+ , arg_list<tagged, ArgumentPack>
+ >::type argument_pack;
+
+ typedef typename make_arg_list_aux<
+ typename List::tail
+ , DeducedArgs
+ , TagFn
+ , positional
+ , typename deduced_data::second
+ , argument_pack
+ , error
+ >::type type;
+ };
+
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+ template <
+ class List
+ , class DeducedArgs
+ , class TagFn
+ , class Positional
+ , class UsedArgs
+ , class ArgumentPack
+ , class Error
+ >
+ struct make_arg_list0
+ {
+ typedef typename mpl::eval_if<
+ typename List::is_arg_const
+ , make_arg_list00<
+ List
+ , DeducedArgs
+ , TagFn
+ , Positional
+ , UsedArgs
+ , ArgumentPack
+ , typename List::arg const
+ , Error
+ >
+ , make_arg_list00<
+ List
+ , DeducedArgs
+ , TagFn
+ , Positional
+ , UsedArgs
+ , ArgumentPack
+ , typename List::arg
+ , Error
+ >
+ >::type type;
+ };
+#endif
+
+ // Returns an ArgumentPack where the list of arguments has
+ // been tagged with keyword tags.
+ //
+ // List: A specialization of item<> (see below). Contains
+ // both the ordered ParameterSpecs, and the given arguments.
+ //
+ // DeducedArgs: A specialization of deduced_item<> (see below).
+ // A list containing only the deduced ParameterSpecs.
+ //
+ // TagFn: A metafunction class used to tag positional or deduced
+ // arguments with a keyword tag.
+ //
+ // Position: An mpl::bool_<> specialization indicating if positional
+ // matching is to be performed.
+ //
+ // DeducedSet: An mpl::set<> containing the keyword tags used so far.
+ //
+ // ArgumentPack: The ArgumentPack built so far. This is initially an
+ // empty_arg_list and is built incrementally.
+ //
+
+ template <
+ class List
+ , class DeducedArgs
+ , class TagFn
+ , class Positional
+ , class DeducedSet
+ , class ArgumentPack
+ , class Error
+ >
+ struct make_arg_list_aux
+ {
+ typedef typename mpl::eval_if<
+ is_same<List, void_>
+ , mpl::identity<mpl::pair<ArgumentPack, Error> >
+ , make_arg_list0<List, DeducedArgs, TagFn, Positional, DeducedSet, ArgumentPack, Error>
+ >::type type;
+ };
+
+ // VC6.5 was choking on the default parameters for make_arg_list_aux, so
+ // this just forwards to that adding in the defaults.
+ template <
+ class List
+ , class DeducedArgs
+ , class TagFn
+ , class EmitErrors = mpl::true_
+ >
+ struct make_arg_list
+ {
+ typedef typename make_arg_list_aux<
+ List, DeducedArgs, TagFn, mpl::true_, aux::set0, empty_arg_list, void_
+ >::type type;
+ };
+
+ // A parameter spec item typelist.
+ template <class Spec, class Arg, class Tail = void_>
+ struct item
+ {
+ typedef Spec spec;
+
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+ typedef is_const<Arg> is_arg_const;
+#endif
+
+ typedef Arg arg;
+ typedef Tail tail;
+ };
+
+ template <class Spec, class Arg, class Tail>
+ struct make_item
+ {
+ typedef item<Spec, Arg, typename Tail::type> type;
+ };
+
+ // Creates a item typelist.
+ template <class Spec, class Arg, class Tail>
+ struct make_items
+ {
+ typedef typename mpl::eval_if<
+ is_same<Arg, void_>
+ , mpl::identity<void_>
+ , make_item<Spec, Arg, Tail>
+ >::type type;
+ };
+
+ // A typelist that stored deduced parameter specs.
+ template <class ParameterSpec, class Tail = void_>
+ struct deduced_item
+ {
+ typedef ParameterSpec spec;
+ typedef Tail tail;
+ };
+
+ // Evaluate Tail and construct deduced_item list.
+ template <class Spec, class Tail>
+ struct make_deduced_item
+ {
+ typedef deduced_item<Spec, typename Tail::type> type;
+ };
+
+ template <class Spec, class Tail>
+ struct make_deduced_items
+ {
+ typedef typename mpl::eval_if<
+ is_same<Spec, void_>
+ , mpl::identity<void_>
+ , mpl::eval_if<
+ is_deduced<Spec>
+ , make_deduced_item<Spec, Tail>
+ , Tail
+ >
+ >::type type;
+ };
+
+ // Generates:
+ //
+ // make<
+ // parameter_spec#0, argument_type#0
+ // , make<
+ // parameter_spec#1, argument_type#1
+ // , ... mpl::identity<aux::empty_arg_list>
+ // ...>
+ // >
+#define BOOST_PARAMETER_make_arg_list(z, n, names) \
+ BOOST_PP_SEQ_ELEM(0,names)< \
+ BOOST_PP_CAT(BOOST_PP_SEQ_ELEM(1,names), n), \
+ BOOST_PP_CAT(BOOST_PP_SEQ_ELEM(2,names), n),
+
+#define BOOST_PARAMETER_right_angle(z, n, text) >
+
+#define BOOST_PARAMETER_build_arg_list(n, make, parameter_spec, argument_type) \
+ BOOST_PP_REPEAT( \
+ n, BOOST_PARAMETER_make_arg_list, (make)(parameter_spec)(argument_type)) \
+ mpl::identity<void_> \
+ BOOST_PP_REPEAT(n, BOOST_PARAMETER_right_angle, _)
+
+#define BOOST_PARAMETER_make_deduced_list(z, n, names) \
+ BOOST_PP_SEQ_ELEM(0,names)< \
+ BOOST_PP_CAT(BOOST_PP_SEQ_ELEM(1,names), n),
+
+#define BOOST_PARAMETER_build_deduced_list(n, make, parameter_spec) \
+ BOOST_PP_REPEAT( \
+ n, BOOST_PARAMETER_make_deduced_list, (make)(parameter_spec)) \
+ mpl::identity<void_> \
+ BOOST_PP_REPEAT(n, BOOST_PARAMETER_right_angle, _)
+
+ struct tag_keyword_arg
+ {
+ template <class K, class T>
+ struct apply
+ : tag<K,T>
+ {};
+ };
+
+ struct tag_template_keyword_arg
+ {
+ template <class K, class T>
+ struct apply
+ {
+ typedef template_keyword<K,T> type;
+ };
+ };
+
+} // namespace aux
+
+#define BOOST_PARAMETER_FORWARD_TYPEDEF(z, i, names) \
+ typedef BOOST_PP_CAT(BOOST_PP_SEQ_ELEM(0,names),i) BOOST_PP_CAT(BOOST_PP_SEQ_ELEM(1,names),i);
+
+#define BOOST_PARAMETER_FORWARD_TYPEDEFS(n, src, dest) \
+ BOOST_PP_REPEAT(n, BOOST_PARAMETER_FORWARD_TYPEDEF, (src)(dest))
+
+
+#define BOOST_PARAMETER_TEMPLATE_ARGS(z, n, text) class BOOST_PP_CAT(PS, n) = void_
+
+template<
+ class PS0
+ , BOOST_PP_ENUM_SHIFTED(BOOST_PARAMETER_MAX_ARITY, BOOST_PARAMETER_TEMPLATE_ARGS, _)
+>
+struct parameters
+{
+#undef BOOST_PARAMETER_TEMPLATE_ARGS
+
+ typedef typename BOOST_PARAMETER_build_deduced_list(
+ BOOST_PARAMETER_MAX_ARITY, aux::make_deduced_items, PS
+ )::type deduced_list;
+
+ // if the elements of NamedList match the criteria of overload
+ // resolution, returns a type which can be constructed from
+ // parameters. Otherwise, this is not a valid metafunction (no nested
+ // ::type).
+
+
+#ifndef BOOST_NO_SFINAE
+ // If NamedList satisfies the PS0, PS1, ..., this is a
+ // metafunction returning parameters. Otherwise it
+ // has no nested ::type.
+ template <class ArgumentPackAndError>
+ struct match_base
+ : mpl::if_<
+ // mpl::and_<
+ // aux::satisfies_requirements_of<NamedList,PS0>
+ // , mpl::and_<
+ // aux::satisfies_requirements_of<NamedList,PS1>...
+ // ..., mpl::true_
+ // ...> >
+
+# define BOOST_PARAMETER_satisfies(z, n, text) \
+ mpl::and_< \
+ aux::satisfies_requirements_of< \
+ typename mpl::first<ArgumentPackAndError>::type \
+ , BOOST_PP_CAT(PS, n)> \
+ ,
+ mpl::and_<
+ is_same<typename mpl::second<ArgumentPackAndError>::type, void_>
+ , BOOST_PP_REPEAT(BOOST_PARAMETER_MAX_ARITY, BOOST_PARAMETER_satisfies, _)
+ mpl::true_
+ BOOST_PP_REPEAT(BOOST_PARAMETER_MAX_ARITY, BOOST_PARAMETER_right_angle, _)
+ >
+
+# undef BOOST_PARAMETER_satisfies
+
+ , mpl::identity<parameters>
+ , void_
+ >
+ {};
+#endif
+
+ // Specializations are to be used as an optional argument to
+ // eliminate overloads via SFINAE
+ template<
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+ // Borland simply can't handle default arguments in member
+ // class templates. People wishing to write portable code can
+ // explicitly specify BOOST_PARAMETER_MAX_ARITY arguments
+ BOOST_PP_ENUM_PARAMS(BOOST_PARAMETER_MAX_ARITY, class A)
+#else
+ BOOST_PP_ENUM_BINARY_PARAMS(
+ BOOST_PARAMETER_MAX_ARITY, class A, = void_ BOOST_PP_INTERCEPT
+ )
+#endif
+ >
+ struct match
+# ifndef BOOST_NO_SFINAE
+ : match_base<
+ typename aux::make_arg_list<
+ typename BOOST_PARAMETER_build_arg_list(
+ BOOST_PARAMETER_MAX_ARITY, aux::make_items, PS, A
+ )::type
+ , deduced_list
+ , aux::tag_keyword_arg
+ , mpl::false_ // Don't emit errors when doing SFINAE
+ >::type
+ >::type
+ {};
+# else
+ {
+ typedef parameters<
+ BOOST_PP_ENUM_PARAMS(BOOST_PARAMETER_MAX_ARITY, PS)
+ > type;
+ };
+# endif
+
+ // Metafunction that returns an ArgumentPack.
+
+ // TODO, bind has to instantiate the error type in the result
+ // of make_arg_list.
+
+ template <
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+ // Borland simply can't handle default arguments in member
+ // class templates. People wishing to write portable code can
+ // explicitly specify BOOST_PARAMETER_MAX_ARITY arguments
+ BOOST_PP_ENUM_PARAMS(BOOST_PARAMETER_MAX_ARITY, class A)
+#else
+ BOOST_PP_ENUM_BINARY_PARAMS(
+ BOOST_PARAMETER_MAX_ARITY, class A, = void_ BOOST_PP_INTERCEPT
+ )
+#endif
+ >
+ struct bind
+ {
+ typedef typename aux::make_arg_list<
+ typename BOOST_PARAMETER_build_arg_list(
+ BOOST_PARAMETER_MAX_ARITY, aux::make_items, PS, A
+ )::type
+ , deduced_list
+ , aux::tag_template_keyword_arg
+ >::type result;
+
+ typedef typename mpl::first<result>::type type;
+ };
+
+ BOOST_PARAMETER_FORWARD_TYPEDEFS(BOOST_PARAMETER_MAX_ARITY, PS, parameter_spec)
+
+ //
+ // The function call operator is used to build an arg_list that
+ // labels the positional parameters and maintains whatever other
+ // tags may have been specified by the caller.
+ //
+ // !!!NOTE!!!
+ //
+ // The make_arg_list<> produces a reversed arg_list, so
+ // we need to pass the arguments to it's constructor
+ // reversed.
+ //
+ aux::empty_arg_list operator()() const
+ {
+ return aux::empty_arg_list();
+ }
+
+ template<class A0>
+ typename mpl::first<
+ typename aux::make_arg_list<
+ aux::item<
+ PS0,A0
+ >
+ , deduced_list
+ , aux::tag_keyword_arg
+ >::type
+ >::type
+ operator()(A0& a0) const
+ {
+ typedef typename aux::make_arg_list<
+ aux::item<
+ PS0,A0
+ >
+ , deduced_list
+ , aux::tag_keyword_arg
+ >::type result;
+
+ typedef typename mpl::first<result>::type result_type;
+ typedef typename mpl::second<result>::type error;
+ error();
+
+ return result_type(
+ a0
+ // , void_(), void_(), void_() ...
+ BOOST_PP_ENUM_TRAILING_PARAMS(
+ BOOST_PP_SUB(BOOST_PARAMETER_MAX_ARITY, 1)
+ , aux::void_reference() BOOST_PP_INTERCEPT)
+ );
+ }
+
+ template<class A0, class A1>
+ typename mpl::first<
+ typename aux::make_arg_list<
+ aux::item<
+ PS0,A0
+ , aux::item<
+ PS1,A1
+ >
+ >
+ , deduced_list
+ , aux::tag_keyword_arg
+ >::type
+ >::type
+ operator()(A0& a0, A1& a1) const
+ {
+ typedef typename aux::make_arg_list<
+ aux::item<
+ PS0,A0
+ , aux::item<
+ PS1,A1
+ >
+ >
+ , deduced_list
+ , aux::tag_keyword_arg
+ >::type result;
+
+ typedef typename mpl::first<result>::type result_type;
+ typedef typename mpl::second<result>::type error;
+ error();
+
+ return result_type(
+ a1,a0
+ // , void_(), void_() ...
+ BOOST_PP_ENUM_TRAILING_PARAMS(
+ BOOST_PP_SUB(BOOST_PARAMETER_MAX_ARITY, 2)
+ , aux::void_reference() BOOST_PP_INTERCEPT)
+ );
+ }
+
+ // Higher arities are handled by the preprocessor
+#define BOOST_PP_ITERATION_PARAMS_1 (3,( \
+ 3,BOOST_PARAMETER_MAX_ARITY,<boost/parameter/aux_/overloads.hpp> \
+ ))
+#include BOOST_PP_ITERATE()
+
+};
+
+} // namespace parameter
+
+} // namespace boost
+
+#endif // BOOST_PARAMETERS_031014_HPP
+
diff --git a/boost/boost/parameter/preprocessor.hpp b/boost/boost/parameter/preprocessor.hpp
new file mode 100644
index 00000000000..6398b01574b
--- /dev/null
+++ b/boost/boost/parameter/preprocessor.hpp
@@ -0,0 +1,1169 @@
+// Copyright Daniel Wallin 2006. Use, modification and distribution is
+// 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)
+
+#ifndef BOOST_PARAMETER_PREPROCESSOR_060206_HPP
+# define BOOST_PARAMETER_PREPROCESSOR_060206_HPP
+
+# include <boost/parameter/parameters.hpp>
+# include <boost/parameter/binding.hpp>
+# include <boost/parameter/match.hpp>
+
+# include <boost/parameter/aux_/parenthesized_type.hpp>
+# include <boost/parameter/aux_/cast.hpp>
+# include <boost/parameter/aux_/preprocessor/flatten.hpp>
+
+# include <boost/preprocessor/repetition/repeat_from_to.hpp>
+# include <boost/preprocessor/control/if.hpp>
+# include <boost/preprocessor/control/expr_if.hpp>
+# include <boost/preprocessor/repetition/enum_params.hpp>
+# include <boost/preprocessor/repetition/enum_binary_params.hpp>
+# include <boost/preprocessor/repetition/enum_trailing.hpp>
+# include <boost/preprocessor/seq/first_n.hpp>
+# include <boost/preprocessor/seq/for_each_product.hpp>
+# include <boost/preprocessor/seq/for_each_i.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+# include <boost/preprocessor/seq/fold_left.hpp>
+# include <boost/preprocessor/seq/size.hpp>
+# include <boost/preprocessor/seq/enum.hpp>
+
+# include <boost/preprocessor/detail/is_nullary.hpp>
+
+# include <boost/mpl/always.hpp>
+# include <boost/mpl/apply_wrap.hpp>
+
+# if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+# include <boost/type.hpp>
+# endif
+
+namespace boost { namespace parameter { namespace aux {
+
+# ifndef BOOST_NO_SFINAE
+
+// Given Match, which is "void x" where x is an argument matching
+// criterion, extract a corresponding MPL predicate.
+template <class Match>
+struct unwrap_predicate;
+
+// Match anything
+template <>
+struct unwrap_predicate<void*>
+{
+ typedef mpl::always<mpl::true_> type;
+};
+
+#if BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x580))
+
+typedef void* voidstar;
+
+// A matching predicate is explicitly specified
+template <class Predicate>
+struct unwrap_predicate<voidstar (Predicate)>
+{
+ typedef Predicate type;
+};
+
+#else
+
+// A matching predicate is explicitly specified
+template <class Predicate>
+struct unwrap_predicate<void *(Predicate)>
+{
+ typedef Predicate type;
+};
+
+#endif
+
+
+// A type to which the argument is supposed to be convertible is
+// specified
+template <class Target>
+struct unwrap_predicate<void (Target)>
+{
+ typedef is_convertible<mpl::_, Target> type;
+};
+
+// Recast the ParameterSpec's nested match metafunction as a free metafunction
+template <
+ class Parameters
+ , BOOST_PP_ENUM_BINARY_PARAMS(
+ BOOST_PARAMETER_MAX_ARITY, class A, = boost::parameter::void_ BOOST_PP_INTERCEPT
+ )
+>
+struct match
+ : Parameters::template match<
+ BOOST_PP_ENUM_PARAMS(BOOST_PARAMETER_MAX_ARITY, A)
+ >
+{};
+# endif
+
+# if BOOST_WORKAROUND(BOOST_MSVC, == 1300)
+
+// Function template argument deduction does many of the same things
+// as type matching during partial specialization, so we call a
+// function template to "store" T into the type memory addressed by
+// void(*)(T).
+template <class T>
+msvc_store_type<T,void*(*)(void**(T))>
+msvc_store_predicate_type(void*(*)(void**(T)));
+
+template <class T>
+msvc_store_type<boost::is_convertible<mpl::_,T>,void*(*)(void*(T))>
+msvc_store_predicate_type(void*(*)(void*(T)));
+
+template <class FunctionType>
+struct unwrap_predicate
+{
+ static FunctionType f;
+
+ // We don't want the function to be evaluated, just instantiated,
+ // so protect it inside of sizeof.
+ enum { dummy = sizeof(msvc_store_predicate_type(f)) };
+
+ // Now pull the type out of the instantiated base class
+ typedef typename msvc_type_memory<FunctionType>::storage::type type;
+};
+
+template <>
+struct unwrap_predicate<void*(*)(void**)>
+{
+ typedef mpl::always<mpl::true_> type;
+};
+
+# endif
+
+# undef false_
+
+template <
+ class Parameters
+ , BOOST_PP_ENUM_BINARY_PARAMS(
+ BOOST_PARAMETER_MAX_ARITY, class A, = boost::parameter::void_ BOOST_PP_INTERCEPT
+ )
+>
+struct argument_pack
+{
+ typedef typename make_arg_list<
+ typename BOOST_PARAMETER_build_arg_list(
+ BOOST_PARAMETER_MAX_ARITY, make_items, typename Parameters::parameter_spec, A
+ )::type
+ , typename Parameters::deduced_list
+ , tag_keyword_arg
+ , mpl::false_
+ >::type type;
+};
+
+# if 1 //BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+// Works around VC6 problem where it won't accept rvalues.
+template <class T>
+T& as_lvalue(T& value, long)
+{
+ return value;
+}
+
+template <class T>
+T const& as_lvalue(T const& value, int)
+{
+ return value;
+}
+# endif
+
+
+# if BOOST_WORKAROUND(BOOST_MSVC, < 1300) \
+ || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+
+template <class Predicate, class T, class Args>
+struct apply_predicate
+{
+ BOOST_MPL_ASSERT((
+ mpl::and_<mpl::false_,T>
+ ));
+
+ typedef typename mpl::if_<
+ typename mpl::apply2<Predicate,T,Args>::type
+ , char
+ , int
+ >::type type;
+};
+
+template <class P>
+struct funptr_predicate
+{
+ static P p;
+
+ template <class T, class Args, class P0>
+ static typename apply_predicate<P0,T,Args>::type
+ check_predicate(type<T>, Args*, void**(*)(P0));
+
+ template <class T, class Args, class P0>
+ static typename mpl::if_<
+ is_convertible<T,P0>
+ , char
+ , int
+ >::type check_predicate(type<T>, Args*, void*(*)(P0));
+
+ template <class T, class Args>
+ struct apply
+ {
+ BOOST_STATIC_CONSTANT(bool, result =
+ sizeof(check_predicate(boost::type<T>(), (Args*)0, &p)) == 1
+ );
+
+ typedef mpl::bool_<apply<T,Args>::result> type;
+ };
+};
+
+template <>
+struct funptr_predicate<void**>
+ : mpl::always<mpl::true_>
+{};
+
+# endif
+
+}}} // namespace boost::parameter::aux
+
+# if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+// From Paul Mensonides
+# define BOOST_PARAMETER_IS_NULLARY(x) \
+ BOOST_PP_SPLIT(1, BOOST_PARAMETER_IS_NULLARY_C x BOOST_PP_COMMA() 0) \
+ /**/
+# define BOOST_PARAMETER_IS_NULLARY_C() \
+ ~, 1 BOOST_PP_RPAREN() \
+ BOOST_PP_TUPLE_EAT(2) BOOST_PP_LPAREN() ~ \
+ /**/
+# else
+# define BOOST_PARAMETER_IS_NULLARY(x) BOOST_PP_IS_NULLARY(x)
+# endif
+
+# define BOOST_PARAMETER_MEMBER_FUNCTION_CHECK_STATIC_static ()
+# define BOOST_PARAMETER_MEMBER_FUNCTION_IS_STATIC(name) \
+ BOOST_PARAMETER_IS_NULLARY( \
+ BOOST_PP_CAT(BOOST_PARAMETER_MEMBER_FUNCTION_CHECK_STATIC_,name) \
+ )
+
+# if !defined(BOOST_MSVC)
+# define BOOST_PARAMETER_MEMBER_FUNCTION_STRIP_STATIC_static
+# define BOOST_PARAMETER_MEMBER_FUNCTION_STRIP_STATIC(name) \
+ BOOST_PP_CAT(BOOST_PARAMETER_MEMBER_FUNCTION_STRIP_STATIC_, name)
+# else
+// Workaround for MSVC preprocessor.
+//
+// When stripping static from "static f", msvc will produce
+// " f". The leading whitespace doesn't go away when pasting
+// the token with something else, so this thing is a hack to
+// strip the whitespace.
+# define BOOST_PARAMETER_MEMBER_FUNCTION_STRIP_STATIC_static (
+# define BOOST_PARAMETER_MEMBER_FUNCTION_STRIP_STATIC_AUX(name) \
+ BOOST_PP_CAT(BOOST_PARAMETER_MEMBER_FUNCTION_STRIP_STATIC_, name))
+# define BOOST_PARAMETER_MEMBER_FUNCTION_STRIP_STATIC(name) \
+ BOOST_PP_SEQ_HEAD( \
+ BOOST_PARAMETER_MEMBER_FUNCTION_STRIP_STATIC_AUX(name) \
+ )
+# endif
+
+# define BOOST_PARAMETER_MEMBER_FUNCTION_STATIC(name) \
+ BOOST_PP_EXPR_IF( \
+ BOOST_PARAMETER_MEMBER_FUNCTION_IS_STATIC(name) \
+ , static \
+ )
+
+# define BOOST_PARAMETER_MEMBER_FUNCTION_NAME(name) \
+ BOOST_PP_IF( \
+ BOOST_PARAMETER_MEMBER_FUNCTION_IS_STATIC(name) \
+ , BOOST_PARAMETER_MEMBER_FUNCTION_STRIP_STATIC \
+ , name BOOST_PP_TUPLE_EAT(1) \
+ )(name)
+
+// Calculates [begin, end) arity range.
+
+# define BOOST_PARAMETER_ARITY_RANGE_M_optional(state) state
+# define BOOST_PARAMETER_ARITY_RANGE_M_deduced_optional(state) state
+# define BOOST_PARAMETER_ARITY_RANGE_M_required(state) BOOST_PP_INC(state)
+# define BOOST_PARAMETER_ARITY_RANGE_M_deduced_required(state) BOOST_PP_INC(state)
+
+# define BOOST_PARAMETER_ARITY_RANGE_M(s, state, x) \
+ BOOST_PP_CAT( \
+ BOOST_PARAMETER_ARITY_RANGE_M_ \
+ , BOOST_PARAMETER_FN_ARG_QUALIFIER(x) \
+ )(state)
+/**/
+
+# define BOOST_PARAMETER_ARITY_RANGE(args) \
+ ( \
+ BOOST_PP_SEQ_FOLD_LEFT(BOOST_PARAMETER_ARITY_RANGE_M, 0, args) \
+ , BOOST_PP_INC(BOOST_PP_SEQ_SIZE(args)) \
+ )
+/**/
+
+// Accessor macros for the argument specs tuple.
+# define BOOST_PARAMETER_FN_ARG_QUALIFIER(x) \
+ BOOST_PP_TUPLE_ELEM(4,0,x)
+/**/
+
+# define BOOST_PARAMETER_FN_ARG_NAME(x) \
+ BOOST_PP_TUPLE_ELEM(4,1,x)
+/**/
+
+# define BOOST_PARAMETER_FN_ARG_PRED(x) \
+ BOOST_PP_TUPLE_ELEM(4,2,x)
+/**/
+
+# define BOOST_PARAMETER_FN_ARG_DEFAULT(x) \
+ BOOST_PP_TUPLE_ELEM(4,3,x)
+/**/
+
+# define BOOST_PARAMETETER_FUNCTION_EAT_KEYWORD_QUALIFIER_out(x)
+# define BOOST_PARAMETETER_FUNCTION_EAT_KEYWORD_QUALIFIER_in_out(x)
+
+// Returns 1 if x is either "out(k)" or "in_out(k)".
+# define BOOST_PARAMETER_FUNCTION_IS_KEYWORD_QUALIFIER(x) \
+ BOOST_PP_IS_EMPTY( \
+ BOOST_PP_CAT(BOOST_PARAMETETER_FUNCTION_EAT_KEYWORD_QUALIFIER_, x) \
+ ) \
+/**/
+
+# define BOOST_PARAMETETER_FUNCTION_GET_KEYWORD_QUALIFIER_out(x) x
+# define BOOST_PARAMETETER_FUNCTION_GET_KEYWORD_QUALIFIER_in_out(x) x
+# define BOOST_PARAMETER_FUNCTION_KEYWORD_GET(x) \
+ BOOST_PP_CAT(BOOST_PARAMETETER_FUNCTION_GET_KEYWORD_QUALIFIER_, x)
+/**/
+
+// Returns the keyword of x, where x is either a keyword qualifier
+// or a keyword.
+//
+// k => k
+// out(k) => k
+// in_out(k) => k
+//
+# define BOOST_PARAMETER_FUNCTION_KEYWORD(x) \
+ BOOST_PP_IF( \
+ BOOST_PARAMETER_FUNCTION_IS_KEYWORD_QUALIFIER(x) \
+ , BOOST_PARAMETER_FUNCTION_KEYWORD_GET \
+ , x BOOST_PP_TUPLE_EAT(1) \
+ )(x)
+/**/
+
+# define BOOST_PARAMETER_FN_ARG_KEYWORD(x) \
+ BOOST_PARAMETER_FUNCTION_KEYWORD( \
+ BOOST_PARAMETER_FN_ARG_NAME(x) \
+ )
+
+// Builds forwarding functions.
+
+# define BOOST_PARAMETER_FUNCTION_FWD_FUNCTION_TEMPLATE_Z(z, n) \
+ template<BOOST_PP_ENUM_PARAMS_Z(z, n, class ParameterArgumentType)>
+/**/
+
+# ifndef BOOST_NO_SFINAE
+# define BOOST_PARAMETER_FUNCTION_FWD_MATCH_Z(z, name, parameters, n) \
+ , typename boost::parameter::aux::match< \
+ parameters, BOOST_PP_ENUM_PARAMS(n, ParameterArgumentType) \
+ >::type boost_parameter_enabler_argument = parameters()
+# else
+# define BOOST_PARAMETER_FUNCTION_FWD_MATCH_Z(z, name, parameters, n)
+# endif
+/**/
+
+# define BOOST_PARAMETER_FUNCTION_PARAMETERS_NAME(base) \
+ BOOST_PP_CAT( \
+ boost_param_parameters_ \
+ , BOOST_PP_CAT(__LINE__, BOOST_PARAMETER_MEMBER_FUNCTION_NAME(base)) \
+ )
+
+// Produce a name for a result type metafunction for the function
+// named base
+# define BOOST_PARAMETER_FUNCTION_RESULT_NAME(base) \
+ BOOST_PP_CAT( \
+ boost_param_result_ \
+ , BOOST_PP_CAT(__LINE__,BOOST_PARAMETER_MEMBER_FUNCTION_NAME(base)) \
+ )
+
+// Can't do boost_param_impl_ ## basee because base might start with an underscore
+// daniel: what? how is that relevant? the reason for using CAT() is to make sure
+// base is expanded. i'm not sure we need to here, but it's more stable to do it.
+# define BOOST_PARAMETER_IMPL(base) \
+ BOOST_PP_CAT(boost_param_impl,BOOST_PARAMETER_MEMBER_FUNCTION_NAME(base))
+
+# define BOOST_PARAMETER_FUNCTION_FWD_FUNCTION00(z, n, r, data, elem) \
+ BOOST_PP_IF( \
+ n \
+ , BOOST_PARAMETER_FUNCTION_FWD_FUNCTION_TEMPLATE_Z, BOOST_PP_TUPLE_EAT(2) \
+ )(z,n) \
+ BOOST_PARAMETER_MEMBER_FUNCTION_STATIC(BOOST_PP_TUPLE_ELEM(7,3,data)) \
+ inline \
+ BOOST_PP_EXPR_IF(n, typename) \
+ BOOST_PARAMETER_FUNCTION_RESULT_NAME(BOOST_PP_TUPLE_ELEM(7,3,data))< \
+ BOOST_PP_EXPR_IF(n, typename) \
+ boost::parameter::aux::argument_pack< \
+ BOOST_PARAMETER_FUNCTION_PARAMETERS_NAME(BOOST_PP_TUPLE_ELEM(7,3,data)) \
+ BOOST_PP_COMMA_IF(n) \
+ BOOST_PP_IF( \
+ n, BOOST_PP_SEQ_ENUM, BOOST_PP_TUPLE_EAT(1) \
+ )(elem) \
+ >::type \
+ >::type \
+ BOOST_PARAMETER_MEMBER_FUNCTION_NAME(BOOST_PP_TUPLE_ELEM(7,3,data))( \
+ BOOST_PP_IF( \
+ n \
+ , BOOST_PP_SEQ_FOR_EACH_I_R \
+ , BOOST_PP_TUPLE_EAT(4) \
+ )( \
+ r \
+ , BOOST_PARAMETER_FUNCTION_ARGUMENT \
+ , ~ \
+ , elem \
+ ) \
+ BOOST_PP_IF(n, BOOST_PARAMETER_FUNCTION_FWD_MATCH_Z, BOOST_PP_TUPLE_EAT(4))( \
+ z \
+ , BOOST_PP_TUPLE_ELEM(7,3,data) \
+ , BOOST_PARAMETER_FUNCTION_PARAMETERS_NAME(BOOST_PP_TUPLE_ELEM(7,3,data)) \
+ , n \
+ ) \
+ ) BOOST_PP_EXPR_IF(BOOST_PP_TUPLE_ELEM(7,4,data), const) \
+ { \
+ return BOOST_PARAMETER_IMPL(BOOST_PP_TUPLE_ELEM(7,3,data))( \
+ BOOST_PARAMETER_FUNCTION_PARAMETERS_NAME(BOOST_PP_TUPLE_ELEM(7,3,data))()( \
+ BOOST_PP_ENUM_PARAMS_Z(z, n, a) \
+ ) \
+ ); \
+ }
+/**/
+
+# define BOOST_PARAMETER_FUNCTION_FWD_FUNCTION0(r, data, elem) \
+ BOOST_PARAMETER_FUNCTION_FWD_FUNCTION00( \
+ BOOST_PP_TUPLE_ELEM(7,0,data) \
+ , BOOST_PP_TUPLE_ELEM(7,1,data) \
+ , r \
+ , data \
+ , elem \
+ )
+/**/
+
+# define BOOST_PARAMETER_FUNCTION_FWD_FUNCTION_ARITY_0(z, n, data) \
+ BOOST_PARAMETER_FUNCTION_FWD_FUNCTION00( \
+ z, n, BOOST_PP_DEDUCE_R() \
+ , (z, n, BOOST_PP_TUPLE_REM(5) data) \
+ , ~ \
+ )
+/**/
+
+# define BOOST_PARAMETER_FUNCTION_FWD_FUNCTION_ARITY_N(z, n, data) \
+ BOOST_PP_SEQ_FOR_EACH( \
+ BOOST_PARAMETER_FUNCTION_FWD_FUNCTION0 \
+ , (z, n, BOOST_PP_TUPLE_REM(5) data) \
+ , BOOST_PP_SEQ_FOR_EACH_PRODUCT( \
+ BOOST_PARAMETER_FUNCTION_FWD_PRODUCT \
+ , BOOST_PP_SEQ_FIRST_N( \
+ n, BOOST_PP_TUPLE_ELEM(5,3,data) \
+ ) \
+ ) \
+ )
+/**/
+
+# define BOOST_PARAMETER_FUNCTION_FWD_FUNCTION(z, n, data) \
+ BOOST_PP_IF( \
+ n \
+ , BOOST_PARAMETER_FUNCTION_FWD_FUNCTION_ARITY_N \
+ , BOOST_PARAMETER_FUNCTION_FWD_FUNCTION_ARITY_0 \
+ )(z,n,data) \
+/**/
+
+# define BOOST_PARAMETER_FUNCTION_FWD_FUNCTIONS0( \
+ result,name,args,const_,combinations,range \
+) \
+ BOOST_PP_REPEAT_FROM_TO( \
+ BOOST_PP_TUPLE_ELEM(2,0,range), BOOST_PP_TUPLE_ELEM(2,1,range) \
+ , BOOST_PARAMETER_FUNCTION_FWD_FUNCTION \
+ , (result,name,const_,combinations,BOOST_PP_TUPLE_ELEM(2,1,range)) \
+ )
+/**/
+
+# define BOOST_PARAMETER_FUNCTION_FWD_FUNCTIONS(result,name,args, const_, combinations) \
+ BOOST_PARAMETER_FUNCTION_FWD_FUNCTIONS0( \
+ result, name, args, const_, combinations, BOOST_PARAMETER_ARITY_RANGE(args) \
+ )
+/**/
+
+// Builds boost::parameter::parameters<> specialization
+# define BOOST_PARAMETER_FUNCTION_PARAMETERS_QUALIFIER_optional(tag) \
+ optional<tag
+
+# define BOOST_PARAMETER_FUNCTION_PARAMETERS_QUALIFIER_required(tag) \
+ required<tag
+
+# define BOOST_PARAMETER_FUNCTION_PARAMETERS_QUALIFIER_deduced_optional(tag) \
+ optional<boost::parameter::deduced<tag>
+
+# define BOOST_PARAMETER_FUNCTION_PARAMETERS_QUALIFIER_deduced_required(tag) \
+ required<boost::parameter::deduced<tag>
+
+# if !BOOST_WORKAROUND(BOOST_MSVC, < 1300) && !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+
+# if BOOST_WORKAROUND(BOOST_MSVC, == 1300)
+# define BOOST_PARAMETER_PREDICATE_TYPE(p) void*(*) (void* p)
+# else
+# define BOOST_PARAMETER_PREDICATE_TYPE(p) void p
+# endif
+
+# define BOOST_PARAMETER_FUNCTION_PARAMETERS_M(r,tag_namespace,i,elem) \
+ BOOST_PP_COMMA_IF(i) \
+ boost::parameter::BOOST_PP_CAT( \
+ BOOST_PARAMETER_FUNCTION_PARAMETERS_QUALIFIER_ \
+ , BOOST_PARAMETER_FN_ARG_QUALIFIER(elem) \
+ )( \
+ tag_namespace::BOOST_PARAMETER_FUNCTION_KEYWORD( \
+ BOOST_PARAMETER_FN_ARG_KEYWORD(elem) \
+ ) \
+ ) \
+ , typename boost::parameter::aux::unwrap_predicate< \
+ BOOST_PARAMETER_PREDICATE_TYPE(BOOST_PARAMETER_FN_ARG_PRED(elem)) \
+ >::type \
+ >
+# elif BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+# define BOOST_PARAMETER_FUNCTION_PARAMETERS_M(r,tag_namespace,i,elem) \
+ BOOST_PP_COMMA_IF(i) \
+ boost::parameter::BOOST_PP_CAT( \
+ BOOST_PARAMETER_FUNCTION_PARAMETERS_QUALIFIER_ \
+ , BOOST_PARAMETER_FN_ARG_QUALIFIER(elem) \
+ )( \
+ tag_namespace::BOOST_PARAMETER_FUNCTION_KEYWORD( \
+ BOOST_PARAMETER_FN_ARG_KEYWORD(elem) \
+ ) \
+ ) \
+ , boost::parameter::aux::funptr_predicate< \
+ void* BOOST_PARAMETER_FN_ARG_PRED(elem) \
+ > \
+ >
+# elif BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+# define BOOST_PARAMETER_FUNCTION_PARAMETERS_M(r,tag_namespace,i,elem) \
+ BOOST_PP_COMMA_IF(i) \
+ boost::parameter::BOOST_PP_CAT( \
+ BOOST_PARAMETER_FUNCTION_PARAMETERS_QUALIFIER_ \
+ , BOOST_PARAMETER_FN_ARG_QUALIFIER(elem) \
+ )( \
+ tag_namespace::BOOST_PARAMETER_FUNCTION_KEYWORD( \
+ BOOST_PARAMETER_FN_ARG_KEYWORD(elem) \
+ ) \
+ ) \
+ , boost::mpl::always<boost::mpl::true_> \
+ >
+# endif
+
+# define BOOST_PARAMETER_FUNCTION_PARAMETERS(tag_namespace, base, args) \
+ template <class BoostParameterDummy> \
+ struct BOOST_PP_CAT( \
+ BOOST_PP_CAT(boost_param_params_, __LINE__) \
+ , BOOST_PARAMETER_MEMBER_FUNCTION_NAME(base) \
+ ) : boost::parameter::parameters< \
+ BOOST_PP_SEQ_FOR_EACH_I( \
+ BOOST_PARAMETER_FUNCTION_PARAMETERS_M, tag_namespace, args \
+ ) \
+ > \
+ {}; \
+ \
+ typedef BOOST_PP_CAT( \
+ BOOST_PP_CAT(boost_param_params_, __LINE__) \
+ , BOOST_PARAMETER_MEMBER_FUNCTION_NAME(base) \
+ )<int>
+
+// Defines result type metafunction
+# define BOOST_PARAMETER_FUNCTION_RESULT_ARG(z, _, i, x) \
+ BOOST_PP_COMMA_IF(i) class BOOST_PP_TUPLE_ELEM(3,1,x)
+/**/
+
+# define BOOST_PARAMETER_FUNCTION_RESULT_(result, name, args) \
+ template <class Args> \
+ struct BOOST_PARAMETER_FUNCTION_RESULT_NAME(name) \
+ { \
+ typedef typename BOOST_PARAMETER_PARENTHESIZED_TYPE(result) type; \
+ };
+
+# if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+
+# define BOOST_PARAMETER_FUNCTION_RESULT(result, name, args) \
+ BOOST_PARAMETER_FUNCTION_RESULT_(result, name, args) \
+ template <> \
+ struct BOOST_PARAMETER_FUNCTION_RESULT_NAME(name)<int> \
+ { typedef int type; };
+
+# else
+
+# define BOOST_PARAMETER_FUNCTION_RESULT(result, name, args) \
+ BOOST_PARAMETER_FUNCTION_RESULT_(result, name, args)
+
+# endif
+
+// Defines implementation function
+# define BOOST_PARAMETER_FUNCTION_IMPL_HEAD(name) \
+ template <class Args> \
+ typename BOOST_PARAMETER_FUNCTION_RESULT_NAME(name)< \
+ Args \
+ >::type BOOST_PARAMETER_IMPL(name)(Args const& args)
+
+# define BOOST_PARAMETER_FUNCTION_IMPL_FWD(name) \
+ BOOST_PARAMETER_FUNCTION_IMPL_HEAD(name);
+/**/
+
+# define BOOST_PARAMETER_FUNCTION_SPLIT_ARG_required(state, arg) \
+ ( \
+ BOOST_PP_INC(BOOST_PP_TUPLE_ELEM(4, 0, state)) \
+ , BOOST_PP_SEQ_PUSH_BACK(BOOST_PP_TUPLE_ELEM(4, 1, state), arg) \
+ , BOOST_PP_TUPLE_ELEM(4, 2, state) \
+ , BOOST_PP_TUPLE_ELEM(4, 3, state) \
+ )
+
+# define BOOST_PARAMETER_FUNCTION_SPLIT_ARG_deduced_required(state, arg) \
+ BOOST_PARAMETER_FUNCTION_SPLIT_ARG_required(state, arg)
+
+# define BOOST_PARAMETER_FUNCTION_SPLIT_ARG_optional(state, arg) \
+ ( \
+ BOOST_PP_TUPLE_ELEM(4, 0, state) \
+ , BOOST_PP_TUPLE_ELEM(4, 1, state) \
+ , BOOST_PP_INC(BOOST_PP_TUPLE_ELEM(4, 2, state)) \
+ , BOOST_PP_SEQ_PUSH_BACK(BOOST_PP_TUPLE_ELEM(4, 3, state), arg) \
+ )
+
+# define BOOST_PARAMETER_FUNCTION_SPLIT_ARG_deduced_optional(state, arg) \
+ BOOST_PARAMETER_FUNCTION_SPLIT_ARG_optional(state, arg)
+
+# define BOOST_PARAMETER_FUNCTION_SPLIT_ARG(s, state, arg) \
+ BOOST_PP_CAT( \
+ BOOST_PARAMETER_FUNCTION_SPLIT_ARG_ \
+ , BOOST_PARAMETER_FN_ARG_QUALIFIER(arg) \
+ )(state, arg)
+
+// Returns (required_count, required, optional_count, optionals) tuple
+# define BOOST_PARAMETER_FUNCTION_SPLIT_ARGS(args) \
+ BOOST_PP_SEQ_FOLD_LEFT( \
+ BOOST_PARAMETER_FUNCTION_SPLIT_ARG \
+ , (0,BOOST_PP_SEQ_NIL, 0,BOOST_PP_SEQ_NIL) \
+ , args \
+ )
+
+# define BOOST_PARAMETER_FUNCTION_DEFAULT_FUNCTION_ARG_NAME(keyword) \
+ BOOST_PP_CAT(BOOST_PP_CAT(keyword,_),type)
+
+// Helpers used as parameters to BOOST_PARAMETER_FUNCTION_DEFAULT_ARGUMENTS.
+# define BOOST_PARAMETER_FUNCTION_DEFAULT_FUNCTION_TEMPLATE_ARG(r, _, arg) \
+ , class BOOST_PARAMETER_FUNCTION_DEFAULT_FUNCTION_ARG_NAME( \
+ BOOST_PARAMETER_FN_ARG_KEYWORD(arg) \
+ )
+
+# define BOOST_PARAMETER_FUNCTION_DEFAULT_FUNCTION_ARG(r, _, arg) \
+ , BOOST_PARAMETER_FUNCTION_DEFAULT_FUNCTION_ARG_NAME( \
+ BOOST_PARAMETER_FN_ARG_KEYWORD(arg) \
+ )& BOOST_PARAMETER_FN_ARG_KEYWORD(arg)
+
+# define BOOST_PARAMETER_FUNCTION_DEFAULT_FUNCTION_PARAMETER(r, _, arg) \
+ , BOOST_PARAMETER_FN_ARG_KEYWORD(arg)
+
+// Produces a name for the dispatch functions.
+# define BOOST_PARAMETER_FUNCTION_DEFAULT_NAME(name) \
+ BOOST_PP_CAT( \
+ boost_param_default_ \
+ , BOOST_PP_CAT(__LINE__, BOOST_PARAMETER_MEMBER_FUNCTION_NAME(name)) \
+ )
+
+// Helper macro used below to produce lists based on the keyword argument
+// names. macro is applied to every element. n is the number of
+// optional arguments that should be included.
+# define BOOST_PARAMETER_FUNCTION_DEFAULT_ARGUMENTS(macro, n, split_args) \
+ BOOST_PP_SEQ_FOR_EACH( \
+ macro \
+ , ~ \
+ , BOOST_PP_TUPLE_ELEM(4,1,split_args) \
+ ) \
+ BOOST_PP_SEQ_FOR_EACH( \
+ macro \
+ , ~ \
+ , BOOST_PP_SEQ_FIRST_N( \
+ BOOST_PP_SUB(BOOST_PP_TUPLE_ELEM(4,2,split_args), n) \
+ , BOOST_PP_TUPLE_ELEM(4,3,split_args) \
+ ) \
+ )
+
+// Generates a keyword | default expression.
+# define BOOST_PARAMETER_FUNCTION_DEFAULT_EVAL_DEFAULT(arg, tag_namespace) \
+ boost::parameter::keyword< \
+ tag_namespace::BOOST_PARAMETER_FN_ARG_KEYWORD(arg) \
+ >::get() | boost::parameter::aux::use_default_tag()
+
+# define BOOST_PARAMETER_FUNCTION_DEFAULT_FUNCTION_GET_ARG(arg, tag_ns) \
+ BOOST_PARAMETER_FUNCTION_CAST( \
+ args[ \
+ BOOST_PARAMETER_FUNCTION_DEFAULT_EVAL_DEFAULT( \
+ arg, tag_ns \
+ ) \
+ ] \
+ , BOOST_PARAMETER_FN_ARG_PRED(arg) \
+ )
+
+# define BOOST_PARAMETER_FUNCTION_DEFAULT_FUNCTION_BODY(name, n, split_args, tag_namespace) \
+ { \
+ return BOOST_PARAMETER_FUNCTION_DEFAULT_NAME(name)( \
+ (ResultType(*)())0 \
+ , args \
+ , 0L \
+ BOOST_PARAMETER_FUNCTION_DEFAULT_ARGUMENTS( \
+ BOOST_PARAMETER_FUNCTION_DEFAULT_FUNCTION_PARAMETER \
+ , n \
+ , split_args \
+ ) \
+ , BOOST_PARAMETER_FUNCTION_DEFAULT_FUNCTION_GET_ARG( \
+ BOOST_PP_SEQ_ELEM( \
+ BOOST_PP_SUB(BOOST_PP_TUPLE_ELEM(4,2,split_args), n) \
+ , BOOST_PP_TUPLE_ELEM(4,3,split_args) \
+ ) \
+ , tag_namespace \
+ ) \
+ ); \
+ }
+
+# define BOOST_PARAMETER_FUNCTION_DEFAULT_EVAL_ACTUAL_DEFAULT(arg) \
+ BOOST_PARAMETER_FUNCTION_CAST( \
+ boost::parameter::aux::as_lvalue(BOOST_PARAMETER_FN_ARG_DEFAULT(arg), 0L) \
+ , BOOST_PARAMETER_FN_ARG_PRED(arg) \
+ )
+
+# define BOOST_PARAMETER_FUNCTION_DEFAULT_EVAL_DEFAULT_BODY(name, n, split_args, tag_ns, const_) \
+ template < \
+ class ResultType \
+ , class Args \
+ BOOST_PARAMETER_FUNCTION_DEFAULT_ARGUMENTS( \
+ BOOST_PARAMETER_FUNCTION_DEFAULT_FUNCTION_TEMPLATE_ARG \
+ , BOOST_PP_INC(n) \
+ , split_args \
+ ) \
+ > \
+ BOOST_PARAMETER_MEMBER_FUNCTION_STATIC(name) \
+ ResultType BOOST_PARAMETER_FUNCTION_DEFAULT_NAME(name)( \
+ ResultType(*)() \
+ , Args const& args \
+ , long \
+ BOOST_PARAMETER_FUNCTION_DEFAULT_ARGUMENTS( \
+ BOOST_PARAMETER_FUNCTION_DEFAULT_FUNCTION_ARG \
+ , BOOST_PP_INC(n) \
+ , split_args \
+ ) \
+ , boost::parameter::aux::use_default_tag \
+ ) BOOST_PP_EXPR_IF(const_, const) \
+ { \
+ return BOOST_PARAMETER_FUNCTION_DEFAULT_NAME(name)( \
+ (ResultType(*)())0 \
+ , args \
+ , 0L \
+ BOOST_PARAMETER_FUNCTION_DEFAULT_ARGUMENTS( \
+ BOOST_PARAMETER_FUNCTION_DEFAULT_FUNCTION_PARAMETER \
+ , BOOST_PP_INC(n) \
+ , split_args \
+ ) \
+ , BOOST_PARAMETER_FUNCTION_DEFAULT_EVAL_ACTUAL_DEFAULT( \
+ BOOST_PP_SEQ_ELEM( \
+ BOOST_PP_SUB(BOOST_PP_TUPLE_ELEM(4,2,split_args), BOOST_PP_INC(n)) \
+ , BOOST_PP_TUPLE_ELEM(4,3,split_args) \
+ ) \
+ ) \
+ ); \
+ }
+
+// Produces a forwarding layer in the default evaluation machine.
+//
+// data is a tuple:
+//
+// (name, split_args)
+//
+// Where name is the base name of the function, and split_args is a tuple:
+//
+// (required_count, required_args, optional_count, required_args)
+//
+
+
+// defines the actual function body for BOOST_PARAMETER_FUNCTION_DEFAULT_FUNCTION below.
+# define BOOST_PARAMETER_FUNCTION_DEFAULT_FUNCTION0(z, n, data) \
+ template < \
+ class ResultType \
+ , class Args \
+ BOOST_PARAMETER_FUNCTION_DEFAULT_ARGUMENTS( \
+ BOOST_PARAMETER_FUNCTION_DEFAULT_FUNCTION_TEMPLATE_ARG \
+ , n \
+ , BOOST_PP_TUPLE_ELEM(5,1,data) \
+ ) \
+ > \
+ BOOST_PARAMETER_MEMBER_FUNCTION_STATIC(BOOST_PP_TUPLE_ELEM(5,0,data)) \
+ ResultType BOOST_PARAMETER_FUNCTION_DEFAULT_NAME(BOOST_PP_TUPLE_ELEM(5,0,data))( \
+ ResultType(*)() \
+ , Args const& args \
+ , int \
+ BOOST_PARAMETER_FUNCTION_DEFAULT_ARGUMENTS( \
+ BOOST_PARAMETER_FUNCTION_DEFAULT_FUNCTION_ARG \
+ , n \
+ , BOOST_PP_TUPLE_ELEM(5,1,data) \
+ ) \
+ ) BOOST_PP_EXPR_IF(BOOST_PP_TUPLE_ELEM(5,2,data), const) \
+ BOOST_PP_IF( \
+ n \
+ , BOOST_PARAMETER_FUNCTION_DEFAULT_FUNCTION_BODY \
+ , ; BOOST_PP_TUPLE_EAT(4) \
+ )( \
+ BOOST_PP_TUPLE_ELEM(5,0,data) \
+ , n \
+ , BOOST_PP_TUPLE_ELEM(5,1,data) \
+ , BOOST_PP_TUPLE_ELEM(5,3,data) \
+ )
+
+# define BOOST_PARAMETER_FUNCTION_DEFAULT_FUNCTION(z, n, data) \
+ BOOST_PP_IF( \
+ BOOST_PP_AND( \
+ BOOST_PP_NOT(n) \
+ , BOOST_PP_TUPLE_ELEM(5,4,data) \
+ ) \
+ , BOOST_PP_TUPLE_EAT(3) \
+ , BOOST_PARAMETER_FUNCTION_DEFAULT_FUNCTION0 \
+ )(z, n, data) \
+ BOOST_PP_IF( \
+ BOOST_PP_EQUAL(n, BOOST_PP_TUPLE_ELEM(4,2,BOOST_PP_TUPLE_ELEM(5,1,data))) \
+ , BOOST_PP_TUPLE_EAT(5) \
+ , BOOST_PARAMETER_FUNCTION_DEFAULT_EVAL_DEFAULT_BODY \
+ )( \
+ BOOST_PP_TUPLE_ELEM(5,0,data) \
+ , n \
+ , BOOST_PP_TUPLE_ELEM(5,1,data) \
+ , BOOST_PP_TUPLE_ELEM(5,3,data) \
+ , BOOST_PP_TUPLE_ELEM(5,2,data) \
+ )
+
+# define BOOST_PARAMETER_FUNCTION_DEFAULT_GET_ARG(r, tag_ns, arg) \
+ , BOOST_PARAMETER_FUNCTION_CAST( \
+ args[ \
+ boost::parameter::keyword<tag_ns::BOOST_PARAMETER_FN_ARG_KEYWORD(arg)>::get() \
+ ] \
+ , BOOST_PARAMETER_FN_ARG_PRED(arg) \
+ )
+
+// Generates the function template that recives a ArgumentPack, and then
+// goes on to call the layers of overloads generated by
+// BOOST_PARAMETER_FUNCTION_DEFAULT_LAYER.
+# define BOOST_PARAMETER_FUNCTION_INITIAL_DISPATCH_FUNCTION(name, split_args, const_, tag_ns) \
+ template <class Args> \
+ typename BOOST_PARAMETER_FUNCTION_RESULT_NAME(name)<Args>::type \
+ BOOST_PARAMETER_MEMBER_FUNCTION_STATIC(name) \
+ BOOST_PARAMETER_IMPL(name)(Args const& args) BOOST_PP_EXPR_IF(const_, const) \
+ { \
+ return BOOST_PARAMETER_FUNCTION_DEFAULT_NAME(name)( \
+ (typename BOOST_PARAMETER_FUNCTION_RESULT_NAME(name)<Args>::type(*)())0 \
+ , args \
+ , 0L \
+ \
+ BOOST_PP_SEQ_FOR_EACH( \
+ BOOST_PARAMETER_FUNCTION_DEFAULT_GET_ARG \
+ , tag_ns \
+ , BOOST_PP_TUPLE_ELEM(4,1,split_args) \
+ ) \
+ \
+ ); \
+ }
+
+// Helper for BOOST_PARAMETER_FUNCTION_DEFAULT_LAYER below.
+# define BOOST_PARAMETER_FUNCTION_DEFAULT_LAYER_AUX( \
+ name, split_args, skip_fwd_decl, const_, tag_namespace \
+ ) \
+ BOOST_PP_REPEAT_FROM_TO( \
+ 0 \
+ , BOOST_PP_INC(BOOST_PP_TUPLE_ELEM(4, 2, split_args)) \
+ , BOOST_PARAMETER_FUNCTION_DEFAULT_FUNCTION \
+ , (name, split_args, const_, tag_namespace, skip_fwd_decl) \
+ ) \
+ \
+ BOOST_PARAMETER_FUNCTION_INITIAL_DISPATCH_FUNCTION(name, split_args, const_, tag_namespace) \
+\
+ template < \
+ class ResultType \
+ , class Args \
+ BOOST_PARAMETER_FUNCTION_DEFAULT_ARGUMENTS( \
+ BOOST_PARAMETER_FUNCTION_DEFAULT_FUNCTION_TEMPLATE_ARG \
+ , 0 \
+ , split_args \
+ ) \
+ > \
+ BOOST_PARAMETER_MEMBER_FUNCTION_STATIC(name) \
+ ResultType BOOST_PARAMETER_FUNCTION_DEFAULT_NAME(name)( \
+ ResultType(*)() \
+ , Args const& args \
+ , int \
+ BOOST_PARAMETER_FUNCTION_DEFAULT_ARGUMENTS( \
+ BOOST_PARAMETER_FUNCTION_DEFAULT_FUNCTION_ARG \
+ , 0 \
+ , split_args \
+ ) \
+ ) BOOST_PP_EXPR_IF(const_, const)
+
+// Generates a bunch of forwarding functions that each extract
+// one more argument.
+# define BOOST_PARAMETER_FUNCTION_DEFAULT_LAYER(name, args, skip_fwd_decl, const_, tag_ns) \
+ BOOST_PARAMETER_FUNCTION_DEFAULT_LAYER_AUX( \
+ name, BOOST_PARAMETER_FUNCTION_SPLIT_ARGS(args), skip_fwd_decl, const_, tag_ns \
+ )
+/**/
+
+// Defines the result metafunction and the parameters specialization.
+# define BOOST_PARAMETER_FUNCTION_HEAD(result, name, tag_namespace, args) \
+ BOOST_PARAMETER_FUNCTION_RESULT(result, name, args) \
+ \
+ BOOST_PARAMETER_FUNCTION_PARAMETERS(tag_namespace, name, args) \
+ BOOST_PARAMETER_FUNCTION_PARAMETERS_NAME(name); \
+
+// Helper for BOOST_PARAMETER_FUNCTION below.
+# define BOOST_PARAMETER_FUNCTION_AUX(result, name, tag_namespace, args) \
+ BOOST_PARAMETER_FUNCTION_HEAD(result, name, tag_namespace, args) \
+ BOOST_PARAMETER_FUNCTION_IMPL_HEAD(name); \
+\
+ BOOST_PARAMETER_FUNCTION_FWD_FUNCTIONS( \
+ result, name, args, 0 \
+ , BOOST_PARAMETER_FUNCTION_FWD_COMBINATIONS(args) \
+ ) \
+ \
+ BOOST_PARAMETER_FUNCTION_DEFAULT_LAYER(name, args, 0, 0, tag_namespace)
+
+// Defines a Boost.Parameter enabled function with the new syntax.
+# define BOOST_PARAMETER_FUNCTION(result, name, tag_namespace, args) \
+ BOOST_PARAMETER_FUNCTION_AUX( \
+ result, name, tag_namespace \
+ , BOOST_PARAMETER_FLATTEN(3, 2, 3, args) \
+ ) \
+/**/
+
+// Defines a Boost.Parameter enabled function.
+# define BOOST_PARAMETER_BASIC_FUNCTION_AUX(result, name, tag_namespace, args) \
+ BOOST_PARAMETER_FUNCTION_HEAD(result, name, tag_namespace, args) \
+ \
+ BOOST_PARAMETER_FUNCTION_IMPL_FWD(name) \
+ \
+ BOOST_PARAMETER_FUNCTION_FWD_FUNCTIONS( \
+ result, name, args, 0 \
+ , BOOST_PARAMETER_FUNCTION_FWD_COMBINATIONS(args) \
+ ) \
+ \
+ BOOST_PARAMETER_FUNCTION_IMPL_HEAD(name)
+
+# define BOOST_PARAMETER_BASIC_FUNCTION(result, name, tag_namespace, args) \
+ BOOST_PARAMETER_BASIC_FUNCTION_AUX( \
+ result, name, tag_namespace \
+ , BOOST_PARAMETER_FLATTEN(2, 2, 3, args) \
+ ) \
+/**/
+
+// Defines a Boost.Parameter enabled member function.
+# define BOOST_PARAMETER_BASIC_MEMBER_FUNCTION_AUX(result, name, tag_namespace, args, const_) \
+ BOOST_PARAMETER_FUNCTION_HEAD(result, name, tag_namespace, args) \
+ \
+ BOOST_PARAMETER_FUNCTION_FWD_FUNCTIONS( \
+ result, name, args, const_ \
+ , BOOST_PARAMETER_FUNCTION_FWD_COMBINATIONS(args) \
+ ) \
+ \
+ BOOST_PARAMETER_FUNCTION_IMPL_HEAD(name) BOOST_PP_EXPR_IF(const_, const) \
+/**/
+
+# define BOOST_PARAMETER_BASIC_MEMBER_FUNCTION(result, name, tag_namespace, args) \
+ BOOST_PARAMETER_BASIC_MEMBER_FUNCTION_AUX( \
+ result, name, tag_namespace \
+ , BOOST_PARAMETER_FLATTEN(2, 2, 3, args) \
+ , 0 \
+ )
+/**/
+
+# define BOOST_PARAMETER_BASIC_CONST_MEMBER_FUNCTION(result, name, tag_namespace, args) \
+ BOOST_PARAMETER_BASIC_MEMBER_FUNCTION_AUX( \
+ result, name, tag_namespace \
+ , BOOST_PARAMETER_FLATTEN(2, 2, 3, args) \
+ , 1 \
+ )
+/**/
+
+
+
+# define BOOST_PARAMETER_MEMBER_FUNCTION_AUX(result, name, tag_namespace, const_, args) \
+ BOOST_PARAMETER_FUNCTION_HEAD(result, name, tag_namespace, args) \
+\
+ BOOST_PARAMETER_FUNCTION_FWD_FUNCTIONS( \
+ result, name, args, const_ \
+ , BOOST_PARAMETER_FUNCTION_FWD_COMBINATIONS(args) \
+ ) \
+ \
+ BOOST_PARAMETER_FUNCTION_DEFAULT_LAYER(name, args, 1, const_, tag_namespace)
+
+// Defines a Boost.Parameter enabled function with the new syntax.
+# define BOOST_PARAMETER_MEMBER_FUNCTION(result, name, tag_namespace, args) \
+ BOOST_PARAMETER_MEMBER_FUNCTION_AUX( \
+ result, name, tag_namespace, 0 \
+ , BOOST_PARAMETER_FLATTEN(3, 2, 3, args) \
+ ) \
+/**/
+
+# define BOOST_PARAMETER_CONST_MEMBER_FUNCTION(result, name, tag_namespace, args) \
+ BOOST_PARAMETER_MEMBER_FUNCTION_AUX( \
+ result, name, tag_namespace, 1 \
+ , BOOST_PARAMETER_FLATTEN(3, 2, 3, args) \
+ ) \
+/**/
+
+// Defines a Boost.Parameter enabled constructor.
+
+# define BOOST_PARAMETER_FUNCTION_ARGUMENT(r, _, i, elem) \
+ BOOST_PP_COMMA_IF(i) elem& BOOST_PP_CAT(a, i)
+/**/
+
+# if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+
+// Older MSVC can't do what's necessary to handle commas in base names; just
+// use a typedef instead if you have a base name that contains commas.
+# define BOOST_PARAMETER_PARENTHESIZED_BASE(x) BOOST_PP_SEQ_HEAD(x)
+
+# else
+
+# define BOOST_PARAMETER_PARENTHESIZED_BASE(x) BOOST_PARAMETER_PARENTHESIZED_TYPE(x)
+
+# endif
+
+# define BOOST_PARAMETER_FUNCTION_FWD_CONSTRUCTOR00(z, n, r, data, elem) \
+ BOOST_PP_IF( \
+ n \
+ , BOOST_PARAMETER_FUNCTION_FWD_FUNCTION_TEMPLATE_Z, BOOST_PP_TUPLE_EAT(2) \
+ )(z, n) \
+ BOOST_PP_EXPR_IF(BOOST_PP_EQUAL(n,1), explicit) \
+ BOOST_PP_TUPLE_ELEM(6,2,data)( \
+ BOOST_PP_IF( \
+ n \
+ , BOOST_PP_SEQ_FOR_EACH_I_R \
+ , BOOST_PP_TUPLE_EAT(4) \
+ )( \
+ r \
+ , BOOST_PARAMETER_FUNCTION_ARGUMENT \
+ , ~ \
+ , elem \
+ ) \
+ BOOST_PP_IF(n, BOOST_PARAMETER_FUNCTION_FWD_MATCH_Z, BOOST_PP_TUPLE_EAT(4))( \
+ z \
+ , BOOST_PP_TUPLE_ELEM(6,3,data) \
+ , BOOST_PP_CAT(constructor_parameters, __LINE__) \
+ , n \
+ ) \
+ ) \
+ : BOOST_PARAMETER_PARENTHESIZED_BASE(BOOST_PP_TUPLE_ELEM(6,3,data)) ( \
+ BOOST_PP_CAT(constructor_parameters, __LINE__)()( \
+ BOOST_PP_ENUM_PARAMS_Z(z, n, a) \
+ ) \
+ ) \
+ {}
+/**/
+
+# define BOOST_PARAMETER_FUNCTION_FWD_CONSTRUCTOR0(r, data, elem) \
+ BOOST_PARAMETER_FUNCTION_FWD_CONSTRUCTOR00( \
+ BOOST_PP_TUPLE_ELEM(6,0,data) \
+ , BOOST_PP_TUPLE_ELEM(6,1,data) \
+ , r \
+ , data \
+ , elem \
+ )
+/**/
+
+# define BOOST_PARAMETER_FUNCTION_FWD_PRODUCT(r, product) \
+ (product)
+/**/
+
+# define BOOST_PARAMETER_FUNCTION_FWD_CONSTRUCTOR_ARITY_0(z, n, data) \
+ BOOST_PARAMETER_FUNCTION_FWD_CONSTRUCTOR00( \
+ z, n, BOOST_PP_DEDUCE_R() \
+ , (z, n, BOOST_PP_TUPLE_REM(4) data) \
+ , ~ \
+ )
+/**/
+
+# define BOOST_PARAMETER_FUNCTION_FWD_CONSTRUCTOR_ARITY_N(z, n, data) \
+ BOOST_PP_SEQ_FOR_EACH( \
+ BOOST_PARAMETER_FUNCTION_FWD_CONSTRUCTOR0 \
+ , (z, n, BOOST_PP_TUPLE_REM(4) data) \
+ , BOOST_PP_SEQ_FOR_EACH_PRODUCT( \
+ BOOST_PARAMETER_FUNCTION_FWD_PRODUCT \
+ , BOOST_PP_SEQ_FIRST_N( \
+ n, BOOST_PP_TUPLE_ELEM(4,2,data) \
+ ) \
+ ) \
+ )
+/**/
+
+# define BOOST_PARAMETER_FUNCTION_FWD_CONSTRUCTOR(z, n, data) \
+ BOOST_PP_IF( \
+ n \
+ , BOOST_PARAMETER_FUNCTION_FWD_CONSTRUCTOR_ARITY_N \
+ , BOOST_PARAMETER_FUNCTION_FWD_CONSTRUCTOR_ARITY_0 \
+ )(z,n,data) \
+/**/
+
+# define BOOST_PARAMETER_FUNCTION_FWD_CONSTRUCTORS0(class_,base,args,combinations,range) \
+ BOOST_PP_REPEAT_FROM_TO( \
+ BOOST_PP_TUPLE_ELEM(2,0,range), BOOST_PP_TUPLE_ELEM(2,1,range) \
+ , BOOST_PARAMETER_FUNCTION_FWD_CONSTRUCTOR \
+ , (class_,base,combinations,BOOST_PP_TUPLE_ELEM(2,1,range)) \
+ )
+/**/
+
+# define BOOST_PARAMETER_FUNCTION_FWD_CONSTRUCTORS(class_,base,args,combinations) \
+ BOOST_PARAMETER_FUNCTION_FWD_CONSTRUCTORS0( \
+ class_, base, args, combinations, BOOST_PARAMETER_ARITY_RANGE(args) \
+ )
+/**/
+
+# define BOOST_PARAMETER_CONSTRUCTOR_AUX(class_, base, tag_namespace, args) \
+ BOOST_PARAMETER_FUNCTION_PARAMETERS(tag_namespace, ctor, args) \
+ BOOST_PP_CAT(constructor_parameters, __LINE__); \
+\
+ BOOST_PARAMETER_FUNCTION_FWD_CONSTRUCTORS( \
+ class_, base, args \
+ , BOOST_PARAMETER_FUNCTION_FWD_COMBINATIONS(args) \
+ ) \
+/**/
+
+# define BOOST_PARAMETER_CONSTRUCTOR(class_, base, tag_namespace, args) \
+ BOOST_PARAMETER_CONSTRUCTOR_AUX( \
+ class_, base, tag_namespace \
+ , BOOST_PARAMETER_FLATTEN(2, 2, 3, args) \
+ )
+/**/
+
+# ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+# define BOOST_PARAMETER_FUNCTION_FWD_COMBINATION(r, _, i, elem) \
+ (BOOST_PP_IF( \
+ BOOST_PARAMETER_FUNCTION_IS_KEYWORD_QUALIFIER( \
+ BOOST_PARAMETER_FN_ARG_NAME(elem) \
+ ) \
+ , (const ParameterArgumentType ## i)(ParameterArgumentType ## i) \
+ , (const ParameterArgumentType ## i) \
+ ))
+// MSVC6.5 lets us bind rvalues to T&.
+# elif BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+# define BOOST_PARAMETER_FUNCTION_FWD_COMBINATION(r, _, i, elem) \
+ (BOOST_PP_IF( \
+ BOOST_PARAMETER_FUNCTION_IS_KEYWORD_QUALIFIER( \
+ BOOST_PARAMETER_FN_ARG_NAME(elem) \
+ ) \
+ , (ParameterArgumentType ## i) \
+ , (const ParameterArgumentType ## i) \
+ ))
+// No partial ordering. This feature doesn't work.
+// This is exactly the same as for VC6.5, but we might change it later.
+# else
+# define BOOST_PARAMETER_FUNCTION_FWD_COMBINATION(r, _, i, elem) \
+ (BOOST_PP_IF( \
+ BOOST_PARAMETER_FUNCTION_IS_KEYWORD_QUALIFIER( \
+ BOOST_PARAMETER_FN_ARG_NAME(elem) \
+ ) \
+ , (ParameterArgumentType ## i) \
+ , (const ParameterArgumentType ## i) \
+ ))
+# endif
+
+# define BOOST_PARAMETER_FUNCTION_FWD_COMBINATIONS(args) \
+ BOOST_PP_SEQ_FOR_EACH_I(BOOST_PARAMETER_FUNCTION_FWD_COMBINATION, ~, args)
+
+#endif // BOOST_PARAMETER_PREPROCESSOR_060206_HPP
+
diff --git a/boost/boost/parameter/python.hpp b/boost/boost/parameter/python.hpp
new file mode 100644
index 00000000000..a52fc6ed765
--- /dev/null
+++ b/boost/boost/parameter/python.hpp
@@ -0,0 +1,735 @@
+// Copyright Daniel Wallin 2006. Use, modification and distribution is
+// 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)
+
+#ifndef BOOST_PARAMETER_PYTHON_060209_HPP
+# define BOOST_PARAMETER_PYTHON_060209_HPP
+
+# include <boost/mpl/vector.hpp>
+# include <boost/mpl/fold.hpp>
+# include <boost/mpl/prior.hpp>
+# include <boost/mpl/shift_right.hpp>
+# include <boost/mpl/shift_left.hpp>
+# include <boost/mpl/bitand.hpp>
+# include <boost/mpl/pair.hpp>
+# include <boost/mpl/size.hpp>
+# include <boost/mpl/push_back.hpp>
+# include <boost/mpl/or.hpp>
+# include <boost/mpl/count_if.hpp>
+# include <boost/mpl/transform.hpp>
+# include <boost/mpl/front.hpp>
+# include <boost/mpl/iterator_range.hpp>
+# include <boost/mpl/next.hpp>
+# include <boost/mpl/begin_end.hpp>
+# include <boost/mpl/not.hpp>
+# include <boost/mpl/empty.hpp>
+# include <boost/python/def.hpp>
+# include <boost/python/make_constructor.hpp>
+# include <boost/python/init.hpp>
+# include <boost/python/to_python_converter.hpp>
+# include <boost/parameter/aux_/maybe.hpp>
+# include <boost/parameter/aux_/python/invoker.hpp>
+
+namespace boost { namespace parameter { namespace python
+{
+ namespace python_ = boost::python;
+}}}
+
+namespace boost { namespace parameter { namespace python { namespace aux
+{
+
+ inline PyObject* unspecified_type()
+ {
+ static PyTypeObject unspecified = {
+ PyObject_HEAD_INIT(NULL)
+ 0, /* ob_size */
+ "Boost.Parameter.Unspecified", /* tp_name */
+ PyType_Type.tp_basicsize, /* tp_basicsize */
+ 0, /* tp_itemsize */
+ 0, /* tp_dealloc */
+ 0, /* tp_print */
+ 0, /* tp_getattr */
+ 0, /* tp_setattr */
+ 0, /* tp_compare */
+ 0, /* tp_repr */
+ 0, /* tp_as_number */
+ 0, /* tp_as_sequence */
+ 0, /* tp_as_mapping */
+ 0, /* tp_hash */
+ 0, /* tp_call */
+ 0, /* tp_str */
+ 0, /* tp_getattro */
+ 0, /* tp_setattro */
+ 0, /* tp_as_buffer */
+ Py_TPFLAGS_DEFAULT, /* tp_flags */
+ 0, /* tp_doc */
+ };
+
+ if (unspecified.ob_type == 0)
+ {
+ unspecified.ob_type = &PyType_Type;
+ PyType_Ready(&unspecified);
+ }
+
+ return (PyObject*)&unspecified;
+ }
+
+ struct empty_tag {};
+
+ struct empty_tag_to_python
+ {
+ static PyObject* convert(empty_tag)
+ {
+ return python_::xincref(unspecified_type());
+ }
+ };
+
+}}}} // namespace boost::parameter::python::aux
+
+namespace boost { namespace python
+{
+
+ // Converts a Python value to a maybe<T>
+ template <class T>
+ struct arg_from_python<parameter::aux::maybe<T> >
+ : arg_from_python<T>
+ {
+ arg_from_python(PyObject* p)
+ : arg_from_python<T>(p)
+ , empty(parameter::python::aux::unspecified_type() == p)
+ {}
+
+ bool convertible() const
+ {
+ return empty || arg_from_python<T>::convertible();
+ }
+
+ parameter::aux::maybe<T> operator()()
+ {
+ if (empty)
+ {
+ return parameter::aux::maybe<T>();
+ }
+ else
+ {
+ return parameter::aux::maybe<T>(
+ arg_from_python<T>::operator()()
+ );
+ }
+ }
+
+ bool empty;
+ };
+
+}} // namespace boost::python
+
+namespace boost { namespace parameter { namespace python {
+
+namespace aux
+{
+
+ template <class K>
+ struct is_optional
+ : mpl::not_<
+ mpl::or_<typename K::required, typename K::optimized_default>
+ >
+ {};
+
+ template <class K, class Required, class Optimized, class T>
+ struct arg_spec
+ {
+ typedef K keyword;
+ typedef Required required;
+ typedef T type;
+ typedef Optimized optimized_default;
+ };
+
+ template <class K, class T, class Optimized = mpl::false_>
+ struct make_arg_spec_impl
+ {
+ typedef arg_spec<
+ typename K::first, typename K::second, Optimized, T
+ > type;
+ };
+
+ template <class K, class T>
+ struct make_arg_spec_impl<K, T, typename K::third>
+ {
+ typedef arg_spec<
+ typename K::first, typename K::second, typename K::third, T
+ > type;
+ };
+
+ template <class K, class T>
+ struct make_arg_spec
+ : make_arg_spec_impl<K, T>
+ {
+ };
+
+ template <class Spec, class State>
+ struct combinations_op
+ {
+ typedef typename State::second bits;
+ typedef typename State::first result0;
+
+ typedef typename mpl::if_<
+ mpl::or_<
+ typename Spec::required
+ , typename Spec::optimized_default
+ , mpl::bitand_<bits, mpl::long_<1> >
+ >
+ , typename mpl::push_back<result0, Spec>::type
+ , result0
+ >::type result;
+
+ typedef typename mpl::if_<
+ mpl::or_<
+ typename Spec::required
+ , typename Spec::optimized_default
+ >
+ , bits
+ , typename mpl::shift_right<bits, mpl::long_<1> >::type
+ >::type next_bits;
+
+ typedef mpl::pair<
+ result
+ , next_bits
+ > type;
+ };
+
+ // Used as start value in the recursive arg() composition below.
+ struct no_keywords
+ {
+ template <class T>
+ T const& operator,(T const& x) const
+ {
+ return x;
+ }
+ };
+
+ template <class Def, class F, class Iter, class End, class Keywords>
+ void def_combination_aux0(
+ Def def, F f, Iter, End, Keywords const& keywords, mpl::false_)
+ {
+ typedef typename mpl::deref<Iter>::type spec;
+ typedef typename spec::keyword kw;
+
+ def_combination_aux(
+ def, f, typename mpl::next<Iter>::type(), End()
+ , (
+ keywords, boost::python::arg(kw::keyword_name())
+ )
+ );
+ }
+
+ template <class Def, class F, class Iter, class End, class Keywords>
+ void def_combination_aux0(
+ Def def, F f, Iter, End, Keywords const& keywords, mpl::true_)
+ {
+ typedef typename mpl::deref<Iter>::type spec;
+ typedef typename spec::keyword kw;
+
+ def_combination_aux(
+ def, f, typename mpl::next<Iter>::type(), End()
+ , (
+ keywords, boost::python::arg(kw::keyword_name()) = empty_tag()
+ )
+ );
+ }
+
+ inline void initialize_converter()
+ {
+ static python_::to_python_converter<empty_tag, empty_tag_to_python> x;
+ }
+
+ template <class Def, class F, class Iter, class End, class Keywords>
+ void def_combination_aux(
+ Def def, F f, Iter, End, Keywords const& keywords)
+ {
+ typedef typename mpl::deref<Iter>::type spec;
+
+ typedef typename mpl::and_<
+ typename spec::optimized_default
+ , mpl::not_<typename spec::required>
+ >::type optimized_default;
+
+ def_combination_aux0(
+ def, f, Iter(), End(), keywords, optimized_default()
+ );
+ }
+
+ template <class Def, class F, class End, class Keywords>
+ void def_combination_aux(
+ Def def, F f, End, End, Keywords const& keywords)
+ {
+ def(f, keywords);
+ }
+
+ template <class Def, class F, class End>
+ void def_combination_aux(
+ Def def, F f, End, End, no_keywords const&)
+ {
+ def(f);
+ }
+
+ template <
+ class Def, class Specs, class Bits, class Invoker
+ >
+ void def_combination(
+ Def def, Specs*, Bits, Invoker*)
+ {
+ typedef typename mpl::fold<
+ Specs
+ , mpl::pair<mpl::vector0<>, Bits>
+ , combinations_op<mpl::_2, mpl::_1>
+ >::type combination0;
+
+ typedef typename combination0::first combination;
+
+ typedef typename mpl::apply_wrap1<
+ Invoker, combination
+ >::type invoker;
+
+ def_combination_aux(
+ def
+ , &invoker::execute
+ , typename mpl::begin<combination>::type()
+ , typename mpl::end<combination>::type()
+ , no_keywords()
+ );
+ }
+
+ template <
+ class Def, class Specs, class Bits, class End, class Invoker
+ >
+ void def_combinations(
+ Def def, Specs*, Bits, End, Invoker*)
+ {
+ initialize_converter();
+
+ def_combination(def, (Specs*)0, Bits(), (Invoker*)0);
+
+ def_combinations(
+ def
+ , (Specs*)0
+ , mpl::long_<Bits::value + 1>()
+ , End()
+ , (Invoker*)0
+ );
+ }
+
+ template <
+ class Def, class Specs, class End, class Invoker
+ >
+ void def_combinations(
+ Def, Specs*, End, End, Invoker*)
+ {}
+
+ struct not_specified {};
+
+ template <class CallPolicies>
+ struct call_policies_as_options
+ {
+ call_policies_as_options(CallPolicies const& call_policies)
+ : call_policies(call_policies)
+ {}
+
+ CallPolicies const& policies() const
+ {
+ return call_policies;
+ }
+
+ char const* doc() const
+ {
+ return 0;
+ }
+
+ CallPolicies call_policies;
+ };
+
+ template <class Class, class Options = not_specified>
+ struct def_class
+ {
+ def_class(Class& cl, char const* name, Options options = Options())
+ : cl(cl)
+ , name(name)
+ , options(options)
+ {}
+
+ template <class F>
+ void def(F f, not_specified const*) const
+ {
+ cl.def(name, f);
+ }
+
+ template <class F>
+ void def(F f, void const*) const
+ {
+ cl.def(name, f, options.doc(), options.policies());
+ }
+
+ template <class F>
+ void operator()(F f) const
+ {
+ this->def(f, &options);
+ }
+
+ template <class F, class Keywords>
+ void def(F f, Keywords const& keywords, not_specified const*) const
+ {
+ cl.def(name, f, keywords);
+ }
+
+ template <class F, class Keywords>
+ void def(F f, Keywords const& keywords, void const*) const
+ {
+ cl.def(name, f, keywords, options.doc(), options.policies());
+ }
+
+ template <class F, class Keywords>
+ void operator()(F f, Keywords const& keywords) const
+ {
+ this->def(f, keywords, &options);
+ }
+
+ Class& cl;
+ char const* name;
+ Options options;
+ };
+
+ template <class Class, class CallPolicies = boost::python::default_call_policies>
+ struct def_init
+ {
+ def_init(Class& cl, CallPolicies call_policies = CallPolicies())
+ : cl(cl)
+ , call_policies(call_policies)
+ {}
+
+ template <class F>
+ void operator()(F f) const
+ {
+ cl.def(
+ "__init__"
+ , boost::python::make_constructor(f, call_policies)
+ );
+ }
+
+ template <class F, class Keywords>
+ void operator()(F f, Keywords const& keywords) const
+ {
+ cl.def(
+ "__init__"
+ , boost::python::make_constructor(f, call_policies, keywords)
+ );
+ }
+
+ Class& cl;
+ CallPolicies call_policies;
+ };
+
+ struct def_function
+ {
+ def_function(char const* name)
+ : name(name)
+ {}
+
+ template <class F>
+ void operator()(F f) const
+ {
+ boost::python::def(name, f);
+ }
+
+ template <class F, class Keywords>
+ void operator()(F f, Keywords const& keywords) const
+ {
+ boost::python::def(name, f, keywords);
+ }
+
+ char const* name;
+ };
+
+} // namespace aux
+
+template <class M, class Signature>
+void def(char const* name, Signature)
+{
+ typedef mpl::iterator_range<
+ typename mpl::next<
+ typename mpl::begin<Signature>::type
+ >::type
+ , typename mpl::end<Signature>::type
+ > arg_types;
+
+ typedef typename mpl::transform<
+ typename M::keywords
+ , arg_types
+ , aux::make_arg_spec<mpl::_1, mpl::_2>
+ , mpl::back_inserter<mpl::vector0<> >
+ >::type arg_specs;
+
+ typedef typename mpl::count_if<
+ arg_specs
+ , aux::is_optional<mpl::_1>
+ >::type optional_arity;
+
+ typedef typename mpl::front<Signature>::type result_type;
+ typedef typename mpl::shift_left<mpl::long_<1>, optional_arity>::type upper;
+
+ aux::def_combinations(
+ aux::def_function(name)
+ , (arg_specs*)0
+ , mpl::long_<0>()
+ , mpl::long_<upper::value>()
+ , (aux::make_invoker<M, result_type>*)0
+ );
+}
+
+template <class M, class Class, class Signature>
+void def(Class& cl, char const* name, Signature)
+{
+ typedef mpl::iterator_range<
+ typename mpl::next<
+ typename mpl::begin<Signature>::type
+ >::type
+ , typename mpl::end<Signature>::type
+ > arg_types;
+
+ typedef typename mpl::transform<
+ typename M::keywords
+ , arg_types
+ , aux::make_arg_spec<mpl::_1, mpl::_2>
+ , mpl::back_inserter<mpl::vector0<> >
+ >::type arg_specs;
+
+ typedef typename mpl::count_if<
+ arg_specs
+ , aux::is_optional<mpl::_1>
+ >::type optional_arity;
+
+ typedef typename mpl::front<Signature>::type result_type;
+ typedef typename mpl::shift_left<mpl::long_<1>, optional_arity>::type upper;
+
+ aux::def_combinations(
+ aux::def_class<Class>(cl, name)
+ , (arg_specs*)0
+ , mpl::long_<0>()
+ , mpl::long_<upper::value>()
+ , (aux::make_invoker<M, result_type>*)0
+ );
+}
+
+namespace aux
+{
+
+ template <class K>
+ struct keyword
+ {
+ typedef K type;
+ };
+
+ template <class K>
+ struct keyword<K*>
+ {
+ typedef K type;
+ };
+
+ template <class K>
+ struct keyword<K**>
+ {
+ typedef K type;
+ };
+
+ template <class K>
+ struct required
+ {
+ typedef mpl::true_ type;
+ };
+
+ template <class K>
+ struct required<K*>
+ {
+ typedef mpl::false_ type;
+ };
+
+ template <class K>
+ struct optimized
+ {
+ typedef mpl::true_ type;
+ };
+
+ template <class K>
+ struct optimized<K**>
+ {
+ typedef mpl::false_ type;
+ };
+
+ template <class T>
+ struct make_kw_spec;
+
+ template <class K, class T>
+ struct make_kw_spec<K(T)>
+ {
+ typedef arg_spec<
+ typename keyword<K>::type
+ , typename required<K>::type
+ , typename optimized<K>::type
+ , T
+ > type;
+ };
+
+} // namespace aux
+
+template <class ParameterSpecs, class CallPolicies = boost::python::default_call_policies>
+struct init
+ : boost::python::def_visitor<init<ParameterSpecs, CallPolicies> >
+{
+ init(CallPolicies call_policies = CallPolicies())
+ : call_policies(call_policies)
+ {}
+
+ template <class CallPolicies1>
+ init<ParameterSpecs, CallPolicies1>
+ operator[](CallPolicies1 const& call_policies) const
+ {
+ return init<ParameterSpecs, CallPolicies1>(call_policies);
+ }
+
+ template <class Class>
+ void visit_aux(Class& cl, mpl::true_) const
+ {
+ cl.def(boost::python::init<>()[call_policies]);
+ }
+
+ template <class Class>
+ void visit_aux(Class& cl, mpl::false_) const
+ {
+ typedef typename mpl::transform<
+ ParameterSpecs
+ , aux::make_kw_spec<mpl::_>
+ , mpl::back_inserter<mpl::vector0<> >
+ >::type arg_specs;
+
+ typedef typename mpl::count_if<
+ arg_specs
+ , aux::is_optional<mpl::_>
+ >::type optional_arity;
+
+ typedef typename mpl::shift_left<mpl::long_<1>, optional_arity>::type upper;
+
+ aux::def_combinations(
+ aux::def_init<Class, CallPolicies>(cl, call_policies)
+ , (arg_specs*)0
+ , mpl::long_<0>()
+ , mpl::long_<upper::value>()
+ , (aux::make_init_invoker<typename Class::wrapped_type>*)0
+ );
+ }
+
+ template <class Class>
+ void visit(Class& cl) const
+ {
+ visit_aux(cl, mpl::empty<ParameterSpecs>());
+ }
+
+ CallPolicies call_policies;
+};
+
+template <class ParameterSpecs, class CallPolicies = boost::python::default_call_policies>
+struct call
+ : boost::python::def_visitor<call<ParameterSpecs, CallPolicies> >
+{
+ call(CallPolicies const& call_policies = CallPolicies())
+ : call_policies(call_policies)
+ {}
+
+ template <class CallPolicies1>
+ call<ParameterSpecs, CallPolicies1>
+ operator[](CallPolicies1 const& call_policies) const
+ {
+ return call<ParameterSpecs, CallPolicies1>(call_policies);
+ }
+
+ template <class Class>
+ void visit(Class& cl) const
+ {
+ typedef mpl::iterator_range<
+ typename mpl::next<
+ typename mpl::begin<ParameterSpecs>::type
+ >::type
+ , typename mpl::end<ParameterSpecs>::type
+ > arg_types;
+
+ typedef typename mpl::front<ParameterSpecs>::type result_type;
+
+ typedef typename mpl::transform<
+ arg_types
+ , aux::make_kw_spec<mpl::_>
+ , mpl::back_inserter<mpl::vector0<> >
+ >::type arg_specs;
+
+ typedef typename mpl::count_if<
+ arg_specs
+ , aux::is_optional<mpl::_>
+ >::type optional_arity;
+
+ typedef typename mpl::shift_left<mpl::long_<1>, optional_arity>::type upper;
+
+ typedef aux::call_policies_as_options<CallPolicies> options;
+
+ aux::def_combinations(
+ aux::def_class<Class, options>(cl, "__call__", options(call_policies))
+ , (arg_specs*)0
+ , mpl::long_<0>()
+ , mpl::long_<upper::value>()
+ , (aux::make_call_invoker<typename Class::wrapped_type, result_type>*)0
+ );
+ }
+
+ CallPolicies call_policies;
+};
+
+template <class Fwd, class ParameterSpecs>
+struct function
+ : boost::python::def_visitor<function<Fwd, ParameterSpecs> >
+{
+ template <class Class, class Options>
+ void visit(Class& cl, char const* name, Options const& options) const
+ {
+ typedef mpl::iterator_range<
+ typename mpl::next<
+ typename mpl::begin<ParameterSpecs>::type
+ >::type
+ , typename mpl::end<ParameterSpecs>::type
+ > arg_types;
+
+ typedef typename mpl::front<ParameterSpecs>::type result_type;
+
+ typedef typename mpl::transform<
+ arg_types
+ , aux::make_kw_spec<mpl::_>
+ , mpl::back_inserter<mpl::vector0<> >
+ >::type arg_specs;
+
+ typedef typename mpl::count_if<
+ arg_specs
+ , aux::is_optional<mpl::_>
+ >::type optional_arity;
+
+ typedef typename mpl::shift_left<mpl::long_<1>, optional_arity>::type upper;
+
+ aux::def_combinations(
+ aux::def_class<Class, Options>(cl, name, options)
+ , (arg_specs*)0
+ , mpl::long_<0>()
+ , mpl::long_<upper::value>()
+ , (aux::make_member_invoker<
+ Fwd, result_type, typename Class::wrapped_type
+ >*)0
+ );
+ }
+};
+
+}}} // namespace boost::parameter::python
+
+#endif // BOOST_PARAMETER_PYTHON_060209_HPP
+
diff --git a/boost/boost/parameter/value_type.hpp b/boost/boost/parameter/value_type.hpp
new file mode 100644
index 00000000000..7415a5cd2a0
--- /dev/null
+++ b/boost/boost/parameter/value_type.hpp
@@ -0,0 +1,108 @@
+// Copyright Daniel Wallin 2006. Use, modification and distribution is
+// 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)
+
+#ifndef BOOST_PARAMETER_VALUE_TYPE_060921_HPP
+# define BOOST_PARAMETER_VALUE_TYPE_060921_HPP
+
+# include <boost/mpl/apply.hpp>
+# include <boost/mpl/assert.hpp>
+# include <boost/mpl/and.hpp>
+# include <boost/parameter/aux_/result_of0.hpp>
+# include <boost/parameter/aux_/void.hpp>
+# include <boost/type_traits/is_same.hpp>
+
+# if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+# include <boost/mpl/eval_if.hpp>
+# endif
+
+namespace boost { namespace parameter {
+
+// A metafunction that, given an argument pack, returns the type of
+// the parameter identified by the given keyword. If no such
+// parameter has been specified, returns Default
+
+# if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \
+ || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+template <class Parameters, class Keyword, class Default>
+struct value_type0
+{
+ typedef typename mpl::apply_wrap3<
+ typename Parameters::binding,Keyword,Default,mpl::false_
+ >::type type;
+
+ BOOST_MPL_ASSERT_NOT((
+ mpl::and_<
+ is_same<Default, void_>
+ , is_same<type, void_>
+ >
+ ));
+};
+# endif
+
+template <class Parameters, class Keyword, class Default = void_>
+# if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+struct value_type
+# else
+struct value_type_eti
+# endif
+{
+# if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \
+ || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+ typedef typename mpl::eval_if<
+ mpl::is_placeholder<Parameters>
+ , mpl::identity<int>
+ , value_type0<Parameters,Keyword,Default>
+ >::type type;
+# else
+ typedef typename mpl::apply_wrap3<
+ typename Parameters::binding,Keyword,Default,mpl::false_
+ >::type type;
+
+ BOOST_MPL_ASSERT_NOT((
+ mpl::and_<
+ is_same<Default, void_>
+ , is_same<type, void_>
+ >
+ ));
+# endif
+
+# if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(3,value_type,(Parameters,Keyword,Default))
+# endif
+};
+
+# if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+template <class Parameters, class Keyword, class Default = void_>
+struct value_type
+{
+ typedef typename mpl::eval_if<
+ is_same<Parameters, int>
+ , mpl::identity<int>
+ , value_type_eti<Parameters, Keyword, Default>
+ >::type type;
+
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(3,value_type,(Parameters,Keyword,Default))
+};
+# endif
+
+// A metafunction that, given an argument pack, returns the type of
+// the parameter identified by the given keyword. If no such
+// parameter has been specified, returns the type returned by invoking
+// DefaultFn
+template <class Parameters, class Keyword, class DefaultFn>
+struct lazy_value_type
+{
+ typedef typename mpl::apply_wrap3<
+ typename Parameters::binding
+ , Keyword
+ , typename aux::result_of0<DefaultFn>::type
+ , mpl::false_
+ >::type type;
+};
+
+
+}} // namespace boost::parameter
+
+#endif // BOOST_PARAMETER_VALUE_TYPE_060921_HPP
+
diff --git a/boost/boost/pending/bucket_sorter.hpp b/boost/boost/pending/bucket_sorter.hpp
new file mode 100644
index 00000000000..8b7926d2dfc
--- /dev/null
+++ b/boost/boost/pending/bucket_sorter.hpp
@@ -0,0 +1,134 @@
+//
+//=======================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// 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)
+//=======================================================================
+//
+//
+// Revision History:
+// 13 June 2001: Changed some names for clarity. (Jeremy Siek)
+// 01 April 2001: Modified to use new <boost/limits.hpp> header. (JMaddock)
+//
+#ifndef BOOST_GRAPH_DETAIL_BUCKET_SORTER_HPP
+#define BOOST_GRAPH_DETAIL_BUCKET_SORTER_HPP
+
+#include <vector>
+#include <cassert>
+#include <boost/limits.hpp>
+
+namespace boost {
+
+ template <class BucketType, class ValueType, class Bucket,
+ class ValueIndexMap>
+ class bucket_sorter {
+ public:
+ typedef BucketType bucket_type;
+ typedef ValueType value_type;
+ typedef typename std::vector<value_type>::size_type size_type;
+
+ bucket_sorter(size_type _length, bucket_type _max_bucket,
+ const Bucket& _bucket = Bucket(),
+ const ValueIndexMap& _id = ValueIndexMap())
+ : head(_max_bucket, invalid_value()),
+ next(_length, invalid_value()),
+ prev(_length, invalid_value()),
+ id_to_value(_length),
+ bucket(_bucket), id(_id) { }
+
+ void remove(const value_type& x) {
+ const size_type i = get(id, x);
+ const size_type& next_node = next[i];
+ const size_type& prev_node = prev[i];
+
+ //check if i is the end of the bucket list
+ if ( next_node != invalid_value() )
+ prev[next_node] = prev_node;
+ //check if i is the begin of the bucket list
+ if ( prev_node != invalid_value() )
+ next[prev_node] = next_node;
+ else //need update head of current bucket list
+ head[ bucket[x] ] = next_node;
+ }
+
+ void push(const value_type& x) {
+ id_to_value[get(id, x)] = x;
+ (*this)[bucket[x]].push(x);
+ }
+
+ void update(const value_type& x) {
+ remove(x);
+ (*this)[bucket[x]].push(x);
+ }
+ // private:
+ // with KCC, the nested stack class is having access problems
+ // despite the friend decl.
+ static size_type invalid_value() {
+ return (std::numeric_limits<size_type>::max)();
+ }
+
+ typedef typename std::vector<size_type>::iterator Iter;
+ typedef typename std::vector<value_type>::iterator IndexValueMap;
+
+ public:
+ friend class stack;
+
+ class stack {
+ public:
+ stack(bucket_type _bucket_id, Iter h, Iter n, Iter p, IndexValueMap v,
+ const ValueIndexMap& _id)
+ : bucket_id(_bucket_id), head(h), next(n), prev(p), value(v), id(_id) {}
+
+ // Avoid using default arg for ValueIndexMap so that the default
+ // constructor of the ValueIndexMap is not required if not used.
+ stack(bucket_type _bucket_id, Iter h, Iter n, Iter p, IndexValueMap v)
+ : bucket_id(_bucket_id), head(h), next(n), prev(p), value(v) {}
+
+ void push(const value_type& x) {
+ const size_type new_head = get(id, x);
+ const size_type current = head[bucket_id];
+ if ( current != invalid_value() )
+ prev[current] = new_head;
+ prev[new_head] = invalid_value();
+ next[new_head] = current;
+ head[bucket_id] = new_head;
+ }
+ void pop() {
+ size_type current = head[bucket_id];
+ size_type next_node = next[current];
+ head[bucket_id] = next_node;
+ if ( next_node != invalid_value() )
+ prev[next_node] = invalid_value();
+ }
+ value_type& top() { return value[ head[bucket_id] ]; }
+ const value_type& top() const { return value[ head[bucket_id] ]; }
+ bool empty() const { return head[bucket_id] == invalid_value(); }
+ private:
+ bucket_type bucket_id;
+ Iter head;
+ Iter next;
+ Iter prev;
+ IndexValueMap value;
+ ValueIndexMap id;
+ };
+
+ stack operator[](const bucket_type& i) {
+ assert(i < head.size());
+ return stack(i, head.begin(), next.begin(), prev.begin(),
+ id_to_value.begin(), id);
+ }
+ protected:
+ std::vector<size_type> head;
+ std::vector<size_type> next;
+ std::vector<size_type> prev;
+ std::vector<value_type> id_to_value;
+ Bucket bucket;
+ ValueIndexMap id;
+ };
+
+}
+
+#endif
diff --git a/boost/boost/pending/container_traits.hpp b/boost/boost/pending/container_traits.hpp
new file mode 100644
index 00000000000..6faa831fac7
--- /dev/null
+++ b/boost/boost/pending/container_traits.hpp
@@ -0,0 +1,413 @@
+// (C) Copyright Jeremy Siek 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)
+
+#ifndef BOOST_GRAPH_DETAIL_CONTAINER_TRAITS_H
+#define BOOST_GRAPH_DETAIL_CONTAINER_TRAITS_H
+
+// Sure would be nice to be able to forward declare these
+// instead of pulling in all the headers. Too bad that
+// is not legal. There ought to be a standard <stlfwd> header. -JGS
+
+#include <boost/next_prior.hpp>
+
+#include <algorithm> // for std::remove
+#include <vector>
+#include <list>
+#include <map>
+#include <set>
+
+#if !defined BOOST_NO_HASH
+# ifdef BOOST_HASH_SET_HEADER
+# include BOOST_HASH_SET_HEADER
+# else
+# include <hash_set>
+# endif
+# ifdef BOOST_HASH_MAP_HEADER
+# include BOOST_HASH_MAP_HEADER
+# else
+# include <hash_map>
+# endif
+#endif
+
+#if !defined BOOST_NO_SLIST
+# ifdef BOOST_SLIST_HEADER
+# include BOOST_SLIST_HEADER
+# else
+# include <slist>
+# endif
+#endif
+
+// The content of this file is in 'graph_detail' because otherwise
+// there will be name clashes with
+// sandbox/boost/sequence_algo/container_traits.hpp
+// The 'detail' subnamespace will still cause problems.
+namespace boost { namespace graph_detail {
+
+ //======================================================================
+ // Container Category Tags
+ //
+ // They use virtual inheritance because there are lots of
+ // inheritance diamonds.
+
+ struct container_tag { };
+ struct forward_container_tag : virtual public container_tag { };
+ struct reversible_container_tag : virtual public forward_container_tag { };
+ struct random_access_container_tag
+ : virtual public reversible_container_tag { };
+
+ struct sequence_tag : virtual public forward_container_tag { };
+
+ struct associative_container_tag : virtual public forward_container_tag { };
+
+ struct sorted_associative_container_tag
+ : virtual public associative_container_tag,
+ virtual public reversible_container_tag { };
+
+ struct front_insertion_sequence_tag : virtual public sequence_tag { };
+ struct back_insertion_sequence_tag : virtual public sequence_tag { };
+
+ struct unique_associative_container_tag
+ : virtual public associative_container_tag { };
+ struct multiple_associative_container_tag
+ : virtual public associative_container_tag { };
+ struct simple_associative_container_tag
+ : virtual public associative_container_tag { };
+ struct pair_associative_container_tag
+ : virtual public associative_container_tag { };
+
+
+ //======================================================================
+ // Iterator Stability Tags
+ //
+ // Do mutating operations such as insert/erase/resize invalidate all
+ // outstanding iterators?
+
+ struct stable_tag { };
+ struct unstable_tag { };
+
+ //======================================================================
+ // Container Traits Class and container_category() function
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ // don't use this unless there is partial specialization
+ template <class Container>
+ struct container_traits {
+ typedef typename Container::category category;
+ typedef typename Container::iterator_stability iterator_stability;
+ };
+#endif
+
+ // Use this as a compile-time assertion that X is stable
+ inline void require_stable(stable_tag) { }
+
+ // std::vector
+ struct vector_tag :
+ virtual public random_access_container_tag,
+ virtual public back_insertion_sequence_tag { };
+
+ template <class T, class Alloc>
+ vector_tag container_category(const std::vector<T,Alloc>&)
+ { return vector_tag(); }
+
+ template <class T, class Alloc>
+ unstable_tag iterator_stability(const std::vector<T,Alloc>&)
+ { return unstable_tag(); }
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ template <class T, class Alloc>
+ struct container_traits< std::vector<T,Alloc> > {
+ typedef vector_tag category;
+ typedef unstable_tag iterator_stability;
+ };
+#endif
+
+ // std::list
+ struct list_tag :
+ virtual public reversible_container_tag,
+ virtual public back_insertion_sequence_tag
+ // this causes problems for push_dispatch...
+ // virtual public front_insertion_sequence_tag
+ { };
+
+ template <class T, class Alloc>
+ list_tag container_category(const std::list<T,Alloc>&)
+ { return list_tag(); }
+
+ template <class T, class Alloc>
+ stable_tag iterator_stability(const std::list<T,Alloc>&)
+ { return stable_tag(); }
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ template <class T, class Alloc>
+ struct container_traits< std::list<T,Alloc> > {
+ typedef list_tag category;
+ typedef stable_tag iterator_stability;
+ };
+#endif
+
+
+ // std::slist
+#ifndef BOOST_NO_SLIST
+# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ template <class T, class Alloc>
+ struct container_traits<BOOST_STD_EXTENSION_NAMESPACE::slist<T,Alloc> > {
+ typedef front_insertion_sequence_tag category;
+ typedef stable_tag iterator_stability;
+ };
+#endif
+ template <class T, class Alloc>
+ front_insertion_sequence_tag container_category(
+ const BOOST_STD_EXTENSION_NAMESPACE::slist<T,Alloc>&
+ )
+ { return front_insertion_sequence_tag(); }
+
+ template <class T, class Alloc>
+ stable_tag iterator_stability(
+ const BOOST_STD_EXTENSION_NAMESPACE::slist<T,Alloc>&)
+ { return stable_tag(); }
+#endif
+
+
+ // std::set
+ struct set_tag :
+ virtual public sorted_associative_container_tag,
+ virtual public simple_associative_container_tag,
+ virtual public unique_associative_container_tag
+ { };
+
+ template <class Key, class Cmp, class Alloc>
+ set_tag container_category(const std::set<Key,Cmp,Alloc>&)
+ { return set_tag(); }
+
+ template <class Key, class Cmp, class Alloc>
+ stable_tag iterator_stability(const std::set<Key,Cmp,Alloc>&)
+ { return stable_tag(); }
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ template <class Key, class Cmp, class Alloc>
+ struct container_traits< std::set<Key,Cmp,Alloc> > {
+ typedef set_tag category;
+ typedef stable_tag iterator_stability;
+ };
+#endif
+
+ // std::multiset
+ struct multiset_tag :
+ virtual public sorted_associative_container_tag,
+ virtual public simple_associative_container_tag,
+ virtual public multiple_associative_container_tag
+ { };
+
+ template <class Key, class Cmp, class Alloc>
+ multiset_tag container_category(const std::multiset<Key,Cmp,Alloc>&)
+ { return multiset_tag(); }
+
+ template <class Key, class Cmp, class Alloc>
+ stable_tag iterator_stability(const std::multiset<Key,Cmp,Alloc>&)
+ { return stable_tag(); }
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ template <class Key, class Cmp, class Alloc>
+ struct container_traits< std::multiset<Key,Cmp,Alloc> > {
+ typedef multiset_tag category;
+ typedef stable_tag iterator_stability;
+ };
+#endif
+
+ // deque
+
+ // std::map
+ struct map_tag :
+ virtual public sorted_associative_container_tag,
+ virtual public pair_associative_container_tag,
+ virtual public unique_associative_container_tag
+ { };
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ template <class Key, class T, class Cmp, class Alloc>
+ struct container_traits< std::map<Key,T,Cmp,Alloc> > {
+ typedef map_tag category;
+ typedef stable_tag iterator_stability;
+ };
+#endif
+
+ template <class Key, class T, class Cmp, class Alloc>
+ map_tag container_category(const std::map<Key,T,Cmp,Alloc>&)
+ { return map_tag(); }
+
+ template <class Key, class T, class Cmp, class Alloc>
+ stable_tag iterator_stability(const std::map<Key,T,Cmp,Alloc>&)
+ { return stable_tag(); }
+
+ // std::multimap
+ struct multimap_tag :
+ virtual public sorted_associative_container_tag,
+ virtual public pair_associative_container_tag,
+ virtual public multiple_associative_container_tag
+ { };
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ template <class Key, class T, class Cmp, class Alloc>
+ struct container_traits< std::multimap<Key,T,Cmp,Alloc> > {
+ typedef multimap_tag category;
+ typedef stable_tag iterator_stability;
+ };
+#endif
+
+ template <class Key, class T, class Cmp, class Alloc>
+ multimap_tag container_category(const std::multimap<Key,T,Cmp,Alloc>&)
+ { return multimap_tag(); }
+
+ template <class Key, class T, class Cmp, class Alloc>
+ stable_tag iterator_stability(const std::multimap<Key,T,Cmp,Alloc>&)
+ { return stable_tag(); }
+
+
+ // hash_set, hash_map
+
+#ifndef BOOST_NO_HASH
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ template <class Key, class Eq, class Hash, class Alloc>
+ struct container_traits< BOOST_STD_EXTENSION_NAMESPACE::hash_set<Key,Eq,Hash,Alloc> > {
+ typedef set_tag category;
+ typedef stable_tag iterator_stability; // is this right?
+ };
+ template <class Key, class T, class Eq, class Hash, class Alloc>
+ struct container_traits< BOOST_STD_EXTENSION_NAMESPACE::hash_map<Key,T,Eq,Hash,Alloc> > {
+ typedef map_tag category;
+ typedef stable_tag iterator_stability; // is this right?
+ };
+#endif
+ template <class Key, class Eq, class Hash, class Alloc>
+ set_tag container_category(const BOOST_STD_EXTENSION_NAMESPACE::hash_set<Key,Eq,Hash,Alloc>&)
+ { return set_tag(); }
+
+ template <class Key, class T, class Eq, class Hash, class Alloc>
+ map_tag container_category(const BOOST_STD_EXTENSION_NAMESPACE::hash_map<Key,T,Eq,Hash,Alloc>&)
+ { return map_tag(); }
+
+ template <class Key, class Eq, class Hash, class Alloc>
+ stable_tag iterator_stability(const BOOST_STD_EXTENSION_NAMESPACE::hash_set<Key,Eq,Hash,Alloc>&)
+ { return stable_tag(); }
+
+ template <class Key, class T, class Eq, class Hash, class Alloc>
+ stable_tag iterator_stability(const BOOST_STD_EXTENSION_NAMESPACE::hash_map<Key,T,Eq,Hash,Alloc>&)
+ { return stable_tag(); }
+#endif
+
+
+
+ //===========================================================================
+ // Generalized Container Functions
+
+
+ // Erase
+ template <class Sequence, class T>
+ void erase_dispatch(Sequence& c, const T& x,
+ sequence_tag)
+ {
+ c.erase(std::remove(c.begin(), c.end(), x), c.end());
+ }
+
+ template <class AssociativeContainer, class T>
+ void erase_dispatch(AssociativeContainer& c, const T& x,
+ associative_container_tag)
+ {
+ c.erase(x);
+ }
+ template <class Container, class T>
+ void erase(Container& c, const T& x)
+ {
+ erase_dispatch(c, x, container_category(c));
+ }
+
+ // Erase If
+ template <class Sequence, class Predicate, class IteratorStability>
+ void erase_if_dispatch(Sequence& c, Predicate p,
+ sequence_tag, IteratorStability)
+ {
+#if 0
+ c.erase(std::remove_if(c.begin(), c.end(), p), c.end());
+#else
+ if (! c.empty())
+ c.erase(std::remove_if(c.begin(), c.end(), p), c.end());
+#endif
+ }
+ template <class AssociativeContainer, class Predicate>
+ void erase_if_dispatch(AssociativeContainer& c, Predicate p,
+ associative_container_tag, stable_tag)
+ {
+ typename AssociativeContainer::iterator i, next;
+ for (i = next = c.begin(); next != c.end(); i = next) {
+ ++next;
+ if (p(*i))
+ c.erase(i);
+ }
+ }
+ template <class AssociativeContainer, class Predicate>
+ void erase_if_dispatch(AssociativeContainer& c, Predicate p,
+ associative_container_tag, unstable_tag)
+ {
+ // This method is really slow, so hopefully we won't have any
+ // associative containers with unstable iterators!
+ // Is there a better way to do this?
+ typename AssociativeContainer::iterator i;
+ typename AssociativeContainer::size_type n = c.size();
+ while (n--)
+ for (i = c.begin(); i != c.end(); ++i)
+ if (p(*i)) {
+ c.erase(i);
+ break;
+ }
+ }
+ template <class Container, class Predicate>
+ void erase_if(Container& c, Predicate p)
+ {
+ erase_if_dispatch(c, p, container_category(c), iterator_stability(c));
+ }
+
+ // Push
+ template <class Container, class T>
+ std::pair<typename Container::iterator, bool>
+ push_dispatch(Container& c, const T& v, back_insertion_sequence_tag)
+ {
+ c.push_back(v);
+ return std::make_pair(boost::prior(c.end()), true);
+ }
+
+ template <class Container, class T>
+ std::pair<typename Container::iterator, bool>
+ push_dispatch(Container& c, const T& v, front_insertion_sequence_tag)
+ {
+ c.push_front(v);
+ return std::make_pair(c.begin(), true);
+ }
+
+ template <class AssociativeContainer, class T>
+ std::pair<typename AssociativeContainer::iterator, bool>
+ push_dispatch(AssociativeContainer& c, const T& v,
+ unique_associative_container_tag)
+ {
+ return c.insert(v);
+ }
+
+ template <class AssociativeContainer, class T>
+ std::pair<typename AssociativeContainer::iterator, bool>
+ push_dispatch(AssociativeContainer& c, const T& v,
+ multiple_associative_container_tag)
+ {
+ return std::make_pair(c.insert(v), true);
+ }
+
+ template <class Container, class T>
+ std::pair<typename Container::iterator,bool>
+ push(Container& c, const T& v)
+ {
+ return push_dispatch(c, v, container_category(c));
+ }
+
+}} // namespace boost::graph_detail
+
+#endif // BOOST_GRAPH_DETAIL_CONTAINER_TRAITS_H
diff --git a/boost/boost/pending/cstddef.hpp b/boost/boost/pending/cstddef.hpp
new file mode 100644
index 00000000000..440629e265a
--- /dev/null
+++ b/boost/boost/pending/cstddef.hpp
@@ -0,0 +1,16 @@
+// -*- C++ -*- forwarding header.
+// (C) Copyright Jeremy Siek 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)
+
+#ifndef BOOST_CSTDDEF_HPP
+#define BOOST_CSTDDEF_HPP
+
+#if defined(__sgi) && !defined(__GNUC__)
+# include <stddef.h>
+#else
+# include <cstddef>
+#endif
+
+#endif
diff --git a/boost/boost/pending/ct_if.hpp b/boost/boost/pending/ct_if.hpp
new file mode 100644
index 00000000000..2f8540d8933
--- /dev/null
+++ b/boost/boost/pending/ct_if.hpp
@@ -0,0 +1,111 @@
+// (C) Copyright Jeremy Siek 2000.
+// 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)
+
+// The ct_if implementation that avoids partial specialization is
+// based on the IF class by Ulrich W. Eisenecker and Krzysztof
+// Czarnecki.
+
+#ifndef BOOST_CT_IF_HPP
+#define BOOST_CT_IF_HPP
+
+#include <boost/config.hpp>
+
+/*
+ There is a bug in the Borland compiler with regards to using
+ integers to specialize templates. This made it hard to use ct_if in
+ the graph library. Changing from 'ct_if' to 'ct_if_t' fixed the
+ problem.
+*/
+
+#include <boost/type_traits/integral_constant.hpp> // true_type and false_type
+
+namespace boost {
+
+ struct ct_if_error { };
+
+ template <class A, class B>
+ struct ct_and { typedef false_type type; };
+ template <> struct ct_and<true_type,true_type> { typedef true_type type; };
+
+ template <class A> struct ct_not { typedef ct_if_error type; };
+ template <> struct ct_not<true_type> { typedef false_type type; };
+ template <> struct ct_not<false_type> { typedef true_type type; };
+
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+// agurt, 15/sep/02: in certain cases Borland has problems with
+// choosing the right 'ct_if' specialization even though 'cond'
+// _does_ equal '1'; the easiest way to fix it is to make first
+// 'ct_if' non-type template parameter boolean.
+#if !defined(__BORLANDC__)
+ template <bool cond, class A, class B>
+ struct ct_if { typedef ct_if_error type; };
+ template <class A, class B>
+ struct ct_if<true, A, B> { typedef A type; };
+ template <class A, class B>
+ struct ct_if<false, A, B> { typedef B type; };
+#else
+ template <bool cond, class A, class B>
+ struct ct_if { typedef A type; };
+ template <class A, class B>
+ struct ct_if<false, A, B> { typedef B type; };
+#endif
+
+ template <class cond, class A, class B>
+ struct ct_if_t { typedef ct_if_error type; };
+ template <class A, class B>
+ struct ct_if_t<true_type, A, B> { typedef A type; };
+ template <class A, class B>
+ struct ct_if_t<false_type, A, B> { typedef B type; };
+
+#else
+
+ namespace detail {
+
+ template <int condition, class A, class B> struct IF;
+ template <int condition> struct SlectSelector;
+ struct SelectFirstType;
+ struct SelectSecondType;
+
+ struct SelectFirstType {
+ template<class A, class B>
+ struct Template { typedef A type; };
+ };
+
+ struct SelectSecondType {
+ template<class A, class B>
+ struct Template { typedef B type; };
+ };
+
+ template<int condition>
+ struct SlectSelector {
+ typedef SelectFirstType type;
+ };
+
+ template <>
+ struct SlectSelector<0> {
+ typedef SelectSecondType type;
+ };
+
+ } // namespace detail
+
+ template<int condition, class A, class B>
+ struct ct_if
+ {
+ typedef typename detail::SlectSelector<condition>::type Selector;
+ typedef typename Selector::template Template<A, B>::type type;
+ };
+
+ template <class cond, class A, class B>
+ struct ct_if_t {
+ typedef typename ct_if<cond::value, A, B>::type type;
+ };
+
+#endif
+
+} // namespace boost
+
+#endif // BOOST_CT_IF_HPP
+
diff --git a/boost/boost/pending/detail/disjoint_sets.hpp b/boost/boost/pending/detail/disjoint_sets.hpp
new file mode 100644
index 00000000000..6d1ec3ac7ee
--- /dev/null
+++ b/boost/boost/pending/detail/disjoint_sets.hpp
@@ -0,0 +1,88 @@
+// (C) Copyright Jeremy Siek 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)
+
+#ifndef BOOST_DETAIL_DISJOINT_SETS_HPP
+#define BOOST_DETAIL_DISJOINT_SETS_HPP
+
+namespace boost {
+
+namespace detail {
+
+template <class ParentPA, class Vertex>
+Vertex
+find_representative_with_path_halving(ParentPA p, Vertex v)
+{
+ Vertex parent = get(p, v);
+ Vertex grandparent = get(p, parent);
+ while (parent != grandparent) {
+ put(p, v, grandparent);
+ v = grandparent;
+ parent = get(p, v);
+ grandparent = get(p, parent);
+ }
+ return parent;
+}
+
+template <class ParentPA, class Vertex>
+Vertex
+find_representative_with_full_compression(ParentPA parent, Vertex v)
+{
+ Vertex old = v;
+ Vertex ancestor = get(parent, v);
+ while (ancestor != v) {
+ v = ancestor;
+ ancestor = get(parent, v);
+ }
+ v = get(parent, old);
+ while (ancestor != v) {
+ put(parent, old, ancestor);
+ old = v;
+ v = get(parent, old);
+ }
+ return ancestor;
+}
+
+/* the postcondition of link sets is:
+ component_representative(i) == component_representative(j)
+ */
+template <class ParentPA, class RankPA, class Vertex,
+ class ComponentRepresentative>
+inline void
+link_sets(ParentPA p, RankPA rank, Vertex i, Vertex j,
+ ComponentRepresentative comp_rep)
+{
+ i = comp_rep(p, i);
+ j = comp_rep(p, j);
+ if (i == j) return;
+ if (get(rank, i) > get(rank, j))
+ put(p, j, i);
+ else {
+ put(p, i, j);
+ if (get(rank, i) == get(rank, j))
+ put(rank, j, get(rank, j) + 1);
+ }
+}
+
+// normalize components has the following postcondidition:
+// i >= p[i]
+// that is, the representative is the node with the smallest index in its class
+// as its precondition it it assumes that the node container is compressed
+
+template <class ParentPA, class Vertex>
+inline void
+normalize_node(ParentPA p, Vertex i)
+{
+ if (i > get(p,i) || get(p, get(p,i)) != get(p,i))
+ put(p,i, get(p, get(p,i)));
+ else {
+ put(p, get(p,i), i);
+ put(p, i, i);
+ }
+}
+
+ } // namespace detail
+} // namespace boost
+
+#endif // BOOST_DETAIL_DISJOINT_SETS_HPP
diff --git a/boost/boost/pending/detail/int_iterator.hpp b/boost/boost/pending/detail/int_iterator.hpp
new file mode 100644
index 00000000000..e3bae34ce78
--- /dev/null
+++ b/boost/boost/pending/detail/int_iterator.hpp
@@ -0,0 +1,74 @@
+// (C) Copyright Jeremy Siek 1999.
+// 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_INT_ITERATOR_H
+#define BOOST_INT_ITERATOR_H
+
+#include <boost/iterator.hpp>
+#if !defined BOOST_MSVC
+#include <boost/operators.hpp>
+#endif
+#include <iostream>
+//using namespace std;
+
+#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE
+namespace boost {
+#endif
+
+// this should use random_access_iterator_helper but I've had
+// VC++ portablility problems with that. -JGS
+template <class IntT>
+class int_iterator
+{
+ typedef int_iterator self;
+public:
+ typedef std::random_access_iterator_tag iterator_category;
+ typedef IntT value_type;
+ typedef IntT& reference;
+ typedef IntT* pointer;
+ typedef std::ptrdiff_t difference_type;
+
+ inline int_iterator() : _i(0) { }
+ inline int_iterator(IntT i) : _i(i) { }
+ inline int_iterator(const self& x) : _i(x._i) { }
+ inline self& operator=(const self& x) { _i = x._i; return *this; }
+ inline IntT operator*() { return _i; }
+ inline IntT operator[](IntT n) { return _i + n; }
+ inline self& operator++() { ++_i; return *this; }
+ inline self operator++(int) { self t = *this; ++_i; return t; }
+ inline self& operator+=(IntT n) { _i += n; return *this; }
+ inline self operator+(IntT n) { self t = *this; t += n; return t; }
+ inline self& operator--() { --_i; return *this; }
+ inline self operator--(int) { self t = *this; --_i; return t; }
+ inline self& operator-=(IntT n) { _i -= n; return *this; }
+ inline IntT operator-(const self& x) const { return _i - x._i; }
+ inline bool operator==(const self& x) const { return _i == x._i; }
+ // vc++ had a problem finding != in random_access_iterator_helper
+ // need to look into this... for now implementing everything here -JGS
+ inline bool operator!=(const self& x) const { return _i != x._i; }
+ inline bool operator<(const self& x) const { return _i < x._i; }
+ inline bool operator<=(const self& x) const { return _i <= x._i; }
+ inline bool operator>(const self& x) const { return _i > x._i; }
+ inline bool operator>=(const self& x) const { return _i >= x._i; }
+protected:
+ IntT _i;
+};
+
+template <class IntT>
+inline int_iterator<IntT>
+operator+(IntT n, int_iterator<IntT> t) { t += n; return t; }
+
+#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE
+} /* namespace boost */
+#endif
+
+#ifdef BOOST_NO_OPERATORS_IN_NAMESPACE
+namespace boost {
+ using ::int_iterator;
+}
+#endif
+
+
+#endif /* BOOST_INT_ITERATOR_H */
diff --git a/boost/boost/pending/detail/property.hpp b/boost/boost/pending/detail/property.hpp
new file mode 100644
index 00000000000..09e8866cf6b
--- /dev/null
+++ b/boost/boost/pending/detail/property.hpp
@@ -0,0 +1,160 @@
+// (C) Copyright Jeremy Siek 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)
+
+#ifndef BOOST_DETAIL_PROPERTY_HPP
+#define BOOST_DETAIL_PROPERTY_HPP
+
+#include <utility> // for std::pair
+#include <boost/type_traits/same_traits.hpp> // for is_same
+
+namespace boost {
+
+ namespace detail {
+
+ template <class PropertyTag1, class PropertyTag2>
+ struct same_property {
+ enum { value = is_same<PropertyTag1,PropertyTag2>::value };
+ };
+
+ struct error_property_not_found { };
+
+ template <int TagMatched>
+ struct property_value_dispatch {
+ template <class PropertyTag, class T, class Tag>
+ inline static T& get_value(PropertyTag& p, T*, Tag) {
+ return p.m_value;
+ }
+ template <class PropertyTag, class T, class Tag>
+ inline static const T& const_get_value(const PropertyTag& p, T*, Tag) {
+ return p.m_value;
+ }
+ };
+
+ template <class PropertyList>
+ struct property_value_end {
+ template <class T> struct result { typedef T type; };
+
+ template <class T, class Tag>
+ inline static T& get_value(PropertyList& p, T* t, Tag tag) {
+ typedef typename PropertyList::next_type Next;
+ typedef typename Next::tag_type Next_tag;
+ enum { match = same_property<Next_tag,Tag>::value };
+ return property_value_dispatch<match>
+ ::get_value(static_cast<Next&>(p), t, tag);
+ }
+ template <class T, class Tag>
+ inline static const T& const_get_value(const PropertyList& p, T* t, Tag tag) {
+ typedef typename PropertyList::next_type Next;
+ typedef typename Next::tag_type Next_tag;
+ enum { match = same_property<Next_tag,Tag>::value };
+ return property_value_dispatch<match>
+ ::const_get_value(static_cast<const Next&>(p), t, tag);
+ }
+ };
+ template <>
+ struct property_value_end<no_property> {
+ template <class T> struct result {
+ typedef detail::error_property_not_found type;
+ };
+
+ // Stop the recursion and return error
+ template <class T, class Tag>
+ inline static detail::error_property_not_found&
+ get_value(no_property&, T*, Tag) {
+ static error_property_not_found s_prop_not_found;
+ return s_prop_not_found;
+ }
+ template <class T, class Tag>
+ inline static const detail::error_property_not_found&
+ const_get_value(const no_property&, T*, Tag) {
+ static error_property_not_found s_prop_not_found;
+ return s_prop_not_found;
+ }
+ };
+
+ template <>
+ struct property_value_dispatch<0> {
+ template <class PropertyList, class T, class Tag>
+ inline static typename property_value_end<PropertyList>::template result<T>::type&
+ get_value(PropertyList& p, T* t, Tag tag) {
+ return property_value_end<PropertyList>::get_value(p, t, tag);
+ }
+ template <class PropertyList, class T, class Tag>
+ inline static const typename property_value_end<PropertyList>::template result<T>::type&
+ const_get_value(const PropertyList& p, T* t, Tag tag) {
+ return property_value_end<PropertyList>::const_get_value(p, t, tag);
+ }
+ };
+
+ template <class PropertyList>
+ struct build_property_tag_value_alist
+ {
+ typedef typename PropertyList::next_type NextProperty;
+ typedef typename PropertyList::value_type Value;
+ typedef typename PropertyList::tag_type Tag;
+ typedef typename build_property_tag_value_alist<NextProperty>::type Next;
+ typedef std::pair< std::pair<Tag,Value>, Next> type;
+ };
+ template <>
+ struct build_property_tag_value_alist<no_property>
+ {
+ typedef no_property type;
+ };
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ template <class TagValueAList, class Tag>
+ struct extract_value {
+ typedef error_property_not_found type;
+ };
+ template <class Value, class Tag1, class Tag2, class Rest>
+ struct extract_value< std::pair<std::pair<Tag1,Value>,Rest>, Tag2> {
+ typedef typename extract_value<Rest,Tag2>::type type;
+ };
+ template <class Value, class Tag, class Rest>
+ struct extract_value< std::pair<std::pair<Tag,Value>,Rest>, Tag> {
+ typedef Value type;
+ };
+#else
+ // VC++ workaround:
+ // The main idea here is to replace partial specialization with
+ // nested template member classes. Of course there is the
+ // further complication that the outer class of the nested
+ // template class cannot itself be a template class.
+ // Hence the need for the ev_selector. -JGS
+
+ struct recursive_extract;
+ struct end_extract;
+
+ template <class TagValueAList>
+ struct ev_selector { typedef recursive_extract type; };
+ template <>
+ struct ev_selector<no_property> { typedef end_extract type; };
+
+ struct recursive_extract {
+ template <class TagValueAList, class Tag1>
+ struct bind_ {
+ typedef typename TagValueAList::first_type AListFirst;
+ typedef typename AListFirst::first_type Tag2;
+ typedef typename AListFirst::second_type Value;
+ enum { match = same_property<Tag1,Tag2>::value };
+ typedef typename TagValueAList::second_type Next;
+ typedef typename ev_selector<Next>::type Extractor;
+ typedef typename boost::ct_if< match, Value,
+ typename Extractor::template bind_<Next,Tag1>::type
+ >::type type;
+ };
+ };
+ struct end_extract {
+ template <class AList, class Tag1>
+ struct bind_ {
+ typedef error_property_not_found type;
+ };
+ };
+#endif //!defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+ } // namespace detail
+} // namespace boost
+
+#endif // BOOST_DETAIL_PROPERTY_HPP
diff --git a/boost/boost/pending/disjoint_sets.hpp b/boost/boost/pending/disjoint_sets.hpp
new file mode 100644
index 00000000000..e64bc2b713a
--- /dev/null
+++ b/boost/boost/pending/disjoint_sets.hpp
@@ -0,0 +1,220 @@
+//
+//=======================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// 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_DISJOINT_SETS_HPP
+#define BOOST_DISJOINT_SETS_HPP
+
+#include <vector>
+#include <boost/graph/properties.hpp>
+#include <boost/pending/detail/disjoint_sets.hpp>
+
+namespace boost {
+
+ struct find_with_path_halving {
+ template <class ParentPA, class Vertex>
+ Vertex operator()(ParentPA p, Vertex v) {
+ return detail::find_representative_with_path_halving(p, v);
+ }
+ };
+
+ struct find_with_full_path_compression {
+ template <class ParentPA, class Vertex>
+ Vertex operator()(ParentPA p, Vertex v){
+ return detail::find_representative_with_full_compression(p, v);
+ }
+ };
+
+ // This is a generalized functor to provide disjoint sets operations
+ // with "union by rank" and "path compression". A disjoint-set data
+ // structure maintains a collection S={S1, S2, ..., Sk} of disjoint
+ // sets. Each set is identified by a representative, which is some
+ // member of of the set. Sets are represented by rooted trees. Two
+ // heuristics: "union by rank" and "path compression" are used to
+ // speed up the operations.
+
+ // Disjoint Set requires two vertex properties for internal use. A
+ // RankPA and a ParentPA. The RankPA must map Vertex to some Integral type
+ // (preferably the size_type associated with Vertex). The ParentPA
+ // must map Vertex to Vertex.
+ template <class RankPA, class ParentPA,
+ class FindCompress = find_with_full_path_compression
+ >
+ class disjoint_sets {
+ typedef disjoint_sets self;
+
+ inline disjoint_sets() {}
+ public:
+ inline disjoint_sets(RankPA r, ParentPA p)
+ : rank(r), parent(p) {}
+
+ inline disjoint_sets(const self& c)
+ : rank(c.rank), parent(c.parent) {}
+
+ // Make Set -- Create a singleton set containing vertex x
+ template <class Element>
+ inline void make_set(Element x)
+ {
+ put(parent, x, x);
+ typedef typename property_traits<RankPA>::value_type R;
+ put(rank, x, R());
+ }
+
+ // Link - union the two sets represented by vertex x and y
+ template <class Element>
+ inline void link(Element x, Element y)
+ {
+ detail::link_sets(parent, rank, x, y, rep);
+ }
+
+ // Union-Set - union the two sets containing vertex x and y
+ template <class Element>
+ inline void union_set(Element x, Element y)
+ {
+ link(find_set(x), find_set(y));
+ }
+
+ // Find-Set - returns the Element representative of the set
+ // containing Element x and applies path compression.
+ template <class Element>
+ inline Element find_set(Element x)
+ {
+ return rep(parent, x);
+ }
+
+ template <class ElementIterator>
+ inline std::size_t count_sets(ElementIterator first, ElementIterator last)
+ {
+ std::size_t count = 0;
+ for ( ; first != last; ++first)
+ if (get(parent, *first) == *first)
+ ++count;
+ return count;
+ }
+
+ template <class ElementIterator>
+ inline void normalize_sets(ElementIterator first, ElementIterator last)
+ {
+ for (; first != last; ++first)
+ detail::normalize_node(parent, *first);
+ }
+
+ template <class ElementIterator>
+ inline void compress_sets(ElementIterator first, ElementIterator last)
+ {
+ for (; first != last; ++first)
+ detail::find_representative_with_full_compression(parent, *first);
+ }
+ protected:
+ RankPA rank;
+ ParentPA parent;
+ FindCompress rep;
+ };
+
+
+
+
+ template <class ID = identity_property_map,
+ class InverseID = identity_property_map,
+ class FindCompress = find_with_full_path_compression
+ >
+ class disjoint_sets_with_storage
+ {
+ typedef typename property_traits<ID>::value_type Index;
+ typedef std::vector<Index> ParentContainer;
+ typedef std::vector<unsigned char> RankContainer;
+ public:
+ typedef typename ParentContainer::size_type size_type;
+
+ disjoint_sets_with_storage(size_type n = 0,
+ ID id_ = ID(),
+ InverseID inv = InverseID())
+ : id(id_), id_to_vertex(inv), rank(n, 0), parent(n)
+ {
+ for (Index i = 0; i < n; ++i)
+ parent[i] = i;
+ }
+ // note this is not normally needed
+ template <class Element>
+ inline void
+ make_set(Element x) {
+ parent[x] = x;
+ rank[x] = 0;
+ }
+ template <class Element>
+ inline void
+ link(Element x, Element y)
+ {
+ extend_sets(x,y);
+ detail::link_sets(&parent[0], &rank[0],
+ get(id,x), get(id,y), rep);
+ }
+ template <class Element>
+ inline void
+ union_set(Element x, Element y) {
+ Element rx = find_set(x);
+ Element ry = find_set(y);
+ link(rx, ry);
+ }
+ template <class Element>
+ inline Element find_set(Element x) {
+ return id_to_vertex[rep(&parent[0], get(id,x))];
+ }
+
+ template <class ElementIterator>
+ inline std::size_t count_sets(ElementIterator first, ElementIterator last)
+ {
+ std::size_t count = 0;
+ for ( ; first != last; ++first)
+ if (parent[*first] == *first)
+ ++count;
+ return count;
+ }
+
+ template <class ElementIterator>
+ inline void normalize_sets(ElementIterator first, ElementIterator last)
+ {
+ for (; first != last; ++first)
+ detail::normalize_node(&parent[0], *first);
+ }
+
+ template <class ElementIterator>
+ inline void compress_sets(ElementIterator first, ElementIterator last)
+ {
+ for (; first != last; ++first)
+ detail::find_representative_with_full_compression(&parent[0],
+ *first);
+ }
+
+ const ParentContainer& parents() { return parent; }
+
+ protected:
+
+ template <class Element>
+ inline void
+ extend_sets(Element x, Element y)
+ {
+ Index needed = get(id,x) > get(id,y) ? get(id,x) + 1 : get(id,y) + 1;
+ if (needed > parent.size()) {
+ rank.insert(rank.end(), needed - rank.size(), 0);
+ for (Index k = parent.size(); k < needed; ++k)
+ parent.push_back(k);
+ }
+ }
+
+ ID id;
+ InverseID id_to_vertex;
+ RankContainer rank;
+ ParentContainer parent;
+ FindCompress rep;
+ };
+
+} // namespace boost
+
+#endif // BOOST_DISJOINT_SETS_HPP
diff --git a/boost/boost/pending/fenced_priority_queue.hpp b/boost/boost/pending/fenced_priority_queue.hpp
new file mode 100644
index 00000000000..4d4e3aff942
--- /dev/null
+++ b/boost/boost/pending/fenced_priority_queue.hpp
@@ -0,0 +1,152 @@
+// (C) Copyright Jeremiah Willcock 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)
+
+#ifndef BOOST_FENCED_PRIORITY_QUEUE_HPP
+#define BOOST_FENCED_PRIORITY_QUEUE_HPP
+
+#include <vector>
+#include <queue>
+#include <functional>
+#include <boost/pending/queue.hpp>
+
+// Fenced priority queue
+// Jeremiah Willcock
+
+// This class implements a fenced priority queue. This is similar to
+// a normal priority queue (sorts its members, and only returns the
+// first), except that members cannot be sorted around a "fence" that
+// can be placed into the buffer. This fence is inserted using the
+// fence() member function or (possibly) implicitly by the top() and
+// pop() methods, and is removed automatically when the elements
+// around it are popped.
+
+// The implementation is as follows: Q is an unsorted queue that
+// contains the already-sorted list data, and PQ is a priority queue
+// that contains new elements (since the last fence) that have yet to
+// be sorted. New elements are inserted into PQ, and a fence moves
+// all elements in PQ into the back of Q in sorted order. Elements
+// are then popped from the front of Q, and if that is empty the front
+// of PQ.
+
+namespace boost {
+
+ template<class T, class Compare = std::less<T>, bool implicit_fence = true,
+ class Buffer = boost::queue<T> >
+ class fenced_priority_queue {
+ public:
+ typedef T value_type;
+ typedef typename Buffer::size_type size_type;
+
+ fenced_priority_queue(const Compare _comp = Compare() )
+ : PQ(_comp) {}
+
+ void push(const T& data);
+ void pop(void);
+ T& top(void);
+ const T& top(void) const;
+ size_type size(void) const;
+ bool empty(void) const;
+ void fence(void);
+
+ private:
+ void fence(void) const;
+
+ //let them mutable to allow const version of top and the same
+ //semantics with non-constant version. Rich Lee
+ mutable std::priority_queue<T, std::vector<T>, Compare> PQ;
+ mutable Buffer Q;
+ };
+
+ template<class T, class Compare, bool implicit_fence, class Buffer>
+ inline void
+ fenced_priority_queue<T, Compare, implicit_fence, Buffer>::
+ push(const T &t) {
+ // Push a new element after the last fence. This puts it into the
+ // priority queue to be sorted with all other elements in its
+ // partition.
+ PQ.push(t);
+ }
+
+ template<class T, class Compare, bool implicit_fence, class Buffer>
+ inline void fenced_priority_queue<T, Compare, implicit_fence, Buffer>::
+ pop(void) {
+ // Pop one element from the front of the queue. Removes from the
+ // already-sorted part of the queue if it is non-empty, otherwise
+ // removes from the new-element priority queue. Runs an implicit
+ // "fence" operation if the implicit_fence template argument is
+ // true.
+ if (implicit_fence) fence();
+ if ( !Q.empty() )
+ Q.pop();
+ else
+ PQ.pop();
+ }
+
+ template<class T, class Compare, bool implicit_fence, class Buffer>
+ inline T& fenced_priority_queue<T, Compare, implicit_fence, Buffer>::
+ top(void) {
+ // Get the top element from the queue. This element comes from Q if
+ // possible, otherwise from PQ. Causes an implicit "fence"
+ // operation if the implicit_fence template argument is true.
+ if (implicit_fence) fence();
+ if ( !Q.empty() )
+ return Q.top();
+ else
+ //std::priority_queue only have const version of top. Rich Lee
+ return const_cast<T&>(PQ.top());
+ }
+
+ template<class T, class Compare, bool implicit_fence, class Buffer>
+ inline const T&
+ fenced_priority_queue<T, Compare, implicit_fence, Buffer>::
+ top(void) const {
+ if (implicit_fence) fence();
+ if ( !Q.empty() )
+ return Q.top();
+ else
+ return PQ.top();
+ }
+
+ template<class T, class Compare, bool implicit_fence, class Buffer>
+ inline typename fenced_priority_queue<T, Compare, implicit_fence, Buffer>::size_type
+ fenced_priority_queue<T, Compare, implicit_fence, Buffer>::
+ size(void) const {
+ // Returns the size of the queue (both parts together).
+ return Q.size() + PQ.size();
+ }
+
+ template<class T, class Compare, bool implicit_fence, class Buffer>
+ inline bool
+ fenced_priority_queue<T, Compare, implicit_fence, Buffer>::
+ empty(void) const {
+ // Returns if the queue is empty, i.e. both parts are empty.
+ return Q.empty() && PQ.empty();
+ }
+
+ template<class T, class Compare, bool implicit_fence, class Buffer>
+ inline void
+ fenced_priority_queue<T, Compare, implicit_fence, Buffer>::
+ fence(void) {
+ // Perform a fence operation. Remove elements from PQ in sorted
+ // order and insert them in the back of Q.
+ while ( !PQ.empty() ) {
+ Q.push(PQ.top());
+ PQ.pop();
+ }
+ }
+ template<class T, class Compare, bool implicit_fence, class Buffer>
+ inline void
+ fenced_priority_queue<T, Compare, implicit_fence, Buffer>::
+ fence(void) const {
+ // Perform a fence operation. Remove elements from PQ in sorted
+ // order and insert them in the back of Q.
+ while ( !PQ.empty() ) {
+ Q.push(PQ.top());
+ PQ.pop();
+ }
+ }
+
+}
+#endif /* BOOST_FENCED_PRIORITY_QUEUE_HPP */
diff --git a/boost/boost/pending/fibonacci_heap.hpp b/boost/boost/pending/fibonacci_heap.hpp
new file mode 100644
index 00000000000..a8ea2efe695
--- /dev/null
+++ b/boost/boost/pending/fibonacci_heap.hpp
@@ -0,0 +1,268 @@
+// (C) Copyright Jeremy Siek 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)
+#ifndef BOOST_FIBONACCI_HEAP_HPP
+#define BOOST_FIBONACCI_HEAP_HPP
+
+#if defined(__sgi) && !defined(__GNUC__)
+# include <math.h>
+#else
+# include <cmath>
+#endif
+#include <iosfwd>
+#include <vector>
+#include <functional>
+#include <boost/config.hpp>
+#include <boost/property_map.hpp>
+
+//
+// An adaptation of Knuth's Fibonacci heap implementation
+// in "The Stanford Graph Base", pages 475-482.
+//
+
+namespace boost {
+
+
+template <class T,
+ class Compare = std::less<T>,
+ class ID = identity_property_map>
+class fibonacci_heap
+{
+ typedef typename boost::property_traits<ID>::value_type size_type;
+ typedef T value_type;
+protected:
+ typedef fibonacci_heap self;
+ typedef std::vector<size_type> LinkVec;
+ typedef typename LinkVec::iterator LinkIter;
+public:
+
+ fibonacci_heap(size_type n,
+ const Compare& cmp,
+ const ID& id = identity_property_map())
+ : _key(n), _left(n), _right(n), _p(n), _mark(n), _degree(n),
+ _n(0), _root(n), _id(id), _compare(cmp), _child(n),
+#if defined(BOOST_MSVC) || defined(__ICL) // need a new macro?
+ new_roots(size_type(log(float(n))) + 5) { }
+#else
+ new_roots(size_type(std::log(float(n))) + 5) { }
+#endif
+
+ // 33
+ void push(const T& d) {
+ ++_n;
+ size_type v = get(_id, d);
+ _key[v] = d;
+ _p[v] = nil();
+ _degree[v] = 0;
+ _mark[v] = false;
+ _child[v] = nil();
+ if (_root == nil()) {
+ _root = _left[v] = _right[v] = v;
+ //std::cout << "root added" << std::endl;
+ } else {
+ size_type u = _left[_root];
+ _left[v] = u;
+ _right[v] = _root;
+ _left[_root] = _right[u] = v;
+ if (_compare(d, _key[_root]))
+ _root = v;
+ //std::cout << "non-root node added" << std::endl;
+ }
+ }
+ T& top() { return _key[_root]; }
+ const T& top() const { return _key[_root]; }
+
+ // 38
+ void pop() {
+ --_n;
+ int h = -1;
+ size_type v, w;
+ if (_root != nil()) {
+ if (_degree[_root] == 0) {
+ v = _right[_root];
+ } else {
+ w = _child[_root];
+ v = _right[w];
+ _right[w] = _right[_root];
+ for (w = v; w != _right[_root]; w = _right[w])
+ _p[w] = nil();
+ }
+ while (v != _root) {
+ w = _right[v];
+ add_tree_to_new_roots(v, new_roots.begin(), h);
+ v = w;
+ }
+ rebuild_root_list(new_roots.begin(), h);
+ }
+ }
+ // 39
+ inline void add_tree_to_new_roots(size_type v,
+ LinkIter new_roots,
+ int& h)
+ {
+ int r;
+ size_type u;
+ r = _degree[v];
+ while (1) {
+ if (h < r) {
+ do {
+ ++h;
+ new_roots[h] = (h == r ? v : nil());
+ } while (h < r);
+ break;
+ }
+ if (new_roots[r] == nil()) {
+ new_roots[r] = v;
+ break;
+ }
+ u = new_roots[r];
+ new_roots[r] = nil();
+ if (_compare(_key[u], _key[v])) {
+ _degree[v] = r;
+ std::swap(u, v);
+ }
+ make_child(u, v, r);
+ ++r;
+ }
+ _degree[v] = r;
+ }
+ // 40
+ void make_child(size_type u, size_type v, size_type r) {
+ if (r == 0) {
+ _child[v] = u;
+ _left[u] = u;
+ _right[u] = u;
+ } else {
+ size_type t = _child[v];
+ _right[u] = _right[t];
+ _left[u] = t;
+ _right[t] = u;
+ _left[_right[u]] = u;
+ }
+ _p[u] = v;
+ }
+ // 41
+ inline void rebuild_root_list(LinkIter new_roots, int& h)
+ {
+ size_type u, v, w;
+ if (h < 0)
+ _root = nil();
+ else {
+ T d;
+ u = v = new_roots[h];
+ d = _key[u];
+ _root = u;
+ for (h--; h >= 0; --h)
+ if (new_roots[h] != nil()) {
+ w = new_roots[h];
+ _left[w] = v;
+ _right[v] = w;
+ if (_compare(_key[w], d)) {
+ _root = w;
+ d = _key[w];
+ }
+ v = w;
+ }
+ _right[v] = u;
+ _left[u] = v;
+ }
+ }
+
+ // 34
+ void update(const T& d) {
+ size_type v = get(_id, d);
+ assert(!_compare(_key[v], d));
+ _key[v] = d;
+ size_type p = _p[v];
+ if (p == nil()) {
+ if (_compare(d, _key[_root]))
+ _root = v;
+ } else if (_compare(d, _key[_root]))
+ while (1) {
+ size_type r = _degree[p];
+ if (r >= 2)
+ remove_from_family(v, p);
+ insert_into_forest(v, d);
+ size_type pp = _p[p];
+ if (pp == nil()) {
+ --_degree[p];
+ break;
+ }
+ if (_mark[p] == false) {
+ _mark[p] = true;
+ break;
+ } else
+ --_degree[p];
+ v = p;
+ p = pp;
+ }
+ }
+
+ inline size_type size() const { return _n; }
+ inline bool empty() const { return _n == 0; }
+
+ void print(std::ostream& os) {
+ if (_root != nil()) {
+ size_type i = _root;
+ do {
+ print_recur(i, os);
+ os << std::endl;
+ i = _right[i];
+ } while (i != _root);
+ }
+ }
+
+protected:
+ // 35
+ inline void remove_from_family(size_type v, size_type p) {
+ size_type u = _left[v];
+ size_type w = _right[v];
+ _right[u] = w;
+ _left[w] = u;
+ if (_child[p] == v)
+ _child[p] = w;
+ }
+ // 36
+ inline void insert_into_forest(size_type v, const T& d) {
+ _p[v] = nil();
+ size_type u = _left[_root];
+ _left[v] = u;
+ _right[v] = _root;
+ _left[_root] = _right[u] = v;
+ if (_compare(d, _key[_root]))
+ _root = v;
+ }
+
+ void print_recur(size_type x, std::ostream& os) {
+ if (x != nil()) {
+ os << x;
+ if (_child[x] != nil()) {
+ os << "(";
+ size_type i = _child[x];
+ do {
+ print_recur(i, os); os << " ";
+ i = _right[i];
+ } while (i != _child[x]);
+ os << ")";
+ }
+ }
+ }
+
+ size_type nil() const { return _left.size(); }
+
+ std::vector<T> _key;
+ LinkVec _left, _right, _p;
+ std::vector<bool> _mark;
+ LinkVec _degree;
+ size_type _n, _root;
+ ID _id;
+ Compare _compare;
+ LinkVec _child;
+ LinkVec new_roots;
+};
+
+} // namespace boost
+
+
+#endif // BOOST_FIBONACCI_HEAP_HPP
diff --git a/boost/boost/pending/indirect_cmp.hpp b/boost/boost/pending/indirect_cmp.hpp
new file mode 100644
index 00000000000..c97594933f9
--- /dev/null
+++ b/boost/boost/pending/indirect_cmp.hpp
@@ -0,0 +1,86 @@
+//
+//=======================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// 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_INDIRECT_CMP_HPP
+#define BOOST_INDIRECT_CMP_HPP
+
+#include <functional>
+#include <boost/config.hpp>
+#include <boost/property_map.hpp>
+
+namespace boost {
+
+ //: indirect_cmp
+ //
+ // could also do this with compose_f_gx_hx, and the member binder...
+ //
+ //!category: functors
+ //!component: type
+ //!tparam: ReadablePropertyMap - a model of ReadablePropertyMap
+ //!definition: functor.h
+ template <class ReadablePropertyMap, class Compare>
+ class indirect_cmp {
+ public:
+ typedef typename boost::property_traits<ReadablePropertyMap>::value_type T;
+ typedef typename boost::property_traits<ReadablePropertyMap>::key_type K;
+ typedef K first_argument_type;
+ typedef K second_argument_type;
+ typedef T result_type;
+ inline indirect_cmp(const ReadablePropertyMap& df, const Compare& c = Compare())
+ : d(df), cmp(c) { }
+
+ template <class A, class B>
+ inline bool
+ operator()(const A& u, const B& v) const {
+ T du = get(d, u), dv = get(d, v);
+ return cmp(du, dv);
+ }
+ protected:
+ ReadablePropertyMap d;
+ Compare cmp;
+ };
+
+ template <typename Compare, typename ReadablePropertyMap>
+ indirect_cmp<ReadablePropertyMap, Compare>
+ make_indirect_cmp(const Compare& cmp, ReadablePropertyMap pmap) {
+ indirect_cmp<ReadablePropertyMap, Compare> p(pmap, cmp);
+ return p;
+ }
+
+ template <class ReadablePropertyMap>
+ class indirect_pmap {
+ public:
+ typedef typename boost::property_traits<ReadablePropertyMap>::value_type T;
+ typedef typename boost::property_traits<ReadablePropertyMap>::key_type K;
+ typedef K argument_type;
+ typedef T result_type;
+ inline indirect_pmap(const ReadablePropertyMap& df)
+ : d(df) { }
+
+ inline bool operator()(const K& u) const {
+ return get(d, u);
+ }
+ protected:
+ ReadablePropertyMap d;
+ };
+
+ template <typename ReadablePropertyMap>
+ indirect_pmap<ReadablePropertyMap>
+ make_indirect_pmap(ReadablePropertyMap pmap) {
+ indirect_pmap<ReadablePropertyMap> f(pmap);
+ return f;
+ }
+
+
+} // namespace boost
+
+
+#endif // GGCL_INDIRECT_CMP_HPP
diff --git a/boost/boost/pending/integer_log2.hpp b/boost/boost/pending/integer_log2.hpp
new file mode 100644
index 00000000000..fd8e4465d15
--- /dev/null
+++ b/boost/boost/pending/integer_log2.hpp
@@ -0,0 +1,113 @@
+// -------------------------------------
+// integer_log2.hpp
+//
+// Gives the integer part of the logarithm, in base 2, of a
+// given number. Behavior is undefined if the argument is <= 0.
+//
+//
+// (C) Copyright Gennaro Prota 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)
+//
+// ------------------------------------------------------
+
+
+
+#ifndef BOOST_INTEGER_LOG2_HPP_GP_20030301
+#define BOOST_INTEGER_LOG2_HPP_GP_20030301
+
+#include <cassert>
+#include <climits> // actually used for Borland only
+#include "boost/limits.hpp"
+#include "boost/config.hpp"
+
+
+namespace boost {
+ namespace detail {
+
+ template <typename T>
+ int integer_log2_impl(T x, int n) {
+
+ int result = 0;
+
+ while (x != 1) {
+
+ const T t = x >> n;
+ if (t) {
+ result += n;
+ x = t;
+ }
+ n /= 2;
+
+ }
+
+ return result;
+ }
+
+
+
+ // helper to find the maximum power of two
+ // less than p (more involved than necessary,
+ // to avoid PTS)
+ //
+ template <int p, int n>
+ struct max_pow2_less {
+
+ enum { c = 2*n < p };
+
+ BOOST_STATIC_CONSTANT(int, value =
+ c ? (max_pow2_less< c*p, 2*c*n>::value) : n);
+
+ };
+
+ template <>
+ struct max_pow2_less<0, 0> {
+
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+
+ // this template is here just for Borland :(
+ // we could simply rely on numeric_limits but sometimes
+ // Borland tries to use numeric_limits<const T>, because
+ // of its usual const-related problems in argument deduction
+ // - gps
+ template <typename T>
+ struct width {
+
+#ifdef __BORLANDC__
+ BOOST_STATIC_CONSTANT(int, value = sizeof(T) * CHAR_BIT);
+#else
+ BOOST_STATIC_CONSTANT(int, value = (std::numeric_limits<T>::digits));
+#endif
+
+ };
+
+ } // detail
+
+
+ // ---------
+ // integer_log2
+ // ---------------
+ //
+ template <typename T>
+ int integer_log2(T x) {
+
+ assert(x > 0);
+
+ const int n = detail::max_pow2_less<
+ detail::width<T> :: value, 4
+ > :: value;
+
+ return detail::integer_log2_impl(x, n);
+
+ }
+
+
+
+}
+
+
+
+#endif // include guard
diff --git a/boost/boost/pending/integer_range.hpp b/boost/boost/pending/integer_range.hpp
new file mode 100644
index 00000000000..229cbd88805
--- /dev/null
+++ b/boost/boost/pending/integer_range.hpp
@@ -0,0 +1,59 @@
+// (C) Copyright David Abrahams and Jeremy Siek 2000-2001.
+// 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)
+//
+// Revision History:
+// 04 Jan 2001 Factored counting_iterator stuff into
+// boost/counting_iterator.hpp (David Abrahams)
+
+#ifndef BOOST_INTEGER_RANGE_HPP_
+#define BOOST_INTEGER_RANGE_HPP_
+
+#include <boost/config.hpp>
+#include <boost/iterator/counting_iterator.hpp>
+#include <algorithm>
+
+namespace boost {
+
+//=============================================================================
+// Counting Iterator and Integer Range Class
+
+template <class IntegerType>
+struct integer_range {
+ typedef counting_iterator<IntegerType> iterator;
+
+ typedef iterator const_iterator;
+ typedef IntegerType value_type;
+ typedef std::ptrdiff_t difference_type;
+ typedef IntegerType reference;
+ typedef IntegerType const_reference;
+ typedef const IntegerType* pointer;
+ typedef const IntegerType* const_pointer;
+ typedef IntegerType size_type;
+
+ integer_range(IntegerType start, IntegerType finish)
+ : m_start(start), m_finish(finish) { }
+
+ iterator begin() const { return iterator(m_start); }
+ iterator end() const { return iterator(m_finish); }
+ size_type size() const { return m_finish - m_start; }
+ bool empty() const { return m_finish == m_start; }
+ void swap(integer_range& x) {
+ std::swap(m_start, x.m_start);
+ std::swap(m_finish, x.m_finish);
+ }
+protected:
+ IntegerType m_start, m_finish;
+};
+
+template <class IntegerType>
+inline integer_range<IntegerType>
+make_integer_range(IntegerType first, IntegerType last)
+{
+ return integer_range<IntegerType>(first, last);
+}
+
+} // namespace boost
+
+#endif // BOOST_INTEGER_RANGE_HPP_
diff --git a/boost/boost/pending/is_heap.hpp b/boost/boost/pending/is_heap.hpp
new file mode 100644
index 00000000000..b2e4b00694c
--- /dev/null
+++ b/boost/boost/pending/is_heap.hpp
@@ -0,0 +1,62 @@
+//
+//=======================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//=======================================================================
+//
+#if __KCC
+namespace std {
+
+template <class RandomAccessIterator, class Distance>
+bool __is_heap(RandomAccessIterator first, RandomAccessIterator last,
+ Distance*)
+{
+ const Distance n = last - first;
+
+ Distance parent = 0;
+ for (Distance child = 1; child < n; ++child) {
+ if (first[parent] < first[child])
+ return false;
+ if ((child & 1) == 0)
+ ++parent;
+ }
+ return true;
+}
+
+template <class RandomAccessIterator>
+inline bool is_heap(RandomAccessIterator first, RandomAccessIterator last)
+{
+ return __is_heap(first, last, distance_type(first));
+}
+
+
+template <class RandomAccessIterator, class Distance, class StrictWeakOrdering>
+bool __is_heap(RandomAccessIterator first, RandomAccessIterator last,
+ StrictWeakOrdering comp,
+ Distance*)
+{
+ const Distance n = last - first;
+
+ Distance parent = 0;
+ for (Distance child = 1; child < n; ++child) {
+ if (comp(first[parent], first[child]))
+ return false;
+ if ((child & 1) == 0)
+ ++parent;
+ }
+ return true;
+}
+
+template <class RandomAccessIterator, class StrictWeakOrdering>
+inline bool is_heap(RandomAccessIterator first, RandomAccessIterator last,
+ StrictWeakOrdering comp)
+{
+ return __is_heap(first, last, comp, distance_type(first));
+}
+
+}
+#endif
diff --git a/boost/boost/pending/iterator_adaptors.hpp b/boost/boost/pending/iterator_adaptors.hpp
new file mode 100644
index 00000000000..2256e81240f
--- /dev/null
+++ b/boost/boost/pending/iterator_adaptors.hpp
@@ -0,0 +1,6 @@
+// Copyright David Abrahams 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)
+
+#include <boost/iterator_adaptors.hpp>
diff --git a/boost/boost/pending/iterator_tests.hpp b/boost/boost/pending/iterator_tests.hpp
new file mode 100644
index 00000000000..dd5fe2ddd6a
--- /dev/null
+++ b/boost/boost/pending/iterator_tests.hpp
@@ -0,0 +1,268 @@
+// Copyright David Abrahams and Jeremy Siek 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)
+#ifndef BOOST_ITERATOR_TESTS_HPP
+# define BOOST_ITERATOR_TESTS_HPP
+
+// This is meant to be the beginnings of a comprehensive, generic
+// test suite for STL concepts such as iterators and containers.
+//
+// Revision History:
+// 28 Apr 2002 Fixed input iterator requirements.
+// For a == b a++ == b++ is no longer required.
+// See 24.1.1/3 for details.
+// (Thomas Witt)
+// 08 Feb 2001 Fixed bidirectional iterator test so that
+// --i is no longer a precondition.
+// (Jeremy Siek)
+// 04 Feb 2001 Added lvalue test, corrected preconditions
+// (David Abrahams)
+
+# include <iterator>
+# include <assert.h>
+# include <boost/type_traits.hpp>
+# include <boost/static_assert.hpp>
+# include <boost/concept_archetype.hpp> // for detail::dummy_constructor
+# include <boost/implicit_cast.hpp>
+# include <boost/type_traits/broken_compiler_spec.hpp>
+
+namespace boost {
+
+ // use this for the value type
+struct dummyT {
+ dummyT() { }
+ dummyT(detail::dummy_constructor) { }
+ dummyT(int x) : m_x(x) { }
+ int foo() const { return m_x; }
+ bool operator==(const dummyT& d) const { return m_x == d.m_x; }
+ int m_x;
+};
+
+}
+
+BOOST_TT_BROKEN_COMPILER_SPEC(boost::dummyT)
+
+namespace boost {
+
+// Tests whether type Iterator satisfies the requirements for a
+// TrivialIterator.
+// Preconditions: i != j, *i == val
+template <class Iterator, class T>
+void trivial_iterator_test(const Iterator i, const Iterator j, T val)
+{
+ Iterator k;
+ assert(i == i);
+ assert(j == j);
+ assert(i != j);
+#ifdef BOOST_NO_STD_ITERATOR_TRAITS
+ T v = *i;
+#else
+ typename std::iterator_traits<Iterator>::value_type v = *i;
+#endif
+ assert(v == val);
+#if 0
+ // hmm, this will give a warning for transform_iterator... perhaps
+ // this should be separated out into a stand-alone test since there
+ // are several situations where it can't be used, like for
+ // integer_range::iterator.
+ assert(v == i->foo());
+#endif
+ k = i;
+ assert(k == k);
+ assert(k == i);
+ assert(k != j);
+ assert(*k == val);
+}
+
+
+// Preconditions: i != j
+template <class Iterator, class T>
+void mutable_trivial_iterator_test(const Iterator i, const Iterator j, T val)
+{
+ *i = val;
+ trivial_iterator_test(i, j, val);
+}
+
+
+// Preconditions: *i == v1, *++i == v2
+template <class Iterator, class T>
+void input_iterator_test(Iterator i, T v1, T v2)
+{
+ Iterator i1(i);
+
+ assert(i == i1);
+ assert(!(i != i1));
+
+ // I can see no generic way to create an input iterator
+ // that is in the domain of== of i and != i.
+ // The following works for istream_iterator but is not
+ // guaranteed to work for arbitrary input iterators.
+ //
+ // Iterator i2;
+ //
+ // assert(i != i2);
+ // assert(!(i == i2));
+
+ assert(*i1 == v1);
+ assert(*i == v1);
+
+ // we cannot test for equivalence of (void)++i & (void)i++
+ // as i is only guaranteed to be single pass.
+ assert(*i++ == v1);
+
+ i1 = i;
+
+ assert(i == i1);
+ assert(!(i != i1));
+
+ assert(*i1 == v2);
+ assert(*i == v2);
+
+ // i is dereferencable, so it must be incrementable.
+ ++i;
+
+ // how to test for operator-> ?
+}
+
+// how to test output iterator?
+
+
+template <bool is_pointer> struct lvalue_test
+{
+ template <class Iterator> static void check(Iterator)
+ {
+# ifndef BOOST_NO_STD_ITERATOR_TRAITS
+ typedef typename std::iterator_traits<Iterator>::reference reference;
+ typedef typename std::iterator_traits<Iterator>::value_type value_type;
+# else
+ typedef typename Iterator::reference reference;
+ typedef typename Iterator::value_type value_type;
+# endif
+ BOOST_STATIC_ASSERT(boost::is_reference<reference>::value);
+ BOOST_STATIC_ASSERT((boost::is_same<reference,value_type&>::value
+ || boost::is_same<reference,const value_type&>::value
+ ));
+ }
+};
+
+# ifdef BOOST_NO_STD_ITERATOR_TRAITS
+template <> struct lvalue_test<true> {
+ template <class T> static void check(T) {}
+};
+#endif
+
+template <class Iterator, class T>
+void forward_iterator_test(Iterator i, T v1, T v2)
+{
+ input_iterator_test(i, v1, v2);
+
+ Iterator i1 = i, i2 = i;
+
+ assert(i == i1++);
+ assert(i != ++i2);
+
+ trivial_iterator_test(i, i1, v1);
+ trivial_iterator_test(i, i2, v1);
+
+ ++i;
+ assert(i == i1);
+ assert(i == i2);
+ ++i1;
+ ++i2;
+
+ trivial_iterator_test(i, i1, v2);
+ trivial_iterator_test(i, i2, v2);
+
+ // borland doesn't allow non-type template parameters
+# if !defined(__BORLANDC__) || (__BORLANDC__ > 0x551)
+ lvalue_test<(boost::is_pointer<Iterator>::value)>::check(i);
+#endif
+}
+
+// Preconditions: *i == v1, *++i == v2
+template <class Iterator, class T>
+void bidirectional_iterator_test(Iterator i, T v1, T v2)
+{
+ forward_iterator_test(i, v1, v2);
+ ++i;
+
+ Iterator i1 = i, i2 = i;
+
+ assert(i == i1--);
+ assert(i != --i2);
+
+ trivial_iterator_test(i, i1, v2);
+ trivial_iterator_test(i, i2, v2);
+
+ --i;
+ assert(i == i1);
+ assert(i == i2);
+ ++i1;
+ ++i2;
+
+ trivial_iterator_test(i, i1, v1);
+ trivial_iterator_test(i, i2, v1);
+}
+
+// mutable_bidirectional_iterator_test
+
+template <class U> struct undefined;
+
+// Preconditions: [i,i+N) is a valid range
+template <class Iterator, class TrueVals>
+void random_access_iterator_test(Iterator i, int N, TrueVals vals)
+{
+ bidirectional_iterator_test(i, vals[0], vals[1]);
+ const Iterator j = i;
+ int c;
+
+ typedef typename boost::detail::iterator_traits<Iterator>::value_type value_type;
+
+ for (c = 0; c < N-1; ++c) {
+ assert(i == j + c);
+ assert(*i == vals[c]);
+ assert(*i == boost::implicit_cast<value_type>(j[c]));
+ assert(*i == *(j + c));
+ assert(*i == *(c + j));
+ ++i;
+ assert(i > j);
+ assert(i >= j);
+ assert(j <= i);
+ assert(j < i);
+ }
+
+ Iterator k = j + N - 1;
+ for (c = 0; c < N-1; ++c) {
+ assert(i == k - c);
+ assert(*i == vals[N - 1 - c]);
+ assert(*i == boost::implicit_cast<value_type>(j[N - 1 - c]));
+ Iterator q = k - c;
+ assert(*i == *q);
+ assert(i > j);
+ assert(i >= j);
+ assert(j <= i);
+ assert(j < i);
+ --i;
+ }
+}
+
+// Precondition: i != j
+template <class Iterator, class ConstIterator>
+void const_nonconst_iterator_test(Iterator i, ConstIterator j)
+{
+ assert(i != j);
+ assert(j != i);
+
+ ConstIterator k(i);
+ assert(k == i);
+ assert(i == k);
+
+ k = i;
+ assert(k == i);
+ assert(i == k);
+}
+
+} // namespace boost
+
+#endif // BOOST_ITERATOR_TESTS_HPP
diff --git a/boost/boost/pending/lowest_bit.hpp b/boost/boost/pending/lowest_bit.hpp
new file mode 100644
index 00000000000..dd8914e9f62
--- /dev/null
+++ b/boost/boost/pending/lowest_bit.hpp
@@ -0,0 +1,39 @@
+// -------------------------------------
+// lowest_bit.hpp
+//
+// Position of the lowest bit 'on'
+//
+// (C) Copyright Gennaro Prota 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)
+//
+// ------------------------------------------------------
+
+#ifndef BOOST_LOWEST_BIT_HPP_GP_20030301
+#define BOOST_LOWEST_BIT_HPP_GP_20030301
+
+#include <cassert>
+#include "boost/pending/integer_log2.hpp"
+
+
+namespace boost {
+
+ template <typename T>
+ int lowest_bit(T x) {
+
+ assert(x >= 1); // PRE
+
+ // clear all bits on except the rightmost one,
+ // then calculate the logarithm base 2
+ //
+ return boost::integer_log2<T>( x - ( x & (x-1) ) );
+
+ }
+
+
+}
+
+
+#endif // include guard
diff --git a/boost/boost/pending/mutable_heap.hpp b/boost/boost/pending/mutable_heap.hpp
new file mode 100644
index 00000000000..bbc81881907
--- /dev/null
+++ b/boost/boost/pending/mutable_heap.hpp
@@ -0,0 +1,64 @@
+//
+//=======================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// 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_GRAPH_DETAIL_MUTABLE_HEAP_H
+#define BOOST_GRAPH_DETAIL_MUTABLE_HEAP_H
+
+/*
+ There are a few things wrong with this set of functions.
+
+ ExternalData should be removed, it is not part of the core
+ algorithm. It can be handled inside the tree nodes.
+
+ The swap() should be replaced by assignment since its use is causing
+ the number of memory references to double.
+
+ The min_element should be replaced by a fixed length loop
+ (fixed at d for d-heaps).
+
+ The member functions of TreeNode should be changed to global
+ functions.
+
+ These functions will be replaced by those in heap_tree.h
+
+ */
+
+namespace boost {
+
+ template <class TreeNode, class Compare, class ExternalData>
+ inline TreeNode up_heap(TreeNode x, const Compare& comp, ExternalData& edata) {
+ while (x.has_parent() && comp(x, x.parent()))
+ x.swap(x.parent(), edata);
+ return x;
+ }
+
+ template <class TreeNode, class Compare, class ExternalData>
+ inline TreeNode down_heap(TreeNode x, const Compare& comp, ExternalData& edata) {
+ while (x.children().size() > 0) {
+ typename TreeNode::children_type::iterator
+ child_iter = std::min_element(x.children().begin(),
+ x.children().end(),
+ comp);
+ if (comp(*child_iter, x))
+ x.swap(*child_iter, edata);
+ else
+ break;
+ }
+ return x;
+ }
+
+ template <class TreeNode, class Compare, class ExternalData>
+ inline void update_heap(TreeNode x, const Compare& comp, ExternalData& edata) {
+ x = down_heap(x, comp, edata);
+ (void)up_heap(x, comp, edata);
+ }
+
+}
+#endif
diff --git a/boost/boost/pending/mutable_queue.hpp b/boost/boost/pending/mutable_queue.hpp
new file mode 100644
index 00000000000..b0f1073f12f
--- /dev/null
+++ b/boost/boost/pending/mutable_queue.hpp
@@ -0,0 +1,135 @@
+//
+//=======================================================================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+//
+// 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_MUTABLE_QUEUE_HPP
+#define BOOST_MUTABLE_QUEUE_HPP
+
+#include <vector>
+#include <algorithm>
+#include <functional>
+#include <boost/property_map.hpp>
+#include <boost/pending/mutable_heap.hpp>
+#include <boost/pending/is_heap.hpp>
+#include <boost/graph/detail/array_binary_tree.hpp>
+#include <iterator>
+
+namespace boost {
+
+ // The mutable queue whose elements are indexed
+ //
+ // This adaptor provides a special kind of priority queue that has
+ // and update operation. This allows the ordering of the items to
+ // change. After the ordering criteria for item x changes, one must
+ // call the Q.update(x)
+ //
+ // In order to efficiently find x in the queue, a functor must be
+ // provided to map value_type to a unique ID, which the
+ // mutable_queue will then use to map to the location of the
+ // item. The ID's generated must be between 0 and N, where N is the
+ // value passed to the constructor of mutable_queue
+
+ template <class IndexedType,
+ class RandomAccessContainer = std::vector<IndexedType>,
+ class Comp = std::less<typename RandomAccessContainer::value_type>,
+ class ID = identity_property_map >
+ class mutable_queue {
+ public:
+ typedef IndexedType value_type;
+ typedef typename RandomAccessContainer::size_type size_type;
+ protected:
+ typedef typename RandomAccessContainer::iterator iterator;
+#if !defined BOOST_NO_STD_ITERATOR_TRAITS
+ typedef adstl::array_binary_tree_node<iterator, ID> Node;
+#else
+ typedef adstl::array_binary_tree_node<iterator, value_type, ID> Node;
+#endif
+ typedef adstl::compare_array_node<RandomAccessContainer,Comp> Compare;
+ typedef std::vector<size_type> IndexArray;
+ public:
+ typedef Compare value_compare;
+ typedef ID id_generator;
+
+ mutable_queue(size_type n, const Comp& x, const ID& _id)
+ : index_array(n), comp(x), id(_id) {
+ c.reserve(n);
+ }
+ template <class ForwardIterator>
+ mutable_queue(ForwardIterator first, ForwardIterator last,
+ const Comp& x, const ID& _id)
+ : index_array(std::distance(first, last)), comp(x), id(_id)
+ {
+ while( first != last ) {
+ push(*first);
+ ++first;
+ }
+ }
+
+ bool empty() const { return c.empty(); }
+
+ void pop() {
+ value_type tmp = c.back();
+ c.back() = c.front();
+ c.front() = tmp;
+
+ size_type id_f = get(id, c.back());
+ size_type id_b = get(id, tmp);
+ size_type i = index_array[ id_b ];
+ index_array[ id_b ] = index_array[ id_f ];
+ index_array[ id_f ] = i;
+
+ c.pop_back();
+ Node node(c.begin(), c.end(), c.begin(), id);
+ down_heap(node, comp, index_array);
+ }
+ void push(const IndexedType& x) {
+ c.push_back(x);
+ /*set index-array*/
+ index_array[ get(id, x) ] = c.size()-1;
+ Node node(c.begin(), c.end(), c.end() - 1, id);
+ up_heap(node, comp, index_array);
+ }
+
+ void update(const IndexedType& x) {
+ size_type current_pos = index_array[ get(id, x) ];
+ c[current_pos] = x;
+
+ Node node(c.begin(), c.end(), c.begin()+current_pos, id);
+ update_heap(node, comp, index_array);
+ }
+
+ value_type& front() { return c.front(); }
+ value_type& top() { return c.front(); }
+
+ const value_type& front() const { return c.front(); }
+ const value_type& top() const { return c.front(); }
+
+ size_type size() const { return c.size(); }
+
+ void clear() { c.clear(); }
+
+#if 0
+ // dwa 2003/7/11 - I don't know what compiler is supposed to
+ // be able to compile this, but is_heap is not standard!!
+ bool test() {
+ return std::is_heap(c.begin(), c.end(), Comp());
+ }
+#endif
+
+ protected:
+ IndexArray index_array;
+ Compare comp;
+ RandomAccessContainer c;
+ ID id;
+ };
+
+
+}
+
+#endif // BOOST_MUTABLE_QUEUE_HPP
diff --git a/boost/boost/pending/property.hpp b/boost/boost/pending/property.hpp
new file mode 100644
index 00000000000..f4d2cb91eaa
--- /dev/null
+++ b/boost/boost/pending/property.hpp
@@ -0,0 +1,132 @@
+// (C) Copyright Jeremy Siek 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)
+
+#ifndef BOOST_PROPERTY_HPP
+#define BOOST_PROPERTY_HPP
+
+#include <boost/pending/ct_if.hpp>
+
+namespace boost {
+
+ struct no_property {
+ typedef no_property tag_type;
+ typedef no_property next_type;
+ typedef no_property value_type;
+ enum { num = 0 };
+ typedef void kind;
+ };
+
+ template <class Tag, class T, class Base = no_property>
+ struct property : public Base {
+ typedef Base next_type;
+ typedef Tag tag_type;
+ typedef T value_type;
+#if BOOST_WORKAROUND (__GNUC__, < 3)
+ property() { }
+#else
+ property() : m_value() { }
+#endif
+ property(const T& v) : m_value(v) { }
+ property(const T& v, const Base& b) : Base(b), m_value(v) { }
+ // copy constructor and assignment operator will be generated by compiler
+
+ T m_value;
+ };
+
+ // The BGL properties specialize property_kind and
+ // property_num, and use enum's for the Property type (see
+ // graph/properties.hpp), but the user may want to use a class
+ // instead with a nested kind type and num. Also, we may want to
+ // switch BGL back to using class types for properties at some point.
+
+ template <class PropertyTag>
+ struct property_kind {
+ typedef typename PropertyTag::kind type;
+ };
+
+ template <class P>
+ struct has_property {
+ BOOST_STATIC_CONSTANT(bool, value = true);
+ typedef true_type type;
+ };
+ template <>
+ struct has_property<no_property> {
+ BOOST_STATIC_CONSTANT(bool, value = false);
+ typedef false_type type;
+ };
+
+} // namespace boost
+
+#include <boost/pending/detail/property.hpp>
+
+namespace boost {
+
+ template <class PropertyList, class Tag>
+ struct property_value {
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ typedef typename detail::build_property_tag_value_alist<PropertyList>::type AList;
+ typedef typename detail::extract_value<AList,Tag>::type type;
+#else
+ typedef typename detail::build_property_tag_value_alist<PropertyList>::type AList;
+ typedef typename detail::ev_selector<AList>::type Extractor;
+ typedef typename Extractor::template bind_<AList,Tag>::type type;
+#endif
+ };
+
+ template <class Tag1, class Tag2, class T1, class Base>
+ inline typename property_value<property<Tag1,T1,Base>, Tag2>::type&
+ get_property_value(property<Tag1,T1,Base>& p, Tag2 tag2) {
+ BOOST_STATIC_CONSTANT(bool,
+ match = (detail::same_property<Tag1,Tag2>::value));
+ typedef property<Tag1,T1,Base> Prop;
+ typedef typename property_value<Prop, Tag2>::type T2;
+ T2* t2 = 0;
+ typedef detail::property_value_dispatch<match> Dispatcher;
+ return Dispatcher::get_value(p, t2, tag2);
+ }
+ template <class Tag1, class Tag2, class T1, class Base>
+ inline
+ const typename property_value<property<Tag1,T1,Base>, Tag2>::type&
+ get_property_value(const property<Tag1,T1,Base>& p, Tag2 tag2) {
+ BOOST_STATIC_CONSTANT(bool,
+ match = (detail::same_property<Tag1,Tag2>::value));
+ typedef property<Tag1,T1,Base> Prop;
+ typedef typename property_value<Prop, Tag2>::type T2;
+ T2* t2 = 0;
+ typedef detail::property_value_dispatch<match> Dispatcher;
+ return Dispatcher::const_get_value(p, t2, tag2);
+ }
+
+ namespace detail {
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+ template<typename FinalTag, typename FinalType>
+ struct retag_property_list
+ {
+ typedef property<FinalTag, FinalType> type;
+ typedef FinalType retagged;
+ };
+
+ template<typename FinalTag, typename Tag, typename T, typename Base>
+ struct retag_property_list<FinalTag, property<Tag, T, Base> >
+ {
+ private:
+ typedef retag_property_list<FinalTag, Base> next;
+
+ public:
+ typedef property<Tag, T, typename next::type> type;
+ typedef typename next::retagged retagged;
+ };
+
+ template<typename FinalTag>
+ struct retag_property_list<FinalTag, no_property>
+ {
+ typedef no_property type;
+ typedef no_property retagged;
+ };
+#endif
+ }
+} // namesapce boost
+
+#endif /* BOOST_PROPERTY_HPP */
diff --git a/boost/boost/pending/property_serialize.hpp b/boost/boost/pending/property_serialize.hpp
new file mode 100644
index 00000000000..5ec9c984fa0
--- /dev/null
+++ b/boost/boost/pending/property_serialize.hpp
@@ -0,0 +1,28 @@
+// (C) Copyright Jeremy Siek 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)
+
+#ifndef BOOST_PROPERTY_SERIALIZE_HPP
+#define BOOST_PROPERTY_SERIALIZE_HPP
+
+#include <boost/pending/property.hpp>
+
+#include <boost/serialization/base_object.hpp>
+#include <boost/serialization/nvp.hpp>
+
+namespace boost {
+ template<class Archive>
+ inline void serialize(Archive&, no_property&, const unsigned int) { }
+
+ template<class Archive, class Tag, class T, class Base>
+ void
+ serialize(Archive& ar, property<Tag, T, Base>& prop,
+ const unsigned int version)
+ {
+ ar & serialization::make_nvp( "property_base" , boost::serialization::base_object<Base>(prop) );
+ ar & serialization::make_nvp( "property_value" , prop.m_value );
+ }
+} // end namespace boost
+
+#endif // BOOST_PROPERTY_SERIALIZE_HPP
diff --git a/boost/boost/pending/queue.hpp b/boost/boost/pending/queue.hpp
new file mode 100644
index 00000000000..f5f5b6336e6
--- /dev/null
+++ b/boost/boost/pending/queue.hpp
@@ -0,0 +1,118 @@
+// (C) Copyright Jeremy Siek 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)
+
+#ifndef BOOST_QUEUE_HPP
+#define BOOST_QUEUE_HPP
+
+#include <deque>
+#include <algorithm>
+
+namespace boost {
+
+template <class _Tp,
+ class _Sequence = std::deque<_Tp> >
+class queue;
+
+template <class _Tp, class _Seq>
+inline bool operator==(const queue<_Tp, _Seq>&, const queue<_Tp, _Seq>&);
+
+template <class _Tp, class _Seq>
+inline bool operator<(const queue<_Tp, _Seq>&, const queue<_Tp, _Seq>&);
+
+
+template <class _Tp, class _Sequence>
+class queue {
+
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+ template <class _Tp1, class _Seq1>
+ friend bool operator== (const queue<_Tp1, _Seq1>&,
+ const queue<_Tp1, _Seq1>&);
+ template <class _Tp1, class _Seq1>
+ friend bool operator< (const queue<_Tp1, _Seq1>&,
+ const queue<_Tp1, _Seq1>&);
+#endif
+public:
+ typedef typename _Sequence::value_type value_type;
+ typedef typename _Sequence::size_type size_type;
+ typedef _Sequence container_type;
+
+ typedef typename _Sequence::reference reference;
+ typedef typename _Sequence::const_reference const_reference;
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+protected:
+#endif
+ _Sequence c;
+public:
+ queue() : c() {}
+ explicit queue(const _Sequence& __c) : c(__c) {}
+
+ bool empty() const { return c.empty(); }
+ size_type size() const { return c.size(); }
+ reference front() { return c.front(); }
+ const_reference front() const { return c.front(); }
+ reference top() { return c.front(); }
+ const_reference top() const { return c.front(); }
+ reference back() { return c.back(); }
+ const_reference back() const { return c.back(); }
+ void push(const value_type& __x) { c.push_back(__x); }
+ void pop() { c.pop_front(); }
+
+ void swap(queue& other)
+ {
+ using std::swap;
+ swap(c, other.c);
+ }
+};
+
+template <class _Tp, class _Sequence>
+bool
+operator==(const queue<_Tp, _Sequence>& __x, const queue<_Tp, _Sequence>& __y)
+{
+ return __x.c == __y.c;
+}
+
+template <class _Tp, class _Sequence>
+bool
+operator<(const queue<_Tp, _Sequence>& __x, const queue<_Tp, _Sequence>& __y)
+{
+ return __x.c < __y.c;
+}
+
+template <class _Tp, class _Sequence>
+bool
+operator!=(const queue<_Tp, _Sequence>& __x, const queue<_Tp, _Sequence>& __y)
+{
+ return !(__x == __y);
+}
+
+template <class _Tp, class _Sequence>
+bool
+operator>(const queue<_Tp, _Sequence>& __x, const queue<_Tp, _Sequence>& __y)
+{
+ return __y < __x;
+}
+
+template <class _Tp, class _Sequence>
+bool
+operator<=(const queue<_Tp, _Sequence>& __x, const queue<_Tp, _Sequence>& __y)
+{
+ return !(__y < __x);
+}
+
+template <class _Tp, class _Sequence>
+bool
+operator>=(const queue<_Tp, _Sequence>& __x, const queue<_Tp, _Sequence>& __y)
+{
+ return !(__x < __y);
+}
+
+template <class _Tp, class _Sequence>
+inline void
+swap(queue<_Tp, _Sequence>& __x, queue<_Tp, _Sequence>& __y)
+{ __x.swap(__y); }
+
+} /* namespace boost */
+
+#endif /* BOOST_QUEUE_HPP */
diff --git a/boost/boost/pending/relaxed_heap.hpp b/boost/boost/pending/relaxed_heap.hpp
new file mode 100644
index 00000000000..0035254d9d0
--- /dev/null
+++ b/boost/boost/pending/relaxed_heap.hpp
@@ -0,0 +1,642 @@
+// Copyright 2004 The Trustees of Indiana University.
+
+// Use, modification and distribution is 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)
+
+// Authors: Douglas Gregor
+// Andrew Lumsdaine
+#ifndef BOOST_RELAXED_HEAP_HEADER
+#define BOOST_RELAXED_HEAP_HEADER
+
+#include <functional>
+#include <boost/property_map.hpp>
+#include <boost/optional.hpp>
+#include <vector>
+
+#ifdef BOOST_RELAXED_HEAP_DEBUG
+# include <iostream>
+#endif // BOOST_RELAXED_HEAP_DEBUG
+
+#if defined(BOOST_MSVC)
+# pragma warning(push)
+# pragma warning(disable:4355) // complaint about using 'this' to
+#endif // initialize a member
+
+namespace boost {
+
+template<typename IndexedType,
+ typename Compare = std::less<IndexedType>,
+ typename ID = identity_property_map>
+class relaxed_heap
+{
+ struct group;
+
+ typedef relaxed_heap self_type;
+ typedef std::size_t rank_type;
+
+public:
+ typedef IndexedType value_type;
+ typedef rank_type size_type;
+
+private:
+ /**
+ * The kind of key that a group has. The actual values are discussed
+ * in-depth in the documentation of the @c kind field of the @c group
+ * structure. Note that the order of the enumerators *IS* important
+ * and must not be changed.
+ */
+ enum group_key_kind { smallest_key, stored_key, largest_key };
+
+ struct group {
+ explicit group(group_key_kind kind = largest_key)
+ : kind(kind), parent(this), rank(0) { }
+
+ /** The value associated with this group. This value is only valid
+ * when @c kind!=largest_key (which indicates a deleted
+ * element). Note that the use of boost::optional increases the
+ * memory requirements slightly but does not result in extraneous
+ * memory allocations or deallocations. The optional could be
+ * eliminated when @c value_type is a model of
+ * DefaultConstructible.
+ */
+ ::boost::optional<value_type> value;
+
+ /**
+ * The kind of key stored at this group. This may be @c
+ * smallest_key, which indicates that the key is infinitely small;
+ * @c largest_key, which indicates that the key is infinitely
+ * large; or @c stored_key, which means that the key is unknown,
+ * but its relationship to other keys can be determined via the
+ * comparison function object.
+ */
+ group_key_kind kind;
+
+ /// The parent of this group. Will only be NULL for the dummy root group
+ group* parent;
+
+ /// The rank of this group. Equivalent to the number of children in
+ /// the group.
+ rank_type rank;
+
+ /** The children of this group. For the dummy root group, these are
+ * the roots. This is an array of length log n containing pointers
+ * to the child groups.
+ */
+ group** children;
+ };
+
+ size_type log_base_2(size_type n) // log2 is a macro on some platforms
+ {
+ size_type leading_zeroes = 0;
+ do {
+ size_type next = n << 1;
+ if (n == (next >> 1)) {
+ ++leading_zeroes;
+ n = next;
+ } else {
+ break;
+ }
+ } while (true);
+ return sizeof(size_type) * CHAR_BIT - leading_zeroes - 1;
+ }
+
+public:
+ relaxed_heap(size_type n, const Compare& compare = Compare(),
+ const ID& id = ID())
+ : compare(compare), id(id), root(smallest_key), groups(n),
+ smallest_value(0)
+ {
+ if (n == 0) {
+ root.children = new group*[1];
+ return;
+ }
+
+ log_n = log_base_2(n);
+ if (log_n == 0) log_n = 1;
+ size_type g = n / log_n;
+ if (n % log_n > 0) ++g;
+ size_type log_g = log_base_2(g);
+ size_type r = log_g;
+
+ // Reserve an appropriate amount of space for data structures, so
+ // that we do not need to expand them.
+ index_to_group.resize(g);
+ A.resize(r + 1, 0);
+ root.rank = r + 1;
+ root.children = new group*[(log_g + 1) * (g + 1)];
+ for (rank_type i = 0; i < r+1; ++i) root.children[i] = 0;
+
+ // Build initial heap
+ size_type idx = 0;
+ while (idx < g) {
+ root.children[r] = &index_to_group[idx];
+ idx = build_tree(root, idx, r, log_g + 1);
+ if (idx != g)
+ r = static_cast<size_type>(log_base_2(g-idx));
+ }
+ }
+
+ ~relaxed_heap() { delete [] root.children; }
+
+ void push(const value_type& x)
+ {
+ groups[get(id, x)] = x;
+ update(x);
+ }
+
+ void update(const value_type& x)
+ {
+ group* a = &index_to_group[get(id, x) / log_n];
+ if (!a->value
+ || *a->value == x
+ || compare(x, *a->value)) {
+ if (a != smallest_value) smallest_value = 0;
+ a->kind = stored_key;
+ a->value = x;
+ promote(a);
+ }
+ }
+
+ void remove(const value_type& x)
+ {
+ group* a = &index_to_group[get(id, x) / log_n];
+ assert(groups[get(id, x)] != 0);
+ a->value = x;
+ a->kind = smallest_key;
+ promote(a);
+ smallest_value = a;
+ pop();
+ }
+
+ value_type& top()
+ {
+ find_smallest();
+ assert(smallest_value->value != 0);
+ return *smallest_value->value;
+ }
+
+ const value_type& top() const
+ {
+ find_smallest();
+ assert(smallest_value->value != 0);
+ return *smallest_value->value;
+ }
+
+ bool empty() const
+ {
+ find_smallest();
+ return !smallest_value || (smallest_value->kind == largest_key);
+ }
+
+ bool contains(const value_type& x) const { return groups[get(id, x)]; }
+
+ void pop()
+ {
+ // Fill in smallest_value. This is the group x.
+ find_smallest();
+ group* x = smallest_value;
+ smallest_value = 0;
+
+ // Make x a leaf, giving it the smallest value within its group
+ rank_type r = x->rank;
+ group* p = x->parent;
+ {
+ assert(x->value != 0);
+
+ // Find x's group
+ size_type start = get(id, *x->value) - get(id, *x->value) % log_n;
+ size_type end = start + log_n;
+ if (end > groups.size()) end = groups.size();
+
+ // Remove the smallest value from the group, and find the new
+ // smallest value.
+ groups[get(id, *x->value)].reset();
+ x->value.reset();
+ x->kind = largest_key;
+ for (size_type i = start; i < end; ++i) {
+ if (groups[i] && (!x->value || compare(*groups[i], *x->value))) {
+ x->kind = stored_key;
+ x->value = groups[i];
+ }
+ }
+ }
+ x->rank = 0;
+
+ // Combine prior children of x with x
+ group* y = x;
+ for (size_type c = 0; c < r; ++c) {
+ group* child = x->children[c];
+ if (A[c] == child) A[c] = 0;
+ y = combine(y, child);
+ }
+
+ // If we got back something other than x, let y take x's place
+ if (y != x) {
+ y->parent = p;
+ p->children[r] = y;
+
+ assert(r == y->rank);
+ if (A[y->rank] == x)
+ A[y->rank] = do_compare(y, p)? y : 0;
+ }
+ }
+
+#ifdef BOOST_RELAXED_HEAP_DEBUG
+ /*************************************************************************
+ * Debugging support *
+ *************************************************************************/
+ void dump_tree() { dump_tree(std::cout); }
+ void dump_tree(std::ostream& out) { dump_tree(out, &root); }
+
+ void dump_tree(std::ostream& out, group* p, bool in_progress = false)
+ {
+ if (!in_progress) {
+ out << "digraph heap {\n"
+ << " edge[dir=\"back\"];\n";
+ }
+
+ size_type p_index = 0;
+ if (p != &root) while (&index_to_group[p_index] != p) ++p_index;
+
+ for (size_type i = 0; i < p->rank; ++i) {
+ group* c = p->children[i];
+ if (c) {
+ size_type c_index = 0;
+ if (c != &root) while (&index_to_group[c_index] != c) ++c_index;
+
+ out << " ";
+ if (p == &root) out << 'p'; else out << p_index;
+ out << " -> ";
+ if (c == &root) out << 'p'; else out << c_index;
+ if (A[c->rank] == c) out << " [style=\"dotted\"]";
+ out << ";\n";
+ dump_tree(out, c, true);
+
+ // Emit node information
+ out << " ";
+ if (c == &root) out << 'p'; else out << c_index;
+ out << " [label=\"";
+ if (c == &root) out << 'p'; else out << c_index;
+ out << ":";
+ size_type start = c_index * log_n;
+ size_type end = start + log_n;
+ if (end > groups.size()) end = groups.size();
+ while (start != end) {
+ if (groups[start]) {
+ out << " " << get(id, *groups[start]);
+ if (*groups[start] == *c->value) out << "(*)";
+ }
+ ++start;
+ }
+ out << '"';
+
+ if (do_compare(c, p)) {
+ out << " ";
+ if (c == &root) out << 'p'; else out << c_index;
+ out << ", style=\"filled\", fillcolor=\"gray\"";
+ }
+ out << "];\n";
+ } else {
+ assert(p->parent == p);
+ }
+ }
+ if (!in_progress) out << "}\n";
+ }
+
+ bool valid()
+ {
+ // Check that the ranks in the A array match the ranks of the
+ // groups stored there. Also, the active groups must be the last
+ // child of their parent.
+ for (size_type r = 0; r < A.size(); ++r) {
+ if (A[r] && A[r]->rank != r) return false;
+
+ if (A[r] && A[r]->parent->children[A[r]->parent->rank-1] != A[r])
+ return false;
+ }
+
+ // The root must have no value and a key of -Infinity
+ if (root.kind != smallest_key) return false;
+
+ return valid(&root);
+ }
+
+ bool valid(group* p)
+ {
+ for (size_type i = 0; i < p->rank; ++i) {
+ group* c = p->children[i];
+ if (c) {
+ // Check link structure
+ if (c->parent != p) return false;
+ if (c->rank != i) return false;
+
+ // A bad group must be active
+ if (do_compare(c, p) && A[i] != c) return false;
+
+ // Check recursively
+ if (!valid(c)) return false;
+ } else {
+ // Only the root may
+ if (p != &root) return false;
+ }
+ }
+ return true;
+ }
+
+#endif // BOOST_RELAXED_HEAP_DEBUG
+
+private:
+ size_type
+ build_tree(group& parent, size_type idx, size_type r, size_type max_rank)
+ {
+ group& this_group = index_to_group[idx];
+ this_group.parent = &parent;
+ ++idx;
+
+ this_group.children = root.children + (idx * max_rank);
+ this_group.rank = r;
+ for (size_type i = 0; i < r; ++i) {
+ this_group.children[i] = &index_to_group[idx];
+ idx = build_tree(this_group, idx, i, max_rank);
+ }
+ return idx;
+ }
+
+ void find_smallest() const
+ {
+ group** roots = root.children;
+
+ if (!smallest_value) {
+ std::size_t i;
+ for (i = 0; i < root.rank; ++i) {
+ if (roots[i] &&
+ (!smallest_value || do_compare(roots[i], smallest_value))) {
+ smallest_value = roots[i];
+ }
+ }
+ for (i = 0; i < A.size(); ++i) {
+ if (A[i] && (!smallest_value || do_compare(A[i], smallest_value)))
+ smallest_value = A[i];
+ }
+ }
+ }
+
+ bool do_compare(group* x, group* y) const
+ {
+ return (x->kind < y->kind
+ || (x->kind == y->kind
+ && x->kind == stored_key
+ && compare(*x->value, *y->value)));
+ }
+
+ void promote(group* a)
+ {
+ assert(a != 0);
+ rank_type r = a->rank;
+ group* p = a->parent;
+ assert(p != 0);
+ if (do_compare(a, p)) {
+ // s is the rank + 1 sibling
+ group* s = p->rank > r + 1? p->children[r + 1] : 0;
+
+ // If a is the last child of p
+ if (r == p->rank - 1) {
+ if (!A[r]) A[r] = a;
+ else if (A[r] != a) pair_transform(a);
+ } else {
+ assert(s != 0);
+ if (A[r + 1] == s) active_sibling_transform(a, s);
+ else good_sibling_transform(a, s);
+ }
+ }
+ }
+
+ group* combine(group* a1, group* a2)
+ {
+ assert(a1->rank == a2->rank);
+ if (do_compare(a2, a1)) do_swap(a1, a2);
+ a1->children[a1->rank++] = a2;
+ a2->parent = a1;
+ clean(a1);
+ return a1;
+ }
+
+ void clean(group* q)
+ {
+ if (2 > q->rank) return;
+ group* qp = q->children[q->rank-1];
+ rank_type s = q->rank - 2;
+ group* x = q->children[s];
+ group* xp = qp->children[s];
+ assert(s == x->rank);
+
+ // If x is active, swap x and xp
+ if (A[s] == x) {
+ q->children[s] = xp;
+ xp->parent = q;
+ qp->children[s] = x;
+ x->parent = qp;
+ }
+ }
+
+ void pair_transform(group* a)
+ {
+#if defined(BOOST_RELAXED_HEAP_DEBUG) && BOOST_RELAXED_HEAP_DEBUG > 1
+ std::cerr << "- pair transform\n";
+#endif
+ rank_type r = a->rank;
+
+ // p is a's parent
+ group* p = a->parent;
+ assert(p != 0);
+
+ // g is p's parent (a's grandparent)
+ group* g = p->parent;
+ assert(g != 0);
+
+ // a' <- A(r)
+ assert(A[r] != 0);
+ group* ap = A[r];
+ assert(ap != 0);
+
+ // A(r) <- nil
+ A[r] = 0;
+
+ // let a' have parent p'
+ group* pp = ap->parent;
+ assert(pp != 0);
+
+ // let a' have grandparent g'
+ group* gp = pp->parent;
+ assert(gp != 0);
+
+ // Remove a and a' from their parents
+ assert(ap == pp->children[pp->rank-1]); // Guaranteed because ap is active
+ --pp->rank;
+
+ // Guaranteed by caller
+ assert(a == p->children[p->rank-1]);
+ --p->rank;
+
+ // Note: a, ap, p, pp all have rank r
+ if (do_compare(pp, p)) {
+ do_swap(a, ap);
+ do_swap(p, pp);
+ do_swap(g, gp);
+ }
+
+ // Assuming k(p) <= k(p')
+ // make p' the rank r child of p
+ assert(r == p->rank);
+ p->children[p->rank++] = pp;
+ pp->parent = p;
+
+ // Combine a, ap into a rank r+1 group c
+ group* c = combine(a, ap);
+
+ // make c the rank r+1 child of g'
+ assert(gp->rank > r+1);
+ gp->children[r+1] = c;
+ c->parent = gp;
+
+#if defined(BOOST_RELAXED_HEAP_DEBUG) && BOOST_RELAXED_HEAP_DEBUG > 1
+ std::cerr << "After pair transform...\n";
+ dump_tree();
+#endif
+
+ if (A[r+1] == pp) A[r+1] = c;
+ else promote(c);
+ }
+
+ void active_sibling_transform(group* a, group* s)
+ {
+#if defined(BOOST_RELAXED_HEAP_DEBUG) && BOOST_RELAXED_HEAP_DEBUG > 1
+ std::cerr << "- active sibling transform\n";
+#endif
+ group* p = a->parent;
+ group* g = p->parent;
+
+ // remove a, s from their parents
+ assert(s->parent == p);
+ assert(p->children[p->rank-1] == s);
+ --p->rank;
+ assert(p->children[p->rank-1] == a);
+ --p->rank;
+
+ rank_type r = a->rank;
+ A[r+1] = 0;
+ a = combine(p, a);
+ group* c = combine(a, s);
+
+ // make c the rank r+2 child of g
+ assert(g->children[r+2] == p);
+ g->children[r+2] = c;
+ c->parent = g;
+ if (A[r+2] == p) A[r+2] = c;
+ else promote(c);
+ }
+
+ void good_sibling_transform(group* a, group* s)
+ {
+#if defined(BOOST_RELAXED_HEAP_DEBUG) && BOOST_RELAXED_HEAP_DEBUG > 1
+ std::cerr << "- good sibling transform\n";
+#endif
+ rank_type r = a->rank;
+ group* c = s->children[s->rank-1];
+ assert(c->rank == r);
+ if (A[r] == c) {
+#if defined(BOOST_RELAXED_HEAP_DEBUG) && BOOST_RELAXED_HEAP_DEBUG > 1
+ std::cerr << "- good sibling pair transform\n";
+#endif
+ A[r] = 0;
+ group* p = a->parent;
+
+ // Remove c from its parent
+ --s->rank;
+
+ // Make s the rank r child of p
+ s->parent = p;
+ p->children[r] = s;
+
+ // combine a, c and let the result by the rank r+1 child of p
+ assert(p->rank > r+1);
+ group* x = combine(a, c);
+ x->parent = p;
+ p->children[r+1] = x;
+
+ if (A[r+1] == s) A[r+1] = x;
+ else promote(x);
+
+#if defined(BOOST_RELAXED_HEAP_DEBUG) && BOOST_RELAXED_HEAP_DEBUG > 1
+ dump_tree(std::cerr);
+#endif
+ // pair_transform(a);
+ } else {
+ // Clean operation
+ group* p = a->parent;
+ s->children[r] = a;
+ a->parent = s;
+ p->children[r] = c;
+ c->parent = p;
+
+ promote(a);
+ }
+ }
+
+ static void do_swap(group*& x, group*& y)
+ {
+ group* tmp = x;
+ x = y;
+ y = tmp;
+ }
+
+ /// Function object that compares two values in the heap
+ Compare compare;
+
+ /// Mapping from values to indices in the range [0, n).
+ ID id;
+
+ /** The root group of the queue. This group is special because it will
+ * never store a value, but it acts as a parent to all of the
+ * roots. Thus, its list of children is the list of roots.
+ */
+ group root;
+
+ /** Mapping from the group index of a value to the group associated
+ * with that value. If a value is not in the queue, then the "value"
+ * field will be empty.
+ */
+ std::vector<group> index_to_group;
+
+ /** Flat data structure containing the values in each of the
+ * groups. It will be indexed via the id of the values. The groups
+ * are each log_n long, with the last group potentially being
+ * smaller.
+ */
+ std::vector< ::boost::optional<value_type> > groups;
+
+ /** The list of active groups, indexed by rank. When A[r] is null,
+ * there is no active group of rank r. Otherwise, A[r] is the active
+ * group of rank r.
+ */
+ std::vector<group*> A;
+
+ /** The group containing the smallest value in the queue, which must
+ * be either a root or an active group. If this group is null, then we
+ * will need to search for this group when it is needed.
+ */
+ mutable group* smallest_value;
+
+ /// Cached value log_base_2(n)
+ size_type log_n;
+};
+
+
+} // end namespace boost
+
+#if defined(BOOST_MSVC)
+# pragma warning(pop)
+#endif
+
+#endif // BOOST_RELAXED_HEAP_HEADER
diff --git a/boost/boost/pending/stringtok.hpp b/boost/boost/pending/stringtok.hpp
new file mode 100644
index 00000000000..a7065644491
--- /dev/null
+++ b/boost/boost/pending/stringtok.hpp
@@ -0,0 +1,111 @@
+// (C) Copyright Jeremy Siek 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)
+
+/*
+ * stringtok.hpp -- Breaks a string into tokens. This is an example for lib3.
+ *
+ * Template function looks like this:
+ *
+ * template <typename Container>
+ * void stringtok (Container &l,
+ * string const &s,
+ * char const * const ws = " \t\n");
+ *
+ * A nondestructive version of strtok() that handles its own memory and can
+ * be broken up by any character(s). Does all the work at once rather than
+ * in an invocation loop like strtok() requires.
+ *
+ * Container is any type that supports push_back(a_string), although using
+ * list<string> and deque<string> are indicated due to their O(1) push_back.
+ * (I prefer deque<> because op[]/at() is available as well.) The first
+ * parameter references an existing Container.
+ *
+ * s is the string to be tokenized. From the parameter declaration, it can
+ * be seen that s is not affected. Since references-to-const may refer to
+ * temporaries, you could use stringtok(some_container, readline("")) when
+ * using the GNU readline library.
+ *
+ * The final parameter is an array of characters that serve as whitespace.
+ * Whitespace characters default to one or more of tab, space, and newline,
+ * in any combination.
+ *
+ * 'l' need not be empty on entry. On return, 'l' will have the token
+ * strings appended.
+ *
+ *
+ * [Example:
+ * list<string> ls;
+ * stringtok (ls, " this \t is\t\n a test ");
+ * for (list<string>::const_iterator i = ls.begin();
+ * i != ls.end(); ++i)
+ * {
+ * cerr << ':' << (*i) << ":\n";
+ * }
+ *
+ * would print
+ * :this:
+ * :is:
+ * :a:
+ * :test:
+ * -end example]
+ *
+ * pedwards@jaj.com May 1999
+*/
+
+
+#include <string>
+#include <cstring> // for strchr
+
+
+/*****************************************************************
+ * This is the only part of the implementation that I don't like.
+ * It can probably be improved upon by the reader...
+*/
+
+ inline bool
+ isws (char c, char const * const wstr)
+ {
+ using namespace std;
+ return (strchr(wstr,c) != NULL);
+ }
+
+
+namespace boost {
+
+/*****************************************************************
+ * Simplistic and quite Standard, but a bit slow. This should be
+ * templatized on basic_string instead, or on a more generic StringT
+ * that just happens to support ::size_type, .substr(), and so on.
+ * I had hoped that "whitespace" would be a trait, but it isn't, so
+ * the user must supply it. Enh, this lets them break up strings on
+ * different things easier than traits would anyhow.
+*/
+template <typename Container>
+void
+stringtok (Container &l, std::string const &s, char const * const ws = " \t\n")
+{
+ typedef std::string::size_type size_type;
+ const size_type S = s.size();
+ size_type i = 0;
+
+ while (i < S) {
+ // eat leading whitespace
+ while ((i < S) && (isws(s[i],ws))) ++i;
+ if (i == S) return; // nothing left but WS
+
+ // find end of word
+ size_type j = i+1;
+ while ((j < S) && (!isws(s[j],ws))) ++j;
+
+ // add word
+ l.push_back(s.substr(i,j-i));
+
+ // set up for next loop
+ i = j+1;
+ }
+}
+
+
+} // namespace boost
diff --git a/boost/boost/pfto.hpp b/boost/boost/pfto.hpp
new file mode 100644
index 00000000000..00ef1715b73
--- /dev/null
+++ b/boost/boost/pfto.hpp
@@ -0,0 +1,74 @@
+#ifndef BOOST_PFTO_HPP
+#define BOOST_PFTO_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// pfto.hpp: workarounds for compilers which have problems supporting
+// Partial Function Template Ordering (PFTO).
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+// PFTO version is used to specify the last argument of certain functions
+// Function it is used to support compilers that fail to support correct Partial
+// Template Ordering
+#include <boost/config.hpp>
+
+// some compilers can use an exta argument and use function overloading
+// to choose desired function. This extra argument is long in the default
+// function implementation and int for the rest. The function is called
+// with an int argument. This first attempts to match functions with an
+// int argument before the default one (with a long argument). This is
+// known to function with VC 6.0. On other compilers this fails (Borland)
+// or causes other problems (GCC). note: this
+
+#if defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
+ #define BOOST_PFTO long
+#else
+ #define BOOST_PFTO
+#endif
+
+// here's another approach. Rather than use a default function - make sure
+// there is no default at all by requiring that all function invocations
+// have a "wrapped" argument type. This solves a problem with VC 6.0
+// (and perhaps others) while implementing templated constructors.
+
+namespace boost {
+
+template<class T>
+struct pfto_wrapper {
+ const T & t;
+ operator const T & (){
+ return t;
+ }
+ pfto_wrapper (const T & rhs) : t(rhs) {}
+};
+
+template<class T>
+pfto_wrapper<T> make_pfto_wrapper(const T & t, BOOST_PFTO int){
+ return pfto_wrapper<T>(t);
+}
+
+template<class T>
+pfto_wrapper<T> make_pfto_wrapper(const pfto_wrapper<T> & t, int){
+ return t;
+}
+
+} // namespace boost
+
+#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+ #define BOOST_PFTO_WRAPPER(T) boost::pfto_wrapper<T>
+ #define BOOST_MAKE_PFTO_WRAPPER(t) boost::make_pfto_wrapper(t, 0)
+#else
+ #define BOOST_PFTO_WRAPPER(T) T
+ #define BOOST_MAKE_PFTO_WRAPPER(t) t
+#endif
+
+#endif // BOOST_PFTO_HPP
diff --git a/boost/boost/pointee.hpp b/boost/boost/pointee.hpp
new file mode 100644
index 00000000000..9794b8e7dbe
--- /dev/null
+++ b/boost/boost/pointee.hpp
@@ -0,0 +1,74 @@
+#ifndef POINTEE_DWA200415_HPP
+# define POINTEE_DWA200415_HPP
+
+//
+// Copyright David Abrahams 2004. Use, modification and distribution is
+// 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)
+//
+// typename pointee<P>::type provides the pointee type of P.
+//
+// For example, it is T for T* and X for shared_ptr<X>.
+//
+// http://www.boost.org/libs/iterator/doc/pointee.html
+//
+
+# include <boost/detail/is_incrementable.hpp>
+# include <boost/iterator/iterator_traits.hpp>
+# include <boost/type_traits/add_const.hpp>
+# include <boost/type_traits/remove_cv.hpp>
+# include <boost/mpl/if.hpp>
+# include <boost/mpl/eval_if.hpp>
+
+namespace boost {
+
+namespace detail
+{
+ template <class P>
+ struct smart_ptr_pointee
+ {
+ typedef typename P::element_type type;
+ };
+
+ template <class Iterator>
+ struct iterator_pointee
+ {
+ typedef typename iterator_traits<Iterator>::value_type value_type;
+
+ struct impl
+ {
+ template <class T>
+ static char test(T const&);
+
+ static char (& test(value_type&) )[2];
+
+ static Iterator& x;
+ };
+
+ BOOST_STATIC_CONSTANT(bool, is_constant = sizeof(impl::test(*impl::x)) == 1);
+
+ typedef typename mpl::if_c<
+# if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))
+ ::boost::detail::iterator_pointee<Iterator>::is_constant
+# else
+ is_constant
+# endif
+ , typename add_const<value_type>::type
+ , value_type
+ >::type type;
+ };
+}
+
+template <class P>
+struct pointee
+ : mpl::eval_if<
+ detail::is_incrementable<P>
+ , detail::iterator_pointee<P>
+ , detail::smart_ptr_pointee<P>
+ >
+{
+};
+
+} // namespace boost
+
+#endif // POINTEE_DWA200415_HPP
diff --git a/boost/boost/pointer_cast.hpp b/boost/boost/pointer_cast.hpp
new file mode 100644
index 00000000000..5a5bec0872a
--- /dev/null
+++ b/boost/boost/pointer_cast.hpp
@@ -0,0 +1,45 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztañaga 2005.
+// 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_POINTER_CAST_HPP
+#define BOOST_POINTER_CAST_HPP
+
+namespace boost {
+
+//static_pointer_cast overload for raw pointers
+template<class T, class U>
+inline T* static_pointer_cast(U *ptr)
+{
+ return static_cast<T*>(ptr);
+}
+
+//dynamic_pointer_cast overload for raw pointers
+template<class T, class U>
+inline T* dynamic_pointer_cast(U *ptr)
+{
+ return dynamic_cast<T*>(ptr);
+}
+
+//const_pointer_cast overload for raw pointers
+template<class T, class U>
+inline T* const_pointer_cast(U *ptr)
+{
+ return const_cast<T*>(ptr);
+}
+
+//reinterpret_pointer_cast overload for raw pointers
+template<class T, class U>
+inline T* reinterpret_pointer_cast(U *ptr)
+{
+ return reinterpret_cast<T*>(ptr);
+}
+
+} // namespace boost
+
+#endif //BOOST_POINTER_CAST_HPP
diff --git a/boost/boost/pointer_to_other.hpp b/boost/boost/pointer_to_other.hpp
new file mode 100644
index 00000000000..1cf26276a2a
--- /dev/null
+++ b/boost/boost/pointer_to_other.hpp
@@ -0,0 +1,55 @@
+#ifndef BOOST_POINTER_TO_OTHER_HPP_INCLUDED
+#define BOOST_POINTER_TO_OTHER_HPP_INCLUDED
+
+//
+// pointer_to_other.hpp
+//
+// (C) Copyright Ion Gaztañaga 2005.
+// Copyright (c) 2005 Peter Dimov.
+//
+// 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/smart_ptr/pointer_to_other.html
+//
+
+namespace boost
+{
+
+// Defines the same pointer type (raw or smart) to another pointee type
+
+template<class T, class U>
+struct pointer_to_other;
+
+template<class T, class U,
+ template<class> class Sp>
+struct pointer_to_other< Sp<T>, U >
+{
+ typedef Sp<U> type;
+};
+
+template<class T, class T2, class U,
+ template<class, class> class Sp>
+struct pointer_to_other< Sp<T, T2>, U >
+{
+ typedef Sp<U, T2> type;
+};
+
+template<class T, class T2, class T3, class U,
+ template<class, class, class> class Sp>
+struct pointer_to_other< Sp<T, T2, T3>, U >
+{
+ typedef Sp<U, T2, T3> type;
+};
+
+template<class T, class U>
+struct pointer_to_other< T*, U >
+{
+ typedef U* type;
+};
+
+} // namespace boost
+
+#endif // #ifndef BOOST_POINTER_TO_OTHER_HPP_INCLUDED
diff --git a/boost/boost/pool/detail/ct_gcd_lcm.hpp b/boost/boost/pool/detail/ct_gcd_lcm.hpp
new file mode 100644
index 00000000000..a5f255b9189
--- /dev/null
+++ b/boost/boost/pool/detail/ct_gcd_lcm.hpp
@@ -0,0 +1,104 @@
+// Copyright (C) 2000 Stephen Cleary
+//
+// 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 updates, documentation, and revision history.
+
+#ifndef BOOST_POOL_CT_GCD_LCM_HPP
+#define BOOST_POOL_CT_GCD_LCM_HPP
+
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/ice.hpp>
+
+namespace boost {
+
+namespace details {
+namespace pool {
+
+// Compile-time calculation of greatest common divisor and least common multiple
+
+//
+// ct_gcd is a compile-time algorithm that calculates the greatest common
+// divisor of two unsigned integers, using Euclid's algorithm.
+//
+// assumes: A != 0 && B != 0
+//
+
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace details {
+template <unsigned A, unsigned B, bool Bis0>
+struct ct_gcd_helper;
+template <unsigned A, unsigned B>
+struct ct_gcd_helper<A, B, false>
+{
+ BOOST_STATIC_CONSTANT(unsigned, A_mod_B_ = A % B);
+ BOOST_STATIC_CONSTANT(unsigned, value =
+ (::boost::details::pool::details::ct_gcd_helper<
+ B, static_cast<unsigned>(A_mod_B_),
+ ::boost::type_traits::ice_eq<A_mod_B_, 0>::value
+ >::value) );
+};
+template <unsigned A, unsigned B>
+struct ct_gcd_helper<A, B, true>
+{
+ BOOST_STATIC_CONSTANT(unsigned, value = A);
+};
+} // namespace details
+
+template <unsigned A, unsigned B>
+struct ct_gcd
+{
+ BOOST_STATIC_ASSERT(A != 0 && B != 0);
+ BOOST_STATIC_CONSTANT(unsigned, value =
+ (::boost::details::pool::details::ct_gcd_helper<A, B, false>::value) );
+};
+
+#else
+
+// Thanks to Peter Dimov for providing this workaround!
+namespace details {
+template<unsigned A> struct ct_gcd2
+{
+ template<unsigned B>
+ struct helper
+ {
+ BOOST_STATIC_CONSTANT(unsigned, value = ct_gcd2<B>::helper<A % B>::value);
+ };
+ template<>
+ struct helper<0>
+ {
+ BOOST_STATIC_CONSTANT(unsigned, value = A);
+ };
+};
+} // namespace details
+
+template<unsigned A, unsigned B> struct ct_gcd
+{
+ BOOST_STATIC_ASSERT(A != 0 && B != 0);
+ enum { value = details::ct_gcd2<A>::helper<B>::value };
+};
+
+#endif
+
+//
+// ct_lcm is a compile-time algorithm that calculates the least common
+// multiple of two unsigned integers.
+//
+// assumes: A != 0 && B != 0
+//
+template <unsigned A, unsigned B>
+struct ct_lcm
+{
+ BOOST_STATIC_CONSTANT(unsigned, value =
+ (A / ::boost::details::pool::ct_gcd<A, B>::value * B) );
+};
+
+} // namespace pool
+} // namespace details
+
+} // namespace boost
+
+#endif
diff --git a/boost/boost/pool/detail/for.m4 b/boost/boost/pool/detail/for.m4
new file mode 100644
index 00000000000..f926a11d2af
--- /dev/null
+++ b/boost/boost/pool/detail/for.m4
@@ -0,0 +1,107 @@
+m4_dnl
+m4_dnl Copyright (C) 2000 Stephen Cleary
+m4_dnl
+m4_dnl Distributed under the Boost Software License, Version 1.0. (See accompany-
+m4_dnl ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+m4_dnl
+m4_dnl See http://www.boost.org for updates, documentation, and revision history.
+m4_dnl
+m4_dnl
+m4_dnl
+m4_dnl BOOST_M4_FOR: repeat a given text for a range of values
+m4_dnl $1 - variable to hold the current value.
+m4_dnl $2 - the starting value.
+m4_dnl $3 - the ending value (text is _not_ repeated for this value).
+m4_dnl $4 - the text to repeat.
+m4_dnl $5 - the delimeter text (optional).
+m4_dnl
+m4_dnl If the starting value is < ending value:
+m4_dnl Will repeat $4, binding $1 to the values in the range [$2, $3).
+m4_dnl Else (that is, starting value >= ending value):
+m4_dnl Will do nothing
+m4_dnl Repeats $5 in-between each occurrence of $4
+m4_dnl
+m4_dnl Logic:
+m4_dnl Set $1 to $2 and call BOOST_M4_FOR_LIST_HELPER:
+m4_dnl If $1 >= $3, do nothing
+m4_dnl Else
+m4_dnl output $4,
+m4_dnl set $1 to itself incremented,
+m4_dnl If $1 != $3, output $5,
+m4_dnl and use recursion
+m4_dnl
+m4_define(`BOOST_M4_FOR',
+ `m4_ifelse(m4_eval($# < 4 || $# > 5), 1,
+ `m4_errprint(m4___file__:m4___line__: `Boost m4 script: BOOST_M4_FOR: Wrong number of arguments ($#)')',
+ `m4_pushdef(`$1', `$2')BOOST_M4_FOR_HELPER($@)m4_popdef(`$1')')')m4_dnl
+m4_define(`BOOST_M4_FOR_HELPER',
+ `m4_ifelse(m4_eval($1 >= $3), 1, ,
+ `$4`'m4_define(`$1', m4_incr($1))m4_ifelse(m4_eval($1 != $3), 1, `$5')`'BOOST_M4_FOR_HELPER($@)')')m4_dnl
+m4_dnl
+m4_dnl Testing/Examples:
+m4_dnl
+m4_dnl The following line will output:
+m4_dnl "repeat.m4:42: Boost m4 script: BOOST_M4_FOR: Wrong number of arguments (3)"
+m4_dnl BOOST_M4_FOR(i, 1, 3)
+m4_dnl
+m4_dnl The following line will output:
+m4_dnl "repeat.m4:46: Boost m4 script: BOOST_M4_FOR: Wrong number of arguments (6)"
+m4_dnl BOOST_M4_FOR(i, 1, 3, i, ` ', 13)
+m4_dnl
+m4_dnl The following line will output (nothing):
+m4_dnl ""
+m4_dnl BOOST_M4_FOR(i, 7, 0, i )
+m4_dnl
+m4_dnl The following line will output (nothing):
+m4_dnl ""
+m4_dnl BOOST_M4_FOR(i, 0, 0, i )
+m4_dnl
+m4_dnl The following line will output:
+m4_dnl "0 1 2 3 4 5 6 "
+m4_dnl BOOST_M4_FOR(i, 0, 7, i )
+m4_dnl
+m4_dnl The following line will output:
+m4_dnl "-13 -12 -11 "
+m4_dnl BOOST_M4_FOR(i, -13, -10, i )
+m4_dnl
+m4_dnl The following two lines will output:
+m4_dnl "(0, 0) (0, 1) (0, 2) (0, 3) "
+m4_dnl "(1, 0) (1, 1) (1, 2) (1, 3) "
+m4_dnl "(2, 0) (2, 1) (2, 2) (2, 3) "
+m4_dnl "(3, 0) (3, 1) (3, 2) (3, 3) "
+m4_dnl "(4, 0) (4, 1) (4, 2) (4, 3) "
+m4_dnl "(5, 0) (5, 1) (5, 2) (5, 3) "
+m4_dnl "(6, 0) (6, 1) (6, 2) (6, 3) "
+m4_dnl "(7, 0) (7, 1) (7, 2) (7, 3) "
+m4_dnl ""
+m4_dnl BOOST_M4_FOR(i, 0, 8, BOOST_M4_FOR(j, 0, 4, (i, j) )
+m4_dnl )
+m4_dnl
+m4_dnl The following line will output (nothing):
+m4_dnl ""
+m4_dnl BOOST_M4_FOR(i, 7, 0, i, |)
+m4_dnl
+m4_dnl The following line will output (nothing):
+m4_dnl ""
+m4_dnl BOOST_M4_FOR(i, 0, 0, i, |)
+m4_dnl
+m4_dnl The following line will output:
+m4_dnl "0|1|2|3|4|5|6"
+m4_dnl BOOST_M4_FOR(i, 0, 7, i, |)
+m4_dnl
+m4_dnl The following line will output:
+m4_dnl "-13, -12, -11"
+m4_dnl BOOST_M4_FOR(i, -13, -10, i, `, ')
+m4_dnl
+m4_dnl The following two lines will output:
+m4_dnl "[(0, 0), (0, 1), (0, 2), (0, 3)],"
+m4_dnl "[(1, 0), (1, 1), (1, 2), (1, 3)],"
+m4_dnl "[(2, 0), (2, 1), (2, 2), (2, 3)],"
+m4_dnl "[(3, 0), (3, 1), (3, 2), (3, 3)],"
+m4_dnl "[(4, 0), (4, 1), (4, 2), (4, 3)],"
+m4_dnl "[(5, 0), (5, 1), (5, 2), (5, 3)],"
+m4_dnl "[(6, 0), (6, 1), (6, 2), (6, 3)],"
+m4_dnl "[(7, 0), (7, 1), (7, 2), (7, 3)]"
+m4_dnl BOOST_M4_FOR(i, 0, 8, `[BOOST_M4_FOR(j, 0, 4, (i, j), `, ')]', `,
+m4_dnl ')
+m4_dnl \ No newline at end of file
diff --git a/boost/boost/pool/detail/gcd_lcm.hpp b/boost/boost/pool/detail/gcd_lcm.hpp
new file mode 100644
index 00000000000..4c6495329f9
--- /dev/null
+++ b/boost/boost/pool/detail/gcd_lcm.hpp
@@ -0,0 +1,58 @@
+// Copyright (C) 2000 Stephen Cleary
+//
+// 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 updates, documentation, and revision history.
+
+#ifndef BOOST_POOL_GCD_LCM_HPP
+#define BOOST_POOL_GCD_LCM_HPP
+
+namespace boost {
+
+namespace details {
+namespace pool {
+
+// Greatest common divisor and least common multiple
+
+//
+// gcd is an algorithm that calculates the greatest common divisor of two
+// integers, using Euclid's algorithm.
+//
+// Pre: A > 0 && B > 0
+// Recommended: A > B
+template <typename Integer>
+Integer gcd(Integer A, Integer B)
+{
+ do
+ {
+ const Integer tmp(B);
+ B = A % B;
+ A = tmp;
+ } while (B != 0);
+
+ return A;
+}
+
+//
+// lcm is an algorithm that calculates the least common multiple of two
+// integers.
+//
+// Pre: A > 0 && B > 0
+// Recommended: A > B
+template <typename Integer>
+Integer lcm(const Integer & A, const Integer & B)
+{
+ Integer ret = A;
+ ret /= gcd(A, B);
+ ret *= B;
+ return ret;
+}
+
+} // namespace pool
+} // namespace details
+
+} // namespace boost
+
+#endif
diff --git a/boost/boost/pool/detail/guard.hpp b/boost/boost/pool/detail/guard.hpp
new file mode 100644
index 00000000000..27f5f73b884
--- /dev/null
+++ b/boost/boost/pool/detail/guard.hpp
@@ -0,0 +1,40 @@
+// Copyright (C) 2000 Stephen Cleary
+//
+// 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 updates, documentation, and revision history.
+
+#ifndef BOOST_POOL_GUARD_HPP
+#define BOOST_POOL_GUARD_HPP
+
+// Extremely Light-Weight guard glass
+
+namespace boost {
+
+namespace details {
+namespace pool {
+
+template <typename Mutex>
+class guard
+{
+ private:
+ Mutex & mtx;
+
+ guard(const guard &);
+ void operator=(const guard &);
+
+ public:
+ explicit guard(Mutex & nmtx)
+ :mtx(nmtx) { mtx.lock(); }
+
+ ~guard() { mtx.unlock(); }
+};
+
+} // namespace pool
+} // namespace details
+
+} // namespace boost
+
+#endif
diff --git a/boost/boost/pool/detail/mutex.hpp b/boost/boost/pool/detail/mutex.hpp
new file mode 100644
index 00000000000..a6785cf87f8
--- /dev/null
+++ b/boost/boost/pool/detail/mutex.hpp
@@ -0,0 +1,145 @@
+// Copyright (C) 2000 Stephen Cleary
+//
+// 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 updates, documentation, and revision history.
+
+#ifndef BOOST_POOL_MUTEX_HPP
+#define BOOST_POOL_MUTEX_HPP
+
+#include <boost/config.hpp> // for workarounds
+
+// Extremely Light-Weight wrapper classes for OS thread synchronization
+
+// Configuration: for now, we just choose between pthread or Win32 mutexes or none
+
+#define BOOST_MUTEX_HELPER_NONE 0
+#define BOOST_MUTEX_HELPER_WIN32 1
+#define BOOST_MUTEX_HELPER_PTHREAD 2
+
+#if !defined(BOOST_HAS_THREADS) && !defined(BOOST_NO_MT)
+# define BOOST_NO_MT
+#endif
+
+#ifdef BOOST_NO_MT
+ // No multithreading -> make locks into no-ops
+ #define BOOST_MUTEX_HELPER BOOST_MUTEX_HELPER_NONE
+#else
+ #ifdef BOOST_WINDOWS
+ #define BOOST_MUTEX_HELPER BOOST_MUTEX_HELPER_WIN32
+ #else
+ #include <unistd.h>
+ #ifdef _POSIX_THREADS
+ #define BOOST_MUTEX_HELPER BOOST_MUTEX_HELPER_PTHREAD
+ #endif
+ #endif
+#endif
+
+#ifndef BOOST_MUTEX_HELPER
+ #error Unable to determine platform mutex type; define BOOST_NO_MT to assume single-threaded
+#endif
+
+#ifndef BOOST_NO_MT
+# ifdef BOOST_WINDOWS
+# include <windows.h>
+# endif
+# ifdef _POSIX_THREADS
+# include <pthread.h>
+# endif
+#endif
+
+namespace boost {
+
+namespace details {
+namespace pool {
+
+#ifndef BOOST_NO_MT
+
+#ifdef BOOST_WINDOWS
+
+class win32_mutex
+{
+ private:
+ CRITICAL_SECTION mtx;
+
+ win32_mutex(const win32_mutex &);
+ void operator=(const win32_mutex &);
+
+ public:
+ win32_mutex()
+ { InitializeCriticalSection(&mtx); }
+
+ ~win32_mutex()
+ { DeleteCriticalSection(&mtx); }
+
+ void lock()
+ { EnterCriticalSection(&mtx); }
+
+ void unlock()
+ { LeaveCriticalSection(&mtx); }
+};
+
+#endif // defined(BOOST_WINDOWS)
+
+#ifdef _POSIX_THREADS
+
+class pthread_mutex
+{
+ private:
+ pthread_mutex_t mtx;
+
+ pthread_mutex(const pthread_mutex &);
+ void operator=(const pthread_mutex &);
+
+ public:
+ pthread_mutex()
+ { pthread_mutex_init(&mtx, 0); }
+
+ ~pthread_mutex()
+ { pthread_mutex_destroy(&mtx); }
+
+ void lock()
+ { pthread_mutex_lock(&mtx); }
+
+ void unlock()
+ { pthread_mutex_unlock(&mtx); }
+};
+
+#endif // defined(_POSIX_THREADS)
+
+#endif // !defined(BOOST_NO_MT)
+
+class null_mutex
+{
+ private:
+ null_mutex(const null_mutex &);
+ void operator=(const null_mutex &);
+
+ public:
+ null_mutex() { }
+
+ static void lock() { }
+ static void unlock() { }
+};
+
+#if BOOST_MUTEX_HELPER == BOOST_MUTEX_HELPER_NONE
+ typedef null_mutex default_mutex;
+#elif BOOST_MUTEX_HELPER == BOOST_MUTEX_HELPER_WIN32
+ typedef win32_mutex default_mutex;
+#elif BOOST_MUTEX_HELPER == BOOST_MUTEX_HELPER_PTHREAD
+ typedef pthread_mutex default_mutex;
+#endif
+
+} // namespace pool
+} // namespace details
+
+} // namespace boost
+
+#undef BOOST_MUTEX_HELPER_WIN32
+#undef BOOST_MUTEX_HELPER_PTHREAD
+#undef BOOST_MUTEX_HELPER_NONE
+#undef BOOST_MUTEX_HELPER
+
+#endif
diff --git a/boost/boost/pool/detail/pool_construct.bat b/boost/boost/pool/detail/pool_construct.bat
new file mode 100644
index 00000000000..2ae365f6ec6
--- /dev/null
+++ b/boost/boost/pool/detail/pool_construct.bat
@@ -0,0 +1,24 @@
+@echo off
+rem
+rem Copyright (C) 2000, 2001 Stephen Cleary
+rem
+rem Distributed under the Boost Software License, Version 1.0. (See accompany-
+rem ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+
+rem Check for Windows NT
+if %OS%==Windows_NT goto NT
+
+rem Not NT - run m4 as normal, then exit
+m4 -P -E -DNumberOfArguments=%1 pool_construct.m4 > pool_construct.inc
+goto end
+
+rem DJGPP programs (including m4) running on Windows/NT do NOT support long
+rem file names (see the DJGPP v2 FAQ, question 8.1)
+rem Note that the output doesn't have to be a short name because it's an
+rem argument to the command shell, not m4.
+:NT
+m4 -P -E -DNumberOfArguments=%1 < pool_construct.m4 > pool_construct.inc
+
+:end \ No newline at end of file
diff --git a/boost/boost/pool/detail/pool_construct.inc b/boost/boost/pool/detail/pool_construct.inc
new file mode 100644
index 00000000000..4cabcea6cf8
--- /dev/null
+++ b/boost/boost/pool/detail/pool_construct.inc
@@ -0,0 +1,853 @@
+// Copyright (C) 2000 Stephen Cleary
+//
+// 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 updates, documentation, and revision history.
+
+// This file was AUTOMATICALLY GENERATED from "pool_c~1.m4"
+// Do NOT include directly!
+// Do NOT edit!
+
+template <typename T0>
+element_type * construct(T0 & a0)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0>
+element_type * construct(const T0 & a0)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0>
+element_type * construct(volatile T0 & a0)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0>
+element_type * construct(const volatile T0 & a0)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1>
+element_type * construct(T0 & a0, T1 & a1)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1>
+element_type * construct(const T0 & a0, T1 & a1)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1>
+element_type * construct(volatile T0 & a0, T1 & a1)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1>
+element_type * construct(const volatile T0 & a0, T1 & a1)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1>
+element_type * construct(T0 & a0, const T1 & a1)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1>
+element_type * construct(const T0 & a0, const T1 & a1)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1>
+element_type * construct(volatile T0 & a0, const T1 & a1)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1>
+element_type * construct(const volatile T0 & a0, const T1 & a1)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1>
+element_type * construct(T0 & a0, volatile T1 & a1)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1>
+element_type * construct(const T0 & a0, volatile T1 & a1)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1>
+element_type * construct(volatile T0 & a0, volatile T1 & a1)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1>
+element_type * construct(const volatile T0 & a0, volatile T1 & a1)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1>
+element_type * construct(T0 & a0, const volatile T1 & a1)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1>
+element_type * construct(const T0 & a0, const volatile T1 & a1)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1>
+element_type * construct(volatile T0 & a0, const volatile T1 & a1)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1>
+element_type * construct(const volatile T0 & a0, const volatile T1 & a1)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(T0 & a0, T1 & a1, T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(const T0 & a0, T1 & a1, T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(volatile T0 & a0, T1 & a1, T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(const volatile T0 & a0, T1 & a1, T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(T0 & a0, const T1 & a1, T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(const T0 & a0, const T1 & a1, T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(volatile T0 & a0, const T1 & a1, T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(const volatile T0 & a0, const T1 & a1, T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(T0 & a0, volatile T1 & a1, T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(const T0 & a0, volatile T1 & a1, T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(volatile T0 & a0, volatile T1 & a1, T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(const volatile T0 & a0, volatile T1 & a1, T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(T0 & a0, const volatile T1 & a1, T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(const T0 & a0, const volatile T1 & a1, T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(volatile T0 & a0, const volatile T1 & a1, T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(const volatile T0 & a0, const volatile T1 & a1, T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(T0 & a0, T1 & a1, const T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(const T0 & a0, T1 & a1, const T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(volatile T0 & a0, T1 & a1, const T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(const volatile T0 & a0, T1 & a1, const T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(T0 & a0, const T1 & a1, const T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(const T0 & a0, const T1 & a1, const T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(volatile T0 & a0, const T1 & a1, const T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(const volatile T0 & a0, const T1 & a1, const T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(T0 & a0, volatile T1 & a1, const T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(const T0 & a0, volatile T1 & a1, const T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(volatile T0 & a0, volatile T1 & a1, const T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(const volatile T0 & a0, volatile T1 & a1, const T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(T0 & a0, const volatile T1 & a1, const T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(const T0 & a0, const volatile T1 & a1, const T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(volatile T0 & a0, const volatile T1 & a1, const T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(const volatile T0 & a0, const volatile T1 & a1, const T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(T0 & a0, T1 & a1, volatile T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(const T0 & a0, T1 & a1, volatile T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(volatile T0 & a0, T1 & a1, volatile T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(const volatile T0 & a0, T1 & a1, volatile T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(T0 & a0, const T1 & a1, volatile T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(const T0 & a0, const T1 & a1, volatile T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(volatile T0 & a0, const T1 & a1, volatile T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(const volatile T0 & a0, const T1 & a1, volatile T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(T0 & a0, volatile T1 & a1, volatile T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(const T0 & a0, volatile T1 & a1, volatile T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(volatile T0 & a0, volatile T1 & a1, volatile T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(const volatile T0 & a0, volatile T1 & a1, volatile T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(T0 & a0, const volatile T1 & a1, volatile T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(const T0 & a0, const volatile T1 & a1, volatile T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(volatile T0 & a0, const volatile T1 & a1, volatile T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(const volatile T0 & a0, const volatile T1 & a1, volatile T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(T0 & a0, T1 & a1, const volatile T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(const T0 & a0, T1 & a1, const volatile T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(volatile T0 & a0, T1 & a1, const volatile T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(const volatile T0 & a0, T1 & a1, const volatile T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(T0 & a0, const T1 & a1, const volatile T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(const T0 & a0, const T1 & a1, const volatile T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(volatile T0 & a0, const T1 & a1, const volatile T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(const volatile T0 & a0, const T1 & a1, const volatile T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(T0 & a0, volatile T1 & a1, const volatile T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(const T0 & a0, volatile T1 & a1, const volatile T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(volatile T0 & a0, volatile T1 & a1, const volatile T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(const volatile T0 & a0, volatile T1 & a1, const volatile T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(T0 & a0, const volatile T1 & a1, const volatile T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(const T0 & a0, const volatile T1 & a1, const volatile T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(volatile T0 & a0, const volatile T1 & a1, const volatile T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(const volatile T0 & a0, const volatile T1 & a1, const volatile T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+
diff --git a/boost/boost/pool/detail/pool_construct.m4 b/boost/boost/pool/detail/pool_construct.m4
new file mode 100644
index 00000000000..91671b4ab9a
--- /dev/null
+++ b/boost/boost/pool/detail/pool_construct.m4
@@ -0,0 +1,84 @@
+m4_dnl
+m4_dnl Copyright (C) 2000 Stephen Cleary
+m4_dnl
+m4_dnl Distributed under the Boost Software License, Version 1.0. (See accompany-
+m4_dnl ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+m4_dnl
+m4_dnl See http://www.boost.org for updates, documentation, and revision history.
+m4_dnl
+m4_dnl
+m4_dnl
+m4_dnl Avoid the use of any m4_* identifiers in this header file,
+m4_dnl as that may cause incompatibility problems with future
+m4_dnl versions of m4.
+m4_dnl
+m4_dnl This is a normal header file, except that lines starting
+m4_dnl with `m4_dnl' will be stripped, TBA_FOR
+m4_dnl macros will be replaced with repeated text, and text in
+m4_dnl single quotes (`...') will have their single quotes
+m4_dnl stripped.
+m4_dnl
+m4_dnl
+m4_dnl Check to make sure NumberOfArguments was defined. If it's not defined,
+m4_dnl default to 3
+m4_dnl
+m4_ifdef(`NumberOfArguments', , `m4_errprint(m4___file__:m4___line__`: NumberOfArguments is not defined; defaulting to 3
+')m4_define(`NumberOfArguments', 3)')m4_dnl
+m4_ifelse(NumberOfArguments, , `m4_errprint(m4___file__:m4___line__`: NumberOfArguments is defined to be empty; defaulting to 3
+')m4_define(`NumberOfArguments', 3)')m4_dnl
+m4_dnl
+m4_dnl Check to make sure NumberOfArguments >= 1. If it's not, then fatal error.
+m4_dnl
+m4_ifelse(m4_eval(NumberOfArguments < 1), 1, `m4_errprint(m4___file__:m4___line__`: NumberOfArguments ('NumberOfArguments`) is less than 1
+')m4_m4exit(1)')m4_dnl
+m4_dnl
+m4_dnl Include the BOOST_M4_FOR macro definition
+m4_dnl
+m4_include(`for.m4')`'m4_dnl
+m4_dnl
+m4_dnl Begin the generated file.
+m4_dnl
+// Copyright (C) 2000 Stephen Cleary
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org for updates, documentation, and revision history.
+
+m4_dnl These warnings apply to the file generated from this file.
+m4_dnl Of course, you may freely edit this file.
+// This file was AUTOMATICALLY GENERATED from "m4___file__"
+// Do NOT include directly!
+// Do NOT edit!
+
+m4_dnl
+m4_dnl First we define a simple 'cv_qual' macro which takes a number, either
+m4_dnl 0, 1, 2, or 3, and determines cv-qualification.
+m4_dnl
+m4_define(`cv_qual',
+`m4_ifelse($1, 0, `',
+`m4_ifelse($1, 1, `const ',
+`m4_ifelse($1, 2, `volatile ',
+`m4_ifelse($1, 3, `const volatile ',
+`m4_errprint(m4___file__:m4___line__: `Boost m4 script: cv-determiner: Not 0, 1, 2, or 3 (was '$1`)')'
+)')')')')m4_dnl
+m4_dnl
+m4_dnl Next we go through the actual loop. For each number of arguments from
+m4_dnl 1 to NumberOfArguments, we create a template function that takes that
+m4_dnl many template arguments, and also generate all cv-qualified permutations
+m4_dnl of that function.
+m4_dnl
+BOOST_M4_FOR(N, 1, NumberOfArguments + 1,
+`BOOST_M4_FOR(cv, 0, m4_eval(4 ** N),
+ `template <BOOST_M4_FOR(i, 0, N, `typename T`'i', `, ')>
+element_type * construct(BOOST_M4_FOR(i, 0, N,
+ `cv_qual(m4_eval((cv >> (i * 2)) % 4))T`'i & a`'i', `, '))
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(BOOST_M4_FOR(i, 0, N, `a`'i', `, ')); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+')')
diff --git a/boost/boost/pool/detail/pool_construct.sh b/boost/boost/pool/detail/pool_construct.sh
new file mode 100644
index 00000000000..aa090356e72
--- /dev/null
+++ b/boost/boost/pool/detail/pool_construct.sh
@@ -0,0 +1,11 @@
+#!/bin/sh
+#
+# Copyright (C) 2000 Stephen Cleary
+#
+# Distributed under the Boost Software License, Version 1.0. (See accompany-
+# ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#
+# See http://www.boost.org for updates, documentation, and revision history.
+#
+
+m4 -P -E -DNumberOfArguments=$1 pool_construct.m4 > pool_construct.inc
diff --git a/boost/boost/pool/detail/pool_construct_simple.bat b/boost/boost/pool/detail/pool_construct_simple.bat
new file mode 100644
index 00000000000..23ac2a3c3f7
--- /dev/null
+++ b/boost/boost/pool/detail/pool_construct_simple.bat
@@ -0,0 +1,25 @@
+@echo off
+rem
+rem Copyright (C) 2001 Stephen Cleary
+rem
+rem Distributed under the Boost Software License, Version 1.0. (See accompany-
+rem ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+rem
+rem See http://www.boost.org for updates, documentation, and revision history.
+rem
+
+rem Check for Windows NT
+if %OS%==Windows_NT goto NT
+
+rem Not NT - run m4 as normal, then exit
+m4 -P -E -DNumberOfArguments=%1 pool_construct_simple.m4 > pool_construct_simple.inc
+goto end
+
+rem DJGPP programs (including m4) running on Windows/NT do NOT support long
+rem file names (see the DJGPP v2 FAQ, question 8.1)
+rem Note that the output doesn't have to be a short name because it's an
+rem argument to the command shell, not m4.
+:NT
+m4 -P -E -DNumberOfArguments=%1 < pool_construct_simple.m4 > pool_construct_simple.inc
+
+:end \ No newline at end of file
diff --git a/boost/boost/pool/detail/pool_construct_simple.inc b/boost/boost/pool/detail/pool_construct_simple.inc
new file mode 100644
index 00000000000..0760863c68c
--- /dev/null
+++ b/boost/boost/pool/detail/pool_construct_simple.inc
@@ -0,0 +1,43 @@
+// Copyright (C) 2000 Stephen Cleary
+//
+// 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 updates, documentation, and revision history.
+
+// This file was AUTOMATICALLY GENERATED from "stdin"
+// Do NOT include directly!
+// Do NOT edit!
+
+template <typename T0>
+element_type * construct(const T0 & a0)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1>
+element_type * construct(const T0 & a0, const T1 & a1)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+template <typename T0, typename T1, typename T2>
+element_type * construct(const T0 & a0, const T1 & a1, const T2 & a2)
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(a0, a1, a2); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+
diff --git a/boost/boost/pool/detail/pool_construct_simple.m4 b/boost/boost/pool/detail/pool_construct_simple.m4
new file mode 100644
index 00000000000..11a27e719cd
--- /dev/null
+++ b/boost/boost/pool/detail/pool_construct_simple.m4
@@ -0,0 +1,73 @@
+m4_dnl
+m4_dnl Copyright (C) 2001 Stephen Cleary
+m4_dnl
+m4_dnl Distributed under the Boost Software License, Version 1.0. (See accompany-
+m4_dnl ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+m4_dnl
+m4_dnl See http://www.boost.org for updates, documentation, and revision history.
+m4_dnl
+m4_dnl
+m4_dnl
+m4_dnl Avoid the use of any m4_* identifiers in this header file,
+m4_dnl as that may cause incompatibility problems with future
+m4_dnl versions of m4.
+m4_dnl
+m4_dnl This is a normal header file, except that lines starting
+m4_dnl with `m4_dnl' will be stripped, TBA_FOR
+m4_dnl macros will be replaced with repeated text, and text in
+m4_dnl single quotes (`...') will have their single quotes
+m4_dnl stripped.
+m4_dnl
+m4_dnl
+m4_dnl Check to make sure NumberOfArguments was defined. If it's not defined,
+m4_dnl default to 3
+m4_dnl
+m4_ifdef(`NumberOfArguments', , `m4_errprint(m4___file__:m4___line__`: NumberOfArguments is not defined; defaulting to 3
+')m4_define(`NumberOfArguments', 3)')m4_dnl
+m4_ifelse(NumberOfArguments, , `m4_errprint(m4___file__:m4___line__`: NumberOfArguments is defined to be empty; defaulting to 3
+')m4_define(`NumberOfArguments', 3)')m4_dnl
+m4_dnl
+m4_dnl Check to make sure NumberOfArguments >= 1. If it's not, then fatal error.
+m4_dnl
+m4_ifelse(m4_eval(NumberOfArguments < 1), 1, `m4_errprint(m4___file__:m4___line__`: NumberOfArguments ('NumberOfArguments`) is less than 1
+')m4_m4exit(1)')m4_dnl
+m4_dnl
+m4_dnl Include the BOOST_M4_FOR macro definition
+m4_dnl
+m4_include(`for.m4')`'m4_dnl
+m4_dnl
+m4_dnl Begin the generated file.
+m4_dnl
+// Copyright (C) 2000 Stephen Cleary
+//
+// This file can be redistributed and/or modified under the terms found
+// in "copyright.html"
+// This software and its documentation is provided "as is" without express or
+// implied warranty, and with no claim as to its suitability for any purpose.
+//
+// See http://www.boost.org for updates, documentation, and revision history.
+
+m4_dnl These warnings apply to the file generated from this file.
+m4_dnl Of course, you may freely edit this file.
+// This file was AUTOMATICALLY GENERATED from "m4___file__"
+// Do NOT include directly!
+// Do NOT edit!
+
+m4_dnl
+m4_dnl Here we go through the actual loop. For each number of arguments from
+m4_dnl 1 to NumberOfArguments, we create a template function that takes that
+m4_dnl many template arguments.
+m4_dnl
+BOOST_M4_FOR(N, 1, NumberOfArguments + 1,
+`template <BOOST_M4_FOR(i, 0, N, `typename T`'i', `, ')>
+element_type * construct(BOOST_M4_FOR(i, 0, N,
+ `const T`'i & a`'i', `, '))
+{
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(BOOST_M4_FOR(i, 0, N, `a`'i', `, ')); }
+ catch (...) { free(ret); throw; }
+ return ret;
+}
+')
diff --git a/boost/boost/pool/detail/pool_construct_simple.sh b/boost/boost/pool/detail/pool_construct_simple.sh
new file mode 100644
index 00000000000..413b5d71bff
--- /dev/null
+++ b/boost/boost/pool/detail/pool_construct_simple.sh
@@ -0,0 +1,11 @@
+#!/bin/sh
+#
+# Copyright (C) 2001 Stephen Cleary
+#
+# Distributed under the Boost Software License, Version 1.0. (See accompany-
+# ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#
+# See http://www.boost.org for updates, documentation, and revision history.
+#
+
+m4 -P -E -DNumberOfArguments=$1 pool_construct_simple.m4 > pool_construct_simple.inc
diff --git a/boost/boost/pool/detail/singleton.hpp b/boost/boost/pool/detail/singleton.hpp
new file mode 100644
index 00000000000..db7ca676bcf
--- /dev/null
+++ b/boost/boost/pool/detail/singleton.hpp
@@ -0,0 +1,107 @@
+// Copyright (C) 2000 Stephen Cleary
+//
+// 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 updates, documentation, and revision history.
+
+#ifndef BOOST_POOL_SINGLETON_HPP
+#define BOOST_POOL_SINGLETON_HPP
+
+// The following code might be put into some Boost.Config header in a later revision
+#ifdef __BORLANDC__
+# pragma option push -w-inl
+#endif
+
+//
+// The following helper classes are placeholders for a generic "singleton"
+// class. The classes below support usage of singletons, including use in
+// program startup/shutdown code, AS LONG AS there is only one thread
+// running before main() begins, and only one thread running after main()
+// exits.
+//
+// This class is also limited in that it can only provide singleton usage for
+// classes with default constructors.
+//
+
+// The design of this class is somewhat twisted, but can be followed by the
+// calling inheritance. Let us assume that there is some user code that
+// calls "singleton_default<T>::instance()". The following (convoluted)
+// sequence ensures that the same function will be called before main():
+// instance() contains a call to create_object.do_nothing()
+// Thus, object_creator is implicitly instantiated, and create_object
+// must exist.
+// Since create_object is a static member, its constructor must be
+// called before main().
+// The constructor contains a call to instance(), thus ensuring that
+// instance() will be called before main().
+// The first time instance() is called (i.e., before main()) is the
+// latest point in program execution where the object of type T
+// can be created.
+// Thus, any call to instance() will auto-magically result in a call to
+// instance() before main(), unless already present.
+// Furthermore, since the instance() function contains the object, instead
+// of the singleton_default class containing a static instance of the
+// object, that object is guaranteed to be constructed (at the latest) in
+// the first call to instance(). This permits calls to instance() from
+// static code, even if that code is called before the file-scope objects
+// in this file have been initialized.
+
+namespace boost {
+
+namespace details {
+namespace pool {
+
+// T must be: no-throw default constructible and no-throw destructible
+template <typename T>
+struct singleton_default
+{
+ private:
+ struct object_creator
+ {
+ // This constructor does nothing more than ensure that instance()
+ // is called before main() begins, thus creating the static
+ // T object before multithreading race issues can come up.
+ object_creator() { singleton_default<T>::instance(); }
+ inline void do_nothing() const { }
+ };
+ static object_creator create_object;
+
+ singleton_default();
+
+ public:
+ typedef T object_type;
+
+ // If, at any point (in user code), singleton_default<T>::instance()
+ // is called, then the following function is instantiated.
+ static object_type & instance()
+ {
+ // This is the object that we return a reference to.
+ // It is guaranteed to be created before main() begins because of
+ // the next line.
+ static object_type obj;
+
+ // The following line does nothing else than force the instantiation
+ // of singleton_default<T>::create_object, whose constructor is
+ // called before main() begins.
+ create_object.do_nothing();
+
+ return obj;
+ }
+};
+template <typename T>
+typename singleton_default<T>::object_creator
+singleton_default<T>::create_object;
+
+} // namespace pool
+} // namespace details
+
+} // namespace boost
+
+// The following code might be put into some Boost.Config header in a later revision
+#ifdef __BORLANDC__
+# pragma option pop
+#endif
+
+#endif
diff --git a/boost/boost/pool/object_pool.hpp b/boost/boost/pool/object_pool.hpp
new file mode 100644
index 00000000000..4beaf351503
--- /dev/null
+++ b/boost/boost/pool/object_pool.hpp
@@ -0,0 +1,157 @@
+// Copyright (C) 2000, 2001 Stephen Cleary
+//
+// 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 updates, documentation, and revision history.
+
+#ifndef BOOST_OBJECT_POOL_HPP
+#define BOOST_OBJECT_POOL_HPP
+
+#include <boost/pool/poolfwd.hpp>
+
+// boost::pool
+#include <boost/pool/pool.hpp>
+
+// The following code will be put into Boost.Config in a later revision
+#if defined(BOOST_MSVC) || defined(__KCC)
+# define BOOST_NO_TEMPLATE_CV_REF_OVERLOADS
+#endif
+
+// The following code might be put into some Boost.Config header in a later revision
+#ifdef __BORLANDC__
+# pragma option push -w-inl
+#endif
+
+// There are a few places in this file where the expression "this->m" is used.
+// This expression is used to force instantiation-time name lookup, which I am
+// informed is required for strict Standard compliance. It's only necessary
+// if "m" is a member of a base class that is dependent on a template
+// parameter.
+// Thanks to Jens Maurer for pointing this out!
+
+namespace boost {
+
+// T must have a non-throwing destructor
+template <typename T, typename UserAllocator>
+class object_pool: protected pool<UserAllocator>
+{
+ public:
+ typedef T element_type;
+ typedef UserAllocator user_allocator;
+ typedef typename pool<UserAllocator>::size_type size_type;
+ typedef typename pool<UserAllocator>::difference_type difference_type;
+
+ protected:
+ pool<UserAllocator> & store() { return *this; }
+ const pool<UserAllocator> & store() const { return *this; }
+
+ // for the sake of code readability :)
+ static void * & nextof(void * const ptr)
+ { return *(static_cast<void **>(ptr)); }
+
+ public:
+ // This constructor parameter is an extension!
+ explicit object_pool(const size_type next_size = 32)
+ :pool<UserAllocator>(sizeof(T), next_size) { }
+
+ ~object_pool();
+
+ // Returns 0 if out-of-memory
+ element_type * malloc()
+ { return static_cast<element_type *>(store().ordered_malloc()); }
+ void free(element_type * const chunk)
+ { store().ordered_free(chunk); }
+ bool is_from(element_type * const chunk) const
+ { return store().is_from(chunk); }
+
+ element_type * construct()
+ {
+ element_type * const ret = malloc();
+ if (ret == 0)
+ return ret;
+ try { new (ret) element_type(); }
+ catch (...) { free(ret); throw; }
+ return ret;
+ }
+
+ // Include automatically-generated file for family of template construct()
+ // functions
+#ifndef BOOST_NO_TEMPLATE_CV_REF_OVERLOADS
+# include <boost/pool/detail/pool_construct.inc>
+#else
+# include <boost/pool/detail/pool_construct_simple.inc>
+#endif
+
+ void destroy(element_type * const chunk)
+ {
+ chunk->~T();
+ free(chunk);
+ }
+
+ // These functions are extensions!
+ size_type get_next_size() const { return store().get_next_size(); }
+ void set_next_size(const size_type x) { store().set_next_size(x); }
+};
+
+template <typename T, typename UserAllocator>
+object_pool<T, UserAllocator>::~object_pool()
+{
+ // handle trivial case
+ if (!this->list.valid())
+ return;
+
+ details::PODptr<size_type> iter = this->list;
+ details::PODptr<size_type> next = iter;
+
+ // Start 'freed_iter' at beginning of free list
+ void * freed_iter = this->first;
+
+ const size_type partition_size = this->alloc_size();
+
+ do
+ {
+ // increment next
+ next = next.next();
+
+ // delete all contained objects that aren't freed
+
+ // Iterate 'i' through all chunks in the memory block
+ for (char * i = iter.begin(); i != iter.end(); i += partition_size)
+ {
+ // If this chunk is free
+ if (i == freed_iter)
+ {
+ // Increment freed_iter to point to next in free list
+ freed_iter = nextof(freed_iter);
+
+ // Continue searching chunks in the memory block
+ continue;
+ }
+
+ // This chunk is not free (allocated), so call its destructor
+ static_cast<T *>(static_cast<void *>(i))->~T();
+ // and continue searching chunks in the memory block
+ }
+
+ // free storage
+ UserAllocator::free(iter.begin());
+
+ // increment iter
+ iter = next;
+ } while (iter.valid());
+
+ // Make the block list empty so that the inherited destructor doesn't try to
+ // free it again.
+ this->list.invalidate();
+}
+
+} // namespace boost
+
+// The following code might be put into some Boost.Config header in a later revision
+#ifdef __BORLANDC__
+# pragma option pop
+#endif
+
+#endif
diff --git a/boost/boost/pool/pool.hpp b/boost/boost/pool/pool.hpp
new file mode 100644
index 00000000000..d68757bfd82
--- /dev/null
+++ b/boost/boost/pool/pool.hpp
@@ -0,0 +1,580 @@
+// Copyright (C) 2000, 2001 Stephen Cleary
+//
+// 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 updates, documentation, and revision history.
+
+#ifndef BOOST_POOL_HPP
+#define BOOST_POOL_HPP
+
+#include <boost/config.hpp> // for workarounds
+
+// std::less, std::less_equal, std::greater
+#include <functional>
+// new[], delete[], std::nothrow
+#include <new>
+// std::size_t, std::ptrdiff_t
+#include <cstddef>
+// std::malloc, std::free
+#include <cstdlib>
+// std::invalid_argument
+#include <exception>
+// std::max
+#include <algorithm>
+
+#include <boost/pool/poolfwd.hpp>
+
+// boost::details::pool::ct_lcm
+#include <boost/pool/detail/ct_gcd_lcm.hpp>
+// boost::details::pool::lcm
+#include <boost/pool/detail/gcd_lcm.hpp>
+// boost::simple_segregated_storage
+#include <boost/pool/simple_segregated_storage.hpp>
+
+#ifdef BOOST_NO_STDC_NAMESPACE
+ namespace std { using ::malloc; using ::free; }
+#endif
+
+// There are a few places in this file where the expression "this->m" is used.
+// This expression is used to force instantiation-time name lookup, which I am
+// informed is required for strict Standard compliance. It's only necessary
+// if "m" is a member of a base class that is dependent on a template
+// parameter.
+// Thanks to Jens Maurer for pointing this out!
+
+namespace boost {
+
+struct default_user_allocator_new_delete
+{
+ typedef std::size_t size_type;
+ typedef std::ptrdiff_t difference_type;
+
+ static char * malloc(const size_type bytes)
+ { return new (std::nothrow) char[bytes]; }
+ static void free(char * const block)
+ { delete [] block; }
+};
+
+struct default_user_allocator_malloc_free
+{
+ typedef std::size_t size_type;
+ typedef std::ptrdiff_t difference_type;
+
+ static char * malloc(const size_type bytes)
+ { return reinterpret_cast<char *>(std::malloc(bytes)); }
+ static void free(char * const block)
+ { std::free(block); }
+};
+
+namespace details {
+
+// PODptr is a class that pretends to be a "pointer" to different class types
+// that don't really exist. It provides member functions to access the "data"
+// of the "object" it points to. Since these "class" types are of variable
+// size, and contains some information at the *end* of its memory (for
+// alignment reasons), PODptr must contain the size of this "class" as well as
+// the pointer to this "object".
+template <typename SizeType>
+class PODptr
+{
+ public:
+ typedef SizeType size_type;
+
+ private:
+ char * ptr;
+ size_type sz;
+
+ char * ptr_next_size() const
+ { return (ptr + sz - sizeof(size_type)); }
+ char * ptr_next_ptr() const
+ {
+ return (ptr_next_size() -
+ pool::ct_lcm<sizeof(size_type), sizeof(void *)>::value);
+ }
+
+ public:
+ PODptr(char * const nptr, const size_type nsize)
+ :ptr(nptr), sz(nsize) { }
+ PODptr()
+ :ptr(0), sz(0) { }
+
+ bool valid() const { return (begin() != 0); }
+ void invalidate() { begin() = 0; }
+ char * & begin() { return ptr; }
+ char * begin() const { return ptr; }
+ char * end() const { return ptr_next_ptr(); }
+ size_type total_size() const { return sz; }
+ size_type element_size() const
+ {
+ return (sz - sizeof(size_type) -
+ pool::ct_lcm<sizeof(size_type), sizeof(void *)>::value);
+ }
+
+ size_type & next_size() const
+ { return *(reinterpret_cast<size_type *>(ptr_next_size())); }
+ char * & next_ptr() const
+ { return *(reinterpret_cast<char **>(ptr_next_ptr())); }
+
+ PODptr next() const
+ { return PODptr<size_type>(next_ptr(), next_size()); }
+ void next(const PODptr & arg) const
+ {
+ next_ptr() = arg.begin();
+ next_size() = arg.total_size();
+ }
+};
+
+} // namespace details
+
+template <typename UserAllocator>
+class pool: protected simple_segregated_storage<
+ typename UserAllocator::size_type>
+{
+ public:
+ typedef UserAllocator user_allocator;
+ typedef typename UserAllocator::size_type size_type;
+ typedef typename UserAllocator::difference_type difference_type;
+
+ private:
+ BOOST_STATIC_CONSTANT(unsigned, min_alloc_size =
+ (::boost::details::pool::ct_lcm<sizeof(void *), sizeof(size_type)>::value) );
+
+ // Returns 0 if out-of-memory
+ // Called if malloc/ordered_malloc needs to resize the free list
+ void * malloc_need_resize();
+ void * ordered_malloc_need_resize();
+
+ protected:
+ details::PODptr<size_type> list;
+
+ simple_segregated_storage<size_type> & store() { return *this; }
+ const simple_segregated_storage<size_type> & store() const { return *this; }
+ const size_type requested_size;
+ size_type next_size;
+
+ // finds which POD in the list 'chunk' was allocated from
+ details::PODptr<size_type> find_POD(void * const chunk) const;
+
+ // is_from() tests a chunk to determine if it belongs in a block
+ static bool is_from(void * const chunk, char * const i,
+ const size_type sizeof_i)
+ {
+ // We use std::less_equal and std::less to test 'chunk'
+ // against the array bounds because standard operators
+ // may return unspecified results.
+ // This is to ensure portability. The operators < <= > >= are only
+ // defined for pointers to objects that are 1) in the same array, or
+ // 2) subobjects of the same object [5.9/2].
+ // The functor objects guarantee a total order for any pointer [20.3.3/8]
+//WAS:
+// return (std::less_equal<void *>()(static_cast<void *>(i), chunk)
+// && std::less<void *>()(chunk,
+// static_cast<void *>(i + sizeof_i)));
+ std::less_equal<void *> lt_eq;
+ std::less<void *> lt;
+ return (lt_eq(i, chunk) && lt(chunk, i + sizeof_i));
+ }
+
+ size_type alloc_size() const
+ {
+ const unsigned min_size = min_alloc_size;
+ return details::pool::lcm<size_type>(requested_size, min_size);
+ }
+
+ // for the sake of code readability :)
+ static void * & nextof(void * const ptr)
+ { return *(static_cast<void **>(ptr)); }
+
+ public:
+ // The second parameter here is an extension!
+ // pre: npartition_size != 0 && nnext_size != 0
+ explicit pool(const size_type nrequested_size,
+ const size_type nnext_size = 32)
+ :list(0, 0), requested_size(nrequested_size), next_size(nnext_size)
+ { }
+
+ ~pool() { purge_memory(); }
+
+ // Releases memory blocks that don't have chunks allocated
+ // pre: lists are ordered
+ // Returns true if memory was actually deallocated
+ bool release_memory();
+
+ // Releases *all* memory blocks, even if chunks are still allocated
+ // Returns true if memory was actually deallocated
+ bool purge_memory();
+
+ // These functions are extensions!
+ size_type get_next_size() const { return next_size; }
+ void set_next_size(const size_type nnext_size) { next_size = nnext_size; }
+
+ // Both malloc and ordered_malloc do a quick inlined check first for any
+ // free chunks. Only if we need to get another memory block do we call
+ // the non-inlined *_need_resize() functions.
+ // Returns 0 if out-of-memory
+ void * malloc()
+ {
+ // Look for a non-empty storage
+ if (!store().empty())
+ return store().malloc();
+ return malloc_need_resize();
+ }
+
+ void * ordered_malloc()
+ {
+ // Look for a non-empty storage
+ if (!store().empty())
+ return store().malloc();
+ return ordered_malloc_need_resize();
+ }
+
+ // Returns 0 if out-of-memory
+ // Allocate a contiguous section of n chunks
+ void * ordered_malloc(size_type n);
+
+ // pre: 'chunk' must have been previously
+ // returned by *this.malloc().
+ void free(void * const chunk)
+ { store().free(chunk); }
+
+ // pre: 'chunk' must have been previously
+ // returned by *this.malloc().
+ void ordered_free(void * const chunk)
+ { store().ordered_free(chunk); }
+
+ // pre: 'chunk' must have been previously
+ // returned by *this.malloc(n).
+ void free(void * const chunks, const size_type n)
+ {
+ const size_type partition_size = alloc_size();
+ const size_type total_req_size = n * requested_size;
+ const size_type num_chunks = total_req_size / partition_size +
+ ((total_req_size % partition_size) ? true : false);
+
+ store().free_n(chunks, num_chunks, partition_size);
+ }
+
+ // pre: 'chunk' must have been previously
+ // returned by *this.malloc(n).
+ void ordered_free(void * const chunks, const size_type n)
+ {
+ const size_type partition_size = alloc_size();
+ const size_type total_req_size = n * requested_size;
+ const size_type num_chunks = total_req_size / partition_size +
+ ((total_req_size % partition_size) ? true : false);
+
+ store().ordered_free_n(chunks, num_chunks, partition_size);
+ }
+
+ // is_from() tests a chunk to determine if it was allocated from *this
+ bool is_from(void * const chunk) const
+ {
+ return (find_POD(chunk).valid());
+ }
+};
+
+template <typename UserAllocator>
+bool pool<UserAllocator>::release_memory()
+{
+ // This is the return value: it will be set to true when we actually call
+ // UserAllocator::free(..)
+ bool ret = false;
+
+ // This is a current & previous iterator pair over the memory block list
+ details::PODptr<size_type> ptr = list;
+ details::PODptr<size_type> prev;
+
+ // This is a current & previous iterator pair over the free memory chunk list
+ // Note that "prev_free" in this case does NOT point to the previous memory
+ // chunk in the free list, but rather the last free memory chunk before the
+ // current block.
+ void * free = this->first;
+ void * prev_free = 0;
+
+ const size_type partition_size = alloc_size();
+
+ // Search through all the all the allocated memory blocks
+ while (ptr.valid())
+ {
+ // At this point:
+ // ptr points to a valid memory block
+ // free points to either:
+ // 0 if there are no more free chunks
+ // the first free chunk in this or some next memory block
+ // prev_free points to either:
+ // the last free chunk in some previous memory block
+ // 0 if there is no such free chunk
+ // prev is either:
+ // the PODptr whose next() is ptr
+ // !valid() if there is no such PODptr
+
+ // If there are no more free memory chunks, then every remaining
+ // block is allocated out to its fullest capacity, and we can't
+ // release any more memory
+ if (free == 0)
+ return ret;
+
+ // We have to check all the chunks. If they are *all* free (i.e., present
+ // in the free list), then we can free the block.
+ bool all_chunks_free = true;
+
+ // Iterate 'i' through all chunks in the memory block
+ // if free starts in the memory block, be careful to keep it there
+ void * saved_free = free;
+ for (char * i = ptr.begin(); i != ptr.end(); i += partition_size)
+ {
+ // If this chunk is not free
+ if (i != free)
+ {
+ // We won't be able to free this block
+ all_chunks_free = false;
+
+ // free might have travelled outside ptr
+ free = saved_free;
+ // Abort searching the chunks; we won't be able to free this
+ // block because a chunk is not free.
+ break;
+ }
+
+ // We do not increment prev_free because we are in the same block
+ free = nextof(free);
+ }
+
+ // post: if the memory block has any chunks, free points to one of them
+ // otherwise, our assertions above are still valid
+
+ const details::PODptr<size_type> next = ptr.next();
+
+ if (!all_chunks_free)
+ {
+ if (is_from(free, ptr.begin(), ptr.element_size()))
+ {
+ std::less<void *> lt;
+ void * const end = ptr.end();
+ do
+ {
+ prev_free = free;
+ free = nextof(free);
+ } while (free && lt(free, end));
+ }
+ // This invariant is now restored:
+ // free points to the first free chunk in some next memory block, or
+ // 0 if there is no such chunk.
+ // prev_free points to the last free chunk in this memory block.
+
+ // We are just about to advance ptr. Maintain the invariant:
+ // prev is the PODptr whose next() is ptr, or !valid()
+ // if there is no such PODptr
+ prev = ptr;
+ }
+ else
+ {
+ // All chunks from this block are free
+
+ // Remove block from list
+ if (prev.valid())
+ prev.next(next);
+ else
+ list = next;
+
+ // Remove all entries in the free list from this block
+ if (prev_free != 0)
+ nextof(prev_free) = free;
+ else
+ this->first = free;
+
+ // And release memory
+ UserAllocator::free(ptr.begin());
+ ret = true;
+ }
+
+ // Increment ptr
+ ptr = next;
+ }
+
+ return ret;
+}
+
+template <typename UserAllocator>
+bool pool<UserAllocator>::purge_memory()
+{
+ details::PODptr<size_type> iter = list;
+
+ if (!iter.valid())
+ return false;
+
+ do
+ {
+ // hold "next" pointer
+ const details::PODptr<size_type> next = iter.next();
+
+ // delete the storage
+ UserAllocator::free(iter.begin());
+
+ // increment iter
+ iter = next;
+ } while (iter.valid());
+
+ list.invalidate();
+ this->first = 0;
+
+ return true;
+}
+
+template <typename UserAllocator>
+void * pool<UserAllocator>::malloc_need_resize()
+{
+ // No memory in any of our storages; make a new storage,
+ const size_type partition_size = alloc_size();
+ const size_type POD_size = next_size * partition_size +
+ details::pool::ct_lcm<sizeof(size_type), sizeof(void *)>::value + sizeof(size_type);
+ char * const ptr = UserAllocator::malloc(POD_size);
+ if (ptr == 0)
+ return 0;
+ const details::PODptr<size_type> node(ptr, POD_size);
+ next_size <<= 1;
+
+ // initialize it,
+ store().add_block(node.begin(), node.element_size(), partition_size);
+
+ // insert it into the list,
+ node.next(list);
+ list = node;
+
+ // and return a chunk from it.
+ return store().malloc();
+}
+
+template <typename UserAllocator>
+void * pool<UserAllocator>::ordered_malloc_need_resize()
+{
+ // No memory in any of our storages; make a new storage,
+ const size_type partition_size = alloc_size();
+ const size_type POD_size = next_size * partition_size +
+ details::pool::ct_lcm<sizeof(size_type), sizeof(void *)>::value + sizeof(size_type);
+ char * const ptr = UserAllocator::malloc(POD_size);
+ if (ptr == 0)
+ return 0;
+ const details::PODptr<size_type> node(ptr, POD_size);
+ next_size <<= 1;
+
+ // initialize it,
+ // (we can use "add_block" here because we know that
+ // the free list is empty, so we don't have to use
+ // the slower ordered version)
+ store().add_block(node.begin(), node.element_size(), partition_size);
+
+ // insert it into the list,
+ // handle border case
+ if (!list.valid() || std::greater<void *>()(list.begin(), node.begin()))
+ {
+ node.next(list);
+ list = node;
+ }
+ else
+ {
+ details::PODptr<size_type> prev = list;
+
+ while (true)
+ {
+ // if we're about to hit the end or
+ // if we've found where "node" goes
+ if (prev.next_ptr() == 0
+ || std::greater<void *>()(prev.next_ptr(), node.begin()))
+ break;
+
+ prev = prev.next();
+ }
+
+ node.next(prev.next());
+ prev.next(node);
+ }
+
+ // and return a chunk from it.
+ return store().malloc();
+}
+
+template <typename UserAllocator>
+void * pool<UserAllocator>::ordered_malloc(const size_type n)
+{
+ const size_type partition_size = alloc_size();
+ const size_type total_req_size = n * requested_size;
+ const size_type num_chunks = total_req_size / partition_size +
+ ((total_req_size % partition_size) ? true : false);
+
+ void * ret = store().malloc_n(num_chunks, partition_size);
+
+ if (ret != 0)
+ return ret;
+
+ // Not enougn memory in our storages; make a new storage,
+ BOOST_USING_STD_MAX();
+ next_size = max BOOST_PREVENT_MACRO_SUBSTITUTION(next_size, num_chunks);
+ const size_type POD_size = next_size * partition_size +
+ details::pool::ct_lcm<sizeof(size_type), sizeof(void *)>::value + sizeof(size_type);
+ char * const ptr = UserAllocator::malloc(POD_size);
+ if (ptr == 0)
+ return 0;
+ const details::PODptr<size_type> node(ptr, POD_size);
+
+ // Split up block so we can use what wasn't requested
+ // (we can use "add_block" here because we know that
+ // the free list is empty, so we don't have to use
+ // the slower ordered version)
+ if (next_size > num_chunks)
+ store().add_block(node.begin() + num_chunks * partition_size,
+ node.element_size() - num_chunks * partition_size, partition_size);
+
+ next_size <<= 1;
+
+ // insert it into the list,
+ // handle border case
+ if (!list.valid() || std::greater<void *>()(list.begin(), node.begin()))
+ {
+ node.next(list);
+ list = node;
+ }
+ else
+ {
+ details::PODptr<size_type> prev = list;
+
+ while (true)
+ {
+ // if we're about to hit the end or
+ // if we've found where "node" goes
+ if (prev.next_ptr() == 0
+ || std::greater<void *>()(prev.next_ptr(), node.begin()))
+ break;
+
+ prev = prev.next();
+ }
+
+ node.next(prev.next());
+ prev.next(node);
+ }
+
+ // and return it.
+ return node.begin();
+}
+
+template <typename UserAllocator>
+details::PODptr<typename pool<UserAllocator>::size_type>
+pool<UserAllocator>::find_POD(void * const chunk) const
+{
+ // We have to find which storage this chunk is from.
+ details::PODptr<size_type> iter = list;
+ while (iter.valid())
+ {
+ if (is_from(chunk, iter.begin(), iter.element_size()))
+ return iter;
+ iter = iter.next();
+ }
+
+ return iter;
+}
+
+} // namespace boost
+
+#endif
diff --git a/boost/boost/pool/pool_alloc.hpp b/boost/boost/pool/pool_alloc.hpp
new file mode 100644
index 00000000000..89b93cfd4a5
--- /dev/null
+++ b/boost/boost/pool/pool_alloc.hpp
@@ -0,0 +1,221 @@
+// Copyright (C) 2000, 2001 Stephen Cleary
+//
+// 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 updates, documentation, and revision history.
+
+#ifndef BOOST_POOL_ALLOC_HPP
+#define BOOST_POOL_ALLOC_HPP
+
+// std::numeric_limits
+#include <boost/limits.hpp>
+// new, std::bad_alloc
+#include <new>
+
+#include <boost/pool/poolfwd.hpp>
+
+// boost::singleton_pool
+#include <boost/pool/singleton_pool.hpp>
+
+#include <boost/detail/workaround.hpp>
+
+// The following code will be put into Boost.Config in a later revision
+#if defined(_RWSTD_VER) || defined(__SGI_STL_PORT) || \
+ BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
+ #define BOOST_NO_PROPER_STL_DEALLOCATE
+#endif
+
+namespace boost {
+
+struct pool_allocator_tag { };
+
+template <typename T,
+ typename UserAllocator,
+ typename Mutex,
+ unsigned NextSize>
+class pool_allocator
+{
+ public:
+ typedef T value_type;
+ typedef UserAllocator user_allocator;
+ typedef Mutex mutex;
+ BOOST_STATIC_CONSTANT(unsigned, next_size = NextSize);
+
+ typedef value_type * pointer;
+ typedef const value_type * const_pointer;
+ typedef value_type & reference;
+ typedef const value_type & const_reference;
+ typedef typename pool<UserAllocator>::size_type size_type;
+ typedef typename pool<UserAllocator>::difference_type difference_type;
+
+ template <typename U>
+ struct rebind
+ {
+ typedef pool_allocator<U, UserAllocator, Mutex, NextSize> other;
+ };
+
+ public:
+ pool_allocator() { }
+
+ // default copy constructor
+
+ // default assignment operator
+
+ // not explicit, mimicking std::allocator [20.4.1]
+ template <typename U>
+ pool_allocator(const pool_allocator<U, UserAllocator, Mutex, NextSize> &)
+ { }
+
+ // default destructor
+
+ static pointer address(reference r)
+ { return &r; }
+ static const_pointer address(const_reference s)
+ { return &s; }
+ static size_type max_size()
+ { return (std::numeric_limits<size_type>::max)(); }
+ static void construct(const pointer ptr, const value_type & t)
+ { new (ptr) T(t); }
+ static void destroy(const pointer ptr)
+ {
+ ptr->~T();
+ (void) ptr; // avoid unused variable warning
+ }
+
+ bool operator==(const pool_allocator &) const
+ { return true; }
+ bool operator!=(const pool_allocator &) const
+ { return false; }
+
+ static pointer allocate(const size_type n)
+ {
+ const pointer ret = static_cast<pointer>(
+ singleton_pool<pool_allocator_tag, sizeof(T), UserAllocator, Mutex,
+ NextSize>::ordered_malloc(n) );
+ if (ret == 0)
+ throw std::bad_alloc();
+ return ret;
+ }
+ static pointer allocate(const size_type n, const void * const)
+ { return allocate(n); }
+ static void deallocate(const pointer ptr, const size_type n)
+ {
+#ifdef BOOST_NO_PROPER_STL_DEALLOCATE
+ if (ptr == 0 || n == 0)
+ return;
+#endif
+ singleton_pool<pool_allocator_tag, sizeof(T), UserAllocator, Mutex,
+ NextSize>::ordered_free(ptr, n);
+ }
+};
+
+struct fast_pool_allocator_tag { };
+
+template <typename T,
+ typename UserAllocator,
+ typename Mutex,
+ unsigned NextSize>
+class fast_pool_allocator
+{
+ public:
+ typedef T value_type;
+ typedef UserAllocator user_allocator;
+ typedef Mutex mutex;
+ BOOST_STATIC_CONSTANT(unsigned, next_size = NextSize);
+
+ typedef value_type * pointer;
+ typedef const value_type * const_pointer;
+ typedef value_type & reference;
+ typedef const value_type & const_reference;
+ typedef typename pool<UserAllocator>::size_type size_type;
+ typedef typename pool<UserAllocator>::difference_type difference_type;
+
+ template <typename U>
+ struct rebind
+ {
+ typedef fast_pool_allocator<U, UserAllocator, Mutex, NextSize> other;
+ };
+
+ public:
+ fast_pool_allocator() { }
+
+ // default copy constructor
+
+ // default assignment operator
+
+ // not explicit, mimicking std::allocator [20.4.1]
+ template <typename U>
+ fast_pool_allocator(
+ const fast_pool_allocator<U, UserAllocator, Mutex, NextSize> &)
+ { }
+
+ // default destructor
+
+ static pointer address(reference r)
+ { return &r; }
+ static const_pointer address(const_reference s)
+ { return &s; }
+ static size_type max_size()
+ { return (std::numeric_limits<size_type>::max)(); }
+ void construct(const pointer ptr, const value_type & t)
+ { new (ptr) T(t); }
+ void destroy(const pointer ptr)
+ {
+ ptr->~T();
+ (void) ptr; // avoid unused variable warning
+ }
+
+ bool operator==(const fast_pool_allocator &) const
+ { return true; }
+ bool operator!=(const fast_pool_allocator &) const
+ { return false; }
+
+ static pointer allocate(const size_type n)
+ {
+ const pointer ret = (n == 1) ?
+ static_cast<pointer>(
+ singleton_pool<fast_pool_allocator_tag, sizeof(T),
+ UserAllocator, Mutex, NextSize>::malloc() ) :
+ static_cast<pointer>(
+ singleton_pool<fast_pool_allocator_tag, sizeof(T),
+ UserAllocator, Mutex, NextSize>::ordered_malloc(n) );
+ if (ret == 0)
+ throw std::bad_alloc();
+ return ret;
+ }
+ static pointer allocate(const size_type n, const void * const)
+ { return allocate(n); }
+ static pointer allocate()
+ {
+ const pointer ret = static_cast<pointer>(
+ singleton_pool<fast_pool_allocator_tag, sizeof(T),
+ UserAllocator, Mutex, NextSize>::malloc() );
+ if (ret == 0)
+ throw std::bad_alloc();
+ return ret;
+ }
+ static void deallocate(const pointer ptr, const size_type n)
+ {
+#ifdef BOOST_NO_PROPER_STL_DEALLOCATE
+ if (ptr == 0 || n == 0)
+ return;
+#endif
+ if (n == 1)
+ singleton_pool<fast_pool_allocator_tag, sizeof(T),
+ UserAllocator, Mutex, NextSize>::free(ptr);
+ else
+ singleton_pool<fast_pool_allocator_tag, sizeof(T),
+ UserAllocator, Mutex, NextSize>::free(ptr, n);
+ }
+ static void deallocate(const pointer ptr)
+ {
+ singleton_pool<fast_pool_allocator_tag, sizeof(T),
+ UserAllocator, Mutex, NextSize>::free(ptr);
+ }
+};
+
+} // namespace boost
+
+#endif
diff --git a/boost/boost/pool/poolfwd.hpp b/boost/boost/pool/poolfwd.hpp
new file mode 100644
index 00000000000..89b3dd3760c
--- /dev/null
+++ b/boost/boost/pool/poolfwd.hpp
@@ -0,0 +1,73 @@
+// Copyright (C) 2000, 2001 Stephen Cleary
+//
+// 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 updates, documentation, and revision history.
+
+#ifndef BOOST_POOLFWD_HPP
+#define BOOST_POOLFWD_HPP
+
+#include <boost/config.hpp> // for workarounds
+
+// std::size_t
+#include <cstddef>
+
+// boost::details::pool::default_mutex
+#include <boost/pool/detail/mutex.hpp>
+
+namespace boost {
+
+//
+// Location: <boost/pool/simple_segregated_storage.hpp>
+//
+template <typename SizeType = std::size_t>
+class simple_segregated_storage;
+
+//
+// Location: <boost/pool/pool.hpp>
+//
+struct default_user_allocator_new_delete;
+struct default_user_allocator_malloc_free;
+
+template <typename UserAllocator = default_user_allocator_new_delete>
+class pool;
+
+//
+// Location: <boost/pool/object_pool.hpp>
+//
+template <typename T, typename UserAllocator = default_user_allocator_new_delete>
+class object_pool;
+
+//
+// Location: <boost/pool/singleton_pool.hpp>
+//
+template <typename Tag, unsigned RequestedSize,
+ typename UserAllocator = default_user_allocator_new_delete,
+ typename Mutex = details::pool::default_mutex,
+ unsigned NextSize = 32>
+struct singleton_pool;
+
+//
+// Location: <boost/pool/pool_alloc.hpp>
+//
+struct pool_allocator_tag;
+
+template <typename T,
+ typename UserAllocator = default_user_allocator_new_delete,
+ typename Mutex = details::pool::default_mutex,
+ unsigned NextSize = 32>
+class pool_allocator;
+
+struct fast_pool_allocator_tag;
+
+template <typename T,
+ typename UserAllocator = default_user_allocator_new_delete,
+ typename Mutex = details::pool::default_mutex,
+ unsigned NextSize = 32>
+class fast_pool_allocator;
+
+} // namespace boost
+
+#endif
diff --git a/boost/boost/pool/simple_segregated_storage.hpp b/boost/boost/pool/simple_segregated_storage.hpp
new file mode 100644
index 00000000000..20c16dc5cb6
--- /dev/null
+++ b/boost/boost/pool/simple_segregated_storage.hpp
@@ -0,0 +1,265 @@
+// Copyright (C) 2000, 2001 Stephen Cleary
+//
+// 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 updates, documentation, and revision history.
+
+#ifndef BOOST_SIMPLE_SEGREGATED_STORAGE_HPP
+#define BOOST_SIMPLE_SEGREGATED_STORAGE_HPP
+
+// std::greater
+#include <functional>
+
+#include <boost/pool/poolfwd.hpp>
+
+namespace boost {
+
+template <typename SizeType>
+class simple_segregated_storage
+{
+ public:
+ typedef SizeType size_type;
+
+ private:
+ simple_segregated_storage(const simple_segregated_storage &);
+ void operator=(const simple_segregated_storage &);
+
+ // pre: (n > 0), (start != 0), (nextof(start) != 0)
+ // post: (start != 0)
+ static void * try_malloc_n(void * & start, size_type n,
+ size_type partition_size);
+
+ protected:
+ void * first;
+
+ // Traverses the free list referred to by "first",
+ // and returns the iterator previous to where
+ // "ptr" would go if it was in the free list.
+ // Returns 0 if "ptr" would go at the beginning
+ // of the free list (i.e., before "first")
+ void * find_prev(void * ptr);
+
+ // for the sake of code readability :)
+ static void * & nextof(void * const ptr)
+ { return *(static_cast<void **>(ptr)); }
+
+ public:
+ // Post: empty()
+ simple_segregated_storage()
+ :first(0) { }
+
+ // pre: npartition_sz >= sizeof(void *)
+ // npartition_sz = sizeof(void *) * i, for some integer i
+ // nsz >= npartition_sz
+ // block is properly aligned for an array of object of
+ // size npartition_sz and array of void *
+ // The requirements above guarantee that any pointer to a chunk
+ // (which is a pointer to an element in an array of npartition_sz)
+ // may be cast to void **.
+ static void * segregate(void * block,
+ size_type nsz, size_type npartition_sz,
+ void * end = 0);
+
+ // Same preconditions as 'segregate'
+ // Post: !empty()
+ void add_block(void * const block,
+ const size_type nsz, const size_type npartition_sz)
+ {
+ // Segregate this block and merge its free list into the
+ // free list referred to by "first"
+ first = segregate(block, nsz, npartition_sz, first);
+ }
+
+ // Same preconditions as 'segregate'
+ // Post: !empty()
+ void add_ordered_block(void * const block,
+ const size_type nsz, const size_type npartition_sz)
+ {
+ // This (slower) version of add_block segregates the
+ // block and merges its free list into our free list
+ // in the proper order
+
+ // Find where "block" would go in the free list
+ void * const loc = find_prev(block);
+
+ // Place either at beginning or in middle/end
+ if (loc == 0)
+ add_block(block, nsz, npartition_sz);
+ else
+ nextof(loc) = segregate(block, nsz, npartition_sz, nextof(loc));
+ }
+
+ // default destructor
+
+ bool empty() const { return (first == 0); }
+
+ // pre: !empty()
+ void * malloc()
+ {
+ void * const ret = first;
+
+ // Increment the "first" pointer to point to the next chunk
+ first = nextof(first);
+ return ret;
+ }
+
+ // pre: chunk was previously returned from a malloc() referring to the
+ // same free list
+ // post: !empty()
+ void free(void * const chunk)
+ {
+ nextof(chunk) = first;
+ first = chunk;
+ }
+
+ // pre: chunk was previously returned from a malloc() referring to the
+ // same free list
+ // post: !empty()
+ void ordered_free(void * const chunk)
+ {
+ // This (slower) implementation of 'free' places the memory
+ // back in the list in its proper order.
+
+ // Find where "chunk" goes in the free list
+ void * const loc = find_prev(chunk);
+
+ // Place either at beginning or in middle/end
+ if (loc == 0)
+ free(chunk);
+ else
+ {
+ nextof(chunk) = nextof(loc);
+ nextof(loc) = chunk;
+ }
+ }
+
+ // Note: if you're allocating/deallocating n a lot, you should
+ // be using an ordered pool.
+ void * malloc_n(size_type n, size_type partition_size);
+
+ // pre: chunks was previously allocated from *this with the same
+ // values for n and partition_size
+ // post: !empty()
+ // Note: if you're allocating/deallocating n a lot, you should
+ // be using an ordered pool.
+ void free_n(void * const chunks, const size_type n,
+ const size_type partition_size)
+ {
+ add_block(chunks, n * partition_size, partition_size);
+ }
+
+ // pre: chunks was previously allocated from *this with the same
+ // values for n and partition_size
+ // post: !empty()
+ void ordered_free_n(void * const chunks, const size_type n,
+ const size_type partition_size)
+ {
+ add_ordered_block(chunks, n * partition_size, partition_size);
+ }
+};
+
+template <typename SizeType>
+void * simple_segregated_storage<SizeType>::find_prev(void * const ptr)
+{
+ // Handle border case
+ if (first == 0 || std::greater<void *>()(first, ptr))
+ return 0;
+
+ void * iter = first;
+ while (true)
+ {
+ // if we're about to hit the end or
+ // if we've found where "ptr" goes
+ if (nextof(iter) == 0 || std::greater<void *>()(nextof(iter), ptr))
+ return iter;
+
+ iter = nextof(iter);
+ }
+}
+
+template <typename SizeType>
+void * simple_segregated_storage<SizeType>::segregate(
+ void * const block,
+ const size_type sz,
+ const size_type partition_sz,
+ void * const end)
+{
+ // Get pointer to last valid chunk, preventing overflow on size calculations
+ // The division followed by the multiplication just makes sure that
+ // old == block + partition_sz * i, for some integer i, even if the
+ // block size (sz) is not a multiple of the partition size.
+ char * old = static_cast<char *>(block)
+ + ((sz - partition_sz) / partition_sz) * partition_sz;
+
+ // Set it to point to the end
+ nextof(old) = end;
+
+ // Handle border case where sz == partition_sz (i.e., we're handling an array
+ // of 1 element)
+ if (old == block)
+ return block;
+
+ // Iterate backwards, building a singly-linked list of pointers
+ for (char * iter = old - partition_sz; iter != block;
+ old = iter, iter -= partition_sz)
+ nextof(iter) = old;
+
+ // Point the first pointer, too
+ nextof(block) = old;
+
+ return block;
+}
+
+// The following function attempts to find n contiguous chunks
+// of size partition_size in the free list, starting at start.
+// If it succeds, it returns the last chunk in that contiguous
+// sequence, so that the sequence is known by [start, {retval}]
+// If it fails, it does do either because it's at the end of the
+// free list or hits a non-contiguous chunk. In either case,
+// it will return 0, and set start to the last considered
+// chunk. You are at the end of the free list if
+// nextof(start) == 0. Otherwise, start points to the last
+// chunk in the contiguous sequence, and nextof(start) points
+// to the first chunk in the next contiguous sequence (assuming
+// an ordered free list)
+template <typename SizeType>
+void * simple_segregated_storage<SizeType>::try_malloc_n(
+ void * & start, size_type n, const size_type partition_size)
+{
+ void * iter = nextof(start);
+ while (--n != 0)
+ {
+ void * next = nextof(iter);
+ if (next != static_cast<char *>(iter) + partition_size)
+ {
+ // next == 0 (end-of-list) or non-contiguous chunk found
+ start = iter;
+ return 0;
+ }
+ iter = next;
+ }
+ return iter;
+}
+
+template <typename SizeType>
+void * simple_segregated_storage<SizeType>::malloc_n(const size_type n,
+ const size_type partition_size)
+{
+ void * start = &first;
+ void * iter;
+ do
+ {
+ if (nextof(start) == 0)
+ return 0;
+ iter = try_malloc_n(start, n, partition_size);
+ } while (iter == 0);
+ void * const ret = nextof(start);
+ nextof(start) = nextof(iter);
+ return ret;
+}
+
+} // namespace boost
+
+#endif
diff --git a/boost/boost/pool/singleton_pool.hpp b/boost/boost/pool/singleton_pool.hpp
new file mode 100644
index 00000000000..7290992c705
--- /dev/null
+++ b/boost/boost/pool/singleton_pool.hpp
@@ -0,0 +1,119 @@
+// Copyright (C) 2000, 2001 Stephen Cleary
+//
+// 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 updates, documentation, and revision history.
+
+#ifndef BOOST_SINGLETON_POOL_HPP
+#define BOOST_SINGLETON_POOL_HPP
+
+#include <boost/pool/poolfwd.hpp>
+
+// boost::pool
+#include <boost/pool/pool.hpp>
+// boost::details::pool::singleton_default
+#include <boost/pool/detail/singleton.hpp>
+// boost::details::pool::guard
+#include <boost/pool/detail/guard.hpp>
+
+namespace boost {
+
+//
+// The singleton_pool class allows other pool interfaces for types of the same
+// size to share the same pool
+//
+template <typename Tag, unsigned RequestedSize,
+ typename UserAllocator,
+ typename Mutex,
+ unsigned NextSize>
+struct singleton_pool
+{
+ public:
+ typedef Tag tag;
+ typedef Mutex mutex;
+ typedef UserAllocator user_allocator;
+ typedef typename pool<UserAllocator>::size_type size_type;
+ typedef typename pool<UserAllocator>::difference_type difference_type;
+
+ BOOST_STATIC_CONSTANT(unsigned, requested_size = RequestedSize);
+ BOOST_STATIC_CONSTANT(unsigned, next_size = NextSize);
+
+ private:
+ struct pool_type: Mutex
+ {
+ pool<UserAllocator> p;
+ pool_type():p(RequestedSize, NextSize) { }
+ };
+
+ typedef details::pool::singleton_default<pool_type> singleton;
+
+ singleton_pool();
+
+ public:
+ static void * malloc()
+ {
+ pool_type & p = singleton::instance();
+ details::pool::guard<Mutex> g(p);
+ return p.p.malloc();
+ }
+ static void * ordered_malloc()
+ {
+ pool_type & p = singleton::instance();
+ details::pool::guard<Mutex> g(p);
+ return p.p.ordered_malloc();
+ }
+ static void * ordered_malloc(const size_type n)
+ {
+ pool_type & p = singleton::instance();
+ details::pool::guard<Mutex> g(p);
+ return p.p.ordered_malloc(n);
+ }
+ static bool is_from(void * const ptr)
+ {
+ pool_type & p = singleton::instance();
+ details::pool::guard<Mutex> g(p);
+ return p.p.is_from(ptr);
+ }
+ static void free(void * const ptr)
+ {
+ pool_type & p = singleton::instance();
+ details::pool::guard<Mutex> g(p);
+ p.p.free(ptr);
+ }
+ static void ordered_free(void * const ptr)
+ {
+ pool_type & p = singleton::instance();
+ details::pool::guard<Mutex> g(p);
+ p.p.ordered_free(ptr);
+ }
+ static void free(void * const ptr, const size_type n)
+ {
+ pool_type & p = singleton::instance();
+ details::pool::guard<Mutex> g(p);
+ p.p.free(ptr, n);
+ }
+ static void ordered_free(void * const ptr, const size_type n)
+ {
+ pool_type & p = singleton::instance();
+ details::pool::guard<Mutex> g(p);
+ p.p.ordered_free(ptr, n);
+ }
+ static bool release_memory()
+ {
+ pool_type & p = singleton::instance();
+ details::pool::guard<Mutex> g(p);
+ return p.p.release_memory();
+ }
+ static bool purge_memory()
+ {
+ pool_type & p = singleton::instance();
+ details::pool::guard<Mutex> g(p);
+ return p.p.purge_memory();
+ }
+};
+
+} // namespace boost
+
+#endif
diff --git a/boost/boost/preprocessor.hpp b/boost/boost/preprocessor.hpp
new file mode 100644
index 00000000000..6f5c822f856
--- /dev/null
+++ b/boost/boost/preprocessor.hpp
@@ -0,0 +1,19 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org/libs/preprocessor for documentation. */
+#
+# ifndef BOOST_PREPROCESSOR_HPP
+# define BOOST_PREPROCESSOR_HPP
+#
+# include <boost/preprocessor/library.hpp>
+#
+# endif
diff --git a/boost/boost/preprocessor/arithmetic.hpp b/boost/boost/preprocessor/arithmetic.hpp
new file mode 100644
index 00000000000..b1be7814e42
--- /dev/null
+++ b/boost/boost/preprocessor/arithmetic.hpp
@@ -0,0 +1,25 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_ARITHMETIC_HPP
+# define BOOST_PREPROCESSOR_ARITHMETIC_HPP
+#
+# include <boost/preprocessor/arithmetic/add.hpp>
+# include <boost/preprocessor/arithmetic/dec.hpp>
+# include <boost/preprocessor/arithmetic/div.hpp>
+# include <boost/preprocessor/arithmetic/inc.hpp>
+# include <boost/preprocessor/arithmetic/mod.hpp>
+# include <boost/preprocessor/arithmetic/mul.hpp>
+# include <boost/preprocessor/arithmetic/sub.hpp>
+#
+# endif
diff --git a/boost/boost/preprocessor/arithmetic/add.hpp b/boost/boost/preprocessor/arithmetic/add.hpp
new file mode 100644
index 00000000000..5a29f554f57
--- /dev/null
+++ b/boost/boost/preprocessor/arithmetic/add.hpp
@@ -0,0 +1,51 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_ARITHMETIC_ADD_HPP
+# define BOOST_PREPROCESSOR_ARITHMETIC_ADD_HPP
+#
+# include <boost/preprocessor/arithmetic/dec.hpp>
+# include <boost/preprocessor/arithmetic/inc.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/control/while.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+#
+# /* BOOST_PP_ADD */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_ADD(x, y) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE(BOOST_PP_ADD_P, BOOST_PP_ADD_O, (x, y)))
+# else
+# define BOOST_PP_ADD(x, y) BOOST_PP_ADD_I(x, y)
+# define BOOST_PP_ADD_I(x, y) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE(BOOST_PP_ADD_P, BOOST_PP_ADD_O, (x, y)))
+# endif
+#
+# define BOOST_PP_ADD_P(d, xy) BOOST_PP_TUPLE_ELEM(2, 1, xy)
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+# define BOOST_PP_ADD_O(d, xy) BOOST_PP_ADD_O_I xy
+# else
+# define BOOST_PP_ADD_O(d, xy) BOOST_PP_ADD_O_I(BOOST_PP_TUPLE_ELEM(2, 0, xy), BOOST_PP_TUPLE_ELEM(2, 1, xy))
+# endif
+#
+# define BOOST_PP_ADD_O_I(x, y) (BOOST_PP_INC(x), BOOST_PP_DEC(y))
+#
+# /* BOOST_PP_ADD_D */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_ADD_D(d, x, y) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE_ ## d(BOOST_PP_ADD_P, BOOST_PP_ADD_O, (x, y)))
+# else
+# define BOOST_PP_ADD_D(d, x, y) BOOST_PP_ADD_D_I(d, x, y)
+# define BOOST_PP_ADD_D_I(d, x, y) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE_ ## d(BOOST_PP_ADD_P, BOOST_PP_ADD_O, (x, y)))
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/arithmetic/dec.hpp b/boost/boost/preprocessor/arithmetic/dec.hpp
new file mode 100644
index 00000000000..05033596779
--- /dev/null
+++ b/boost/boost/preprocessor/arithmetic/dec.hpp
@@ -0,0 +1,288 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_ARITHMETIC_DEC_HPP
+# define BOOST_PREPROCESSOR_ARITHMETIC_DEC_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+#
+# /* BOOST_PP_DEC */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+# define BOOST_PP_DEC(x) BOOST_PP_DEC_I(x)
+# else
+# define BOOST_PP_DEC(x) BOOST_PP_DEC_OO((x))
+# define BOOST_PP_DEC_OO(par) BOOST_PP_DEC_I ## par
+# endif
+#
+# define BOOST_PP_DEC_I(x) BOOST_PP_DEC_ ## x
+#
+# define BOOST_PP_DEC_0 0
+# define BOOST_PP_DEC_1 0
+# define BOOST_PP_DEC_2 1
+# define BOOST_PP_DEC_3 2
+# define BOOST_PP_DEC_4 3
+# define BOOST_PP_DEC_5 4
+# define BOOST_PP_DEC_6 5
+# define BOOST_PP_DEC_7 6
+# define BOOST_PP_DEC_8 7
+# define BOOST_PP_DEC_9 8
+# define BOOST_PP_DEC_10 9
+# define BOOST_PP_DEC_11 10
+# define BOOST_PP_DEC_12 11
+# define BOOST_PP_DEC_13 12
+# define BOOST_PP_DEC_14 13
+# define BOOST_PP_DEC_15 14
+# define BOOST_PP_DEC_16 15
+# define BOOST_PP_DEC_17 16
+# define BOOST_PP_DEC_18 17
+# define BOOST_PP_DEC_19 18
+# define BOOST_PP_DEC_20 19
+# define BOOST_PP_DEC_21 20
+# define BOOST_PP_DEC_22 21
+# define BOOST_PP_DEC_23 22
+# define BOOST_PP_DEC_24 23
+# define BOOST_PP_DEC_25 24
+# define BOOST_PP_DEC_26 25
+# define BOOST_PP_DEC_27 26
+# define BOOST_PP_DEC_28 27
+# define BOOST_PP_DEC_29 28
+# define BOOST_PP_DEC_30 29
+# define BOOST_PP_DEC_31 30
+# define BOOST_PP_DEC_32 31
+# define BOOST_PP_DEC_33 32
+# define BOOST_PP_DEC_34 33
+# define BOOST_PP_DEC_35 34
+# define BOOST_PP_DEC_36 35
+# define BOOST_PP_DEC_37 36
+# define BOOST_PP_DEC_38 37
+# define BOOST_PP_DEC_39 38
+# define BOOST_PP_DEC_40 39
+# define BOOST_PP_DEC_41 40
+# define BOOST_PP_DEC_42 41
+# define BOOST_PP_DEC_43 42
+# define BOOST_PP_DEC_44 43
+# define BOOST_PP_DEC_45 44
+# define BOOST_PP_DEC_46 45
+# define BOOST_PP_DEC_47 46
+# define BOOST_PP_DEC_48 47
+# define BOOST_PP_DEC_49 48
+# define BOOST_PP_DEC_50 49
+# define BOOST_PP_DEC_51 50
+# define BOOST_PP_DEC_52 51
+# define BOOST_PP_DEC_53 52
+# define BOOST_PP_DEC_54 53
+# define BOOST_PP_DEC_55 54
+# define BOOST_PP_DEC_56 55
+# define BOOST_PP_DEC_57 56
+# define BOOST_PP_DEC_58 57
+# define BOOST_PP_DEC_59 58
+# define BOOST_PP_DEC_60 59
+# define BOOST_PP_DEC_61 60
+# define BOOST_PP_DEC_62 61
+# define BOOST_PP_DEC_63 62
+# define BOOST_PP_DEC_64 63
+# define BOOST_PP_DEC_65 64
+# define BOOST_PP_DEC_66 65
+# define BOOST_PP_DEC_67 66
+# define BOOST_PP_DEC_68 67
+# define BOOST_PP_DEC_69 68
+# define BOOST_PP_DEC_70 69
+# define BOOST_PP_DEC_71 70
+# define BOOST_PP_DEC_72 71
+# define BOOST_PP_DEC_73 72
+# define BOOST_PP_DEC_74 73
+# define BOOST_PP_DEC_75 74
+# define BOOST_PP_DEC_76 75
+# define BOOST_PP_DEC_77 76
+# define BOOST_PP_DEC_78 77
+# define BOOST_PP_DEC_79 78
+# define BOOST_PP_DEC_80 79
+# define BOOST_PP_DEC_81 80
+# define BOOST_PP_DEC_82 81
+# define BOOST_PP_DEC_83 82
+# define BOOST_PP_DEC_84 83
+# define BOOST_PP_DEC_85 84
+# define BOOST_PP_DEC_86 85
+# define BOOST_PP_DEC_87 86
+# define BOOST_PP_DEC_88 87
+# define BOOST_PP_DEC_89 88
+# define BOOST_PP_DEC_90 89
+# define BOOST_PP_DEC_91 90
+# define BOOST_PP_DEC_92 91
+# define BOOST_PP_DEC_93 92
+# define BOOST_PP_DEC_94 93
+# define BOOST_PP_DEC_95 94
+# define BOOST_PP_DEC_96 95
+# define BOOST_PP_DEC_97 96
+# define BOOST_PP_DEC_98 97
+# define BOOST_PP_DEC_99 98
+# define BOOST_PP_DEC_100 99
+# define BOOST_PP_DEC_101 100
+# define BOOST_PP_DEC_102 101
+# define BOOST_PP_DEC_103 102
+# define BOOST_PP_DEC_104 103
+# define BOOST_PP_DEC_105 104
+# define BOOST_PP_DEC_106 105
+# define BOOST_PP_DEC_107 106
+# define BOOST_PP_DEC_108 107
+# define BOOST_PP_DEC_109 108
+# define BOOST_PP_DEC_110 109
+# define BOOST_PP_DEC_111 110
+# define BOOST_PP_DEC_112 111
+# define BOOST_PP_DEC_113 112
+# define BOOST_PP_DEC_114 113
+# define BOOST_PP_DEC_115 114
+# define BOOST_PP_DEC_116 115
+# define BOOST_PP_DEC_117 116
+# define BOOST_PP_DEC_118 117
+# define BOOST_PP_DEC_119 118
+# define BOOST_PP_DEC_120 119
+# define BOOST_PP_DEC_121 120
+# define BOOST_PP_DEC_122 121
+# define BOOST_PP_DEC_123 122
+# define BOOST_PP_DEC_124 123
+# define BOOST_PP_DEC_125 124
+# define BOOST_PP_DEC_126 125
+# define BOOST_PP_DEC_127 126
+# define BOOST_PP_DEC_128 127
+# define BOOST_PP_DEC_129 128
+# define BOOST_PP_DEC_130 129
+# define BOOST_PP_DEC_131 130
+# define BOOST_PP_DEC_132 131
+# define BOOST_PP_DEC_133 132
+# define BOOST_PP_DEC_134 133
+# define BOOST_PP_DEC_135 134
+# define BOOST_PP_DEC_136 135
+# define BOOST_PP_DEC_137 136
+# define BOOST_PP_DEC_138 137
+# define BOOST_PP_DEC_139 138
+# define BOOST_PP_DEC_140 139
+# define BOOST_PP_DEC_141 140
+# define BOOST_PP_DEC_142 141
+# define BOOST_PP_DEC_143 142
+# define BOOST_PP_DEC_144 143
+# define BOOST_PP_DEC_145 144
+# define BOOST_PP_DEC_146 145
+# define BOOST_PP_DEC_147 146
+# define BOOST_PP_DEC_148 147
+# define BOOST_PP_DEC_149 148
+# define BOOST_PP_DEC_150 149
+# define BOOST_PP_DEC_151 150
+# define BOOST_PP_DEC_152 151
+# define BOOST_PP_DEC_153 152
+# define BOOST_PP_DEC_154 153
+# define BOOST_PP_DEC_155 154
+# define BOOST_PP_DEC_156 155
+# define BOOST_PP_DEC_157 156
+# define BOOST_PP_DEC_158 157
+# define BOOST_PP_DEC_159 158
+# define BOOST_PP_DEC_160 159
+# define BOOST_PP_DEC_161 160
+# define BOOST_PP_DEC_162 161
+# define BOOST_PP_DEC_163 162
+# define BOOST_PP_DEC_164 163
+# define BOOST_PP_DEC_165 164
+# define BOOST_PP_DEC_166 165
+# define BOOST_PP_DEC_167 166
+# define BOOST_PP_DEC_168 167
+# define BOOST_PP_DEC_169 168
+# define BOOST_PP_DEC_170 169
+# define BOOST_PP_DEC_171 170
+# define BOOST_PP_DEC_172 171
+# define BOOST_PP_DEC_173 172
+# define BOOST_PP_DEC_174 173
+# define BOOST_PP_DEC_175 174
+# define BOOST_PP_DEC_176 175
+# define BOOST_PP_DEC_177 176
+# define BOOST_PP_DEC_178 177
+# define BOOST_PP_DEC_179 178
+# define BOOST_PP_DEC_180 179
+# define BOOST_PP_DEC_181 180
+# define BOOST_PP_DEC_182 181
+# define BOOST_PP_DEC_183 182
+# define BOOST_PP_DEC_184 183
+# define BOOST_PP_DEC_185 184
+# define BOOST_PP_DEC_186 185
+# define BOOST_PP_DEC_187 186
+# define BOOST_PP_DEC_188 187
+# define BOOST_PP_DEC_189 188
+# define BOOST_PP_DEC_190 189
+# define BOOST_PP_DEC_191 190
+# define BOOST_PP_DEC_192 191
+# define BOOST_PP_DEC_193 192
+# define BOOST_PP_DEC_194 193
+# define BOOST_PP_DEC_195 194
+# define BOOST_PP_DEC_196 195
+# define BOOST_PP_DEC_197 196
+# define BOOST_PP_DEC_198 197
+# define BOOST_PP_DEC_199 198
+# define BOOST_PP_DEC_200 199
+# define BOOST_PP_DEC_201 200
+# define BOOST_PP_DEC_202 201
+# define BOOST_PP_DEC_203 202
+# define BOOST_PP_DEC_204 203
+# define BOOST_PP_DEC_205 204
+# define BOOST_PP_DEC_206 205
+# define BOOST_PP_DEC_207 206
+# define BOOST_PP_DEC_208 207
+# define BOOST_PP_DEC_209 208
+# define BOOST_PP_DEC_210 209
+# define BOOST_PP_DEC_211 210
+# define BOOST_PP_DEC_212 211
+# define BOOST_PP_DEC_213 212
+# define BOOST_PP_DEC_214 213
+# define BOOST_PP_DEC_215 214
+# define BOOST_PP_DEC_216 215
+# define BOOST_PP_DEC_217 216
+# define BOOST_PP_DEC_218 217
+# define BOOST_PP_DEC_219 218
+# define BOOST_PP_DEC_220 219
+# define BOOST_PP_DEC_221 220
+# define BOOST_PP_DEC_222 221
+# define BOOST_PP_DEC_223 222
+# define BOOST_PP_DEC_224 223
+# define BOOST_PP_DEC_225 224
+# define BOOST_PP_DEC_226 225
+# define BOOST_PP_DEC_227 226
+# define BOOST_PP_DEC_228 227
+# define BOOST_PP_DEC_229 228
+# define BOOST_PP_DEC_230 229
+# define BOOST_PP_DEC_231 230
+# define BOOST_PP_DEC_232 231
+# define BOOST_PP_DEC_233 232
+# define BOOST_PP_DEC_234 233
+# define BOOST_PP_DEC_235 234
+# define BOOST_PP_DEC_236 235
+# define BOOST_PP_DEC_237 236
+# define BOOST_PP_DEC_238 237
+# define BOOST_PP_DEC_239 238
+# define BOOST_PP_DEC_240 239
+# define BOOST_PP_DEC_241 240
+# define BOOST_PP_DEC_242 241
+# define BOOST_PP_DEC_243 242
+# define BOOST_PP_DEC_244 243
+# define BOOST_PP_DEC_245 244
+# define BOOST_PP_DEC_246 245
+# define BOOST_PP_DEC_247 246
+# define BOOST_PP_DEC_248 247
+# define BOOST_PP_DEC_249 248
+# define BOOST_PP_DEC_250 249
+# define BOOST_PP_DEC_251 250
+# define BOOST_PP_DEC_252 251
+# define BOOST_PP_DEC_253 252
+# define BOOST_PP_DEC_254 253
+# define BOOST_PP_DEC_255 254
+# define BOOST_PP_DEC_256 255
+#
+# endif
diff --git a/boost/boost/preprocessor/arithmetic/detail/div_base.hpp b/boost/boost/preprocessor/arithmetic/detail/div_base.hpp
new file mode 100644
index 00000000000..106632a3dee
--- /dev/null
+++ b/boost/boost/preprocessor/arithmetic/detail/div_base.hpp
@@ -0,0 +1,61 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_ARITHMETIC_DETAIL_DIV_BASE_HPP
+# define BOOST_PREPROCESSOR_ARITHMETIC_DETAIL_DIV_BASE_HPP
+#
+# include <boost/preprocessor/arithmetic/inc.hpp>
+# include <boost/preprocessor/arithmetic/sub.hpp>
+# include <boost/preprocessor/comparison/less_equal.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/control/while.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+# include <boost/preprocessor/tuple/rem.hpp>
+#
+# /* BOOST_PP_DIV_BASE */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_DIV_BASE(x, y) BOOST_PP_WHILE(BOOST_PP_DIV_BASE_P, BOOST_PP_DIV_BASE_O, (0, x, y))
+# else
+# define BOOST_PP_DIV_BASE(x, y) BOOST_PP_DIV_BASE_I(x, y)
+# define BOOST_PP_DIV_BASE_I(x, y) BOOST_PP_WHILE(BOOST_PP_DIV_BASE_P, BOOST_PP_DIV_BASE_O, (0, x, y))
+# endif
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()
+# define BOOST_PP_DIV_BASE_P(d, rxy) BOOST_PP_DIV_BASE_P_IM(d, BOOST_PP_TUPLE_REM_3 rxy)
+# define BOOST_PP_DIV_BASE_P_IM(d, im) BOOST_PP_DIV_BASE_P_I(d, im)
+# else
+# define BOOST_PP_DIV_BASE_P(d, rxy) BOOST_PP_DIV_BASE_P_I(d, BOOST_PP_TUPLE_ELEM(3, 0, rxy), BOOST_PP_TUPLE_ELEM(3, 1, rxy), BOOST_PP_TUPLE_ELEM(3, 2, rxy))
+# endif
+#
+# define BOOST_PP_DIV_BASE_P_I(d, r, x, y) BOOST_PP_LESS_EQUAL_D(d, y, x)
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()
+# define BOOST_PP_DIV_BASE_O(d, rxy) BOOST_PP_DIV_BASE_O_IM(d, BOOST_PP_TUPLE_REM_3 rxy)
+# define BOOST_PP_DIV_BASE_O_IM(d, im) BOOST_PP_DIV_BASE_O_I(d, im)
+# else
+# define BOOST_PP_DIV_BASE_O(d, rxy) BOOST_PP_DIV_BASE_O_I(d, BOOST_PP_TUPLE_ELEM(3, 0, rxy), BOOST_PP_TUPLE_ELEM(3, 1, rxy), BOOST_PP_TUPLE_ELEM(3, 2, rxy))
+# endif
+#
+# define BOOST_PP_DIV_BASE_O_I(d, r, x, y) (BOOST_PP_INC(r), BOOST_PP_SUB_D(d, x, y), y)
+#
+# /* BOOST_PP_DIV_BASE_D */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_DIV_BASE_D(d, x, y) BOOST_PP_WHILE_ ## d(BOOST_PP_DIV_BASE_P, BOOST_PP_DIV_BASE_O, (0, x, y))
+# else
+# define BOOST_PP_DIV_BASE_D(d, x, y) BOOST_PP_DIV_BASE_D_I(d, x, y)
+# define BOOST_PP_DIV_BASE_D_I(d, x, y) BOOST_PP_WHILE_ ## d(BOOST_PP_DIV_BASE_P, BOOST_PP_DIV_BASE_O, (0, x, y))
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/arithmetic/div.hpp b/boost/boost/preprocessor/arithmetic/div.hpp
new file mode 100644
index 00000000000..277596cea91
--- /dev/null
+++ b/boost/boost/preprocessor/arithmetic/div.hpp
@@ -0,0 +1,39 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_ARITHMETIC_DIV_HPP
+# define BOOST_PREPROCESSOR_ARITHMETIC_DIV_HPP
+#
+# include <boost/preprocessor/arithmetic/detail/div_base.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+#
+# /* BOOST_PP_DIV */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_DIV(x, y) BOOST_PP_TUPLE_ELEM(3, 0, BOOST_PP_DIV_BASE(x, y))
+# else
+# define BOOST_PP_DIV(x, y) BOOST_PP_DIV_I(x, y)
+# define BOOST_PP_DIV_I(x, y) BOOST_PP_TUPLE_ELEM(3, 0, BOOST_PP_DIV_BASE(x, y))
+# endif
+#
+# /* BOOST_PP_DIV_D */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_DIV_D(d, x, y) BOOST_PP_TUPLE_ELEM(3, 0, BOOST_PP_DIV_BASE_D(d, x, y))
+# else
+# define BOOST_PP_DIV_D(d, x, y) BOOST_PP_DIV_D_I(d, x, y)
+# define BOOST_PP_DIV_D_I(d, x, y) BOOST_PP_TUPLE_ELEM(3, 0, BOOST_PP_DIV_BASE_D(d, x, y))
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/arithmetic/inc.hpp b/boost/boost/preprocessor/arithmetic/inc.hpp
new file mode 100644
index 00000000000..1597ab85c33
--- /dev/null
+++ b/boost/boost/preprocessor/arithmetic/inc.hpp
@@ -0,0 +1,288 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_ARITHMETIC_INC_HPP
+# define BOOST_PREPROCESSOR_ARITHMETIC_INC_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+#
+# /* BOOST_PP_INC */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+# define BOOST_PP_INC(x) BOOST_PP_INC_I(x)
+# else
+# define BOOST_PP_INC(x) BOOST_PP_INC_OO((x))
+# define BOOST_PP_INC_OO(par) BOOST_PP_INC_I ## par
+# endif
+#
+# define BOOST_PP_INC_I(x) BOOST_PP_INC_ ## x
+#
+# define BOOST_PP_INC_0 1
+# define BOOST_PP_INC_1 2
+# define BOOST_PP_INC_2 3
+# define BOOST_PP_INC_3 4
+# define BOOST_PP_INC_4 5
+# define BOOST_PP_INC_5 6
+# define BOOST_PP_INC_6 7
+# define BOOST_PP_INC_7 8
+# define BOOST_PP_INC_8 9
+# define BOOST_PP_INC_9 10
+# define BOOST_PP_INC_10 11
+# define BOOST_PP_INC_11 12
+# define BOOST_PP_INC_12 13
+# define BOOST_PP_INC_13 14
+# define BOOST_PP_INC_14 15
+# define BOOST_PP_INC_15 16
+# define BOOST_PP_INC_16 17
+# define BOOST_PP_INC_17 18
+# define BOOST_PP_INC_18 19
+# define BOOST_PP_INC_19 20
+# define BOOST_PP_INC_20 21
+# define BOOST_PP_INC_21 22
+# define BOOST_PP_INC_22 23
+# define BOOST_PP_INC_23 24
+# define BOOST_PP_INC_24 25
+# define BOOST_PP_INC_25 26
+# define BOOST_PP_INC_26 27
+# define BOOST_PP_INC_27 28
+# define BOOST_PP_INC_28 29
+# define BOOST_PP_INC_29 30
+# define BOOST_PP_INC_30 31
+# define BOOST_PP_INC_31 32
+# define BOOST_PP_INC_32 33
+# define BOOST_PP_INC_33 34
+# define BOOST_PP_INC_34 35
+# define BOOST_PP_INC_35 36
+# define BOOST_PP_INC_36 37
+# define BOOST_PP_INC_37 38
+# define BOOST_PP_INC_38 39
+# define BOOST_PP_INC_39 40
+# define BOOST_PP_INC_40 41
+# define BOOST_PP_INC_41 42
+# define BOOST_PP_INC_42 43
+# define BOOST_PP_INC_43 44
+# define BOOST_PP_INC_44 45
+# define BOOST_PP_INC_45 46
+# define BOOST_PP_INC_46 47
+# define BOOST_PP_INC_47 48
+# define BOOST_PP_INC_48 49
+# define BOOST_PP_INC_49 50
+# define BOOST_PP_INC_50 51
+# define BOOST_PP_INC_51 52
+# define BOOST_PP_INC_52 53
+# define BOOST_PP_INC_53 54
+# define BOOST_PP_INC_54 55
+# define BOOST_PP_INC_55 56
+# define BOOST_PP_INC_56 57
+# define BOOST_PP_INC_57 58
+# define BOOST_PP_INC_58 59
+# define BOOST_PP_INC_59 60
+# define BOOST_PP_INC_60 61
+# define BOOST_PP_INC_61 62
+# define BOOST_PP_INC_62 63
+# define BOOST_PP_INC_63 64
+# define BOOST_PP_INC_64 65
+# define BOOST_PP_INC_65 66
+# define BOOST_PP_INC_66 67
+# define BOOST_PP_INC_67 68
+# define BOOST_PP_INC_68 69
+# define BOOST_PP_INC_69 70
+# define BOOST_PP_INC_70 71
+# define BOOST_PP_INC_71 72
+# define BOOST_PP_INC_72 73
+# define BOOST_PP_INC_73 74
+# define BOOST_PP_INC_74 75
+# define BOOST_PP_INC_75 76
+# define BOOST_PP_INC_76 77
+# define BOOST_PP_INC_77 78
+# define BOOST_PP_INC_78 79
+# define BOOST_PP_INC_79 80
+# define BOOST_PP_INC_80 81
+# define BOOST_PP_INC_81 82
+# define BOOST_PP_INC_82 83
+# define BOOST_PP_INC_83 84
+# define BOOST_PP_INC_84 85
+# define BOOST_PP_INC_85 86
+# define BOOST_PP_INC_86 87
+# define BOOST_PP_INC_87 88
+# define BOOST_PP_INC_88 89
+# define BOOST_PP_INC_89 90
+# define BOOST_PP_INC_90 91
+# define BOOST_PP_INC_91 92
+# define BOOST_PP_INC_92 93
+# define BOOST_PP_INC_93 94
+# define BOOST_PP_INC_94 95
+# define BOOST_PP_INC_95 96
+# define BOOST_PP_INC_96 97
+# define BOOST_PP_INC_97 98
+# define BOOST_PP_INC_98 99
+# define BOOST_PP_INC_99 100
+# define BOOST_PP_INC_100 101
+# define BOOST_PP_INC_101 102
+# define BOOST_PP_INC_102 103
+# define BOOST_PP_INC_103 104
+# define BOOST_PP_INC_104 105
+# define BOOST_PP_INC_105 106
+# define BOOST_PP_INC_106 107
+# define BOOST_PP_INC_107 108
+# define BOOST_PP_INC_108 109
+# define BOOST_PP_INC_109 110
+# define BOOST_PP_INC_110 111
+# define BOOST_PP_INC_111 112
+# define BOOST_PP_INC_112 113
+# define BOOST_PP_INC_113 114
+# define BOOST_PP_INC_114 115
+# define BOOST_PP_INC_115 116
+# define BOOST_PP_INC_116 117
+# define BOOST_PP_INC_117 118
+# define BOOST_PP_INC_118 119
+# define BOOST_PP_INC_119 120
+# define BOOST_PP_INC_120 121
+# define BOOST_PP_INC_121 122
+# define BOOST_PP_INC_122 123
+# define BOOST_PP_INC_123 124
+# define BOOST_PP_INC_124 125
+# define BOOST_PP_INC_125 126
+# define BOOST_PP_INC_126 127
+# define BOOST_PP_INC_127 128
+# define BOOST_PP_INC_128 129
+# define BOOST_PP_INC_129 130
+# define BOOST_PP_INC_130 131
+# define BOOST_PP_INC_131 132
+# define BOOST_PP_INC_132 133
+# define BOOST_PP_INC_133 134
+# define BOOST_PP_INC_134 135
+# define BOOST_PP_INC_135 136
+# define BOOST_PP_INC_136 137
+# define BOOST_PP_INC_137 138
+# define BOOST_PP_INC_138 139
+# define BOOST_PP_INC_139 140
+# define BOOST_PP_INC_140 141
+# define BOOST_PP_INC_141 142
+# define BOOST_PP_INC_142 143
+# define BOOST_PP_INC_143 144
+# define BOOST_PP_INC_144 145
+# define BOOST_PP_INC_145 146
+# define BOOST_PP_INC_146 147
+# define BOOST_PP_INC_147 148
+# define BOOST_PP_INC_148 149
+# define BOOST_PP_INC_149 150
+# define BOOST_PP_INC_150 151
+# define BOOST_PP_INC_151 152
+# define BOOST_PP_INC_152 153
+# define BOOST_PP_INC_153 154
+# define BOOST_PP_INC_154 155
+# define BOOST_PP_INC_155 156
+# define BOOST_PP_INC_156 157
+# define BOOST_PP_INC_157 158
+# define BOOST_PP_INC_158 159
+# define BOOST_PP_INC_159 160
+# define BOOST_PP_INC_160 161
+# define BOOST_PP_INC_161 162
+# define BOOST_PP_INC_162 163
+# define BOOST_PP_INC_163 164
+# define BOOST_PP_INC_164 165
+# define BOOST_PP_INC_165 166
+# define BOOST_PP_INC_166 167
+# define BOOST_PP_INC_167 168
+# define BOOST_PP_INC_168 169
+# define BOOST_PP_INC_169 170
+# define BOOST_PP_INC_170 171
+# define BOOST_PP_INC_171 172
+# define BOOST_PP_INC_172 173
+# define BOOST_PP_INC_173 174
+# define BOOST_PP_INC_174 175
+# define BOOST_PP_INC_175 176
+# define BOOST_PP_INC_176 177
+# define BOOST_PP_INC_177 178
+# define BOOST_PP_INC_178 179
+# define BOOST_PP_INC_179 180
+# define BOOST_PP_INC_180 181
+# define BOOST_PP_INC_181 182
+# define BOOST_PP_INC_182 183
+# define BOOST_PP_INC_183 184
+# define BOOST_PP_INC_184 185
+# define BOOST_PP_INC_185 186
+# define BOOST_PP_INC_186 187
+# define BOOST_PP_INC_187 188
+# define BOOST_PP_INC_188 189
+# define BOOST_PP_INC_189 190
+# define BOOST_PP_INC_190 191
+# define BOOST_PP_INC_191 192
+# define BOOST_PP_INC_192 193
+# define BOOST_PP_INC_193 194
+# define BOOST_PP_INC_194 195
+# define BOOST_PP_INC_195 196
+# define BOOST_PP_INC_196 197
+# define BOOST_PP_INC_197 198
+# define BOOST_PP_INC_198 199
+# define BOOST_PP_INC_199 200
+# define BOOST_PP_INC_200 201
+# define BOOST_PP_INC_201 202
+# define BOOST_PP_INC_202 203
+# define BOOST_PP_INC_203 204
+# define BOOST_PP_INC_204 205
+# define BOOST_PP_INC_205 206
+# define BOOST_PP_INC_206 207
+# define BOOST_PP_INC_207 208
+# define BOOST_PP_INC_208 209
+# define BOOST_PP_INC_209 210
+# define BOOST_PP_INC_210 211
+# define BOOST_PP_INC_211 212
+# define BOOST_PP_INC_212 213
+# define BOOST_PP_INC_213 214
+# define BOOST_PP_INC_214 215
+# define BOOST_PP_INC_215 216
+# define BOOST_PP_INC_216 217
+# define BOOST_PP_INC_217 218
+# define BOOST_PP_INC_218 219
+# define BOOST_PP_INC_219 220
+# define BOOST_PP_INC_220 221
+# define BOOST_PP_INC_221 222
+# define BOOST_PP_INC_222 223
+# define BOOST_PP_INC_223 224
+# define BOOST_PP_INC_224 225
+# define BOOST_PP_INC_225 226
+# define BOOST_PP_INC_226 227
+# define BOOST_PP_INC_227 228
+# define BOOST_PP_INC_228 229
+# define BOOST_PP_INC_229 230
+# define BOOST_PP_INC_230 231
+# define BOOST_PP_INC_231 232
+# define BOOST_PP_INC_232 233
+# define BOOST_PP_INC_233 234
+# define BOOST_PP_INC_234 235
+# define BOOST_PP_INC_235 236
+# define BOOST_PP_INC_236 237
+# define BOOST_PP_INC_237 238
+# define BOOST_PP_INC_238 239
+# define BOOST_PP_INC_239 240
+# define BOOST_PP_INC_240 241
+# define BOOST_PP_INC_241 242
+# define BOOST_PP_INC_242 243
+# define BOOST_PP_INC_243 244
+# define BOOST_PP_INC_244 245
+# define BOOST_PP_INC_245 246
+# define BOOST_PP_INC_246 247
+# define BOOST_PP_INC_247 248
+# define BOOST_PP_INC_248 249
+# define BOOST_PP_INC_249 250
+# define BOOST_PP_INC_250 251
+# define BOOST_PP_INC_251 252
+# define BOOST_PP_INC_252 253
+# define BOOST_PP_INC_253 254
+# define BOOST_PP_INC_254 255
+# define BOOST_PP_INC_255 256
+# define BOOST_PP_INC_256 256
+#
+# endif
diff --git a/boost/boost/preprocessor/arithmetic/mod.hpp b/boost/boost/preprocessor/arithmetic/mod.hpp
new file mode 100644
index 00000000000..62489d1dbdd
--- /dev/null
+++ b/boost/boost/preprocessor/arithmetic/mod.hpp
@@ -0,0 +1,39 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_ARITHMETIC_MOD_HPP
+# define BOOST_PREPROCESSOR_ARITHMETIC_MOD_HPP
+#
+# include <boost/preprocessor/arithmetic/detail/div_base.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+#
+# /* BOOST_PP_MOD */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_MOD(x, y) BOOST_PP_TUPLE_ELEM(3, 1, BOOST_PP_DIV_BASE(x, y))
+# else
+# define BOOST_PP_MOD(x, y) BOOST_PP_MOD_I(x, y)
+# define BOOST_PP_MOD_I(x, y) BOOST_PP_TUPLE_ELEM(3, 1, BOOST_PP_DIV_BASE(x, y))
+# endif
+#
+# /* BOOST_PP_MOD_D */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_MOD_D(d, x, y) BOOST_PP_TUPLE_ELEM(3, 1, BOOST_PP_DIV_BASE_D(d, x, y))
+# else
+# define BOOST_PP_MOD_D(d, x, y) BOOST_PP_MOD_D_I(d, x, y)
+# define BOOST_PP_MOD_D_I(d, x, y) BOOST_PP_TUPLE_ELEM(3, 1, BOOST_PP_DIV_BASE_D(d, x, y))
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/arithmetic/mul.hpp b/boost/boost/preprocessor/arithmetic/mul.hpp
new file mode 100644
index 00000000000..f3d9ffcf568
--- /dev/null
+++ b/boost/boost/preprocessor/arithmetic/mul.hpp
@@ -0,0 +1,53 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_ARITHMETIC_MUL_HPP
+# define BOOST_PREPROCESSOR_ARITHMETIC_MUL_HPP
+#
+# include <boost/preprocessor/arithmetic/add.hpp>
+# include <boost/preprocessor/arithmetic/dec.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/control/while.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+# include <boost/preprocessor/tuple/rem.hpp>
+#
+# /* BOOST_PP_MUL */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_MUL(x, y) BOOST_PP_TUPLE_ELEM(3, 0, BOOST_PP_WHILE(BOOST_PP_MUL_P, BOOST_PP_MUL_O, (0, x, y)))
+# else
+# define BOOST_PP_MUL(x, y) BOOST_PP_MUL_I(x, y)
+# define BOOST_PP_MUL_I(x, y) BOOST_PP_TUPLE_ELEM(3, 0, BOOST_PP_WHILE(BOOST_PP_MUL_P, BOOST_PP_MUL_O, (0, x, y)))
+# endif
+#
+# define BOOST_PP_MUL_P(d, rxy) BOOST_PP_TUPLE_ELEM(3, 2, rxy)
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()
+# define BOOST_PP_MUL_O(d, rxy) BOOST_PP_MUL_O_IM(d, BOOST_PP_TUPLE_REM_3 rxy)
+# define BOOST_PP_MUL_O_IM(d, im) BOOST_PP_MUL_O_I(d, im)
+# else
+# define BOOST_PP_MUL_O(d, rxy) BOOST_PP_MUL_O_I(d, BOOST_PP_TUPLE_ELEM(3, 0, rxy), BOOST_PP_TUPLE_ELEM(3, 1, rxy), BOOST_PP_TUPLE_ELEM(3, 2, rxy))
+# endif
+#
+# define BOOST_PP_MUL_O_I(d, r, x, y) (BOOST_PP_ADD_D(d, r, x), x, BOOST_PP_DEC(y))
+#
+# /* BOOST_PP_MUL_D */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_MUL_D(d, x, y) BOOST_PP_TUPLE_ELEM(3, 0, BOOST_PP_WHILE_ ## d(BOOST_PP_MUL_P, BOOST_PP_MUL_O, (0, x, y)))
+# else
+# define BOOST_PP_MUL_D(d, x, y) BOOST_PP_MUL_D_I(d, x, y)
+# define BOOST_PP_MUL_D_I(d, x, y) BOOST_PP_TUPLE_ELEM(3, 0, BOOST_PP_WHILE_ ## d(BOOST_PP_MUL_P, BOOST_PP_MUL_O, (0, x, y)))
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/arithmetic/sub.hpp b/boost/boost/preprocessor/arithmetic/sub.hpp
new file mode 100644
index 00000000000..5262cdaff8c
--- /dev/null
+++ b/boost/boost/preprocessor/arithmetic/sub.hpp
@@ -0,0 +1,50 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_ARITHMETIC_SUB_HPP
+# define BOOST_PREPROCESSOR_ARITHMETIC_SUB_HPP
+#
+# include <boost/preprocessor/arithmetic/dec.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/control/while.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+#
+# /* BOOST_PP_SUB */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_SUB(x, y) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE(BOOST_PP_SUB_P, BOOST_PP_SUB_O, (x, y)))
+# else
+# define BOOST_PP_SUB(x, y) BOOST_PP_SUB_I(x, y)
+# define BOOST_PP_SUB_I(x, y) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE(BOOST_PP_SUB_P, BOOST_PP_SUB_O, (x, y)))
+# endif
+#
+# define BOOST_PP_SUB_P(d, xy) BOOST_PP_TUPLE_ELEM(2, 1, xy)
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+# define BOOST_PP_SUB_O(d, xy) BOOST_PP_SUB_O_I xy
+# else
+# define BOOST_PP_SUB_O(d, xy) BOOST_PP_SUB_O_I(BOOST_PP_TUPLE_ELEM(2, 0, xy), BOOST_PP_TUPLE_ELEM(2, 1, xy))
+# endif
+#
+# define BOOST_PP_SUB_O_I(x, y) (BOOST_PP_DEC(x), BOOST_PP_DEC(y))
+#
+# /* BOOST_PP_SUB_D */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_SUB_D(d, x, y) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE_ ## d(BOOST_PP_SUB_P, BOOST_PP_SUB_O, (x, y)))
+# else
+# define BOOST_PP_SUB_D(d, x, y) BOOST_PP_SUB_D_I(d, x, y)
+# define BOOST_PP_SUB_D_I(d, x, y) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE_ ## d(BOOST_PP_SUB_P, BOOST_PP_SUB_O, (x, y)))
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/array.hpp b/boost/boost/preprocessor/array.hpp
new file mode 100644
index 00000000000..031827d6dd0
--- /dev/null
+++ b/boost/boost/preprocessor/array.hpp
@@ -0,0 +1,27 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_ARRAY_HPP
+# define BOOST_PREPROCESSOR_ARRAY_HPP
+#
+# include <boost/preprocessor/array/data.hpp>
+# include <boost/preprocessor/array/elem.hpp>
+# include <boost/preprocessor/array/insert.hpp>
+# include <boost/preprocessor/array/pop_back.hpp>
+# include <boost/preprocessor/array/pop_front.hpp>
+# include <boost/preprocessor/array/push_back.hpp>
+# include <boost/preprocessor/array/push_front.hpp>
+# include <boost/preprocessor/array/remove.hpp>
+# include <boost/preprocessor/array/replace.hpp>
+# include <boost/preprocessor/array/reverse.hpp>
+# include <boost/preprocessor/array/size.hpp>
+#
+# endif
diff --git a/boost/boost/preprocessor/array/data.hpp b/boost/boost/preprocessor/array/data.hpp
new file mode 100644
index 00000000000..10c926a750e
--- /dev/null
+++ b/boost/boost/preprocessor/array/data.hpp
@@ -0,0 +1,28 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_ARRAY_DATA_HPP
+# define BOOST_PREPROCESSOR_ARRAY_DATA_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+#
+# /* BOOST_PP_ARRAY_DATA */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_ARRAY_DATA(array) BOOST_PP_TUPLE_ELEM(2, 1, array)
+# else
+# define BOOST_PP_ARRAY_DATA(array) BOOST_PP_ARRAY_DATA_I(array)
+# define BOOST_PP_ARRAY_DATA_I(array) BOOST_PP_ARRAY_DATA_II array
+# define BOOST_PP_ARRAY_DATA_II(size, data) data
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/array/elem.hpp b/boost/boost/preprocessor/array/elem.hpp
new file mode 100644
index 00000000000..105ba24e31d
--- /dev/null
+++ b/boost/boost/preprocessor/array/elem.hpp
@@ -0,0 +1,29 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_ARRAY_ELEM_HPP
+# define BOOST_PREPROCESSOR_ARRAY_ELEM_HPP
+#
+# include <boost/preprocessor/array/data.hpp>
+# include <boost/preprocessor/array/size.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+#
+# /* BOOST_PP_ARRAY_ELEM */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_ARRAY_ELEM(i, array) BOOST_PP_TUPLE_ELEM(BOOST_PP_ARRAY_SIZE(array), i, BOOST_PP_ARRAY_DATA(array))
+# else
+# define BOOST_PP_ARRAY_ELEM(i, array) BOOST_PP_ARRAY_ELEM_I(i, array)
+# define BOOST_PP_ARRAY_ELEM_I(i, array) BOOST_PP_TUPLE_ELEM(BOOST_PP_ARRAY_SIZE(array), i, BOOST_PP_ARRAY_DATA(array))
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/array/insert.hpp b/boost/boost/preprocessor/array/insert.hpp
new file mode 100644
index 00000000000..b8fe5b8f8a8
--- /dev/null
+++ b/boost/boost/preprocessor/array/insert.hpp
@@ -0,0 +1,55 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_ARRAY_INSERT_HPP
+# define BOOST_PREPROCESSOR_ARRAY_INSERT_HPP
+#
+# include <boost/preprocessor/arithmetic/inc.hpp>
+# include <boost/preprocessor/array/elem.hpp>
+# include <boost/preprocessor/array/push_back.hpp>
+# include <boost/preprocessor/array/size.hpp>
+# include <boost/preprocessor/comparison/not_equal.hpp>
+# include <boost/preprocessor/control/deduce_d.hpp>
+# include <boost/preprocessor/control/iif.hpp>
+# include <boost/preprocessor/control/while.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+#
+# /* BOOST_PP_ARRAY_INSERT */
+#
+# define BOOST_PP_ARRAY_INSERT(array, i, elem) BOOST_PP_ARRAY_INSERT_I(BOOST_PP_DEDUCE_D(), array, i, elem)
+# define BOOST_PP_ARRAY_INSERT_I(d, array, i, elem) BOOST_PP_ARRAY_INSERT_D(d, array, i, elem)
+#
+# /* BOOST_PP_ARRAY_INSERT_D */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_ARRAY_INSERT_D(d, array, i, elem) BOOST_PP_TUPLE_ELEM(5, 3, BOOST_PP_WHILE_ ## d(BOOST_PP_ARRAY_INSERT_P, BOOST_PP_ARRAY_INSERT_O, (0, i, elem, (0, ()), array)))
+# else
+# define BOOST_PP_ARRAY_INSERT_D(d, array, i, elem) BOOST_PP_ARRAY_INSERT_D_I(d, array, i, elem)
+# define BOOST_PP_ARRAY_INSERT_D_I(d, array, i, elem) BOOST_PP_TUPLE_ELEM(5, 3, BOOST_PP_WHILE_ ## d(BOOST_PP_ARRAY_INSERT_P, BOOST_PP_ARRAY_INSERT_O, (0, i, elem, (0, ()), array)))
+# endif
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()
+# define BOOST_PP_ARRAY_INSERT_P(d, state) BOOST_PP_ARRAY_INSERT_P_I state
+# else
+# define BOOST_PP_ARRAY_INSERT_P(d, state) BOOST_PP_ARRAY_INSERT_P_I(nil, nil, nil, BOOST_PP_TUPLE_ELEM(5, 3, state), BOOST_PP_TUPLE_ELEM(5, 4, state))
+# endif
+#
+# define BOOST_PP_ARRAY_INSERT_P_I(_i, _ii, _iii, res, arr) BOOST_PP_NOT_EQUAL(BOOST_PP_ARRAY_SIZE(res), BOOST_PP_INC(BOOST_PP_ARRAY_SIZE(arr)))
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()
+# define BOOST_PP_ARRAY_INSERT_O(d, state) BOOST_PP_ARRAY_INSERT_O_I state
+# else
+# define BOOST_PP_ARRAY_INSERT_O(d, state) BOOST_PP_ARRAY_INSERT_O_I(BOOST_PP_TUPLE_ELEM(5, 0, state), BOOST_PP_TUPLE_ELEM(5, 1, state), BOOST_PP_TUPLE_ELEM(5, 2, state), BOOST_PP_TUPLE_ELEM(5, 3, state), BOOST_PP_TUPLE_ELEM(5, 4, state))
+# endif
+#
+# define BOOST_PP_ARRAY_INSERT_O_I(n, i, elem, res, arr) (BOOST_PP_IIF(BOOST_PP_NOT_EQUAL(BOOST_PP_ARRAY_SIZE(res), i), BOOST_PP_INC(n), n), i, elem, BOOST_PP_ARRAY_PUSH_BACK(res, BOOST_PP_IIF(BOOST_PP_NOT_EQUAL(BOOST_PP_ARRAY_SIZE(res), i), BOOST_PP_ARRAY_ELEM(n, arr), elem)), arr)
+#
+# endif
diff --git a/boost/boost/preprocessor/array/pop_back.hpp b/boost/boost/preprocessor/array/pop_back.hpp
new file mode 100644
index 00000000000..29d2a45b756
--- /dev/null
+++ b/boost/boost/preprocessor/array/pop_back.hpp
@@ -0,0 +1,37 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_ARRAY_POP_BACK_HPP
+# define BOOST_PREPROCESSOR_ARRAY_POP_BACK_HPP
+#
+# include <boost/preprocessor/arithmetic/dec.hpp>
+# include <boost/preprocessor/array/elem.hpp>
+# include <boost/preprocessor/array/size.hpp>
+# include <boost/preprocessor/repetition/enum.hpp>
+# include <boost/preprocessor/repetition/deduce_z.hpp>
+#
+# /* BOOST_PP_ARRAY_POP_BACK */
+#
+# define BOOST_PP_ARRAY_POP_BACK(array) BOOST_PP_ARRAY_POP_BACK_Z(BOOST_PP_DEDUCE_Z(), array)
+#
+# /* BOOST_PP_ARRAY_POP_BACK_Z */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_ARRAY_POP_BACK_Z(z, array) BOOST_PP_ARRAY_POP_BACK_I(z, BOOST_PP_ARRAY_SIZE(array), array)
+# else
+# define BOOST_PP_ARRAY_POP_BACK_Z(z, array) BOOST_PP_ARRAY_POP_BACK_Z_D(z, array)
+# define BOOST_PP_ARRAY_POP_BACK_Z_D(z, array) BOOST_PP_ARRAY_POP_BACK_I(z, BOOST_PP_ARRAY_SIZE(array), array)
+# endif
+#
+# define BOOST_PP_ARRAY_POP_BACK_I(z, size, array) (BOOST_PP_DEC(size), (BOOST_PP_ENUM_ ## z(BOOST_PP_DEC(size), BOOST_PP_ARRAY_POP_BACK_M, array)))
+# define BOOST_PP_ARRAY_POP_BACK_M(z, n, data) BOOST_PP_ARRAY_ELEM(n, data)
+#
+# endif
diff --git a/boost/boost/preprocessor/array/pop_front.hpp b/boost/boost/preprocessor/array/pop_front.hpp
new file mode 100644
index 00000000000..7d9069c5aae
--- /dev/null
+++ b/boost/boost/preprocessor/array/pop_front.hpp
@@ -0,0 +1,38 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_ARRAY_POP_FRONT_HPP
+# define BOOST_PREPROCESSOR_ARRAY_POP_FRONT_HPP
+#
+# include <boost/preprocessor/arithmetic/dec.hpp>
+# include <boost/preprocessor/arithmetic/inc.hpp>
+# include <boost/preprocessor/array/elem.hpp>
+# include <boost/preprocessor/array/size.hpp>
+# include <boost/preprocessor/repetition/enum.hpp>
+# include <boost/preprocessor/repetition/deduce_z.hpp>
+#
+# /* BOOST_PP_ARRAY_POP_FRONT */
+#
+# define BOOST_PP_ARRAY_POP_FRONT(array) BOOST_PP_ARRAY_POP_FRONT_Z(BOOST_PP_DEDUCE_Z(), array)
+#
+# /* BOOST_PP_ARRAY_POP_FRONT_Z */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_ARRAY_POP_FRONT_Z(z, array) BOOST_PP_ARRAY_POP_FRONT_I(z, BOOST_PP_ARRAY_SIZE(array), array)
+# else
+# define BOOST_PP_ARRAY_POP_FRONT_Z(z, array) BOOST_PP_ARRAY_POP_FRONT_Z_D(z, array)
+# define BOOST_PP_ARRAY_POP_FRONT_Z_D(z, array) BOOST_PP_ARRAY_POP_FRONT_I(z, BOOST_PP_ARRAY_SIZE(array), array)
+# endif
+#
+# define BOOST_PP_ARRAY_POP_FRONT_I(z, size, array) (BOOST_PP_DEC(size), (BOOST_PP_ENUM_ ## z(BOOST_PP_DEC(size), BOOST_PP_ARRAY_POP_FRONT_M, array)))
+# define BOOST_PP_ARRAY_POP_FRONT_M(z, n, data) BOOST_PP_ARRAY_ELEM(BOOST_PP_INC(n), data)
+#
+# endif
diff --git a/boost/boost/preprocessor/array/push_back.hpp b/boost/boost/preprocessor/array/push_back.hpp
new file mode 100644
index 00000000000..6d98d8ee4e9
--- /dev/null
+++ b/boost/boost/preprocessor/array/push_back.hpp
@@ -0,0 +1,33 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_ARRAY_PUSH_BACK_HPP
+# define BOOST_PREPROCESSOR_ARRAY_PUSH_BACK_HPP
+#
+# include <boost/preprocessor/arithmetic/inc.hpp>
+# include <boost/preprocessor/array/data.hpp>
+# include <boost/preprocessor/array/size.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/punctuation/comma_if.hpp>
+# include <boost/preprocessor/tuple/rem.hpp>
+#
+# /* BOOST_PP_ARRAY_PUSH_BACK */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_ARRAY_PUSH_BACK(array, elem) BOOST_PP_ARRAY_PUSH_BACK_I(BOOST_PP_ARRAY_SIZE(array), BOOST_PP_ARRAY_DATA(array), elem)
+# else
+# define BOOST_PP_ARRAY_PUSH_BACK(array, elem) BOOST_PP_ARRAY_PUSH_BACK_D(array, elem)
+# define BOOST_PP_ARRAY_PUSH_BACK_D(array, elem) BOOST_PP_ARRAY_PUSH_BACK_I(BOOST_PP_ARRAY_SIZE(array), BOOST_PP_ARRAY_DATA(array), elem)
+# endif
+#
+# define BOOST_PP_ARRAY_PUSH_BACK_I(size, data, elem) (BOOST_PP_INC(size), (BOOST_PP_TUPLE_REM(size) data BOOST_PP_COMMA_IF(size) elem))
+#
+# endif
diff --git a/boost/boost/preprocessor/array/push_front.hpp b/boost/boost/preprocessor/array/push_front.hpp
new file mode 100644
index 00000000000..59344c312f6
--- /dev/null
+++ b/boost/boost/preprocessor/array/push_front.hpp
@@ -0,0 +1,33 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_ARRAY_PUSH_FRONT_HPP
+# define BOOST_PREPROCESSOR_ARRAY_PUSH_FRONT_HPP
+#
+# include <boost/preprocessor/arithmetic/inc.hpp>
+# include <boost/preprocessor/array/data.hpp>
+# include <boost/preprocessor/array/size.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/punctuation/comma_if.hpp>
+# include <boost/preprocessor/tuple/rem.hpp>
+#
+# /* BOOST_PP_ARRAY_PUSH_FRONT */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_ARRAY_PUSH_FRONT(array, elem) BOOST_PP_ARRAY_PUSH_FRONT_I(BOOST_PP_ARRAY_SIZE(array), BOOST_PP_ARRAY_DATA(array), elem)
+# else
+# define BOOST_PP_ARRAY_PUSH_FRONT(array, elem) BOOST_PP_ARRAY_PUSH_FRONT_D(array, elem)
+# define BOOST_PP_ARRAY_PUSH_FRONT_D(array, elem) BOOST_PP_ARRAY_PUSH_FRONT_I(BOOST_PP_ARRAY_SIZE(array), BOOST_PP_ARRAY_DATA(array), elem)
+# endif
+#
+# define BOOST_PP_ARRAY_PUSH_FRONT_I(size, data, elem) (BOOST_PP_INC(size), (elem BOOST_PP_COMMA_IF(size) BOOST_PP_TUPLE_REM(size) data))
+#
+# endif
diff --git a/boost/boost/preprocessor/array/remove.hpp b/boost/boost/preprocessor/array/remove.hpp
new file mode 100644
index 00000000000..02609000ba8
--- /dev/null
+++ b/boost/boost/preprocessor/array/remove.hpp
@@ -0,0 +1,54 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_ARRAY_REMOVE_HPP
+# define BOOST_PREPROCESSOR_ARRAY_REMOVE_HPP
+#
+# include <boost/preprocessor/arithmetic/inc.hpp>
+# include <boost/preprocessor/array/elem.hpp>
+# include <boost/preprocessor/array/push_back.hpp>
+# include <boost/preprocessor/array/size.hpp>
+# include <boost/preprocessor/comparison/not_equal.hpp>
+# include <boost/preprocessor/control/deduce_d.hpp>
+# include <boost/preprocessor/control/iif.hpp>
+# include <boost/preprocessor/control/while.hpp>
+# include <boost/preprocessor/tuple/eat.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+#
+# /* BOOST_PP_ARRAY_REMOVE */
+#
+# define BOOST_PP_ARRAY_REMOVE(array, i) BOOST_PP_ARRAY_REMOVE_I(BOOST_PP_DEDUCE_D(), array, i)
+# define BOOST_PP_ARRAY_REMOVE_I(d, array, i) BOOST_PP_ARRAY_REMOVE_D(d, array, i)
+#
+# /* BOOST_PP_ARRAY_REMOVE_D */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_ARRAY_REMOVE_D(d, array, i) BOOST_PP_TUPLE_ELEM(4, 2, BOOST_PP_WHILE_ ## d(BOOST_PP_ARRAY_REMOVE_P, BOOST_PP_ARRAY_REMOVE_O, (0, i, (0, ()), array)))
+# else
+# define BOOST_PP_ARRAY_REMOVE_D(d, array, i) BOOST_PP_ARRAY_REMOVE_D_I(d, array, i)
+# define BOOST_PP_ARRAY_REMOVE_D_I(d, array, i) BOOST_PP_TUPLE_ELEM(4, 2, BOOST_PP_WHILE_ ## d(BOOST_PP_ARRAY_REMOVE_P, BOOST_PP_ARRAY_REMOVE_O, (0, i, (0, ()), array)))
+# endif
+#
+# define BOOST_PP_ARRAY_REMOVE_P(d, st) BOOST_PP_NOT_EQUAL(BOOST_PP_TUPLE_ELEM(4, 0, st), BOOST_PP_ARRAY_SIZE(BOOST_PP_TUPLE_ELEM(4, 3, st)))
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()
+# define BOOST_PP_ARRAY_REMOVE_O(d, st) BOOST_PP_ARRAY_REMOVE_O_I st
+# else
+# define BOOST_PP_ARRAY_REMOVE_O(d, st) BOOST_PP_ARRAY_REMOVE_O_I(BOOST_PP_TUPLE_ELEM(4, 0, st), BOOST_PP_TUPLE_ELEM(4, 1, st), BOOST_PP_TUPLE_ELEM(4, 2, st), BOOST_PP_TUPLE_ELEM(4, 3, st))
+# endif
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_DMC()
+# define BOOST_PP_ARRAY_REMOVE_O_I(n, i, res, arr) (BOOST_PP_INC(n), i, BOOST_PP_IIF(BOOST_PP_NOT_EQUAL(n, i), BOOST_PP_ARRAY_PUSH_BACK, res BOOST_PP_TUPLE_EAT_2)(res, BOOST_PP_ARRAY_ELEM(n, arr)), arr)
+# else
+# define BOOST_PP_ARRAY_REMOVE_O_I(n, i, res, arr) (BOOST_PP_INC(n), i, BOOST_PP_IIF(BOOST_PP_NOT_EQUAL(n, i), BOOST_PP_ARRAY_PUSH_BACK, BOOST_PP_TUPLE_ELEM_2_0)(res, BOOST_PP_ARRAY_ELEM(n, arr)), arr)
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/array/replace.hpp b/boost/boost/preprocessor/array/replace.hpp
new file mode 100644
index 00000000000..10a1f097675
--- /dev/null
+++ b/boost/boost/preprocessor/array/replace.hpp
@@ -0,0 +1,49 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_ARRAY_REPLACE_HPP
+# define BOOST_PREPROCESSOR_ARRAY_REPLACE_HPP
+#
+# include <boost/preprocessor/arithmetic/inc.hpp>
+# include <boost/preprocessor/array/elem.hpp>
+# include <boost/preprocessor/array/push_back.hpp>
+# include <boost/preprocessor/comparison/not_equal.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/control/deduce_d.hpp>
+# include <boost/preprocessor/control/iif.hpp>
+# include <boost/preprocessor/control/while.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+#
+# /* BOOST_PP_ARRAY_REPLACE */
+#
+# define BOOST_PP_ARRAY_REPLACE(array, i, elem) BOOST_PP_ARRAY_REPLACE_I(BOOST_PP_DEDUCE_D(), array, i, elem)
+# define BOOST_PP_ARRAY_REPLACE_I(d, array, i, elem) BOOST_PP_ARRAY_REPLACE_D(d, array, i, elem)
+#
+# /* BOOST_PP_ARRAY_REPLACE_D */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_ARRAY_REPLACE_D(d, array, i, elem) BOOST_PP_TUPLE_ELEM(5, 3, BOOST_PP_WHILE_ ## d(BOOST_PP_ARRAY_REPLACE_P, BOOST_PP_ARRAY_REPLACE_O, (0, i, elem, (0, ()), array)))
+# else
+# define BOOST_PP_ARRAY_REPLACE_D(d, array, i, elem) BOOST_PP_ARRAY_REPLACE_D_I(d, array, i, elem)
+# define BOOST_PP_ARRAY_REPLACE_D_I(d, array, i, elem) BOOST_PP_TUPLE_ELEM(5, 3, BOOST_PP_WHILE_ ## d(BOOST_PP_ARRAY_REPLACE_P, BOOST_PP_ARRAY_REPLACE_O, (0, i, elem, (0, ()), array)))
+# endif
+#
+# define BOOST_PP_ARRAY_REPLACE_P(d, state) BOOST_PP_NOT_EQUAL(BOOST_PP_TUPLE_ELEM(5, 0, state), BOOST_PP_ARRAY_SIZE(BOOST_PP_TUPLE_ELEM(5, 4, state)))
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()
+# define BOOST_PP_ARRAY_REPLACE_O(d, state) BOOST_PP_ARRAY_REPLACE_O_I state
+# else
+# define BOOST_PP_ARRAY_REPLACE_O(d, state) BOOST_PP_ARRAY_REPLACE_O_I(BOOST_PP_TUPLE_ELEM(5, 0, state), BOOST_PP_TUPLE_ELEM(5, 1, state), BOOST_PP_TUPLE_ELEM(5, 2, state), BOOST_PP_TUPLE_ELEM(5, 3, state), BOOST_PP_TUPLE_ELEM(5, 4, state))
+# endif
+#
+# define BOOST_PP_ARRAY_REPLACE_O_I(n, i, elem, res, arr) (BOOST_PP_INC(n), i, elem, BOOST_PP_ARRAY_PUSH_BACK(res, BOOST_PP_IIF(BOOST_PP_NOT_EQUAL(n, i), BOOST_PP_ARRAY_ELEM(n, arr), elem)), arr)
+#
+# endif
diff --git a/boost/boost/preprocessor/array/reverse.hpp b/boost/boost/preprocessor/array/reverse.hpp
new file mode 100644
index 00000000000..a6a4f75c706
--- /dev/null
+++ b/boost/boost/preprocessor/array/reverse.hpp
@@ -0,0 +1,29 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_ARRAY_REVERSE_HPP
+# define BOOST_PREPROCESSOR_ARRAY_REVERSE_HPP
+#
+# include <boost/preprocessor/array/data.hpp>
+# include <boost/preprocessor/array/size.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/tuple/reverse.hpp>
+#
+# /* BOOST_PP_ARRAY_REVERSE */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_ARRAY_REVERSE(array) (BOOST_PP_ARRAY_SIZE(array), BOOST_PP_TUPLE_REVERSE(BOOST_PP_ARRAY_SIZE(array), BOOST_PP_ARRAY_DATA(array)))
+# else
+# define BOOST_PP_ARRAY_REVERSE(array) BOOST_PP_ARRAY_REVERSE_I(array)
+# define BOOST_PP_ARRAY_REVERSE_I(array) (BOOST_PP_ARRAY_SIZE(array), BOOST_PP_TUPLE_REVERSE(BOOST_PP_ARRAY_SIZE(array), BOOST_PP_ARRAY_DATA(array)))
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/array/size.hpp b/boost/boost/preprocessor/array/size.hpp
new file mode 100644
index 00000000000..3f370ee41b8
--- /dev/null
+++ b/boost/boost/preprocessor/array/size.hpp
@@ -0,0 +1,28 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_ARRAY_SIZE_HPP
+# define BOOST_PREPROCESSOR_ARRAY_SIZE_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+#
+# /* BOOST_PP_ARRAY_SIZE */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_ARRAY_SIZE(array) BOOST_PP_TUPLE_ELEM(2, 0, array)
+# else
+# define BOOST_PP_ARRAY_SIZE(array) BOOST_PP_ARRAY_SIZE_I(array)
+# define BOOST_PP_ARRAY_SIZE_I(array) BOOST_PP_ARRAY_SIZE_II array
+# define BOOST_PP_ARRAY_SIZE_II(size, data) size
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/assert_msg.hpp b/boost/boost/preprocessor/assert_msg.hpp
new file mode 100644
index 00000000000..924dba1d9f8
--- /dev/null
+++ b/boost/boost/preprocessor/assert_msg.hpp
@@ -0,0 +1,17 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_ASSERT_MSG_HPP
+# define BOOST_PREPROCESSOR_ASSERT_MSG_HPP
+#
+# include <boost/preprocessor/debug/assert.hpp>
+#
+# endif
diff --git a/boost/boost/preprocessor/cat.hpp b/boost/boost/preprocessor/cat.hpp
new file mode 100644
index 00000000000..b2a82c06912
--- /dev/null
+++ b/boost/boost/preprocessor/cat.hpp
@@ -0,0 +1,35 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_CAT_HPP
+# define BOOST_PREPROCESSOR_CAT_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+#
+# /* BOOST_PP_CAT */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+# define BOOST_PP_CAT(a, b) BOOST_PP_CAT_I(a, b)
+# else
+# define BOOST_PP_CAT(a, b) BOOST_PP_CAT_OO((a, b))
+# define BOOST_PP_CAT_OO(par) BOOST_PP_CAT_I ## par
+# endif
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()
+# define BOOST_PP_CAT_I(a, b) a ## b
+# else
+# define BOOST_PP_CAT_I(a, b) BOOST_PP_CAT_II(a ## b)
+# define BOOST_PP_CAT_II(res) res
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/comma.hpp b/boost/boost/preprocessor/comma.hpp
new file mode 100644
index 00000000000..6e02fb6131a
--- /dev/null
+++ b/boost/boost/preprocessor/comma.hpp
@@ -0,0 +1,17 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_COMMA_HPP
+# define BOOST_PREPROCESSOR_COMMA_HPP
+#
+# include <boost/preprocessor/punctuation/comma.hpp>
+#
+# endif
diff --git a/boost/boost/preprocessor/comma_if.hpp b/boost/boost/preprocessor/comma_if.hpp
new file mode 100644
index 00000000000..9ceb0795558
--- /dev/null
+++ b/boost/boost/preprocessor/comma_if.hpp
@@ -0,0 +1,17 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_COMMA_IF_HPP
+# define BOOST_PREPROCESSOR_COMMA_IF_HPP
+#
+# include <boost/preprocessor/punctuation/comma_if.hpp>
+#
+# endif
diff --git a/boost/boost/preprocessor/comparison.hpp b/boost/boost/preprocessor/comparison.hpp
new file mode 100644
index 00000000000..b09ac8f97b1
--- /dev/null
+++ b/boost/boost/preprocessor/comparison.hpp
@@ -0,0 +1,24 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_COMPARISON_HPP
+# define BOOST_PREPROCESSOR_COMPARISON_HPP
+#
+# include <boost/preprocessor/comparison/equal.hpp>
+# include <boost/preprocessor/comparison/greater.hpp>
+# include <boost/preprocessor/comparison/greater_equal.hpp>
+# include <boost/preprocessor/comparison/less.hpp>
+# include <boost/preprocessor/comparison/less_equal.hpp>
+# include <boost/preprocessor/comparison/not_equal.hpp>
+#
+# endif
diff --git a/boost/boost/preprocessor/comparison/equal.hpp b/boost/boost/preprocessor/comparison/equal.hpp
new file mode 100644
index 00000000000..d299efe5869
--- /dev/null
+++ b/boost/boost/preprocessor/comparison/equal.hpp
@@ -0,0 +1,34 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_COMPARISON_EQUAL_HPP
+# define BOOST_PREPROCESSOR_COMPARISON_EQUAL_HPP
+#
+# include <boost/preprocessor/comparison/not_equal.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/logical/compl.hpp>
+#
+# /* BOOST_PP_EQUAL */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_EQUAL(x, y) BOOST_PP_COMPL(BOOST_PP_NOT_EQUAL(x, y))
+# else
+# define BOOST_PP_EQUAL(x, y) BOOST_PP_EQUAL_I(x, y)
+# define BOOST_PP_EQUAL_I(x, y) BOOST_PP_COMPL(BOOST_PP_NOT_EQUAL(x, y))
+# endif
+#
+# /* BOOST_PP_EQUAL_D */
+#
+# define BOOST_PP_EQUAL_D(d, x, y) BOOST_PP_EQUAL(x, y)
+#
+# endif
diff --git a/boost/boost/preprocessor/comparison/greater.hpp b/boost/boost/preprocessor/comparison/greater.hpp
new file mode 100644
index 00000000000..83d2fcf2376
--- /dev/null
+++ b/boost/boost/preprocessor/comparison/greater.hpp
@@ -0,0 +1,38 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_COMPARISON_GREATER_HPP
+# define BOOST_PREPROCESSOR_COMPARISON_GREATER_HPP
+#
+# include <boost/preprocessor/comparison/less.hpp>
+# include <boost/preprocessor/config/config.hpp>
+#
+# /* BOOST_PP_GREATER */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_GREATER(x, y) BOOST_PP_LESS(y, x)
+# else
+# define BOOST_PP_GREATER(x, y) BOOST_PP_GREATER_I(x, y)
+# define BOOST_PP_GREATER_I(x, y) BOOST_PP_LESS(y, x)
+# endif
+#
+# /* BOOST_PP_GREATER_D */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_GREATER_D(d, x, y) BOOST_PP_LESS_D(d, y, x)
+# else
+# define BOOST_PP_GREATER_D(d, x, y) BOOST_PP_GREATER_D_I(d, x, y)
+# define BOOST_PP_GREATER_D_I(d, x, y) BOOST_PP_LESS_D(d, y, x)
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/comparison/greater_equal.hpp b/boost/boost/preprocessor/comparison/greater_equal.hpp
new file mode 100644
index 00000000000..beaeaff6bf1
--- /dev/null
+++ b/boost/boost/preprocessor/comparison/greater_equal.hpp
@@ -0,0 +1,38 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_COMPARISON_GREATER_EQUAL_HPP
+# define BOOST_PREPROCESSOR_COMPARISON_GREATER_EQUAL_HPP
+#
+# include <boost/preprocessor/comparison/less_equal.hpp>
+# include <boost/preprocessor/config/config.hpp>
+#
+# /* BOOST_PP_GREATER_EQUAL */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_GREATER_EQUAL(x, y) BOOST_PP_LESS_EQUAL(y, x)
+# else
+# define BOOST_PP_GREATER_EQUAL(x, y) BOOST_PP_GREATER_EQUAL_I(x, y)
+# define BOOST_PP_GREATER_EQUAL_I(x, y) BOOST_PP_LESS_EQUAL(y, x)
+# endif
+#
+# /* BOOST_PP_GREATER_EQUAL_D */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_GREATER_EQUAL_D(d, x, y) BOOST_PP_LESS_EQUAL_D(d, y, x)
+# else
+# define BOOST_PP_GREATER_EQUAL_D(d, x, y) BOOST_PP_GREATER_EQUAL_D_I(d, x, y)
+# define BOOST_PP_GREATER_EQUAL_D_I(d, x, y) BOOST_PP_LESS_EQUAL_D(d, y, x)
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/comparison/less.hpp b/boost/boost/preprocessor/comparison/less.hpp
new file mode 100644
index 00000000000..d91ea3d02e1
--- /dev/null
+++ b/boost/boost/preprocessor/comparison/less.hpp
@@ -0,0 +1,46 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_COMPARISON_LESS_HPP
+# define BOOST_PREPROCESSOR_COMPARISON_LESS_HPP
+#
+# include <boost/preprocessor/comparison/less_equal.hpp>
+# include <boost/preprocessor/comparison/not_equal.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/control/iif.hpp>
+# include <boost/preprocessor/logical/bitand.hpp>
+# include <boost/preprocessor/tuple/eat.hpp>
+#
+# /* BOOST_PP_LESS */
+#
+# if BOOST_PP_CONFIG_FLAGS() & (BOOST_PP_CONFIG_MWCC() | BOOST_PP_CONFIG_DMC())
+# define BOOST_PP_LESS(x, y) BOOST_PP_BITAND(BOOST_PP_NOT_EQUAL(x, y), BOOST_PP_LESS_EQUAL(x, y))
+# elif ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_LESS(x, y) BOOST_PP_IIF(BOOST_PP_NOT_EQUAL(x, y), BOOST_PP_LESS_EQUAL, 0 BOOST_PP_TUPLE_EAT_2)(x, y)
+# else
+# define BOOST_PP_LESS(x, y) BOOST_PP_LESS_I(x, y)
+# define BOOST_PP_LESS_I(x, y) BOOST_PP_IIF(BOOST_PP_NOT_EQUAL(x, y), BOOST_PP_LESS_EQUAL, 0 BOOST_PP_TUPLE_EAT_2)(x, y)
+# endif
+#
+# /* BOOST_PP_LESS_D */
+#
+# if BOOST_PP_CONFIG_FLAGS() & (BOOST_PP_CONFIG_MWCC() | BOOST_PP_CONFIG_DMC())
+# define BOOST_PP_LESS_D(d, x, y) BOOST_PP_BITAND(BOOST_PP_NOT_EQUAL(x, y), BOOST_PP_LESS_EQUAL_D(d, x, y))
+# elif ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_LESS_D(d, x, y) BOOST_PP_IIF(BOOST_PP_NOT_EQUAL(x, y), BOOST_PP_LESS_EQUAL_D, 0 BOOST_PP_TUPLE_EAT_3)(d, x, y)
+# else
+# define BOOST_PP_LESS_D(d, x, y) BOOST_PP_LESS_D_I(d, x, y)
+# define BOOST_PP_LESS_D_I(d, x, y) BOOST_PP_IIF(BOOST_PP_NOT_EQUAL(x, y), BOOST_PP_LESS_EQUAL_D, 0 BOOST_PP_TUPLE_EAT_3)(d, x, y)
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/comparison/less_equal.hpp b/boost/boost/preprocessor/comparison/less_equal.hpp
new file mode 100644
index 00000000000..1302d5470aa
--- /dev/null
+++ b/boost/boost/preprocessor/comparison/less_equal.hpp
@@ -0,0 +1,39 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_COMPARISON_LESS_EQUAL_HPP
+# define BOOST_PREPROCESSOR_COMPARISON_LESS_EQUAL_HPP
+#
+# include <boost/preprocessor/arithmetic/sub.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/logical/not.hpp>
+#
+# /* BOOST_PP_LESS_EQUAL */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_LESS_EQUAL(x, y) BOOST_PP_NOT(BOOST_PP_SUB(x, y))
+# else
+# define BOOST_PP_LESS_EQUAL(x, y) BOOST_PP_LESS_EQUAL_I(x, y)
+# define BOOST_PP_LESS_EQUAL_I(x, y) BOOST_PP_NOT(BOOST_PP_SUB(x, y))
+# endif
+#
+# /* BOOST_PP_LESS_EQUAL_D */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_LESS_EQUAL_D(d, x, y) BOOST_PP_NOT(BOOST_PP_SUB_D(d, x, y))
+# else
+# define BOOST_PP_LESS_EQUAL_D(d, x, y) BOOST_PP_LESS_EQUAL_D_I(d, x, y)
+# define BOOST_PP_LESS_EQUAL_D_I(d, x, y) BOOST_PP_NOT(BOOST_PP_SUB_D(d, x, y))
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/comparison/not_equal.hpp b/boost/boost/preprocessor/comparison/not_equal.hpp
new file mode 100644
index 00000000000..b4b0eae129d
--- /dev/null
+++ b/boost/boost/preprocessor/comparison/not_equal.hpp
@@ -0,0 +1,814 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_COMPARISON_NOT_EQUAL_HPP
+# define BOOST_PREPROCESSOR_COMPARISON_NOT_EQUAL_HPP
+#
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/control/iif.hpp>
+#
+# /* BOOST_PP_NOT_EQUAL */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+# define BOOST_PP_NOT_EQUAL(x, y) BOOST_PP_NOT_EQUAL_I(x, y)
+# else
+# define BOOST_PP_NOT_EQUAL(x, y) BOOST_PP_NOT_EQUAL_OO((x, y))
+# define BOOST_PP_NOT_EQUAL_OO(par) BOOST_PP_NOT_EQUAL_I ## par
+# endif
+#
+# define BOOST_PP_NOT_EQUAL_I(x, y) BOOST_PP_CAT(BOOST_PP_NOT_EQUAL_CHECK_, BOOST_PP_NOT_EQUAL_ ## x(0, BOOST_PP_NOT_EQUAL_ ## y))
+#
+# /* BOOST_PP_NOT_EQUAL_D */
+#
+# define BOOST_PP_NOT_EQUAL_D(d, x, y) BOOST_PP_NOT_EQUAL(x, y)
+#
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NIL 1
+#
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_0(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_1(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_2(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_3(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_4(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_5(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_6(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_7(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_8(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_9(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_10(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_11(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_12(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_13(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_14(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_15(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_16(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_17(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_18(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_19(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_20(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_21(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_22(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_23(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_24(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_25(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_26(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_27(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_28(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_29(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_30(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_31(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_32(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_33(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_34(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_35(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_36(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_37(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_38(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_39(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_40(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_41(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_42(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_43(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_44(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_45(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_46(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_47(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_48(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_49(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_50(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_51(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_52(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_53(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_54(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_55(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_56(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_57(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_58(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_59(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_60(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_61(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_62(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_63(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_64(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_65(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_66(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_67(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_68(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_69(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_70(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_71(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_72(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_73(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_74(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_75(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_76(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_77(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_78(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_79(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_80(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_81(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_82(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_83(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_84(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_85(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_86(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_87(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_88(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_89(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_90(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_91(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_92(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_93(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_94(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_95(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_96(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_97(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_98(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_99(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_100(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_101(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_102(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_103(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_104(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_105(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_106(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_107(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_108(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_109(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_110(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_111(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_112(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_113(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_114(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_115(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_116(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_117(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_118(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_119(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_120(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_121(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_122(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_123(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_124(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_125(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_126(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_127(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_128(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_129(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_130(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_131(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_132(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_133(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_134(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_135(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_136(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_137(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_138(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_139(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_140(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_141(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_142(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_143(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_144(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_145(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_146(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_147(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_148(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_149(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_150(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_151(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_152(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_153(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_154(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_155(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_156(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_157(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_158(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_159(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_160(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_161(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_162(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_163(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_164(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_165(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_166(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_167(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_168(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_169(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_170(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_171(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_172(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_173(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_174(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_175(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_176(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_177(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_178(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_179(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_180(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_181(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_182(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_183(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_184(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_185(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_186(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_187(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_188(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_189(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_190(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_191(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_192(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_193(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_194(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_195(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_196(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_197(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_198(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_199(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_200(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_201(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_202(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_203(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_204(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_205(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_206(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_207(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_208(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_209(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_210(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_211(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_212(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_213(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_214(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_215(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_216(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_217(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_218(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_219(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_220(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_221(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_222(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_223(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_224(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_225(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_226(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_227(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_228(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_229(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_230(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_231(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_232(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_233(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_234(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_235(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_236(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_237(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_238(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_239(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_240(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_241(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_242(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_243(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_244(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_245(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_246(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_247(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_248(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_249(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_250(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_251(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_252(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_253(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_254(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_255(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_256(c, y) 0
+#
+#if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_DMC()
+# define BOOST_PP_NOT_EQUAL_0(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_1(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_2(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_3(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_4(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_5(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_6(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_7(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_8(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_9(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_10(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_11(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_12(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_13(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_14(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_15(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_16(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_17(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_18(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_19(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_20(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_21(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_22(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_23(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_24(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_25(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_26(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_27(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_28(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_29(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_30(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_31(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_32(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_33(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_34(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_35(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_36(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_37(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_38(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_39(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_40(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_41(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_42(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_43(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_44(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_45(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_46(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_47(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_48(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_49(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_50(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_51(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_52(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_53(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_54(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_55(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_56(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_57(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_58(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_59(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_60(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_61(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_62(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_63(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_64(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_65(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_66(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_67(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_68(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_69(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_70(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_71(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_72(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_73(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_74(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_75(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_76(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_77(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_78(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_79(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_80(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_81(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_82(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_83(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_84(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_85(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_86(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_87(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_88(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_89(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_90(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_91(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_92(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_93(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_94(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_95(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_96(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_97(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_98(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_99(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_100(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_101(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_102(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_103(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_104(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_105(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_106(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_107(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_108(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_109(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_110(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_111(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_112(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_113(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_114(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_115(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_116(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_117(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_118(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_119(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_120(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_121(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_122(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_123(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_124(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_125(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_126(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_127(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_128(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_129(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_130(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_131(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_132(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_133(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_134(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_135(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_136(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_137(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_138(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_139(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_140(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_141(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_142(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_143(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_144(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_145(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_146(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_147(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_148(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_149(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_150(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_151(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_152(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_153(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_154(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_155(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_156(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_157(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_158(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_159(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_160(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_161(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_162(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_163(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_164(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_165(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_166(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_167(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_168(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_169(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_170(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_171(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_172(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_173(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_174(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_175(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_176(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_177(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_178(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_179(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_180(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_181(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_182(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_183(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_184(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_185(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_186(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_187(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_188(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_189(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_190(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_191(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_192(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_193(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_194(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_195(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_196(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_197(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_198(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_199(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_200(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_201(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_202(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_203(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_204(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_205(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_206(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_207(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_208(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_209(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_210(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_211(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_212(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_213(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_214(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_215(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_216(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_217(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_218(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_219(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_220(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_221(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_222(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_223(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_224(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_225(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_226(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_227(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_228(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_229(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_230(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_231(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_232(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_233(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_234(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_235(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_236(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_237(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_238(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_239(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_240(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_241(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_242(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_243(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_244(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_245(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_246(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_247(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_248(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_249(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_250(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_251(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_252(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_253(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_254(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_255(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_256(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# else
+# define BOOST_PP_NOT_EQUAL_0(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_1(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_2(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_3(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_4(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_5(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_6(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_7(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_8(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_9(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_10(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_11(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_12(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_13(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_14(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_15(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_16(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_17(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_18(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_19(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_20(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_21(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_22(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_23(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_24(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_25(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_26(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_27(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_28(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_29(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_30(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_31(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_32(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_33(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_34(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_35(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_36(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_37(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_38(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_39(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_40(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_41(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_42(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_43(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_44(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_45(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_46(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_47(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_48(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_49(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_50(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_51(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_52(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_53(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_54(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_55(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_56(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_57(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_58(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_59(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_60(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_61(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_62(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_63(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_64(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_65(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_66(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_67(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_68(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_69(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_70(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_71(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_72(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_73(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_74(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_75(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_76(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_77(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_78(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_79(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_80(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_81(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_82(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_83(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_84(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_85(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_86(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_87(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_88(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_89(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_90(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_91(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_92(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_93(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_94(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_95(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_96(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_97(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_98(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_99(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_100(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_101(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_102(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_103(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_104(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_105(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_106(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_107(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_108(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_109(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_110(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_111(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_112(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_113(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_114(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_115(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_116(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_117(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_118(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_119(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_120(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_121(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_122(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_123(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_124(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_125(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_126(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_127(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_128(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_129(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_130(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_131(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_132(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_133(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_134(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_135(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_136(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_137(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_138(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_139(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_140(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_141(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_142(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_143(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_144(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_145(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_146(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_147(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_148(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_149(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_150(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_151(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_152(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_153(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_154(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_155(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_156(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_157(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_158(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_159(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_160(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_161(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_162(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_163(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_164(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_165(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_166(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_167(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_168(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_169(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_170(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_171(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_172(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_173(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_174(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_175(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_176(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_177(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_178(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_179(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_180(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_181(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_182(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_183(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_184(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_185(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_186(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_187(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_188(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_189(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_190(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_191(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_192(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_193(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_194(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_195(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_196(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_197(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_198(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_199(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_200(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_201(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_202(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_203(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_204(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_205(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_206(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_207(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_208(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_209(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_210(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_211(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_212(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_213(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_214(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_215(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_216(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_217(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_218(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_219(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_220(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_221(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_222(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_223(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_224(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_225(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_226(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_227(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_228(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_229(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_230(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_231(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_232(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_233(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_234(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_235(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_236(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_237(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_238(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_239(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_240(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_241(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_242(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_243(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_244(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_245(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_246(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_247(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_248(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_249(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_250(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_251(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_252(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_253(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_254(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_255(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# define BOOST_PP_NOT_EQUAL_256(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/config/config.hpp b/boost/boost/preprocessor/config/config.hpp
new file mode 100644
index 00000000000..dd0f7138d03
--- /dev/null
+++ b/boost/boost/preprocessor/config/config.hpp
@@ -0,0 +1,70 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_CONFIG_CONFIG_HPP
+# define BOOST_PREPROCESSOR_CONFIG_CONFIG_HPP
+#
+# /* BOOST_PP_CONFIG_FLAGS */
+#
+# define BOOST_PP_CONFIG_STRICT() 0x0001
+# define BOOST_PP_CONFIG_IDEAL() 0x0002
+#
+# define BOOST_PP_CONFIG_MSVC() 0x0004
+# define BOOST_PP_CONFIG_MWCC() 0x0008
+# define BOOST_PP_CONFIG_BCC() 0x0010
+# define BOOST_PP_CONFIG_EDG() 0x0020
+# define BOOST_PP_CONFIG_DMC() 0x0040
+#
+# ifndef BOOST_PP_CONFIG_FLAGS
+# if defined(__GCCXML__)
+# define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_STRICT())
+# elif defined(__WAVE__)
+# define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_STRICT())
+# elif defined(__MWERKS__) && __MWERKS__ >= 0x3200
+# define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_STRICT())
+# elif defined(__EDG__) || defined(__EDG_VERSION__)
+# if defined(_MSC_VER) && __EDG_VERSION__ >= 308
+# define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_MSVC())
+# else
+# define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_EDG() | BOOST_PP_CONFIG_STRICT())
+# endif
+# elif defined(__MWERKS__)
+# define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_MWCC())
+# elif defined(__DMC__)
+# define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_DMC())
+# elif defined(__BORLANDC__) && __BORLANDC__ >= 0x581
+# define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_STRICT())
+# elif defined(__BORLANDC__) || defined(__IBMC__) || defined(__IBMCPP__) || defined(__SUNPRO_CC)
+# define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_BCC())
+# elif defined(_MSC_VER)
+# define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_MSVC())
+# else
+# define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_STRICT())
+# endif
+# endif
+#
+# /* BOOST_PP_CONFIG_EXTENDED_LINE_INFO */
+#
+# ifndef BOOST_PP_CONFIG_EXTENDED_LINE_INFO
+# define BOOST_PP_CONFIG_EXTENDED_LINE_INFO 0
+# endif
+#
+# /* BOOST_PP_CONFIG_ERRORS */
+#
+# ifndef BOOST_PP_CONFIG_ERRORS
+# ifdef NDEBUG
+# define BOOST_PP_CONFIG_ERRORS 0
+# else
+# define BOOST_PP_CONFIG_ERRORS 1
+# endif
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/config/limits.hpp b/boost/boost/preprocessor/config/limits.hpp
new file mode 100644
index 00000000000..5b4f06be491
--- /dev/null
+++ b/boost/boost/preprocessor/config/limits.hpp
@@ -0,0 +1,29 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_CONFIG_LIMITS_HPP
+# define BOOST_PREPROCESSOR_CONFIG_LIMITS_HPP
+#
+# define BOOST_PP_LIMIT_MAG 256
+# define BOOST_PP_LIMIT_TUPLE 25
+# define BOOST_PP_LIMIT_DIM 3
+# define BOOST_PP_LIMIT_REPEAT 256
+# define BOOST_PP_LIMIT_WHILE 256
+# define BOOST_PP_LIMIT_FOR 256
+# define BOOST_PP_LIMIT_ITERATION 256
+# define BOOST_PP_LIMIT_ITERATION_DIM 3
+# define BOOST_PP_LIMIT_SEQ 256
+# define BOOST_PP_LIMIT_SLOT_SIG 10
+# define BOOST_PP_LIMIT_SLOT_COUNT 5
+#
+# endif
diff --git a/boost/boost/preprocessor/control.hpp b/boost/boost/preprocessor/control.hpp
new file mode 100644
index 00000000000..809fbd9e237
--- /dev/null
+++ b/boost/boost/preprocessor/control.hpp
@@ -0,0 +1,22 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_CONTROL_HPP
+# define BOOST_PREPROCESSOR_CONTROL_HPP
+#
+# include <boost/preprocessor/control/deduce_d.hpp>
+# include <boost/preprocessor/control/expr_if.hpp>
+# include <boost/preprocessor/control/expr_iif.hpp>
+# include <boost/preprocessor/control/if.hpp>
+# include <boost/preprocessor/control/iif.hpp>
+# include <boost/preprocessor/control/while.hpp>
+#
+# endif
diff --git a/boost/boost/preprocessor/control/deduce_d.hpp b/boost/boost/preprocessor/control/deduce_d.hpp
new file mode 100644
index 00000000000..a0276b0f19e
--- /dev/null
+++ b/boost/boost/preprocessor/control/deduce_d.hpp
@@ -0,0 +1,22 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_CONTROL_DEDUCE_D_HPP
+# define BOOST_PREPROCESSOR_CONTROL_DEDUCE_D_HPP
+#
+# include <boost/preprocessor/control/while.hpp>
+# include <boost/preprocessor/detail/auto_rec.hpp>
+#
+# /* BOOST_PP_DEDUCE_D */
+#
+# define BOOST_PP_DEDUCE_D() BOOST_PP_AUTO_REC(BOOST_PP_WHILE_P, 256)
+#
+# endif
diff --git a/boost/boost/preprocessor/control/detail/dmc/while.hpp b/boost/boost/preprocessor/control/detail/dmc/while.hpp
new file mode 100644
index 00000000000..95c3135b328
--- /dev/null
+++ b/boost/boost/preprocessor/control/detail/dmc/while.hpp
@@ -0,0 +1,536 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_CONTROL_DETAIL_WHILE_HPP
+# define BOOST_PREPROCESSOR_CONTROL_DETAIL_WHILE_HPP
+#
+# include <boost/preprocessor/control/iif.hpp>
+# include <boost/preprocessor/logical/bool.hpp>
+# include <boost/preprocessor/tuple/eat.hpp>
+#
+# define BOOST_PP_WHILE_1(p, o, s) BOOST_PP_WHILE_1_C(BOOST_PP_BOOL(p##(2, s)), p, o, s)
+# define BOOST_PP_WHILE_2(p, o, s) BOOST_PP_WHILE_2_C(BOOST_PP_BOOL(p##(3, s)), p, o, s)
+# define BOOST_PP_WHILE_3(p, o, s) BOOST_PP_WHILE_3_C(BOOST_PP_BOOL(p##(4, s)), p, o, s)
+# define BOOST_PP_WHILE_4(p, o, s) BOOST_PP_WHILE_4_C(BOOST_PP_BOOL(p##(5, s)), p, o, s)
+# define BOOST_PP_WHILE_5(p, o, s) BOOST_PP_WHILE_5_C(BOOST_PP_BOOL(p##(6, s)), p, o, s)
+# define BOOST_PP_WHILE_6(p, o, s) BOOST_PP_WHILE_6_C(BOOST_PP_BOOL(p##(7, s)), p, o, s)
+# define BOOST_PP_WHILE_7(p, o, s) BOOST_PP_WHILE_7_C(BOOST_PP_BOOL(p##(8, s)), p, o, s)
+# define BOOST_PP_WHILE_8(p, o, s) BOOST_PP_WHILE_8_C(BOOST_PP_BOOL(p##(9, s)), p, o, s)
+# define BOOST_PP_WHILE_9(p, o, s) BOOST_PP_WHILE_9_C(BOOST_PP_BOOL(p##(10, s)), p, o, s)
+# define BOOST_PP_WHILE_10(p, o, s) BOOST_PP_WHILE_10_C(BOOST_PP_BOOL(p##(11, s)), p, o, s)
+# define BOOST_PP_WHILE_11(p, o, s) BOOST_PP_WHILE_11_C(BOOST_PP_BOOL(p##(12, s)), p, o, s)
+# define BOOST_PP_WHILE_12(p, o, s) BOOST_PP_WHILE_12_C(BOOST_PP_BOOL(p##(13, s)), p, o, s)
+# define BOOST_PP_WHILE_13(p, o, s) BOOST_PP_WHILE_13_C(BOOST_PP_BOOL(p##(14, s)), p, o, s)
+# define BOOST_PP_WHILE_14(p, o, s) BOOST_PP_WHILE_14_C(BOOST_PP_BOOL(p##(15, s)), p, o, s)
+# define BOOST_PP_WHILE_15(p, o, s) BOOST_PP_WHILE_15_C(BOOST_PP_BOOL(p##(16, s)), p, o, s)
+# define BOOST_PP_WHILE_16(p, o, s) BOOST_PP_WHILE_16_C(BOOST_PP_BOOL(p##(17, s)), p, o, s)
+# define BOOST_PP_WHILE_17(p, o, s) BOOST_PP_WHILE_17_C(BOOST_PP_BOOL(p##(18, s)), p, o, s)
+# define BOOST_PP_WHILE_18(p, o, s) BOOST_PP_WHILE_18_C(BOOST_PP_BOOL(p##(19, s)), p, o, s)
+# define BOOST_PP_WHILE_19(p, o, s) BOOST_PP_WHILE_19_C(BOOST_PP_BOOL(p##(20, s)), p, o, s)
+# define BOOST_PP_WHILE_20(p, o, s) BOOST_PP_WHILE_20_C(BOOST_PP_BOOL(p##(21, s)), p, o, s)
+# define BOOST_PP_WHILE_21(p, o, s) BOOST_PP_WHILE_21_C(BOOST_PP_BOOL(p##(22, s)), p, o, s)
+# define BOOST_PP_WHILE_22(p, o, s) BOOST_PP_WHILE_22_C(BOOST_PP_BOOL(p##(23, s)), p, o, s)
+# define BOOST_PP_WHILE_23(p, o, s) BOOST_PP_WHILE_23_C(BOOST_PP_BOOL(p##(24, s)), p, o, s)
+# define BOOST_PP_WHILE_24(p, o, s) BOOST_PP_WHILE_24_C(BOOST_PP_BOOL(p##(25, s)), p, o, s)
+# define BOOST_PP_WHILE_25(p, o, s) BOOST_PP_WHILE_25_C(BOOST_PP_BOOL(p##(26, s)), p, o, s)
+# define BOOST_PP_WHILE_26(p, o, s) BOOST_PP_WHILE_26_C(BOOST_PP_BOOL(p##(27, s)), p, o, s)
+# define BOOST_PP_WHILE_27(p, o, s) BOOST_PP_WHILE_27_C(BOOST_PP_BOOL(p##(28, s)), p, o, s)
+# define BOOST_PP_WHILE_28(p, o, s) BOOST_PP_WHILE_28_C(BOOST_PP_BOOL(p##(29, s)), p, o, s)
+# define BOOST_PP_WHILE_29(p, o, s) BOOST_PP_WHILE_29_C(BOOST_PP_BOOL(p##(30, s)), p, o, s)
+# define BOOST_PP_WHILE_30(p, o, s) BOOST_PP_WHILE_30_C(BOOST_PP_BOOL(p##(31, s)), p, o, s)
+# define BOOST_PP_WHILE_31(p, o, s) BOOST_PP_WHILE_31_C(BOOST_PP_BOOL(p##(32, s)), p, o, s)
+# define BOOST_PP_WHILE_32(p, o, s) BOOST_PP_WHILE_32_C(BOOST_PP_BOOL(p##(33, s)), p, o, s)
+# define BOOST_PP_WHILE_33(p, o, s) BOOST_PP_WHILE_33_C(BOOST_PP_BOOL(p##(34, s)), p, o, s)
+# define BOOST_PP_WHILE_34(p, o, s) BOOST_PP_WHILE_34_C(BOOST_PP_BOOL(p##(35, s)), p, o, s)
+# define BOOST_PP_WHILE_35(p, o, s) BOOST_PP_WHILE_35_C(BOOST_PP_BOOL(p##(36, s)), p, o, s)
+# define BOOST_PP_WHILE_36(p, o, s) BOOST_PP_WHILE_36_C(BOOST_PP_BOOL(p##(37, s)), p, o, s)
+# define BOOST_PP_WHILE_37(p, o, s) BOOST_PP_WHILE_37_C(BOOST_PP_BOOL(p##(38, s)), p, o, s)
+# define BOOST_PP_WHILE_38(p, o, s) BOOST_PP_WHILE_38_C(BOOST_PP_BOOL(p##(39, s)), p, o, s)
+# define BOOST_PP_WHILE_39(p, o, s) BOOST_PP_WHILE_39_C(BOOST_PP_BOOL(p##(40, s)), p, o, s)
+# define BOOST_PP_WHILE_40(p, o, s) BOOST_PP_WHILE_40_C(BOOST_PP_BOOL(p##(41, s)), p, o, s)
+# define BOOST_PP_WHILE_41(p, o, s) BOOST_PP_WHILE_41_C(BOOST_PP_BOOL(p##(42, s)), p, o, s)
+# define BOOST_PP_WHILE_42(p, o, s) BOOST_PP_WHILE_42_C(BOOST_PP_BOOL(p##(43, s)), p, o, s)
+# define BOOST_PP_WHILE_43(p, o, s) BOOST_PP_WHILE_43_C(BOOST_PP_BOOL(p##(44, s)), p, o, s)
+# define BOOST_PP_WHILE_44(p, o, s) BOOST_PP_WHILE_44_C(BOOST_PP_BOOL(p##(45, s)), p, o, s)
+# define BOOST_PP_WHILE_45(p, o, s) BOOST_PP_WHILE_45_C(BOOST_PP_BOOL(p##(46, s)), p, o, s)
+# define BOOST_PP_WHILE_46(p, o, s) BOOST_PP_WHILE_46_C(BOOST_PP_BOOL(p##(47, s)), p, o, s)
+# define BOOST_PP_WHILE_47(p, o, s) BOOST_PP_WHILE_47_C(BOOST_PP_BOOL(p##(48, s)), p, o, s)
+# define BOOST_PP_WHILE_48(p, o, s) BOOST_PP_WHILE_48_C(BOOST_PP_BOOL(p##(49, s)), p, o, s)
+# define BOOST_PP_WHILE_49(p, o, s) BOOST_PP_WHILE_49_C(BOOST_PP_BOOL(p##(50, s)), p, o, s)
+# define BOOST_PP_WHILE_50(p, o, s) BOOST_PP_WHILE_50_C(BOOST_PP_BOOL(p##(51, s)), p, o, s)
+# define BOOST_PP_WHILE_51(p, o, s) BOOST_PP_WHILE_51_C(BOOST_PP_BOOL(p##(52, s)), p, o, s)
+# define BOOST_PP_WHILE_52(p, o, s) BOOST_PP_WHILE_52_C(BOOST_PP_BOOL(p##(53, s)), p, o, s)
+# define BOOST_PP_WHILE_53(p, o, s) BOOST_PP_WHILE_53_C(BOOST_PP_BOOL(p##(54, s)), p, o, s)
+# define BOOST_PP_WHILE_54(p, o, s) BOOST_PP_WHILE_54_C(BOOST_PP_BOOL(p##(55, s)), p, o, s)
+# define BOOST_PP_WHILE_55(p, o, s) BOOST_PP_WHILE_55_C(BOOST_PP_BOOL(p##(56, s)), p, o, s)
+# define BOOST_PP_WHILE_56(p, o, s) BOOST_PP_WHILE_56_C(BOOST_PP_BOOL(p##(57, s)), p, o, s)
+# define BOOST_PP_WHILE_57(p, o, s) BOOST_PP_WHILE_57_C(BOOST_PP_BOOL(p##(58, s)), p, o, s)
+# define BOOST_PP_WHILE_58(p, o, s) BOOST_PP_WHILE_58_C(BOOST_PP_BOOL(p##(59, s)), p, o, s)
+# define BOOST_PP_WHILE_59(p, o, s) BOOST_PP_WHILE_59_C(BOOST_PP_BOOL(p##(60, s)), p, o, s)
+# define BOOST_PP_WHILE_60(p, o, s) BOOST_PP_WHILE_60_C(BOOST_PP_BOOL(p##(61, s)), p, o, s)
+# define BOOST_PP_WHILE_61(p, o, s) BOOST_PP_WHILE_61_C(BOOST_PP_BOOL(p##(62, s)), p, o, s)
+# define BOOST_PP_WHILE_62(p, o, s) BOOST_PP_WHILE_62_C(BOOST_PP_BOOL(p##(63, s)), p, o, s)
+# define BOOST_PP_WHILE_63(p, o, s) BOOST_PP_WHILE_63_C(BOOST_PP_BOOL(p##(64, s)), p, o, s)
+# define BOOST_PP_WHILE_64(p, o, s) BOOST_PP_WHILE_64_C(BOOST_PP_BOOL(p##(65, s)), p, o, s)
+# define BOOST_PP_WHILE_65(p, o, s) BOOST_PP_WHILE_65_C(BOOST_PP_BOOL(p##(66, s)), p, o, s)
+# define BOOST_PP_WHILE_66(p, o, s) BOOST_PP_WHILE_66_C(BOOST_PP_BOOL(p##(67, s)), p, o, s)
+# define BOOST_PP_WHILE_67(p, o, s) BOOST_PP_WHILE_67_C(BOOST_PP_BOOL(p##(68, s)), p, o, s)
+# define BOOST_PP_WHILE_68(p, o, s) BOOST_PP_WHILE_68_C(BOOST_PP_BOOL(p##(69, s)), p, o, s)
+# define BOOST_PP_WHILE_69(p, o, s) BOOST_PP_WHILE_69_C(BOOST_PP_BOOL(p##(70, s)), p, o, s)
+# define BOOST_PP_WHILE_70(p, o, s) BOOST_PP_WHILE_70_C(BOOST_PP_BOOL(p##(71, s)), p, o, s)
+# define BOOST_PP_WHILE_71(p, o, s) BOOST_PP_WHILE_71_C(BOOST_PP_BOOL(p##(72, s)), p, o, s)
+# define BOOST_PP_WHILE_72(p, o, s) BOOST_PP_WHILE_72_C(BOOST_PP_BOOL(p##(73, s)), p, o, s)
+# define BOOST_PP_WHILE_73(p, o, s) BOOST_PP_WHILE_73_C(BOOST_PP_BOOL(p##(74, s)), p, o, s)
+# define BOOST_PP_WHILE_74(p, o, s) BOOST_PP_WHILE_74_C(BOOST_PP_BOOL(p##(75, s)), p, o, s)
+# define BOOST_PP_WHILE_75(p, o, s) BOOST_PP_WHILE_75_C(BOOST_PP_BOOL(p##(76, s)), p, o, s)
+# define BOOST_PP_WHILE_76(p, o, s) BOOST_PP_WHILE_76_C(BOOST_PP_BOOL(p##(77, s)), p, o, s)
+# define BOOST_PP_WHILE_77(p, o, s) BOOST_PP_WHILE_77_C(BOOST_PP_BOOL(p##(78, s)), p, o, s)
+# define BOOST_PP_WHILE_78(p, o, s) BOOST_PP_WHILE_78_C(BOOST_PP_BOOL(p##(79, s)), p, o, s)
+# define BOOST_PP_WHILE_79(p, o, s) BOOST_PP_WHILE_79_C(BOOST_PP_BOOL(p##(80, s)), p, o, s)
+# define BOOST_PP_WHILE_80(p, o, s) BOOST_PP_WHILE_80_C(BOOST_PP_BOOL(p##(81, s)), p, o, s)
+# define BOOST_PP_WHILE_81(p, o, s) BOOST_PP_WHILE_81_C(BOOST_PP_BOOL(p##(82, s)), p, o, s)
+# define BOOST_PP_WHILE_82(p, o, s) BOOST_PP_WHILE_82_C(BOOST_PP_BOOL(p##(83, s)), p, o, s)
+# define BOOST_PP_WHILE_83(p, o, s) BOOST_PP_WHILE_83_C(BOOST_PP_BOOL(p##(84, s)), p, o, s)
+# define BOOST_PP_WHILE_84(p, o, s) BOOST_PP_WHILE_84_C(BOOST_PP_BOOL(p##(85, s)), p, o, s)
+# define BOOST_PP_WHILE_85(p, o, s) BOOST_PP_WHILE_85_C(BOOST_PP_BOOL(p##(86, s)), p, o, s)
+# define BOOST_PP_WHILE_86(p, o, s) BOOST_PP_WHILE_86_C(BOOST_PP_BOOL(p##(87, s)), p, o, s)
+# define BOOST_PP_WHILE_87(p, o, s) BOOST_PP_WHILE_87_C(BOOST_PP_BOOL(p##(88, s)), p, o, s)
+# define BOOST_PP_WHILE_88(p, o, s) BOOST_PP_WHILE_88_C(BOOST_PP_BOOL(p##(89, s)), p, o, s)
+# define BOOST_PP_WHILE_89(p, o, s) BOOST_PP_WHILE_89_C(BOOST_PP_BOOL(p##(90, s)), p, o, s)
+# define BOOST_PP_WHILE_90(p, o, s) BOOST_PP_WHILE_90_C(BOOST_PP_BOOL(p##(91, s)), p, o, s)
+# define BOOST_PP_WHILE_91(p, o, s) BOOST_PP_WHILE_91_C(BOOST_PP_BOOL(p##(92, s)), p, o, s)
+# define BOOST_PP_WHILE_92(p, o, s) BOOST_PP_WHILE_92_C(BOOST_PP_BOOL(p##(93, s)), p, o, s)
+# define BOOST_PP_WHILE_93(p, o, s) BOOST_PP_WHILE_93_C(BOOST_PP_BOOL(p##(94, s)), p, o, s)
+# define BOOST_PP_WHILE_94(p, o, s) BOOST_PP_WHILE_94_C(BOOST_PP_BOOL(p##(95, s)), p, o, s)
+# define BOOST_PP_WHILE_95(p, o, s) BOOST_PP_WHILE_95_C(BOOST_PP_BOOL(p##(96, s)), p, o, s)
+# define BOOST_PP_WHILE_96(p, o, s) BOOST_PP_WHILE_96_C(BOOST_PP_BOOL(p##(97, s)), p, o, s)
+# define BOOST_PP_WHILE_97(p, o, s) BOOST_PP_WHILE_97_C(BOOST_PP_BOOL(p##(98, s)), p, o, s)
+# define BOOST_PP_WHILE_98(p, o, s) BOOST_PP_WHILE_98_C(BOOST_PP_BOOL(p##(99, s)), p, o, s)
+# define BOOST_PP_WHILE_99(p, o, s) BOOST_PP_WHILE_99_C(BOOST_PP_BOOL(p##(100, s)), p, o, s)
+# define BOOST_PP_WHILE_100(p, o, s) BOOST_PP_WHILE_100_C(BOOST_PP_BOOL(p##(101, s)), p, o, s)
+# define BOOST_PP_WHILE_101(p, o, s) BOOST_PP_WHILE_101_C(BOOST_PP_BOOL(p##(102, s)), p, o, s)
+# define BOOST_PP_WHILE_102(p, o, s) BOOST_PP_WHILE_102_C(BOOST_PP_BOOL(p##(103, s)), p, o, s)
+# define BOOST_PP_WHILE_103(p, o, s) BOOST_PP_WHILE_103_C(BOOST_PP_BOOL(p##(104, s)), p, o, s)
+# define BOOST_PP_WHILE_104(p, o, s) BOOST_PP_WHILE_104_C(BOOST_PP_BOOL(p##(105, s)), p, o, s)
+# define BOOST_PP_WHILE_105(p, o, s) BOOST_PP_WHILE_105_C(BOOST_PP_BOOL(p##(106, s)), p, o, s)
+# define BOOST_PP_WHILE_106(p, o, s) BOOST_PP_WHILE_106_C(BOOST_PP_BOOL(p##(107, s)), p, o, s)
+# define BOOST_PP_WHILE_107(p, o, s) BOOST_PP_WHILE_107_C(BOOST_PP_BOOL(p##(108, s)), p, o, s)
+# define BOOST_PP_WHILE_108(p, o, s) BOOST_PP_WHILE_108_C(BOOST_PP_BOOL(p##(109, s)), p, o, s)
+# define BOOST_PP_WHILE_109(p, o, s) BOOST_PP_WHILE_109_C(BOOST_PP_BOOL(p##(110, s)), p, o, s)
+# define BOOST_PP_WHILE_110(p, o, s) BOOST_PP_WHILE_110_C(BOOST_PP_BOOL(p##(111, s)), p, o, s)
+# define BOOST_PP_WHILE_111(p, o, s) BOOST_PP_WHILE_111_C(BOOST_PP_BOOL(p##(112, s)), p, o, s)
+# define BOOST_PP_WHILE_112(p, o, s) BOOST_PP_WHILE_112_C(BOOST_PP_BOOL(p##(113, s)), p, o, s)
+# define BOOST_PP_WHILE_113(p, o, s) BOOST_PP_WHILE_113_C(BOOST_PP_BOOL(p##(114, s)), p, o, s)
+# define BOOST_PP_WHILE_114(p, o, s) BOOST_PP_WHILE_114_C(BOOST_PP_BOOL(p##(115, s)), p, o, s)
+# define BOOST_PP_WHILE_115(p, o, s) BOOST_PP_WHILE_115_C(BOOST_PP_BOOL(p##(116, s)), p, o, s)
+# define BOOST_PP_WHILE_116(p, o, s) BOOST_PP_WHILE_116_C(BOOST_PP_BOOL(p##(117, s)), p, o, s)
+# define BOOST_PP_WHILE_117(p, o, s) BOOST_PP_WHILE_117_C(BOOST_PP_BOOL(p##(118, s)), p, o, s)
+# define BOOST_PP_WHILE_118(p, o, s) BOOST_PP_WHILE_118_C(BOOST_PP_BOOL(p##(119, s)), p, o, s)
+# define BOOST_PP_WHILE_119(p, o, s) BOOST_PP_WHILE_119_C(BOOST_PP_BOOL(p##(120, s)), p, o, s)
+# define BOOST_PP_WHILE_120(p, o, s) BOOST_PP_WHILE_120_C(BOOST_PP_BOOL(p##(121, s)), p, o, s)
+# define BOOST_PP_WHILE_121(p, o, s) BOOST_PP_WHILE_121_C(BOOST_PP_BOOL(p##(122, s)), p, o, s)
+# define BOOST_PP_WHILE_122(p, o, s) BOOST_PP_WHILE_122_C(BOOST_PP_BOOL(p##(123, s)), p, o, s)
+# define BOOST_PP_WHILE_123(p, o, s) BOOST_PP_WHILE_123_C(BOOST_PP_BOOL(p##(124, s)), p, o, s)
+# define BOOST_PP_WHILE_124(p, o, s) BOOST_PP_WHILE_124_C(BOOST_PP_BOOL(p##(125, s)), p, o, s)
+# define BOOST_PP_WHILE_125(p, o, s) BOOST_PP_WHILE_125_C(BOOST_PP_BOOL(p##(126, s)), p, o, s)
+# define BOOST_PP_WHILE_126(p, o, s) BOOST_PP_WHILE_126_C(BOOST_PP_BOOL(p##(127, s)), p, o, s)
+# define BOOST_PP_WHILE_127(p, o, s) BOOST_PP_WHILE_127_C(BOOST_PP_BOOL(p##(128, s)), p, o, s)
+# define BOOST_PP_WHILE_128(p, o, s) BOOST_PP_WHILE_128_C(BOOST_PP_BOOL(p##(129, s)), p, o, s)
+# define BOOST_PP_WHILE_129(p, o, s) BOOST_PP_WHILE_129_C(BOOST_PP_BOOL(p##(130, s)), p, o, s)
+# define BOOST_PP_WHILE_130(p, o, s) BOOST_PP_WHILE_130_C(BOOST_PP_BOOL(p##(131, s)), p, o, s)
+# define BOOST_PP_WHILE_131(p, o, s) BOOST_PP_WHILE_131_C(BOOST_PP_BOOL(p##(132, s)), p, o, s)
+# define BOOST_PP_WHILE_132(p, o, s) BOOST_PP_WHILE_132_C(BOOST_PP_BOOL(p##(133, s)), p, o, s)
+# define BOOST_PP_WHILE_133(p, o, s) BOOST_PP_WHILE_133_C(BOOST_PP_BOOL(p##(134, s)), p, o, s)
+# define BOOST_PP_WHILE_134(p, o, s) BOOST_PP_WHILE_134_C(BOOST_PP_BOOL(p##(135, s)), p, o, s)
+# define BOOST_PP_WHILE_135(p, o, s) BOOST_PP_WHILE_135_C(BOOST_PP_BOOL(p##(136, s)), p, o, s)
+# define BOOST_PP_WHILE_136(p, o, s) BOOST_PP_WHILE_136_C(BOOST_PP_BOOL(p##(137, s)), p, o, s)
+# define BOOST_PP_WHILE_137(p, o, s) BOOST_PP_WHILE_137_C(BOOST_PP_BOOL(p##(138, s)), p, o, s)
+# define BOOST_PP_WHILE_138(p, o, s) BOOST_PP_WHILE_138_C(BOOST_PP_BOOL(p##(139, s)), p, o, s)
+# define BOOST_PP_WHILE_139(p, o, s) BOOST_PP_WHILE_139_C(BOOST_PP_BOOL(p##(140, s)), p, o, s)
+# define BOOST_PP_WHILE_140(p, o, s) BOOST_PP_WHILE_140_C(BOOST_PP_BOOL(p##(141, s)), p, o, s)
+# define BOOST_PP_WHILE_141(p, o, s) BOOST_PP_WHILE_141_C(BOOST_PP_BOOL(p##(142, s)), p, o, s)
+# define BOOST_PP_WHILE_142(p, o, s) BOOST_PP_WHILE_142_C(BOOST_PP_BOOL(p##(143, s)), p, o, s)
+# define BOOST_PP_WHILE_143(p, o, s) BOOST_PP_WHILE_143_C(BOOST_PP_BOOL(p##(144, s)), p, o, s)
+# define BOOST_PP_WHILE_144(p, o, s) BOOST_PP_WHILE_144_C(BOOST_PP_BOOL(p##(145, s)), p, o, s)
+# define BOOST_PP_WHILE_145(p, o, s) BOOST_PP_WHILE_145_C(BOOST_PP_BOOL(p##(146, s)), p, o, s)
+# define BOOST_PP_WHILE_146(p, o, s) BOOST_PP_WHILE_146_C(BOOST_PP_BOOL(p##(147, s)), p, o, s)
+# define BOOST_PP_WHILE_147(p, o, s) BOOST_PP_WHILE_147_C(BOOST_PP_BOOL(p##(148, s)), p, o, s)
+# define BOOST_PP_WHILE_148(p, o, s) BOOST_PP_WHILE_148_C(BOOST_PP_BOOL(p##(149, s)), p, o, s)
+# define BOOST_PP_WHILE_149(p, o, s) BOOST_PP_WHILE_149_C(BOOST_PP_BOOL(p##(150, s)), p, o, s)
+# define BOOST_PP_WHILE_150(p, o, s) BOOST_PP_WHILE_150_C(BOOST_PP_BOOL(p##(151, s)), p, o, s)
+# define BOOST_PP_WHILE_151(p, o, s) BOOST_PP_WHILE_151_C(BOOST_PP_BOOL(p##(152, s)), p, o, s)
+# define BOOST_PP_WHILE_152(p, o, s) BOOST_PP_WHILE_152_C(BOOST_PP_BOOL(p##(153, s)), p, o, s)
+# define BOOST_PP_WHILE_153(p, o, s) BOOST_PP_WHILE_153_C(BOOST_PP_BOOL(p##(154, s)), p, o, s)
+# define BOOST_PP_WHILE_154(p, o, s) BOOST_PP_WHILE_154_C(BOOST_PP_BOOL(p##(155, s)), p, o, s)
+# define BOOST_PP_WHILE_155(p, o, s) BOOST_PP_WHILE_155_C(BOOST_PP_BOOL(p##(156, s)), p, o, s)
+# define BOOST_PP_WHILE_156(p, o, s) BOOST_PP_WHILE_156_C(BOOST_PP_BOOL(p##(157, s)), p, o, s)
+# define BOOST_PP_WHILE_157(p, o, s) BOOST_PP_WHILE_157_C(BOOST_PP_BOOL(p##(158, s)), p, o, s)
+# define BOOST_PP_WHILE_158(p, o, s) BOOST_PP_WHILE_158_C(BOOST_PP_BOOL(p##(159, s)), p, o, s)
+# define BOOST_PP_WHILE_159(p, o, s) BOOST_PP_WHILE_159_C(BOOST_PP_BOOL(p##(160, s)), p, o, s)
+# define BOOST_PP_WHILE_160(p, o, s) BOOST_PP_WHILE_160_C(BOOST_PP_BOOL(p##(161, s)), p, o, s)
+# define BOOST_PP_WHILE_161(p, o, s) BOOST_PP_WHILE_161_C(BOOST_PP_BOOL(p##(162, s)), p, o, s)
+# define BOOST_PP_WHILE_162(p, o, s) BOOST_PP_WHILE_162_C(BOOST_PP_BOOL(p##(163, s)), p, o, s)
+# define BOOST_PP_WHILE_163(p, o, s) BOOST_PP_WHILE_163_C(BOOST_PP_BOOL(p##(164, s)), p, o, s)
+# define BOOST_PP_WHILE_164(p, o, s) BOOST_PP_WHILE_164_C(BOOST_PP_BOOL(p##(165, s)), p, o, s)
+# define BOOST_PP_WHILE_165(p, o, s) BOOST_PP_WHILE_165_C(BOOST_PP_BOOL(p##(166, s)), p, o, s)
+# define BOOST_PP_WHILE_166(p, o, s) BOOST_PP_WHILE_166_C(BOOST_PP_BOOL(p##(167, s)), p, o, s)
+# define BOOST_PP_WHILE_167(p, o, s) BOOST_PP_WHILE_167_C(BOOST_PP_BOOL(p##(168, s)), p, o, s)
+# define BOOST_PP_WHILE_168(p, o, s) BOOST_PP_WHILE_168_C(BOOST_PP_BOOL(p##(169, s)), p, o, s)
+# define BOOST_PP_WHILE_169(p, o, s) BOOST_PP_WHILE_169_C(BOOST_PP_BOOL(p##(170, s)), p, o, s)
+# define BOOST_PP_WHILE_170(p, o, s) BOOST_PP_WHILE_170_C(BOOST_PP_BOOL(p##(171, s)), p, o, s)
+# define BOOST_PP_WHILE_171(p, o, s) BOOST_PP_WHILE_171_C(BOOST_PP_BOOL(p##(172, s)), p, o, s)
+# define BOOST_PP_WHILE_172(p, o, s) BOOST_PP_WHILE_172_C(BOOST_PP_BOOL(p##(173, s)), p, o, s)
+# define BOOST_PP_WHILE_173(p, o, s) BOOST_PP_WHILE_173_C(BOOST_PP_BOOL(p##(174, s)), p, o, s)
+# define BOOST_PP_WHILE_174(p, o, s) BOOST_PP_WHILE_174_C(BOOST_PP_BOOL(p##(175, s)), p, o, s)
+# define BOOST_PP_WHILE_175(p, o, s) BOOST_PP_WHILE_175_C(BOOST_PP_BOOL(p##(176, s)), p, o, s)
+# define BOOST_PP_WHILE_176(p, o, s) BOOST_PP_WHILE_176_C(BOOST_PP_BOOL(p##(177, s)), p, o, s)
+# define BOOST_PP_WHILE_177(p, o, s) BOOST_PP_WHILE_177_C(BOOST_PP_BOOL(p##(178, s)), p, o, s)
+# define BOOST_PP_WHILE_178(p, o, s) BOOST_PP_WHILE_178_C(BOOST_PP_BOOL(p##(179, s)), p, o, s)
+# define BOOST_PP_WHILE_179(p, o, s) BOOST_PP_WHILE_179_C(BOOST_PP_BOOL(p##(180, s)), p, o, s)
+# define BOOST_PP_WHILE_180(p, o, s) BOOST_PP_WHILE_180_C(BOOST_PP_BOOL(p##(181, s)), p, o, s)
+# define BOOST_PP_WHILE_181(p, o, s) BOOST_PP_WHILE_181_C(BOOST_PP_BOOL(p##(182, s)), p, o, s)
+# define BOOST_PP_WHILE_182(p, o, s) BOOST_PP_WHILE_182_C(BOOST_PP_BOOL(p##(183, s)), p, o, s)
+# define BOOST_PP_WHILE_183(p, o, s) BOOST_PP_WHILE_183_C(BOOST_PP_BOOL(p##(184, s)), p, o, s)
+# define BOOST_PP_WHILE_184(p, o, s) BOOST_PP_WHILE_184_C(BOOST_PP_BOOL(p##(185, s)), p, o, s)
+# define BOOST_PP_WHILE_185(p, o, s) BOOST_PP_WHILE_185_C(BOOST_PP_BOOL(p##(186, s)), p, o, s)
+# define BOOST_PP_WHILE_186(p, o, s) BOOST_PP_WHILE_186_C(BOOST_PP_BOOL(p##(187, s)), p, o, s)
+# define BOOST_PP_WHILE_187(p, o, s) BOOST_PP_WHILE_187_C(BOOST_PP_BOOL(p##(188, s)), p, o, s)
+# define BOOST_PP_WHILE_188(p, o, s) BOOST_PP_WHILE_188_C(BOOST_PP_BOOL(p##(189, s)), p, o, s)
+# define BOOST_PP_WHILE_189(p, o, s) BOOST_PP_WHILE_189_C(BOOST_PP_BOOL(p##(190, s)), p, o, s)
+# define BOOST_PP_WHILE_190(p, o, s) BOOST_PP_WHILE_190_C(BOOST_PP_BOOL(p##(191, s)), p, o, s)
+# define BOOST_PP_WHILE_191(p, o, s) BOOST_PP_WHILE_191_C(BOOST_PP_BOOL(p##(192, s)), p, o, s)
+# define BOOST_PP_WHILE_192(p, o, s) BOOST_PP_WHILE_192_C(BOOST_PP_BOOL(p##(193, s)), p, o, s)
+# define BOOST_PP_WHILE_193(p, o, s) BOOST_PP_WHILE_193_C(BOOST_PP_BOOL(p##(194, s)), p, o, s)
+# define BOOST_PP_WHILE_194(p, o, s) BOOST_PP_WHILE_194_C(BOOST_PP_BOOL(p##(195, s)), p, o, s)
+# define BOOST_PP_WHILE_195(p, o, s) BOOST_PP_WHILE_195_C(BOOST_PP_BOOL(p##(196, s)), p, o, s)
+# define BOOST_PP_WHILE_196(p, o, s) BOOST_PP_WHILE_196_C(BOOST_PP_BOOL(p##(197, s)), p, o, s)
+# define BOOST_PP_WHILE_197(p, o, s) BOOST_PP_WHILE_197_C(BOOST_PP_BOOL(p##(198, s)), p, o, s)
+# define BOOST_PP_WHILE_198(p, o, s) BOOST_PP_WHILE_198_C(BOOST_PP_BOOL(p##(199, s)), p, o, s)
+# define BOOST_PP_WHILE_199(p, o, s) BOOST_PP_WHILE_199_C(BOOST_PP_BOOL(p##(200, s)), p, o, s)
+# define BOOST_PP_WHILE_200(p, o, s) BOOST_PP_WHILE_200_C(BOOST_PP_BOOL(p##(201, s)), p, o, s)
+# define BOOST_PP_WHILE_201(p, o, s) BOOST_PP_WHILE_201_C(BOOST_PP_BOOL(p##(202, s)), p, o, s)
+# define BOOST_PP_WHILE_202(p, o, s) BOOST_PP_WHILE_202_C(BOOST_PP_BOOL(p##(203, s)), p, o, s)
+# define BOOST_PP_WHILE_203(p, o, s) BOOST_PP_WHILE_203_C(BOOST_PP_BOOL(p##(204, s)), p, o, s)
+# define BOOST_PP_WHILE_204(p, o, s) BOOST_PP_WHILE_204_C(BOOST_PP_BOOL(p##(205, s)), p, o, s)
+# define BOOST_PP_WHILE_205(p, o, s) BOOST_PP_WHILE_205_C(BOOST_PP_BOOL(p##(206, s)), p, o, s)
+# define BOOST_PP_WHILE_206(p, o, s) BOOST_PP_WHILE_206_C(BOOST_PP_BOOL(p##(207, s)), p, o, s)
+# define BOOST_PP_WHILE_207(p, o, s) BOOST_PP_WHILE_207_C(BOOST_PP_BOOL(p##(208, s)), p, o, s)
+# define BOOST_PP_WHILE_208(p, o, s) BOOST_PP_WHILE_208_C(BOOST_PP_BOOL(p##(209, s)), p, o, s)
+# define BOOST_PP_WHILE_209(p, o, s) BOOST_PP_WHILE_209_C(BOOST_PP_BOOL(p##(210, s)), p, o, s)
+# define BOOST_PP_WHILE_210(p, o, s) BOOST_PP_WHILE_210_C(BOOST_PP_BOOL(p##(211, s)), p, o, s)
+# define BOOST_PP_WHILE_211(p, o, s) BOOST_PP_WHILE_211_C(BOOST_PP_BOOL(p##(212, s)), p, o, s)
+# define BOOST_PP_WHILE_212(p, o, s) BOOST_PP_WHILE_212_C(BOOST_PP_BOOL(p##(213, s)), p, o, s)
+# define BOOST_PP_WHILE_213(p, o, s) BOOST_PP_WHILE_213_C(BOOST_PP_BOOL(p##(214, s)), p, o, s)
+# define BOOST_PP_WHILE_214(p, o, s) BOOST_PP_WHILE_214_C(BOOST_PP_BOOL(p##(215, s)), p, o, s)
+# define BOOST_PP_WHILE_215(p, o, s) BOOST_PP_WHILE_215_C(BOOST_PP_BOOL(p##(216, s)), p, o, s)
+# define BOOST_PP_WHILE_216(p, o, s) BOOST_PP_WHILE_216_C(BOOST_PP_BOOL(p##(217, s)), p, o, s)
+# define BOOST_PP_WHILE_217(p, o, s) BOOST_PP_WHILE_217_C(BOOST_PP_BOOL(p##(218, s)), p, o, s)
+# define BOOST_PP_WHILE_218(p, o, s) BOOST_PP_WHILE_218_C(BOOST_PP_BOOL(p##(219, s)), p, o, s)
+# define BOOST_PP_WHILE_219(p, o, s) BOOST_PP_WHILE_219_C(BOOST_PP_BOOL(p##(220, s)), p, o, s)
+# define BOOST_PP_WHILE_220(p, o, s) BOOST_PP_WHILE_220_C(BOOST_PP_BOOL(p##(221, s)), p, o, s)
+# define BOOST_PP_WHILE_221(p, o, s) BOOST_PP_WHILE_221_C(BOOST_PP_BOOL(p##(222, s)), p, o, s)
+# define BOOST_PP_WHILE_222(p, o, s) BOOST_PP_WHILE_222_C(BOOST_PP_BOOL(p##(223, s)), p, o, s)
+# define BOOST_PP_WHILE_223(p, o, s) BOOST_PP_WHILE_223_C(BOOST_PP_BOOL(p##(224, s)), p, o, s)
+# define BOOST_PP_WHILE_224(p, o, s) BOOST_PP_WHILE_224_C(BOOST_PP_BOOL(p##(225, s)), p, o, s)
+# define BOOST_PP_WHILE_225(p, o, s) BOOST_PP_WHILE_225_C(BOOST_PP_BOOL(p##(226, s)), p, o, s)
+# define BOOST_PP_WHILE_226(p, o, s) BOOST_PP_WHILE_226_C(BOOST_PP_BOOL(p##(227, s)), p, o, s)
+# define BOOST_PP_WHILE_227(p, o, s) BOOST_PP_WHILE_227_C(BOOST_PP_BOOL(p##(228, s)), p, o, s)
+# define BOOST_PP_WHILE_228(p, o, s) BOOST_PP_WHILE_228_C(BOOST_PP_BOOL(p##(229, s)), p, o, s)
+# define BOOST_PP_WHILE_229(p, o, s) BOOST_PP_WHILE_229_C(BOOST_PP_BOOL(p##(230, s)), p, o, s)
+# define BOOST_PP_WHILE_230(p, o, s) BOOST_PP_WHILE_230_C(BOOST_PP_BOOL(p##(231, s)), p, o, s)
+# define BOOST_PP_WHILE_231(p, o, s) BOOST_PP_WHILE_231_C(BOOST_PP_BOOL(p##(232, s)), p, o, s)
+# define BOOST_PP_WHILE_232(p, o, s) BOOST_PP_WHILE_232_C(BOOST_PP_BOOL(p##(233, s)), p, o, s)
+# define BOOST_PP_WHILE_233(p, o, s) BOOST_PP_WHILE_233_C(BOOST_PP_BOOL(p##(234, s)), p, o, s)
+# define BOOST_PP_WHILE_234(p, o, s) BOOST_PP_WHILE_234_C(BOOST_PP_BOOL(p##(235, s)), p, o, s)
+# define BOOST_PP_WHILE_235(p, o, s) BOOST_PP_WHILE_235_C(BOOST_PP_BOOL(p##(236, s)), p, o, s)
+# define BOOST_PP_WHILE_236(p, o, s) BOOST_PP_WHILE_236_C(BOOST_PP_BOOL(p##(237, s)), p, o, s)
+# define BOOST_PP_WHILE_237(p, o, s) BOOST_PP_WHILE_237_C(BOOST_PP_BOOL(p##(238, s)), p, o, s)
+# define BOOST_PP_WHILE_238(p, o, s) BOOST_PP_WHILE_238_C(BOOST_PP_BOOL(p##(239, s)), p, o, s)
+# define BOOST_PP_WHILE_239(p, o, s) BOOST_PP_WHILE_239_C(BOOST_PP_BOOL(p##(240, s)), p, o, s)
+# define BOOST_PP_WHILE_240(p, o, s) BOOST_PP_WHILE_240_C(BOOST_PP_BOOL(p##(241, s)), p, o, s)
+# define BOOST_PP_WHILE_241(p, o, s) BOOST_PP_WHILE_241_C(BOOST_PP_BOOL(p##(242, s)), p, o, s)
+# define BOOST_PP_WHILE_242(p, o, s) BOOST_PP_WHILE_242_C(BOOST_PP_BOOL(p##(243, s)), p, o, s)
+# define BOOST_PP_WHILE_243(p, o, s) BOOST_PP_WHILE_243_C(BOOST_PP_BOOL(p##(244, s)), p, o, s)
+# define BOOST_PP_WHILE_244(p, o, s) BOOST_PP_WHILE_244_C(BOOST_PP_BOOL(p##(245, s)), p, o, s)
+# define BOOST_PP_WHILE_245(p, o, s) BOOST_PP_WHILE_245_C(BOOST_PP_BOOL(p##(246, s)), p, o, s)
+# define BOOST_PP_WHILE_246(p, o, s) BOOST_PP_WHILE_246_C(BOOST_PP_BOOL(p##(247, s)), p, o, s)
+# define BOOST_PP_WHILE_247(p, o, s) BOOST_PP_WHILE_247_C(BOOST_PP_BOOL(p##(248, s)), p, o, s)
+# define BOOST_PP_WHILE_248(p, o, s) BOOST_PP_WHILE_248_C(BOOST_PP_BOOL(p##(249, s)), p, o, s)
+# define BOOST_PP_WHILE_249(p, o, s) BOOST_PP_WHILE_249_C(BOOST_PP_BOOL(p##(250, s)), p, o, s)
+# define BOOST_PP_WHILE_250(p, o, s) BOOST_PP_WHILE_250_C(BOOST_PP_BOOL(p##(251, s)), p, o, s)
+# define BOOST_PP_WHILE_251(p, o, s) BOOST_PP_WHILE_251_C(BOOST_PP_BOOL(p##(252, s)), p, o, s)
+# define BOOST_PP_WHILE_252(p, o, s) BOOST_PP_WHILE_252_C(BOOST_PP_BOOL(p##(253, s)), p, o, s)
+# define BOOST_PP_WHILE_253(p, o, s) BOOST_PP_WHILE_253_C(BOOST_PP_BOOL(p##(254, s)), p, o, s)
+# define BOOST_PP_WHILE_254(p, o, s) BOOST_PP_WHILE_254_C(BOOST_PP_BOOL(p##(255, s)), p, o, s)
+# define BOOST_PP_WHILE_255(p, o, s) BOOST_PP_WHILE_255_C(BOOST_PP_BOOL(p##(256, s)), p, o, s)
+# define BOOST_PP_WHILE_256(p, o, s) BOOST_PP_WHILE_256_C(BOOST_PP_BOOL(p##(257, s)), p, o, s)
+#
+# define BOOST_PP_WHILE_1_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_2, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(2, s))
+# define BOOST_PP_WHILE_2_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_3, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(3, s))
+# define BOOST_PP_WHILE_3_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_4, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(4, s))
+# define BOOST_PP_WHILE_4_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_5, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(5, s))
+# define BOOST_PP_WHILE_5_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_6, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(6, s))
+# define BOOST_PP_WHILE_6_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_7, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(7, s))
+# define BOOST_PP_WHILE_7_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_8, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(8, s))
+# define BOOST_PP_WHILE_8_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_9, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(9, s))
+# define BOOST_PP_WHILE_9_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_10, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(10, s))
+# define BOOST_PP_WHILE_10_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_11, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(11, s))
+# define BOOST_PP_WHILE_11_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_12, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(12, s))
+# define BOOST_PP_WHILE_12_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_13, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(13, s))
+# define BOOST_PP_WHILE_13_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_14, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(14, s))
+# define BOOST_PP_WHILE_14_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_15, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(15, s))
+# define BOOST_PP_WHILE_15_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_16, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(16, s))
+# define BOOST_PP_WHILE_16_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_17, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(17, s))
+# define BOOST_PP_WHILE_17_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_18, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(18, s))
+# define BOOST_PP_WHILE_18_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_19, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(19, s))
+# define BOOST_PP_WHILE_19_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_20, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(20, s))
+# define BOOST_PP_WHILE_20_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_21, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(21, s))
+# define BOOST_PP_WHILE_21_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_22, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(22, s))
+# define BOOST_PP_WHILE_22_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_23, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(23, s))
+# define BOOST_PP_WHILE_23_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_24, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(24, s))
+# define BOOST_PP_WHILE_24_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_25, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(25, s))
+# define BOOST_PP_WHILE_25_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_26, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(26, s))
+# define BOOST_PP_WHILE_26_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_27, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(27, s))
+# define BOOST_PP_WHILE_27_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_28, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(28, s))
+# define BOOST_PP_WHILE_28_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_29, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(29, s))
+# define BOOST_PP_WHILE_29_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_30, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(30, s))
+# define BOOST_PP_WHILE_30_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_31, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(31, s))
+# define BOOST_PP_WHILE_31_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_32, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(32, s))
+# define BOOST_PP_WHILE_32_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_33, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(33, s))
+# define BOOST_PP_WHILE_33_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_34, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(34, s))
+# define BOOST_PP_WHILE_34_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_35, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(35, s))
+# define BOOST_PP_WHILE_35_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_36, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(36, s))
+# define BOOST_PP_WHILE_36_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_37, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(37, s))
+# define BOOST_PP_WHILE_37_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_38, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(38, s))
+# define BOOST_PP_WHILE_38_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_39, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(39, s))
+# define BOOST_PP_WHILE_39_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_40, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(40, s))
+# define BOOST_PP_WHILE_40_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_41, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(41, s))
+# define BOOST_PP_WHILE_41_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_42, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(42, s))
+# define BOOST_PP_WHILE_42_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_43, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(43, s))
+# define BOOST_PP_WHILE_43_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_44, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(44, s))
+# define BOOST_PP_WHILE_44_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_45, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(45, s))
+# define BOOST_PP_WHILE_45_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_46, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(46, s))
+# define BOOST_PP_WHILE_46_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_47, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(47, s))
+# define BOOST_PP_WHILE_47_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_48, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(48, s))
+# define BOOST_PP_WHILE_48_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_49, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(49, s))
+# define BOOST_PP_WHILE_49_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_50, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(50, s))
+# define BOOST_PP_WHILE_50_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_51, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(51, s))
+# define BOOST_PP_WHILE_51_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_52, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(52, s))
+# define BOOST_PP_WHILE_52_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_53, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(53, s))
+# define BOOST_PP_WHILE_53_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_54, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(54, s))
+# define BOOST_PP_WHILE_54_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_55, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(55, s))
+# define BOOST_PP_WHILE_55_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_56, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(56, s))
+# define BOOST_PP_WHILE_56_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_57, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(57, s))
+# define BOOST_PP_WHILE_57_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_58, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(58, s))
+# define BOOST_PP_WHILE_58_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_59, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(59, s))
+# define BOOST_PP_WHILE_59_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_60, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(60, s))
+# define BOOST_PP_WHILE_60_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_61, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(61, s))
+# define BOOST_PP_WHILE_61_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_62, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(62, s))
+# define BOOST_PP_WHILE_62_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_63, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(63, s))
+# define BOOST_PP_WHILE_63_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_64, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(64, s))
+# define BOOST_PP_WHILE_64_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_65, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(65, s))
+# define BOOST_PP_WHILE_65_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_66, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(66, s))
+# define BOOST_PP_WHILE_66_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_67, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(67, s))
+# define BOOST_PP_WHILE_67_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_68, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(68, s))
+# define BOOST_PP_WHILE_68_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_69, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(69, s))
+# define BOOST_PP_WHILE_69_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_70, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(70, s))
+# define BOOST_PP_WHILE_70_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_71, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(71, s))
+# define BOOST_PP_WHILE_71_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_72, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(72, s))
+# define BOOST_PP_WHILE_72_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_73, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(73, s))
+# define BOOST_PP_WHILE_73_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_74, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(74, s))
+# define BOOST_PP_WHILE_74_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_75, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(75, s))
+# define BOOST_PP_WHILE_75_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_76, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(76, s))
+# define BOOST_PP_WHILE_76_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_77, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(77, s))
+# define BOOST_PP_WHILE_77_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_78, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(78, s))
+# define BOOST_PP_WHILE_78_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_79, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(79, s))
+# define BOOST_PP_WHILE_79_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_80, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(80, s))
+# define BOOST_PP_WHILE_80_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_81, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(81, s))
+# define BOOST_PP_WHILE_81_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_82, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(82, s))
+# define BOOST_PP_WHILE_82_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_83, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(83, s))
+# define BOOST_PP_WHILE_83_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_84, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(84, s))
+# define BOOST_PP_WHILE_84_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_85, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(85, s))
+# define BOOST_PP_WHILE_85_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_86, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(86, s))
+# define BOOST_PP_WHILE_86_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_87, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(87, s))
+# define BOOST_PP_WHILE_87_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_88, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(88, s))
+# define BOOST_PP_WHILE_88_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_89, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(89, s))
+# define BOOST_PP_WHILE_89_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_90, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(90, s))
+# define BOOST_PP_WHILE_90_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_91, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(91, s))
+# define BOOST_PP_WHILE_91_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_92, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(92, s))
+# define BOOST_PP_WHILE_92_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_93, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(93, s))
+# define BOOST_PP_WHILE_93_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_94, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(94, s))
+# define BOOST_PP_WHILE_94_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_95, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(95, s))
+# define BOOST_PP_WHILE_95_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_96, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(96, s))
+# define BOOST_PP_WHILE_96_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_97, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(97, s))
+# define BOOST_PP_WHILE_97_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_98, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(98, s))
+# define BOOST_PP_WHILE_98_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_99, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(99, s))
+# define BOOST_PP_WHILE_99_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_100, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(100, s))
+# define BOOST_PP_WHILE_100_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_101, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(101, s))
+# define BOOST_PP_WHILE_101_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_102, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(102, s))
+# define BOOST_PP_WHILE_102_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_103, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(103, s))
+# define BOOST_PP_WHILE_103_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_104, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(104, s))
+# define BOOST_PP_WHILE_104_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_105, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(105, s))
+# define BOOST_PP_WHILE_105_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_106, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(106, s))
+# define BOOST_PP_WHILE_106_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_107, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(107, s))
+# define BOOST_PP_WHILE_107_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_108, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(108, s))
+# define BOOST_PP_WHILE_108_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_109, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(109, s))
+# define BOOST_PP_WHILE_109_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_110, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(110, s))
+# define BOOST_PP_WHILE_110_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_111, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(111, s))
+# define BOOST_PP_WHILE_111_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_112, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(112, s))
+# define BOOST_PP_WHILE_112_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_113, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(113, s))
+# define BOOST_PP_WHILE_113_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_114, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(114, s))
+# define BOOST_PP_WHILE_114_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_115, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(115, s))
+# define BOOST_PP_WHILE_115_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_116, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(116, s))
+# define BOOST_PP_WHILE_116_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_117, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(117, s))
+# define BOOST_PP_WHILE_117_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_118, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(118, s))
+# define BOOST_PP_WHILE_118_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_119, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(119, s))
+# define BOOST_PP_WHILE_119_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_120, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(120, s))
+# define BOOST_PP_WHILE_120_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_121, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(121, s))
+# define BOOST_PP_WHILE_121_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_122, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(122, s))
+# define BOOST_PP_WHILE_122_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_123, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(123, s))
+# define BOOST_PP_WHILE_123_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_124, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(124, s))
+# define BOOST_PP_WHILE_124_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_125, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(125, s))
+# define BOOST_PP_WHILE_125_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_126, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(126, s))
+# define BOOST_PP_WHILE_126_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_127, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(127, s))
+# define BOOST_PP_WHILE_127_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_128, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(128, s))
+# define BOOST_PP_WHILE_128_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_129, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(129, s))
+# define BOOST_PP_WHILE_129_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_130, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(130, s))
+# define BOOST_PP_WHILE_130_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_131, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(131, s))
+# define BOOST_PP_WHILE_131_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_132, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(132, s))
+# define BOOST_PP_WHILE_132_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_133, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(133, s))
+# define BOOST_PP_WHILE_133_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_134, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(134, s))
+# define BOOST_PP_WHILE_134_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_135, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(135, s))
+# define BOOST_PP_WHILE_135_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_136, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(136, s))
+# define BOOST_PP_WHILE_136_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_137, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(137, s))
+# define BOOST_PP_WHILE_137_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_138, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(138, s))
+# define BOOST_PP_WHILE_138_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_139, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(139, s))
+# define BOOST_PP_WHILE_139_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_140, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(140, s))
+# define BOOST_PP_WHILE_140_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_141, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(141, s))
+# define BOOST_PP_WHILE_141_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_142, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(142, s))
+# define BOOST_PP_WHILE_142_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_143, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(143, s))
+# define BOOST_PP_WHILE_143_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_144, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(144, s))
+# define BOOST_PP_WHILE_144_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_145, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(145, s))
+# define BOOST_PP_WHILE_145_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_146, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(146, s))
+# define BOOST_PP_WHILE_146_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_147, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(147, s))
+# define BOOST_PP_WHILE_147_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_148, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(148, s))
+# define BOOST_PP_WHILE_148_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_149, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(149, s))
+# define BOOST_PP_WHILE_149_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_150, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(150, s))
+# define BOOST_PP_WHILE_150_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_151, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(151, s))
+# define BOOST_PP_WHILE_151_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_152, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(152, s))
+# define BOOST_PP_WHILE_152_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_153, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(153, s))
+# define BOOST_PP_WHILE_153_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_154, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(154, s))
+# define BOOST_PP_WHILE_154_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_155, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(155, s))
+# define BOOST_PP_WHILE_155_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_156, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(156, s))
+# define BOOST_PP_WHILE_156_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_157, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(157, s))
+# define BOOST_PP_WHILE_157_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_158, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(158, s))
+# define BOOST_PP_WHILE_158_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_159, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(159, s))
+# define BOOST_PP_WHILE_159_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_160, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(160, s))
+# define BOOST_PP_WHILE_160_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_161, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(161, s))
+# define BOOST_PP_WHILE_161_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_162, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(162, s))
+# define BOOST_PP_WHILE_162_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_163, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(163, s))
+# define BOOST_PP_WHILE_163_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_164, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(164, s))
+# define BOOST_PP_WHILE_164_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_165, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(165, s))
+# define BOOST_PP_WHILE_165_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_166, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(166, s))
+# define BOOST_PP_WHILE_166_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_167, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(167, s))
+# define BOOST_PP_WHILE_167_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_168, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(168, s))
+# define BOOST_PP_WHILE_168_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_169, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(169, s))
+# define BOOST_PP_WHILE_169_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_170, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(170, s))
+# define BOOST_PP_WHILE_170_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_171, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(171, s))
+# define BOOST_PP_WHILE_171_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_172, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(172, s))
+# define BOOST_PP_WHILE_172_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_173, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(173, s))
+# define BOOST_PP_WHILE_173_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_174, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(174, s))
+# define BOOST_PP_WHILE_174_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_175, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(175, s))
+# define BOOST_PP_WHILE_175_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_176, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(176, s))
+# define BOOST_PP_WHILE_176_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_177, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(177, s))
+# define BOOST_PP_WHILE_177_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_178, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(178, s))
+# define BOOST_PP_WHILE_178_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_179, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(179, s))
+# define BOOST_PP_WHILE_179_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_180, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(180, s))
+# define BOOST_PP_WHILE_180_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_181, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(181, s))
+# define BOOST_PP_WHILE_181_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_182, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(182, s))
+# define BOOST_PP_WHILE_182_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_183, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(183, s))
+# define BOOST_PP_WHILE_183_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_184, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(184, s))
+# define BOOST_PP_WHILE_184_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_185, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(185, s))
+# define BOOST_PP_WHILE_185_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_186, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(186, s))
+# define BOOST_PP_WHILE_186_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_187, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(187, s))
+# define BOOST_PP_WHILE_187_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_188, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(188, s))
+# define BOOST_PP_WHILE_188_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_189, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(189, s))
+# define BOOST_PP_WHILE_189_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_190, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(190, s))
+# define BOOST_PP_WHILE_190_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_191, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(191, s))
+# define BOOST_PP_WHILE_191_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_192, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(192, s))
+# define BOOST_PP_WHILE_192_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_193, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(193, s))
+# define BOOST_PP_WHILE_193_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_194, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(194, s))
+# define BOOST_PP_WHILE_194_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_195, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(195, s))
+# define BOOST_PP_WHILE_195_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_196, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(196, s))
+# define BOOST_PP_WHILE_196_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_197, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(197, s))
+# define BOOST_PP_WHILE_197_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_198, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(198, s))
+# define BOOST_PP_WHILE_198_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_199, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(199, s))
+# define BOOST_PP_WHILE_199_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_200, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(200, s))
+# define BOOST_PP_WHILE_200_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_201, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(201, s))
+# define BOOST_PP_WHILE_201_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_202, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(202, s))
+# define BOOST_PP_WHILE_202_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_203, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(203, s))
+# define BOOST_PP_WHILE_203_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_204, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(204, s))
+# define BOOST_PP_WHILE_204_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_205, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(205, s))
+# define BOOST_PP_WHILE_205_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_206, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(206, s))
+# define BOOST_PP_WHILE_206_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_207, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(207, s))
+# define BOOST_PP_WHILE_207_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_208, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(208, s))
+# define BOOST_PP_WHILE_208_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_209, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(209, s))
+# define BOOST_PP_WHILE_209_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_210, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(210, s))
+# define BOOST_PP_WHILE_210_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_211, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(211, s))
+# define BOOST_PP_WHILE_211_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_212, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(212, s))
+# define BOOST_PP_WHILE_212_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_213, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(213, s))
+# define BOOST_PP_WHILE_213_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_214, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(214, s))
+# define BOOST_PP_WHILE_214_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_215, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(215, s))
+# define BOOST_PP_WHILE_215_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_216, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(216, s))
+# define BOOST_PP_WHILE_216_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_217, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(217, s))
+# define BOOST_PP_WHILE_217_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_218, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(218, s))
+# define BOOST_PP_WHILE_218_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_219, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(219, s))
+# define BOOST_PP_WHILE_219_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_220, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(220, s))
+# define BOOST_PP_WHILE_220_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_221, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(221, s))
+# define BOOST_PP_WHILE_221_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_222, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(222, s))
+# define BOOST_PP_WHILE_222_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_223, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(223, s))
+# define BOOST_PP_WHILE_223_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_224, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(224, s))
+# define BOOST_PP_WHILE_224_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_225, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(225, s))
+# define BOOST_PP_WHILE_225_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_226, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(226, s))
+# define BOOST_PP_WHILE_226_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_227, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(227, s))
+# define BOOST_PP_WHILE_227_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_228, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(228, s))
+# define BOOST_PP_WHILE_228_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_229, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(229, s))
+# define BOOST_PP_WHILE_229_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_230, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(230, s))
+# define BOOST_PP_WHILE_230_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_231, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(231, s))
+# define BOOST_PP_WHILE_231_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_232, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(232, s))
+# define BOOST_PP_WHILE_232_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_233, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(233, s))
+# define BOOST_PP_WHILE_233_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_234, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(234, s))
+# define BOOST_PP_WHILE_234_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_235, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(235, s))
+# define BOOST_PP_WHILE_235_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_236, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(236, s))
+# define BOOST_PP_WHILE_236_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_237, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(237, s))
+# define BOOST_PP_WHILE_237_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_238, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(238, s))
+# define BOOST_PP_WHILE_238_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_239, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(239, s))
+# define BOOST_PP_WHILE_239_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_240, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(240, s))
+# define BOOST_PP_WHILE_240_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_241, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(241, s))
+# define BOOST_PP_WHILE_241_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_242, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(242, s))
+# define BOOST_PP_WHILE_242_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_243, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(243, s))
+# define BOOST_PP_WHILE_243_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_244, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(244, s))
+# define BOOST_PP_WHILE_244_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_245, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(245, s))
+# define BOOST_PP_WHILE_245_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_246, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(246, s))
+# define BOOST_PP_WHILE_246_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_247, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(247, s))
+# define BOOST_PP_WHILE_247_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_248, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(248, s))
+# define BOOST_PP_WHILE_248_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_249, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(249, s))
+# define BOOST_PP_WHILE_249_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_250, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(250, s))
+# define BOOST_PP_WHILE_250_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_251, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(251, s))
+# define BOOST_PP_WHILE_251_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_252, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(252, s))
+# define BOOST_PP_WHILE_252_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_253, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(253, s))
+# define BOOST_PP_WHILE_253_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_254, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(254, s))
+# define BOOST_PP_WHILE_254_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_255, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(255, s))
+# define BOOST_PP_WHILE_255_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_256, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(256, s))
+# define BOOST_PP_WHILE_256_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_257, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(257, s))
+#
+#
+# endif
diff --git a/boost/boost/preprocessor/control/detail/edg/while.hpp b/boost/boost/preprocessor/control/detail/edg/while.hpp
new file mode 100644
index 00000000000..ce28eb22e1d
--- /dev/null
+++ b/boost/boost/preprocessor/control/detail/edg/while.hpp
@@ -0,0 +1,534 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_CONTROL_DETAIL_EDG_WHILE_HPP
+# define BOOST_PREPROCESSOR_CONTROL_DETAIL_EDG_WHILE_HPP
+#
+# include <boost/preprocessor/control/if.hpp>
+# include <boost/preprocessor/tuple/eat.hpp>
+#
+# define BOOST_PP_WHILE_1(p, o, s) BOOST_PP_WHILE_1_I(p, o, s)
+# define BOOST_PP_WHILE_2(p, o, s) BOOST_PP_WHILE_2_I(p, o, s)
+# define BOOST_PP_WHILE_3(p, o, s) BOOST_PP_WHILE_3_I(p, o, s)
+# define BOOST_PP_WHILE_4(p, o, s) BOOST_PP_WHILE_4_I(p, o, s)
+# define BOOST_PP_WHILE_5(p, o, s) BOOST_PP_WHILE_5_I(p, o, s)
+# define BOOST_PP_WHILE_6(p, o, s) BOOST_PP_WHILE_6_I(p, o, s)
+# define BOOST_PP_WHILE_7(p, o, s) BOOST_PP_WHILE_7_I(p, o, s)
+# define BOOST_PP_WHILE_8(p, o, s) BOOST_PP_WHILE_8_I(p, o, s)
+# define BOOST_PP_WHILE_9(p, o, s) BOOST_PP_WHILE_9_I(p, o, s)
+# define BOOST_PP_WHILE_10(p, o, s) BOOST_PP_WHILE_10_I(p, o, s)
+# define BOOST_PP_WHILE_11(p, o, s) BOOST_PP_WHILE_11_I(p, o, s)
+# define BOOST_PP_WHILE_12(p, o, s) BOOST_PP_WHILE_12_I(p, o, s)
+# define BOOST_PP_WHILE_13(p, o, s) BOOST_PP_WHILE_13_I(p, o, s)
+# define BOOST_PP_WHILE_14(p, o, s) BOOST_PP_WHILE_14_I(p, o, s)
+# define BOOST_PP_WHILE_15(p, o, s) BOOST_PP_WHILE_15_I(p, o, s)
+# define BOOST_PP_WHILE_16(p, o, s) BOOST_PP_WHILE_16_I(p, o, s)
+# define BOOST_PP_WHILE_17(p, o, s) BOOST_PP_WHILE_17_I(p, o, s)
+# define BOOST_PP_WHILE_18(p, o, s) BOOST_PP_WHILE_18_I(p, o, s)
+# define BOOST_PP_WHILE_19(p, o, s) BOOST_PP_WHILE_19_I(p, o, s)
+# define BOOST_PP_WHILE_20(p, o, s) BOOST_PP_WHILE_20_I(p, o, s)
+# define BOOST_PP_WHILE_21(p, o, s) BOOST_PP_WHILE_21_I(p, o, s)
+# define BOOST_PP_WHILE_22(p, o, s) BOOST_PP_WHILE_22_I(p, o, s)
+# define BOOST_PP_WHILE_23(p, o, s) BOOST_PP_WHILE_23_I(p, o, s)
+# define BOOST_PP_WHILE_24(p, o, s) BOOST_PP_WHILE_24_I(p, o, s)
+# define BOOST_PP_WHILE_25(p, o, s) BOOST_PP_WHILE_25_I(p, o, s)
+# define BOOST_PP_WHILE_26(p, o, s) BOOST_PP_WHILE_26_I(p, o, s)
+# define BOOST_PP_WHILE_27(p, o, s) BOOST_PP_WHILE_27_I(p, o, s)
+# define BOOST_PP_WHILE_28(p, o, s) BOOST_PP_WHILE_28_I(p, o, s)
+# define BOOST_PP_WHILE_29(p, o, s) BOOST_PP_WHILE_29_I(p, o, s)
+# define BOOST_PP_WHILE_30(p, o, s) BOOST_PP_WHILE_30_I(p, o, s)
+# define BOOST_PP_WHILE_31(p, o, s) BOOST_PP_WHILE_31_I(p, o, s)
+# define BOOST_PP_WHILE_32(p, o, s) BOOST_PP_WHILE_32_I(p, o, s)
+# define BOOST_PP_WHILE_33(p, o, s) BOOST_PP_WHILE_33_I(p, o, s)
+# define BOOST_PP_WHILE_34(p, o, s) BOOST_PP_WHILE_34_I(p, o, s)
+# define BOOST_PP_WHILE_35(p, o, s) BOOST_PP_WHILE_35_I(p, o, s)
+# define BOOST_PP_WHILE_36(p, o, s) BOOST_PP_WHILE_36_I(p, o, s)
+# define BOOST_PP_WHILE_37(p, o, s) BOOST_PP_WHILE_37_I(p, o, s)
+# define BOOST_PP_WHILE_38(p, o, s) BOOST_PP_WHILE_38_I(p, o, s)
+# define BOOST_PP_WHILE_39(p, o, s) BOOST_PP_WHILE_39_I(p, o, s)
+# define BOOST_PP_WHILE_40(p, o, s) BOOST_PP_WHILE_40_I(p, o, s)
+# define BOOST_PP_WHILE_41(p, o, s) BOOST_PP_WHILE_41_I(p, o, s)
+# define BOOST_PP_WHILE_42(p, o, s) BOOST_PP_WHILE_42_I(p, o, s)
+# define BOOST_PP_WHILE_43(p, o, s) BOOST_PP_WHILE_43_I(p, o, s)
+# define BOOST_PP_WHILE_44(p, o, s) BOOST_PP_WHILE_44_I(p, o, s)
+# define BOOST_PP_WHILE_45(p, o, s) BOOST_PP_WHILE_45_I(p, o, s)
+# define BOOST_PP_WHILE_46(p, o, s) BOOST_PP_WHILE_46_I(p, o, s)
+# define BOOST_PP_WHILE_47(p, o, s) BOOST_PP_WHILE_47_I(p, o, s)
+# define BOOST_PP_WHILE_48(p, o, s) BOOST_PP_WHILE_48_I(p, o, s)
+# define BOOST_PP_WHILE_49(p, o, s) BOOST_PP_WHILE_49_I(p, o, s)
+# define BOOST_PP_WHILE_50(p, o, s) BOOST_PP_WHILE_50_I(p, o, s)
+# define BOOST_PP_WHILE_51(p, o, s) BOOST_PP_WHILE_51_I(p, o, s)
+# define BOOST_PP_WHILE_52(p, o, s) BOOST_PP_WHILE_52_I(p, o, s)
+# define BOOST_PP_WHILE_53(p, o, s) BOOST_PP_WHILE_53_I(p, o, s)
+# define BOOST_PP_WHILE_54(p, o, s) BOOST_PP_WHILE_54_I(p, o, s)
+# define BOOST_PP_WHILE_55(p, o, s) BOOST_PP_WHILE_55_I(p, o, s)
+# define BOOST_PP_WHILE_56(p, o, s) BOOST_PP_WHILE_56_I(p, o, s)
+# define BOOST_PP_WHILE_57(p, o, s) BOOST_PP_WHILE_57_I(p, o, s)
+# define BOOST_PP_WHILE_58(p, o, s) BOOST_PP_WHILE_58_I(p, o, s)
+# define BOOST_PP_WHILE_59(p, o, s) BOOST_PP_WHILE_59_I(p, o, s)
+# define BOOST_PP_WHILE_60(p, o, s) BOOST_PP_WHILE_60_I(p, o, s)
+# define BOOST_PP_WHILE_61(p, o, s) BOOST_PP_WHILE_61_I(p, o, s)
+# define BOOST_PP_WHILE_62(p, o, s) BOOST_PP_WHILE_62_I(p, o, s)
+# define BOOST_PP_WHILE_63(p, o, s) BOOST_PP_WHILE_63_I(p, o, s)
+# define BOOST_PP_WHILE_64(p, o, s) BOOST_PP_WHILE_64_I(p, o, s)
+# define BOOST_PP_WHILE_65(p, o, s) BOOST_PP_WHILE_65_I(p, o, s)
+# define BOOST_PP_WHILE_66(p, o, s) BOOST_PP_WHILE_66_I(p, o, s)
+# define BOOST_PP_WHILE_67(p, o, s) BOOST_PP_WHILE_67_I(p, o, s)
+# define BOOST_PP_WHILE_68(p, o, s) BOOST_PP_WHILE_68_I(p, o, s)
+# define BOOST_PP_WHILE_69(p, o, s) BOOST_PP_WHILE_69_I(p, o, s)
+# define BOOST_PP_WHILE_70(p, o, s) BOOST_PP_WHILE_70_I(p, o, s)
+# define BOOST_PP_WHILE_71(p, o, s) BOOST_PP_WHILE_71_I(p, o, s)
+# define BOOST_PP_WHILE_72(p, o, s) BOOST_PP_WHILE_72_I(p, o, s)
+# define BOOST_PP_WHILE_73(p, o, s) BOOST_PP_WHILE_73_I(p, o, s)
+# define BOOST_PP_WHILE_74(p, o, s) BOOST_PP_WHILE_74_I(p, o, s)
+# define BOOST_PP_WHILE_75(p, o, s) BOOST_PP_WHILE_75_I(p, o, s)
+# define BOOST_PP_WHILE_76(p, o, s) BOOST_PP_WHILE_76_I(p, o, s)
+# define BOOST_PP_WHILE_77(p, o, s) BOOST_PP_WHILE_77_I(p, o, s)
+# define BOOST_PP_WHILE_78(p, o, s) BOOST_PP_WHILE_78_I(p, o, s)
+# define BOOST_PP_WHILE_79(p, o, s) BOOST_PP_WHILE_79_I(p, o, s)
+# define BOOST_PP_WHILE_80(p, o, s) BOOST_PP_WHILE_80_I(p, o, s)
+# define BOOST_PP_WHILE_81(p, o, s) BOOST_PP_WHILE_81_I(p, o, s)
+# define BOOST_PP_WHILE_82(p, o, s) BOOST_PP_WHILE_82_I(p, o, s)
+# define BOOST_PP_WHILE_83(p, o, s) BOOST_PP_WHILE_83_I(p, o, s)
+# define BOOST_PP_WHILE_84(p, o, s) BOOST_PP_WHILE_84_I(p, o, s)
+# define BOOST_PP_WHILE_85(p, o, s) BOOST_PP_WHILE_85_I(p, o, s)
+# define BOOST_PP_WHILE_86(p, o, s) BOOST_PP_WHILE_86_I(p, o, s)
+# define BOOST_PP_WHILE_87(p, o, s) BOOST_PP_WHILE_87_I(p, o, s)
+# define BOOST_PP_WHILE_88(p, o, s) BOOST_PP_WHILE_88_I(p, o, s)
+# define BOOST_PP_WHILE_89(p, o, s) BOOST_PP_WHILE_89_I(p, o, s)
+# define BOOST_PP_WHILE_90(p, o, s) BOOST_PP_WHILE_90_I(p, o, s)
+# define BOOST_PP_WHILE_91(p, o, s) BOOST_PP_WHILE_91_I(p, o, s)
+# define BOOST_PP_WHILE_92(p, o, s) BOOST_PP_WHILE_92_I(p, o, s)
+# define BOOST_PP_WHILE_93(p, o, s) BOOST_PP_WHILE_93_I(p, o, s)
+# define BOOST_PP_WHILE_94(p, o, s) BOOST_PP_WHILE_94_I(p, o, s)
+# define BOOST_PP_WHILE_95(p, o, s) BOOST_PP_WHILE_95_I(p, o, s)
+# define BOOST_PP_WHILE_96(p, o, s) BOOST_PP_WHILE_96_I(p, o, s)
+# define BOOST_PP_WHILE_97(p, o, s) BOOST_PP_WHILE_97_I(p, o, s)
+# define BOOST_PP_WHILE_98(p, o, s) BOOST_PP_WHILE_98_I(p, o, s)
+# define BOOST_PP_WHILE_99(p, o, s) BOOST_PP_WHILE_99_I(p, o, s)
+# define BOOST_PP_WHILE_100(p, o, s) BOOST_PP_WHILE_100_I(p, o, s)
+# define BOOST_PP_WHILE_101(p, o, s) BOOST_PP_WHILE_101_I(p, o, s)
+# define BOOST_PP_WHILE_102(p, o, s) BOOST_PP_WHILE_102_I(p, o, s)
+# define BOOST_PP_WHILE_103(p, o, s) BOOST_PP_WHILE_103_I(p, o, s)
+# define BOOST_PP_WHILE_104(p, o, s) BOOST_PP_WHILE_104_I(p, o, s)
+# define BOOST_PP_WHILE_105(p, o, s) BOOST_PP_WHILE_105_I(p, o, s)
+# define BOOST_PP_WHILE_106(p, o, s) BOOST_PP_WHILE_106_I(p, o, s)
+# define BOOST_PP_WHILE_107(p, o, s) BOOST_PP_WHILE_107_I(p, o, s)
+# define BOOST_PP_WHILE_108(p, o, s) BOOST_PP_WHILE_108_I(p, o, s)
+# define BOOST_PP_WHILE_109(p, o, s) BOOST_PP_WHILE_109_I(p, o, s)
+# define BOOST_PP_WHILE_110(p, o, s) BOOST_PP_WHILE_110_I(p, o, s)
+# define BOOST_PP_WHILE_111(p, o, s) BOOST_PP_WHILE_111_I(p, o, s)
+# define BOOST_PP_WHILE_112(p, o, s) BOOST_PP_WHILE_112_I(p, o, s)
+# define BOOST_PP_WHILE_113(p, o, s) BOOST_PP_WHILE_113_I(p, o, s)
+# define BOOST_PP_WHILE_114(p, o, s) BOOST_PP_WHILE_114_I(p, o, s)
+# define BOOST_PP_WHILE_115(p, o, s) BOOST_PP_WHILE_115_I(p, o, s)
+# define BOOST_PP_WHILE_116(p, o, s) BOOST_PP_WHILE_116_I(p, o, s)
+# define BOOST_PP_WHILE_117(p, o, s) BOOST_PP_WHILE_117_I(p, o, s)
+# define BOOST_PP_WHILE_118(p, o, s) BOOST_PP_WHILE_118_I(p, o, s)
+# define BOOST_PP_WHILE_119(p, o, s) BOOST_PP_WHILE_119_I(p, o, s)
+# define BOOST_PP_WHILE_120(p, o, s) BOOST_PP_WHILE_120_I(p, o, s)
+# define BOOST_PP_WHILE_121(p, o, s) BOOST_PP_WHILE_121_I(p, o, s)
+# define BOOST_PP_WHILE_122(p, o, s) BOOST_PP_WHILE_122_I(p, o, s)
+# define BOOST_PP_WHILE_123(p, o, s) BOOST_PP_WHILE_123_I(p, o, s)
+# define BOOST_PP_WHILE_124(p, o, s) BOOST_PP_WHILE_124_I(p, o, s)
+# define BOOST_PP_WHILE_125(p, o, s) BOOST_PP_WHILE_125_I(p, o, s)
+# define BOOST_PP_WHILE_126(p, o, s) BOOST_PP_WHILE_126_I(p, o, s)
+# define BOOST_PP_WHILE_127(p, o, s) BOOST_PP_WHILE_127_I(p, o, s)
+# define BOOST_PP_WHILE_128(p, o, s) BOOST_PP_WHILE_128_I(p, o, s)
+# define BOOST_PP_WHILE_129(p, o, s) BOOST_PP_WHILE_129_I(p, o, s)
+# define BOOST_PP_WHILE_130(p, o, s) BOOST_PP_WHILE_130_I(p, o, s)
+# define BOOST_PP_WHILE_131(p, o, s) BOOST_PP_WHILE_131_I(p, o, s)
+# define BOOST_PP_WHILE_132(p, o, s) BOOST_PP_WHILE_132_I(p, o, s)
+# define BOOST_PP_WHILE_133(p, o, s) BOOST_PP_WHILE_133_I(p, o, s)
+# define BOOST_PP_WHILE_134(p, o, s) BOOST_PP_WHILE_134_I(p, o, s)
+# define BOOST_PP_WHILE_135(p, o, s) BOOST_PP_WHILE_135_I(p, o, s)
+# define BOOST_PP_WHILE_136(p, o, s) BOOST_PP_WHILE_136_I(p, o, s)
+# define BOOST_PP_WHILE_137(p, o, s) BOOST_PP_WHILE_137_I(p, o, s)
+# define BOOST_PP_WHILE_138(p, o, s) BOOST_PP_WHILE_138_I(p, o, s)
+# define BOOST_PP_WHILE_139(p, o, s) BOOST_PP_WHILE_139_I(p, o, s)
+# define BOOST_PP_WHILE_140(p, o, s) BOOST_PP_WHILE_140_I(p, o, s)
+# define BOOST_PP_WHILE_141(p, o, s) BOOST_PP_WHILE_141_I(p, o, s)
+# define BOOST_PP_WHILE_142(p, o, s) BOOST_PP_WHILE_142_I(p, o, s)
+# define BOOST_PP_WHILE_143(p, o, s) BOOST_PP_WHILE_143_I(p, o, s)
+# define BOOST_PP_WHILE_144(p, o, s) BOOST_PP_WHILE_144_I(p, o, s)
+# define BOOST_PP_WHILE_145(p, o, s) BOOST_PP_WHILE_145_I(p, o, s)
+# define BOOST_PP_WHILE_146(p, o, s) BOOST_PP_WHILE_146_I(p, o, s)
+# define BOOST_PP_WHILE_147(p, o, s) BOOST_PP_WHILE_147_I(p, o, s)
+# define BOOST_PP_WHILE_148(p, o, s) BOOST_PP_WHILE_148_I(p, o, s)
+# define BOOST_PP_WHILE_149(p, o, s) BOOST_PP_WHILE_149_I(p, o, s)
+# define BOOST_PP_WHILE_150(p, o, s) BOOST_PP_WHILE_150_I(p, o, s)
+# define BOOST_PP_WHILE_151(p, o, s) BOOST_PP_WHILE_151_I(p, o, s)
+# define BOOST_PP_WHILE_152(p, o, s) BOOST_PP_WHILE_152_I(p, o, s)
+# define BOOST_PP_WHILE_153(p, o, s) BOOST_PP_WHILE_153_I(p, o, s)
+# define BOOST_PP_WHILE_154(p, o, s) BOOST_PP_WHILE_154_I(p, o, s)
+# define BOOST_PP_WHILE_155(p, o, s) BOOST_PP_WHILE_155_I(p, o, s)
+# define BOOST_PP_WHILE_156(p, o, s) BOOST_PP_WHILE_156_I(p, o, s)
+# define BOOST_PP_WHILE_157(p, o, s) BOOST_PP_WHILE_157_I(p, o, s)
+# define BOOST_PP_WHILE_158(p, o, s) BOOST_PP_WHILE_158_I(p, o, s)
+# define BOOST_PP_WHILE_159(p, o, s) BOOST_PP_WHILE_159_I(p, o, s)
+# define BOOST_PP_WHILE_160(p, o, s) BOOST_PP_WHILE_160_I(p, o, s)
+# define BOOST_PP_WHILE_161(p, o, s) BOOST_PP_WHILE_161_I(p, o, s)
+# define BOOST_PP_WHILE_162(p, o, s) BOOST_PP_WHILE_162_I(p, o, s)
+# define BOOST_PP_WHILE_163(p, o, s) BOOST_PP_WHILE_163_I(p, o, s)
+# define BOOST_PP_WHILE_164(p, o, s) BOOST_PP_WHILE_164_I(p, o, s)
+# define BOOST_PP_WHILE_165(p, o, s) BOOST_PP_WHILE_165_I(p, o, s)
+# define BOOST_PP_WHILE_166(p, o, s) BOOST_PP_WHILE_166_I(p, o, s)
+# define BOOST_PP_WHILE_167(p, o, s) BOOST_PP_WHILE_167_I(p, o, s)
+# define BOOST_PP_WHILE_168(p, o, s) BOOST_PP_WHILE_168_I(p, o, s)
+# define BOOST_PP_WHILE_169(p, o, s) BOOST_PP_WHILE_169_I(p, o, s)
+# define BOOST_PP_WHILE_170(p, o, s) BOOST_PP_WHILE_170_I(p, o, s)
+# define BOOST_PP_WHILE_171(p, o, s) BOOST_PP_WHILE_171_I(p, o, s)
+# define BOOST_PP_WHILE_172(p, o, s) BOOST_PP_WHILE_172_I(p, o, s)
+# define BOOST_PP_WHILE_173(p, o, s) BOOST_PP_WHILE_173_I(p, o, s)
+# define BOOST_PP_WHILE_174(p, o, s) BOOST_PP_WHILE_174_I(p, o, s)
+# define BOOST_PP_WHILE_175(p, o, s) BOOST_PP_WHILE_175_I(p, o, s)
+# define BOOST_PP_WHILE_176(p, o, s) BOOST_PP_WHILE_176_I(p, o, s)
+# define BOOST_PP_WHILE_177(p, o, s) BOOST_PP_WHILE_177_I(p, o, s)
+# define BOOST_PP_WHILE_178(p, o, s) BOOST_PP_WHILE_178_I(p, o, s)
+# define BOOST_PP_WHILE_179(p, o, s) BOOST_PP_WHILE_179_I(p, o, s)
+# define BOOST_PP_WHILE_180(p, o, s) BOOST_PP_WHILE_180_I(p, o, s)
+# define BOOST_PP_WHILE_181(p, o, s) BOOST_PP_WHILE_181_I(p, o, s)
+# define BOOST_PP_WHILE_182(p, o, s) BOOST_PP_WHILE_182_I(p, o, s)
+# define BOOST_PP_WHILE_183(p, o, s) BOOST_PP_WHILE_183_I(p, o, s)
+# define BOOST_PP_WHILE_184(p, o, s) BOOST_PP_WHILE_184_I(p, o, s)
+# define BOOST_PP_WHILE_185(p, o, s) BOOST_PP_WHILE_185_I(p, o, s)
+# define BOOST_PP_WHILE_186(p, o, s) BOOST_PP_WHILE_186_I(p, o, s)
+# define BOOST_PP_WHILE_187(p, o, s) BOOST_PP_WHILE_187_I(p, o, s)
+# define BOOST_PP_WHILE_188(p, o, s) BOOST_PP_WHILE_188_I(p, o, s)
+# define BOOST_PP_WHILE_189(p, o, s) BOOST_PP_WHILE_189_I(p, o, s)
+# define BOOST_PP_WHILE_190(p, o, s) BOOST_PP_WHILE_190_I(p, o, s)
+# define BOOST_PP_WHILE_191(p, o, s) BOOST_PP_WHILE_191_I(p, o, s)
+# define BOOST_PP_WHILE_192(p, o, s) BOOST_PP_WHILE_192_I(p, o, s)
+# define BOOST_PP_WHILE_193(p, o, s) BOOST_PP_WHILE_193_I(p, o, s)
+# define BOOST_PP_WHILE_194(p, o, s) BOOST_PP_WHILE_194_I(p, o, s)
+# define BOOST_PP_WHILE_195(p, o, s) BOOST_PP_WHILE_195_I(p, o, s)
+# define BOOST_PP_WHILE_196(p, o, s) BOOST_PP_WHILE_196_I(p, o, s)
+# define BOOST_PP_WHILE_197(p, o, s) BOOST_PP_WHILE_197_I(p, o, s)
+# define BOOST_PP_WHILE_198(p, o, s) BOOST_PP_WHILE_198_I(p, o, s)
+# define BOOST_PP_WHILE_199(p, o, s) BOOST_PP_WHILE_199_I(p, o, s)
+# define BOOST_PP_WHILE_200(p, o, s) BOOST_PP_WHILE_200_I(p, o, s)
+# define BOOST_PP_WHILE_201(p, o, s) BOOST_PP_WHILE_201_I(p, o, s)
+# define BOOST_PP_WHILE_202(p, o, s) BOOST_PP_WHILE_202_I(p, o, s)
+# define BOOST_PP_WHILE_203(p, o, s) BOOST_PP_WHILE_203_I(p, o, s)
+# define BOOST_PP_WHILE_204(p, o, s) BOOST_PP_WHILE_204_I(p, o, s)
+# define BOOST_PP_WHILE_205(p, o, s) BOOST_PP_WHILE_205_I(p, o, s)
+# define BOOST_PP_WHILE_206(p, o, s) BOOST_PP_WHILE_206_I(p, o, s)
+# define BOOST_PP_WHILE_207(p, o, s) BOOST_PP_WHILE_207_I(p, o, s)
+# define BOOST_PP_WHILE_208(p, o, s) BOOST_PP_WHILE_208_I(p, o, s)
+# define BOOST_PP_WHILE_209(p, o, s) BOOST_PP_WHILE_209_I(p, o, s)
+# define BOOST_PP_WHILE_210(p, o, s) BOOST_PP_WHILE_210_I(p, o, s)
+# define BOOST_PP_WHILE_211(p, o, s) BOOST_PP_WHILE_211_I(p, o, s)
+# define BOOST_PP_WHILE_212(p, o, s) BOOST_PP_WHILE_212_I(p, o, s)
+# define BOOST_PP_WHILE_213(p, o, s) BOOST_PP_WHILE_213_I(p, o, s)
+# define BOOST_PP_WHILE_214(p, o, s) BOOST_PP_WHILE_214_I(p, o, s)
+# define BOOST_PP_WHILE_215(p, o, s) BOOST_PP_WHILE_215_I(p, o, s)
+# define BOOST_PP_WHILE_216(p, o, s) BOOST_PP_WHILE_216_I(p, o, s)
+# define BOOST_PP_WHILE_217(p, o, s) BOOST_PP_WHILE_217_I(p, o, s)
+# define BOOST_PP_WHILE_218(p, o, s) BOOST_PP_WHILE_218_I(p, o, s)
+# define BOOST_PP_WHILE_219(p, o, s) BOOST_PP_WHILE_219_I(p, o, s)
+# define BOOST_PP_WHILE_220(p, o, s) BOOST_PP_WHILE_220_I(p, o, s)
+# define BOOST_PP_WHILE_221(p, o, s) BOOST_PP_WHILE_221_I(p, o, s)
+# define BOOST_PP_WHILE_222(p, o, s) BOOST_PP_WHILE_222_I(p, o, s)
+# define BOOST_PP_WHILE_223(p, o, s) BOOST_PP_WHILE_223_I(p, o, s)
+# define BOOST_PP_WHILE_224(p, o, s) BOOST_PP_WHILE_224_I(p, o, s)
+# define BOOST_PP_WHILE_225(p, o, s) BOOST_PP_WHILE_225_I(p, o, s)
+# define BOOST_PP_WHILE_226(p, o, s) BOOST_PP_WHILE_226_I(p, o, s)
+# define BOOST_PP_WHILE_227(p, o, s) BOOST_PP_WHILE_227_I(p, o, s)
+# define BOOST_PP_WHILE_228(p, o, s) BOOST_PP_WHILE_228_I(p, o, s)
+# define BOOST_PP_WHILE_229(p, o, s) BOOST_PP_WHILE_229_I(p, o, s)
+# define BOOST_PP_WHILE_230(p, o, s) BOOST_PP_WHILE_230_I(p, o, s)
+# define BOOST_PP_WHILE_231(p, o, s) BOOST_PP_WHILE_231_I(p, o, s)
+# define BOOST_PP_WHILE_232(p, o, s) BOOST_PP_WHILE_232_I(p, o, s)
+# define BOOST_PP_WHILE_233(p, o, s) BOOST_PP_WHILE_233_I(p, o, s)
+# define BOOST_PP_WHILE_234(p, o, s) BOOST_PP_WHILE_234_I(p, o, s)
+# define BOOST_PP_WHILE_235(p, o, s) BOOST_PP_WHILE_235_I(p, o, s)
+# define BOOST_PP_WHILE_236(p, o, s) BOOST_PP_WHILE_236_I(p, o, s)
+# define BOOST_PP_WHILE_237(p, o, s) BOOST_PP_WHILE_237_I(p, o, s)
+# define BOOST_PP_WHILE_238(p, o, s) BOOST_PP_WHILE_238_I(p, o, s)
+# define BOOST_PP_WHILE_239(p, o, s) BOOST_PP_WHILE_239_I(p, o, s)
+# define BOOST_PP_WHILE_240(p, o, s) BOOST_PP_WHILE_240_I(p, o, s)
+# define BOOST_PP_WHILE_241(p, o, s) BOOST_PP_WHILE_241_I(p, o, s)
+# define BOOST_PP_WHILE_242(p, o, s) BOOST_PP_WHILE_242_I(p, o, s)
+# define BOOST_PP_WHILE_243(p, o, s) BOOST_PP_WHILE_243_I(p, o, s)
+# define BOOST_PP_WHILE_244(p, o, s) BOOST_PP_WHILE_244_I(p, o, s)
+# define BOOST_PP_WHILE_245(p, o, s) BOOST_PP_WHILE_245_I(p, o, s)
+# define BOOST_PP_WHILE_246(p, o, s) BOOST_PP_WHILE_246_I(p, o, s)
+# define BOOST_PP_WHILE_247(p, o, s) BOOST_PP_WHILE_247_I(p, o, s)
+# define BOOST_PP_WHILE_248(p, o, s) BOOST_PP_WHILE_248_I(p, o, s)
+# define BOOST_PP_WHILE_249(p, o, s) BOOST_PP_WHILE_249_I(p, o, s)
+# define BOOST_PP_WHILE_250(p, o, s) BOOST_PP_WHILE_250_I(p, o, s)
+# define BOOST_PP_WHILE_251(p, o, s) BOOST_PP_WHILE_251_I(p, o, s)
+# define BOOST_PP_WHILE_252(p, o, s) BOOST_PP_WHILE_252_I(p, o, s)
+# define BOOST_PP_WHILE_253(p, o, s) BOOST_PP_WHILE_253_I(p, o, s)
+# define BOOST_PP_WHILE_254(p, o, s) BOOST_PP_WHILE_254_I(p, o, s)
+# define BOOST_PP_WHILE_255(p, o, s) BOOST_PP_WHILE_255_I(p, o, s)
+# define BOOST_PP_WHILE_256(p, o, s) BOOST_PP_WHILE_256_I(p, o, s)
+#
+# define BOOST_PP_WHILE_1_I(p, o, s) BOOST_PP_IF(p(2, s), BOOST_PP_WHILE_2, s BOOST_PP_TUPLE_EAT_3)(p, o, o(2, s))
+# define BOOST_PP_WHILE_2_I(p, o, s) BOOST_PP_IF(p(3, s), BOOST_PP_WHILE_3, s BOOST_PP_TUPLE_EAT_3)(p, o, o(3, s))
+# define BOOST_PP_WHILE_3_I(p, o, s) BOOST_PP_IF(p(4, s), BOOST_PP_WHILE_4, s BOOST_PP_TUPLE_EAT_3)(p, o, o(4, s))
+# define BOOST_PP_WHILE_4_I(p, o, s) BOOST_PP_IF(p(5, s), BOOST_PP_WHILE_5, s BOOST_PP_TUPLE_EAT_3)(p, o, o(5, s))
+# define BOOST_PP_WHILE_5_I(p, o, s) BOOST_PP_IF(p(6, s), BOOST_PP_WHILE_6, s BOOST_PP_TUPLE_EAT_3)(p, o, o(6, s))
+# define BOOST_PP_WHILE_6_I(p, o, s) BOOST_PP_IF(p(7, s), BOOST_PP_WHILE_7, s BOOST_PP_TUPLE_EAT_3)(p, o, o(7, s))
+# define BOOST_PP_WHILE_7_I(p, o, s) BOOST_PP_IF(p(8, s), BOOST_PP_WHILE_8, s BOOST_PP_TUPLE_EAT_3)(p, o, o(8, s))
+# define BOOST_PP_WHILE_8_I(p, o, s) BOOST_PP_IF(p(9, s), BOOST_PP_WHILE_9, s BOOST_PP_TUPLE_EAT_3)(p, o, o(9, s))
+# define BOOST_PP_WHILE_9_I(p, o, s) BOOST_PP_IF(p(10, s), BOOST_PP_WHILE_10, s BOOST_PP_TUPLE_EAT_3)(p, o, o(10, s))
+# define BOOST_PP_WHILE_10_I(p, o, s) BOOST_PP_IF(p(11, s), BOOST_PP_WHILE_11, s BOOST_PP_TUPLE_EAT_3)(p, o, o(11, s))
+# define BOOST_PP_WHILE_11_I(p, o, s) BOOST_PP_IF(p(12, s), BOOST_PP_WHILE_12, s BOOST_PP_TUPLE_EAT_3)(p, o, o(12, s))
+# define BOOST_PP_WHILE_12_I(p, o, s) BOOST_PP_IF(p(13, s), BOOST_PP_WHILE_13, s BOOST_PP_TUPLE_EAT_3)(p, o, o(13, s))
+# define BOOST_PP_WHILE_13_I(p, o, s) BOOST_PP_IF(p(14, s), BOOST_PP_WHILE_14, s BOOST_PP_TUPLE_EAT_3)(p, o, o(14, s))
+# define BOOST_PP_WHILE_14_I(p, o, s) BOOST_PP_IF(p(15, s), BOOST_PP_WHILE_15, s BOOST_PP_TUPLE_EAT_3)(p, o, o(15, s))
+# define BOOST_PP_WHILE_15_I(p, o, s) BOOST_PP_IF(p(16, s), BOOST_PP_WHILE_16, s BOOST_PP_TUPLE_EAT_3)(p, o, o(16, s))
+# define BOOST_PP_WHILE_16_I(p, o, s) BOOST_PP_IF(p(17, s), BOOST_PP_WHILE_17, s BOOST_PP_TUPLE_EAT_3)(p, o, o(17, s))
+# define BOOST_PP_WHILE_17_I(p, o, s) BOOST_PP_IF(p(18, s), BOOST_PP_WHILE_18, s BOOST_PP_TUPLE_EAT_3)(p, o, o(18, s))
+# define BOOST_PP_WHILE_18_I(p, o, s) BOOST_PP_IF(p(19, s), BOOST_PP_WHILE_19, s BOOST_PP_TUPLE_EAT_3)(p, o, o(19, s))
+# define BOOST_PP_WHILE_19_I(p, o, s) BOOST_PP_IF(p(20, s), BOOST_PP_WHILE_20, s BOOST_PP_TUPLE_EAT_3)(p, o, o(20, s))
+# define BOOST_PP_WHILE_20_I(p, o, s) BOOST_PP_IF(p(21, s), BOOST_PP_WHILE_21, s BOOST_PP_TUPLE_EAT_3)(p, o, o(21, s))
+# define BOOST_PP_WHILE_21_I(p, o, s) BOOST_PP_IF(p(22, s), BOOST_PP_WHILE_22, s BOOST_PP_TUPLE_EAT_3)(p, o, o(22, s))
+# define BOOST_PP_WHILE_22_I(p, o, s) BOOST_PP_IF(p(23, s), BOOST_PP_WHILE_23, s BOOST_PP_TUPLE_EAT_3)(p, o, o(23, s))
+# define BOOST_PP_WHILE_23_I(p, o, s) BOOST_PP_IF(p(24, s), BOOST_PP_WHILE_24, s BOOST_PP_TUPLE_EAT_3)(p, o, o(24, s))
+# define BOOST_PP_WHILE_24_I(p, o, s) BOOST_PP_IF(p(25, s), BOOST_PP_WHILE_25, s BOOST_PP_TUPLE_EAT_3)(p, o, o(25, s))
+# define BOOST_PP_WHILE_25_I(p, o, s) BOOST_PP_IF(p(26, s), BOOST_PP_WHILE_26, s BOOST_PP_TUPLE_EAT_3)(p, o, o(26, s))
+# define BOOST_PP_WHILE_26_I(p, o, s) BOOST_PP_IF(p(27, s), BOOST_PP_WHILE_27, s BOOST_PP_TUPLE_EAT_3)(p, o, o(27, s))
+# define BOOST_PP_WHILE_27_I(p, o, s) BOOST_PP_IF(p(28, s), BOOST_PP_WHILE_28, s BOOST_PP_TUPLE_EAT_3)(p, o, o(28, s))
+# define BOOST_PP_WHILE_28_I(p, o, s) BOOST_PP_IF(p(29, s), BOOST_PP_WHILE_29, s BOOST_PP_TUPLE_EAT_3)(p, o, o(29, s))
+# define BOOST_PP_WHILE_29_I(p, o, s) BOOST_PP_IF(p(30, s), BOOST_PP_WHILE_30, s BOOST_PP_TUPLE_EAT_3)(p, o, o(30, s))
+# define BOOST_PP_WHILE_30_I(p, o, s) BOOST_PP_IF(p(31, s), BOOST_PP_WHILE_31, s BOOST_PP_TUPLE_EAT_3)(p, o, o(31, s))
+# define BOOST_PP_WHILE_31_I(p, o, s) BOOST_PP_IF(p(32, s), BOOST_PP_WHILE_32, s BOOST_PP_TUPLE_EAT_3)(p, o, o(32, s))
+# define BOOST_PP_WHILE_32_I(p, o, s) BOOST_PP_IF(p(33, s), BOOST_PP_WHILE_33, s BOOST_PP_TUPLE_EAT_3)(p, o, o(33, s))
+# define BOOST_PP_WHILE_33_I(p, o, s) BOOST_PP_IF(p(34, s), BOOST_PP_WHILE_34, s BOOST_PP_TUPLE_EAT_3)(p, o, o(34, s))
+# define BOOST_PP_WHILE_34_I(p, o, s) BOOST_PP_IF(p(35, s), BOOST_PP_WHILE_35, s BOOST_PP_TUPLE_EAT_3)(p, o, o(35, s))
+# define BOOST_PP_WHILE_35_I(p, o, s) BOOST_PP_IF(p(36, s), BOOST_PP_WHILE_36, s BOOST_PP_TUPLE_EAT_3)(p, o, o(36, s))
+# define BOOST_PP_WHILE_36_I(p, o, s) BOOST_PP_IF(p(37, s), BOOST_PP_WHILE_37, s BOOST_PP_TUPLE_EAT_3)(p, o, o(37, s))
+# define BOOST_PP_WHILE_37_I(p, o, s) BOOST_PP_IF(p(38, s), BOOST_PP_WHILE_38, s BOOST_PP_TUPLE_EAT_3)(p, o, o(38, s))
+# define BOOST_PP_WHILE_38_I(p, o, s) BOOST_PP_IF(p(39, s), BOOST_PP_WHILE_39, s BOOST_PP_TUPLE_EAT_3)(p, o, o(39, s))
+# define BOOST_PP_WHILE_39_I(p, o, s) BOOST_PP_IF(p(40, s), BOOST_PP_WHILE_40, s BOOST_PP_TUPLE_EAT_3)(p, o, o(40, s))
+# define BOOST_PP_WHILE_40_I(p, o, s) BOOST_PP_IF(p(41, s), BOOST_PP_WHILE_41, s BOOST_PP_TUPLE_EAT_3)(p, o, o(41, s))
+# define BOOST_PP_WHILE_41_I(p, o, s) BOOST_PP_IF(p(42, s), BOOST_PP_WHILE_42, s BOOST_PP_TUPLE_EAT_3)(p, o, o(42, s))
+# define BOOST_PP_WHILE_42_I(p, o, s) BOOST_PP_IF(p(43, s), BOOST_PP_WHILE_43, s BOOST_PP_TUPLE_EAT_3)(p, o, o(43, s))
+# define BOOST_PP_WHILE_43_I(p, o, s) BOOST_PP_IF(p(44, s), BOOST_PP_WHILE_44, s BOOST_PP_TUPLE_EAT_3)(p, o, o(44, s))
+# define BOOST_PP_WHILE_44_I(p, o, s) BOOST_PP_IF(p(45, s), BOOST_PP_WHILE_45, s BOOST_PP_TUPLE_EAT_3)(p, o, o(45, s))
+# define BOOST_PP_WHILE_45_I(p, o, s) BOOST_PP_IF(p(46, s), BOOST_PP_WHILE_46, s BOOST_PP_TUPLE_EAT_3)(p, o, o(46, s))
+# define BOOST_PP_WHILE_46_I(p, o, s) BOOST_PP_IF(p(47, s), BOOST_PP_WHILE_47, s BOOST_PP_TUPLE_EAT_3)(p, o, o(47, s))
+# define BOOST_PP_WHILE_47_I(p, o, s) BOOST_PP_IF(p(48, s), BOOST_PP_WHILE_48, s BOOST_PP_TUPLE_EAT_3)(p, o, o(48, s))
+# define BOOST_PP_WHILE_48_I(p, o, s) BOOST_PP_IF(p(49, s), BOOST_PP_WHILE_49, s BOOST_PP_TUPLE_EAT_3)(p, o, o(49, s))
+# define BOOST_PP_WHILE_49_I(p, o, s) BOOST_PP_IF(p(50, s), BOOST_PP_WHILE_50, s BOOST_PP_TUPLE_EAT_3)(p, o, o(50, s))
+# define BOOST_PP_WHILE_50_I(p, o, s) BOOST_PP_IF(p(51, s), BOOST_PP_WHILE_51, s BOOST_PP_TUPLE_EAT_3)(p, o, o(51, s))
+# define BOOST_PP_WHILE_51_I(p, o, s) BOOST_PP_IF(p(52, s), BOOST_PP_WHILE_52, s BOOST_PP_TUPLE_EAT_3)(p, o, o(52, s))
+# define BOOST_PP_WHILE_52_I(p, o, s) BOOST_PP_IF(p(53, s), BOOST_PP_WHILE_53, s BOOST_PP_TUPLE_EAT_3)(p, o, o(53, s))
+# define BOOST_PP_WHILE_53_I(p, o, s) BOOST_PP_IF(p(54, s), BOOST_PP_WHILE_54, s BOOST_PP_TUPLE_EAT_3)(p, o, o(54, s))
+# define BOOST_PP_WHILE_54_I(p, o, s) BOOST_PP_IF(p(55, s), BOOST_PP_WHILE_55, s BOOST_PP_TUPLE_EAT_3)(p, o, o(55, s))
+# define BOOST_PP_WHILE_55_I(p, o, s) BOOST_PP_IF(p(56, s), BOOST_PP_WHILE_56, s BOOST_PP_TUPLE_EAT_3)(p, o, o(56, s))
+# define BOOST_PP_WHILE_56_I(p, o, s) BOOST_PP_IF(p(57, s), BOOST_PP_WHILE_57, s BOOST_PP_TUPLE_EAT_3)(p, o, o(57, s))
+# define BOOST_PP_WHILE_57_I(p, o, s) BOOST_PP_IF(p(58, s), BOOST_PP_WHILE_58, s BOOST_PP_TUPLE_EAT_3)(p, o, o(58, s))
+# define BOOST_PP_WHILE_58_I(p, o, s) BOOST_PP_IF(p(59, s), BOOST_PP_WHILE_59, s BOOST_PP_TUPLE_EAT_3)(p, o, o(59, s))
+# define BOOST_PP_WHILE_59_I(p, o, s) BOOST_PP_IF(p(60, s), BOOST_PP_WHILE_60, s BOOST_PP_TUPLE_EAT_3)(p, o, o(60, s))
+# define BOOST_PP_WHILE_60_I(p, o, s) BOOST_PP_IF(p(61, s), BOOST_PP_WHILE_61, s BOOST_PP_TUPLE_EAT_3)(p, o, o(61, s))
+# define BOOST_PP_WHILE_61_I(p, o, s) BOOST_PP_IF(p(62, s), BOOST_PP_WHILE_62, s BOOST_PP_TUPLE_EAT_3)(p, o, o(62, s))
+# define BOOST_PP_WHILE_62_I(p, o, s) BOOST_PP_IF(p(63, s), BOOST_PP_WHILE_63, s BOOST_PP_TUPLE_EAT_3)(p, o, o(63, s))
+# define BOOST_PP_WHILE_63_I(p, o, s) BOOST_PP_IF(p(64, s), BOOST_PP_WHILE_64, s BOOST_PP_TUPLE_EAT_3)(p, o, o(64, s))
+# define BOOST_PP_WHILE_64_I(p, o, s) BOOST_PP_IF(p(65, s), BOOST_PP_WHILE_65, s BOOST_PP_TUPLE_EAT_3)(p, o, o(65, s))
+# define BOOST_PP_WHILE_65_I(p, o, s) BOOST_PP_IF(p(66, s), BOOST_PP_WHILE_66, s BOOST_PP_TUPLE_EAT_3)(p, o, o(66, s))
+# define BOOST_PP_WHILE_66_I(p, o, s) BOOST_PP_IF(p(67, s), BOOST_PP_WHILE_67, s BOOST_PP_TUPLE_EAT_3)(p, o, o(67, s))
+# define BOOST_PP_WHILE_67_I(p, o, s) BOOST_PP_IF(p(68, s), BOOST_PP_WHILE_68, s BOOST_PP_TUPLE_EAT_3)(p, o, o(68, s))
+# define BOOST_PP_WHILE_68_I(p, o, s) BOOST_PP_IF(p(69, s), BOOST_PP_WHILE_69, s BOOST_PP_TUPLE_EAT_3)(p, o, o(69, s))
+# define BOOST_PP_WHILE_69_I(p, o, s) BOOST_PP_IF(p(70, s), BOOST_PP_WHILE_70, s BOOST_PP_TUPLE_EAT_3)(p, o, o(70, s))
+# define BOOST_PP_WHILE_70_I(p, o, s) BOOST_PP_IF(p(71, s), BOOST_PP_WHILE_71, s BOOST_PP_TUPLE_EAT_3)(p, o, o(71, s))
+# define BOOST_PP_WHILE_71_I(p, o, s) BOOST_PP_IF(p(72, s), BOOST_PP_WHILE_72, s BOOST_PP_TUPLE_EAT_3)(p, o, o(72, s))
+# define BOOST_PP_WHILE_72_I(p, o, s) BOOST_PP_IF(p(73, s), BOOST_PP_WHILE_73, s BOOST_PP_TUPLE_EAT_3)(p, o, o(73, s))
+# define BOOST_PP_WHILE_73_I(p, o, s) BOOST_PP_IF(p(74, s), BOOST_PP_WHILE_74, s BOOST_PP_TUPLE_EAT_3)(p, o, o(74, s))
+# define BOOST_PP_WHILE_74_I(p, o, s) BOOST_PP_IF(p(75, s), BOOST_PP_WHILE_75, s BOOST_PP_TUPLE_EAT_3)(p, o, o(75, s))
+# define BOOST_PP_WHILE_75_I(p, o, s) BOOST_PP_IF(p(76, s), BOOST_PP_WHILE_76, s BOOST_PP_TUPLE_EAT_3)(p, o, o(76, s))
+# define BOOST_PP_WHILE_76_I(p, o, s) BOOST_PP_IF(p(77, s), BOOST_PP_WHILE_77, s BOOST_PP_TUPLE_EAT_3)(p, o, o(77, s))
+# define BOOST_PP_WHILE_77_I(p, o, s) BOOST_PP_IF(p(78, s), BOOST_PP_WHILE_78, s BOOST_PP_TUPLE_EAT_3)(p, o, o(78, s))
+# define BOOST_PP_WHILE_78_I(p, o, s) BOOST_PP_IF(p(79, s), BOOST_PP_WHILE_79, s BOOST_PP_TUPLE_EAT_3)(p, o, o(79, s))
+# define BOOST_PP_WHILE_79_I(p, o, s) BOOST_PP_IF(p(80, s), BOOST_PP_WHILE_80, s BOOST_PP_TUPLE_EAT_3)(p, o, o(80, s))
+# define BOOST_PP_WHILE_80_I(p, o, s) BOOST_PP_IF(p(81, s), BOOST_PP_WHILE_81, s BOOST_PP_TUPLE_EAT_3)(p, o, o(81, s))
+# define BOOST_PP_WHILE_81_I(p, o, s) BOOST_PP_IF(p(82, s), BOOST_PP_WHILE_82, s BOOST_PP_TUPLE_EAT_3)(p, o, o(82, s))
+# define BOOST_PP_WHILE_82_I(p, o, s) BOOST_PP_IF(p(83, s), BOOST_PP_WHILE_83, s BOOST_PP_TUPLE_EAT_3)(p, o, o(83, s))
+# define BOOST_PP_WHILE_83_I(p, o, s) BOOST_PP_IF(p(84, s), BOOST_PP_WHILE_84, s BOOST_PP_TUPLE_EAT_3)(p, o, o(84, s))
+# define BOOST_PP_WHILE_84_I(p, o, s) BOOST_PP_IF(p(85, s), BOOST_PP_WHILE_85, s BOOST_PP_TUPLE_EAT_3)(p, o, o(85, s))
+# define BOOST_PP_WHILE_85_I(p, o, s) BOOST_PP_IF(p(86, s), BOOST_PP_WHILE_86, s BOOST_PP_TUPLE_EAT_3)(p, o, o(86, s))
+# define BOOST_PP_WHILE_86_I(p, o, s) BOOST_PP_IF(p(87, s), BOOST_PP_WHILE_87, s BOOST_PP_TUPLE_EAT_3)(p, o, o(87, s))
+# define BOOST_PP_WHILE_87_I(p, o, s) BOOST_PP_IF(p(88, s), BOOST_PP_WHILE_88, s BOOST_PP_TUPLE_EAT_3)(p, o, o(88, s))
+# define BOOST_PP_WHILE_88_I(p, o, s) BOOST_PP_IF(p(89, s), BOOST_PP_WHILE_89, s BOOST_PP_TUPLE_EAT_3)(p, o, o(89, s))
+# define BOOST_PP_WHILE_89_I(p, o, s) BOOST_PP_IF(p(90, s), BOOST_PP_WHILE_90, s BOOST_PP_TUPLE_EAT_3)(p, o, o(90, s))
+# define BOOST_PP_WHILE_90_I(p, o, s) BOOST_PP_IF(p(91, s), BOOST_PP_WHILE_91, s BOOST_PP_TUPLE_EAT_3)(p, o, o(91, s))
+# define BOOST_PP_WHILE_91_I(p, o, s) BOOST_PP_IF(p(92, s), BOOST_PP_WHILE_92, s BOOST_PP_TUPLE_EAT_3)(p, o, o(92, s))
+# define BOOST_PP_WHILE_92_I(p, o, s) BOOST_PP_IF(p(93, s), BOOST_PP_WHILE_93, s BOOST_PP_TUPLE_EAT_3)(p, o, o(93, s))
+# define BOOST_PP_WHILE_93_I(p, o, s) BOOST_PP_IF(p(94, s), BOOST_PP_WHILE_94, s BOOST_PP_TUPLE_EAT_3)(p, o, o(94, s))
+# define BOOST_PP_WHILE_94_I(p, o, s) BOOST_PP_IF(p(95, s), BOOST_PP_WHILE_95, s BOOST_PP_TUPLE_EAT_3)(p, o, o(95, s))
+# define BOOST_PP_WHILE_95_I(p, o, s) BOOST_PP_IF(p(96, s), BOOST_PP_WHILE_96, s BOOST_PP_TUPLE_EAT_3)(p, o, o(96, s))
+# define BOOST_PP_WHILE_96_I(p, o, s) BOOST_PP_IF(p(97, s), BOOST_PP_WHILE_97, s BOOST_PP_TUPLE_EAT_3)(p, o, o(97, s))
+# define BOOST_PP_WHILE_97_I(p, o, s) BOOST_PP_IF(p(98, s), BOOST_PP_WHILE_98, s BOOST_PP_TUPLE_EAT_3)(p, o, o(98, s))
+# define BOOST_PP_WHILE_98_I(p, o, s) BOOST_PP_IF(p(99, s), BOOST_PP_WHILE_99, s BOOST_PP_TUPLE_EAT_3)(p, o, o(99, s))
+# define BOOST_PP_WHILE_99_I(p, o, s) BOOST_PP_IF(p(100, s), BOOST_PP_WHILE_100, s BOOST_PP_TUPLE_EAT_3)(p, o, o(100, s))
+# define BOOST_PP_WHILE_100_I(p, o, s) BOOST_PP_IF(p(101, s), BOOST_PP_WHILE_101, s BOOST_PP_TUPLE_EAT_3)(p, o, o(101, s))
+# define BOOST_PP_WHILE_101_I(p, o, s) BOOST_PP_IF(p(102, s), BOOST_PP_WHILE_102, s BOOST_PP_TUPLE_EAT_3)(p, o, o(102, s))
+# define BOOST_PP_WHILE_102_I(p, o, s) BOOST_PP_IF(p(103, s), BOOST_PP_WHILE_103, s BOOST_PP_TUPLE_EAT_3)(p, o, o(103, s))
+# define BOOST_PP_WHILE_103_I(p, o, s) BOOST_PP_IF(p(104, s), BOOST_PP_WHILE_104, s BOOST_PP_TUPLE_EAT_3)(p, o, o(104, s))
+# define BOOST_PP_WHILE_104_I(p, o, s) BOOST_PP_IF(p(105, s), BOOST_PP_WHILE_105, s BOOST_PP_TUPLE_EAT_3)(p, o, o(105, s))
+# define BOOST_PP_WHILE_105_I(p, o, s) BOOST_PP_IF(p(106, s), BOOST_PP_WHILE_106, s BOOST_PP_TUPLE_EAT_3)(p, o, o(106, s))
+# define BOOST_PP_WHILE_106_I(p, o, s) BOOST_PP_IF(p(107, s), BOOST_PP_WHILE_107, s BOOST_PP_TUPLE_EAT_3)(p, o, o(107, s))
+# define BOOST_PP_WHILE_107_I(p, o, s) BOOST_PP_IF(p(108, s), BOOST_PP_WHILE_108, s BOOST_PP_TUPLE_EAT_3)(p, o, o(108, s))
+# define BOOST_PP_WHILE_108_I(p, o, s) BOOST_PP_IF(p(109, s), BOOST_PP_WHILE_109, s BOOST_PP_TUPLE_EAT_3)(p, o, o(109, s))
+# define BOOST_PP_WHILE_109_I(p, o, s) BOOST_PP_IF(p(110, s), BOOST_PP_WHILE_110, s BOOST_PP_TUPLE_EAT_3)(p, o, o(110, s))
+# define BOOST_PP_WHILE_110_I(p, o, s) BOOST_PP_IF(p(111, s), BOOST_PP_WHILE_111, s BOOST_PP_TUPLE_EAT_3)(p, o, o(111, s))
+# define BOOST_PP_WHILE_111_I(p, o, s) BOOST_PP_IF(p(112, s), BOOST_PP_WHILE_112, s BOOST_PP_TUPLE_EAT_3)(p, o, o(112, s))
+# define BOOST_PP_WHILE_112_I(p, o, s) BOOST_PP_IF(p(113, s), BOOST_PP_WHILE_113, s BOOST_PP_TUPLE_EAT_3)(p, o, o(113, s))
+# define BOOST_PP_WHILE_113_I(p, o, s) BOOST_PP_IF(p(114, s), BOOST_PP_WHILE_114, s BOOST_PP_TUPLE_EAT_3)(p, o, o(114, s))
+# define BOOST_PP_WHILE_114_I(p, o, s) BOOST_PP_IF(p(115, s), BOOST_PP_WHILE_115, s BOOST_PP_TUPLE_EAT_3)(p, o, o(115, s))
+# define BOOST_PP_WHILE_115_I(p, o, s) BOOST_PP_IF(p(116, s), BOOST_PP_WHILE_116, s BOOST_PP_TUPLE_EAT_3)(p, o, o(116, s))
+# define BOOST_PP_WHILE_116_I(p, o, s) BOOST_PP_IF(p(117, s), BOOST_PP_WHILE_117, s BOOST_PP_TUPLE_EAT_3)(p, o, o(117, s))
+# define BOOST_PP_WHILE_117_I(p, o, s) BOOST_PP_IF(p(118, s), BOOST_PP_WHILE_118, s BOOST_PP_TUPLE_EAT_3)(p, o, o(118, s))
+# define BOOST_PP_WHILE_118_I(p, o, s) BOOST_PP_IF(p(119, s), BOOST_PP_WHILE_119, s BOOST_PP_TUPLE_EAT_3)(p, o, o(119, s))
+# define BOOST_PP_WHILE_119_I(p, o, s) BOOST_PP_IF(p(120, s), BOOST_PP_WHILE_120, s BOOST_PP_TUPLE_EAT_3)(p, o, o(120, s))
+# define BOOST_PP_WHILE_120_I(p, o, s) BOOST_PP_IF(p(121, s), BOOST_PP_WHILE_121, s BOOST_PP_TUPLE_EAT_3)(p, o, o(121, s))
+# define BOOST_PP_WHILE_121_I(p, o, s) BOOST_PP_IF(p(122, s), BOOST_PP_WHILE_122, s BOOST_PP_TUPLE_EAT_3)(p, o, o(122, s))
+# define BOOST_PP_WHILE_122_I(p, o, s) BOOST_PP_IF(p(123, s), BOOST_PP_WHILE_123, s BOOST_PP_TUPLE_EAT_3)(p, o, o(123, s))
+# define BOOST_PP_WHILE_123_I(p, o, s) BOOST_PP_IF(p(124, s), BOOST_PP_WHILE_124, s BOOST_PP_TUPLE_EAT_3)(p, o, o(124, s))
+# define BOOST_PP_WHILE_124_I(p, o, s) BOOST_PP_IF(p(125, s), BOOST_PP_WHILE_125, s BOOST_PP_TUPLE_EAT_3)(p, o, o(125, s))
+# define BOOST_PP_WHILE_125_I(p, o, s) BOOST_PP_IF(p(126, s), BOOST_PP_WHILE_126, s BOOST_PP_TUPLE_EAT_3)(p, o, o(126, s))
+# define BOOST_PP_WHILE_126_I(p, o, s) BOOST_PP_IF(p(127, s), BOOST_PP_WHILE_127, s BOOST_PP_TUPLE_EAT_3)(p, o, o(127, s))
+# define BOOST_PP_WHILE_127_I(p, o, s) BOOST_PP_IF(p(128, s), BOOST_PP_WHILE_128, s BOOST_PP_TUPLE_EAT_3)(p, o, o(128, s))
+# define BOOST_PP_WHILE_128_I(p, o, s) BOOST_PP_IF(p(129, s), BOOST_PP_WHILE_129, s BOOST_PP_TUPLE_EAT_3)(p, o, o(129, s))
+# define BOOST_PP_WHILE_129_I(p, o, s) BOOST_PP_IF(p(130, s), BOOST_PP_WHILE_130, s BOOST_PP_TUPLE_EAT_3)(p, o, o(130, s))
+# define BOOST_PP_WHILE_130_I(p, o, s) BOOST_PP_IF(p(131, s), BOOST_PP_WHILE_131, s BOOST_PP_TUPLE_EAT_3)(p, o, o(131, s))
+# define BOOST_PP_WHILE_131_I(p, o, s) BOOST_PP_IF(p(132, s), BOOST_PP_WHILE_132, s BOOST_PP_TUPLE_EAT_3)(p, o, o(132, s))
+# define BOOST_PP_WHILE_132_I(p, o, s) BOOST_PP_IF(p(133, s), BOOST_PP_WHILE_133, s BOOST_PP_TUPLE_EAT_3)(p, o, o(133, s))
+# define BOOST_PP_WHILE_133_I(p, o, s) BOOST_PP_IF(p(134, s), BOOST_PP_WHILE_134, s BOOST_PP_TUPLE_EAT_3)(p, o, o(134, s))
+# define BOOST_PP_WHILE_134_I(p, o, s) BOOST_PP_IF(p(135, s), BOOST_PP_WHILE_135, s BOOST_PP_TUPLE_EAT_3)(p, o, o(135, s))
+# define BOOST_PP_WHILE_135_I(p, o, s) BOOST_PP_IF(p(136, s), BOOST_PP_WHILE_136, s BOOST_PP_TUPLE_EAT_3)(p, o, o(136, s))
+# define BOOST_PP_WHILE_136_I(p, o, s) BOOST_PP_IF(p(137, s), BOOST_PP_WHILE_137, s BOOST_PP_TUPLE_EAT_3)(p, o, o(137, s))
+# define BOOST_PP_WHILE_137_I(p, o, s) BOOST_PP_IF(p(138, s), BOOST_PP_WHILE_138, s BOOST_PP_TUPLE_EAT_3)(p, o, o(138, s))
+# define BOOST_PP_WHILE_138_I(p, o, s) BOOST_PP_IF(p(139, s), BOOST_PP_WHILE_139, s BOOST_PP_TUPLE_EAT_3)(p, o, o(139, s))
+# define BOOST_PP_WHILE_139_I(p, o, s) BOOST_PP_IF(p(140, s), BOOST_PP_WHILE_140, s BOOST_PP_TUPLE_EAT_3)(p, o, o(140, s))
+# define BOOST_PP_WHILE_140_I(p, o, s) BOOST_PP_IF(p(141, s), BOOST_PP_WHILE_141, s BOOST_PP_TUPLE_EAT_3)(p, o, o(141, s))
+# define BOOST_PP_WHILE_141_I(p, o, s) BOOST_PP_IF(p(142, s), BOOST_PP_WHILE_142, s BOOST_PP_TUPLE_EAT_3)(p, o, o(142, s))
+# define BOOST_PP_WHILE_142_I(p, o, s) BOOST_PP_IF(p(143, s), BOOST_PP_WHILE_143, s BOOST_PP_TUPLE_EAT_3)(p, o, o(143, s))
+# define BOOST_PP_WHILE_143_I(p, o, s) BOOST_PP_IF(p(144, s), BOOST_PP_WHILE_144, s BOOST_PP_TUPLE_EAT_3)(p, o, o(144, s))
+# define BOOST_PP_WHILE_144_I(p, o, s) BOOST_PP_IF(p(145, s), BOOST_PP_WHILE_145, s BOOST_PP_TUPLE_EAT_3)(p, o, o(145, s))
+# define BOOST_PP_WHILE_145_I(p, o, s) BOOST_PP_IF(p(146, s), BOOST_PP_WHILE_146, s BOOST_PP_TUPLE_EAT_3)(p, o, o(146, s))
+# define BOOST_PP_WHILE_146_I(p, o, s) BOOST_PP_IF(p(147, s), BOOST_PP_WHILE_147, s BOOST_PP_TUPLE_EAT_3)(p, o, o(147, s))
+# define BOOST_PP_WHILE_147_I(p, o, s) BOOST_PP_IF(p(148, s), BOOST_PP_WHILE_148, s BOOST_PP_TUPLE_EAT_3)(p, o, o(148, s))
+# define BOOST_PP_WHILE_148_I(p, o, s) BOOST_PP_IF(p(149, s), BOOST_PP_WHILE_149, s BOOST_PP_TUPLE_EAT_3)(p, o, o(149, s))
+# define BOOST_PP_WHILE_149_I(p, o, s) BOOST_PP_IF(p(150, s), BOOST_PP_WHILE_150, s BOOST_PP_TUPLE_EAT_3)(p, o, o(150, s))
+# define BOOST_PP_WHILE_150_I(p, o, s) BOOST_PP_IF(p(151, s), BOOST_PP_WHILE_151, s BOOST_PP_TUPLE_EAT_3)(p, o, o(151, s))
+# define BOOST_PP_WHILE_151_I(p, o, s) BOOST_PP_IF(p(152, s), BOOST_PP_WHILE_152, s BOOST_PP_TUPLE_EAT_3)(p, o, o(152, s))
+# define BOOST_PP_WHILE_152_I(p, o, s) BOOST_PP_IF(p(153, s), BOOST_PP_WHILE_153, s BOOST_PP_TUPLE_EAT_3)(p, o, o(153, s))
+# define BOOST_PP_WHILE_153_I(p, o, s) BOOST_PP_IF(p(154, s), BOOST_PP_WHILE_154, s BOOST_PP_TUPLE_EAT_3)(p, o, o(154, s))
+# define BOOST_PP_WHILE_154_I(p, o, s) BOOST_PP_IF(p(155, s), BOOST_PP_WHILE_155, s BOOST_PP_TUPLE_EAT_3)(p, o, o(155, s))
+# define BOOST_PP_WHILE_155_I(p, o, s) BOOST_PP_IF(p(156, s), BOOST_PP_WHILE_156, s BOOST_PP_TUPLE_EAT_3)(p, o, o(156, s))
+# define BOOST_PP_WHILE_156_I(p, o, s) BOOST_PP_IF(p(157, s), BOOST_PP_WHILE_157, s BOOST_PP_TUPLE_EAT_3)(p, o, o(157, s))
+# define BOOST_PP_WHILE_157_I(p, o, s) BOOST_PP_IF(p(158, s), BOOST_PP_WHILE_158, s BOOST_PP_TUPLE_EAT_3)(p, o, o(158, s))
+# define BOOST_PP_WHILE_158_I(p, o, s) BOOST_PP_IF(p(159, s), BOOST_PP_WHILE_159, s BOOST_PP_TUPLE_EAT_3)(p, o, o(159, s))
+# define BOOST_PP_WHILE_159_I(p, o, s) BOOST_PP_IF(p(160, s), BOOST_PP_WHILE_160, s BOOST_PP_TUPLE_EAT_3)(p, o, o(160, s))
+# define BOOST_PP_WHILE_160_I(p, o, s) BOOST_PP_IF(p(161, s), BOOST_PP_WHILE_161, s BOOST_PP_TUPLE_EAT_3)(p, o, o(161, s))
+# define BOOST_PP_WHILE_161_I(p, o, s) BOOST_PP_IF(p(162, s), BOOST_PP_WHILE_162, s BOOST_PP_TUPLE_EAT_3)(p, o, o(162, s))
+# define BOOST_PP_WHILE_162_I(p, o, s) BOOST_PP_IF(p(163, s), BOOST_PP_WHILE_163, s BOOST_PP_TUPLE_EAT_3)(p, o, o(163, s))
+# define BOOST_PP_WHILE_163_I(p, o, s) BOOST_PP_IF(p(164, s), BOOST_PP_WHILE_164, s BOOST_PP_TUPLE_EAT_3)(p, o, o(164, s))
+# define BOOST_PP_WHILE_164_I(p, o, s) BOOST_PP_IF(p(165, s), BOOST_PP_WHILE_165, s BOOST_PP_TUPLE_EAT_3)(p, o, o(165, s))
+# define BOOST_PP_WHILE_165_I(p, o, s) BOOST_PP_IF(p(166, s), BOOST_PP_WHILE_166, s BOOST_PP_TUPLE_EAT_3)(p, o, o(166, s))
+# define BOOST_PP_WHILE_166_I(p, o, s) BOOST_PP_IF(p(167, s), BOOST_PP_WHILE_167, s BOOST_PP_TUPLE_EAT_3)(p, o, o(167, s))
+# define BOOST_PP_WHILE_167_I(p, o, s) BOOST_PP_IF(p(168, s), BOOST_PP_WHILE_168, s BOOST_PP_TUPLE_EAT_3)(p, o, o(168, s))
+# define BOOST_PP_WHILE_168_I(p, o, s) BOOST_PP_IF(p(169, s), BOOST_PP_WHILE_169, s BOOST_PP_TUPLE_EAT_3)(p, o, o(169, s))
+# define BOOST_PP_WHILE_169_I(p, o, s) BOOST_PP_IF(p(170, s), BOOST_PP_WHILE_170, s BOOST_PP_TUPLE_EAT_3)(p, o, o(170, s))
+# define BOOST_PP_WHILE_170_I(p, o, s) BOOST_PP_IF(p(171, s), BOOST_PP_WHILE_171, s BOOST_PP_TUPLE_EAT_3)(p, o, o(171, s))
+# define BOOST_PP_WHILE_171_I(p, o, s) BOOST_PP_IF(p(172, s), BOOST_PP_WHILE_172, s BOOST_PP_TUPLE_EAT_3)(p, o, o(172, s))
+# define BOOST_PP_WHILE_172_I(p, o, s) BOOST_PP_IF(p(173, s), BOOST_PP_WHILE_173, s BOOST_PP_TUPLE_EAT_3)(p, o, o(173, s))
+# define BOOST_PP_WHILE_173_I(p, o, s) BOOST_PP_IF(p(174, s), BOOST_PP_WHILE_174, s BOOST_PP_TUPLE_EAT_3)(p, o, o(174, s))
+# define BOOST_PP_WHILE_174_I(p, o, s) BOOST_PP_IF(p(175, s), BOOST_PP_WHILE_175, s BOOST_PP_TUPLE_EAT_3)(p, o, o(175, s))
+# define BOOST_PP_WHILE_175_I(p, o, s) BOOST_PP_IF(p(176, s), BOOST_PP_WHILE_176, s BOOST_PP_TUPLE_EAT_3)(p, o, o(176, s))
+# define BOOST_PP_WHILE_176_I(p, o, s) BOOST_PP_IF(p(177, s), BOOST_PP_WHILE_177, s BOOST_PP_TUPLE_EAT_3)(p, o, o(177, s))
+# define BOOST_PP_WHILE_177_I(p, o, s) BOOST_PP_IF(p(178, s), BOOST_PP_WHILE_178, s BOOST_PP_TUPLE_EAT_3)(p, o, o(178, s))
+# define BOOST_PP_WHILE_178_I(p, o, s) BOOST_PP_IF(p(179, s), BOOST_PP_WHILE_179, s BOOST_PP_TUPLE_EAT_3)(p, o, o(179, s))
+# define BOOST_PP_WHILE_179_I(p, o, s) BOOST_PP_IF(p(180, s), BOOST_PP_WHILE_180, s BOOST_PP_TUPLE_EAT_3)(p, o, o(180, s))
+# define BOOST_PP_WHILE_180_I(p, o, s) BOOST_PP_IF(p(181, s), BOOST_PP_WHILE_181, s BOOST_PP_TUPLE_EAT_3)(p, o, o(181, s))
+# define BOOST_PP_WHILE_181_I(p, o, s) BOOST_PP_IF(p(182, s), BOOST_PP_WHILE_182, s BOOST_PP_TUPLE_EAT_3)(p, o, o(182, s))
+# define BOOST_PP_WHILE_182_I(p, o, s) BOOST_PP_IF(p(183, s), BOOST_PP_WHILE_183, s BOOST_PP_TUPLE_EAT_3)(p, o, o(183, s))
+# define BOOST_PP_WHILE_183_I(p, o, s) BOOST_PP_IF(p(184, s), BOOST_PP_WHILE_184, s BOOST_PP_TUPLE_EAT_3)(p, o, o(184, s))
+# define BOOST_PP_WHILE_184_I(p, o, s) BOOST_PP_IF(p(185, s), BOOST_PP_WHILE_185, s BOOST_PP_TUPLE_EAT_3)(p, o, o(185, s))
+# define BOOST_PP_WHILE_185_I(p, o, s) BOOST_PP_IF(p(186, s), BOOST_PP_WHILE_186, s BOOST_PP_TUPLE_EAT_3)(p, o, o(186, s))
+# define BOOST_PP_WHILE_186_I(p, o, s) BOOST_PP_IF(p(187, s), BOOST_PP_WHILE_187, s BOOST_PP_TUPLE_EAT_3)(p, o, o(187, s))
+# define BOOST_PP_WHILE_187_I(p, o, s) BOOST_PP_IF(p(188, s), BOOST_PP_WHILE_188, s BOOST_PP_TUPLE_EAT_3)(p, o, o(188, s))
+# define BOOST_PP_WHILE_188_I(p, o, s) BOOST_PP_IF(p(189, s), BOOST_PP_WHILE_189, s BOOST_PP_TUPLE_EAT_3)(p, o, o(189, s))
+# define BOOST_PP_WHILE_189_I(p, o, s) BOOST_PP_IF(p(190, s), BOOST_PP_WHILE_190, s BOOST_PP_TUPLE_EAT_3)(p, o, o(190, s))
+# define BOOST_PP_WHILE_190_I(p, o, s) BOOST_PP_IF(p(191, s), BOOST_PP_WHILE_191, s BOOST_PP_TUPLE_EAT_3)(p, o, o(191, s))
+# define BOOST_PP_WHILE_191_I(p, o, s) BOOST_PP_IF(p(192, s), BOOST_PP_WHILE_192, s BOOST_PP_TUPLE_EAT_3)(p, o, o(192, s))
+# define BOOST_PP_WHILE_192_I(p, o, s) BOOST_PP_IF(p(193, s), BOOST_PP_WHILE_193, s BOOST_PP_TUPLE_EAT_3)(p, o, o(193, s))
+# define BOOST_PP_WHILE_193_I(p, o, s) BOOST_PP_IF(p(194, s), BOOST_PP_WHILE_194, s BOOST_PP_TUPLE_EAT_3)(p, o, o(194, s))
+# define BOOST_PP_WHILE_194_I(p, o, s) BOOST_PP_IF(p(195, s), BOOST_PP_WHILE_195, s BOOST_PP_TUPLE_EAT_3)(p, o, o(195, s))
+# define BOOST_PP_WHILE_195_I(p, o, s) BOOST_PP_IF(p(196, s), BOOST_PP_WHILE_196, s BOOST_PP_TUPLE_EAT_3)(p, o, o(196, s))
+# define BOOST_PP_WHILE_196_I(p, o, s) BOOST_PP_IF(p(197, s), BOOST_PP_WHILE_197, s BOOST_PP_TUPLE_EAT_3)(p, o, o(197, s))
+# define BOOST_PP_WHILE_197_I(p, o, s) BOOST_PP_IF(p(198, s), BOOST_PP_WHILE_198, s BOOST_PP_TUPLE_EAT_3)(p, o, o(198, s))
+# define BOOST_PP_WHILE_198_I(p, o, s) BOOST_PP_IF(p(199, s), BOOST_PP_WHILE_199, s BOOST_PP_TUPLE_EAT_3)(p, o, o(199, s))
+# define BOOST_PP_WHILE_199_I(p, o, s) BOOST_PP_IF(p(200, s), BOOST_PP_WHILE_200, s BOOST_PP_TUPLE_EAT_3)(p, o, o(200, s))
+# define BOOST_PP_WHILE_200_I(p, o, s) BOOST_PP_IF(p(201, s), BOOST_PP_WHILE_201, s BOOST_PP_TUPLE_EAT_3)(p, o, o(201, s))
+# define BOOST_PP_WHILE_201_I(p, o, s) BOOST_PP_IF(p(202, s), BOOST_PP_WHILE_202, s BOOST_PP_TUPLE_EAT_3)(p, o, o(202, s))
+# define BOOST_PP_WHILE_202_I(p, o, s) BOOST_PP_IF(p(203, s), BOOST_PP_WHILE_203, s BOOST_PP_TUPLE_EAT_3)(p, o, o(203, s))
+# define BOOST_PP_WHILE_203_I(p, o, s) BOOST_PP_IF(p(204, s), BOOST_PP_WHILE_204, s BOOST_PP_TUPLE_EAT_3)(p, o, o(204, s))
+# define BOOST_PP_WHILE_204_I(p, o, s) BOOST_PP_IF(p(205, s), BOOST_PP_WHILE_205, s BOOST_PP_TUPLE_EAT_3)(p, o, o(205, s))
+# define BOOST_PP_WHILE_205_I(p, o, s) BOOST_PP_IF(p(206, s), BOOST_PP_WHILE_206, s BOOST_PP_TUPLE_EAT_3)(p, o, o(206, s))
+# define BOOST_PP_WHILE_206_I(p, o, s) BOOST_PP_IF(p(207, s), BOOST_PP_WHILE_207, s BOOST_PP_TUPLE_EAT_3)(p, o, o(207, s))
+# define BOOST_PP_WHILE_207_I(p, o, s) BOOST_PP_IF(p(208, s), BOOST_PP_WHILE_208, s BOOST_PP_TUPLE_EAT_3)(p, o, o(208, s))
+# define BOOST_PP_WHILE_208_I(p, o, s) BOOST_PP_IF(p(209, s), BOOST_PP_WHILE_209, s BOOST_PP_TUPLE_EAT_3)(p, o, o(209, s))
+# define BOOST_PP_WHILE_209_I(p, o, s) BOOST_PP_IF(p(210, s), BOOST_PP_WHILE_210, s BOOST_PP_TUPLE_EAT_3)(p, o, o(210, s))
+# define BOOST_PP_WHILE_210_I(p, o, s) BOOST_PP_IF(p(211, s), BOOST_PP_WHILE_211, s BOOST_PP_TUPLE_EAT_3)(p, o, o(211, s))
+# define BOOST_PP_WHILE_211_I(p, o, s) BOOST_PP_IF(p(212, s), BOOST_PP_WHILE_212, s BOOST_PP_TUPLE_EAT_3)(p, o, o(212, s))
+# define BOOST_PP_WHILE_212_I(p, o, s) BOOST_PP_IF(p(213, s), BOOST_PP_WHILE_213, s BOOST_PP_TUPLE_EAT_3)(p, o, o(213, s))
+# define BOOST_PP_WHILE_213_I(p, o, s) BOOST_PP_IF(p(214, s), BOOST_PP_WHILE_214, s BOOST_PP_TUPLE_EAT_3)(p, o, o(214, s))
+# define BOOST_PP_WHILE_214_I(p, o, s) BOOST_PP_IF(p(215, s), BOOST_PP_WHILE_215, s BOOST_PP_TUPLE_EAT_3)(p, o, o(215, s))
+# define BOOST_PP_WHILE_215_I(p, o, s) BOOST_PP_IF(p(216, s), BOOST_PP_WHILE_216, s BOOST_PP_TUPLE_EAT_3)(p, o, o(216, s))
+# define BOOST_PP_WHILE_216_I(p, o, s) BOOST_PP_IF(p(217, s), BOOST_PP_WHILE_217, s BOOST_PP_TUPLE_EAT_3)(p, o, o(217, s))
+# define BOOST_PP_WHILE_217_I(p, o, s) BOOST_PP_IF(p(218, s), BOOST_PP_WHILE_218, s BOOST_PP_TUPLE_EAT_3)(p, o, o(218, s))
+# define BOOST_PP_WHILE_218_I(p, o, s) BOOST_PP_IF(p(219, s), BOOST_PP_WHILE_219, s BOOST_PP_TUPLE_EAT_3)(p, o, o(219, s))
+# define BOOST_PP_WHILE_219_I(p, o, s) BOOST_PP_IF(p(220, s), BOOST_PP_WHILE_220, s BOOST_PP_TUPLE_EAT_3)(p, o, o(220, s))
+# define BOOST_PP_WHILE_220_I(p, o, s) BOOST_PP_IF(p(221, s), BOOST_PP_WHILE_221, s BOOST_PP_TUPLE_EAT_3)(p, o, o(221, s))
+# define BOOST_PP_WHILE_221_I(p, o, s) BOOST_PP_IF(p(222, s), BOOST_PP_WHILE_222, s BOOST_PP_TUPLE_EAT_3)(p, o, o(222, s))
+# define BOOST_PP_WHILE_222_I(p, o, s) BOOST_PP_IF(p(223, s), BOOST_PP_WHILE_223, s BOOST_PP_TUPLE_EAT_3)(p, o, o(223, s))
+# define BOOST_PP_WHILE_223_I(p, o, s) BOOST_PP_IF(p(224, s), BOOST_PP_WHILE_224, s BOOST_PP_TUPLE_EAT_3)(p, o, o(224, s))
+# define BOOST_PP_WHILE_224_I(p, o, s) BOOST_PP_IF(p(225, s), BOOST_PP_WHILE_225, s BOOST_PP_TUPLE_EAT_3)(p, o, o(225, s))
+# define BOOST_PP_WHILE_225_I(p, o, s) BOOST_PP_IF(p(226, s), BOOST_PP_WHILE_226, s BOOST_PP_TUPLE_EAT_3)(p, o, o(226, s))
+# define BOOST_PP_WHILE_226_I(p, o, s) BOOST_PP_IF(p(227, s), BOOST_PP_WHILE_227, s BOOST_PP_TUPLE_EAT_3)(p, o, o(227, s))
+# define BOOST_PP_WHILE_227_I(p, o, s) BOOST_PP_IF(p(228, s), BOOST_PP_WHILE_228, s BOOST_PP_TUPLE_EAT_3)(p, o, o(228, s))
+# define BOOST_PP_WHILE_228_I(p, o, s) BOOST_PP_IF(p(229, s), BOOST_PP_WHILE_229, s BOOST_PP_TUPLE_EAT_3)(p, o, o(229, s))
+# define BOOST_PP_WHILE_229_I(p, o, s) BOOST_PP_IF(p(230, s), BOOST_PP_WHILE_230, s BOOST_PP_TUPLE_EAT_3)(p, o, o(230, s))
+# define BOOST_PP_WHILE_230_I(p, o, s) BOOST_PP_IF(p(231, s), BOOST_PP_WHILE_231, s BOOST_PP_TUPLE_EAT_3)(p, o, o(231, s))
+# define BOOST_PP_WHILE_231_I(p, o, s) BOOST_PP_IF(p(232, s), BOOST_PP_WHILE_232, s BOOST_PP_TUPLE_EAT_3)(p, o, o(232, s))
+# define BOOST_PP_WHILE_232_I(p, o, s) BOOST_PP_IF(p(233, s), BOOST_PP_WHILE_233, s BOOST_PP_TUPLE_EAT_3)(p, o, o(233, s))
+# define BOOST_PP_WHILE_233_I(p, o, s) BOOST_PP_IF(p(234, s), BOOST_PP_WHILE_234, s BOOST_PP_TUPLE_EAT_3)(p, o, o(234, s))
+# define BOOST_PP_WHILE_234_I(p, o, s) BOOST_PP_IF(p(235, s), BOOST_PP_WHILE_235, s BOOST_PP_TUPLE_EAT_3)(p, o, o(235, s))
+# define BOOST_PP_WHILE_235_I(p, o, s) BOOST_PP_IF(p(236, s), BOOST_PP_WHILE_236, s BOOST_PP_TUPLE_EAT_3)(p, o, o(236, s))
+# define BOOST_PP_WHILE_236_I(p, o, s) BOOST_PP_IF(p(237, s), BOOST_PP_WHILE_237, s BOOST_PP_TUPLE_EAT_3)(p, o, o(237, s))
+# define BOOST_PP_WHILE_237_I(p, o, s) BOOST_PP_IF(p(238, s), BOOST_PP_WHILE_238, s BOOST_PP_TUPLE_EAT_3)(p, o, o(238, s))
+# define BOOST_PP_WHILE_238_I(p, o, s) BOOST_PP_IF(p(239, s), BOOST_PP_WHILE_239, s BOOST_PP_TUPLE_EAT_3)(p, o, o(239, s))
+# define BOOST_PP_WHILE_239_I(p, o, s) BOOST_PP_IF(p(240, s), BOOST_PP_WHILE_240, s BOOST_PP_TUPLE_EAT_3)(p, o, o(240, s))
+# define BOOST_PP_WHILE_240_I(p, o, s) BOOST_PP_IF(p(241, s), BOOST_PP_WHILE_241, s BOOST_PP_TUPLE_EAT_3)(p, o, o(241, s))
+# define BOOST_PP_WHILE_241_I(p, o, s) BOOST_PP_IF(p(242, s), BOOST_PP_WHILE_242, s BOOST_PP_TUPLE_EAT_3)(p, o, o(242, s))
+# define BOOST_PP_WHILE_242_I(p, o, s) BOOST_PP_IF(p(243, s), BOOST_PP_WHILE_243, s BOOST_PP_TUPLE_EAT_3)(p, o, o(243, s))
+# define BOOST_PP_WHILE_243_I(p, o, s) BOOST_PP_IF(p(244, s), BOOST_PP_WHILE_244, s BOOST_PP_TUPLE_EAT_3)(p, o, o(244, s))
+# define BOOST_PP_WHILE_244_I(p, o, s) BOOST_PP_IF(p(245, s), BOOST_PP_WHILE_245, s BOOST_PP_TUPLE_EAT_3)(p, o, o(245, s))
+# define BOOST_PP_WHILE_245_I(p, o, s) BOOST_PP_IF(p(246, s), BOOST_PP_WHILE_246, s BOOST_PP_TUPLE_EAT_3)(p, o, o(246, s))
+# define BOOST_PP_WHILE_246_I(p, o, s) BOOST_PP_IF(p(247, s), BOOST_PP_WHILE_247, s BOOST_PP_TUPLE_EAT_3)(p, o, o(247, s))
+# define BOOST_PP_WHILE_247_I(p, o, s) BOOST_PP_IF(p(248, s), BOOST_PP_WHILE_248, s BOOST_PP_TUPLE_EAT_3)(p, o, o(248, s))
+# define BOOST_PP_WHILE_248_I(p, o, s) BOOST_PP_IF(p(249, s), BOOST_PP_WHILE_249, s BOOST_PP_TUPLE_EAT_3)(p, o, o(249, s))
+# define BOOST_PP_WHILE_249_I(p, o, s) BOOST_PP_IF(p(250, s), BOOST_PP_WHILE_250, s BOOST_PP_TUPLE_EAT_3)(p, o, o(250, s))
+# define BOOST_PP_WHILE_250_I(p, o, s) BOOST_PP_IF(p(251, s), BOOST_PP_WHILE_251, s BOOST_PP_TUPLE_EAT_3)(p, o, o(251, s))
+# define BOOST_PP_WHILE_251_I(p, o, s) BOOST_PP_IF(p(252, s), BOOST_PP_WHILE_252, s BOOST_PP_TUPLE_EAT_3)(p, o, o(252, s))
+# define BOOST_PP_WHILE_252_I(p, o, s) BOOST_PP_IF(p(253, s), BOOST_PP_WHILE_253, s BOOST_PP_TUPLE_EAT_3)(p, o, o(253, s))
+# define BOOST_PP_WHILE_253_I(p, o, s) BOOST_PP_IF(p(254, s), BOOST_PP_WHILE_254, s BOOST_PP_TUPLE_EAT_3)(p, o, o(254, s))
+# define BOOST_PP_WHILE_254_I(p, o, s) BOOST_PP_IF(p(255, s), BOOST_PP_WHILE_255, s BOOST_PP_TUPLE_EAT_3)(p, o, o(255, s))
+# define BOOST_PP_WHILE_255_I(p, o, s) BOOST_PP_IF(p(256, s), BOOST_PP_WHILE_256, s BOOST_PP_TUPLE_EAT_3)(p, o, o(256, s))
+# define BOOST_PP_WHILE_256_I(p, o, s) BOOST_PP_IF(p(257, s), BOOST_PP_WHILE_257, s BOOST_PP_TUPLE_EAT_3)(p, o, o(257, s))
+#
+# endif
diff --git a/boost/boost/preprocessor/control/detail/msvc/while.hpp b/boost/boost/preprocessor/control/detail/msvc/while.hpp
new file mode 100644
index 00000000000..e543e41b71a
--- /dev/null
+++ b/boost/boost/preprocessor/control/detail/msvc/while.hpp
@@ -0,0 +1,277 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_CONTROL_DETAIL_MSVC_WHILE_HPP
+# define BOOST_PREPROCESSOR_CONTROL_DETAIL_MSVC_WHILE_HPP
+#
+# include <boost/preprocessor/control/if.hpp>
+# include <boost/preprocessor/tuple/eat.hpp>
+#
+# define BOOST_PP_WHILE_1(p, o, s) BOOST_PP_IF(p(2, s), BOOST_PP_WHILE_2, s BOOST_PP_TUPLE_EAT_3)(p, o, o(2, s))
+# define BOOST_PP_WHILE_2(p, o, s) BOOST_PP_IF(p(3, s), BOOST_PP_WHILE_3, s BOOST_PP_TUPLE_EAT_3)(p, o, o(3, s))
+# define BOOST_PP_WHILE_3(p, o, s) BOOST_PP_IF(p(4, s), BOOST_PP_WHILE_4, s BOOST_PP_TUPLE_EAT_3)(p, o, o(4, s))
+# define BOOST_PP_WHILE_4(p, o, s) BOOST_PP_IF(p(5, s), BOOST_PP_WHILE_5, s BOOST_PP_TUPLE_EAT_3)(p, o, o(5, s))
+# define BOOST_PP_WHILE_5(p, o, s) BOOST_PP_IF(p(6, s), BOOST_PP_WHILE_6, s BOOST_PP_TUPLE_EAT_3)(p, o, o(6, s))
+# define BOOST_PP_WHILE_6(p, o, s) BOOST_PP_IF(p(7, s), BOOST_PP_WHILE_7, s BOOST_PP_TUPLE_EAT_3)(p, o, o(7, s))
+# define BOOST_PP_WHILE_7(p, o, s) BOOST_PP_IF(p(8, s), BOOST_PP_WHILE_8, s BOOST_PP_TUPLE_EAT_3)(p, o, o(8, s))
+# define BOOST_PP_WHILE_8(p, o, s) BOOST_PP_IF(p(9, s), BOOST_PP_WHILE_9, s BOOST_PP_TUPLE_EAT_3)(p, o, o(9, s))
+# define BOOST_PP_WHILE_9(p, o, s) BOOST_PP_IF(p(10, s), BOOST_PP_WHILE_10, s BOOST_PP_TUPLE_EAT_3)(p, o, o(10, s))
+# define BOOST_PP_WHILE_10(p, o, s) BOOST_PP_IF(p(11, s), BOOST_PP_WHILE_11, s BOOST_PP_TUPLE_EAT_3)(p, o, o(11, s))
+# define BOOST_PP_WHILE_11(p, o, s) BOOST_PP_IF(p(12, s), BOOST_PP_WHILE_12, s BOOST_PP_TUPLE_EAT_3)(p, o, o(12, s))
+# define BOOST_PP_WHILE_12(p, o, s) BOOST_PP_IF(p(13, s), BOOST_PP_WHILE_13, s BOOST_PP_TUPLE_EAT_3)(p, o, o(13, s))
+# define BOOST_PP_WHILE_13(p, o, s) BOOST_PP_IF(p(14, s), BOOST_PP_WHILE_14, s BOOST_PP_TUPLE_EAT_3)(p, o, o(14, s))
+# define BOOST_PP_WHILE_14(p, o, s) BOOST_PP_IF(p(15, s), BOOST_PP_WHILE_15, s BOOST_PP_TUPLE_EAT_3)(p, o, o(15, s))
+# define BOOST_PP_WHILE_15(p, o, s) BOOST_PP_IF(p(16, s), BOOST_PP_WHILE_16, s BOOST_PP_TUPLE_EAT_3)(p, o, o(16, s))
+# define BOOST_PP_WHILE_16(p, o, s) BOOST_PP_IF(p(17, s), BOOST_PP_WHILE_17, s BOOST_PP_TUPLE_EAT_3)(p, o, o(17, s))
+# define BOOST_PP_WHILE_17(p, o, s) BOOST_PP_IF(p(18, s), BOOST_PP_WHILE_18, s BOOST_PP_TUPLE_EAT_3)(p, o, o(18, s))
+# define BOOST_PP_WHILE_18(p, o, s) BOOST_PP_IF(p(19, s), BOOST_PP_WHILE_19, s BOOST_PP_TUPLE_EAT_3)(p, o, o(19, s))
+# define BOOST_PP_WHILE_19(p, o, s) BOOST_PP_IF(p(20, s), BOOST_PP_WHILE_20, s BOOST_PP_TUPLE_EAT_3)(p, o, o(20, s))
+# define BOOST_PP_WHILE_20(p, o, s) BOOST_PP_IF(p(21, s), BOOST_PP_WHILE_21, s BOOST_PP_TUPLE_EAT_3)(p, o, o(21, s))
+# define BOOST_PP_WHILE_21(p, o, s) BOOST_PP_IF(p(22, s), BOOST_PP_WHILE_22, s BOOST_PP_TUPLE_EAT_3)(p, o, o(22, s))
+# define BOOST_PP_WHILE_22(p, o, s) BOOST_PP_IF(p(23, s), BOOST_PP_WHILE_23, s BOOST_PP_TUPLE_EAT_3)(p, o, o(23, s))
+# define BOOST_PP_WHILE_23(p, o, s) BOOST_PP_IF(p(24, s), BOOST_PP_WHILE_24, s BOOST_PP_TUPLE_EAT_3)(p, o, o(24, s))
+# define BOOST_PP_WHILE_24(p, o, s) BOOST_PP_IF(p(25, s), BOOST_PP_WHILE_25, s BOOST_PP_TUPLE_EAT_3)(p, o, o(25, s))
+# define BOOST_PP_WHILE_25(p, o, s) BOOST_PP_IF(p(26, s), BOOST_PP_WHILE_26, s BOOST_PP_TUPLE_EAT_3)(p, o, o(26, s))
+# define BOOST_PP_WHILE_26(p, o, s) BOOST_PP_IF(p(27, s), BOOST_PP_WHILE_27, s BOOST_PP_TUPLE_EAT_3)(p, o, o(27, s))
+# define BOOST_PP_WHILE_27(p, o, s) BOOST_PP_IF(p(28, s), BOOST_PP_WHILE_28, s BOOST_PP_TUPLE_EAT_3)(p, o, o(28, s))
+# define BOOST_PP_WHILE_28(p, o, s) BOOST_PP_IF(p(29, s), BOOST_PP_WHILE_29, s BOOST_PP_TUPLE_EAT_3)(p, o, o(29, s))
+# define BOOST_PP_WHILE_29(p, o, s) BOOST_PP_IF(p(30, s), BOOST_PP_WHILE_30, s BOOST_PP_TUPLE_EAT_3)(p, o, o(30, s))
+# define BOOST_PP_WHILE_30(p, o, s) BOOST_PP_IF(p(31, s), BOOST_PP_WHILE_31, s BOOST_PP_TUPLE_EAT_3)(p, o, o(31, s))
+# define BOOST_PP_WHILE_31(p, o, s) BOOST_PP_IF(p(32, s), BOOST_PP_WHILE_32, s BOOST_PP_TUPLE_EAT_3)(p, o, o(32, s))
+# define BOOST_PP_WHILE_32(p, o, s) BOOST_PP_IF(p(33, s), BOOST_PP_WHILE_33, s BOOST_PP_TUPLE_EAT_3)(p, o, o(33, s))
+# define BOOST_PP_WHILE_33(p, o, s) BOOST_PP_IF(p(34, s), BOOST_PP_WHILE_34, s BOOST_PP_TUPLE_EAT_3)(p, o, o(34, s))
+# define BOOST_PP_WHILE_34(p, o, s) BOOST_PP_IF(p(35, s), BOOST_PP_WHILE_35, s BOOST_PP_TUPLE_EAT_3)(p, o, o(35, s))
+# define BOOST_PP_WHILE_35(p, o, s) BOOST_PP_IF(p(36, s), BOOST_PP_WHILE_36, s BOOST_PP_TUPLE_EAT_3)(p, o, o(36, s))
+# define BOOST_PP_WHILE_36(p, o, s) BOOST_PP_IF(p(37, s), BOOST_PP_WHILE_37, s BOOST_PP_TUPLE_EAT_3)(p, o, o(37, s))
+# define BOOST_PP_WHILE_37(p, o, s) BOOST_PP_IF(p(38, s), BOOST_PP_WHILE_38, s BOOST_PP_TUPLE_EAT_3)(p, o, o(38, s))
+# define BOOST_PP_WHILE_38(p, o, s) BOOST_PP_IF(p(39, s), BOOST_PP_WHILE_39, s BOOST_PP_TUPLE_EAT_3)(p, o, o(39, s))
+# define BOOST_PP_WHILE_39(p, o, s) BOOST_PP_IF(p(40, s), BOOST_PP_WHILE_40, s BOOST_PP_TUPLE_EAT_3)(p, o, o(40, s))
+# define BOOST_PP_WHILE_40(p, o, s) BOOST_PP_IF(p(41, s), BOOST_PP_WHILE_41, s BOOST_PP_TUPLE_EAT_3)(p, o, o(41, s))
+# define BOOST_PP_WHILE_41(p, o, s) BOOST_PP_IF(p(42, s), BOOST_PP_WHILE_42, s BOOST_PP_TUPLE_EAT_3)(p, o, o(42, s))
+# define BOOST_PP_WHILE_42(p, o, s) BOOST_PP_IF(p(43, s), BOOST_PP_WHILE_43, s BOOST_PP_TUPLE_EAT_3)(p, o, o(43, s))
+# define BOOST_PP_WHILE_43(p, o, s) BOOST_PP_IF(p(44, s), BOOST_PP_WHILE_44, s BOOST_PP_TUPLE_EAT_3)(p, o, o(44, s))
+# define BOOST_PP_WHILE_44(p, o, s) BOOST_PP_IF(p(45, s), BOOST_PP_WHILE_45, s BOOST_PP_TUPLE_EAT_3)(p, o, o(45, s))
+# define BOOST_PP_WHILE_45(p, o, s) BOOST_PP_IF(p(46, s), BOOST_PP_WHILE_46, s BOOST_PP_TUPLE_EAT_3)(p, o, o(46, s))
+# define BOOST_PP_WHILE_46(p, o, s) BOOST_PP_IF(p(47, s), BOOST_PP_WHILE_47, s BOOST_PP_TUPLE_EAT_3)(p, o, o(47, s))
+# define BOOST_PP_WHILE_47(p, o, s) BOOST_PP_IF(p(48, s), BOOST_PP_WHILE_48, s BOOST_PP_TUPLE_EAT_3)(p, o, o(48, s))
+# define BOOST_PP_WHILE_48(p, o, s) BOOST_PP_IF(p(49, s), BOOST_PP_WHILE_49, s BOOST_PP_TUPLE_EAT_3)(p, o, o(49, s))
+# define BOOST_PP_WHILE_49(p, o, s) BOOST_PP_IF(p(50, s), BOOST_PP_WHILE_50, s BOOST_PP_TUPLE_EAT_3)(p, o, o(50, s))
+# define BOOST_PP_WHILE_50(p, o, s) BOOST_PP_IF(p(51, s), BOOST_PP_WHILE_51, s BOOST_PP_TUPLE_EAT_3)(p, o, o(51, s))
+# define BOOST_PP_WHILE_51(p, o, s) BOOST_PP_IF(p(52, s), BOOST_PP_WHILE_52, s BOOST_PP_TUPLE_EAT_3)(p, o, o(52, s))
+# define BOOST_PP_WHILE_52(p, o, s) BOOST_PP_IF(p(53, s), BOOST_PP_WHILE_53, s BOOST_PP_TUPLE_EAT_3)(p, o, o(53, s))
+# define BOOST_PP_WHILE_53(p, o, s) BOOST_PP_IF(p(54, s), BOOST_PP_WHILE_54, s BOOST_PP_TUPLE_EAT_3)(p, o, o(54, s))
+# define BOOST_PP_WHILE_54(p, o, s) BOOST_PP_IF(p(55, s), BOOST_PP_WHILE_55, s BOOST_PP_TUPLE_EAT_3)(p, o, o(55, s))
+# define BOOST_PP_WHILE_55(p, o, s) BOOST_PP_IF(p(56, s), BOOST_PP_WHILE_56, s BOOST_PP_TUPLE_EAT_3)(p, o, o(56, s))
+# define BOOST_PP_WHILE_56(p, o, s) BOOST_PP_IF(p(57, s), BOOST_PP_WHILE_57, s BOOST_PP_TUPLE_EAT_3)(p, o, o(57, s))
+# define BOOST_PP_WHILE_57(p, o, s) BOOST_PP_IF(p(58, s), BOOST_PP_WHILE_58, s BOOST_PP_TUPLE_EAT_3)(p, o, o(58, s))
+# define BOOST_PP_WHILE_58(p, o, s) BOOST_PP_IF(p(59, s), BOOST_PP_WHILE_59, s BOOST_PP_TUPLE_EAT_3)(p, o, o(59, s))
+# define BOOST_PP_WHILE_59(p, o, s) BOOST_PP_IF(p(60, s), BOOST_PP_WHILE_60, s BOOST_PP_TUPLE_EAT_3)(p, o, o(60, s))
+# define BOOST_PP_WHILE_60(p, o, s) BOOST_PP_IF(p(61, s), BOOST_PP_WHILE_61, s BOOST_PP_TUPLE_EAT_3)(p, o, o(61, s))
+# define BOOST_PP_WHILE_61(p, o, s) BOOST_PP_IF(p(62, s), BOOST_PP_WHILE_62, s BOOST_PP_TUPLE_EAT_3)(p, o, o(62, s))
+# define BOOST_PP_WHILE_62(p, o, s) BOOST_PP_IF(p(63, s), BOOST_PP_WHILE_63, s BOOST_PP_TUPLE_EAT_3)(p, o, o(63, s))
+# define BOOST_PP_WHILE_63(p, o, s) BOOST_PP_IF(p(64, s), BOOST_PP_WHILE_64, s BOOST_PP_TUPLE_EAT_3)(p, o, o(64, s))
+# define BOOST_PP_WHILE_64(p, o, s) BOOST_PP_IF(p(65, s), BOOST_PP_WHILE_65, s BOOST_PP_TUPLE_EAT_3)(p, o, o(65, s))
+# define BOOST_PP_WHILE_65(p, o, s) BOOST_PP_IF(p(66, s), BOOST_PP_WHILE_66, s BOOST_PP_TUPLE_EAT_3)(p, o, o(66, s))
+# define BOOST_PP_WHILE_66(p, o, s) BOOST_PP_IF(p(67, s), BOOST_PP_WHILE_67, s BOOST_PP_TUPLE_EAT_3)(p, o, o(67, s))
+# define BOOST_PP_WHILE_67(p, o, s) BOOST_PP_IF(p(68, s), BOOST_PP_WHILE_68, s BOOST_PP_TUPLE_EAT_3)(p, o, o(68, s))
+# define BOOST_PP_WHILE_68(p, o, s) BOOST_PP_IF(p(69, s), BOOST_PP_WHILE_69, s BOOST_PP_TUPLE_EAT_3)(p, o, o(69, s))
+# define BOOST_PP_WHILE_69(p, o, s) BOOST_PP_IF(p(70, s), BOOST_PP_WHILE_70, s BOOST_PP_TUPLE_EAT_3)(p, o, o(70, s))
+# define BOOST_PP_WHILE_70(p, o, s) BOOST_PP_IF(p(71, s), BOOST_PP_WHILE_71, s BOOST_PP_TUPLE_EAT_3)(p, o, o(71, s))
+# define BOOST_PP_WHILE_71(p, o, s) BOOST_PP_IF(p(72, s), BOOST_PP_WHILE_72, s BOOST_PP_TUPLE_EAT_3)(p, o, o(72, s))
+# define BOOST_PP_WHILE_72(p, o, s) BOOST_PP_IF(p(73, s), BOOST_PP_WHILE_73, s BOOST_PP_TUPLE_EAT_3)(p, o, o(73, s))
+# define BOOST_PP_WHILE_73(p, o, s) BOOST_PP_IF(p(74, s), BOOST_PP_WHILE_74, s BOOST_PP_TUPLE_EAT_3)(p, o, o(74, s))
+# define BOOST_PP_WHILE_74(p, o, s) BOOST_PP_IF(p(75, s), BOOST_PP_WHILE_75, s BOOST_PP_TUPLE_EAT_3)(p, o, o(75, s))
+# define BOOST_PP_WHILE_75(p, o, s) BOOST_PP_IF(p(76, s), BOOST_PP_WHILE_76, s BOOST_PP_TUPLE_EAT_3)(p, o, o(76, s))
+# define BOOST_PP_WHILE_76(p, o, s) BOOST_PP_IF(p(77, s), BOOST_PP_WHILE_77, s BOOST_PP_TUPLE_EAT_3)(p, o, o(77, s))
+# define BOOST_PP_WHILE_77(p, o, s) BOOST_PP_IF(p(78, s), BOOST_PP_WHILE_78, s BOOST_PP_TUPLE_EAT_3)(p, o, o(78, s))
+# define BOOST_PP_WHILE_78(p, o, s) BOOST_PP_IF(p(79, s), BOOST_PP_WHILE_79, s BOOST_PP_TUPLE_EAT_3)(p, o, o(79, s))
+# define BOOST_PP_WHILE_79(p, o, s) BOOST_PP_IF(p(80, s), BOOST_PP_WHILE_80, s BOOST_PP_TUPLE_EAT_3)(p, o, o(80, s))
+# define BOOST_PP_WHILE_80(p, o, s) BOOST_PP_IF(p(81, s), BOOST_PP_WHILE_81, s BOOST_PP_TUPLE_EAT_3)(p, o, o(81, s))
+# define BOOST_PP_WHILE_81(p, o, s) BOOST_PP_IF(p(82, s), BOOST_PP_WHILE_82, s BOOST_PP_TUPLE_EAT_3)(p, o, o(82, s))
+# define BOOST_PP_WHILE_82(p, o, s) BOOST_PP_IF(p(83, s), BOOST_PP_WHILE_83, s BOOST_PP_TUPLE_EAT_3)(p, o, o(83, s))
+# define BOOST_PP_WHILE_83(p, o, s) BOOST_PP_IF(p(84, s), BOOST_PP_WHILE_84, s BOOST_PP_TUPLE_EAT_3)(p, o, o(84, s))
+# define BOOST_PP_WHILE_84(p, o, s) BOOST_PP_IF(p(85, s), BOOST_PP_WHILE_85, s BOOST_PP_TUPLE_EAT_3)(p, o, o(85, s))
+# define BOOST_PP_WHILE_85(p, o, s) BOOST_PP_IF(p(86, s), BOOST_PP_WHILE_86, s BOOST_PP_TUPLE_EAT_3)(p, o, o(86, s))
+# define BOOST_PP_WHILE_86(p, o, s) BOOST_PP_IF(p(87, s), BOOST_PP_WHILE_87, s BOOST_PP_TUPLE_EAT_3)(p, o, o(87, s))
+# define BOOST_PP_WHILE_87(p, o, s) BOOST_PP_IF(p(88, s), BOOST_PP_WHILE_88, s BOOST_PP_TUPLE_EAT_3)(p, o, o(88, s))
+# define BOOST_PP_WHILE_88(p, o, s) BOOST_PP_IF(p(89, s), BOOST_PP_WHILE_89, s BOOST_PP_TUPLE_EAT_3)(p, o, o(89, s))
+# define BOOST_PP_WHILE_89(p, o, s) BOOST_PP_IF(p(90, s), BOOST_PP_WHILE_90, s BOOST_PP_TUPLE_EAT_3)(p, o, o(90, s))
+# define BOOST_PP_WHILE_90(p, o, s) BOOST_PP_IF(p(91, s), BOOST_PP_WHILE_91, s BOOST_PP_TUPLE_EAT_3)(p, o, o(91, s))
+# define BOOST_PP_WHILE_91(p, o, s) BOOST_PP_IF(p(92, s), BOOST_PP_WHILE_92, s BOOST_PP_TUPLE_EAT_3)(p, o, o(92, s))
+# define BOOST_PP_WHILE_92(p, o, s) BOOST_PP_IF(p(93, s), BOOST_PP_WHILE_93, s BOOST_PP_TUPLE_EAT_3)(p, o, o(93, s))
+# define BOOST_PP_WHILE_93(p, o, s) BOOST_PP_IF(p(94, s), BOOST_PP_WHILE_94, s BOOST_PP_TUPLE_EAT_3)(p, o, o(94, s))
+# define BOOST_PP_WHILE_94(p, o, s) BOOST_PP_IF(p(95, s), BOOST_PP_WHILE_95, s BOOST_PP_TUPLE_EAT_3)(p, o, o(95, s))
+# define BOOST_PP_WHILE_95(p, o, s) BOOST_PP_IF(p(96, s), BOOST_PP_WHILE_96, s BOOST_PP_TUPLE_EAT_3)(p, o, o(96, s))
+# define BOOST_PP_WHILE_96(p, o, s) BOOST_PP_IF(p(97, s), BOOST_PP_WHILE_97, s BOOST_PP_TUPLE_EAT_3)(p, o, o(97, s))
+# define BOOST_PP_WHILE_97(p, o, s) BOOST_PP_IF(p(98, s), BOOST_PP_WHILE_98, s BOOST_PP_TUPLE_EAT_3)(p, o, o(98, s))
+# define BOOST_PP_WHILE_98(p, o, s) BOOST_PP_IF(p(99, s), BOOST_PP_WHILE_99, s BOOST_PP_TUPLE_EAT_3)(p, o, o(99, s))
+# define BOOST_PP_WHILE_99(p, o, s) BOOST_PP_IF(p(100, s), BOOST_PP_WHILE_100, s BOOST_PP_TUPLE_EAT_3)(p, o, o(100, s))
+# define BOOST_PP_WHILE_100(p, o, s) BOOST_PP_IF(p(101, s), BOOST_PP_WHILE_101, s BOOST_PP_TUPLE_EAT_3)(p, o, o(101, s))
+# define BOOST_PP_WHILE_101(p, o, s) BOOST_PP_IF(p(102, s), BOOST_PP_WHILE_102, s BOOST_PP_TUPLE_EAT_3)(p, o, o(102, s))
+# define BOOST_PP_WHILE_102(p, o, s) BOOST_PP_IF(p(103, s), BOOST_PP_WHILE_103, s BOOST_PP_TUPLE_EAT_3)(p, o, o(103, s))
+# define BOOST_PP_WHILE_103(p, o, s) BOOST_PP_IF(p(104, s), BOOST_PP_WHILE_104, s BOOST_PP_TUPLE_EAT_3)(p, o, o(104, s))
+# define BOOST_PP_WHILE_104(p, o, s) BOOST_PP_IF(p(105, s), BOOST_PP_WHILE_105, s BOOST_PP_TUPLE_EAT_3)(p, o, o(105, s))
+# define BOOST_PP_WHILE_105(p, o, s) BOOST_PP_IF(p(106, s), BOOST_PP_WHILE_106, s BOOST_PP_TUPLE_EAT_3)(p, o, o(106, s))
+# define BOOST_PP_WHILE_106(p, o, s) BOOST_PP_IF(p(107, s), BOOST_PP_WHILE_107, s BOOST_PP_TUPLE_EAT_3)(p, o, o(107, s))
+# define BOOST_PP_WHILE_107(p, o, s) BOOST_PP_IF(p(108, s), BOOST_PP_WHILE_108, s BOOST_PP_TUPLE_EAT_3)(p, o, o(108, s))
+# define BOOST_PP_WHILE_108(p, o, s) BOOST_PP_IF(p(109, s), BOOST_PP_WHILE_109, s BOOST_PP_TUPLE_EAT_3)(p, o, o(109, s))
+# define BOOST_PP_WHILE_109(p, o, s) BOOST_PP_IF(p(110, s), BOOST_PP_WHILE_110, s BOOST_PP_TUPLE_EAT_3)(p, o, o(110, s))
+# define BOOST_PP_WHILE_110(p, o, s) BOOST_PP_IF(p(111, s), BOOST_PP_WHILE_111, s BOOST_PP_TUPLE_EAT_3)(p, o, o(111, s))
+# define BOOST_PP_WHILE_111(p, o, s) BOOST_PP_IF(p(112, s), BOOST_PP_WHILE_112, s BOOST_PP_TUPLE_EAT_3)(p, o, o(112, s))
+# define BOOST_PP_WHILE_112(p, o, s) BOOST_PP_IF(p(113, s), BOOST_PP_WHILE_113, s BOOST_PP_TUPLE_EAT_3)(p, o, o(113, s))
+# define BOOST_PP_WHILE_113(p, o, s) BOOST_PP_IF(p(114, s), BOOST_PP_WHILE_114, s BOOST_PP_TUPLE_EAT_3)(p, o, o(114, s))
+# define BOOST_PP_WHILE_114(p, o, s) BOOST_PP_IF(p(115, s), BOOST_PP_WHILE_115, s BOOST_PP_TUPLE_EAT_3)(p, o, o(115, s))
+# define BOOST_PP_WHILE_115(p, o, s) BOOST_PP_IF(p(116, s), BOOST_PP_WHILE_116, s BOOST_PP_TUPLE_EAT_3)(p, o, o(116, s))
+# define BOOST_PP_WHILE_116(p, o, s) BOOST_PP_IF(p(117, s), BOOST_PP_WHILE_117, s BOOST_PP_TUPLE_EAT_3)(p, o, o(117, s))
+# define BOOST_PP_WHILE_117(p, o, s) BOOST_PP_IF(p(118, s), BOOST_PP_WHILE_118, s BOOST_PP_TUPLE_EAT_3)(p, o, o(118, s))
+# define BOOST_PP_WHILE_118(p, o, s) BOOST_PP_IF(p(119, s), BOOST_PP_WHILE_119, s BOOST_PP_TUPLE_EAT_3)(p, o, o(119, s))
+# define BOOST_PP_WHILE_119(p, o, s) BOOST_PP_IF(p(120, s), BOOST_PP_WHILE_120, s BOOST_PP_TUPLE_EAT_3)(p, o, o(120, s))
+# define BOOST_PP_WHILE_120(p, o, s) BOOST_PP_IF(p(121, s), BOOST_PP_WHILE_121, s BOOST_PP_TUPLE_EAT_3)(p, o, o(121, s))
+# define BOOST_PP_WHILE_121(p, o, s) BOOST_PP_IF(p(122, s), BOOST_PP_WHILE_122, s BOOST_PP_TUPLE_EAT_3)(p, o, o(122, s))
+# define BOOST_PP_WHILE_122(p, o, s) BOOST_PP_IF(p(123, s), BOOST_PP_WHILE_123, s BOOST_PP_TUPLE_EAT_3)(p, o, o(123, s))
+# define BOOST_PP_WHILE_123(p, o, s) BOOST_PP_IF(p(124, s), BOOST_PP_WHILE_124, s BOOST_PP_TUPLE_EAT_3)(p, o, o(124, s))
+# define BOOST_PP_WHILE_124(p, o, s) BOOST_PP_IF(p(125, s), BOOST_PP_WHILE_125, s BOOST_PP_TUPLE_EAT_3)(p, o, o(125, s))
+# define BOOST_PP_WHILE_125(p, o, s) BOOST_PP_IF(p(126, s), BOOST_PP_WHILE_126, s BOOST_PP_TUPLE_EAT_3)(p, o, o(126, s))
+# define BOOST_PP_WHILE_126(p, o, s) BOOST_PP_IF(p(127, s), BOOST_PP_WHILE_127, s BOOST_PP_TUPLE_EAT_3)(p, o, o(127, s))
+# define BOOST_PP_WHILE_127(p, o, s) BOOST_PP_IF(p(128, s), BOOST_PP_WHILE_128, s BOOST_PP_TUPLE_EAT_3)(p, o, o(128, s))
+# define BOOST_PP_WHILE_128(p, o, s) BOOST_PP_IF(p(129, s), BOOST_PP_WHILE_129, s BOOST_PP_TUPLE_EAT_3)(p, o, o(129, s))
+# define BOOST_PP_WHILE_129(p, o, s) BOOST_PP_IF(p(130, s), BOOST_PP_WHILE_130, s BOOST_PP_TUPLE_EAT_3)(p, o, o(130, s))
+# define BOOST_PP_WHILE_130(p, o, s) BOOST_PP_IF(p(131, s), BOOST_PP_WHILE_131, s BOOST_PP_TUPLE_EAT_3)(p, o, o(131, s))
+# define BOOST_PP_WHILE_131(p, o, s) BOOST_PP_IF(p(132, s), BOOST_PP_WHILE_132, s BOOST_PP_TUPLE_EAT_3)(p, o, o(132, s))
+# define BOOST_PP_WHILE_132(p, o, s) BOOST_PP_IF(p(133, s), BOOST_PP_WHILE_133, s BOOST_PP_TUPLE_EAT_3)(p, o, o(133, s))
+# define BOOST_PP_WHILE_133(p, o, s) BOOST_PP_IF(p(134, s), BOOST_PP_WHILE_134, s BOOST_PP_TUPLE_EAT_3)(p, o, o(134, s))
+# define BOOST_PP_WHILE_134(p, o, s) BOOST_PP_IF(p(135, s), BOOST_PP_WHILE_135, s BOOST_PP_TUPLE_EAT_3)(p, o, o(135, s))
+# define BOOST_PP_WHILE_135(p, o, s) BOOST_PP_IF(p(136, s), BOOST_PP_WHILE_136, s BOOST_PP_TUPLE_EAT_3)(p, o, o(136, s))
+# define BOOST_PP_WHILE_136(p, o, s) BOOST_PP_IF(p(137, s), BOOST_PP_WHILE_137, s BOOST_PP_TUPLE_EAT_3)(p, o, o(137, s))
+# define BOOST_PP_WHILE_137(p, o, s) BOOST_PP_IF(p(138, s), BOOST_PP_WHILE_138, s BOOST_PP_TUPLE_EAT_3)(p, o, o(138, s))
+# define BOOST_PP_WHILE_138(p, o, s) BOOST_PP_IF(p(139, s), BOOST_PP_WHILE_139, s BOOST_PP_TUPLE_EAT_3)(p, o, o(139, s))
+# define BOOST_PP_WHILE_139(p, o, s) BOOST_PP_IF(p(140, s), BOOST_PP_WHILE_140, s BOOST_PP_TUPLE_EAT_3)(p, o, o(140, s))
+# define BOOST_PP_WHILE_140(p, o, s) BOOST_PP_IF(p(141, s), BOOST_PP_WHILE_141, s BOOST_PP_TUPLE_EAT_3)(p, o, o(141, s))
+# define BOOST_PP_WHILE_141(p, o, s) BOOST_PP_IF(p(142, s), BOOST_PP_WHILE_142, s BOOST_PP_TUPLE_EAT_3)(p, o, o(142, s))
+# define BOOST_PP_WHILE_142(p, o, s) BOOST_PP_IF(p(143, s), BOOST_PP_WHILE_143, s BOOST_PP_TUPLE_EAT_3)(p, o, o(143, s))
+# define BOOST_PP_WHILE_143(p, o, s) BOOST_PP_IF(p(144, s), BOOST_PP_WHILE_144, s BOOST_PP_TUPLE_EAT_3)(p, o, o(144, s))
+# define BOOST_PP_WHILE_144(p, o, s) BOOST_PP_IF(p(145, s), BOOST_PP_WHILE_145, s BOOST_PP_TUPLE_EAT_3)(p, o, o(145, s))
+# define BOOST_PP_WHILE_145(p, o, s) BOOST_PP_IF(p(146, s), BOOST_PP_WHILE_146, s BOOST_PP_TUPLE_EAT_3)(p, o, o(146, s))
+# define BOOST_PP_WHILE_146(p, o, s) BOOST_PP_IF(p(147, s), BOOST_PP_WHILE_147, s BOOST_PP_TUPLE_EAT_3)(p, o, o(147, s))
+# define BOOST_PP_WHILE_147(p, o, s) BOOST_PP_IF(p(148, s), BOOST_PP_WHILE_148, s BOOST_PP_TUPLE_EAT_3)(p, o, o(148, s))
+# define BOOST_PP_WHILE_148(p, o, s) BOOST_PP_IF(p(149, s), BOOST_PP_WHILE_149, s BOOST_PP_TUPLE_EAT_3)(p, o, o(149, s))
+# define BOOST_PP_WHILE_149(p, o, s) BOOST_PP_IF(p(150, s), BOOST_PP_WHILE_150, s BOOST_PP_TUPLE_EAT_3)(p, o, o(150, s))
+# define BOOST_PP_WHILE_150(p, o, s) BOOST_PP_IF(p(151, s), BOOST_PP_WHILE_151, s BOOST_PP_TUPLE_EAT_3)(p, o, o(151, s))
+# define BOOST_PP_WHILE_151(p, o, s) BOOST_PP_IF(p(152, s), BOOST_PP_WHILE_152, s BOOST_PP_TUPLE_EAT_3)(p, o, o(152, s))
+# define BOOST_PP_WHILE_152(p, o, s) BOOST_PP_IF(p(153, s), BOOST_PP_WHILE_153, s BOOST_PP_TUPLE_EAT_3)(p, o, o(153, s))
+# define BOOST_PP_WHILE_153(p, o, s) BOOST_PP_IF(p(154, s), BOOST_PP_WHILE_154, s BOOST_PP_TUPLE_EAT_3)(p, o, o(154, s))
+# define BOOST_PP_WHILE_154(p, o, s) BOOST_PP_IF(p(155, s), BOOST_PP_WHILE_155, s BOOST_PP_TUPLE_EAT_3)(p, o, o(155, s))
+# define BOOST_PP_WHILE_155(p, o, s) BOOST_PP_IF(p(156, s), BOOST_PP_WHILE_156, s BOOST_PP_TUPLE_EAT_3)(p, o, o(156, s))
+# define BOOST_PP_WHILE_156(p, o, s) BOOST_PP_IF(p(157, s), BOOST_PP_WHILE_157, s BOOST_PP_TUPLE_EAT_3)(p, o, o(157, s))
+# define BOOST_PP_WHILE_157(p, o, s) BOOST_PP_IF(p(158, s), BOOST_PP_WHILE_158, s BOOST_PP_TUPLE_EAT_3)(p, o, o(158, s))
+# define BOOST_PP_WHILE_158(p, o, s) BOOST_PP_IF(p(159, s), BOOST_PP_WHILE_159, s BOOST_PP_TUPLE_EAT_3)(p, o, o(159, s))
+# define BOOST_PP_WHILE_159(p, o, s) BOOST_PP_IF(p(160, s), BOOST_PP_WHILE_160, s BOOST_PP_TUPLE_EAT_3)(p, o, o(160, s))
+# define BOOST_PP_WHILE_160(p, o, s) BOOST_PP_IF(p(161, s), BOOST_PP_WHILE_161, s BOOST_PP_TUPLE_EAT_3)(p, o, o(161, s))
+# define BOOST_PP_WHILE_161(p, o, s) BOOST_PP_IF(p(162, s), BOOST_PP_WHILE_162, s BOOST_PP_TUPLE_EAT_3)(p, o, o(162, s))
+# define BOOST_PP_WHILE_162(p, o, s) BOOST_PP_IF(p(163, s), BOOST_PP_WHILE_163, s BOOST_PP_TUPLE_EAT_3)(p, o, o(163, s))
+# define BOOST_PP_WHILE_163(p, o, s) BOOST_PP_IF(p(164, s), BOOST_PP_WHILE_164, s BOOST_PP_TUPLE_EAT_3)(p, o, o(164, s))
+# define BOOST_PP_WHILE_164(p, o, s) BOOST_PP_IF(p(165, s), BOOST_PP_WHILE_165, s BOOST_PP_TUPLE_EAT_3)(p, o, o(165, s))
+# define BOOST_PP_WHILE_165(p, o, s) BOOST_PP_IF(p(166, s), BOOST_PP_WHILE_166, s BOOST_PP_TUPLE_EAT_3)(p, o, o(166, s))
+# define BOOST_PP_WHILE_166(p, o, s) BOOST_PP_IF(p(167, s), BOOST_PP_WHILE_167, s BOOST_PP_TUPLE_EAT_3)(p, o, o(167, s))
+# define BOOST_PP_WHILE_167(p, o, s) BOOST_PP_IF(p(168, s), BOOST_PP_WHILE_168, s BOOST_PP_TUPLE_EAT_3)(p, o, o(168, s))
+# define BOOST_PP_WHILE_168(p, o, s) BOOST_PP_IF(p(169, s), BOOST_PP_WHILE_169, s BOOST_PP_TUPLE_EAT_3)(p, o, o(169, s))
+# define BOOST_PP_WHILE_169(p, o, s) BOOST_PP_IF(p(170, s), BOOST_PP_WHILE_170, s BOOST_PP_TUPLE_EAT_3)(p, o, o(170, s))
+# define BOOST_PP_WHILE_170(p, o, s) BOOST_PP_IF(p(171, s), BOOST_PP_WHILE_171, s BOOST_PP_TUPLE_EAT_3)(p, o, o(171, s))
+# define BOOST_PP_WHILE_171(p, o, s) BOOST_PP_IF(p(172, s), BOOST_PP_WHILE_172, s BOOST_PP_TUPLE_EAT_3)(p, o, o(172, s))
+# define BOOST_PP_WHILE_172(p, o, s) BOOST_PP_IF(p(173, s), BOOST_PP_WHILE_173, s BOOST_PP_TUPLE_EAT_3)(p, o, o(173, s))
+# define BOOST_PP_WHILE_173(p, o, s) BOOST_PP_IF(p(174, s), BOOST_PP_WHILE_174, s BOOST_PP_TUPLE_EAT_3)(p, o, o(174, s))
+# define BOOST_PP_WHILE_174(p, o, s) BOOST_PP_IF(p(175, s), BOOST_PP_WHILE_175, s BOOST_PP_TUPLE_EAT_3)(p, o, o(175, s))
+# define BOOST_PP_WHILE_175(p, o, s) BOOST_PP_IF(p(176, s), BOOST_PP_WHILE_176, s BOOST_PP_TUPLE_EAT_3)(p, o, o(176, s))
+# define BOOST_PP_WHILE_176(p, o, s) BOOST_PP_IF(p(177, s), BOOST_PP_WHILE_177, s BOOST_PP_TUPLE_EAT_3)(p, o, o(177, s))
+# define BOOST_PP_WHILE_177(p, o, s) BOOST_PP_IF(p(178, s), BOOST_PP_WHILE_178, s BOOST_PP_TUPLE_EAT_3)(p, o, o(178, s))
+# define BOOST_PP_WHILE_178(p, o, s) BOOST_PP_IF(p(179, s), BOOST_PP_WHILE_179, s BOOST_PP_TUPLE_EAT_3)(p, o, o(179, s))
+# define BOOST_PP_WHILE_179(p, o, s) BOOST_PP_IF(p(180, s), BOOST_PP_WHILE_180, s BOOST_PP_TUPLE_EAT_3)(p, o, o(180, s))
+# define BOOST_PP_WHILE_180(p, o, s) BOOST_PP_IF(p(181, s), BOOST_PP_WHILE_181, s BOOST_PP_TUPLE_EAT_3)(p, o, o(181, s))
+# define BOOST_PP_WHILE_181(p, o, s) BOOST_PP_IF(p(182, s), BOOST_PP_WHILE_182, s BOOST_PP_TUPLE_EAT_3)(p, o, o(182, s))
+# define BOOST_PP_WHILE_182(p, o, s) BOOST_PP_IF(p(183, s), BOOST_PP_WHILE_183, s BOOST_PP_TUPLE_EAT_3)(p, o, o(183, s))
+# define BOOST_PP_WHILE_183(p, o, s) BOOST_PP_IF(p(184, s), BOOST_PP_WHILE_184, s BOOST_PP_TUPLE_EAT_3)(p, o, o(184, s))
+# define BOOST_PP_WHILE_184(p, o, s) BOOST_PP_IF(p(185, s), BOOST_PP_WHILE_185, s BOOST_PP_TUPLE_EAT_3)(p, o, o(185, s))
+# define BOOST_PP_WHILE_185(p, o, s) BOOST_PP_IF(p(186, s), BOOST_PP_WHILE_186, s BOOST_PP_TUPLE_EAT_3)(p, o, o(186, s))
+# define BOOST_PP_WHILE_186(p, o, s) BOOST_PP_IF(p(187, s), BOOST_PP_WHILE_187, s BOOST_PP_TUPLE_EAT_3)(p, o, o(187, s))
+# define BOOST_PP_WHILE_187(p, o, s) BOOST_PP_IF(p(188, s), BOOST_PP_WHILE_188, s BOOST_PP_TUPLE_EAT_3)(p, o, o(188, s))
+# define BOOST_PP_WHILE_188(p, o, s) BOOST_PP_IF(p(189, s), BOOST_PP_WHILE_189, s BOOST_PP_TUPLE_EAT_3)(p, o, o(189, s))
+# define BOOST_PP_WHILE_189(p, o, s) BOOST_PP_IF(p(190, s), BOOST_PP_WHILE_190, s BOOST_PP_TUPLE_EAT_3)(p, o, o(190, s))
+# define BOOST_PP_WHILE_190(p, o, s) BOOST_PP_IF(p(191, s), BOOST_PP_WHILE_191, s BOOST_PP_TUPLE_EAT_3)(p, o, o(191, s))
+# define BOOST_PP_WHILE_191(p, o, s) BOOST_PP_IF(p(192, s), BOOST_PP_WHILE_192, s BOOST_PP_TUPLE_EAT_3)(p, o, o(192, s))
+# define BOOST_PP_WHILE_192(p, o, s) BOOST_PP_IF(p(193, s), BOOST_PP_WHILE_193, s BOOST_PP_TUPLE_EAT_3)(p, o, o(193, s))
+# define BOOST_PP_WHILE_193(p, o, s) BOOST_PP_IF(p(194, s), BOOST_PP_WHILE_194, s BOOST_PP_TUPLE_EAT_3)(p, o, o(194, s))
+# define BOOST_PP_WHILE_194(p, o, s) BOOST_PP_IF(p(195, s), BOOST_PP_WHILE_195, s BOOST_PP_TUPLE_EAT_3)(p, o, o(195, s))
+# define BOOST_PP_WHILE_195(p, o, s) BOOST_PP_IF(p(196, s), BOOST_PP_WHILE_196, s BOOST_PP_TUPLE_EAT_3)(p, o, o(196, s))
+# define BOOST_PP_WHILE_196(p, o, s) BOOST_PP_IF(p(197, s), BOOST_PP_WHILE_197, s BOOST_PP_TUPLE_EAT_3)(p, o, o(197, s))
+# define BOOST_PP_WHILE_197(p, o, s) BOOST_PP_IF(p(198, s), BOOST_PP_WHILE_198, s BOOST_PP_TUPLE_EAT_3)(p, o, o(198, s))
+# define BOOST_PP_WHILE_198(p, o, s) BOOST_PP_IF(p(199, s), BOOST_PP_WHILE_199, s BOOST_PP_TUPLE_EAT_3)(p, o, o(199, s))
+# define BOOST_PP_WHILE_199(p, o, s) BOOST_PP_IF(p(200, s), BOOST_PP_WHILE_200, s BOOST_PP_TUPLE_EAT_3)(p, o, o(200, s))
+# define BOOST_PP_WHILE_200(p, o, s) BOOST_PP_IF(p(201, s), BOOST_PP_WHILE_201, s BOOST_PP_TUPLE_EAT_3)(p, o, o(201, s))
+# define BOOST_PP_WHILE_201(p, o, s) BOOST_PP_IF(p(202, s), BOOST_PP_WHILE_202, s BOOST_PP_TUPLE_EAT_3)(p, o, o(202, s))
+# define BOOST_PP_WHILE_202(p, o, s) BOOST_PP_IF(p(203, s), BOOST_PP_WHILE_203, s BOOST_PP_TUPLE_EAT_3)(p, o, o(203, s))
+# define BOOST_PP_WHILE_203(p, o, s) BOOST_PP_IF(p(204, s), BOOST_PP_WHILE_204, s BOOST_PP_TUPLE_EAT_3)(p, o, o(204, s))
+# define BOOST_PP_WHILE_204(p, o, s) BOOST_PP_IF(p(205, s), BOOST_PP_WHILE_205, s BOOST_PP_TUPLE_EAT_3)(p, o, o(205, s))
+# define BOOST_PP_WHILE_205(p, o, s) BOOST_PP_IF(p(206, s), BOOST_PP_WHILE_206, s BOOST_PP_TUPLE_EAT_3)(p, o, o(206, s))
+# define BOOST_PP_WHILE_206(p, o, s) BOOST_PP_IF(p(207, s), BOOST_PP_WHILE_207, s BOOST_PP_TUPLE_EAT_3)(p, o, o(207, s))
+# define BOOST_PP_WHILE_207(p, o, s) BOOST_PP_IF(p(208, s), BOOST_PP_WHILE_208, s BOOST_PP_TUPLE_EAT_3)(p, o, o(208, s))
+# define BOOST_PP_WHILE_208(p, o, s) BOOST_PP_IF(p(209, s), BOOST_PP_WHILE_209, s BOOST_PP_TUPLE_EAT_3)(p, o, o(209, s))
+# define BOOST_PP_WHILE_209(p, o, s) BOOST_PP_IF(p(210, s), BOOST_PP_WHILE_210, s BOOST_PP_TUPLE_EAT_3)(p, o, o(210, s))
+# define BOOST_PP_WHILE_210(p, o, s) BOOST_PP_IF(p(211, s), BOOST_PP_WHILE_211, s BOOST_PP_TUPLE_EAT_3)(p, o, o(211, s))
+# define BOOST_PP_WHILE_211(p, o, s) BOOST_PP_IF(p(212, s), BOOST_PP_WHILE_212, s BOOST_PP_TUPLE_EAT_3)(p, o, o(212, s))
+# define BOOST_PP_WHILE_212(p, o, s) BOOST_PP_IF(p(213, s), BOOST_PP_WHILE_213, s BOOST_PP_TUPLE_EAT_3)(p, o, o(213, s))
+# define BOOST_PP_WHILE_213(p, o, s) BOOST_PP_IF(p(214, s), BOOST_PP_WHILE_214, s BOOST_PP_TUPLE_EAT_3)(p, o, o(214, s))
+# define BOOST_PP_WHILE_214(p, o, s) BOOST_PP_IF(p(215, s), BOOST_PP_WHILE_215, s BOOST_PP_TUPLE_EAT_3)(p, o, o(215, s))
+# define BOOST_PP_WHILE_215(p, o, s) BOOST_PP_IF(p(216, s), BOOST_PP_WHILE_216, s BOOST_PP_TUPLE_EAT_3)(p, o, o(216, s))
+# define BOOST_PP_WHILE_216(p, o, s) BOOST_PP_IF(p(217, s), BOOST_PP_WHILE_217, s BOOST_PP_TUPLE_EAT_3)(p, o, o(217, s))
+# define BOOST_PP_WHILE_217(p, o, s) BOOST_PP_IF(p(218, s), BOOST_PP_WHILE_218, s BOOST_PP_TUPLE_EAT_3)(p, o, o(218, s))
+# define BOOST_PP_WHILE_218(p, o, s) BOOST_PP_IF(p(219, s), BOOST_PP_WHILE_219, s BOOST_PP_TUPLE_EAT_3)(p, o, o(219, s))
+# define BOOST_PP_WHILE_219(p, o, s) BOOST_PP_IF(p(220, s), BOOST_PP_WHILE_220, s BOOST_PP_TUPLE_EAT_3)(p, o, o(220, s))
+# define BOOST_PP_WHILE_220(p, o, s) BOOST_PP_IF(p(221, s), BOOST_PP_WHILE_221, s BOOST_PP_TUPLE_EAT_3)(p, o, o(221, s))
+# define BOOST_PP_WHILE_221(p, o, s) BOOST_PP_IF(p(222, s), BOOST_PP_WHILE_222, s BOOST_PP_TUPLE_EAT_3)(p, o, o(222, s))
+# define BOOST_PP_WHILE_222(p, o, s) BOOST_PP_IF(p(223, s), BOOST_PP_WHILE_223, s BOOST_PP_TUPLE_EAT_3)(p, o, o(223, s))
+# define BOOST_PP_WHILE_223(p, o, s) BOOST_PP_IF(p(224, s), BOOST_PP_WHILE_224, s BOOST_PP_TUPLE_EAT_3)(p, o, o(224, s))
+# define BOOST_PP_WHILE_224(p, o, s) BOOST_PP_IF(p(225, s), BOOST_PP_WHILE_225, s BOOST_PP_TUPLE_EAT_3)(p, o, o(225, s))
+# define BOOST_PP_WHILE_225(p, o, s) BOOST_PP_IF(p(226, s), BOOST_PP_WHILE_226, s BOOST_PP_TUPLE_EAT_3)(p, o, o(226, s))
+# define BOOST_PP_WHILE_226(p, o, s) BOOST_PP_IF(p(227, s), BOOST_PP_WHILE_227, s BOOST_PP_TUPLE_EAT_3)(p, o, o(227, s))
+# define BOOST_PP_WHILE_227(p, o, s) BOOST_PP_IF(p(228, s), BOOST_PP_WHILE_228, s BOOST_PP_TUPLE_EAT_3)(p, o, o(228, s))
+# define BOOST_PP_WHILE_228(p, o, s) BOOST_PP_IF(p(229, s), BOOST_PP_WHILE_229, s BOOST_PP_TUPLE_EAT_3)(p, o, o(229, s))
+# define BOOST_PP_WHILE_229(p, o, s) BOOST_PP_IF(p(230, s), BOOST_PP_WHILE_230, s BOOST_PP_TUPLE_EAT_3)(p, o, o(230, s))
+# define BOOST_PP_WHILE_230(p, o, s) BOOST_PP_IF(p(231, s), BOOST_PP_WHILE_231, s BOOST_PP_TUPLE_EAT_3)(p, o, o(231, s))
+# define BOOST_PP_WHILE_231(p, o, s) BOOST_PP_IF(p(232, s), BOOST_PP_WHILE_232, s BOOST_PP_TUPLE_EAT_3)(p, o, o(232, s))
+# define BOOST_PP_WHILE_232(p, o, s) BOOST_PP_IF(p(233, s), BOOST_PP_WHILE_233, s BOOST_PP_TUPLE_EAT_3)(p, o, o(233, s))
+# define BOOST_PP_WHILE_233(p, o, s) BOOST_PP_IF(p(234, s), BOOST_PP_WHILE_234, s BOOST_PP_TUPLE_EAT_3)(p, o, o(234, s))
+# define BOOST_PP_WHILE_234(p, o, s) BOOST_PP_IF(p(235, s), BOOST_PP_WHILE_235, s BOOST_PP_TUPLE_EAT_3)(p, o, o(235, s))
+# define BOOST_PP_WHILE_235(p, o, s) BOOST_PP_IF(p(236, s), BOOST_PP_WHILE_236, s BOOST_PP_TUPLE_EAT_3)(p, o, o(236, s))
+# define BOOST_PP_WHILE_236(p, o, s) BOOST_PP_IF(p(237, s), BOOST_PP_WHILE_237, s BOOST_PP_TUPLE_EAT_3)(p, o, o(237, s))
+# define BOOST_PP_WHILE_237(p, o, s) BOOST_PP_IF(p(238, s), BOOST_PP_WHILE_238, s BOOST_PP_TUPLE_EAT_3)(p, o, o(238, s))
+# define BOOST_PP_WHILE_238(p, o, s) BOOST_PP_IF(p(239, s), BOOST_PP_WHILE_239, s BOOST_PP_TUPLE_EAT_3)(p, o, o(239, s))
+# define BOOST_PP_WHILE_239(p, o, s) BOOST_PP_IF(p(240, s), BOOST_PP_WHILE_240, s BOOST_PP_TUPLE_EAT_3)(p, o, o(240, s))
+# define BOOST_PP_WHILE_240(p, o, s) BOOST_PP_IF(p(241, s), BOOST_PP_WHILE_241, s BOOST_PP_TUPLE_EAT_3)(p, o, o(241, s))
+# define BOOST_PP_WHILE_241(p, o, s) BOOST_PP_IF(p(242, s), BOOST_PP_WHILE_242, s BOOST_PP_TUPLE_EAT_3)(p, o, o(242, s))
+# define BOOST_PP_WHILE_242(p, o, s) BOOST_PP_IF(p(243, s), BOOST_PP_WHILE_243, s BOOST_PP_TUPLE_EAT_3)(p, o, o(243, s))
+# define BOOST_PP_WHILE_243(p, o, s) BOOST_PP_IF(p(244, s), BOOST_PP_WHILE_244, s BOOST_PP_TUPLE_EAT_3)(p, o, o(244, s))
+# define BOOST_PP_WHILE_244(p, o, s) BOOST_PP_IF(p(245, s), BOOST_PP_WHILE_245, s BOOST_PP_TUPLE_EAT_3)(p, o, o(245, s))
+# define BOOST_PP_WHILE_245(p, o, s) BOOST_PP_IF(p(246, s), BOOST_PP_WHILE_246, s BOOST_PP_TUPLE_EAT_3)(p, o, o(246, s))
+# define BOOST_PP_WHILE_246(p, o, s) BOOST_PP_IF(p(247, s), BOOST_PP_WHILE_247, s BOOST_PP_TUPLE_EAT_3)(p, o, o(247, s))
+# define BOOST_PP_WHILE_247(p, o, s) BOOST_PP_IF(p(248, s), BOOST_PP_WHILE_248, s BOOST_PP_TUPLE_EAT_3)(p, o, o(248, s))
+# define BOOST_PP_WHILE_248(p, o, s) BOOST_PP_IF(p(249, s), BOOST_PP_WHILE_249, s BOOST_PP_TUPLE_EAT_3)(p, o, o(249, s))
+# define BOOST_PP_WHILE_249(p, o, s) BOOST_PP_IF(p(250, s), BOOST_PP_WHILE_250, s BOOST_PP_TUPLE_EAT_3)(p, o, o(250, s))
+# define BOOST_PP_WHILE_250(p, o, s) BOOST_PP_IF(p(251, s), BOOST_PP_WHILE_251, s BOOST_PP_TUPLE_EAT_3)(p, o, o(251, s))
+# define BOOST_PP_WHILE_251(p, o, s) BOOST_PP_IF(p(252, s), BOOST_PP_WHILE_252, s BOOST_PP_TUPLE_EAT_3)(p, o, o(252, s))
+# define BOOST_PP_WHILE_252(p, o, s) BOOST_PP_IF(p(253, s), BOOST_PP_WHILE_253, s BOOST_PP_TUPLE_EAT_3)(p, o, o(253, s))
+# define BOOST_PP_WHILE_253(p, o, s) BOOST_PP_IF(p(254, s), BOOST_PP_WHILE_254, s BOOST_PP_TUPLE_EAT_3)(p, o, o(254, s))
+# define BOOST_PP_WHILE_254(p, o, s) BOOST_PP_IF(p(255, s), BOOST_PP_WHILE_255, s BOOST_PP_TUPLE_EAT_3)(p, o, o(255, s))
+# define BOOST_PP_WHILE_255(p, o, s) BOOST_PP_IF(p(256, s), BOOST_PP_WHILE_256, s BOOST_PP_TUPLE_EAT_3)(p, o, o(256, s))
+# define BOOST_PP_WHILE_256(p, o, s) BOOST_PP_IF(p(257, s), BOOST_PP_WHILE_257, s BOOST_PP_TUPLE_EAT_3)(p, o, o(257, s))
+#
+# endif
diff --git a/boost/boost/preprocessor/control/detail/while.hpp b/boost/boost/preprocessor/control/detail/while.hpp
new file mode 100644
index 00000000000..7315e1de9d5
--- /dev/null
+++ b/boost/boost/preprocessor/control/detail/while.hpp
@@ -0,0 +1,536 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_CONTROL_DETAIL_WHILE_HPP
+# define BOOST_PREPROCESSOR_CONTROL_DETAIL_WHILE_HPP
+#
+# include <boost/preprocessor/control/iif.hpp>
+# include <boost/preprocessor/logical/bool.hpp>
+# include <boost/preprocessor/tuple/eat.hpp>
+#
+# define BOOST_PP_WHILE_1(p, o, s) BOOST_PP_WHILE_1_C(BOOST_PP_BOOL(p(2, s)), p, o, s)
+# define BOOST_PP_WHILE_2(p, o, s) BOOST_PP_WHILE_2_C(BOOST_PP_BOOL(p(3, s)), p, o, s)
+# define BOOST_PP_WHILE_3(p, o, s) BOOST_PP_WHILE_3_C(BOOST_PP_BOOL(p(4, s)), p, o, s)
+# define BOOST_PP_WHILE_4(p, o, s) BOOST_PP_WHILE_4_C(BOOST_PP_BOOL(p(5, s)), p, o, s)
+# define BOOST_PP_WHILE_5(p, o, s) BOOST_PP_WHILE_5_C(BOOST_PP_BOOL(p(6, s)), p, o, s)
+# define BOOST_PP_WHILE_6(p, o, s) BOOST_PP_WHILE_6_C(BOOST_PP_BOOL(p(7, s)), p, o, s)
+# define BOOST_PP_WHILE_7(p, o, s) BOOST_PP_WHILE_7_C(BOOST_PP_BOOL(p(8, s)), p, o, s)
+# define BOOST_PP_WHILE_8(p, o, s) BOOST_PP_WHILE_8_C(BOOST_PP_BOOL(p(9, s)), p, o, s)
+# define BOOST_PP_WHILE_9(p, o, s) BOOST_PP_WHILE_9_C(BOOST_PP_BOOL(p(10, s)), p, o, s)
+# define BOOST_PP_WHILE_10(p, o, s) BOOST_PP_WHILE_10_C(BOOST_PP_BOOL(p(11, s)), p, o, s)
+# define BOOST_PP_WHILE_11(p, o, s) BOOST_PP_WHILE_11_C(BOOST_PP_BOOL(p(12, s)), p, o, s)
+# define BOOST_PP_WHILE_12(p, o, s) BOOST_PP_WHILE_12_C(BOOST_PP_BOOL(p(13, s)), p, o, s)
+# define BOOST_PP_WHILE_13(p, o, s) BOOST_PP_WHILE_13_C(BOOST_PP_BOOL(p(14, s)), p, o, s)
+# define BOOST_PP_WHILE_14(p, o, s) BOOST_PP_WHILE_14_C(BOOST_PP_BOOL(p(15, s)), p, o, s)
+# define BOOST_PP_WHILE_15(p, o, s) BOOST_PP_WHILE_15_C(BOOST_PP_BOOL(p(16, s)), p, o, s)
+# define BOOST_PP_WHILE_16(p, o, s) BOOST_PP_WHILE_16_C(BOOST_PP_BOOL(p(17, s)), p, o, s)
+# define BOOST_PP_WHILE_17(p, o, s) BOOST_PP_WHILE_17_C(BOOST_PP_BOOL(p(18, s)), p, o, s)
+# define BOOST_PP_WHILE_18(p, o, s) BOOST_PP_WHILE_18_C(BOOST_PP_BOOL(p(19, s)), p, o, s)
+# define BOOST_PP_WHILE_19(p, o, s) BOOST_PP_WHILE_19_C(BOOST_PP_BOOL(p(20, s)), p, o, s)
+# define BOOST_PP_WHILE_20(p, o, s) BOOST_PP_WHILE_20_C(BOOST_PP_BOOL(p(21, s)), p, o, s)
+# define BOOST_PP_WHILE_21(p, o, s) BOOST_PP_WHILE_21_C(BOOST_PP_BOOL(p(22, s)), p, o, s)
+# define BOOST_PP_WHILE_22(p, o, s) BOOST_PP_WHILE_22_C(BOOST_PP_BOOL(p(23, s)), p, o, s)
+# define BOOST_PP_WHILE_23(p, o, s) BOOST_PP_WHILE_23_C(BOOST_PP_BOOL(p(24, s)), p, o, s)
+# define BOOST_PP_WHILE_24(p, o, s) BOOST_PP_WHILE_24_C(BOOST_PP_BOOL(p(25, s)), p, o, s)
+# define BOOST_PP_WHILE_25(p, o, s) BOOST_PP_WHILE_25_C(BOOST_PP_BOOL(p(26, s)), p, o, s)
+# define BOOST_PP_WHILE_26(p, o, s) BOOST_PP_WHILE_26_C(BOOST_PP_BOOL(p(27, s)), p, o, s)
+# define BOOST_PP_WHILE_27(p, o, s) BOOST_PP_WHILE_27_C(BOOST_PP_BOOL(p(28, s)), p, o, s)
+# define BOOST_PP_WHILE_28(p, o, s) BOOST_PP_WHILE_28_C(BOOST_PP_BOOL(p(29, s)), p, o, s)
+# define BOOST_PP_WHILE_29(p, o, s) BOOST_PP_WHILE_29_C(BOOST_PP_BOOL(p(30, s)), p, o, s)
+# define BOOST_PP_WHILE_30(p, o, s) BOOST_PP_WHILE_30_C(BOOST_PP_BOOL(p(31, s)), p, o, s)
+# define BOOST_PP_WHILE_31(p, o, s) BOOST_PP_WHILE_31_C(BOOST_PP_BOOL(p(32, s)), p, o, s)
+# define BOOST_PP_WHILE_32(p, o, s) BOOST_PP_WHILE_32_C(BOOST_PP_BOOL(p(33, s)), p, o, s)
+# define BOOST_PP_WHILE_33(p, o, s) BOOST_PP_WHILE_33_C(BOOST_PP_BOOL(p(34, s)), p, o, s)
+# define BOOST_PP_WHILE_34(p, o, s) BOOST_PP_WHILE_34_C(BOOST_PP_BOOL(p(35, s)), p, o, s)
+# define BOOST_PP_WHILE_35(p, o, s) BOOST_PP_WHILE_35_C(BOOST_PP_BOOL(p(36, s)), p, o, s)
+# define BOOST_PP_WHILE_36(p, o, s) BOOST_PP_WHILE_36_C(BOOST_PP_BOOL(p(37, s)), p, o, s)
+# define BOOST_PP_WHILE_37(p, o, s) BOOST_PP_WHILE_37_C(BOOST_PP_BOOL(p(38, s)), p, o, s)
+# define BOOST_PP_WHILE_38(p, o, s) BOOST_PP_WHILE_38_C(BOOST_PP_BOOL(p(39, s)), p, o, s)
+# define BOOST_PP_WHILE_39(p, o, s) BOOST_PP_WHILE_39_C(BOOST_PP_BOOL(p(40, s)), p, o, s)
+# define BOOST_PP_WHILE_40(p, o, s) BOOST_PP_WHILE_40_C(BOOST_PP_BOOL(p(41, s)), p, o, s)
+# define BOOST_PP_WHILE_41(p, o, s) BOOST_PP_WHILE_41_C(BOOST_PP_BOOL(p(42, s)), p, o, s)
+# define BOOST_PP_WHILE_42(p, o, s) BOOST_PP_WHILE_42_C(BOOST_PP_BOOL(p(43, s)), p, o, s)
+# define BOOST_PP_WHILE_43(p, o, s) BOOST_PP_WHILE_43_C(BOOST_PP_BOOL(p(44, s)), p, o, s)
+# define BOOST_PP_WHILE_44(p, o, s) BOOST_PP_WHILE_44_C(BOOST_PP_BOOL(p(45, s)), p, o, s)
+# define BOOST_PP_WHILE_45(p, o, s) BOOST_PP_WHILE_45_C(BOOST_PP_BOOL(p(46, s)), p, o, s)
+# define BOOST_PP_WHILE_46(p, o, s) BOOST_PP_WHILE_46_C(BOOST_PP_BOOL(p(47, s)), p, o, s)
+# define BOOST_PP_WHILE_47(p, o, s) BOOST_PP_WHILE_47_C(BOOST_PP_BOOL(p(48, s)), p, o, s)
+# define BOOST_PP_WHILE_48(p, o, s) BOOST_PP_WHILE_48_C(BOOST_PP_BOOL(p(49, s)), p, o, s)
+# define BOOST_PP_WHILE_49(p, o, s) BOOST_PP_WHILE_49_C(BOOST_PP_BOOL(p(50, s)), p, o, s)
+# define BOOST_PP_WHILE_50(p, o, s) BOOST_PP_WHILE_50_C(BOOST_PP_BOOL(p(51, s)), p, o, s)
+# define BOOST_PP_WHILE_51(p, o, s) BOOST_PP_WHILE_51_C(BOOST_PP_BOOL(p(52, s)), p, o, s)
+# define BOOST_PP_WHILE_52(p, o, s) BOOST_PP_WHILE_52_C(BOOST_PP_BOOL(p(53, s)), p, o, s)
+# define BOOST_PP_WHILE_53(p, o, s) BOOST_PP_WHILE_53_C(BOOST_PP_BOOL(p(54, s)), p, o, s)
+# define BOOST_PP_WHILE_54(p, o, s) BOOST_PP_WHILE_54_C(BOOST_PP_BOOL(p(55, s)), p, o, s)
+# define BOOST_PP_WHILE_55(p, o, s) BOOST_PP_WHILE_55_C(BOOST_PP_BOOL(p(56, s)), p, o, s)
+# define BOOST_PP_WHILE_56(p, o, s) BOOST_PP_WHILE_56_C(BOOST_PP_BOOL(p(57, s)), p, o, s)
+# define BOOST_PP_WHILE_57(p, o, s) BOOST_PP_WHILE_57_C(BOOST_PP_BOOL(p(58, s)), p, o, s)
+# define BOOST_PP_WHILE_58(p, o, s) BOOST_PP_WHILE_58_C(BOOST_PP_BOOL(p(59, s)), p, o, s)
+# define BOOST_PP_WHILE_59(p, o, s) BOOST_PP_WHILE_59_C(BOOST_PP_BOOL(p(60, s)), p, o, s)
+# define BOOST_PP_WHILE_60(p, o, s) BOOST_PP_WHILE_60_C(BOOST_PP_BOOL(p(61, s)), p, o, s)
+# define BOOST_PP_WHILE_61(p, o, s) BOOST_PP_WHILE_61_C(BOOST_PP_BOOL(p(62, s)), p, o, s)
+# define BOOST_PP_WHILE_62(p, o, s) BOOST_PP_WHILE_62_C(BOOST_PP_BOOL(p(63, s)), p, o, s)
+# define BOOST_PP_WHILE_63(p, o, s) BOOST_PP_WHILE_63_C(BOOST_PP_BOOL(p(64, s)), p, o, s)
+# define BOOST_PP_WHILE_64(p, o, s) BOOST_PP_WHILE_64_C(BOOST_PP_BOOL(p(65, s)), p, o, s)
+# define BOOST_PP_WHILE_65(p, o, s) BOOST_PP_WHILE_65_C(BOOST_PP_BOOL(p(66, s)), p, o, s)
+# define BOOST_PP_WHILE_66(p, o, s) BOOST_PP_WHILE_66_C(BOOST_PP_BOOL(p(67, s)), p, o, s)
+# define BOOST_PP_WHILE_67(p, o, s) BOOST_PP_WHILE_67_C(BOOST_PP_BOOL(p(68, s)), p, o, s)
+# define BOOST_PP_WHILE_68(p, o, s) BOOST_PP_WHILE_68_C(BOOST_PP_BOOL(p(69, s)), p, o, s)
+# define BOOST_PP_WHILE_69(p, o, s) BOOST_PP_WHILE_69_C(BOOST_PP_BOOL(p(70, s)), p, o, s)
+# define BOOST_PP_WHILE_70(p, o, s) BOOST_PP_WHILE_70_C(BOOST_PP_BOOL(p(71, s)), p, o, s)
+# define BOOST_PP_WHILE_71(p, o, s) BOOST_PP_WHILE_71_C(BOOST_PP_BOOL(p(72, s)), p, o, s)
+# define BOOST_PP_WHILE_72(p, o, s) BOOST_PP_WHILE_72_C(BOOST_PP_BOOL(p(73, s)), p, o, s)
+# define BOOST_PP_WHILE_73(p, o, s) BOOST_PP_WHILE_73_C(BOOST_PP_BOOL(p(74, s)), p, o, s)
+# define BOOST_PP_WHILE_74(p, o, s) BOOST_PP_WHILE_74_C(BOOST_PP_BOOL(p(75, s)), p, o, s)
+# define BOOST_PP_WHILE_75(p, o, s) BOOST_PP_WHILE_75_C(BOOST_PP_BOOL(p(76, s)), p, o, s)
+# define BOOST_PP_WHILE_76(p, o, s) BOOST_PP_WHILE_76_C(BOOST_PP_BOOL(p(77, s)), p, o, s)
+# define BOOST_PP_WHILE_77(p, o, s) BOOST_PP_WHILE_77_C(BOOST_PP_BOOL(p(78, s)), p, o, s)
+# define BOOST_PP_WHILE_78(p, o, s) BOOST_PP_WHILE_78_C(BOOST_PP_BOOL(p(79, s)), p, o, s)
+# define BOOST_PP_WHILE_79(p, o, s) BOOST_PP_WHILE_79_C(BOOST_PP_BOOL(p(80, s)), p, o, s)
+# define BOOST_PP_WHILE_80(p, o, s) BOOST_PP_WHILE_80_C(BOOST_PP_BOOL(p(81, s)), p, o, s)
+# define BOOST_PP_WHILE_81(p, o, s) BOOST_PP_WHILE_81_C(BOOST_PP_BOOL(p(82, s)), p, o, s)
+# define BOOST_PP_WHILE_82(p, o, s) BOOST_PP_WHILE_82_C(BOOST_PP_BOOL(p(83, s)), p, o, s)
+# define BOOST_PP_WHILE_83(p, o, s) BOOST_PP_WHILE_83_C(BOOST_PP_BOOL(p(84, s)), p, o, s)
+# define BOOST_PP_WHILE_84(p, o, s) BOOST_PP_WHILE_84_C(BOOST_PP_BOOL(p(85, s)), p, o, s)
+# define BOOST_PP_WHILE_85(p, o, s) BOOST_PP_WHILE_85_C(BOOST_PP_BOOL(p(86, s)), p, o, s)
+# define BOOST_PP_WHILE_86(p, o, s) BOOST_PP_WHILE_86_C(BOOST_PP_BOOL(p(87, s)), p, o, s)
+# define BOOST_PP_WHILE_87(p, o, s) BOOST_PP_WHILE_87_C(BOOST_PP_BOOL(p(88, s)), p, o, s)
+# define BOOST_PP_WHILE_88(p, o, s) BOOST_PP_WHILE_88_C(BOOST_PP_BOOL(p(89, s)), p, o, s)
+# define BOOST_PP_WHILE_89(p, o, s) BOOST_PP_WHILE_89_C(BOOST_PP_BOOL(p(90, s)), p, o, s)
+# define BOOST_PP_WHILE_90(p, o, s) BOOST_PP_WHILE_90_C(BOOST_PP_BOOL(p(91, s)), p, o, s)
+# define BOOST_PP_WHILE_91(p, o, s) BOOST_PP_WHILE_91_C(BOOST_PP_BOOL(p(92, s)), p, o, s)
+# define BOOST_PP_WHILE_92(p, o, s) BOOST_PP_WHILE_92_C(BOOST_PP_BOOL(p(93, s)), p, o, s)
+# define BOOST_PP_WHILE_93(p, o, s) BOOST_PP_WHILE_93_C(BOOST_PP_BOOL(p(94, s)), p, o, s)
+# define BOOST_PP_WHILE_94(p, o, s) BOOST_PP_WHILE_94_C(BOOST_PP_BOOL(p(95, s)), p, o, s)
+# define BOOST_PP_WHILE_95(p, o, s) BOOST_PP_WHILE_95_C(BOOST_PP_BOOL(p(96, s)), p, o, s)
+# define BOOST_PP_WHILE_96(p, o, s) BOOST_PP_WHILE_96_C(BOOST_PP_BOOL(p(97, s)), p, o, s)
+# define BOOST_PP_WHILE_97(p, o, s) BOOST_PP_WHILE_97_C(BOOST_PP_BOOL(p(98, s)), p, o, s)
+# define BOOST_PP_WHILE_98(p, o, s) BOOST_PP_WHILE_98_C(BOOST_PP_BOOL(p(99, s)), p, o, s)
+# define BOOST_PP_WHILE_99(p, o, s) BOOST_PP_WHILE_99_C(BOOST_PP_BOOL(p(100, s)), p, o, s)
+# define BOOST_PP_WHILE_100(p, o, s) BOOST_PP_WHILE_100_C(BOOST_PP_BOOL(p(101, s)), p, o, s)
+# define BOOST_PP_WHILE_101(p, o, s) BOOST_PP_WHILE_101_C(BOOST_PP_BOOL(p(102, s)), p, o, s)
+# define BOOST_PP_WHILE_102(p, o, s) BOOST_PP_WHILE_102_C(BOOST_PP_BOOL(p(103, s)), p, o, s)
+# define BOOST_PP_WHILE_103(p, o, s) BOOST_PP_WHILE_103_C(BOOST_PP_BOOL(p(104, s)), p, o, s)
+# define BOOST_PP_WHILE_104(p, o, s) BOOST_PP_WHILE_104_C(BOOST_PP_BOOL(p(105, s)), p, o, s)
+# define BOOST_PP_WHILE_105(p, o, s) BOOST_PP_WHILE_105_C(BOOST_PP_BOOL(p(106, s)), p, o, s)
+# define BOOST_PP_WHILE_106(p, o, s) BOOST_PP_WHILE_106_C(BOOST_PP_BOOL(p(107, s)), p, o, s)
+# define BOOST_PP_WHILE_107(p, o, s) BOOST_PP_WHILE_107_C(BOOST_PP_BOOL(p(108, s)), p, o, s)
+# define BOOST_PP_WHILE_108(p, o, s) BOOST_PP_WHILE_108_C(BOOST_PP_BOOL(p(109, s)), p, o, s)
+# define BOOST_PP_WHILE_109(p, o, s) BOOST_PP_WHILE_109_C(BOOST_PP_BOOL(p(110, s)), p, o, s)
+# define BOOST_PP_WHILE_110(p, o, s) BOOST_PP_WHILE_110_C(BOOST_PP_BOOL(p(111, s)), p, o, s)
+# define BOOST_PP_WHILE_111(p, o, s) BOOST_PP_WHILE_111_C(BOOST_PP_BOOL(p(112, s)), p, o, s)
+# define BOOST_PP_WHILE_112(p, o, s) BOOST_PP_WHILE_112_C(BOOST_PP_BOOL(p(113, s)), p, o, s)
+# define BOOST_PP_WHILE_113(p, o, s) BOOST_PP_WHILE_113_C(BOOST_PP_BOOL(p(114, s)), p, o, s)
+# define BOOST_PP_WHILE_114(p, o, s) BOOST_PP_WHILE_114_C(BOOST_PP_BOOL(p(115, s)), p, o, s)
+# define BOOST_PP_WHILE_115(p, o, s) BOOST_PP_WHILE_115_C(BOOST_PP_BOOL(p(116, s)), p, o, s)
+# define BOOST_PP_WHILE_116(p, o, s) BOOST_PP_WHILE_116_C(BOOST_PP_BOOL(p(117, s)), p, o, s)
+# define BOOST_PP_WHILE_117(p, o, s) BOOST_PP_WHILE_117_C(BOOST_PP_BOOL(p(118, s)), p, o, s)
+# define BOOST_PP_WHILE_118(p, o, s) BOOST_PP_WHILE_118_C(BOOST_PP_BOOL(p(119, s)), p, o, s)
+# define BOOST_PP_WHILE_119(p, o, s) BOOST_PP_WHILE_119_C(BOOST_PP_BOOL(p(120, s)), p, o, s)
+# define BOOST_PP_WHILE_120(p, o, s) BOOST_PP_WHILE_120_C(BOOST_PP_BOOL(p(121, s)), p, o, s)
+# define BOOST_PP_WHILE_121(p, o, s) BOOST_PP_WHILE_121_C(BOOST_PP_BOOL(p(122, s)), p, o, s)
+# define BOOST_PP_WHILE_122(p, o, s) BOOST_PP_WHILE_122_C(BOOST_PP_BOOL(p(123, s)), p, o, s)
+# define BOOST_PP_WHILE_123(p, o, s) BOOST_PP_WHILE_123_C(BOOST_PP_BOOL(p(124, s)), p, o, s)
+# define BOOST_PP_WHILE_124(p, o, s) BOOST_PP_WHILE_124_C(BOOST_PP_BOOL(p(125, s)), p, o, s)
+# define BOOST_PP_WHILE_125(p, o, s) BOOST_PP_WHILE_125_C(BOOST_PP_BOOL(p(126, s)), p, o, s)
+# define BOOST_PP_WHILE_126(p, o, s) BOOST_PP_WHILE_126_C(BOOST_PP_BOOL(p(127, s)), p, o, s)
+# define BOOST_PP_WHILE_127(p, o, s) BOOST_PP_WHILE_127_C(BOOST_PP_BOOL(p(128, s)), p, o, s)
+# define BOOST_PP_WHILE_128(p, o, s) BOOST_PP_WHILE_128_C(BOOST_PP_BOOL(p(129, s)), p, o, s)
+# define BOOST_PP_WHILE_129(p, o, s) BOOST_PP_WHILE_129_C(BOOST_PP_BOOL(p(130, s)), p, o, s)
+# define BOOST_PP_WHILE_130(p, o, s) BOOST_PP_WHILE_130_C(BOOST_PP_BOOL(p(131, s)), p, o, s)
+# define BOOST_PP_WHILE_131(p, o, s) BOOST_PP_WHILE_131_C(BOOST_PP_BOOL(p(132, s)), p, o, s)
+# define BOOST_PP_WHILE_132(p, o, s) BOOST_PP_WHILE_132_C(BOOST_PP_BOOL(p(133, s)), p, o, s)
+# define BOOST_PP_WHILE_133(p, o, s) BOOST_PP_WHILE_133_C(BOOST_PP_BOOL(p(134, s)), p, o, s)
+# define BOOST_PP_WHILE_134(p, o, s) BOOST_PP_WHILE_134_C(BOOST_PP_BOOL(p(135, s)), p, o, s)
+# define BOOST_PP_WHILE_135(p, o, s) BOOST_PP_WHILE_135_C(BOOST_PP_BOOL(p(136, s)), p, o, s)
+# define BOOST_PP_WHILE_136(p, o, s) BOOST_PP_WHILE_136_C(BOOST_PP_BOOL(p(137, s)), p, o, s)
+# define BOOST_PP_WHILE_137(p, o, s) BOOST_PP_WHILE_137_C(BOOST_PP_BOOL(p(138, s)), p, o, s)
+# define BOOST_PP_WHILE_138(p, o, s) BOOST_PP_WHILE_138_C(BOOST_PP_BOOL(p(139, s)), p, o, s)
+# define BOOST_PP_WHILE_139(p, o, s) BOOST_PP_WHILE_139_C(BOOST_PP_BOOL(p(140, s)), p, o, s)
+# define BOOST_PP_WHILE_140(p, o, s) BOOST_PP_WHILE_140_C(BOOST_PP_BOOL(p(141, s)), p, o, s)
+# define BOOST_PP_WHILE_141(p, o, s) BOOST_PP_WHILE_141_C(BOOST_PP_BOOL(p(142, s)), p, o, s)
+# define BOOST_PP_WHILE_142(p, o, s) BOOST_PP_WHILE_142_C(BOOST_PP_BOOL(p(143, s)), p, o, s)
+# define BOOST_PP_WHILE_143(p, o, s) BOOST_PP_WHILE_143_C(BOOST_PP_BOOL(p(144, s)), p, o, s)
+# define BOOST_PP_WHILE_144(p, o, s) BOOST_PP_WHILE_144_C(BOOST_PP_BOOL(p(145, s)), p, o, s)
+# define BOOST_PP_WHILE_145(p, o, s) BOOST_PP_WHILE_145_C(BOOST_PP_BOOL(p(146, s)), p, o, s)
+# define BOOST_PP_WHILE_146(p, o, s) BOOST_PP_WHILE_146_C(BOOST_PP_BOOL(p(147, s)), p, o, s)
+# define BOOST_PP_WHILE_147(p, o, s) BOOST_PP_WHILE_147_C(BOOST_PP_BOOL(p(148, s)), p, o, s)
+# define BOOST_PP_WHILE_148(p, o, s) BOOST_PP_WHILE_148_C(BOOST_PP_BOOL(p(149, s)), p, o, s)
+# define BOOST_PP_WHILE_149(p, o, s) BOOST_PP_WHILE_149_C(BOOST_PP_BOOL(p(150, s)), p, o, s)
+# define BOOST_PP_WHILE_150(p, o, s) BOOST_PP_WHILE_150_C(BOOST_PP_BOOL(p(151, s)), p, o, s)
+# define BOOST_PP_WHILE_151(p, o, s) BOOST_PP_WHILE_151_C(BOOST_PP_BOOL(p(152, s)), p, o, s)
+# define BOOST_PP_WHILE_152(p, o, s) BOOST_PP_WHILE_152_C(BOOST_PP_BOOL(p(153, s)), p, o, s)
+# define BOOST_PP_WHILE_153(p, o, s) BOOST_PP_WHILE_153_C(BOOST_PP_BOOL(p(154, s)), p, o, s)
+# define BOOST_PP_WHILE_154(p, o, s) BOOST_PP_WHILE_154_C(BOOST_PP_BOOL(p(155, s)), p, o, s)
+# define BOOST_PP_WHILE_155(p, o, s) BOOST_PP_WHILE_155_C(BOOST_PP_BOOL(p(156, s)), p, o, s)
+# define BOOST_PP_WHILE_156(p, o, s) BOOST_PP_WHILE_156_C(BOOST_PP_BOOL(p(157, s)), p, o, s)
+# define BOOST_PP_WHILE_157(p, o, s) BOOST_PP_WHILE_157_C(BOOST_PP_BOOL(p(158, s)), p, o, s)
+# define BOOST_PP_WHILE_158(p, o, s) BOOST_PP_WHILE_158_C(BOOST_PP_BOOL(p(159, s)), p, o, s)
+# define BOOST_PP_WHILE_159(p, o, s) BOOST_PP_WHILE_159_C(BOOST_PP_BOOL(p(160, s)), p, o, s)
+# define BOOST_PP_WHILE_160(p, o, s) BOOST_PP_WHILE_160_C(BOOST_PP_BOOL(p(161, s)), p, o, s)
+# define BOOST_PP_WHILE_161(p, o, s) BOOST_PP_WHILE_161_C(BOOST_PP_BOOL(p(162, s)), p, o, s)
+# define BOOST_PP_WHILE_162(p, o, s) BOOST_PP_WHILE_162_C(BOOST_PP_BOOL(p(163, s)), p, o, s)
+# define BOOST_PP_WHILE_163(p, o, s) BOOST_PP_WHILE_163_C(BOOST_PP_BOOL(p(164, s)), p, o, s)
+# define BOOST_PP_WHILE_164(p, o, s) BOOST_PP_WHILE_164_C(BOOST_PP_BOOL(p(165, s)), p, o, s)
+# define BOOST_PP_WHILE_165(p, o, s) BOOST_PP_WHILE_165_C(BOOST_PP_BOOL(p(166, s)), p, o, s)
+# define BOOST_PP_WHILE_166(p, o, s) BOOST_PP_WHILE_166_C(BOOST_PP_BOOL(p(167, s)), p, o, s)
+# define BOOST_PP_WHILE_167(p, o, s) BOOST_PP_WHILE_167_C(BOOST_PP_BOOL(p(168, s)), p, o, s)
+# define BOOST_PP_WHILE_168(p, o, s) BOOST_PP_WHILE_168_C(BOOST_PP_BOOL(p(169, s)), p, o, s)
+# define BOOST_PP_WHILE_169(p, o, s) BOOST_PP_WHILE_169_C(BOOST_PP_BOOL(p(170, s)), p, o, s)
+# define BOOST_PP_WHILE_170(p, o, s) BOOST_PP_WHILE_170_C(BOOST_PP_BOOL(p(171, s)), p, o, s)
+# define BOOST_PP_WHILE_171(p, o, s) BOOST_PP_WHILE_171_C(BOOST_PP_BOOL(p(172, s)), p, o, s)
+# define BOOST_PP_WHILE_172(p, o, s) BOOST_PP_WHILE_172_C(BOOST_PP_BOOL(p(173, s)), p, o, s)
+# define BOOST_PP_WHILE_173(p, o, s) BOOST_PP_WHILE_173_C(BOOST_PP_BOOL(p(174, s)), p, o, s)
+# define BOOST_PP_WHILE_174(p, o, s) BOOST_PP_WHILE_174_C(BOOST_PP_BOOL(p(175, s)), p, o, s)
+# define BOOST_PP_WHILE_175(p, o, s) BOOST_PP_WHILE_175_C(BOOST_PP_BOOL(p(176, s)), p, o, s)
+# define BOOST_PP_WHILE_176(p, o, s) BOOST_PP_WHILE_176_C(BOOST_PP_BOOL(p(177, s)), p, o, s)
+# define BOOST_PP_WHILE_177(p, o, s) BOOST_PP_WHILE_177_C(BOOST_PP_BOOL(p(178, s)), p, o, s)
+# define BOOST_PP_WHILE_178(p, o, s) BOOST_PP_WHILE_178_C(BOOST_PP_BOOL(p(179, s)), p, o, s)
+# define BOOST_PP_WHILE_179(p, o, s) BOOST_PP_WHILE_179_C(BOOST_PP_BOOL(p(180, s)), p, o, s)
+# define BOOST_PP_WHILE_180(p, o, s) BOOST_PP_WHILE_180_C(BOOST_PP_BOOL(p(181, s)), p, o, s)
+# define BOOST_PP_WHILE_181(p, o, s) BOOST_PP_WHILE_181_C(BOOST_PP_BOOL(p(182, s)), p, o, s)
+# define BOOST_PP_WHILE_182(p, o, s) BOOST_PP_WHILE_182_C(BOOST_PP_BOOL(p(183, s)), p, o, s)
+# define BOOST_PP_WHILE_183(p, o, s) BOOST_PP_WHILE_183_C(BOOST_PP_BOOL(p(184, s)), p, o, s)
+# define BOOST_PP_WHILE_184(p, o, s) BOOST_PP_WHILE_184_C(BOOST_PP_BOOL(p(185, s)), p, o, s)
+# define BOOST_PP_WHILE_185(p, o, s) BOOST_PP_WHILE_185_C(BOOST_PP_BOOL(p(186, s)), p, o, s)
+# define BOOST_PP_WHILE_186(p, o, s) BOOST_PP_WHILE_186_C(BOOST_PP_BOOL(p(187, s)), p, o, s)
+# define BOOST_PP_WHILE_187(p, o, s) BOOST_PP_WHILE_187_C(BOOST_PP_BOOL(p(188, s)), p, o, s)
+# define BOOST_PP_WHILE_188(p, o, s) BOOST_PP_WHILE_188_C(BOOST_PP_BOOL(p(189, s)), p, o, s)
+# define BOOST_PP_WHILE_189(p, o, s) BOOST_PP_WHILE_189_C(BOOST_PP_BOOL(p(190, s)), p, o, s)
+# define BOOST_PP_WHILE_190(p, o, s) BOOST_PP_WHILE_190_C(BOOST_PP_BOOL(p(191, s)), p, o, s)
+# define BOOST_PP_WHILE_191(p, o, s) BOOST_PP_WHILE_191_C(BOOST_PP_BOOL(p(192, s)), p, o, s)
+# define BOOST_PP_WHILE_192(p, o, s) BOOST_PP_WHILE_192_C(BOOST_PP_BOOL(p(193, s)), p, o, s)
+# define BOOST_PP_WHILE_193(p, o, s) BOOST_PP_WHILE_193_C(BOOST_PP_BOOL(p(194, s)), p, o, s)
+# define BOOST_PP_WHILE_194(p, o, s) BOOST_PP_WHILE_194_C(BOOST_PP_BOOL(p(195, s)), p, o, s)
+# define BOOST_PP_WHILE_195(p, o, s) BOOST_PP_WHILE_195_C(BOOST_PP_BOOL(p(196, s)), p, o, s)
+# define BOOST_PP_WHILE_196(p, o, s) BOOST_PP_WHILE_196_C(BOOST_PP_BOOL(p(197, s)), p, o, s)
+# define BOOST_PP_WHILE_197(p, o, s) BOOST_PP_WHILE_197_C(BOOST_PP_BOOL(p(198, s)), p, o, s)
+# define BOOST_PP_WHILE_198(p, o, s) BOOST_PP_WHILE_198_C(BOOST_PP_BOOL(p(199, s)), p, o, s)
+# define BOOST_PP_WHILE_199(p, o, s) BOOST_PP_WHILE_199_C(BOOST_PP_BOOL(p(200, s)), p, o, s)
+# define BOOST_PP_WHILE_200(p, o, s) BOOST_PP_WHILE_200_C(BOOST_PP_BOOL(p(201, s)), p, o, s)
+# define BOOST_PP_WHILE_201(p, o, s) BOOST_PP_WHILE_201_C(BOOST_PP_BOOL(p(202, s)), p, o, s)
+# define BOOST_PP_WHILE_202(p, o, s) BOOST_PP_WHILE_202_C(BOOST_PP_BOOL(p(203, s)), p, o, s)
+# define BOOST_PP_WHILE_203(p, o, s) BOOST_PP_WHILE_203_C(BOOST_PP_BOOL(p(204, s)), p, o, s)
+# define BOOST_PP_WHILE_204(p, o, s) BOOST_PP_WHILE_204_C(BOOST_PP_BOOL(p(205, s)), p, o, s)
+# define BOOST_PP_WHILE_205(p, o, s) BOOST_PP_WHILE_205_C(BOOST_PP_BOOL(p(206, s)), p, o, s)
+# define BOOST_PP_WHILE_206(p, o, s) BOOST_PP_WHILE_206_C(BOOST_PP_BOOL(p(207, s)), p, o, s)
+# define BOOST_PP_WHILE_207(p, o, s) BOOST_PP_WHILE_207_C(BOOST_PP_BOOL(p(208, s)), p, o, s)
+# define BOOST_PP_WHILE_208(p, o, s) BOOST_PP_WHILE_208_C(BOOST_PP_BOOL(p(209, s)), p, o, s)
+# define BOOST_PP_WHILE_209(p, o, s) BOOST_PP_WHILE_209_C(BOOST_PP_BOOL(p(210, s)), p, o, s)
+# define BOOST_PP_WHILE_210(p, o, s) BOOST_PP_WHILE_210_C(BOOST_PP_BOOL(p(211, s)), p, o, s)
+# define BOOST_PP_WHILE_211(p, o, s) BOOST_PP_WHILE_211_C(BOOST_PP_BOOL(p(212, s)), p, o, s)
+# define BOOST_PP_WHILE_212(p, o, s) BOOST_PP_WHILE_212_C(BOOST_PP_BOOL(p(213, s)), p, o, s)
+# define BOOST_PP_WHILE_213(p, o, s) BOOST_PP_WHILE_213_C(BOOST_PP_BOOL(p(214, s)), p, o, s)
+# define BOOST_PP_WHILE_214(p, o, s) BOOST_PP_WHILE_214_C(BOOST_PP_BOOL(p(215, s)), p, o, s)
+# define BOOST_PP_WHILE_215(p, o, s) BOOST_PP_WHILE_215_C(BOOST_PP_BOOL(p(216, s)), p, o, s)
+# define BOOST_PP_WHILE_216(p, o, s) BOOST_PP_WHILE_216_C(BOOST_PP_BOOL(p(217, s)), p, o, s)
+# define BOOST_PP_WHILE_217(p, o, s) BOOST_PP_WHILE_217_C(BOOST_PP_BOOL(p(218, s)), p, o, s)
+# define BOOST_PP_WHILE_218(p, o, s) BOOST_PP_WHILE_218_C(BOOST_PP_BOOL(p(219, s)), p, o, s)
+# define BOOST_PP_WHILE_219(p, o, s) BOOST_PP_WHILE_219_C(BOOST_PP_BOOL(p(220, s)), p, o, s)
+# define BOOST_PP_WHILE_220(p, o, s) BOOST_PP_WHILE_220_C(BOOST_PP_BOOL(p(221, s)), p, o, s)
+# define BOOST_PP_WHILE_221(p, o, s) BOOST_PP_WHILE_221_C(BOOST_PP_BOOL(p(222, s)), p, o, s)
+# define BOOST_PP_WHILE_222(p, o, s) BOOST_PP_WHILE_222_C(BOOST_PP_BOOL(p(223, s)), p, o, s)
+# define BOOST_PP_WHILE_223(p, o, s) BOOST_PP_WHILE_223_C(BOOST_PP_BOOL(p(224, s)), p, o, s)
+# define BOOST_PP_WHILE_224(p, o, s) BOOST_PP_WHILE_224_C(BOOST_PP_BOOL(p(225, s)), p, o, s)
+# define BOOST_PP_WHILE_225(p, o, s) BOOST_PP_WHILE_225_C(BOOST_PP_BOOL(p(226, s)), p, o, s)
+# define BOOST_PP_WHILE_226(p, o, s) BOOST_PP_WHILE_226_C(BOOST_PP_BOOL(p(227, s)), p, o, s)
+# define BOOST_PP_WHILE_227(p, o, s) BOOST_PP_WHILE_227_C(BOOST_PP_BOOL(p(228, s)), p, o, s)
+# define BOOST_PP_WHILE_228(p, o, s) BOOST_PP_WHILE_228_C(BOOST_PP_BOOL(p(229, s)), p, o, s)
+# define BOOST_PP_WHILE_229(p, o, s) BOOST_PP_WHILE_229_C(BOOST_PP_BOOL(p(230, s)), p, o, s)
+# define BOOST_PP_WHILE_230(p, o, s) BOOST_PP_WHILE_230_C(BOOST_PP_BOOL(p(231, s)), p, o, s)
+# define BOOST_PP_WHILE_231(p, o, s) BOOST_PP_WHILE_231_C(BOOST_PP_BOOL(p(232, s)), p, o, s)
+# define BOOST_PP_WHILE_232(p, o, s) BOOST_PP_WHILE_232_C(BOOST_PP_BOOL(p(233, s)), p, o, s)
+# define BOOST_PP_WHILE_233(p, o, s) BOOST_PP_WHILE_233_C(BOOST_PP_BOOL(p(234, s)), p, o, s)
+# define BOOST_PP_WHILE_234(p, o, s) BOOST_PP_WHILE_234_C(BOOST_PP_BOOL(p(235, s)), p, o, s)
+# define BOOST_PP_WHILE_235(p, o, s) BOOST_PP_WHILE_235_C(BOOST_PP_BOOL(p(236, s)), p, o, s)
+# define BOOST_PP_WHILE_236(p, o, s) BOOST_PP_WHILE_236_C(BOOST_PP_BOOL(p(237, s)), p, o, s)
+# define BOOST_PP_WHILE_237(p, o, s) BOOST_PP_WHILE_237_C(BOOST_PP_BOOL(p(238, s)), p, o, s)
+# define BOOST_PP_WHILE_238(p, o, s) BOOST_PP_WHILE_238_C(BOOST_PP_BOOL(p(239, s)), p, o, s)
+# define BOOST_PP_WHILE_239(p, o, s) BOOST_PP_WHILE_239_C(BOOST_PP_BOOL(p(240, s)), p, o, s)
+# define BOOST_PP_WHILE_240(p, o, s) BOOST_PP_WHILE_240_C(BOOST_PP_BOOL(p(241, s)), p, o, s)
+# define BOOST_PP_WHILE_241(p, o, s) BOOST_PP_WHILE_241_C(BOOST_PP_BOOL(p(242, s)), p, o, s)
+# define BOOST_PP_WHILE_242(p, o, s) BOOST_PP_WHILE_242_C(BOOST_PP_BOOL(p(243, s)), p, o, s)
+# define BOOST_PP_WHILE_243(p, o, s) BOOST_PP_WHILE_243_C(BOOST_PP_BOOL(p(244, s)), p, o, s)
+# define BOOST_PP_WHILE_244(p, o, s) BOOST_PP_WHILE_244_C(BOOST_PP_BOOL(p(245, s)), p, o, s)
+# define BOOST_PP_WHILE_245(p, o, s) BOOST_PP_WHILE_245_C(BOOST_PP_BOOL(p(246, s)), p, o, s)
+# define BOOST_PP_WHILE_246(p, o, s) BOOST_PP_WHILE_246_C(BOOST_PP_BOOL(p(247, s)), p, o, s)
+# define BOOST_PP_WHILE_247(p, o, s) BOOST_PP_WHILE_247_C(BOOST_PP_BOOL(p(248, s)), p, o, s)
+# define BOOST_PP_WHILE_248(p, o, s) BOOST_PP_WHILE_248_C(BOOST_PP_BOOL(p(249, s)), p, o, s)
+# define BOOST_PP_WHILE_249(p, o, s) BOOST_PP_WHILE_249_C(BOOST_PP_BOOL(p(250, s)), p, o, s)
+# define BOOST_PP_WHILE_250(p, o, s) BOOST_PP_WHILE_250_C(BOOST_PP_BOOL(p(251, s)), p, o, s)
+# define BOOST_PP_WHILE_251(p, o, s) BOOST_PP_WHILE_251_C(BOOST_PP_BOOL(p(252, s)), p, o, s)
+# define BOOST_PP_WHILE_252(p, o, s) BOOST_PP_WHILE_252_C(BOOST_PP_BOOL(p(253, s)), p, o, s)
+# define BOOST_PP_WHILE_253(p, o, s) BOOST_PP_WHILE_253_C(BOOST_PP_BOOL(p(254, s)), p, o, s)
+# define BOOST_PP_WHILE_254(p, o, s) BOOST_PP_WHILE_254_C(BOOST_PP_BOOL(p(255, s)), p, o, s)
+# define BOOST_PP_WHILE_255(p, o, s) BOOST_PP_WHILE_255_C(BOOST_PP_BOOL(p(256, s)), p, o, s)
+# define BOOST_PP_WHILE_256(p, o, s) BOOST_PP_WHILE_256_C(BOOST_PP_BOOL(p(257, s)), p, o, s)
+#
+# define BOOST_PP_WHILE_1_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_2, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(2, s))
+# define BOOST_PP_WHILE_2_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_3, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(3, s))
+# define BOOST_PP_WHILE_3_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_4, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(4, s))
+# define BOOST_PP_WHILE_4_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_5, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(5, s))
+# define BOOST_PP_WHILE_5_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_6, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(6, s))
+# define BOOST_PP_WHILE_6_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_7, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(7, s))
+# define BOOST_PP_WHILE_7_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_8, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(8, s))
+# define BOOST_PP_WHILE_8_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_9, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(9, s))
+# define BOOST_PP_WHILE_9_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_10, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(10, s))
+# define BOOST_PP_WHILE_10_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_11, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(11, s))
+# define BOOST_PP_WHILE_11_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_12, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(12, s))
+# define BOOST_PP_WHILE_12_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_13, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(13, s))
+# define BOOST_PP_WHILE_13_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_14, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(14, s))
+# define BOOST_PP_WHILE_14_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_15, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(15, s))
+# define BOOST_PP_WHILE_15_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_16, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(16, s))
+# define BOOST_PP_WHILE_16_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_17, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(17, s))
+# define BOOST_PP_WHILE_17_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_18, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(18, s))
+# define BOOST_PP_WHILE_18_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_19, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(19, s))
+# define BOOST_PP_WHILE_19_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_20, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(20, s))
+# define BOOST_PP_WHILE_20_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_21, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(21, s))
+# define BOOST_PP_WHILE_21_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_22, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(22, s))
+# define BOOST_PP_WHILE_22_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_23, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(23, s))
+# define BOOST_PP_WHILE_23_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_24, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(24, s))
+# define BOOST_PP_WHILE_24_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_25, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(25, s))
+# define BOOST_PP_WHILE_25_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_26, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(26, s))
+# define BOOST_PP_WHILE_26_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_27, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(27, s))
+# define BOOST_PP_WHILE_27_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_28, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(28, s))
+# define BOOST_PP_WHILE_28_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_29, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(29, s))
+# define BOOST_PP_WHILE_29_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_30, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(30, s))
+# define BOOST_PP_WHILE_30_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_31, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(31, s))
+# define BOOST_PP_WHILE_31_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_32, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(32, s))
+# define BOOST_PP_WHILE_32_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_33, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(33, s))
+# define BOOST_PP_WHILE_33_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_34, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(34, s))
+# define BOOST_PP_WHILE_34_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_35, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(35, s))
+# define BOOST_PP_WHILE_35_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_36, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(36, s))
+# define BOOST_PP_WHILE_36_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_37, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(37, s))
+# define BOOST_PP_WHILE_37_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_38, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(38, s))
+# define BOOST_PP_WHILE_38_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_39, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(39, s))
+# define BOOST_PP_WHILE_39_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_40, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(40, s))
+# define BOOST_PP_WHILE_40_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_41, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(41, s))
+# define BOOST_PP_WHILE_41_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_42, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(42, s))
+# define BOOST_PP_WHILE_42_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_43, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(43, s))
+# define BOOST_PP_WHILE_43_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_44, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(44, s))
+# define BOOST_PP_WHILE_44_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_45, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(45, s))
+# define BOOST_PP_WHILE_45_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_46, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(46, s))
+# define BOOST_PP_WHILE_46_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_47, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(47, s))
+# define BOOST_PP_WHILE_47_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_48, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(48, s))
+# define BOOST_PP_WHILE_48_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_49, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(49, s))
+# define BOOST_PP_WHILE_49_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_50, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(50, s))
+# define BOOST_PP_WHILE_50_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_51, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(51, s))
+# define BOOST_PP_WHILE_51_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_52, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(52, s))
+# define BOOST_PP_WHILE_52_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_53, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(53, s))
+# define BOOST_PP_WHILE_53_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_54, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(54, s))
+# define BOOST_PP_WHILE_54_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_55, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(55, s))
+# define BOOST_PP_WHILE_55_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_56, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(56, s))
+# define BOOST_PP_WHILE_56_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_57, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(57, s))
+# define BOOST_PP_WHILE_57_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_58, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(58, s))
+# define BOOST_PP_WHILE_58_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_59, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(59, s))
+# define BOOST_PP_WHILE_59_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_60, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(60, s))
+# define BOOST_PP_WHILE_60_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_61, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(61, s))
+# define BOOST_PP_WHILE_61_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_62, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(62, s))
+# define BOOST_PP_WHILE_62_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_63, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(63, s))
+# define BOOST_PP_WHILE_63_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_64, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(64, s))
+# define BOOST_PP_WHILE_64_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_65, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(65, s))
+# define BOOST_PP_WHILE_65_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_66, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(66, s))
+# define BOOST_PP_WHILE_66_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_67, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(67, s))
+# define BOOST_PP_WHILE_67_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_68, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(68, s))
+# define BOOST_PP_WHILE_68_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_69, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(69, s))
+# define BOOST_PP_WHILE_69_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_70, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(70, s))
+# define BOOST_PP_WHILE_70_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_71, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(71, s))
+# define BOOST_PP_WHILE_71_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_72, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(72, s))
+# define BOOST_PP_WHILE_72_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_73, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(73, s))
+# define BOOST_PP_WHILE_73_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_74, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(74, s))
+# define BOOST_PP_WHILE_74_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_75, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(75, s))
+# define BOOST_PP_WHILE_75_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_76, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(76, s))
+# define BOOST_PP_WHILE_76_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_77, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(77, s))
+# define BOOST_PP_WHILE_77_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_78, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(78, s))
+# define BOOST_PP_WHILE_78_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_79, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(79, s))
+# define BOOST_PP_WHILE_79_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_80, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(80, s))
+# define BOOST_PP_WHILE_80_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_81, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(81, s))
+# define BOOST_PP_WHILE_81_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_82, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(82, s))
+# define BOOST_PP_WHILE_82_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_83, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(83, s))
+# define BOOST_PP_WHILE_83_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_84, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(84, s))
+# define BOOST_PP_WHILE_84_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_85, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(85, s))
+# define BOOST_PP_WHILE_85_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_86, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(86, s))
+# define BOOST_PP_WHILE_86_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_87, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(87, s))
+# define BOOST_PP_WHILE_87_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_88, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(88, s))
+# define BOOST_PP_WHILE_88_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_89, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(89, s))
+# define BOOST_PP_WHILE_89_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_90, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(90, s))
+# define BOOST_PP_WHILE_90_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_91, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(91, s))
+# define BOOST_PP_WHILE_91_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_92, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(92, s))
+# define BOOST_PP_WHILE_92_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_93, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(93, s))
+# define BOOST_PP_WHILE_93_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_94, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(94, s))
+# define BOOST_PP_WHILE_94_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_95, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(95, s))
+# define BOOST_PP_WHILE_95_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_96, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(96, s))
+# define BOOST_PP_WHILE_96_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_97, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(97, s))
+# define BOOST_PP_WHILE_97_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_98, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(98, s))
+# define BOOST_PP_WHILE_98_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_99, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(99, s))
+# define BOOST_PP_WHILE_99_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_100, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(100, s))
+# define BOOST_PP_WHILE_100_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_101, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(101, s))
+# define BOOST_PP_WHILE_101_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_102, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(102, s))
+# define BOOST_PP_WHILE_102_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_103, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(103, s))
+# define BOOST_PP_WHILE_103_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_104, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(104, s))
+# define BOOST_PP_WHILE_104_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_105, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(105, s))
+# define BOOST_PP_WHILE_105_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_106, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(106, s))
+# define BOOST_PP_WHILE_106_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_107, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(107, s))
+# define BOOST_PP_WHILE_107_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_108, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(108, s))
+# define BOOST_PP_WHILE_108_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_109, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(109, s))
+# define BOOST_PP_WHILE_109_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_110, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(110, s))
+# define BOOST_PP_WHILE_110_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_111, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(111, s))
+# define BOOST_PP_WHILE_111_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_112, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(112, s))
+# define BOOST_PP_WHILE_112_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_113, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(113, s))
+# define BOOST_PP_WHILE_113_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_114, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(114, s))
+# define BOOST_PP_WHILE_114_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_115, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(115, s))
+# define BOOST_PP_WHILE_115_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_116, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(116, s))
+# define BOOST_PP_WHILE_116_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_117, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(117, s))
+# define BOOST_PP_WHILE_117_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_118, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(118, s))
+# define BOOST_PP_WHILE_118_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_119, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(119, s))
+# define BOOST_PP_WHILE_119_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_120, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(120, s))
+# define BOOST_PP_WHILE_120_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_121, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(121, s))
+# define BOOST_PP_WHILE_121_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_122, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(122, s))
+# define BOOST_PP_WHILE_122_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_123, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(123, s))
+# define BOOST_PP_WHILE_123_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_124, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(124, s))
+# define BOOST_PP_WHILE_124_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_125, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(125, s))
+# define BOOST_PP_WHILE_125_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_126, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(126, s))
+# define BOOST_PP_WHILE_126_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_127, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(127, s))
+# define BOOST_PP_WHILE_127_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_128, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(128, s))
+# define BOOST_PP_WHILE_128_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_129, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(129, s))
+# define BOOST_PP_WHILE_129_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_130, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(130, s))
+# define BOOST_PP_WHILE_130_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_131, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(131, s))
+# define BOOST_PP_WHILE_131_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_132, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(132, s))
+# define BOOST_PP_WHILE_132_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_133, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(133, s))
+# define BOOST_PP_WHILE_133_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_134, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(134, s))
+# define BOOST_PP_WHILE_134_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_135, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(135, s))
+# define BOOST_PP_WHILE_135_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_136, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(136, s))
+# define BOOST_PP_WHILE_136_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_137, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(137, s))
+# define BOOST_PP_WHILE_137_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_138, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(138, s))
+# define BOOST_PP_WHILE_138_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_139, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(139, s))
+# define BOOST_PP_WHILE_139_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_140, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(140, s))
+# define BOOST_PP_WHILE_140_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_141, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(141, s))
+# define BOOST_PP_WHILE_141_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_142, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(142, s))
+# define BOOST_PP_WHILE_142_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_143, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(143, s))
+# define BOOST_PP_WHILE_143_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_144, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(144, s))
+# define BOOST_PP_WHILE_144_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_145, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(145, s))
+# define BOOST_PP_WHILE_145_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_146, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(146, s))
+# define BOOST_PP_WHILE_146_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_147, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(147, s))
+# define BOOST_PP_WHILE_147_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_148, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(148, s))
+# define BOOST_PP_WHILE_148_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_149, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(149, s))
+# define BOOST_PP_WHILE_149_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_150, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(150, s))
+# define BOOST_PP_WHILE_150_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_151, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(151, s))
+# define BOOST_PP_WHILE_151_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_152, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(152, s))
+# define BOOST_PP_WHILE_152_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_153, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(153, s))
+# define BOOST_PP_WHILE_153_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_154, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(154, s))
+# define BOOST_PP_WHILE_154_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_155, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(155, s))
+# define BOOST_PP_WHILE_155_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_156, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(156, s))
+# define BOOST_PP_WHILE_156_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_157, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(157, s))
+# define BOOST_PP_WHILE_157_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_158, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(158, s))
+# define BOOST_PP_WHILE_158_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_159, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(159, s))
+# define BOOST_PP_WHILE_159_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_160, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(160, s))
+# define BOOST_PP_WHILE_160_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_161, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(161, s))
+# define BOOST_PP_WHILE_161_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_162, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(162, s))
+# define BOOST_PP_WHILE_162_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_163, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(163, s))
+# define BOOST_PP_WHILE_163_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_164, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(164, s))
+# define BOOST_PP_WHILE_164_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_165, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(165, s))
+# define BOOST_PP_WHILE_165_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_166, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(166, s))
+# define BOOST_PP_WHILE_166_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_167, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(167, s))
+# define BOOST_PP_WHILE_167_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_168, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(168, s))
+# define BOOST_PP_WHILE_168_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_169, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(169, s))
+# define BOOST_PP_WHILE_169_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_170, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(170, s))
+# define BOOST_PP_WHILE_170_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_171, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(171, s))
+# define BOOST_PP_WHILE_171_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_172, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(172, s))
+# define BOOST_PP_WHILE_172_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_173, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(173, s))
+# define BOOST_PP_WHILE_173_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_174, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(174, s))
+# define BOOST_PP_WHILE_174_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_175, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(175, s))
+# define BOOST_PP_WHILE_175_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_176, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(176, s))
+# define BOOST_PP_WHILE_176_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_177, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(177, s))
+# define BOOST_PP_WHILE_177_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_178, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(178, s))
+# define BOOST_PP_WHILE_178_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_179, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(179, s))
+# define BOOST_PP_WHILE_179_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_180, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(180, s))
+# define BOOST_PP_WHILE_180_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_181, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(181, s))
+# define BOOST_PP_WHILE_181_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_182, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(182, s))
+# define BOOST_PP_WHILE_182_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_183, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(183, s))
+# define BOOST_PP_WHILE_183_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_184, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(184, s))
+# define BOOST_PP_WHILE_184_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_185, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(185, s))
+# define BOOST_PP_WHILE_185_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_186, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(186, s))
+# define BOOST_PP_WHILE_186_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_187, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(187, s))
+# define BOOST_PP_WHILE_187_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_188, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(188, s))
+# define BOOST_PP_WHILE_188_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_189, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(189, s))
+# define BOOST_PP_WHILE_189_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_190, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(190, s))
+# define BOOST_PP_WHILE_190_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_191, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(191, s))
+# define BOOST_PP_WHILE_191_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_192, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(192, s))
+# define BOOST_PP_WHILE_192_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_193, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(193, s))
+# define BOOST_PP_WHILE_193_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_194, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(194, s))
+# define BOOST_PP_WHILE_194_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_195, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(195, s))
+# define BOOST_PP_WHILE_195_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_196, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(196, s))
+# define BOOST_PP_WHILE_196_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_197, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(197, s))
+# define BOOST_PP_WHILE_197_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_198, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(198, s))
+# define BOOST_PP_WHILE_198_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_199, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(199, s))
+# define BOOST_PP_WHILE_199_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_200, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(200, s))
+# define BOOST_PP_WHILE_200_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_201, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(201, s))
+# define BOOST_PP_WHILE_201_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_202, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(202, s))
+# define BOOST_PP_WHILE_202_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_203, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(203, s))
+# define BOOST_PP_WHILE_203_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_204, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(204, s))
+# define BOOST_PP_WHILE_204_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_205, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(205, s))
+# define BOOST_PP_WHILE_205_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_206, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(206, s))
+# define BOOST_PP_WHILE_206_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_207, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(207, s))
+# define BOOST_PP_WHILE_207_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_208, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(208, s))
+# define BOOST_PP_WHILE_208_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_209, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(209, s))
+# define BOOST_PP_WHILE_209_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_210, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(210, s))
+# define BOOST_PP_WHILE_210_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_211, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(211, s))
+# define BOOST_PP_WHILE_211_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_212, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(212, s))
+# define BOOST_PP_WHILE_212_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_213, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(213, s))
+# define BOOST_PP_WHILE_213_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_214, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(214, s))
+# define BOOST_PP_WHILE_214_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_215, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(215, s))
+# define BOOST_PP_WHILE_215_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_216, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(216, s))
+# define BOOST_PP_WHILE_216_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_217, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(217, s))
+# define BOOST_PP_WHILE_217_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_218, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(218, s))
+# define BOOST_PP_WHILE_218_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_219, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(219, s))
+# define BOOST_PP_WHILE_219_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_220, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(220, s))
+# define BOOST_PP_WHILE_220_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_221, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(221, s))
+# define BOOST_PP_WHILE_221_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_222, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(222, s))
+# define BOOST_PP_WHILE_222_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_223, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(223, s))
+# define BOOST_PP_WHILE_223_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_224, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(224, s))
+# define BOOST_PP_WHILE_224_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_225, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(225, s))
+# define BOOST_PP_WHILE_225_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_226, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(226, s))
+# define BOOST_PP_WHILE_226_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_227, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(227, s))
+# define BOOST_PP_WHILE_227_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_228, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(228, s))
+# define BOOST_PP_WHILE_228_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_229, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(229, s))
+# define BOOST_PP_WHILE_229_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_230, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(230, s))
+# define BOOST_PP_WHILE_230_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_231, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(231, s))
+# define BOOST_PP_WHILE_231_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_232, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(232, s))
+# define BOOST_PP_WHILE_232_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_233, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(233, s))
+# define BOOST_PP_WHILE_233_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_234, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(234, s))
+# define BOOST_PP_WHILE_234_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_235, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(235, s))
+# define BOOST_PP_WHILE_235_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_236, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(236, s))
+# define BOOST_PP_WHILE_236_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_237, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(237, s))
+# define BOOST_PP_WHILE_237_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_238, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(238, s))
+# define BOOST_PP_WHILE_238_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_239, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(239, s))
+# define BOOST_PP_WHILE_239_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_240, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(240, s))
+# define BOOST_PP_WHILE_240_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_241, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(241, s))
+# define BOOST_PP_WHILE_241_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_242, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(242, s))
+# define BOOST_PP_WHILE_242_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_243, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(243, s))
+# define BOOST_PP_WHILE_243_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_244, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(244, s))
+# define BOOST_PP_WHILE_244_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_245, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(245, s))
+# define BOOST_PP_WHILE_245_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_246, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(246, s))
+# define BOOST_PP_WHILE_246_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_247, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(247, s))
+# define BOOST_PP_WHILE_247_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_248, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(248, s))
+# define BOOST_PP_WHILE_248_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_249, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(249, s))
+# define BOOST_PP_WHILE_249_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_250, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(250, s))
+# define BOOST_PP_WHILE_250_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_251, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(251, s))
+# define BOOST_PP_WHILE_251_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_252, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(252, s))
+# define BOOST_PP_WHILE_252_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_253, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(253, s))
+# define BOOST_PP_WHILE_253_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_254, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(254, s))
+# define BOOST_PP_WHILE_254_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_255, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(255, s))
+# define BOOST_PP_WHILE_255_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_256, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(256, s))
+# define BOOST_PP_WHILE_256_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_257, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(257, s))
+#
+#
+# endif
diff --git a/boost/boost/preprocessor/control/expr_if.hpp b/boost/boost/preprocessor/control/expr_if.hpp
new file mode 100644
index 00000000000..0e1ab512fbf
--- /dev/null
+++ b/boost/boost/preprocessor/control/expr_if.hpp
@@ -0,0 +1,30 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_CONTROL_EXPR_IF_HPP
+# define BOOST_PREPROCESSOR_CONTROL_EXPR_IF_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/control/expr_iif.hpp>
+# include <boost/preprocessor/logical/bool.hpp>
+#
+# /* BOOST_PP_EXPR_IF */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_EXPR_IF(cond, expr) BOOST_PP_EXPR_IIF(BOOST_PP_BOOL(cond), expr)
+# else
+# define BOOST_PP_EXPR_IF(cond, expr) BOOST_PP_EXPR_IF_I(cond, expr)
+# define BOOST_PP_EXPR_IF_I(cond, expr) BOOST_PP_EXPR_IIF(BOOST_PP_BOOL(cond), expr)
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/control/expr_iif.hpp b/boost/boost/preprocessor/control/expr_iif.hpp
new file mode 100644
index 00000000000..58f45a48f5e
--- /dev/null
+++ b/boost/boost/preprocessor/control/expr_iif.hpp
@@ -0,0 +1,31 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_CONTROL_EXPR_IIF_HPP
+# define BOOST_PREPROCESSOR_CONTROL_EXPR_IIF_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+#
+# /* BOOST_PP_EXPR_IIF */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+# define BOOST_PP_EXPR_IIF(bit, expr) BOOST_PP_EXPR_IIF_I(bit, expr)
+# else
+# define BOOST_PP_EXPR_IIF(bit, expr) BOOST_PP_EXPR_IIF_OO((bit, expr))
+# define BOOST_PP_EXPR_IIF_OO(par) BOOST_PP_EXPR_IIF_I ## par
+# endif
+#
+# define BOOST_PP_EXPR_IIF_I(bit, expr) BOOST_PP_EXPR_IIF_ ## bit(expr)
+#
+# define BOOST_PP_EXPR_IIF_0(expr)
+# define BOOST_PP_EXPR_IIF_1(expr) expr
+#
+# endif
diff --git a/boost/boost/preprocessor/control/if.hpp b/boost/boost/preprocessor/control/if.hpp
new file mode 100644
index 00000000000..52cfc3dabb1
--- /dev/null
+++ b/boost/boost/preprocessor/control/if.hpp
@@ -0,0 +1,30 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_CONTROL_IF_HPP
+# define BOOST_PREPROCESSOR_CONTROL_IF_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/control/iif.hpp>
+# include <boost/preprocessor/logical/bool.hpp>
+#
+# /* BOOST_PP_IF */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_IF(cond, t, f) BOOST_PP_IIF(BOOST_PP_BOOL(cond), t, f)
+# else
+# define BOOST_PP_IF(cond, t, f) BOOST_PP_IF_I(cond, t, f)
+# define BOOST_PP_IF_I(cond, t, f) BOOST_PP_IIF(BOOST_PP_BOOL(cond), t, f)
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/control/iif.hpp b/boost/boost/preprocessor/control/iif.hpp
new file mode 100644
index 00000000000..fd0781793fa
--- /dev/null
+++ b/boost/boost/preprocessor/control/iif.hpp
@@ -0,0 +1,34 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_CONTROL_IIF_HPP
+# define BOOST_PREPROCESSOR_CONTROL_IIF_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+# define BOOST_PP_IIF(bit, t, f) BOOST_PP_IIF_I(bit, t, f)
+# else
+# define BOOST_PP_IIF(bit, t, f) BOOST_PP_IIF_OO((bit, t, f))
+# define BOOST_PP_IIF_OO(par) BOOST_PP_IIF_I ## par
+# endif
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()
+# define BOOST_PP_IIF_I(bit, t, f) BOOST_PP_IIF_ ## bit(t, f)
+# else
+# define BOOST_PP_IIF_I(bit, t, f) BOOST_PP_IIF_II(BOOST_PP_IIF_ ## bit(t, f))
+# define BOOST_PP_IIF_II(id) id
+# endif
+#
+# define BOOST_PP_IIF_0(t, f) f
+# define BOOST_PP_IIF_1(t, f) t
+#
+# endif
diff --git a/boost/boost/preprocessor/control/while.hpp b/boost/boost/preprocessor/control/while.hpp
new file mode 100644
index 00000000000..e8a65fffc73
--- /dev/null
+++ b/boost/boost/preprocessor/control/while.hpp
@@ -0,0 +1,312 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_CONTROL_WHILE_HPP
+# define BOOST_PREPROCESSOR_CONTROL_WHILE_HPP
+#
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/debug/error.hpp>
+# include <boost/preprocessor/detail/auto_rec.hpp>
+# include <boost/preprocessor/list/fold_left.hpp>
+# include <boost/preprocessor/list/fold_right.hpp>
+# include <boost/preprocessor/logical/bitand.hpp>
+#
+# /* BOOST_PP_WHILE */
+#
+# if 0
+# define BOOST_PP_WHILE(pred, op, state)
+# endif
+#
+# define BOOST_PP_WHILE BOOST_PP_CAT(BOOST_PP_WHILE_, BOOST_PP_AUTO_REC(BOOST_PP_WHILE_P, 256))
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_WHILE_P(n) BOOST_PP_BITAND(BOOST_PP_CAT(BOOST_PP_WHILE_CHECK_, BOOST_PP_WHILE_ ## n(BOOST_PP_WHILE_F, BOOST_PP_NIL, BOOST_PP_NIL)), BOOST_PP_BITAND(BOOST_PP_CAT(BOOST_PP_LIST_FOLD_LEFT_CHECK_, BOOST_PP_LIST_FOLD_LEFT_ ## n(BOOST_PP_NIL, BOOST_PP_NIL, BOOST_PP_NIL)), BOOST_PP_CAT(BOOST_PP_LIST_FOLD_RIGHT_CHECK_, BOOST_PP_LIST_FOLD_RIGHT_ ## n(BOOST_PP_NIL, BOOST_PP_NIL, BOOST_PP_NIL))))
+# else
+# define BOOST_PP_WHILE_P(n) BOOST_PP_BITAND(BOOST_PP_CAT(BOOST_PP_WHILE_CHECK_, BOOST_PP_WHILE_ ## n(BOOST_PP_WHILE_F, BOOST_PP_NIL, BOOST_PP_NIL)), BOOST_PP_CAT(BOOST_PP_LIST_FOLD_LEFT_CHECK_, BOOST_PP_LIST_FOLD_LEFT_ ## n(BOOST_PP_NIL, BOOST_PP_NIL, BOOST_PP_NIL)))
+# endif
+#
+# define BOOST_PP_WHILE_F(d, _) 0
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# include <boost/preprocessor/control/detail/edg/while.hpp>
+# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()
+# include <boost/preprocessor/control/detail/msvc/while.hpp>
+# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_DMC()
+# include <boost/preprocessor/control/detail/dmc/while.hpp>
+# else
+# include <boost/preprocessor/control/detail/while.hpp>
+# endif
+#
+# define BOOST_PP_WHILE_257(p, o, s) BOOST_PP_ERROR(0x0001)
+#
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_NIL 1
+#
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_1(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_2(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_3(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_4(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_5(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_6(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_7(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_8(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_9(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_10(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_11(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_12(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_13(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_14(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_15(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_16(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_17(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_18(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_19(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_20(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_21(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_22(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_23(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_24(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_25(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_26(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_27(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_28(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_29(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_30(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_31(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_32(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_33(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_34(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_35(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_36(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_37(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_38(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_39(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_40(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_41(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_42(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_43(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_44(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_45(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_46(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_47(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_48(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_49(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_50(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_51(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_52(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_53(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_54(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_55(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_56(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_57(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_58(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_59(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_60(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_61(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_62(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_63(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_64(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_65(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_66(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_67(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_68(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_69(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_70(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_71(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_72(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_73(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_74(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_75(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_76(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_77(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_78(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_79(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_80(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_81(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_82(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_83(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_84(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_85(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_86(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_87(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_88(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_89(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_90(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_91(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_92(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_93(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_94(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_95(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_96(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_97(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_98(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_99(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_100(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_101(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_102(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_103(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_104(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_105(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_106(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_107(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_108(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_109(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_110(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_111(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_112(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_113(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_114(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_115(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_116(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_117(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_118(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_119(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_120(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_121(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_122(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_123(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_124(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_125(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_126(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_127(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_128(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_129(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_130(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_131(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_132(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_133(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_134(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_135(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_136(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_137(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_138(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_139(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_140(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_141(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_142(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_143(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_144(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_145(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_146(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_147(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_148(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_149(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_150(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_151(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_152(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_153(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_154(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_155(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_156(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_157(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_158(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_159(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_160(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_161(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_162(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_163(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_164(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_165(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_166(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_167(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_168(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_169(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_170(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_171(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_172(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_173(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_174(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_175(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_176(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_177(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_178(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_179(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_180(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_181(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_182(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_183(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_184(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_185(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_186(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_187(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_188(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_189(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_190(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_191(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_192(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_193(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_194(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_195(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_196(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_197(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_198(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_199(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_200(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_201(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_202(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_203(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_204(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_205(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_206(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_207(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_208(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_209(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_210(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_211(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_212(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_213(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_214(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_215(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_216(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_217(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_218(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_219(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_220(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_221(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_222(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_223(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_224(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_225(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_226(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_227(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_228(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_229(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_230(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_231(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_232(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_233(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_234(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_235(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_236(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_237(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_238(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_239(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_240(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_241(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_242(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_243(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_244(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_245(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_246(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_247(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_248(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_249(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_250(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_251(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_252(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_253(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_254(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_255(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_256(p, o, s) 0
+#
+# endif
diff --git a/boost/boost/preprocessor/debug.hpp b/boost/boost/preprocessor/debug.hpp
new file mode 100644
index 00000000000..d09983e032f
--- /dev/null
+++ b/boost/boost/preprocessor/debug.hpp
@@ -0,0 +1,18 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_DEBUG_HPP
+# define BOOST_PREPROCESSOR_DEBUG_HPP
+#
+# include <boost/preprocessor/debug/assert.hpp>
+# include <boost/preprocessor/debug/line.hpp>
+#
+# endif
diff --git a/boost/boost/preprocessor/debug/assert.hpp b/boost/boost/preprocessor/debug/assert.hpp
new file mode 100644
index 00000000000..3380c7028a5
--- /dev/null
+++ b/boost/boost/preprocessor/debug/assert.hpp
@@ -0,0 +1,44 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_DEBUG_ASSERT_HPP
+# define BOOST_PREPROCESSOR_DEBUG_ASSERT_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/control/expr_iif.hpp>
+# include <boost/preprocessor/control/iif.hpp>
+# include <boost/preprocessor/logical/not.hpp>
+# include <boost/preprocessor/tuple/eat.hpp>
+#
+# /* BOOST_PP_ASSERT */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_ASSERT BOOST_PP_ASSERT_D
+# else
+# define BOOST_PP_ASSERT(cond) BOOST_PP_ASSERT_D(cond)
+# endif
+#
+# define BOOST_PP_ASSERT_D(cond) BOOST_PP_IIF(BOOST_PP_NOT(cond), BOOST_PP_ASSERT_ERROR, BOOST_PP_TUPLE_EAT_1)(...)
+# define BOOST_PP_ASSERT_ERROR(x, y, z)
+#
+# /* BOOST_PP_ASSERT_MSG */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_ASSERT_MSG BOOST_PP_ASSERT_MSG_D
+# else
+# define BOOST_PP_ASSERT_MSG(cond, msg) BOOST_PP_ASSERT_MSG_D(cond, msg)
+# endif
+#
+# define BOOST_PP_ASSERT_MSG_D(cond, msg) BOOST_PP_EXPR_IIF(BOOST_PP_NOT(cond), msg)
+#
+# endif
diff --git a/boost/boost/preprocessor/debug/error.hpp b/boost/boost/preprocessor/debug/error.hpp
new file mode 100644
index 00000000000..c8ae5e75056
--- /dev/null
+++ b/boost/boost/preprocessor/debug/error.hpp
@@ -0,0 +1,33 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_DEBUG_ERROR_HPP
+# define BOOST_PREPROCESSOR_DEBUG_ERROR_HPP
+#
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/config/config.hpp>
+#
+# /* BOOST_PP_ERROR */
+#
+# if BOOST_PP_CONFIG_ERRORS
+# define BOOST_PP_ERROR(code) BOOST_PP_CAT(BOOST_PP_ERROR_, code)
+# endif
+#
+# define BOOST_PP_ERROR_0x0000 BOOST_PP_ERROR(0x0000, BOOST_PP_INDEX_OUT_OF_BOUNDS)
+# define BOOST_PP_ERROR_0x0001 BOOST_PP_ERROR(0x0001, BOOST_PP_WHILE_OVERFLOW)
+# define BOOST_PP_ERROR_0x0002 BOOST_PP_ERROR(0x0002, BOOST_PP_FOR_OVERFLOW)
+# define BOOST_PP_ERROR_0x0003 BOOST_PP_ERROR(0x0003, BOOST_PP_REPEAT_OVERFLOW)
+# define BOOST_PP_ERROR_0x0004 BOOST_PP_ERROR(0x0004, BOOST_PP_LIST_FOLD_OVERFLOW)
+# define BOOST_PP_ERROR_0x0005 BOOST_PP_ERROR(0x0005, BOOST_PP_SEQ_FOLD_OVERFLOW)
+# define BOOST_PP_ERROR_0x0006 BOOST_PP_ERROR(0x0006, BOOST_PP_ARITHMETIC_OVERFLOW)
+# define BOOST_PP_ERROR_0x0007 BOOST_PP_ERROR(0x0007, BOOST_PP_DIVISION_BY_ZERO)
+#
+# endif
diff --git a/boost/boost/preprocessor/debug/line.hpp b/boost/boost/preprocessor/debug/line.hpp
new file mode 100644
index 00000000000..4dd1013c1a8
--- /dev/null
+++ b/boost/boost/preprocessor/debug/line.hpp
@@ -0,0 +1,35 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_DEBUG_LINE_HPP
+# define BOOST_PREPROCESSOR_DEBUG_LINE_HPP
+#
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/iteration/iterate.hpp>
+# include <boost/preprocessor/stringize.hpp>
+#
+# /* BOOST_PP_LINE */
+#
+# if BOOST_PP_CONFIG_EXTENDED_LINE_INFO
+# define BOOST_PP_LINE(line, file) line BOOST_PP_CAT(BOOST_PP_LINE_, BOOST_PP_IS_ITERATING)(file)
+# define BOOST_PP_LINE_BOOST_PP_IS_ITERATING(file) #file
+# define BOOST_PP_LINE_1(file) BOOST_PP_STRINGIZE(file BOOST_PP_CAT(BOOST_PP_LINE_I_, BOOST_PP_ITERATION_DEPTH())())
+# define BOOST_PP_LINE_I_1() [BOOST_PP_FRAME_ITERATION(1)]
+# define BOOST_PP_LINE_I_2() BOOST_PP_LINE_I_1()[BOOST_PP_FRAME_ITERATION(2)]
+# define BOOST_PP_LINE_I_3() BOOST_PP_LINE_I_2()[BOOST_PP_FRAME_ITERATION(3)]
+# define BOOST_PP_LINE_I_4() BOOST_PP_LINE_I_3()[BOOST_PP_FRAME_ITERATION(4)]
+# define BOOST_PP_LINE_I_5() BOOST_PP_LINE_I_4()[BOOST_PP_FRAME_ITERATION(5)]
+# else
+# define BOOST_PP_LINE(line, file) line __FILE__
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/dec.hpp b/boost/boost/preprocessor/dec.hpp
new file mode 100644
index 00000000000..d57206470b9
--- /dev/null
+++ b/boost/boost/preprocessor/dec.hpp
@@ -0,0 +1,17 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_DEC_HPP
+# define BOOST_PREPROCESSOR_DEC_HPP
+#
+# include <boost/preprocessor/arithmetic/dec.hpp>
+#
+# endif
diff --git a/boost/boost/preprocessor/detail/auto_rec.hpp b/boost/boost/preprocessor/detail/auto_rec.hpp
new file mode 100644
index 00000000000..39de1d00285
--- /dev/null
+++ b/boost/boost/preprocessor/detail/auto_rec.hpp
@@ -0,0 +1,293 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# include <boost/preprocessor/config/config.hpp>
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_DMC()
+# include <boost/preprocessor/detail/dmc/auto_rec.hpp>
+# else
+#
+# ifndef BOOST_PREPROCESSOR_DETAIL_AUTO_REC_HPP
+# define BOOST_PREPROCESSOR_DETAIL_AUTO_REC_HPP
+#
+# include <boost/preprocessor/control/iif.hpp>
+#
+# /* BOOST_PP_AUTO_REC */
+#
+# define BOOST_PP_AUTO_REC(pred, n) BOOST_PP_NODE_ENTRY_ ## n(pred)
+#
+# define BOOST_PP_NODE_ENTRY_256(p) BOOST_PP_NODE_128(p)(p)(p)(p)(p)(p)(p)(p)
+# define BOOST_PP_NODE_ENTRY_128(p) BOOST_PP_NODE_64(p)(p)(p)(p)(p)(p)(p)
+# define BOOST_PP_NODE_ENTRY_64(p) BOOST_PP_NODE_32(p)(p)(p)(p)(p)(p)
+# define BOOST_PP_NODE_ENTRY_32(p) BOOST_PP_NODE_16(p)(p)(p)(p)(p)
+# define BOOST_PP_NODE_ENTRY_16(p) BOOST_PP_NODE_8(p)(p)(p)(p)
+# define BOOST_PP_NODE_ENTRY_8(p) BOOST_PP_NODE_4(p)(p)(p)
+# define BOOST_PP_NODE_ENTRY_4(p) BOOST_PP_NODE_2(p)(p)
+# define BOOST_PP_NODE_ENTRY_2(p) BOOST_PP_NODE_1(p)
+#
+# define BOOST_PP_NODE_128(p) BOOST_PP_IIF(p(128), BOOST_PP_NODE_64, BOOST_PP_NODE_192)
+# define BOOST_PP_NODE_64(p) BOOST_PP_IIF(p(64), BOOST_PP_NODE_32, BOOST_PP_NODE_96)
+# define BOOST_PP_NODE_32(p) BOOST_PP_IIF(p(32), BOOST_PP_NODE_16, BOOST_PP_NODE_48)
+# define BOOST_PP_NODE_16(p) BOOST_PP_IIF(p(16), BOOST_PP_NODE_8, BOOST_PP_NODE_24)
+# define BOOST_PP_NODE_8(p) BOOST_PP_IIF(p(8), BOOST_PP_NODE_4, BOOST_PP_NODE_12)
+# define BOOST_PP_NODE_4(p) BOOST_PP_IIF(p(4), BOOST_PP_NODE_2, BOOST_PP_NODE_6)
+# define BOOST_PP_NODE_2(p) BOOST_PP_IIF(p(2), BOOST_PP_NODE_1, BOOST_PP_NODE_3)
+# define BOOST_PP_NODE_1(p) BOOST_PP_IIF(p(1), 1, 2)
+# define BOOST_PP_NODE_3(p) BOOST_PP_IIF(p(3), 3, 4)
+# define BOOST_PP_NODE_6(p) BOOST_PP_IIF(p(6), BOOST_PP_NODE_5, BOOST_PP_NODE_7)
+# define BOOST_PP_NODE_5(p) BOOST_PP_IIF(p(5), 5, 6)
+# define BOOST_PP_NODE_7(p) BOOST_PP_IIF(p(7), 7, 8)
+# define BOOST_PP_NODE_12(p) BOOST_PP_IIF(p(12), BOOST_PP_NODE_10, BOOST_PP_NODE_14)
+# define BOOST_PP_NODE_10(p) BOOST_PP_IIF(p(10), BOOST_PP_NODE_9, BOOST_PP_NODE_11)
+# define BOOST_PP_NODE_9(p) BOOST_PP_IIF(p(9), 9, 10)
+# define BOOST_PP_NODE_11(p) BOOST_PP_IIF(p(11), 11, 12)
+# define BOOST_PP_NODE_14(p) BOOST_PP_IIF(p(14), BOOST_PP_NODE_13, BOOST_PP_NODE_15)
+# define BOOST_PP_NODE_13(p) BOOST_PP_IIF(p(13), 13, 14)
+# define BOOST_PP_NODE_15(p) BOOST_PP_IIF(p(15), 15, 16)
+# define BOOST_PP_NODE_24(p) BOOST_PP_IIF(p(24), BOOST_PP_NODE_20, BOOST_PP_NODE_28)
+# define BOOST_PP_NODE_20(p) BOOST_PP_IIF(p(20), BOOST_PP_NODE_18, BOOST_PP_NODE_22)
+# define BOOST_PP_NODE_18(p) BOOST_PP_IIF(p(18), BOOST_PP_NODE_17, BOOST_PP_NODE_19)
+# define BOOST_PP_NODE_17(p) BOOST_PP_IIF(p(17), 17, 18)
+# define BOOST_PP_NODE_19(p) BOOST_PP_IIF(p(19), 19, 20)
+# define BOOST_PP_NODE_22(p) BOOST_PP_IIF(p(22), BOOST_PP_NODE_21, BOOST_PP_NODE_23)
+# define BOOST_PP_NODE_21(p) BOOST_PP_IIF(p(21), 21, 22)
+# define BOOST_PP_NODE_23(p) BOOST_PP_IIF(p(23), 23, 24)
+# define BOOST_PP_NODE_28(p) BOOST_PP_IIF(p(28), BOOST_PP_NODE_26, BOOST_PP_NODE_30)
+# define BOOST_PP_NODE_26(p) BOOST_PP_IIF(p(26), BOOST_PP_NODE_25, BOOST_PP_NODE_27)
+# define BOOST_PP_NODE_25(p) BOOST_PP_IIF(p(25), 25, 26)
+# define BOOST_PP_NODE_27(p) BOOST_PP_IIF(p(27), 27, 28)
+# define BOOST_PP_NODE_30(p) BOOST_PP_IIF(p(30), BOOST_PP_NODE_29, BOOST_PP_NODE_31)
+# define BOOST_PP_NODE_29(p) BOOST_PP_IIF(p(29), 29, 30)
+# define BOOST_PP_NODE_31(p) BOOST_PP_IIF(p(31), 31, 32)
+# define BOOST_PP_NODE_48(p) BOOST_PP_IIF(p(48), BOOST_PP_NODE_40, BOOST_PP_NODE_56)
+# define BOOST_PP_NODE_40(p) BOOST_PP_IIF(p(40), BOOST_PP_NODE_36, BOOST_PP_NODE_44)
+# define BOOST_PP_NODE_36(p) BOOST_PP_IIF(p(36), BOOST_PP_NODE_34, BOOST_PP_NODE_38)
+# define BOOST_PP_NODE_34(p) BOOST_PP_IIF(p(34), BOOST_PP_NODE_33, BOOST_PP_NODE_35)
+# define BOOST_PP_NODE_33(p) BOOST_PP_IIF(p(33), 33, 34)
+# define BOOST_PP_NODE_35(p) BOOST_PP_IIF(p(35), 35, 36)
+# define BOOST_PP_NODE_38(p) BOOST_PP_IIF(p(38), BOOST_PP_NODE_37, BOOST_PP_NODE_39)
+# define BOOST_PP_NODE_37(p) BOOST_PP_IIF(p(37), 37, 38)
+# define BOOST_PP_NODE_39(p) BOOST_PP_IIF(p(39), 39, 40)
+# define BOOST_PP_NODE_44(p) BOOST_PP_IIF(p(44), BOOST_PP_NODE_42, BOOST_PP_NODE_46)
+# define BOOST_PP_NODE_42(p) BOOST_PP_IIF(p(42), BOOST_PP_NODE_41, BOOST_PP_NODE_43)
+# define BOOST_PP_NODE_41(p) BOOST_PP_IIF(p(41), 41, 42)
+# define BOOST_PP_NODE_43(p) BOOST_PP_IIF(p(43), 43, 44)
+# define BOOST_PP_NODE_46(p) BOOST_PP_IIF(p(46), BOOST_PP_NODE_45, BOOST_PP_NODE_47)
+# define BOOST_PP_NODE_45(p) BOOST_PP_IIF(p(45), 45, 46)
+# define BOOST_PP_NODE_47(p) BOOST_PP_IIF(p(47), 47, 48)
+# define BOOST_PP_NODE_56(p) BOOST_PP_IIF(p(56), BOOST_PP_NODE_52, BOOST_PP_NODE_60)
+# define BOOST_PP_NODE_52(p) BOOST_PP_IIF(p(52), BOOST_PP_NODE_50, BOOST_PP_NODE_54)
+# define BOOST_PP_NODE_50(p) BOOST_PP_IIF(p(50), BOOST_PP_NODE_49, BOOST_PP_NODE_51)
+# define BOOST_PP_NODE_49(p) BOOST_PP_IIF(p(49), 49, 50)
+# define BOOST_PP_NODE_51(p) BOOST_PP_IIF(p(51), 51, 52)
+# define BOOST_PP_NODE_54(p) BOOST_PP_IIF(p(54), BOOST_PP_NODE_53, BOOST_PP_NODE_55)
+# define BOOST_PP_NODE_53(p) BOOST_PP_IIF(p(53), 53, 54)
+# define BOOST_PP_NODE_55(p) BOOST_PP_IIF(p(55), 55, 56)
+# define BOOST_PP_NODE_60(p) BOOST_PP_IIF(p(60), BOOST_PP_NODE_58, BOOST_PP_NODE_62)
+# define BOOST_PP_NODE_58(p) BOOST_PP_IIF(p(58), BOOST_PP_NODE_57, BOOST_PP_NODE_59)
+# define BOOST_PP_NODE_57(p) BOOST_PP_IIF(p(57), 57, 58)
+# define BOOST_PP_NODE_59(p) BOOST_PP_IIF(p(59), 59, 60)
+# define BOOST_PP_NODE_62(p) BOOST_PP_IIF(p(62), BOOST_PP_NODE_61, BOOST_PP_NODE_63)
+# define BOOST_PP_NODE_61(p) BOOST_PP_IIF(p(61), 61, 62)
+# define BOOST_PP_NODE_63(p) BOOST_PP_IIF(p(63), 63, 64)
+# define BOOST_PP_NODE_96(p) BOOST_PP_IIF(p(96), BOOST_PP_NODE_80, BOOST_PP_NODE_112)
+# define BOOST_PP_NODE_80(p) BOOST_PP_IIF(p(80), BOOST_PP_NODE_72, BOOST_PP_NODE_88)
+# define BOOST_PP_NODE_72(p) BOOST_PP_IIF(p(72), BOOST_PP_NODE_68, BOOST_PP_NODE_76)
+# define BOOST_PP_NODE_68(p) BOOST_PP_IIF(p(68), BOOST_PP_NODE_66, BOOST_PP_NODE_70)
+# define BOOST_PP_NODE_66(p) BOOST_PP_IIF(p(66), BOOST_PP_NODE_65, BOOST_PP_NODE_67)
+# define BOOST_PP_NODE_65(p) BOOST_PP_IIF(p(65), 65, 66)
+# define BOOST_PP_NODE_67(p) BOOST_PP_IIF(p(67), 67, 68)
+# define BOOST_PP_NODE_70(p) BOOST_PP_IIF(p(70), BOOST_PP_NODE_69, BOOST_PP_NODE_71)
+# define BOOST_PP_NODE_69(p) BOOST_PP_IIF(p(69), 69, 70)
+# define BOOST_PP_NODE_71(p) BOOST_PP_IIF(p(71), 71, 72)
+# define BOOST_PP_NODE_76(p) BOOST_PP_IIF(p(76), BOOST_PP_NODE_74, BOOST_PP_NODE_78)
+# define BOOST_PP_NODE_74(p) BOOST_PP_IIF(p(74), BOOST_PP_NODE_73, BOOST_PP_NODE_75)
+# define BOOST_PP_NODE_73(p) BOOST_PP_IIF(p(73), 73, 74)
+# define BOOST_PP_NODE_75(p) BOOST_PP_IIF(p(75), 75, 76)
+# define BOOST_PP_NODE_78(p) BOOST_PP_IIF(p(78), BOOST_PP_NODE_77, BOOST_PP_NODE_79)
+# define BOOST_PP_NODE_77(p) BOOST_PP_IIF(p(77), 77, 78)
+# define BOOST_PP_NODE_79(p) BOOST_PP_IIF(p(79), 79, 80)
+# define BOOST_PP_NODE_88(p) BOOST_PP_IIF(p(88), BOOST_PP_NODE_84, BOOST_PP_NODE_92)
+# define BOOST_PP_NODE_84(p) BOOST_PP_IIF(p(84), BOOST_PP_NODE_82, BOOST_PP_NODE_86)
+# define BOOST_PP_NODE_82(p) BOOST_PP_IIF(p(82), BOOST_PP_NODE_81, BOOST_PP_NODE_83)
+# define BOOST_PP_NODE_81(p) BOOST_PP_IIF(p(81), 81, 82)
+# define BOOST_PP_NODE_83(p) BOOST_PP_IIF(p(83), 83, 84)
+# define BOOST_PP_NODE_86(p) BOOST_PP_IIF(p(86), BOOST_PP_NODE_85, BOOST_PP_NODE_87)
+# define BOOST_PP_NODE_85(p) BOOST_PP_IIF(p(85), 85, 86)
+# define BOOST_PP_NODE_87(p) BOOST_PP_IIF(p(87), 87, 88)
+# define BOOST_PP_NODE_92(p) BOOST_PP_IIF(p(92), BOOST_PP_NODE_90, BOOST_PP_NODE_94)
+# define BOOST_PP_NODE_90(p) BOOST_PP_IIF(p(90), BOOST_PP_NODE_89, BOOST_PP_NODE_91)
+# define BOOST_PP_NODE_89(p) BOOST_PP_IIF(p(89), 89, 90)
+# define BOOST_PP_NODE_91(p) BOOST_PP_IIF(p(91), 91, 92)
+# define BOOST_PP_NODE_94(p) BOOST_PP_IIF(p(94), BOOST_PP_NODE_93, BOOST_PP_NODE_95)
+# define BOOST_PP_NODE_93(p) BOOST_PP_IIF(p(93), 93, 94)
+# define BOOST_PP_NODE_95(p) BOOST_PP_IIF(p(95), 95, 96)
+# define BOOST_PP_NODE_112(p) BOOST_PP_IIF(p(112), BOOST_PP_NODE_104, BOOST_PP_NODE_120)
+# define BOOST_PP_NODE_104(p) BOOST_PP_IIF(p(104), BOOST_PP_NODE_100, BOOST_PP_NODE_108)
+# define BOOST_PP_NODE_100(p) BOOST_PP_IIF(p(100), BOOST_PP_NODE_98, BOOST_PP_NODE_102)
+# define BOOST_PP_NODE_98(p) BOOST_PP_IIF(p(98), BOOST_PP_NODE_97, BOOST_PP_NODE_99)
+# define BOOST_PP_NODE_97(p) BOOST_PP_IIF(p(97), 97, 98)
+# define BOOST_PP_NODE_99(p) BOOST_PP_IIF(p(99), 99, 100)
+# define BOOST_PP_NODE_102(p) BOOST_PP_IIF(p(102), BOOST_PP_NODE_101, BOOST_PP_NODE_103)
+# define BOOST_PP_NODE_101(p) BOOST_PP_IIF(p(101), 101, 102)
+# define BOOST_PP_NODE_103(p) BOOST_PP_IIF(p(103), 103, 104)
+# define BOOST_PP_NODE_108(p) BOOST_PP_IIF(p(108), BOOST_PP_NODE_106, BOOST_PP_NODE_110)
+# define BOOST_PP_NODE_106(p) BOOST_PP_IIF(p(106), BOOST_PP_NODE_105, BOOST_PP_NODE_107)
+# define BOOST_PP_NODE_105(p) BOOST_PP_IIF(p(105), 105, 106)
+# define BOOST_PP_NODE_107(p) BOOST_PP_IIF(p(107), 107, 108)
+# define BOOST_PP_NODE_110(p) BOOST_PP_IIF(p(110), BOOST_PP_NODE_109, BOOST_PP_NODE_111)
+# define BOOST_PP_NODE_109(p) BOOST_PP_IIF(p(109), 109, 110)
+# define BOOST_PP_NODE_111(p) BOOST_PP_IIF(p(111), 111, 112)
+# define BOOST_PP_NODE_120(p) BOOST_PP_IIF(p(120), BOOST_PP_NODE_116, BOOST_PP_NODE_124)
+# define BOOST_PP_NODE_116(p) BOOST_PP_IIF(p(116), BOOST_PP_NODE_114, BOOST_PP_NODE_118)
+# define BOOST_PP_NODE_114(p) BOOST_PP_IIF(p(114), BOOST_PP_NODE_113, BOOST_PP_NODE_115)
+# define BOOST_PP_NODE_113(p) BOOST_PP_IIF(p(113), 113, 114)
+# define BOOST_PP_NODE_115(p) BOOST_PP_IIF(p(115), 115, 116)
+# define BOOST_PP_NODE_118(p) BOOST_PP_IIF(p(118), BOOST_PP_NODE_117, BOOST_PP_NODE_119)
+# define BOOST_PP_NODE_117(p) BOOST_PP_IIF(p(117), 117, 118)
+# define BOOST_PP_NODE_119(p) BOOST_PP_IIF(p(119), 119, 120)
+# define BOOST_PP_NODE_124(p) BOOST_PP_IIF(p(124), BOOST_PP_NODE_122, BOOST_PP_NODE_126)
+# define BOOST_PP_NODE_122(p) BOOST_PP_IIF(p(122), BOOST_PP_NODE_121, BOOST_PP_NODE_123)
+# define BOOST_PP_NODE_121(p) BOOST_PP_IIF(p(121), 121, 122)
+# define BOOST_PP_NODE_123(p) BOOST_PP_IIF(p(123), 123, 124)
+# define BOOST_PP_NODE_126(p) BOOST_PP_IIF(p(126), BOOST_PP_NODE_125, BOOST_PP_NODE_127)
+# define BOOST_PP_NODE_125(p) BOOST_PP_IIF(p(125), 125, 126)
+# define BOOST_PP_NODE_127(p) BOOST_PP_IIF(p(127), 127, 128)
+# define BOOST_PP_NODE_192(p) BOOST_PP_IIF(p(192), BOOST_PP_NODE_160, BOOST_PP_NODE_224)
+# define BOOST_PP_NODE_160(p) BOOST_PP_IIF(p(160), BOOST_PP_NODE_144, BOOST_PP_NODE_176)
+# define BOOST_PP_NODE_144(p) BOOST_PP_IIF(p(144), BOOST_PP_NODE_136, BOOST_PP_NODE_152)
+# define BOOST_PP_NODE_136(p) BOOST_PP_IIF(p(136), BOOST_PP_NODE_132, BOOST_PP_NODE_140)
+# define BOOST_PP_NODE_132(p) BOOST_PP_IIF(p(132), BOOST_PP_NODE_130, BOOST_PP_NODE_134)
+# define BOOST_PP_NODE_130(p) BOOST_PP_IIF(p(130), BOOST_PP_NODE_129, BOOST_PP_NODE_131)
+# define BOOST_PP_NODE_129(p) BOOST_PP_IIF(p(129), 129, 130)
+# define BOOST_PP_NODE_131(p) BOOST_PP_IIF(p(131), 131, 132)
+# define BOOST_PP_NODE_134(p) BOOST_PP_IIF(p(134), BOOST_PP_NODE_133, BOOST_PP_NODE_135)
+# define BOOST_PP_NODE_133(p) BOOST_PP_IIF(p(133), 133, 134)
+# define BOOST_PP_NODE_135(p) BOOST_PP_IIF(p(135), 135, 136)
+# define BOOST_PP_NODE_140(p) BOOST_PP_IIF(p(140), BOOST_PP_NODE_138, BOOST_PP_NODE_142)
+# define BOOST_PP_NODE_138(p) BOOST_PP_IIF(p(138), BOOST_PP_NODE_137, BOOST_PP_NODE_139)
+# define BOOST_PP_NODE_137(p) BOOST_PP_IIF(p(137), 137, 138)
+# define BOOST_PP_NODE_139(p) BOOST_PP_IIF(p(139), 139, 140)
+# define BOOST_PP_NODE_142(p) BOOST_PP_IIF(p(142), BOOST_PP_NODE_141, BOOST_PP_NODE_143)
+# define BOOST_PP_NODE_141(p) BOOST_PP_IIF(p(141), 141, 142)
+# define BOOST_PP_NODE_143(p) BOOST_PP_IIF(p(143), 143, 144)
+# define BOOST_PP_NODE_152(p) BOOST_PP_IIF(p(152), BOOST_PP_NODE_148, BOOST_PP_NODE_156)
+# define BOOST_PP_NODE_148(p) BOOST_PP_IIF(p(148), BOOST_PP_NODE_146, BOOST_PP_NODE_150)
+# define BOOST_PP_NODE_146(p) BOOST_PP_IIF(p(146), BOOST_PP_NODE_145, BOOST_PP_NODE_147)
+# define BOOST_PP_NODE_145(p) BOOST_PP_IIF(p(145), 145, 146)
+# define BOOST_PP_NODE_147(p) BOOST_PP_IIF(p(147), 147, 148)
+# define BOOST_PP_NODE_150(p) BOOST_PP_IIF(p(150), BOOST_PP_NODE_149, BOOST_PP_NODE_151)
+# define BOOST_PP_NODE_149(p) BOOST_PP_IIF(p(149), 149, 150)
+# define BOOST_PP_NODE_151(p) BOOST_PP_IIF(p(151), 151, 152)
+# define BOOST_PP_NODE_156(p) BOOST_PP_IIF(p(156), BOOST_PP_NODE_154, BOOST_PP_NODE_158)
+# define BOOST_PP_NODE_154(p) BOOST_PP_IIF(p(154), BOOST_PP_NODE_153, BOOST_PP_NODE_155)
+# define BOOST_PP_NODE_153(p) BOOST_PP_IIF(p(153), 153, 154)
+# define BOOST_PP_NODE_155(p) BOOST_PP_IIF(p(155), 155, 156)
+# define BOOST_PP_NODE_158(p) BOOST_PP_IIF(p(158), BOOST_PP_NODE_157, BOOST_PP_NODE_159)
+# define BOOST_PP_NODE_157(p) BOOST_PP_IIF(p(157), 157, 158)
+# define BOOST_PP_NODE_159(p) BOOST_PP_IIF(p(159), 159, 160)
+# define BOOST_PP_NODE_176(p) BOOST_PP_IIF(p(176), BOOST_PP_NODE_168, BOOST_PP_NODE_184)
+# define BOOST_PP_NODE_168(p) BOOST_PP_IIF(p(168), BOOST_PP_NODE_164, BOOST_PP_NODE_172)
+# define BOOST_PP_NODE_164(p) BOOST_PP_IIF(p(164), BOOST_PP_NODE_162, BOOST_PP_NODE_166)
+# define BOOST_PP_NODE_162(p) BOOST_PP_IIF(p(162), BOOST_PP_NODE_161, BOOST_PP_NODE_163)
+# define BOOST_PP_NODE_161(p) BOOST_PP_IIF(p(161), 161, 162)
+# define BOOST_PP_NODE_163(p) BOOST_PP_IIF(p(163), 163, 164)
+# define BOOST_PP_NODE_166(p) BOOST_PP_IIF(p(166), BOOST_PP_NODE_165, BOOST_PP_NODE_167)
+# define BOOST_PP_NODE_165(p) BOOST_PP_IIF(p(165), 165, 166)
+# define BOOST_PP_NODE_167(p) BOOST_PP_IIF(p(167), 167, 168)
+# define BOOST_PP_NODE_172(p) BOOST_PP_IIF(p(172), BOOST_PP_NODE_170, BOOST_PP_NODE_174)
+# define BOOST_PP_NODE_170(p) BOOST_PP_IIF(p(170), BOOST_PP_NODE_169, BOOST_PP_NODE_171)
+# define BOOST_PP_NODE_169(p) BOOST_PP_IIF(p(169), 169, 170)
+# define BOOST_PP_NODE_171(p) BOOST_PP_IIF(p(171), 171, 172)
+# define BOOST_PP_NODE_174(p) BOOST_PP_IIF(p(174), BOOST_PP_NODE_173, BOOST_PP_NODE_175)
+# define BOOST_PP_NODE_173(p) BOOST_PP_IIF(p(173), 173, 174)
+# define BOOST_PP_NODE_175(p) BOOST_PP_IIF(p(175), 175, 176)
+# define BOOST_PP_NODE_184(p) BOOST_PP_IIF(p(184), BOOST_PP_NODE_180, BOOST_PP_NODE_188)
+# define BOOST_PP_NODE_180(p) BOOST_PP_IIF(p(180), BOOST_PP_NODE_178, BOOST_PP_NODE_182)
+# define BOOST_PP_NODE_178(p) BOOST_PP_IIF(p(178), BOOST_PP_NODE_177, BOOST_PP_NODE_179)
+# define BOOST_PP_NODE_177(p) BOOST_PP_IIF(p(177), 177, 178)
+# define BOOST_PP_NODE_179(p) BOOST_PP_IIF(p(179), 179, 180)
+# define BOOST_PP_NODE_182(p) BOOST_PP_IIF(p(182), BOOST_PP_NODE_181, BOOST_PP_NODE_183)
+# define BOOST_PP_NODE_181(p) BOOST_PP_IIF(p(181), 181, 182)
+# define BOOST_PP_NODE_183(p) BOOST_PP_IIF(p(183), 183, 184)
+# define BOOST_PP_NODE_188(p) BOOST_PP_IIF(p(188), BOOST_PP_NODE_186, BOOST_PP_NODE_190)
+# define BOOST_PP_NODE_186(p) BOOST_PP_IIF(p(186), BOOST_PP_NODE_185, BOOST_PP_NODE_187)
+# define BOOST_PP_NODE_185(p) BOOST_PP_IIF(p(185), 185, 186)
+# define BOOST_PP_NODE_187(p) BOOST_PP_IIF(p(187), 187, 188)
+# define BOOST_PP_NODE_190(p) BOOST_PP_IIF(p(190), BOOST_PP_NODE_189, BOOST_PP_NODE_191)
+# define BOOST_PP_NODE_189(p) BOOST_PP_IIF(p(189), 189, 190)
+# define BOOST_PP_NODE_191(p) BOOST_PP_IIF(p(191), 191, 192)
+# define BOOST_PP_NODE_224(p) BOOST_PP_IIF(p(224), BOOST_PP_NODE_208, BOOST_PP_NODE_240)
+# define BOOST_PP_NODE_208(p) BOOST_PP_IIF(p(208), BOOST_PP_NODE_200, BOOST_PP_NODE_216)
+# define BOOST_PP_NODE_200(p) BOOST_PP_IIF(p(200), BOOST_PP_NODE_196, BOOST_PP_NODE_204)
+# define BOOST_PP_NODE_196(p) BOOST_PP_IIF(p(196), BOOST_PP_NODE_194, BOOST_PP_NODE_198)
+# define BOOST_PP_NODE_194(p) BOOST_PP_IIF(p(194), BOOST_PP_NODE_193, BOOST_PP_NODE_195)
+# define BOOST_PP_NODE_193(p) BOOST_PP_IIF(p(193), 193, 194)
+# define BOOST_PP_NODE_195(p) BOOST_PP_IIF(p(195), 195, 196)
+# define BOOST_PP_NODE_198(p) BOOST_PP_IIF(p(198), BOOST_PP_NODE_197, BOOST_PP_NODE_199)
+# define BOOST_PP_NODE_197(p) BOOST_PP_IIF(p(197), 197, 198)
+# define BOOST_PP_NODE_199(p) BOOST_PP_IIF(p(199), 199, 200)
+# define BOOST_PP_NODE_204(p) BOOST_PP_IIF(p(204), BOOST_PP_NODE_202, BOOST_PP_NODE_206)
+# define BOOST_PP_NODE_202(p) BOOST_PP_IIF(p(202), BOOST_PP_NODE_201, BOOST_PP_NODE_203)
+# define BOOST_PP_NODE_201(p) BOOST_PP_IIF(p(201), 201, 202)
+# define BOOST_PP_NODE_203(p) BOOST_PP_IIF(p(203), 203, 204)
+# define BOOST_PP_NODE_206(p) BOOST_PP_IIF(p(206), BOOST_PP_NODE_205, BOOST_PP_NODE_207)
+# define BOOST_PP_NODE_205(p) BOOST_PP_IIF(p(205), 205, 206)
+# define BOOST_PP_NODE_207(p) BOOST_PP_IIF(p(207), 207, 208)
+# define BOOST_PP_NODE_216(p) BOOST_PP_IIF(p(216), BOOST_PP_NODE_212, BOOST_PP_NODE_220)
+# define BOOST_PP_NODE_212(p) BOOST_PP_IIF(p(212), BOOST_PP_NODE_210, BOOST_PP_NODE_214)
+# define BOOST_PP_NODE_210(p) BOOST_PP_IIF(p(210), BOOST_PP_NODE_209, BOOST_PP_NODE_211)
+# define BOOST_PP_NODE_209(p) BOOST_PP_IIF(p(209), 209, 210)
+# define BOOST_PP_NODE_211(p) BOOST_PP_IIF(p(211), 211, 212)
+# define BOOST_PP_NODE_214(p) BOOST_PP_IIF(p(214), BOOST_PP_NODE_213, BOOST_PP_NODE_215)
+# define BOOST_PP_NODE_213(p) BOOST_PP_IIF(p(213), 213, 214)
+# define BOOST_PP_NODE_215(p) BOOST_PP_IIF(p(215), 215, 216)
+# define BOOST_PP_NODE_220(p) BOOST_PP_IIF(p(220), BOOST_PP_NODE_218, BOOST_PP_NODE_222)
+# define BOOST_PP_NODE_218(p) BOOST_PP_IIF(p(218), BOOST_PP_NODE_217, BOOST_PP_NODE_219)
+# define BOOST_PP_NODE_217(p) BOOST_PP_IIF(p(217), 217, 218)
+# define BOOST_PP_NODE_219(p) BOOST_PP_IIF(p(219), 219, 220)
+# define BOOST_PP_NODE_222(p) BOOST_PP_IIF(p(222), BOOST_PP_NODE_221, BOOST_PP_NODE_223)
+# define BOOST_PP_NODE_221(p) BOOST_PP_IIF(p(221), 221, 222)
+# define BOOST_PP_NODE_223(p) BOOST_PP_IIF(p(223), 223, 224)
+# define BOOST_PP_NODE_240(p) BOOST_PP_IIF(p(240), BOOST_PP_NODE_232, BOOST_PP_NODE_248)
+# define BOOST_PP_NODE_232(p) BOOST_PP_IIF(p(232), BOOST_PP_NODE_228, BOOST_PP_NODE_236)
+# define BOOST_PP_NODE_228(p) BOOST_PP_IIF(p(228), BOOST_PP_NODE_226, BOOST_PP_NODE_230)
+# define BOOST_PP_NODE_226(p) BOOST_PP_IIF(p(226), BOOST_PP_NODE_225, BOOST_PP_NODE_227)
+# define BOOST_PP_NODE_225(p) BOOST_PP_IIF(p(225), 225, 226)
+# define BOOST_PP_NODE_227(p) BOOST_PP_IIF(p(227), 227, 228)
+# define BOOST_PP_NODE_230(p) BOOST_PP_IIF(p(230), BOOST_PP_NODE_229, BOOST_PP_NODE_231)
+# define BOOST_PP_NODE_229(p) BOOST_PP_IIF(p(229), 229, 230)
+# define BOOST_PP_NODE_231(p) BOOST_PP_IIF(p(231), 231, 232)
+# define BOOST_PP_NODE_236(p) BOOST_PP_IIF(p(236), BOOST_PP_NODE_234, BOOST_PP_NODE_238)
+# define BOOST_PP_NODE_234(p) BOOST_PP_IIF(p(234), BOOST_PP_NODE_233, BOOST_PP_NODE_235)
+# define BOOST_PP_NODE_233(p) BOOST_PP_IIF(p(233), 233, 234)
+# define BOOST_PP_NODE_235(p) BOOST_PP_IIF(p(235), 235, 236)
+# define BOOST_PP_NODE_238(p) BOOST_PP_IIF(p(238), BOOST_PP_NODE_237, BOOST_PP_NODE_239)
+# define BOOST_PP_NODE_237(p) BOOST_PP_IIF(p(237), 237, 238)
+# define BOOST_PP_NODE_239(p) BOOST_PP_IIF(p(239), 239, 240)
+# define BOOST_PP_NODE_248(p) BOOST_PP_IIF(p(248), BOOST_PP_NODE_244, BOOST_PP_NODE_252)
+# define BOOST_PP_NODE_244(p) BOOST_PP_IIF(p(244), BOOST_PP_NODE_242, BOOST_PP_NODE_246)
+# define BOOST_PP_NODE_242(p) BOOST_PP_IIF(p(242), BOOST_PP_NODE_241, BOOST_PP_NODE_243)
+# define BOOST_PP_NODE_241(p) BOOST_PP_IIF(p(241), 241, 242)
+# define BOOST_PP_NODE_243(p) BOOST_PP_IIF(p(243), 243, 244)
+# define BOOST_PP_NODE_246(p) BOOST_PP_IIF(p(246), BOOST_PP_NODE_245, BOOST_PP_NODE_247)
+# define BOOST_PP_NODE_245(p) BOOST_PP_IIF(p(245), 245, 246)
+# define BOOST_PP_NODE_247(p) BOOST_PP_IIF(p(247), 247, 248)
+# define BOOST_PP_NODE_252(p) BOOST_PP_IIF(p(252), BOOST_PP_NODE_250, BOOST_PP_NODE_254)
+# define BOOST_PP_NODE_250(p) BOOST_PP_IIF(p(250), BOOST_PP_NODE_249, BOOST_PP_NODE_251)
+# define BOOST_PP_NODE_249(p) BOOST_PP_IIF(p(249), 249, 250)
+# define BOOST_PP_NODE_251(p) BOOST_PP_IIF(p(251), 251, 252)
+# define BOOST_PP_NODE_254(p) BOOST_PP_IIF(p(254), BOOST_PP_NODE_253, BOOST_PP_NODE_255)
+# define BOOST_PP_NODE_253(p) BOOST_PP_IIF(p(253), 253, 254)
+# define BOOST_PP_NODE_255(p) BOOST_PP_IIF(p(255), 255, 256)
+#
+# endif
+# endif
diff --git a/boost/boost/preprocessor/detail/check.hpp b/boost/boost/preprocessor/detail/check.hpp
new file mode 100644
index 00000000000..6346be7ff68
--- /dev/null
+++ b/boost/boost/preprocessor/detail/check.hpp
@@ -0,0 +1,48 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_DETAIL_CHECK_HPP
+# define BOOST_PREPROCESSOR_DETAIL_CHECK_HPP
+#
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/config/config.hpp>
+#
+# /* BOOST_PP_CHECK */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+# define BOOST_PP_CHECK(x, type) BOOST_PP_CHECK_D(x, type)
+# else
+# define BOOST_PP_CHECK(x, type) BOOST_PP_CHECK_OO((x, type))
+# define BOOST_PP_CHECK_OO(par) BOOST_PP_CHECK_D ## par
+# endif
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC() && ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_DMC()
+# define BOOST_PP_CHECK_D(x, type) BOOST_PP_CHECK_1(BOOST_PP_CAT(BOOST_PP_CHECK_RESULT_, type x))
+# define BOOST_PP_CHECK_1(chk) BOOST_PP_CHECK_2(chk)
+# define BOOST_PP_CHECK_2(res, _) res
+# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()
+# define BOOST_PP_CHECK_D(x, type) BOOST_PP_CHECK_1(type x)
+# define BOOST_PP_CHECK_1(chk) BOOST_PP_CHECK_2(chk)
+# define BOOST_PP_CHECK_2(chk) BOOST_PP_CHECK_3((BOOST_PP_CHECK_RESULT_ ## chk))
+# define BOOST_PP_CHECK_3(im) BOOST_PP_CHECK_5(BOOST_PP_CHECK_4 im)
+# define BOOST_PP_CHECK_4(res, _) res
+# define BOOST_PP_CHECK_5(res) res
+# else // DMC
+# define BOOST_PP_CHECK_D(x, type) BOOST_PP_CHECK_OO((type x))
+# define BOOST_PP_CHECK_OO(par) BOOST_PP_CHECK_0 ## par
+# define BOOST_PP_CHECK_0(chk) BOOST_PP_CHECK_1(BOOST_PP_CAT(BOOST_PP_CHECK_RESULT_, chk))
+# define BOOST_PP_CHECK_1(chk) BOOST_PP_CHECK_2(chk)
+# define BOOST_PP_CHECK_2(res, _) res
+# endif
+#
+# define BOOST_PP_CHECK_RESULT_1 1, BOOST_PP_NIL
+#
+# endif
diff --git a/boost/boost/preprocessor/detail/dmc/auto_rec.hpp b/boost/boost/preprocessor/detail/dmc/auto_rec.hpp
new file mode 100644
index 00000000000..37fbe04157c
--- /dev/null
+++ b/boost/boost/preprocessor/detail/dmc/auto_rec.hpp
@@ -0,0 +1,286 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_DETAIL_AUTO_REC_HPP
+# define BOOST_PREPROCESSOR_DETAIL_AUTO_REC_HPP
+#
+# include <boost/preprocessor/control/iif.hpp>
+#
+# /* BOOST_PP_AUTO_REC */
+#
+# define BOOST_PP_AUTO_REC(pred, n) BOOST_PP_NODE_ENTRY_ ## n(pred)
+#
+# define BOOST_PP_NODE_ENTRY_256(p) BOOST_PP_NODE_128(p)(p)(p)(p)(p)(p)(p)(p)
+# define BOOST_PP_NODE_ENTRY_128(p) BOOST_PP_NODE_64(p)(p)(p)(p)(p)(p)(p)
+# define BOOST_PP_NODE_ENTRY_64(p) BOOST_PP_NODE_32(p)(p)(p)(p)(p)(p)
+# define BOOST_PP_NODE_ENTRY_32(p) BOOST_PP_NODE_16(p)(p)(p)(p)(p)
+# define BOOST_PP_NODE_ENTRY_16(p) BOOST_PP_NODE_8(p)(p)(p)(p)
+# define BOOST_PP_NODE_ENTRY_8(p) BOOST_PP_NODE_4(p)(p)(p)
+# define BOOST_PP_NODE_ENTRY_4(p) BOOST_PP_NODE_2(p)(p)
+# define BOOST_PP_NODE_ENTRY_2(p) BOOST_PP_NODE_1(p)
+#
+# define BOOST_PP_NODE_128(p) BOOST_PP_IIF(p##(128), BOOST_PP_NODE_64, BOOST_PP_NODE_192)
+# define BOOST_PP_NODE_64(p) BOOST_PP_IIF(p##(64), BOOST_PP_NODE_32, BOOST_PP_NODE_96)
+# define BOOST_PP_NODE_32(p) BOOST_PP_IIF(p##(32), BOOST_PP_NODE_16, BOOST_PP_NODE_48)
+# define BOOST_PP_NODE_16(p) BOOST_PP_IIF(p##(16), BOOST_PP_NODE_8, BOOST_PP_NODE_24)
+# define BOOST_PP_NODE_8(p) BOOST_PP_IIF(p##(8), BOOST_PP_NODE_4, BOOST_PP_NODE_12)
+# define BOOST_PP_NODE_4(p) BOOST_PP_IIF(p##(4), BOOST_PP_NODE_2, BOOST_PP_NODE_6)
+# define BOOST_PP_NODE_2(p) BOOST_PP_IIF(p##(2), BOOST_PP_NODE_1, BOOST_PP_NODE_3)
+# define BOOST_PP_NODE_1(p) BOOST_PP_IIF(p##(1), 1, 2)
+# define BOOST_PP_NODE_3(p) BOOST_PP_IIF(p##(3), 3, 4)
+# define BOOST_PP_NODE_6(p) BOOST_PP_IIF(p##(6), BOOST_PP_NODE_5, BOOST_PP_NODE_7)
+# define BOOST_PP_NODE_5(p) BOOST_PP_IIF(p##(5), 5, 6)
+# define BOOST_PP_NODE_7(p) BOOST_PP_IIF(p##(7), 7, 8)
+# define BOOST_PP_NODE_12(p) BOOST_PP_IIF(p##(12), BOOST_PP_NODE_10, BOOST_PP_NODE_14)
+# define BOOST_PP_NODE_10(p) BOOST_PP_IIF(p##(10), BOOST_PP_NODE_9, BOOST_PP_NODE_11)
+# define BOOST_PP_NODE_9(p) BOOST_PP_IIF(p##(9), 9, 10)
+# define BOOST_PP_NODE_11(p) BOOST_PP_IIF(p##(11), 11, 12)
+# define BOOST_PP_NODE_14(p) BOOST_PP_IIF(p##(14), BOOST_PP_NODE_13, BOOST_PP_NODE_15)
+# define BOOST_PP_NODE_13(p) BOOST_PP_IIF(p##(13), 13, 14)
+# define BOOST_PP_NODE_15(p) BOOST_PP_IIF(p##(15), 15, 16)
+# define BOOST_PP_NODE_24(p) BOOST_PP_IIF(p##(24), BOOST_PP_NODE_20, BOOST_PP_NODE_28)
+# define BOOST_PP_NODE_20(p) BOOST_PP_IIF(p##(20), BOOST_PP_NODE_18, BOOST_PP_NODE_22)
+# define BOOST_PP_NODE_18(p) BOOST_PP_IIF(p##(18), BOOST_PP_NODE_17, BOOST_PP_NODE_19)
+# define BOOST_PP_NODE_17(p) BOOST_PP_IIF(p##(17), 17, 18)
+# define BOOST_PP_NODE_19(p) BOOST_PP_IIF(p##(19), 19, 20)
+# define BOOST_PP_NODE_22(p) BOOST_PP_IIF(p##(22), BOOST_PP_NODE_21, BOOST_PP_NODE_23)
+# define BOOST_PP_NODE_21(p) BOOST_PP_IIF(p##(21), 21, 22)
+# define BOOST_PP_NODE_23(p) BOOST_PP_IIF(p##(23), 23, 24)
+# define BOOST_PP_NODE_28(p) BOOST_PP_IIF(p##(28), BOOST_PP_NODE_26, BOOST_PP_NODE_30)
+# define BOOST_PP_NODE_26(p) BOOST_PP_IIF(p##(26), BOOST_PP_NODE_25, BOOST_PP_NODE_27)
+# define BOOST_PP_NODE_25(p) BOOST_PP_IIF(p##(25), 25, 26)
+# define BOOST_PP_NODE_27(p) BOOST_PP_IIF(p##(27), 27, 28)
+# define BOOST_PP_NODE_30(p) BOOST_PP_IIF(p##(30), BOOST_PP_NODE_29, BOOST_PP_NODE_31)
+# define BOOST_PP_NODE_29(p) BOOST_PP_IIF(p##(29), 29, 30)
+# define BOOST_PP_NODE_31(p) BOOST_PP_IIF(p##(31), 31, 32)
+# define BOOST_PP_NODE_48(p) BOOST_PP_IIF(p##(48), BOOST_PP_NODE_40, BOOST_PP_NODE_56)
+# define BOOST_PP_NODE_40(p) BOOST_PP_IIF(p##(40), BOOST_PP_NODE_36, BOOST_PP_NODE_44)
+# define BOOST_PP_NODE_36(p) BOOST_PP_IIF(p##(36), BOOST_PP_NODE_34, BOOST_PP_NODE_38)
+# define BOOST_PP_NODE_34(p) BOOST_PP_IIF(p##(34), BOOST_PP_NODE_33, BOOST_PP_NODE_35)
+# define BOOST_PP_NODE_33(p) BOOST_PP_IIF(p##(33), 33, 34)
+# define BOOST_PP_NODE_35(p) BOOST_PP_IIF(p##(35), 35, 36)
+# define BOOST_PP_NODE_38(p) BOOST_PP_IIF(p##(38), BOOST_PP_NODE_37, BOOST_PP_NODE_39)
+# define BOOST_PP_NODE_37(p) BOOST_PP_IIF(p##(37), 37, 38)
+# define BOOST_PP_NODE_39(p) BOOST_PP_IIF(p##(39), 39, 40)
+# define BOOST_PP_NODE_44(p) BOOST_PP_IIF(p##(44), BOOST_PP_NODE_42, BOOST_PP_NODE_46)
+# define BOOST_PP_NODE_42(p) BOOST_PP_IIF(p##(42), BOOST_PP_NODE_41, BOOST_PP_NODE_43)
+# define BOOST_PP_NODE_41(p) BOOST_PP_IIF(p##(41), 41, 42)
+# define BOOST_PP_NODE_43(p) BOOST_PP_IIF(p##(43), 43, 44)
+# define BOOST_PP_NODE_46(p) BOOST_PP_IIF(p##(46), BOOST_PP_NODE_45, BOOST_PP_NODE_47)
+# define BOOST_PP_NODE_45(p) BOOST_PP_IIF(p##(45), 45, 46)
+# define BOOST_PP_NODE_47(p) BOOST_PP_IIF(p##(47), 47, 48)
+# define BOOST_PP_NODE_56(p) BOOST_PP_IIF(p##(56), BOOST_PP_NODE_52, BOOST_PP_NODE_60)
+# define BOOST_PP_NODE_52(p) BOOST_PP_IIF(p##(52), BOOST_PP_NODE_50, BOOST_PP_NODE_54)
+# define BOOST_PP_NODE_50(p) BOOST_PP_IIF(p##(50), BOOST_PP_NODE_49, BOOST_PP_NODE_51)
+# define BOOST_PP_NODE_49(p) BOOST_PP_IIF(p##(49), 49, 50)
+# define BOOST_PP_NODE_51(p) BOOST_PP_IIF(p##(51), 51, 52)
+# define BOOST_PP_NODE_54(p) BOOST_PP_IIF(p##(54), BOOST_PP_NODE_53, BOOST_PP_NODE_55)
+# define BOOST_PP_NODE_53(p) BOOST_PP_IIF(p##(53), 53, 54)
+# define BOOST_PP_NODE_55(p) BOOST_PP_IIF(p##(55), 55, 56)
+# define BOOST_PP_NODE_60(p) BOOST_PP_IIF(p##(60), BOOST_PP_NODE_58, BOOST_PP_NODE_62)
+# define BOOST_PP_NODE_58(p) BOOST_PP_IIF(p##(58), BOOST_PP_NODE_57, BOOST_PP_NODE_59)
+# define BOOST_PP_NODE_57(p) BOOST_PP_IIF(p##(57), 57, 58)
+# define BOOST_PP_NODE_59(p) BOOST_PP_IIF(p##(59), 59, 60)
+# define BOOST_PP_NODE_62(p) BOOST_PP_IIF(p##(62), BOOST_PP_NODE_61, BOOST_PP_NODE_63)
+# define BOOST_PP_NODE_61(p) BOOST_PP_IIF(p##(61), 61, 62)
+# define BOOST_PP_NODE_63(p) BOOST_PP_IIF(p##(63), 63, 64)
+# define BOOST_PP_NODE_96(p) BOOST_PP_IIF(p##(96), BOOST_PP_NODE_80, BOOST_PP_NODE_112)
+# define BOOST_PP_NODE_80(p) BOOST_PP_IIF(p##(80), BOOST_PP_NODE_72, BOOST_PP_NODE_88)
+# define BOOST_PP_NODE_72(p) BOOST_PP_IIF(p##(72), BOOST_PP_NODE_68, BOOST_PP_NODE_76)
+# define BOOST_PP_NODE_68(p) BOOST_PP_IIF(p##(68), BOOST_PP_NODE_66, BOOST_PP_NODE_70)
+# define BOOST_PP_NODE_66(p) BOOST_PP_IIF(p##(66), BOOST_PP_NODE_65, BOOST_PP_NODE_67)
+# define BOOST_PP_NODE_65(p) BOOST_PP_IIF(p##(65), 65, 66)
+# define BOOST_PP_NODE_67(p) BOOST_PP_IIF(p##(67), 67, 68)
+# define BOOST_PP_NODE_70(p) BOOST_PP_IIF(p##(70), BOOST_PP_NODE_69, BOOST_PP_NODE_71)
+# define BOOST_PP_NODE_69(p) BOOST_PP_IIF(p##(69), 69, 70)
+# define BOOST_PP_NODE_71(p) BOOST_PP_IIF(p##(71), 71, 72)
+# define BOOST_PP_NODE_76(p) BOOST_PP_IIF(p##(76), BOOST_PP_NODE_74, BOOST_PP_NODE_78)
+# define BOOST_PP_NODE_74(p) BOOST_PP_IIF(p##(74), BOOST_PP_NODE_73, BOOST_PP_NODE_75)
+# define BOOST_PP_NODE_73(p) BOOST_PP_IIF(p##(73), 73, 74)
+# define BOOST_PP_NODE_75(p) BOOST_PP_IIF(p##(75), 75, 76)
+# define BOOST_PP_NODE_78(p) BOOST_PP_IIF(p##(78), BOOST_PP_NODE_77, BOOST_PP_NODE_79)
+# define BOOST_PP_NODE_77(p) BOOST_PP_IIF(p##(77), 77, 78)
+# define BOOST_PP_NODE_79(p) BOOST_PP_IIF(p##(79), 79, 80)
+# define BOOST_PP_NODE_88(p) BOOST_PP_IIF(p##(88), BOOST_PP_NODE_84, BOOST_PP_NODE_92)
+# define BOOST_PP_NODE_84(p) BOOST_PP_IIF(p##(84), BOOST_PP_NODE_82, BOOST_PP_NODE_86)
+# define BOOST_PP_NODE_82(p) BOOST_PP_IIF(p##(82), BOOST_PP_NODE_81, BOOST_PP_NODE_83)
+# define BOOST_PP_NODE_81(p) BOOST_PP_IIF(p##(81), 81, 82)
+# define BOOST_PP_NODE_83(p) BOOST_PP_IIF(p##(83), 83, 84)
+# define BOOST_PP_NODE_86(p) BOOST_PP_IIF(p##(86), BOOST_PP_NODE_85, BOOST_PP_NODE_87)
+# define BOOST_PP_NODE_85(p) BOOST_PP_IIF(p##(85), 85, 86)
+# define BOOST_PP_NODE_87(p) BOOST_PP_IIF(p##(87), 87, 88)
+# define BOOST_PP_NODE_92(p) BOOST_PP_IIF(p##(92), BOOST_PP_NODE_90, BOOST_PP_NODE_94)
+# define BOOST_PP_NODE_90(p) BOOST_PP_IIF(p##(90), BOOST_PP_NODE_89, BOOST_PP_NODE_91)
+# define BOOST_PP_NODE_89(p) BOOST_PP_IIF(p##(89), 89, 90)
+# define BOOST_PP_NODE_91(p) BOOST_PP_IIF(p##(91), 91, 92)
+# define BOOST_PP_NODE_94(p) BOOST_PP_IIF(p##(94), BOOST_PP_NODE_93, BOOST_PP_NODE_95)
+# define BOOST_PP_NODE_93(p) BOOST_PP_IIF(p##(93), 93, 94)
+# define BOOST_PP_NODE_95(p) BOOST_PP_IIF(p##(95), 95, 96)
+# define BOOST_PP_NODE_112(p) BOOST_PP_IIF(p##(112), BOOST_PP_NODE_104, BOOST_PP_NODE_120)
+# define BOOST_PP_NODE_104(p) BOOST_PP_IIF(p##(104), BOOST_PP_NODE_100, BOOST_PP_NODE_108)
+# define BOOST_PP_NODE_100(p) BOOST_PP_IIF(p##(100), BOOST_PP_NODE_98, BOOST_PP_NODE_102)
+# define BOOST_PP_NODE_98(p) BOOST_PP_IIF(p##(98), BOOST_PP_NODE_97, BOOST_PP_NODE_99)
+# define BOOST_PP_NODE_97(p) BOOST_PP_IIF(p##(97), 97, 98)
+# define BOOST_PP_NODE_99(p) BOOST_PP_IIF(p##(99), 99, 100)
+# define BOOST_PP_NODE_102(p) BOOST_PP_IIF(p##(102), BOOST_PP_NODE_101, BOOST_PP_NODE_103)
+# define BOOST_PP_NODE_101(p) BOOST_PP_IIF(p##(101), 101, 102)
+# define BOOST_PP_NODE_103(p) BOOST_PP_IIF(p##(103), 103, 104)
+# define BOOST_PP_NODE_108(p) BOOST_PP_IIF(p##(108), BOOST_PP_NODE_106, BOOST_PP_NODE_110)
+# define BOOST_PP_NODE_106(p) BOOST_PP_IIF(p##(106), BOOST_PP_NODE_105, BOOST_PP_NODE_107)
+# define BOOST_PP_NODE_105(p) BOOST_PP_IIF(p##(105), 105, 106)
+# define BOOST_PP_NODE_107(p) BOOST_PP_IIF(p##(107), 107, 108)
+# define BOOST_PP_NODE_110(p) BOOST_PP_IIF(p##(110), BOOST_PP_NODE_109, BOOST_PP_NODE_111)
+# define BOOST_PP_NODE_109(p) BOOST_PP_IIF(p##(109), 109, 110)
+# define BOOST_PP_NODE_111(p) BOOST_PP_IIF(p##(111), 111, 112)
+# define BOOST_PP_NODE_120(p) BOOST_PP_IIF(p##(120), BOOST_PP_NODE_116, BOOST_PP_NODE_124)
+# define BOOST_PP_NODE_116(p) BOOST_PP_IIF(p##(116), BOOST_PP_NODE_114, BOOST_PP_NODE_118)
+# define BOOST_PP_NODE_114(p) BOOST_PP_IIF(p##(114), BOOST_PP_NODE_113, BOOST_PP_NODE_115)
+# define BOOST_PP_NODE_113(p) BOOST_PP_IIF(p##(113), 113, 114)
+# define BOOST_PP_NODE_115(p) BOOST_PP_IIF(p##(115), 115, 116)
+# define BOOST_PP_NODE_118(p) BOOST_PP_IIF(p##(118), BOOST_PP_NODE_117, BOOST_PP_NODE_119)
+# define BOOST_PP_NODE_117(p) BOOST_PP_IIF(p##(117), 117, 118)
+# define BOOST_PP_NODE_119(p) BOOST_PP_IIF(p##(119), 119, 120)
+# define BOOST_PP_NODE_124(p) BOOST_PP_IIF(p##(124), BOOST_PP_NODE_122, BOOST_PP_NODE_126)
+# define BOOST_PP_NODE_122(p) BOOST_PP_IIF(p##(122), BOOST_PP_NODE_121, BOOST_PP_NODE_123)
+# define BOOST_PP_NODE_121(p) BOOST_PP_IIF(p##(121), 121, 122)
+# define BOOST_PP_NODE_123(p) BOOST_PP_IIF(p##(123), 123, 124)
+# define BOOST_PP_NODE_126(p) BOOST_PP_IIF(p##(126), BOOST_PP_NODE_125, BOOST_PP_NODE_127)
+# define BOOST_PP_NODE_125(p) BOOST_PP_IIF(p##(125), 125, 126)
+# define BOOST_PP_NODE_127(p) BOOST_PP_IIF(p##(127), 127, 128)
+# define BOOST_PP_NODE_192(p) BOOST_PP_IIF(p##(192), BOOST_PP_NODE_160, BOOST_PP_NODE_224)
+# define BOOST_PP_NODE_160(p) BOOST_PP_IIF(p##(160), BOOST_PP_NODE_144, BOOST_PP_NODE_176)
+# define BOOST_PP_NODE_144(p) BOOST_PP_IIF(p##(144), BOOST_PP_NODE_136, BOOST_PP_NODE_152)
+# define BOOST_PP_NODE_136(p) BOOST_PP_IIF(p##(136), BOOST_PP_NODE_132, BOOST_PP_NODE_140)
+# define BOOST_PP_NODE_132(p) BOOST_PP_IIF(p##(132), BOOST_PP_NODE_130, BOOST_PP_NODE_134)
+# define BOOST_PP_NODE_130(p) BOOST_PP_IIF(p##(130), BOOST_PP_NODE_129, BOOST_PP_NODE_131)
+# define BOOST_PP_NODE_129(p) BOOST_PP_IIF(p##(129), 129, 130)
+# define BOOST_PP_NODE_131(p) BOOST_PP_IIF(p##(131), 131, 132)
+# define BOOST_PP_NODE_134(p) BOOST_PP_IIF(p##(134), BOOST_PP_NODE_133, BOOST_PP_NODE_135)
+# define BOOST_PP_NODE_133(p) BOOST_PP_IIF(p##(133), 133, 134)
+# define BOOST_PP_NODE_135(p) BOOST_PP_IIF(p##(135), 135, 136)
+# define BOOST_PP_NODE_140(p) BOOST_PP_IIF(p##(140), BOOST_PP_NODE_138, BOOST_PP_NODE_142)
+# define BOOST_PP_NODE_138(p) BOOST_PP_IIF(p##(138), BOOST_PP_NODE_137, BOOST_PP_NODE_139)
+# define BOOST_PP_NODE_137(p) BOOST_PP_IIF(p##(137), 137, 138)
+# define BOOST_PP_NODE_139(p) BOOST_PP_IIF(p##(139), 139, 140)
+# define BOOST_PP_NODE_142(p) BOOST_PP_IIF(p##(142), BOOST_PP_NODE_141, BOOST_PP_NODE_143)
+# define BOOST_PP_NODE_141(p) BOOST_PP_IIF(p##(141), 141, 142)
+# define BOOST_PP_NODE_143(p) BOOST_PP_IIF(p##(143), 143, 144)
+# define BOOST_PP_NODE_152(p) BOOST_PP_IIF(p##(152), BOOST_PP_NODE_148, BOOST_PP_NODE_156)
+# define BOOST_PP_NODE_148(p) BOOST_PP_IIF(p##(148), BOOST_PP_NODE_146, BOOST_PP_NODE_150)
+# define BOOST_PP_NODE_146(p) BOOST_PP_IIF(p##(146), BOOST_PP_NODE_145, BOOST_PP_NODE_147)
+# define BOOST_PP_NODE_145(p) BOOST_PP_IIF(p##(145), 145, 146)
+# define BOOST_PP_NODE_147(p) BOOST_PP_IIF(p##(147), 147, 148)
+# define BOOST_PP_NODE_150(p) BOOST_PP_IIF(p##(150), BOOST_PP_NODE_149, BOOST_PP_NODE_151)
+# define BOOST_PP_NODE_149(p) BOOST_PP_IIF(p##(149), 149, 150)
+# define BOOST_PP_NODE_151(p) BOOST_PP_IIF(p##(151), 151, 152)
+# define BOOST_PP_NODE_156(p) BOOST_PP_IIF(p##(156), BOOST_PP_NODE_154, BOOST_PP_NODE_158)
+# define BOOST_PP_NODE_154(p) BOOST_PP_IIF(p##(154), BOOST_PP_NODE_153, BOOST_PP_NODE_155)
+# define BOOST_PP_NODE_153(p) BOOST_PP_IIF(p##(153), 153, 154)
+# define BOOST_PP_NODE_155(p) BOOST_PP_IIF(p##(155), 155, 156)
+# define BOOST_PP_NODE_158(p) BOOST_PP_IIF(p##(158), BOOST_PP_NODE_157, BOOST_PP_NODE_159)
+# define BOOST_PP_NODE_157(p) BOOST_PP_IIF(p##(157), 157, 158)
+# define BOOST_PP_NODE_159(p) BOOST_PP_IIF(p##(159), 159, 160)
+# define BOOST_PP_NODE_176(p) BOOST_PP_IIF(p##(176), BOOST_PP_NODE_168, BOOST_PP_NODE_184)
+# define BOOST_PP_NODE_168(p) BOOST_PP_IIF(p##(168), BOOST_PP_NODE_164, BOOST_PP_NODE_172)
+# define BOOST_PP_NODE_164(p) BOOST_PP_IIF(p##(164), BOOST_PP_NODE_162, BOOST_PP_NODE_166)
+# define BOOST_PP_NODE_162(p) BOOST_PP_IIF(p##(162), BOOST_PP_NODE_161, BOOST_PP_NODE_163)
+# define BOOST_PP_NODE_161(p) BOOST_PP_IIF(p##(161), 161, 162)
+# define BOOST_PP_NODE_163(p) BOOST_PP_IIF(p##(163), 163, 164)
+# define BOOST_PP_NODE_166(p) BOOST_PP_IIF(p##(166), BOOST_PP_NODE_165, BOOST_PP_NODE_167)
+# define BOOST_PP_NODE_165(p) BOOST_PP_IIF(p##(165), 165, 166)
+# define BOOST_PP_NODE_167(p) BOOST_PP_IIF(p##(167), 167, 168)
+# define BOOST_PP_NODE_172(p) BOOST_PP_IIF(p##(172), BOOST_PP_NODE_170, BOOST_PP_NODE_174)
+# define BOOST_PP_NODE_170(p) BOOST_PP_IIF(p##(170), BOOST_PP_NODE_169, BOOST_PP_NODE_171)
+# define BOOST_PP_NODE_169(p) BOOST_PP_IIF(p##(169), 169, 170)
+# define BOOST_PP_NODE_171(p) BOOST_PP_IIF(p##(171), 171, 172)
+# define BOOST_PP_NODE_174(p) BOOST_PP_IIF(p##(174), BOOST_PP_NODE_173, BOOST_PP_NODE_175)
+# define BOOST_PP_NODE_173(p) BOOST_PP_IIF(p##(173), 173, 174)
+# define BOOST_PP_NODE_175(p) BOOST_PP_IIF(p##(175), 175, 176)
+# define BOOST_PP_NODE_184(p) BOOST_PP_IIF(p##(184), BOOST_PP_NODE_180, BOOST_PP_NODE_188)
+# define BOOST_PP_NODE_180(p) BOOST_PP_IIF(p##(180), BOOST_PP_NODE_178, BOOST_PP_NODE_182)
+# define BOOST_PP_NODE_178(p) BOOST_PP_IIF(p##(178), BOOST_PP_NODE_177, BOOST_PP_NODE_179)
+# define BOOST_PP_NODE_177(p) BOOST_PP_IIF(p##(177), 177, 178)
+# define BOOST_PP_NODE_179(p) BOOST_PP_IIF(p##(179), 179, 180)
+# define BOOST_PP_NODE_182(p) BOOST_PP_IIF(p##(182), BOOST_PP_NODE_181, BOOST_PP_NODE_183)
+# define BOOST_PP_NODE_181(p) BOOST_PP_IIF(p##(181), 181, 182)
+# define BOOST_PP_NODE_183(p) BOOST_PP_IIF(p##(183), 183, 184)
+# define BOOST_PP_NODE_188(p) BOOST_PP_IIF(p##(188), BOOST_PP_NODE_186, BOOST_PP_NODE_190)
+# define BOOST_PP_NODE_186(p) BOOST_PP_IIF(p##(186), BOOST_PP_NODE_185, BOOST_PP_NODE_187)
+# define BOOST_PP_NODE_185(p) BOOST_PP_IIF(p##(185), 185, 186)
+# define BOOST_PP_NODE_187(p) BOOST_PP_IIF(p##(187), 187, 188)
+# define BOOST_PP_NODE_190(p) BOOST_PP_IIF(p##(190), BOOST_PP_NODE_189, BOOST_PP_NODE_191)
+# define BOOST_PP_NODE_189(p) BOOST_PP_IIF(p##(189), 189, 190)
+# define BOOST_PP_NODE_191(p) BOOST_PP_IIF(p##(191), 191, 192)
+# define BOOST_PP_NODE_224(p) BOOST_PP_IIF(p##(224), BOOST_PP_NODE_208, BOOST_PP_NODE_240)
+# define BOOST_PP_NODE_208(p) BOOST_PP_IIF(p##(208), BOOST_PP_NODE_200, BOOST_PP_NODE_216)
+# define BOOST_PP_NODE_200(p) BOOST_PP_IIF(p##(200), BOOST_PP_NODE_196, BOOST_PP_NODE_204)
+# define BOOST_PP_NODE_196(p) BOOST_PP_IIF(p##(196), BOOST_PP_NODE_194, BOOST_PP_NODE_198)
+# define BOOST_PP_NODE_194(p) BOOST_PP_IIF(p##(194), BOOST_PP_NODE_193, BOOST_PP_NODE_195)
+# define BOOST_PP_NODE_193(p) BOOST_PP_IIF(p##(193), 193, 194)
+# define BOOST_PP_NODE_195(p) BOOST_PP_IIF(p##(195), 195, 196)
+# define BOOST_PP_NODE_198(p) BOOST_PP_IIF(p##(198), BOOST_PP_NODE_197, BOOST_PP_NODE_199)
+# define BOOST_PP_NODE_197(p) BOOST_PP_IIF(p##(197), 197, 198)
+# define BOOST_PP_NODE_199(p) BOOST_PP_IIF(p##(199), 199, 200)
+# define BOOST_PP_NODE_204(p) BOOST_PP_IIF(p##(204), BOOST_PP_NODE_202, BOOST_PP_NODE_206)
+# define BOOST_PP_NODE_202(p) BOOST_PP_IIF(p##(202), BOOST_PP_NODE_201, BOOST_PP_NODE_203)
+# define BOOST_PP_NODE_201(p) BOOST_PP_IIF(p##(201), 201, 202)
+# define BOOST_PP_NODE_203(p) BOOST_PP_IIF(p##(203), 203, 204)
+# define BOOST_PP_NODE_206(p) BOOST_PP_IIF(p##(206), BOOST_PP_NODE_205, BOOST_PP_NODE_207)
+# define BOOST_PP_NODE_205(p) BOOST_PP_IIF(p##(205), 205, 206)
+# define BOOST_PP_NODE_207(p) BOOST_PP_IIF(p##(207), 207, 208)
+# define BOOST_PP_NODE_216(p) BOOST_PP_IIF(p##(216), BOOST_PP_NODE_212, BOOST_PP_NODE_220)
+# define BOOST_PP_NODE_212(p) BOOST_PP_IIF(p##(212), BOOST_PP_NODE_210, BOOST_PP_NODE_214)
+# define BOOST_PP_NODE_210(p) BOOST_PP_IIF(p##(210), BOOST_PP_NODE_209, BOOST_PP_NODE_211)
+# define BOOST_PP_NODE_209(p) BOOST_PP_IIF(p##(209), 209, 210)
+# define BOOST_PP_NODE_211(p) BOOST_PP_IIF(p##(211), 211, 212)
+# define BOOST_PP_NODE_214(p) BOOST_PP_IIF(p##(214), BOOST_PP_NODE_213, BOOST_PP_NODE_215)
+# define BOOST_PP_NODE_213(p) BOOST_PP_IIF(p##(213), 213, 214)
+# define BOOST_PP_NODE_215(p) BOOST_PP_IIF(p##(215), 215, 216)
+# define BOOST_PP_NODE_220(p) BOOST_PP_IIF(p##(220), BOOST_PP_NODE_218, BOOST_PP_NODE_222)
+# define BOOST_PP_NODE_218(p) BOOST_PP_IIF(p##(218), BOOST_PP_NODE_217, BOOST_PP_NODE_219)
+# define BOOST_PP_NODE_217(p) BOOST_PP_IIF(p##(217), 217, 218)
+# define BOOST_PP_NODE_219(p) BOOST_PP_IIF(p##(219), 219, 220)
+# define BOOST_PP_NODE_222(p) BOOST_PP_IIF(p##(222), BOOST_PP_NODE_221, BOOST_PP_NODE_223)
+# define BOOST_PP_NODE_221(p) BOOST_PP_IIF(p##(221), 221, 222)
+# define BOOST_PP_NODE_223(p) BOOST_PP_IIF(p##(223), 223, 224)
+# define BOOST_PP_NODE_240(p) BOOST_PP_IIF(p##(240), BOOST_PP_NODE_232, BOOST_PP_NODE_248)
+# define BOOST_PP_NODE_232(p) BOOST_PP_IIF(p##(232), BOOST_PP_NODE_228, BOOST_PP_NODE_236)
+# define BOOST_PP_NODE_228(p) BOOST_PP_IIF(p##(228), BOOST_PP_NODE_226, BOOST_PP_NODE_230)
+# define BOOST_PP_NODE_226(p) BOOST_PP_IIF(p##(226), BOOST_PP_NODE_225, BOOST_PP_NODE_227)
+# define BOOST_PP_NODE_225(p) BOOST_PP_IIF(p##(225), 225, 226)
+# define BOOST_PP_NODE_227(p) BOOST_PP_IIF(p##(227), 227, 228)
+# define BOOST_PP_NODE_230(p) BOOST_PP_IIF(p##(230), BOOST_PP_NODE_229, BOOST_PP_NODE_231)
+# define BOOST_PP_NODE_229(p) BOOST_PP_IIF(p##(229), 229, 230)
+# define BOOST_PP_NODE_231(p) BOOST_PP_IIF(p##(231), 231, 232)
+# define BOOST_PP_NODE_236(p) BOOST_PP_IIF(p##(236), BOOST_PP_NODE_234, BOOST_PP_NODE_238)
+# define BOOST_PP_NODE_234(p) BOOST_PP_IIF(p##(234), BOOST_PP_NODE_233, BOOST_PP_NODE_235)
+# define BOOST_PP_NODE_233(p) BOOST_PP_IIF(p##(233), 233, 234)
+# define BOOST_PP_NODE_235(p) BOOST_PP_IIF(p##(235), 235, 236)
+# define BOOST_PP_NODE_238(p) BOOST_PP_IIF(p##(238), BOOST_PP_NODE_237, BOOST_PP_NODE_239)
+# define BOOST_PP_NODE_237(p) BOOST_PP_IIF(p##(237), 237, 238)
+# define BOOST_PP_NODE_239(p) BOOST_PP_IIF(p##(239), 239, 240)
+# define BOOST_PP_NODE_248(p) BOOST_PP_IIF(p##(248), BOOST_PP_NODE_244, BOOST_PP_NODE_252)
+# define BOOST_PP_NODE_244(p) BOOST_PP_IIF(p##(244), BOOST_PP_NODE_242, BOOST_PP_NODE_246)
+# define BOOST_PP_NODE_242(p) BOOST_PP_IIF(p##(242), BOOST_PP_NODE_241, BOOST_PP_NODE_243)
+# define BOOST_PP_NODE_241(p) BOOST_PP_IIF(p##(241), 241, 242)
+# define BOOST_PP_NODE_243(p) BOOST_PP_IIF(p##(243), 243, 244)
+# define BOOST_PP_NODE_246(p) BOOST_PP_IIF(p##(246), BOOST_PP_NODE_245, BOOST_PP_NODE_247)
+# define BOOST_PP_NODE_245(p) BOOST_PP_IIF(p##(245), 245, 246)
+# define BOOST_PP_NODE_247(p) BOOST_PP_IIF(p##(247), 247, 248)
+# define BOOST_PP_NODE_252(p) BOOST_PP_IIF(p##(252), BOOST_PP_NODE_250, BOOST_PP_NODE_254)
+# define BOOST_PP_NODE_250(p) BOOST_PP_IIF(p##(250), BOOST_PP_NODE_249, BOOST_PP_NODE_251)
+# define BOOST_PP_NODE_249(p) BOOST_PP_IIF(p##(249), 249, 250)
+# define BOOST_PP_NODE_251(p) BOOST_PP_IIF(p##(251), 251, 252)
+# define BOOST_PP_NODE_254(p) BOOST_PP_IIF(p##(254), BOOST_PP_NODE_253, BOOST_PP_NODE_255)
+# define BOOST_PP_NODE_253(p) BOOST_PP_IIF(p##(253), 253, 254)
+# define BOOST_PP_NODE_255(p) BOOST_PP_IIF(p##(255), 255, 256)
+#
+# endif
diff --git a/boost/boost/preprocessor/detail/is_binary.hpp b/boost/boost/preprocessor/detail/is_binary.hpp
new file mode 100644
index 00000000000..3428833d649
--- /dev/null
+++ b/boost/boost/preprocessor/detail/is_binary.hpp
@@ -0,0 +1,30 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_DETAIL_IS_BINARY_HPP
+# define BOOST_PREPROCESSOR_DETAIL_IS_BINARY_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/detail/check.hpp>
+#
+# /* BOOST_PP_IS_BINARY */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_IS_BINARY(x) BOOST_PP_CHECK(x, BOOST_PP_IS_BINARY_CHECK)
+# else
+# define BOOST_PP_IS_BINARY(x) BOOST_PP_IS_BINARY_I(x)
+# define BOOST_PP_IS_BINARY_I(x) BOOST_PP_CHECK(x, BOOST_PP_IS_BINARY_CHECK)
+# endif
+#
+# define BOOST_PP_IS_BINARY_CHECK(a, b) 1
+# define BOOST_PP_CHECK_RESULT_BOOST_PP_IS_BINARY_CHECK 0, BOOST_PP_NIL
+#
+# endif
diff --git a/boost/boost/preprocessor/detail/is_nullary.hpp b/boost/boost/preprocessor/detail/is_nullary.hpp
new file mode 100644
index 00000000000..dee4075adb3
--- /dev/null
+++ b/boost/boost/preprocessor/detail/is_nullary.hpp
@@ -0,0 +1,30 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_DETAIL_IS_NULLARY_HPP
+# define BOOST_PREPROCESSOR_DETAIL_IS_NULLARY_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/detail/check.hpp>
+#
+# /* BOOST_PP_IS_NULLARY */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_IS_NULLARY(x) BOOST_PP_CHECK(x, BOOST_PP_IS_NULLARY_CHECK)
+# else
+# define BOOST_PP_IS_NULLARY(x) BOOST_PP_IS_NULLARY_I(x)
+# define BOOST_PP_IS_NULLARY_I(x) BOOST_PP_CHECK(x, BOOST_PP_IS_NULLARY_CHECK)
+# endif
+#
+# define BOOST_PP_IS_NULLARY_CHECK() 1
+# define BOOST_PP_CHECK_RESULT_BOOST_PP_IS_NULLARY_CHECK 0, BOOST_PP_NIL
+#
+# endif
diff --git a/boost/boost/preprocessor/detail/is_unary.hpp b/boost/boost/preprocessor/detail/is_unary.hpp
new file mode 100644
index 00000000000..e73cdfb76a4
--- /dev/null
+++ b/boost/boost/preprocessor/detail/is_unary.hpp
@@ -0,0 +1,30 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_DETAIL_IS_UNARY_HPP
+# define BOOST_PREPROCESSOR_DETAIL_IS_UNARY_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/detail/check.hpp>
+#
+# /* BOOST_PP_IS_UNARY */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_IS_UNARY(x) BOOST_PP_CHECK(x, BOOST_PP_IS_UNARY_CHECK)
+# else
+# define BOOST_PP_IS_UNARY(x) BOOST_PP_IS_UNARY_I(x)
+# define BOOST_PP_IS_UNARY_I(x) BOOST_PP_CHECK(x, BOOST_PP_IS_UNARY_CHECK)
+# endif
+#
+# define BOOST_PP_IS_UNARY_CHECK(a) 1
+# define BOOST_PP_CHECK_RESULT_BOOST_PP_IS_UNARY_CHECK 0, BOOST_PP_NIL
+#
+# endif
diff --git a/boost/boost/preprocessor/detail/null.hpp b/boost/boost/preprocessor/detail/null.hpp
new file mode 100644
index 00000000000..5eb0bd4ca9a
--- /dev/null
+++ b/boost/boost/preprocessor/detail/null.hpp
@@ -0,0 +1,17 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_DETAIL_NULL_HPP
+# define BOOST_PREPROCESSOR_DETAIL_NULL_HPP
+#
+# /* empty file */
+#
+# endif
diff --git a/boost/boost/preprocessor/detail/split.hpp b/boost/boost/preprocessor/detail/split.hpp
new file mode 100644
index 00000000000..f28a72375d8
--- /dev/null
+++ b/boost/boost/preprocessor/detail/split.hpp
@@ -0,0 +1,35 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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)
+# * *
+# ************************************************************************** */
+#
+# ifndef BOOST_PREPROCESSOR_DETAIL_SPLIT_HPP
+# define BOOST_PREPROCESSOR_DETAIL_SPLIT_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+#
+# /* BOOST_PP_SPLIT */
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+# define BOOST_PP_SPLIT(n, im) BOOST_PP_SPLIT_I((n, im))
+# define BOOST_PP_SPLIT_I(par) BOOST_PP_SPLIT_II ## par
+# define BOOST_PP_SPLIT_II(n, a, b) BOOST_PP_SPLIT_ ## n(a, b)
+# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()
+# define BOOST_PP_SPLIT(n, im) BOOST_PP_SPLIT_I(n((im)))
+# define BOOST_PP_SPLIT_I(n) BOOST_PP_SPLIT_ID(BOOST_PP_SPLIT_II_ ## n)
+# define BOOST_PP_SPLIT_II_0(s) BOOST_PP_SPLIT_ID(BOOST_PP_SPLIT_0 s)
+# define BOOST_PP_SPLIT_II_1(s) BOOST_PP_SPLIT_ID(BOOST_PP_SPLIT_1 s)
+# define BOOST_PP_SPLIT_ID(id) id
+# else
+# define BOOST_PP_SPLIT(n, im) BOOST_PP_SPLIT_I(n)(im)
+# define BOOST_PP_SPLIT_I(n) BOOST_PP_SPLIT_ ## n
+# endif
+#
+# define BOOST_PP_SPLIT_0(a, b) a
+# define BOOST_PP_SPLIT_1(a, b) b
+#
+# endif
diff --git a/boost/boost/preprocessor/empty.hpp b/boost/boost/preprocessor/empty.hpp
new file mode 100644
index 00000000000..116ef744e04
--- /dev/null
+++ b/boost/boost/preprocessor/empty.hpp
@@ -0,0 +1,17 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_EMPTY_HPP
+# define BOOST_PREPROCESSOR_EMPTY_HPP
+#
+# include <boost/preprocessor/facilities/empty.hpp>
+#
+# endif
diff --git a/boost/boost/preprocessor/enum.hpp b/boost/boost/preprocessor/enum.hpp
new file mode 100644
index 00000000000..ae05bb0c180
--- /dev/null
+++ b/boost/boost/preprocessor/enum.hpp
@@ -0,0 +1,17 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_ENUM_HPP
+# define BOOST_PREPROCESSOR_ENUM_HPP
+#
+# include <boost/preprocessor/repetition/enum.hpp>
+#
+# endif
diff --git a/boost/boost/preprocessor/enum_params.hpp b/boost/boost/preprocessor/enum_params.hpp
new file mode 100644
index 00000000000..414f8aa6a2b
--- /dev/null
+++ b/boost/boost/preprocessor/enum_params.hpp
@@ -0,0 +1,17 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_ENUM_PARAMS_HPP
+# define BOOST_PREPROCESSOR_ENUM_PARAMS_HPP
+#
+# include <boost/preprocessor/repetition/enum_params.hpp>
+#
+# endif
diff --git a/boost/boost/preprocessor/enum_params_with_a_default.hpp b/boost/boost/preprocessor/enum_params_with_a_default.hpp
new file mode 100644
index 00000000000..fd1ad4ccaa3
--- /dev/null
+++ b/boost/boost/preprocessor/enum_params_with_a_default.hpp
@@ -0,0 +1,17 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_ENUM_PARAMS_WITH_A_DEFAULT_HPP
+# define BOOST_PREPROCESSOR_ENUM_PARAMS_WITH_A_DEFAULT_HPP
+#
+# include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
+#
+# endif
diff --git a/boost/boost/preprocessor/enum_params_with_defaults.hpp b/boost/boost/preprocessor/enum_params_with_defaults.hpp
new file mode 100644
index 00000000000..e58fa3e3c08
--- /dev/null
+++ b/boost/boost/preprocessor/enum_params_with_defaults.hpp
@@ -0,0 +1,17 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_ENUM_PARAMS_WITH_DEFAULTS_HPP
+# define BOOST_PREPROCESSOR_ENUM_PARAMS_WITH_DEFAULTS_HPP
+#
+# include <boost/preprocessor/repetition/enum_params_with_defaults.hpp>
+#
+# endif
diff --git a/boost/boost/preprocessor/enum_shifted.hpp b/boost/boost/preprocessor/enum_shifted.hpp
new file mode 100644
index 00000000000..aa6a698d52e
--- /dev/null
+++ b/boost/boost/preprocessor/enum_shifted.hpp
@@ -0,0 +1,17 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_ENUM_SHIFTED_HPP
+# define BOOST_PREPROCESSOR_ENUM_SHIFTED_HPP
+#
+# include <boost/preprocessor/repetition/enum_shifted.hpp>
+#
+# endif
diff --git a/boost/boost/preprocessor/enum_shifted_params.hpp b/boost/boost/preprocessor/enum_shifted_params.hpp
new file mode 100644
index 00000000000..462c6424eb9
--- /dev/null
+++ b/boost/boost/preprocessor/enum_shifted_params.hpp
@@ -0,0 +1,17 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_ENUM_SHIFTED_PARAMS_HPP
+# define BOOST_PREPROCESSOR_ENUM_SHIFTED_PARAMS_HPP
+#
+# include <boost/preprocessor/repetition/enum_shifted_params.hpp>
+#
+# endif
diff --git a/boost/boost/preprocessor/expand.hpp b/boost/boost/preprocessor/expand.hpp
new file mode 100644
index 00000000000..8c5d972d2f2
--- /dev/null
+++ b/boost/boost/preprocessor/expand.hpp
@@ -0,0 +1,17 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_EXPAND_HPP
+# define BOOST_PREPROCESSOR_EXPAND_HPP
+#
+# include <boost/preprocessor/facilities/expand.hpp>
+#
+# endif
diff --git a/boost/boost/preprocessor/expr_if.hpp b/boost/boost/preprocessor/expr_if.hpp
new file mode 100644
index 00000000000..f93e29bc61c
--- /dev/null
+++ b/boost/boost/preprocessor/expr_if.hpp
@@ -0,0 +1,17 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_EXPR_IF_HPP
+# define BOOST_PREPROCESSOR_EXPR_IF_HPP
+#
+# include <boost/preprocessor/control/expr_if.hpp>
+#
+# endif
diff --git a/boost/boost/preprocessor/facilities.hpp b/boost/boost/preprocessor/facilities.hpp
new file mode 100644
index 00000000000..ec2de24a6c4
--- /dev/null
+++ b/boost/boost/preprocessor/facilities.hpp
@@ -0,0 +1,21 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_FACILITIES_HPP
+# define BOOST_PREPROCESSOR_FACILITIES_HPP
+#
+# include <boost/preprocessor/facilities/apply.hpp>
+# include <boost/preprocessor/facilities/empty.hpp>
+# include <boost/preprocessor/facilities/expand.hpp>
+# include <boost/preprocessor/facilities/identity.hpp>
+# include <boost/preprocessor/facilities/intercept.hpp>
+#
+# endif
diff --git a/boost/boost/preprocessor/facilities/apply.hpp b/boost/boost/preprocessor/facilities/apply.hpp
new file mode 100644
index 00000000000..e7d8c36bd5d
--- /dev/null
+++ b/boost/boost/preprocessor/facilities/apply.hpp
@@ -0,0 +1,34 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_FACILITIES_APPLY_HPP
+# define BOOST_PREPROCESSOR_FACILITIES_APPLY_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/control/expr_iif.hpp>
+# include <boost/preprocessor/detail/is_unary.hpp>
+# include <boost/preprocessor/tuple/rem.hpp>
+#
+# /* BOOST_PP_APPLY */
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_APPLY(x) BOOST_PP_APPLY_I(x)
+# define BOOST_PP_APPLY_I(x) BOOST_PP_EXPR_IIF(BOOST_PP_IS_UNARY(x), BOOST_PP_TUPLE_REM_1 x)
+# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_BCC()
+# define BOOST_PP_APPLY(x) BOOST_PP_APPLY_I(x)
+# define BOOST_PP_APPLY_I(x) BOOST_PP_APPLY_ ## x
+# define BOOST_PP_APPLY_(x) x
+# define BOOST_PP_APPLY_BOOST_PP_NIL
+# else
+# define BOOST_PP_APPLY(x) BOOST_PP_EXPR_IIF(BOOST_PP_IS_UNARY(x), BOOST_PP_TUPLE_REM_1 x)
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/facilities/empty.hpp b/boost/boost/preprocessor/facilities/empty.hpp
new file mode 100644
index 00000000000..46db19026a9
--- /dev/null
+++ b/boost/boost/preprocessor/facilities/empty.hpp
@@ -0,0 +1,21 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_FACILITIES_EMPTY_HPP
+# define BOOST_PREPROCESSOR_FACILITIES_EMPTY_HPP
+#
+# /* BOOST_PP_EMPTY */
+#
+# define BOOST_PP_EMPTY()
+#
+# endif
diff --git a/boost/boost/preprocessor/facilities/expand.hpp b/boost/boost/preprocessor/facilities/expand.hpp
new file mode 100644
index 00000000000..c8661a1c221
--- /dev/null
+++ b/boost/boost/preprocessor/facilities/expand.hpp
@@ -0,0 +1,28 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_FACILITIES_EXPAND_HPP
+# define BOOST_PREPROCESSOR_FACILITIES_EXPAND_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC() && ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_DMC()
+# define BOOST_PP_EXPAND(x) BOOST_PP_EXPAND_I(x)
+# else
+# define BOOST_PP_EXPAND(x) BOOST_PP_EXPAND_OO((x))
+# define BOOST_PP_EXPAND_OO(par) BOOST_PP_EXPAND_I ## par
+# endif
+#
+# define BOOST_PP_EXPAND_I(x) x
+#
+# endif
diff --git a/boost/boost/preprocessor/facilities/identity.hpp b/boost/boost/preprocessor/facilities/identity.hpp
new file mode 100644
index 00000000000..13ec4cab884
--- /dev/null
+++ b/boost/boost/preprocessor/facilities/identity.hpp
@@ -0,0 +1,23 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_FACILITIES_IDENTITY_HPP
+# define BOOST_PREPROCESSOR_FACILITIES_IDENTITY_HPP
+#
+# include <boost/preprocessor/facilities/empty.hpp>
+#
+# /* BOOST_PP_IDENTITY */
+#
+# define BOOST_PP_IDENTITY(item) item BOOST_PP_EMPTY
+#
+# endif
diff --git a/boost/boost/preprocessor/facilities/intercept.hpp b/boost/boost/preprocessor/facilities/intercept.hpp
new file mode 100644
index 00000000000..41dcc6a9801
--- /dev/null
+++ b/boost/boost/preprocessor/facilities/intercept.hpp
@@ -0,0 +1,277 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_FACILITIES_INTERCEPT_HPP
+# define BOOST_PREPROCESSOR_FACILITIES_INTERCEPT_HPP
+#
+# /* BOOST_PP_INTERCEPT */
+#
+# define BOOST_PP_INTERCEPT BOOST_PP_INTERCEPT_
+#
+# define BOOST_PP_INTERCEPT_0
+# define BOOST_PP_INTERCEPT_1
+# define BOOST_PP_INTERCEPT_2
+# define BOOST_PP_INTERCEPT_3
+# define BOOST_PP_INTERCEPT_4
+# define BOOST_PP_INTERCEPT_5
+# define BOOST_PP_INTERCEPT_6
+# define BOOST_PP_INTERCEPT_7
+# define BOOST_PP_INTERCEPT_8
+# define BOOST_PP_INTERCEPT_9
+# define BOOST_PP_INTERCEPT_10
+# define BOOST_PP_INTERCEPT_11
+# define BOOST_PP_INTERCEPT_12
+# define BOOST_PP_INTERCEPT_13
+# define BOOST_PP_INTERCEPT_14
+# define BOOST_PP_INTERCEPT_15
+# define BOOST_PP_INTERCEPT_16
+# define BOOST_PP_INTERCEPT_17
+# define BOOST_PP_INTERCEPT_18
+# define BOOST_PP_INTERCEPT_19
+# define BOOST_PP_INTERCEPT_20
+# define BOOST_PP_INTERCEPT_21
+# define BOOST_PP_INTERCEPT_22
+# define BOOST_PP_INTERCEPT_23
+# define BOOST_PP_INTERCEPT_24
+# define BOOST_PP_INTERCEPT_25
+# define BOOST_PP_INTERCEPT_26
+# define BOOST_PP_INTERCEPT_27
+# define BOOST_PP_INTERCEPT_28
+# define BOOST_PP_INTERCEPT_29
+# define BOOST_PP_INTERCEPT_30
+# define BOOST_PP_INTERCEPT_31
+# define BOOST_PP_INTERCEPT_32
+# define BOOST_PP_INTERCEPT_33
+# define BOOST_PP_INTERCEPT_34
+# define BOOST_PP_INTERCEPT_35
+# define BOOST_PP_INTERCEPT_36
+# define BOOST_PP_INTERCEPT_37
+# define BOOST_PP_INTERCEPT_38
+# define BOOST_PP_INTERCEPT_39
+# define BOOST_PP_INTERCEPT_40
+# define BOOST_PP_INTERCEPT_41
+# define BOOST_PP_INTERCEPT_42
+# define BOOST_PP_INTERCEPT_43
+# define BOOST_PP_INTERCEPT_44
+# define BOOST_PP_INTERCEPT_45
+# define BOOST_PP_INTERCEPT_46
+# define BOOST_PP_INTERCEPT_47
+# define BOOST_PP_INTERCEPT_48
+# define BOOST_PP_INTERCEPT_49
+# define BOOST_PP_INTERCEPT_50
+# define BOOST_PP_INTERCEPT_51
+# define BOOST_PP_INTERCEPT_52
+# define BOOST_PP_INTERCEPT_53
+# define BOOST_PP_INTERCEPT_54
+# define BOOST_PP_INTERCEPT_55
+# define BOOST_PP_INTERCEPT_56
+# define BOOST_PP_INTERCEPT_57
+# define BOOST_PP_INTERCEPT_58
+# define BOOST_PP_INTERCEPT_59
+# define BOOST_PP_INTERCEPT_60
+# define BOOST_PP_INTERCEPT_61
+# define BOOST_PP_INTERCEPT_62
+# define BOOST_PP_INTERCEPT_63
+# define BOOST_PP_INTERCEPT_64
+# define BOOST_PP_INTERCEPT_65
+# define BOOST_PP_INTERCEPT_66
+# define BOOST_PP_INTERCEPT_67
+# define BOOST_PP_INTERCEPT_68
+# define BOOST_PP_INTERCEPT_69
+# define BOOST_PP_INTERCEPT_70
+# define BOOST_PP_INTERCEPT_71
+# define BOOST_PP_INTERCEPT_72
+# define BOOST_PP_INTERCEPT_73
+# define BOOST_PP_INTERCEPT_74
+# define BOOST_PP_INTERCEPT_75
+# define BOOST_PP_INTERCEPT_76
+# define BOOST_PP_INTERCEPT_77
+# define BOOST_PP_INTERCEPT_78
+# define BOOST_PP_INTERCEPT_79
+# define BOOST_PP_INTERCEPT_80
+# define BOOST_PP_INTERCEPT_81
+# define BOOST_PP_INTERCEPT_82
+# define BOOST_PP_INTERCEPT_83
+# define BOOST_PP_INTERCEPT_84
+# define BOOST_PP_INTERCEPT_85
+# define BOOST_PP_INTERCEPT_86
+# define BOOST_PP_INTERCEPT_87
+# define BOOST_PP_INTERCEPT_88
+# define BOOST_PP_INTERCEPT_89
+# define BOOST_PP_INTERCEPT_90
+# define BOOST_PP_INTERCEPT_91
+# define BOOST_PP_INTERCEPT_92
+# define BOOST_PP_INTERCEPT_93
+# define BOOST_PP_INTERCEPT_94
+# define BOOST_PP_INTERCEPT_95
+# define BOOST_PP_INTERCEPT_96
+# define BOOST_PP_INTERCEPT_97
+# define BOOST_PP_INTERCEPT_98
+# define BOOST_PP_INTERCEPT_99
+# define BOOST_PP_INTERCEPT_100
+# define BOOST_PP_INTERCEPT_101
+# define BOOST_PP_INTERCEPT_102
+# define BOOST_PP_INTERCEPT_103
+# define BOOST_PP_INTERCEPT_104
+# define BOOST_PP_INTERCEPT_105
+# define BOOST_PP_INTERCEPT_106
+# define BOOST_PP_INTERCEPT_107
+# define BOOST_PP_INTERCEPT_108
+# define BOOST_PP_INTERCEPT_109
+# define BOOST_PP_INTERCEPT_110
+# define BOOST_PP_INTERCEPT_111
+# define BOOST_PP_INTERCEPT_112
+# define BOOST_PP_INTERCEPT_113
+# define BOOST_PP_INTERCEPT_114
+# define BOOST_PP_INTERCEPT_115
+# define BOOST_PP_INTERCEPT_116
+# define BOOST_PP_INTERCEPT_117
+# define BOOST_PP_INTERCEPT_118
+# define BOOST_PP_INTERCEPT_119
+# define BOOST_PP_INTERCEPT_120
+# define BOOST_PP_INTERCEPT_121
+# define BOOST_PP_INTERCEPT_122
+# define BOOST_PP_INTERCEPT_123
+# define BOOST_PP_INTERCEPT_124
+# define BOOST_PP_INTERCEPT_125
+# define BOOST_PP_INTERCEPT_126
+# define BOOST_PP_INTERCEPT_127
+# define BOOST_PP_INTERCEPT_128
+# define BOOST_PP_INTERCEPT_129
+# define BOOST_PP_INTERCEPT_130
+# define BOOST_PP_INTERCEPT_131
+# define BOOST_PP_INTERCEPT_132
+# define BOOST_PP_INTERCEPT_133
+# define BOOST_PP_INTERCEPT_134
+# define BOOST_PP_INTERCEPT_135
+# define BOOST_PP_INTERCEPT_136
+# define BOOST_PP_INTERCEPT_137
+# define BOOST_PP_INTERCEPT_138
+# define BOOST_PP_INTERCEPT_139
+# define BOOST_PP_INTERCEPT_140
+# define BOOST_PP_INTERCEPT_141
+# define BOOST_PP_INTERCEPT_142
+# define BOOST_PP_INTERCEPT_143
+# define BOOST_PP_INTERCEPT_144
+# define BOOST_PP_INTERCEPT_145
+# define BOOST_PP_INTERCEPT_146
+# define BOOST_PP_INTERCEPT_147
+# define BOOST_PP_INTERCEPT_148
+# define BOOST_PP_INTERCEPT_149
+# define BOOST_PP_INTERCEPT_150
+# define BOOST_PP_INTERCEPT_151
+# define BOOST_PP_INTERCEPT_152
+# define BOOST_PP_INTERCEPT_153
+# define BOOST_PP_INTERCEPT_154
+# define BOOST_PP_INTERCEPT_155
+# define BOOST_PP_INTERCEPT_156
+# define BOOST_PP_INTERCEPT_157
+# define BOOST_PP_INTERCEPT_158
+# define BOOST_PP_INTERCEPT_159
+# define BOOST_PP_INTERCEPT_160
+# define BOOST_PP_INTERCEPT_161
+# define BOOST_PP_INTERCEPT_162
+# define BOOST_PP_INTERCEPT_163
+# define BOOST_PP_INTERCEPT_164
+# define BOOST_PP_INTERCEPT_165
+# define BOOST_PP_INTERCEPT_166
+# define BOOST_PP_INTERCEPT_167
+# define BOOST_PP_INTERCEPT_168
+# define BOOST_PP_INTERCEPT_169
+# define BOOST_PP_INTERCEPT_170
+# define BOOST_PP_INTERCEPT_171
+# define BOOST_PP_INTERCEPT_172
+# define BOOST_PP_INTERCEPT_173
+# define BOOST_PP_INTERCEPT_174
+# define BOOST_PP_INTERCEPT_175
+# define BOOST_PP_INTERCEPT_176
+# define BOOST_PP_INTERCEPT_177
+# define BOOST_PP_INTERCEPT_178
+# define BOOST_PP_INTERCEPT_179
+# define BOOST_PP_INTERCEPT_180
+# define BOOST_PP_INTERCEPT_181
+# define BOOST_PP_INTERCEPT_182
+# define BOOST_PP_INTERCEPT_183
+# define BOOST_PP_INTERCEPT_184
+# define BOOST_PP_INTERCEPT_185
+# define BOOST_PP_INTERCEPT_186
+# define BOOST_PP_INTERCEPT_187
+# define BOOST_PP_INTERCEPT_188
+# define BOOST_PP_INTERCEPT_189
+# define BOOST_PP_INTERCEPT_190
+# define BOOST_PP_INTERCEPT_191
+# define BOOST_PP_INTERCEPT_192
+# define BOOST_PP_INTERCEPT_193
+# define BOOST_PP_INTERCEPT_194
+# define BOOST_PP_INTERCEPT_195
+# define BOOST_PP_INTERCEPT_196
+# define BOOST_PP_INTERCEPT_197
+# define BOOST_PP_INTERCEPT_198
+# define BOOST_PP_INTERCEPT_199
+# define BOOST_PP_INTERCEPT_200
+# define BOOST_PP_INTERCEPT_201
+# define BOOST_PP_INTERCEPT_202
+# define BOOST_PP_INTERCEPT_203
+# define BOOST_PP_INTERCEPT_204
+# define BOOST_PP_INTERCEPT_205
+# define BOOST_PP_INTERCEPT_206
+# define BOOST_PP_INTERCEPT_207
+# define BOOST_PP_INTERCEPT_208
+# define BOOST_PP_INTERCEPT_209
+# define BOOST_PP_INTERCEPT_210
+# define BOOST_PP_INTERCEPT_211
+# define BOOST_PP_INTERCEPT_212
+# define BOOST_PP_INTERCEPT_213
+# define BOOST_PP_INTERCEPT_214
+# define BOOST_PP_INTERCEPT_215
+# define BOOST_PP_INTERCEPT_216
+# define BOOST_PP_INTERCEPT_217
+# define BOOST_PP_INTERCEPT_218
+# define BOOST_PP_INTERCEPT_219
+# define BOOST_PP_INTERCEPT_220
+# define BOOST_PP_INTERCEPT_221
+# define BOOST_PP_INTERCEPT_222
+# define BOOST_PP_INTERCEPT_223
+# define BOOST_PP_INTERCEPT_224
+# define BOOST_PP_INTERCEPT_225
+# define BOOST_PP_INTERCEPT_226
+# define BOOST_PP_INTERCEPT_227
+# define BOOST_PP_INTERCEPT_228
+# define BOOST_PP_INTERCEPT_229
+# define BOOST_PP_INTERCEPT_230
+# define BOOST_PP_INTERCEPT_231
+# define BOOST_PP_INTERCEPT_232
+# define BOOST_PP_INTERCEPT_233
+# define BOOST_PP_INTERCEPT_234
+# define BOOST_PP_INTERCEPT_235
+# define BOOST_PP_INTERCEPT_236
+# define BOOST_PP_INTERCEPT_237
+# define BOOST_PP_INTERCEPT_238
+# define BOOST_PP_INTERCEPT_239
+# define BOOST_PP_INTERCEPT_240
+# define BOOST_PP_INTERCEPT_241
+# define BOOST_PP_INTERCEPT_242
+# define BOOST_PP_INTERCEPT_243
+# define BOOST_PP_INTERCEPT_244
+# define BOOST_PP_INTERCEPT_245
+# define BOOST_PP_INTERCEPT_246
+# define BOOST_PP_INTERCEPT_247
+# define BOOST_PP_INTERCEPT_248
+# define BOOST_PP_INTERCEPT_249
+# define BOOST_PP_INTERCEPT_250
+# define BOOST_PP_INTERCEPT_251
+# define BOOST_PP_INTERCEPT_252
+# define BOOST_PP_INTERCEPT_253
+# define BOOST_PP_INTERCEPT_254
+# define BOOST_PP_INTERCEPT_255
+# define BOOST_PP_INTERCEPT_256
+#
+# endif
diff --git a/boost/boost/preprocessor/facilities/is_1.hpp b/boost/boost/preprocessor/facilities/is_1.hpp
new file mode 100644
index 00000000000..f286dcdd19b
--- /dev/null
+++ b/boost/boost/preprocessor/facilities/is_1.hpp
@@ -0,0 +1,23 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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. */
+#
+# ifndef BOOST_PREPROCESSOR_FACILITIES_IS_1_HPP
+# define BOOST_PREPROCESSOR_FACILITIES_IS_1_HPP
+#
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/facilities/is_empty.hpp>
+#
+# /* BOOST_PP_IS_1 */
+#
+# define BOOST_PP_IS_1(x) BOOST_PP_IS_EMPTY(BOOST_PP_CAT(BOOST_PP_IS_1_HELPER_, x))
+# define BOOST_PP_IS_1_HELPER_1
+#
+# endif
diff --git a/boost/boost/preprocessor/facilities/is_empty.hpp b/boost/boost/preprocessor/facilities/is_empty.hpp
new file mode 100644
index 00000000000..638265c57f8
--- /dev/null
+++ b/boost/boost/preprocessor/facilities/is_empty.hpp
@@ -0,0 +1,43 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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. */
+#
+# ifndef BOOST_PREPROCESSOR_FACILITIES_IS_EMPTY_HPP
+# define BOOST_PREPROCESSOR_FACILITIES_IS_EMPTY_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+# include <boost/preprocessor/facilities/empty.hpp>
+# include <boost/preprocessor/detail/split.hpp>
+#
+# /* BOOST_PP_IS_EMPTY */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC() && ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+# define BOOST_PP_IS_EMPTY(x) BOOST_PP_IS_EMPTY_I(x BOOST_PP_IS_EMPTY_HELPER)
+# define BOOST_PP_IS_EMPTY_I(contents) BOOST_PP_TUPLE_ELEM(2, 1, (BOOST_PP_IS_EMPTY_DEF_ ## contents()))
+# define BOOST_PP_IS_EMPTY_DEF_BOOST_PP_IS_EMPTY_HELPER 1, 1 BOOST_PP_EMPTY
+# define BOOST_PP_IS_EMPTY_HELPER() , 0
+# else
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()
+# define BOOST_PP_IS_EMPTY(x) BOOST_PP_IS_EMPTY_I(BOOST_PP_IS_EMPTY_HELPER x ())
+# define BOOST_PP_IS_EMPTY_I(test) BOOST_PP_IS_EMPTY_II(BOOST_PP_SPLIT(0, BOOST_PP_CAT(BOOST_PP_IS_EMPTY_DEF_, test)))
+# define BOOST_PP_IS_EMPTY_II(id) id
+# else
+# define BOOST_PP_IS_EMPTY(x) BOOST_PP_IS_EMPTY_I((BOOST_PP_IS_EMPTY_HELPER x ()))
+# define BOOST_PP_IS_EMPTY_I(par) BOOST_PP_IS_EMPTY_II ## par
+# define BOOST_PP_IS_EMPTY_II(test) BOOST_PP_SPLIT(0, BOOST_PP_CAT(BOOST_PP_IS_EMPTY_DEF_, test))
+# endif
+# define BOOST_PP_IS_EMPTY_HELPER() 1
+# define BOOST_PP_IS_EMPTY_DEF_1 1, BOOST_PP_NIL
+# define BOOST_PP_IS_EMPTY_DEF_BOOST_PP_IS_EMPTY_HELPER 0, BOOST_PP_NIL
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/facilities/is_empty_or_1.hpp b/boost/boost/preprocessor/facilities/is_empty_or_1.hpp
new file mode 100644
index 00000000000..baa5da9a656
--- /dev/null
+++ b/boost/boost/preprocessor/facilities/is_empty_or_1.hpp
@@ -0,0 +1,30 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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. */
+#
+# ifndef BOOST_PREPROCESSOR_FACILITIES_IS_EMPTY_OR_1_HPP
+# define BOOST_PREPROCESSOR_FACILITIES_IS_EMPTY_OR_1_HPP
+#
+# include <boost/preprocessor/control/iif.hpp>
+# include <boost/preprocessor/facilities/empty.hpp>
+# include <boost/preprocessor/facilities/is_1.hpp>
+# include <boost/preprocessor/facilities/is_empty.hpp>
+#
+# /* BOOST_PP_IS_EMPTY_OR_1 */
+#
+# define BOOST_PP_IS_EMPTY_OR_1(x) \
+ BOOST_PP_IIF( \
+ BOOST_PP_IS_EMPTY(x BOOST_PP_EMPTY()), \
+ 1 BOOST_PP_EMPTY, \
+ BOOST_PP_IS_1 \
+ )(x) \
+ /**/
+#
+# endif
diff --git a/boost/boost/preprocessor/for.hpp b/boost/boost/preprocessor/for.hpp
new file mode 100644
index 00000000000..9ec9cee67a0
--- /dev/null
+++ b/boost/boost/preprocessor/for.hpp
@@ -0,0 +1,17 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_FOR_HPP
+# define BOOST_PREPROCESSOR_FOR_HPP
+#
+# include <boost/preprocessor/repetition/for.hpp>
+#
+# endif
diff --git a/boost/boost/preprocessor/identity.hpp b/boost/boost/preprocessor/identity.hpp
new file mode 100644
index 00000000000..847dd13296b
--- /dev/null
+++ b/boost/boost/preprocessor/identity.hpp
@@ -0,0 +1,17 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_IDENTITY_HPP
+# define BOOST_PREPROCESSOR_IDENTITY_HPP
+#
+# include <boost/preprocessor/facilities/identity.hpp>
+#
+# endif
diff --git a/boost/boost/preprocessor/if.hpp b/boost/boost/preprocessor/if.hpp
new file mode 100644
index 00000000000..f1783f717ee
--- /dev/null
+++ b/boost/boost/preprocessor/if.hpp
@@ -0,0 +1,17 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_IF_HPP
+# define BOOST_PREPROCESSOR_IF_HPP
+#
+# include <boost/preprocessor/control/if.hpp>
+#
+# endif
diff --git a/boost/boost/preprocessor/inc.hpp b/boost/boost/preprocessor/inc.hpp
new file mode 100644
index 00000000000..b98d3a67c5e
--- /dev/null
+++ b/boost/boost/preprocessor/inc.hpp
@@ -0,0 +1,17 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_INC_HPP
+# define BOOST_PREPROCESSOR_INC_HPP
+#
+# include <boost/preprocessor/arithmetic/inc.hpp>
+#
+# endif
diff --git a/boost/boost/preprocessor/iterate.hpp b/boost/boost/preprocessor/iterate.hpp
new file mode 100644
index 00000000000..e720ec8a846
--- /dev/null
+++ b/boost/boost/preprocessor/iterate.hpp
@@ -0,0 +1,17 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_ITERATE_HPP
+# define BOOST_PREPROCESSOR_ITERATE_HPP
+#
+# include <boost/preprocessor/iteration/iterate.hpp>
+#
+# endif
diff --git a/boost/boost/preprocessor/iteration.hpp b/boost/boost/preprocessor/iteration.hpp
new file mode 100644
index 00000000000..1055ac00a9c
--- /dev/null
+++ b/boost/boost/preprocessor/iteration.hpp
@@ -0,0 +1,19 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_ITERATION_HPP
+# define BOOST_PREPROCESSOR_ITERATION_HPP
+#
+# include <boost/preprocessor/iteration/iterate.hpp>
+# include <boost/preprocessor/iteration/local.hpp>
+# include <boost/preprocessor/iteration/self.hpp>
+#
+# endif
diff --git a/boost/boost/preprocessor/iteration/detail/bounds/lower1.hpp b/boost/boost/preprocessor/iteration/detail/bounds/lower1.hpp
new file mode 100644
index 00000000000..6694d0ba0b7
--- /dev/null
+++ b/boost/boost/preprocessor/iteration/detail/bounds/lower1.hpp
@@ -0,0 +1,99 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# include <boost/preprocessor/slot/detail/shared.hpp>
+#
+# undef BOOST_PP_ITERATION_START_1
+#
+# undef BOOST_PP_ITERATION_START_1_DIGIT_1
+# undef BOOST_PP_ITERATION_START_1_DIGIT_2
+# undef BOOST_PP_ITERATION_START_1_DIGIT_3
+# undef BOOST_PP_ITERATION_START_1_DIGIT_4
+# undef BOOST_PP_ITERATION_START_1_DIGIT_5
+# undef BOOST_PP_ITERATION_START_1_DIGIT_6
+# undef BOOST_PP_ITERATION_START_1_DIGIT_7
+# undef BOOST_PP_ITERATION_START_1_DIGIT_8
+# undef BOOST_PP_ITERATION_START_1_DIGIT_9
+# undef BOOST_PP_ITERATION_START_1_DIGIT_10
+#
+# if BOOST_PP_SLOT_TEMP_3 == 0
+# define BOOST_PP_ITERATION_START_1_DIGIT_3 0
+# elif BOOST_PP_SLOT_TEMP_3 == 1
+# define BOOST_PP_ITERATION_START_1_DIGIT_3 1
+# elif BOOST_PP_SLOT_TEMP_3 == 2
+# define BOOST_PP_ITERATION_START_1_DIGIT_3 2
+# elif BOOST_PP_SLOT_TEMP_3 == 3
+# define BOOST_PP_ITERATION_START_1_DIGIT_3 3
+# elif BOOST_PP_SLOT_TEMP_3 == 4
+# define BOOST_PP_ITERATION_START_1_DIGIT_3 4
+# elif BOOST_PP_SLOT_TEMP_3 == 5
+# define BOOST_PP_ITERATION_START_1_DIGIT_3 5
+# elif BOOST_PP_SLOT_TEMP_3 == 6
+# define BOOST_PP_ITERATION_START_1_DIGIT_3 6
+# elif BOOST_PP_SLOT_TEMP_3 == 7
+# define BOOST_PP_ITERATION_START_1_DIGIT_3 7
+# elif BOOST_PP_SLOT_TEMP_3 == 8
+# define BOOST_PP_ITERATION_START_1_DIGIT_3 8
+# elif BOOST_PP_SLOT_TEMP_3 == 9
+# define BOOST_PP_ITERATION_START_1_DIGIT_3 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_2 == 0
+# define BOOST_PP_ITERATION_START_1_DIGIT_2 0
+# elif BOOST_PP_SLOT_TEMP_2 == 1
+# define BOOST_PP_ITERATION_START_1_DIGIT_2 1
+# elif BOOST_PP_SLOT_TEMP_2 == 2
+# define BOOST_PP_ITERATION_START_1_DIGIT_2 2
+# elif BOOST_PP_SLOT_TEMP_2 == 3
+# define BOOST_PP_ITERATION_START_1_DIGIT_2 3
+# elif BOOST_PP_SLOT_TEMP_2 == 4
+# define BOOST_PP_ITERATION_START_1_DIGIT_2 4
+# elif BOOST_PP_SLOT_TEMP_2 == 5
+# define BOOST_PP_ITERATION_START_1_DIGIT_2 5
+# elif BOOST_PP_SLOT_TEMP_2 == 6
+# define BOOST_PP_ITERATION_START_1_DIGIT_2 6
+# elif BOOST_PP_SLOT_TEMP_2 == 7
+# define BOOST_PP_ITERATION_START_1_DIGIT_2 7
+# elif BOOST_PP_SLOT_TEMP_2 == 8
+# define BOOST_PP_ITERATION_START_1_DIGIT_2 8
+# elif BOOST_PP_SLOT_TEMP_2 == 9
+# define BOOST_PP_ITERATION_START_1_DIGIT_2 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_1 == 0
+# define BOOST_PP_ITERATION_START_1_DIGIT_1 0
+# elif BOOST_PP_SLOT_TEMP_1 == 1
+# define BOOST_PP_ITERATION_START_1_DIGIT_1 1
+# elif BOOST_PP_SLOT_TEMP_1 == 2
+# define BOOST_PP_ITERATION_START_1_DIGIT_1 2
+# elif BOOST_PP_SLOT_TEMP_1 == 3
+# define BOOST_PP_ITERATION_START_1_DIGIT_1 3
+# elif BOOST_PP_SLOT_TEMP_1 == 4
+# define BOOST_PP_ITERATION_START_1_DIGIT_1 4
+# elif BOOST_PP_SLOT_TEMP_1 == 5
+# define BOOST_PP_ITERATION_START_1_DIGIT_1 5
+# elif BOOST_PP_SLOT_TEMP_1 == 6
+# define BOOST_PP_ITERATION_START_1_DIGIT_1 6
+# elif BOOST_PP_SLOT_TEMP_1 == 7
+# define BOOST_PP_ITERATION_START_1_DIGIT_1 7
+# elif BOOST_PP_SLOT_TEMP_1 == 8
+# define BOOST_PP_ITERATION_START_1_DIGIT_1 8
+# elif BOOST_PP_SLOT_TEMP_1 == 9
+# define BOOST_PP_ITERATION_START_1_DIGIT_1 9
+# endif
+#
+# if BOOST_PP_ITERATION_START_1_DIGIT_3
+# define BOOST_PP_ITERATION_START_1 BOOST_PP_SLOT_CC_3(BOOST_PP_ITERATION_START_1_DIGIT_3, BOOST_PP_ITERATION_START_1_DIGIT_2, BOOST_PP_ITERATION_START_1_DIGIT_1)
+# elif BOOST_PP_ITERATION_START_1_DIGIT_2
+# define BOOST_PP_ITERATION_START_1 BOOST_PP_SLOT_CC_2(BOOST_PP_ITERATION_START_1_DIGIT_2, BOOST_PP_ITERATION_START_1_DIGIT_1)
+# else
+# define BOOST_PP_ITERATION_START_1 BOOST_PP_ITERATION_START_1_DIGIT_1
+# endif
diff --git a/boost/boost/preprocessor/iteration/detail/bounds/lower2.hpp b/boost/boost/preprocessor/iteration/detail/bounds/lower2.hpp
new file mode 100644
index 00000000000..ece21fc810e
--- /dev/null
+++ b/boost/boost/preprocessor/iteration/detail/bounds/lower2.hpp
@@ -0,0 +1,99 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# include <boost/preprocessor/slot/detail/shared.hpp>
+#
+# undef BOOST_PP_ITERATION_START_2
+#
+# undef BOOST_PP_ITERATION_START_2_DIGIT_1
+# undef BOOST_PP_ITERATION_START_2_DIGIT_2
+# undef BOOST_PP_ITERATION_START_2_DIGIT_3
+# undef BOOST_PP_ITERATION_START_2_DIGIT_4
+# undef BOOST_PP_ITERATION_START_2_DIGIT_5
+# undef BOOST_PP_ITERATION_START_2_DIGIT_6
+# undef BOOST_PP_ITERATION_START_2_DIGIT_7
+# undef BOOST_PP_ITERATION_START_2_DIGIT_8
+# undef BOOST_PP_ITERATION_START_2_DIGIT_9
+# undef BOOST_PP_ITERATION_START_2_DIGIT_10
+#
+# if BOOST_PP_SLOT_TEMP_3 == 0
+# define BOOST_PP_ITERATION_START_2_DIGIT_3 0
+# elif BOOST_PP_SLOT_TEMP_3 == 1
+# define BOOST_PP_ITERATION_START_2_DIGIT_3 1
+# elif BOOST_PP_SLOT_TEMP_3 == 2
+# define BOOST_PP_ITERATION_START_2_DIGIT_3 2
+# elif BOOST_PP_SLOT_TEMP_3 == 3
+# define BOOST_PP_ITERATION_START_2_DIGIT_3 3
+# elif BOOST_PP_SLOT_TEMP_3 == 4
+# define BOOST_PP_ITERATION_START_2_DIGIT_3 4
+# elif BOOST_PP_SLOT_TEMP_3 == 5
+# define BOOST_PP_ITERATION_START_2_DIGIT_3 5
+# elif BOOST_PP_SLOT_TEMP_3 == 6
+# define BOOST_PP_ITERATION_START_2_DIGIT_3 6
+# elif BOOST_PP_SLOT_TEMP_3 == 7
+# define BOOST_PP_ITERATION_START_2_DIGIT_3 7
+# elif BOOST_PP_SLOT_TEMP_3 == 8
+# define BOOST_PP_ITERATION_START_2_DIGIT_3 8
+# elif BOOST_PP_SLOT_TEMP_3 == 9
+# define BOOST_PP_ITERATION_START_2_DIGIT_3 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_2 == 0
+# define BOOST_PP_ITERATION_START_2_DIGIT_2 0
+# elif BOOST_PP_SLOT_TEMP_2 == 1
+# define BOOST_PP_ITERATION_START_2_DIGIT_2 1
+# elif BOOST_PP_SLOT_TEMP_2 == 2
+# define BOOST_PP_ITERATION_START_2_DIGIT_2 2
+# elif BOOST_PP_SLOT_TEMP_2 == 3
+# define BOOST_PP_ITERATION_START_2_DIGIT_2 3
+# elif BOOST_PP_SLOT_TEMP_2 == 4
+# define BOOST_PP_ITERATION_START_2_DIGIT_2 4
+# elif BOOST_PP_SLOT_TEMP_2 == 5
+# define BOOST_PP_ITERATION_START_2_DIGIT_2 5
+# elif BOOST_PP_SLOT_TEMP_2 == 6
+# define BOOST_PP_ITERATION_START_2_DIGIT_2 6
+# elif BOOST_PP_SLOT_TEMP_2 == 7
+# define BOOST_PP_ITERATION_START_2_DIGIT_2 7
+# elif BOOST_PP_SLOT_TEMP_2 == 8
+# define BOOST_PP_ITERATION_START_2_DIGIT_2 8
+# elif BOOST_PP_SLOT_TEMP_2 == 9
+# define BOOST_PP_ITERATION_START_2_DIGIT_2 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_1 == 0
+# define BOOST_PP_ITERATION_START_2_DIGIT_1 0
+# elif BOOST_PP_SLOT_TEMP_1 == 1
+# define BOOST_PP_ITERATION_START_2_DIGIT_1 1
+# elif BOOST_PP_SLOT_TEMP_1 == 2
+# define BOOST_PP_ITERATION_START_2_DIGIT_1 2
+# elif BOOST_PP_SLOT_TEMP_1 == 3
+# define BOOST_PP_ITERATION_START_2_DIGIT_1 3
+# elif BOOST_PP_SLOT_TEMP_1 == 4
+# define BOOST_PP_ITERATION_START_2_DIGIT_1 4
+# elif BOOST_PP_SLOT_TEMP_1 == 5
+# define BOOST_PP_ITERATION_START_2_DIGIT_1 5
+# elif BOOST_PP_SLOT_TEMP_1 == 6
+# define BOOST_PP_ITERATION_START_2_DIGIT_1 6
+# elif BOOST_PP_SLOT_TEMP_1 == 7
+# define BOOST_PP_ITERATION_START_2_DIGIT_1 7
+# elif BOOST_PP_SLOT_TEMP_1 == 8
+# define BOOST_PP_ITERATION_START_2_DIGIT_1 8
+# elif BOOST_PP_SLOT_TEMP_1 == 9
+# define BOOST_PP_ITERATION_START_2_DIGIT_1 9
+# endif
+#
+# if BOOST_PP_ITERATION_START_2_DIGIT_3
+# define BOOST_PP_ITERATION_START_2 BOOST_PP_SLOT_CC_3(BOOST_PP_ITERATION_START_2_DIGIT_3, BOOST_PP_ITERATION_START_2_DIGIT_2, BOOST_PP_ITERATION_START_2_DIGIT_1)
+# elif BOOST_PP_ITERATION_START_2_DIGIT_2
+# define BOOST_PP_ITERATION_START_2 BOOST_PP_SLOT_CC_2(BOOST_PP_ITERATION_START_2_DIGIT_2, BOOST_PP_ITERATION_START_2_DIGIT_1)
+# else
+# define BOOST_PP_ITERATION_START_2 BOOST_PP_ITERATION_START_2_DIGIT_1
+# endif
diff --git a/boost/boost/preprocessor/iteration/detail/bounds/lower3.hpp b/boost/boost/preprocessor/iteration/detail/bounds/lower3.hpp
new file mode 100644
index 00000000000..8429eac7a10
--- /dev/null
+++ b/boost/boost/preprocessor/iteration/detail/bounds/lower3.hpp
@@ -0,0 +1,99 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# include <boost/preprocessor/slot/detail/shared.hpp>
+#
+# undef BOOST_PP_ITERATION_START_3
+#
+# undef BOOST_PP_ITERATION_START_3_DIGIT_1
+# undef BOOST_PP_ITERATION_START_3_DIGIT_2
+# undef BOOST_PP_ITERATION_START_3_DIGIT_3
+# undef BOOST_PP_ITERATION_START_3_DIGIT_4
+# undef BOOST_PP_ITERATION_START_3_DIGIT_5
+# undef BOOST_PP_ITERATION_START_3_DIGIT_6
+# undef BOOST_PP_ITERATION_START_3_DIGIT_7
+# undef BOOST_PP_ITERATION_START_3_DIGIT_8
+# undef BOOST_PP_ITERATION_START_3_DIGIT_9
+# undef BOOST_PP_ITERATION_START_3_DIGIT_10
+#
+# if BOOST_PP_SLOT_TEMP_3 == 0
+# define BOOST_PP_ITERATION_START_3_DIGIT_3 0
+# elif BOOST_PP_SLOT_TEMP_3 == 1
+# define BOOST_PP_ITERATION_START_3_DIGIT_3 1
+# elif BOOST_PP_SLOT_TEMP_3 == 2
+# define BOOST_PP_ITERATION_START_3_DIGIT_3 2
+# elif BOOST_PP_SLOT_TEMP_3 == 3
+# define BOOST_PP_ITERATION_START_3_DIGIT_3 3
+# elif BOOST_PP_SLOT_TEMP_3 == 4
+# define BOOST_PP_ITERATION_START_3_DIGIT_3 4
+# elif BOOST_PP_SLOT_TEMP_3 == 5
+# define BOOST_PP_ITERATION_START_3_DIGIT_3 5
+# elif BOOST_PP_SLOT_TEMP_3 == 6
+# define BOOST_PP_ITERATION_START_3_DIGIT_3 6
+# elif BOOST_PP_SLOT_TEMP_3 == 7
+# define BOOST_PP_ITERATION_START_3_DIGIT_3 7
+# elif BOOST_PP_SLOT_TEMP_3 == 8
+# define BOOST_PP_ITERATION_START_3_DIGIT_3 8
+# elif BOOST_PP_SLOT_TEMP_3 == 9
+# define BOOST_PP_ITERATION_START_3_DIGIT_3 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_2 == 0
+# define BOOST_PP_ITERATION_START_3_DIGIT_2 0
+# elif BOOST_PP_SLOT_TEMP_2 == 1
+# define BOOST_PP_ITERATION_START_3_DIGIT_2 1
+# elif BOOST_PP_SLOT_TEMP_2 == 2
+# define BOOST_PP_ITERATION_START_3_DIGIT_2 2
+# elif BOOST_PP_SLOT_TEMP_2 == 3
+# define BOOST_PP_ITERATION_START_3_DIGIT_2 3
+# elif BOOST_PP_SLOT_TEMP_2 == 4
+# define BOOST_PP_ITERATION_START_3_DIGIT_2 4
+# elif BOOST_PP_SLOT_TEMP_2 == 5
+# define BOOST_PP_ITERATION_START_3_DIGIT_2 5
+# elif BOOST_PP_SLOT_TEMP_2 == 6
+# define BOOST_PP_ITERATION_START_3_DIGIT_2 6
+# elif BOOST_PP_SLOT_TEMP_2 == 7
+# define BOOST_PP_ITERATION_START_3_DIGIT_2 7
+# elif BOOST_PP_SLOT_TEMP_2 == 8
+# define BOOST_PP_ITERATION_START_3_DIGIT_2 8
+# elif BOOST_PP_SLOT_TEMP_2 == 9
+# define BOOST_PP_ITERATION_START_3_DIGIT_2 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_1 == 0
+# define BOOST_PP_ITERATION_START_3_DIGIT_1 0
+# elif BOOST_PP_SLOT_TEMP_1 == 1
+# define BOOST_PP_ITERATION_START_3_DIGIT_1 1
+# elif BOOST_PP_SLOT_TEMP_1 == 2
+# define BOOST_PP_ITERATION_START_3_DIGIT_1 2
+# elif BOOST_PP_SLOT_TEMP_1 == 3
+# define BOOST_PP_ITERATION_START_3_DIGIT_1 3
+# elif BOOST_PP_SLOT_TEMP_1 == 4
+# define BOOST_PP_ITERATION_START_3_DIGIT_1 4
+# elif BOOST_PP_SLOT_TEMP_1 == 5
+# define BOOST_PP_ITERATION_START_3_DIGIT_1 5
+# elif BOOST_PP_SLOT_TEMP_1 == 6
+# define BOOST_PP_ITERATION_START_3_DIGIT_1 6
+# elif BOOST_PP_SLOT_TEMP_1 == 7
+# define BOOST_PP_ITERATION_START_3_DIGIT_1 7
+# elif BOOST_PP_SLOT_TEMP_1 == 8
+# define BOOST_PP_ITERATION_START_3_DIGIT_1 8
+# elif BOOST_PP_SLOT_TEMP_1 == 9
+# define BOOST_PP_ITERATION_START_3_DIGIT_1 9
+# endif
+#
+# if BOOST_PP_ITERATION_START_3_DIGIT_3
+# define BOOST_PP_ITERATION_START_3 BOOST_PP_SLOT_CC_3(BOOST_PP_ITERATION_START_3_DIGIT_3, BOOST_PP_ITERATION_START_3_DIGIT_2, BOOST_PP_ITERATION_START_3_DIGIT_1)
+# elif BOOST_PP_ITERATION_START_3_DIGIT_2
+# define BOOST_PP_ITERATION_START_3 BOOST_PP_SLOT_CC_2(BOOST_PP_ITERATION_START_3_DIGIT_2, BOOST_PP_ITERATION_START_3_DIGIT_1)
+# else
+# define BOOST_PP_ITERATION_START_3 BOOST_PP_ITERATION_START_3_DIGIT_1
+# endif
diff --git a/boost/boost/preprocessor/iteration/detail/bounds/lower4.hpp b/boost/boost/preprocessor/iteration/detail/bounds/lower4.hpp
new file mode 100644
index 00000000000..ba0832f284a
--- /dev/null
+++ b/boost/boost/preprocessor/iteration/detail/bounds/lower4.hpp
@@ -0,0 +1,99 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# include <boost/preprocessor/slot/detail/shared.hpp>
+#
+# undef BOOST_PP_ITERATION_START_4
+#
+# undef BOOST_PP_ITERATION_START_4_DIGIT_1
+# undef BOOST_PP_ITERATION_START_4_DIGIT_2
+# undef BOOST_PP_ITERATION_START_4_DIGIT_3
+# undef BOOST_PP_ITERATION_START_4_DIGIT_4
+# undef BOOST_PP_ITERATION_START_4_DIGIT_5
+# undef BOOST_PP_ITERATION_START_4_DIGIT_6
+# undef BOOST_PP_ITERATION_START_4_DIGIT_7
+# undef BOOST_PP_ITERATION_START_4_DIGIT_8
+# undef BOOST_PP_ITERATION_START_4_DIGIT_9
+# undef BOOST_PP_ITERATION_START_4_DIGIT_10
+#
+# if BOOST_PP_SLOT_TEMP_3 == 0
+# define BOOST_PP_ITERATION_START_4_DIGIT_3 0
+# elif BOOST_PP_SLOT_TEMP_3 == 1
+# define BOOST_PP_ITERATION_START_4_DIGIT_3 1
+# elif BOOST_PP_SLOT_TEMP_3 == 2
+# define BOOST_PP_ITERATION_START_4_DIGIT_3 2
+# elif BOOST_PP_SLOT_TEMP_3 == 3
+# define BOOST_PP_ITERATION_START_4_DIGIT_3 3
+# elif BOOST_PP_SLOT_TEMP_3 == 4
+# define BOOST_PP_ITERATION_START_4_DIGIT_3 4
+# elif BOOST_PP_SLOT_TEMP_3 == 5
+# define BOOST_PP_ITERATION_START_4_DIGIT_3 5
+# elif BOOST_PP_SLOT_TEMP_3 == 6
+# define BOOST_PP_ITERATION_START_4_DIGIT_3 6
+# elif BOOST_PP_SLOT_TEMP_3 == 7
+# define BOOST_PP_ITERATION_START_4_DIGIT_3 7
+# elif BOOST_PP_SLOT_TEMP_3 == 8
+# define BOOST_PP_ITERATION_START_4_DIGIT_3 8
+# elif BOOST_PP_SLOT_TEMP_3 == 9
+# define BOOST_PP_ITERATION_START_4_DIGIT_3 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_2 == 0
+# define BOOST_PP_ITERATION_START_4_DIGIT_2 0
+# elif BOOST_PP_SLOT_TEMP_2 == 1
+# define BOOST_PP_ITERATION_START_4_DIGIT_2 1
+# elif BOOST_PP_SLOT_TEMP_2 == 2
+# define BOOST_PP_ITERATION_START_4_DIGIT_2 2
+# elif BOOST_PP_SLOT_TEMP_2 == 3
+# define BOOST_PP_ITERATION_START_4_DIGIT_2 3
+# elif BOOST_PP_SLOT_TEMP_2 == 4
+# define BOOST_PP_ITERATION_START_4_DIGIT_2 4
+# elif BOOST_PP_SLOT_TEMP_2 == 5
+# define BOOST_PP_ITERATION_START_4_DIGIT_2 5
+# elif BOOST_PP_SLOT_TEMP_2 == 6
+# define BOOST_PP_ITERATION_START_4_DIGIT_2 6
+# elif BOOST_PP_SLOT_TEMP_2 == 7
+# define BOOST_PP_ITERATION_START_4_DIGIT_2 7
+# elif BOOST_PP_SLOT_TEMP_2 == 8
+# define BOOST_PP_ITERATION_START_4_DIGIT_2 8
+# elif BOOST_PP_SLOT_TEMP_2 == 9
+# define BOOST_PP_ITERATION_START_4_DIGIT_2 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_1 == 0
+# define BOOST_PP_ITERATION_START_4_DIGIT_1 0
+# elif BOOST_PP_SLOT_TEMP_1 == 1
+# define BOOST_PP_ITERATION_START_4_DIGIT_1 1
+# elif BOOST_PP_SLOT_TEMP_1 == 2
+# define BOOST_PP_ITERATION_START_4_DIGIT_1 2
+# elif BOOST_PP_SLOT_TEMP_1 == 3
+# define BOOST_PP_ITERATION_START_4_DIGIT_1 3
+# elif BOOST_PP_SLOT_TEMP_1 == 4
+# define BOOST_PP_ITERATION_START_4_DIGIT_1 4
+# elif BOOST_PP_SLOT_TEMP_1 == 5
+# define BOOST_PP_ITERATION_START_4_DIGIT_1 5
+# elif BOOST_PP_SLOT_TEMP_1 == 6
+# define BOOST_PP_ITERATION_START_4_DIGIT_1 6
+# elif BOOST_PP_SLOT_TEMP_1 == 7
+# define BOOST_PP_ITERATION_START_4_DIGIT_1 7
+# elif BOOST_PP_SLOT_TEMP_1 == 8
+# define BOOST_PP_ITERATION_START_4_DIGIT_1 8
+# elif BOOST_PP_SLOT_TEMP_1 == 9
+# define BOOST_PP_ITERATION_START_4_DIGIT_1 9
+# endif
+#
+# if BOOST_PP_ITERATION_START_4_DIGIT_3
+# define BOOST_PP_ITERATION_START_4 BOOST_PP_SLOT_CC_3(BOOST_PP_ITERATION_START_4_DIGIT_3, BOOST_PP_ITERATION_START_4_DIGIT_2, BOOST_PP_ITERATION_START_4_DIGIT_1)
+# elif BOOST_PP_ITERATION_START_4_DIGIT_2
+# define BOOST_PP_ITERATION_START_4 BOOST_PP_SLOT_CC_2(BOOST_PP_ITERATION_START_4_DIGIT_2, BOOST_PP_ITERATION_START_4_DIGIT_1)
+# else
+# define BOOST_PP_ITERATION_START_4 BOOST_PP_ITERATION_START_4_DIGIT_1
+# endif
diff --git a/boost/boost/preprocessor/iteration/detail/bounds/lower5.hpp b/boost/boost/preprocessor/iteration/detail/bounds/lower5.hpp
new file mode 100644
index 00000000000..f4888c7b57d
--- /dev/null
+++ b/boost/boost/preprocessor/iteration/detail/bounds/lower5.hpp
@@ -0,0 +1,99 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# include <boost/preprocessor/slot/detail/shared.hpp>
+#
+# undef BOOST_PP_ITERATION_START_5
+#
+# undef BOOST_PP_ITERATION_START_5_DIGIT_1
+# undef BOOST_PP_ITERATION_START_5_DIGIT_2
+# undef BOOST_PP_ITERATION_START_5_DIGIT_3
+# undef BOOST_PP_ITERATION_START_5_DIGIT_4
+# undef BOOST_PP_ITERATION_START_5_DIGIT_5
+# undef BOOST_PP_ITERATION_START_5_DIGIT_6
+# undef BOOST_PP_ITERATION_START_5_DIGIT_7
+# undef BOOST_PP_ITERATION_START_5_DIGIT_8
+# undef BOOST_PP_ITERATION_START_5_DIGIT_9
+# undef BOOST_PP_ITERATION_START_5_DIGIT_10
+#
+# if BOOST_PP_SLOT_TEMP_3 == 0
+# define BOOST_PP_ITERATION_START_5_DIGIT_3 0
+# elif BOOST_PP_SLOT_TEMP_3 == 1
+# define BOOST_PP_ITERATION_START_5_DIGIT_3 1
+# elif BOOST_PP_SLOT_TEMP_3 == 2
+# define BOOST_PP_ITERATION_START_5_DIGIT_3 2
+# elif BOOST_PP_SLOT_TEMP_3 == 3
+# define BOOST_PP_ITERATION_START_5_DIGIT_3 3
+# elif BOOST_PP_SLOT_TEMP_3 == 4
+# define BOOST_PP_ITERATION_START_5_DIGIT_3 4
+# elif BOOST_PP_SLOT_TEMP_3 == 5
+# define BOOST_PP_ITERATION_START_5_DIGIT_3 5
+# elif BOOST_PP_SLOT_TEMP_3 == 6
+# define BOOST_PP_ITERATION_START_5_DIGIT_3 6
+# elif BOOST_PP_SLOT_TEMP_3 == 7
+# define BOOST_PP_ITERATION_START_5_DIGIT_3 7
+# elif BOOST_PP_SLOT_TEMP_3 == 8
+# define BOOST_PP_ITERATION_START_5_DIGIT_3 8
+# elif BOOST_PP_SLOT_TEMP_3 == 9
+# define BOOST_PP_ITERATION_START_5_DIGIT_3 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_2 == 0
+# define BOOST_PP_ITERATION_START_5_DIGIT_2 0
+# elif BOOST_PP_SLOT_TEMP_2 == 1
+# define BOOST_PP_ITERATION_START_5_DIGIT_2 1
+# elif BOOST_PP_SLOT_TEMP_2 == 2
+# define BOOST_PP_ITERATION_START_5_DIGIT_2 2
+# elif BOOST_PP_SLOT_TEMP_2 == 3
+# define BOOST_PP_ITERATION_START_5_DIGIT_2 3
+# elif BOOST_PP_SLOT_TEMP_2 == 4
+# define BOOST_PP_ITERATION_START_5_DIGIT_2 4
+# elif BOOST_PP_SLOT_TEMP_2 == 5
+# define BOOST_PP_ITERATION_START_5_DIGIT_2 5
+# elif BOOST_PP_SLOT_TEMP_2 == 6
+# define BOOST_PP_ITERATION_START_5_DIGIT_2 6
+# elif BOOST_PP_SLOT_TEMP_2 == 7
+# define BOOST_PP_ITERATION_START_5_DIGIT_2 7
+# elif BOOST_PP_SLOT_TEMP_2 == 8
+# define BOOST_PP_ITERATION_START_5_DIGIT_2 8
+# elif BOOST_PP_SLOT_TEMP_2 == 9
+# define BOOST_PP_ITERATION_START_5_DIGIT_2 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_1 == 0
+# define BOOST_PP_ITERATION_START_5_DIGIT_1 0
+# elif BOOST_PP_SLOT_TEMP_1 == 1
+# define BOOST_PP_ITERATION_START_5_DIGIT_1 1
+# elif BOOST_PP_SLOT_TEMP_1 == 2
+# define BOOST_PP_ITERATION_START_5_DIGIT_1 2
+# elif BOOST_PP_SLOT_TEMP_1 == 3
+# define BOOST_PP_ITERATION_START_5_DIGIT_1 3
+# elif BOOST_PP_SLOT_TEMP_1 == 4
+# define BOOST_PP_ITERATION_START_5_DIGIT_1 4
+# elif BOOST_PP_SLOT_TEMP_1 == 5
+# define BOOST_PP_ITERATION_START_5_DIGIT_1 5
+# elif BOOST_PP_SLOT_TEMP_1 == 6
+# define BOOST_PP_ITERATION_START_5_DIGIT_1 6
+# elif BOOST_PP_SLOT_TEMP_1 == 7
+# define BOOST_PP_ITERATION_START_5_DIGIT_1 7
+# elif BOOST_PP_SLOT_TEMP_1 == 8
+# define BOOST_PP_ITERATION_START_5_DIGIT_1 8
+# elif BOOST_PP_SLOT_TEMP_1 == 9
+# define BOOST_PP_ITERATION_START_5_DIGIT_1 9
+# endif
+#
+# if BOOST_PP_ITERATION_START_5_DIGIT_3
+# define BOOST_PP_ITERATION_START_5 BOOST_PP_SLOT_CC_3(BOOST_PP_ITERATION_START_5_DIGIT_3, BOOST_PP_ITERATION_START_5_DIGIT_2, BOOST_PP_ITERATION_START_5_DIGIT_1)
+# elif BOOST_PP_ITERATION_START_5_DIGIT_2
+# define BOOST_PP_ITERATION_START_5 BOOST_PP_SLOT_CC_2(BOOST_PP_ITERATION_START_5_DIGIT_2, BOOST_PP_ITERATION_START_5_DIGIT_1)
+# else
+# define BOOST_PP_ITERATION_START_5 BOOST_PP_ITERATION_START_5_DIGIT_1
+# endif
diff --git a/boost/boost/preprocessor/iteration/detail/bounds/upper1.hpp b/boost/boost/preprocessor/iteration/detail/bounds/upper1.hpp
new file mode 100644
index 00000000000..50d0fcfa32a
--- /dev/null
+++ b/boost/boost/preprocessor/iteration/detail/bounds/upper1.hpp
@@ -0,0 +1,99 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# include <boost/preprocessor/slot/detail/shared.hpp>
+#
+# undef BOOST_PP_ITERATION_FINISH_1
+#
+# undef BOOST_PP_ITERATION_FINISH_1_DIGIT_1
+# undef BOOST_PP_ITERATION_FINISH_1_DIGIT_2
+# undef BOOST_PP_ITERATION_FINISH_1_DIGIT_3
+# undef BOOST_PP_ITERATION_FINISH_1_DIGIT_4
+# undef BOOST_PP_ITERATION_FINISH_1_DIGIT_5
+# undef BOOST_PP_ITERATION_FINISH_1_DIGIT_6
+# undef BOOST_PP_ITERATION_FINISH_1_DIGIT_7
+# undef BOOST_PP_ITERATION_FINISH_1_DIGIT_8
+# undef BOOST_PP_ITERATION_FINISH_1_DIGIT_9
+# undef BOOST_PP_ITERATION_FINISH_1_DIGIT_10
+#
+# if BOOST_PP_SLOT_TEMP_3 == 0
+# define BOOST_PP_ITERATION_FINISH_1_DIGIT_3 0
+# elif BOOST_PP_SLOT_TEMP_3 == 1
+# define BOOST_PP_ITERATION_FINISH_1_DIGIT_3 1
+# elif BOOST_PP_SLOT_TEMP_3 == 2
+# define BOOST_PP_ITERATION_FINISH_1_DIGIT_3 2
+# elif BOOST_PP_SLOT_TEMP_3 == 3
+# define BOOST_PP_ITERATION_FINISH_1_DIGIT_3 3
+# elif BOOST_PP_SLOT_TEMP_3 == 4
+# define BOOST_PP_ITERATION_FINISH_1_DIGIT_3 4
+# elif BOOST_PP_SLOT_TEMP_3 == 5
+# define BOOST_PP_ITERATION_FINISH_1_DIGIT_3 5
+# elif BOOST_PP_SLOT_TEMP_3 == 6
+# define BOOST_PP_ITERATION_FINISH_1_DIGIT_3 6
+# elif BOOST_PP_SLOT_TEMP_3 == 7
+# define BOOST_PP_ITERATION_FINISH_1_DIGIT_3 7
+# elif BOOST_PP_SLOT_TEMP_3 == 8
+# define BOOST_PP_ITERATION_FINISH_1_DIGIT_3 8
+# elif BOOST_PP_SLOT_TEMP_3 == 9
+# define BOOST_PP_ITERATION_FINISH_1_DIGIT_3 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_2 == 0
+# define BOOST_PP_ITERATION_FINISH_1_DIGIT_2 0
+# elif BOOST_PP_SLOT_TEMP_2 == 1
+# define BOOST_PP_ITERATION_FINISH_1_DIGIT_2 1
+# elif BOOST_PP_SLOT_TEMP_2 == 2
+# define BOOST_PP_ITERATION_FINISH_1_DIGIT_2 2
+# elif BOOST_PP_SLOT_TEMP_2 == 3
+# define BOOST_PP_ITERATION_FINISH_1_DIGIT_2 3
+# elif BOOST_PP_SLOT_TEMP_2 == 4
+# define BOOST_PP_ITERATION_FINISH_1_DIGIT_2 4
+# elif BOOST_PP_SLOT_TEMP_2 == 5
+# define BOOST_PP_ITERATION_FINISH_1_DIGIT_2 5
+# elif BOOST_PP_SLOT_TEMP_2 == 6
+# define BOOST_PP_ITERATION_FINISH_1_DIGIT_2 6
+# elif BOOST_PP_SLOT_TEMP_2 == 7
+# define BOOST_PP_ITERATION_FINISH_1_DIGIT_2 7
+# elif BOOST_PP_SLOT_TEMP_2 == 8
+# define BOOST_PP_ITERATION_FINISH_1_DIGIT_2 8
+# elif BOOST_PP_SLOT_TEMP_2 == 9
+# define BOOST_PP_ITERATION_FINISH_1_DIGIT_2 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_1 == 0
+# define BOOST_PP_ITERATION_FINISH_1_DIGIT_1 0
+# elif BOOST_PP_SLOT_TEMP_1 == 1
+# define BOOST_PP_ITERATION_FINISH_1_DIGIT_1 1
+# elif BOOST_PP_SLOT_TEMP_1 == 2
+# define BOOST_PP_ITERATION_FINISH_1_DIGIT_1 2
+# elif BOOST_PP_SLOT_TEMP_1 == 3
+# define BOOST_PP_ITERATION_FINISH_1_DIGIT_1 3
+# elif BOOST_PP_SLOT_TEMP_1 == 4
+# define BOOST_PP_ITERATION_FINISH_1_DIGIT_1 4
+# elif BOOST_PP_SLOT_TEMP_1 == 5
+# define BOOST_PP_ITERATION_FINISH_1_DIGIT_1 5
+# elif BOOST_PP_SLOT_TEMP_1 == 6
+# define BOOST_PP_ITERATION_FINISH_1_DIGIT_1 6
+# elif BOOST_PP_SLOT_TEMP_1 == 7
+# define BOOST_PP_ITERATION_FINISH_1_DIGIT_1 7
+# elif BOOST_PP_SLOT_TEMP_1 == 8
+# define BOOST_PP_ITERATION_FINISH_1_DIGIT_1 8
+# elif BOOST_PP_SLOT_TEMP_1 == 9
+# define BOOST_PP_ITERATION_FINISH_1_DIGIT_1 9
+# endif
+#
+# if BOOST_PP_ITERATION_FINISH_1_DIGIT_3
+# define BOOST_PP_ITERATION_FINISH_1 BOOST_PP_SLOT_CC_3(BOOST_PP_ITERATION_FINISH_1_DIGIT_3, BOOST_PP_ITERATION_FINISH_1_DIGIT_2, BOOST_PP_ITERATION_FINISH_1_DIGIT_1)
+# elif BOOST_PP_ITERATION_FINISH_1_DIGIT_2
+# define BOOST_PP_ITERATION_FINISH_1 BOOST_PP_SLOT_CC_2(BOOST_PP_ITERATION_FINISH_1_DIGIT_2, BOOST_PP_ITERATION_FINISH_1_DIGIT_1)
+# else
+# define BOOST_PP_ITERATION_FINISH_1 BOOST_PP_ITERATION_FINISH_1_DIGIT_1
+# endif
diff --git a/boost/boost/preprocessor/iteration/detail/bounds/upper2.hpp b/boost/boost/preprocessor/iteration/detail/bounds/upper2.hpp
new file mode 100644
index 00000000000..faef6f49e33
--- /dev/null
+++ b/boost/boost/preprocessor/iteration/detail/bounds/upper2.hpp
@@ -0,0 +1,99 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# include <boost/preprocessor/slot/detail/shared.hpp>
+#
+# undef BOOST_PP_ITERATION_FINISH_2
+#
+# undef BOOST_PP_ITERATION_FINISH_2_DIGIT_1
+# undef BOOST_PP_ITERATION_FINISH_2_DIGIT_2
+# undef BOOST_PP_ITERATION_FINISH_2_DIGIT_3
+# undef BOOST_PP_ITERATION_FINISH_2_DIGIT_4
+# undef BOOST_PP_ITERATION_FINISH_2_DIGIT_5
+# undef BOOST_PP_ITERATION_FINISH_2_DIGIT_6
+# undef BOOST_PP_ITERATION_FINISH_2_DIGIT_7
+# undef BOOST_PP_ITERATION_FINISH_2_DIGIT_8
+# undef BOOST_PP_ITERATION_FINISH_2_DIGIT_9
+# undef BOOST_PP_ITERATION_FINISH_2_DIGIT_10
+#
+# if BOOST_PP_SLOT_TEMP_3 == 0
+# define BOOST_PP_ITERATION_FINISH_2_DIGIT_3 0
+# elif BOOST_PP_SLOT_TEMP_3 == 1
+# define BOOST_PP_ITERATION_FINISH_2_DIGIT_3 1
+# elif BOOST_PP_SLOT_TEMP_3 == 2
+# define BOOST_PP_ITERATION_FINISH_2_DIGIT_3 2
+# elif BOOST_PP_SLOT_TEMP_3 == 3
+# define BOOST_PP_ITERATION_FINISH_2_DIGIT_3 3
+# elif BOOST_PP_SLOT_TEMP_3 == 4
+# define BOOST_PP_ITERATION_FINISH_2_DIGIT_3 4
+# elif BOOST_PP_SLOT_TEMP_3 == 5
+# define BOOST_PP_ITERATION_FINISH_2_DIGIT_3 5
+# elif BOOST_PP_SLOT_TEMP_3 == 6
+# define BOOST_PP_ITERATION_FINISH_2_DIGIT_3 6
+# elif BOOST_PP_SLOT_TEMP_3 == 7
+# define BOOST_PP_ITERATION_FINISH_2_DIGIT_3 7
+# elif BOOST_PP_SLOT_TEMP_3 == 8
+# define BOOST_PP_ITERATION_FINISH_2_DIGIT_3 8
+# elif BOOST_PP_SLOT_TEMP_3 == 9
+# define BOOST_PP_ITERATION_FINISH_2_DIGIT_3 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_2 == 0
+# define BOOST_PP_ITERATION_FINISH_2_DIGIT_2 0
+# elif BOOST_PP_SLOT_TEMP_2 == 1
+# define BOOST_PP_ITERATION_FINISH_2_DIGIT_2 1
+# elif BOOST_PP_SLOT_TEMP_2 == 2
+# define BOOST_PP_ITERATION_FINISH_2_DIGIT_2 2
+# elif BOOST_PP_SLOT_TEMP_2 == 3
+# define BOOST_PP_ITERATION_FINISH_2_DIGIT_2 3
+# elif BOOST_PP_SLOT_TEMP_2 == 4
+# define BOOST_PP_ITERATION_FINISH_2_DIGIT_2 4
+# elif BOOST_PP_SLOT_TEMP_2 == 5
+# define BOOST_PP_ITERATION_FINISH_2_DIGIT_2 5
+# elif BOOST_PP_SLOT_TEMP_2 == 6
+# define BOOST_PP_ITERATION_FINISH_2_DIGIT_2 6
+# elif BOOST_PP_SLOT_TEMP_2 == 7
+# define BOOST_PP_ITERATION_FINISH_2_DIGIT_2 7
+# elif BOOST_PP_SLOT_TEMP_2 == 8
+# define BOOST_PP_ITERATION_FINISH_2_DIGIT_2 8
+# elif BOOST_PP_SLOT_TEMP_2 == 9
+# define BOOST_PP_ITERATION_FINISH_2_DIGIT_2 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_1 == 0
+# define BOOST_PP_ITERATION_FINISH_2_DIGIT_1 0
+# elif BOOST_PP_SLOT_TEMP_1 == 1
+# define BOOST_PP_ITERATION_FINISH_2_DIGIT_1 1
+# elif BOOST_PP_SLOT_TEMP_1 == 2
+# define BOOST_PP_ITERATION_FINISH_2_DIGIT_1 2
+# elif BOOST_PP_SLOT_TEMP_1 == 3
+# define BOOST_PP_ITERATION_FINISH_2_DIGIT_1 3
+# elif BOOST_PP_SLOT_TEMP_1 == 4
+# define BOOST_PP_ITERATION_FINISH_2_DIGIT_1 4
+# elif BOOST_PP_SLOT_TEMP_1 == 5
+# define BOOST_PP_ITERATION_FINISH_2_DIGIT_1 5
+# elif BOOST_PP_SLOT_TEMP_1 == 6
+# define BOOST_PP_ITERATION_FINISH_2_DIGIT_1 6
+# elif BOOST_PP_SLOT_TEMP_1 == 7
+# define BOOST_PP_ITERATION_FINISH_2_DIGIT_1 7
+# elif BOOST_PP_SLOT_TEMP_1 == 8
+# define BOOST_PP_ITERATION_FINISH_2_DIGIT_1 8
+# elif BOOST_PP_SLOT_TEMP_1 == 9
+# define BOOST_PP_ITERATION_FINISH_2_DIGIT_1 9
+# endif
+#
+# if BOOST_PP_ITERATION_FINISH_2_DIGIT_3
+# define BOOST_PP_ITERATION_FINISH_2 BOOST_PP_SLOT_CC_3(BOOST_PP_ITERATION_FINISH_2_DIGIT_3, BOOST_PP_ITERATION_FINISH_2_DIGIT_2, BOOST_PP_ITERATION_FINISH_2_DIGIT_1)
+# elif BOOST_PP_ITERATION_FINISH_2_DIGIT_2
+# define BOOST_PP_ITERATION_FINISH_2 BOOST_PP_SLOT_CC_2(BOOST_PP_ITERATION_FINISH_2_DIGIT_2, BOOST_PP_ITERATION_FINISH_2_DIGIT_1)
+# else
+# define BOOST_PP_ITERATION_FINISH_2 BOOST_PP_ITERATION_FINISH_2_DIGIT_1
+# endif
diff --git a/boost/boost/preprocessor/iteration/detail/bounds/upper3.hpp b/boost/boost/preprocessor/iteration/detail/bounds/upper3.hpp
new file mode 100644
index 00000000000..38d9adec460
--- /dev/null
+++ b/boost/boost/preprocessor/iteration/detail/bounds/upper3.hpp
@@ -0,0 +1,99 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# include <boost/preprocessor/slot/detail/shared.hpp>
+#
+# undef BOOST_PP_ITERATION_FINISH_3
+#
+# undef BOOST_PP_ITERATION_FINISH_3_DIGIT_1
+# undef BOOST_PP_ITERATION_FINISH_3_DIGIT_2
+# undef BOOST_PP_ITERATION_FINISH_3_DIGIT_3
+# undef BOOST_PP_ITERATION_FINISH_3_DIGIT_4
+# undef BOOST_PP_ITERATION_FINISH_3_DIGIT_5
+# undef BOOST_PP_ITERATION_FINISH_3_DIGIT_6
+# undef BOOST_PP_ITERATION_FINISH_3_DIGIT_7
+# undef BOOST_PP_ITERATION_FINISH_3_DIGIT_8
+# undef BOOST_PP_ITERATION_FINISH_3_DIGIT_9
+# undef BOOST_PP_ITERATION_FINISH_3_DIGIT_10
+#
+# if BOOST_PP_SLOT_TEMP_3 == 0
+# define BOOST_PP_ITERATION_FINISH_3_DIGIT_3 0
+# elif BOOST_PP_SLOT_TEMP_3 == 1
+# define BOOST_PP_ITERATION_FINISH_3_DIGIT_3 1
+# elif BOOST_PP_SLOT_TEMP_3 == 2
+# define BOOST_PP_ITERATION_FINISH_3_DIGIT_3 2
+# elif BOOST_PP_SLOT_TEMP_3 == 3
+# define BOOST_PP_ITERATION_FINISH_3_DIGIT_3 3
+# elif BOOST_PP_SLOT_TEMP_3 == 4
+# define BOOST_PP_ITERATION_FINISH_3_DIGIT_3 4
+# elif BOOST_PP_SLOT_TEMP_3 == 5
+# define BOOST_PP_ITERATION_FINISH_3_DIGIT_3 5
+# elif BOOST_PP_SLOT_TEMP_3 == 6
+# define BOOST_PP_ITERATION_FINISH_3_DIGIT_3 6
+# elif BOOST_PP_SLOT_TEMP_3 == 7
+# define BOOST_PP_ITERATION_FINISH_3_DIGIT_3 7
+# elif BOOST_PP_SLOT_TEMP_3 == 8
+# define BOOST_PP_ITERATION_FINISH_3_DIGIT_3 8
+# elif BOOST_PP_SLOT_TEMP_3 == 9
+# define BOOST_PP_ITERATION_FINISH_3_DIGIT_3 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_2 == 0
+# define BOOST_PP_ITERATION_FINISH_3_DIGIT_2 0
+# elif BOOST_PP_SLOT_TEMP_2 == 1
+# define BOOST_PP_ITERATION_FINISH_3_DIGIT_2 1
+# elif BOOST_PP_SLOT_TEMP_2 == 2
+# define BOOST_PP_ITERATION_FINISH_3_DIGIT_2 2
+# elif BOOST_PP_SLOT_TEMP_2 == 3
+# define BOOST_PP_ITERATION_FINISH_3_DIGIT_2 3
+# elif BOOST_PP_SLOT_TEMP_2 == 4
+# define BOOST_PP_ITERATION_FINISH_3_DIGIT_2 4
+# elif BOOST_PP_SLOT_TEMP_2 == 5
+# define BOOST_PP_ITERATION_FINISH_3_DIGIT_2 5
+# elif BOOST_PP_SLOT_TEMP_2 == 6
+# define BOOST_PP_ITERATION_FINISH_3_DIGIT_2 6
+# elif BOOST_PP_SLOT_TEMP_2 == 7
+# define BOOST_PP_ITERATION_FINISH_3_DIGIT_2 7
+# elif BOOST_PP_SLOT_TEMP_2 == 8
+# define BOOST_PP_ITERATION_FINISH_3_DIGIT_2 8
+# elif BOOST_PP_SLOT_TEMP_2 == 9
+# define BOOST_PP_ITERATION_FINISH_3_DIGIT_2 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_1 == 0
+# define BOOST_PP_ITERATION_FINISH_3_DIGIT_1 0
+# elif BOOST_PP_SLOT_TEMP_1 == 1
+# define BOOST_PP_ITERATION_FINISH_3_DIGIT_1 1
+# elif BOOST_PP_SLOT_TEMP_1 == 2
+# define BOOST_PP_ITERATION_FINISH_3_DIGIT_1 2
+# elif BOOST_PP_SLOT_TEMP_1 == 3
+# define BOOST_PP_ITERATION_FINISH_3_DIGIT_1 3
+# elif BOOST_PP_SLOT_TEMP_1 == 4
+# define BOOST_PP_ITERATION_FINISH_3_DIGIT_1 4
+# elif BOOST_PP_SLOT_TEMP_1 == 5
+# define BOOST_PP_ITERATION_FINISH_3_DIGIT_1 5
+# elif BOOST_PP_SLOT_TEMP_1 == 6
+# define BOOST_PP_ITERATION_FINISH_3_DIGIT_1 6
+# elif BOOST_PP_SLOT_TEMP_1 == 7
+# define BOOST_PP_ITERATION_FINISH_3_DIGIT_1 7
+# elif BOOST_PP_SLOT_TEMP_1 == 8
+# define BOOST_PP_ITERATION_FINISH_3_DIGIT_1 8
+# elif BOOST_PP_SLOT_TEMP_1 == 9
+# define BOOST_PP_ITERATION_FINISH_3_DIGIT_1 9
+# endif
+#
+# if BOOST_PP_ITERATION_FINISH_3_DIGIT_3
+# define BOOST_PP_ITERATION_FINISH_3 BOOST_PP_SLOT_CC_3(BOOST_PP_ITERATION_FINISH_3_DIGIT_3, BOOST_PP_ITERATION_FINISH_3_DIGIT_2, BOOST_PP_ITERATION_FINISH_3_DIGIT_1)
+# elif BOOST_PP_ITERATION_FINISH_3_DIGIT_2
+# define BOOST_PP_ITERATION_FINISH_3 BOOST_PP_SLOT_CC_2(BOOST_PP_ITERATION_FINISH_3_DIGIT_2, BOOST_PP_ITERATION_FINISH_3_DIGIT_1)
+# else
+# define BOOST_PP_ITERATION_FINISH_3 BOOST_PP_ITERATION_FINISH_3_DIGIT_1
+# endif
diff --git a/boost/boost/preprocessor/iteration/detail/bounds/upper4.hpp b/boost/boost/preprocessor/iteration/detail/bounds/upper4.hpp
new file mode 100644
index 00000000000..7f771c2ce7a
--- /dev/null
+++ b/boost/boost/preprocessor/iteration/detail/bounds/upper4.hpp
@@ -0,0 +1,99 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# include <boost/preprocessor/slot/detail/shared.hpp>
+#
+# undef BOOST_PP_ITERATION_FINISH_4
+#
+# undef BOOST_PP_ITERATION_FINISH_4_DIGIT_1
+# undef BOOST_PP_ITERATION_FINISH_4_DIGIT_2
+# undef BOOST_PP_ITERATION_FINISH_4_DIGIT_3
+# undef BOOST_PP_ITERATION_FINISH_4_DIGIT_4
+# undef BOOST_PP_ITERATION_FINISH_4_DIGIT_5
+# undef BOOST_PP_ITERATION_FINISH_4_DIGIT_6
+# undef BOOST_PP_ITERATION_FINISH_4_DIGIT_7
+# undef BOOST_PP_ITERATION_FINISH_4_DIGIT_8
+# undef BOOST_PP_ITERATION_FINISH_4_DIGIT_9
+# undef BOOST_PP_ITERATION_FINISH_4_DIGIT_10
+#
+# if BOOST_PP_SLOT_TEMP_3 == 0
+# define BOOST_PP_ITERATION_FINISH_4_DIGIT_3 0
+# elif BOOST_PP_SLOT_TEMP_3 == 1
+# define BOOST_PP_ITERATION_FINISH_4_DIGIT_3 1
+# elif BOOST_PP_SLOT_TEMP_3 == 2
+# define BOOST_PP_ITERATION_FINISH_4_DIGIT_3 2
+# elif BOOST_PP_SLOT_TEMP_3 == 3
+# define BOOST_PP_ITERATION_FINISH_4_DIGIT_3 3
+# elif BOOST_PP_SLOT_TEMP_3 == 4
+# define BOOST_PP_ITERATION_FINISH_4_DIGIT_3 4
+# elif BOOST_PP_SLOT_TEMP_3 == 5
+# define BOOST_PP_ITERATION_FINISH_4_DIGIT_3 5
+# elif BOOST_PP_SLOT_TEMP_3 == 6
+# define BOOST_PP_ITERATION_FINISH_4_DIGIT_3 6
+# elif BOOST_PP_SLOT_TEMP_3 == 7
+# define BOOST_PP_ITERATION_FINISH_4_DIGIT_3 7
+# elif BOOST_PP_SLOT_TEMP_3 == 8
+# define BOOST_PP_ITERATION_FINISH_4_DIGIT_3 8
+# elif BOOST_PP_SLOT_TEMP_3 == 9
+# define BOOST_PP_ITERATION_FINISH_4_DIGIT_3 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_2 == 0
+# define BOOST_PP_ITERATION_FINISH_4_DIGIT_2 0
+# elif BOOST_PP_SLOT_TEMP_2 == 1
+# define BOOST_PP_ITERATION_FINISH_4_DIGIT_2 1
+# elif BOOST_PP_SLOT_TEMP_2 == 2
+# define BOOST_PP_ITERATION_FINISH_4_DIGIT_2 2
+# elif BOOST_PP_SLOT_TEMP_2 == 3
+# define BOOST_PP_ITERATION_FINISH_4_DIGIT_2 3
+# elif BOOST_PP_SLOT_TEMP_2 == 4
+# define BOOST_PP_ITERATION_FINISH_4_DIGIT_2 4
+# elif BOOST_PP_SLOT_TEMP_2 == 5
+# define BOOST_PP_ITERATION_FINISH_4_DIGIT_2 5
+# elif BOOST_PP_SLOT_TEMP_2 == 6
+# define BOOST_PP_ITERATION_FINISH_4_DIGIT_2 6
+# elif BOOST_PP_SLOT_TEMP_2 == 7
+# define BOOST_PP_ITERATION_FINISH_4_DIGIT_2 7
+# elif BOOST_PP_SLOT_TEMP_2 == 8
+# define BOOST_PP_ITERATION_FINISH_4_DIGIT_2 8
+# elif BOOST_PP_SLOT_TEMP_2 == 9
+# define BOOST_PP_ITERATION_FINISH_4_DIGIT_2 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_1 == 0
+# define BOOST_PP_ITERATION_FINISH_4_DIGIT_1 0
+# elif BOOST_PP_SLOT_TEMP_1 == 1
+# define BOOST_PP_ITERATION_FINISH_4_DIGIT_1 1
+# elif BOOST_PP_SLOT_TEMP_1 == 2
+# define BOOST_PP_ITERATION_FINISH_4_DIGIT_1 2
+# elif BOOST_PP_SLOT_TEMP_1 == 3
+# define BOOST_PP_ITERATION_FINISH_4_DIGIT_1 3
+# elif BOOST_PP_SLOT_TEMP_1 == 4
+# define BOOST_PP_ITERATION_FINISH_4_DIGIT_1 4
+# elif BOOST_PP_SLOT_TEMP_1 == 5
+# define BOOST_PP_ITERATION_FINISH_4_DIGIT_1 5
+# elif BOOST_PP_SLOT_TEMP_1 == 6
+# define BOOST_PP_ITERATION_FINISH_4_DIGIT_1 6
+# elif BOOST_PP_SLOT_TEMP_1 == 7
+# define BOOST_PP_ITERATION_FINISH_4_DIGIT_1 7
+# elif BOOST_PP_SLOT_TEMP_1 == 8
+# define BOOST_PP_ITERATION_FINISH_4_DIGIT_1 8
+# elif BOOST_PP_SLOT_TEMP_1 == 9
+# define BOOST_PP_ITERATION_FINISH_4_DIGIT_1 9
+# endif
+#
+# if BOOST_PP_ITERATION_FINISH_4_DIGIT_3
+# define BOOST_PP_ITERATION_FINISH_4 BOOST_PP_SLOT_CC_3(BOOST_PP_ITERATION_FINISH_4_DIGIT_3, BOOST_PP_ITERATION_FINISH_4_DIGIT_2, BOOST_PP_ITERATION_FINISH_4_DIGIT_1)
+# elif BOOST_PP_ITERATION_FINISH_4_DIGIT_2
+# define BOOST_PP_ITERATION_FINISH_4 BOOST_PP_SLOT_CC_2(BOOST_PP_ITERATION_FINISH_4_DIGIT_2, BOOST_PP_ITERATION_FINISH_4_DIGIT_1)
+# else
+# define BOOST_PP_ITERATION_FINISH_4 BOOST_PP_ITERATION_FINISH_4_DIGIT_1
+# endif
diff --git a/boost/boost/preprocessor/iteration/detail/bounds/upper5.hpp b/boost/boost/preprocessor/iteration/detail/bounds/upper5.hpp
new file mode 100644
index 00000000000..9f27d5884d4
--- /dev/null
+++ b/boost/boost/preprocessor/iteration/detail/bounds/upper5.hpp
@@ -0,0 +1,99 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# include <boost/preprocessor/slot/detail/shared.hpp>
+#
+# undef BOOST_PP_ITERATION_FINISH_5
+#
+# undef BOOST_PP_ITERATION_FINISH_5_DIGIT_1
+# undef BOOST_PP_ITERATION_FINISH_5_DIGIT_2
+# undef BOOST_PP_ITERATION_FINISH_5_DIGIT_3
+# undef BOOST_PP_ITERATION_FINISH_5_DIGIT_4
+# undef BOOST_PP_ITERATION_FINISH_5_DIGIT_5
+# undef BOOST_PP_ITERATION_FINISH_5_DIGIT_6
+# undef BOOST_PP_ITERATION_FINISH_5_DIGIT_7
+# undef BOOST_PP_ITERATION_FINISH_5_DIGIT_8
+# undef BOOST_PP_ITERATION_FINISH_5_DIGIT_9
+# undef BOOST_PP_ITERATION_FINISH_5_DIGIT_10
+#
+# if BOOST_PP_SLOT_TEMP_3 == 0
+# define BOOST_PP_ITERATION_FINISH_5_DIGIT_3 0
+# elif BOOST_PP_SLOT_TEMP_3 == 1
+# define BOOST_PP_ITERATION_FINISH_5_DIGIT_3 1
+# elif BOOST_PP_SLOT_TEMP_3 == 2
+# define BOOST_PP_ITERATION_FINISH_5_DIGIT_3 2
+# elif BOOST_PP_SLOT_TEMP_3 == 3
+# define BOOST_PP_ITERATION_FINISH_5_DIGIT_3 3
+# elif BOOST_PP_SLOT_TEMP_3 == 4
+# define BOOST_PP_ITERATION_FINISH_5_DIGIT_3 4
+# elif BOOST_PP_SLOT_TEMP_3 == 5
+# define BOOST_PP_ITERATION_FINISH_5_DIGIT_3 5
+# elif BOOST_PP_SLOT_TEMP_3 == 6
+# define BOOST_PP_ITERATION_FINISH_5_DIGIT_3 6
+# elif BOOST_PP_SLOT_TEMP_3 == 7
+# define BOOST_PP_ITERATION_FINISH_5_DIGIT_3 7
+# elif BOOST_PP_SLOT_TEMP_3 == 8
+# define BOOST_PP_ITERATION_FINISH_5_DIGIT_3 8
+# elif BOOST_PP_SLOT_TEMP_3 == 9
+# define BOOST_PP_ITERATION_FINISH_5_DIGIT_3 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_2 == 0
+# define BOOST_PP_ITERATION_FINISH_5_DIGIT_2 0
+# elif BOOST_PP_SLOT_TEMP_2 == 1
+# define BOOST_PP_ITERATION_FINISH_5_DIGIT_2 1
+# elif BOOST_PP_SLOT_TEMP_2 == 2
+# define BOOST_PP_ITERATION_FINISH_5_DIGIT_2 2
+# elif BOOST_PP_SLOT_TEMP_2 == 3
+# define BOOST_PP_ITERATION_FINISH_5_DIGIT_2 3
+# elif BOOST_PP_SLOT_TEMP_2 == 4
+# define BOOST_PP_ITERATION_FINISH_5_DIGIT_2 4
+# elif BOOST_PP_SLOT_TEMP_2 == 5
+# define BOOST_PP_ITERATION_FINISH_5_DIGIT_2 5
+# elif BOOST_PP_SLOT_TEMP_2 == 6
+# define BOOST_PP_ITERATION_FINISH_5_DIGIT_2 6
+# elif BOOST_PP_SLOT_TEMP_2 == 7
+# define BOOST_PP_ITERATION_FINISH_5_DIGIT_2 7
+# elif BOOST_PP_SLOT_TEMP_2 == 8
+# define BOOST_PP_ITERATION_FINISH_5_DIGIT_2 8
+# elif BOOST_PP_SLOT_TEMP_2 == 9
+# define BOOST_PP_ITERATION_FINISH_5_DIGIT_2 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_1 == 0
+# define BOOST_PP_ITERATION_FINISH_5_DIGIT_1 0
+# elif BOOST_PP_SLOT_TEMP_1 == 1
+# define BOOST_PP_ITERATION_FINISH_5_DIGIT_1 1
+# elif BOOST_PP_SLOT_TEMP_1 == 2
+# define BOOST_PP_ITERATION_FINISH_5_DIGIT_1 2
+# elif BOOST_PP_SLOT_TEMP_1 == 3
+# define BOOST_PP_ITERATION_FINISH_5_DIGIT_1 3
+# elif BOOST_PP_SLOT_TEMP_1 == 4
+# define BOOST_PP_ITERATION_FINISH_5_DIGIT_1 4
+# elif BOOST_PP_SLOT_TEMP_1 == 5
+# define BOOST_PP_ITERATION_FINISH_5_DIGIT_1 5
+# elif BOOST_PP_SLOT_TEMP_1 == 6
+# define BOOST_PP_ITERATION_FINISH_5_DIGIT_1 6
+# elif BOOST_PP_SLOT_TEMP_1 == 7
+# define BOOST_PP_ITERATION_FINISH_5_DIGIT_1 7
+# elif BOOST_PP_SLOT_TEMP_1 == 8
+# define BOOST_PP_ITERATION_FINISH_5_DIGIT_1 8
+# elif BOOST_PP_SLOT_TEMP_1 == 9
+# define BOOST_PP_ITERATION_FINISH_5_DIGIT_1 9
+# endif
+#
+# if BOOST_PP_ITERATION_FINISH_5_DIGIT_3
+# define BOOST_PP_ITERATION_FINISH_5 BOOST_PP_SLOT_CC_3(BOOST_PP_ITERATION_FINISH_5_DIGIT_3, BOOST_PP_ITERATION_FINISH_5_DIGIT_2, BOOST_PP_ITERATION_FINISH_5_DIGIT_1)
+# elif BOOST_PP_ITERATION_FINISH_5_DIGIT_2
+# define BOOST_PP_ITERATION_FINISH_5 BOOST_PP_SLOT_CC_2(BOOST_PP_ITERATION_FINISH_5_DIGIT_2, BOOST_PP_ITERATION_FINISH_5_DIGIT_1)
+# else
+# define BOOST_PP_ITERATION_FINISH_5 BOOST_PP_ITERATION_FINISH_5_DIGIT_1
+# endif
diff --git a/boost/boost/preprocessor/iteration/detail/finish.hpp b/boost/boost/preprocessor/iteration/detail/finish.hpp
new file mode 100644
index 00000000000..0236944cac2
--- /dev/null
+++ b/boost/boost/preprocessor/iteration/detail/finish.hpp
@@ -0,0 +1,99 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# include <boost/preprocessor/slot/detail/shared.hpp>
+#
+# undef BOOST_PP_LOCAL_FE
+#
+# undef BOOST_PP_LOCAL_FE_DIGIT_1
+# undef BOOST_PP_LOCAL_FE_DIGIT_2
+# undef BOOST_PP_LOCAL_FE_DIGIT_3
+# undef BOOST_PP_LOCAL_FE_DIGIT_4
+# undef BOOST_PP_LOCAL_FE_DIGIT_5
+# undef BOOST_PP_LOCAL_FE_DIGIT_6
+# undef BOOST_PP_LOCAL_FE_DIGIT_7
+# undef BOOST_PP_LOCAL_FE_DIGIT_8
+# undef BOOST_PP_LOCAL_FE_DIGIT_9
+# undef BOOST_PP_LOCAL_FE_DIGIT_10
+#
+# if BOOST_PP_SLOT_TEMP_3 == 0
+# define BOOST_PP_LOCAL_FE_DIGIT_3 0
+# elif BOOST_PP_SLOT_TEMP_3 == 1
+# define BOOST_PP_LOCAL_FE_DIGIT_3 1
+# elif BOOST_PP_SLOT_TEMP_3 == 2
+# define BOOST_PP_LOCAL_FE_DIGIT_3 2
+# elif BOOST_PP_SLOT_TEMP_3 == 3
+# define BOOST_PP_LOCAL_FE_DIGIT_3 3
+# elif BOOST_PP_SLOT_TEMP_3 == 4
+# define BOOST_PP_LOCAL_FE_DIGIT_3 4
+# elif BOOST_PP_SLOT_TEMP_3 == 5
+# define BOOST_PP_LOCAL_FE_DIGIT_3 5
+# elif BOOST_PP_SLOT_TEMP_3 == 6
+# define BOOST_PP_LOCAL_FE_DIGIT_3 6
+# elif BOOST_PP_SLOT_TEMP_3 == 7
+# define BOOST_PP_LOCAL_FE_DIGIT_3 7
+# elif BOOST_PP_SLOT_TEMP_3 == 8
+# define BOOST_PP_LOCAL_FE_DIGIT_3 8
+# elif BOOST_PP_SLOT_TEMP_3 == 9
+# define BOOST_PP_LOCAL_FE_DIGIT_3 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_2 == 0
+# define BOOST_PP_LOCAL_FE_DIGIT_2 0
+# elif BOOST_PP_SLOT_TEMP_2 == 1
+# define BOOST_PP_LOCAL_FE_DIGIT_2 1
+# elif BOOST_PP_SLOT_TEMP_2 == 2
+# define BOOST_PP_LOCAL_FE_DIGIT_2 2
+# elif BOOST_PP_SLOT_TEMP_2 == 3
+# define BOOST_PP_LOCAL_FE_DIGIT_2 3
+# elif BOOST_PP_SLOT_TEMP_2 == 4
+# define BOOST_PP_LOCAL_FE_DIGIT_2 4
+# elif BOOST_PP_SLOT_TEMP_2 == 5
+# define BOOST_PP_LOCAL_FE_DIGIT_2 5
+# elif BOOST_PP_SLOT_TEMP_2 == 6
+# define BOOST_PP_LOCAL_FE_DIGIT_2 6
+# elif BOOST_PP_SLOT_TEMP_2 == 7
+# define BOOST_PP_LOCAL_FE_DIGIT_2 7
+# elif BOOST_PP_SLOT_TEMP_2 == 8
+# define BOOST_PP_LOCAL_FE_DIGIT_2 8
+# elif BOOST_PP_SLOT_TEMP_2 == 9
+# define BOOST_PP_LOCAL_FE_DIGIT_2 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_1 == 0
+# define BOOST_PP_LOCAL_FE_DIGIT_1 0
+# elif BOOST_PP_SLOT_TEMP_1 == 1
+# define BOOST_PP_LOCAL_FE_DIGIT_1 1
+# elif BOOST_PP_SLOT_TEMP_1 == 2
+# define BOOST_PP_LOCAL_FE_DIGIT_1 2
+# elif BOOST_PP_SLOT_TEMP_1 == 3
+# define BOOST_PP_LOCAL_FE_DIGIT_1 3
+# elif BOOST_PP_SLOT_TEMP_1 == 4
+# define BOOST_PP_LOCAL_FE_DIGIT_1 4
+# elif BOOST_PP_SLOT_TEMP_1 == 5
+# define BOOST_PP_LOCAL_FE_DIGIT_1 5
+# elif BOOST_PP_SLOT_TEMP_1 == 6
+# define BOOST_PP_LOCAL_FE_DIGIT_1 6
+# elif BOOST_PP_SLOT_TEMP_1 == 7
+# define BOOST_PP_LOCAL_FE_DIGIT_1 7
+# elif BOOST_PP_SLOT_TEMP_1 == 8
+# define BOOST_PP_LOCAL_FE_DIGIT_1 8
+# elif BOOST_PP_SLOT_TEMP_1 == 9
+# define BOOST_PP_LOCAL_FE_DIGIT_1 9
+# endif
+#
+# if BOOST_PP_LOCAL_FE_DIGIT_3
+# define BOOST_PP_LOCAL_FE() BOOST_PP_SLOT_CC_3(BOOST_PP_LOCAL_FE_DIGIT_3, BOOST_PP_LOCAL_FE_DIGIT_2, BOOST_PP_LOCAL_FE_DIGIT_1)
+# elif BOOST_PP_LOCAL_FE_DIGIT_2
+# define BOOST_PP_LOCAL_FE() BOOST_PP_SLOT_CC_2(BOOST_PP_LOCAL_FE_DIGIT_2, BOOST_PP_LOCAL_FE_DIGIT_1)
+# else
+# define BOOST_PP_LOCAL_FE() BOOST_PP_LOCAL_FE_DIGIT_1
+# endif
diff --git a/boost/boost/preprocessor/iteration/detail/iter/forward1.hpp b/boost/boost/preprocessor/iteration/detail/iter/forward1.hpp
new file mode 100644
index 00000000000..3f41ba1e21c
--- /dev/null
+++ b/boost/boost/preprocessor/iteration/detail/iter/forward1.hpp
@@ -0,0 +1,1342 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# if defined(BOOST_PP_ITERATION_LIMITS)
+# if !defined(BOOST_PP_FILENAME_1)
+# error BOOST_PP_ERROR: depth #1 filename is not defined
+# endif
+# define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_ITERATION_LIMITS)
+# include <boost/preprocessor/iteration/detail/bounds/lower1.hpp>
+# define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 1, BOOST_PP_ITERATION_LIMITS)
+# include <boost/preprocessor/iteration/detail/bounds/upper1.hpp>
+# define BOOST_PP_ITERATION_FLAGS_1 0
+# undef BOOST_PP_ITERATION_LIMITS
+# elif defined(BOOST_PP_ITERATION_PARAMS_1)
+# define BOOST_PP_VALUE BOOST_PP_ARRAY_ELEM(0, BOOST_PP_ITERATION_PARAMS_1)
+# include <boost/preprocessor/iteration/detail/bounds/lower1.hpp>
+# define BOOST_PP_VALUE BOOST_PP_ARRAY_ELEM(1, BOOST_PP_ITERATION_PARAMS_1)
+# include <boost/preprocessor/iteration/detail/bounds/upper1.hpp>
+# define BOOST_PP_FILENAME_1 BOOST_PP_ARRAY_ELEM(2, BOOST_PP_ITERATION_PARAMS_1)
+# if BOOST_PP_ARRAY_SIZE(BOOST_PP_ITERATION_PARAMS_1) >= 4
+# define BOOST_PP_ITERATION_FLAGS_1 BOOST_PP_ARRAY_ELEM(3, BOOST_PP_ITERATION_PARAMS_1)
+# else
+# define BOOST_PP_ITERATION_FLAGS_1 0
+# endif
+# else
+# error BOOST_PP_ERROR: depth #1 iteration boundaries or filename not defined
+# endif
+#
+# undef BOOST_PP_ITERATION_DEPTH
+# define BOOST_PP_ITERATION_DEPTH() 1
+#
+# define BOOST_PP_IS_ITERATING 1
+#
+# if (BOOST_PP_ITERATION_START_1) > (BOOST_PP_ITERATION_FINISH_1)
+# include <boost/preprocessor/iteration/detail/iter/reverse1.hpp>
+# else
+# if BOOST_PP_ITERATION_START_1 <= 0 && BOOST_PP_ITERATION_FINISH_1 >= 0
+# define BOOST_PP_ITERATION_1 0
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 1 && BOOST_PP_ITERATION_FINISH_1 >= 1
+# define BOOST_PP_ITERATION_1 1
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 2 && BOOST_PP_ITERATION_FINISH_1 >= 2
+# define BOOST_PP_ITERATION_1 2
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 3 && BOOST_PP_ITERATION_FINISH_1 >= 3
+# define BOOST_PP_ITERATION_1 3
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 4 && BOOST_PP_ITERATION_FINISH_1 >= 4
+# define BOOST_PP_ITERATION_1 4
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 5 && BOOST_PP_ITERATION_FINISH_1 >= 5
+# define BOOST_PP_ITERATION_1 5
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 6 && BOOST_PP_ITERATION_FINISH_1 >= 6
+# define BOOST_PP_ITERATION_1 6
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 7 && BOOST_PP_ITERATION_FINISH_1 >= 7
+# define BOOST_PP_ITERATION_1 7
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 8 && BOOST_PP_ITERATION_FINISH_1 >= 8
+# define BOOST_PP_ITERATION_1 8
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 9 && BOOST_PP_ITERATION_FINISH_1 >= 9
+# define BOOST_PP_ITERATION_1 9
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 10 && BOOST_PP_ITERATION_FINISH_1 >= 10
+# define BOOST_PP_ITERATION_1 10
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 11 && BOOST_PP_ITERATION_FINISH_1 >= 11
+# define BOOST_PP_ITERATION_1 11
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 12 && BOOST_PP_ITERATION_FINISH_1 >= 12
+# define BOOST_PP_ITERATION_1 12
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 13 && BOOST_PP_ITERATION_FINISH_1 >= 13
+# define BOOST_PP_ITERATION_1 13
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 14 && BOOST_PP_ITERATION_FINISH_1 >= 14
+# define BOOST_PP_ITERATION_1 14
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 15 && BOOST_PP_ITERATION_FINISH_1 >= 15
+# define BOOST_PP_ITERATION_1 15
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 16 && BOOST_PP_ITERATION_FINISH_1 >= 16
+# define BOOST_PP_ITERATION_1 16
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 17 && BOOST_PP_ITERATION_FINISH_1 >= 17
+# define BOOST_PP_ITERATION_1 17
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 18 && BOOST_PP_ITERATION_FINISH_1 >= 18
+# define BOOST_PP_ITERATION_1 18
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 19 && BOOST_PP_ITERATION_FINISH_1 >= 19
+# define BOOST_PP_ITERATION_1 19
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 20 && BOOST_PP_ITERATION_FINISH_1 >= 20
+# define BOOST_PP_ITERATION_1 20
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 21 && BOOST_PP_ITERATION_FINISH_1 >= 21
+# define BOOST_PP_ITERATION_1 21
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 22 && BOOST_PP_ITERATION_FINISH_1 >= 22
+# define BOOST_PP_ITERATION_1 22
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 23 && BOOST_PP_ITERATION_FINISH_1 >= 23
+# define BOOST_PP_ITERATION_1 23
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 24 && BOOST_PP_ITERATION_FINISH_1 >= 24
+# define BOOST_PP_ITERATION_1 24
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 25 && BOOST_PP_ITERATION_FINISH_1 >= 25
+# define BOOST_PP_ITERATION_1 25
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 26 && BOOST_PP_ITERATION_FINISH_1 >= 26
+# define BOOST_PP_ITERATION_1 26
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 27 && BOOST_PP_ITERATION_FINISH_1 >= 27
+# define BOOST_PP_ITERATION_1 27
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 28 && BOOST_PP_ITERATION_FINISH_1 >= 28
+# define BOOST_PP_ITERATION_1 28
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 29 && BOOST_PP_ITERATION_FINISH_1 >= 29
+# define BOOST_PP_ITERATION_1 29
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 30 && BOOST_PP_ITERATION_FINISH_1 >= 30
+# define BOOST_PP_ITERATION_1 30
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 31 && BOOST_PP_ITERATION_FINISH_1 >= 31
+# define BOOST_PP_ITERATION_1 31
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 32 && BOOST_PP_ITERATION_FINISH_1 >= 32
+# define BOOST_PP_ITERATION_1 32
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 33 && BOOST_PP_ITERATION_FINISH_1 >= 33
+# define BOOST_PP_ITERATION_1 33
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 34 && BOOST_PP_ITERATION_FINISH_1 >= 34
+# define BOOST_PP_ITERATION_1 34
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 35 && BOOST_PP_ITERATION_FINISH_1 >= 35
+# define BOOST_PP_ITERATION_1 35
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 36 && BOOST_PP_ITERATION_FINISH_1 >= 36
+# define BOOST_PP_ITERATION_1 36
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 37 && BOOST_PP_ITERATION_FINISH_1 >= 37
+# define BOOST_PP_ITERATION_1 37
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 38 && BOOST_PP_ITERATION_FINISH_1 >= 38
+# define BOOST_PP_ITERATION_1 38
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 39 && BOOST_PP_ITERATION_FINISH_1 >= 39
+# define BOOST_PP_ITERATION_1 39
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 40 && BOOST_PP_ITERATION_FINISH_1 >= 40
+# define BOOST_PP_ITERATION_1 40
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 41 && BOOST_PP_ITERATION_FINISH_1 >= 41
+# define BOOST_PP_ITERATION_1 41
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 42 && BOOST_PP_ITERATION_FINISH_1 >= 42
+# define BOOST_PP_ITERATION_1 42
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 43 && BOOST_PP_ITERATION_FINISH_1 >= 43
+# define BOOST_PP_ITERATION_1 43
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 44 && BOOST_PP_ITERATION_FINISH_1 >= 44
+# define BOOST_PP_ITERATION_1 44
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 45 && BOOST_PP_ITERATION_FINISH_1 >= 45
+# define BOOST_PP_ITERATION_1 45
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 46 && BOOST_PP_ITERATION_FINISH_1 >= 46
+# define BOOST_PP_ITERATION_1 46
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 47 && BOOST_PP_ITERATION_FINISH_1 >= 47
+# define BOOST_PP_ITERATION_1 47
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 48 && BOOST_PP_ITERATION_FINISH_1 >= 48
+# define BOOST_PP_ITERATION_1 48
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 49 && BOOST_PP_ITERATION_FINISH_1 >= 49
+# define BOOST_PP_ITERATION_1 49
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 50 && BOOST_PP_ITERATION_FINISH_1 >= 50
+# define BOOST_PP_ITERATION_1 50
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 51 && BOOST_PP_ITERATION_FINISH_1 >= 51
+# define BOOST_PP_ITERATION_1 51
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 52 && BOOST_PP_ITERATION_FINISH_1 >= 52
+# define BOOST_PP_ITERATION_1 52
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 53 && BOOST_PP_ITERATION_FINISH_1 >= 53
+# define BOOST_PP_ITERATION_1 53
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 54 && BOOST_PP_ITERATION_FINISH_1 >= 54
+# define BOOST_PP_ITERATION_1 54
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 55 && BOOST_PP_ITERATION_FINISH_1 >= 55
+# define BOOST_PP_ITERATION_1 55
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 56 && BOOST_PP_ITERATION_FINISH_1 >= 56
+# define BOOST_PP_ITERATION_1 56
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 57 && BOOST_PP_ITERATION_FINISH_1 >= 57
+# define BOOST_PP_ITERATION_1 57
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 58 && BOOST_PP_ITERATION_FINISH_1 >= 58
+# define BOOST_PP_ITERATION_1 58
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 59 && BOOST_PP_ITERATION_FINISH_1 >= 59
+# define BOOST_PP_ITERATION_1 59
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 60 && BOOST_PP_ITERATION_FINISH_1 >= 60
+# define BOOST_PP_ITERATION_1 60
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 61 && BOOST_PP_ITERATION_FINISH_1 >= 61
+# define BOOST_PP_ITERATION_1 61
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 62 && BOOST_PP_ITERATION_FINISH_1 >= 62
+# define BOOST_PP_ITERATION_1 62
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 63 && BOOST_PP_ITERATION_FINISH_1 >= 63
+# define BOOST_PP_ITERATION_1 63
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 64 && BOOST_PP_ITERATION_FINISH_1 >= 64
+# define BOOST_PP_ITERATION_1 64
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 65 && BOOST_PP_ITERATION_FINISH_1 >= 65
+# define BOOST_PP_ITERATION_1 65
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 66 && BOOST_PP_ITERATION_FINISH_1 >= 66
+# define BOOST_PP_ITERATION_1 66
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 67 && BOOST_PP_ITERATION_FINISH_1 >= 67
+# define BOOST_PP_ITERATION_1 67
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 68 && BOOST_PP_ITERATION_FINISH_1 >= 68
+# define BOOST_PP_ITERATION_1 68
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 69 && BOOST_PP_ITERATION_FINISH_1 >= 69
+# define BOOST_PP_ITERATION_1 69
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 70 && BOOST_PP_ITERATION_FINISH_1 >= 70
+# define BOOST_PP_ITERATION_1 70
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 71 && BOOST_PP_ITERATION_FINISH_1 >= 71
+# define BOOST_PP_ITERATION_1 71
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 72 && BOOST_PP_ITERATION_FINISH_1 >= 72
+# define BOOST_PP_ITERATION_1 72
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 73 && BOOST_PP_ITERATION_FINISH_1 >= 73
+# define BOOST_PP_ITERATION_1 73
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 74 && BOOST_PP_ITERATION_FINISH_1 >= 74
+# define BOOST_PP_ITERATION_1 74
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 75 && BOOST_PP_ITERATION_FINISH_1 >= 75
+# define BOOST_PP_ITERATION_1 75
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 76 && BOOST_PP_ITERATION_FINISH_1 >= 76
+# define BOOST_PP_ITERATION_1 76
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 77 && BOOST_PP_ITERATION_FINISH_1 >= 77
+# define BOOST_PP_ITERATION_1 77
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 78 && BOOST_PP_ITERATION_FINISH_1 >= 78
+# define BOOST_PP_ITERATION_1 78
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 79 && BOOST_PP_ITERATION_FINISH_1 >= 79
+# define BOOST_PP_ITERATION_1 79
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 80 && BOOST_PP_ITERATION_FINISH_1 >= 80
+# define BOOST_PP_ITERATION_1 80
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 81 && BOOST_PP_ITERATION_FINISH_1 >= 81
+# define BOOST_PP_ITERATION_1 81
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 82 && BOOST_PP_ITERATION_FINISH_1 >= 82
+# define BOOST_PP_ITERATION_1 82
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 83 && BOOST_PP_ITERATION_FINISH_1 >= 83
+# define BOOST_PP_ITERATION_1 83
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 84 && BOOST_PP_ITERATION_FINISH_1 >= 84
+# define BOOST_PP_ITERATION_1 84
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 85 && BOOST_PP_ITERATION_FINISH_1 >= 85
+# define BOOST_PP_ITERATION_1 85
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 86 && BOOST_PP_ITERATION_FINISH_1 >= 86
+# define BOOST_PP_ITERATION_1 86
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 87 && BOOST_PP_ITERATION_FINISH_1 >= 87
+# define BOOST_PP_ITERATION_1 87
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 88 && BOOST_PP_ITERATION_FINISH_1 >= 88
+# define BOOST_PP_ITERATION_1 88
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 89 && BOOST_PP_ITERATION_FINISH_1 >= 89
+# define BOOST_PP_ITERATION_1 89
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 90 && BOOST_PP_ITERATION_FINISH_1 >= 90
+# define BOOST_PP_ITERATION_1 90
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 91 && BOOST_PP_ITERATION_FINISH_1 >= 91
+# define BOOST_PP_ITERATION_1 91
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 92 && BOOST_PP_ITERATION_FINISH_1 >= 92
+# define BOOST_PP_ITERATION_1 92
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 93 && BOOST_PP_ITERATION_FINISH_1 >= 93
+# define BOOST_PP_ITERATION_1 93
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 94 && BOOST_PP_ITERATION_FINISH_1 >= 94
+# define BOOST_PP_ITERATION_1 94
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 95 && BOOST_PP_ITERATION_FINISH_1 >= 95
+# define BOOST_PP_ITERATION_1 95
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 96 && BOOST_PP_ITERATION_FINISH_1 >= 96
+# define BOOST_PP_ITERATION_1 96
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 97 && BOOST_PP_ITERATION_FINISH_1 >= 97
+# define BOOST_PP_ITERATION_1 97
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 98 && BOOST_PP_ITERATION_FINISH_1 >= 98
+# define BOOST_PP_ITERATION_1 98
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 99 && BOOST_PP_ITERATION_FINISH_1 >= 99
+# define BOOST_PP_ITERATION_1 99
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 100 && BOOST_PP_ITERATION_FINISH_1 >= 100
+# define BOOST_PP_ITERATION_1 100
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 101 && BOOST_PP_ITERATION_FINISH_1 >= 101
+# define BOOST_PP_ITERATION_1 101
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 102 && BOOST_PP_ITERATION_FINISH_1 >= 102
+# define BOOST_PP_ITERATION_1 102
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 103 && BOOST_PP_ITERATION_FINISH_1 >= 103
+# define BOOST_PP_ITERATION_1 103
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 104 && BOOST_PP_ITERATION_FINISH_1 >= 104
+# define BOOST_PP_ITERATION_1 104
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 105 && BOOST_PP_ITERATION_FINISH_1 >= 105
+# define BOOST_PP_ITERATION_1 105
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 106 && BOOST_PP_ITERATION_FINISH_1 >= 106
+# define BOOST_PP_ITERATION_1 106
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 107 && BOOST_PP_ITERATION_FINISH_1 >= 107
+# define BOOST_PP_ITERATION_1 107
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 108 && BOOST_PP_ITERATION_FINISH_1 >= 108
+# define BOOST_PP_ITERATION_1 108
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 109 && BOOST_PP_ITERATION_FINISH_1 >= 109
+# define BOOST_PP_ITERATION_1 109
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 110 && BOOST_PP_ITERATION_FINISH_1 >= 110
+# define BOOST_PP_ITERATION_1 110
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 111 && BOOST_PP_ITERATION_FINISH_1 >= 111
+# define BOOST_PP_ITERATION_1 111
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 112 && BOOST_PP_ITERATION_FINISH_1 >= 112
+# define BOOST_PP_ITERATION_1 112
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 113 && BOOST_PP_ITERATION_FINISH_1 >= 113
+# define BOOST_PP_ITERATION_1 113
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 114 && BOOST_PP_ITERATION_FINISH_1 >= 114
+# define BOOST_PP_ITERATION_1 114
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 115 && BOOST_PP_ITERATION_FINISH_1 >= 115
+# define BOOST_PP_ITERATION_1 115
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 116 && BOOST_PP_ITERATION_FINISH_1 >= 116
+# define BOOST_PP_ITERATION_1 116
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 117 && BOOST_PP_ITERATION_FINISH_1 >= 117
+# define BOOST_PP_ITERATION_1 117
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 118 && BOOST_PP_ITERATION_FINISH_1 >= 118
+# define BOOST_PP_ITERATION_1 118
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 119 && BOOST_PP_ITERATION_FINISH_1 >= 119
+# define BOOST_PP_ITERATION_1 119
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 120 && BOOST_PP_ITERATION_FINISH_1 >= 120
+# define BOOST_PP_ITERATION_1 120
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 121 && BOOST_PP_ITERATION_FINISH_1 >= 121
+# define BOOST_PP_ITERATION_1 121
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 122 && BOOST_PP_ITERATION_FINISH_1 >= 122
+# define BOOST_PP_ITERATION_1 122
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 123 && BOOST_PP_ITERATION_FINISH_1 >= 123
+# define BOOST_PP_ITERATION_1 123
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 124 && BOOST_PP_ITERATION_FINISH_1 >= 124
+# define BOOST_PP_ITERATION_1 124
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 125 && BOOST_PP_ITERATION_FINISH_1 >= 125
+# define BOOST_PP_ITERATION_1 125
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 126 && BOOST_PP_ITERATION_FINISH_1 >= 126
+# define BOOST_PP_ITERATION_1 126
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 127 && BOOST_PP_ITERATION_FINISH_1 >= 127
+# define BOOST_PP_ITERATION_1 127
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 128 && BOOST_PP_ITERATION_FINISH_1 >= 128
+# define BOOST_PP_ITERATION_1 128
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 129 && BOOST_PP_ITERATION_FINISH_1 >= 129
+# define BOOST_PP_ITERATION_1 129
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 130 && BOOST_PP_ITERATION_FINISH_1 >= 130
+# define BOOST_PP_ITERATION_1 130
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 131 && BOOST_PP_ITERATION_FINISH_1 >= 131
+# define BOOST_PP_ITERATION_1 131
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 132 && BOOST_PP_ITERATION_FINISH_1 >= 132
+# define BOOST_PP_ITERATION_1 132
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 133 && BOOST_PP_ITERATION_FINISH_1 >= 133
+# define BOOST_PP_ITERATION_1 133
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 134 && BOOST_PP_ITERATION_FINISH_1 >= 134
+# define BOOST_PP_ITERATION_1 134
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 135 && BOOST_PP_ITERATION_FINISH_1 >= 135
+# define BOOST_PP_ITERATION_1 135
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 136 && BOOST_PP_ITERATION_FINISH_1 >= 136
+# define BOOST_PP_ITERATION_1 136
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 137 && BOOST_PP_ITERATION_FINISH_1 >= 137
+# define BOOST_PP_ITERATION_1 137
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 138 && BOOST_PP_ITERATION_FINISH_1 >= 138
+# define BOOST_PP_ITERATION_1 138
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 139 && BOOST_PP_ITERATION_FINISH_1 >= 139
+# define BOOST_PP_ITERATION_1 139
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 140 && BOOST_PP_ITERATION_FINISH_1 >= 140
+# define BOOST_PP_ITERATION_1 140
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 141 && BOOST_PP_ITERATION_FINISH_1 >= 141
+# define BOOST_PP_ITERATION_1 141
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 142 && BOOST_PP_ITERATION_FINISH_1 >= 142
+# define BOOST_PP_ITERATION_1 142
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 143 && BOOST_PP_ITERATION_FINISH_1 >= 143
+# define BOOST_PP_ITERATION_1 143
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 144 && BOOST_PP_ITERATION_FINISH_1 >= 144
+# define BOOST_PP_ITERATION_1 144
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 145 && BOOST_PP_ITERATION_FINISH_1 >= 145
+# define BOOST_PP_ITERATION_1 145
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 146 && BOOST_PP_ITERATION_FINISH_1 >= 146
+# define BOOST_PP_ITERATION_1 146
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 147 && BOOST_PP_ITERATION_FINISH_1 >= 147
+# define BOOST_PP_ITERATION_1 147
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 148 && BOOST_PP_ITERATION_FINISH_1 >= 148
+# define BOOST_PP_ITERATION_1 148
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 149 && BOOST_PP_ITERATION_FINISH_1 >= 149
+# define BOOST_PP_ITERATION_1 149
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 150 && BOOST_PP_ITERATION_FINISH_1 >= 150
+# define BOOST_PP_ITERATION_1 150
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 151 && BOOST_PP_ITERATION_FINISH_1 >= 151
+# define BOOST_PP_ITERATION_1 151
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 152 && BOOST_PP_ITERATION_FINISH_1 >= 152
+# define BOOST_PP_ITERATION_1 152
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 153 && BOOST_PP_ITERATION_FINISH_1 >= 153
+# define BOOST_PP_ITERATION_1 153
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 154 && BOOST_PP_ITERATION_FINISH_1 >= 154
+# define BOOST_PP_ITERATION_1 154
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 155 && BOOST_PP_ITERATION_FINISH_1 >= 155
+# define BOOST_PP_ITERATION_1 155
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 156 && BOOST_PP_ITERATION_FINISH_1 >= 156
+# define BOOST_PP_ITERATION_1 156
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 157 && BOOST_PP_ITERATION_FINISH_1 >= 157
+# define BOOST_PP_ITERATION_1 157
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 158 && BOOST_PP_ITERATION_FINISH_1 >= 158
+# define BOOST_PP_ITERATION_1 158
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 159 && BOOST_PP_ITERATION_FINISH_1 >= 159
+# define BOOST_PP_ITERATION_1 159
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 160 && BOOST_PP_ITERATION_FINISH_1 >= 160
+# define BOOST_PP_ITERATION_1 160
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 161 && BOOST_PP_ITERATION_FINISH_1 >= 161
+# define BOOST_PP_ITERATION_1 161
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 162 && BOOST_PP_ITERATION_FINISH_1 >= 162
+# define BOOST_PP_ITERATION_1 162
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 163 && BOOST_PP_ITERATION_FINISH_1 >= 163
+# define BOOST_PP_ITERATION_1 163
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 164 && BOOST_PP_ITERATION_FINISH_1 >= 164
+# define BOOST_PP_ITERATION_1 164
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 165 && BOOST_PP_ITERATION_FINISH_1 >= 165
+# define BOOST_PP_ITERATION_1 165
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 166 && BOOST_PP_ITERATION_FINISH_1 >= 166
+# define BOOST_PP_ITERATION_1 166
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 167 && BOOST_PP_ITERATION_FINISH_1 >= 167
+# define BOOST_PP_ITERATION_1 167
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 168 && BOOST_PP_ITERATION_FINISH_1 >= 168
+# define BOOST_PP_ITERATION_1 168
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 169 && BOOST_PP_ITERATION_FINISH_1 >= 169
+# define BOOST_PP_ITERATION_1 169
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 170 && BOOST_PP_ITERATION_FINISH_1 >= 170
+# define BOOST_PP_ITERATION_1 170
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 171 && BOOST_PP_ITERATION_FINISH_1 >= 171
+# define BOOST_PP_ITERATION_1 171
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 172 && BOOST_PP_ITERATION_FINISH_1 >= 172
+# define BOOST_PP_ITERATION_1 172
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 173 && BOOST_PP_ITERATION_FINISH_1 >= 173
+# define BOOST_PP_ITERATION_1 173
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 174 && BOOST_PP_ITERATION_FINISH_1 >= 174
+# define BOOST_PP_ITERATION_1 174
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 175 && BOOST_PP_ITERATION_FINISH_1 >= 175
+# define BOOST_PP_ITERATION_1 175
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 176 && BOOST_PP_ITERATION_FINISH_1 >= 176
+# define BOOST_PP_ITERATION_1 176
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 177 && BOOST_PP_ITERATION_FINISH_1 >= 177
+# define BOOST_PP_ITERATION_1 177
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 178 && BOOST_PP_ITERATION_FINISH_1 >= 178
+# define BOOST_PP_ITERATION_1 178
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 179 && BOOST_PP_ITERATION_FINISH_1 >= 179
+# define BOOST_PP_ITERATION_1 179
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 180 && BOOST_PP_ITERATION_FINISH_1 >= 180
+# define BOOST_PP_ITERATION_1 180
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 181 && BOOST_PP_ITERATION_FINISH_1 >= 181
+# define BOOST_PP_ITERATION_1 181
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 182 && BOOST_PP_ITERATION_FINISH_1 >= 182
+# define BOOST_PP_ITERATION_1 182
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 183 && BOOST_PP_ITERATION_FINISH_1 >= 183
+# define BOOST_PP_ITERATION_1 183
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 184 && BOOST_PP_ITERATION_FINISH_1 >= 184
+# define BOOST_PP_ITERATION_1 184
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 185 && BOOST_PP_ITERATION_FINISH_1 >= 185
+# define BOOST_PP_ITERATION_1 185
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 186 && BOOST_PP_ITERATION_FINISH_1 >= 186
+# define BOOST_PP_ITERATION_1 186
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 187 && BOOST_PP_ITERATION_FINISH_1 >= 187
+# define BOOST_PP_ITERATION_1 187
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 188 && BOOST_PP_ITERATION_FINISH_1 >= 188
+# define BOOST_PP_ITERATION_1 188
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 189 && BOOST_PP_ITERATION_FINISH_1 >= 189
+# define BOOST_PP_ITERATION_1 189
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 190 && BOOST_PP_ITERATION_FINISH_1 >= 190
+# define BOOST_PP_ITERATION_1 190
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 191 && BOOST_PP_ITERATION_FINISH_1 >= 191
+# define BOOST_PP_ITERATION_1 191
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 192 && BOOST_PP_ITERATION_FINISH_1 >= 192
+# define BOOST_PP_ITERATION_1 192
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 193 && BOOST_PP_ITERATION_FINISH_1 >= 193
+# define BOOST_PP_ITERATION_1 193
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 194 && BOOST_PP_ITERATION_FINISH_1 >= 194
+# define BOOST_PP_ITERATION_1 194
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 195 && BOOST_PP_ITERATION_FINISH_1 >= 195
+# define BOOST_PP_ITERATION_1 195
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 196 && BOOST_PP_ITERATION_FINISH_1 >= 196
+# define BOOST_PP_ITERATION_1 196
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 197 && BOOST_PP_ITERATION_FINISH_1 >= 197
+# define BOOST_PP_ITERATION_1 197
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 198 && BOOST_PP_ITERATION_FINISH_1 >= 198
+# define BOOST_PP_ITERATION_1 198
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 199 && BOOST_PP_ITERATION_FINISH_1 >= 199
+# define BOOST_PP_ITERATION_1 199
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 200 && BOOST_PP_ITERATION_FINISH_1 >= 200
+# define BOOST_PP_ITERATION_1 200
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 201 && BOOST_PP_ITERATION_FINISH_1 >= 201
+# define BOOST_PP_ITERATION_1 201
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 202 && BOOST_PP_ITERATION_FINISH_1 >= 202
+# define BOOST_PP_ITERATION_1 202
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 203 && BOOST_PP_ITERATION_FINISH_1 >= 203
+# define BOOST_PP_ITERATION_1 203
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 204 && BOOST_PP_ITERATION_FINISH_1 >= 204
+# define BOOST_PP_ITERATION_1 204
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 205 && BOOST_PP_ITERATION_FINISH_1 >= 205
+# define BOOST_PP_ITERATION_1 205
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 206 && BOOST_PP_ITERATION_FINISH_1 >= 206
+# define BOOST_PP_ITERATION_1 206
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 207 && BOOST_PP_ITERATION_FINISH_1 >= 207
+# define BOOST_PP_ITERATION_1 207
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 208 && BOOST_PP_ITERATION_FINISH_1 >= 208
+# define BOOST_PP_ITERATION_1 208
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 209 && BOOST_PP_ITERATION_FINISH_1 >= 209
+# define BOOST_PP_ITERATION_1 209
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 210 && BOOST_PP_ITERATION_FINISH_1 >= 210
+# define BOOST_PP_ITERATION_1 210
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 211 && BOOST_PP_ITERATION_FINISH_1 >= 211
+# define BOOST_PP_ITERATION_1 211
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 212 && BOOST_PP_ITERATION_FINISH_1 >= 212
+# define BOOST_PP_ITERATION_1 212
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 213 && BOOST_PP_ITERATION_FINISH_1 >= 213
+# define BOOST_PP_ITERATION_1 213
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 214 && BOOST_PP_ITERATION_FINISH_1 >= 214
+# define BOOST_PP_ITERATION_1 214
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 215 && BOOST_PP_ITERATION_FINISH_1 >= 215
+# define BOOST_PP_ITERATION_1 215
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 216 && BOOST_PP_ITERATION_FINISH_1 >= 216
+# define BOOST_PP_ITERATION_1 216
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 217 && BOOST_PP_ITERATION_FINISH_1 >= 217
+# define BOOST_PP_ITERATION_1 217
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 218 && BOOST_PP_ITERATION_FINISH_1 >= 218
+# define BOOST_PP_ITERATION_1 218
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 219 && BOOST_PP_ITERATION_FINISH_1 >= 219
+# define BOOST_PP_ITERATION_1 219
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 220 && BOOST_PP_ITERATION_FINISH_1 >= 220
+# define BOOST_PP_ITERATION_1 220
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 221 && BOOST_PP_ITERATION_FINISH_1 >= 221
+# define BOOST_PP_ITERATION_1 221
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 222 && BOOST_PP_ITERATION_FINISH_1 >= 222
+# define BOOST_PP_ITERATION_1 222
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 223 && BOOST_PP_ITERATION_FINISH_1 >= 223
+# define BOOST_PP_ITERATION_1 223
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 224 && BOOST_PP_ITERATION_FINISH_1 >= 224
+# define BOOST_PP_ITERATION_1 224
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 225 && BOOST_PP_ITERATION_FINISH_1 >= 225
+# define BOOST_PP_ITERATION_1 225
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 226 && BOOST_PP_ITERATION_FINISH_1 >= 226
+# define BOOST_PP_ITERATION_1 226
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 227 && BOOST_PP_ITERATION_FINISH_1 >= 227
+# define BOOST_PP_ITERATION_1 227
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 228 && BOOST_PP_ITERATION_FINISH_1 >= 228
+# define BOOST_PP_ITERATION_1 228
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 229 && BOOST_PP_ITERATION_FINISH_1 >= 229
+# define BOOST_PP_ITERATION_1 229
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 230 && BOOST_PP_ITERATION_FINISH_1 >= 230
+# define BOOST_PP_ITERATION_1 230
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 231 && BOOST_PP_ITERATION_FINISH_1 >= 231
+# define BOOST_PP_ITERATION_1 231
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 232 && BOOST_PP_ITERATION_FINISH_1 >= 232
+# define BOOST_PP_ITERATION_1 232
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 233 && BOOST_PP_ITERATION_FINISH_1 >= 233
+# define BOOST_PP_ITERATION_1 233
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 234 && BOOST_PP_ITERATION_FINISH_1 >= 234
+# define BOOST_PP_ITERATION_1 234
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 235 && BOOST_PP_ITERATION_FINISH_1 >= 235
+# define BOOST_PP_ITERATION_1 235
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 236 && BOOST_PP_ITERATION_FINISH_1 >= 236
+# define BOOST_PP_ITERATION_1 236
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 237 && BOOST_PP_ITERATION_FINISH_1 >= 237
+# define BOOST_PP_ITERATION_1 237
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 238 && BOOST_PP_ITERATION_FINISH_1 >= 238
+# define BOOST_PP_ITERATION_1 238
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 239 && BOOST_PP_ITERATION_FINISH_1 >= 239
+# define BOOST_PP_ITERATION_1 239
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 240 && BOOST_PP_ITERATION_FINISH_1 >= 240
+# define BOOST_PP_ITERATION_1 240
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 241 && BOOST_PP_ITERATION_FINISH_1 >= 241
+# define BOOST_PP_ITERATION_1 241
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 242 && BOOST_PP_ITERATION_FINISH_1 >= 242
+# define BOOST_PP_ITERATION_1 242
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 243 && BOOST_PP_ITERATION_FINISH_1 >= 243
+# define BOOST_PP_ITERATION_1 243
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 244 && BOOST_PP_ITERATION_FINISH_1 >= 244
+# define BOOST_PP_ITERATION_1 244
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 245 && BOOST_PP_ITERATION_FINISH_1 >= 245
+# define BOOST_PP_ITERATION_1 245
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 246 && BOOST_PP_ITERATION_FINISH_1 >= 246
+# define BOOST_PP_ITERATION_1 246
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 247 && BOOST_PP_ITERATION_FINISH_1 >= 247
+# define BOOST_PP_ITERATION_1 247
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 248 && BOOST_PP_ITERATION_FINISH_1 >= 248
+# define BOOST_PP_ITERATION_1 248
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 249 && BOOST_PP_ITERATION_FINISH_1 >= 249
+# define BOOST_PP_ITERATION_1 249
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 250 && BOOST_PP_ITERATION_FINISH_1 >= 250
+# define BOOST_PP_ITERATION_1 250
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 251 && BOOST_PP_ITERATION_FINISH_1 >= 251
+# define BOOST_PP_ITERATION_1 251
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 252 && BOOST_PP_ITERATION_FINISH_1 >= 252
+# define BOOST_PP_ITERATION_1 252
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 253 && BOOST_PP_ITERATION_FINISH_1 >= 253
+# define BOOST_PP_ITERATION_1 253
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 254 && BOOST_PP_ITERATION_FINISH_1 >= 254
+# define BOOST_PP_ITERATION_1 254
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 255 && BOOST_PP_ITERATION_FINISH_1 >= 255
+# define BOOST_PP_ITERATION_1 255
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_START_1 <= 256 && BOOST_PP_ITERATION_FINISH_1 >= 256
+# define BOOST_PP_ITERATION_1 256
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# endif
+#
+# undef BOOST_PP_IS_ITERATING
+#
+# undef BOOST_PP_ITERATION_DEPTH
+# define BOOST_PP_ITERATION_DEPTH() 0
+#
+# undef BOOST_PP_ITERATION_START_1
+# undef BOOST_PP_ITERATION_FINISH_1
+# undef BOOST_PP_FILENAME_1
+#
+# undef BOOST_PP_ITERATION_FLAGS_1
+# undef BOOST_PP_ITERATION_PARAMS_1
diff --git a/boost/boost/preprocessor/iteration/detail/iter/forward2.hpp b/boost/boost/preprocessor/iteration/detail/iter/forward2.hpp
new file mode 100644
index 00000000000..b689f634f9a
--- /dev/null
+++ b/boost/boost/preprocessor/iteration/detail/iter/forward2.hpp
@@ -0,0 +1,1338 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# if defined(BOOST_PP_ITERATION_LIMITS)
+# if !defined(BOOST_PP_FILENAME_2)
+# error BOOST_PP_ERROR: depth #2 filename is not defined
+# endif
+# define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_ITERATION_LIMITS)
+# include <boost/preprocessor/iteration/detail/bounds/lower2.hpp>
+# define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 1, BOOST_PP_ITERATION_LIMITS)
+# include <boost/preprocessor/iteration/detail/bounds/upper2.hpp>
+# define BOOST_PP_ITERATION_FLAGS_2 0
+# undef BOOST_PP_ITERATION_LIMITS
+# elif defined(BOOST_PP_ITERATION_PARAMS_2)
+# define BOOST_PP_VALUE BOOST_PP_ARRAY_ELEM(0, BOOST_PP_ITERATION_PARAMS_2)
+# include <boost/preprocessor/iteration/detail/bounds/lower2.hpp>
+# define BOOST_PP_VALUE BOOST_PP_ARRAY_ELEM(1, BOOST_PP_ITERATION_PARAMS_2)
+# include <boost/preprocessor/iteration/detail/bounds/upper2.hpp>
+# define BOOST_PP_FILENAME_2 BOOST_PP_ARRAY_ELEM(2, BOOST_PP_ITERATION_PARAMS_2)
+# if BOOST_PP_ARRAY_SIZE(BOOST_PP_ITERATION_PARAMS_2) >= 4
+# define BOOST_PP_ITERATION_FLAGS_2 BOOST_PP_ARRAY_ELEM(3, BOOST_PP_ITERATION_PARAMS_2)
+# else
+# define BOOST_PP_ITERATION_FLAGS_2 0
+# endif
+# else
+# error BOOST_PP_ERROR: depth #2 iteration boundaries or filename not defined
+# endif
+#
+# undef BOOST_PP_ITERATION_DEPTH
+# define BOOST_PP_ITERATION_DEPTH() 2
+#
+# if (BOOST_PP_ITERATION_START_2) > (BOOST_PP_ITERATION_FINISH_2)
+# include <boost/preprocessor/iteration/detail/iter/reverse2.hpp>
+# else
+# if BOOST_PP_ITERATION_START_2 <= 0 && BOOST_PP_ITERATION_FINISH_2 >= 0
+# define BOOST_PP_ITERATION_2 0
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 1 && BOOST_PP_ITERATION_FINISH_2 >= 1
+# define BOOST_PP_ITERATION_2 1
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 2 && BOOST_PP_ITERATION_FINISH_2 >= 2
+# define BOOST_PP_ITERATION_2 2
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 3 && BOOST_PP_ITERATION_FINISH_2 >= 3
+# define BOOST_PP_ITERATION_2 3
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 4 && BOOST_PP_ITERATION_FINISH_2 >= 4
+# define BOOST_PP_ITERATION_2 4
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 5 && BOOST_PP_ITERATION_FINISH_2 >= 5
+# define BOOST_PP_ITERATION_2 5
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 6 && BOOST_PP_ITERATION_FINISH_2 >= 6
+# define BOOST_PP_ITERATION_2 6
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 7 && BOOST_PP_ITERATION_FINISH_2 >= 7
+# define BOOST_PP_ITERATION_2 7
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 8 && BOOST_PP_ITERATION_FINISH_2 >= 8
+# define BOOST_PP_ITERATION_2 8
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 9 && BOOST_PP_ITERATION_FINISH_2 >= 9
+# define BOOST_PP_ITERATION_2 9
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 10 && BOOST_PP_ITERATION_FINISH_2 >= 10
+# define BOOST_PP_ITERATION_2 10
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 11 && BOOST_PP_ITERATION_FINISH_2 >= 11
+# define BOOST_PP_ITERATION_2 11
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 12 && BOOST_PP_ITERATION_FINISH_2 >= 12
+# define BOOST_PP_ITERATION_2 12
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 13 && BOOST_PP_ITERATION_FINISH_2 >= 13
+# define BOOST_PP_ITERATION_2 13
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 14 && BOOST_PP_ITERATION_FINISH_2 >= 14
+# define BOOST_PP_ITERATION_2 14
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 15 && BOOST_PP_ITERATION_FINISH_2 >= 15
+# define BOOST_PP_ITERATION_2 15
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 16 && BOOST_PP_ITERATION_FINISH_2 >= 16
+# define BOOST_PP_ITERATION_2 16
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 17 && BOOST_PP_ITERATION_FINISH_2 >= 17
+# define BOOST_PP_ITERATION_2 17
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 18 && BOOST_PP_ITERATION_FINISH_2 >= 18
+# define BOOST_PP_ITERATION_2 18
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 19 && BOOST_PP_ITERATION_FINISH_2 >= 19
+# define BOOST_PP_ITERATION_2 19
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 20 && BOOST_PP_ITERATION_FINISH_2 >= 20
+# define BOOST_PP_ITERATION_2 20
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 21 && BOOST_PP_ITERATION_FINISH_2 >= 21
+# define BOOST_PP_ITERATION_2 21
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 22 && BOOST_PP_ITERATION_FINISH_2 >= 22
+# define BOOST_PP_ITERATION_2 22
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 23 && BOOST_PP_ITERATION_FINISH_2 >= 23
+# define BOOST_PP_ITERATION_2 23
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 24 && BOOST_PP_ITERATION_FINISH_2 >= 24
+# define BOOST_PP_ITERATION_2 24
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 25 && BOOST_PP_ITERATION_FINISH_2 >= 25
+# define BOOST_PP_ITERATION_2 25
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 26 && BOOST_PP_ITERATION_FINISH_2 >= 26
+# define BOOST_PP_ITERATION_2 26
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 27 && BOOST_PP_ITERATION_FINISH_2 >= 27
+# define BOOST_PP_ITERATION_2 27
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 28 && BOOST_PP_ITERATION_FINISH_2 >= 28
+# define BOOST_PP_ITERATION_2 28
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 29 && BOOST_PP_ITERATION_FINISH_2 >= 29
+# define BOOST_PP_ITERATION_2 29
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 30 && BOOST_PP_ITERATION_FINISH_2 >= 30
+# define BOOST_PP_ITERATION_2 30
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 31 && BOOST_PP_ITERATION_FINISH_2 >= 31
+# define BOOST_PP_ITERATION_2 31
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 32 && BOOST_PP_ITERATION_FINISH_2 >= 32
+# define BOOST_PP_ITERATION_2 32
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 33 && BOOST_PP_ITERATION_FINISH_2 >= 33
+# define BOOST_PP_ITERATION_2 33
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 34 && BOOST_PP_ITERATION_FINISH_2 >= 34
+# define BOOST_PP_ITERATION_2 34
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 35 && BOOST_PP_ITERATION_FINISH_2 >= 35
+# define BOOST_PP_ITERATION_2 35
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 36 && BOOST_PP_ITERATION_FINISH_2 >= 36
+# define BOOST_PP_ITERATION_2 36
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 37 && BOOST_PP_ITERATION_FINISH_2 >= 37
+# define BOOST_PP_ITERATION_2 37
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 38 && BOOST_PP_ITERATION_FINISH_2 >= 38
+# define BOOST_PP_ITERATION_2 38
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 39 && BOOST_PP_ITERATION_FINISH_2 >= 39
+# define BOOST_PP_ITERATION_2 39
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 40 && BOOST_PP_ITERATION_FINISH_2 >= 40
+# define BOOST_PP_ITERATION_2 40
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 41 && BOOST_PP_ITERATION_FINISH_2 >= 41
+# define BOOST_PP_ITERATION_2 41
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 42 && BOOST_PP_ITERATION_FINISH_2 >= 42
+# define BOOST_PP_ITERATION_2 42
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 43 && BOOST_PP_ITERATION_FINISH_2 >= 43
+# define BOOST_PP_ITERATION_2 43
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 44 && BOOST_PP_ITERATION_FINISH_2 >= 44
+# define BOOST_PP_ITERATION_2 44
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 45 && BOOST_PP_ITERATION_FINISH_2 >= 45
+# define BOOST_PP_ITERATION_2 45
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 46 && BOOST_PP_ITERATION_FINISH_2 >= 46
+# define BOOST_PP_ITERATION_2 46
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 47 && BOOST_PP_ITERATION_FINISH_2 >= 47
+# define BOOST_PP_ITERATION_2 47
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 48 && BOOST_PP_ITERATION_FINISH_2 >= 48
+# define BOOST_PP_ITERATION_2 48
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 49 && BOOST_PP_ITERATION_FINISH_2 >= 49
+# define BOOST_PP_ITERATION_2 49
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 50 && BOOST_PP_ITERATION_FINISH_2 >= 50
+# define BOOST_PP_ITERATION_2 50
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 51 && BOOST_PP_ITERATION_FINISH_2 >= 51
+# define BOOST_PP_ITERATION_2 51
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 52 && BOOST_PP_ITERATION_FINISH_2 >= 52
+# define BOOST_PP_ITERATION_2 52
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 53 && BOOST_PP_ITERATION_FINISH_2 >= 53
+# define BOOST_PP_ITERATION_2 53
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 54 && BOOST_PP_ITERATION_FINISH_2 >= 54
+# define BOOST_PP_ITERATION_2 54
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 55 && BOOST_PP_ITERATION_FINISH_2 >= 55
+# define BOOST_PP_ITERATION_2 55
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 56 && BOOST_PP_ITERATION_FINISH_2 >= 56
+# define BOOST_PP_ITERATION_2 56
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 57 && BOOST_PP_ITERATION_FINISH_2 >= 57
+# define BOOST_PP_ITERATION_2 57
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 58 && BOOST_PP_ITERATION_FINISH_2 >= 58
+# define BOOST_PP_ITERATION_2 58
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 59 && BOOST_PP_ITERATION_FINISH_2 >= 59
+# define BOOST_PP_ITERATION_2 59
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 60 && BOOST_PP_ITERATION_FINISH_2 >= 60
+# define BOOST_PP_ITERATION_2 60
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 61 && BOOST_PP_ITERATION_FINISH_2 >= 61
+# define BOOST_PP_ITERATION_2 61
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 62 && BOOST_PP_ITERATION_FINISH_2 >= 62
+# define BOOST_PP_ITERATION_2 62
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 63 && BOOST_PP_ITERATION_FINISH_2 >= 63
+# define BOOST_PP_ITERATION_2 63
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 64 && BOOST_PP_ITERATION_FINISH_2 >= 64
+# define BOOST_PP_ITERATION_2 64
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 65 && BOOST_PP_ITERATION_FINISH_2 >= 65
+# define BOOST_PP_ITERATION_2 65
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 66 && BOOST_PP_ITERATION_FINISH_2 >= 66
+# define BOOST_PP_ITERATION_2 66
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 67 && BOOST_PP_ITERATION_FINISH_2 >= 67
+# define BOOST_PP_ITERATION_2 67
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 68 && BOOST_PP_ITERATION_FINISH_2 >= 68
+# define BOOST_PP_ITERATION_2 68
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 69 && BOOST_PP_ITERATION_FINISH_2 >= 69
+# define BOOST_PP_ITERATION_2 69
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 70 && BOOST_PP_ITERATION_FINISH_2 >= 70
+# define BOOST_PP_ITERATION_2 70
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 71 && BOOST_PP_ITERATION_FINISH_2 >= 71
+# define BOOST_PP_ITERATION_2 71
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 72 && BOOST_PP_ITERATION_FINISH_2 >= 72
+# define BOOST_PP_ITERATION_2 72
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 73 && BOOST_PP_ITERATION_FINISH_2 >= 73
+# define BOOST_PP_ITERATION_2 73
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 74 && BOOST_PP_ITERATION_FINISH_2 >= 74
+# define BOOST_PP_ITERATION_2 74
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 75 && BOOST_PP_ITERATION_FINISH_2 >= 75
+# define BOOST_PP_ITERATION_2 75
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 76 && BOOST_PP_ITERATION_FINISH_2 >= 76
+# define BOOST_PP_ITERATION_2 76
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 77 && BOOST_PP_ITERATION_FINISH_2 >= 77
+# define BOOST_PP_ITERATION_2 77
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 78 && BOOST_PP_ITERATION_FINISH_2 >= 78
+# define BOOST_PP_ITERATION_2 78
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 79 && BOOST_PP_ITERATION_FINISH_2 >= 79
+# define BOOST_PP_ITERATION_2 79
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 80 && BOOST_PP_ITERATION_FINISH_2 >= 80
+# define BOOST_PP_ITERATION_2 80
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 81 && BOOST_PP_ITERATION_FINISH_2 >= 81
+# define BOOST_PP_ITERATION_2 81
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 82 && BOOST_PP_ITERATION_FINISH_2 >= 82
+# define BOOST_PP_ITERATION_2 82
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 83 && BOOST_PP_ITERATION_FINISH_2 >= 83
+# define BOOST_PP_ITERATION_2 83
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 84 && BOOST_PP_ITERATION_FINISH_2 >= 84
+# define BOOST_PP_ITERATION_2 84
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 85 && BOOST_PP_ITERATION_FINISH_2 >= 85
+# define BOOST_PP_ITERATION_2 85
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 86 && BOOST_PP_ITERATION_FINISH_2 >= 86
+# define BOOST_PP_ITERATION_2 86
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 87 && BOOST_PP_ITERATION_FINISH_2 >= 87
+# define BOOST_PP_ITERATION_2 87
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 88 && BOOST_PP_ITERATION_FINISH_2 >= 88
+# define BOOST_PP_ITERATION_2 88
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 89 && BOOST_PP_ITERATION_FINISH_2 >= 89
+# define BOOST_PP_ITERATION_2 89
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 90 && BOOST_PP_ITERATION_FINISH_2 >= 90
+# define BOOST_PP_ITERATION_2 90
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 91 && BOOST_PP_ITERATION_FINISH_2 >= 91
+# define BOOST_PP_ITERATION_2 91
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 92 && BOOST_PP_ITERATION_FINISH_2 >= 92
+# define BOOST_PP_ITERATION_2 92
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 93 && BOOST_PP_ITERATION_FINISH_2 >= 93
+# define BOOST_PP_ITERATION_2 93
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 94 && BOOST_PP_ITERATION_FINISH_2 >= 94
+# define BOOST_PP_ITERATION_2 94
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 95 && BOOST_PP_ITERATION_FINISH_2 >= 95
+# define BOOST_PP_ITERATION_2 95
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 96 && BOOST_PP_ITERATION_FINISH_2 >= 96
+# define BOOST_PP_ITERATION_2 96
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 97 && BOOST_PP_ITERATION_FINISH_2 >= 97
+# define BOOST_PP_ITERATION_2 97
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 98 && BOOST_PP_ITERATION_FINISH_2 >= 98
+# define BOOST_PP_ITERATION_2 98
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 99 && BOOST_PP_ITERATION_FINISH_2 >= 99
+# define BOOST_PP_ITERATION_2 99
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 100 && BOOST_PP_ITERATION_FINISH_2 >= 100
+# define BOOST_PP_ITERATION_2 100
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 101 && BOOST_PP_ITERATION_FINISH_2 >= 101
+# define BOOST_PP_ITERATION_2 101
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 102 && BOOST_PP_ITERATION_FINISH_2 >= 102
+# define BOOST_PP_ITERATION_2 102
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 103 && BOOST_PP_ITERATION_FINISH_2 >= 103
+# define BOOST_PP_ITERATION_2 103
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 104 && BOOST_PP_ITERATION_FINISH_2 >= 104
+# define BOOST_PP_ITERATION_2 104
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 105 && BOOST_PP_ITERATION_FINISH_2 >= 105
+# define BOOST_PP_ITERATION_2 105
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 106 && BOOST_PP_ITERATION_FINISH_2 >= 106
+# define BOOST_PP_ITERATION_2 106
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 107 && BOOST_PP_ITERATION_FINISH_2 >= 107
+# define BOOST_PP_ITERATION_2 107
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 108 && BOOST_PP_ITERATION_FINISH_2 >= 108
+# define BOOST_PP_ITERATION_2 108
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 109 && BOOST_PP_ITERATION_FINISH_2 >= 109
+# define BOOST_PP_ITERATION_2 109
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 110 && BOOST_PP_ITERATION_FINISH_2 >= 110
+# define BOOST_PP_ITERATION_2 110
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 111 && BOOST_PP_ITERATION_FINISH_2 >= 111
+# define BOOST_PP_ITERATION_2 111
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 112 && BOOST_PP_ITERATION_FINISH_2 >= 112
+# define BOOST_PP_ITERATION_2 112
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 113 && BOOST_PP_ITERATION_FINISH_2 >= 113
+# define BOOST_PP_ITERATION_2 113
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 114 && BOOST_PP_ITERATION_FINISH_2 >= 114
+# define BOOST_PP_ITERATION_2 114
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 115 && BOOST_PP_ITERATION_FINISH_2 >= 115
+# define BOOST_PP_ITERATION_2 115
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 116 && BOOST_PP_ITERATION_FINISH_2 >= 116
+# define BOOST_PP_ITERATION_2 116
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 117 && BOOST_PP_ITERATION_FINISH_2 >= 117
+# define BOOST_PP_ITERATION_2 117
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 118 && BOOST_PP_ITERATION_FINISH_2 >= 118
+# define BOOST_PP_ITERATION_2 118
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 119 && BOOST_PP_ITERATION_FINISH_2 >= 119
+# define BOOST_PP_ITERATION_2 119
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 120 && BOOST_PP_ITERATION_FINISH_2 >= 120
+# define BOOST_PP_ITERATION_2 120
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 121 && BOOST_PP_ITERATION_FINISH_2 >= 121
+# define BOOST_PP_ITERATION_2 121
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 122 && BOOST_PP_ITERATION_FINISH_2 >= 122
+# define BOOST_PP_ITERATION_2 122
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 123 && BOOST_PP_ITERATION_FINISH_2 >= 123
+# define BOOST_PP_ITERATION_2 123
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 124 && BOOST_PP_ITERATION_FINISH_2 >= 124
+# define BOOST_PP_ITERATION_2 124
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 125 && BOOST_PP_ITERATION_FINISH_2 >= 125
+# define BOOST_PP_ITERATION_2 125
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 126 && BOOST_PP_ITERATION_FINISH_2 >= 126
+# define BOOST_PP_ITERATION_2 126
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 127 && BOOST_PP_ITERATION_FINISH_2 >= 127
+# define BOOST_PP_ITERATION_2 127
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 128 && BOOST_PP_ITERATION_FINISH_2 >= 128
+# define BOOST_PP_ITERATION_2 128
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 129 && BOOST_PP_ITERATION_FINISH_2 >= 129
+# define BOOST_PP_ITERATION_2 129
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 130 && BOOST_PP_ITERATION_FINISH_2 >= 130
+# define BOOST_PP_ITERATION_2 130
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 131 && BOOST_PP_ITERATION_FINISH_2 >= 131
+# define BOOST_PP_ITERATION_2 131
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 132 && BOOST_PP_ITERATION_FINISH_2 >= 132
+# define BOOST_PP_ITERATION_2 132
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 133 && BOOST_PP_ITERATION_FINISH_2 >= 133
+# define BOOST_PP_ITERATION_2 133
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 134 && BOOST_PP_ITERATION_FINISH_2 >= 134
+# define BOOST_PP_ITERATION_2 134
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 135 && BOOST_PP_ITERATION_FINISH_2 >= 135
+# define BOOST_PP_ITERATION_2 135
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 136 && BOOST_PP_ITERATION_FINISH_2 >= 136
+# define BOOST_PP_ITERATION_2 136
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 137 && BOOST_PP_ITERATION_FINISH_2 >= 137
+# define BOOST_PP_ITERATION_2 137
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 138 && BOOST_PP_ITERATION_FINISH_2 >= 138
+# define BOOST_PP_ITERATION_2 138
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 139 && BOOST_PP_ITERATION_FINISH_2 >= 139
+# define BOOST_PP_ITERATION_2 139
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 140 && BOOST_PP_ITERATION_FINISH_2 >= 140
+# define BOOST_PP_ITERATION_2 140
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 141 && BOOST_PP_ITERATION_FINISH_2 >= 141
+# define BOOST_PP_ITERATION_2 141
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 142 && BOOST_PP_ITERATION_FINISH_2 >= 142
+# define BOOST_PP_ITERATION_2 142
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 143 && BOOST_PP_ITERATION_FINISH_2 >= 143
+# define BOOST_PP_ITERATION_2 143
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 144 && BOOST_PP_ITERATION_FINISH_2 >= 144
+# define BOOST_PP_ITERATION_2 144
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 145 && BOOST_PP_ITERATION_FINISH_2 >= 145
+# define BOOST_PP_ITERATION_2 145
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 146 && BOOST_PP_ITERATION_FINISH_2 >= 146
+# define BOOST_PP_ITERATION_2 146
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 147 && BOOST_PP_ITERATION_FINISH_2 >= 147
+# define BOOST_PP_ITERATION_2 147
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 148 && BOOST_PP_ITERATION_FINISH_2 >= 148
+# define BOOST_PP_ITERATION_2 148
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 149 && BOOST_PP_ITERATION_FINISH_2 >= 149
+# define BOOST_PP_ITERATION_2 149
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 150 && BOOST_PP_ITERATION_FINISH_2 >= 150
+# define BOOST_PP_ITERATION_2 150
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 151 && BOOST_PP_ITERATION_FINISH_2 >= 151
+# define BOOST_PP_ITERATION_2 151
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 152 && BOOST_PP_ITERATION_FINISH_2 >= 152
+# define BOOST_PP_ITERATION_2 152
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 153 && BOOST_PP_ITERATION_FINISH_2 >= 153
+# define BOOST_PP_ITERATION_2 153
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 154 && BOOST_PP_ITERATION_FINISH_2 >= 154
+# define BOOST_PP_ITERATION_2 154
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 155 && BOOST_PP_ITERATION_FINISH_2 >= 155
+# define BOOST_PP_ITERATION_2 155
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 156 && BOOST_PP_ITERATION_FINISH_2 >= 156
+# define BOOST_PP_ITERATION_2 156
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 157 && BOOST_PP_ITERATION_FINISH_2 >= 157
+# define BOOST_PP_ITERATION_2 157
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 158 && BOOST_PP_ITERATION_FINISH_2 >= 158
+# define BOOST_PP_ITERATION_2 158
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 159 && BOOST_PP_ITERATION_FINISH_2 >= 159
+# define BOOST_PP_ITERATION_2 159
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 160 && BOOST_PP_ITERATION_FINISH_2 >= 160
+# define BOOST_PP_ITERATION_2 160
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 161 && BOOST_PP_ITERATION_FINISH_2 >= 161
+# define BOOST_PP_ITERATION_2 161
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 162 && BOOST_PP_ITERATION_FINISH_2 >= 162
+# define BOOST_PP_ITERATION_2 162
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 163 && BOOST_PP_ITERATION_FINISH_2 >= 163
+# define BOOST_PP_ITERATION_2 163
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 164 && BOOST_PP_ITERATION_FINISH_2 >= 164
+# define BOOST_PP_ITERATION_2 164
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 165 && BOOST_PP_ITERATION_FINISH_2 >= 165
+# define BOOST_PP_ITERATION_2 165
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 166 && BOOST_PP_ITERATION_FINISH_2 >= 166
+# define BOOST_PP_ITERATION_2 166
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 167 && BOOST_PP_ITERATION_FINISH_2 >= 167
+# define BOOST_PP_ITERATION_2 167
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 168 && BOOST_PP_ITERATION_FINISH_2 >= 168
+# define BOOST_PP_ITERATION_2 168
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 169 && BOOST_PP_ITERATION_FINISH_2 >= 169
+# define BOOST_PP_ITERATION_2 169
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 170 && BOOST_PP_ITERATION_FINISH_2 >= 170
+# define BOOST_PP_ITERATION_2 170
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 171 && BOOST_PP_ITERATION_FINISH_2 >= 171
+# define BOOST_PP_ITERATION_2 171
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 172 && BOOST_PP_ITERATION_FINISH_2 >= 172
+# define BOOST_PP_ITERATION_2 172
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 173 && BOOST_PP_ITERATION_FINISH_2 >= 173
+# define BOOST_PP_ITERATION_2 173
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 174 && BOOST_PP_ITERATION_FINISH_2 >= 174
+# define BOOST_PP_ITERATION_2 174
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 175 && BOOST_PP_ITERATION_FINISH_2 >= 175
+# define BOOST_PP_ITERATION_2 175
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 176 && BOOST_PP_ITERATION_FINISH_2 >= 176
+# define BOOST_PP_ITERATION_2 176
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 177 && BOOST_PP_ITERATION_FINISH_2 >= 177
+# define BOOST_PP_ITERATION_2 177
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 178 && BOOST_PP_ITERATION_FINISH_2 >= 178
+# define BOOST_PP_ITERATION_2 178
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 179 && BOOST_PP_ITERATION_FINISH_2 >= 179
+# define BOOST_PP_ITERATION_2 179
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 180 && BOOST_PP_ITERATION_FINISH_2 >= 180
+# define BOOST_PP_ITERATION_2 180
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 181 && BOOST_PP_ITERATION_FINISH_2 >= 181
+# define BOOST_PP_ITERATION_2 181
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 182 && BOOST_PP_ITERATION_FINISH_2 >= 182
+# define BOOST_PP_ITERATION_2 182
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 183 && BOOST_PP_ITERATION_FINISH_2 >= 183
+# define BOOST_PP_ITERATION_2 183
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 184 && BOOST_PP_ITERATION_FINISH_2 >= 184
+# define BOOST_PP_ITERATION_2 184
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 185 && BOOST_PP_ITERATION_FINISH_2 >= 185
+# define BOOST_PP_ITERATION_2 185
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 186 && BOOST_PP_ITERATION_FINISH_2 >= 186
+# define BOOST_PP_ITERATION_2 186
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 187 && BOOST_PP_ITERATION_FINISH_2 >= 187
+# define BOOST_PP_ITERATION_2 187
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 188 && BOOST_PP_ITERATION_FINISH_2 >= 188
+# define BOOST_PP_ITERATION_2 188
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 189 && BOOST_PP_ITERATION_FINISH_2 >= 189
+# define BOOST_PP_ITERATION_2 189
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 190 && BOOST_PP_ITERATION_FINISH_2 >= 190
+# define BOOST_PP_ITERATION_2 190
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 191 && BOOST_PP_ITERATION_FINISH_2 >= 191
+# define BOOST_PP_ITERATION_2 191
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 192 && BOOST_PP_ITERATION_FINISH_2 >= 192
+# define BOOST_PP_ITERATION_2 192
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 193 && BOOST_PP_ITERATION_FINISH_2 >= 193
+# define BOOST_PP_ITERATION_2 193
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 194 && BOOST_PP_ITERATION_FINISH_2 >= 194
+# define BOOST_PP_ITERATION_2 194
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 195 && BOOST_PP_ITERATION_FINISH_2 >= 195
+# define BOOST_PP_ITERATION_2 195
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 196 && BOOST_PP_ITERATION_FINISH_2 >= 196
+# define BOOST_PP_ITERATION_2 196
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 197 && BOOST_PP_ITERATION_FINISH_2 >= 197
+# define BOOST_PP_ITERATION_2 197
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 198 && BOOST_PP_ITERATION_FINISH_2 >= 198
+# define BOOST_PP_ITERATION_2 198
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 199 && BOOST_PP_ITERATION_FINISH_2 >= 199
+# define BOOST_PP_ITERATION_2 199
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 200 && BOOST_PP_ITERATION_FINISH_2 >= 200
+# define BOOST_PP_ITERATION_2 200
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 201 && BOOST_PP_ITERATION_FINISH_2 >= 201
+# define BOOST_PP_ITERATION_2 201
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 202 && BOOST_PP_ITERATION_FINISH_2 >= 202
+# define BOOST_PP_ITERATION_2 202
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 203 && BOOST_PP_ITERATION_FINISH_2 >= 203
+# define BOOST_PP_ITERATION_2 203
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 204 && BOOST_PP_ITERATION_FINISH_2 >= 204
+# define BOOST_PP_ITERATION_2 204
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 205 && BOOST_PP_ITERATION_FINISH_2 >= 205
+# define BOOST_PP_ITERATION_2 205
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 206 && BOOST_PP_ITERATION_FINISH_2 >= 206
+# define BOOST_PP_ITERATION_2 206
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 207 && BOOST_PP_ITERATION_FINISH_2 >= 207
+# define BOOST_PP_ITERATION_2 207
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 208 && BOOST_PP_ITERATION_FINISH_2 >= 208
+# define BOOST_PP_ITERATION_2 208
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 209 && BOOST_PP_ITERATION_FINISH_2 >= 209
+# define BOOST_PP_ITERATION_2 209
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 210 && BOOST_PP_ITERATION_FINISH_2 >= 210
+# define BOOST_PP_ITERATION_2 210
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 211 && BOOST_PP_ITERATION_FINISH_2 >= 211
+# define BOOST_PP_ITERATION_2 211
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 212 && BOOST_PP_ITERATION_FINISH_2 >= 212
+# define BOOST_PP_ITERATION_2 212
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 213 && BOOST_PP_ITERATION_FINISH_2 >= 213
+# define BOOST_PP_ITERATION_2 213
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 214 && BOOST_PP_ITERATION_FINISH_2 >= 214
+# define BOOST_PP_ITERATION_2 214
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 215 && BOOST_PP_ITERATION_FINISH_2 >= 215
+# define BOOST_PP_ITERATION_2 215
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 216 && BOOST_PP_ITERATION_FINISH_2 >= 216
+# define BOOST_PP_ITERATION_2 216
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 217 && BOOST_PP_ITERATION_FINISH_2 >= 217
+# define BOOST_PP_ITERATION_2 217
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 218 && BOOST_PP_ITERATION_FINISH_2 >= 218
+# define BOOST_PP_ITERATION_2 218
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 219 && BOOST_PP_ITERATION_FINISH_2 >= 219
+# define BOOST_PP_ITERATION_2 219
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 220 && BOOST_PP_ITERATION_FINISH_2 >= 220
+# define BOOST_PP_ITERATION_2 220
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 221 && BOOST_PP_ITERATION_FINISH_2 >= 221
+# define BOOST_PP_ITERATION_2 221
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 222 && BOOST_PP_ITERATION_FINISH_2 >= 222
+# define BOOST_PP_ITERATION_2 222
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 223 && BOOST_PP_ITERATION_FINISH_2 >= 223
+# define BOOST_PP_ITERATION_2 223
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 224 && BOOST_PP_ITERATION_FINISH_2 >= 224
+# define BOOST_PP_ITERATION_2 224
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 225 && BOOST_PP_ITERATION_FINISH_2 >= 225
+# define BOOST_PP_ITERATION_2 225
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 226 && BOOST_PP_ITERATION_FINISH_2 >= 226
+# define BOOST_PP_ITERATION_2 226
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 227 && BOOST_PP_ITERATION_FINISH_2 >= 227
+# define BOOST_PP_ITERATION_2 227
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 228 && BOOST_PP_ITERATION_FINISH_2 >= 228
+# define BOOST_PP_ITERATION_2 228
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 229 && BOOST_PP_ITERATION_FINISH_2 >= 229
+# define BOOST_PP_ITERATION_2 229
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 230 && BOOST_PP_ITERATION_FINISH_2 >= 230
+# define BOOST_PP_ITERATION_2 230
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 231 && BOOST_PP_ITERATION_FINISH_2 >= 231
+# define BOOST_PP_ITERATION_2 231
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 232 && BOOST_PP_ITERATION_FINISH_2 >= 232
+# define BOOST_PP_ITERATION_2 232
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 233 && BOOST_PP_ITERATION_FINISH_2 >= 233
+# define BOOST_PP_ITERATION_2 233
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 234 && BOOST_PP_ITERATION_FINISH_2 >= 234
+# define BOOST_PP_ITERATION_2 234
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 235 && BOOST_PP_ITERATION_FINISH_2 >= 235
+# define BOOST_PP_ITERATION_2 235
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 236 && BOOST_PP_ITERATION_FINISH_2 >= 236
+# define BOOST_PP_ITERATION_2 236
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 237 && BOOST_PP_ITERATION_FINISH_2 >= 237
+# define BOOST_PP_ITERATION_2 237
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 238 && BOOST_PP_ITERATION_FINISH_2 >= 238
+# define BOOST_PP_ITERATION_2 238
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 239 && BOOST_PP_ITERATION_FINISH_2 >= 239
+# define BOOST_PP_ITERATION_2 239
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 240 && BOOST_PP_ITERATION_FINISH_2 >= 240
+# define BOOST_PP_ITERATION_2 240
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 241 && BOOST_PP_ITERATION_FINISH_2 >= 241
+# define BOOST_PP_ITERATION_2 241
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 242 && BOOST_PP_ITERATION_FINISH_2 >= 242
+# define BOOST_PP_ITERATION_2 242
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 243 && BOOST_PP_ITERATION_FINISH_2 >= 243
+# define BOOST_PP_ITERATION_2 243
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 244 && BOOST_PP_ITERATION_FINISH_2 >= 244
+# define BOOST_PP_ITERATION_2 244
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 245 && BOOST_PP_ITERATION_FINISH_2 >= 245
+# define BOOST_PP_ITERATION_2 245
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 246 && BOOST_PP_ITERATION_FINISH_2 >= 246
+# define BOOST_PP_ITERATION_2 246
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 247 && BOOST_PP_ITERATION_FINISH_2 >= 247
+# define BOOST_PP_ITERATION_2 247
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 248 && BOOST_PP_ITERATION_FINISH_2 >= 248
+# define BOOST_PP_ITERATION_2 248
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 249 && BOOST_PP_ITERATION_FINISH_2 >= 249
+# define BOOST_PP_ITERATION_2 249
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 250 && BOOST_PP_ITERATION_FINISH_2 >= 250
+# define BOOST_PP_ITERATION_2 250
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 251 && BOOST_PP_ITERATION_FINISH_2 >= 251
+# define BOOST_PP_ITERATION_2 251
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 252 && BOOST_PP_ITERATION_FINISH_2 >= 252
+# define BOOST_PP_ITERATION_2 252
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 253 && BOOST_PP_ITERATION_FINISH_2 >= 253
+# define BOOST_PP_ITERATION_2 253
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 254 && BOOST_PP_ITERATION_FINISH_2 >= 254
+# define BOOST_PP_ITERATION_2 254
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 255 && BOOST_PP_ITERATION_FINISH_2 >= 255
+# define BOOST_PP_ITERATION_2 255
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_START_2 <= 256 && BOOST_PP_ITERATION_FINISH_2 >= 256
+# define BOOST_PP_ITERATION_2 256
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# endif
+#
+# undef BOOST_PP_ITERATION_DEPTH
+# define BOOST_PP_ITERATION_DEPTH() 1
+#
+# undef BOOST_PP_ITERATION_START_2
+# undef BOOST_PP_ITERATION_FINISH_2
+# undef BOOST_PP_FILENAME_2
+#
+# undef BOOST_PP_ITERATION_FLAGS_2
+# undef BOOST_PP_ITERATION_PARAMS_2
diff --git a/boost/boost/preprocessor/iteration/detail/iter/forward3.hpp b/boost/boost/preprocessor/iteration/detail/iter/forward3.hpp
new file mode 100644
index 00000000000..a25d0de189f
--- /dev/null
+++ b/boost/boost/preprocessor/iteration/detail/iter/forward3.hpp
@@ -0,0 +1,1338 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# if defined(BOOST_PP_ITERATION_LIMITS)
+# if !defined(BOOST_PP_FILENAME_3)
+# error BOOST_PP_ERROR: depth #3 filename is not defined
+# endif
+# define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_ITERATION_LIMITS)
+# include <boost/preprocessor/iteration/detail/bounds/lower3.hpp>
+# define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 1, BOOST_PP_ITERATION_LIMITS)
+# include <boost/preprocessor/iteration/detail/bounds/upper3.hpp>
+# define BOOST_PP_ITERATION_FLAGS_3 0
+# undef BOOST_PP_ITERATION_LIMITS
+# elif defined(BOOST_PP_ITERATION_PARAMS_3)
+# define BOOST_PP_VALUE BOOST_PP_ARRAY_ELEM(0, BOOST_PP_ITERATION_PARAMS_3)
+# include <boost/preprocessor/iteration/detail/bounds/lower3.hpp>
+# define BOOST_PP_VALUE BOOST_PP_ARRAY_ELEM(1, BOOST_PP_ITERATION_PARAMS_3)
+# include <boost/preprocessor/iteration/detail/bounds/upper3.hpp>
+# define BOOST_PP_FILENAME_3 BOOST_PP_ARRAY_ELEM(2, BOOST_PP_ITERATION_PARAMS_3)
+# if BOOST_PP_ARRAY_SIZE(BOOST_PP_ITERATION_PARAMS_3) >= 4
+# define BOOST_PP_ITERATION_FLAGS_3 BOOST_PP_ARRAY_ELEM(3, BOOST_PP_ITERATION_PARAMS_3)
+# else
+# define BOOST_PP_ITERATION_FLAGS_3 0
+# endif
+# else
+# error BOOST_PP_ERROR: depth #3 iteration boundaries or filename not defined
+# endif
+#
+# undef BOOST_PP_ITERATION_DEPTH
+# define BOOST_PP_ITERATION_DEPTH() 3
+#
+# if (BOOST_PP_ITERATION_START_3) > (BOOST_PP_ITERATION_FINISH_3)
+# include <boost/preprocessor/iteration/detail/iter/reverse3.hpp>
+# else
+# if BOOST_PP_ITERATION_START_3 <= 0 && BOOST_PP_ITERATION_FINISH_3 >= 0
+# define BOOST_PP_ITERATION_3 0
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 1 && BOOST_PP_ITERATION_FINISH_3 >= 1
+# define BOOST_PP_ITERATION_3 1
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 2 && BOOST_PP_ITERATION_FINISH_3 >= 2
+# define BOOST_PP_ITERATION_3 2
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 3 && BOOST_PP_ITERATION_FINISH_3 >= 3
+# define BOOST_PP_ITERATION_3 3
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 4 && BOOST_PP_ITERATION_FINISH_3 >= 4
+# define BOOST_PP_ITERATION_3 4
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 5 && BOOST_PP_ITERATION_FINISH_3 >= 5
+# define BOOST_PP_ITERATION_3 5
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 6 && BOOST_PP_ITERATION_FINISH_3 >= 6
+# define BOOST_PP_ITERATION_3 6
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 7 && BOOST_PP_ITERATION_FINISH_3 >= 7
+# define BOOST_PP_ITERATION_3 7
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 8 && BOOST_PP_ITERATION_FINISH_3 >= 8
+# define BOOST_PP_ITERATION_3 8
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 9 && BOOST_PP_ITERATION_FINISH_3 >= 9
+# define BOOST_PP_ITERATION_3 9
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 10 && BOOST_PP_ITERATION_FINISH_3 >= 10
+# define BOOST_PP_ITERATION_3 10
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 11 && BOOST_PP_ITERATION_FINISH_3 >= 11
+# define BOOST_PP_ITERATION_3 11
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 12 && BOOST_PP_ITERATION_FINISH_3 >= 12
+# define BOOST_PP_ITERATION_3 12
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 13 && BOOST_PP_ITERATION_FINISH_3 >= 13
+# define BOOST_PP_ITERATION_3 13
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 14 && BOOST_PP_ITERATION_FINISH_3 >= 14
+# define BOOST_PP_ITERATION_3 14
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 15 && BOOST_PP_ITERATION_FINISH_3 >= 15
+# define BOOST_PP_ITERATION_3 15
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 16 && BOOST_PP_ITERATION_FINISH_3 >= 16
+# define BOOST_PP_ITERATION_3 16
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 17 && BOOST_PP_ITERATION_FINISH_3 >= 17
+# define BOOST_PP_ITERATION_3 17
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 18 && BOOST_PP_ITERATION_FINISH_3 >= 18
+# define BOOST_PP_ITERATION_3 18
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 19 && BOOST_PP_ITERATION_FINISH_3 >= 19
+# define BOOST_PP_ITERATION_3 19
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 20 && BOOST_PP_ITERATION_FINISH_3 >= 20
+# define BOOST_PP_ITERATION_3 20
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 21 && BOOST_PP_ITERATION_FINISH_3 >= 21
+# define BOOST_PP_ITERATION_3 21
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 22 && BOOST_PP_ITERATION_FINISH_3 >= 22
+# define BOOST_PP_ITERATION_3 22
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 23 && BOOST_PP_ITERATION_FINISH_3 >= 23
+# define BOOST_PP_ITERATION_3 23
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 24 && BOOST_PP_ITERATION_FINISH_3 >= 24
+# define BOOST_PP_ITERATION_3 24
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 25 && BOOST_PP_ITERATION_FINISH_3 >= 25
+# define BOOST_PP_ITERATION_3 25
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 26 && BOOST_PP_ITERATION_FINISH_3 >= 26
+# define BOOST_PP_ITERATION_3 26
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 27 && BOOST_PP_ITERATION_FINISH_3 >= 27
+# define BOOST_PP_ITERATION_3 27
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 28 && BOOST_PP_ITERATION_FINISH_3 >= 28
+# define BOOST_PP_ITERATION_3 28
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 29 && BOOST_PP_ITERATION_FINISH_3 >= 29
+# define BOOST_PP_ITERATION_3 29
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 30 && BOOST_PP_ITERATION_FINISH_3 >= 30
+# define BOOST_PP_ITERATION_3 30
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 31 && BOOST_PP_ITERATION_FINISH_3 >= 31
+# define BOOST_PP_ITERATION_3 31
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 32 && BOOST_PP_ITERATION_FINISH_3 >= 32
+# define BOOST_PP_ITERATION_3 32
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 33 && BOOST_PP_ITERATION_FINISH_3 >= 33
+# define BOOST_PP_ITERATION_3 33
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 34 && BOOST_PP_ITERATION_FINISH_3 >= 34
+# define BOOST_PP_ITERATION_3 34
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 35 && BOOST_PP_ITERATION_FINISH_3 >= 35
+# define BOOST_PP_ITERATION_3 35
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 36 && BOOST_PP_ITERATION_FINISH_3 >= 36
+# define BOOST_PP_ITERATION_3 36
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 37 && BOOST_PP_ITERATION_FINISH_3 >= 37
+# define BOOST_PP_ITERATION_3 37
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 38 && BOOST_PP_ITERATION_FINISH_3 >= 38
+# define BOOST_PP_ITERATION_3 38
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 39 && BOOST_PP_ITERATION_FINISH_3 >= 39
+# define BOOST_PP_ITERATION_3 39
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 40 && BOOST_PP_ITERATION_FINISH_3 >= 40
+# define BOOST_PP_ITERATION_3 40
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 41 && BOOST_PP_ITERATION_FINISH_3 >= 41
+# define BOOST_PP_ITERATION_3 41
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 42 && BOOST_PP_ITERATION_FINISH_3 >= 42
+# define BOOST_PP_ITERATION_3 42
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 43 && BOOST_PP_ITERATION_FINISH_3 >= 43
+# define BOOST_PP_ITERATION_3 43
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 44 && BOOST_PP_ITERATION_FINISH_3 >= 44
+# define BOOST_PP_ITERATION_3 44
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 45 && BOOST_PP_ITERATION_FINISH_3 >= 45
+# define BOOST_PP_ITERATION_3 45
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 46 && BOOST_PP_ITERATION_FINISH_3 >= 46
+# define BOOST_PP_ITERATION_3 46
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 47 && BOOST_PP_ITERATION_FINISH_3 >= 47
+# define BOOST_PP_ITERATION_3 47
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 48 && BOOST_PP_ITERATION_FINISH_3 >= 48
+# define BOOST_PP_ITERATION_3 48
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 49 && BOOST_PP_ITERATION_FINISH_3 >= 49
+# define BOOST_PP_ITERATION_3 49
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 50 && BOOST_PP_ITERATION_FINISH_3 >= 50
+# define BOOST_PP_ITERATION_3 50
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 51 && BOOST_PP_ITERATION_FINISH_3 >= 51
+# define BOOST_PP_ITERATION_3 51
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 52 && BOOST_PP_ITERATION_FINISH_3 >= 52
+# define BOOST_PP_ITERATION_3 52
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 53 && BOOST_PP_ITERATION_FINISH_3 >= 53
+# define BOOST_PP_ITERATION_3 53
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 54 && BOOST_PP_ITERATION_FINISH_3 >= 54
+# define BOOST_PP_ITERATION_3 54
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 55 && BOOST_PP_ITERATION_FINISH_3 >= 55
+# define BOOST_PP_ITERATION_3 55
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 56 && BOOST_PP_ITERATION_FINISH_3 >= 56
+# define BOOST_PP_ITERATION_3 56
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 57 && BOOST_PP_ITERATION_FINISH_3 >= 57
+# define BOOST_PP_ITERATION_3 57
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 58 && BOOST_PP_ITERATION_FINISH_3 >= 58
+# define BOOST_PP_ITERATION_3 58
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 59 && BOOST_PP_ITERATION_FINISH_3 >= 59
+# define BOOST_PP_ITERATION_3 59
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 60 && BOOST_PP_ITERATION_FINISH_3 >= 60
+# define BOOST_PP_ITERATION_3 60
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 61 && BOOST_PP_ITERATION_FINISH_3 >= 61
+# define BOOST_PP_ITERATION_3 61
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 62 && BOOST_PP_ITERATION_FINISH_3 >= 62
+# define BOOST_PP_ITERATION_3 62
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 63 && BOOST_PP_ITERATION_FINISH_3 >= 63
+# define BOOST_PP_ITERATION_3 63
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 64 && BOOST_PP_ITERATION_FINISH_3 >= 64
+# define BOOST_PP_ITERATION_3 64
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 65 && BOOST_PP_ITERATION_FINISH_3 >= 65
+# define BOOST_PP_ITERATION_3 65
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 66 && BOOST_PP_ITERATION_FINISH_3 >= 66
+# define BOOST_PP_ITERATION_3 66
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 67 && BOOST_PP_ITERATION_FINISH_3 >= 67
+# define BOOST_PP_ITERATION_3 67
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 68 && BOOST_PP_ITERATION_FINISH_3 >= 68
+# define BOOST_PP_ITERATION_3 68
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 69 && BOOST_PP_ITERATION_FINISH_3 >= 69
+# define BOOST_PP_ITERATION_3 69
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 70 && BOOST_PP_ITERATION_FINISH_3 >= 70
+# define BOOST_PP_ITERATION_3 70
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 71 && BOOST_PP_ITERATION_FINISH_3 >= 71
+# define BOOST_PP_ITERATION_3 71
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 72 && BOOST_PP_ITERATION_FINISH_3 >= 72
+# define BOOST_PP_ITERATION_3 72
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 73 && BOOST_PP_ITERATION_FINISH_3 >= 73
+# define BOOST_PP_ITERATION_3 73
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 74 && BOOST_PP_ITERATION_FINISH_3 >= 74
+# define BOOST_PP_ITERATION_3 74
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 75 && BOOST_PP_ITERATION_FINISH_3 >= 75
+# define BOOST_PP_ITERATION_3 75
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 76 && BOOST_PP_ITERATION_FINISH_3 >= 76
+# define BOOST_PP_ITERATION_3 76
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 77 && BOOST_PP_ITERATION_FINISH_3 >= 77
+# define BOOST_PP_ITERATION_3 77
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 78 && BOOST_PP_ITERATION_FINISH_3 >= 78
+# define BOOST_PP_ITERATION_3 78
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 79 && BOOST_PP_ITERATION_FINISH_3 >= 79
+# define BOOST_PP_ITERATION_3 79
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 80 && BOOST_PP_ITERATION_FINISH_3 >= 80
+# define BOOST_PP_ITERATION_3 80
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 81 && BOOST_PP_ITERATION_FINISH_3 >= 81
+# define BOOST_PP_ITERATION_3 81
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 82 && BOOST_PP_ITERATION_FINISH_3 >= 82
+# define BOOST_PP_ITERATION_3 82
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 83 && BOOST_PP_ITERATION_FINISH_3 >= 83
+# define BOOST_PP_ITERATION_3 83
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 84 && BOOST_PP_ITERATION_FINISH_3 >= 84
+# define BOOST_PP_ITERATION_3 84
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 85 && BOOST_PP_ITERATION_FINISH_3 >= 85
+# define BOOST_PP_ITERATION_3 85
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 86 && BOOST_PP_ITERATION_FINISH_3 >= 86
+# define BOOST_PP_ITERATION_3 86
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 87 && BOOST_PP_ITERATION_FINISH_3 >= 87
+# define BOOST_PP_ITERATION_3 87
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 88 && BOOST_PP_ITERATION_FINISH_3 >= 88
+# define BOOST_PP_ITERATION_3 88
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 89 && BOOST_PP_ITERATION_FINISH_3 >= 89
+# define BOOST_PP_ITERATION_3 89
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 90 && BOOST_PP_ITERATION_FINISH_3 >= 90
+# define BOOST_PP_ITERATION_3 90
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 91 && BOOST_PP_ITERATION_FINISH_3 >= 91
+# define BOOST_PP_ITERATION_3 91
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 92 && BOOST_PP_ITERATION_FINISH_3 >= 92
+# define BOOST_PP_ITERATION_3 92
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 93 && BOOST_PP_ITERATION_FINISH_3 >= 93
+# define BOOST_PP_ITERATION_3 93
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 94 && BOOST_PP_ITERATION_FINISH_3 >= 94
+# define BOOST_PP_ITERATION_3 94
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 95 && BOOST_PP_ITERATION_FINISH_3 >= 95
+# define BOOST_PP_ITERATION_3 95
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 96 && BOOST_PP_ITERATION_FINISH_3 >= 96
+# define BOOST_PP_ITERATION_3 96
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 97 && BOOST_PP_ITERATION_FINISH_3 >= 97
+# define BOOST_PP_ITERATION_3 97
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 98 && BOOST_PP_ITERATION_FINISH_3 >= 98
+# define BOOST_PP_ITERATION_3 98
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 99 && BOOST_PP_ITERATION_FINISH_3 >= 99
+# define BOOST_PP_ITERATION_3 99
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 100 && BOOST_PP_ITERATION_FINISH_3 >= 100
+# define BOOST_PP_ITERATION_3 100
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 101 && BOOST_PP_ITERATION_FINISH_3 >= 101
+# define BOOST_PP_ITERATION_3 101
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 102 && BOOST_PP_ITERATION_FINISH_3 >= 102
+# define BOOST_PP_ITERATION_3 102
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 103 && BOOST_PP_ITERATION_FINISH_3 >= 103
+# define BOOST_PP_ITERATION_3 103
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 104 && BOOST_PP_ITERATION_FINISH_3 >= 104
+# define BOOST_PP_ITERATION_3 104
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 105 && BOOST_PP_ITERATION_FINISH_3 >= 105
+# define BOOST_PP_ITERATION_3 105
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 106 && BOOST_PP_ITERATION_FINISH_3 >= 106
+# define BOOST_PP_ITERATION_3 106
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 107 && BOOST_PP_ITERATION_FINISH_3 >= 107
+# define BOOST_PP_ITERATION_3 107
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 108 && BOOST_PP_ITERATION_FINISH_3 >= 108
+# define BOOST_PP_ITERATION_3 108
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 109 && BOOST_PP_ITERATION_FINISH_3 >= 109
+# define BOOST_PP_ITERATION_3 109
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 110 && BOOST_PP_ITERATION_FINISH_3 >= 110
+# define BOOST_PP_ITERATION_3 110
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 111 && BOOST_PP_ITERATION_FINISH_3 >= 111
+# define BOOST_PP_ITERATION_3 111
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 112 && BOOST_PP_ITERATION_FINISH_3 >= 112
+# define BOOST_PP_ITERATION_3 112
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 113 && BOOST_PP_ITERATION_FINISH_3 >= 113
+# define BOOST_PP_ITERATION_3 113
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 114 && BOOST_PP_ITERATION_FINISH_3 >= 114
+# define BOOST_PP_ITERATION_3 114
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 115 && BOOST_PP_ITERATION_FINISH_3 >= 115
+# define BOOST_PP_ITERATION_3 115
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 116 && BOOST_PP_ITERATION_FINISH_3 >= 116
+# define BOOST_PP_ITERATION_3 116
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 117 && BOOST_PP_ITERATION_FINISH_3 >= 117
+# define BOOST_PP_ITERATION_3 117
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 118 && BOOST_PP_ITERATION_FINISH_3 >= 118
+# define BOOST_PP_ITERATION_3 118
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 119 && BOOST_PP_ITERATION_FINISH_3 >= 119
+# define BOOST_PP_ITERATION_3 119
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 120 && BOOST_PP_ITERATION_FINISH_3 >= 120
+# define BOOST_PP_ITERATION_3 120
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 121 && BOOST_PP_ITERATION_FINISH_3 >= 121
+# define BOOST_PP_ITERATION_3 121
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 122 && BOOST_PP_ITERATION_FINISH_3 >= 122
+# define BOOST_PP_ITERATION_3 122
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 123 && BOOST_PP_ITERATION_FINISH_3 >= 123
+# define BOOST_PP_ITERATION_3 123
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 124 && BOOST_PP_ITERATION_FINISH_3 >= 124
+# define BOOST_PP_ITERATION_3 124
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 125 && BOOST_PP_ITERATION_FINISH_3 >= 125
+# define BOOST_PP_ITERATION_3 125
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 126 && BOOST_PP_ITERATION_FINISH_3 >= 126
+# define BOOST_PP_ITERATION_3 126
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 127 && BOOST_PP_ITERATION_FINISH_3 >= 127
+# define BOOST_PP_ITERATION_3 127
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 128 && BOOST_PP_ITERATION_FINISH_3 >= 128
+# define BOOST_PP_ITERATION_3 128
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 129 && BOOST_PP_ITERATION_FINISH_3 >= 129
+# define BOOST_PP_ITERATION_3 129
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 130 && BOOST_PP_ITERATION_FINISH_3 >= 130
+# define BOOST_PP_ITERATION_3 130
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 131 && BOOST_PP_ITERATION_FINISH_3 >= 131
+# define BOOST_PP_ITERATION_3 131
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 132 && BOOST_PP_ITERATION_FINISH_3 >= 132
+# define BOOST_PP_ITERATION_3 132
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 133 && BOOST_PP_ITERATION_FINISH_3 >= 133
+# define BOOST_PP_ITERATION_3 133
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 134 && BOOST_PP_ITERATION_FINISH_3 >= 134
+# define BOOST_PP_ITERATION_3 134
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 135 && BOOST_PP_ITERATION_FINISH_3 >= 135
+# define BOOST_PP_ITERATION_3 135
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 136 && BOOST_PP_ITERATION_FINISH_3 >= 136
+# define BOOST_PP_ITERATION_3 136
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 137 && BOOST_PP_ITERATION_FINISH_3 >= 137
+# define BOOST_PP_ITERATION_3 137
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 138 && BOOST_PP_ITERATION_FINISH_3 >= 138
+# define BOOST_PP_ITERATION_3 138
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 139 && BOOST_PP_ITERATION_FINISH_3 >= 139
+# define BOOST_PP_ITERATION_3 139
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 140 && BOOST_PP_ITERATION_FINISH_3 >= 140
+# define BOOST_PP_ITERATION_3 140
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 141 && BOOST_PP_ITERATION_FINISH_3 >= 141
+# define BOOST_PP_ITERATION_3 141
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 142 && BOOST_PP_ITERATION_FINISH_3 >= 142
+# define BOOST_PP_ITERATION_3 142
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 143 && BOOST_PP_ITERATION_FINISH_3 >= 143
+# define BOOST_PP_ITERATION_3 143
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 144 && BOOST_PP_ITERATION_FINISH_3 >= 144
+# define BOOST_PP_ITERATION_3 144
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 145 && BOOST_PP_ITERATION_FINISH_3 >= 145
+# define BOOST_PP_ITERATION_3 145
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 146 && BOOST_PP_ITERATION_FINISH_3 >= 146
+# define BOOST_PP_ITERATION_3 146
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 147 && BOOST_PP_ITERATION_FINISH_3 >= 147
+# define BOOST_PP_ITERATION_3 147
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 148 && BOOST_PP_ITERATION_FINISH_3 >= 148
+# define BOOST_PP_ITERATION_3 148
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 149 && BOOST_PP_ITERATION_FINISH_3 >= 149
+# define BOOST_PP_ITERATION_3 149
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 150 && BOOST_PP_ITERATION_FINISH_3 >= 150
+# define BOOST_PP_ITERATION_3 150
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 151 && BOOST_PP_ITERATION_FINISH_3 >= 151
+# define BOOST_PP_ITERATION_3 151
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 152 && BOOST_PP_ITERATION_FINISH_3 >= 152
+# define BOOST_PP_ITERATION_3 152
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 153 && BOOST_PP_ITERATION_FINISH_3 >= 153
+# define BOOST_PP_ITERATION_3 153
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 154 && BOOST_PP_ITERATION_FINISH_3 >= 154
+# define BOOST_PP_ITERATION_3 154
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 155 && BOOST_PP_ITERATION_FINISH_3 >= 155
+# define BOOST_PP_ITERATION_3 155
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 156 && BOOST_PP_ITERATION_FINISH_3 >= 156
+# define BOOST_PP_ITERATION_3 156
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 157 && BOOST_PP_ITERATION_FINISH_3 >= 157
+# define BOOST_PP_ITERATION_3 157
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 158 && BOOST_PP_ITERATION_FINISH_3 >= 158
+# define BOOST_PP_ITERATION_3 158
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 159 && BOOST_PP_ITERATION_FINISH_3 >= 159
+# define BOOST_PP_ITERATION_3 159
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 160 && BOOST_PP_ITERATION_FINISH_3 >= 160
+# define BOOST_PP_ITERATION_3 160
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 161 && BOOST_PP_ITERATION_FINISH_3 >= 161
+# define BOOST_PP_ITERATION_3 161
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 162 && BOOST_PP_ITERATION_FINISH_3 >= 162
+# define BOOST_PP_ITERATION_3 162
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 163 && BOOST_PP_ITERATION_FINISH_3 >= 163
+# define BOOST_PP_ITERATION_3 163
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 164 && BOOST_PP_ITERATION_FINISH_3 >= 164
+# define BOOST_PP_ITERATION_3 164
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 165 && BOOST_PP_ITERATION_FINISH_3 >= 165
+# define BOOST_PP_ITERATION_3 165
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 166 && BOOST_PP_ITERATION_FINISH_3 >= 166
+# define BOOST_PP_ITERATION_3 166
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 167 && BOOST_PP_ITERATION_FINISH_3 >= 167
+# define BOOST_PP_ITERATION_3 167
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 168 && BOOST_PP_ITERATION_FINISH_3 >= 168
+# define BOOST_PP_ITERATION_3 168
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 169 && BOOST_PP_ITERATION_FINISH_3 >= 169
+# define BOOST_PP_ITERATION_3 169
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 170 && BOOST_PP_ITERATION_FINISH_3 >= 170
+# define BOOST_PP_ITERATION_3 170
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 171 && BOOST_PP_ITERATION_FINISH_3 >= 171
+# define BOOST_PP_ITERATION_3 171
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 172 && BOOST_PP_ITERATION_FINISH_3 >= 172
+# define BOOST_PP_ITERATION_3 172
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 173 && BOOST_PP_ITERATION_FINISH_3 >= 173
+# define BOOST_PP_ITERATION_3 173
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 174 && BOOST_PP_ITERATION_FINISH_3 >= 174
+# define BOOST_PP_ITERATION_3 174
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 175 && BOOST_PP_ITERATION_FINISH_3 >= 175
+# define BOOST_PP_ITERATION_3 175
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 176 && BOOST_PP_ITERATION_FINISH_3 >= 176
+# define BOOST_PP_ITERATION_3 176
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 177 && BOOST_PP_ITERATION_FINISH_3 >= 177
+# define BOOST_PP_ITERATION_3 177
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 178 && BOOST_PP_ITERATION_FINISH_3 >= 178
+# define BOOST_PP_ITERATION_3 178
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 179 && BOOST_PP_ITERATION_FINISH_3 >= 179
+# define BOOST_PP_ITERATION_3 179
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 180 && BOOST_PP_ITERATION_FINISH_3 >= 180
+# define BOOST_PP_ITERATION_3 180
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 181 && BOOST_PP_ITERATION_FINISH_3 >= 181
+# define BOOST_PP_ITERATION_3 181
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 182 && BOOST_PP_ITERATION_FINISH_3 >= 182
+# define BOOST_PP_ITERATION_3 182
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 183 && BOOST_PP_ITERATION_FINISH_3 >= 183
+# define BOOST_PP_ITERATION_3 183
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 184 && BOOST_PP_ITERATION_FINISH_3 >= 184
+# define BOOST_PP_ITERATION_3 184
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 185 && BOOST_PP_ITERATION_FINISH_3 >= 185
+# define BOOST_PP_ITERATION_3 185
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 186 && BOOST_PP_ITERATION_FINISH_3 >= 186
+# define BOOST_PP_ITERATION_3 186
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 187 && BOOST_PP_ITERATION_FINISH_3 >= 187
+# define BOOST_PP_ITERATION_3 187
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 188 && BOOST_PP_ITERATION_FINISH_3 >= 188
+# define BOOST_PP_ITERATION_3 188
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 189 && BOOST_PP_ITERATION_FINISH_3 >= 189
+# define BOOST_PP_ITERATION_3 189
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 190 && BOOST_PP_ITERATION_FINISH_3 >= 190
+# define BOOST_PP_ITERATION_3 190
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 191 && BOOST_PP_ITERATION_FINISH_3 >= 191
+# define BOOST_PP_ITERATION_3 191
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 192 && BOOST_PP_ITERATION_FINISH_3 >= 192
+# define BOOST_PP_ITERATION_3 192
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 193 && BOOST_PP_ITERATION_FINISH_3 >= 193
+# define BOOST_PP_ITERATION_3 193
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 194 && BOOST_PP_ITERATION_FINISH_3 >= 194
+# define BOOST_PP_ITERATION_3 194
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 195 && BOOST_PP_ITERATION_FINISH_3 >= 195
+# define BOOST_PP_ITERATION_3 195
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 196 && BOOST_PP_ITERATION_FINISH_3 >= 196
+# define BOOST_PP_ITERATION_3 196
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 197 && BOOST_PP_ITERATION_FINISH_3 >= 197
+# define BOOST_PP_ITERATION_3 197
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 198 && BOOST_PP_ITERATION_FINISH_3 >= 198
+# define BOOST_PP_ITERATION_3 198
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 199 && BOOST_PP_ITERATION_FINISH_3 >= 199
+# define BOOST_PP_ITERATION_3 199
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 200 && BOOST_PP_ITERATION_FINISH_3 >= 200
+# define BOOST_PP_ITERATION_3 200
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 201 && BOOST_PP_ITERATION_FINISH_3 >= 201
+# define BOOST_PP_ITERATION_3 201
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 202 && BOOST_PP_ITERATION_FINISH_3 >= 202
+# define BOOST_PP_ITERATION_3 202
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 203 && BOOST_PP_ITERATION_FINISH_3 >= 203
+# define BOOST_PP_ITERATION_3 203
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 204 && BOOST_PP_ITERATION_FINISH_3 >= 204
+# define BOOST_PP_ITERATION_3 204
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 205 && BOOST_PP_ITERATION_FINISH_3 >= 205
+# define BOOST_PP_ITERATION_3 205
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 206 && BOOST_PP_ITERATION_FINISH_3 >= 206
+# define BOOST_PP_ITERATION_3 206
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 207 && BOOST_PP_ITERATION_FINISH_3 >= 207
+# define BOOST_PP_ITERATION_3 207
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 208 && BOOST_PP_ITERATION_FINISH_3 >= 208
+# define BOOST_PP_ITERATION_3 208
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 209 && BOOST_PP_ITERATION_FINISH_3 >= 209
+# define BOOST_PP_ITERATION_3 209
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 210 && BOOST_PP_ITERATION_FINISH_3 >= 210
+# define BOOST_PP_ITERATION_3 210
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 211 && BOOST_PP_ITERATION_FINISH_3 >= 211
+# define BOOST_PP_ITERATION_3 211
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 212 && BOOST_PP_ITERATION_FINISH_3 >= 212
+# define BOOST_PP_ITERATION_3 212
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 213 && BOOST_PP_ITERATION_FINISH_3 >= 213
+# define BOOST_PP_ITERATION_3 213
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 214 && BOOST_PP_ITERATION_FINISH_3 >= 214
+# define BOOST_PP_ITERATION_3 214
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 215 && BOOST_PP_ITERATION_FINISH_3 >= 215
+# define BOOST_PP_ITERATION_3 215
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 216 && BOOST_PP_ITERATION_FINISH_3 >= 216
+# define BOOST_PP_ITERATION_3 216
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 217 && BOOST_PP_ITERATION_FINISH_3 >= 217
+# define BOOST_PP_ITERATION_3 217
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 218 && BOOST_PP_ITERATION_FINISH_3 >= 218
+# define BOOST_PP_ITERATION_3 218
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 219 && BOOST_PP_ITERATION_FINISH_3 >= 219
+# define BOOST_PP_ITERATION_3 219
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 220 && BOOST_PP_ITERATION_FINISH_3 >= 220
+# define BOOST_PP_ITERATION_3 220
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 221 && BOOST_PP_ITERATION_FINISH_3 >= 221
+# define BOOST_PP_ITERATION_3 221
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 222 && BOOST_PP_ITERATION_FINISH_3 >= 222
+# define BOOST_PP_ITERATION_3 222
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 223 && BOOST_PP_ITERATION_FINISH_3 >= 223
+# define BOOST_PP_ITERATION_3 223
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 224 && BOOST_PP_ITERATION_FINISH_3 >= 224
+# define BOOST_PP_ITERATION_3 224
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 225 && BOOST_PP_ITERATION_FINISH_3 >= 225
+# define BOOST_PP_ITERATION_3 225
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 226 && BOOST_PP_ITERATION_FINISH_3 >= 226
+# define BOOST_PP_ITERATION_3 226
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 227 && BOOST_PP_ITERATION_FINISH_3 >= 227
+# define BOOST_PP_ITERATION_3 227
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 228 && BOOST_PP_ITERATION_FINISH_3 >= 228
+# define BOOST_PP_ITERATION_3 228
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 229 && BOOST_PP_ITERATION_FINISH_3 >= 229
+# define BOOST_PP_ITERATION_3 229
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 230 && BOOST_PP_ITERATION_FINISH_3 >= 230
+# define BOOST_PP_ITERATION_3 230
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 231 && BOOST_PP_ITERATION_FINISH_3 >= 231
+# define BOOST_PP_ITERATION_3 231
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 232 && BOOST_PP_ITERATION_FINISH_3 >= 232
+# define BOOST_PP_ITERATION_3 232
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 233 && BOOST_PP_ITERATION_FINISH_3 >= 233
+# define BOOST_PP_ITERATION_3 233
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 234 && BOOST_PP_ITERATION_FINISH_3 >= 234
+# define BOOST_PP_ITERATION_3 234
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 235 && BOOST_PP_ITERATION_FINISH_3 >= 235
+# define BOOST_PP_ITERATION_3 235
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 236 && BOOST_PP_ITERATION_FINISH_3 >= 236
+# define BOOST_PP_ITERATION_3 236
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 237 && BOOST_PP_ITERATION_FINISH_3 >= 237
+# define BOOST_PP_ITERATION_3 237
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 238 && BOOST_PP_ITERATION_FINISH_3 >= 238
+# define BOOST_PP_ITERATION_3 238
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 239 && BOOST_PP_ITERATION_FINISH_3 >= 239
+# define BOOST_PP_ITERATION_3 239
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 240 && BOOST_PP_ITERATION_FINISH_3 >= 240
+# define BOOST_PP_ITERATION_3 240
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 241 && BOOST_PP_ITERATION_FINISH_3 >= 241
+# define BOOST_PP_ITERATION_3 241
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 242 && BOOST_PP_ITERATION_FINISH_3 >= 242
+# define BOOST_PP_ITERATION_3 242
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 243 && BOOST_PP_ITERATION_FINISH_3 >= 243
+# define BOOST_PP_ITERATION_3 243
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 244 && BOOST_PP_ITERATION_FINISH_3 >= 244
+# define BOOST_PP_ITERATION_3 244
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 245 && BOOST_PP_ITERATION_FINISH_3 >= 245
+# define BOOST_PP_ITERATION_3 245
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 246 && BOOST_PP_ITERATION_FINISH_3 >= 246
+# define BOOST_PP_ITERATION_3 246
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 247 && BOOST_PP_ITERATION_FINISH_3 >= 247
+# define BOOST_PP_ITERATION_3 247
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 248 && BOOST_PP_ITERATION_FINISH_3 >= 248
+# define BOOST_PP_ITERATION_3 248
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 249 && BOOST_PP_ITERATION_FINISH_3 >= 249
+# define BOOST_PP_ITERATION_3 249
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 250 && BOOST_PP_ITERATION_FINISH_3 >= 250
+# define BOOST_PP_ITERATION_3 250
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 251 && BOOST_PP_ITERATION_FINISH_3 >= 251
+# define BOOST_PP_ITERATION_3 251
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 252 && BOOST_PP_ITERATION_FINISH_3 >= 252
+# define BOOST_PP_ITERATION_3 252
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 253 && BOOST_PP_ITERATION_FINISH_3 >= 253
+# define BOOST_PP_ITERATION_3 253
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 254 && BOOST_PP_ITERATION_FINISH_3 >= 254
+# define BOOST_PP_ITERATION_3 254
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 255 && BOOST_PP_ITERATION_FINISH_3 >= 255
+# define BOOST_PP_ITERATION_3 255
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_START_3 <= 256 && BOOST_PP_ITERATION_FINISH_3 >= 256
+# define BOOST_PP_ITERATION_3 256
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# endif
+#
+# undef BOOST_PP_ITERATION_DEPTH
+# define BOOST_PP_ITERATION_DEPTH() 2
+#
+# undef BOOST_PP_ITERATION_START_3
+# undef BOOST_PP_ITERATION_FINISH_3
+# undef BOOST_PP_FILENAME_3
+#
+# undef BOOST_PP_ITERATION_FLAGS_3
+# undef BOOST_PP_ITERATION_PARAMS_3
diff --git a/boost/boost/preprocessor/iteration/detail/iter/forward4.hpp b/boost/boost/preprocessor/iteration/detail/iter/forward4.hpp
new file mode 100644
index 00000000000..6a6e54360b1
--- /dev/null
+++ b/boost/boost/preprocessor/iteration/detail/iter/forward4.hpp
@@ -0,0 +1,1338 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# if defined(BOOST_PP_ITERATION_LIMITS)
+# if !defined(BOOST_PP_FILENAME_4)
+# error BOOST_PP_ERROR: depth #4 filename is not defined
+# endif
+# define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_ITERATION_LIMITS)
+# include <boost/preprocessor/iteration/detail/bounds/lower4.hpp>
+# define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 1, BOOST_PP_ITERATION_LIMITS)
+# include <boost/preprocessor/iteration/detail/bounds/upper4.hpp>
+# define BOOST_PP_ITERATION_FLAGS_4 0
+# undef BOOST_PP_ITERATION_LIMITS
+# elif defined(BOOST_PP_ITERATION_PARAMS_4)
+# define BOOST_PP_VALUE BOOST_PP_ARRAY_ELEM(0, BOOST_PP_ITERATION_PARAMS_4)
+# include <boost/preprocessor/iteration/detail/bounds/lower4.hpp>
+# define BOOST_PP_VALUE BOOST_PP_ARRAY_ELEM(1, BOOST_PP_ITERATION_PARAMS_4)
+# include <boost/preprocessor/iteration/detail/bounds/upper4.hpp>
+# define BOOST_PP_FILENAME_4 BOOST_PP_ARRAY_ELEM(2, BOOST_PP_ITERATION_PARAMS_4)
+# if BOOST_PP_ARRAY_SIZE(BOOST_PP_ITERATION_PARAMS_4) >= 4
+# define BOOST_PP_ITERATION_FLAGS_4 BOOST_PP_ARRAY_ELEM(3, BOOST_PP_ITERATION_PARAMS_4)
+# else
+# define BOOST_PP_ITERATION_FLAGS_4 0
+# endif
+# else
+# error BOOST_PP_ERROR: depth #4 iteration boundaries or filename not defined
+# endif
+#
+# undef BOOST_PP_ITERATION_DEPTH
+# define BOOST_PP_ITERATION_DEPTH() 4
+#
+# if (BOOST_PP_ITERATION_START_4) > (BOOST_PP_ITERATION_FINISH_4)
+# include <boost/preprocessor/iteration/detail/iter/reverse4.hpp>
+# else
+# if BOOST_PP_ITERATION_START_4 <= 0 && BOOST_PP_ITERATION_FINISH_4 >= 0
+# define BOOST_PP_ITERATION_4 0
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 1 && BOOST_PP_ITERATION_FINISH_4 >= 1
+# define BOOST_PP_ITERATION_4 1
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 2 && BOOST_PP_ITERATION_FINISH_4 >= 2
+# define BOOST_PP_ITERATION_4 2
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 3 && BOOST_PP_ITERATION_FINISH_4 >= 3
+# define BOOST_PP_ITERATION_4 3
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 4 && BOOST_PP_ITERATION_FINISH_4 >= 4
+# define BOOST_PP_ITERATION_4 4
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 5 && BOOST_PP_ITERATION_FINISH_4 >= 5
+# define BOOST_PP_ITERATION_4 5
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 6 && BOOST_PP_ITERATION_FINISH_4 >= 6
+# define BOOST_PP_ITERATION_4 6
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 7 && BOOST_PP_ITERATION_FINISH_4 >= 7
+# define BOOST_PP_ITERATION_4 7
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 8 && BOOST_PP_ITERATION_FINISH_4 >= 8
+# define BOOST_PP_ITERATION_4 8
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 9 && BOOST_PP_ITERATION_FINISH_4 >= 9
+# define BOOST_PP_ITERATION_4 9
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 10 && BOOST_PP_ITERATION_FINISH_4 >= 10
+# define BOOST_PP_ITERATION_4 10
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 11 && BOOST_PP_ITERATION_FINISH_4 >= 11
+# define BOOST_PP_ITERATION_4 11
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 12 && BOOST_PP_ITERATION_FINISH_4 >= 12
+# define BOOST_PP_ITERATION_4 12
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 13 && BOOST_PP_ITERATION_FINISH_4 >= 13
+# define BOOST_PP_ITERATION_4 13
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 14 && BOOST_PP_ITERATION_FINISH_4 >= 14
+# define BOOST_PP_ITERATION_4 14
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 15 && BOOST_PP_ITERATION_FINISH_4 >= 15
+# define BOOST_PP_ITERATION_4 15
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 16 && BOOST_PP_ITERATION_FINISH_4 >= 16
+# define BOOST_PP_ITERATION_4 16
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 17 && BOOST_PP_ITERATION_FINISH_4 >= 17
+# define BOOST_PP_ITERATION_4 17
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 18 && BOOST_PP_ITERATION_FINISH_4 >= 18
+# define BOOST_PP_ITERATION_4 18
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 19 && BOOST_PP_ITERATION_FINISH_4 >= 19
+# define BOOST_PP_ITERATION_4 19
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 20 && BOOST_PP_ITERATION_FINISH_4 >= 20
+# define BOOST_PP_ITERATION_4 20
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 21 && BOOST_PP_ITERATION_FINISH_4 >= 21
+# define BOOST_PP_ITERATION_4 21
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 22 && BOOST_PP_ITERATION_FINISH_4 >= 22
+# define BOOST_PP_ITERATION_4 22
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 23 && BOOST_PP_ITERATION_FINISH_4 >= 23
+# define BOOST_PP_ITERATION_4 23
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 24 && BOOST_PP_ITERATION_FINISH_4 >= 24
+# define BOOST_PP_ITERATION_4 24
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 25 && BOOST_PP_ITERATION_FINISH_4 >= 25
+# define BOOST_PP_ITERATION_4 25
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 26 && BOOST_PP_ITERATION_FINISH_4 >= 26
+# define BOOST_PP_ITERATION_4 26
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 27 && BOOST_PP_ITERATION_FINISH_4 >= 27
+# define BOOST_PP_ITERATION_4 27
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 28 && BOOST_PP_ITERATION_FINISH_4 >= 28
+# define BOOST_PP_ITERATION_4 28
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 29 && BOOST_PP_ITERATION_FINISH_4 >= 29
+# define BOOST_PP_ITERATION_4 29
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 30 && BOOST_PP_ITERATION_FINISH_4 >= 30
+# define BOOST_PP_ITERATION_4 30
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 31 && BOOST_PP_ITERATION_FINISH_4 >= 31
+# define BOOST_PP_ITERATION_4 31
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 32 && BOOST_PP_ITERATION_FINISH_4 >= 32
+# define BOOST_PP_ITERATION_4 32
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 33 && BOOST_PP_ITERATION_FINISH_4 >= 33
+# define BOOST_PP_ITERATION_4 33
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 34 && BOOST_PP_ITERATION_FINISH_4 >= 34
+# define BOOST_PP_ITERATION_4 34
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 35 && BOOST_PP_ITERATION_FINISH_4 >= 35
+# define BOOST_PP_ITERATION_4 35
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 36 && BOOST_PP_ITERATION_FINISH_4 >= 36
+# define BOOST_PP_ITERATION_4 36
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 37 && BOOST_PP_ITERATION_FINISH_4 >= 37
+# define BOOST_PP_ITERATION_4 37
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 38 && BOOST_PP_ITERATION_FINISH_4 >= 38
+# define BOOST_PP_ITERATION_4 38
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 39 && BOOST_PP_ITERATION_FINISH_4 >= 39
+# define BOOST_PP_ITERATION_4 39
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 40 && BOOST_PP_ITERATION_FINISH_4 >= 40
+# define BOOST_PP_ITERATION_4 40
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 41 && BOOST_PP_ITERATION_FINISH_4 >= 41
+# define BOOST_PP_ITERATION_4 41
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 42 && BOOST_PP_ITERATION_FINISH_4 >= 42
+# define BOOST_PP_ITERATION_4 42
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 43 && BOOST_PP_ITERATION_FINISH_4 >= 43
+# define BOOST_PP_ITERATION_4 43
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 44 && BOOST_PP_ITERATION_FINISH_4 >= 44
+# define BOOST_PP_ITERATION_4 44
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 45 && BOOST_PP_ITERATION_FINISH_4 >= 45
+# define BOOST_PP_ITERATION_4 45
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 46 && BOOST_PP_ITERATION_FINISH_4 >= 46
+# define BOOST_PP_ITERATION_4 46
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 47 && BOOST_PP_ITERATION_FINISH_4 >= 47
+# define BOOST_PP_ITERATION_4 47
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 48 && BOOST_PP_ITERATION_FINISH_4 >= 48
+# define BOOST_PP_ITERATION_4 48
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 49 && BOOST_PP_ITERATION_FINISH_4 >= 49
+# define BOOST_PP_ITERATION_4 49
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 50 && BOOST_PP_ITERATION_FINISH_4 >= 50
+# define BOOST_PP_ITERATION_4 50
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 51 && BOOST_PP_ITERATION_FINISH_4 >= 51
+# define BOOST_PP_ITERATION_4 51
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 52 && BOOST_PP_ITERATION_FINISH_4 >= 52
+# define BOOST_PP_ITERATION_4 52
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 53 && BOOST_PP_ITERATION_FINISH_4 >= 53
+# define BOOST_PP_ITERATION_4 53
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 54 && BOOST_PP_ITERATION_FINISH_4 >= 54
+# define BOOST_PP_ITERATION_4 54
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 55 && BOOST_PP_ITERATION_FINISH_4 >= 55
+# define BOOST_PP_ITERATION_4 55
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 56 && BOOST_PP_ITERATION_FINISH_4 >= 56
+# define BOOST_PP_ITERATION_4 56
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 57 && BOOST_PP_ITERATION_FINISH_4 >= 57
+# define BOOST_PP_ITERATION_4 57
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 58 && BOOST_PP_ITERATION_FINISH_4 >= 58
+# define BOOST_PP_ITERATION_4 58
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 59 && BOOST_PP_ITERATION_FINISH_4 >= 59
+# define BOOST_PP_ITERATION_4 59
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 60 && BOOST_PP_ITERATION_FINISH_4 >= 60
+# define BOOST_PP_ITERATION_4 60
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 61 && BOOST_PP_ITERATION_FINISH_4 >= 61
+# define BOOST_PP_ITERATION_4 61
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 62 && BOOST_PP_ITERATION_FINISH_4 >= 62
+# define BOOST_PP_ITERATION_4 62
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 63 && BOOST_PP_ITERATION_FINISH_4 >= 63
+# define BOOST_PP_ITERATION_4 63
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 64 && BOOST_PP_ITERATION_FINISH_4 >= 64
+# define BOOST_PP_ITERATION_4 64
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 65 && BOOST_PP_ITERATION_FINISH_4 >= 65
+# define BOOST_PP_ITERATION_4 65
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 66 && BOOST_PP_ITERATION_FINISH_4 >= 66
+# define BOOST_PP_ITERATION_4 66
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 67 && BOOST_PP_ITERATION_FINISH_4 >= 67
+# define BOOST_PP_ITERATION_4 67
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 68 && BOOST_PP_ITERATION_FINISH_4 >= 68
+# define BOOST_PP_ITERATION_4 68
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 69 && BOOST_PP_ITERATION_FINISH_4 >= 69
+# define BOOST_PP_ITERATION_4 69
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 70 && BOOST_PP_ITERATION_FINISH_4 >= 70
+# define BOOST_PP_ITERATION_4 70
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 71 && BOOST_PP_ITERATION_FINISH_4 >= 71
+# define BOOST_PP_ITERATION_4 71
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 72 && BOOST_PP_ITERATION_FINISH_4 >= 72
+# define BOOST_PP_ITERATION_4 72
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 73 && BOOST_PP_ITERATION_FINISH_4 >= 73
+# define BOOST_PP_ITERATION_4 73
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 74 && BOOST_PP_ITERATION_FINISH_4 >= 74
+# define BOOST_PP_ITERATION_4 74
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 75 && BOOST_PP_ITERATION_FINISH_4 >= 75
+# define BOOST_PP_ITERATION_4 75
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 76 && BOOST_PP_ITERATION_FINISH_4 >= 76
+# define BOOST_PP_ITERATION_4 76
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 77 && BOOST_PP_ITERATION_FINISH_4 >= 77
+# define BOOST_PP_ITERATION_4 77
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 78 && BOOST_PP_ITERATION_FINISH_4 >= 78
+# define BOOST_PP_ITERATION_4 78
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 79 && BOOST_PP_ITERATION_FINISH_4 >= 79
+# define BOOST_PP_ITERATION_4 79
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 80 && BOOST_PP_ITERATION_FINISH_4 >= 80
+# define BOOST_PP_ITERATION_4 80
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 81 && BOOST_PP_ITERATION_FINISH_4 >= 81
+# define BOOST_PP_ITERATION_4 81
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 82 && BOOST_PP_ITERATION_FINISH_4 >= 82
+# define BOOST_PP_ITERATION_4 82
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 83 && BOOST_PP_ITERATION_FINISH_4 >= 83
+# define BOOST_PP_ITERATION_4 83
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 84 && BOOST_PP_ITERATION_FINISH_4 >= 84
+# define BOOST_PP_ITERATION_4 84
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 85 && BOOST_PP_ITERATION_FINISH_4 >= 85
+# define BOOST_PP_ITERATION_4 85
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 86 && BOOST_PP_ITERATION_FINISH_4 >= 86
+# define BOOST_PP_ITERATION_4 86
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 87 && BOOST_PP_ITERATION_FINISH_4 >= 87
+# define BOOST_PP_ITERATION_4 87
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 88 && BOOST_PP_ITERATION_FINISH_4 >= 88
+# define BOOST_PP_ITERATION_4 88
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 89 && BOOST_PP_ITERATION_FINISH_4 >= 89
+# define BOOST_PP_ITERATION_4 89
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 90 && BOOST_PP_ITERATION_FINISH_4 >= 90
+# define BOOST_PP_ITERATION_4 90
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 91 && BOOST_PP_ITERATION_FINISH_4 >= 91
+# define BOOST_PP_ITERATION_4 91
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 92 && BOOST_PP_ITERATION_FINISH_4 >= 92
+# define BOOST_PP_ITERATION_4 92
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 93 && BOOST_PP_ITERATION_FINISH_4 >= 93
+# define BOOST_PP_ITERATION_4 93
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 94 && BOOST_PP_ITERATION_FINISH_4 >= 94
+# define BOOST_PP_ITERATION_4 94
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 95 && BOOST_PP_ITERATION_FINISH_4 >= 95
+# define BOOST_PP_ITERATION_4 95
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 96 && BOOST_PP_ITERATION_FINISH_4 >= 96
+# define BOOST_PP_ITERATION_4 96
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 97 && BOOST_PP_ITERATION_FINISH_4 >= 97
+# define BOOST_PP_ITERATION_4 97
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 98 && BOOST_PP_ITERATION_FINISH_4 >= 98
+# define BOOST_PP_ITERATION_4 98
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 99 && BOOST_PP_ITERATION_FINISH_4 >= 99
+# define BOOST_PP_ITERATION_4 99
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 100 && BOOST_PP_ITERATION_FINISH_4 >= 100
+# define BOOST_PP_ITERATION_4 100
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 101 && BOOST_PP_ITERATION_FINISH_4 >= 101
+# define BOOST_PP_ITERATION_4 101
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 102 && BOOST_PP_ITERATION_FINISH_4 >= 102
+# define BOOST_PP_ITERATION_4 102
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 103 && BOOST_PP_ITERATION_FINISH_4 >= 103
+# define BOOST_PP_ITERATION_4 103
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 104 && BOOST_PP_ITERATION_FINISH_4 >= 104
+# define BOOST_PP_ITERATION_4 104
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 105 && BOOST_PP_ITERATION_FINISH_4 >= 105
+# define BOOST_PP_ITERATION_4 105
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 106 && BOOST_PP_ITERATION_FINISH_4 >= 106
+# define BOOST_PP_ITERATION_4 106
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 107 && BOOST_PP_ITERATION_FINISH_4 >= 107
+# define BOOST_PP_ITERATION_4 107
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 108 && BOOST_PP_ITERATION_FINISH_4 >= 108
+# define BOOST_PP_ITERATION_4 108
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 109 && BOOST_PP_ITERATION_FINISH_4 >= 109
+# define BOOST_PP_ITERATION_4 109
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 110 && BOOST_PP_ITERATION_FINISH_4 >= 110
+# define BOOST_PP_ITERATION_4 110
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 111 && BOOST_PP_ITERATION_FINISH_4 >= 111
+# define BOOST_PP_ITERATION_4 111
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 112 && BOOST_PP_ITERATION_FINISH_4 >= 112
+# define BOOST_PP_ITERATION_4 112
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 113 && BOOST_PP_ITERATION_FINISH_4 >= 113
+# define BOOST_PP_ITERATION_4 113
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 114 && BOOST_PP_ITERATION_FINISH_4 >= 114
+# define BOOST_PP_ITERATION_4 114
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 115 && BOOST_PP_ITERATION_FINISH_4 >= 115
+# define BOOST_PP_ITERATION_4 115
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 116 && BOOST_PP_ITERATION_FINISH_4 >= 116
+# define BOOST_PP_ITERATION_4 116
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 117 && BOOST_PP_ITERATION_FINISH_4 >= 117
+# define BOOST_PP_ITERATION_4 117
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 118 && BOOST_PP_ITERATION_FINISH_4 >= 118
+# define BOOST_PP_ITERATION_4 118
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 119 && BOOST_PP_ITERATION_FINISH_4 >= 119
+# define BOOST_PP_ITERATION_4 119
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 120 && BOOST_PP_ITERATION_FINISH_4 >= 120
+# define BOOST_PP_ITERATION_4 120
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 121 && BOOST_PP_ITERATION_FINISH_4 >= 121
+# define BOOST_PP_ITERATION_4 121
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 122 && BOOST_PP_ITERATION_FINISH_4 >= 122
+# define BOOST_PP_ITERATION_4 122
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 123 && BOOST_PP_ITERATION_FINISH_4 >= 123
+# define BOOST_PP_ITERATION_4 123
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 124 && BOOST_PP_ITERATION_FINISH_4 >= 124
+# define BOOST_PP_ITERATION_4 124
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 125 && BOOST_PP_ITERATION_FINISH_4 >= 125
+# define BOOST_PP_ITERATION_4 125
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 126 && BOOST_PP_ITERATION_FINISH_4 >= 126
+# define BOOST_PP_ITERATION_4 126
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 127 && BOOST_PP_ITERATION_FINISH_4 >= 127
+# define BOOST_PP_ITERATION_4 127
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 128 && BOOST_PP_ITERATION_FINISH_4 >= 128
+# define BOOST_PP_ITERATION_4 128
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 129 && BOOST_PP_ITERATION_FINISH_4 >= 129
+# define BOOST_PP_ITERATION_4 129
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 130 && BOOST_PP_ITERATION_FINISH_4 >= 130
+# define BOOST_PP_ITERATION_4 130
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 131 && BOOST_PP_ITERATION_FINISH_4 >= 131
+# define BOOST_PP_ITERATION_4 131
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 132 && BOOST_PP_ITERATION_FINISH_4 >= 132
+# define BOOST_PP_ITERATION_4 132
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 133 && BOOST_PP_ITERATION_FINISH_4 >= 133
+# define BOOST_PP_ITERATION_4 133
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 134 && BOOST_PP_ITERATION_FINISH_4 >= 134
+# define BOOST_PP_ITERATION_4 134
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 135 && BOOST_PP_ITERATION_FINISH_4 >= 135
+# define BOOST_PP_ITERATION_4 135
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 136 && BOOST_PP_ITERATION_FINISH_4 >= 136
+# define BOOST_PP_ITERATION_4 136
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 137 && BOOST_PP_ITERATION_FINISH_4 >= 137
+# define BOOST_PP_ITERATION_4 137
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 138 && BOOST_PP_ITERATION_FINISH_4 >= 138
+# define BOOST_PP_ITERATION_4 138
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 139 && BOOST_PP_ITERATION_FINISH_4 >= 139
+# define BOOST_PP_ITERATION_4 139
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 140 && BOOST_PP_ITERATION_FINISH_4 >= 140
+# define BOOST_PP_ITERATION_4 140
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 141 && BOOST_PP_ITERATION_FINISH_4 >= 141
+# define BOOST_PP_ITERATION_4 141
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 142 && BOOST_PP_ITERATION_FINISH_4 >= 142
+# define BOOST_PP_ITERATION_4 142
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 143 && BOOST_PP_ITERATION_FINISH_4 >= 143
+# define BOOST_PP_ITERATION_4 143
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 144 && BOOST_PP_ITERATION_FINISH_4 >= 144
+# define BOOST_PP_ITERATION_4 144
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 145 && BOOST_PP_ITERATION_FINISH_4 >= 145
+# define BOOST_PP_ITERATION_4 145
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 146 && BOOST_PP_ITERATION_FINISH_4 >= 146
+# define BOOST_PP_ITERATION_4 146
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 147 && BOOST_PP_ITERATION_FINISH_4 >= 147
+# define BOOST_PP_ITERATION_4 147
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 148 && BOOST_PP_ITERATION_FINISH_4 >= 148
+# define BOOST_PP_ITERATION_4 148
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 149 && BOOST_PP_ITERATION_FINISH_4 >= 149
+# define BOOST_PP_ITERATION_4 149
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 150 && BOOST_PP_ITERATION_FINISH_4 >= 150
+# define BOOST_PP_ITERATION_4 150
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 151 && BOOST_PP_ITERATION_FINISH_4 >= 151
+# define BOOST_PP_ITERATION_4 151
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 152 && BOOST_PP_ITERATION_FINISH_4 >= 152
+# define BOOST_PP_ITERATION_4 152
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 153 && BOOST_PP_ITERATION_FINISH_4 >= 153
+# define BOOST_PP_ITERATION_4 153
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 154 && BOOST_PP_ITERATION_FINISH_4 >= 154
+# define BOOST_PP_ITERATION_4 154
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 155 && BOOST_PP_ITERATION_FINISH_4 >= 155
+# define BOOST_PP_ITERATION_4 155
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 156 && BOOST_PP_ITERATION_FINISH_4 >= 156
+# define BOOST_PP_ITERATION_4 156
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 157 && BOOST_PP_ITERATION_FINISH_4 >= 157
+# define BOOST_PP_ITERATION_4 157
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 158 && BOOST_PP_ITERATION_FINISH_4 >= 158
+# define BOOST_PP_ITERATION_4 158
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 159 && BOOST_PP_ITERATION_FINISH_4 >= 159
+# define BOOST_PP_ITERATION_4 159
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 160 && BOOST_PP_ITERATION_FINISH_4 >= 160
+# define BOOST_PP_ITERATION_4 160
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 161 && BOOST_PP_ITERATION_FINISH_4 >= 161
+# define BOOST_PP_ITERATION_4 161
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 162 && BOOST_PP_ITERATION_FINISH_4 >= 162
+# define BOOST_PP_ITERATION_4 162
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 163 && BOOST_PP_ITERATION_FINISH_4 >= 163
+# define BOOST_PP_ITERATION_4 163
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 164 && BOOST_PP_ITERATION_FINISH_4 >= 164
+# define BOOST_PP_ITERATION_4 164
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 165 && BOOST_PP_ITERATION_FINISH_4 >= 165
+# define BOOST_PP_ITERATION_4 165
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 166 && BOOST_PP_ITERATION_FINISH_4 >= 166
+# define BOOST_PP_ITERATION_4 166
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 167 && BOOST_PP_ITERATION_FINISH_4 >= 167
+# define BOOST_PP_ITERATION_4 167
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 168 && BOOST_PP_ITERATION_FINISH_4 >= 168
+# define BOOST_PP_ITERATION_4 168
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 169 && BOOST_PP_ITERATION_FINISH_4 >= 169
+# define BOOST_PP_ITERATION_4 169
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 170 && BOOST_PP_ITERATION_FINISH_4 >= 170
+# define BOOST_PP_ITERATION_4 170
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 171 && BOOST_PP_ITERATION_FINISH_4 >= 171
+# define BOOST_PP_ITERATION_4 171
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 172 && BOOST_PP_ITERATION_FINISH_4 >= 172
+# define BOOST_PP_ITERATION_4 172
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 173 && BOOST_PP_ITERATION_FINISH_4 >= 173
+# define BOOST_PP_ITERATION_4 173
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 174 && BOOST_PP_ITERATION_FINISH_4 >= 174
+# define BOOST_PP_ITERATION_4 174
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 175 && BOOST_PP_ITERATION_FINISH_4 >= 175
+# define BOOST_PP_ITERATION_4 175
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 176 && BOOST_PP_ITERATION_FINISH_4 >= 176
+# define BOOST_PP_ITERATION_4 176
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 177 && BOOST_PP_ITERATION_FINISH_4 >= 177
+# define BOOST_PP_ITERATION_4 177
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 178 && BOOST_PP_ITERATION_FINISH_4 >= 178
+# define BOOST_PP_ITERATION_4 178
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 179 && BOOST_PP_ITERATION_FINISH_4 >= 179
+# define BOOST_PP_ITERATION_4 179
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 180 && BOOST_PP_ITERATION_FINISH_4 >= 180
+# define BOOST_PP_ITERATION_4 180
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 181 && BOOST_PP_ITERATION_FINISH_4 >= 181
+# define BOOST_PP_ITERATION_4 181
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 182 && BOOST_PP_ITERATION_FINISH_4 >= 182
+# define BOOST_PP_ITERATION_4 182
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 183 && BOOST_PP_ITERATION_FINISH_4 >= 183
+# define BOOST_PP_ITERATION_4 183
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 184 && BOOST_PP_ITERATION_FINISH_4 >= 184
+# define BOOST_PP_ITERATION_4 184
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 185 && BOOST_PP_ITERATION_FINISH_4 >= 185
+# define BOOST_PP_ITERATION_4 185
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 186 && BOOST_PP_ITERATION_FINISH_4 >= 186
+# define BOOST_PP_ITERATION_4 186
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 187 && BOOST_PP_ITERATION_FINISH_4 >= 187
+# define BOOST_PP_ITERATION_4 187
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 188 && BOOST_PP_ITERATION_FINISH_4 >= 188
+# define BOOST_PP_ITERATION_4 188
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 189 && BOOST_PP_ITERATION_FINISH_4 >= 189
+# define BOOST_PP_ITERATION_4 189
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 190 && BOOST_PP_ITERATION_FINISH_4 >= 190
+# define BOOST_PP_ITERATION_4 190
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 191 && BOOST_PP_ITERATION_FINISH_4 >= 191
+# define BOOST_PP_ITERATION_4 191
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 192 && BOOST_PP_ITERATION_FINISH_4 >= 192
+# define BOOST_PP_ITERATION_4 192
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 193 && BOOST_PP_ITERATION_FINISH_4 >= 193
+# define BOOST_PP_ITERATION_4 193
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 194 && BOOST_PP_ITERATION_FINISH_4 >= 194
+# define BOOST_PP_ITERATION_4 194
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 195 && BOOST_PP_ITERATION_FINISH_4 >= 195
+# define BOOST_PP_ITERATION_4 195
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 196 && BOOST_PP_ITERATION_FINISH_4 >= 196
+# define BOOST_PP_ITERATION_4 196
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 197 && BOOST_PP_ITERATION_FINISH_4 >= 197
+# define BOOST_PP_ITERATION_4 197
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 198 && BOOST_PP_ITERATION_FINISH_4 >= 198
+# define BOOST_PP_ITERATION_4 198
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 199 && BOOST_PP_ITERATION_FINISH_4 >= 199
+# define BOOST_PP_ITERATION_4 199
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 200 && BOOST_PP_ITERATION_FINISH_4 >= 200
+# define BOOST_PP_ITERATION_4 200
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 201 && BOOST_PP_ITERATION_FINISH_4 >= 201
+# define BOOST_PP_ITERATION_4 201
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 202 && BOOST_PP_ITERATION_FINISH_4 >= 202
+# define BOOST_PP_ITERATION_4 202
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 203 && BOOST_PP_ITERATION_FINISH_4 >= 203
+# define BOOST_PP_ITERATION_4 203
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 204 && BOOST_PP_ITERATION_FINISH_4 >= 204
+# define BOOST_PP_ITERATION_4 204
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 205 && BOOST_PP_ITERATION_FINISH_4 >= 205
+# define BOOST_PP_ITERATION_4 205
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 206 && BOOST_PP_ITERATION_FINISH_4 >= 206
+# define BOOST_PP_ITERATION_4 206
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 207 && BOOST_PP_ITERATION_FINISH_4 >= 207
+# define BOOST_PP_ITERATION_4 207
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 208 && BOOST_PP_ITERATION_FINISH_4 >= 208
+# define BOOST_PP_ITERATION_4 208
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 209 && BOOST_PP_ITERATION_FINISH_4 >= 209
+# define BOOST_PP_ITERATION_4 209
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 210 && BOOST_PP_ITERATION_FINISH_4 >= 210
+# define BOOST_PP_ITERATION_4 210
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 211 && BOOST_PP_ITERATION_FINISH_4 >= 211
+# define BOOST_PP_ITERATION_4 211
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 212 && BOOST_PP_ITERATION_FINISH_4 >= 212
+# define BOOST_PP_ITERATION_4 212
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 213 && BOOST_PP_ITERATION_FINISH_4 >= 213
+# define BOOST_PP_ITERATION_4 213
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 214 && BOOST_PP_ITERATION_FINISH_4 >= 214
+# define BOOST_PP_ITERATION_4 214
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 215 && BOOST_PP_ITERATION_FINISH_4 >= 215
+# define BOOST_PP_ITERATION_4 215
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 216 && BOOST_PP_ITERATION_FINISH_4 >= 216
+# define BOOST_PP_ITERATION_4 216
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 217 && BOOST_PP_ITERATION_FINISH_4 >= 217
+# define BOOST_PP_ITERATION_4 217
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 218 && BOOST_PP_ITERATION_FINISH_4 >= 218
+# define BOOST_PP_ITERATION_4 218
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 219 && BOOST_PP_ITERATION_FINISH_4 >= 219
+# define BOOST_PP_ITERATION_4 219
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 220 && BOOST_PP_ITERATION_FINISH_4 >= 220
+# define BOOST_PP_ITERATION_4 220
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 221 && BOOST_PP_ITERATION_FINISH_4 >= 221
+# define BOOST_PP_ITERATION_4 221
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 222 && BOOST_PP_ITERATION_FINISH_4 >= 222
+# define BOOST_PP_ITERATION_4 222
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 223 && BOOST_PP_ITERATION_FINISH_4 >= 223
+# define BOOST_PP_ITERATION_4 223
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 224 && BOOST_PP_ITERATION_FINISH_4 >= 224
+# define BOOST_PP_ITERATION_4 224
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 225 && BOOST_PP_ITERATION_FINISH_4 >= 225
+# define BOOST_PP_ITERATION_4 225
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 226 && BOOST_PP_ITERATION_FINISH_4 >= 226
+# define BOOST_PP_ITERATION_4 226
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 227 && BOOST_PP_ITERATION_FINISH_4 >= 227
+# define BOOST_PP_ITERATION_4 227
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 228 && BOOST_PP_ITERATION_FINISH_4 >= 228
+# define BOOST_PP_ITERATION_4 228
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 229 && BOOST_PP_ITERATION_FINISH_4 >= 229
+# define BOOST_PP_ITERATION_4 229
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 230 && BOOST_PP_ITERATION_FINISH_4 >= 230
+# define BOOST_PP_ITERATION_4 230
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 231 && BOOST_PP_ITERATION_FINISH_4 >= 231
+# define BOOST_PP_ITERATION_4 231
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 232 && BOOST_PP_ITERATION_FINISH_4 >= 232
+# define BOOST_PP_ITERATION_4 232
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 233 && BOOST_PP_ITERATION_FINISH_4 >= 233
+# define BOOST_PP_ITERATION_4 233
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 234 && BOOST_PP_ITERATION_FINISH_4 >= 234
+# define BOOST_PP_ITERATION_4 234
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 235 && BOOST_PP_ITERATION_FINISH_4 >= 235
+# define BOOST_PP_ITERATION_4 235
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 236 && BOOST_PP_ITERATION_FINISH_4 >= 236
+# define BOOST_PP_ITERATION_4 236
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 237 && BOOST_PP_ITERATION_FINISH_4 >= 237
+# define BOOST_PP_ITERATION_4 237
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 238 && BOOST_PP_ITERATION_FINISH_4 >= 238
+# define BOOST_PP_ITERATION_4 238
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 239 && BOOST_PP_ITERATION_FINISH_4 >= 239
+# define BOOST_PP_ITERATION_4 239
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 240 && BOOST_PP_ITERATION_FINISH_4 >= 240
+# define BOOST_PP_ITERATION_4 240
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 241 && BOOST_PP_ITERATION_FINISH_4 >= 241
+# define BOOST_PP_ITERATION_4 241
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 242 && BOOST_PP_ITERATION_FINISH_4 >= 242
+# define BOOST_PP_ITERATION_4 242
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 243 && BOOST_PP_ITERATION_FINISH_4 >= 243
+# define BOOST_PP_ITERATION_4 243
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 244 && BOOST_PP_ITERATION_FINISH_4 >= 244
+# define BOOST_PP_ITERATION_4 244
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 245 && BOOST_PP_ITERATION_FINISH_4 >= 245
+# define BOOST_PP_ITERATION_4 245
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 246 && BOOST_PP_ITERATION_FINISH_4 >= 246
+# define BOOST_PP_ITERATION_4 246
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 247 && BOOST_PP_ITERATION_FINISH_4 >= 247
+# define BOOST_PP_ITERATION_4 247
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 248 && BOOST_PP_ITERATION_FINISH_4 >= 248
+# define BOOST_PP_ITERATION_4 248
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 249 && BOOST_PP_ITERATION_FINISH_4 >= 249
+# define BOOST_PP_ITERATION_4 249
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 250 && BOOST_PP_ITERATION_FINISH_4 >= 250
+# define BOOST_PP_ITERATION_4 250
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 251 && BOOST_PP_ITERATION_FINISH_4 >= 251
+# define BOOST_PP_ITERATION_4 251
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 252 && BOOST_PP_ITERATION_FINISH_4 >= 252
+# define BOOST_PP_ITERATION_4 252
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 253 && BOOST_PP_ITERATION_FINISH_4 >= 253
+# define BOOST_PP_ITERATION_4 253
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 254 && BOOST_PP_ITERATION_FINISH_4 >= 254
+# define BOOST_PP_ITERATION_4 254
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 255 && BOOST_PP_ITERATION_FINISH_4 >= 255
+# define BOOST_PP_ITERATION_4 255
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_START_4 <= 256 && BOOST_PP_ITERATION_FINISH_4 >= 256
+# define BOOST_PP_ITERATION_4 256
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# endif
+#
+# undef BOOST_PP_ITERATION_DEPTH
+# define BOOST_PP_ITERATION_DEPTH() 3
+#
+# undef BOOST_PP_ITERATION_START_4
+# undef BOOST_PP_ITERATION_FINISH_4
+# undef BOOST_PP_FILENAME_4
+#
+# undef BOOST_PP_ITERATION_FLAGS_4
+# undef BOOST_PP_ITERATION_PARAMS_4
diff --git a/boost/boost/preprocessor/iteration/detail/iter/forward5.hpp b/boost/boost/preprocessor/iteration/detail/iter/forward5.hpp
new file mode 100644
index 00000000000..a16e207960a
--- /dev/null
+++ b/boost/boost/preprocessor/iteration/detail/iter/forward5.hpp
@@ -0,0 +1,1338 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# if defined(BOOST_PP_ITERATION_LIMITS)
+# if !defined(BOOST_PP_FILENAME_5)
+# error BOOST_PP_ERROR: depth #5 filename is not defined
+# endif
+# define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_ITERATION_LIMITS)
+# include <boost/preprocessor/iteration/detail/bounds/lower5.hpp>
+# define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 1, BOOST_PP_ITERATION_LIMITS)
+# include <boost/preprocessor/iteration/detail/bounds/upper5.hpp>
+# define BOOST_PP_ITERATION_FLAGS_5 0
+# undef BOOST_PP_ITERATION_LIMITS
+# elif defined(BOOST_PP_ITERATION_PARAMS_5)
+# define BOOST_PP_VALUE BOOST_PP_ARRAY_ELEM(0, BOOST_PP_ITERATION_PARAMS_5)
+# include <boost/preprocessor/iteration/detail/bounds/lower5.hpp>
+# define BOOST_PP_VALUE BOOST_PP_ARRAY_ELEM(1, BOOST_PP_ITERATION_PARAMS_5)
+# include <boost/preprocessor/iteration/detail/bounds/upper5.hpp>
+# define BOOST_PP_FILENAME_5 BOOST_PP_ARRAY_ELEM(2, BOOST_PP_ITERATION_PARAMS_5)
+# if BOOST_PP_ARRAY_SIZE(BOOST_PP_ITERATION_PARAMS_5) >= 4
+# define BOOST_PP_ITERATION_FLAGS_5 BOOST_PP_ARRAY_ELEM(3, BOOST_PP_ITERATION_PARAMS_5)
+# else
+# define BOOST_PP_ITERATION_FLAGS_5 0
+# endif
+# else
+# error BOOST_PP_ERROR: depth #5 iteration boundaries or filename not defined
+# endif
+#
+# undef BOOST_PP_ITERATION_DEPTH
+# define BOOST_PP_ITERATION_DEPTH() 5
+#
+# if (BOOST_PP_ITERATION_START_5) > (BOOST_PP_ITERATION_FINISH_5)
+# include <boost/preprocessor/iteration/detail/iter/reverse5.hpp>
+# else
+# if BOOST_PP_ITERATION_START_5 <= 0 && BOOST_PP_ITERATION_FINISH_5 >= 0
+# define BOOST_PP_ITERATION_5 0
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 1 && BOOST_PP_ITERATION_FINISH_5 >= 1
+# define BOOST_PP_ITERATION_5 1
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 2 && BOOST_PP_ITERATION_FINISH_5 >= 2
+# define BOOST_PP_ITERATION_5 2
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 3 && BOOST_PP_ITERATION_FINISH_5 >= 3
+# define BOOST_PP_ITERATION_5 3
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 4 && BOOST_PP_ITERATION_FINISH_5 >= 4
+# define BOOST_PP_ITERATION_5 4
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 5 && BOOST_PP_ITERATION_FINISH_5 >= 5
+# define BOOST_PP_ITERATION_5 5
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 6 && BOOST_PP_ITERATION_FINISH_5 >= 6
+# define BOOST_PP_ITERATION_5 6
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 7 && BOOST_PP_ITERATION_FINISH_5 >= 7
+# define BOOST_PP_ITERATION_5 7
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 8 && BOOST_PP_ITERATION_FINISH_5 >= 8
+# define BOOST_PP_ITERATION_5 8
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 9 && BOOST_PP_ITERATION_FINISH_5 >= 9
+# define BOOST_PP_ITERATION_5 9
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 10 && BOOST_PP_ITERATION_FINISH_5 >= 10
+# define BOOST_PP_ITERATION_5 10
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 11 && BOOST_PP_ITERATION_FINISH_5 >= 11
+# define BOOST_PP_ITERATION_5 11
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 12 && BOOST_PP_ITERATION_FINISH_5 >= 12
+# define BOOST_PP_ITERATION_5 12
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 13 && BOOST_PP_ITERATION_FINISH_5 >= 13
+# define BOOST_PP_ITERATION_5 13
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 14 && BOOST_PP_ITERATION_FINISH_5 >= 14
+# define BOOST_PP_ITERATION_5 14
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 15 && BOOST_PP_ITERATION_FINISH_5 >= 15
+# define BOOST_PP_ITERATION_5 15
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 16 && BOOST_PP_ITERATION_FINISH_5 >= 16
+# define BOOST_PP_ITERATION_5 16
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 17 && BOOST_PP_ITERATION_FINISH_5 >= 17
+# define BOOST_PP_ITERATION_5 17
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 18 && BOOST_PP_ITERATION_FINISH_5 >= 18
+# define BOOST_PP_ITERATION_5 18
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 19 && BOOST_PP_ITERATION_FINISH_5 >= 19
+# define BOOST_PP_ITERATION_5 19
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 20 && BOOST_PP_ITERATION_FINISH_5 >= 20
+# define BOOST_PP_ITERATION_5 20
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 21 && BOOST_PP_ITERATION_FINISH_5 >= 21
+# define BOOST_PP_ITERATION_5 21
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 22 && BOOST_PP_ITERATION_FINISH_5 >= 22
+# define BOOST_PP_ITERATION_5 22
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 23 && BOOST_PP_ITERATION_FINISH_5 >= 23
+# define BOOST_PP_ITERATION_5 23
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 24 && BOOST_PP_ITERATION_FINISH_5 >= 24
+# define BOOST_PP_ITERATION_5 24
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 25 && BOOST_PP_ITERATION_FINISH_5 >= 25
+# define BOOST_PP_ITERATION_5 25
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 26 && BOOST_PP_ITERATION_FINISH_5 >= 26
+# define BOOST_PP_ITERATION_5 26
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 27 && BOOST_PP_ITERATION_FINISH_5 >= 27
+# define BOOST_PP_ITERATION_5 27
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 28 && BOOST_PP_ITERATION_FINISH_5 >= 28
+# define BOOST_PP_ITERATION_5 28
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 29 && BOOST_PP_ITERATION_FINISH_5 >= 29
+# define BOOST_PP_ITERATION_5 29
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 30 && BOOST_PP_ITERATION_FINISH_5 >= 30
+# define BOOST_PP_ITERATION_5 30
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 31 && BOOST_PP_ITERATION_FINISH_5 >= 31
+# define BOOST_PP_ITERATION_5 31
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 32 && BOOST_PP_ITERATION_FINISH_5 >= 32
+# define BOOST_PP_ITERATION_5 32
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 33 && BOOST_PP_ITERATION_FINISH_5 >= 33
+# define BOOST_PP_ITERATION_5 33
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 34 && BOOST_PP_ITERATION_FINISH_5 >= 34
+# define BOOST_PP_ITERATION_5 34
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 35 && BOOST_PP_ITERATION_FINISH_5 >= 35
+# define BOOST_PP_ITERATION_5 35
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 36 && BOOST_PP_ITERATION_FINISH_5 >= 36
+# define BOOST_PP_ITERATION_5 36
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 37 && BOOST_PP_ITERATION_FINISH_5 >= 37
+# define BOOST_PP_ITERATION_5 37
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 38 && BOOST_PP_ITERATION_FINISH_5 >= 38
+# define BOOST_PP_ITERATION_5 38
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 39 && BOOST_PP_ITERATION_FINISH_5 >= 39
+# define BOOST_PP_ITERATION_5 39
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 40 && BOOST_PP_ITERATION_FINISH_5 >= 40
+# define BOOST_PP_ITERATION_5 40
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 41 && BOOST_PP_ITERATION_FINISH_5 >= 41
+# define BOOST_PP_ITERATION_5 41
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 42 && BOOST_PP_ITERATION_FINISH_5 >= 42
+# define BOOST_PP_ITERATION_5 42
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 43 && BOOST_PP_ITERATION_FINISH_5 >= 43
+# define BOOST_PP_ITERATION_5 43
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 44 && BOOST_PP_ITERATION_FINISH_5 >= 44
+# define BOOST_PP_ITERATION_5 44
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 45 && BOOST_PP_ITERATION_FINISH_5 >= 45
+# define BOOST_PP_ITERATION_5 45
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 46 && BOOST_PP_ITERATION_FINISH_5 >= 46
+# define BOOST_PP_ITERATION_5 46
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 47 && BOOST_PP_ITERATION_FINISH_5 >= 47
+# define BOOST_PP_ITERATION_5 47
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 48 && BOOST_PP_ITERATION_FINISH_5 >= 48
+# define BOOST_PP_ITERATION_5 48
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 49 && BOOST_PP_ITERATION_FINISH_5 >= 49
+# define BOOST_PP_ITERATION_5 49
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 50 && BOOST_PP_ITERATION_FINISH_5 >= 50
+# define BOOST_PP_ITERATION_5 50
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 51 && BOOST_PP_ITERATION_FINISH_5 >= 51
+# define BOOST_PP_ITERATION_5 51
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 52 && BOOST_PP_ITERATION_FINISH_5 >= 52
+# define BOOST_PP_ITERATION_5 52
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 53 && BOOST_PP_ITERATION_FINISH_5 >= 53
+# define BOOST_PP_ITERATION_5 53
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 54 && BOOST_PP_ITERATION_FINISH_5 >= 54
+# define BOOST_PP_ITERATION_5 54
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 55 && BOOST_PP_ITERATION_FINISH_5 >= 55
+# define BOOST_PP_ITERATION_5 55
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 56 && BOOST_PP_ITERATION_FINISH_5 >= 56
+# define BOOST_PP_ITERATION_5 56
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 57 && BOOST_PP_ITERATION_FINISH_5 >= 57
+# define BOOST_PP_ITERATION_5 57
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 58 && BOOST_PP_ITERATION_FINISH_5 >= 58
+# define BOOST_PP_ITERATION_5 58
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 59 && BOOST_PP_ITERATION_FINISH_5 >= 59
+# define BOOST_PP_ITERATION_5 59
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 60 && BOOST_PP_ITERATION_FINISH_5 >= 60
+# define BOOST_PP_ITERATION_5 60
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 61 && BOOST_PP_ITERATION_FINISH_5 >= 61
+# define BOOST_PP_ITERATION_5 61
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 62 && BOOST_PP_ITERATION_FINISH_5 >= 62
+# define BOOST_PP_ITERATION_5 62
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 63 && BOOST_PP_ITERATION_FINISH_5 >= 63
+# define BOOST_PP_ITERATION_5 63
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 64 && BOOST_PP_ITERATION_FINISH_5 >= 64
+# define BOOST_PP_ITERATION_5 64
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 65 && BOOST_PP_ITERATION_FINISH_5 >= 65
+# define BOOST_PP_ITERATION_5 65
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 66 && BOOST_PP_ITERATION_FINISH_5 >= 66
+# define BOOST_PP_ITERATION_5 66
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 67 && BOOST_PP_ITERATION_FINISH_5 >= 67
+# define BOOST_PP_ITERATION_5 67
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 68 && BOOST_PP_ITERATION_FINISH_5 >= 68
+# define BOOST_PP_ITERATION_5 68
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 69 && BOOST_PP_ITERATION_FINISH_5 >= 69
+# define BOOST_PP_ITERATION_5 69
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 70 && BOOST_PP_ITERATION_FINISH_5 >= 70
+# define BOOST_PP_ITERATION_5 70
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 71 && BOOST_PP_ITERATION_FINISH_5 >= 71
+# define BOOST_PP_ITERATION_5 71
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 72 && BOOST_PP_ITERATION_FINISH_5 >= 72
+# define BOOST_PP_ITERATION_5 72
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 73 && BOOST_PP_ITERATION_FINISH_5 >= 73
+# define BOOST_PP_ITERATION_5 73
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 74 && BOOST_PP_ITERATION_FINISH_5 >= 74
+# define BOOST_PP_ITERATION_5 74
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 75 && BOOST_PP_ITERATION_FINISH_5 >= 75
+# define BOOST_PP_ITERATION_5 75
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 76 && BOOST_PP_ITERATION_FINISH_5 >= 76
+# define BOOST_PP_ITERATION_5 76
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 77 && BOOST_PP_ITERATION_FINISH_5 >= 77
+# define BOOST_PP_ITERATION_5 77
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 78 && BOOST_PP_ITERATION_FINISH_5 >= 78
+# define BOOST_PP_ITERATION_5 78
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 79 && BOOST_PP_ITERATION_FINISH_5 >= 79
+# define BOOST_PP_ITERATION_5 79
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 80 && BOOST_PP_ITERATION_FINISH_5 >= 80
+# define BOOST_PP_ITERATION_5 80
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 81 && BOOST_PP_ITERATION_FINISH_5 >= 81
+# define BOOST_PP_ITERATION_5 81
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 82 && BOOST_PP_ITERATION_FINISH_5 >= 82
+# define BOOST_PP_ITERATION_5 82
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 83 && BOOST_PP_ITERATION_FINISH_5 >= 83
+# define BOOST_PP_ITERATION_5 83
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 84 && BOOST_PP_ITERATION_FINISH_5 >= 84
+# define BOOST_PP_ITERATION_5 84
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 85 && BOOST_PP_ITERATION_FINISH_5 >= 85
+# define BOOST_PP_ITERATION_5 85
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 86 && BOOST_PP_ITERATION_FINISH_5 >= 86
+# define BOOST_PP_ITERATION_5 86
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 87 && BOOST_PP_ITERATION_FINISH_5 >= 87
+# define BOOST_PP_ITERATION_5 87
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 88 && BOOST_PP_ITERATION_FINISH_5 >= 88
+# define BOOST_PP_ITERATION_5 88
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 89 && BOOST_PP_ITERATION_FINISH_5 >= 89
+# define BOOST_PP_ITERATION_5 89
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 90 && BOOST_PP_ITERATION_FINISH_5 >= 90
+# define BOOST_PP_ITERATION_5 90
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 91 && BOOST_PP_ITERATION_FINISH_5 >= 91
+# define BOOST_PP_ITERATION_5 91
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 92 && BOOST_PP_ITERATION_FINISH_5 >= 92
+# define BOOST_PP_ITERATION_5 92
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 93 && BOOST_PP_ITERATION_FINISH_5 >= 93
+# define BOOST_PP_ITERATION_5 93
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 94 && BOOST_PP_ITERATION_FINISH_5 >= 94
+# define BOOST_PP_ITERATION_5 94
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 95 && BOOST_PP_ITERATION_FINISH_5 >= 95
+# define BOOST_PP_ITERATION_5 95
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 96 && BOOST_PP_ITERATION_FINISH_5 >= 96
+# define BOOST_PP_ITERATION_5 96
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 97 && BOOST_PP_ITERATION_FINISH_5 >= 97
+# define BOOST_PP_ITERATION_5 97
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 98 && BOOST_PP_ITERATION_FINISH_5 >= 98
+# define BOOST_PP_ITERATION_5 98
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 99 && BOOST_PP_ITERATION_FINISH_5 >= 99
+# define BOOST_PP_ITERATION_5 99
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 100 && BOOST_PP_ITERATION_FINISH_5 >= 100
+# define BOOST_PP_ITERATION_5 100
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 101 && BOOST_PP_ITERATION_FINISH_5 >= 101
+# define BOOST_PP_ITERATION_5 101
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 102 && BOOST_PP_ITERATION_FINISH_5 >= 102
+# define BOOST_PP_ITERATION_5 102
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 103 && BOOST_PP_ITERATION_FINISH_5 >= 103
+# define BOOST_PP_ITERATION_5 103
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 104 && BOOST_PP_ITERATION_FINISH_5 >= 104
+# define BOOST_PP_ITERATION_5 104
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 105 && BOOST_PP_ITERATION_FINISH_5 >= 105
+# define BOOST_PP_ITERATION_5 105
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 106 && BOOST_PP_ITERATION_FINISH_5 >= 106
+# define BOOST_PP_ITERATION_5 106
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 107 && BOOST_PP_ITERATION_FINISH_5 >= 107
+# define BOOST_PP_ITERATION_5 107
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 108 && BOOST_PP_ITERATION_FINISH_5 >= 108
+# define BOOST_PP_ITERATION_5 108
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 109 && BOOST_PP_ITERATION_FINISH_5 >= 109
+# define BOOST_PP_ITERATION_5 109
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 110 && BOOST_PP_ITERATION_FINISH_5 >= 110
+# define BOOST_PP_ITERATION_5 110
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 111 && BOOST_PP_ITERATION_FINISH_5 >= 111
+# define BOOST_PP_ITERATION_5 111
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 112 && BOOST_PP_ITERATION_FINISH_5 >= 112
+# define BOOST_PP_ITERATION_5 112
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 113 && BOOST_PP_ITERATION_FINISH_5 >= 113
+# define BOOST_PP_ITERATION_5 113
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 114 && BOOST_PP_ITERATION_FINISH_5 >= 114
+# define BOOST_PP_ITERATION_5 114
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 115 && BOOST_PP_ITERATION_FINISH_5 >= 115
+# define BOOST_PP_ITERATION_5 115
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 116 && BOOST_PP_ITERATION_FINISH_5 >= 116
+# define BOOST_PP_ITERATION_5 116
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 117 && BOOST_PP_ITERATION_FINISH_5 >= 117
+# define BOOST_PP_ITERATION_5 117
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 118 && BOOST_PP_ITERATION_FINISH_5 >= 118
+# define BOOST_PP_ITERATION_5 118
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 119 && BOOST_PP_ITERATION_FINISH_5 >= 119
+# define BOOST_PP_ITERATION_5 119
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 120 && BOOST_PP_ITERATION_FINISH_5 >= 120
+# define BOOST_PP_ITERATION_5 120
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 121 && BOOST_PP_ITERATION_FINISH_5 >= 121
+# define BOOST_PP_ITERATION_5 121
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 122 && BOOST_PP_ITERATION_FINISH_5 >= 122
+# define BOOST_PP_ITERATION_5 122
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 123 && BOOST_PP_ITERATION_FINISH_5 >= 123
+# define BOOST_PP_ITERATION_5 123
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 124 && BOOST_PP_ITERATION_FINISH_5 >= 124
+# define BOOST_PP_ITERATION_5 124
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 125 && BOOST_PP_ITERATION_FINISH_5 >= 125
+# define BOOST_PP_ITERATION_5 125
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 126 && BOOST_PP_ITERATION_FINISH_5 >= 126
+# define BOOST_PP_ITERATION_5 126
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 127 && BOOST_PP_ITERATION_FINISH_5 >= 127
+# define BOOST_PP_ITERATION_5 127
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 128 && BOOST_PP_ITERATION_FINISH_5 >= 128
+# define BOOST_PP_ITERATION_5 128
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 129 && BOOST_PP_ITERATION_FINISH_5 >= 129
+# define BOOST_PP_ITERATION_5 129
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 130 && BOOST_PP_ITERATION_FINISH_5 >= 130
+# define BOOST_PP_ITERATION_5 130
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 131 && BOOST_PP_ITERATION_FINISH_5 >= 131
+# define BOOST_PP_ITERATION_5 131
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 132 && BOOST_PP_ITERATION_FINISH_5 >= 132
+# define BOOST_PP_ITERATION_5 132
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 133 && BOOST_PP_ITERATION_FINISH_5 >= 133
+# define BOOST_PP_ITERATION_5 133
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 134 && BOOST_PP_ITERATION_FINISH_5 >= 134
+# define BOOST_PP_ITERATION_5 134
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 135 && BOOST_PP_ITERATION_FINISH_5 >= 135
+# define BOOST_PP_ITERATION_5 135
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 136 && BOOST_PP_ITERATION_FINISH_5 >= 136
+# define BOOST_PP_ITERATION_5 136
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 137 && BOOST_PP_ITERATION_FINISH_5 >= 137
+# define BOOST_PP_ITERATION_5 137
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 138 && BOOST_PP_ITERATION_FINISH_5 >= 138
+# define BOOST_PP_ITERATION_5 138
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 139 && BOOST_PP_ITERATION_FINISH_5 >= 139
+# define BOOST_PP_ITERATION_5 139
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 140 && BOOST_PP_ITERATION_FINISH_5 >= 140
+# define BOOST_PP_ITERATION_5 140
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 141 && BOOST_PP_ITERATION_FINISH_5 >= 141
+# define BOOST_PP_ITERATION_5 141
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 142 && BOOST_PP_ITERATION_FINISH_5 >= 142
+# define BOOST_PP_ITERATION_5 142
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 143 && BOOST_PP_ITERATION_FINISH_5 >= 143
+# define BOOST_PP_ITERATION_5 143
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 144 && BOOST_PP_ITERATION_FINISH_5 >= 144
+# define BOOST_PP_ITERATION_5 144
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 145 && BOOST_PP_ITERATION_FINISH_5 >= 145
+# define BOOST_PP_ITERATION_5 145
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 146 && BOOST_PP_ITERATION_FINISH_5 >= 146
+# define BOOST_PP_ITERATION_5 146
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 147 && BOOST_PP_ITERATION_FINISH_5 >= 147
+# define BOOST_PP_ITERATION_5 147
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 148 && BOOST_PP_ITERATION_FINISH_5 >= 148
+# define BOOST_PP_ITERATION_5 148
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 149 && BOOST_PP_ITERATION_FINISH_5 >= 149
+# define BOOST_PP_ITERATION_5 149
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 150 && BOOST_PP_ITERATION_FINISH_5 >= 150
+# define BOOST_PP_ITERATION_5 150
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 151 && BOOST_PP_ITERATION_FINISH_5 >= 151
+# define BOOST_PP_ITERATION_5 151
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 152 && BOOST_PP_ITERATION_FINISH_5 >= 152
+# define BOOST_PP_ITERATION_5 152
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 153 && BOOST_PP_ITERATION_FINISH_5 >= 153
+# define BOOST_PP_ITERATION_5 153
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 154 && BOOST_PP_ITERATION_FINISH_5 >= 154
+# define BOOST_PP_ITERATION_5 154
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 155 && BOOST_PP_ITERATION_FINISH_5 >= 155
+# define BOOST_PP_ITERATION_5 155
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 156 && BOOST_PP_ITERATION_FINISH_5 >= 156
+# define BOOST_PP_ITERATION_5 156
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 157 && BOOST_PP_ITERATION_FINISH_5 >= 157
+# define BOOST_PP_ITERATION_5 157
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 158 && BOOST_PP_ITERATION_FINISH_5 >= 158
+# define BOOST_PP_ITERATION_5 158
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 159 && BOOST_PP_ITERATION_FINISH_5 >= 159
+# define BOOST_PP_ITERATION_5 159
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 160 && BOOST_PP_ITERATION_FINISH_5 >= 160
+# define BOOST_PP_ITERATION_5 160
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 161 && BOOST_PP_ITERATION_FINISH_5 >= 161
+# define BOOST_PP_ITERATION_5 161
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 162 && BOOST_PP_ITERATION_FINISH_5 >= 162
+# define BOOST_PP_ITERATION_5 162
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 163 && BOOST_PP_ITERATION_FINISH_5 >= 163
+# define BOOST_PP_ITERATION_5 163
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 164 && BOOST_PP_ITERATION_FINISH_5 >= 164
+# define BOOST_PP_ITERATION_5 164
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 165 && BOOST_PP_ITERATION_FINISH_5 >= 165
+# define BOOST_PP_ITERATION_5 165
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 166 && BOOST_PP_ITERATION_FINISH_5 >= 166
+# define BOOST_PP_ITERATION_5 166
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 167 && BOOST_PP_ITERATION_FINISH_5 >= 167
+# define BOOST_PP_ITERATION_5 167
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 168 && BOOST_PP_ITERATION_FINISH_5 >= 168
+# define BOOST_PP_ITERATION_5 168
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 169 && BOOST_PP_ITERATION_FINISH_5 >= 169
+# define BOOST_PP_ITERATION_5 169
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 170 && BOOST_PP_ITERATION_FINISH_5 >= 170
+# define BOOST_PP_ITERATION_5 170
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 171 && BOOST_PP_ITERATION_FINISH_5 >= 171
+# define BOOST_PP_ITERATION_5 171
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 172 && BOOST_PP_ITERATION_FINISH_5 >= 172
+# define BOOST_PP_ITERATION_5 172
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 173 && BOOST_PP_ITERATION_FINISH_5 >= 173
+# define BOOST_PP_ITERATION_5 173
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 174 && BOOST_PP_ITERATION_FINISH_5 >= 174
+# define BOOST_PP_ITERATION_5 174
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 175 && BOOST_PP_ITERATION_FINISH_5 >= 175
+# define BOOST_PP_ITERATION_5 175
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 176 && BOOST_PP_ITERATION_FINISH_5 >= 176
+# define BOOST_PP_ITERATION_5 176
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 177 && BOOST_PP_ITERATION_FINISH_5 >= 177
+# define BOOST_PP_ITERATION_5 177
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 178 && BOOST_PP_ITERATION_FINISH_5 >= 178
+# define BOOST_PP_ITERATION_5 178
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 179 && BOOST_PP_ITERATION_FINISH_5 >= 179
+# define BOOST_PP_ITERATION_5 179
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 180 && BOOST_PP_ITERATION_FINISH_5 >= 180
+# define BOOST_PP_ITERATION_5 180
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 181 && BOOST_PP_ITERATION_FINISH_5 >= 181
+# define BOOST_PP_ITERATION_5 181
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 182 && BOOST_PP_ITERATION_FINISH_5 >= 182
+# define BOOST_PP_ITERATION_5 182
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 183 && BOOST_PP_ITERATION_FINISH_5 >= 183
+# define BOOST_PP_ITERATION_5 183
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 184 && BOOST_PP_ITERATION_FINISH_5 >= 184
+# define BOOST_PP_ITERATION_5 184
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 185 && BOOST_PP_ITERATION_FINISH_5 >= 185
+# define BOOST_PP_ITERATION_5 185
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 186 && BOOST_PP_ITERATION_FINISH_5 >= 186
+# define BOOST_PP_ITERATION_5 186
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 187 && BOOST_PP_ITERATION_FINISH_5 >= 187
+# define BOOST_PP_ITERATION_5 187
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 188 && BOOST_PP_ITERATION_FINISH_5 >= 188
+# define BOOST_PP_ITERATION_5 188
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 189 && BOOST_PP_ITERATION_FINISH_5 >= 189
+# define BOOST_PP_ITERATION_5 189
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 190 && BOOST_PP_ITERATION_FINISH_5 >= 190
+# define BOOST_PP_ITERATION_5 190
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 191 && BOOST_PP_ITERATION_FINISH_5 >= 191
+# define BOOST_PP_ITERATION_5 191
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 192 && BOOST_PP_ITERATION_FINISH_5 >= 192
+# define BOOST_PP_ITERATION_5 192
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 193 && BOOST_PP_ITERATION_FINISH_5 >= 193
+# define BOOST_PP_ITERATION_5 193
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 194 && BOOST_PP_ITERATION_FINISH_5 >= 194
+# define BOOST_PP_ITERATION_5 194
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 195 && BOOST_PP_ITERATION_FINISH_5 >= 195
+# define BOOST_PP_ITERATION_5 195
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 196 && BOOST_PP_ITERATION_FINISH_5 >= 196
+# define BOOST_PP_ITERATION_5 196
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 197 && BOOST_PP_ITERATION_FINISH_5 >= 197
+# define BOOST_PP_ITERATION_5 197
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 198 && BOOST_PP_ITERATION_FINISH_5 >= 198
+# define BOOST_PP_ITERATION_5 198
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 199 && BOOST_PP_ITERATION_FINISH_5 >= 199
+# define BOOST_PP_ITERATION_5 199
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 200 && BOOST_PP_ITERATION_FINISH_5 >= 200
+# define BOOST_PP_ITERATION_5 200
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 201 && BOOST_PP_ITERATION_FINISH_5 >= 201
+# define BOOST_PP_ITERATION_5 201
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 202 && BOOST_PP_ITERATION_FINISH_5 >= 202
+# define BOOST_PP_ITERATION_5 202
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 203 && BOOST_PP_ITERATION_FINISH_5 >= 203
+# define BOOST_PP_ITERATION_5 203
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 204 && BOOST_PP_ITERATION_FINISH_5 >= 204
+# define BOOST_PP_ITERATION_5 204
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 205 && BOOST_PP_ITERATION_FINISH_5 >= 205
+# define BOOST_PP_ITERATION_5 205
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 206 && BOOST_PP_ITERATION_FINISH_5 >= 206
+# define BOOST_PP_ITERATION_5 206
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 207 && BOOST_PP_ITERATION_FINISH_5 >= 207
+# define BOOST_PP_ITERATION_5 207
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 208 && BOOST_PP_ITERATION_FINISH_5 >= 208
+# define BOOST_PP_ITERATION_5 208
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 209 && BOOST_PP_ITERATION_FINISH_5 >= 209
+# define BOOST_PP_ITERATION_5 209
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 210 && BOOST_PP_ITERATION_FINISH_5 >= 210
+# define BOOST_PP_ITERATION_5 210
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 211 && BOOST_PP_ITERATION_FINISH_5 >= 211
+# define BOOST_PP_ITERATION_5 211
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 212 && BOOST_PP_ITERATION_FINISH_5 >= 212
+# define BOOST_PP_ITERATION_5 212
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 213 && BOOST_PP_ITERATION_FINISH_5 >= 213
+# define BOOST_PP_ITERATION_5 213
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 214 && BOOST_PP_ITERATION_FINISH_5 >= 214
+# define BOOST_PP_ITERATION_5 214
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 215 && BOOST_PP_ITERATION_FINISH_5 >= 215
+# define BOOST_PP_ITERATION_5 215
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 216 && BOOST_PP_ITERATION_FINISH_5 >= 216
+# define BOOST_PP_ITERATION_5 216
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 217 && BOOST_PP_ITERATION_FINISH_5 >= 217
+# define BOOST_PP_ITERATION_5 217
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 218 && BOOST_PP_ITERATION_FINISH_5 >= 218
+# define BOOST_PP_ITERATION_5 218
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 219 && BOOST_PP_ITERATION_FINISH_5 >= 219
+# define BOOST_PP_ITERATION_5 219
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 220 && BOOST_PP_ITERATION_FINISH_5 >= 220
+# define BOOST_PP_ITERATION_5 220
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 221 && BOOST_PP_ITERATION_FINISH_5 >= 221
+# define BOOST_PP_ITERATION_5 221
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 222 && BOOST_PP_ITERATION_FINISH_5 >= 222
+# define BOOST_PP_ITERATION_5 222
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 223 && BOOST_PP_ITERATION_FINISH_5 >= 223
+# define BOOST_PP_ITERATION_5 223
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 224 && BOOST_PP_ITERATION_FINISH_5 >= 224
+# define BOOST_PP_ITERATION_5 224
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 225 && BOOST_PP_ITERATION_FINISH_5 >= 225
+# define BOOST_PP_ITERATION_5 225
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 226 && BOOST_PP_ITERATION_FINISH_5 >= 226
+# define BOOST_PP_ITERATION_5 226
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 227 && BOOST_PP_ITERATION_FINISH_5 >= 227
+# define BOOST_PP_ITERATION_5 227
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 228 && BOOST_PP_ITERATION_FINISH_5 >= 228
+# define BOOST_PP_ITERATION_5 228
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 229 && BOOST_PP_ITERATION_FINISH_5 >= 229
+# define BOOST_PP_ITERATION_5 229
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 230 && BOOST_PP_ITERATION_FINISH_5 >= 230
+# define BOOST_PP_ITERATION_5 230
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 231 && BOOST_PP_ITERATION_FINISH_5 >= 231
+# define BOOST_PP_ITERATION_5 231
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 232 && BOOST_PP_ITERATION_FINISH_5 >= 232
+# define BOOST_PP_ITERATION_5 232
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 233 && BOOST_PP_ITERATION_FINISH_5 >= 233
+# define BOOST_PP_ITERATION_5 233
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 234 && BOOST_PP_ITERATION_FINISH_5 >= 234
+# define BOOST_PP_ITERATION_5 234
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 235 && BOOST_PP_ITERATION_FINISH_5 >= 235
+# define BOOST_PP_ITERATION_5 235
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 236 && BOOST_PP_ITERATION_FINISH_5 >= 236
+# define BOOST_PP_ITERATION_5 236
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 237 && BOOST_PP_ITERATION_FINISH_5 >= 237
+# define BOOST_PP_ITERATION_5 237
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 238 && BOOST_PP_ITERATION_FINISH_5 >= 238
+# define BOOST_PP_ITERATION_5 238
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 239 && BOOST_PP_ITERATION_FINISH_5 >= 239
+# define BOOST_PP_ITERATION_5 239
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 240 && BOOST_PP_ITERATION_FINISH_5 >= 240
+# define BOOST_PP_ITERATION_5 240
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 241 && BOOST_PP_ITERATION_FINISH_5 >= 241
+# define BOOST_PP_ITERATION_5 241
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 242 && BOOST_PP_ITERATION_FINISH_5 >= 242
+# define BOOST_PP_ITERATION_5 242
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 243 && BOOST_PP_ITERATION_FINISH_5 >= 243
+# define BOOST_PP_ITERATION_5 243
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 244 && BOOST_PP_ITERATION_FINISH_5 >= 244
+# define BOOST_PP_ITERATION_5 244
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 245 && BOOST_PP_ITERATION_FINISH_5 >= 245
+# define BOOST_PP_ITERATION_5 245
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 246 && BOOST_PP_ITERATION_FINISH_5 >= 246
+# define BOOST_PP_ITERATION_5 246
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 247 && BOOST_PP_ITERATION_FINISH_5 >= 247
+# define BOOST_PP_ITERATION_5 247
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 248 && BOOST_PP_ITERATION_FINISH_5 >= 248
+# define BOOST_PP_ITERATION_5 248
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 249 && BOOST_PP_ITERATION_FINISH_5 >= 249
+# define BOOST_PP_ITERATION_5 249
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 250 && BOOST_PP_ITERATION_FINISH_5 >= 250
+# define BOOST_PP_ITERATION_5 250
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 251 && BOOST_PP_ITERATION_FINISH_5 >= 251
+# define BOOST_PP_ITERATION_5 251
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 252 && BOOST_PP_ITERATION_FINISH_5 >= 252
+# define BOOST_PP_ITERATION_5 252
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 253 && BOOST_PP_ITERATION_FINISH_5 >= 253
+# define BOOST_PP_ITERATION_5 253
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 254 && BOOST_PP_ITERATION_FINISH_5 >= 254
+# define BOOST_PP_ITERATION_5 254
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 255 && BOOST_PP_ITERATION_FINISH_5 >= 255
+# define BOOST_PP_ITERATION_5 255
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_START_5 <= 256 && BOOST_PP_ITERATION_FINISH_5 >= 256
+# define BOOST_PP_ITERATION_5 256
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# endif
+#
+# undef BOOST_PP_ITERATION_DEPTH
+# define BOOST_PP_ITERATION_DEPTH() 4
+#
+# undef BOOST_PP_ITERATION_START_5
+# undef BOOST_PP_ITERATION_FINISH_5
+# undef BOOST_PP_FILENAME_5
+#
+# undef BOOST_PP_ITERATION_FLAGS_5
+# undef BOOST_PP_ITERATION_PARAMS_5
diff --git a/boost/boost/preprocessor/iteration/detail/iter/reverse1.hpp b/boost/boost/preprocessor/iteration/detail/iter/reverse1.hpp
new file mode 100644
index 00000000000..bf88d2f3a79
--- /dev/null
+++ b/boost/boost/preprocessor/iteration/detail/iter/reverse1.hpp
@@ -0,0 +1,1296 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# if BOOST_PP_ITERATION_FINISH_1 <= 256 && BOOST_PP_ITERATION_START_1 >= 256
+# define BOOST_PP_ITERATION_1 256
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 255 && BOOST_PP_ITERATION_START_1 >= 255
+# define BOOST_PP_ITERATION_1 255
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 254 && BOOST_PP_ITERATION_START_1 >= 254
+# define BOOST_PP_ITERATION_1 254
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 253 && BOOST_PP_ITERATION_START_1 >= 253
+# define BOOST_PP_ITERATION_1 253
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 252 && BOOST_PP_ITERATION_START_1 >= 252
+# define BOOST_PP_ITERATION_1 252
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 251 && BOOST_PP_ITERATION_START_1 >= 251
+# define BOOST_PP_ITERATION_1 251
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 250 && BOOST_PP_ITERATION_START_1 >= 250
+# define BOOST_PP_ITERATION_1 250
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 249 && BOOST_PP_ITERATION_START_1 >= 249
+# define BOOST_PP_ITERATION_1 249
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 248 && BOOST_PP_ITERATION_START_1 >= 248
+# define BOOST_PP_ITERATION_1 248
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 247 && BOOST_PP_ITERATION_START_1 >= 247
+# define BOOST_PP_ITERATION_1 247
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 246 && BOOST_PP_ITERATION_START_1 >= 246
+# define BOOST_PP_ITERATION_1 246
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 245 && BOOST_PP_ITERATION_START_1 >= 245
+# define BOOST_PP_ITERATION_1 245
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 244 && BOOST_PP_ITERATION_START_1 >= 244
+# define BOOST_PP_ITERATION_1 244
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 243 && BOOST_PP_ITERATION_START_1 >= 243
+# define BOOST_PP_ITERATION_1 243
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 242 && BOOST_PP_ITERATION_START_1 >= 242
+# define BOOST_PP_ITERATION_1 242
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 241 && BOOST_PP_ITERATION_START_1 >= 241
+# define BOOST_PP_ITERATION_1 241
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 240 && BOOST_PP_ITERATION_START_1 >= 240
+# define BOOST_PP_ITERATION_1 240
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 239 && BOOST_PP_ITERATION_START_1 >= 239
+# define BOOST_PP_ITERATION_1 239
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 238 && BOOST_PP_ITERATION_START_1 >= 238
+# define BOOST_PP_ITERATION_1 238
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 237 && BOOST_PP_ITERATION_START_1 >= 237
+# define BOOST_PP_ITERATION_1 237
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 236 && BOOST_PP_ITERATION_START_1 >= 236
+# define BOOST_PP_ITERATION_1 236
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 235 && BOOST_PP_ITERATION_START_1 >= 235
+# define BOOST_PP_ITERATION_1 235
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 234 && BOOST_PP_ITERATION_START_1 >= 234
+# define BOOST_PP_ITERATION_1 234
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 233 && BOOST_PP_ITERATION_START_1 >= 233
+# define BOOST_PP_ITERATION_1 233
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 232 && BOOST_PP_ITERATION_START_1 >= 232
+# define BOOST_PP_ITERATION_1 232
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 231 && BOOST_PP_ITERATION_START_1 >= 231
+# define BOOST_PP_ITERATION_1 231
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 230 && BOOST_PP_ITERATION_START_1 >= 230
+# define BOOST_PP_ITERATION_1 230
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 229 && BOOST_PP_ITERATION_START_1 >= 229
+# define BOOST_PP_ITERATION_1 229
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 228 && BOOST_PP_ITERATION_START_1 >= 228
+# define BOOST_PP_ITERATION_1 228
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 227 && BOOST_PP_ITERATION_START_1 >= 227
+# define BOOST_PP_ITERATION_1 227
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 226 && BOOST_PP_ITERATION_START_1 >= 226
+# define BOOST_PP_ITERATION_1 226
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 225 && BOOST_PP_ITERATION_START_1 >= 225
+# define BOOST_PP_ITERATION_1 225
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 224 && BOOST_PP_ITERATION_START_1 >= 224
+# define BOOST_PP_ITERATION_1 224
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 223 && BOOST_PP_ITERATION_START_1 >= 223
+# define BOOST_PP_ITERATION_1 223
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 222 && BOOST_PP_ITERATION_START_1 >= 222
+# define BOOST_PP_ITERATION_1 222
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 221 && BOOST_PP_ITERATION_START_1 >= 221
+# define BOOST_PP_ITERATION_1 221
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 220 && BOOST_PP_ITERATION_START_1 >= 220
+# define BOOST_PP_ITERATION_1 220
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 219 && BOOST_PP_ITERATION_START_1 >= 219
+# define BOOST_PP_ITERATION_1 219
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 218 && BOOST_PP_ITERATION_START_1 >= 218
+# define BOOST_PP_ITERATION_1 218
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 217 && BOOST_PP_ITERATION_START_1 >= 217
+# define BOOST_PP_ITERATION_1 217
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 216 && BOOST_PP_ITERATION_START_1 >= 216
+# define BOOST_PP_ITERATION_1 216
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 215 && BOOST_PP_ITERATION_START_1 >= 215
+# define BOOST_PP_ITERATION_1 215
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 214 && BOOST_PP_ITERATION_START_1 >= 214
+# define BOOST_PP_ITERATION_1 214
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 213 && BOOST_PP_ITERATION_START_1 >= 213
+# define BOOST_PP_ITERATION_1 213
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 212 && BOOST_PP_ITERATION_START_1 >= 212
+# define BOOST_PP_ITERATION_1 212
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 211 && BOOST_PP_ITERATION_START_1 >= 211
+# define BOOST_PP_ITERATION_1 211
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 210 && BOOST_PP_ITERATION_START_1 >= 210
+# define BOOST_PP_ITERATION_1 210
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 209 && BOOST_PP_ITERATION_START_1 >= 209
+# define BOOST_PP_ITERATION_1 209
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 208 && BOOST_PP_ITERATION_START_1 >= 208
+# define BOOST_PP_ITERATION_1 208
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 207 && BOOST_PP_ITERATION_START_1 >= 207
+# define BOOST_PP_ITERATION_1 207
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 206 && BOOST_PP_ITERATION_START_1 >= 206
+# define BOOST_PP_ITERATION_1 206
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 205 && BOOST_PP_ITERATION_START_1 >= 205
+# define BOOST_PP_ITERATION_1 205
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 204 && BOOST_PP_ITERATION_START_1 >= 204
+# define BOOST_PP_ITERATION_1 204
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 203 && BOOST_PP_ITERATION_START_1 >= 203
+# define BOOST_PP_ITERATION_1 203
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 202 && BOOST_PP_ITERATION_START_1 >= 202
+# define BOOST_PP_ITERATION_1 202
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 201 && BOOST_PP_ITERATION_START_1 >= 201
+# define BOOST_PP_ITERATION_1 201
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 200 && BOOST_PP_ITERATION_START_1 >= 200
+# define BOOST_PP_ITERATION_1 200
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 199 && BOOST_PP_ITERATION_START_1 >= 199
+# define BOOST_PP_ITERATION_1 199
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 198 && BOOST_PP_ITERATION_START_1 >= 198
+# define BOOST_PP_ITERATION_1 198
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 197 && BOOST_PP_ITERATION_START_1 >= 197
+# define BOOST_PP_ITERATION_1 197
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 196 && BOOST_PP_ITERATION_START_1 >= 196
+# define BOOST_PP_ITERATION_1 196
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 195 && BOOST_PP_ITERATION_START_1 >= 195
+# define BOOST_PP_ITERATION_1 195
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 194 && BOOST_PP_ITERATION_START_1 >= 194
+# define BOOST_PP_ITERATION_1 194
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 193 && BOOST_PP_ITERATION_START_1 >= 193
+# define BOOST_PP_ITERATION_1 193
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 192 && BOOST_PP_ITERATION_START_1 >= 192
+# define BOOST_PP_ITERATION_1 192
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 191 && BOOST_PP_ITERATION_START_1 >= 191
+# define BOOST_PP_ITERATION_1 191
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 190 && BOOST_PP_ITERATION_START_1 >= 190
+# define BOOST_PP_ITERATION_1 190
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 189 && BOOST_PP_ITERATION_START_1 >= 189
+# define BOOST_PP_ITERATION_1 189
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 188 && BOOST_PP_ITERATION_START_1 >= 188
+# define BOOST_PP_ITERATION_1 188
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 187 && BOOST_PP_ITERATION_START_1 >= 187
+# define BOOST_PP_ITERATION_1 187
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 186 && BOOST_PP_ITERATION_START_1 >= 186
+# define BOOST_PP_ITERATION_1 186
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 185 && BOOST_PP_ITERATION_START_1 >= 185
+# define BOOST_PP_ITERATION_1 185
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 184 && BOOST_PP_ITERATION_START_1 >= 184
+# define BOOST_PP_ITERATION_1 184
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 183 && BOOST_PP_ITERATION_START_1 >= 183
+# define BOOST_PP_ITERATION_1 183
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 182 && BOOST_PP_ITERATION_START_1 >= 182
+# define BOOST_PP_ITERATION_1 182
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 181 && BOOST_PP_ITERATION_START_1 >= 181
+# define BOOST_PP_ITERATION_1 181
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 180 && BOOST_PP_ITERATION_START_1 >= 180
+# define BOOST_PP_ITERATION_1 180
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 179 && BOOST_PP_ITERATION_START_1 >= 179
+# define BOOST_PP_ITERATION_1 179
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 178 && BOOST_PP_ITERATION_START_1 >= 178
+# define BOOST_PP_ITERATION_1 178
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 177 && BOOST_PP_ITERATION_START_1 >= 177
+# define BOOST_PP_ITERATION_1 177
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 176 && BOOST_PP_ITERATION_START_1 >= 176
+# define BOOST_PP_ITERATION_1 176
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 175 && BOOST_PP_ITERATION_START_1 >= 175
+# define BOOST_PP_ITERATION_1 175
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 174 && BOOST_PP_ITERATION_START_1 >= 174
+# define BOOST_PP_ITERATION_1 174
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 173 && BOOST_PP_ITERATION_START_1 >= 173
+# define BOOST_PP_ITERATION_1 173
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 172 && BOOST_PP_ITERATION_START_1 >= 172
+# define BOOST_PP_ITERATION_1 172
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 171 && BOOST_PP_ITERATION_START_1 >= 171
+# define BOOST_PP_ITERATION_1 171
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 170 && BOOST_PP_ITERATION_START_1 >= 170
+# define BOOST_PP_ITERATION_1 170
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 169 && BOOST_PP_ITERATION_START_1 >= 169
+# define BOOST_PP_ITERATION_1 169
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 168 && BOOST_PP_ITERATION_START_1 >= 168
+# define BOOST_PP_ITERATION_1 168
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 167 && BOOST_PP_ITERATION_START_1 >= 167
+# define BOOST_PP_ITERATION_1 167
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 166 && BOOST_PP_ITERATION_START_1 >= 166
+# define BOOST_PP_ITERATION_1 166
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 165 && BOOST_PP_ITERATION_START_1 >= 165
+# define BOOST_PP_ITERATION_1 165
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 164 && BOOST_PP_ITERATION_START_1 >= 164
+# define BOOST_PP_ITERATION_1 164
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 163 && BOOST_PP_ITERATION_START_1 >= 163
+# define BOOST_PP_ITERATION_1 163
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 162 && BOOST_PP_ITERATION_START_1 >= 162
+# define BOOST_PP_ITERATION_1 162
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 161 && BOOST_PP_ITERATION_START_1 >= 161
+# define BOOST_PP_ITERATION_1 161
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 160 && BOOST_PP_ITERATION_START_1 >= 160
+# define BOOST_PP_ITERATION_1 160
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 159 && BOOST_PP_ITERATION_START_1 >= 159
+# define BOOST_PP_ITERATION_1 159
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 158 && BOOST_PP_ITERATION_START_1 >= 158
+# define BOOST_PP_ITERATION_1 158
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 157 && BOOST_PP_ITERATION_START_1 >= 157
+# define BOOST_PP_ITERATION_1 157
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 156 && BOOST_PP_ITERATION_START_1 >= 156
+# define BOOST_PP_ITERATION_1 156
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 155 && BOOST_PP_ITERATION_START_1 >= 155
+# define BOOST_PP_ITERATION_1 155
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 154 && BOOST_PP_ITERATION_START_1 >= 154
+# define BOOST_PP_ITERATION_1 154
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 153 && BOOST_PP_ITERATION_START_1 >= 153
+# define BOOST_PP_ITERATION_1 153
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 152 && BOOST_PP_ITERATION_START_1 >= 152
+# define BOOST_PP_ITERATION_1 152
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 151 && BOOST_PP_ITERATION_START_1 >= 151
+# define BOOST_PP_ITERATION_1 151
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 150 && BOOST_PP_ITERATION_START_1 >= 150
+# define BOOST_PP_ITERATION_1 150
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 149 && BOOST_PP_ITERATION_START_1 >= 149
+# define BOOST_PP_ITERATION_1 149
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 148 && BOOST_PP_ITERATION_START_1 >= 148
+# define BOOST_PP_ITERATION_1 148
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 147 && BOOST_PP_ITERATION_START_1 >= 147
+# define BOOST_PP_ITERATION_1 147
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 146 && BOOST_PP_ITERATION_START_1 >= 146
+# define BOOST_PP_ITERATION_1 146
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 145 && BOOST_PP_ITERATION_START_1 >= 145
+# define BOOST_PP_ITERATION_1 145
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 144 && BOOST_PP_ITERATION_START_1 >= 144
+# define BOOST_PP_ITERATION_1 144
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 143 && BOOST_PP_ITERATION_START_1 >= 143
+# define BOOST_PP_ITERATION_1 143
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 142 && BOOST_PP_ITERATION_START_1 >= 142
+# define BOOST_PP_ITERATION_1 142
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 141 && BOOST_PP_ITERATION_START_1 >= 141
+# define BOOST_PP_ITERATION_1 141
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 140 && BOOST_PP_ITERATION_START_1 >= 140
+# define BOOST_PP_ITERATION_1 140
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 139 && BOOST_PP_ITERATION_START_1 >= 139
+# define BOOST_PP_ITERATION_1 139
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 138 && BOOST_PP_ITERATION_START_1 >= 138
+# define BOOST_PP_ITERATION_1 138
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 137 && BOOST_PP_ITERATION_START_1 >= 137
+# define BOOST_PP_ITERATION_1 137
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 136 && BOOST_PP_ITERATION_START_1 >= 136
+# define BOOST_PP_ITERATION_1 136
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 135 && BOOST_PP_ITERATION_START_1 >= 135
+# define BOOST_PP_ITERATION_1 135
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 134 && BOOST_PP_ITERATION_START_1 >= 134
+# define BOOST_PP_ITERATION_1 134
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 133 && BOOST_PP_ITERATION_START_1 >= 133
+# define BOOST_PP_ITERATION_1 133
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 132 && BOOST_PP_ITERATION_START_1 >= 132
+# define BOOST_PP_ITERATION_1 132
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 131 && BOOST_PP_ITERATION_START_1 >= 131
+# define BOOST_PP_ITERATION_1 131
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 130 && BOOST_PP_ITERATION_START_1 >= 130
+# define BOOST_PP_ITERATION_1 130
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 129 && BOOST_PP_ITERATION_START_1 >= 129
+# define BOOST_PP_ITERATION_1 129
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 128 && BOOST_PP_ITERATION_START_1 >= 128
+# define BOOST_PP_ITERATION_1 128
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 127 && BOOST_PP_ITERATION_START_1 >= 127
+# define BOOST_PP_ITERATION_1 127
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 126 && BOOST_PP_ITERATION_START_1 >= 126
+# define BOOST_PP_ITERATION_1 126
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 125 && BOOST_PP_ITERATION_START_1 >= 125
+# define BOOST_PP_ITERATION_1 125
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 124 && BOOST_PP_ITERATION_START_1 >= 124
+# define BOOST_PP_ITERATION_1 124
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 123 && BOOST_PP_ITERATION_START_1 >= 123
+# define BOOST_PP_ITERATION_1 123
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 122 && BOOST_PP_ITERATION_START_1 >= 122
+# define BOOST_PP_ITERATION_1 122
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 121 && BOOST_PP_ITERATION_START_1 >= 121
+# define BOOST_PP_ITERATION_1 121
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 120 && BOOST_PP_ITERATION_START_1 >= 120
+# define BOOST_PP_ITERATION_1 120
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 119 && BOOST_PP_ITERATION_START_1 >= 119
+# define BOOST_PP_ITERATION_1 119
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 118 && BOOST_PP_ITERATION_START_1 >= 118
+# define BOOST_PP_ITERATION_1 118
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 117 && BOOST_PP_ITERATION_START_1 >= 117
+# define BOOST_PP_ITERATION_1 117
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 116 && BOOST_PP_ITERATION_START_1 >= 116
+# define BOOST_PP_ITERATION_1 116
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 115 && BOOST_PP_ITERATION_START_1 >= 115
+# define BOOST_PP_ITERATION_1 115
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 114 && BOOST_PP_ITERATION_START_1 >= 114
+# define BOOST_PP_ITERATION_1 114
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 113 && BOOST_PP_ITERATION_START_1 >= 113
+# define BOOST_PP_ITERATION_1 113
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 112 && BOOST_PP_ITERATION_START_1 >= 112
+# define BOOST_PP_ITERATION_1 112
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 111 && BOOST_PP_ITERATION_START_1 >= 111
+# define BOOST_PP_ITERATION_1 111
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 110 && BOOST_PP_ITERATION_START_1 >= 110
+# define BOOST_PP_ITERATION_1 110
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 109 && BOOST_PP_ITERATION_START_1 >= 109
+# define BOOST_PP_ITERATION_1 109
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 108 && BOOST_PP_ITERATION_START_1 >= 108
+# define BOOST_PP_ITERATION_1 108
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 107 && BOOST_PP_ITERATION_START_1 >= 107
+# define BOOST_PP_ITERATION_1 107
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 106 && BOOST_PP_ITERATION_START_1 >= 106
+# define BOOST_PP_ITERATION_1 106
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 105 && BOOST_PP_ITERATION_START_1 >= 105
+# define BOOST_PP_ITERATION_1 105
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 104 && BOOST_PP_ITERATION_START_1 >= 104
+# define BOOST_PP_ITERATION_1 104
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 103 && BOOST_PP_ITERATION_START_1 >= 103
+# define BOOST_PP_ITERATION_1 103
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 102 && BOOST_PP_ITERATION_START_1 >= 102
+# define BOOST_PP_ITERATION_1 102
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 101 && BOOST_PP_ITERATION_START_1 >= 101
+# define BOOST_PP_ITERATION_1 101
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 100 && BOOST_PP_ITERATION_START_1 >= 100
+# define BOOST_PP_ITERATION_1 100
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 99 && BOOST_PP_ITERATION_START_1 >= 99
+# define BOOST_PP_ITERATION_1 99
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 98 && BOOST_PP_ITERATION_START_1 >= 98
+# define BOOST_PP_ITERATION_1 98
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 97 && BOOST_PP_ITERATION_START_1 >= 97
+# define BOOST_PP_ITERATION_1 97
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 96 && BOOST_PP_ITERATION_START_1 >= 96
+# define BOOST_PP_ITERATION_1 96
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 95 && BOOST_PP_ITERATION_START_1 >= 95
+# define BOOST_PP_ITERATION_1 95
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 94 && BOOST_PP_ITERATION_START_1 >= 94
+# define BOOST_PP_ITERATION_1 94
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 93 && BOOST_PP_ITERATION_START_1 >= 93
+# define BOOST_PP_ITERATION_1 93
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 92 && BOOST_PP_ITERATION_START_1 >= 92
+# define BOOST_PP_ITERATION_1 92
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 91 && BOOST_PP_ITERATION_START_1 >= 91
+# define BOOST_PP_ITERATION_1 91
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 90 && BOOST_PP_ITERATION_START_1 >= 90
+# define BOOST_PP_ITERATION_1 90
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 89 && BOOST_PP_ITERATION_START_1 >= 89
+# define BOOST_PP_ITERATION_1 89
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 88 && BOOST_PP_ITERATION_START_1 >= 88
+# define BOOST_PP_ITERATION_1 88
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 87 && BOOST_PP_ITERATION_START_1 >= 87
+# define BOOST_PP_ITERATION_1 87
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 86 && BOOST_PP_ITERATION_START_1 >= 86
+# define BOOST_PP_ITERATION_1 86
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 85 && BOOST_PP_ITERATION_START_1 >= 85
+# define BOOST_PP_ITERATION_1 85
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 84 && BOOST_PP_ITERATION_START_1 >= 84
+# define BOOST_PP_ITERATION_1 84
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 83 && BOOST_PP_ITERATION_START_1 >= 83
+# define BOOST_PP_ITERATION_1 83
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 82 && BOOST_PP_ITERATION_START_1 >= 82
+# define BOOST_PP_ITERATION_1 82
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 81 && BOOST_PP_ITERATION_START_1 >= 81
+# define BOOST_PP_ITERATION_1 81
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 80 && BOOST_PP_ITERATION_START_1 >= 80
+# define BOOST_PP_ITERATION_1 80
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 79 && BOOST_PP_ITERATION_START_1 >= 79
+# define BOOST_PP_ITERATION_1 79
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 78 && BOOST_PP_ITERATION_START_1 >= 78
+# define BOOST_PP_ITERATION_1 78
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 77 && BOOST_PP_ITERATION_START_1 >= 77
+# define BOOST_PP_ITERATION_1 77
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 76 && BOOST_PP_ITERATION_START_1 >= 76
+# define BOOST_PP_ITERATION_1 76
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 75 && BOOST_PP_ITERATION_START_1 >= 75
+# define BOOST_PP_ITERATION_1 75
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 74 && BOOST_PP_ITERATION_START_1 >= 74
+# define BOOST_PP_ITERATION_1 74
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 73 && BOOST_PP_ITERATION_START_1 >= 73
+# define BOOST_PP_ITERATION_1 73
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 72 && BOOST_PP_ITERATION_START_1 >= 72
+# define BOOST_PP_ITERATION_1 72
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 71 && BOOST_PP_ITERATION_START_1 >= 71
+# define BOOST_PP_ITERATION_1 71
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 70 && BOOST_PP_ITERATION_START_1 >= 70
+# define BOOST_PP_ITERATION_1 70
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 69 && BOOST_PP_ITERATION_START_1 >= 69
+# define BOOST_PP_ITERATION_1 69
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 68 && BOOST_PP_ITERATION_START_1 >= 68
+# define BOOST_PP_ITERATION_1 68
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 67 && BOOST_PP_ITERATION_START_1 >= 67
+# define BOOST_PP_ITERATION_1 67
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 66 && BOOST_PP_ITERATION_START_1 >= 66
+# define BOOST_PP_ITERATION_1 66
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 65 && BOOST_PP_ITERATION_START_1 >= 65
+# define BOOST_PP_ITERATION_1 65
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 64 && BOOST_PP_ITERATION_START_1 >= 64
+# define BOOST_PP_ITERATION_1 64
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 63 && BOOST_PP_ITERATION_START_1 >= 63
+# define BOOST_PP_ITERATION_1 63
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 62 && BOOST_PP_ITERATION_START_1 >= 62
+# define BOOST_PP_ITERATION_1 62
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 61 && BOOST_PP_ITERATION_START_1 >= 61
+# define BOOST_PP_ITERATION_1 61
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 60 && BOOST_PP_ITERATION_START_1 >= 60
+# define BOOST_PP_ITERATION_1 60
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 59 && BOOST_PP_ITERATION_START_1 >= 59
+# define BOOST_PP_ITERATION_1 59
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 58 && BOOST_PP_ITERATION_START_1 >= 58
+# define BOOST_PP_ITERATION_1 58
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 57 && BOOST_PP_ITERATION_START_1 >= 57
+# define BOOST_PP_ITERATION_1 57
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 56 && BOOST_PP_ITERATION_START_1 >= 56
+# define BOOST_PP_ITERATION_1 56
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 55 && BOOST_PP_ITERATION_START_1 >= 55
+# define BOOST_PP_ITERATION_1 55
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 54 && BOOST_PP_ITERATION_START_1 >= 54
+# define BOOST_PP_ITERATION_1 54
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 53 && BOOST_PP_ITERATION_START_1 >= 53
+# define BOOST_PP_ITERATION_1 53
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 52 && BOOST_PP_ITERATION_START_1 >= 52
+# define BOOST_PP_ITERATION_1 52
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 51 && BOOST_PP_ITERATION_START_1 >= 51
+# define BOOST_PP_ITERATION_1 51
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 50 && BOOST_PP_ITERATION_START_1 >= 50
+# define BOOST_PP_ITERATION_1 50
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 49 && BOOST_PP_ITERATION_START_1 >= 49
+# define BOOST_PP_ITERATION_1 49
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 48 && BOOST_PP_ITERATION_START_1 >= 48
+# define BOOST_PP_ITERATION_1 48
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 47 && BOOST_PP_ITERATION_START_1 >= 47
+# define BOOST_PP_ITERATION_1 47
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 46 && BOOST_PP_ITERATION_START_1 >= 46
+# define BOOST_PP_ITERATION_1 46
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 45 && BOOST_PP_ITERATION_START_1 >= 45
+# define BOOST_PP_ITERATION_1 45
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 44 && BOOST_PP_ITERATION_START_1 >= 44
+# define BOOST_PP_ITERATION_1 44
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 43 && BOOST_PP_ITERATION_START_1 >= 43
+# define BOOST_PP_ITERATION_1 43
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 42 && BOOST_PP_ITERATION_START_1 >= 42
+# define BOOST_PP_ITERATION_1 42
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 41 && BOOST_PP_ITERATION_START_1 >= 41
+# define BOOST_PP_ITERATION_1 41
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 40 && BOOST_PP_ITERATION_START_1 >= 40
+# define BOOST_PP_ITERATION_1 40
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 39 && BOOST_PP_ITERATION_START_1 >= 39
+# define BOOST_PP_ITERATION_1 39
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 38 && BOOST_PP_ITERATION_START_1 >= 38
+# define BOOST_PP_ITERATION_1 38
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 37 && BOOST_PP_ITERATION_START_1 >= 37
+# define BOOST_PP_ITERATION_1 37
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 36 && BOOST_PP_ITERATION_START_1 >= 36
+# define BOOST_PP_ITERATION_1 36
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 35 && BOOST_PP_ITERATION_START_1 >= 35
+# define BOOST_PP_ITERATION_1 35
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 34 && BOOST_PP_ITERATION_START_1 >= 34
+# define BOOST_PP_ITERATION_1 34
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 33 && BOOST_PP_ITERATION_START_1 >= 33
+# define BOOST_PP_ITERATION_1 33
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 32 && BOOST_PP_ITERATION_START_1 >= 32
+# define BOOST_PP_ITERATION_1 32
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 31 && BOOST_PP_ITERATION_START_1 >= 31
+# define BOOST_PP_ITERATION_1 31
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 30 && BOOST_PP_ITERATION_START_1 >= 30
+# define BOOST_PP_ITERATION_1 30
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 29 && BOOST_PP_ITERATION_START_1 >= 29
+# define BOOST_PP_ITERATION_1 29
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 28 && BOOST_PP_ITERATION_START_1 >= 28
+# define BOOST_PP_ITERATION_1 28
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 27 && BOOST_PP_ITERATION_START_1 >= 27
+# define BOOST_PP_ITERATION_1 27
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 26 && BOOST_PP_ITERATION_START_1 >= 26
+# define BOOST_PP_ITERATION_1 26
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 25 && BOOST_PP_ITERATION_START_1 >= 25
+# define BOOST_PP_ITERATION_1 25
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 24 && BOOST_PP_ITERATION_START_1 >= 24
+# define BOOST_PP_ITERATION_1 24
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 23 && BOOST_PP_ITERATION_START_1 >= 23
+# define BOOST_PP_ITERATION_1 23
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 22 && BOOST_PP_ITERATION_START_1 >= 22
+# define BOOST_PP_ITERATION_1 22
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 21 && BOOST_PP_ITERATION_START_1 >= 21
+# define BOOST_PP_ITERATION_1 21
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 20 && BOOST_PP_ITERATION_START_1 >= 20
+# define BOOST_PP_ITERATION_1 20
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 19 && BOOST_PP_ITERATION_START_1 >= 19
+# define BOOST_PP_ITERATION_1 19
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 18 && BOOST_PP_ITERATION_START_1 >= 18
+# define BOOST_PP_ITERATION_1 18
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 17 && BOOST_PP_ITERATION_START_1 >= 17
+# define BOOST_PP_ITERATION_1 17
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 16 && BOOST_PP_ITERATION_START_1 >= 16
+# define BOOST_PP_ITERATION_1 16
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 15 && BOOST_PP_ITERATION_START_1 >= 15
+# define BOOST_PP_ITERATION_1 15
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 14 && BOOST_PP_ITERATION_START_1 >= 14
+# define BOOST_PP_ITERATION_1 14
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 13 && BOOST_PP_ITERATION_START_1 >= 13
+# define BOOST_PP_ITERATION_1 13
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 12 && BOOST_PP_ITERATION_START_1 >= 12
+# define BOOST_PP_ITERATION_1 12
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 11 && BOOST_PP_ITERATION_START_1 >= 11
+# define BOOST_PP_ITERATION_1 11
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 10 && BOOST_PP_ITERATION_START_1 >= 10
+# define BOOST_PP_ITERATION_1 10
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 9 && BOOST_PP_ITERATION_START_1 >= 9
+# define BOOST_PP_ITERATION_1 9
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 8 && BOOST_PP_ITERATION_START_1 >= 8
+# define BOOST_PP_ITERATION_1 8
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 7 && BOOST_PP_ITERATION_START_1 >= 7
+# define BOOST_PP_ITERATION_1 7
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 6 && BOOST_PP_ITERATION_START_1 >= 6
+# define BOOST_PP_ITERATION_1 6
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 5 && BOOST_PP_ITERATION_START_1 >= 5
+# define BOOST_PP_ITERATION_1 5
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 4 && BOOST_PP_ITERATION_START_1 >= 4
+# define BOOST_PP_ITERATION_1 4
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 3 && BOOST_PP_ITERATION_START_1 >= 3
+# define BOOST_PP_ITERATION_1 3
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 2 && BOOST_PP_ITERATION_START_1 >= 2
+# define BOOST_PP_ITERATION_1 2
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 1 && BOOST_PP_ITERATION_START_1 >= 1
+# define BOOST_PP_ITERATION_1 1
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 0 && BOOST_PP_ITERATION_START_1 >= 0
+# define BOOST_PP_ITERATION_1 0
+# include BOOST_PP_FILENAME_1
+# undef BOOST_PP_ITERATION_1
+# endif
diff --git a/boost/boost/preprocessor/iteration/detail/iter/reverse2.hpp b/boost/boost/preprocessor/iteration/detail/iter/reverse2.hpp
new file mode 100644
index 00000000000..521bd249bea
--- /dev/null
+++ b/boost/boost/preprocessor/iteration/detail/iter/reverse2.hpp
@@ -0,0 +1,1296 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# if BOOST_PP_ITERATION_FINISH_2 <= 256 && BOOST_PP_ITERATION_START_2 >= 256
+# define BOOST_PP_ITERATION_2 256
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 255 && BOOST_PP_ITERATION_START_2 >= 255
+# define BOOST_PP_ITERATION_2 255
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 254 && BOOST_PP_ITERATION_START_2 >= 254
+# define BOOST_PP_ITERATION_2 254
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 253 && BOOST_PP_ITERATION_START_2 >= 253
+# define BOOST_PP_ITERATION_2 253
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 252 && BOOST_PP_ITERATION_START_2 >= 252
+# define BOOST_PP_ITERATION_2 252
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 251 && BOOST_PP_ITERATION_START_2 >= 251
+# define BOOST_PP_ITERATION_2 251
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 250 && BOOST_PP_ITERATION_START_2 >= 250
+# define BOOST_PP_ITERATION_2 250
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 249 && BOOST_PP_ITERATION_START_2 >= 249
+# define BOOST_PP_ITERATION_2 249
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 248 && BOOST_PP_ITERATION_START_2 >= 248
+# define BOOST_PP_ITERATION_2 248
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 247 && BOOST_PP_ITERATION_START_2 >= 247
+# define BOOST_PP_ITERATION_2 247
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 246 && BOOST_PP_ITERATION_START_2 >= 246
+# define BOOST_PP_ITERATION_2 246
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 245 && BOOST_PP_ITERATION_START_2 >= 245
+# define BOOST_PP_ITERATION_2 245
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 244 && BOOST_PP_ITERATION_START_2 >= 244
+# define BOOST_PP_ITERATION_2 244
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 243 && BOOST_PP_ITERATION_START_2 >= 243
+# define BOOST_PP_ITERATION_2 243
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 242 && BOOST_PP_ITERATION_START_2 >= 242
+# define BOOST_PP_ITERATION_2 242
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 241 && BOOST_PP_ITERATION_START_2 >= 241
+# define BOOST_PP_ITERATION_2 241
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 240 && BOOST_PP_ITERATION_START_2 >= 240
+# define BOOST_PP_ITERATION_2 240
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 239 && BOOST_PP_ITERATION_START_2 >= 239
+# define BOOST_PP_ITERATION_2 239
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 238 && BOOST_PP_ITERATION_START_2 >= 238
+# define BOOST_PP_ITERATION_2 238
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 237 && BOOST_PP_ITERATION_START_2 >= 237
+# define BOOST_PP_ITERATION_2 237
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 236 && BOOST_PP_ITERATION_START_2 >= 236
+# define BOOST_PP_ITERATION_2 236
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 235 && BOOST_PP_ITERATION_START_2 >= 235
+# define BOOST_PP_ITERATION_2 235
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 234 && BOOST_PP_ITERATION_START_2 >= 234
+# define BOOST_PP_ITERATION_2 234
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 233 && BOOST_PP_ITERATION_START_2 >= 233
+# define BOOST_PP_ITERATION_2 233
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 232 && BOOST_PP_ITERATION_START_2 >= 232
+# define BOOST_PP_ITERATION_2 232
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 231 && BOOST_PP_ITERATION_START_2 >= 231
+# define BOOST_PP_ITERATION_2 231
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 230 && BOOST_PP_ITERATION_START_2 >= 230
+# define BOOST_PP_ITERATION_2 230
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 229 && BOOST_PP_ITERATION_START_2 >= 229
+# define BOOST_PP_ITERATION_2 229
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 228 && BOOST_PP_ITERATION_START_2 >= 228
+# define BOOST_PP_ITERATION_2 228
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 227 && BOOST_PP_ITERATION_START_2 >= 227
+# define BOOST_PP_ITERATION_2 227
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 226 && BOOST_PP_ITERATION_START_2 >= 226
+# define BOOST_PP_ITERATION_2 226
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 225 && BOOST_PP_ITERATION_START_2 >= 225
+# define BOOST_PP_ITERATION_2 225
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 224 && BOOST_PP_ITERATION_START_2 >= 224
+# define BOOST_PP_ITERATION_2 224
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 223 && BOOST_PP_ITERATION_START_2 >= 223
+# define BOOST_PP_ITERATION_2 223
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 222 && BOOST_PP_ITERATION_START_2 >= 222
+# define BOOST_PP_ITERATION_2 222
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 221 && BOOST_PP_ITERATION_START_2 >= 221
+# define BOOST_PP_ITERATION_2 221
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 220 && BOOST_PP_ITERATION_START_2 >= 220
+# define BOOST_PP_ITERATION_2 220
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 219 && BOOST_PP_ITERATION_START_2 >= 219
+# define BOOST_PP_ITERATION_2 219
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 218 && BOOST_PP_ITERATION_START_2 >= 218
+# define BOOST_PP_ITERATION_2 218
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 217 && BOOST_PP_ITERATION_START_2 >= 217
+# define BOOST_PP_ITERATION_2 217
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 216 && BOOST_PP_ITERATION_START_2 >= 216
+# define BOOST_PP_ITERATION_2 216
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 215 && BOOST_PP_ITERATION_START_2 >= 215
+# define BOOST_PP_ITERATION_2 215
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 214 && BOOST_PP_ITERATION_START_2 >= 214
+# define BOOST_PP_ITERATION_2 214
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 213 && BOOST_PP_ITERATION_START_2 >= 213
+# define BOOST_PP_ITERATION_2 213
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 212 && BOOST_PP_ITERATION_START_2 >= 212
+# define BOOST_PP_ITERATION_2 212
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 211 && BOOST_PP_ITERATION_START_2 >= 211
+# define BOOST_PP_ITERATION_2 211
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 210 && BOOST_PP_ITERATION_START_2 >= 210
+# define BOOST_PP_ITERATION_2 210
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 209 && BOOST_PP_ITERATION_START_2 >= 209
+# define BOOST_PP_ITERATION_2 209
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 208 && BOOST_PP_ITERATION_START_2 >= 208
+# define BOOST_PP_ITERATION_2 208
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 207 && BOOST_PP_ITERATION_START_2 >= 207
+# define BOOST_PP_ITERATION_2 207
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 206 && BOOST_PP_ITERATION_START_2 >= 206
+# define BOOST_PP_ITERATION_2 206
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 205 && BOOST_PP_ITERATION_START_2 >= 205
+# define BOOST_PP_ITERATION_2 205
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 204 && BOOST_PP_ITERATION_START_2 >= 204
+# define BOOST_PP_ITERATION_2 204
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 203 && BOOST_PP_ITERATION_START_2 >= 203
+# define BOOST_PP_ITERATION_2 203
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 202 && BOOST_PP_ITERATION_START_2 >= 202
+# define BOOST_PP_ITERATION_2 202
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 201 && BOOST_PP_ITERATION_START_2 >= 201
+# define BOOST_PP_ITERATION_2 201
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 200 && BOOST_PP_ITERATION_START_2 >= 200
+# define BOOST_PP_ITERATION_2 200
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 199 && BOOST_PP_ITERATION_START_2 >= 199
+# define BOOST_PP_ITERATION_2 199
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 198 && BOOST_PP_ITERATION_START_2 >= 198
+# define BOOST_PP_ITERATION_2 198
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 197 && BOOST_PP_ITERATION_START_2 >= 197
+# define BOOST_PP_ITERATION_2 197
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 196 && BOOST_PP_ITERATION_START_2 >= 196
+# define BOOST_PP_ITERATION_2 196
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 195 && BOOST_PP_ITERATION_START_2 >= 195
+# define BOOST_PP_ITERATION_2 195
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 194 && BOOST_PP_ITERATION_START_2 >= 194
+# define BOOST_PP_ITERATION_2 194
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 193 && BOOST_PP_ITERATION_START_2 >= 193
+# define BOOST_PP_ITERATION_2 193
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 192 && BOOST_PP_ITERATION_START_2 >= 192
+# define BOOST_PP_ITERATION_2 192
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 191 && BOOST_PP_ITERATION_START_2 >= 191
+# define BOOST_PP_ITERATION_2 191
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 190 && BOOST_PP_ITERATION_START_2 >= 190
+# define BOOST_PP_ITERATION_2 190
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 189 && BOOST_PP_ITERATION_START_2 >= 189
+# define BOOST_PP_ITERATION_2 189
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 188 && BOOST_PP_ITERATION_START_2 >= 188
+# define BOOST_PP_ITERATION_2 188
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 187 && BOOST_PP_ITERATION_START_2 >= 187
+# define BOOST_PP_ITERATION_2 187
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 186 && BOOST_PP_ITERATION_START_2 >= 186
+# define BOOST_PP_ITERATION_2 186
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 185 && BOOST_PP_ITERATION_START_2 >= 185
+# define BOOST_PP_ITERATION_2 185
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 184 && BOOST_PP_ITERATION_START_2 >= 184
+# define BOOST_PP_ITERATION_2 184
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 183 && BOOST_PP_ITERATION_START_2 >= 183
+# define BOOST_PP_ITERATION_2 183
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 182 && BOOST_PP_ITERATION_START_2 >= 182
+# define BOOST_PP_ITERATION_2 182
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 181 && BOOST_PP_ITERATION_START_2 >= 181
+# define BOOST_PP_ITERATION_2 181
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 180 && BOOST_PP_ITERATION_START_2 >= 180
+# define BOOST_PP_ITERATION_2 180
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 179 && BOOST_PP_ITERATION_START_2 >= 179
+# define BOOST_PP_ITERATION_2 179
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 178 && BOOST_PP_ITERATION_START_2 >= 178
+# define BOOST_PP_ITERATION_2 178
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 177 && BOOST_PP_ITERATION_START_2 >= 177
+# define BOOST_PP_ITERATION_2 177
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 176 && BOOST_PP_ITERATION_START_2 >= 176
+# define BOOST_PP_ITERATION_2 176
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 175 && BOOST_PP_ITERATION_START_2 >= 175
+# define BOOST_PP_ITERATION_2 175
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 174 && BOOST_PP_ITERATION_START_2 >= 174
+# define BOOST_PP_ITERATION_2 174
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 173 && BOOST_PP_ITERATION_START_2 >= 173
+# define BOOST_PP_ITERATION_2 173
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 172 && BOOST_PP_ITERATION_START_2 >= 172
+# define BOOST_PP_ITERATION_2 172
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 171 && BOOST_PP_ITERATION_START_2 >= 171
+# define BOOST_PP_ITERATION_2 171
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 170 && BOOST_PP_ITERATION_START_2 >= 170
+# define BOOST_PP_ITERATION_2 170
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 169 && BOOST_PP_ITERATION_START_2 >= 169
+# define BOOST_PP_ITERATION_2 169
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 168 && BOOST_PP_ITERATION_START_2 >= 168
+# define BOOST_PP_ITERATION_2 168
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 167 && BOOST_PP_ITERATION_START_2 >= 167
+# define BOOST_PP_ITERATION_2 167
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 166 && BOOST_PP_ITERATION_START_2 >= 166
+# define BOOST_PP_ITERATION_2 166
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 165 && BOOST_PP_ITERATION_START_2 >= 165
+# define BOOST_PP_ITERATION_2 165
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 164 && BOOST_PP_ITERATION_START_2 >= 164
+# define BOOST_PP_ITERATION_2 164
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 163 && BOOST_PP_ITERATION_START_2 >= 163
+# define BOOST_PP_ITERATION_2 163
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 162 && BOOST_PP_ITERATION_START_2 >= 162
+# define BOOST_PP_ITERATION_2 162
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 161 && BOOST_PP_ITERATION_START_2 >= 161
+# define BOOST_PP_ITERATION_2 161
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 160 && BOOST_PP_ITERATION_START_2 >= 160
+# define BOOST_PP_ITERATION_2 160
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 159 && BOOST_PP_ITERATION_START_2 >= 159
+# define BOOST_PP_ITERATION_2 159
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 158 && BOOST_PP_ITERATION_START_2 >= 158
+# define BOOST_PP_ITERATION_2 158
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 157 && BOOST_PP_ITERATION_START_2 >= 157
+# define BOOST_PP_ITERATION_2 157
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 156 && BOOST_PP_ITERATION_START_2 >= 156
+# define BOOST_PP_ITERATION_2 156
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 155 && BOOST_PP_ITERATION_START_2 >= 155
+# define BOOST_PP_ITERATION_2 155
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 154 && BOOST_PP_ITERATION_START_2 >= 154
+# define BOOST_PP_ITERATION_2 154
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 153 && BOOST_PP_ITERATION_START_2 >= 153
+# define BOOST_PP_ITERATION_2 153
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 152 && BOOST_PP_ITERATION_START_2 >= 152
+# define BOOST_PP_ITERATION_2 152
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 151 && BOOST_PP_ITERATION_START_2 >= 151
+# define BOOST_PP_ITERATION_2 151
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 150 && BOOST_PP_ITERATION_START_2 >= 150
+# define BOOST_PP_ITERATION_2 150
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 149 && BOOST_PP_ITERATION_START_2 >= 149
+# define BOOST_PP_ITERATION_2 149
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 148 && BOOST_PP_ITERATION_START_2 >= 148
+# define BOOST_PP_ITERATION_2 148
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 147 && BOOST_PP_ITERATION_START_2 >= 147
+# define BOOST_PP_ITERATION_2 147
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 146 && BOOST_PP_ITERATION_START_2 >= 146
+# define BOOST_PP_ITERATION_2 146
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 145 && BOOST_PP_ITERATION_START_2 >= 145
+# define BOOST_PP_ITERATION_2 145
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 144 && BOOST_PP_ITERATION_START_2 >= 144
+# define BOOST_PP_ITERATION_2 144
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 143 && BOOST_PP_ITERATION_START_2 >= 143
+# define BOOST_PP_ITERATION_2 143
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 142 && BOOST_PP_ITERATION_START_2 >= 142
+# define BOOST_PP_ITERATION_2 142
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 141 && BOOST_PP_ITERATION_START_2 >= 141
+# define BOOST_PP_ITERATION_2 141
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 140 && BOOST_PP_ITERATION_START_2 >= 140
+# define BOOST_PP_ITERATION_2 140
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 139 && BOOST_PP_ITERATION_START_2 >= 139
+# define BOOST_PP_ITERATION_2 139
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 138 && BOOST_PP_ITERATION_START_2 >= 138
+# define BOOST_PP_ITERATION_2 138
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 137 && BOOST_PP_ITERATION_START_2 >= 137
+# define BOOST_PP_ITERATION_2 137
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 136 && BOOST_PP_ITERATION_START_2 >= 136
+# define BOOST_PP_ITERATION_2 136
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 135 && BOOST_PP_ITERATION_START_2 >= 135
+# define BOOST_PP_ITERATION_2 135
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 134 && BOOST_PP_ITERATION_START_2 >= 134
+# define BOOST_PP_ITERATION_2 134
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 133 && BOOST_PP_ITERATION_START_2 >= 133
+# define BOOST_PP_ITERATION_2 133
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 132 && BOOST_PP_ITERATION_START_2 >= 132
+# define BOOST_PP_ITERATION_2 132
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 131 && BOOST_PP_ITERATION_START_2 >= 131
+# define BOOST_PP_ITERATION_2 131
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 130 && BOOST_PP_ITERATION_START_2 >= 130
+# define BOOST_PP_ITERATION_2 130
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 129 && BOOST_PP_ITERATION_START_2 >= 129
+# define BOOST_PP_ITERATION_2 129
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 128 && BOOST_PP_ITERATION_START_2 >= 128
+# define BOOST_PP_ITERATION_2 128
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 127 && BOOST_PP_ITERATION_START_2 >= 127
+# define BOOST_PP_ITERATION_2 127
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 126 && BOOST_PP_ITERATION_START_2 >= 126
+# define BOOST_PP_ITERATION_2 126
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 125 && BOOST_PP_ITERATION_START_2 >= 125
+# define BOOST_PP_ITERATION_2 125
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 124 && BOOST_PP_ITERATION_START_2 >= 124
+# define BOOST_PP_ITERATION_2 124
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 123 && BOOST_PP_ITERATION_START_2 >= 123
+# define BOOST_PP_ITERATION_2 123
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 122 && BOOST_PP_ITERATION_START_2 >= 122
+# define BOOST_PP_ITERATION_2 122
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 121 && BOOST_PP_ITERATION_START_2 >= 121
+# define BOOST_PP_ITERATION_2 121
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 120 && BOOST_PP_ITERATION_START_2 >= 120
+# define BOOST_PP_ITERATION_2 120
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 119 && BOOST_PP_ITERATION_START_2 >= 119
+# define BOOST_PP_ITERATION_2 119
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 118 && BOOST_PP_ITERATION_START_2 >= 118
+# define BOOST_PP_ITERATION_2 118
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 117 && BOOST_PP_ITERATION_START_2 >= 117
+# define BOOST_PP_ITERATION_2 117
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 116 && BOOST_PP_ITERATION_START_2 >= 116
+# define BOOST_PP_ITERATION_2 116
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 115 && BOOST_PP_ITERATION_START_2 >= 115
+# define BOOST_PP_ITERATION_2 115
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 114 && BOOST_PP_ITERATION_START_2 >= 114
+# define BOOST_PP_ITERATION_2 114
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 113 && BOOST_PP_ITERATION_START_2 >= 113
+# define BOOST_PP_ITERATION_2 113
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 112 && BOOST_PP_ITERATION_START_2 >= 112
+# define BOOST_PP_ITERATION_2 112
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 111 && BOOST_PP_ITERATION_START_2 >= 111
+# define BOOST_PP_ITERATION_2 111
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 110 && BOOST_PP_ITERATION_START_2 >= 110
+# define BOOST_PP_ITERATION_2 110
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 109 && BOOST_PP_ITERATION_START_2 >= 109
+# define BOOST_PP_ITERATION_2 109
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 108 && BOOST_PP_ITERATION_START_2 >= 108
+# define BOOST_PP_ITERATION_2 108
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 107 && BOOST_PP_ITERATION_START_2 >= 107
+# define BOOST_PP_ITERATION_2 107
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 106 && BOOST_PP_ITERATION_START_2 >= 106
+# define BOOST_PP_ITERATION_2 106
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 105 && BOOST_PP_ITERATION_START_2 >= 105
+# define BOOST_PP_ITERATION_2 105
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 104 && BOOST_PP_ITERATION_START_2 >= 104
+# define BOOST_PP_ITERATION_2 104
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 103 && BOOST_PP_ITERATION_START_2 >= 103
+# define BOOST_PP_ITERATION_2 103
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 102 && BOOST_PP_ITERATION_START_2 >= 102
+# define BOOST_PP_ITERATION_2 102
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 101 && BOOST_PP_ITERATION_START_2 >= 101
+# define BOOST_PP_ITERATION_2 101
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 100 && BOOST_PP_ITERATION_START_2 >= 100
+# define BOOST_PP_ITERATION_2 100
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 99 && BOOST_PP_ITERATION_START_2 >= 99
+# define BOOST_PP_ITERATION_2 99
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 98 && BOOST_PP_ITERATION_START_2 >= 98
+# define BOOST_PP_ITERATION_2 98
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 97 && BOOST_PP_ITERATION_START_2 >= 97
+# define BOOST_PP_ITERATION_2 97
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 96 && BOOST_PP_ITERATION_START_2 >= 96
+# define BOOST_PP_ITERATION_2 96
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 95 && BOOST_PP_ITERATION_START_2 >= 95
+# define BOOST_PP_ITERATION_2 95
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 94 && BOOST_PP_ITERATION_START_2 >= 94
+# define BOOST_PP_ITERATION_2 94
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 93 && BOOST_PP_ITERATION_START_2 >= 93
+# define BOOST_PP_ITERATION_2 93
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 92 && BOOST_PP_ITERATION_START_2 >= 92
+# define BOOST_PP_ITERATION_2 92
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 91 && BOOST_PP_ITERATION_START_2 >= 91
+# define BOOST_PP_ITERATION_2 91
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 90 && BOOST_PP_ITERATION_START_2 >= 90
+# define BOOST_PP_ITERATION_2 90
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 89 && BOOST_PP_ITERATION_START_2 >= 89
+# define BOOST_PP_ITERATION_2 89
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 88 && BOOST_PP_ITERATION_START_2 >= 88
+# define BOOST_PP_ITERATION_2 88
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 87 && BOOST_PP_ITERATION_START_2 >= 87
+# define BOOST_PP_ITERATION_2 87
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 86 && BOOST_PP_ITERATION_START_2 >= 86
+# define BOOST_PP_ITERATION_2 86
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 85 && BOOST_PP_ITERATION_START_2 >= 85
+# define BOOST_PP_ITERATION_2 85
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 84 && BOOST_PP_ITERATION_START_2 >= 84
+# define BOOST_PP_ITERATION_2 84
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 83 && BOOST_PP_ITERATION_START_2 >= 83
+# define BOOST_PP_ITERATION_2 83
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 82 && BOOST_PP_ITERATION_START_2 >= 82
+# define BOOST_PP_ITERATION_2 82
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 81 && BOOST_PP_ITERATION_START_2 >= 81
+# define BOOST_PP_ITERATION_2 81
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 80 && BOOST_PP_ITERATION_START_2 >= 80
+# define BOOST_PP_ITERATION_2 80
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 79 && BOOST_PP_ITERATION_START_2 >= 79
+# define BOOST_PP_ITERATION_2 79
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 78 && BOOST_PP_ITERATION_START_2 >= 78
+# define BOOST_PP_ITERATION_2 78
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 77 && BOOST_PP_ITERATION_START_2 >= 77
+# define BOOST_PP_ITERATION_2 77
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 76 && BOOST_PP_ITERATION_START_2 >= 76
+# define BOOST_PP_ITERATION_2 76
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 75 && BOOST_PP_ITERATION_START_2 >= 75
+# define BOOST_PP_ITERATION_2 75
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 74 && BOOST_PP_ITERATION_START_2 >= 74
+# define BOOST_PP_ITERATION_2 74
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 73 && BOOST_PP_ITERATION_START_2 >= 73
+# define BOOST_PP_ITERATION_2 73
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 72 && BOOST_PP_ITERATION_START_2 >= 72
+# define BOOST_PP_ITERATION_2 72
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 71 && BOOST_PP_ITERATION_START_2 >= 71
+# define BOOST_PP_ITERATION_2 71
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 70 && BOOST_PP_ITERATION_START_2 >= 70
+# define BOOST_PP_ITERATION_2 70
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 69 && BOOST_PP_ITERATION_START_2 >= 69
+# define BOOST_PP_ITERATION_2 69
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 68 && BOOST_PP_ITERATION_START_2 >= 68
+# define BOOST_PP_ITERATION_2 68
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 67 && BOOST_PP_ITERATION_START_2 >= 67
+# define BOOST_PP_ITERATION_2 67
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 66 && BOOST_PP_ITERATION_START_2 >= 66
+# define BOOST_PP_ITERATION_2 66
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 65 && BOOST_PP_ITERATION_START_2 >= 65
+# define BOOST_PP_ITERATION_2 65
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 64 && BOOST_PP_ITERATION_START_2 >= 64
+# define BOOST_PP_ITERATION_2 64
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 63 && BOOST_PP_ITERATION_START_2 >= 63
+# define BOOST_PP_ITERATION_2 63
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 62 && BOOST_PP_ITERATION_START_2 >= 62
+# define BOOST_PP_ITERATION_2 62
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 61 && BOOST_PP_ITERATION_START_2 >= 61
+# define BOOST_PP_ITERATION_2 61
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 60 && BOOST_PP_ITERATION_START_2 >= 60
+# define BOOST_PP_ITERATION_2 60
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 59 && BOOST_PP_ITERATION_START_2 >= 59
+# define BOOST_PP_ITERATION_2 59
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 58 && BOOST_PP_ITERATION_START_2 >= 58
+# define BOOST_PP_ITERATION_2 58
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 57 && BOOST_PP_ITERATION_START_2 >= 57
+# define BOOST_PP_ITERATION_2 57
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 56 && BOOST_PP_ITERATION_START_2 >= 56
+# define BOOST_PP_ITERATION_2 56
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 55 && BOOST_PP_ITERATION_START_2 >= 55
+# define BOOST_PP_ITERATION_2 55
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 54 && BOOST_PP_ITERATION_START_2 >= 54
+# define BOOST_PP_ITERATION_2 54
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 53 && BOOST_PP_ITERATION_START_2 >= 53
+# define BOOST_PP_ITERATION_2 53
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 52 && BOOST_PP_ITERATION_START_2 >= 52
+# define BOOST_PP_ITERATION_2 52
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 51 && BOOST_PP_ITERATION_START_2 >= 51
+# define BOOST_PP_ITERATION_2 51
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 50 && BOOST_PP_ITERATION_START_2 >= 50
+# define BOOST_PP_ITERATION_2 50
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 49 && BOOST_PP_ITERATION_START_2 >= 49
+# define BOOST_PP_ITERATION_2 49
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 48 && BOOST_PP_ITERATION_START_2 >= 48
+# define BOOST_PP_ITERATION_2 48
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 47 && BOOST_PP_ITERATION_START_2 >= 47
+# define BOOST_PP_ITERATION_2 47
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 46 && BOOST_PP_ITERATION_START_2 >= 46
+# define BOOST_PP_ITERATION_2 46
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 45 && BOOST_PP_ITERATION_START_2 >= 45
+# define BOOST_PP_ITERATION_2 45
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 44 && BOOST_PP_ITERATION_START_2 >= 44
+# define BOOST_PP_ITERATION_2 44
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 43 && BOOST_PP_ITERATION_START_2 >= 43
+# define BOOST_PP_ITERATION_2 43
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 42 && BOOST_PP_ITERATION_START_2 >= 42
+# define BOOST_PP_ITERATION_2 42
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 41 && BOOST_PP_ITERATION_START_2 >= 41
+# define BOOST_PP_ITERATION_2 41
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 40 && BOOST_PP_ITERATION_START_2 >= 40
+# define BOOST_PP_ITERATION_2 40
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 39 && BOOST_PP_ITERATION_START_2 >= 39
+# define BOOST_PP_ITERATION_2 39
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 38 && BOOST_PP_ITERATION_START_2 >= 38
+# define BOOST_PP_ITERATION_2 38
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 37 && BOOST_PP_ITERATION_START_2 >= 37
+# define BOOST_PP_ITERATION_2 37
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 36 && BOOST_PP_ITERATION_START_2 >= 36
+# define BOOST_PP_ITERATION_2 36
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 35 && BOOST_PP_ITERATION_START_2 >= 35
+# define BOOST_PP_ITERATION_2 35
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 34 && BOOST_PP_ITERATION_START_2 >= 34
+# define BOOST_PP_ITERATION_2 34
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 33 && BOOST_PP_ITERATION_START_2 >= 33
+# define BOOST_PP_ITERATION_2 33
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 32 && BOOST_PP_ITERATION_START_2 >= 32
+# define BOOST_PP_ITERATION_2 32
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 31 && BOOST_PP_ITERATION_START_2 >= 31
+# define BOOST_PP_ITERATION_2 31
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 30 && BOOST_PP_ITERATION_START_2 >= 30
+# define BOOST_PP_ITERATION_2 30
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 29 && BOOST_PP_ITERATION_START_2 >= 29
+# define BOOST_PP_ITERATION_2 29
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 28 && BOOST_PP_ITERATION_START_2 >= 28
+# define BOOST_PP_ITERATION_2 28
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 27 && BOOST_PP_ITERATION_START_2 >= 27
+# define BOOST_PP_ITERATION_2 27
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 26 && BOOST_PP_ITERATION_START_2 >= 26
+# define BOOST_PP_ITERATION_2 26
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 25 && BOOST_PP_ITERATION_START_2 >= 25
+# define BOOST_PP_ITERATION_2 25
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 24 && BOOST_PP_ITERATION_START_2 >= 24
+# define BOOST_PP_ITERATION_2 24
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 23 && BOOST_PP_ITERATION_START_2 >= 23
+# define BOOST_PP_ITERATION_2 23
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 22 && BOOST_PP_ITERATION_START_2 >= 22
+# define BOOST_PP_ITERATION_2 22
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 21 && BOOST_PP_ITERATION_START_2 >= 21
+# define BOOST_PP_ITERATION_2 21
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 20 && BOOST_PP_ITERATION_START_2 >= 20
+# define BOOST_PP_ITERATION_2 20
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 19 && BOOST_PP_ITERATION_START_2 >= 19
+# define BOOST_PP_ITERATION_2 19
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 18 && BOOST_PP_ITERATION_START_2 >= 18
+# define BOOST_PP_ITERATION_2 18
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 17 && BOOST_PP_ITERATION_START_2 >= 17
+# define BOOST_PP_ITERATION_2 17
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 16 && BOOST_PP_ITERATION_START_2 >= 16
+# define BOOST_PP_ITERATION_2 16
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 15 && BOOST_PP_ITERATION_START_2 >= 15
+# define BOOST_PP_ITERATION_2 15
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 14 && BOOST_PP_ITERATION_START_2 >= 14
+# define BOOST_PP_ITERATION_2 14
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 13 && BOOST_PP_ITERATION_START_2 >= 13
+# define BOOST_PP_ITERATION_2 13
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 12 && BOOST_PP_ITERATION_START_2 >= 12
+# define BOOST_PP_ITERATION_2 12
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 11 && BOOST_PP_ITERATION_START_2 >= 11
+# define BOOST_PP_ITERATION_2 11
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 10 && BOOST_PP_ITERATION_START_2 >= 10
+# define BOOST_PP_ITERATION_2 10
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 9 && BOOST_PP_ITERATION_START_2 >= 9
+# define BOOST_PP_ITERATION_2 9
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 8 && BOOST_PP_ITERATION_START_2 >= 8
+# define BOOST_PP_ITERATION_2 8
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 7 && BOOST_PP_ITERATION_START_2 >= 7
+# define BOOST_PP_ITERATION_2 7
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 6 && BOOST_PP_ITERATION_START_2 >= 6
+# define BOOST_PP_ITERATION_2 6
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 5 && BOOST_PP_ITERATION_START_2 >= 5
+# define BOOST_PP_ITERATION_2 5
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 4 && BOOST_PP_ITERATION_START_2 >= 4
+# define BOOST_PP_ITERATION_2 4
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 3 && BOOST_PP_ITERATION_START_2 >= 3
+# define BOOST_PP_ITERATION_2 3
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 2 && BOOST_PP_ITERATION_START_2 >= 2
+# define BOOST_PP_ITERATION_2 2
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 1 && BOOST_PP_ITERATION_START_2 >= 1
+# define BOOST_PP_ITERATION_2 1
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 0 && BOOST_PP_ITERATION_START_2 >= 0
+# define BOOST_PP_ITERATION_2 0
+# include BOOST_PP_FILENAME_2
+# undef BOOST_PP_ITERATION_2
+# endif
diff --git a/boost/boost/preprocessor/iteration/detail/iter/reverse3.hpp b/boost/boost/preprocessor/iteration/detail/iter/reverse3.hpp
new file mode 100644
index 00000000000..0a655149c9c
--- /dev/null
+++ b/boost/boost/preprocessor/iteration/detail/iter/reverse3.hpp
@@ -0,0 +1,1296 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# if BOOST_PP_ITERATION_FINISH_3 <= 256 && BOOST_PP_ITERATION_START_3 >= 256
+# define BOOST_PP_ITERATION_3 256
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 255 && BOOST_PP_ITERATION_START_3 >= 255
+# define BOOST_PP_ITERATION_3 255
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 254 && BOOST_PP_ITERATION_START_3 >= 254
+# define BOOST_PP_ITERATION_3 254
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 253 && BOOST_PP_ITERATION_START_3 >= 253
+# define BOOST_PP_ITERATION_3 253
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 252 && BOOST_PP_ITERATION_START_3 >= 252
+# define BOOST_PP_ITERATION_3 252
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 251 && BOOST_PP_ITERATION_START_3 >= 251
+# define BOOST_PP_ITERATION_3 251
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 250 && BOOST_PP_ITERATION_START_3 >= 250
+# define BOOST_PP_ITERATION_3 250
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 249 && BOOST_PP_ITERATION_START_3 >= 249
+# define BOOST_PP_ITERATION_3 249
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 248 && BOOST_PP_ITERATION_START_3 >= 248
+# define BOOST_PP_ITERATION_3 248
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 247 && BOOST_PP_ITERATION_START_3 >= 247
+# define BOOST_PP_ITERATION_3 247
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 246 && BOOST_PP_ITERATION_START_3 >= 246
+# define BOOST_PP_ITERATION_3 246
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 245 && BOOST_PP_ITERATION_START_3 >= 245
+# define BOOST_PP_ITERATION_3 245
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 244 && BOOST_PP_ITERATION_START_3 >= 244
+# define BOOST_PP_ITERATION_3 244
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 243 && BOOST_PP_ITERATION_START_3 >= 243
+# define BOOST_PP_ITERATION_3 243
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 242 && BOOST_PP_ITERATION_START_3 >= 242
+# define BOOST_PP_ITERATION_3 242
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 241 && BOOST_PP_ITERATION_START_3 >= 241
+# define BOOST_PP_ITERATION_3 241
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 240 && BOOST_PP_ITERATION_START_3 >= 240
+# define BOOST_PP_ITERATION_3 240
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 239 && BOOST_PP_ITERATION_START_3 >= 239
+# define BOOST_PP_ITERATION_3 239
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 238 && BOOST_PP_ITERATION_START_3 >= 238
+# define BOOST_PP_ITERATION_3 238
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 237 && BOOST_PP_ITERATION_START_3 >= 237
+# define BOOST_PP_ITERATION_3 237
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 236 && BOOST_PP_ITERATION_START_3 >= 236
+# define BOOST_PP_ITERATION_3 236
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 235 && BOOST_PP_ITERATION_START_3 >= 235
+# define BOOST_PP_ITERATION_3 235
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 234 && BOOST_PP_ITERATION_START_3 >= 234
+# define BOOST_PP_ITERATION_3 234
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 233 && BOOST_PP_ITERATION_START_3 >= 233
+# define BOOST_PP_ITERATION_3 233
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 232 && BOOST_PP_ITERATION_START_3 >= 232
+# define BOOST_PP_ITERATION_3 232
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 231 && BOOST_PP_ITERATION_START_3 >= 231
+# define BOOST_PP_ITERATION_3 231
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 230 && BOOST_PP_ITERATION_START_3 >= 230
+# define BOOST_PP_ITERATION_3 230
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 229 && BOOST_PP_ITERATION_START_3 >= 229
+# define BOOST_PP_ITERATION_3 229
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 228 && BOOST_PP_ITERATION_START_3 >= 228
+# define BOOST_PP_ITERATION_3 228
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 227 && BOOST_PP_ITERATION_START_3 >= 227
+# define BOOST_PP_ITERATION_3 227
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 226 && BOOST_PP_ITERATION_START_3 >= 226
+# define BOOST_PP_ITERATION_3 226
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 225 && BOOST_PP_ITERATION_START_3 >= 225
+# define BOOST_PP_ITERATION_3 225
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 224 && BOOST_PP_ITERATION_START_3 >= 224
+# define BOOST_PP_ITERATION_3 224
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 223 && BOOST_PP_ITERATION_START_3 >= 223
+# define BOOST_PP_ITERATION_3 223
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 222 && BOOST_PP_ITERATION_START_3 >= 222
+# define BOOST_PP_ITERATION_3 222
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 221 && BOOST_PP_ITERATION_START_3 >= 221
+# define BOOST_PP_ITERATION_3 221
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 220 && BOOST_PP_ITERATION_START_3 >= 220
+# define BOOST_PP_ITERATION_3 220
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 219 && BOOST_PP_ITERATION_START_3 >= 219
+# define BOOST_PP_ITERATION_3 219
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 218 && BOOST_PP_ITERATION_START_3 >= 218
+# define BOOST_PP_ITERATION_3 218
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 217 && BOOST_PP_ITERATION_START_3 >= 217
+# define BOOST_PP_ITERATION_3 217
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 216 && BOOST_PP_ITERATION_START_3 >= 216
+# define BOOST_PP_ITERATION_3 216
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 215 && BOOST_PP_ITERATION_START_3 >= 215
+# define BOOST_PP_ITERATION_3 215
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 214 && BOOST_PP_ITERATION_START_3 >= 214
+# define BOOST_PP_ITERATION_3 214
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 213 && BOOST_PP_ITERATION_START_3 >= 213
+# define BOOST_PP_ITERATION_3 213
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 212 && BOOST_PP_ITERATION_START_3 >= 212
+# define BOOST_PP_ITERATION_3 212
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 211 && BOOST_PP_ITERATION_START_3 >= 211
+# define BOOST_PP_ITERATION_3 211
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 210 && BOOST_PP_ITERATION_START_3 >= 210
+# define BOOST_PP_ITERATION_3 210
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 209 && BOOST_PP_ITERATION_START_3 >= 209
+# define BOOST_PP_ITERATION_3 209
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 208 && BOOST_PP_ITERATION_START_3 >= 208
+# define BOOST_PP_ITERATION_3 208
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 207 && BOOST_PP_ITERATION_START_3 >= 207
+# define BOOST_PP_ITERATION_3 207
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 206 && BOOST_PP_ITERATION_START_3 >= 206
+# define BOOST_PP_ITERATION_3 206
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 205 && BOOST_PP_ITERATION_START_3 >= 205
+# define BOOST_PP_ITERATION_3 205
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 204 && BOOST_PP_ITERATION_START_3 >= 204
+# define BOOST_PP_ITERATION_3 204
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 203 && BOOST_PP_ITERATION_START_3 >= 203
+# define BOOST_PP_ITERATION_3 203
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 202 && BOOST_PP_ITERATION_START_3 >= 202
+# define BOOST_PP_ITERATION_3 202
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 201 && BOOST_PP_ITERATION_START_3 >= 201
+# define BOOST_PP_ITERATION_3 201
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 200 && BOOST_PP_ITERATION_START_3 >= 200
+# define BOOST_PP_ITERATION_3 200
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 199 && BOOST_PP_ITERATION_START_3 >= 199
+# define BOOST_PP_ITERATION_3 199
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 198 && BOOST_PP_ITERATION_START_3 >= 198
+# define BOOST_PP_ITERATION_3 198
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 197 && BOOST_PP_ITERATION_START_3 >= 197
+# define BOOST_PP_ITERATION_3 197
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 196 && BOOST_PP_ITERATION_START_3 >= 196
+# define BOOST_PP_ITERATION_3 196
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 195 && BOOST_PP_ITERATION_START_3 >= 195
+# define BOOST_PP_ITERATION_3 195
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 194 && BOOST_PP_ITERATION_START_3 >= 194
+# define BOOST_PP_ITERATION_3 194
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 193 && BOOST_PP_ITERATION_START_3 >= 193
+# define BOOST_PP_ITERATION_3 193
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 192 && BOOST_PP_ITERATION_START_3 >= 192
+# define BOOST_PP_ITERATION_3 192
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 191 && BOOST_PP_ITERATION_START_3 >= 191
+# define BOOST_PP_ITERATION_3 191
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 190 && BOOST_PP_ITERATION_START_3 >= 190
+# define BOOST_PP_ITERATION_3 190
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 189 && BOOST_PP_ITERATION_START_3 >= 189
+# define BOOST_PP_ITERATION_3 189
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 188 && BOOST_PP_ITERATION_START_3 >= 188
+# define BOOST_PP_ITERATION_3 188
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 187 && BOOST_PP_ITERATION_START_3 >= 187
+# define BOOST_PP_ITERATION_3 187
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 186 && BOOST_PP_ITERATION_START_3 >= 186
+# define BOOST_PP_ITERATION_3 186
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 185 && BOOST_PP_ITERATION_START_3 >= 185
+# define BOOST_PP_ITERATION_3 185
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 184 && BOOST_PP_ITERATION_START_3 >= 184
+# define BOOST_PP_ITERATION_3 184
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 183 && BOOST_PP_ITERATION_START_3 >= 183
+# define BOOST_PP_ITERATION_3 183
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 182 && BOOST_PP_ITERATION_START_3 >= 182
+# define BOOST_PP_ITERATION_3 182
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 181 && BOOST_PP_ITERATION_START_3 >= 181
+# define BOOST_PP_ITERATION_3 181
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 180 && BOOST_PP_ITERATION_START_3 >= 180
+# define BOOST_PP_ITERATION_3 180
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 179 && BOOST_PP_ITERATION_START_3 >= 179
+# define BOOST_PP_ITERATION_3 179
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 178 && BOOST_PP_ITERATION_START_3 >= 178
+# define BOOST_PP_ITERATION_3 178
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 177 && BOOST_PP_ITERATION_START_3 >= 177
+# define BOOST_PP_ITERATION_3 177
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 176 && BOOST_PP_ITERATION_START_3 >= 176
+# define BOOST_PP_ITERATION_3 176
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 175 && BOOST_PP_ITERATION_START_3 >= 175
+# define BOOST_PP_ITERATION_3 175
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 174 && BOOST_PP_ITERATION_START_3 >= 174
+# define BOOST_PP_ITERATION_3 174
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 173 && BOOST_PP_ITERATION_START_3 >= 173
+# define BOOST_PP_ITERATION_3 173
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 172 && BOOST_PP_ITERATION_START_3 >= 172
+# define BOOST_PP_ITERATION_3 172
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 171 && BOOST_PP_ITERATION_START_3 >= 171
+# define BOOST_PP_ITERATION_3 171
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 170 && BOOST_PP_ITERATION_START_3 >= 170
+# define BOOST_PP_ITERATION_3 170
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 169 && BOOST_PP_ITERATION_START_3 >= 169
+# define BOOST_PP_ITERATION_3 169
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 168 && BOOST_PP_ITERATION_START_3 >= 168
+# define BOOST_PP_ITERATION_3 168
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 167 && BOOST_PP_ITERATION_START_3 >= 167
+# define BOOST_PP_ITERATION_3 167
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 166 && BOOST_PP_ITERATION_START_3 >= 166
+# define BOOST_PP_ITERATION_3 166
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 165 && BOOST_PP_ITERATION_START_3 >= 165
+# define BOOST_PP_ITERATION_3 165
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 164 && BOOST_PP_ITERATION_START_3 >= 164
+# define BOOST_PP_ITERATION_3 164
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 163 && BOOST_PP_ITERATION_START_3 >= 163
+# define BOOST_PP_ITERATION_3 163
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 162 && BOOST_PP_ITERATION_START_3 >= 162
+# define BOOST_PP_ITERATION_3 162
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 161 && BOOST_PP_ITERATION_START_3 >= 161
+# define BOOST_PP_ITERATION_3 161
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 160 && BOOST_PP_ITERATION_START_3 >= 160
+# define BOOST_PP_ITERATION_3 160
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 159 && BOOST_PP_ITERATION_START_3 >= 159
+# define BOOST_PP_ITERATION_3 159
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 158 && BOOST_PP_ITERATION_START_3 >= 158
+# define BOOST_PP_ITERATION_3 158
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 157 && BOOST_PP_ITERATION_START_3 >= 157
+# define BOOST_PP_ITERATION_3 157
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 156 && BOOST_PP_ITERATION_START_3 >= 156
+# define BOOST_PP_ITERATION_3 156
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 155 && BOOST_PP_ITERATION_START_3 >= 155
+# define BOOST_PP_ITERATION_3 155
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 154 && BOOST_PP_ITERATION_START_3 >= 154
+# define BOOST_PP_ITERATION_3 154
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 153 && BOOST_PP_ITERATION_START_3 >= 153
+# define BOOST_PP_ITERATION_3 153
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 152 && BOOST_PP_ITERATION_START_3 >= 152
+# define BOOST_PP_ITERATION_3 152
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 151 && BOOST_PP_ITERATION_START_3 >= 151
+# define BOOST_PP_ITERATION_3 151
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 150 && BOOST_PP_ITERATION_START_3 >= 150
+# define BOOST_PP_ITERATION_3 150
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 149 && BOOST_PP_ITERATION_START_3 >= 149
+# define BOOST_PP_ITERATION_3 149
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 148 && BOOST_PP_ITERATION_START_3 >= 148
+# define BOOST_PP_ITERATION_3 148
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 147 && BOOST_PP_ITERATION_START_3 >= 147
+# define BOOST_PP_ITERATION_3 147
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 146 && BOOST_PP_ITERATION_START_3 >= 146
+# define BOOST_PP_ITERATION_3 146
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 145 && BOOST_PP_ITERATION_START_3 >= 145
+# define BOOST_PP_ITERATION_3 145
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 144 && BOOST_PP_ITERATION_START_3 >= 144
+# define BOOST_PP_ITERATION_3 144
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 143 && BOOST_PP_ITERATION_START_3 >= 143
+# define BOOST_PP_ITERATION_3 143
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 142 && BOOST_PP_ITERATION_START_3 >= 142
+# define BOOST_PP_ITERATION_3 142
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 141 && BOOST_PP_ITERATION_START_3 >= 141
+# define BOOST_PP_ITERATION_3 141
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 140 && BOOST_PP_ITERATION_START_3 >= 140
+# define BOOST_PP_ITERATION_3 140
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 139 && BOOST_PP_ITERATION_START_3 >= 139
+# define BOOST_PP_ITERATION_3 139
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 138 && BOOST_PP_ITERATION_START_3 >= 138
+# define BOOST_PP_ITERATION_3 138
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 137 && BOOST_PP_ITERATION_START_3 >= 137
+# define BOOST_PP_ITERATION_3 137
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 136 && BOOST_PP_ITERATION_START_3 >= 136
+# define BOOST_PP_ITERATION_3 136
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 135 && BOOST_PP_ITERATION_START_3 >= 135
+# define BOOST_PP_ITERATION_3 135
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 134 && BOOST_PP_ITERATION_START_3 >= 134
+# define BOOST_PP_ITERATION_3 134
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 133 && BOOST_PP_ITERATION_START_3 >= 133
+# define BOOST_PP_ITERATION_3 133
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 132 && BOOST_PP_ITERATION_START_3 >= 132
+# define BOOST_PP_ITERATION_3 132
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 131 && BOOST_PP_ITERATION_START_3 >= 131
+# define BOOST_PP_ITERATION_3 131
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 130 && BOOST_PP_ITERATION_START_3 >= 130
+# define BOOST_PP_ITERATION_3 130
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 129 && BOOST_PP_ITERATION_START_3 >= 129
+# define BOOST_PP_ITERATION_3 129
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 128 && BOOST_PP_ITERATION_START_3 >= 128
+# define BOOST_PP_ITERATION_3 128
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 127 && BOOST_PP_ITERATION_START_3 >= 127
+# define BOOST_PP_ITERATION_3 127
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 126 && BOOST_PP_ITERATION_START_3 >= 126
+# define BOOST_PP_ITERATION_3 126
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 125 && BOOST_PP_ITERATION_START_3 >= 125
+# define BOOST_PP_ITERATION_3 125
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 124 && BOOST_PP_ITERATION_START_3 >= 124
+# define BOOST_PP_ITERATION_3 124
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 123 && BOOST_PP_ITERATION_START_3 >= 123
+# define BOOST_PP_ITERATION_3 123
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 122 && BOOST_PP_ITERATION_START_3 >= 122
+# define BOOST_PP_ITERATION_3 122
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 121 && BOOST_PP_ITERATION_START_3 >= 121
+# define BOOST_PP_ITERATION_3 121
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 120 && BOOST_PP_ITERATION_START_3 >= 120
+# define BOOST_PP_ITERATION_3 120
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 119 && BOOST_PP_ITERATION_START_3 >= 119
+# define BOOST_PP_ITERATION_3 119
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 118 && BOOST_PP_ITERATION_START_3 >= 118
+# define BOOST_PP_ITERATION_3 118
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 117 && BOOST_PP_ITERATION_START_3 >= 117
+# define BOOST_PP_ITERATION_3 117
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 116 && BOOST_PP_ITERATION_START_3 >= 116
+# define BOOST_PP_ITERATION_3 116
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 115 && BOOST_PP_ITERATION_START_3 >= 115
+# define BOOST_PP_ITERATION_3 115
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 114 && BOOST_PP_ITERATION_START_3 >= 114
+# define BOOST_PP_ITERATION_3 114
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 113 && BOOST_PP_ITERATION_START_3 >= 113
+# define BOOST_PP_ITERATION_3 113
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 112 && BOOST_PP_ITERATION_START_3 >= 112
+# define BOOST_PP_ITERATION_3 112
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 111 && BOOST_PP_ITERATION_START_3 >= 111
+# define BOOST_PP_ITERATION_3 111
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 110 && BOOST_PP_ITERATION_START_3 >= 110
+# define BOOST_PP_ITERATION_3 110
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 109 && BOOST_PP_ITERATION_START_3 >= 109
+# define BOOST_PP_ITERATION_3 109
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 108 && BOOST_PP_ITERATION_START_3 >= 108
+# define BOOST_PP_ITERATION_3 108
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 107 && BOOST_PP_ITERATION_START_3 >= 107
+# define BOOST_PP_ITERATION_3 107
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 106 && BOOST_PP_ITERATION_START_3 >= 106
+# define BOOST_PP_ITERATION_3 106
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 105 && BOOST_PP_ITERATION_START_3 >= 105
+# define BOOST_PP_ITERATION_3 105
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 104 && BOOST_PP_ITERATION_START_3 >= 104
+# define BOOST_PP_ITERATION_3 104
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 103 && BOOST_PP_ITERATION_START_3 >= 103
+# define BOOST_PP_ITERATION_3 103
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 102 && BOOST_PP_ITERATION_START_3 >= 102
+# define BOOST_PP_ITERATION_3 102
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 101 && BOOST_PP_ITERATION_START_3 >= 101
+# define BOOST_PP_ITERATION_3 101
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 100 && BOOST_PP_ITERATION_START_3 >= 100
+# define BOOST_PP_ITERATION_3 100
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 99 && BOOST_PP_ITERATION_START_3 >= 99
+# define BOOST_PP_ITERATION_3 99
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 98 && BOOST_PP_ITERATION_START_3 >= 98
+# define BOOST_PP_ITERATION_3 98
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 97 && BOOST_PP_ITERATION_START_3 >= 97
+# define BOOST_PP_ITERATION_3 97
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 96 && BOOST_PP_ITERATION_START_3 >= 96
+# define BOOST_PP_ITERATION_3 96
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 95 && BOOST_PP_ITERATION_START_3 >= 95
+# define BOOST_PP_ITERATION_3 95
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 94 && BOOST_PP_ITERATION_START_3 >= 94
+# define BOOST_PP_ITERATION_3 94
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 93 && BOOST_PP_ITERATION_START_3 >= 93
+# define BOOST_PP_ITERATION_3 93
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 92 && BOOST_PP_ITERATION_START_3 >= 92
+# define BOOST_PP_ITERATION_3 92
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 91 && BOOST_PP_ITERATION_START_3 >= 91
+# define BOOST_PP_ITERATION_3 91
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 90 && BOOST_PP_ITERATION_START_3 >= 90
+# define BOOST_PP_ITERATION_3 90
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 89 && BOOST_PP_ITERATION_START_3 >= 89
+# define BOOST_PP_ITERATION_3 89
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 88 && BOOST_PP_ITERATION_START_3 >= 88
+# define BOOST_PP_ITERATION_3 88
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 87 && BOOST_PP_ITERATION_START_3 >= 87
+# define BOOST_PP_ITERATION_3 87
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 86 && BOOST_PP_ITERATION_START_3 >= 86
+# define BOOST_PP_ITERATION_3 86
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 85 && BOOST_PP_ITERATION_START_3 >= 85
+# define BOOST_PP_ITERATION_3 85
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 84 && BOOST_PP_ITERATION_START_3 >= 84
+# define BOOST_PP_ITERATION_3 84
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 83 && BOOST_PP_ITERATION_START_3 >= 83
+# define BOOST_PP_ITERATION_3 83
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 82 && BOOST_PP_ITERATION_START_3 >= 82
+# define BOOST_PP_ITERATION_3 82
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 81 && BOOST_PP_ITERATION_START_3 >= 81
+# define BOOST_PP_ITERATION_3 81
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 80 && BOOST_PP_ITERATION_START_3 >= 80
+# define BOOST_PP_ITERATION_3 80
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 79 && BOOST_PP_ITERATION_START_3 >= 79
+# define BOOST_PP_ITERATION_3 79
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 78 && BOOST_PP_ITERATION_START_3 >= 78
+# define BOOST_PP_ITERATION_3 78
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 77 && BOOST_PP_ITERATION_START_3 >= 77
+# define BOOST_PP_ITERATION_3 77
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 76 && BOOST_PP_ITERATION_START_3 >= 76
+# define BOOST_PP_ITERATION_3 76
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 75 && BOOST_PP_ITERATION_START_3 >= 75
+# define BOOST_PP_ITERATION_3 75
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 74 && BOOST_PP_ITERATION_START_3 >= 74
+# define BOOST_PP_ITERATION_3 74
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 73 && BOOST_PP_ITERATION_START_3 >= 73
+# define BOOST_PP_ITERATION_3 73
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 72 && BOOST_PP_ITERATION_START_3 >= 72
+# define BOOST_PP_ITERATION_3 72
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 71 && BOOST_PP_ITERATION_START_3 >= 71
+# define BOOST_PP_ITERATION_3 71
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 70 && BOOST_PP_ITERATION_START_3 >= 70
+# define BOOST_PP_ITERATION_3 70
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 69 && BOOST_PP_ITERATION_START_3 >= 69
+# define BOOST_PP_ITERATION_3 69
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 68 && BOOST_PP_ITERATION_START_3 >= 68
+# define BOOST_PP_ITERATION_3 68
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 67 && BOOST_PP_ITERATION_START_3 >= 67
+# define BOOST_PP_ITERATION_3 67
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 66 && BOOST_PP_ITERATION_START_3 >= 66
+# define BOOST_PP_ITERATION_3 66
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 65 && BOOST_PP_ITERATION_START_3 >= 65
+# define BOOST_PP_ITERATION_3 65
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 64 && BOOST_PP_ITERATION_START_3 >= 64
+# define BOOST_PP_ITERATION_3 64
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 63 && BOOST_PP_ITERATION_START_3 >= 63
+# define BOOST_PP_ITERATION_3 63
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 62 && BOOST_PP_ITERATION_START_3 >= 62
+# define BOOST_PP_ITERATION_3 62
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 61 && BOOST_PP_ITERATION_START_3 >= 61
+# define BOOST_PP_ITERATION_3 61
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 60 && BOOST_PP_ITERATION_START_3 >= 60
+# define BOOST_PP_ITERATION_3 60
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 59 && BOOST_PP_ITERATION_START_3 >= 59
+# define BOOST_PP_ITERATION_3 59
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 58 && BOOST_PP_ITERATION_START_3 >= 58
+# define BOOST_PP_ITERATION_3 58
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 57 && BOOST_PP_ITERATION_START_3 >= 57
+# define BOOST_PP_ITERATION_3 57
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 56 && BOOST_PP_ITERATION_START_3 >= 56
+# define BOOST_PP_ITERATION_3 56
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 55 && BOOST_PP_ITERATION_START_3 >= 55
+# define BOOST_PP_ITERATION_3 55
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 54 && BOOST_PP_ITERATION_START_3 >= 54
+# define BOOST_PP_ITERATION_3 54
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 53 && BOOST_PP_ITERATION_START_3 >= 53
+# define BOOST_PP_ITERATION_3 53
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 52 && BOOST_PP_ITERATION_START_3 >= 52
+# define BOOST_PP_ITERATION_3 52
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 51 && BOOST_PP_ITERATION_START_3 >= 51
+# define BOOST_PP_ITERATION_3 51
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 50 && BOOST_PP_ITERATION_START_3 >= 50
+# define BOOST_PP_ITERATION_3 50
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 49 && BOOST_PP_ITERATION_START_3 >= 49
+# define BOOST_PP_ITERATION_3 49
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 48 && BOOST_PP_ITERATION_START_3 >= 48
+# define BOOST_PP_ITERATION_3 48
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 47 && BOOST_PP_ITERATION_START_3 >= 47
+# define BOOST_PP_ITERATION_3 47
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 46 && BOOST_PP_ITERATION_START_3 >= 46
+# define BOOST_PP_ITERATION_3 46
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 45 && BOOST_PP_ITERATION_START_3 >= 45
+# define BOOST_PP_ITERATION_3 45
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 44 && BOOST_PP_ITERATION_START_3 >= 44
+# define BOOST_PP_ITERATION_3 44
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 43 && BOOST_PP_ITERATION_START_3 >= 43
+# define BOOST_PP_ITERATION_3 43
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 42 && BOOST_PP_ITERATION_START_3 >= 42
+# define BOOST_PP_ITERATION_3 42
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 41 && BOOST_PP_ITERATION_START_3 >= 41
+# define BOOST_PP_ITERATION_3 41
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 40 && BOOST_PP_ITERATION_START_3 >= 40
+# define BOOST_PP_ITERATION_3 40
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 39 && BOOST_PP_ITERATION_START_3 >= 39
+# define BOOST_PP_ITERATION_3 39
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 38 && BOOST_PP_ITERATION_START_3 >= 38
+# define BOOST_PP_ITERATION_3 38
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 37 && BOOST_PP_ITERATION_START_3 >= 37
+# define BOOST_PP_ITERATION_3 37
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 36 && BOOST_PP_ITERATION_START_3 >= 36
+# define BOOST_PP_ITERATION_3 36
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 35 && BOOST_PP_ITERATION_START_3 >= 35
+# define BOOST_PP_ITERATION_3 35
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 34 && BOOST_PP_ITERATION_START_3 >= 34
+# define BOOST_PP_ITERATION_3 34
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 33 && BOOST_PP_ITERATION_START_3 >= 33
+# define BOOST_PP_ITERATION_3 33
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 32 && BOOST_PP_ITERATION_START_3 >= 32
+# define BOOST_PP_ITERATION_3 32
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 31 && BOOST_PP_ITERATION_START_3 >= 31
+# define BOOST_PP_ITERATION_3 31
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 30 && BOOST_PP_ITERATION_START_3 >= 30
+# define BOOST_PP_ITERATION_3 30
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 29 && BOOST_PP_ITERATION_START_3 >= 29
+# define BOOST_PP_ITERATION_3 29
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 28 && BOOST_PP_ITERATION_START_3 >= 28
+# define BOOST_PP_ITERATION_3 28
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 27 && BOOST_PP_ITERATION_START_3 >= 27
+# define BOOST_PP_ITERATION_3 27
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 26 && BOOST_PP_ITERATION_START_3 >= 26
+# define BOOST_PP_ITERATION_3 26
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 25 && BOOST_PP_ITERATION_START_3 >= 25
+# define BOOST_PP_ITERATION_3 25
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 24 && BOOST_PP_ITERATION_START_3 >= 24
+# define BOOST_PP_ITERATION_3 24
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 23 && BOOST_PP_ITERATION_START_3 >= 23
+# define BOOST_PP_ITERATION_3 23
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 22 && BOOST_PP_ITERATION_START_3 >= 22
+# define BOOST_PP_ITERATION_3 22
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 21 && BOOST_PP_ITERATION_START_3 >= 21
+# define BOOST_PP_ITERATION_3 21
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 20 && BOOST_PP_ITERATION_START_3 >= 20
+# define BOOST_PP_ITERATION_3 20
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 19 && BOOST_PP_ITERATION_START_3 >= 19
+# define BOOST_PP_ITERATION_3 19
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 18 && BOOST_PP_ITERATION_START_3 >= 18
+# define BOOST_PP_ITERATION_3 18
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 17 && BOOST_PP_ITERATION_START_3 >= 17
+# define BOOST_PP_ITERATION_3 17
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 16 && BOOST_PP_ITERATION_START_3 >= 16
+# define BOOST_PP_ITERATION_3 16
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 15 && BOOST_PP_ITERATION_START_3 >= 15
+# define BOOST_PP_ITERATION_3 15
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 14 && BOOST_PP_ITERATION_START_3 >= 14
+# define BOOST_PP_ITERATION_3 14
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 13 && BOOST_PP_ITERATION_START_3 >= 13
+# define BOOST_PP_ITERATION_3 13
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 12 && BOOST_PP_ITERATION_START_3 >= 12
+# define BOOST_PP_ITERATION_3 12
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 11 && BOOST_PP_ITERATION_START_3 >= 11
+# define BOOST_PP_ITERATION_3 11
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 10 && BOOST_PP_ITERATION_START_3 >= 10
+# define BOOST_PP_ITERATION_3 10
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 9 && BOOST_PP_ITERATION_START_3 >= 9
+# define BOOST_PP_ITERATION_3 9
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 8 && BOOST_PP_ITERATION_START_3 >= 8
+# define BOOST_PP_ITERATION_3 8
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 7 && BOOST_PP_ITERATION_START_3 >= 7
+# define BOOST_PP_ITERATION_3 7
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 6 && BOOST_PP_ITERATION_START_3 >= 6
+# define BOOST_PP_ITERATION_3 6
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 5 && BOOST_PP_ITERATION_START_3 >= 5
+# define BOOST_PP_ITERATION_3 5
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 4 && BOOST_PP_ITERATION_START_3 >= 4
+# define BOOST_PP_ITERATION_3 4
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 3 && BOOST_PP_ITERATION_START_3 >= 3
+# define BOOST_PP_ITERATION_3 3
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 2 && BOOST_PP_ITERATION_START_3 >= 2
+# define BOOST_PP_ITERATION_3 2
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 1 && BOOST_PP_ITERATION_START_3 >= 1
+# define BOOST_PP_ITERATION_3 1
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 0 && BOOST_PP_ITERATION_START_3 >= 0
+# define BOOST_PP_ITERATION_3 0
+# include BOOST_PP_FILENAME_3
+# undef BOOST_PP_ITERATION_3
+# endif
diff --git a/boost/boost/preprocessor/iteration/detail/iter/reverse4.hpp b/boost/boost/preprocessor/iteration/detail/iter/reverse4.hpp
new file mode 100644
index 00000000000..3bcfba04e0c
--- /dev/null
+++ b/boost/boost/preprocessor/iteration/detail/iter/reverse4.hpp
@@ -0,0 +1,1296 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# if BOOST_PP_ITERATION_FINISH_4 <= 256 && BOOST_PP_ITERATION_START_4 >= 256
+# define BOOST_PP_ITERATION_4 256
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 255 && BOOST_PP_ITERATION_START_4 >= 255
+# define BOOST_PP_ITERATION_4 255
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 254 && BOOST_PP_ITERATION_START_4 >= 254
+# define BOOST_PP_ITERATION_4 254
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 253 && BOOST_PP_ITERATION_START_4 >= 253
+# define BOOST_PP_ITERATION_4 253
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 252 && BOOST_PP_ITERATION_START_4 >= 252
+# define BOOST_PP_ITERATION_4 252
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 251 && BOOST_PP_ITERATION_START_4 >= 251
+# define BOOST_PP_ITERATION_4 251
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 250 && BOOST_PP_ITERATION_START_4 >= 250
+# define BOOST_PP_ITERATION_4 250
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 249 && BOOST_PP_ITERATION_START_4 >= 249
+# define BOOST_PP_ITERATION_4 249
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 248 && BOOST_PP_ITERATION_START_4 >= 248
+# define BOOST_PP_ITERATION_4 248
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 247 && BOOST_PP_ITERATION_START_4 >= 247
+# define BOOST_PP_ITERATION_4 247
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 246 && BOOST_PP_ITERATION_START_4 >= 246
+# define BOOST_PP_ITERATION_4 246
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 245 && BOOST_PP_ITERATION_START_4 >= 245
+# define BOOST_PP_ITERATION_4 245
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 244 && BOOST_PP_ITERATION_START_4 >= 244
+# define BOOST_PP_ITERATION_4 244
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 243 && BOOST_PP_ITERATION_START_4 >= 243
+# define BOOST_PP_ITERATION_4 243
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 242 && BOOST_PP_ITERATION_START_4 >= 242
+# define BOOST_PP_ITERATION_4 242
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 241 && BOOST_PP_ITERATION_START_4 >= 241
+# define BOOST_PP_ITERATION_4 241
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 240 && BOOST_PP_ITERATION_START_4 >= 240
+# define BOOST_PP_ITERATION_4 240
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 239 && BOOST_PP_ITERATION_START_4 >= 239
+# define BOOST_PP_ITERATION_4 239
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 238 && BOOST_PP_ITERATION_START_4 >= 238
+# define BOOST_PP_ITERATION_4 238
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 237 && BOOST_PP_ITERATION_START_4 >= 237
+# define BOOST_PP_ITERATION_4 237
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 236 && BOOST_PP_ITERATION_START_4 >= 236
+# define BOOST_PP_ITERATION_4 236
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 235 && BOOST_PP_ITERATION_START_4 >= 235
+# define BOOST_PP_ITERATION_4 235
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 234 && BOOST_PP_ITERATION_START_4 >= 234
+# define BOOST_PP_ITERATION_4 234
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 233 && BOOST_PP_ITERATION_START_4 >= 233
+# define BOOST_PP_ITERATION_4 233
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 232 && BOOST_PP_ITERATION_START_4 >= 232
+# define BOOST_PP_ITERATION_4 232
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 231 && BOOST_PP_ITERATION_START_4 >= 231
+# define BOOST_PP_ITERATION_4 231
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 230 && BOOST_PP_ITERATION_START_4 >= 230
+# define BOOST_PP_ITERATION_4 230
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 229 && BOOST_PP_ITERATION_START_4 >= 229
+# define BOOST_PP_ITERATION_4 229
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 228 && BOOST_PP_ITERATION_START_4 >= 228
+# define BOOST_PP_ITERATION_4 228
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 227 && BOOST_PP_ITERATION_START_4 >= 227
+# define BOOST_PP_ITERATION_4 227
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 226 && BOOST_PP_ITERATION_START_4 >= 226
+# define BOOST_PP_ITERATION_4 226
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 225 && BOOST_PP_ITERATION_START_4 >= 225
+# define BOOST_PP_ITERATION_4 225
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 224 && BOOST_PP_ITERATION_START_4 >= 224
+# define BOOST_PP_ITERATION_4 224
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 223 && BOOST_PP_ITERATION_START_4 >= 223
+# define BOOST_PP_ITERATION_4 223
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 222 && BOOST_PP_ITERATION_START_4 >= 222
+# define BOOST_PP_ITERATION_4 222
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 221 && BOOST_PP_ITERATION_START_4 >= 221
+# define BOOST_PP_ITERATION_4 221
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 220 && BOOST_PP_ITERATION_START_4 >= 220
+# define BOOST_PP_ITERATION_4 220
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 219 && BOOST_PP_ITERATION_START_4 >= 219
+# define BOOST_PP_ITERATION_4 219
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 218 && BOOST_PP_ITERATION_START_4 >= 218
+# define BOOST_PP_ITERATION_4 218
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 217 && BOOST_PP_ITERATION_START_4 >= 217
+# define BOOST_PP_ITERATION_4 217
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 216 && BOOST_PP_ITERATION_START_4 >= 216
+# define BOOST_PP_ITERATION_4 216
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 215 && BOOST_PP_ITERATION_START_4 >= 215
+# define BOOST_PP_ITERATION_4 215
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 214 && BOOST_PP_ITERATION_START_4 >= 214
+# define BOOST_PP_ITERATION_4 214
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 213 && BOOST_PP_ITERATION_START_4 >= 213
+# define BOOST_PP_ITERATION_4 213
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 212 && BOOST_PP_ITERATION_START_4 >= 212
+# define BOOST_PP_ITERATION_4 212
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 211 && BOOST_PP_ITERATION_START_4 >= 211
+# define BOOST_PP_ITERATION_4 211
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 210 && BOOST_PP_ITERATION_START_4 >= 210
+# define BOOST_PP_ITERATION_4 210
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 209 && BOOST_PP_ITERATION_START_4 >= 209
+# define BOOST_PP_ITERATION_4 209
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 208 && BOOST_PP_ITERATION_START_4 >= 208
+# define BOOST_PP_ITERATION_4 208
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 207 && BOOST_PP_ITERATION_START_4 >= 207
+# define BOOST_PP_ITERATION_4 207
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 206 && BOOST_PP_ITERATION_START_4 >= 206
+# define BOOST_PP_ITERATION_4 206
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 205 && BOOST_PP_ITERATION_START_4 >= 205
+# define BOOST_PP_ITERATION_4 205
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 204 && BOOST_PP_ITERATION_START_4 >= 204
+# define BOOST_PP_ITERATION_4 204
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 203 && BOOST_PP_ITERATION_START_4 >= 203
+# define BOOST_PP_ITERATION_4 203
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 202 && BOOST_PP_ITERATION_START_4 >= 202
+# define BOOST_PP_ITERATION_4 202
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 201 && BOOST_PP_ITERATION_START_4 >= 201
+# define BOOST_PP_ITERATION_4 201
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 200 && BOOST_PP_ITERATION_START_4 >= 200
+# define BOOST_PP_ITERATION_4 200
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 199 && BOOST_PP_ITERATION_START_4 >= 199
+# define BOOST_PP_ITERATION_4 199
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 198 && BOOST_PP_ITERATION_START_4 >= 198
+# define BOOST_PP_ITERATION_4 198
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 197 && BOOST_PP_ITERATION_START_4 >= 197
+# define BOOST_PP_ITERATION_4 197
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 196 && BOOST_PP_ITERATION_START_4 >= 196
+# define BOOST_PP_ITERATION_4 196
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 195 && BOOST_PP_ITERATION_START_4 >= 195
+# define BOOST_PP_ITERATION_4 195
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 194 && BOOST_PP_ITERATION_START_4 >= 194
+# define BOOST_PP_ITERATION_4 194
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 193 && BOOST_PP_ITERATION_START_4 >= 193
+# define BOOST_PP_ITERATION_4 193
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 192 && BOOST_PP_ITERATION_START_4 >= 192
+# define BOOST_PP_ITERATION_4 192
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 191 && BOOST_PP_ITERATION_START_4 >= 191
+# define BOOST_PP_ITERATION_4 191
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 190 && BOOST_PP_ITERATION_START_4 >= 190
+# define BOOST_PP_ITERATION_4 190
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 189 && BOOST_PP_ITERATION_START_4 >= 189
+# define BOOST_PP_ITERATION_4 189
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 188 && BOOST_PP_ITERATION_START_4 >= 188
+# define BOOST_PP_ITERATION_4 188
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 187 && BOOST_PP_ITERATION_START_4 >= 187
+# define BOOST_PP_ITERATION_4 187
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 186 && BOOST_PP_ITERATION_START_4 >= 186
+# define BOOST_PP_ITERATION_4 186
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 185 && BOOST_PP_ITERATION_START_4 >= 185
+# define BOOST_PP_ITERATION_4 185
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 184 && BOOST_PP_ITERATION_START_4 >= 184
+# define BOOST_PP_ITERATION_4 184
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 183 && BOOST_PP_ITERATION_START_4 >= 183
+# define BOOST_PP_ITERATION_4 183
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 182 && BOOST_PP_ITERATION_START_4 >= 182
+# define BOOST_PP_ITERATION_4 182
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 181 && BOOST_PP_ITERATION_START_4 >= 181
+# define BOOST_PP_ITERATION_4 181
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 180 && BOOST_PP_ITERATION_START_4 >= 180
+# define BOOST_PP_ITERATION_4 180
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 179 && BOOST_PP_ITERATION_START_4 >= 179
+# define BOOST_PP_ITERATION_4 179
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 178 && BOOST_PP_ITERATION_START_4 >= 178
+# define BOOST_PP_ITERATION_4 178
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 177 && BOOST_PP_ITERATION_START_4 >= 177
+# define BOOST_PP_ITERATION_4 177
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 176 && BOOST_PP_ITERATION_START_4 >= 176
+# define BOOST_PP_ITERATION_4 176
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 175 && BOOST_PP_ITERATION_START_4 >= 175
+# define BOOST_PP_ITERATION_4 175
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 174 && BOOST_PP_ITERATION_START_4 >= 174
+# define BOOST_PP_ITERATION_4 174
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 173 && BOOST_PP_ITERATION_START_4 >= 173
+# define BOOST_PP_ITERATION_4 173
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 172 && BOOST_PP_ITERATION_START_4 >= 172
+# define BOOST_PP_ITERATION_4 172
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 171 && BOOST_PP_ITERATION_START_4 >= 171
+# define BOOST_PP_ITERATION_4 171
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 170 && BOOST_PP_ITERATION_START_4 >= 170
+# define BOOST_PP_ITERATION_4 170
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 169 && BOOST_PP_ITERATION_START_4 >= 169
+# define BOOST_PP_ITERATION_4 169
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 168 && BOOST_PP_ITERATION_START_4 >= 168
+# define BOOST_PP_ITERATION_4 168
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 167 && BOOST_PP_ITERATION_START_4 >= 167
+# define BOOST_PP_ITERATION_4 167
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 166 && BOOST_PP_ITERATION_START_4 >= 166
+# define BOOST_PP_ITERATION_4 166
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 165 && BOOST_PP_ITERATION_START_4 >= 165
+# define BOOST_PP_ITERATION_4 165
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 164 && BOOST_PP_ITERATION_START_4 >= 164
+# define BOOST_PP_ITERATION_4 164
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 163 && BOOST_PP_ITERATION_START_4 >= 163
+# define BOOST_PP_ITERATION_4 163
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 162 && BOOST_PP_ITERATION_START_4 >= 162
+# define BOOST_PP_ITERATION_4 162
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 161 && BOOST_PP_ITERATION_START_4 >= 161
+# define BOOST_PP_ITERATION_4 161
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 160 && BOOST_PP_ITERATION_START_4 >= 160
+# define BOOST_PP_ITERATION_4 160
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 159 && BOOST_PP_ITERATION_START_4 >= 159
+# define BOOST_PP_ITERATION_4 159
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 158 && BOOST_PP_ITERATION_START_4 >= 158
+# define BOOST_PP_ITERATION_4 158
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 157 && BOOST_PP_ITERATION_START_4 >= 157
+# define BOOST_PP_ITERATION_4 157
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 156 && BOOST_PP_ITERATION_START_4 >= 156
+# define BOOST_PP_ITERATION_4 156
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 155 && BOOST_PP_ITERATION_START_4 >= 155
+# define BOOST_PP_ITERATION_4 155
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 154 && BOOST_PP_ITERATION_START_4 >= 154
+# define BOOST_PP_ITERATION_4 154
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 153 && BOOST_PP_ITERATION_START_4 >= 153
+# define BOOST_PP_ITERATION_4 153
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 152 && BOOST_PP_ITERATION_START_4 >= 152
+# define BOOST_PP_ITERATION_4 152
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 151 && BOOST_PP_ITERATION_START_4 >= 151
+# define BOOST_PP_ITERATION_4 151
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 150 && BOOST_PP_ITERATION_START_4 >= 150
+# define BOOST_PP_ITERATION_4 150
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 149 && BOOST_PP_ITERATION_START_4 >= 149
+# define BOOST_PP_ITERATION_4 149
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 148 && BOOST_PP_ITERATION_START_4 >= 148
+# define BOOST_PP_ITERATION_4 148
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 147 && BOOST_PP_ITERATION_START_4 >= 147
+# define BOOST_PP_ITERATION_4 147
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 146 && BOOST_PP_ITERATION_START_4 >= 146
+# define BOOST_PP_ITERATION_4 146
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 145 && BOOST_PP_ITERATION_START_4 >= 145
+# define BOOST_PP_ITERATION_4 145
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 144 && BOOST_PP_ITERATION_START_4 >= 144
+# define BOOST_PP_ITERATION_4 144
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 143 && BOOST_PP_ITERATION_START_4 >= 143
+# define BOOST_PP_ITERATION_4 143
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 142 && BOOST_PP_ITERATION_START_4 >= 142
+# define BOOST_PP_ITERATION_4 142
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 141 && BOOST_PP_ITERATION_START_4 >= 141
+# define BOOST_PP_ITERATION_4 141
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 140 && BOOST_PP_ITERATION_START_4 >= 140
+# define BOOST_PP_ITERATION_4 140
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 139 && BOOST_PP_ITERATION_START_4 >= 139
+# define BOOST_PP_ITERATION_4 139
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 138 && BOOST_PP_ITERATION_START_4 >= 138
+# define BOOST_PP_ITERATION_4 138
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 137 && BOOST_PP_ITERATION_START_4 >= 137
+# define BOOST_PP_ITERATION_4 137
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 136 && BOOST_PP_ITERATION_START_4 >= 136
+# define BOOST_PP_ITERATION_4 136
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 135 && BOOST_PP_ITERATION_START_4 >= 135
+# define BOOST_PP_ITERATION_4 135
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 134 && BOOST_PP_ITERATION_START_4 >= 134
+# define BOOST_PP_ITERATION_4 134
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 133 && BOOST_PP_ITERATION_START_4 >= 133
+# define BOOST_PP_ITERATION_4 133
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 132 && BOOST_PP_ITERATION_START_4 >= 132
+# define BOOST_PP_ITERATION_4 132
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 131 && BOOST_PP_ITERATION_START_4 >= 131
+# define BOOST_PP_ITERATION_4 131
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 130 && BOOST_PP_ITERATION_START_4 >= 130
+# define BOOST_PP_ITERATION_4 130
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 129 && BOOST_PP_ITERATION_START_4 >= 129
+# define BOOST_PP_ITERATION_4 129
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 128 && BOOST_PP_ITERATION_START_4 >= 128
+# define BOOST_PP_ITERATION_4 128
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 127 && BOOST_PP_ITERATION_START_4 >= 127
+# define BOOST_PP_ITERATION_4 127
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 126 && BOOST_PP_ITERATION_START_4 >= 126
+# define BOOST_PP_ITERATION_4 126
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 125 && BOOST_PP_ITERATION_START_4 >= 125
+# define BOOST_PP_ITERATION_4 125
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 124 && BOOST_PP_ITERATION_START_4 >= 124
+# define BOOST_PP_ITERATION_4 124
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 123 && BOOST_PP_ITERATION_START_4 >= 123
+# define BOOST_PP_ITERATION_4 123
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 122 && BOOST_PP_ITERATION_START_4 >= 122
+# define BOOST_PP_ITERATION_4 122
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 121 && BOOST_PP_ITERATION_START_4 >= 121
+# define BOOST_PP_ITERATION_4 121
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 120 && BOOST_PP_ITERATION_START_4 >= 120
+# define BOOST_PP_ITERATION_4 120
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 119 && BOOST_PP_ITERATION_START_4 >= 119
+# define BOOST_PP_ITERATION_4 119
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 118 && BOOST_PP_ITERATION_START_4 >= 118
+# define BOOST_PP_ITERATION_4 118
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 117 && BOOST_PP_ITERATION_START_4 >= 117
+# define BOOST_PP_ITERATION_4 117
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 116 && BOOST_PP_ITERATION_START_4 >= 116
+# define BOOST_PP_ITERATION_4 116
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 115 && BOOST_PP_ITERATION_START_4 >= 115
+# define BOOST_PP_ITERATION_4 115
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 114 && BOOST_PP_ITERATION_START_4 >= 114
+# define BOOST_PP_ITERATION_4 114
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 113 && BOOST_PP_ITERATION_START_4 >= 113
+# define BOOST_PP_ITERATION_4 113
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 112 && BOOST_PP_ITERATION_START_4 >= 112
+# define BOOST_PP_ITERATION_4 112
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 111 && BOOST_PP_ITERATION_START_4 >= 111
+# define BOOST_PP_ITERATION_4 111
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 110 && BOOST_PP_ITERATION_START_4 >= 110
+# define BOOST_PP_ITERATION_4 110
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 109 && BOOST_PP_ITERATION_START_4 >= 109
+# define BOOST_PP_ITERATION_4 109
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 108 && BOOST_PP_ITERATION_START_4 >= 108
+# define BOOST_PP_ITERATION_4 108
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 107 && BOOST_PP_ITERATION_START_4 >= 107
+# define BOOST_PP_ITERATION_4 107
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 106 && BOOST_PP_ITERATION_START_4 >= 106
+# define BOOST_PP_ITERATION_4 106
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 105 && BOOST_PP_ITERATION_START_4 >= 105
+# define BOOST_PP_ITERATION_4 105
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 104 && BOOST_PP_ITERATION_START_4 >= 104
+# define BOOST_PP_ITERATION_4 104
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 103 && BOOST_PP_ITERATION_START_4 >= 103
+# define BOOST_PP_ITERATION_4 103
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 102 && BOOST_PP_ITERATION_START_4 >= 102
+# define BOOST_PP_ITERATION_4 102
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 101 && BOOST_PP_ITERATION_START_4 >= 101
+# define BOOST_PP_ITERATION_4 101
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 100 && BOOST_PP_ITERATION_START_4 >= 100
+# define BOOST_PP_ITERATION_4 100
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 99 && BOOST_PP_ITERATION_START_4 >= 99
+# define BOOST_PP_ITERATION_4 99
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 98 && BOOST_PP_ITERATION_START_4 >= 98
+# define BOOST_PP_ITERATION_4 98
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 97 && BOOST_PP_ITERATION_START_4 >= 97
+# define BOOST_PP_ITERATION_4 97
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 96 && BOOST_PP_ITERATION_START_4 >= 96
+# define BOOST_PP_ITERATION_4 96
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 95 && BOOST_PP_ITERATION_START_4 >= 95
+# define BOOST_PP_ITERATION_4 95
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 94 && BOOST_PP_ITERATION_START_4 >= 94
+# define BOOST_PP_ITERATION_4 94
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 93 && BOOST_PP_ITERATION_START_4 >= 93
+# define BOOST_PP_ITERATION_4 93
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 92 && BOOST_PP_ITERATION_START_4 >= 92
+# define BOOST_PP_ITERATION_4 92
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 91 && BOOST_PP_ITERATION_START_4 >= 91
+# define BOOST_PP_ITERATION_4 91
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 90 && BOOST_PP_ITERATION_START_4 >= 90
+# define BOOST_PP_ITERATION_4 90
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 89 && BOOST_PP_ITERATION_START_4 >= 89
+# define BOOST_PP_ITERATION_4 89
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 88 && BOOST_PP_ITERATION_START_4 >= 88
+# define BOOST_PP_ITERATION_4 88
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 87 && BOOST_PP_ITERATION_START_4 >= 87
+# define BOOST_PP_ITERATION_4 87
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 86 && BOOST_PP_ITERATION_START_4 >= 86
+# define BOOST_PP_ITERATION_4 86
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 85 && BOOST_PP_ITERATION_START_4 >= 85
+# define BOOST_PP_ITERATION_4 85
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 84 && BOOST_PP_ITERATION_START_4 >= 84
+# define BOOST_PP_ITERATION_4 84
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 83 && BOOST_PP_ITERATION_START_4 >= 83
+# define BOOST_PP_ITERATION_4 83
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 82 && BOOST_PP_ITERATION_START_4 >= 82
+# define BOOST_PP_ITERATION_4 82
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 81 && BOOST_PP_ITERATION_START_4 >= 81
+# define BOOST_PP_ITERATION_4 81
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 80 && BOOST_PP_ITERATION_START_4 >= 80
+# define BOOST_PP_ITERATION_4 80
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 79 && BOOST_PP_ITERATION_START_4 >= 79
+# define BOOST_PP_ITERATION_4 79
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 78 && BOOST_PP_ITERATION_START_4 >= 78
+# define BOOST_PP_ITERATION_4 78
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 77 && BOOST_PP_ITERATION_START_4 >= 77
+# define BOOST_PP_ITERATION_4 77
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 76 && BOOST_PP_ITERATION_START_4 >= 76
+# define BOOST_PP_ITERATION_4 76
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 75 && BOOST_PP_ITERATION_START_4 >= 75
+# define BOOST_PP_ITERATION_4 75
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 74 && BOOST_PP_ITERATION_START_4 >= 74
+# define BOOST_PP_ITERATION_4 74
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 73 && BOOST_PP_ITERATION_START_4 >= 73
+# define BOOST_PP_ITERATION_4 73
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 72 && BOOST_PP_ITERATION_START_4 >= 72
+# define BOOST_PP_ITERATION_4 72
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 71 && BOOST_PP_ITERATION_START_4 >= 71
+# define BOOST_PP_ITERATION_4 71
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 70 && BOOST_PP_ITERATION_START_4 >= 70
+# define BOOST_PP_ITERATION_4 70
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 69 && BOOST_PP_ITERATION_START_4 >= 69
+# define BOOST_PP_ITERATION_4 69
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 68 && BOOST_PP_ITERATION_START_4 >= 68
+# define BOOST_PP_ITERATION_4 68
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 67 && BOOST_PP_ITERATION_START_4 >= 67
+# define BOOST_PP_ITERATION_4 67
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 66 && BOOST_PP_ITERATION_START_4 >= 66
+# define BOOST_PP_ITERATION_4 66
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 65 && BOOST_PP_ITERATION_START_4 >= 65
+# define BOOST_PP_ITERATION_4 65
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 64 && BOOST_PP_ITERATION_START_4 >= 64
+# define BOOST_PP_ITERATION_4 64
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 63 && BOOST_PP_ITERATION_START_4 >= 63
+# define BOOST_PP_ITERATION_4 63
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 62 && BOOST_PP_ITERATION_START_4 >= 62
+# define BOOST_PP_ITERATION_4 62
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 61 && BOOST_PP_ITERATION_START_4 >= 61
+# define BOOST_PP_ITERATION_4 61
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 60 && BOOST_PP_ITERATION_START_4 >= 60
+# define BOOST_PP_ITERATION_4 60
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 59 && BOOST_PP_ITERATION_START_4 >= 59
+# define BOOST_PP_ITERATION_4 59
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 58 && BOOST_PP_ITERATION_START_4 >= 58
+# define BOOST_PP_ITERATION_4 58
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 57 && BOOST_PP_ITERATION_START_4 >= 57
+# define BOOST_PP_ITERATION_4 57
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 56 && BOOST_PP_ITERATION_START_4 >= 56
+# define BOOST_PP_ITERATION_4 56
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 55 && BOOST_PP_ITERATION_START_4 >= 55
+# define BOOST_PP_ITERATION_4 55
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 54 && BOOST_PP_ITERATION_START_4 >= 54
+# define BOOST_PP_ITERATION_4 54
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 53 && BOOST_PP_ITERATION_START_4 >= 53
+# define BOOST_PP_ITERATION_4 53
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 52 && BOOST_PP_ITERATION_START_4 >= 52
+# define BOOST_PP_ITERATION_4 52
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 51 && BOOST_PP_ITERATION_START_4 >= 51
+# define BOOST_PP_ITERATION_4 51
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 50 && BOOST_PP_ITERATION_START_4 >= 50
+# define BOOST_PP_ITERATION_4 50
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 49 && BOOST_PP_ITERATION_START_4 >= 49
+# define BOOST_PP_ITERATION_4 49
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 48 && BOOST_PP_ITERATION_START_4 >= 48
+# define BOOST_PP_ITERATION_4 48
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 47 && BOOST_PP_ITERATION_START_4 >= 47
+# define BOOST_PP_ITERATION_4 47
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 46 && BOOST_PP_ITERATION_START_4 >= 46
+# define BOOST_PP_ITERATION_4 46
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 45 && BOOST_PP_ITERATION_START_4 >= 45
+# define BOOST_PP_ITERATION_4 45
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 44 && BOOST_PP_ITERATION_START_4 >= 44
+# define BOOST_PP_ITERATION_4 44
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 43 && BOOST_PP_ITERATION_START_4 >= 43
+# define BOOST_PP_ITERATION_4 43
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 42 && BOOST_PP_ITERATION_START_4 >= 42
+# define BOOST_PP_ITERATION_4 42
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 41 && BOOST_PP_ITERATION_START_4 >= 41
+# define BOOST_PP_ITERATION_4 41
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 40 && BOOST_PP_ITERATION_START_4 >= 40
+# define BOOST_PP_ITERATION_4 40
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 39 && BOOST_PP_ITERATION_START_4 >= 39
+# define BOOST_PP_ITERATION_4 39
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 38 && BOOST_PP_ITERATION_START_4 >= 38
+# define BOOST_PP_ITERATION_4 38
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 37 && BOOST_PP_ITERATION_START_4 >= 37
+# define BOOST_PP_ITERATION_4 37
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 36 && BOOST_PP_ITERATION_START_4 >= 36
+# define BOOST_PP_ITERATION_4 36
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 35 && BOOST_PP_ITERATION_START_4 >= 35
+# define BOOST_PP_ITERATION_4 35
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 34 && BOOST_PP_ITERATION_START_4 >= 34
+# define BOOST_PP_ITERATION_4 34
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 33 && BOOST_PP_ITERATION_START_4 >= 33
+# define BOOST_PP_ITERATION_4 33
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 32 && BOOST_PP_ITERATION_START_4 >= 32
+# define BOOST_PP_ITERATION_4 32
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 31 && BOOST_PP_ITERATION_START_4 >= 31
+# define BOOST_PP_ITERATION_4 31
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 30 && BOOST_PP_ITERATION_START_4 >= 30
+# define BOOST_PP_ITERATION_4 30
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 29 && BOOST_PP_ITERATION_START_4 >= 29
+# define BOOST_PP_ITERATION_4 29
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 28 && BOOST_PP_ITERATION_START_4 >= 28
+# define BOOST_PP_ITERATION_4 28
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 27 && BOOST_PP_ITERATION_START_4 >= 27
+# define BOOST_PP_ITERATION_4 27
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 26 && BOOST_PP_ITERATION_START_4 >= 26
+# define BOOST_PP_ITERATION_4 26
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 25 && BOOST_PP_ITERATION_START_4 >= 25
+# define BOOST_PP_ITERATION_4 25
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 24 && BOOST_PP_ITERATION_START_4 >= 24
+# define BOOST_PP_ITERATION_4 24
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 23 && BOOST_PP_ITERATION_START_4 >= 23
+# define BOOST_PP_ITERATION_4 23
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 22 && BOOST_PP_ITERATION_START_4 >= 22
+# define BOOST_PP_ITERATION_4 22
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 21 && BOOST_PP_ITERATION_START_4 >= 21
+# define BOOST_PP_ITERATION_4 21
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 20 && BOOST_PP_ITERATION_START_4 >= 20
+# define BOOST_PP_ITERATION_4 20
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 19 && BOOST_PP_ITERATION_START_4 >= 19
+# define BOOST_PP_ITERATION_4 19
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 18 && BOOST_PP_ITERATION_START_4 >= 18
+# define BOOST_PP_ITERATION_4 18
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 17 && BOOST_PP_ITERATION_START_4 >= 17
+# define BOOST_PP_ITERATION_4 17
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 16 && BOOST_PP_ITERATION_START_4 >= 16
+# define BOOST_PP_ITERATION_4 16
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 15 && BOOST_PP_ITERATION_START_4 >= 15
+# define BOOST_PP_ITERATION_4 15
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 14 && BOOST_PP_ITERATION_START_4 >= 14
+# define BOOST_PP_ITERATION_4 14
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 13 && BOOST_PP_ITERATION_START_4 >= 13
+# define BOOST_PP_ITERATION_4 13
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 12 && BOOST_PP_ITERATION_START_4 >= 12
+# define BOOST_PP_ITERATION_4 12
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 11 && BOOST_PP_ITERATION_START_4 >= 11
+# define BOOST_PP_ITERATION_4 11
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 10 && BOOST_PP_ITERATION_START_4 >= 10
+# define BOOST_PP_ITERATION_4 10
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 9 && BOOST_PP_ITERATION_START_4 >= 9
+# define BOOST_PP_ITERATION_4 9
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 8 && BOOST_PP_ITERATION_START_4 >= 8
+# define BOOST_PP_ITERATION_4 8
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 7 && BOOST_PP_ITERATION_START_4 >= 7
+# define BOOST_PP_ITERATION_4 7
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 6 && BOOST_PP_ITERATION_START_4 >= 6
+# define BOOST_PP_ITERATION_4 6
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 5 && BOOST_PP_ITERATION_START_4 >= 5
+# define BOOST_PP_ITERATION_4 5
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 4 && BOOST_PP_ITERATION_START_4 >= 4
+# define BOOST_PP_ITERATION_4 4
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 3 && BOOST_PP_ITERATION_START_4 >= 3
+# define BOOST_PP_ITERATION_4 3
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 2 && BOOST_PP_ITERATION_START_4 >= 2
+# define BOOST_PP_ITERATION_4 2
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 1 && BOOST_PP_ITERATION_START_4 >= 1
+# define BOOST_PP_ITERATION_4 1
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 0 && BOOST_PP_ITERATION_START_4 >= 0
+# define BOOST_PP_ITERATION_4 0
+# include BOOST_PP_FILENAME_4
+# undef BOOST_PP_ITERATION_4
+# endif
diff --git a/boost/boost/preprocessor/iteration/detail/iter/reverse5.hpp b/boost/boost/preprocessor/iteration/detail/iter/reverse5.hpp
new file mode 100644
index 00000000000..225a557f894
--- /dev/null
+++ b/boost/boost/preprocessor/iteration/detail/iter/reverse5.hpp
@@ -0,0 +1,1296 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# if BOOST_PP_ITERATION_FINISH_5 <= 256 && BOOST_PP_ITERATION_START_5 >= 256
+# define BOOST_PP_ITERATION_5 256
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 255 && BOOST_PP_ITERATION_START_5 >= 255
+# define BOOST_PP_ITERATION_5 255
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 254 && BOOST_PP_ITERATION_START_5 >= 254
+# define BOOST_PP_ITERATION_5 254
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 253 && BOOST_PP_ITERATION_START_5 >= 253
+# define BOOST_PP_ITERATION_5 253
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 252 && BOOST_PP_ITERATION_START_5 >= 252
+# define BOOST_PP_ITERATION_5 252
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 251 && BOOST_PP_ITERATION_START_5 >= 251
+# define BOOST_PP_ITERATION_5 251
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 250 && BOOST_PP_ITERATION_START_5 >= 250
+# define BOOST_PP_ITERATION_5 250
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 249 && BOOST_PP_ITERATION_START_5 >= 249
+# define BOOST_PP_ITERATION_5 249
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 248 && BOOST_PP_ITERATION_START_5 >= 248
+# define BOOST_PP_ITERATION_5 248
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 247 && BOOST_PP_ITERATION_START_5 >= 247
+# define BOOST_PP_ITERATION_5 247
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 246 && BOOST_PP_ITERATION_START_5 >= 246
+# define BOOST_PP_ITERATION_5 246
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 245 && BOOST_PP_ITERATION_START_5 >= 245
+# define BOOST_PP_ITERATION_5 245
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 244 && BOOST_PP_ITERATION_START_5 >= 244
+# define BOOST_PP_ITERATION_5 244
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 243 && BOOST_PP_ITERATION_START_5 >= 243
+# define BOOST_PP_ITERATION_5 243
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 242 && BOOST_PP_ITERATION_START_5 >= 242
+# define BOOST_PP_ITERATION_5 242
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 241 && BOOST_PP_ITERATION_START_5 >= 241
+# define BOOST_PP_ITERATION_5 241
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 240 && BOOST_PP_ITERATION_START_5 >= 240
+# define BOOST_PP_ITERATION_5 240
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 239 && BOOST_PP_ITERATION_START_5 >= 239
+# define BOOST_PP_ITERATION_5 239
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 238 && BOOST_PP_ITERATION_START_5 >= 238
+# define BOOST_PP_ITERATION_5 238
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 237 && BOOST_PP_ITERATION_START_5 >= 237
+# define BOOST_PP_ITERATION_5 237
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 236 && BOOST_PP_ITERATION_START_5 >= 236
+# define BOOST_PP_ITERATION_5 236
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 235 && BOOST_PP_ITERATION_START_5 >= 235
+# define BOOST_PP_ITERATION_5 235
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 234 && BOOST_PP_ITERATION_START_5 >= 234
+# define BOOST_PP_ITERATION_5 234
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 233 && BOOST_PP_ITERATION_START_5 >= 233
+# define BOOST_PP_ITERATION_5 233
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 232 && BOOST_PP_ITERATION_START_5 >= 232
+# define BOOST_PP_ITERATION_5 232
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 231 && BOOST_PP_ITERATION_START_5 >= 231
+# define BOOST_PP_ITERATION_5 231
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 230 && BOOST_PP_ITERATION_START_5 >= 230
+# define BOOST_PP_ITERATION_5 230
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 229 && BOOST_PP_ITERATION_START_5 >= 229
+# define BOOST_PP_ITERATION_5 229
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 228 && BOOST_PP_ITERATION_START_5 >= 228
+# define BOOST_PP_ITERATION_5 228
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 227 && BOOST_PP_ITERATION_START_5 >= 227
+# define BOOST_PP_ITERATION_5 227
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 226 && BOOST_PP_ITERATION_START_5 >= 226
+# define BOOST_PP_ITERATION_5 226
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 225 && BOOST_PP_ITERATION_START_5 >= 225
+# define BOOST_PP_ITERATION_5 225
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 224 && BOOST_PP_ITERATION_START_5 >= 224
+# define BOOST_PP_ITERATION_5 224
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 223 && BOOST_PP_ITERATION_START_5 >= 223
+# define BOOST_PP_ITERATION_5 223
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 222 && BOOST_PP_ITERATION_START_5 >= 222
+# define BOOST_PP_ITERATION_5 222
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 221 && BOOST_PP_ITERATION_START_5 >= 221
+# define BOOST_PP_ITERATION_5 221
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 220 && BOOST_PP_ITERATION_START_5 >= 220
+# define BOOST_PP_ITERATION_5 220
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 219 && BOOST_PP_ITERATION_START_5 >= 219
+# define BOOST_PP_ITERATION_5 219
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 218 && BOOST_PP_ITERATION_START_5 >= 218
+# define BOOST_PP_ITERATION_5 218
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 217 && BOOST_PP_ITERATION_START_5 >= 217
+# define BOOST_PP_ITERATION_5 217
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 216 && BOOST_PP_ITERATION_START_5 >= 216
+# define BOOST_PP_ITERATION_5 216
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 215 && BOOST_PP_ITERATION_START_5 >= 215
+# define BOOST_PP_ITERATION_5 215
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 214 && BOOST_PP_ITERATION_START_5 >= 214
+# define BOOST_PP_ITERATION_5 214
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 213 && BOOST_PP_ITERATION_START_5 >= 213
+# define BOOST_PP_ITERATION_5 213
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 212 && BOOST_PP_ITERATION_START_5 >= 212
+# define BOOST_PP_ITERATION_5 212
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 211 && BOOST_PP_ITERATION_START_5 >= 211
+# define BOOST_PP_ITERATION_5 211
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 210 && BOOST_PP_ITERATION_START_5 >= 210
+# define BOOST_PP_ITERATION_5 210
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 209 && BOOST_PP_ITERATION_START_5 >= 209
+# define BOOST_PP_ITERATION_5 209
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 208 && BOOST_PP_ITERATION_START_5 >= 208
+# define BOOST_PP_ITERATION_5 208
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 207 && BOOST_PP_ITERATION_START_5 >= 207
+# define BOOST_PP_ITERATION_5 207
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 206 && BOOST_PP_ITERATION_START_5 >= 206
+# define BOOST_PP_ITERATION_5 206
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 205 && BOOST_PP_ITERATION_START_5 >= 205
+# define BOOST_PP_ITERATION_5 205
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 204 && BOOST_PP_ITERATION_START_5 >= 204
+# define BOOST_PP_ITERATION_5 204
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 203 && BOOST_PP_ITERATION_START_5 >= 203
+# define BOOST_PP_ITERATION_5 203
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 202 && BOOST_PP_ITERATION_START_5 >= 202
+# define BOOST_PP_ITERATION_5 202
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 201 && BOOST_PP_ITERATION_START_5 >= 201
+# define BOOST_PP_ITERATION_5 201
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 200 && BOOST_PP_ITERATION_START_5 >= 200
+# define BOOST_PP_ITERATION_5 200
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 199 && BOOST_PP_ITERATION_START_5 >= 199
+# define BOOST_PP_ITERATION_5 199
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 198 && BOOST_PP_ITERATION_START_5 >= 198
+# define BOOST_PP_ITERATION_5 198
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 197 && BOOST_PP_ITERATION_START_5 >= 197
+# define BOOST_PP_ITERATION_5 197
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 196 && BOOST_PP_ITERATION_START_5 >= 196
+# define BOOST_PP_ITERATION_5 196
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 195 && BOOST_PP_ITERATION_START_5 >= 195
+# define BOOST_PP_ITERATION_5 195
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 194 && BOOST_PP_ITERATION_START_5 >= 194
+# define BOOST_PP_ITERATION_5 194
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 193 && BOOST_PP_ITERATION_START_5 >= 193
+# define BOOST_PP_ITERATION_5 193
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 192 && BOOST_PP_ITERATION_START_5 >= 192
+# define BOOST_PP_ITERATION_5 192
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 191 && BOOST_PP_ITERATION_START_5 >= 191
+# define BOOST_PP_ITERATION_5 191
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 190 && BOOST_PP_ITERATION_START_5 >= 190
+# define BOOST_PP_ITERATION_5 190
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 189 && BOOST_PP_ITERATION_START_5 >= 189
+# define BOOST_PP_ITERATION_5 189
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 188 && BOOST_PP_ITERATION_START_5 >= 188
+# define BOOST_PP_ITERATION_5 188
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 187 && BOOST_PP_ITERATION_START_5 >= 187
+# define BOOST_PP_ITERATION_5 187
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 186 && BOOST_PP_ITERATION_START_5 >= 186
+# define BOOST_PP_ITERATION_5 186
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 185 && BOOST_PP_ITERATION_START_5 >= 185
+# define BOOST_PP_ITERATION_5 185
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 184 && BOOST_PP_ITERATION_START_5 >= 184
+# define BOOST_PP_ITERATION_5 184
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 183 && BOOST_PP_ITERATION_START_5 >= 183
+# define BOOST_PP_ITERATION_5 183
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 182 && BOOST_PP_ITERATION_START_5 >= 182
+# define BOOST_PP_ITERATION_5 182
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 181 && BOOST_PP_ITERATION_START_5 >= 181
+# define BOOST_PP_ITERATION_5 181
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 180 && BOOST_PP_ITERATION_START_5 >= 180
+# define BOOST_PP_ITERATION_5 180
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 179 && BOOST_PP_ITERATION_START_5 >= 179
+# define BOOST_PP_ITERATION_5 179
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 178 && BOOST_PP_ITERATION_START_5 >= 178
+# define BOOST_PP_ITERATION_5 178
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 177 && BOOST_PP_ITERATION_START_5 >= 177
+# define BOOST_PP_ITERATION_5 177
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 176 && BOOST_PP_ITERATION_START_5 >= 176
+# define BOOST_PP_ITERATION_5 176
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 175 && BOOST_PP_ITERATION_START_5 >= 175
+# define BOOST_PP_ITERATION_5 175
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 174 && BOOST_PP_ITERATION_START_5 >= 174
+# define BOOST_PP_ITERATION_5 174
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 173 && BOOST_PP_ITERATION_START_5 >= 173
+# define BOOST_PP_ITERATION_5 173
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 172 && BOOST_PP_ITERATION_START_5 >= 172
+# define BOOST_PP_ITERATION_5 172
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 171 && BOOST_PP_ITERATION_START_5 >= 171
+# define BOOST_PP_ITERATION_5 171
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 170 && BOOST_PP_ITERATION_START_5 >= 170
+# define BOOST_PP_ITERATION_5 170
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 169 && BOOST_PP_ITERATION_START_5 >= 169
+# define BOOST_PP_ITERATION_5 169
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 168 && BOOST_PP_ITERATION_START_5 >= 168
+# define BOOST_PP_ITERATION_5 168
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 167 && BOOST_PP_ITERATION_START_5 >= 167
+# define BOOST_PP_ITERATION_5 167
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 166 && BOOST_PP_ITERATION_START_5 >= 166
+# define BOOST_PP_ITERATION_5 166
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 165 && BOOST_PP_ITERATION_START_5 >= 165
+# define BOOST_PP_ITERATION_5 165
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 164 && BOOST_PP_ITERATION_START_5 >= 164
+# define BOOST_PP_ITERATION_5 164
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 163 && BOOST_PP_ITERATION_START_5 >= 163
+# define BOOST_PP_ITERATION_5 163
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 162 && BOOST_PP_ITERATION_START_5 >= 162
+# define BOOST_PP_ITERATION_5 162
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 161 && BOOST_PP_ITERATION_START_5 >= 161
+# define BOOST_PP_ITERATION_5 161
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 160 && BOOST_PP_ITERATION_START_5 >= 160
+# define BOOST_PP_ITERATION_5 160
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 159 && BOOST_PP_ITERATION_START_5 >= 159
+# define BOOST_PP_ITERATION_5 159
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 158 && BOOST_PP_ITERATION_START_5 >= 158
+# define BOOST_PP_ITERATION_5 158
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 157 && BOOST_PP_ITERATION_START_5 >= 157
+# define BOOST_PP_ITERATION_5 157
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 156 && BOOST_PP_ITERATION_START_5 >= 156
+# define BOOST_PP_ITERATION_5 156
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 155 && BOOST_PP_ITERATION_START_5 >= 155
+# define BOOST_PP_ITERATION_5 155
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 154 && BOOST_PP_ITERATION_START_5 >= 154
+# define BOOST_PP_ITERATION_5 154
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 153 && BOOST_PP_ITERATION_START_5 >= 153
+# define BOOST_PP_ITERATION_5 153
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 152 && BOOST_PP_ITERATION_START_5 >= 152
+# define BOOST_PP_ITERATION_5 152
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 151 && BOOST_PP_ITERATION_START_5 >= 151
+# define BOOST_PP_ITERATION_5 151
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 150 && BOOST_PP_ITERATION_START_5 >= 150
+# define BOOST_PP_ITERATION_5 150
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 149 && BOOST_PP_ITERATION_START_5 >= 149
+# define BOOST_PP_ITERATION_5 149
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 148 && BOOST_PP_ITERATION_START_5 >= 148
+# define BOOST_PP_ITERATION_5 148
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 147 && BOOST_PP_ITERATION_START_5 >= 147
+# define BOOST_PP_ITERATION_5 147
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 146 && BOOST_PP_ITERATION_START_5 >= 146
+# define BOOST_PP_ITERATION_5 146
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 145 && BOOST_PP_ITERATION_START_5 >= 145
+# define BOOST_PP_ITERATION_5 145
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 144 && BOOST_PP_ITERATION_START_5 >= 144
+# define BOOST_PP_ITERATION_5 144
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 143 && BOOST_PP_ITERATION_START_5 >= 143
+# define BOOST_PP_ITERATION_5 143
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 142 && BOOST_PP_ITERATION_START_5 >= 142
+# define BOOST_PP_ITERATION_5 142
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 141 && BOOST_PP_ITERATION_START_5 >= 141
+# define BOOST_PP_ITERATION_5 141
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 140 && BOOST_PP_ITERATION_START_5 >= 140
+# define BOOST_PP_ITERATION_5 140
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 139 && BOOST_PP_ITERATION_START_5 >= 139
+# define BOOST_PP_ITERATION_5 139
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 138 && BOOST_PP_ITERATION_START_5 >= 138
+# define BOOST_PP_ITERATION_5 138
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 137 && BOOST_PP_ITERATION_START_5 >= 137
+# define BOOST_PP_ITERATION_5 137
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 136 && BOOST_PP_ITERATION_START_5 >= 136
+# define BOOST_PP_ITERATION_5 136
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 135 && BOOST_PP_ITERATION_START_5 >= 135
+# define BOOST_PP_ITERATION_5 135
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 134 && BOOST_PP_ITERATION_START_5 >= 134
+# define BOOST_PP_ITERATION_5 134
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 133 && BOOST_PP_ITERATION_START_5 >= 133
+# define BOOST_PP_ITERATION_5 133
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 132 && BOOST_PP_ITERATION_START_5 >= 132
+# define BOOST_PP_ITERATION_5 132
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 131 && BOOST_PP_ITERATION_START_5 >= 131
+# define BOOST_PP_ITERATION_5 131
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 130 && BOOST_PP_ITERATION_START_5 >= 130
+# define BOOST_PP_ITERATION_5 130
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 129 && BOOST_PP_ITERATION_START_5 >= 129
+# define BOOST_PP_ITERATION_5 129
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 128 && BOOST_PP_ITERATION_START_5 >= 128
+# define BOOST_PP_ITERATION_5 128
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 127 && BOOST_PP_ITERATION_START_5 >= 127
+# define BOOST_PP_ITERATION_5 127
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 126 && BOOST_PP_ITERATION_START_5 >= 126
+# define BOOST_PP_ITERATION_5 126
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 125 && BOOST_PP_ITERATION_START_5 >= 125
+# define BOOST_PP_ITERATION_5 125
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 124 && BOOST_PP_ITERATION_START_5 >= 124
+# define BOOST_PP_ITERATION_5 124
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 123 && BOOST_PP_ITERATION_START_5 >= 123
+# define BOOST_PP_ITERATION_5 123
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 122 && BOOST_PP_ITERATION_START_5 >= 122
+# define BOOST_PP_ITERATION_5 122
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 121 && BOOST_PP_ITERATION_START_5 >= 121
+# define BOOST_PP_ITERATION_5 121
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 120 && BOOST_PP_ITERATION_START_5 >= 120
+# define BOOST_PP_ITERATION_5 120
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 119 && BOOST_PP_ITERATION_START_5 >= 119
+# define BOOST_PP_ITERATION_5 119
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 118 && BOOST_PP_ITERATION_START_5 >= 118
+# define BOOST_PP_ITERATION_5 118
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 117 && BOOST_PP_ITERATION_START_5 >= 117
+# define BOOST_PP_ITERATION_5 117
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 116 && BOOST_PP_ITERATION_START_5 >= 116
+# define BOOST_PP_ITERATION_5 116
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 115 && BOOST_PP_ITERATION_START_5 >= 115
+# define BOOST_PP_ITERATION_5 115
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 114 && BOOST_PP_ITERATION_START_5 >= 114
+# define BOOST_PP_ITERATION_5 114
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 113 && BOOST_PP_ITERATION_START_5 >= 113
+# define BOOST_PP_ITERATION_5 113
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 112 && BOOST_PP_ITERATION_START_5 >= 112
+# define BOOST_PP_ITERATION_5 112
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 111 && BOOST_PP_ITERATION_START_5 >= 111
+# define BOOST_PP_ITERATION_5 111
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 110 && BOOST_PP_ITERATION_START_5 >= 110
+# define BOOST_PP_ITERATION_5 110
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 109 && BOOST_PP_ITERATION_START_5 >= 109
+# define BOOST_PP_ITERATION_5 109
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 108 && BOOST_PP_ITERATION_START_5 >= 108
+# define BOOST_PP_ITERATION_5 108
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 107 && BOOST_PP_ITERATION_START_5 >= 107
+# define BOOST_PP_ITERATION_5 107
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 106 && BOOST_PP_ITERATION_START_5 >= 106
+# define BOOST_PP_ITERATION_5 106
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 105 && BOOST_PP_ITERATION_START_5 >= 105
+# define BOOST_PP_ITERATION_5 105
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 104 && BOOST_PP_ITERATION_START_5 >= 104
+# define BOOST_PP_ITERATION_5 104
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 103 && BOOST_PP_ITERATION_START_5 >= 103
+# define BOOST_PP_ITERATION_5 103
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 102 && BOOST_PP_ITERATION_START_5 >= 102
+# define BOOST_PP_ITERATION_5 102
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 101 && BOOST_PP_ITERATION_START_5 >= 101
+# define BOOST_PP_ITERATION_5 101
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 100 && BOOST_PP_ITERATION_START_5 >= 100
+# define BOOST_PP_ITERATION_5 100
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 99 && BOOST_PP_ITERATION_START_5 >= 99
+# define BOOST_PP_ITERATION_5 99
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 98 && BOOST_PP_ITERATION_START_5 >= 98
+# define BOOST_PP_ITERATION_5 98
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 97 && BOOST_PP_ITERATION_START_5 >= 97
+# define BOOST_PP_ITERATION_5 97
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 96 && BOOST_PP_ITERATION_START_5 >= 96
+# define BOOST_PP_ITERATION_5 96
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 95 && BOOST_PP_ITERATION_START_5 >= 95
+# define BOOST_PP_ITERATION_5 95
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 94 && BOOST_PP_ITERATION_START_5 >= 94
+# define BOOST_PP_ITERATION_5 94
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 93 && BOOST_PP_ITERATION_START_5 >= 93
+# define BOOST_PP_ITERATION_5 93
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 92 && BOOST_PP_ITERATION_START_5 >= 92
+# define BOOST_PP_ITERATION_5 92
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 91 && BOOST_PP_ITERATION_START_5 >= 91
+# define BOOST_PP_ITERATION_5 91
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 90 && BOOST_PP_ITERATION_START_5 >= 90
+# define BOOST_PP_ITERATION_5 90
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 89 && BOOST_PP_ITERATION_START_5 >= 89
+# define BOOST_PP_ITERATION_5 89
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 88 && BOOST_PP_ITERATION_START_5 >= 88
+# define BOOST_PP_ITERATION_5 88
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 87 && BOOST_PP_ITERATION_START_5 >= 87
+# define BOOST_PP_ITERATION_5 87
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 86 && BOOST_PP_ITERATION_START_5 >= 86
+# define BOOST_PP_ITERATION_5 86
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 85 && BOOST_PP_ITERATION_START_5 >= 85
+# define BOOST_PP_ITERATION_5 85
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 84 && BOOST_PP_ITERATION_START_5 >= 84
+# define BOOST_PP_ITERATION_5 84
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 83 && BOOST_PP_ITERATION_START_5 >= 83
+# define BOOST_PP_ITERATION_5 83
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 82 && BOOST_PP_ITERATION_START_5 >= 82
+# define BOOST_PP_ITERATION_5 82
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 81 && BOOST_PP_ITERATION_START_5 >= 81
+# define BOOST_PP_ITERATION_5 81
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 80 && BOOST_PP_ITERATION_START_5 >= 80
+# define BOOST_PP_ITERATION_5 80
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 79 && BOOST_PP_ITERATION_START_5 >= 79
+# define BOOST_PP_ITERATION_5 79
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 78 && BOOST_PP_ITERATION_START_5 >= 78
+# define BOOST_PP_ITERATION_5 78
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 77 && BOOST_PP_ITERATION_START_5 >= 77
+# define BOOST_PP_ITERATION_5 77
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 76 && BOOST_PP_ITERATION_START_5 >= 76
+# define BOOST_PP_ITERATION_5 76
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 75 && BOOST_PP_ITERATION_START_5 >= 75
+# define BOOST_PP_ITERATION_5 75
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 74 && BOOST_PP_ITERATION_START_5 >= 74
+# define BOOST_PP_ITERATION_5 74
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 73 && BOOST_PP_ITERATION_START_5 >= 73
+# define BOOST_PP_ITERATION_5 73
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 72 && BOOST_PP_ITERATION_START_5 >= 72
+# define BOOST_PP_ITERATION_5 72
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 71 && BOOST_PP_ITERATION_START_5 >= 71
+# define BOOST_PP_ITERATION_5 71
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 70 && BOOST_PP_ITERATION_START_5 >= 70
+# define BOOST_PP_ITERATION_5 70
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 69 && BOOST_PP_ITERATION_START_5 >= 69
+# define BOOST_PP_ITERATION_5 69
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 68 && BOOST_PP_ITERATION_START_5 >= 68
+# define BOOST_PP_ITERATION_5 68
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 67 && BOOST_PP_ITERATION_START_5 >= 67
+# define BOOST_PP_ITERATION_5 67
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 66 && BOOST_PP_ITERATION_START_5 >= 66
+# define BOOST_PP_ITERATION_5 66
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 65 && BOOST_PP_ITERATION_START_5 >= 65
+# define BOOST_PP_ITERATION_5 65
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 64 && BOOST_PP_ITERATION_START_5 >= 64
+# define BOOST_PP_ITERATION_5 64
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 63 && BOOST_PP_ITERATION_START_5 >= 63
+# define BOOST_PP_ITERATION_5 63
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 62 && BOOST_PP_ITERATION_START_5 >= 62
+# define BOOST_PP_ITERATION_5 62
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 61 && BOOST_PP_ITERATION_START_5 >= 61
+# define BOOST_PP_ITERATION_5 61
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 60 && BOOST_PP_ITERATION_START_5 >= 60
+# define BOOST_PP_ITERATION_5 60
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 59 && BOOST_PP_ITERATION_START_5 >= 59
+# define BOOST_PP_ITERATION_5 59
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 58 && BOOST_PP_ITERATION_START_5 >= 58
+# define BOOST_PP_ITERATION_5 58
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 57 && BOOST_PP_ITERATION_START_5 >= 57
+# define BOOST_PP_ITERATION_5 57
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 56 && BOOST_PP_ITERATION_START_5 >= 56
+# define BOOST_PP_ITERATION_5 56
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 55 && BOOST_PP_ITERATION_START_5 >= 55
+# define BOOST_PP_ITERATION_5 55
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 54 && BOOST_PP_ITERATION_START_5 >= 54
+# define BOOST_PP_ITERATION_5 54
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 53 && BOOST_PP_ITERATION_START_5 >= 53
+# define BOOST_PP_ITERATION_5 53
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 52 && BOOST_PP_ITERATION_START_5 >= 52
+# define BOOST_PP_ITERATION_5 52
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 51 && BOOST_PP_ITERATION_START_5 >= 51
+# define BOOST_PP_ITERATION_5 51
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 50 && BOOST_PP_ITERATION_START_5 >= 50
+# define BOOST_PP_ITERATION_5 50
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 49 && BOOST_PP_ITERATION_START_5 >= 49
+# define BOOST_PP_ITERATION_5 49
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 48 && BOOST_PP_ITERATION_START_5 >= 48
+# define BOOST_PP_ITERATION_5 48
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 47 && BOOST_PP_ITERATION_START_5 >= 47
+# define BOOST_PP_ITERATION_5 47
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 46 && BOOST_PP_ITERATION_START_5 >= 46
+# define BOOST_PP_ITERATION_5 46
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 45 && BOOST_PP_ITERATION_START_5 >= 45
+# define BOOST_PP_ITERATION_5 45
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 44 && BOOST_PP_ITERATION_START_5 >= 44
+# define BOOST_PP_ITERATION_5 44
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 43 && BOOST_PP_ITERATION_START_5 >= 43
+# define BOOST_PP_ITERATION_5 43
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 42 && BOOST_PP_ITERATION_START_5 >= 42
+# define BOOST_PP_ITERATION_5 42
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 41 && BOOST_PP_ITERATION_START_5 >= 41
+# define BOOST_PP_ITERATION_5 41
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 40 && BOOST_PP_ITERATION_START_5 >= 40
+# define BOOST_PP_ITERATION_5 40
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 39 && BOOST_PP_ITERATION_START_5 >= 39
+# define BOOST_PP_ITERATION_5 39
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 38 && BOOST_PP_ITERATION_START_5 >= 38
+# define BOOST_PP_ITERATION_5 38
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 37 && BOOST_PP_ITERATION_START_5 >= 37
+# define BOOST_PP_ITERATION_5 37
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 36 && BOOST_PP_ITERATION_START_5 >= 36
+# define BOOST_PP_ITERATION_5 36
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 35 && BOOST_PP_ITERATION_START_5 >= 35
+# define BOOST_PP_ITERATION_5 35
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 34 && BOOST_PP_ITERATION_START_5 >= 34
+# define BOOST_PP_ITERATION_5 34
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 33 && BOOST_PP_ITERATION_START_5 >= 33
+# define BOOST_PP_ITERATION_5 33
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 32 && BOOST_PP_ITERATION_START_5 >= 32
+# define BOOST_PP_ITERATION_5 32
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 31 && BOOST_PP_ITERATION_START_5 >= 31
+# define BOOST_PP_ITERATION_5 31
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 30 && BOOST_PP_ITERATION_START_5 >= 30
+# define BOOST_PP_ITERATION_5 30
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 29 && BOOST_PP_ITERATION_START_5 >= 29
+# define BOOST_PP_ITERATION_5 29
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 28 && BOOST_PP_ITERATION_START_5 >= 28
+# define BOOST_PP_ITERATION_5 28
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 27 && BOOST_PP_ITERATION_START_5 >= 27
+# define BOOST_PP_ITERATION_5 27
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 26 && BOOST_PP_ITERATION_START_5 >= 26
+# define BOOST_PP_ITERATION_5 26
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 25 && BOOST_PP_ITERATION_START_5 >= 25
+# define BOOST_PP_ITERATION_5 25
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 24 && BOOST_PP_ITERATION_START_5 >= 24
+# define BOOST_PP_ITERATION_5 24
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 23 && BOOST_PP_ITERATION_START_5 >= 23
+# define BOOST_PP_ITERATION_5 23
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 22 && BOOST_PP_ITERATION_START_5 >= 22
+# define BOOST_PP_ITERATION_5 22
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 21 && BOOST_PP_ITERATION_START_5 >= 21
+# define BOOST_PP_ITERATION_5 21
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 20 && BOOST_PP_ITERATION_START_5 >= 20
+# define BOOST_PP_ITERATION_5 20
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 19 && BOOST_PP_ITERATION_START_5 >= 19
+# define BOOST_PP_ITERATION_5 19
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 18 && BOOST_PP_ITERATION_START_5 >= 18
+# define BOOST_PP_ITERATION_5 18
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 17 && BOOST_PP_ITERATION_START_5 >= 17
+# define BOOST_PP_ITERATION_5 17
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 16 && BOOST_PP_ITERATION_START_5 >= 16
+# define BOOST_PP_ITERATION_5 16
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 15 && BOOST_PP_ITERATION_START_5 >= 15
+# define BOOST_PP_ITERATION_5 15
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 14 && BOOST_PP_ITERATION_START_5 >= 14
+# define BOOST_PP_ITERATION_5 14
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 13 && BOOST_PP_ITERATION_START_5 >= 13
+# define BOOST_PP_ITERATION_5 13
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 12 && BOOST_PP_ITERATION_START_5 >= 12
+# define BOOST_PP_ITERATION_5 12
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 11 && BOOST_PP_ITERATION_START_5 >= 11
+# define BOOST_PP_ITERATION_5 11
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 10 && BOOST_PP_ITERATION_START_5 >= 10
+# define BOOST_PP_ITERATION_5 10
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 9 && BOOST_PP_ITERATION_START_5 >= 9
+# define BOOST_PP_ITERATION_5 9
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 8 && BOOST_PP_ITERATION_START_5 >= 8
+# define BOOST_PP_ITERATION_5 8
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 7 && BOOST_PP_ITERATION_START_5 >= 7
+# define BOOST_PP_ITERATION_5 7
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 6 && BOOST_PP_ITERATION_START_5 >= 6
+# define BOOST_PP_ITERATION_5 6
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 5 && BOOST_PP_ITERATION_START_5 >= 5
+# define BOOST_PP_ITERATION_5 5
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 4 && BOOST_PP_ITERATION_START_5 >= 4
+# define BOOST_PP_ITERATION_5 4
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 3 && BOOST_PP_ITERATION_START_5 >= 3
+# define BOOST_PP_ITERATION_5 3
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 2 && BOOST_PP_ITERATION_START_5 >= 2
+# define BOOST_PP_ITERATION_5 2
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 1 && BOOST_PP_ITERATION_START_5 >= 1
+# define BOOST_PP_ITERATION_5 1
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 0 && BOOST_PP_ITERATION_START_5 >= 0
+# define BOOST_PP_ITERATION_5 0
+# include BOOST_PP_FILENAME_5
+# undef BOOST_PP_ITERATION_5
+# endif
diff --git a/boost/boost/preprocessor/iteration/detail/local.hpp b/boost/boost/preprocessor/iteration/detail/local.hpp
new file mode 100644
index 00000000000..ccddd5e0f0a
--- /dev/null
+++ b/boost/boost/preprocessor/iteration/detail/local.hpp
@@ -0,0 +1,812 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# if !defined(BOOST_PP_LOCAL_LIMITS)
+# error BOOST_PP_ERROR: local iteration boundaries are not defined
+# elif !defined(BOOST_PP_LOCAL_MACRO)
+# error BOOST_PP_ERROR: local iteration target macro is not defined
+# else
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_LOCAL_S BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_LOCAL_LIMITS)
+# define BOOST_PP_LOCAL_F BOOST_PP_TUPLE_ELEM(2, 1, BOOST_PP_LOCAL_LIMITS)
+# else
+# define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_LOCAL_LIMITS)
+# include <boost/preprocessor/iteration/detail/start.hpp>
+# define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 1, BOOST_PP_LOCAL_LIMITS)
+# include <boost/preprocessor/iteration/detail/finish.hpp>
+# define BOOST_PP_LOCAL_S BOOST_PP_LOCAL_SE()
+# define BOOST_PP_LOCAL_F BOOST_PP_LOCAL_FE()
+# endif
+# endif
+#
+# if (BOOST_PP_LOCAL_S) > (BOOST_PP_LOCAL_F)
+# include <boost/preprocessor/iteration/detail/rlocal.hpp>
+# else
+# if BOOST_PP_LOCAL_C(0)
+ BOOST_PP_LOCAL_MACRO(0)
+# endif
+# if BOOST_PP_LOCAL_C(1)
+ BOOST_PP_LOCAL_MACRO(1)
+# endif
+# if BOOST_PP_LOCAL_C(2)
+ BOOST_PP_LOCAL_MACRO(2)
+# endif
+# if BOOST_PP_LOCAL_C(3)
+ BOOST_PP_LOCAL_MACRO(3)
+# endif
+# if BOOST_PP_LOCAL_C(4)
+ BOOST_PP_LOCAL_MACRO(4)
+# endif
+# if BOOST_PP_LOCAL_C(5)
+ BOOST_PP_LOCAL_MACRO(5)
+# endif
+# if BOOST_PP_LOCAL_C(6)
+ BOOST_PP_LOCAL_MACRO(6)
+# endif
+# if BOOST_PP_LOCAL_C(7)
+ BOOST_PP_LOCAL_MACRO(7)
+# endif
+# if BOOST_PP_LOCAL_C(8)
+ BOOST_PP_LOCAL_MACRO(8)
+# endif
+# if BOOST_PP_LOCAL_C(9)
+ BOOST_PP_LOCAL_MACRO(9)
+# endif
+# if BOOST_PP_LOCAL_C(10)
+ BOOST_PP_LOCAL_MACRO(10)
+# endif
+# if BOOST_PP_LOCAL_C(11)
+ BOOST_PP_LOCAL_MACRO(11)
+# endif
+# if BOOST_PP_LOCAL_C(12)
+ BOOST_PP_LOCAL_MACRO(12)
+# endif
+# if BOOST_PP_LOCAL_C(13)
+ BOOST_PP_LOCAL_MACRO(13)
+# endif
+# if BOOST_PP_LOCAL_C(14)
+ BOOST_PP_LOCAL_MACRO(14)
+# endif
+# if BOOST_PP_LOCAL_C(15)
+ BOOST_PP_LOCAL_MACRO(15)
+# endif
+# if BOOST_PP_LOCAL_C(16)
+ BOOST_PP_LOCAL_MACRO(16)
+# endif
+# if BOOST_PP_LOCAL_C(17)
+ BOOST_PP_LOCAL_MACRO(17)
+# endif
+# if BOOST_PP_LOCAL_C(18)
+ BOOST_PP_LOCAL_MACRO(18)
+# endif
+# if BOOST_PP_LOCAL_C(19)
+ BOOST_PP_LOCAL_MACRO(19)
+# endif
+# if BOOST_PP_LOCAL_C(20)
+ BOOST_PP_LOCAL_MACRO(20)
+# endif
+# if BOOST_PP_LOCAL_C(21)
+ BOOST_PP_LOCAL_MACRO(21)
+# endif
+# if BOOST_PP_LOCAL_C(22)
+ BOOST_PP_LOCAL_MACRO(22)
+# endif
+# if BOOST_PP_LOCAL_C(23)
+ BOOST_PP_LOCAL_MACRO(23)
+# endif
+# if BOOST_PP_LOCAL_C(24)
+ BOOST_PP_LOCAL_MACRO(24)
+# endif
+# if BOOST_PP_LOCAL_C(25)
+ BOOST_PP_LOCAL_MACRO(25)
+# endif
+# if BOOST_PP_LOCAL_C(26)
+ BOOST_PP_LOCAL_MACRO(26)
+# endif
+# if BOOST_PP_LOCAL_C(27)
+ BOOST_PP_LOCAL_MACRO(27)
+# endif
+# if BOOST_PP_LOCAL_C(28)
+ BOOST_PP_LOCAL_MACRO(28)
+# endif
+# if BOOST_PP_LOCAL_C(29)
+ BOOST_PP_LOCAL_MACRO(29)
+# endif
+# if BOOST_PP_LOCAL_C(30)
+ BOOST_PP_LOCAL_MACRO(30)
+# endif
+# if BOOST_PP_LOCAL_C(31)
+ BOOST_PP_LOCAL_MACRO(31)
+# endif
+# if BOOST_PP_LOCAL_C(32)
+ BOOST_PP_LOCAL_MACRO(32)
+# endif
+# if BOOST_PP_LOCAL_C(33)
+ BOOST_PP_LOCAL_MACRO(33)
+# endif
+# if BOOST_PP_LOCAL_C(34)
+ BOOST_PP_LOCAL_MACRO(34)
+# endif
+# if BOOST_PP_LOCAL_C(35)
+ BOOST_PP_LOCAL_MACRO(35)
+# endif
+# if BOOST_PP_LOCAL_C(36)
+ BOOST_PP_LOCAL_MACRO(36)
+# endif
+# if BOOST_PP_LOCAL_C(37)
+ BOOST_PP_LOCAL_MACRO(37)
+# endif
+# if BOOST_PP_LOCAL_C(38)
+ BOOST_PP_LOCAL_MACRO(38)
+# endif
+# if BOOST_PP_LOCAL_C(39)
+ BOOST_PP_LOCAL_MACRO(39)
+# endif
+# if BOOST_PP_LOCAL_C(40)
+ BOOST_PP_LOCAL_MACRO(40)
+# endif
+# if BOOST_PP_LOCAL_C(41)
+ BOOST_PP_LOCAL_MACRO(41)
+# endif
+# if BOOST_PP_LOCAL_C(42)
+ BOOST_PP_LOCAL_MACRO(42)
+# endif
+# if BOOST_PP_LOCAL_C(43)
+ BOOST_PP_LOCAL_MACRO(43)
+# endif
+# if BOOST_PP_LOCAL_C(44)
+ BOOST_PP_LOCAL_MACRO(44)
+# endif
+# if BOOST_PP_LOCAL_C(45)
+ BOOST_PP_LOCAL_MACRO(45)
+# endif
+# if BOOST_PP_LOCAL_C(46)
+ BOOST_PP_LOCAL_MACRO(46)
+# endif
+# if BOOST_PP_LOCAL_C(47)
+ BOOST_PP_LOCAL_MACRO(47)
+# endif
+# if BOOST_PP_LOCAL_C(48)
+ BOOST_PP_LOCAL_MACRO(48)
+# endif
+# if BOOST_PP_LOCAL_C(49)
+ BOOST_PP_LOCAL_MACRO(49)
+# endif
+# if BOOST_PP_LOCAL_C(50)
+ BOOST_PP_LOCAL_MACRO(50)
+# endif
+# if BOOST_PP_LOCAL_C(51)
+ BOOST_PP_LOCAL_MACRO(51)
+# endif
+# if BOOST_PP_LOCAL_C(52)
+ BOOST_PP_LOCAL_MACRO(52)
+# endif
+# if BOOST_PP_LOCAL_C(53)
+ BOOST_PP_LOCAL_MACRO(53)
+# endif
+# if BOOST_PP_LOCAL_C(54)
+ BOOST_PP_LOCAL_MACRO(54)
+# endif
+# if BOOST_PP_LOCAL_C(55)
+ BOOST_PP_LOCAL_MACRO(55)
+# endif
+# if BOOST_PP_LOCAL_C(56)
+ BOOST_PP_LOCAL_MACRO(56)
+# endif
+# if BOOST_PP_LOCAL_C(57)
+ BOOST_PP_LOCAL_MACRO(57)
+# endif
+# if BOOST_PP_LOCAL_C(58)
+ BOOST_PP_LOCAL_MACRO(58)
+# endif
+# if BOOST_PP_LOCAL_C(59)
+ BOOST_PP_LOCAL_MACRO(59)
+# endif
+# if BOOST_PP_LOCAL_C(60)
+ BOOST_PP_LOCAL_MACRO(60)
+# endif
+# if BOOST_PP_LOCAL_C(61)
+ BOOST_PP_LOCAL_MACRO(61)
+# endif
+# if BOOST_PP_LOCAL_C(62)
+ BOOST_PP_LOCAL_MACRO(62)
+# endif
+# if BOOST_PP_LOCAL_C(63)
+ BOOST_PP_LOCAL_MACRO(63)
+# endif
+# if BOOST_PP_LOCAL_C(64)
+ BOOST_PP_LOCAL_MACRO(64)
+# endif
+# if BOOST_PP_LOCAL_C(65)
+ BOOST_PP_LOCAL_MACRO(65)
+# endif
+# if BOOST_PP_LOCAL_C(66)
+ BOOST_PP_LOCAL_MACRO(66)
+# endif
+# if BOOST_PP_LOCAL_C(67)
+ BOOST_PP_LOCAL_MACRO(67)
+# endif
+# if BOOST_PP_LOCAL_C(68)
+ BOOST_PP_LOCAL_MACRO(68)
+# endif
+# if BOOST_PP_LOCAL_C(69)
+ BOOST_PP_LOCAL_MACRO(69)
+# endif
+# if BOOST_PP_LOCAL_C(70)
+ BOOST_PP_LOCAL_MACRO(70)
+# endif
+# if BOOST_PP_LOCAL_C(71)
+ BOOST_PP_LOCAL_MACRO(71)
+# endif
+# if BOOST_PP_LOCAL_C(72)
+ BOOST_PP_LOCAL_MACRO(72)
+# endif
+# if BOOST_PP_LOCAL_C(73)
+ BOOST_PP_LOCAL_MACRO(73)
+# endif
+# if BOOST_PP_LOCAL_C(74)
+ BOOST_PP_LOCAL_MACRO(74)
+# endif
+# if BOOST_PP_LOCAL_C(75)
+ BOOST_PP_LOCAL_MACRO(75)
+# endif
+# if BOOST_PP_LOCAL_C(76)
+ BOOST_PP_LOCAL_MACRO(76)
+# endif
+# if BOOST_PP_LOCAL_C(77)
+ BOOST_PP_LOCAL_MACRO(77)
+# endif
+# if BOOST_PP_LOCAL_C(78)
+ BOOST_PP_LOCAL_MACRO(78)
+# endif
+# if BOOST_PP_LOCAL_C(79)
+ BOOST_PP_LOCAL_MACRO(79)
+# endif
+# if BOOST_PP_LOCAL_C(80)
+ BOOST_PP_LOCAL_MACRO(80)
+# endif
+# if BOOST_PP_LOCAL_C(81)
+ BOOST_PP_LOCAL_MACRO(81)
+# endif
+# if BOOST_PP_LOCAL_C(82)
+ BOOST_PP_LOCAL_MACRO(82)
+# endif
+# if BOOST_PP_LOCAL_C(83)
+ BOOST_PP_LOCAL_MACRO(83)
+# endif
+# if BOOST_PP_LOCAL_C(84)
+ BOOST_PP_LOCAL_MACRO(84)
+# endif
+# if BOOST_PP_LOCAL_C(85)
+ BOOST_PP_LOCAL_MACRO(85)
+# endif
+# if BOOST_PP_LOCAL_C(86)
+ BOOST_PP_LOCAL_MACRO(86)
+# endif
+# if BOOST_PP_LOCAL_C(87)
+ BOOST_PP_LOCAL_MACRO(87)
+# endif
+# if BOOST_PP_LOCAL_C(88)
+ BOOST_PP_LOCAL_MACRO(88)
+# endif
+# if BOOST_PP_LOCAL_C(89)
+ BOOST_PP_LOCAL_MACRO(89)
+# endif
+# if BOOST_PP_LOCAL_C(90)
+ BOOST_PP_LOCAL_MACRO(90)
+# endif
+# if BOOST_PP_LOCAL_C(91)
+ BOOST_PP_LOCAL_MACRO(91)
+# endif
+# if BOOST_PP_LOCAL_C(92)
+ BOOST_PP_LOCAL_MACRO(92)
+# endif
+# if BOOST_PP_LOCAL_C(93)
+ BOOST_PP_LOCAL_MACRO(93)
+# endif
+# if BOOST_PP_LOCAL_C(94)
+ BOOST_PP_LOCAL_MACRO(94)
+# endif
+# if BOOST_PP_LOCAL_C(95)
+ BOOST_PP_LOCAL_MACRO(95)
+# endif
+# if BOOST_PP_LOCAL_C(96)
+ BOOST_PP_LOCAL_MACRO(96)
+# endif
+# if BOOST_PP_LOCAL_C(97)
+ BOOST_PP_LOCAL_MACRO(97)
+# endif
+# if BOOST_PP_LOCAL_C(98)
+ BOOST_PP_LOCAL_MACRO(98)
+# endif
+# if BOOST_PP_LOCAL_C(99)
+ BOOST_PP_LOCAL_MACRO(99)
+# endif
+# if BOOST_PP_LOCAL_C(100)
+ BOOST_PP_LOCAL_MACRO(100)
+# endif
+# if BOOST_PP_LOCAL_C(101)
+ BOOST_PP_LOCAL_MACRO(101)
+# endif
+# if BOOST_PP_LOCAL_C(102)
+ BOOST_PP_LOCAL_MACRO(102)
+# endif
+# if BOOST_PP_LOCAL_C(103)
+ BOOST_PP_LOCAL_MACRO(103)
+# endif
+# if BOOST_PP_LOCAL_C(104)
+ BOOST_PP_LOCAL_MACRO(104)
+# endif
+# if BOOST_PP_LOCAL_C(105)
+ BOOST_PP_LOCAL_MACRO(105)
+# endif
+# if BOOST_PP_LOCAL_C(106)
+ BOOST_PP_LOCAL_MACRO(106)
+# endif
+# if BOOST_PP_LOCAL_C(107)
+ BOOST_PP_LOCAL_MACRO(107)
+# endif
+# if BOOST_PP_LOCAL_C(108)
+ BOOST_PP_LOCAL_MACRO(108)
+# endif
+# if BOOST_PP_LOCAL_C(109)
+ BOOST_PP_LOCAL_MACRO(109)
+# endif
+# if BOOST_PP_LOCAL_C(110)
+ BOOST_PP_LOCAL_MACRO(110)
+# endif
+# if BOOST_PP_LOCAL_C(111)
+ BOOST_PP_LOCAL_MACRO(111)
+# endif
+# if BOOST_PP_LOCAL_C(112)
+ BOOST_PP_LOCAL_MACRO(112)
+# endif
+# if BOOST_PP_LOCAL_C(113)
+ BOOST_PP_LOCAL_MACRO(113)
+# endif
+# if BOOST_PP_LOCAL_C(114)
+ BOOST_PP_LOCAL_MACRO(114)
+# endif
+# if BOOST_PP_LOCAL_C(115)
+ BOOST_PP_LOCAL_MACRO(115)
+# endif
+# if BOOST_PP_LOCAL_C(116)
+ BOOST_PP_LOCAL_MACRO(116)
+# endif
+# if BOOST_PP_LOCAL_C(117)
+ BOOST_PP_LOCAL_MACRO(117)
+# endif
+# if BOOST_PP_LOCAL_C(118)
+ BOOST_PP_LOCAL_MACRO(118)
+# endif
+# if BOOST_PP_LOCAL_C(119)
+ BOOST_PP_LOCAL_MACRO(119)
+# endif
+# if BOOST_PP_LOCAL_C(120)
+ BOOST_PP_LOCAL_MACRO(120)
+# endif
+# if BOOST_PP_LOCAL_C(121)
+ BOOST_PP_LOCAL_MACRO(121)
+# endif
+# if BOOST_PP_LOCAL_C(122)
+ BOOST_PP_LOCAL_MACRO(122)
+# endif
+# if BOOST_PP_LOCAL_C(123)
+ BOOST_PP_LOCAL_MACRO(123)
+# endif
+# if BOOST_PP_LOCAL_C(124)
+ BOOST_PP_LOCAL_MACRO(124)
+# endif
+# if BOOST_PP_LOCAL_C(125)
+ BOOST_PP_LOCAL_MACRO(125)
+# endif
+# if BOOST_PP_LOCAL_C(126)
+ BOOST_PP_LOCAL_MACRO(126)
+# endif
+# if BOOST_PP_LOCAL_C(127)
+ BOOST_PP_LOCAL_MACRO(127)
+# endif
+# if BOOST_PP_LOCAL_C(128)
+ BOOST_PP_LOCAL_MACRO(128)
+# endif
+# if BOOST_PP_LOCAL_C(129)
+ BOOST_PP_LOCAL_MACRO(129)
+# endif
+# if BOOST_PP_LOCAL_C(130)
+ BOOST_PP_LOCAL_MACRO(130)
+# endif
+# if BOOST_PP_LOCAL_C(131)
+ BOOST_PP_LOCAL_MACRO(131)
+# endif
+# if BOOST_PP_LOCAL_C(132)
+ BOOST_PP_LOCAL_MACRO(132)
+# endif
+# if BOOST_PP_LOCAL_C(133)
+ BOOST_PP_LOCAL_MACRO(133)
+# endif
+# if BOOST_PP_LOCAL_C(134)
+ BOOST_PP_LOCAL_MACRO(134)
+# endif
+# if BOOST_PP_LOCAL_C(135)
+ BOOST_PP_LOCAL_MACRO(135)
+# endif
+# if BOOST_PP_LOCAL_C(136)
+ BOOST_PP_LOCAL_MACRO(136)
+# endif
+# if BOOST_PP_LOCAL_C(137)
+ BOOST_PP_LOCAL_MACRO(137)
+# endif
+# if BOOST_PP_LOCAL_C(138)
+ BOOST_PP_LOCAL_MACRO(138)
+# endif
+# if BOOST_PP_LOCAL_C(139)
+ BOOST_PP_LOCAL_MACRO(139)
+# endif
+# if BOOST_PP_LOCAL_C(140)
+ BOOST_PP_LOCAL_MACRO(140)
+# endif
+# if BOOST_PP_LOCAL_C(141)
+ BOOST_PP_LOCAL_MACRO(141)
+# endif
+# if BOOST_PP_LOCAL_C(142)
+ BOOST_PP_LOCAL_MACRO(142)
+# endif
+# if BOOST_PP_LOCAL_C(143)
+ BOOST_PP_LOCAL_MACRO(143)
+# endif
+# if BOOST_PP_LOCAL_C(144)
+ BOOST_PP_LOCAL_MACRO(144)
+# endif
+# if BOOST_PP_LOCAL_C(145)
+ BOOST_PP_LOCAL_MACRO(145)
+# endif
+# if BOOST_PP_LOCAL_C(146)
+ BOOST_PP_LOCAL_MACRO(146)
+# endif
+# if BOOST_PP_LOCAL_C(147)
+ BOOST_PP_LOCAL_MACRO(147)
+# endif
+# if BOOST_PP_LOCAL_C(148)
+ BOOST_PP_LOCAL_MACRO(148)
+# endif
+# if BOOST_PP_LOCAL_C(149)
+ BOOST_PP_LOCAL_MACRO(149)
+# endif
+# if BOOST_PP_LOCAL_C(150)
+ BOOST_PP_LOCAL_MACRO(150)
+# endif
+# if BOOST_PP_LOCAL_C(151)
+ BOOST_PP_LOCAL_MACRO(151)
+# endif
+# if BOOST_PP_LOCAL_C(152)
+ BOOST_PP_LOCAL_MACRO(152)
+# endif
+# if BOOST_PP_LOCAL_C(153)
+ BOOST_PP_LOCAL_MACRO(153)
+# endif
+# if BOOST_PP_LOCAL_C(154)
+ BOOST_PP_LOCAL_MACRO(154)
+# endif
+# if BOOST_PP_LOCAL_C(155)
+ BOOST_PP_LOCAL_MACRO(155)
+# endif
+# if BOOST_PP_LOCAL_C(156)
+ BOOST_PP_LOCAL_MACRO(156)
+# endif
+# if BOOST_PP_LOCAL_C(157)
+ BOOST_PP_LOCAL_MACRO(157)
+# endif
+# if BOOST_PP_LOCAL_C(158)
+ BOOST_PP_LOCAL_MACRO(158)
+# endif
+# if BOOST_PP_LOCAL_C(159)
+ BOOST_PP_LOCAL_MACRO(159)
+# endif
+# if BOOST_PP_LOCAL_C(160)
+ BOOST_PP_LOCAL_MACRO(160)
+# endif
+# if BOOST_PP_LOCAL_C(161)
+ BOOST_PP_LOCAL_MACRO(161)
+# endif
+# if BOOST_PP_LOCAL_C(162)
+ BOOST_PP_LOCAL_MACRO(162)
+# endif
+# if BOOST_PP_LOCAL_C(163)
+ BOOST_PP_LOCAL_MACRO(163)
+# endif
+# if BOOST_PP_LOCAL_C(164)
+ BOOST_PP_LOCAL_MACRO(164)
+# endif
+# if BOOST_PP_LOCAL_C(165)
+ BOOST_PP_LOCAL_MACRO(165)
+# endif
+# if BOOST_PP_LOCAL_C(166)
+ BOOST_PP_LOCAL_MACRO(166)
+# endif
+# if BOOST_PP_LOCAL_C(167)
+ BOOST_PP_LOCAL_MACRO(167)
+# endif
+# if BOOST_PP_LOCAL_C(168)
+ BOOST_PP_LOCAL_MACRO(168)
+# endif
+# if BOOST_PP_LOCAL_C(169)
+ BOOST_PP_LOCAL_MACRO(169)
+# endif
+# if BOOST_PP_LOCAL_C(170)
+ BOOST_PP_LOCAL_MACRO(170)
+# endif
+# if BOOST_PP_LOCAL_C(171)
+ BOOST_PP_LOCAL_MACRO(171)
+# endif
+# if BOOST_PP_LOCAL_C(172)
+ BOOST_PP_LOCAL_MACRO(172)
+# endif
+# if BOOST_PP_LOCAL_C(173)
+ BOOST_PP_LOCAL_MACRO(173)
+# endif
+# if BOOST_PP_LOCAL_C(174)
+ BOOST_PP_LOCAL_MACRO(174)
+# endif
+# if BOOST_PP_LOCAL_C(175)
+ BOOST_PP_LOCAL_MACRO(175)
+# endif
+# if BOOST_PP_LOCAL_C(176)
+ BOOST_PP_LOCAL_MACRO(176)
+# endif
+# if BOOST_PP_LOCAL_C(177)
+ BOOST_PP_LOCAL_MACRO(177)
+# endif
+# if BOOST_PP_LOCAL_C(178)
+ BOOST_PP_LOCAL_MACRO(178)
+# endif
+# if BOOST_PP_LOCAL_C(179)
+ BOOST_PP_LOCAL_MACRO(179)
+# endif
+# if BOOST_PP_LOCAL_C(180)
+ BOOST_PP_LOCAL_MACRO(180)
+# endif
+# if BOOST_PP_LOCAL_C(181)
+ BOOST_PP_LOCAL_MACRO(181)
+# endif
+# if BOOST_PP_LOCAL_C(182)
+ BOOST_PP_LOCAL_MACRO(182)
+# endif
+# if BOOST_PP_LOCAL_C(183)
+ BOOST_PP_LOCAL_MACRO(183)
+# endif
+# if BOOST_PP_LOCAL_C(184)
+ BOOST_PP_LOCAL_MACRO(184)
+# endif
+# if BOOST_PP_LOCAL_C(185)
+ BOOST_PP_LOCAL_MACRO(185)
+# endif
+# if BOOST_PP_LOCAL_C(186)
+ BOOST_PP_LOCAL_MACRO(186)
+# endif
+# if BOOST_PP_LOCAL_C(187)
+ BOOST_PP_LOCAL_MACRO(187)
+# endif
+# if BOOST_PP_LOCAL_C(188)
+ BOOST_PP_LOCAL_MACRO(188)
+# endif
+# if BOOST_PP_LOCAL_C(189)
+ BOOST_PP_LOCAL_MACRO(189)
+# endif
+# if BOOST_PP_LOCAL_C(190)
+ BOOST_PP_LOCAL_MACRO(190)
+# endif
+# if BOOST_PP_LOCAL_C(191)
+ BOOST_PP_LOCAL_MACRO(191)
+# endif
+# if BOOST_PP_LOCAL_C(192)
+ BOOST_PP_LOCAL_MACRO(192)
+# endif
+# if BOOST_PP_LOCAL_C(193)
+ BOOST_PP_LOCAL_MACRO(193)
+# endif
+# if BOOST_PP_LOCAL_C(194)
+ BOOST_PP_LOCAL_MACRO(194)
+# endif
+# if BOOST_PP_LOCAL_C(195)
+ BOOST_PP_LOCAL_MACRO(195)
+# endif
+# if BOOST_PP_LOCAL_C(196)
+ BOOST_PP_LOCAL_MACRO(196)
+# endif
+# if BOOST_PP_LOCAL_C(197)
+ BOOST_PP_LOCAL_MACRO(197)
+# endif
+# if BOOST_PP_LOCAL_C(198)
+ BOOST_PP_LOCAL_MACRO(198)
+# endif
+# if BOOST_PP_LOCAL_C(199)
+ BOOST_PP_LOCAL_MACRO(199)
+# endif
+# if BOOST_PP_LOCAL_C(200)
+ BOOST_PP_LOCAL_MACRO(200)
+# endif
+# if BOOST_PP_LOCAL_C(201)
+ BOOST_PP_LOCAL_MACRO(201)
+# endif
+# if BOOST_PP_LOCAL_C(202)
+ BOOST_PP_LOCAL_MACRO(202)
+# endif
+# if BOOST_PP_LOCAL_C(203)
+ BOOST_PP_LOCAL_MACRO(203)
+# endif
+# if BOOST_PP_LOCAL_C(204)
+ BOOST_PP_LOCAL_MACRO(204)
+# endif
+# if BOOST_PP_LOCAL_C(205)
+ BOOST_PP_LOCAL_MACRO(205)
+# endif
+# if BOOST_PP_LOCAL_C(206)
+ BOOST_PP_LOCAL_MACRO(206)
+# endif
+# if BOOST_PP_LOCAL_C(207)
+ BOOST_PP_LOCAL_MACRO(207)
+# endif
+# if BOOST_PP_LOCAL_C(208)
+ BOOST_PP_LOCAL_MACRO(208)
+# endif
+# if BOOST_PP_LOCAL_C(209)
+ BOOST_PP_LOCAL_MACRO(209)
+# endif
+# if BOOST_PP_LOCAL_C(210)
+ BOOST_PP_LOCAL_MACRO(210)
+# endif
+# if BOOST_PP_LOCAL_C(211)
+ BOOST_PP_LOCAL_MACRO(211)
+# endif
+# if BOOST_PP_LOCAL_C(212)
+ BOOST_PP_LOCAL_MACRO(212)
+# endif
+# if BOOST_PP_LOCAL_C(213)
+ BOOST_PP_LOCAL_MACRO(213)
+# endif
+# if BOOST_PP_LOCAL_C(214)
+ BOOST_PP_LOCAL_MACRO(214)
+# endif
+# if BOOST_PP_LOCAL_C(215)
+ BOOST_PP_LOCAL_MACRO(215)
+# endif
+# if BOOST_PP_LOCAL_C(216)
+ BOOST_PP_LOCAL_MACRO(216)
+# endif
+# if BOOST_PP_LOCAL_C(217)
+ BOOST_PP_LOCAL_MACRO(217)
+# endif
+# if BOOST_PP_LOCAL_C(218)
+ BOOST_PP_LOCAL_MACRO(218)
+# endif
+# if BOOST_PP_LOCAL_C(219)
+ BOOST_PP_LOCAL_MACRO(219)
+# endif
+# if BOOST_PP_LOCAL_C(220)
+ BOOST_PP_LOCAL_MACRO(220)
+# endif
+# if BOOST_PP_LOCAL_C(221)
+ BOOST_PP_LOCAL_MACRO(221)
+# endif
+# if BOOST_PP_LOCAL_C(222)
+ BOOST_PP_LOCAL_MACRO(222)
+# endif
+# if BOOST_PP_LOCAL_C(223)
+ BOOST_PP_LOCAL_MACRO(223)
+# endif
+# if BOOST_PP_LOCAL_C(224)
+ BOOST_PP_LOCAL_MACRO(224)
+# endif
+# if BOOST_PP_LOCAL_C(225)
+ BOOST_PP_LOCAL_MACRO(225)
+# endif
+# if BOOST_PP_LOCAL_C(226)
+ BOOST_PP_LOCAL_MACRO(226)
+# endif
+# if BOOST_PP_LOCAL_C(227)
+ BOOST_PP_LOCAL_MACRO(227)
+# endif
+# if BOOST_PP_LOCAL_C(228)
+ BOOST_PP_LOCAL_MACRO(228)
+# endif
+# if BOOST_PP_LOCAL_C(229)
+ BOOST_PP_LOCAL_MACRO(229)
+# endif
+# if BOOST_PP_LOCAL_C(230)
+ BOOST_PP_LOCAL_MACRO(230)
+# endif
+# if BOOST_PP_LOCAL_C(231)
+ BOOST_PP_LOCAL_MACRO(231)
+# endif
+# if BOOST_PP_LOCAL_C(232)
+ BOOST_PP_LOCAL_MACRO(232)
+# endif
+# if BOOST_PP_LOCAL_C(233)
+ BOOST_PP_LOCAL_MACRO(233)
+# endif
+# if BOOST_PP_LOCAL_C(234)
+ BOOST_PP_LOCAL_MACRO(234)
+# endif
+# if BOOST_PP_LOCAL_C(235)
+ BOOST_PP_LOCAL_MACRO(235)
+# endif
+# if BOOST_PP_LOCAL_C(236)
+ BOOST_PP_LOCAL_MACRO(236)
+# endif
+
+# if BOOST_PP_LOCAL_C(237)
+ BOOST_PP_LOCAL_MACRO(237)
+# endif
+# if BOOST_PP_LOCAL_C(238)
+ BOOST_PP_LOCAL_MACRO(238)
+# endif
+# if BOOST_PP_LOCAL_C(239)
+ BOOST_PP_LOCAL_MACRO(239)
+# endif
+# if BOOST_PP_LOCAL_C(240)
+ BOOST_PP_LOCAL_MACRO(240)
+# endif
+# if BOOST_PP_LOCAL_C(241)
+ BOOST_PP_LOCAL_MACRO(241)
+# endif
+# if BOOST_PP_LOCAL_C(242)
+ BOOST_PP_LOCAL_MACRO(242)
+# endif
+# if BOOST_PP_LOCAL_C(243)
+ BOOST_PP_LOCAL_MACRO(243)
+# endif
+# if BOOST_PP_LOCAL_C(244)
+ BOOST_PP_LOCAL_MACRO(244)
+# endif
+# if BOOST_PP_LOCAL_C(245)
+ BOOST_PP_LOCAL_MACRO(245)
+# endif
+# if BOOST_PP_LOCAL_C(246)
+ BOOST_PP_LOCAL_MACRO(246)
+# endif
+# if BOOST_PP_LOCAL_C(247)
+ BOOST_PP_LOCAL_MACRO(247)
+# endif
+# if BOOST_PP_LOCAL_C(248)
+ BOOST_PP_LOCAL_MACRO(248)
+# endif
+# if BOOST_PP_LOCAL_C(249)
+ BOOST_PP_LOCAL_MACRO(249)
+# endif
+# if BOOST_PP_LOCAL_C(250)
+ BOOST_PP_LOCAL_MACRO(250)
+# endif
+# if BOOST_PP_LOCAL_C(251)
+ BOOST_PP_LOCAL_MACRO(251)
+# endif
+# if BOOST_PP_LOCAL_C(252)
+ BOOST_PP_LOCAL_MACRO(252)
+# endif
+# if BOOST_PP_LOCAL_C(253)
+ BOOST_PP_LOCAL_MACRO(253)
+# endif
+# if BOOST_PP_LOCAL_C(254)
+ BOOST_PP_LOCAL_MACRO(254)
+# endif
+# if BOOST_PP_LOCAL_C(255)
+ BOOST_PP_LOCAL_MACRO(255)
+# endif
+# if BOOST_PP_LOCAL_C(256)
+ BOOST_PP_LOCAL_MACRO(256)
+# endif
+# endif
+#
+# undef BOOST_PP_LOCAL_LIMITS
+#
+# undef BOOST_PP_LOCAL_S
+# undef BOOST_PP_LOCAL_F
+#
+# undef BOOST_PP_LOCAL_MACRO
diff --git a/boost/boost/preprocessor/iteration/detail/rlocal.hpp b/boost/boost/preprocessor/iteration/detail/rlocal.hpp
new file mode 100644
index 00000000000..413afa09d1b
--- /dev/null
+++ b/boost/boost/preprocessor/iteration/detail/rlocal.hpp
@@ -0,0 +1,782 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# if BOOST_PP_LOCAL_R(256)
+ BOOST_PP_LOCAL_MACRO(256)
+# endif
+# if BOOST_PP_LOCAL_R(255)
+ BOOST_PP_LOCAL_MACRO(255)
+# endif
+# if BOOST_PP_LOCAL_R(254)
+ BOOST_PP_LOCAL_MACRO(254)
+# endif
+# if BOOST_PP_LOCAL_R(253)
+ BOOST_PP_LOCAL_MACRO(253)
+# endif
+# if BOOST_PP_LOCAL_R(252)
+ BOOST_PP_LOCAL_MACRO(252)
+# endif
+# if BOOST_PP_LOCAL_R(251)
+ BOOST_PP_LOCAL_MACRO(251)
+# endif
+# if BOOST_PP_LOCAL_R(250)
+ BOOST_PP_LOCAL_MACRO(250)
+# endif
+# if BOOST_PP_LOCAL_R(249)
+ BOOST_PP_LOCAL_MACRO(249)
+# endif
+# if BOOST_PP_LOCAL_R(248)
+ BOOST_PP_LOCAL_MACRO(248)
+# endif
+# if BOOST_PP_LOCAL_R(247)
+ BOOST_PP_LOCAL_MACRO(247)
+# endif
+# if BOOST_PP_LOCAL_R(246)
+ BOOST_PP_LOCAL_MACRO(246)
+# endif
+# if BOOST_PP_LOCAL_R(245)
+ BOOST_PP_LOCAL_MACRO(245)
+# endif
+# if BOOST_PP_LOCAL_R(244)
+ BOOST_PP_LOCAL_MACRO(244)
+# endif
+# if BOOST_PP_LOCAL_R(243)
+ BOOST_PP_LOCAL_MACRO(243)
+# endif
+# if BOOST_PP_LOCAL_R(242)
+ BOOST_PP_LOCAL_MACRO(242)
+# endif
+# if BOOST_PP_LOCAL_R(241)
+ BOOST_PP_LOCAL_MACRO(241)
+# endif
+# if BOOST_PP_LOCAL_R(240)
+ BOOST_PP_LOCAL_MACRO(240)
+# endif
+# if BOOST_PP_LOCAL_R(239)
+ BOOST_PP_LOCAL_MACRO(239)
+# endif
+# if BOOST_PP_LOCAL_R(238)
+ BOOST_PP_LOCAL_MACRO(238)
+# endif
+# if BOOST_PP_LOCAL_R(237)
+ BOOST_PP_LOCAL_MACRO(237)
+# endif
+# if BOOST_PP_LOCAL_R(236)
+ BOOST_PP_LOCAL_MACRO(236)
+# endif
+# if BOOST_PP_LOCAL_R(235)
+ BOOST_PP_LOCAL_MACRO(235)
+# endif
+# if BOOST_PP_LOCAL_R(234)
+ BOOST_PP_LOCAL_MACRO(234)
+# endif
+# if BOOST_PP_LOCAL_R(233)
+ BOOST_PP_LOCAL_MACRO(233)
+# endif
+# if BOOST_PP_LOCAL_R(232)
+ BOOST_PP_LOCAL_MACRO(232)
+# endif
+# if BOOST_PP_LOCAL_R(231)
+ BOOST_PP_LOCAL_MACRO(231)
+# endif
+# if BOOST_PP_LOCAL_R(230)
+ BOOST_PP_LOCAL_MACRO(230)
+# endif
+# if BOOST_PP_LOCAL_R(229)
+ BOOST_PP_LOCAL_MACRO(229)
+# endif
+# if BOOST_PP_LOCAL_R(228)
+ BOOST_PP_LOCAL_MACRO(228)
+# endif
+# if BOOST_PP_LOCAL_R(227)
+ BOOST_PP_LOCAL_MACRO(227)
+# endif
+# if BOOST_PP_LOCAL_R(226)
+ BOOST_PP_LOCAL_MACRO(226)
+# endif
+# if BOOST_PP_LOCAL_R(225)
+ BOOST_PP_LOCAL_MACRO(225)
+# endif
+# if BOOST_PP_LOCAL_R(224)
+ BOOST_PP_LOCAL_MACRO(224)
+# endif
+# if BOOST_PP_LOCAL_R(223)
+ BOOST_PP_LOCAL_MACRO(223)
+# endif
+# if BOOST_PP_LOCAL_R(222)
+ BOOST_PP_LOCAL_MACRO(222)
+# endif
+# if BOOST_PP_LOCAL_R(221)
+ BOOST_PP_LOCAL_MACRO(221)
+# endif
+# if BOOST_PP_LOCAL_R(220)
+ BOOST_PP_LOCAL_MACRO(220)
+# endif
+# if BOOST_PP_LOCAL_R(219)
+ BOOST_PP_LOCAL_MACRO(219)
+# endif
+# if BOOST_PP_LOCAL_R(218)
+ BOOST_PP_LOCAL_MACRO(218)
+# endif
+# if BOOST_PP_LOCAL_R(217)
+ BOOST_PP_LOCAL_MACRO(217)
+# endif
+# if BOOST_PP_LOCAL_R(216)
+ BOOST_PP_LOCAL_MACRO(216)
+# endif
+# if BOOST_PP_LOCAL_R(215)
+ BOOST_PP_LOCAL_MACRO(215)
+# endif
+# if BOOST_PP_LOCAL_R(214)
+ BOOST_PP_LOCAL_MACRO(214)
+# endif
+# if BOOST_PP_LOCAL_R(213)
+ BOOST_PP_LOCAL_MACRO(213)
+# endif
+# if BOOST_PP_LOCAL_R(212)
+ BOOST_PP_LOCAL_MACRO(212)
+# endif
+# if BOOST_PP_LOCAL_R(211)
+ BOOST_PP_LOCAL_MACRO(211)
+# endif
+# if BOOST_PP_LOCAL_R(210)
+ BOOST_PP_LOCAL_MACRO(210)
+# endif
+# if BOOST_PP_LOCAL_R(209)
+ BOOST_PP_LOCAL_MACRO(209)
+# endif
+# if BOOST_PP_LOCAL_R(208)
+ BOOST_PP_LOCAL_MACRO(208)
+# endif
+# if BOOST_PP_LOCAL_R(207)
+ BOOST_PP_LOCAL_MACRO(207)
+# endif
+# if BOOST_PP_LOCAL_R(206)
+ BOOST_PP_LOCAL_MACRO(206)
+# endif
+# if BOOST_PP_LOCAL_R(205)
+ BOOST_PP_LOCAL_MACRO(205)
+# endif
+# if BOOST_PP_LOCAL_R(204)
+ BOOST_PP_LOCAL_MACRO(204)
+# endif
+# if BOOST_PP_LOCAL_R(203)
+ BOOST_PP_LOCAL_MACRO(203)
+# endif
+# if BOOST_PP_LOCAL_R(202)
+ BOOST_PP_LOCAL_MACRO(202)
+# endif
+# if BOOST_PP_LOCAL_R(201)
+ BOOST_PP_LOCAL_MACRO(201)
+# endif
+# if BOOST_PP_LOCAL_R(200)
+ BOOST_PP_LOCAL_MACRO(200)
+# endif
+# if BOOST_PP_LOCAL_R(199)
+ BOOST_PP_LOCAL_MACRO(199)
+# endif
+# if BOOST_PP_LOCAL_R(198)
+ BOOST_PP_LOCAL_MACRO(198)
+# endif
+# if BOOST_PP_LOCAL_R(197)
+ BOOST_PP_LOCAL_MACRO(197)
+# endif
+# if BOOST_PP_LOCAL_R(196)
+ BOOST_PP_LOCAL_MACRO(196)
+# endif
+# if BOOST_PP_LOCAL_R(195)
+ BOOST_PP_LOCAL_MACRO(195)
+# endif
+# if BOOST_PP_LOCAL_R(194)
+ BOOST_PP_LOCAL_MACRO(194)
+# endif
+# if BOOST_PP_LOCAL_R(193)
+ BOOST_PP_LOCAL_MACRO(193)
+# endif
+# if BOOST_PP_LOCAL_R(192)
+ BOOST_PP_LOCAL_MACRO(192)
+# endif
+# if BOOST_PP_LOCAL_R(191)
+ BOOST_PP_LOCAL_MACRO(191)
+# endif
+# if BOOST_PP_LOCAL_R(190)
+ BOOST_PP_LOCAL_MACRO(190)
+# endif
+# if BOOST_PP_LOCAL_R(189)
+ BOOST_PP_LOCAL_MACRO(189)
+# endif
+# if BOOST_PP_LOCAL_R(188)
+ BOOST_PP_LOCAL_MACRO(188)
+# endif
+# if BOOST_PP_LOCAL_R(187)
+ BOOST_PP_LOCAL_MACRO(187)
+# endif
+# if BOOST_PP_LOCAL_R(186)
+ BOOST_PP_LOCAL_MACRO(186)
+# endif
+# if BOOST_PP_LOCAL_R(185)
+ BOOST_PP_LOCAL_MACRO(185)
+# endif
+# if BOOST_PP_LOCAL_R(184)
+ BOOST_PP_LOCAL_MACRO(184)
+# endif
+# if BOOST_PP_LOCAL_R(183)
+ BOOST_PP_LOCAL_MACRO(183)
+# endif
+# if BOOST_PP_LOCAL_R(182)
+ BOOST_PP_LOCAL_MACRO(182)
+# endif
+# if BOOST_PP_LOCAL_R(181)
+ BOOST_PP_LOCAL_MACRO(181)
+# endif
+# if BOOST_PP_LOCAL_R(180)
+ BOOST_PP_LOCAL_MACRO(180)
+# endif
+# if BOOST_PP_LOCAL_R(179)
+ BOOST_PP_LOCAL_MACRO(179)
+# endif
+# if BOOST_PP_LOCAL_R(178)
+ BOOST_PP_LOCAL_MACRO(178)
+# endif
+# if BOOST_PP_LOCAL_R(177)
+ BOOST_PP_LOCAL_MACRO(177)
+# endif
+# if BOOST_PP_LOCAL_R(176)
+ BOOST_PP_LOCAL_MACRO(176)
+# endif
+# if BOOST_PP_LOCAL_R(175)
+ BOOST_PP_LOCAL_MACRO(175)
+# endif
+# if BOOST_PP_LOCAL_R(174)
+ BOOST_PP_LOCAL_MACRO(174)
+# endif
+# if BOOST_PP_LOCAL_R(173)
+ BOOST_PP_LOCAL_MACRO(173)
+# endif
+# if BOOST_PP_LOCAL_R(172)
+ BOOST_PP_LOCAL_MACRO(172)
+# endif
+# if BOOST_PP_LOCAL_R(171)
+ BOOST_PP_LOCAL_MACRO(171)
+# endif
+# if BOOST_PP_LOCAL_R(170)
+ BOOST_PP_LOCAL_MACRO(170)
+# endif
+# if BOOST_PP_LOCAL_R(169)
+ BOOST_PP_LOCAL_MACRO(169)
+# endif
+# if BOOST_PP_LOCAL_R(168)
+ BOOST_PP_LOCAL_MACRO(168)
+# endif
+# if BOOST_PP_LOCAL_R(167)
+ BOOST_PP_LOCAL_MACRO(167)
+# endif
+# if BOOST_PP_LOCAL_R(166)
+ BOOST_PP_LOCAL_MACRO(166)
+# endif
+# if BOOST_PP_LOCAL_R(165)
+ BOOST_PP_LOCAL_MACRO(165)
+# endif
+# if BOOST_PP_LOCAL_R(164)
+ BOOST_PP_LOCAL_MACRO(164)
+# endif
+# if BOOST_PP_LOCAL_R(163)
+ BOOST_PP_LOCAL_MACRO(163)
+# endif
+# if BOOST_PP_LOCAL_R(162)
+ BOOST_PP_LOCAL_MACRO(162)
+# endif
+# if BOOST_PP_LOCAL_R(161)
+ BOOST_PP_LOCAL_MACRO(161)
+# endif
+# if BOOST_PP_LOCAL_R(160)
+ BOOST_PP_LOCAL_MACRO(160)
+# endif
+# if BOOST_PP_LOCAL_R(159)
+ BOOST_PP_LOCAL_MACRO(159)
+# endif
+# if BOOST_PP_LOCAL_R(158)
+ BOOST_PP_LOCAL_MACRO(158)
+# endif
+# if BOOST_PP_LOCAL_R(157)
+ BOOST_PP_LOCAL_MACRO(157)
+# endif
+# if BOOST_PP_LOCAL_R(156)
+ BOOST_PP_LOCAL_MACRO(156)
+# endif
+# if BOOST_PP_LOCAL_R(155)
+ BOOST_PP_LOCAL_MACRO(155)
+# endif
+# if BOOST_PP_LOCAL_R(154)
+ BOOST_PP_LOCAL_MACRO(154)
+# endif
+# if BOOST_PP_LOCAL_R(153)
+ BOOST_PP_LOCAL_MACRO(153)
+# endif
+# if BOOST_PP_LOCAL_R(152)
+ BOOST_PP_LOCAL_MACRO(152)
+# endif
+# if BOOST_PP_LOCAL_R(151)
+ BOOST_PP_LOCAL_MACRO(151)
+# endif
+# if BOOST_PP_LOCAL_R(150)
+ BOOST_PP_LOCAL_MACRO(150)
+# endif
+# if BOOST_PP_LOCAL_R(149)
+ BOOST_PP_LOCAL_MACRO(149)
+# endif
+# if BOOST_PP_LOCAL_R(148)
+ BOOST_PP_LOCAL_MACRO(148)
+# endif
+# if BOOST_PP_LOCAL_R(147)
+ BOOST_PP_LOCAL_MACRO(147)
+# endif
+# if BOOST_PP_LOCAL_R(146)
+ BOOST_PP_LOCAL_MACRO(146)
+# endif
+# if BOOST_PP_LOCAL_R(145)
+ BOOST_PP_LOCAL_MACRO(145)
+# endif
+# if BOOST_PP_LOCAL_R(144)
+ BOOST_PP_LOCAL_MACRO(144)
+# endif
+# if BOOST_PP_LOCAL_R(143)
+ BOOST_PP_LOCAL_MACRO(143)
+# endif
+# if BOOST_PP_LOCAL_R(142)
+ BOOST_PP_LOCAL_MACRO(142)
+# endif
+# if BOOST_PP_LOCAL_R(141)
+ BOOST_PP_LOCAL_MACRO(141)
+# endif
+# if BOOST_PP_LOCAL_R(140)
+ BOOST_PP_LOCAL_MACRO(140)
+# endif
+# if BOOST_PP_LOCAL_R(139)
+ BOOST_PP_LOCAL_MACRO(139)
+# endif
+# if BOOST_PP_LOCAL_R(138)
+ BOOST_PP_LOCAL_MACRO(138)
+# endif
+# if BOOST_PP_LOCAL_R(137)
+ BOOST_PP_LOCAL_MACRO(137)
+# endif
+# if BOOST_PP_LOCAL_R(136)
+ BOOST_PP_LOCAL_MACRO(136)
+# endif
+# if BOOST_PP_LOCAL_R(135)
+ BOOST_PP_LOCAL_MACRO(135)
+# endif
+# if BOOST_PP_LOCAL_R(134)
+ BOOST_PP_LOCAL_MACRO(134)
+# endif
+# if BOOST_PP_LOCAL_R(133)
+ BOOST_PP_LOCAL_MACRO(133)
+# endif
+# if BOOST_PP_LOCAL_R(132)
+ BOOST_PP_LOCAL_MACRO(132)
+# endif
+# if BOOST_PP_LOCAL_R(131)
+ BOOST_PP_LOCAL_MACRO(131)
+# endif
+# if BOOST_PP_LOCAL_R(130)
+ BOOST_PP_LOCAL_MACRO(130)
+# endif
+# if BOOST_PP_LOCAL_R(129)
+ BOOST_PP_LOCAL_MACRO(129)
+# endif
+# if BOOST_PP_LOCAL_R(128)
+ BOOST_PP_LOCAL_MACRO(128)
+# endif
+# if BOOST_PP_LOCAL_R(127)
+ BOOST_PP_LOCAL_MACRO(127)
+# endif
+# if BOOST_PP_LOCAL_R(126)
+ BOOST_PP_LOCAL_MACRO(126)
+# endif
+# if BOOST_PP_LOCAL_R(125)
+ BOOST_PP_LOCAL_MACRO(125)
+# endif
+# if BOOST_PP_LOCAL_R(124)
+ BOOST_PP_LOCAL_MACRO(124)
+# endif
+# if BOOST_PP_LOCAL_R(123)
+ BOOST_PP_LOCAL_MACRO(123)
+# endif
+# if BOOST_PP_LOCAL_R(122)
+ BOOST_PP_LOCAL_MACRO(122)
+# endif
+# if BOOST_PP_LOCAL_R(121)
+ BOOST_PP_LOCAL_MACRO(121)
+# endif
+# if BOOST_PP_LOCAL_R(120)
+ BOOST_PP_LOCAL_MACRO(120)
+# endif
+# if BOOST_PP_LOCAL_R(119)
+ BOOST_PP_LOCAL_MACRO(119)
+# endif
+# if BOOST_PP_LOCAL_R(118)
+ BOOST_PP_LOCAL_MACRO(118)
+# endif
+# if BOOST_PP_LOCAL_R(117)
+ BOOST_PP_LOCAL_MACRO(117)
+# endif
+# if BOOST_PP_LOCAL_R(116)
+ BOOST_PP_LOCAL_MACRO(116)
+# endif
+# if BOOST_PP_LOCAL_R(115)
+ BOOST_PP_LOCAL_MACRO(115)
+# endif
+# if BOOST_PP_LOCAL_R(114)
+ BOOST_PP_LOCAL_MACRO(114)
+# endif
+# if BOOST_PP_LOCAL_R(113)
+ BOOST_PP_LOCAL_MACRO(113)
+# endif
+# if BOOST_PP_LOCAL_R(112)
+ BOOST_PP_LOCAL_MACRO(112)
+# endif
+# if BOOST_PP_LOCAL_R(111)
+ BOOST_PP_LOCAL_MACRO(111)
+# endif
+# if BOOST_PP_LOCAL_R(110)
+ BOOST_PP_LOCAL_MACRO(110)
+# endif
+# if BOOST_PP_LOCAL_R(109)
+ BOOST_PP_LOCAL_MACRO(109)
+# endif
+# if BOOST_PP_LOCAL_R(108)
+ BOOST_PP_LOCAL_MACRO(108)
+# endif
+# if BOOST_PP_LOCAL_R(107)
+ BOOST_PP_LOCAL_MACRO(107)
+# endif
+# if BOOST_PP_LOCAL_R(106)
+ BOOST_PP_LOCAL_MACRO(106)
+# endif
+# if BOOST_PP_LOCAL_R(105)
+ BOOST_PP_LOCAL_MACRO(105)
+# endif
+# if BOOST_PP_LOCAL_R(104)
+ BOOST_PP_LOCAL_MACRO(104)
+# endif
+# if BOOST_PP_LOCAL_R(103)
+ BOOST_PP_LOCAL_MACRO(103)
+# endif
+# if BOOST_PP_LOCAL_R(102)
+ BOOST_PP_LOCAL_MACRO(102)
+# endif
+# if BOOST_PP_LOCAL_R(101)
+ BOOST_PP_LOCAL_MACRO(101)
+# endif
+# if BOOST_PP_LOCAL_R(100)
+ BOOST_PP_LOCAL_MACRO(100)
+# endif
+# if BOOST_PP_LOCAL_R(99)
+ BOOST_PP_LOCAL_MACRO(99)
+# endif
+# if BOOST_PP_LOCAL_R(98)
+ BOOST_PP_LOCAL_MACRO(98)
+# endif
+# if BOOST_PP_LOCAL_R(97)
+ BOOST_PP_LOCAL_MACRO(97)
+# endif
+# if BOOST_PP_LOCAL_R(96)
+ BOOST_PP_LOCAL_MACRO(96)
+# endif
+# if BOOST_PP_LOCAL_R(95)
+ BOOST_PP_LOCAL_MACRO(95)
+# endif
+# if BOOST_PP_LOCAL_R(94)
+ BOOST_PP_LOCAL_MACRO(94)
+# endif
+# if BOOST_PP_LOCAL_R(93)
+ BOOST_PP_LOCAL_MACRO(93)
+# endif
+# if BOOST_PP_LOCAL_R(92)
+ BOOST_PP_LOCAL_MACRO(92)
+# endif
+# if BOOST_PP_LOCAL_R(91)
+ BOOST_PP_LOCAL_MACRO(91)
+# endif
+# if BOOST_PP_LOCAL_R(90)
+ BOOST_PP_LOCAL_MACRO(90)
+# endif
+# if BOOST_PP_LOCAL_R(89)
+ BOOST_PP_LOCAL_MACRO(89)
+# endif
+# if BOOST_PP_LOCAL_R(88)
+ BOOST_PP_LOCAL_MACRO(88)
+# endif
+# if BOOST_PP_LOCAL_R(87)
+ BOOST_PP_LOCAL_MACRO(87)
+# endif
+# if BOOST_PP_LOCAL_R(86)
+ BOOST_PP_LOCAL_MACRO(86)
+# endif
+# if BOOST_PP_LOCAL_R(85)
+ BOOST_PP_LOCAL_MACRO(85)
+# endif
+# if BOOST_PP_LOCAL_R(84)
+ BOOST_PP_LOCAL_MACRO(84)
+# endif
+# if BOOST_PP_LOCAL_R(83)
+ BOOST_PP_LOCAL_MACRO(83)
+# endif
+# if BOOST_PP_LOCAL_R(82)
+ BOOST_PP_LOCAL_MACRO(82)
+# endif
+# if BOOST_PP_LOCAL_R(81)
+ BOOST_PP_LOCAL_MACRO(81)
+# endif
+# if BOOST_PP_LOCAL_R(80)
+ BOOST_PP_LOCAL_MACRO(80)
+# endif
+# if BOOST_PP_LOCAL_R(79)
+ BOOST_PP_LOCAL_MACRO(79)
+# endif
+# if BOOST_PP_LOCAL_R(78)
+ BOOST_PP_LOCAL_MACRO(78)
+# endif
+# if BOOST_PP_LOCAL_R(77)
+ BOOST_PP_LOCAL_MACRO(77)
+# endif
+# if BOOST_PP_LOCAL_R(76)
+ BOOST_PP_LOCAL_MACRO(76)
+# endif
+# if BOOST_PP_LOCAL_R(75)
+ BOOST_PP_LOCAL_MACRO(75)
+# endif
+# if BOOST_PP_LOCAL_R(74)
+ BOOST_PP_LOCAL_MACRO(74)
+# endif
+# if BOOST_PP_LOCAL_R(73)
+ BOOST_PP_LOCAL_MACRO(73)
+# endif
+# if BOOST_PP_LOCAL_R(72)
+ BOOST_PP_LOCAL_MACRO(72)
+# endif
+# if BOOST_PP_LOCAL_R(71)
+ BOOST_PP_LOCAL_MACRO(71)
+# endif
+# if BOOST_PP_LOCAL_R(70)
+ BOOST_PP_LOCAL_MACRO(70)
+# endif
+# if BOOST_PP_LOCAL_R(69)
+ BOOST_PP_LOCAL_MACRO(69)
+# endif
+# if BOOST_PP_LOCAL_R(68)
+ BOOST_PP_LOCAL_MACRO(68)
+# endif
+# if BOOST_PP_LOCAL_R(67)
+ BOOST_PP_LOCAL_MACRO(67)
+# endif
+# if BOOST_PP_LOCAL_R(66)
+ BOOST_PP_LOCAL_MACRO(66)
+# endif
+# if BOOST_PP_LOCAL_R(65)
+ BOOST_PP_LOCAL_MACRO(65)
+# endif
+# if BOOST_PP_LOCAL_R(64)
+ BOOST_PP_LOCAL_MACRO(64)
+# endif
+# if BOOST_PP_LOCAL_R(63)
+ BOOST_PP_LOCAL_MACRO(63)
+# endif
+# if BOOST_PP_LOCAL_R(62)
+ BOOST_PP_LOCAL_MACRO(62)
+# endif
+# if BOOST_PP_LOCAL_R(61)
+ BOOST_PP_LOCAL_MACRO(61)
+# endif
+# if BOOST_PP_LOCAL_R(60)
+ BOOST_PP_LOCAL_MACRO(60)
+# endif
+# if BOOST_PP_LOCAL_R(59)
+ BOOST_PP_LOCAL_MACRO(59)
+# endif
+# if BOOST_PP_LOCAL_R(58)
+ BOOST_PP_LOCAL_MACRO(58)
+# endif
+# if BOOST_PP_LOCAL_R(57)
+ BOOST_PP_LOCAL_MACRO(57)
+# endif
+# if BOOST_PP_LOCAL_R(56)
+ BOOST_PP_LOCAL_MACRO(56)
+# endif
+# if BOOST_PP_LOCAL_R(55)
+ BOOST_PP_LOCAL_MACRO(55)
+# endif
+# if BOOST_PP_LOCAL_R(54)
+ BOOST_PP_LOCAL_MACRO(54)
+# endif
+# if BOOST_PP_LOCAL_R(53)
+ BOOST_PP_LOCAL_MACRO(53)
+# endif
+# if BOOST_PP_LOCAL_R(52)
+ BOOST_PP_LOCAL_MACRO(52)
+# endif
+# if BOOST_PP_LOCAL_R(51)
+ BOOST_PP_LOCAL_MACRO(51)
+# endif
+# if BOOST_PP_LOCAL_R(50)
+ BOOST_PP_LOCAL_MACRO(50)
+# endif
+# if BOOST_PP_LOCAL_R(49)
+ BOOST_PP_LOCAL_MACRO(49)
+# endif
+# if BOOST_PP_LOCAL_R(48)
+ BOOST_PP_LOCAL_MACRO(48)
+# endif
+# if BOOST_PP_LOCAL_R(47)
+ BOOST_PP_LOCAL_MACRO(47)
+# endif
+# if BOOST_PP_LOCAL_R(46)
+ BOOST_PP_LOCAL_MACRO(46)
+# endif
+# if BOOST_PP_LOCAL_R(45)
+ BOOST_PP_LOCAL_MACRO(45)
+# endif
+# if BOOST_PP_LOCAL_R(44)
+ BOOST_PP_LOCAL_MACRO(44)
+# endif
+# if BOOST_PP_LOCAL_R(43)
+ BOOST_PP_LOCAL_MACRO(43)
+# endif
+# if BOOST_PP_LOCAL_R(42)
+ BOOST_PP_LOCAL_MACRO(42)
+# endif
+# if BOOST_PP_LOCAL_R(41)
+ BOOST_PP_LOCAL_MACRO(41)
+# endif
+# if BOOST_PP_LOCAL_R(40)
+ BOOST_PP_LOCAL_MACRO(40)
+# endif
+# if BOOST_PP_LOCAL_R(39)
+ BOOST_PP_LOCAL_MACRO(39)
+# endif
+# if BOOST_PP_LOCAL_R(38)
+ BOOST_PP_LOCAL_MACRO(38)
+# endif
+# if BOOST_PP_LOCAL_R(37)
+ BOOST_PP_LOCAL_MACRO(37)
+# endif
+# if BOOST_PP_LOCAL_R(36)
+ BOOST_PP_LOCAL_MACRO(36)
+# endif
+# if BOOST_PP_LOCAL_R(35)
+ BOOST_PP_LOCAL_MACRO(35)
+# endif
+# if BOOST_PP_LOCAL_R(34)
+ BOOST_PP_LOCAL_MACRO(34)
+# endif
+# if BOOST_PP_LOCAL_R(33)
+ BOOST_PP_LOCAL_MACRO(33)
+# endif
+# if BOOST_PP_LOCAL_R(32)
+ BOOST_PP_LOCAL_MACRO(32)
+# endif
+# if BOOST_PP_LOCAL_R(31)
+ BOOST_PP_LOCAL_MACRO(31)
+# endif
+# if BOOST_PP_LOCAL_R(30)
+ BOOST_PP_LOCAL_MACRO(30)
+# endif
+# if BOOST_PP_LOCAL_R(29)
+ BOOST_PP_LOCAL_MACRO(29)
+# endif
+# if BOOST_PP_LOCAL_R(28)
+ BOOST_PP_LOCAL_MACRO(28)
+# endif
+# if BOOST_PP_LOCAL_R(27)
+ BOOST_PP_LOCAL_MACRO(27)
+# endif
+# if BOOST_PP_LOCAL_R(26)
+ BOOST_PP_LOCAL_MACRO(26)
+# endif
+# if BOOST_PP_LOCAL_R(25)
+ BOOST_PP_LOCAL_MACRO(25)
+# endif
+# if BOOST_PP_LOCAL_R(24)
+ BOOST_PP_LOCAL_MACRO(24)
+# endif
+# if BOOST_PP_LOCAL_R(23)
+ BOOST_PP_LOCAL_MACRO(23)
+# endif
+# if BOOST_PP_LOCAL_R(22)
+ BOOST_PP_LOCAL_MACRO(22)
+# endif
+# if BOOST_PP_LOCAL_R(21)
+ BOOST_PP_LOCAL_MACRO(21)
+# endif
+# if BOOST_PP_LOCAL_R(20)
+ BOOST_PP_LOCAL_MACRO(20)
+# endif
+# if BOOST_PP_LOCAL_R(19)
+ BOOST_PP_LOCAL_MACRO(19)
+# endif
+# if BOOST_PP_LOCAL_R(18)
+ BOOST_PP_LOCAL_MACRO(18)
+# endif
+# if BOOST_PP_LOCAL_R(17)
+ BOOST_PP_LOCAL_MACRO(17)
+# endif
+# if BOOST_PP_LOCAL_R(16)
+ BOOST_PP_LOCAL_MACRO(16)
+# endif
+# if BOOST_PP_LOCAL_R(15)
+ BOOST_PP_LOCAL_MACRO(15)
+# endif
+# if BOOST_PP_LOCAL_R(14)
+ BOOST_PP_LOCAL_MACRO(14)
+# endif
+# if BOOST_PP_LOCAL_R(13)
+ BOOST_PP_LOCAL_MACRO(13)
+# endif
+# if BOOST_PP_LOCAL_R(12)
+ BOOST_PP_LOCAL_MACRO(12)
+# endif
+# if BOOST_PP_LOCAL_R(11)
+ BOOST_PP_LOCAL_MACRO(11)
+# endif
+# if BOOST_PP_LOCAL_R(10)
+ BOOST_PP_LOCAL_MACRO(10)
+# endif
+# if BOOST_PP_LOCAL_R(9)
+ BOOST_PP_LOCAL_MACRO(9)
+# endif
+# if BOOST_PP_LOCAL_R(8)
+ BOOST_PP_LOCAL_MACRO(8)
+# endif
+# if BOOST_PP_LOCAL_R(7)
+ BOOST_PP_LOCAL_MACRO(7)
+# endif
+# if BOOST_PP_LOCAL_R(6)
+ BOOST_PP_LOCAL_MACRO(6)
+# endif
+# if BOOST_PP_LOCAL_R(5)
+ BOOST_PP_LOCAL_MACRO(5)
+# endif
+# if BOOST_PP_LOCAL_R(4)
+ BOOST_PP_LOCAL_MACRO(4)
+# endif
+# if BOOST_PP_LOCAL_R(3)
+ BOOST_PP_LOCAL_MACRO(3)
+# endif
+# if BOOST_PP_LOCAL_R(2)
+ BOOST_PP_LOCAL_MACRO(2)
+# endif
+# if BOOST_PP_LOCAL_R(1)
+ BOOST_PP_LOCAL_MACRO(1)
+# endif
+# if BOOST_PP_LOCAL_R(0)
+ BOOST_PP_LOCAL_MACRO(0)
+# endif
diff --git a/boost/boost/preprocessor/iteration/detail/self.hpp b/boost/boost/preprocessor/iteration/detail/self.hpp
new file mode 100644
index 00000000000..757185c1f27
--- /dev/null
+++ b/boost/boost/preprocessor/iteration/detail/self.hpp
@@ -0,0 +1,21 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# if !defined(BOOST_PP_INDIRECT_SELF)
+# error BOOST_PP_ERROR: no indirect file to include
+# endif
+#
+# define BOOST_PP_IS_SELFISH 1
+#
+# include BOOST_PP_INDIRECT_SELF
+#
+# undef BOOST_PP_IS_SELFISH
+# undef BOOST_PP_INDIRECT_SELF
diff --git a/boost/boost/preprocessor/iteration/detail/start.hpp b/boost/boost/preprocessor/iteration/detail/start.hpp
new file mode 100644
index 00000000000..cbf03818480
--- /dev/null
+++ b/boost/boost/preprocessor/iteration/detail/start.hpp
@@ -0,0 +1,99 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# include <boost/preprocessor/slot/detail/shared.hpp>
+#
+# undef BOOST_PP_LOCAL_SE
+#
+# undef BOOST_PP_LOCAL_SE_DIGIT_1
+# undef BOOST_PP_LOCAL_SE_DIGIT_2
+# undef BOOST_PP_LOCAL_SE_DIGIT_3
+# undef BOOST_PP_LOCAL_SE_DIGIT_4
+# undef BOOST_PP_LOCAL_SE_DIGIT_5
+# undef BOOST_PP_LOCAL_SE_DIGIT_6
+# undef BOOST_PP_LOCAL_SE_DIGIT_7
+# undef BOOST_PP_LOCAL_SE_DIGIT_8
+# undef BOOST_PP_LOCAL_SE_DIGIT_9
+# undef BOOST_PP_LOCAL_SE_DIGIT_10
+#
+# if BOOST_PP_SLOT_TEMP_3 == 0
+# define BOOST_PP_LOCAL_SE_DIGIT_3 0
+# elif BOOST_PP_SLOT_TEMP_3 == 1
+# define BOOST_PP_LOCAL_SE_DIGIT_3 1
+# elif BOOST_PP_SLOT_TEMP_3 == 2
+# define BOOST_PP_LOCAL_SE_DIGIT_3 2
+# elif BOOST_PP_SLOT_TEMP_3 == 3
+# define BOOST_PP_LOCAL_SE_DIGIT_3 3
+# elif BOOST_PP_SLOT_TEMP_3 == 4
+# define BOOST_PP_LOCAL_SE_DIGIT_3 4
+# elif BOOST_PP_SLOT_TEMP_3 == 5
+# define BOOST_PP_LOCAL_SE_DIGIT_3 5
+# elif BOOST_PP_SLOT_TEMP_3 == 6
+# define BOOST_PP_LOCAL_SE_DIGIT_3 6
+# elif BOOST_PP_SLOT_TEMP_3 == 7
+# define BOOST_PP_LOCAL_SE_DIGIT_3 7
+# elif BOOST_PP_SLOT_TEMP_3 == 8
+# define BOOST_PP_LOCAL_SE_DIGIT_3 8
+# elif BOOST_PP_SLOT_TEMP_3 == 9
+# define BOOST_PP_LOCAL_SE_DIGIT_3 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_2 == 0
+# define BOOST_PP_LOCAL_SE_DIGIT_2 0
+# elif BOOST_PP_SLOT_TEMP_2 == 1
+# define BOOST_PP_LOCAL_SE_DIGIT_2 1
+# elif BOOST_PP_SLOT_TEMP_2 == 2
+# define BOOST_PP_LOCAL_SE_DIGIT_2 2
+# elif BOOST_PP_SLOT_TEMP_2 == 3
+# define BOOST_PP_LOCAL_SE_DIGIT_2 3
+# elif BOOST_PP_SLOT_TEMP_2 == 4
+# define BOOST_PP_LOCAL_SE_DIGIT_2 4
+# elif BOOST_PP_SLOT_TEMP_2 == 5
+# define BOOST_PP_LOCAL_SE_DIGIT_2 5
+# elif BOOST_PP_SLOT_TEMP_2 == 6
+# define BOOST_PP_LOCAL_SE_DIGIT_2 6
+# elif BOOST_PP_SLOT_TEMP_2 == 7
+# define BOOST_PP_LOCAL_SE_DIGIT_2 7
+# elif BOOST_PP_SLOT_TEMP_2 == 8
+# define BOOST_PP_LOCAL_SE_DIGIT_2 8
+# elif BOOST_PP_SLOT_TEMP_2 == 9
+# define BOOST_PP_LOCAL_SE_DIGIT_2 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_1 == 0
+# define BOOST_PP_LOCAL_SE_DIGIT_1 0
+# elif BOOST_PP_SLOT_TEMP_1 == 1
+# define BOOST_PP_LOCAL_SE_DIGIT_1 1
+# elif BOOST_PP_SLOT_TEMP_1 == 2
+# define BOOST_PP_LOCAL_SE_DIGIT_1 2
+# elif BOOST_PP_SLOT_TEMP_1 == 3
+# define BOOST_PP_LOCAL_SE_DIGIT_1 3
+# elif BOOST_PP_SLOT_TEMP_1 == 4
+# define BOOST_PP_LOCAL_SE_DIGIT_1 4
+# elif BOOST_PP_SLOT_TEMP_1 == 5
+# define BOOST_PP_LOCAL_SE_DIGIT_1 5
+# elif BOOST_PP_SLOT_TEMP_1 == 6
+# define BOOST_PP_LOCAL_SE_DIGIT_1 6
+# elif BOOST_PP_SLOT_TEMP_1 == 7
+# define BOOST_PP_LOCAL_SE_DIGIT_1 7
+# elif BOOST_PP_SLOT_TEMP_1 == 8
+# define BOOST_PP_LOCAL_SE_DIGIT_1 8
+# elif BOOST_PP_SLOT_TEMP_1 == 9
+# define BOOST_PP_LOCAL_SE_DIGIT_1 9
+# endif
+#
+# if BOOST_PP_LOCAL_SE_DIGIT_3
+# define BOOST_PP_LOCAL_SE() BOOST_PP_SLOT_CC_3(BOOST_PP_LOCAL_SE_DIGIT_3, BOOST_PP_LOCAL_SE_DIGIT_2, BOOST_PP_LOCAL_SE_DIGIT_1)
+# elif BOOST_PP_LOCAL_SE_DIGIT_2
+# define BOOST_PP_LOCAL_SE() BOOST_PP_SLOT_CC_2(BOOST_PP_LOCAL_SE_DIGIT_2, BOOST_PP_LOCAL_SE_DIGIT_1)
+# else
+# define BOOST_PP_LOCAL_SE() BOOST_PP_LOCAL_SE_DIGIT_1
+# endif
diff --git a/boost/boost/preprocessor/iteration/iterate.hpp b/boost/boost/preprocessor/iteration/iterate.hpp
new file mode 100644
index 00000000000..aa0af67abe7
--- /dev/null
+++ b/boost/boost/preprocessor/iteration/iterate.hpp
@@ -0,0 +1,82 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_ITERATION_ITERATE_HPP
+# define BOOST_PREPROCESSOR_ITERATION_ITERATE_HPP
+#
+# include <boost/preprocessor/arithmetic/dec.hpp>
+# include <boost/preprocessor/arithmetic/inc.hpp>
+# include <boost/preprocessor/array/elem.hpp>
+# include <boost/preprocessor/array/size.hpp>
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/slot/slot.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+#
+# /* BOOST_PP_ITERATION_DEPTH */
+#
+# define BOOST_PP_ITERATION_DEPTH() 0
+#
+# /* BOOST_PP_ITERATION */
+#
+# define BOOST_PP_ITERATION() BOOST_PP_CAT(BOOST_PP_ITERATION_, BOOST_PP_ITERATION_DEPTH())
+#
+# /* BOOST_PP_ITERATION_START && BOOST_PP_ITERATION_FINISH */
+#
+# define BOOST_PP_ITERATION_START() BOOST_PP_CAT(BOOST_PP_ITERATION_START_, BOOST_PP_ITERATION_DEPTH())
+# define BOOST_PP_ITERATION_FINISH() BOOST_PP_CAT(BOOST_PP_ITERATION_FINISH_, BOOST_PP_ITERATION_DEPTH())
+#
+# /* BOOST_PP_ITERATION_FLAGS */
+#
+# define BOOST_PP_ITERATION_FLAGS() (BOOST_PP_CAT(BOOST_PP_ITERATION_FLAGS_, BOOST_PP_ITERATION_DEPTH()))
+#
+# /* BOOST_PP_FRAME_ITERATION */
+#
+# define BOOST_PP_FRAME_ITERATION(i) BOOST_PP_CAT(BOOST_PP_ITERATION_, i)
+#
+# /* BOOST_PP_FRAME_START && BOOST_PP_FRAME_FINISH */
+#
+# define BOOST_PP_FRAME_START(i) BOOST_PP_CAT(BOOST_PP_ITERATION_START_, i)
+# define BOOST_PP_FRAME_FINISH(i) BOOST_PP_CAT(BOOST_PP_ITERATION_FINISH_, i)
+#
+# /* BOOST_PP_FRAME_FLAGS */
+#
+# define BOOST_PP_FRAME_FLAGS(i) (BOOST_PP_CAT(BOOST_PP_ITERATION_FLAGS_, i))
+#
+# /* BOOST_PP_RELATIVE_ITERATION */
+#
+# define BOOST_PP_RELATIVE_ITERATION(i) BOOST_PP_CAT(BOOST_PP_RELATIVE_, i)(BOOST_PP_ITERATION_)
+#
+# define BOOST_PP_RELATIVE_0(m) BOOST_PP_CAT(m, BOOST_PP_ITERATION_DEPTH())
+# define BOOST_PP_RELATIVE_1(m) BOOST_PP_CAT(m, BOOST_PP_DEC(BOOST_PP_ITERATION_DEPTH()))
+# define BOOST_PP_RELATIVE_2(m) BOOST_PP_CAT(m, BOOST_PP_DEC(BOOST_PP_DEC(BOOST_PP_ITERATION_DEPTH())))
+# define BOOST_PP_RELATIVE_3(m) BOOST_PP_CAT(m, BOOST_PP_DEC(BOOST_PP_DEC(BOOST_PP_DEC(BOOST_PP_ITERATION_DEPTH()))))
+# define BOOST_PP_RELATIVE_4(m) BOOST_PP_CAT(m, BOOST_PP_DEC(BOOST_PP_DEC(BOOST_PP_DEC(BOOST_PP_DEC(BOOST_PP_ITERATION_DEPTH())))))
+#
+# /* BOOST_PP_RELATIVE_START && BOOST_PP_RELATIVE_FINISH */
+#
+# define BOOST_PP_RELATIVE_START(i) BOOST_PP_CAT(BOOST_PP_RELATIVE_, i)(BOOST_PP_ITERATION_START_)
+# define BOOST_PP_RELATIVE_FINISH(i) BOOST_PP_CAT(BOOST_PP_RELATIVE_, i)(BOOST_PP_ITERATION_FINISH_)
+#
+# /* BOOST_PP_RELATIVE_FLAGS */
+#
+# define BOOST_PP_RELATIVE_FLAGS(i) (BOOST_PP_CAT(BOOST_PP_RELATIVE_, i)(BOOST_PP_ITERATION_FLAGS_))
+#
+# /* BOOST_PP_ITERATE */
+#
+# define BOOST_PP_ITERATE() BOOST_PP_CAT(BOOST_PP_ITERATE_, BOOST_PP_INC(BOOST_PP_ITERATION_DEPTH()))
+#
+# define BOOST_PP_ITERATE_1 <boost/preprocessor/iteration/detail/iter/forward1.hpp>
+# define BOOST_PP_ITERATE_2 <boost/preprocessor/iteration/detail/iter/forward2.hpp>
+# define BOOST_PP_ITERATE_3 <boost/preprocessor/iteration/detail/iter/forward3.hpp>
+# define BOOST_PP_ITERATE_4 <boost/preprocessor/iteration/detail/iter/forward4.hpp>
+# define BOOST_PP_ITERATE_5 <boost/preprocessor/iteration/detail/iter/forward5.hpp>
+#
+# endif
diff --git a/boost/boost/preprocessor/iteration/local.hpp b/boost/boost/preprocessor/iteration/local.hpp
new file mode 100644
index 00000000000..289fb1aff7c
--- /dev/null
+++ b/boost/boost/preprocessor/iteration/local.hpp
@@ -0,0 +1,26 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_ITERATION_LOCAL_HPP
+# define BOOST_PREPROCESSOR_ITERATION_LOCAL_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/slot/slot.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+#
+# /* BOOST_PP_LOCAL_ITERATE */
+#
+# define BOOST_PP_LOCAL_ITERATE() <boost/preprocessor/iteration/detail/local.hpp>
+#
+# define BOOST_PP_LOCAL_C(n) (BOOST_PP_LOCAL_S) <= n && (BOOST_PP_LOCAL_F) >= n
+# define BOOST_PP_LOCAL_R(n) (BOOST_PP_LOCAL_F) <= n && (BOOST_PP_LOCAL_S) >= n
+#
+# endif
diff --git a/boost/boost/preprocessor/iteration/self.hpp b/boost/boost/preprocessor/iteration/self.hpp
new file mode 100644
index 00000000000..6e0464c976c
--- /dev/null
+++ b/boost/boost/preprocessor/iteration/self.hpp
@@ -0,0 +1,19 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_ITERATION_SELF_HPP
+# define BOOST_PREPROCESSOR_ITERATION_SELF_HPP
+#
+# /* BOOST_PP_INCLUDE_SELF */
+#
+# define BOOST_PP_INCLUDE_SELF() <boost/preprocessor/iteration/detail/self.hpp>
+#
+# endif
diff --git a/boost/boost/preprocessor/library.hpp b/boost/boost/preprocessor/library.hpp
new file mode 100644
index 00000000000..a089158b061
--- /dev/null
+++ b/boost/boost/preprocessor/library.hpp
@@ -0,0 +1,34 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_LIBRARY_HPP
+# define BOOST_PREPROCESSOR_LIBRARY_HPP
+#
+# include <boost/preprocessor/arithmetic.hpp>
+# include <boost/preprocessor/array.hpp>
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/comparison.hpp>
+# include <boost/preprocessor/config/limits.hpp>
+# include <boost/preprocessor/control.hpp>
+# include <boost/preprocessor/debug.hpp>
+# include <boost/preprocessor/facilities.hpp>
+# include <boost/preprocessor/iteration.hpp>
+# include <boost/preprocessor/list.hpp>
+# include <boost/preprocessor/logical.hpp>
+# include <boost/preprocessor/punctuation.hpp>
+# include <boost/preprocessor/repetition.hpp>
+# include <boost/preprocessor/selection.hpp>
+# include <boost/preprocessor/seq.hpp>
+# include <boost/preprocessor/slot.hpp>
+# include <boost/preprocessor/stringize.hpp>
+# include <boost/preprocessor/tuple.hpp>
+#
+# endif
diff --git a/boost/boost/preprocessor/limits.hpp b/boost/boost/preprocessor/limits.hpp
new file mode 100644
index 00000000000..e264cc3c83a
--- /dev/null
+++ b/boost/boost/preprocessor/limits.hpp
@@ -0,0 +1,17 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_LIMITS_HPP
+# define BOOST_PREPROCESSOR_LIMITS_HPP
+#
+# include <boost/preprocessor/config/limits.hpp>
+#
+# endif
diff --git a/boost/boost/preprocessor/list.hpp b/boost/boost/preprocessor/list.hpp
new file mode 100644
index 00000000000..444c8b73181
--- /dev/null
+++ b/boost/boost/preprocessor/list.hpp
@@ -0,0 +1,35 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_LIST_HPP
+# define BOOST_PREPROCESSOR_LIST_HPP
+#
+# include <boost/preprocessor/list/adt.hpp>
+# include <boost/preprocessor/list/append.hpp>
+# include <boost/preprocessor/list/at.hpp>
+# include <boost/preprocessor/list/cat.hpp>
+# include <boost/preprocessor/list/enum.hpp>
+# include <boost/preprocessor/list/filter.hpp>
+# include <boost/preprocessor/list/first_n.hpp>
+# include <boost/preprocessor/list/fold_left.hpp>
+# include <boost/preprocessor/list/fold_right.hpp>
+# include <boost/preprocessor/list/for_each.hpp>
+# include <boost/preprocessor/list/for_each_i.hpp>
+# include <boost/preprocessor/list/for_each_product.hpp>
+# include <boost/preprocessor/list/rest_n.hpp>
+# include <boost/preprocessor/list/reverse.hpp>
+# include <boost/preprocessor/list/size.hpp>
+# include <boost/preprocessor/list/to_tuple.hpp>
+# include <boost/preprocessor/list/transform.hpp>
+#
+# endif
diff --git a/boost/boost/preprocessor/list/adt.hpp b/boost/boost/preprocessor/list/adt.hpp
new file mode 100644
index 00000000000..b4f12bab63d
--- /dev/null
+++ b/boost/boost/preprocessor/list/adt.hpp
@@ -0,0 +1,73 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# *
+# * See http://www.boost.org for most recent version.
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# ifndef BOOST_PREPROCESSOR_LIST_ADT_HPP
+# define BOOST_PREPROCESSOR_LIST_ADT_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/detail/is_binary.hpp>
+# include <boost/preprocessor/logical/compl.hpp>
+# include <boost/preprocessor/tuple/eat.hpp>
+#
+# /* BOOST_PP_LIST_CONS */
+#
+# define BOOST_PP_LIST_CONS(head, tail) (head, tail)
+#
+# /* BOOST_PP_LIST_NIL */
+#
+# define BOOST_PP_LIST_NIL BOOST_PP_NIL
+#
+# /* BOOST_PP_LIST_FIRST */
+#
+# define BOOST_PP_LIST_FIRST(list) BOOST_PP_LIST_FIRST_D(list)
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+# define BOOST_PP_LIST_FIRST_D(list) BOOST_PP_LIST_FIRST_I list
+# else
+# define BOOST_PP_LIST_FIRST_D(list) BOOST_PP_LIST_FIRST_I ## list
+# endif
+#
+# define BOOST_PP_LIST_FIRST_I(head, tail) head
+#
+# /* BOOST_PP_LIST_REST */
+#
+# define BOOST_PP_LIST_REST(list) BOOST_PP_LIST_REST_D(list)
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+# define BOOST_PP_LIST_REST_D(list) BOOST_PP_LIST_REST_I list
+# else
+# define BOOST_PP_LIST_REST_D(list) BOOST_PP_LIST_REST_I ## list
+# endif
+#
+# define BOOST_PP_LIST_REST_I(head, tail) tail
+#
+# /* BOOST_PP_LIST_IS_CONS */
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_BCC()
+# define BOOST_PP_LIST_IS_CONS(list) BOOST_PP_LIST_IS_CONS_D(list)
+# define BOOST_PP_LIST_IS_CONS_D(list) BOOST_PP_LIST_IS_CONS_ ## list
+# define BOOST_PP_LIST_IS_CONS_(head, tail) 1
+# define BOOST_PP_LIST_IS_CONS_BOOST_PP_NIL 0
+# else
+# define BOOST_PP_LIST_IS_CONS(list) BOOST_PP_IS_BINARY(list)
+# endif
+#
+# /* BOOST_PP_LIST_IS_NIL */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_BCC()
+# define BOOST_PP_LIST_IS_NIL(list) BOOST_PP_COMPL(BOOST_PP_IS_BINARY(list))
+# else
+# define BOOST_PP_LIST_IS_NIL(list) BOOST_PP_COMPL(BOOST_PP_LIST_IS_CONS(list))
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/list/append.hpp b/boost/boost/preprocessor/list/append.hpp
new file mode 100644
index 00000000000..26e9d74e094
--- /dev/null
+++ b/boost/boost/preprocessor/list/append.hpp
@@ -0,0 +1,40 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_LIST_APPEND_HPP
+# define BOOST_PREPROCESSOR_LIST_APPEND_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/list/fold_right.hpp>
+#
+# /* BOOST_PP_LIST_APPEND */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_LIST_APPEND(a, b) BOOST_PP_LIST_FOLD_RIGHT(BOOST_PP_LIST_APPEND_O, b, a)
+# else
+# define BOOST_PP_LIST_APPEND(a, b) BOOST_PP_LIST_APPEND_I(a, b)
+# define BOOST_PP_LIST_APPEND_I(a, b) BOOST_PP_LIST_FOLD_RIGHT(BOOST_PP_LIST_APPEND_O, b, a)
+# endif
+#
+# define BOOST_PP_LIST_APPEND_O(d, s, x) (x, s)
+#
+# /* BOOST_PP_LIST_APPEND_D */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_LIST_APPEND_D(d, a, b) BOOST_PP_LIST_FOLD_RIGHT_ ## d(BOOST_PP_LIST_APPEND_O, b, a)
+# else
+# define BOOST_PP_LIST_APPEND_D(d, a, b) BOOST_PP_LIST_APPEND_D_I(d, a, b)
+# define BOOST_PP_LIST_APPEND_D_I(d, a, b) BOOST_PP_LIST_FOLD_RIGHT_ ## d(BOOST_PP_LIST_APPEND_O, b, a)
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/list/at.hpp b/boost/boost/preprocessor/list/at.hpp
new file mode 100644
index 00000000000..125669b38af
--- /dev/null
+++ b/boost/boost/preprocessor/list/at.hpp
@@ -0,0 +1,39 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_LIST_AT_HPP
+# define BOOST_PREPROCESSOR_LIST_AT_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/list/adt.hpp>
+# include <boost/preprocessor/list/rest_n.hpp>
+#
+# /* BOOST_PP_LIST_AT */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_LIST_AT(list, index) BOOST_PP_LIST_FIRST(BOOST_PP_LIST_REST_N(index, list))
+# else
+# define BOOST_PP_LIST_AT(list, index) BOOST_PP_LIST_AT_I(list, index)
+# define BOOST_PP_LIST_AT_I(list, index) BOOST_PP_LIST_FIRST(BOOST_PP_LIST_REST_N(index, list))
+# endif
+#
+# /* BOOST_PP_LIST_AT_D */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_LIST_AT_D(d, list, index) BOOST_PP_LIST_FIRST(BOOST_PP_LIST_REST_N_D(d, index, list))
+# else
+# define BOOST_PP_LIST_AT_D(d, list, index) BOOST_PP_LIST_AT_D_I(d, list, index)
+# define BOOST_PP_LIST_AT_D_I(d, list, index) BOOST_PP_LIST_FIRST(BOOST_PP_LIST_REST_N_D(d, index, list))
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/list/cat.hpp b/boost/boost/preprocessor/list/cat.hpp
new file mode 100644
index 00000000000..1ef74bf1518
--- /dev/null
+++ b/boost/boost/preprocessor/list/cat.hpp
@@ -0,0 +1,42 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_LIST_CAT_HPP
+# define BOOST_PREPROCESSOR_LIST_CAT_HPP
+#
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/list/adt.hpp>
+# include <boost/preprocessor/list/fold_left.hpp>
+#
+# /* BOOST_PP_LIST_CAT */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_LIST_CAT(list) BOOST_PP_LIST_FOLD_LEFT(BOOST_PP_LIST_CAT_O, BOOST_PP_LIST_FIRST(list), BOOST_PP_LIST_REST(list))
+# else
+# define BOOST_PP_LIST_CAT(list) BOOST_PP_LIST_CAT_I(list)
+# define BOOST_PP_LIST_CAT_I(list) BOOST_PP_LIST_FOLD_LEFT(BOOST_PP_LIST_CAT_O, BOOST_PP_LIST_FIRST(list), BOOST_PP_LIST_REST(list))
+# endif
+#
+# define BOOST_PP_LIST_CAT_O(d, s, x) BOOST_PP_CAT(s, x)
+#
+# /* BOOST_PP_LIST_CAT_D */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_LIST_CAT_D(d, list) BOOST_PP_LIST_FOLD_LEFT_ ## d(BOOST_PP_LIST_CAT_O, BOOST_PP_LIST_FIRST(list), BOOST_PP_LIST_REST(list))
+# else
+# define BOOST_PP_LIST_CAT_D(d, list) BOOST_PP_LIST_CAT_D_I(d, list)
+# define BOOST_PP_LIST_CAT_D_I(d, list) BOOST_PP_LIST_FOLD_LEFT_ ## d(BOOST_PP_LIST_CAT_O, BOOST_PP_LIST_FIRST(list), BOOST_PP_LIST_REST(list))
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/list/detail/dmc/fold_left.hpp b/boost/boost/preprocessor/list/detail/dmc/fold_left.hpp
new file mode 100644
index 00000000000..844ac5b8abd
--- /dev/null
+++ b/boost/boost/preprocessor/list/detail/dmc/fold_left.hpp
@@ -0,0 +1,279 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_LIST_DETAIL_FOLD_LEFT_HPP
+# define BOOST_PREPROCESSOR_LIST_DETAIL_FOLD_LEFT_HPP
+#
+# include <boost/preprocessor/control/expr_iif.hpp>
+# include <boost/preprocessor/control/iif.hpp>
+# include <boost/preprocessor/list/adt.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+#
+# define BOOST_PP_LIST_FOLD_LEFT_1(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_2, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(2, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_2(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_3, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(3, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_3(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_4, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(4, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_4(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_5, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(5, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_5(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_6, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(6, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_6(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_7, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(7, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_7(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_8, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(8, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_8(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_9, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(9, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_9(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_10, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(10, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_10(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_11, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(11, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_11(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_12, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(12, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_12(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_13, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(13, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_13(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_14, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(14, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_14(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_15, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(15, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_15(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_16, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(16, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_16(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_17, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(17, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_17(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_18, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(18, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_18(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_19, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(19, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_19(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_20, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(20, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_20(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_21, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(21, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_21(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_22, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(22, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_22(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_23, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(23, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_23(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_24, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(24, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_24(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_25, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(25, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_25(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_26, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(26, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_26(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_27, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(27, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_27(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_28, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(28, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_28(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_29, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(29, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_29(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_30, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(30, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_30(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_31, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(31, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_31(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_32, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(32, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_32(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_33, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(33, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_33(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_34, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(34, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_34(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_35, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(35, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_35(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_36, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(36, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_36(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_37, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(37, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_37(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_38, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(38, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_38(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_39, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(39, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_39(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_40, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(40, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_40(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_41, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(41, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_41(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_42, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(42, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_42(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_43, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(43, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_43(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_44, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(44, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_44(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_45, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(45, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_45(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_46, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(46, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_46(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_47, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(47, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_47(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_48, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(48, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_48(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_49, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(49, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_49(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_50, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(50, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_50(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_51, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(51, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_51(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_52, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(52, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_52(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_53, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(53, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_53(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_54, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(54, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_54(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_55, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(55, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_55(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_56, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(56, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_56(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_57, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(57, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_57(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_58, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(58, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_58(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_59, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(59, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_59(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_60, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(60, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_60(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_61, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(61, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_61(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_62, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(62, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_62(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_63, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(63, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_63(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_64, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(64, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_64(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_65, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(65, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_65(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_66, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(66, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_66(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_67, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(67, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_67(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_68, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(68, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_68(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_69, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(69, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_69(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_70, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(70, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_70(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_71, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(71, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_71(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_72, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(72, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_72(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_73, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(73, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_73(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_74, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(74, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_74(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_75, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(75, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_75(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_76, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(76, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_76(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_77, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(77, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_77(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_78, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(78, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_78(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_79, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(79, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_79(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_80, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(80, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_80(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_81, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(81, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_81(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_82, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(82, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_82(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_83, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(83, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_83(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_84, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(84, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_84(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_85, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(85, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_85(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_86, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(86, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_86(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_87, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(87, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_87(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_88, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(88, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_88(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_89, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(89, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_89(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_90, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(90, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_90(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_91, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(91, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_91(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_92, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(92, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_92(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_93, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(93, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_93(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_94, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(94, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_94(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_95, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(95, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_95(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_96, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(96, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_96(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_97, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(97, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_97(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_98, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(98, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_98(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_99, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(99, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_99(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_100, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(100, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_100(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_101, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(101, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_101(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_102, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(102, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_102(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_103, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(103, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_103(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_104, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(104, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_104(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_105, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(105, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_105(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_106, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(106, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_106(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_107, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(107, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_107(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_108, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(108, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_108(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_109, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(109, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_109(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_110, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(110, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_110(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_111, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(111, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_111(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_112, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(112, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_112(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_113, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(113, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_113(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_114, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(114, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_114(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_115, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(115, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_115(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_116, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(116, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_116(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_117, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(117, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_117(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_118, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(118, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_118(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_119, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(119, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_119(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_120, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(120, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_120(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_121, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(121, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_121(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_122, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(122, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_122(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_123, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(123, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_123(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_124, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(124, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_124(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_125, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(125, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_125(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_126, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(126, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_126(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_127, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(127, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_127(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_128, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(128, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_128(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_129, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(129, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_129(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_130, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(130, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_130(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_131, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(131, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_131(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_132, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(132, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_132(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_133, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(133, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_133(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_134, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(134, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_134(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_135, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(135, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_135(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_136, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(136, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_136(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_137, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(137, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_137(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_138, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(138, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_138(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_139, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(139, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_139(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_140, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(140, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_140(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_141, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(141, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_141(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_142, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(142, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_142(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_143, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(143, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_143(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_144, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(144, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_144(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_145, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(145, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_145(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_146, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(146, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_146(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_147, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(147, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_147(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_148, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(148, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_148(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_149, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(149, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_149(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_150, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(150, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_150(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_151, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(151, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_151(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_152, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(152, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_152(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_153, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(153, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_153(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_154, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(154, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_154(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_155, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(155, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_155(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_156, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(156, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_156(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_157, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(157, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_157(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_158, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(158, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_158(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_159, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(159, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_159(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_160, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(160, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_160(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_161, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(161, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_161(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_162, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(162, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_162(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_163, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(163, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_163(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_164, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(164, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_164(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_165, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(165, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_165(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_166, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(166, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_166(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_167, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(167, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_167(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_168, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(168, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_168(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_169, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(169, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_169(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_170, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(170, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_170(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_171, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(171, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_171(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_172, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(172, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_172(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_173, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(173, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_173(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_174, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(174, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_174(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_175, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(175, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_175(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_176, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(176, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_176(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_177, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(177, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_177(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_178, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(178, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_178(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_179, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(179, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_179(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_180, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(180, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_180(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_181, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(181, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_181(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_182, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(182, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_182(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_183, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(183, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_183(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_184, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(184, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_184(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_185, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(185, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_185(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_186, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(186, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_186(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_187, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(187, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_187(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_188, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(188, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_188(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_189, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(189, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_189(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_190, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(190, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_190(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_191, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(191, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_191(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_192, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(192, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_192(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_193, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(193, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_193(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_194, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(194, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_194(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_195, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(195, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_195(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_196, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(196, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_196(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_197, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(197, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_197(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_198, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(198, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_198(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_199, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(199, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_199(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_200, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(200, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_200(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_201, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(201, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_201(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_202, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(202, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_202(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_203, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(203, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_203(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_204, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(204, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_204(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_205, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(205, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_205(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_206, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(206, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_206(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_207, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(207, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_207(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_208, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(208, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_208(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_209, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(209, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_209(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_210, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(210, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_210(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_211, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(211, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_211(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_212, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(212, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_212(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_213, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(213, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_213(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_214, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(214, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_214(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_215, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(215, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_215(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_216, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(216, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_216(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_217, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(217, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_217(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_218, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(218, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_218(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_219, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(219, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_219(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_220, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(220, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_220(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_221, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(221, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_221(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_222, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(222, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_222(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_223, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(223, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_223(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_224, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(224, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_224(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_225, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(225, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_225(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_226, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(226, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_226(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_227, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(227, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_227(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_228, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(228, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_228(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_229, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(229, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_229(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_230, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(230, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_230(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_231, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(231, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_231(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_232, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(232, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_232(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_233, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(233, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_233(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_234, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(234, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_234(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_235, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(235, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_235(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_236, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(236, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_236(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_237, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(237, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_237(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_238, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(238, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_238(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_239, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(239, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_239(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_240, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(240, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_240(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_241, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(241, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_241(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_242, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(242, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_242(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_243, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(243, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_243(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_244, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(244, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_244(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_245, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(245, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_245(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_246, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(246, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_246(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_247, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(247, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_247(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_248, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(248, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_248(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_249, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(249, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_249(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_250, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(250, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_250(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_251, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(251, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_251(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_252, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(252, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_252(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_253, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(253, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_253(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_254, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(254, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_254(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_255, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(255, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_255(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_256, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(256, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_256(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_257, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(257, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+#
+# endif
diff --git a/boost/boost/preprocessor/list/detail/edg/fold_left.hpp b/boost/boost/preprocessor/list/detail/edg/fold_left.hpp
new file mode 100644
index 00000000000..ae9524f979b
--- /dev/null
+++ b/boost/boost/preprocessor/list/detail/edg/fold_left.hpp
@@ -0,0 +1,536 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_LIST_DETAIL_EDG_FOLD_LEFT_HPP
+# define BOOST_PREPROCESSOR_LIST_DETAIL_EDG_FOLD_LEFT_HPP
+#
+# include <boost/preprocessor/control/expr_iif.hpp>
+# include <boost/preprocessor/control/iif.hpp>
+# include <boost/preprocessor/list/adt.hpp>
+# include <boost/preprocessor/tuple/eat.hpp>
+#
+# define BOOST_PP_LIST_FOLD_LEFT_1(o, s, l) BOOST_PP_LIST_FOLD_LEFT_1_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_2(o, s, l) BOOST_PP_LIST_FOLD_LEFT_2_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_3(o, s, l) BOOST_PP_LIST_FOLD_LEFT_3_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_4(o, s, l) BOOST_PP_LIST_FOLD_LEFT_4_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_5(o, s, l) BOOST_PP_LIST_FOLD_LEFT_5_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_6(o, s, l) BOOST_PP_LIST_FOLD_LEFT_6_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_7(o, s, l) BOOST_PP_LIST_FOLD_LEFT_7_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_8(o, s, l) BOOST_PP_LIST_FOLD_LEFT_8_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_9(o, s, l) BOOST_PP_LIST_FOLD_LEFT_9_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_10(o, s, l) BOOST_PP_LIST_FOLD_LEFT_10_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_11(o, s, l) BOOST_PP_LIST_FOLD_LEFT_11_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_12(o, s, l) BOOST_PP_LIST_FOLD_LEFT_12_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_13(o, s, l) BOOST_PP_LIST_FOLD_LEFT_13_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_14(o, s, l) BOOST_PP_LIST_FOLD_LEFT_14_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_15(o, s, l) BOOST_PP_LIST_FOLD_LEFT_15_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_16(o, s, l) BOOST_PP_LIST_FOLD_LEFT_16_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_17(o, s, l) BOOST_PP_LIST_FOLD_LEFT_17_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_18(o, s, l) BOOST_PP_LIST_FOLD_LEFT_18_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_19(o, s, l) BOOST_PP_LIST_FOLD_LEFT_19_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_20(o, s, l) BOOST_PP_LIST_FOLD_LEFT_20_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_21(o, s, l) BOOST_PP_LIST_FOLD_LEFT_21_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_22(o, s, l) BOOST_PP_LIST_FOLD_LEFT_22_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_23(o, s, l) BOOST_PP_LIST_FOLD_LEFT_23_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_24(o, s, l) BOOST_PP_LIST_FOLD_LEFT_24_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_25(o, s, l) BOOST_PP_LIST_FOLD_LEFT_25_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_26(o, s, l) BOOST_PP_LIST_FOLD_LEFT_26_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_27(o, s, l) BOOST_PP_LIST_FOLD_LEFT_27_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_28(o, s, l) BOOST_PP_LIST_FOLD_LEFT_28_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_29(o, s, l) BOOST_PP_LIST_FOLD_LEFT_29_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_30(o, s, l) BOOST_PP_LIST_FOLD_LEFT_30_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_31(o, s, l) BOOST_PP_LIST_FOLD_LEFT_31_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_32(o, s, l) BOOST_PP_LIST_FOLD_LEFT_32_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_33(o, s, l) BOOST_PP_LIST_FOLD_LEFT_33_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_34(o, s, l) BOOST_PP_LIST_FOLD_LEFT_34_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_35(o, s, l) BOOST_PP_LIST_FOLD_LEFT_35_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_36(o, s, l) BOOST_PP_LIST_FOLD_LEFT_36_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_37(o, s, l) BOOST_PP_LIST_FOLD_LEFT_37_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_38(o, s, l) BOOST_PP_LIST_FOLD_LEFT_38_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_39(o, s, l) BOOST_PP_LIST_FOLD_LEFT_39_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_40(o, s, l) BOOST_PP_LIST_FOLD_LEFT_40_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_41(o, s, l) BOOST_PP_LIST_FOLD_LEFT_41_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_42(o, s, l) BOOST_PP_LIST_FOLD_LEFT_42_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_43(o, s, l) BOOST_PP_LIST_FOLD_LEFT_43_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_44(o, s, l) BOOST_PP_LIST_FOLD_LEFT_44_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_45(o, s, l) BOOST_PP_LIST_FOLD_LEFT_45_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_46(o, s, l) BOOST_PP_LIST_FOLD_LEFT_46_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_47(o, s, l) BOOST_PP_LIST_FOLD_LEFT_47_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_48(o, s, l) BOOST_PP_LIST_FOLD_LEFT_48_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_49(o, s, l) BOOST_PP_LIST_FOLD_LEFT_49_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_50(o, s, l) BOOST_PP_LIST_FOLD_LEFT_50_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_51(o, s, l) BOOST_PP_LIST_FOLD_LEFT_51_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_52(o, s, l) BOOST_PP_LIST_FOLD_LEFT_52_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_53(o, s, l) BOOST_PP_LIST_FOLD_LEFT_53_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_54(o, s, l) BOOST_PP_LIST_FOLD_LEFT_54_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_55(o, s, l) BOOST_PP_LIST_FOLD_LEFT_55_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_56(o, s, l) BOOST_PP_LIST_FOLD_LEFT_56_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_57(o, s, l) BOOST_PP_LIST_FOLD_LEFT_57_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_58(o, s, l) BOOST_PP_LIST_FOLD_LEFT_58_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_59(o, s, l) BOOST_PP_LIST_FOLD_LEFT_59_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_60(o, s, l) BOOST_PP_LIST_FOLD_LEFT_60_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_61(o, s, l) BOOST_PP_LIST_FOLD_LEFT_61_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_62(o, s, l) BOOST_PP_LIST_FOLD_LEFT_62_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_63(o, s, l) BOOST_PP_LIST_FOLD_LEFT_63_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_64(o, s, l) BOOST_PP_LIST_FOLD_LEFT_64_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_65(o, s, l) BOOST_PP_LIST_FOLD_LEFT_65_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_66(o, s, l) BOOST_PP_LIST_FOLD_LEFT_66_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_67(o, s, l) BOOST_PP_LIST_FOLD_LEFT_67_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_68(o, s, l) BOOST_PP_LIST_FOLD_LEFT_68_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_69(o, s, l) BOOST_PP_LIST_FOLD_LEFT_69_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_70(o, s, l) BOOST_PP_LIST_FOLD_LEFT_70_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_71(o, s, l) BOOST_PP_LIST_FOLD_LEFT_71_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_72(o, s, l) BOOST_PP_LIST_FOLD_LEFT_72_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_73(o, s, l) BOOST_PP_LIST_FOLD_LEFT_73_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_74(o, s, l) BOOST_PP_LIST_FOLD_LEFT_74_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_75(o, s, l) BOOST_PP_LIST_FOLD_LEFT_75_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_76(o, s, l) BOOST_PP_LIST_FOLD_LEFT_76_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_77(o, s, l) BOOST_PP_LIST_FOLD_LEFT_77_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_78(o, s, l) BOOST_PP_LIST_FOLD_LEFT_78_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_79(o, s, l) BOOST_PP_LIST_FOLD_LEFT_79_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_80(o, s, l) BOOST_PP_LIST_FOLD_LEFT_80_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_81(o, s, l) BOOST_PP_LIST_FOLD_LEFT_81_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_82(o, s, l) BOOST_PP_LIST_FOLD_LEFT_82_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_83(o, s, l) BOOST_PP_LIST_FOLD_LEFT_83_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_84(o, s, l) BOOST_PP_LIST_FOLD_LEFT_84_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_85(o, s, l) BOOST_PP_LIST_FOLD_LEFT_85_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_86(o, s, l) BOOST_PP_LIST_FOLD_LEFT_86_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_87(o, s, l) BOOST_PP_LIST_FOLD_LEFT_87_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_88(o, s, l) BOOST_PP_LIST_FOLD_LEFT_88_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_89(o, s, l) BOOST_PP_LIST_FOLD_LEFT_89_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_90(o, s, l) BOOST_PP_LIST_FOLD_LEFT_90_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_91(o, s, l) BOOST_PP_LIST_FOLD_LEFT_91_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_92(o, s, l) BOOST_PP_LIST_FOLD_LEFT_92_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_93(o, s, l) BOOST_PP_LIST_FOLD_LEFT_93_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_94(o, s, l) BOOST_PP_LIST_FOLD_LEFT_94_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_95(o, s, l) BOOST_PP_LIST_FOLD_LEFT_95_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_96(o, s, l) BOOST_PP_LIST_FOLD_LEFT_96_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_97(o, s, l) BOOST_PP_LIST_FOLD_LEFT_97_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_98(o, s, l) BOOST_PP_LIST_FOLD_LEFT_98_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_99(o, s, l) BOOST_PP_LIST_FOLD_LEFT_99_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_100(o, s, l) BOOST_PP_LIST_FOLD_LEFT_100_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_101(o, s, l) BOOST_PP_LIST_FOLD_LEFT_101_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_102(o, s, l) BOOST_PP_LIST_FOLD_LEFT_102_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_103(o, s, l) BOOST_PP_LIST_FOLD_LEFT_103_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_104(o, s, l) BOOST_PP_LIST_FOLD_LEFT_104_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_105(o, s, l) BOOST_PP_LIST_FOLD_LEFT_105_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_106(o, s, l) BOOST_PP_LIST_FOLD_LEFT_106_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_107(o, s, l) BOOST_PP_LIST_FOLD_LEFT_107_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_108(o, s, l) BOOST_PP_LIST_FOLD_LEFT_108_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_109(o, s, l) BOOST_PP_LIST_FOLD_LEFT_109_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_110(o, s, l) BOOST_PP_LIST_FOLD_LEFT_110_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_111(o, s, l) BOOST_PP_LIST_FOLD_LEFT_111_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_112(o, s, l) BOOST_PP_LIST_FOLD_LEFT_112_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_113(o, s, l) BOOST_PP_LIST_FOLD_LEFT_113_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_114(o, s, l) BOOST_PP_LIST_FOLD_LEFT_114_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_115(o, s, l) BOOST_PP_LIST_FOLD_LEFT_115_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_116(o, s, l) BOOST_PP_LIST_FOLD_LEFT_116_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_117(o, s, l) BOOST_PP_LIST_FOLD_LEFT_117_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_118(o, s, l) BOOST_PP_LIST_FOLD_LEFT_118_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_119(o, s, l) BOOST_PP_LIST_FOLD_LEFT_119_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_120(o, s, l) BOOST_PP_LIST_FOLD_LEFT_120_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_121(o, s, l) BOOST_PP_LIST_FOLD_LEFT_121_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_122(o, s, l) BOOST_PP_LIST_FOLD_LEFT_122_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_123(o, s, l) BOOST_PP_LIST_FOLD_LEFT_123_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_124(o, s, l) BOOST_PP_LIST_FOLD_LEFT_124_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_125(o, s, l) BOOST_PP_LIST_FOLD_LEFT_125_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_126(o, s, l) BOOST_PP_LIST_FOLD_LEFT_126_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_127(o, s, l) BOOST_PP_LIST_FOLD_LEFT_127_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_128(o, s, l) BOOST_PP_LIST_FOLD_LEFT_128_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_129(o, s, l) BOOST_PP_LIST_FOLD_LEFT_129_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_130(o, s, l) BOOST_PP_LIST_FOLD_LEFT_130_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_131(o, s, l) BOOST_PP_LIST_FOLD_LEFT_131_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_132(o, s, l) BOOST_PP_LIST_FOLD_LEFT_132_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_133(o, s, l) BOOST_PP_LIST_FOLD_LEFT_133_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_134(o, s, l) BOOST_PP_LIST_FOLD_LEFT_134_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_135(o, s, l) BOOST_PP_LIST_FOLD_LEFT_135_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_136(o, s, l) BOOST_PP_LIST_FOLD_LEFT_136_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_137(o, s, l) BOOST_PP_LIST_FOLD_LEFT_137_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_138(o, s, l) BOOST_PP_LIST_FOLD_LEFT_138_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_139(o, s, l) BOOST_PP_LIST_FOLD_LEFT_139_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_140(o, s, l) BOOST_PP_LIST_FOLD_LEFT_140_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_141(o, s, l) BOOST_PP_LIST_FOLD_LEFT_141_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_142(o, s, l) BOOST_PP_LIST_FOLD_LEFT_142_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_143(o, s, l) BOOST_PP_LIST_FOLD_LEFT_143_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_144(o, s, l) BOOST_PP_LIST_FOLD_LEFT_144_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_145(o, s, l) BOOST_PP_LIST_FOLD_LEFT_145_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_146(o, s, l) BOOST_PP_LIST_FOLD_LEFT_146_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_147(o, s, l) BOOST_PP_LIST_FOLD_LEFT_147_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_148(o, s, l) BOOST_PP_LIST_FOLD_LEFT_148_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_149(o, s, l) BOOST_PP_LIST_FOLD_LEFT_149_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_150(o, s, l) BOOST_PP_LIST_FOLD_LEFT_150_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_151(o, s, l) BOOST_PP_LIST_FOLD_LEFT_151_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_152(o, s, l) BOOST_PP_LIST_FOLD_LEFT_152_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_153(o, s, l) BOOST_PP_LIST_FOLD_LEFT_153_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_154(o, s, l) BOOST_PP_LIST_FOLD_LEFT_154_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_155(o, s, l) BOOST_PP_LIST_FOLD_LEFT_155_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_156(o, s, l) BOOST_PP_LIST_FOLD_LEFT_156_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_157(o, s, l) BOOST_PP_LIST_FOLD_LEFT_157_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_158(o, s, l) BOOST_PP_LIST_FOLD_LEFT_158_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_159(o, s, l) BOOST_PP_LIST_FOLD_LEFT_159_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_160(o, s, l) BOOST_PP_LIST_FOLD_LEFT_160_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_161(o, s, l) BOOST_PP_LIST_FOLD_LEFT_161_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_162(o, s, l) BOOST_PP_LIST_FOLD_LEFT_162_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_163(o, s, l) BOOST_PP_LIST_FOLD_LEFT_163_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_164(o, s, l) BOOST_PP_LIST_FOLD_LEFT_164_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_165(o, s, l) BOOST_PP_LIST_FOLD_LEFT_165_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_166(o, s, l) BOOST_PP_LIST_FOLD_LEFT_166_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_167(o, s, l) BOOST_PP_LIST_FOLD_LEFT_167_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_168(o, s, l) BOOST_PP_LIST_FOLD_LEFT_168_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_169(o, s, l) BOOST_PP_LIST_FOLD_LEFT_169_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_170(o, s, l) BOOST_PP_LIST_FOLD_LEFT_170_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_171(o, s, l) BOOST_PP_LIST_FOLD_LEFT_171_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_172(o, s, l) BOOST_PP_LIST_FOLD_LEFT_172_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_173(o, s, l) BOOST_PP_LIST_FOLD_LEFT_173_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_174(o, s, l) BOOST_PP_LIST_FOLD_LEFT_174_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_175(o, s, l) BOOST_PP_LIST_FOLD_LEFT_175_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_176(o, s, l) BOOST_PP_LIST_FOLD_LEFT_176_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_177(o, s, l) BOOST_PP_LIST_FOLD_LEFT_177_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_178(o, s, l) BOOST_PP_LIST_FOLD_LEFT_178_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_179(o, s, l) BOOST_PP_LIST_FOLD_LEFT_179_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_180(o, s, l) BOOST_PP_LIST_FOLD_LEFT_180_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_181(o, s, l) BOOST_PP_LIST_FOLD_LEFT_181_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_182(o, s, l) BOOST_PP_LIST_FOLD_LEFT_182_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_183(o, s, l) BOOST_PP_LIST_FOLD_LEFT_183_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_184(o, s, l) BOOST_PP_LIST_FOLD_LEFT_184_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_185(o, s, l) BOOST_PP_LIST_FOLD_LEFT_185_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_186(o, s, l) BOOST_PP_LIST_FOLD_LEFT_186_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_187(o, s, l) BOOST_PP_LIST_FOLD_LEFT_187_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_188(o, s, l) BOOST_PP_LIST_FOLD_LEFT_188_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_189(o, s, l) BOOST_PP_LIST_FOLD_LEFT_189_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_190(o, s, l) BOOST_PP_LIST_FOLD_LEFT_190_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_191(o, s, l) BOOST_PP_LIST_FOLD_LEFT_191_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_192(o, s, l) BOOST_PP_LIST_FOLD_LEFT_192_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_193(o, s, l) BOOST_PP_LIST_FOLD_LEFT_193_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_194(o, s, l) BOOST_PP_LIST_FOLD_LEFT_194_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_195(o, s, l) BOOST_PP_LIST_FOLD_LEFT_195_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_196(o, s, l) BOOST_PP_LIST_FOLD_LEFT_196_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_197(o, s, l) BOOST_PP_LIST_FOLD_LEFT_197_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_198(o, s, l) BOOST_PP_LIST_FOLD_LEFT_198_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_199(o, s, l) BOOST_PP_LIST_FOLD_LEFT_199_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_200(o, s, l) BOOST_PP_LIST_FOLD_LEFT_200_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_201(o, s, l) BOOST_PP_LIST_FOLD_LEFT_201_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_202(o, s, l) BOOST_PP_LIST_FOLD_LEFT_202_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_203(o, s, l) BOOST_PP_LIST_FOLD_LEFT_203_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_204(o, s, l) BOOST_PP_LIST_FOLD_LEFT_204_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_205(o, s, l) BOOST_PP_LIST_FOLD_LEFT_205_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_206(o, s, l) BOOST_PP_LIST_FOLD_LEFT_206_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_207(o, s, l) BOOST_PP_LIST_FOLD_LEFT_207_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_208(o, s, l) BOOST_PP_LIST_FOLD_LEFT_208_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_209(o, s, l) BOOST_PP_LIST_FOLD_LEFT_209_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_210(o, s, l) BOOST_PP_LIST_FOLD_LEFT_210_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_211(o, s, l) BOOST_PP_LIST_FOLD_LEFT_211_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_212(o, s, l) BOOST_PP_LIST_FOLD_LEFT_212_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_213(o, s, l) BOOST_PP_LIST_FOLD_LEFT_213_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_214(o, s, l) BOOST_PP_LIST_FOLD_LEFT_214_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_215(o, s, l) BOOST_PP_LIST_FOLD_LEFT_215_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_216(o, s, l) BOOST_PP_LIST_FOLD_LEFT_216_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_217(o, s, l) BOOST_PP_LIST_FOLD_LEFT_217_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_218(o, s, l) BOOST_PP_LIST_FOLD_LEFT_218_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_219(o, s, l) BOOST_PP_LIST_FOLD_LEFT_219_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_220(o, s, l) BOOST_PP_LIST_FOLD_LEFT_220_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_221(o, s, l) BOOST_PP_LIST_FOLD_LEFT_221_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_222(o, s, l) BOOST_PP_LIST_FOLD_LEFT_222_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_223(o, s, l) BOOST_PP_LIST_FOLD_LEFT_223_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_224(o, s, l) BOOST_PP_LIST_FOLD_LEFT_224_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_225(o, s, l) BOOST_PP_LIST_FOLD_LEFT_225_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_226(o, s, l) BOOST_PP_LIST_FOLD_LEFT_226_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_227(o, s, l) BOOST_PP_LIST_FOLD_LEFT_227_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_228(o, s, l) BOOST_PP_LIST_FOLD_LEFT_228_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_229(o, s, l) BOOST_PP_LIST_FOLD_LEFT_229_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_230(o, s, l) BOOST_PP_LIST_FOLD_LEFT_230_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_231(o, s, l) BOOST_PP_LIST_FOLD_LEFT_231_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_232(o, s, l) BOOST_PP_LIST_FOLD_LEFT_232_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_233(o, s, l) BOOST_PP_LIST_FOLD_LEFT_233_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_234(o, s, l) BOOST_PP_LIST_FOLD_LEFT_234_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_235(o, s, l) BOOST_PP_LIST_FOLD_LEFT_235_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_236(o, s, l) BOOST_PP_LIST_FOLD_LEFT_236_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_237(o, s, l) BOOST_PP_LIST_FOLD_LEFT_237_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_238(o, s, l) BOOST_PP_LIST_FOLD_LEFT_238_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_239(o, s, l) BOOST_PP_LIST_FOLD_LEFT_239_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_240(o, s, l) BOOST_PP_LIST_FOLD_LEFT_240_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_241(o, s, l) BOOST_PP_LIST_FOLD_LEFT_241_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_242(o, s, l) BOOST_PP_LIST_FOLD_LEFT_242_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_243(o, s, l) BOOST_PP_LIST_FOLD_LEFT_243_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_244(o, s, l) BOOST_PP_LIST_FOLD_LEFT_244_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_245(o, s, l) BOOST_PP_LIST_FOLD_LEFT_245_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_246(o, s, l) BOOST_PP_LIST_FOLD_LEFT_246_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_247(o, s, l) BOOST_PP_LIST_FOLD_LEFT_247_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_248(o, s, l) BOOST_PP_LIST_FOLD_LEFT_248_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_249(o, s, l) BOOST_PP_LIST_FOLD_LEFT_249_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_250(o, s, l) BOOST_PP_LIST_FOLD_LEFT_250_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_251(o, s, l) BOOST_PP_LIST_FOLD_LEFT_251_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_252(o, s, l) BOOST_PP_LIST_FOLD_LEFT_252_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_253(o, s, l) BOOST_PP_LIST_FOLD_LEFT_253_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_254(o, s, l) BOOST_PP_LIST_FOLD_LEFT_254_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_255(o, s, l) BOOST_PP_LIST_FOLD_LEFT_255_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_256(o, s, l) BOOST_PP_LIST_FOLD_LEFT_256_D(o, s, l)
+#
+# define BOOST_PP_LIST_FOLD_LEFT_1_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_2, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(2, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_2_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_3, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(3, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_3_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_4, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(4, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_4_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_5, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(5, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_5_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_6, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(6, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_6_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_7, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(7, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_7_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_8, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(8, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_8_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_9, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(9, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_9_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_10, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(10, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_10_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_11, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(11, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_11_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_12, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(12, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_12_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_13, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(13, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_13_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_14, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(14, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_14_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_15, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(15, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_15_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_16, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(16, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_16_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_17, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(17, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_17_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_18, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(18, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_18_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_19, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(19, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_19_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_20, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(20, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_20_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_21, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(21, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_21_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_22, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(22, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_22_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_23, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(23, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_23_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_24, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(24, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_24_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_25, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(25, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_25_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_26, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(26, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_26_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_27, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(27, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_27_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_28, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(28, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_28_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_29, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(29, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_29_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_30, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(30, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_30_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_31, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(31, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_31_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_32, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(32, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_32_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_33, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(33, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_33_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_34, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(34, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_34_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_35, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(35, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_35_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_36, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(36, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_36_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_37, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(37, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_37_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_38, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(38, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_38_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_39, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(39, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_39_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_40, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(40, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_40_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_41, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(41, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_41_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_42, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(42, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_42_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_43, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(43, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_43_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_44, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(44, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_44_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_45, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(45, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_45_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_46, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(46, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_46_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_47, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(47, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_47_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_48, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(48, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_48_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_49, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(49, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_49_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_50, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(50, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_50_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_51, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(51, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_51_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_52, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(52, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_52_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_53, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(53, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_53_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_54, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(54, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_54_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_55, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(55, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_55_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_56, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(56, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_56_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_57, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(57, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_57_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_58, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(58, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_58_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_59, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(59, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_59_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_60, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(60, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_60_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_61, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(61, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_61_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_62, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(62, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_62_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_63, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(63, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_63_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_64, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(64, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_64_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_65, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(65, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_65_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_66, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(66, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_66_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_67, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(67, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_67_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_68, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(68, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_68_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_69, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(69, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_69_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_70, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(70, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_70_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_71, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(71, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_71_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_72, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(72, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_72_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_73, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(73, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_73_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_74, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(74, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_74_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_75, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(75, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_75_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_76, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(76, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_76_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_77, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(77, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_77_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_78, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(78, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_78_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_79, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(79, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_79_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_80, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(80, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_80_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_81, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(81, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_81_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_82, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(82, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_82_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_83, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(83, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_83_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_84, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(84, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_84_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_85, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(85, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_85_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_86, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(86, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_86_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_87, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(87, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_87_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_88, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(88, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_88_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_89, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(89, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_89_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_90, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(90, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_90_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_91, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(91, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_91_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_92, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(92, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_92_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_93, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(93, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_93_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_94, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(94, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_94_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_95, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(95, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_95_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_96, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(96, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_96_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_97, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(97, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_97_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_98, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(98, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_98_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_99, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(99, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_99_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_100, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(100, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_100_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_101, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(101, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_101_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_102, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(102, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_102_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_103, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(103, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_103_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_104, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(104, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_104_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_105, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(105, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_105_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_106, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(106, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_106_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_107, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(107, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_107_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_108, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(108, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_108_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_109, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(109, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_109_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_110, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(110, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_110_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_111, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(111, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_111_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_112, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(112, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_112_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_113, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(113, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_113_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_114, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(114, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_114_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_115, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(115, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_115_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_116, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(116, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_116_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_117, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(117, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_117_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_118, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(118, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_118_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_119, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(119, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_119_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_120, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(120, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_120_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_121, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(121, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_121_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_122, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(122, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_122_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_123, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(123, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_123_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_124, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(124, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_124_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_125, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(125, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_125_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_126, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(126, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_126_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_127, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(127, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_127_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_128, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(128, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_128_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_129, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(129, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_129_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_130, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(130, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_130_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_131, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(131, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_131_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_132, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(132, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_132_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_133, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(133, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_133_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_134, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(134, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_134_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_135, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(135, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_135_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_136, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(136, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_136_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_137, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(137, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_137_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_138, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(138, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_138_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_139, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(139, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_139_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_140, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(140, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_140_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_141, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(141, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_141_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_142, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(142, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_142_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_143, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(143, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_143_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_144, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(144, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_144_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_145, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(145, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_145_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_146, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(146, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_146_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_147, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(147, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_147_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_148, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(148, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_148_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_149, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(149, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_149_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_150, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(150, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_150_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_151, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(151, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_151_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_152, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(152, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_152_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_153, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(153, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_153_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_154, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(154, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_154_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_155, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(155, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_155_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_156, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(156, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_156_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_157, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(157, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_157_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_158, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(158, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_158_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_159, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(159, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_159_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_160, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(160, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_160_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_161, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(161, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_161_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_162, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(162, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_162_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_163, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(163, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_163_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_164, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(164, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_164_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_165, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(165, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_165_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_166, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(166, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_166_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_167, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(167, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_167_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_168, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(168, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_168_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_169, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(169, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_169_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_170, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(170, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_170_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_171, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(171, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_171_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_172, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(172, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_172_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_173, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(173, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_173_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_174, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(174, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_174_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_175, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(175, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_175_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_176, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(176, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_176_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_177, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(177, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_177_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_178, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(178, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_178_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_179, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(179, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_179_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_180, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(180, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_180_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_181, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(181, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_181_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_182, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(182, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_182_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_183, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(183, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_183_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_184, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(184, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_184_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_185, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(185, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_185_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_186, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(186, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_186_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_187, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(187, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_187_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_188, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(188, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_188_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_189, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(189, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_189_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_190, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(190, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_190_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_191, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(191, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_191_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_192, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(192, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_192_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_193, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(193, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_193_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_194, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(194, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_194_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_195, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(195, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_195_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_196, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(196, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_196_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_197, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(197, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_197_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_198, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(198, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_198_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_199, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(199, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_199_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_200, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(200, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_200_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_201, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(201, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_201_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_202, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(202, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_202_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_203, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(203, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_203_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_204, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(204, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_204_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_205, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(205, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_205_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_206, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(206, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_206_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_207, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(207, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_207_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_208, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(208, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_208_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_209, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(209, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_209_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_210, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(210, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_210_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_211, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(211, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_211_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_212, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(212, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_212_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_213, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(213, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_213_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_214, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(214, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_214_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_215, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(215, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_215_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_216, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(216, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_216_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_217, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(217, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_217_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_218, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(218, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_218_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_219, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(219, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_219_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_220, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(220, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_220_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_221, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(221, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_221_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_222, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(222, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_222_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_223, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(223, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_223_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_224, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(224, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_224_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_225, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(225, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_225_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_226, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(226, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_226_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_227, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(227, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_227_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_228, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(228, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_228_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_229, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(229, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_229_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_230, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(230, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_230_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_231, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(231, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_231_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_232, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(232, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_232_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_233, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(233, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_233_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_234, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(234, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_234_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_235, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(235, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_235_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_236, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(236, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_236_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_237, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(237, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_237_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_238, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(238, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_238_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_239, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(239, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_239_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_240, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(240, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_240_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_241, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(241, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_241_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_242, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(242, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_242_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_243, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(243, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_243_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_244, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(244, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_244_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_245, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(245, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_245_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_246, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(246, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_246_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_247, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(247, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_247_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_248, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(248, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_248_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_249, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(249, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_249_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_250, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(250, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_250_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_251, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(251, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_251_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_252, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(252, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_252_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_253, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(253, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_253_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_254, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(254, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_254_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_255, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(255, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_255_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_256, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(256, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_256_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_257, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(257, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+#
+# endif
diff --git a/boost/boost/preprocessor/list/detail/edg/fold_right.hpp b/boost/boost/preprocessor/list/detail/edg/fold_right.hpp
new file mode 100644
index 00000000000..d372d2e6d58
--- /dev/null
+++ b/boost/boost/preprocessor/list/detail/edg/fold_right.hpp
@@ -0,0 +1,794 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_LIST_DETAIL_EDG_FOLD_RIGHT_HPP
+# define BOOST_PREPROCESSOR_LIST_DETAIL_EDG_FOLD_RIGHT_HPP
+#
+# include <boost/preprocessor/control/iif.hpp>
+# include <boost/preprocessor/list/adt.hpp>
+# include <boost/preprocessor/tuple/eat.hpp>
+#
+# define BOOST_PP_LIST_FOLD_RIGHT_1(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_1_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_2(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_2_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_3(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_3_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_4(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_4_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_5(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_5_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_6(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_6_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_7(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_7_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_8(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_8_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_9(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_9_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_10(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_10_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_11(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_11_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_12(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_12_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_13(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_13_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_14(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_14_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_15(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_15_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_16(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_16_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_17(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_17_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_18(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_18_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_19(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_19_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_20(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_20_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_21(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_21_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_22(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_22_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_23(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_23_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_24(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_24_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_25(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_25_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_26(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_26_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_27(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_27_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_28(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_28_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_29(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_29_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_30(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_30_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_31(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_31_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_32(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_32_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_33(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_33_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_34(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_34_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_35(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_35_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_36(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_36_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_37(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_37_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_38(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_38_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_39(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_39_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_40(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_40_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_41(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_41_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_42(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_42_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_43(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_43_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_44(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_44_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_45(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_45_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_46(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_46_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_47(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_47_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_48(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_48_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_49(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_49_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_50(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_50_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_51(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_51_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_52(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_52_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_53(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_53_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_54(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_54_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_55(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_55_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_56(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_56_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_57(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_57_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_58(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_58_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_59(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_59_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_60(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_60_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_61(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_61_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_62(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_62_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_63(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_63_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_64(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_64_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_65(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_65_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_66(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_66_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_67(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_67_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_68(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_68_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_69(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_69_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_70(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_70_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_71(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_71_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_72(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_72_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_73(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_73_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_74(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_74_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_75(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_75_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_76(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_76_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_77(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_77_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_78(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_78_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_79(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_79_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_80(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_80_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_81(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_81_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_82(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_82_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_83(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_83_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_84(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_84_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_85(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_85_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_86(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_86_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_87(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_87_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_88(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_88_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_89(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_89_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_90(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_90_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_91(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_91_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_92(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_92_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_93(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_93_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_94(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_94_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_95(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_95_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_96(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_96_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_97(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_97_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_98(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_98_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_99(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_99_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_100(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_100_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_101(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_101_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_102(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_102_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_103(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_103_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_104(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_104_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_105(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_105_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_106(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_106_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_107(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_107_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_108(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_108_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_109(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_109_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_110(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_110_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_111(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_111_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_112(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_112_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_113(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_113_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_114(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_114_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_115(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_115_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_116(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_116_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_117(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_117_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_118(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_118_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_119(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_119_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_120(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_120_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_121(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_121_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_122(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_122_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_123(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_123_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_124(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_124_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_125(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_125_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_126(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_126_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_127(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_127_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_128(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_128_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_129(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_129_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_130(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_130_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_131(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_131_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_132(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_132_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_133(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_133_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_134(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_134_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_135(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_135_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_136(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_136_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_137(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_137_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_138(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_138_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_139(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_139_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_140(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_140_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_141(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_141_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_142(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_142_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_143(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_143_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_144(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_144_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_145(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_145_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_146(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_146_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_147(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_147_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_148(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_148_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_149(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_149_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_150(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_150_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_151(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_151_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_152(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_152_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_153(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_153_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_154(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_154_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_155(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_155_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_156(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_156_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_157(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_157_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_158(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_158_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_159(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_159_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_160(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_160_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_161(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_161_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_162(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_162_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_163(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_163_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_164(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_164_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_165(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_165_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_166(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_166_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_167(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_167_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_168(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_168_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_169(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_169_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_170(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_170_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_171(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_171_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_172(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_172_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_173(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_173_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_174(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_174_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_175(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_175_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_176(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_176_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_177(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_177_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_178(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_178_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_179(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_179_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_180(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_180_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_181(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_181_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_182(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_182_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_183(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_183_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_184(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_184_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_185(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_185_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_186(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_186_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_187(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_187_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_188(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_188_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_189(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_189_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_190(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_190_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_191(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_191_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_192(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_192_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_193(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_193_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_194(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_194_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_195(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_195_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_196(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_196_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_197(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_197_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_198(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_198_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_199(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_199_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_200(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_200_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_201(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_201_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_202(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_202_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_203(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_203_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_204(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_204_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_205(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_205_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_206(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_206_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_207(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_207_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_208(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_208_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_209(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_209_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_210(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_210_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_211(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_211_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_212(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_212_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_213(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_213_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_214(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_214_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_215(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_215_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_216(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_216_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_217(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_217_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_218(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_218_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_219(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_219_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_220(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_220_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_221(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_221_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_222(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_222_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_223(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_223_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_224(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_224_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_225(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_225_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_226(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_226_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_227(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_227_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_228(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_228_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_229(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_229_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_230(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_230_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_231(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_231_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_232(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_232_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_233(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_233_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_234(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_234_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_235(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_235_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_236(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_236_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_237(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_237_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_238(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_238_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_239(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_239_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_240(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_240_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_241(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_241_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_242(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_242_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_243(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_243_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_244(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_244_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_245(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_245_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_246(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_246_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_247(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_247_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_248(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_248_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_249(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_249_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_250(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_250_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_251(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_251_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_252(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_252_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_253(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_253_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_254(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_254_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_255(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_255_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_256(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_256_D(o, s, l)
+#
+# define BOOST_PP_LIST_FOLD_RIGHT_1_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(2, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_2, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_2_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(3, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_3, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_3_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(4, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_4, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_4_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(5, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_5, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_5_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(6, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_6, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_6_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(7, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_7, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_7_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(8, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_8, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_8_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(9, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_9, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_9_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(10, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_10, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_10_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(11, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_11, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_11_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(12, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_12, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_12_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(13, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_13, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_13_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(14, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_14, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_14_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(15, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_15, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_15_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(16, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_16, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_16_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(17, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_17, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_17_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(18, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_18, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_18_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(19, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_19, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_19_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(20, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_20, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_20_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(21, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_21, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_21_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(22, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_22, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_22_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(23, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_23, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_23_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(24, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_24, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_24_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(25, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_25, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_25_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(26, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_26, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_26_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(27, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_27, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_27_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(28, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_28, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_28_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(29, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_29, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_29_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(30, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_30, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_30_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(31, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_31, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_31_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(32, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_32, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_32_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(33, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_33, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_33_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(34, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_34, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_34_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(35, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_35, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_35_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(36, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_36, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_36_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(37, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_37, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_37_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(38, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_38, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_38_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(39, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_39, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_39_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(40, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_40, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_40_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(41, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_41, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_41_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(42, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_42, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_42_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(43, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_43, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_43_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(44, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_44, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_44_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(45, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_45, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_45_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(46, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_46, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_46_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(47, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_47, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_47_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(48, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_48, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_48_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(49, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_49, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_49_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(50, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_50, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_50_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(51, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_51, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_51_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(52, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_52, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_52_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(53, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_53, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_53_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(54, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_54, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_54_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(55, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_55, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_55_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(56, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_56, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_56_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(57, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_57, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_57_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(58, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_58, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_58_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(59, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_59, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_59_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(60, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_60, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_60_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(61, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_61, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_61_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(62, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_62, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_62_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(63, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_63, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_63_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(64, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_64, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_64_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(65, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_65, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_65_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(66, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_66, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_66_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(67, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_67, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_67_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(68, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_68, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_68_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(69, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_69, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_69_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(70, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_70, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_70_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(71, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_71, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_71_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(72, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_72, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_72_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(73, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_73, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_73_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(74, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_74, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_74_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(75, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_75, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_75_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(76, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_76, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_76_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(77, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_77, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_77_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(78, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_78, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_78_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(79, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_79, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_79_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(80, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_80, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_80_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(81, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_81, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_81_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(82, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_82, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_82_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(83, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_83, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_83_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(84, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_84, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_84_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(85, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_85, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_85_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(86, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_86, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_86_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(87, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_87, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_87_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(88, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_88, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_88_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(89, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_89, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_89_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(90, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_90, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_90_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(91, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_91, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_91_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(92, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_92, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_92_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(93, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_93, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_93_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(94, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_94, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_94_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(95, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_95, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_95_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(96, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_96, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_96_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(97, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_97, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_97_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(98, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_98, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_98_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(99, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_99, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_99_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(100, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_100, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_100_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(101, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_101, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_101_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(102, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_102, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_102_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(103, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_103, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_103_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(104, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_104, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_104_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(105, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_105, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_105_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(106, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_106, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_106_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(107, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_107, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_107_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(108, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_108, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_108_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(109, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_109, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_109_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(110, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_110, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_110_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(111, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_111, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_111_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(112, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_112, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_112_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(113, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_113, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_113_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(114, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_114, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_114_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(115, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_115, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_115_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(116, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_116, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_116_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(117, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_117, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_117_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(118, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_118, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_118_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(119, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_119, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_119_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(120, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_120, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_120_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(121, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_121, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_121_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(122, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_122, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_122_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(123, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_123, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_123_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(124, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_124, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_124_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(125, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_125, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_125_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(126, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_126, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_126_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(127, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_127, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_127_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(128, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_128, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_128_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(129, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_129, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_129_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(130, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_130, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_130_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(131, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_131, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_131_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(132, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_132, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_132_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(133, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_133, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_133_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(134, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_134, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_134_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(135, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_135, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_135_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(136, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_136, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_136_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(137, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_137, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_137_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(138, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_138, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_138_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(139, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_139, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_139_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(140, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_140, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_140_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(141, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_141, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_141_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(142, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_142, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_142_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(143, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_143, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_143_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(144, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_144, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_144_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(145, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_145, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_145_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(146, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_146, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_146_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(147, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_147, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_147_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(148, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_148, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_148_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(149, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_149, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_149_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(150, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_150, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_150_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(151, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_151, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_151_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(152, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_152, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_152_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(153, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_153, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_153_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(154, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_154, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_154_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(155, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_155, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_155_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(156, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_156, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_156_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(157, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_157, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_157_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(158, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_158, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_158_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(159, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_159, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_159_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(160, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_160, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_160_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(161, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_161, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_161_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(162, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_162, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_162_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(163, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_163, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_163_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(164, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_164, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_164_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(165, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_165, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_165_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(166, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_166, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_166_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(167, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_167, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_167_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(168, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_168, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_168_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(169, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_169, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_169_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(170, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_170, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_170_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(171, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_171, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_171_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(172, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_172, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_172_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(173, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_173, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_173_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(174, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_174, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_174_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(175, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_175, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_175_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(176, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_176, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_176_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(177, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_177, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_177_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(178, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_178, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_178_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(179, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_179, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_179_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(180, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_180, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_180_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(181, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_181, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_181_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(182, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_182, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_182_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(183, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_183, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_183_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(184, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_184, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_184_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(185, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_185, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_185_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(186, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_186, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_186_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(187, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_187, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_187_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(188, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_188, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_188_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(189, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_189, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_189_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(190, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_190, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_190_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(191, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_191, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_191_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(192, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_192, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_192_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(193, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_193, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_193_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(194, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_194, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_194_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(195, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_195, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_195_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(196, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_196, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_196_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(197, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_197, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_197_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(198, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_198, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_198_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(199, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_199, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_199_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(200, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_200, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_200_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(201, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_201, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_201_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(202, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_202, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_202_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(203, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_203, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_203_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(204, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_204, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_204_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(205, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_205, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_205_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(206, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_206, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_206_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(207, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_207, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_207_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(208, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_208, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_208_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(209, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_209, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_209_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(210, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_210, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_210_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(211, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_211, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_211_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(212, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_212, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_212_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(213, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_213, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_213_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(214, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_214, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_214_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(215, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_215, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_215_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(216, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_216, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_216_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(217, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_217, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_217_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(218, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_218, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_218_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(219, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_219, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_219_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(220, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_220, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_220_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(221, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_221, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_221_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(222, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_222, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_222_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(223, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_223, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_223_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(224, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_224, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_224_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(225, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_225, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_225_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(226, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_226, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_226_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(227, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_227, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_227_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(228, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_228, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_228_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(229, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_229, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_229_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(230, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_230, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_230_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(231, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_231, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_231_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(232, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_232, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_232_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(233, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_233, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_233_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(234, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_234, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_234_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(235, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_235, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_235_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(236, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_236, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_236_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(237, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_237, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_237_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(238, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_238, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_238_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(239, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_239, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_239_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(240, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_240, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_240_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(241, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_241, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_241_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(242, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_242, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_242_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(243, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_243, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_243_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(244, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_244, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_244_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(245, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_245, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_245_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(246, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_246, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_246_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(247, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_247, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_247_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(248, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_248, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_248_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(249, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_249, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_249_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(250, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_250, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_250_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(251, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_251, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_251_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(252, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_252, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_252_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(253, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_253, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_253_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(254, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_254, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_254_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(255, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_255, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_255_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(256, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_256, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_256_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(257, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_257, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+#
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_NIL 1
+#
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_1(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_2(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_3(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_4(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_5(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_6(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_7(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_8(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_9(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_10(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_11(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_12(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_13(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_14(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_15(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_16(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_17(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_18(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_19(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_20(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_21(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_22(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_23(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_24(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_25(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_26(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_27(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_28(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_29(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_30(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_31(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_32(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_33(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_34(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_35(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_36(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_37(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_38(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_39(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_40(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_41(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_42(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_43(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_44(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_45(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_46(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_47(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_48(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_49(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_50(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_51(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_52(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_53(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_54(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_55(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_56(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_57(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_58(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_59(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_60(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_61(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_62(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_63(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_64(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_65(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_66(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_67(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_68(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_69(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_70(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_71(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_72(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_73(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_74(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_75(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_76(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_77(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_78(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_79(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_80(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_81(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_82(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_83(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_84(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_85(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_86(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_87(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_88(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_89(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_90(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_91(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_92(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_93(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_94(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_95(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_96(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_97(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_98(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_99(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_100(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_101(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_102(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_103(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_104(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_105(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_106(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_107(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_108(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_109(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_110(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_111(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_112(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_113(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_114(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_115(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_116(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_117(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_118(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_119(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_120(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_121(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_122(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_123(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_124(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_125(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_126(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_127(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_128(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_129(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_130(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_131(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_132(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_133(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_134(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_135(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_136(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_137(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_138(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_139(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_140(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_141(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_142(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_143(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_144(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_145(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_146(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_147(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_148(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_149(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_150(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_151(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_152(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_153(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_154(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_155(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_156(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_157(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_158(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_159(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_160(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_161(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_162(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_163(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_164(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_165(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_166(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_167(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_168(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_169(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_170(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_171(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_172(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_173(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_174(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_175(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_176(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_177(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_178(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_179(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_180(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_181(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_182(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_183(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_184(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_185(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_186(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_187(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_188(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_189(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_190(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_191(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_192(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_193(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_194(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_195(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_196(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_197(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_198(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_199(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_200(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_201(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_202(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_203(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_204(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_205(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_206(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_207(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_208(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_209(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_210(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_211(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_212(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_213(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_214(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_215(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_216(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_217(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_218(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_219(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_220(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_221(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_222(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_223(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_224(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_225(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_226(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_227(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_228(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_229(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_230(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_231(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_232(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_233(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_234(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_235(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_236(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_237(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_238(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_239(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_240(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_241(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_242(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_243(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_244(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_245(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_246(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_247(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_248(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_249(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_250(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_251(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_252(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_253(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_254(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_255(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_256(o, s, l) 0
+#
+# endif
diff --git a/boost/boost/preprocessor/list/detail/fold_left.hpp b/boost/boost/preprocessor/list/detail/fold_left.hpp
new file mode 100644
index 00000000000..f5fcab73359
--- /dev/null
+++ b/boost/boost/preprocessor/list/detail/fold_left.hpp
@@ -0,0 +1,279 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_LIST_DETAIL_FOLD_LEFT_HPP
+# define BOOST_PREPROCESSOR_LIST_DETAIL_FOLD_LEFT_HPP
+#
+# include <boost/preprocessor/control/expr_iif.hpp>
+# include <boost/preprocessor/control/iif.hpp>
+# include <boost/preprocessor/list/adt.hpp>
+# include <boost/preprocessor/tuple/eat.hpp>
+#
+# define BOOST_PP_LIST_FOLD_LEFT_1(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_2, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(2, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_2(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_3, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(3, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_3(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_4, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(4, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_4(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_5, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(5, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_5(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_6, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(6, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_6(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_7, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(7, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_7(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_8, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(8, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_8(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_9, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(9, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_9(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_10, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(10, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_10(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_11, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(11, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_11(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_12, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(12, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_12(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_13, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(13, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_13(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_14, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(14, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_14(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_15, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(15, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_15(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_16, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(16, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_16(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_17, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(17, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_17(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_18, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(18, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_18(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_19, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(19, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_19(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_20, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(20, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_20(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_21, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(21, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_21(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_22, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(22, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_22(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_23, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(23, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_23(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_24, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(24, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_24(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_25, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(25, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_25(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_26, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(26, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_26(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_27, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(27, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_27(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_28, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(28, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_28(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_29, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(29, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_29(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_30, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(30, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_30(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_31, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(31, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_31(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_32, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(32, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_32(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_33, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(33, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_33(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_34, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(34, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_34(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_35, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(35, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_35(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_36, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(36, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_36(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_37, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(37, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_37(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_38, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(38, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_38(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_39, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(39, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_39(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_40, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(40, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_40(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_41, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(41, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_41(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_42, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(42, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_42(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_43, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(43, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_43(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_44, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(44, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_44(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_45, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(45, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_45(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_46, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(46, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_46(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_47, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(47, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_47(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_48, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(48, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_48(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_49, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(49, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_49(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_50, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(50, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_50(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_51, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(51, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_51(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_52, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(52, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_52(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_53, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(53, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_53(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_54, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(54, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_54(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_55, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(55, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_55(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_56, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(56, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_56(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_57, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(57, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_57(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_58, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(58, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_58(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_59, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(59, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_59(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_60, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(60, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_60(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_61, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(61, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_61(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_62, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(62, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_62(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_63, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(63, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_63(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_64, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(64, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_64(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_65, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(65, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_65(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_66, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(66, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_66(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_67, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(67, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_67(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_68, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(68, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_68(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_69, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(69, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_69(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_70, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(70, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_70(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_71, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(71, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_71(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_72, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(72, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_72(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_73, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(73, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_73(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_74, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(74, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_74(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_75, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(75, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_75(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_76, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(76, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_76(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_77, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(77, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_77(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_78, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(78, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_78(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_79, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(79, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_79(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_80, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(80, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_80(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_81, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(81, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_81(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_82, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(82, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_82(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_83, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(83, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_83(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_84, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(84, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_84(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_85, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(85, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_85(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_86, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(86, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_86(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_87, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(87, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_87(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_88, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(88, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_88(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_89, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(89, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_89(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_90, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(90, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_90(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_91, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(91, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_91(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_92, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(92, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_92(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_93, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(93, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_93(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_94, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(94, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_94(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_95, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(95, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_95(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_96, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(96, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_96(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_97, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(97, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_97(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_98, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(98, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_98(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_99, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(99, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_99(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_100, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(100, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_100(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_101, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(101, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_101(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_102, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(102, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_102(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_103, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(103, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_103(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_104, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(104, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_104(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_105, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(105, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_105(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_106, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(106, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_106(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_107, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(107, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_107(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_108, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(108, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_108(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_109, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(109, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_109(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_110, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(110, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_110(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_111, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(111, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_111(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_112, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(112, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_112(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_113, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(113, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_113(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_114, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(114, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_114(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_115, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(115, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_115(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_116, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(116, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_116(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_117, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(117, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_117(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_118, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(118, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_118(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_119, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(119, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_119(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_120, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(120, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_120(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_121, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(121, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_121(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_122, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(122, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_122(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_123, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(123, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_123(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_124, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(124, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_124(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_125, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(125, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_125(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_126, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(126, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_126(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_127, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(127, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_127(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_128, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(128, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_128(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_129, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(129, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_129(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_130, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(130, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_130(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_131, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(131, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_131(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_132, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(132, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_132(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_133, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(133, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_133(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_134, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(134, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_134(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_135, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(135, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_135(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_136, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(136, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_136(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_137, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(137, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_137(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_138, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(138, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_138(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_139, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(139, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_139(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_140, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(140, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_140(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_141, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(141, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_141(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_142, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(142, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_142(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_143, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(143, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_143(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_144, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(144, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_144(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_145, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(145, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_145(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_146, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(146, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_146(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_147, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(147, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_147(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_148, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(148, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_148(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_149, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(149, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_149(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_150, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(150, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_150(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_151, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(151, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_151(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_152, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(152, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_152(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_153, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(153, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_153(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_154, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(154, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_154(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_155, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(155, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_155(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_156, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(156, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_156(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_157, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(157, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_157(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_158, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(158, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_158(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_159, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(159, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_159(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_160, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(160, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_160(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_161, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(161, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_161(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_162, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(162, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_162(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_163, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(163, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_163(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_164, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(164, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_164(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_165, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(165, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_165(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_166, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(166, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_166(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_167, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(167, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_167(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_168, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(168, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_168(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_169, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(169, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_169(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_170, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(170, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_170(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_171, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(171, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_171(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_172, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(172, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_172(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_173, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(173, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_173(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_174, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(174, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_174(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_175, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(175, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_175(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_176, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(176, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_176(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_177, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(177, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_177(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_178, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(178, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_178(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_179, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(179, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_179(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_180, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(180, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_180(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_181, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(181, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_181(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_182, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(182, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_182(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_183, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(183, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_183(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_184, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(184, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_184(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_185, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(185, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_185(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_186, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(186, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_186(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_187, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(187, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_187(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_188, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(188, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_188(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_189, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(189, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_189(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_190, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(190, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_190(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_191, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(191, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_191(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_192, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(192, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_192(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_193, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(193, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_193(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_194, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(194, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_194(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_195, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(195, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_195(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_196, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(196, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_196(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_197, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(197, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_197(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_198, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(198, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_198(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_199, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(199, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_199(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_200, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(200, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_200(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_201, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(201, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_201(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_202, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(202, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_202(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_203, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(203, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_203(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_204, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(204, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_204(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_205, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(205, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_205(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_206, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(206, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_206(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_207, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(207, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_207(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_208, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(208, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_208(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_209, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(209, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_209(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_210, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(210, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_210(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_211, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(211, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_211(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_212, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(212, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_212(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_213, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(213, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_213(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_214, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(214, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_214(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_215, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(215, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_215(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_216, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(216, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_216(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_217, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(217, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_217(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_218, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(218, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_218(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_219, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(219, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_219(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_220, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(220, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_220(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_221, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(221, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_221(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_222, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(222, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_222(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_223, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(223, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_223(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_224, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(224, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_224(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_225, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(225, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_225(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_226, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(226, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_226(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_227, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(227, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_227(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_228, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(228, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_228(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_229, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(229, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_229(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_230, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(230, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_230(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_231, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(231, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_231(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_232, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(232, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_232(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_233, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(233, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_233(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_234, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(234, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_234(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_235, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(235, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_235(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_236, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(236, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_236(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_237, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(237, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_237(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_238, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(238, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_238(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_239, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(239, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_239(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_240, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(240, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_240(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_241, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(241, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_241(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_242, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(242, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_242(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_243, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(243, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_243(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_244, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(244, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_244(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_245, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(245, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_245(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_246, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(246, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_246(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_247, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(247, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_247(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_248, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(248, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_248(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_249, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(249, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_249(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_250, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(250, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_250(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_251, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(251, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_251(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_252, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(252, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_252(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_253, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(253, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_253(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_254, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(254, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_254(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_255, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(255, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_255(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_256, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(256, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_256(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_257, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(257, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+#
+# endif
diff --git a/boost/boost/preprocessor/list/detail/fold_right.hpp b/boost/boost/preprocessor/list/detail/fold_right.hpp
new file mode 100644
index 00000000000..29146d504b4
--- /dev/null
+++ b/boost/boost/preprocessor/list/detail/fold_right.hpp
@@ -0,0 +1,277 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_LIST_DETAIL_FOLD_RIGHT_HPP
+# define BOOST_PREPROCESSOR_LIST_DETAIL_FOLD_RIGHT_HPP
+#
+# include <boost/preprocessor/list/fold_left.hpp>
+# include <boost/preprocessor/list/reverse.hpp>
+#
+# define BOOST_PP_LIST_FOLD_RIGHT_1(o, s, l) BOOST_PP_LIST_FOLD_LEFT_1(o, s, BOOST_PP_LIST_REVERSE_D(1, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_2(o, s, l) BOOST_PP_LIST_FOLD_LEFT_2(o, s, BOOST_PP_LIST_REVERSE_D(2, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_3(o, s, l) BOOST_PP_LIST_FOLD_LEFT_3(o, s, BOOST_PP_LIST_REVERSE_D(3, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_4(o, s, l) BOOST_PP_LIST_FOLD_LEFT_4(o, s, BOOST_PP_LIST_REVERSE_D(4, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_5(o, s, l) BOOST_PP_LIST_FOLD_LEFT_5(o, s, BOOST_PP_LIST_REVERSE_D(5, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_6(o, s, l) BOOST_PP_LIST_FOLD_LEFT_6(o, s, BOOST_PP_LIST_REVERSE_D(6, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_7(o, s, l) BOOST_PP_LIST_FOLD_LEFT_7(o, s, BOOST_PP_LIST_REVERSE_D(7, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_8(o, s, l) BOOST_PP_LIST_FOLD_LEFT_8(o, s, BOOST_PP_LIST_REVERSE_D(8, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_9(o, s, l) BOOST_PP_LIST_FOLD_LEFT_9(o, s, BOOST_PP_LIST_REVERSE_D(9, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_10(o, s, l) BOOST_PP_LIST_FOLD_LEFT_10(o, s, BOOST_PP_LIST_REVERSE_D(10, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_11(o, s, l) BOOST_PP_LIST_FOLD_LEFT_11(o, s, BOOST_PP_LIST_REVERSE_D(11, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_12(o, s, l) BOOST_PP_LIST_FOLD_LEFT_12(o, s, BOOST_PP_LIST_REVERSE_D(12, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_13(o, s, l) BOOST_PP_LIST_FOLD_LEFT_13(o, s, BOOST_PP_LIST_REVERSE_D(13, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_14(o, s, l) BOOST_PP_LIST_FOLD_LEFT_14(o, s, BOOST_PP_LIST_REVERSE_D(14, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_15(o, s, l) BOOST_PP_LIST_FOLD_LEFT_15(o, s, BOOST_PP_LIST_REVERSE_D(15, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_16(o, s, l) BOOST_PP_LIST_FOLD_LEFT_16(o, s, BOOST_PP_LIST_REVERSE_D(16, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_17(o, s, l) BOOST_PP_LIST_FOLD_LEFT_17(o, s, BOOST_PP_LIST_REVERSE_D(17, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_18(o, s, l) BOOST_PP_LIST_FOLD_LEFT_18(o, s, BOOST_PP_LIST_REVERSE_D(18, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_19(o, s, l) BOOST_PP_LIST_FOLD_LEFT_19(o, s, BOOST_PP_LIST_REVERSE_D(19, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_20(o, s, l) BOOST_PP_LIST_FOLD_LEFT_20(o, s, BOOST_PP_LIST_REVERSE_D(20, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_21(o, s, l) BOOST_PP_LIST_FOLD_LEFT_21(o, s, BOOST_PP_LIST_REVERSE_D(21, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_22(o, s, l) BOOST_PP_LIST_FOLD_LEFT_22(o, s, BOOST_PP_LIST_REVERSE_D(22, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_23(o, s, l) BOOST_PP_LIST_FOLD_LEFT_23(o, s, BOOST_PP_LIST_REVERSE_D(23, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_24(o, s, l) BOOST_PP_LIST_FOLD_LEFT_24(o, s, BOOST_PP_LIST_REVERSE_D(24, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_25(o, s, l) BOOST_PP_LIST_FOLD_LEFT_25(o, s, BOOST_PP_LIST_REVERSE_D(25, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_26(o, s, l) BOOST_PP_LIST_FOLD_LEFT_26(o, s, BOOST_PP_LIST_REVERSE_D(26, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_27(o, s, l) BOOST_PP_LIST_FOLD_LEFT_27(o, s, BOOST_PP_LIST_REVERSE_D(27, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_28(o, s, l) BOOST_PP_LIST_FOLD_LEFT_28(o, s, BOOST_PP_LIST_REVERSE_D(28, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_29(o, s, l) BOOST_PP_LIST_FOLD_LEFT_29(o, s, BOOST_PP_LIST_REVERSE_D(29, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_30(o, s, l) BOOST_PP_LIST_FOLD_LEFT_30(o, s, BOOST_PP_LIST_REVERSE_D(30, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_31(o, s, l) BOOST_PP_LIST_FOLD_LEFT_31(o, s, BOOST_PP_LIST_REVERSE_D(31, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_32(o, s, l) BOOST_PP_LIST_FOLD_LEFT_32(o, s, BOOST_PP_LIST_REVERSE_D(32, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_33(o, s, l) BOOST_PP_LIST_FOLD_LEFT_33(o, s, BOOST_PP_LIST_REVERSE_D(33, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_34(o, s, l) BOOST_PP_LIST_FOLD_LEFT_34(o, s, BOOST_PP_LIST_REVERSE_D(34, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_35(o, s, l) BOOST_PP_LIST_FOLD_LEFT_35(o, s, BOOST_PP_LIST_REVERSE_D(35, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_36(o, s, l) BOOST_PP_LIST_FOLD_LEFT_36(o, s, BOOST_PP_LIST_REVERSE_D(36, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_37(o, s, l) BOOST_PP_LIST_FOLD_LEFT_37(o, s, BOOST_PP_LIST_REVERSE_D(37, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_38(o, s, l) BOOST_PP_LIST_FOLD_LEFT_38(o, s, BOOST_PP_LIST_REVERSE_D(38, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_39(o, s, l) BOOST_PP_LIST_FOLD_LEFT_39(o, s, BOOST_PP_LIST_REVERSE_D(39, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_40(o, s, l) BOOST_PP_LIST_FOLD_LEFT_40(o, s, BOOST_PP_LIST_REVERSE_D(40, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_41(o, s, l) BOOST_PP_LIST_FOLD_LEFT_41(o, s, BOOST_PP_LIST_REVERSE_D(41, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_42(o, s, l) BOOST_PP_LIST_FOLD_LEFT_42(o, s, BOOST_PP_LIST_REVERSE_D(42, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_43(o, s, l) BOOST_PP_LIST_FOLD_LEFT_43(o, s, BOOST_PP_LIST_REVERSE_D(43, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_44(o, s, l) BOOST_PP_LIST_FOLD_LEFT_44(o, s, BOOST_PP_LIST_REVERSE_D(44, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_45(o, s, l) BOOST_PP_LIST_FOLD_LEFT_45(o, s, BOOST_PP_LIST_REVERSE_D(45, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_46(o, s, l) BOOST_PP_LIST_FOLD_LEFT_46(o, s, BOOST_PP_LIST_REVERSE_D(46, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_47(o, s, l) BOOST_PP_LIST_FOLD_LEFT_47(o, s, BOOST_PP_LIST_REVERSE_D(47, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_48(o, s, l) BOOST_PP_LIST_FOLD_LEFT_48(o, s, BOOST_PP_LIST_REVERSE_D(48, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_49(o, s, l) BOOST_PP_LIST_FOLD_LEFT_49(o, s, BOOST_PP_LIST_REVERSE_D(49, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_50(o, s, l) BOOST_PP_LIST_FOLD_LEFT_50(o, s, BOOST_PP_LIST_REVERSE_D(50, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_51(o, s, l) BOOST_PP_LIST_FOLD_LEFT_51(o, s, BOOST_PP_LIST_REVERSE_D(51, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_52(o, s, l) BOOST_PP_LIST_FOLD_LEFT_52(o, s, BOOST_PP_LIST_REVERSE_D(52, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_53(o, s, l) BOOST_PP_LIST_FOLD_LEFT_53(o, s, BOOST_PP_LIST_REVERSE_D(53, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_54(o, s, l) BOOST_PP_LIST_FOLD_LEFT_54(o, s, BOOST_PP_LIST_REVERSE_D(54, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_55(o, s, l) BOOST_PP_LIST_FOLD_LEFT_55(o, s, BOOST_PP_LIST_REVERSE_D(55, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_56(o, s, l) BOOST_PP_LIST_FOLD_LEFT_56(o, s, BOOST_PP_LIST_REVERSE_D(56, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_57(o, s, l) BOOST_PP_LIST_FOLD_LEFT_57(o, s, BOOST_PP_LIST_REVERSE_D(57, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_58(o, s, l) BOOST_PP_LIST_FOLD_LEFT_58(o, s, BOOST_PP_LIST_REVERSE_D(58, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_59(o, s, l) BOOST_PP_LIST_FOLD_LEFT_59(o, s, BOOST_PP_LIST_REVERSE_D(59, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_60(o, s, l) BOOST_PP_LIST_FOLD_LEFT_60(o, s, BOOST_PP_LIST_REVERSE_D(60, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_61(o, s, l) BOOST_PP_LIST_FOLD_LEFT_61(o, s, BOOST_PP_LIST_REVERSE_D(61, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_62(o, s, l) BOOST_PP_LIST_FOLD_LEFT_62(o, s, BOOST_PP_LIST_REVERSE_D(62, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_63(o, s, l) BOOST_PP_LIST_FOLD_LEFT_63(o, s, BOOST_PP_LIST_REVERSE_D(63, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_64(o, s, l) BOOST_PP_LIST_FOLD_LEFT_64(o, s, BOOST_PP_LIST_REVERSE_D(64, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_65(o, s, l) BOOST_PP_LIST_FOLD_LEFT_65(o, s, BOOST_PP_LIST_REVERSE_D(65, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_66(o, s, l) BOOST_PP_LIST_FOLD_LEFT_66(o, s, BOOST_PP_LIST_REVERSE_D(66, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_67(o, s, l) BOOST_PP_LIST_FOLD_LEFT_67(o, s, BOOST_PP_LIST_REVERSE_D(67, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_68(o, s, l) BOOST_PP_LIST_FOLD_LEFT_68(o, s, BOOST_PP_LIST_REVERSE_D(68, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_69(o, s, l) BOOST_PP_LIST_FOLD_LEFT_69(o, s, BOOST_PP_LIST_REVERSE_D(69, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_70(o, s, l) BOOST_PP_LIST_FOLD_LEFT_70(o, s, BOOST_PP_LIST_REVERSE_D(70, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_71(o, s, l) BOOST_PP_LIST_FOLD_LEFT_71(o, s, BOOST_PP_LIST_REVERSE_D(71, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_72(o, s, l) BOOST_PP_LIST_FOLD_LEFT_72(o, s, BOOST_PP_LIST_REVERSE_D(72, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_73(o, s, l) BOOST_PP_LIST_FOLD_LEFT_73(o, s, BOOST_PP_LIST_REVERSE_D(73, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_74(o, s, l) BOOST_PP_LIST_FOLD_LEFT_74(o, s, BOOST_PP_LIST_REVERSE_D(74, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_75(o, s, l) BOOST_PP_LIST_FOLD_LEFT_75(o, s, BOOST_PP_LIST_REVERSE_D(75, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_76(o, s, l) BOOST_PP_LIST_FOLD_LEFT_76(o, s, BOOST_PP_LIST_REVERSE_D(76, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_77(o, s, l) BOOST_PP_LIST_FOLD_LEFT_77(o, s, BOOST_PP_LIST_REVERSE_D(77, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_78(o, s, l) BOOST_PP_LIST_FOLD_LEFT_78(o, s, BOOST_PP_LIST_REVERSE_D(78, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_79(o, s, l) BOOST_PP_LIST_FOLD_LEFT_79(o, s, BOOST_PP_LIST_REVERSE_D(79, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_80(o, s, l) BOOST_PP_LIST_FOLD_LEFT_80(o, s, BOOST_PP_LIST_REVERSE_D(80, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_81(o, s, l) BOOST_PP_LIST_FOLD_LEFT_81(o, s, BOOST_PP_LIST_REVERSE_D(81, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_82(o, s, l) BOOST_PP_LIST_FOLD_LEFT_82(o, s, BOOST_PP_LIST_REVERSE_D(82, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_83(o, s, l) BOOST_PP_LIST_FOLD_LEFT_83(o, s, BOOST_PP_LIST_REVERSE_D(83, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_84(o, s, l) BOOST_PP_LIST_FOLD_LEFT_84(o, s, BOOST_PP_LIST_REVERSE_D(84, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_85(o, s, l) BOOST_PP_LIST_FOLD_LEFT_85(o, s, BOOST_PP_LIST_REVERSE_D(85, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_86(o, s, l) BOOST_PP_LIST_FOLD_LEFT_86(o, s, BOOST_PP_LIST_REVERSE_D(86, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_87(o, s, l) BOOST_PP_LIST_FOLD_LEFT_87(o, s, BOOST_PP_LIST_REVERSE_D(87, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_88(o, s, l) BOOST_PP_LIST_FOLD_LEFT_88(o, s, BOOST_PP_LIST_REVERSE_D(88, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_89(o, s, l) BOOST_PP_LIST_FOLD_LEFT_89(o, s, BOOST_PP_LIST_REVERSE_D(89, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_90(o, s, l) BOOST_PP_LIST_FOLD_LEFT_90(o, s, BOOST_PP_LIST_REVERSE_D(90, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_91(o, s, l) BOOST_PP_LIST_FOLD_LEFT_91(o, s, BOOST_PP_LIST_REVERSE_D(91, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_92(o, s, l) BOOST_PP_LIST_FOLD_LEFT_92(o, s, BOOST_PP_LIST_REVERSE_D(92, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_93(o, s, l) BOOST_PP_LIST_FOLD_LEFT_93(o, s, BOOST_PP_LIST_REVERSE_D(93, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_94(o, s, l) BOOST_PP_LIST_FOLD_LEFT_94(o, s, BOOST_PP_LIST_REVERSE_D(94, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_95(o, s, l) BOOST_PP_LIST_FOLD_LEFT_95(o, s, BOOST_PP_LIST_REVERSE_D(95, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_96(o, s, l) BOOST_PP_LIST_FOLD_LEFT_96(o, s, BOOST_PP_LIST_REVERSE_D(96, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_97(o, s, l) BOOST_PP_LIST_FOLD_LEFT_97(o, s, BOOST_PP_LIST_REVERSE_D(97, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_98(o, s, l) BOOST_PP_LIST_FOLD_LEFT_98(o, s, BOOST_PP_LIST_REVERSE_D(98, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_99(o, s, l) BOOST_PP_LIST_FOLD_LEFT_99(o, s, BOOST_PP_LIST_REVERSE_D(99, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_100(o, s, l) BOOST_PP_LIST_FOLD_LEFT_100(o, s, BOOST_PP_LIST_REVERSE_D(100, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_101(o, s, l) BOOST_PP_LIST_FOLD_LEFT_101(o, s, BOOST_PP_LIST_REVERSE_D(101, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_102(o, s, l) BOOST_PP_LIST_FOLD_LEFT_102(o, s, BOOST_PP_LIST_REVERSE_D(102, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_103(o, s, l) BOOST_PP_LIST_FOLD_LEFT_103(o, s, BOOST_PP_LIST_REVERSE_D(103, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_104(o, s, l) BOOST_PP_LIST_FOLD_LEFT_104(o, s, BOOST_PP_LIST_REVERSE_D(104, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_105(o, s, l) BOOST_PP_LIST_FOLD_LEFT_105(o, s, BOOST_PP_LIST_REVERSE_D(105, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_106(o, s, l) BOOST_PP_LIST_FOLD_LEFT_106(o, s, BOOST_PP_LIST_REVERSE_D(106, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_107(o, s, l) BOOST_PP_LIST_FOLD_LEFT_107(o, s, BOOST_PP_LIST_REVERSE_D(107, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_108(o, s, l) BOOST_PP_LIST_FOLD_LEFT_108(o, s, BOOST_PP_LIST_REVERSE_D(108, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_109(o, s, l) BOOST_PP_LIST_FOLD_LEFT_109(o, s, BOOST_PP_LIST_REVERSE_D(109, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_110(o, s, l) BOOST_PP_LIST_FOLD_LEFT_110(o, s, BOOST_PP_LIST_REVERSE_D(110, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_111(o, s, l) BOOST_PP_LIST_FOLD_LEFT_111(o, s, BOOST_PP_LIST_REVERSE_D(111, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_112(o, s, l) BOOST_PP_LIST_FOLD_LEFT_112(o, s, BOOST_PP_LIST_REVERSE_D(112, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_113(o, s, l) BOOST_PP_LIST_FOLD_LEFT_113(o, s, BOOST_PP_LIST_REVERSE_D(113, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_114(o, s, l) BOOST_PP_LIST_FOLD_LEFT_114(o, s, BOOST_PP_LIST_REVERSE_D(114, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_115(o, s, l) BOOST_PP_LIST_FOLD_LEFT_115(o, s, BOOST_PP_LIST_REVERSE_D(115, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_116(o, s, l) BOOST_PP_LIST_FOLD_LEFT_116(o, s, BOOST_PP_LIST_REVERSE_D(116, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_117(o, s, l) BOOST_PP_LIST_FOLD_LEFT_117(o, s, BOOST_PP_LIST_REVERSE_D(117, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_118(o, s, l) BOOST_PP_LIST_FOLD_LEFT_118(o, s, BOOST_PP_LIST_REVERSE_D(118, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_119(o, s, l) BOOST_PP_LIST_FOLD_LEFT_119(o, s, BOOST_PP_LIST_REVERSE_D(119, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_120(o, s, l) BOOST_PP_LIST_FOLD_LEFT_120(o, s, BOOST_PP_LIST_REVERSE_D(120, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_121(o, s, l) BOOST_PP_LIST_FOLD_LEFT_121(o, s, BOOST_PP_LIST_REVERSE_D(121, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_122(o, s, l) BOOST_PP_LIST_FOLD_LEFT_122(o, s, BOOST_PP_LIST_REVERSE_D(122, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_123(o, s, l) BOOST_PP_LIST_FOLD_LEFT_123(o, s, BOOST_PP_LIST_REVERSE_D(123, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_124(o, s, l) BOOST_PP_LIST_FOLD_LEFT_124(o, s, BOOST_PP_LIST_REVERSE_D(124, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_125(o, s, l) BOOST_PP_LIST_FOLD_LEFT_125(o, s, BOOST_PP_LIST_REVERSE_D(125, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_126(o, s, l) BOOST_PP_LIST_FOLD_LEFT_126(o, s, BOOST_PP_LIST_REVERSE_D(126, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_127(o, s, l) BOOST_PP_LIST_FOLD_LEFT_127(o, s, BOOST_PP_LIST_REVERSE_D(127, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_128(o, s, l) BOOST_PP_LIST_FOLD_LEFT_128(o, s, BOOST_PP_LIST_REVERSE_D(128, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_129(o, s, l) BOOST_PP_LIST_FOLD_LEFT_129(o, s, BOOST_PP_LIST_REVERSE_D(129, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_130(o, s, l) BOOST_PP_LIST_FOLD_LEFT_130(o, s, BOOST_PP_LIST_REVERSE_D(130, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_131(o, s, l) BOOST_PP_LIST_FOLD_LEFT_131(o, s, BOOST_PP_LIST_REVERSE_D(131, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_132(o, s, l) BOOST_PP_LIST_FOLD_LEFT_132(o, s, BOOST_PP_LIST_REVERSE_D(132, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_133(o, s, l) BOOST_PP_LIST_FOLD_LEFT_133(o, s, BOOST_PP_LIST_REVERSE_D(133, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_134(o, s, l) BOOST_PP_LIST_FOLD_LEFT_134(o, s, BOOST_PP_LIST_REVERSE_D(134, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_135(o, s, l) BOOST_PP_LIST_FOLD_LEFT_135(o, s, BOOST_PP_LIST_REVERSE_D(135, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_136(o, s, l) BOOST_PP_LIST_FOLD_LEFT_136(o, s, BOOST_PP_LIST_REVERSE_D(136, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_137(o, s, l) BOOST_PP_LIST_FOLD_LEFT_137(o, s, BOOST_PP_LIST_REVERSE_D(137, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_138(o, s, l) BOOST_PP_LIST_FOLD_LEFT_138(o, s, BOOST_PP_LIST_REVERSE_D(138, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_139(o, s, l) BOOST_PP_LIST_FOLD_LEFT_139(o, s, BOOST_PP_LIST_REVERSE_D(139, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_140(o, s, l) BOOST_PP_LIST_FOLD_LEFT_140(o, s, BOOST_PP_LIST_REVERSE_D(140, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_141(o, s, l) BOOST_PP_LIST_FOLD_LEFT_141(o, s, BOOST_PP_LIST_REVERSE_D(141, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_142(o, s, l) BOOST_PP_LIST_FOLD_LEFT_142(o, s, BOOST_PP_LIST_REVERSE_D(142, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_143(o, s, l) BOOST_PP_LIST_FOLD_LEFT_143(o, s, BOOST_PP_LIST_REVERSE_D(143, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_144(o, s, l) BOOST_PP_LIST_FOLD_LEFT_144(o, s, BOOST_PP_LIST_REVERSE_D(144, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_145(o, s, l) BOOST_PP_LIST_FOLD_LEFT_145(o, s, BOOST_PP_LIST_REVERSE_D(145, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_146(o, s, l) BOOST_PP_LIST_FOLD_LEFT_146(o, s, BOOST_PP_LIST_REVERSE_D(146, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_147(o, s, l) BOOST_PP_LIST_FOLD_LEFT_147(o, s, BOOST_PP_LIST_REVERSE_D(147, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_148(o, s, l) BOOST_PP_LIST_FOLD_LEFT_148(o, s, BOOST_PP_LIST_REVERSE_D(148, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_149(o, s, l) BOOST_PP_LIST_FOLD_LEFT_149(o, s, BOOST_PP_LIST_REVERSE_D(149, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_150(o, s, l) BOOST_PP_LIST_FOLD_LEFT_150(o, s, BOOST_PP_LIST_REVERSE_D(150, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_151(o, s, l) BOOST_PP_LIST_FOLD_LEFT_151(o, s, BOOST_PP_LIST_REVERSE_D(151, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_152(o, s, l) BOOST_PP_LIST_FOLD_LEFT_152(o, s, BOOST_PP_LIST_REVERSE_D(152, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_153(o, s, l) BOOST_PP_LIST_FOLD_LEFT_153(o, s, BOOST_PP_LIST_REVERSE_D(153, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_154(o, s, l) BOOST_PP_LIST_FOLD_LEFT_154(o, s, BOOST_PP_LIST_REVERSE_D(154, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_155(o, s, l) BOOST_PP_LIST_FOLD_LEFT_155(o, s, BOOST_PP_LIST_REVERSE_D(155, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_156(o, s, l) BOOST_PP_LIST_FOLD_LEFT_156(o, s, BOOST_PP_LIST_REVERSE_D(156, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_157(o, s, l) BOOST_PP_LIST_FOLD_LEFT_157(o, s, BOOST_PP_LIST_REVERSE_D(157, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_158(o, s, l) BOOST_PP_LIST_FOLD_LEFT_158(o, s, BOOST_PP_LIST_REVERSE_D(158, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_159(o, s, l) BOOST_PP_LIST_FOLD_LEFT_159(o, s, BOOST_PP_LIST_REVERSE_D(159, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_160(o, s, l) BOOST_PP_LIST_FOLD_LEFT_160(o, s, BOOST_PP_LIST_REVERSE_D(160, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_161(o, s, l) BOOST_PP_LIST_FOLD_LEFT_161(o, s, BOOST_PP_LIST_REVERSE_D(161, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_162(o, s, l) BOOST_PP_LIST_FOLD_LEFT_162(o, s, BOOST_PP_LIST_REVERSE_D(162, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_163(o, s, l) BOOST_PP_LIST_FOLD_LEFT_163(o, s, BOOST_PP_LIST_REVERSE_D(163, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_164(o, s, l) BOOST_PP_LIST_FOLD_LEFT_164(o, s, BOOST_PP_LIST_REVERSE_D(164, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_165(o, s, l) BOOST_PP_LIST_FOLD_LEFT_165(o, s, BOOST_PP_LIST_REVERSE_D(165, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_166(o, s, l) BOOST_PP_LIST_FOLD_LEFT_166(o, s, BOOST_PP_LIST_REVERSE_D(166, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_167(o, s, l) BOOST_PP_LIST_FOLD_LEFT_167(o, s, BOOST_PP_LIST_REVERSE_D(167, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_168(o, s, l) BOOST_PP_LIST_FOLD_LEFT_168(o, s, BOOST_PP_LIST_REVERSE_D(168, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_169(o, s, l) BOOST_PP_LIST_FOLD_LEFT_169(o, s, BOOST_PP_LIST_REVERSE_D(169, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_170(o, s, l) BOOST_PP_LIST_FOLD_LEFT_170(o, s, BOOST_PP_LIST_REVERSE_D(170, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_171(o, s, l) BOOST_PP_LIST_FOLD_LEFT_171(o, s, BOOST_PP_LIST_REVERSE_D(171, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_172(o, s, l) BOOST_PP_LIST_FOLD_LEFT_172(o, s, BOOST_PP_LIST_REVERSE_D(172, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_173(o, s, l) BOOST_PP_LIST_FOLD_LEFT_173(o, s, BOOST_PP_LIST_REVERSE_D(173, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_174(o, s, l) BOOST_PP_LIST_FOLD_LEFT_174(o, s, BOOST_PP_LIST_REVERSE_D(174, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_175(o, s, l) BOOST_PP_LIST_FOLD_LEFT_175(o, s, BOOST_PP_LIST_REVERSE_D(175, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_176(o, s, l) BOOST_PP_LIST_FOLD_LEFT_176(o, s, BOOST_PP_LIST_REVERSE_D(176, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_177(o, s, l) BOOST_PP_LIST_FOLD_LEFT_177(o, s, BOOST_PP_LIST_REVERSE_D(177, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_178(o, s, l) BOOST_PP_LIST_FOLD_LEFT_178(o, s, BOOST_PP_LIST_REVERSE_D(178, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_179(o, s, l) BOOST_PP_LIST_FOLD_LEFT_179(o, s, BOOST_PP_LIST_REVERSE_D(179, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_180(o, s, l) BOOST_PP_LIST_FOLD_LEFT_180(o, s, BOOST_PP_LIST_REVERSE_D(180, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_181(o, s, l) BOOST_PP_LIST_FOLD_LEFT_181(o, s, BOOST_PP_LIST_REVERSE_D(181, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_182(o, s, l) BOOST_PP_LIST_FOLD_LEFT_182(o, s, BOOST_PP_LIST_REVERSE_D(182, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_183(o, s, l) BOOST_PP_LIST_FOLD_LEFT_183(o, s, BOOST_PP_LIST_REVERSE_D(183, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_184(o, s, l) BOOST_PP_LIST_FOLD_LEFT_184(o, s, BOOST_PP_LIST_REVERSE_D(184, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_185(o, s, l) BOOST_PP_LIST_FOLD_LEFT_185(o, s, BOOST_PP_LIST_REVERSE_D(185, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_186(o, s, l) BOOST_PP_LIST_FOLD_LEFT_186(o, s, BOOST_PP_LIST_REVERSE_D(186, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_187(o, s, l) BOOST_PP_LIST_FOLD_LEFT_187(o, s, BOOST_PP_LIST_REVERSE_D(187, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_188(o, s, l) BOOST_PP_LIST_FOLD_LEFT_188(o, s, BOOST_PP_LIST_REVERSE_D(188, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_189(o, s, l) BOOST_PP_LIST_FOLD_LEFT_189(o, s, BOOST_PP_LIST_REVERSE_D(189, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_190(o, s, l) BOOST_PP_LIST_FOLD_LEFT_190(o, s, BOOST_PP_LIST_REVERSE_D(190, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_191(o, s, l) BOOST_PP_LIST_FOLD_LEFT_191(o, s, BOOST_PP_LIST_REVERSE_D(191, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_192(o, s, l) BOOST_PP_LIST_FOLD_LEFT_192(o, s, BOOST_PP_LIST_REVERSE_D(192, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_193(o, s, l) BOOST_PP_LIST_FOLD_LEFT_193(o, s, BOOST_PP_LIST_REVERSE_D(193, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_194(o, s, l) BOOST_PP_LIST_FOLD_LEFT_194(o, s, BOOST_PP_LIST_REVERSE_D(194, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_195(o, s, l) BOOST_PP_LIST_FOLD_LEFT_195(o, s, BOOST_PP_LIST_REVERSE_D(195, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_196(o, s, l) BOOST_PP_LIST_FOLD_LEFT_196(o, s, BOOST_PP_LIST_REVERSE_D(196, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_197(o, s, l) BOOST_PP_LIST_FOLD_LEFT_197(o, s, BOOST_PP_LIST_REVERSE_D(197, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_198(o, s, l) BOOST_PP_LIST_FOLD_LEFT_198(o, s, BOOST_PP_LIST_REVERSE_D(198, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_199(o, s, l) BOOST_PP_LIST_FOLD_LEFT_199(o, s, BOOST_PP_LIST_REVERSE_D(199, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_200(o, s, l) BOOST_PP_LIST_FOLD_LEFT_200(o, s, BOOST_PP_LIST_REVERSE_D(200, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_201(o, s, l) BOOST_PP_LIST_FOLD_LEFT_201(o, s, BOOST_PP_LIST_REVERSE_D(201, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_202(o, s, l) BOOST_PP_LIST_FOLD_LEFT_202(o, s, BOOST_PP_LIST_REVERSE_D(202, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_203(o, s, l) BOOST_PP_LIST_FOLD_LEFT_203(o, s, BOOST_PP_LIST_REVERSE_D(203, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_204(o, s, l) BOOST_PP_LIST_FOLD_LEFT_204(o, s, BOOST_PP_LIST_REVERSE_D(204, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_205(o, s, l) BOOST_PP_LIST_FOLD_LEFT_205(o, s, BOOST_PP_LIST_REVERSE_D(205, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_206(o, s, l) BOOST_PP_LIST_FOLD_LEFT_206(o, s, BOOST_PP_LIST_REVERSE_D(206, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_207(o, s, l) BOOST_PP_LIST_FOLD_LEFT_207(o, s, BOOST_PP_LIST_REVERSE_D(207, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_208(o, s, l) BOOST_PP_LIST_FOLD_LEFT_208(o, s, BOOST_PP_LIST_REVERSE_D(208, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_209(o, s, l) BOOST_PP_LIST_FOLD_LEFT_209(o, s, BOOST_PP_LIST_REVERSE_D(209, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_210(o, s, l) BOOST_PP_LIST_FOLD_LEFT_210(o, s, BOOST_PP_LIST_REVERSE_D(210, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_211(o, s, l) BOOST_PP_LIST_FOLD_LEFT_211(o, s, BOOST_PP_LIST_REVERSE_D(211, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_212(o, s, l) BOOST_PP_LIST_FOLD_LEFT_212(o, s, BOOST_PP_LIST_REVERSE_D(212, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_213(o, s, l) BOOST_PP_LIST_FOLD_LEFT_213(o, s, BOOST_PP_LIST_REVERSE_D(213, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_214(o, s, l) BOOST_PP_LIST_FOLD_LEFT_214(o, s, BOOST_PP_LIST_REVERSE_D(214, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_215(o, s, l) BOOST_PP_LIST_FOLD_LEFT_215(o, s, BOOST_PP_LIST_REVERSE_D(215, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_216(o, s, l) BOOST_PP_LIST_FOLD_LEFT_216(o, s, BOOST_PP_LIST_REVERSE_D(216, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_217(o, s, l) BOOST_PP_LIST_FOLD_LEFT_217(o, s, BOOST_PP_LIST_REVERSE_D(217, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_218(o, s, l) BOOST_PP_LIST_FOLD_LEFT_218(o, s, BOOST_PP_LIST_REVERSE_D(218, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_219(o, s, l) BOOST_PP_LIST_FOLD_LEFT_219(o, s, BOOST_PP_LIST_REVERSE_D(219, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_220(o, s, l) BOOST_PP_LIST_FOLD_LEFT_220(o, s, BOOST_PP_LIST_REVERSE_D(220, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_221(o, s, l) BOOST_PP_LIST_FOLD_LEFT_221(o, s, BOOST_PP_LIST_REVERSE_D(221, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_222(o, s, l) BOOST_PP_LIST_FOLD_LEFT_222(o, s, BOOST_PP_LIST_REVERSE_D(222, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_223(o, s, l) BOOST_PP_LIST_FOLD_LEFT_223(o, s, BOOST_PP_LIST_REVERSE_D(223, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_224(o, s, l) BOOST_PP_LIST_FOLD_LEFT_224(o, s, BOOST_PP_LIST_REVERSE_D(224, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_225(o, s, l) BOOST_PP_LIST_FOLD_LEFT_225(o, s, BOOST_PP_LIST_REVERSE_D(225, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_226(o, s, l) BOOST_PP_LIST_FOLD_LEFT_226(o, s, BOOST_PP_LIST_REVERSE_D(226, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_227(o, s, l) BOOST_PP_LIST_FOLD_LEFT_227(o, s, BOOST_PP_LIST_REVERSE_D(227, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_228(o, s, l) BOOST_PP_LIST_FOLD_LEFT_228(o, s, BOOST_PP_LIST_REVERSE_D(228, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_229(o, s, l) BOOST_PP_LIST_FOLD_LEFT_229(o, s, BOOST_PP_LIST_REVERSE_D(229, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_230(o, s, l) BOOST_PP_LIST_FOLD_LEFT_230(o, s, BOOST_PP_LIST_REVERSE_D(230, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_231(o, s, l) BOOST_PP_LIST_FOLD_LEFT_231(o, s, BOOST_PP_LIST_REVERSE_D(231, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_232(o, s, l) BOOST_PP_LIST_FOLD_LEFT_232(o, s, BOOST_PP_LIST_REVERSE_D(232, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_233(o, s, l) BOOST_PP_LIST_FOLD_LEFT_233(o, s, BOOST_PP_LIST_REVERSE_D(233, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_234(o, s, l) BOOST_PP_LIST_FOLD_LEFT_234(o, s, BOOST_PP_LIST_REVERSE_D(234, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_235(o, s, l) BOOST_PP_LIST_FOLD_LEFT_235(o, s, BOOST_PP_LIST_REVERSE_D(235, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_236(o, s, l) BOOST_PP_LIST_FOLD_LEFT_236(o, s, BOOST_PP_LIST_REVERSE_D(236, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_237(o, s, l) BOOST_PP_LIST_FOLD_LEFT_237(o, s, BOOST_PP_LIST_REVERSE_D(237, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_238(o, s, l) BOOST_PP_LIST_FOLD_LEFT_238(o, s, BOOST_PP_LIST_REVERSE_D(238, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_239(o, s, l) BOOST_PP_LIST_FOLD_LEFT_239(o, s, BOOST_PP_LIST_REVERSE_D(239, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_240(o, s, l) BOOST_PP_LIST_FOLD_LEFT_240(o, s, BOOST_PP_LIST_REVERSE_D(240, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_241(o, s, l) BOOST_PP_LIST_FOLD_LEFT_241(o, s, BOOST_PP_LIST_REVERSE_D(241, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_242(o, s, l) BOOST_PP_LIST_FOLD_LEFT_242(o, s, BOOST_PP_LIST_REVERSE_D(242, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_243(o, s, l) BOOST_PP_LIST_FOLD_LEFT_243(o, s, BOOST_PP_LIST_REVERSE_D(243, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_244(o, s, l) BOOST_PP_LIST_FOLD_LEFT_244(o, s, BOOST_PP_LIST_REVERSE_D(244, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_245(o, s, l) BOOST_PP_LIST_FOLD_LEFT_245(o, s, BOOST_PP_LIST_REVERSE_D(245, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_246(o, s, l) BOOST_PP_LIST_FOLD_LEFT_246(o, s, BOOST_PP_LIST_REVERSE_D(246, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_247(o, s, l) BOOST_PP_LIST_FOLD_LEFT_247(o, s, BOOST_PP_LIST_REVERSE_D(247, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_248(o, s, l) BOOST_PP_LIST_FOLD_LEFT_248(o, s, BOOST_PP_LIST_REVERSE_D(248, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_249(o, s, l) BOOST_PP_LIST_FOLD_LEFT_249(o, s, BOOST_PP_LIST_REVERSE_D(249, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_250(o, s, l) BOOST_PP_LIST_FOLD_LEFT_250(o, s, BOOST_PP_LIST_REVERSE_D(250, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_251(o, s, l) BOOST_PP_LIST_FOLD_LEFT_251(o, s, BOOST_PP_LIST_REVERSE_D(251, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_252(o, s, l) BOOST_PP_LIST_FOLD_LEFT_252(o, s, BOOST_PP_LIST_REVERSE_D(252, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_253(o, s, l) BOOST_PP_LIST_FOLD_LEFT_253(o, s, BOOST_PP_LIST_REVERSE_D(253, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_254(o, s, l) BOOST_PP_LIST_FOLD_LEFT_254(o, s, BOOST_PP_LIST_REVERSE_D(254, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_255(o, s, l) BOOST_PP_LIST_FOLD_LEFT_255(o, s, BOOST_PP_LIST_REVERSE_D(255, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_256(o, s, l) BOOST_PP_LIST_FOLD_LEFT_256(o, s, BOOST_PP_LIST_REVERSE_D(256, l))
+#
+# endif
diff --git a/boost/boost/preprocessor/list/enum.hpp b/boost/boost/preprocessor/list/enum.hpp
new file mode 100644
index 00000000000..1eabea6ef81
--- /dev/null
+++ b/boost/boost/preprocessor/list/enum.hpp
@@ -0,0 +1,41 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_LIST_ENUM_HPP
+# define BOOST_PREPROCESSOR_LIST_ENUM_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/list/for_each_i.hpp>
+# include <boost/preprocessor/punctuation/comma_if.hpp>
+#
+# /* BOOST_PP_LIST_ENUM */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_LIST_ENUM(list) BOOST_PP_LIST_FOR_EACH_I(BOOST_PP_LIST_ENUM_O, BOOST_PP_NIL, list)
+# else
+# define BOOST_PP_LIST_ENUM(list) BOOST_PP_LIST_ENUM_I(list)
+# define BOOST_PP_LIST_ENUM_I(list) BOOST_PP_LIST_FOR_EACH_I(BOOST_PP_LIST_ENUM_O, BOOST_PP_NIL, list)
+# endif
+#
+# define BOOST_PP_LIST_ENUM_O(r, _, i, elem) BOOST_PP_COMMA_IF(i) elem
+#
+# /* BOOST_PP_LIST_ENUM_R */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_LIST_ENUM_R(r, list) BOOST_PP_LIST_FOR_EACH_I_R(r, BOOST_PP_LIST_ENUM_O, BOOST_PP_NIL, list)
+# else
+# define BOOST_PP_LIST_ENUM_R(r, list) BOOST_PP_LIST_ENUM_R_I(r, list)
+# define BOOST_PP_LIST_ENUM_R_I(r, list) BOOST_PP_LIST_FOR_EACH_I_R(r, BOOST_PP_LIST_ENUM_O, BOOST_PP_NIL, list)
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/list/filter.hpp b/boost/boost/preprocessor/list/filter.hpp
new file mode 100644
index 00000000000..9e0faab6c5d
--- /dev/null
+++ b/boost/boost/preprocessor/list/filter.hpp
@@ -0,0 +1,54 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_LIST_FILTER_HPP
+# define BOOST_PREPROCESSOR_LIST_FILTER_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/control/if.hpp>
+# include <boost/preprocessor/list/fold_right.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+# include <boost/preprocessor/tuple/rem.hpp>
+#
+# /* BOOST_PP_LIST_FILTER */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_LIST_FILTER(pred, data, list) BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_LIST_FOLD_RIGHT(BOOST_PP_LIST_FILTER_O, (pred, data, BOOST_PP_NIL), list))
+# else
+# define BOOST_PP_LIST_FILTER(pred, data, list) BOOST_PP_LIST_FILTER_I(pred, data, list)
+# define BOOST_PP_LIST_FILTER_I(pred, data, list) BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_LIST_FOLD_RIGHT(BOOST_PP_LIST_FILTER_O, (pred, data, BOOST_PP_NIL), list))
+# endif
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_LIST_FILTER_O(d, pdr, elem) BOOST_PP_LIST_FILTER_O_D(d, BOOST_PP_TUPLE_ELEM(3, 0, pdr), BOOST_PP_TUPLE_ELEM(3, 1, pdr), BOOST_PP_TUPLE_ELEM(3, 2, pdr), elem)
+# else
+# define BOOST_PP_LIST_FILTER_O(d, pdr, elem) BOOST_PP_LIST_FILTER_O_I(d, BOOST_PP_TUPLE_REM_3 pdr, elem)
+# define BOOST_PP_LIST_FILTER_O_I(d, im, elem) BOOST_PP_LIST_FILTER_O_D(d, im, elem)
+# endif
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_DMC()
+# define BOOST_PP_LIST_FILTER_O_D(d, pred, data, res, elem) (pred, data, BOOST_PP_IF(pred(d, data, elem), (elem, res), res))
+# else
+# define BOOST_PP_LIST_FILTER_O_D(d, pred, data, res, elem) (pred, data, BOOST_PP_IF(pred##(d, data, elem), (elem, res), res))
+# endif
+#
+# /* BOOST_PP_LIST_FILTER_D */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_LIST_FILTER_D(d, pred, data, list) BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_LIST_FOLD_RIGHT_ ## d(BOOST_PP_LIST_FILTER_O, (pred, data, BOOST_PP_NIL), list))
+# else
+# define BOOST_PP_LIST_FILTER_D(d, pred, data, list) BOOST_PP_LIST_FILTER_D_I(d, pred, data, list)
+# define BOOST_PP_LIST_FILTER_D_I(d, pred, data, list) BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_LIST_FOLD_RIGHT_ ## d(BOOST_PP_LIST_FILTER_O, (pred, data, BOOST_PP_NIL), list))
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/list/first_n.hpp b/boost/boost/preprocessor/list/first_n.hpp
new file mode 100644
index 00000000000..5e60c502c8e
--- /dev/null
+++ b/boost/boost/preprocessor/list/first_n.hpp
@@ -0,0 +1,58 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_LIST_FIRST_N_HPP
+# define BOOST_PREPROCESSOR_LIST_FIRST_N_HPP
+#
+# include <boost/preprocessor/arithmetic/dec.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/control/while.hpp>
+# include <boost/preprocessor/list/adt.hpp>
+# include <boost/preprocessor/list/reverse.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+# include <boost/preprocessor/tuple/rem.hpp>
+#
+# /* BOOST_PP_LIST_FIRST_N */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_LIST_FIRST_N(count, list) BOOST_PP_LIST_REVERSE(BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_WHILE(BOOST_PP_LIST_FIRST_N_P, BOOST_PP_LIST_FIRST_N_O, (count, list, BOOST_PP_NIL))))
+# else
+# define BOOST_PP_LIST_FIRST_N(count, list) BOOST_PP_LIST_FIRST_N_I(count, list)
+# define BOOST_PP_LIST_FIRST_N_I(count, list) BOOST_PP_LIST_REVERSE(BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_WHILE(BOOST_PP_LIST_FIRST_N_P, BOOST_PP_LIST_FIRST_N_O, (count, list, BOOST_PP_NIL))))
+# endif
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_LIST_FIRST_N_P(d, data) BOOST_PP_TUPLE_ELEM(3, 0, data)
+# else
+# define BOOST_PP_LIST_FIRST_N_P(d, data) BOOST_PP_LIST_FIRST_N_P_I data
+# define BOOST_PP_LIST_FIRST_N_P_I(c, l, nl) c
+# endif
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+# define BOOST_PP_LIST_FIRST_N_O(d, data) BOOST_PP_LIST_FIRST_N_O_D data
+# else
+# define BOOST_PP_LIST_FIRST_N_O(d, data) BOOST_PP_LIST_FIRST_N_O_D(BOOST_PP_TUPLE_ELEM(3, 0, data), BOOST_PP_TUPLE_ELEM(3, 1, data), BOOST_PP_TUPLE_ELEM(3, 2, data))
+# endif
+#
+# define BOOST_PP_LIST_FIRST_N_O_D(c, l, nl) (BOOST_PP_DEC(c), BOOST_PP_LIST_REST(l), (BOOST_PP_LIST_FIRST(l), nl))
+#
+# /* BOOST_PP_LIST_FIRST_N_D */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_LIST_FIRST_N_D(d, count, list) BOOST_PP_LIST_REVERSE_D(d, BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_WHILE_ ## d(BOOST_PP_LIST_FIRST_N_P, BOOST_PP_LIST_FIRST_N_O, (count, list, BOOST_PP_NIL))))
+# else
+# define BOOST_PP_LIST_FIRST_N_D(d, count, list) BOOST_PP_LIST_FIRST_N_D_I(d, count, list)
+# define BOOST_PP_LIST_FIRST_N_D_I(d, count, list) BOOST_PP_LIST_REVERSE_D(d, BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_WHILE_ ## d(BOOST_PP_LIST_FIRST_N_P, BOOST_PP_LIST_FIRST_N_O, (count, list, BOOST_PP_NIL))))
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/list/fold_left.hpp b/boost/boost/preprocessor/list/fold_left.hpp
new file mode 100644
index 00000000000..f235aec8e79
--- /dev/null
+++ b/boost/boost/preprocessor/list/fold_left.hpp
@@ -0,0 +1,303 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_LIST_FOLD_LEFT_HPP
+# define BOOST_PREPROCESSOR_LIST_FOLD_LEFT_HPP
+#
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/control/while.hpp>
+# include <boost/preprocessor/debug/error.hpp>
+# include <boost/preprocessor/detail/auto_rec.hpp>
+#
+# /* BOOST_PP_LIST_FOLD_LEFT */
+#
+# if 0
+# define BOOST_PP_LIST_FOLD_LEFT(op, state, list)
+# endif
+#
+# define BOOST_PP_LIST_FOLD_LEFT BOOST_PP_CAT(BOOST_PP_LIST_FOLD_LEFT_, BOOST_PP_AUTO_REC(BOOST_PP_WHILE_P, 256))
+#
+# define BOOST_PP_LIST_FOLD_LEFT_257(o, s, l) BOOST_PP_ERROR(0x0004)
+#
+# define BOOST_PP_LIST_FOLD_LEFT_D(d, o, s, l) BOOST_PP_LIST_FOLD_LEFT_ ## d(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_2ND BOOST_PP_LIST_FOLD_LEFT
+# define BOOST_PP_LIST_FOLD_LEFT_2ND_D BOOST_PP_LIST_FOLD_LEFT_D
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# include <boost/preprocessor/list/detail/edg/fold_left.hpp>
+# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_DMC()
+# include <boost/preprocessor/list/detail/dmc/fold_left.hpp>
+# else
+# include <boost/preprocessor/list/detail/fold_left.hpp>
+# endif
+#
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_NIL 1
+#
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_1(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_2(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_3(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_4(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_5(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_6(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_7(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_8(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_9(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_10(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_11(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_12(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_13(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_14(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_15(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_16(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_17(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_18(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_19(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_20(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_21(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_22(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_23(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_24(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_25(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_26(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_27(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_28(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_29(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_30(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_31(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_32(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_33(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_34(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_35(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_36(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_37(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_38(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_39(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_40(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_41(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_42(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_43(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_44(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_45(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_46(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_47(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_48(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_49(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_50(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_51(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_52(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_53(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_54(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_55(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_56(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_57(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_58(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_59(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_60(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_61(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_62(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_63(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_64(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_65(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_66(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_67(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_68(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_69(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_70(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_71(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_72(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_73(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_74(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_75(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_76(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_77(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_78(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_79(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_80(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_81(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_82(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_83(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_84(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_85(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_86(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_87(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_88(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_89(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_90(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_91(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_92(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_93(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_94(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_95(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_96(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_97(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_98(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_99(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_100(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_101(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_102(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_103(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_104(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_105(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_106(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_107(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_108(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_109(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_110(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_111(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_112(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_113(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_114(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_115(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_116(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_117(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_118(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_119(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_120(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_121(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_122(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_123(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_124(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_125(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_126(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_127(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_128(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_129(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_130(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_131(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_132(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_133(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_134(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_135(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_136(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_137(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_138(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_139(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_140(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_141(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_142(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_143(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_144(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_145(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_146(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_147(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_148(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_149(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_150(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_151(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_152(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_153(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_154(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_155(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_156(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_157(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_158(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_159(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_160(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_161(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_162(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_163(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_164(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_165(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_166(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_167(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_168(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_169(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_170(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_171(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_172(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_173(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_174(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_175(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_176(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_177(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_178(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_179(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_180(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_181(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_182(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_183(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_184(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_185(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_186(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_187(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_188(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_189(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_190(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_191(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_192(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_193(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_194(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_195(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_196(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_197(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_198(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_199(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_200(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_201(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_202(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_203(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_204(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_205(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_206(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_207(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_208(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_209(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_210(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_211(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_212(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_213(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_214(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_215(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_216(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_217(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_218(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_219(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_220(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_221(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_222(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_223(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_224(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_225(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_226(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_227(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_228(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_229(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_230(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_231(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_232(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_233(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_234(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_235(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_236(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_237(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_238(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_239(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_240(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_241(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_242(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_243(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_244(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_245(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_246(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_247(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_248(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_249(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_250(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_251(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_252(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_253(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_254(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_255(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_256(o, s, l) 0
+#
+# endif
diff --git a/boost/boost/preprocessor/list/fold_right.hpp b/boost/boost/preprocessor/list/fold_right.hpp
new file mode 100644
index 00000000000..ce18afef280
--- /dev/null
+++ b/boost/boost/preprocessor/list/fold_right.hpp
@@ -0,0 +1,40 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_LIST_FOLD_RIGHT_HPP
+# define BOOST_PREPROCESSOR_LIST_FOLD_RIGHT_HPP
+#
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/control/while.hpp>
+# include <boost/preprocessor/debug/error.hpp>
+# include <boost/preprocessor/detail/auto_rec.hpp>
+#
+# if 0
+# define BOOST_PP_LIST_FOLD_RIGHT(op, state, list)
+# endif
+#
+# define BOOST_PP_LIST_FOLD_RIGHT BOOST_PP_CAT(BOOST_PP_LIST_FOLD_RIGHT_, BOOST_PP_AUTO_REC(BOOST_PP_WHILE_P, 256))
+#
+# define BOOST_PP_LIST_FOLD_RIGHT_257(o, s, l) BOOST_PP_ERROR(0x0004)
+#
+# define BOOST_PP_LIST_FOLD_RIGHT_D(d, o, s, l) BOOST_PP_LIST_FOLD_RIGHT_ ## d(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_2ND BOOST_PP_LIST_FOLD_RIGHT
+# define BOOST_PP_LIST_FOLD_RIGHT_2ND_D BOOST_PP_LIST_FOLD_RIGHT_D
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# include <boost/preprocessor/list/detail/edg/fold_right.hpp>
+# else
+# include <boost/preprocessor/list/detail/fold_right.hpp>
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/list/for_each.hpp b/boost/boost/preprocessor/list/for_each.hpp
new file mode 100644
index 00000000000..dd04eaa5df5
--- /dev/null
+++ b/boost/boost/preprocessor/list/for_each.hpp
@@ -0,0 +1,49 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_LIST_FOR_EACH_HPP
+# define BOOST_PREPROCESSOR_LIST_FOR_EACH_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/list/for_each_i.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+# include <boost/preprocessor/tuple/rem.hpp>
+#
+# /* BOOST_PP_LIST_FOR_EACH */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_LIST_FOR_EACH(macro, data, list) BOOST_PP_LIST_FOR_EACH_I(BOOST_PP_LIST_FOR_EACH_O, (macro, data), list)
+# else
+# define BOOST_PP_LIST_FOR_EACH(macro, data, list) BOOST_PP_LIST_FOR_EACH_X(macro, data, list)
+# define BOOST_PP_LIST_FOR_EACH_X(macro, data, list) BOOST_PP_LIST_FOR_EACH_I(BOOST_PP_LIST_FOR_EACH_O, (macro, data), list)
+# endif
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_LIST_FOR_EACH_O(r, md, i, elem) BOOST_PP_LIST_FOR_EACH_O_D(r, BOOST_PP_TUPLE_ELEM(2, 0, md), BOOST_PP_TUPLE_ELEM(2, 1, md), elem)
+# else
+# define BOOST_PP_LIST_FOR_EACH_O(r, md, i, elem) BOOST_PP_LIST_FOR_EACH_O_I(r, BOOST_PP_TUPLE_REM_2 md, elem)
+# define BOOST_PP_LIST_FOR_EACH_O_I(r, im, elem) BOOST_PP_LIST_FOR_EACH_O_D(r, im, elem)
+# endif
+#
+# define BOOST_PP_LIST_FOR_EACH_O_D(r, m, d, elem) m(r, d, elem)
+#
+# /* BOOST_PP_LIST_FOR_EACH_R */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_LIST_FOR_EACH_R(r, macro, data, list) BOOST_PP_LIST_FOR_EACH_I_R(r, BOOST_PP_LIST_FOR_EACH_O, (macro, data), list)
+# else
+# define BOOST_PP_LIST_FOR_EACH_R(r, macro, data, list) BOOST_PP_LIST_FOR_EACH_R_X(r, macro, data, list)
+# define BOOST_PP_LIST_FOR_EACH_R_X(r, macro, data, list) BOOST_PP_LIST_FOR_EACH_I_R(r, BOOST_PP_LIST_FOR_EACH_O, (macro, data), list)
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/list/for_each_i.hpp b/boost/boost/preprocessor/list/for_each_i.hpp
new file mode 100644
index 00000000000..8f02e2e3179
--- /dev/null
+++ b/boost/boost/preprocessor/list/for_each_i.hpp
@@ -0,0 +1,65 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_LIST_LIST_FOR_EACH_I_HPP
+# define BOOST_PREPROCESSOR_LIST_LIST_FOR_EACH_I_HPP
+#
+# include <boost/preprocessor/arithmetic/inc.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/list/adt.hpp>
+# include <boost/preprocessor/repetition/for.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+# include <boost/preprocessor/tuple/rem.hpp>
+#
+# /* BOOST_PP_LIST_FOR_EACH_I */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG() && ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()
+# define BOOST_PP_LIST_FOR_EACH_I(macro, data, list) BOOST_PP_FOR((macro, data, list, 0), BOOST_PP_LIST_FOR_EACH_I_P, BOOST_PP_LIST_FOR_EACH_I_O, BOOST_PP_LIST_FOR_EACH_I_M)
+# else
+# define BOOST_PP_LIST_FOR_EACH_I(macro, data, list) BOOST_PP_LIST_FOR_EACH_I_I(macro, data, list)
+# define BOOST_PP_LIST_FOR_EACH_I_I(macro, data, list) BOOST_PP_FOR((macro, data, list, 0), BOOST_PP_LIST_FOR_EACH_I_P, BOOST_PP_LIST_FOR_EACH_I_O, BOOST_PP_LIST_FOR_EACH_I_M)
+# endif
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()
+# define BOOST_PP_LIST_FOR_EACH_I_P(r, x) BOOST_PP_LIST_FOR_EACH_I_P_D x
+# define BOOST_PP_LIST_FOR_EACH_I_P_D(m, d, l, i) BOOST_PP_LIST_IS_CONS(l)
+# else
+# define BOOST_PP_LIST_FOR_EACH_I_P(r, x) BOOST_PP_LIST_IS_CONS(BOOST_PP_TUPLE_ELEM(4, 2, x))
+# endif
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+# define BOOST_PP_LIST_FOR_EACH_I_O(r, x) BOOST_PP_LIST_FOR_EACH_I_O_D x
+# define BOOST_PP_LIST_FOR_EACH_I_O_D(m, d, l, i) (m, d, BOOST_PP_LIST_REST(l), BOOST_PP_INC(i))
+# else
+# define BOOST_PP_LIST_FOR_EACH_I_O(r, x) (BOOST_PP_TUPLE_ELEM(4, 0, x), BOOST_PP_TUPLE_ELEM(4, 1, x), BOOST_PP_LIST_REST(BOOST_PP_TUPLE_ELEM(4, 2, x)), BOOST_PP_INC(BOOST_PP_TUPLE_ELEM(4, 3, x)))
+# endif
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_LIST_FOR_EACH_I_M(r, x) BOOST_PP_LIST_FOR_EACH_I_M_D(r, BOOST_PP_TUPLE_ELEM(4, 0, x), BOOST_PP_TUPLE_ELEM(4, 1, x), BOOST_PP_TUPLE_ELEM(4, 2, x), BOOST_PP_TUPLE_ELEM(4, 3, x))
+# else
+# define BOOST_PP_LIST_FOR_EACH_I_M(r, x) BOOST_PP_LIST_FOR_EACH_I_M_I(r, BOOST_PP_TUPLE_REM_4 x)
+# define BOOST_PP_LIST_FOR_EACH_I_M_I(r, x_e) BOOST_PP_LIST_FOR_EACH_I_M_D(r, x_e)
+# endif
+#
+# define BOOST_PP_LIST_FOR_EACH_I_M_D(r, m, d, l, i) m(r, d, i, BOOST_PP_LIST_FIRST(l))
+#
+# /* BOOST_PP_LIST_FOR_EACH_I_R */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_LIST_FOR_EACH_I_R(r, macro, data, list) BOOST_PP_FOR_ ## r((macro, data, list, 0), BOOST_PP_LIST_FOR_EACH_I_P, BOOST_PP_LIST_FOR_EACH_I_O, BOOST_PP_LIST_FOR_EACH_I_M)
+# else
+# define BOOST_PP_LIST_FOR_EACH_I_R(r, macro, data, list) BOOST_PP_LIST_FOR_EACH_I_R_I(r, macro, data, list)
+# define BOOST_PP_LIST_FOR_EACH_I_R_I(r, macro, data, list) BOOST_PP_FOR_ ## r((macro, data, list, 0), BOOST_PP_LIST_FOR_EACH_I_P, BOOST_PP_LIST_FOR_EACH_I_O, BOOST_PP_LIST_FOR_EACH_I_M)
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/list/for_each_product.hpp b/boost/boost/preprocessor/list/for_each_product.hpp
new file mode 100644
index 00000000000..6d5319b06d0
--- /dev/null
+++ b/boost/boost/preprocessor/list/for_each_product.hpp
@@ -0,0 +1,141 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_LIST_FOR_EACH_PRODUCT_HPP
+# define BOOST_PREPROCESSOR_LIST_FOR_EACH_PRODUCT_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/control/if.hpp>
+# include <boost/preprocessor/list/adt.hpp>
+# include <boost/preprocessor/list/to_tuple.hpp>
+# include <boost/preprocessor/repetition/for.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+# include <boost/preprocessor/tuple/to_list.hpp>
+# include <boost/preprocessor/tuple/rem.hpp>
+# include <boost/preprocessor/tuple/reverse.hpp>
+#
+# /* BOOST_PP_LIST_FOR_EACH_PRODUCT */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT(macro, size, tuple) BOOST_PP_LIST_FOR_EACH_PRODUCT_E(BOOST_PP_FOR, macro, size, BOOST_PP_TUPLE_TO_LIST(size, tuple))
+# else
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT(macro, size, tuple) BOOST_PP_LIST_FOR_EACH_PRODUCT_Q(macro, size, tuple)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_Q(macro, size, tuple) BOOST_PP_LIST_FOR_EACH_PRODUCT_E(BOOST_PP_FOR, macro, size, BOOST_PP_TUPLE_TO_LIST(size, tuple))
+# endif
+#
+# /* BOOST_PP_LIST_FOR_EACH_PRODUCT_R */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_R(r, macro, size, tuple) BOOST_PP_LIST_FOR_EACH_PRODUCT_E(BOOST_PP_FOR_ ## r, macro, size, BOOST_PP_TUPLE_TO_LIST(size, tuple))
+# else
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_R(r, macro, size, tuple) BOOST_PP_LIST_FOR_EACH_PRODUCT_R_Q(r, macro, size, tuple)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_R_Q(r, macro, size, tuple) BOOST_PP_LIST_FOR_EACH_PRODUCT_E(BOOST_PP_FOR_ ## r, macro, size, BOOST_PP_TUPLE_TO_LIST(size, tuple))
+# endif
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_E(impl, macro, size, lists) impl((BOOST_PP_LIST_FIRST(lists), BOOST_PP_LIST_REST(lists), BOOST_PP_NIL, macro, size), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_0)
+# else
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_E(impl, macro, size, lists) BOOST_PP_LIST_FOR_EACH_PRODUCT_E_D(impl, macro, size, lists)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_E_D(impl, macro, size, lists) impl((BOOST_PP_LIST_FIRST(lists), BOOST_PP_LIST_REST(lists), BOOST_PP_NIL, macro, size), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_0)
+# endif
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_P(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_P_I data
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_P_I(a, b, res, macro, size) BOOST_PP_LIST_IS_CONS(a)
+# else
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_P(r, data) BOOST_PP_LIST_IS_CONS(BOOST_PP_TUPLE_ELEM(5, 0, data))
+# endif
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_O(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_O_I data
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_O_I(a, b, res, macro, size) (BOOST_PP_LIST_REST(a), b, res, macro, size)
+# else
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_O(r, data) (BOOST_PP_LIST_REST(BOOST_PP_TUPLE_ELEM(5, 0, data)), BOOST_PP_TUPLE_ELEM(5, 1, data), BOOST_PP_TUPLE_ELEM(5, 2, data), BOOST_PP_TUPLE_ELEM(5, 3, data), BOOST_PP_TUPLE_ELEM(5, 4, data))
+# endif
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_I(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_I_I(r, BOOST_PP_TUPLE_ELEM(5, 0, data), BOOST_PP_TUPLE_ELEM(5, 1, data), BOOST_PP_TUPLE_ELEM(5, 2, data), BOOST_PP_TUPLE_ELEM(5, 3, data), BOOST_PP_TUPLE_ELEM(5, 4, data))
+# else
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_I(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_I_D(r, BOOST_PP_TUPLE_REM_5 data)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_I_D(r, data_e) BOOST_PP_LIST_FOR_EACH_PRODUCT_I_I(r, data_e)
+# endif
+#
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_I_I(r, a, b, res, macro, size) BOOST_PP_LIST_FOR_EACH_PRODUCT_I_II(r, macro, BOOST_PP_LIST_TO_TUPLE_R(r, (BOOST_PP_LIST_FIRST(a), res)), size)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_I_II(r, macro, args, size) BOOST_PP_LIST_FOR_EACH_PRODUCT_I_III(r, macro, args, size)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_I_III(r, macro, args, size) macro(r, BOOST_PP_TUPLE_REVERSE(size, args))
+#
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_C(data, i) BOOST_PP_IF(BOOST_PP_LIST_IS_CONS(BOOST_PP_TUPLE_ELEM(5, 1, data)), BOOST_PP_LIST_FOR_EACH_PRODUCT_N_ ## i, BOOST_PP_LIST_FOR_EACH_PRODUCT_I)
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data) BOOST_PP_LIST_FOR_EACH_PRODUCT_H_I data
+# else
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data) BOOST_PP_LIST_FOR_EACH_PRODUCT_H_I(BOOST_PP_TUPLE_ELEM(5, 0, data), BOOST_PP_TUPLE_ELEM(5, 1, data), BOOST_PP_TUPLE_ELEM(5, 2, data), BOOST_PP_TUPLE_ELEM(5, 3, data), BOOST_PP_TUPLE_ELEM(5, 4, data))
+# endif
+#
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_H_I(a, b, res, macro, size) (BOOST_PP_LIST_FIRST(b), BOOST_PP_LIST_REST(b), (BOOST_PP_LIST_FIRST(a), res), macro, size)
+#
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_M_0(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_C(data, 0)(r, data)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_M_1(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_C(data, 1)(r, data)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_M_2(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_C(data, 2)(r, data)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_M_3(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_C(data, 3)(r, data)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_M_4(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_C(data, 4)(r, data)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_M_5(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_C(data, 5)(r, data)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_M_6(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_C(data, 6)(r, data)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_M_7(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_C(data, 7)(r, data)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_M_8(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_C(data, 8)(r, data)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_M_9(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_C(data, 9)(r, data)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_M_10(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_C(data, 10)(r, data)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_M_11(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_C(data, 11)(r, data)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_M_12(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_C(data, 12)(r, data)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_M_13(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_C(data, 13)(r, data)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_M_14(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_C(data, 14)(r, data)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_M_15(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_C(data, 15)(r, data)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_M_16(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_C(data, 16)(r, data)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_M_17(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_C(data, 17)(r, data)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_M_18(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_C(data, 18)(r, data)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_M_19(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_C(data, 19)(r, data)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_M_20(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_C(data, 20)(r, data)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_M_21(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_C(data, 21)(r, data)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_M_22(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_C(data, 22)(r, data)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_M_23(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_C(data, 23)(r, data)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_M_24(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_C(data, 24)(r, data)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_M_25(r, data) BOOST_PP_LIST_FOR_EACH_PRODUCT_C(data, 25)(r, data)
+#
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_N_0(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_1)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_N_1(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_2)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_N_2(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_3)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_N_3(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_4)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_N_4(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_5)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_N_5(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_6)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_N_6(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_7)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_N_7(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_8)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_N_8(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_9)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_N_9(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_10)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_N_10(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_11)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_N_11(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_12)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_N_12(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_13)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_N_13(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_14)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_N_14(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_15)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_N_15(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_16)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_N_16(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_17)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_N_17(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_18)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_N_18(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_19)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_N_19(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_20)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_N_20(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_21)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_N_21(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_22)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_N_22(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_23)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_N_23(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_24)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_N_24(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_25)
+# define BOOST_PP_LIST_FOR_EACH_PRODUCT_N_25(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_LIST_FOR_EACH_PRODUCT_H(data), BOOST_PP_LIST_FOR_EACH_PRODUCT_P, BOOST_PP_LIST_FOR_EACH_PRODUCT_O, BOOST_PP_LIST_FOR_EACH_PRODUCT_M_26)
+#
+# endif
diff --git a/boost/boost/preprocessor/list/rest_n.hpp b/boost/boost/preprocessor/list/rest_n.hpp
new file mode 100644
index 00000000000..b42ee5fe421
--- /dev/null
+++ b/boost/boost/preprocessor/list/rest_n.hpp
@@ -0,0 +1,55 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_LIST_REST_N_HPP
+# define BOOST_PREPROCESSOR_LIST_REST_N_HPP
+#
+# include <boost/preprocessor/arithmetic/dec.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/control/while.hpp>
+# include <boost/preprocessor/list/adt.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+#
+# /* BOOST_PP_LIST_REST_N */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_LIST_REST_N(count, list) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE(BOOST_PP_LIST_REST_N_P, BOOST_PP_LIST_REST_N_O, (list, count)))
+# else
+# define BOOST_PP_LIST_REST_N(count, list) BOOST_PP_LIST_REST_N_I(count, list)
+# define BOOST_PP_LIST_REST_N_I(count, list) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE(BOOST_PP_LIST_REST_N_P, BOOST_PP_LIST_REST_N_O, (list, count)))
+# endif
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_LIST_REST_N_P(d, lc) BOOST_PP_TUPLE_ELEM(2, 1, lc)
+# else
+# define BOOST_PP_LIST_REST_N_P(d, lc) BOOST_PP_LIST_REST_N_P_I lc
+# define BOOST_PP_LIST_REST_N_P_I(list, count) count
+# endif
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_LIST_REST_N_O(d, lc) (BOOST_PP_LIST_REST(BOOST_PP_TUPLE_ELEM(2, 0, lc)), BOOST_PP_DEC(BOOST_PP_TUPLE_ELEM(2, 1, lc)))
+# else
+# define BOOST_PP_LIST_REST_N_O(d, lc) BOOST_PP_LIST_REST_N_O_I lc
+# define BOOST_PP_LIST_REST_N_O_I(list, count) (BOOST_PP_LIST_REST(list), BOOST_PP_DEC(count))
+# endif
+#
+# /* BOOST_PP_LIST_REST_N_D */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_LIST_REST_N_D(d, count, list) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE_ ## d(BOOST_PP_LIST_REST_N_P, BOOST_PP_LIST_REST_N_O, (list, count)))
+# else
+# define BOOST_PP_LIST_REST_N_D(d, count, list) BOOST_PP_LIST_REST_N_D_I(d, count, list)
+# define BOOST_PP_LIST_REST_N_D_I(d, count, list) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE_ ## d(BOOST_PP_LIST_REST_N_P, BOOST_PP_LIST_REST_N_O, (list, count)))
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/list/reverse.hpp b/boost/boost/preprocessor/list/reverse.hpp
new file mode 100644
index 00000000000..651da057110
--- /dev/null
+++ b/boost/boost/preprocessor/list/reverse.hpp
@@ -0,0 +1,40 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_LIST_REVERSE_HPP
+# define BOOST_PREPROCESSOR_LIST_REVERSE_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/list/fold_left.hpp>
+#
+# /* BOOST_PP_LIST_REVERSE */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_LIST_REVERSE(list) BOOST_PP_LIST_FOLD_LEFT(BOOST_PP_LIST_REVERSE_O, BOOST_PP_NIL, list)
+# else
+# define BOOST_PP_LIST_REVERSE(list) BOOST_PP_LIST_REVERSE_I(list)
+# define BOOST_PP_LIST_REVERSE_I(list) BOOST_PP_LIST_FOLD_LEFT(BOOST_PP_LIST_REVERSE_O, BOOST_PP_NIL, list)
+# endif
+#
+# define BOOST_PP_LIST_REVERSE_O(d, s, x) (x, s)
+#
+# /* BOOST_PP_LIST_REVERSE_D */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_LIST_REVERSE_D(d, list) BOOST_PP_LIST_FOLD_LEFT_ ## d(BOOST_PP_LIST_REVERSE_O, BOOST_PP_NIL, list)
+# else
+# define BOOST_PP_LIST_REVERSE_D(d, list) BOOST_PP_LIST_REVERSE_D_I(d, list)
+# define BOOST_PP_LIST_REVERSE_D_I(d, list) BOOST_PP_LIST_FOLD_LEFT_ ## d(BOOST_PP_LIST_REVERSE_O, BOOST_PP_NIL, list)
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/list/size.hpp b/boost/boost/preprocessor/list/size.hpp
new file mode 100644
index 00000000000..0757fba80d3
--- /dev/null
+++ b/boost/boost/preprocessor/list/size.hpp
@@ -0,0 +1,58 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_LIST_SIZE_HPP
+# define BOOST_PREPROCESSOR_LIST_SIZE_HPP
+#
+# include <boost/preprocessor/arithmetic/inc.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/control/while.hpp>
+# include <boost/preprocessor/list/adt.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+# include <boost/preprocessor/tuple/rem.hpp>
+#
+# /* BOOST_PP_LIST_SIZE */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_LIST_SIZE(list) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE(BOOST_PP_LIST_SIZE_P, BOOST_PP_LIST_SIZE_O, (0, list)))
+# else
+# define BOOST_PP_LIST_SIZE(list) BOOST_PP_LIST_SIZE_I(list)
+# define BOOST_PP_LIST_SIZE_I(list) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE(BOOST_PP_LIST_SIZE_P, BOOST_PP_LIST_SIZE_O, (0, list)))
+# endif
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_LIST_SIZE_P(d, rl) BOOST_PP_LIST_IS_CONS(BOOST_PP_TUPLE_ELEM(2, 1, rl))
+# else
+# define BOOST_PP_LIST_SIZE_P(d, rl) BOOST_PP_LIST_SIZE_P_I(BOOST_PP_TUPLE_REM_2 rl)
+# define BOOST_PP_LIST_SIZE_P_I(im) BOOST_PP_LIST_SIZE_P_II(im)
+# define BOOST_PP_LIST_SIZE_P_II(r, l) BOOST_PP_LIST_IS_CONS(l)
+# endif
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_LIST_SIZE_O(d, rl) (BOOST_PP_INC(BOOST_PP_TUPLE_ELEM(2, 0, rl)), BOOST_PP_LIST_REST(BOOST_PP_TUPLE_ELEM(2, 1, rl)))
+# else
+# define BOOST_PP_LIST_SIZE_O(d, rl) BOOST_PP_LIST_SIZE_O_I(BOOST_PP_TUPLE_REM_2 rl)
+# define BOOST_PP_LIST_SIZE_O_I(im) BOOST_PP_LIST_SIZE_O_II(im)
+# define BOOST_PP_LIST_SIZE_O_II(r, l) (BOOST_PP_INC(r), BOOST_PP_LIST_REST(l))
+# endif
+#
+# /* BOOST_PP_LIST_SIZE_D */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_LIST_SIZE_D(d, list) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE_ ## d(BOOST_PP_LIST_SIZE_P, BOOST_PP_LIST_SIZE_O, (0, list)))
+# else
+# define BOOST_PP_LIST_SIZE_D(d, list) BOOST_PP_LIST_SIZE_D_I(d, list)
+# define BOOST_PP_LIST_SIZE_D_I(d, list) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE_ ## d(BOOST_PP_LIST_SIZE_P, BOOST_PP_LIST_SIZE_O, (0, list)))
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/list/to_tuple.hpp b/boost/boost/preprocessor/list/to_tuple.hpp
new file mode 100644
index 00000000000..557de36e179
--- /dev/null
+++ b/boost/boost/preprocessor/list/to_tuple.hpp
@@ -0,0 +1,38 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_LIST_TO_TUPLE_HPP
+# define BOOST_PREPROCESSOR_LIST_TO_TUPLE_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/list/enum.hpp>
+#
+# /* BOOST_PP_LIST_TO_TUPLE */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_LIST_TO_TUPLE(list) (BOOST_PP_LIST_ENUM(list))
+# else
+# define BOOST_PP_LIST_TO_TUPLE(list) BOOST_PP_LIST_TO_TUPLE_I(list)
+# define BOOST_PP_LIST_TO_TUPLE_I(list) (BOOST_PP_LIST_ENUM(list))
+# endif
+#
+# /* BOOST_PP_LIST_TO_TUPLE_R */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_LIST_TO_TUPLE_R(r, list) (BOOST_PP_LIST_ENUM_R(r, list))
+# else
+# define BOOST_PP_LIST_TO_TUPLE_R(r, list) BOOST_PP_LIST_TO_TUPLE_R_I(r, list)
+# define BOOST_PP_LIST_TO_TUPLE_R_I(r, list) (BOOST_PP_LIST_ENUM_R(r, list))
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/list/transform.hpp b/boost/boost/preprocessor/list/transform.hpp
new file mode 100644
index 00000000000..840f3067c76
--- /dev/null
+++ b/boost/boost/preprocessor/list/transform.hpp
@@ -0,0 +1,49 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_LIST_TRANSFORM_HPP
+# define BOOST_PREPROCESSOR_LIST_TRANSFORM_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/list/fold_right.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+# include <boost/preprocessor/tuple/rem.hpp>
+#
+# /* BOOST_PP_LIST_TRANSFORM */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_LIST_TRANSFORM(op, data, list) BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_LIST_FOLD_RIGHT(BOOST_PP_LIST_TRANSFORM_O, (op, data, BOOST_PP_NIL), list))
+# else
+# define BOOST_PP_LIST_TRANSFORM(op, data, list) BOOST_PP_LIST_TRANSFORM_I(op, data, list)
+# define BOOST_PP_LIST_TRANSFORM_I(op, data, list) BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_LIST_FOLD_RIGHT(BOOST_PP_LIST_TRANSFORM_O, (op, data, BOOST_PP_NIL), list))
+# endif
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_LIST_TRANSFORM_O(d, odr, elem) BOOST_PP_LIST_TRANSFORM_O_D(d, BOOST_PP_TUPLE_ELEM(3, 0, odr), BOOST_PP_TUPLE_ELEM(3, 1, odr), BOOST_PP_TUPLE_ELEM(3, 2, odr), elem)
+# else
+# define BOOST_PP_LIST_TRANSFORM_O(d, odr, elem) BOOST_PP_LIST_TRANSFORM_O_I(d, BOOST_PP_TUPLE_REM_3 odr, elem)
+# define BOOST_PP_LIST_TRANSFORM_O_I(d, im, elem) BOOST_PP_LIST_TRANSFORM_O_D(d, im, elem)
+# endif
+#
+# define BOOST_PP_LIST_TRANSFORM_O_D(d, op, data, res, elem) (op, data, (op(d, data, elem), res))
+#
+# /* BOOST_PP_LIST_TRANSFORM_D */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_LIST_TRANSFORM_D(d, op, data, list) BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_LIST_FOLD_RIGHT_ ## d(BOOST_PP_LIST_TRANSFORM_O, (op, data, BOOST_PP_NIL), list))
+# else
+# define BOOST_PP_LIST_TRANSFORM_D(d, op, data, list) BOOST_PP_LIST_TRANSFORM_D_I(d, op, data, list)
+# define BOOST_PP_LIST_TRANSFORM_D_I(d, op, data, list) BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_LIST_FOLD_RIGHT_ ## d(BOOST_PP_LIST_TRANSFORM_O, (op, data, BOOST_PP_NIL), list))
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/logical.hpp b/boost/boost/preprocessor/logical.hpp
new file mode 100644
index 00000000000..040edeb7268
--- /dev/null
+++ b/boost/boost/preprocessor/logical.hpp
@@ -0,0 +1,29 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_LOGICAL_HPP
+# define BOOST_PREPROCESSOR_LOGICAL_HPP
+#
+# include <boost/preprocessor/logical/and.hpp>
+# include <boost/preprocessor/logical/bitand.hpp>
+# include <boost/preprocessor/logical/bitnor.hpp>
+# include <boost/preprocessor/logical/bitor.hpp>
+# include <boost/preprocessor/logical/bitxor.hpp>
+# include <boost/preprocessor/logical/bool.hpp>
+# include <boost/preprocessor/logical/compl.hpp>
+# include <boost/preprocessor/logical/nor.hpp>
+# include <boost/preprocessor/logical/not.hpp>
+# include <boost/preprocessor/logical/or.hpp>
+# include <boost/preprocessor/logical/xor.hpp>
+#
+# endif
diff --git a/boost/boost/preprocessor/logical/and.hpp b/boost/boost/preprocessor/logical/and.hpp
new file mode 100644
index 00000000000..8590365e58c
--- /dev/null
+++ b/boost/boost/preprocessor/logical/and.hpp
@@ -0,0 +1,30 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_LOGICAL_AND_HPP
+# define BOOST_PREPROCESSOR_LOGICAL_AND_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/logical/bool.hpp>
+# include <boost/preprocessor/logical/bitand.hpp>
+#
+# /* BOOST_PP_AND */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_AND(p, q) BOOST_PP_BITAND(BOOST_PP_BOOL(p), BOOST_PP_BOOL(q))
+# else
+# define BOOST_PP_AND(p, q) BOOST_PP_AND_I(p, q)
+# define BOOST_PP_AND_I(p, q) BOOST_PP_BITAND(BOOST_PP_BOOL(p), BOOST_PP_BOOL(q))
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/logical/bitand.hpp b/boost/boost/preprocessor/logical/bitand.hpp
new file mode 100644
index 00000000000..74e9527f20e
--- /dev/null
+++ b/boost/boost/preprocessor/logical/bitand.hpp
@@ -0,0 +1,38 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_LOGICAL_BITAND_HPP
+# define BOOST_PREPROCESSOR_LOGICAL_BITAND_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+#
+# /* BOOST_PP_BITAND */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+# define BOOST_PP_BITAND(x, y) BOOST_PP_BITAND_I(x, y)
+# else
+# define BOOST_PP_BITAND(x, y) BOOST_PP_BITAND_OO((x, y))
+# define BOOST_PP_BITAND_OO(par) BOOST_PP_BITAND_I ## par
+# endif
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()
+# define BOOST_PP_BITAND_I(x, y) BOOST_PP_BITAND_ ## x ## y
+# else
+# define BOOST_PP_BITAND_I(x, y) BOOST_PP_BITAND_ID(BOOST_PP_BITAND_ ## x ## y)
+# define BOOST_PP_BITAND_ID(res) res
+# endif
+#
+# define BOOST_PP_BITAND_00 0
+# define BOOST_PP_BITAND_01 0
+# define BOOST_PP_BITAND_10 0
+# define BOOST_PP_BITAND_11 1
+#
+# endif
diff --git a/boost/boost/preprocessor/logical/bitnor.hpp b/boost/boost/preprocessor/logical/bitnor.hpp
new file mode 100644
index 00000000000..110fba8b3a2
--- /dev/null
+++ b/boost/boost/preprocessor/logical/bitnor.hpp
@@ -0,0 +1,38 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_LOGICAL_BITNOR_HPP
+# define BOOST_PREPROCESSOR_LOGICAL_BITNOR_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+#
+# /* BOOST_PP_BITNOR */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+# define BOOST_PP_BITNOR(x, y) BOOST_PP_BITNOR_I(x, y)
+# else
+# define BOOST_PP_BITNOR(x, y) BOOST_PP_BITNOR_OO((x, y))
+# define BOOST_PP_BITNOR_OO(par) BOOST_PP_BITNOR_I ## par
+# endif
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()
+# define BOOST_PP_BITNOR_I(x, y) BOOST_PP_BITNOR_ ## x ## y
+# else
+# define BOOST_PP_BITNOR_I(x, y) BOOST_PP_BITNOR_ID(BOOST_PP_BITNOR_ ## x ## y)
+# define BOOST_PP_BITNOR_ID(id) id
+# endif
+#
+# define BOOST_PP_BITNOR_00 1
+# define BOOST_PP_BITNOR_01 0
+# define BOOST_PP_BITNOR_10 0
+# define BOOST_PP_BITNOR_11 0
+#
+# endif
diff --git a/boost/boost/preprocessor/logical/bitor.hpp b/boost/boost/preprocessor/logical/bitor.hpp
new file mode 100644
index 00000000000..c0bc2c66ae3
--- /dev/null
+++ b/boost/boost/preprocessor/logical/bitor.hpp
@@ -0,0 +1,38 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_LOGICAL_BITOR_HPP
+# define BOOST_PREPROCESSOR_LOGICAL_BITOR_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+#
+# /* BOOST_PP_BITOR */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+# define BOOST_PP_BITOR(x, y) BOOST_PP_BITOR_I(x, y)
+# else
+# define BOOST_PP_BITOR(x, y) BOOST_PP_BITOR_OO((x, y))
+# define BOOST_PP_BITOR_OO(par) BOOST_PP_BITOR_I ## par
+# endif
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()
+# define BOOST_PP_BITOR_I(x, y) BOOST_PP_BITOR_ ## x ## y
+# else
+# define BOOST_PP_BITOR_I(x, y) BOOST_PP_BITOR_ID(BOOST_PP_BITOR_ ## x ## y)
+# define BOOST_PP_BITOR_ID(id) id
+# endif
+#
+# define BOOST_PP_BITOR_00 0
+# define BOOST_PP_BITOR_01 1
+# define BOOST_PP_BITOR_10 1
+# define BOOST_PP_BITOR_11 1
+#
+# endif
diff --git a/boost/boost/preprocessor/logical/bitxor.hpp b/boost/boost/preprocessor/logical/bitxor.hpp
new file mode 100644
index 00000000000..0488aca9164
--- /dev/null
+++ b/boost/boost/preprocessor/logical/bitxor.hpp
@@ -0,0 +1,38 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_LOGICAL_BITXOR_HPP
+# define BOOST_PREPROCESSOR_LOGICAL_BITXOR_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+#
+# /* BOOST_PP_BITXOR */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+# define BOOST_PP_BITXOR(x, y) BOOST_PP_BITXOR_I(x, y)
+# else
+# define BOOST_PP_BITXOR(x, y) BOOST_PP_BITXOR_OO((x, y))
+# define BOOST_PP_BITXOR_OO(par) BOOST_PP_BITXOR_I ## par
+# endif
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()
+# define BOOST_PP_BITXOR_I(x, y) BOOST_PP_BITXOR_ ## x ## y
+# else
+# define BOOST_PP_BITXOR_I(x, y) BOOST_PP_BITXOR_ID(BOOST_PP_BITXOR_ ## x ## y)
+# define BOOST_PP_BITXOR_ID(id) id
+# endif
+#
+# define BOOST_PP_BITXOR_00 0
+# define BOOST_PP_BITXOR_01 1
+# define BOOST_PP_BITXOR_10 1
+# define BOOST_PP_BITXOR_11 0
+#
+# endif
diff --git a/boost/boost/preprocessor/logical/bool.hpp b/boost/boost/preprocessor/logical/bool.hpp
new file mode 100644
index 00000000000..fc01b5ba50d
--- /dev/null
+++ b/boost/boost/preprocessor/logical/bool.hpp
@@ -0,0 +1,288 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_LOGICAL_BOOL_HPP
+# define BOOST_PREPROCESSOR_LOGICAL_BOOL_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+#
+# /* BOOST_PP_BOOL */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+# define BOOST_PP_BOOL(x) BOOST_PP_BOOL_I(x)
+# else
+# define BOOST_PP_BOOL(x) BOOST_PP_BOOL_OO((x))
+# define BOOST_PP_BOOL_OO(par) BOOST_PP_BOOL_I ## par
+# endif
+#
+# define BOOST_PP_BOOL_I(x) BOOST_PP_BOOL_ ## x
+#
+# define BOOST_PP_BOOL_0 0
+# define BOOST_PP_BOOL_1 1
+# define BOOST_PP_BOOL_2 1
+# define BOOST_PP_BOOL_3 1
+# define BOOST_PP_BOOL_4 1
+# define BOOST_PP_BOOL_5 1
+# define BOOST_PP_BOOL_6 1
+# define BOOST_PP_BOOL_7 1
+# define BOOST_PP_BOOL_8 1
+# define BOOST_PP_BOOL_9 1
+# define BOOST_PP_BOOL_10 1
+# define BOOST_PP_BOOL_11 1
+# define BOOST_PP_BOOL_12 1
+# define BOOST_PP_BOOL_13 1
+# define BOOST_PP_BOOL_14 1
+# define BOOST_PP_BOOL_15 1
+# define BOOST_PP_BOOL_16 1
+# define BOOST_PP_BOOL_17 1
+# define BOOST_PP_BOOL_18 1
+# define BOOST_PP_BOOL_19 1
+# define BOOST_PP_BOOL_20 1
+# define BOOST_PP_BOOL_21 1
+# define BOOST_PP_BOOL_22 1
+# define BOOST_PP_BOOL_23 1
+# define BOOST_PP_BOOL_24 1
+# define BOOST_PP_BOOL_25 1
+# define BOOST_PP_BOOL_26 1
+# define BOOST_PP_BOOL_27 1
+# define BOOST_PP_BOOL_28 1
+# define BOOST_PP_BOOL_29 1
+# define BOOST_PP_BOOL_30 1
+# define BOOST_PP_BOOL_31 1
+# define BOOST_PP_BOOL_32 1
+# define BOOST_PP_BOOL_33 1
+# define BOOST_PP_BOOL_34 1
+# define BOOST_PP_BOOL_35 1
+# define BOOST_PP_BOOL_36 1
+# define BOOST_PP_BOOL_37 1
+# define BOOST_PP_BOOL_38 1
+# define BOOST_PP_BOOL_39 1
+# define BOOST_PP_BOOL_40 1
+# define BOOST_PP_BOOL_41 1
+# define BOOST_PP_BOOL_42 1
+# define BOOST_PP_BOOL_43 1
+# define BOOST_PP_BOOL_44 1
+# define BOOST_PP_BOOL_45 1
+# define BOOST_PP_BOOL_46 1
+# define BOOST_PP_BOOL_47 1
+# define BOOST_PP_BOOL_48 1
+# define BOOST_PP_BOOL_49 1
+# define BOOST_PP_BOOL_50 1
+# define BOOST_PP_BOOL_51 1
+# define BOOST_PP_BOOL_52 1
+# define BOOST_PP_BOOL_53 1
+# define BOOST_PP_BOOL_54 1
+# define BOOST_PP_BOOL_55 1
+# define BOOST_PP_BOOL_56 1
+# define BOOST_PP_BOOL_57 1
+# define BOOST_PP_BOOL_58 1
+# define BOOST_PP_BOOL_59 1
+# define BOOST_PP_BOOL_60 1
+# define BOOST_PP_BOOL_61 1
+# define BOOST_PP_BOOL_62 1
+# define BOOST_PP_BOOL_63 1
+# define BOOST_PP_BOOL_64 1
+# define BOOST_PP_BOOL_65 1
+# define BOOST_PP_BOOL_66 1
+# define BOOST_PP_BOOL_67 1
+# define BOOST_PP_BOOL_68 1
+# define BOOST_PP_BOOL_69 1
+# define BOOST_PP_BOOL_70 1
+# define BOOST_PP_BOOL_71 1
+# define BOOST_PP_BOOL_72 1
+# define BOOST_PP_BOOL_73 1
+# define BOOST_PP_BOOL_74 1
+# define BOOST_PP_BOOL_75 1
+# define BOOST_PP_BOOL_76 1
+# define BOOST_PP_BOOL_77 1
+# define BOOST_PP_BOOL_78 1
+# define BOOST_PP_BOOL_79 1
+# define BOOST_PP_BOOL_80 1
+# define BOOST_PP_BOOL_81 1
+# define BOOST_PP_BOOL_82 1
+# define BOOST_PP_BOOL_83 1
+# define BOOST_PP_BOOL_84 1
+# define BOOST_PP_BOOL_85 1
+# define BOOST_PP_BOOL_86 1
+# define BOOST_PP_BOOL_87 1
+# define BOOST_PP_BOOL_88 1
+# define BOOST_PP_BOOL_89 1
+# define BOOST_PP_BOOL_90 1
+# define BOOST_PP_BOOL_91 1
+# define BOOST_PP_BOOL_92 1
+# define BOOST_PP_BOOL_93 1
+# define BOOST_PP_BOOL_94 1
+# define BOOST_PP_BOOL_95 1
+# define BOOST_PP_BOOL_96 1
+# define BOOST_PP_BOOL_97 1
+# define BOOST_PP_BOOL_98 1
+# define BOOST_PP_BOOL_99 1
+# define BOOST_PP_BOOL_100 1
+# define BOOST_PP_BOOL_101 1
+# define BOOST_PP_BOOL_102 1
+# define BOOST_PP_BOOL_103 1
+# define BOOST_PP_BOOL_104 1
+# define BOOST_PP_BOOL_105 1
+# define BOOST_PP_BOOL_106 1
+# define BOOST_PP_BOOL_107 1
+# define BOOST_PP_BOOL_108 1
+# define BOOST_PP_BOOL_109 1
+# define BOOST_PP_BOOL_110 1
+# define BOOST_PP_BOOL_111 1
+# define BOOST_PP_BOOL_112 1
+# define BOOST_PP_BOOL_113 1
+# define BOOST_PP_BOOL_114 1
+# define BOOST_PP_BOOL_115 1
+# define BOOST_PP_BOOL_116 1
+# define BOOST_PP_BOOL_117 1
+# define BOOST_PP_BOOL_118 1
+# define BOOST_PP_BOOL_119 1
+# define BOOST_PP_BOOL_120 1
+# define BOOST_PP_BOOL_121 1
+# define BOOST_PP_BOOL_122 1
+# define BOOST_PP_BOOL_123 1
+# define BOOST_PP_BOOL_124 1
+# define BOOST_PP_BOOL_125 1
+# define BOOST_PP_BOOL_126 1
+# define BOOST_PP_BOOL_127 1
+# define BOOST_PP_BOOL_128 1
+# define BOOST_PP_BOOL_129 1
+# define BOOST_PP_BOOL_130 1
+# define BOOST_PP_BOOL_131 1
+# define BOOST_PP_BOOL_132 1
+# define BOOST_PP_BOOL_133 1
+# define BOOST_PP_BOOL_134 1
+# define BOOST_PP_BOOL_135 1
+# define BOOST_PP_BOOL_136 1
+# define BOOST_PP_BOOL_137 1
+# define BOOST_PP_BOOL_138 1
+# define BOOST_PP_BOOL_139 1
+# define BOOST_PP_BOOL_140 1
+# define BOOST_PP_BOOL_141 1
+# define BOOST_PP_BOOL_142 1
+# define BOOST_PP_BOOL_143 1
+# define BOOST_PP_BOOL_144 1
+# define BOOST_PP_BOOL_145 1
+# define BOOST_PP_BOOL_146 1
+# define BOOST_PP_BOOL_147 1
+# define BOOST_PP_BOOL_148 1
+# define BOOST_PP_BOOL_149 1
+# define BOOST_PP_BOOL_150 1
+# define BOOST_PP_BOOL_151 1
+# define BOOST_PP_BOOL_152 1
+# define BOOST_PP_BOOL_153 1
+# define BOOST_PP_BOOL_154 1
+# define BOOST_PP_BOOL_155 1
+# define BOOST_PP_BOOL_156 1
+# define BOOST_PP_BOOL_157 1
+# define BOOST_PP_BOOL_158 1
+# define BOOST_PP_BOOL_159 1
+# define BOOST_PP_BOOL_160 1
+# define BOOST_PP_BOOL_161 1
+# define BOOST_PP_BOOL_162 1
+# define BOOST_PP_BOOL_163 1
+# define BOOST_PP_BOOL_164 1
+# define BOOST_PP_BOOL_165 1
+# define BOOST_PP_BOOL_166 1
+# define BOOST_PP_BOOL_167 1
+# define BOOST_PP_BOOL_168 1
+# define BOOST_PP_BOOL_169 1
+# define BOOST_PP_BOOL_170 1
+# define BOOST_PP_BOOL_171 1
+# define BOOST_PP_BOOL_172 1
+# define BOOST_PP_BOOL_173 1
+# define BOOST_PP_BOOL_174 1
+# define BOOST_PP_BOOL_175 1
+# define BOOST_PP_BOOL_176 1
+# define BOOST_PP_BOOL_177 1
+# define BOOST_PP_BOOL_178 1
+# define BOOST_PP_BOOL_179 1
+# define BOOST_PP_BOOL_180 1
+# define BOOST_PP_BOOL_181 1
+# define BOOST_PP_BOOL_182 1
+# define BOOST_PP_BOOL_183 1
+# define BOOST_PP_BOOL_184 1
+# define BOOST_PP_BOOL_185 1
+# define BOOST_PP_BOOL_186 1
+# define BOOST_PP_BOOL_187 1
+# define BOOST_PP_BOOL_188 1
+# define BOOST_PP_BOOL_189 1
+# define BOOST_PP_BOOL_190 1
+# define BOOST_PP_BOOL_191 1
+# define BOOST_PP_BOOL_192 1
+# define BOOST_PP_BOOL_193 1
+# define BOOST_PP_BOOL_194 1
+# define BOOST_PP_BOOL_195 1
+# define BOOST_PP_BOOL_196 1
+# define BOOST_PP_BOOL_197 1
+# define BOOST_PP_BOOL_198 1
+# define BOOST_PP_BOOL_199 1
+# define BOOST_PP_BOOL_200 1
+# define BOOST_PP_BOOL_201 1
+# define BOOST_PP_BOOL_202 1
+# define BOOST_PP_BOOL_203 1
+# define BOOST_PP_BOOL_204 1
+# define BOOST_PP_BOOL_205 1
+# define BOOST_PP_BOOL_206 1
+# define BOOST_PP_BOOL_207 1
+# define BOOST_PP_BOOL_208 1
+# define BOOST_PP_BOOL_209 1
+# define BOOST_PP_BOOL_210 1
+# define BOOST_PP_BOOL_211 1
+# define BOOST_PP_BOOL_212 1
+# define BOOST_PP_BOOL_213 1
+# define BOOST_PP_BOOL_214 1
+# define BOOST_PP_BOOL_215 1
+# define BOOST_PP_BOOL_216 1
+# define BOOST_PP_BOOL_217 1
+# define BOOST_PP_BOOL_218 1
+# define BOOST_PP_BOOL_219 1
+# define BOOST_PP_BOOL_220 1
+# define BOOST_PP_BOOL_221 1
+# define BOOST_PP_BOOL_222 1
+# define BOOST_PP_BOOL_223 1
+# define BOOST_PP_BOOL_224 1
+# define BOOST_PP_BOOL_225 1
+# define BOOST_PP_BOOL_226 1
+# define BOOST_PP_BOOL_227 1
+# define BOOST_PP_BOOL_228 1
+# define BOOST_PP_BOOL_229 1
+# define BOOST_PP_BOOL_230 1
+# define BOOST_PP_BOOL_231 1
+# define BOOST_PP_BOOL_232 1
+# define BOOST_PP_BOOL_233 1
+# define BOOST_PP_BOOL_234 1
+# define BOOST_PP_BOOL_235 1
+# define BOOST_PP_BOOL_236 1
+# define BOOST_PP_BOOL_237 1
+# define BOOST_PP_BOOL_238 1
+# define BOOST_PP_BOOL_239 1
+# define BOOST_PP_BOOL_240 1
+# define BOOST_PP_BOOL_241 1
+# define BOOST_PP_BOOL_242 1
+# define BOOST_PP_BOOL_243 1
+# define BOOST_PP_BOOL_244 1
+# define BOOST_PP_BOOL_245 1
+# define BOOST_PP_BOOL_246 1
+# define BOOST_PP_BOOL_247 1
+# define BOOST_PP_BOOL_248 1
+# define BOOST_PP_BOOL_249 1
+# define BOOST_PP_BOOL_250 1
+# define BOOST_PP_BOOL_251 1
+# define BOOST_PP_BOOL_252 1
+# define BOOST_PP_BOOL_253 1
+# define BOOST_PP_BOOL_254 1
+# define BOOST_PP_BOOL_255 1
+# define BOOST_PP_BOOL_256 1
+#
+# endif
diff --git a/boost/boost/preprocessor/logical/compl.hpp b/boost/boost/preprocessor/logical/compl.hpp
new file mode 100644
index 00000000000..ad4c7a4ca6b
--- /dev/null
+++ b/boost/boost/preprocessor/logical/compl.hpp
@@ -0,0 +1,36 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_LOGICAL_COMPL_HPP
+# define BOOST_PREPROCESSOR_LOGICAL_COMPL_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+#
+# /* BOOST_PP_COMPL */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+# define BOOST_PP_COMPL(x) BOOST_PP_COMPL_I(x)
+# else
+# define BOOST_PP_COMPL(x) BOOST_PP_COMPL_OO((x))
+# define BOOST_PP_COMPL_OO(par) BOOST_PP_COMPL_I ## par
+# endif
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()
+# define BOOST_PP_COMPL_I(x) BOOST_PP_COMPL_ ## x
+# else
+# define BOOST_PP_COMPL_I(x) BOOST_PP_COMPL_ID(BOOST_PP_COMPL_ ## x)
+# define BOOST_PP_COMPL_ID(id) id
+# endif
+#
+# define BOOST_PP_COMPL_0 1
+# define BOOST_PP_COMPL_1 0
+#
+# endif
diff --git a/boost/boost/preprocessor/logical/nor.hpp b/boost/boost/preprocessor/logical/nor.hpp
new file mode 100644
index 00000000000..2c0df4bb077
--- /dev/null
+++ b/boost/boost/preprocessor/logical/nor.hpp
@@ -0,0 +1,30 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_LOGICAL_NOR_HPP
+# define BOOST_PREPROCESSOR_LOGICAL_NOR_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/logical/bool.hpp>
+# include <boost/preprocessor/logical/bitnor.hpp>
+#
+# /* BOOST_PP_NOR */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_NOR(p, q) BOOST_PP_BITNOR(BOOST_PP_BOOL(p), BOOST_PP_BOOL(q))
+# else
+# define BOOST_PP_NOR(p, q) BOOST_PP_NOR_I(p, q)
+# define BOOST_PP_NOR_I(p, q) BOOST_PP_BITNOR(BOOST_PP_BOOL(p), BOOST_PP_BOOL(q))
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/logical/not.hpp b/boost/boost/preprocessor/logical/not.hpp
new file mode 100644
index 00000000000..b509d3fca6c
--- /dev/null
+++ b/boost/boost/preprocessor/logical/not.hpp
@@ -0,0 +1,30 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_LOGICAL_NOT_HPP
+# define BOOST_PREPROCESSOR_LOGICAL_NOT_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/logical/bool.hpp>
+# include <boost/preprocessor/logical/compl.hpp>
+#
+# /* BOOST_PP_NOT */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_NOT(x) BOOST_PP_COMPL(BOOST_PP_BOOL(x))
+# else
+# define BOOST_PP_NOT(x) BOOST_PP_NOT_I(x)
+# define BOOST_PP_NOT_I(x) BOOST_PP_COMPL(BOOST_PP_BOOL(x))
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/logical/or.hpp b/boost/boost/preprocessor/logical/or.hpp
new file mode 100644
index 00000000000..88d52071a00
--- /dev/null
+++ b/boost/boost/preprocessor/logical/or.hpp
@@ -0,0 +1,30 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_LOGICAL_OR_HPP
+# define BOOST_PREPROCESSOR_LOGICAL_OR_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/logical/bool.hpp>
+# include <boost/preprocessor/logical/bitor.hpp>
+#
+# /* BOOST_PP_OR */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_OR(p, q) BOOST_PP_BITOR(BOOST_PP_BOOL(p), BOOST_PP_BOOL(q))
+# else
+# define BOOST_PP_OR(p, q) BOOST_PP_OR_I(p, q)
+# define BOOST_PP_OR_I(p, q) BOOST_PP_BITOR(BOOST_PP_BOOL(p), BOOST_PP_BOOL(q))
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/logical/xor.hpp b/boost/boost/preprocessor/logical/xor.hpp
new file mode 100644
index 00000000000..34c00e0f417
--- /dev/null
+++ b/boost/boost/preprocessor/logical/xor.hpp
@@ -0,0 +1,30 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_LOGICAL_XOR_HPP
+# define BOOST_PREPROCESSOR_LOGICAL_XOR_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/logical/bool.hpp>
+# include <boost/preprocessor/logical/bitxor.hpp>
+#
+# /* BOOST_PP_XOR */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_XOR(p, q) BOOST_PP_BITXOR(BOOST_PP_BOOL(p), BOOST_PP_BOOL(q))
+# else
+# define BOOST_PP_XOR(p, q) BOOST_PP_XOR_I(p, q)
+# define BOOST_PP_XOR_I(p, q) BOOST_PP_BITXOR(BOOST_PP_BOOL(p), BOOST_PP_BOOL(q))
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/max.hpp b/boost/boost/preprocessor/max.hpp
new file mode 100644
index 00000000000..3a46ed924b7
--- /dev/null
+++ b/boost/boost/preprocessor/max.hpp
@@ -0,0 +1,17 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_MAX_HPP
+# define BOOST_PREPROCESSOR_MAX_HPP
+#
+# include <boost/preprocessor/selection/max.hpp>
+#
+# endif
diff --git a/boost/boost/preprocessor/min.hpp b/boost/boost/preprocessor/min.hpp
new file mode 100644
index 00000000000..8d8e9af2cc7
--- /dev/null
+++ b/boost/boost/preprocessor/min.hpp
@@ -0,0 +1,17 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_MIN_HPP
+# define BOOST_PREPROCESSOR_MIN_HPP
+#
+# include <boost/preprocessor/selection/min.hpp>
+#
+# endif
diff --git a/boost/boost/preprocessor/punctuation.hpp b/boost/boost/preprocessor/punctuation.hpp
new file mode 100644
index 00000000000..72da73e8b7e
--- /dev/null
+++ b/boost/boost/preprocessor/punctuation.hpp
@@ -0,0 +1,20 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_PUNCTUATION_HPP
+# define BOOST_PREPROCESSOR_PUNCTUATION_HPP
+#
+# include <boost/preprocessor/punctuation/comma.hpp>
+# include <boost/preprocessor/punctuation/comma_if.hpp>
+# include <boost/preprocessor/punctuation/paren.hpp>
+# include <boost/preprocessor/punctuation/paren_if.hpp>
+#
+# endif
diff --git a/boost/boost/preprocessor/punctuation/comma.hpp b/boost/boost/preprocessor/punctuation/comma.hpp
new file mode 100644
index 00000000000..38c2e0e7e7a
--- /dev/null
+++ b/boost/boost/preprocessor/punctuation/comma.hpp
@@ -0,0 +1,21 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_PUNCTUATION_COMMA_HPP
+# define BOOST_PREPROCESSOR_PUNCTUATION_COMMA_HPP
+#
+# /* BOOST_PP_COMMA */
+#
+# define BOOST_PP_COMMA() ,
+#
+# endif
diff --git a/boost/boost/preprocessor/punctuation/comma_if.hpp b/boost/boost/preprocessor/punctuation/comma_if.hpp
new file mode 100644
index 00000000000..c711f366a43
--- /dev/null
+++ b/boost/boost/preprocessor/punctuation/comma_if.hpp
@@ -0,0 +1,31 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_PUNCTUATION_COMMA_IF_HPP
+# define BOOST_PREPROCESSOR_PUNCTUATION_COMMA_IF_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/control/if.hpp>
+# include <boost/preprocessor/facilities/empty.hpp>
+# include <boost/preprocessor/punctuation/comma.hpp>
+#
+# /* BOOST_PP_COMMA_IF */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_COMMA_IF(cond) BOOST_PP_IF(cond, BOOST_PP_COMMA, BOOST_PP_EMPTY)()
+# else
+# define BOOST_PP_COMMA_IF(cond) BOOST_PP_COMMA_IF_I(cond)
+# define BOOST_PP_COMMA_IF_I(cond) BOOST_PP_IF(cond, BOOST_PP_COMMA, BOOST_PP_EMPTY)()
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/punctuation/paren.hpp b/boost/boost/preprocessor/punctuation/paren.hpp
new file mode 100644
index 00000000000..28c18cb8beb
--- /dev/null
+++ b/boost/boost/preprocessor/punctuation/paren.hpp
@@ -0,0 +1,23 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_PUNCTUATION_PAREN_HPP
+# define BOOST_PREPROCESSOR_PUNCTUATION_PAREN_HPP
+#
+# /* BOOST_PP_LPAREN */
+#
+# define BOOST_PP_LPAREN() (
+#
+# /* BOOST_PP_RPAREN */
+#
+# define BOOST_PP_RPAREN() )
+#
+# endif
diff --git a/boost/boost/preprocessor/punctuation/paren_if.hpp b/boost/boost/preprocessor/punctuation/paren_if.hpp
new file mode 100644
index 00000000000..1239ec18add
--- /dev/null
+++ b/boost/boost/preprocessor/punctuation/paren_if.hpp
@@ -0,0 +1,38 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_PUNCTUATION_PAREN_IF_HPP
+# define BOOST_PREPROCESSOR_PUNCTUATION_PAREN_IF_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/control/if.hpp>
+# include <boost/preprocessor/facilities/empty.hpp>
+# include <boost/preprocessor/punctuation/paren.hpp>
+#
+# /* BOOST_PP_LPAREN_IF */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_LPAREN_IF(cond) BOOST_PP_IF(cond, BOOST_PP_LPAREN, BOOST_PP_EMPTY)()
+# else
+# define BOOST_PP_LPAREN_IF(cond) BOOST_PP_LPAREN_IF_I(cond)
+# define BOOST_PP_LPAREN_IF_I(cond) BOOST_PP_IF(cond, BOOST_PP_LPAREN, BOOST_PP_EMPTY)()
+# endif
+#
+# /* BOOST_PP_RPAREN_IF */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_RPAREN_IF(cond) BOOST_PP_IF(cond, BOOST_PP_RPAREN, BOOST_PP_EMPTY)()
+# else
+# define BOOST_PP_RPAREN_IF(cond) BOOST_PP_RPAREN_IF_I(cond)
+# define BOOST_PP_RPAREN_IF_I(cond) BOOST_PP_IF(cond, BOOST_PP_RPAREN, BOOST_PP_EMPTY)()
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/repeat.hpp b/boost/boost/preprocessor/repeat.hpp
new file mode 100644
index 00000000000..7c47ee8b01e
--- /dev/null
+++ b/boost/boost/preprocessor/repeat.hpp
@@ -0,0 +1,17 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_REPEAT_HPP
+# define BOOST_PREPROCESSOR_REPEAT_HPP
+#
+# include <boost/preprocessor/repetition/repeat.hpp>
+#
+# endif
diff --git a/boost/boost/preprocessor/repeat_2nd.hpp b/boost/boost/preprocessor/repeat_2nd.hpp
new file mode 100644
index 00000000000..030c4324c2c
--- /dev/null
+++ b/boost/boost/preprocessor/repeat_2nd.hpp
@@ -0,0 +1,17 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_REPEAT_2ND_HPP
+# define BOOST_PREPROCESSOR_REPEAT_2ND_HPP
+#
+# include <boost/preprocessor/repetition/repeat.hpp>
+#
+# endif
diff --git a/boost/boost/preprocessor/repeat_3rd.hpp b/boost/boost/preprocessor/repeat_3rd.hpp
new file mode 100644
index 00000000000..9ab36a5aeac
--- /dev/null
+++ b/boost/boost/preprocessor/repeat_3rd.hpp
@@ -0,0 +1,17 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_REPEAT_3RD_HPP
+# define BOOST_PREPROCESSOR_REPEAT_3RD_HPP
+#
+# include <boost/preprocessor/repetition/repeat.hpp>
+#
+# endif
diff --git a/boost/boost/preprocessor/repeat_from_to.hpp b/boost/boost/preprocessor/repeat_from_to.hpp
new file mode 100644
index 00000000000..4ddc3be04b2
--- /dev/null
+++ b/boost/boost/preprocessor/repeat_from_to.hpp
@@ -0,0 +1,17 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_REPEAT_FROM_TO_HPP
+# define BOOST_PREPROCESSOR_REPEAT_FROM_TO_HPP
+#
+# include <boost/preprocessor/repetition/repeat_from_to.hpp>
+#
+# endif
diff --git a/boost/boost/preprocessor/repeat_from_to_2nd.hpp b/boost/boost/preprocessor/repeat_from_to_2nd.hpp
new file mode 100644
index 00000000000..b833fb5c832
--- /dev/null
+++ b/boost/boost/preprocessor/repeat_from_to_2nd.hpp
@@ -0,0 +1,17 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_REPEAT_FROM_TO_2ND_HPP
+# define BOOST_PREPROCESSOR_REPEAT_FROM_TO_2ND_HPP
+#
+# include <boost/preprocessor/repetition/repeat_from_to.hpp>
+#
+# endif
diff --git a/boost/boost/preprocessor/repeat_from_to_3rd.hpp b/boost/boost/preprocessor/repeat_from_to_3rd.hpp
new file mode 100644
index 00000000000..8cd776fb99b
--- /dev/null
+++ b/boost/boost/preprocessor/repeat_from_to_3rd.hpp
@@ -0,0 +1,17 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_REPEAT_FROM_TO_3RD_HPP
+# define BOOST_PREPROCESSOR_REPEAT_FROM_TO_3RD_HPP
+#
+# include <boost/preprocessor/repetition/repeat_from_to.hpp>
+#
+# endif
diff --git a/boost/boost/preprocessor/repetition.hpp b/boost/boost/preprocessor/repetition.hpp
new file mode 100644
index 00000000000..efcd60a27df
--- /dev/null
+++ b/boost/boost/preprocessor/repetition.hpp
@@ -0,0 +1,32 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_REPETITION_HPP
+# define BOOST_PREPROCESSOR_REPETITION_HPP
+#
+# include <boost/preprocessor/repetition/deduce_r.hpp>
+# include <boost/preprocessor/repetition/deduce_z.hpp>
+# include <boost/preprocessor/repetition/enum.hpp>
+# include <boost/preprocessor/repetition/enum_binary_params.hpp>
+# include <boost/preprocessor/repetition/enum_params.hpp>
+# include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
+# include <boost/preprocessor/repetition/enum_params_with_defaults.hpp>
+# include <boost/preprocessor/repetition/enum_shifted.hpp>
+# include <boost/preprocessor/repetition/enum_shifted_binary_params.hpp>
+# include <boost/preprocessor/repetition/enum_shifted_params.hpp>
+# include <boost/preprocessor/repetition/enum_trailing.hpp>
+# include <boost/preprocessor/repetition/enum_trailing_binary_params.hpp>
+# include <boost/preprocessor/repetition/enum_trailing_params.hpp>
+# include <boost/preprocessor/repetition/for.hpp>
+# include <boost/preprocessor/repetition/repeat.hpp>
+# include <boost/preprocessor/repetition/repeat_from_to.hpp>
+#
+# endif
diff --git a/boost/boost/preprocessor/repetition/deduce_r.hpp b/boost/boost/preprocessor/repetition/deduce_r.hpp
new file mode 100644
index 00000000000..e49296aebcc
--- /dev/null
+++ b/boost/boost/preprocessor/repetition/deduce_r.hpp
@@ -0,0 +1,22 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_REPETITION_DEDUCE_R_HPP
+# define BOOST_PREPROCESSOR_REPETITION_DEDUCE_R_HPP
+#
+# include <boost/preprocessor/detail/auto_rec.hpp>
+# include <boost/preprocessor/repetition/for.hpp>
+#
+# /* BOOST_PP_DEDUCE_R */
+#
+# define BOOST_PP_DEDUCE_R() BOOST_PP_AUTO_REC(BOOST_PP_FOR_P, 256)
+#
+# endif
diff --git a/boost/boost/preprocessor/repetition/deduce_z.hpp b/boost/boost/preprocessor/repetition/deduce_z.hpp
new file mode 100644
index 00000000000..14dedc2665c
--- /dev/null
+++ b/boost/boost/preprocessor/repetition/deduce_z.hpp
@@ -0,0 +1,22 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_REPETITION_DEDUCE_Z_HPP
+# define BOOST_PREPROCESSOR_REPETITION_DEDUCE_Z_HPP
+#
+# include <boost/preprocessor/detail/auto_rec.hpp>
+# include <boost/preprocessor/repetition/repeat.hpp>
+#
+# /* BOOST_PP_DEDUCE_Z */
+#
+# define BOOST_PP_DEDUCE_Z() BOOST_PP_AUTO_REC(BOOST_PP_REPEAT_P, 4)
+#
+# endif
diff --git a/boost/boost/preprocessor/repetition/detail/dmc/for.hpp b/boost/boost/preprocessor/repetition/detail/dmc/for.hpp
new file mode 100644
index 00000000000..1d907ff3878
--- /dev/null
+++ b/boost/boost/preprocessor/repetition/detail/dmc/for.hpp
@@ -0,0 +1,536 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_REPETITION_DETAIL_FOR_HPP
+# define BOOST_PREPROCESSOR_REPETITION_DETAIL_FOR_HPP
+#
+# include <boost/preprocessor/control/expr_iif.hpp>
+# include <boost/preprocessor/control/iif.hpp>
+# include <boost/preprocessor/logical/bool.hpp>
+# include <boost/preprocessor/tuple/eat.hpp>
+#
+# define BOOST_PP_FOR_1(s, p, o, m) BOOST_PP_FOR_1_C(BOOST_PP_BOOL(p##(2, s)), s, p, o, m)
+# define BOOST_PP_FOR_2(s, p, o, m) BOOST_PP_FOR_2_C(BOOST_PP_BOOL(p##(3, s)), s, p, o, m)
+# define BOOST_PP_FOR_3(s, p, o, m) BOOST_PP_FOR_3_C(BOOST_PP_BOOL(p##(4, s)), s, p, o, m)
+# define BOOST_PP_FOR_4(s, p, o, m) BOOST_PP_FOR_4_C(BOOST_PP_BOOL(p##(5, s)), s, p, o, m)
+# define BOOST_PP_FOR_5(s, p, o, m) BOOST_PP_FOR_5_C(BOOST_PP_BOOL(p##(6, s)), s, p, o, m)
+# define BOOST_PP_FOR_6(s, p, o, m) BOOST_PP_FOR_6_C(BOOST_PP_BOOL(p##(7, s)), s, p, o, m)
+# define BOOST_PP_FOR_7(s, p, o, m) BOOST_PP_FOR_7_C(BOOST_PP_BOOL(p##(8, s)), s, p, o, m)
+# define BOOST_PP_FOR_8(s, p, o, m) BOOST_PP_FOR_8_C(BOOST_PP_BOOL(p##(9, s)), s, p, o, m)
+# define BOOST_PP_FOR_9(s, p, o, m) BOOST_PP_FOR_9_C(BOOST_PP_BOOL(p##(10, s)), s, p, o, m)
+# define BOOST_PP_FOR_10(s, p, o, m) BOOST_PP_FOR_10_C(BOOST_PP_BOOL(p##(11, s)), s, p, o, m)
+# define BOOST_PP_FOR_11(s, p, o, m) BOOST_PP_FOR_11_C(BOOST_PP_BOOL(p##(12, s)), s, p, o, m)
+# define BOOST_PP_FOR_12(s, p, o, m) BOOST_PP_FOR_12_C(BOOST_PP_BOOL(p##(13, s)), s, p, o, m)
+# define BOOST_PP_FOR_13(s, p, o, m) BOOST_PP_FOR_13_C(BOOST_PP_BOOL(p##(14, s)), s, p, o, m)
+# define BOOST_PP_FOR_14(s, p, o, m) BOOST_PP_FOR_14_C(BOOST_PP_BOOL(p##(15, s)), s, p, o, m)
+# define BOOST_PP_FOR_15(s, p, o, m) BOOST_PP_FOR_15_C(BOOST_PP_BOOL(p##(16, s)), s, p, o, m)
+# define BOOST_PP_FOR_16(s, p, o, m) BOOST_PP_FOR_16_C(BOOST_PP_BOOL(p##(17, s)), s, p, o, m)
+# define BOOST_PP_FOR_17(s, p, o, m) BOOST_PP_FOR_17_C(BOOST_PP_BOOL(p##(18, s)), s, p, o, m)
+# define BOOST_PP_FOR_18(s, p, o, m) BOOST_PP_FOR_18_C(BOOST_PP_BOOL(p##(19, s)), s, p, o, m)
+# define BOOST_PP_FOR_19(s, p, o, m) BOOST_PP_FOR_19_C(BOOST_PP_BOOL(p##(20, s)), s, p, o, m)
+# define BOOST_PP_FOR_20(s, p, o, m) BOOST_PP_FOR_20_C(BOOST_PP_BOOL(p##(21, s)), s, p, o, m)
+# define BOOST_PP_FOR_21(s, p, o, m) BOOST_PP_FOR_21_C(BOOST_PP_BOOL(p##(22, s)), s, p, o, m)
+# define BOOST_PP_FOR_22(s, p, o, m) BOOST_PP_FOR_22_C(BOOST_PP_BOOL(p##(23, s)), s, p, o, m)
+# define BOOST_PP_FOR_23(s, p, o, m) BOOST_PP_FOR_23_C(BOOST_PP_BOOL(p##(24, s)), s, p, o, m)
+# define BOOST_PP_FOR_24(s, p, o, m) BOOST_PP_FOR_24_C(BOOST_PP_BOOL(p##(25, s)), s, p, o, m)
+# define BOOST_PP_FOR_25(s, p, o, m) BOOST_PP_FOR_25_C(BOOST_PP_BOOL(p##(26, s)), s, p, o, m)
+# define BOOST_PP_FOR_26(s, p, o, m) BOOST_PP_FOR_26_C(BOOST_PP_BOOL(p##(27, s)), s, p, o, m)
+# define BOOST_PP_FOR_27(s, p, o, m) BOOST_PP_FOR_27_C(BOOST_PP_BOOL(p##(28, s)), s, p, o, m)
+# define BOOST_PP_FOR_28(s, p, o, m) BOOST_PP_FOR_28_C(BOOST_PP_BOOL(p##(29, s)), s, p, o, m)
+# define BOOST_PP_FOR_29(s, p, o, m) BOOST_PP_FOR_29_C(BOOST_PP_BOOL(p##(30, s)), s, p, o, m)
+# define BOOST_PP_FOR_30(s, p, o, m) BOOST_PP_FOR_30_C(BOOST_PP_BOOL(p##(31, s)), s, p, o, m)
+# define BOOST_PP_FOR_31(s, p, o, m) BOOST_PP_FOR_31_C(BOOST_PP_BOOL(p##(32, s)), s, p, o, m)
+# define BOOST_PP_FOR_32(s, p, o, m) BOOST_PP_FOR_32_C(BOOST_PP_BOOL(p##(33, s)), s, p, o, m)
+# define BOOST_PP_FOR_33(s, p, o, m) BOOST_PP_FOR_33_C(BOOST_PP_BOOL(p##(34, s)), s, p, o, m)
+# define BOOST_PP_FOR_34(s, p, o, m) BOOST_PP_FOR_34_C(BOOST_PP_BOOL(p##(35, s)), s, p, o, m)
+# define BOOST_PP_FOR_35(s, p, o, m) BOOST_PP_FOR_35_C(BOOST_PP_BOOL(p##(36, s)), s, p, o, m)
+# define BOOST_PP_FOR_36(s, p, o, m) BOOST_PP_FOR_36_C(BOOST_PP_BOOL(p##(37, s)), s, p, o, m)
+# define BOOST_PP_FOR_37(s, p, o, m) BOOST_PP_FOR_37_C(BOOST_PP_BOOL(p##(38, s)), s, p, o, m)
+# define BOOST_PP_FOR_38(s, p, o, m) BOOST_PP_FOR_38_C(BOOST_PP_BOOL(p##(39, s)), s, p, o, m)
+# define BOOST_PP_FOR_39(s, p, o, m) BOOST_PP_FOR_39_C(BOOST_PP_BOOL(p##(40, s)), s, p, o, m)
+# define BOOST_PP_FOR_40(s, p, o, m) BOOST_PP_FOR_40_C(BOOST_PP_BOOL(p##(41, s)), s, p, o, m)
+# define BOOST_PP_FOR_41(s, p, o, m) BOOST_PP_FOR_41_C(BOOST_PP_BOOL(p##(42, s)), s, p, o, m)
+# define BOOST_PP_FOR_42(s, p, o, m) BOOST_PP_FOR_42_C(BOOST_PP_BOOL(p##(43, s)), s, p, o, m)
+# define BOOST_PP_FOR_43(s, p, o, m) BOOST_PP_FOR_43_C(BOOST_PP_BOOL(p##(44, s)), s, p, o, m)
+# define BOOST_PP_FOR_44(s, p, o, m) BOOST_PP_FOR_44_C(BOOST_PP_BOOL(p##(45, s)), s, p, o, m)
+# define BOOST_PP_FOR_45(s, p, o, m) BOOST_PP_FOR_45_C(BOOST_PP_BOOL(p##(46, s)), s, p, o, m)
+# define BOOST_PP_FOR_46(s, p, o, m) BOOST_PP_FOR_46_C(BOOST_PP_BOOL(p##(47, s)), s, p, o, m)
+# define BOOST_PP_FOR_47(s, p, o, m) BOOST_PP_FOR_47_C(BOOST_PP_BOOL(p##(48, s)), s, p, o, m)
+# define BOOST_PP_FOR_48(s, p, o, m) BOOST_PP_FOR_48_C(BOOST_PP_BOOL(p##(49, s)), s, p, o, m)
+# define BOOST_PP_FOR_49(s, p, o, m) BOOST_PP_FOR_49_C(BOOST_PP_BOOL(p##(50, s)), s, p, o, m)
+# define BOOST_PP_FOR_50(s, p, o, m) BOOST_PP_FOR_50_C(BOOST_PP_BOOL(p##(51, s)), s, p, o, m)
+# define BOOST_PP_FOR_51(s, p, o, m) BOOST_PP_FOR_51_C(BOOST_PP_BOOL(p##(52, s)), s, p, o, m)
+# define BOOST_PP_FOR_52(s, p, o, m) BOOST_PP_FOR_52_C(BOOST_PP_BOOL(p##(53, s)), s, p, o, m)
+# define BOOST_PP_FOR_53(s, p, o, m) BOOST_PP_FOR_53_C(BOOST_PP_BOOL(p##(54, s)), s, p, o, m)
+# define BOOST_PP_FOR_54(s, p, o, m) BOOST_PP_FOR_54_C(BOOST_PP_BOOL(p##(55, s)), s, p, o, m)
+# define BOOST_PP_FOR_55(s, p, o, m) BOOST_PP_FOR_55_C(BOOST_PP_BOOL(p##(56, s)), s, p, o, m)
+# define BOOST_PP_FOR_56(s, p, o, m) BOOST_PP_FOR_56_C(BOOST_PP_BOOL(p##(57, s)), s, p, o, m)
+# define BOOST_PP_FOR_57(s, p, o, m) BOOST_PP_FOR_57_C(BOOST_PP_BOOL(p##(58, s)), s, p, o, m)
+# define BOOST_PP_FOR_58(s, p, o, m) BOOST_PP_FOR_58_C(BOOST_PP_BOOL(p##(59, s)), s, p, o, m)
+# define BOOST_PP_FOR_59(s, p, o, m) BOOST_PP_FOR_59_C(BOOST_PP_BOOL(p##(60, s)), s, p, o, m)
+# define BOOST_PP_FOR_60(s, p, o, m) BOOST_PP_FOR_60_C(BOOST_PP_BOOL(p##(61, s)), s, p, o, m)
+# define BOOST_PP_FOR_61(s, p, o, m) BOOST_PP_FOR_61_C(BOOST_PP_BOOL(p##(62, s)), s, p, o, m)
+# define BOOST_PP_FOR_62(s, p, o, m) BOOST_PP_FOR_62_C(BOOST_PP_BOOL(p##(63, s)), s, p, o, m)
+# define BOOST_PP_FOR_63(s, p, o, m) BOOST_PP_FOR_63_C(BOOST_PP_BOOL(p##(64, s)), s, p, o, m)
+# define BOOST_PP_FOR_64(s, p, o, m) BOOST_PP_FOR_64_C(BOOST_PP_BOOL(p##(65, s)), s, p, o, m)
+# define BOOST_PP_FOR_65(s, p, o, m) BOOST_PP_FOR_65_C(BOOST_PP_BOOL(p##(66, s)), s, p, o, m)
+# define BOOST_PP_FOR_66(s, p, o, m) BOOST_PP_FOR_66_C(BOOST_PP_BOOL(p##(67, s)), s, p, o, m)
+# define BOOST_PP_FOR_67(s, p, o, m) BOOST_PP_FOR_67_C(BOOST_PP_BOOL(p##(68, s)), s, p, o, m)
+# define BOOST_PP_FOR_68(s, p, o, m) BOOST_PP_FOR_68_C(BOOST_PP_BOOL(p##(69, s)), s, p, o, m)
+# define BOOST_PP_FOR_69(s, p, o, m) BOOST_PP_FOR_69_C(BOOST_PP_BOOL(p##(70, s)), s, p, o, m)
+# define BOOST_PP_FOR_70(s, p, o, m) BOOST_PP_FOR_70_C(BOOST_PP_BOOL(p##(71, s)), s, p, o, m)
+# define BOOST_PP_FOR_71(s, p, o, m) BOOST_PP_FOR_71_C(BOOST_PP_BOOL(p##(72, s)), s, p, o, m)
+# define BOOST_PP_FOR_72(s, p, o, m) BOOST_PP_FOR_72_C(BOOST_PP_BOOL(p##(73, s)), s, p, o, m)
+# define BOOST_PP_FOR_73(s, p, o, m) BOOST_PP_FOR_73_C(BOOST_PP_BOOL(p##(74, s)), s, p, o, m)
+# define BOOST_PP_FOR_74(s, p, o, m) BOOST_PP_FOR_74_C(BOOST_PP_BOOL(p##(75, s)), s, p, o, m)
+# define BOOST_PP_FOR_75(s, p, o, m) BOOST_PP_FOR_75_C(BOOST_PP_BOOL(p##(76, s)), s, p, o, m)
+# define BOOST_PP_FOR_76(s, p, o, m) BOOST_PP_FOR_76_C(BOOST_PP_BOOL(p##(77, s)), s, p, o, m)
+# define BOOST_PP_FOR_77(s, p, o, m) BOOST_PP_FOR_77_C(BOOST_PP_BOOL(p##(78, s)), s, p, o, m)
+# define BOOST_PP_FOR_78(s, p, o, m) BOOST_PP_FOR_78_C(BOOST_PP_BOOL(p##(79, s)), s, p, o, m)
+# define BOOST_PP_FOR_79(s, p, o, m) BOOST_PP_FOR_79_C(BOOST_PP_BOOL(p##(80, s)), s, p, o, m)
+# define BOOST_PP_FOR_80(s, p, o, m) BOOST_PP_FOR_80_C(BOOST_PP_BOOL(p##(81, s)), s, p, o, m)
+# define BOOST_PP_FOR_81(s, p, o, m) BOOST_PP_FOR_81_C(BOOST_PP_BOOL(p##(82, s)), s, p, o, m)
+# define BOOST_PP_FOR_82(s, p, o, m) BOOST_PP_FOR_82_C(BOOST_PP_BOOL(p##(83, s)), s, p, o, m)
+# define BOOST_PP_FOR_83(s, p, o, m) BOOST_PP_FOR_83_C(BOOST_PP_BOOL(p##(84, s)), s, p, o, m)
+# define BOOST_PP_FOR_84(s, p, o, m) BOOST_PP_FOR_84_C(BOOST_PP_BOOL(p##(85, s)), s, p, o, m)
+# define BOOST_PP_FOR_85(s, p, o, m) BOOST_PP_FOR_85_C(BOOST_PP_BOOL(p##(86, s)), s, p, o, m)
+# define BOOST_PP_FOR_86(s, p, o, m) BOOST_PP_FOR_86_C(BOOST_PP_BOOL(p##(87, s)), s, p, o, m)
+# define BOOST_PP_FOR_87(s, p, o, m) BOOST_PP_FOR_87_C(BOOST_PP_BOOL(p##(88, s)), s, p, o, m)
+# define BOOST_PP_FOR_88(s, p, o, m) BOOST_PP_FOR_88_C(BOOST_PP_BOOL(p##(89, s)), s, p, o, m)
+# define BOOST_PP_FOR_89(s, p, o, m) BOOST_PP_FOR_89_C(BOOST_PP_BOOL(p##(90, s)), s, p, o, m)
+# define BOOST_PP_FOR_90(s, p, o, m) BOOST_PP_FOR_90_C(BOOST_PP_BOOL(p##(91, s)), s, p, o, m)
+# define BOOST_PP_FOR_91(s, p, o, m) BOOST_PP_FOR_91_C(BOOST_PP_BOOL(p##(92, s)), s, p, o, m)
+# define BOOST_PP_FOR_92(s, p, o, m) BOOST_PP_FOR_92_C(BOOST_PP_BOOL(p##(93, s)), s, p, o, m)
+# define BOOST_PP_FOR_93(s, p, o, m) BOOST_PP_FOR_93_C(BOOST_PP_BOOL(p##(94, s)), s, p, o, m)
+# define BOOST_PP_FOR_94(s, p, o, m) BOOST_PP_FOR_94_C(BOOST_PP_BOOL(p##(95, s)), s, p, o, m)
+# define BOOST_PP_FOR_95(s, p, o, m) BOOST_PP_FOR_95_C(BOOST_PP_BOOL(p##(96, s)), s, p, o, m)
+# define BOOST_PP_FOR_96(s, p, o, m) BOOST_PP_FOR_96_C(BOOST_PP_BOOL(p##(97, s)), s, p, o, m)
+# define BOOST_PP_FOR_97(s, p, o, m) BOOST_PP_FOR_97_C(BOOST_PP_BOOL(p##(98, s)), s, p, o, m)
+# define BOOST_PP_FOR_98(s, p, o, m) BOOST_PP_FOR_98_C(BOOST_PP_BOOL(p##(99, s)), s, p, o, m)
+# define BOOST_PP_FOR_99(s, p, o, m) BOOST_PP_FOR_99_C(BOOST_PP_BOOL(p##(100, s)), s, p, o, m)
+# define BOOST_PP_FOR_100(s, p, o, m) BOOST_PP_FOR_100_C(BOOST_PP_BOOL(p##(101, s)), s, p, o, m)
+# define BOOST_PP_FOR_101(s, p, o, m) BOOST_PP_FOR_101_C(BOOST_PP_BOOL(p##(102, s)), s, p, o, m)
+# define BOOST_PP_FOR_102(s, p, o, m) BOOST_PP_FOR_102_C(BOOST_PP_BOOL(p##(103, s)), s, p, o, m)
+# define BOOST_PP_FOR_103(s, p, o, m) BOOST_PP_FOR_103_C(BOOST_PP_BOOL(p##(104, s)), s, p, o, m)
+# define BOOST_PP_FOR_104(s, p, o, m) BOOST_PP_FOR_104_C(BOOST_PP_BOOL(p##(105, s)), s, p, o, m)
+# define BOOST_PP_FOR_105(s, p, o, m) BOOST_PP_FOR_105_C(BOOST_PP_BOOL(p##(106, s)), s, p, o, m)
+# define BOOST_PP_FOR_106(s, p, o, m) BOOST_PP_FOR_106_C(BOOST_PP_BOOL(p##(107, s)), s, p, o, m)
+# define BOOST_PP_FOR_107(s, p, o, m) BOOST_PP_FOR_107_C(BOOST_PP_BOOL(p##(108, s)), s, p, o, m)
+# define BOOST_PP_FOR_108(s, p, o, m) BOOST_PP_FOR_108_C(BOOST_PP_BOOL(p##(109, s)), s, p, o, m)
+# define BOOST_PP_FOR_109(s, p, o, m) BOOST_PP_FOR_109_C(BOOST_PP_BOOL(p##(110, s)), s, p, o, m)
+# define BOOST_PP_FOR_110(s, p, o, m) BOOST_PP_FOR_110_C(BOOST_PP_BOOL(p##(111, s)), s, p, o, m)
+# define BOOST_PP_FOR_111(s, p, o, m) BOOST_PP_FOR_111_C(BOOST_PP_BOOL(p##(112, s)), s, p, o, m)
+# define BOOST_PP_FOR_112(s, p, o, m) BOOST_PP_FOR_112_C(BOOST_PP_BOOL(p##(113, s)), s, p, o, m)
+# define BOOST_PP_FOR_113(s, p, o, m) BOOST_PP_FOR_113_C(BOOST_PP_BOOL(p##(114, s)), s, p, o, m)
+# define BOOST_PP_FOR_114(s, p, o, m) BOOST_PP_FOR_114_C(BOOST_PP_BOOL(p##(115, s)), s, p, o, m)
+# define BOOST_PP_FOR_115(s, p, o, m) BOOST_PP_FOR_115_C(BOOST_PP_BOOL(p##(116, s)), s, p, o, m)
+# define BOOST_PP_FOR_116(s, p, o, m) BOOST_PP_FOR_116_C(BOOST_PP_BOOL(p##(117, s)), s, p, o, m)
+# define BOOST_PP_FOR_117(s, p, o, m) BOOST_PP_FOR_117_C(BOOST_PP_BOOL(p##(118, s)), s, p, o, m)
+# define BOOST_PP_FOR_118(s, p, o, m) BOOST_PP_FOR_118_C(BOOST_PP_BOOL(p##(119, s)), s, p, o, m)
+# define BOOST_PP_FOR_119(s, p, o, m) BOOST_PP_FOR_119_C(BOOST_PP_BOOL(p##(120, s)), s, p, o, m)
+# define BOOST_PP_FOR_120(s, p, o, m) BOOST_PP_FOR_120_C(BOOST_PP_BOOL(p##(121, s)), s, p, o, m)
+# define BOOST_PP_FOR_121(s, p, o, m) BOOST_PP_FOR_121_C(BOOST_PP_BOOL(p##(122, s)), s, p, o, m)
+# define BOOST_PP_FOR_122(s, p, o, m) BOOST_PP_FOR_122_C(BOOST_PP_BOOL(p##(123, s)), s, p, o, m)
+# define BOOST_PP_FOR_123(s, p, o, m) BOOST_PP_FOR_123_C(BOOST_PP_BOOL(p##(124, s)), s, p, o, m)
+# define BOOST_PP_FOR_124(s, p, o, m) BOOST_PP_FOR_124_C(BOOST_PP_BOOL(p##(125, s)), s, p, o, m)
+# define BOOST_PP_FOR_125(s, p, o, m) BOOST_PP_FOR_125_C(BOOST_PP_BOOL(p##(126, s)), s, p, o, m)
+# define BOOST_PP_FOR_126(s, p, o, m) BOOST_PP_FOR_126_C(BOOST_PP_BOOL(p##(127, s)), s, p, o, m)
+# define BOOST_PP_FOR_127(s, p, o, m) BOOST_PP_FOR_127_C(BOOST_PP_BOOL(p##(128, s)), s, p, o, m)
+# define BOOST_PP_FOR_128(s, p, o, m) BOOST_PP_FOR_128_C(BOOST_PP_BOOL(p##(129, s)), s, p, o, m)
+# define BOOST_PP_FOR_129(s, p, o, m) BOOST_PP_FOR_129_C(BOOST_PP_BOOL(p##(130, s)), s, p, o, m)
+# define BOOST_PP_FOR_130(s, p, o, m) BOOST_PP_FOR_130_C(BOOST_PP_BOOL(p##(131, s)), s, p, o, m)
+# define BOOST_PP_FOR_131(s, p, o, m) BOOST_PP_FOR_131_C(BOOST_PP_BOOL(p##(132, s)), s, p, o, m)
+# define BOOST_PP_FOR_132(s, p, o, m) BOOST_PP_FOR_132_C(BOOST_PP_BOOL(p##(133, s)), s, p, o, m)
+# define BOOST_PP_FOR_133(s, p, o, m) BOOST_PP_FOR_133_C(BOOST_PP_BOOL(p##(134, s)), s, p, o, m)
+# define BOOST_PP_FOR_134(s, p, o, m) BOOST_PP_FOR_134_C(BOOST_PP_BOOL(p##(135, s)), s, p, o, m)
+# define BOOST_PP_FOR_135(s, p, o, m) BOOST_PP_FOR_135_C(BOOST_PP_BOOL(p##(136, s)), s, p, o, m)
+# define BOOST_PP_FOR_136(s, p, o, m) BOOST_PP_FOR_136_C(BOOST_PP_BOOL(p##(137, s)), s, p, o, m)
+# define BOOST_PP_FOR_137(s, p, o, m) BOOST_PP_FOR_137_C(BOOST_PP_BOOL(p##(138, s)), s, p, o, m)
+# define BOOST_PP_FOR_138(s, p, o, m) BOOST_PP_FOR_138_C(BOOST_PP_BOOL(p##(139, s)), s, p, o, m)
+# define BOOST_PP_FOR_139(s, p, o, m) BOOST_PP_FOR_139_C(BOOST_PP_BOOL(p##(140, s)), s, p, o, m)
+# define BOOST_PP_FOR_140(s, p, o, m) BOOST_PP_FOR_140_C(BOOST_PP_BOOL(p##(141, s)), s, p, o, m)
+# define BOOST_PP_FOR_141(s, p, o, m) BOOST_PP_FOR_141_C(BOOST_PP_BOOL(p##(142, s)), s, p, o, m)
+# define BOOST_PP_FOR_142(s, p, o, m) BOOST_PP_FOR_142_C(BOOST_PP_BOOL(p##(143, s)), s, p, o, m)
+# define BOOST_PP_FOR_143(s, p, o, m) BOOST_PP_FOR_143_C(BOOST_PP_BOOL(p##(144, s)), s, p, o, m)
+# define BOOST_PP_FOR_144(s, p, o, m) BOOST_PP_FOR_144_C(BOOST_PP_BOOL(p##(145, s)), s, p, o, m)
+# define BOOST_PP_FOR_145(s, p, o, m) BOOST_PP_FOR_145_C(BOOST_PP_BOOL(p##(146, s)), s, p, o, m)
+# define BOOST_PP_FOR_146(s, p, o, m) BOOST_PP_FOR_146_C(BOOST_PP_BOOL(p##(147, s)), s, p, o, m)
+# define BOOST_PP_FOR_147(s, p, o, m) BOOST_PP_FOR_147_C(BOOST_PP_BOOL(p##(148, s)), s, p, o, m)
+# define BOOST_PP_FOR_148(s, p, o, m) BOOST_PP_FOR_148_C(BOOST_PP_BOOL(p##(149, s)), s, p, o, m)
+# define BOOST_PP_FOR_149(s, p, o, m) BOOST_PP_FOR_149_C(BOOST_PP_BOOL(p##(150, s)), s, p, o, m)
+# define BOOST_PP_FOR_150(s, p, o, m) BOOST_PP_FOR_150_C(BOOST_PP_BOOL(p##(151, s)), s, p, o, m)
+# define BOOST_PP_FOR_151(s, p, o, m) BOOST_PP_FOR_151_C(BOOST_PP_BOOL(p##(152, s)), s, p, o, m)
+# define BOOST_PP_FOR_152(s, p, o, m) BOOST_PP_FOR_152_C(BOOST_PP_BOOL(p##(153, s)), s, p, o, m)
+# define BOOST_PP_FOR_153(s, p, o, m) BOOST_PP_FOR_153_C(BOOST_PP_BOOL(p##(154, s)), s, p, o, m)
+# define BOOST_PP_FOR_154(s, p, o, m) BOOST_PP_FOR_154_C(BOOST_PP_BOOL(p##(155, s)), s, p, o, m)
+# define BOOST_PP_FOR_155(s, p, o, m) BOOST_PP_FOR_155_C(BOOST_PP_BOOL(p##(156, s)), s, p, o, m)
+# define BOOST_PP_FOR_156(s, p, o, m) BOOST_PP_FOR_156_C(BOOST_PP_BOOL(p##(157, s)), s, p, o, m)
+# define BOOST_PP_FOR_157(s, p, o, m) BOOST_PP_FOR_157_C(BOOST_PP_BOOL(p##(158, s)), s, p, o, m)
+# define BOOST_PP_FOR_158(s, p, o, m) BOOST_PP_FOR_158_C(BOOST_PP_BOOL(p##(159, s)), s, p, o, m)
+# define BOOST_PP_FOR_159(s, p, o, m) BOOST_PP_FOR_159_C(BOOST_PP_BOOL(p##(160, s)), s, p, o, m)
+# define BOOST_PP_FOR_160(s, p, o, m) BOOST_PP_FOR_160_C(BOOST_PP_BOOL(p##(161, s)), s, p, o, m)
+# define BOOST_PP_FOR_161(s, p, o, m) BOOST_PP_FOR_161_C(BOOST_PP_BOOL(p##(162, s)), s, p, o, m)
+# define BOOST_PP_FOR_162(s, p, o, m) BOOST_PP_FOR_162_C(BOOST_PP_BOOL(p##(163, s)), s, p, o, m)
+# define BOOST_PP_FOR_163(s, p, o, m) BOOST_PP_FOR_163_C(BOOST_PP_BOOL(p##(164, s)), s, p, o, m)
+# define BOOST_PP_FOR_164(s, p, o, m) BOOST_PP_FOR_164_C(BOOST_PP_BOOL(p##(165, s)), s, p, o, m)
+# define BOOST_PP_FOR_165(s, p, o, m) BOOST_PP_FOR_165_C(BOOST_PP_BOOL(p##(166, s)), s, p, o, m)
+# define BOOST_PP_FOR_166(s, p, o, m) BOOST_PP_FOR_166_C(BOOST_PP_BOOL(p##(167, s)), s, p, o, m)
+# define BOOST_PP_FOR_167(s, p, o, m) BOOST_PP_FOR_167_C(BOOST_PP_BOOL(p##(168, s)), s, p, o, m)
+# define BOOST_PP_FOR_168(s, p, o, m) BOOST_PP_FOR_168_C(BOOST_PP_BOOL(p##(169, s)), s, p, o, m)
+# define BOOST_PP_FOR_169(s, p, o, m) BOOST_PP_FOR_169_C(BOOST_PP_BOOL(p##(170, s)), s, p, o, m)
+# define BOOST_PP_FOR_170(s, p, o, m) BOOST_PP_FOR_170_C(BOOST_PP_BOOL(p##(171, s)), s, p, o, m)
+# define BOOST_PP_FOR_171(s, p, o, m) BOOST_PP_FOR_171_C(BOOST_PP_BOOL(p##(172, s)), s, p, o, m)
+# define BOOST_PP_FOR_172(s, p, o, m) BOOST_PP_FOR_172_C(BOOST_PP_BOOL(p##(173, s)), s, p, o, m)
+# define BOOST_PP_FOR_173(s, p, o, m) BOOST_PP_FOR_173_C(BOOST_PP_BOOL(p##(174, s)), s, p, o, m)
+# define BOOST_PP_FOR_174(s, p, o, m) BOOST_PP_FOR_174_C(BOOST_PP_BOOL(p##(175, s)), s, p, o, m)
+# define BOOST_PP_FOR_175(s, p, o, m) BOOST_PP_FOR_175_C(BOOST_PP_BOOL(p##(176, s)), s, p, o, m)
+# define BOOST_PP_FOR_176(s, p, o, m) BOOST_PP_FOR_176_C(BOOST_PP_BOOL(p##(177, s)), s, p, o, m)
+# define BOOST_PP_FOR_177(s, p, o, m) BOOST_PP_FOR_177_C(BOOST_PP_BOOL(p##(178, s)), s, p, o, m)
+# define BOOST_PP_FOR_178(s, p, o, m) BOOST_PP_FOR_178_C(BOOST_PP_BOOL(p##(179, s)), s, p, o, m)
+# define BOOST_PP_FOR_179(s, p, o, m) BOOST_PP_FOR_179_C(BOOST_PP_BOOL(p##(180, s)), s, p, o, m)
+# define BOOST_PP_FOR_180(s, p, o, m) BOOST_PP_FOR_180_C(BOOST_PP_BOOL(p##(181, s)), s, p, o, m)
+# define BOOST_PP_FOR_181(s, p, o, m) BOOST_PP_FOR_181_C(BOOST_PP_BOOL(p##(182, s)), s, p, o, m)
+# define BOOST_PP_FOR_182(s, p, o, m) BOOST_PP_FOR_182_C(BOOST_PP_BOOL(p##(183, s)), s, p, o, m)
+# define BOOST_PP_FOR_183(s, p, o, m) BOOST_PP_FOR_183_C(BOOST_PP_BOOL(p##(184, s)), s, p, o, m)
+# define BOOST_PP_FOR_184(s, p, o, m) BOOST_PP_FOR_184_C(BOOST_PP_BOOL(p##(185, s)), s, p, o, m)
+# define BOOST_PP_FOR_185(s, p, o, m) BOOST_PP_FOR_185_C(BOOST_PP_BOOL(p##(186, s)), s, p, o, m)
+# define BOOST_PP_FOR_186(s, p, o, m) BOOST_PP_FOR_186_C(BOOST_PP_BOOL(p##(187, s)), s, p, o, m)
+# define BOOST_PP_FOR_187(s, p, o, m) BOOST_PP_FOR_187_C(BOOST_PP_BOOL(p##(188, s)), s, p, o, m)
+# define BOOST_PP_FOR_188(s, p, o, m) BOOST_PP_FOR_188_C(BOOST_PP_BOOL(p##(189, s)), s, p, o, m)
+# define BOOST_PP_FOR_189(s, p, o, m) BOOST_PP_FOR_189_C(BOOST_PP_BOOL(p##(190, s)), s, p, o, m)
+# define BOOST_PP_FOR_190(s, p, o, m) BOOST_PP_FOR_190_C(BOOST_PP_BOOL(p##(191, s)), s, p, o, m)
+# define BOOST_PP_FOR_191(s, p, o, m) BOOST_PP_FOR_191_C(BOOST_PP_BOOL(p##(192, s)), s, p, o, m)
+# define BOOST_PP_FOR_192(s, p, o, m) BOOST_PP_FOR_192_C(BOOST_PP_BOOL(p##(193, s)), s, p, o, m)
+# define BOOST_PP_FOR_193(s, p, o, m) BOOST_PP_FOR_193_C(BOOST_PP_BOOL(p##(194, s)), s, p, o, m)
+# define BOOST_PP_FOR_194(s, p, o, m) BOOST_PP_FOR_194_C(BOOST_PP_BOOL(p##(195, s)), s, p, o, m)
+# define BOOST_PP_FOR_195(s, p, o, m) BOOST_PP_FOR_195_C(BOOST_PP_BOOL(p##(196, s)), s, p, o, m)
+# define BOOST_PP_FOR_196(s, p, o, m) BOOST_PP_FOR_196_C(BOOST_PP_BOOL(p##(197, s)), s, p, o, m)
+# define BOOST_PP_FOR_197(s, p, o, m) BOOST_PP_FOR_197_C(BOOST_PP_BOOL(p##(198, s)), s, p, o, m)
+# define BOOST_PP_FOR_198(s, p, o, m) BOOST_PP_FOR_198_C(BOOST_PP_BOOL(p##(199, s)), s, p, o, m)
+# define BOOST_PP_FOR_199(s, p, o, m) BOOST_PP_FOR_199_C(BOOST_PP_BOOL(p##(200, s)), s, p, o, m)
+# define BOOST_PP_FOR_200(s, p, o, m) BOOST_PP_FOR_200_C(BOOST_PP_BOOL(p##(201, s)), s, p, o, m)
+# define BOOST_PP_FOR_201(s, p, o, m) BOOST_PP_FOR_201_C(BOOST_PP_BOOL(p##(202, s)), s, p, o, m)
+# define BOOST_PP_FOR_202(s, p, o, m) BOOST_PP_FOR_202_C(BOOST_PP_BOOL(p##(203, s)), s, p, o, m)
+# define BOOST_PP_FOR_203(s, p, o, m) BOOST_PP_FOR_203_C(BOOST_PP_BOOL(p##(204, s)), s, p, o, m)
+# define BOOST_PP_FOR_204(s, p, o, m) BOOST_PP_FOR_204_C(BOOST_PP_BOOL(p##(205, s)), s, p, o, m)
+# define BOOST_PP_FOR_205(s, p, o, m) BOOST_PP_FOR_205_C(BOOST_PP_BOOL(p##(206, s)), s, p, o, m)
+# define BOOST_PP_FOR_206(s, p, o, m) BOOST_PP_FOR_206_C(BOOST_PP_BOOL(p##(207, s)), s, p, o, m)
+# define BOOST_PP_FOR_207(s, p, o, m) BOOST_PP_FOR_207_C(BOOST_PP_BOOL(p##(208, s)), s, p, o, m)
+# define BOOST_PP_FOR_208(s, p, o, m) BOOST_PP_FOR_208_C(BOOST_PP_BOOL(p##(209, s)), s, p, o, m)
+# define BOOST_PP_FOR_209(s, p, o, m) BOOST_PP_FOR_209_C(BOOST_PP_BOOL(p##(210, s)), s, p, o, m)
+# define BOOST_PP_FOR_210(s, p, o, m) BOOST_PP_FOR_210_C(BOOST_PP_BOOL(p##(211, s)), s, p, o, m)
+# define BOOST_PP_FOR_211(s, p, o, m) BOOST_PP_FOR_211_C(BOOST_PP_BOOL(p##(212, s)), s, p, o, m)
+# define BOOST_PP_FOR_212(s, p, o, m) BOOST_PP_FOR_212_C(BOOST_PP_BOOL(p##(213, s)), s, p, o, m)
+# define BOOST_PP_FOR_213(s, p, o, m) BOOST_PP_FOR_213_C(BOOST_PP_BOOL(p##(214, s)), s, p, o, m)
+# define BOOST_PP_FOR_214(s, p, o, m) BOOST_PP_FOR_214_C(BOOST_PP_BOOL(p##(215, s)), s, p, o, m)
+# define BOOST_PP_FOR_215(s, p, o, m) BOOST_PP_FOR_215_C(BOOST_PP_BOOL(p##(216, s)), s, p, o, m)
+# define BOOST_PP_FOR_216(s, p, o, m) BOOST_PP_FOR_216_C(BOOST_PP_BOOL(p##(217, s)), s, p, o, m)
+# define BOOST_PP_FOR_217(s, p, o, m) BOOST_PP_FOR_217_C(BOOST_PP_BOOL(p##(218, s)), s, p, o, m)
+# define BOOST_PP_FOR_218(s, p, o, m) BOOST_PP_FOR_218_C(BOOST_PP_BOOL(p##(219, s)), s, p, o, m)
+# define BOOST_PP_FOR_219(s, p, o, m) BOOST_PP_FOR_219_C(BOOST_PP_BOOL(p##(220, s)), s, p, o, m)
+# define BOOST_PP_FOR_220(s, p, o, m) BOOST_PP_FOR_220_C(BOOST_PP_BOOL(p##(221, s)), s, p, o, m)
+# define BOOST_PP_FOR_221(s, p, o, m) BOOST_PP_FOR_221_C(BOOST_PP_BOOL(p##(222, s)), s, p, o, m)
+# define BOOST_PP_FOR_222(s, p, o, m) BOOST_PP_FOR_222_C(BOOST_PP_BOOL(p##(223, s)), s, p, o, m)
+# define BOOST_PP_FOR_223(s, p, o, m) BOOST_PP_FOR_223_C(BOOST_PP_BOOL(p##(224, s)), s, p, o, m)
+# define BOOST_PP_FOR_224(s, p, o, m) BOOST_PP_FOR_224_C(BOOST_PP_BOOL(p##(225, s)), s, p, o, m)
+# define BOOST_PP_FOR_225(s, p, o, m) BOOST_PP_FOR_225_C(BOOST_PP_BOOL(p##(226, s)), s, p, o, m)
+# define BOOST_PP_FOR_226(s, p, o, m) BOOST_PP_FOR_226_C(BOOST_PP_BOOL(p##(227, s)), s, p, o, m)
+# define BOOST_PP_FOR_227(s, p, o, m) BOOST_PP_FOR_227_C(BOOST_PP_BOOL(p##(228, s)), s, p, o, m)
+# define BOOST_PP_FOR_228(s, p, o, m) BOOST_PP_FOR_228_C(BOOST_PP_BOOL(p##(229, s)), s, p, o, m)
+# define BOOST_PP_FOR_229(s, p, o, m) BOOST_PP_FOR_229_C(BOOST_PP_BOOL(p##(230, s)), s, p, o, m)
+# define BOOST_PP_FOR_230(s, p, o, m) BOOST_PP_FOR_230_C(BOOST_PP_BOOL(p##(231, s)), s, p, o, m)
+# define BOOST_PP_FOR_231(s, p, o, m) BOOST_PP_FOR_231_C(BOOST_PP_BOOL(p##(232, s)), s, p, o, m)
+# define BOOST_PP_FOR_232(s, p, o, m) BOOST_PP_FOR_232_C(BOOST_PP_BOOL(p##(233, s)), s, p, o, m)
+# define BOOST_PP_FOR_233(s, p, o, m) BOOST_PP_FOR_233_C(BOOST_PP_BOOL(p##(234, s)), s, p, o, m)
+# define BOOST_PP_FOR_234(s, p, o, m) BOOST_PP_FOR_234_C(BOOST_PP_BOOL(p##(235, s)), s, p, o, m)
+# define BOOST_PP_FOR_235(s, p, o, m) BOOST_PP_FOR_235_C(BOOST_PP_BOOL(p##(236, s)), s, p, o, m)
+# define BOOST_PP_FOR_236(s, p, o, m) BOOST_PP_FOR_236_C(BOOST_PP_BOOL(p##(237, s)), s, p, o, m)
+# define BOOST_PP_FOR_237(s, p, o, m) BOOST_PP_FOR_237_C(BOOST_PP_BOOL(p##(238, s)), s, p, o, m)
+# define BOOST_PP_FOR_238(s, p, o, m) BOOST_PP_FOR_238_C(BOOST_PP_BOOL(p##(239, s)), s, p, o, m)
+# define BOOST_PP_FOR_239(s, p, o, m) BOOST_PP_FOR_239_C(BOOST_PP_BOOL(p##(240, s)), s, p, o, m)
+# define BOOST_PP_FOR_240(s, p, o, m) BOOST_PP_FOR_240_C(BOOST_PP_BOOL(p##(241, s)), s, p, o, m)
+# define BOOST_PP_FOR_241(s, p, o, m) BOOST_PP_FOR_241_C(BOOST_PP_BOOL(p##(242, s)), s, p, o, m)
+# define BOOST_PP_FOR_242(s, p, o, m) BOOST_PP_FOR_242_C(BOOST_PP_BOOL(p##(243, s)), s, p, o, m)
+# define BOOST_PP_FOR_243(s, p, o, m) BOOST_PP_FOR_243_C(BOOST_PP_BOOL(p##(244, s)), s, p, o, m)
+# define BOOST_PP_FOR_244(s, p, o, m) BOOST_PP_FOR_244_C(BOOST_PP_BOOL(p##(245, s)), s, p, o, m)
+# define BOOST_PP_FOR_245(s, p, o, m) BOOST_PP_FOR_245_C(BOOST_PP_BOOL(p##(246, s)), s, p, o, m)
+# define BOOST_PP_FOR_246(s, p, o, m) BOOST_PP_FOR_246_C(BOOST_PP_BOOL(p##(247, s)), s, p, o, m)
+# define BOOST_PP_FOR_247(s, p, o, m) BOOST_PP_FOR_247_C(BOOST_PP_BOOL(p##(248, s)), s, p, o, m)
+# define BOOST_PP_FOR_248(s, p, o, m) BOOST_PP_FOR_248_C(BOOST_PP_BOOL(p##(249, s)), s, p, o, m)
+# define BOOST_PP_FOR_249(s, p, o, m) BOOST_PP_FOR_249_C(BOOST_PP_BOOL(p##(250, s)), s, p, o, m)
+# define BOOST_PP_FOR_250(s, p, o, m) BOOST_PP_FOR_250_C(BOOST_PP_BOOL(p##(251, s)), s, p, o, m)
+# define BOOST_PP_FOR_251(s, p, o, m) BOOST_PP_FOR_251_C(BOOST_PP_BOOL(p##(252, s)), s, p, o, m)
+# define BOOST_PP_FOR_252(s, p, o, m) BOOST_PP_FOR_252_C(BOOST_PP_BOOL(p##(253, s)), s, p, o, m)
+# define BOOST_PP_FOR_253(s, p, o, m) BOOST_PP_FOR_253_C(BOOST_PP_BOOL(p##(254, s)), s, p, o, m)
+# define BOOST_PP_FOR_254(s, p, o, m) BOOST_PP_FOR_254_C(BOOST_PP_BOOL(p##(255, s)), s, p, o, m)
+# define BOOST_PP_FOR_255(s, p, o, m) BOOST_PP_FOR_255_C(BOOST_PP_BOOL(p##(256, s)), s, p, o, m)
+# define BOOST_PP_FOR_256(s, p, o, m) BOOST_PP_FOR_256_C(BOOST_PP_BOOL(p##(257, s)), s, p, o, m)
+#
+# define BOOST_PP_FOR_1_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(2, s) BOOST_PP_IIF(c, BOOST_PP_FOR_2, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(2, s), p, o, m)
+# define BOOST_PP_FOR_2_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(3, s) BOOST_PP_IIF(c, BOOST_PP_FOR_3, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(3, s), p, o, m)
+# define BOOST_PP_FOR_3_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(4, s) BOOST_PP_IIF(c, BOOST_PP_FOR_4, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(4, s), p, o, m)
+# define BOOST_PP_FOR_4_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(5, s) BOOST_PP_IIF(c, BOOST_PP_FOR_5, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(5, s), p, o, m)
+# define BOOST_PP_FOR_5_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(6, s) BOOST_PP_IIF(c, BOOST_PP_FOR_6, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(6, s), p, o, m)
+# define BOOST_PP_FOR_6_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(7, s) BOOST_PP_IIF(c, BOOST_PP_FOR_7, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(7, s), p, o, m)
+# define BOOST_PP_FOR_7_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(8, s) BOOST_PP_IIF(c, BOOST_PP_FOR_8, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(8, s), p, o, m)
+# define BOOST_PP_FOR_8_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(9, s) BOOST_PP_IIF(c, BOOST_PP_FOR_9, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(9, s), p, o, m)
+# define BOOST_PP_FOR_9_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(10, s) BOOST_PP_IIF(c, BOOST_PP_FOR_10, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(10, s), p, o, m)
+# define BOOST_PP_FOR_10_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(11, s) BOOST_PP_IIF(c, BOOST_PP_FOR_11, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(11, s), p, o, m)
+# define BOOST_PP_FOR_11_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(12, s) BOOST_PP_IIF(c, BOOST_PP_FOR_12, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(12, s), p, o, m)
+# define BOOST_PP_FOR_12_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(13, s) BOOST_PP_IIF(c, BOOST_PP_FOR_13, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(13, s), p, o, m)
+# define BOOST_PP_FOR_13_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(14, s) BOOST_PP_IIF(c, BOOST_PP_FOR_14, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(14, s), p, o, m)
+# define BOOST_PP_FOR_14_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(15, s) BOOST_PP_IIF(c, BOOST_PP_FOR_15, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(15, s), p, o, m)
+# define BOOST_PP_FOR_15_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(16, s) BOOST_PP_IIF(c, BOOST_PP_FOR_16, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(16, s), p, o, m)
+# define BOOST_PP_FOR_16_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(17, s) BOOST_PP_IIF(c, BOOST_PP_FOR_17, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(17, s), p, o, m)
+# define BOOST_PP_FOR_17_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(18, s) BOOST_PP_IIF(c, BOOST_PP_FOR_18, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(18, s), p, o, m)
+# define BOOST_PP_FOR_18_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(19, s) BOOST_PP_IIF(c, BOOST_PP_FOR_19, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(19, s), p, o, m)
+# define BOOST_PP_FOR_19_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(20, s) BOOST_PP_IIF(c, BOOST_PP_FOR_20, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(20, s), p, o, m)
+# define BOOST_PP_FOR_20_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(21, s) BOOST_PP_IIF(c, BOOST_PP_FOR_21, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(21, s), p, o, m)
+# define BOOST_PP_FOR_21_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(22, s) BOOST_PP_IIF(c, BOOST_PP_FOR_22, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(22, s), p, o, m)
+# define BOOST_PP_FOR_22_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(23, s) BOOST_PP_IIF(c, BOOST_PP_FOR_23, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(23, s), p, o, m)
+# define BOOST_PP_FOR_23_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(24, s) BOOST_PP_IIF(c, BOOST_PP_FOR_24, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(24, s), p, o, m)
+# define BOOST_PP_FOR_24_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(25, s) BOOST_PP_IIF(c, BOOST_PP_FOR_25, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(25, s), p, o, m)
+# define BOOST_PP_FOR_25_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(26, s) BOOST_PP_IIF(c, BOOST_PP_FOR_26, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(26, s), p, o, m)
+# define BOOST_PP_FOR_26_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(27, s) BOOST_PP_IIF(c, BOOST_PP_FOR_27, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(27, s), p, o, m)
+# define BOOST_PP_FOR_27_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(28, s) BOOST_PP_IIF(c, BOOST_PP_FOR_28, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(28, s), p, o, m)
+# define BOOST_PP_FOR_28_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(29, s) BOOST_PP_IIF(c, BOOST_PP_FOR_29, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(29, s), p, o, m)
+# define BOOST_PP_FOR_29_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(30, s) BOOST_PP_IIF(c, BOOST_PP_FOR_30, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(30, s), p, o, m)
+# define BOOST_PP_FOR_30_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(31, s) BOOST_PP_IIF(c, BOOST_PP_FOR_31, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(31, s), p, o, m)
+# define BOOST_PP_FOR_31_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(32, s) BOOST_PP_IIF(c, BOOST_PP_FOR_32, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(32, s), p, o, m)
+# define BOOST_PP_FOR_32_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(33, s) BOOST_PP_IIF(c, BOOST_PP_FOR_33, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(33, s), p, o, m)
+# define BOOST_PP_FOR_33_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(34, s) BOOST_PP_IIF(c, BOOST_PP_FOR_34, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(34, s), p, o, m)
+# define BOOST_PP_FOR_34_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(35, s) BOOST_PP_IIF(c, BOOST_PP_FOR_35, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(35, s), p, o, m)
+# define BOOST_PP_FOR_35_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(36, s) BOOST_PP_IIF(c, BOOST_PP_FOR_36, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(36, s), p, o, m)
+# define BOOST_PP_FOR_36_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(37, s) BOOST_PP_IIF(c, BOOST_PP_FOR_37, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(37, s), p, o, m)
+# define BOOST_PP_FOR_37_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(38, s) BOOST_PP_IIF(c, BOOST_PP_FOR_38, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(38, s), p, o, m)
+# define BOOST_PP_FOR_38_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(39, s) BOOST_PP_IIF(c, BOOST_PP_FOR_39, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(39, s), p, o, m)
+# define BOOST_PP_FOR_39_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(40, s) BOOST_PP_IIF(c, BOOST_PP_FOR_40, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(40, s), p, o, m)
+# define BOOST_PP_FOR_40_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(41, s) BOOST_PP_IIF(c, BOOST_PP_FOR_41, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(41, s), p, o, m)
+# define BOOST_PP_FOR_41_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(42, s) BOOST_PP_IIF(c, BOOST_PP_FOR_42, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(42, s), p, o, m)
+# define BOOST_PP_FOR_42_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(43, s) BOOST_PP_IIF(c, BOOST_PP_FOR_43, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(43, s), p, o, m)
+# define BOOST_PP_FOR_43_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(44, s) BOOST_PP_IIF(c, BOOST_PP_FOR_44, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(44, s), p, o, m)
+# define BOOST_PP_FOR_44_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(45, s) BOOST_PP_IIF(c, BOOST_PP_FOR_45, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(45, s), p, o, m)
+# define BOOST_PP_FOR_45_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(46, s) BOOST_PP_IIF(c, BOOST_PP_FOR_46, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(46, s), p, o, m)
+# define BOOST_PP_FOR_46_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(47, s) BOOST_PP_IIF(c, BOOST_PP_FOR_47, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(47, s), p, o, m)
+# define BOOST_PP_FOR_47_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(48, s) BOOST_PP_IIF(c, BOOST_PP_FOR_48, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(48, s), p, o, m)
+# define BOOST_PP_FOR_48_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(49, s) BOOST_PP_IIF(c, BOOST_PP_FOR_49, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(49, s), p, o, m)
+# define BOOST_PP_FOR_49_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(50, s) BOOST_PP_IIF(c, BOOST_PP_FOR_50, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(50, s), p, o, m)
+# define BOOST_PP_FOR_50_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(51, s) BOOST_PP_IIF(c, BOOST_PP_FOR_51, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(51, s), p, o, m)
+# define BOOST_PP_FOR_51_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(52, s) BOOST_PP_IIF(c, BOOST_PP_FOR_52, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(52, s), p, o, m)
+# define BOOST_PP_FOR_52_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(53, s) BOOST_PP_IIF(c, BOOST_PP_FOR_53, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(53, s), p, o, m)
+# define BOOST_PP_FOR_53_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(54, s) BOOST_PP_IIF(c, BOOST_PP_FOR_54, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(54, s), p, o, m)
+# define BOOST_PP_FOR_54_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(55, s) BOOST_PP_IIF(c, BOOST_PP_FOR_55, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(55, s), p, o, m)
+# define BOOST_PP_FOR_55_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(56, s) BOOST_PP_IIF(c, BOOST_PP_FOR_56, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(56, s), p, o, m)
+# define BOOST_PP_FOR_56_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(57, s) BOOST_PP_IIF(c, BOOST_PP_FOR_57, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(57, s), p, o, m)
+# define BOOST_PP_FOR_57_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(58, s) BOOST_PP_IIF(c, BOOST_PP_FOR_58, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(58, s), p, o, m)
+# define BOOST_PP_FOR_58_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(59, s) BOOST_PP_IIF(c, BOOST_PP_FOR_59, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(59, s), p, o, m)
+# define BOOST_PP_FOR_59_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(60, s) BOOST_PP_IIF(c, BOOST_PP_FOR_60, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(60, s), p, o, m)
+# define BOOST_PP_FOR_60_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(61, s) BOOST_PP_IIF(c, BOOST_PP_FOR_61, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(61, s), p, o, m)
+# define BOOST_PP_FOR_61_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(62, s) BOOST_PP_IIF(c, BOOST_PP_FOR_62, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(62, s), p, o, m)
+# define BOOST_PP_FOR_62_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(63, s) BOOST_PP_IIF(c, BOOST_PP_FOR_63, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(63, s), p, o, m)
+# define BOOST_PP_FOR_63_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(64, s) BOOST_PP_IIF(c, BOOST_PP_FOR_64, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(64, s), p, o, m)
+# define BOOST_PP_FOR_64_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(65, s) BOOST_PP_IIF(c, BOOST_PP_FOR_65, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(65, s), p, o, m)
+# define BOOST_PP_FOR_65_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(66, s) BOOST_PP_IIF(c, BOOST_PP_FOR_66, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(66, s), p, o, m)
+# define BOOST_PP_FOR_66_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(67, s) BOOST_PP_IIF(c, BOOST_PP_FOR_67, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(67, s), p, o, m)
+# define BOOST_PP_FOR_67_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(68, s) BOOST_PP_IIF(c, BOOST_PP_FOR_68, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(68, s), p, o, m)
+# define BOOST_PP_FOR_68_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(69, s) BOOST_PP_IIF(c, BOOST_PP_FOR_69, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(69, s), p, o, m)
+# define BOOST_PP_FOR_69_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(70, s) BOOST_PP_IIF(c, BOOST_PP_FOR_70, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(70, s), p, o, m)
+# define BOOST_PP_FOR_70_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(71, s) BOOST_PP_IIF(c, BOOST_PP_FOR_71, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(71, s), p, o, m)
+# define BOOST_PP_FOR_71_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(72, s) BOOST_PP_IIF(c, BOOST_PP_FOR_72, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(72, s), p, o, m)
+# define BOOST_PP_FOR_72_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(73, s) BOOST_PP_IIF(c, BOOST_PP_FOR_73, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(73, s), p, o, m)
+# define BOOST_PP_FOR_73_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(74, s) BOOST_PP_IIF(c, BOOST_PP_FOR_74, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(74, s), p, o, m)
+# define BOOST_PP_FOR_74_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(75, s) BOOST_PP_IIF(c, BOOST_PP_FOR_75, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(75, s), p, o, m)
+# define BOOST_PP_FOR_75_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(76, s) BOOST_PP_IIF(c, BOOST_PP_FOR_76, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(76, s), p, o, m)
+# define BOOST_PP_FOR_76_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(77, s) BOOST_PP_IIF(c, BOOST_PP_FOR_77, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(77, s), p, o, m)
+# define BOOST_PP_FOR_77_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(78, s) BOOST_PP_IIF(c, BOOST_PP_FOR_78, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(78, s), p, o, m)
+# define BOOST_PP_FOR_78_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(79, s) BOOST_PP_IIF(c, BOOST_PP_FOR_79, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(79, s), p, o, m)
+# define BOOST_PP_FOR_79_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(80, s) BOOST_PP_IIF(c, BOOST_PP_FOR_80, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(80, s), p, o, m)
+# define BOOST_PP_FOR_80_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(81, s) BOOST_PP_IIF(c, BOOST_PP_FOR_81, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(81, s), p, o, m)
+# define BOOST_PP_FOR_81_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(82, s) BOOST_PP_IIF(c, BOOST_PP_FOR_82, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(82, s), p, o, m)
+# define BOOST_PP_FOR_82_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(83, s) BOOST_PP_IIF(c, BOOST_PP_FOR_83, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(83, s), p, o, m)
+# define BOOST_PP_FOR_83_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(84, s) BOOST_PP_IIF(c, BOOST_PP_FOR_84, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(84, s), p, o, m)
+# define BOOST_PP_FOR_84_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(85, s) BOOST_PP_IIF(c, BOOST_PP_FOR_85, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(85, s), p, o, m)
+# define BOOST_PP_FOR_85_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(86, s) BOOST_PP_IIF(c, BOOST_PP_FOR_86, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(86, s), p, o, m)
+# define BOOST_PP_FOR_86_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(87, s) BOOST_PP_IIF(c, BOOST_PP_FOR_87, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(87, s), p, o, m)
+# define BOOST_PP_FOR_87_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(88, s) BOOST_PP_IIF(c, BOOST_PP_FOR_88, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(88, s), p, o, m)
+# define BOOST_PP_FOR_88_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(89, s) BOOST_PP_IIF(c, BOOST_PP_FOR_89, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(89, s), p, o, m)
+# define BOOST_PP_FOR_89_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(90, s) BOOST_PP_IIF(c, BOOST_PP_FOR_90, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(90, s), p, o, m)
+# define BOOST_PP_FOR_90_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(91, s) BOOST_PP_IIF(c, BOOST_PP_FOR_91, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(91, s), p, o, m)
+# define BOOST_PP_FOR_91_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(92, s) BOOST_PP_IIF(c, BOOST_PP_FOR_92, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(92, s), p, o, m)
+# define BOOST_PP_FOR_92_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(93, s) BOOST_PP_IIF(c, BOOST_PP_FOR_93, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(93, s), p, o, m)
+# define BOOST_PP_FOR_93_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(94, s) BOOST_PP_IIF(c, BOOST_PP_FOR_94, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(94, s), p, o, m)
+# define BOOST_PP_FOR_94_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(95, s) BOOST_PP_IIF(c, BOOST_PP_FOR_95, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(95, s), p, o, m)
+# define BOOST_PP_FOR_95_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(96, s) BOOST_PP_IIF(c, BOOST_PP_FOR_96, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(96, s), p, o, m)
+# define BOOST_PP_FOR_96_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(97, s) BOOST_PP_IIF(c, BOOST_PP_FOR_97, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(97, s), p, o, m)
+# define BOOST_PP_FOR_97_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(98, s) BOOST_PP_IIF(c, BOOST_PP_FOR_98, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(98, s), p, o, m)
+# define BOOST_PP_FOR_98_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(99, s) BOOST_PP_IIF(c, BOOST_PP_FOR_99, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(99, s), p, o, m)
+# define BOOST_PP_FOR_99_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(100, s) BOOST_PP_IIF(c, BOOST_PP_FOR_100, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(100, s), p, o, m)
+# define BOOST_PP_FOR_100_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(101, s) BOOST_PP_IIF(c, BOOST_PP_FOR_101, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(101, s), p, o, m)
+# define BOOST_PP_FOR_101_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(102, s) BOOST_PP_IIF(c, BOOST_PP_FOR_102, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(102, s), p, o, m)
+# define BOOST_PP_FOR_102_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(103, s) BOOST_PP_IIF(c, BOOST_PP_FOR_103, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(103, s), p, o, m)
+# define BOOST_PP_FOR_103_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(104, s) BOOST_PP_IIF(c, BOOST_PP_FOR_104, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(104, s), p, o, m)
+# define BOOST_PP_FOR_104_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(105, s) BOOST_PP_IIF(c, BOOST_PP_FOR_105, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(105, s), p, o, m)
+# define BOOST_PP_FOR_105_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(106, s) BOOST_PP_IIF(c, BOOST_PP_FOR_106, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(106, s), p, o, m)
+# define BOOST_PP_FOR_106_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(107, s) BOOST_PP_IIF(c, BOOST_PP_FOR_107, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(107, s), p, o, m)
+# define BOOST_PP_FOR_107_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(108, s) BOOST_PP_IIF(c, BOOST_PP_FOR_108, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(108, s), p, o, m)
+# define BOOST_PP_FOR_108_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(109, s) BOOST_PP_IIF(c, BOOST_PP_FOR_109, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(109, s), p, o, m)
+# define BOOST_PP_FOR_109_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(110, s) BOOST_PP_IIF(c, BOOST_PP_FOR_110, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(110, s), p, o, m)
+# define BOOST_PP_FOR_110_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(111, s) BOOST_PP_IIF(c, BOOST_PP_FOR_111, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(111, s), p, o, m)
+# define BOOST_PP_FOR_111_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(112, s) BOOST_PP_IIF(c, BOOST_PP_FOR_112, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(112, s), p, o, m)
+# define BOOST_PP_FOR_112_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(113, s) BOOST_PP_IIF(c, BOOST_PP_FOR_113, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(113, s), p, o, m)
+# define BOOST_PP_FOR_113_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(114, s) BOOST_PP_IIF(c, BOOST_PP_FOR_114, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(114, s), p, o, m)
+# define BOOST_PP_FOR_114_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(115, s) BOOST_PP_IIF(c, BOOST_PP_FOR_115, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(115, s), p, o, m)
+# define BOOST_PP_FOR_115_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(116, s) BOOST_PP_IIF(c, BOOST_PP_FOR_116, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(116, s), p, o, m)
+# define BOOST_PP_FOR_116_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(117, s) BOOST_PP_IIF(c, BOOST_PP_FOR_117, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(117, s), p, o, m)
+# define BOOST_PP_FOR_117_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(118, s) BOOST_PP_IIF(c, BOOST_PP_FOR_118, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(118, s), p, o, m)
+# define BOOST_PP_FOR_118_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(119, s) BOOST_PP_IIF(c, BOOST_PP_FOR_119, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(119, s), p, o, m)
+# define BOOST_PP_FOR_119_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(120, s) BOOST_PP_IIF(c, BOOST_PP_FOR_120, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(120, s), p, o, m)
+# define BOOST_PP_FOR_120_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(121, s) BOOST_PP_IIF(c, BOOST_PP_FOR_121, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(121, s), p, o, m)
+# define BOOST_PP_FOR_121_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(122, s) BOOST_PP_IIF(c, BOOST_PP_FOR_122, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(122, s), p, o, m)
+# define BOOST_PP_FOR_122_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(123, s) BOOST_PP_IIF(c, BOOST_PP_FOR_123, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(123, s), p, o, m)
+# define BOOST_PP_FOR_123_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(124, s) BOOST_PP_IIF(c, BOOST_PP_FOR_124, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(124, s), p, o, m)
+# define BOOST_PP_FOR_124_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(125, s) BOOST_PP_IIF(c, BOOST_PP_FOR_125, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(125, s), p, o, m)
+# define BOOST_PP_FOR_125_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(126, s) BOOST_PP_IIF(c, BOOST_PP_FOR_126, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(126, s), p, o, m)
+# define BOOST_PP_FOR_126_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(127, s) BOOST_PP_IIF(c, BOOST_PP_FOR_127, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(127, s), p, o, m)
+# define BOOST_PP_FOR_127_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(128, s) BOOST_PP_IIF(c, BOOST_PP_FOR_128, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(128, s), p, o, m)
+# define BOOST_PP_FOR_128_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(129, s) BOOST_PP_IIF(c, BOOST_PP_FOR_129, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(129, s), p, o, m)
+# define BOOST_PP_FOR_129_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(130, s) BOOST_PP_IIF(c, BOOST_PP_FOR_130, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(130, s), p, o, m)
+# define BOOST_PP_FOR_130_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(131, s) BOOST_PP_IIF(c, BOOST_PP_FOR_131, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(131, s), p, o, m)
+# define BOOST_PP_FOR_131_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(132, s) BOOST_PP_IIF(c, BOOST_PP_FOR_132, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(132, s), p, o, m)
+# define BOOST_PP_FOR_132_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(133, s) BOOST_PP_IIF(c, BOOST_PP_FOR_133, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(133, s), p, o, m)
+# define BOOST_PP_FOR_133_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(134, s) BOOST_PP_IIF(c, BOOST_PP_FOR_134, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(134, s), p, o, m)
+# define BOOST_PP_FOR_134_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(135, s) BOOST_PP_IIF(c, BOOST_PP_FOR_135, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(135, s), p, o, m)
+# define BOOST_PP_FOR_135_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(136, s) BOOST_PP_IIF(c, BOOST_PP_FOR_136, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(136, s), p, o, m)
+# define BOOST_PP_FOR_136_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(137, s) BOOST_PP_IIF(c, BOOST_PP_FOR_137, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(137, s), p, o, m)
+# define BOOST_PP_FOR_137_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(138, s) BOOST_PP_IIF(c, BOOST_PP_FOR_138, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(138, s), p, o, m)
+# define BOOST_PP_FOR_138_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(139, s) BOOST_PP_IIF(c, BOOST_PP_FOR_139, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(139, s), p, o, m)
+# define BOOST_PP_FOR_139_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(140, s) BOOST_PP_IIF(c, BOOST_PP_FOR_140, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(140, s), p, o, m)
+# define BOOST_PP_FOR_140_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(141, s) BOOST_PP_IIF(c, BOOST_PP_FOR_141, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(141, s), p, o, m)
+# define BOOST_PP_FOR_141_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(142, s) BOOST_PP_IIF(c, BOOST_PP_FOR_142, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(142, s), p, o, m)
+# define BOOST_PP_FOR_142_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(143, s) BOOST_PP_IIF(c, BOOST_PP_FOR_143, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(143, s), p, o, m)
+# define BOOST_PP_FOR_143_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(144, s) BOOST_PP_IIF(c, BOOST_PP_FOR_144, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(144, s), p, o, m)
+# define BOOST_PP_FOR_144_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(145, s) BOOST_PP_IIF(c, BOOST_PP_FOR_145, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(145, s), p, o, m)
+# define BOOST_PP_FOR_145_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(146, s) BOOST_PP_IIF(c, BOOST_PP_FOR_146, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(146, s), p, o, m)
+# define BOOST_PP_FOR_146_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(147, s) BOOST_PP_IIF(c, BOOST_PP_FOR_147, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(147, s), p, o, m)
+# define BOOST_PP_FOR_147_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(148, s) BOOST_PP_IIF(c, BOOST_PP_FOR_148, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(148, s), p, o, m)
+# define BOOST_PP_FOR_148_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(149, s) BOOST_PP_IIF(c, BOOST_PP_FOR_149, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(149, s), p, o, m)
+# define BOOST_PP_FOR_149_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(150, s) BOOST_PP_IIF(c, BOOST_PP_FOR_150, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(150, s), p, o, m)
+# define BOOST_PP_FOR_150_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(151, s) BOOST_PP_IIF(c, BOOST_PP_FOR_151, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(151, s), p, o, m)
+# define BOOST_PP_FOR_151_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(152, s) BOOST_PP_IIF(c, BOOST_PP_FOR_152, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(152, s), p, o, m)
+# define BOOST_PP_FOR_152_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(153, s) BOOST_PP_IIF(c, BOOST_PP_FOR_153, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(153, s), p, o, m)
+# define BOOST_PP_FOR_153_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(154, s) BOOST_PP_IIF(c, BOOST_PP_FOR_154, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(154, s), p, o, m)
+# define BOOST_PP_FOR_154_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(155, s) BOOST_PP_IIF(c, BOOST_PP_FOR_155, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(155, s), p, o, m)
+# define BOOST_PP_FOR_155_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(156, s) BOOST_PP_IIF(c, BOOST_PP_FOR_156, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(156, s), p, o, m)
+# define BOOST_PP_FOR_156_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(157, s) BOOST_PP_IIF(c, BOOST_PP_FOR_157, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(157, s), p, o, m)
+# define BOOST_PP_FOR_157_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(158, s) BOOST_PP_IIF(c, BOOST_PP_FOR_158, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(158, s), p, o, m)
+# define BOOST_PP_FOR_158_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(159, s) BOOST_PP_IIF(c, BOOST_PP_FOR_159, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(159, s), p, o, m)
+# define BOOST_PP_FOR_159_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(160, s) BOOST_PP_IIF(c, BOOST_PP_FOR_160, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(160, s), p, o, m)
+# define BOOST_PP_FOR_160_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(161, s) BOOST_PP_IIF(c, BOOST_PP_FOR_161, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(161, s), p, o, m)
+# define BOOST_PP_FOR_161_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(162, s) BOOST_PP_IIF(c, BOOST_PP_FOR_162, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(162, s), p, o, m)
+# define BOOST_PP_FOR_162_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(163, s) BOOST_PP_IIF(c, BOOST_PP_FOR_163, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(163, s), p, o, m)
+# define BOOST_PP_FOR_163_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(164, s) BOOST_PP_IIF(c, BOOST_PP_FOR_164, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(164, s), p, o, m)
+# define BOOST_PP_FOR_164_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(165, s) BOOST_PP_IIF(c, BOOST_PP_FOR_165, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(165, s), p, o, m)
+# define BOOST_PP_FOR_165_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(166, s) BOOST_PP_IIF(c, BOOST_PP_FOR_166, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(166, s), p, o, m)
+# define BOOST_PP_FOR_166_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(167, s) BOOST_PP_IIF(c, BOOST_PP_FOR_167, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(167, s), p, o, m)
+# define BOOST_PP_FOR_167_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(168, s) BOOST_PP_IIF(c, BOOST_PP_FOR_168, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(168, s), p, o, m)
+# define BOOST_PP_FOR_168_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(169, s) BOOST_PP_IIF(c, BOOST_PP_FOR_169, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(169, s), p, o, m)
+# define BOOST_PP_FOR_169_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(170, s) BOOST_PP_IIF(c, BOOST_PP_FOR_170, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(170, s), p, o, m)
+# define BOOST_PP_FOR_170_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(171, s) BOOST_PP_IIF(c, BOOST_PP_FOR_171, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(171, s), p, o, m)
+# define BOOST_PP_FOR_171_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(172, s) BOOST_PP_IIF(c, BOOST_PP_FOR_172, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(172, s), p, o, m)
+# define BOOST_PP_FOR_172_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(173, s) BOOST_PP_IIF(c, BOOST_PP_FOR_173, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(173, s), p, o, m)
+# define BOOST_PP_FOR_173_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(174, s) BOOST_PP_IIF(c, BOOST_PP_FOR_174, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(174, s), p, o, m)
+# define BOOST_PP_FOR_174_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(175, s) BOOST_PP_IIF(c, BOOST_PP_FOR_175, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(175, s), p, o, m)
+# define BOOST_PP_FOR_175_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(176, s) BOOST_PP_IIF(c, BOOST_PP_FOR_176, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(176, s), p, o, m)
+# define BOOST_PP_FOR_176_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(177, s) BOOST_PP_IIF(c, BOOST_PP_FOR_177, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(177, s), p, o, m)
+# define BOOST_PP_FOR_177_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(178, s) BOOST_PP_IIF(c, BOOST_PP_FOR_178, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(178, s), p, o, m)
+# define BOOST_PP_FOR_178_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(179, s) BOOST_PP_IIF(c, BOOST_PP_FOR_179, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(179, s), p, o, m)
+# define BOOST_PP_FOR_179_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(180, s) BOOST_PP_IIF(c, BOOST_PP_FOR_180, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(180, s), p, o, m)
+# define BOOST_PP_FOR_180_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(181, s) BOOST_PP_IIF(c, BOOST_PP_FOR_181, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(181, s), p, o, m)
+# define BOOST_PP_FOR_181_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(182, s) BOOST_PP_IIF(c, BOOST_PP_FOR_182, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(182, s), p, o, m)
+# define BOOST_PP_FOR_182_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(183, s) BOOST_PP_IIF(c, BOOST_PP_FOR_183, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(183, s), p, o, m)
+# define BOOST_PP_FOR_183_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(184, s) BOOST_PP_IIF(c, BOOST_PP_FOR_184, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(184, s), p, o, m)
+# define BOOST_PP_FOR_184_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(185, s) BOOST_PP_IIF(c, BOOST_PP_FOR_185, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(185, s), p, o, m)
+# define BOOST_PP_FOR_185_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(186, s) BOOST_PP_IIF(c, BOOST_PP_FOR_186, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(186, s), p, o, m)
+# define BOOST_PP_FOR_186_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(187, s) BOOST_PP_IIF(c, BOOST_PP_FOR_187, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(187, s), p, o, m)
+# define BOOST_PP_FOR_187_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(188, s) BOOST_PP_IIF(c, BOOST_PP_FOR_188, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(188, s), p, o, m)
+# define BOOST_PP_FOR_188_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(189, s) BOOST_PP_IIF(c, BOOST_PP_FOR_189, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(189, s), p, o, m)
+# define BOOST_PP_FOR_189_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(190, s) BOOST_PP_IIF(c, BOOST_PP_FOR_190, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(190, s), p, o, m)
+# define BOOST_PP_FOR_190_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(191, s) BOOST_PP_IIF(c, BOOST_PP_FOR_191, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(191, s), p, o, m)
+# define BOOST_PP_FOR_191_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(192, s) BOOST_PP_IIF(c, BOOST_PP_FOR_192, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(192, s), p, o, m)
+# define BOOST_PP_FOR_192_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(193, s) BOOST_PP_IIF(c, BOOST_PP_FOR_193, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(193, s), p, o, m)
+# define BOOST_PP_FOR_193_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(194, s) BOOST_PP_IIF(c, BOOST_PP_FOR_194, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(194, s), p, o, m)
+# define BOOST_PP_FOR_194_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(195, s) BOOST_PP_IIF(c, BOOST_PP_FOR_195, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(195, s), p, o, m)
+# define BOOST_PP_FOR_195_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(196, s) BOOST_PP_IIF(c, BOOST_PP_FOR_196, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(196, s), p, o, m)
+# define BOOST_PP_FOR_196_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(197, s) BOOST_PP_IIF(c, BOOST_PP_FOR_197, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(197, s), p, o, m)
+# define BOOST_PP_FOR_197_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(198, s) BOOST_PP_IIF(c, BOOST_PP_FOR_198, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(198, s), p, o, m)
+# define BOOST_PP_FOR_198_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(199, s) BOOST_PP_IIF(c, BOOST_PP_FOR_199, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(199, s), p, o, m)
+# define BOOST_PP_FOR_199_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(200, s) BOOST_PP_IIF(c, BOOST_PP_FOR_200, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(200, s), p, o, m)
+# define BOOST_PP_FOR_200_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(201, s) BOOST_PP_IIF(c, BOOST_PP_FOR_201, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(201, s), p, o, m)
+# define BOOST_PP_FOR_201_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(202, s) BOOST_PP_IIF(c, BOOST_PP_FOR_202, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(202, s), p, o, m)
+# define BOOST_PP_FOR_202_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(203, s) BOOST_PP_IIF(c, BOOST_PP_FOR_203, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(203, s), p, o, m)
+# define BOOST_PP_FOR_203_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(204, s) BOOST_PP_IIF(c, BOOST_PP_FOR_204, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(204, s), p, o, m)
+# define BOOST_PP_FOR_204_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(205, s) BOOST_PP_IIF(c, BOOST_PP_FOR_205, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(205, s), p, o, m)
+# define BOOST_PP_FOR_205_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(206, s) BOOST_PP_IIF(c, BOOST_PP_FOR_206, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(206, s), p, o, m)
+# define BOOST_PP_FOR_206_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(207, s) BOOST_PP_IIF(c, BOOST_PP_FOR_207, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(207, s), p, o, m)
+# define BOOST_PP_FOR_207_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(208, s) BOOST_PP_IIF(c, BOOST_PP_FOR_208, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(208, s), p, o, m)
+# define BOOST_PP_FOR_208_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(209, s) BOOST_PP_IIF(c, BOOST_PP_FOR_209, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(209, s), p, o, m)
+# define BOOST_PP_FOR_209_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(210, s) BOOST_PP_IIF(c, BOOST_PP_FOR_210, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(210, s), p, o, m)
+# define BOOST_PP_FOR_210_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(211, s) BOOST_PP_IIF(c, BOOST_PP_FOR_211, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(211, s), p, o, m)
+# define BOOST_PP_FOR_211_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(212, s) BOOST_PP_IIF(c, BOOST_PP_FOR_212, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(212, s), p, o, m)
+# define BOOST_PP_FOR_212_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(213, s) BOOST_PP_IIF(c, BOOST_PP_FOR_213, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(213, s), p, o, m)
+# define BOOST_PP_FOR_213_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(214, s) BOOST_PP_IIF(c, BOOST_PP_FOR_214, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(214, s), p, o, m)
+# define BOOST_PP_FOR_214_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(215, s) BOOST_PP_IIF(c, BOOST_PP_FOR_215, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(215, s), p, o, m)
+# define BOOST_PP_FOR_215_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(216, s) BOOST_PP_IIF(c, BOOST_PP_FOR_216, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(216, s), p, o, m)
+# define BOOST_PP_FOR_216_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(217, s) BOOST_PP_IIF(c, BOOST_PP_FOR_217, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(217, s), p, o, m)
+# define BOOST_PP_FOR_217_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(218, s) BOOST_PP_IIF(c, BOOST_PP_FOR_218, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(218, s), p, o, m)
+# define BOOST_PP_FOR_218_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(219, s) BOOST_PP_IIF(c, BOOST_PP_FOR_219, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(219, s), p, o, m)
+# define BOOST_PP_FOR_219_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(220, s) BOOST_PP_IIF(c, BOOST_PP_FOR_220, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(220, s), p, o, m)
+# define BOOST_PP_FOR_220_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(221, s) BOOST_PP_IIF(c, BOOST_PP_FOR_221, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(221, s), p, o, m)
+# define BOOST_PP_FOR_221_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(222, s) BOOST_PP_IIF(c, BOOST_PP_FOR_222, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(222, s), p, o, m)
+# define BOOST_PP_FOR_222_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(223, s) BOOST_PP_IIF(c, BOOST_PP_FOR_223, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(223, s), p, o, m)
+# define BOOST_PP_FOR_223_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(224, s) BOOST_PP_IIF(c, BOOST_PP_FOR_224, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(224, s), p, o, m)
+# define BOOST_PP_FOR_224_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(225, s) BOOST_PP_IIF(c, BOOST_PP_FOR_225, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(225, s), p, o, m)
+# define BOOST_PP_FOR_225_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(226, s) BOOST_PP_IIF(c, BOOST_PP_FOR_226, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(226, s), p, o, m)
+# define BOOST_PP_FOR_226_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(227, s) BOOST_PP_IIF(c, BOOST_PP_FOR_227, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(227, s), p, o, m)
+# define BOOST_PP_FOR_227_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(228, s) BOOST_PP_IIF(c, BOOST_PP_FOR_228, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(228, s), p, o, m)
+# define BOOST_PP_FOR_228_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(229, s) BOOST_PP_IIF(c, BOOST_PP_FOR_229, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(229, s), p, o, m)
+# define BOOST_PP_FOR_229_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(230, s) BOOST_PP_IIF(c, BOOST_PP_FOR_230, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(230, s), p, o, m)
+# define BOOST_PP_FOR_230_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(231, s) BOOST_PP_IIF(c, BOOST_PP_FOR_231, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(231, s), p, o, m)
+# define BOOST_PP_FOR_231_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(232, s) BOOST_PP_IIF(c, BOOST_PP_FOR_232, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(232, s), p, o, m)
+# define BOOST_PP_FOR_232_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(233, s) BOOST_PP_IIF(c, BOOST_PP_FOR_233, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(233, s), p, o, m)
+# define BOOST_PP_FOR_233_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(234, s) BOOST_PP_IIF(c, BOOST_PP_FOR_234, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(234, s), p, o, m)
+# define BOOST_PP_FOR_234_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(235, s) BOOST_PP_IIF(c, BOOST_PP_FOR_235, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(235, s), p, o, m)
+# define BOOST_PP_FOR_235_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(236, s) BOOST_PP_IIF(c, BOOST_PP_FOR_236, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(236, s), p, o, m)
+# define BOOST_PP_FOR_236_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(237, s) BOOST_PP_IIF(c, BOOST_PP_FOR_237, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(237, s), p, o, m)
+# define BOOST_PP_FOR_237_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(238, s) BOOST_PP_IIF(c, BOOST_PP_FOR_238, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(238, s), p, o, m)
+# define BOOST_PP_FOR_238_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(239, s) BOOST_PP_IIF(c, BOOST_PP_FOR_239, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(239, s), p, o, m)
+# define BOOST_PP_FOR_239_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(240, s) BOOST_PP_IIF(c, BOOST_PP_FOR_240, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(240, s), p, o, m)
+# define BOOST_PP_FOR_240_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(241, s) BOOST_PP_IIF(c, BOOST_PP_FOR_241, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(241, s), p, o, m)
+# define BOOST_PP_FOR_241_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(242, s) BOOST_PP_IIF(c, BOOST_PP_FOR_242, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(242, s), p, o, m)
+# define BOOST_PP_FOR_242_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(243, s) BOOST_PP_IIF(c, BOOST_PP_FOR_243, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(243, s), p, o, m)
+# define BOOST_PP_FOR_243_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(244, s) BOOST_PP_IIF(c, BOOST_PP_FOR_244, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(244, s), p, o, m)
+# define BOOST_PP_FOR_244_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(245, s) BOOST_PP_IIF(c, BOOST_PP_FOR_245, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(245, s), p, o, m)
+# define BOOST_PP_FOR_245_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(246, s) BOOST_PP_IIF(c, BOOST_PP_FOR_246, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(246, s), p, o, m)
+# define BOOST_PP_FOR_246_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(247, s) BOOST_PP_IIF(c, BOOST_PP_FOR_247, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(247, s), p, o, m)
+# define BOOST_PP_FOR_247_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(248, s) BOOST_PP_IIF(c, BOOST_PP_FOR_248, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(248, s), p, o, m)
+# define BOOST_PP_FOR_248_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(249, s) BOOST_PP_IIF(c, BOOST_PP_FOR_249, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(249, s), p, o, m)
+# define BOOST_PP_FOR_249_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(250, s) BOOST_PP_IIF(c, BOOST_PP_FOR_250, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(250, s), p, o, m)
+# define BOOST_PP_FOR_250_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(251, s) BOOST_PP_IIF(c, BOOST_PP_FOR_251, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(251, s), p, o, m)
+# define BOOST_PP_FOR_251_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(252, s) BOOST_PP_IIF(c, BOOST_PP_FOR_252, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(252, s), p, o, m)
+# define BOOST_PP_FOR_252_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(253, s) BOOST_PP_IIF(c, BOOST_PP_FOR_253, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(253, s), p, o, m)
+# define BOOST_PP_FOR_253_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(254, s) BOOST_PP_IIF(c, BOOST_PP_FOR_254, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(254, s), p, o, m)
+# define BOOST_PP_FOR_254_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(255, s) BOOST_PP_IIF(c, BOOST_PP_FOR_255, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(255, s), p, o, m)
+# define BOOST_PP_FOR_255_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(256, s) BOOST_PP_IIF(c, BOOST_PP_FOR_256, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(256, s), p, o, m)
+# define BOOST_PP_FOR_256_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(257, s) BOOST_PP_IIF(c, BOOST_PP_FOR_257, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(257, s), p, o, m)
+#
+# endif
diff --git a/boost/boost/preprocessor/repetition/detail/edg/for.hpp b/boost/boost/preprocessor/repetition/detail/edg/for.hpp
new file mode 100644
index 00000000000..212921a63c8
--- /dev/null
+++ b/boost/boost/preprocessor/repetition/detail/edg/for.hpp
@@ -0,0 +1,534 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_REPETITION_DETAIL_EDG_FOR_HPP
+# define BOOST_PREPROCESSOR_REPETITION_DETAIL_EDG_FOR_HPP
+#
+# include <boost/preprocessor/control/if.hpp>
+# include <boost/preprocessor/tuple/eat.hpp>
+#
+# define BOOST_PP_FOR_1(s, p, o, m) BOOST_PP_FOR_1_I(s, p, o, m)
+# define BOOST_PP_FOR_2(s, p, o, m) BOOST_PP_FOR_2_I(s, p, o, m)
+# define BOOST_PP_FOR_3(s, p, o, m) BOOST_PP_FOR_3_I(s, p, o, m)
+# define BOOST_PP_FOR_4(s, p, o, m) BOOST_PP_FOR_4_I(s, p, o, m)
+# define BOOST_PP_FOR_5(s, p, o, m) BOOST_PP_FOR_5_I(s, p, o, m)
+# define BOOST_PP_FOR_6(s, p, o, m) BOOST_PP_FOR_6_I(s, p, o, m)
+# define BOOST_PP_FOR_7(s, p, o, m) BOOST_PP_FOR_7_I(s, p, o, m)
+# define BOOST_PP_FOR_8(s, p, o, m) BOOST_PP_FOR_8_I(s, p, o, m)
+# define BOOST_PP_FOR_9(s, p, o, m) BOOST_PP_FOR_9_I(s, p, o, m)
+# define BOOST_PP_FOR_10(s, p, o, m) BOOST_PP_FOR_10_I(s, p, o, m)
+# define BOOST_PP_FOR_11(s, p, o, m) BOOST_PP_FOR_11_I(s, p, o, m)
+# define BOOST_PP_FOR_12(s, p, o, m) BOOST_PP_FOR_12_I(s, p, o, m)
+# define BOOST_PP_FOR_13(s, p, o, m) BOOST_PP_FOR_13_I(s, p, o, m)
+# define BOOST_PP_FOR_14(s, p, o, m) BOOST_PP_FOR_14_I(s, p, o, m)
+# define BOOST_PP_FOR_15(s, p, o, m) BOOST_PP_FOR_15_I(s, p, o, m)
+# define BOOST_PP_FOR_16(s, p, o, m) BOOST_PP_FOR_16_I(s, p, o, m)
+# define BOOST_PP_FOR_17(s, p, o, m) BOOST_PP_FOR_17_I(s, p, o, m)
+# define BOOST_PP_FOR_18(s, p, o, m) BOOST_PP_FOR_18_I(s, p, o, m)
+# define BOOST_PP_FOR_19(s, p, o, m) BOOST_PP_FOR_19_I(s, p, o, m)
+# define BOOST_PP_FOR_20(s, p, o, m) BOOST_PP_FOR_20_I(s, p, o, m)
+# define BOOST_PP_FOR_21(s, p, o, m) BOOST_PP_FOR_21_I(s, p, o, m)
+# define BOOST_PP_FOR_22(s, p, o, m) BOOST_PP_FOR_22_I(s, p, o, m)
+# define BOOST_PP_FOR_23(s, p, o, m) BOOST_PP_FOR_23_I(s, p, o, m)
+# define BOOST_PP_FOR_24(s, p, o, m) BOOST_PP_FOR_24_I(s, p, o, m)
+# define BOOST_PP_FOR_25(s, p, o, m) BOOST_PP_FOR_25_I(s, p, o, m)
+# define BOOST_PP_FOR_26(s, p, o, m) BOOST_PP_FOR_26_I(s, p, o, m)
+# define BOOST_PP_FOR_27(s, p, o, m) BOOST_PP_FOR_27_I(s, p, o, m)
+# define BOOST_PP_FOR_28(s, p, o, m) BOOST_PP_FOR_28_I(s, p, o, m)
+# define BOOST_PP_FOR_29(s, p, o, m) BOOST_PP_FOR_29_I(s, p, o, m)
+# define BOOST_PP_FOR_30(s, p, o, m) BOOST_PP_FOR_30_I(s, p, o, m)
+# define BOOST_PP_FOR_31(s, p, o, m) BOOST_PP_FOR_31_I(s, p, o, m)
+# define BOOST_PP_FOR_32(s, p, o, m) BOOST_PP_FOR_32_I(s, p, o, m)
+# define BOOST_PP_FOR_33(s, p, o, m) BOOST_PP_FOR_33_I(s, p, o, m)
+# define BOOST_PP_FOR_34(s, p, o, m) BOOST_PP_FOR_34_I(s, p, o, m)
+# define BOOST_PP_FOR_35(s, p, o, m) BOOST_PP_FOR_35_I(s, p, o, m)
+# define BOOST_PP_FOR_36(s, p, o, m) BOOST_PP_FOR_36_I(s, p, o, m)
+# define BOOST_PP_FOR_37(s, p, o, m) BOOST_PP_FOR_37_I(s, p, o, m)
+# define BOOST_PP_FOR_38(s, p, o, m) BOOST_PP_FOR_38_I(s, p, o, m)
+# define BOOST_PP_FOR_39(s, p, o, m) BOOST_PP_FOR_39_I(s, p, o, m)
+# define BOOST_PP_FOR_40(s, p, o, m) BOOST_PP_FOR_40_I(s, p, o, m)
+# define BOOST_PP_FOR_41(s, p, o, m) BOOST_PP_FOR_41_I(s, p, o, m)
+# define BOOST_PP_FOR_42(s, p, o, m) BOOST_PP_FOR_42_I(s, p, o, m)
+# define BOOST_PP_FOR_43(s, p, o, m) BOOST_PP_FOR_43_I(s, p, o, m)
+# define BOOST_PP_FOR_44(s, p, o, m) BOOST_PP_FOR_44_I(s, p, o, m)
+# define BOOST_PP_FOR_45(s, p, o, m) BOOST_PP_FOR_45_I(s, p, o, m)
+# define BOOST_PP_FOR_46(s, p, o, m) BOOST_PP_FOR_46_I(s, p, o, m)
+# define BOOST_PP_FOR_47(s, p, o, m) BOOST_PP_FOR_47_I(s, p, o, m)
+# define BOOST_PP_FOR_48(s, p, o, m) BOOST_PP_FOR_48_I(s, p, o, m)
+# define BOOST_PP_FOR_49(s, p, o, m) BOOST_PP_FOR_49_I(s, p, o, m)
+# define BOOST_PP_FOR_50(s, p, o, m) BOOST_PP_FOR_50_I(s, p, o, m)
+# define BOOST_PP_FOR_51(s, p, o, m) BOOST_PP_FOR_51_I(s, p, o, m)
+# define BOOST_PP_FOR_52(s, p, o, m) BOOST_PP_FOR_52_I(s, p, o, m)
+# define BOOST_PP_FOR_53(s, p, o, m) BOOST_PP_FOR_53_I(s, p, o, m)
+# define BOOST_PP_FOR_54(s, p, o, m) BOOST_PP_FOR_54_I(s, p, o, m)
+# define BOOST_PP_FOR_55(s, p, o, m) BOOST_PP_FOR_55_I(s, p, o, m)
+# define BOOST_PP_FOR_56(s, p, o, m) BOOST_PP_FOR_56_I(s, p, o, m)
+# define BOOST_PP_FOR_57(s, p, o, m) BOOST_PP_FOR_57_I(s, p, o, m)
+# define BOOST_PP_FOR_58(s, p, o, m) BOOST_PP_FOR_58_I(s, p, o, m)
+# define BOOST_PP_FOR_59(s, p, o, m) BOOST_PP_FOR_59_I(s, p, o, m)
+# define BOOST_PP_FOR_60(s, p, o, m) BOOST_PP_FOR_60_I(s, p, o, m)
+# define BOOST_PP_FOR_61(s, p, o, m) BOOST_PP_FOR_61_I(s, p, o, m)
+# define BOOST_PP_FOR_62(s, p, o, m) BOOST_PP_FOR_62_I(s, p, o, m)
+# define BOOST_PP_FOR_63(s, p, o, m) BOOST_PP_FOR_63_I(s, p, o, m)
+# define BOOST_PP_FOR_64(s, p, o, m) BOOST_PP_FOR_64_I(s, p, o, m)
+# define BOOST_PP_FOR_65(s, p, o, m) BOOST_PP_FOR_65_I(s, p, o, m)
+# define BOOST_PP_FOR_66(s, p, o, m) BOOST_PP_FOR_66_I(s, p, o, m)
+# define BOOST_PP_FOR_67(s, p, o, m) BOOST_PP_FOR_67_I(s, p, o, m)
+# define BOOST_PP_FOR_68(s, p, o, m) BOOST_PP_FOR_68_I(s, p, o, m)
+# define BOOST_PP_FOR_69(s, p, o, m) BOOST_PP_FOR_69_I(s, p, o, m)
+# define BOOST_PP_FOR_70(s, p, o, m) BOOST_PP_FOR_70_I(s, p, o, m)
+# define BOOST_PP_FOR_71(s, p, o, m) BOOST_PP_FOR_71_I(s, p, o, m)
+# define BOOST_PP_FOR_72(s, p, o, m) BOOST_PP_FOR_72_I(s, p, o, m)
+# define BOOST_PP_FOR_73(s, p, o, m) BOOST_PP_FOR_73_I(s, p, o, m)
+# define BOOST_PP_FOR_74(s, p, o, m) BOOST_PP_FOR_74_I(s, p, o, m)
+# define BOOST_PP_FOR_75(s, p, o, m) BOOST_PP_FOR_75_I(s, p, o, m)
+# define BOOST_PP_FOR_76(s, p, o, m) BOOST_PP_FOR_76_I(s, p, o, m)
+# define BOOST_PP_FOR_77(s, p, o, m) BOOST_PP_FOR_77_I(s, p, o, m)
+# define BOOST_PP_FOR_78(s, p, o, m) BOOST_PP_FOR_78_I(s, p, o, m)
+# define BOOST_PP_FOR_79(s, p, o, m) BOOST_PP_FOR_79_I(s, p, o, m)
+# define BOOST_PP_FOR_80(s, p, o, m) BOOST_PP_FOR_80_I(s, p, o, m)
+# define BOOST_PP_FOR_81(s, p, o, m) BOOST_PP_FOR_81_I(s, p, o, m)
+# define BOOST_PP_FOR_82(s, p, o, m) BOOST_PP_FOR_82_I(s, p, o, m)
+# define BOOST_PP_FOR_83(s, p, o, m) BOOST_PP_FOR_83_I(s, p, o, m)
+# define BOOST_PP_FOR_84(s, p, o, m) BOOST_PP_FOR_84_I(s, p, o, m)
+# define BOOST_PP_FOR_85(s, p, o, m) BOOST_PP_FOR_85_I(s, p, o, m)
+# define BOOST_PP_FOR_86(s, p, o, m) BOOST_PP_FOR_86_I(s, p, o, m)
+# define BOOST_PP_FOR_87(s, p, o, m) BOOST_PP_FOR_87_I(s, p, o, m)
+# define BOOST_PP_FOR_88(s, p, o, m) BOOST_PP_FOR_88_I(s, p, o, m)
+# define BOOST_PP_FOR_89(s, p, o, m) BOOST_PP_FOR_89_I(s, p, o, m)
+# define BOOST_PP_FOR_90(s, p, o, m) BOOST_PP_FOR_90_I(s, p, o, m)
+# define BOOST_PP_FOR_91(s, p, o, m) BOOST_PP_FOR_91_I(s, p, o, m)
+# define BOOST_PP_FOR_92(s, p, o, m) BOOST_PP_FOR_92_I(s, p, o, m)
+# define BOOST_PP_FOR_93(s, p, o, m) BOOST_PP_FOR_93_I(s, p, o, m)
+# define BOOST_PP_FOR_94(s, p, o, m) BOOST_PP_FOR_94_I(s, p, o, m)
+# define BOOST_PP_FOR_95(s, p, o, m) BOOST_PP_FOR_95_I(s, p, o, m)
+# define BOOST_PP_FOR_96(s, p, o, m) BOOST_PP_FOR_96_I(s, p, o, m)
+# define BOOST_PP_FOR_97(s, p, o, m) BOOST_PP_FOR_97_I(s, p, o, m)
+# define BOOST_PP_FOR_98(s, p, o, m) BOOST_PP_FOR_98_I(s, p, o, m)
+# define BOOST_PP_FOR_99(s, p, o, m) BOOST_PP_FOR_99_I(s, p, o, m)
+# define BOOST_PP_FOR_100(s, p, o, m) BOOST_PP_FOR_100_I(s, p, o, m)
+# define BOOST_PP_FOR_101(s, p, o, m) BOOST_PP_FOR_101_I(s, p, o, m)
+# define BOOST_PP_FOR_102(s, p, o, m) BOOST_PP_FOR_102_I(s, p, o, m)
+# define BOOST_PP_FOR_103(s, p, o, m) BOOST_PP_FOR_103_I(s, p, o, m)
+# define BOOST_PP_FOR_104(s, p, o, m) BOOST_PP_FOR_104_I(s, p, o, m)
+# define BOOST_PP_FOR_105(s, p, o, m) BOOST_PP_FOR_105_I(s, p, o, m)
+# define BOOST_PP_FOR_106(s, p, o, m) BOOST_PP_FOR_106_I(s, p, o, m)
+# define BOOST_PP_FOR_107(s, p, o, m) BOOST_PP_FOR_107_I(s, p, o, m)
+# define BOOST_PP_FOR_108(s, p, o, m) BOOST_PP_FOR_108_I(s, p, o, m)
+# define BOOST_PP_FOR_109(s, p, o, m) BOOST_PP_FOR_109_I(s, p, o, m)
+# define BOOST_PP_FOR_110(s, p, o, m) BOOST_PP_FOR_110_I(s, p, o, m)
+# define BOOST_PP_FOR_111(s, p, o, m) BOOST_PP_FOR_111_I(s, p, o, m)
+# define BOOST_PP_FOR_112(s, p, o, m) BOOST_PP_FOR_112_I(s, p, o, m)
+# define BOOST_PP_FOR_113(s, p, o, m) BOOST_PP_FOR_113_I(s, p, o, m)
+# define BOOST_PP_FOR_114(s, p, o, m) BOOST_PP_FOR_114_I(s, p, o, m)
+# define BOOST_PP_FOR_115(s, p, o, m) BOOST_PP_FOR_115_I(s, p, o, m)
+# define BOOST_PP_FOR_116(s, p, o, m) BOOST_PP_FOR_116_I(s, p, o, m)
+# define BOOST_PP_FOR_117(s, p, o, m) BOOST_PP_FOR_117_I(s, p, o, m)
+# define BOOST_PP_FOR_118(s, p, o, m) BOOST_PP_FOR_118_I(s, p, o, m)
+# define BOOST_PP_FOR_119(s, p, o, m) BOOST_PP_FOR_119_I(s, p, o, m)
+# define BOOST_PP_FOR_120(s, p, o, m) BOOST_PP_FOR_120_I(s, p, o, m)
+# define BOOST_PP_FOR_121(s, p, o, m) BOOST_PP_FOR_121_I(s, p, o, m)
+# define BOOST_PP_FOR_122(s, p, o, m) BOOST_PP_FOR_122_I(s, p, o, m)
+# define BOOST_PP_FOR_123(s, p, o, m) BOOST_PP_FOR_123_I(s, p, o, m)
+# define BOOST_PP_FOR_124(s, p, o, m) BOOST_PP_FOR_124_I(s, p, o, m)
+# define BOOST_PP_FOR_125(s, p, o, m) BOOST_PP_FOR_125_I(s, p, o, m)
+# define BOOST_PP_FOR_126(s, p, o, m) BOOST_PP_FOR_126_I(s, p, o, m)
+# define BOOST_PP_FOR_127(s, p, o, m) BOOST_PP_FOR_127_I(s, p, o, m)
+# define BOOST_PP_FOR_128(s, p, o, m) BOOST_PP_FOR_128_I(s, p, o, m)
+# define BOOST_PP_FOR_129(s, p, o, m) BOOST_PP_FOR_129_I(s, p, o, m)
+# define BOOST_PP_FOR_130(s, p, o, m) BOOST_PP_FOR_130_I(s, p, o, m)
+# define BOOST_PP_FOR_131(s, p, o, m) BOOST_PP_FOR_131_I(s, p, o, m)
+# define BOOST_PP_FOR_132(s, p, o, m) BOOST_PP_FOR_132_I(s, p, o, m)
+# define BOOST_PP_FOR_133(s, p, o, m) BOOST_PP_FOR_133_I(s, p, o, m)
+# define BOOST_PP_FOR_134(s, p, o, m) BOOST_PP_FOR_134_I(s, p, o, m)
+# define BOOST_PP_FOR_135(s, p, o, m) BOOST_PP_FOR_135_I(s, p, o, m)
+# define BOOST_PP_FOR_136(s, p, o, m) BOOST_PP_FOR_136_I(s, p, o, m)
+# define BOOST_PP_FOR_137(s, p, o, m) BOOST_PP_FOR_137_I(s, p, o, m)
+# define BOOST_PP_FOR_138(s, p, o, m) BOOST_PP_FOR_138_I(s, p, o, m)
+# define BOOST_PP_FOR_139(s, p, o, m) BOOST_PP_FOR_139_I(s, p, o, m)
+# define BOOST_PP_FOR_140(s, p, o, m) BOOST_PP_FOR_140_I(s, p, o, m)
+# define BOOST_PP_FOR_141(s, p, o, m) BOOST_PP_FOR_141_I(s, p, o, m)
+# define BOOST_PP_FOR_142(s, p, o, m) BOOST_PP_FOR_142_I(s, p, o, m)
+# define BOOST_PP_FOR_143(s, p, o, m) BOOST_PP_FOR_143_I(s, p, o, m)
+# define BOOST_PP_FOR_144(s, p, o, m) BOOST_PP_FOR_144_I(s, p, o, m)
+# define BOOST_PP_FOR_145(s, p, o, m) BOOST_PP_FOR_145_I(s, p, o, m)
+# define BOOST_PP_FOR_146(s, p, o, m) BOOST_PP_FOR_146_I(s, p, o, m)
+# define BOOST_PP_FOR_147(s, p, o, m) BOOST_PP_FOR_147_I(s, p, o, m)
+# define BOOST_PP_FOR_148(s, p, o, m) BOOST_PP_FOR_148_I(s, p, o, m)
+# define BOOST_PP_FOR_149(s, p, o, m) BOOST_PP_FOR_149_I(s, p, o, m)
+# define BOOST_PP_FOR_150(s, p, o, m) BOOST_PP_FOR_150_I(s, p, o, m)
+# define BOOST_PP_FOR_151(s, p, o, m) BOOST_PP_FOR_151_I(s, p, o, m)
+# define BOOST_PP_FOR_152(s, p, o, m) BOOST_PP_FOR_152_I(s, p, o, m)
+# define BOOST_PP_FOR_153(s, p, o, m) BOOST_PP_FOR_153_I(s, p, o, m)
+# define BOOST_PP_FOR_154(s, p, o, m) BOOST_PP_FOR_154_I(s, p, o, m)
+# define BOOST_PP_FOR_155(s, p, o, m) BOOST_PP_FOR_155_I(s, p, o, m)
+# define BOOST_PP_FOR_156(s, p, o, m) BOOST_PP_FOR_156_I(s, p, o, m)
+# define BOOST_PP_FOR_157(s, p, o, m) BOOST_PP_FOR_157_I(s, p, o, m)
+# define BOOST_PP_FOR_158(s, p, o, m) BOOST_PP_FOR_158_I(s, p, o, m)
+# define BOOST_PP_FOR_159(s, p, o, m) BOOST_PP_FOR_159_I(s, p, o, m)
+# define BOOST_PP_FOR_160(s, p, o, m) BOOST_PP_FOR_160_I(s, p, o, m)
+# define BOOST_PP_FOR_161(s, p, o, m) BOOST_PP_FOR_161_I(s, p, o, m)
+# define BOOST_PP_FOR_162(s, p, o, m) BOOST_PP_FOR_162_I(s, p, o, m)
+# define BOOST_PP_FOR_163(s, p, o, m) BOOST_PP_FOR_163_I(s, p, o, m)
+# define BOOST_PP_FOR_164(s, p, o, m) BOOST_PP_FOR_164_I(s, p, o, m)
+# define BOOST_PP_FOR_165(s, p, o, m) BOOST_PP_FOR_165_I(s, p, o, m)
+# define BOOST_PP_FOR_166(s, p, o, m) BOOST_PP_FOR_166_I(s, p, o, m)
+# define BOOST_PP_FOR_167(s, p, o, m) BOOST_PP_FOR_167_I(s, p, o, m)
+# define BOOST_PP_FOR_168(s, p, o, m) BOOST_PP_FOR_168_I(s, p, o, m)
+# define BOOST_PP_FOR_169(s, p, o, m) BOOST_PP_FOR_169_I(s, p, o, m)
+# define BOOST_PP_FOR_170(s, p, o, m) BOOST_PP_FOR_170_I(s, p, o, m)
+# define BOOST_PP_FOR_171(s, p, o, m) BOOST_PP_FOR_171_I(s, p, o, m)
+# define BOOST_PP_FOR_172(s, p, o, m) BOOST_PP_FOR_172_I(s, p, o, m)
+# define BOOST_PP_FOR_173(s, p, o, m) BOOST_PP_FOR_173_I(s, p, o, m)
+# define BOOST_PP_FOR_174(s, p, o, m) BOOST_PP_FOR_174_I(s, p, o, m)
+# define BOOST_PP_FOR_175(s, p, o, m) BOOST_PP_FOR_175_I(s, p, o, m)
+# define BOOST_PP_FOR_176(s, p, o, m) BOOST_PP_FOR_176_I(s, p, o, m)
+# define BOOST_PP_FOR_177(s, p, o, m) BOOST_PP_FOR_177_I(s, p, o, m)
+# define BOOST_PP_FOR_178(s, p, o, m) BOOST_PP_FOR_178_I(s, p, o, m)
+# define BOOST_PP_FOR_179(s, p, o, m) BOOST_PP_FOR_179_I(s, p, o, m)
+# define BOOST_PP_FOR_180(s, p, o, m) BOOST_PP_FOR_180_I(s, p, o, m)
+# define BOOST_PP_FOR_181(s, p, o, m) BOOST_PP_FOR_181_I(s, p, o, m)
+# define BOOST_PP_FOR_182(s, p, o, m) BOOST_PP_FOR_182_I(s, p, o, m)
+# define BOOST_PP_FOR_183(s, p, o, m) BOOST_PP_FOR_183_I(s, p, o, m)
+# define BOOST_PP_FOR_184(s, p, o, m) BOOST_PP_FOR_184_I(s, p, o, m)
+# define BOOST_PP_FOR_185(s, p, o, m) BOOST_PP_FOR_185_I(s, p, o, m)
+# define BOOST_PP_FOR_186(s, p, o, m) BOOST_PP_FOR_186_I(s, p, o, m)
+# define BOOST_PP_FOR_187(s, p, o, m) BOOST_PP_FOR_187_I(s, p, o, m)
+# define BOOST_PP_FOR_188(s, p, o, m) BOOST_PP_FOR_188_I(s, p, o, m)
+# define BOOST_PP_FOR_189(s, p, o, m) BOOST_PP_FOR_189_I(s, p, o, m)
+# define BOOST_PP_FOR_190(s, p, o, m) BOOST_PP_FOR_190_I(s, p, o, m)
+# define BOOST_PP_FOR_191(s, p, o, m) BOOST_PP_FOR_191_I(s, p, o, m)
+# define BOOST_PP_FOR_192(s, p, o, m) BOOST_PP_FOR_192_I(s, p, o, m)
+# define BOOST_PP_FOR_193(s, p, o, m) BOOST_PP_FOR_193_I(s, p, o, m)
+# define BOOST_PP_FOR_194(s, p, o, m) BOOST_PP_FOR_194_I(s, p, o, m)
+# define BOOST_PP_FOR_195(s, p, o, m) BOOST_PP_FOR_195_I(s, p, o, m)
+# define BOOST_PP_FOR_196(s, p, o, m) BOOST_PP_FOR_196_I(s, p, o, m)
+# define BOOST_PP_FOR_197(s, p, o, m) BOOST_PP_FOR_197_I(s, p, o, m)
+# define BOOST_PP_FOR_198(s, p, o, m) BOOST_PP_FOR_198_I(s, p, o, m)
+# define BOOST_PP_FOR_199(s, p, o, m) BOOST_PP_FOR_199_I(s, p, o, m)
+# define BOOST_PP_FOR_200(s, p, o, m) BOOST_PP_FOR_200_I(s, p, o, m)
+# define BOOST_PP_FOR_201(s, p, o, m) BOOST_PP_FOR_201_I(s, p, o, m)
+# define BOOST_PP_FOR_202(s, p, o, m) BOOST_PP_FOR_202_I(s, p, o, m)
+# define BOOST_PP_FOR_203(s, p, o, m) BOOST_PP_FOR_203_I(s, p, o, m)
+# define BOOST_PP_FOR_204(s, p, o, m) BOOST_PP_FOR_204_I(s, p, o, m)
+# define BOOST_PP_FOR_205(s, p, o, m) BOOST_PP_FOR_205_I(s, p, o, m)
+# define BOOST_PP_FOR_206(s, p, o, m) BOOST_PP_FOR_206_I(s, p, o, m)
+# define BOOST_PP_FOR_207(s, p, o, m) BOOST_PP_FOR_207_I(s, p, o, m)
+# define BOOST_PP_FOR_208(s, p, o, m) BOOST_PP_FOR_208_I(s, p, o, m)
+# define BOOST_PP_FOR_209(s, p, o, m) BOOST_PP_FOR_209_I(s, p, o, m)
+# define BOOST_PP_FOR_210(s, p, o, m) BOOST_PP_FOR_210_I(s, p, o, m)
+# define BOOST_PP_FOR_211(s, p, o, m) BOOST_PP_FOR_211_I(s, p, o, m)
+# define BOOST_PP_FOR_212(s, p, o, m) BOOST_PP_FOR_212_I(s, p, o, m)
+# define BOOST_PP_FOR_213(s, p, o, m) BOOST_PP_FOR_213_I(s, p, o, m)
+# define BOOST_PP_FOR_214(s, p, o, m) BOOST_PP_FOR_214_I(s, p, o, m)
+# define BOOST_PP_FOR_215(s, p, o, m) BOOST_PP_FOR_215_I(s, p, o, m)
+# define BOOST_PP_FOR_216(s, p, o, m) BOOST_PP_FOR_216_I(s, p, o, m)
+# define BOOST_PP_FOR_217(s, p, o, m) BOOST_PP_FOR_217_I(s, p, o, m)
+# define BOOST_PP_FOR_218(s, p, o, m) BOOST_PP_FOR_218_I(s, p, o, m)
+# define BOOST_PP_FOR_219(s, p, o, m) BOOST_PP_FOR_219_I(s, p, o, m)
+# define BOOST_PP_FOR_220(s, p, o, m) BOOST_PP_FOR_220_I(s, p, o, m)
+# define BOOST_PP_FOR_221(s, p, o, m) BOOST_PP_FOR_221_I(s, p, o, m)
+# define BOOST_PP_FOR_222(s, p, o, m) BOOST_PP_FOR_222_I(s, p, o, m)
+# define BOOST_PP_FOR_223(s, p, o, m) BOOST_PP_FOR_223_I(s, p, o, m)
+# define BOOST_PP_FOR_224(s, p, o, m) BOOST_PP_FOR_224_I(s, p, o, m)
+# define BOOST_PP_FOR_225(s, p, o, m) BOOST_PP_FOR_225_I(s, p, o, m)
+# define BOOST_PP_FOR_226(s, p, o, m) BOOST_PP_FOR_226_I(s, p, o, m)
+# define BOOST_PP_FOR_227(s, p, o, m) BOOST_PP_FOR_227_I(s, p, o, m)
+# define BOOST_PP_FOR_228(s, p, o, m) BOOST_PP_FOR_228_I(s, p, o, m)
+# define BOOST_PP_FOR_229(s, p, o, m) BOOST_PP_FOR_229_I(s, p, o, m)
+# define BOOST_PP_FOR_230(s, p, o, m) BOOST_PP_FOR_230_I(s, p, o, m)
+# define BOOST_PP_FOR_231(s, p, o, m) BOOST_PP_FOR_231_I(s, p, o, m)
+# define BOOST_PP_FOR_232(s, p, o, m) BOOST_PP_FOR_232_I(s, p, o, m)
+# define BOOST_PP_FOR_233(s, p, o, m) BOOST_PP_FOR_233_I(s, p, o, m)
+# define BOOST_PP_FOR_234(s, p, o, m) BOOST_PP_FOR_234_I(s, p, o, m)
+# define BOOST_PP_FOR_235(s, p, o, m) BOOST_PP_FOR_235_I(s, p, o, m)
+# define BOOST_PP_FOR_236(s, p, o, m) BOOST_PP_FOR_236_I(s, p, o, m)
+# define BOOST_PP_FOR_237(s, p, o, m) BOOST_PP_FOR_237_I(s, p, o, m)
+# define BOOST_PP_FOR_238(s, p, o, m) BOOST_PP_FOR_238_I(s, p, o, m)
+# define BOOST_PP_FOR_239(s, p, o, m) BOOST_PP_FOR_239_I(s, p, o, m)
+# define BOOST_PP_FOR_240(s, p, o, m) BOOST_PP_FOR_240_I(s, p, o, m)
+# define BOOST_PP_FOR_241(s, p, o, m) BOOST_PP_FOR_241_I(s, p, o, m)
+# define BOOST_PP_FOR_242(s, p, o, m) BOOST_PP_FOR_242_I(s, p, o, m)
+# define BOOST_PP_FOR_243(s, p, o, m) BOOST_PP_FOR_243_I(s, p, o, m)
+# define BOOST_PP_FOR_244(s, p, o, m) BOOST_PP_FOR_244_I(s, p, o, m)
+# define BOOST_PP_FOR_245(s, p, o, m) BOOST_PP_FOR_245_I(s, p, o, m)
+# define BOOST_PP_FOR_246(s, p, o, m) BOOST_PP_FOR_246_I(s, p, o, m)
+# define BOOST_PP_FOR_247(s, p, o, m) BOOST_PP_FOR_247_I(s, p, o, m)
+# define BOOST_PP_FOR_248(s, p, o, m) BOOST_PP_FOR_248_I(s, p, o, m)
+# define BOOST_PP_FOR_249(s, p, o, m) BOOST_PP_FOR_249_I(s, p, o, m)
+# define BOOST_PP_FOR_250(s, p, o, m) BOOST_PP_FOR_250_I(s, p, o, m)
+# define BOOST_PP_FOR_251(s, p, o, m) BOOST_PP_FOR_251_I(s, p, o, m)
+# define BOOST_PP_FOR_252(s, p, o, m) BOOST_PP_FOR_252_I(s, p, o, m)
+# define BOOST_PP_FOR_253(s, p, o, m) BOOST_PP_FOR_253_I(s, p, o, m)
+# define BOOST_PP_FOR_254(s, p, o, m) BOOST_PP_FOR_254_I(s, p, o, m)
+# define BOOST_PP_FOR_255(s, p, o, m) BOOST_PP_FOR_255_I(s, p, o, m)
+# define BOOST_PP_FOR_256(s, p, o, m) BOOST_PP_FOR_256_I(s, p, o, m)
+#
+# define BOOST_PP_FOR_1_I(s, p, o, m) BOOST_PP_IF(p(2, s), m, BOOST_PP_TUPLE_EAT_2)(2, s) BOOST_PP_IF(p(2, s), BOOST_PP_FOR_2, BOOST_PP_TUPLE_EAT_4)(o(2, s), p, o, m)
+# define BOOST_PP_FOR_2_I(s, p, o, m) BOOST_PP_IF(p(3, s), m, BOOST_PP_TUPLE_EAT_2)(3, s) BOOST_PP_IF(p(3, s), BOOST_PP_FOR_3, BOOST_PP_TUPLE_EAT_4)(o(3, s), p, o, m)
+# define BOOST_PP_FOR_3_I(s, p, o, m) BOOST_PP_IF(p(4, s), m, BOOST_PP_TUPLE_EAT_2)(4, s) BOOST_PP_IF(p(4, s), BOOST_PP_FOR_4, BOOST_PP_TUPLE_EAT_4)(o(4, s), p, o, m)
+# define BOOST_PP_FOR_4_I(s, p, o, m) BOOST_PP_IF(p(5, s), m, BOOST_PP_TUPLE_EAT_2)(5, s) BOOST_PP_IF(p(5, s), BOOST_PP_FOR_5, BOOST_PP_TUPLE_EAT_4)(o(5, s), p, o, m)
+# define BOOST_PP_FOR_5_I(s, p, o, m) BOOST_PP_IF(p(6, s), m, BOOST_PP_TUPLE_EAT_2)(6, s) BOOST_PP_IF(p(6, s), BOOST_PP_FOR_6, BOOST_PP_TUPLE_EAT_4)(o(6, s), p, o, m)
+# define BOOST_PP_FOR_6_I(s, p, o, m) BOOST_PP_IF(p(7, s), m, BOOST_PP_TUPLE_EAT_2)(7, s) BOOST_PP_IF(p(7, s), BOOST_PP_FOR_7, BOOST_PP_TUPLE_EAT_4)(o(7, s), p, o, m)
+# define BOOST_PP_FOR_7_I(s, p, o, m) BOOST_PP_IF(p(8, s), m, BOOST_PP_TUPLE_EAT_2)(8, s) BOOST_PP_IF(p(8, s), BOOST_PP_FOR_8, BOOST_PP_TUPLE_EAT_4)(o(8, s), p, o, m)
+# define BOOST_PP_FOR_8_I(s, p, o, m) BOOST_PP_IF(p(9, s), m, BOOST_PP_TUPLE_EAT_2)(9, s) BOOST_PP_IF(p(9, s), BOOST_PP_FOR_9, BOOST_PP_TUPLE_EAT_4)(o(9, s), p, o, m)
+# define BOOST_PP_FOR_9_I(s, p, o, m) BOOST_PP_IF(p(10, s), m, BOOST_PP_TUPLE_EAT_2)(10, s) BOOST_PP_IF(p(10, s), BOOST_PP_FOR_10, BOOST_PP_TUPLE_EAT_4)(o(10, s), p, o, m)
+# define BOOST_PP_FOR_10_I(s, p, o, m) BOOST_PP_IF(p(11, s), m, BOOST_PP_TUPLE_EAT_2)(11, s) BOOST_PP_IF(p(11, s), BOOST_PP_FOR_11, BOOST_PP_TUPLE_EAT_4)(o(11, s), p, o, m)
+# define BOOST_PP_FOR_11_I(s, p, o, m) BOOST_PP_IF(p(12, s), m, BOOST_PP_TUPLE_EAT_2)(12, s) BOOST_PP_IF(p(12, s), BOOST_PP_FOR_12, BOOST_PP_TUPLE_EAT_4)(o(12, s), p, o, m)
+# define BOOST_PP_FOR_12_I(s, p, o, m) BOOST_PP_IF(p(13, s), m, BOOST_PP_TUPLE_EAT_2)(13, s) BOOST_PP_IF(p(13, s), BOOST_PP_FOR_13, BOOST_PP_TUPLE_EAT_4)(o(13, s), p, o, m)
+# define BOOST_PP_FOR_13_I(s, p, o, m) BOOST_PP_IF(p(14, s), m, BOOST_PP_TUPLE_EAT_2)(14, s) BOOST_PP_IF(p(14, s), BOOST_PP_FOR_14, BOOST_PP_TUPLE_EAT_4)(o(14, s), p, o, m)
+# define BOOST_PP_FOR_14_I(s, p, o, m) BOOST_PP_IF(p(15, s), m, BOOST_PP_TUPLE_EAT_2)(15, s) BOOST_PP_IF(p(15, s), BOOST_PP_FOR_15, BOOST_PP_TUPLE_EAT_4)(o(15, s), p, o, m)
+# define BOOST_PP_FOR_15_I(s, p, o, m) BOOST_PP_IF(p(16, s), m, BOOST_PP_TUPLE_EAT_2)(16, s) BOOST_PP_IF(p(16, s), BOOST_PP_FOR_16, BOOST_PP_TUPLE_EAT_4)(o(16, s), p, o, m)
+# define BOOST_PP_FOR_16_I(s, p, o, m) BOOST_PP_IF(p(17, s), m, BOOST_PP_TUPLE_EAT_2)(17, s) BOOST_PP_IF(p(17, s), BOOST_PP_FOR_17, BOOST_PP_TUPLE_EAT_4)(o(17, s), p, o, m)
+# define BOOST_PP_FOR_17_I(s, p, o, m) BOOST_PP_IF(p(18, s), m, BOOST_PP_TUPLE_EAT_2)(18, s) BOOST_PP_IF(p(18, s), BOOST_PP_FOR_18, BOOST_PP_TUPLE_EAT_4)(o(18, s), p, o, m)
+# define BOOST_PP_FOR_18_I(s, p, o, m) BOOST_PP_IF(p(19, s), m, BOOST_PP_TUPLE_EAT_2)(19, s) BOOST_PP_IF(p(19, s), BOOST_PP_FOR_19, BOOST_PP_TUPLE_EAT_4)(o(19, s), p, o, m)
+# define BOOST_PP_FOR_19_I(s, p, o, m) BOOST_PP_IF(p(20, s), m, BOOST_PP_TUPLE_EAT_2)(20, s) BOOST_PP_IF(p(20, s), BOOST_PP_FOR_20, BOOST_PP_TUPLE_EAT_4)(o(20, s), p, o, m)
+# define BOOST_PP_FOR_20_I(s, p, o, m) BOOST_PP_IF(p(21, s), m, BOOST_PP_TUPLE_EAT_2)(21, s) BOOST_PP_IF(p(21, s), BOOST_PP_FOR_21, BOOST_PP_TUPLE_EAT_4)(o(21, s), p, o, m)
+# define BOOST_PP_FOR_21_I(s, p, o, m) BOOST_PP_IF(p(22, s), m, BOOST_PP_TUPLE_EAT_2)(22, s) BOOST_PP_IF(p(22, s), BOOST_PP_FOR_22, BOOST_PP_TUPLE_EAT_4)(o(22, s), p, o, m)
+# define BOOST_PP_FOR_22_I(s, p, o, m) BOOST_PP_IF(p(23, s), m, BOOST_PP_TUPLE_EAT_2)(23, s) BOOST_PP_IF(p(23, s), BOOST_PP_FOR_23, BOOST_PP_TUPLE_EAT_4)(o(23, s), p, o, m)
+# define BOOST_PP_FOR_23_I(s, p, o, m) BOOST_PP_IF(p(24, s), m, BOOST_PP_TUPLE_EAT_2)(24, s) BOOST_PP_IF(p(24, s), BOOST_PP_FOR_24, BOOST_PP_TUPLE_EAT_4)(o(24, s), p, o, m)
+# define BOOST_PP_FOR_24_I(s, p, o, m) BOOST_PP_IF(p(25, s), m, BOOST_PP_TUPLE_EAT_2)(25, s) BOOST_PP_IF(p(25, s), BOOST_PP_FOR_25, BOOST_PP_TUPLE_EAT_4)(o(25, s), p, o, m)
+# define BOOST_PP_FOR_25_I(s, p, o, m) BOOST_PP_IF(p(26, s), m, BOOST_PP_TUPLE_EAT_2)(26, s) BOOST_PP_IF(p(26, s), BOOST_PP_FOR_26, BOOST_PP_TUPLE_EAT_4)(o(26, s), p, o, m)
+# define BOOST_PP_FOR_26_I(s, p, o, m) BOOST_PP_IF(p(27, s), m, BOOST_PP_TUPLE_EAT_2)(27, s) BOOST_PP_IF(p(27, s), BOOST_PP_FOR_27, BOOST_PP_TUPLE_EAT_4)(o(27, s), p, o, m)
+# define BOOST_PP_FOR_27_I(s, p, o, m) BOOST_PP_IF(p(28, s), m, BOOST_PP_TUPLE_EAT_2)(28, s) BOOST_PP_IF(p(28, s), BOOST_PP_FOR_28, BOOST_PP_TUPLE_EAT_4)(o(28, s), p, o, m)
+# define BOOST_PP_FOR_28_I(s, p, o, m) BOOST_PP_IF(p(29, s), m, BOOST_PP_TUPLE_EAT_2)(29, s) BOOST_PP_IF(p(29, s), BOOST_PP_FOR_29, BOOST_PP_TUPLE_EAT_4)(o(29, s), p, o, m)
+# define BOOST_PP_FOR_29_I(s, p, o, m) BOOST_PP_IF(p(30, s), m, BOOST_PP_TUPLE_EAT_2)(30, s) BOOST_PP_IF(p(30, s), BOOST_PP_FOR_30, BOOST_PP_TUPLE_EAT_4)(o(30, s), p, o, m)
+# define BOOST_PP_FOR_30_I(s, p, o, m) BOOST_PP_IF(p(31, s), m, BOOST_PP_TUPLE_EAT_2)(31, s) BOOST_PP_IF(p(31, s), BOOST_PP_FOR_31, BOOST_PP_TUPLE_EAT_4)(o(31, s), p, o, m)
+# define BOOST_PP_FOR_31_I(s, p, o, m) BOOST_PP_IF(p(32, s), m, BOOST_PP_TUPLE_EAT_2)(32, s) BOOST_PP_IF(p(32, s), BOOST_PP_FOR_32, BOOST_PP_TUPLE_EAT_4)(o(32, s), p, o, m)
+# define BOOST_PP_FOR_32_I(s, p, o, m) BOOST_PP_IF(p(33, s), m, BOOST_PP_TUPLE_EAT_2)(33, s) BOOST_PP_IF(p(33, s), BOOST_PP_FOR_33, BOOST_PP_TUPLE_EAT_4)(o(33, s), p, o, m)
+# define BOOST_PP_FOR_33_I(s, p, o, m) BOOST_PP_IF(p(34, s), m, BOOST_PP_TUPLE_EAT_2)(34, s) BOOST_PP_IF(p(34, s), BOOST_PP_FOR_34, BOOST_PP_TUPLE_EAT_4)(o(34, s), p, o, m)
+# define BOOST_PP_FOR_34_I(s, p, o, m) BOOST_PP_IF(p(35, s), m, BOOST_PP_TUPLE_EAT_2)(35, s) BOOST_PP_IF(p(35, s), BOOST_PP_FOR_35, BOOST_PP_TUPLE_EAT_4)(o(35, s), p, o, m)
+# define BOOST_PP_FOR_35_I(s, p, o, m) BOOST_PP_IF(p(36, s), m, BOOST_PP_TUPLE_EAT_2)(36, s) BOOST_PP_IF(p(36, s), BOOST_PP_FOR_36, BOOST_PP_TUPLE_EAT_4)(o(36, s), p, o, m)
+# define BOOST_PP_FOR_36_I(s, p, o, m) BOOST_PP_IF(p(37, s), m, BOOST_PP_TUPLE_EAT_2)(37, s) BOOST_PP_IF(p(37, s), BOOST_PP_FOR_37, BOOST_PP_TUPLE_EAT_4)(o(37, s), p, o, m)
+# define BOOST_PP_FOR_37_I(s, p, o, m) BOOST_PP_IF(p(38, s), m, BOOST_PP_TUPLE_EAT_2)(38, s) BOOST_PP_IF(p(38, s), BOOST_PP_FOR_38, BOOST_PP_TUPLE_EAT_4)(o(38, s), p, o, m)
+# define BOOST_PP_FOR_38_I(s, p, o, m) BOOST_PP_IF(p(39, s), m, BOOST_PP_TUPLE_EAT_2)(39, s) BOOST_PP_IF(p(39, s), BOOST_PP_FOR_39, BOOST_PP_TUPLE_EAT_4)(o(39, s), p, o, m)
+# define BOOST_PP_FOR_39_I(s, p, o, m) BOOST_PP_IF(p(40, s), m, BOOST_PP_TUPLE_EAT_2)(40, s) BOOST_PP_IF(p(40, s), BOOST_PP_FOR_40, BOOST_PP_TUPLE_EAT_4)(o(40, s), p, o, m)
+# define BOOST_PP_FOR_40_I(s, p, o, m) BOOST_PP_IF(p(41, s), m, BOOST_PP_TUPLE_EAT_2)(41, s) BOOST_PP_IF(p(41, s), BOOST_PP_FOR_41, BOOST_PP_TUPLE_EAT_4)(o(41, s), p, o, m)
+# define BOOST_PP_FOR_41_I(s, p, o, m) BOOST_PP_IF(p(42, s), m, BOOST_PP_TUPLE_EAT_2)(42, s) BOOST_PP_IF(p(42, s), BOOST_PP_FOR_42, BOOST_PP_TUPLE_EAT_4)(o(42, s), p, o, m)
+# define BOOST_PP_FOR_42_I(s, p, o, m) BOOST_PP_IF(p(43, s), m, BOOST_PP_TUPLE_EAT_2)(43, s) BOOST_PP_IF(p(43, s), BOOST_PP_FOR_43, BOOST_PP_TUPLE_EAT_4)(o(43, s), p, o, m)
+# define BOOST_PP_FOR_43_I(s, p, o, m) BOOST_PP_IF(p(44, s), m, BOOST_PP_TUPLE_EAT_2)(44, s) BOOST_PP_IF(p(44, s), BOOST_PP_FOR_44, BOOST_PP_TUPLE_EAT_4)(o(44, s), p, o, m)
+# define BOOST_PP_FOR_44_I(s, p, o, m) BOOST_PP_IF(p(45, s), m, BOOST_PP_TUPLE_EAT_2)(45, s) BOOST_PP_IF(p(45, s), BOOST_PP_FOR_45, BOOST_PP_TUPLE_EAT_4)(o(45, s), p, o, m)
+# define BOOST_PP_FOR_45_I(s, p, o, m) BOOST_PP_IF(p(46, s), m, BOOST_PP_TUPLE_EAT_2)(46, s) BOOST_PP_IF(p(46, s), BOOST_PP_FOR_46, BOOST_PP_TUPLE_EAT_4)(o(46, s), p, o, m)
+# define BOOST_PP_FOR_46_I(s, p, o, m) BOOST_PP_IF(p(47, s), m, BOOST_PP_TUPLE_EAT_2)(47, s) BOOST_PP_IF(p(47, s), BOOST_PP_FOR_47, BOOST_PP_TUPLE_EAT_4)(o(47, s), p, o, m)
+# define BOOST_PP_FOR_47_I(s, p, o, m) BOOST_PP_IF(p(48, s), m, BOOST_PP_TUPLE_EAT_2)(48, s) BOOST_PP_IF(p(48, s), BOOST_PP_FOR_48, BOOST_PP_TUPLE_EAT_4)(o(48, s), p, o, m)
+# define BOOST_PP_FOR_48_I(s, p, o, m) BOOST_PP_IF(p(49, s), m, BOOST_PP_TUPLE_EAT_2)(49, s) BOOST_PP_IF(p(49, s), BOOST_PP_FOR_49, BOOST_PP_TUPLE_EAT_4)(o(49, s), p, o, m)
+# define BOOST_PP_FOR_49_I(s, p, o, m) BOOST_PP_IF(p(50, s), m, BOOST_PP_TUPLE_EAT_2)(50, s) BOOST_PP_IF(p(50, s), BOOST_PP_FOR_50, BOOST_PP_TUPLE_EAT_4)(o(50, s), p, o, m)
+# define BOOST_PP_FOR_50_I(s, p, o, m) BOOST_PP_IF(p(51, s), m, BOOST_PP_TUPLE_EAT_2)(51, s) BOOST_PP_IF(p(51, s), BOOST_PP_FOR_51, BOOST_PP_TUPLE_EAT_4)(o(51, s), p, o, m)
+# define BOOST_PP_FOR_51_I(s, p, o, m) BOOST_PP_IF(p(52, s), m, BOOST_PP_TUPLE_EAT_2)(52, s) BOOST_PP_IF(p(52, s), BOOST_PP_FOR_52, BOOST_PP_TUPLE_EAT_4)(o(52, s), p, o, m)
+# define BOOST_PP_FOR_52_I(s, p, o, m) BOOST_PP_IF(p(53, s), m, BOOST_PP_TUPLE_EAT_2)(53, s) BOOST_PP_IF(p(53, s), BOOST_PP_FOR_53, BOOST_PP_TUPLE_EAT_4)(o(53, s), p, o, m)
+# define BOOST_PP_FOR_53_I(s, p, o, m) BOOST_PP_IF(p(54, s), m, BOOST_PP_TUPLE_EAT_2)(54, s) BOOST_PP_IF(p(54, s), BOOST_PP_FOR_54, BOOST_PP_TUPLE_EAT_4)(o(54, s), p, o, m)
+# define BOOST_PP_FOR_54_I(s, p, o, m) BOOST_PP_IF(p(55, s), m, BOOST_PP_TUPLE_EAT_2)(55, s) BOOST_PP_IF(p(55, s), BOOST_PP_FOR_55, BOOST_PP_TUPLE_EAT_4)(o(55, s), p, o, m)
+# define BOOST_PP_FOR_55_I(s, p, o, m) BOOST_PP_IF(p(56, s), m, BOOST_PP_TUPLE_EAT_2)(56, s) BOOST_PP_IF(p(56, s), BOOST_PP_FOR_56, BOOST_PP_TUPLE_EAT_4)(o(56, s), p, o, m)
+# define BOOST_PP_FOR_56_I(s, p, o, m) BOOST_PP_IF(p(57, s), m, BOOST_PP_TUPLE_EAT_2)(57, s) BOOST_PP_IF(p(57, s), BOOST_PP_FOR_57, BOOST_PP_TUPLE_EAT_4)(o(57, s), p, o, m)
+# define BOOST_PP_FOR_57_I(s, p, o, m) BOOST_PP_IF(p(58, s), m, BOOST_PP_TUPLE_EAT_2)(58, s) BOOST_PP_IF(p(58, s), BOOST_PP_FOR_58, BOOST_PP_TUPLE_EAT_4)(o(58, s), p, o, m)
+# define BOOST_PP_FOR_58_I(s, p, o, m) BOOST_PP_IF(p(59, s), m, BOOST_PP_TUPLE_EAT_2)(59, s) BOOST_PP_IF(p(59, s), BOOST_PP_FOR_59, BOOST_PP_TUPLE_EAT_4)(o(59, s), p, o, m)
+# define BOOST_PP_FOR_59_I(s, p, o, m) BOOST_PP_IF(p(60, s), m, BOOST_PP_TUPLE_EAT_2)(60, s) BOOST_PP_IF(p(60, s), BOOST_PP_FOR_60, BOOST_PP_TUPLE_EAT_4)(o(60, s), p, o, m)
+# define BOOST_PP_FOR_60_I(s, p, o, m) BOOST_PP_IF(p(61, s), m, BOOST_PP_TUPLE_EAT_2)(61, s) BOOST_PP_IF(p(61, s), BOOST_PP_FOR_61, BOOST_PP_TUPLE_EAT_4)(o(61, s), p, o, m)
+# define BOOST_PP_FOR_61_I(s, p, o, m) BOOST_PP_IF(p(62, s), m, BOOST_PP_TUPLE_EAT_2)(62, s) BOOST_PP_IF(p(62, s), BOOST_PP_FOR_62, BOOST_PP_TUPLE_EAT_4)(o(62, s), p, o, m)
+# define BOOST_PP_FOR_62_I(s, p, o, m) BOOST_PP_IF(p(63, s), m, BOOST_PP_TUPLE_EAT_2)(63, s) BOOST_PP_IF(p(63, s), BOOST_PP_FOR_63, BOOST_PP_TUPLE_EAT_4)(o(63, s), p, o, m)
+# define BOOST_PP_FOR_63_I(s, p, o, m) BOOST_PP_IF(p(64, s), m, BOOST_PP_TUPLE_EAT_2)(64, s) BOOST_PP_IF(p(64, s), BOOST_PP_FOR_64, BOOST_PP_TUPLE_EAT_4)(o(64, s), p, o, m)
+# define BOOST_PP_FOR_64_I(s, p, o, m) BOOST_PP_IF(p(65, s), m, BOOST_PP_TUPLE_EAT_2)(65, s) BOOST_PP_IF(p(65, s), BOOST_PP_FOR_65, BOOST_PP_TUPLE_EAT_4)(o(65, s), p, o, m)
+# define BOOST_PP_FOR_65_I(s, p, o, m) BOOST_PP_IF(p(66, s), m, BOOST_PP_TUPLE_EAT_2)(66, s) BOOST_PP_IF(p(66, s), BOOST_PP_FOR_66, BOOST_PP_TUPLE_EAT_4)(o(66, s), p, o, m)
+# define BOOST_PP_FOR_66_I(s, p, o, m) BOOST_PP_IF(p(67, s), m, BOOST_PP_TUPLE_EAT_2)(67, s) BOOST_PP_IF(p(67, s), BOOST_PP_FOR_67, BOOST_PP_TUPLE_EAT_4)(o(67, s), p, o, m)
+# define BOOST_PP_FOR_67_I(s, p, o, m) BOOST_PP_IF(p(68, s), m, BOOST_PP_TUPLE_EAT_2)(68, s) BOOST_PP_IF(p(68, s), BOOST_PP_FOR_68, BOOST_PP_TUPLE_EAT_4)(o(68, s), p, o, m)
+# define BOOST_PP_FOR_68_I(s, p, o, m) BOOST_PP_IF(p(69, s), m, BOOST_PP_TUPLE_EAT_2)(69, s) BOOST_PP_IF(p(69, s), BOOST_PP_FOR_69, BOOST_PP_TUPLE_EAT_4)(o(69, s), p, o, m)
+# define BOOST_PP_FOR_69_I(s, p, o, m) BOOST_PP_IF(p(70, s), m, BOOST_PP_TUPLE_EAT_2)(70, s) BOOST_PP_IF(p(70, s), BOOST_PP_FOR_70, BOOST_PP_TUPLE_EAT_4)(o(70, s), p, o, m)
+# define BOOST_PP_FOR_70_I(s, p, o, m) BOOST_PP_IF(p(71, s), m, BOOST_PP_TUPLE_EAT_2)(71, s) BOOST_PP_IF(p(71, s), BOOST_PP_FOR_71, BOOST_PP_TUPLE_EAT_4)(o(71, s), p, o, m)
+# define BOOST_PP_FOR_71_I(s, p, o, m) BOOST_PP_IF(p(72, s), m, BOOST_PP_TUPLE_EAT_2)(72, s) BOOST_PP_IF(p(72, s), BOOST_PP_FOR_72, BOOST_PP_TUPLE_EAT_4)(o(72, s), p, o, m)
+# define BOOST_PP_FOR_72_I(s, p, o, m) BOOST_PP_IF(p(73, s), m, BOOST_PP_TUPLE_EAT_2)(73, s) BOOST_PP_IF(p(73, s), BOOST_PP_FOR_73, BOOST_PP_TUPLE_EAT_4)(o(73, s), p, o, m)
+# define BOOST_PP_FOR_73_I(s, p, o, m) BOOST_PP_IF(p(74, s), m, BOOST_PP_TUPLE_EAT_2)(74, s) BOOST_PP_IF(p(74, s), BOOST_PP_FOR_74, BOOST_PP_TUPLE_EAT_4)(o(74, s), p, o, m)
+# define BOOST_PP_FOR_74_I(s, p, o, m) BOOST_PP_IF(p(75, s), m, BOOST_PP_TUPLE_EAT_2)(75, s) BOOST_PP_IF(p(75, s), BOOST_PP_FOR_75, BOOST_PP_TUPLE_EAT_4)(o(75, s), p, o, m)
+# define BOOST_PP_FOR_75_I(s, p, o, m) BOOST_PP_IF(p(76, s), m, BOOST_PP_TUPLE_EAT_2)(76, s) BOOST_PP_IF(p(76, s), BOOST_PP_FOR_76, BOOST_PP_TUPLE_EAT_4)(o(76, s), p, o, m)
+# define BOOST_PP_FOR_76_I(s, p, o, m) BOOST_PP_IF(p(77, s), m, BOOST_PP_TUPLE_EAT_2)(77, s) BOOST_PP_IF(p(77, s), BOOST_PP_FOR_77, BOOST_PP_TUPLE_EAT_4)(o(77, s), p, o, m)
+# define BOOST_PP_FOR_77_I(s, p, o, m) BOOST_PP_IF(p(78, s), m, BOOST_PP_TUPLE_EAT_2)(78, s) BOOST_PP_IF(p(78, s), BOOST_PP_FOR_78, BOOST_PP_TUPLE_EAT_4)(o(78, s), p, o, m)
+# define BOOST_PP_FOR_78_I(s, p, o, m) BOOST_PP_IF(p(79, s), m, BOOST_PP_TUPLE_EAT_2)(79, s) BOOST_PP_IF(p(79, s), BOOST_PP_FOR_79, BOOST_PP_TUPLE_EAT_4)(o(79, s), p, o, m)
+# define BOOST_PP_FOR_79_I(s, p, o, m) BOOST_PP_IF(p(80, s), m, BOOST_PP_TUPLE_EAT_2)(80, s) BOOST_PP_IF(p(80, s), BOOST_PP_FOR_80, BOOST_PP_TUPLE_EAT_4)(o(80, s), p, o, m)
+# define BOOST_PP_FOR_80_I(s, p, o, m) BOOST_PP_IF(p(81, s), m, BOOST_PP_TUPLE_EAT_2)(81, s) BOOST_PP_IF(p(81, s), BOOST_PP_FOR_81, BOOST_PP_TUPLE_EAT_4)(o(81, s), p, o, m)
+# define BOOST_PP_FOR_81_I(s, p, o, m) BOOST_PP_IF(p(82, s), m, BOOST_PP_TUPLE_EAT_2)(82, s) BOOST_PP_IF(p(82, s), BOOST_PP_FOR_82, BOOST_PP_TUPLE_EAT_4)(o(82, s), p, o, m)
+# define BOOST_PP_FOR_82_I(s, p, o, m) BOOST_PP_IF(p(83, s), m, BOOST_PP_TUPLE_EAT_2)(83, s) BOOST_PP_IF(p(83, s), BOOST_PP_FOR_83, BOOST_PP_TUPLE_EAT_4)(o(83, s), p, o, m)
+# define BOOST_PP_FOR_83_I(s, p, o, m) BOOST_PP_IF(p(84, s), m, BOOST_PP_TUPLE_EAT_2)(84, s) BOOST_PP_IF(p(84, s), BOOST_PP_FOR_84, BOOST_PP_TUPLE_EAT_4)(o(84, s), p, o, m)
+# define BOOST_PP_FOR_84_I(s, p, o, m) BOOST_PP_IF(p(85, s), m, BOOST_PP_TUPLE_EAT_2)(85, s) BOOST_PP_IF(p(85, s), BOOST_PP_FOR_85, BOOST_PP_TUPLE_EAT_4)(o(85, s), p, o, m)
+# define BOOST_PP_FOR_85_I(s, p, o, m) BOOST_PP_IF(p(86, s), m, BOOST_PP_TUPLE_EAT_2)(86, s) BOOST_PP_IF(p(86, s), BOOST_PP_FOR_86, BOOST_PP_TUPLE_EAT_4)(o(86, s), p, o, m)
+# define BOOST_PP_FOR_86_I(s, p, o, m) BOOST_PP_IF(p(87, s), m, BOOST_PP_TUPLE_EAT_2)(87, s) BOOST_PP_IF(p(87, s), BOOST_PP_FOR_87, BOOST_PP_TUPLE_EAT_4)(o(87, s), p, o, m)
+# define BOOST_PP_FOR_87_I(s, p, o, m) BOOST_PP_IF(p(88, s), m, BOOST_PP_TUPLE_EAT_2)(88, s) BOOST_PP_IF(p(88, s), BOOST_PP_FOR_88, BOOST_PP_TUPLE_EAT_4)(o(88, s), p, o, m)
+# define BOOST_PP_FOR_88_I(s, p, o, m) BOOST_PP_IF(p(89, s), m, BOOST_PP_TUPLE_EAT_2)(89, s) BOOST_PP_IF(p(89, s), BOOST_PP_FOR_89, BOOST_PP_TUPLE_EAT_4)(o(89, s), p, o, m)
+# define BOOST_PP_FOR_89_I(s, p, o, m) BOOST_PP_IF(p(90, s), m, BOOST_PP_TUPLE_EAT_2)(90, s) BOOST_PP_IF(p(90, s), BOOST_PP_FOR_90, BOOST_PP_TUPLE_EAT_4)(o(90, s), p, o, m)
+# define BOOST_PP_FOR_90_I(s, p, o, m) BOOST_PP_IF(p(91, s), m, BOOST_PP_TUPLE_EAT_2)(91, s) BOOST_PP_IF(p(91, s), BOOST_PP_FOR_91, BOOST_PP_TUPLE_EAT_4)(o(91, s), p, o, m)
+# define BOOST_PP_FOR_91_I(s, p, o, m) BOOST_PP_IF(p(92, s), m, BOOST_PP_TUPLE_EAT_2)(92, s) BOOST_PP_IF(p(92, s), BOOST_PP_FOR_92, BOOST_PP_TUPLE_EAT_4)(o(92, s), p, o, m)
+# define BOOST_PP_FOR_92_I(s, p, o, m) BOOST_PP_IF(p(93, s), m, BOOST_PP_TUPLE_EAT_2)(93, s) BOOST_PP_IF(p(93, s), BOOST_PP_FOR_93, BOOST_PP_TUPLE_EAT_4)(o(93, s), p, o, m)
+# define BOOST_PP_FOR_93_I(s, p, o, m) BOOST_PP_IF(p(94, s), m, BOOST_PP_TUPLE_EAT_2)(94, s) BOOST_PP_IF(p(94, s), BOOST_PP_FOR_94, BOOST_PP_TUPLE_EAT_4)(o(94, s), p, o, m)
+# define BOOST_PP_FOR_94_I(s, p, o, m) BOOST_PP_IF(p(95, s), m, BOOST_PP_TUPLE_EAT_2)(95, s) BOOST_PP_IF(p(95, s), BOOST_PP_FOR_95, BOOST_PP_TUPLE_EAT_4)(o(95, s), p, o, m)
+# define BOOST_PP_FOR_95_I(s, p, o, m) BOOST_PP_IF(p(96, s), m, BOOST_PP_TUPLE_EAT_2)(96, s) BOOST_PP_IF(p(96, s), BOOST_PP_FOR_96, BOOST_PP_TUPLE_EAT_4)(o(96, s), p, o, m)
+# define BOOST_PP_FOR_96_I(s, p, o, m) BOOST_PP_IF(p(97, s), m, BOOST_PP_TUPLE_EAT_2)(97, s) BOOST_PP_IF(p(97, s), BOOST_PP_FOR_97, BOOST_PP_TUPLE_EAT_4)(o(97, s), p, o, m)
+# define BOOST_PP_FOR_97_I(s, p, o, m) BOOST_PP_IF(p(98, s), m, BOOST_PP_TUPLE_EAT_2)(98, s) BOOST_PP_IF(p(98, s), BOOST_PP_FOR_98, BOOST_PP_TUPLE_EAT_4)(o(98, s), p, o, m)
+# define BOOST_PP_FOR_98_I(s, p, o, m) BOOST_PP_IF(p(99, s), m, BOOST_PP_TUPLE_EAT_2)(99, s) BOOST_PP_IF(p(99, s), BOOST_PP_FOR_99, BOOST_PP_TUPLE_EAT_4)(o(99, s), p, o, m)
+# define BOOST_PP_FOR_99_I(s, p, o, m) BOOST_PP_IF(p(100, s), m, BOOST_PP_TUPLE_EAT_2)(100, s) BOOST_PP_IF(p(100, s), BOOST_PP_FOR_100, BOOST_PP_TUPLE_EAT_4)(o(100, s), p, o, m)
+# define BOOST_PP_FOR_100_I(s, p, o, m) BOOST_PP_IF(p(101, s), m, BOOST_PP_TUPLE_EAT_2)(101, s) BOOST_PP_IF(p(101, s), BOOST_PP_FOR_101, BOOST_PP_TUPLE_EAT_4)(o(101, s), p, o, m)
+# define BOOST_PP_FOR_101_I(s, p, o, m) BOOST_PP_IF(p(102, s), m, BOOST_PP_TUPLE_EAT_2)(102, s) BOOST_PP_IF(p(102, s), BOOST_PP_FOR_102, BOOST_PP_TUPLE_EAT_4)(o(102, s), p, o, m)
+# define BOOST_PP_FOR_102_I(s, p, o, m) BOOST_PP_IF(p(103, s), m, BOOST_PP_TUPLE_EAT_2)(103, s) BOOST_PP_IF(p(103, s), BOOST_PP_FOR_103, BOOST_PP_TUPLE_EAT_4)(o(103, s), p, o, m)
+# define BOOST_PP_FOR_103_I(s, p, o, m) BOOST_PP_IF(p(104, s), m, BOOST_PP_TUPLE_EAT_2)(104, s) BOOST_PP_IF(p(104, s), BOOST_PP_FOR_104, BOOST_PP_TUPLE_EAT_4)(o(104, s), p, o, m)
+# define BOOST_PP_FOR_104_I(s, p, o, m) BOOST_PP_IF(p(105, s), m, BOOST_PP_TUPLE_EAT_2)(105, s) BOOST_PP_IF(p(105, s), BOOST_PP_FOR_105, BOOST_PP_TUPLE_EAT_4)(o(105, s), p, o, m)
+# define BOOST_PP_FOR_105_I(s, p, o, m) BOOST_PP_IF(p(106, s), m, BOOST_PP_TUPLE_EAT_2)(106, s) BOOST_PP_IF(p(106, s), BOOST_PP_FOR_106, BOOST_PP_TUPLE_EAT_4)(o(106, s), p, o, m)
+# define BOOST_PP_FOR_106_I(s, p, o, m) BOOST_PP_IF(p(107, s), m, BOOST_PP_TUPLE_EAT_2)(107, s) BOOST_PP_IF(p(107, s), BOOST_PP_FOR_107, BOOST_PP_TUPLE_EAT_4)(o(107, s), p, o, m)
+# define BOOST_PP_FOR_107_I(s, p, o, m) BOOST_PP_IF(p(108, s), m, BOOST_PP_TUPLE_EAT_2)(108, s) BOOST_PP_IF(p(108, s), BOOST_PP_FOR_108, BOOST_PP_TUPLE_EAT_4)(o(108, s), p, o, m)
+# define BOOST_PP_FOR_108_I(s, p, o, m) BOOST_PP_IF(p(109, s), m, BOOST_PP_TUPLE_EAT_2)(109, s) BOOST_PP_IF(p(109, s), BOOST_PP_FOR_109, BOOST_PP_TUPLE_EAT_4)(o(109, s), p, o, m)
+# define BOOST_PP_FOR_109_I(s, p, o, m) BOOST_PP_IF(p(110, s), m, BOOST_PP_TUPLE_EAT_2)(110, s) BOOST_PP_IF(p(110, s), BOOST_PP_FOR_110, BOOST_PP_TUPLE_EAT_4)(o(110, s), p, o, m)
+# define BOOST_PP_FOR_110_I(s, p, o, m) BOOST_PP_IF(p(111, s), m, BOOST_PP_TUPLE_EAT_2)(111, s) BOOST_PP_IF(p(111, s), BOOST_PP_FOR_111, BOOST_PP_TUPLE_EAT_4)(o(111, s), p, o, m)
+# define BOOST_PP_FOR_111_I(s, p, o, m) BOOST_PP_IF(p(112, s), m, BOOST_PP_TUPLE_EAT_2)(112, s) BOOST_PP_IF(p(112, s), BOOST_PP_FOR_112, BOOST_PP_TUPLE_EAT_4)(o(112, s), p, o, m)
+# define BOOST_PP_FOR_112_I(s, p, o, m) BOOST_PP_IF(p(113, s), m, BOOST_PP_TUPLE_EAT_2)(113, s) BOOST_PP_IF(p(113, s), BOOST_PP_FOR_113, BOOST_PP_TUPLE_EAT_4)(o(113, s), p, o, m)
+# define BOOST_PP_FOR_113_I(s, p, o, m) BOOST_PP_IF(p(114, s), m, BOOST_PP_TUPLE_EAT_2)(114, s) BOOST_PP_IF(p(114, s), BOOST_PP_FOR_114, BOOST_PP_TUPLE_EAT_4)(o(114, s), p, o, m)
+# define BOOST_PP_FOR_114_I(s, p, o, m) BOOST_PP_IF(p(115, s), m, BOOST_PP_TUPLE_EAT_2)(115, s) BOOST_PP_IF(p(115, s), BOOST_PP_FOR_115, BOOST_PP_TUPLE_EAT_4)(o(115, s), p, o, m)
+# define BOOST_PP_FOR_115_I(s, p, o, m) BOOST_PP_IF(p(116, s), m, BOOST_PP_TUPLE_EAT_2)(116, s) BOOST_PP_IF(p(116, s), BOOST_PP_FOR_116, BOOST_PP_TUPLE_EAT_4)(o(116, s), p, o, m)
+# define BOOST_PP_FOR_116_I(s, p, o, m) BOOST_PP_IF(p(117, s), m, BOOST_PP_TUPLE_EAT_2)(117, s) BOOST_PP_IF(p(117, s), BOOST_PP_FOR_117, BOOST_PP_TUPLE_EAT_4)(o(117, s), p, o, m)
+# define BOOST_PP_FOR_117_I(s, p, o, m) BOOST_PP_IF(p(118, s), m, BOOST_PP_TUPLE_EAT_2)(118, s) BOOST_PP_IF(p(118, s), BOOST_PP_FOR_118, BOOST_PP_TUPLE_EAT_4)(o(118, s), p, o, m)
+# define BOOST_PP_FOR_118_I(s, p, o, m) BOOST_PP_IF(p(119, s), m, BOOST_PP_TUPLE_EAT_2)(119, s) BOOST_PP_IF(p(119, s), BOOST_PP_FOR_119, BOOST_PP_TUPLE_EAT_4)(o(119, s), p, o, m)
+# define BOOST_PP_FOR_119_I(s, p, o, m) BOOST_PP_IF(p(120, s), m, BOOST_PP_TUPLE_EAT_2)(120, s) BOOST_PP_IF(p(120, s), BOOST_PP_FOR_120, BOOST_PP_TUPLE_EAT_4)(o(120, s), p, o, m)
+# define BOOST_PP_FOR_120_I(s, p, o, m) BOOST_PP_IF(p(121, s), m, BOOST_PP_TUPLE_EAT_2)(121, s) BOOST_PP_IF(p(121, s), BOOST_PP_FOR_121, BOOST_PP_TUPLE_EAT_4)(o(121, s), p, o, m)
+# define BOOST_PP_FOR_121_I(s, p, o, m) BOOST_PP_IF(p(122, s), m, BOOST_PP_TUPLE_EAT_2)(122, s) BOOST_PP_IF(p(122, s), BOOST_PP_FOR_122, BOOST_PP_TUPLE_EAT_4)(o(122, s), p, o, m)
+# define BOOST_PP_FOR_122_I(s, p, o, m) BOOST_PP_IF(p(123, s), m, BOOST_PP_TUPLE_EAT_2)(123, s) BOOST_PP_IF(p(123, s), BOOST_PP_FOR_123, BOOST_PP_TUPLE_EAT_4)(o(123, s), p, o, m)
+# define BOOST_PP_FOR_123_I(s, p, o, m) BOOST_PP_IF(p(124, s), m, BOOST_PP_TUPLE_EAT_2)(124, s) BOOST_PP_IF(p(124, s), BOOST_PP_FOR_124, BOOST_PP_TUPLE_EAT_4)(o(124, s), p, o, m)
+# define BOOST_PP_FOR_124_I(s, p, o, m) BOOST_PP_IF(p(125, s), m, BOOST_PP_TUPLE_EAT_2)(125, s) BOOST_PP_IF(p(125, s), BOOST_PP_FOR_125, BOOST_PP_TUPLE_EAT_4)(o(125, s), p, o, m)
+# define BOOST_PP_FOR_125_I(s, p, o, m) BOOST_PP_IF(p(126, s), m, BOOST_PP_TUPLE_EAT_2)(126, s) BOOST_PP_IF(p(126, s), BOOST_PP_FOR_126, BOOST_PP_TUPLE_EAT_4)(o(126, s), p, o, m)
+# define BOOST_PP_FOR_126_I(s, p, o, m) BOOST_PP_IF(p(127, s), m, BOOST_PP_TUPLE_EAT_2)(127, s) BOOST_PP_IF(p(127, s), BOOST_PP_FOR_127, BOOST_PP_TUPLE_EAT_4)(o(127, s), p, o, m)
+# define BOOST_PP_FOR_127_I(s, p, o, m) BOOST_PP_IF(p(128, s), m, BOOST_PP_TUPLE_EAT_2)(128, s) BOOST_PP_IF(p(128, s), BOOST_PP_FOR_128, BOOST_PP_TUPLE_EAT_4)(o(128, s), p, o, m)
+# define BOOST_PP_FOR_128_I(s, p, o, m) BOOST_PP_IF(p(129, s), m, BOOST_PP_TUPLE_EAT_2)(129, s) BOOST_PP_IF(p(129, s), BOOST_PP_FOR_129, BOOST_PP_TUPLE_EAT_4)(o(129, s), p, o, m)
+# define BOOST_PP_FOR_129_I(s, p, o, m) BOOST_PP_IF(p(130, s), m, BOOST_PP_TUPLE_EAT_2)(130, s) BOOST_PP_IF(p(130, s), BOOST_PP_FOR_130, BOOST_PP_TUPLE_EAT_4)(o(130, s), p, o, m)
+# define BOOST_PP_FOR_130_I(s, p, o, m) BOOST_PP_IF(p(131, s), m, BOOST_PP_TUPLE_EAT_2)(131, s) BOOST_PP_IF(p(131, s), BOOST_PP_FOR_131, BOOST_PP_TUPLE_EAT_4)(o(131, s), p, o, m)
+# define BOOST_PP_FOR_131_I(s, p, o, m) BOOST_PP_IF(p(132, s), m, BOOST_PP_TUPLE_EAT_2)(132, s) BOOST_PP_IF(p(132, s), BOOST_PP_FOR_132, BOOST_PP_TUPLE_EAT_4)(o(132, s), p, o, m)
+# define BOOST_PP_FOR_132_I(s, p, o, m) BOOST_PP_IF(p(133, s), m, BOOST_PP_TUPLE_EAT_2)(133, s) BOOST_PP_IF(p(133, s), BOOST_PP_FOR_133, BOOST_PP_TUPLE_EAT_4)(o(133, s), p, o, m)
+# define BOOST_PP_FOR_133_I(s, p, o, m) BOOST_PP_IF(p(134, s), m, BOOST_PP_TUPLE_EAT_2)(134, s) BOOST_PP_IF(p(134, s), BOOST_PP_FOR_134, BOOST_PP_TUPLE_EAT_4)(o(134, s), p, o, m)
+# define BOOST_PP_FOR_134_I(s, p, o, m) BOOST_PP_IF(p(135, s), m, BOOST_PP_TUPLE_EAT_2)(135, s) BOOST_PP_IF(p(135, s), BOOST_PP_FOR_135, BOOST_PP_TUPLE_EAT_4)(o(135, s), p, o, m)
+# define BOOST_PP_FOR_135_I(s, p, o, m) BOOST_PP_IF(p(136, s), m, BOOST_PP_TUPLE_EAT_2)(136, s) BOOST_PP_IF(p(136, s), BOOST_PP_FOR_136, BOOST_PP_TUPLE_EAT_4)(o(136, s), p, o, m)
+# define BOOST_PP_FOR_136_I(s, p, o, m) BOOST_PP_IF(p(137, s), m, BOOST_PP_TUPLE_EAT_2)(137, s) BOOST_PP_IF(p(137, s), BOOST_PP_FOR_137, BOOST_PP_TUPLE_EAT_4)(o(137, s), p, o, m)
+# define BOOST_PP_FOR_137_I(s, p, o, m) BOOST_PP_IF(p(138, s), m, BOOST_PP_TUPLE_EAT_2)(138, s) BOOST_PP_IF(p(138, s), BOOST_PP_FOR_138, BOOST_PP_TUPLE_EAT_4)(o(138, s), p, o, m)
+# define BOOST_PP_FOR_138_I(s, p, o, m) BOOST_PP_IF(p(139, s), m, BOOST_PP_TUPLE_EAT_2)(139, s) BOOST_PP_IF(p(139, s), BOOST_PP_FOR_139, BOOST_PP_TUPLE_EAT_4)(o(139, s), p, o, m)
+# define BOOST_PP_FOR_139_I(s, p, o, m) BOOST_PP_IF(p(140, s), m, BOOST_PP_TUPLE_EAT_2)(140, s) BOOST_PP_IF(p(140, s), BOOST_PP_FOR_140, BOOST_PP_TUPLE_EAT_4)(o(140, s), p, o, m)
+# define BOOST_PP_FOR_140_I(s, p, o, m) BOOST_PP_IF(p(141, s), m, BOOST_PP_TUPLE_EAT_2)(141, s) BOOST_PP_IF(p(141, s), BOOST_PP_FOR_141, BOOST_PP_TUPLE_EAT_4)(o(141, s), p, o, m)
+# define BOOST_PP_FOR_141_I(s, p, o, m) BOOST_PP_IF(p(142, s), m, BOOST_PP_TUPLE_EAT_2)(142, s) BOOST_PP_IF(p(142, s), BOOST_PP_FOR_142, BOOST_PP_TUPLE_EAT_4)(o(142, s), p, o, m)
+# define BOOST_PP_FOR_142_I(s, p, o, m) BOOST_PP_IF(p(143, s), m, BOOST_PP_TUPLE_EAT_2)(143, s) BOOST_PP_IF(p(143, s), BOOST_PP_FOR_143, BOOST_PP_TUPLE_EAT_4)(o(143, s), p, o, m)
+# define BOOST_PP_FOR_143_I(s, p, o, m) BOOST_PP_IF(p(144, s), m, BOOST_PP_TUPLE_EAT_2)(144, s) BOOST_PP_IF(p(144, s), BOOST_PP_FOR_144, BOOST_PP_TUPLE_EAT_4)(o(144, s), p, o, m)
+# define BOOST_PP_FOR_144_I(s, p, o, m) BOOST_PP_IF(p(145, s), m, BOOST_PP_TUPLE_EAT_2)(145, s) BOOST_PP_IF(p(145, s), BOOST_PP_FOR_145, BOOST_PP_TUPLE_EAT_4)(o(145, s), p, o, m)
+# define BOOST_PP_FOR_145_I(s, p, o, m) BOOST_PP_IF(p(146, s), m, BOOST_PP_TUPLE_EAT_2)(146, s) BOOST_PP_IF(p(146, s), BOOST_PP_FOR_146, BOOST_PP_TUPLE_EAT_4)(o(146, s), p, o, m)
+# define BOOST_PP_FOR_146_I(s, p, o, m) BOOST_PP_IF(p(147, s), m, BOOST_PP_TUPLE_EAT_2)(147, s) BOOST_PP_IF(p(147, s), BOOST_PP_FOR_147, BOOST_PP_TUPLE_EAT_4)(o(147, s), p, o, m)
+# define BOOST_PP_FOR_147_I(s, p, o, m) BOOST_PP_IF(p(148, s), m, BOOST_PP_TUPLE_EAT_2)(148, s) BOOST_PP_IF(p(148, s), BOOST_PP_FOR_148, BOOST_PP_TUPLE_EAT_4)(o(148, s), p, o, m)
+# define BOOST_PP_FOR_148_I(s, p, o, m) BOOST_PP_IF(p(149, s), m, BOOST_PP_TUPLE_EAT_2)(149, s) BOOST_PP_IF(p(149, s), BOOST_PP_FOR_149, BOOST_PP_TUPLE_EAT_4)(o(149, s), p, o, m)
+# define BOOST_PP_FOR_149_I(s, p, o, m) BOOST_PP_IF(p(150, s), m, BOOST_PP_TUPLE_EAT_2)(150, s) BOOST_PP_IF(p(150, s), BOOST_PP_FOR_150, BOOST_PP_TUPLE_EAT_4)(o(150, s), p, o, m)
+# define BOOST_PP_FOR_150_I(s, p, o, m) BOOST_PP_IF(p(151, s), m, BOOST_PP_TUPLE_EAT_2)(151, s) BOOST_PP_IF(p(151, s), BOOST_PP_FOR_151, BOOST_PP_TUPLE_EAT_4)(o(151, s), p, o, m)
+# define BOOST_PP_FOR_151_I(s, p, o, m) BOOST_PP_IF(p(152, s), m, BOOST_PP_TUPLE_EAT_2)(152, s) BOOST_PP_IF(p(152, s), BOOST_PP_FOR_152, BOOST_PP_TUPLE_EAT_4)(o(152, s), p, o, m)
+# define BOOST_PP_FOR_152_I(s, p, o, m) BOOST_PP_IF(p(153, s), m, BOOST_PP_TUPLE_EAT_2)(153, s) BOOST_PP_IF(p(153, s), BOOST_PP_FOR_153, BOOST_PP_TUPLE_EAT_4)(o(153, s), p, o, m)
+# define BOOST_PP_FOR_153_I(s, p, o, m) BOOST_PP_IF(p(154, s), m, BOOST_PP_TUPLE_EAT_2)(154, s) BOOST_PP_IF(p(154, s), BOOST_PP_FOR_154, BOOST_PP_TUPLE_EAT_4)(o(154, s), p, o, m)
+# define BOOST_PP_FOR_154_I(s, p, o, m) BOOST_PP_IF(p(155, s), m, BOOST_PP_TUPLE_EAT_2)(155, s) BOOST_PP_IF(p(155, s), BOOST_PP_FOR_155, BOOST_PP_TUPLE_EAT_4)(o(155, s), p, o, m)
+# define BOOST_PP_FOR_155_I(s, p, o, m) BOOST_PP_IF(p(156, s), m, BOOST_PP_TUPLE_EAT_2)(156, s) BOOST_PP_IF(p(156, s), BOOST_PP_FOR_156, BOOST_PP_TUPLE_EAT_4)(o(156, s), p, o, m)
+# define BOOST_PP_FOR_156_I(s, p, o, m) BOOST_PP_IF(p(157, s), m, BOOST_PP_TUPLE_EAT_2)(157, s) BOOST_PP_IF(p(157, s), BOOST_PP_FOR_157, BOOST_PP_TUPLE_EAT_4)(o(157, s), p, o, m)
+# define BOOST_PP_FOR_157_I(s, p, o, m) BOOST_PP_IF(p(158, s), m, BOOST_PP_TUPLE_EAT_2)(158, s) BOOST_PP_IF(p(158, s), BOOST_PP_FOR_158, BOOST_PP_TUPLE_EAT_4)(o(158, s), p, o, m)
+# define BOOST_PP_FOR_158_I(s, p, o, m) BOOST_PP_IF(p(159, s), m, BOOST_PP_TUPLE_EAT_2)(159, s) BOOST_PP_IF(p(159, s), BOOST_PP_FOR_159, BOOST_PP_TUPLE_EAT_4)(o(159, s), p, o, m)
+# define BOOST_PP_FOR_159_I(s, p, o, m) BOOST_PP_IF(p(160, s), m, BOOST_PP_TUPLE_EAT_2)(160, s) BOOST_PP_IF(p(160, s), BOOST_PP_FOR_160, BOOST_PP_TUPLE_EAT_4)(o(160, s), p, o, m)
+# define BOOST_PP_FOR_160_I(s, p, o, m) BOOST_PP_IF(p(161, s), m, BOOST_PP_TUPLE_EAT_2)(161, s) BOOST_PP_IF(p(161, s), BOOST_PP_FOR_161, BOOST_PP_TUPLE_EAT_4)(o(161, s), p, o, m)
+# define BOOST_PP_FOR_161_I(s, p, o, m) BOOST_PP_IF(p(162, s), m, BOOST_PP_TUPLE_EAT_2)(162, s) BOOST_PP_IF(p(162, s), BOOST_PP_FOR_162, BOOST_PP_TUPLE_EAT_4)(o(162, s), p, o, m)
+# define BOOST_PP_FOR_162_I(s, p, o, m) BOOST_PP_IF(p(163, s), m, BOOST_PP_TUPLE_EAT_2)(163, s) BOOST_PP_IF(p(163, s), BOOST_PP_FOR_163, BOOST_PP_TUPLE_EAT_4)(o(163, s), p, o, m)
+# define BOOST_PP_FOR_163_I(s, p, o, m) BOOST_PP_IF(p(164, s), m, BOOST_PP_TUPLE_EAT_2)(164, s) BOOST_PP_IF(p(164, s), BOOST_PP_FOR_164, BOOST_PP_TUPLE_EAT_4)(o(164, s), p, o, m)
+# define BOOST_PP_FOR_164_I(s, p, o, m) BOOST_PP_IF(p(165, s), m, BOOST_PP_TUPLE_EAT_2)(165, s) BOOST_PP_IF(p(165, s), BOOST_PP_FOR_165, BOOST_PP_TUPLE_EAT_4)(o(165, s), p, o, m)
+# define BOOST_PP_FOR_165_I(s, p, o, m) BOOST_PP_IF(p(166, s), m, BOOST_PP_TUPLE_EAT_2)(166, s) BOOST_PP_IF(p(166, s), BOOST_PP_FOR_166, BOOST_PP_TUPLE_EAT_4)(o(166, s), p, o, m)
+# define BOOST_PP_FOR_166_I(s, p, o, m) BOOST_PP_IF(p(167, s), m, BOOST_PP_TUPLE_EAT_2)(167, s) BOOST_PP_IF(p(167, s), BOOST_PP_FOR_167, BOOST_PP_TUPLE_EAT_4)(o(167, s), p, o, m)
+# define BOOST_PP_FOR_167_I(s, p, o, m) BOOST_PP_IF(p(168, s), m, BOOST_PP_TUPLE_EAT_2)(168, s) BOOST_PP_IF(p(168, s), BOOST_PP_FOR_168, BOOST_PP_TUPLE_EAT_4)(o(168, s), p, o, m)
+# define BOOST_PP_FOR_168_I(s, p, o, m) BOOST_PP_IF(p(169, s), m, BOOST_PP_TUPLE_EAT_2)(169, s) BOOST_PP_IF(p(169, s), BOOST_PP_FOR_169, BOOST_PP_TUPLE_EAT_4)(o(169, s), p, o, m)
+# define BOOST_PP_FOR_169_I(s, p, o, m) BOOST_PP_IF(p(170, s), m, BOOST_PP_TUPLE_EAT_2)(170, s) BOOST_PP_IF(p(170, s), BOOST_PP_FOR_170, BOOST_PP_TUPLE_EAT_4)(o(170, s), p, o, m)
+# define BOOST_PP_FOR_170_I(s, p, o, m) BOOST_PP_IF(p(171, s), m, BOOST_PP_TUPLE_EAT_2)(171, s) BOOST_PP_IF(p(171, s), BOOST_PP_FOR_171, BOOST_PP_TUPLE_EAT_4)(o(171, s), p, o, m)
+# define BOOST_PP_FOR_171_I(s, p, o, m) BOOST_PP_IF(p(172, s), m, BOOST_PP_TUPLE_EAT_2)(172, s) BOOST_PP_IF(p(172, s), BOOST_PP_FOR_172, BOOST_PP_TUPLE_EAT_4)(o(172, s), p, o, m)
+# define BOOST_PP_FOR_172_I(s, p, o, m) BOOST_PP_IF(p(173, s), m, BOOST_PP_TUPLE_EAT_2)(173, s) BOOST_PP_IF(p(173, s), BOOST_PP_FOR_173, BOOST_PP_TUPLE_EAT_4)(o(173, s), p, o, m)
+# define BOOST_PP_FOR_173_I(s, p, o, m) BOOST_PP_IF(p(174, s), m, BOOST_PP_TUPLE_EAT_2)(174, s) BOOST_PP_IF(p(174, s), BOOST_PP_FOR_174, BOOST_PP_TUPLE_EAT_4)(o(174, s), p, o, m)
+# define BOOST_PP_FOR_174_I(s, p, o, m) BOOST_PP_IF(p(175, s), m, BOOST_PP_TUPLE_EAT_2)(175, s) BOOST_PP_IF(p(175, s), BOOST_PP_FOR_175, BOOST_PP_TUPLE_EAT_4)(o(175, s), p, o, m)
+# define BOOST_PP_FOR_175_I(s, p, o, m) BOOST_PP_IF(p(176, s), m, BOOST_PP_TUPLE_EAT_2)(176, s) BOOST_PP_IF(p(176, s), BOOST_PP_FOR_176, BOOST_PP_TUPLE_EAT_4)(o(176, s), p, o, m)
+# define BOOST_PP_FOR_176_I(s, p, o, m) BOOST_PP_IF(p(177, s), m, BOOST_PP_TUPLE_EAT_2)(177, s) BOOST_PP_IF(p(177, s), BOOST_PP_FOR_177, BOOST_PP_TUPLE_EAT_4)(o(177, s), p, o, m)
+# define BOOST_PP_FOR_177_I(s, p, o, m) BOOST_PP_IF(p(178, s), m, BOOST_PP_TUPLE_EAT_2)(178, s) BOOST_PP_IF(p(178, s), BOOST_PP_FOR_178, BOOST_PP_TUPLE_EAT_4)(o(178, s), p, o, m)
+# define BOOST_PP_FOR_178_I(s, p, o, m) BOOST_PP_IF(p(179, s), m, BOOST_PP_TUPLE_EAT_2)(179, s) BOOST_PP_IF(p(179, s), BOOST_PP_FOR_179, BOOST_PP_TUPLE_EAT_4)(o(179, s), p, o, m)
+# define BOOST_PP_FOR_179_I(s, p, o, m) BOOST_PP_IF(p(180, s), m, BOOST_PP_TUPLE_EAT_2)(180, s) BOOST_PP_IF(p(180, s), BOOST_PP_FOR_180, BOOST_PP_TUPLE_EAT_4)(o(180, s), p, o, m)
+# define BOOST_PP_FOR_180_I(s, p, o, m) BOOST_PP_IF(p(181, s), m, BOOST_PP_TUPLE_EAT_2)(181, s) BOOST_PP_IF(p(181, s), BOOST_PP_FOR_181, BOOST_PP_TUPLE_EAT_4)(o(181, s), p, o, m)
+# define BOOST_PP_FOR_181_I(s, p, o, m) BOOST_PP_IF(p(182, s), m, BOOST_PP_TUPLE_EAT_2)(182, s) BOOST_PP_IF(p(182, s), BOOST_PP_FOR_182, BOOST_PP_TUPLE_EAT_4)(o(182, s), p, o, m)
+# define BOOST_PP_FOR_182_I(s, p, o, m) BOOST_PP_IF(p(183, s), m, BOOST_PP_TUPLE_EAT_2)(183, s) BOOST_PP_IF(p(183, s), BOOST_PP_FOR_183, BOOST_PP_TUPLE_EAT_4)(o(183, s), p, o, m)
+# define BOOST_PP_FOR_183_I(s, p, o, m) BOOST_PP_IF(p(184, s), m, BOOST_PP_TUPLE_EAT_2)(184, s) BOOST_PP_IF(p(184, s), BOOST_PP_FOR_184, BOOST_PP_TUPLE_EAT_4)(o(184, s), p, o, m)
+# define BOOST_PP_FOR_184_I(s, p, o, m) BOOST_PP_IF(p(185, s), m, BOOST_PP_TUPLE_EAT_2)(185, s) BOOST_PP_IF(p(185, s), BOOST_PP_FOR_185, BOOST_PP_TUPLE_EAT_4)(o(185, s), p, o, m)
+# define BOOST_PP_FOR_185_I(s, p, o, m) BOOST_PP_IF(p(186, s), m, BOOST_PP_TUPLE_EAT_2)(186, s) BOOST_PP_IF(p(186, s), BOOST_PP_FOR_186, BOOST_PP_TUPLE_EAT_4)(o(186, s), p, o, m)
+# define BOOST_PP_FOR_186_I(s, p, o, m) BOOST_PP_IF(p(187, s), m, BOOST_PP_TUPLE_EAT_2)(187, s) BOOST_PP_IF(p(187, s), BOOST_PP_FOR_187, BOOST_PP_TUPLE_EAT_4)(o(187, s), p, o, m)
+# define BOOST_PP_FOR_187_I(s, p, o, m) BOOST_PP_IF(p(188, s), m, BOOST_PP_TUPLE_EAT_2)(188, s) BOOST_PP_IF(p(188, s), BOOST_PP_FOR_188, BOOST_PP_TUPLE_EAT_4)(o(188, s), p, o, m)
+# define BOOST_PP_FOR_188_I(s, p, o, m) BOOST_PP_IF(p(189, s), m, BOOST_PP_TUPLE_EAT_2)(189, s) BOOST_PP_IF(p(189, s), BOOST_PP_FOR_189, BOOST_PP_TUPLE_EAT_4)(o(189, s), p, o, m)
+# define BOOST_PP_FOR_189_I(s, p, o, m) BOOST_PP_IF(p(190, s), m, BOOST_PP_TUPLE_EAT_2)(190, s) BOOST_PP_IF(p(190, s), BOOST_PP_FOR_190, BOOST_PP_TUPLE_EAT_4)(o(190, s), p, o, m)
+# define BOOST_PP_FOR_190_I(s, p, o, m) BOOST_PP_IF(p(191, s), m, BOOST_PP_TUPLE_EAT_2)(191, s) BOOST_PP_IF(p(191, s), BOOST_PP_FOR_191, BOOST_PP_TUPLE_EAT_4)(o(191, s), p, o, m)
+# define BOOST_PP_FOR_191_I(s, p, o, m) BOOST_PP_IF(p(192, s), m, BOOST_PP_TUPLE_EAT_2)(192, s) BOOST_PP_IF(p(192, s), BOOST_PP_FOR_192, BOOST_PP_TUPLE_EAT_4)(o(192, s), p, o, m)
+# define BOOST_PP_FOR_192_I(s, p, o, m) BOOST_PP_IF(p(193, s), m, BOOST_PP_TUPLE_EAT_2)(193, s) BOOST_PP_IF(p(193, s), BOOST_PP_FOR_193, BOOST_PP_TUPLE_EAT_4)(o(193, s), p, o, m)
+# define BOOST_PP_FOR_193_I(s, p, o, m) BOOST_PP_IF(p(194, s), m, BOOST_PP_TUPLE_EAT_2)(194, s) BOOST_PP_IF(p(194, s), BOOST_PP_FOR_194, BOOST_PP_TUPLE_EAT_4)(o(194, s), p, o, m)
+# define BOOST_PP_FOR_194_I(s, p, o, m) BOOST_PP_IF(p(195, s), m, BOOST_PP_TUPLE_EAT_2)(195, s) BOOST_PP_IF(p(195, s), BOOST_PP_FOR_195, BOOST_PP_TUPLE_EAT_4)(o(195, s), p, o, m)
+# define BOOST_PP_FOR_195_I(s, p, o, m) BOOST_PP_IF(p(196, s), m, BOOST_PP_TUPLE_EAT_2)(196, s) BOOST_PP_IF(p(196, s), BOOST_PP_FOR_196, BOOST_PP_TUPLE_EAT_4)(o(196, s), p, o, m)
+# define BOOST_PP_FOR_196_I(s, p, o, m) BOOST_PP_IF(p(197, s), m, BOOST_PP_TUPLE_EAT_2)(197, s) BOOST_PP_IF(p(197, s), BOOST_PP_FOR_197, BOOST_PP_TUPLE_EAT_4)(o(197, s), p, o, m)
+# define BOOST_PP_FOR_197_I(s, p, o, m) BOOST_PP_IF(p(198, s), m, BOOST_PP_TUPLE_EAT_2)(198, s) BOOST_PP_IF(p(198, s), BOOST_PP_FOR_198, BOOST_PP_TUPLE_EAT_4)(o(198, s), p, o, m)
+# define BOOST_PP_FOR_198_I(s, p, o, m) BOOST_PP_IF(p(199, s), m, BOOST_PP_TUPLE_EAT_2)(199, s) BOOST_PP_IF(p(199, s), BOOST_PP_FOR_199, BOOST_PP_TUPLE_EAT_4)(o(199, s), p, o, m)
+# define BOOST_PP_FOR_199_I(s, p, o, m) BOOST_PP_IF(p(200, s), m, BOOST_PP_TUPLE_EAT_2)(200, s) BOOST_PP_IF(p(200, s), BOOST_PP_FOR_200, BOOST_PP_TUPLE_EAT_4)(o(200, s), p, o, m)
+# define BOOST_PP_FOR_200_I(s, p, o, m) BOOST_PP_IF(p(201, s), m, BOOST_PP_TUPLE_EAT_2)(201, s) BOOST_PP_IF(p(201, s), BOOST_PP_FOR_201, BOOST_PP_TUPLE_EAT_4)(o(201, s), p, o, m)
+# define BOOST_PP_FOR_201_I(s, p, o, m) BOOST_PP_IF(p(202, s), m, BOOST_PP_TUPLE_EAT_2)(202, s) BOOST_PP_IF(p(202, s), BOOST_PP_FOR_202, BOOST_PP_TUPLE_EAT_4)(o(202, s), p, o, m)
+# define BOOST_PP_FOR_202_I(s, p, o, m) BOOST_PP_IF(p(203, s), m, BOOST_PP_TUPLE_EAT_2)(203, s) BOOST_PP_IF(p(203, s), BOOST_PP_FOR_203, BOOST_PP_TUPLE_EAT_4)(o(203, s), p, o, m)
+# define BOOST_PP_FOR_203_I(s, p, o, m) BOOST_PP_IF(p(204, s), m, BOOST_PP_TUPLE_EAT_2)(204, s) BOOST_PP_IF(p(204, s), BOOST_PP_FOR_204, BOOST_PP_TUPLE_EAT_4)(o(204, s), p, o, m)
+# define BOOST_PP_FOR_204_I(s, p, o, m) BOOST_PP_IF(p(205, s), m, BOOST_PP_TUPLE_EAT_2)(205, s) BOOST_PP_IF(p(205, s), BOOST_PP_FOR_205, BOOST_PP_TUPLE_EAT_4)(o(205, s), p, o, m)
+# define BOOST_PP_FOR_205_I(s, p, o, m) BOOST_PP_IF(p(206, s), m, BOOST_PP_TUPLE_EAT_2)(206, s) BOOST_PP_IF(p(206, s), BOOST_PP_FOR_206, BOOST_PP_TUPLE_EAT_4)(o(206, s), p, o, m)
+# define BOOST_PP_FOR_206_I(s, p, o, m) BOOST_PP_IF(p(207, s), m, BOOST_PP_TUPLE_EAT_2)(207, s) BOOST_PP_IF(p(207, s), BOOST_PP_FOR_207, BOOST_PP_TUPLE_EAT_4)(o(207, s), p, o, m)
+# define BOOST_PP_FOR_207_I(s, p, o, m) BOOST_PP_IF(p(208, s), m, BOOST_PP_TUPLE_EAT_2)(208, s) BOOST_PP_IF(p(208, s), BOOST_PP_FOR_208, BOOST_PP_TUPLE_EAT_4)(o(208, s), p, o, m)
+# define BOOST_PP_FOR_208_I(s, p, o, m) BOOST_PP_IF(p(209, s), m, BOOST_PP_TUPLE_EAT_2)(209, s) BOOST_PP_IF(p(209, s), BOOST_PP_FOR_209, BOOST_PP_TUPLE_EAT_4)(o(209, s), p, o, m)
+# define BOOST_PP_FOR_209_I(s, p, o, m) BOOST_PP_IF(p(210, s), m, BOOST_PP_TUPLE_EAT_2)(210, s) BOOST_PP_IF(p(210, s), BOOST_PP_FOR_210, BOOST_PP_TUPLE_EAT_4)(o(210, s), p, o, m)
+# define BOOST_PP_FOR_210_I(s, p, o, m) BOOST_PP_IF(p(211, s), m, BOOST_PP_TUPLE_EAT_2)(211, s) BOOST_PP_IF(p(211, s), BOOST_PP_FOR_211, BOOST_PP_TUPLE_EAT_4)(o(211, s), p, o, m)
+# define BOOST_PP_FOR_211_I(s, p, o, m) BOOST_PP_IF(p(212, s), m, BOOST_PP_TUPLE_EAT_2)(212, s) BOOST_PP_IF(p(212, s), BOOST_PP_FOR_212, BOOST_PP_TUPLE_EAT_4)(o(212, s), p, o, m)
+# define BOOST_PP_FOR_212_I(s, p, o, m) BOOST_PP_IF(p(213, s), m, BOOST_PP_TUPLE_EAT_2)(213, s) BOOST_PP_IF(p(213, s), BOOST_PP_FOR_213, BOOST_PP_TUPLE_EAT_4)(o(213, s), p, o, m)
+# define BOOST_PP_FOR_213_I(s, p, o, m) BOOST_PP_IF(p(214, s), m, BOOST_PP_TUPLE_EAT_2)(214, s) BOOST_PP_IF(p(214, s), BOOST_PP_FOR_214, BOOST_PP_TUPLE_EAT_4)(o(214, s), p, o, m)
+# define BOOST_PP_FOR_214_I(s, p, o, m) BOOST_PP_IF(p(215, s), m, BOOST_PP_TUPLE_EAT_2)(215, s) BOOST_PP_IF(p(215, s), BOOST_PP_FOR_215, BOOST_PP_TUPLE_EAT_4)(o(215, s), p, o, m)
+# define BOOST_PP_FOR_215_I(s, p, o, m) BOOST_PP_IF(p(216, s), m, BOOST_PP_TUPLE_EAT_2)(216, s) BOOST_PP_IF(p(216, s), BOOST_PP_FOR_216, BOOST_PP_TUPLE_EAT_4)(o(216, s), p, o, m)
+# define BOOST_PP_FOR_216_I(s, p, o, m) BOOST_PP_IF(p(217, s), m, BOOST_PP_TUPLE_EAT_2)(217, s) BOOST_PP_IF(p(217, s), BOOST_PP_FOR_217, BOOST_PP_TUPLE_EAT_4)(o(217, s), p, o, m)
+# define BOOST_PP_FOR_217_I(s, p, o, m) BOOST_PP_IF(p(218, s), m, BOOST_PP_TUPLE_EAT_2)(218, s) BOOST_PP_IF(p(218, s), BOOST_PP_FOR_218, BOOST_PP_TUPLE_EAT_4)(o(218, s), p, o, m)
+# define BOOST_PP_FOR_218_I(s, p, o, m) BOOST_PP_IF(p(219, s), m, BOOST_PP_TUPLE_EAT_2)(219, s) BOOST_PP_IF(p(219, s), BOOST_PP_FOR_219, BOOST_PP_TUPLE_EAT_4)(o(219, s), p, o, m)
+# define BOOST_PP_FOR_219_I(s, p, o, m) BOOST_PP_IF(p(220, s), m, BOOST_PP_TUPLE_EAT_2)(220, s) BOOST_PP_IF(p(220, s), BOOST_PP_FOR_220, BOOST_PP_TUPLE_EAT_4)(o(220, s), p, o, m)
+# define BOOST_PP_FOR_220_I(s, p, o, m) BOOST_PP_IF(p(221, s), m, BOOST_PP_TUPLE_EAT_2)(221, s) BOOST_PP_IF(p(221, s), BOOST_PP_FOR_221, BOOST_PP_TUPLE_EAT_4)(o(221, s), p, o, m)
+# define BOOST_PP_FOR_221_I(s, p, o, m) BOOST_PP_IF(p(222, s), m, BOOST_PP_TUPLE_EAT_2)(222, s) BOOST_PP_IF(p(222, s), BOOST_PP_FOR_222, BOOST_PP_TUPLE_EAT_4)(o(222, s), p, o, m)
+# define BOOST_PP_FOR_222_I(s, p, o, m) BOOST_PP_IF(p(223, s), m, BOOST_PP_TUPLE_EAT_2)(223, s) BOOST_PP_IF(p(223, s), BOOST_PP_FOR_223, BOOST_PP_TUPLE_EAT_4)(o(223, s), p, o, m)
+# define BOOST_PP_FOR_223_I(s, p, o, m) BOOST_PP_IF(p(224, s), m, BOOST_PP_TUPLE_EAT_2)(224, s) BOOST_PP_IF(p(224, s), BOOST_PP_FOR_224, BOOST_PP_TUPLE_EAT_4)(o(224, s), p, o, m)
+# define BOOST_PP_FOR_224_I(s, p, o, m) BOOST_PP_IF(p(225, s), m, BOOST_PP_TUPLE_EAT_2)(225, s) BOOST_PP_IF(p(225, s), BOOST_PP_FOR_225, BOOST_PP_TUPLE_EAT_4)(o(225, s), p, o, m)
+# define BOOST_PP_FOR_225_I(s, p, o, m) BOOST_PP_IF(p(226, s), m, BOOST_PP_TUPLE_EAT_2)(226, s) BOOST_PP_IF(p(226, s), BOOST_PP_FOR_226, BOOST_PP_TUPLE_EAT_4)(o(226, s), p, o, m)
+# define BOOST_PP_FOR_226_I(s, p, o, m) BOOST_PP_IF(p(227, s), m, BOOST_PP_TUPLE_EAT_2)(227, s) BOOST_PP_IF(p(227, s), BOOST_PP_FOR_227, BOOST_PP_TUPLE_EAT_4)(o(227, s), p, o, m)
+# define BOOST_PP_FOR_227_I(s, p, o, m) BOOST_PP_IF(p(228, s), m, BOOST_PP_TUPLE_EAT_2)(228, s) BOOST_PP_IF(p(228, s), BOOST_PP_FOR_228, BOOST_PP_TUPLE_EAT_4)(o(228, s), p, o, m)
+# define BOOST_PP_FOR_228_I(s, p, o, m) BOOST_PP_IF(p(229, s), m, BOOST_PP_TUPLE_EAT_2)(229, s) BOOST_PP_IF(p(229, s), BOOST_PP_FOR_229, BOOST_PP_TUPLE_EAT_4)(o(229, s), p, o, m)
+# define BOOST_PP_FOR_229_I(s, p, o, m) BOOST_PP_IF(p(230, s), m, BOOST_PP_TUPLE_EAT_2)(230, s) BOOST_PP_IF(p(230, s), BOOST_PP_FOR_230, BOOST_PP_TUPLE_EAT_4)(o(230, s), p, o, m)
+# define BOOST_PP_FOR_230_I(s, p, o, m) BOOST_PP_IF(p(231, s), m, BOOST_PP_TUPLE_EAT_2)(231, s) BOOST_PP_IF(p(231, s), BOOST_PP_FOR_231, BOOST_PP_TUPLE_EAT_4)(o(231, s), p, o, m)
+# define BOOST_PP_FOR_231_I(s, p, o, m) BOOST_PP_IF(p(232, s), m, BOOST_PP_TUPLE_EAT_2)(232, s) BOOST_PP_IF(p(232, s), BOOST_PP_FOR_232, BOOST_PP_TUPLE_EAT_4)(o(232, s), p, o, m)
+# define BOOST_PP_FOR_232_I(s, p, o, m) BOOST_PP_IF(p(233, s), m, BOOST_PP_TUPLE_EAT_2)(233, s) BOOST_PP_IF(p(233, s), BOOST_PP_FOR_233, BOOST_PP_TUPLE_EAT_4)(o(233, s), p, o, m)
+# define BOOST_PP_FOR_233_I(s, p, o, m) BOOST_PP_IF(p(234, s), m, BOOST_PP_TUPLE_EAT_2)(234, s) BOOST_PP_IF(p(234, s), BOOST_PP_FOR_234, BOOST_PP_TUPLE_EAT_4)(o(234, s), p, o, m)
+# define BOOST_PP_FOR_234_I(s, p, o, m) BOOST_PP_IF(p(235, s), m, BOOST_PP_TUPLE_EAT_2)(235, s) BOOST_PP_IF(p(235, s), BOOST_PP_FOR_235, BOOST_PP_TUPLE_EAT_4)(o(235, s), p, o, m)
+# define BOOST_PP_FOR_235_I(s, p, o, m) BOOST_PP_IF(p(236, s), m, BOOST_PP_TUPLE_EAT_2)(236, s) BOOST_PP_IF(p(236, s), BOOST_PP_FOR_236, BOOST_PP_TUPLE_EAT_4)(o(236, s), p, o, m)
+# define BOOST_PP_FOR_236_I(s, p, o, m) BOOST_PP_IF(p(237, s), m, BOOST_PP_TUPLE_EAT_2)(237, s) BOOST_PP_IF(p(237, s), BOOST_PP_FOR_237, BOOST_PP_TUPLE_EAT_4)(o(237, s), p, o, m)
+# define BOOST_PP_FOR_237_I(s, p, o, m) BOOST_PP_IF(p(238, s), m, BOOST_PP_TUPLE_EAT_2)(238, s) BOOST_PP_IF(p(238, s), BOOST_PP_FOR_238, BOOST_PP_TUPLE_EAT_4)(o(238, s), p, o, m)
+# define BOOST_PP_FOR_238_I(s, p, o, m) BOOST_PP_IF(p(239, s), m, BOOST_PP_TUPLE_EAT_2)(239, s) BOOST_PP_IF(p(239, s), BOOST_PP_FOR_239, BOOST_PP_TUPLE_EAT_4)(o(239, s), p, o, m)
+# define BOOST_PP_FOR_239_I(s, p, o, m) BOOST_PP_IF(p(240, s), m, BOOST_PP_TUPLE_EAT_2)(240, s) BOOST_PP_IF(p(240, s), BOOST_PP_FOR_240, BOOST_PP_TUPLE_EAT_4)(o(240, s), p, o, m)
+# define BOOST_PP_FOR_240_I(s, p, o, m) BOOST_PP_IF(p(241, s), m, BOOST_PP_TUPLE_EAT_2)(241, s) BOOST_PP_IF(p(241, s), BOOST_PP_FOR_241, BOOST_PP_TUPLE_EAT_4)(o(241, s), p, o, m)
+# define BOOST_PP_FOR_241_I(s, p, o, m) BOOST_PP_IF(p(242, s), m, BOOST_PP_TUPLE_EAT_2)(242, s) BOOST_PP_IF(p(242, s), BOOST_PP_FOR_242, BOOST_PP_TUPLE_EAT_4)(o(242, s), p, o, m)
+# define BOOST_PP_FOR_242_I(s, p, o, m) BOOST_PP_IF(p(243, s), m, BOOST_PP_TUPLE_EAT_2)(243, s) BOOST_PP_IF(p(243, s), BOOST_PP_FOR_243, BOOST_PP_TUPLE_EAT_4)(o(243, s), p, o, m)
+# define BOOST_PP_FOR_243_I(s, p, o, m) BOOST_PP_IF(p(244, s), m, BOOST_PP_TUPLE_EAT_2)(244, s) BOOST_PP_IF(p(244, s), BOOST_PP_FOR_244, BOOST_PP_TUPLE_EAT_4)(o(244, s), p, o, m)
+# define BOOST_PP_FOR_244_I(s, p, o, m) BOOST_PP_IF(p(245, s), m, BOOST_PP_TUPLE_EAT_2)(245, s) BOOST_PP_IF(p(245, s), BOOST_PP_FOR_245, BOOST_PP_TUPLE_EAT_4)(o(245, s), p, o, m)
+# define BOOST_PP_FOR_245_I(s, p, o, m) BOOST_PP_IF(p(246, s), m, BOOST_PP_TUPLE_EAT_2)(246, s) BOOST_PP_IF(p(246, s), BOOST_PP_FOR_246, BOOST_PP_TUPLE_EAT_4)(o(246, s), p, o, m)
+# define BOOST_PP_FOR_246_I(s, p, o, m) BOOST_PP_IF(p(247, s), m, BOOST_PP_TUPLE_EAT_2)(247, s) BOOST_PP_IF(p(247, s), BOOST_PP_FOR_247, BOOST_PP_TUPLE_EAT_4)(o(247, s), p, o, m)
+# define BOOST_PP_FOR_247_I(s, p, o, m) BOOST_PP_IF(p(248, s), m, BOOST_PP_TUPLE_EAT_2)(248, s) BOOST_PP_IF(p(248, s), BOOST_PP_FOR_248, BOOST_PP_TUPLE_EAT_4)(o(248, s), p, o, m)
+# define BOOST_PP_FOR_248_I(s, p, o, m) BOOST_PP_IF(p(249, s), m, BOOST_PP_TUPLE_EAT_2)(249, s) BOOST_PP_IF(p(249, s), BOOST_PP_FOR_249, BOOST_PP_TUPLE_EAT_4)(o(249, s), p, o, m)
+# define BOOST_PP_FOR_249_I(s, p, o, m) BOOST_PP_IF(p(250, s), m, BOOST_PP_TUPLE_EAT_2)(250, s) BOOST_PP_IF(p(250, s), BOOST_PP_FOR_250, BOOST_PP_TUPLE_EAT_4)(o(250, s), p, o, m)
+# define BOOST_PP_FOR_250_I(s, p, o, m) BOOST_PP_IF(p(251, s), m, BOOST_PP_TUPLE_EAT_2)(251, s) BOOST_PP_IF(p(251, s), BOOST_PP_FOR_251, BOOST_PP_TUPLE_EAT_4)(o(251, s), p, o, m)
+# define BOOST_PP_FOR_251_I(s, p, o, m) BOOST_PP_IF(p(252, s), m, BOOST_PP_TUPLE_EAT_2)(252, s) BOOST_PP_IF(p(252, s), BOOST_PP_FOR_252, BOOST_PP_TUPLE_EAT_4)(o(252, s), p, o, m)
+# define BOOST_PP_FOR_252_I(s, p, o, m) BOOST_PP_IF(p(253, s), m, BOOST_PP_TUPLE_EAT_2)(253, s) BOOST_PP_IF(p(253, s), BOOST_PP_FOR_253, BOOST_PP_TUPLE_EAT_4)(o(253, s), p, o, m)
+# define BOOST_PP_FOR_253_I(s, p, o, m) BOOST_PP_IF(p(254, s), m, BOOST_PP_TUPLE_EAT_2)(254, s) BOOST_PP_IF(p(254, s), BOOST_PP_FOR_254, BOOST_PP_TUPLE_EAT_4)(o(254, s), p, o, m)
+# define BOOST_PP_FOR_254_I(s, p, o, m) BOOST_PP_IF(p(255, s), m, BOOST_PP_TUPLE_EAT_2)(255, s) BOOST_PP_IF(p(255, s), BOOST_PP_FOR_255, BOOST_PP_TUPLE_EAT_4)(o(255, s), p, o, m)
+# define BOOST_PP_FOR_255_I(s, p, o, m) BOOST_PP_IF(p(256, s), m, BOOST_PP_TUPLE_EAT_2)(256, s) BOOST_PP_IF(p(256, s), BOOST_PP_FOR_256, BOOST_PP_TUPLE_EAT_4)(o(256, s), p, o, m)
+# define BOOST_PP_FOR_256_I(s, p, o, m) BOOST_PP_IF(p(257, s), m, BOOST_PP_TUPLE_EAT_2)(257, s) BOOST_PP_IF(p(257, s), BOOST_PP_FOR_257, BOOST_PP_TUPLE_EAT_4)(o(257, s), p, o, m)
+#
+# endif
diff --git a/boost/boost/preprocessor/repetition/detail/for.hpp b/boost/boost/preprocessor/repetition/detail/for.hpp
new file mode 100644
index 00000000000..2770f2c1ea3
--- /dev/null
+++ b/boost/boost/preprocessor/repetition/detail/for.hpp
@@ -0,0 +1,536 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_REPETITION_DETAIL_FOR_HPP
+# define BOOST_PREPROCESSOR_REPETITION_DETAIL_FOR_HPP
+#
+# include <boost/preprocessor/control/expr_iif.hpp>
+# include <boost/preprocessor/control/iif.hpp>
+# include <boost/preprocessor/logical/bool.hpp>
+# include <boost/preprocessor/tuple/eat.hpp>
+#
+# define BOOST_PP_FOR_1(s, p, o, m) BOOST_PP_FOR_1_C(BOOST_PP_BOOL(p(2, s)), s, p, o, m)
+# define BOOST_PP_FOR_2(s, p, o, m) BOOST_PP_FOR_2_C(BOOST_PP_BOOL(p(3, s)), s, p, o, m)
+# define BOOST_PP_FOR_3(s, p, o, m) BOOST_PP_FOR_3_C(BOOST_PP_BOOL(p(4, s)), s, p, o, m)
+# define BOOST_PP_FOR_4(s, p, o, m) BOOST_PP_FOR_4_C(BOOST_PP_BOOL(p(5, s)), s, p, o, m)
+# define BOOST_PP_FOR_5(s, p, o, m) BOOST_PP_FOR_5_C(BOOST_PP_BOOL(p(6, s)), s, p, o, m)
+# define BOOST_PP_FOR_6(s, p, o, m) BOOST_PP_FOR_6_C(BOOST_PP_BOOL(p(7, s)), s, p, o, m)
+# define BOOST_PP_FOR_7(s, p, o, m) BOOST_PP_FOR_7_C(BOOST_PP_BOOL(p(8, s)), s, p, o, m)
+# define BOOST_PP_FOR_8(s, p, o, m) BOOST_PP_FOR_8_C(BOOST_PP_BOOL(p(9, s)), s, p, o, m)
+# define BOOST_PP_FOR_9(s, p, o, m) BOOST_PP_FOR_9_C(BOOST_PP_BOOL(p(10, s)), s, p, o, m)
+# define BOOST_PP_FOR_10(s, p, o, m) BOOST_PP_FOR_10_C(BOOST_PP_BOOL(p(11, s)), s, p, o, m)
+# define BOOST_PP_FOR_11(s, p, o, m) BOOST_PP_FOR_11_C(BOOST_PP_BOOL(p(12, s)), s, p, o, m)
+# define BOOST_PP_FOR_12(s, p, o, m) BOOST_PP_FOR_12_C(BOOST_PP_BOOL(p(13, s)), s, p, o, m)
+# define BOOST_PP_FOR_13(s, p, o, m) BOOST_PP_FOR_13_C(BOOST_PP_BOOL(p(14, s)), s, p, o, m)
+# define BOOST_PP_FOR_14(s, p, o, m) BOOST_PP_FOR_14_C(BOOST_PP_BOOL(p(15, s)), s, p, o, m)
+# define BOOST_PP_FOR_15(s, p, o, m) BOOST_PP_FOR_15_C(BOOST_PP_BOOL(p(16, s)), s, p, o, m)
+# define BOOST_PP_FOR_16(s, p, o, m) BOOST_PP_FOR_16_C(BOOST_PP_BOOL(p(17, s)), s, p, o, m)
+# define BOOST_PP_FOR_17(s, p, o, m) BOOST_PP_FOR_17_C(BOOST_PP_BOOL(p(18, s)), s, p, o, m)
+# define BOOST_PP_FOR_18(s, p, o, m) BOOST_PP_FOR_18_C(BOOST_PP_BOOL(p(19, s)), s, p, o, m)
+# define BOOST_PP_FOR_19(s, p, o, m) BOOST_PP_FOR_19_C(BOOST_PP_BOOL(p(20, s)), s, p, o, m)
+# define BOOST_PP_FOR_20(s, p, o, m) BOOST_PP_FOR_20_C(BOOST_PP_BOOL(p(21, s)), s, p, o, m)
+# define BOOST_PP_FOR_21(s, p, o, m) BOOST_PP_FOR_21_C(BOOST_PP_BOOL(p(22, s)), s, p, o, m)
+# define BOOST_PP_FOR_22(s, p, o, m) BOOST_PP_FOR_22_C(BOOST_PP_BOOL(p(23, s)), s, p, o, m)
+# define BOOST_PP_FOR_23(s, p, o, m) BOOST_PP_FOR_23_C(BOOST_PP_BOOL(p(24, s)), s, p, o, m)
+# define BOOST_PP_FOR_24(s, p, o, m) BOOST_PP_FOR_24_C(BOOST_PP_BOOL(p(25, s)), s, p, o, m)
+# define BOOST_PP_FOR_25(s, p, o, m) BOOST_PP_FOR_25_C(BOOST_PP_BOOL(p(26, s)), s, p, o, m)
+# define BOOST_PP_FOR_26(s, p, o, m) BOOST_PP_FOR_26_C(BOOST_PP_BOOL(p(27, s)), s, p, o, m)
+# define BOOST_PP_FOR_27(s, p, o, m) BOOST_PP_FOR_27_C(BOOST_PP_BOOL(p(28, s)), s, p, o, m)
+# define BOOST_PP_FOR_28(s, p, o, m) BOOST_PP_FOR_28_C(BOOST_PP_BOOL(p(29, s)), s, p, o, m)
+# define BOOST_PP_FOR_29(s, p, o, m) BOOST_PP_FOR_29_C(BOOST_PP_BOOL(p(30, s)), s, p, o, m)
+# define BOOST_PP_FOR_30(s, p, o, m) BOOST_PP_FOR_30_C(BOOST_PP_BOOL(p(31, s)), s, p, o, m)
+# define BOOST_PP_FOR_31(s, p, o, m) BOOST_PP_FOR_31_C(BOOST_PP_BOOL(p(32, s)), s, p, o, m)
+# define BOOST_PP_FOR_32(s, p, o, m) BOOST_PP_FOR_32_C(BOOST_PP_BOOL(p(33, s)), s, p, o, m)
+# define BOOST_PP_FOR_33(s, p, o, m) BOOST_PP_FOR_33_C(BOOST_PP_BOOL(p(34, s)), s, p, o, m)
+# define BOOST_PP_FOR_34(s, p, o, m) BOOST_PP_FOR_34_C(BOOST_PP_BOOL(p(35, s)), s, p, o, m)
+# define BOOST_PP_FOR_35(s, p, o, m) BOOST_PP_FOR_35_C(BOOST_PP_BOOL(p(36, s)), s, p, o, m)
+# define BOOST_PP_FOR_36(s, p, o, m) BOOST_PP_FOR_36_C(BOOST_PP_BOOL(p(37, s)), s, p, o, m)
+# define BOOST_PP_FOR_37(s, p, o, m) BOOST_PP_FOR_37_C(BOOST_PP_BOOL(p(38, s)), s, p, o, m)
+# define BOOST_PP_FOR_38(s, p, o, m) BOOST_PP_FOR_38_C(BOOST_PP_BOOL(p(39, s)), s, p, o, m)
+# define BOOST_PP_FOR_39(s, p, o, m) BOOST_PP_FOR_39_C(BOOST_PP_BOOL(p(40, s)), s, p, o, m)
+# define BOOST_PP_FOR_40(s, p, o, m) BOOST_PP_FOR_40_C(BOOST_PP_BOOL(p(41, s)), s, p, o, m)
+# define BOOST_PP_FOR_41(s, p, o, m) BOOST_PP_FOR_41_C(BOOST_PP_BOOL(p(42, s)), s, p, o, m)
+# define BOOST_PP_FOR_42(s, p, o, m) BOOST_PP_FOR_42_C(BOOST_PP_BOOL(p(43, s)), s, p, o, m)
+# define BOOST_PP_FOR_43(s, p, o, m) BOOST_PP_FOR_43_C(BOOST_PP_BOOL(p(44, s)), s, p, o, m)
+# define BOOST_PP_FOR_44(s, p, o, m) BOOST_PP_FOR_44_C(BOOST_PP_BOOL(p(45, s)), s, p, o, m)
+# define BOOST_PP_FOR_45(s, p, o, m) BOOST_PP_FOR_45_C(BOOST_PP_BOOL(p(46, s)), s, p, o, m)
+# define BOOST_PP_FOR_46(s, p, o, m) BOOST_PP_FOR_46_C(BOOST_PP_BOOL(p(47, s)), s, p, o, m)
+# define BOOST_PP_FOR_47(s, p, o, m) BOOST_PP_FOR_47_C(BOOST_PP_BOOL(p(48, s)), s, p, o, m)
+# define BOOST_PP_FOR_48(s, p, o, m) BOOST_PP_FOR_48_C(BOOST_PP_BOOL(p(49, s)), s, p, o, m)
+# define BOOST_PP_FOR_49(s, p, o, m) BOOST_PP_FOR_49_C(BOOST_PP_BOOL(p(50, s)), s, p, o, m)
+# define BOOST_PP_FOR_50(s, p, o, m) BOOST_PP_FOR_50_C(BOOST_PP_BOOL(p(51, s)), s, p, o, m)
+# define BOOST_PP_FOR_51(s, p, o, m) BOOST_PP_FOR_51_C(BOOST_PP_BOOL(p(52, s)), s, p, o, m)
+# define BOOST_PP_FOR_52(s, p, o, m) BOOST_PP_FOR_52_C(BOOST_PP_BOOL(p(53, s)), s, p, o, m)
+# define BOOST_PP_FOR_53(s, p, o, m) BOOST_PP_FOR_53_C(BOOST_PP_BOOL(p(54, s)), s, p, o, m)
+# define BOOST_PP_FOR_54(s, p, o, m) BOOST_PP_FOR_54_C(BOOST_PP_BOOL(p(55, s)), s, p, o, m)
+# define BOOST_PP_FOR_55(s, p, o, m) BOOST_PP_FOR_55_C(BOOST_PP_BOOL(p(56, s)), s, p, o, m)
+# define BOOST_PP_FOR_56(s, p, o, m) BOOST_PP_FOR_56_C(BOOST_PP_BOOL(p(57, s)), s, p, o, m)
+# define BOOST_PP_FOR_57(s, p, o, m) BOOST_PP_FOR_57_C(BOOST_PP_BOOL(p(58, s)), s, p, o, m)
+# define BOOST_PP_FOR_58(s, p, o, m) BOOST_PP_FOR_58_C(BOOST_PP_BOOL(p(59, s)), s, p, o, m)
+# define BOOST_PP_FOR_59(s, p, o, m) BOOST_PP_FOR_59_C(BOOST_PP_BOOL(p(60, s)), s, p, o, m)
+# define BOOST_PP_FOR_60(s, p, o, m) BOOST_PP_FOR_60_C(BOOST_PP_BOOL(p(61, s)), s, p, o, m)
+# define BOOST_PP_FOR_61(s, p, o, m) BOOST_PP_FOR_61_C(BOOST_PP_BOOL(p(62, s)), s, p, o, m)
+# define BOOST_PP_FOR_62(s, p, o, m) BOOST_PP_FOR_62_C(BOOST_PP_BOOL(p(63, s)), s, p, o, m)
+# define BOOST_PP_FOR_63(s, p, o, m) BOOST_PP_FOR_63_C(BOOST_PP_BOOL(p(64, s)), s, p, o, m)
+# define BOOST_PP_FOR_64(s, p, o, m) BOOST_PP_FOR_64_C(BOOST_PP_BOOL(p(65, s)), s, p, o, m)
+# define BOOST_PP_FOR_65(s, p, o, m) BOOST_PP_FOR_65_C(BOOST_PP_BOOL(p(66, s)), s, p, o, m)
+# define BOOST_PP_FOR_66(s, p, o, m) BOOST_PP_FOR_66_C(BOOST_PP_BOOL(p(67, s)), s, p, o, m)
+# define BOOST_PP_FOR_67(s, p, o, m) BOOST_PP_FOR_67_C(BOOST_PP_BOOL(p(68, s)), s, p, o, m)
+# define BOOST_PP_FOR_68(s, p, o, m) BOOST_PP_FOR_68_C(BOOST_PP_BOOL(p(69, s)), s, p, o, m)
+# define BOOST_PP_FOR_69(s, p, o, m) BOOST_PP_FOR_69_C(BOOST_PP_BOOL(p(70, s)), s, p, o, m)
+# define BOOST_PP_FOR_70(s, p, o, m) BOOST_PP_FOR_70_C(BOOST_PP_BOOL(p(71, s)), s, p, o, m)
+# define BOOST_PP_FOR_71(s, p, o, m) BOOST_PP_FOR_71_C(BOOST_PP_BOOL(p(72, s)), s, p, o, m)
+# define BOOST_PP_FOR_72(s, p, o, m) BOOST_PP_FOR_72_C(BOOST_PP_BOOL(p(73, s)), s, p, o, m)
+# define BOOST_PP_FOR_73(s, p, o, m) BOOST_PP_FOR_73_C(BOOST_PP_BOOL(p(74, s)), s, p, o, m)
+# define BOOST_PP_FOR_74(s, p, o, m) BOOST_PP_FOR_74_C(BOOST_PP_BOOL(p(75, s)), s, p, o, m)
+# define BOOST_PP_FOR_75(s, p, o, m) BOOST_PP_FOR_75_C(BOOST_PP_BOOL(p(76, s)), s, p, o, m)
+# define BOOST_PP_FOR_76(s, p, o, m) BOOST_PP_FOR_76_C(BOOST_PP_BOOL(p(77, s)), s, p, o, m)
+# define BOOST_PP_FOR_77(s, p, o, m) BOOST_PP_FOR_77_C(BOOST_PP_BOOL(p(78, s)), s, p, o, m)
+# define BOOST_PP_FOR_78(s, p, o, m) BOOST_PP_FOR_78_C(BOOST_PP_BOOL(p(79, s)), s, p, o, m)
+# define BOOST_PP_FOR_79(s, p, o, m) BOOST_PP_FOR_79_C(BOOST_PP_BOOL(p(80, s)), s, p, o, m)
+# define BOOST_PP_FOR_80(s, p, o, m) BOOST_PP_FOR_80_C(BOOST_PP_BOOL(p(81, s)), s, p, o, m)
+# define BOOST_PP_FOR_81(s, p, o, m) BOOST_PP_FOR_81_C(BOOST_PP_BOOL(p(82, s)), s, p, o, m)
+# define BOOST_PP_FOR_82(s, p, o, m) BOOST_PP_FOR_82_C(BOOST_PP_BOOL(p(83, s)), s, p, o, m)
+# define BOOST_PP_FOR_83(s, p, o, m) BOOST_PP_FOR_83_C(BOOST_PP_BOOL(p(84, s)), s, p, o, m)
+# define BOOST_PP_FOR_84(s, p, o, m) BOOST_PP_FOR_84_C(BOOST_PP_BOOL(p(85, s)), s, p, o, m)
+# define BOOST_PP_FOR_85(s, p, o, m) BOOST_PP_FOR_85_C(BOOST_PP_BOOL(p(86, s)), s, p, o, m)
+# define BOOST_PP_FOR_86(s, p, o, m) BOOST_PP_FOR_86_C(BOOST_PP_BOOL(p(87, s)), s, p, o, m)
+# define BOOST_PP_FOR_87(s, p, o, m) BOOST_PP_FOR_87_C(BOOST_PP_BOOL(p(88, s)), s, p, o, m)
+# define BOOST_PP_FOR_88(s, p, o, m) BOOST_PP_FOR_88_C(BOOST_PP_BOOL(p(89, s)), s, p, o, m)
+# define BOOST_PP_FOR_89(s, p, o, m) BOOST_PP_FOR_89_C(BOOST_PP_BOOL(p(90, s)), s, p, o, m)
+# define BOOST_PP_FOR_90(s, p, o, m) BOOST_PP_FOR_90_C(BOOST_PP_BOOL(p(91, s)), s, p, o, m)
+# define BOOST_PP_FOR_91(s, p, o, m) BOOST_PP_FOR_91_C(BOOST_PP_BOOL(p(92, s)), s, p, o, m)
+# define BOOST_PP_FOR_92(s, p, o, m) BOOST_PP_FOR_92_C(BOOST_PP_BOOL(p(93, s)), s, p, o, m)
+# define BOOST_PP_FOR_93(s, p, o, m) BOOST_PP_FOR_93_C(BOOST_PP_BOOL(p(94, s)), s, p, o, m)
+# define BOOST_PP_FOR_94(s, p, o, m) BOOST_PP_FOR_94_C(BOOST_PP_BOOL(p(95, s)), s, p, o, m)
+# define BOOST_PP_FOR_95(s, p, o, m) BOOST_PP_FOR_95_C(BOOST_PP_BOOL(p(96, s)), s, p, o, m)
+# define BOOST_PP_FOR_96(s, p, o, m) BOOST_PP_FOR_96_C(BOOST_PP_BOOL(p(97, s)), s, p, o, m)
+# define BOOST_PP_FOR_97(s, p, o, m) BOOST_PP_FOR_97_C(BOOST_PP_BOOL(p(98, s)), s, p, o, m)
+# define BOOST_PP_FOR_98(s, p, o, m) BOOST_PP_FOR_98_C(BOOST_PP_BOOL(p(99, s)), s, p, o, m)
+# define BOOST_PP_FOR_99(s, p, o, m) BOOST_PP_FOR_99_C(BOOST_PP_BOOL(p(100, s)), s, p, o, m)
+# define BOOST_PP_FOR_100(s, p, o, m) BOOST_PP_FOR_100_C(BOOST_PP_BOOL(p(101, s)), s, p, o, m)
+# define BOOST_PP_FOR_101(s, p, o, m) BOOST_PP_FOR_101_C(BOOST_PP_BOOL(p(102, s)), s, p, o, m)
+# define BOOST_PP_FOR_102(s, p, o, m) BOOST_PP_FOR_102_C(BOOST_PP_BOOL(p(103, s)), s, p, o, m)
+# define BOOST_PP_FOR_103(s, p, o, m) BOOST_PP_FOR_103_C(BOOST_PP_BOOL(p(104, s)), s, p, o, m)
+# define BOOST_PP_FOR_104(s, p, o, m) BOOST_PP_FOR_104_C(BOOST_PP_BOOL(p(105, s)), s, p, o, m)
+# define BOOST_PP_FOR_105(s, p, o, m) BOOST_PP_FOR_105_C(BOOST_PP_BOOL(p(106, s)), s, p, o, m)
+# define BOOST_PP_FOR_106(s, p, o, m) BOOST_PP_FOR_106_C(BOOST_PP_BOOL(p(107, s)), s, p, o, m)
+# define BOOST_PP_FOR_107(s, p, o, m) BOOST_PP_FOR_107_C(BOOST_PP_BOOL(p(108, s)), s, p, o, m)
+# define BOOST_PP_FOR_108(s, p, o, m) BOOST_PP_FOR_108_C(BOOST_PP_BOOL(p(109, s)), s, p, o, m)
+# define BOOST_PP_FOR_109(s, p, o, m) BOOST_PP_FOR_109_C(BOOST_PP_BOOL(p(110, s)), s, p, o, m)
+# define BOOST_PP_FOR_110(s, p, o, m) BOOST_PP_FOR_110_C(BOOST_PP_BOOL(p(111, s)), s, p, o, m)
+# define BOOST_PP_FOR_111(s, p, o, m) BOOST_PP_FOR_111_C(BOOST_PP_BOOL(p(112, s)), s, p, o, m)
+# define BOOST_PP_FOR_112(s, p, o, m) BOOST_PP_FOR_112_C(BOOST_PP_BOOL(p(113, s)), s, p, o, m)
+# define BOOST_PP_FOR_113(s, p, o, m) BOOST_PP_FOR_113_C(BOOST_PP_BOOL(p(114, s)), s, p, o, m)
+# define BOOST_PP_FOR_114(s, p, o, m) BOOST_PP_FOR_114_C(BOOST_PP_BOOL(p(115, s)), s, p, o, m)
+# define BOOST_PP_FOR_115(s, p, o, m) BOOST_PP_FOR_115_C(BOOST_PP_BOOL(p(116, s)), s, p, o, m)
+# define BOOST_PP_FOR_116(s, p, o, m) BOOST_PP_FOR_116_C(BOOST_PP_BOOL(p(117, s)), s, p, o, m)
+# define BOOST_PP_FOR_117(s, p, o, m) BOOST_PP_FOR_117_C(BOOST_PP_BOOL(p(118, s)), s, p, o, m)
+# define BOOST_PP_FOR_118(s, p, o, m) BOOST_PP_FOR_118_C(BOOST_PP_BOOL(p(119, s)), s, p, o, m)
+# define BOOST_PP_FOR_119(s, p, o, m) BOOST_PP_FOR_119_C(BOOST_PP_BOOL(p(120, s)), s, p, o, m)
+# define BOOST_PP_FOR_120(s, p, o, m) BOOST_PP_FOR_120_C(BOOST_PP_BOOL(p(121, s)), s, p, o, m)
+# define BOOST_PP_FOR_121(s, p, o, m) BOOST_PP_FOR_121_C(BOOST_PP_BOOL(p(122, s)), s, p, o, m)
+# define BOOST_PP_FOR_122(s, p, o, m) BOOST_PP_FOR_122_C(BOOST_PP_BOOL(p(123, s)), s, p, o, m)
+# define BOOST_PP_FOR_123(s, p, o, m) BOOST_PP_FOR_123_C(BOOST_PP_BOOL(p(124, s)), s, p, o, m)
+# define BOOST_PP_FOR_124(s, p, o, m) BOOST_PP_FOR_124_C(BOOST_PP_BOOL(p(125, s)), s, p, o, m)
+# define BOOST_PP_FOR_125(s, p, o, m) BOOST_PP_FOR_125_C(BOOST_PP_BOOL(p(126, s)), s, p, o, m)
+# define BOOST_PP_FOR_126(s, p, o, m) BOOST_PP_FOR_126_C(BOOST_PP_BOOL(p(127, s)), s, p, o, m)
+# define BOOST_PP_FOR_127(s, p, o, m) BOOST_PP_FOR_127_C(BOOST_PP_BOOL(p(128, s)), s, p, o, m)
+# define BOOST_PP_FOR_128(s, p, o, m) BOOST_PP_FOR_128_C(BOOST_PP_BOOL(p(129, s)), s, p, o, m)
+# define BOOST_PP_FOR_129(s, p, o, m) BOOST_PP_FOR_129_C(BOOST_PP_BOOL(p(130, s)), s, p, o, m)
+# define BOOST_PP_FOR_130(s, p, o, m) BOOST_PP_FOR_130_C(BOOST_PP_BOOL(p(131, s)), s, p, o, m)
+# define BOOST_PP_FOR_131(s, p, o, m) BOOST_PP_FOR_131_C(BOOST_PP_BOOL(p(132, s)), s, p, o, m)
+# define BOOST_PP_FOR_132(s, p, o, m) BOOST_PP_FOR_132_C(BOOST_PP_BOOL(p(133, s)), s, p, o, m)
+# define BOOST_PP_FOR_133(s, p, o, m) BOOST_PP_FOR_133_C(BOOST_PP_BOOL(p(134, s)), s, p, o, m)
+# define BOOST_PP_FOR_134(s, p, o, m) BOOST_PP_FOR_134_C(BOOST_PP_BOOL(p(135, s)), s, p, o, m)
+# define BOOST_PP_FOR_135(s, p, o, m) BOOST_PP_FOR_135_C(BOOST_PP_BOOL(p(136, s)), s, p, o, m)
+# define BOOST_PP_FOR_136(s, p, o, m) BOOST_PP_FOR_136_C(BOOST_PP_BOOL(p(137, s)), s, p, o, m)
+# define BOOST_PP_FOR_137(s, p, o, m) BOOST_PP_FOR_137_C(BOOST_PP_BOOL(p(138, s)), s, p, o, m)
+# define BOOST_PP_FOR_138(s, p, o, m) BOOST_PP_FOR_138_C(BOOST_PP_BOOL(p(139, s)), s, p, o, m)
+# define BOOST_PP_FOR_139(s, p, o, m) BOOST_PP_FOR_139_C(BOOST_PP_BOOL(p(140, s)), s, p, o, m)
+# define BOOST_PP_FOR_140(s, p, o, m) BOOST_PP_FOR_140_C(BOOST_PP_BOOL(p(141, s)), s, p, o, m)
+# define BOOST_PP_FOR_141(s, p, o, m) BOOST_PP_FOR_141_C(BOOST_PP_BOOL(p(142, s)), s, p, o, m)
+# define BOOST_PP_FOR_142(s, p, o, m) BOOST_PP_FOR_142_C(BOOST_PP_BOOL(p(143, s)), s, p, o, m)
+# define BOOST_PP_FOR_143(s, p, o, m) BOOST_PP_FOR_143_C(BOOST_PP_BOOL(p(144, s)), s, p, o, m)
+# define BOOST_PP_FOR_144(s, p, o, m) BOOST_PP_FOR_144_C(BOOST_PP_BOOL(p(145, s)), s, p, o, m)
+# define BOOST_PP_FOR_145(s, p, o, m) BOOST_PP_FOR_145_C(BOOST_PP_BOOL(p(146, s)), s, p, o, m)
+# define BOOST_PP_FOR_146(s, p, o, m) BOOST_PP_FOR_146_C(BOOST_PP_BOOL(p(147, s)), s, p, o, m)
+# define BOOST_PP_FOR_147(s, p, o, m) BOOST_PP_FOR_147_C(BOOST_PP_BOOL(p(148, s)), s, p, o, m)
+# define BOOST_PP_FOR_148(s, p, o, m) BOOST_PP_FOR_148_C(BOOST_PP_BOOL(p(149, s)), s, p, o, m)
+# define BOOST_PP_FOR_149(s, p, o, m) BOOST_PP_FOR_149_C(BOOST_PP_BOOL(p(150, s)), s, p, o, m)
+# define BOOST_PP_FOR_150(s, p, o, m) BOOST_PP_FOR_150_C(BOOST_PP_BOOL(p(151, s)), s, p, o, m)
+# define BOOST_PP_FOR_151(s, p, o, m) BOOST_PP_FOR_151_C(BOOST_PP_BOOL(p(152, s)), s, p, o, m)
+# define BOOST_PP_FOR_152(s, p, o, m) BOOST_PP_FOR_152_C(BOOST_PP_BOOL(p(153, s)), s, p, o, m)
+# define BOOST_PP_FOR_153(s, p, o, m) BOOST_PP_FOR_153_C(BOOST_PP_BOOL(p(154, s)), s, p, o, m)
+# define BOOST_PP_FOR_154(s, p, o, m) BOOST_PP_FOR_154_C(BOOST_PP_BOOL(p(155, s)), s, p, o, m)
+# define BOOST_PP_FOR_155(s, p, o, m) BOOST_PP_FOR_155_C(BOOST_PP_BOOL(p(156, s)), s, p, o, m)
+# define BOOST_PP_FOR_156(s, p, o, m) BOOST_PP_FOR_156_C(BOOST_PP_BOOL(p(157, s)), s, p, o, m)
+# define BOOST_PP_FOR_157(s, p, o, m) BOOST_PP_FOR_157_C(BOOST_PP_BOOL(p(158, s)), s, p, o, m)
+# define BOOST_PP_FOR_158(s, p, o, m) BOOST_PP_FOR_158_C(BOOST_PP_BOOL(p(159, s)), s, p, o, m)
+# define BOOST_PP_FOR_159(s, p, o, m) BOOST_PP_FOR_159_C(BOOST_PP_BOOL(p(160, s)), s, p, o, m)
+# define BOOST_PP_FOR_160(s, p, o, m) BOOST_PP_FOR_160_C(BOOST_PP_BOOL(p(161, s)), s, p, o, m)
+# define BOOST_PP_FOR_161(s, p, o, m) BOOST_PP_FOR_161_C(BOOST_PP_BOOL(p(162, s)), s, p, o, m)
+# define BOOST_PP_FOR_162(s, p, o, m) BOOST_PP_FOR_162_C(BOOST_PP_BOOL(p(163, s)), s, p, o, m)
+# define BOOST_PP_FOR_163(s, p, o, m) BOOST_PP_FOR_163_C(BOOST_PP_BOOL(p(164, s)), s, p, o, m)
+# define BOOST_PP_FOR_164(s, p, o, m) BOOST_PP_FOR_164_C(BOOST_PP_BOOL(p(165, s)), s, p, o, m)
+# define BOOST_PP_FOR_165(s, p, o, m) BOOST_PP_FOR_165_C(BOOST_PP_BOOL(p(166, s)), s, p, o, m)
+# define BOOST_PP_FOR_166(s, p, o, m) BOOST_PP_FOR_166_C(BOOST_PP_BOOL(p(167, s)), s, p, o, m)
+# define BOOST_PP_FOR_167(s, p, o, m) BOOST_PP_FOR_167_C(BOOST_PP_BOOL(p(168, s)), s, p, o, m)
+# define BOOST_PP_FOR_168(s, p, o, m) BOOST_PP_FOR_168_C(BOOST_PP_BOOL(p(169, s)), s, p, o, m)
+# define BOOST_PP_FOR_169(s, p, o, m) BOOST_PP_FOR_169_C(BOOST_PP_BOOL(p(170, s)), s, p, o, m)
+# define BOOST_PP_FOR_170(s, p, o, m) BOOST_PP_FOR_170_C(BOOST_PP_BOOL(p(171, s)), s, p, o, m)
+# define BOOST_PP_FOR_171(s, p, o, m) BOOST_PP_FOR_171_C(BOOST_PP_BOOL(p(172, s)), s, p, o, m)
+# define BOOST_PP_FOR_172(s, p, o, m) BOOST_PP_FOR_172_C(BOOST_PP_BOOL(p(173, s)), s, p, o, m)
+# define BOOST_PP_FOR_173(s, p, o, m) BOOST_PP_FOR_173_C(BOOST_PP_BOOL(p(174, s)), s, p, o, m)
+# define BOOST_PP_FOR_174(s, p, o, m) BOOST_PP_FOR_174_C(BOOST_PP_BOOL(p(175, s)), s, p, o, m)
+# define BOOST_PP_FOR_175(s, p, o, m) BOOST_PP_FOR_175_C(BOOST_PP_BOOL(p(176, s)), s, p, o, m)
+# define BOOST_PP_FOR_176(s, p, o, m) BOOST_PP_FOR_176_C(BOOST_PP_BOOL(p(177, s)), s, p, o, m)
+# define BOOST_PP_FOR_177(s, p, o, m) BOOST_PP_FOR_177_C(BOOST_PP_BOOL(p(178, s)), s, p, o, m)
+# define BOOST_PP_FOR_178(s, p, o, m) BOOST_PP_FOR_178_C(BOOST_PP_BOOL(p(179, s)), s, p, o, m)
+# define BOOST_PP_FOR_179(s, p, o, m) BOOST_PP_FOR_179_C(BOOST_PP_BOOL(p(180, s)), s, p, o, m)
+# define BOOST_PP_FOR_180(s, p, o, m) BOOST_PP_FOR_180_C(BOOST_PP_BOOL(p(181, s)), s, p, o, m)
+# define BOOST_PP_FOR_181(s, p, o, m) BOOST_PP_FOR_181_C(BOOST_PP_BOOL(p(182, s)), s, p, o, m)
+# define BOOST_PP_FOR_182(s, p, o, m) BOOST_PP_FOR_182_C(BOOST_PP_BOOL(p(183, s)), s, p, o, m)
+# define BOOST_PP_FOR_183(s, p, o, m) BOOST_PP_FOR_183_C(BOOST_PP_BOOL(p(184, s)), s, p, o, m)
+# define BOOST_PP_FOR_184(s, p, o, m) BOOST_PP_FOR_184_C(BOOST_PP_BOOL(p(185, s)), s, p, o, m)
+# define BOOST_PP_FOR_185(s, p, o, m) BOOST_PP_FOR_185_C(BOOST_PP_BOOL(p(186, s)), s, p, o, m)
+# define BOOST_PP_FOR_186(s, p, o, m) BOOST_PP_FOR_186_C(BOOST_PP_BOOL(p(187, s)), s, p, o, m)
+# define BOOST_PP_FOR_187(s, p, o, m) BOOST_PP_FOR_187_C(BOOST_PP_BOOL(p(188, s)), s, p, o, m)
+# define BOOST_PP_FOR_188(s, p, o, m) BOOST_PP_FOR_188_C(BOOST_PP_BOOL(p(189, s)), s, p, o, m)
+# define BOOST_PP_FOR_189(s, p, o, m) BOOST_PP_FOR_189_C(BOOST_PP_BOOL(p(190, s)), s, p, o, m)
+# define BOOST_PP_FOR_190(s, p, o, m) BOOST_PP_FOR_190_C(BOOST_PP_BOOL(p(191, s)), s, p, o, m)
+# define BOOST_PP_FOR_191(s, p, o, m) BOOST_PP_FOR_191_C(BOOST_PP_BOOL(p(192, s)), s, p, o, m)
+# define BOOST_PP_FOR_192(s, p, o, m) BOOST_PP_FOR_192_C(BOOST_PP_BOOL(p(193, s)), s, p, o, m)
+# define BOOST_PP_FOR_193(s, p, o, m) BOOST_PP_FOR_193_C(BOOST_PP_BOOL(p(194, s)), s, p, o, m)
+# define BOOST_PP_FOR_194(s, p, o, m) BOOST_PP_FOR_194_C(BOOST_PP_BOOL(p(195, s)), s, p, o, m)
+# define BOOST_PP_FOR_195(s, p, o, m) BOOST_PP_FOR_195_C(BOOST_PP_BOOL(p(196, s)), s, p, o, m)
+# define BOOST_PP_FOR_196(s, p, o, m) BOOST_PP_FOR_196_C(BOOST_PP_BOOL(p(197, s)), s, p, o, m)
+# define BOOST_PP_FOR_197(s, p, o, m) BOOST_PP_FOR_197_C(BOOST_PP_BOOL(p(198, s)), s, p, o, m)
+# define BOOST_PP_FOR_198(s, p, o, m) BOOST_PP_FOR_198_C(BOOST_PP_BOOL(p(199, s)), s, p, o, m)
+# define BOOST_PP_FOR_199(s, p, o, m) BOOST_PP_FOR_199_C(BOOST_PP_BOOL(p(200, s)), s, p, o, m)
+# define BOOST_PP_FOR_200(s, p, o, m) BOOST_PP_FOR_200_C(BOOST_PP_BOOL(p(201, s)), s, p, o, m)
+# define BOOST_PP_FOR_201(s, p, o, m) BOOST_PP_FOR_201_C(BOOST_PP_BOOL(p(202, s)), s, p, o, m)
+# define BOOST_PP_FOR_202(s, p, o, m) BOOST_PP_FOR_202_C(BOOST_PP_BOOL(p(203, s)), s, p, o, m)
+# define BOOST_PP_FOR_203(s, p, o, m) BOOST_PP_FOR_203_C(BOOST_PP_BOOL(p(204, s)), s, p, o, m)
+# define BOOST_PP_FOR_204(s, p, o, m) BOOST_PP_FOR_204_C(BOOST_PP_BOOL(p(205, s)), s, p, o, m)
+# define BOOST_PP_FOR_205(s, p, o, m) BOOST_PP_FOR_205_C(BOOST_PP_BOOL(p(206, s)), s, p, o, m)
+# define BOOST_PP_FOR_206(s, p, o, m) BOOST_PP_FOR_206_C(BOOST_PP_BOOL(p(207, s)), s, p, o, m)
+# define BOOST_PP_FOR_207(s, p, o, m) BOOST_PP_FOR_207_C(BOOST_PP_BOOL(p(208, s)), s, p, o, m)
+# define BOOST_PP_FOR_208(s, p, o, m) BOOST_PP_FOR_208_C(BOOST_PP_BOOL(p(209, s)), s, p, o, m)
+# define BOOST_PP_FOR_209(s, p, o, m) BOOST_PP_FOR_209_C(BOOST_PP_BOOL(p(210, s)), s, p, o, m)
+# define BOOST_PP_FOR_210(s, p, o, m) BOOST_PP_FOR_210_C(BOOST_PP_BOOL(p(211, s)), s, p, o, m)
+# define BOOST_PP_FOR_211(s, p, o, m) BOOST_PP_FOR_211_C(BOOST_PP_BOOL(p(212, s)), s, p, o, m)
+# define BOOST_PP_FOR_212(s, p, o, m) BOOST_PP_FOR_212_C(BOOST_PP_BOOL(p(213, s)), s, p, o, m)
+# define BOOST_PP_FOR_213(s, p, o, m) BOOST_PP_FOR_213_C(BOOST_PP_BOOL(p(214, s)), s, p, o, m)
+# define BOOST_PP_FOR_214(s, p, o, m) BOOST_PP_FOR_214_C(BOOST_PP_BOOL(p(215, s)), s, p, o, m)
+# define BOOST_PP_FOR_215(s, p, o, m) BOOST_PP_FOR_215_C(BOOST_PP_BOOL(p(216, s)), s, p, o, m)
+# define BOOST_PP_FOR_216(s, p, o, m) BOOST_PP_FOR_216_C(BOOST_PP_BOOL(p(217, s)), s, p, o, m)
+# define BOOST_PP_FOR_217(s, p, o, m) BOOST_PP_FOR_217_C(BOOST_PP_BOOL(p(218, s)), s, p, o, m)
+# define BOOST_PP_FOR_218(s, p, o, m) BOOST_PP_FOR_218_C(BOOST_PP_BOOL(p(219, s)), s, p, o, m)
+# define BOOST_PP_FOR_219(s, p, o, m) BOOST_PP_FOR_219_C(BOOST_PP_BOOL(p(220, s)), s, p, o, m)
+# define BOOST_PP_FOR_220(s, p, o, m) BOOST_PP_FOR_220_C(BOOST_PP_BOOL(p(221, s)), s, p, o, m)
+# define BOOST_PP_FOR_221(s, p, o, m) BOOST_PP_FOR_221_C(BOOST_PP_BOOL(p(222, s)), s, p, o, m)
+# define BOOST_PP_FOR_222(s, p, o, m) BOOST_PP_FOR_222_C(BOOST_PP_BOOL(p(223, s)), s, p, o, m)
+# define BOOST_PP_FOR_223(s, p, o, m) BOOST_PP_FOR_223_C(BOOST_PP_BOOL(p(224, s)), s, p, o, m)
+# define BOOST_PP_FOR_224(s, p, o, m) BOOST_PP_FOR_224_C(BOOST_PP_BOOL(p(225, s)), s, p, o, m)
+# define BOOST_PP_FOR_225(s, p, o, m) BOOST_PP_FOR_225_C(BOOST_PP_BOOL(p(226, s)), s, p, o, m)
+# define BOOST_PP_FOR_226(s, p, o, m) BOOST_PP_FOR_226_C(BOOST_PP_BOOL(p(227, s)), s, p, o, m)
+# define BOOST_PP_FOR_227(s, p, o, m) BOOST_PP_FOR_227_C(BOOST_PP_BOOL(p(228, s)), s, p, o, m)
+# define BOOST_PP_FOR_228(s, p, o, m) BOOST_PP_FOR_228_C(BOOST_PP_BOOL(p(229, s)), s, p, o, m)
+# define BOOST_PP_FOR_229(s, p, o, m) BOOST_PP_FOR_229_C(BOOST_PP_BOOL(p(230, s)), s, p, o, m)
+# define BOOST_PP_FOR_230(s, p, o, m) BOOST_PP_FOR_230_C(BOOST_PP_BOOL(p(231, s)), s, p, o, m)
+# define BOOST_PP_FOR_231(s, p, o, m) BOOST_PP_FOR_231_C(BOOST_PP_BOOL(p(232, s)), s, p, o, m)
+# define BOOST_PP_FOR_232(s, p, o, m) BOOST_PP_FOR_232_C(BOOST_PP_BOOL(p(233, s)), s, p, o, m)
+# define BOOST_PP_FOR_233(s, p, o, m) BOOST_PP_FOR_233_C(BOOST_PP_BOOL(p(234, s)), s, p, o, m)
+# define BOOST_PP_FOR_234(s, p, o, m) BOOST_PP_FOR_234_C(BOOST_PP_BOOL(p(235, s)), s, p, o, m)
+# define BOOST_PP_FOR_235(s, p, o, m) BOOST_PP_FOR_235_C(BOOST_PP_BOOL(p(236, s)), s, p, o, m)
+# define BOOST_PP_FOR_236(s, p, o, m) BOOST_PP_FOR_236_C(BOOST_PP_BOOL(p(237, s)), s, p, o, m)
+# define BOOST_PP_FOR_237(s, p, o, m) BOOST_PP_FOR_237_C(BOOST_PP_BOOL(p(238, s)), s, p, o, m)
+# define BOOST_PP_FOR_238(s, p, o, m) BOOST_PP_FOR_238_C(BOOST_PP_BOOL(p(239, s)), s, p, o, m)
+# define BOOST_PP_FOR_239(s, p, o, m) BOOST_PP_FOR_239_C(BOOST_PP_BOOL(p(240, s)), s, p, o, m)
+# define BOOST_PP_FOR_240(s, p, o, m) BOOST_PP_FOR_240_C(BOOST_PP_BOOL(p(241, s)), s, p, o, m)
+# define BOOST_PP_FOR_241(s, p, o, m) BOOST_PP_FOR_241_C(BOOST_PP_BOOL(p(242, s)), s, p, o, m)
+# define BOOST_PP_FOR_242(s, p, o, m) BOOST_PP_FOR_242_C(BOOST_PP_BOOL(p(243, s)), s, p, o, m)
+# define BOOST_PP_FOR_243(s, p, o, m) BOOST_PP_FOR_243_C(BOOST_PP_BOOL(p(244, s)), s, p, o, m)
+# define BOOST_PP_FOR_244(s, p, o, m) BOOST_PP_FOR_244_C(BOOST_PP_BOOL(p(245, s)), s, p, o, m)
+# define BOOST_PP_FOR_245(s, p, o, m) BOOST_PP_FOR_245_C(BOOST_PP_BOOL(p(246, s)), s, p, o, m)
+# define BOOST_PP_FOR_246(s, p, o, m) BOOST_PP_FOR_246_C(BOOST_PP_BOOL(p(247, s)), s, p, o, m)
+# define BOOST_PP_FOR_247(s, p, o, m) BOOST_PP_FOR_247_C(BOOST_PP_BOOL(p(248, s)), s, p, o, m)
+# define BOOST_PP_FOR_248(s, p, o, m) BOOST_PP_FOR_248_C(BOOST_PP_BOOL(p(249, s)), s, p, o, m)
+# define BOOST_PP_FOR_249(s, p, o, m) BOOST_PP_FOR_249_C(BOOST_PP_BOOL(p(250, s)), s, p, o, m)
+# define BOOST_PP_FOR_250(s, p, o, m) BOOST_PP_FOR_250_C(BOOST_PP_BOOL(p(251, s)), s, p, o, m)
+# define BOOST_PP_FOR_251(s, p, o, m) BOOST_PP_FOR_251_C(BOOST_PP_BOOL(p(252, s)), s, p, o, m)
+# define BOOST_PP_FOR_252(s, p, o, m) BOOST_PP_FOR_252_C(BOOST_PP_BOOL(p(253, s)), s, p, o, m)
+# define BOOST_PP_FOR_253(s, p, o, m) BOOST_PP_FOR_253_C(BOOST_PP_BOOL(p(254, s)), s, p, o, m)
+# define BOOST_PP_FOR_254(s, p, o, m) BOOST_PP_FOR_254_C(BOOST_PP_BOOL(p(255, s)), s, p, o, m)
+# define BOOST_PP_FOR_255(s, p, o, m) BOOST_PP_FOR_255_C(BOOST_PP_BOOL(p(256, s)), s, p, o, m)
+# define BOOST_PP_FOR_256(s, p, o, m) BOOST_PP_FOR_256_C(BOOST_PP_BOOL(p(257, s)), s, p, o, m)
+#
+# define BOOST_PP_FOR_1_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(2, s) BOOST_PP_IIF(c, BOOST_PP_FOR_2, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(2, s), p, o, m)
+# define BOOST_PP_FOR_2_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(3, s) BOOST_PP_IIF(c, BOOST_PP_FOR_3, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(3, s), p, o, m)
+# define BOOST_PP_FOR_3_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(4, s) BOOST_PP_IIF(c, BOOST_PP_FOR_4, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(4, s), p, o, m)
+# define BOOST_PP_FOR_4_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(5, s) BOOST_PP_IIF(c, BOOST_PP_FOR_5, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(5, s), p, o, m)
+# define BOOST_PP_FOR_5_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(6, s) BOOST_PP_IIF(c, BOOST_PP_FOR_6, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(6, s), p, o, m)
+# define BOOST_PP_FOR_6_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(7, s) BOOST_PP_IIF(c, BOOST_PP_FOR_7, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(7, s), p, o, m)
+# define BOOST_PP_FOR_7_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(8, s) BOOST_PP_IIF(c, BOOST_PP_FOR_8, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(8, s), p, o, m)
+# define BOOST_PP_FOR_8_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(9, s) BOOST_PP_IIF(c, BOOST_PP_FOR_9, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(9, s), p, o, m)
+# define BOOST_PP_FOR_9_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(10, s) BOOST_PP_IIF(c, BOOST_PP_FOR_10, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(10, s), p, o, m)
+# define BOOST_PP_FOR_10_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(11, s) BOOST_PP_IIF(c, BOOST_PP_FOR_11, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(11, s), p, o, m)
+# define BOOST_PP_FOR_11_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(12, s) BOOST_PP_IIF(c, BOOST_PP_FOR_12, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(12, s), p, o, m)
+# define BOOST_PP_FOR_12_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(13, s) BOOST_PP_IIF(c, BOOST_PP_FOR_13, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(13, s), p, o, m)
+# define BOOST_PP_FOR_13_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(14, s) BOOST_PP_IIF(c, BOOST_PP_FOR_14, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(14, s), p, o, m)
+# define BOOST_PP_FOR_14_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(15, s) BOOST_PP_IIF(c, BOOST_PP_FOR_15, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(15, s), p, o, m)
+# define BOOST_PP_FOR_15_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(16, s) BOOST_PP_IIF(c, BOOST_PP_FOR_16, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(16, s), p, o, m)
+# define BOOST_PP_FOR_16_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(17, s) BOOST_PP_IIF(c, BOOST_PP_FOR_17, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(17, s), p, o, m)
+# define BOOST_PP_FOR_17_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(18, s) BOOST_PP_IIF(c, BOOST_PP_FOR_18, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(18, s), p, o, m)
+# define BOOST_PP_FOR_18_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(19, s) BOOST_PP_IIF(c, BOOST_PP_FOR_19, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(19, s), p, o, m)
+# define BOOST_PP_FOR_19_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(20, s) BOOST_PP_IIF(c, BOOST_PP_FOR_20, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(20, s), p, o, m)
+# define BOOST_PP_FOR_20_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(21, s) BOOST_PP_IIF(c, BOOST_PP_FOR_21, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(21, s), p, o, m)
+# define BOOST_PP_FOR_21_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(22, s) BOOST_PP_IIF(c, BOOST_PP_FOR_22, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(22, s), p, o, m)
+# define BOOST_PP_FOR_22_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(23, s) BOOST_PP_IIF(c, BOOST_PP_FOR_23, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(23, s), p, o, m)
+# define BOOST_PP_FOR_23_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(24, s) BOOST_PP_IIF(c, BOOST_PP_FOR_24, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(24, s), p, o, m)
+# define BOOST_PP_FOR_24_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(25, s) BOOST_PP_IIF(c, BOOST_PP_FOR_25, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(25, s), p, o, m)
+# define BOOST_PP_FOR_25_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(26, s) BOOST_PP_IIF(c, BOOST_PP_FOR_26, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(26, s), p, o, m)
+# define BOOST_PP_FOR_26_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(27, s) BOOST_PP_IIF(c, BOOST_PP_FOR_27, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(27, s), p, o, m)
+# define BOOST_PP_FOR_27_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(28, s) BOOST_PP_IIF(c, BOOST_PP_FOR_28, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(28, s), p, o, m)
+# define BOOST_PP_FOR_28_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(29, s) BOOST_PP_IIF(c, BOOST_PP_FOR_29, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(29, s), p, o, m)
+# define BOOST_PP_FOR_29_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(30, s) BOOST_PP_IIF(c, BOOST_PP_FOR_30, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(30, s), p, o, m)
+# define BOOST_PP_FOR_30_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(31, s) BOOST_PP_IIF(c, BOOST_PP_FOR_31, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(31, s), p, o, m)
+# define BOOST_PP_FOR_31_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(32, s) BOOST_PP_IIF(c, BOOST_PP_FOR_32, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(32, s), p, o, m)
+# define BOOST_PP_FOR_32_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(33, s) BOOST_PP_IIF(c, BOOST_PP_FOR_33, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(33, s), p, o, m)
+# define BOOST_PP_FOR_33_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(34, s) BOOST_PP_IIF(c, BOOST_PP_FOR_34, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(34, s), p, o, m)
+# define BOOST_PP_FOR_34_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(35, s) BOOST_PP_IIF(c, BOOST_PP_FOR_35, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(35, s), p, o, m)
+# define BOOST_PP_FOR_35_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(36, s) BOOST_PP_IIF(c, BOOST_PP_FOR_36, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(36, s), p, o, m)
+# define BOOST_PP_FOR_36_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(37, s) BOOST_PP_IIF(c, BOOST_PP_FOR_37, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(37, s), p, o, m)
+# define BOOST_PP_FOR_37_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(38, s) BOOST_PP_IIF(c, BOOST_PP_FOR_38, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(38, s), p, o, m)
+# define BOOST_PP_FOR_38_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(39, s) BOOST_PP_IIF(c, BOOST_PP_FOR_39, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(39, s), p, o, m)
+# define BOOST_PP_FOR_39_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(40, s) BOOST_PP_IIF(c, BOOST_PP_FOR_40, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(40, s), p, o, m)
+# define BOOST_PP_FOR_40_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(41, s) BOOST_PP_IIF(c, BOOST_PP_FOR_41, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(41, s), p, o, m)
+# define BOOST_PP_FOR_41_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(42, s) BOOST_PP_IIF(c, BOOST_PP_FOR_42, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(42, s), p, o, m)
+# define BOOST_PP_FOR_42_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(43, s) BOOST_PP_IIF(c, BOOST_PP_FOR_43, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(43, s), p, o, m)
+# define BOOST_PP_FOR_43_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(44, s) BOOST_PP_IIF(c, BOOST_PP_FOR_44, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(44, s), p, o, m)
+# define BOOST_PP_FOR_44_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(45, s) BOOST_PP_IIF(c, BOOST_PP_FOR_45, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(45, s), p, o, m)
+# define BOOST_PP_FOR_45_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(46, s) BOOST_PP_IIF(c, BOOST_PP_FOR_46, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(46, s), p, o, m)
+# define BOOST_PP_FOR_46_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(47, s) BOOST_PP_IIF(c, BOOST_PP_FOR_47, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(47, s), p, o, m)
+# define BOOST_PP_FOR_47_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(48, s) BOOST_PP_IIF(c, BOOST_PP_FOR_48, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(48, s), p, o, m)
+# define BOOST_PP_FOR_48_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(49, s) BOOST_PP_IIF(c, BOOST_PP_FOR_49, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(49, s), p, o, m)
+# define BOOST_PP_FOR_49_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(50, s) BOOST_PP_IIF(c, BOOST_PP_FOR_50, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(50, s), p, o, m)
+# define BOOST_PP_FOR_50_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(51, s) BOOST_PP_IIF(c, BOOST_PP_FOR_51, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(51, s), p, o, m)
+# define BOOST_PP_FOR_51_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(52, s) BOOST_PP_IIF(c, BOOST_PP_FOR_52, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(52, s), p, o, m)
+# define BOOST_PP_FOR_52_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(53, s) BOOST_PP_IIF(c, BOOST_PP_FOR_53, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(53, s), p, o, m)
+# define BOOST_PP_FOR_53_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(54, s) BOOST_PP_IIF(c, BOOST_PP_FOR_54, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(54, s), p, o, m)
+# define BOOST_PP_FOR_54_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(55, s) BOOST_PP_IIF(c, BOOST_PP_FOR_55, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(55, s), p, o, m)
+# define BOOST_PP_FOR_55_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(56, s) BOOST_PP_IIF(c, BOOST_PP_FOR_56, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(56, s), p, o, m)
+# define BOOST_PP_FOR_56_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(57, s) BOOST_PP_IIF(c, BOOST_PP_FOR_57, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(57, s), p, o, m)
+# define BOOST_PP_FOR_57_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(58, s) BOOST_PP_IIF(c, BOOST_PP_FOR_58, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(58, s), p, o, m)
+# define BOOST_PP_FOR_58_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(59, s) BOOST_PP_IIF(c, BOOST_PP_FOR_59, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(59, s), p, o, m)
+# define BOOST_PP_FOR_59_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(60, s) BOOST_PP_IIF(c, BOOST_PP_FOR_60, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(60, s), p, o, m)
+# define BOOST_PP_FOR_60_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(61, s) BOOST_PP_IIF(c, BOOST_PP_FOR_61, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(61, s), p, o, m)
+# define BOOST_PP_FOR_61_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(62, s) BOOST_PP_IIF(c, BOOST_PP_FOR_62, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(62, s), p, o, m)
+# define BOOST_PP_FOR_62_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(63, s) BOOST_PP_IIF(c, BOOST_PP_FOR_63, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(63, s), p, o, m)
+# define BOOST_PP_FOR_63_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(64, s) BOOST_PP_IIF(c, BOOST_PP_FOR_64, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(64, s), p, o, m)
+# define BOOST_PP_FOR_64_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(65, s) BOOST_PP_IIF(c, BOOST_PP_FOR_65, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(65, s), p, o, m)
+# define BOOST_PP_FOR_65_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(66, s) BOOST_PP_IIF(c, BOOST_PP_FOR_66, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(66, s), p, o, m)
+# define BOOST_PP_FOR_66_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(67, s) BOOST_PP_IIF(c, BOOST_PP_FOR_67, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(67, s), p, o, m)
+# define BOOST_PP_FOR_67_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(68, s) BOOST_PP_IIF(c, BOOST_PP_FOR_68, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(68, s), p, o, m)
+# define BOOST_PP_FOR_68_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(69, s) BOOST_PP_IIF(c, BOOST_PP_FOR_69, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(69, s), p, o, m)
+# define BOOST_PP_FOR_69_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(70, s) BOOST_PP_IIF(c, BOOST_PP_FOR_70, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(70, s), p, o, m)
+# define BOOST_PP_FOR_70_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(71, s) BOOST_PP_IIF(c, BOOST_PP_FOR_71, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(71, s), p, o, m)
+# define BOOST_PP_FOR_71_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(72, s) BOOST_PP_IIF(c, BOOST_PP_FOR_72, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(72, s), p, o, m)
+# define BOOST_PP_FOR_72_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(73, s) BOOST_PP_IIF(c, BOOST_PP_FOR_73, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(73, s), p, o, m)
+# define BOOST_PP_FOR_73_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(74, s) BOOST_PP_IIF(c, BOOST_PP_FOR_74, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(74, s), p, o, m)
+# define BOOST_PP_FOR_74_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(75, s) BOOST_PP_IIF(c, BOOST_PP_FOR_75, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(75, s), p, o, m)
+# define BOOST_PP_FOR_75_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(76, s) BOOST_PP_IIF(c, BOOST_PP_FOR_76, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(76, s), p, o, m)
+# define BOOST_PP_FOR_76_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(77, s) BOOST_PP_IIF(c, BOOST_PP_FOR_77, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(77, s), p, o, m)
+# define BOOST_PP_FOR_77_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(78, s) BOOST_PP_IIF(c, BOOST_PP_FOR_78, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(78, s), p, o, m)
+# define BOOST_PP_FOR_78_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(79, s) BOOST_PP_IIF(c, BOOST_PP_FOR_79, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(79, s), p, o, m)
+# define BOOST_PP_FOR_79_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(80, s) BOOST_PP_IIF(c, BOOST_PP_FOR_80, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(80, s), p, o, m)
+# define BOOST_PP_FOR_80_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(81, s) BOOST_PP_IIF(c, BOOST_PP_FOR_81, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(81, s), p, o, m)
+# define BOOST_PP_FOR_81_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(82, s) BOOST_PP_IIF(c, BOOST_PP_FOR_82, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(82, s), p, o, m)
+# define BOOST_PP_FOR_82_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(83, s) BOOST_PP_IIF(c, BOOST_PP_FOR_83, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(83, s), p, o, m)
+# define BOOST_PP_FOR_83_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(84, s) BOOST_PP_IIF(c, BOOST_PP_FOR_84, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(84, s), p, o, m)
+# define BOOST_PP_FOR_84_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(85, s) BOOST_PP_IIF(c, BOOST_PP_FOR_85, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(85, s), p, o, m)
+# define BOOST_PP_FOR_85_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(86, s) BOOST_PP_IIF(c, BOOST_PP_FOR_86, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(86, s), p, o, m)
+# define BOOST_PP_FOR_86_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(87, s) BOOST_PP_IIF(c, BOOST_PP_FOR_87, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(87, s), p, o, m)
+# define BOOST_PP_FOR_87_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(88, s) BOOST_PP_IIF(c, BOOST_PP_FOR_88, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(88, s), p, o, m)
+# define BOOST_PP_FOR_88_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(89, s) BOOST_PP_IIF(c, BOOST_PP_FOR_89, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(89, s), p, o, m)
+# define BOOST_PP_FOR_89_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(90, s) BOOST_PP_IIF(c, BOOST_PP_FOR_90, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(90, s), p, o, m)
+# define BOOST_PP_FOR_90_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(91, s) BOOST_PP_IIF(c, BOOST_PP_FOR_91, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(91, s), p, o, m)
+# define BOOST_PP_FOR_91_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(92, s) BOOST_PP_IIF(c, BOOST_PP_FOR_92, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(92, s), p, o, m)
+# define BOOST_PP_FOR_92_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(93, s) BOOST_PP_IIF(c, BOOST_PP_FOR_93, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(93, s), p, o, m)
+# define BOOST_PP_FOR_93_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(94, s) BOOST_PP_IIF(c, BOOST_PP_FOR_94, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(94, s), p, o, m)
+# define BOOST_PP_FOR_94_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(95, s) BOOST_PP_IIF(c, BOOST_PP_FOR_95, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(95, s), p, o, m)
+# define BOOST_PP_FOR_95_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(96, s) BOOST_PP_IIF(c, BOOST_PP_FOR_96, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(96, s), p, o, m)
+# define BOOST_PP_FOR_96_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(97, s) BOOST_PP_IIF(c, BOOST_PP_FOR_97, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(97, s), p, o, m)
+# define BOOST_PP_FOR_97_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(98, s) BOOST_PP_IIF(c, BOOST_PP_FOR_98, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(98, s), p, o, m)
+# define BOOST_PP_FOR_98_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(99, s) BOOST_PP_IIF(c, BOOST_PP_FOR_99, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(99, s), p, o, m)
+# define BOOST_PP_FOR_99_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(100, s) BOOST_PP_IIF(c, BOOST_PP_FOR_100, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(100, s), p, o, m)
+# define BOOST_PP_FOR_100_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(101, s) BOOST_PP_IIF(c, BOOST_PP_FOR_101, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(101, s), p, o, m)
+# define BOOST_PP_FOR_101_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(102, s) BOOST_PP_IIF(c, BOOST_PP_FOR_102, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(102, s), p, o, m)
+# define BOOST_PP_FOR_102_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(103, s) BOOST_PP_IIF(c, BOOST_PP_FOR_103, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(103, s), p, o, m)
+# define BOOST_PP_FOR_103_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(104, s) BOOST_PP_IIF(c, BOOST_PP_FOR_104, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(104, s), p, o, m)
+# define BOOST_PP_FOR_104_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(105, s) BOOST_PP_IIF(c, BOOST_PP_FOR_105, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(105, s), p, o, m)
+# define BOOST_PP_FOR_105_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(106, s) BOOST_PP_IIF(c, BOOST_PP_FOR_106, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(106, s), p, o, m)
+# define BOOST_PP_FOR_106_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(107, s) BOOST_PP_IIF(c, BOOST_PP_FOR_107, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(107, s), p, o, m)
+# define BOOST_PP_FOR_107_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(108, s) BOOST_PP_IIF(c, BOOST_PP_FOR_108, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(108, s), p, o, m)
+# define BOOST_PP_FOR_108_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(109, s) BOOST_PP_IIF(c, BOOST_PP_FOR_109, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(109, s), p, o, m)
+# define BOOST_PP_FOR_109_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(110, s) BOOST_PP_IIF(c, BOOST_PP_FOR_110, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(110, s), p, o, m)
+# define BOOST_PP_FOR_110_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(111, s) BOOST_PP_IIF(c, BOOST_PP_FOR_111, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(111, s), p, o, m)
+# define BOOST_PP_FOR_111_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(112, s) BOOST_PP_IIF(c, BOOST_PP_FOR_112, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(112, s), p, o, m)
+# define BOOST_PP_FOR_112_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(113, s) BOOST_PP_IIF(c, BOOST_PP_FOR_113, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(113, s), p, o, m)
+# define BOOST_PP_FOR_113_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(114, s) BOOST_PP_IIF(c, BOOST_PP_FOR_114, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(114, s), p, o, m)
+# define BOOST_PP_FOR_114_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(115, s) BOOST_PP_IIF(c, BOOST_PP_FOR_115, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(115, s), p, o, m)
+# define BOOST_PP_FOR_115_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(116, s) BOOST_PP_IIF(c, BOOST_PP_FOR_116, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(116, s), p, o, m)
+# define BOOST_PP_FOR_116_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(117, s) BOOST_PP_IIF(c, BOOST_PP_FOR_117, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(117, s), p, o, m)
+# define BOOST_PP_FOR_117_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(118, s) BOOST_PP_IIF(c, BOOST_PP_FOR_118, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(118, s), p, o, m)
+# define BOOST_PP_FOR_118_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(119, s) BOOST_PP_IIF(c, BOOST_PP_FOR_119, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(119, s), p, o, m)
+# define BOOST_PP_FOR_119_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(120, s) BOOST_PP_IIF(c, BOOST_PP_FOR_120, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(120, s), p, o, m)
+# define BOOST_PP_FOR_120_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(121, s) BOOST_PP_IIF(c, BOOST_PP_FOR_121, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(121, s), p, o, m)
+# define BOOST_PP_FOR_121_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(122, s) BOOST_PP_IIF(c, BOOST_PP_FOR_122, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(122, s), p, o, m)
+# define BOOST_PP_FOR_122_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(123, s) BOOST_PP_IIF(c, BOOST_PP_FOR_123, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(123, s), p, o, m)
+# define BOOST_PP_FOR_123_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(124, s) BOOST_PP_IIF(c, BOOST_PP_FOR_124, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(124, s), p, o, m)
+# define BOOST_PP_FOR_124_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(125, s) BOOST_PP_IIF(c, BOOST_PP_FOR_125, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(125, s), p, o, m)
+# define BOOST_PP_FOR_125_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(126, s) BOOST_PP_IIF(c, BOOST_PP_FOR_126, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(126, s), p, o, m)
+# define BOOST_PP_FOR_126_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(127, s) BOOST_PP_IIF(c, BOOST_PP_FOR_127, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(127, s), p, o, m)
+# define BOOST_PP_FOR_127_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(128, s) BOOST_PP_IIF(c, BOOST_PP_FOR_128, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(128, s), p, o, m)
+# define BOOST_PP_FOR_128_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(129, s) BOOST_PP_IIF(c, BOOST_PP_FOR_129, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(129, s), p, o, m)
+# define BOOST_PP_FOR_129_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(130, s) BOOST_PP_IIF(c, BOOST_PP_FOR_130, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(130, s), p, o, m)
+# define BOOST_PP_FOR_130_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(131, s) BOOST_PP_IIF(c, BOOST_PP_FOR_131, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(131, s), p, o, m)
+# define BOOST_PP_FOR_131_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(132, s) BOOST_PP_IIF(c, BOOST_PP_FOR_132, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(132, s), p, o, m)
+# define BOOST_PP_FOR_132_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(133, s) BOOST_PP_IIF(c, BOOST_PP_FOR_133, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(133, s), p, o, m)
+# define BOOST_PP_FOR_133_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(134, s) BOOST_PP_IIF(c, BOOST_PP_FOR_134, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(134, s), p, o, m)
+# define BOOST_PP_FOR_134_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(135, s) BOOST_PP_IIF(c, BOOST_PP_FOR_135, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(135, s), p, o, m)
+# define BOOST_PP_FOR_135_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(136, s) BOOST_PP_IIF(c, BOOST_PP_FOR_136, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(136, s), p, o, m)
+# define BOOST_PP_FOR_136_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(137, s) BOOST_PP_IIF(c, BOOST_PP_FOR_137, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(137, s), p, o, m)
+# define BOOST_PP_FOR_137_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(138, s) BOOST_PP_IIF(c, BOOST_PP_FOR_138, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(138, s), p, o, m)
+# define BOOST_PP_FOR_138_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(139, s) BOOST_PP_IIF(c, BOOST_PP_FOR_139, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(139, s), p, o, m)
+# define BOOST_PP_FOR_139_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(140, s) BOOST_PP_IIF(c, BOOST_PP_FOR_140, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(140, s), p, o, m)
+# define BOOST_PP_FOR_140_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(141, s) BOOST_PP_IIF(c, BOOST_PP_FOR_141, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(141, s), p, o, m)
+# define BOOST_PP_FOR_141_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(142, s) BOOST_PP_IIF(c, BOOST_PP_FOR_142, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(142, s), p, o, m)
+# define BOOST_PP_FOR_142_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(143, s) BOOST_PP_IIF(c, BOOST_PP_FOR_143, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(143, s), p, o, m)
+# define BOOST_PP_FOR_143_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(144, s) BOOST_PP_IIF(c, BOOST_PP_FOR_144, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(144, s), p, o, m)
+# define BOOST_PP_FOR_144_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(145, s) BOOST_PP_IIF(c, BOOST_PP_FOR_145, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(145, s), p, o, m)
+# define BOOST_PP_FOR_145_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(146, s) BOOST_PP_IIF(c, BOOST_PP_FOR_146, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(146, s), p, o, m)
+# define BOOST_PP_FOR_146_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(147, s) BOOST_PP_IIF(c, BOOST_PP_FOR_147, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(147, s), p, o, m)
+# define BOOST_PP_FOR_147_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(148, s) BOOST_PP_IIF(c, BOOST_PP_FOR_148, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(148, s), p, o, m)
+# define BOOST_PP_FOR_148_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(149, s) BOOST_PP_IIF(c, BOOST_PP_FOR_149, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(149, s), p, o, m)
+# define BOOST_PP_FOR_149_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(150, s) BOOST_PP_IIF(c, BOOST_PP_FOR_150, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(150, s), p, o, m)
+# define BOOST_PP_FOR_150_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(151, s) BOOST_PP_IIF(c, BOOST_PP_FOR_151, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(151, s), p, o, m)
+# define BOOST_PP_FOR_151_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(152, s) BOOST_PP_IIF(c, BOOST_PP_FOR_152, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(152, s), p, o, m)
+# define BOOST_PP_FOR_152_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(153, s) BOOST_PP_IIF(c, BOOST_PP_FOR_153, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(153, s), p, o, m)
+# define BOOST_PP_FOR_153_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(154, s) BOOST_PP_IIF(c, BOOST_PP_FOR_154, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(154, s), p, o, m)
+# define BOOST_PP_FOR_154_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(155, s) BOOST_PP_IIF(c, BOOST_PP_FOR_155, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(155, s), p, o, m)
+# define BOOST_PP_FOR_155_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(156, s) BOOST_PP_IIF(c, BOOST_PP_FOR_156, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(156, s), p, o, m)
+# define BOOST_PP_FOR_156_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(157, s) BOOST_PP_IIF(c, BOOST_PP_FOR_157, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(157, s), p, o, m)
+# define BOOST_PP_FOR_157_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(158, s) BOOST_PP_IIF(c, BOOST_PP_FOR_158, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(158, s), p, o, m)
+# define BOOST_PP_FOR_158_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(159, s) BOOST_PP_IIF(c, BOOST_PP_FOR_159, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(159, s), p, o, m)
+# define BOOST_PP_FOR_159_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(160, s) BOOST_PP_IIF(c, BOOST_PP_FOR_160, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(160, s), p, o, m)
+# define BOOST_PP_FOR_160_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(161, s) BOOST_PP_IIF(c, BOOST_PP_FOR_161, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(161, s), p, o, m)
+# define BOOST_PP_FOR_161_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(162, s) BOOST_PP_IIF(c, BOOST_PP_FOR_162, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(162, s), p, o, m)
+# define BOOST_PP_FOR_162_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(163, s) BOOST_PP_IIF(c, BOOST_PP_FOR_163, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(163, s), p, o, m)
+# define BOOST_PP_FOR_163_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(164, s) BOOST_PP_IIF(c, BOOST_PP_FOR_164, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(164, s), p, o, m)
+# define BOOST_PP_FOR_164_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(165, s) BOOST_PP_IIF(c, BOOST_PP_FOR_165, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(165, s), p, o, m)
+# define BOOST_PP_FOR_165_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(166, s) BOOST_PP_IIF(c, BOOST_PP_FOR_166, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(166, s), p, o, m)
+# define BOOST_PP_FOR_166_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(167, s) BOOST_PP_IIF(c, BOOST_PP_FOR_167, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(167, s), p, o, m)
+# define BOOST_PP_FOR_167_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(168, s) BOOST_PP_IIF(c, BOOST_PP_FOR_168, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(168, s), p, o, m)
+# define BOOST_PP_FOR_168_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(169, s) BOOST_PP_IIF(c, BOOST_PP_FOR_169, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(169, s), p, o, m)
+# define BOOST_PP_FOR_169_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(170, s) BOOST_PP_IIF(c, BOOST_PP_FOR_170, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(170, s), p, o, m)
+# define BOOST_PP_FOR_170_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(171, s) BOOST_PP_IIF(c, BOOST_PP_FOR_171, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(171, s), p, o, m)
+# define BOOST_PP_FOR_171_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(172, s) BOOST_PP_IIF(c, BOOST_PP_FOR_172, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(172, s), p, o, m)
+# define BOOST_PP_FOR_172_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(173, s) BOOST_PP_IIF(c, BOOST_PP_FOR_173, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(173, s), p, o, m)
+# define BOOST_PP_FOR_173_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(174, s) BOOST_PP_IIF(c, BOOST_PP_FOR_174, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(174, s), p, o, m)
+# define BOOST_PP_FOR_174_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(175, s) BOOST_PP_IIF(c, BOOST_PP_FOR_175, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(175, s), p, o, m)
+# define BOOST_PP_FOR_175_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(176, s) BOOST_PP_IIF(c, BOOST_PP_FOR_176, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(176, s), p, o, m)
+# define BOOST_PP_FOR_176_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(177, s) BOOST_PP_IIF(c, BOOST_PP_FOR_177, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(177, s), p, o, m)
+# define BOOST_PP_FOR_177_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(178, s) BOOST_PP_IIF(c, BOOST_PP_FOR_178, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(178, s), p, o, m)
+# define BOOST_PP_FOR_178_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(179, s) BOOST_PP_IIF(c, BOOST_PP_FOR_179, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(179, s), p, o, m)
+# define BOOST_PP_FOR_179_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(180, s) BOOST_PP_IIF(c, BOOST_PP_FOR_180, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(180, s), p, o, m)
+# define BOOST_PP_FOR_180_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(181, s) BOOST_PP_IIF(c, BOOST_PP_FOR_181, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(181, s), p, o, m)
+# define BOOST_PP_FOR_181_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(182, s) BOOST_PP_IIF(c, BOOST_PP_FOR_182, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(182, s), p, o, m)
+# define BOOST_PP_FOR_182_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(183, s) BOOST_PP_IIF(c, BOOST_PP_FOR_183, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(183, s), p, o, m)
+# define BOOST_PP_FOR_183_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(184, s) BOOST_PP_IIF(c, BOOST_PP_FOR_184, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(184, s), p, o, m)
+# define BOOST_PP_FOR_184_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(185, s) BOOST_PP_IIF(c, BOOST_PP_FOR_185, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(185, s), p, o, m)
+# define BOOST_PP_FOR_185_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(186, s) BOOST_PP_IIF(c, BOOST_PP_FOR_186, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(186, s), p, o, m)
+# define BOOST_PP_FOR_186_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(187, s) BOOST_PP_IIF(c, BOOST_PP_FOR_187, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(187, s), p, o, m)
+# define BOOST_PP_FOR_187_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(188, s) BOOST_PP_IIF(c, BOOST_PP_FOR_188, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(188, s), p, o, m)
+# define BOOST_PP_FOR_188_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(189, s) BOOST_PP_IIF(c, BOOST_PP_FOR_189, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(189, s), p, o, m)
+# define BOOST_PP_FOR_189_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(190, s) BOOST_PP_IIF(c, BOOST_PP_FOR_190, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(190, s), p, o, m)
+# define BOOST_PP_FOR_190_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(191, s) BOOST_PP_IIF(c, BOOST_PP_FOR_191, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(191, s), p, o, m)
+# define BOOST_PP_FOR_191_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(192, s) BOOST_PP_IIF(c, BOOST_PP_FOR_192, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(192, s), p, o, m)
+# define BOOST_PP_FOR_192_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(193, s) BOOST_PP_IIF(c, BOOST_PP_FOR_193, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(193, s), p, o, m)
+# define BOOST_PP_FOR_193_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(194, s) BOOST_PP_IIF(c, BOOST_PP_FOR_194, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(194, s), p, o, m)
+# define BOOST_PP_FOR_194_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(195, s) BOOST_PP_IIF(c, BOOST_PP_FOR_195, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(195, s), p, o, m)
+# define BOOST_PP_FOR_195_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(196, s) BOOST_PP_IIF(c, BOOST_PP_FOR_196, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(196, s), p, o, m)
+# define BOOST_PP_FOR_196_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(197, s) BOOST_PP_IIF(c, BOOST_PP_FOR_197, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(197, s), p, o, m)
+# define BOOST_PP_FOR_197_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(198, s) BOOST_PP_IIF(c, BOOST_PP_FOR_198, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(198, s), p, o, m)
+# define BOOST_PP_FOR_198_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(199, s) BOOST_PP_IIF(c, BOOST_PP_FOR_199, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(199, s), p, o, m)
+# define BOOST_PP_FOR_199_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(200, s) BOOST_PP_IIF(c, BOOST_PP_FOR_200, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(200, s), p, o, m)
+# define BOOST_PP_FOR_200_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(201, s) BOOST_PP_IIF(c, BOOST_PP_FOR_201, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(201, s), p, o, m)
+# define BOOST_PP_FOR_201_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(202, s) BOOST_PP_IIF(c, BOOST_PP_FOR_202, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(202, s), p, o, m)
+# define BOOST_PP_FOR_202_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(203, s) BOOST_PP_IIF(c, BOOST_PP_FOR_203, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(203, s), p, o, m)
+# define BOOST_PP_FOR_203_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(204, s) BOOST_PP_IIF(c, BOOST_PP_FOR_204, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(204, s), p, o, m)
+# define BOOST_PP_FOR_204_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(205, s) BOOST_PP_IIF(c, BOOST_PP_FOR_205, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(205, s), p, o, m)
+# define BOOST_PP_FOR_205_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(206, s) BOOST_PP_IIF(c, BOOST_PP_FOR_206, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(206, s), p, o, m)
+# define BOOST_PP_FOR_206_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(207, s) BOOST_PP_IIF(c, BOOST_PP_FOR_207, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(207, s), p, o, m)
+# define BOOST_PP_FOR_207_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(208, s) BOOST_PP_IIF(c, BOOST_PP_FOR_208, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(208, s), p, o, m)
+# define BOOST_PP_FOR_208_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(209, s) BOOST_PP_IIF(c, BOOST_PP_FOR_209, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(209, s), p, o, m)
+# define BOOST_PP_FOR_209_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(210, s) BOOST_PP_IIF(c, BOOST_PP_FOR_210, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(210, s), p, o, m)
+# define BOOST_PP_FOR_210_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(211, s) BOOST_PP_IIF(c, BOOST_PP_FOR_211, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(211, s), p, o, m)
+# define BOOST_PP_FOR_211_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(212, s) BOOST_PP_IIF(c, BOOST_PP_FOR_212, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(212, s), p, o, m)
+# define BOOST_PP_FOR_212_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(213, s) BOOST_PP_IIF(c, BOOST_PP_FOR_213, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(213, s), p, o, m)
+# define BOOST_PP_FOR_213_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(214, s) BOOST_PP_IIF(c, BOOST_PP_FOR_214, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(214, s), p, o, m)
+# define BOOST_PP_FOR_214_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(215, s) BOOST_PP_IIF(c, BOOST_PP_FOR_215, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(215, s), p, o, m)
+# define BOOST_PP_FOR_215_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(216, s) BOOST_PP_IIF(c, BOOST_PP_FOR_216, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(216, s), p, o, m)
+# define BOOST_PP_FOR_216_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(217, s) BOOST_PP_IIF(c, BOOST_PP_FOR_217, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(217, s), p, o, m)
+# define BOOST_PP_FOR_217_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(218, s) BOOST_PP_IIF(c, BOOST_PP_FOR_218, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(218, s), p, o, m)
+# define BOOST_PP_FOR_218_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(219, s) BOOST_PP_IIF(c, BOOST_PP_FOR_219, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(219, s), p, o, m)
+# define BOOST_PP_FOR_219_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(220, s) BOOST_PP_IIF(c, BOOST_PP_FOR_220, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(220, s), p, o, m)
+# define BOOST_PP_FOR_220_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(221, s) BOOST_PP_IIF(c, BOOST_PP_FOR_221, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(221, s), p, o, m)
+# define BOOST_PP_FOR_221_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(222, s) BOOST_PP_IIF(c, BOOST_PP_FOR_222, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(222, s), p, o, m)
+# define BOOST_PP_FOR_222_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(223, s) BOOST_PP_IIF(c, BOOST_PP_FOR_223, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(223, s), p, o, m)
+# define BOOST_PP_FOR_223_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(224, s) BOOST_PP_IIF(c, BOOST_PP_FOR_224, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(224, s), p, o, m)
+# define BOOST_PP_FOR_224_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(225, s) BOOST_PP_IIF(c, BOOST_PP_FOR_225, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(225, s), p, o, m)
+# define BOOST_PP_FOR_225_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(226, s) BOOST_PP_IIF(c, BOOST_PP_FOR_226, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(226, s), p, o, m)
+# define BOOST_PP_FOR_226_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(227, s) BOOST_PP_IIF(c, BOOST_PP_FOR_227, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(227, s), p, o, m)
+# define BOOST_PP_FOR_227_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(228, s) BOOST_PP_IIF(c, BOOST_PP_FOR_228, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(228, s), p, o, m)
+# define BOOST_PP_FOR_228_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(229, s) BOOST_PP_IIF(c, BOOST_PP_FOR_229, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(229, s), p, o, m)
+# define BOOST_PP_FOR_229_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(230, s) BOOST_PP_IIF(c, BOOST_PP_FOR_230, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(230, s), p, o, m)
+# define BOOST_PP_FOR_230_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(231, s) BOOST_PP_IIF(c, BOOST_PP_FOR_231, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(231, s), p, o, m)
+# define BOOST_PP_FOR_231_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(232, s) BOOST_PP_IIF(c, BOOST_PP_FOR_232, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(232, s), p, o, m)
+# define BOOST_PP_FOR_232_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(233, s) BOOST_PP_IIF(c, BOOST_PP_FOR_233, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(233, s), p, o, m)
+# define BOOST_PP_FOR_233_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(234, s) BOOST_PP_IIF(c, BOOST_PP_FOR_234, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(234, s), p, o, m)
+# define BOOST_PP_FOR_234_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(235, s) BOOST_PP_IIF(c, BOOST_PP_FOR_235, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(235, s), p, o, m)
+# define BOOST_PP_FOR_235_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(236, s) BOOST_PP_IIF(c, BOOST_PP_FOR_236, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(236, s), p, o, m)
+# define BOOST_PP_FOR_236_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(237, s) BOOST_PP_IIF(c, BOOST_PP_FOR_237, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(237, s), p, o, m)
+# define BOOST_PP_FOR_237_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(238, s) BOOST_PP_IIF(c, BOOST_PP_FOR_238, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(238, s), p, o, m)
+# define BOOST_PP_FOR_238_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(239, s) BOOST_PP_IIF(c, BOOST_PP_FOR_239, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(239, s), p, o, m)
+# define BOOST_PP_FOR_239_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(240, s) BOOST_PP_IIF(c, BOOST_PP_FOR_240, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(240, s), p, o, m)
+# define BOOST_PP_FOR_240_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(241, s) BOOST_PP_IIF(c, BOOST_PP_FOR_241, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(241, s), p, o, m)
+# define BOOST_PP_FOR_241_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(242, s) BOOST_PP_IIF(c, BOOST_PP_FOR_242, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(242, s), p, o, m)
+# define BOOST_PP_FOR_242_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(243, s) BOOST_PP_IIF(c, BOOST_PP_FOR_243, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(243, s), p, o, m)
+# define BOOST_PP_FOR_243_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(244, s) BOOST_PP_IIF(c, BOOST_PP_FOR_244, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(244, s), p, o, m)
+# define BOOST_PP_FOR_244_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(245, s) BOOST_PP_IIF(c, BOOST_PP_FOR_245, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(245, s), p, o, m)
+# define BOOST_PP_FOR_245_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(246, s) BOOST_PP_IIF(c, BOOST_PP_FOR_246, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(246, s), p, o, m)
+# define BOOST_PP_FOR_246_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(247, s) BOOST_PP_IIF(c, BOOST_PP_FOR_247, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(247, s), p, o, m)
+# define BOOST_PP_FOR_247_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(248, s) BOOST_PP_IIF(c, BOOST_PP_FOR_248, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(248, s), p, o, m)
+# define BOOST_PP_FOR_248_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(249, s) BOOST_PP_IIF(c, BOOST_PP_FOR_249, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(249, s), p, o, m)
+# define BOOST_PP_FOR_249_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(250, s) BOOST_PP_IIF(c, BOOST_PP_FOR_250, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(250, s), p, o, m)
+# define BOOST_PP_FOR_250_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(251, s) BOOST_PP_IIF(c, BOOST_PP_FOR_251, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(251, s), p, o, m)
+# define BOOST_PP_FOR_251_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(252, s) BOOST_PP_IIF(c, BOOST_PP_FOR_252, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(252, s), p, o, m)
+# define BOOST_PP_FOR_252_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(253, s) BOOST_PP_IIF(c, BOOST_PP_FOR_253, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(253, s), p, o, m)
+# define BOOST_PP_FOR_253_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(254, s) BOOST_PP_IIF(c, BOOST_PP_FOR_254, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(254, s), p, o, m)
+# define BOOST_PP_FOR_254_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(255, s) BOOST_PP_IIF(c, BOOST_PP_FOR_255, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(255, s), p, o, m)
+# define BOOST_PP_FOR_255_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(256, s) BOOST_PP_IIF(c, BOOST_PP_FOR_256, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(256, s), p, o, m)
+# define BOOST_PP_FOR_256_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(257, s) BOOST_PP_IIF(c, BOOST_PP_FOR_257, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(257, s), p, o, m)
+#
+# endif
diff --git a/boost/boost/preprocessor/repetition/detail/msvc/for.hpp b/boost/boost/preprocessor/repetition/detail/msvc/for.hpp
new file mode 100644
index 00000000000..35c1996c786
--- /dev/null
+++ b/boost/boost/preprocessor/repetition/detail/msvc/for.hpp
@@ -0,0 +1,277 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_REPETITION_DETAIL_MSVC_FOR_HPP
+# define BOOST_PREPROCESSOR_REPETITION_DETAIL_MSVC_FOR_HPP
+#
+# include <boost/preprocessor/control/if.hpp>
+# include <boost/preprocessor/tuple/eat.hpp>
+#
+# define BOOST_PP_FOR_1(s, p, o, m) BOOST_PP_IF(p(2, s), m, BOOST_PP_TUPLE_EAT_2)(2, s) BOOST_PP_IF(p(2, s), BOOST_PP_FOR_2, BOOST_PP_TUPLE_EAT_4)(o(2, s), p, o, m)
+# define BOOST_PP_FOR_2(s, p, o, m) BOOST_PP_IF(p(3, s), m, BOOST_PP_TUPLE_EAT_2)(3, s) BOOST_PP_IF(p(3, s), BOOST_PP_FOR_3, BOOST_PP_TUPLE_EAT_4)(o(3, s), p, o, m)
+# define BOOST_PP_FOR_3(s, p, o, m) BOOST_PP_IF(p(4, s), m, BOOST_PP_TUPLE_EAT_2)(4, s) BOOST_PP_IF(p(4, s), BOOST_PP_FOR_4, BOOST_PP_TUPLE_EAT_4)(o(4, s), p, o, m)
+# define BOOST_PP_FOR_4(s, p, o, m) BOOST_PP_IF(p(5, s), m, BOOST_PP_TUPLE_EAT_2)(5, s) BOOST_PP_IF(p(5, s), BOOST_PP_FOR_5, BOOST_PP_TUPLE_EAT_4)(o(5, s), p, o, m)
+# define BOOST_PP_FOR_5(s, p, o, m) BOOST_PP_IF(p(6, s), m, BOOST_PP_TUPLE_EAT_2)(6, s) BOOST_PP_IF(p(6, s), BOOST_PP_FOR_6, BOOST_PP_TUPLE_EAT_4)(o(6, s), p, o, m)
+# define BOOST_PP_FOR_6(s, p, o, m) BOOST_PP_IF(p(7, s), m, BOOST_PP_TUPLE_EAT_2)(7, s) BOOST_PP_IF(p(7, s), BOOST_PP_FOR_7, BOOST_PP_TUPLE_EAT_4)(o(7, s), p, o, m)
+# define BOOST_PP_FOR_7(s, p, o, m) BOOST_PP_IF(p(8, s), m, BOOST_PP_TUPLE_EAT_2)(8, s) BOOST_PP_IF(p(8, s), BOOST_PP_FOR_8, BOOST_PP_TUPLE_EAT_4)(o(8, s), p, o, m)
+# define BOOST_PP_FOR_8(s, p, o, m) BOOST_PP_IF(p(9, s), m, BOOST_PP_TUPLE_EAT_2)(9, s) BOOST_PP_IF(p(9, s), BOOST_PP_FOR_9, BOOST_PP_TUPLE_EAT_4)(o(9, s), p, o, m)
+# define BOOST_PP_FOR_9(s, p, o, m) BOOST_PP_IF(p(10, s), m, BOOST_PP_TUPLE_EAT_2)(10, s) BOOST_PP_IF(p(10, s), BOOST_PP_FOR_10, BOOST_PP_TUPLE_EAT_4)(o(10, s), p, o, m)
+# define BOOST_PP_FOR_10(s, p, o, m) BOOST_PP_IF(p(11, s), m, BOOST_PP_TUPLE_EAT_2)(11, s) BOOST_PP_IF(p(11, s), BOOST_PP_FOR_11, BOOST_PP_TUPLE_EAT_4)(o(11, s), p, o, m)
+# define BOOST_PP_FOR_11(s, p, o, m) BOOST_PP_IF(p(12, s), m, BOOST_PP_TUPLE_EAT_2)(12, s) BOOST_PP_IF(p(12, s), BOOST_PP_FOR_12, BOOST_PP_TUPLE_EAT_4)(o(12, s), p, o, m)
+# define BOOST_PP_FOR_12(s, p, o, m) BOOST_PP_IF(p(13, s), m, BOOST_PP_TUPLE_EAT_2)(13, s) BOOST_PP_IF(p(13, s), BOOST_PP_FOR_13, BOOST_PP_TUPLE_EAT_4)(o(13, s), p, o, m)
+# define BOOST_PP_FOR_13(s, p, o, m) BOOST_PP_IF(p(14, s), m, BOOST_PP_TUPLE_EAT_2)(14, s) BOOST_PP_IF(p(14, s), BOOST_PP_FOR_14, BOOST_PP_TUPLE_EAT_4)(o(14, s), p, o, m)
+# define BOOST_PP_FOR_14(s, p, o, m) BOOST_PP_IF(p(15, s), m, BOOST_PP_TUPLE_EAT_2)(15, s) BOOST_PP_IF(p(15, s), BOOST_PP_FOR_15, BOOST_PP_TUPLE_EAT_4)(o(15, s), p, o, m)
+# define BOOST_PP_FOR_15(s, p, o, m) BOOST_PP_IF(p(16, s), m, BOOST_PP_TUPLE_EAT_2)(16, s) BOOST_PP_IF(p(16, s), BOOST_PP_FOR_16, BOOST_PP_TUPLE_EAT_4)(o(16, s), p, o, m)
+# define BOOST_PP_FOR_16(s, p, o, m) BOOST_PP_IF(p(17, s), m, BOOST_PP_TUPLE_EAT_2)(17, s) BOOST_PP_IF(p(17, s), BOOST_PP_FOR_17, BOOST_PP_TUPLE_EAT_4)(o(17, s), p, o, m)
+# define BOOST_PP_FOR_17(s, p, o, m) BOOST_PP_IF(p(18, s), m, BOOST_PP_TUPLE_EAT_2)(18, s) BOOST_PP_IF(p(18, s), BOOST_PP_FOR_18, BOOST_PP_TUPLE_EAT_4)(o(18, s), p, o, m)
+# define BOOST_PP_FOR_18(s, p, o, m) BOOST_PP_IF(p(19, s), m, BOOST_PP_TUPLE_EAT_2)(19, s) BOOST_PP_IF(p(19, s), BOOST_PP_FOR_19, BOOST_PP_TUPLE_EAT_4)(o(19, s), p, o, m)
+# define BOOST_PP_FOR_19(s, p, o, m) BOOST_PP_IF(p(20, s), m, BOOST_PP_TUPLE_EAT_2)(20, s) BOOST_PP_IF(p(20, s), BOOST_PP_FOR_20, BOOST_PP_TUPLE_EAT_4)(o(20, s), p, o, m)
+# define BOOST_PP_FOR_20(s, p, o, m) BOOST_PP_IF(p(21, s), m, BOOST_PP_TUPLE_EAT_2)(21, s) BOOST_PP_IF(p(21, s), BOOST_PP_FOR_21, BOOST_PP_TUPLE_EAT_4)(o(21, s), p, o, m)
+# define BOOST_PP_FOR_21(s, p, o, m) BOOST_PP_IF(p(22, s), m, BOOST_PP_TUPLE_EAT_2)(22, s) BOOST_PP_IF(p(22, s), BOOST_PP_FOR_22, BOOST_PP_TUPLE_EAT_4)(o(22, s), p, o, m)
+# define BOOST_PP_FOR_22(s, p, o, m) BOOST_PP_IF(p(23, s), m, BOOST_PP_TUPLE_EAT_2)(23, s) BOOST_PP_IF(p(23, s), BOOST_PP_FOR_23, BOOST_PP_TUPLE_EAT_4)(o(23, s), p, o, m)
+# define BOOST_PP_FOR_23(s, p, o, m) BOOST_PP_IF(p(24, s), m, BOOST_PP_TUPLE_EAT_2)(24, s) BOOST_PP_IF(p(24, s), BOOST_PP_FOR_24, BOOST_PP_TUPLE_EAT_4)(o(24, s), p, o, m)
+# define BOOST_PP_FOR_24(s, p, o, m) BOOST_PP_IF(p(25, s), m, BOOST_PP_TUPLE_EAT_2)(25, s) BOOST_PP_IF(p(25, s), BOOST_PP_FOR_25, BOOST_PP_TUPLE_EAT_4)(o(25, s), p, o, m)
+# define BOOST_PP_FOR_25(s, p, o, m) BOOST_PP_IF(p(26, s), m, BOOST_PP_TUPLE_EAT_2)(26, s) BOOST_PP_IF(p(26, s), BOOST_PP_FOR_26, BOOST_PP_TUPLE_EAT_4)(o(26, s), p, o, m)
+# define BOOST_PP_FOR_26(s, p, o, m) BOOST_PP_IF(p(27, s), m, BOOST_PP_TUPLE_EAT_2)(27, s) BOOST_PP_IF(p(27, s), BOOST_PP_FOR_27, BOOST_PP_TUPLE_EAT_4)(o(27, s), p, o, m)
+# define BOOST_PP_FOR_27(s, p, o, m) BOOST_PP_IF(p(28, s), m, BOOST_PP_TUPLE_EAT_2)(28, s) BOOST_PP_IF(p(28, s), BOOST_PP_FOR_28, BOOST_PP_TUPLE_EAT_4)(o(28, s), p, o, m)
+# define BOOST_PP_FOR_28(s, p, o, m) BOOST_PP_IF(p(29, s), m, BOOST_PP_TUPLE_EAT_2)(29, s) BOOST_PP_IF(p(29, s), BOOST_PP_FOR_29, BOOST_PP_TUPLE_EAT_4)(o(29, s), p, o, m)
+# define BOOST_PP_FOR_29(s, p, o, m) BOOST_PP_IF(p(30, s), m, BOOST_PP_TUPLE_EAT_2)(30, s) BOOST_PP_IF(p(30, s), BOOST_PP_FOR_30, BOOST_PP_TUPLE_EAT_4)(o(30, s), p, o, m)
+# define BOOST_PP_FOR_30(s, p, o, m) BOOST_PP_IF(p(31, s), m, BOOST_PP_TUPLE_EAT_2)(31, s) BOOST_PP_IF(p(31, s), BOOST_PP_FOR_31, BOOST_PP_TUPLE_EAT_4)(o(31, s), p, o, m)
+# define BOOST_PP_FOR_31(s, p, o, m) BOOST_PP_IF(p(32, s), m, BOOST_PP_TUPLE_EAT_2)(32, s) BOOST_PP_IF(p(32, s), BOOST_PP_FOR_32, BOOST_PP_TUPLE_EAT_4)(o(32, s), p, o, m)
+# define BOOST_PP_FOR_32(s, p, o, m) BOOST_PP_IF(p(33, s), m, BOOST_PP_TUPLE_EAT_2)(33, s) BOOST_PP_IF(p(33, s), BOOST_PP_FOR_33, BOOST_PP_TUPLE_EAT_4)(o(33, s), p, o, m)
+# define BOOST_PP_FOR_33(s, p, o, m) BOOST_PP_IF(p(34, s), m, BOOST_PP_TUPLE_EAT_2)(34, s) BOOST_PP_IF(p(34, s), BOOST_PP_FOR_34, BOOST_PP_TUPLE_EAT_4)(o(34, s), p, o, m)
+# define BOOST_PP_FOR_34(s, p, o, m) BOOST_PP_IF(p(35, s), m, BOOST_PP_TUPLE_EAT_2)(35, s) BOOST_PP_IF(p(35, s), BOOST_PP_FOR_35, BOOST_PP_TUPLE_EAT_4)(o(35, s), p, o, m)
+# define BOOST_PP_FOR_35(s, p, o, m) BOOST_PP_IF(p(36, s), m, BOOST_PP_TUPLE_EAT_2)(36, s) BOOST_PP_IF(p(36, s), BOOST_PP_FOR_36, BOOST_PP_TUPLE_EAT_4)(o(36, s), p, o, m)
+# define BOOST_PP_FOR_36(s, p, o, m) BOOST_PP_IF(p(37, s), m, BOOST_PP_TUPLE_EAT_2)(37, s) BOOST_PP_IF(p(37, s), BOOST_PP_FOR_37, BOOST_PP_TUPLE_EAT_4)(o(37, s), p, o, m)
+# define BOOST_PP_FOR_37(s, p, o, m) BOOST_PP_IF(p(38, s), m, BOOST_PP_TUPLE_EAT_2)(38, s) BOOST_PP_IF(p(38, s), BOOST_PP_FOR_38, BOOST_PP_TUPLE_EAT_4)(o(38, s), p, o, m)
+# define BOOST_PP_FOR_38(s, p, o, m) BOOST_PP_IF(p(39, s), m, BOOST_PP_TUPLE_EAT_2)(39, s) BOOST_PP_IF(p(39, s), BOOST_PP_FOR_39, BOOST_PP_TUPLE_EAT_4)(o(39, s), p, o, m)
+# define BOOST_PP_FOR_39(s, p, o, m) BOOST_PP_IF(p(40, s), m, BOOST_PP_TUPLE_EAT_2)(40, s) BOOST_PP_IF(p(40, s), BOOST_PP_FOR_40, BOOST_PP_TUPLE_EAT_4)(o(40, s), p, o, m)
+# define BOOST_PP_FOR_40(s, p, o, m) BOOST_PP_IF(p(41, s), m, BOOST_PP_TUPLE_EAT_2)(41, s) BOOST_PP_IF(p(41, s), BOOST_PP_FOR_41, BOOST_PP_TUPLE_EAT_4)(o(41, s), p, o, m)
+# define BOOST_PP_FOR_41(s, p, o, m) BOOST_PP_IF(p(42, s), m, BOOST_PP_TUPLE_EAT_2)(42, s) BOOST_PP_IF(p(42, s), BOOST_PP_FOR_42, BOOST_PP_TUPLE_EAT_4)(o(42, s), p, o, m)
+# define BOOST_PP_FOR_42(s, p, o, m) BOOST_PP_IF(p(43, s), m, BOOST_PP_TUPLE_EAT_2)(43, s) BOOST_PP_IF(p(43, s), BOOST_PP_FOR_43, BOOST_PP_TUPLE_EAT_4)(o(43, s), p, o, m)
+# define BOOST_PP_FOR_43(s, p, o, m) BOOST_PP_IF(p(44, s), m, BOOST_PP_TUPLE_EAT_2)(44, s) BOOST_PP_IF(p(44, s), BOOST_PP_FOR_44, BOOST_PP_TUPLE_EAT_4)(o(44, s), p, o, m)
+# define BOOST_PP_FOR_44(s, p, o, m) BOOST_PP_IF(p(45, s), m, BOOST_PP_TUPLE_EAT_2)(45, s) BOOST_PP_IF(p(45, s), BOOST_PP_FOR_45, BOOST_PP_TUPLE_EAT_4)(o(45, s), p, o, m)
+# define BOOST_PP_FOR_45(s, p, o, m) BOOST_PP_IF(p(46, s), m, BOOST_PP_TUPLE_EAT_2)(46, s) BOOST_PP_IF(p(46, s), BOOST_PP_FOR_46, BOOST_PP_TUPLE_EAT_4)(o(46, s), p, o, m)
+# define BOOST_PP_FOR_46(s, p, o, m) BOOST_PP_IF(p(47, s), m, BOOST_PP_TUPLE_EAT_2)(47, s) BOOST_PP_IF(p(47, s), BOOST_PP_FOR_47, BOOST_PP_TUPLE_EAT_4)(o(47, s), p, o, m)
+# define BOOST_PP_FOR_47(s, p, o, m) BOOST_PP_IF(p(48, s), m, BOOST_PP_TUPLE_EAT_2)(48, s) BOOST_PP_IF(p(48, s), BOOST_PP_FOR_48, BOOST_PP_TUPLE_EAT_4)(o(48, s), p, o, m)
+# define BOOST_PP_FOR_48(s, p, o, m) BOOST_PP_IF(p(49, s), m, BOOST_PP_TUPLE_EAT_2)(49, s) BOOST_PP_IF(p(49, s), BOOST_PP_FOR_49, BOOST_PP_TUPLE_EAT_4)(o(49, s), p, o, m)
+# define BOOST_PP_FOR_49(s, p, o, m) BOOST_PP_IF(p(50, s), m, BOOST_PP_TUPLE_EAT_2)(50, s) BOOST_PP_IF(p(50, s), BOOST_PP_FOR_50, BOOST_PP_TUPLE_EAT_4)(o(50, s), p, o, m)
+# define BOOST_PP_FOR_50(s, p, o, m) BOOST_PP_IF(p(51, s), m, BOOST_PP_TUPLE_EAT_2)(51, s) BOOST_PP_IF(p(51, s), BOOST_PP_FOR_51, BOOST_PP_TUPLE_EAT_4)(o(51, s), p, o, m)
+# define BOOST_PP_FOR_51(s, p, o, m) BOOST_PP_IF(p(52, s), m, BOOST_PP_TUPLE_EAT_2)(52, s) BOOST_PP_IF(p(52, s), BOOST_PP_FOR_52, BOOST_PP_TUPLE_EAT_4)(o(52, s), p, o, m)
+# define BOOST_PP_FOR_52(s, p, o, m) BOOST_PP_IF(p(53, s), m, BOOST_PP_TUPLE_EAT_2)(53, s) BOOST_PP_IF(p(53, s), BOOST_PP_FOR_53, BOOST_PP_TUPLE_EAT_4)(o(53, s), p, o, m)
+# define BOOST_PP_FOR_53(s, p, o, m) BOOST_PP_IF(p(54, s), m, BOOST_PP_TUPLE_EAT_2)(54, s) BOOST_PP_IF(p(54, s), BOOST_PP_FOR_54, BOOST_PP_TUPLE_EAT_4)(o(54, s), p, o, m)
+# define BOOST_PP_FOR_54(s, p, o, m) BOOST_PP_IF(p(55, s), m, BOOST_PP_TUPLE_EAT_2)(55, s) BOOST_PP_IF(p(55, s), BOOST_PP_FOR_55, BOOST_PP_TUPLE_EAT_4)(o(55, s), p, o, m)
+# define BOOST_PP_FOR_55(s, p, o, m) BOOST_PP_IF(p(56, s), m, BOOST_PP_TUPLE_EAT_2)(56, s) BOOST_PP_IF(p(56, s), BOOST_PP_FOR_56, BOOST_PP_TUPLE_EAT_4)(o(56, s), p, o, m)
+# define BOOST_PP_FOR_56(s, p, o, m) BOOST_PP_IF(p(57, s), m, BOOST_PP_TUPLE_EAT_2)(57, s) BOOST_PP_IF(p(57, s), BOOST_PP_FOR_57, BOOST_PP_TUPLE_EAT_4)(o(57, s), p, o, m)
+# define BOOST_PP_FOR_57(s, p, o, m) BOOST_PP_IF(p(58, s), m, BOOST_PP_TUPLE_EAT_2)(58, s) BOOST_PP_IF(p(58, s), BOOST_PP_FOR_58, BOOST_PP_TUPLE_EAT_4)(o(58, s), p, o, m)
+# define BOOST_PP_FOR_58(s, p, o, m) BOOST_PP_IF(p(59, s), m, BOOST_PP_TUPLE_EAT_2)(59, s) BOOST_PP_IF(p(59, s), BOOST_PP_FOR_59, BOOST_PP_TUPLE_EAT_4)(o(59, s), p, o, m)
+# define BOOST_PP_FOR_59(s, p, o, m) BOOST_PP_IF(p(60, s), m, BOOST_PP_TUPLE_EAT_2)(60, s) BOOST_PP_IF(p(60, s), BOOST_PP_FOR_60, BOOST_PP_TUPLE_EAT_4)(o(60, s), p, o, m)
+# define BOOST_PP_FOR_60(s, p, o, m) BOOST_PP_IF(p(61, s), m, BOOST_PP_TUPLE_EAT_2)(61, s) BOOST_PP_IF(p(61, s), BOOST_PP_FOR_61, BOOST_PP_TUPLE_EAT_4)(o(61, s), p, o, m)
+# define BOOST_PP_FOR_61(s, p, o, m) BOOST_PP_IF(p(62, s), m, BOOST_PP_TUPLE_EAT_2)(62, s) BOOST_PP_IF(p(62, s), BOOST_PP_FOR_62, BOOST_PP_TUPLE_EAT_4)(o(62, s), p, o, m)
+# define BOOST_PP_FOR_62(s, p, o, m) BOOST_PP_IF(p(63, s), m, BOOST_PP_TUPLE_EAT_2)(63, s) BOOST_PP_IF(p(63, s), BOOST_PP_FOR_63, BOOST_PP_TUPLE_EAT_4)(o(63, s), p, o, m)
+# define BOOST_PP_FOR_63(s, p, o, m) BOOST_PP_IF(p(64, s), m, BOOST_PP_TUPLE_EAT_2)(64, s) BOOST_PP_IF(p(64, s), BOOST_PP_FOR_64, BOOST_PP_TUPLE_EAT_4)(o(64, s), p, o, m)
+# define BOOST_PP_FOR_64(s, p, o, m) BOOST_PP_IF(p(65, s), m, BOOST_PP_TUPLE_EAT_2)(65, s) BOOST_PP_IF(p(65, s), BOOST_PP_FOR_65, BOOST_PP_TUPLE_EAT_4)(o(65, s), p, o, m)
+# define BOOST_PP_FOR_65(s, p, o, m) BOOST_PP_IF(p(66, s), m, BOOST_PP_TUPLE_EAT_2)(66, s) BOOST_PP_IF(p(66, s), BOOST_PP_FOR_66, BOOST_PP_TUPLE_EAT_4)(o(66, s), p, o, m)
+# define BOOST_PP_FOR_66(s, p, o, m) BOOST_PP_IF(p(67, s), m, BOOST_PP_TUPLE_EAT_2)(67, s) BOOST_PP_IF(p(67, s), BOOST_PP_FOR_67, BOOST_PP_TUPLE_EAT_4)(o(67, s), p, o, m)
+# define BOOST_PP_FOR_67(s, p, o, m) BOOST_PP_IF(p(68, s), m, BOOST_PP_TUPLE_EAT_2)(68, s) BOOST_PP_IF(p(68, s), BOOST_PP_FOR_68, BOOST_PP_TUPLE_EAT_4)(o(68, s), p, o, m)
+# define BOOST_PP_FOR_68(s, p, o, m) BOOST_PP_IF(p(69, s), m, BOOST_PP_TUPLE_EAT_2)(69, s) BOOST_PP_IF(p(69, s), BOOST_PP_FOR_69, BOOST_PP_TUPLE_EAT_4)(o(69, s), p, o, m)
+# define BOOST_PP_FOR_69(s, p, o, m) BOOST_PP_IF(p(70, s), m, BOOST_PP_TUPLE_EAT_2)(70, s) BOOST_PP_IF(p(70, s), BOOST_PP_FOR_70, BOOST_PP_TUPLE_EAT_4)(o(70, s), p, o, m)
+# define BOOST_PP_FOR_70(s, p, o, m) BOOST_PP_IF(p(71, s), m, BOOST_PP_TUPLE_EAT_2)(71, s) BOOST_PP_IF(p(71, s), BOOST_PP_FOR_71, BOOST_PP_TUPLE_EAT_4)(o(71, s), p, o, m)
+# define BOOST_PP_FOR_71(s, p, o, m) BOOST_PP_IF(p(72, s), m, BOOST_PP_TUPLE_EAT_2)(72, s) BOOST_PP_IF(p(72, s), BOOST_PP_FOR_72, BOOST_PP_TUPLE_EAT_4)(o(72, s), p, o, m)
+# define BOOST_PP_FOR_72(s, p, o, m) BOOST_PP_IF(p(73, s), m, BOOST_PP_TUPLE_EAT_2)(73, s) BOOST_PP_IF(p(73, s), BOOST_PP_FOR_73, BOOST_PP_TUPLE_EAT_4)(o(73, s), p, o, m)
+# define BOOST_PP_FOR_73(s, p, o, m) BOOST_PP_IF(p(74, s), m, BOOST_PP_TUPLE_EAT_2)(74, s) BOOST_PP_IF(p(74, s), BOOST_PP_FOR_74, BOOST_PP_TUPLE_EAT_4)(o(74, s), p, o, m)
+# define BOOST_PP_FOR_74(s, p, o, m) BOOST_PP_IF(p(75, s), m, BOOST_PP_TUPLE_EAT_2)(75, s) BOOST_PP_IF(p(75, s), BOOST_PP_FOR_75, BOOST_PP_TUPLE_EAT_4)(o(75, s), p, o, m)
+# define BOOST_PP_FOR_75(s, p, o, m) BOOST_PP_IF(p(76, s), m, BOOST_PP_TUPLE_EAT_2)(76, s) BOOST_PP_IF(p(76, s), BOOST_PP_FOR_76, BOOST_PP_TUPLE_EAT_4)(o(76, s), p, o, m)
+# define BOOST_PP_FOR_76(s, p, o, m) BOOST_PP_IF(p(77, s), m, BOOST_PP_TUPLE_EAT_2)(77, s) BOOST_PP_IF(p(77, s), BOOST_PP_FOR_77, BOOST_PP_TUPLE_EAT_4)(o(77, s), p, o, m)
+# define BOOST_PP_FOR_77(s, p, o, m) BOOST_PP_IF(p(78, s), m, BOOST_PP_TUPLE_EAT_2)(78, s) BOOST_PP_IF(p(78, s), BOOST_PP_FOR_78, BOOST_PP_TUPLE_EAT_4)(o(78, s), p, o, m)
+# define BOOST_PP_FOR_78(s, p, o, m) BOOST_PP_IF(p(79, s), m, BOOST_PP_TUPLE_EAT_2)(79, s) BOOST_PP_IF(p(79, s), BOOST_PP_FOR_79, BOOST_PP_TUPLE_EAT_4)(o(79, s), p, o, m)
+# define BOOST_PP_FOR_79(s, p, o, m) BOOST_PP_IF(p(80, s), m, BOOST_PP_TUPLE_EAT_2)(80, s) BOOST_PP_IF(p(80, s), BOOST_PP_FOR_80, BOOST_PP_TUPLE_EAT_4)(o(80, s), p, o, m)
+# define BOOST_PP_FOR_80(s, p, o, m) BOOST_PP_IF(p(81, s), m, BOOST_PP_TUPLE_EAT_2)(81, s) BOOST_PP_IF(p(81, s), BOOST_PP_FOR_81, BOOST_PP_TUPLE_EAT_4)(o(81, s), p, o, m)
+# define BOOST_PP_FOR_81(s, p, o, m) BOOST_PP_IF(p(82, s), m, BOOST_PP_TUPLE_EAT_2)(82, s) BOOST_PP_IF(p(82, s), BOOST_PP_FOR_82, BOOST_PP_TUPLE_EAT_4)(o(82, s), p, o, m)
+# define BOOST_PP_FOR_82(s, p, o, m) BOOST_PP_IF(p(83, s), m, BOOST_PP_TUPLE_EAT_2)(83, s) BOOST_PP_IF(p(83, s), BOOST_PP_FOR_83, BOOST_PP_TUPLE_EAT_4)(o(83, s), p, o, m)
+# define BOOST_PP_FOR_83(s, p, o, m) BOOST_PP_IF(p(84, s), m, BOOST_PP_TUPLE_EAT_2)(84, s) BOOST_PP_IF(p(84, s), BOOST_PP_FOR_84, BOOST_PP_TUPLE_EAT_4)(o(84, s), p, o, m)
+# define BOOST_PP_FOR_84(s, p, o, m) BOOST_PP_IF(p(85, s), m, BOOST_PP_TUPLE_EAT_2)(85, s) BOOST_PP_IF(p(85, s), BOOST_PP_FOR_85, BOOST_PP_TUPLE_EAT_4)(o(85, s), p, o, m)
+# define BOOST_PP_FOR_85(s, p, o, m) BOOST_PP_IF(p(86, s), m, BOOST_PP_TUPLE_EAT_2)(86, s) BOOST_PP_IF(p(86, s), BOOST_PP_FOR_86, BOOST_PP_TUPLE_EAT_4)(o(86, s), p, o, m)
+# define BOOST_PP_FOR_86(s, p, o, m) BOOST_PP_IF(p(87, s), m, BOOST_PP_TUPLE_EAT_2)(87, s) BOOST_PP_IF(p(87, s), BOOST_PP_FOR_87, BOOST_PP_TUPLE_EAT_4)(o(87, s), p, o, m)
+# define BOOST_PP_FOR_87(s, p, o, m) BOOST_PP_IF(p(88, s), m, BOOST_PP_TUPLE_EAT_2)(88, s) BOOST_PP_IF(p(88, s), BOOST_PP_FOR_88, BOOST_PP_TUPLE_EAT_4)(o(88, s), p, o, m)
+# define BOOST_PP_FOR_88(s, p, o, m) BOOST_PP_IF(p(89, s), m, BOOST_PP_TUPLE_EAT_2)(89, s) BOOST_PP_IF(p(89, s), BOOST_PP_FOR_89, BOOST_PP_TUPLE_EAT_4)(o(89, s), p, o, m)
+# define BOOST_PP_FOR_89(s, p, o, m) BOOST_PP_IF(p(90, s), m, BOOST_PP_TUPLE_EAT_2)(90, s) BOOST_PP_IF(p(90, s), BOOST_PP_FOR_90, BOOST_PP_TUPLE_EAT_4)(o(90, s), p, o, m)
+# define BOOST_PP_FOR_90(s, p, o, m) BOOST_PP_IF(p(91, s), m, BOOST_PP_TUPLE_EAT_2)(91, s) BOOST_PP_IF(p(91, s), BOOST_PP_FOR_91, BOOST_PP_TUPLE_EAT_4)(o(91, s), p, o, m)
+# define BOOST_PP_FOR_91(s, p, o, m) BOOST_PP_IF(p(92, s), m, BOOST_PP_TUPLE_EAT_2)(92, s) BOOST_PP_IF(p(92, s), BOOST_PP_FOR_92, BOOST_PP_TUPLE_EAT_4)(o(92, s), p, o, m)
+# define BOOST_PP_FOR_92(s, p, o, m) BOOST_PP_IF(p(93, s), m, BOOST_PP_TUPLE_EAT_2)(93, s) BOOST_PP_IF(p(93, s), BOOST_PP_FOR_93, BOOST_PP_TUPLE_EAT_4)(o(93, s), p, o, m)
+# define BOOST_PP_FOR_93(s, p, o, m) BOOST_PP_IF(p(94, s), m, BOOST_PP_TUPLE_EAT_2)(94, s) BOOST_PP_IF(p(94, s), BOOST_PP_FOR_94, BOOST_PP_TUPLE_EAT_4)(o(94, s), p, o, m)
+# define BOOST_PP_FOR_94(s, p, o, m) BOOST_PP_IF(p(95, s), m, BOOST_PP_TUPLE_EAT_2)(95, s) BOOST_PP_IF(p(95, s), BOOST_PP_FOR_95, BOOST_PP_TUPLE_EAT_4)(o(95, s), p, o, m)
+# define BOOST_PP_FOR_95(s, p, o, m) BOOST_PP_IF(p(96, s), m, BOOST_PP_TUPLE_EAT_2)(96, s) BOOST_PP_IF(p(96, s), BOOST_PP_FOR_96, BOOST_PP_TUPLE_EAT_4)(o(96, s), p, o, m)
+# define BOOST_PP_FOR_96(s, p, o, m) BOOST_PP_IF(p(97, s), m, BOOST_PP_TUPLE_EAT_2)(97, s) BOOST_PP_IF(p(97, s), BOOST_PP_FOR_97, BOOST_PP_TUPLE_EAT_4)(o(97, s), p, o, m)
+# define BOOST_PP_FOR_97(s, p, o, m) BOOST_PP_IF(p(98, s), m, BOOST_PP_TUPLE_EAT_2)(98, s) BOOST_PP_IF(p(98, s), BOOST_PP_FOR_98, BOOST_PP_TUPLE_EAT_4)(o(98, s), p, o, m)
+# define BOOST_PP_FOR_98(s, p, o, m) BOOST_PP_IF(p(99, s), m, BOOST_PP_TUPLE_EAT_2)(99, s) BOOST_PP_IF(p(99, s), BOOST_PP_FOR_99, BOOST_PP_TUPLE_EAT_4)(o(99, s), p, o, m)
+# define BOOST_PP_FOR_99(s, p, o, m) BOOST_PP_IF(p(100, s), m, BOOST_PP_TUPLE_EAT_2)(100, s) BOOST_PP_IF(p(100, s), BOOST_PP_FOR_100, BOOST_PP_TUPLE_EAT_4)(o(100, s), p, o, m)
+# define BOOST_PP_FOR_100(s, p, o, m) BOOST_PP_IF(p(101, s), m, BOOST_PP_TUPLE_EAT_2)(101, s) BOOST_PP_IF(p(101, s), BOOST_PP_FOR_101, BOOST_PP_TUPLE_EAT_4)(o(101, s), p, o, m)
+# define BOOST_PP_FOR_101(s, p, o, m) BOOST_PP_IF(p(102, s), m, BOOST_PP_TUPLE_EAT_2)(102, s) BOOST_PP_IF(p(102, s), BOOST_PP_FOR_102, BOOST_PP_TUPLE_EAT_4)(o(102, s), p, o, m)
+# define BOOST_PP_FOR_102(s, p, o, m) BOOST_PP_IF(p(103, s), m, BOOST_PP_TUPLE_EAT_2)(103, s) BOOST_PP_IF(p(103, s), BOOST_PP_FOR_103, BOOST_PP_TUPLE_EAT_4)(o(103, s), p, o, m)
+# define BOOST_PP_FOR_103(s, p, o, m) BOOST_PP_IF(p(104, s), m, BOOST_PP_TUPLE_EAT_2)(104, s) BOOST_PP_IF(p(104, s), BOOST_PP_FOR_104, BOOST_PP_TUPLE_EAT_4)(o(104, s), p, o, m)
+# define BOOST_PP_FOR_104(s, p, o, m) BOOST_PP_IF(p(105, s), m, BOOST_PP_TUPLE_EAT_2)(105, s) BOOST_PP_IF(p(105, s), BOOST_PP_FOR_105, BOOST_PP_TUPLE_EAT_4)(o(105, s), p, o, m)
+# define BOOST_PP_FOR_105(s, p, o, m) BOOST_PP_IF(p(106, s), m, BOOST_PP_TUPLE_EAT_2)(106, s) BOOST_PP_IF(p(106, s), BOOST_PP_FOR_106, BOOST_PP_TUPLE_EAT_4)(o(106, s), p, o, m)
+# define BOOST_PP_FOR_106(s, p, o, m) BOOST_PP_IF(p(107, s), m, BOOST_PP_TUPLE_EAT_2)(107, s) BOOST_PP_IF(p(107, s), BOOST_PP_FOR_107, BOOST_PP_TUPLE_EAT_4)(o(107, s), p, o, m)
+# define BOOST_PP_FOR_107(s, p, o, m) BOOST_PP_IF(p(108, s), m, BOOST_PP_TUPLE_EAT_2)(108, s) BOOST_PP_IF(p(108, s), BOOST_PP_FOR_108, BOOST_PP_TUPLE_EAT_4)(o(108, s), p, o, m)
+# define BOOST_PP_FOR_108(s, p, o, m) BOOST_PP_IF(p(109, s), m, BOOST_PP_TUPLE_EAT_2)(109, s) BOOST_PP_IF(p(109, s), BOOST_PP_FOR_109, BOOST_PP_TUPLE_EAT_4)(o(109, s), p, o, m)
+# define BOOST_PP_FOR_109(s, p, o, m) BOOST_PP_IF(p(110, s), m, BOOST_PP_TUPLE_EAT_2)(110, s) BOOST_PP_IF(p(110, s), BOOST_PP_FOR_110, BOOST_PP_TUPLE_EAT_4)(o(110, s), p, o, m)
+# define BOOST_PP_FOR_110(s, p, o, m) BOOST_PP_IF(p(111, s), m, BOOST_PP_TUPLE_EAT_2)(111, s) BOOST_PP_IF(p(111, s), BOOST_PP_FOR_111, BOOST_PP_TUPLE_EAT_4)(o(111, s), p, o, m)
+# define BOOST_PP_FOR_111(s, p, o, m) BOOST_PP_IF(p(112, s), m, BOOST_PP_TUPLE_EAT_2)(112, s) BOOST_PP_IF(p(112, s), BOOST_PP_FOR_112, BOOST_PP_TUPLE_EAT_4)(o(112, s), p, o, m)
+# define BOOST_PP_FOR_112(s, p, o, m) BOOST_PP_IF(p(113, s), m, BOOST_PP_TUPLE_EAT_2)(113, s) BOOST_PP_IF(p(113, s), BOOST_PP_FOR_113, BOOST_PP_TUPLE_EAT_4)(o(113, s), p, o, m)
+# define BOOST_PP_FOR_113(s, p, o, m) BOOST_PP_IF(p(114, s), m, BOOST_PP_TUPLE_EAT_2)(114, s) BOOST_PP_IF(p(114, s), BOOST_PP_FOR_114, BOOST_PP_TUPLE_EAT_4)(o(114, s), p, o, m)
+# define BOOST_PP_FOR_114(s, p, o, m) BOOST_PP_IF(p(115, s), m, BOOST_PP_TUPLE_EAT_2)(115, s) BOOST_PP_IF(p(115, s), BOOST_PP_FOR_115, BOOST_PP_TUPLE_EAT_4)(o(115, s), p, o, m)
+# define BOOST_PP_FOR_115(s, p, o, m) BOOST_PP_IF(p(116, s), m, BOOST_PP_TUPLE_EAT_2)(116, s) BOOST_PP_IF(p(116, s), BOOST_PP_FOR_116, BOOST_PP_TUPLE_EAT_4)(o(116, s), p, o, m)
+# define BOOST_PP_FOR_116(s, p, o, m) BOOST_PP_IF(p(117, s), m, BOOST_PP_TUPLE_EAT_2)(117, s) BOOST_PP_IF(p(117, s), BOOST_PP_FOR_117, BOOST_PP_TUPLE_EAT_4)(o(117, s), p, o, m)
+# define BOOST_PP_FOR_117(s, p, o, m) BOOST_PP_IF(p(118, s), m, BOOST_PP_TUPLE_EAT_2)(118, s) BOOST_PP_IF(p(118, s), BOOST_PP_FOR_118, BOOST_PP_TUPLE_EAT_4)(o(118, s), p, o, m)
+# define BOOST_PP_FOR_118(s, p, o, m) BOOST_PP_IF(p(119, s), m, BOOST_PP_TUPLE_EAT_2)(119, s) BOOST_PP_IF(p(119, s), BOOST_PP_FOR_119, BOOST_PP_TUPLE_EAT_4)(o(119, s), p, o, m)
+# define BOOST_PP_FOR_119(s, p, o, m) BOOST_PP_IF(p(120, s), m, BOOST_PP_TUPLE_EAT_2)(120, s) BOOST_PP_IF(p(120, s), BOOST_PP_FOR_120, BOOST_PP_TUPLE_EAT_4)(o(120, s), p, o, m)
+# define BOOST_PP_FOR_120(s, p, o, m) BOOST_PP_IF(p(121, s), m, BOOST_PP_TUPLE_EAT_2)(121, s) BOOST_PP_IF(p(121, s), BOOST_PP_FOR_121, BOOST_PP_TUPLE_EAT_4)(o(121, s), p, o, m)
+# define BOOST_PP_FOR_121(s, p, o, m) BOOST_PP_IF(p(122, s), m, BOOST_PP_TUPLE_EAT_2)(122, s) BOOST_PP_IF(p(122, s), BOOST_PP_FOR_122, BOOST_PP_TUPLE_EAT_4)(o(122, s), p, o, m)
+# define BOOST_PP_FOR_122(s, p, o, m) BOOST_PP_IF(p(123, s), m, BOOST_PP_TUPLE_EAT_2)(123, s) BOOST_PP_IF(p(123, s), BOOST_PP_FOR_123, BOOST_PP_TUPLE_EAT_4)(o(123, s), p, o, m)
+# define BOOST_PP_FOR_123(s, p, o, m) BOOST_PP_IF(p(124, s), m, BOOST_PP_TUPLE_EAT_2)(124, s) BOOST_PP_IF(p(124, s), BOOST_PP_FOR_124, BOOST_PP_TUPLE_EAT_4)(o(124, s), p, o, m)
+# define BOOST_PP_FOR_124(s, p, o, m) BOOST_PP_IF(p(125, s), m, BOOST_PP_TUPLE_EAT_2)(125, s) BOOST_PP_IF(p(125, s), BOOST_PP_FOR_125, BOOST_PP_TUPLE_EAT_4)(o(125, s), p, o, m)
+# define BOOST_PP_FOR_125(s, p, o, m) BOOST_PP_IF(p(126, s), m, BOOST_PP_TUPLE_EAT_2)(126, s) BOOST_PP_IF(p(126, s), BOOST_PP_FOR_126, BOOST_PP_TUPLE_EAT_4)(o(126, s), p, o, m)
+# define BOOST_PP_FOR_126(s, p, o, m) BOOST_PP_IF(p(127, s), m, BOOST_PP_TUPLE_EAT_2)(127, s) BOOST_PP_IF(p(127, s), BOOST_PP_FOR_127, BOOST_PP_TUPLE_EAT_4)(o(127, s), p, o, m)
+# define BOOST_PP_FOR_127(s, p, o, m) BOOST_PP_IF(p(128, s), m, BOOST_PP_TUPLE_EAT_2)(128, s) BOOST_PP_IF(p(128, s), BOOST_PP_FOR_128, BOOST_PP_TUPLE_EAT_4)(o(128, s), p, o, m)
+# define BOOST_PP_FOR_128(s, p, o, m) BOOST_PP_IF(p(129, s), m, BOOST_PP_TUPLE_EAT_2)(129, s) BOOST_PP_IF(p(129, s), BOOST_PP_FOR_129, BOOST_PP_TUPLE_EAT_4)(o(129, s), p, o, m)
+# define BOOST_PP_FOR_129(s, p, o, m) BOOST_PP_IF(p(130, s), m, BOOST_PP_TUPLE_EAT_2)(130, s) BOOST_PP_IF(p(130, s), BOOST_PP_FOR_130, BOOST_PP_TUPLE_EAT_4)(o(130, s), p, o, m)
+# define BOOST_PP_FOR_130(s, p, o, m) BOOST_PP_IF(p(131, s), m, BOOST_PP_TUPLE_EAT_2)(131, s) BOOST_PP_IF(p(131, s), BOOST_PP_FOR_131, BOOST_PP_TUPLE_EAT_4)(o(131, s), p, o, m)
+# define BOOST_PP_FOR_131(s, p, o, m) BOOST_PP_IF(p(132, s), m, BOOST_PP_TUPLE_EAT_2)(132, s) BOOST_PP_IF(p(132, s), BOOST_PP_FOR_132, BOOST_PP_TUPLE_EAT_4)(o(132, s), p, o, m)
+# define BOOST_PP_FOR_132(s, p, o, m) BOOST_PP_IF(p(133, s), m, BOOST_PP_TUPLE_EAT_2)(133, s) BOOST_PP_IF(p(133, s), BOOST_PP_FOR_133, BOOST_PP_TUPLE_EAT_4)(o(133, s), p, o, m)
+# define BOOST_PP_FOR_133(s, p, o, m) BOOST_PP_IF(p(134, s), m, BOOST_PP_TUPLE_EAT_2)(134, s) BOOST_PP_IF(p(134, s), BOOST_PP_FOR_134, BOOST_PP_TUPLE_EAT_4)(o(134, s), p, o, m)
+# define BOOST_PP_FOR_134(s, p, o, m) BOOST_PP_IF(p(135, s), m, BOOST_PP_TUPLE_EAT_2)(135, s) BOOST_PP_IF(p(135, s), BOOST_PP_FOR_135, BOOST_PP_TUPLE_EAT_4)(o(135, s), p, o, m)
+# define BOOST_PP_FOR_135(s, p, o, m) BOOST_PP_IF(p(136, s), m, BOOST_PP_TUPLE_EAT_2)(136, s) BOOST_PP_IF(p(136, s), BOOST_PP_FOR_136, BOOST_PP_TUPLE_EAT_4)(o(136, s), p, o, m)
+# define BOOST_PP_FOR_136(s, p, o, m) BOOST_PP_IF(p(137, s), m, BOOST_PP_TUPLE_EAT_2)(137, s) BOOST_PP_IF(p(137, s), BOOST_PP_FOR_137, BOOST_PP_TUPLE_EAT_4)(o(137, s), p, o, m)
+# define BOOST_PP_FOR_137(s, p, o, m) BOOST_PP_IF(p(138, s), m, BOOST_PP_TUPLE_EAT_2)(138, s) BOOST_PP_IF(p(138, s), BOOST_PP_FOR_138, BOOST_PP_TUPLE_EAT_4)(o(138, s), p, o, m)
+# define BOOST_PP_FOR_138(s, p, o, m) BOOST_PP_IF(p(139, s), m, BOOST_PP_TUPLE_EAT_2)(139, s) BOOST_PP_IF(p(139, s), BOOST_PP_FOR_139, BOOST_PP_TUPLE_EAT_4)(o(139, s), p, o, m)
+# define BOOST_PP_FOR_139(s, p, o, m) BOOST_PP_IF(p(140, s), m, BOOST_PP_TUPLE_EAT_2)(140, s) BOOST_PP_IF(p(140, s), BOOST_PP_FOR_140, BOOST_PP_TUPLE_EAT_4)(o(140, s), p, o, m)
+# define BOOST_PP_FOR_140(s, p, o, m) BOOST_PP_IF(p(141, s), m, BOOST_PP_TUPLE_EAT_2)(141, s) BOOST_PP_IF(p(141, s), BOOST_PP_FOR_141, BOOST_PP_TUPLE_EAT_4)(o(141, s), p, o, m)
+# define BOOST_PP_FOR_141(s, p, o, m) BOOST_PP_IF(p(142, s), m, BOOST_PP_TUPLE_EAT_2)(142, s) BOOST_PP_IF(p(142, s), BOOST_PP_FOR_142, BOOST_PP_TUPLE_EAT_4)(o(142, s), p, o, m)
+# define BOOST_PP_FOR_142(s, p, o, m) BOOST_PP_IF(p(143, s), m, BOOST_PP_TUPLE_EAT_2)(143, s) BOOST_PP_IF(p(143, s), BOOST_PP_FOR_143, BOOST_PP_TUPLE_EAT_4)(o(143, s), p, o, m)
+# define BOOST_PP_FOR_143(s, p, o, m) BOOST_PP_IF(p(144, s), m, BOOST_PP_TUPLE_EAT_2)(144, s) BOOST_PP_IF(p(144, s), BOOST_PP_FOR_144, BOOST_PP_TUPLE_EAT_4)(o(144, s), p, o, m)
+# define BOOST_PP_FOR_144(s, p, o, m) BOOST_PP_IF(p(145, s), m, BOOST_PP_TUPLE_EAT_2)(145, s) BOOST_PP_IF(p(145, s), BOOST_PP_FOR_145, BOOST_PP_TUPLE_EAT_4)(o(145, s), p, o, m)
+# define BOOST_PP_FOR_145(s, p, o, m) BOOST_PP_IF(p(146, s), m, BOOST_PP_TUPLE_EAT_2)(146, s) BOOST_PP_IF(p(146, s), BOOST_PP_FOR_146, BOOST_PP_TUPLE_EAT_4)(o(146, s), p, o, m)
+# define BOOST_PP_FOR_146(s, p, o, m) BOOST_PP_IF(p(147, s), m, BOOST_PP_TUPLE_EAT_2)(147, s) BOOST_PP_IF(p(147, s), BOOST_PP_FOR_147, BOOST_PP_TUPLE_EAT_4)(o(147, s), p, o, m)
+# define BOOST_PP_FOR_147(s, p, o, m) BOOST_PP_IF(p(148, s), m, BOOST_PP_TUPLE_EAT_2)(148, s) BOOST_PP_IF(p(148, s), BOOST_PP_FOR_148, BOOST_PP_TUPLE_EAT_4)(o(148, s), p, o, m)
+# define BOOST_PP_FOR_148(s, p, o, m) BOOST_PP_IF(p(149, s), m, BOOST_PP_TUPLE_EAT_2)(149, s) BOOST_PP_IF(p(149, s), BOOST_PP_FOR_149, BOOST_PP_TUPLE_EAT_4)(o(149, s), p, o, m)
+# define BOOST_PP_FOR_149(s, p, o, m) BOOST_PP_IF(p(150, s), m, BOOST_PP_TUPLE_EAT_2)(150, s) BOOST_PP_IF(p(150, s), BOOST_PP_FOR_150, BOOST_PP_TUPLE_EAT_4)(o(150, s), p, o, m)
+# define BOOST_PP_FOR_150(s, p, o, m) BOOST_PP_IF(p(151, s), m, BOOST_PP_TUPLE_EAT_2)(151, s) BOOST_PP_IF(p(151, s), BOOST_PP_FOR_151, BOOST_PP_TUPLE_EAT_4)(o(151, s), p, o, m)
+# define BOOST_PP_FOR_151(s, p, o, m) BOOST_PP_IF(p(152, s), m, BOOST_PP_TUPLE_EAT_2)(152, s) BOOST_PP_IF(p(152, s), BOOST_PP_FOR_152, BOOST_PP_TUPLE_EAT_4)(o(152, s), p, o, m)
+# define BOOST_PP_FOR_152(s, p, o, m) BOOST_PP_IF(p(153, s), m, BOOST_PP_TUPLE_EAT_2)(153, s) BOOST_PP_IF(p(153, s), BOOST_PP_FOR_153, BOOST_PP_TUPLE_EAT_4)(o(153, s), p, o, m)
+# define BOOST_PP_FOR_153(s, p, o, m) BOOST_PP_IF(p(154, s), m, BOOST_PP_TUPLE_EAT_2)(154, s) BOOST_PP_IF(p(154, s), BOOST_PP_FOR_154, BOOST_PP_TUPLE_EAT_4)(o(154, s), p, o, m)
+# define BOOST_PP_FOR_154(s, p, o, m) BOOST_PP_IF(p(155, s), m, BOOST_PP_TUPLE_EAT_2)(155, s) BOOST_PP_IF(p(155, s), BOOST_PP_FOR_155, BOOST_PP_TUPLE_EAT_4)(o(155, s), p, o, m)
+# define BOOST_PP_FOR_155(s, p, o, m) BOOST_PP_IF(p(156, s), m, BOOST_PP_TUPLE_EAT_2)(156, s) BOOST_PP_IF(p(156, s), BOOST_PP_FOR_156, BOOST_PP_TUPLE_EAT_4)(o(156, s), p, o, m)
+# define BOOST_PP_FOR_156(s, p, o, m) BOOST_PP_IF(p(157, s), m, BOOST_PP_TUPLE_EAT_2)(157, s) BOOST_PP_IF(p(157, s), BOOST_PP_FOR_157, BOOST_PP_TUPLE_EAT_4)(o(157, s), p, o, m)
+# define BOOST_PP_FOR_157(s, p, o, m) BOOST_PP_IF(p(158, s), m, BOOST_PP_TUPLE_EAT_2)(158, s) BOOST_PP_IF(p(158, s), BOOST_PP_FOR_158, BOOST_PP_TUPLE_EAT_4)(o(158, s), p, o, m)
+# define BOOST_PP_FOR_158(s, p, o, m) BOOST_PP_IF(p(159, s), m, BOOST_PP_TUPLE_EAT_2)(159, s) BOOST_PP_IF(p(159, s), BOOST_PP_FOR_159, BOOST_PP_TUPLE_EAT_4)(o(159, s), p, o, m)
+# define BOOST_PP_FOR_159(s, p, o, m) BOOST_PP_IF(p(160, s), m, BOOST_PP_TUPLE_EAT_2)(160, s) BOOST_PP_IF(p(160, s), BOOST_PP_FOR_160, BOOST_PP_TUPLE_EAT_4)(o(160, s), p, o, m)
+# define BOOST_PP_FOR_160(s, p, o, m) BOOST_PP_IF(p(161, s), m, BOOST_PP_TUPLE_EAT_2)(161, s) BOOST_PP_IF(p(161, s), BOOST_PP_FOR_161, BOOST_PP_TUPLE_EAT_4)(o(161, s), p, o, m)
+# define BOOST_PP_FOR_161(s, p, o, m) BOOST_PP_IF(p(162, s), m, BOOST_PP_TUPLE_EAT_2)(162, s) BOOST_PP_IF(p(162, s), BOOST_PP_FOR_162, BOOST_PP_TUPLE_EAT_4)(o(162, s), p, o, m)
+# define BOOST_PP_FOR_162(s, p, o, m) BOOST_PP_IF(p(163, s), m, BOOST_PP_TUPLE_EAT_2)(163, s) BOOST_PP_IF(p(163, s), BOOST_PP_FOR_163, BOOST_PP_TUPLE_EAT_4)(o(163, s), p, o, m)
+# define BOOST_PP_FOR_163(s, p, o, m) BOOST_PP_IF(p(164, s), m, BOOST_PP_TUPLE_EAT_2)(164, s) BOOST_PP_IF(p(164, s), BOOST_PP_FOR_164, BOOST_PP_TUPLE_EAT_4)(o(164, s), p, o, m)
+# define BOOST_PP_FOR_164(s, p, o, m) BOOST_PP_IF(p(165, s), m, BOOST_PP_TUPLE_EAT_2)(165, s) BOOST_PP_IF(p(165, s), BOOST_PP_FOR_165, BOOST_PP_TUPLE_EAT_4)(o(165, s), p, o, m)
+# define BOOST_PP_FOR_165(s, p, o, m) BOOST_PP_IF(p(166, s), m, BOOST_PP_TUPLE_EAT_2)(166, s) BOOST_PP_IF(p(166, s), BOOST_PP_FOR_166, BOOST_PP_TUPLE_EAT_4)(o(166, s), p, o, m)
+# define BOOST_PP_FOR_166(s, p, o, m) BOOST_PP_IF(p(167, s), m, BOOST_PP_TUPLE_EAT_2)(167, s) BOOST_PP_IF(p(167, s), BOOST_PP_FOR_167, BOOST_PP_TUPLE_EAT_4)(o(167, s), p, o, m)
+# define BOOST_PP_FOR_167(s, p, o, m) BOOST_PP_IF(p(168, s), m, BOOST_PP_TUPLE_EAT_2)(168, s) BOOST_PP_IF(p(168, s), BOOST_PP_FOR_168, BOOST_PP_TUPLE_EAT_4)(o(168, s), p, o, m)
+# define BOOST_PP_FOR_168(s, p, o, m) BOOST_PP_IF(p(169, s), m, BOOST_PP_TUPLE_EAT_2)(169, s) BOOST_PP_IF(p(169, s), BOOST_PP_FOR_169, BOOST_PP_TUPLE_EAT_4)(o(169, s), p, o, m)
+# define BOOST_PP_FOR_169(s, p, o, m) BOOST_PP_IF(p(170, s), m, BOOST_PP_TUPLE_EAT_2)(170, s) BOOST_PP_IF(p(170, s), BOOST_PP_FOR_170, BOOST_PP_TUPLE_EAT_4)(o(170, s), p, o, m)
+# define BOOST_PP_FOR_170(s, p, o, m) BOOST_PP_IF(p(171, s), m, BOOST_PP_TUPLE_EAT_2)(171, s) BOOST_PP_IF(p(171, s), BOOST_PP_FOR_171, BOOST_PP_TUPLE_EAT_4)(o(171, s), p, o, m)
+# define BOOST_PP_FOR_171(s, p, o, m) BOOST_PP_IF(p(172, s), m, BOOST_PP_TUPLE_EAT_2)(172, s) BOOST_PP_IF(p(172, s), BOOST_PP_FOR_172, BOOST_PP_TUPLE_EAT_4)(o(172, s), p, o, m)
+# define BOOST_PP_FOR_172(s, p, o, m) BOOST_PP_IF(p(173, s), m, BOOST_PP_TUPLE_EAT_2)(173, s) BOOST_PP_IF(p(173, s), BOOST_PP_FOR_173, BOOST_PP_TUPLE_EAT_4)(o(173, s), p, o, m)
+# define BOOST_PP_FOR_173(s, p, o, m) BOOST_PP_IF(p(174, s), m, BOOST_PP_TUPLE_EAT_2)(174, s) BOOST_PP_IF(p(174, s), BOOST_PP_FOR_174, BOOST_PP_TUPLE_EAT_4)(o(174, s), p, o, m)
+# define BOOST_PP_FOR_174(s, p, o, m) BOOST_PP_IF(p(175, s), m, BOOST_PP_TUPLE_EAT_2)(175, s) BOOST_PP_IF(p(175, s), BOOST_PP_FOR_175, BOOST_PP_TUPLE_EAT_4)(o(175, s), p, o, m)
+# define BOOST_PP_FOR_175(s, p, o, m) BOOST_PP_IF(p(176, s), m, BOOST_PP_TUPLE_EAT_2)(176, s) BOOST_PP_IF(p(176, s), BOOST_PP_FOR_176, BOOST_PP_TUPLE_EAT_4)(o(176, s), p, o, m)
+# define BOOST_PP_FOR_176(s, p, o, m) BOOST_PP_IF(p(177, s), m, BOOST_PP_TUPLE_EAT_2)(177, s) BOOST_PP_IF(p(177, s), BOOST_PP_FOR_177, BOOST_PP_TUPLE_EAT_4)(o(177, s), p, o, m)
+# define BOOST_PP_FOR_177(s, p, o, m) BOOST_PP_IF(p(178, s), m, BOOST_PP_TUPLE_EAT_2)(178, s) BOOST_PP_IF(p(178, s), BOOST_PP_FOR_178, BOOST_PP_TUPLE_EAT_4)(o(178, s), p, o, m)
+# define BOOST_PP_FOR_178(s, p, o, m) BOOST_PP_IF(p(179, s), m, BOOST_PP_TUPLE_EAT_2)(179, s) BOOST_PP_IF(p(179, s), BOOST_PP_FOR_179, BOOST_PP_TUPLE_EAT_4)(o(179, s), p, o, m)
+# define BOOST_PP_FOR_179(s, p, o, m) BOOST_PP_IF(p(180, s), m, BOOST_PP_TUPLE_EAT_2)(180, s) BOOST_PP_IF(p(180, s), BOOST_PP_FOR_180, BOOST_PP_TUPLE_EAT_4)(o(180, s), p, o, m)
+# define BOOST_PP_FOR_180(s, p, o, m) BOOST_PP_IF(p(181, s), m, BOOST_PP_TUPLE_EAT_2)(181, s) BOOST_PP_IF(p(181, s), BOOST_PP_FOR_181, BOOST_PP_TUPLE_EAT_4)(o(181, s), p, o, m)
+# define BOOST_PP_FOR_181(s, p, o, m) BOOST_PP_IF(p(182, s), m, BOOST_PP_TUPLE_EAT_2)(182, s) BOOST_PP_IF(p(182, s), BOOST_PP_FOR_182, BOOST_PP_TUPLE_EAT_4)(o(182, s), p, o, m)
+# define BOOST_PP_FOR_182(s, p, o, m) BOOST_PP_IF(p(183, s), m, BOOST_PP_TUPLE_EAT_2)(183, s) BOOST_PP_IF(p(183, s), BOOST_PP_FOR_183, BOOST_PP_TUPLE_EAT_4)(o(183, s), p, o, m)
+# define BOOST_PP_FOR_183(s, p, o, m) BOOST_PP_IF(p(184, s), m, BOOST_PP_TUPLE_EAT_2)(184, s) BOOST_PP_IF(p(184, s), BOOST_PP_FOR_184, BOOST_PP_TUPLE_EAT_4)(o(184, s), p, o, m)
+# define BOOST_PP_FOR_184(s, p, o, m) BOOST_PP_IF(p(185, s), m, BOOST_PP_TUPLE_EAT_2)(185, s) BOOST_PP_IF(p(185, s), BOOST_PP_FOR_185, BOOST_PP_TUPLE_EAT_4)(o(185, s), p, o, m)
+# define BOOST_PP_FOR_185(s, p, o, m) BOOST_PP_IF(p(186, s), m, BOOST_PP_TUPLE_EAT_2)(186, s) BOOST_PP_IF(p(186, s), BOOST_PP_FOR_186, BOOST_PP_TUPLE_EAT_4)(o(186, s), p, o, m)
+# define BOOST_PP_FOR_186(s, p, o, m) BOOST_PP_IF(p(187, s), m, BOOST_PP_TUPLE_EAT_2)(187, s) BOOST_PP_IF(p(187, s), BOOST_PP_FOR_187, BOOST_PP_TUPLE_EAT_4)(o(187, s), p, o, m)
+# define BOOST_PP_FOR_187(s, p, o, m) BOOST_PP_IF(p(188, s), m, BOOST_PP_TUPLE_EAT_2)(188, s) BOOST_PP_IF(p(188, s), BOOST_PP_FOR_188, BOOST_PP_TUPLE_EAT_4)(o(188, s), p, o, m)
+# define BOOST_PP_FOR_188(s, p, o, m) BOOST_PP_IF(p(189, s), m, BOOST_PP_TUPLE_EAT_2)(189, s) BOOST_PP_IF(p(189, s), BOOST_PP_FOR_189, BOOST_PP_TUPLE_EAT_4)(o(189, s), p, o, m)
+# define BOOST_PP_FOR_189(s, p, o, m) BOOST_PP_IF(p(190, s), m, BOOST_PP_TUPLE_EAT_2)(190, s) BOOST_PP_IF(p(190, s), BOOST_PP_FOR_190, BOOST_PP_TUPLE_EAT_4)(o(190, s), p, o, m)
+# define BOOST_PP_FOR_190(s, p, o, m) BOOST_PP_IF(p(191, s), m, BOOST_PP_TUPLE_EAT_2)(191, s) BOOST_PP_IF(p(191, s), BOOST_PP_FOR_191, BOOST_PP_TUPLE_EAT_4)(o(191, s), p, o, m)
+# define BOOST_PP_FOR_191(s, p, o, m) BOOST_PP_IF(p(192, s), m, BOOST_PP_TUPLE_EAT_2)(192, s) BOOST_PP_IF(p(192, s), BOOST_PP_FOR_192, BOOST_PP_TUPLE_EAT_4)(o(192, s), p, o, m)
+# define BOOST_PP_FOR_192(s, p, o, m) BOOST_PP_IF(p(193, s), m, BOOST_PP_TUPLE_EAT_2)(193, s) BOOST_PP_IF(p(193, s), BOOST_PP_FOR_193, BOOST_PP_TUPLE_EAT_4)(o(193, s), p, o, m)
+# define BOOST_PP_FOR_193(s, p, o, m) BOOST_PP_IF(p(194, s), m, BOOST_PP_TUPLE_EAT_2)(194, s) BOOST_PP_IF(p(194, s), BOOST_PP_FOR_194, BOOST_PP_TUPLE_EAT_4)(o(194, s), p, o, m)
+# define BOOST_PP_FOR_194(s, p, o, m) BOOST_PP_IF(p(195, s), m, BOOST_PP_TUPLE_EAT_2)(195, s) BOOST_PP_IF(p(195, s), BOOST_PP_FOR_195, BOOST_PP_TUPLE_EAT_4)(o(195, s), p, o, m)
+# define BOOST_PP_FOR_195(s, p, o, m) BOOST_PP_IF(p(196, s), m, BOOST_PP_TUPLE_EAT_2)(196, s) BOOST_PP_IF(p(196, s), BOOST_PP_FOR_196, BOOST_PP_TUPLE_EAT_4)(o(196, s), p, o, m)
+# define BOOST_PP_FOR_196(s, p, o, m) BOOST_PP_IF(p(197, s), m, BOOST_PP_TUPLE_EAT_2)(197, s) BOOST_PP_IF(p(197, s), BOOST_PP_FOR_197, BOOST_PP_TUPLE_EAT_4)(o(197, s), p, o, m)
+# define BOOST_PP_FOR_197(s, p, o, m) BOOST_PP_IF(p(198, s), m, BOOST_PP_TUPLE_EAT_2)(198, s) BOOST_PP_IF(p(198, s), BOOST_PP_FOR_198, BOOST_PP_TUPLE_EAT_4)(o(198, s), p, o, m)
+# define BOOST_PP_FOR_198(s, p, o, m) BOOST_PP_IF(p(199, s), m, BOOST_PP_TUPLE_EAT_2)(199, s) BOOST_PP_IF(p(199, s), BOOST_PP_FOR_199, BOOST_PP_TUPLE_EAT_4)(o(199, s), p, o, m)
+# define BOOST_PP_FOR_199(s, p, o, m) BOOST_PP_IF(p(200, s), m, BOOST_PP_TUPLE_EAT_2)(200, s) BOOST_PP_IF(p(200, s), BOOST_PP_FOR_200, BOOST_PP_TUPLE_EAT_4)(o(200, s), p, o, m)
+# define BOOST_PP_FOR_200(s, p, o, m) BOOST_PP_IF(p(201, s), m, BOOST_PP_TUPLE_EAT_2)(201, s) BOOST_PP_IF(p(201, s), BOOST_PP_FOR_201, BOOST_PP_TUPLE_EAT_4)(o(201, s), p, o, m)
+# define BOOST_PP_FOR_201(s, p, o, m) BOOST_PP_IF(p(202, s), m, BOOST_PP_TUPLE_EAT_2)(202, s) BOOST_PP_IF(p(202, s), BOOST_PP_FOR_202, BOOST_PP_TUPLE_EAT_4)(o(202, s), p, o, m)
+# define BOOST_PP_FOR_202(s, p, o, m) BOOST_PP_IF(p(203, s), m, BOOST_PP_TUPLE_EAT_2)(203, s) BOOST_PP_IF(p(203, s), BOOST_PP_FOR_203, BOOST_PP_TUPLE_EAT_4)(o(203, s), p, o, m)
+# define BOOST_PP_FOR_203(s, p, o, m) BOOST_PP_IF(p(204, s), m, BOOST_PP_TUPLE_EAT_2)(204, s) BOOST_PP_IF(p(204, s), BOOST_PP_FOR_204, BOOST_PP_TUPLE_EAT_4)(o(204, s), p, o, m)
+# define BOOST_PP_FOR_204(s, p, o, m) BOOST_PP_IF(p(205, s), m, BOOST_PP_TUPLE_EAT_2)(205, s) BOOST_PP_IF(p(205, s), BOOST_PP_FOR_205, BOOST_PP_TUPLE_EAT_4)(o(205, s), p, o, m)
+# define BOOST_PP_FOR_205(s, p, o, m) BOOST_PP_IF(p(206, s), m, BOOST_PP_TUPLE_EAT_2)(206, s) BOOST_PP_IF(p(206, s), BOOST_PP_FOR_206, BOOST_PP_TUPLE_EAT_4)(o(206, s), p, o, m)
+# define BOOST_PP_FOR_206(s, p, o, m) BOOST_PP_IF(p(207, s), m, BOOST_PP_TUPLE_EAT_2)(207, s) BOOST_PP_IF(p(207, s), BOOST_PP_FOR_207, BOOST_PP_TUPLE_EAT_4)(o(207, s), p, o, m)
+# define BOOST_PP_FOR_207(s, p, o, m) BOOST_PP_IF(p(208, s), m, BOOST_PP_TUPLE_EAT_2)(208, s) BOOST_PP_IF(p(208, s), BOOST_PP_FOR_208, BOOST_PP_TUPLE_EAT_4)(o(208, s), p, o, m)
+# define BOOST_PP_FOR_208(s, p, o, m) BOOST_PP_IF(p(209, s), m, BOOST_PP_TUPLE_EAT_2)(209, s) BOOST_PP_IF(p(209, s), BOOST_PP_FOR_209, BOOST_PP_TUPLE_EAT_4)(o(209, s), p, o, m)
+# define BOOST_PP_FOR_209(s, p, o, m) BOOST_PP_IF(p(210, s), m, BOOST_PP_TUPLE_EAT_2)(210, s) BOOST_PP_IF(p(210, s), BOOST_PP_FOR_210, BOOST_PP_TUPLE_EAT_4)(o(210, s), p, o, m)
+# define BOOST_PP_FOR_210(s, p, o, m) BOOST_PP_IF(p(211, s), m, BOOST_PP_TUPLE_EAT_2)(211, s) BOOST_PP_IF(p(211, s), BOOST_PP_FOR_211, BOOST_PP_TUPLE_EAT_4)(o(211, s), p, o, m)
+# define BOOST_PP_FOR_211(s, p, o, m) BOOST_PP_IF(p(212, s), m, BOOST_PP_TUPLE_EAT_2)(212, s) BOOST_PP_IF(p(212, s), BOOST_PP_FOR_212, BOOST_PP_TUPLE_EAT_4)(o(212, s), p, o, m)
+# define BOOST_PP_FOR_212(s, p, o, m) BOOST_PP_IF(p(213, s), m, BOOST_PP_TUPLE_EAT_2)(213, s) BOOST_PP_IF(p(213, s), BOOST_PP_FOR_213, BOOST_PP_TUPLE_EAT_4)(o(213, s), p, o, m)
+# define BOOST_PP_FOR_213(s, p, o, m) BOOST_PP_IF(p(214, s), m, BOOST_PP_TUPLE_EAT_2)(214, s) BOOST_PP_IF(p(214, s), BOOST_PP_FOR_214, BOOST_PP_TUPLE_EAT_4)(o(214, s), p, o, m)
+# define BOOST_PP_FOR_214(s, p, o, m) BOOST_PP_IF(p(215, s), m, BOOST_PP_TUPLE_EAT_2)(215, s) BOOST_PP_IF(p(215, s), BOOST_PP_FOR_215, BOOST_PP_TUPLE_EAT_4)(o(215, s), p, o, m)
+# define BOOST_PP_FOR_215(s, p, o, m) BOOST_PP_IF(p(216, s), m, BOOST_PP_TUPLE_EAT_2)(216, s) BOOST_PP_IF(p(216, s), BOOST_PP_FOR_216, BOOST_PP_TUPLE_EAT_4)(o(216, s), p, o, m)
+# define BOOST_PP_FOR_216(s, p, o, m) BOOST_PP_IF(p(217, s), m, BOOST_PP_TUPLE_EAT_2)(217, s) BOOST_PP_IF(p(217, s), BOOST_PP_FOR_217, BOOST_PP_TUPLE_EAT_4)(o(217, s), p, o, m)
+# define BOOST_PP_FOR_217(s, p, o, m) BOOST_PP_IF(p(218, s), m, BOOST_PP_TUPLE_EAT_2)(218, s) BOOST_PP_IF(p(218, s), BOOST_PP_FOR_218, BOOST_PP_TUPLE_EAT_4)(o(218, s), p, o, m)
+# define BOOST_PP_FOR_218(s, p, o, m) BOOST_PP_IF(p(219, s), m, BOOST_PP_TUPLE_EAT_2)(219, s) BOOST_PP_IF(p(219, s), BOOST_PP_FOR_219, BOOST_PP_TUPLE_EAT_4)(o(219, s), p, o, m)
+# define BOOST_PP_FOR_219(s, p, o, m) BOOST_PP_IF(p(220, s), m, BOOST_PP_TUPLE_EAT_2)(220, s) BOOST_PP_IF(p(220, s), BOOST_PP_FOR_220, BOOST_PP_TUPLE_EAT_4)(o(220, s), p, o, m)
+# define BOOST_PP_FOR_220(s, p, o, m) BOOST_PP_IF(p(221, s), m, BOOST_PP_TUPLE_EAT_2)(221, s) BOOST_PP_IF(p(221, s), BOOST_PP_FOR_221, BOOST_PP_TUPLE_EAT_4)(o(221, s), p, o, m)
+# define BOOST_PP_FOR_221(s, p, o, m) BOOST_PP_IF(p(222, s), m, BOOST_PP_TUPLE_EAT_2)(222, s) BOOST_PP_IF(p(222, s), BOOST_PP_FOR_222, BOOST_PP_TUPLE_EAT_4)(o(222, s), p, o, m)
+# define BOOST_PP_FOR_222(s, p, o, m) BOOST_PP_IF(p(223, s), m, BOOST_PP_TUPLE_EAT_2)(223, s) BOOST_PP_IF(p(223, s), BOOST_PP_FOR_223, BOOST_PP_TUPLE_EAT_4)(o(223, s), p, o, m)
+# define BOOST_PP_FOR_223(s, p, o, m) BOOST_PP_IF(p(224, s), m, BOOST_PP_TUPLE_EAT_2)(224, s) BOOST_PP_IF(p(224, s), BOOST_PP_FOR_224, BOOST_PP_TUPLE_EAT_4)(o(224, s), p, o, m)
+# define BOOST_PP_FOR_224(s, p, o, m) BOOST_PP_IF(p(225, s), m, BOOST_PP_TUPLE_EAT_2)(225, s) BOOST_PP_IF(p(225, s), BOOST_PP_FOR_225, BOOST_PP_TUPLE_EAT_4)(o(225, s), p, o, m)
+# define BOOST_PP_FOR_225(s, p, o, m) BOOST_PP_IF(p(226, s), m, BOOST_PP_TUPLE_EAT_2)(226, s) BOOST_PP_IF(p(226, s), BOOST_PP_FOR_226, BOOST_PP_TUPLE_EAT_4)(o(226, s), p, o, m)
+# define BOOST_PP_FOR_226(s, p, o, m) BOOST_PP_IF(p(227, s), m, BOOST_PP_TUPLE_EAT_2)(227, s) BOOST_PP_IF(p(227, s), BOOST_PP_FOR_227, BOOST_PP_TUPLE_EAT_4)(o(227, s), p, o, m)
+# define BOOST_PP_FOR_227(s, p, o, m) BOOST_PP_IF(p(228, s), m, BOOST_PP_TUPLE_EAT_2)(228, s) BOOST_PP_IF(p(228, s), BOOST_PP_FOR_228, BOOST_PP_TUPLE_EAT_4)(o(228, s), p, o, m)
+# define BOOST_PP_FOR_228(s, p, o, m) BOOST_PP_IF(p(229, s), m, BOOST_PP_TUPLE_EAT_2)(229, s) BOOST_PP_IF(p(229, s), BOOST_PP_FOR_229, BOOST_PP_TUPLE_EAT_4)(o(229, s), p, o, m)
+# define BOOST_PP_FOR_229(s, p, o, m) BOOST_PP_IF(p(230, s), m, BOOST_PP_TUPLE_EAT_2)(230, s) BOOST_PP_IF(p(230, s), BOOST_PP_FOR_230, BOOST_PP_TUPLE_EAT_4)(o(230, s), p, o, m)
+# define BOOST_PP_FOR_230(s, p, o, m) BOOST_PP_IF(p(231, s), m, BOOST_PP_TUPLE_EAT_2)(231, s) BOOST_PP_IF(p(231, s), BOOST_PP_FOR_231, BOOST_PP_TUPLE_EAT_4)(o(231, s), p, o, m)
+# define BOOST_PP_FOR_231(s, p, o, m) BOOST_PP_IF(p(232, s), m, BOOST_PP_TUPLE_EAT_2)(232, s) BOOST_PP_IF(p(232, s), BOOST_PP_FOR_232, BOOST_PP_TUPLE_EAT_4)(o(232, s), p, o, m)
+# define BOOST_PP_FOR_232(s, p, o, m) BOOST_PP_IF(p(233, s), m, BOOST_PP_TUPLE_EAT_2)(233, s) BOOST_PP_IF(p(233, s), BOOST_PP_FOR_233, BOOST_PP_TUPLE_EAT_4)(o(233, s), p, o, m)
+# define BOOST_PP_FOR_233(s, p, o, m) BOOST_PP_IF(p(234, s), m, BOOST_PP_TUPLE_EAT_2)(234, s) BOOST_PP_IF(p(234, s), BOOST_PP_FOR_234, BOOST_PP_TUPLE_EAT_4)(o(234, s), p, o, m)
+# define BOOST_PP_FOR_234(s, p, o, m) BOOST_PP_IF(p(235, s), m, BOOST_PP_TUPLE_EAT_2)(235, s) BOOST_PP_IF(p(235, s), BOOST_PP_FOR_235, BOOST_PP_TUPLE_EAT_4)(o(235, s), p, o, m)
+# define BOOST_PP_FOR_235(s, p, o, m) BOOST_PP_IF(p(236, s), m, BOOST_PP_TUPLE_EAT_2)(236, s) BOOST_PP_IF(p(236, s), BOOST_PP_FOR_236, BOOST_PP_TUPLE_EAT_4)(o(236, s), p, o, m)
+# define BOOST_PP_FOR_236(s, p, o, m) BOOST_PP_IF(p(237, s), m, BOOST_PP_TUPLE_EAT_2)(237, s) BOOST_PP_IF(p(237, s), BOOST_PP_FOR_237, BOOST_PP_TUPLE_EAT_4)(o(237, s), p, o, m)
+# define BOOST_PP_FOR_237(s, p, o, m) BOOST_PP_IF(p(238, s), m, BOOST_PP_TUPLE_EAT_2)(238, s) BOOST_PP_IF(p(238, s), BOOST_PP_FOR_238, BOOST_PP_TUPLE_EAT_4)(o(238, s), p, o, m)
+# define BOOST_PP_FOR_238(s, p, o, m) BOOST_PP_IF(p(239, s), m, BOOST_PP_TUPLE_EAT_2)(239, s) BOOST_PP_IF(p(239, s), BOOST_PP_FOR_239, BOOST_PP_TUPLE_EAT_4)(o(239, s), p, o, m)
+# define BOOST_PP_FOR_239(s, p, o, m) BOOST_PP_IF(p(240, s), m, BOOST_PP_TUPLE_EAT_2)(240, s) BOOST_PP_IF(p(240, s), BOOST_PP_FOR_240, BOOST_PP_TUPLE_EAT_4)(o(240, s), p, o, m)
+# define BOOST_PP_FOR_240(s, p, o, m) BOOST_PP_IF(p(241, s), m, BOOST_PP_TUPLE_EAT_2)(241, s) BOOST_PP_IF(p(241, s), BOOST_PP_FOR_241, BOOST_PP_TUPLE_EAT_4)(o(241, s), p, o, m)
+# define BOOST_PP_FOR_241(s, p, o, m) BOOST_PP_IF(p(242, s), m, BOOST_PP_TUPLE_EAT_2)(242, s) BOOST_PP_IF(p(242, s), BOOST_PP_FOR_242, BOOST_PP_TUPLE_EAT_4)(o(242, s), p, o, m)
+# define BOOST_PP_FOR_242(s, p, o, m) BOOST_PP_IF(p(243, s), m, BOOST_PP_TUPLE_EAT_2)(243, s) BOOST_PP_IF(p(243, s), BOOST_PP_FOR_243, BOOST_PP_TUPLE_EAT_4)(o(243, s), p, o, m)
+# define BOOST_PP_FOR_243(s, p, o, m) BOOST_PP_IF(p(244, s), m, BOOST_PP_TUPLE_EAT_2)(244, s) BOOST_PP_IF(p(244, s), BOOST_PP_FOR_244, BOOST_PP_TUPLE_EAT_4)(o(244, s), p, o, m)
+# define BOOST_PP_FOR_244(s, p, o, m) BOOST_PP_IF(p(245, s), m, BOOST_PP_TUPLE_EAT_2)(245, s) BOOST_PP_IF(p(245, s), BOOST_PP_FOR_245, BOOST_PP_TUPLE_EAT_4)(o(245, s), p, o, m)
+# define BOOST_PP_FOR_245(s, p, o, m) BOOST_PP_IF(p(246, s), m, BOOST_PP_TUPLE_EAT_2)(246, s) BOOST_PP_IF(p(246, s), BOOST_PP_FOR_246, BOOST_PP_TUPLE_EAT_4)(o(246, s), p, o, m)
+# define BOOST_PP_FOR_246(s, p, o, m) BOOST_PP_IF(p(247, s), m, BOOST_PP_TUPLE_EAT_2)(247, s) BOOST_PP_IF(p(247, s), BOOST_PP_FOR_247, BOOST_PP_TUPLE_EAT_4)(o(247, s), p, o, m)
+# define BOOST_PP_FOR_247(s, p, o, m) BOOST_PP_IF(p(248, s), m, BOOST_PP_TUPLE_EAT_2)(248, s) BOOST_PP_IF(p(248, s), BOOST_PP_FOR_248, BOOST_PP_TUPLE_EAT_4)(o(248, s), p, o, m)
+# define BOOST_PP_FOR_248(s, p, o, m) BOOST_PP_IF(p(249, s), m, BOOST_PP_TUPLE_EAT_2)(249, s) BOOST_PP_IF(p(249, s), BOOST_PP_FOR_249, BOOST_PP_TUPLE_EAT_4)(o(249, s), p, o, m)
+# define BOOST_PP_FOR_249(s, p, o, m) BOOST_PP_IF(p(250, s), m, BOOST_PP_TUPLE_EAT_2)(250, s) BOOST_PP_IF(p(250, s), BOOST_PP_FOR_250, BOOST_PP_TUPLE_EAT_4)(o(250, s), p, o, m)
+# define BOOST_PP_FOR_250(s, p, o, m) BOOST_PP_IF(p(251, s), m, BOOST_PP_TUPLE_EAT_2)(251, s) BOOST_PP_IF(p(251, s), BOOST_PP_FOR_251, BOOST_PP_TUPLE_EAT_4)(o(251, s), p, o, m)
+# define BOOST_PP_FOR_251(s, p, o, m) BOOST_PP_IF(p(252, s), m, BOOST_PP_TUPLE_EAT_2)(252, s) BOOST_PP_IF(p(252, s), BOOST_PP_FOR_252, BOOST_PP_TUPLE_EAT_4)(o(252, s), p, o, m)
+# define BOOST_PP_FOR_252(s, p, o, m) BOOST_PP_IF(p(253, s), m, BOOST_PP_TUPLE_EAT_2)(253, s) BOOST_PP_IF(p(253, s), BOOST_PP_FOR_253, BOOST_PP_TUPLE_EAT_4)(o(253, s), p, o, m)
+# define BOOST_PP_FOR_253(s, p, o, m) BOOST_PP_IF(p(254, s), m, BOOST_PP_TUPLE_EAT_2)(254, s) BOOST_PP_IF(p(254, s), BOOST_PP_FOR_254, BOOST_PP_TUPLE_EAT_4)(o(254, s), p, o, m)
+# define BOOST_PP_FOR_254(s, p, o, m) BOOST_PP_IF(p(255, s), m, BOOST_PP_TUPLE_EAT_2)(255, s) BOOST_PP_IF(p(255, s), BOOST_PP_FOR_255, BOOST_PP_TUPLE_EAT_4)(o(255, s), p, o, m)
+# define BOOST_PP_FOR_255(s, p, o, m) BOOST_PP_IF(p(256, s), m, BOOST_PP_TUPLE_EAT_2)(256, s) BOOST_PP_IF(p(256, s), BOOST_PP_FOR_256, BOOST_PP_TUPLE_EAT_4)(o(256, s), p, o, m)
+# define BOOST_PP_FOR_256(s, p, o, m) BOOST_PP_IF(p(257, s), m, BOOST_PP_TUPLE_EAT_2)(257, s) BOOST_PP_IF(p(257, s), BOOST_PP_FOR_257, BOOST_PP_TUPLE_EAT_4)(o(257, s), p, o, m)
+#
+# endif
diff --git a/boost/boost/preprocessor/repetition/enum.hpp b/boost/boost/preprocessor/repetition/enum.hpp
new file mode 100644
index 00000000000..0198cd9b395
--- /dev/null
+++ b/boost/boost/preprocessor/repetition/enum.hpp
@@ -0,0 +1,66 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_REPETITION_ENUM_HPP
+# define BOOST_PREPROCESSOR_REPETITION_ENUM_HPP
+#
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/debug/error.hpp>
+# include <boost/preprocessor/detail/auto_rec.hpp>
+# include <boost/preprocessor/punctuation/comma_if.hpp>
+# include <boost/preprocessor/repetition/repeat.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+# include <boost/preprocessor/tuple/rem.hpp>
+#
+# /* BOOST_PP_ENUM */
+#
+# if 0
+# define BOOST_PP_ENUM(count, macro, data)
+# endif
+#
+# define BOOST_PP_ENUM BOOST_PP_CAT(BOOST_PP_ENUM_, BOOST_PP_AUTO_REC(BOOST_PP_REPEAT_P, 4))
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_ENUM_1(c, m, d) BOOST_PP_REPEAT_1(c, BOOST_PP_ENUM_M_1, (m, d))
+# define BOOST_PP_ENUM_2(c, m, d) BOOST_PP_REPEAT_2(c, BOOST_PP_ENUM_M_2, (m, d))
+# define BOOST_PP_ENUM_3(c, m, d) BOOST_PP_REPEAT_3(c, BOOST_PP_ENUM_M_3, (m, d))
+# else
+# define BOOST_PP_ENUM_1(c, m, d) BOOST_PP_ENUM_1_I(c, m, d)
+# define BOOST_PP_ENUM_2(c, m, d) BOOST_PP_ENUM_2_I(c, m, d)
+# define BOOST_PP_ENUM_3(c, m, d) BOOST_PP_ENUM_3_I(c, m, d)
+# define BOOST_PP_ENUM_1_I(c, m, d) BOOST_PP_REPEAT_1(c, BOOST_PP_ENUM_M_1, (m, d))
+# define BOOST_PP_ENUM_2_I(c, m, d) BOOST_PP_REPEAT_2(c, BOOST_PP_ENUM_M_2, (m, d))
+# define BOOST_PP_ENUM_3_I(c, m, d) BOOST_PP_REPEAT_3(c, BOOST_PP_ENUM_M_3, (m, d))
+# endif
+#
+# define BOOST_PP_ENUM_4(c, m, d) BOOST_PP_ERROR(0x0003)
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()
+# define BOOST_PP_ENUM_M_1(z, n, md) BOOST_PP_ENUM_M_1_IM(z, n, BOOST_PP_TUPLE_REM_2 md)
+# define BOOST_PP_ENUM_M_2(z, n, md) BOOST_PP_ENUM_M_2_IM(z, n, BOOST_PP_TUPLE_REM_2 md)
+# define BOOST_PP_ENUM_M_3(z, n, md) BOOST_PP_ENUM_M_3_IM(z, n, BOOST_PP_TUPLE_REM_2 md)
+# define BOOST_PP_ENUM_M_1_IM(z, n, im) BOOST_PP_ENUM_M_1_I(z, n, im)
+# define BOOST_PP_ENUM_M_2_IM(z, n, im) BOOST_PP_ENUM_M_2_I(z, n, im)
+# define BOOST_PP_ENUM_M_3_IM(z, n, im) BOOST_PP_ENUM_M_3_I(z, n, im)
+# else
+# define BOOST_PP_ENUM_M_1(z, n, md) BOOST_PP_ENUM_M_1_I(z, n, BOOST_PP_TUPLE_ELEM(2, 0, md), BOOST_PP_TUPLE_ELEM(2, 1, md))
+# define BOOST_PP_ENUM_M_2(z, n, md) BOOST_PP_ENUM_M_2_I(z, n, BOOST_PP_TUPLE_ELEM(2, 0, md), BOOST_PP_TUPLE_ELEM(2, 1, md))
+# define BOOST_PP_ENUM_M_3(z, n, md) BOOST_PP_ENUM_M_3_I(z, n, BOOST_PP_TUPLE_ELEM(2, 0, md), BOOST_PP_TUPLE_ELEM(2, 1, md))
+# endif
+#
+# define BOOST_PP_ENUM_M_1_I(z, n, m, d) BOOST_PP_COMMA_IF(n) m(z, n, d)
+# define BOOST_PP_ENUM_M_2_I(z, n, m, d) BOOST_PP_COMMA_IF(n) m(z, n, d)
+# define BOOST_PP_ENUM_M_3_I(z, n, m, d) BOOST_PP_COMMA_IF(n) m(z, n, d)
+#
+# endif
diff --git a/boost/boost/preprocessor/repetition/enum_binary_params.hpp b/boost/boost/preprocessor/repetition/enum_binary_params.hpp
new file mode 100644
index 00000000000..a2c1048e183
--- /dev/null
+++ b/boost/boost/preprocessor/repetition/enum_binary_params.hpp
@@ -0,0 +1,54 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_REPETITION_ENUM_BINARY_PARAMS_HPP
+# define BOOST_PREPROCESSOR_REPETITION_ENUM_BINARY_PARAMS_HPP
+#
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/punctuation/comma_if.hpp>
+# include <boost/preprocessor/repetition/repeat.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+# include <boost/preprocessor/tuple/rem.hpp>
+#
+# /* BOOST_PP_ENUM_BINARY_PARAMS */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_ENUM_BINARY_PARAMS(count, p1, p2) BOOST_PP_REPEAT(count, BOOST_PP_ENUM_BINARY_PARAMS_M, (p1, p2))
+# else
+# define BOOST_PP_ENUM_BINARY_PARAMS(count, p1, p2) BOOST_PP_ENUM_BINARY_PARAMS_I(count, p1, p2)
+# define BOOST_PP_ENUM_BINARY_PARAMS_I(count, p1, p2) BOOST_PP_REPEAT(count, BOOST_PP_ENUM_BINARY_PARAMS_M, (p1, p2))
+# endif
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()
+# define BOOST_PP_ENUM_BINARY_PARAMS_M(z, n, pp) BOOST_PP_ENUM_BINARY_PARAMS_M_IM(z, n, BOOST_PP_TUPLE_REM_2 pp)
+# define BOOST_PP_ENUM_BINARY_PARAMS_M_IM(z, n, im) BOOST_PP_ENUM_BINARY_PARAMS_M_I(z, n, im)
+# else
+# define BOOST_PP_ENUM_BINARY_PARAMS_M(z, n, pp) BOOST_PP_ENUM_BINARY_PARAMS_M_I(z, n, BOOST_PP_TUPLE_ELEM(2, 0, pp), BOOST_PP_TUPLE_ELEM(2, 1, pp))
+# endif
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()
+# define BOOST_PP_ENUM_BINARY_PARAMS_M_I(z, n, p1, p2) BOOST_PP_ENUM_BINARY_PARAMS_M_II(z, n, p1, p2)
+# define BOOST_PP_ENUM_BINARY_PARAMS_M_II(z, n, p1, p2) BOOST_PP_COMMA_IF(n) p1 ## n p2 ## n
+# else
+# define BOOST_PP_ENUM_BINARY_PARAMS_M_I(z, n, p1, p2) BOOST_PP_COMMA_IF(n) BOOST_PP_CAT(p1, n) BOOST_PP_CAT(p2, n)
+# endif
+#
+# /* BOOST_PP_ENUM_BINARY_PARAMS_Z */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_ENUM_BINARY_PARAMS_Z(z, count, p1, p2) BOOST_PP_REPEAT_ ## z(count, BOOST_PP_ENUM_BINARY_PARAMS_M, (p1, p2))
+# else
+# define BOOST_PP_ENUM_BINARY_PARAMS_Z(z, count, p1, p2) BOOST_PP_ENUM_BINARY_PARAMS_Z_I(z, count, p1, p2)
+# define BOOST_PP_ENUM_BINARY_PARAMS_Z_I(z, count, p1, p2) BOOST_PP_REPEAT_ ## z(count, BOOST_PP_ENUM_BINARY_PARAMS_M, (p1, p2))
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/repetition/enum_params.hpp b/boost/boost/preprocessor/repetition/enum_params.hpp
new file mode 100644
index 00000000000..65a2369d4a7
--- /dev/null
+++ b/boost/boost/preprocessor/repetition/enum_params.hpp
@@ -0,0 +1,41 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_REPETITION_ENUM_PARAMS_HPP
+# define BOOST_PREPROCESSOR_REPETITION_ENUM_PARAMS_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/punctuation/comma_if.hpp>
+# include <boost/preprocessor/repetition/repeat.hpp>
+#
+# /* BOOST_PP_ENUM_PARAMS */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_ENUM_PARAMS(count, param) BOOST_PP_REPEAT(count, BOOST_PP_ENUM_PARAMS_M, param)
+# else
+# define BOOST_PP_ENUM_PARAMS(count, param) BOOST_PP_ENUM_PARAMS_I(count, param)
+# define BOOST_PP_ENUM_PARAMS_I(count, param) BOOST_PP_REPEAT(count, BOOST_PP_ENUM_PARAMS_M, param)
+# endif
+#
+# define BOOST_PP_ENUM_PARAMS_M(z, n, param) BOOST_PP_COMMA_IF(n) param ## n
+#
+# /* BOOST_PP_ENUM_PARAMS_Z */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_ENUM_PARAMS_Z(z, count, param) BOOST_PP_REPEAT_ ## z(count, BOOST_PP_ENUM_PARAMS_M, param)
+# else
+# define BOOST_PP_ENUM_PARAMS_Z(z, count, param) BOOST_PP_ENUM_PARAMS_Z_I(z, count, param)
+# define BOOST_PP_ENUM_PARAMS_Z_I(z, count, param) BOOST_PP_REPEAT_ ## z(count, BOOST_PP_ENUM_PARAMS_M, param)
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/repetition/enum_params_with_a_default.hpp b/boost/boost/preprocessor/repetition/enum_params_with_a_default.hpp
new file mode 100644
index 00000000000..7496df62f20
--- /dev/null
+++ b/boost/boost/preprocessor/repetition/enum_params_with_a_default.hpp
@@ -0,0 +1,25 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_REPETITION_ENUM_PARAMS_WITH_A_DEFAULT_HPP
+# define BOOST_PREPROCESSOR_REPETITION_ENUM_PARAMS_WITH_A_DEFAULT_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/facilities/intercept.hpp>
+# include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#
+# /* BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT */
+#
+# define BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(count, param, def) BOOST_PP_ENUM_BINARY_PARAMS(count, param, = def BOOST_PP_INTERCEPT)
+#
+# endif
diff --git a/boost/boost/preprocessor/repetition/enum_params_with_defaults.hpp b/boost/boost/preprocessor/repetition/enum_params_with_defaults.hpp
new file mode 100644
index 00000000000..fa0106f7750
--- /dev/null
+++ b/boost/boost/preprocessor/repetition/enum_params_with_defaults.hpp
@@ -0,0 +1,24 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_REPETITION_ENUM_PARAMS_WITH_DEFAULTS_HPP
+# define BOOST_PREPROCESSOR_REPETITION_ENUM_PARAMS_WITH_DEFAULTS_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#
+# /* BOOST_PP_ENUM_PARAMS_WITH_DEFAULTS */
+#
+# define BOOST_PP_ENUM_PARAMS_WITH_DEFAULTS(count, param, def) BOOST_PP_ENUM_BINARY_PARAMS(count, param, = def)
+#
+# endif
diff --git a/boost/boost/preprocessor/repetition/enum_shifted.hpp b/boost/boost/preprocessor/repetition/enum_shifted.hpp
new file mode 100644
index 00000000000..d5b006f4d0f
--- /dev/null
+++ b/boost/boost/preprocessor/repetition/enum_shifted.hpp
@@ -0,0 +1,68 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_REPETITION_ENUM_SHIFTED_HPP
+# define BOOST_PREPROCESSOR_REPETITION_ENUM_SHIFTED_HPP
+#
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/arithmetic/dec.hpp>
+# include <boost/preprocessor/arithmetic/inc.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/debug/error.hpp>
+# include <boost/preprocessor/detail/auto_rec.hpp>
+# include <boost/preprocessor/punctuation/comma_if.hpp>
+# include <boost/preprocessor/repetition/repeat.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+# include <boost/preprocessor/tuple/rem.hpp>
+#
+# /* BOOST_PP_ENUM_SHIFTED */
+#
+# if 0
+# define BOOST_PP_ENUM_SHIFTED(count, macro, data)
+# endif
+#
+# define BOOST_PP_ENUM_SHIFTED BOOST_PP_CAT(BOOST_PP_ENUM_SHIFTED_, BOOST_PP_AUTO_REC(BOOST_PP_REPEAT_P, 4))
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_ENUM_SHIFTED_1(c, m, d) BOOST_PP_REPEAT_1(BOOST_PP_DEC(c), BOOST_PP_ENUM_SHIFTED_M_1, (m, d))
+# define BOOST_PP_ENUM_SHIFTED_2(c, m, d) BOOST_PP_REPEAT_2(BOOST_PP_DEC(c), BOOST_PP_ENUM_SHIFTED_M_2, (m, d))
+# define BOOST_PP_ENUM_SHIFTED_3(c, m, d) BOOST_PP_REPEAT_3(BOOST_PP_DEC(c), BOOST_PP_ENUM_SHIFTED_M_3, (m, d))
+# else
+# define BOOST_PP_ENUM_SHIFTED_1(c, m, d) BOOST_PP_ENUM_SHIFTED_1_I(c, m, d)
+# define BOOST_PP_ENUM_SHIFTED_2(c, m, d) BOOST_PP_ENUM_SHIFTED_1_2(c, m, d)
+# define BOOST_PP_ENUM_SHIFTED_3(c, m, d) BOOST_PP_ENUM_SHIFTED_1_3(c, m, d)
+# define BOOST_PP_ENUM_SHIFTED_1_I(c, m, d) BOOST_PP_REPEAT_1(BOOST_PP_DEC(c), BOOST_PP_ENUM_SHIFTED_M_1, (m, d))
+# define BOOST_PP_ENUM_SHIFTED_2_I(c, m, d) BOOST_PP_REPEAT_2(BOOST_PP_DEC(c), BOOST_PP_ENUM_SHIFTED_M_2, (m, d))
+# define BOOST_PP_ENUM_SHIFTED_3_I(c, m, d) BOOST_PP_REPEAT_3(BOOST_PP_DEC(c), BOOST_PP_ENUM_SHIFTED_M_3, (m, d))
+# endif
+#
+# define BOOST_PP_ENUM_SHIFTED_4(c, m, d) BOOST_PP_ERROR(0x0003)
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()
+# define BOOST_PP_ENUM_SHIFTED_M_1(z, n, md) BOOST_PP_ENUM_SHIFTED_M_1_IM(z, n, BOOST_PP_TUPLE_REM_2 md)
+# define BOOST_PP_ENUM_SHIFTED_M_2(z, n, md) BOOST_PP_ENUM_SHIFTED_M_2_IM(z, n, BOOST_PP_TUPLE_REM_2 md)
+# define BOOST_PP_ENUM_SHIFTED_M_3(z, n, md) BOOST_PP_ENUM_SHIFTED_M_3_IM(z, n, BOOST_PP_TUPLE_REM_2 md)
+# define BOOST_PP_ENUM_SHIFTED_M_1_IM(z, n, im) BOOST_PP_ENUM_SHIFTED_M_1_I(z, n, im)
+# define BOOST_PP_ENUM_SHIFTED_M_2_IM(z, n, im) BOOST_PP_ENUM_SHIFTED_M_2_I(z, n, im)
+# define BOOST_PP_ENUM_SHIFTED_M_3_IM(z, n, im) BOOST_PP_ENUM_SHIFTED_M_3_I(z, n, im)
+# else
+# define BOOST_PP_ENUM_SHIFTED_M_1(z, n, md) BOOST_PP_ENUM_SHIFTED_M_1_I(z, n, BOOST_PP_TUPLE_ELEM(2, 0, md), BOOST_PP_TUPLE_ELEM(2, 1, md))
+# define BOOST_PP_ENUM_SHIFTED_M_2(z, n, md) BOOST_PP_ENUM_SHIFTED_M_2_I(z, n, BOOST_PP_TUPLE_ELEM(2, 0, md), BOOST_PP_TUPLE_ELEM(2, 1, md))
+# define BOOST_PP_ENUM_SHIFTED_M_3(z, n, md) BOOST_PP_ENUM_SHIFTED_M_3_I(z, n, BOOST_PP_TUPLE_ELEM(2, 0, md), BOOST_PP_TUPLE_ELEM(2, 1, md))
+# endif
+#
+# define BOOST_PP_ENUM_SHIFTED_M_1_I(z, n, m, d) BOOST_PP_COMMA_IF(n) m(z, BOOST_PP_INC(n), d)
+# define BOOST_PP_ENUM_SHIFTED_M_2_I(z, n, m, d) BOOST_PP_COMMA_IF(n) m(z, BOOST_PP_INC(n), d)
+# define BOOST_PP_ENUM_SHIFTED_M_3_I(z, n, m, d) BOOST_PP_COMMA_IF(n) m(z, BOOST_PP_INC(n), d)
+#
+# endif
diff --git a/boost/boost/preprocessor/repetition/enum_shifted_binary_params.hpp b/boost/boost/preprocessor/repetition/enum_shifted_binary_params.hpp
new file mode 100644
index 00000000000..f3d20fc7b47
--- /dev/null
+++ b/boost/boost/preprocessor/repetition/enum_shifted_binary_params.hpp
@@ -0,0 +1,51 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 2005. *
+# * 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. */
+#
+# ifndef BOOST_PREPROCESSOR_REPETITION_ENUM_SHIFTED_BINARY_PARAMS_HPP
+# define BOOST_PREPROCESSOR_REPETITION_ENUM_SHIFTED_BINARY_PARAMS_HPP
+#
+# include <boost/preprocessor/arithmetic/dec.hpp>
+# include <boost/preprocessor/arithmetic/inc.hpp>
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/punctuation/comma_if.hpp>
+# include <boost/preprocessor/repetition/repeat.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+# include <boost/preprocessor/tuple/rem.hpp>
+#
+# /* BOOST_PP_ENUM_SHIFTED_BINARY_PARAMS */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_ENUM_SHIFTED_BINARY_PARAMS(count, p1, p2) BOOST_PP_REPEAT(BOOST_PP_DEC(count), BOOST_PP_ENUM_SHIFTED_BINARY_PARAMS_M, (p1, p2))
+# else
+# define BOOST_PP_ENUM_SHIFTED_BINARY_PARAMS(count, p1, p2) BOOST_PP_ENUM_SHIFTED_BINARY_PARAMS_I(count, p1, p2)
+# define BOOST_PP_ENUM_SHIFTED_BINARY_PARAMS_I(count, p1, p2) BOOST_PP_REPEAT(BOOST_PP_DEC(count), BOOST_PP_ENUM_SHIFTED_BINARY_PARAMS_M, (p1, p2))
+# endif
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()
+# define BOOST_PP_ENUM_SHIFTED_BINARY_PARAMS_M(z, n, pp) BOOST_PP_ENUM_SHIFTED_BINARY_PARAMS_M_IM(z, n, BOOST_PP_TUPLE_REM_2 pp)
+# define BOOST_PP_ENUM_SHIFTED_BINARY_PARAMS_M_IM(z, n, im) BOOST_PP_ENUM_SHIFTED_BINARY_PARAMS_M_I(z, n, im)
+# else
+# define BOOST_PP_ENUM_SHIFTED_BINARY_PARAMS_M(z, n, pp) BOOST_PP_ENUM_SHIFTED_BINARY_PARAMS_M_I(z, n, BOOST_PP_TUPLE_ELEM(2, 0, pp), BOOST_PP_TUPLE_ELEM(2, 1, pp))
+# endif
+#
+# define BOOST_PP_ENUM_SHIFTED_BINARY_PARAMS_M_I(z, n, p1, p2) BOOST_PP_COMMA_IF(n) BOOST_PP_CAT(p1, BOOST_PP_INC(n)) BOOST_PP_CAT(p2, BOOST_PP_INC(n))
+#
+# /* BOOST_PP_ENUM_SHIFTED_BINARY_PARAMS_Z */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_ENUM_SHIFTED_BINARY_PARAMS_Z(z, count, p1, p2) BOOST_PP_REPEAT_ ## z(BOOST_PP_DEC(count), BOOST_PP_ENUM_SHIFTED_BINARY_PARAMS_M, (p1, p2))
+# else
+# define BOOST_PP_ENUM_SHIFTED_BINARY_PARAMS_Z(z, count, p1, p2) BOOST_PP_ENUM_SHIFTED_BINARY_PARAMS_Z_I(z, count, p1, p2)
+# define BOOST_PP_ENUM_SHIFTED_BINARY_PARAMS_Z_I(z, count, p1, p2) BOOST_PP_REPEAT_ ## z(BOOST_PP_DEC(count), BOOST_PP_ENUM_SHIFTED_BINARY_PARAMS_M, (p1, p2))
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/repetition/enum_shifted_params.hpp b/boost/boost/preprocessor/repetition/enum_shifted_params.hpp
new file mode 100644
index 00000000000..88b2bf4c32c
--- /dev/null
+++ b/boost/boost/preprocessor/repetition/enum_shifted_params.hpp
@@ -0,0 +1,44 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_REPETITION_ENUM_SHIFTED_PARAMS_HPP
+# define BOOST_PREPROCESSOR_REPETITION_ENUM_SHIFTED_PARAMS_HPP
+#
+# include <boost/preprocessor/arithmetic/dec.hpp>
+# include <boost/preprocessor/arithmetic/inc.hpp>
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/punctuation/comma_if.hpp>
+# include <boost/preprocessor/repetition/repeat.hpp>
+#
+# /* BOOST_PP_ENUM_SHIFTED_PARAMS */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_ENUM_SHIFTED_PARAMS(count, param) BOOST_PP_REPEAT(BOOST_PP_DEC(count), BOOST_PP_ENUM_SHIFTED_PARAMS_M, param)
+# else
+# define BOOST_PP_ENUM_SHIFTED_PARAMS(count, param) BOOST_PP_ENUM_SHIFTED_PARAMS_I(count, param)
+# define BOOST_PP_ENUM_SHIFTED_PARAMS_I(count, param) BOOST_PP_REPEAT(BOOST_PP_DEC(count), BOOST_PP_ENUM_SHIFTED_PARAMS_M, param)
+# endif
+#
+# define BOOST_PP_ENUM_SHIFTED_PARAMS_M(z, n, param) BOOST_PP_COMMA_IF(n) BOOST_PP_CAT(param, BOOST_PP_INC(n))
+#
+# /* BOOST_PP_ENUM_SHIFTED_PARAMS_Z */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_ENUM_SHIFTED_PARAMS_Z(z, count, param) BOOST_PP_REPEAT_ ## z(BOOST_PP_DEC(count), BOOST_PP_ENUM_SHIFTED_PARAMS_M, param)
+# else
+# define BOOST_PP_ENUM_SHIFTED_PARAMS_Z(z, count, param) BOOST_PP_ENUM_SHIFTED_PARAMS_Z_I(z, count, param)
+# define BOOST_PP_ENUM_SHIFTED_PARAMS_Z_I(z, count, param) BOOST_PP_REPEAT_ ## z(BOOST_PP_DEC(count), BOOST_PP_ENUM_SHIFTED_PARAMS_M, param)
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/repetition/enum_trailing.hpp b/boost/boost/preprocessor/repetition/enum_trailing.hpp
new file mode 100644
index 00000000000..20af2d54b0b
--- /dev/null
+++ b/boost/boost/preprocessor/repetition/enum_trailing.hpp
@@ -0,0 +1,63 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_REPETITION_ENUM_TRAILING_HPP
+# define BOOST_PREPROCESSOR_REPETITION_ENUM_TRAILING_HPP
+#
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/debug/error.hpp>
+# include <boost/preprocessor/detail/auto_rec.hpp>
+# include <boost/preprocessor/repetition/repeat.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+# include <boost/preprocessor/tuple/rem.hpp>
+#
+# /* BOOST_PP_ENUM_TRAILING */
+#
+# if 0
+# define BOOST_PP_ENUM_TRAILING(count, macro, data)
+# endif
+#
+# define BOOST_PP_ENUM_TRAILING BOOST_PP_CAT(BOOST_PP_ENUM_TRAILING_, BOOST_PP_AUTO_REC(BOOST_PP_REPEAT_P, 4))
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_ENUM_TRAILING_1(c, m, d) BOOST_PP_REPEAT_1(c, BOOST_PP_ENUM_TRAILING_M_1, (m, d))
+# define BOOST_PP_ENUM_TRAILING_2(c, m, d) BOOST_PP_REPEAT_2(c, BOOST_PP_ENUM_TRAILING_M_2, (m, d))
+# define BOOST_PP_ENUM_TRAILING_3(c, m, d) BOOST_PP_REPEAT_3(c, BOOST_PP_ENUM_TRAILING_M_3, (m, d))
+# else
+# define BOOST_PP_ENUM_TRAILING_1(c, m, d) BOOST_PP_ENUM_TRAILING_1_I(c, m, d)
+# define BOOST_PP_ENUM_TRAILING_2(c, m, d) BOOST_PP_ENUM_TRAILING_2_I(c, m, d)
+# define BOOST_PP_ENUM_TRAILING_3(c, m, d) BOOST_PP_ENUM_TRAILING_3_I(c, m, d)
+# define BOOST_PP_ENUM_TRAILING_1_I(c, m, d) BOOST_PP_REPEAT_1(c, BOOST_PP_ENUM_TRAILING_M_1, (m, d))
+# define BOOST_PP_ENUM_TRAILING_2_I(c, m, d) BOOST_PP_REPEAT_2(c, BOOST_PP_ENUM_TRAILING_M_2, (m, d))
+# define BOOST_PP_ENUM_TRAILING_3_I(c, m, d) BOOST_PP_REPEAT_3(c, BOOST_PP_ENUM_TRAILING_M_3, (m, d))
+# endif
+#
+# define BOOST_PP_ENUM_TRAILING_4(c, m, d) BOOST_PP_ERROR(0x0003)
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()
+# define BOOST_PP_ENUM_TRAILING_M_1(z, n, md) BOOST_PP_ENUM_TRAILING_M_1_IM(z, n, BOOST_PP_TUPLE_REM_2 md)
+# define BOOST_PP_ENUM_TRAILING_M_2(z, n, md) BOOST_PP_ENUM_TRAILING_M_2_IM(z, n, BOOST_PP_TUPLE_REM_2 md)
+# define BOOST_PP_ENUM_TRAILING_M_3(z, n, md) BOOST_PP_ENUM_TRAILING_M_3_IM(z, n, BOOST_PP_TUPLE_REM_2 md)
+# define BOOST_PP_ENUM_TRAILING_M_1_IM(z, n, im) BOOST_PP_ENUM_TRAILING_M_1_I(z, n, im)
+# define BOOST_PP_ENUM_TRAILING_M_2_IM(z, n, im) BOOST_PP_ENUM_TRAILING_M_2_I(z, n, im)
+# define BOOST_PP_ENUM_TRAILING_M_3_IM(z, n, im) BOOST_PP_ENUM_TRAILING_M_3_I(z, n, im)
+# else
+# define BOOST_PP_ENUM_TRAILING_M_1(z, n, md) BOOST_PP_ENUM_TRAILING_M_1_I(z, n, BOOST_PP_TUPLE_ELEM(2, 0, md), BOOST_PP_TUPLE_ELEM(2, 1, md))
+# define BOOST_PP_ENUM_TRAILING_M_2(z, n, md) BOOST_PP_ENUM_TRAILING_M_2_I(z, n, BOOST_PP_TUPLE_ELEM(2, 0, md), BOOST_PP_TUPLE_ELEM(2, 1, md))
+# define BOOST_PP_ENUM_TRAILING_M_3(z, n, md) BOOST_PP_ENUM_TRAILING_M_3_I(z, n, BOOST_PP_TUPLE_ELEM(2, 0, md), BOOST_PP_TUPLE_ELEM(2, 1, md))
+# endif
+#
+# define BOOST_PP_ENUM_TRAILING_M_1_I(z, n, m, d) , m(z, n, d)
+# define BOOST_PP_ENUM_TRAILING_M_2_I(z, n, m, d) , m(z, n, d)
+# define BOOST_PP_ENUM_TRAILING_M_3_I(z, n, m, d) , m(z, n, d)
+#
+# endif
diff --git a/boost/boost/preprocessor/repetition/enum_trailing_binary_params.hpp b/boost/boost/preprocessor/repetition/enum_trailing_binary_params.hpp
new file mode 100644
index 00000000000..e201b69917d
--- /dev/null
+++ b/boost/boost/preprocessor/repetition/enum_trailing_binary_params.hpp
@@ -0,0 +1,53 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_REPETITION_ENUM_TRAILING_BINARY_PARAMS_HPP
+# define BOOST_PREPROCESSOR_REPETITION_ENUM_TRAILING_BINARY_PARAMS_HPP
+#
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/repetition/repeat.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+# include <boost/preprocessor/tuple/rem.hpp>
+#
+# /* BOOST_PP_ENUM_TRAILING_BINARY_PARAMS */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_ENUM_TRAILING_BINARY_PARAMS(count, p1, p2) BOOST_PP_REPEAT(count, BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_M, (p1, p2))
+# else
+# define BOOST_PP_ENUM_TRAILING_BINARY_PARAMS(count, p1, p2) BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_I(count, p1, p2)
+# define BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_I(count, p1, p2) BOOST_PP_REPEAT(count, BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_M, (p1, p2))
+# endif
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()
+# define BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_M(z, n, pp) BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_M_IM(z, n, BOOST_PP_TUPLE_REM_2 pp)
+# define BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_M_IM(z, n, im) BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_M_I(z, n, im)
+# else
+# define BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_M(z, n, pp) BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_M_I(z, n, BOOST_PP_TUPLE_ELEM(2, 0, pp), BOOST_PP_TUPLE_ELEM(2, 1, pp))
+# endif
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()
+# define BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_M_I(z, n, p1, p2) BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_M_II(z, n, p1, p2)
+# define BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_M_II(z, n, p1, p2) , p1 ## n p2 ## n
+# else
+# define BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_M_I(z, n, p1, p2) , BOOST_PP_CAT(p1, n) BOOST_PP_CAT(p2, n)
+# endif
+#
+# /* BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_Z */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_Z(z, count, p1, p2) BOOST_PP_REPEAT_ ## z(count, BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_M, (p1, p2))
+# else
+# define BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_Z(z, count, p1, p2) BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_Z_I(z, count, p1, p2)
+# define BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_Z_I(z, count, p1, p2) BOOST_PP_REPEAT_ ## z(count, BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_M, (p1, p2))
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/repetition/enum_trailing_params.hpp b/boost/boost/preprocessor/repetition/enum_trailing_params.hpp
new file mode 100644
index 00000000000..f7520dbdeff
--- /dev/null
+++ b/boost/boost/preprocessor/repetition/enum_trailing_params.hpp
@@ -0,0 +1,38 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_REPETITION_ENUM_TRAILING_PARAMS_HPP
+# define BOOST_PREPROCESSOR_REPETITION_ENUM_TRAILING_PARAMS_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/repetition/repeat.hpp>
+#
+# /* BOOST_PP_ENUM_TRAILING_PARAMS */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_ENUM_TRAILING_PARAMS(count, param) BOOST_PP_REPEAT(count, BOOST_PP_ENUM_TRAILING_PARAMS_M, param)
+# else
+# define BOOST_PP_ENUM_TRAILING_PARAMS(count, param) BOOST_PP_ENUM_TRAILING_PARAMS_I(count, param)
+# define BOOST_PP_ENUM_TRAILING_PARAMS_I(count, param) BOOST_PP_REPEAT(count, BOOST_PP_ENUM_TRAILING_PARAMS_M, param)
+# endif
+#
+# define BOOST_PP_ENUM_TRAILING_PARAMS_M(z, n, param) , param ## n
+#
+# /* BOOST_PP_ENUM_TRAILING_PARAMS_Z */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, count, param) BOOST_PP_REPEAT_ ## z(count, BOOST_PP_ENUM_TRAILING_PARAMS_M, param)
+# else
+# define BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, count, param) BOOST_PP_ENUM_TRAILING_PARAMS_Z_I(z, count, param)
+# define BOOST_PP_ENUM_TRAILING_PARAMS_Z_I(z, count, param) BOOST_PP_REPEAT_ ## z(count, BOOST_PP_ENUM_TRAILING_PARAMS_M, param)
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/repetition/for.hpp b/boost/boost/preprocessor/repetition/for.hpp
new file mode 100644
index 00000000000..5a63753d9c5
--- /dev/null
+++ b/boost/boost/preprocessor/repetition/for.hpp
@@ -0,0 +1,306 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_REPETITION_FOR_HPP
+# define BOOST_PREPROCESSOR_REPETITION_FOR_HPP
+#
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/debug/error.hpp>
+# include <boost/preprocessor/detail/auto_rec.hpp>
+#
+# /* BOOST_PP_FOR */
+#
+# if 0
+# define BOOST_PP_FOR(state, pred, op, macro)
+# endif
+#
+# define BOOST_PP_FOR BOOST_PP_CAT(BOOST_PP_FOR_, BOOST_PP_AUTO_REC(BOOST_PP_FOR_P, 256))
+#
+# define BOOST_PP_FOR_P(n) BOOST_PP_CAT(BOOST_PP_FOR_CHECK_, BOOST_PP_FOR_ ## n(1, BOOST_PP_FOR_SR_P, BOOST_PP_FOR_SR_O, BOOST_PP_FOR_SR_M))
+#
+# define BOOST_PP_FOR_SR_P(r, s) s
+# define BOOST_PP_FOR_SR_O(r, s) 0
+# define BOOST_PP_FOR_SR_M(r, s) BOOST_PP_NIL
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# include <boost/preprocessor/repetition/detail/edg/for.hpp>
+# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()
+# include <boost/preprocessor/repetition/detail/msvc/for.hpp>
+# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_DMC()
+# include <boost/preprocessor/repetition/detail/dmc/for.hpp>
+# else
+# include <boost/preprocessor/repetition/detail/for.hpp>
+# endif
+#
+# define BOOST_PP_FOR_257(s, p, o, m) BOOST_PP_ERROR(0x0002)
+#
+# define BOOST_PP_FOR_CHECK_BOOST_PP_NIL 1
+#
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_1(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_2(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_3(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_4(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_5(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_6(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_7(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_8(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_9(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_10(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_11(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_12(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_13(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_14(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_15(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_16(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_17(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_18(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_19(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_20(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_21(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_22(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_23(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_24(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_25(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_26(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_27(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_28(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_29(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_30(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_31(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_32(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_33(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_34(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_35(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_36(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_37(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_38(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_39(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_40(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_41(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_42(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_43(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_44(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_45(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_46(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_47(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_48(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_49(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_50(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_51(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_52(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_53(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_54(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_55(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_56(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_57(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_58(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_59(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_60(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_61(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_62(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_63(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_64(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_65(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_66(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_67(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_68(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_69(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_70(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_71(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_72(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_73(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_74(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_75(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_76(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_77(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_78(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_79(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_80(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_81(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_82(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_83(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_84(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_85(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_86(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_87(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_88(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_89(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_90(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_91(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_92(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_93(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_94(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_95(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_96(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_97(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_98(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_99(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_100(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_101(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_102(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_103(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_104(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_105(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_106(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_107(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_108(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_109(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_110(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_111(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_112(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_113(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_114(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_115(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_116(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_117(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_118(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_119(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_120(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_121(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_122(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_123(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_124(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_125(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_126(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_127(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_128(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_129(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_130(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_131(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_132(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_133(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_134(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_135(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_136(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_137(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_138(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_139(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_140(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_141(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_142(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_143(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_144(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_145(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_146(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_147(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_148(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_149(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_150(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_151(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_152(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_153(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_154(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_155(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_156(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_157(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_158(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_159(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_160(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_161(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_162(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_163(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_164(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_165(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_166(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_167(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_168(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_169(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_170(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_171(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_172(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_173(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_174(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_175(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_176(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_177(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_178(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_179(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_180(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_181(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_182(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_183(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_184(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_185(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_186(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_187(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_188(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_189(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_190(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_191(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_192(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_193(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_194(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_195(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_196(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_197(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_198(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_199(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_200(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_201(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_202(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_203(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_204(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_205(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_206(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_207(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_208(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_209(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_210(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_211(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_212(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_213(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_214(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_215(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_216(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_217(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_218(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_219(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_220(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_221(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_222(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_223(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_224(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_225(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_226(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_227(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_228(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_229(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_230(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_231(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_232(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_233(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_234(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_235(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_236(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_237(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_238(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_239(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_240(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_241(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_242(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_243(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_244(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_245(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_246(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_247(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_248(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_249(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_250(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_251(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_252(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_253(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_254(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_255(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_256(s, p, o, m) 0
+#
+# endif
diff --git a/boost/boost/preprocessor/repetition/repeat.hpp b/boost/boost/preprocessor/repetition/repeat.hpp
new file mode 100644
index 00000000000..0172738e0c6
--- /dev/null
+++ b/boost/boost/preprocessor/repetition/repeat.hpp
@@ -0,0 +1,825 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_REPETITION_REPEAT_HPP
+# define BOOST_PREPROCESSOR_REPETITION_REPEAT_HPP
+#
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/debug/error.hpp>
+# include <boost/preprocessor/detail/auto_rec.hpp>
+# include <boost/preprocessor/tuple/eat.hpp>
+#
+# /* BOOST_PP_REPEAT */
+#
+# if 0
+# define BOOST_PP_REPEAT(count, macro, data)
+# endif
+#
+# define BOOST_PP_REPEAT BOOST_PP_CAT(BOOST_PP_REPEAT_, BOOST_PP_AUTO_REC(BOOST_PP_REPEAT_P, 4))
+#
+# define BOOST_PP_REPEAT_P(n) BOOST_PP_CAT(BOOST_PP_REPEAT_CHECK_, BOOST_PP_REPEAT_ ## n(1, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3, BOOST_PP_NIL))
+#
+# define BOOST_PP_REPEAT_CHECK_BOOST_PP_NIL 1
+# define BOOST_PP_REPEAT_CHECK_BOOST_PP_REPEAT_1(c, m, d) 0
+# define BOOST_PP_REPEAT_CHECK_BOOST_PP_REPEAT_2(c, m, d) 0
+# define BOOST_PP_REPEAT_CHECK_BOOST_PP_REPEAT_3(c, m, d) 0
+#
+# define BOOST_PP_REPEAT_1(c, m, d) BOOST_PP_REPEAT_1_I(c, m, d)
+# define BOOST_PP_REPEAT_2(c, m, d) BOOST_PP_REPEAT_2_I(c, m, d)
+# define BOOST_PP_REPEAT_3(c, m, d) BOOST_PP_REPEAT_3_I(c, m, d)
+# define BOOST_PP_REPEAT_4(c, m, d) BOOST_PP_ERROR(0x0003)
+#
+# define BOOST_PP_REPEAT_1_I(c, m, d) BOOST_PP_REPEAT_1_ ## c(m, d)
+# define BOOST_PP_REPEAT_2_I(c, m, d) BOOST_PP_REPEAT_2_ ## c(m, d)
+# define BOOST_PP_REPEAT_3_I(c, m, d) BOOST_PP_REPEAT_3_ ## c(m, d)
+#
+# define BOOST_PP_REPEAT_1ST BOOST_PP_REPEAT_1
+# define BOOST_PP_REPEAT_2ND BOOST_PP_REPEAT_2
+# define BOOST_PP_REPEAT_3RD BOOST_PP_REPEAT_3
+#
+# define BOOST_PP_REPEAT_1_0(m, d)
+# define BOOST_PP_REPEAT_1_1(m, d) m(2, 0, d)
+# define BOOST_PP_REPEAT_1_2(m, d) BOOST_PP_REPEAT_1_1(m, d) m(2, 1, d)
+# define BOOST_PP_REPEAT_1_3(m, d) BOOST_PP_REPEAT_1_2(m, d) m(2, 2, d)
+# define BOOST_PP_REPEAT_1_4(m, d) BOOST_PP_REPEAT_1_3(m, d) m(2, 3, d)
+# define BOOST_PP_REPEAT_1_5(m, d) BOOST_PP_REPEAT_1_4(m, d) m(2, 4, d)
+# define BOOST_PP_REPEAT_1_6(m, d) BOOST_PP_REPEAT_1_5(m, d) m(2, 5, d)
+# define BOOST_PP_REPEAT_1_7(m, d) BOOST_PP_REPEAT_1_6(m, d) m(2, 6, d)
+# define BOOST_PP_REPEAT_1_8(m, d) BOOST_PP_REPEAT_1_7(m, d) m(2, 7, d)
+# define BOOST_PP_REPEAT_1_9(m, d) BOOST_PP_REPEAT_1_8(m, d) m(2, 8, d)
+# define BOOST_PP_REPEAT_1_10(m, d) BOOST_PP_REPEAT_1_9(m, d) m(2, 9, d)
+# define BOOST_PP_REPEAT_1_11(m, d) BOOST_PP_REPEAT_1_10(m, d) m(2, 10, d)
+# define BOOST_PP_REPEAT_1_12(m, d) BOOST_PP_REPEAT_1_11(m, d) m(2, 11, d)
+# define BOOST_PP_REPEAT_1_13(m, d) BOOST_PP_REPEAT_1_12(m, d) m(2, 12, d)
+# define BOOST_PP_REPEAT_1_14(m, d) BOOST_PP_REPEAT_1_13(m, d) m(2, 13, d)
+# define BOOST_PP_REPEAT_1_15(m, d) BOOST_PP_REPEAT_1_14(m, d) m(2, 14, d)
+# define BOOST_PP_REPEAT_1_16(m, d) BOOST_PP_REPEAT_1_15(m, d) m(2, 15, d)
+# define BOOST_PP_REPEAT_1_17(m, d) BOOST_PP_REPEAT_1_16(m, d) m(2, 16, d)
+# define BOOST_PP_REPEAT_1_18(m, d) BOOST_PP_REPEAT_1_17(m, d) m(2, 17, d)
+# define BOOST_PP_REPEAT_1_19(m, d) BOOST_PP_REPEAT_1_18(m, d) m(2, 18, d)
+# define BOOST_PP_REPEAT_1_20(m, d) BOOST_PP_REPEAT_1_19(m, d) m(2, 19, d)
+# define BOOST_PP_REPEAT_1_21(m, d) BOOST_PP_REPEAT_1_20(m, d) m(2, 20, d)
+# define BOOST_PP_REPEAT_1_22(m, d) BOOST_PP_REPEAT_1_21(m, d) m(2, 21, d)
+# define BOOST_PP_REPEAT_1_23(m, d) BOOST_PP_REPEAT_1_22(m, d) m(2, 22, d)
+# define BOOST_PP_REPEAT_1_24(m, d) BOOST_PP_REPEAT_1_23(m, d) m(2, 23, d)
+# define BOOST_PP_REPEAT_1_25(m, d) BOOST_PP_REPEAT_1_24(m, d) m(2, 24, d)
+# define BOOST_PP_REPEAT_1_26(m, d) BOOST_PP_REPEAT_1_25(m, d) m(2, 25, d)
+# define BOOST_PP_REPEAT_1_27(m, d) BOOST_PP_REPEAT_1_26(m, d) m(2, 26, d)
+# define BOOST_PP_REPEAT_1_28(m, d) BOOST_PP_REPEAT_1_27(m, d) m(2, 27, d)
+# define BOOST_PP_REPEAT_1_29(m, d) BOOST_PP_REPEAT_1_28(m, d) m(2, 28, d)
+# define BOOST_PP_REPEAT_1_30(m, d) BOOST_PP_REPEAT_1_29(m, d) m(2, 29, d)
+# define BOOST_PP_REPEAT_1_31(m, d) BOOST_PP_REPEAT_1_30(m, d) m(2, 30, d)
+# define BOOST_PP_REPEAT_1_32(m, d) BOOST_PP_REPEAT_1_31(m, d) m(2, 31, d)
+# define BOOST_PP_REPEAT_1_33(m, d) BOOST_PP_REPEAT_1_32(m, d) m(2, 32, d)
+# define BOOST_PP_REPEAT_1_34(m, d) BOOST_PP_REPEAT_1_33(m, d) m(2, 33, d)
+# define BOOST_PP_REPEAT_1_35(m, d) BOOST_PP_REPEAT_1_34(m, d) m(2, 34, d)
+# define BOOST_PP_REPEAT_1_36(m, d) BOOST_PP_REPEAT_1_35(m, d) m(2, 35, d)
+# define BOOST_PP_REPEAT_1_37(m, d) BOOST_PP_REPEAT_1_36(m, d) m(2, 36, d)
+# define BOOST_PP_REPEAT_1_38(m, d) BOOST_PP_REPEAT_1_37(m, d) m(2, 37, d)
+# define BOOST_PP_REPEAT_1_39(m, d) BOOST_PP_REPEAT_1_38(m, d) m(2, 38, d)
+# define BOOST_PP_REPEAT_1_40(m, d) BOOST_PP_REPEAT_1_39(m, d) m(2, 39, d)
+# define BOOST_PP_REPEAT_1_41(m, d) BOOST_PP_REPEAT_1_40(m, d) m(2, 40, d)
+# define BOOST_PP_REPEAT_1_42(m, d) BOOST_PP_REPEAT_1_41(m, d) m(2, 41, d)
+# define BOOST_PP_REPEAT_1_43(m, d) BOOST_PP_REPEAT_1_42(m, d) m(2, 42, d)
+# define BOOST_PP_REPEAT_1_44(m, d) BOOST_PP_REPEAT_1_43(m, d) m(2, 43, d)
+# define BOOST_PP_REPEAT_1_45(m, d) BOOST_PP_REPEAT_1_44(m, d) m(2, 44, d)
+# define BOOST_PP_REPEAT_1_46(m, d) BOOST_PP_REPEAT_1_45(m, d) m(2, 45, d)
+# define BOOST_PP_REPEAT_1_47(m, d) BOOST_PP_REPEAT_1_46(m, d) m(2, 46, d)
+# define BOOST_PP_REPEAT_1_48(m, d) BOOST_PP_REPEAT_1_47(m, d) m(2, 47, d)
+# define BOOST_PP_REPEAT_1_49(m, d) BOOST_PP_REPEAT_1_48(m, d) m(2, 48, d)
+# define BOOST_PP_REPEAT_1_50(m, d) BOOST_PP_REPEAT_1_49(m, d) m(2, 49, d)
+# define BOOST_PP_REPEAT_1_51(m, d) BOOST_PP_REPEAT_1_50(m, d) m(2, 50, d)
+# define BOOST_PP_REPEAT_1_52(m, d) BOOST_PP_REPEAT_1_51(m, d) m(2, 51, d)
+# define BOOST_PP_REPEAT_1_53(m, d) BOOST_PP_REPEAT_1_52(m, d) m(2, 52, d)
+# define BOOST_PP_REPEAT_1_54(m, d) BOOST_PP_REPEAT_1_53(m, d) m(2, 53, d)
+# define BOOST_PP_REPEAT_1_55(m, d) BOOST_PP_REPEAT_1_54(m, d) m(2, 54, d)
+# define BOOST_PP_REPEAT_1_56(m, d) BOOST_PP_REPEAT_1_55(m, d) m(2, 55, d)
+# define BOOST_PP_REPEAT_1_57(m, d) BOOST_PP_REPEAT_1_56(m, d) m(2, 56, d)
+# define BOOST_PP_REPEAT_1_58(m, d) BOOST_PP_REPEAT_1_57(m, d) m(2, 57, d)
+# define BOOST_PP_REPEAT_1_59(m, d) BOOST_PP_REPEAT_1_58(m, d) m(2, 58, d)
+# define BOOST_PP_REPEAT_1_60(m, d) BOOST_PP_REPEAT_1_59(m, d) m(2, 59, d)
+# define BOOST_PP_REPEAT_1_61(m, d) BOOST_PP_REPEAT_1_60(m, d) m(2, 60, d)
+# define BOOST_PP_REPEAT_1_62(m, d) BOOST_PP_REPEAT_1_61(m, d) m(2, 61, d)
+# define BOOST_PP_REPEAT_1_63(m, d) BOOST_PP_REPEAT_1_62(m, d) m(2, 62, d)
+# define BOOST_PP_REPEAT_1_64(m, d) BOOST_PP_REPEAT_1_63(m, d) m(2, 63, d)
+# define BOOST_PP_REPEAT_1_65(m, d) BOOST_PP_REPEAT_1_64(m, d) m(2, 64, d)
+# define BOOST_PP_REPEAT_1_66(m, d) BOOST_PP_REPEAT_1_65(m, d) m(2, 65, d)
+# define BOOST_PP_REPEAT_1_67(m, d) BOOST_PP_REPEAT_1_66(m, d) m(2, 66, d)
+# define BOOST_PP_REPEAT_1_68(m, d) BOOST_PP_REPEAT_1_67(m, d) m(2, 67, d)
+# define BOOST_PP_REPEAT_1_69(m, d) BOOST_PP_REPEAT_1_68(m, d) m(2, 68, d)
+# define BOOST_PP_REPEAT_1_70(m, d) BOOST_PP_REPEAT_1_69(m, d) m(2, 69, d)
+# define BOOST_PP_REPEAT_1_71(m, d) BOOST_PP_REPEAT_1_70(m, d) m(2, 70, d)
+# define BOOST_PP_REPEAT_1_72(m, d) BOOST_PP_REPEAT_1_71(m, d) m(2, 71, d)
+# define BOOST_PP_REPEAT_1_73(m, d) BOOST_PP_REPEAT_1_72(m, d) m(2, 72, d)
+# define BOOST_PP_REPEAT_1_74(m, d) BOOST_PP_REPEAT_1_73(m, d) m(2, 73, d)
+# define BOOST_PP_REPEAT_1_75(m, d) BOOST_PP_REPEAT_1_74(m, d) m(2, 74, d)
+# define BOOST_PP_REPEAT_1_76(m, d) BOOST_PP_REPEAT_1_75(m, d) m(2, 75, d)
+# define BOOST_PP_REPEAT_1_77(m, d) BOOST_PP_REPEAT_1_76(m, d) m(2, 76, d)
+# define BOOST_PP_REPEAT_1_78(m, d) BOOST_PP_REPEAT_1_77(m, d) m(2, 77, d)
+# define BOOST_PP_REPEAT_1_79(m, d) BOOST_PP_REPEAT_1_78(m, d) m(2, 78, d)
+# define BOOST_PP_REPEAT_1_80(m, d) BOOST_PP_REPEAT_1_79(m, d) m(2, 79, d)
+# define BOOST_PP_REPEAT_1_81(m, d) BOOST_PP_REPEAT_1_80(m, d) m(2, 80, d)
+# define BOOST_PP_REPEAT_1_82(m, d) BOOST_PP_REPEAT_1_81(m, d) m(2, 81, d)
+# define BOOST_PP_REPEAT_1_83(m, d) BOOST_PP_REPEAT_1_82(m, d) m(2, 82, d)
+# define BOOST_PP_REPEAT_1_84(m, d) BOOST_PP_REPEAT_1_83(m, d) m(2, 83, d)
+# define BOOST_PP_REPEAT_1_85(m, d) BOOST_PP_REPEAT_1_84(m, d) m(2, 84, d)
+# define BOOST_PP_REPEAT_1_86(m, d) BOOST_PP_REPEAT_1_85(m, d) m(2, 85, d)
+# define BOOST_PP_REPEAT_1_87(m, d) BOOST_PP_REPEAT_1_86(m, d) m(2, 86, d)
+# define BOOST_PP_REPEAT_1_88(m, d) BOOST_PP_REPEAT_1_87(m, d) m(2, 87, d)
+# define BOOST_PP_REPEAT_1_89(m, d) BOOST_PP_REPEAT_1_88(m, d) m(2, 88, d)
+# define BOOST_PP_REPEAT_1_90(m, d) BOOST_PP_REPEAT_1_89(m, d) m(2, 89, d)
+# define BOOST_PP_REPEAT_1_91(m, d) BOOST_PP_REPEAT_1_90(m, d) m(2, 90, d)
+# define BOOST_PP_REPEAT_1_92(m, d) BOOST_PP_REPEAT_1_91(m, d) m(2, 91, d)
+# define BOOST_PP_REPEAT_1_93(m, d) BOOST_PP_REPEAT_1_92(m, d) m(2, 92, d)
+# define BOOST_PP_REPEAT_1_94(m, d) BOOST_PP_REPEAT_1_93(m, d) m(2, 93, d)
+# define BOOST_PP_REPEAT_1_95(m, d) BOOST_PP_REPEAT_1_94(m, d) m(2, 94, d)
+# define BOOST_PP_REPEAT_1_96(m, d) BOOST_PP_REPEAT_1_95(m, d) m(2, 95, d)
+# define BOOST_PP_REPEAT_1_97(m, d) BOOST_PP_REPEAT_1_96(m, d) m(2, 96, d)
+# define BOOST_PP_REPEAT_1_98(m, d) BOOST_PP_REPEAT_1_97(m, d) m(2, 97, d)
+# define BOOST_PP_REPEAT_1_99(m, d) BOOST_PP_REPEAT_1_98(m, d) m(2, 98, d)
+# define BOOST_PP_REPEAT_1_100(m, d) BOOST_PP_REPEAT_1_99(m, d) m(2, 99, d)
+# define BOOST_PP_REPEAT_1_101(m, d) BOOST_PP_REPEAT_1_100(m, d) m(2, 100, d)
+# define BOOST_PP_REPEAT_1_102(m, d) BOOST_PP_REPEAT_1_101(m, d) m(2, 101, d)
+# define BOOST_PP_REPEAT_1_103(m, d) BOOST_PP_REPEAT_1_102(m, d) m(2, 102, d)
+# define BOOST_PP_REPEAT_1_104(m, d) BOOST_PP_REPEAT_1_103(m, d) m(2, 103, d)
+# define BOOST_PP_REPEAT_1_105(m, d) BOOST_PP_REPEAT_1_104(m, d) m(2, 104, d)
+# define BOOST_PP_REPEAT_1_106(m, d) BOOST_PP_REPEAT_1_105(m, d) m(2, 105, d)
+# define BOOST_PP_REPEAT_1_107(m, d) BOOST_PP_REPEAT_1_106(m, d) m(2, 106, d)
+# define BOOST_PP_REPEAT_1_108(m, d) BOOST_PP_REPEAT_1_107(m, d) m(2, 107, d)
+# define BOOST_PP_REPEAT_1_109(m, d) BOOST_PP_REPEAT_1_108(m, d) m(2, 108, d)
+# define BOOST_PP_REPEAT_1_110(m, d) BOOST_PP_REPEAT_1_109(m, d) m(2, 109, d)
+# define BOOST_PP_REPEAT_1_111(m, d) BOOST_PP_REPEAT_1_110(m, d) m(2, 110, d)
+# define BOOST_PP_REPEAT_1_112(m, d) BOOST_PP_REPEAT_1_111(m, d) m(2, 111, d)
+# define BOOST_PP_REPEAT_1_113(m, d) BOOST_PP_REPEAT_1_112(m, d) m(2, 112, d)
+# define BOOST_PP_REPEAT_1_114(m, d) BOOST_PP_REPEAT_1_113(m, d) m(2, 113, d)
+# define BOOST_PP_REPEAT_1_115(m, d) BOOST_PP_REPEAT_1_114(m, d) m(2, 114, d)
+# define BOOST_PP_REPEAT_1_116(m, d) BOOST_PP_REPEAT_1_115(m, d) m(2, 115, d)
+# define BOOST_PP_REPEAT_1_117(m, d) BOOST_PP_REPEAT_1_116(m, d) m(2, 116, d)
+# define BOOST_PP_REPEAT_1_118(m, d) BOOST_PP_REPEAT_1_117(m, d) m(2, 117, d)
+# define BOOST_PP_REPEAT_1_119(m, d) BOOST_PP_REPEAT_1_118(m, d) m(2, 118, d)
+# define BOOST_PP_REPEAT_1_120(m, d) BOOST_PP_REPEAT_1_119(m, d) m(2, 119, d)
+# define BOOST_PP_REPEAT_1_121(m, d) BOOST_PP_REPEAT_1_120(m, d) m(2, 120, d)
+# define BOOST_PP_REPEAT_1_122(m, d) BOOST_PP_REPEAT_1_121(m, d) m(2, 121, d)
+# define BOOST_PP_REPEAT_1_123(m, d) BOOST_PP_REPEAT_1_122(m, d) m(2, 122, d)
+# define BOOST_PP_REPEAT_1_124(m, d) BOOST_PP_REPEAT_1_123(m, d) m(2, 123, d)
+# define BOOST_PP_REPEAT_1_125(m, d) BOOST_PP_REPEAT_1_124(m, d) m(2, 124, d)
+# define BOOST_PP_REPEAT_1_126(m, d) BOOST_PP_REPEAT_1_125(m, d) m(2, 125, d)
+# define BOOST_PP_REPEAT_1_127(m, d) BOOST_PP_REPEAT_1_126(m, d) m(2, 126, d)
+# define BOOST_PP_REPEAT_1_128(m, d) BOOST_PP_REPEAT_1_127(m, d) m(2, 127, d)
+# define BOOST_PP_REPEAT_1_129(m, d) BOOST_PP_REPEAT_1_128(m, d) m(2, 128, d)
+# define BOOST_PP_REPEAT_1_130(m, d) BOOST_PP_REPEAT_1_129(m, d) m(2, 129, d)
+# define BOOST_PP_REPEAT_1_131(m, d) BOOST_PP_REPEAT_1_130(m, d) m(2, 130, d)
+# define BOOST_PP_REPEAT_1_132(m, d) BOOST_PP_REPEAT_1_131(m, d) m(2, 131, d)
+# define BOOST_PP_REPEAT_1_133(m, d) BOOST_PP_REPEAT_1_132(m, d) m(2, 132, d)
+# define BOOST_PP_REPEAT_1_134(m, d) BOOST_PP_REPEAT_1_133(m, d) m(2, 133, d)
+# define BOOST_PP_REPEAT_1_135(m, d) BOOST_PP_REPEAT_1_134(m, d) m(2, 134, d)
+# define BOOST_PP_REPEAT_1_136(m, d) BOOST_PP_REPEAT_1_135(m, d) m(2, 135, d)
+# define BOOST_PP_REPEAT_1_137(m, d) BOOST_PP_REPEAT_1_136(m, d) m(2, 136, d)
+# define BOOST_PP_REPEAT_1_138(m, d) BOOST_PP_REPEAT_1_137(m, d) m(2, 137, d)
+# define BOOST_PP_REPEAT_1_139(m, d) BOOST_PP_REPEAT_1_138(m, d) m(2, 138, d)
+# define BOOST_PP_REPEAT_1_140(m, d) BOOST_PP_REPEAT_1_139(m, d) m(2, 139, d)
+# define BOOST_PP_REPEAT_1_141(m, d) BOOST_PP_REPEAT_1_140(m, d) m(2, 140, d)
+# define BOOST_PP_REPEAT_1_142(m, d) BOOST_PP_REPEAT_1_141(m, d) m(2, 141, d)
+# define BOOST_PP_REPEAT_1_143(m, d) BOOST_PP_REPEAT_1_142(m, d) m(2, 142, d)
+# define BOOST_PP_REPEAT_1_144(m, d) BOOST_PP_REPEAT_1_143(m, d) m(2, 143, d)
+# define BOOST_PP_REPEAT_1_145(m, d) BOOST_PP_REPEAT_1_144(m, d) m(2, 144, d)
+# define BOOST_PP_REPEAT_1_146(m, d) BOOST_PP_REPEAT_1_145(m, d) m(2, 145, d)
+# define BOOST_PP_REPEAT_1_147(m, d) BOOST_PP_REPEAT_1_146(m, d) m(2, 146, d)
+# define BOOST_PP_REPEAT_1_148(m, d) BOOST_PP_REPEAT_1_147(m, d) m(2, 147, d)
+# define BOOST_PP_REPEAT_1_149(m, d) BOOST_PP_REPEAT_1_148(m, d) m(2, 148, d)
+# define BOOST_PP_REPEAT_1_150(m, d) BOOST_PP_REPEAT_1_149(m, d) m(2, 149, d)
+# define BOOST_PP_REPEAT_1_151(m, d) BOOST_PP_REPEAT_1_150(m, d) m(2, 150, d)
+# define BOOST_PP_REPEAT_1_152(m, d) BOOST_PP_REPEAT_1_151(m, d) m(2, 151, d)
+# define BOOST_PP_REPEAT_1_153(m, d) BOOST_PP_REPEAT_1_152(m, d) m(2, 152, d)
+# define BOOST_PP_REPEAT_1_154(m, d) BOOST_PP_REPEAT_1_153(m, d) m(2, 153, d)
+# define BOOST_PP_REPEAT_1_155(m, d) BOOST_PP_REPEAT_1_154(m, d) m(2, 154, d)
+# define BOOST_PP_REPEAT_1_156(m, d) BOOST_PP_REPEAT_1_155(m, d) m(2, 155, d)
+# define BOOST_PP_REPEAT_1_157(m, d) BOOST_PP_REPEAT_1_156(m, d) m(2, 156, d)
+# define BOOST_PP_REPEAT_1_158(m, d) BOOST_PP_REPEAT_1_157(m, d) m(2, 157, d)
+# define BOOST_PP_REPEAT_1_159(m, d) BOOST_PP_REPEAT_1_158(m, d) m(2, 158, d)
+# define BOOST_PP_REPEAT_1_160(m, d) BOOST_PP_REPEAT_1_159(m, d) m(2, 159, d)
+# define BOOST_PP_REPEAT_1_161(m, d) BOOST_PP_REPEAT_1_160(m, d) m(2, 160, d)
+# define BOOST_PP_REPEAT_1_162(m, d) BOOST_PP_REPEAT_1_161(m, d) m(2, 161, d)
+# define BOOST_PP_REPEAT_1_163(m, d) BOOST_PP_REPEAT_1_162(m, d) m(2, 162, d)
+# define BOOST_PP_REPEAT_1_164(m, d) BOOST_PP_REPEAT_1_163(m, d) m(2, 163, d)
+# define BOOST_PP_REPEAT_1_165(m, d) BOOST_PP_REPEAT_1_164(m, d) m(2, 164, d)
+# define BOOST_PP_REPEAT_1_166(m, d) BOOST_PP_REPEAT_1_165(m, d) m(2, 165, d)
+# define BOOST_PP_REPEAT_1_167(m, d) BOOST_PP_REPEAT_1_166(m, d) m(2, 166, d)
+# define BOOST_PP_REPEAT_1_168(m, d) BOOST_PP_REPEAT_1_167(m, d) m(2, 167, d)
+# define BOOST_PP_REPEAT_1_169(m, d) BOOST_PP_REPEAT_1_168(m, d) m(2, 168, d)
+# define BOOST_PP_REPEAT_1_170(m, d) BOOST_PP_REPEAT_1_169(m, d) m(2, 169, d)
+# define BOOST_PP_REPEAT_1_171(m, d) BOOST_PP_REPEAT_1_170(m, d) m(2, 170, d)
+# define BOOST_PP_REPEAT_1_172(m, d) BOOST_PP_REPEAT_1_171(m, d) m(2, 171, d)
+# define BOOST_PP_REPEAT_1_173(m, d) BOOST_PP_REPEAT_1_172(m, d) m(2, 172, d)
+# define BOOST_PP_REPEAT_1_174(m, d) BOOST_PP_REPEAT_1_173(m, d) m(2, 173, d)
+# define BOOST_PP_REPEAT_1_175(m, d) BOOST_PP_REPEAT_1_174(m, d) m(2, 174, d)
+# define BOOST_PP_REPEAT_1_176(m, d) BOOST_PP_REPEAT_1_175(m, d) m(2, 175, d)
+# define BOOST_PP_REPEAT_1_177(m, d) BOOST_PP_REPEAT_1_176(m, d) m(2, 176, d)
+# define BOOST_PP_REPEAT_1_178(m, d) BOOST_PP_REPEAT_1_177(m, d) m(2, 177, d)
+# define BOOST_PP_REPEAT_1_179(m, d) BOOST_PP_REPEAT_1_178(m, d) m(2, 178, d)
+# define BOOST_PP_REPEAT_1_180(m, d) BOOST_PP_REPEAT_1_179(m, d) m(2, 179, d)
+# define BOOST_PP_REPEAT_1_181(m, d) BOOST_PP_REPEAT_1_180(m, d) m(2, 180, d)
+# define BOOST_PP_REPEAT_1_182(m, d) BOOST_PP_REPEAT_1_181(m, d) m(2, 181, d)
+# define BOOST_PP_REPEAT_1_183(m, d) BOOST_PP_REPEAT_1_182(m, d) m(2, 182, d)
+# define BOOST_PP_REPEAT_1_184(m, d) BOOST_PP_REPEAT_1_183(m, d) m(2, 183, d)
+# define BOOST_PP_REPEAT_1_185(m, d) BOOST_PP_REPEAT_1_184(m, d) m(2, 184, d)
+# define BOOST_PP_REPEAT_1_186(m, d) BOOST_PP_REPEAT_1_185(m, d) m(2, 185, d)
+# define BOOST_PP_REPEAT_1_187(m, d) BOOST_PP_REPEAT_1_186(m, d) m(2, 186, d)
+# define BOOST_PP_REPEAT_1_188(m, d) BOOST_PP_REPEAT_1_187(m, d) m(2, 187, d)
+# define BOOST_PP_REPEAT_1_189(m, d) BOOST_PP_REPEAT_1_188(m, d) m(2, 188, d)
+# define BOOST_PP_REPEAT_1_190(m, d) BOOST_PP_REPEAT_1_189(m, d) m(2, 189, d)
+# define BOOST_PP_REPEAT_1_191(m, d) BOOST_PP_REPEAT_1_190(m, d) m(2, 190, d)
+# define BOOST_PP_REPEAT_1_192(m, d) BOOST_PP_REPEAT_1_191(m, d) m(2, 191, d)
+# define BOOST_PP_REPEAT_1_193(m, d) BOOST_PP_REPEAT_1_192(m, d) m(2, 192, d)
+# define BOOST_PP_REPEAT_1_194(m, d) BOOST_PP_REPEAT_1_193(m, d) m(2, 193, d)
+# define BOOST_PP_REPEAT_1_195(m, d) BOOST_PP_REPEAT_1_194(m, d) m(2, 194, d)
+# define BOOST_PP_REPEAT_1_196(m, d) BOOST_PP_REPEAT_1_195(m, d) m(2, 195, d)
+# define BOOST_PP_REPEAT_1_197(m, d) BOOST_PP_REPEAT_1_196(m, d) m(2, 196, d)
+# define BOOST_PP_REPEAT_1_198(m, d) BOOST_PP_REPEAT_1_197(m, d) m(2, 197, d)
+# define BOOST_PP_REPEAT_1_199(m, d) BOOST_PP_REPEAT_1_198(m, d) m(2, 198, d)
+# define BOOST_PP_REPEAT_1_200(m, d) BOOST_PP_REPEAT_1_199(m, d) m(2, 199, d)
+# define BOOST_PP_REPEAT_1_201(m, d) BOOST_PP_REPEAT_1_200(m, d) m(2, 200, d)
+# define BOOST_PP_REPEAT_1_202(m, d) BOOST_PP_REPEAT_1_201(m, d) m(2, 201, d)
+# define BOOST_PP_REPEAT_1_203(m, d) BOOST_PP_REPEAT_1_202(m, d) m(2, 202, d)
+# define BOOST_PP_REPEAT_1_204(m, d) BOOST_PP_REPEAT_1_203(m, d) m(2, 203, d)
+# define BOOST_PP_REPEAT_1_205(m, d) BOOST_PP_REPEAT_1_204(m, d) m(2, 204, d)
+# define BOOST_PP_REPEAT_1_206(m, d) BOOST_PP_REPEAT_1_205(m, d) m(2, 205, d)
+# define BOOST_PP_REPEAT_1_207(m, d) BOOST_PP_REPEAT_1_206(m, d) m(2, 206, d)
+# define BOOST_PP_REPEAT_1_208(m, d) BOOST_PP_REPEAT_1_207(m, d) m(2, 207, d)
+# define BOOST_PP_REPEAT_1_209(m, d) BOOST_PP_REPEAT_1_208(m, d) m(2, 208, d)
+# define BOOST_PP_REPEAT_1_210(m, d) BOOST_PP_REPEAT_1_209(m, d) m(2, 209, d)
+# define BOOST_PP_REPEAT_1_211(m, d) BOOST_PP_REPEAT_1_210(m, d) m(2, 210, d)
+# define BOOST_PP_REPEAT_1_212(m, d) BOOST_PP_REPEAT_1_211(m, d) m(2, 211, d)
+# define BOOST_PP_REPEAT_1_213(m, d) BOOST_PP_REPEAT_1_212(m, d) m(2, 212, d)
+# define BOOST_PP_REPEAT_1_214(m, d) BOOST_PP_REPEAT_1_213(m, d) m(2, 213, d)
+# define BOOST_PP_REPEAT_1_215(m, d) BOOST_PP_REPEAT_1_214(m, d) m(2, 214, d)
+# define BOOST_PP_REPEAT_1_216(m, d) BOOST_PP_REPEAT_1_215(m, d) m(2, 215, d)
+# define BOOST_PP_REPEAT_1_217(m, d) BOOST_PP_REPEAT_1_216(m, d) m(2, 216, d)
+# define BOOST_PP_REPEAT_1_218(m, d) BOOST_PP_REPEAT_1_217(m, d) m(2, 217, d)
+# define BOOST_PP_REPEAT_1_219(m, d) BOOST_PP_REPEAT_1_218(m, d) m(2, 218, d)
+# define BOOST_PP_REPEAT_1_220(m, d) BOOST_PP_REPEAT_1_219(m, d) m(2, 219, d)
+# define BOOST_PP_REPEAT_1_221(m, d) BOOST_PP_REPEAT_1_220(m, d) m(2, 220, d)
+# define BOOST_PP_REPEAT_1_222(m, d) BOOST_PP_REPEAT_1_221(m, d) m(2, 221, d)
+# define BOOST_PP_REPEAT_1_223(m, d) BOOST_PP_REPEAT_1_222(m, d) m(2, 222, d)
+# define BOOST_PP_REPEAT_1_224(m, d) BOOST_PP_REPEAT_1_223(m, d) m(2, 223, d)
+# define BOOST_PP_REPEAT_1_225(m, d) BOOST_PP_REPEAT_1_224(m, d) m(2, 224, d)
+# define BOOST_PP_REPEAT_1_226(m, d) BOOST_PP_REPEAT_1_225(m, d) m(2, 225, d)
+# define BOOST_PP_REPEAT_1_227(m, d) BOOST_PP_REPEAT_1_226(m, d) m(2, 226, d)
+# define BOOST_PP_REPEAT_1_228(m, d) BOOST_PP_REPEAT_1_227(m, d) m(2, 227, d)
+# define BOOST_PP_REPEAT_1_229(m, d) BOOST_PP_REPEAT_1_228(m, d) m(2, 228, d)
+# define BOOST_PP_REPEAT_1_230(m, d) BOOST_PP_REPEAT_1_229(m, d) m(2, 229, d)
+# define BOOST_PP_REPEAT_1_231(m, d) BOOST_PP_REPEAT_1_230(m, d) m(2, 230, d)
+# define BOOST_PP_REPEAT_1_232(m, d) BOOST_PP_REPEAT_1_231(m, d) m(2, 231, d)
+# define BOOST_PP_REPEAT_1_233(m, d) BOOST_PP_REPEAT_1_232(m, d) m(2, 232, d)
+# define BOOST_PP_REPEAT_1_234(m, d) BOOST_PP_REPEAT_1_233(m, d) m(2, 233, d)
+# define BOOST_PP_REPEAT_1_235(m, d) BOOST_PP_REPEAT_1_234(m, d) m(2, 234, d)
+# define BOOST_PP_REPEAT_1_236(m, d) BOOST_PP_REPEAT_1_235(m, d) m(2, 235, d)
+# define BOOST_PP_REPEAT_1_237(m, d) BOOST_PP_REPEAT_1_236(m, d) m(2, 236, d)
+# define BOOST_PP_REPEAT_1_238(m, d) BOOST_PP_REPEAT_1_237(m, d) m(2, 237, d)
+# define BOOST_PP_REPEAT_1_239(m, d) BOOST_PP_REPEAT_1_238(m, d) m(2, 238, d)
+# define BOOST_PP_REPEAT_1_240(m, d) BOOST_PP_REPEAT_1_239(m, d) m(2, 239, d)
+# define BOOST_PP_REPEAT_1_241(m, d) BOOST_PP_REPEAT_1_240(m, d) m(2, 240, d)
+# define BOOST_PP_REPEAT_1_242(m, d) BOOST_PP_REPEAT_1_241(m, d) m(2, 241, d)
+# define BOOST_PP_REPEAT_1_243(m, d) BOOST_PP_REPEAT_1_242(m, d) m(2, 242, d)
+# define BOOST_PP_REPEAT_1_244(m, d) BOOST_PP_REPEAT_1_243(m, d) m(2, 243, d)
+# define BOOST_PP_REPEAT_1_245(m, d) BOOST_PP_REPEAT_1_244(m, d) m(2, 244, d)
+# define BOOST_PP_REPEAT_1_246(m, d) BOOST_PP_REPEAT_1_245(m, d) m(2, 245, d)
+# define BOOST_PP_REPEAT_1_247(m, d) BOOST_PP_REPEAT_1_246(m, d) m(2, 246, d)
+# define BOOST_PP_REPEAT_1_248(m, d) BOOST_PP_REPEAT_1_247(m, d) m(2, 247, d)
+# define BOOST_PP_REPEAT_1_249(m, d) BOOST_PP_REPEAT_1_248(m, d) m(2, 248, d)
+# define BOOST_PP_REPEAT_1_250(m, d) BOOST_PP_REPEAT_1_249(m, d) m(2, 249, d)
+# define BOOST_PP_REPEAT_1_251(m, d) BOOST_PP_REPEAT_1_250(m, d) m(2, 250, d)
+# define BOOST_PP_REPEAT_1_252(m, d) BOOST_PP_REPEAT_1_251(m, d) m(2, 251, d)
+# define BOOST_PP_REPEAT_1_253(m, d) BOOST_PP_REPEAT_1_252(m, d) m(2, 252, d)
+# define BOOST_PP_REPEAT_1_254(m, d) BOOST_PP_REPEAT_1_253(m, d) m(2, 253, d)
+# define BOOST_PP_REPEAT_1_255(m, d) BOOST_PP_REPEAT_1_254(m, d) m(2, 254, d)
+# define BOOST_PP_REPEAT_1_256(m, d) BOOST_PP_REPEAT_1_255(m, d) m(2, 255, d)
+#
+# define BOOST_PP_REPEAT_2_0(m, d)
+# define BOOST_PP_REPEAT_2_1(m, d) m(3, 0, d)
+# define BOOST_PP_REPEAT_2_2(m, d) BOOST_PP_REPEAT_2_1(m, d) m(3, 1, d)
+# define BOOST_PP_REPEAT_2_3(m, d) BOOST_PP_REPEAT_2_2(m, d) m(3, 2, d)
+# define BOOST_PP_REPEAT_2_4(m, d) BOOST_PP_REPEAT_2_3(m, d) m(3, 3, d)
+# define BOOST_PP_REPEAT_2_5(m, d) BOOST_PP_REPEAT_2_4(m, d) m(3, 4, d)
+# define BOOST_PP_REPEAT_2_6(m, d) BOOST_PP_REPEAT_2_5(m, d) m(3, 5, d)
+# define BOOST_PP_REPEAT_2_7(m, d) BOOST_PP_REPEAT_2_6(m, d) m(3, 6, d)
+# define BOOST_PP_REPEAT_2_8(m, d) BOOST_PP_REPEAT_2_7(m, d) m(3, 7, d)
+# define BOOST_PP_REPEAT_2_9(m, d) BOOST_PP_REPEAT_2_8(m, d) m(3, 8, d)
+# define BOOST_PP_REPEAT_2_10(m, d) BOOST_PP_REPEAT_2_9(m, d) m(3, 9, d)
+# define BOOST_PP_REPEAT_2_11(m, d) BOOST_PP_REPEAT_2_10(m, d) m(3, 10, d)
+# define BOOST_PP_REPEAT_2_12(m, d) BOOST_PP_REPEAT_2_11(m, d) m(3, 11, d)
+# define BOOST_PP_REPEAT_2_13(m, d) BOOST_PP_REPEAT_2_12(m, d) m(3, 12, d)
+# define BOOST_PP_REPEAT_2_14(m, d) BOOST_PP_REPEAT_2_13(m, d) m(3, 13, d)
+# define BOOST_PP_REPEAT_2_15(m, d) BOOST_PP_REPEAT_2_14(m, d) m(3, 14, d)
+# define BOOST_PP_REPEAT_2_16(m, d) BOOST_PP_REPEAT_2_15(m, d) m(3, 15, d)
+# define BOOST_PP_REPEAT_2_17(m, d) BOOST_PP_REPEAT_2_16(m, d) m(3, 16, d)
+# define BOOST_PP_REPEAT_2_18(m, d) BOOST_PP_REPEAT_2_17(m, d) m(3, 17, d)
+# define BOOST_PP_REPEAT_2_19(m, d) BOOST_PP_REPEAT_2_18(m, d) m(3, 18, d)
+# define BOOST_PP_REPEAT_2_20(m, d) BOOST_PP_REPEAT_2_19(m, d) m(3, 19, d)
+# define BOOST_PP_REPEAT_2_21(m, d) BOOST_PP_REPEAT_2_20(m, d) m(3, 20, d)
+# define BOOST_PP_REPEAT_2_22(m, d) BOOST_PP_REPEAT_2_21(m, d) m(3, 21, d)
+# define BOOST_PP_REPEAT_2_23(m, d) BOOST_PP_REPEAT_2_22(m, d) m(3, 22, d)
+# define BOOST_PP_REPEAT_2_24(m, d) BOOST_PP_REPEAT_2_23(m, d) m(3, 23, d)
+# define BOOST_PP_REPEAT_2_25(m, d) BOOST_PP_REPEAT_2_24(m, d) m(3, 24, d)
+# define BOOST_PP_REPEAT_2_26(m, d) BOOST_PP_REPEAT_2_25(m, d) m(3, 25, d)
+# define BOOST_PP_REPEAT_2_27(m, d) BOOST_PP_REPEAT_2_26(m, d) m(3, 26, d)
+# define BOOST_PP_REPEAT_2_28(m, d) BOOST_PP_REPEAT_2_27(m, d) m(3, 27, d)
+# define BOOST_PP_REPEAT_2_29(m, d) BOOST_PP_REPEAT_2_28(m, d) m(3, 28, d)
+# define BOOST_PP_REPEAT_2_30(m, d) BOOST_PP_REPEAT_2_29(m, d) m(3, 29, d)
+# define BOOST_PP_REPEAT_2_31(m, d) BOOST_PP_REPEAT_2_30(m, d) m(3, 30, d)
+# define BOOST_PP_REPEAT_2_32(m, d) BOOST_PP_REPEAT_2_31(m, d) m(3, 31, d)
+# define BOOST_PP_REPEAT_2_33(m, d) BOOST_PP_REPEAT_2_32(m, d) m(3, 32, d)
+# define BOOST_PP_REPEAT_2_34(m, d) BOOST_PP_REPEAT_2_33(m, d) m(3, 33, d)
+# define BOOST_PP_REPEAT_2_35(m, d) BOOST_PP_REPEAT_2_34(m, d) m(3, 34, d)
+# define BOOST_PP_REPEAT_2_36(m, d) BOOST_PP_REPEAT_2_35(m, d) m(3, 35, d)
+# define BOOST_PP_REPEAT_2_37(m, d) BOOST_PP_REPEAT_2_36(m, d) m(3, 36, d)
+# define BOOST_PP_REPEAT_2_38(m, d) BOOST_PP_REPEAT_2_37(m, d) m(3, 37, d)
+# define BOOST_PP_REPEAT_2_39(m, d) BOOST_PP_REPEAT_2_38(m, d) m(3, 38, d)
+# define BOOST_PP_REPEAT_2_40(m, d) BOOST_PP_REPEAT_2_39(m, d) m(3, 39, d)
+# define BOOST_PP_REPEAT_2_41(m, d) BOOST_PP_REPEAT_2_40(m, d) m(3, 40, d)
+# define BOOST_PP_REPEAT_2_42(m, d) BOOST_PP_REPEAT_2_41(m, d) m(3, 41, d)
+# define BOOST_PP_REPEAT_2_43(m, d) BOOST_PP_REPEAT_2_42(m, d) m(3, 42, d)
+# define BOOST_PP_REPEAT_2_44(m, d) BOOST_PP_REPEAT_2_43(m, d) m(3, 43, d)
+# define BOOST_PP_REPEAT_2_45(m, d) BOOST_PP_REPEAT_2_44(m, d) m(3, 44, d)
+# define BOOST_PP_REPEAT_2_46(m, d) BOOST_PP_REPEAT_2_45(m, d) m(3, 45, d)
+# define BOOST_PP_REPEAT_2_47(m, d) BOOST_PP_REPEAT_2_46(m, d) m(3, 46, d)
+# define BOOST_PP_REPEAT_2_48(m, d) BOOST_PP_REPEAT_2_47(m, d) m(3, 47, d)
+# define BOOST_PP_REPEAT_2_49(m, d) BOOST_PP_REPEAT_2_48(m, d) m(3, 48, d)
+# define BOOST_PP_REPEAT_2_50(m, d) BOOST_PP_REPEAT_2_49(m, d) m(3, 49, d)
+# define BOOST_PP_REPEAT_2_51(m, d) BOOST_PP_REPEAT_2_50(m, d) m(3, 50, d)
+# define BOOST_PP_REPEAT_2_52(m, d) BOOST_PP_REPEAT_2_51(m, d) m(3, 51, d)
+# define BOOST_PP_REPEAT_2_53(m, d) BOOST_PP_REPEAT_2_52(m, d) m(3, 52, d)
+# define BOOST_PP_REPEAT_2_54(m, d) BOOST_PP_REPEAT_2_53(m, d) m(3, 53, d)
+# define BOOST_PP_REPEAT_2_55(m, d) BOOST_PP_REPEAT_2_54(m, d) m(3, 54, d)
+# define BOOST_PP_REPEAT_2_56(m, d) BOOST_PP_REPEAT_2_55(m, d) m(3, 55, d)
+# define BOOST_PP_REPEAT_2_57(m, d) BOOST_PP_REPEAT_2_56(m, d) m(3, 56, d)
+# define BOOST_PP_REPEAT_2_58(m, d) BOOST_PP_REPEAT_2_57(m, d) m(3, 57, d)
+# define BOOST_PP_REPEAT_2_59(m, d) BOOST_PP_REPEAT_2_58(m, d) m(3, 58, d)
+# define BOOST_PP_REPEAT_2_60(m, d) BOOST_PP_REPEAT_2_59(m, d) m(3, 59, d)
+# define BOOST_PP_REPEAT_2_61(m, d) BOOST_PP_REPEAT_2_60(m, d) m(3, 60, d)
+# define BOOST_PP_REPEAT_2_62(m, d) BOOST_PP_REPEAT_2_61(m, d) m(3, 61, d)
+# define BOOST_PP_REPEAT_2_63(m, d) BOOST_PP_REPEAT_2_62(m, d) m(3, 62, d)
+# define BOOST_PP_REPEAT_2_64(m, d) BOOST_PP_REPEAT_2_63(m, d) m(3, 63, d)
+# define BOOST_PP_REPEAT_2_65(m, d) BOOST_PP_REPEAT_2_64(m, d) m(3, 64, d)
+# define BOOST_PP_REPEAT_2_66(m, d) BOOST_PP_REPEAT_2_65(m, d) m(3, 65, d)
+# define BOOST_PP_REPEAT_2_67(m, d) BOOST_PP_REPEAT_2_66(m, d) m(3, 66, d)
+# define BOOST_PP_REPEAT_2_68(m, d) BOOST_PP_REPEAT_2_67(m, d) m(3, 67, d)
+# define BOOST_PP_REPEAT_2_69(m, d) BOOST_PP_REPEAT_2_68(m, d) m(3, 68, d)
+# define BOOST_PP_REPEAT_2_70(m, d) BOOST_PP_REPEAT_2_69(m, d) m(3, 69, d)
+# define BOOST_PP_REPEAT_2_71(m, d) BOOST_PP_REPEAT_2_70(m, d) m(3, 70, d)
+# define BOOST_PP_REPEAT_2_72(m, d) BOOST_PP_REPEAT_2_71(m, d) m(3, 71, d)
+# define BOOST_PP_REPEAT_2_73(m, d) BOOST_PP_REPEAT_2_72(m, d) m(3, 72, d)
+# define BOOST_PP_REPEAT_2_74(m, d) BOOST_PP_REPEAT_2_73(m, d) m(3, 73, d)
+# define BOOST_PP_REPEAT_2_75(m, d) BOOST_PP_REPEAT_2_74(m, d) m(3, 74, d)
+# define BOOST_PP_REPEAT_2_76(m, d) BOOST_PP_REPEAT_2_75(m, d) m(3, 75, d)
+# define BOOST_PP_REPEAT_2_77(m, d) BOOST_PP_REPEAT_2_76(m, d) m(3, 76, d)
+# define BOOST_PP_REPEAT_2_78(m, d) BOOST_PP_REPEAT_2_77(m, d) m(3, 77, d)
+# define BOOST_PP_REPEAT_2_79(m, d) BOOST_PP_REPEAT_2_78(m, d) m(3, 78, d)
+# define BOOST_PP_REPEAT_2_80(m, d) BOOST_PP_REPEAT_2_79(m, d) m(3, 79, d)
+# define BOOST_PP_REPEAT_2_81(m, d) BOOST_PP_REPEAT_2_80(m, d) m(3, 80, d)
+# define BOOST_PP_REPEAT_2_82(m, d) BOOST_PP_REPEAT_2_81(m, d) m(3, 81, d)
+# define BOOST_PP_REPEAT_2_83(m, d) BOOST_PP_REPEAT_2_82(m, d) m(3, 82, d)
+# define BOOST_PP_REPEAT_2_84(m, d) BOOST_PP_REPEAT_2_83(m, d) m(3, 83, d)
+# define BOOST_PP_REPEAT_2_85(m, d) BOOST_PP_REPEAT_2_84(m, d) m(3, 84, d)
+# define BOOST_PP_REPEAT_2_86(m, d) BOOST_PP_REPEAT_2_85(m, d) m(3, 85, d)
+# define BOOST_PP_REPEAT_2_87(m, d) BOOST_PP_REPEAT_2_86(m, d) m(3, 86, d)
+# define BOOST_PP_REPEAT_2_88(m, d) BOOST_PP_REPEAT_2_87(m, d) m(3, 87, d)
+# define BOOST_PP_REPEAT_2_89(m, d) BOOST_PP_REPEAT_2_88(m, d) m(3, 88, d)
+# define BOOST_PP_REPEAT_2_90(m, d) BOOST_PP_REPEAT_2_89(m, d) m(3, 89, d)
+# define BOOST_PP_REPEAT_2_91(m, d) BOOST_PP_REPEAT_2_90(m, d) m(3, 90, d)
+# define BOOST_PP_REPEAT_2_92(m, d) BOOST_PP_REPEAT_2_91(m, d) m(3, 91, d)
+# define BOOST_PP_REPEAT_2_93(m, d) BOOST_PP_REPEAT_2_92(m, d) m(3, 92, d)
+# define BOOST_PP_REPEAT_2_94(m, d) BOOST_PP_REPEAT_2_93(m, d) m(3, 93, d)
+# define BOOST_PP_REPEAT_2_95(m, d) BOOST_PP_REPEAT_2_94(m, d) m(3, 94, d)
+# define BOOST_PP_REPEAT_2_96(m, d) BOOST_PP_REPEAT_2_95(m, d) m(3, 95, d)
+# define BOOST_PP_REPEAT_2_97(m, d) BOOST_PP_REPEAT_2_96(m, d) m(3, 96, d)
+# define BOOST_PP_REPEAT_2_98(m, d) BOOST_PP_REPEAT_2_97(m, d) m(3, 97, d)
+# define BOOST_PP_REPEAT_2_99(m, d) BOOST_PP_REPEAT_2_98(m, d) m(3, 98, d)
+# define BOOST_PP_REPEAT_2_100(m, d) BOOST_PP_REPEAT_2_99(m, d) m(3, 99, d)
+# define BOOST_PP_REPEAT_2_101(m, d) BOOST_PP_REPEAT_2_100(m, d) m(3, 100, d)
+# define BOOST_PP_REPEAT_2_102(m, d) BOOST_PP_REPEAT_2_101(m, d) m(3, 101, d)
+# define BOOST_PP_REPEAT_2_103(m, d) BOOST_PP_REPEAT_2_102(m, d) m(3, 102, d)
+# define BOOST_PP_REPEAT_2_104(m, d) BOOST_PP_REPEAT_2_103(m, d) m(3, 103, d)
+# define BOOST_PP_REPEAT_2_105(m, d) BOOST_PP_REPEAT_2_104(m, d) m(3, 104, d)
+# define BOOST_PP_REPEAT_2_106(m, d) BOOST_PP_REPEAT_2_105(m, d) m(3, 105, d)
+# define BOOST_PP_REPEAT_2_107(m, d) BOOST_PP_REPEAT_2_106(m, d) m(3, 106, d)
+# define BOOST_PP_REPEAT_2_108(m, d) BOOST_PP_REPEAT_2_107(m, d) m(3, 107, d)
+# define BOOST_PP_REPEAT_2_109(m, d) BOOST_PP_REPEAT_2_108(m, d) m(3, 108, d)
+# define BOOST_PP_REPEAT_2_110(m, d) BOOST_PP_REPEAT_2_109(m, d) m(3, 109, d)
+# define BOOST_PP_REPEAT_2_111(m, d) BOOST_PP_REPEAT_2_110(m, d) m(3, 110, d)
+# define BOOST_PP_REPEAT_2_112(m, d) BOOST_PP_REPEAT_2_111(m, d) m(3, 111, d)
+# define BOOST_PP_REPEAT_2_113(m, d) BOOST_PP_REPEAT_2_112(m, d) m(3, 112, d)
+# define BOOST_PP_REPEAT_2_114(m, d) BOOST_PP_REPEAT_2_113(m, d) m(3, 113, d)
+# define BOOST_PP_REPEAT_2_115(m, d) BOOST_PP_REPEAT_2_114(m, d) m(3, 114, d)
+# define BOOST_PP_REPEAT_2_116(m, d) BOOST_PP_REPEAT_2_115(m, d) m(3, 115, d)
+# define BOOST_PP_REPEAT_2_117(m, d) BOOST_PP_REPEAT_2_116(m, d) m(3, 116, d)
+# define BOOST_PP_REPEAT_2_118(m, d) BOOST_PP_REPEAT_2_117(m, d) m(3, 117, d)
+# define BOOST_PP_REPEAT_2_119(m, d) BOOST_PP_REPEAT_2_118(m, d) m(3, 118, d)
+# define BOOST_PP_REPEAT_2_120(m, d) BOOST_PP_REPEAT_2_119(m, d) m(3, 119, d)
+# define BOOST_PP_REPEAT_2_121(m, d) BOOST_PP_REPEAT_2_120(m, d) m(3, 120, d)
+# define BOOST_PP_REPEAT_2_122(m, d) BOOST_PP_REPEAT_2_121(m, d) m(3, 121, d)
+# define BOOST_PP_REPEAT_2_123(m, d) BOOST_PP_REPEAT_2_122(m, d) m(3, 122, d)
+# define BOOST_PP_REPEAT_2_124(m, d) BOOST_PP_REPEAT_2_123(m, d) m(3, 123, d)
+# define BOOST_PP_REPEAT_2_125(m, d) BOOST_PP_REPEAT_2_124(m, d) m(3, 124, d)
+# define BOOST_PP_REPEAT_2_126(m, d) BOOST_PP_REPEAT_2_125(m, d) m(3, 125, d)
+# define BOOST_PP_REPEAT_2_127(m, d) BOOST_PP_REPEAT_2_126(m, d) m(3, 126, d)
+# define BOOST_PP_REPEAT_2_128(m, d) BOOST_PP_REPEAT_2_127(m, d) m(3, 127, d)
+# define BOOST_PP_REPEAT_2_129(m, d) BOOST_PP_REPEAT_2_128(m, d) m(3, 128, d)
+# define BOOST_PP_REPEAT_2_130(m, d) BOOST_PP_REPEAT_2_129(m, d) m(3, 129, d)
+# define BOOST_PP_REPEAT_2_131(m, d) BOOST_PP_REPEAT_2_130(m, d) m(3, 130, d)
+# define BOOST_PP_REPEAT_2_132(m, d) BOOST_PP_REPEAT_2_131(m, d) m(3, 131, d)
+# define BOOST_PP_REPEAT_2_133(m, d) BOOST_PP_REPEAT_2_132(m, d) m(3, 132, d)
+# define BOOST_PP_REPEAT_2_134(m, d) BOOST_PP_REPEAT_2_133(m, d) m(3, 133, d)
+# define BOOST_PP_REPEAT_2_135(m, d) BOOST_PP_REPEAT_2_134(m, d) m(3, 134, d)
+# define BOOST_PP_REPEAT_2_136(m, d) BOOST_PP_REPEAT_2_135(m, d) m(3, 135, d)
+# define BOOST_PP_REPEAT_2_137(m, d) BOOST_PP_REPEAT_2_136(m, d) m(3, 136, d)
+# define BOOST_PP_REPEAT_2_138(m, d) BOOST_PP_REPEAT_2_137(m, d) m(3, 137, d)
+# define BOOST_PP_REPEAT_2_139(m, d) BOOST_PP_REPEAT_2_138(m, d) m(3, 138, d)
+# define BOOST_PP_REPEAT_2_140(m, d) BOOST_PP_REPEAT_2_139(m, d) m(3, 139, d)
+# define BOOST_PP_REPEAT_2_141(m, d) BOOST_PP_REPEAT_2_140(m, d) m(3, 140, d)
+# define BOOST_PP_REPEAT_2_142(m, d) BOOST_PP_REPEAT_2_141(m, d) m(3, 141, d)
+# define BOOST_PP_REPEAT_2_143(m, d) BOOST_PP_REPEAT_2_142(m, d) m(3, 142, d)
+# define BOOST_PP_REPEAT_2_144(m, d) BOOST_PP_REPEAT_2_143(m, d) m(3, 143, d)
+# define BOOST_PP_REPEAT_2_145(m, d) BOOST_PP_REPEAT_2_144(m, d) m(3, 144, d)
+# define BOOST_PP_REPEAT_2_146(m, d) BOOST_PP_REPEAT_2_145(m, d) m(3, 145, d)
+# define BOOST_PP_REPEAT_2_147(m, d) BOOST_PP_REPEAT_2_146(m, d) m(3, 146, d)
+# define BOOST_PP_REPEAT_2_148(m, d) BOOST_PP_REPEAT_2_147(m, d) m(3, 147, d)
+# define BOOST_PP_REPEAT_2_149(m, d) BOOST_PP_REPEAT_2_148(m, d) m(3, 148, d)
+# define BOOST_PP_REPEAT_2_150(m, d) BOOST_PP_REPEAT_2_149(m, d) m(3, 149, d)
+# define BOOST_PP_REPEAT_2_151(m, d) BOOST_PP_REPEAT_2_150(m, d) m(3, 150, d)
+# define BOOST_PP_REPEAT_2_152(m, d) BOOST_PP_REPEAT_2_151(m, d) m(3, 151, d)
+# define BOOST_PP_REPEAT_2_153(m, d) BOOST_PP_REPEAT_2_152(m, d) m(3, 152, d)
+# define BOOST_PP_REPEAT_2_154(m, d) BOOST_PP_REPEAT_2_153(m, d) m(3, 153, d)
+# define BOOST_PP_REPEAT_2_155(m, d) BOOST_PP_REPEAT_2_154(m, d) m(3, 154, d)
+# define BOOST_PP_REPEAT_2_156(m, d) BOOST_PP_REPEAT_2_155(m, d) m(3, 155, d)
+# define BOOST_PP_REPEAT_2_157(m, d) BOOST_PP_REPEAT_2_156(m, d) m(3, 156, d)
+# define BOOST_PP_REPEAT_2_158(m, d) BOOST_PP_REPEAT_2_157(m, d) m(3, 157, d)
+# define BOOST_PP_REPEAT_2_159(m, d) BOOST_PP_REPEAT_2_158(m, d) m(3, 158, d)
+# define BOOST_PP_REPEAT_2_160(m, d) BOOST_PP_REPEAT_2_159(m, d) m(3, 159, d)
+# define BOOST_PP_REPEAT_2_161(m, d) BOOST_PP_REPEAT_2_160(m, d) m(3, 160, d)
+# define BOOST_PP_REPEAT_2_162(m, d) BOOST_PP_REPEAT_2_161(m, d) m(3, 161, d)
+# define BOOST_PP_REPEAT_2_163(m, d) BOOST_PP_REPEAT_2_162(m, d) m(3, 162, d)
+# define BOOST_PP_REPEAT_2_164(m, d) BOOST_PP_REPEAT_2_163(m, d) m(3, 163, d)
+# define BOOST_PP_REPEAT_2_165(m, d) BOOST_PP_REPEAT_2_164(m, d) m(3, 164, d)
+# define BOOST_PP_REPEAT_2_166(m, d) BOOST_PP_REPEAT_2_165(m, d) m(3, 165, d)
+# define BOOST_PP_REPEAT_2_167(m, d) BOOST_PP_REPEAT_2_166(m, d) m(3, 166, d)
+# define BOOST_PP_REPEAT_2_168(m, d) BOOST_PP_REPEAT_2_167(m, d) m(3, 167, d)
+# define BOOST_PP_REPEAT_2_169(m, d) BOOST_PP_REPEAT_2_168(m, d) m(3, 168, d)
+# define BOOST_PP_REPEAT_2_170(m, d) BOOST_PP_REPEAT_2_169(m, d) m(3, 169, d)
+# define BOOST_PP_REPEAT_2_171(m, d) BOOST_PP_REPEAT_2_170(m, d) m(3, 170, d)
+# define BOOST_PP_REPEAT_2_172(m, d) BOOST_PP_REPEAT_2_171(m, d) m(3, 171, d)
+# define BOOST_PP_REPEAT_2_173(m, d) BOOST_PP_REPEAT_2_172(m, d) m(3, 172, d)
+# define BOOST_PP_REPEAT_2_174(m, d) BOOST_PP_REPEAT_2_173(m, d) m(3, 173, d)
+# define BOOST_PP_REPEAT_2_175(m, d) BOOST_PP_REPEAT_2_174(m, d) m(3, 174, d)
+# define BOOST_PP_REPEAT_2_176(m, d) BOOST_PP_REPEAT_2_175(m, d) m(3, 175, d)
+# define BOOST_PP_REPEAT_2_177(m, d) BOOST_PP_REPEAT_2_176(m, d) m(3, 176, d)
+# define BOOST_PP_REPEAT_2_178(m, d) BOOST_PP_REPEAT_2_177(m, d) m(3, 177, d)
+# define BOOST_PP_REPEAT_2_179(m, d) BOOST_PP_REPEAT_2_178(m, d) m(3, 178, d)
+# define BOOST_PP_REPEAT_2_180(m, d) BOOST_PP_REPEAT_2_179(m, d) m(3, 179, d)
+# define BOOST_PP_REPEAT_2_181(m, d) BOOST_PP_REPEAT_2_180(m, d) m(3, 180, d)
+# define BOOST_PP_REPEAT_2_182(m, d) BOOST_PP_REPEAT_2_181(m, d) m(3, 181, d)
+# define BOOST_PP_REPEAT_2_183(m, d) BOOST_PP_REPEAT_2_182(m, d) m(3, 182, d)
+# define BOOST_PP_REPEAT_2_184(m, d) BOOST_PP_REPEAT_2_183(m, d) m(3, 183, d)
+# define BOOST_PP_REPEAT_2_185(m, d) BOOST_PP_REPEAT_2_184(m, d) m(3, 184, d)
+# define BOOST_PP_REPEAT_2_186(m, d) BOOST_PP_REPEAT_2_185(m, d) m(3, 185, d)
+# define BOOST_PP_REPEAT_2_187(m, d) BOOST_PP_REPEAT_2_186(m, d) m(3, 186, d)
+# define BOOST_PP_REPEAT_2_188(m, d) BOOST_PP_REPEAT_2_187(m, d) m(3, 187, d)
+# define BOOST_PP_REPEAT_2_189(m, d) BOOST_PP_REPEAT_2_188(m, d) m(3, 188, d)
+# define BOOST_PP_REPEAT_2_190(m, d) BOOST_PP_REPEAT_2_189(m, d) m(3, 189, d)
+# define BOOST_PP_REPEAT_2_191(m, d) BOOST_PP_REPEAT_2_190(m, d) m(3, 190, d)
+# define BOOST_PP_REPEAT_2_192(m, d) BOOST_PP_REPEAT_2_191(m, d) m(3, 191, d)
+# define BOOST_PP_REPEAT_2_193(m, d) BOOST_PP_REPEAT_2_192(m, d) m(3, 192, d)
+# define BOOST_PP_REPEAT_2_194(m, d) BOOST_PP_REPEAT_2_193(m, d) m(3, 193, d)
+# define BOOST_PP_REPEAT_2_195(m, d) BOOST_PP_REPEAT_2_194(m, d) m(3, 194, d)
+# define BOOST_PP_REPEAT_2_196(m, d) BOOST_PP_REPEAT_2_195(m, d) m(3, 195, d)
+# define BOOST_PP_REPEAT_2_197(m, d) BOOST_PP_REPEAT_2_196(m, d) m(3, 196, d)
+# define BOOST_PP_REPEAT_2_198(m, d) BOOST_PP_REPEAT_2_197(m, d) m(3, 197, d)
+# define BOOST_PP_REPEAT_2_199(m, d) BOOST_PP_REPEAT_2_198(m, d) m(3, 198, d)
+# define BOOST_PP_REPEAT_2_200(m, d) BOOST_PP_REPEAT_2_199(m, d) m(3, 199, d)
+# define BOOST_PP_REPEAT_2_201(m, d) BOOST_PP_REPEAT_2_200(m, d) m(3, 200, d)
+# define BOOST_PP_REPEAT_2_202(m, d) BOOST_PP_REPEAT_2_201(m, d) m(3, 201, d)
+# define BOOST_PP_REPEAT_2_203(m, d) BOOST_PP_REPEAT_2_202(m, d) m(3, 202, d)
+# define BOOST_PP_REPEAT_2_204(m, d) BOOST_PP_REPEAT_2_203(m, d) m(3, 203, d)
+# define BOOST_PP_REPEAT_2_205(m, d) BOOST_PP_REPEAT_2_204(m, d) m(3, 204, d)
+# define BOOST_PP_REPEAT_2_206(m, d) BOOST_PP_REPEAT_2_205(m, d) m(3, 205, d)
+# define BOOST_PP_REPEAT_2_207(m, d) BOOST_PP_REPEAT_2_206(m, d) m(3, 206, d)
+# define BOOST_PP_REPEAT_2_208(m, d) BOOST_PP_REPEAT_2_207(m, d) m(3, 207, d)
+# define BOOST_PP_REPEAT_2_209(m, d) BOOST_PP_REPEAT_2_208(m, d) m(3, 208, d)
+# define BOOST_PP_REPEAT_2_210(m, d) BOOST_PP_REPEAT_2_209(m, d) m(3, 209, d)
+# define BOOST_PP_REPEAT_2_211(m, d) BOOST_PP_REPEAT_2_210(m, d) m(3, 210, d)
+# define BOOST_PP_REPEAT_2_212(m, d) BOOST_PP_REPEAT_2_211(m, d) m(3, 211, d)
+# define BOOST_PP_REPEAT_2_213(m, d) BOOST_PP_REPEAT_2_212(m, d) m(3, 212, d)
+# define BOOST_PP_REPEAT_2_214(m, d) BOOST_PP_REPEAT_2_213(m, d) m(3, 213, d)
+# define BOOST_PP_REPEAT_2_215(m, d) BOOST_PP_REPEAT_2_214(m, d) m(3, 214, d)
+# define BOOST_PP_REPEAT_2_216(m, d) BOOST_PP_REPEAT_2_215(m, d) m(3, 215, d)
+# define BOOST_PP_REPEAT_2_217(m, d) BOOST_PP_REPEAT_2_216(m, d) m(3, 216, d)
+# define BOOST_PP_REPEAT_2_218(m, d) BOOST_PP_REPEAT_2_217(m, d) m(3, 217, d)
+# define BOOST_PP_REPEAT_2_219(m, d) BOOST_PP_REPEAT_2_218(m, d) m(3, 218, d)
+# define BOOST_PP_REPEAT_2_220(m, d) BOOST_PP_REPEAT_2_219(m, d) m(3, 219, d)
+# define BOOST_PP_REPEAT_2_221(m, d) BOOST_PP_REPEAT_2_220(m, d) m(3, 220, d)
+# define BOOST_PP_REPEAT_2_222(m, d) BOOST_PP_REPEAT_2_221(m, d) m(3, 221, d)
+# define BOOST_PP_REPEAT_2_223(m, d) BOOST_PP_REPEAT_2_222(m, d) m(3, 222, d)
+# define BOOST_PP_REPEAT_2_224(m, d) BOOST_PP_REPEAT_2_223(m, d) m(3, 223, d)
+# define BOOST_PP_REPEAT_2_225(m, d) BOOST_PP_REPEAT_2_224(m, d) m(3, 224, d)
+# define BOOST_PP_REPEAT_2_226(m, d) BOOST_PP_REPEAT_2_225(m, d) m(3, 225, d)
+# define BOOST_PP_REPEAT_2_227(m, d) BOOST_PP_REPEAT_2_226(m, d) m(3, 226, d)
+# define BOOST_PP_REPEAT_2_228(m, d) BOOST_PP_REPEAT_2_227(m, d) m(3, 227, d)
+# define BOOST_PP_REPEAT_2_229(m, d) BOOST_PP_REPEAT_2_228(m, d) m(3, 228, d)
+# define BOOST_PP_REPEAT_2_230(m, d) BOOST_PP_REPEAT_2_229(m, d) m(3, 229, d)
+# define BOOST_PP_REPEAT_2_231(m, d) BOOST_PP_REPEAT_2_230(m, d) m(3, 230, d)
+# define BOOST_PP_REPEAT_2_232(m, d) BOOST_PP_REPEAT_2_231(m, d) m(3, 231, d)
+# define BOOST_PP_REPEAT_2_233(m, d) BOOST_PP_REPEAT_2_232(m, d) m(3, 232, d)
+# define BOOST_PP_REPEAT_2_234(m, d) BOOST_PP_REPEAT_2_233(m, d) m(3, 233, d)
+# define BOOST_PP_REPEAT_2_235(m, d) BOOST_PP_REPEAT_2_234(m, d) m(3, 234, d)
+# define BOOST_PP_REPEAT_2_236(m, d) BOOST_PP_REPEAT_2_235(m, d) m(3, 235, d)
+# define BOOST_PP_REPEAT_2_237(m, d) BOOST_PP_REPEAT_2_236(m, d) m(3, 236, d)
+# define BOOST_PP_REPEAT_2_238(m, d) BOOST_PP_REPEAT_2_237(m, d) m(3, 237, d)
+# define BOOST_PP_REPEAT_2_239(m, d) BOOST_PP_REPEAT_2_238(m, d) m(3, 238, d)
+# define BOOST_PP_REPEAT_2_240(m, d) BOOST_PP_REPEAT_2_239(m, d) m(3, 239, d)
+# define BOOST_PP_REPEAT_2_241(m, d) BOOST_PP_REPEAT_2_240(m, d) m(3, 240, d)
+# define BOOST_PP_REPEAT_2_242(m, d) BOOST_PP_REPEAT_2_241(m, d) m(3, 241, d)
+# define BOOST_PP_REPEAT_2_243(m, d) BOOST_PP_REPEAT_2_242(m, d) m(3, 242, d)
+# define BOOST_PP_REPEAT_2_244(m, d) BOOST_PP_REPEAT_2_243(m, d) m(3, 243, d)
+# define BOOST_PP_REPEAT_2_245(m, d) BOOST_PP_REPEAT_2_244(m, d) m(3, 244, d)
+# define BOOST_PP_REPEAT_2_246(m, d) BOOST_PP_REPEAT_2_245(m, d) m(3, 245, d)
+# define BOOST_PP_REPEAT_2_247(m, d) BOOST_PP_REPEAT_2_246(m, d) m(3, 246, d)
+# define BOOST_PP_REPEAT_2_248(m, d) BOOST_PP_REPEAT_2_247(m, d) m(3, 247, d)
+# define BOOST_PP_REPEAT_2_249(m, d) BOOST_PP_REPEAT_2_248(m, d) m(3, 248, d)
+# define BOOST_PP_REPEAT_2_250(m, d) BOOST_PP_REPEAT_2_249(m, d) m(3, 249, d)
+# define BOOST_PP_REPEAT_2_251(m, d) BOOST_PP_REPEAT_2_250(m, d) m(3, 250, d)
+# define BOOST_PP_REPEAT_2_252(m, d) BOOST_PP_REPEAT_2_251(m, d) m(3, 251, d)
+# define BOOST_PP_REPEAT_2_253(m, d) BOOST_PP_REPEAT_2_252(m, d) m(3, 252, d)
+# define BOOST_PP_REPEAT_2_254(m, d) BOOST_PP_REPEAT_2_253(m, d) m(3, 253, d)
+# define BOOST_PP_REPEAT_2_255(m, d) BOOST_PP_REPEAT_2_254(m, d) m(3, 254, d)
+# define BOOST_PP_REPEAT_2_256(m, d) BOOST_PP_REPEAT_2_255(m, d) m(3, 255, d)
+#
+# define BOOST_PP_REPEAT_3_0(m, d)
+# define BOOST_PP_REPEAT_3_1(m, d) m(4, 0, d)
+# define BOOST_PP_REPEAT_3_2(m, d) BOOST_PP_REPEAT_3_1(m, d) m(4, 1, d)
+# define BOOST_PP_REPEAT_3_3(m, d) BOOST_PP_REPEAT_3_2(m, d) m(4, 2, d)
+# define BOOST_PP_REPEAT_3_4(m, d) BOOST_PP_REPEAT_3_3(m, d) m(4, 3, d)
+# define BOOST_PP_REPEAT_3_5(m, d) BOOST_PP_REPEAT_3_4(m, d) m(4, 4, d)
+# define BOOST_PP_REPEAT_3_6(m, d) BOOST_PP_REPEAT_3_5(m, d) m(4, 5, d)
+# define BOOST_PP_REPEAT_3_7(m, d) BOOST_PP_REPEAT_3_6(m, d) m(4, 6, d)
+# define BOOST_PP_REPEAT_3_8(m, d) BOOST_PP_REPEAT_3_7(m, d) m(4, 7, d)
+# define BOOST_PP_REPEAT_3_9(m, d) BOOST_PP_REPEAT_3_8(m, d) m(4, 8, d)
+# define BOOST_PP_REPEAT_3_10(m, d) BOOST_PP_REPEAT_3_9(m, d) m(4, 9, d)
+# define BOOST_PP_REPEAT_3_11(m, d) BOOST_PP_REPEAT_3_10(m, d) m(4, 10, d)
+# define BOOST_PP_REPEAT_3_12(m, d) BOOST_PP_REPEAT_3_11(m, d) m(4, 11, d)
+# define BOOST_PP_REPEAT_3_13(m, d) BOOST_PP_REPEAT_3_12(m, d) m(4, 12, d)
+# define BOOST_PP_REPEAT_3_14(m, d) BOOST_PP_REPEAT_3_13(m, d) m(4, 13, d)
+# define BOOST_PP_REPEAT_3_15(m, d) BOOST_PP_REPEAT_3_14(m, d) m(4, 14, d)
+# define BOOST_PP_REPEAT_3_16(m, d) BOOST_PP_REPEAT_3_15(m, d) m(4, 15, d)
+# define BOOST_PP_REPEAT_3_17(m, d) BOOST_PP_REPEAT_3_16(m, d) m(4, 16, d)
+# define BOOST_PP_REPEAT_3_18(m, d) BOOST_PP_REPEAT_3_17(m, d) m(4, 17, d)
+# define BOOST_PP_REPEAT_3_19(m, d) BOOST_PP_REPEAT_3_18(m, d) m(4, 18, d)
+# define BOOST_PP_REPEAT_3_20(m, d) BOOST_PP_REPEAT_3_19(m, d) m(4, 19, d)
+# define BOOST_PP_REPEAT_3_21(m, d) BOOST_PP_REPEAT_3_20(m, d) m(4, 20, d)
+# define BOOST_PP_REPEAT_3_22(m, d) BOOST_PP_REPEAT_3_21(m, d) m(4, 21, d)
+# define BOOST_PP_REPEAT_3_23(m, d) BOOST_PP_REPEAT_3_22(m, d) m(4, 22, d)
+# define BOOST_PP_REPEAT_3_24(m, d) BOOST_PP_REPEAT_3_23(m, d) m(4, 23, d)
+# define BOOST_PP_REPEAT_3_25(m, d) BOOST_PP_REPEAT_3_24(m, d) m(4, 24, d)
+# define BOOST_PP_REPEAT_3_26(m, d) BOOST_PP_REPEAT_3_25(m, d) m(4, 25, d)
+# define BOOST_PP_REPEAT_3_27(m, d) BOOST_PP_REPEAT_3_26(m, d) m(4, 26, d)
+# define BOOST_PP_REPEAT_3_28(m, d) BOOST_PP_REPEAT_3_27(m, d) m(4, 27, d)
+# define BOOST_PP_REPEAT_3_29(m, d) BOOST_PP_REPEAT_3_28(m, d) m(4, 28, d)
+# define BOOST_PP_REPEAT_3_30(m, d) BOOST_PP_REPEAT_3_29(m, d) m(4, 29, d)
+# define BOOST_PP_REPEAT_3_31(m, d) BOOST_PP_REPEAT_3_30(m, d) m(4, 30, d)
+# define BOOST_PP_REPEAT_3_32(m, d) BOOST_PP_REPEAT_3_31(m, d) m(4, 31, d)
+# define BOOST_PP_REPEAT_3_33(m, d) BOOST_PP_REPEAT_3_32(m, d) m(4, 32, d)
+# define BOOST_PP_REPEAT_3_34(m, d) BOOST_PP_REPEAT_3_33(m, d) m(4, 33, d)
+# define BOOST_PP_REPEAT_3_35(m, d) BOOST_PP_REPEAT_3_34(m, d) m(4, 34, d)
+# define BOOST_PP_REPEAT_3_36(m, d) BOOST_PP_REPEAT_3_35(m, d) m(4, 35, d)
+# define BOOST_PP_REPEAT_3_37(m, d) BOOST_PP_REPEAT_3_36(m, d) m(4, 36, d)
+# define BOOST_PP_REPEAT_3_38(m, d) BOOST_PP_REPEAT_3_37(m, d) m(4, 37, d)
+# define BOOST_PP_REPEAT_3_39(m, d) BOOST_PP_REPEAT_3_38(m, d) m(4, 38, d)
+# define BOOST_PP_REPEAT_3_40(m, d) BOOST_PP_REPEAT_3_39(m, d) m(4, 39, d)
+# define BOOST_PP_REPEAT_3_41(m, d) BOOST_PP_REPEAT_3_40(m, d) m(4, 40, d)
+# define BOOST_PP_REPEAT_3_42(m, d) BOOST_PP_REPEAT_3_41(m, d) m(4, 41, d)
+# define BOOST_PP_REPEAT_3_43(m, d) BOOST_PP_REPEAT_3_42(m, d) m(4, 42, d)
+# define BOOST_PP_REPEAT_3_44(m, d) BOOST_PP_REPEAT_3_43(m, d) m(4, 43, d)
+# define BOOST_PP_REPEAT_3_45(m, d) BOOST_PP_REPEAT_3_44(m, d) m(4, 44, d)
+# define BOOST_PP_REPEAT_3_46(m, d) BOOST_PP_REPEAT_3_45(m, d) m(4, 45, d)
+# define BOOST_PP_REPEAT_3_47(m, d) BOOST_PP_REPEAT_3_46(m, d) m(4, 46, d)
+# define BOOST_PP_REPEAT_3_48(m, d) BOOST_PP_REPEAT_3_47(m, d) m(4, 47, d)
+# define BOOST_PP_REPEAT_3_49(m, d) BOOST_PP_REPEAT_3_48(m, d) m(4, 48, d)
+# define BOOST_PP_REPEAT_3_50(m, d) BOOST_PP_REPEAT_3_49(m, d) m(4, 49, d)
+# define BOOST_PP_REPEAT_3_51(m, d) BOOST_PP_REPEAT_3_50(m, d) m(4, 50, d)
+# define BOOST_PP_REPEAT_3_52(m, d) BOOST_PP_REPEAT_3_51(m, d) m(4, 51, d)
+# define BOOST_PP_REPEAT_3_53(m, d) BOOST_PP_REPEAT_3_52(m, d) m(4, 52, d)
+# define BOOST_PP_REPEAT_3_54(m, d) BOOST_PP_REPEAT_3_53(m, d) m(4, 53, d)
+# define BOOST_PP_REPEAT_3_55(m, d) BOOST_PP_REPEAT_3_54(m, d) m(4, 54, d)
+# define BOOST_PP_REPEAT_3_56(m, d) BOOST_PP_REPEAT_3_55(m, d) m(4, 55, d)
+# define BOOST_PP_REPEAT_3_57(m, d) BOOST_PP_REPEAT_3_56(m, d) m(4, 56, d)
+# define BOOST_PP_REPEAT_3_58(m, d) BOOST_PP_REPEAT_3_57(m, d) m(4, 57, d)
+# define BOOST_PP_REPEAT_3_59(m, d) BOOST_PP_REPEAT_3_58(m, d) m(4, 58, d)
+# define BOOST_PP_REPEAT_3_60(m, d) BOOST_PP_REPEAT_3_59(m, d) m(4, 59, d)
+# define BOOST_PP_REPEAT_3_61(m, d) BOOST_PP_REPEAT_3_60(m, d) m(4, 60, d)
+# define BOOST_PP_REPEAT_3_62(m, d) BOOST_PP_REPEAT_3_61(m, d) m(4, 61, d)
+# define BOOST_PP_REPEAT_3_63(m, d) BOOST_PP_REPEAT_3_62(m, d) m(4, 62, d)
+# define BOOST_PP_REPEAT_3_64(m, d) BOOST_PP_REPEAT_3_63(m, d) m(4, 63, d)
+# define BOOST_PP_REPEAT_3_65(m, d) BOOST_PP_REPEAT_3_64(m, d) m(4, 64, d)
+# define BOOST_PP_REPEAT_3_66(m, d) BOOST_PP_REPEAT_3_65(m, d) m(4, 65, d)
+# define BOOST_PP_REPEAT_3_67(m, d) BOOST_PP_REPEAT_3_66(m, d) m(4, 66, d)
+# define BOOST_PP_REPEAT_3_68(m, d) BOOST_PP_REPEAT_3_67(m, d) m(4, 67, d)
+# define BOOST_PP_REPEAT_3_69(m, d) BOOST_PP_REPEAT_3_68(m, d) m(4, 68, d)
+# define BOOST_PP_REPEAT_3_70(m, d) BOOST_PP_REPEAT_3_69(m, d) m(4, 69, d)
+# define BOOST_PP_REPEAT_3_71(m, d) BOOST_PP_REPEAT_3_70(m, d) m(4, 70, d)
+# define BOOST_PP_REPEAT_3_72(m, d) BOOST_PP_REPEAT_3_71(m, d) m(4, 71, d)
+# define BOOST_PP_REPEAT_3_73(m, d) BOOST_PP_REPEAT_3_72(m, d) m(4, 72, d)
+# define BOOST_PP_REPEAT_3_74(m, d) BOOST_PP_REPEAT_3_73(m, d) m(4, 73, d)
+# define BOOST_PP_REPEAT_3_75(m, d) BOOST_PP_REPEAT_3_74(m, d) m(4, 74, d)
+# define BOOST_PP_REPEAT_3_76(m, d) BOOST_PP_REPEAT_3_75(m, d) m(4, 75, d)
+# define BOOST_PP_REPEAT_3_77(m, d) BOOST_PP_REPEAT_3_76(m, d) m(4, 76, d)
+# define BOOST_PP_REPEAT_3_78(m, d) BOOST_PP_REPEAT_3_77(m, d) m(4, 77, d)
+# define BOOST_PP_REPEAT_3_79(m, d) BOOST_PP_REPEAT_3_78(m, d) m(4, 78, d)
+# define BOOST_PP_REPEAT_3_80(m, d) BOOST_PP_REPEAT_3_79(m, d) m(4, 79, d)
+# define BOOST_PP_REPEAT_3_81(m, d) BOOST_PP_REPEAT_3_80(m, d) m(4, 80, d)
+# define BOOST_PP_REPEAT_3_82(m, d) BOOST_PP_REPEAT_3_81(m, d) m(4, 81, d)
+# define BOOST_PP_REPEAT_3_83(m, d) BOOST_PP_REPEAT_3_82(m, d) m(4, 82, d)
+# define BOOST_PP_REPEAT_3_84(m, d) BOOST_PP_REPEAT_3_83(m, d) m(4, 83, d)
+# define BOOST_PP_REPEAT_3_85(m, d) BOOST_PP_REPEAT_3_84(m, d) m(4, 84, d)
+# define BOOST_PP_REPEAT_3_86(m, d) BOOST_PP_REPEAT_3_85(m, d) m(4, 85, d)
+# define BOOST_PP_REPEAT_3_87(m, d) BOOST_PP_REPEAT_3_86(m, d) m(4, 86, d)
+# define BOOST_PP_REPEAT_3_88(m, d) BOOST_PP_REPEAT_3_87(m, d) m(4, 87, d)
+# define BOOST_PP_REPEAT_3_89(m, d) BOOST_PP_REPEAT_3_88(m, d) m(4, 88, d)
+# define BOOST_PP_REPEAT_3_90(m, d) BOOST_PP_REPEAT_3_89(m, d) m(4, 89, d)
+# define BOOST_PP_REPEAT_3_91(m, d) BOOST_PP_REPEAT_3_90(m, d) m(4, 90, d)
+# define BOOST_PP_REPEAT_3_92(m, d) BOOST_PP_REPEAT_3_91(m, d) m(4, 91, d)
+# define BOOST_PP_REPEAT_3_93(m, d) BOOST_PP_REPEAT_3_92(m, d) m(4, 92, d)
+# define BOOST_PP_REPEAT_3_94(m, d) BOOST_PP_REPEAT_3_93(m, d) m(4, 93, d)
+# define BOOST_PP_REPEAT_3_95(m, d) BOOST_PP_REPEAT_3_94(m, d) m(4, 94, d)
+# define BOOST_PP_REPEAT_3_96(m, d) BOOST_PP_REPEAT_3_95(m, d) m(4, 95, d)
+# define BOOST_PP_REPEAT_3_97(m, d) BOOST_PP_REPEAT_3_96(m, d) m(4, 96, d)
+# define BOOST_PP_REPEAT_3_98(m, d) BOOST_PP_REPEAT_3_97(m, d) m(4, 97, d)
+# define BOOST_PP_REPEAT_3_99(m, d) BOOST_PP_REPEAT_3_98(m, d) m(4, 98, d)
+# define BOOST_PP_REPEAT_3_100(m, d) BOOST_PP_REPEAT_3_99(m, d) m(4, 99, d)
+# define BOOST_PP_REPEAT_3_101(m, d) BOOST_PP_REPEAT_3_100(m, d) m(4, 100, d)
+# define BOOST_PP_REPEAT_3_102(m, d) BOOST_PP_REPEAT_3_101(m, d) m(4, 101, d)
+# define BOOST_PP_REPEAT_3_103(m, d) BOOST_PP_REPEAT_3_102(m, d) m(4, 102, d)
+# define BOOST_PP_REPEAT_3_104(m, d) BOOST_PP_REPEAT_3_103(m, d) m(4, 103, d)
+# define BOOST_PP_REPEAT_3_105(m, d) BOOST_PP_REPEAT_3_104(m, d) m(4, 104, d)
+# define BOOST_PP_REPEAT_3_106(m, d) BOOST_PP_REPEAT_3_105(m, d) m(4, 105, d)
+# define BOOST_PP_REPEAT_3_107(m, d) BOOST_PP_REPEAT_3_106(m, d) m(4, 106, d)
+# define BOOST_PP_REPEAT_3_108(m, d) BOOST_PP_REPEAT_3_107(m, d) m(4, 107, d)
+# define BOOST_PP_REPEAT_3_109(m, d) BOOST_PP_REPEAT_3_108(m, d) m(4, 108, d)
+# define BOOST_PP_REPEAT_3_110(m, d) BOOST_PP_REPEAT_3_109(m, d) m(4, 109, d)
+# define BOOST_PP_REPEAT_3_111(m, d) BOOST_PP_REPEAT_3_110(m, d) m(4, 110, d)
+# define BOOST_PP_REPEAT_3_112(m, d) BOOST_PP_REPEAT_3_111(m, d) m(4, 111, d)
+# define BOOST_PP_REPEAT_3_113(m, d) BOOST_PP_REPEAT_3_112(m, d) m(4, 112, d)
+# define BOOST_PP_REPEAT_3_114(m, d) BOOST_PP_REPEAT_3_113(m, d) m(4, 113, d)
+# define BOOST_PP_REPEAT_3_115(m, d) BOOST_PP_REPEAT_3_114(m, d) m(4, 114, d)
+# define BOOST_PP_REPEAT_3_116(m, d) BOOST_PP_REPEAT_3_115(m, d) m(4, 115, d)
+# define BOOST_PP_REPEAT_3_117(m, d) BOOST_PP_REPEAT_3_116(m, d) m(4, 116, d)
+# define BOOST_PP_REPEAT_3_118(m, d) BOOST_PP_REPEAT_3_117(m, d) m(4, 117, d)
+# define BOOST_PP_REPEAT_3_119(m, d) BOOST_PP_REPEAT_3_118(m, d) m(4, 118, d)
+# define BOOST_PP_REPEAT_3_120(m, d) BOOST_PP_REPEAT_3_119(m, d) m(4, 119, d)
+# define BOOST_PP_REPEAT_3_121(m, d) BOOST_PP_REPEAT_3_120(m, d) m(4, 120, d)
+# define BOOST_PP_REPEAT_3_122(m, d) BOOST_PP_REPEAT_3_121(m, d) m(4, 121, d)
+# define BOOST_PP_REPEAT_3_123(m, d) BOOST_PP_REPEAT_3_122(m, d) m(4, 122, d)
+# define BOOST_PP_REPEAT_3_124(m, d) BOOST_PP_REPEAT_3_123(m, d) m(4, 123, d)
+# define BOOST_PP_REPEAT_3_125(m, d) BOOST_PP_REPEAT_3_124(m, d) m(4, 124, d)
+# define BOOST_PP_REPEAT_3_126(m, d) BOOST_PP_REPEAT_3_125(m, d) m(4, 125, d)
+# define BOOST_PP_REPEAT_3_127(m, d) BOOST_PP_REPEAT_3_126(m, d) m(4, 126, d)
+# define BOOST_PP_REPEAT_3_128(m, d) BOOST_PP_REPEAT_3_127(m, d) m(4, 127, d)
+# define BOOST_PP_REPEAT_3_129(m, d) BOOST_PP_REPEAT_3_128(m, d) m(4, 128, d)
+# define BOOST_PP_REPEAT_3_130(m, d) BOOST_PP_REPEAT_3_129(m, d) m(4, 129, d)
+# define BOOST_PP_REPEAT_3_131(m, d) BOOST_PP_REPEAT_3_130(m, d) m(4, 130, d)
+# define BOOST_PP_REPEAT_3_132(m, d) BOOST_PP_REPEAT_3_131(m, d) m(4, 131, d)
+# define BOOST_PP_REPEAT_3_133(m, d) BOOST_PP_REPEAT_3_132(m, d) m(4, 132, d)
+# define BOOST_PP_REPEAT_3_134(m, d) BOOST_PP_REPEAT_3_133(m, d) m(4, 133, d)
+# define BOOST_PP_REPEAT_3_135(m, d) BOOST_PP_REPEAT_3_134(m, d) m(4, 134, d)
+# define BOOST_PP_REPEAT_3_136(m, d) BOOST_PP_REPEAT_3_135(m, d) m(4, 135, d)
+# define BOOST_PP_REPEAT_3_137(m, d) BOOST_PP_REPEAT_3_136(m, d) m(4, 136, d)
+# define BOOST_PP_REPEAT_3_138(m, d) BOOST_PP_REPEAT_3_137(m, d) m(4, 137, d)
+# define BOOST_PP_REPEAT_3_139(m, d) BOOST_PP_REPEAT_3_138(m, d) m(4, 138, d)
+# define BOOST_PP_REPEAT_3_140(m, d) BOOST_PP_REPEAT_3_139(m, d) m(4, 139, d)
+# define BOOST_PP_REPEAT_3_141(m, d) BOOST_PP_REPEAT_3_140(m, d) m(4, 140, d)
+# define BOOST_PP_REPEAT_3_142(m, d) BOOST_PP_REPEAT_3_141(m, d) m(4, 141, d)
+# define BOOST_PP_REPEAT_3_143(m, d) BOOST_PP_REPEAT_3_142(m, d) m(4, 142, d)
+# define BOOST_PP_REPEAT_3_144(m, d) BOOST_PP_REPEAT_3_143(m, d) m(4, 143, d)
+# define BOOST_PP_REPEAT_3_145(m, d) BOOST_PP_REPEAT_3_144(m, d) m(4, 144, d)
+# define BOOST_PP_REPEAT_3_146(m, d) BOOST_PP_REPEAT_3_145(m, d) m(4, 145, d)
+# define BOOST_PP_REPEAT_3_147(m, d) BOOST_PP_REPEAT_3_146(m, d) m(4, 146, d)
+# define BOOST_PP_REPEAT_3_148(m, d) BOOST_PP_REPEAT_3_147(m, d) m(4, 147, d)
+# define BOOST_PP_REPEAT_3_149(m, d) BOOST_PP_REPEAT_3_148(m, d) m(4, 148, d)
+# define BOOST_PP_REPEAT_3_150(m, d) BOOST_PP_REPEAT_3_149(m, d) m(4, 149, d)
+# define BOOST_PP_REPEAT_3_151(m, d) BOOST_PP_REPEAT_3_150(m, d) m(4, 150, d)
+# define BOOST_PP_REPEAT_3_152(m, d) BOOST_PP_REPEAT_3_151(m, d) m(4, 151, d)
+# define BOOST_PP_REPEAT_3_153(m, d) BOOST_PP_REPEAT_3_152(m, d) m(4, 152, d)
+# define BOOST_PP_REPEAT_3_154(m, d) BOOST_PP_REPEAT_3_153(m, d) m(4, 153, d)
+# define BOOST_PP_REPEAT_3_155(m, d) BOOST_PP_REPEAT_3_154(m, d) m(4, 154, d)
+# define BOOST_PP_REPEAT_3_156(m, d) BOOST_PP_REPEAT_3_155(m, d) m(4, 155, d)
+# define BOOST_PP_REPEAT_3_157(m, d) BOOST_PP_REPEAT_3_156(m, d) m(4, 156, d)
+# define BOOST_PP_REPEAT_3_158(m, d) BOOST_PP_REPEAT_3_157(m, d) m(4, 157, d)
+# define BOOST_PP_REPEAT_3_159(m, d) BOOST_PP_REPEAT_3_158(m, d) m(4, 158, d)
+# define BOOST_PP_REPEAT_3_160(m, d) BOOST_PP_REPEAT_3_159(m, d) m(4, 159, d)
+# define BOOST_PP_REPEAT_3_161(m, d) BOOST_PP_REPEAT_3_160(m, d) m(4, 160, d)
+# define BOOST_PP_REPEAT_3_162(m, d) BOOST_PP_REPEAT_3_161(m, d) m(4, 161, d)
+# define BOOST_PP_REPEAT_3_163(m, d) BOOST_PP_REPEAT_3_162(m, d) m(4, 162, d)
+# define BOOST_PP_REPEAT_3_164(m, d) BOOST_PP_REPEAT_3_163(m, d) m(4, 163, d)
+# define BOOST_PP_REPEAT_3_165(m, d) BOOST_PP_REPEAT_3_164(m, d) m(4, 164, d)
+# define BOOST_PP_REPEAT_3_166(m, d) BOOST_PP_REPEAT_3_165(m, d) m(4, 165, d)
+# define BOOST_PP_REPEAT_3_167(m, d) BOOST_PP_REPEAT_3_166(m, d) m(4, 166, d)
+# define BOOST_PP_REPEAT_3_168(m, d) BOOST_PP_REPEAT_3_167(m, d) m(4, 167, d)
+# define BOOST_PP_REPEAT_3_169(m, d) BOOST_PP_REPEAT_3_168(m, d) m(4, 168, d)
+# define BOOST_PP_REPEAT_3_170(m, d) BOOST_PP_REPEAT_3_169(m, d) m(4, 169, d)
+# define BOOST_PP_REPEAT_3_171(m, d) BOOST_PP_REPEAT_3_170(m, d) m(4, 170, d)
+# define BOOST_PP_REPEAT_3_172(m, d) BOOST_PP_REPEAT_3_171(m, d) m(4, 171, d)
+# define BOOST_PP_REPEAT_3_173(m, d) BOOST_PP_REPEAT_3_172(m, d) m(4, 172, d)
+# define BOOST_PP_REPEAT_3_174(m, d) BOOST_PP_REPEAT_3_173(m, d) m(4, 173, d)
+# define BOOST_PP_REPEAT_3_175(m, d) BOOST_PP_REPEAT_3_174(m, d) m(4, 174, d)
+# define BOOST_PP_REPEAT_3_176(m, d) BOOST_PP_REPEAT_3_175(m, d) m(4, 175, d)
+# define BOOST_PP_REPEAT_3_177(m, d) BOOST_PP_REPEAT_3_176(m, d) m(4, 176, d)
+# define BOOST_PP_REPEAT_3_178(m, d) BOOST_PP_REPEAT_3_177(m, d) m(4, 177, d)
+# define BOOST_PP_REPEAT_3_179(m, d) BOOST_PP_REPEAT_3_178(m, d) m(4, 178, d)
+# define BOOST_PP_REPEAT_3_180(m, d) BOOST_PP_REPEAT_3_179(m, d) m(4, 179, d)
+# define BOOST_PP_REPEAT_3_181(m, d) BOOST_PP_REPEAT_3_180(m, d) m(4, 180, d)
+# define BOOST_PP_REPEAT_3_182(m, d) BOOST_PP_REPEAT_3_181(m, d) m(4, 181, d)
+# define BOOST_PP_REPEAT_3_183(m, d) BOOST_PP_REPEAT_3_182(m, d) m(4, 182, d)
+# define BOOST_PP_REPEAT_3_184(m, d) BOOST_PP_REPEAT_3_183(m, d) m(4, 183, d)
+# define BOOST_PP_REPEAT_3_185(m, d) BOOST_PP_REPEAT_3_184(m, d) m(4, 184, d)
+# define BOOST_PP_REPEAT_3_186(m, d) BOOST_PP_REPEAT_3_185(m, d) m(4, 185, d)
+# define BOOST_PP_REPEAT_3_187(m, d) BOOST_PP_REPEAT_3_186(m, d) m(4, 186, d)
+# define BOOST_PP_REPEAT_3_188(m, d) BOOST_PP_REPEAT_3_187(m, d) m(4, 187, d)
+# define BOOST_PP_REPEAT_3_189(m, d) BOOST_PP_REPEAT_3_188(m, d) m(4, 188, d)
+# define BOOST_PP_REPEAT_3_190(m, d) BOOST_PP_REPEAT_3_189(m, d) m(4, 189, d)
+# define BOOST_PP_REPEAT_3_191(m, d) BOOST_PP_REPEAT_3_190(m, d) m(4, 190, d)
+# define BOOST_PP_REPEAT_3_192(m, d) BOOST_PP_REPEAT_3_191(m, d) m(4, 191, d)
+# define BOOST_PP_REPEAT_3_193(m, d) BOOST_PP_REPEAT_3_192(m, d) m(4, 192, d)
+# define BOOST_PP_REPEAT_3_194(m, d) BOOST_PP_REPEAT_3_193(m, d) m(4, 193, d)
+# define BOOST_PP_REPEAT_3_195(m, d) BOOST_PP_REPEAT_3_194(m, d) m(4, 194, d)
+# define BOOST_PP_REPEAT_3_196(m, d) BOOST_PP_REPEAT_3_195(m, d) m(4, 195, d)
+# define BOOST_PP_REPEAT_3_197(m, d) BOOST_PP_REPEAT_3_196(m, d) m(4, 196, d)
+# define BOOST_PP_REPEAT_3_198(m, d) BOOST_PP_REPEAT_3_197(m, d) m(4, 197, d)
+# define BOOST_PP_REPEAT_3_199(m, d) BOOST_PP_REPEAT_3_198(m, d) m(4, 198, d)
+# define BOOST_PP_REPEAT_3_200(m, d) BOOST_PP_REPEAT_3_199(m, d) m(4, 199, d)
+# define BOOST_PP_REPEAT_3_201(m, d) BOOST_PP_REPEAT_3_200(m, d) m(4, 200, d)
+# define BOOST_PP_REPEAT_3_202(m, d) BOOST_PP_REPEAT_3_201(m, d) m(4, 201, d)
+# define BOOST_PP_REPEAT_3_203(m, d) BOOST_PP_REPEAT_3_202(m, d) m(4, 202, d)
+# define BOOST_PP_REPEAT_3_204(m, d) BOOST_PP_REPEAT_3_203(m, d) m(4, 203, d)
+# define BOOST_PP_REPEAT_3_205(m, d) BOOST_PP_REPEAT_3_204(m, d) m(4, 204, d)
+# define BOOST_PP_REPEAT_3_206(m, d) BOOST_PP_REPEAT_3_205(m, d) m(4, 205, d)
+# define BOOST_PP_REPEAT_3_207(m, d) BOOST_PP_REPEAT_3_206(m, d) m(4, 206, d)
+# define BOOST_PP_REPEAT_3_208(m, d) BOOST_PP_REPEAT_3_207(m, d) m(4, 207, d)
+# define BOOST_PP_REPEAT_3_209(m, d) BOOST_PP_REPEAT_3_208(m, d) m(4, 208, d)
+# define BOOST_PP_REPEAT_3_210(m, d) BOOST_PP_REPEAT_3_209(m, d) m(4, 209, d)
+# define BOOST_PP_REPEAT_3_211(m, d) BOOST_PP_REPEAT_3_210(m, d) m(4, 210, d)
+# define BOOST_PP_REPEAT_3_212(m, d) BOOST_PP_REPEAT_3_211(m, d) m(4, 211, d)
+# define BOOST_PP_REPEAT_3_213(m, d) BOOST_PP_REPEAT_3_212(m, d) m(4, 212, d)
+# define BOOST_PP_REPEAT_3_214(m, d) BOOST_PP_REPEAT_3_213(m, d) m(4, 213, d)
+# define BOOST_PP_REPEAT_3_215(m, d) BOOST_PP_REPEAT_3_214(m, d) m(4, 214, d)
+# define BOOST_PP_REPEAT_3_216(m, d) BOOST_PP_REPEAT_3_215(m, d) m(4, 215, d)
+# define BOOST_PP_REPEAT_3_217(m, d) BOOST_PP_REPEAT_3_216(m, d) m(4, 216, d)
+# define BOOST_PP_REPEAT_3_218(m, d) BOOST_PP_REPEAT_3_217(m, d) m(4, 217, d)
+# define BOOST_PP_REPEAT_3_219(m, d) BOOST_PP_REPEAT_3_218(m, d) m(4, 218, d)
+# define BOOST_PP_REPEAT_3_220(m, d) BOOST_PP_REPEAT_3_219(m, d) m(4, 219, d)
+# define BOOST_PP_REPEAT_3_221(m, d) BOOST_PP_REPEAT_3_220(m, d) m(4, 220, d)
+# define BOOST_PP_REPEAT_3_222(m, d) BOOST_PP_REPEAT_3_221(m, d) m(4, 221, d)
+# define BOOST_PP_REPEAT_3_223(m, d) BOOST_PP_REPEAT_3_222(m, d) m(4, 222, d)
+# define BOOST_PP_REPEAT_3_224(m, d) BOOST_PP_REPEAT_3_223(m, d) m(4, 223, d)
+# define BOOST_PP_REPEAT_3_225(m, d) BOOST_PP_REPEAT_3_224(m, d) m(4, 224, d)
+# define BOOST_PP_REPEAT_3_226(m, d) BOOST_PP_REPEAT_3_225(m, d) m(4, 225, d)
+# define BOOST_PP_REPEAT_3_227(m, d) BOOST_PP_REPEAT_3_226(m, d) m(4, 226, d)
+# define BOOST_PP_REPEAT_3_228(m, d) BOOST_PP_REPEAT_3_227(m, d) m(4, 227, d)
+# define BOOST_PP_REPEAT_3_229(m, d) BOOST_PP_REPEAT_3_228(m, d) m(4, 228, d)
+# define BOOST_PP_REPEAT_3_230(m, d) BOOST_PP_REPEAT_3_229(m, d) m(4, 229, d)
+# define BOOST_PP_REPEAT_3_231(m, d) BOOST_PP_REPEAT_3_230(m, d) m(4, 230, d)
+# define BOOST_PP_REPEAT_3_232(m, d) BOOST_PP_REPEAT_3_231(m, d) m(4, 231, d)
+# define BOOST_PP_REPEAT_3_233(m, d) BOOST_PP_REPEAT_3_232(m, d) m(4, 232, d)
+# define BOOST_PP_REPEAT_3_234(m, d) BOOST_PP_REPEAT_3_233(m, d) m(4, 233, d)
+# define BOOST_PP_REPEAT_3_235(m, d) BOOST_PP_REPEAT_3_234(m, d) m(4, 234, d)
+# define BOOST_PP_REPEAT_3_236(m, d) BOOST_PP_REPEAT_3_235(m, d) m(4, 235, d)
+# define BOOST_PP_REPEAT_3_237(m, d) BOOST_PP_REPEAT_3_236(m, d) m(4, 236, d)
+# define BOOST_PP_REPEAT_3_238(m, d) BOOST_PP_REPEAT_3_237(m, d) m(4, 237, d)
+# define BOOST_PP_REPEAT_3_239(m, d) BOOST_PP_REPEAT_3_238(m, d) m(4, 238, d)
+# define BOOST_PP_REPEAT_3_240(m, d) BOOST_PP_REPEAT_3_239(m, d) m(4, 239, d)
+# define BOOST_PP_REPEAT_3_241(m, d) BOOST_PP_REPEAT_3_240(m, d) m(4, 240, d)
+# define BOOST_PP_REPEAT_3_242(m, d) BOOST_PP_REPEAT_3_241(m, d) m(4, 241, d)
+# define BOOST_PP_REPEAT_3_243(m, d) BOOST_PP_REPEAT_3_242(m, d) m(4, 242, d)
+# define BOOST_PP_REPEAT_3_244(m, d) BOOST_PP_REPEAT_3_243(m, d) m(4, 243, d)
+# define BOOST_PP_REPEAT_3_245(m, d) BOOST_PP_REPEAT_3_244(m, d) m(4, 244, d)
+# define BOOST_PP_REPEAT_3_246(m, d) BOOST_PP_REPEAT_3_245(m, d) m(4, 245, d)
+# define BOOST_PP_REPEAT_3_247(m, d) BOOST_PP_REPEAT_3_246(m, d) m(4, 246, d)
+# define BOOST_PP_REPEAT_3_248(m, d) BOOST_PP_REPEAT_3_247(m, d) m(4, 247, d)
+# define BOOST_PP_REPEAT_3_249(m, d) BOOST_PP_REPEAT_3_248(m, d) m(4, 248, d)
+# define BOOST_PP_REPEAT_3_250(m, d) BOOST_PP_REPEAT_3_249(m, d) m(4, 249, d)
+# define BOOST_PP_REPEAT_3_251(m, d) BOOST_PP_REPEAT_3_250(m, d) m(4, 250, d)
+# define BOOST_PP_REPEAT_3_252(m, d) BOOST_PP_REPEAT_3_251(m, d) m(4, 251, d)
+# define BOOST_PP_REPEAT_3_253(m, d) BOOST_PP_REPEAT_3_252(m, d) m(4, 252, d)
+# define BOOST_PP_REPEAT_3_254(m, d) BOOST_PP_REPEAT_3_253(m, d) m(4, 253, d)
+# define BOOST_PP_REPEAT_3_255(m, d) BOOST_PP_REPEAT_3_254(m, d) m(4, 254, d)
+# define BOOST_PP_REPEAT_3_256(m, d) BOOST_PP_REPEAT_3_255(m, d) m(4, 255, d)
+#
+# endif
diff --git a/boost/boost/preprocessor/repetition/repeat_from_to.hpp b/boost/boost/preprocessor/repetition/repeat_from_to.hpp
new file mode 100644
index 00000000000..efe539e1ded
--- /dev/null
+++ b/boost/boost/preprocessor/repetition/repeat_from_to.hpp
@@ -0,0 +1,87 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_REPETITION_REPEAT_FROM_TO_HPP
+# define BOOST_PREPROCESSOR_REPETITION_REPEAT_FROM_TO_HPP
+#
+# include <boost/preprocessor/arithmetic/add.hpp>
+# include <boost/preprocessor/arithmetic/sub.hpp>
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/control/while.hpp>
+# include <boost/preprocessor/debug/error.hpp>
+# include <boost/preprocessor/detail/auto_rec.hpp>
+# include <boost/preprocessor/repetition/repeat.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+# include <boost/preprocessor/tuple/rem.hpp>
+#
+# /* BOOST_PP_REPEAT_FROM_TO */
+#
+# if 0
+# define BOOST_PP_REPEAT_FROM_TO(first, last, macro, data)
+# endif
+#
+# define BOOST_PP_REPEAT_FROM_TO BOOST_PP_CAT(BOOST_PP_REPEAT_FROM_TO_, BOOST_PP_AUTO_REC(BOOST_PP_REPEAT_P, 4))
+#
+# define BOOST_PP_REPEAT_FROM_TO_1(f, l, m, dt) BOOST_PP_REPEAT_FROM_TO_D_1(BOOST_PP_AUTO_REC(BOOST_PP_WHILE_P, 256), f, l, m, dt)
+# define BOOST_PP_REPEAT_FROM_TO_2(f, l, m, dt) BOOST_PP_REPEAT_FROM_TO_D_2(BOOST_PP_AUTO_REC(BOOST_PP_WHILE_P, 256), f, l, m, dt)
+# define BOOST_PP_REPEAT_FROM_TO_3(f, l, m, dt) BOOST_PP_REPEAT_FROM_TO_D_3(BOOST_PP_AUTO_REC(BOOST_PP_WHILE_P, 256), f, l, m, dt)
+# define BOOST_PP_REPEAT_FROM_TO_4(f, l, m, dt) BOOST_PP_ERROR(0x0003)
+#
+# define BOOST_PP_REPEAT_FROM_TO_1ST BOOST_PP_REPEAT_FROM_TO_1
+# define BOOST_PP_REPEAT_FROM_TO_2ND BOOST_PP_REPEAT_FROM_TO_2
+# define BOOST_PP_REPEAT_FROM_TO_3RD BOOST_PP_REPEAT_FROM_TO_3
+#
+# /* BOOST_PP_REPEAT_FROM_TO_D */
+#
+# if 0
+# define BOOST_PP_REPEAT_FROM_TO_D(d, first, last, macro, data)
+# endif
+#
+# define BOOST_PP_REPEAT_FROM_TO_D BOOST_PP_CAT(BOOST_PP_REPEAT_FROM_TO_D_, BOOST_PP_AUTO_REC(BOOST_PP_REPEAT_P, 4))
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_REPEAT_FROM_TO_D_1(d, f, l, m, dt) BOOST_PP_REPEAT_1(BOOST_PP_SUB_D(d, l, f), BOOST_PP_REPEAT_FROM_TO_M_1, (d, f, m, dt))
+# define BOOST_PP_REPEAT_FROM_TO_D_2(d, f, l, m, dt) BOOST_PP_REPEAT_2(BOOST_PP_SUB_D(d, l, f), BOOST_PP_REPEAT_FROM_TO_M_2, (d, f, m, dt))
+# define BOOST_PP_REPEAT_FROM_TO_D_3(d, f, l, m, dt) BOOST_PP_REPEAT_3(BOOST_PP_SUB_D(d, l, f), BOOST_PP_REPEAT_FROM_TO_M_3, (d, f, m, dt))
+# else
+# define BOOST_PP_REPEAT_FROM_TO_D_1(d, f, l, m, dt) BOOST_PP_REPEAT_FROM_TO_D_1_I(d, f, l, m, dt)
+# define BOOST_PP_REPEAT_FROM_TO_D_2(d, f, l, m, dt) BOOST_PP_REPEAT_FROM_TO_D_2_I(d, f, l, m, dt)
+# define BOOST_PP_REPEAT_FROM_TO_D_3(d, f, l, m, dt) BOOST_PP_REPEAT_FROM_TO_D_3_I(d, f, l, m, dt)
+# define BOOST_PP_REPEAT_FROM_TO_D_1_I(d, f, l, m, dt) BOOST_PP_REPEAT_1(BOOST_PP_SUB_D(d, l, f), BOOST_PP_REPEAT_FROM_TO_M_1, (d, f, m, dt))
+# define BOOST_PP_REPEAT_FROM_TO_D_2_I(d, f, l, m, dt) BOOST_PP_REPEAT_2(BOOST_PP_SUB_D(d, l, f), BOOST_PP_REPEAT_FROM_TO_M_2, (d, f, m, dt))
+# define BOOST_PP_REPEAT_FROM_TO_D_3_I(d, f, l, m, dt) BOOST_PP_REPEAT_3(BOOST_PP_SUB_D(d, l, f), BOOST_PP_REPEAT_FROM_TO_M_3, (d, f, m, dt))
+# endif
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()
+# define BOOST_PP_REPEAT_FROM_TO_M_1(z, n, dfmd) BOOST_PP_REPEAT_FROM_TO_M_1_IM(z, n, BOOST_PP_TUPLE_REM_4 dfmd)
+# define BOOST_PP_REPEAT_FROM_TO_M_2(z, n, dfmd) BOOST_PP_REPEAT_FROM_TO_M_2_IM(z, n, BOOST_PP_TUPLE_REM_4 dfmd)
+# define BOOST_PP_REPEAT_FROM_TO_M_3(z, n, dfmd) BOOST_PP_REPEAT_FROM_TO_M_3_IM(z, n, BOOST_PP_TUPLE_REM_4 dfmd)
+# define BOOST_PP_REPEAT_FROM_TO_M_1_IM(z, n, im) BOOST_PP_REPEAT_FROM_TO_M_1_I(z, n, im)
+# define BOOST_PP_REPEAT_FROM_TO_M_2_IM(z, n, im) BOOST_PP_REPEAT_FROM_TO_M_2_I(z, n, im)
+# define BOOST_PP_REPEAT_FROM_TO_M_3_IM(z, n, im) BOOST_PP_REPEAT_FROM_TO_M_3_I(z, n, im)
+# else
+# define BOOST_PP_REPEAT_FROM_TO_M_1(z, n, dfmd) BOOST_PP_REPEAT_FROM_TO_M_1_I(z, n, BOOST_PP_TUPLE_ELEM(4, 0, dfmd), BOOST_PP_TUPLE_ELEM(4, 1, dfmd), BOOST_PP_TUPLE_ELEM(4, 2, dfmd), BOOST_PP_TUPLE_ELEM(4, 3, dfmd))
+# define BOOST_PP_REPEAT_FROM_TO_M_2(z, n, dfmd) BOOST_PP_REPEAT_FROM_TO_M_2_I(z, n, BOOST_PP_TUPLE_ELEM(4, 0, dfmd), BOOST_PP_TUPLE_ELEM(4, 1, dfmd), BOOST_PP_TUPLE_ELEM(4, 2, dfmd), BOOST_PP_TUPLE_ELEM(4, 3, dfmd))
+# define BOOST_PP_REPEAT_FROM_TO_M_3(z, n, dfmd) BOOST_PP_REPEAT_FROM_TO_M_3_I(z, n, BOOST_PP_TUPLE_ELEM(4, 0, dfmd), BOOST_PP_TUPLE_ELEM(4, 1, dfmd), BOOST_PP_TUPLE_ELEM(4, 2, dfmd), BOOST_PP_TUPLE_ELEM(4, 3, dfmd))
+# endif
+#
+# define BOOST_PP_REPEAT_FROM_TO_M_1_I(z, n, d, f, m, dt) BOOST_PP_REPEAT_FROM_TO_M_1_II(z, BOOST_PP_ADD_D(d, n, f), m, dt)
+# define BOOST_PP_REPEAT_FROM_TO_M_2_I(z, n, d, f, m, dt) BOOST_PP_REPEAT_FROM_TO_M_2_II(z, BOOST_PP_ADD_D(d, n, f), m, dt)
+# define BOOST_PP_REPEAT_FROM_TO_M_3_I(z, n, d, f, m, dt) BOOST_PP_REPEAT_FROM_TO_M_3_II(z, BOOST_PP_ADD_D(d, n, f), m, dt)
+#
+# define BOOST_PP_REPEAT_FROM_TO_M_1_II(z, n, m, dt) m(z, n, dt)
+# define BOOST_PP_REPEAT_FROM_TO_M_2_II(z, n, m, dt) m(z, n, dt)
+# define BOOST_PP_REPEAT_FROM_TO_M_3_II(z, n, m, dt) m(z, n, dt)
+#
+# endif
diff --git a/boost/boost/preprocessor/selection.hpp b/boost/boost/preprocessor/selection.hpp
new file mode 100644
index 00000000000..3b67fad4e38
--- /dev/null
+++ b/boost/boost/preprocessor/selection.hpp
@@ -0,0 +1,18 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SELECTION_HPP
+# define BOOST_PREPROCESSOR_SELECTION_HPP
+#
+# include <boost/preprocessor/selection/max.hpp>
+# include <boost/preprocessor/selection/min.hpp>
+#
+# endif
diff --git a/boost/boost/preprocessor/selection/max.hpp b/boost/boost/preprocessor/selection/max.hpp
new file mode 100644
index 00000000000..407d70205f8
--- /dev/null
+++ b/boost/boost/preprocessor/selection/max.hpp
@@ -0,0 +1,39 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SELECTION_MAX_HPP
+# define BOOST_PREPROCESSOR_SELECTION_MAX_HPP
+#
+# include <boost/preprocessor/comparison/less_equal.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/control/iif.hpp>
+#
+# /* BOOST_PP_MAX */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_MAX(x, y) BOOST_PP_IIF(BOOST_PP_LESS_EQUAL(x, y), y, x)
+# else
+# define BOOST_PP_MAX(x, y) BOOST_PP_MAX_I(x, y)
+# define BOOST_PP_MAX_I(x, y) BOOST_PP_IIF(BOOST_PP_LESS_EQUAL(x, y), y, x)
+# endif
+#
+# /* BOOST_PP_MAX_D */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_MAX_D(d, x, y) BOOST_PP_IIF(BOOST_PP_LESS_EQUAL_D(d, x, y), y, x)
+# else
+# define BOOST_PP_MAX_D(d, x, y) BOOST_PP_MAX_D_I(d, x, y)
+# define BOOST_PP_MAX_D_I(d, x, y) BOOST_PP_IIF(BOOST_PP_LESS_EQUAL_D(d, x, y), y, x)
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/selection/min.hpp b/boost/boost/preprocessor/selection/min.hpp
new file mode 100644
index 00000000000..ee05588bd77
--- /dev/null
+++ b/boost/boost/preprocessor/selection/min.hpp
@@ -0,0 +1,39 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SELECTION_MIN_HPP
+# define BOOST_PREPROCESSOR_SELECTION_MIN_HPP
+#
+# include <boost/preprocessor/comparison/less_equal.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/control/iif.hpp>
+#
+# /* BOOST_PP_MIN */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_MIN(x, y) BOOST_PP_IIF(BOOST_PP_LESS_EQUAL(y, x), y, x)
+# else
+# define BOOST_PP_MIN(x, y) BOOST_PP_MIN_I(x, y)
+# define BOOST_PP_MIN_I(x, y) BOOST_PP_IIF(BOOST_PP_LESS_EQUAL(y, x), y, x)
+# endif
+#
+# /* BOOST_PP_MIN_D */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_MIN_D(d, x, y) BOOST_PP_IIF(BOOST_PP_LESS_EQUAL_D(d, y, x), y, x)
+# else
+# define BOOST_PP_MIN_D(d, x, y) BOOST_PP_MIN_D_I(d, x, y)
+# define BOOST_PP_MIN_D_I(d, x, y) BOOST_PP_IIF(BOOST_PP_LESS_EQUAL_D(d, y, x), y, x)
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/seq.hpp b/boost/boost/preprocessor/seq.hpp
new file mode 100644
index 00000000000..a26a47198fc
--- /dev/null
+++ b/boost/boost/preprocessor/seq.hpp
@@ -0,0 +1,41 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SEQ_HPP
+# define BOOST_PREPROCESSOR_SEQ_HPP
+#
+# include <boost/preprocessor/seq/cat.hpp>
+# include <boost/preprocessor/seq/elem.hpp>
+# include <boost/preprocessor/seq/enum.hpp>
+# include <boost/preprocessor/seq/filter.hpp>
+# include <boost/preprocessor/seq/first_n.hpp>
+# include <boost/preprocessor/seq/fold_left.hpp>
+# include <boost/preprocessor/seq/fold_right.hpp>
+# include <boost/preprocessor/seq/for_each.hpp>
+# include <boost/preprocessor/seq/for_each_i.hpp>
+# include <boost/preprocessor/seq/for_each_product.hpp>
+# include <boost/preprocessor/seq/insert.hpp>
+# include <boost/preprocessor/seq/pop_back.hpp>
+# include <boost/preprocessor/seq/pop_front.hpp>
+# include <boost/preprocessor/seq/push_back.hpp>
+# include <boost/preprocessor/seq/push_front.hpp>
+# include <boost/preprocessor/seq/remove.hpp>
+# include <boost/preprocessor/seq/replace.hpp>
+# include <boost/preprocessor/seq/rest_n.hpp>
+# include <boost/preprocessor/seq/reverse.hpp>
+# include <boost/preprocessor/seq/seq.hpp>
+# include <boost/preprocessor/seq/size.hpp>
+# include <boost/preprocessor/seq/subseq.hpp>
+# include <boost/preprocessor/seq/to_array.hpp>
+# include <boost/preprocessor/seq/to_tuple.hpp>
+# include <boost/preprocessor/seq/transform.hpp>
+#
+# endif
diff --git a/boost/boost/preprocessor/seq/cat.hpp b/boost/boost/preprocessor/seq/cat.hpp
new file mode 100644
index 00000000000..0efd8e55647
--- /dev/null
+++ b/boost/boost/preprocessor/seq/cat.hpp
@@ -0,0 +1,48 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SEQ_CAT_HPP
+# define BOOST_PREPROCESSOR_SEQ_CAT_HPP
+#
+# include <boost/preprocessor/arithmetic/dec.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/control/if.hpp>
+# include <boost/preprocessor/seq/fold_left.hpp>
+# include <boost/preprocessor/seq/seq.hpp>
+# include <boost/preprocessor/seq/size.hpp>
+# include <boost/preprocessor/tuple/eat.hpp>
+#
+# /* BOOST_PP_SEQ_CAT */
+#
+# define BOOST_PP_SEQ_CAT(seq) \
+ BOOST_PP_IF( \
+ BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(seq)), \
+ BOOST_PP_SEQ_CAT_I, \
+ BOOST_PP_SEQ_HEAD(seq) BOOST_PP_TUPLE_EAT_1 \
+ )(seq) \
+ /**/
+# define BOOST_PP_SEQ_CAT_I(seq) BOOST_PP_SEQ_FOLD_LEFT(BOOST_PP_SEQ_CAT_O, BOOST_PP_SEQ_HEAD(seq), BOOST_PP_SEQ_TAIL(seq))
+#
+# define BOOST_PP_SEQ_CAT_O(s, st, elem) BOOST_PP_SEQ_CAT_O_I(st, elem)
+# define BOOST_PP_SEQ_CAT_O_I(a, b) a ## b
+#
+# /* BOOST_PP_SEQ_CAT_S */
+#
+# define BOOST_PP_SEQ_CAT_S(s, seq) \
+ BOOST_PP_IF( \
+ BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(seq)), \
+ BOOST_PP_SEQ_CAT_S_I, \
+ BOOST_PP_SEQ_HEAD(seq) BOOST_PP_TUPLE_EAT_2 \
+ )(s, seq) \
+ /**/
+# define BOOST_PP_SEQ_CAT_S_I(s, seq) BOOST_PP_SEQ_FOLD_LEFT_ ## s(BOOST_PP_SEQ_CAT_O, BOOST_PP_SEQ_HEAD(seq), BOOST_PP_SEQ_TAIL(seq))
+#
+# endif
diff --git a/boost/boost/preprocessor/seq/detail/split.hpp b/boost/boost/preprocessor/seq/detail/split.hpp
new file mode 100644
index 00000000000..7c339319186
--- /dev/null
+++ b/boost/boost/preprocessor/seq/detail/split.hpp
@@ -0,0 +1,284 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SEQ_DETAIL_SPLIT_HPP
+# define BOOST_PREPROCESSOR_SEQ_DETAIL_SPLIT_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+#
+# /* BOOST_PP_SEQ_SPLIT */
+#
+# define BOOST_PP_SEQ_SPLIT(n, seq) BOOST_PP_SEQ_SPLIT_D(n, seq)
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+# define BOOST_PP_SEQ_SPLIT_D(n, seq) (BOOST_PP_SEQ_SPLIT_ ## n seq)
+# else
+# define BOOST_PP_SEQ_SPLIT_D(n, seq) (BOOST_PP_SEQ_SPLIT_ ## n ## seq)
+# endif
+#
+# define BOOST_PP_SEQ_SPLIT_1(x) (x),
+# define BOOST_PP_SEQ_SPLIT_2(x) (x) BOOST_PP_SEQ_SPLIT_1
+# define BOOST_PP_SEQ_SPLIT_3(x) (x) BOOST_PP_SEQ_SPLIT_2
+# define BOOST_PP_SEQ_SPLIT_4(x) (x) BOOST_PP_SEQ_SPLIT_3
+# define BOOST_PP_SEQ_SPLIT_5(x) (x) BOOST_PP_SEQ_SPLIT_4
+# define BOOST_PP_SEQ_SPLIT_6(x) (x) BOOST_PP_SEQ_SPLIT_5
+# define BOOST_PP_SEQ_SPLIT_7(x) (x) BOOST_PP_SEQ_SPLIT_6
+# define BOOST_PP_SEQ_SPLIT_8(x) (x) BOOST_PP_SEQ_SPLIT_7
+# define BOOST_PP_SEQ_SPLIT_9(x) (x) BOOST_PP_SEQ_SPLIT_8
+# define BOOST_PP_SEQ_SPLIT_10(x) (x) BOOST_PP_SEQ_SPLIT_9
+# define BOOST_PP_SEQ_SPLIT_11(x) (x) BOOST_PP_SEQ_SPLIT_10
+# define BOOST_PP_SEQ_SPLIT_12(x) (x) BOOST_PP_SEQ_SPLIT_11
+# define BOOST_PP_SEQ_SPLIT_13(x) (x) BOOST_PP_SEQ_SPLIT_12
+# define BOOST_PP_SEQ_SPLIT_14(x) (x) BOOST_PP_SEQ_SPLIT_13
+# define BOOST_PP_SEQ_SPLIT_15(x) (x) BOOST_PP_SEQ_SPLIT_14
+# define BOOST_PP_SEQ_SPLIT_16(x) (x) BOOST_PP_SEQ_SPLIT_15
+# define BOOST_PP_SEQ_SPLIT_17(x) (x) BOOST_PP_SEQ_SPLIT_16
+# define BOOST_PP_SEQ_SPLIT_18(x) (x) BOOST_PP_SEQ_SPLIT_17
+# define BOOST_PP_SEQ_SPLIT_19(x) (x) BOOST_PP_SEQ_SPLIT_18
+# define BOOST_PP_SEQ_SPLIT_20(x) (x) BOOST_PP_SEQ_SPLIT_19
+# define BOOST_PP_SEQ_SPLIT_21(x) (x) BOOST_PP_SEQ_SPLIT_20
+# define BOOST_PP_SEQ_SPLIT_22(x) (x) BOOST_PP_SEQ_SPLIT_21
+# define BOOST_PP_SEQ_SPLIT_23(x) (x) BOOST_PP_SEQ_SPLIT_22
+# define BOOST_PP_SEQ_SPLIT_24(x) (x) BOOST_PP_SEQ_SPLIT_23
+# define BOOST_PP_SEQ_SPLIT_25(x) (x) BOOST_PP_SEQ_SPLIT_24
+# define BOOST_PP_SEQ_SPLIT_26(x) (x) BOOST_PP_SEQ_SPLIT_25
+# define BOOST_PP_SEQ_SPLIT_27(x) (x) BOOST_PP_SEQ_SPLIT_26
+# define BOOST_PP_SEQ_SPLIT_28(x) (x) BOOST_PP_SEQ_SPLIT_27
+# define BOOST_PP_SEQ_SPLIT_29(x) (x) BOOST_PP_SEQ_SPLIT_28
+# define BOOST_PP_SEQ_SPLIT_30(x) (x) BOOST_PP_SEQ_SPLIT_29
+# define BOOST_PP_SEQ_SPLIT_31(x) (x) BOOST_PP_SEQ_SPLIT_30
+# define BOOST_PP_SEQ_SPLIT_32(x) (x) BOOST_PP_SEQ_SPLIT_31
+# define BOOST_PP_SEQ_SPLIT_33(x) (x) BOOST_PP_SEQ_SPLIT_32
+# define BOOST_PP_SEQ_SPLIT_34(x) (x) BOOST_PP_SEQ_SPLIT_33
+# define BOOST_PP_SEQ_SPLIT_35(x) (x) BOOST_PP_SEQ_SPLIT_34
+# define BOOST_PP_SEQ_SPLIT_36(x) (x) BOOST_PP_SEQ_SPLIT_35
+# define BOOST_PP_SEQ_SPLIT_37(x) (x) BOOST_PP_SEQ_SPLIT_36
+# define BOOST_PP_SEQ_SPLIT_38(x) (x) BOOST_PP_SEQ_SPLIT_37
+# define BOOST_PP_SEQ_SPLIT_39(x) (x) BOOST_PP_SEQ_SPLIT_38
+# define BOOST_PP_SEQ_SPLIT_40(x) (x) BOOST_PP_SEQ_SPLIT_39
+# define BOOST_PP_SEQ_SPLIT_41(x) (x) BOOST_PP_SEQ_SPLIT_40
+# define BOOST_PP_SEQ_SPLIT_42(x) (x) BOOST_PP_SEQ_SPLIT_41
+# define BOOST_PP_SEQ_SPLIT_43(x) (x) BOOST_PP_SEQ_SPLIT_42
+# define BOOST_PP_SEQ_SPLIT_44(x) (x) BOOST_PP_SEQ_SPLIT_43
+# define BOOST_PP_SEQ_SPLIT_45(x) (x) BOOST_PP_SEQ_SPLIT_44
+# define BOOST_PP_SEQ_SPLIT_46(x) (x) BOOST_PP_SEQ_SPLIT_45
+# define BOOST_PP_SEQ_SPLIT_47(x) (x) BOOST_PP_SEQ_SPLIT_46
+# define BOOST_PP_SEQ_SPLIT_48(x) (x) BOOST_PP_SEQ_SPLIT_47
+# define BOOST_PP_SEQ_SPLIT_49(x) (x) BOOST_PP_SEQ_SPLIT_48
+# define BOOST_PP_SEQ_SPLIT_50(x) (x) BOOST_PP_SEQ_SPLIT_49
+# define BOOST_PP_SEQ_SPLIT_51(x) (x) BOOST_PP_SEQ_SPLIT_50
+# define BOOST_PP_SEQ_SPLIT_52(x) (x) BOOST_PP_SEQ_SPLIT_51
+# define BOOST_PP_SEQ_SPLIT_53(x) (x) BOOST_PP_SEQ_SPLIT_52
+# define BOOST_PP_SEQ_SPLIT_54(x) (x) BOOST_PP_SEQ_SPLIT_53
+# define BOOST_PP_SEQ_SPLIT_55(x) (x) BOOST_PP_SEQ_SPLIT_54
+# define BOOST_PP_SEQ_SPLIT_56(x) (x) BOOST_PP_SEQ_SPLIT_55
+# define BOOST_PP_SEQ_SPLIT_57(x) (x) BOOST_PP_SEQ_SPLIT_56
+# define BOOST_PP_SEQ_SPLIT_58(x) (x) BOOST_PP_SEQ_SPLIT_57
+# define BOOST_PP_SEQ_SPLIT_59(x) (x) BOOST_PP_SEQ_SPLIT_58
+# define BOOST_PP_SEQ_SPLIT_60(x) (x) BOOST_PP_SEQ_SPLIT_59
+# define BOOST_PP_SEQ_SPLIT_61(x) (x) BOOST_PP_SEQ_SPLIT_60
+# define BOOST_PP_SEQ_SPLIT_62(x) (x) BOOST_PP_SEQ_SPLIT_61
+# define BOOST_PP_SEQ_SPLIT_63(x) (x) BOOST_PP_SEQ_SPLIT_62
+# define BOOST_PP_SEQ_SPLIT_64(x) (x) BOOST_PP_SEQ_SPLIT_63
+# define BOOST_PP_SEQ_SPLIT_65(x) (x) BOOST_PP_SEQ_SPLIT_64
+# define BOOST_PP_SEQ_SPLIT_66(x) (x) BOOST_PP_SEQ_SPLIT_65
+# define BOOST_PP_SEQ_SPLIT_67(x) (x) BOOST_PP_SEQ_SPLIT_66
+# define BOOST_PP_SEQ_SPLIT_68(x) (x) BOOST_PP_SEQ_SPLIT_67
+# define BOOST_PP_SEQ_SPLIT_69(x) (x) BOOST_PP_SEQ_SPLIT_68
+# define BOOST_PP_SEQ_SPLIT_70(x) (x) BOOST_PP_SEQ_SPLIT_69
+# define BOOST_PP_SEQ_SPLIT_71(x) (x) BOOST_PP_SEQ_SPLIT_70
+# define BOOST_PP_SEQ_SPLIT_72(x) (x) BOOST_PP_SEQ_SPLIT_71
+# define BOOST_PP_SEQ_SPLIT_73(x) (x) BOOST_PP_SEQ_SPLIT_72
+# define BOOST_PP_SEQ_SPLIT_74(x) (x) BOOST_PP_SEQ_SPLIT_73
+# define BOOST_PP_SEQ_SPLIT_75(x) (x) BOOST_PP_SEQ_SPLIT_74
+# define BOOST_PP_SEQ_SPLIT_76(x) (x) BOOST_PP_SEQ_SPLIT_75
+# define BOOST_PP_SEQ_SPLIT_77(x) (x) BOOST_PP_SEQ_SPLIT_76
+# define BOOST_PP_SEQ_SPLIT_78(x) (x) BOOST_PP_SEQ_SPLIT_77
+# define BOOST_PP_SEQ_SPLIT_79(x) (x) BOOST_PP_SEQ_SPLIT_78
+# define BOOST_PP_SEQ_SPLIT_80(x) (x) BOOST_PP_SEQ_SPLIT_79
+# define BOOST_PP_SEQ_SPLIT_81(x) (x) BOOST_PP_SEQ_SPLIT_80
+# define BOOST_PP_SEQ_SPLIT_82(x) (x) BOOST_PP_SEQ_SPLIT_81
+# define BOOST_PP_SEQ_SPLIT_83(x) (x) BOOST_PP_SEQ_SPLIT_82
+# define BOOST_PP_SEQ_SPLIT_84(x) (x) BOOST_PP_SEQ_SPLIT_83
+# define BOOST_PP_SEQ_SPLIT_85(x) (x) BOOST_PP_SEQ_SPLIT_84
+# define BOOST_PP_SEQ_SPLIT_86(x) (x) BOOST_PP_SEQ_SPLIT_85
+# define BOOST_PP_SEQ_SPLIT_87(x) (x) BOOST_PP_SEQ_SPLIT_86
+# define BOOST_PP_SEQ_SPLIT_88(x) (x) BOOST_PP_SEQ_SPLIT_87
+# define BOOST_PP_SEQ_SPLIT_89(x) (x) BOOST_PP_SEQ_SPLIT_88
+# define BOOST_PP_SEQ_SPLIT_90(x) (x) BOOST_PP_SEQ_SPLIT_89
+# define BOOST_PP_SEQ_SPLIT_91(x) (x) BOOST_PP_SEQ_SPLIT_90
+# define BOOST_PP_SEQ_SPLIT_92(x) (x) BOOST_PP_SEQ_SPLIT_91
+# define BOOST_PP_SEQ_SPLIT_93(x) (x) BOOST_PP_SEQ_SPLIT_92
+# define BOOST_PP_SEQ_SPLIT_94(x) (x) BOOST_PP_SEQ_SPLIT_93
+# define BOOST_PP_SEQ_SPLIT_95(x) (x) BOOST_PP_SEQ_SPLIT_94
+# define BOOST_PP_SEQ_SPLIT_96(x) (x) BOOST_PP_SEQ_SPLIT_95
+# define BOOST_PP_SEQ_SPLIT_97(x) (x) BOOST_PP_SEQ_SPLIT_96
+# define BOOST_PP_SEQ_SPLIT_98(x) (x) BOOST_PP_SEQ_SPLIT_97
+# define BOOST_PP_SEQ_SPLIT_99(x) (x) BOOST_PP_SEQ_SPLIT_98
+# define BOOST_PP_SEQ_SPLIT_100(x) (x) BOOST_PP_SEQ_SPLIT_99
+# define BOOST_PP_SEQ_SPLIT_101(x) (x) BOOST_PP_SEQ_SPLIT_100
+# define BOOST_PP_SEQ_SPLIT_102(x) (x) BOOST_PP_SEQ_SPLIT_101
+# define BOOST_PP_SEQ_SPLIT_103(x) (x) BOOST_PP_SEQ_SPLIT_102
+# define BOOST_PP_SEQ_SPLIT_104(x) (x) BOOST_PP_SEQ_SPLIT_103
+# define BOOST_PP_SEQ_SPLIT_105(x) (x) BOOST_PP_SEQ_SPLIT_104
+# define BOOST_PP_SEQ_SPLIT_106(x) (x) BOOST_PP_SEQ_SPLIT_105
+# define BOOST_PP_SEQ_SPLIT_107(x) (x) BOOST_PP_SEQ_SPLIT_106
+# define BOOST_PP_SEQ_SPLIT_108(x) (x) BOOST_PP_SEQ_SPLIT_107
+# define BOOST_PP_SEQ_SPLIT_109(x) (x) BOOST_PP_SEQ_SPLIT_108
+# define BOOST_PP_SEQ_SPLIT_110(x) (x) BOOST_PP_SEQ_SPLIT_109
+# define BOOST_PP_SEQ_SPLIT_111(x) (x) BOOST_PP_SEQ_SPLIT_110
+# define BOOST_PP_SEQ_SPLIT_112(x) (x) BOOST_PP_SEQ_SPLIT_111
+# define BOOST_PP_SEQ_SPLIT_113(x) (x) BOOST_PP_SEQ_SPLIT_112
+# define BOOST_PP_SEQ_SPLIT_114(x) (x) BOOST_PP_SEQ_SPLIT_113
+# define BOOST_PP_SEQ_SPLIT_115(x) (x) BOOST_PP_SEQ_SPLIT_114
+# define BOOST_PP_SEQ_SPLIT_116(x) (x) BOOST_PP_SEQ_SPLIT_115
+# define BOOST_PP_SEQ_SPLIT_117(x) (x) BOOST_PP_SEQ_SPLIT_116
+# define BOOST_PP_SEQ_SPLIT_118(x) (x) BOOST_PP_SEQ_SPLIT_117
+# define BOOST_PP_SEQ_SPLIT_119(x) (x) BOOST_PP_SEQ_SPLIT_118
+# define BOOST_PP_SEQ_SPLIT_120(x) (x) BOOST_PP_SEQ_SPLIT_119
+# define BOOST_PP_SEQ_SPLIT_121(x) (x) BOOST_PP_SEQ_SPLIT_120
+# define BOOST_PP_SEQ_SPLIT_122(x) (x) BOOST_PP_SEQ_SPLIT_121
+# define BOOST_PP_SEQ_SPLIT_123(x) (x) BOOST_PP_SEQ_SPLIT_122
+# define BOOST_PP_SEQ_SPLIT_124(x) (x) BOOST_PP_SEQ_SPLIT_123
+# define BOOST_PP_SEQ_SPLIT_125(x) (x) BOOST_PP_SEQ_SPLIT_124
+# define BOOST_PP_SEQ_SPLIT_126(x) (x) BOOST_PP_SEQ_SPLIT_125
+# define BOOST_PP_SEQ_SPLIT_127(x) (x) BOOST_PP_SEQ_SPLIT_126
+# define BOOST_PP_SEQ_SPLIT_128(x) (x) BOOST_PP_SEQ_SPLIT_127
+# define BOOST_PP_SEQ_SPLIT_129(x) (x) BOOST_PP_SEQ_SPLIT_128
+# define BOOST_PP_SEQ_SPLIT_130(x) (x) BOOST_PP_SEQ_SPLIT_129
+# define BOOST_PP_SEQ_SPLIT_131(x) (x) BOOST_PP_SEQ_SPLIT_130
+# define BOOST_PP_SEQ_SPLIT_132(x) (x) BOOST_PP_SEQ_SPLIT_131
+# define BOOST_PP_SEQ_SPLIT_133(x) (x) BOOST_PP_SEQ_SPLIT_132
+# define BOOST_PP_SEQ_SPLIT_134(x) (x) BOOST_PP_SEQ_SPLIT_133
+# define BOOST_PP_SEQ_SPLIT_135(x) (x) BOOST_PP_SEQ_SPLIT_134
+# define BOOST_PP_SEQ_SPLIT_136(x) (x) BOOST_PP_SEQ_SPLIT_135
+# define BOOST_PP_SEQ_SPLIT_137(x) (x) BOOST_PP_SEQ_SPLIT_136
+# define BOOST_PP_SEQ_SPLIT_138(x) (x) BOOST_PP_SEQ_SPLIT_137
+# define BOOST_PP_SEQ_SPLIT_139(x) (x) BOOST_PP_SEQ_SPLIT_138
+# define BOOST_PP_SEQ_SPLIT_140(x) (x) BOOST_PP_SEQ_SPLIT_139
+# define BOOST_PP_SEQ_SPLIT_141(x) (x) BOOST_PP_SEQ_SPLIT_140
+# define BOOST_PP_SEQ_SPLIT_142(x) (x) BOOST_PP_SEQ_SPLIT_141
+# define BOOST_PP_SEQ_SPLIT_143(x) (x) BOOST_PP_SEQ_SPLIT_142
+# define BOOST_PP_SEQ_SPLIT_144(x) (x) BOOST_PP_SEQ_SPLIT_143
+# define BOOST_PP_SEQ_SPLIT_145(x) (x) BOOST_PP_SEQ_SPLIT_144
+# define BOOST_PP_SEQ_SPLIT_146(x) (x) BOOST_PP_SEQ_SPLIT_145
+# define BOOST_PP_SEQ_SPLIT_147(x) (x) BOOST_PP_SEQ_SPLIT_146
+# define BOOST_PP_SEQ_SPLIT_148(x) (x) BOOST_PP_SEQ_SPLIT_147
+# define BOOST_PP_SEQ_SPLIT_149(x) (x) BOOST_PP_SEQ_SPLIT_148
+# define BOOST_PP_SEQ_SPLIT_150(x) (x) BOOST_PP_SEQ_SPLIT_149
+# define BOOST_PP_SEQ_SPLIT_151(x) (x) BOOST_PP_SEQ_SPLIT_150
+# define BOOST_PP_SEQ_SPLIT_152(x) (x) BOOST_PP_SEQ_SPLIT_151
+# define BOOST_PP_SEQ_SPLIT_153(x) (x) BOOST_PP_SEQ_SPLIT_152
+# define BOOST_PP_SEQ_SPLIT_154(x) (x) BOOST_PP_SEQ_SPLIT_153
+# define BOOST_PP_SEQ_SPLIT_155(x) (x) BOOST_PP_SEQ_SPLIT_154
+# define BOOST_PP_SEQ_SPLIT_156(x) (x) BOOST_PP_SEQ_SPLIT_155
+# define BOOST_PP_SEQ_SPLIT_157(x) (x) BOOST_PP_SEQ_SPLIT_156
+# define BOOST_PP_SEQ_SPLIT_158(x) (x) BOOST_PP_SEQ_SPLIT_157
+# define BOOST_PP_SEQ_SPLIT_159(x) (x) BOOST_PP_SEQ_SPLIT_158
+# define BOOST_PP_SEQ_SPLIT_160(x) (x) BOOST_PP_SEQ_SPLIT_159
+# define BOOST_PP_SEQ_SPLIT_161(x) (x) BOOST_PP_SEQ_SPLIT_160
+# define BOOST_PP_SEQ_SPLIT_162(x) (x) BOOST_PP_SEQ_SPLIT_161
+# define BOOST_PP_SEQ_SPLIT_163(x) (x) BOOST_PP_SEQ_SPLIT_162
+# define BOOST_PP_SEQ_SPLIT_164(x) (x) BOOST_PP_SEQ_SPLIT_163
+# define BOOST_PP_SEQ_SPLIT_165(x) (x) BOOST_PP_SEQ_SPLIT_164
+# define BOOST_PP_SEQ_SPLIT_166(x) (x) BOOST_PP_SEQ_SPLIT_165
+# define BOOST_PP_SEQ_SPLIT_167(x) (x) BOOST_PP_SEQ_SPLIT_166
+# define BOOST_PP_SEQ_SPLIT_168(x) (x) BOOST_PP_SEQ_SPLIT_167
+# define BOOST_PP_SEQ_SPLIT_169(x) (x) BOOST_PP_SEQ_SPLIT_168
+# define BOOST_PP_SEQ_SPLIT_170(x) (x) BOOST_PP_SEQ_SPLIT_169
+# define BOOST_PP_SEQ_SPLIT_171(x) (x) BOOST_PP_SEQ_SPLIT_170
+# define BOOST_PP_SEQ_SPLIT_172(x) (x) BOOST_PP_SEQ_SPLIT_171
+# define BOOST_PP_SEQ_SPLIT_173(x) (x) BOOST_PP_SEQ_SPLIT_172
+# define BOOST_PP_SEQ_SPLIT_174(x) (x) BOOST_PP_SEQ_SPLIT_173
+# define BOOST_PP_SEQ_SPLIT_175(x) (x) BOOST_PP_SEQ_SPLIT_174
+# define BOOST_PP_SEQ_SPLIT_176(x) (x) BOOST_PP_SEQ_SPLIT_175
+# define BOOST_PP_SEQ_SPLIT_177(x) (x) BOOST_PP_SEQ_SPLIT_176
+# define BOOST_PP_SEQ_SPLIT_178(x) (x) BOOST_PP_SEQ_SPLIT_177
+# define BOOST_PP_SEQ_SPLIT_179(x) (x) BOOST_PP_SEQ_SPLIT_178
+# define BOOST_PP_SEQ_SPLIT_180(x) (x) BOOST_PP_SEQ_SPLIT_179
+# define BOOST_PP_SEQ_SPLIT_181(x) (x) BOOST_PP_SEQ_SPLIT_180
+# define BOOST_PP_SEQ_SPLIT_182(x) (x) BOOST_PP_SEQ_SPLIT_181
+# define BOOST_PP_SEQ_SPLIT_183(x) (x) BOOST_PP_SEQ_SPLIT_182
+# define BOOST_PP_SEQ_SPLIT_184(x) (x) BOOST_PP_SEQ_SPLIT_183
+# define BOOST_PP_SEQ_SPLIT_185(x) (x) BOOST_PP_SEQ_SPLIT_184
+# define BOOST_PP_SEQ_SPLIT_186(x) (x) BOOST_PP_SEQ_SPLIT_185
+# define BOOST_PP_SEQ_SPLIT_187(x) (x) BOOST_PP_SEQ_SPLIT_186
+# define BOOST_PP_SEQ_SPLIT_188(x) (x) BOOST_PP_SEQ_SPLIT_187
+# define BOOST_PP_SEQ_SPLIT_189(x) (x) BOOST_PP_SEQ_SPLIT_188
+# define BOOST_PP_SEQ_SPLIT_190(x) (x) BOOST_PP_SEQ_SPLIT_189
+# define BOOST_PP_SEQ_SPLIT_191(x) (x) BOOST_PP_SEQ_SPLIT_190
+# define BOOST_PP_SEQ_SPLIT_192(x) (x) BOOST_PP_SEQ_SPLIT_191
+# define BOOST_PP_SEQ_SPLIT_193(x) (x) BOOST_PP_SEQ_SPLIT_192
+# define BOOST_PP_SEQ_SPLIT_194(x) (x) BOOST_PP_SEQ_SPLIT_193
+# define BOOST_PP_SEQ_SPLIT_195(x) (x) BOOST_PP_SEQ_SPLIT_194
+# define BOOST_PP_SEQ_SPLIT_196(x) (x) BOOST_PP_SEQ_SPLIT_195
+# define BOOST_PP_SEQ_SPLIT_197(x) (x) BOOST_PP_SEQ_SPLIT_196
+# define BOOST_PP_SEQ_SPLIT_198(x) (x) BOOST_PP_SEQ_SPLIT_197
+# define BOOST_PP_SEQ_SPLIT_199(x) (x) BOOST_PP_SEQ_SPLIT_198
+# define BOOST_PP_SEQ_SPLIT_200(x) (x) BOOST_PP_SEQ_SPLIT_199
+# define BOOST_PP_SEQ_SPLIT_201(x) (x) BOOST_PP_SEQ_SPLIT_200
+# define BOOST_PP_SEQ_SPLIT_202(x) (x) BOOST_PP_SEQ_SPLIT_201
+# define BOOST_PP_SEQ_SPLIT_203(x) (x) BOOST_PP_SEQ_SPLIT_202
+# define BOOST_PP_SEQ_SPLIT_204(x) (x) BOOST_PP_SEQ_SPLIT_203
+# define BOOST_PP_SEQ_SPLIT_205(x) (x) BOOST_PP_SEQ_SPLIT_204
+# define BOOST_PP_SEQ_SPLIT_206(x) (x) BOOST_PP_SEQ_SPLIT_205
+# define BOOST_PP_SEQ_SPLIT_207(x) (x) BOOST_PP_SEQ_SPLIT_206
+# define BOOST_PP_SEQ_SPLIT_208(x) (x) BOOST_PP_SEQ_SPLIT_207
+# define BOOST_PP_SEQ_SPLIT_209(x) (x) BOOST_PP_SEQ_SPLIT_208
+# define BOOST_PP_SEQ_SPLIT_210(x) (x) BOOST_PP_SEQ_SPLIT_209
+# define BOOST_PP_SEQ_SPLIT_211(x) (x) BOOST_PP_SEQ_SPLIT_210
+# define BOOST_PP_SEQ_SPLIT_212(x) (x) BOOST_PP_SEQ_SPLIT_211
+# define BOOST_PP_SEQ_SPLIT_213(x) (x) BOOST_PP_SEQ_SPLIT_212
+# define BOOST_PP_SEQ_SPLIT_214(x) (x) BOOST_PP_SEQ_SPLIT_213
+# define BOOST_PP_SEQ_SPLIT_215(x) (x) BOOST_PP_SEQ_SPLIT_214
+# define BOOST_PP_SEQ_SPLIT_216(x) (x) BOOST_PP_SEQ_SPLIT_215
+# define BOOST_PP_SEQ_SPLIT_217(x) (x) BOOST_PP_SEQ_SPLIT_216
+# define BOOST_PP_SEQ_SPLIT_218(x) (x) BOOST_PP_SEQ_SPLIT_217
+# define BOOST_PP_SEQ_SPLIT_219(x) (x) BOOST_PP_SEQ_SPLIT_218
+# define BOOST_PP_SEQ_SPLIT_220(x) (x) BOOST_PP_SEQ_SPLIT_219
+# define BOOST_PP_SEQ_SPLIT_221(x) (x) BOOST_PP_SEQ_SPLIT_220
+# define BOOST_PP_SEQ_SPLIT_222(x) (x) BOOST_PP_SEQ_SPLIT_221
+# define BOOST_PP_SEQ_SPLIT_223(x) (x) BOOST_PP_SEQ_SPLIT_222
+# define BOOST_PP_SEQ_SPLIT_224(x) (x) BOOST_PP_SEQ_SPLIT_223
+# define BOOST_PP_SEQ_SPLIT_225(x) (x) BOOST_PP_SEQ_SPLIT_224
+# define BOOST_PP_SEQ_SPLIT_226(x) (x) BOOST_PP_SEQ_SPLIT_225
+# define BOOST_PP_SEQ_SPLIT_227(x) (x) BOOST_PP_SEQ_SPLIT_226
+# define BOOST_PP_SEQ_SPLIT_228(x) (x) BOOST_PP_SEQ_SPLIT_227
+# define BOOST_PP_SEQ_SPLIT_229(x) (x) BOOST_PP_SEQ_SPLIT_228
+# define BOOST_PP_SEQ_SPLIT_230(x) (x) BOOST_PP_SEQ_SPLIT_229
+# define BOOST_PP_SEQ_SPLIT_231(x) (x) BOOST_PP_SEQ_SPLIT_230
+# define BOOST_PP_SEQ_SPLIT_232(x) (x) BOOST_PP_SEQ_SPLIT_231
+# define BOOST_PP_SEQ_SPLIT_233(x) (x) BOOST_PP_SEQ_SPLIT_232
+# define BOOST_PP_SEQ_SPLIT_234(x) (x) BOOST_PP_SEQ_SPLIT_233
+# define BOOST_PP_SEQ_SPLIT_235(x) (x) BOOST_PP_SEQ_SPLIT_234
+# define BOOST_PP_SEQ_SPLIT_236(x) (x) BOOST_PP_SEQ_SPLIT_235
+# define BOOST_PP_SEQ_SPLIT_237(x) (x) BOOST_PP_SEQ_SPLIT_236
+# define BOOST_PP_SEQ_SPLIT_238(x) (x) BOOST_PP_SEQ_SPLIT_237
+# define BOOST_PP_SEQ_SPLIT_239(x) (x) BOOST_PP_SEQ_SPLIT_238
+# define BOOST_PP_SEQ_SPLIT_240(x) (x) BOOST_PP_SEQ_SPLIT_239
+# define BOOST_PP_SEQ_SPLIT_241(x) (x) BOOST_PP_SEQ_SPLIT_240
+# define BOOST_PP_SEQ_SPLIT_242(x) (x) BOOST_PP_SEQ_SPLIT_241
+# define BOOST_PP_SEQ_SPLIT_243(x) (x) BOOST_PP_SEQ_SPLIT_242
+# define BOOST_PP_SEQ_SPLIT_244(x) (x) BOOST_PP_SEQ_SPLIT_243
+# define BOOST_PP_SEQ_SPLIT_245(x) (x) BOOST_PP_SEQ_SPLIT_244
+# define BOOST_PP_SEQ_SPLIT_246(x) (x) BOOST_PP_SEQ_SPLIT_245
+# define BOOST_PP_SEQ_SPLIT_247(x) (x) BOOST_PP_SEQ_SPLIT_246
+# define BOOST_PP_SEQ_SPLIT_248(x) (x) BOOST_PP_SEQ_SPLIT_247
+# define BOOST_PP_SEQ_SPLIT_249(x) (x) BOOST_PP_SEQ_SPLIT_248
+# define BOOST_PP_SEQ_SPLIT_250(x) (x) BOOST_PP_SEQ_SPLIT_249
+# define BOOST_PP_SEQ_SPLIT_251(x) (x) BOOST_PP_SEQ_SPLIT_250
+# define BOOST_PP_SEQ_SPLIT_252(x) (x) BOOST_PP_SEQ_SPLIT_251
+# define BOOST_PP_SEQ_SPLIT_253(x) (x) BOOST_PP_SEQ_SPLIT_252
+# define BOOST_PP_SEQ_SPLIT_254(x) (x) BOOST_PP_SEQ_SPLIT_253
+# define BOOST_PP_SEQ_SPLIT_255(x) (x) BOOST_PP_SEQ_SPLIT_254
+# define BOOST_PP_SEQ_SPLIT_256(x) (x) BOOST_PP_SEQ_SPLIT_255
+#
+# endif
diff --git a/boost/boost/preprocessor/seq/elem.hpp b/boost/boost/preprocessor/seq/elem.hpp
new file mode 100644
index 00000000000..9c7a4b27665
--- /dev/null
+++ b/boost/boost/preprocessor/seq/elem.hpp
@@ -0,0 +1,304 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SEQ_ELEM_HPP
+# define BOOST_PREPROCESSOR_SEQ_ELEM_HPP
+#
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/facilities/empty.hpp>
+#
+# /* BOOST_PP_SEQ_ELEM */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+# define BOOST_PP_SEQ_ELEM(i, seq) BOOST_PP_SEQ_ELEM_I(i, seq)
+# else
+# define BOOST_PP_SEQ_ELEM(i, seq) BOOST_PP_SEQ_ELEM_I((i, seq))
+# endif
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()
+# define BOOST_PP_SEQ_ELEM_I(i, seq) BOOST_PP_SEQ_ELEM_II((BOOST_PP_SEQ_ELEM_ ## i seq))
+# define BOOST_PP_SEQ_ELEM_II(res) BOOST_PP_SEQ_ELEM_IV(BOOST_PP_SEQ_ELEM_III res)
+# define BOOST_PP_SEQ_ELEM_III(x, _) x BOOST_PP_EMPTY()
+# define BOOST_PP_SEQ_ELEM_IV(x) x
+# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+# define BOOST_PP_SEQ_ELEM_I(par) BOOST_PP_SEQ_ELEM_II ## par
+# define BOOST_PP_SEQ_ELEM_II(i, seq) BOOST_PP_SEQ_ELEM_III(BOOST_PP_SEQ_ELEM_ ## i ## seq)
+# define BOOST_PP_SEQ_ELEM_III(im) BOOST_PP_SEQ_ELEM_IV(im)
+# define BOOST_PP_SEQ_ELEM_IV(x, _) x
+# else
+# if defined(__IBMC__) || defined(__IBMCPP__)
+# define BOOST_PP_SEQ_ELEM_I(i, seq) BOOST_PP_SEQ_ELEM_II(BOOST_PP_CAT(BOOST_PP_SEQ_ELEM_ ## i, seq))
+# else
+# define BOOST_PP_SEQ_ELEM_I(i, seq) BOOST_PP_SEQ_ELEM_II(BOOST_PP_SEQ_ELEM_ ## i seq)
+# endif
+# define BOOST_PP_SEQ_ELEM_II(im) BOOST_PP_SEQ_ELEM_III(im)
+# define BOOST_PP_SEQ_ELEM_III(x, _) x
+# endif
+#
+# define BOOST_PP_SEQ_ELEM_0(x) x, BOOST_PP_NIL
+# define BOOST_PP_SEQ_ELEM_1(_) BOOST_PP_SEQ_ELEM_0
+# define BOOST_PP_SEQ_ELEM_2(_) BOOST_PP_SEQ_ELEM_1
+# define BOOST_PP_SEQ_ELEM_3(_) BOOST_PP_SEQ_ELEM_2
+# define BOOST_PP_SEQ_ELEM_4(_) BOOST_PP_SEQ_ELEM_3
+# define BOOST_PP_SEQ_ELEM_5(_) BOOST_PP_SEQ_ELEM_4
+# define BOOST_PP_SEQ_ELEM_6(_) BOOST_PP_SEQ_ELEM_5
+# define BOOST_PP_SEQ_ELEM_7(_) BOOST_PP_SEQ_ELEM_6
+# define BOOST_PP_SEQ_ELEM_8(_) BOOST_PP_SEQ_ELEM_7
+# define BOOST_PP_SEQ_ELEM_9(_) BOOST_PP_SEQ_ELEM_8
+# define BOOST_PP_SEQ_ELEM_10(_) BOOST_PP_SEQ_ELEM_9
+# define BOOST_PP_SEQ_ELEM_11(_) BOOST_PP_SEQ_ELEM_10
+# define BOOST_PP_SEQ_ELEM_12(_) BOOST_PP_SEQ_ELEM_11
+# define BOOST_PP_SEQ_ELEM_13(_) BOOST_PP_SEQ_ELEM_12
+# define BOOST_PP_SEQ_ELEM_14(_) BOOST_PP_SEQ_ELEM_13
+# define BOOST_PP_SEQ_ELEM_15(_) BOOST_PP_SEQ_ELEM_14
+# define BOOST_PP_SEQ_ELEM_16(_) BOOST_PP_SEQ_ELEM_15
+# define BOOST_PP_SEQ_ELEM_17(_) BOOST_PP_SEQ_ELEM_16
+# define BOOST_PP_SEQ_ELEM_18(_) BOOST_PP_SEQ_ELEM_17
+# define BOOST_PP_SEQ_ELEM_19(_) BOOST_PP_SEQ_ELEM_18
+# define BOOST_PP_SEQ_ELEM_20(_) BOOST_PP_SEQ_ELEM_19
+# define BOOST_PP_SEQ_ELEM_21(_) BOOST_PP_SEQ_ELEM_20
+# define BOOST_PP_SEQ_ELEM_22(_) BOOST_PP_SEQ_ELEM_21
+# define BOOST_PP_SEQ_ELEM_23(_) BOOST_PP_SEQ_ELEM_22
+# define BOOST_PP_SEQ_ELEM_24(_) BOOST_PP_SEQ_ELEM_23
+# define BOOST_PP_SEQ_ELEM_25(_) BOOST_PP_SEQ_ELEM_24
+# define BOOST_PP_SEQ_ELEM_26(_) BOOST_PP_SEQ_ELEM_25
+# define BOOST_PP_SEQ_ELEM_27(_) BOOST_PP_SEQ_ELEM_26
+# define BOOST_PP_SEQ_ELEM_28(_) BOOST_PP_SEQ_ELEM_27
+# define BOOST_PP_SEQ_ELEM_29(_) BOOST_PP_SEQ_ELEM_28
+# define BOOST_PP_SEQ_ELEM_30(_) BOOST_PP_SEQ_ELEM_29
+# define BOOST_PP_SEQ_ELEM_31(_) BOOST_PP_SEQ_ELEM_30
+# define BOOST_PP_SEQ_ELEM_32(_) BOOST_PP_SEQ_ELEM_31
+# define BOOST_PP_SEQ_ELEM_33(_) BOOST_PP_SEQ_ELEM_32
+# define BOOST_PP_SEQ_ELEM_34(_) BOOST_PP_SEQ_ELEM_33
+# define BOOST_PP_SEQ_ELEM_35(_) BOOST_PP_SEQ_ELEM_34
+# define BOOST_PP_SEQ_ELEM_36(_) BOOST_PP_SEQ_ELEM_35
+# define BOOST_PP_SEQ_ELEM_37(_) BOOST_PP_SEQ_ELEM_36
+# define BOOST_PP_SEQ_ELEM_38(_) BOOST_PP_SEQ_ELEM_37
+# define BOOST_PP_SEQ_ELEM_39(_) BOOST_PP_SEQ_ELEM_38
+# define BOOST_PP_SEQ_ELEM_40(_) BOOST_PP_SEQ_ELEM_39
+# define BOOST_PP_SEQ_ELEM_41(_) BOOST_PP_SEQ_ELEM_40
+# define BOOST_PP_SEQ_ELEM_42(_) BOOST_PP_SEQ_ELEM_41
+# define BOOST_PP_SEQ_ELEM_43(_) BOOST_PP_SEQ_ELEM_42
+# define BOOST_PP_SEQ_ELEM_44(_) BOOST_PP_SEQ_ELEM_43
+# define BOOST_PP_SEQ_ELEM_45(_) BOOST_PP_SEQ_ELEM_44
+# define BOOST_PP_SEQ_ELEM_46(_) BOOST_PP_SEQ_ELEM_45
+# define BOOST_PP_SEQ_ELEM_47(_) BOOST_PP_SEQ_ELEM_46
+# define BOOST_PP_SEQ_ELEM_48(_) BOOST_PP_SEQ_ELEM_47
+# define BOOST_PP_SEQ_ELEM_49(_) BOOST_PP_SEQ_ELEM_48
+# define BOOST_PP_SEQ_ELEM_50(_) BOOST_PP_SEQ_ELEM_49
+# define BOOST_PP_SEQ_ELEM_51(_) BOOST_PP_SEQ_ELEM_50
+# define BOOST_PP_SEQ_ELEM_52(_) BOOST_PP_SEQ_ELEM_51
+# define BOOST_PP_SEQ_ELEM_53(_) BOOST_PP_SEQ_ELEM_52
+# define BOOST_PP_SEQ_ELEM_54(_) BOOST_PP_SEQ_ELEM_53
+# define BOOST_PP_SEQ_ELEM_55(_) BOOST_PP_SEQ_ELEM_54
+# define BOOST_PP_SEQ_ELEM_56(_) BOOST_PP_SEQ_ELEM_55
+# define BOOST_PP_SEQ_ELEM_57(_) BOOST_PP_SEQ_ELEM_56
+# define BOOST_PP_SEQ_ELEM_58(_) BOOST_PP_SEQ_ELEM_57
+# define BOOST_PP_SEQ_ELEM_59(_) BOOST_PP_SEQ_ELEM_58
+# define BOOST_PP_SEQ_ELEM_60(_) BOOST_PP_SEQ_ELEM_59
+# define BOOST_PP_SEQ_ELEM_61(_) BOOST_PP_SEQ_ELEM_60
+# define BOOST_PP_SEQ_ELEM_62(_) BOOST_PP_SEQ_ELEM_61
+# define BOOST_PP_SEQ_ELEM_63(_) BOOST_PP_SEQ_ELEM_62
+# define BOOST_PP_SEQ_ELEM_64(_) BOOST_PP_SEQ_ELEM_63
+# define BOOST_PP_SEQ_ELEM_65(_) BOOST_PP_SEQ_ELEM_64
+# define BOOST_PP_SEQ_ELEM_66(_) BOOST_PP_SEQ_ELEM_65
+# define BOOST_PP_SEQ_ELEM_67(_) BOOST_PP_SEQ_ELEM_66
+# define BOOST_PP_SEQ_ELEM_68(_) BOOST_PP_SEQ_ELEM_67
+# define BOOST_PP_SEQ_ELEM_69(_) BOOST_PP_SEQ_ELEM_68
+# define BOOST_PP_SEQ_ELEM_70(_) BOOST_PP_SEQ_ELEM_69
+# define BOOST_PP_SEQ_ELEM_71(_) BOOST_PP_SEQ_ELEM_70
+# define BOOST_PP_SEQ_ELEM_72(_) BOOST_PP_SEQ_ELEM_71
+# define BOOST_PP_SEQ_ELEM_73(_) BOOST_PP_SEQ_ELEM_72
+# define BOOST_PP_SEQ_ELEM_74(_) BOOST_PP_SEQ_ELEM_73
+# define BOOST_PP_SEQ_ELEM_75(_) BOOST_PP_SEQ_ELEM_74
+# define BOOST_PP_SEQ_ELEM_76(_) BOOST_PP_SEQ_ELEM_75
+# define BOOST_PP_SEQ_ELEM_77(_) BOOST_PP_SEQ_ELEM_76
+# define BOOST_PP_SEQ_ELEM_78(_) BOOST_PP_SEQ_ELEM_77
+# define BOOST_PP_SEQ_ELEM_79(_) BOOST_PP_SEQ_ELEM_78
+# define BOOST_PP_SEQ_ELEM_80(_) BOOST_PP_SEQ_ELEM_79
+# define BOOST_PP_SEQ_ELEM_81(_) BOOST_PP_SEQ_ELEM_80
+# define BOOST_PP_SEQ_ELEM_82(_) BOOST_PP_SEQ_ELEM_81
+# define BOOST_PP_SEQ_ELEM_83(_) BOOST_PP_SEQ_ELEM_82
+# define BOOST_PP_SEQ_ELEM_84(_) BOOST_PP_SEQ_ELEM_83
+# define BOOST_PP_SEQ_ELEM_85(_) BOOST_PP_SEQ_ELEM_84
+# define BOOST_PP_SEQ_ELEM_86(_) BOOST_PP_SEQ_ELEM_85
+# define BOOST_PP_SEQ_ELEM_87(_) BOOST_PP_SEQ_ELEM_86
+# define BOOST_PP_SEQ_ELEM_88(_) BOOST_PP_SEQ_ELEM_87
+# define BOOST_PP_SEQ_ELEM_89(_) BOOST_PP_SEQ_ELEM_88
+# define BOOST_PP_SEQ_ELEM_90(_) BOOST_PP_SEQ_ELEM_89
+# define BOOST_PP_SEQ_ELEM_91(_) BOOST_PP_SEQ_ELEM_90
+# define BOOST_PP_SEQ_ELEM_92(_) BOOST_PP_SEQ_ELEM_91
+# define BOOST_PP_SEQ_ELEM_93(_) BOOST_PP_SEQ_ELEM_92
+# define BOOST_PP_SEQ_ELEM_94(_) BOOST_PP_SEQ_ELEM_93
+# define BOOST_PP_SEQ_ELEM_95(_) BOOST_PP_SEQ_ELEM_94
+# define BOOST_PP_SEQ_ELEM_96(_) BOOST_PP_SEQ_ELEM_95
+# define BOOST_PP_SEQ_ELEM_97(_) BOOST_PP_SEQ_ELEM_96
+# define BOOST_PP_SEQ_ELEM_98(_) BOOST_PP_SEQ_ELEM_97
+# define BOOST_PP_SEQ_ELEM_99(_) BOOST_PP_SEQ_ELEM_98
+# define BOOST_PP_SEQ_ELEM_100(_) BOOST_PP_SEQ_ELEM_99
+# define BOOST_PP_SEQ_ELEM_101(_) BOOST_PP_SEQ_ELEM_100
+# define BOOST_PP_SEQ_ELEM_102(_) BOOST_PP_SEQ_ELEM_101
+# define BOOST_PP_SEQ_ELEM_103(_) BOOST_PP_SEQ_ELEM_102
+# define BOOST_PP_SEQ_ELEM_104(_) BOOST_PP_SEQ_ELEM_103
+# define BOOST_PP_SEQ_ELEM_105(_) BOOST_PP_SEQ_ELEM_104
+# define BOOST_PP_SEQ_ELEM_106(_) BOOST_PP_SEQ_ELEM_105
+# define BOOST_PP_SEQ_ELEM_107(_) BOOST_PP_SEQ_ELEM_106
+# define BOOST_PP_SEQ_ELEM_108(_) BOOST_PP_SEQ_ELEM_107
+# define BOOST_PP_SEQ_ELEM_109(_) BOOST_PP_SEQ_ELEM_108
+# define BOOST_PP_SEQ_ELEM_110(_) BOOST_PP_SEQ_ELEM_109
+# define BOOST_PP_SEQ_ELEM_111(_) BOOST_PP_SEQ_ELEM_110
+# define BOOST_PP_SEQ_ELEM_112(_) BOOST_PP_SEQ_ELEM_111
+# define BOOST_PP_SEQ_ELEM_113(_) BOOST_PP_SEQ_ELEM_112
+# define BOOST_PP_SEQ_ELEM_114(_) BOOST_PP_SEQ_ELEM_113
+# define BOOST_PP_SEQ_ELEM_115(_) BOOST_PP_SEQ_ELEM_114
+# define BOOST_PP_SEQ_ELEM_116(_) BOOST_PP_SEQ_ELEM_115
+# define BOOST_PP_SEQ_ELEM_117(_) BOOST_PP_SEQ_ELEM_116
+# define BOOST_PP_SEQ_ELEM_118(_) BOOST_PP_SEQ_ELEM_117
+# define BOOST_PP_SEQ_ELEM_119(_) BOOST_PP_SEQ_ELEM_118
+# define BOOST_PP_SEQ_ELEM_120(_) BOOST_PP_SEQ_ELEM_119
+# define BOOST_PP_SEQ_ELEM_121(_) BOOST_PP_SEQ_ELEM_120
+# define BOOST_PP_SEQ_ELEM_122(_) BOOST_PP_SEQ_ELEM_121
+# define BOOST_PP_SEQ_ELEM_123(_) BOOST_PP_SEQ_ELEM_122
+# define BOOST_PP_SEQ_ELEM_124(_) BOOST_PP_SEQ_ELEM_123
+# define BOOST_PP_SEQ_ELEM_125(_) BOOST_PP_SEQ_ELEM_124
+# define BOOST_PP_SEQ_ELEM_126(_) BOOST_PP_SEQ_ELEM_125
+# define BOOST_PP_SEQ_ELEM_127(_) BOOST_PP_SEQ_ELEM_126
+# define BOOST_PP_SEQ_ELEM_128(_) BOOST_PP_SEQ_ELEM_127
+# define BOOST_PP_SEQ_ELEM_129(_) BOOST_PP_SEQ_ELEM_128
+# define BOOST_PP_SEQ_ELEM_130(_) BOOST_PP_SEQ_ELEM_129
+# define BOOST_PP_SEQ_ELEM_131(_) BOOST_PP_SEQ_ELEM_130
+# define BOOST_PP_SEQ_ELEM_132(_) BOOST_PP_SEQ_ELEM_131
+# define BOOST_PP_SEQ_ELEM_133(_) BOOST_PP_SEQ_ELEM_132
+# define BOOST_PP_SEQ_ELEM_134(_) BOOST_PP_SEQ_ELEM_133
+# define BOOST_PP_SEQ_ELEM_135(_) BOOST_PP_SEQ_ELEM_134
+# define BOOST_PP_SEQ_ELEM_136(_) BOOST_PP_SEQ_ELEM_135
+# define BOOST_PP_SEQ_ELEM_137(_) BOOST_PP_SEQ_ELEM_136
+# define BOOST_PP_SEQ_ELEM_138(_) BOOST_PP_SEQ_ELEM_137
+# define BOOST_PP_SEQ_ELEM_139(_) BOOST_PP_SEQ_ELEM_138
+# define BOOST_PP_SEQ_ELEM_140(_) BOOST_PP_SEQ_ELEM_139
+# define BOOST_PP_SEQ_ELEM_141(_) BOOST_PP_SEQ_ELEM_140
+# define BOOST_PP_SEQ_ELEM_142(_) BOOST_PP_SEQ_ELEM_141
+# define BOOST_PP_SEQ_ELEM_143(_) BOOST_PP_SEQ_ELEM_142
+# define BOOST_PP_SEQ_ELEM_144(_) BOOST_PP_SEQ_ELEM_143
+# define BOOST_PP_SEQ_ELEM_145(_) BOOST_PP_SEQ_ELEM_144
+# define BOOST_PP_SEQ_ELEM_146(_) BOOST_PP_SEQ_ELEM_145
+# define BOOST_PP_SEQ_ELEM_147(_) BOOST_PP_SEQ_ELEM_146
+# define BOOST_PP_SEQ_ELEM_148(_) BOOST_PP_SEQ_ELEM_147
+# define BOOST_PP_SEQ_ELEM_149(_) BOOST_PP_SEQ_ELEM_148
+# define BOOST_PP_SEQ_ELEM_150(_) BOOST_PP_SEQ_ELEM_149
+# define BOOST_PP_SEQ_ELEM_151(_) BOOST_PP_SEQ_ELEM_150
+# define BOOST_PP_SEQ_ELEM_152(_) BOOST_PP_SEQ_ELEM_151
+# define BOOST_PP_SEQ_ELEM_153(_) BOOST_PP_SEQ_ELEM_152
+# define BOOST_PP_SEQ_ELEM_154(_) BOOST_PP_SEQ_ELEM_153
+# define BOOST_PP_SEQ_ELEM_155(_) BOOST_PP_SEQ_ELEM_154
+# define BOOST_PP_SEQ_ELEM_156(_) BOOST_PP_SEQ_ELEM_155
+# define BOOST_PP_SEQ_ELEM_157(_) BOOST_PP_SEQ_ELEM_156
+# define BOOST_PP_SEQ_ELEM_158(_) BOOST_PP_SEQ_ELEM_157
+# define BOOST_PP_SEQ_ELEM_159(_) BOOST_PP_SEQ_ELEM_158
+# define BOOST_PP_SEQ_ELEM_160(_) BOOST_PP_SEQ_ELEM_159
+# define BOOST_PP_SEQ_ELEM_161(_) BOOST_PP_SEQ_ELEM_160
+# define BOOST_PP_SEQ_ELEM_162(_) BOOST_PP_SEQ_ELEM_161
+# define BOOST_PP_SEQ_ELEM_163(_) BOOST_PP_SEQ_ELEM_162
+# define BOOST_PP_SEQ_ELEM_164(_) BOOST_PP_SEQ_ELEM_163
+# define BOOST_PP_SEQ_ELEM_165(_) BOOST_PP_SEQ_ELEM_164
+# define BOOST_PP_SEQ_ELEM_166(_) BOOST_PP_SEQ_ELEM_165
+# define BOOST_PP_SEQ_ELEM_167(_) BOOST_PP_SEQ_ELEM_166
+# define BOOST_PP_SEQ_ELEM_168(_) BOOST_PP_SEQ_ELEM_167
+# define BOOST_PP_SEQ_ELEM_169(_) BOOST_PP_SEQ_ELEM_168
+# define BOOST_PP_SEQ_ELEM_170(_) BOOST_PP_SEQ_ELEM_169
+# define BOOST_PP_SEQ_ELEM_171(_) BOOST_PP_SEQ_ELEM_170
+# define BOOST_PP_SEQ_ELEM_172(_) BOOST_PP_SEQ_ELEM_171
+# define BOOST_PP_SEQ_ELEM_173(_) BOOST_PP_SEQ_ELEM_172
+# define BOOST_PP_SEQ_ELEM_174(_) BOOST_PP_SEQ_ELEM_173
+# define BOOST_PP_SEQ_ELEM_175(_) BOOST_PP_SEQ_ELEM_174
+# define BOOST_PP_SEQ_ELEM_176(_) BOOST_PP_SEQ_ELEM_175
+# define BOOST_PP_SEQ_ELEM_177(_) BOOST_PP_SEQ_ELEM_176
+# define BOOST_PP_SEQ_ELEM_178(_) BOOST_PP_SEQ_ELEM_177
+# define BOOST_PP_SEQ_ELEM_179(_) BOOST_PP_SEQ_ELEM_178
+# define BOOST_PP_SEQ_ELEM_180(_) BOOST_PP_SEQ_ELEM_179
+# define BOOST_PP_SEQ_ELEM_181(_) BOOST_PP_SEQ_ELEM_180
+# define BOOST_PP_SEQ_ELEM_182(_) BOOST_PP_SEQ_ELEM_181
+# define BOOST_PP_SEQ_ELEM_183(_) BOOST_PP_SEQ_ELEM_182
+# define BOOST_PP_SEQ_ELEM_184(_) BOOST_PP_SEQ_ELEM_183
+# define BOOST_PP_SEQ_ELEM_185(_) BOOST_PP_SEQ_ELEM_184
+# define BOOST_PP_SEQ_ELEM_186(_) BOOST_PP_SEQ_ELEM_185
+# define BOOST_PP_SEQ_ELEM_187(_) BOOST_PP_SEQ_ELEM_186
+# define BOOST_PP_SEQ_ELEM_188(_) BOOST_PP_SEQ_ELEM_187
+# define BOOST_PP_SEQ_ELEM_189(_) BOOST_PP_SEQ_ELEM_188
+# define BOOST_PP_SEQ_ELEM_190(_) BOOST_PP_SEQ_ELEM_189
+# define BOOST_PP_SEQ_ELEM_191(_) BOOST_PP_SEQ_ELEM_190
+# define BOOST_PP_SEQ_ELEM_192(_) BOOST_PP_SEQ_ELEM_191
+# define BOOST_PP_SEQ_ELEM_193(_) BOOST_PP_SEQ_ELEM_192
+# define BOOST_PP_SEQ_ELEM_194(_) BOOST_PP_SEQ_ELEM_193
+# define BOOST_PP_SEQ_ELEM_195(_) BOOST_PP_SEQ_ELEM_194
+# define BOOST_PP_SEQ_ELEM_196(_) BOOST_PP_SEQ_ELEM_195
+# define BOOST_PP_SEQ_ELEM_197(_) BOOST_PP_SEQ_ELEM_196
+# define BOOST_PP_SEQ_ELEM_198(_) BOOST_PP_SEQ_ELEM_197
+# define BOOST_PP_SEQ_ELEM_199(_) BOOST_PP_SEQ_ELEM_198
+# define BOOST_PP_SEQ_ELEM_200(_) BOOST_PP_SEQ_ELEM_199
+# define BOOST_PP_SEQ_ELEM_201(_) BOOST_PP_SEQ_ELEM_200
+# define BOOST_PP_SEQ_ELEM_202(_) BOOST_PP_SEQ_ELEM_201
+# define BOOST_PP_SEQ_ELEM_203(_) BOOST_PP_SEQ_ELEM_202
+# define BOOST_PP_SEQ_ELEM_204(_) BOOST_PP_SEQ_ELEM_203
+# define BOOST_PP_SEQ_ELEM_205(_) BOOST_PP_SEQ_ELEM_204
+# define BOOST_PP_SEQ_ELEM_206(_) BOOST_PP_SEQ_ELEM_205
+# define BOOST_PP_SEQ_ELEM_207(_) BOOST_PP_SEQ_ELEM_206
+# define BOOST_PP_SEQ_ELEM_208(_) BOOST_PP_SEQ_ELEM_207
+# define BOOST_PP_SEQ_ELEM_209(_) BOOST_PP_SEQ_ELEM_208
+# define BOOST_PP_SEQ_ELEM_210(_) BOOST_PP_SEQ_ELEM_209
+# define BOOST_PP_SEQ_ELEM_211(_) BOOST_PP_SEQ_ELEM_210
+# define BOOST_PP_SEQ_ELEM_212(_) BOOST_PP_SEQ_ELEM_211
+# define BOOST_PP_SEQ_ELEM_213(_) BOOST_PP_SEQ_ELEM_212
+# define BOOST_PP_SEQ_ELEM_214(_) BOOST_PP_SEQ_ELEM_213
+# define BOOST_PP_SEQ_ELEM_215(_) BOOST_PP_SEQ_ELEM_214
+# define BOOST_PP_SEQ_ELEM_216(_) BOOST_PP_SEQ_ELEM_215
+# define BOOST_PP_SEQ_ELEM_217(_) BOOST_PP_SEQ_ELEM_216
+# define BOOST_PP_SEQ_ELEM_218(_) BOOST_PP_SEQ_ELEM_217
+# define BOOST_PP_SEQ_ELEM_219(_) BOOST_PP_SEQ_ELEM_218
+# define BOOST_PP_SEQ_ELEM_220(_) BOOST_PP_SEQ_ELEM_219
+# define BOOST_PP_SEQ_ELEM_221(_) BOOST_PP_SEQ_ELEM_220
+# define BOOST_PP_SEQ_ELEM_222(_) BOOST_PP_SEQ_ELEM_221
+# define BOOST_PP_SEQ_ELEM_223(_) BOOST_PP_SEQ_ELEM_222
+# define BOOST_PP_SEQ_ELEM_224(_) BOOST_PP_SEQ_ELEM_223
+# define BOOST_PP_SEQ_ELEM_225(_) BOOST_PP_SEQ_ELEM_224
+# define BOOST_PP_SEQ_ELEM_226(_) BOOST_PP_SEQ_ELEM_225
+# define BOOST_PP_SEQ_ELEM_227(_) BOOST_PP_SEQ_ELEM_226
+# define BOOST_PP_SEQ_ELEM_228(_) BOOST_PP_SEQ_ELEM_227
+# define BOOST_PP_SEQ_ELEM_229(_) BOOST_PP_SEQ_ELEM_228
+# define BOOST_PP_SEQ_ELEM_230(_) BOOST_PP_SEQ_ELEM_229
+# define BOOST_PP_SEQ_ELEM_231(_) BOOST_PP_SEQ_ELEM_230
+# define BOOST_PP_SEQ_ELEM_232(_) BOOST_PP_SEQ_ELEM_231
+# define BOOST_PP_SEQ_ELEM_233(_) BOOST_PP_SEQ_ELEM_232
+# define BOOST_PP_SEQ_ELEM_234(_) BOOST_PP_SEQ_ELEM_233
+# define BOOST_PP_SEQ_ELEM_235(_) BOOST_PP_SEQ_ELEM_234
+# define BOOST_PP_SEQ_ELEM_236(_) BOOST_PP_SEQ_ELEM_235
+# define BOOST_PP_SEQ_ELEM_237(_) BOOST_PP_SEQ_ELEM_236
+# define BOOST_PP_SEQ_ELEM_238(_) BOOST_PP_SEQ_ELEM_237
+# define BOOST_PP_SEQ_ELEM_239(_) BOOST_PP_SEQ_ELEM_238
+# define BOOST_PP_SEQ_ELEM_240(_) BOOST_PP_SEQ_ELEM_239
+# define BOOST_PP_SEQ_ELEM_241(_) BOOST_PP_SEQ_ELEM_240
+# define BOOST_PP_SEQ_ELEM_242(_) BOOST_PP_SEQ_ELEM_241
+# define BOOST_PP_SEQ_ELEM_243(_) BOOST_PP_SEQ_ELEM_242
+# define BOOST_PP_SEQ_ELEM_244(_) BOOST_PP_SEQ_ELEM_243
+# define BOOST_PP_SEQ_ELEM_245(_) BOOST_PP_SEQ_ELEM_244
+# define BOOST_PP_SEQ_ELEM_246(_) BOOST_PP_SEQ_ELEM_245
+# define BOOST_PP_SEQ_ELEM_247(_) BOOST_PP_SEQ_ELEM_246
+# define BOOST_PP_SEQ_ELEM_248(_) BOOST_PP_SEQ_ELEM_247
+# define BOOST_PP_SEQ_ELEM_249(_) BOOST_PP_SEQ_ELEM_248
+# define BOOST_PP_SEQ_ELEM_250(_) BOOST_PP_SEQ_ELEM_249
+# define BOOST_PP_SEQ_ELEM_251(_) BOOST_PP_SEQ_ELEM_250
+# define BOOST_PP_SEQ_ELEM_252(_) BOOST_PP_SEQ_ELEM_251
+# define BOOST_PP_SEQ_ELEM_253(_) BOOST_PP_SEQ_ELEM_252
+# define BOOST_PP_SEQ_ELEM_254(_) BOOST_PP_SEQ_ELEM_253
+# define BOOST_PP_SEQ_ELEM_255(_) BOOST_PP_SEQ_ELEM_254
+#
+# endif
diff --git a/boost/boost/preprocessor/seq/enum.hpp b/boost/boost/preprocessor/seq/enum.hpp
new file mode 100644
index 00000000000..b63b2425bda
--- /dev/null
+++ b/boost/boost/preprocessor/seq/enum.hpp
@@ -0,0 +1,288 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SEQ_ENUM_HPP
+# define BOOST_PREPROCESSOR_SEQ_ENUM_HPP
+#
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/seq/size.hpp>
+#
+# /* BOOST_PP_SEQ_ENUM */
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_SEQ_ENUM(seq) BOOST_PP_SEQ_ENUM_I(seq)
+# define BOOST_PP_SEQ_ENUM_I(seq) BOOST_PP_CAT(BOOST_PP_SEQ_ENUM_, BOOST_PP_SEQ_SIZE(seq)) seq
+# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+# define BOOST_PP_SEQ_ENUM(seq) BOOST_PP_SEQ_ENUM_I(BOOST_PP_SEQ_SIZE(seq), seq)
+# define BOOST_PP_SEQ_ENUM_I(size, seq) BOOST_PP_CAT(BOOST_PP_SEQ_ENUM_, size) seq
+# else
+# define BOOST_PP_SEQ_ENUM(seq) BOOST_PP_CAT(BOOST_PP_SEQ_ENUM_, BOOST_PP_SEQ_SIZE(seq)) seq
+# endif
+#
+# define BOOST_PP_SEQ_ENUM_1(x) x
+# define BOOST_PP_SEQ_ENUM_2(x) x, BOOST_PP_SEQ_ENUM_1
+# define BOOST_PP_SEQ_ENUM_3(x) x, BOOST_PP_SEQ_ENUM_2
+# define BOOST_PP_SEQ_ENUM_4(x) x, BOOST_PP_SEQ_ENUM_3
+# define BOOST_PP_SEQ_ENUM_5(x) x, BOOST_PP_SEQ_ENUM_4
+# define BOOST_PP_SEQ_ENUM_6(x) x, BOOST_PP_SEQ_ENUM_5
+# define BOOST_PP_SEQ_ENUM_7(x) x, BOOST_PP_SEQ_ENUM_6
+# define BOOST_PP_SEQ_ENUM_8(x) x, BOOST_PP_SEQ_ENUM_7
+# define BOOST_PP_SEQ_ENUM_9(x) x, BOOST_PP_SEQ_ENUM_8
+# define BOOST_PP_SEQ_ENUM_10(x) x, BOOST_PP_SEQ_ENUM_9
+# define BOOST_PP_SEQ_ENUM_11(x) x, BOOST_PP_SEQ_ENUM_10
+# define BOOST_PP_SEQ_ENUM_12(x) x, BOOST_PP_SEQ_ENUM_11
+# define BOOST_PP_SEQ_ENUM_13(x) x, BOOST_PP_SEQ_ENUM_12
+# define BOOST_PP_SEQ_ENUM_14(x) x, BOOST_PP_SEQ_ENUM_13
+# define BOOST_PP_SEQ_ENUM_15(x) x, BOOST_PP_SEQ_ENUM_14
+# define BOOST_PP_SEQ_ENUM_16(x) x, BOOST_PP_SEQ_ENUM_15
+# define BOOST_PP_SEQ_ENUM_17(x) x, BOOST_PP_SEQ_ENUM_16
+# define BOOST_PP_SEQ_ENUM_18(x) x, BOOST_PP_SEQ_ENUM_17
+# define BOOST_PP_SEQ_ENUM_19(x) x, BOOST_PP_SEQ_ENUM_18
+# define BOOST_PP_SEQ_ENUM_20(x) x, BOOST_PP_SEQ_ENUM_19
+# define BOOST_PP_SEQ_ENUM_21(x) x, BOOST_PP_SEQ_ENUM_20
+# define BOOST_PP_SEQ_ENUM_22(x) x, BOOST_PP_SEQ_ENUM_21
+# define BOOST_PP_SEQ_ENUM_23(x) x, BOOST_PP_SEQ_ENUM_22
+# define BOOST_PP_SEQ_ENUM_24(x) x, BOOST_PP_SEQ_ENUM_23
+# define BOOST_PP_SEQ_ENUM_25(x) x, BOOST_PP_SEQ_ENUM_24
+# define BOOST_PP_SEQ_ENUM_26(x) x, BOOST_PP_SEQ_ENUM_25
+# define BOOST_PP_SEQ_ENUM_27(x) x, BOOST_PP_SEQ_ENUM_26
+# define BOOST_PP_SEQ_ENUM_28(x) x, BOOST_PP_SEQ_ENUM_27
+# define BOOST_PP_SEQ_ENUM_29(x) x, BOOST_PP_SEQ_ENUM_28
+# define BOOST_PP_SEQ_ENUM_30(x) x, BOOST_PP_SEQ_ENUM_29
+# define BOOST_PP_SEQ_ENUM_31(x) x, BOOST_PP_SEQ_ENUM_30
+# define BOOST_PP_SEQ_ENUM_32(x) x, BOOST_PP_SEQ_ENUM_31
+# define BOOST_PP_SEQ_ENUM_33(x) x, BOOST_PP_SEQ_ENUM_32
+# define BOOST_PP_SEQ_ENUM_34(x) x, BOOST_PP_SEQ_ENUM_33
+# define BOOST_PP_SEQ_ENUM_35(x) x, BOOST_PP_SEQ_ENUM_34
+# define BOOST_PP_SEQ_ENUM_36(x) x, BOOST_PP_SEQ_ENUM_35
+# define BOOST_PP_SEQ_ENUM_37(x) x, BOOST_PP_SEQ_ENUM_36
+# define BOOST_PP_SEQ_ENUM_38(x) x, BOOST_PP_SEQ_ENUM_37
+# define BOOST_PP_SEQ_ENUM_39(x) x, BOOST_PP_SEQ_ENUM_38
+# define BOOST_PP_SEQ_ENUM_40(x) x, BOOST_PP_SEQ_ENUM_39
+# define BOOST_PP_SEQ_ENUM_41(x) x, BOOST_PP_SEQ_ENUM_40
+# define BOOST_PP_SEQ_ENUM_42(x) x, BOOST_PP_SEQ_ENUM_41
+# define BOOST_PP_SEQ_ENUM_43(x) x, BOOST_PP_SEQ_ENUM_42
+# define BOOST_PP_SEQ_ENUM_44(x) x, BOOST_PP_SEQ_ENUM_43
+# define BOOST_PP_SEQ_ENUM_45(x) x, BOOST_PP_SEQ_ENUM_44
+# define BOOST_PP_SEQ_ENUM_46(x) x, BOOST_PP_SEQ_ENUM_45
+# define BOOST_PP_SEQ_ENUM_47(x) x, BOOST_PP_SEQ_ENUM_46
+# define BOOST_PP_SEQ_ENUM_48(x) x, BOOST_PP_SEQ_ENUM_47
+# define BOOST_PP_SEQ_ENUM_49(x) x, BOOST_PP_SEQ_ENUM_48
+# define BOOST_PP_SEQ_ENUM_50(x) x, BOOST_PP_SEQ_ENUM_49
+# define BOOST_PP_SEQ_ENUM_51(x) x, BOOST_PP_SEQ_ENUM_50
+# define BOOST_PP_SEQ_ENUM_52(x) x, BOOST_PP_SEQ_ENUM_51
+# define BOOST_PP_SEQ_ENUM_53(x) x, BOOST_PP_SEQ_ENUM_52
+# define BOOST_PP_SEQ_ENUM_54(x) x, BOOST_PP_SEQ_ENUM_53
+# define BOOST_PP_SEQ_ENUM_55(x) x, BOOST_PP_SEQ_ENUM_54
+# define BOOST_PP_SEQ_ENUM_56(x) x, BOOST_PP_SEQ_ENUM_55
+# define BOOST_PP_SEQ_ENUM_57(x) x, BOOST_PP_SEQ_ENUM_56
+# define BOOST_PP_SEQ_ENUM_58(x) x, BOOST_PP_SEQ_ENUM_57
+# define BOOST_PP_SEQ_ENUM_59(x) x, BOOST_PP_SEQ_ENUM_58
+# define BOOST_PP_SEQ_ENUM_60(x) x, BOOST_PP_SEQ_ENUM_59
+# define BOOST_PP_SEQ_ENUM_61(x) x, BOOST_PP_SEQ_ENUM_60
+# define BOOST_PP_SEQ_ENUM_62(x) x, BOOST_PP_SEQ_ENUM_61
+# define BOOST_PP_SEQ_ENUM_63(x) x, BOOST_PP_SEQ_ENUM_62
+# define BOOST_PP_SEQ_ENUM_64(x) x, BOOST_PP_SEQ_ENUM_63
+# define BOOST_PP_SEQ_ENUM_65(x) x, BOOST_PP_SEQ_ENUM_64
+# define BOOST_PP_SEQ_ENUM_66(x) x, BOOST_PP_SEQ_ENUM_65
+# define BOOST_PP_SEQ_ENUM_67(x) x, BOOST_PP_SEQ_ENUM_66
+# define BOOST_PP_SEQ_ENUM_68(x) x, BOOST_PP_SEQ_ENUM_67
+# define BOOST_PP_SEQ_ENUM_69(x) x, BOOST_PP_SEQ_ENUM_68
+# define BOOST_PP_SEQ_ENUM_70(x) x, BOOST_PP_SEQ_ENUM_69
+# define BOOST_PP_SEQ_ENUM_71(x) x, BOOST_PP_SEQ_ENUM_70
+# define BOOST_PP_SEQ_ENUM_72(x) x, BOOST_PP_SEQ_ENUM_71
+# define BOOST_PP_SEQ_ENUM_73(x) x, BOOST_PP_SEQ_ENUM_72
+# define BOOST_PP_SEQ_ENUM_74(x) x, BOOST_PP_SEQ_ENUM_73
+# define BOOST_PP_SEQ_ENUM_75(x) x, BOOST_PP_SEQ_ENUM_74
+# define BOOST_PP_SEQ_ENUM_76(x) x, BOOST_PP_SEQ_ENUM_75
+# define BOOST_PP_SEQ_ENUM_77(x) x, BOOST_PP_SEQ_ENUM_76
+# define BOOST_PP_SEQ_ENUM_78(x) x, BOOST_PP_SEQ_ENUM_77
+# define BOOST_PP_SEQ_ENUM_79(x) x, BOOST_PP_SEQ_ENUM_78
+# define BOOST_PP_SEQ_ENUM_80(x) x, BOOST_PP_SEQ_ENUM_79
+# define BOOST_PP_SEQ_ENUM_81(x) x, BOOST_PP_SEQ_ENUM_80
+# define BOOST_PP_SEQ_ENUM_82(x) x, BOOST_PP_SEQ_ENUM_81
+# define BOOST_PP_SEQ_ENUM_83(x) x, BOOST_PP_SEQ_ENUM_82
+# define BOOST_PP_SEQ_ENUM_84(x) x, BOOST_PP_SEQ_ENUM_83
+# define BOOST_PP_SEQ_ENUM_85(x) x, BOOST_PP_SEQ_ENUM_84
+# define BOOST_PP_SEQ_ENUM_86(x) x, BOOST_PP_SEQ_ENUM_85
+# define BOOST_PP_SEQ_ENUM_87(x) x, BOOST_PP_SEQ_ENUM_86
+# define BOOST_PP_SEQ_ENUM_88(x) x, BOOST_PP_SEQ_ENUM_87
+# define BOOST_PP_SEQ_ENUM_89(x) x, BOOST_PP_SEQ_ENUM_88
+# define BOOST_PP_SEQ_ENUM_90(x) x, BOOST_PP_SEQ_ENUM_89
+# define BOOST_PP_SEQ_ENUM_91(x) x, BOOST_PP_SEQ_ENUM_90
+# define BOOST_PP_SEQ_ENUM_92(x) x, BOOST_PP_SEQ_ENUM_91
+# define BOOST_PP_SEQ_ENUM_93(x) x, BOOST_PP_SEQ_ENUM_92
+# define BOOST_PP_SEQ_ENUM_94(x) x, BOOST_PP_SEQ_ENUM_93
+# define BOOST_PP_SEQ_ENUM_95(x) x, BOOST_PP_SEQ_ENUM_94
+# define BOOST_PP_SEQ_ENUM_96(x) x, BOOST_PP_SEQ_ENUM_95
+# define BOOST_PP_SEQ_ENUM_97(x) x, BOOST_PP_SEQ_ENUM_96
+# define BOOST_PP_SEQ_ENUM_98(x) x, BOOST_PP_SEQ_ENUM_97
+# define BOOST_PP_SEQ_ENUM_99(x) x, BOOST_PP_SEQ_ENUM_98
+# define BOOST_PP_SEQ_ENUM_100(x) x, BOOST_PP_SEQ_ENUM_99
+# define BOOST_PP_SEQ_ENUM_101(x) x, BOOST_PP_SEQ_ENUM_100
+# define BOOST_PP_SEQ_ENUM_102(x) x, BOOST_PP_SEQ_ENUM_101
+# define BOOST_PP_SEQ_ENUM_103(x) x, BOOST_PP_SEQ_ENUM_102
+# define BOOST_PP_SEQ_ENUM_104(x) x, BOOST_PP_SEQ_ENUM_103
+# define BOOST_PP_SEQ_ENUM_105(x) x, BOOST_PP_SEQ_ENUM_104
+# define BOOST_PP_SEQ_ENUM_106(x) x, BOOST_PP_SEQ_ENUM_105
+# define BOOST_PP_SEQ_ENUM_107(x) x, BOOST_PP_SEQ_ENUM_106
+# define BOOST_PP_SEQ_ENUM_108(x) x, BOOST_PP_SEQ_ENUM_107
+# define BOOST_PP_SEQ_ENUM_109(x) x, BOOST_PP_SEQ_ENUM_108
+# define BOOST_PP_SEQ_ENUM_110(x) x, BOOST_PP_SEQ_ENUM_109
+# define BOOST_PP_SEQ_ENUM_111(x) x, BOOST_PP_SEQ_ENUM_110
+# define BOOST_PP_SEQ_ENUM_112(x) x, BOOST_PP_SEQ_ENUM_111
+# define BOOST_PP_SEQ_ENUM_113(x) x, BOOST_PP_SEQ_ENUM_112
+# define BOOST_PP_SEQ_ENUM_114(x) x, BOOST_PP_SEQ_ENUM_113
+# define BOOST_PP_SEQ_ENUM_115(x) x, BOOST_PP_SEQ_ENUM_114
+# define BOOST_PP_SEQ_ENUM_116(x) x, BOOST_PP_SEQ_ENUM_115
+# define BOOST_PP_SEQ_ENUM_117(x) x, BOOST_PP_SEQ_ENUM_116
+# define BOOST_PP_SEQ_ENUM_118(x) x, BOOST_PP_SEQ_ENUM_117
+# define BOOST_PP_SEQ_ENUM_119(x) x, BOOST_PP_SEQ_ENUM_118
+# define BOOST_PP_SEQ_ENUM_120(x) x, BOOST_PP_SEQ_ENUM_119
+# define BOOST_PP_SEQ_ENUM_121(x) x, BOOST_PP_SEQ_ENUM_120
+# define BOOST_PP_SEQ_ENUM_122(x) x, BOOST_PP_SEQ_ENUM_121
+# define BOOST_PP_SEQ_ENUM_123(x) x, BOOST_PP_SEQ_ENUM_122
+# define BOOST_PP_SEQ_ENUM_124(x) x, BOOST_PP_SEQ_ENUM_123
+# define BOOST_PP_SEQ_ENUM_125(x) x, BOOST_PP_SEQ_ENUM_124
+# define BOOST_PP_SEQ_ENUM_126(x) x, BOOST_PP_SEQ_ENUM_125
+# define BOOST_PP_SEQ_ENUM_127(x) x, BOOST_PP_SEQ_ENUM_126
+# define BOOST_PP_SEQ_ENUM_128(x) x, BOOST_PP_SEQ_ENUM_127
+# define BOOST_PP_SEQ_ENUM_129(x) x, BOOST_PP_SEQ_ENUM_128
+# define BOOST_PP_SEQ_ENUM_130(x) x, BOOST_PP_SEQ_ENUM_129
+# define BOOST_PP_SEQ_ENUM_131(x) x, BOOST_PP_SEQ_ENUM_130
+# define BOOST_PP_SEQ_ENUM_132(x) x, BOOST_PP_SEQ_ENUM_131
+# define BOOST_PP_SEQ_ENUM_133(x) x, BOOST_PP_SEQ_ENUM_132
+# define BOOST_PP_SEQ_ENUM_134(x) x, BOOST_PP_SEQ_ENUM_133
+# define BOOST_PP_SEQ_ENUM_135(x) x, BOOST_PP_SEQ_ENUM_134
+# define BOOST_PP_SEQ_ENUM_136(x) x, BOOST_PP_SEQ_ENUM_135
+# define BOOST_PP_SEQ_ENUM_137(x) x, BOOST_PP_SEQ_ENUM_136
+# define BOOST_PP_SEQ_ENUM_138(x) x, BOOST_PP_SEQ_ENUM_137
+# define BOOST_PP_SEQ_ENUM_139(x) x, BOOST_PP_SEQ_ENUM_138
+# define BOOST_PP_SEQ_ENUM_140(x) x, BOOST_PP_SEQ_ENUM_139
+# define BOOST_PP_SEQ_ENUM_141(x) x, BOOST_PP_SEQ_ENUM_140
+# define BOOST_PP_SEQ_ENUM_142(x) x, BOOST_PP_SEQ_ENUM_141
+# define BOOST_PP_SEQ_ENUM_143(x) x, BOOST_PP_SEQ_ENUM_142
+# define BOOST_PP_SEQ_ENUM_144(x) x, BOOST_PP_SEQ_ENUM_143
+# define BOOST_PP_SEQ_ENUM_145(x) x, BOOST_PP_SEQ_ENUM_144
+# define BOOST_PP_SEQ_ENUM_146(x) x, BOOST_PP_SEQ_ENUM_145
+# define BOOST_PP_SEQ_ENUM_147(x) x, BOOST_PP_SEQ_ENUM_146
+# define BOOST_PP_SEQ_ENUM_148(x) x, BOOST_PP_SEQ_ENUM_147
+# define BOOST_PP_SEQ_ENUM_149(x) x, BOOST_PP_SEQ_ENUM_148
+# define BOOST_PP_SEQ_ENUM_150(x) x, BOOST_PP_SEQ_ENUM_149
+# define BOOST_PP_SEQ_ENUM_151(x) x, BOOST_PP_SEQ_ENUM_150
+# define BOOST_PP_SEQ_ENUM_152(x) x, BOOST_PP_SEQ_ENUM_151
+# define BOOST_PP_SEQ_ENUM_153(x) x, BOOST_PP_SEQ_ENUM_152
+# define BOOST_PP_SEQ_ENUM_154(x) x, BOOST_PP_SEQ_ENUM_153
+# define BOOST_PP_SEQ_ENUM_155(x) x, BOOST_PP_SEQ_ENUM_154
+# define BOOST_PP_SEQ_ENUM_156(x) x, BOOST_PP_SEQ_ENUM_155
+# define BOOST_PP_SEQ_ENUM_157(x) x, BOOST_PP_SEQ_ENUM_156
+# define BOOST_PP_SEQ_ENUM_158(x) x, BOOST_PP_SEQ_ENUM_157
+# define BOOST_PP_SEQ_ENUM_159(x) x, BOOST_PP_SEQ_ENUM_158
+# define BOOST_PP_SEQ_ENUM_160(x) x, BOOST_PP_SEQ_ENUM_159
+# define BOOST_PP_SEQ_ENUM_161(x) x, BOOST_PP_SEQ_ENUM_160
+# define BOOST_PP_SEQ_ENUM_162(x) x, BOOST_PP_SEQ_ENUM_161
+# define BOOST_PP_SEQ_ENUM_163(x) x, BOOST_PP_SEQ_ENUM_162
+# define BOOST_PP_SEQ_ENUM_164(x) x, BOOST_PP_SEQ_ENUM_163
+# define BOOST_PP_SEQ_ENUM_165(x) x, BOOST_PP_SEQ_ENUM_164
+# define BOOST_PP_SEQ_ENUM_166(x) x, BOOST_PP_SEQ_ENUM_165
+# define BOOST_PP_SEQ_ENUM_167(x) x, BOOST_PP_SEQ_ENUM_166
+# define BOOST_PP_SEQ_ENUM_168(x) x, BOOST_PP_SEQ_ENUM_167
+# define BOOST_PP_SEQ_ENUM_169(x) x, BOOST_PP_SEQ_ENUM_168
+# define BOOST_PP_SEQ_ENUM_170(x) x, BOOST_PP_SEQ_ENUM_169
+# define BOOST_PP_SEQ_ENUM_171(x) x, BOOST_PP_SEQ_ENUM_170
+# define BOOST_PP_SEQ_ENUM_172(x) x, BOOST_PP_SEQ_ENUM_171
+# define BOOST_PP_SEQ_ENUM_173(x) x, BOOST_PP_SEQ_ENUM_172
+# define BOOST_PP_SEQ_ENUM_174(x) x, BOOST_PP_SEQ_ENUM_173
+# define BOOST_PP_SEQ_ENUM_175(x) x, BOOST_PP_SEQ_ENUM_174
+# define BOOST_PP_SEQ_ENUM_176(x) x, BOOST_PP_SEQ_ENUM_175
+# define BOOST_PP_SEQ_ENUM_177(x) x, BOOST_PP_SEQ_ENUM_176
+# define BOOST_PP_SEQ_ENUM_178(x) x, BOOST_PP_SEQ_ENUM_177
+# define BOOST_PP_SEQ_ENUM_179(x) x, BOOST_PP_SEQ_ENUM_178
+# define BOOST_PP_SEQ_ENUM_180(x) x, BOOST_PP_SEQ_ENUM_179
+# define BOOST_PP_SEQ_ENUM_181(x) x, BOOST_PP_SEQ_ENUM_180
+# define BOOST_PP_SEQ_ENUM_182(x) x, BOOST_PP_SEQ_ENUM_181
+# define BOOST_PP_SEQ_ENUM_183(x) x, BOOST_PP_SEQ_ENUM_182
+# define BOOST_PP_SEQ_ENUM_184(x) x, BOOST_PP_SEQ_ENUM_183
+# define BOOST_PP_SEQ_ENUM_185(x) x, BOOST_PP_SEQ_ENUM_184
+# define BOOST_PP_SEQ_ENUM_186(x) x, BOOST_PP_SEQ_ENUM_185
+# define BOOST_PP_SEQ_ENUM_187(x) x, BOOST_PP_SEQ_ENUM_186
+# define BOOST_PP_SEQ_ENUM_188(x) x, BOOST_PP_SEQ_ENUM_187
+# define BOOST_PP_SEQ_ENUM_189(x) x, BOOST_PP_SEQ_ENUM_188
+# define BOOST_PP_SEQ_ENUM_190(x) x, BOOST_PP_SEQ_ENUM_189
+# define BOOST_PP_SEQ_ENUM_191(x) x, BOOST_PP_SEQ_ENUM_190
+# define BOOST_PP_SEQ_ENUM_192(x) x, BOOST_PP_SEQ_ENUM_191
+# define BOOST_PP_SEQ_ENUM_193(x) x, BOOST_PP_SEQ_ENUM_192
+# define BOOST_PP_SEQ_ENUM_194(x) x, BOOST_PP_SEQ_ENUM_193
+# define BOOST_PP_SEQ_ENUM_195(x) x, BOOST_PP_SEQ_ENUM_194
+# define BOOST_PP_SEQ_ENUM_196(x) x, BOOST_PP_SEQ_ENUM_195
+# define BOOST_PP_SEQ_ENUM_197(x) x, BOOST_PP_SEQ_ENUM_196
+# define BOOST_PP_SEQ_ENUM_198(x) x, BOOST_PP_SEQ_ENUM_197
+# define BOOST_PP_SEQ_ENUM_199(x) x, BOOST_PP_SEQ_ENUM_198
+# define BOOST_PP_SEQ_ENUM_200(x) x, BOOST_PP_SEQ_ENUM_199
+# define BOOST_PP_SEQ_ENUM_201(x) x, BOOST_PP_SEQ_ENUM_200
+# define BOOST_PP_SEQ_ENUM_202(x) x, BOOST_PP_SEQ_ENUM_201
+# define BOOST_PP_SEQ_ENUM_203(x) x, BOOST_PP_SEQ_ENUM_202
+# define BOOST_PP_SEQ_ENUM_204(x) x, BOOST_PP_SEQ_ENUM_203
+# define BOOST_PP_SEQ_ENUM_205(x) x, BOOST_PP_SEQ_ENUM_204
+# define BOOST_PP_SEQ_ENUM_206(x) x, BOOST_PP_SEQ_ENUM_205
+# define BOOST_PP_SEQ_ENUM_207(x) x, BOOST_PP_SEQ_ENUM_206
+# define BOOST_PP_SEQ_ENUM_208(x) x, BOOST_PP_SEQ_ENUM_207
+# define BOOST_PP_SEQ_ENUM_209(x) x, BOOST_PP_SEQ_ENUM_208
+# define BOOST_PP_SEQ_ENUM_210(x) x, BOOST_PP_SEQ_ENUM_209
+# define BOOST_PP_SEQ_ENUM_211(x) x, BOOST_PP_SEQ_ENUM_210
+# define BOOST_PP_SEQ_ENUM_212(x) x, BOOST_PP_SEQ_ENUM_211
+# define BOOST_PP_SEQ_ENUM_213(x) x, BOOST_PP_SEQ_ENUM_212
+# define BOOST_PP_SEQ_ENUM_214(x) x, BOOST_PP_SEQ_ENUM_213
+# define BOOST_PP_SEQ_ENUM_215(x) x, BOOST_PP_SEQ_ENUM_214
+# define BOOST_PP_SEQ_ENUM_216(x) x, BOOST_PP_SEQ_ENUM_215
+# define BOOST_PP_SEQ_ENUM_217(x) x, BOOST_PP_SEQ_ENUM_216
+# define BOOST_PP_SEQ_ENUM_218(x) x, BOOST_PP_SEQ_ENUM_217
+# define BOOST_PP_SEQ_ENUM_219(x) x, BOOST_PP_SEQ_ENUM_218
+# define BOOST_PP_SEQ_ENUM_220(x) x, BOOST_PP_SEQ_ENUM_219
+# define BOOST_PP_SEQ_ENUM_221(x) x, BOOST_PP_SEQ_ENUM_220
+# define BOOST_PP_SEQ_ENUM_222(x) x, BOOST_PP_SEQ_ENUM_221
+# define BOOST_PP_SEQ_ENUM_223(x) x, BOOST_PP_SEQ_ENUM_222
+# define BOOST_PP_SEQ_ENUM_224(x) x, BOOST_PP_SEQ_ENUM_223
+# define BOOST_PP_SEQ_ENUM_225(x) x, BOOST_PP_SEQ_ENUM_224
+# define BOOST_PP_SEQ_ENUM_226(x) x, BOOST_PP_SEQ_ENUM_225
+# define BOOST_PP_SEQ_ENUM_227(x) x, BOOST_PP_SEQ_ENUM_226
+# define BOOST_PP_SEQ_ENUM_228(x) x, BOOST_PP_SEQ_ENUM_227
+# define BOOST_PP_SEQ_ENUM_229(x) x, BOOST_PP_SEQ_ENUM_228
+# define BOOST_PP_SEQ_ENUM_230(x) x, BOOST_PP_SEQ_ENUM_229
+# define BOOST_PP_SEQ_ENUM_231(x) x, BOOST_PP_SEQ_ENUM_230
+# define BOOST_PP_SEQ_ENUM_232(x) x, BOOST_PP_SEQ_ENUM_231
+# define BOOST_PP_SEQ_ENUM_233(x) x, BOOST_PP_SEQ_ENUM_232
+# define BOOST_PP_SEQ_ENUM_234(x) x, BOOST_PP_SEQ_ENUM_233
+# define BOOST_PP_SEQ_ENUM_235(x) x, BOOST_PP_SEQ_ENUM_234
+# define BOOST_PP_SEQ_ENUM_236(x) x, BOOST_PP_SEQ_ENUM_235
+# define BOOST_PP_SEQ_ENUM_237(x) x, BOOST_PP_SEQ_ENUM_236
+# define BOOST_PP_SEQ_ENUM_238(x) x, BOOST_PP_SEQ_ENUM_237
+# define BOOST_PP_SEQ_ENUM_239(x) x, BOOST_PP_SEQ_ENUM_238
+# define BOOST_PP_SEQ_ENUM_240(x) x, BOOST_PP_SEQ_ENUM_239
+# define BOOST_PP_SEQ_ENUM_241(x) x, BOOST_PP_SEQ_ENUM_240
+# define BOOST_PP_SEQ_ENUM_242(x) x, BOOST_PP_SEQ_ENUM_241
+# define BOOST_PP_SEQ_ENUM_243(x) x, BOOST_PP_SEQ_ENUM_242
+# define BOOST_PP_SEQ_ENUM_244(x) x, BOOST_PP_SEQ_ENUM_243
+# define BOOST_PP_SEQ_ENUM_245(x) x, BOOST_PP_SEQ_ENUM_244
+# define BOOST_PP_SEQ_ENUM_246(x) x, BOOST_PP_SEQ_ENUM_245
+# define BOOST_PP_SEQ_ENUM_247(x) x, BOOST_PP_SEQ_ENUM_246
+# define BOOST_PP_SEQ_ENUM_248(x) x, BOOST_PP_SEQ_ENUM_247
+# define BOOST_PP_SEQ_ENUM_249(x) x, BOOST_PP_SEQ_ENUM_248
+# define BOOST_PP_SEQ_ENUM_250(x) x, BOOST_PP_SEQ_ENUM_249
+# define BOOST_PP_SEQ_ENUM_251(x) x, BOOST_PP_SEQ_ENUM_250
+# define BOOST_PP_SEQ_ENUM_252(x) x, BOOST_PP_SEQ_ENUM_251
+# define BOOST_PP_SEQ_ENUM_253(x) x, BOOST_PP_SEQ_ENUM_252
+# define BOOST_PP_SEQ_ENUM_254(x) x, BOOST_PP_SEQ_ENUM_253
+# define BOOST_PP_SEQ_ENUM_255(x) x, BOOST_PP_SEQ_ENUM_254
+# define BOOST_PP_SEQ_ENUM_256(x) x, BOOST_PP_SEQ_ENUM_255
+#
+# endif
diff --git a/boost/boost/preprocessor/seq/filter.hpp b/boost/boost/preprocessor/seq/filter.hpp
new file mode 100644
index 00000000000..4596bfe59b4
--- /dev/null
+++ b/boost/boost/preprocessor/seq/filter.hpp
@@ -0,0 +1,54 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SEQ_FILTER_HPP
+# define BOOST_PREPROCESSOR_SEQ_FILTER_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/control/expr_if.hpp>
+# include <boost/preprocessor/facilities/empty.hpp>
+# include <boost/preprocessor/seq/fold_left.hpp>
+# include <boost/preprocessor/seq/seq.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+# include <boost/preprocessor/tuple/rem.hpp>
+#
+# /* BOOST_PP_SEQ_FILTER */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_SEQ_FILTER(pred, data, seq) BOOST_PP_SEQ_TAIL(BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_SEQ_FOLD_LEFT(BOOST_PP_SEQ_FILTER_O, (pred, data, (nil)), seq)))
+# else
+# define BOOST_PP_SEQ_FILTER(pred, data, seq) BOOST_PP_SEQ_FILTER_I(pred, data, seq)
+# define BOOST_PP_SEQ_FILTER_I(pred, data, seq) BOOST_PP_SEQ_TAIL(BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_SEQ_FOLD_LEFT(BOOST_PP_SEQ_FILTER_O, (pred, data, (nil)), seq)))
+# endif
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()
+# define BOOST_PP_SEQ_FILTER_O(s, st, elem) BOOST_PP_SEQ_FILTER_O_IM(s, BOOST_PP_TUPLE_REM_3 st, elem)
+# define BOOST_PP_SEQ_FILTER_O_IM(s, im, elem) BOOST_PP_SEQ_FILTER_O_I(s, im, elem)
+# else
+# define BOOST_PP_SEQ_FILTER_O(s, st, elem) BOOST_PP_SEQ_FILTER_O_I(s, BOOST_PP_TUPLE_ELEM(3, 0, st), BOOST_PP_TUPLE_ELEM(3, 1, st), BOOST_PP_TUPLE_ELEM(3, 2, st), elem)
+# endif
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_DMC()
+# define BOOST_PP_SEQ_FILTER_O_I(s, pred, data, res, elem) (pred, data, res BOOST_PP_EXPR_IF(pred(s, data, elem), (elem)))
+# else
+# define BOOST_PP_SEQ_FILTER_O_I(s, pred, data, res, elem) (pred, data, res BOOST_PP_EXPR_IF(pred##(s, data, elem), (elem)))
+# endif
+#
+# /* BOOST_PP_SEQ_FILTER_S */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_SEQ_FILTER_S(s, pred, data, seq) BOOST_PP_SEQ_TAIL(BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_SEQ_FOLD_LEFT_ ## s(BOOST_PP_SEQ_FILTER_O, (pred, data, (nil)), seq)))
+# else
+# define BOOST_PP_SEQ_FILTER_S(s, pred, data, seq) BOOST_PP_SEQ_FILTER_S_I(s, pred, data, seq)
+# define BOOST_PP_SEQ_FILTER_S_I(s, pred, data, seq) BOOST_PP_SEQ_TAIL(BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_SEQ_FOLD_LEFT_ ## s(BOOST_PP_SEQ_FILTER_O, (pred, data, (nil)), seq)))
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/seq/first_n.hpp b/boost/boost/preprocessor/seq/first_n.hpp
new file mode 100644
index 00000000000..c3c0716ee79
--- /dev/null
+++ b/boost/boost/preprocessor/seq/first_n.hpp
@@ -0,0 +1,30 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SEQ_FIRST_N_HPP
+# define BOOST_PREPROCESSOR_SEQ_FIRST_N_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/control/if.hpp>
+# include <boost/preprocessor/seq/detail/split.hpp>
+# include <boost/preprocessor/tuple/eat.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+#
+# /* BOOST_PP_SEQ_FIRST_N */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_SEQ_FIRST_N(n, seq) BOOST_PP_IF(n, BOOST_PP_TUPLE_ELEM, BOOST_PP_TUPLE_EAT_3)(2, 0, BOOST_PP_SEQ_SPLIT(n, seq (nil)))
+# else
+# define BOOST_PP_SEQ_FIRST_N(n, seq) BOOST_PP_SEQ_FIRST_N_I(n, seq)
+# define BOOST_PP_SEQ_FIRST_N_I(n, seq) BOOST_PP_IF(n, BOOST_PP_TUPLE_ELEM, BOOST_PP_TUPLE_EAT_3)(2, 0, BOOST_PP_SEQ_SPLIT(n, seq (nil)))
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/seq/fold_left.hpp b/boost/boost/preprocessor/seq/fold_left.hpp
new file mode 100644
index 00000000000..ab051b69d9b
--- /dev/null
+++ b/boost/boost/preprocessor/seq/fold_left.hpp
@@ -0,0 +1,1070 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SEQ_FOLD_LEFT_HPP
+# define BOOST_PREPROCESSOR_SEQ_FOLD_LEFT_HPP
+#
+# include <boost/preprocessor/arithmetic/dec.hpp>
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/control/if.hpp>
+# include <boost/preprocessor/debug/error.hpp>
+# include <boost/preprocessor/detail/auto_rec.hpp>
+# include <boost/preprocessor/seq/seq.hpp>
+# include <boost/preprocessor/seq/size.hpp>
+#
+# /* BOOST_PP_SEQ_FOLD_LEFT */
+#
+# if 0
+# define BOOST_PP_SEQ_FOLD_LEFT(op, state, seq) ...
+# endif
+#
+# define BOOST_PP_SEQ_FOLD_LEFT BOOST_PP_CAT(BOOST_PP_SEQ_FOLD_LEFT_, BOOST_PP_AUTO_REC(BOOST_PP_SEQ_FOLD_LEFT_P, 256))
+# define BOOST_PP_SEQ_FOLD_LEFT_P(n) BOOST_PP_CAT(BOOST_PP_SEQ_FOLD_LEFT_CHECK_, BOOST_PP_SEQ_FOLD_LEFT_I_ ## n(BOOST_PP_SEQ_FOLD_LEFT_O, BOOST_PP_NIL, (nil), 1))
+# define BOOST_PP_SEQ_FOLD_LEFT_O(s, st, _) st
+#
+# define BOOST_PP_SEQ_FOLD_LEFT_257(op, st, ss) BOOST_PP_ERROR(0x0005)
+# define BOOST_PP_SEQ_FOLD_LEFT_I_257(op, st, ss, sz) BOOST_PP_ERROR(0x0005)
+#
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_NIL 1
+#
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_1(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_2(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_3(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_4(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_5(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_6(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_7(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_8(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_9(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_10(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_11(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_12(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_13(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_14(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_15(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_16(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_17(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_18(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_19(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_20(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_21(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_22(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_23(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_24(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_25(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_26(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_27(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_28(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_29(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_30(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_31(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_32(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_33(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_34(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_35(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_36(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_37(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_38(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_39(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_40(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_41(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_42(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_43(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_44(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_45(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_46(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_47(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_48(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_49(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_50(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_51(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_52(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_53(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_54(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_55(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_56(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_57(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_58(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_59(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_60(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_61(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_62(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_63(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_64(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_65(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_66(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_67(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_68(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_69(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_70(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_71(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_72(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_73(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_74(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_75(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_76(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_77(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_78(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_79(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_80(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_81(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_82(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_83(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_84(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_85(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_86(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_87(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_88(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_89(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_90(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_91(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_92(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_93(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_94(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_95(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_96(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_97(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_98(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_99(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_100(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_101(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_102(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_103(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_104(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_105(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_106(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_107(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_108(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_109(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_110(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_111(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_112(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_113(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_114(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_115(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_116(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_117(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_118(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_119(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_120(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_121(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_122(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_123(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_124(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_125(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_126(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_127(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_128(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_129(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_130(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_131(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_132(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_133(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_134(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_135(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_136(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_137(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_138(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_139(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_140(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_141(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_142(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_143(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_144(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_145(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_146(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_147(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_148(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_149(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_150(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_151(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_152(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_153(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_154(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_155(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_156(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_157(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_158(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_159(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_160(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_161(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_162(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_163(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_164(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_165(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_166(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_167(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_168(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_169(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_170(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_171(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_172(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_173(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_174(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_175(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_176(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_177(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_178(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_179(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_180(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_181(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_182(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_183(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_184(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_185(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_186(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_187(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_188(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_189(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_190(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_191(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_192(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_193(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_194(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_195(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_196(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_197(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_198(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_199(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_200(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_201(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_202(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_203(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_204(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_205(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_206(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_207(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_208(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_209(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_210(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_211(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_212(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_213(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_214(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_215(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_216(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_217(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_218(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_219(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_220(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_221(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_222(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_223(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_224(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_225(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_226(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_227(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_228(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_229(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_230(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_231(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_232(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_233(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_234(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_235(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_236(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_237(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_238(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_239(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_240(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_241(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_242(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_243(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_244(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_245(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_246(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_247(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_248(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_249(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_250(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_251(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_252(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_253(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_254(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_255(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_256(op, st, ss, sz) 0
+#
+# define BOOST_PP_SEQ_FOLD_LEFT_F(op, st, ss, sz) st
+#
+# define BOOST_PP_SEQ_FOLD_LEFT_1(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_1(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_2(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_2(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_3(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_3(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_4(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_4(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_5(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_5(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_6(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_6(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_7(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_7(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_8(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_8(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_9(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_9(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_10(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_10(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_11(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_11(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_12(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_12(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_13(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_13(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_14(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_14(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_15(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_15(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_16(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_16(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_17(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_17(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_18(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_18(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_19(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_19(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_20(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_20(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_21(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_21(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_22(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_22(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_23(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_23(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_24(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_24(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_25(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_25(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_26(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_26(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_27(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_27(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_28(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_28(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_29(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_29(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_30(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_30(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_31(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_31(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_32(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_32(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_33(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_33(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_34(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_34(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_35(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_35(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_36(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_36(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_37(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_37(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_38(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_38(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_39(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_39(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_40(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_40(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_41(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_41(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_42(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_42(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_43(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_43(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_44(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_44(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_45(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_45(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_46(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_46(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_47(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_47(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_48(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_48(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_49(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_49(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_50(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_50(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_51(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_51(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_52(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_52(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_53(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_53(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_54(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_54(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_55(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_55(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_56(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_56(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_57(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_57(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_58(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_58(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_59(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_59(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_60(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_60(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_61(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_61(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_62(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_62(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_63(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_63(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_64(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_64(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_65(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_65(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_66(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_66(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_67(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_67(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_68(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_68(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_69(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_69(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_70(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_70(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_71(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_71(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_72(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_72(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_73(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_73(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_74(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_74(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_75(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_75(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_76(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_76(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_77(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_77(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_78(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_78(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_79(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_79(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_80(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_80(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_81(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_81(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_82(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_82(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_83(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_83(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_84(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_84(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_85(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_85(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_86(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_86(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_87(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_87(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_88(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_88(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_89(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_89(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_90(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_90(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_91(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_91(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_92(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_92(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_93(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_93(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_94(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_94(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_95(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_95(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_96(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_96(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_97(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_97(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_98(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_98(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_99(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_99(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_100(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_100(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_101(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_101(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_102(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_102(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_103(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_103(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_104(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_104(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_105(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_105(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_106(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_106(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_107(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_107(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_108(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_108(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_109(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_109(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_110(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_110(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_111(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_111(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_112(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_112(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_113(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_113(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_114(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_114(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_115(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_115(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_116(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_116(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_117(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_117(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_118(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_118(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_119(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_119(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_120(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_120(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_121(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_121(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_122(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_122(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_123(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_123(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_124(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_124(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_125(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_125(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_126(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_126(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_127(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_127(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_128(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_128(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_129(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_129(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_130(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_130(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_131(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_131(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_132(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_132(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_133(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_133(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_134(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_134(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_135(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_135(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_136(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_136(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_137(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_137(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_138(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_138(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_139(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_139(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_140(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_140(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_141(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_141(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_142(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_142(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_143(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_143(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_144(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_144(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_145(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_145(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_146(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_146(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_147(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_147(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_148(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_148(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_149(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_149(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_150(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_150(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_151(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_151(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_152(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_152(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_153(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_153(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_154(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_154(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_155(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_155(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_156(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_156(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_157(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_157(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_158(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_158(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_159(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_159(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_160(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_160(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_161(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_161(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_162(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_162(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_163(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_163(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_164(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_164(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_165(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_165(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_166(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_166(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_167(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_167(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_168(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_168(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_169(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_169(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_170(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_170(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_171(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_171(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_172(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_172(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_173(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_173(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_174(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_174(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_175(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_175(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_176(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_176(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_177(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_177(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_178(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_178(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_179(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_179(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_180(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_180(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_181(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_181(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_182(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_182(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_183(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_183(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_184(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_184(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_185(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_185(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_186(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_186(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_187(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_187(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_188(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_188(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_189(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_189(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_190(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_190(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_191(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_191(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_192(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_192(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_193(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_193(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_194(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_194(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_195(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_195(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_196(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_196(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_197(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_197(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_198(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_198(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_199(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_199(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_200(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_200(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_201(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_201(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_202(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_202(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_203(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_203(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_204(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_204(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_205(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_205(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_206(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_206(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_207(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_207(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_208(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_208(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_209(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_209(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_210(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_210(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_211(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_211(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_212(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_212(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_213(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_213(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_214(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_214(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_215(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_215(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_216(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_216(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_217(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_217(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_218(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_218(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_219(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_219(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_220(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_220(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_221(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_221(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_222(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_222(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_223(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_223(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_224(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_224(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_225(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_225(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_226(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_226(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_227(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_227(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_228(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_228(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_229(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_229(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_230(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_230(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_231(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_231(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_232(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_232(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_233(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_233(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_234(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_234(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_235(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_235(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_236(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_236(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_237(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_237(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_238(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_238(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_239(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_239(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_240(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_240(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_241(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_241(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_242(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_242(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_243(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_243(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_244(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_244(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_245(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_245(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_246(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_246(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_247(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_247(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_248(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_248(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_249(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_249(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_250(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_250(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_251(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_251(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_252(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_252(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_253(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_253(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_254(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_254(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_255(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_255(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_256(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_256(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_DMC()
+# define BOOST_PP_SEQ_FOLD_LEFT_I_1(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_2, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(2, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_2(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_3, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(3, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_3(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_4, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(4, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_4(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_5, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(5, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_5(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_6, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(6, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_6(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_7, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(7, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_7(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_8, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(8, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_8(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_9, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(9, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_9(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_10, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(10, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_10(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_11, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(11, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_11(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_12, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(12, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_12(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_13, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(13, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_13(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_14, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(14, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_14(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_15, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(15, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_15(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_16, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(16, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_16(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_17, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(17, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_17(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_18, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(18, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_18(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_19, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(19, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_19(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_20, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(20, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_20(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_21, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(21, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_21(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_22, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(22, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_22(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_23, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(23, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_23(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_24, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(24, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_24(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_25, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(25, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_25(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_26, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(26, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_26(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_27, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(27, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_27(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_28, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(28, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_28(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_29, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(29, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_29(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_30, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(30, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_30(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_31, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(31, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_31(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_32, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(32, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_32(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_33, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(33, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_33(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_34, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(34, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_34(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_35, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(35, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_35(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_36, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(36, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_36(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_37, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(37, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_37(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_38, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(38, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_38(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_39, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(39, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_39(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_40, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(40, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_40(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_41, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(41, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_41(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_42, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(42, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_42(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_43, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(43, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_43(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_44, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(44, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_44(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_45, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(45, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_45(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_46, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(46, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_46(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_47, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(47, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_47(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_48, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(48, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_48(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_49, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(49, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_49(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_50, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(50, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_50(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_51, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(51, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_51(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_52, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(52, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_52(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_53, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(53, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_53(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_54, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(54, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_54(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_55, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(55, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_55(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_56, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(56, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_56(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_57, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(57, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_57(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_58, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(58, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_58(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_59, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(59, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_59(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_60, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(60, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_60(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_61, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(61, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_61(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_62, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(62, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_62(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_63, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(63, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_63(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_64, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(64, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_64(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_65, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(65, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_65(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_66, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(66, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_66(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_67, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(67, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_67(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_68, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(68, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_68(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_69, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(69, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_69(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_70, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(70, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_70(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_71, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(71, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_71(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_72, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(72, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_72(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_73, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(73, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_73(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_74, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(74, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_74(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_75, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(75, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_75(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_76, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(76, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_76(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_77, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(77, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_77(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_78, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(78, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_78(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_79, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(79, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_79(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_80, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(80, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_80(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_81, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(81, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_81(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_82, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(82, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_82(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_83, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(83, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_83(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_84, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(84, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_84(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_85, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(85, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_85(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_86, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(86, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_86(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_87, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(87, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_87(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_88, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(88, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_88(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_89, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(89, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_89(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_90, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(90, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_90(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_91, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(91, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_91(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_92, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(92, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_92(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_93, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(93, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_93(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_94, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(94, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_94(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_95, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(95, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_95(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_96, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(96, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_96(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_97, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(97, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_97(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_98, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(98, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_98(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_99, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(99, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_99(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_100, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(100, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_100(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_101, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(101, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_101(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_102, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(102, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_102(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_103, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(103, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_103(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_104, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(104, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_104(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_105, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(105, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_105(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_106, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(106, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_106(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_107, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(107, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_107(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_108, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(108, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_108(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_109, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(109, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_109(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_110, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(110, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_110(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_111, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(111, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_111(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_112, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(112, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_112(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_113, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(113, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_113(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_114, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(114, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_114(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_115, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(115, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_115(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_116, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(116, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_116(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_117, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(117, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_117(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_118, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(118, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_118(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_119, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(119, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_119(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_120, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(120, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_120(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_121, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(121, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_121(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_122, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(122, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_122(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_123, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(123, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_123(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_124, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(124, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_124(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_125, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(125, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_125(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_126, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(126, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_126(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_127, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(127, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_127(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_128, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(128, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_128(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_129, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(129, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_129(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_130, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(130, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_130(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_131, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(131, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_131(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_132, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(132, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_132(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_133, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(133, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_133(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_134, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(134, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_134(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_135, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(135, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_135(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_136, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(136, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_136(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_137, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(137, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_137(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_138, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(138, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_138(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_139, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(139, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_139(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_140, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(140, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_140(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_141, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(141, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_141(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_142, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(142, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_142(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_143, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(143, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_143(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_144, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(144, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_144(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_145, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(145, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_145(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_146, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(146, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_146(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_147, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(147, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_147(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_148, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(148, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_148(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_149, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(149, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_149(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_150, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(150, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_150(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_151, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(151, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_151(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_152, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(152, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_152(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_153, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(153, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_153(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_154, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(154, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_154(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_155, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(155, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_155(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_156, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(156, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_156(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_157, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(157, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_157(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_158, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(158, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_158(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_159, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(159, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_159(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_160, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(160, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_160(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_161, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(161, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_161(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_162, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(162, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_162(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_163, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(163, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_163(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_164, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(164, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_164(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_165, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(165, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_165(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_166, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(166, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_166(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_167, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(167, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_167(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_168, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(168, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_168(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_169, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(169, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_169(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_170, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(170, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_170(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_171, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(171, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_171(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_172, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(172, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_172(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_173, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(173, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_173(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_174, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(174, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_174(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_175, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(175, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_175(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_176, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(176, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_176(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_177, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(177, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_177(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_178, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(178, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_178(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_179, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(179, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_179(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_180, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(180, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_180(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_181, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(181, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_181(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_182, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(182, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_182(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_183, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(183, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_183(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_184, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(184, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_184(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_185, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(185, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_185(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_186, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(186, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_186(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_187, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(187, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_187(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_188, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(188, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_188(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_189, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(189, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_189(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_190, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(190, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_190(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_191, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(191, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_191(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_192, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(192, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_192(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_193, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(193, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_193(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_194, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(194, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_194(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_195, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(195, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_195(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_196, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(196, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_196(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_197, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(197, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_197(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_198, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(198, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_198(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_199, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(199, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_199(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_200, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(200, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_200(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_201, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(201, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_201(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_202, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(202, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_202(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_203, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(203, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_203(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_204, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(204, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_204(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_205, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(205, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_205(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_206, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(206, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_206(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_207, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(207, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_207(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_208, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(208, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_208(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_209, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(209, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_209(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_210, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(210, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_210(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_211, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(211, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_211(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_212, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(212, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_212(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_213, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(213, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_213(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_214, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(214, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_214(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_215, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(215, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_215(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_216, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(216, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_216(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_217, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(217, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_217(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_218, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(218, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_218(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_219, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(219, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_219(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_220, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(220, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_220(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_221, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(221, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_221(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_222, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(222, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_222(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_223, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(223, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_223(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_224, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(224, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_224(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_225, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(225, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_225(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_226, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(226, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_226(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_227, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(227, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_227(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_228, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(228, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_228(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_229, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(229, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_229(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_230, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(230, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_230(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_231, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(231, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_231(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_232, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(232, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_232(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_233, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(233, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_233(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_234, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(234, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_234(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_235, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(235, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_235(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_236, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(236, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_236(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_237, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(237, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_237(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_238, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(238, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_238(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_239, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(239, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_239(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_240, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(240, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_240(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_241, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(241, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_241(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_242, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(242, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_242(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_243, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(243, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_243(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_244, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(244, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_244(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_245, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(245, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_245(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_246, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(246, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_246(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_247, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(247, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_247(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_248, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(248, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_248(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_249, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(249, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_249(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_250, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(250, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_250(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_251, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(251, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_251(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_252, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(252, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_252(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_253, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(253, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_253(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_254, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(254, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_254(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_255, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(255, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_255(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_256, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(256, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_256(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_257, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(257, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# else
+# define BOOST_PP_SEQ_FOLD_LEFT_I_1(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_2, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(2, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_2(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_3, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(3, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_3(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_4, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(4, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_4(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_5, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(5, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_5(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_6, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(6, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_6(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_7, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(7, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_7(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_8, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(8, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_8(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_9, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(9, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_9(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_10, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(10, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_10(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_11, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(11, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_11(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_12, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(12, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_12(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_13, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(13, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_13(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_14, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(14, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_14(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_15, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(15, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_15(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_16, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(16, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_16(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_17, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(17, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_17(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_18, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(18, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_18(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_19, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(19, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_19(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_20, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(20, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_20(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_21, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(21, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_21(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_22, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(22, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_22(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_23, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(23, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_23(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_24, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(24, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_24(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_25, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(25, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_25(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_26, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(26, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_26(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_27, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(27, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_27(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_28, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(28, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_28(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_29, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(29, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_29(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_30, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(30, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_30(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_31, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(31, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_31(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_32, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(32, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_32(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_33, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(33, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_33(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_34, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(34, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_34(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_35, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(35, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_35(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_36, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(36, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_36(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_37, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(37, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_37(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_38, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(38, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_38(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_39, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(39, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_39(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_40, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(40, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_40(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_41, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(41, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_41(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_42, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(42, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_42(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_43, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(43, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_43(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_44, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(44, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_44(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_45, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(45, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_45(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_46, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(46, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_46(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_47, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(47, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_47(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_48, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(48, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_48(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_49, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(49, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_49(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_50, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(50, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_50(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_51, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(51, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_51(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_52, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(52, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_52(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_53, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(53, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_53(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_54, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(54, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_54(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_55, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(55, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_55(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_56, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(56, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_56(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_57, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(57, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_57(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_58, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(58, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_58(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_59, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(59, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_59(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_60, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(60, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_60(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_61, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(61, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_61(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_62, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(62, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_62(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_63, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(63, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_63(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_64, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(64, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_64(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_65, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(65, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_65(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_66, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(66, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_66(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_67, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(67, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_67(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_68, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(68, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_68(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_69, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(69, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_69(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_70, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(70, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_70(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_71, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(71, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_71(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_72, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(72, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_72(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_73, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(73, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_73(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_74, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(74, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_74(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_75, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(75, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_75(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_76, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(76, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_76(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_77, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(77, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_77(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_78, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(78, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_78(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_79, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(79, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_79(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_80, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(80, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_80(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_81, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(81, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_81(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_82, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(82, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_82(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_83, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(83, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_83(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_84, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(84, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_84(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_85, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(85, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_85(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_86, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(86, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_86(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_87, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(87, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_87(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_88, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(88, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_88(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_89, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(89, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_89(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_90, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(90, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_90(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_91, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(91, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_91(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_92, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(92, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_92(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_93, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(93, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_93(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_94, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(94, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_94(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_95, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(95, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_95(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_96, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(96, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_96(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_97, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(97, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_97(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_98, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(98, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_98(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_99, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(99, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_99(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_100, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(100, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_100(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_101, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(101, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_101(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_102, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(102, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_102(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_103, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(103, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_103(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_104, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(104, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_104(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_105, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(105, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_105(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_106, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(106, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_106(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_107, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(107, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_107(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_108, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(108, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_108(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_109, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(109, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_109(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_110, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(110, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_110(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_111, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(111, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_111(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_112, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(112, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_112(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_113, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(113, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_113(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_114, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(114, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_114(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_115, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(115, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_115(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_116, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(116, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_116(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_117, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(117, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_117(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_118, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(118, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_118(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_119, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(119, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_119(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_120, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(120, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_120(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_121, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(121, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_121(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_122, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(122, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_122(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_123, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(123, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_123(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_124, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(124, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_124(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_125, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(125, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_125(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_126, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(126, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_126(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_127, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(127, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_127(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_128, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(128, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_128(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_129, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(129, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_129(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_130, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(130, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_130(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_131, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(131, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_131(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_132, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(132, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_132(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_133, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(133, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_133(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_134, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(134, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_134(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_135, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(135, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_135(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_136, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(136, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_136(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_137, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(137, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_137(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_138, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(138, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_138(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_139, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(139, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_139(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_140, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(140, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_140(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_141, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(141, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_141(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_142, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(142, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_142(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_143, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(143, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_143(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_144, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(144, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_144(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_145, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(145, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_145(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_146, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(146, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_146(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_147, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(147, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_147(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_148, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(148, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_148(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_149, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(149, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_149(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_150, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(150, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_150(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_151, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(151, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_151(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_152, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(152, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_152(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_153, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(153, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_153(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_154, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(154, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_154(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_155, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(155, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_155(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_156, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(156, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_156(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_157, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(157, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_157(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_158, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(158, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_158(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_159, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(159, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_159(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_160, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(160, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_160(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_161, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(161, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_161(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_162, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(162, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_162(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_163, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(163, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_163(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_164, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(164, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_164(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_165, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(165, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_165(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_166, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(166, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_166(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_167, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(167, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_167(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_168, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(168, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_168(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_169, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(169, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_169(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_170, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(170, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_170(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_171, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(171, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_171(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_172, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(172, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_172(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_173, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(173, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_173(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_174, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(174, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_174(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_175, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(175, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_175(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_176, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(176, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_176(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_177, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(177, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_177(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_178, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(178, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_178(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_179, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(179, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_179(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_180, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(180, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_180(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_181, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(181, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_181(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_182, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(182, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_182(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_183, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(183, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_183(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_184, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(184, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_184(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_185, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(185, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_185(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_186, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(186, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_186(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_187, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(187, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_187(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_188, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(188, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_188(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_189, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(189, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_189(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_190, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(190, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_190(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_191, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(191, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_191(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_192, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(192, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_192(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_193, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(193, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_193(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_194, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(194, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_194(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_195, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(195, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_195(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_196, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(196, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_196(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_197, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(197, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_197(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_198, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(198, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_198(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_199, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(199, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_199(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_200, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(200, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_200(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_201, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(201, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_201(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_202, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(202, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_202(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_203, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(203, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_203(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_204, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(204, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_204(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_205, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(205, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_205(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_206, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(206, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_206(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_207, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(207, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_207(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_208, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(208, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_208(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_209, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(209, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_209(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_210, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(210, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_210(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_211, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(211, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_211(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_212, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(212, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_212(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_213, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(213, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_213(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_214, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(214, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_214(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_215, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(215, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_215(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_216, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(216, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_216(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_217, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(217, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_217(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_218, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(218, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_218(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_219, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(219, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_219(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_220, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(220, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_220(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_221, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(221, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_221(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_222, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(222, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_222(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_223, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(223, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_223(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_224, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(224, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_224(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_225, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(225, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_225(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_226, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(226, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_226(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_227, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(227, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_227(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_228, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(228, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_228(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_229, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(229, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_229(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_230, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(230, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_230(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_231, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(231, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_231(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_232, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(232, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_232(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_233, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(233, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_233(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_234, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(234, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_234(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_235, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(235, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_235(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_236, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(236, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_236(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_237, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(237, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_237(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_238, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(238, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_238(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_239, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(239, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_239(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_240, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(240, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_240(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_241, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(241, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_241(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_242, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(242, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_242(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_243, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(243, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_243(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_244, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(244, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_244(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_245, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(245, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_245(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_246, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(246, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_246(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_247, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(247, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_247(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_248, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(248, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_248(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_249, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(249, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_249(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_250, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(250, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_250(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_251, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(251, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_251(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_252, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(252, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_252(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_253, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(253, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_253(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_254, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(254, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_254(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_255, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(255, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_255(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_256, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(256, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# define BOOST_PP_SEQ_FOLD_LEFT_I_256(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_257, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(257, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/seq/fold_right.hpp b/boost/boost/preprocessor/seq/fold_right.hpp
new file mode 100644
index 00000000000..c2c365b29ad
--- /dev/null
+++ b/boost/boost/preprocessor/seq/fold_right.hpp
@@ -0,0 +1,288 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SEQ_FOLD_RIGHT_HPP
+# define BOOST_PREPROCESSOR_SEQ_FOLD_RIGHT_HPP
+#
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/detail/auto_rec.hpp>
+# include <boost/preprocessor/seq/fold_left.hpp>
+# include <boost/preprocessor/seq/reverse.hpp>
+# include <boost/preprocessor/seq/seq.hpp>
+#
+# /* BOOST_PP_SEQ_FOLD_RIGHT */
+#
+# if 0
+# define BOOST_PP_SEQ_FOLD_RIGHT(op, state, seq) ...
+# endif
+#
+# define BOOST_PP_SEQ_FOLD_RIGHT BOOST_PP_CAT(BOOST_PP_SEQ_FOLD_RIGHT_, BOOST_PP_AUTO_REC(BOOST_PP_SEQ_FOLD_LEFT_P, 256))
+#
+# define BOOST_PP_SEQ_FOLD_RIGHT_257(op, st, ss) BOOST_PP_ERROR(0x0005)
+#
+# define BOOST_PP_SEQ_FOLD_RIGHT_1(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_1(op, st, BOOST_PP_SEQ_REVERSE_S(2, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_2(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_2(op, st, BOOST_PP_SEQ_REVERSE_S(3, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_3(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_3(op, st, BOOST_PP_SEQ_REVERSE_S(4, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_4(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_4(op, st, BOOST_PP_SEQ_REVERSE_S(5, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_5(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_5(op, st, BOOST_PP_SEQ_REVERSE_S(6, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_6(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_6(op, st, BOOST_PP_SEQ_REVERSE_S(7, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_7(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_7(op, st, BOOST_PP_SEQ_REVERSE_S(8, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_8(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_8(op, st, BOOST_PP_SEQ_REVERSE_S(9, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_9(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_9(op, st, BOOST_PP_SEQ_REVERSE_S(10, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_10(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_10(op, st, BOOST_PP_SEQ_REVERSE_S(11, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_11(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_11(op, st, BOOST_PP_SEQ_REVERSE_S(12, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_12(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_12(op, st, BOOST_PP_SEQ_REVERSE_S(13, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_13(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_13(op, st, BOOST_PP_SEQ_REVERSE_S(14, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_14(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_14(op, st, BOOST_PP_SEQ_REVERSE_S(15, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_15(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_15(op, st, BOOST_PP_SEQ_REVERSE_S(16, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_16(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_16(op, st, BOOST_PP_SEQ_REVERSE_S(17, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_17(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_17(op, st, BOOST_PP_SEQ_REVERSE_S(18, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_18(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_18(op, st, BOOST_PP_SEQ_REVERSE_S(19, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_19(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_19(op, st, BOOST_PP_SEQ_REVERSE_S(20, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_20(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_20(op, st, BOOST_PP_SEQ_REVERSE_S(21, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_21(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_21(op, st, BOOST_PP_SEQ_REVERSE_S(22, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_22(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_22(op, st, BOOST_PP_SEQ_REVERSE_S(23, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_23(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_23(op, st, BOOST_PP_SEQ_REVERSE_S(24, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_24(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_24(op, st, BOOST_PP_SEQ_REVERSE_S(25, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_25(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_25(op, st, BOOST_PP_SEQ_REVERSE_S(26, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_26(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_26(op, st, BOOST_PP_SEQ_REVERSE_S(27, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_27(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_27(op, st, BOOST_PP_SEQ_REVERSE_S(28, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_28(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_28(op, st, BOOST_PP_SEQ_REVERSE_S(29, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_29(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_29(op, st, BOOST_PP_SEQ_REVERSE_S(30, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_30(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_30(op, st, BOOST_PP_SEQ_REVERSE_S(31, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_31(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_31(op, st, BOOST_PP_SEQ_REVERSE_S(32, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_32(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_32(op, st, BOOST_PP_SEQ_REVERSE_S(33, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_33(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_33(op, st, BOOST_PP_SEQ_REVERSE_S(34, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_34(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_34(op, st, BOOST_PP_SEQ_REVERSE_S(35, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_35(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_35(op, st, BOOST_PP_SEQ_REVERSE_S(36, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_36(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_36(op, st, BOOST_PP_SEQ_REVERSE_S(37, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_37(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_37(op, st, BOOST_PP_SEQ_REVERSE_S(38, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_38(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_38(op, st, BOOST_PP_SEQ_REVERSE_S(39, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_39(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_39(op, st, BOOST_PP_SEQ_REVERSE_S(40, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_40(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_40(op, st, BOOST_PP_SEQ_REVERSE_S(41, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_41(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_41(op, st, BOOST_PP_SEQ_REVERSE_S(42, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_42(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_42(op, st, BOOST_PP_SEQ_REVERSE_S(43, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_43(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_43(op, st, BOOST_PP_SEQ_REVERSE_S(44, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_44(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_44(op, st, BOOST_PP_SEQ_REVERSE_S(45, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_45(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_45(op, st, BOOST_PP_SEQ_REVERSE_S(46, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_46(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_46(op, st, BOOST_PP_SEQ_REVERSE_S(47, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_47(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_47(op, st, BOOST_PP_SEQ_REVERSE_S(48, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_48(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_48(op, st, BOOST_PP_SEQ_REVERSE_S(49, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_49(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_49(op, st, BOOST_PP_SEQ_REVERSE_S(50, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_50(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_50(op, st, BOOST_PP_SEQ_REVERSE_S(51, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_51(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_51(op, st, BOOST_PP_SEQ_REVERSE_S(52, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_52(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_52(op, st, BOOST_PP_SEQ_REVERSE_S(53, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_53(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_53(op, st, BOOST_PP_SEQ_REVERSE_S(54, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_54(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_54(op, st, BOOST_PP_SEQ_REVERSE_S(55, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_55(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_55(op, st, BOOST_PP_SEQ_REVERSE_S(56, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_56(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_56(op, st, BOOST_PP_SEQ_REVERSE_S(57, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_57(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_57(op, st, BOOST_PP_SEQ_REVERSE_S(58, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_58(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_58(op, st, BOOST_PP_SEQ_REVERSE_S(59, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_59(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_59(op, st, BOOST_PP_SEQ_REVERSE_S(60, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_60(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_60(op, st, BOOST_PP_SEQ_REVERSE_S(61, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_61(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_61(op, st, BOOST_PP_SEQ_REVERSE_S(62, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_62(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_62(op, st, BOOST_PP_SEQ_REVERSE_S(63, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_63(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_63(op, st, BOOST_PP_SEQ_REVERSE_S(64, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_64(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_64(op, st, BOOST_PP_SEQ_REVERSE_S(65, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_65(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_65(op, st, BOOST_PP_SEQ_REVERSE_S(66, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_66(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_66(op, st, BOOST_PP_SEQ_REVERSE_S(67, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_67(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_67(op, st, BOOST_PP_SEQ_REVERSE_S(68, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_68(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_68(op, st, BOOST_PP_SEQ_REVERSE_S(69, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_69(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_69(op, st, BOOST_PP_SEQ_REVERSE_S(70, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_70(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_70(op, st, BOOST_PP_SEQ_REVERSE_S(71, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_71(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_71(op, st, BOOST_PP_SEQ_REVERSE_S(72, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_72(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_72(op, st, BOOST_PP_SEQ_REVERSE_S(73, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_73(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_73(op, st, BOOST_PP_SEQ_REVERSE_S(74, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_74(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_74(op, st, BOOST_PP_SEQ_REVERSE_S(75, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_75(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_75(op, st, BOOST_PP_SEQ_REVERSE_S(76, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_76(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_76(op, st, BOOST_PP_SEQ_REVERSE_S(77, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_77(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_77(op, st, BOOST_PP_SEQ_REVERSE_S(78, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_78(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_78(op, st, BOOST_PP_SEQ_REVERSE_S(79, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_79(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_79(op, st, BOOST_PP_SEQ_REVERSE_S(80, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_80(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_80(op, st, BOOST_PP_SEQ_REVERSE_S(81, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_81(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_81(op, st, BOOST_PP_SEQ_REVERSE_S(82, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_82(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_82(op, st, BOOST_PP_SEQ_REVERSE_S(83, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_83(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_83(op, st, BOOST_PP_SEQ_REVERSE_S(84, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_84(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_84(op, st, BOOST_PP_SEQ_REVERSE_S(85, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_85(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_85(op, st, BOOST_PP_SEQ_REVERSE_S(86, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_86(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_86(op, st, BOOST_PP_SEQ_REVERSE_S(87, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_87(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_87(op, st, BOOST_PP_SEQ_REVERSE_S(88, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_88(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_88(op, st, BOOST_PP_SEQ_REVERSE_S(89, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_89(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_89(op, st, BOOST_PP_SEQ_REVERSE_S(90, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_90(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_90(op, st, BOOST_PP_SEQ_REVERSE_S(91, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_91(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_91(op, st, BOOST_PP_SEQ_REVERSE_S(92, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_92(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_92(op, st, BOOST_PP_SEQ_REVERSE_S(93, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_93(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_93(op, st, BOOST_PP_SEQ_REVERSE_S(94, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_94(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_94(op, st, BOOST_PP_SEQ_REVERSE_S(95, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_95(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_95(op, st, BOOST_PP_SEQ_REVERSE_S(96, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_96(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_96(op, st, BOOST_PP_SEQ_REVERSE_S(97, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_97(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_97(op, st, BOOST_PP_SEQ_REVERSE_S(98, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_98(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_98(op, st, BOOST_PP_SEQ_REVERSE_S(99, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_99(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_99(op, st, BOOST_PP_SEQ_REVERSE_S(100, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_100(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_100(op, st, BOOST_PP_SEQ_REVERSE_S(101, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_101(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_101(op, st, BOOST_PP_SEQ_REVERSE_S(102, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_102(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_102(op, st, BOOST_PP_SEQ_REVERSE_S(103, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_103(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_103(op, st, BOOST_PP_SEQ_REVERSE_S(104, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_104(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_104(op, st, BOOST_PP_SEQ_REVERSE_S(105, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_105(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_105(op, st, BOOST_PP_SEQ_REVERSE_S(106, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_106(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_106(op, st, BOOST_PP_SEQ_REVERSE_S(107, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_107(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_107(op, st, BOOST_PP_SEQ_REVERSE_S(108, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_108(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_108(op, st, BOOST_PP_SEQ_REVERSE_S(109, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_109(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_109(op, st, BOOST_PP_SEQ_REVERSE_S(110, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_110(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_110(op, st, BOOST_PP_SEQ_REVERSE_S(111, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_111(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_111(op, st, BOOST_PP_SEQ_REVERSE_S(112, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_112(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_112(op, st, BOOST_PP_SEQ_REVERSE_S(113, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_113(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_113(op, st, BOOST_PP_SEQ_REVERSE_S(114, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_114(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_114(op, st, BOOST_PP_SEQ_REVERSE_S(115, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_115(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_115(op, st, BOOST_PP_SEQ_REVERSE_S(116, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_116(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_116(op, st, BOOST_PP_SEQ_REVERSE_S(117, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_117(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_117(op, st, BOOST_PP_SEQ_REVERSE_S(118, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_118(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_118(op, st, BOOST_PP_SEQ_REVERSE_S(119, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_119(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_119(op, st, BOOST_PP_SEQ_REVERSE_S(120, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_120(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_120(op, st, BOOST_PP_SEQ_REVERSE_S(121, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_121(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_121(op, st, BOOST_PP_SEQ_REVERSE_S(122, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_122(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_122(op, st, BOOST_PP_SEQ_REVERSE_S(123, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_123(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_123(op, st, BOOST_PP_SEQ_REVERSE_S(124, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_124(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_124(op, st, BOOST_PP_SEQ_REVERSE_S(125, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_125(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_125(op, st, BOOST_PP_SEQ_REVERSE_S(126, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_126(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_126(op, st, BOOST_PP_SEQ_REVERSE_S(127, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_127(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_127(op, st, BOOST_PP_SEQ_REVERSE_S(128, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_128(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_128(op, st, BOOST_PP_SEQ_REVERSE_S(129, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_129(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_129(op, st, BOOST_PP_SEQ_REVERSE_S(130, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_130(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_130(op, st, BOOST_PP_SEQ_REVERSE_S(131, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_131(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_131(op, st, BOOST_PP_SEQ_REVERSE_S(132, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_132(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_132(op, st, BOOST_PP_SEQ_REVERSE_S(133, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_133(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_133(op, st, BOOST_PP_SEQ_REVERSE_S(134, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_134(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_134(op, st, BOOST_PP_SEQ_REVERSE_S(135, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_135(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_135(op, st, BOOST_PP_SEQ_REVERSE_S(136, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_136(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_136(op, st, BOOST_PP_SEQ_REVERSE_S(137, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_137(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_137(op, st, BOOST_PP_SEQ_REVERSE_S(138, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_138(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_138(op, st, BOOST_PP_SEQ_REVERSE_S(139, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_139(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_139(op, st, BOOST_PP_SEQ_REVERSE_S(140, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_140(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_140(op, st, BOOST_PP_SEQ_REVERSE_S(141, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_141(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_141(op, st, BOOST_PP_SEQ_REVERSE_S(142, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_142(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_142(op, st, BOOST_PP_SEQ_REVERSE_S(143, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_143(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_143(op, st, BOOST_PP_SEQ_REVERSE_S(144, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_144(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_144(op, st, BOOST_PP_SEQ_REVERSE_S(145, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_145(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_145(op, st, BOOST_PP_SEQ_REVERSE_S(146, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_146(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_146(op, st, BOOST_PP_SEQ_REVERSE_S(147, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_147(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_147(op, st, BOOST_PP_SEQ_REVERSE_S(148, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_148(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_148(op, st, BOOST_PP_SEQ_REVERSE_S(149, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_149(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_149(op, st, BOOST_PP_SEQ_REVERSE_S(150, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_150(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_150(op, st, BOOST_PP_SEQ_REVERSE_S(151, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_151(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_151(op, st, BOOST_PP_SEQ_REVERSE_S(152, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_152(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_152(op, st, BOOST_PP_SEQ_REVERSE_S(153, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_153(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_153(op, st, BOOST_PP_SEQ_REVERSE_S(154, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_154(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_154(op, st, BOOST_PP_SEQ_REVERSE_S(155, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_155(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_155(op, st, BOOST_PP_SEQ_REVERSE_S(156, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_156(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_156(op, st, BOOST_PP_SEQ_REVERSE_S(157, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_157(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_157(op, st, BOOST_PP_SEQ_REVERSE_S(158, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_158(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_158(op, st, BOOST_PP_SEQ_REVERSE_S(159, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_159(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_159(op, st, BOOST_PP_SEQ_REVERSE_S(160, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_160(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_160(op, st, BOOST_PP_SEQ_REVERSE_S(161, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_161(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_161(op, st, BOOST_PP_SEQ_REVERSE_S(162, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_162(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_162(op, st, BOOST_PP_SEQ_REVERSE_S(163, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_163(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_163(op, st, BOOST_PP_SEQ_REVERSE_S(164, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_164(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_164(op, st, BOOST_PP_SEQ_REVERSE_S(165, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_165(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_165(op, st, BOOST_PP_SEQ_REVERSE_S(166, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_166(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_166(op, st, BOOST_PP_SEQ_REVERSE_S(167, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_167(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_167(op, st, BOOST_PP_SEQ_REVERSE_S(168, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_168(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_168(op, st, BOOST_PP_SEQ_REVERSE_S(169, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_169(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_169(op, st, BOOST_PP_SEQ_REVERSE_S(170, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_170(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_170(op, st, BOOST_PP_SEQ_REVERSE_S(171, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_171(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_171(op, st, BOOST_PP_SEQ_REVERSE_S(172, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_172(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_172(op, st, BOOST_PP_SEQ_REVERSE_S(173, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_173(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_173(op, st, BOOST_PP_SEQ_REVERSE_S(174, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_174(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_174(op, st, BOOST_PP_SEQ_REVERSE_S(175, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_175(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_175(op, st, BOOST_PP_SEQ_REVERSE_S(176, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_176(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_176(op, st, BOOST_PP_SEQ_REVERSE_S(177, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_177(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_177(op, st, BOOST_PP_SEQ_REVERSE_S(178, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_178(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_178(op, st, BOOST_PP_SEQ_REVERSE_S(179, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_179(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_179(op, st, BOOST_PP_SEQ_REVERSE_S(180, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_180(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_180(op, st, BOOST_PP_SEQ_REVERSE_S(181, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_181(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_181(op, st, BOOST_PP_SEQ_REVERSE_S(182, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_182(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_182(op, st, BOOST_PP_SEQ_REVERSE_S(183, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_183(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_183(op, st, BOOST_PP_SEQ_REVERSE_S(184, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_184(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_184(op, st, BOOST_PP_SEQ_REVERSE_S(185, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_185(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_185(op, st, BOOST_PP_SEQ_REVERSE_S(186, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_186(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_186(op, st, BOOST_PP_SEQ_REVERSE_S(187, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_187(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_187(op, st, BOOST_PP_SEQ_REVERSE_S(188, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_188(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_188(op, st, BOOST_PP_SEQ_REVERSE_S(189, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_189(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_189(op, st, BOOST_PP_SEQ_REVERSE_S(190, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_190(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_190(op, st, BOOST_PP_SEQ_REVERSE_S(191, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_191(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_191(op, st, BOOST_PP_SEQ_REVERSE_S(192, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_192(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_192(op, st, BOOST_PP_SEQ_REVERSE_S(193, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_193(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_193(op, st, BOOST_PP_SEQ_REVERSE_S(194, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_194(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_194(op, st, BOOST_PP_SEQ_REVERSE_S(195, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_195(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_195(op, st, BOOST_PP_SEQ_REVERSE_S(196, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_196(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_196(op, st, BOOST_PP_SEQ_REVERSE_S(197, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_197(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_197(op, st, BOOST_PP_SEQ_REVERSE_S(198, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_198(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_198(op, st, BOOST_PP_SEQ_REVERSE_S(199, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_199(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_199(op, st, BOOST_PP_SEQ_REVERSE_S(200, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_200(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_200(op, st, BOOST_PP_SEQ_REVERSE_S(201, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_201(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_201(op, st, BOOST_PP_SEQ_REVERSE_S(202, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_202(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_202(op, st, BOOST_PP_SEQ_REVERSE_S(203, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_203(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_203(op, st, BOOST_PP_SEQ_REVERSE_S(204, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_204(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_204(op, st, BOOST_PP_SEQ_REVERSE_S(205, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_205(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_205(op, st, BOOST_PP_SEQ_REVERSE_S(206, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_206(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_206(op, st, BOOST_PP_SEQ_REVERSE_S(207, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_207(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_207(op, st, BOOST_PP_SEQ_REVERSE_S(208, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_208(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_208(op, st, BOOST_PP_SEQ_REVERSE_S(209, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_209(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_209(op, st, BOOST_PP_SEQ_REVERSE_S(210, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_210(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_210(op, st, BOOST_PP_SEQ_REVERSE_S(211, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_211(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_211(op, st, BOOST_PP_SEQ_REVERSE_S(212, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_212(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_212(op, st, BOOST_PP_SEQ_REVERSE_S(213, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_213(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_213(op, st, BOOST_PP_SEQ_REVERSE_S(214, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_214(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_214(op, st, BOOST_PP_SEQ_REVERSE_S(215, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_215(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_215(op, st, BOOST_PP_SEQ_REVERSE_S(216, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_216(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_216(op, st, BOOST_PP_SEQ_REVERSE_S(217, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_217(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_217(op, st, BOOST_PP_SEQ_REVERSE_S(218, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_218(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_218(op, st, BOOST_PP_SEQ_REVERSE_S(219, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_219(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_219(op, st, BOOST_PP_SEQ_REVERSE_S(220, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_220(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_220(op, st, BOOST_PP_SEQ_REVERSE_S(221, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_221(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_221(op, st, BOOST_PP_SEQ_REVERSE_S(222, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_222(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_222(op, st, BOOST_PP_SEQ_REVERSE_S(223, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_223(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_223(op, st, BOOST_PP_SEQ_REVERSE_S(224, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_224(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_224(op, st, BOOST_PP_SEQ_REVERSE_S(225, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_225(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_225(op, st, BOOST_PP_SEQ_REVERSE_S(226, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_226(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_226(op, st, BOOST_PP_SEQ_REVERSE_S(227, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_227(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_227(op, st, BOOST_PP_SEQ_REVERSE_S(228, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_228(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_228(op, st, BOOST_PP_SEQ_REVERSE_S(229, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_229(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_229(op, st, BOOST_PP_SEQ_REVERSE_S(230, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_230(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_230(op, st, BOOST_PP_SEQ_REVERSE_S(231, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_231(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_231(op, st, BOOST_PP_SEQ_REVERSE_S(232, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_232(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_232(op, st, BOOST_PP_SEQ_REVERSE_S(233, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_233(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_233(op, st, BOOST_PP_SEQ_REVERSE_S(234, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_234(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_234(op, st, BOOST_PP_SEQ_REVERSE_S(235, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_235(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_235(op, st, BOOST_PP_SEQ_REVERSE_S(236, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_236(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_236(op, st, BOOST_PP_SEQ_REVERSE_S(237, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_237(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_237(op, st, BOOST_PP_SEQ_REVERSE_S(238, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_238(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_238(op, st, BOOST_PP_SEQ_REVERSE_S(239, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_239(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_239(op, st, BOOST_PP_SEQ_REVERSE_S(240, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_240(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_240(op, st, BOOST_PP_SEQ_REVERSE_S(241, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_241(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_241(op, st, BOOST_PP_SEQ_REVERSE_S(242, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_242(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_242(op, st, BOOST_PP_SEQ_REVERSE_S(243, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_243(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_243(op, st, BOOST_PP_SEQ_REVERSE_S(244, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_244(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_244(op, st, BOOST_PP_SEQ_REVERSE_S(245, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_245(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_245(op, st, BOOST_PP_SEQ_REVERSE_S(246, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_246(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_246(op, st, BOOST_PP_SEQ_REVERSE_S(247, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_247(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_247(op, st, BOOST_PP_SEQ_REVERSE_S(248, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_248(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_248(op, st, BOOST_PP_SEQ_REVERSE_S(249, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_249(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_249(op, st, BOOST_PP_SEQ_REVERSE_S(250, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_250(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_250(op, st, BOOST_PP_SEQ_REVERSE_S(251, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_251(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_251(op, st, BOOST_PP_SEQ_REVERSE_S(252, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_252(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_252(op, st, BOOST_PP_SEQ_REVERSE_S(253, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_253(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_253(op, st, BOOST_PP_SEQ_REVERSE_S(254, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_254(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_254(op, st, BOOST_PP_SEQ_REVERSE_S(255, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_255(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_255(op, st, BOOST_PP_SEQ_REVERSE_S(256, ss), BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_RIGHT_256(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_256(op, st, BOOST_PP_SEQ_REVERSE_S(257, ss), BOOST_PP_SEQ_SIZE(ss))
+#
+# endif
diff --git a/boost/boost/preprocessor/seq/for_each.hpp b/boost/boost/preprocessor/seq/for_each.hpp
new file mode 100644
index 00000000000..e997a9a852d
--- /dev/null
+++ b/boost/boost/preprocessor/seq/for_each.hpp
@@ -0,0 +1,60 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SEQ_FOR_EACH_HPP
+# define BOOST_PREPROCESSOR_SEQ_FOR_EACH_HPP
+#
+# include <boost/preprocessor/arithmetic/dec.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/repetition/for.hpp>
+# include <boost/preprocessor/seq/seq.hpp>
+# include <boost/preprocessor/seq/size.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+# include <boost/preprocessor/tuple/rem.hpp>
+#
+# /* BOOST_PP_SEQ_FOR_EACH */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_SEQ_FOR_EACH(macro, data, seq) BOOST_PP_FOR((macro, data, seq (nil)), BOOST_PP_SEQ_FOR_EACH_P, BOOST_PP_SEQ_FOR_EACH_O, BOOST_PP_SEQ_FOR_EACH_M)
+# else
+# define BOOST_PP_SEQ_FOR_EACH(macro, data, seq) BOOST_PP_SEQ_FOR_EACH_D(macro, data, seq)
+# define BOOST_PP_SEQ_FOR_EACH_D(macro, data, seq) BOOST_PP_FOR((macro, data, seq (nil)), BOOST_PP_SEQ_FOR_EACH_P, BOOST_PP_SEQ_FOR_EACH_O, BOOST_PP_SEQ_FOR_EACH_M)
+# endif
+#
+# define BOOST_PP_SEQ_FOR_EACH_P(r, x) BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(BOOST_PP_TUPLE_ELEM(3, 2, x)))
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()
+# define BOOST_PP_SEQ_FOR_EACH_O(r, x) BOOST_PP_SEQ_FOR_EACH_O_I x
+# else
+# define BOOST_PP_SEQ_FOR_EACH_O(r, x) BOOST_PP_SEQ_FOR_EACH_O_I(BOOST_PP_TUPLE_ELEM(3, 0, x), BOOST_PP_TUPLE_ELEM(3, 1, x), BOOST_PP_TUPLE_ELEM(3, 2, x))
+# endif
+#
+# define BOOST_PP_SEQ_FOR_EACH_O_I(macro, data, seq) (macro, data, BOOST_PP_SEQ_TAIL(seq))
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()
+# define BOOST_PP_SEQ_FOR_EACH_M(r, x) BOOST_PP_SEQ_FOR_EACH_M_IM(r, BOOST_PP_TUPLE_REM_3 x)
+# define BOOST_PP_SEQ_FOR_EACH_M_IM(r, im) BOOST_PP_SEQ_FOR_EACH_M_I(r, im)
+# else
+# define BOOST_PP_SEQ_FOR_EACH_M(r, x) BOOST_PP_SEQ_FOR_EACH_M_I(r, BOOST_PP_TUPLE_ELEM(3, 0, x), BOOST_PP_TUPLE_ELEM(3, 1, x), BOOST_PP_TUPLE_ELEM(3, 2, x))
+# endif
+#
+# define BOOST_PP_SEQ_FOR_EACH_M_I(r, macro, data, seq) macro(r, data, BOOST_PP_SEQ_HEAD(seq))
+#
+# /* BOOST_PP_SEQ_FOR_EACH_R */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_SEQ_FOR_EACH_R(r, macro, data, seq) BOOST_PP_FOR_ ## r((macro, data, seq (nil)), BOOST_PP_SEQ_FOR_EACH_P, BOOST_PP_SEQ_FOR_EACH_O, BOOST_PP_SEQ_FOR_EACH_M)
+# else
+# define BOOST_PP_SEQ_FOR_EACH_R(r, macro, data, seq) BOOST_PP_SEQ_FOR_EACH_R_I(r, macro, data, seq)
+# define BOOST_PP_SEQ_FOR_EACH_R_I(r, macro, data, seq) BOOST_PP_FOR_ ## r((macro, data, seq (nil)), BOOST_PP_SEQ_FOR_EACH_P, BOOST_PP_SEQ_FOR_EACH_O, BOOST_PP_SEQ_FOR_EACH_M)
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/seq/for_each_i.hpp b/boost/boost/preprocessor/seq/for_each_i.hpp
new file mode 100644
index 00000000000..c8edf5af447
--- /dev/null
+++ b/boost/boost/preprocessor/seq/for_each_i.hpp
@@ -0,0 +1,61 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SEQ_FOR_EACH_I_HPP
+# define BOOST_PREPROCESSOR_SEQ_FOR_EACH_I_HPP
+#
+# include <boost/preprocessor/arithmetic/dec.hpp>
+# include <boost/preprocessor/arithmetic/inc.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/repetition/for.hpp>
+# include <boost/preprocessor/seq/seq.hpp>
+# include <boost/preprocessor/seq/size.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+# include <boost/preprocessor/tuple/rem.hpp>
+#
+# /* BOOST_PP_SEQ_FOR_EACH_I */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_SEQ_FOR_EACH_I(macro, data, seq) BOOST_PP_FOR((macro, data, seq (nil), 0), BOOST_PP_SEQ_FOR_EACH_I_P, BOOST_PP_SEQ_FOR_EACH_I_O, BOOST_PP_SEQ_FOR_EACH_I_M)
+# else
+# define BOOST_PP_SEQ_FOR_EACH_I(macro, data, seq) BOOST_PP_SEQ_FOR_EACH_I_I(macro, data, seq)
+# define BOOST_PP_SEQ_FOR_EACH_I_I(macro, data, seq) BOOST_PP_FOR((macro, data, seq (nil), 0), BOOST_PP_SEQ_FOR_EACH_I_P, BOOST_PP_SEQ_FOR_EACH_I_O, BOOST_PP_SEQ_FOR_EACH_I_M)
+# endif
+#
+# define BOOST_PP_SEQ_FOR_EACH_I_P(r, x) BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(BOOST_PP_TUPLE_ELEM(4, 2, x)))
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()
+# define BOOST_PP_SEQ_FOR_EACH_I_O(r, x) BOOST_PP_SEQ_FOR_EACH_I_O_I x
+# else
+# define BOOST_PP_SEQ_FOR_EACH_I_O(r, x) BOOST_PP_SEQ_FOR_EACH_I_O_I(BOOST_PP_TUPLE_ELEM(4, 0, x), BOOST_PP_TUPLE_ELEM(4, 1, x), BOOST_PP_TUPLE_ELEM(4, 2, x), BOOST_PP_TUPLE_ELEM(4, 3, x))
+# endif
+#
+# define BOOST_PP_SEQ_FOR_EACH_I_O_I(macro, data, seq, i) (macro, data, BOOST_PP_SEQ_TAIL(seq), BOOST_PP_INC(i))
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()
+# define BOOST_PP_SEQ_FOR_EACH_I_M(r, x) BOOST_PP_SEQ_FOR_EACH_I_M_IM(r, BOOST_PP_TUPLE_REM_4 x)
+# define BOOST_PP_SEQ_FOR_EACH_I_M_IM(r, im) BOOST_PP_SEQ_FOR_EACH_I_M_I(r, im)
+# else
+# define BOOST_PP_SEQ_FOR_EACH_I_M(r, x) BOOST_PP_SEQ_FOR_EACH_I_M_I(r, BOOST_PP_TUPLE_ELEM(4, 0, x), BOOST_PP_TUPLE_ELEM(4, 1, x), BOOST_PP_TUPLE_ELEM(4, 2, x), BOOST_PP_TUPLE_ELEM(4, 3, x))
+# endif
+#
+# define BOOST_PP_SEQ_FOR_EACH_I_M_I(r, macro, data, seq, i) macro(r, data, i, BOOST_PP_SEQ_HEAD(seq))
+#
+# /* BOOST_PP_SEQ_FOR_EACH_I_R */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_SEQ_FOR_EACH_I_R(r, macro, data, seq) BOOST_PP_FOR_ ## r((macro, data, seq (nil), 0), BOOST_PP_SEQ_FOR_EACH_I_P, BOOST_PP_SEQ_FOR_EACH_I_O, BOOST_PP_SEQ_FOR_EACH_I_M)
+# else
+# define BOOST_PP_SEQ_FOR_EACH_I_R(r, macro, data, seq) BOOST_PP_SEQ_FOR_EACH_I_R_I(r, macro, data, seq)
+# define BOOST_PP_SEQ_FOR_EACH_I_R_I(r, macro, data, seq) BOOST_PP_FOR_ ## r((macro, data, seq (nil), 0), BOOST_PP_SEQ_FOR_EACH_I_P, BOOST_PP_SEQ_FOR_EACH_I_O, BOOST_PP_SEQ_FOR_EACH_I_M)
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/seq/for_each_product.hpp b/boost/boost/preprocessor/seq/for_each_product.hpp
new file mode 100644
index 00000000000..baf22df4809
--- /dev/null
+++ b/boost/boost/preprocessor/seq/for_each_product.hpp
@@ -0,0 +1,126 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SEQ_FOR_EACH_PRODUCT_HPP
+# define BOOST_PREPROCESSOR_SEQ_FOR_EACH_PRODUCT_HPP
+#
+# include <boost/preprocessor/arithmetic/dec.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/control/if.hpp>
+# include <boost/preprocessor/repetition/for.hpp>
+# include <boost/preprocessor/seq/seq.hpp>
+# include <boost/preprocessor/seq/size.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+# include <boost/preprocessor/tuple/rem.hpp>
+#
+# /* BOOST_PP_SEQ_FOR_EACH_PRODUCT */
+#
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT(macro, sets) BOOST_PP_SEQ_FOR_EACH_PRODUCT_E(BOOST_PP_FOR, macro, sets)
+#
+# /* BOOST_PP_SEQ_FOR_EACH_PRODUCT_R */
+#
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_R(r, macro, sets) BOOST_PP_SEQ_FOR_EACH_PRODUCT_E(BOOST_PP_FOR_ ## r, macro, sets)
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_E(impl, macro, sets) impl((BOOST_PP_SEQ_HEAD(sets)(nil), BOOST_PP_SEQ_TAIL(sets)(nil), (nil), macro), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_0)
+# else
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_E(impl, macro, sets) BOOST_PP_SEQ_FOR_EACH_PRODUCT_E_I(impl, macro, sets)
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_E_I(impl, macro, sets) impl((BOOST_PP_SEQ_HEAD(sets)(nil), BOOST_PP_SEQ_TAIL(sets)(nil), (nil), macro), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_0)
+# endif
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_P(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_P_I data
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_P_I(cset, rset, res, macro) BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(cset))
+# else
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_P(r, data) BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(BOOST_PP_TUPLE_ELEM(4, 0, data)))
+# endif
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_O(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_O_I data
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_O_I(cset, rset, res, macro) (BOOST_PP_SEQ_TAIL(cset), rset, res, macro)
+# else
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_O(r, data) (BOOST_PP_SEQ_TAIL(BOOST_PP_TUPLE_ELEM(4, 0, data)), BOOST_PP_TUPLE_ELEM(4, 1, data), BOOST_PP_TUPLE_ELEM(4, 2, data), BOOST_PP_TUPLE_ELEM(4, 3, data))
+# endif
+#
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_C(data, i) BOOST_PP_IF(BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(BOOST_PP_TUPLE_ELEM(4, 1, data))), BOOST_PP_SEQ_FOR_EACH_PRODUCT_N_ ## i, BOOST_PP_SEQ_FOR_EACH_PRODUCT_I)
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_I(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_I_I(r, BOOST_PP_TUPLE_ELEM(4, 0, data), BOOST_PP_TUPLE_ELEM(4, 1, data), BOOST_PP_TUPLE_ELEM(4, 2, data), BOOST_PP_TUPLE_ELEM(4, 3, data))
+# else
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_I(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_I_IM(r, BOOST_PP_TUPLE_REM_4 data)
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_I_IM(r, im) BOOST_PP_SEQ_FOR_EACH_PRODUCT_I_I(r, im)
+# endif
+#
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_I_I(r, cset, rset, res, macro) macro(r, BOOST_PP_SEQ_TAIL(res (BOOST_PP_SEQ_HEAD(cset))))
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_H_I data
+# else
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_H_I(BOOST_PP_TUPLE_ELEM(4, 0, data), BOOST_PP_TUPLE_ELEM(4, 1, data), BOOST_PP_TUPLE_ELEM(4, 2, data), BOOST_PP_TUPLE_ELEM(4, 3, data))
+# endif
+#
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_H_I(cset, rset, res, macro) (BOOST_PP_SEQ_HEAD(rset)(nil), BOOST_PP_SEQ_TAIL(rset), res (BOOST_PP_SEQ_HEAD(cset)), macro)
+#
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_0(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_C(data, 0)(r, data)
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_1(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_C(data, 1)(r, data)
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_2(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_C(data, 2)(r, data)
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_3(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_C(data, 3)(r, data)
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_4(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_C(data, 4)(r, data)
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_5(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_C(data, 5)(r, data)
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_6(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_C(data, 6)(r, data)
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_7(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_C(data, 7)(r, data)
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_8(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_C(data, 8)(r, data)
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_9(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_C(data, 9)(r, data)
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_10(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_C(data, 10)(r, data)
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_11(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_C(data, 11)(r, data)
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_12(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_C(data, 12)(r, data)
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_13(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_C(data, 13)(r, data)
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_14(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_C(data, 14)(r, data)
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_15(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_C(data, 15)(r, data)
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_16(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_C(data, 16)(r, data)
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_17(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_C(data, 17)(r, data)
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_18(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_C(data, 18)(r, data)
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_19(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_C(data, 19)(r, data)
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_20(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_C(data, 20)(r, data)
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_21(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_C(data, 21)(r, data)
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_22(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_C(data, 22)(r, data)
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_23(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_C(data, 23)(r, data)
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_24(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_C(data, 24)(r, data)
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_25(r, data) BOOST_PP_SEQ_FOR_EACH_PRODUCT_C(data, 25)(r, data)
+#
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_N_0(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_1)
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_N_1(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_2)
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_N_2(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_3)
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_N_3(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_4)
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_N_4(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_5)
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_N_5(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_6)
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_N_6(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_7)
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_N_7(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_8)
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_N_8(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_9)
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_N_9(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_10)
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_N_10(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_11)
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_N_11(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_12)
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_N_12(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_13)
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_N_13(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_14)
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_N_14(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_15)
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_N_15(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_16)
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_N_16(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_17)
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_N_17(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_18)
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_N_18(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_19)
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_N_19(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_20)
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_N_20(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_21)
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_N_21(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_22)
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_N_22(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_23)
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_N_23(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_24)
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_N_24(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_25)
+# define BOOST_PP_SEQ_FOR_EACH_PRODUCT_N_25(r, data) BOOST_PP_FOR_ ## r(BOOST_PP_SEQ_FOR_EACH_PRODUCT_H(data), BOOST_PP_SEQ_FOR_EACH_PRODUCT_P, BOOST_PP_SEQ_FOR_EACH_PRODUCT_O, BOOST_PP_SEQ_FOR_EACH_PRODUCT_M_26)
+#
+# endif
diff --git a/boost/boost/preprocessor/seq/insert.hpp b/boost/boost/preprocessor/seq/insert.hpp
new file mode 100644
index 00000000000..59ce2f4d186
--- /dev/null
+++ b/boost/boost/preprocessor/seq/insert.hpp
@@ -0,0 +1,28 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SEQ_INSERT_HPP
+# define BOOST_PREPROCESSOR_SEQ_INSERT_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/seq/first_n.hpp>
+# include <boost/preprocessor/seq/rest_n.hpp>
+#
+# /* BOOST_PP_SEQ_INSERT */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_SEQ_INSERT(seq, i, elem) BOOST_PP_SEQ_FIRST_N(i, seq) (elem) BOOST_PP_SEQ_REST_N(i, seq)
+# else
+# define BOOST_PP_SEQ_INSERT(seq, i, elem) BOOST_PP_SEQ_INSERT_I(seq, i, elem)
+# define BOOST_PP_SEQ_INSERT_I(seq, i, elem) BOOST_PP_SEQ_FIRST_N(i, seq) (elem) BOOST_PP_SEQ_REST_N(i, seq)
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/seq/pop_back.hpp b/boost/boost/preprocessor/seq/pop_back.hpp
new file mode 100644
index 00000000000..54200d61858
--- /dev/null
+++ b/boost/boost/preprocessor/seq/pop_back.hpp
@@ -0,0 +1,29 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SEQ_POP_BACK_HPP
+# define BOOST_PREPROCESSOR_SEQ_POP_BACK_HPP
+#
+# include <boost/preprocessor/arithmetic/dec.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/seq/first_n.hpp>
+# include <boost/preprocessor/seq/size.hpp>
+#
+# /* BOOST_PP_SEQ_POP_BACK */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_SEQ_POP_BACK(seq) BOOST_PP_SEQ_FIRST_N(BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(seq)), seq)
+# else
+# define BOOST_PP_SEQ_POP_BACK(seq) BOOST_PP_SEQ_POP_BACK_I(seq)
+# define BOOST_PP_SEQ_POP_BACK_I(seq) BOOST_PP_SEQ_FIRST_N(BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(seq)), seq)
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/seq/pop_front.hpp b/boost/boost/preprocessor/seq/pop_front.hpp
new file mode 100644
index 00000000000..7d94eea9161
--- /dev/null
+++ b/boost/boost/preprocessor/seq/pop_front.hpp
@@ -0,0 +1,27 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SEQ_POP_FRONT_HPP
+# define BOOST_PREPROCESSOR_SEQ_POP_FRONT_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/seq/seq.hpp>
+#
+# /* BOOST_PP_SEQ_POP_FRONT */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_SEQ_POP_FRONT(seq) BOOST_PP_SEQ_TAIL(seq)
+# else
+# define BOOST_PP_SEQ_POP_FRONT(seq) BOOST_PP_SEQ_POP_FRONT_I(seq)
+# define BOOST_PP_SEQ_POP_FRONT_I(seq) BOOST_PP_SEQ_TAIL(seq)
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/seq/push_back.hpp b/boost/boost/preprocessor/seq/push_back.hpp
new file mode 100644
index 00000000000..1938d0be644
--- /dev/null
+++ b/boost/boost/preprocessor/seq/push_back.hpp
@@ -0,0 +1,19 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SEQ_PUSH_BACK_HPP
+# define BOOST_PREPROCESSOR_SEQ_PUSH_BACK_HPP
+#
+# /* BOOST_PP_SEQ_PUSH_BACK */
+#
+# define BOOST_PP_SEQ_PUSH_BACK(seq, elem) seq(elem)
+#
+# endif
diff --git a/boost/boost/preprocessor/seq/push_front.hpp b/boost/boost/preprocessor/seq/push_front.hpp
new file mode 100644
index 00000000000..2ce73ad1a3f
--- /dev/null
+++ b/boost/boost/preprocessor/seq/push_front.hpp
@@ -0,0 +1,19 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SEQ_PUSH_FRONT_HPP
+# define BOOST_PREPROCESSOR_SEQ_PUSH_FRONT_HPP
+#
+# /* BOOST_PP_SEQ_PUSH_FRONT */
+#
+# define BOOST_PP_SEQ_PUSH_FRONT(seq, elem) (elem)seq
+#
+# endif
diff --git a/boost/boost/preprocessor/seq/remove.hpp b/boost/boost/preprocessor/seq/remove.hpp
new file mode 100644
index 00000000000..d2f77b0c61b
--- /dev/null
+++ b/boost/boost/preprocessor/seq/remove.hpp
@@ -0,0 +1,29 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SEQ_REMOVE_HPP
+# define BOOST_PREPROCESSOR_SEQ_REMOVE_HPP
+#
+# include <boost/preprocessor/arithmetic/inc.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/seq/first_n.hpp>
+# include <boost/preprocessor/seq/rest_n.hpp>
+#
+# /* BOOST_PP_SEQ_REMOVE */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_SEQ_REMOVE(seq, i) BOOST_PP_SEQ_FIRST_N(i, seq) BOOST_PP_SEQ_REST_N(BOOST_PP_INC(i), seq)
+# else
+# define BOOST_PP_SEQ_REMOVE(seq, i) BOOST_PP_SEQ_REMOVE_I(seq, i)
+# define BOOST_PP_SEQ_REMOVE_I(seq, i) BOOST_PP_SEQ_FIRST_N(i, seq) BOOST_PP_SEQ_REST_N(BOOST_PP_INC(i), seq)
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/seq/replace.hpp b/boost/boost/preprocessor/seq/replace.hpp
new file mode 100644
index 00000000000..d6107a76268
--- /dev/null
+++ b/boost/boost/preprocessor/seq/replace.hpp
@@ -0,0 +1,29 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SEQ_REPLACE_HPP
+# define BOOST_PREPROCESSOR_SEQ_REPLACE_HPP
+#
+# include <boost/preprocessor/arithmetic/inc.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/seq/first_n.hpp>
+# include <boost/preprocessor/seq/rest_n.hpp>
+#
+# /* BOOST_PP_SEQ_REPLACE */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_SEQ_REPLACE(seq, i, elem) BOOST_PP_SEQ_FIRST_N(i, seq) (elem) BOOST_PP_SEQ_REST_N(BOOST_PP_INC(i), seq)
+# else
+# define BOOST_PP_SEQ_REPLACE(seq, i, elem) BOOST_PP_SEQ_REPLACE_I(seq, i, elem)
+# define BOOST_PP_SEQ_REPLACE_I(seq, i, elem) BOOST_PP_SEQ_FIRST_N(i, seq) (elem) BOOST_PP_SEQ_REST_N(BOOST_PP_INC(i), seq)
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/seq/rest_n.hpp b/boost/boost/preprocessor/seq/rest_n.hpp
new file mode 100644
index 00000000000..7e589cce5a3
--- /dev/null
+++ b/boost/boost/preprocessor/seq/rest_n.hpp
@@ -0,0 +1,30 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SEQ_REST_N_HPP
+# define BOOST_PREPROCESSOR_SEQ_REST_N_HPP
+#
+# include <boost/preprocessor/arithmetic/inc.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/facilities/empty.hpp>
+# include <boost/preprocessor/seq/detail/split.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+#
+# /* BOOST_PP_SEQ_REST_N */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_SEQ_REST_N(n, seq) BOOST_PP_TUPLE_ELEM(2, 1, BOOST_PP_SEQ_SPLIT(BOOST_PP_INC(n), (nil) seq BOOST_PP_EMPTY))()
+# else
+# define BOOST_PP_SEQ_REST_N(n, seq) BOOST_PP_SEQ_REST_N_I(n, seq)
+# define BOOST_PP_SEQ_REST_N_I(n, seq) BOOST_PP_TUPLE_ELEM(2, 1, BOOST_PP_SEQ_SPLIT(BOOST_PP_INC(n), (nil) seq BOOST_PP_EMPTY))()
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/seq/reverse.hpp b/boost/boost/preprocessor/seq/reverse.hpp
new file mode 100644
index 00000000000..338d777d77b
--- /dev/null
+++ b/boost/boost/preprocessor/seq/reverse.hpp
@@ -0,0 +1,39 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SEQ_REVERSE_HPP
+# define BOOST_PREPROCESSOR_SEQ_REVERSE_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/facilities/empty.hpp>
+# include <boost/preprocessor/seq/fold_left.hpp>
+#
+# /* BOOST_PP_SEQ_REVERSE */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_SEQ_REVERSE(seq) BOOST_PP_SEQ_FOLD_LEFT(BOOST_PP_SEQ_REVERSE_O, BOOST_PP_EMPTY, seq)()
+# else
+# define BOOST_PP_SEQ_REVERSE(seq) BOOST_PP_SEQ_REVERSE_I(seq)
+# define BOOST_PP_SEQ_REVERSE_I(seq) BOOST_PP_SEQ_FOLD_LEFT(BOOST_PP_SEQ_REVERSE_O, BOOST_PP_EMPTY, seq)()
+# endif
+#
+# define BOOST_PP_SEQ_REVERSE_O(s, state, elem) (elem) state
+#
+# /* BOOST_PP_SEQ_REVERSE_S */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_SEQ_REVERSE_S(s, seq) BOOST_PP_SEQ_FOLD_LEFT_ ## s(BOOST_PP_SEQ_REVERSE_O, BOOST_PP_EMPTY, seq)()
+# else
+# define BOOST_PP_SEQ_REVERSE_S(s, seq) BOOST_PP_SEQ_REVERSE_S_I(s, seq)
+# define BOOST_PP_SEQ_REVERSE_S_I(s, seq) BOOST_PP_SEQ_FOLD_LEFT_ ## s(BOOST_PP_SEQ_REVERSE_O, BOOST_PP_EMPTY, seq)()
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/seq/seq.hpp b/boost/boost/preprocessor/seq/seq.hpp
new file mode 100644
index 00000000000..f5ca84c6f39
--- /dev/null
+++ b/boost/boost/preprocessor/seq/seq.hpp
@@ -0,0 +1,44 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SEQ_SEQ_HPP
+# define BOOST_PREPROCESSOR_SEQ_SEQ_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/seq/elem.hpp>
+#
+# /* BOOST_PP_SEQ_HEAD */
+#
+# define BOOST_PP_SEQ_HEAD(seq) BOOST_PP_SEQ_ELEM(0, seq)
+#
+# /* BOOST_PP_SEQ_TAIL */
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+# define BOOST_PP_SEQ_TAIL(seq) BOOST_PP_SEQ_TAIL_1((seq))
+# define BOOST_PP_SEQ_TAIL_1(par) BOOST_PP_SEQ_TAIL_2 ## par
+# define BOOST_PP_SEQ_TAIL_2(seq) BOOST_PP_SEQ_TAIL_I ## seq
+# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()
+# define BOOST_PP_SEQ_TAIL(seq) BOOST_PP_SEQ_TAIL_ID(BOOST_PP_SEQ_TAIL_I seq)
+# define BOOST_PP_SEQ_TAIL_ID(id) id
+# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_SEQ_TAIL(seq) BOOST_PP_SEQ_TAIL_D(seq)
+# define BOOST_PP_SEQ_TAIL_D(seq) BOOST_PP_SEQ_TAIL_I seq
+# else
+# define BOOST_PP_SEQ_TAIL(seq) BOOST_PP_SEQ_TAIL_I seq
+# endif
+#
+# define BOOST_PP_SEQ_TAIL_I(x)
+#
+# /* BOOST_PP_SEQ_NIL */
+#
+# define BOOST_PP_SEQ_NIL(x) (x)
+#
+# endif
diff --git a/boost/boost/preprocessor/seq/size.hpp b/boost/boost/preprocessor/seq/size.hpp
new file mode 100644
index 00000000000..2f7b70ea51f
--- /dev/null
+++ b/boost/boost/preprocessor/seq/size.hpp
@@ -0,0 +1,548 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SEQ_SIZE_HPP
+# define BOOST_PREPROCESSOR_SEQ_SIZE_HPP
+#
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/tuple/eat.hpp>
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+# define BOOST_PP_SEQ_SIZE(seq) BOOST_PP_SEQ_SIZE_I((seq))
+# define BOOST_PP_SEQ_SIZE_I(par) BOOST_PP_SEQ_SIZE_II ## par
+# define BOOST_PP_SEQ_SIZE_II(seq) BOOST_PP_CAT(BOOST_PP_SEQ_SIZE_, BOOST_PP_SEQ_SIZE_0 ## seq)
+# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG() || BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()
+# define BOOST_PP_SEQ_SIZE(seq) BOOST_PP_SEQ_SIZE_I(seq)
+# define BOOST_PP_SEQ_SIZE_I(seq) BOOST_PP_CAT(BOOST_PP_SEQ_SIZE_, BOOST_PP_SEQ_SIZE_0 seq)
+# elif defined(__IBMC__) || defined(__IBMCPP__)
+# define BOOST_PP_SEQ_SIZE(seq) BOOST_PP_CAT(BOOST_PP_SEQ_SIZE_, BOOST_PP_CAT(BOOST_PP_SEQ_SIZE_0, seq))
+# else
+# define BOOST_PP_SEQ_SIZE(seq) BOOST_PP_CAT(BOOST_PP_SEQ_SIZE_, BOOST_PP_SEQ_SIZE_0 seq)
+# endif
+#
+# define BOOST_PP_SEQ_SIZE_0(_) BOOST_PP_SEQ_SIZE_1
+# define BOOST_PP_SEQ_SIZE_1(_) BOOST_PP_SEQ_SIZE_2
+# define BOOST_PP_SEQ_SIZE_2(_) BOOST_PP_SEQ_SIZE_3
+# define BOOST_PP_SEQ_SIZE_3(_) BOOST_PP_SEQ_SIZE_4
+# define BOOST_PP_SEQ_SIZE_4(_) BOOST_PP_SEQ_SIZE_5
+# define BOOST_PP_SEQ_SIZE_5(_) BOOST_PP_SEQ_SIZE_6
+# define BOOST_PP_SEQ_SIZE_6(_) BOOST_PP_SEQ_SIZE_7
+# define BOOST_PP_SEQ_SIZE_7(_) BOOST_PP_SEQ_SIZE_8
+# define BOOST_PP_SEQ_SIZE_8(_) BOOST_PP_SEQ_SIZE_9
+# define BOOST_PP_SEQ_SIZE_9(_) BOOST_PP_SEQ_SIZE_10
+# define BOOST_PP_SEQ_SIZE_10(_) BOOST_PP_SEQ_SIZE_11
+# define BOOST_PP_SEQ_SIZE_11(_) BOOST_PP_SEQ_SIZE_12
+# define BOOST_PP_SEQ_SIZE_12(_) BOOST_PP_SEQ_SIZE_13
+# define BOOST_PP_SEQ_SIZE_13(_) BOOST_PP_SEQ_SIZE_14
+# define BOOST_PP_SEQ_SIZE_14(_) BOOST_PP_SEQ_SIZE_15
+# define BOOST_PP_SEQ_SIZE_15(_) BOOST_PP_SEQ_SIZE_16
+# define BOOST_PP_SEQ_SIZE_16(_) BOOST_PP_SEQ_SIZE_17
+# define BOOST_PP_SEQ_SIZE_17(_) BOOST_PP_SEQ_SIZE_18
+# define BOOST_PP_SEQ_SIZE_18(_) BOOST_PP_SEQ_SIZE_19
+# define BOOST_PP_SEQ_SIZE_19(_) BOOST_PP_SEQ_SIZE_20
+# define BOOST_PP_SEQ_SIZE_20(_) BOOST_PP_SEQ_SIZE_21
+# define BOOST_PP_SEQ_SIZE_21(_) BOOST_PP_SEQ_SIZE_22
+# define BOOST_PP_SEQ_SIZE_22(_) BOOST_PP_SEQ_SIZE_23
+# define BOOST_PP_SEQ_SIZE_23(_) BOOST_PP_SEQ_SIZE_24
+# define BOOST_PP_SEQ_SIZE_24(_) BOOST_PP_SEQ_SIZE_25
+# define BOOST_PP_SEQ_SIZE_25(_) BOOST_PP_SEQ_SIZE_26
+# define BOOST_PP_SEQ_SIZE_26(_) BOOST_PP_SEQ_SIZE_27
+# define BOOST_PP_SEQ_SIZE_27(_) BOOST_PP_SEQ_SIZE_28
+# define BOOST_PP_SEQ_SIZE_28(_) BOOST_PP_SEQ_SIZE_29
+# define BOOST_PP_SEQ_SIZE_29(_) BOOST_PP_SEQ_SIZE_30
+# define BOOST_PP_SEQ_SIZE_30(_) BOOST_PP_SEQ_SIZE_31
+# define BOOST_PP_SEQ_SIZE_31(_) BOOST_PP_SEQ_SIZE_32
+# define BOOST_PP_SEQ_SIZE_32(_) BOOST_PP_SEQ_SIZE_33
+# define BOOST_PP_SEQ_SIZE_33(_) BOOST_PP_SEQ_SIZE_34
+# define BOOST_PP_SEQ_SIZE_34(_) BOOST_PP_SEQ_SIZE_35
+# define BOOST_PP_SEQ_SIZE_35(_) BOOST_PP_SEQ_SIZE_36
+# define BOOST_PP_SEQ_SIZE_36(_) BOOST_PP_SEQ_SIZE_37
+# define BOOST_PP_SEQ_SIZE_37(_) BOOST_PP_SEQ_SIZE_38
+# define BOOST_PP_SEQ_SIZE_38(_) BOOST_PP_SEQ_SIZE_39
+# define BOOST_PP_SEQ_SIZE_39(_) BOOST_PP_SEQ_SIZE_40
+# define BOOST_PP_SEQ_SIZE_40(_) BOOST_PP_SEQ_SIZE_41
+# define BOOST_PP_SEQ_SIZE_41(_) BOOST_PP_SEQ_SIZE_42
+# define BOOST_PP_SEQ_SIZE_42(_) BOOST_PP_SEQ_SIZE_43
+# define BOOST_PP_SEQ_SIZE_43(_) BOOST_PP_SEQ_SIZE_44
+# define BOOST_PP_SEQ_SIZE_44(_) BOOST_PP_SEQ_SIZE_45
+# define BOOST_PP_SEQ_SIZE_45(_) BOOST_PP_SEQ_SIZE_46
+# define BOOST_PP_SEQ_SIZE_46(_) BOOST_PP_SEQ_SIZE_47
+# define BOOST_PP_SEQ_SIZE_47(_) BOOST_PP_SEQ_SIZE_48
+# define BOOST_PP_SEQ_SIZE_48(_) BOOST_PP_SEQ_SIZE_49
+# define BOOST_PP_SEQ_SIZE_49(_) BOOST_PP_SEQ_SIZE_50
+# define BOOST_PP_SEQ_SIZE_50(_) BOOST_PP_SEQ_SIZE_51
+# define BOOST_PP_SEQ_SIZE_51(_) BOOST_PP_SEQ_SIZE_52
+# define BOOST_PP_SEQ_SIZE_52(_) BOOST_PP_SEQ_SIZE_53
+# define BOOST_PP_SEQ_SIZE_53(_) BOOST_PP_SEQ_SIZE_54
+# define BOOST_PP_SEQ_SIZE_54(_) BOOST_PP_SEQ_SIZE_55
+# define BOOST_PP_SEQ_SIZE_55(_) BOOST_PP_SEQ_SIZE_56
+# define BOOST_PP_SEQ_SIZE_56(_) BOOST_PP_SEQ_SIZE_57
+# define BOOST_PP_SEQ_SIZE_57(_) BOOST_PP_SEQ_SIZE_58
+# define BOOST_PP_SEQ_SIZE_58(_) BOOST_PP_SEQ_SIZE_59
+# define BOOST_PP_SEQ_SIZE_59(_) BOOST_PP_SEQ_SIZE_60
+# define BOOST_PP_SEQ_SIZE_60(_) BOOST_PP_SEQ_SIZE_61
+# define BOOST_PP_SEQ_SIZE_61(_) BOOST_PP_SEQ_SIZE_62
+# define BOOST_PP_SEQ_SIZE_62(_) BOOST_PP_SEQ_SIZE_63
+# define BOOST_PP_SEQ_SIZE_63(_) BOOST_PP_SEQ_SIZE_64
+# define BOOST_PP_SEQ_SIZE_64(_) BOOST_PP_SEQ_SIZE_65
+# define BOOST_PP_SEQ_SIZE_65(_) BOOST_PP_SEQ_SIZE_66
+# define BOOST_PP_SEQ_SIZE_66(_) BOOST_PP_SEQ_SIZE_67
+# define BOOST_PP_SEQ_SIZE_67(_) BOOST_PP_SEQ_SIZE_68
+# define BOOST_PP_SEQ_SIZE_68(_) BOOST_PP_SEQ_SIZE_69
+# define BOOST_PP_SEQ_SIZE_69(_) BOOST_PP_SEQ_SIZE_70
+# define BOOST_PP_SEQ_SIZE_70(_) BOOST_PP_SEQ_SIZE_71
+# define BOOST_PP_SEQ_SIZE_71(_) BOOST_PP_SEQ_SIZE_72
+# define BOOST_PP_SEQ_SIZE_72(_) BOOST_PP_SEQ_SIZE_73
+# define BOOST_PP_SEQ_SIZE_73(_) BOOST_PP_SEQ_SIZE_74
+# define BOOST_PP_SEQ_SIZE_74(_) BOOST_PP_SEQ_SIZE_75
+# define BOOST_PP_SEQ_SIZE_75(_) BOOST_PP_SEQ_SIZE_76
+# define BOOST_PP_SEQ_SIZE_76(_) BOOST_PP_SEQ_SIZE_77
+# define BOOST_PP_SEQ_SIZE_77(_) BOOST_PP_SEQ_SIZE_78
+# define BOOST_PP_SEQ_SIZE_78(_) BOOST_PP_SEQ_SIZE_79
+# define BOOST_PP_SEQ_SIZE_79(_) BOOST_PP_SEQ_SIZE_80
+# define BOOST_PP_SEQ_SIZE_80(_) BOOST_PP_SEQ_SIZE_81
+# define BOOST_PP_SEQ_SIZE_81(_) BOOST_PP_SEQ_SIZE_82
+# define BOOST_PP_SEQ_SIZE_82(_) BOOST_PP_SEQ_SIZE_83
+# define BOOST_PP_SEQ_SIZE_83(_) BOOST_PP_SEQ_SIZE_84
+# define BOOST_PP_SEQ_SIZE_84(_) BOOST_PP_SEQ_SIZE_85
+# define BOOST_PP_SEQ_SIZE_85(_) BOOST_PP_SEQ_SIZE_86
+# define BOOST_PP_SEQ_SIZE_86(_) BOOST_PP_SEQ_SIZE_87
+# define BOOST_PP_SEQ_SIZE_87(_) BOOST_PP_SEQ_SIZE_88
+# define BOOST_PP_SEQ_SIZE_88(_) BOOST_PP_SEQ_SIZE_89
+# define BOOST_PP_SEQ_SIZE_89(_) BOOST_PP_SEQ_SIZE_90
+# define BOOST_PP_SEQ_SIZE_90(_) BOOST_PP_SEQ_SIZE_91
+# define BOOST_PP_SEQ_SIZE_91(_) BOOST_PP_SEQ_SIZE_92
+# define BOOST_PP_SEQ_SIZE_92(_) BOOST_PP_SEQ_SIZE_93
+# define BOOST_PP_SEQ_SIZE_93(_) BOOST_PP_SEQ_SIZE_94
+# define BOOST_PP_SEQ_SIZE_94(_) BOOST_PP_SEQ_SIZE_95
+# define BOOST_PP_SEQ_SIZE_95(_) BOOST_PP_SEQ_SIZE_96
+# define BOOST_PP_SEQ_SIZE_96(_) BOOST_PP_SEQ_SIZE_97
+# define BOOST_PP_SEQ_SIZE_97(_) BOOST_PP_SEQ_SIZE_98
+# define BOOST_PP_SEQ_SIZE_98(_) BOOST_PP_SEQ_SIZE_99
+# define BOOST_PP_SEQ_SIZE_99(_) BOOST_PP_SEQ_SIZE_100
+# define BOOST_PP_SEQ_SIZE_100(_) BOOST_PP_SEQ_SIZE_101
+# define BOOST_PP_SEQ_SIZE_101(_) BOOST_PP_SEQ_SIZE_102
+# define BOOST_PP_SEQ_SIZE_102(_) BOOST_PP_SEQ_SIZE_103
+# define BOOST_PP_SEQ_SIZE_103(_) BOOST_PP_SEQ_SIZE_104
+# define BOOST_PP_SEQ_SIZE_104(_) BOOST_PP_SEQ_SIZE_105
+# define BOOST_PP_SEQ_SIZE_105(_) BOOST_PP_SEQ_SIZE_106
+# define BOOST_PP_SEQ_SIZE_106(_) BOOST_PP_SEQ_SIZE_107
+# define BOOST_PP_SEQ_SIZE_107(_) BOOST_PP_SEQ_SIZE_108
+# define BOOST_PP_SEQ_SIZE_108(_) BOOST_PP_SEQ_SIZE_109
+# define BOOST_PP_SEQ_SIZE_109(_) BOOST_PP_SEQ_SIZE_110
+# define BOOST_PP_SEQ_SIZE_110(_) BOOST_PP_SEQ_SIZE_111
+# define BOOST_PP_SEQ_SIZE_111(_) BOOST_PP_SEQ_SIZE_112
+# define BOOST_PP_SEQ_SIZE_112(_) BOOST_PP_SEQ_SIZE_113
+# define BOOST_PP_SEQ_SIZE_113(_) BOOST_PP_SEQ_SIZE_114
+# define BOOST_PP_SEQ_SIZE_114(_) BOOST_PP_SEQ_SIZE_115
+# define BOOST_PP_SEQ_SIZE_115(_) BOOST_PP_SEQ_SIZE_116
+# define BOOST_PP_SEQ_SIZE_116(_) BOOST_PP_SEQ_SIZE_117
+# define BOOST_PP_SEQ_SIZE_117(_) BOOST_PP_SEQ_SIZE_118
+# define BOOST_PP_SEQ_SIZE_118(_) BOOST_PP_SEQ_SIZE_119
+# define BOOST_PP_SEQ_SIZE_119(_) BOOST_PP_SEQ_SIZE_120
+# define BOOST_PP_SEQ_SIZE_120(_) BOOST_PP_SEQ_SIZE_121
+# define BOOST_PP_SEQ_SIZE_121(_) BOOST_PP_SEQ_SIZE_122
+# define BOOST_PP_SEQ_SIZE_122(_) BOOST_PP_SEQ_SIZE_123
+# define BOOST_PP_SEQ_SIZE_123(_) BOOST_PP_SEQ_SIZE_124
+# define BOOST_PP_SEQ_SIZE_124(_) BOOST_PP_SEQ_SIZE_125
+# define BOOST_PP_SEQ_SIZE_125(_) BOOST_PP_SEQ_SIZE_126
+# define BOOST_PP_SEQ_SIZE_126(_) BOOST_PP_SEQ_SIZE_127
+# define BOOST_PP_SEQ_SIZE_127(_) BOOST_PP_SEQ_SIZE_128
+# define BOOST_PP_SEQ_SIZE_128(_) BOOST_PP_SEQ_SIZE_129
+# define BOOST_PP_SEQ_SIZE_129(_) BOOST_PP_SEQ_SIZE_130
+# define BOOST_PP_SEQ_SIZE_130(_) BOOST_PP_SEQ_SIZE_131
+# define BOOST_PP_SEQ_SIZE_131(_) BOOST_PP_SEQ_SIZE_132
+# define BOOST_PP_SEQ_SIZE_132(_) BOOST_PP_SEQ_SIZE_133
+# define BOOST_PP_SEQ_SIZE_133(_) BOOST_PP_SEQ_SIZE_134
+# define BOOST_PP_SEQ_SIZE_134(_) BOOST_PP_SEQ_SIZE_135
+# define BOOST_PP_SEQ_SIZE_135(_) BOOST_PP_SEQ_SIZE_136
+# define BOOST_PP_SEQ_SIZE_136(_) BOOST_PP_SEQ_SIZE_137
+# define BOOST_PP_SEQ_SIZE_137(_) BOOST_PP_SEQ_SIZE_138
+# define BOOST_PP_SEQ_SIZE_138(_) BOOST_PP_SEQ_SIZE_139
+# define BOOST_PP_SEQ_SIZE_139(_) BOOST_PP_SEQ_SIZE_140
+# define BOOST_PP_SEQ_SIZE_140(_) BOOST_PP_SEQ_SIZE_141
+# define BOOST_PP_SEQ_SIZE_141(_) BOOST_PP_SEQ_SIZE_142
+# define BOOST_PP_SEQ_SIZE_142(_) BOOST_PP_SEQ_SIZE_143
+# define BOOST_PP_SEQ_SIZE_143(_) BOOST_PP_SEQ_SIZE_144
+# define BOOST_PP_SEQ_SIZE_144(_) BOOST_PP_SEQ_SIZE_145
+# define BOOST_PP_SEQ_SIZE_145(_) BOOST_PP_SEQ_SIZE_146
+# define BOOST_PP_SEQ_SIZE_146(_) BOOST_PP_SEQ_SIZE_147
+# define BOOST_PP_SEQ_SIZE_147(_) BOOST_PP_SEQ_SIZE_148
+# define BOOST_PP_SEQ_SIZE_148(_) BOOST_PP_SEQ_SIZE_149
+# define BOOST_PP_SEQ_SIZE_149(_) BOOST_PP_SEQ_SIZE_150
+# define BOOST_PP_SEQ_SIZE_150(_) BOOST_PP_SEQ_SIZE_151
+# define BOOST_PP_SEQ_SIZE_151(_) BOOST_PP_SEQ_SIZE_152
+# define BOOST_PP_SEQ_SIZE_152(_) BOOST_PP_SEQ_SIZE_153
+# define BOOST_PP_SEQ_SIZE_153(_) BOOST_PP_SEQ_SIZE_154
+# define BOOST_PP_SEQ_SIZE_154(_) BOOST_PP_SEQ_SIZE_155
+# define BOOST_PP_SEQ_SIZE_155(_) BOOST_PP_SEQ_SIZE_156
+# define BOOST_PP_SEQ_SIZE_156(_) BOOST_PP_SEQ_SIZE_157
+# define BOOST_PP_SEQ_SIZE_157(_) BOOST_PP_SEQ_SIZE_158
+# define BOOST_PP_SEQ_SIZE_158(_) BOOST_PP_SEQ_SIZE_159
+# define BOOST_PP_SEQ_SIZE_159(_) BOOST_PP_SEQ_SIZE_160
+# define BOOST_PP_SEQ_SIZE_160(_) BOOST_PP_SEQ_SIZE_161
+# define BOOST_PP_SEQ_SIZE_161(_) BOOST_PP_SEQ_SIZE_162
+# define BOOST_PP_SEQ_SIZE_162(_) BOOST_PP_SEQ_SIZE_163
+# define BOOST_PP_SEQ_SIZE_163(_) BOOST_PP_SEQ_SIZE_164
+# define BOOST_PP_SEQ_SIZE_164(_) BOOST_PP_SEQ_SIZE_165
+# define BOOST_PP_SEQ_SIZE_165(_) BOOST_PP_SEQ_SIZE_166
+# define BOOST_PP_SEQ_SIZE_166(_) BOOST_PP_SEQ_SIZE_167
+# define BOOST_PP_SEQ_SIZE_167(_) BOOST_PP_SEQ_SIZE_168
+# define BOOST_PP_SEQ_SIZE_168(_) BOOST_PP_SEQ_SIZE_169
+# define BOOST_PP_SEQ_SIZE_169(_) BOOST_PP_SEQ_SIZE_170
+# define BOOST_PP_SEQ_SIZE_170(_) BOOST_PP_SEQ_SIZE_171
+# define BOOST_PP_SEQ_SIZE_171(_) BOOST_PP_SEQ_SIZE_172
+# define BOOST_PP_SEQ_SIZE_172(_) BOOST_PP_SEQ_SIZE_173
+# define BOOST_PP_SEQ_SIZE_173(_) BOOST_PP_SEQ_SIZE_174
+# define BOOST_PP_SEQ_SIZE_174(_) BOOST_PP_SEQ_SIZE_175
+# define BOOST_PP_SEQ_SIZE_175(_) BOOST_PP_SEQ_SIZE_176
+# define BOOST_PP_SEQ_SIZE_176(_) BOOST_PP_SEQ_SIZE_177
+# define BOOST_PP_SEQ_SIZE_177(_) BOOST_PP_SEQ_SIZE_178
+# define BOOST_PP_SEQ_SIZE_178(_) BOOST_PP_SEQ_SIZE_179
+# define BOOST_PP_SEQ_SIZE_179(_) BOOST_PP_SEQ_SIZE_180
+# define BOOST_PP_SEQ_SIZE_180(_) BOOST_PP_SEQ_SIZE_181
+# define BOOST_PP_SEQ_SIZE_181(_) BOOST_PP_SEQ_SIZE_182
+# define BOOST_PP_SEQ_SIZE_182(_) BOOST_PP_SEQ_SIZE_183
+# define BOOST_PP_SEQ_SIZE_183(_) BOOST_PP_SEQ_SIZE_184
+# define BOOST_PP_SEQ_SIZE_184(_) BOOST_PP_SEQ_SIZE_185
+# define BOOST_PP_SEQ_SIZE_185(_) BOOST_PP_SEQ_SIZE_186
+# define BOOST_PP_SEQ_SIZE_186(_) BOOST_PP_SEQ_SIZE_187
+# define BOOST_PP_SEQ_SIZE_187(_) BOOST_PP_SEQ_SIZE_188
+# define BOOST_PP_SEQ_SIZE_188(_) BOOST_PP_SEQ_SIZE_189
+# define BOOST_PP_SEQ_SIZE_189(_) BOOST_PP_SEQ_SIZE_190
+# define BOOST_PP_SEQ_SIZE_190(_) BOOST_PP_SEQ_SIZE_191
+# define BOOST_PP_SEQ_SIZE_191(_) BOOST_PP_SEQ_SIZE_192
+# define BOOST_PP_SEQ_SIZE_192(_) BOOST_PP_SEQ_SIZE_193
+# define BOOST_PP_SEQ_SIZE_193(_) BOOST_PP_SEQ_SIZE_194
+# define BOOST_PP_SEQ_SIZE_194(_) BOOST_PP_SEQ_SIZE_195
+# define BOOST_PP_SEQ_SIZE_195(_) BOOST_PP_SEQ_SIZE_196
+# define BOOST_PP_SEQ_SIZE_196(_) BOOST_PP_SEQ_SIZE_197
+# define BOOST_PP_SEQ_SIZE_197(_) BOOST_PP_SEQ_SIZE_198
+# define BOOST_PP_SEQ_SIZE_198(_) BOOST_PP_SEQ_SIZE_199
+# define BOOST_PP_SEQ_SIZE_199(_) BOOST_PP_SEQ_SIZE_200
+# define BOOST_PP_SEQ_SIZE_200(_) BOOST_PP_SEQ_SIZE_201
+# define BOOST_PP_SEQ_SIZE_201(_) BOOST_PP_SEQ_SIZE_202
+# define BOOST_PP_SEQ_SIZE_202(_) BOOST_PP_SEQ_SIZE_203
+# define BOOST_PP_SEQ_SIZE_203(_) BOOST_PP_SEQ_SIZE_204
+# define BOOST_PP_SEQ_SIZE_204(_) BOOST_PP_SEQ_SIZE_205
+# define BOOST_PP_SEQ_SIZE_205(_) BOOST_PP_SEQ_SIZE_206
+# define BOOST_PP_SEQ_SIZE_206(_) BOOST_PP_SEQ_SIZE_207
+# define BOOST_PP_SEQ_SIZE_207(_) BOOST_PP_SEQ_SIZE_208
+# define BOOST_PP_SEQ_SIZE_208(_) BOOST_PP_SEQ_SIZE_209
+# define BOOST_PP_SEQ_SIZE_209(_) BOOST_PP_SEQ_SIZE_210
+# define BOOST_PP_SEQ_SIZE_210(_) BOOST_PP_SEQ_SIZE_211
+# define BOOST_PP_SEQ_SIZE_211(_) BOOST_PP_SEQ_SIZE_212
+# define BOOST_PP_SEQ_SIZE_212(_) BOOST_PP_SEQ_SIZE_213
+# define BOOST_PP_SEQ_SIZE_213(_) BOOST_PP_SEQ_SIZE_214
+# define BOOST_PP_SEQ_SIZE_214(_) BOOST_PP_SEQ_SIZE_215
+# define BOOST_PP_SEQ_SIZE_215(_) BOOST_PP_SEQ_SIZE_216
+# define BOOST_PP_SEQ_SIZE_216(_) BOOST_PP_SEQ_SIZE_217
+# define BOOST_PP_SEQ_SIZE_217(_) BOOST_PP_SEQ_SIZE_218
+# define BOOST_PP_SEQ_SIZE_218(_) BOOST_PP_SEQ_SIZE_219
+# define BOOST_PP_SEQ_SIZE_219(_) BOOST_PP_SEQ_SIZE_220
+# define BOOST_PP_SEQ_SIZE_220(_) BOOST_PP_SEQ_SIZE_221
+# define BOOST_PP_SEQ_SIZE_221(_) BOOST_PP_SEQ_SIZE_222
+# define BOOST_PP_SEQ_SIZE_222(_) BOOST_PP_SEQ_SIZE_223
+# define BOOST_PP_SEQ_SIZE_223(_) BOOST_PP_SEQ_SIZE_224
+# define BOOST_PP_SEQ_SIZE_224(_) BOOST_PP_SEQ_SIZE_225
+# define BOOST_PP_SEQ_SIZE_225(_) BOOST_PP_SEQ_SIZE_226
+# define BOOST_PP_SEQ_SIZE_226(_) BOOST_PP_SEQ_SIZE_227
+# define BOOST_PP_SEQ_SIZE_227(_) BOOST_PP_SEQ_SIZE_228
+# define BOOST_PP_SEQ_SIZE_228(_) BOOST_PP_SEQ_SIZE_229
+# define BOOST_PP_SEQ_SIZE_229(_) BOOST_PP_SEQ_SIZE_230
+# define BOOST_PP_SEQ_SIZE_230(_) BOOST_PP_SEQ_SIZE_231
+# define BOOST_PP_SEQ_SIZE_231(_) BOOST_PP_SEQ_SIZE_232
+# define BOOST_PP_SEQ_SIZE_232(_) BOOST_PP_SEQ_SIZE_233
+# define BOOST_PP_SEQ_SIZE_233(_) BOOST_PP_SEQ_SIZE_234
+# define BOOST_PP_SEQ_SIZE_234(_) BOOST_PP_SEQ_SIZE_235
+# define BOOST_PP_SEQ_SIZE_235(_) BOOST_PP_SEQ_SIZE_236
+# define BOOST_PP_SEQ_SIZE_236(_) BOOST_PP_SEQ_SIZE_237
+# define BOOST_PP_SEQ_SIZE_237(_) BOOST_PP_SEQ_SIZE_238
+# define BOOST_PP_SEQ_SIZE_238(_) BOOST_PP_SEQ_SIZE_239
+# define BOOST_PP_SEQ_SIZE_239(_) BOOST_PP_SEQ_SIZE_240
+# define BOOST_PP_SEQ_SIZE_240(_) BOOST_PP_SEQ_SIZE_241
+# define BOOST_PP_SEQ_SIZE_241(_) BOOST_PP_SEQ_SIZE_242
+# define BOOST_PP_SEQ_SIZE_242(_) BOOST_PP_SEQ_SIZE_243
+# define BOOST_PP_SEQ_SIZE_243(_) BOOST_PP_SEQ_SIZE_244
+# define BOOST_PP_SEQ_SIZE_244(_) BOOST_PP_SEQ_SIZE_245
+# define BOOST_PP_SEQ_SIZE_245(_) BOOST_PP_SEQ_SIZE_246
+# define BOOST_PP_SEQ_SIZE_246(_) BOOST_PP_SEQ_SIZE_247
+# define BOOST_PP_SEQ_SIZE_247(_) BOOST_PP_SEQ_SIZE_248
+# define BOOST_PP_SEQ_SIZE_248(_) BOOST_PP_SEQ_SIZE_249
+# define BOOST_PP_SEQ_SIZE_249(_) BOOST_PP_SEQ_SIZE_250
+# define BOOST_PP_SEQ_SIZE_250(_) BOOST_PP_SEQ_SIZE_251
+# define BOOST_PP_SEQ_SIZE_251(_) BOOST_PP_SEQ_SIZE_252
+# define BOOST_PP_SEQ_SIZE_252(_) BOOST_PP_SEQ_SIZE_253
+# define BOOST_PP_SEQ_SIZE_253(_) BOOST_PP_SEQ_SIZE_254
+# define BOOST_PP_SEQ_SIZE_254(_) BOOST_PP_SEQ_SIZE_255
+# define BOOST_PP_SEQ_SIZE_255(_) BOOST_PP_SEQ_SIZE_256
+# define BOOST_PP_SEQ_SIZE_256(_) BOOST_PP_SEQ_SIZE_257
+#
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_0 0
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_1 1
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_2 2
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_3 3
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_4 4
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_5 5
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_6 6
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_7 7
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_8 8
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_9 9
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_10 10
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_11 11
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_12 12
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_13 13
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_14 14
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_15 15
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_16 16
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_17 17
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_18 18
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_19 19
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_20 20
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_21 21
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_22 22
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_23 23
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_24 24
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_25 25
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_26 26
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_27 27
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_28 28
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_29 29
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_30 30
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_31 31
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_32 32
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_33 33
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_34 34
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_35 35
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_36 36
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_37 37
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_38 38
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_39 39
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_40 40
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_41 41
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_42 42
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_43 43
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_44 44
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_45 45
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_46 46
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_47 47
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_48 48
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_49 49
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_50 50
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_51 51
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_52 52
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_53 53
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_54 54
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_55 55
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_56 56
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_57 57
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_58 58
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_59 59
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_60 60
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_61 61
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_62 62
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_63 63
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_64 64
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_65 65
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_66 66
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_67 67
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_68 68
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_69 69
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_70 70
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_71 71
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_72 72
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_73 73
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_74 74
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_75 75
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_76 76
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_77 77
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_78 78
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_79 79
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_80 80
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_81 81
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_82 82
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_83 83
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_84 84
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_85 85
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_86 86
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_87 87
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_88 88
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_89 89
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_90 90
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_91 91
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_92 92
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_93 93
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_94 94
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_95 95
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_96 96
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_97 97
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_98 98
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_99 99
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_100 100
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_101 101
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_102 102
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_103 103
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_104 104
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_105 105
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_106 106
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_107 107
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_108 108
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_109 109
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_110 110
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_111 111
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_112 112
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_113 113
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_114 114
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_115 115
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_116 116
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_117 117
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_118 118
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_119 119
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_120 120
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_121 121
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_122 122
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_123 123
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_124 124
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_125 125
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_126 126
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_127 127
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_128 128
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_129 129
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_130 130
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_131 131
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_132 132
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_133 133
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_134 134
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_135 135
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_136 136
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_137 137
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_138 138
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_139 139
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_140 140
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_141 141
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_142 142
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_143 143
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_144 144
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_145 145
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_146 146
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_147 147
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_148 148
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_149 149
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_150 150
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_151 151
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_152 152
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_153 153
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_154 154
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_155 155
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_156 156
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_157 157
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_158 158
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_159 159
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_160 160
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_161 161
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_162 162
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_163 163
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_164 164
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_165 165
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_166 166
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_167 167
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_168 168
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_169 169
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_170 170
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_171 171
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_172 172
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_173 173
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_174 174
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_175 175
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_176 176
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_177 177
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_178 178
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_179 179
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_180 180
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_181 181
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_182 182
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_183 183
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_184 184
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_185 185
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_186 186
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_187 187
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_188 188
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_189 189
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_190 190
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_191 191
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_192 192
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_193 193
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_194 194
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_195 195
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_196 196
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_197 197
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_198 198
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_199 199
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_200 200
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_201 201
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_202 202
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_203 203
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_204 204
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_205 205
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_206 206
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_207 207
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_208 208
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_209 209
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_210 210
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_211 211
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_212 212
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_213 213
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_214 214
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_215 215
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_216 216
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_217 217
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_218 218
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_219 219
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_220 220
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_221 221
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_222 222
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_223 223
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_224 224
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_225 225
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_226 226
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_227 227
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_228 228
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_229 229
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_230 230
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_231 231
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_232 232
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_233 233
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_234 234
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_235 235
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_236 236
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_237 237
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_238 238
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_239 239
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_240 240
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_241 241
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_242 242
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_243 243
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_244 244
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_245 245
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_246 246
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_247 247
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_248 248
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_249 249
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_250 250
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_251 251
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_252 252
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_253 253
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_254 254
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_255 255
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_256 256
+#
+# endif
diff --git a/boost/boost/preprocessor/seq/subseq.hpp b/boost/boost/preprocessor/seq/subseq.hpp
new file mode 100644
index 00000000000..fb242f1e69c
--- /dev/null
+++ b/boost/boost/preprocessor/seq/subseq.hpp
@@ -0,0 +1,28 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SEQ_SUBSEQ_HPP
+# define BOOST_PREPROCESSOR_SEQ_SUBSEQ_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/seq/first_n.hpp>
+# include <boost/preprocessor/seq/rest_n.hpp>
+#
+# /* BOOST_PP_SEQ_SUBSEQ */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_SEQ_SUBSEQ(seq, i, len) BOOST_PP_SEQ_FIRST_N(len, BOOST_PP_SEQ_REST_N(i, seq))
+# else
+# define BOOST_PP_SEQ_SUBSEQ(seq, i, len) BOOST_PP_SEQ_SUBSEQ_I(seq, i, len)
+# define BOOST_PP_SEQ_SUBSEQ_I(seq, i, len) BOOST_PP_SEQ_FIRST_N(len, BOOST_PP_SEQ_REST_N(i, seq))
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/seq/to_array.hpp b/boost/boost/preprocessor/seq/to_array.hpp
new file mode 100644
index 00000000000..d8a8040f8d8
--- /dev/null
+++ b/boost/boost/preprocessor/seq/to_array.hpp
@@ -0,0 +1,28 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SEQ_TO_ARRAY_HPP
+# define BOOST_PREPROCESSOR_SEQ_TO_ARRAY_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/seq/enum.hpp>
+# include <boost/preprocessor/seq/size.hpp>
+#
+# /* BOOST_PP_SEQ_TO_ARRAY */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_SEQ_TO_ARRAY(seq) (BOOST_PP_SEQ_SIZE(seq), (BOOST_PP_SEQ_ENUM(seq)))
+# else
+# define BOOST_PP_SEQ_TO_ARRAY(seq) BOOST_PP_SEQ_TO_ARRAY_I(seq)
+# define BOOST_PP_SEQ_TO_ARRAY_I(seq) (BOOST_PP_SEQ_SIZE(seq), (BOOST_PP_SEQ_ENUM(seq)))
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/seq/to_tuple.hpp b/boost/boost/preprocessor/seq/to_tuple.hpp
new file mode 100644
index 00000000000..ab38eb97fae
--- /dev/null
+++ b/boost/boost/preprocessor/seq/to_tuple.hpp
@@ -0,0 +1,27 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SEQ_TO_TUPLE_HPP
+# define BOOST_PREPROCESSOR_SEQ_TO_TUPLE_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/seq/enum.hpp>
+#
+# /* BOOST_PP_SEQ_TO_TUPLE */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_SEQ_TO_TUPLE(seq) (BOOST_PP_SEQ_ENUM(seq))
+# else
+# define BOOST_PP_SEQ_TO_TUPLE(seq) BOOST_PP_SEQ_TO_TUPLE_I(seq)
+# define BOOST_PP_SEQ_TO_TUPLE_I(seq) (BOOST_PP_SEQ_ENUM(seq))
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/seq/transform.hpp b/boost/boost/preprocessor/seq/transform.hpp
new file mode 100644
index 00000000000..79d8108d362
--- /dev/null
+++ b/boost/boost/preprocessor/seq/transform.hpp
@@ -0,0 +1,48 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SEQ_TRANSFORM_HPP
+# define BOOST_PREPROCESSOR_SEQ_TRANSFORM_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/seq/fold_left.hpp>
+# include <boost/preprocessor/seq/seq.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+# include <boost/preprocessor/tuple/rem.hpp>
+#
+# /* BOOST_PP_SEQ_TRANSFORM */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_SEQ_TRANSFORM(op, data, seq) BOOST_PP_SEQ_TAIL(BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_SEQ_FOLD_LEFT(BOOST_PP_SEQ_TRANSFORM_O, (op, data, (nil)), seq)))
+# else
+# define BOOST_PP_SEQ_TRANSFORM(op, data, seq) BOOST_PP_SEQ_TRANSFORM_I(op, data, seq)
+# define BOOST_PP_SEQ_TRANSFORM_I(op, data, seq) BOOST_PP_SEQ_TAIL(BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_SEQ_FOLD_LEFT(BOOST_PP_SEQ_TRANSFORM_O, (op, data, (nil)), seq)))
+# endif
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()
+# define BOOST_PP_SEQ_TRANSFORM_O(s, state, elem) BOOST_PP_SEQ_TRANSFORM_O_IM(s, BOOST_PP_TUPLE_REM_3 state, elem)
+# define BOOST_PP_SEQ_TRANSFORM_O_IM(s, im, elem) BOOST_PP_SEQ_TRANSFORM_O_I(s, im, elem)
+# else
+# define BOOST_PP_SEQ_TRANSFORM_O(s, state, elem) BOOST_PP_SEQ_TRANSFORM_O_I(s, BOOST_PP_TUPLE_ELEM(3, 0, state), BOOST_PP_TUPLE_ELEM(3, 1, state), BOOST_PP_TUPLE_ELEM(3, 2, state), elem)
+# endif
+#
+# define BOOST_PP_SEQ_TRANSFORM_O_I(s, op, data, res, elem) (op, data, res (op(s, data, elem)))
+#
+# /* BOOST_PP_SEQ_TRANSFORM_S */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_SEQ_TRANSFORM_S(s, op, data, seq) BOOST_PP_SEQ_TAIL(BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_SEQ_FOLD_LEFT_ ## s(BOOST_PP_SEQ_TRANSFORM_O, (op, data, (nil)), seq)))
+# else
+# define BOOST_PP_SEQ_TRANSFORM_S(s, op, data, seq) BOOST_PP_SEQ_TRANSFORM_S_I(s, op, data, seq)
+# define BOOST_PP_SEQ_TRANSFORM_S_I(s, op, data, seq) BOOST_PP_SEQ_TAIL(BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_SEQ_FOLD_LEFT_ ## s(BOOST_PP_SEQ_TRANSFORM_O, (op, data, (nil)), seq)))
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/slot.hpp b/boost/boost/preprocessor/slot.hpp
new file mode 100644
index 00000000000..fb3c9b01dfc
--- /dev/null
+++ b/boost/boost/preprocessor/slot.hpp
@@ -0,0 +1,17 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SLOT_HPP
+# define BOOST_PREPROCESSOR_SLOT_HPP
+#
+# include <boost/preprocessor/slot/slot.hpp>
+#
+# endif
diff --git a/boost/boost/preprocessor/slot/counter.hpp b/boost/boost/preprocessor/slot/counter.hpp
new file mode 100644
index 00000000000..d257a649a1b
--- /dev/null
+++ b/boost/boost/preprocessor/slot/counter.hpp
@@ -0,0 +1,25 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 2005. *
+# * 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. */
+#
+# ifndef BOOST_PREPROCESSOR_SLOT_COUNTER_HPP
+# define BOOST_PREPROCESSOR_SLOT_COUNTER_HPP
+#
+# include <boost/preprocessor/slot/detail/def.hpp>
+#
+# /* BOOST_PP_COUNTER */
+#
+# define BOOST_PP_COUNTER 0
+#
+# /* BOOST_PP_UPDATE_COUNTER */
+#
+# define BOOST_PP_UPDATE_COUNTER() <boost/preprocessor/slot/detail/counter.hpp>
+#
+# endif
diff --git a/boost/boost/preprocessor/slot/detail/counter.hpp b/boost/boost/preprocessor/slot/detail/counter.hpp
new file mode 100644
index 00000000000..a1c0df1759a
--- /dev/null
+++ b/boost/boost/preprocessor/slot/detail/counter.hpp
@@ -0,0 +1,269 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 2005. *
+# * 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. */
+#
+# define BOOST_PP_VALUE BOOST_PP_COUNTER + 1
+#
+# include <boost/preprocessor/slot/detail/shared.hpp>
+#
+# undef BOOST_PP_COUNTER
+#
+# undef BOOST_PP_COUNTER_DIGIT_1
+# undef BOOST_PP_COUNTER_DIGIT_2
+# undef BOOST_PP_COUNTER_DIGIT_3
+# undef BOOST_PP_COUNTER_DIGIT_4
+# undef BOOST_PP_COUNTER_DIGIT_5
+# undef BOOST_PP_COUNTER_DIGIT_6
+# undef BOOST_PP_COUNTER_DIGIT_7
+# undef BOOST_PP_COUNTER_DIGIT_8
+# undef BOOST_PP_COUNTER_DIGIT_9
+# undef BOOST_PP_COUNTER_DIGIT_10
+#
+# if BOOST_PP_SLOT_TEMP_10 == 0
+# define BOOST_PP_COUNTER_DIGIT_10 0
+# elif BOOST_PP_SLOT_TEMP_10 == 1
+# define BOOST_PP_COUNTER_DIGIT_10 1
+# elif BOOST_PP_SLOT_TEMP_10 == 2
+# define BOOST_PP_COUNTER_DIGIT_10 2
+# elif BOOST_PP_SLOT_TEMP_10 == 3
+# define BOOST_PP_COUNTER_DIGIT_10 3
+# elif BOOST_PP_SLOT_TEMP_10 == 4
+# define BOOST_PP_COUNTER_DIGIT_10 4
+# elif BOOST_PP_SLOT_TEMP_10 == 5
+# define BOOST_PP_COUNTER_DIGIT_10 5
+# elif BOOST_PP_SLOT_TEMP_10 == 6
+# define BOOST_PP_COUNTER_DIGIT_10 6
+# elif BOOST_PP_SLOT_TEMP_10 == 7
+# define BOOST_PP_COUNTER_DIGIT_10 7
+# elif BOOST_PP_SLOT_TEMP_10 == 8
+# define BOOST_PP_COUNTER_DIGIT_10 8
+# elif BOOST_PP_SLOT_TEMP_10 == 9
+# define BOOST_PP_COUNTER_DIGIT_10 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_9 == 0
+# define BOOST_PP_COUNTER_DIGIT_9 0
+# elif BOOST_PP_SLOT_TEMP_9 == 1
+# define BOOST_PP_COUNTER_DIGIT_9 1
+# elif BOOST_PP_SLOT_TEMP_9 == 2
+# define BOOST_PP_COUNTER_DIGIT_9 2
+# elif BOOST_PP_SLOT_TEMP_9 == 3
+# define BOOST_PP_COUNTER_DIGIT_9 3
+# elif BOOST_PP_SLOT_TEMP_9 == 4
+# define BOOST_PP_COUNTER_DIGIT_9 4
+# elif BOOST_PP_SLOT_TEMP_9 == 5
+# define BOOST_PP_COUNTER_DIGIT_9 5
+# elif BOOST_PP_SLOT_TEMP_9 == 6
+# define BOOST_PP_COUNTER_DIGIT_9 6
+# elif BOOST_PP_SLOT_TEMP_9 == 7
+# define BOOST_PP_COUNTER_DIGIT_9 7
+# elif BOOST_PP_SLOT_TEMP_9 == 8
+# define BOOST_PP_COUNTER_DIGIT_9 8
+# elif BOOST_PP_SLOT_TEMP_9 == 9
+# define BOOST_PP_COUNTER_DIGIT_9 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_8 == 0
+# define BOOST_PP_COUNTER_DIGIT_8 0
+# elif BOOST_PP_SLOT_TEMP_8 == 1
+# define BOOST_PP_COUNTER_DIGIT_8 1
+# elif BOOST_PP_SLOT_TEMP_8 == 2
+# define BOOST_PP_COUNTER_DIGIT_8 2
+# elif BOOST_PP_SLOT_TEMP_8 == 3
+# define BOOST_PP_COUNTER_DIGIT_8 3
+# elif BOOST_PP_SLOT_TEMP_8 == 4
+# define BOOST_PP_COUNTER_DIGIT_8 4
+# elif BOOST_PP_SLOT_TEMP_8 == 5
+# define BOOST_PP_COUNTER_DIGIT_8 5
+# elif BOOST_PP_SLOT_TEMP_8 == 6
+# define BOOST_PP_COUNTER_DIGIT_8 6
+# elif BOOST_PP_SLOT_TEMP_8 == 7
+# define BOOST_PP_COUNTER_DIGIT_8 7
+# elif BOOST_PP_SLOT_TEMP_8 == 8
+# define BOOST_PP_COUNTER_DIGIT_8 8
+# elif BOOST_PP_SLOT_TEMP_8 == 9
+# define BOOST_PP_COUNTER_DIGIT_8 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_7 == 0
+# define BOOST_PP_COUNTER_DIGIT_7 0
+# elif BOOST_PP_SLOT_TEMP_7 == 1
+# define BOOST_PP_COUNTER_DIGIT_7 1
+# elif BOOST_PP_SLOT_TEMP_7 == 2
+# define BOOST_PP_COUNTER_DIGIT_7 2
+# elif BOOST_PP_SLOT_TEMP_7 == 3
+# define BOOST_PP_COUNTER_DIGIT_7 3
+# elif BOOST_PP_SLOT_TEMP_7 == 4
+# define BOOST_PP_COUNTER_DIGIT_7 4
+# elif BOOST_PP_SLOT_TEMP_7 == 5
+# define BOOST_PP_COUNTER_DIGIT_7 5
+# elif BOOST_PP_SLOT_TEMP_7 == 6
+# define BOOST_PP_COUNTER_DIGIT_7 6
+# elif BOOST_PP_SLOT_TEMP_7 == 7
+# define BOOST_PP_COUNTER_DIGIT_7 7
+# elif BOOST_PP_SLOT_TEMP_7 == 8
+# define BOOST_PP_COUNTER_DIGIT_7 8
+# elif BOOST_PP_SLOT_TEMP_7 == 9
+# define BOOST_PP_COUNTER_DIGIT_7 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_6 == 0
+# define BOOST_PP_COUNTER_DIGIT_6 0
+# elif BOOST_PP_SLOT_TEMP_6 == 1
+# define BOOST_PP_COUNTER_DIGIT_6 1
+# elif BOOST_PP_SLOT_TEMP_6 == 2
+# define BOOST_PP_COUNTER_DIGIT_6 2
+# elif BOOST_PP_SLOT_TEMP_6 == 3
+# define BOOST_PP_COUNTER_DIGIT_6 3
+# elif BOOST_PP_SLOT_TEMP_6 == 4
+# define BOOST_PP_COUNTER_DIGIT_6 4
+# elif BOOST_PP_SLOT_TEMP_6 == 5
+# define BOOST_PP_COUNTER_DIGIT_6 5
+# elif BOOST_PP_SLOT_TEMP_6 == 6
+# define BOOST_PP_COUNTER_DIGIT_6 6
+# elif BOOST_PP_SLOT_TEMP_6 == 7
+# define BOOST_PP_COUNTER_DIGIT_6 7
+# elif BOOST_PP_SLOT_TEMP_6 == 8
+# define BOOST_PP_COUNTER_DIGIT_6 8
+# elif BOOST_PP_SLOT_TEMP_6 == 9
+# define BOOST_PP_COUNTER_DIGIT_6 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_5 == 0
+# define BOOST_PP_COUNTER_DIGIT_5 0
+# elif BOOST_PP_SLOT_TEMP_5 == 1
+# define BOOST_PP_COUNTER_DIGIT_5 1
+# elif BOOST_PP_SLOT_TEMP_5 == 2
+# define BOOST_PP_COUNTER_DIGIT_5 2
+# elif BOOST_PP_SLOT_TEMP_5 == 3
+# define BOOST_PP_COUNTER_DIGIT_5 3
+# elif BOOST_PP_SLOT_TEMP_5 == 4
+# define BOOST_PP_COUNTER_DIGIT_5 4
+# elif BOOST_PP_SLOT_TEMP_5 == 5
+# define BOOST_PP_COUNTER_DIGIT_5 5
+# elif BOOST_PP_SLOT_TEMP_5 == 6
+# define BOOST_PP_COUNTER_DIGIT_5 6
+# elif BOOST_PP_SLOT_TEMP_5 == 7
+# define BOOST_PP_COUNTER_DIGIT_5 7
+# elif BOOST_PP_SLOT_TEMP_5 == 8
+# define BOOST_PP_COUNTER_DIGIT_5 8
+# elif BOOST_PP_SLOT_TEMP_5 == 9
+# define BOOST_PP_COUNTER_DIGIT_5 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_4 == 0
+# define BOOST_PP_COUNTER_DIGIT_4 0
+# elif BOOST_PP_SLOT_TEMP_4 == 1
+# define BOOST_PP_COUNTER_DIGIT_4 1
+# elif BOOST_PP_SLOT_TEMP_4 == 2
+# define BOOST_PP_COUNTER_DIGIT_4 2
+# elif BOOST_PP_SLOT_TEMP_4 == 3
+# define BOOST_PP_COUNTER_DIGIT_4 3
+# elif BOOST_PP_SLOT_TEMP_4 == 4
+# define BOOST_PP_COUNTER_DIGIT_4 4
+# elif BOOST_PP_SLOT_TEMP_4 == 5
+# define BOOST_PP_COUNTER_DIGIT_4 5
+# elif BOOST_PP_SLOT_TEMP_4 == 6
+# define BOOST_PP_COUNTER_DIGIT_4 6
+# elif BOOST_PP_SLOT_TEMP_4 == 7
+# define BOOST_PP_COUNTER_DIGIT_4 7
+# elif BOOST_PP_SLOT_TEMP_4 == 8
+# define BOOST_PP_COUNTER_DIGIT_4 8
+# elif BOOST_PP_SLOT_TEMP_4 == 9
+# define BOOST_PP_COUNTER_DIGIT_4 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_3 == 0
+# define BOOST_PP_COUNTER_DIGIT_3 0
+# elif BOOST_PP_SLOT_TEMP_3 == 1
+# define BOOST_PP_COUNTER_DIGIT_3 1
+# elif BOOST_PP_SLOT_TEMP_3 == 2
+# define BOOST_PP_COUNTER_DIGIT_3 2
+# elif BOOST_PP_SLOT_TEMP_3 == 3
+# define BOOST_PP_COUNTER_DIGIT_3 3
+# elif BOOST_PP_SLOT_TEMP_3 == 4
+# define BOOST_PP_COUNTER_DIGIT_3 4
+# elif BOOST_PP_SLOT_TEMP_3 == 5
+# define BOOST_PP_COUNTER_DIGIT_3 5
+# elif BOOST_PP_SLOT_TEMP_3 == 6
+# define BOOST_PP_COUNTER_DIGIT_3 6
+# elif BOOST_PP_SLOT_TEMP_3 == 7
+# define BOOST_PP_COUNTER_DIGIT_3 7
+# elif BOOST_PP_SLOT_TEMP_3 == 8
+# define BOOST_PP_COUNTER_DIGIT_3 8
+# elif BOOST_PP_SLOT_TEMP_3 == 9
+# define BOOST_PP_COUNTER_DIGIT_3 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_2 == 0
+# define BOOST_PP_COUNTER_DIGIT_2 0
+# elif BOOST_PP_SLOT_TEMP_2 == 1
+# define BOOST_PP_COUNTER_DIGIT_2 1
+# elif BOOST_PP_SLOT_TEMP_2 == 2
+# define BOOST_PP_COUNTER_DIGIT_2 2
+# elif BOOST_PP_SLOT_TEMP_2 == 3
+# define BOOST_PP_COUNTER_DIGIT_2 3
+# elif BOOST_PP_SLOT_TEMP_2 == 4
+# define BOOST_PP_COUNTER_DIGIT_2 4
+# elif BOOST_PP_SLOT_TEMP_2 == 5
+# define BOOST_PP_COUNTER_DIGIT_2 5
+# elif BOOST_PP_SLOT_TEMP_2 == 6
+# define BOOST_PP_COUNTER_DIGIT_2 6
+# elif BOOST_PP_SLOT_TEMP_2 == 7
+# define BOOST_PP_COUNTER_DIGIT_2 7
+# elif BOOST_PP_SLOT_TEMP_2 == 8
+# define BOOST_PP_COUNTER_DIGIT_2 8
+# elif BOOST_PP_SLOT_TEMP_2 == 9
+# define BOOST_PP_COUNTER_DIGIT_2 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_1 == 0
+# define BOOST_PP_COUNTER_DIGIT_1 0
+# elif BOOST_PP_SLOT_TEMP_1 == 1
+# define BOOST_PP_COUNTER_DIGIT_1 1
+# elif BOOST_PP_SLOT_TEMP_1 == 2
+# define BOOST_PP_COUNTER_DIGIT_1 2
+# elif BOOST_PP_SLOT_TEMP_1 == 3
+# define BOOST_PP_COUNTER_DIGIT_1 3
+# elif BOOST_PP_SLOT_TEMP_1 == 4
+# define BOOST_PP_COUNTER_DIGIT_1 4
+# elif BOOST_PP_SLOT_TEMP_1 == 5
+# define BOOST_PP_COUNTER_DIGIT_1 5
+# elif BOOST_PP_SLOT_TEMP_1 == 6
+# define BOOST_PP_COUNTER_DIGIT_1 6
+# elif BOOST_PP_SLOT_TEMP_1 == 7
+# define BOOST_PP_COUNTER_DIGIT_1 7
+# elif BOOST_PP_SLOT_TEMP_1 == 8
+# define BOOST_PP_COUNTER_DIGIT_1 8
+# elif BOOST_PP_SLOT_TEMP_1 == 9
+# define BOOST_PP_COUNTER_DIGIT_1 9
+# endif
+#
+# if BOOST_PP_COUNTER_DIGIT_10
+# define BOOST_PP_COUNTER BOOST_PP_SLOT_CC_10(BOOST_PP_COUNTER_DIGIT_10, BOOST_PP_COUNTER_DIGIT_9, BOOST_PP_COUNTER_DIGIT_8, BOOST_PP_COUNTER_DIGIT_7, BOOST_PP_COUNTER_DIGIT_6, BOOST_PP_COUNTER_DIGIT_5, BOOST_PP_COUNTER_DIGIT_4, BOOST_PP_COUNTER_DIGIT_3, BOOST_PP_COUNTER_DIGIT_2, BOOST_PP_COUNTER_DIGIT_1)
+# elif BOOST_PP_COUNTER_DIGIT_9
+# define BOOST_PP_COUNTER BOOST_PP_SLOT_CC_9(BOOST_PP_COUNTER_DIGIT_9, BOOST_PP_COUNTER_DIGIT_8, BOOST_PP_COUNTER_DIGIT_7, BOOST_PP_COUNTER_DIGIT_6, BOOST_PP_COUNTER_DIGIT_5, BOOST_PP_COUNTER_DIGIT_4, BOOST_PP_COUNTER_DIGIT_3, BOOST_PP_COUNTER_DIGIT_2, BOOST_PP_COUNTER_DIGIT_1)
+# elif BOOST_PP_COUNTER_DIGIT_8
+# define BOOST_PP_COUNTER BOOST_PP_SLOT_CC_8(BOOST_PP_COUNTER_DIGIT_8, BOOST_PP_COUNTER_DIGIT_7, BOOST_PP_COUNTER_DIGIT_6, BOOST_PP_COUNTER_DIGIT_5, BOOST_PP_COUNTER_DIGIT_4, BOOST_PP_COUNTER_DIGIT_3, BOOST_PP_COUNTER_DIGIT_2, BOOST_PP_COUNTER_DIGIT_1)
+# elif BOOST_PP_COUNTER_DIGIT_7
+# define BOOST_PP_COUNTER BOOST_PP_SLOT_CC_7(BOOST_PP_COUNTER_DIGIT_7, BOOST_PP_COUNTER_DIGIT_6, BOOST_PP_COUNTER_DIGIT_5, BOOST_PP_COUNTER_DIGIT_4, BOOST_PP_COUNTER_DIGIT_3, BOOST_PP_COUNTER_DIGIT_2, BOOST_PP_COUNTER_DIGIT_1)
+# elif BOOST_PP_COUNTER_DIGIT_6
+# define BOOST_PP_COUNTER BOOST_PP_SLOT_CC_6(BOOST_PP_COUNTER_DIGIT_6, BOOST_PP_COUNTER_DIGIT_5, BOOST_PP_COUNTER_DIGIT_4, BOOST_PP_COUNTER_DIGIT_3, BOOST_PP_COUNTER_DIGIT_2, BOOST_PP_COUNTER_DIGIT_1)
+# elif BOOST_PP_COUNTER_DIGIT_5
+# define BOOST_PP_COUNTER BOOST_PP_SLOT_CC_5(BOOST_PP_COUNTER_DIGIT_5, BOOST_PP_COUNTER_DIGIT_4, BOOST_PP_COUNTER_DIGIT_3, BOOST_PP_COUNTER_DIGIT_2, BOOST_PP_COUNTER_DIGIT_1)
+# elif BOOST_PP_COUNTER_DIGIT_4
+# define BOOST_PP_COUNTER BOOST_PP_SLOT_CC_4(BOOST_PP_COUNTER_DIGIT_4, BOOST_PP_COUNTER_DIGIT_3, BOOST_PP_COUNTER_DIGIT_2, BOOST_PP_COUNTER_DIGIT_1)
+# elif BOOST_PP_COUNTER_DIGIT_3
+# define BOOST_PP_COUNTER BOOST_PP_SLOT_CC_3(BOOST_PP_COUNTER_DIGIT_3, BOOST_PP_COUNTER_DIGIT_2, BOOST_PP_COUNTER_DIGIT_1)
+# elif BOOST_PP_COUNTER_DIGIT_2
+# define BOOST_PP_COUNTER BOOST_PP_SLOT_CC_2(BOOST_PP_COUNTER_DIGIT_2, BOOST_PP_COUNTER_DIGIT_1)
+# else
+# define BOOST_PP_COUNTER BOOST_PP_COUNTER_DIGIT_1
+# endif
diff --git a/boost/boost/preprocessor/slot/detail/def.hpp b/boost/boost/preprocessor/slot/detail/def.hpp
new file mode 100644
index 00000000000..885099e5512
--- /dev/null
+++ b/boost/boost/preprocessor/slot/detail/def.hpp
@@ -0,0 +1,49 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SLOT_DETAIL_DEF_HPP
+# define BOOST_PREPROCESSOR_SLOT_DETAIL_DEF_HPP
+#
+# /* BOOST_PP_SLOT_OFFSET_x */
+#
+# define BOOST_PP_SLOT_OFFSET_10(x) (x) % 1000000000UL
+# define BOOST_PP_SLOT_OFFSET_9(x) BOOST_PP_SLOT_OFFSET_10(x) % 100000000UL
+# define BOOST_PP_SLOT_OFFSET_8(x) BOOST_PP_SLOT_OFFSET_9(x) % 10000000UL
+# define BOOST_PP_SLOT_OFFSET_7(x) BOOST_PP_SLOT_OFFSET_8(x) % 1000000UL
+# define BOOST_PP_SLOT_OFFSET_6(x) BOOST_PP_SLOT_OFFSET_7(x) % 100000UL
+# define BOOST_PP_SLOT_OFFSET_5(x) BOOST_PP_SLOT_OFFSET_6(x) % 10000UL
+# define BOOST_PP_SLOT_OFFSET_4(x) BOOST_PP_SLOT_OFFSET_5(x) % 1000UL
+# define BOOST_PP_SLOT_OFFSET_3(x) BOOST_PP_SLOT_OFFSET_4(x) % 100UL
+# define BOOST_PP_SLOT_OFFSET_2(x) BOOST_PP_SLOT_OFFSET_3(x) % 10UL
+#
+# /* BOOST_PP_SLOT_CC_x */
+#
+# define BOOST_PP_SLOT_CC_2(a, b) BOOST_PP_SLOT_CC_2_D(a, b)
+# define BOOST_PP_SLOT_CC_3(a, b, c) BOOST_PP_SLOT_CC_3_D(a, b, c)
+# define BOOST_PP_SLOT_CC_4(a, b, c, d) BOOST_PP_SLOT_CC_4_D(a, b, c, d)
+# define BOOST_PP_SLOT_CC_5(a, b, c, d, e) BOOST_PP_SLOT_CC_5_D(a, b, c, d, e)
+# define BOOST_PP_SLOT_CC_6(a, b, c, d, e, f) BOOST_PP_SLOT_CC_6_D(a, b, c, d, e, f)
+# define BOOST_PP_SLOT_CC_7(a, b, c, d, e, f, g) BOOST_PP_SLOT_CC_7_D(a, b, c, d, e, f, g)
+# define BOOST_PP_SLOT_CC_8(a, b, c, d, e, f, g, h) BOOST_PP_SLOT_CC_8_D(a, b, c, d, e, f, g, h)
+# define BOOST_PP_SLOT_CC_9(a, b, c, d, e, f, g, h, i) BOOST_PP_SLOT_CC_9_D(a, b, c, d, e, f, g, h, i)
+# define BOOST_PP_SLOT_CC_10(a, b, c, d, e, f, g, h, i, j) BOOST_PP_SLOT_CC_10_D(a, b, c, d, e, f, g, h, i, j)
+#
+# define BOOST_PP_SLOT_CC_2_D(a, b) a ## b
+# define BOOST_PP_SLOT_CC_3_D(a, b, c) a ## b ## c
+# define BOOST_PP_SLOT_CC_4_D(a, b, c, d) a ## b ## c ## d
+# define BOOST_PP_SLOT_CC_5_D(a, b, c, d, e) a ## b ## c ## d ## e
+# define BOOST_PP_SLOT_CC_6_D(a, b, c, d, e, f) a ## b ## c ## d ## e ## f
+# define BOOST_PP_SLOT_CC_7_D(a, b, c, d, e, f, g) a ## b ## c ## d ## e ## f ## g
+# define BOOST_PP_SLOT_CC_8_D(a, b, c, d, e, f, g, h) a ## b ## c ## d ## e ## f ## g ## h
+# define BOOST_PP_SLOT_CC_9_D(a, b, c, d, e, f, g, h, i) a ## b ## c ## d ## e ## f ## g ## h ## i
+# define BOOST_PP_SLOT_CC_10_D(a, b, c, d, e, f, g, h, i, j) a ## b ## c ## d ## e ## f ## g ## h ## i ## j
+#
+# endif
diff --git a/boost/boost/preprocessor/slot/detail/shared.hpp b/boost/boost/preprocessor/slot/detail/shared.hpp
new file mode 100644
index 00000000000..c97ac54cf91
--- /dev/null
+++ b/boost/boost/preprocessor/slot/detail/shared.hpp
@@ -0,0 +1,247 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PP_VALUE
+# error BOOST_PP_ERROR: BOOST_PP_VALUE is not defined
+# endif
+#
+# undef BOOST_PP_SLOT_TEMP_1
+# undef BOOST_PP_SLOT_TEMP_2
+# undef BOOST_PP_SLOT_TEMP_3
+# undef BOOST_PP_SLOT_TEMP_4
+# undef BOOST_PP_SLOT_TEMP_5
+# undef BOOST_PP_SLOT_TEMP_6
+# undef BOOST_PP_SLOT_TEMP_7
+# undef BOOST_PP_SLOT_TEMP_8
+# undef BOOST_PP_SLOT_TEMP_9
+# undef BOOST_PP_SLOT_TEMP_10
+#
+# if (BOOST_PP_VALUE) / 1000000000UL == 0
+# define BOOST_PP_SLOT_TEMP_10 0
+# elif (BOOST_PP_VALUE) / 1000000000UL == 1
+# define BOOST_PP_SLOT_TEMP_10 1
+# elif (BOOST_PP_VALUE) / 1000000000UL == 2
+# define BOOST_PP_SLOT_TEMP_10 2
+# elif (BOOST_PP_VALUE) / 1000000000UL == 3
+# define BOOST_PP_SLOT_TEMP_10 3
+# elif (BOOST_PP_VALUE) / 1000000000UL == 4
+# define BOOST_PP_SLOT_TEMP_10 4
+# elif (BOOST_PP_VALUE) / 1000000000UL == 5
+# define BOOST_PP_SLOT_TEMP_10 5
+# elif (BOOST_PP_VALUE) / 1000000000UL == 6
+# define BOOST_PP_SLOT_TEMP_10 6
+# elif (BOOST_PP_VALUE) / 1000000000UL == 7
+# define BOOST_PP_SLOT_TEMP_10 7
+# elif (BOOST_PP_VALUE) / 1000000000UL == 8
+# define BOOST_PP_SLOT_TEMP_10 8
+# elif (BOOST_PP_VALUE) / 1000000000UL == 9
+# define BOOST_PP_SLOT_TEMP_10 9
+# endif
+#
+# if BOOST_PP_SLOT_OFFSET_10(BOOST_PP_VALUE) / 100000000UL == 0
+# define BOOST_PP_SLOT_TEMP_9 0
+# elif BOOST_PP_SLOT_OFFSET_10(BOOST_PP_VALUE) / 100000000UL == 1
+# define BOOST_PP_SLOT_TEMP_9 1
+# elif BOOST_PP_SLOT_OFFSET_10(BOOST_PP_VALUE) / 100000000UL == 2
+# define BOOST_PP_SLOT_TEMP_9 2
+# elif BOOST_PP_SLOT_OFFSET_10(BOOST_PP_VALUE) / 100000000UL == 3
+# define BOOST_PP_SLOT_TEMP_9 3
+# elif BOOST_PP_SLOT_OFFSET_10(BOOST_PP_VALUE) / 100000000UL == 4
+# define BOOST_PP_SLOT_TEMP_9 4
+# elif BOOST_PP_SLOT_OFFSET_10(BOOST_PP_VALUE) / 100000000UL == 5
+# define BOOST_PP_SLOT_TEMP_9 5
+# elif BOOST_PP_SLOT_OFFSET_10(BOOST_PP_VALUE) / 100000000UL == 6
+# define BOOST_PP_SLOT_TEMP_9 6
+# elif BOOST_PP_SLOT_OFFSET_10(BOOST_PP_VALUE) / 100000000UL == 7
+# define BOOST_PP_SLOT_TEMP_9 7
+# elif BOOST_PP_SLOT_OFFSET_10(BOOST_PP_VALUE) / 100000000UL == 8
+# define BOOST_PP_SLOT_TEMP_9 8
+# elif BOOST_PP_SLOT_OFFSET_10(BOOST_PP_VALUE) / 100000000UL == 9
+# define BOOST_PP_SLOT_TEMP_9 9
+# endif
+#
+# if BOOST_PP_SLOT_OFFSET_9(BOOST_PP_VALUE) / 10000000UL == 0
+# define BOOST_PP_SLOT_TEMP_8 0
+# elif BOOST_PP_SLOT_OFFSET_9(BOOST_PP_VALUE) / 10000000UL == 1
+# define BOOST_PP_SLOT_TEMP_8 1
+# elif BOOST_PP_SLOT_OFFSET_9(BOOST_PP_VALUE) / 10000000UL == 2
+# define BOOST_PP_SLOT_TEMP_8 2
+# elif BOOST_PP_SLOT_OFFSET_9(BOOST_PP_VALUE) / 10000000UL == 3
+# define BOOST_PP_SLOT_TEMP_8 3
+# elif BOOST_PP_SLOT_OFFSET_9(BOOST_PP_VALUE) / 10000000UL == 4
+# define BOOST_PP_SLOT_TEMP_8 4
+# elif BOOST_PP_SLOT_OFFSET_9(BOOST_PP_VALUE) / 10000000UL == 5
+# define BOOST_PP_SLOT_TEMP_8 5
+# elif BOOST_PP_SLOT_OFFSET_9(BOOST_PP_VALUE) / 10000000UL == 6
+# define BOOST_PP_SLOT_TEMP_8 6
+# elif BOOST_PP_SLOT_OFFSET_9(BOOST_PP_VALUE) / 10000000UL == 7
+# define BOOST_PP_SLOT_TEMP_8 7
+# elif BOOST_PP_SLOT_OFFSET_9(BOOST_PP_VALUE) / 10000000UL == 8
+# define BOOST_PP_SLOT_TEMP_8 8
+# elif BOOST_PP_SLOT_OFFSET_9(BOOST_PP_VALUE) / 10000000UL == 9
+# define BOOST_PP_SLOT_TEMP_8 9
+# endif
+#
+# if BOOST_PP_SLOT_OFFSET_8(BOOST_PP_VALUE) / 1000000UL == 0
+# define BOOST_PP_SLOT_TEMP_7 0
+# elif BOOST_PP_SLOT_OFFSET_8(BOOST_PP_VALUE) / 1000000UL == 1
+# define BOOST_PP_SLOT_TEMP_7 1
+# elif BOOST_PP_SLOT_OFFSET_8(BOOST_PP_VALUE) / 1000000UL == 2
+# define BOOST_PP_SLOT_TEMP_7 2
+# elif BOOST_PP_SLOT_OFFSET_8(BOOST_PP_VALUE) / 1000000UL == 3
+# define BOOST_PP_SLOT_TEMP_7 3
+# elif BOOST_PP_SLOT_OFFSET_8(BOOST_PP_VALUE) / 1000000UL == 4
+# define BOOST_PP_SLOT_TEMP_7 4
+# elif BOOST_PP_SLOT_OFFSET_8(BOOST_PP_VALUE) / 1000000UL == 5
+# define BOOST_PP_SLOT_TEMP_7 5
+# elif BOOST_PP_SLOT_OFFSET_8(BOOST_PP_VALUE) / 1000000UL == 6
+# define BOOST_PP_SLOT_TEMP_7 6
+# elif BOOST_PP_SLOT_OFFSET_8(BOOST_PP_VALUE) / 1000000UL == 7
+# define BOOST_PP_SLOT_TEMP_7 7
+# elif BOOST_PP_SLOT_OFFSET_8(BOOST_PP_VALUE) / 1000000UL == 8
+# define BOOST_PP_SLOT_TEMP_7 8
+# elif BOOST_PP_SLOT_OFFSET_8(BOOST_PP_VALUE) / 1000000UL == 9
+# define BOOST_PP_SLOT_TEMP_7 9
+# endif
+#
+# if BOOST_PP_SLOT_OFFSET_7(BOOST_PP_VALUE) / 100000UL == 0
+# define BOOST_PP_SLOT_TEMP_6 0
+# elif BOOST_PP_SLOT_OFFSET_7(BOOST_PP_VALUE) / 100000UL == 1
+# define BOOST_PP_SLOT_TEMP_6 1
+# elif BOOST_PP_SLOT_OFFSET_7(BOOST_PP_VALUE) / 100000UL == 2
+# define BOOST_PP_SLOT_TEMP_6 2
+# elif BOOST_PP_SLOT_OFFSET_7(BOOST_PP_VALUE) / 100000UL == 3
+# define BOOST_PP_SLOT_TEMP_6 3
+# elif BOOST_PP_SLOT_OFFSET_7(BOOST_PP_VALUE) / 100000UL == 4
+# define BOOST_PP_SLOT_TEMP_6 4
+# elif BOOST_PP_SLOT_OFFSET_7(BOOST_PP_VALUE) / 100000UL == 5
+# define BOOST_PP_SLOT_TEMP_6 5
+# elif BOOST_PP_SLOT_OFFSET_7(BOOST_PP_VALUE) / 100000UL == 6
+# define BOOST_PP_SLOT_TEMP_6 6
+# elif BOOST_PP_SLOT_OFFSET_7(BOOST_PP_VALUE) / 100000UL == 7
+# define BOOST_PP_SLOT_TEMP_6 7
+# elif BOOST_PP_SLOT_OFFSET_7(BOOST_PP_VALUE) / 100000UL == 8
+# define BOOST_PP_SLOT_TEMP_6 8
+# elif BOOST_PP_SLOT_OFFSET_7(BOOST_PP_VALUE) / 100000UL == 9
+# define BOOST_PP_SLOT_TEMP_6 9
+# endif
+#
+# if BOOST_PP_SLOT_OFFSET_6(BOOST_PP_VALUE) / 10000UL == 0
+# define BOOST_PP_SLOT_TEMP_5 0
+# elif BOOST_PP_SLOT_OFFSET_6(BOOST_PP_VALUE) / 10000UL == 1
+# define BOOST_PP_SLOT_TEMP_5 1
+# elif BOOST_PP_SLOT_OFFSET_6(BOOST_PP_VALUE) / 10000UL == 2
+# define BOOST_PP_SLOT_TEMP_5 2
+# elif BOOST_PP_SLOT_OFFSET_6(BOOST_PP_VALUE) / 10000UL == 3
+# define BOOST_PP_SLOT_TEMP_5 3
+# elif BOOST_PP_SLOT_OFFSET_6(BOOST_PP_VALUE) / 10000UL == 4
+# define BOOST_PP_SLOT_TEMP_5 4
+# elif BOOST_PP_SLOT_OFFSET_6(BOOST_PP_VALUE) / 10000UL == 5
+# define BOOST_PP_SLOT_TEMP_5 5
+# elif BOOST_PP_SLOT_OFFSET_6(BOOST_PP_VALUE) / 10000UL == 6
+# define BOOST_PP_SLOT_TEMP_5 6
+# elif BOOST_PP_SLOT_OFFSET_6(BOOST_PP_VALUE) / 10000UL == 7
+# define BOOST_PP_SLOT_TEMP_5 7
+# elif BOOST_PP_SLOT_OFFSET_6(BOOST_PP_VALUE) / 10000UL == 8
+# define BOOST_PP_SLOT_TEMP_5 8
+# elif BOOST_PP_SLOT_OFFSET_6(BOOST_PP_VALUE) / 10000UL == 9
+# define BOOST_PP_SLOT_TEMP_5 9
+# endif
+#
+# if BOOST_PP_SLOT_OFFSET_5(BOOST_PP_VALUE) / 1000UL == 0
+# define BOOST_PP_SLOT_TEMP_4 0
+# elif BOOST_PP_SLOT_OFFSET_5(BOOST_PP_VALUE) / 1000UL == 1
+# define BOOST_PP_SLOT_TEMP_4 1
+# elif BOOST_PP_SLOT_OFFSET_5(BOOST_PP_VALUE) / 1000UL == 2
+# define BOOST_PP_SLOT_TEMP_4 2
+# elif BOOST_PP_SLOT_OFFSET_5(BOOST_PP_VALUE) / 1000UL == 3
+# define BOOST_PP_SLOT_TEMP_4 3
+# elif BOOST_PP_SLOT_OFFSET_5(BOOST_PP_VALUE) / 1000UL == 4
+# define BOOST_PP_SLOT_TEMP_4 4
+# elif BOOST_PP_SLOT_OFFSET_5(BOOST_PP_VALUE) / 1000UL == 5
+# define BOOST_PP_SLOT_TEMP_4 5
+# elif BOOST_PP_SLOT_OFFSET_5(BOOST_PP_VALUE) / 1000UL == 6
+# define BOOST_PP_SLOT_TEMP_4 6
+# elif BOOST_PP_SLOT_OFFSET_5(BOOST_PP_VALUE) / 1000UL == 7
+# define BOOST_PP_SLOT_TEMP_4 7
+# elif BOOST_PP_SLOT_OFFSET_5(BOOST_PP_VALUE) / 1000UL == 8
+# define BOOST_PP_SLOT_TEMP_4 8
+# elif BOOST_PP_SLOT_OFFSET_5(BOOST_PP_VALUE) / 1000UL == 9
+# define BOOST_PP_SLOT_TEMP_4 9
+# endif
+#
+# if BOOST_PP_SLOT_OFFSET_4(BOOST_PP_VALUE) / 100UL == 0
+# define BOOST_PP_SLOT_TEMP_3 0
+# elif BOOST_PP_SLOT_OFFSET_4(BOOST_PP_VALUE) / 100UL == 1
+# define BOOST_PP_SLOT_TEMP_3 1
+# elif BOOST_PP_SLOT_OFFSET_4(BOOST_PP_VALUE) / 100UL == 2
+# define BOOST_PP_SLOT_TEMP_3 2
+# elif BOOST_PP_SLOT_OFFSET_4(BOOST_PP_VALUE) / 100UL == 3
+# define BOOST_PP_SLOT_TEMP_3 3
+# elif BOOST_PP_SLOT_OFFSET_4(BOOST_PP_VALUE) / 100UL == 4
+# define BOOST_PP_SLOT_TEMP_3 4
+# elif BOOST_PP_SLOT_OFFSET_4(BOOST_PP_VALUE) / 100UL == 5
+# define BOOST_PP_SLOT_TEMP_3 5
+# elif BOOST_PP_SLOT_OFFSET_4(BOOST_PP_VALUE) / 100UL == 6
+# define BOOST_PP_SLOT_TEMP_3 6
+# elif BOOST_PP_SLOT_OFFSET_4(BOOST_PP_VALUE) / 100UL == 7
+# define BOOST_PP_SLOT_TEMP_3 7
+# elif BOOST_PP_SLOT_OFFSET_4(BOOST_PP_VALUE) / 100UL == 8
+# define BOOST_PP_SLOT_TEMP_3 8
+# elif BOOST_PP_SLOT_OFFSET_4(BOOST_PP_VALUE) / 100UL == 9
+# define BOOST_PP_SLOT_TEMP_3 9
+# endif
+#
+# if BOOST_PP_SLOT_OFFSET_3(BOOST_PP_VALUE) / 10UL == 0
+# define BOOST_PP_SLOT_TEMP_2 0
+# elif BOOST_PP_SLOT_OFFSET_3(BOOST_PP_VALUE) / 10UL == 1
+# define BOOST_PP_SLOT_TEMP_2 1
+# elif BOOST_PP_SLOT_OFFSET_3(BOOST_PP_VALUE) / 10UL == 2
+# define BOOST_PP_SLOT_TEMP_2 2
+# elif BOOST_PP_SLOT_OFFSET_3(BOOST_PP_VALUE) / 10UL == 3
+# define BOOST_PP_SLOT_TEMP_2 3
+# elif BOOST_PP_SLOT_OFFSET_3(BOOST_PP_VALUE) / 10UL == 4
+# define BOOST_PP_SLOT_TEMP_2 4
+# elif BOOST_PP_SLOT_OFFSET_3(BOOST_PP_VALUE) / 10UL == 5
+# define BOOST_PP_SLOT_TEMP_2 5
+# elif BOOST_PP_SLOT_OFFSET_3(BOOST_PP_VALUE) / 10UL == 6
+# define BOOST_PP_SLOT_TEMP_2 6
+# elif BOOST_PP_SLOT_OFFSET_3(BOOST_PP_VALUE) / 10UL == 7
+# define BOOST_PP_SLOT_TEMP_2 7
+# elif BOOST_PP_SLOT_OFFSET_3(BOOST_PP_VALUE) / 10UL == 8
+# define BOOST_PP_SLOT_TEMP_2 8
+# elif BOOST_PP_SLOT_OFFSET_3(BOOST_PP_VALUE) / 10UL == 9
+# define BOOST_PP_SLOT_TEMP_2 9
+# endif
+#
+# if BOOST_PP_SLOT_OFFSET_2(BOOST_PP_VALUE) == 0
+# define BOOST_PP_SLOT_TEMP_1 0
+# elif BOOST_PP_SLOT_OFFSET_2(BOOST_PP_VALUE) == 1
+# define BOOST_PP_SLOT_TEMP_1 1
+# elif BOOST_PP_SLOT_OFFSET_2(BOOST_PP_VALUE) == 2
+# define BOOST_PP_SLOT_TEMP_1 2
+# elif BOOST_PP_SLOT_OFFSET_2(BOOST_PP_VALUE) == 3
+# define BOOST_PP_SLOT_TEMP_1 3
+# elif BOOST_PP_SLOT_OFFSET_2(BOOST_PP_VALUE) == 4
+# define BOOST_PP_SLOT_TEMP_1 4
+# elif BOOST_PP_SLOT_OFFSET_2(BOOST_PP_VALUE) == 5
+# define BOOST_PP_SLOT_TEMP_1 5
+# elif BOOST_PP_SLOT_OFFSET_2(BOOST_PP_VALUE) == 6
+# define BOOST_PP_SLOT_TEMP_1 6
+# elif BOOST_PP_SLOT_OFFSET_2(BOOST_PP_VALUE) == 7
+# define BOOST_PP_SLOT_TEMP_1 7
+# elif BOOST_PP_SLOT_OFFSET_2(BOOST_PP_VALUE) == 8
+# define BOOST_PP_SLOT_TEMP_1 8
+# elif BOOST_PP_SLOT_OFFSET_2(BOOST_PP_VALUE) == 9
+# define BOOST_PP_SLOT_TEMP_1 9
+# endif
+#
+# undef BOOST_PP_VALUE
diff --git a/boost/boost/preprocessor/slot/detail/slot1.hpp b/boost/boost/preprocessor/slot/detail/slot1.hpp
new file mode 100644
index 00000000000..b22748e6ac4
--- /dev/null
+++ b/boost/boost/preprocessor/slot/detail/slot1.hpp
@@ -0,0 +1,267 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# include <boost/preprocessor/slot/detail/shared.hpp>
+#
+# undef BOOST_PP_SLOT_1
+#
+# undef BOOST_PP_SLOT_1_DIGIT_1
+# undef BOOST_PP_SLOT_1_DIGIT_2
+# undef BOOST_PP_SLOT_1_DIGIT_3
+# undef BOOST_PP_SLOT_1_DIGIT_4
+# undef BOOST_PP_SLOT_1_DIGIT_5
+# undef BOOST_PP_SLOT_1_DIGIT_6
+# undef BOOST_PP_SLOT_1_DIGIT_7
+# undef BOOST_PP_SLOT_1_DIGIT_8
+# undef BOOST_PP_SLOT_1_DIGIT_9
+# undef BOOST_PP_SLOT_1_DIGIT_10
+#
+# if BOOST_PP_SLOT_TEMP_10 == 0
+# define BOOST_PP_SLOT_1_DIGIT_10 0
+# elif BOOST_PP_SLOT_TEMP_10 == 1
+# define BOOST_PP_SLOT_1_DIGIT_10 1
+# elif BOOST_PP_SLOT_TEMP_10 == 2
+# define BOOST_PP_SLOT_1_DIGIT_10 2
+# elif BOOST_PP_SLOT_TEMP_10 == 3
+# define BOOST_PP_SLOT_1_DIGIT_10 3
+# elif BOOST_PP_SLOT_TEMP_10 == 4
+# define BOOST_PP_SLOT_1_DIGIT_10 4
+# elif BOOST_PP_SLOT_TEMP_10 == 5
+# define BOOST_PP_SLOT_1_DIGIT_10 5
+# elif BOOST_PP_SLOT_TEMP_10 == 6
+# define BOOST_PP_SLOT_1_DIGIT_10 6
+# elif BOOST_PP_SLOT_TEMP_10 == 7
+# define BOOST_PP_SLOT_1_DIGIT_10 7
+# elif BOOST_PP_SLOT_TEMP_10 == 8
+# define BOOST_PP_SLOT_1_DIGIT_10 8
+# elif BOOST_PP_SLOT_TEMP_10 == 9
+# define BOOST_PP_SLOT_1_DIGIT_10 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_9 == 0
+# define BOOST_PP_SLOT_1_DIGIT_9 0
+# elif BOOST_PP_SLOT_TEMP_9 == 1
+# define BOOST_PP_SLOT_1_DIGIT_9 1
+# elif BOOST_PP_SLOT_TEMP_9 == 2
+# define BOOST_PP_SLOT_1_DIGIT_9 2
+# elif BOOST_PP_SLOT_TEMP_9 == 3
+# define BOOST_PP_SLOT_1_DIGIT_9 3
+# elif BOOST_PP_SLOT_TEMP_9 == 4
+# define BOOST_PP_SLOT_1_DIGIT_9 4
+# elif BOOST_PP_SLOT_TEMP_9 == 5
+# define BOOST_PP_SLOT_1_DIGIT_9 5
+# elif BOOST_PP_SLOT_TEMP_9 == 6
+# define BOOST_PP_SLOT_1_DIGIT_9 6
+# elif BOOST_PP_SLOT_TEMP_9 == 7
+# define BOOST_PP_SLOT_1_DIGIT_9 7
+# elif BOOST_PP_SLOT_TEMP_9 == 8
+# define BOOST_PP_SLOT_1_DIGIT_9 8
+# elif BOOST_PP_SLOT_TEMP_9 == 9
+# define BOOST_PP_SLOT_1_DIGIT_9 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_8 == 0
+# define BOOST_PP_SLOT_1_DIGIT_8 0
+# elif BOOST_PP_SLOT_TEMP_8 == 1
+# define BOOST_PP_SLOT_1_DIGIT_8 1
+# elif BOOST_PP_SLOT_TEMP_8 == 2
+# define BOOST_PP_SLOT_1_DIGIT_8 2
+# elif BOOST_PP_SLOT_TEMP_8 == 3
+# define BOOST_PP_SLOT_1_DIGIT_8 3
+# elif BOOST_PP_SLOT_TEMP_8 == 4
+# define BOOST_PP_SLOT_1_DIGIT_8 4
+# elif BOOST_PP_SLOT_TEMP_8 == 5
+# define BOOST_PP_SLOT_1_DIGIT_8 5
+# elif BOOST_PP_SLOT_TEMP_8 == 6
+# define BOOST_PP_SLOT_1_DIGIT_8 6
+# elif BOOST_PP_SLOT_TEMP_8 == 7
+# define BOOST_PP_SLOT_1_DIGIT_8 7
+# elif BOOST_PP_SLOT_TEMP_8 == 8
+# define BOOST_PP_SLOT_1_DIGIT_8 8
+# elif BOOST_PP_SLOT_TEMP_8 == 9
+# define BOOST_PP_SLOT_1_DIGIT_8 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_7 == 0
+# define BOOST_PP_SLOT_1_DIGIT_7 0
+# elif BOOST_PP_SLOT_TEMP_7 == 1
+# define BOOST_PP_SLOT_1_DIGIT_7 1
+# elif BOOST_PP_SLOT_TEMP_7 == 2
+# define BOOST_PP_SLOT_1_DIGIT_7 2
+# elif BOOST_PP_SLOT_TEMP_7 == 3
+# define BOOST_PP_SLOT_1_DIGIT_7 3
+# elif BOOST_PP_SLOT_TEMP_7 == 4
+# define BOOST_PP_SLOT_1_DIGIT_7 4
+# elif BOOST_PP_SLOT_TEMP_7 == 5
+# define BOOST_PP_SLOT_1_DIGIT_7 5
+# elif BOOST_PP_SLOT_TEMP_7 == 6
+# define BOOST_PP_SLOT_1_DIGIT_7 6
+# elif BOOST_PP_SLOT_TEMP_7 == 7
+# define BOOST_PP_SLOT_1_DIGIT_7 7
+# elif BOOST_PP_SLOT_TEMP_7 == 8
+# define BOOST_PP_SLOT_1_DIGIT_7 8
+# elif BOOST_PP_SLOT_TEMP_7 == 9
+# define BOOST_PP_SLOT_1_DIGIT_7 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_6 == 0
+# define BOOST_PP_SLOT_1_DIGIT_6 0
+# elif BOOST_PP_SLOT_TEMP_6 == 1
+# define BOOST_PP_SLOT_1_DIGIT_6 1
+# elif BOOST_PP_SLOT_TEMP_6 == 2
+# define BOOST_PP_SLOT_1_DIGIT_6 2
+# elif BOOST_PP_SLOT_TEMP_6 == 3
+# define BOOST_PP_SLOT_1_DIGIT_6 3
+# elif BOOST_PP_SLOT_TEMP_6 == 4
+# define BOOST_PP_SLOT_1_DIGIT_6 4
+# elif BOOST_PP_SLOT_TEMP_6 == 5
+# define BOOST_PP_SLOT_1_DIGIT_6 5
+# elif BOOST_PP_SLOT_TEMP_6 == 6
+# define BOOST_PP_SLOT_1_DIGIT_6 6
+# elif BOOST_PP_SLOT_TEMP_6 == 7
+# define BOOST_PP_SLOT_1_DIGIT_6 7
+# elif BOOST_PP_SLOT_TEMP_6 == 8
+# define BOOST_PP_SLOT_1_DIGIT_6 8
+# elif BOOST_PP_SLOT_TEMP_6 == 9
+# define BOOST_PP_SLOT_1_DIGIT_6 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_5 == 0
+# define BOOST_PP_SLOT_1_DIGIT_5 0
+# elif BOOST_PP_SLOT_TEMP_5 == 1
+# define BOOST_PP_SLOT_1_DIGIT_5 1
+# elif BOOST_PP_SLOT_TEMP_5 == 2
+# define BOOST_PP_SLOT_1_DIGIT_5 2
+# elif BOOST_PP_SLOT_TEMP_5 == 3
+# define BOOST_PP_SLOT_1_DIGIT_5 3
+# elif BOOST_PP_SLOT_TEMP_5 == 4
+# define BOOST_PP_SLOT_1_DIGIT_5 4
+# elif BOOST_PP_SLOT_TEMP_5 == 5
+# define BOOST_PP_SLOT_1_DIGIT_5 5
+# elif BOOST_PP_SLOT_TEMP_5 == 6
+# define BOOST_PP_SLOT_1_DIGIT_5 6
+# elif BOOST_PP_SLOT_TEMP_5 == 7
+# define BOOST_PP_SLOT_1_DIGIT_5 7
+# elif BOOST_PP_SLOT_TEMP_5 == 8
+# define BOOST_PP_SLOT_1_DIGIT_5 8
+# elif BOOST_PP_SLOT_TEMP_5 == 9
+# define BOOST_PP_SLOT_1_DIGIT_5 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_4 == 0
+# define BOOST_PP_SLOT_1_DIGIT_4 0
+# elif BOOST_PP_SLOT_TEMP_4 == 1
+# define BOOST_PP_SLOT_1_DIGIT_4 1
+# elif BOOST_PP_SLOT_TEMP_4 == 2
+# define BOOST_PP_SLOT_1_DIGIT_4 2
+# elif BOOST_PP_SLOT_TEMP_4 == 3
+# define BOOST_PP_SLOT_1_DIGIT_4 3
+# elif BOOST_PP_SLOT_TEMP_4 == 4
+# define BOOST_PP_SLOT_1_DIGIT_4 4
+# elif BOOST_PP_SLOT_TEMP_4 == 5
+# define BOOST_PP_SLOT_1_DIGIT_4 5
+# elif BOOST_PP_SLOT_TEMP_4 == 6
+# define BOOST_PP_SLOT_1_DIGIT_4 6
+# elif BOOST_PP_SLOT_TEMP_4 == 7
+# define BOOST_PP_SLOT_1_DIGIT_4 7
+# elif BOOST_PP_SLOT_TEMP_4 == 8
+# define BOOST_PP_SLOT_1_DIGIT_4 8
+# elif BOOST_PP_SLOT_TEMP_4 == 9
+# define BOOST_PP_SLOT_1_DIGIT_4 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_3 == 0
+# define BOOST_PP_SLOT_1_DIGIT_3 0
+# elif BOOST_PP_SLOT_TEMP_3 == 1
+# define BOOST_PP_SLOT_1_DIGIT_3 1
+# elif BOOST_PP_SLOT_TEMP_3 == 2
+# define BOOST_PP_SLOT_1_DIGIT_3 2
+# elif BOOST_PP_SLOT_TEMP_3 == 3
+# define BOOST_PP_SLOT_1_DIGIT_3 3
+# elif BOOST_PP_SLOT_TEMP_3 == 4
+# define BOOST_PP_SLOT_1_DIGIT_3 4
+# elif BOOST_PP_SLOT_TEMP_3 == 5
+# define BOOST_PP_SLOT_1_DIGIT_3 5
+# elif BOOST_PP_SLOT_TEMP_3 == 6
+# define BOOST_PP_SLOT_1_DIGIT_3 6
+# elif BOOST_PP_SLOT_TEMP_3 == 7
+# define BOOST_PP_SLOT_1_DIGIT_3 7
+# elif BOOST_PP_SLOT_TEMP_3 == 8
+# define BOOST_PP_SLOT_1_DIGIT_3 8
+# elif BOOST_PP_SLOT_TEMP_3 == 9
+# define BOOST_PP_SLOT_1_DIGIT_3 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_2 == 0
+# define BOOST_PP_SLOT_1_DIGIT_2 0
+# elif BOOST_PP_SLOT_TEMP_2 == 1
+# define BOOST_PP_SLOT_1_DIGIT_2 1
+# elif BOOST_PP_SLOT_TEMP_2 == 2
+# define BOOST_PP_SLOT_1_DIGIT_2 2
+# elif BOOST_PP_SLOT_TEMP_2 == 3
+# define BOOST_PP_SLOT_1_DIGIT_2 3
+# elif BOOST_PP_SLOT_TEMP_2 == 4
+# define BOOST_PP_SLOT_1_DIGIT_2 4
+# elif BOOST_PP_SLOT_TEMP_2 == 5
+# define BOOST_PP_SLOT_1_DIGIT_2 5
+# elif BOOST_PP_SLOT_TEMP_2 == 6
+# define BOOST_PP_SLOT_1_DIGIT_2 6
+# elif BOOST_PP_SLOT_TEMP_2 == 7
+# define BOOST_PP_SLOT_1_DIGIT_2 7
+# elif BOOST_PP_SLOT_TEMP_2 == 8
+# define BOOST_PP_SLOT_1_DIGIT_2 8
+# elif BOOST_PP_SLOT_TEMP_2 == 9
+# define BOOST_PP_SLOT_1_DIGIT_2 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_1 == 0
+# define BOOST_PP_SLOT_1_DIGIT_1 0
+# elif BOOST_PP_SLOT_TEMP_1 == 1
+# define BOOST_PP_SLOT_1_DIGIT_1 1
+# elif BOOST_PP_SLOT_TEMP_1 == 2
+# define BOOST_PP_SLOT_1_DIGIT_1 2
+# elif BOOST_PP_SLOT_TEMP_1 == 3
+# define BOOST_PP_SLOT_1_DIGIT_1 3
+# elif BOOST_PP_SLOT_TEMP_1 == 4
+# define BOOST_PP_SLOT_1_DIGIT_1 4
+# elif BOOST_PP_SLOT_TEMP_1 == 5
+# define BOOST_PP_SLOT_1_DIGIT_1 5
+# elif BOOST_PP_SLOT_TEMP_1 == 6
+# define BOOST_PP_SLOT_1_DIGIT_1 6
+# elif BOOST_PP_SLOT_TEMP_1 == 7
+# define BOOST_PP_SLOT_1_DIGIT_1 7
+# elif BOOST_PP_SLOT_TEMP_1 == 8
+# define BOOST_PP_SLOT_1_DIGIT_1 8
+# elif BOOST_PP_SLOT_TEMP_1 == 9
+# define BOOST_PP_SLOT_1_DIGIT_1 9
+# endif
+#
+# if BOOST_PP_SLOT_1_DIGIT_10
+# define BOOST_PP_SLOT_1() BOOST_PP_SLOT_CC_10(BOOST_PP_SLOT_1_DIGIT_10, BOOST_PP_SLOT_1_DIGIT_9, BOOST_PP_SLOT_1_DIGIT_8, BOOST_PP_SLOT_1_DIGIT_7, BOOST_PP_SLOT_1_DIGIT_6, BOOST_PP_SLOT_1_DIGIT_5, BOOST_PP_SLOT_1_DIGIT_4, BOOST_PP_SLOT_1_DIGIT_3, BOOST_PP_SLOT_1_DIGIT_2, BOOST_PP_SLOT_1_DIGIT_1)
+# elif BOOST_PP_SLOT_1_DIGIT_9
+# define BOOST_PP_SLOT_1() BOOST_PP_SLOT_CC_9(BOOST_PP_SLOT_1_DIGIT_9, BOOST_PP_SLOT_1_DIGIT_8, BOOST_PP_SLOT_1_DIGIT_7, BOOST_PP_SLOT_1_DIGIT_6, BOOST_PP_SLOT_1_DIGIT_5, BOOST_PP_SLOT_1_DIGIT_4, BOOST_PP_SLOT_1_DIGIT_3, BOOST_PP_SLOT_1_DIGIT_2, BOOST_PP_SLOT_1_DIGIT_1)
+# elif BOOST_PP_SLOT_1_DIGIT_8
+# define BOOST_PP_SLOT_1() BOOST_PP_SLOT_CC_8(BOOST_PP_SLOT_1_DIGIT_8, BOOST_PP_SLOT_1_DIGIT_7, BOOST_PP_SLOT_1_DIGIT_6, BOOST_PP_SLOT_1_DIGIT_5, BOOST_PP_SLOT_1_DIGIT_4, BOOST_PP_SLOT_1_DIGIT_3, BOOST_PP_SLOT_1_DIGIT_2, BOOST_PP_SLOT_1_DIGIT_1)
+# elif BOOST_PP_SLOT_1_DIGIT_7
+# define BOOST_PP_SLOT_1() BOOST_PP_SLOT_CC_7(BOOST_PP_SLOT_1_DIGIT_7, BOOST_PP_SLOT_1_DIGIT_6, BOOST_PP_SLOT_1_DIGIT_5, BOOST_PP_SLOT_1_DIGIT_4, BOOST_PP_SLOT_1_DIGIT_3, BOOST_PP_SLOT_1_DIGIT_2, BOOST_PP_SLOT_1_DIGIT_1)
+# elif BOOST_PP_SLOT_1_DIGIT_6
+# define BOOST_PP_SLOT_1() BOOST_PP_SLOT_CC_6(BOOST_PP_SLOT_1_DIGIT_6, BOOST_PP_SLOT_1_DIGIT_5, BOOST_PP_SLOT_1_DIGIT_4, BOOST_PP_SLOT_1_DIGIT_3, BOOST_PP_SLOT_1_DIGIT_2, BOOST_PP_SLOT_1_DIGIT_1)
+# elif BOOST_PP_SLOT_1_DIGIT_5
+# define BOOST_PP_SLOT_1() BOOST_PP_SLOT_CC_5(BOOST_PP_SLOT_1_DIGIT_5, BOOST_PP_SLOT_1_DIGIT_4, BOOST_PP_SLOT_1_DIGIT_3, BOOST_PP_SLOT_1_DIGIT_2, BOOST_PP_SLOT_1_DIGIT_1)
+# elif BOOST_PP_SLOT_1_DIGIT_4
+# define BOOST_PP_SLOT_1() BOOST_PP_SLOT_CC_4(BOOST_PP_SLOT_1_DIGIT_4, BOOST_PP_SLOT_1_DIGIT_3, BOOST_PP_SLOT_1_DIGIT_2, BOOST_PP_SLOT_1_DIGIT_1)
+# elif BOOST_PP_SLOT_1_DIGIT_3
+# define BOOST_PP_SLOT_1() BOOST_PP_SLOT_CC_3(BOOST_PP_SLOT_1_DIGIT_3, BOOST_PP_SLOT_1_DIGIT_2, BOOST_PP_SLOT_1_DIGIT_1)
+# elif BOOST_PP_SLOT_1_DIGIT_2
+# define BOOST_PP_SLOT_1() BOOST_PP_SLOT_CC_2(BOOST_PP_SLOT_1_DIGIT_2, BOOST_PP_SLOT_1_DIGIT_1)
+# else
+# define BOOST_PP_SLOT_1() BOOST_PP_SLOT_1_DIGIT_1
+# endif
diff --git a/boost/boost/preprocessor/slot/detail/slot2.hpp b/boost/boost/preprocessor/slot/detail/slot2.hpp
new file mode 100644
index 00000000000..5d5258c2258
--- /dev/null
+++ b/boost/boost/preprocessor/slot/detail/slot2.hpp
@@ -0,0 +1,267 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# include <boost/preprocessor/slot/detail/shared.hpp>
+#
+# undef BOOST_PP_SLOT_2
+#
+# undef BOOST_PP_SLOT_2_DIGIT_1
+# undef BOOST_PP_SLOT_2_DIGIT_2
+# undef BOOST_PP_SLOT_2_DIGIT_3
+# undef BOOST_PP_SLOT_2_DIGIT_4
+# undef BOOST_PP_SLOT_2_DIGIT_5
+# undef BOOST_PP_SLOT_2_DIGIT_6
+# undef BOOST_PP_SLOT_2_DIGIT_7
+# undef BOOST_PP_SLOT_2_DIGIT_8
+# undef BOOST_PP_SLOT_2_DIGIT_9
+# undef BOOST_PP_SLOT_2_DIGIT_10
+#
+# if BOOST_PP_SLOT_TEMP_10 == 0
+# define BOOST_PP_SLOT_2_DIGIT_10 0
+# elif BOOST_PP_SLOT_TEMP_10 == 1
+# define BOOST_PP_SLOT_2_DIGIT_10 1
+# elif BOOST_PP_SLOT_TEMP_10 == 2
+# define BOOST_PP_SLOT_2_DIGIT_10 2
+# elif BOOST_PP_SLOT_TEMP_10 == 3
+# define BOOST_PP_SLOT_2_DIGIT_10 3
+# elif BOOST_PP_SLOT_TEMP_10 == 4
+# define BOOST_PP_SLOT_2_DIGIT_10 4
+# elif BOOST_PP_SLOT_TEMP_10 == 5
+# define BOOST_PP_SLOT_2_DIGIT_10 5
+# elif BOOST_PP_SLOT_TEMP_10 == 6
+# define BOOST_PP_SLOT_2_DIGIT_10 6
+# elif BOOST_PP_SLOT_TEMP_10 == 7
+# define BOOST_PP_SLOT_2_DIGIT_10 7
+# elif BOOST_PP_SLOT_TEMP_10 == 8
+# define BOOST_PP_SLOT_2_DIGIT_10 8
+# elif BOOST_PP_SLOT_TEMP_10 == 9
+# define BOOST_PP_SLOT_2_DIGIT_10 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_9 == 0
+# define BOOST_PP_SLOT_2_DIGIT_9 0
+# elif BOOST_PP_SLOT_TEMP_9 == 1
+# define BOOST_PP_SLOT_2_DIGIT_9 1
+# elif BOOST_PP_SLOT_TEMP_9 == 2
+# define BOOST_PP_SLOT_2_DIGIT_9 2
+# elif BOOST_PP_SLOT_TEMP_9 == 3
+# define BOOST_PP_SLOT_2_DIGIT_9 3
+# elif BOOST_PP_SLOT_TEMP_9 == 4
+# define BOOST_PP_SLOT_2_DIGIT_9 4
+# elif BOOST_PP_SLOT_TEMP_9 == 5
+# define BOOST_PP_SLOT_2_DIGIT_9 5
+# elif BOOST_PP_SLOT_TEMP_9 == 6
+# define BOOST_PP_SLOT_2_DIGIT_9 6
+# elif BOOST_PP_SLOT_TEMP_9 == 7
+# define BOOST_PP_SLOT_2_DIGIT_9 7
+# elif BOOST_PP_SLOT_TEMP_9 == 8
+# define BOOST_PP_SLOT_2_DIGIT_9 8
+# elif BOOST_PP_SLOT_TEMP_9 == 9
+# define BOOST_PP_SLOT_2_DIGIT_9 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_8 == 0
+# define BOOST_PP_SLOT_2_DIGIT_8 0
+# elif BOOST_PP_SLOT_TEMP_8 == 1
+# define BOOST_PP_SLOT_2_DIGIT_8 1
+# elif BOOST_PP_SLOT_TEMP_8 == 2
+# define BOOST_PP_SLOT_2_DIGIT_8 2
+# elif BOOST_PP_SLOT_TEMP_8 == 3
+# define BOOST_PP_SLOT_2_DIGIT_8 3
+# elif BOOST_PP_SLOT_TEMP_8 == 4
+# define BOOST_PP_SLOT_2_DIGIT_8 4
+# elif BOOST_PP_SLOT_TEMP_8 == 5
+# define BOOST_PP_SLOT_2_DIGIT_8 5
+# elif BOOST_PP_SLOT_TEMP_8 == 6
+# define BOOST_PP_SLOT_2_DIGIT_8 6
+# elif BOOST_PP_SLOT_TEMP_8 == 7
+# define BOOST_PP_SLOT_2_DIGIT_8 7
+# elif BOOST_PP_SLOT_TEMP_8 == 8
+# define BOOST_PP_SLOT_2_DIGIT_8 8
+# elif BOOST_PP_SLOT_TEMP_8 == 9
+# define BOOST_PP_SLOT_2_DIGIT_8 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_7 == 0
+# define BOOST_PP_SLOT_2_DIGIT_7 0
+# elif BOOST_PP_SLOT_TEMP_7 == 1
+# define BOOST_PP_SLOT_2_DIGIT_7 1
+# elif BOOST_PP_SLOT_TEMP_7 == 2
+# define BOOST_PP_SLOT_2_DIGIT_7 2
+# elif BOOST_PP_SLOT_TEMP_7 == 3
+# define BOOST_PP_SLOT_2_DIGIT_7 3
+# elif BOOST_PP_SLOT_TEMP_7 == 4
+# define BOOST_PP_SLOT_2_DIGIT_7 4
+# elif BOOST_PP_SLOT_TEMP_7 == 5
+# define BOOST_PP_SLOT_2_DIGIT_7 5
+# elif BOOST_PP_SLOT_TEMP_7 == 6
+# define BOOST_PP_SLOT_2_DIGIT_7 6
+# elif BOOST_PP_SLOT_TEMP_7 == 7
+# define BOOST_PP_SLOT_2_DIGIT_7 7
+# elif BOOST_PP_SLOT_TEMP_7 == 8
+# define BOOST_PP_SLOT_2_DIGIT_7 8
+# elif BOOST_PP_SLOT_TEMP_7 == 9
+# define BOOST_PP_SLOT_2_DIGIT_7 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_6 == 0
+# define BOOST_PP_SLOT_2_DIGIT_6 0
+# elif BOOST_PP_SLOT_TEMP_6 == 1
+# define BOOST_PP_SLOT_2_DIGIT_6 1
+# elif BOOST_PP_SLOT_TEMP_6 == 2
+# define BOOST_PP_SLOT_2_DIGIT_6 2
+# elif BOOST_PP_SLOT_TEMP_6 == 3
+# define BOOST_PP_SLOT_2_DIGIT_6 3
+# elif BOOST_PP_SLOT_TEMP_6 == 4
+# define BOOST_PP_SLOT_2_DIGIT_6 4
+# elif BOOST_PP_SLOT_TEMP_6 == 5
+# define BOOST_PP_SLOT_2_DIGIT_6 5
+# elif BOOST_PP_SLOT_TEMP_6 == 6
+# define BOOST_PP_SLOT_2_DIGIT_6 6
+# elif BOOST_PP_SLOT_TEMP_6 == 7
+# define BOOST_PP_SLOT_2_DIGIT_6 7
+# elif BOOST_PP_SLOT_TEMP_6 == 8
+# define BOOST_PP_SLOT_2_DIGIT_6 8
+# elif BOOST_PP_SLOT_TEMP_6 == 9
+# define BOOST_PP_SLOT_2_DIGIT_6 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_5 == 0
+# define BOOST_PP_SLOT_2_DIGIT_5 0
+# elif BOOST_PP_SLOT_TEMP_5 == 1
+# define BOOST_PP_SLOT_2_DIGIT_5 1
+# elif BOOST_PP_SLOT_TEMP_5 == 2
+# define BOOST_PP_SLOT_2_DIGIT_5 2
+# elif BOOST_PP_SLOT_TEMP_5 == 3
+# define BOOST_PP_SLOT_2_DIGIT_5 3
+# elif BOOST_PP_SLOT_TEMP_5 == 4
+# define BOOST_PP_SLOT_2_DIGIT_5 4
+# elif BOOST_PP_SLOT_TEMP_5 == 5
+# define BOOST_PP_SLOT_2_DIGIT_5 5
+# elif BOOST_PP_SLOT_TEMP_5 == 6
+# define BOOST_PP_SLOT_2_DIGIT_5 6
+# elif BOOST_PP_SLOT_TEMP_5 == 7
+# define BOOST_PP_SLOT_2_DIGIT_5 7
+# elif BOOST_PP_SLOT_TEMP_5 == 8
+# define BOOST_PP_SLOT_2_DIGIT_5 8
+# elif BOOST_PP_SLOT_TEMP_5 == 9
+# define BOOST_PP_SLOT_2_DIGIT_5 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_4 == 0
+# define BOOST_PP_SLOT_2_DIGIT_4 0
+# elif BOOST_PP_SLOT_TEMP_4 == 1
+# define BOOST_PP_SLOT_2_DIGIT_4 1
+# elif BOOST_PP_SLOT_TEMP_4 == 2
+# define BOOST_PP_SLOT_2_DIGIT_4 2
+# elif BOOST_PP_SLOT_TEMP_4 == 3
+# define BOOST_PP_SLOT_2_DIGIT_4 3
+# elif BOOST_PP_SLOT_TEMP_4 == 4
+# define BOOST_PP_SLOT_2_DIGIT_4 4
+# elif BOOST_PP_SLOT_TEMP_4 == 5
+# define BOOST_PP_SLOT_2_DIGIT_4 5
+# elif BOOST_PP_SLOT_TEMP_4 == 6
+# define BOOST_PP_SLOT_2_DIGIT_4 6
+# elif BOOST_PP_SLOT_TEMP_4 == 7
+# define BOOST_PP_SLOT_2_DIGIT_4 7
+# elif BOOST_PP_SLOT_TEMP_4 == 8
+# define BOOST_PP_SLOT_2_DIGIT_4 8
+# elif BOOST_PP_SLOT_TEMP_4 == 9
+# define BOOST_PP_SLOT_2_DIGIT_4 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_3 == 0
+# define BOOST_PP_SLOT_2_DIGIT_3 0
+# elif BOOST_PP_SLOT_TEMP_3 == 1
+# define BOOST_PP_SLOT_2_DIGIT_3 1
+# elif BOOST_PP_SLOT_TEMP_3 == 2
+# define BOOST_PP_SLOT_2_DIGIT_3 2
+# elif BOOST_PP_SLOT_TEMP_3 == 3
+# define BOOST_PP_SLOT_2_DIGIT_3 3
+# elif BOOST_PP_SLOT_TEMP_3 == 4
+# define BOOST_PP_SLOT_2_DIGIT_3 4
+# elif BOOST_PP_SLOT_TEMP_3 == 5
+# define BOOST_PP_SLOT_2_DIGIT_3 5
+# elif BOOST_PP_SLOT_TEMP_3 == 6
+# define BOOST_PP_SLOT_2_DIGIT_3 6
+# elif BOOST_PP_SLOT_TEMP_3 == 7
+# define BOOST_PP_SLOT_2_DIGIT_3 7
+# elif BOOST_PP_SLOT_TEMP_3 == 8
+# define BOOST_PP_SLOT_2_DIGIT_3 8
+# elif BOOST_PP_SLOT_TEMP_3 == 9
+# define BOOST_PP_SLOT_2_DIGIT_3 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_2 == 0
+# define BOOST_PP_SLOT_2_DIGIT_2 0
+# elif BOOST_PP_SLOT_TEMP_2 == 1
+# define BOOST_PP_SLOT_2_DIGIT_2 1
+# elif BOOST_PP_SLOT_TEMP_2 == 2
+# define BOOST_PP_SLOT_2_DIGIT_2 2
+# elif BOOST_PP_SLOT_TEMP_2 == 3
+# define BOOST_PP_SLOT_2_DIGIT_2 3
+# elif BOOST_PP_SLOT_TEMP_2 == 4
+# define BOOST_PP_SLOT_2_DIGIT_2 4
+# elif BOOST_PP_SLOT_TEMP_2 == 5
+# define BOOST_PP_SLOT_2_DIGIT_2 5
+# elif BOOST_PP_SLOT_TEMP_2 == 6
+# define BOOST_PP_SLOT_2_DIGIT_2 6
+# elif BOOST_PP_SLOT_TEMP_2 == 7
+# define BOOST_PP_SLOT_2_DIGIT_2 7
+# elif BOOST_PP_SLOT_TEMP_2 == 8
+# define BOOST_PP_SLOT_2_DIGIT_2 8
+# elif BOOST_PP_SLOT_TEMP_2 == 9
+# define BOOST_PP_SLOT_2_DIGIT_2 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_1 == 0
+# define BOOST_PP_SLOT_2_DIGIT_1 0
+# elif BOOST_PP_SLOT_TEMP_1 == 1
+# define BOOST_PP_SLOT_2_DIGIT_1 1
+# elif BOOST_PP_SLOT_TEMP_1 == 2
+# define BOOST_PP_SLOT_2_DIGIT_1 2
+# elif BOOST_PP_SLOT_TEMP_1 == 3
+# define BOOST_PP_SLOT_2_DIGIT_1 3
+# elif BOOST_PP_SLOT_TEMP_1 == 4
+# define BOOST_PP_SLOT_2_DIGIT_1 4
+# elif BOOST_PP_SLOT_TEMP_1 == 5
+# define BOOST_PP_SLOT_2_DIGIT_1 5
+# elif BOOST_PP_SLOT_TEMP_1 == 6
+# define BOOST_PP_SLOT_2_DIGIT_1 6
+# elif BOOST_PP_SLOT_TEMP_1 == 7
+# define BOOST_PP_SLOT_2_DIGIT_1 7
+# elif BOOST_PP_SLOT_TEMP_1 == 8
+# define BOOST_PP_SLOT_2_DIGIT_1 8
+# elif BOOST_PP_SLOT_TEMP_1 == 9
+# define BOOST_PP_SLOT_2_DIGIT_1 9
+# endif
+#
+# if BOOST_PP_SLOT_2_DIGIT_10
+# define BOOST_PP_SLOT_2() BOOST_PP_SLOT_CC_10(BOOST_PP_SLOT_2_DIGIT_10, BOOST_PP_SLOT_2_DIGIT_9, BOOST_PP_SLOT_2_DIGIT_8, BOOST_PP_SLOT_2_DIGIT_7, BOOST_PP_SLOT_2_DIGIT_6, BOOST_PP_SLOT_2_DIGIT_5, BOOST_PP_SLOT_2_DIGIT_4, BOOST_PP_SLOT_2_DIGIT_3, BOOST_PP_SLOT_2_DIGIT_2, BOOST_PP_SLOT_2_DIGIT_1)
+# elif BOOST_PP_SLOT_2_DIGIT_9
+# define BOOST_PP_SLOT_2() BOOST_PP_SLOT_CC_9(BOOST_PP_SLOT_2_DIGIT_9, BOOST_PP_SLOT_2_DIGIT_8, BOOST_PP_SLOT_2_DIGIT_7, BOOST_PP_SLOT_2_DIGIT_6, BOOST_PP_SLOT_2_DIGIT_5, BOOST_PP_SLOT_2_DIGIT_4, BOOST_PP_SLOT_2_DIGIT_3, BOOST_PP_SLOT_2_DIGIT_2, BOOST_PP_SLOT_2_DIGIT_1)
+# elif BOOST_PP_SLOT_2_DIGIT_8
+# define BOOST_PP_SLOT_2() BOOST_PP_SLOT_CC_8(BOOST_PP_SLOT_2_DIGIT_8, BOOST_PP_SLOT_2_DIGIT_7, BOOST_PP_SLOT_2_DIGIT_6, BOOST_PP_SLOT_2_DIGIT_5, BOOST_PP_SLOT_2_DIGIT_4, BOOST_PP_SLOT_2_DIGIT_3, BOOST_PP_SLOT_2_DIGIT_2, BOOST_PP_SLOT_2_DIGIT_1)
+# elif BOOST_PP_SLOT_2_DIGIT_7
+# define BOOST_PP_SLOT_2() BOOST_PP_SLOT_CC_7(BOOST_PP_SLOT_2_DIGIT_7, BOOST_PP_SLOT_2_DIGIT_6, BOOST_PP_SLOT_2_DIGIT_5, BOOST_PP_SLOT_2_DIGIT_4, BOOST_PP_SLOT_2_DIGIT_3, BOOST_PP_SLOT_2_DIGIT_2, BOOST_PP_SLOT_2_DIGIT_1)
+# elif BOOST_PP_SLOT_2_DIGIT_6
+# define BOOST_PP_SLOT_2() BOOST_PP_SLOT_CC_6(BOOST_PP_SLOT_2_DIGIT_6, BOOST_PP_SLOT_2_DIGIT_5, BOOST_PP_SLOT_2_DIGIT_4, BOOST_PP_SLOT_2_DIGIT_3, BOOST_PP_SLOT_2_DIGIT_2, BOOST_PP_SLOT_2_DIGIT_1)
+# elif BOOST_PP_SLOT_2_DIGIT_5
+# define BOOST_PP_SLOT_2() BOOST_PP_SLOT_CC_5(BOOST_PP_SLOT_2_DIGIT_5, BOOST_PP_SLOT_2_DIGIT_4, BOOST_PP_SLOT_2_DIGIT_3, BOOST_PP_SLOT_2_DIGIT_2, BOOST_PP_SLOT_2_DIGIT_1)
+# elif BOOST_PP_SLOT_2_DIGIT_4
+# define BOOST_PP_SLOT_2() BOOST_PP_SLOT_CC_4(BOOST_PP_SLOT_2_DIGIT_4, BOOST_PP_SLOT_2_DIGIT_3, BOOST_PP_SLOT_2_DIGIT_2, BOOST_PP_SLOT_2_DIGIT_1)
+# elif BOOST_PP_SLOT_2_DIGIT_3
+# define BOOST_PP_SLOT_2() BOOST_PP_SLOT_CC_3(BOOST_PP_SLOT_2_DIGIT_3, BOOST_PP_SLOT_2_DIGIT_2, BOOST_PP_SLOT_2_DIGIT_1)
+# elif BOOST_PP_SLOT_2_DIGIT_2
+# define BOOST_PP_SLOT_2() BOOST_PP_SLOT_CC_2(BOOST_PP_SLOT_2_DIGIT_2, BOOST_PP_SLOT_2_DIGIT_1)
+# else
+# define BOOST_PP_SLOT_2() BOOST_PP_SLOT_2_DIGIT_1
+# endif
diff --git a/boost/boost/preprocessor/slot/detail/slot3.hpp b/boost/boost/preprocessor/slot/detail/slot3.hpp
new file mode 100644
index 00000000000..005cf219005
--- /dev/null
+++ b/boost/boost/preprocessor/slot/detail/slot3.hpp
@@ -0,0 +1,267 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# include <boost/preprocessor/slot/detail/shared.hpp>
+#
+# undef BOOST_PP_SLOT_3
+#
+# undef BOOST_PP_SLOT_3_DIGIT_1
+# undef BOOST_PP_SLOT_3_DIGIT_2
+# undef BOOST_PP_SLOT_3_DIGIT_3
+# undef BOOST_PP_SLOT_3_DIGIT_4
+# undef BOOST_PP_SLOT_3_DIGIT_5
+# undef BOOST_PP_SLOT_3_DIGIT_6
+# undef BOOST_PP_SLOT_3_DIGIT_7
+# undef BOOST_PP_SLOT_3_DIGIT_8
+# undef BOOST_PP_SLOT_3_DIGIT_9
+# undef BOOST_PP_SLOT_3_DIGIT_10
+#
+# if BOOST_PP_SLOT_TEMP_10 == 0
+# define BOOST_PP_SLOT_3_DIGIT_10 0
+# elif BOOST_PP_SLOT_TEMP_10 == 1
+# define BOOST_PP_SLOT_3_DIGIT_10 1
+# elif BOOST_PP_SLOT_TEMP_10 == 2
+# define BOOST_PP_SLOT_3_DIGIT_10 2
+# elif BOOST_PP_SLOT_TEMP_10 == 3
+# define BOOST_PP_SLOT_3_DIGIT_10 3
+# elif BOOST_PP_SLOT_TEMP_10 == 4
+# define BOOST_PP_SLOT_3_DIGIT_10 4
+# elif BOOST_PP_SLOT_TEMP_10 == 5
+# define BOOST_PP_SLOT_3_DIGIT_10 5
+# elif BOOST_PP_SLOT_TEMP_10 == 6
+# define BOOST_PP_SLOT_3_DIGIT_10 6
+# elif BOOST_PP_SLOT_TEMP_10 == 7
+# define BOOST_PP_SLOT_3_DIGIT_10 7
+# elif BOOST_PP_SLOT_TEMP_10 == 8
+# define BOOST_PP_SLOT_3_DIGIT_10 8
+# elif BOOST_PP_SLOT_TEMP_10 == 9
+# define BOOST_PP_SLOT_3_DIGIT_10 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_9 == 0
+# define BOOST_PP_SLOT_3_DIGIT_9 0
+# elif BOOST_PP_SLOT_TEMP_9 == 1
+# define BOOST_PP_SLOT_3_DIGIT_9 1
+# elif BOOST_PP_SLOT_TEMP_9 == 2
+# define BOOST_PP_SLOT_3_DIGIT_9 2
+# elif BOOST_PP_SLOT_TEMP_9 == 3
+# define BOOST_PP_SLOT_3_DIGIT_9 3
+# elif BOOST_PP_SLOT_TEMP_9 == 4
+# define BOOST_PP_SLOT_3_DIGIT_9 4
+# elif BOOST_PP_SLOT_TEMP_9 == 5
+# define BOOST_PP_SLOT_3_DIGIT_9 5
+# elif BOOST_PP_SLOT_TEMP_9 == 6
+# define BOOST_PP_SLOT_3_DIGIT_9 6
+# elif BOOST_PP_SLOT_TEMP_9 == 7
+# define BOOST_PP_SLOT_3_DIGIT_9 7
+# elif BOOST_PP_SLOT_TEMP_9 == 8
+# define BOOST_PP_SLOT_3_DIGIT_9 8
+# elif BOOST_PP_SLOT_TEMP_9 == 9
+# define BOOST_PP_SLOT_3_DIGIT_9 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_8 == 0
+# define BOOST_PP_SLOT_3_DIGIT_8 0
+# elif BOOST_PP_SLOT_TEMP_8 == 1
+# define BOOST_PP_SLOT_3_DIGIT_8 1
+# elif BOOST_PP_SLOT_TEMP_8 == 2
+# define BOOST_PP_SLOT_3_DIGIT_8 2
+# elif BOOST_PP_SLOT_TEMP_8 == 3
+# define BOOST_PP_SLOT_3_DIGIT_8 3
+# elif BOOST_PP_SLOT_TEMP_8 == 4
+# define BOOST_PP_SLOT_3_DIGIT_8 4
+# elif BOOST_PP_SLOT_TEMP_8 == 5
+# define BOOST_PP_SLOT_3_DIGIT_8 5
+# elif BOOST_PP_SLOT_TEMP_8 == 6
+# define BOOST_PP_SLOT_3_DIGIT_8 6
+# elif BOOST_PP_SLOT_TEMP_8 == 7
+# define BOOST_PP_SLOT_3_DIGIT_8 7
+# elif BOOST_PP_SLOT_TEMP_8 == 8
+# define BOOST_PP_SLOT_3_DIGIT_8 8
+# elif BOOST_PP_SLOT_TEMP_8 == 9
+# define BOOST_PP_SLOT_3_DIGIT_8 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_7 == 0
+# define BOOST_PP_SLOT_3_DIGIT_7 0
+# elif BOOST_PP_SLOT_TEMP_7 == 1
+# define BOOST_PP_SLOT_3_DIGIT_7 1
+# elif BOOST_PP_SLOT_TEMP_7 == 2
+# define BOOST_PP_SLOT_3_DIGIT_7 2
+# elif BOOST_PP_SLOT_TEMP_7 == 3
+# define BOOST_PP_SLOT_3_DIGIT_7 3
+# elif BOOST_PP_SLOT_TEMP_7 == 4
+# define BOOST_PP_SLOT_3_DIGIT_7 4
+# elif BOOST_PP_SLOT_TEMP_7 == 5
+# define BOOST_PP_SLOT_3_DIGIT_7 5
+# elif BOOST_PP_SLOT_TEMP_7 == 6
+# define BOOST_PP_SLOT_3_DIGIT_7 6
+# elif BOOST_PP_SLOT_TEMP_7 == 7
+# define BOOST_PP_SLOT_3_DIGIT_7 7
+# elif BOOST_PP_SLOT_TEMP_7 == 8
+# define BOOST_PP_SLOT_3_DIGIT_7 8
+# elif BOOST_PP_SLOT_TEMP_7 == 9
+# define BOOST_PP_SLOT_3_DIGIT_7 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_6 == 0
+# define BOOST_PP_SLOT_3_DIGIT_6 0
+# elif BOOST_PP_SLOT_TEMP_6 == 1
+# define BOOST_PP_SLOT_3_DIGIT_6 1
+# elif BOOST_PP_SLOT_TEMP_6 == 2
+# define BOOST_PP_SLOT_3_DIGIT_6 2
+# elif BOOST_PP_SLOT_TEMP_6 == 3
+# define BOOST_PP_SLOT_3_DIGIT_6 3
+# elif BOOST_PP_SLOT_TEMP_6 == 4
+# define BOOST_PP_SLOT_3_DIGIT_6 4
+# elif BOOST_PP_SLOT_TEMP_6 == 5
+# define BOOST_PP_SLOT_3_DIGIT_6 5
+# elif BOOST_PP_SLOT_TEMP_6 == 6
+# define BOOST_PP_SLOT_3_DIGIT_6 6
+# elif BOOST_PP_SLOT_TEMP_6 == 7
+# define BOOST_PP_SLOT_3_DIGIT_6 7
+# elif BOOST_PP_SLOT_TEMP_6 == 8
+# define BOOST_PP_SLOT_3_DIGIT_6 8
+# elif BOOST_PP_SLOT_TEMP_6 == 9
+# define BOOST_PP_SLOT_3_DIGIT_6 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_5 == 0
+# define BOOST_PP_SLOT_3_DIGIT_5 0
+# elif BOOST_PP_SLOT_TEMP_5 == 1
+# define BOOST_PP_SLOT_3_DIGIT_5 1
+# elif BOOST_PP_SLOT_TEMP_5 == 2
+# define BOOST_PP_SLOT_3_DIGIT_5 2
+# elif BOOST_PP_SLOT_TEMP_5 == 3
+# define BOOST_PP_SLOT_3_DIGIT_5 3
+# elif BOOST_PP_SLOT_TEMP_5 == 4
+# define BOOST_PP_SLOT_3_DIGIT_5 4
+# elif BOOST_PP_SLOT_TEMP_5 == 5
+# define BOOST_PP_SLOT_3_DIGIT_5 5
+# elif BOOST_PP_SLOT_TEMP_5 == 6
+# define BOOST_PP_SLOT_3_DIGIT_5 6
+# elif BOOST_PP_SLOT_TEMP_5 == 7
+# define BOOST_PP_SLOT_3_DIGIT_5 7
+# elif BOOST_PP_SLOT_TEMP_5 == 8
+# define BOOST_PP_SLOT_3_DIGIT_5 8
+# elif BOOST_PP_SLOT_TEMP_5 == 9
+# define BOOST_PP_SLOT_3_DIGIT_5 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_4 == 0
+# define BOOST_PP_SLOT_3_DIGIT_4 0
+# elif BOOST_PP_SLOT_TEMP_4 == 1
+# define BOOST_PP_SLOT_3_DIGIT_4 1
+# elif BOOST_PP_SLOT_TEMP_4 == 2
+# define BOOST_PP_SLOT_3_DIGIT_4 2
+# elif BOOST_PP_SLOT_TEMP_4 == 3
+# define BOOST_PP_SLOT_3_DIGIT_4 3
+# elif BOOST_PP_SLOT_TEMP_4 == 4
+# define BOOST_PP_SLOT_3_DIGIT_4 4
+# elif BOOST_PP_SLOT_TEMP_4 == 5
+# define BOOST_PP_SLOT_3_DIGIT_4 5
+# elif BOOST_PP_SLOT_TEMP_4 == 6
+# define BOOST_PP_SLOT_3_DIGIT_4 6
+# elif BOOST_PP_SLOT_TEMP_4 == 7
+# define BOOST_PP_SLOT_3_DIGIT_4 7
+# elif BOOST_PP_SLOT_TEMP_4 == 8
+# define BOOST_PP_SLOT_3_DIGIT_4 8
+# elif BOOST_PP_SLOT_TEMP_4 == 9
+# define BOOST_PP_SLOT_3_DIGIT_4 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_3 == 0
+# define BOOST_PP_SLOT_3_DIGIT_3 0
+# elif BOOST_PP_SLOT_TEMP_3 == 1
+# define BOOST_PP_SLOT_3_DIGIT_3 1
+# elif BOOST_PP_SLOT_TEMP_3 == 2
+# define BOOST_PP_SLOT_3_DIGIT_3 2
+# elif BOOST_PP_SLOT_TEMP_3 == 3
+# define BOOST_PP_SLOT_3_DIGIT_3 3
+# elif BOOST_PP_SLOT_TEMP_3 == 4
+# define BOOST_PP_SLOT_3_DIGIT_3 4
+# elif BOOST_PP_SLOT_TEMP_3 == 5
+# define BOOST_PP_SLOT_3_DIGIT_3 5
+# elif BOOST_PP_SLOT_TEMP_3 == 6
+# define BOOST_PP_SLOT_3_DIGIT_3 6
+# elif BOOST_PP_SLOT_TEMP_3 == 7
+# define BOOST_PP_SLOT_3_DIGIT_3 7
+# elif BOOST_PP_SLOT_TEMP_3 == 8
+# define BOOST_PP_SLOT_3_DIGIT_3 8
+# elif BOOST_PP_SLOT_TEMP_3 == 9
+# define BOOST_PP_SLOT_3_DIGIT_3 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_2 == 0
+# define BOOST_PP_SLOT_3_DIGIT_2 0
+# elif BOOST_PP_SLOT_TEMP_2 == 1
+# define BOOST_PP_SLOT_3_DIGIT_2 1
+# elif BOOST_PP_SLOT_TEMP_2 == 2
+# define BOOST_PP_SLOT_3_DIGIT_2 2
+# elif BOOST_PP_SLOT_TEMP_2 == 3
+# define BOOST_PP_SLOT_3_DIGIT_2 3
+# elif BOOST_PP_SLOT_TEMP_2 == 4
+# define BOOST_PP_SLOT_3_DIGIT_2 4
+# elif BOOST_PP_SLOT_TEMP_2 == 5
+# define BOOST_PP_SLOT_3_DIGIT_2 5
+# elif BOOST_PP_SLOT_TEMP_2 == 6
+# define BOOST_PP_SLOT_3_DIGIT_2 6
+# elif BOOST_PP_SLOT_TEMP_2 == 7
+# define BOOST_PP_SLOT_3_DIGIT_2 7
+# elif BOOST_PP_SLOT_TEMP_2 == 8
+# define BOOST_PP_SLOT_3_DIGIT_2 8
+# elif BOOST_PP_SLOT_TEMP_2 == 9
+# define BOOST_PP_SLOT_3_DIGIT_2 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_1 == 0
+# define BOOST_PP_SLOT_3_DIGIT_1 0
+# elif BOOST_PP_SLOT_TEMP_1 == 1
+# define BOOST_PP_SLOT_3_DIGIT_1 1
+# elif BOOST_PP_SLOT_TEMP_1 == 2
+# define BOOST_PP_SLOT_3_DIGIT_1 2
+# elif BOOST_PP_SLOT_TEMP_1 == 3
+# define BOOST_PP_SLOT_3_DIGIT_1 3
+# elif BOOST_PP_SLOT_TEMP_1 == 4
+# define BOOST_PP_SLOT_3_DIGIT_1 4
+# elif BOOST_PP_SLOT_TEMP_1 == 5
+# define BOOST_PP_SLOT_3_DIGIT_1 5
+# elif BOOST_PP_SLOT_TEMP_1 == 6
+# define BOOST_PP_SLOT_3_DIGIT_1 6
+# elif BOOST_PP_SLOT_TEMP_1 == 7
+# define BOOST_PP_SLOT_3_DIGIT_1 7
+# elif BOOST_PP_SLOT_TEMP_1 == 8
+# define BOOST_PP_SLOT_3_DIGIT_1 8
+# elif BOOST_PP_SLOT_TEMP_1 == 9
+# define BOOST_PP_SLOT_3_DIGIT_1 9
+# endif
+#
+# if BOOST_PP_SLOT_3_DIGIT_10
+# define BOOST_PP_SLOT_3() BOOST_PP_SLOT_CC_10(BOOST_PP_SLOT_3_DIGIT_10, BOOST_PP_SLOT_3_DIGIT_9, BOOST_PP_SLOT_3_DIGIT_8, BOOST_PP_SLOT_3_DIGIT_7, BOOST_PP_SLOT_3_DIGIT_6, BOOST_PP_SLOT_3_DIGIT_5, BOOST_PP_SLOT_3_DIGIT_4, BOOST_PP_SLOT_3_DIGIT_3, BOOST_PP_SLOT_3_DIGIT_2, BOOST_PP_SLOT_3_DIGIT_1)
+# elif BOOST_PP_SLOT_3_DIGIT_9
+# define BOOST_PP_SLOT_3() BOOST_PP_SLOT_CC_9(BOOST_PP_SLOT_3_DIGIT_9, BOOST_PP_SLOT_3_DIGIT_8, BOOST_PP_SLOT_3_DIGIT_7, BOOST_PP_SLOT_3_DIGIT_6, BOOST_PP_SLOT_3_DIGIT_5, BOOST_PP_SLOT_3_DIGIT_4, BOOST_PP_SLOT_3_DIGIT_3, BOOST_PP_SLOT_3_DIGIT_2, BOOST_PP_SLOT_3_DIGIT_1)
+# elif BOOST_PP_SLOT_3_DIGIT_8
+# define BOOST_PP_SLOT_3() BOOST_PP_SLOT_CC_8(BOOST_PP_SLOT_3_DIGIT_8, BOOST_PP_SLOT_3_DIGIT_7, BOOST_PP_SLOT_3_DIGIT_6, BOOST_PP_SLOT_3_DIGIT_5, BOOST_PP_SLOT_3_DIGIT_4, BOOST_PP_SLOT_3_DIGIT_3, BOOST_PP_SLOT_3_DIGIT_2, BOOST_PP_SLOT_3_DIGIT_1)
+# elif BOOST_PP_SLOT_3_DIGIT_7
+# define BOOST_PP_SLOT_3() BOOST_PP_SLOT_CC_7(BOOST_PP_SLOT_3_DIGIT_7, BOOST_PP_SLOT_3_DIGIT_6, BOOST_PP_SLOT_3_DIGIT_5, BOOST_PP_SLOT_3_DIGIT_4, BOOST_PP_SLOT_3_DIGIT_3, BOOST_PP_SLOT_3_DIGIT_2, BOOST_PP_SLOT_3_DIGIT_1)
+# elif BOOST_PP_SLOT_3_DIGIT_6
+# define BOOST_PP_SLOT_3() BOOST_PP_SLOT_CC_6(BOOST_PP_SLOT_3_DIGIT_6, BOOST_PP_SLOT_3_DIGIT_5, BOOST_PP_SLOT_3_DIGIT_4, BOOST_PP_SLOT_3_DIGIT_3, BOOST_PP_SLOT_3_DIGIT_2, BOOST_PP_SLOT_3_DIGIT_1)
+# elif BOOST_PP_SLOT_3_DIGIT_5
+# define BOOST_PP_SLOT_3() BOOST_PP_SLOT_CC_5(BOOST_PP_SLOT_3_DIGIT_5, BOOST_PP_SLOT_3_DIGIT_4, BOOST_PP_SLOT_3_DIGIT_3, BOOST_PP_SLOT_3_DIGIT_2, BOOST_PP_SLOT_3_DIGIT_1)
+# elif BOOST_PP_SLOT_3_DIGIT_4
+# define BOOST_PP_SLOT_3() BOOST_PP_SLOT_CC_4(BOOST_PP_SLOT_3_DIGIT_4, BOOST_PP_SLOT_3_DIGIT_3, BOOST_PP_SLOT_3_DIGIT_2, BOOST_PP_SLOT_3_DIGIT_1)
+# elif BOOST_PP_SLOT_3_DIGIT_3
+# define BOOST_PP_SLOT_3() BOOST_PP_SLOT_CC_3(BOOST_PP_SLOT_3_DIGIT_3, BOOST_PP_SLOT_3_DIGIT_2, BOOST_PP_SLOT_3_DIGIT_1)
+# elif BOOST_PP_SLOT_3_DIGIT_2
+# define BOOST_PP_SLOT_3() BOOST_PP_SLOT_CC_2(BOOST_PP_SLOT_3_DIGIT_2, BOOST_PP_SLOT_3_DIGIT_1)
+# else
+# define BOOST_PP_SLOT_3() BOOST_PP_SLOT_3_DIGIT_1
+# endif
diff --git a/boost/boost/preprocessor/slot/detail/slot4.hpp b/boost/boost/preprocessor/slot/detail/slot4.hpp
new file mode 100644
index 00000000000..9aa4d8ab8d9
--- /dev/null
+++ b/boost/boost/preprocessor/slot/detail/slot4.hpp
@@ -0,0 +1,267 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# include <boost/preprocessor/slot/detail/shared.hpp>
+#
+# undef BOOST_PP_SLOT_4
+#
+# undef BOOST_PP_SLOT_4_DIGIT_1
+# undef BOOST_PP_SLOT_4_DIGIT_2
+# undef BOOST_PP_SLOT_4_DIGIT_3
+# undef BOOST_PP_SLOT_4_DIGIT_4
+# undef BOOST_PP_SLOT_4_DIGIT_5
+# undef BOOST_PP_SLOT_4_DIGIT_6
+# undef BOOST_PP_SLOT_4_DIGIT_7
+# undef BOOST_PP_SLOT_4_DIGIT_8
+# undef BOOST_PP_SLOT_4_DIGIT_9
+# undef BOOST_PP_SLOT_4_DIGIT_10
+#
+# if BOOST_PP_SLOT_TEMP_10 == 0
+# define BOOST_PP_SLOT_4_DIGIT_10 0
+# elif BOOST_PP_SLOT_TEMP_10 == 1
+# define BOOST_PP_SLOT_4_DIGIT_10 1
+# elif BOOST_PP_SLOT_TEMP_10 == 2
+# define BOOST_PP_SLOT_4_DIGIT_10 2
+# elif BOOST_PP_SLOT_TEMP_10 == 3
+# define BOOST_PP_SLOT_4_DIGIT_10 3
+# elif BOOST_PP_SLOT_TEMP_10 == 4
+# define BOOST_PP_SLOT_4_DIGIT_10 4
+# elif BOOST_PP_SLOT_TEMP_10 == 5
+# define BOOST_PP_SLOT_4_DIGIT_10 5
+# elif BOOST_PP_SLOT_TEMP_10 == 6
+# define BOOST_PP_SLOT_4_DIGIT_10 6
+# elif BOOST_PP_SLOT_TEMP_10 == 7
+# define BOOST_PP_SLOT_4_DIGIT_10 7
+# elif BOOST_PP_SLOT_TEMP_10 == 8
+# define BOOST_PP_SLOT_4_DIGIT_10 8
+# elif BOOST_PP_SLOT_TEMP_10 == 9
+# define BOOST_PP_SLOT_4_DIGIT_10 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_9 == 0
+# define BOOST_PP_SLOT_4_DIGIT_9 0
+# elif BOOST_PP_SLOT_TEMP_9 == 1
+# define BOOST_PP_SLOT_4_DIGIT_9 1
+# elif BOOST_PP_SLOT_TEMP_9 == 2
+# define BOOST_PP_SLOT_4_DIGIT_9 2
+# elif BOOST_PP_SLOT_TEMP_9 == 3
+# define BOOST_PP_SLOT_4_DIGIT_9 3
+# elif BOOST_PP_SLOT_TEMP_9 == 4
+# define BOOST_PP_SLOT_4_DIGIT_9 4
+# elif BOOST_PP_SLOT_TEMP_9 == 5
+# define BOOST_PP_SLOT_4_DIGIT_9 5
+# elif BOOST_PP_SLOT_TEMP_9 == 6
+# define BOOST_PP_SLOT_4_DIGIT_9 6
+# elif BOOST_PP_SLOT_TEMP_9 == 7
+# define BOOST_PP_SLOT_4_DIGIT_9 7
+# elif BOOST_PP_SLOT_TEMP_9 == 8
+# define BOOST_PP_SLOT_4_DIGIT_9 8
+# elif BOOST_PP_SLOT_TEMP_9 == 9
+# define BOOST_PP_SLOT_4_DIGIT_9 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_8 == 0
+# define BOOST_PP_SLOT_4_DIGIT_8 0
+# elif BOOST_PP_SLOT_TEMP_8 == 1
+# define BOOST_PP_SLOT_4_DIGIT_8 1
+# elif BOOST_PP_SLOT_TEMP_8 == 2
+# define BOOST_PP_SLOT_4_DIGIT_8 2
+# elif BOOST_PP_SLOT_TEMP_8 == 3
+# define BOOST_PP_SLOT_4_DIGIT_8 3
+# elif BOOST_PP_SLOT_TEMP_8 == 4
+# define BOOST_PP_SLOT_4_DIGIT_8 4
+# elif BOOST_PP_SLOT_TEMP_8 == 5
+# define BOOST_PP_SLOT_4_DIGIT_8 5
+# elif BOOST_PP_SLOT_TEMP_8 == 6
+# define BOOST_PP_SLOT_4_DIGIT_8 6
+# elif BOOST_PP_SLOT_TEMP_8 == 7
+# define BOOST_PP_SLOT_4_DIGIT_8 7
+# elif BOOST_PP_SLOT_TEMP_8 == 8
+# define BOOST_PP_SLOT_4_DIGIT_8 8
+# elif BOOST_PP_SLOT_TEMP_8 == 9
+# define BOOST_PP_SLOT_4_DIGIT_8 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_7 == 0
+# define BOOST_PP_SLOT_4_DIGIT_7 0
+# elif BOOST_PP_SLOT_TEMP_7 == 1
+# define BOOST_PP_SLOT_4_DIGIT_7 1
+# elif BOOST_PP_SLOT_TEMP_7 == 2
+# define BOOST_PP_SLOT_4_DIGIT_7 2
+# elif BOOST_PP_SLOT_TEMP_7 == 3
+# define BOOST_PP_SLOT_4_DIGIT_7 3
+# elif BOOST_PP_SLOT_TEMP_7 == 4
+# define BOOST_PP_SLOT_4_DIGIT_7 4
+# elif BOOST_PP_SLOT_TEMP_7 == 5
+# define BOOST_PP_SLOT_4_DIGIT_7 5
+# elif BOOST_PP_SLOT_TEMP_7 == 6
+# define BOOST_PP_SLOT_4_DIGIT_7 6
+# elif BOOST_PP_SLOT_TEMP_7 == 7
+# define BOOST_PP_SLOT_4_DIGIT_7 7
+# elif BOOST_PP_SLOT_TEMP_7 == 8
+# define BOOST_PP_SLOT_4_DIGIT_7 8
+# elif BOOST_PP_SLOT_TEMP_7 == 9
+# define BOOST_PP_SLOT_4_DIGIT_7 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_6 == 0
+# define BOOST_PP_SLOT_4_DIGIT_6 0
+# elif BOOST_PP_SLOT_TEMP_6 == 1
+# define BOOST_PP_SLOT_4_DIGIT_6 1
+# elif BOOST_PP_SLOT_TEMP_6 == 2
+# define BOOST_PP_SLOT_4_DIGIT_6 2
+# elif BOOST_PP_SLOT_TEMP_6 == 3
+# define BOOST_PP_SLOT_4_DIGIT_6 3
+# elif BOOST_PP_SLOT_TEMP_6 == 4
+# define BOOST_PP_SLOT_4_DIGIT_6 4
+# elif BOOST_PP_SLOT_TEMP_6 == 5
+# define BOOST_PP_SLOT_4_DIGIT_6 5
+# elif BOOST_PP_SLOT_TEMP_6 == 6
+# define BOOST_PP_SLOT_4_DIGIT_6 6
+# elif BOOST_PP_SLOT_TEMP_6 == 7
+# define BOOST_PP_SLOT_4_DIGIT_6 7
+# elif BOOST_PP_SLOT_TEMP_6 == 8
+# define BOOST_PP_SLOT_4_DIGIT_6 8
+# elif BOOST_PP_SLOT_TEMP_6 == 9
+# define BOOST_PP_SLOT_4_DIGIT_6 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_5 == 0
+# define BOOST_PP_SLOT_4_DIGIT_5 0
+# elif BOOST_PP_SLOT_TEMP_5 == 1
+# define BOOST_PP_SLOT_4_DIGIT_5 1
+# elif BOOST_PP_SLOT_TEMP_5 == 2
+# define BOOST_PP_SLOT_4_DIGIT_5 2
+# elif BOOST_PP_SLOT_TEMP_5 == 3
+# define BOOST_PP_SLOT_4_DIGIT_5 3
+# elif BOOST_PP_SLOT_TEMP_5 == 4
+# define BOOST_PP_SLOT_4_DIGIT_5 4
+# elif BOOST_PP_SLOT_TEMP_5 == 5
+# define BOOST_PP_SLOT_4_DIGIT_5 5
+# elif BOOST_PP_SLOT_TEMP_5 == 6
+# define BOOST_PP_SLOT_4_DIGIT_5 6
+# elif BOOST_PP_SLOT_TEMP_5 == 7
+# define BOOST_PP_SLOT_4_DIGIT_5 7
+# elif BOOST_PP_SLOT_TEMP_5 == 8
+# define BOOST_PP_SLOT_4_DIGIT_5 8
+# elif BOOST_PP_SLOT_TEMP_5 == 9
+# define BOOST_PP_SLOT_4_DIGIT_5 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_4 == 0
+# define BOOST_PP_SLOT_4_DIGIT_4 0
+# elif BOOST_PP_SLOT_TEMP_4 == 1
+# define BOOST_PP_SLOT_4_DIGIT_4 1
+# elif BOOST_PP_SLOT_TEMP_4 == 2
+# define BOOST_PP_SLOT_4_DIGIT_4 2
+# elif BOOST_PP_SLOT_TEMP_4 == 3
+# define BOOST_PP_SLOT_4_DIGIT_4 3
+# elif BOOST_PP_SLOT_TEMP_4 == 4
+# define BOOST_PP_SLOT_4_DIGIT_4 4
+# elif BOOST_PP_SLOT_TEMP_4 == 5
+# define BOOST_PP_SLOT_4_DIGIT_4 5
+# elif BOOST_PP_SLOT_TEMP_4 == 6
+# define BOOST_PP_SLOT_4_DIGIT_4 6
+# elif BOOST_PP_SLOT_TEMP_4 == 7
+# define BOOST_PP_SLOT_4_DIGIT_4 7
+# elif BOOST_PP_SLOT_TEMP_4 == 8
+# define BOOST_PP_SLOT_4_DIGIT_4 8
+# elif BOOST_PP_SLOT_TEMP_4 == 9
+# define BOOST_PP_SLOT_4_DIGIT_4 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_3 == 0
+# define BOOST_PP_SLOT_4_DIGIT_3 0
+# elif BOOST_PP_SLOT_TEMP_3 == 1
+# define BOOST_PP_SLOT_4_DIGIT_3 1
+# elif BOOST_PP_SLOT_TEMP_3 == 2
+# define BOOST_PP_SLOT_4_DIGIT_3 2
+# elif BOOST_PP_SLOT_TEMP_3 == 3
+# define BOOST_PP_SLOT_4_DIGIT_3 3
+# elif BOOST_PP_SLOT_TEMP_3 == 4
+# define BOOST_PP_SLOT_4_DIGIT_3 4
+# elif BOOST_PP_SLOT_TEMP_3 == 5
+# define BOOST_PP_SLOT_4_DIGIT_3 5
+# elif BOOST_PP_SLOT_TEMP_3 == 6
+# define BOOST_PP_SLOT_4_DIGIT_3 6
+# elif BOOST_PP_SLOT_TEMP_3 == 7
+# define BOOST_PP_SLOT_4_DIGIT_3 7
+# elif BOOST_PP_SLOT_TEMP_3 == 8
+# define BOOST_PP_SLOT_4_DIGIT_3 8
+# elif BOOST_PP_SLOT_TEMP_3 == 9
+# define BOOST_PP_SLOT_4_DIGIT_3 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_2 == 0
+# define BOOST_PP_SLOT_4_DIGIT_2 0
+# elif BOOST_PP_SLOT_TEMP_2 == 1
+# define BOOST_PP_SLOT_4_DIGIT_2 1
+# elif BOOST_PP_SLOT_TEMP_2 == 2
+# define BOOST_PP_SLOT_4_DIGIT_2 2
+# elif BOOST_PP_SLOT_TEMP_2 == 3
+# define BOOST_PP_SLOT_4_DIGIT_2 3
+# elif BOOST_PP_SLOT_TEMP_2 == 4
+# define BOOST_PP_SLOT_4_DIGIT_2 4
+# elif BOOST_PP_SLOT_TEMP_2 == 5
+# define BOOST_PP_SLOT_4_DIGIT_2 5
+# elif BOOST_PP_SLOT_TEMP_2 == 6
+# define BOOST_PP_SLOT_4_DIGIT_2 6
+# elif BOOST_PP_SLOT_TEMP_2 == 7
+# define BOOST_PP_SLOT_4_DIGIT_2 7
+# elif BOOST_PP_SLOT_TEMP_2 == 8
+# define BOOST_PP_SLOT_4_DIGIT_2 8
+# elif BOOST_PP_SLOT_TEMP_2 == 9
+# define BOOST_PP_SLOT_4_DIGIT_2 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_1 == 0
+# define BOOST_PP_SLOT_4_DIGIT_1 0
+# elif BOOST_PP_SLOT_TEMP_1 == 1
+# define BOOST_PP_SLOT_4_DIGIT_1 1
+# elif BOOST_PP_SLOT_TEMP_1 == 2
+# define BOOST_PP_SLOT_4_DIGIT_1 2
+# elif BOOST_PP_SLOT_TEMP_1 == 3
+# define BOOST_PP_SLOT_4_DIGIT_1 3
+# elif BOOST_PP_SLOT_TEMP_1 == 4
+# define BOOST_PP_SLOT_4_DIGIT_1 4
+# elif BOOST_PP_SLOT_TEMP_1 == 5
+# define BOOST_PP_SLOT_4_DIGIT_1 5
+# elif BOOST_PP_SLOT_TEMP_1 == 6
+# define BOOST_PP_SLOT_4_DIGIT_1 6
+# elif BOOST_PP_SLOT_TEMP_1 == 7
+# define BOOST_PP_SLOT_4_DIGIT_1 7
+# elif BOOST_PP_SLOT_TEMP_1 == 8
+# define BOOST_PP_SLOT_4_DIGIT_1 8
+# elif BOOST_PP_SLOT_TEMP_1 == 9
+# define BOOST_PP_SLOT_4_DIGIT_1 9
+# endif
+#
+# if BOOST_PP_SLOT_4_DIGIT_10
+# define BOOST_PP_SLOT_4() BOOST_PP_SLOT_CC_10(BOOST_PP_SLOT_4_DIGIT_10, BOOST_PP_SLOT_4_DIGIT_9, BOOST_PP_SLOT_4_DIGIT_8, BOOST_PP_SLOT_4_DIGIT_7, BOOST_PP_SLOT_4_DIGIT_6, BOOST_PP_SLOT_4_DIGIT_5, BOOST_PP_SLOT_4_DIGIT_4, BOOST_PP_SLOT_4_DIGIT_3, BOOST_PP_SLOT_4_DIGIT_2, BOOST_PP_SLOT_4_DIGIT_1)
+# elif BOOST_PP_SLOT_4_DIGIT_9
+# define BOOST_PP_SLOT_4() BOOST_PP_SLOT_CC_9(BOOST_PP_SLOT_4_DIGIT_9, BOOST_PP_SLOT_4_DIGIT_8, BOOST_PP_SLOT_4_DIGIT_7, BOOST_PP_SLOT_4_DIGIT_6, BOOST_PP_SLOT_4_DIGIT_5, BOOST_PP_SLOT_4_DIGIT_4, BOOST_PP_SLOT_4_DIGIT_3, BOOST_PP_SLOT_4_DIGIT_2, BOOST_PP_SLOT_4_DIGIT_1)
+# elif BOOST_PP_SLOT_4_DIGIT_8
+# define BOOST_PP_SLOT_4() BOOST_PP_SLOT_CC_8(BOOST_PP_SLOT_4_DIGIT_8, BOOST_PP_SLOT_4_DIGIT_7, BOOST_PP_SLOT_4_DIGIT_6, BOOST_PP_SLOT_4_DIGIT_5, BOOST_PP_SLOT_4_DIGIT_4, BOOST_PP_SLOT_4_DIGIT_3, BOOST_PP_SLOT_4_DIGIT_2, BOOST_PP_SLOT_4_DIGIT_1)
+# elif BOOST_PP_SLOT_4_DIGIT_7
+# define BOOST_PP_SLOT_4() BOOST_PP_SLOT_CC_7(BOOST_PP_SLOT_4_DIGIT_7, BOOST_PP_SLOT_4_DIGIT_6, BOOST_PP_SLOT_4_DIGIT_5, BOOST_PP_SLOT_4_DIGIT_4, BOOST_PP_SLOT_4_DIGIT_3, BOOST_PP_SLOT_4_DIGIT_2, BOOST_PP_SLOT_4_DIGIT_1)
+# elif BOOST_PP_SLOT_4_DIGIT_6
+# define BOOST_PP_SLOT_4() BOOST_PP_SLOT_CC_6(BOOST_PP_SLOT_4_DIGIT_6, BOOST_PP_SLOT_4_DIGIT_5, BOOST_PP_SLOT_4_DIGIT_4, BOOST_PP_SLOT_4_DIGIT_3, BOOST_PP_SLOT_4_DIGIT_2, BOOST_PP_SLOT_4_DIGIT_1)
+# elif BOOST_PP_SLOT_4_DIGIT_5
+# define BOOST_PP_SLOT_4() BOOST_PP_SLOT_CC_5(BOOST_PP_SLOT_4_DIGIT_5, BOOST_PP_SLOT_4_DIGIT_4, BOOST_PP_SLOT_4_DIGIT_3, BOOST_PP_SLOT_4_DIGIT_2, BOOST_PP_SLOT_4_DIGIT_1)
+# elif BOOST_PP_SLOT_4_DIGIT_4
+# define BOOST_PP_SLOT_4() BOOST_PP_SLOT_CC_4(BOOST_PP_SLOT_4_DIGIT_4, BOOST_PP_SLOT_4_DIGIT_3, BOOST_PP_SLOT_4_DIGIT_2, BOOST_PP_SLOT_4_DIGIT_1)
+# elif BOOST_PP_SLOT_4_DIGIT_3
+# define BOOST_PP_SLOT_4() BOOST_PP_SLOT_CC_3(BOOST_PP_SLOT_4_DIGIT_3, BOOST_PP_SLOT_4_DIGIT_2, BOOST_PP_SLOT_4_DIGIT_1)
+# elif BOOST_PP_SLOT_4_DIGIT_2
+# define BOOST_PP_SLOT_4() BOOST_PP_SLOT_CC_2(BOOST_PP_SLOT_4_DIGIT_2, BOOST_PP_SLOT_4_DIGIT_1)
+# else
+# define BOOST_PP_SLOT_4() BOOST_PP_SLOT_4_DIGIT_1
+# endif
diff --git a/boost/boost/preprocessor/slot/detail/slot5.hpp b/boost/boost/preprocessor/slot/detail/slot5.hpp
new file mode 100644
index 00000000000..d17535daf4b
--- /dev/null
+++ b/boost/boost/preprocessor/slot/detail/slot5.hpp
@@ -0,0 +1,267 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# include <boost/preprocessor/slot/detail/shared.hpp>
+#
+# undef BOOST_PP_SLOT_5
+#
+# undef BOOST_PP_SLOT_5_DIGIT_1
+# undef BOOST_PP_SLOT_5_DIGIT_2
+# undef BOOST_PP_SLOT_5_DIGIT_3
+# undef BOOST_PP_SLOT_5_DIGIT_4
+# undef BOOST_PP_SLOT_5_DIGIT_5
+# undef BOOST_PP_SLOT_5_DIGIT_6
+# undef BOOST_PP_SLOT_5_DIGIT_7
+# undef BOOST_PP_SLOT_5_DIGIT_8
+# undef BOOST_PP_SLOT_5_DIGIT_9
+# undef BOOST_PP_SLOT_5_DIGIT_10
+#
+# if BOOST_PP_SLOT_TEMP_10 == 0
+# define BOOST_PP_SLOT_5_DIGIT_10 0
+# elif BOOST_PP_SLOT_TEMP_10 == 1
+# define BOOST_PP_SLOT_5_DIGIT_10 1
+# elif BOOST_PP_SLOT_TEMP_10 == 2
+# define BOOST_PP_SLOT_5_DIGIT_10 2
+# elif BOOST_PP_SLOT_TEMP_10 == 3
+# define BOOST_PP_SLOT_5_DIGIT_10 3
+# elif BOOST_PP_SLOT_TEMP_10 == 4
+# define BOOST_PP_SLOT_5_DIGIT_10 4
+# elif BOOST_PP_SLOT_TEMP_10 == 5
+# define BOOST_PP_SLOT_5_DIGIT_10 5
+# elif BOOST_PP_SLOT_TEMP_10 == 6
+# define BOOST_PP_SLOT_5_DIGIT_10 6
+# elif BOOST_PP_SLOT_TEMP_10 == 7
+# define BOOST_PP_SLOT_5_DIGIT_10 7
+# elif BOOST_PP_SLOT_TEMP_10 == 8
+# define BOOST_PP_SLOT_5_DIGIT_10 8
+# elif BOOST_PP_SLOT_TEMP_10 == 9
+# define BOOST_PP_SLOT_5_DIGIT_10 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_9 == 0
+# define BOOST_PP_SLOT_5_DIGIT_9 0
+# elif BOOST_PP_SLOT_TEMP_9 == 1
+# define BOOST_PP_SLOT_5_DIGIT_9 1
+# elif BOOST_PP_SLOT_TEMP_9 == 2
+# define BOOST_PP_SLOT_5_DIGIT_9 2
+# elif BOOST_PP_SLOT_TEMP_9 == 3
+# define BOOST_PP_SLOT_5_DIGIT_9 3
+# elif BOOST_PP_SLOT_TEMP_9 == 4
+# define BOOST_PP_SLOT_5_DIGIT_9 4
+# elif BOOST_PP_SLOT_TEMP_9 == 5
+# define BOOST_PP_SLOT_5_DIGIT_9 5
+# elif BOOST_PP_SLOT_TEMP_9 == 6
+# define BOOST_PP_SLOT_5_DIGIT_9 6
+# elif BOOST_PP_SLOT_TEMP_9 == 7
+# define BOOST_PP_SLOT_5_DIGIT_9 7
+# elif BOOST_PP_SLOT_TEMP_9 == 8
+# define BOOST_PP_SLOT_5_DIGIT_9 8
+# elif BOOST_PP_SLOT_TEMP_9 == 9
+# define BOOST_PP_SLOT_5_DIGIT_9 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_8 == 0
+# define BOOST_PP_SLOT_5_DIGIT_8 0
+# elif BOOST_PP_SLOT_TEMP_8 == 1
+# define BOOST_PP_SLOT_5_DIGIT_8 1
+# elif BOOST_PP_SLOT_TEMP_8 == 2
+# define BOOST_PP_SLOT_5_DIGIT_8 2
+# elif BOOST_PP_SLOT_TEMP_8 == 3
+# define BOOST_PP_SLOT_5_DIGIT_8 3
+# elif BOOST_PP_SLOT_TEMP_8 == 4
+# define BOOST_PP_SLOT_5_DIGIT_8 4
+# elif BOOST_PP_SLOT_TEMP_8 == 5
+# define BOOST_PP_SLOT_5_DIGIT_8 5
+# elif BOOST_PP_SLOT_TEMP_8 == 6
+# define BOOST_PP_SLOT_5_DIGIT_8 6
+# elif BOOST_PP_SLOT_TEMP_8 == 7
+# define BOOST_PP_SLOT_5_DIGIT_8 7
+# elif BOOST_PP_SLOT_TEMP_8 == 8
+# define BOOST_PP_SLOT_5_DIGIT_8 8
+# elif BOOST_PP_SLOT_TEMP_8 == 9
+# define BOOST_PP_SLOT_5_DIGIT_8 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_7 == 0
+# define BOOST_PP_SLOT_5_DIGIT_7 0
+# elif BOOST_PP_SLOT_TEMP_7 == 1
+# define BOOST_PP_SLOT_5_DIGIT_7 1
+# elif BOOST_PP_SLOT_TEMP_7 == 2
+# define BOOST_PP_SLOT_5_DIGIT_7 2
+# elif BOOST_PP_SLOT_TEMP_7 == 3
+# define BOOST_PP_SLOT_5_DIGIT_7 3
+# elif BOOST_PP_SLOT_TEMP_7 == 4
+# define BOOST_PP_SLOT_5_DIGIT_7 4
+# elif BOOST_PP_SLOT_TEMP_7 == 5
+# define BOOST_PP_SLOT_5_DIGIT_7 5
+# elif BOOST_PP_SLOT_TEMP_7 == 6
+# define BOOST_PP_SLOT_5_DIGIT_7 6
+# elif BOOST_PP_SLOT_TEMP_7 == 7
+# define BOOST_PP_SLOT_5_DIGIT_7 7
+# elif BOOST_PP_SLOT_TEMP_7 == 8
+# define BOOST_PP_SLOT_5_DIGIT_7 8
+# elif BOOST_PP_SLOT_TEMP_7 == 9
+# define BOOST_PP_SLOT_5_DIGIT_7 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_6 == 0
+# define BOOST_PP_SLOT_5_DIGIT_6 0
+# elif BOOST_PP_SLOT_TEMP_6 == 1
+# define BOOST_PP_SLOT_5_DIGIT_6 1
+# elif BOOST_PP_SLOT_TEMP_6 == 2
+# define BOOST_PP_SLOT_5_DIGIT_6 2
+# elif BOOST_PP_SLOT_TEMP_6 == 3
+# define BOOST_PP_SLOT_5_DIGIT_6 3
+# elif BOOST_PP_SLOT_TEMP_6 == 4
+# define BOOST_PP_SLOT_5_DIGIT_6 4
+# elif BOOST_PP_SLOT_TEMP_6 == 5
+# define BOOST_PP_SLOT_5_DIGIT_6 5
+# elif BOOST_PP_SLOT_TEMP_6 == 6
+# define BOOST_PP_SLOT_5_DIGIT_6 6
+# elif BOOST_PP_SLOT_TEMP_6 == 7
+# define BOOST_PP_SLOT_5_DIGIT_6 7
+# elif BOOST_PP_SLOT_TEMP_6 == 8
+# define BOOST_PP_SLOT_5_DIGIT_6 8
+# elif BOOST_PP_SLOT_TEMP_6 == 9
+# define BOOST_PP_SLOT_5_DIGIT_6 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_5 == 0
+# define BOOST_PP_SLOT_5_DIGIT_5 0
+# elif BOOST_PP_SLOT_TEMP_5 == 1
+# define BOOST_PP_SLOT_5_DIGIT_5 1
+# elif BOOST_PP_SLOT_TEMP_5 == 2
+# define BOOST_PP_SLOT_5_DIGIT_5 2
+# elif BOOST_PP_SLOT_TEMP_5 == 3
+# define BOOST_PP_SLOT_5_DIGIT_5 3
+# elif BOOST_PP_SLOT_TEMP_5 == 4
+# define BOOST_PP_SLOT_5_DIGIT_5 4
+# elif BOOST_PP_SLOT_TEMP_5 == 5
+# define BOOST_PP_SLOT_5_DIGIT_5 5
+# elif BOOST_PP_SLOT_TEMP_5 == 6
+# define BOOST_PP_SLOT_5_DIGIT_5 6
+# elif BOOST_PP_SLOT_TEMP_5 == 7
+# define BOOST_PP_SLOT_5_DIGIT_5 7
+# elif BOOST_PP_SLOT_TEMP_5 == 8
+# define BOOST_PP_SLOT_5_DIGIT_5 8
+# elif BOOST_PP_SLOT_TEMP_5 == 9
+# define BOOST_PP_SLOT_5_DIGIT_5 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_4 == 0
+# define BOOST_PP_SLOT_5_DIGIT_4 0
+# elif BOOST_PP_SLOT_TEMP_4 == 1
+# define BOOST_PP_SLOT_5_DIGIT_4 1
+# elif BOOST_PP_SLOT_TEMP_4 == 2
+# define BOOST_PP_SLOT_5_DIGIT_4 2
+# elif BOOST_PP_SLOT_TEMP_4 == 3
+# define BOOST_PP_SLOT_5_DIGIT_4 3
+# elif BOOST_PP_SLOT_TEMP_4 == 4
+# define BOOST_PP_SLOT_5_DIGIT_4 4
+# elif BOOST_PP_SLOT_TEMP_4 == 5
+# define BOOST_PP_SLOT_5_DIGIT_4 5
+# elif BOOST_PP_SLOT_TEMP_4 == 6
+# define BOOST_PP_SLOT_5_DIGIT_4 6
+# elif BOOST_PP_SLOT_TEMP_4 == 7
+# define BOOST_PP_SLOT_5_DIGIT_4 7
+# elif BOOST_PP_SLOT_TEMP_4 == 8
+# define BOOST_PP_SLOT_5_DIGIT_4 8
+# elif BOOST_PP_SLOT_TEMP_4 == 9
+# define BOOST_PP_SLOT_5_DIGIT_4 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_3 == 0
+# define BOOST_PP_SLOT_5_DIGIT_3 0
+# elif BOOST_PP_SLOT_TEMP_3 == 1
+# define BOOST_PP_SLOT_5_DIGIT_3 1
+# elif BOOST_PP_SLOT_TEMP_3 == 2
+# define BOOST_PP_SLOT_5_DIGIT_3 2
+# elif BOOST_PP_SLOT_TEMP_3 == 3
+# define BOOST_PP_SLOT_5_DIGIT_3 3
+# elif BOOST_PP_SLOT_TEMP_3 == 4
+# define BOOST_PP_SLOT_5_DIGIT_3 4
+# elif BOOST_PP_SLOT_TEMP_3 == 5
+# define BOOST_PP_SLOT_5_DIGIT_3 5
+# elif BOOST_PP_SLOT_TEMP_3 == 6
+# define BOOST_PP_SLOT_5_DIGIT_3 6
+# elif BOOST_PP_SLOT_TEMP_3 == 7
+# define BOOST_PP_SLOT_5_DIGIT_3 7
+# elif BOOST_PP_SLOT_TEMP_3 == 8
+# define BOOST_PP_SLOT_5_DIGIT_3 8
+# elif BOOST_PP_SLOT_TEMP_3 == 9
+# define BOOST_PP_SLOT_5_DIGIT_3 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_2 == 0
+# define BOOST_PP_SLOT_5_DIGIT_2 0
+# elif BOOST_PP_SLOT_TEMP_2 == 1
+# define BOOST_PP_SLOT_5_DIGIT_2 1
+# elif BOOST_PP_SLOT_TEMP_2 == 2
+# define BOOST_PP_SLOT_5_DIGIT_2 2
+# elif BOOST_PP_SLOT_TEMP_2 == 3
+# define BOOST_PP_SLOT_5_DIGIT_2 3
+# elif BOOST_PP_SLOT_TEMP_2 == 4
+# define BOOST_PP_SLOT_5_DIGIT_2 4
+# elif BOOST_PP_SLOT_TEMP_2 == 5
+# define BOOST_PP_SLOT_5_DIGIT_2 5
+# elif BOOST_PP_SLOT_TEMP_2 == 6
+# define BOOST_PP_SLOT_5_DIGIT_2 6
+# elif BOOST_PP_SLOT_TEMP_2 == 7
+# define BOOST_PP_SLOT_5_DIGIT_2 7
+# elif BOOST_PP_SLOT_TEMP_2 == 8
+# define BOOST_PP_SLOT_5_DIGIT_2 8
+# elif BOOST_PP_SLOT_TEMP_2 == 9
+# define BOOST_PP_SLOT_5_DIGIT_2 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_1 == 0
+# define BOOST_PP_SLOT_5_DIGIT_1 0
+# elif BOOST_PP_SLOT_TEMP_1 == 1
+# define BOOST_PP_SLOT_5_DIGIT_1 1
+# elif BOOST_PP_SLOT_TEMP_1 == 2
+# define BOOST_PP_SLOT_5_DIGIT_1 2
+# elif BOOST_PP_SLOT_TEMP_1 == 3
+# define BOOST_PP_SLOT_5_DIGIT_1 3
+# elif BOOST_PP_SLOT_TEMP_1 == 4
+# define BOOST_PP_SLOT_5_DIGIT_1 4
+# elif BOOST_PP_SLOT_TEMP_1 == 5
+# define BOOST_PP_SLOT_5_DIGIT_1 5
+# elif BOOST_PP_SLOT_TEMP_1 == 6
+# define BOOST_PP_SLOT_5_DIGIT_1 6
+# elif BOOST_PP_SLOT_TEMP_1 == 7
+# define BOOST_PP_SLOT_5_DIGIT_1 7
+# elif BOOST_PP_SLOT_TEMP_1 == 8
+# define BOOST_PP_SLOT_5_DIGIT_1 8
+# elif BOOST_PP_SLOT_TEMP_1 == 9
+# define BOOST_PP_SLOT_5_DIGIT_1 9
+# endif
+#
+# if BOOST_PP_SLOT_5_DIGIT_10
+# define BOOST_PP_SLOT_5() BOOST_PP_SLOT_CC_10(BOOST_PP_SLOT_5_DIGIT_10, BOOST_PP_SLOT_5_DIGIT_9, BOOST_PP_SLOT_5_DIGIT_8, BOOST_PP_SLOT_5_DIGIT_7, BOOST_PP_SLOT_5_DIGIT_6, BOOST_PP_SLOT_5_DIGIT_5, BOOST_PP_SLOT_5_DIGIT_4, BOOST_PP_SLOT_5_DIGIT_3, BOOST_PP_SLOT_5_DIGIT_2, BOOST_PP_SLOT_5_DIGIT_1)
+# elif BOOST_PP_SLOT_5_DIGIT_9
+# define BOOST_PP_SLOT_5() BOOST_PP_SLOT_CC_9(BOOST_PP_SLOT_5_DIGIT_9, BOOST_PP_SLOT_5_DIGIT_8, BOOST_PP_SLOT_5_DIGIT_7, BOOST_PP_SLOT_5_DIGIT_6, BOOST_PP_SLOT_5_DIGIT_5, BOOST_PP_SLOT_5_DIGIT_4, BOOST_PP_SLOT_5_DIGIT_3, BOOST_PP_SLOT_5_DIGIT_2, BOOST_PP_SLOT_5_DIGIT_1)
+# elif BOOST_PP_SLOT_5_DIGIT_8
+# define BOOST_PP_SLOT_5() BOOST_PP_SLOT_CC_8(BOOST_PP_SLOT_5_DIGIT_8, BOOST_PP_SLOT_5_DIGIT_7, BOOST_PP_SLOT_5_DIGIT_6, BOOST_PP_SLOT_5_DIGIT_5, BOOST_PP_SLOT_5_DIGIT_4, BOOST_PP_SLOT_5_DIGIT_3, BOOST_PP_SLOT_5_DIGIT_2, BOOST_PP_SLOT_5_DIGIT_1)
+# elif BOOST_PP_SLOT_5_DIGIT_7
+# define BOOST_PP_SLOT_5() BOOST_PP_SLOT_CC_7(BOOST_PP_SLOT_5_DIGIT_7, BOOST_PP_SLOT_5_DIGIT_6, BOOST_PP_SLOT_5_DIGIT_5, BOOST_PP_SLOT_5_DIGIT_4, BOOST_PP_SLOT_5_DIGIT_3, BOOST_PP_SLOT_5_DIGIT_2, BOOST_PP_SLOT_5_DIGIT_1)
+# elif BOOST_PP_SLOT_5_DIGIT_6
+# define BOOST_PP_SLOT_5() BOOST_PP_SLOT_CC_6(BOOST_PP_SLOT_5_DIGIT_6, BOOST_PP_SLOT_5_DIGIT_5, BOOST_PP_SLOT_5_DIGIT_4, BOOST_PP_SLOT_5_DIGIT_3, BOOST_PP_SLOT_5_DIGIT_2, BOOST_PP_SLOT_5_DIGIT_1)
+# elif BOOST_PP_SLOT_5_DIGIT_5
+# define BOOST_PP_SLOT_5() BOOST_PP_SLOT_CC_5(BOOST_PP_SLOT_5_DIGIT_5, BOOST_PP_SLOT_5_DIGIT_4, BOOST_PP_SLOT_5_DIGIT_3, BOOST_PP_SLOT_5_DIGIT_2, BOOST_PP_SLOT_5_DIGIT_1)
+# elif BOOST_PP_SLOT_5_DIGIT_4
+# define BOOST_PP_SLOT_5() BOOST_PP_SLOT_CC_4(BOOST_PP_SLOT_5_DIGIT_4, BOOST_PP_SLOT_5_DIGIT_3, BOOST_PP_SLOT_5_DIGIT_2, BOOST_PP_SLOT_5_DIGIT_1)
+# elif BOOST_PP_SLOT_5_DIGIT_3
+# define BOOST_PP_SLOT_5() BOOST_PP_SLOT_CC_3(BOOST_PP_SLOT_5_DIGIT_3, BOOST_PP_SLOT_5_DIGIT_2, BOOST_PP_SLOT_5_DIGIT_1)
+# elif BOOST_PP_SLOT_5_DIGIT_2
+# define BOOST_PP_SLOT_5() BOOST_PP_SLOT_CC_2(BOOST_PP_SLOT_5_DIGIT_2, BOOST_PP_SLOT_5_DIGIT_1)
+# else
+# define BOOST_PP_SLOT_5() BOOST_PP_SLOT_5_DIGIT_1
+# endif
diff --git a/boost/boost/preprocessor/slot/slot.hpp b/boost/boost/preprocessor/slot/slot.hpp
new file mode 100644
index 00000000000..147b097ca9c
--- /dev/null
+++ b/boost/boost/preprocessor/slot/slot.hpp
@@ -0,0 +1,32 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SLOT_SLOT_HPP
+# define BOOST_PREPROCESSOR_SLOT_SLOT_HPP
+#
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/slot/detail/def.hpp>
+#
+# /* BOOST_PP_ASSIGN_SLOT */
+#
+# define BOOST_PP_ASSIGN_SLOT(i) BOOST_PP_CAT(BOOST_PP_ASSIGN_SLOT_, i)
+#
+# define BOOST_PP_ASSIGN_SLOT_1 <boost/preprocessor/slot/detail/slot1.hpp>
+# define BOOST_PP_ASSIGN_SLOT_2 <boost/preprocessor/slot/detail/slot2.hpp>
+# define BOOST_PP_ASSIGN_SLOT_3 <boost/preprocessor/slot/detail/slot3.hpp>
+# define BOOST_PP_ASSIGN_SLOT_4 <boost/preprocessor/slot/detail/slot4.hpp>
+# define BOOST_PP_ASSIGN_SLOT_5 <boost/preprocessor/slot/detail/slot5.hpp>
+#
+# /* BOOST_PP_SLOT */
+#
+# define BOOST_PP_SLOT(i) BOOST_PP_CAT(BOOST_PP_SLOT_, i)()
+#
+# endif
diff --git a/boost/boost/preprocessor/stringize.hpp b/boost/boost/preprocessor/stringize.hpp
new file mode 100644
index 00000000000..64dd5fde3e3
--- /dev/null
+++ b/boost/boost/preprocessor/stringize.hpp
@@ -0,0 +1,33 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_STRINGIZE_HPP
+# define BOOST_PREPROCESSOR_STRINGIZE_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+#
+# /* BOOST_PP_STRINGIZE */
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()
+# define BOOST_PP_STRINGIZE(text) BOOST_PP_STRINGIZE_A((text))
+# define BOOST_PP_STRINGIZE_A(arg) BOOST_PP_STRINGIZE_I arg
+# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+# define BOOST_PP_STRINGIZE(text) BOOST_PP_STRINGIZE_OO((text))
+# define BOOST_PP_STRINGIZE_OO(par) BOOST_PP_STRINGIZE_I ## par
+# else
+# define BOOST_PP_STRINGIZE(text) BOOST_PP_STRINGIZE_I(text)
+# endif
+#
+# define BOOST_PP_STRINGIZE_I(text) #text
+#
+# endif
diff --git a/boost/boost/preprocessor/tuple.hpp b/boost/boost/preprocessor/tuple.hpp
new file mode 100644
index 00000000000..4ffceff487f
--- /dev/null
+++ b/boost/boost/preprocessor/tuple.hpp
@@ -0,0 +1,24 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_TUPLE_HPP
+# define BOOST_PREPROCESSOR_TUPLE_HPP
+#
+# include <boost/preprocessor/tuple/eat.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+# include <boost/preprocessor/tuple/rem.hpp>
+# include <boost/preprocessor/tuple/reverse.hpp>
+# include <boost/preprocessor/tuple/to_list.hpp>
+# include <boost/preprocessor/tuple/to_seq.hpp>
+#
+# endif
diff --git a/boost/boost/preprocessor/tuple/eat.hpp b/boost/boost/preprocessor/tuple/eat.hpp
new file mode 100644
index 00000000000..82e8ffcb24d
--- /dev/null
+++ b/boost/boost/preprocessor/tuple/eat.hpp
@@ -0,0 +1,57 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_TUPLE_EAT_HPP
+# define BOOST_PREPROCESSOR_TUPLE_EAT_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+#
+# /* BOOST_PP_TUPLE_EAT */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+# define BOOST_PP_TUPLE_EAT(size) BOOST_PP_TUPLE_EAT_I(size)
+# else
+# define BOOST_PP_TUPLE_EAT(size) BOOST_PP_TUPLE_EAT_OO((size))
+# define BOOST_PP_TUPLE_EAT_OO(par) BOOST_PP_TUPLE_EAT_I ## par
+# endif
+#
+# define BOOST_PP_TUPLE_EAT_I(size) BOOST_PP_TUPLE_EAT_ ## size
+#
+# define BOOST_PP_TUPLE_EAT_0()
+# define BOOST_PP_TUPLE_EAT_1(a)
+# define BOOST_PP_TUPLE_EAT_2(a, b)
+# define BOOST_PP_TUPLE_EAT_3(a, b, c)
+# define BOOST_PP_TUPLE_EAT_4(a, b, c, d)
+# define BOOST_PP_TUPLE_EAT_5(a, b, c, d, e)
+# define BOOST_PP_TUPLE_EAT_6(a, b, c, d, e, f)
+# define BOOST_PP_TUPLE_EAT_7(a, b, c, d, e, f, g)
+# define BOOST_PP_TUPLE_EAT_8(a, b, c, d, e, f, g, h)
+# define BOOST_PP_TUPLE_EAT_9(a, b, c, d, e, f, g, h, i)
+# define BOOST_PP_TUPLE_EAT_10(a, b, c, d, e, f, g, h, i, j)
+# define BOOST_PP_TUPLE_EAT_11(a, b, c, d, e, f, g, h, i, j, k)
+# define BOOST_PP_TUPLE_EAT_12(a, b, c, d, e, f, g, h, i, j, k, l)
+# define BOOST_PP_TUPLE_EAT_13(a, b, c, d, e, f, g, h, i, j, k, l, m)
+# define BOOST_PP_TUPLE_EAT_14(a, b, c, d, e, f, g, h, i, j, k, l, m, n)
+# define BOOST_PP_TUPLE_EAT_15(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)
+# define BOOST_PP_TUPLE_EAT_16(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p)
+# define BOOST_PP_TUPLE_EAT_17(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q)
+# define BOOST_PP_TUPLE_EAT_18(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r)
+# define BOOST_PP_TUPLE_EAT_19(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s)
+# define BOOST_PP_TUPLE_EAT_20(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t)
+# define BOOST_PP_TUPLE_EAT_21(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u)
+# define BOOST_PP_TUPLE_EAT_22(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v)
+# define BOOST_PP_TUPLE_EAT_23(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w)
+# define BOOST_PP_TUPLE_EAT_24(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x)
+# define BOOST_PP_TUPLE_EAT_25(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y)
+#
+# endif
diff --git a/boost/boost/preprocessor/tuple/elem.hpp b/boost/boost/preprocessor/tuple/elem.hpp
new file mode 100644
index 00000000000..2e225aec7dc
--- /dev/null
+++ b/boost/boost/preprocessor/tuple/elem.hpp
@@ -0,0 +1,385 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_TUPLE_ELEM_HPP
+# define BOOST_PREPROCESSOR_TUPLE_ELEM_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+# define BOOST_PP_TUPLE_ELEM(size, index, tuple) BOOST_PP_TUPLE_ELEM_I(size, index, tuple)
+# else
+# define BOOST_PP_TUPLE_ELEM(size, index, tuple) BOOST_PP_TUPLE_ELEM_OO((size, index, tuple))
+# define BOOST_PP_TUPLE_ELEM_OO(par) BOOST_PP_TUPLE_ELEM_I ## par
+# endif
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+# define BOOST_PP_TUPLE_ELEM_I(s, i, t) BOOST_PP_TUPLE_ELEM_ ## s ## _ ## i ## t
+# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()
+# define BOOST_PP_TUPLE_ELEM_I(s, i, t) BOOST_PP_TUPLE_ELEM_II(BOOST_PP_TUPLE_ELEM_ ## s ## _ ## i t)
+# define BOOST_PP_TUPLE_ELEM_II(res) res
+# else
+# define BOOST_PP_TUPLE_ELEM_I(s, i, t) BOOST_PP_TUPLE_ELEM_ ## s ## _ ## i t
+# endif
+#
+# define BOOST_PP_TUPLE_ELEM_1_0(a) a
+#
+# define BOOST_PP_TUPLE_ELEM_2_0(a, b) a
+# define BOOST_PP_TUPLE_ELEM_2_1(a, b) b
+#
+# define BOOST_PP_TUPLE_ELEM_3_0(a, b, c) a
+# define BOOST_PP_TUPLE_ELEM_3_1(a, b, c) b
+# define BOOST_PP_TUPLE_ELEM_3_2(a, b, c) c
+#
+# define BOOST_PP_TUPLE_ELEM_4_0(a, b, c, d) a
+# define BOOST_PP_TUPLE_ELEM_4_1(a, b, c, d) b
+# define BOOST_PP_TUPLE_ELEM_4_2(a, b, c, d) c
+# define BOOST_PP_TUPLE_ELEM_4_3(a, b, c, d) d
+#
+# define BOOST_PP_TUPLE_ELEM_5_0(a, b, c, d, e) a
+# define BOOST_PP_TUPLE_ELEM_5_1(a, b, c, d, e) b
+# define BOOST_PP_TUPLE_ELEM_5_2(a, b, c, d, e) c
+# define BOOST_PP_TUPLE_ELEM_5_3(a, b, c, d, e) d
+# define BOOST_PP_TUPLE_ELEM_5_4(a, b, c, d, e) e
+#
+# define BOOST_PP_TUPLE_ELEM_6_0(a, b, c, d, e, f) a
+# define BOOST_PP_TUPLE_ELEM_6_1(a, b, c, d, e, f) b
+# define BOOST_PP_TUPLE_ELEM_6_2(a, b, c, d, e, f) c
+# define BOOST_PP_TUPLE_ELEM_6_3(a, b, c, d, e, f) d
+# define BOOST_PP_TUPLE_ELEM_6_4(a, b, c, d, e, f) e
+# define BOOST_PP_TUPLE_ELEM_6_5(a, b, c, d, e, f) f
+#
+# define BOOST_PP_TUPLE_ELEM_7_0(a, b, c, d, e, f, g) a
+# define BOOST_PP_TUPLE_ELEM_7_1(a, b, c, d, e, f, g) b
+# define BOOST_PP_TUPLE_ELEM_7_2(a, b, c, d, e, f, g) c
+# define BOOST_PP_TUPLE_ELEM_7_3(a, b, c, d, e, f, g) d
+# define BOOST_PP_TUPLE_ELEM_7_4(a, b, c, d, e, f, g) e
+# define BOOST_PP_TUPLE_ELEM_7_5(a, b, c, d, e, f, g) f
+# define BOOST_PP_TUPLE_ELEM_7_6(a, b, c, d, e, f, g) g
+#
+# define BOOST_PP_TUPLE_ELEM_8_0(a, b, c, d, e, f, g, h) a
+# define BOOST_PP_TUPLE_ELEM_8_1(a, b, c, d, e, f, g, h) b
+# define BOOST_PP_TUPLE_ELEM_8_2(a, b, c, d, e, f, g, h) c
+# define BOOST_PP_TUPLE_ELEM_8_3(a, b, c, d, e, f, g, h) d
+# define BOOST_PP_TUPLE_ELEM_8_4(a, b, c, d, e, f, g, h) e
+# define BOOST_PP_TUPLE_ELEM_8_5(a, b, c, d, e, f, g, h) f
+# define BOOST_PP_TUPLE_ELEM_8_6(a, b, c, d, e, f, g, h) g
+# define BOOST_PP_TUPLE_ELEM_8_7(a, b, c, d, e, f, g, h) h
+#
+# define BOOST_PP_TUPLE_ELEM_9_0(a, b, c, d, e, f, g, h, i) a
+# define BOOST_PP_TUPLE_ELEM_9_1(a, b, c, d, e, f, g, h, i) b
+# define BOOST_PP_TUPLE_ELEM_9_2(a, b, c, d, e, f, g, h, i) c
+# define BOOST_PP_TUPLE_ELEM_9_3(a, b, c, d, e, f, g, h, i) d
+# define BOOST_PP_TUPLE_ELEM_9_4(a, b, c, d, e, f, g, h, i) e
+# define BOOST_PP_TUPLE_ELEM_9_5(a, b, c, d, e, f, g, h, i) f
+# define BOOST_PP_TUPLE_ELEM_9_6(a, b, c, d, e, f, g, h, i) g
+# define BOOST_PP_TUPLE_ELEM_9_7(a, b, c, d, e, f, g, h, i) h
+# define BOOST_PP_TUPLE_ELEM_9_8(a, b, c, d, e, f, g, h, i) i
+#
+# define BOOST_PP_TUPLE_ELEM_10_0(a, b, c, d, e, f, g, h, i, j) a
+# define BOOST_PP_TUPLE_ELEM_10_1(a, b, c, d, e, f, g, h, i, j) b
+# define BOOST_PP_TUPLE_ELEM_10_2(a, b, c, d, e, f, g, h, i, j) c
+# define BOOST_PP_TUPLE_ELEM_10_3(a, b, c, d, e, f, g, h, i, j) d
+# define BOOST_PP_TUPLE_ELEM_10_4(a, b, c, d, e, f, g, h, i, j) e
+# define BOOST_PP_TUPLE_ELEM_10_5(a, b, c, d, e, f, g, h, i, j) f
+# define BOOST_PP_TUPLE_ELEM_10_6(a, b, c, d, e, f, g, h, i, j) g
+# define BOOST_PP_TUPLE_ELEM_10_7(a, b, c, d, e, f, g, h, i, j) h
+# define BOOST_PP_TUPLE_ELEM_10_8(a, b, c, d, e, f, g, h, i, j) i
+# define BOOST_PP_TUPLE_ELEM_10_9(a, b, c, d, e, f, g, h, i, j) j
+#
+# define BOOST_PP_TUPLE_ELEM_11_0(a, b, c, d, e, f, g, h, i, j, k) a
+# define BOOST_PP_TUPLE_ELEM_11_1(a, b, c, d, e, f, g, h, i, j, k) b
+# define BOOST_PP_TUPLE_ELEM_11_2(a, b, c, d, e, f, g, h, i, j, k) c
+# define BOOST_PP_TUPLE_ELEM_11_3(a, b, c, d, e, f, g, h, i, j, k) d
+# define BOOST_PP_TUPLE_ELEM_11_4(a, b, c, d, e, f, g, h, i, j, k) e
+# define BOOST_PP_TUPLE_ELEM_11_5(a, b, c, d, e, f, g, h, i, j, k) f
+# define BOOST_PP_TUPLE_ELEM_11_6(a, b, c, d, e, f, g, h, i, j, k) g
+# define BOOST_PP_TUPLE_ELEM_11_7(a, b, c, d, e, f, g, h, i, j, k) h
+# define BOOST_PP_TUPLE_ELEM_11_8(a, b, c, d, e, f, g, h, i, j, k) i
+# define BOOST_PP_TUPLE_ELEM_11_9(a, b, c, d, e, f, g, h, i, j, k) j
+# define BOOST_PP_TUPLE_ELEM_11_10(a, b, c, d, e, f, g, h, i, j, k) k
+#
+# define BOOST_PP_TUPLE_ELEM_12_0(a, b, c, d, e, f, g, h, i, j, k, l) a
+# define BOOST_PP_TUPLE_ELEM_12_1(a, b, c, d, e, f, g, h, i, j, k, l) b
+# define BOOST_PP_TUPLE_ELEM_12_2(a, b, c, d, e, f, g, h, i, j, k, l) c
+# define BOOST_PP_TUPLE_ELEM_12_3(a, b, c, d, e, f, g, h, i, j, k, l) d
+# define BOOST_PP_TUPLE_ELEM_12_4(a, b, c, d, e, f, g, h, i, j, k, l) e
+# define BOOST_PP_TUPLE_ELEM_12_5(a, b, c, d, e, f, g, h, i, j, k, l) f
+# define BOOST_PP_TUPLE_ELEM_12_6(a, b, c, d, e, f, g, h, i, j, k, l) g
+# define BOOST_PP_TUPLE_ELEM_12_7(a, b, c, d, e, f, g, h, i, j, k, l) h
+# define BOOST_PP_TUPLE_ELEM_12_8(a, b, c, d, e, f, g, h, i, j, k, l) i
+# define BOOST_PP_TUPLE_ELEM_12_9(a, b, c, d, e, f, g, h, i, j, k, l) j
+# define BOOST_PP_TUPLE_ELEM_12_10(a, b, c, d, e, f, g, h, i, j, k, l) k
+# define BOOST_PP_TUPLE_ELEM_12_11(a, b, c, d, e, f, g, h, i, j, k, l) l
+#
+# define BOOST_PP_TUPLE_ELEM_13_0(a, b, c, d, e, f, g, h, i, j, k, l, m) a
+# define BOOST_PP_TUPLE_ELEM_13_1(a, b, c, d, e, f, g, h, i, j, k, l, m) b
+# define BOOST_PP_TUPLE_ELEM_13_2(a, b, c, d, e, f, g, h, i, j, k, l, m) c
+# define BOOST_PP_TUPLE_ELEM_13_3(a, b, c, d, e, f, g, h, i, j, k, l, m) d
+# define BOOST_PP_TUPLE_ELEM_13_4(a, b, c, d, e, f, g, h, i, j, k, l, m) e
+# define BOOST_PP_TUPLE_ELEM_13_5(a, b, c, d, e, f, g, h, i, j, k, l, m) f
+# define BOOST_PP_TUPLE_ELEM_13_6(a, b, c, d, e, f, g, h, i, j, k, l, m) g
+# define BOOST_PP_TUPLE_ELEM_13_7(a, b, c, d, e, f, g, h, i, j, k, l, m) h
+# define BOOST_PP_TUPLE_ELEM_13_8(a, b, c, d, e, f, g, h, i, j, k, l, m) i
+# define BOOST_PP_TUPLE_ELEM_13_9(a, b, c, d, e, f, g, h, i, j, k, l, m) j
+# define BOOST_PP_TUPLE_ELEM_13_10(a, b, c, d, e, f, g, h, i, j, k, l, m) k
+# define BOOST_PP_TUPLE_ELEM_13_11(a, b, c, d, e, f, g, h, i, j, k, l, m) l
+# define BOOST_PP_TUPLE_ELEM_13_12(a, b, c, d, e, f, g, h, i, j, k, l, m) m
+#
+# define BOOST_PP_TUPLE_ELEM_14_0(a, b, c, d, e, f, g, h, i, j, k, l, m, n) a
+# define BOOST_PP_TUPLE_ELEM_14_1(a, b, c, d, e, f, g, h, i, j, k, l, m, n) b
+# define BOOST_PP_TUPLE_ELEM_14_2(a, b, c, d, e, f, g, h, i, j, k, l, m, n) c
+# define BOOST_PP_TUPLE_ELEM_14_3(a, b, c, d, e, f, g, h, i, j, k, l, m, n) d
+# define BOOST_PP_TUPLE_ELEM_14_4(a, b, c, d, e, f, g, h, i, j, k, l, m, n) e
+# define BOOST_PP_TUPLE_ELEM_14_5(a, b, c, d, e, f, g, h, i, j, k, l, m, n) f
+# define BOOST_PP_TUPLE_ELEM_14_6(a, b, c, d, e, f, g, h, i, j, k, l, m, n) g
+# define BOOST_PP_TUPLE_ELEM_14_7(a, b, c, d, e, f, g, h, i, j, k, l, m, n) h
+# define BOOST_PP_TUPLE_ELEM_14_8(a, b, c, d, e, f, g, h, i, j, k, l, m, n) i
+# define BOOST_PP_TUPLE_ELEM_14_9(a, b, c, d, e, f, g, h, i, j, k, l, m, n) j
+# define BOOST_PP_TUPLE_ELEM_14_10(a, b, c, d, e, f, g, h, i, j, k, l, m, n) k
+# define BOOST_PP_TUPLE_ELEM_14_11(a, b, c, d, e, f, g, h, i, j, k, l, m, n) l
+# define BOOST_PP_TUPLE_ELEM_14_12(a, b, c, d, e, f, g, h, i, j, k, l, m, n) m
+# define BOOST_PP_TUPLE_ELEM_14_13(a, b, c, d, e, f, g, h, i, j, k, l, m, n) n
+#
+# define BOOST_PP_TUPLE_ELEM_15_0(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) a
+# define BOOST_PP_TUPLE_ELEM_15_1(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) b
+# define BOOST_PP_TUPLE_ELEM_15_2(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) c
+# define BOOST_PP_TUPLE_ELEM_15_3(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) d
+# define BOOST_PP_TUPLE_ELEM_15_4(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) e
+# define BOOST_PP_TUPLE_ELEM_15_5(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) f
+# define BOOST_PP_TUPLE_ELEM_15_6(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) g
+# define BOOST_PP_TUPLE_ELEM_15_7(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) h
+# define BOOST_PP_TUPLE_ELEM_15_8(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) i
+# define BOOST_PP_TUPLE_ELEM_15_9(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) j
+# define BOOST_PP_TUPLE_ELEM_15_10(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) k
+# define BOOST_PP_TUPLE_ELEM_15_11(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) l
+# define BOOST_PP_TUPLE_ELEM_15_12(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) m
+# define BOOST_PP_TUPLE_ELEM_15_13(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) n
+# define BOOST_PP_TUPLE_ELEM_15_14(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) o
+#
+# define BOOST_PP_TUPLE_ELEM_16_0(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) a
+# define BOOST_PP_TUPLE_ELEM_16_1(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) b
+# define BOOST_PP_TUPLE_ELEM_16_2(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) c
+# define BOOST_PP_TUPLE_ELEM_16_3(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) d
+# define BOOST_PP_TUPLE_ELEM_16_4(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) e
+# define BOOST_PP_TUPLE_ELEM_16_5(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) f
+# define BOOST_PP_TUPLE_ELEM_16_6(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) g
+# define BOOST_PP_TUPLE_ELEM_16_7(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) h
+# define BOOST_PP_TUPLE_ELEM_16_8(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) i
+# define BOOST_PP_TUPLE_ELEM_16_9(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) j
+# define BOOST_PP_TUPLE_ELEM_16_10(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) k
+# define BOOST_PP_TUPLE_ELEM_16_11(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) l
+# define BOOST_PP_TUPLE_ELEM_16_12(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) m
+# define BOOST_PP_TUPLE_ELEM_16_13(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) n
+# define BOOST_PP_TUPLE_ELEM_16_14(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) o
+# define BOOST_PP_TUPLE_ELEM_16_15(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) p
+#
+# define BOOST_PP_TUPLE_ELEM_17_0(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q) a
+# define BOOST_PP_TUPLE_ELEM_17_1(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q) b
+# define BOOST_PP_TUPLE_ELEM_17_2(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q) c
+# define BOOST_PP_TUPLE_ELEM_17_3(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q) d
+# define BOOST_PP_TUPLE_ELEM_17_4(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q) e
+# define BOOST_PP_TUPLE_ELEM_17_5(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q) f
+# define BOOST_PP_TUPLE_ELEM_17_6(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q) g
+# define BOOST_PP_TUPLE_ELEM_17_7(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q) h
+# define BOOST_PP_TUPLE_ELEM_17_8(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q) i
+# define BOOST_PP_TUPLE_ELEM_17_9(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q) j
+# define BOOST_PP_TUPLE_ELEM_17_10(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q) k
+# define BOOST_PP_TUPLE_ELEM_17_11(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q) l
+# define BOOST_PP_TUPLE_ELEM_17_12(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q) m
+# define BOOST_PP_TUPLE_ELEM_17_13(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q) n
+# define BOOST_PP_TUPLE_ELEM_17_14(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q) o
+# define BOOST_PP_TUPLE_ELEM_17_15(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q) p
+# define BOOST_PP_TUPLE_ELEM_17_16(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q) q
+#
+# define BOOST_PP_TUPLE_ELEM_18_0(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r) a
+# define BOOST_PP_TUPLE_ELEM_18_1(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r) b
+# define BOOST_PP_TUPLE_ELEM_18_2(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r) c
+# define BOOST_PP_TUPLE_ELEM_18_3(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r) d
+# define BOOST_PP_TUPLE_ELEM_18_4(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r) e
+# define BOOST_PP_TUPLE_ELEM_18_5(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r) f
+# define BOOST_PP_TUPLE_ELEM_18_6(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r) g
+# define BOOST_PP_TUPLE_ELEM_18_7(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r) h
+# define BOOST_PP_TUPLE_ELEM_18_8(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r) i
+# define BOOST_PP_TUPLE_ELEM_18_9(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r) j
+# define BOOST_PP_TUPLE_ELEM_18_10(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r) k
+# define BOOST_PP_TUPLE_ELEM_18_11(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r) l
+# define BOOST_PP_TUPLE_ELEM_18_12(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r) m
+# define BOOST_PP_TUPLE_ELEM_18_13(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r) n
+# define BOOST_PP_TUPLE_ELEM_18_14(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r) o
+# define BOOST_PP_TUPLE_ELEM_18_15(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r) p
+# define BOOST_PP_TUPLE_ELEM_18_16(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r) q
+# define BOOST_PP_TUPLE_ELEM_18_17(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r) r
+#
+# define BOOST_PP_TUPLE_ELEM_19_0(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s) a
+# define BOOST_PP_TUPLE_ELEM_19_1(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s) b
+# define BOOST_PP_TUPLE_ELEM_19_2(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s) c
+# define BOOST_PP_TUPLE_ELEM_19_3(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s) d
+# define BOOST_PP_TUPLE_ELEM_19_4(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s) e
+# define BOOST_PP_TUPLE_ELEM_19_5(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s) f
+# define BOOST_PP_TUPLE_ELEM_19_6(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s) g
+# define BOOST_PP_TUPLE_ELEM_19_7(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s) h
+# define BOOST_PP_TUPLE_ELEM_19_8(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s) i
+# define BOOST_PP_TUPLE_ELEM_19_9(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s) j
+# define BOOST_PP_TUPLE_ELEM_19_10(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s) k
+# define BOOST_PP_TUPLE_ELEM_19_11(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s) l
+# define BOOST_PP_TUPLE_ELEM_19_12(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s) m
+# define BOOST_PP_TUPLE_ELEM_19_13(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s) n
+# define BOOST_PP_TUPLE_ELEM_19_14(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s) o
+# define BOOST_PP_TUPLE_ELEM_19_15(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s) p
+# define BOOST_PP_TUPLE_ELEM_19_16(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s) q
+# define BOOST_PP_TUPLE_ELEM_19_17(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s) r
+# define BOOST_PP_TUPLE_ELEM_19_18(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s) s
+#
+# define BOOST_PP_TUPLE_ELEM_20_0(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) a
+# define BOOST_PP_TUPLE_ELEM_20_1(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) b
+# define BOOST_PP_TUPLE_ELEM_20_2(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) c
+# define BOOST_PP_TUPLE_ELEM_20_3(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) d
+# define BOOST_PP_TUPLE_ELEM_20_4(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) e
+# define BOOST_PP_TUPLE_ELEM_20_5(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) f
+# define BOOST_PP_TUPLE_ELEM_20_6(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) g
+# define BOOST_PP_TUPLE_ELEM_20_7(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) h
+# define BOOST_PP_TUPLE_ELEM_20_8(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) i
+# define BOOST_PP_TUPLE_ELEM_20_9(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) j
+# define BOOST_PP_TUPLE_ELEM_20_10(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) k
+# define BOOST_PP_TUPLE_ELEM_20_11(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) l
+# define BOOST_PP_TUPLE_ELEM_20_12(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) m
+# define BOOST_PP_TUPLE_ELEM_20_13(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) n
+# define BOOST_PP_TUPLE_ELEM_20_14(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) o
+# define BOOST_PP_TUPLE_ELEM_20_15(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) p
+# define BOOST_PP_TUPLE_ELEM_20_16(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) q
+# define BOOST_PP_TUPLE_ELEM_20_17(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) r
+# define BOOST_PP_TUPLE_ELEM_20_18(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) s
+# define BOOST_PP_TUPLE_ELEM_20_19(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) t
+#
+# define BOOST_PP_TUPLE_ELEM_21_0(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) a
+# define BOOST_PP_TUPLE_ELEM_21_1(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) b
+# define BOOST_PP_TUPLE_ELEM_21_2(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) c
+# define BOOST_PP_TUPLE_ELEM_21_3(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) d
+# define BOOST_PP_TUPLE_ELEM_21_4(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) e
+# define BOOST_PP_TUPLE_ELEM_21_5(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) f
+# define BOOST_PP_TUPLE_ELEM_21_6(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) g
+# define BOOST_PP_TUPLE_ELEM_21_7(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) h
+# define BOOST_PP_TUPLE_ELEM_21_8(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) i
+# define BOOST_PP_TUPLE_ELEM_21_9(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) j
+# define BOOST_PP_TUPLE_ELEM_21_10(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) k
+# define BOOST_PP_TUPLE_ELEM_21_11(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) l
+# define BOOST_PP_TUPLE_ELEM_21_12(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) m
+# define BOOST_PP_TUPLE_ELEM_21_13(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) n
+# define BOOST_PP_TUPLE_ELEM_21_14(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) o
+# define BOOST_PP_TUPLE_ELEM_21_15(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) p
+# define BOOST_PP_TUPLE_ELEM_21_16(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) q
+# define BOOST_PP_TUPLE_ELEM_21_17(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) r
+# define BOOST_PP_TUPLE_ELEM_21_18(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) s
+# define BOOST_PP_TUPLE_ELEM_21_19(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) t
+# define BOOST_PP_TUPLE_ELEM_21_20(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) u
+#
+# define BOOST_PP_TUPLE_ELEM_22_0(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) a
+# define BOOST_PP_TUPLE_ELEM_22_1(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) b
+# define BOOST_PP_TUPLE_ELEM_22_2(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) c
+# define BOOST_PP_TUPLE_ELEM_22_3(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) d
+# define BOOST_PP_TUPLE_ELEM_22_4(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) e
+# define BOOST_PP_TUPLE_ELEM_22_5(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) f
+# define BOOST_PP_TUPLE_ELEM_22_6(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) g
+# define BOOST_PP_TUPLE_ELEM_22_7(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) h
+# define BOOST_PP_TUPLE_ELEM_22_8(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) i
+# define BOOST_PP_TUPLE_ELEM_22_9(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) j
+# define BOOST_PP_TUPLE_ELEM_22_10(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) k
+# define BOOST_PP_TUPLE_ELEM_22_11(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) l
+# define BOOST_PP_TUPLE_ELEM_22_12(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) m
+# define BOOST_PP_TUPLE_ELEM_22_13(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) n
+# define BOOST_PP_TUPLE_ELEM_22_14(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) o
+# define BOOST_PP_TUPLE_ELEM_22_15(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) p
+# define BOOST_PP_TUPLE_ELEM_22_16(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) q
+# define BOOST_PP_TUPLE_ELEM_22_17(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) r
+# define BOOST_PP_TUPLE_ELEM_22_18(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) s
+# define BOOST_PP_TUPLE_ELEM_22_19(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) t
+# define BOOST_PP_TUPLE_ELEM_22_20(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) u
+# define BOOST_PP_TUPLE_ELEM_22_21(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) v
+#
+# define BOOST_PP_TUPLE_ELEM_23_0(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) a
+# define BOOST_PP_TUPLE_ELEM_23_1(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) b
+# define BOOST_PP_TUPLE_ELEM_23_2(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) c
+# define BOOST_PP_TUPLE_ELEM_23_3(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) d
+# define BOOST_PP_TUPLE_ELEM_23_4(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) e
+# define BOOST_PP_TUPLE_ELEM_23_5(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) f
+# define BOOST_PP_TUPLE_ELEM_23_6(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) g
+# define BOOST_PP_TUPLE_ELEM_23_7(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) h
+# define BOOST_PP_TUPLE_ELEM_23_8(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) i
+# define BOOST_PP_TUPLE_ELEM_23_9(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) j
+# define BOOST_PP_TUPLE_ELEM_23_10(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) k
+# define BOOST_PP_TUPLE_ELEM_23_11(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) l
+# define BOOST_PP_TUPLE_ELEM_23_12(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) m
+# define BOOST_PP_TUPLE_ELEM_23_13(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) n
+# define BOOST_PP_TUPLE_ELEM_23_14(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) o
+# define BOOST_PP_TUPLE_ELEM_23_15(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) p
+# define BOOST_PP_TUPLE_ELEM_23_16(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) q
+# define BOOST_PP_TUPLE_ELEM_23_17(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) r
+# define BOOST_PP_TUPLE_ELEM_23_18(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) s
+# define BOOST_PP_TUPLE_ELEM_23_19(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) t
+# define BOOST_PP_TUPLE_ELEM_23_20(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) u
+# define BOOST_PP_TUPLE_ELEM_23_21(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) v
+# define BOOST_PP_TUPLE_ELEM_23_22(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) w
+#
+# define BOOST_PP_TUPLE_ELEM_24_0(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) a
+# define BOOST_PP_TUPLE_ELEM_24_1(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) b
+# define BOOST_PP_TUPLE_ELEM_24_2(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) c
+# define BOOST_PP_TUPLE_ELEM_24_3(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) d
+# define BOOST_PP_TUPLE_ELEM_24_4(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) e
+# define BOOST_PP_TUPLE_ELEM_24_5(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) f
+# define BOOST_PP_TUPLE_ELEM_24_6(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) g
+# define BOOST_PP_TUPLE_ELEM_24_7(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) h
+# define BOOST_PP_TUPLE_ELEM_24_8(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) i
+# define BOOST_PP_TUPLE_ELEM_24_9(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) j
+# define BOOST_PP_TUPLE_ELEM_24_10(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) k
+# define BOOST_PP_TUPLE_ELEM_24_11(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) l
+# define BOOST_PP_TUPLE_ELEM_24_12(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) m
+# define BOOST_PP_TUPLE_ELEM_24_13(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) n
+# define BOOST_PP_TUPLE_ELEM_24_14(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) o
+# define BOOST_PP_TUPLE_ELEM_24_15(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) p
+# define BOOST_PP_TUPLE_ELEM_24_16(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) q
+# define BOOST_PP_TUPLE_ELEM_24_17(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) r
+# define BOOST_PP_TUPLE_ELEM_24_18(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) s
+# define BOOST_PP_TUPLE_ELEM_24_19(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) t
+# define BOOST_PP_TUPLE_ELEM_24_20(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) u
+# define BOOST_PP_TUPLE_ELEM_24_21(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) v
+# define BOOST_PP_TUPLE_ELEM_24_22(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) w
+# define BOOST_PP_TUPLE_ELEM_24_23(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) x
+#
+# define BOOST_PP_TUPLE_ELEM_25_0(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) a
+# define BOOST_PP_TUPLE_ELEM_25_1(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) b
+# define BOOST_PP_TUPLE_ELEM_25_2(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) c
+# define BOOST_PP_TUPLE_ELEM_25_3(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) d
+# define BOOST_PP_TUPLE_ELEM_25_4(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) e
+# define BOOST_PP_TUPLE_ELEM_25_5(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) f
+# define BOOST_PP_TUPLE_ELEM_25_6(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) g
+# define BOOST_PP_TUPLE_ELEM_25_7(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) h
+# define BOOST_PP_TUPLE_ELEM_25_8(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) i
+# define BOOST_PP_TUPLE_ELEM_25_9(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) j
+# define BOOST_PP_TUPLE_ELEM_25_10(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) k
+# define BOOST_PP_TUPLE_ELEM_25_11(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) l
+# define BOOST_PP_TUPLE_ELEM_25_12(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) m
+# define BOOST_PP_TUPLE_ELEM_25_13(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) n
+# define BOOST_PP_TUPLE_ELEM_25_14(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) o
+# define BOOST_PP_TUPLE_ELEM_25_15(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) p
+# define BOOST_PP_TUPLE_ELEM_25_16(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) q
+# define BOOST_PP_TUPLE_ELEM_25_17(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) r
+# define BOOST_PP_TUPLE_ELEM_25_18(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) s
+# define BOOST_PP_TUPLE_ELEM_25_19(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) t
+# define BOOST_PP_TUPLE_ELEM_25_20(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) u
+# define BOOST_PP_TUPLE_ELEM_25_21(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) v
+# define BOOST_PP_TUPLE_ELEM_25_22(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) w
+# define BOOST_PP_TUPLE_ELEM_25_23(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) x
+# define BOOST_PP_TUPLE_ELEM_25_24(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) y
+#
+# endif
diff --git a/boost/boost/preprocessor/tuple/rem.hpp b/boost/boost/preprocessor/tuple/rem.hpp
new file mode 100644
index 00000000000..9b76df961df
--- /dev/null
+++ b/boost/boost/preprocessor/tuple/rem.hpp
@@ -0,0 +1,72 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_TUPLE_REM_HPP
+# define BOOST_PREPROCESSOR_TUPLE_REM_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+#
+# /* BOOST_PP_TUPLE_REM */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+# define BOOST_PP_TUPLE_REM(size) BOOST_PP_TUPLE_REM_I(size)
+# else
+# define BOOST_PP_TUPLE_REM(size) BOOST_PP_TUPLE_REM_OO((size))
+# define BOOST_PP_TUPLE_REM_OO(par) BOOST_PP_TUPLE_REM_I ## par
+# endif
+#
+# define BOOST_PP_TUPLE_REM_I(size) BOOST_PP_TUPLE_REM_ ## size
+#
+# define BOOST_PP_TUPLE_REM_0()
+# define BOOST_PP_TUPLE_REM_1(a) a
+# define BOOST_PP_TUPLE_REM_2(a, b) a, b
+# define BOOST_PP_TUPLE_REM_3(a, b, c) a, b, c
+# define BOOST_PP_TUPLE_REM_4(a, b, c, d) a, b, c, d
+# define BOOST_PP_TUPLE_REM_5(a, b, c, d, e) a, b, c, d, e
+# define BOOST_PP_TUPLE_REM_6(a, b, c, d, e, f) a, b, c, d, e, f
+# define BOOST_PP_TUPLE_REM_7(a, b, c, d, e, f, g) a, b, c, d, e, f, g
+# define BOOST_PP_TUPLE_REM_8(a, b, c, d, e, f, g, h) a, b, c, d, e, f, g, h
+# define BOOST_PP_TUPLE_REM_9(a, b, c, d, e, f, g, h, i) a, b, c, d, e, f, g, h, i
+# define BOOST_PP_TUPLE_REM_10(a, b, c, d, e, f, g, h, i, j) a, b, c, d, e, f, g, h, i, j
+# define BOOST_PP_TUPLE_REM_11(a, b, c, d, e, f, g, h, i, j, k) a, b, c, d, e, f, g, h, i, j, k
+# define BOOST_PP_TUPLE_REM_12(a, b, c, d, e, f, g, h, i, j, k, l) a, b, c, d, e, f, g, h, i, j, k, l
+# define BOOST_PP_TUPLE_REM_13(a, b, c, d, e, f, g, h, i, j, k, l, m) a, b, c, d, e, f, g, h, i, j, k, l, m
+# define BOOST_PP_TUPLE_REM_14(a, b, c, d, e, f, g, h, i, j, k, l, m, n) a, b, c, d, e, f, g, h, i, j, k, l, m, n
+# define BOOST_PP_TUPLE_REM_15(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) a, b, c, d, e, f, g, h, i, j, k, l, m, n, o
+# define BOOST_PP_TUPLE_REM_16(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p
+# define BOOST_PP_TUPLE_REM_17(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q) a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q
+# define BOOST_PP_TUPLE_REM_18(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r) a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r
+# define BOOST_PP_TUPLE_REM_19(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s) a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s
+# define BOOST_PP_TUPLE_REM_20(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t
+# define BOOST_PP_TUPLE_REM_21(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u
+# define BOOST_PP_TUPLE_REM_22(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v
+# define BOOST_PP_TUPLE_REM_23(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w
+# define BOOST_PP_TUPLE_REM_24(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x
+# define BOOST_PP_TUPLE_REM_25(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y
+#
+# /* BOOST_PP_TUPLE_REM_CTOR */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+# define BOOST_PP_TUPLE_REM_CTOR(size, tuple) BOOST_PP_TUPLE_REM_CTOR_I(BOOST_PP_TUPLE_REM(size), tuple)
+# else
+# define BOOST_PP_TUPLE_REM_CTOR(size, tuple) BOOST_PP_TUPLE_REM_CTOR_D(size, tuple)
+# define BOOST_PP_TUPLE_REM_CTOR_D(size, tuple) BOOST_PP_TUPLE_REM_CTOR_I(BOOST_PP_TUPLE_REM(size), tuple)
+# endif
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+# define BOOST_PP_TUPLE_REM_CTOR_I(ext, tuple) ext tuple
+# else
+# define BOOST_PP_TUPLE_REM_CTOR_I(ext, tuple) BOOST_PP_TUPLE_REM_CTOR_OO((ext, tuple))
+# define BOOST_PP_TUPLE_REM_CTOR_OO(par) BOOST_PP_TUPLE_REM_CTOR_II ## par
+# define BOOST_PP_TUPLE_REM_CTOR_II(ext, tuple) ext ## tuple
+# endif
+#
+# endif
diff --git a/boost/boost/preprocessor/tuple/reverse.hpp b/boost/boost/preprocessor/tuple/reverse.hpp
new file mode 100644
index 00000000000..42f48f259c1
--- /dev/null
+++ b/boost/boost/preprocessor/tuple/reverse.hpp
@@ -0,0 +1,62 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_TUPLE_REVERSE_HPP
+# define BOOST_PREPROCESSOR_TUPLE_REVERSE_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+#
+# /* BOOST_PP_TUPLE_REVERSE */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+# define BOOST_PP_TUPLE_REVERSE(size, tuple) BOOST_PP_TUPLE_REVERSE_I(size, tuple)
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()
+# define BOOST_PP_TUPLE_REVERSE_I(s, t) BOOST_PP_TUPLE_REVERSE_ ## s t
+# else
+# define BOOST_PP_TUPLE_REVERSE_I(s, t) BOOST_PP_TUPLE_REVERSE_II(BOOST_PP_TUPLE_REVERSE_ ## s t)
+# define BOOST_PP_TUPLE_REVERSE_II(res) res
+# endif
+# else
+# define BOOST_PP_TUPLE_REVERSE(size, tuple) BOOST_PP_TUPLE_REVERSE_OO((size, tuple))
+# define BOOST_PP_TUPLE_REVERSE_OO(par) BOOST_PP_TUPLE_REVERSE_I ## par
+# define BOOST_PP_TUPLE_REVERSE_I(s, t) BOOST_PP_TUPLE_REVERSE_ ## s ## t
+# endif
+#
+# define BOOST_PP_TUPLE_REVERSE_0() ()
+# define BOOST_PP_TUPLE_REVERSE_1(a) (a)
+# define BOOST_PP_TUPLE_REVERSE_2(a, b) (b, a)
+# define BOOST_PP_TUPLE_REVERSE_3(a, b, c) (c, b, a)
+# define BOOST_PP_TUPLE_REVERSE_4(a, b, c, d) (d, c, b, a)
+# define BOOST_PP_TUPLE_REVERSE_5(a, b, c, d, e) (e, d, c, b, a)
+# define BOOST_PP_TUPLE_REVERSE_6(a, b, c, d, e, f) (f, e, d, c, b, a)
+# define BOOST_PP_TUPLE_REVERSE_7(a, b, c, d, e, f, g) (g, f, e, d, c, b, a)
+# define BOOST_PP_TUPLE_REVERSE_8(a, b, c, d, e, f, g, h) (h, g, f, e, d, c, b, a)
+# define BOOST_PP_TUPLE_REVERSE_9(a, b, c, d, e, f, g, h, i) (i, h, g, f, e, d, c, b, a)
+# define BOOST_PP_TUPLE_REVERSE_10(a, b, c, d, e, f, g, h, i, j) (j, i, h, g, f, e, d, c, b, a)
+# define BOOST_PP_TUPLE_REVERSE_11(a, b, c, d, e, f, g, h, i, j, k) (k, j, i, h, g, f, e, d, c, b, a)
+# define BOOST_PP_TUPLE_REVERSE_12(a, b, c, d, e, f, g, h, i, j, k, l) (l, k, j, i, h, g, f, e, d, c, b, a)
+# define BOOST_PP_TUPLE_REVERSE_13(a, b, c, d, e, f, g, h, i, j, k, l, m) (m, l, k, j, i, h, g, f, e, d, c, b, a)
+# define BOOST_PP_TUPLE_REVERSE_14(a, b, c, d, e, f, g, h, i, j, k, l, m, n) (n, m, l, k, j, i, h, g, f, e, d, c, b, a)
+# define BOOST_PP_TUPLE_REVERSE_15(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) (o, n, m, l, k, j, i, h, g, f, e, d, c, b, a)
+# define BOOST_PP_TUPLE_REVERSE_16(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) (p, o, n, m, l, k, j, i, h, g, f, e, d, c, b, a)
+# define BOOST_PP_TUPLE_REVERSE_17(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q) (q, p, o, n, m, l, k, j, i, h, g, f, e, d, c, b, a)
+# define BOOST_PP_TUPLE_REVERSE_18(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r) (r, q, p, o, n, m, l, k, j, i, h, g, f, e, d, c, b, a)
+# define BOOST_PP_TUPLE_REVERSE_19(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s) (s, r, q, p, o, n, m, l, k, j, i, h, g, f, e, d, c, b, a)
+# define BOOST_PP_TUPLE_REVERSE_20(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) (t, s, r, q, p, o, n, m, l, k, j, i, h, g, f, e, d, c, b, a)
+# define BOOST_PP_TUPLE_REVERSE_21(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) (u, t, s, r, q, p, o, n, m, l, k, j, i, h, g, f, e, d, c, b, a)
+# define BOOST_PP_TUPLE_REVERSE_22(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) (v, u, t, s, r, q, p, o, n, m, l, k, j, i, h, g, f, e, d, c, b, a)
+# define BOOST_PP_TUPLE_REVERSE_23(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) (w, v, u, t, s, r, q, p, o, n, m, l, k, j, i, h, g, f, e, d, c, b, a)
+# define BOOST_PP_TUPLE_REVERSE_24(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) (x, w, v, u, t, s, r, q, p, o, n, m, l, k, j, i, h, g, f, e, d, c, b, a)
+# define BOOST_PP_TUPLE_REVERSE_25(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) (y, x, w, v, u, t, s, r, q, p, o, n, m, l, k, j, i, h, g, f, e, d, c, b, a)
+#
+# endif
diff --git a/boost/boost/preprocessor/tuple/to_list.hpp b/boost/boost/preprocessor/tuple/to_list.hpp
new file mode 100644
index 00000000000..e8af8ddc296
--- /dev/null
+++ b/boost/boost/preprocessor/tuple/to_list.hpp
@@ -0,0 +1,62 @@
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+# *
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+# */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_TUPLE_TO_LIST_HPP
+# define BOOST_PREPROCESSOR_TUPLE_TO_LIST_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+#
+# /* BOOST_PP_TUPLE_TO_LIST */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+# define BOOST_PP_TUPLE_TO_LIST(size, tuple) BOOST_PP_TUPLE_TO_LIST_I(size, tuple)
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()
+# define BOOST_PP_TUPLE_TO_LIST_I(s, t) BOOST_PP_TUPLE_TO_LIST_ ## s t
+# else
+# define BOOST_PP_TUPLE_TO_LIST_I(s, t) BOOST_PP_TUPLE_TO_LIST_II(BOOST_PP_TUPLE_TO_LIST_ ## s t)
+# define BOOST_PP_TUPLE_TO_LIST_II(res) res
+# endif
+# else
+# define BOOST_PP_TUPLE_TO_LIST(size, tuple) BOOST_PP_TUPLE_TO_LIST_OO((size, tuple))
+# define BOOST_PP_TUPLE_TO_LIST_OO(par) BOOST_PP_TUPLE_TO_LIST_I ## par
+# define BOOST_PP_TUPLE_TO_LIST_I(s, t) BOOST_PP_TUPLE_TO_LIST_ ## s ## t
+# endif
+#
+# define BOOST_PP_TUPLE_TO_LIST_0() BOOST_PP_NIL
+# define BOOST_PP_TUPLE_TO_LIST_1(a) (a, BOOST_PP_NIL)
+# define BOOST_PP_TUPLE_TO_LIST_2(a, b) (a, (b, BOOST_PP_NIL))
+# define BOOST_PP_TUPLE_TO_LIST_3(a, b, c) (a, (b, (c, BOOST_PP_NIL)))
+# define BOOST_PP_TUPLE_TO_LIST_4(a, b, c, d) (a, (b, (c, (d, BOOST_PP_NIL))))
+# define BOOST_PP_TUPLE_TO_LIST_5(a, b, c, d, e) (a, (b, (c, (d, (e, BOOST_PP_NIL)))))
+# define BOOST_PP_TUPLE_TO_LIST_6(a, b, c, d, e, f) (a, (b, (c, (d, (e, (f, BOOST_PP_NIL))))))
+# define BOOST_PP_TUPLE_TO_LIST_7(a, b, c, d, e, f, g) (a, (b, (c, (d, (e, (f, (g, BOOST_PP_NIL)))))))
+# define BOOST_PP_TUPLE_TO_LIST_8(a, b, c, d, e, f, g, h) (a, (b, (c, (d, (e, (f, (g, (h, BOOST_PP_NIL))))))))
+# define BOOST_PP_TUPLE_TO_LIST_9(a, b, c, d, e, f, g, h, i) (a, (b, (c, (d, (e, (f, (g, (h, (i, BOOST_PP_NIL)))))))))
+# define BOOST_PP_TUPLE_TO_LIST_10(a, b, c, d, e, f, g, h, i, j) (a, (b, (c, (d, (e, (f, (g, (h, (i, (j, BOOST_PP_NIL))))))))))
+# define BOOST_PP_TUPLE_TO_LIST_11(a, b, c, d, e, f, g, h, i, j, k) (a, (b, (c, (d, (e, (f, (g, (h, (i, (j, (k, BOOST_PP_NIL)))))))))))
+# define BOOST_PP_TUPLE_TO_LIST_12(a, b, c, d, e, f, g, h, i, j, k, l) (a, (b, (c, (d, (e, (f, (g, (h, (i, (j, (k, (l, BOOST_PP_NIL))))))))))))
+# define BOOST_PP_TUPLE_TO_LIST_13(a, b, c, d, e, f, g, h, i, j, k, l, m) (a, (b, (c, (d, (e, (f, (g, (h, (i, (j, (k, (l, (m, BOOST_PP_NIL)))))))))))))
+# define BOOST_PP_TUPLE_TO_LIST_14(a, b, c, d, e, f, g, h, i, j, k, l, m, n) (a, (b, (c, (d, (e, (f, (g, (h, (i, (j, (k, (l, (m, (n, BOOST_PP_NIL))))))))))))))
+# define BOOST_PP_TUPLE_TO_LIST_15(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) (a, (b, (c, (d, (e, (f, (g, (h, (i, (j, (k, (l, (m, (n, (o, BOOST_PP_NIL)))))))))))))))
+# define BOOST_PP_TUPLE_TO_LIST_16(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) (a, (b, (c, (d, (e, (f, (g, (h, (i, (j, (k, (l, (m, (n, (o, (p, BOOST_PP_NIL))))))))))))))))
+# define BOOST_PP_TUPLE_TO_LIST_17(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q) (a, (b, (c, (d, (e, (f, (g, (h, (i, (j, (k, (l, (m, (n, (o, (p, (q, BOOST_PP_NIL)))))))))))))))))
+# define BOOST_PP_TUPLE_TO_LIST_18(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r) (a, (b, (c, (d, (e, (f, (g, (h, (i, (j, (k, (l, (m, (n, (o, (p, (q, (r, BOOST_PP_NIL))))))))))))))))))
+# define BOOST_PP_TUPLE_TO_LIST_19(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s) (a, (b, (c, (d, (e, (f, (g, (h, (i, (j, (k, (l, (m, (n, (o, (p, (q, (r, (s, BOOST_PP_NIL)))))))))))))))))))
+# define BOOST_PP_TUPLE_TO_LIST_20(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) (a, (b, (c, (d, (e, (f, (g, (h, (i, (j, (k, (l, (m, (n, (o, (p, (q, (r, (s, (t, BOOST_PP_NIL))))))))))))))))))))
+# define BOOST_PP_TUPLE_TO_LIST_21(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) (a, (b, (c, (d, (e, (f, (g, (h, (i, (j, (k, (l, (m, (n, (o, (p, (q, (r, (s, (t, (u, BOOST_PP_NIL)))))))))))))))))))))
+# define BOOST_PP_TUPLE_TO_LIST_22(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) (a, (b, (c, (d, (e, (f, (g, (h, (i, (j, (k, (l, (m, (n, (o, (p, (q, (r, (s, (t, (u, (v, BOOST_PP_NIL))))))))))))))))))))))
+# define BOOST_PP_TUPLE_TO_LIST_23(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) (a, (b, (c, (d, (e, (f, (g, (h, (i, (j, (k, (l, (m, (n, (o, (p, (q, (r, (s, (t, (u, (v, (w, BOOST_PP_NIL)))))))))))))))))))))))
+# define BOOST_PP_TUPLE_TO_LIST_24(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) (a, (b, (c, (d, (e, (f, (g, (h, (i, (j, (k, (l, (m, (n, (o, (p, (q, (r, (s, (t, (u, (v, (w, (x, BOOST_PP_NIL))))))))))))))))))))))))
+# define BOOST_PP_TUPLE_TO_LIST_25(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) (a, (b, (c, (d, (e, (f, (g, (h, (i, (j, (k, (l, (m, (n, (o, (p, (q, (r, (s, (t, (u, (v, (w, (x, (y, BOOST_PP_NIL)))))))))))))))))))))))))
+#
+# endif
diff --git a/boost/boost/preprocessor/tuple/to_seq.hpp b/boost/boost/preprocessor/tuple/to_seq.hpp
new file mode 100644
index 00000000000..22f8434d7fa
--- /dev/null
+++ b/boost/boost/preprocessor/tuple/to_seq.hpp
@@ -0,0 +1,60 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_TUPLE_TO_SEQ_HPP
+# define BOOST_PREPROCESSOR_TUPLE_TO_SEQ_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+#
+# /* BOOST_PP_TUPLE_TO_SEQ */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+# define BOOST_PP_TUPLE_TO_SEQ(size, tuple) BOOST_PP_TUPLE_TO_SEQ_I(size, tuple)
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()
+# define BOOST_PP_TUPLE_TO_SEQ_I(s, t) BOOST_PP_TUPLE_TO_SEQ_ ## s t
+# else
+# define BOOST_PP_TUPLE_TO_SEQ_I(s, t) BOOST_PP_TUPLE_TO_SEQ_II(BOOST_PP_TUPLE_TO_SEQ_ ## s t)
+# define BOOST_PP_TUPLE_TO_SEQ_II(res) res
+# endif
+# else
+# define BOOST_PP_TUPLE_TO_SEQ(size, tuple) BOOST_PP_TUPLE_TO_SEQ_OO((size, tuple))
+# define BOOST_PP_TUPLE_TO_SEQ_OO(par) BOOST_PP_TUPLE_TO_SEQ_I ## par
+# define BOOST_PP_TUPLE_TO_SEQ_I(s, t) BOOST_PP_TUPLE_TO_SEQ_ ## s ## t
+# endif
+#
+# define BOOST_PP_TUPLE_TO_SEQ_0()
+# define BOOST_PP_TUPLE_TO_SEQ_1(a) (a)
+# define BOOST_PP_TUPLE_TO_SEQ_2(a, b) (a)(b)
+# define BOOST_PP_TUPLE_TO_SEQ_3(a, b, c) (a)(b)(c)
+# define BOOST_PP_TUPLE_TO_SEQ_4(a, b, c, d) (a)(b)(c)(d)
+# define BOOST_PP_TUPLE_TO_SEQ_5(a, b, c, d, e) (a)(b)(c)(d)(e)
+# define BOOST_PP_TUPLE_TO_SEQ_6(a, b, c, d, e, f) (a)(b)(c)(d)(e)(f)
+# define BOOST_PP_TUPLE_TO_SEQ_7(a, b, c, d, e, f, g) (a)(b)(c)(d)(e)(f)(g)
+# define BOOST_PP_TUPLE_TO_SEQ_8(a, b, c, d, e, f, g, h) (a)(b)(c)(d)(e)(f)(g)(h)
+# define BOOST_PP_TUPLE_TO_SEQ_9(a, b, c, d, e, f, g, h, i) (a)(b)(c)(d)(e)(f)(g)(h)(i)
+# define BOOST_PP_TUPLE_TO_SEQ_10(a, b, c, d, e, f, g, h, i, j) (a)(b)(c)(d)(e)(f)(g)(h)(i)(j)
+# define BOOST_PP_TUPLE_TO_SEQ_11(a, b, c, d, e, f, g, h, i, j, k) (a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)
+# define BOOST_PP_TUPLE_TO_SEQ_12(a, b, c, d, e, f, g, h, i, j, k, l) (a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)
+# define BOOST_PP_TUPLE_TO_SEQ_13(a, b, c, d, e, f, g, h, i, j, k, l, m) (a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)(m)
+# define BOOST_PP_TUPLE_TO_SEQ_14(a, b, c, d, e, f, g, h, i, j, k, l, m, n) (a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)(m)(n)
+# define BOOST_PP_TUPLE_TO_SEQ_15(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) (a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)(m)(n)(o)
+# define BOOST_PP_TUPLE_TO_SEQ_16(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) (a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)(m)(n)(o)(p)
+# define BOOST_PP_TUPLE_TO_SEQ_17(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q) (a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)(m)(n)(o)(p)(q)
+# define BOOST_PP_TUPLE_TO_SEQ_18(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r) (a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)(m)(n)(o)(p)(q)(r)
+# define BOOST_PP_TUPLE_TO_SEQ_19(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s) (a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)(m)(n)(o)(p)(q)(r)(s)
+# define BOOST_PP_TUPLE_TO_SEQ_20(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) (a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)(m)(n)(o)(p)(q)(r)(s)(t)
+# define BOOST_PP_TUPLE_TO_SEQ_21(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) (a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)(m)(n)(o)(p)(q)(r)(s)(t)(u)
+# define BOOST_PP_TUPLE_TO_SEQ_22(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) (a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)(m)(n)(o)(p)(q)(r)(s)(t)(u)(v)
+# define BOOST_PP_TUPLE_TO_SEQ_23(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) (a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)(m)(n)(o)(p)(q)(r)(s)(t)(u)(v)(w)
+# define BOOST_PP_TUPLE_TO_SEQ_24(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) (a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)(m)(n)(o)(p)(q)(r)(s)(t)(u)(v)(w)(x)
+# define BOOST_PP_TUPLE_TO_SEQ_25(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) (a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)(m)(n)(o)(p)(q)(r)(s)(t)(u)(v)(w)(x)(y)
+#
+# endif
diff --git a/boost/boost/preprocessor/while.hpp b/boost/boost/preprocessor/while.hpp
new file mode 100644
index 00000000000..4b9c801ac0e
--- /dev/null
+++ b/boost/boost/preprocessor/while.hpp
@@ -0,0 +1,17 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_WHILE_HPP
+# define BOOST_PREPROCESSOR_WHILE_HPP
+#
+# include <boost/preprocessor/control/while.hpp>
+#
+# endif
diff --git a/boost/boost/preprocessor/wstringize.hpp b/boost/boost/preprocessor/wstringize.hpp
new file mode 100644
index 00000000000..5d1a83aa2e0
--- /dev/null
+++ b/boost/boost/preprocessor/wstringize.hpp
@@ -0,0 +1,29 @@
+# /* **************************************************************************
+# * *
+# * (C) Copyright Paul Mensonides 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 for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_WSTRINGIZE_HPP
+# define BOOST_PREPROCESSOR_WSTRINGIZE_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+#
+# /* BOOST_PP_WSTRINGIZE */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+# define BOOST_PP_WSTRINGIZE(text) BOOST_PP_WSTRINGIZE_I(text)
+# else
+# define BOOST_PP_WSTRINGIZE(text) BOOST_PP_WSTRINGIZE_OO((text))
+# define BOOST_PP_WSTRINGIZE_OO(par) BOOST_PP_WSTRINGIZE_I ## par
+# endif
+#
+# define BOOST_PP_WSTRINGIZE_I(text) BOOST_PP_WSTRINGIZE_II(#text)
+# define BOOST_PP_WSTRINGIZE_II(str) L ## str
+#
+# endif
diff --git a/boost/boost/program_options.hpp b/boost/boost/program_options.hpp
new file mode 100644
index 00000000000..57cc820c279
--- /dev/null
+++ b/boost/boost/program_options.hpp
@@ -0,0 +1,23 @@
+// Copyright Vladimir Prus 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)
+
+#ifndef PROGRAM_OPTIONS_VP_2003_05_19
+#define PROGRAM_OPTIONS_VP_2003_05_19
+
+#if _MSC_VER >= 1020
+#pragma once
+#endif
+
+#include <boost/program_options/options_description.hpp>
+#include <boost/program_options/positional_options.hpp>
+#include <boost/program_options/parsers.hpp>
+#include <boost/program_options/variables_map.hpp>
+#include <boost/program_options/cmdline.hpp>
+#include <boost/program_options/errors.hpp>
+#include <boost/program_options/option.hpp>
+#include <boost/program_options/value_semantic.hpp>
+#include <boost/program_options/version.hpp>
+
+#endif
diff --git a/boost/boost/program_options/cmdline.hpp b/boost/boost/program_options/cmdline.hpp
new file mode 100644
index 00000000000..976f5d35f02
--- /dev/null
+++ b/boost/boost/program_options/cmdline.hpp
@@ -0,0 +1,85 @@
+// Copyright Vladimir Prus 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)
+
+#ifndef BOOST_CMDLINE_HPP_VP_2004_03_13
+#define BOOST_CMDLINE_HPP_VP_2004_03_13
+
+namespace boost { namespace program_options { namespace command_line_style {
+ /** Various possible styles of options.
+
+ There are "long" options, which start with "--" and "short",
+ which start with either "-" or "/". Both kinds can be allowed or
+ disallowed, see allow_long and allow_short. The allowed character
+ for short options is also configurable.
+
+ Option's value can be specified in the same token as name
+ ("--foo=bar"), or in the next token.
+
+ It's possible to introduce long options by the same character as
+ short options, see allow_long_disguise.
+
+ Finally, guessing (specifying only prefix of option) and case
+ insensitive processing are supported.
+ */
+ enum style_t {
+ /// Allow "--long_name" style
+ allow_long = 1,
+ /// Alow "-<single character" style
+ allow_short = allow_long << 1,
+ /// Allow "-" in short options
+ allow_dash_for_short = allow_short << 1,
+ /// Allow "/" in short options
+ allow_slash_for_short = allow_dash_for_short << 1,
+ /** Allow option parameter in the same token
+ for long option, like in
+ @verbatim
+ --foo=10
+ @endverbatim
+ */
+ long_allow_adjacent = allow_slash_for_short << 1,
+ /** Allow option parameter in the next token for
+ long options. */
+ long_allow_next = long_allow_adjacent << 1,
+ /** Allow option parameter in the same token for
+ short options. */
+ short_allow_adjacent = long_allow_next << 1,
+ /** Allow option parameter in the next token for
+ short options. */
+ short_allow_next = short_allow_adjacent << 1,
+ /** Allow to merge several short options together,
+ so that "-s -k" become "-sk". All of the options
+ but last should accept no parameter. For example, if
+ "-s" accept a parameter, then "k" will be taken as
+ parameter, not another short option.
+ Dos-style short options cannot be sticky.
+ */
+ allow_sticky = short_allow_next << 1,
+ /** Allow abbreviated spellings for long options,
+ if they unambiguously identify long option.
+ No long option name should be prefix of other
+ long option name if guessing is in effect.
+ */
+ allow_guessing = allow_sticky << 1,
+ /** Ignore the difference in case for options.
+ @todo Should this apply to long options only?
+ */
+ case_insensitive = allow_guessing << 1,
+ /** Allow long options with single option starting character,
+ e.g <tt>-foo=10</tt>
+ */
+ allow_long_disguise = case_insensitive << 1,
+ /** The more-or-less traditional unix style. */
+ unix_style = (allow_short | short_allow_adjacent | short_allow_next
+ | allow_long | long_allow_adjacent | long_allow_next
+ | allow_sticky | allow_guessing
+ | allow_dash_for_short),
+ /** The default style. */
+ default_style = unix_style
+ };
+}}}
+
+
+#endif
+
diff --git a/boost/boost/program_options/config.hpp b/boost/boost/program_options/config.hpp
new file mode 100644
index 00000000000..0c69c143646
--- /dev/null
+++ b/boost/boost/program_options/config.hpp
@@ -0,0 +1,55 @@
+// Copyright (c) 2004 Hartmut Kaiser
+//
+// Use, modification and distribution is 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)
+
+#ifndef BOOST_PROGRAM_OPTIONS_CONFIG_HK_2004_01_11
+#define BOOST_PROGRAM_OPTIONS_CONFIG_HK_2004_01_11
+
+#include <boost/config.hpp>
+#include <boost/version.hpp>
+
+// Support for autolinking.
+#if BOOST_VERSION >= 103100 // works beginning from Boost V1.31.0
+
+///////////////////////////////////////////////////////////////////////////////
+// enable automatic library variant selection
+#if !defined(BOOST_PROGRAM_OPTIONS_SOURCE) && !defined(BOOST_ALL_NO_LIB) && \
+ !defined(BOOST_PROGRAM_OPTIONS_NO_LIB)
+
+// Set the name of our library, this will get undef'ed by auto_link.hpp
+// once it's done with it:
+#define BOOST_LIB_NAME boost_program_options
+// tell the auto-link code to select a dll when required:
+#if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_PROGRAM_OPTIONS_DYN_LINK)
+# define BOOST_DYN_LINK
+#endif
+
+// And include the header that does the work:
+#include <boost/config/auto_link.hpp>
+
+#endif // auto-linking disabled
+
+#endif // BOOST_VERSION
+
+///////////////////////////////////////////////////////////////////////////////
+// Windows DLL suport
+#ifdef BOOST_HAS_DECLSPEC
+#if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_PROGRAM_OPTIONS_DYN_LINK)
+// export if this is our own source, otherwise import:
+#ifdef BOOST_PROGRAM_OPTIONS_SOURCE
+# define BOOST_PROGRAM_OPTIONS_DECL __declspec(dllexport)
+#else
+# define BOOST_PROGRAM_OPTIONS_DECL __declspec(dllimport)
+#endif // BOOST_PROGRAM_OPTIONS_SOURCE
+#endif // DYN_LINK
+#endif // BOOST_HAS_DECLSPEC
+
+#ifndef BOOST_PROGRAM_OPTIONS_DECL
+#define BOOST_PROGRAM_OPTIONS_DECL
+#endif
+
+
+#endif // PROGRAM_OPTIONS_CONFIG_HK_2004_01_11
+
diff --git a/boost/boost/program_options/detail/cmdline.hpp b/boost/boost/program_options/detail/cmdline.hpp
new file mode 100644
index 00000000000..0e67f6e7439
--- /dev/null
+++ b/boost/boost/program_options/detail/cmdline.hpp
@@ -0,0 +1,136 @@
+// Copyright Vladimir Prus 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)
+
+
+#ifndef BOOST_CMDLINE_VP_2003_05_19
+#define BOOST_CMDLINE_VP_2003_05_19
+
+#include <boost/program_options/config.hpp>
+#include <boost/program_options/errors.hpp>
+#include <boost/program_options/cmdline.hpp>
+#include <boost/program_options/option.hpp>
+#include <boost/program_options/options_description.hpp>
+#include <boost/program_options/positional_options.hpp>
+
+
+#include <boost/detail/workaround.hpp>
+
+#include <boost/function.hpp>
+
+#include <string>
+#include <vector>
+
+namespace boost { namespace program_options { namespace detail {
+
+ /** Command line parser class. Main requirements were:
+ - Powerful enough to support all common uses.
+ - Simple and easy to learn/use.
+ - Minimal code size and external dependencies.
+ - Extensible for custom syntaxes.
+
+ First all options are registered. After that, elements of command line
+ are extracted using operator++.
+
+ For each element, user can find
+ - if it's an option or an argument
+ - name of the option
+ - index of the option
+ - option value(s), if any
+
+ Sometimes the registered option name is not equal to the encountered
+ one, for example, because name abbreviation is supported. Therefore
+ two option names can be obtained:
+ - the registered one
+ - the one found at the command line
+
+ There are lot of style options, which can be used to tune the command
+ line parsing. In addition, it's possible to install additional parser
+ which will process custom option styles.
+
+ @todo mininal match length for guessing?
+ */
+ class BOOST_PROGRAM_OPTIONS_DECL cmdline {
+ public:
+
+ typedef ::boost::program_options::command_line_style::style_t style_t;
+
+ typedef function1<std::pair<std::string, std::string>,
+ const std::string&>
+ additional_parser;
+
+ typedef function1<std::vector<option>, std::vector<std::string>&>
+ style_parser;
+
+ /** Constructs a command line parser for (argc, argv) pair. Uses
+ style options passed in 'style', which should be binary or'ed values
+ of style_t enum. It can also be zero, in which case a "default"
+ style will be used. If 'allow_unregistered' is true, then allows
+ unregistered options. They will be assigned index 1 and are
+ assumed to have optional parameter.
+ */
+ cmdline(const std::vector<std::string>& args);
+
+ /** @overload */
+ cmdline(int argc, const char*const * argv);
+
+ void style(int style);
+ void allow_unregistered();
+
+ void set_options_description(const options_description& desc);
+ void set_positional_options(
+ const positional_options_description& m_positional);
+
+ std::vector<option> run();
+
+ std::vector<option> parse_long_option(std::vector<std::string>& args);
+ std::vector<option> parse_short_option(std::vector<std::string>& args);
+ std::vector<option> parse_dos_option(std::vector<std::string>& args);
+ std::vector<option> parse_disguised_long_option(
+ std::vector<std::string>& args);
+ std::vector<option> parse_terminator(
+ std::vector<std::string>& args);
+ std::vector<option> handle_additional_parser(
+ std::vector<std::string>& args);
+
+
+ /** Set additional parser. This will be called for each token
+ of command line. If first string in pair is not empty,
+ then the token is considered matched by this parser,
+ and the first string will be considered an option name
+ (which can be long or short), while the second will be
+ option's parameter (if not empty).
+ Note that additional parser can match only one token.
+ */
+ void set_additional_parser(additional_parser p);
+
+ void extra_style_parser(style_parser s);
+
+ void check_style(int style) const;
+
+
+ void init(const std::vector<std::string>& args);
+
+ void
+ finish_option(option& opt,
+ std::vector<std::string>& other_tokens);
+
+ // Copies of input.
+ std::vector<std::string> args;
+ style_t m_style;
+ bool m_allow_unregistered;
+
+ const options_description* m_desc;
+ const positional_options_description* m_positional;
+
+ additional_parser m_additional_parser;
+ style_parser m_style_parser;
+ };
+
+ void test_cmdline_detail();
+
+}}}
+
+#endif
+
diff --git a/boost/boost/program_options/detail/config_file.hpp b/boost/boost/program_options/detail/config_file.hpp
new file mode 100644
index 00000000000..638dff89d8c
--- /dev/null
+++ b/boost/boost/program_options/detail/config_file.hpp
@@ -0,0 +1,178 @@
+// Copyright Vladimir Prus 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)
+
+
+#ifndef BOOST_CONFIG_FILE_VP_2003_01_02
+#define BOOST_CONFIG_FILE_VP_2003_01_02
+
+#include <iosfwd>
+#include <string>
+#include <set>
+
+#include <boost/noncopyable.hpp>
+#include <boost/program_options/config.hpp>
+#include <boost/program_options/option.hpp>
+#include <boost/program_options/eof_iterator.hpp>
+
+#include <boost/detail/workaround.hpp>
+#if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3202))
+#include <boost/program_options/detail/convert.hpp>
+#endif
+
+#if BOOST_WORKAROUND(__DECCXX_VER, BOOST_TESTED_AT(60590042))
+#include <istream> // std::getline
+#endif
+
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/shared_ptr.hpp>
+
+
+
+namespace boost { namespace program_options { namespace detail {
+
+ /** Standalone parser for config files in ini-line format.
+ The parser is a model of single-pass lvalue iterator, and
+ default constructor creates past-the-end-iterator. The typical usage is:
+ config_file_iterator i(is, ... set of options ...), e;
+ for(; i !=e; ++i) {
+ *i;
+ }
+
+ Syntax conventions:
+
+ - config file can not contain positional options
+ - '#' is comment character: it is ignored together with
+ the rest of the line.
+ - variable assignments are in the form
+ name '=' value.
+ spaces around '=' are trimmed.
+ - Section names are given in brackets.
+
+ The actual option name is constructed by combining current section
+ name and specified option name, with dot between. If section_name
+ already contains dot at the end, new dot is not inserted. For example:
+ @verbatim
+ [gui.accessibility]
+ visual_bell=yes
+ @endverbatim
+ will result in option "gui.accessibility.visual_bell" with value
+ "yes" been returned.
+
+ TODO: maybe, we should just accept a pointer to options_description
+ class.
+ */
+ class common_config_file_iterator
+ : public eof_iterator<common_config_file_iterator, option>
+ {
+ public:
+ common_config_file_iterator() { found_eof(); }
+ common_config_file_iterator(
+ const std::set<std::string>& allowed_options);
+
+ virtual ~common_config_file_iterator() {}
+
+ public: // Method required by eof_iterator
+
+ void get();
+
+ protected: // Stubs for derived classes
+
+ // Obtains next line from the config file
+ // Note: really, this design is a bit ugly
+ // The most clean thing would be to pass 'line_iterator' to
+ // constructor of this class, but to avoid templating this class
+ // we'd need polymorphic iterator, which does not exist yet.
+ virtual bool getline(std::string&) { return false; }
+
+ private:
+ /** Adds another allowed option. If the 'name' ends with
+ '*', then all options with the same prefix are
+ allowed. For example, if 'name' is 'foo*', then 'foo1' and
+ 'foo_bar' are allowed. */
+ void add_option(const char* name);
+
+ // Returns true if 's' is a registered option name.
+ bool allowed_option(const std::string& s) const;
+
+ // That's probably too much data for iterator, since
+ // it will be copied, but let's not bother for now.
+ std::set<std::string> allowed_options;
+ // Invariant: no element is prefix of other element.
+ std::set<std::string> allowed_prefixes;
+ std::string m_prefix;
+ };
+
+ template<class charT>
+ class basic_config_file_iterator : public common_config_file_iterator {
+ public:
+ basic_config_file_iterator()
+ {
+ found_eof();
+ }
+
+ /** Creates a config file parser for the specified stream.
+ */
+ basic_config_file_iterator(std::basic_istream<charT>& is,
+ const std::set<std::string>& allowed_options);
+
+ private: // base overrides
+
+ bool getline(std::string&);
+
+ private: // internal data
+ shared_ptr<std::basic_istream<charT> > is;
+ };
+
+ typedef basic_config_file_iterator<char> config_file_iterator;
+ typedef basic_config_file_iterator<wchar_t> wconfig_file_iterator;
+
+
+ struct null_deleter
+ {
+ void operator()(void const *) const {}
+ };
+
+
+ template<class charT>
+ basic_config_file_iterator<charT>::
+ basic_config_file_iterator(std::basic_istream<charT>& is,
+ const std::set<std::string>& allowed_options)
+ : common_config_file_iterator(allowed_options)
+ {
+ this->is.reset(&is, null_deleter());
+ get();
+ }
+
+ // Specializing this function for wchar_t causes problems on
+ // borland and vc7, as well as on metrowerks. On the first two
+ // I don't know a workaround, so make use of 'to_internal' to
+ // avoid specialization.
+ template<class charT>
+ bool
+ basic_config_file_iterator<charT>::getline(std::string& s)
+ {
+ std::basic_string<charT> in;
+ if (std::getline(*is, in)) {
+ s = to_internal(in);
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ // Specialization is needed to workaround getline bug on Comeau.
+#if BOOST_WORKAROUND(__COMO_VERSION__, BOOST_TESTED_AT(4303)) || \
+ (defined(__sgi) && BOOST_WORKAROUND(_COMPILER_VERSION, BOOST_TESTED_AT(741)))
+ template<>
+ bool
+ basic_config_file_iterator<wchar_t>::getline(std::string& s);
+#endif
+
+
+
+}}}
+
+#endif
diff --git a/boost/boost/program_options/detail/convert.hpp b/boost/boost/program_options/detail/convert.hpp
new file mode 100644
index 00000000000..a22dd6f37c5
--- /dev/null
+++ b/boost/boost/program_options/detail/convert.hpp
@@ -0,0 +1,107 @@
+// Copyright Vladimir Prus 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)
+
+#ifndef BOOST_CONVERT_HPP_VP_2004_04_28
+#define BOOST_CONVERT_HPP_VP_2004_04_28
+
+#include <boost/program_options/config.hpp>
+
+#if !defined(BOOST_NO_STD_WSTRING)
+
+#include <boost/detail/workaround.hpp>
+
+#include <string>
+#include <vector>
+#include <locale>
+// for mbstate_t
+#include <cwchar>
+#include <stdexcept>
+
+#if defined(BOOST_NO_STDC_NAMESPACE)
+#include <wchar.h>
+namespace std
+{
+ using ::mbstate_t;
+}
+#endif
+
+namespace boost {
+
+ /** Converts from local 8 bit encoding into wchar_t string using
+ the specified locale facet. */
+ BOOST_PROGRAM_OPTIONS_DECL std::wstring
+ from_8_bit(const std::string& s,
+ const std::codecvt<wchar_t, char, std::mbstate_t>& cvt);
+
+ /** Converts from wchar_t string into local 8 bit encoding into using
+ the specified locale facet. */
+ BOOST_PROGRAM_OPTIONS_DECL std::string
+ to_8_bit(const std::wstring& s,
+ const std::codecvt<wchar_t, char, std::mbstate_t>& cvt);
+
+
+ /** Converts 's', which is assumed to be in UTF8 encoding, into wide
+ string. */
+ BOOST_PROGRAM_OPTIONS_DECL std::wstring
+ from_utf8(const std::string& s);
+
+ /** Converts wide string 's' into string in UTF8 encoding. */
+ BOOST_PROGRAM_OPTIONS_DECL std::string
+ to_utf8(const std::wstring& s);
+
+ /** Converts wide string 's' into local 8 bit encoding determined by
+ the current locale. */
+ BOOST_PROGRAM_OPTIONS_DECL std::string
+ to_local_8_bit(const std::wstring& s);
+
+ /** Converts 's', which is assumed to be in local 8 bit encoding, into wide
+ string. */
+ BOOST_PROGRAM_OPTIONS_DECL std::wstring
+ from_local_8_bit(const std::string& s);
+
+ namespace program_options
+ {
+ /** Convert the input string into internal encoding used by
+ program_options. Presence of this function allows to avoid
+ specializing all methods which access input on wchar_t.
+ */
+ BOOST_PROGRAM_OPTIONS_DECL std::string to_internal(const std::string&);
+ /** @overload */
+ BOOST_PROGRAM_OPTIONS_DECL std::string to_internal(const std::wstring&);
+
+ template<class T>
+ std::vector<std::string> to_internal(const std::vector<T>& s)
+ {
+ std::vector<std::string> result;
+ for (unsigned i = 0; i < s.size(); ++i)
+ result.push_back(to_internal(s[i]));
+ return result;
+ }
+
+ }
+
+
+
+}
+
+#else
+#include <vector>
+#include <string>
+namespace boost{
+ namespace program_options{
+ BOOST_PROGRAM_OPTIONS_DECL std::string to_internal(const std::string&);
+
+ template<class T>
+ std::vector<std::string> to_internal(const std::vector<T>& s)
+ {
+ std::vector<std::string> result;
+ for (unsigned i = 0; i < s.size(); ++i)
+ result.push_back(to_internal(s[i]));
+ return result;
+ }
+ }
+}
+#endif
+#endif
diff --git a/boost/boost/program_options/detail/parsers.hpp b/boost/boost/program_options/detail/parsers.hpp
new file mode 100644
index 00000000000..3391a689e81
--- /dev/null
+++ b/boost/boost/program_options/detail/parsers.hpp
@@ -0,0 +1,144 @@
+// Copyright Vladimir Prus 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)
+
+#ifndef BOOST_PARSERS_HPP_VP_2004_05_06
+#define BOOST_PARSERS_HPP_VP_2004_05_06
+
+#include <boost/program_options/detail/convert.hpp>
+
+namespace boost { namespace program_options {
+
+ namespace detail {
+ template<class charT, class Iterator>
+ std::vector<std::basic_string<charT> >
+ make_vector(Iterator i, Iterator e)
+ {
+ std::vector<std::basic_string<charT> > result;
+ // Some compilers don't have templated constructor for
+ // vector, so we can't create vector from (argv+1, argv+argc) range
+ for(; i != e; ++i)
+ result.push_back(*i);
+ return result;
+ }
+ }
+
+ template<class charT>
+ basic_command_line_parser<charT>::
+ basic_command_line_parser(const std::vector<
+ std::basic_string<charT> >& args)
+ : detail::cmdline(to_internal(args))
+ {}
+
+
+ template<class charT>
+ basic_command_line_parser<charT>::
+ basic_command_line_parser(int argc, charT* argv[])
+ : detail::cmdline(
+ // Explicit template arguments are required by gcc 3.3.1
+ // (at least mingw version), and do no harm on other compilers.
+ to_internal(detail::make_vector<charT, charT**>(argv+1, argv+argc)))
+ {}
+
+
+ template<class charT>
+ basic_command_line_parser<charT>&
+ basic_command_line_parser<charT>::options(const options_description& desc)
+ {
+ detail::cmdline::set_options_description(desc);
+ m_desc = &desc;
+ return *this;
+ }
+
+ template<class charT>
+ basic_command_line_parser<charT>&
+ basic_command_line_parser<charT>::positional(
+ const positional_options_description& desc)
+ {
+ detail::cmdline::set_positional_options(desc);
+ return *this;
+ }
+
+ template<class charT>
+ basic_command_line_parser<charT>&
+ basic_command_line_parser<charT>::style(int style)
+ {
+ detail::cmdline::style(style);
+ return *this;
+ }
+
+ template<class charT>
+ basic_command_line_parser<charT>&
+ basic_command_line_parser<charT>::extra_parser(ext_parser ext)
+ {
+ detail::cmdline::set_additional_parser(ext);
+ return *this;
+ }
+
+ template<class charT>
+ basic_command_line_parser<charT>&
+ basic_command_line_parser<charT>::allow_unregistered()
+ {
+ detail::cmdline::allow_unregistered();
+ return *this;
+ }
+
+ template<class charT>
+ basic_command_line_parser<charT>&
+ basic_command_line_parser<charT>::extra_style_parser(style_parser s)
+ {
+ detail::cmdline::extra_style_parser(s);
+ return *this;
+ }
+
+
+
+ template<class charT>
+ basic_parsed_options<charT>
+ basic_command_line_parser<charT>::run()
+ {
+ parsed_options result(m_desc);
+ result.options = detail::cmdline::run();
+
+ // Presense of parsed_options -> wparsed_options conversion
+ // does the trick.
+ return basic_parsed_options<charT>(result);
+ }
+
+
+ template<class charT>
+ basic_parsed_options<charT>
+ parse_command_line(int argc, charT* argv[],
+ const options_description& desc,
+ int style,
+ function1<std::pair<std::string, std::string>,
+ const std::string&> ext)
+ {
+ return basic_command_line_parser<charT>(argc, argv).options(desc).
+ style(style).extra_parser(ext).run();
+ }
+
+ template<class charT>
+ std::vector< std::basic_string<charT> >
+ collect_unrecognized(const std::vector< basic_option<charT> >& options,
+ enum collect_unrecognized_mode mode)
+ {
+ std::vector< std::basic_string<charT> > result;
+ for(unsigned i = 0; i < options.size(); ++i)
+ {
+ if (options[i].unregistered ||
+ (mode == include_positional && options[i].position_key != -1))
+ {
+ copy(options[i].original_tokens.begin(),
+ options[i].original_tokens.end(),
+ back_inserter(result));
+ }
+ }
+ return result;
+ }
+
+
+}}
+
+#endif
diff --git a/boost/boost/program_options/detail/utf8_codecvt_facet.hpp b/boost/boost/program_options/detail/utf8_codecvt_facet.hpp
new file mode 100644
index 00000000000..c3d4b945496
--- /dev/null
+++ b/boost/boost/program_options/detail/utf8_codecvt_facet.hpp
@@ -0,0 +1,25 @@
+// Copyright © 2001 Ronald Garcia, Indiana University (garcia@osl.iu.edu)
+// Andrew Lumsdaine, Indiana University (lums@osl.iu.edu). Permission to copy,
+// use, modify, sell and distribute this software is granted provided this
+// copyright notice appears in all copies. This software is provided "as is"
+// without express or implied warranty, and with no claim as to its suitability
+// for any purpose.
+
+#ifndef BOOST_PROGRAM_OPTIONS_UTF8_CODECVT_FACET_HPP
+#define BOOST_PROGRAM_OPTIONS_UTF8_CODECVT_FACET_HPP
+
+#include <boost/program_options/config.hpp>
+
+#define BOOST_UTF8_BEGIN_NAMESPACE \
+ namespace boost { namespace program_options { namespace detail {
+
+#define BOOST_UTF8_END_NAMESPACE }}}
+#define BOOST_UTF8_DECL BOOST_PROGRAM_OPTIONS_DECL
+
+#include <boost/detail/utf8_codecvt_facet.hpp>
+
+#undef BOOST_UTF8_BEGIN_NAMESPACE
+#undef BOOST_UTF8_END_NAMESPACE
+#undef BOOST_UTF8_DECL
+
+#endif
diff --git a/boost/boost/program_options/detail/value_semantic.hpp b/boost/boost/program_options/detail/value_semantic.hpp
new file mode 100644
index 00000000000..68e4188c301
--- /dev/null
+++ b/boost/boost/program_options/detail/value_semantic.hpp
@@ -0,0 +1,189 @@
+// Copyright Vladimir Prus 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)
+
+// This file defines template functions that are declared in
+// ../value_semantic.hpp.
+
+#include <boost/throw_exception.hpp>
+
+namespace boost { namespace program_options {
+
+ extern BOOST_PROGRAM_OPTIONS_DECL std::string arg;
+
+ template<class T, class charT>
+ std::string
+ typed_value<T, charT>::name() const
+ {
+ if (!m_default_value.empty() && !m_default_value_as_text.empty()) {
+ return arg + " (=" + m_default_value_as_text + ")";
+ } else {
+ return arg;
+ }
+ }
+
+ template<class T, class charT>
+ void
+ typed_value<T, charT>::notify(const boost::any& value_store) const
+ {
+ const T* value = boost::any_cast<const T>(&value_store);
+ if (m_store_to) {
+ *m_store_to = *value;
+ }
+ if (m_notifier) {
+ m_notifier(*value);
+ }
+ }
+
+ namespace validators {
+ /* If v.size() > 1, throw validation_error.
+ If v.size() == 1, return v.front()
+ Otherwise, returns a reference to a statically allocated
+ empty string if 'allow_empty' and throws validation_error
+ otherwise. */
+ template<class charT>
+ const std::basic_string<charT>& get_single_string(
+ const std::vector<std::basic_string<charT> >& v,
+ bool allow_empty = false)
+ {
+ static std::basic_string<charT> empty;
+ if (v.size() > 1)
+ throw validation_error("multiple values not allowed");
+ if (v.size() == 1)
+ return v.front();
+ else if (allow_empty)
+ return empty;
+ else
+ throw validation_error("at least one value required");
+ }
+
+ /* Throws multiple_occurrences if 'value' is not empty. */
+ BOOST_PROGRAM_OPTIONS_DECL void
+ check_first_occurrence(const boost::any& value);
+ }
+
+ using namespace validators;
+
+ /** Validates 's' and updates 'v'.
+ @pre 'v' is either empty or in the state assigned by the previous
+ invocation of 'validate'.
+ The target type is specified via a parameter which has the type of
+ pointer to the desired type. This is workaround for compilers without
+ partial template ordering, just like the last 'long/int' parameter.
+ */
+ template<class T, class charT>
+ void validate(boost::any& v,
+ const std::vector< std::basic_string<charT> >& xs,
+ T*, long)
+ {
+ validators::check_first_occurrence(v);
+ std::basic_string<charT> s(validators::get_single_string(xs));
+ try {
+ v = any(lexical_cast<T>(s));
+ }
+ catch(const bad_lexical_cast&) {
+ boost::throw_exception(invalid_option_value(s));
+ }
+ }
+
+ BOOST_PROGRAM_OPTIONS_DECL void validate(boost::any& v,
+ const std::vector<std::string>& xs,
+ bool*,
+ int);
+
+#if !defined(BOOST_NO_STD_WSTRING)
+ BOOST_PROGRAM_OPTIONS_DECL void validate(boost::any& v,
+ const std::vector<std::wstring>& xs,
+ bool*,
+ int);
+#endif
+ // For some reason, this declaration, which is require by the standard,
+ // cause gcc 3.2 to not generate code to specialization defined in
+ // value_semantic.cpp
+#if ! ( ( BOOST_WORKAROUND(__GNUC__, <= 3) &&\
+ BOOST_WORKAROUND(__GNUC_MINOR__, < 3) ) || \
+ ( BOOST_WORKAROUND(BOOST_MSVC, == 1310) ) \
+ )
+ BOOST_PROGRAM_OPTIONS_DECL void validate(boost::any& v,
+ const std::vector<std::string>& xs,
+ std::string*,
+ int);
+
+#if !defined(BOOST_NO_STD_WSTRING)
+ BOOST_PROGRAM_OPTIONS_DECL void validate(boost::any& v,
+ const std::vector<std::wstring>& xs,
+ std::string*,
+ int);
+#endif
+#endif
+
+ /** Validates sequences. Allows multiple values per option occurrence
+ and multiple occurrences. */
+ template<class T, class charT>
+ void validate(boost::any& v,
+ const std::vector<std::basic_string<charT> >& s,
+ std::vector<T>*,
+ int)
+ {
+ if (v.empty()) {
+ v = boost::any(std::vector<T>());
+ }
+ std::vector<T>* tv = boost::any_cast< std::vector<T> >(&v);
+ assert(NULL != tv);
+ for (unsigned i = 0; i < s.size(); ++i)
+ {
+ try {
+ tv->push_back(boost::lexical_cast<T>(s[i]));
+ }
+ catch(const bad_lexical_cast& /*e*/) {
+ boost::throw_exception(invalid_option_value(s[i]));
+ }
+ }
+ }
+
+ template<class T, class charT>
+ void
+ typed_value<T, charT>::
+ xparse(boost::any& value_store,
+ const std::vector<std::basic_string<charT> >& new_tokens) const
+ {
+ validate(value_store, new_tokens, (T*)0, 0);
+ }
+
+ template<class T>
+ typed_value<T>*
+ value()
+ {
+ // Explicit qualification is vc6 workaround.
+ return boost::program_options::value<T>(0);
+ }
+
+ template<class T>
+ typed_value<T>*
+ value(T* v)
+ {
+ typed_value<T>* r = new typed_value<T>(v);
+
+ return r;
+ }
+
+ template<class T>
+ typed_value<T, wchar_t>*
+ wvalue()
+ {
+ return wvalue<T>(0);
+ }
+
+ template<class T>
+ typed_value<T, wchar_t>*
+ wvalue(T* v)
+ {
+ typed_value<T, wchar_t>* r = new typed_value<T, wchar_t>(v);
+
+ return r;
+ }
+
+
+
+}}
diff --git a/boost/boost/program_options/environment_iterator.hpp b/boost/boost/program_options/environment_iterator.hpp
new file mode 100644
index 00000000000..c8156930db6
--- /dev/null
+++ b/boost/boost/program_options/environment_iterator.hpp
@@ -0,0 +1,51 @@
+// Copyright Vladimir Prus 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)
+
+#ifndef BOOST_ENVIRONMENT_ITERATOR_VP_2004_05_14
+#define BOOST_ENVIRONMENT_ITERATOR_VP_2004_05_14
+
+#include "eof_iterator.hpp"
+
+#include <utility>
+#include <string>
+#include <cassert>
+
+namespace boost {
+
+ class environment_iterator
+ : public eof_iterator<environment_iterator,
+ std::pair<std::string, std::string> >
+ {
+ public:
+ environment_iterator(char** environment)
+ : m_environment(environment)
+ {
+ get();
+ }
+
+ environment_iterator()
+ {
+ found_eof();
+ }
+
+ void get()
+ {
+ if (*m_environment == 0)
+ found_eof();
+ else {
+ std::string s(*m_environment);
+ std::string::size_type n = s.find('=');
+ assert(n != s.npos);
+ value().first = s.substr(0, n);
+ value().second = s.substr(n+1);
+ }
+ ++m_environment;
+ }
+
+ private:
+ char** m_environment;
+ };
+}
+#endif
diff --git a/boost/boost/program_options/eof_iterator.hpp b/boost/boost/program_options/eof_iterator.hpp
new file mode 100644
index 00000000000..0efa6f7720b
--- /dev/null
+++ b/boost/boost/program_options/eof_iterator.hpp
@@ -0,0 +1,97 @@
+// Copyright Vladimir Prus 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)
+
+#ifndef BOOST_EOF_ITERATOR_VP_2004_03_12
+#define BOOST_EOF_ITERATOR_VP_2004_03_12
+
+#include <boost/iterator/iterator_facade.hpp>
+
+namespace boost {
+
+ /** The 'eof_iterator' class is useful for constructing forward iterators
+ in cases where iterator extract data from some source and it's easy
+ to detect 'eof' -- i.e. the situation where there's no data. One
+ apparent example is reading lines from a file.
+
+ Implementing such iterators using 'iterator_facade' directly would
+ require to create class with three core operation, a couple of
+ constructors. When using 'eof_iterator', the derived class should define
+ only one method to get new value, plus a couple of constructors.
+
+ The basic idea is that iterator has 'eof' bit. Two iterators are equal
+ only if both have their 'eof' bits set. The 'get' method either obtains
+ the new value or sets the 'eof' bit.
+
+ Specifically, derived class should define:
+
+ 1. A default constructor, which creates iterator with 'eof' bit set. The
+ constructor body should call 'found_eof' method defined here.
+ 2. Some other constructor. It should initialize some 'data pointer' used
+ in iterator operation and then call 'get'.
+ 3. The 'get' method. It should operate this way:
+ - look at some 'data pointer' to see if new element is available;
+ if not, it should call 'found_eof'.
+ - extract new element and store it at location returned by the 'value'
+ method.
+ - advance the data pointer.
+
+ Essentially, the 'get' method has the functionality of both 'increment'
+ and 'dereference'. It's very good for the cases where data extraction
+ implicitly moves data pointer, like for stream operation.
+ */
+ template<class Derived, class ValueType>
+ class eof_iterator : public iterator_facade<Derived, const ValueType,
+ forward_traversal_tag>
+ {
+ public:
+ eof_iterator()
+ : m_at_eof(false)
+ {}
+
+ protected: // interface for derived
+
+ /** Returns the reference which should be used by derived
+ class to store the next value. */
+ ValueType& value()
+ {
+ return m_value;
+ }
+
+ /** Should be called by derived class to indicate that it can't
+ produce next element. */
+ void found_eof()
+ {
+ m_at_eof = true;
+ }
+
+
+ private: // iterator core operations
+ friend class iterator_core_access;
+
+ void increment()
+ {
+ static_cast<Derived&>(*this).get();
+ }
+
+ bool equal(const eof_iterator& other) const
+ {
+ if (m_at_eof && other.m_at_eof)
+ return true;
+ else
+ return false;
+ }
+
+ const ValueType& dereference() const
+ {
+ return m_value;
+ }
+
+ bool m_at_eof;
+ ValueType m_value;
+ };
+}
+
+#endif
+
diff --git a/boost/boost/program_options/errors.hpp b/boost/boost/program_options/errors.hpp
new file mode 100644
index 00000000000..11ff01bd481
--- /dev/null
+++ b/boost/boost/program_options/errors.hpp
@@ -0,0 +1,146 @@
+// Copyright Vladimir Prus 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)
+
+
+#ifndef BOOST_ERRORS_VP_2003_01_02
+#define BOOST_ERRORS_VP_2003_01_02
+
+#include <boost/program_options/config.hpp>
+
+#include <string>
+#include <stdexcept>
+#include <vector>
+
+
+
+namespace boost { namespace program_options {
+
+ /** Base class for all errors in the library. */
+ class BOOST_PROGRAM_OPTIONS_DECL error : public std::logic_error {
+ public:
+ error(const std::string& what) : std::logic_error(what) {}
+ };
+
+ class BOOST_PROGRAM_OPTIONS_DECL invalid_syntax : public error {
+ public:
+ invalid_syntax(const std::string& tokens, const std::string& msg)
+ : error(std::string(msg).append(" in '").append(tokens).append("'")),
+ tokens(tokens), msg(msg)
+ {}
+
+ // gcc says that throw specification on dtor is loosened
+ // without this line
+ ~invalid_syntax() throw() {}
+
+ // TODO: copy ctor might throw
+ std::string tokens, msg;
+ };
+
+ /** Class thrown when option name is not recognized. */
+ class BOOST_PROGRAM_OPTIONS_DECL unknown_option : public error {
+ public:
+ unknown_option(const std::string& name)
+ : error(std::string("unknown option ").append(name))
+ {}
+ };
+
+ /** Class thrown when there's ambiguity amoung several possible options. */
+ class BOOST_PROGRAM_OPTIONS_DECL ambiguous_option : public error {
+ public:
+ ambiguous_option(const std::string& name,
+ const std::vector<std::string>& alternatives)
+ : error(std::string("ambiguous option ").append(name)),
+ alternatives(alternatives)
+ {}
+
+ ~ambiguous_option() throw() {}
+
+ // TODO: copy ctor might throw
+ std::vector<std::string> alternatives;
+ };
+
+ /** Class thrown when there are several option values, but
+ user called a method which cannot return them all. */
+ class BOOST_PROGRAM_OPTIONS_DECL multiple_values : public error {
+ public:
+ multiple_values(const std::string& what) : error(what) {}
+ };
+
+ /** Class thrown when there are several occurrences of an
+ option, but user called a method which cannot return
+ them all. */
+ class BOOST_PROGRAM_OPTIONS_DECL multiple_occurrences : public error {
+ public:
+ multiple_occurrences(const std::string& what) : error(what) {}
+ };
+
+ /** Class thrown when value of option is incorrect. */
+ class BOOST_PROGRAM_OPTIONS_DECL validation_error : public error {
+ public:
+ validation_error(const std::string& what) : error(what) {}
+ ~validation_error() throw() {}
+ void set_option_name(const std::string& option);
+
+ const char* what() const throw();
+ private:
+ mutable std::string m_message; // For on-demand formatting in 'what'
+ std::string m_option_name; // The name of the option which
+ // caused the exception.
+ };
+
+ class BOOST_PROGRAM_OPTIONS_DECL invalid_option_value
+ : public validation_error
+ {
+ public:
+ invalid_option_value(const std::string& value);
+#ifndef BOOST_NO_STD_WSTRING
+ invalid_option_value(const std::wstring& value);
+#endif
+ };
+
+ /** Class thrown when there are too many positional options. */
+ class BOOST_PROGRAM_OPTIONS_DECL too_many_positional_options_error : public error {
+ public:
+ too_many_positional_options_error(const std::string& what)
+ : error(what) {}
+ };
+
+ /** Class thrown when there are too few positional options. */
+ class BOOST_PROGRAM_OPTIONS_DECL too_few_positional_options_error : public error {
+ public:
+ too_few_positional_options_error(const std::string& what)
+ : error(what) {}
+ };
+
+ class BOOST_PROGRAM_OPTIONS_DECL invalid_command_line_syntax : public invalid_syntax {
+ public:
+ enum kind_t {
+ long_not_allowed = 30,
+ long_adjacent_not_allowed,
+ short_adjacent_not_allowed,
+ empty_adjacent_parameter,
+ missing_parameter,
+ extra_parameter
+ };
+
+ invalid_command_line_syntax(const std::string& tokens, kind_t kind);
+ kind_t kind() const;
+ protected:
+ static std::string error_message(kind_t kind);
+ private:
+ kind_t m_kind;
+ };
+
+ class BOOST_PROGRAM_OPTIONS_DECL invalid_command_line_style : public error {
+ public:
+ invalid_command_line_style(const std::string& msg)
+ : error(msg)
+ {}
+ };
+
+}}
+
+
+#endif
diff --git a/boost/boost/program_options/option.hpp b/boost/boost/program_options/option.hpp
new file mode 100644
index 00000000000..635f70833dd
--- /dev/null
+++ b/boost/boost/program_options/option.hpp
@@ -0,0 +1,60 @@
+// Copyright Vladimir Prus 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)
+
+#ifndef BOOST_OPTION_HPP_VP_2004_02_25
+#define BOOST_OPTION_HPP_VP_2004_02_25
+
+#include <boost/program_options/config.hpp>
+
+#include <string>
+#include <vector>
+
+namespace boost { namespace program_options {
+
+ /** Option found in input source.
+ Contains a key and a value. The key, in turn, can be a string (name of
+ an option), or an integer (position in input source) -- in case no name
+ is specified. The latter is only possible for command line.
+ The template parameter specifies the type of char used for storing the
+ option's value.
+ */
+ template<class charT>
+ class basic_option {
+ public:
+ basic_option() : position_key(-1), unregistered(false) {}
+ basic_option(const std::string& string_key,
+ const std::vector< std::string> &value)
+ : string_key(string_key), value(value), unregistered(false)
+ {}
+
+ /** String key of this option. Intentionally independent of the template
+ parameter. */
+ std::string string_key;
+ /** Position key of this option. All options without an explicit name are
+ sequentially numbered starting from 0. If an option has explicit name,
+ 'position_key' is equal to -1. It is possible that both
+ position_key and string_key is specified, in case name is implicitly
+ added.
+ */
+ int position_key;
+ /** Option's value */
+ std::vector< std::basic_string<charT> > value;
+ /** The original unchanged tokens this option was
+ created from. */
+ std::vector< std::basic_string<charT> > original_tokens;
+ /** True if option was not recognized. In that case,
+ 'string_key' and 'value' are results of purely
+ syntactic parsing of source. The original tokens can be
+ recovered from the "original_tokens" member.
+ */
+ bool unregistered;
+
+ };
+ typedef basic_option<char> option;
+ typedef basic_option<wchar_t> woption;
+
+}}
+
+#endif
diff --git a/boost/boost/program_options/options_description.hpp b/boost/boost/program_options/options_description.hpp
new file mode 100644
index 00000000000..7e8a73fa5f1
--- /dev/null
+++ b/boost/boost/program_options/options_description.hpp
@@ -0,0 +1,241 @@
+// Copyright Vladimir Prus 2002-2004.
+// Copyright Bertolt Mildner 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)
+
+
+#ifndef BOOST_OPTION_DESCRIPTION_VP_2003_05_19
+#define BOOST_OPTION_DESCRIPTION_VP_2003_05_19
+
+#include <boost/program_options/config.hpp>
+#include <boost/program_options/errors.hpp>
+#include <boost/program_options/value_semantic.hpp>
+
+#include <boost/function.hpp>
+#include <boost/shared_ptr.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/any.hpp>
+
+#include <string>
+#include <vector>
+#include <set>
+#include <map>
+#include <stdexcept>
+
+#include <iosfwd>
+
+/** Boost namespace */
+namespace boost {
+/** Namespace for the library. */
+namespace program_options {
+
+ /** Describes one possible command line/config file option. There are two
+ kinds of properties of an option. First describe it syntactically and
+ are used only to validate input. Second affect interpretation of the
+ option, for example default value for it or function that should be
+ called when the value is finally known. Routines which perform parsing
+ never use second kind of properties -- they are side effect free.
+ @sa options_description
+ */
+ class BOOST_PROGRAM_OPTIONS_DECL option_description {
+ public:
+
+ option_description();
+
+ /** Initializes the object with the passed data.
+
+ Note: it would be nice to make the second parameter auto_ptr,
+ to explicitly pass ownership. Unfortunately, it's often needed to
+ create objects of types derived from 'value_semantic':
+ options_description d;
+ d.add_options()("a", parameter<int>("n")->default_value(1));
+ Here, the static type returned by 'parameter' should be derived
+ from value_semantic.
+
+ Alas, derived->base conversion for auto_ptr does not really work,
+ see
+ http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/papers/2000/n1232.pdf
+ http://std.dkuug.dk/jtc1/sc22/wg21/docs/cwg_defects.html#84
+
+ So, we have to use plain old pointers. Besides, users are not
+ expected to use the constructor directly.
+
+
+ The 'name' parameter is interpreted by the following rules:
+ - if there's no "," character in 'name', it specifies long name
+ - otherwise, the part before "," specifies long name and the part
+ after -- long name.
+ */
+ option_description(const char* name,
+ const value_semantic* s);
+
+ /** Initializes the class with the passed data.
+ */
+ option_description(const char* name,
+ const value_semantic* s,
+ const char* description);
+
+ virtual ~option_description();
+
+ enum match_result { no_match, full_match, approximate_match };
+
+ /** Given 'option', specified in the input source,
+ return 'true' is 'option' specifies *this.
+ */
+ match_result match(const std::string& option, bool approx) const;
+
+ /** Return the key that should identify the option, in
+ particular in the variables_map class.
+ The 'option' parameter is the option spelling from the
+ input source.
+ If option name contains '*', returns 'option'.
+ If long name was specified, it's the long name, otherwise
+ it's a short name with prepended '-'.
+ */
+ const std::string& key(const std::string& option) const;
+
+ const std::string& long_name() const;
+
+ /// Explanation of this option
+ const std::string& description() const;
+
+ /// Semantic of option's value
+ shared_ptr<const value_semantic> semantic() const;
+
+ /// Returns the option name, formatted suitably for usage message.
+ std::string format_name() const;
+
+ /** Return the parameter name and properties, formatted suitably for
+ usage message. */
+ std::string format_parameter() const;
+
+ private:
+
+ option_description& set_name(const char* name);
+
+ std::string m_short_name, m_long_name, m_description;
+ // shared_ptr is needed to simplify memory management in
+ // copy ctor and destructor.
+ shared_ptr<const value_semantic> m_value_semantic;
+ };
+
+ class options_description;
+
+ /** Class which provides convenient creation syntax to option_description.
+ */
+ class BOOST_PROGRAM_OPTIONS_DECL options_description_easy_init {
+ public:
+ options_description_easy_init(options_description* owner);
+
+ options_description_easy_init&
+ operator()(const char* name,
+ const char* description);
+
+ options_description_easy_init&
+ operator()(const char* name,
+ const value_semantic* s);
+
+ options_description_easy_init&
+ operator()(const char* name,
+ const value_semantic* s,
+ const char* description);
+
+ private:
+ options_description* owner;
+ };
+
+
+ /** A set of option descriptions. This provides convenient interface for
+ adding new option (the add_options) method, and facilities to search
+ for options by name.
+
+ See @ref a_adding_options "here" for option adding interface discussion.
+ @sa option_description
+ */
+ class BOOST_PROGRAM_OPTIONS_DECL options_description {
+ public:
+ static const unsigned m_default_line_length = 80;
+
+ /** Creates the instance. */
+ options_description(unsigned line_length = m_default_line_length);
+ /** Creates the instance. The 'caption' parameter gives the name of
+ this 'options_description' instance. Primarily useful for output.
+ */
+ options_description(const std::string& caption,
+ unsigned line_length = m_default_line_length);
+ /** Adds new variable description. Throws duplicate_variable_error if
+ either short or long name matches that of already present one.
+ */
+ void add(shared_ptr<option_description> desc);
+ /** Adds a group of option description. This has the same
+ effect as adding all option_descriptions in 'desc'
+ individually, except that output operator will show
+ a separate group.
+ Returns *this.
+ */
+ options_description& add(const options_description& desc);
+
+ public:
+ /** Returns an object of implementation-defined type suitable for adding
+ options to options_description. The returned object will
+ have overloaded operator() with parameter type matching
+ 'option_description' constructors. Calling the operator will create
+ new option_description instance and add it.
+ */
+ options_description_easy_init add_options();
+
+ const option_description& find(const std::string& name, bool approx)
+ const;
+
+ const option_description* find_nothrow(const std::string& name,
+ bool approx) const;
+
+
+ const std::vector< shared_ptr<option_description> >& options() const;
+
+ /** Produces a human readable output of 'desc', listing options,
+ their descriptions and allowed parameters. Other options_description
+ instances previously passed to add will be output separately. */
+ friend BOOST_PROGRAM_OPTIONS_DECL std::ostream& operator<<(std::ostream& os,
+ const options_description& desc);
+
+ /** Output 'desc' to the specified stream, calling 'f' to output each
+ option_description element. */
+ void print(std::ostream& os) const;
+
+ private:
+ typedef std::map<std::string, int>::const_iterator name2index_iterator;
+ typedef std::pair<name2index_iterator, name2index_iterator>
+ approximation_range;
+
+ //approximation_range find_approximation(const std::string& prefix) const;
+
+ std::string m_caption;
+ const unsigned m_line_length;
+ // Data organization is chosen because:
+ // - there could be two names for one option
+ // - option_add_proxy needs to know the last added option
+ std::vector< shared_ptr<option_description> > m_options;
+
+ // Whether the option comes from one of declared groups.
+#if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, BOOST_TESTED_AT(313))
+ // vector<bool> is buggy there, see
+ // http://support.microsoft.com/default.aspx?scid=kb;en-us;837698
+ std::vector<char> belong_to_group;
+#else
+ std::vector<bool> belong_to_group;
+#endif
+
+ std::vector< shared_ptr<options_description> > groups;
+
+ };
+
+ /** Class thrown when duplicate option description is found. */
+ class BOOST_PROGRAM_OPTIONS_DECL duplicate_option_error : public error {
+ public:
+ duplicate_option_error(const std::string& what) : error(what) {}
+ };
+}}
+
+#endif
diff --git a/boost/boost/program_options/parsers.hpp b/boost/boost/program_options/parsers.hpp
new file mode 100644
index 00000000000..1b79a80ec96
--- /dev/null
+++ b/boost/boost/program_options/parsers.hpp
@@ -0,0 +1,228 @@
+// Copyright Vladimir Prus 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)
+
+
+#ifndef BOOST_PARSERS_VP_2003_05_19
+#define BOOST_PARSERS_VP_2003_05_19
+
+#include <boost/program_options/config.hpp>
+#include <boost/program_options/option.hpp>
+#include <boost/program_options/detail/cmdline.hpp>
+
+#include <boost/function/function1.hpp>
+
+#include <iosfwd>
+#include <vector>
+#include <utility>
+
+namespace boost { namespace program_options {
+
+ class options_description;
+ class positional_options_description;
+
+
+ /** Results of parsing an input source.
+ The primary use of this class is passing information from parsers
+ component to value storage component. This class does not makes
+ much sense itself.
+ */
+ template<class charT>
+ class basic_parsed_options {
+ public:
+ explicit basic_parsed_options(const options_description* description)
+ : description(description) {}
+ /** Options found in the source. */
+ std::vector< basic_option<charT> > options;
+ /** Options description that was used for parsing.
+ Parsers should return pointer to the instance of
+ option_description passed to them, and issues of lifetime are
+ up to the caller. Can be NULL.
+ */
+ const options_description* description;
+ };
+
+ /** Specialization of basic_parsed_options which:
+ - provides convenient conversion from basic_parsed_options<char>
+ - stores the passed char-based options for later use.
+ */
+ template<>
+ class BOOST_PROGRAM_OPTIONS_DECL basic_parsed_options<wchar_t> {
+ public:
+ /** Constructs wrapped options from options in UTF8 encoding. */
+ explicit basic_parsed_options(const basic_parsed_options<char>& po);
+
+ std::vector< basic_option<wchar_t> > options;
+ const options_description* description;
+
+ /** Stores UTF8 encoded options that were passed to constructor,
+ to avoid reverse conversion in some cases. */
+ basic_parsed_options<char> utf8_encoded_options;
+ };
+
+ typedef basic_parsed_options<char> parsed_options;
+ typedef basic_parsed_options<wchar_t> wparsed_options;
+
+ /** Augments basic_parsed_options<wchar_t> with conversion from
+ 'parsed_options' */
+
+
+ typedef function1<std::pair<std::string, std::string>, const std::string&> ext_parser;
+
+ /** Command line parser.
+
+ The class allows one to specify all the information needed for parsing
+ and to parse the command line. It is primarily needed to
+ emulate named function parameters -- a regular function with 5
+ parameters will be hard to use and creating overloads with a smaller
+ nuber of parameters will be confusing.
+
+ For the most common case, the function parse_command_line is a better
+ alternative.
+
+ There are two typedefs -- command_line_parser and wcommand_line_parser,
+ for charT == char and charT == wchar_t cases.
+ */
+ template<class charT>
+ class basic_command_line_parser : private detail::cmdline {
+ public:
+ /** Creates a command line parser for the specified arguments
+ list. The 'args' parameter should not include program name.
+ */
+ basic_command_line_parser(const std::vector<
+ std::basic_string<charT> >& args);
+ /** Creates a command line parser for the specified arguments
+ list. The parameters should be the same as passed to 'main'.
+ */
+ basic_command_line_parser(int argc, charT* argv[]);
+
+ /** Sets options descriptions to use. */
+ basic_command_line_parser& options(const options_description& desc);
+ /** Sets positional options description to use. */
+ basic_command_line_parser& positional(
+ const positional_options_description& desc);
+
+ /** Sets the command line style. */
+ basic_command_line_parser& style(int);
+ /** Sets the extra parsers. */
+ basic_command_line_parser& extra_parser(ext_parser);
+
+ /** Parses the options and returns the result of parsing.
+ Throws on error.
+ */
+ basic_parsed_options<charT> run();
+
+ /** Specifies that unregistered options are allowed and should
+ be passed though. For each command like token that looks
+ like an option but does not contain a recognized name, an
+ instance of basic_option<charT> will be added to result,
+ with 'unrecognized' field set to 'true'. It's possible to
+ collect all unrecognized options with the 'collect_unrecognized'
+ funciton.
+ */
+ basic_command_line_parser& allow_unregistered();
+
+ using detail::cmdline::style_parser;
+
+ basic_command_line_parser& extra_style_parser(style_parser s);
+
+ private:
+ const options_description* m_desc;
+ };
+
+ typedef basic_command_line_parser<char> command_line_parser;
+ typedef basic_command_line_parser<wchar_t> wcommand_line_parser;
+
+ /** Creates instance of 'command_line_parser', passes parameters to it,
+ and returns the result of calling the 'run' method.
+ */
+ template<class charT>
+ basic_parsed_options<charT>
+ parse_command_line(int argc, charT* argv[],
+ const options_description&,
+ int style = 0,
+ function1<std::pair<std::string, std::string>,
+ const std::string&> ext
+ = ext_parser());
+
+ /** Parse a config file.
+ */
+ template<class charT>
+#if ! BOOST_WORKAROUND(__ICL, BOOST_TESTED_AT(700))
+ BOOST_PROGRAM_OPTIONS_DECL
+#endif
+ basic_parsed_options<charT>
+ parse_config_file(std::basic_istream<charT>&, const options_description&);
+
+ /** Controls if the 'collect_unregistered' function should
+ include positional options, or not. */
+ enum collect_unrecognized_mode
+ { include_positional, exclude_positional };
+
+ /** Collects the original tokens for all named options with
+ 'unregistered' flag set. If 'mode' is 'include_positional'
+ also collects all positional options.
+ Returns the vector of origianl tokens for all collected
+ options.
+ */
+ template<class charT>
+ std::vector< std::basic_string<charT> >
+ collect_unrecognized(const std::vector< basic_option<charT> >& options,
+ enum collect_unrecognized_mode mode);
+
+ /** Parse environment.
+
+ For each environment variable, the 'name_mapper' function is called to
+ obtain the option name. If it returns empty string, the variable is
+ ignored.
+
+ This is done since naming of environment variables is typically
+ different from the naming of command line options.
+ */
+ BOOST_PROGRAM_OPTIONS_DECL parsed_options
+ parse_environment(const options_description&,
+ const function1<std::string, std::string>& name_mapper);
+
+ /** Parse environment.
+
+ Takes all environment variables which start with 'prefix'. The option
+ name is obtained from variable name by removing the prefix and
+ converting the remaining string into lower case.
+ */
+ BOOST_PROGRAM_OPTIONS_DECL parsed_options
+ parse_environment(const options_description&, const std::string& prefix);
+
+ /** @overload
+ This function exists to resolve ambiguity between the two above
+ functions when second argument is of 'char*' type. There's implicit
+ conversion to both function1 and string.
+ */
+ BOOST_PROGRAM_OPTIONS_DECL parsed_options
+ parse_environment(const options_description&, const char* prefix);
+
+ #ifdef _WIN32
+ /** Parses the char* string which is passed to WinMain function on
+ windows. This function is provided for convenience, and because it's
+ not clear how to portably access split command line string from
+ runtime library and if it always exists.
+ This function is available only on Windows.
+ */
+ BOOST_PROGRAM_OPTIONS_DECL std::vector<std::string>
+ split_winmain(const std::string& cmdline);
+
+#ifndef BOOST_NO_STD_WSTRING
+ /** @overload */
+ BOOST_PROGRAM_OPTIONS_DECL std::vector<std::wstring>
+ split_winmain(const std::wstring& cmdline);
+ #endif
+#endif
+
+
+}}
+
+#undef DECL
+
+#include "boost/program_options/detail/parsers.hpp"
+
+#endif
diff --git a/boost/boost/program_options/positional_options.hpp b/boost/boost/program_options/positional_options.hpp
new file mode 100644
index 00000000000..01406e089af
--- /dev/null
+++ b/boost/boost/program_options/positional_options.hpp
@@ -0,0 +1,65 @@
+// Copyright Vladimir Prus 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)
+
+#ifndef BOOST_PROGRAM_OPTIONS_POSITIONAL_OPTIONS_VP_2004_03_02
+#define BOOST_PROGRAM_OPTIONS_POSITIONAL_OPTIONS_VP_2004_03_02
+
+#include <boost/program_options/config.hpp>
+
+#include <vector>
+#include <string>
+
+namespace boost { namespace program_options {
+
+ /** Describes positional options.
+
+ The class allows to guess option names for positional options, which
+ are specified on the command line and are identified by the position.
+ The class uses the information provided by the user to associate a name
+ with every positional option, or tell that no name is known.
+
+ The primary assumption is that only the relative order of the
+ positional options themselves matters, and that any interleaving
+ ordinary options don't affect interpretation of positional options.
+
+ The user initializes the class by specifying that first N positional
+ options should be given the name X1, following M options should be given
+ the name X2 and so on.
+ */
+ class BOOST_PROGRAM_OPTIONS_DECL positional_options_description {
+ public:
+ positional_options_description();
+
+ /** Species that up to 'max_count' next positional options
+ should be given the 'name'. The value of '-1' means 'unlimited'.
+ No calls to 'add' can be made after call with 'max_value' equal to
+ '-1'.
+ */
+ positional_options_description&
+ add(const char* name, int max_count);
+
+ /** Returns the maximum number of positional options that can
+ be present. Can return (numeric_limits<unsigned>::max)() to
+ indicate unlimited number. */
+ unsigned max_total_count() const;
+
+ /** Returns the name that should be associated with positional
+ options at 'position'.
+ Precondition: position < max_total_count()
+ */
+ const std::string& name_for_position(unsigned position) const;
+
+ private:
+ // List of names corresponding to the positions. If the number of
+ // positions is unlimited, then the last name is stored in
+ // m_trailing;
+ std::vector<std::string> m_names;
+ std::string m_trailing;
+ };
+
+}}
+
+#endif
+
diff --git a/boost/boost/program_options/value_semantic.hpp b/boost/boost/program_options/value_semantic.hpp
new file mode 100644
index 00000000000..8708389431e
--- /dev/null
+++ b/boost/boost/program_options/value_semantic.hpp
@@ -0,0 +1,356 @@
+// Copyright Vladimir Prus 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)
+
+#ifndef BOOST_VALUE_SEMANTIC_HPP_VP_2004_02_24
+#define BOOST_VALUE_SEMANTIC_HPP_VP_2004_02_24
+
+#include <boost/program_options/config.hpp>
+#include <boost/program_options/errors.hpp>
+
+#include <boost/any.hpp>
+#include <boost/function/function1.hpp>
+#include <boost/lexical_cast.hpp>
+
+
+#include <string>
+#include <vector>
+#include <typeinfo>
+
+namespace boost { namespace program_options {
+
+ /** Class which specifies how the option's value is to be parsed
+ and converted into C++ types.
+ */
+ class BOOST_PROGRAM_OPTIONS_DECL value_semantic {
+ public:
+ /** Returns the name of the option. The name is only meaningful
+ for automatic help message.
+ */
+ virtual std::string name() const = 0;
+
+ /** The minimum number of tokens for this option that
+ should be present on the command line. */
+ virtual unsigned min_tokens() const = 0;
+
+ /** The maximum number of tokens for this option that
+ should be present on the command line. */
+ virtual unsigned max_tokens() const = 0;
+
+ /** Returns true if values from different sources should be composed.
+ Otherwise, value from the first source is used and values from
+ other sources are discarded.
+ */
+ virtual bool is_composing() const = 0;
+
+ /** Parses a group of tokens that specify a value of option.
+ Stores the result in 'value_store', using whatever representation
+ is desired. May be be called several times if value of the same
+ option is specified more than once.
+ */
+ virtual void parse(boost::any& value_store,
+ const std::vector<std::string>& new_tokens,
+ bool utf8) const
+ = 0;
+
+ /** Called to assign default value to 'value_store'. Returns
+ true if default value is assigned, and false if no default
+ value exists. */
+ virtual bool apply_default(boost::any& value_store) const = 0;
+
+ /** Called when final value of an option is determined.
+ */
+ virtual void notify(const boost::any& value_store) const = 0;
+
+ virtual ~value_semantic() {}
+ };
+
+ /** Helper class which perform necessary character conversions in the
+ 'parse' method and forwards the data further.
+ */
+ template<class charT>
+ class value_semantic_codecvt_helper {
+ // Nothing here. Specializations to follow.
+ };
+
+ /** Helper conversion class for values that accept ascii
+ strings as input.
+ Overrides the 'parse' method and defines new 'xparse'
+ method taking std::string. Depending on whether input
+ to parse is ascii or UTF8, will pass it to xparse unmodified,
+ or with UTF8->ascii conversion.
+ */
+ template<>
+ class BOOST_PROGRAM_OPTIONS_DECL
+ value_semantic_codecvt_helper<char> : public value_semantic {
+ private: // base overrides
+ void parse(boost::any& value_store,
+ const std::vector<std::string>& new_tokens,
+ bool utf8) const;
+ protected: // interface for derived classes.
+ virtual void xparse(boost::any& value_store,
+ const std::vector<std::string>& new_tokens)
+ const = 0;
+ };
+
+ /** Helper conversion class for values that accept ascii
+ strings as input.
+ Overrides the 'parse' method and defines new 'xparse'
+ method taking std::wstring. Depending on whether input
+ to parse is ascii or UTF8, will recode input to Unicode, or
+ pass it unmodified.
+ */
+ template<>
+ class BOOST_PROGRAM_OPTIONS_DECL
+ value_semantic_codecvt_helper<wchar_t> : public value_semantic {
+ private: // base overrides
+ void parse(boost::any& value_store,
+ const std::vector<std::string>& new_tokens,
+ bool utf8) const;
+ protected: // interface for derived classes.
+#if !defined(BOOST_NO_STD_WSTRING)
+ virtual void xparse(boost::any& value_store,
+ const std::vector<std::wstring>& new_tokens)
+ const = 0;
+#endif
+ };
+
+ /** Class which specifies a simple handling of a value: the value will
+ have string type and only one token is allowed. */
+ class BOOST_PROGRAM_OPTIONS_DECL
+ untyped_value : public value_semantic_codecvt_helper<char> {
+ public:
+ untyped_value(bool zero_tokens = false)
+ : m_zero_tokens(zero_tokens)
+ {}
+
+ std::string name() const;
+
+ unsigned min_tokens() const;
+ unsigned max_tokens() const;
+
+ bool is_composing() const { return false; }
+
+ /** If 'value_store' is already initialized, or new_tokens
+ has more than one elements, throws. Otherwise, assigns
+ the first string from 'new_tokens' to 'value_store', without
+ any modifications.
+ */
+ void xparse(boost::any& value_store,
+ const std::vector<std::string>& new_tokens) const;
+
+ /** Does nothing. */
+ bool apply_default(boost::any&) const { return false; }
+
+ /** Does nothing. */
+ void notify(const boost::any&) const {}
+ private:
+ bool m_zero_tokens;
+ };
+
+ /** Base class for all option that have a fixed type, and are
+ willing to announce this type to the outside world.
+ Any 'value_semantics' for which you want to find out the
+ type can be dynamic_cast-ed to typed_value_base. If conversion
+ succeeds, the 'type' method can be called.
+ */
+ class typed_value_base
+ {
+ public:
+ // Returns the type of the value described by this
+ // object.
+ virtual const std::type_info& value_type() const = 0;
+ // Not really needed, since deletion from this
+ // class is silly, but just in case.
+ virtual ~typed_value_base() {}
+ };
+
+
+ /** Class which handles value of a specific type. */
+ template<class T, class charT = char>
+ class typed_value : public value_semantic_codecvt_helper<charT>,
+ public typed_value_base
+ {
+ public:
+ /** Ctor. The 'store_to' parameter tells where to store
+ the value when it's known. The parameter can be NULL. */
+ typed_value(T* store_to)
+ : m_store_to(store_to), m_composing(false),
+ m_multitoken(false), m_zero_tokens(false)
+ {}
+
+ /** Specifies default value, which will be used
+ if none is explicitly specified. The type 'T' should
+ provide operator<< for ostream.
+ */
+ typed_value* default_value(const T& v)
+ {
+ m_default_value = boost::any(v);
+ m_default_value_as_text = boost::lexical_cast<std::string>(v);
+ return this;
+ }
+
+ /** Specifies default value, which will be used
+ if none is explicitly specified. Unlike the above overload,
+ the type 'T' need not provide operator<< for ostream,
+ but textual representation of default value must be provided
+ by the user.
+ */
+ typed_value* default_value(const T& v, const std::string& textual)
+ {
+ m_default_value = boost::any(v);
+ m_default_value_as_text = textual;
+ return this;
+ }
+
+ /** Specifies a function to be called when the final value
+ is determined. */
+ typed_value* notifier(function1<void, const T&> f)
+ {
+ m_notifier = f;
+ return this;
+ }
+
+ /** Specifies that the value is composing. See the 'is_composing'
+ method for explanation.
+ */
+ typed_value* composing()
+ {
+ m_composing = true;
+ return this;
+ }
+
+ /** Specifies that the value can span multiple tokens. */
+ typed_value* multitoken()
+ {
+ m_multitoken = true;
+ return this;
+ }
+
+ typed_value* zero_tokens()
+ {
+ m_zero_tokens = true;
+ return this;
+ }
+
+
+ public: // value semantic overrides
+
+ std::string name() const;
+
+ bool is_composing() const { return m_composing; }
+
+ unsigned min_tokens() const
+ {
+ if (m_zero_tokens) {
+ return 0;
+ } else {
+ return 1;
+ }
+ }
+
+ unsigned max_tokens() const {
+ if (m_multitoken) {
+ return 32000;
+ } else if (m_zero_tokens) {
+ return 0;
+ } else {
+ return 1;
+ }
+ }
+
+
+ /** Creates an instance of the 'validator' class and calls
+ its operator() to perform the actual conversion. */
+ void xparse(boost::any& value_store,
+ const std::vector< std::basic_string<charT> >& new_tokens)
+ const;
+
+ /** If default value was specified via previous call to
+ 'default_value', stores that value into 'value_store'.
+ Returns true if default value was stored.
+ */
+ virtual bool apply_default(boost::any& value_store) const
+ {
+ if (m_default_value.empty()) {
+ return false;
+ } else {
+ value_store = m_default_value;
+ return true;
+ }
+ }
+
+ /** If an address of variable to store value was specified
+ when creating *this, stores the value there. Otherwise,
+ does nothing. */
+ void notify(const boost::any& value_store) const;
+
+ public: // typed_value_base overrides
+
+ const std::type_info& value_type() const
+ {
+ return typeid(T);
+ }
+
+
+ private:
+ T* m_store_to;
+
+ // Default value is stored as boost::any and not
+ // as boost::optional to avoid unnecessary instantiations.
+ boost::any m_default_value;
+ std::string m_default_value_as_text;
+ bool m_composing, m_implicit, m_multitoken, m_zero_tokens;
+ boost::function1<void, const T&> m_notifier;
+ };
+
+
+ /** Creates a typed_value<T> instance. This function is the primary
+ method to create value_semantic instance for a specific type, which
+ can later be passed to 'option_description' constructor.
+ The second overload is used when it's additionally desired to store the
+ value of option into program variable.
+ */
+ template<class T>
+ typed_value<T>*
+ value();
+
+ /** @overload
+ */
+ template<class T>
+ typed_value<T>*
+ value(T* v);
+
+ /** Creates a typed_value<T> instance. This function is the primary
+ method to create value_semantic instance for a specific type, which
+ can later be passed to 'option_description' constructor.
+ */
+ template<class T>
+ typed_value<T, wchar_t>*
+ wvalue();
+
+ /** @overload
+ */
+ template<class T>
+ typed_value<T, wchar_t>*
+ wvalue(T* v);
+
+ /** Works the same way as the 'value<bool>' function, but the created
+ value_semantic won't accept any explicit value. So, if the option
+ is present on the command line, the value will be 'true'.
+ */
+ BOOST_PROGRAM_OPTIONS_DECL typed_value<bool>*
+ bool_switch();
+
+ /** @overload
+ */
+ BOOST_PROGRAM_OPTIONS_DECL typed_value<bool>*
+ bool_switch(bool* v);
+
+}}
+
+#include "boost/program_options/detail/value_semantic.hpp"
+
+#endif
+
diff --git a/boost/boost/program_options/variables_map.hpp b/boost/boost/program_options/variables_map.hpp
new file mode 100644
index 00000000000..0ba070da451
--- /dev/null
+++ b/boost/boost/program_options/variables_map.hpp
@@ -0,0 +1,195 @@
+// Copyright Vladimir Prus 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)
+
+
+#ifndef BOOST_VARIABLES_MAP_VP_2003_05_19
+#define BOOST_VARIABLES_MAP_VP_2003_05_19
+
+#include <boost/program_options/config.hpp>
+
+#include <boost/any.hpp>
+#include <boost/shared_ptr.hpp>
+
+#include <string>
+#include <map>
+#include <set>
+
+namespace boost { namespace program_options {
+
+ template<class charT>
+ class basic_parsed_options;
+
+ class value_semantic;
+ class variables_map;
+
+ // forward declaration
+
+ /** Stores in 'm' all options that are defined in 'options'.
+ If 'm' already has a non-defaulted value of an option, that value
+ is not changed, even if 'options' specify some value.
+ */
+ BOOST_PROGRAM_OPTIONS_DECL void store(const basic_parsed_options<char>& options, variables_map& m,
+ bool utf8 = false);
+
+ /** Stores in 'm' all options that are defined in 'options'.
+ If 'm' already has a non-defaulted value of an option, that value
+ is not changed, even if 'options' specify some value.
+ This is wide character variant.
+ */
+ BOOST_PROGRAM_OPTIONS_DECL void store(const basic_parsed_options<wchar_t>& options,
+ variables_map& m);
+
+
+ /** Runs all 'notify' function for options in 'm'. */
+ BOOST_PROGRAM_OPTIONS_DECL void notify(variables_map& m);
+
+ /** Class holding value of option. Contains details about how the
+ value is set and allows to conveniently obtain the value.
+ */
+ class BOOST_PROGRAM_OPTIONS_DECL variable_value {
+ public:
+ variable_value() : m_defaulted(false) {}
+ variable_value(const boost::any& v, bool defaulted)
+ : v(v), m_defaulted(defaulted)
+ {}
+
+ /** If stored value if of type T, returns that value. Otherwise,
+ throws boost::bad_any_cast exception. */
+ template<class T>
+ const T& as() const {
+ return boost::any_cast<const T&>(v);
+ }
+ /** @overload */
+ template<class T>
+ T& as() {
+ return boost::any_cast<T&>(v);
+ }
+
+ /// Returns true if no value is stored.
+ bool empty() const;
+ /** Returns true if the value was not explicitly
+ given, but has default value. */
+ bool defaulted() const;
+ /** Returns the contained value. */
+ const boost::any& value() const;
+
+ /** Returns the contained value. */
+ boost::any& value();
+ private:
+ boost::any v;
+ bool m_defaulted;
+ // Internal reference to value semantic. We need to run
+ // notifications when *final* values of options are known, and
+ // they are known only after all sources are stored. By that
+ // time options_description for the first source might not
+ // be easily accessible, so we need to store semantic here.
+ shared_ptr<const value_semantic> m_value_semantic;
+
+ friend void store(const basic_parsed_options<char>& options,
+ variables_map& m, bool);
+ friend void notify(variables_map& m);
+ };
+
+ /** Implements string->string mapping with convenient value casting
+ facilities. */
+ class BOOST_PROGRAM_OPTIONS_DECL abstract_variables_map {
+ public:
+ abstract_variables_map();
+ abstract_variables_map(const abstract_variables_map* next);
+
+ virtual ~abstract_variables_map() {}
+
+ /** Obtains the value of variable 'name', from *this and
+ possibly from the chain of variable maps.
+
+ - if there's no value in *this.
+ - if there's next variable map, returns value from it
+ - otherwise, returns empty value
+
+ - if there's defaulted value
+ - if there's next varaible map, which has a non-defauled
+ value, return that
+ - otherwise, return value from *this
+
+ - if there's a non-defauled value, returns it.
+ */
+ const variable_value& operator[](const std::string& name) const;
+
+ /** Sets next variable map, which will be used to find
+ variables not found in *this. */
+ void next(abstract_variables_map* next);
+
+ private:
+ /** Returns value of variable 'name' stored in *this, or
+ empty value otherwise. */
+ virtual const variable_value& get(const std::string& name) const = 0;
+
+ const abstract_variables_map* m_next;
+ };
+
+ /** Concrete variables map which store variables in real map.
+
+ This class is derived from std::map<std::string, variable_value>,
+ so you can use all map operators to examine its content.
+ */
+ class BOOST_PROGRAM_OPTIONS_DECL variables_map : public abstract_variables_map,
+ public std::map<std::string, variable_value>
+ {
+ public:
+ variables_map();
+ variables_map(const abstract_variables_map* next);
+
+ // Resolve conflict between inherited operators.
+ const variable_value& operator[](const std::string& name) const
+ { return abstract_variables_map::operator[](name); }
+
+ private:
+ /** Implementation of abstract_variables_map::get
+ which does 'find' in *this. */
+ const variable_value& get(const std::string& name) const;
+
+ /** Names of option with 'final' values -- which should not
+ be changed by subsequence assignments. */
+ std::set<std::string> m_final;
+
+ friend void store(const basic_parsed_options<char>& options,
+ variables_map& xm,
+ bool utf8);
+ };
+
+
+ /*
+ * Templates/inlines
+ */
+
+ inline bool
+ variable_value::empty() const
+ {
+ return v.empty();
+ }
+
+ inline bool
+ variable_value::defaulted() const
+ {
+ return m_defaulted;
+ }
+
+ inline
+ const boost::any&
+ variable_value::value() const
+ {
+ return v;
+ }
+
+ inline
+ boost::any&
+ variable_value::value()
+ {
+ return v;
+ }
+
+}}
+
+#endif
diff --git a/boost/boost/program_options/version.hpp b/boost/boost/program_options/version.hpp
new file mode 100644
index 00000000000..748094361bb
--- /dev/null
+++ b/boost/boost/program_options/version.hpp
@@ -0,0 +1,19 @@
+// Copyright Vladimir Prus 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)
+
+#ifndef BOOST_PROGRAM_OPTIONS_VERSION_HPP_VP_2004_04_05
+#define BOOST_PROGRAM_OPTIONS_VERSION_HPP_VP_2004_04_05
+
+/** The version of the source interface.
+ The value will be incremented whenever a change is made which might
+ cause compilation errors for existing code.
+*/
+#ifdef BOOST_PROGRAM_OPTIONS_VERSION
+#error BOOST_PROGRAM_OPTIONS_VERSION already defined
+#endif
+#define BOOST_PROGRAM_OPTIONS_VERSION 2
+
+
+#endif
diff --git a/boost/boost/progress.hpp b/boost/boost/progress.hpp
new file mode 100644
index 00000000000..bac280b0e15
--- /dev/null
+++ b/boost/boost/progress.hpp
@@ -0,0 +1,143 @@
+// boost progress.hpp header file ------------------------------------------//
+
+// Copyright Beman Dawes 1994-99. 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/timer for documentation.
+
+// Revision History
+// 1 Dec 01 Add leading progress display strings (suggested by Toon Knapen)
+// 20 May 01 Introduce several static_casts<> to eliminate warning messages
+// (Fixed by Beman, reported by Herve Bronnimann)
+// 12 Jan 01 Change to inline implementation to allow use without library
+// builds. See docs for more rationale. (Beman Dawes)
+// 22 Jul 99 Name changed to .hpp
+// 16 Jul 99 Second beta
+// 6 Jul 99 Initial boost version
+
+#ifndef BOOST_PROGRESS_HPP
+#define BOOST_PROGRESS_HPP
+
+#include <boost/timer.hpp>
+#include <boost/utility.hpp> // for noncopyable
+#include <boost/cstdint.hpp> // for uintmax_t
+#include <iostream> // for ostream, cout, etc
+#include <string> // for string
+
+namespace boost {
+
+// progress_timer ----------------------------------------------------------//
+
+// A progress_timer behaves like a timer except that the destructor displays
+// an elapsed time message at an appropriate place in an appropriate form.
+
+class progress_timer : public timer, private noncopyable
+{
+
+ public:
+ explicit progress_timer( std::ostream & os = std::cout )
+ // os is hint; implementation may ignore, particularly in embedded systems
+ : m_os(os) {}
+ ~progress_timer()
+ {
+ // A) Throwing an exception from a destructor is a Bad Thing.
+ // B) The progress_timer destructor does output which may throw.
+ // C) A progress_timer is usually not critical to the application.
+ // Therefore, wrap the I/O in a try block, catch and ignore all exceptions.
+ try
+ {
+ // use istream instead of ios_base to workaround GNU problem (Greg Chicares)
+ std::istream::fmtflags old_flags = m_os.setf( std::istream::fixed,
+ std::istream::floatfield );
+ std::streamsize old_prec = m_os.precision( 2 );
+ m_os << elapsed() << " s\n" // "s" is System International d'Unités std
+ << std::endl;
+ m_os.flags( old_flags );
+ m_os.precision( old_prec );
+ }
+
+ catch (...) {} // eat any exceptions
+ } // ~progress_timer
+
+ private:
+ std::ostream & m_os;
+};
+
+
+// progress_display --------------------------------------------------------//
+
+// progress_display displays an appropriate indication of
+// progress at an appropriate place in an appropriate form.
+
+// NOTE: (Jan 12, 2001) Tried to change unsigned long to boost::uintmax_t, but
+// found some compilers couldn't handle the required conversion to double.
+// Reverted to unsigned long until the compilers catch up.
+
+class progress_display : private noncopyable
+{
+ public:
+ explicit progress_display( unsigned long expected_count,
+ std::ostream & os = std::cout,
+ const std::string & s1 = "\n", //leading strings
+ const std::string & s2 = "",
+ const std::string & s3 = "" )
+ // os is hint; implementation may ignore, particularly in embedded systems
+ : m_os(os), m_s1(s1), m_s2(s2), m_s3(s3) { restart(expected_count); }
+
+ void restart( unsigned long expected_count )
+ // Effects: display appropriate scale
+ // Postconditions: count()==0, expected_count()==expected_count
+ {
+ _count = _next_tic_count = _tic = 0;
+ _expected_count = expected_count;
+
+ m_os << m_s1 << "0% 10 20 30 40 50 60 70 80 90 100%\n"
+ << m_s2 << "|----|----|----|----|----|----|----|----|----|----|"
+ << std::endl // endl implies flush, which ensures display
+ << m_s3;
+ if ( !_expected_count ) _expected_count = 1; // prevent divide by zero
+ } // restart
+
+ unsigned long operator+=( unsigned long increment )
+ // Effects: Display appropriate progress tic if needed.
+ // Postconditions: count()== original count() + increment
+ // Returns: count().
+ {
+ if ( (_count += increment) >= _next_tic_count ) { display_tic(); }
+ return _count;
+ }
+
+ unsigned long operator++() { return operator+=( 1 ); }
+ unsigned long count() const { return _count; }
+ unsigned long expected_count() const { return _expected_count; }
+
+ private:
+ std::ostream & m_os; // may not be present in all imps
+ const std::string m_s1; // string is more general, safer than
+ const std::string m_s2; // const char *, and efficiency or size are
+ const std::string m_s3; // not issues
+
+ unsigned long _count, _expected_count, _next_tic_count;
+ unsigned int _tic;
+ void display_tic()
+ {
+ // use of floating point ensures that both large and small counts
+ // work correctly. static_cast<>() is also used several places
+ // to suppress spurious compiler warnings.
+ unsigned int tics_needed =
+ static_cast<unsigned int>(
+ (static_cast<double>(_count)/_expected_count)*50.0 );
+ do { m_os << '*' << std::flush; } while ( ++_tic < tics_needed );
+ _next_tic_count =
+ static_cast<unsigned long>((_tic/50.0)*_expected_count);
+ if ( _count == _expected_count ) {
+ if ( _tic < 51 ) m_os << '*';
+ m_os << std::endl;
+ }
+ } // display_tic
+};
+
+} // namespace boost
+
+#endif // BOOST_PROGRESS_HPP
diff --git a/boost/boost/property_map.hpp b/boost/boost/property_map.hpp
new file mode 100644
index 00000000000..9077ea37cd1
--- /dev/null
+++ b/boost/boost/property_map.hpp
@@ -0,0 +1,546 @@
+// (C) Copyright Jeremy Siek 1999-2001.
+// 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/property_map for documentation.
+
+#ifndef BOOST_PROPERTY_MAP_HPP
+#define BOOST_PROPERTY_MAP_HPP
+
+#include <cassert>
+#include <boost/config.hpp>
+#include <boost/pending/cstddef.hpp>
+#include <boost/detail/iterator.hpp>
+#include <boost/concept_check.hpp>
+#include <boost/concept_archetype.hpp>
+
+namespace boost {
+
+ //=========================================================================
+ // property_traits class
+
+ template <typename PA>
+ struct property_traits {
+ typedef typename PA::key_type key_type;
+ typedef typename PA::value_type value_type;
+ typedef typename PA::reference reference;
+ typedef typename PA::category category;
+ };
+
+ //=========================================================================
+ // property_traits category tags
+
+ namespace detail {
+ enum ePropertyMapID { READABLE_PA, WRITABLE_PA,
+ READ_WRITE_PA, LVALUE_PA, OP_BRACKET_PA,
+ RAND_ACCESS_ITER_PA, LAST_PA };
+ }
+ struct readable_property_map_tag { enum { id = detail::READABLE_PA }; };
+ struct writable_property_map_tag { enum { id = detail::WRITABLE_PA }; };
+ struct read_write_property_map_tag :
+ public readable_property_map_tag,
+ public writable_property_map_tag
+ { enum { id = detail::READ_WRITE_PA }; };
+
+ struct lvalue_property_map_tag : public read_write_property_map_tag
+ { enum { id = detail::LVALUE_PA }; };
+
+ //=========================================================================
+ // property_traits specialization for pointers
+
+#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ // The user will just have to create their own specializations for
+ // other pointers types if the compiler does not have partial
+ // specializations. Sorry!
+#define BOOST_SPECIALIZE_PROPERTY_TRAITS_PTR(TYPE) \
+ template <> \
+ struct property_traits<TYPE*> { \
+ typedef TYPE value_type; \
+ typedef value_type& reference; \
+ typedef std::ptrdiff_t key_type; \
+ typedef lvalue_property_map_tag category; \
+ }; \
+ template <> \
+ struct property_traits<const TYPE*> { \
+ typedef TYPE value_type; \
+ typedef const value_type& reference; \
+ typedef std::ptrdiff_t key_type; \
+ typedef lvalue_property_map_tag category; \
+ }
+
+ BOOST_SPECIALIZE_PROPERTY_TRAITS_PTR(long);
+ BOOST_SPECIALIZE_PROPERTY_TRAITS_PTR(unsigned long);
+ BOOST_SPECIALIZE_PROPERTY_TRAITS_PTR(int);
+ BOOST_SPECIALIZE_PROPERTY_TRAITS_PTR(unsigned int);
+ BOOST_SPECIALIZE_PROPERTY_TRAITS_PTR(short);
+ BOOST_SPECIALIZE_PROPERTY_TRAITS_PTR(unsigned short);
+ BOOST_SPECIALIZE_PROPERTY_TRAITS_PTR(char);
+ BOOST_SPECIALIZE_PROPERTY_TRAITS_PTR(unsigned char);
+ BOOST_SPECIALIZE_PROPERTY_TRAITS_PTR(signed char);
+ BOOST_SPECIALIZE_PROPERTY_TRAITS_PTR(bool);
+ BOOST_SPECIALIZE_PROPERTY_TRAITS_PTR(float);
+ BOOST_SPECIALIZE_PROPERTY_TRAITS_PTR(double);
+ BOOST_SPECIALIZE_PROPERTY_TRAITS_PTR(long double);
+
+ // This may need to be turned off for some older compilers that don't have
+ // wchar_t intrinsically.
+# ifndef BOOST_NO_INTRINSIC_WCHAR_T
+ template <>
+ struct property_traits<wchar_t*> {
+ typedef wchar_t value_type;
+ typedef value_type& reference;
+ typedef std::ptrdiff_t key_type;
+ typedef lvalue_property_map_tag category;
+ };
+ template <>
+ struct property_traits<const wchar_t*> {
+ typedef wchar_t value_type;
+ typedef const value_type& reference;
+ typedef std::ptrdiff_t key_type;
+ typedef lvalue_property_map_tag category;
+ };
+# endif
+
+#else
+ template <class T>
+ struct property_traits<T*> {
+ typedef T value_type;
+ typedef value_type& reference;
+ typedef std::ptrdiff_t key_type;
+ typedef lvalue_property_map_tag category;
+ };
+ template <class T>
+ struct property_traits<const T*> {
+ typedef T value_type;
+ typedef const value_type& reference;
+ typedef std::ptrdiff_t key_type;
+ typedef lvalue_property_map_tag category;
+ };
+#endif
+
+#if !defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP)
+ // MSVC doesn't have Koenig lookup, so the user has to
+ // do boost::get() anyways, and the using clause
+ // doesn't really work for MSVC.
+} // namespace boost
+#endif
+
+ // These need to go in global namespace because Koenig
+ // lookup does not apply to T*.
+
+ // V must be convertible to T
+ template <class T, class V>
+ inline void put(T* pa, std::ptrdiff_t k, const V& val) { pa[k] = val; }
+
+ template <class T>
+ inline const T& get(const T* pa, std::ptrdiff_t k) { return pa[k]; }
+
+#if !defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP)
+namespace boost {
+ using ::put;
+ using ::get;
+#endif
+
+ //=========================================================================
+ // concept checks for property maps
+
+ template <class PMap, class Key>
+ struct ReadablePropertyMapConcept
+ {
+ typedef typename property_traits<PMap>::key_type key_type;
+ typedef typename property_traits<PMap>::reference reference;
+ typedef typename property_traits<PMap>::category Category;
+ typedef boost::readable_property_map_tag ReadableTag;
+ void constraints() {
+ function_requires< ConvertibleConcept<Category, ReadableTag> >();
+
+ val = get(pmap, k);
+ }
+ PMap pmap;
+ Key k;
+ typename property_traits<PMap>::value_type val;
+ };
+ template <typename KeyArchetype, typename ValueArchetype>
+ struct readable_property_map_archetype {
+ typedef KeyArchetype key_type;
+ typedef ValueArchetype value_type;
+ typedef convertible_to_archetype<ValueArchetype> reference;
+ typedef readable_property_map_tag category;
+ };
+ template <typename K, typename V>
+ const typename readable_property_map_archetype<K,V>::reference&
+ get(const readable_property_map_archetype<K,V>&,
+ const typename readable_property_map_archetype<K,V>::key_type&)
+ {
+ typedef typename readable_property_map_archetype<K,V>::reference R;
+ return static_object<R>::get();
+ }
+
+
+ template <class PMap, class Key>
+ struct WritablePropertyMapConcept
+ {
+ typedef typename property_traits<PMap>::key_type key_type;
+ typedef typename property_traits<PMap>::category Category;
+ typedef boost::writable_property_map_tag WritableTag;
+ void constraints() {
+ function_requires< ConvertibleConcept<Category, WritableTag> >();
+ put(pmap, k, val);
+ }
+ PMap pmap;
+ Key k;
+ typename property_traits<PMap>::value_type val;
+ };
+ template <typename KeyArchetype, typename ValueArchetype>
+ struct writable_property_map_archetype {
+ typedef KeyArchetype key_type;
+ typedef ValueArchetype value_type;
+ typedef void reference;
+ typedef writable_property_map_tag category;
+ };
+ template <typename K, typename V>
+ void put(const writable_property_map_archetype<K,V>&,
+ const typename writable_property_map_archetype<K,V>::key_type&,
+ const typename writable_property_map_archetype<K,V>::value_type&) { }
+
+
+ template <class PMap, class Key>
+ struct ReadWritePropertyMapConcept
+ {
+ typedef typename property_traits<PMap>::category Category;
+ typedef boost::read_write_property_map_tag ReadWriteTag;
+ void constraints() {
+ function_requires< ReadablePropertyMapConcept<PMap, Key> >();
+ function_requires< WritablePropertyMapConcept<PMap, Key> >();
+ function_requires< ConvertibleConcept<Category, ReadWriteTag> >();
+ }
+ };
+ template <typename KeyArchetype, typename ValueArchetype>
+ struct read_write_property_map_archetype
+ : public readable_property_map_archetype<KeyArchetype, ValueArchetype>,
+ public writable_property_map_archetype<KeyArchetype, ValueArchetype>
+ {
+ typedef KeyArchetype key_type;
+ typedef ValueArchetype value_type;
+ typedef convertible_to_archetype<ValueArchetype> reference;
+ typedef read_write_property_map_tag category;
+ };
+
+
+ template <class PMap, class Key>
+ struct LvaluePropertyMapConcept
+ {
+ typedef typename property_traits<PMap>::category Category;
+ typedef boost::lvalue_property_map_tag LvalueTag;
+ typedef typename property_traits<PMap>::reference reference;
+
+ void constraints() {
+ function_requires< ReadablePropertyMapConcept<PMap, Key> >();
+ function_requires< ConvertibleConcept<Category, LvalueTag> >();
+
+ typedef typename property_traits<PMap>::value_type value_type;
+ typedef typename require_same<
+ const value_type&, reference>::type req;
+
+ reference ref = pmap[k];
+ ignore_unused_variable_warning(ref);
+ }
+ PMap pmap;
+ Key k;
+ };
+ template <typename KeyArchetype, typename ValueArchetype>
+ struct lvalue_property_map_archetype
+ : public readable_property_map_archetype<KeyArchetype, ValueArchetype>
+ {
+ typedef KeyArchetype key_type;
+ typedef ValueArchetype value_type;
+ typedef const ValueArchetype& reference;
+ typedef lvalue_property_map_tag category;
+ const value_type& operator[](const key_type&) const {
+ return static_object<value_type>::get();
+ }
+ };
+
+ template <class PMap, class Key>
+ struct Mutable_LvaluePropertyMapConcept
+ {
+ typedef typename property_traits<PMap>::category Category;
+ typedef boost::lvalue_property_map_tag LvalueTag;
+ typedef typename property_traits<PMap>::reference reference;
+ void constraints() {
+ boost::function_requires< ReadWritePropertyMapConcept<PMap, Key> >();
+ boost::function_requires<ConvertibleConcept<Category, LvalueTag> >();
+
+ typedef typename property_traits<PMap>::value_type value_type;
+ typedef typename require_same<
+ value_type&,
+ reference>::type req;
+
+ reference ref = pmap[k];
+ ignore_unused_variable_warning(ref);
+ }
+ PMap pmap;
+ Key k;
+ };
+ template <typename KeyArchetype, typename ValueArchetype>
+ struct mutable_lvalue_property_map_archetype
+ : public readable_property_map_archetype<KeyArchetype, ValueArchetype>,
+ public writable_property_map_archetype<KeyArchetype, ValueArchetype>
+ {
+ typedef KeyArchetype key_type;
+ typedef ValueArchetype value_type;
+ typedef ValueArchetype& reference;
+ typedef lvalue_property_map_tag category;
+ value_type& operator[](const key_type&) const {
+ return static_object<value_type>::get();
+ }
+ };
+
+ struct identity_property_map;
+
+ // A helper class for constructing a property map
+ // from a class that implements operator[]
+
+ template <class Reference, class LvaluePropertyMap>
+ struct put_get_helper { };
+
+ template <class PropertyMap, class Reference, class K>
+ inline Reference
+ get(const put_get_helper<Reference, PropertyMap>& pa, const K& k)
+ {
+ Reference v = static_cast<const PropertyMap&>(pa)[k];
+ return v;
+ }
+ template <class PropertyMap, class Reference, class K, class V>
+ inline void
+ put(const put_get_helper<Reference, PropertyMap>& pa, K k, const V& v)
+ {
+ static_cast<const PropertyMap&>(pa)[k] = v;
+ }
+
+ //=========================================================================
+ // Adapter to turn a RandomAccessIterator into a property map
+
+ template <class RandomAccessIterator,
+ class IndexMap
+#ifdef BOOST_NO_STD_ITERATOR_TRAITS
+ , class T, class R
+#else
+ , class T = typename std::iterator_traits<RandomAccessIterator>::value_type
+ , class R = typename std::iterator_traits<RandomAccessIterator>::reference
+#endif
+ >
+ class iterator_property_map
+ : public boost::put_get_helper< R,
+ iterator_property_map<RandomAccessIterator, IndexMap,
+ T, R> >
+ {
+ public:
+ typedef typename property_traits<IndexMap>::key_type key_type;
+ typedef T value_type;
+ typedef R reference;
+ typedef boost::lvalue_property_map_tag category;
+
+ inline iterator_property_map(
+ RandomAccessIterator cc = RandomAccessIterator(),
+ const IndexMap& _id = IndexMap() )
+ : iter(cc), index(_id) { }
+ inline R operator[](key_type v) const { return *(iter + get(index, v)) ; }
+ protected:
+ RandomAccessIterator iter;
+ IndexMap index;
+ };
+
+#if !defined BOOST_NO_STD_ITERATOR_TRAITS
+ template <class RAIter, class ID>
+ inline iterator_property_map<
+ RAIter, ID,
+ typename std::iterator_traits<RAIter>::value_type,
+ typename std::iterator_traits<RAIter>::reference>
+ make_iterator_property_map(RAIter iter, ID id) {
+ function_requires< RandomAccessIteratorConcept<RAIter> >();
+ typedef iterator_property_map<
+ RAIter, ID,
+ typename std::iterator_traits<RAIter>::value_type,
+ typename std::iterator_traits<RAIter>::reference> PA;
+ return PA(iter, id);
+ }
+#endif
+ template <class RAIter, class Value, class ID>
+ inline iterator_property_map<RAIter, ID, Value, Value&>
+ make_iterator_property_map(RAIter iter, ID id, Value) {
+ function_requires< RandomAccessIteratorConcept<RAIter> >();
+ typedef iterator_property_map<RAIter, ID, Value, Value&> PMap;
+ return PMap(iter, id);
+ }
+
+ template <class RandomAccessIterator,
+ class IndexMap
+#ifdef BOOST_NO_STD_ITERATOR_TRAITS
+ , class T, class R
+#else
+ , class T = typename std::iterator_traits<RandomAccessIterator>::value_type
+ , class R = typename std::iterator_traits<RandomAccessIterator>::reference
+#endif
+ >
+ class safe_iterator_property_map
+ : public boost::put_get_helper< R,
+ safe_iterator_property_map<RandomAccessIterator, IndexMap,
+ T, R> >
+ {
+ public:
+ typedef typename property_traits<IndexMap>::key_type key_type;
+ typedef T value_type;
+ typedef R reference;
+ typedef boost::lvalue_property_map_tag category;
+
+ inline safe_iterator_property_map(
+ RandomAccessIterator first,
+ std::size_t n_ = 0,
+ const IndexMap& _id = IndexMap() )
+ : iter(first), n(n_), index(_id) { }
+ inline safe_iterator_property_map() { }
+ inline R operator[](key_type v) const {
+ assert(get(index, v) < n);
+ return *(iter + get(index, v)) ;
+ }
+ typename property_traits<IndexMap>::value_type size() const { return n; }
+ protected:
+ RandomAccessIterator iter;
+ typename property_traits<IndexMap>::value_type n;
+ IndexMap index;
+ };
+
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ template <class RAIter, class ID>
+ inline safe_iterator_property_map<
+ RAIter, ID,
+ typename boost::detail::iterator_traits<RAIter>::value_type,
+ typename boost::detail::iterator_traits<RAIter>::reference>
+ make_safe_iterator_property_map(RAIter iter, std::size_t n, ID id) {
+ function_requires< RandomAccessIteratorConcept<RAIter> >();
+ typedef safe_iterator_property_map<
+ RAIter, ID,
+ typename boost::detail::iterator_traits<RAIter>::value_type,
+ typename boost::detail::iterator_traits<RAIter>::reference> PA;
+ return PA(iter, n, id);
+ }
+#endif
+ template <class RAIter, class Value, class ID>
+ inline safe_iterator_property_map<RAIter, ID, Value, Value&>
+ make_safe_iterator_property_map(RAIter iter, std::size_t n, ID id, Value) {
+ function_requires< RandomAccessIteratorConcept<RAIter> >();
+ typedef safe_iterator_property_map<RAIter, ID, Value, Value&> PMap;
+ return PMap(iter, n, id);
+ }
+
+ //=========================================================================
+ // An adaptor to turn a Unique Pair Associative Container like std::map or
+ // std::hash_map into an Lvalue Property Map.
+
+ template <typename UniquePairAssociativeContainer>
+ class associative_property_map
+ : public boost::put_get_helper<
+ typename UniquePairAssociativeContainer::value_type::second_type&,
+ associative_property_map<UniquePairAssociativeContainer> >
+ {
+ typedef UniquePairAssociativeContainer C;
+ public:
+ typedef typename C::key_type key_type;
+ typedef typename C::value_type::second_type value_type;
+ typedef value_type& reference;
+ typedef lvalue_property_map_tag category;
+ associative_property_map() : m_c(0) { }
+ associative_property_map(C& c) : m_c(&c) { }
+ reference operator[](const key_type& k) const {
+ return (*m_c)[k];
+ }
+ private:
+ C* m_c;
+ };
+
+ template <class UniquePairAssociativeContainer>
+ associative_property_map<UniquePairAssociativeContainer>
+ make_assoc_property_map(UniquePairAssociativeContainer& c)
+ {
+ return associative_property_map<UniquePairAssociativeContainer>(c);
+ }
+
+ template <typename UniquePairAssociativeContainer>
+ class const_associative_property_map
+ : public boost::put_get_helper<
+ const typename UniquePairAssociativeContainer::value_type::second_type&,
+ const_associative_property_map<UniquePairAssociativeContainer> >
+ {
+ typedef UniquePairAssociativeContainer C;
+ public:
+ typedef typename C::key_type key_type;
+ typedef typename C::value_type::second_type value_type;
+ typedef const value_type& reference;
+ typedef lvalue_property_map_tag category;
+ const_associative_property_map() : m_c(0) { }
+ const_associative_property_map(const C& c) : m_c(&c) { }
+ reference operator[](const key_type& k) const {
+ return m_c->find(k)->second;
+ }
+ private:
+ C const* m_c;
+ };
+
+ template <class UniquePairAssociativeContainer>
+ const_associative_property_map<UniquePairAssociativeContainer>
+ make_assoc_property_map(const UniquePairAssociativeContainer& c)
+ {
+ return const_associative_property_map<UniquePairAssociativeContainer>(c);
+ }
+
+ //=========================================================================
+ // A property map that applies the identity function to integers
+ struct identity_property_map
+ : public boost::put_get_helper<std::size_t,
+ identity_property_map>
+ {
+ typedef std::size_t key_type;
+ typedef std::size_t value_type;
+ typedef std::size_t reference;
+ typedef boost::readable_property_map_tag category;
+
+ inline value_type operator[](const key_type& v) const { return v; }
+ };
+
+ //=========================================================================
+ // A property map that does not do anything, for
+ // when you have to supply a property map, but don't need it.
+ namespace detail {
+ struct dummy_pmap_reference {
+ template <class T>
+ dummy_pmap_reference& operator=(const T&) { return *this; }
+ operator int() { return 0; }
+ };
+ }
+ class dummy_property_map
+ : public boost::put_get_helper<detail::dummy_pmap_reference,
+ dummy_property_map >
+ {
+ public:
+ typedef void key_type;
+ typedef int value_type;
+ typedef detail::dummy_pmap_reference reference;
+ typedef boost::read_write_property_map_tag category;
+ inline dummy_property_map() : c(0) { }
+ inline dummy_property_map(value_type cc) : c(cc) { }
+ inline dummy_property_map(const dummy_property_map& x)
+ : c(x.c) { }
+ template <class Vertex>
+ inline reference operator[](Vertex) const { return reference(); }
+ protected:
+ value_type c;
+ };
+
+
+} // namespace boost
+
+
+#endif /* BOOST_PROPERTY_MAP_HPP */
+
diff --git a/boost/boost/property_map_iterator.hpp b/boost/boost/property_map_iterator.hpp
new file mode 100644
index 00000000000..9874cbf4adb
--- /dev/null
+++ b/boost/boost/property_map_iterator.hpp
@@ -0,0 +1,113 @@
+// (C) Copyright Jeremy Siek, 2001.
+// 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/property_map for documentation.
+
+#ifndef BOOST_PROPERTY_MAP_ITERATOR_HPP
+#define BOOST_PROPERTY_MAP_ITERATOR_HPP
+
+#include <boost/property_map.hpp>
+#include <boost/iterator/iterator_adaptor.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost {
+
+ //======================================================================
+ // property iterator, generalized from ideas by François Faure
+
+ namespace detail {
+
+ template <class Iterator, class LvaluePropertyMap>
+ class lvalue_pmap_iter
+ : public iterator_adaptor< lvalue_pmap_iter< Iterator, LvaluePropertyMap >,
+ Iterator,
+ typename property_traits<LvaluePropertyMap>::value_type,
+ use_default,
+ typename property_traits<LvaluePropertyMap>::reference>
+ {
+ friend class boost::iterator_core_access;
+
+ typedef iterator_adaptor< lvalue_pmap_iter< Iterator, LvaluePropertyMap >,
+ Iterator,
+ typename property_traits<LvaluePropertyMap>::value_type,
+ use_default,
+ typename property_traits<LvaluePropertyMap>::reference> super_t;
+
+ public:
+ lvalue_pmap_iter() { }
+ lvalue_pmap_iter(Iterator const& it,
+ LvaluePropertyMap m)
+ : super_t(it),
+ m_map(m) {}
+
+ private:
+ typename super_t::reference
+ dereference() const
+ {
+ return m_map[*(this->base_reference())];
+ }
+
+ LvaluePropertyMap m_map;
+ };
+
+ template <class Iterator, class ReadablePropertyMap>
+ class readable_pmap_iter :
+ public iterator_adaptor< readable_pmap_iter< Iterator, ReadablePropertyMap >,
+ Iterator,
+ typename property_traits<ReadablePropertyMap>::value_type,
+ use_default,
+ typename property_traits<ReadablePropertyMap>::value_type>
+
+
+ {
+ friend class boost::iterator_core_access;
+
+ typedef iterator_adaptor< readable_pmap_iter< Iterator, ReadablePropertyMap >,
+ Iterator,
+ typename property_traits<ReadablePropertyMap>::value_type,
+ use_default,
+ typename property_traits<ReadablePropertyMap>::value_type> super_t;
+
+ public:
+ readable_pmap_iter() { }
+ readable_pmap_iter(Iterator const& it,
+ ReadablePropertyMap m)
+ : super_t(it),
+ m_map(m) {}
+
+ private:
+ typename super_t::reference
+ dereference() const
+ {
+ return get(m_map, *(this->base_reference()));
+ }
+
+ ReadablePropertyMap m_map;
+ };
+
+
+ } // namespace detail
+
+ template <class PropertyMap, class Iterator>
+ struct property_map_iterator_generator :
+ mpl::if_< is_same< typename property_traits<PropertyMap>::category, lvalue_property_map_tag>,
+ detail::lvalue_pmap_iter<Iterator, PropertyMap>,
+ detail::readable_pmap_iter<Iterator, PropertyMap> >
+ {};
+
+ template <class PropertyMap, class Iterator>
+ typename property_map_iterator_generator<PropertyMap, Iterator>::type
+ make_property_map_iterator(PropertyMap pmap, Iterator iter)
+ {
+ typedef typename property_map_iterator_generator<PropertyMap,
+ Iterator>::type Iter;
+ return Iter(iter, pmap);
+ }
+
+} // namespace boost
+
+#endif // BOOST_PROPERTY_MAP_ITERATOR_HPP
+
diff --git a/boost/boost/ptr_container/clone_allocator.hpp b/boost/boost/ptr_container/clone_allocator.hpp
new file mode 100644
index 00000000000..4734bfa2376
--- /dev/null
+++ b/boost/boost/ptr_container/clone_allocator.hpp
@@ -0,0 +1,80 @@
+//
+// Boost.Pointer Container
+//
+// Copyright Thorsten Ottosen 2003-2005. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/ptr_container/
+//
+
+#ifndef BOOST_PTR_CONTAINER_CLONE_ALLOCATOR_HPP
+#define BOOST_PTR_CONTAINER_CLONE_ALLOCATOR_HPP
+
+#include <boost/assert.hpp>
+#include <boost/checked_delete.hpp>
+#include <typeinfo>
+
+namespace boost
+{
+ /////////////////////////////////////////////////////////////////////////
+ // Clonable concept
+ /////////////////////////////////////////////////////////////////////////
+
+ template< class T >
+ inline T* new_clone( const T& r )
+ {
+ T* res = new T( r );
+ BOOST_ASSERT( typeid(r) == typeid(*res) &&
+ "Default new_clone() sliced object!" );
+ return res;
+ }
+
+ template< class T >
+ inline void delete_clone( const T* r )
+ {
+ checked_delete( r );
+ }
+
+ /////////////////////////////////////////////////////////////////////////
+ // CloneAllocator concept
+ /////////////////////////////////////////////////////////////////////////
+
+ struct heap_clone_allocator
+ {
+ template< class U >
+ static U* allocate_clone( const U& r )
+ {
+ return new_clone( r );
+ }
+
+ template< class U >
+ static void deallocate_clone( const U* r )
+ {
+ delete_clone( r );
+ }
+
+ };
+
+
+
+ struct view_clone_allocator
+ {
+ template< class U >
+ static U* allocate_clone( const U& r )
+ {
+ return const_cast<U*>( &r );
+ }
+
+ template< class U >
+ static void deallocate_clone( const U* r )
+ {
+ // do nothing
+ }
+ };
+
+} // namespace 'boost'
+
+#endif
+
diff --git a/boost/boost/ptr_container/detail/associative_ptr_container.hpp b/boost/boost/ptr_container/detail/associative_ptr_container.hpp
new file mode 100644
index 00000000000..144e488208e
--- /dev/null
+++ b/boost/boost/ptr_container/detail/associative_ptr_container.hpp
@@ -0,0 +1,209 @@
+//
+// Boost.Pointer Container
+//
+// Copyright Thorsten Ottosen 2003-2005. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/ptr_container/
+//
+
+
+#ifndef BOOST_PTR_CONTAINER_DETAIL_ASSOCIATIVE_PTR_CONTAINER_HPP
+#define BOOST_PTR_CONTAINER_DETAIL_ASSOCIATIVE_PTR_CONTAINER_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif
+
+#include <boost/ptr_container/detail/reversible_ptr_container.hpp>
+
+namespace boost
+{
+
+namespace ptr_container_detail
+{
+ template
+ <
+ class Config,
+ class CloneAllocator
+ >
+ class associative_ptr_container :
+ public reversible_ptr_container<Config,CloneAllocator>
+ {
+ typedef reversible_ptr_container<Config,CloneAllocator>
+ base_type;
+
+ typedef BOOST_DEDUCED_TYPENAME base_type::scoped_deleter
+ scoped_deleter;
+
+ public: // typedefs
+ typedef BOOST_DEDUCED_TYPENAME Config::key_type
+ key_type;
+ typedef BOOST_DEDUCED_TYPENAME Config::key_compare
+ key_compare;
+ typedef BOOST_DEDUCED_TYPENAME Config::value_compare
+ value_compare;
+ typedef BOOST_DEDUCED_TYPENAME Config::iterator
+ iterator;
+ typedef BOOST_DEDUCED_TYPENAME Config::const_iterator
+ const_iterator;
+ typedef BOOST_DEDUCED_TYPENAME base_type::size_type
+ size_type;
+
+ public: // foundation
+
+ template< class Compare, class Allocator >
+ associative_ptr_container( const Compare& comp,
+ const Allocator& a )
+ : base_type( comp, a )
+ { }
+
+ template< class InputIterator, class Compare, class Allocator >
+ associative_ptr_container( InputIterator first, InputIterator last,
+ const Compare& comp,
+ const Allocator& a )
+ : base_type( first, last, comp, a )
+ { }
+
+ template< class PtrContainer >
+ associative_ptr_container( std::auto_ptr<PtrContainer> r )
+ : base_type( r, key_compare() )
+ { }
+
+ template< class PtrContainer >
+ void operator=( std::auto_ptr<PtrContainer> r )
+ {
+ base_type::operator=( r );
+ }
+
+ public: // associative container interface
+ key_compare key_comp() const
+ {
+ return this->c_private().key_comp();
+ }
+
+ value_compare value_comp() const
+ {
+ return this->c_private().value_comp();
+ }
+
+ iterator erase( iterator before ) // nothrow
+ {
+ BOOST_ASSERT( !this->empty() );
+ BOOST_ASSERT( before != this->end() );
+
+ this->remove( before ); // nothrow
+ iterator res( before ); // nothrow
+ ++res; // nothrow
+ this->c_private().erase( before.base() ); // nothrow
+ return res; // nothrow
+ }
+
+ size_type erase( const key_type& x ) // nothrow
+ {
+ iterator i( this->c_private().find( x ) ); // nothrow
+ if( i == this->end() ) // nothrow
+ return 0u; // nothrow
+ this->remove( i ); // nothrow
+ return this->c_private().erase( x ); // nothrow
+ }
+
+ iterator erase( iterator first,
+ iterator last ) // nothrow
+ {
+ iterator res( last ); // nothrow
+ if( res != this->end() )
+ ++res; // nothrow
+
+ this->remove( first, last ); // nothrow
+ this->c_private().erase( first.base(), last.base() );// nothrow
+ return res; // nothrow
+ }
+
+ protected:
+
+ template< class AssociatePtrCont >
+ void multi_transfer( BOOST_DEDUCED_TYPENAME AssociatePtrCont::iterator object,
+ AssociatePtrCont& from ) // strong
+ {
+ BOOST_ASSERT( (void*)&from != (void*)this );
+ BOOST_ASSERT( !from.empty() && "Cannot transfer from empty container" );
+
+ this->c_private().insert( *object.base() ); // strong
+ from.c_private().erase( object.base() ); // nothrow
+ }
+
+ template< class AssociatePtrCont >
+ size_type multi_transfer( BOOST_DEDUCED_TYPENAME AssociatePtrCont::iterator first,
+ BOOST_DEDUCED_TYPENAME AssociatePtrCont::iterator last,
+ AssociatePtrCont& from ) // basic
+ {
+ BOOST_ASSERT( (void*)&from != (void*)this );
+ BOOST_ASSERT( !from.empty() && "Cannot transfer from empty container" );
+
+ size_type res = 0;
+ for( ; first != last; )
+ {
+ BOOST_ASSERT( first != from.end() );
+ this->c_private().insert( *first.base() ); // strong
+ BOOST_DEDUCED_TYPENAME AssociatePtrCont::iterator
+ to_delete( first );
+ ++first;
+ from.c_private().erase( to_delete.base() ); // nothrow
+ ++res;
+ }
+
+ return res;
+ }
+
+ template< class AssociatePtrCont >
+ bool single_transfer( BOOST_DEDUCED_TYPENAME AssociatePtrCont::iterator object,
+ AssociatePtrCont& from ) // strong
+ {
+ BOOST_ASSERT( (void*)&from != (void*)this );
+ BOOST_ASSERT( !from.empty() && "Cannot transfer from empty container" );
+
+ std::pair<BOOST_DEDUCED_TYPENAME base_type::ptr_iterator,bool> p =
+ this->c_private().insert( *object.base() ); // strong
+ if( p.second )
+ from.c_private().erase( object.base() ); // nothrow
+
+ return p.second;
+ }
+
+ template< class AssociatePtrCont >
+ size_type single_transfer( BOOST_DEDUCED_TYPENAME AssociatePtrCont::iterator first,
+ BOOST_DEDUCED_TYPENAME AssociatePtrCont::iterator last,
+ AssociatePtrCont& from ) // basic
+ {
+ BOOST_ASSERT( (void*)&from != (void*)this );
+ BOOST_ASSERT( !from.empty() && "Cannot transfer from empty container" );
+
+ size_type res = 0;
+ for( ; first != last; )
+ {
+ BOOST_ASSERT( first != from.end() );
+ std::pair<BOOST_DEDUCED_TYPENAME base_type::ptr_iterator,bool> p =
+ this->c_private().insert( *first.base() ); // strong
+ BOOST_DEDUCED_TYPENAME AssociatePtrCont::iterator
+ to_delete( first );
+ ++first;
+ if( p.second )
+ {
+ from.c_private().erase( to_delete.base() ); // nothrow
+ ++res;
+ }
+ }
+ return res;
+ }
+
+ }; // class 'associative_ptr_container'
+
+} // namespace 'ptr_container_detail'
+
+} // namespace 'boost'
+
+
+#endif
diff --git a/boost/boost/ptr_container/detail/default_deleter.hpp b/boost/boost/ptr_container/detail/default_deleter.hpp
new file mode 100644
index 00000000000..44647990cb1
--- /dev/null
+++ b/boost/boost/ptr_container/detail/default_deleter.hpp
@@ -0,0 +1,69 @@
+// (C) Copyright Jonathan Turkanis 2004-2005.
+// 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.)
+
+// Contains the definition of move_ptrs::default_deleter, the default
+// Deleter template argument to move_ptr. Uses a technique of Daniel
+// Wallin to capture the type of a pointer at the time the deleter
+// is constructed, so that move_ptrs can delete objects of incomplete
+// type by default.
+
+#ifndef BOOST_MOVE_PTR_DEFAULT_DELETER_HPP_INCLUDED
+#define BOOST_MOVE_PTR_DEFAULT_DELETER_HPP_INCLUDED
+
+#include <boost/checked_delete.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/is_array.hpp>
+#include <boost/type_traits/remove_bounds.hpp>
+
+namespace boost { namespace ptr_container_detail { namespace move_ptrs {
+
+namespace ptr_container_detail {
+
+template<typename T>
+struct deleter_base {
+ typedef void (*deleter)(T*);
+ deleter_base(deleter d) { delete_ = d; }
+ void operator() (T* t) const { delete_(t); }
+ static deleter delete_;
+};
+
+template<class T>
+typename deleter_base<T>::deleter
+deleter_base<T>::delete_;
+
+template<typename T>
+struct scalar_deleter : deleter_base<T> {
+ typedef deleter_base<T> base;
+ scalar_deleter() : base(do_delete) { }
+ static void do_delete(T* t) { checked_delete(t); }
+};
+
+template<typename T>
+struct array_deleter
+ : deleter_base<typename remove_bounds<T>::type>
+{
+ typedef typename remove_bounds<T>::type element_type;
+ typedef deleter_base<element_type> base;
+ array_deleter() : base(do_delete) { }
+ static void do_delete(element_type* t) { checked_array_delete(t); }
+};
+
+} // End namespace ptr_container_detail.
+
+template<typename T>
+struct default_deleter
+ : mpl::if_<
+ is_array<T>,
+ ptr_container_detail::array_deleter<T>,
+ ptr_container_detail::scalar_deleter<T>
+ >::type
+{
+ default_deleter() { }
+ template<typename TT>
+ default_deleter(default_deleter<TT> tt) { }
+};
+
+} } } // End namespaces ptr_container_detail, move_ptrs, boost.
+
+#endif // #ifndef BOOST_MOVE_PTR_DEFAULT_DELETER_HPP_INCLUDED
diff --git a/boost/boost/ptr_container/detail/is_convertible.hpp b/boost/boost/ptr_container/detail/is_convertible.hpp
new file mode 100644
index 00000000000..fd177819250
--- /dev/null
+++ b/boost/boost/ptr_container/detail/is_convertible.hpp
@@ -0,0 +1,73 @@
+// (C) Copyright Thorsten Ottosen 2005
+// (C) Copyright Howard Hinnant 2004
+// (C) Copyright Jonathan Turkanis 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.)
+
+//
+// Contains type traits machinery for incomplete arrays. MPL compatibility
+// is included for completeness, but is not necessary for the current
+// application.
+//
+
+#ifndef BOOST_MOVE_PTR_ARRAYS_HPP_INCLUDED
+#define BOOST_MOVE_PTR_ARRAYS_HPP_INCLUDED
+
+#include <boost/config.hpp> // BOOST_STATIC_CONSTANT.
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/is_array.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/remove_bounds.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/utility/enable_if.hpp>
+
+namespace boost { namespace ptr_container_detail { namespace move_ptrs {
+
+// From Howard Hinnant.
+template<typename T, typename U>
+struct is_array_convertible {
+ typedef typename remove_bounds<T>::type t_element;
+ typedef typename remove_bounds<U>::type u_element;
+ typedef typename remove_cv<t_element>::type t_base;
+ typedef typename remove_cv<u_element>::type u_base;
+ typedef typename
+ mpl::and_<
+ is_array<T>,
+ is_array<U>,
+ is_same<t_base, u_base>,
+ is_convertible<t_element*, u_element*>
+ >::type type;
+ BOOST_STATIC_CONSTANT(bool, value = type::value);
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, is_array_convertible, (T, U))
+};
+
+template<typename T, typename U>
+struct is_smart_ptr_convertible
+ : mpl::if_<
+ is_array<T>,
+ is_array_convertible<T, U>,
+ is_convertible<T*, U*>
+ >::type
+ { };
+
+#ifndef BOOST_NO_SFINAE
+ template<typename Src, typename Tgt, typename T = void>
+ struct enable_if_convertible
+ : enable_if<
+ is_smart_ptr_convertible<Src, Tgt>,
+ T
+ >
+ { };
+#else
+ template<typename Src, typename Tgt, class T >
+ struct enable_if_convertible : mpl::identity<T> { };
+#endif
+
+} } } // End namespaces ptr_container_detail, move_ptrs, boost.
+
+#endif // #ifndef BOOST_MOVE_PTR_ARRAYS_HPP_INCLUDED
diff --git a/boost/boost/ptr_container/detail/map_iterator.hpp b/boost/boost/ptr_container/detail/map_iterator.hpp
new file mode 100644
index 00000000000..60370e303a6
--- /dev/null
+++ b/boost/boost/ptr_container/detail/map_iterator.hpp
@@ -0,0 +1,87 @@
+//
+// Boost.Pointer Container
+//
+// Copyright Thorsten Ottosen 2003-2005. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/ptr_container/
+//
+
+#ifndef BOOST_PTR_CONTAINER_MAP_ITERATOR_HPP
+#define BOOST_PTR_CONTAINER_MAP_ITERATOR_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif
+
+#include <boost/config.hpp>
+#include <boost/iterator/iterator_adaptor.hpp>
+#include <utility>
+
+namespace boost
+{
+ namespace ptr_container_detail
+ {
+ template< class F, class S >
+ struct ref_pair
+ {
+ typedef F first_type;
+ typedef S second_type;
+
+ const F& first;
+ S second;
+
+ template< class F2, class S2 >
+ ref_pair( const std::pair<F2,S2>& p )
+ : first(p.first), second(static_cast<S>(p.second))
+ { }
+
+ template< class RP >
+ ref_pair( const RP* rp )
+ : first(rp->first), second(rp->second)
+ { }
+
+ const ref_pair* const operator->() const
+ {
+ return this;
+ }
+ };
+ }
+
+ template<
+ class I, // base iterator
+ class F, // first type, key type
+ class S // second type, mapped type
+ >
+ class ptr_map_iterator :
+ public boost::iterator_adaptor< ptr_map_iterator<I,F,S>, I,
+ ptr_container_detail::ref_pair<F,S>,
+ use_default,
+ ptr_container_detail::ref_pair<F,S> >
+ {
+ typedef boost::iterator_adaptor< ptr_map_iterator<I,F,S>, I,
+ ptr_container_detail::ref_pair<F,S>,
+ use_default,
+ ptr_container_detail::ref_pair<F,S> >
+ base_type;
+
+
+ public:
+ ptr_map_iterator() : base_type()
+ { }
+
+ explicit ptr_map_iterator( const I& i ) : base_type(i)
+ { }
+
+ template< class I2, class F2, class S2 >
+ ptr_map_iterator( const ptr_map_iterator<I2,F2,S2>& r )
+ : base_type(r.base())
+ { }
+
+ }; // class 'ptr_map_iterator'
+
+}
+
+#endif
diff --git a/boost/boost/ptr_container/detail/move.hpp b/boost/boost/ptr_container/detail/move.hpp
new file mode 100644
index 00000000000..b557eff081d
--- /dev/null
+++ b/boost/boost/ptr_container/detail/move.hpp
@@ -0,0 +1,35 @@
+// (C) Copyright Daniel Wallin 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.)
+
+// Contains the definitions of the class template move_source and the function
+// template move, which together make move pointers moveable.
+
+#ifndef BOOST_MOVE_HPP_INCLUDED
+#define BOOST_MOVE_HPP_INCLUDED
+
+namespace boost { namespace ptr_container_detail {
+
+namespace move_ptrs {
+
+template<typename Ptr>
+class move_source {
+public:
+ move_source(Ptr& ptr) : ptr_(ptr) {}
+ Ptr& ptr() const { return ptr_; }
+private:
+ Ptr& ptr_;
+ move_source(const Ptr&);
+};
+
+} // End namespace move_ptrs.
+
+
+template<typename T>
+move_ptrs::move_source<T> move(T& x)
+{ return move_ptrs::move_source<T>(x); }
+
+} // namespace 'ptr_container_detail'
+} // End namespace boost.
+
+#endif // #ifndef BOOST_MOVE_HPP_INCLUDED
diff --git a/boost/boost/ptr_container/detail/reversible_ptr_container.hpp b/boost/boost/ptr_container/detail/reversible_ptr_container.hpp
new file mode 100644
index 00000000000..84a8a1c5229
--- /dev/null
+++ b/boost/boost/ptr_container/detail/reversible_ptr_container.hpp
@@ -0,0 +1,672 @@
+//
+// Boost.Pointer Container
+//
+// Copyright Thorsten Ottosen 2003-2005. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/ptr_container/
+//
+
+
+#ifndef BOOST_PTR_CONTAINER_DETAIL_REVERSIBLE_PTR_CONTAINER_HPP
+#define BOOST_PTR_CONTAINER_DETAIL_REVERSIBLE_PTR_CONTAINER_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif
+
+#include <boost/ptr_container/detail/throw_exception.hpp>
+#include <boost/ptr_container/detail/scoped_deleter.hpp>
+#include <boost/ptr_container/detail/static_move_ptr.hpp>
+#include <boost/ptr_container/exception.hpp>
+#include <boost/ptr_container/clone_allocator.hpp>
+#include <boost/ptr_container/nullable.hpp>
+
+#ifdef BOOST_NO_SFINAE
+#else
+#include <boost/range/functions.hpp>
+#endif
+
+#include <boost/config.hpp>
+#include <boost/iterator/reverse_iterator.hpp>
+#include <boost/range/iterator.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/is_pointer.hpp>
+#include <boost/type_traits/is_integral.hpp>
+#include <boost/serialization/split_member.hpp>
+#include <algorithm>
+#include <exception>
+#include <memory>
+#include <typeinfo>
+
+namespace boost
+{
+
+namespace ptr_container_detail
+{
+
+ template< class T >
+ inline T const& serialize_as_const( T const& r )
+ {
+ return r;
+ }
+
+ template< class CloneAllocator >
+ struct clone_deleter
+ {
+ template< class T >
+ void operator()( const T* p ) const
+ {
+ CloneAllocator::deallocate_clone( p );
+ }
+ };
+
+ template< class T >
+ struct is_pointer_or_integral
+ {
+ BOOST_STATIC_CONSTANT(bool, value = is_pointer<T>::value || is_integral<T>::value );
+ };
+
+ struct is_pointer_or_integral_tag {};
+ struct is_range_tag {};
+
+
+
+ template
+ <
+ class Config,
+ class CloneAllocator
+ >
+ class reversible_ptr_container
+ {
+ private:
+#ifdef __MWERKS__
+ enum { allow_null = Config::allow_null };
+#else
+ BOOST_STATIC_CONSTANT( bool, allow_null = Config::allow_null );
+#endif
+
+ typedef BOOST_DEDUCED_TYPENAME Config::value_type Ty_;
+
+ template< bool allow_null_values >
+ struct null_clone_allocator
+ {
+ template< class Iter >
+ static Ty_* allocate_clone_from_iterator( Iter i )
+ {
+ return allocate_clone( Config::get_const_pointer( i ) );
+ }
+
+ static Ty_* allocate_clone( const Ty_* x )
+ {
+ if( allow_null_values )
+ {
+ if( x == 0 )
+ return 0;
+ }
+ else
+ {
+ BOOST_ASSERT( x != 0 && "Cannot insert clone of null!" );
+ }
+
+ Ty_* res = CloneAllocator::allocate_clone( *x );
+ BOOST_ASSERT( typeid(*res) == typeid(*x) &&
+ "CloneAllocator::allocate_clone() does not clone the "
+ "object properly. Check that new_clone() is implemented"
+ " correctly" );
+ return res;
+ }
+
+ static void deallocate_clone( const Ty_* x )
+ {
+ if( allow_null_values )
+ {
+ if( x == 0 )
+ return;
+ }
+
+ CloneAllocator::deallocate_clone( x );
+ }
+ };
+
+ typedef BOOST_DEDUCED_TYPENAME Config::void_container_type Cont;
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+ typedef null_clone_allocator<reversible_ptr_container::allow_null>
+ null_cloner_type;
+#else
+ typedef null_clone_allocator<allow_null> null_cloner_type;
+#endif
+ typedef clone_deleter<null_cloner_type> Deleter;
+
+ Cont c_;
+
+ public:
+ Cont& c_private() { return c_; }
+ const Cont& c_private() const { return c_; }
+
+ public: // typedefs
+ typedef Ty_* value_type;
+ typedef Ty_* pointer;
+ typedef Ty_& reference;
+ typedef const Ty_& const_reference;
+
+ typedef BOOST_DEDUCED_TYPENAME Config::iterator
+ iterator;
+ typedef BOOST_DEDUCED_TYPENAME Config::const_iterator
+ const_iterator;
+ typedef boost::reverse_iterator< iterator >
+ reverse_iterator;
+ typedef boost::reverse_iterator< const_iterator >
+ const_reverse_iterator;
+ typedef BOOST_DEDUCED_TYPENAME Cont::difference_type
+ difference_type;
+ typedef BOOST_DEDUCED_TYPENAME Cont::size_type
+ size_type;
+ typedef BOOST_DEDUCED_TYPENAME Config::allocator_type
+ allocator_type;
+
+ typedef ptr_container_detail::static_move_ptr<Ty_,Deleter>
+ auto_type;
+
+ protected:
+
+ typedef ptr_container_detail::scoped_deleter<Ty_,null_cloner_type>
+ scoped_deleter;
+ typedef BOOST_DEDUCED_TYPENAME Cont::iterator
+ ptr_iterator;
+ typedef BOOST_DEDUCED_TYPENAME Cont::const_iterator
+ ptr_const_iterator;
+ private:
+
+ template< class InputIterator >
+ void copy( InputIterator first, InputIterator last )
+ {
+ std::copy( first, last, begin() );
+ }
+
+ void copy( const reversible_ptr_container& r )
+ {
+ copy( r.begin(), r.end() );
+ }
+
+ void copy_clones_and_release( scoped_deleter& sd ) // nothrow
+ {
+ BOOST_ASSERT( size_type( std::distance( sd.begin(), sd.end() ) ) == c_.size() );
+ std::copy( sd.begin(), sd.end(), c_.begin() );
+ sd.release();
+ }
+
+ void insert_clones_and_release( scoped_deleter& sd ) // strong
+ {
+ c_.insert( sd.begin(), sd.end() );
+ sd.release();
+ }
+
+ template< class ForwardIterator >
+ void clone_assign( ForwardIterator first,
+ ForwardIterator last ) // strong
+ {
+ BOOST_ASSERT( first != last );
+ scoped_deleter sd( first, last ); // strong
+ copy_clones_and_release( sd ); // nothrow
+ }
+
+ template< class ForwardIterator >
+ void clone_back_insert( ForwardIterator first,
+ ForwardIterator last )
+ {
+ BOOST_ASSERT( first != last );
+ scoped_deleter sd( first, last );
+ insert_clones_and_release( sd, end() );
+ }
+
+ void remove_all()
+ {
+ remove( begin(), end() );
+ }
+
+ protected:
+
+ void insert_clones_and_release( scoped_deleter& sd,
+ iterator where ) // strong
+ {
+ //
+ // 'c_.insert' always provides the strong guarantee for T* elements
+ // since a copy constructor of a pointer cannot throw
+ //
+ c_.insert( where.base(),
+ sd.begin(), sd.end() );
+ sd.release();
+ }
+
+ template< class I >
+ void remove( I i )
+ {
+ null_policy_deallocate_clone( Config::get_const_pointer(i) );
+ }
+
+ template< class I >
+ void remove( I first, I last )
+ {
+ for( ; first != last; ++first )
+ remove( first );
+ }
+
+ static void enforce_null_policy( Ty_* x, const char* msg )
+ {
+ if( !allow_null )
+ {
+ BOOST_PTR_CONTAINER_THROW_EXCEPTION( 0 == x && "null not allowed",
+ bad_pointer, msg );
+ }
+ }
+
+ static Ty_* null_policy_allocate_clone( const Ty_* x )
+ {
+ return null_cloner_type::allocate_clone( x );
+ }
+
+ static void null_policy_deallocate_clone( const Ty_* x )
+ {
+ null_cloner_type::deallocate_clone( x );
+ }
+
+ private:
+ template< class ForwardIterator >
+ ForwardIterator advance( ForwardIterator begin, size_type n )
+ {
+ ForwardIterator iter = begin;
+ std::advance( iter, n );
+ return iter;
+ }
+
+ private:
+ reversible_ptr_container( const reversible_ptr_container& );
+ void operator=( const reversible_ptr_container& );
+
+ public: // foundation! should be protected!
+ explicit reversible_ptr_container( const allocator_type& a = allocator_type() )
+ : c_( a )
+ {}
+
+ template< class PtrContainer >
+ explicit reversible_ptr_container( std::auto_ptr<PtrContainer> clone )
+ : c_( allocator_type() )
+ {
+ swap( *clone );
+ }
+
+ private:
+ template< class I >
+ void constructor_impl( I first, I last, std::input_iterator_tag ) // basic
+ {
+ while( first != last )
+ {
+ insert( end(), null_cloner_type::allocate_clone_from_iterator(first) );
+ ++first;
+ }
+ }
+
+ template< class I >
+ void constructor_impl( I first, I last, std::forward_iterator_tag ) // strong
+ {
+ if( first == last )
+ return;
+ clone_back_insert( first, last );
+ }
+
+
+ public:
+ // overhead: null-initilization of container pointer (very cheap compared to cloning)
+ // overhead: 1 heap allocation (very cheap compared to cloning)
+ template< class InputIterator >
+ reversible_ptr_container( InputIterator first,
+ InputIterator last,
+ const allocator_type& a = allocator_type() ) // basic, strong
+ : c_( a )
+ {
+ constructor_impl( first, last,
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+#else
+ BOOST_DEDUCED_TYPENAME
+#endif
+ iterator_category<InputIterator>::type() );
+ }
+
+ template< class Compare >
+ reversible_ptr_container( const Compare& comp,
+ const allocator_type& a )
+ : c_( comp, a ) {}
+
+ template< class PtrContainer, class Compare >
+ reversible_ptr_container( std::auto_ptr<PtrContainer> clone,
+ Compare comp )
+ : c_( comp, allocator_type() )
+ {
+ swap( *clone );
+ }
+
+ public:
+ ~reversible_ptr_container()
+ {
+ remove_all();
+ }
+
+ template< class PtrContainer >
+ void operator=( std::auto_ptr<PtrContainer> clone )
+ {
+ swap( *clone );
+ }
+
+ public:
+
+ allocator_type get_allocator() const
+ {
+ return c_.get_allocator();
+ }
+
+ public: // container requirements
+ iterator begin()
+ { return iterator( c_.begin() ); }
+ const_iterator begin() const
+ { return const_iterator( c_.begin() ); }
+ iterator end()
+ { return iterator( c_.end() ); }
+ const_iterator end() const
+ { return const_iterator( c_.end() ); }
+
+ reverse_iterator rbegin()
+ { return reverse_iterator( this->end() ); }
+ const_reverse_iterator rbegin() const
+ { return const_reverse_iterator( this->end() ); }
+ reverse_iterator rend()
+ { return reverse_iterator( this->begin() ); }
+ const_reverse_iterator rend() const
+ { return const_reverse_iterator( this->begin() ); }
+
+ void swap( reversible_ptr_container& r ) // nothrow
+ {
+ c_.swap( r.c_ );
+ }
+
+ size_type size() const // nothrow
+ {
+ return c_.size();
+ }
+
+ size_type max_size() const // nothrow
+ {
+ return c_.max_size();
+ }
+
+ bool empty() const // nothrow
+ {
+ return c_.empty();
+ }
+
+ public: // optional container requirements
+
+ bool operator==( const reversible_ptr_container& r ) const // nothrow
+ {
+ if( size() != r.size() )
+ return false;
+ else
+ return std::equal( begin(), end(), r.begin() );
+ }
+
+ bool operator!=( const reversible_ptr_container& r ) const // nothrow
+ {
+ return !(*this == r);
+ }
+
+ bool operator<( const reversible_ptr_container& r ) const // nothrow
+ {
+ return std::lexicographical_compare( begin(), end(), r.begin(), r.end() );
+ }
+
+ bool operator<=( const reversible_ptr_container& r ) const // nothrow
+ {
+ return !(r < *this);
+ }
+
+ bool operator>( const reversible_ptr_container& r ) const // nothrow
+ {
+ return r < *this;
+ }
+
+ bool operator>=( const reversible_ptr_container& r ) const // nothrow
+ {
+ return !(*this < r);
+ }
+
+ public: // modifiers
+
+ iterator insert( iterator before, Ty_* x )
+ {
+ enforce_null_policy( x, "Null pointer in 'insert()'" );
+
+ auto_type ptr( x ); // nothrow
+ iterator res( c_.insert( before.base(), x ) ); // strong, commit
+ ptr.release(); // nothrow
+ return res;
+ }
+
+ template< class U >
+ iterator insert( iterator before, std::auto_ptr<U> x )
+ {
+ return insert( before, x.release() );
+ }
+
+ iterator erase( iterator x ) // nothrow
+ {
+ BOOST_ASSERT( !empty() );
+ BOOST_ASSERT( x != end() );
+
+ remove( x );
+ return iterator( c_.erase( x.base() ) );
+ }
+
+ iterator erase( iterator first, iterator last ) // nothrow
+ {
+ //BOOST_ASSERT( !empty() );
+ remove( first, last );
+ return iterator( c_.erase( first.base(),
+ last.base() ) );
+ }
+
+ template< class Range >
+ iterator erase( const Range& r )
+ {
+ return erase( boost::begin(r), boost::end(r) );
+ }
+
+ void clear()
+ {
+ remove_all();
+ c_.clear();
+ }
+
+ public: // access interface
+
+ auto_type release( iterator where )
+ {
+ BOOST_ASSERT( where != end() );
+
+ BOOST_PTR_CONTAINER_THROW_EXCEPTION( empty(), bad_ptr_container_operation,
+ "'release()' on empty container" );
+
+ auto_type ptr( Config::get_pointer( where ) ); // nothrow
+ c_.erase( where.base() ); // nothrow
+ return boost::ptr_container_detail::move( ptr );
+ }
+
+ auto_type replace( iterator where, Ty_* x ) // strong
+ {
+ BOOST_ASSERT( where != end() );
+
+ enforce_null_policy( x, "Null pointer in 'replace()'" );
+
+ auto_type ptr( x );
+
+ BOOST_PTR_CONTAINER_THROW_EXCEPTION( empty(), bad_ptr_container_operation,
+ "'replace()' on empty container" );
+
+ auto_type old( Config::get_pointer( where ) ); // nothrow
+
+//#if defined( __GNUC__ ) || defined( __MWERKS__ ) || defined( __COMO__ )
+ const_cast<void*&>(*where.base()) = ptr.release();
+//#else
+// *where.base() = ptr.release(); // nothrow, commit
+//#endif
+ return boost::ptr_container_detail::move( old );
+ }
+
+ template< class U >
+ auto_type replace( iterator where, std::auto_ptr<U> x )
+ {
+ return replace( where, x.release() );
+ }
+
+ auto_type replace( size_type idx, Ty_* x ) // strong
+ {
+ enforce_null_policy( x, "Null pointer in 'replace()'" );
+
+ auto_type ptr( x );
+
+ BOOST_PTR_CONTAINER_THROW_EXCEPTION( idx >= size(), bad_index,
+ "'replace()' out of bounds" );
+
+ auto_type old( static_cast<Ty_*>( c_[idx] ) ); // nothrow
+ c_[idx] = ptr.release(); // nothrow, commit
+ return boost::ptr_container_detail::move( old );
+ }
+
+ template< class U >
+ auto_type replace( size_type idx, std::auto_ptr<U> x )
+ {
+ return replace( idx, x.release() );
+ }
+
+ //
+ // serialization
+ //
+
+ protected:
+
+ template< class Archive >
+ void save_helper( Archive& ar ) const
+ {
+ const_iterator i = this->begin(), e = this->end();
+ for( ; i != e; ++i )
+ ar & ptr_container_detail::serialize_as_const(
+ static_cast<value_type>( *i.base() ) );
+ }
+
+ public:
+
+ template< class Archive >
+ void save( Archive& ar, const unsigned ) const
+ {
+ ar & ptr_container_detail::serialize_as_const( this->size() );
+ this->save_helper( ar );
+ }
+
+ protected:
+
+ template< class Archive >
+ void load_helper( Archive& ar, size_type n )
+ {
+ //
+ // Called after an appropriate reserve on c.
+ //
+
+ this->clear();
+ for( size_type i = 0u; i != n; ++i )
+ {
+ //
+ // Remark: pointers are not tracked,
+ // so we need not call ar.reset_object_address(v, u)
+ //
+ value_type ptr;
+ ar & ptr;
+ this->insert( this->end(), ptr );
+ }
+ }
+
+ public:
+
+ template< class Archive >
+ void load( Archive& ar, const unsigned )
+ {
+ size_type n;
+ ar & n;
+ this->load_helper( ar, n );
+ }
+
+ BOOST_SERIALIZATION_SPLIT_MEMBER()
+
+ }; // 'reversible_ptr_container'
+
+
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+#define BOOST_PTR_CONTAINER_DEFINE_RELEASE( base_type ) \
+ typename base_type::auto_type \
+ release( typename base_type::iterator i ) \
+ { \
+ return boost::ptr_container_detail::move(base_type::release(i)); \
+ }
+#else
+#define BOOST_PTR_CONTAINER_DEFINE_RELEASE( base_type ) \
+ using base_type::release;
+#endif
+
+ //
+ // two-phase lookup of template functions
+ // is buggy on most compilers, so we use a macro instead
+ //
+#define BOOST_PTR_CONTAINER_DEFINE_RELEASE_AND_CLONE( PC, base_type, this_type ) \
+ \
+ PC( std::auto_ptr<this_type> r ) \
+ : base_type ( r ) { } \
+ \
+ void operator=( std::auto_ptr<this_type> r ) \
+ { \
+ base_type::operator=( r ); \
+ } \
+ \
+ std::auto_ptr<this_type> release() \
+ { \
+ std::auto_ptr<this_type> ptr( new this_type );\
+ this->swap( *ptr ); \
+ return ptr; \
+ } \
+ BOOST_PTR_CONTAINER_DEFINE_RELEASE( base_type ) \
+ \
+ std::auto_ptr<this_type> clone() const \
+ { \
+ return std::auto_ptr<this_type>( new this_type( this->begin(), this->end() ) ); \
+ }
+
+#define BOOST_PTR_CONTAINER_DEFINE_CONSTRUCTORS( PC, base_type ) \
+ typedef BOOST_DEDUCED_TYPENAME base_type::iterator iterator; \
+ typedef BOOST_DEDUCED_TYPENAME base_type::size_type size_type; \
+ typedef BOOST_DEDUCED_TYPENAME base_type::const_reference const_reference; \
+ typedef BOOST_DEDUCED_TYPENAME base_type::allocator_type allocator_type; \
+ PC( const allocator_type& a = allocator_type() ) : base_type(a) {} \
+ template< class InputIterator > \
+ PC( InputIterator first, InputIterator last, \
+ const allocator_type& a = allocator_type() ) : base_type( first, last, a ) {}
+
+
+
+#define BOOST_PTR_CONTAINER_DEFINE_NON_INHERITED_MEMBERS( PC, base_type, this_type ) \
+ BOOST_PTR_CONTAINER_DEFINE_CONSTRUCTORS( PC, base_type ) \
+ BOOST_PTR_CONTAINER_DEFINE_RELEASE_AND_CLONE( PC, base_type, this_type )
+
+ } // namespace 'ptr_container_detail'
+
+} // namespace 'boost'
+
+#endif
diff --git a/boost/boost/ptr_container/detail/scoped_deleter.hpp b/boost/boost/ptr_container/detail/scoped_deleter.hpp
new file mode 100644
index 00000000000..44300cb3276
--- /dev/null
+++ b/boost/boost/ptr_container/detail/scoped_deleter.hpp
@@ -0,0 +1,115 @@
+//
+// Boost.Pointer Container
+//
+// Copyright Thorsten Ottosen 2003-2005. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/ptr_container/
+//
+
+#ifndef BOOST_PTR_CONTAINER_SCOPED_DELETER_HPP
+#define BOOST_PTR_CONTAINER_SCOPED_DELETER_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif
+
+#include <iterator>
+#include <cstddef>
+#include <boost/scoped_array.hpp>
+
+namespace boost
+{
+
+ namespace ptr_container_detail
+ {
+ template< class T, class CloneAllocator >
+ class scoped_deleter
+ {
+ typedef std::size_t size_type;
+ scoped_array<T*> ptrs_;
+ size_type stored_;
+ bool released_;
+
+ public:
+ scoped_deleter( size_type size ) :
+ ptrs_( new T*[size] ), stored_( 0 ),
+ released_( false )
+ {
+ BOOST_ASSERT( size > 0 );
+ }
+
+
+
+ scoped_deleter( size_type n, const T& x ) // strong
+ : ptrs_( new T*[n] ), stored_(0),
+ released_( false )
+ {
+ for( size_type i = 0; i != n; i++ )
+ add( CloneAllocator::allocate_clone( &x ) );
+ BOOST_ASSERT( stored_ > 0 );
+ }
+
+
+
+ template< class InputIterator >
+ scoped_deleter ( InputIterator first, InputIterator last ) // strong
+ : ptrs_( new T*[ std::distance(first,last) ] ),
+ stored_(0),
+ released_( false )
+ {
+ for( ; first != last; ++first )
+ add( CloneAllocator::allocate_clone_from_iterator( first ) );
+ BOOST_ASSERT( stored_ > 0 );
+ }
+
+
+
+ ~scoped_deleter()
+ {
+ if ( !released_ )
+ {
+ for( size_type i = 0u; i != stored_; ++i )
+ CloneAllocator::deallocate_clone( ptrs_[i] );
+ }
+ }
+
+
+
+ void add( T* t )
+ {
+ BOOST_ASSERT( ptrs_.get() != 0 );
+ ptrs_[stored_] = t;
+ ++stored_;
+ }
+
+
+
+ void release()
+ {
+ released_ = true;
+ }
+
+
+
+ T** begin()
+ {
+ BOOST_ASSERT( ptrs_.get() != 0 );
+ return &ptrs_[0];
+ }
+
+
+
+ T** end()
+ {
+ BOOST_ASSERT( ptrs_.get() != 0 );
+ return &ptrs_[stored_];
+ }
+
+ }; // class 'scoped_deleter'
+ }
+}
+
+#endif
diff --git a/boost/boost/ptr_container/detail/static_move_ptr.hpp b/boost/boost/ptr_container/detail/static_move_ptr.hpp
new file mode 100644
index 00000000000..de40668a711
--- /dev/null
+++ b/boost/boost/ptr_container/detail/static_move_ptr.hpp
@@ -0,0 +1,212 @@
+// (C) Copyright Thorsten Ottosen 2005.
+// (C) Copyright Jonathan Turkanis 2004.
+// (C) Copyright Daniel Wallin 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.)
+
+// Implementation of the move_ptr from the "Move Proposal"
+// (http://std.dkuug.dk/jtc1/sc22/wg21/docs/papers/2002/n1377.htm)
+// enhanced to support custom deleters and safe boolean conversions.
+//
+// The implementation is based on an implementation by Daniel Wallin, at
+// "http://aspn.activestate.com/ASPN/Mail/Message/Attachments/boost/
+// 400DC271.1060903@student.umu.se/move_ptr.hpp". The current was adapted
+// by Jonathan Turkanis to incorporating ideas of Howard Hinnant and
+// Rani Sharoni.
+
+#ifndef BOOST_STATIC_MOVE_PTR_HPP_INCLUDED
+#define BOOST_STATIC_MOVE_PTR_HPP_INCLUDED
+
+#include <boost/config.hpp> // Member template friends, put size_t in std.
+#include <algorithm> // swap.
+#include <cstddef> // size_t
+#include <boost/compressed_pair.hpp>
+#include <boost/ptr_container/detail/default_deleter.hpp>
+#include <boost/ptr_container/detail/is_convertible.hpp>
+#include <boost/ptr_container/detail/move.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/add_reference.hpp>
+#include <boost/type_traits/is_array.hpp>
+
+#if defined(BOOST_MSVC)
+#pragma warning(push)
+#pragma warning(disable:4521) // Multiple copy constuctors.
+#endif
+
+namespace boost { namespace ptr_container_detail {
+
+
+template< typename T,
+ typename Deleter =
+ move_ptrs::default_deleter<T> >
+class static_move_ptr
+{
+public:
+
+ typedef typename remove_bounds<T>::type element_type;
+ typedef Deleter deleter_type;
+
+private:
+
+ struct safe_bool_helper { int x; };
+ typedef int safe_bool_helper::* safe_bool;
+ typedef boost::compressed_pair<element_type*, Deleter> impl_type;
+
+public:
+ typedef typename impl_type::second_reference deleter_reference;
+ typedef typename impl_type::second_const_reference deleter_const_reference;
+
+ // Constructors
+
+ static_move_ptr() : impl_(0) { }
+
+ static_move_ptr(const static_move_ptr& p)
+ : impl_(p.get(), p.get_deleter())
+ {
+ const_cast<static_move_ptr&>(p).release();
+ }
+
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+ static_move_ptr( const move_ptrs::move_source<static_move_ptr<T,Deleter> >& src )
+#else
+ static_move_ptr( const move_ptrs::move_source<static_move_ptr>& src )
+#endif
+ : impl_(src.ptr().get(), src.ptr().get_deleter())
+ {
+ src.ptr().release();
+ }
+
+ template<typename TT>
+ explicit static_move_ptr(TT* tt)
+ : impl_(tt, Deleter())
+ { }
+
+ // Destructor
+
+ ~static_move_ptr() { if (ptr()) get_deleter()(ptr()); }
+
+ // Assignment
+
+ static_move_ptr& operator=(static_move_ptr rhs)
+ {
+ rhs.swap(*this);
+ return *this;
+ }
+
+ // Smart pointer interface
+
+ element_type* get() const { return ptr(); }
+
+ element_type& operator*()
+ {
+ /*BOOST_STATIC_ASSERT(!is_array);*/ return *ptr();
+ }
+
+ const element_type& operator*() const
+ {
+ /*BOOST_STATIC_ASSERT(!is_array);*/ return *ptr();
+ }
+
+ element_type* operator->()
+ {
+ /*BOOST_STATIC_ASSERT(!is_array);*/ return ptr();
+ }
+
+ const element_type* operator->() const
+ {
+ /*BOOST_STATIC_ASSERT(!is_array);*/ return ptr();
+ }
+
+
+ element_type* release()
+ {
+ element_type* result = ptr();
+ ptr() = 0;
+ return result;
+ }
+
+ void reset()
+ {
+ if (ptr()) get_deleter()(ptr());
+ ptr() = 0;
+ }
+
+ template<typename TT>
+ void reset(TT* tt)
+ {
+ static_move_ptr(tt).swap(*this);
+ }
+
+ template<typename TT, typename DD>
+ void reset(TT* tt, DD dd)
+ {
+ static_move_ptr(tt, dd).swap(*this);
+ }
+
+ operator safe_bool() const { return ptr() ? &safe_bool_helper::x : 0; }
+
+ void swap(static_move_ptr& p) { impl_.swap(p.impl_); }
+
+ deleter_reference get_deleter() { return impl_.second(); }
+
+ deleter_const_reference get_deleter() const { return impl_.second(); }
+private:
+ template<typename TT, typename DD>
+ void check(const static_move_ptr<TT, DD>& ptr)
+ {
+ typedef move_ptrs::is_smart_ptr_convertible<TT, T> convertible;
+ BOOST_STATIC_ASSERT(convertible::value);
+ }
+
+#if defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) || defined(BOOST_NO_SFINAE)
+// give up on this behavior
+#else
+
+ template<typename Ptr> struct cant_move_from_const;
+
+ template<typename TT, typename DD>
+ struct cant_move_from_const< const static_move_ptr<TT, DD> > {
+ typedef typename static_move_ptr<TT, DD>::error type;
+ };
+
+ template<typename Ptr>
+ static_move_ptr(Ptr&, typename cant_move_from_const<Ptr>::type = 0);
+
+
+public:
+ static_move_ptr(static_move_ptr&);
+
+
+private:
+ template<typename TT, typename DD>
+ static_move_ptr( static_move_ptr<TT, DD>&,
+ typename
+ move_ptrs::enable_if_convertible<
+ TT, T, static_move_ptr&
+ >::type::type* = 0 );
+
+#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING || BOOST_NO_SFINAE
+
+//#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+// template<typename TT, typename DD>
+// friend class static_move_ptr;
+//#else
+ public:
+//#endif
+ typename impl_type::first_reference
+ ptr() { return impl_.first(); }
+
+ typename impl_type::first_const_reference
+ ptr() const { return impl_.first(); }
+
+ impl_type impl_;
+};
+
+} // namespace ptr_container_detail
+} // End namespace boost.
+
+#if defined(BOOST_MSVC)
+#pragma warning(pop) // #pragma warning(disable:4251)
+#endif
+
+#endif // #ifndef BOOST_STATIC_MOVE_PTR_HPP_INCLUDED
diff --git a/boost/boost/ptr_container/detail/throw_exception.hpp b/boost/boost/ptr_container/detail/throw_exception.hpp
new file mode 100644
index 00000000000..bb467f2bd93
--- /dev/null
+++ b/boost/boost/ptr_container/detail/throw_exception.hpp
@@ -0,0 +1,33 @@
+//
+// Boost.Pointer Container
+//
+// Copyright Thorsten Ottosen 2006. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/ptr_container/
+//
+
+#ifndef BOOST_PTR_CONTAINER_DETAIL_THROW_EXCEPTION
+#define BOOST_PTR_CONTAINER_DETAIL_THROW_EXCEPTION
+
+#include <boost/assert.hpp>
+#include <boost/config.hpp>
+
+#ifdef BOOST_NO_EXCEPTIONS
+#define BOOST_PTR_CONTAINER_NO_EXCEPTIONS
+#endif
+
+#ifdef BOOST_PTR_CONTAINER_NO_EXCEPTIONS
+
+#define BOOST_PTR_CONTAINER_THROW_EXCEPTION( If, Ex, Msg ) BOOST_ASSERT( !(If) && Msg )
+
+#else
+
+#define BOOST_PTR_CONTAINER_THROW_EXCEPTION( If, Ex, Msg ) if( (If) ) throw Ex ( Msg )
+
+#endif // BOOST_PTR_CONTAINER_NO_EXCEPTIONS
+
+
+#endif
diff --git a/boost/boost/ptr_container/detail/void_ptr_iterator.hpp b/boost/boost/ptr_container/detail/void_ptr_iterator.hpp
new file mode 100644
index 00000000000..d72cc9770e7
--- /dev/null
+++ b/boost/boost/ptr_container/detail/void_ptr_iterator.hpp
@@ -0,0 +1,227 @@
+//
+// Boost.Pointer Container
+//
+// Copyright Thorsten Ottosen 2003-2005. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/ptr_container/
+//
+
+#ifndef BOOST_PTR_CONTAINER_DETAIL_VOID_PTR_ITERATOR_HPP
+#define BOOST_PTR_CONTAINER_DETAIL_VOID_PTR_ITERATOR_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif
+
+#include <boost/config.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+
+namespace boost
+{
+ template
+ <
+ class VoidIter,
+ class T
+ >
+ class void_ptr_iterator
+ {
+ public:
+ typedef T value_type;
+ typedef T& reference;
+ typedef T* pointer;
+
+ typedef BOOST_DEDUCED_TYPENAME iterator_difference<VoidIter>::type
+ difference_type;
+ typedef BOOST_DEDUCED_TYPENAME iterator_category<VoidIter>::type
+ iterator_category;
+ private:
+
+ VoidIter iter_;
+
+ public:
+ void_ptr_iterator() : iter_()
+ { }
+
+ void_ptr_iterator( VoidIter r ) : iter_(r)
+ { }
+
+ //
+ // Remark: passing by value breaks vc7.1
+ //
+ template< class MutableIterator, class MutableT >
+ void_ptr_iterator( const void_ptr_iterator<MutableIterator,MutableT>& r )
+#ifdef BOOST_NO_SFINAE
+ : iter_( VoidIter(const_cast<void**>(&*r.base())) )
+#else
+
+ : iter_(r.base())
+#endif
+ { }
+
+ T& operator*() const
+ {
+ return *static_cast<T*>( *iter_ );
+ }
+
+ T* operator->() const
+ {
+ return static_cast<T*>( *iter_ );
+ }
+
+ void_ptr_iterator& operator++()
+ {
+ ++iter_;
+ return *this;
+ }
+
+ void_ptr_iterator operator++(int)
+ {
+ void_ptr_iterator res = *this;
+ ++iter_;
+ return res;
+ }
+
+ void_ptr_iterator& operator--()
+ {
+ --iter_;
+ return *this;
+ }
+
+ void_ptr_iterator operator--(int)
+ {
+ void_ptr_iterator res = *this;
+ --iter_;
+ return res;
+ }
+
+ void_ptr_iterator& operator+=( difference_type n )
+ {
+ iter_ += n;
+ return *this;
+ }
+
+ void_ptr_iterator& operator-=( difference_type n )
+ {
+ iter_ -= n;
+ return *this;
+ }
+
+ T& operator[]( difference_type n ) const
+ {
+ return *static_cast<T*>( *(iter_ + n) );
+ }
+
+ VoidIter base() const
+ {
+ return iter_;
+ }
+
+ }; // class 'void_ptr_iterator'
+
+ template< class VoidIter, class T >
+ inline void_ptr_iterator<VoidIter,T>
+ operator+( void_ptr_iterator<VoidIter,T> l,
+ BOOST_DEDUCED_TYPENAME void_ptr_iterator<VoidIter,T>::difference_type n )
+ {
+ l += n;
+ return l;
+ }
+
+ template< class VoidIter, class T >
+ inline void_ptr_iterator<VoidIter,T>
+ operator+( BOOST_DEDUCED_TYPENAME void_ptr_iterator<VoidIter,T>::difference_type n,
+ void_ptr_iterator<VoidIter,T> r )
+
+ {
+ r += n;
+ return r;
+ }
+
+ template< class VoidIter, class T >
+ inline void_ptr_iterator<VoidIter,T>
+ operator-( void_ptr_iterator<VoidIter,T> l,
+ BOOST_DEDUCED_TYPENAME void_ptr_iterator<VoidIter,T>::difference_type n )
+ {
+ l -= n;
+ return l;
+ }
+
+ template< class VoidIter, class T >
+ inline void_ptr_iterator<VoidIter,T>
+ operator-( BOOST_DEDUCED_TYPENAME void_ptr_iterator<VoidIter,T>::difference_type n,
+ void_ptr_iterator<VoidIter,T> r )
+
+ {
+ r -= n;
+ return r;
+ }
+
+ template< class VoidIter, class T, class VoidIterU, class U >
+ inline BOOST_DEDUCED_TYPENAME void_ptr_iterator<VoidIter,T>::difference_type
+ operator-( void_ptr_iterator<VoidIter,T> l,
+ void_ptr_iterator<VoidIterU,U> r )
+
+ {
+ return l.base() - r.base();
+ }
+
+
+
+ template< class VoidIterT, class T, class VoidIterU, class U >
+ inline bool operator==( const void_ptr_iterator<VoidIterT,T>& l,
+ const void_ptr_iterator<VoidIterU,U>& r )
+ {
+ return l.base() == r.base();
+ }
+
+
+
+ template< class VoidIterT, class T, class VoidIterU, class U >
+ inline bool operator!=( const void_ptr_iterator<VoidIterT,T>& l,
+ const void_ptr_iterator<VoidIterU,U>& r )
+ {
+ return l.base() != r.base();
+ }
+
+
+
+ template< class VoidIterT, class T, class VoidIterU, class U >
+ inline bool operator<( const void_ptr_iterator<VoidIterT,T>& l,
+ const void_ptr_iterator<VoidIterU,U>& r )
+ {
+ return l.base() < r.base();
+ }
+
+
+
+ template< class VoidIterT, class T, class VoidIterU, class U >
+ inline bool operator<=( const void_ptr_iterator<VoidIterT,T>& l,
+ const void_ptr_iterator<VoidIterU,U>& r )
+ {
+ return l.base() <= r.base();
+ }
+
+
+
+ template< class VoidIterT, class T, class VoidIterU, class U >
+ inline bool operator>( const void_ptr_iterator<VoidIterT,T>& l,
+ const void_ptr_iterator<VoidIterU,U>& r )
+ {
+ return l.base() > r.base();
+ }
+
+
+
+ template< class VoidIterT, class T, class VoidIterU, class U >
+ inline bool operator>=( const void_ptr_iterator<VoidIterT,T>& l,
+ const void_ptr_iterator<VoidIterU,U>& r )
+ {
+ return l.base() >= r.base();
+ }
+
+}
+
+#endif
diff --git a/boost/boost/ptr_container/exception.hpp b/boost/boost/ptr_container/exception.hpp
new file mode 100644
index 00000000000..d9a5ffeaf55
--- /dev/null
+++ b/boost/boost/ptr_container/exception.hpp
@@ -0,0 +1,58 @@
+//
+// Boost.Pointer Container
+//
+// Copyright Thorsten Ottosen 2003-2005. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/ptr_container/
+//
+
+#ifndef BOOST_PTR_CONTAINER_EXCEPTION_HPP
+#define BOOST_PTR_CONTAINER_EXCEPTION_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif
+
+#include <exception>
+
+namespace boost
+{
+ class bad_ptr_container_operation : public std::exception
+ {
+ const char* what_;
+ public:
+ bad_ptr_container_operation( const char* what ) : what_( what )
+ { }
+
+ virtual const char* what() const throw()
+ {
+ return what_;
+ }
+ };
+
+
+
+ class bad_index : public bad_ptr_container_operation
+ {
+ public:
+ bad_index( const char* what ) : bad_ptr_container_operation( what )
+ { }
+ };
+
+
+
+ class bad_pointer : public bad_ptr_container_operation
+ {
+ public:
+ bad_pointer() : bad_ptr_container_operation( "Null pointer not allowed in a pointer container!" )
+ { }
+
+ bad_pointer( const char* text ) : bad_ptr_container_operation( text )
+ { }
+ };
+}
+
+#endif
diff --git a/boost/boost/ptr_container/indirect_fun.hpp b/boost/boost/ptr_container/indirect_fun.hpp
new file mode 100644
index 00000000000..1ff0645ff64
--- /dev/null
+++ b/boost/boost/ptr_container/indirect_fun.hpp
@@ -0,0 +1,133 @@
+//
+// Boost.Pointer Container
+//
+// Copyright Thorsten Ottosen 2003-2005. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/ptr_container/
+//
+
+#ifndef BOOST_PTR_CONTAINER_INDIRECT_FUN_HPP
+#define BOOST_PTR_CONTAINER_INDIRECT_FUN_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+ #pragma once
+#endif
+
+#include <boost/config.hpp>
+
+#ifdef BOOST_NO_SFINAE
+#else
+#include <boost/utility/result_of.hpp>
+#include <boost/pointee.hpp>
+#endif // BOOST_NO_SFINAE
+
+#include <boost/assert.hpp>
+#include <functional>
+
+
+namespace boost
+{
+
+
+ template
+ <
+ class Fun
+#ifdef BOOST_NO_SFINAE
+ , class Result = bool
+#endif
+ >
+ class indirect_fun
+ {
+ Fun fun;
+ public:
+ indirect_fun() : fun(Fun())
+ { }
+
+ indirect_fun( Fun f ) : fun(f)
+ { }
+
+ template< class T >
+#ifdef BOOST_NO_SFINAE
+ Result
+#else
+ BOOST_DEDUCED_TYPENAME result_of< Fun( BOOST_DEDUCED_TYPENAME pointee<T>::type ) >::type
+#endif
+ operator()( const T& r ) const
+ {
+ return fun( *r );
+ }
+
+ template< class T, class U >
+#ifdef BOOST_NO_SFINAE
+ Result
+#else
+ BOOST_DEDUCED_TYPENAME result_of< Fun( BOOST_DEDUCED_TYPENAME pointee<T>::type,
+ BOOST_DEDUCED_TYPENAME pointee<U>::type ) >::type
+#endif
+ operator()( const T& r, const U& r2 ) const
+ {
+ return fun( *r, *r2 );
+ }
+ };
+
+ template< class Fun >
+ inline indirect_fun<Fun> make_indirect_fun( Fun f )
+ {
+ return indirect_fun<Fun>( f );
+ }
+
+
+ template
+ <
+ class Fun,
+ class Arg1,
+ class Arg2 = Arg1
+#ifdef BOOST_NO_SFINAE
+ , class Result = bool
+#endif
+ >
+ class void_ptr_indirect_fun
+ {
+ Fun fun;
+ public:
+
+ void_ptr_indirect_fun() : fun(Fun())
+ { }
+
+ void_ptr_indirect_fun( Fun f ) : fun(f)
+ { }
+#ifdef BOOST_NO_SFINAE
+ Result
+#else
+ BOOST_DEDUCED_TYPENAME result_of< Fun( Arg1 ) >::type
+#endif
+ operator()( const void* r ) const
+ {
+ BOOST_ASSERT( r != 0 );
+ return fun( * static_cast<const Arg1*>( r ) );
+ }
+
+#ifdef BOOST_NO_SFINAE
+ Result
+#else
+ BOOST_DEDUCED_TYPENAME result_of< Fun( Arg1, Arg2 ) >::type
+#endif
+ operator()( const void* l, const void* r ) const
+ {
+ BOOST_ASSERT( l != 0 && r != 0 );
+ return fun( * static_cast<const Arg1*>( l ), * static_cast<const Arg2*>( r ) );
+ }
+ };
+
+ template< class Arg, class Fun >
+ inline void_ptr_indirect_fun<Fun,Arg> make_void_ptr_indirect_fun( Fun f )
+ {
+ return void_ptr_indirect_fun<Fun,Arg>( f );
+ }
+
+} // namespace 'boost'
+
+#endif
diff --git a/boost/boost/ptr_container/nullable.hpp b/boost/boost/ptr_container/nullable.hpp
new file mode 100644
index 00000000000..50cbd0b28a6
--- /dev/null
+++ b/boost/boost/ptr_container/nullable.hpp
@@ -0,0 +1,63 @@
+//
+// Boost.Pointer Container
+//
+// Copyright Thorsten Ottosen 2003-2005. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/ptr_container/
+//
+
+
+#ifndef BOOST_INDIRECT_CONTAINER_NULLABLE_HPP
+#define BOOST_INDIRECT_CONTAINER_NULLABLE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif
+
+#include <boost/type_traits/detail/yes_no_type.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/config.hpp>
+
+namespace boost
+{
+
+ template< class T >
+ struct nullable
+ {
+ typedef T type;
+ };
+
+ namespace ptr_container_detail
+ {
+ template< class T >
+ type_traits::yes_type is_nullable( const nullable<T>* );
+
+ type_traits::no_type is_nullable( ... );
+ }
+
+ template< class T >
+ struct is_nullable
+ {
+ private:
+ BOOST_STATIC_CONSTANT( T*, var );
+ public:
+ BOOST_STATIC_CONSTANT(bool, value = sizeof( ptr_container_detail::is_nullable( var ) )
+ == sizeof( type_traits::yes_type ) );
+ };
+
+ template< class T >
+ struct remove_nullable
+ {
+ typedef BOOST_DEDUCED_TYPENAME mpl::eval_if< is_nullable<T>,
+ T,
+ mpl::identity<T> >::type
+ type;
+ };
+
+}
+
+#endif
diff --git a/boost/boost/ptr_container/ptr_array.hpp b/boost/boost/ptr_container/ptr_array.hpp
new file mode 100644
index 00000000000..b32005e76be
--- /dev/null
+++ b/boost/boost/ptr_container/ptr_array.hpp
@@ -0,0 +1,239 @@
+//
+// Boost.Pointer Container
+//
+// Copyright Thorsten Ottosen 2003-2005. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/ptr_container/
+//
+
+#ifndef BOOST_PTR_CONTAINER_PTR_ARRAY_HPP
+#define BOOST_PTR_CONTAINER_PTR_ARRAY_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif
+
+#include <boost/array.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/ptr_container/ptr_sequence_adapter.hpp>
+
+namespace boost
+{
+
+ namespace ptr_container_detail
+ {
+ template
+ <
+ class T,
+ size_t N,
+ class Allocator = int // dummy
+ >
+ class ptr_array_impl : public boost::array<T,N>
+ {
+ public:
+ typedef Allocator allocator_type;
+
+ ptr_array_impl( Allocator a = Allocator() )
+ {
+ this->assign( 0 );
+ }
+
+ ptr_array_impl( size_t, T*, Allocator a = Allocator() )
+ {
+ this->assign( 0 );
+ }
+ };
+ }
+
+ template
+ <
+ class T,
+ size_t N,
+ class CloneAllocator = heap_clone_allocator
+ >
+ class ptr_array : public
+ ptr_sequence_adapter< T,
+ ptr_container_detail::ptr_array_impl<void*,N>,
+ CloneAllocator >
+ {
+ private:
+ typedef ptr_sequence_adapter< T,
+ ptr_container_detail::ptr_array_impl<void*,N>,
+ CloneAllocator >
+ base_class;
+
+ typedef BOOST_DEDUCED_TYPENAME remove_nullable<T>::type U;
+
+ typedef ptr_array<T,N,CloneAllocator>
+ this_type;
+
+ ptr_array( const this_type& );
+ void operator=( const this_type& );
+
+ public:
+ typedef std::size_t size_type;
+ typedef U* value_type;
+ typedef U* pointer;
+ typedef U& reference;
+ typedef const U& const_reference;
+ typedef BOOST_DEDUCED_TYPENAME base_class::auto_type
+ auto_type;
+
+ public: // constructors
+ ptr_array() : base_class()
+ { }
+
+ ptr_array( std::auto_ptr<this_type> r )
+ : base_class( r ) { }
+
+ void operator=( std::auto_ptr<this_type> r )
+ {
+ base_class::operator=(r);
+ }
+
+ std::auto_ptr<this_type> release()
+ {
+ std::auto_ptr<this_type> ptr( new this_type );
+ this->swap( *ptr );
+ return ptr;
+ }
+
+ std::auto_ptr<this_type> clone() const
+ {
+ std::auto_ptr<this_type> pa( new this_type );
+ for( size_t i = 0; i != N; ++i )
+ {
+ if( ! is_null(i) )
+ pa->replace( i, CloneAllocator::allocate_clone( (*this)[i] ) );
+ }
+ return pa;
+ }
+
+ private: // hide some members
+ using base_class::insert;
+ using base_class::erase;
+ using base_class::push_back;
+ using base_class::push_front;
+ using base_class::pop_front;
+ using base_class::pop_back;
+ using base_class::transfer;
+ using base_class::get_allocator;
+
+ public: // compile-time interface
+
+ template< size_t idx >
+ auto_type replace( U* r ) // strong
+ {
+ BOOST_STATIC_ASSERT( idx < N );
+
+ this->enforce_null_policy( r, "Null pointer in 'ptr_array::replace()'" );
+
+ auto_type res( static_cast<U*>( this->c_private()[idx] ) ); // nothrow
+ this->c_private()[idx] = r; // nothrow
+ return move(res); // nothrow
+ }
+
+ template< size_t idx, class V >
+ auto_type replace( std::auto_ptr<V> r )
+ {
+ return replace<idx>( r.release() );
+ }
+
+ auto_type replace( size_t idx, U* r ) // strong
+ {
+ this->enforce_null_policy( r, "Null pointer in 'ptr_array::replace()'" );
+
+ auto_type ptr( r );
+
+ BOOST_PTR_CONTAINER_THROW_EXCEPTION( idx >= N, bad_index,
+ "'replace()' aout of bounds" );
+
+ auto_type res( static_cast<U*>( this->c_private()[idx] ) ); // nothrow
+ this->c_private()[idx] = ptr.release(); // nothrow
+ return move(res); // nothrow
+ }
+
+ template< class V >
+ auto_type replace( size_t idx, std::auto_ptr<V> r )
+ {
+ return replace( idx, r.release() );
+ }
+
+ using base_class::at;
+
+ template< size_t idx >
+ T& at()
+ {
+ BOOST_STATIC_ASSERT( idx < N );
+ return (*this)[idx];
+ }
+
+ template< size_t idx >
+ const T& at() const
+ {
+ BOOST_STATIC_ASSERT( idx < N );
+ return (*this)[idx];
+ }
+
+ bool is_null( size_t idx ) const
+ {
+ return base_class::is_null(idx);
+ }
+
+ template< size_t idx >
+ bool is_null() const
+ {
+ BOOST_STATIC_ASSERT( idx < N );
+ return this->c_private()[idx] == 0;
+ }
+
+ public: // serialization
+
+ template< class Archive >
+ void save( Archive& ar, const unsigned ) const
+ {
+ this->save_helper( ar );
+ }
+
+ template< class Archive >
+ void load( Archive& ar, const unsigned ) // basic
+ {
+ for( size_type i = 0u; i != N; ++i )
+ {
+ //
+ // Remark: pointers are not tracked,
+ // so we need not call ar.reset_object_address(v, u)
+ //
+ T* p;
+ ar & p;
+ this->replace( i, p );
+ }
+ }
+
+ BOOST_SERIALIZATION_SPLIT_MEMBER()
+
+ };
+
+ //////////////////////////////////////////////////////////////////////////////
+ // clonability
+
+ template< typename T, size_t size, typename CA >
+ inline ptr_array<T,size,CA>* new_clone( const ptr_array<T,size,CA>& r )
+ {
+ return r.clone().release();
+ }
+
+ /////////////////////////////////////////////////////////////////////////
+ // swap
+
+ template< typename T, size_t size, typename CA >
+ inline void swap( ptr_array<T,size,CA>& l, ptr_array<T,size,CA>& r )
+ {
+ l.swap(r);
+ }
+}
+
+#endif
diff --git a/boost/boost/ptr_container/ptr_container.hpp b/boost/boost/ptr_container/ptr_container.hpp
new file mode 100644
index 00000000000..5904102dc38
--- /dev/null
+++ b/boost/boost/ptr_container/ptr_container.hpp
@@ -0,0 +1,26 @@
+//
+// Boost.Pointer Container
+//
+// Copyright Thorsten Ottosen 2003-2005. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/ptr_container/
+//
+
+#ifndef BOOST_PTR_CONTAINER_HPP
+#define BOOST_PTR_CONTAINER_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif
+
+#include <boost/ptr_container/ptr_deque.hpp>
+#include <boost/ptr_container/ptr_list.hpp>
+#include <boost/ptr_container/ptr_map.hpp>
+#include <boost/ptr_container/ptr_set.hpp>
+#include <boost/ptr_container/ptr_vector.hpp>
+
+#endif
+
diff --git a/boost/boost/ptr_container/ptr_deque.hpp b/boost/boost/ptr_container/ptr_deque.hpp
new file mode 100644
index 00000000000..70247fc0d71
--- /dev/null
+++ b/boost/boost/ptr_container/ptr_deque.hpp
@@ -0,0 +1,72 @@
+//
+// Boost.Pointer Container
+//
+// Copyright Thorsten Ottosen 2003-2005. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/ptr_container/
+//
+
+#ifndef BOOST_PTR_CONTAINER_PTR_DEQUE_HPP
+#define BOOST_PTR_CONTAINER_PTR_DEQUE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif
+
+#include <deque>
+#include <boost/ptr_container/ptr_sequence_adapter.hpp>
+
+namespace boost
+{
+
+ template
+ <
+ class T,
+ class CloneAllocator = heap_clone_allocator,
+ class Allocator = std::allocator<void*>
+ >
+ class ptr_deque : public
+ ptr_sequence_adapter< T,
+ std::deque<void*,Allocator>,
+ CloneAllocator >
+ {
+ typedef ptr_sequence_adapter< T,
+ std::deque<void*,Allocator>,
+ CloneAllocator >
+ base_class;
+
+ typedef ptr_deque<T,CloneAllocator,Allocator> this_type;
+
+ public:
+
+ BOOST_PTR_CONTAINER_DEFINE_NON_INHERITED_MEMBERS( ptr_deque,
+ base_class,
+ this_type );
+ };
+
+ //////////////////////////////////////////////////////////////////////////////
+ // clonability
+
+ template< typename T, typename CA, typename A >
+ inline ptr_deque<T,CA,A>* new_clone( const ptr_deque<T,CA,A>& r )
+ {
+ return r.clone().release();
+ }
+
+ /////////////////////////////////////////////////////////////////////////
+ // swap
+
+ template< typename T, typename CA, typename A >
+ inline void swap( ptr_deque<T,CA,A>& l, ptr_deque<T,CA,A>& r )
+ {
+ l.swap(r);
+ }
+}
+
+//#undef BOOST_FORWARD_TYPEDEF
+//#undef BOOST_PTR_CONTAINER_RELEASE_AND_CLONE
+
+#endif
diff --git a/boost/boost/ptr_container/ptr_list.hpp b/boost/boost/ptr_container/ptr_list.hpp
new file mode 100644
index 00000000000..6d56ed2d13c
--- /dev/null
+++ b/boost/boost/ptr_container/ptr_list.hpp
@@ -0,0 +1,95 @@
+//
+// Boost.Pointer Container
+//
+// Copyright Thorsten Ottosen 2003-2005. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/ptr_container/
+//
+
+#ifndef BOOST_PTR_CONTAINER_PTR_LIST_HPP
+#define BOOST_PTR_CONTAINER_PTR_LIST_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif
+
+#include <boost/ptr_container/ptr_sequence_adapter.hpp>
+#include <list>
+
+namespace boost
+{
+
+ template
+ <
+ class T,
+ class CloneAllocator = heap_clone_allocator,
+ class Allocator = std::allocator<void*>
+ >
+ class ptr_list : public
+ ptr_sequence_adapter< T,
+ std::list<void*,Allocator>,
+ CloneAllocator >
+ {
+ typedef ptr_sequence_adapter< T,
+ std::list<void*,Allocator>,
+ CloneAllocator >
+ base_class;
+
+ typedef ptr_list<T,CloneAllocator,Allocator> this_type;
+
+ public:
+ BOOST_PTR_CONTAINER_DEFINE_NON_INHERITED_MEMBERS( ptr_list,
+ base_class,
+ this_type );
+
+ public:
+ using base_class::merge;
+
+ void merge( ptr_list& x )
+ {
+ merge( x, std::less<T>() );
+ }
+
+ template< typename Compare >
+ void merge( ptr_list& x, Compare comp )
+ {
+ this->c_private().merge( x.c_private(), void_ptr_indirect_fun<Compare,T>( comp ) );
+ }
+
+ void sort()
+ {
+ sort( std::less<T>() );
+ };
+
+ template< typename Compare >
+ void sort( Compare comp )
+ {
+ this->c_private().sort( void_ptr_indirect_fun<Compare,T>( comp ) );
+ }
+
+ }; // class 'ptr_list'
+
+ //////////////////////////////////////////////////////////////////////////////
+ // clonability
+
+ template< typename T, typename CA, typename A >
+ inline ptr_list<T,CA,A>* new_clone( const ptr_list<T,CA,A>& r )
+ {
+ return r.clone().release();
+ }
+
+ /////////////////////////////////////////////////////////////////////////
+ // swap
+
+ template< typename T, typename CA, typename A >
+ inline void swap( ptr_list<T,CA,A>& l, ptr_list<T,CA,A>& r )
+ {
+ l.swap(r);
+ }
+}
+
+
+#endif
diff --git a/boost/boost/ptr_container/ptr_map.hpp b/boost/boost/ptr_container/ptr_map.hpp
new file mode 100644
index 00000000000..cc52a5fc16a
--- /dev/null
+++ b/boost/boost/ptr_container/ptr_map.hpp
@@ -0,0 +1,131 @@
+//
+// Boost.Pointer Container
+//
+// Copyright Thorsten Ottosen 2003-2005. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/ptr_container/
+//
+
+#ifndef BOOST_PTR_CONTAINER_PTR_MAP_HPP
+#define BOOST_PTR_CONTAINER_PTR_MAP_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif
+
+#include <map>
+#include <boost/ptr_container/ptr_map_adapter.hpp>
+
+namespace boost
+{
+
+ template
+ <
+ class Key,
+ class T,
+ class Compare = std::less<Key>,
+ class CloneAllocator = heap_clone_allocator,
+ class Allocator = std::allocator< std::pair<const Key,void*> >
+ >
+ class ptr_map :
+ public ptr_map_adapter<T,std::map<Key,void*,
+ Compare,Allocator>,CloneAllocator>
+ {
+ typedef ptr_map_adapter<T,std::map<Key,void*,
+ Compare,Allocator>,CloneAllocator>
+ base_type;
+
+ typedef ptr_map<Key,T,Compare,CloneAllocator,Allocator> this_type;
+
+ public:
+ explicit ptr_map( const Compare& comp = Compare(),
+ const Allocator& a = Allocator() )
+ : base_type( comp, a ) { }
+
+ template< class InputIterator >
+ ptr_map( InputIterator first, InputIterator last,
+ const Compare& comp = Compare(),
+ const Allocator& a = Allocator() )
+ : base_type( first, last, comp, a )
+ { }
+
+ BOOST_PTR_CONTAINER_DEFINE_RELEASE_AND_CLONE( ptr_map, base_type,
+ this_type );
+
+ };
+
+
+
+ template
+ <
+ class Key,
+ class T,
+ class Compare = std::less<Key>,
+ class CloneAllocator = heap_clone_allocator,
+ class Allocator = std::allocator< std::pair<const Key,void*> >
+ >
+ class ptr_multimap :
+ public ptr_multimap_adapter<T,std::multimap<Key,void*,
+ Compare,Allocator>,CloneAllocator>
+ {
+ typedef ptr_multimap_adapter<T,std::multimap<Key,void*,
+ Compare,Allocator>,CloneAllocator>
+ base_type;
+
+ typedef ptr_multimap<Key,T,Compare,CloneAllocator,Allocator> this_type;
+
+ public:
+ explicit ptr_multimap( const Compare& comp = Compare(),
+ const Allocator& a = Allocator() )
+ : base_type( comp, a ) { }
+
+ template< class InputIterator >
+ ptr_multimap( InputIterator first, InputIterator last,
+ const Compare& comp = Compare(),
+ const Allocator& a = Allocator() )
+ : base_type( first, last, comp, a )
+ { }
+
+ BOOST_PTR_CONTAINER_DEFINE_RELEASE_AND_CLONE( ptr_multimap,
+ base_type,
+ this_type );
+
+ };
+
+ //////////////////////////////////////////////////////////////////////////////
+ // clonability
+
+ template< class K, class T, class C, class CA, class A >
+ inline ptr_map<K,T,C,CA,A>* new_clone( const ptr_map<K,T,C,CA,A>& r )
+ {
+ return r.clone().release();
+ }
+
+ template< class K, class T, class C, class CA, class A >
+ inline ptr_multimap<K,T,C,CA,A>* new_clone( const ptr_multimap<K,T,C,CA,A>& r )
+ {
+ return r.clone().release();
+ }
+
+ /////////////////////////////////////////////////////////////////////////
+ // swap
+
+ template< typename K, typename T, typename C, typename CA, typename A >
+ inline void swap( ptr_map<K,T,C,CA,A>& l, ptr_map<K,T,C,CA,A>& r )
+ {
+ l.swap(r);
+ }
+
+ template< typename K, typename T, typename C, typename CA, typename A >
+ inline void swap( ptr_multimap<K,T,C,CA,A>& l, ptr_multimap<K,T,C,CA,A>& r )
+ {
+ l.swap(r);
+ }
+
+
+}
+
+#endif
diff --git a/boost/boost/ptr_container/ptr_map_adapter.hpp b/boost/boost/ptr_container/ptr_map_adapter.hpp
new file mode 100644
index 00000000000..1923e6e01a3
--- /dev/null
+++ b/boost/boost/ptr_container/ptr_map_adapter.hpp
@@ -0,0 +1,682 @@
+//
+// Boost.Pointer Container
+//
+// Copyright Thorsten Ottosen 2003-2005. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/ptr_container/
+//
+
+#ifndef BOOST_PTR_CONTAINER_DETAIL_PTR_MAP_ADAPTER_HPP
+#define BOOST_PTR_CONTAINER_DETAIL_PTR_MAP_ADAPTER_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif
+
+#include <boost/ptr_container/detail/map_iterator.hpp>
+#include <boost/ptr_container/detail/associative_ptr_container.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/range/iterator_range.hpp>
+
+namespace boost
+{
+namespace ptr_container_detail
+{
+
+ template
+ <
+ class T,
+ class VoidPtrMap
+ >
+ struct map_config
+ {
+ typedef BOOST_DEDUCED_TYPENAME remove_nullable<T>::type
+ U;
+ typedef VoidPtrMap
+ void_container_type;
+
+ typedef BOOST_DEDUCED_TYPENAME VoidPtrMap::allocator_type
+ allocator_type;
+
+ typedef BOOST_DEDUCED_TYPENAME VoidPtrMap::key_compare
+ key_compare;
+
+ typedef BOOST_DEDUCED_TYPENAME VoidPtrMap::value_compare
+ value_compare;
+
+ typedef BOOST_DEDUCED_TYPENAME VoidPtrMap::key_type
+ key_type;
+
+ typedef U value_type;
+
+ typedef ptr_map_iterator< BOOST_DEDUCED_TYPENAME VoidPtrMap::iterator, key_type, U* const >
+ iterator;
+
+ typedef ptr_map_iterator< BOOST_DEDUCED_TYPENAME VoidPtrMap::const_iterator, key_type, const U* const>
+ const_iterator;
+
+ template< class Iter >
+ static U* get_pointer( Iter i )
+ {
+ return i->second;
+ }
+
+ template< class Iter >
+ static const U* get_const_pointer( Iter i )
+ {
+ return i->second;
+ }
+
+ BOOST_STATIC_CONSTANT( bool, allow_null = boost::is_nullable<T>::value );
+ };
+
+
+
+ template
+ <
+ class T,
+ class VoidPtrMap,
+ class CloneAllocator
+ >
+ class ptr_map_adapter_base :
+ public ptr_container_detail::associative_ptr_container< map_config<T,VoidPtrMap>,
+ CloneAllocator >
+ {
+ typedef ptr_container_detail::associative_ptr_container< map_config<T,VoidPtrMap>,
+ CloneAllocator >
+ base_type;
+
+ typedef map_config<T,VoidPtrMap> config;
+
+ typedef ptr_map_adapter_base<T,VoidPtrMap,CloneAllocator> this_type;
+
+ public:
+
+ typedef BOOST_DEDUCED_TYPENAME base_type::allocator_type
+ allocator_type;
+ typedef BOOST_DEDUCED_TYPENAME base_type::iterator
+ iterator;
+ typedef BOOST_DEDUCED_TYPENAME base_type::const_iterator
+ const_iterator;
+ typedef BOOST_DEDUCED_TYPENAME base_type::size_type
+ size_type;
+ typedef BOOST_DEDUCED_TYPENAME base_type::key_type
+ key_type;
+ typedef BOOST_DEDUCED_TYPENAME base_type::auto_type
+ auto_type;
+ typedef BOOST_DEDUCED_TYPENAME base_type::value_type
+ mapped_type;
+ typedef BOOST_DEDUCED_TYPENAME base_type::reference
+ mapped_reference;
+ typedef BOOST_DEDUCED_TYPENAME base_type::const_reference
+ const_mapped_reference;
+ typedef BOOST_DEDUCED_TYPENAME iterator_value<iterator>::type
+ value_type;
+ typedef value_type
+ reference;
+ typedef BOOST_DEDUCED_TYPENAME iterator_value<const_iterator>::type
+ const_reference;
+ typedef value_type
+ pointer;
+ typedef const_reference
+ const_pointer;
+
+ private:
+ const_mapped_reference lookup( const key_type& key ) const
+ {
+ const_iterator i = this->find( key );
+ if( i != this->end() )
+ return *i->second;
+ else
+ BOOST_PTR_CONTAINER_THROW_EXCEPTION( true, bad_ptr_container_operation,
+ "'ptr_map/multimap::at()' could"
+ " not find key" );
+ }
+
+ struct eraser // scope guard
+ {
+ bool released_;
+ VoidPtrMap* m_;
+ const key_type& key_;
+
+ eraser( VoidPtrMap* m, const key_type& key )
+ : released_(false), m_(m), key_(key)
+ {}
+
+ ~eraser()
+ {
+ if( !released_ )
+ m_->erase(key_);
+ }
+
+ void release() { released_ = true; }
+ };
+
+ mapped_reference insert_lookup( const key_type& key )
+ {
+ void*& ref = this->c_private()[key];
+ if( ref )
+ {
+ return *static_cast<mapped_type>(ref);
+ }
+ else
+ {
+ eraser e(&this->c_private(),key); // nothrow
+ mapped_type res = new T(); // strong
+ ref = res; // nothrow
+ e.release(); // nothrow
+ return *res;
+ }
+ }
+
+ public:
+
+ ptr_map_adapter_base( const allocator_type& a = allocator_type() )
+ : base_type(a)
+ { }
+
+ template< class InputIterator >
+ ptr_map_adapter_base( InputIterator first, InputIterator last,
+ const allocator_type& a = allocator_type() )
+ : base_type( first, last, a )
+ { }
+
+ template< class Compare, class Allocator >
+ explicit ptr_map_adapter_base( const Compare& comp,
+ const Allocator& a )
+ : base_type( comp, a )
+ { }
+
+ template< class PtrContainer >
+ ptr_map_adapter_base( std::auto_ptr<PtrContainer> clone )
+ : base_type( clone )
+ { }
+
+ template< typename PtrContainer >
+ void operator=( std::auto_ptr<PtrContainer> clone )
+ {
+ base_type::operator=( clone );
+ }
+
+ iterator find( const key_type& x )
+ {
+ return iterator( this->c_private().find( x ) );
+ }
+
+ const_iterator find( const key_type& x ) const
+ {
+ return const_iterator( this->c_private().find( x ) );
+ }
+
+ size_type count( const key_type& x ) const
+ {
+ return this->c_private().count( x );
+ }
+
+ iterator lower_bound( const key_type& x )
+ {
+ return iterator( this->c_private().lower_bound( x ) );
+ }
+
+ const_iterator lower_bound( const key_type& x ) const
+ {
+ return const_iterator( this->c_private().lower_bound( x ) );
+ }
+
+ iterator upper_bound( const key_type& x )
+ {
+ return iterator( this->c_private().upper_bound( x ) );
+ }
+
+ const_iterator upper_bound( const key_type& x ) const
+ {
+ return const_iterator( this->c_private().upper_bound( x ) );
+ }
+
+ iterator_range<iterator> equal_range( const key_type& x )
+ {
+ std::pair<BOOST_DEDUCED_TYPENAME base_type::ptr_iterator,
+ BOOST_DEDUCED_TYPENAME base_type::ptr_iterator>
+ p = this->c_private().equal_range( x );
+ return make_iterator_range( iterator( p.first ), iterator( p.second ) );
+ }
+
+ iterator_range<const_iterator> equal_range( const key_type& x ) const
+ {
+ std::pair<BOOST_DEDUCED_TYPENAME base_type::ptr_const_iterator,
+ BOOST_DEDUCED_TYPENAME base_type::ptr_const_iterator>
+ p = this->c_private().equal_range( x );
+ return make_iterator_range( const_iterator( p.first ),
+ const_iterator( p.second ) );
+ }
+
+ mapped_reference at( const key_type& key )
+ {
+ return const_cast<mapped_reference>( lookup( key ) );
+ }
+
+ const_mapped_reference at( const key_type& key ) const
+ {
+ return lookup( key );
+ }
+
+ mapped_reference operator[]( const key_type& key )
+ {
+ return insert_lookup( key );
+ }
+
+ auto_type replace( iterator where, mapped_type x ) // strong
+ {
+ BOOST_ASSERT( where != this->end() );
+
+ this->enforce_null_policy( x, "Null pointer in 'replace()'" );
+
+ auto_type ptr( x );
+
+ BOOST_PTR_CONTAINER_THROW_EXCEPTION( this->empty(),
+ bad_ptr_container_operation,
+ "'replace()' on empty container" );
+
+ auto_type old( where->second ); // nothrow
+ where.base()->second = ptr.release(); // nothrow, commit
+ return move( old );
+ }
+
+ template< class U >
+ auto_type replace( iterator where, std::auto_ptr<U> x )
+ {
+ return replace( where, x.release() );
+ }
+
+ public: // serialization
+
+ template< class Archive >
+ void save( Archive& ar, const unsigned ) const
+ {
+ ar & ptr_container_detail::serialize_as_const( this->size() );
+
+ const_iterator i = this->begin(), e = this->end();
+ for( ; i != e; ++i )
+ {
+ ar & i->first;
+ ar & ptr_container_detail::serialize_as_const( i->second );
+ }
+ }
+ };
+
+} // ptr_container_detail
+
+ /////////////////////////////////////////////////////////////////////////
+ // ptr_map_adapter
+ /////////////////////////////////////////////////////////////////////////
+
+ template
+ <
+ class T,
+ class VoidPtrMap,
+ class CloneAllocator = heap_clone_allocator
+ >
+ class ptr_map_adapter :
+ public ptr_container_detail::ptr_map_adapter_base<T,VoidPtrMap,CloneAllocator>
+ {
+ typedef ptr_container_detail::ptr_map_adapter_base<T,VoidPtrMap,CloneAllocator>
+ base_type;
+
+ public:
+ typedef BOOST_DEDUCED_TYPENAME base_type::iterator
+ iterator;
+ typedef BOOST_DEDUCED_TYPENAME base_type::const_iterator
+ const_iterator;
+ typedef BOOST_DEDUCED_TYPENAME base_type::size_type
+ size_type;
+ typedef BOOST_DEDUCED_TYPENAME base_type::key_type
+ key_type;
+ typedef BOOST_DEDUCED_TYPENAME base_type::const_reference
+ const_reference;
+ typedef BOOST_DEDUCED_TYPENAME base_type::auto_type
+ auto_type;
+ typedef BOOST_DEDUCED_TYPENAME VoidPtrMap::key_compare
+ key_compare;
+ typedef BOOST_DEDUCED_TYPENAME VoidPtrMap::allocator_type
+ allocator_type;
+ typedef BOOST_DEDUCED_TYPENAME base_type::mapped_type
+ mapped_type;
+ private:
+
+ void safe_insert( const key_type& key, auto_type ptr ) // strong
+ {
+ std::pair<BOOST_DEDUCED_TYPENAME base_type::ptr_iterator,bool>
+ res =
+ this->c_private().insert( std::make_pair( key, ptr.get() ) ); // strong, commit
+ if( res.second ) // nothrow
+ ptr.release(); // nothrow
+ }
+
+ template< class II >
+ void map_basic_clone_and_insert( II first, II last )
+ {
+ while( first != last )
+ {
+ if( this->find( first->first ) == this->end() )
+ {
+ const_reference p = *first.base(); // nothrow
+ auto_type ptr( this->null_policy_allocate_clone( p.second ) );
+ // strong
+ this->safe_insert( p.first, ptr_container_detail::
+ move( ptr ) );// strong, commit
+ }
+ ++first;
+ }
+ }
+
+ public:
+
+ explicit ptr_map_adapter( const key_compare& comp = key_compare(),
+ const allocator_type& a = allocator_type() )
+ : base_type( comp, a ) { }
+
+ template< class InputIterator >
+ ptr_map_adapter( InputIterator first, InputIterator last,
+ const key_compare& comp = key_compare(),
+ const allocator_type& a = allocator_type() )
+ : base_type( comp, a )
+ {
+ map_basic_clone_and_insert( first, last );
+ }
+
+ template< class U >
+ ptr_map_adapter( std::auto_ptr<U> r ) : base_type( r )
+ { }
+
+ template< class U >
+ void operator=( std::auto_ptr<U> r )
+ {
+ base_type::operator=( r );
+ }
+
+ using base_type::release;
+
+ template< typename InputIterator >
+ void insert( InputIterator first, InputIterator last ) // basic
+ {
+ map_basic_clone_and_insert( first, last );
+ }
+
+ template< class Range >
+ void insert( const Range& r )
+ {
+ insert( boost::begin(r), boost::end(r) );
+ }
+
+ private:
+ std::pair<iterator,bool> insert_impl( const key_type& key, mapped_type x ) // strong
+ {
+ this->enforce_null_policy( x, "Null pointer in ptr_map_adapter::insert()" );
+ auto_type ptr( x ); // nothrow
+
+ std::pair<BOOST_DEDUCED_TYPENAME base_type::ptr_iterator,bool>
+ res = this->c_private().insert( std::make_pair( key, x ) ); // strong, commit
+ if( res.second ) // nothrow
+ ptr.release(); // nothrow
+ return std::make_pair( iterator( res.first ), res.second ); // nothrow
+ }
+
+ public:
+
+ std::pair<iterator,bool> insert( key_type& key, mapped_type x )
+ {
+ return insert_impl( key, x );
+ }
+
+ template< class U >
+ std::pair<iterator,bool> insert( const key_type& key, std::auto_ptr<U> x )
+ {
+ return insert_impl( key, x.release() );
+ }
+
+ template< class PtrMapAdapter >
+ bool transfer( BOOST_DEDUCED_TYPENAME PtrMapAdapter::iterator object,
+ PtrMapAdapter& from ) // strong
+ {
+ return this->single_transfer( object, from );
+ }
+
+ template< class PtrMapAdapter >
+ size_type transfer( BOOST_DEDUCED_TYPENAME PtrMapAdapter::iterator first,
+ BOOST_DEDUCED_TYPENAME PtrMapAdapter::iterator last,
+ PtrMapAdapter& from ) // basic
+ {
+ return this->single_transfer( first, last, from );
+ }
+
+#if defined(BOOST_NO_SFINAE) || BOOST_WORKAROUND(__SUNPRO_CC, <= 0x580)
+#else
+
+ template< class PtrMapAdapter, class Range >
+ BOOST_DEDUCED_TYPENAME boost::disable_if< boost::is_same< Range,
+ BOOST_DEDUCED_TYPENAME PtrMapAdapter::iterator >,
+ size_type >::type
+ transfer( const Range& r, PtrMapAdapter& from ) // basic
+ {
+ return transfer( boost::begin(r), boost::end(r), from );
+ }
+
+#endif
+
+ template< class PtrMapAdapter >
+ size_type transfer( PtrMapAdapter& from ) // basic
+ {
+ return transfer( from.begin(), from.end(), from );
+ }
+
+ public: // serialization
+
+ template< class Archive >
+ void load( Archive& ar, const unsigned ) // strong
+ {
+ this->clear();
+ size_type n;
+ ar & n;
+
+ for( size_type i = 0u; i != n; ++i )
+ {
+ key_type key;
+ T* value;
+ ar & key;
+ ar & value;
+ std::pair<iterator,bool> p = this->insert( key, value );
+ ar.reset_object_address( &p.first->first, &key );
+ }
+ }
+
+ BOOST_SERIALIZATION_SPLIT_MEMBER()
+
+ };
+
+ /////////////////////////////////////////////////////////////////////////
+ // ptr_multimap_adapter
+ /////////////////////////////////////////////////////////////////////////
+
+ template
+ <
+ class T,
+ class VoidPtrMultiMap,
+ class CloneAllocator = heap_clone_allocator
+ >
+ class ptr_multimap_adapter :
+ public ptr_container_detail::ptr_map_adapter_base<T,VoidPtrMultiMap,CloneAllocator>
+ {
+ typedef ptr_container_detail::ptr_map_adapter_base<T,VoidPtrMultiMap,CloneAllocator>
+ base_type;
+
+ public: // typedefs
+ typedef BOOST_DEDUCED_TYPENAME base_type::iterator
+ iterator;
+ typedef BOOST_DEDUCED_TYPENAME base_type::const_iterator
+ const_iterator;
+ typedef BOOST_DEDUCED_TYPENAME base_type::size_type
+ size_type;
+ typedef BOOST_DEDUCED_TYPENAME base_type::key_type
+ key_type;
+ typedef BOOST_DEDUCED_TYPENAME base_type::const_reference
+ const_reference;
+ typedef BOOST_DEDUCED_TYPENAME base_type::mapped_type
+ mapped_type;
+ typedef BOOST_DEDUCED_TYPENAME base_type::auto_type
+ auto_type;
+ typedef BOOST_DEDUCED_TYPENAME VoidPtrMultiMap::key_compare
+ key_compare;
+ typedef BOOST_DEDUCED_TYPENAME VoidPtrMultiMap::allocator_type
+ allocator_type;
+ private:
+
+ void safe_insert( const key_type& key, auto_type ptr ) // strong
+ {
+ this->c_private().insert(
+ std::make_pair( key, ptr.get() ) ); // strong, commit
+ ptr.release(); // nothrow
+ }
+
+ template< typename II >
+ void map_basic_clone_and_insert( II first, II last )
+ {
+ while( first != last )
+ {
+ const_reference pair = *first.base(); // nothrow
+ auto_type ptr( this->null_policy_allocate_clone( pair.second ) );
+ // strong
+ safe_insert( pair.first, ptr_container_detail::
+ move( ptr ) ); // strong, commit
+ ++first;
+ }
+ }
+
+ public:
+
+ explicit ptr_multimap_adapter( const key_compare& comp = key_compare(),
+ const allocator_type& a = allocator_type() )
+ : base_type( comp, a ) { }
+
+ template< class InputIterator >
+ ptr_multimap_adapter( InputIterator first, InputIterator last,
+ const key_compare& comp = key_compare(),
+ const allocator_type& a = allocator_type() )
+ : base_type( comp, a )
+ {
+ map_basic_clone_and_insert( first, last );
+ }
+
+ template< class U >
+ ptr_multimap_adapter( std::auto_ptr<U> r ) : base_type( r )
+ { }
+
+ template< class U >
+ void operator=( std::auto_ptr<U> r )
+ {
+ base_type::operator=( r );
+ }
+
+ using base_type::release;
+
+ template< typename InputIterator >
+ void insert( InputIterator first, InputIterator last ) // basic
+ {
+ map_basic_clone_and_insert( first, last );
+ }
+
+ template< class Range >
+ void insert( const Range& r )
+ {
+ insert( boost::begin(r), boost::end(r) );
+ }
+
+ iterator insert( key_type& key, mapped_type x ) // strong
+ {
+ this->enforce_null_policy( x,
+ "Null pointer in 'ptr_multimap_adapter::insert()'" );
+
+ auto_type ptr( x ); // nothrow
+ BOOST_DEDUCED_TYPENAME base_type::ptr_iterator
+ res = this->c_private().insert( std::make_pair( key, x ) );
+ // strong, commit
+ ptr.release(); // notrow
+ return iterator( res );
+ }
+
+ template< class U >
+ iterator insert( key_type& key, std::auto_ptr<U> x )
+ {
+ return insert( key, x.release() );
+ }
+
+ template< class PtrMapAdapter >
+ void transfer( BOOST_DEDUCED_TYPENAME PtrMapAdapter::iterator object,
+ PtrMapAdapter& from ) // strong
+ {
+ this->multi_transfer( object, from );
+ }
+
+ template< class PtrMapAdapter >
+ size_type transfer( BOOST_DEDUCED_TYPENAME PtrMapAdapter::iterator first,
+ BOOST_DEDUCED_TYPENAME PtrMapAdapter::iterator last,
+ PtrMapAdapter& from ) // basic
+ {
+ return this->multi_transfer( first, last, from );
+ }
+
+#if defined(BOOST_NO_SFINAE) || BOOST_WORKAROUND(__SUNPRO_CC, <= 0x580)
+#else
+
+ template< class PtrMapAdapter, class Range >
+ BOOST_DEDUCED_TYPENAME boost::disable_if< boost::is_same< Range,
+ BOOST_DEDUCED_TYPENAME PtrMapAdapter::iterator >,
+ size_type >::type
+ transfer( const Range& r, PtrMapAdapter& from ) // basic
+ {
+ return transfer( boost::begin(r), boost::end(r), from );
+ }
+
+#endif
+ template< class PtrMapAdapter >
+ void transfer( PtrMapAdapter& from ) // basic
+ {
+ transfer( from.begin(), from.end(), from );
+ BOOST_ASSERT( from.empty() );
+ }
+
+ public: // serialization
+
+ template< class Archive >
+ void load( Archive& ar, const unsigned ) // basic
+ {
+ this->clear();
+ size_type n;
+ ar & n;
+
+ for( size_type i = 0u; i != n; ++i )
+ {
+ key_type key;
+ T* value;
+ ar & key;
+ ar & value;
+ iterator p = this->insert( key, value );
+ ar.reset_object_address( &p->first, &key );
+ }
+ }
+
+ BOOST_SERIALIZATION_SPLIT_MEMBER()
+
+ };
+
+ template< class I, class F, class S >
+ inline bool is_null( const ptr_map_iterator<I,F,S>& i )
+ {
+ return i->second == 0;
+ }
+
+} // namespace 'boost'
+
+#endif
diff --git a/boost/boost/ptr_container/ptr_sequence_adapter.hpp b/boost/boost/ptr_container/ptr_sequence_adapter.hpp
new file mode 100644
index 00000000000..4ddb7a9b844
--- /dev/null
+++ b/boost/boost/ptr_container/ptr_sequence_adapter.hpp
@@ -0,0 +1,605 @@
+//
+// Boost.Pointer Container
+//
+// Copyright Thorsten Ottosen 2003-2005. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/ptr_container/
+//
+
+#ifndef BOOST_ptr_container_PTR_SEQUENCE_ADAPTER_HPP
+#define BOOST_ptr_container_PTR_SEQUENCE_ADAPTER_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif
+
+
+#include <boost/ptr_container/detail/reversible_ptr_container.hpp>
+#include <boost/ptr_container/indirect_fun.hpp>
+#include <boost/ptr_container/detail/void_ptr_iterator.hpp>
+#include <boost/type_traits/remove_pointer.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/is_pointer.hpp>
+#include <boost/type_traits/is_integral.hpp>
+#include <boost/iterator/iterator_categories.hpp>
+
+
+namespace boost
+{
+namespace ptr_container_detail
+{
+
+
+
+
+ template
+ <
+ class T,
+ class VoidPtrSeq
+ >
+ struct sequence_config
+ {
+ typedef BOOST_DEDUCED_TYPENAME remove_nullable<T>::type
+ U;
+ typedef VoidPtrSeq
+ void_container_type;
+
+ typedef BOOST_DEDUCED_TYPENAME VoidPtrSeq::allocator_type
+ allocator_type;
+
+ typedef U value_type;
+
+ typedef void_ptr_iterator<
+ BOOST_DEDUCED_TYPENAME VoidPtrSeq::iterator, U >
+ iterator;
+
+ typedef void_ptr_iterator<
+ BOOST_DEDUCED_TYPENAME VoidPtrSeq::const_iterator, const U >
+ const_iterator;
+
+#ifdef BOOST_NO_SFINAE
+
+ template< class Iter >
+ static U* get_pointer( Iter i )
+ {
+ return static_cast<U*>( *i.base() );
+ }
+
+#else
+ template< class Iter >
+ static U* get_pointer( void_ptr_iterator<Iter,U> i )
+ {
+ return static_cast<U*>( *i.base() );
+ }
+
+ template< class Iter >
+ static U* get_pointer( Iter i )
+ {
+ return &*i;
+ }
+#endif
+
+#if defined(BOOST_NO_SFINAE) && !BOOST_WORKAROUND(__MWERKS__, <= 0x3003)
+
+ template< class Iter >
+ static const U* get_const_pointer( Iter i )
+ {
+ return static_cast<const U*>( *i.base() );
+ }
+
+#else // BOOST_NO_SFINAE
+
+#if BOOST_WORKAROUND(__MWERKS__, <= 0x3003)
+ template< class Iter >
+ static const U* get_const_pointer( void_ptr_iterator<Iter,U> i )
+ {
+ return static_cast<const U*>( *i.base() );
+ }
+#else // BOOST_WORKAROUND
+ template< class Iter >
+ static const U* get_const_pointer( void_ptr_iterator<Iter,const U> i )
+ {
+ return static_cast<const U*>( *i.base() );
+ }
+#endif // BOOST_WORKAROUND
+
+ template< class Iter >
+ static const U* get_const_pointer( Iter i )
+ {
+ return &*i;
+ }
+#endif // BOOST_NO_SFINAE
+
+ BOOST_STATIC_CONSTANT(bool, allow_null = boost::is_nullable<T>::value );
+ };
+
+} // ptr_container_detail
+
+
+ template< class Iterator, class T >
+ inline bool is_null( void_ptr_iterator<Iterator,T> i )
+ {
+ return *i.base() == 0;
+ }
+
+
+
+ template
+ <
+ class T,
+ class VoidPtrSeq,
+ class CloneAllocator = heap_clone_allocator
+ >
+ class ptr_sequence_adapter : public
+ ptr_container_detail::reversible_ptr_container< ptr_container_detail::sequence_config<T,VoidPtrSeq>,
+ CloneAllocator >
+ {
+ typedef ptr_container_detail::reversible_ptr_container< ptr_container_detail::sequence_config<T,VoidPtrSeq>,
+ CloneAllocator >
+ base_type;
+
+ typedef BOOST_DEDUCED_TYPENAME base_type::scoped_deleter scoped_deleter;
+
+ typedef ptr_sequence_adapter<T,VoidPtrSeq,CloneAllocator>
+ this_type;
+
+ public:
+ typedef BOOST_DEDUCED_TYPENAME base_type::value_type value_type;
+ typedef BOOST_DEDUCED_TYPENAME base_type::reference reference;
+ typedef BOOST_DEDUCED_TYPENAME base_type::auto_type auto_type;
+
+ BOOST_PTR_CONTAINER_DEFINE_CONSTRUCTORS( ptr_sequence_adapter,
+ base_type )
+
+ template< class PtrContainer >
+ ptr_sequence_adapter( std::auto_ptr<PtrContainer> clone )
+ : base_type( clone )
+ { }
+
+ template< class PtrContainer >
+ void operator=( std::auto_ptr<PtrContainer> clone )
+ {
+ base_type::operator=( clone );
+ }
+
+ /////////////////////////////////////////////////////////////
+ // modifiers
+ /////////////////////////////////////////////////////////////
+
+ void push_back( value_type x ) // strong
+ {
+ this->enforce_null_policy( x, "Null pointer in 'push_back()'" );
+
+ auto_type ptr( x ); // notrow
+ this->c_private().push_back( x ); // strong, commit
+ ptr.release(); // nothrow
+ }
+
+ template< class U >
+ void push_back( std::auto_ptr<U> x )
+ {
+ push_back( x.release() );
+ }
+
+ void push_front( value_type x )
+ {
+ this->enforce_null_policy( x, "Null pointer in 'push_front()'" );
+
+ auto_type ptr( x ); // nothrow
+ this->c_private().push_front( x ); // strong, commit
+ ptr.release(); // nothrow
+ }
+
+ template< class U >
+ void push_front( std::auto_ptr<U> x )
+ {
+ push_front( x.release() );
+ }
+
+ auto_type pop_back()
+ {
+ BOOST_PTR_CONTAINER_THROW_EXCEPTION( this->empty(),
+ bad_ptr_container_operation,
+ "'pop_back()' on empty container" );
+ auto_type ptr( static_cast<value_type>(
+ this->c_private().back() ) ); // nothrow
+ this->c_private().pop_back(); // nothrow
+ return ptr_container_detail::move( ptr ); // nothrow
+ }
+
+ auto_type pop_front()
+ {
+ BOOST_PTR_CONTAINER_THROW_EXCEPTION( this->empty(),
+ bad_ptr_container_operation,
+ "'pop_front()' on empty container" );
+ auto_type ptr( static_cast<value_type>(
+ this->c_private().front() ) ); // nothrow
+ this->c_private().pop_front(); // nothrow
+ return ptr_container_detail::move( ptr );
+ }
+
+ reference front()
+ {
+ BOOST_PTR_CONTAINER_THROW_EXCEPTION( this->empty(),
+ bad_ptr_container_operation,
+ "accessing 'front()' on empty container" );
+ BOOST_ASSERT( !::boost::is_null( this->begin() ) );
+ return *this->begin();
+ }
+
+ const_reference front() const
+ {
+ BOOST_PTR_CONTAINER_THROW_EXCEPTION( this->empty(),
+ bad_ptr_container_operation,
+ "accessing 'front()' on empty container" );
+ BOOST_ASSERT( !::boost::is_null( this->begin() ) );
+ return *this->begin();
+ }
+
+ reference back()
+ {
+ BOOST_PTR_CONTAINER_THROW_EXCEPTION( this->empty(),
+ bad_ptr_container_operation,
+ "accessing 'back()' on empty container" );
+ BOOST_ASSERT( !::boost::is_null( --this->end() ) );
+ return *--this->end();
+ }
+
+ const_reference back() const
+ {
+ BOOST_PTR_CONTAINER_THROW_EXCEPTION( this->empty(),
+ bad_ptr_container_operation,
+ "accessing 'back()' on empty container" );
+ BOOST_ASSERT( !::boost::is_null( --this->end() ) );
+ return *--this->end();
+ }
+
+ public: // deque/vector inerface
+
+ reference operator[]( size_type n ) // nothrow
+ {
+ BOOST_ASSERT( n < this->size() );
+ BOOST_ASSERT( !this->is_null( n ) );
+ return *static_cast<value_type>( this->c_private()[n] );
+ }
+
+ const_reference operator[]( size_type n ) const // nothrow
+ {
+ BOOST_ASSERT( n < this->size() );
+ BOOST_ASSERT( !this->is_null( n ) );
+ return *static_cast<value_type>( this->c_private()[n] );
+ }
+
+ reference at( size_type n )
+ {
+ BOOST_PTR_CONTAINER_THROW_EXCEPTION( n >= this->size(), bad_index,
+ "'at()' out of bounds" );
+ BOOST_ASSERT( !this->is_null( n ) );
+ return (*this)[n];
+ }
+
+ const_reference at( size_type n ) const
+ {
+ BOOST_PTR_CONTAINER_THROW_EXCEPTION( n >= this->size(), bad_index,
+ "'at()' out of bounds" );
+ BOOST_ASSERT( !this->is_null( n ) );
+ return (*this)[n];
+ }
+
+ public: // vector interface
+
+ size_type capacity() const
+ {
+ return this->c_private().capacity();
+ }
+
+ void reserve( size_type n )
+ {
+ this->c_private().reserve( n );
+ }
+
+ void reverse()
+ {
+ this->c_private().reverse();
+ }
+
+ public: // assign, insert, transfer
+
+ // overhead: 1 heap allocation (very cheap compared to cloning)
+ template< class InputIterator >
+ void assign( InputIterator first, InputIterator last ) // strong
+ {
+ base_type temp( first, last );
+ this->swap( temp );
+ }
+
+ template< class Range >
+ void assign( const Range& r )
+ {
+ assign( boost::begin(r), boost::end(r ) );
+ }
+
+ private:
+ template< class I >
+ void insert_impl( iterator before, I first, I last, std::input_iterator_tag ) // strong
+ {
+ ptr_sequence_adapter temp(first,last); // strong
+ transfer( before, temp ); // strong, commit
+ }
+
+ template< class I >
+ void insert_impl( iterator before, I first, I last, std::forward_iterator_tag ) // strong
+ {
+ if( first == last )
+ return;
+ scoped_deleter sd( first, last ); // strong
+ this->insert_clones_and_release( sd, before ); // strong, commit
+ }
+
+ public:
+
+ using base_type::insert;
+
+ template< class InputIterator >
+ void insert( iterator before, InputIterator first, InputIterator last ) // strong
+ {
+ insert_impl( before, first, last, BOOST_DEDUCED_TYPENAME
+ iterator_category<InputIterator>::type() );
+ }
+
+#if defined(BOOST_NO_SFINAE) || BOOST_WORKAROUND(__SUNPRO_CC, <= 0x580)
+#else
+ template< class Range >
+ BOOST_DEDUCED_TYPENAME
+ boost::disable_if< ptr_container_detail::is_pointer_or_integral<Range> >::type
+ insert( iterator before, const Range& r )
+ {
+ insert( before, boost::begin(r), boost::end(r) );
+ }
+
+#endif
+
+ template< class PtrSeqAdapter >
+ void transfer( iterator before,
+ BOOST_DEDUCED_TYPENAME PtrSeqAdapter::iterator first,
+ BOOST_DEDUCED_TYPENAME PtrSeqAdapter::iterator last,
+ PtrSeqAdapter& from ) // strong
+ {
+ BOOST_ASSERT( (void*)&from != (void*)this );
+ if( from.empty() )
+ return;
+ this->c_private().
+ insert( before.base(),
+ first.base(), last.base() ); // strong
+ from.c_private().erase( first.base(),
+ last.base() ); // nothrow
+ }
+
+ template< class PtrSeqAdapter >
+ void transfer( iterator before,
+ BOOST_DEDUCED_TYPENAME PtrSeqAdapter::iterator object,
+ PtrSeqAdapter& from ) // strong
+ {
+ BOOST_ASSERT( (void*)&from != (void*)this );
+ if( from.empty() )
+ return;
+ this->c_private().
+ insert( before.base(),
+ *object.base() ); // strong
+ from.c_private().erase( object.base() ); // nothrow
+ }
+
+#if defined(BOOST_NO_SFINAE) || BOOST_WORKAROUND(__SUNPRO_CC, <= 0x580)
+#else
+
+ template< class PtrSeqAdapter, class Range >
+ BOOST_DEDUCED_TYPENAME boost::disable_if< boost::is_same< Range,
+ BOOST_DEDUCED_TYPENAME PtrSeqAdapter::iterator > >::type
+ transfer( iterator before, const Range& r, PtrSeqAdapter& from ) // strong
+ {
+ transfer( before, boost::begin(r), boost::end(r), from );
+ }
+
+#endif
+ template< class PtrSeqAdapter >
+ void transfer( iterator before, PtrSeqAdapter& from ) // strong
+ {
+ BOOST_ASSERT( (void*)&from != (void*)this );
+ if( from.empty() )
+ return;
+ this->c_private().
+ insert( before.base(),
+ from.begin().base(), from.end().base() ); // strong
+ from.c_private().clear(); // nothrow
+ }
+
+ public: // null functions
+
+ bool is_null( size_type idx ) const
+ {
+ BOOST_ASSERT( idx < this->size() );
+ return this->c_private()[idx] == 0;
+ }
+
+ public: // algorithms
+
+ void sort( iterator first, iterator last )
+ {
+ sort( first, last, std::less<T>() );
+ }
+
+ void sort()
+ {
+ sort( this->begin(), this->end() );
+ }
+
+ template< class Compare >
+ void sort( iterator first, iterator last, Compare comp )
+ {
+ BOOST_ASSERT( first <= last && "out of range sort()" );
+ BOOST_ASSERT( this->begin() <= first && "out of range sort()" );
+ BOOST_ASSERT( last <= this->end() && "out of range sort()" );
+ // some static assert on the arguments of the comparison
+ std::sort( first.base(), last.base(),
+ void_ptr_indirect_fun<Compare,T>(comp) );
+ }
+
+ template< class Compare >
+ void sort( Compare comp )
+ {
+ sort( this->begin(), this->end(), comp );
+ }
+
+ void unique( iterator first, iterator last )
+ {
+ unique( first, last, std::equal_to<T>() );
+ }
+
+ void unique()
+ {
+ unique( this->begin(), this->end() );
+ }
+
+ private:
+ struct is_not_zero_ptr
+ {
+ template< class U >
+ bool operator()( const U* r ) const
+ {
+ return r != 0;
+ }
+ };
+
+ void compact_and_erase_nulls( iterator first, iterator last ) // nothrow
+ {
+
+ typename base_type::ptr_iterator p = std::stable_partition(
+ first.base(),
+ last.base(),
+ is_not_zero_ptr() );
+ this->c_private().erase( p, this->end().base() );
+
+ }
+
+ void range_check_impl( iterator first, iterator last,
+ std::bidirectional_iterator_tag )
+ { /* do nothing */ }
+
+ void range_check_impl( iterator first, iterator last,
+ std::random_access_iterator_tag )
+ {
+ BOOST_ASSERT( first <= last && "out of range unique()/erase_if()" );
+ BOOST_ASSERT( this->begin() <= first && "out of range unique()/erase_if()" );
+ BOOST_ASSERT( last <= this->end() && "out of range unique()/erase_if)(" );
+ }
+
+ void range_check( iterator first, iterator last )
+ {
+ range_check_impl( first, last,
+ BOOST_DEDUCED_TYPENAME iterator_category<iterator>::type() );
+ }
+
+ public:
+
+ template< class Compare >
+ void unique( iterator first, iterator last, Compare comp )
+ {
+ range_check(first,last);
+
+ iterator prev = first;
+ iterator next = first;
+ ++next;
+ for( ; next != last; ++next )
+ {
+ BOOST_ASSERT( !::boost::is_null(prev) );
+ BOOST_ASSERT( !::boost::is_null(next) );
+ if( comp( *prev, *next ) )
+ {
+ this->remove( next ); // delete object
+ *next.base() = 0; // mark pointer as deleted
+ }
+ else
+ {
+ prev = next;
+ }
+ // ++next
+ }
+
+ compact_and_erase_nulls( first, last );
+ }
+
+ template< class Compare >
+ void unique( Compare comp )
+ {
+ unique( this->begin(), this->end(), comp );
+ }
+
+ template< class Pred >
+ void erase_if( iterator first, iterator last, Pred pred )
+ {
+ range_check(first,last);
+
+ iterator next = first;
+ for( ; next != last; ++next )
+ {
+ BOOST_ASSERT( !::boost::is_null(next) );
+ if( pred( *next ) )
+ {
+ this->remove( next ); // delete object
+ *next.base() = 0; // mark pointer as deleted
+ }
+ }
+
+ compact_and_erase_nulls( first, last );
+ }
+
+ template< class Pred >
+ void erase_if( Pred pred )
+ {
+ erase_if( this->begin(), this->end(), pred );
+ }
+
+
+ void merge( iterator first, iterator last,
+ ptr_sequence_adapter& from )
+ {
+ merge( first, last, from, std::less<T>() );
+ }
+
+ template< class BinPred >
+ void merge( iterator first, iterator last,
+ ptr_sequence_adapter& from, BinPred pred )
+ {
+ void_ptr_indirect_fun<BinPred,T> bin_pred(pred);
+ size_type current_size = this->size();
+ this->transfer( this->end(), first, last, from );
+ typename base_type::ptr_iterator middle = this->begin().base();
+ std::advance(middle,current_size);
+ std::inplace_merge( this->begin().base(),
+ middle,
+ this->end().base(),
+ bin_pred );
+ }
+
+ void merge( ptr_sequence_adapter& r )
+ {
+ merge( r, std::less<T>() );
+ BOOST_ASSERT( r.empty() );
+ }
+
+ template< class BinPred >
+ void merge( ptr_sequence_adapter& r, BinPred pred )
+ {
+ merge( r.begin(), r.end(), r, pred );
+ BOOST_ASSERT( r.empty() );
+ }
+
+ };
+
+
+} // namespace 'boost'
+
+#endif
diff --git a/boost/boost/ptr_container/ptr_set.hpp b/boost/boost/ptr_container/ptr_set.hpp
new file mode 100644
index 00000000000..d93b630c616
--- /dev/null
+++ b/boost/boost/ptr_container/ptr_set.hpp
@@ -0,0 +1,134 @@
+//
+// Boost.Pointer Container
+//
+// Copyright Thorsten Ottosen 2003-2005. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/ptr_container/
+//
+
+#ifndef BOOST_PTR_CONTAINER_PTR_SET_HPP
+#define BOOST_PTR_CONTAINER_PTR_SET_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif
+
+#include <boost/ptr_container/indirect_fun.hpp>
+#include <boost/ptr_container/ptr_set_adapter.hpp>
+#include <set>
+
+namespace boost
+{
+
+ template
+ <
+ class Key,
+ class Compare = std::less<Key>,
+ class CloneAllocator = heap_clone_allocator,
+ class Allocator = std::allocator<void*>
+ >
+ class ptr_set :
+ public ptr_set_adapter< Key,
+ std::set<void*,void_ptr_indirect_fun<Compare,Key>,Allocator>,
+ CloneAllocator >
+ {
+ typedef ptr_set_adapter< Key, std::set<void*,void_ptr_indirect_fun<Compare,Key>,Allocator>,
+ CloneAllocator >
+ base_type;
+
+ typedef ptr_set<Key,Compare,CloneAllocator,Allocator> this_type;
+
+ public:
+ explicit ptr_set( const Compare& comp = Compare(),
+ const Allocator& a = Allocator() )
+ : base_type( comp, a )
+ { }
+
+ template< typename InputIterator >
+ ptr_set( InputIterator first, InputIterator last,
+ const Compare& comp = Compare(),
+ const Allocator& a = Allocator() )
+ : base_type( first, last, comp, a )
+ { }
+
+ BOOST_PTR_CONTAINER_DEFINE_RELEASE_AND_CLONE( ptr_set,
+ base_type,
+ this_type );
+
+ };
+
+
+
+ template
+ <
+ class Key,
+ class Compare = std::less<Key>,
+ class CloneAllocator = heap_clone_allocator,
+ class Allocator = std::allocator<void*>
+ >
+ class ptr_multiset :
+ public ptr_multiset_adapter< Key,
+ std::multiset<void*,void_ptr_indirect_fun<Compare,Key>,Allocator>,
+ CloneAllocator >
+ {
+ typedef ptr_multiset_adapter< Key,
+ std::multiset<void*,void_ptr_indirect_fun<Compare,Key>,Allocator>,
+ CloneAllocator >
+ base_type;
+ typedef ptr_multiset<Key,Compare,CloneAllocator,Allocator> this_type;
+
+ public:
+ explicit ptr_multiset( const Compare& comp = Compare(),
+ const Allocator& a = Allocator() )
+ : base_type( comp, a )
+ { }
+
+ template< typename InputIterator >
+ ptr_multiset( InputIterator first, InputIterator last,
+ const Compare& comp = Compare(),
+ const Allocator& a = Allocator() )
+ : base_type( first, last, comp, a )
+ { }
+
+ BOOST_PTR_CONTAINER_DEFINE_RELEASE_AND_CLONE( ptr_multiset,
+ base_type,
+ this_type );
+
+ };
+
+ /////////////////////////////////////////////////////////////////////////
+ // clonability
+
+ template< typename K, typename C, typename CA, typename A >
+ inline ptr_set<K,C,CA,A>* new_clone( const ptr_set<K,C,CA,A>& r )
+ {
+ return r.clone().release();
+ }
+
+ template< typename K, typename C, typename CA, typename A >
+ inline ptr_multiset<K,C,CA,A>* new_clone( const ptr_multiset<K,C,CA,A>& r )
+ {
+ return r.clone().release();
+ }
+
+ /////////////////////////////////////////////////////////////////////////
+ // swap
+
+ template< typename K, typename C, typename CA, typename A >
+ inline void swap( ptr_set<K,C,CA,A>& l, ptr_set<K,C,CA,A>& r )
+ {
+ l.swap(r);
+ }
+
+ template< typename K, typename C, typename CA, typename A >
+ inline void swap( ptr_multiset<K,C,CA,A>& l, ptr_multiset<K,C,CA,A>& r )
+ {
+ l.swap(r);
+ }
+
+}
+
+#endif
diff --git a/boost/boost/ptr_container/ptr_set_adapter.hpp b/boost/boost/ptr_container/ptr_set_adapter.hpp
new file mode 100644
index 00000000000..e6518e2d869
--- /dev/null
+++ b/boost/boost/ptr_container/ptr_set_adapter.hpp
@@ -0,0 +1,513 @@
+//
+// Boost.Pointer Container
+//
+// Copyright Thorsten Ottosen 2003-2005. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/ptr_container/
+//
+
+#ifndef BOOST_PTR_CONTAINER_PTR_SET_ADAPTER_HPP
+#define BOOST_PTR_CONTAINER_PTR_SET_ADAPTER_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif
+
+#include <boost/ptr_container/detail/associative_ptr_container.hpp>
+#include <boost/ptr_container/detail/void_ptr_iterator.hpp>
+#include <boost/range/iterator_range.hpp>
+
+namespace boost
+{
+namespace ptr_container_detail
+{
+ template
+ <
+ class Key,
+ class VoidPtrSet
+ >
+ struct set_config
+ {
+ typedef VoidPtrSet
+ void_container_type;
+
+ typedef BOOST_DEDUCED_TYPENAME VoidPtrSet::allocator_type
+ allocator_type;
+
+ typedef Key value_type;
+
+ typedef value_type
+ key_type;
+
+ typedef BOOST_DEDUCED_TYPENAME VoidPtrSet::value_compare
+ value_compare;
+
+ typedef value_compare
+ key_compare;
+
+ typedef void_ptr_iterator<
+ BOOST_DEDUCED_TYPENAME VoidPtrSet::iterator, Key >
+ iterator;
+
+ typedef void_ptr_iterator<
+ BOOST_DEDUCED_TYPENAME VoidPtrSet::const_iterator, const Key >
+ const_iterator;
+
+ template< class Iter >
+ static Key* get_pointer( Iter i )
+ {
+ return static_cast<Key*>( *i.base() );
+ }
+
+ template< class Iter >
+ static const Key* get_const_pointer( Iter i )
+ {
+ return static_cast<const Key*>( *i.base() );
+ }
+
+ BOOST_STATIC_CONSTANT(bool, allow_null = false );
+ };
+
+
+
+ template
+ <
+ class Key,
+ class VoidPtrSet,
+ class CloneAllocator = heap_clone_allocator
+ >
+ class ptr_set_adapter_base
+ : public ptr_container_detail::associative_ptr_container< set_config<Key,VoidPtrSet>,
+ CloneAllocator >
+ {
+ typedef ptr_container_detail::associative_ptr_container< set_config<Key,VoidPtrSet>,
+ CloneAllocator >
+ base_type;
+ public:
+ typedef BOOST_DEDUCED_TYPENAME base_type::iterator
+ iterator;
+ typedef BOOST_DEDUCED_TYPENAME base_type::const_iterator
+ const_iterator;
+ typedef Key key_type;
+ typedef BOOST_DEDUCED_TYPENAME base_type::size_type
+ size_type;
+
+ private:
+ ptr_set_adapter_base()
+ : base_type( BOOST_DEDUCED_TYPENAME VoidPtrSet::key_compare(),
+ BOOST_DEDUCED_TYPENAME VoidPtrSet::allocator_type() )
+ { }
+
+ public:
+
+ template< class Compare, class Allocator >
+ ptr_set_adapter_base( const Compare& comp,
+ const Allocator& a )
+ : base_type( comp, a )
+ { }
+
+ template< class InputIterator, class Compare, class Allocator >
+ ptr_set_adapter_base( InputIterator first, InputIterator last,
+ const Compare& comp,
+ const Allocator& a )
+ : base_type( first, last, comp, a )
+ { }
+
+ template< class PtrContainer >
+ ptr_set_adapter_base( std::auto_ptr<PtrContainer> clone )
+ : base_type( clone )
+ { }
+
+ template< typename PtrContainer >
+ void operator=( std::auto_ptr<PtrContainer> clone )
+ {
+ base_type::operator=( clone );
+ }
+
+ iterator find( const key_type& x )
+ {
+ return iterator( this->c_private().
+ find( const_cast<key_type*>(&x) ) );
+ }
+
+ const_iterator find( const key_type& x ) const
+ {
+ return const_iterator( this->c_private().
+ find( const_cast<key_type*>(&x) ) );
+ }
+
+ size_type count( const key_type& x ) const
+ {
+ return this->c_private().count( const_cast<key_type*>(&x) );
+ }
+
+ iterator lower_bound( const key_type& x )
+ {
+ return iterator( this->c_private().
+ lower_bound( const_cast<key_type*>(&x) ) );
+ }
+
+ const_iterator lower_bound( const key_type& x ) const
+ {
+ return const_iterator( this->c_private().
+ lower_bound( const_cast<key_type*>(&x) ) );
+ }
+
+ iterator upper_bound( const key_type& x )
+ {
+ return iterator( this->c_private().
+ upper_bound( const_cast<key_type*>(&x) ) );
+ }
+
+ const_iterator upper_bound( const key_type& x ) const
+ {
+ return const_iterator( this->c_private().
+ upper_bound( const_cast<key_type*>(&x) ) );
+ }
+
+ iterator_range<iterator> equal_range( const key_type& x )
+ {
+ std::pair<BOOST_DEDUCED_TYPENAME base_type::ptr_iterator,
+ BOOST_DEDUCED_TYPENAME base_type::ptr_iterator>
+ p = this->c_private().
+ equal_range( const_cast<key_type*>(&x) );
+ return make_iterator_range( iterator( p.first ),
+ iterator( p.second ) );
+ }
+
+ iterator_range<const_iterator> equal_range( const key_type& x ) const
+ {
+ std::pair<BOOST_DEDUCED_TYPENAME base_type::ptr_const_iterator,
+ BOOST_DEDUCED_TYPENAME base_type::ptr_const_iterator>
+ p = this->c_private().
+ equal_range( const_cast<key_type*>(&x) );
+ return make_iterator_range( const_iterator( p.first ),
+ const_iterator( p.second ) );
+ }
+
+ };
+
+} // ptr_container_detail
+
+ /////////////////////////////////////////////////////////////////////////
+ // ptr_set_adapter
+ /////////////////////////////////////////////////////////////////////////
+
+ template
+ <
+ class Key,
+ class VoidPtrSet,
+ class CloneAllocator = heap_clone_allocator
+ >
+ class ptr_set_adapter :
+ public ptr_container_detail::ptr_set_adapter_base<Key,VoidPtrSet,CloneAllocator>
+ {
+ typedef ptr_container_detail::ptr_set_adapter_base<Key,VoidPtrSet,CloneAllocator>
+ base_type;
+
+ public: // typedefs
+
+ typedef BOOST_DEDUCED_TYPENAME base_type::iterator
+ iterator;
+ typedef BOOST_DEDUCED_TYPENAME base_type::const_iterator
+ const_iterator;
+ typedef BOOST_DEDUCED_TYPENAME base_type::size_type
+ size_type;
+ typedef Key key_type;
+ typedef BOOST_DEDUCED_TYPENAME base_type::auto_type
+ auto_type;
+ typedef BOOST_DEDUCED_TYPENAME VoidPtrSet::key_compare
+ key_compare;
+ typedef BOOST_DEDUCED_TYPENAME VoidPtrSet::allocator_type
+ allocator_type;
+ private:
+
+ template< typename II >
+ void set_basic_clone_and_insert( II first, II last ) // basic
+ {
+ while( first != last )
+ {
+ if( this->find( *first ) == this->end() )
+ insert( CloneAllocator::allocate_clone( *first ) ); // strong, commit
+ ++first;
+ }
+ }
+
+ public:
+
+ explicit ptr_set_adapter( const key_compare& comp = key_compare(),
+ const allocator_type& a = allocator_type() )
+ : base_type( comp, a )
+ {
+ BOOST_ASSERT( this->empty() );
+ }
+
+ template< class InputIterator, class Compare, class Allocator >
+ ptr_set_adapter( InputIterator first, InputIterator last,
+ const Compare& comp = Compare(),
+ const Allocator a = Allocator() )
+ : base_type( comp, a )
+ {
+ BOOST_ASSERT( this->empty() );
+ set_basic_clone_and_insert( first, last );
+ }
+
+ template< class T >
+ ptr_set_adapter( std::auto_ptr<T> r ) : base_type( r )
+ { }
+
+ template< class T >
+ void operator=( std::auto_ptr<T> r )
+ {
+ base_type::operator=( r );
+ }
+
+ std::pair<iterator,bool> insert( key_type* x ) // strong
+ {
+ this->enforce_null_policy( x, "Null pointer in 'ptr_set::insert()'" );
+
+ auto_type ptr( x );
+ std::pair<BOOST_DEDUCED_TYPENAME base_type::ptr_iterator,bool>
+ res = this->c_private().insert( x );
+ if( res.second )
+ ptr.release();
+ return std::make_pair( iterator( res.first ), res.second );
+ }
+
+ template< class U >
+ std::pair<iterator,bool> insert( std::auto_ptr<U> x )
+ {
+ return insert( x.release() );
+ }
+
+
+ iterator insert( iterator where, key_type* x ) // strong
+ {
+ this->enforce_null_policy( x, "Null pointer in 'ptr_set::insert()'" );
+
+ auto_type ptr( x );
+ BOOST_DEDUCED_TYPENAME base_type::ptr_iterator
+ res = this->c_private().insert( where.base(), x );
+ if( *res == x )
+ ptr.release();
+ return iterator( res);
+ }
+
+ template< class U >
+ iterator insert( iterator where, std::auto_ptr<U> x )
+ {
+ return insert( where, x.release() );
+ }
+
+ template< typename InputIterator >
+ void insert( InputIterator first, InputIterator last ) // basic
+ {
+ set_basic_clone_and_insert( first, last );
+ }
+
+#if defined(BOOST_NO_SFINAE) || BOOST_WORKAROUND(__SUNPRO_CC, <= 0x580)
+#else
+
+ template< class Range >
+ BOOST_DEDUCED_TYPENAME
+ boost::disable_if< ptr_container_detail::is_pointer_or_integral<Range> >::type
+ insert( const Range& r )
+ {
+ insert( boost::begin(r), boost::end(r) );
+ }
+
+#endif
+
+ template< class PtrSetAdapter >
+ bool transfer( BOOST_DEDUCED_TYPENAME PtrSetAdapter::iterator object,
+ PtrSetAdapter& from ) // strong
+ {
+ return this->single_transfer( object, from );
+ }
+
+ template< class PtrSetAdapter >
+ size_type
+ transfer( BOOST_DEDUCED_TYPENAME PtrSetAdapter::iterator first,
+ BOOST_DEDUCED_TYPENAME PtrSetAdapter::iterator last,
+ PtrSetAdapter& from ) // basic
+ {
+ return this->single_transfer( first, last, from );
+ }
+
+#if defined(BOOST_NO_SFINAE) || BOOST_WORKAROUND(__SUNPRO_CC, <= 0x580)
+#else
+
+ template< class PtrSetAdapter, class Range >
+ BOOST_DEDUCED_TYPENAME boost::disable_if< boost::is_same< Range,
+ BOOST_DEDUCED_TYPENAME PtrSetAdapter::iterator >,
+ size_type >::type
+ transfer( const Range& r, PtrSetAdapter& from ) // basic
+ {
+ return transfer( boost::begin(r), boost::end(r), from );
+ }
+
+#endif
+
+ template< class PtrSetAdapter >
+ size_type transfer( PtrSetAdapter& from ) // basic
+ {
+ return transfer( from.begin(), from.end(), from );
+ }
+
+ };
+
+ /////////////////////////////////////////////////////////////////////////
+ // ptr_multiset_adapter
+ /////////////////////////////////////////////////////////////////////////
+
+ template
+ <
+ class Key,
+ class VoidPtrMultiSet,
+ class CloneAllocator = heap_clone_allocator
+ >
+ class ptr_multiset_adapter :
+ public ptr_container_detail::ptr_set_adapter_base<Key,VoidPtrMultiSet,CloneAllocator>
+ {
+ typedef ptr_container_detail::ptr_set_adapter_base<Key,VoidPtrMultiSet,CloneAllocator> base_type;
+
+ public: // typedefs
+
+ typedef BOOST_DEDUCED_TYPENAME base_type::iterator
+ iterator;
+ typedef BOOST_DEDUCED_TYPENAME base_type::size_type
+ size_type;
+ typedef Key key_type;
+ typedef BOOST_DEDUCED_TYPENAME base_type::auto_type
+ auto_type;
+ typedef BOOST_DEDUCED_TYPENAME VoidPtrMultiSet::key_compare
+ key_compare;
+ typedef BOOST_DEDUCED_TYPENAME VoidPtrMultiSet::allocator_type
+ allocator_type;
+ private:
+ template< typename II >
+ void set_basic_clone_and_insert( II first, II last ) // basic
+ {
+ while( first != last )
+ {
+ insert( CloneAllocator::allocate_clone( *first ) ); // strong, commit
+ ++first;
+ }
+ }
+
+ public:
+
+ explicit ptr_multiset_adapter( const key_compare& comp = key_compare(),
+ const allocator_type& a = allocator_type() )
+ : base_type( comp, a )
+ { }
+
+ template< class InputIterator >
+ ptr_multiset_adapter( InputIterator first, InputIterator last,
+ const key_compare& comp = key_compare(),
+ const allocator_type& a = allocator_type() )
+ : base_type( comp, a )
+ {
+ set_basic_clone_and_insert( first, last );
+ }
+
+ template< class T >
+ ptr_multiset_adapter( std::auto_ptr<T> r ) : base_type( r )
+ { }
+
+ template< class T >
+ void operator=( std::auto_ptr<T> r )
+ {
+ base_type::operator=( r );
+ }
+
+ iterator insert( iterator before, key_type* x ) // strong
+ {
+ return base_type::insert( before, x );
+ }
+
+ template< class U >
+ iterator insert( iterator before, std::auto_ptr<U> x )
+ {
+ return insert( before, x.release() );
+ }
+
+ iterator insert( key_type* x ) // strong
+ {
+ this->enforce_null_policy( x, "Null pointer in 'ptr_multiset::insert()'" );
+
+ auto_type ptr( x );
+ BOOST_DEDUCED_TYPENAME base_type::ptr_iterator
+ res = this->c_private().insert( x );
+ ptr.release();
+ return iterator( res );
+ }
+
+ template< class U >
+ iterator insert( std::auto_ptr<U> x )
+ {
+ return insert( x.release() );
+ }
+
+ template< typename InputIterator >
+ void insert( InputIterator first, InputIterator last ) // basic
+ {
+ set_basic_clone_and_insert( first, last );
+ }
+
+#if defined(BOOST_NO_SFINAE) || BOOST_WORKAROUND(__SUNPRO_CC, <= 0x580)
+#else
+
+ template< class Range >
+ BOOST_DEDUCED_TYPENAME
+ boost::disable_if< ptr_container_detail::is_pointer_or_integral<Range> >::type
+ insert( const Range& r )
+ {
+ insert( boost::begin(r), boost::end(r) );
+ }
+
+#endif
+
+ template< class PtrSetAdapter >
+ void transfer( BOOST_DEDUCED_TYPENAME PtrSetAdapter::iterator object,
+ PtrSetAdapter& from ) // strong
+ {
+ this->multi_transfer( object, from );
+ }
+
+ template< class PtrSetAdapter >
+ size_type transfer( BOOST_DEDUCED_TYPENAME PtrSetAdapter::iterator first,
+ BOOST_DEDUCED_TYPENAME PtrSetAdapter::iterator last,
+ PtrSetAdapter& from ) // basic
+ {
+ return this->multi_transfer( first, last, from );
+ }
+
+#if defined(BOOST_NO_SFINAE) || BOOST_WORKAROUND(__SUNPRO_CC, <= 0x580)
+#else
+
+ template< class PtrSetAdapter, class Range >
+ BOOST_DEDUCED_TYPENAME boost::disable_if< boost::is_same< Range,
+ BOOST_DEDUCED_TYPENAME PtrSetAdapter::iterator >, size_type >::type
+ transfer( const Range& r, PtrSetAdapter& from ) // basic
+ {
+ return transfer( boost::begin(r), boost::end(r), from );
+ }
+
+#endif
+
+ template< class PtrSetAdapter >
+ void transfer( PtrSetAdapter& from ) // basic
+ {
+ transfer( from.begin(), from.end(), from );
+ BOOST_ASSERT( from.empty() );
+ }
+
+ };
+
+} // namespace 'boost'
+
+#endif
diff --git a/boost/boost/ptr_container/ptr_vector.hpp b/boost/boost/ptr_container/ptr_vector.hpp
new file mode 100644
index 00000000000..0726a68f9f3
--- /dev/null
+++ b/boost/boost/ptr_container/ptr_vector.hpp
@@ -0,0 +1,92 @@
+//
+// Boost.Pointer Container
+//
+// Copyright Thorsten Ottosen 2003-2005. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/ptr_container/
+//
+
+#ifndef BOOST_PTR_CONTAINER_PTR_VECTOR_HPP
+#define BOOST_PTR_CONTAINER_PTR_VECTOR_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif
+
+#include <vector>
+#include <boost/ptr_container/ptr_sequence_adapter.hpp>
+
+namespace boost
+{
+
+ template
+ <
+ class T,
+ class CloneAllocator = heap_clone_allocator,
+ class Allocator = std::allocator<void*>
+ >
+ class ptr_vector : public
+ ptr_sequence_adapter< T,
+ std::vector<void*,Allocator>,
+ CloneAllocator >
+ {
+ typedef ptr_sequence_adapter< T,
+ std::vector<void*,Allocator>,
+ CloneAllocator >
+ base_class;
+
+ typedef ptr_vector<T,CloneAllocator,Allocator> this_type;
+
+ public:
+
+ BOOST_PTR_CONTAINER_DEFINE_NON_INHERITED_MEMBERS( ptr_vector,
+ base_class,
+ this_type );
+
+ ptr_vector( size_type n,
+ const allocator_type& alloc = allocator_type() )
+ : base_class(alloc)
+ {
+ this->c_private().reserve( n );
+ }
+
+ public: // serialization
+
+ template< class Archive >
+ void load( Archive& ar, unsigned )
+ {
+ size_type n;
+ ar & n;
+
+ this->reserve( n );
+ this->load_helper( ar, n );
+ }
+
+ BOOST_SERIALIZATION_SPLIT_MEMBER()
+
+ };
+
+ //////////////////////////////////////////////////////////////////////////////
+ // clonability
+
+ template< typename T, typename CA, typename A >
+ inline ptr_vector<T,CA,A>* new_clone( const ptr_vector<T,CA,A>& r )
+ {
+ return r.clone().release();
+ }
+
+ /////////////////////////////////////////////////////////////////////////
+ // swap
+
+ template< typename T, typename CA, typename A >
+ inline void swap( ptr_vector<T,CA,A>& l, ptr_vector<T,CA,A>& r )
+ {
+ l.swap(r);
+ }
+
+}
+
+#endif
diff --git a/boost/boost/python.hpp b/boost/boost/python.hpp
new file mode 100644
index 00000000000..ae49abaf10c
--- /dev/null
+++ b/boost/boost/python.hpp
@@ -0,0 +1,73 @@
+// Copyright David Abrahams 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/python for documentation.
+
+#ifndef PYTHON_DWA2002810_HPP
+# define PYTHON_DWA2002810_HPP
+
+# include <boost/python/args.hpp>
+# include <boost/python/args_fwd.hpp>
+# include <boost/python/back_reference.hpp>
+# include <boost/python/bases.hpp>
+# include <boost/python/borrowed.hpp>
+# include <boost/python/call.hpp>
+# include <boost/python/call_method.hpp>
+# include <boost/python/class.hpp>
+# include <boost/python/copy_const_reference.hpp>
+# include <boost/python/copy_non_const_reference.hpp>
+# include <boost/python/data_members.hpp>
+# include <boost/python/def.hpp>
+# include <boost/python/default_call_policies.hpp>
+# include <boost/python/dict.hpp>
+# include <boost/python/docstring_options.hpp>
+# include <boost/python/enum.hpp>
+# include <boost/python/errors.hpp>
+# include <boost/python/exception_translator.hpp>
+# include <boost/python/exec.hpp>
+# include <boost/python/extract.hpp>
+# include <boost/python/handle.hpp>
+# include <boost/python/has_back_reference.hpp>
+# include <boost/python/implicit.hpp>
+# include <boost/python/init.hpp>
+# include <boost/python/import.hpp>
+# include <boost/python/instance_holder.hpp>
+# include <boost/python/iterator.hpp>
+# include <boost/python/list.hpp>
+# include <boost/python/long.hpp>
+# include <boost/python/lvalue_from_pytype.hpp>
+# include <boost/python/make_constructor.hpp>
+# include <boost/python/make_function.hpp>
+# include <boost/python/manage_new_object.hpp>
+# include <boost/python/module.hpp>
+# include <boost/python/numeric.hpp>
+# include <boost/python/object.hpp>
+# include <boost/python/object_protocol.hpp>
+# include <boost/python/object_protocol_core.hpp>
+# include <boost/python/opaque_pointer_converter.hpp>
+# include <boost/python/operators.hpp>
+# include <boost/python/other.hpp>
+# include <boost/python/overloads.hpp>
+# include <boost/python/pointee.hpp>
+# include <boost/python/pure_virtual.hpp>
+# include <boost/python/ptr.hpp>
+# include <boost/python/reference_existing_object.hpp>
+# include <boost/python/register_ptr_to_python.hpp>
+# include <boost/python/return_arg.hpp>
+# include <boost/python/return_internal_reference.hpp>
+# include <boost/python/return_opaque_pointer.hpp>
+# include <boost/python/return_value_policy.hpp>
+# include <boost/python/scope.hpp>
+# include <boost/python/self.hpp>
+# include <boost/python/slice_nil.hpp>
+# include <boost/python/str.hpp>
+# include <boost/python/to_python_converter.hpp>
+# include <boost/python/to_python_indirect.hpp>
+# include <boost/python/to_python_value.hpp>
+# include <boost/python/tuple.hpp>
+# include <boost/python/type_id.hpp>
+# include <boost/python/with_custodian_and_ward.hpp>
+
+#endif // PYTHON_DWA2002810_HPP
diff --git a/boost/boost/python/arg_from_python.hpp b/boost/boost/python/arg_from_python.hpp
new file mode 100644
index 00000000000..05611edbbd9
--- /dev/null
+++ b/boost/boost/python/arg_from_python.hpp
@@ -0,0 +1,76 @@
+// Copyright David Abrahams 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)
+#ifndef ARG_FROM_PYTHON_DWA2002128_HPP
+# define ARG_FROM_PYTHON_DWA2002128_HPP
+
+# include <boost/python/detail/prefix.hpp>
+# include <boost/python/converter/arg_from_python.hpp>
+# if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) \
+ || BOOST_WORKAROUND(BOOST_INTEL_WIN, BOOST_TESTED_AT(800))
+# include <boost/type_traits/remove_cv.hpp>
+#endif
+
+namespace boost { namespace python {
+
+template <class T>
+struct arg_from_python
+ : converter::select_arg_from_python<
+# if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) \
+ || BOOST_WORKAROUND(BOOST_INTEL_WIN, BOOST_TESTED_AT(800))
+ typename boost::remove_cv<T>::type
+# else
+ T
+# endif
+ >::type
+{
+ typedef typename converter::select_arg_from_python<
+# if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) \
+ || BOOST_WORKAROUND(BOOST_INTEL_WIN, BOOST_TESTED_AT(800))
+ typename boost::remove_cv<T>::type
+# else
+ T
+# endif
+ >::type base;
+
+ arg_from_python(PyObject*);
+};
+
+// specialization for PyObject*
+template <>
+struct arg_from_python<PyObject*>
+{
+ typedef PyObject* result_type;
+
+ arg_from_python(PyObject* p) : m_source(p) {}
+ bool convertible() const { return true; }
+ PyObject* operator()() const { return m_source; }
+ private:
+ PyObject* m_source;
+};
+
+template <>
+struct arg_from_python<PyObject* const&>
+{
+ typedef PyObject* const& result_type;
+
+ arg_from_python(PyObject* p) : m_source(p) {}
+ bool convertible() const { return true; }
+ PyObject*const& operator()() const { return m_source; }
+ private:
+ PyObject* m_source;
+};
+
+//
+// implementations
+//
+template <class T>
+inline arg_from_python<T>::arg_from_python(PyObject* source)
+ : base(source)
+{
+}
+
+}} // namespace boost::python
+
+#endif // ARG_FROM_PYTHON_DWA2002128_HPP
diff --git a/boost/boost/python/args.hpp b/boost/boost/python/args.hpp
new file mode 100644
index 00000000000..8f8791d76f9
--- /dev/null
+++ b/boost/boost/python/args.hpp
@@ -0,0 +1,175 @@
+// Copyright David Abrahams 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)
+#ifndef KEYWORDS_DWA2002323_HPP
+# define KEYWORDS_DWA2002323_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+# include <boost/python/args_fwd.hpp>
+# include <boost/config.hpp>
+# include <boost/python/detail/preprocessor.hpp>
+# include <boost/python/detail/type_list.hpp>
+
+# include <boost/type_traits/is_reference.hpp>
+# include <boost/type_traits/remove_reference.hpp>
+# include <boost/type_traits/remove_cv.hpp>
+
+# include <boost/preprocessor/enum_params.hpp>
+# include <boost/preprocessor/repeat.hpp>
+# include <boost/preprocessor/facilities/intercept.hpp>
+# include <boost/preprocessor/iteration/local.hpp>
+
+# include <boost/python/detail/mpl_lambda.hpp>
+# include <boost/python/object_core.hpp>
+
+# include <boost/mpl/bool.hpp>
+
+# include <cstddef>
+# include <algorithm>
+
+namespace boost { namespace python {
+
+typedef detail::keywords<1> arg;
+typedef arg arg_; // gcc 2.96 workaround
+
+namespace detail
+{
+ template <std::size_t nkeywords>
+ struct keywords_base
+ {
+ BOOST_STATIC_CONSTANT(std::size_t, size = nkeywords);
+
+ keyword_range range() const
+ {
+ return keyword_range(elements, elements + nkeywords);
+ }
+
+ keyword elements[nkeywords];
+
+ keywords<nkeywords+1>
+ operator,(python::arg const &k) const;
+
+ keywords<nkeywords + 1>
+ operator,(char const *name) const;
+ };
+
+ template <std::size_t nkeywords>
+ struct keywords : keywords_base<nkeywords>
+ {
+ };
+
+ template <>
+ struct keywords<1> : keywords_base<1>
+ {
+ explicit keywords(char const *name)
+ {
+ elements[0].name = name;
+ }
+
+ template <class T>
+ python::arg& operator=(T const& value)
+ {
+ object z(value);
+ elements[0].default_value = handle<>(python::borrowed(object(value).ptr()));
+ return *this;
+ }
+
+ operator detail::keyword const&() const
+ {
+ return elements[0];
+ }
+ };
+
+ template <std::size_t nkeywords>
+ inline
+ keywords<nkeywords+1>
+ keywords_base<nkeywords>::operator,(python::arg const &k) const
+ {
+ keywords<nkeywords> const& l = *static_cast<keywords<nkeywords> const*>(this);
+ python::detail::keywords<nkeywords+1> res;
+ std::copy(l.elements, l.elements+nkeywords, res.elements);
+ res.elements[nkeywords] = k.elements[0];
+ return res;
+ }
+
+ template <std::size_t nkeywords>
+ inline
+ keywords<nkeywords + 1>
+ keywords_base<nkeywords>::operator,(char const *name) const
+ {
+ return this->operator,(python::arg(name));
+ }
+
+# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ template<typename T>
+ struct is_keywords
+ {
+ BOOST_STATIC_CONSTANT(bool, value = false);
+ };
+
+ template<std::size_t nkeywords>
+ struct is_keywords<keywords<nkeywords> >
+ {
+ BOOST_STATIC_CONSTANT(bool, value = true);
+ };
+ template <class T>
+ struct is_reference_to_keywords
+ {
+ BOOST_STATIC_CONSTANT(bool, is_ref = is_reference<T>::value);
+ typedef typename remove_reference<T>::type deref;
+ typedef typename remove_cv<deref>::type key_t;
+ BOOST_STATIC_CONSTANT(bool, is_key = is_keywords<key_t>::value);
+ BOOST_STATIC_CONSTANT(bool, value = (is_ref & is_key));
+
+ typedef mpl::bool_<value> type;
+ BOOST_PYTHON_MPL_LAMBDA_SUPPORT(1,is_reference_to_keywords,(T))
+ };
+# else
+ typedef char (&yes_keywords_t)[1];
+ typedef char (&no_keywords_t)[2];
+
+ no_keywords_t is_keywords_test(...);
+
+ template<std::size_t nkeywords>
+ yes_keywords_t is_keywords_test(void (*)(keywords<nkeywords>&));
+
+ template<std::size_t nkeywords>
+ yes_keywords_t is_keywords_test(void (*)(keywords<nkeywords> const&));
+
+ template<typename T>
+ class is_reference_to_keywords
+ {
+ public:
+ BOOST_STATIC_CONSTANT(
+ bool, value = (
+ sizeof(detail::is_keywords_test( (void (*)(T))0 ))
+ == sizeof(detail::yes_keywords_t)));
+
+ typedef mpl::bool_<value> type;
+ BOOST_PYTHON_MPL_LAMBDA_SUPPORT(1,is_reference_to_keywords,(T))
+ };
+# endif
+}
+
+inline detail::keywords<1> args(char const* name)
+{
+ return detail::keywords<1>(name);
+}
+
+# define BOOST_PYTHON_ASSIGN_NAME(z, n, _) result.elements[n].name = name##n;
+# define BOOST_PP_LOCAL_MACRO(n) \
+inline detail::keywords<n> args(BOOST_PP_ENUM_PARAMS_Z(1, n, char const* name)) \
+{ \
+ detail::keywords<n> result; \
+ BOOST_PP_REPEAT_1(n, BOOST_PYTHON_ASSIGN_NAME, _) \
+ return result; \
+}
+# define BOOST_PP_LOCAL_LIMITS (2, BOOST_PYTHON_MAX_ARITY)
+# include BOOST_PP_LOCAL_ITERATE()
+
+}} // namespace boost::python
+
+
+# endif // KEYWORDS_DWA2002323_HPP
diff --git a/boost/boost/python/args_fwd.hpp b/boost/boost/python/args_fwd.hpp
new file mode 100644
index 00000000000..39239461b0e
--- /dev/null
+++ b/boost/boost/python/args_fwd.hpp
@@ -0,0 +1,52 @@
+// Copyright David Abrahams 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)
+#ifndef ARGS_FWD_DWA2002927_HPP
+# define ARGS_FWD_DWA2002927_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+# include <boost/python/handle.hpp>
+# include <boost/config.hpp>
+# include <cstddef>
+# include <utility>
+
+namespace boost { namespace python {
+
+namespace detail
+{
+ struct keyword
+ {
+ keyword(char const* name_=0)
+ : name(name_)
+ {}
+
+ char const* name;
+ handle<> default_value;
+ };
+
+ template <std::size_t nkeywords = 0> struct keywords;
+
+ typedef std::pair<keyword const*, keyword const*> keyword_range;
+
+ template <>
+ struct keywords<0>
+ {
+ BOOST_STATIC_CONSTANT(std::size_t, size = 0);
+ static keyword_range range() { return keyword_range(); }
+ };
+
+ namespace error
+ {
+ template <int keywords, int function_args>
+ struct more_keywords_than_function_arguments
+ {
+ typedef char too_many_keywords[keywords > function_args ? -1 : 1];
+ };
+ }
+}
+
+}} // namespace boost::python
+
+#endif // ARGS_FWD_DWA2002927_HPP
diff --git a/boost/boost/python/back_reference.hpp b/boost/boost/python/back_reference.hpp
new file mode 100644
index 00000000000..c1daba60c1c
--- /dev/null
+++ b/boost/boost/python/back_reference.hpp
@@ -0,0 +1,102 @@
+// Copyright David Abrahams 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)
+#ifndef BACK_REFERENCE_DWA2002510_HPP
+# define BACK_REFERENCE_DWA2002510_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+# include <boost/python/object_fwd.hpp>
+# include <boost/python/detail/dependent.hpp>
+# include <boost/python/detail/raw_pyobject.hpp>
+
+namespace boost { namespace python {
+
+template <class T>
+struct back_reference
+{
+ private: // types
+ typedef typename detail::dependent<object,T>::type source_t;
+ public:
+ typedef T type;
+
+ back_reference(PyObject*, T);
+ source_t const& source() const;
+ T get() const;
+ private:
+ source_t m_source;
+ T m_value;
+};
+
+# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+template<typename T>
+class is_back_reference
+{
+ public:
+ BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+template<typename T>
+class is_back_reference<back_reference<T> >
+{
+ public:
+ BOOST_STATIC_CONSTANT(bool, value = true);
+};
+
+# else // no partial specialization
+
+}} // namespace boost::python
+
+#include <boost/type.hpp>
+
+namespace boost { namespace python {
+
+namespace detail
+{
+ typedef char (&yes_back_reference_t)[1];
+ typedef char (&no_back_reference_t)[2];
+
+ no_back_reference_t is_back_reference_test(...);
+
+ template<typename T>
+ yes_back_reference_t is_back_reference_test(boost::type< back_reference<T> >);
+}
+
+template<typename T>
+class is_back_reference
+{
+ public:
+ BOOST_STATIC_CONSTANT(
+ bool, value = (
+ sizeof(detail::is_back_reference_test(boost::type<T>()))
+ == sizeof(detail::yes_back_reference_t)));
+};
+
+# endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+//
+// implementations
+//
+template <class T>
+back_reference<T>::back_reference(PyObject* p, T x)
+ : m_source(detail::borrowed_reference(p))
+ , m_value(x)
+{
+}
+
+template <class T>
+typename back_reference<T>::source_t const& back_reference<T>::source() const
+{
+ return m_source;
+}
+
+template <class T>
+T back_reference<T>::get() const
+{
+ return m_value;
+}
+
+}} // namespace boost::python
+
+#endif // BACK_REFERENCE_DWA2002510_HPP
diff --git a/boost/boost/python/base_type_traits.hpp b/boost/boost/python/base_type_traits.hpp
new file mode 100644
index 00000000000..e1c6a4843f1
--- /dev/null
+++ b/boost/boost/python/base_type_traits.hpp
@@ -0,0 +1,43 @@
+// Copyright David Abrahams 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)
+#ifndef BASE_TYPE_TRAITS_DWA2002614_HPP
+# define BASE_TYPE_TRAITS_DWA2002614_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+namespace boost { namespace python {
+
+namespace detail
+{
+ struct unspecialized {};
+}
+
+// Derive from unspecialized so we can detect whether traits are
+// specialized
+template <class T> struct base_type_traits
+ : detail::unspecialized
+{};
+
+template <>
+struct base_type_traits<PyObject>
+{
+ typedef PyObject type;
+};
+
+template <>
+struct base_type_traits<PyTypeObject>
+{
+ typedef PyObject type;
+};
+
+template <>
+struct base_type_traits<PyMethodObject>
+{
+ typedef PyObject type;
+};
+
+}} // namespace boost::python
+
+#endif // BASE_TYPE_TRAITS_DWA2002614_HPP
diff --git a/boost/boost/python/bases.hpp b/boost/boost/python/bases.hpp
new file mode 100644
index 00000000000..0bd7350e55f
--- /dev/null
+++ b/boost/boost/python/bases.hpp
@@ -0,0 +1,68 @@
+// Copyright David Abrahams 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)
+#ifndef BASES_DWA2002321_HPP
+# define BASES_DWA2002321_HPP
+
+# include <boost/python/detail/prefix.hpp>
+# include <boost/type_traits/object_traits.hpp>
+# include <boost/python/detail/type_list.hpp>
+# include <boost/mpl/if.hpp>
+# include <boost/mpl/bool.hpp>
+# include <boost/preprocessor/enum_params_with_a_default.hpp>
+# include <boost/preprocessor/enum_params.hpp>
+
+namespace boost { namespace python {
+
+# define BOOST_PYTHON_BASE_PARAMS BOOST_PP_ENUM_PARAMS_Z(1, BOOST_PYTHON_MAX_BASES, Base)
+
+ // A type list for specifying bases
+ template < BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(BOOST_PYTHON_MAX_BASES, typename Base, mpl::void_) >
+ struct bases : detail::type_list< BOOST_PYTHON_BASE_PARAMS >::type
+ {};
+
+ namespace detail
+ {
+# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ template <class T> struct specifies_bases
+ : mpl::false_
+ {
+ };
+
+ template < BOOST_PP_ENUM_PARAMS_Z(1, BOOST_PYTHON_MAX_BASES, class Base) >
+ struct specifies_bases< bases< BOOST_PYTHON_BASE_PARAMS > >
+ : mpl::true_
+ {
+ };
+# else
+ template < BOOST_PP_ENUM_PARAMS(BOOST_PYTHON_MAX_BASES, class Base) >
+ static char is_bases_helper(bases< BOOST_PYTHON_BASE_PARAMS > const&);
+
+ static char (& is_bases_helper(...) )[256];
+
+ template <class T>
+ struct specifies_bases
+ {
+ private:
+ static typename add_reference<T>::type make();
+ BOOST_STATIC_CONSTANT(bool, non_ref = !is_reference<T>::value);
+ public:
+ BOOST_STATIC_CONSTANT(bool, value = non_ref & (sizeof(is_bases_helper(make())) == 1));
+ typedef mpl::bool_<value> type;
+ };
+# endif
+ template <class T, class Prev = bases<> >
+ struct select_bases
+ : mpl::if_<
+ specifies_bases<T>
+ , T
+ , Prev
+ >
+ {
+ };
+ }
+# undef BOOST_PYTHON_BASE_PARAMS
+}} // namespace boost::python
+
+#endif // BASES_DWA2002321_HPP
diff --git a/boost/boost/python/borrowed.hpp b/boost/boost/python/borrowed.hpp
new file mode 100644
index 00000000000..fd2716bfbd8
--- /dev/null
+++ b/boost/boost/python/borrowed.hpp
@@ -0,0 +1,21 @@
+// Copyright David Abrahams 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)
+#ifndef BORROWED_DWA2002614_HPP
+# define BORROWED_DWA2002614_HPP
+
+# include <boost/python/detail/prefix.hpp>
+# include <boost/python/detail/borrowed_ptr.hpp>
+
+namespace boost { namespace python {
+
+template <class T>
+inline python::detail::borrowed<T>* borrowed(T* p)
+{
+ return (detail::borrowed<T>*)p;
+}
+
+}} // namespace boost::python
+
+#endif // BORROWED_DWA2002614_HPP
diff --git a/boost/boost/python/call.hpp b/boost/boost/python/call.hpp
new file mode 100644
index 00000000000..9a3d974b772
--- /dev/null
+++ b/boost/boost/python/call.hpp
@@ -0,0 +1,79 @@
+#if !defined(BOOST_PP_IS_ITERATING)
+
+// Copyright David Abrahams 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)
+
+# ifndef CALL_DWA2002411_HPP
+# define CALL_DWA2002411_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+# include <boost/type.hpp>
+
+# include <boost/python/converter/arg_to_python.hpp>
+# include <boost/python/converter/return_from_python.hpp>
+# include <boost/python/detail/preprocessor.hpp>
+# include <boost/python/detail/void_return.hpp>
+
+# include <boost/preprocessor/comma_if.hpp>
+# include <boost/preprocessor/iterate.hpp>
+# include <boost/preprocessor/repeat.hpp>
+# include <boost/preprocessor/debug/line.hpp>
+# include <boost/preprocessor/repetition/enum_trailing_params.hpp>
+# include <boost/preprocessor/repetition/enum_binary_params.hpp>
+
+namespace boost { namespace python {
+
+# define BOOST_PYTHON_FAST_ARG_TO_PYTHON_GET(z, n, _) \
+ , converter::arg_to_python<A##n>(a##n).get()
+
+# define BOOST_PP_ITERATION_PARAMS_1 (3, (0, BOOST_PYTHON_MAX_ARITY, <boost/python/call.hpp>))
+# include BOOST_PP_ITERATE()
+
+# undef BOOST_PYTHON_FAST_ARG_TO_PYTHON_GET
+
+}} // namespace boost::python
+
+# endif // CALL_DWA2002411_HPP
+
+#elif BOOST_PP_ITERATION_DEPTH() == 1
+# if !(BOOST_WORKAROUND(__MWERKS__, > 0x3100) \
+ && BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3201)))
+# line BOOST_PP_LINE(__LINE__, call.hpp)
+# endif
+
+# define N BOOST_PP_ITERATION()
+
+template <
+ class R
+ BOOST_PP_ENUM_TRAILING_PARAMS_Z(1, N, class A)
+ >
+typename detail::returnable<R>::type
+call(PyObject* callable
+ BOOST_PP_COMMA_IF(N) BOOST_PP_ENUM_BINARY_PARAMS_Z(1, N, A, const& a)
+ , boost::type<R>* = 0
+ )
+{
+ PyObject* const result =
+ PyEval_CallFunction(
+ callable
+ , const_cast<char*>("(" BOOST_PP_REPEAT_1ST(N, BOOST_PYTHON_FIXED, "O") ")")
+ BOOST_PP_REPEAT_1ST(N, BOOST_PYTHON_FAST_ARG_TO_PYTHON_GET, nil)
+ );
+
+ // This conversion *must not* be done in the same expression as
+ // the call, because, in the special case where the result is a
+ // reference a Python object which was created by converting a C++
+ // argument for passing to PyEval_CallFunction, its reference
+ // count will be 2 until the end of the full expression containing
+ // the conversion, and that interferes with dangling
+ // pointer/reference detection.
+ converter::return_from_python<R> converter;
+ return converter(result);
+}
+
+# undef N
+
+#endif
diff --git a/boost/boost/python/call_method.hpp b/boost/boost/python/call_method.hpp
new file mode 100644
index 00000000000..0bca0610dff
--- /dev/null
+++ b/boost/boost/python/call_method.hpp
@@ -0,0 +1,79 @@
+#if !defined(BOOST_PP_IS_ITERATING)
+
+// Copyright David Abrahams 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)
+# ifndef CALL_METHOD_DWA2002411_HPP
+# define CALL_METHOD_DWA2002411_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+# include <boost/type.hpp>
+
+# include <boost/python/converter/arg_to_python.hpp>
+# include <boost/python/converter/return_from_python.hpp>
+# include <boost/python/detail/preprocessor.hpp>
+# include <boost/python/detail/void_return.hpp>
+
+# include <boost/preprocessor/comma_if.hpp>
+# include <boost/preprocessor/iterate.hpp>
+# include <boost/preprocessor/repeat.hpp>
+# include <boost/preprocessor/debug/line.hpp>
+# include <boost/preprocessor/repetition/enum_trailing_params.hpp>
+# include <boost/preprocessor/repetition/enum_binary_params.hpp>
+
+namespace boost { namespace python {
+
+# define BOOST_PYTHON_FAST_ARG_TO_PYTHON_GET(z, n, _) \
+ , converter::arg_to_python<A##n>(a##n).get()
+
+# define BOOST_PP_ITERATION_PARAMS_1 (3, (0, BOOST_PYTHON_MAX_ARITY, <boost/python/call_method.hpp>))
+# include BOOST_PP_ITERATE()
+
+# undef BOOST_PYTHON_FAST_ARG_TO_PYTHON_GET
+
+}} // namespace boost::python
+
+# endif // CALL_METHOD_DWA2002411_HPP
+
+#elif BOOST_PP_ITERATION_DEPTH() == 1
+# if !(BOOST_WORKAROUND(__MWERKS__, > 0x3100) \
+ && BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3201)))
+# line BOOST_PP_LINE(__LINE__, call_method.hpp)
+# endif
+
+# define N BOOST_PP_ITERATION()
+
+template <
+ class R
+ BOOST_PP_ENUM_TRAILING_PARAMS_Z(1, N, class A)
+ >
+typename detail::returnable<R>::type
+call_method(PyObject* self, char const* name
+ BOOST_PP_COMMA_IF(N) BOOST_PP_ENUM_BINARY_PARAMS_Z(1, N, A, const& a)
+ , boost::type<R>* = 0
+ )
+{
+ PyObject* const result =
+ PyEval_CallMethod(
+ self
+ , const_cast<char*>(name)
+ , const_cast<char*>("(" BOOST_PP_REPEAT_1ST(N, BOOST_PYTHON_FIXED, "O") ")")
+ BOOST_PP_REPEAT_1ST(N, BOOST_PYTHON_FAST_ARG_TO_PYTHON_GET, nil)
+ );
+
+ // This conversion *must not* be done in the same expression as
+ // the call, because, in the special case where the result is a
+ // reference a Python object which was created by converting a C++
+ // argument for passing to PyEval_CallFunction, its reference
+ // count will be 2 until the end of the full expression containing
+ // the conversion, and that interferes with dangling
+ // pointer/reference detection.
+ converter::return_from_python<R> converter;
+ return converter(result);
+}
+
+# undef N
+
+#endif // BOOST_PP_IS_ITERATING
diff --git a/boost/boost/python/cast.hpp b/boost/boost/python/cast.hpp
new file mode 100644
index 00000000000..31c61dbf82b
--- /dev/null
+++ b/boost/boost/python/cast.hpp
@@ -0,0 +1,106 @@
+// Copyright David Abrahams 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)
+#ifndef CAST_DWA200269_HPP
+# define CAST_DWA200269_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+# include <boost/type_traits/same_traits.hpp>
+# include <boost/type_traits/cv_traits.hpp>
+# include <boost/type.hpp>
+# include <boost/python/base_type_traits.hpp>
+# include <boost/python/detail/convertible.hpp>
+
+namespace boost { namespace python {
+
+namespace detail
+{
+ template <class Source, class Target> inline Target* upcast_impl(Source*, Target*);
+
+ template <class Source, class Target>
+ inline Target* upcast(Source* p, yes_convertible, no_convertible, Target*)
+ {
+ return p;
+ }
+
+ template <class Source, class Target>
+ inline Target* upcast(Source* p, no_convertible, no_convertible, Target*)
+ {
+ typedef typename base_type_traits<Source>::type base;
+
+ return detail::upcast_impl((base*)p, (Target*)0);
+ }
+
+ template <bool is_same = true>
+ struct upcaster
+ {
+ template <class T>
+ static inline T* execute(T* x, T*) { return x; }
+ };
+
+ template <>
+ struct upcaster<false>
+ {
+ template <class Source, class Target>
+ static inline Target* execute(Source* x, Target*)
+ {
+ return detail::upcast(
+ x, detail::convertible<Target*>::check(x)
+ , detail::convertible<Source*>::check((Target*)0)
+ , (Target*)0);
+ }
+ };
+
+
+ template <class Target, class Source>
+ inline Target* downcast(Source* p, yes_convertible)
+ {
+ return static_cast<Target*>(p);
+ }
+
+ template <class Target, class Source>
+ inline Target* downcast(Source* p, no_convertible, boost::type<Target>* = 0)
+ {
+ typedef typename base_type_traits<Source>::type base;
+ return (Target*)detail::downcast<base>(p, convertible<Source*>::check((base*)0));
+ }
+
+ template <class T>
+ inline void assert_castable(boost::type<T>* = 0)
+ {
+ typedef char must_be_a_complete_type[sizeof(T)];
+ }
+
+ template <class Source, class Target>
+ inline Target* upcast_impl(Source* x, Target*)
+ {
+ typedef typename add_cv<Source>::type src_t;
+ typedef typename add_cv<Target>::type target_t;
+ bool const same = is_same<src_t,target_t>::value;
+
+ return detail::upcaster<same>::execute(x, (Target*)0);
+ }
+}
+
+template <class Target, class Source>
+inline Target* upcast(Source* x, Target* = 0)
+{
+ detail::assert_castable<Source>();
+ detail::assert_castable<Target>();
+ return detail::upcast_impl(x, (Target*)0);
+
+}
+
+template <class Target, class Source>
+inline Target* downcast(Source* x, Target* = 0)
+{
+ detail::assert_castable<Source>();
+ detail::assert_castable<Target>();
+ return detail::downcast<Target>(x, detail::convertible<Source*>::check((Target*)0));
+}
+
+}} // namespace boost::python
+
+#endif // CAST_DWA200269_HPP
diff --git a/boost/boost/python/class.hpp b/boost/boost/python/class.hpp
new file mode 100644
index 00000000000..0ec86f43d17
--- /dev/null
+++ b/boost/boost/python/class.hpp
@@ -0,0 +1,654 @@
+// Copyright David Abrahams 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)
+#ifndef CLASS_DWA200216_HPP
+# define CLASS_DWA200216_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+# include <boost/noncopyable.hpp>
+
+# include <boost/python/class_fwd.hpp>
+# include <boost/python/object/class.hpp>
+
+# include <boost/python/object.hpp>
+# include <boost/python/type_id.hpp>
+# include <boost/python/data_members.hpp>
+# include <boost/python/make_function.hpp>
+# include <boost/python/signature.hpp>
+# include <boost/python/init.hpp>
+# include <boost/python/args_fwd.hpp>
+
+# include <boost/python/object/class_metadata.hpp>
+# include <boost/python/object/pickle_support.hpp>
+# include <boost/python/object/add_to_namespace.hpp>
+
+# include <boost/python/detail/overloads_fwd.hpp>
+# include <boost/python/detail/operator_id.hpp>
+# include <boost/python/detail/def_helper.hpp>
+# include <boost/python/detail/force_instantiate.hpp>
+# include <boost/python/detail/unwrap_type_id.hpp>
+# include <boost/python/detail/unwrap_wrapper.hpp>
+
+# include <boost/type_traits/is_same.hpp>
+# include <boost/type_traits/is_member_function_pointer.hpp>
+# include <boost/type_traits/is_polymorphic.hpp>
+
+# include <boost/mpl/size.hpp>
+# include <boost/mpl/for_each.hpp>
+# include <boost/mpl/bool.hpp>
+# include <boost/mpl/not.hpp>
+
+# include <boost/detail/workaround.hpp>
+
+# if BOOST_WORKAROUND(__MWERKS__, <= 0x3004) \
+ /* pro9 reintroduced the bug */ \
+ || (BOOST_WORKAROUND(__MWERKS__, > 0x3100) \
+ && BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3201))) \
+ || BOOST_WORKAROUND(__GNUC__, < 3)
+
+# define BOOST_PYTHON_NO_MEMBER_POINTER_ORDERING 1
+
+# endif
+
+# ifdef BOOST_PYTHON_NO_MEMBER_POINTER_ORDERING
+# include <boost/mpl/and.hpp>
+# include <boost/type_traits/is_member_pointer.hpp>
+# endif
+
+namespace boost { namespace python {
+
+template <class DerivedVisitor> class def_visitor;
+
+enum no_init_t { no_init };
+
+namespace detail
+{
+ // This function object is used with mpl::for_each to write the id
+ // of the type a pointer to which is passed as its 2nd compile-time
+ // argument. into the iterator pointed to by its runtime argument
+ struct write_type_id
+ {
+ write_type_id(type_info**p) : p(p) {}
+
+ // Here's the runtime behavior
+ template <class T>
+ void operator()(T*) const
+ {
+ *(*p)++ = type_id<T>();
+ }
+
+ type_info** p;
+ };
+
+ template <class T>
+ struct is_data_member_pointer
+ : mpl::and_<
+ is_member_pointer<T>
+ , mpl::not_<is_member_function_pointer<T> >
+ >
+ {};
+
+# ifdef BOOST_PYTHON_NO_MEMBER_POINTER_ORDERING
+# define BOOST_PYTHON_DATA_MEMBER_HELPER(D) , detail::is_data_member_pointer<D>()
+# define BOOST_PYTHON_YES_DATA_MEMBER , mpl::true_
+# define BOOST_PYTHON_NO_DATA_MEMBER , mpl::false_
+# elif defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
+# define BOOST_PYTHON_DATA_MEMBER_HELPER(D) , 0
+# define BOOST_PYTHON_YES_DATA_MEMBER , int
+# define BOOST_PYTHON_NO_DATA_MEMBER , ...
+# else
+# define BOOST_PYTHON_DATA_MEMBER_HELPER(D)
+# define BOOST_PYTHON_YES_DATA_MEMBER
+# define BOOST_PYTHON_NO_DATA_MEMBER
+# endif
+
+ namespace error
+ {
+ //
+ // A meta-assertion mechanism which prints nice error messages and
+ // backtraces on lots of compilers. Usage:
+ //
+ // assertion<C>::failed
+ //
+ // where C is an MPL metafunction class
+ //
+
+ template <class C> struct assertion_failed { };
+ template <class C> struct assertion_ok { typedef C failed; };
+
+ template <class C>
+ struct assertion
+ : mpl::if_<C, assertion_ok<C>, assertion_failed<C> >::type
+ {};
+
+ //
+ // Checks for validity of arguments used to define virtual
+ // functions with default implementations.
+ //
+
+ template <class Default>
+ void not_a_derived_class_member(Default) {}
+
+ template <class T, class Fn>
+ struct virtual_function_default
+ {
+ template <class Default>
+ static void
+ must_be_derived_class_member(Default const&)
+ {
+ typedef typename assertion<mpl::not_<is_same<Default,Fn> > >::failed test0;
+# if !BOOST_WORKAROUND(__MWERKS__, <= 0x2407)
+ typedef typename assertion<is_polymorphic<T> >::failed test1;
+# endif
+ typedef typename assertion<is_member_function_pointer<Fn> >::failed test2;
+ not_a_derived_class_member<Default>(Fn());
+ }
+ };
+ }
+}
+
+// This is the primary mechanism through which users will expose
+// C++ classes to Python.
+template <
+ class W // class being wrapped
+ , class X1 // = detail::not_specified
+ , class X2 // = detail::not_specified
+ , class X3 // = detail::not_specified
+ >
+class class_ : public objects::class_base
+{
+ public: // types
+ typedef objects::class_base base;
+ typedef class_<W,X1,X2,X3> self;
+ typedef typename objects::class_metadata<W,X1,X2,X3> metadata;
+ typedef W wrapped_type;
+
+ private: // types
+
+ // A helper class which will contain an array of id objects to be
+ // passed to the base class constructor
+ struct id_vector
+ {
+ typedef typename metadata::bases bases;
+
+ id_vector()
+ {
+ // Stick the derived class id into the first element of the array
+ ids[0] = detail::unwrap_type_id((W*)0, (W*)0);
+
+ // Write the rest of the elements into succeeding positions.
+ type_info* p = ids + 1;
+ mpl::for_each(detail::write_type_id(&p), (bases*)0, (add_pointer<mpl::_>*)0);
+ }
+
+ BOOST_STATIC_CONSTANT(
+ std::size_t, size = mpl::size<bases>::value + 1);
+ type_info ids[size];
+ };
+ friend struct id_vector;
+
+ public: // constructors
+
+ // Construct with the class name, with or without docstring, and default __init__() function
+ class_(char const* name, char const* doc = 0);
+
+ // Construct with class name, no docstring, and an uncallable __init__ function
+ class_(char const* name, no_init_t);
+
+ // Construct with class name, docstring, and an uncallable __init__ function
+ class_(char const* name, char const* doc, no_init_t);
+
+ // Construct with class name and init<> function
+ template <class DerivedT>
+ inline class_(char const* name, init_base<DerivedT> const& i)
+ : base(name, id_vector::size, id_vector().ids)
+ {
+ this->initialize(i);
+ }
+
+ // Construct with class name, docstring and init<> function
+ template <class DerivedT>
+ inline class_(char const* name, char const* doc, init_base<DerivedT> const& i)
+ : base(name, id_vector::size, id_vector().ids, doc)
+ {
+ this->initialize(i);
+ }
+
+ public: // member functions
+
+ // Generic visitation
+ template <class Derived>
+ self& def(def_visitor<Derived> const& visitor)
+ {
+ visitor.visit(*this);
+ return *this;
+ }
+
+ // Wrap a member function or a non-member function which can take
+ // a T, T cv&, or T cv* as its first parameter, a callable
+ // python object, or a generic visitor.
+ template <class F>
+ self& def(char const* name, F f)
+ {
+ this->def_impl(
+ detail::unwrap_wrapper((W*)0)
+ , name, f, detail::def_helper<char const*>(0), &f);
+ return *this;
+ }
+
+ template <class A1, class A2>
+ self& def(char const* name, A1 a1, A2 const& a2)
+ {
+ this->def_maybe_overloads(name, a1, a2, &a2);
+ return *this;
+ }
+
+ template <class Fn, class A1, class A2>
+ self& def(char const* name, Fn fn, A1 const& a1, A2 const& a2)
+ {
+ // The arguments are definitely:
+ // def(name, function, policy, doc_string)
+ // def(name, function, doc_string, policy)
+
+ this->def_impl(
+ detail::unwrap_wrapper((W*)0)
+ , name, fn
+ , detail::def_helper<A1,A2>(a1,a2)
+ , &fn);
+
+ return *this;
+ }
+
+ template <class Fn, class A1, class A2, class A3>
+ self& def(char const* name, Fn fn, A1 const& a1, A2 const& a2, A3 const& a3)
+ {
+ this->def_impl(
+ detail::unwrap_wrapper((W*)0)
+ , name, fn
+ , detail::def_helper<A1,A2,A3>(a1,a2,a3)
+ , &fn);
+
+ return *this;
+ }
+
+ //
+ // Data member access
+ //
+ template <class D>
+ self& def_readonly(char const* name, D const& d, char const* doc=0)
+ {
+ return this->def_readonly_impl(name, d, doc BOOST_PYTHON_DATA_MEMBER_HELPER(D));
+ }
+
+ template <class D>
+ self& def_readwrite(char const* name, D const& d, char const* doc=0)
+ {
+ return this->def_readwrite_impl(name, d, doc BOOST_PYTHON_DATA_MEMBER_HELPER(D));
+ }
+
+ template <class D>
+ self& def_readonly(char const* name, D& d, char const* doc=0)
+ {
+ return this->def_readonly_impl(name, d, doc BOOST_PYTHON_DATA_MEMBER_HELPER(D));
+ }
+
+ template <class D>
+ self& def_readwrite(char const* name, D& d, char const* doc=0)
+ {
+ return this->def_readwrite_impl(name, d, doc BOOST_PYTHON_DATA_MEMBER_HELPER(D));
+ }
+
+ // Property creation
+# if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+ template <class Get>
+ self& add_property(char const* name, Get fget, char const* docstr = 0)
+ {
+ base::add_property(name, this->make_getter(fget), docstr);
+ return *this;
+ }
+
+ template <class Get, class Set>
+ self& add_property(char const* name, Get fget, Set fset, char const* docstr = 0)
+ {
+ base::add_property(
+ name, this->make_getter(fget), this->make_setter(fset), docstr);
+ return *this;
+ }
+# else
+ private:
+ template <class Get>
+ self& add_property_impl(char const* name, Get fget, char const* docstr, int)
+ {
+ base::add_property(name, this->make_getter(fget), docstr);
+ return *this;
+ }
+
+ template <class Get, class Set>
+ self& add_property_impl(char const* name, Get fget, Set fset, ...)
+ {
+ base::add_property(
+ name, this->make_getter(fget), this->make_setter(fset), 0);
+ return *this;
+ }
+
+ public:
+ template <class Get>
+ self& add_property(char const* name, Get fget)
+ {
+ base::add_property(name, this->make_getter(fget), 0);
+ return *this;
+ }
+
+ template <class Get, class DocStrOrSet>
+ self& add_property(char const* name, Get fget, DocStrOrSet docstr_or_set)
+ {
+ this->add_property_impl(name, this->make_getter(fget), docstr_or_set, 0);
+ return *this;
+ }
+
+ template <class Get, class Set>
+ self&
+ add_property(char const* name, Get fget, Set fset, char const* docstr)
+ {
+ base::add_property(
+ name, this->make_getter(fget), this->make_setter(fset), docstr);
+ return *this;
+ }
+# endif
+
+ template <class Get>
+ self& add_static_property(char const* name, Get fget)
+ {
+ base::add_static_property(name, object(fget));
+ return *this;
+ }
+
+ template <class Get, class Set>
+ self& add_static_property(char const* name, Get fget, Set fset)
+ {
+ base::add_static_property(name, object(fget), object(fset));
+ return *this;
+ }
+
+ template <class U>
+ self& setattr(char const* name, U const& x)
+ {
+ this->base::setattr(name, object(x));
+ return *this;
+ }
+
+ // Pickle support
+ template <typename PickleSuiteType>
+ self& def_pickle(PickleSuiteType const& x)
+ {
+ error_messages::must_be_derived_from_pickle_suite(x);
+ detail::pickle_suite_finalize<PickleSuiteType>::register_(
+ *this,
+ &PickleSuiteType::getinitargs,
+ &PickleSuiteType::getstate,
+ &PickleSuiteType::setstate,
+ PickleSuiteType::getstate_manages_dict());
+ return *this;
+ }
+
+ self& enable_pickling()
+ {
+ this->base::enable_pickling_(false);
+ return *this;
+ }
+
+ self& staticmethod(char const* name)
+ {
+ this->make_method_static(name);
+ return *this;
+ }
+ private: // helper functions
+
+ // Builds a method for this class around the given [member]
+ // function pointer or object, appropriately adjusting the type of
+ // the first signature argument so that if f is a member of a
+ // (possibly not wrapped) base class of T, an lvalue argument of
+ // type T will be required.
+ //
+ // @group PropertyHelpers {
+ template <class F>
+ object make_getter(F f)
+ {
+ typedef typename api::is_object_operators<F>::type is_obj_or_proxy;
+
+ return this->make_fn_impl(
+ detail::unwrap_wrapper((W*)0)
+ , f, is_obj_or_proxy(), (char*)0, detail::is_data_member_pointer<F>()
+ );
+ }
+
+ template <class F>
+ object make_setter(F f)
+ {
+ typedef typename api::is_object_operators<F>::type is_obj_or_proxy;
+
+ return this->make_fn_impl(
+ detail::unwrap_wrapper((W*)0)
+ , f, is_obj_or_proxy(), (int*)0, detail::is_data_member_pointer<F>()
+ );
+ }
+
+ template <class T, class F>
+ object make_fn_impl(T*, F const& f, mpl::false_, void*, mpl::false_)
+ {
+ return python::make_function(f, default_call_policies(), detail::get_signature(f, (T*)0));
+ }
+
+ template <class T, class D, class B>
+ object make_fn_impl(T*, D B::*pm_, mpl::false_, char*, mpl::true_)
+ {
+ D T::*pm = pm_;
+ return python::make_getter(pm);
+ }
+
+ template <class T, class D, class B>
+ object make_fn_impl(T*, D B::*pm_, mpl::false_, int*, mpl::true_)
+ {
+ D T::*pm = pm_;
+ return python::make_setter(pm);
+ }
+
+ template <class T, class F>
+ object make_fn_impl(T*, F const& x, mpl::true_, void*, mpl::false_)
+ {
+ return x;
+ }
+ // }
+
+ template <class D, class B>
+ self& def_readonly_impl(
+ char const* name, D B::*pm_, char const* doc BOOST_PYTHON_YES_DATA_MEMBER)
+ {
+ return this->add_property(name, pm_, doc);
+ }
+
+ template <class D, class B>
+ self& def_readwrite_impl(
+ char const* name, D B::*pm_, char const* doc BOOST_PYTHON_YES_DATA_MEMBER)
+ {
+ return this->add_property(name, pm_, pm_, doc);
+ }
+
+ template <class D>
+ self& def_readonly_impl(
+ char const* name, D& d, char const* BOOST_PYTHON_NO_DATA_MEMBER)
+ {
+ return this->add_static_property(name, python::make_getter(d));
+ }
+
+ template <class D>
+ self& def_readwrite_impl(
+ char const* name, D& d, char const* BOOST_PYTHON_NO_DATA_MEMBER)
+ {
+ return this->add_static_property(name, python::make_getter(d), python::make_setter(d));
+ }
+
+ template <class DefVisitor>
+ inline void initialize(DefVisitor const& i)
+ {
+ metadata::register_(); // set up runtime metadata/conversions
+
+ typedef typename metadata::holder holder;
+ this->set_instance_size( objects::additional_instance_size<holder>::value );
+
+ this->def(i);
+ }
+
+ inline void initialize(no_init_t)
+ {
+ metadata::register_(); // set up runtime metadata/conversions
+ this->def_no_init();
+ }
+
+ //
+ // These two overloads discriminate between def() as applied to a
+ // generic visitor and everything else.
+ //
+ // @group def_impl {
+ template <class T, class Helper, class LeafVisitor, class Visitor>
+ inline void def_impl(
+ T*
+ , char const* name
+ , LeafVisitor
+ , Helper const& helper
+ , def_visitor<Visitor> const* v
+ )
+ {
+ v->visit(*this, name, helper);
+ }
+
+ template <class T, class Fn, class Helper>
+ inline void def_impl(
+ T*
+ , char const* name
+ , Fn fn
+ , Helper const& helper
+ , ...
+ )
+ {
+ objects::add_to_namespace(
+ *this
+ , name
+ , make_function(
+ fn
+ , helper.policies()
+ , helper.keywords()
+ , detail::get_signature(fn, (T*)0)
+ )
+ , helper.doc()
+ );
+
+ this->def_default(name, fn, helper, mpl::bool_<Helper::has_default_implementation>());
+ }
+ // }
+
+ //
+ // These two overloads handle the definition of default
+ // implementation overloads for virtual functions. The second one
+ // handles the case where no default implementation was specified.
+ //
+ // @group def_default {
+ template <class Fn, class Helper>
+ inline void def_default(
+ char const* name
+ , Fn
+ , Helper const& helper
+ , mpl::bool_<true>)
+ {
+ detail::error::virtual_function_default<W,Fn>::must_be_derived_class_member(
+ helper.default_implementation());
+
+ objects::add_to_namespace(
+ *this, name,
+ make_function(
+ helper.default_implementation(), helper.policies(), helper.keywords())
+ );
+ }
+
+ template <class Fn, class Helper>
+ inline void def_default(char const*, Fn, Helper const&, mpl::bool_<false>)
+ { }
+ // }
+
+ //
+ // These two overloads discriminate between def() as applied to
+ // regular functions and def() as applied to the result of
+ // BOOST_PYTHON_FUNCTION_OVERLOADS(). The final argument is used to
+ // discriminate.
+ //
+ // @group def_maybe_overloads {
+ template <class OverloadsT, class SigT>
+ void def_maybe_overloads(
+ char const* name
+ , SigT sig
+ , OverloadsT const& overloads
+ , detail::overloads_base const*)
+
+ {
+ // convert sig to a type_list (see detail::get_signature in signature.hpp)
+ // before calling detail::define_with_defaults.
+ detail::define_with_defaults(
+ name, overloads, *this, detail::get_signature(sig));
+ }
+
+ template <class Fn, class A1>
+ void def_maybe_overloads(
+ char const* name
+ , Fn fn
+ , A1 const& a1
+ , ...)
+ {
+ this->def_impl(
+ detail::unwrap_wrapper((W*)0)
+ , name
+ , fn
+ , detail::def_helper<A1>(a1)
+ , &fn
+ );
+
+ }
+ // }
+};
+
+
+//
+// implementations
+//
+
+template <class W, class X1, class X2, class X3>
+inline class_<W,X1,X2,X3>::class_(char const* name, char const* doc)
+ : base(name, id_vector::size, id_vector().ids, doc)
+{
+ this->initialize(init<>());
+// select_holder::assert_default_constructible();
+}
+
+template <class W, class X1, class X2, class X3>
+inline class_<W,X1,X2,X3>::class_(char const* name, no_init_t)
+ : base(name, id_vector::size, id_vector().ids)
+{
+ this->initialize(no_init);
+}
+
+template <class W, class X1, class X2, class X3>
+inline class_<W,X1,X2,X3>::class_(char const* name, char const* doc, no_init_t)
+ : base(name, id_vector::size, id_vector().ids, doc)
+{
+ this->initialize(no_init);
+}
+
+}} // namespace boost::python
+
+# undef BOOST_PYTHON_DATA_MEMBER_HELPER
+# undef BOOST_PYTHON_YES_DATA_MEMBER
+# undef BOOST_PYTHON_NO_DATA_MEMBER
+# undef BOOST_PYTHON_NO_MEMBER_POINTER_ORDERING
+
+#endif // CLASS_DWA200216_HPP
diff --git a/boost/boost/python/class_fwd.hpp b/boost/boost/python/class_fwd.hpp
new file mode 100644
index 00000000000..528e18a1dc5
--- /dev/null
+++ b/boost/boost/python/class_fwd.hpp
@@ -0,0 +1,24 @@
+// Copyright David Abrahams 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)
+#ifndef CLASS_FWD_DWA200222_HPP
+# define CLASS_FWD_DWA200222_HPP
+
+# include <boost/python/detail/prefix.hpp>
+# include <boost/python/detail/not_specified.hpp>
+
+namespace boost { namespace python {
+
+template <
+ class T // class being wrapped
+ // arbitrarily-ordered optional arguments. Full qualification needed for MSVC6
+ , class X1 = ::boost::python::detail::not_specified
+ , class X2 = ::boost::python::detail::not_specified
+ , class X3 = ::boost::python::detail::not_specified
+ >
+class class_;
+
+}} // namespace boost::python
+
+#endif // CLASS_FWD_DWA200222_HPP
diff --git a/boost/boost/python/converter/arg_from_python.hpp b/boost/boost/python/converter/arg_from_python.hpp
new file mode 100644
index 00000000000..e2edce7e1c5
--- /dev/null
+++ b/boost/boost/python/converter/arg_from_python.hpp
@@ -0,0 +1,336 @@
+// Copyright David Abrahams 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)
+#ifndef ARG_FROM_PYTHON_DWA2002127_HPP
+# define ARG_FROM_PYTHON_DWA2002127_HPP
+
+# include <boost/python/detail/prefix.hpp>
+# include <boost/python/converter/from_python.hpp>
+# include <boost/python/detail/indirect_traits.hpp>
+# include <boost/type_traits/transform_traits.hpp>
+# include <boost/type_traits/cv_traits.hpp>
+# include <boost/python/converter/rvalue_from_python_data.hpp>
+# include <boost/mpl/eval_if.hpp>
+# include <boost/mpl/if.hpp>
+# include <boost/mpl/identity.hpp>
+# include <boost/mpl/and.hpp>
+# include <boost/mpl/or.hpp>
+# include <boost/mpl/not.hpp>
+# include <boost/python/converter/registry.hpp>
+# include <boost/python/converter/registered.hpp>
+# include <boost/python/converter/registered_pointee.hpp>
+# include <boost/python/detail/void_ptr.hpp>
+# include <boost/python/back_reference.hpp>
+# include <boost/python/detail/referent_storage.hpp>
+# include <boost/python/converter/obj_mgr_arg_from_python.hpp>
+
+namespace boost { namespace python
+{
+ template <class T> struct arg_from_python;
+}}
+
+// This header defines Python->C++ function argument converters,
+// parametrized on the argument type.
+
+namespace boost { namespace python { namespace converter {
+
+//
+// lvalue converters
+//
+// These require that an lvalue of the type U is stored somewhere in
+// the Python object being converted.
+
+// Used when T == U*const&
+template <class T>
+struct pointer_cref_arg_from_python
+{
+ typedef T result_type;
+
+ pointer_cref_arg_from_python(PyObject*);
+ T operator()() const;
+ bool convertible() const;
+
+ private: // storage for a U*
+ // needed because not all compilers will let us declare U* as the
+ // return type of operator() -- we return U*const& instead
+ typename python::detail::referent_storage<T>::type m_result;
+};
+
+// Base class for pointer and reference converters
+struct arg_lvalue_from_python_base
+{
+ public: // member functions
+ arg_lvalue_from_python_base(void* result);
+ bool convertible() const;
+
+ protected: // member functions
+ void*const& result() const;
+
+ private: // data members
+ void* m_result;
+};
+
+// Used when T == U*
+template <class T>
+struct pointer_arg_from_python : arg_lvalue_from_python_base
+{
+ typedef T result_type;
+
+ pointer_arg_from_python(PyObject*);
+ T operator()() const;
+};
+
+// Used when T == U& and (T != V const& or T == W volatile&)
+template <class T>
+struct reference_arg_from_python : arg_lvalue_from_python_base
+{
+ typedef T result_type;
+
+ reference_arg_from_python(PyObject*);
+ T operator()() const;
+};
+
+// ===================
+
+//
+// rvalue converters
+//
+// These require only that an object of type T can be created from
+// the given Python object, but not that the T object exist
+// somewhere in storage.
+//
+
+// Used when T is a plain value (non-pointer, non-reference) type or
+// a (non-volatile) const reference to a plain value type.
+template <class T>
+struct arg_rvalue_from_python
+{
+ typedef typename boost::add_reference<
+ T
+ // We can't add_const here, or it would be impossible to pass
+ // auto_ptr<U> args from Python to C++
+ >::type result_type;
+
+ arg_rvalue_from_python(PyObject*);
+ bool convertible() const;
+
+# if BOOST_MSVC < 1301 || _MSC_FULL_VER > 13102196
+ typename arg_rvalue_from_python<T>::
+# endif
+ result_type operator()();
+
+ private:
+ rvalue_from_python_data<result_type> m_data;
+ PyObject* m_source;
+};
+
+
+// ==================
+
+// Converts to a (PyObject*,T) bundle, for when you need a reference
+// back to the Python object
+template <class T>
+struct back_reference_arg_from_python
+ : boost::python::arg_from_python<typename T::type>
+{
+ typedef T result_type;
+
+ back_reference_arg_from_python(PyObject*);
+ T operator()();
+ private:
+ typedef boost::python::arg_from_python<typename T::type> base;
+ PyObject* m_source;
+};
+
+
+// ==================
+
+template <class C, class T, class F>
+struct if_2
+{
+ typedef typename mpl::eval_if<C, mpl::identity<T>, F>::type type;
+};
+
+// This metafunction selects the appropriate arg_from_python converter
+// type for an argument of type T.
+template <class T>
+struct select_arg_from_python
+{
+ typedef typename if_2<
+ is_object_manager<T>
+ , object_manager_value_arg_from_python<T>
+ , if_2<
+ is_reference_to_object_manager<T>
+ , object_manager_ref_arg_from_python<T>
+ , if_2<
+ is_pointer<T>
+ , pointer_arg_from_python<T>
+ , if_2<
+ mpl::and_<
+ indirect_traits::is_reference_to_pointer<T>
+ , indirect_traits::is_reference_to_const<T>
+ , mpl::not_<indirect_traits::is_reference_to_volatile<T> >
+ >
+ , pointer_cref_arg_from_python<T>
+ , if_2<
+ mpl::or_<
+ indirect_traits::is_reference_to_non_const<T>
+ , indirect_traits::is_reference_to_volatile<T>
+ >
+ , reference_arg_from_python<T>
+ , mpl::if_<
+ boost::python::is_back_reference<T>
+ , back_reference_arg_from_python<T>
+ , arg_rvalue_from_python<T>
+ >
+ >
+ >
+ >
+ >
+ >::type type;
+};
+
+// ==================
+
+//
+// implementations
+//
+
+// arg_lvalue_from_python_base
+//
+inline arg_lvalue_from_python_base::arg_lvalue_from_python_base(void* result)
+ : m_result(result)
+{
+}
+
+inline bool arg_lvalue_from_python_base::convertible() const
+{
+ return m_result != 0;
+}
+
+inline void*const& arg_lvalue_from_python_base::result() const
+{
+ return m_result;
+}
+
+// pointer_cref_arg_from_python
+//
+namespace detail
+{
+ // null_ptr_reference -- a function returning a reference to a null
+ // pointer of type U. Needed so that extractors for T*const& can
+ // convert Python's None.
+ template <class T>
+ struct null_ptr_owner
+ {
+ static T value;
+ };
+ template <class T> T null_ptr_owner<T>::value = 0;
+
+ template <class U>
+ inline U& null_ptr_reference(U&(*)())
+ {
+ return null_ptr_owner<U>::value;
+ }
+}
+
+template <class T>
+inline pointer_cref_arg_from_python<T>::pointer_cref_arg_from_python(PyObject* p)
+{
+ // T == U*const&: store a U* in the m_result storage. Nonzero
+ // indicates success. If find returns nonzero, it's a pointer to
+ // a U object.
+ python::detail::write_void_ptr_reference(
+ m_result.bytes
+ , p == Py_None ? p : converter::get_lvalue_from_python(p, registered_pointee<T>::converters)
+ , (T(*)())0);
+}
+
+template <class T>
+inline bool pointer_cref_arg_from_python<T>::convertible() const
+{
+ return python::detail::void_ptr_to_reference(m_result.bytes, (T(*)())0) != 0;
+}
+template <class T>
+inline T pointer_cref_arg_from_python<T>::operator()() const
+{
+ return (*(void**)m_result.bytes == Py_None) // None ==> 0
+ ? detail::null_ptr_reference((T(*)())0)
+ // Otherwise, return a U*const& to the m_result storage.
+ : python::detail::void_ptr_to_reference(m_result.bytes, (T(*)())0);
+}
+
+// pointer_arg_from_python
+//
+template <class T>
+inline pointer_arg_from_python<T>::pointer_arg_from_python(PyObject* p)
+ : arg_lvalue_from_python_base(
+ p == Py_None ? p : converter::get_lvalue_from_python(p, registered_pointee<T>::converters))
+{
+}
+
+template <class T>
+inline T pointer_arg_from_python<T>::operator()() const
+{
+ return (result() == Py_None) ? 0 : T(result());
+}
+
+// reference_arg_from_python
+//
+template <class T>
+inline reference_arg_from_python<T>::reference_arg_from_python(PyObject* p)
+ : arg_lvalue_from_python_base(converter::get_lvalue_from_python(p,registered<T>::converters))
+{
+}
+
+template <class T>
+inline T reference_arg_from_python<T>::operator()() const
+{
+ return python::detail::void_ptr_to_reference(result(), (T(*)())0);
+}
+
+
+// arg_rvalue_from_python
+//
+template <class T>
+inline arg_rvalue_from_python<T>::arg_rvalue_from_python(PyObject* obj)
+ : m_data(converter::rvalue_from_python_stage1(obj, registered<T>::converters))
+ , m_source(obj)
+{
+}
+
+template <class T>
+inline bool arg_rvalue_from_python<T>::convertible() const
+{
+ return m_data.stage1.convertible != 0;
+}
+
+template <class T>
+inline typename arg_rvalue_from_python<T>::result_type
+arg_rvalue_from_python<T>::operator()()
+{
+ if (m_data.stage1.construct != 0)
+ m_data.stage1.construct(m_source, &m_data.stage1);
+
+ return python::detail::void_ptr_to_reference(m_data.stage1.convertible, (result_type(*)())0);
+}
+
+// back_reference_arg_from_python
+//
+template <class T>
+back_reference_arg_from_python<T>::back_reference_arg_from_python(PyObject* x)
+ : base(x), m_source(x)
+{
+}
+
+template <class T>
+inline T
+back_reference_arg_from_python<T>::operator()()
+{
+ return T(m_source, base::operator()());
+}
+
+}}} // namespace boost::python::converter
+
+#endif // ARG_FROM_PYTHON_DWA2002127_HPP
diff --git a/boost/boost/python/converter/arg_to_python.hpp b/boost/boost/python/converter/arg_to_python.hpp
new file mode 100644
index 00000000000..3a19ec43957
--- /dev/null
+++ b/boost/boost/python/converter/arg_to_python.hpp
@@ -0,0 +1,261 @@
+// Copyright David Abrahams 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)
+#ifndef ARG_TO_PYTHON_DWA200265_HPP
+# define ARG_TO_PYTHON_DWA200265_HPP
+
+# include <boost/python/ptr.hpp>
+# include <boost/python/tag.hpp>
+# include <boost/python/to_python_indirect.hpp>
+
+# include <boost/python/converter/registered.hpp>
+# include <boost/python/converter/registered_pointee.hpp>
+# include <boost/python/converter/arg_to_python_base.hpp>
+# include <boost/python/converter/shared_ptr_to_python.hpp>
+// Bring in specializations
+# include <boost/python/converter/builtin_converters.hpp>
+
+# include <boost/python/object/function_handle.hpp>
+
+# include <boost/python/base_type_traits.hpp>
+
+# include <boost/python/detail/indirect_traits.hpp>
+# include <boost/python/detail/convertible.hpp>
+# include <boost/python/detail/string_literal.hpp>
+# include <boost/python/detail/value_is_shared_ptr.hpp>
+
+# include <boost/type_traits/cv_traits.hpp>
+# include <boost/type_traits/composite_traits.hpp>
+# include <boost/type_traits/function_traits.hpp>
+
+
+# include <boost/mpl/or.hpp>
+
+namespace boost { namespace python { namespace converter {
+
+template <class T> struct is_object_manager;
+
+namespace detail
+{
+ template <class T>
+ struct function_arg_to_python : handle<>
+ {
+ function_arg_to_python(T const& x);
+ };
+
+ template <class T>
+ struct reference_arg_to_python : handle<>
+ {
+ reference_arg_to_python(T& x);
+ private:
+ static PyObject* get_object(T& x);
+ };
+
+ template <class T>
+ struct shared_ptr_arg_to_python : handle<>
+ {
+ shared_ptr_arg_to_python(T const& x);
+ private:
+ static PyObject* get_object(T& x);
+ };
+
+ template <class T>
+ struct value_arg_to_python : arg_to_python_base
+ {
+ // Throw an exception if the conversion can't succeed
+ value_arg_to_python(T const&);
+ };
+
+ template <class Ptr>
+ struct pointer_deep_arg_to_python : arg_to_python_base
+ {
+ // Throw an exception if the conversion can't succeed
+ pointer_deep_arg_to_python(Ptr);
+ };
+
+ template <class Ptr>
+ struct pointer_shallow_arg_to_python : handle<>
+ {
+ // Throw an exception if the conversion can't succeed
+ pointer_shallow_arg_to_python(Ptr);
+ private:
+ static PyObject* get_object(Ptr p);
+ };
+
+ // Convert types that manage a Python object to_python
+ template <class T>
+ struct object_manager_arg_to_python
+ {
+ object_manager_arg_to_python(T const& x) : m_src(x) {}
+
+ PyObject* get() const
+ {
+ return python::upcast<PyObject>(get_managed_object(m_src, tag));
+ }
+
+ private:
+ T const& m_src;
+ };
+
+ template <class T>
+ struct select_arg_to_python
+ {
+ typedef typename unwrap_reference<T>::type unwrapped_referent;
+ typedef typename unwrap_pointer<T>::type unwrapped_ptr;
+
+ typedef typename mpl::if_<
+ // Special handling for char const[N]; interpret them as char
+ // const* for the sake of conversion
+ python::detail::is_string_literal<T const>
+ , arg_to_python<char const*>
+
+ , typename mpl::if_<
+ python::detail::value_is_shared_ptr<T>
+ , shared_ptr_arg_to_python<T>
+
+ , typename mpl::if_<
+ mpl::or_<
+ is_function<T>
+ , indirect_traits::is_pointer_to_function<T>
+ , is_member_function_pointer<T>
+ >
+ , function_arg_to_python<T>
+
+ , typename mpl::if_<
+ is_object_manager<T>
+ , object_manager_arg_to_python<T>
+
+ , typename mpl::if_<
+ is_pointer<T>
+ , pointer_deep_arg_to_python<T>
+
+ , typename mpl::if_<
+ is_pointer_wrapper<T>
+ , pointer_shallow_arg_to_python<unwrapped_ptr>
+
+ , typename mpl::if_<
+ is_reference_wrapper<T>
+ , reference_arg_to_python<unwrapped_referent>
+ , value_arg_to_python<T>
+ >::type
+ >::type
+ >::type
+ >::type
+ >::type
+ >::type
+ >::type
+
+ type;
+ };
+}
+
+template <class T>
+struct arg_to_python
+ : detail::select_arg_to_python<T>::type
+{
+ typedef typename detail::select_arg_to_python<T>::type base;
+ public: // member functions
+ // Throw an exception if the conversion can't succeed
+ arg_to_python(T const& x);
+};
+
+//
+// implementations
+//
+namespace detail
+{
+ // reject_raw_object_ptr -- cause a compile-time error if the user
+ // should pass a raw Python object pointer
+ using python::detail::yes_convertible;
+ using python::detail::no_convertible;
+ using python::detail::unspecialized;
+
+ template <class T> struct cannot_convert_raw_PyObject;
+
+ template <class T, class Convertibility>
+ struct reject_raw_object_helper
+ {
+ static void error(Convertibility)
+ {
+ cannot_convert_raw_PyObject<T*>::to_python_use_handle_instead();
+ }
+ static void error(...) {}
+ };
+
+ template <class T>
+ inline void reject_raw_object_ptr(T*)
+ {
+ reject_raw_object_helper<T,yes_convertible>::error(
+ python::detail::convertible<PyObject const volatile*>::check((T*)0));
+
+ typedef typename remove_cv<T>::type value_type;
+
+ reject_raw_object_helper<T,no_convertible>::error(
+ python::detail::convertible<unspecialized*>::check(
+ (base_type_traits<value_type>*)0
+ ));
+ }
+ // ---------
+
+ template <class T>
+ inline function_arg_to_python<T>::function_arg_to_python(T const& x)
+ : handle<>(python::objects::make_function_handle(x))
+ {
+ }
+
+ template <class T>
+ inline value_arg_to_python<T>::value_arg_to_python(T const& x)
+ : arg_to_python_base(&x, registered<T>::converters)
+ {
+ }
+
+ template <class Ptr>
+ inline pointer_deep_arg_to_python<Ptr>::pointer_deep_arg_to_python(Ptr x)
+ : arg_to_python_base(x, registered_pointee<Ptr>::converters)
+ {
+ detail::reject_raw_object_ptr((Ptr)0);
+ }
+
+ template <class T>
+ inline PyObject* reference_arg_to_python<T>::get_object(T& x)
+ {
+ to_python_indirect<T&,python::detail::make_reference_holder> convert;
+ return convert(x);
+ }
+
+ template <class T>
+ inline reference_arg_to_python<T>::reference_arg_to_python(T& x)
+ : handle<>(reference_arg_to_python<T>::get_object(x))
+ {
+ }
+
+ template <class T>
+ inline shared_ptr_arg_to_python<T>::shared_ptr_arg_to_python(T const& x)
+ : handle<>(shared_ptr_to_python(x))
+ {
+ }
+
+ template <class Ptr>
+ inline pointer_shallow_arg_to_python<Ptr>::pointer_shallow_arg_to_python(Ptr x)
+ : handle<>(pointer_shallow_arg_to_python<Ptr>::get_object(x))
+ {
+ detail::reject_raw_object_ptr((Ptr)0);
+ }
+
+ template <class Ptr>
+ inline PyObject* pointer_shallow_arg_to_python<Ptr>::get_object(Ptr x)
+ {
+ to_python_indirect<Ptr,python::detail::make_reference_holder> convert;
+ return convert(x);
+ }
+}
+
+template <class T>
+inline arg_to_python<T>::arg_to_python(T const& x)
+ : base(x)
+{}
+
+}}} // namespace boost::python::converter
+
+#endif // ARG_TO_PYTHON_DWA200265_HPP
diff --git a/boost/boost/python/converter/arg_to_python_base.hpp b/boost/boost/python/converter/arg_to_python_base.hpp
new file mode 100644
index 00000000000..d85b302e487
--- /dev/null
+++ b/boost/boost/python/converter/arg_to_python_base.hpp
@@ -0,0 +1,32 @@
+// Copyright David Abrahams 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)
+#ifndef ARG_TO_PYTHON_BASE_DWA200237_HPP
+# define ARG_TO_PYTHON_BASE_DWA200237_HPP
+# include <boost/python/handle.hpp>
+
+namespace boost { namespace python { namespace converter {
+
+struct registration;
+
+namespace detail
+{
+ struct BOOST_PYTHON_DECL arg_to_python_base
+# if !defined(BOOST_MSVC) || BOOST_MSVC <= 1300 || _MSC_FULL_VER > 13102179
+ : handle<>
+# endif
+ {
+ arg_to_python_base(void const volatile* source, registration const&);
+# if defined(BOOST_MSVC) && BOOST_MSVC > 1300 && _MSC_FULL_VER <= 13102179
+ PyObject* get() const { return m_ptr.get(); }
+ PyObject* release() { return m_ptr.release(); }
+ private:
+ handle<> m_ptr;
+# endif
+ };
+}
+
+}}} // namespace boost::python::converter
+
+#endif // ARG_TO_PYTHON_BASE_DWA200237_HPP
diff --git a/boost/boost/python/converter/as_to_python_function.hpp b/boost/boost/python/converter/as_to_python_function.hpp
new file mode 100644
index 00000000000..b343b4dba1a
--- /dev/null
+++ b/boost/boost/python/converter/as_to_python_function.hpp
@@ -0,0 +1,46 @@
+// Copyright David Abrahams 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)
+#ifndef AS_TO_PYTHON_FUNCTION_DWA2002121_HPP
+# define AS_TO_PYTHON_FUNCTION_DWA2002121_HPP
+# include <boost/python/converter/to_python_function_type.hpp>
+
+namespace boost { namespace python { namespace converter {
+
+// Given a typesafe to_python conversion function, produces a
+// to_python_function_t which can be registered in the usual way.
+template <class T, class ToPython>
+struct as_to_python_function
+{
+ // Assertion functions used to prevent wrapping of converters
+ // which take non-const reference parameters. The T* argument in
+ // the first overload ensures it isn't used in case T is a
+ // reference.
+ template <class U>
+ static void convert_function_must_take_value_or_const_reference(U(*)(T), int, T* = 0) {}
+ template <class U>
+ static void convert_function_must_take_value_or_const_reference(U(*)(T const&), long ...) {}
+
+ static PyObject* convert(void const* x)
+ {
+ convert_function_must_take_value_or_const_reference(&ToPython::convert, 1L);
+
+ // Yes, the const_cast below opens a hole in const-correctness,
+ // but it's needed to convert auto_ptr<U> to python.
+ //
+ // How big a hole is it? It allows ToPython::convert() to be
+ // a function which modifies its argument. The upshot is that
+ // client converters applied to const objects may invoke
+ // undefined behavior. The damage, however, is limited by the
+ // use of the assertion function. Thus, the only way this can
+ // modify its argument is if T is an auto_ptr-like type. There
+ // is still a const-correctness hole w.r.t. auto_ptr<U> const,
+ // but c'est la vie.
+ return ToPython::convert(*const_cast<T*>(static_cast<T const*>(x)));
+ }
+};
+
+}}} // namespace boost::python::converter
+
+#endif // AS_TO_PYTHON_FUNCTION_DWA2002121_HPP
diff --git a/boost/boost/python/converter/builtin_converters.hpp b/boost/boost/python/converter/builtin_converters.hpp
new file mode 100644
index 00000000000..dddb154c30d
--- /dev/null
+++ b/boost/boost/python/converter/builtin_converters.hpp
@@ -0,0 +1,145 @@
+// Copyright David Abrahams 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)
+#ifndef BUILTIN_CONVERTERS_DWA2002124_HPP
+# define BUILTIN_CONVERTERS_DWA2002124_HPP
+# include <boost/python/detail/prefix.hpp>
+# include <boost/python/detail/none.hpp>
+# include <boost/python/handle.hpp>
+# include <boost/python/ssize_t.hpp>
+# include <boost/implicit_cast.hpp>
+# include <string>
+# include <complex>
+# include <boost/limits.hpp>
+
+// Since all we can use to decide how to convert an object to_python
+// is its C++ type, there can be only one such converter for each
+// type. Therefore, for built-in conversions we can bypass registry
+// lookups using explicit specializations of arg_to_python and
+// result_to_python.
+
+namespace boost { namespace python {
+
+namespace converter
+{
+ template <class T> struct arg_to_python;
+ BOOST_PYTHON_DECL PyObject* do_return_to_python(char);
+ BOOST_PYTHON_DECL PyObject* do_return_to_python(char const*);
+ BOOST_PYTHON_DECL PyObject* do_return_to_python(PyObject*);
+ BOOST_PYTHON_DECL PyObject* do_arg_to_python(PyObject*);
+}
+
+// Provide specializations of to_python_value
+template <class T> struct to_python_value;
+
+namespace detail
+{
+ // Since there's no registry lookup, always report the existence of
+ // a converter.
+ struct builtin_to_python
+ {
+ // This information helps make_getter() decide whether to try to
+ // return an internal reference or not. I don't like it much,
+ // but it will have to serve for now.
+ BOOST_STATIC_CONSTANT(bool, uses_registry = false);
+ };
+}
+
+// Use expr to create the PyObject corresponding to x
+# define BOOST_PYTHON_RETURN_TO_PYTHON_BY_VALUE(T, expr) \
+ template <> struct to_python_value<T&> \
+ : detail::builtin_to_python \
+ { \
+ inline PyObject* operator()(T const& x) const \
+ { \
+ return (expr); \
+ } \
+ }; \
+ template <> struct to_python_value<T const&> \
+ : detail::builtin_to_python \
+ { \
+ inline PyObject* operator()(T const& x) const \
+ { \
+ return (expr); \
+ } \
+ };
+
+# define BOOST_PYTHON_ARG_TO_PYTHON_BY_VALUE(T, expr) \
+ namespace converter \
+ { \
+ template <> struct arg_to_python< T > \
+ : handle<> \
+ { \
+ arg_to_python(T const& x) \
+ : python::handle<>(expr) {} \
+ }; \
+ }
+
+// Specialize argument and return value converters for T using expr
+# define BOOST_PYTHON_TO_PYTHON_BY_VALUE(T, expr) \
+ BOOST_PYTHON_RETURN_TO_PYTHON_BY_VALUE(T,expr) \
+ BOOST_PYTHON_ARG_TO_PYTHON_BY_VALUE(T,expr)
+
+// Specialize converters for signed and unsigned T to Python Int
+# define BOOST_PYTHON_TO_INT(T) \
+ BOOST_PYTHON_TO_PYTHON_BY_VALUE(signed T, ::PyInt_FromLong(x)) \
+ BOOST_PYTHON_TO_PYTHON_BY_VALUE( \
+ unsigned T \
+ , static_cast<unsigned long>(x) > static_cast<unsigned long>( \
+ (std::numeric_limits<long>::max)()) \
+ ? ::PyLong_FromUnsignedLong(x) \
+ : ::PyInt_FromLong(x))
+
+// Bool is not signed.
+#if PY_VERSION_HEX >= 0x02030000
+BOOST_PYTHON_TO_PYTHON_BY_VALUE(bool, ::PyBool_FromLong(x))
+#else
+BOOST_PYTHON_TO_PYTHON_BY_VALUE(bool, ::PyInt_FromLong(x))
+#endif
+
+// note: handles signed char and unsigned char, but not char (see below)
+BOOST_PYTHON_TO_INT(char)
+
+BOOST_PYTHON_TO_INT(short)
+BOOST_PYTHON_TO_INT(int)
+BOOST_PYTHON_TO_INT(long)
+
+// using Python's macro instead of Boost's - we don't seem to get the
+// config right all the time.
+# ifdef HAVE_LONG_LONG
+BOOST_PYTHON_TO_PYTHON_BY_VALUE(signed BOOST_PYTHON_LONG_LONG, ::PyLong_FromLongLong(x))
+BOOST_PYTHON_TO_PYTHON_BY_VALUE(unsigned BOOST_PYTHON_LONG_LONG, ::PyLong_FromUnsignedLongLong(x))
+# endif
+
+# undef BOOST_TO_PYTHON_INT
+
+BOOST_PYTHON_TO_PYTHON_BY_VALUE(char, converter::do_return_to_python(x))
+BOOST_PYTHON_TO_PYTHON_BY_VALUE(char const*, converter::do_return_to_python(x))
+BOOST_PYTHON_TO_PYTHON_BY_VALUE(std::string, ::PyString_FromStringAndSize(x.data(),implicit_cast<ssize_t>(x.size())))
+#if defined(Py_USING_UNICODE) && !defined(BOOST_NO_STD_WSTRING)
+BOOST_PYTHON_TO_PYTHON_BY_VALUE(std::wstring, ::PyUnicode_FromWideChar(x.data(),implicit_cast<ssize_t>(x.size())))
+# endif
+BOOST_PYTHON_TO_PYTHON_BY_VALUE(float, ::PyFloat_FromDouble(x))
+BOOST_PYTHON_TO_PYTHON_BY_VALUE(double, ::PyFloat_FromDouble(x))
+BOOST_PYTHON_TO_PYTHON_BY_VALUE(long double, ::PyFloat_FromDouble(x))
+BOOST_PYTHON_RETURN_TO_PYTHON_BY_VALUE(PyObject*, converter::do_return_to_python(x))
+BOOST_PYTHON_TO_PYTHON_BY_VALUE(std::complex<float>, ::PyComplex_FromDoubles(x.real(), x.imag()))
+BOOST_PYTHON_TO_PYTHON_BY_VALUE(std::complex<double>, ::PyComplex_FromDoubles(x.real(), x.imag()))
+BOOST_PYTHON_TO_PYTHON_BY_VALUE(std::complex<long double>, ::PyComplex_FromDoubles(x.real(), x.imag()))
+
+# undef BOOST_PYTHON_RETURN_TO_PYTHON_BY_VALUE
+# undef BOOST_PYTHON_ARG_TO_PYTHON_BY_VALUE
+# undef BOOST_PYTHON_TO_PYTHON_BY_VALUE
+# undef BOOST_PYTHON_TO_INT
+
+namespace converter
+{
+
+ void initialize_builtin_converters();
+
+}
+
+}} // namespace boost::python::converter
+
+#endif // BUILTIN_CONVERTERS_DWA2002124_HPP
diff --git a/boost/boost/python/converter/constructor_function.hpp b/boost/boost/python/converter/constructor_function.hpp
new file mode 100644
index 00000000000..814aa7d7632
--- /dev/null
+++ b/boost/boost/python/converter/constructor_function.hpp
@@ -0,0 +1,17 @@
+// Copyright David Abrahams 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)
+#ifndef CONSTRUCTOR_FUNCTION_DWA200278_HPP
+# define CONSTRUCTOR_FUNCTION_DWA200278_HPP
+
+namespace boost { namespace python { namespace converter {
+
+// Declares the type of functions used to construct C++ objects for
+// rvalue from_python conversions.
+struct rvalue_from_python_stage1_data;
+typedef void (*constructor_function)(PyObject* source, rvalue_from_python_stage1_data*);
+
+}}} // namespace boost::python::converter
+
+#endif // CONSTRUCTOR_FUNCTION_DWA200278_HPP
diff --git a/boost/boost/python/converter/context_result_converter.hpp b/boost/boost/python/converter/context_result_converter.hpp
new file mode 100644
index 00000000000..beb7e9f0980
--- /dev/null
+++ b/boost/boost/python/converter/context_result_converter.hpp
@@ -0,0 +1,17 @@
+// Copyright David Abrahams 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)
+#ifndef CONTEXT_RESULT_CONVERTER_DWA2003917_HPP
+# define CONTEXT_RESULT_CONVERTER_DWA2003917_HPP
+
+namespace boost { namespace python { namespace converter {
+
+// A ResultConverter base class used to indicate that this result
+// converter should be constructed with the original Python argument
+// list.
+struct context_result_converter {};
+
+}}} // namespace boost::python::converter
+
+#endif // CONTEXT_RESULT_CONVERTER_DWA2003917_HPP
diff --git a/boost/boost/python/converter/convertible_function.hpp b/boost/boost/python/converter/convertible_function.hpp
new file mode 100644
index 00000000000..4b29fbb00b4
--- /dev/null
+++ b/boost/boost/python/converter/convertible_function.hpp
@@ -0,0 +1,14 @@
+// Copyright David Abrahams 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)
+#ifndef CONVERTIBLE_FUNCTION_DWA200278_HPP
+# define CONVERTIBLE_FUNCTION_DWA200278_HPP
+
+namespace boost { namespace python { namespace converter {
+
+typedef void* (*convertible_function)(PyObject*);
+
+}}} // namespace boost::python::converter
+
+#endif // CONVERTIBLE_FUNCTION_DWA200278_HPP
diff --git a/boost/boost/python/converter/from_python.hpp b/boost/boost/python/converter/from_python.hpp
new file mode 100644
index 00000000000..b2f24b3519d
--- /dev/null
+++ b/boost/boost/python/converter/from_python.hpp
@@ -0,0 +1,41 @@
+// Copyright David Abrahams 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)
+#ifndef FIND_FROM_PYTHON_DWA2002223_HPP
+# define FIND_FROM_PYTHON_DWA2002223_HPP
+
+# include <boost/python/detail/prefix.hpp>
+# include <boost/python/converter/rvalue_from_python_data.hpp>
+
+namespace boost { namespace python { namespace converter {
+
+struct registration;
+
+
+BOOST_PYTHON_DECL void* get_lvalue_from_python(
+ PyObject* source, registration const&);
+
+BOOST_PYTHON_DECL bool implicit_rvalue_convertible_from_python(
+ PyObject* source, registration const&);
+
+BOOST_PYTHON_DECL rvalue_from_python_stage1_data rvalue_from_python_stage1(
+ PyObject* source, registration const&);
+
+BOOST_PYTHON_DECL void* rvalue_from_python_stage2(
+ PyObject* source, rvalue_from_python_stage1_data&, registration const&);
+
+BOOST_PYTHON_DECL void* rvalue_result_from_python(
+ PyObject*, rvalue_from_python_stage1_data&);
+
+BOOST_PYTHON_DECL void* reference_result_from_python(PyObject*, registration const&);
+BOOST_PYTHON_DECL void* pointer_result_from_python(PyObject*, registration const&);
+
+BOOST_PYTHON_DECL void void_result_from_python(PyObject*);
+
+BOOST_PYTHON_DECL void throw_no_pointer_from_python(PyObject*, registration const&);
+BOOST_PYTHON_DECL void throw_no_reference_from_python(PyObject*, registration const&);
+
+}}} // namespace boost::python::converter
+
+#endif // FIND_FROM_PYTHON_DWA2002223_HPP
diff --git a/boost/boost/python/converter/implicit.hpp b/boost/boost/python/converter/implicit.hpp
new file mode 100644
index 00000000000..cf5d8fa633a
--- /dev/null
+++ b/boost/boost/python/converter/implicit.hpp
@@ -0,0 +1,46 @@
+// Copyright David Abrahams 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)
+#ifndef IMPLICIT_DWA2002326_HPP
+# define IMPLICIT_DWA2002326_HPP
+
+# include <boost/python/converter/rvalue_from_python_data.hpp>
+# include <boost/python/converter/registrations.hpp>
+# include <boost/python/converter/registered.hpp>
+
+# include <boost/python/extract.hpp>
+
+namespace boost { namespace python { namespace converter {
+
+template <class Source, class Target>
+struct implicit
+{
+ static void* convertible(PyObject* obj)
+ {
+ // Find a converter which can produce a Source instance from
+ // obj. The user has told us that Source can be converted to
+ // Target, and instantiating construct() below, ensures that
+ // at compile-time.
+ return implicit_rvalue_convertible_from_python(obj, registered<Source>::converters)
+ ? obj : 0;
+ }
+
+ static void construct(PyObject* obj, rvalue_from_python_stage1_data* data)
+ {
+ void* storage = ((rvalue_from_python_storage<Target>*)data)->storage.bytes;
+
+ arg_from_python<Source> get_source(obj);
+ bool convertible = get_source.convertible();
+ BOOST_ASSERT(convertible);
+
+ new (storage) Target(get_source());
+
+ // record successful construction
+ data->convertible = storage;
+ }
+};
+
+}}} // namespace boost::python::converter
+
+#endif // IMPLICIT_DWA2002326_HPP
diff --git a/boost/boost/python/converter/obj_mgr_arg_from_python.hpp b/boost/boost/python/converter/obj_mgr_arg_from_python.hpp
new file mode 100644
index 00000000000..cd4e1e0ea81
--- /dev/null
+++ b/boost/boost/python/converter/obj_mgr_arg_from_python.hpp
@@ -0,0 +1,121 @@
+// Copyright David Abrahams 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)
+#ifndef OBJ_MGR_ARG_FROM_PYTHON_DWA2002628_HPP
+# define OBJ_MGR_ARG_FROM_PYTHON_DWA2002628_HPP
+
+# include <boost/python/detail/prefix.hpp>
+# include <boost/python/detail/referent_storage.hpp>
+# include <boost/python/detail/destroy.hpp>
+# include <boost/python/detail/construct.hpp>
+# include <boost/python/converter/object_manager.hpp>
+# include <boost/python/detail/raw_pyobject.hpp>
+# include <boost/python/tag.hpp>
+
+//
+// arg_from_python converters for Python type wrappers, to be used as
+// base classes for specializations.
+//
+namespace boost { namespace python { namespace converter {
+
+template <class T>
+struct object_manager_value_arg_from_python
+{
+ typedef T result_type;
+
+ object_manager_value_arg_from_python(PyObject*);
+ bool convertible() const;
+ T operator()() const;
+ private:
+ PyObject* m_source;
+};
+
+// Used for converting reference-to-object-manager arguments from
+// python. The process used here is a little bit odd. Upon
+// construction, we build the object manager object in the m_result
+// object, *forcing* it to accept the source Python object by casting
+// its pointer to detail::borrowed_reference. This is supposed to
+// bypass any type checking of the source object. The convertible
+// check then extracts the owned object and checks it. If the check
+// fails, nothing else in the program ever gets to touch this strange
+// "forced" object.
+template <class Ref>
+struct object_manager_ref_arg_from_python
+{
+ typedef Ref result_type;
+
+ object_manager_ref_arg_from_python(PyObject*);
+ bool convertible() const;
+ Ref operator()() const;
+ ~object_manager_ref_arg_from_python();
+ private:
+ typename python::detail::referent_storage<Ref>::type m_result;
+};
+
+//
+// implementations
+//
+
+template <class T>
+inline object_manager_value_arg_from_python<T>::object_manager_value_arg_from_python(PyObject* x)
+ : m_source(x)
+{
+}
+
+template <class T>
+inline bool object_manager_value_arg_from_python<T>::convertible() const
+{
+ return object_manager_traits<T>::check(m_source);
+}
+
+template <class T>
+inline T object_manager_value_arg_from_python<T>::operator()() const
+{
+ return T(python::detail::borrowed_reference(m_source));
+}
+
+template <class Ref>
+inline object_manager_ref_arg_from_python<Ref>::object_manager_ref_arg_from_python(PyObject* x)
+{
+# if defined(__EDG_VERSION__) && __EDG_VERSION__ <= 243
+ // needed for warning suppression
+ python::detail::borrowed_reference x_ = python::detail::borrowed_reference(x);
+ python::detail::construct_referent<Ref>(&m_result.bytes, x_);
+# else
+ python::detail::construct_referent<Ref>(&m_result.bytes, (python::detail::borrowed_reference)x);
+# endif
+}
+
+template <class Ref>
+inline object_manager_ref_arg_from_python<Ref>::~object_manager_ref_arg_from_python()
+{
+ python::detail::destroy_referent<Ref>(this->m_result.bytes);
+}
+
+namespace detail
+{
+ template <class T>
+ inline bool object_manager_ref_check(T const& x)
+ {
+ return object_manager_traits<T>::check(get_managed_object(x, tag));
+ }
+}
+
+template <class Ref>
+inline bool object_manager_ref_arg_from_python<Ref>::convertible() const
+{
+ return detail::object_manager_ref_check(
+ python::detail::void_ptr_to_reference(this->m_result.bytes, (Ref(*)())0));
+}
+
+template <class Ref>
+inline Ref object_manager_ref_arg_from_python<Ref>::operator()() const
+{
+ return python::detail::void_ptr_to_reference(
+ this->m_result.bytes, (Ref(*)())0);
+}
+
+}}} // namespace boost::python::converter
+
+#endif // OBJ_MGR_ARG_FROM_PYTHON_DWA2002628_HPP
diff --git a/boost/boost/python/converter/object_manager.hpp b/boost/boost/python/converter/object_manager.hpp
new file mode 100644
index 00000000000..84e44d475bf
--- /dev/null
+++ b/boost/boost/python/converter/object_manager.hpp
@@ -0,0 +1,230 @@
+// Copyright David Abrahams 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)
+#ifndef OBJECT_MANAGER_DWA2002614_HPP
+# define OBJECT_MANAGER_DWA2002614_HPP
+
+# include <boost/python/handle.hpp>
+# include <boost/python/cast.hpp>
+# include <boost/python/converter/pyobject_traits.hpp>
+# include <boost/type_traits/object_traits.hpp>
+# include <boost/mpl/if.hpp>
+# include <boost/python/detail/indirect_traits.hpp>
+# include <boost/mpl/bool.hpp>
+
+// Facilities for dealing with types which always manage Python
+// objects. Some examples are object, list, str, et. al. Different
+// to_python/from_python conversion rules apply here because in
+// contrast to other types which are typically embedded inside a
+// Python object, these are wrapped around a Python object. For most
+// object managers T, a C++ non-const T reference argument does not
+// imply the existence of a T lvalue embedded in the corresponding
+// Python argument, since mutating member functions on T actually only
+// modify the held Python object.
+//
+// handle<T> is an object manager, though strictly speaking it should
+// not be. In other words, even though mutating member functions of
+// hanlde<T> actually modify the handle<T> and not the T object,
+// handle<T>& arguments of wrapped functions will bind to "rvalues"
+// wrapping the actual Python argument, just as with other object
+// manager classes. Making an exception for handle<T> is simply not
+// worth the trouble.
+//
+// borrowed<T> cv* is an object manager so that we can use the general
+// to_python mechanisms to convert raw Python object pointers to
+// python, without the usual semantic problems of using raw pointers.
+
+
+// Object Manager Concept requirements:
+//
+// T is an Object Manager
+// p is a PyObject*
+// x is a T
+//
+// * object_manager_traits<T>::is_specialized == true
+//
+// * T(detail::borrowed_reference(p))
+// Manages p without checking its type
+//
+// * get_managed_object(x, boost::python::tag)
+// Convertible to PyObject*
+//
+// Additional requirements if T can be converted from_python:
+//
+// * T(object_manager_traits<T>::adopt(p))
+// steals a reference to p, or throws a TypeError exception if
+// p doesn't have an appropriate type. May assume p is non-null
+//
+// * X::check(p)
+// convertible to bool. True iff T(X::construct(p)) will not
+// throw.
+
+// Forward declarations
+//
+namespace boost { namespace python
+{
+ namespace api
+ {
+ class object;
+ }
+}}
+
+namespace boost { namespace python { namespace converter {
+
+
+// Specializations for handle<T>
+template <class T>
+struct handle_object_manager_traits
+ : pyobject_traits<typename T::element_type>
+{
+ private:
+ typedef pyobject_traits<typename T::element_type> base;
+
+ public:
+ BOOST_STATIC_CONSTANT(bool, is_specialized = true);
+
+ // Initialize with a null_ok pointer for efficiency, bypassing the
+ // null check since the source is always non-null.
+ static null_ok<typename T::element_type>* adopt(PyObject* p)
+ {
+ return python::allow_null(base::checked_downcast(p));
+ }
+};
+
+template <class T>
+struct default_object_manager_traits
+{
+ BOOST_STATIC_CONSTANT(
+ bool, is_specialized = python::detail::is_borrowed_ptr<T>::value
+ );
+};
+
+template <class T>
+struct object_manager_traits
+ : mpl::if_c<
+ is_handle<T>::value
+ , handle_object_manager_traits<T>
+ , default_object_manager_traits<T>
+ >::type
+{
+};
+
+//
+// Traits for detecting whether a type is an object manager or a
+// (cv-qualified) reference to an object manager.
+//
+
+template <class T>
+struct is_object_manager
+ : mpl::bool_<object_manager_traits<T>::is_specialized>
+{
+};
+
+# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+template <class T>
+struct is_reference_to_object_manager
+ : mpl::false_
+{
+};
+
+template <class T>
+struct is_reference_to_object_manager<T&>
+ : is_object_manager<T>
+{
+};
+
+template <class T>
+struct is_reference_to_object_manager<T const&>
+ : is_object_manager<T>
+{
+};
+
+template <class T>
+struct is_reference_to_object_manager<T volatile&>
+ : is_object_manager<T>
+{
+};
+
+template <class T>
+struct is_reference_to_object_manager<T const volatile&>
+ : is_object_manager<T>
+{
+};
+# else
+
+namespace detail
+{
+ typedef char (&yes_reference_to_object_manager)[1];
+ typedef char (&no_reference_to_object_manager)[2];
+
+ // A number of nastinesses go on here in order to work around MSVC6
+ // bugs.
+ template <class T>
+ struct is_object_manager_help
+ {
+ typedef typename mpl::if_<
+ is_object_manager<T>
+ , yes_reference_to_object_manager
+ , no_reference_to_object_manager
+ >::type type;
+
+ // If we just use the type instead of the result of calling this
+ // function, VC6 will ICE.
+ static type call();
+ };
+
+ // A set of overloads for each cv-qualification. The same argument
+ // is passed twice: the first one is used to unwind the cv*, and the
+ // second one is used to avoid relying on partial ordering for
+ // overload resolution.
+ template <class U>
+ typename is_object_manager_help<U>
+ is_object_manager_helper(U*, void*);
+
+ template <class U>
+ typename is_object_manager_help<U>
+ is_object_manager_helper(U const*, void const*);
+
+ template <class U>
+ typename is_object_manager_help<U>
+ is_object_manager_helper(U volatile*, void volatile*);
+
+ template <class U>
+ typename is_object_manager_help<U>
+ is_object_manager_helper(U const volatile*, void const volatile*);
+
+ template <class T>
+ struct is_reference_to_object_manager_nonref
+ : mpl::false_
+ {
+ };
+
+ template <class T>
+ struct is_reference_to_object_manager_ref
+ {
+ static T sample_object;
+ BOOST_STATIC_CONSTANT(
+ bool, value
+ = (sizeof(is_object_manager_helper(&sample_object, &sample_object).call())
+ == sizeof(detail::yes_reference_to_object_manager)
+ )
+ );
+ typedef mpl::bool_<value> type;
+ };
+}
+
+template <class T>
+struct is_reference_to_object_manager
+ : mpl::if_<
+ is_reference<T>
+ , detail::is_reference_to_object_manager_ref<T>
+ , detail::is_reference_to_object_manager_nonref<T>
+ >::type
+{
+};
+# endif
+
+}}} // namespace boost::python::converter
+
+#endif // OBJECT_MANAGER_DWA2002614_HPP
diff --git a/boost/boost/python/converter/pointer_type_id.hpp b/boost/boost/python/converter/pointer_type_id.hpp
new file mode 100644
index 00000000000..963f58f7172
--- /dev/null
+++ b/boost/boost/python/converter/pointer_type_id.hpp
@@ -0,0 +1,68 @@
+// Copyright David Abrahams 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)
+#ifndef POINTER_TYPE_ID_DWA2002222_HPP
+# define POINTER_TYPE_ID_DWA2002222_HPP
+
+# include <boost/python/type_id.hpp>
+# include <boost/type_traits/composite_traits.hpp>
+
+namespace boost { namespace python { namespace converter {
+
+namespace detail
+{
+ template <bool is_ref = false>
+ struct pointer_typeid_select
+ {
+ template <class T>
+ static inline type_info execute(T*(*)() = 0)
+ {
+ return type_id<T>();
+ }
+ };
+
+ template <>
+ struct pointer_typeid_select<true>
+ {
+ template <class T>
+ static inline type_info execute(T* const volatile&(*)() = 0)
+ {
+ return type_id<T>();
+ }
+
+ template <class T>
+ static inline type_info execute(T*volatile&(*)() = 0)
+ {
+ return type_id<T>();
+ }
+
+ template <class T>
+ static inline type_info execute(T*const&(*)() = 0)
+ {
+ return type_id<T>();
+ }
+
+ template <class T>
+ static inline type_info execute(T*&(*)() = 0)
+ {
+ return type_id<T>();
+ }
+ };
+}
+
+// Usage: pointer_type_id<T>()
+//
+// Returns a type_info associated with the type pointed
+// to by T, which may be a pointer or a reference to a pointer.
+template <class T>
+type_info pointer_type_id(T(*)() = 0)
+{
+ return detail::pointer_typeid_select<
+ is_reference<T>::value
+ >::execute((T(*)())0);
+}
+
+}}} // namespace boost::python::converter
+
+#endif // POINTER_TYPE_ID_DWA2002222_HPP
diff --git a/boost/boost/python/converter/pyobject_traits.hpp b/boost/boost/python/converter/pyobject_traits.hpp
new file mode 100644
index 00000000000..ce7d3fb4f5c
--- /dev/null
+++ b/boost/boost/python/converter/pyobject_traits.hpp
@@ -0,0 +1,41 @@
+// Copyright David Abrahams 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)
+#ifndef PYOBJECT_TRAITS_DWA2002720_HPP
+# define PYOBJECT_TRAITS_DWA2002720_HPP
+
+# include <boost/python/detail/prefix.hpp>
+# include <boost/python/converter/pyobject_type.hpp>
+
+namespace boost { namespace python { namespace converter {
+
+template <class> struct pyobject_traits;
+
+template <>
+struct pyobject_traits<PyObject>
+{
+ // All objects are convertible to PyObject
+ static bool check(PyObject*) { return true; }
+ static PyObject* checked_downcast(PyObject* x) { return x; }
+};
+
+//
+// Specializations
+//
+
+# define BOOST_PYTHON_BUILTIN_OBJECT_TRAITS(T) \
+ template <> struct pyobject_traits<Py##T##Object> \
+ : pyobject_type<Py##T##Object, &Py##T##_Type> {}
+
+// This is not an exhaustive list; should be expanded.
+BOOST_PYTHON_BUILTIN_OBJECT_TRAITS(Type);
+BOOST_PYTHON_BUILTIN_OBJECT_TRAITS(List);
+BOOST_PYTHON_BUILTIN_OBJECT_TRAITS(Int);
+BOOST_PYTHON_BUILTIN_OBJECT_TRAITS(Long);
+BOOST_PYTHON_BUILTIN_OBJECT_TRAITS(Dict);
+BOOST_PYTHON_BUILTIN_OBJECT_TRAITS(Tuple);
+
+}}} // namespace boost::python::converter
+
+#endif // PYOBJECT_TRAITS_DWA2002720_HPP
diff --git a/boost/boost/python/converter/pyobject_type.hpp b/boost/boost/python/converter/pyobject_type.hpp
new file mode 100644
index 00000000000..a02974cdf47
--- /dev/null
+++ b/boost/boost/python/converter/pyobject_type.hpp
@@ -0,0 +1,34 @@
+// Copyright David Abrahams 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)
+#ifndef PYOBJECT_TYPE_DWA2002720_HPP
+# define PYOBJECT_TYPE_DWA2002720_HPP
+
+# include <boost/python/cast.hpp>
+
+namespace boost { namespace python { namespace converter {
+
+BOOST_PYTHON_DECL PyObject* checked_downcast_impl(PyObject*, PyTypeObject*);
+
+// Used as a base class for specializations which need to provide
+// Python type checking capability.
+template <class Object, PyTypeObject* pytype>
+struct pyobject_type
+{
+ static bool check(PyObject* x)
+ {
+ return ::PyObject_IsInstance(x, (PyObject*)pytype);
+ }
+
+ static Object* checked_downcast(PyObject* x)
+ {
+ return python::downcast<Object>(
+ (checked_downcast_impl)(x, pytype)
+ );
+ }
+};
+
+}}} // namespace boost::python::converter
+
+#endif // PYOBJECT_TYPE_DWA2002720_HPP
diff --git a/boost/boost/python/converter/pytype_object_mgr_traits.hpp b/boost/boost/python/converter/pytype_object_mgr_traits.hpp
new file mode 100644
index 00000000000..8f5b2b76771
--- /dev/null
+++ b/boost/boost/python/converter/pytype_object_mgr_traits.hpp
@@ -0,0 +1,42 @@
+// Copyright David Abrahams 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)
+#ifndef PYTYPE_OBJECT_MANAGER_TRAITS_DWA2002716_HPP
+# define PYTYPE_OBJECT_MANAGER_TRAITS_DWA2002716_HPP
+
+# include <boost/python/detail/prefix.hpp>
+# include <boost/python/detail/raw_pyobject.hpp>
+# include <boost/python/cast.hpp>
+# include <boost/python/converter/pyobject_type.hpp>
+# include <boost/python/errors.hpp>
+
+namespace boost { namespace python { namespace converter {
+
+// Provide a forward declaration as a convenience for clients, who all
+// need it.
+template <class T> struct object_manager_traits;
+
+// Derive specializations of object_manager_traits from this class
+// when T is an object manager for a particular Python type hierarchy.
+//
+template <PyTypeObject* pytype, class T>
+struct pytype_object_manager_traits
+ : pyobject_type<T, pytype> // provides check()
+{
+ BOOST_STATIC_CONSTANT(bool, is_specialized = true);
+ static inline python::detail::new_reference adopt(PyObject*);
+};
+
+//
+// implementations
+//
+template <PyTypeObject* pytype, class T>
+inline python::detail::new_reference pytype_object_manager_traits<pytype,T>::adopt(PyObject* x)
+{
+ return python::detail::new_reference(python::pytype_check(pytype, x));
+}
+
+}}} // namespace boost::python::converter
+
+#endif // PYTYPE_OBJECT_MANAGER_TRAITS_DWA2002716_HPP
diff --git a/boost/boost/python/converter/registered.hpp b/boost/boost/python/converter/registered.hpp
new file mode 100644
index 00000000000..2404cb0ff27
--- /dev/null
+++ b/boost/boost/python/converter/registered.hpp
@@ -0,0 +1,111 @@
+// Copyright David Abrahams 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)
+#ifndef REGISTERED_DWA2002710_HPP
+# define REGISTERED_DWA2002710_HPP
+# include <boost/python/type_id.hpp>
+# include <boost/python/converter/registry.hpp>
+# include <boost/python/converter/registrations.hpp>
+# include <boost/type_traits/transform_traits.hpp>
+# include <boost/type_traits/cv_traits.hpp>
+# include <boost/type_traits/is_void.hpp>
+# include <boost/detail/workaround.hpp>
+# include <boost/python/type_id.hpp>
+# include <boost/type.hpp>
+
+namespace boost {
+
+// You'll see shared_ptr mentioned in this header because we need to
+// note which types are shared_ptrs in their registrations, to
+// implement special shared_ptr handling for rvalue conversions.
+template <class T> class shared_ptr;
+
+namespace python { namespace converter {
+
+struct registration;
+
+namespace detail
+{
+ template <class T>
+ struct registered_base
+ {
+ static registration const& converters;
+ };
+}
+
+template <class T>
+struct registered
+ : detail::registered_base<
+ typename add_reference<
+ typename add_cv<T>::type
+ >::type
+ >
+{
+};
+
+# if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
+ && !BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1310))
+// collapses a few more types to the same static instance. MSVC7.1
+// fails to strip cv-qualification from array types in typeid. For
+// some reason we can't use this collapse there or array converters
+// will not be found.
+template <class T>
+struct registered<T&>
+ : registered<T> {};
+# endif
+
+//
+// implementations
+//
+namespace detail
+{
+ inline void
+ register_shared_ptr0(...)
+ {
+ }
+
+ template <class T>
+ inline void
+ register_shared_ptr0(shared_ptr<T>*)
+ {
+ registry::lookup_shared_ptr(type_id<shared_ptr<T> >());
+ }
+
+ template <class T>
+ inline void
+ register_shared_ptr1(T const volatile*)
+ {
+ detail::register_shared_ptr0((T*)0);
+ }
+
+ template <class T>
+ inline registration const&
+ registry_lookup2(T&(*)())
+ {
+ detail::register_shared_ptr1((T*)0);
+ return registry::lookup(type_id<T&>());
+ }
+
+ template <class T>
+ inline registration const&
+ registry_lookup1(type<T>)
+ {
+ return registry_lookup2((T(*)())0);
+ }
+
+ inline registration const&
+ registry_lookup1(type<const volatile void>)
+ {
+ detail::register_shared_ptr1((void*)0);
+ return registry::lookup(type_id<void>());
+ }
+
+ template <class T>
+ registration const& registered_base<T>::converters = detail::registry_lookup1(type<T>());
+
+}
+
+}}} // namespace boost::python::converter
+
+#endif // REGISTERED_DWA2002710_HPP
diff --git a/boost/boost/python/converter/registered_pointee.hpp b/boost/boost/python/converter/registered_pointee.hpp
new file mode 100644
index 00000000000..d9e7ac75a80
--- /dev/null
+++ b/boost/boost/python/converter/registered_pointee.hpp
@@ -0,0 +1,62 @@
+// Copyright David Abrahams 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)
+#ifndef REGISTERED_POINTEE_DWA2002710_HPP
+# define REGISTERED_POINTEE_DWA2002710_HPP
+# include <boost/python/converter/registered.hpp>
+# include <boost/python/converter/pointer_type_id.hpp>
+# include <boost/python/converter/registry.hpp>
+# include <boost/type_traits/transform_traits.hpp>
+# include <boost/type_traits/cv_traits.hpp>
+
+namespace boost { namespace python { namespace converter {
+
+struct registration;
+
+# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+template <class T>
+struct registered_pointee
+ : registered<
+ typename remove_pointer<
+ typename remove_cv<
+ typename remove_reference<T>::type
+ >::type
+ >::type
+ >
+{
+};
+# else
+namespace detail
+{
+ template <class T>
+ struct registered_pointee_base
+ {
+ static registration const& converters;
+ };
+}
+
+template <class T>
+struct registered_pointee
+ : detail::registered_pointee_base<
+ typename add_reference<
+ typename add_cv<T>::type
+ >::type
+ >
+{
+};
+
+//
+// implementations
+//
+namespace detail
+{
+ template <class T>
+ registration const& registered_pointee_base<T>::converters
+ = registry::lookup(pointer_type_id<T>());
+}
+
+# endif
+}}} // namespace boost::python::converter
+
+#endif // REGISTERED_POINTEE_DWA2002710_HPP
diff --git a/boost/boost/python/converter/registrations.hpp b/boost/boost/python/converter/registrations.hpp
new file mode 100644
index 00000000000..d71401def22
--- /dev/null
+++ b/boost/boost/python/converter/registrations.hpp
@@ -0,0 +1,89 @@
+// Copyright David Abrahams 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)
+#ifndef REGISTRATIONS_DWA2002223_HPP
+# define REGISTRATIONS_DWA2002223_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+# include <boost/python/type_id.hpp>
+
+# include <boost/python/converter/convertible_function.hpp>
+# include <boost/python/converter/constructor_function.hpp>
+# include <boost/python/converter/to_python_function_type.hpp>
+
+# include <boost/detail/workaround.hpp>
+
+namespace boost { namespace python { namespace converter {
+
+struct lvalue_from_python_chain
+{
+ convertible_function convert;
+ lvalue_from_python_chain* next;
+};
+
+struct rvalue_from_python_chain
+{
+ convertible_function convertible;
+ constructor_function construct;
+ rvalue_from_python_chain* next;
+};
+
+struct BOOST_PYTHON_DECL registration
+{
+ public: // member functions
+ explicit registration(type_info target, bool is_shared_ptr = false);
+
+ // Convert the appropriately-typed data to Python
+ PyObject* to_python(void const volatile*) const;
+
+ // Return the class object, or raise an appropriate Python
+ // exception if no class has been registered.
+ PyTypeObject* get_class_object() const;
+
+ public: // data members. So sue me.
+ const python::type_info target_type;
+
+ // The chain of eligible from_python converters when an lvalue is required
+ lvalue_from_python_chain* lvalue_chain;
+
+ // The chain of eligible from_python converters when an rvalue is acceptable
+ rvalue_from_python_chain* rvalue_chain;
+
+ // The class object associated with this type
+ PyTypeObject* m_class_object;
+
+ // The unique to_python converter for the associated C++ type.
+ to_python_function_t m_to_python;
+
+ // True iff this type is a shared_ptr. Needed for special rvalue
+ // from_python handling.
+ const bool is_shared_ptr;
+
+# if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003))
+ private:
+ void operator=(registration); // This is not defined, and just keeps MWCW happy.
+# endif
+};
+
+//
+// implementations
+//
+inline registration::registration(type_info target_type, bool is_shared_ptr)
+ : target_type(target_type)
+ , lvalue_chain(0)
+ , rvalue_chain(0)
+ , m_class_object(0)
+ , m_to_python(0)
+ , is_shared_ptr(is_shared_ptr)
+{}
+
+inline bool operator<(registration const& lhs, registration const& rhs)
+{
+ return lhs.target_type < rhs.target_type;
+}
+
+}}} // namespace boost::python::converter
+
+#endif // REGISTRATIONS_DWA2002223_HPP
diff --git a/boost/boost/python/converter/registry.hpp b/boost/boost/python/converter/registry.hpp
new file mode 100644
index 00000000000..5492edf7207
--- /dev/null
+++ b/boost/boost/python/converter/registry.hpp
@@ -0,0 +1,53 @@
+// Copyright David Abrahams 2001.
+// 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 REGISTRY_DWA20011127_HPP
+# define REGISTRY_DWA20011127_HPP
+# include <boost/python/type_id.hpp>
+# include <boost/python/converter/to_python_function_type.hpp>
+# include <boost/python/converter/rvalue_from_python_data.hpp>
+# include <boost/python/converter/constructor_function.hpp>
+# include <boost/python/converter/convertible_function.hpp>
+
+namespace boost { namespace python { namespace converter {
+
+struct registration;
+
+// This namespace acts as a sort of singleton
+namespace registry
+{
+ // Get the registration corresponding to the type, creating it if necessary
+ BOOST_PYTHON_DECL registration const& lookup(type_info);
+
+ // Get the registration corresponding to the type, creating it if
+ // necessary. Use this first when the type is a shared_ptr.
+ BOOST_PYTHON_DECL registration const& lookup_shared_ptr(type_info);
+
+ // Return a pointer to the corresponding registration, if one exists
+ BOOST_PYTHON_DECL registration const* query(type_info);
+
+ BOOST_PYTHON_DECL void insert(to_python_function_t, type_info);
+
+ // Insert an lvalue from_python converter
+ BOOST_PYTHON_DECL void insert(void* (*convert)(PyObject*), type_info);
+
+ // Insert an rvalue from_python converter
+ BOOST_PYTHON_DECL void insert(
+ convertible_function
+ , constructor_function
+ , type_info
+ );
+
+ // Insert an rvalue from_python converter at the tail of the
+ // chain. Used for implicit conversions
+ BOOST_PYTHON_DECL void push_back(
+ convertible_function
+ , constructor_function
+ , type_info
+ );
+}
+
+}}} // namespace boost::python::converter
+
+#endif // REGISTRY_DWA20011127_HPP
diff --git a/boost/boost/python/converter/return_from_python.hpp b/boost/boost/python/converter/return_from_python.hpp
new file mode 100644
index 00000000000..5db97485453
--- /dev/null
+++ b/boost/boost/python/converter/return_from_python.hpp
@@ -0,0 +1,162 @@
+// Copyright David Abrahams 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)
+#ifndef RETURN_FROM_PYTHON_DWA200265_HPP
+# define RETURN_FROM_PYTHON_DWA200265_HPP
+
+# include <boost/python/converter/from_python.hpp>
+# include <boost/python/converter/rvalue_from_python_data.hpp>
+# include <boost/python/converter/registered.hpp>
+# include <boost/python/converter/registered_pointee.hpp>
+# include <boost/python/converter/object_manager.hpp>
+# include <boost/python/detail/void_ptr.hpp>
+# include <boost/python/detail/void_return.hpp>
+# include <boost/python/errors.hpp>
+# include <boost/python/handle.hpp>
+# include <boost/type_traits/has_trivial_copy.hpp>
+# include <boost/mpl/and.hpp>
+# include <boost/mpl/bool.hpp>
+
+namespace boost { namespace python { namespace converter {
+
+template <class T> struct is_object_manager;
+
+namespace detail
+{
+ template <class T>
+ struct return_pointer_from_python
+ {
+ typedef T result_type;
+ T operator()(PyObject*) const;
+ };
+
+ template <class T>
+ struct return_reference_from_python
+ {
+ typedef T result_type;
+ T operator()(PyObject*) const;
+ };
+
+ template <class T>
+ struct return_rvalue_from_python
+ {
+ typedef T result_type;
+
+ return_rvalue_from_python();
+ result_type operator()(PyObject*);
+ private:
+ rvalue_from_python_data<T> m_data;
+ };
+
+ template <class T>
+ struct return_object_manager_from_python
+ {
+ typedef T result_type;
+ result_type operator()(PyObject*) const;
+ };
+
+ template <class T>
+ struct select_return_from_python
+ {
+ BOOST_STATIC_CONSTANT(
+ bool, obj_mgr = is_object_manager<T>::value);
+
+ BOOST_STATIC_CONSTANT(
+ bool, ptr = is_pointer<T>::value);
+
+ BOOST_STATIC_CONSTANT(
+ bool, ref = is_reference<T>::value);
+
+ typedef typename mpl::if_c<
+ obj_mgr
+ , return_object_manager_from_python<T>
+ , typename mpl::if_c<
+ ptr
+ , return_pointer_from_python<T>
+ , typename mpl::if_c<
+ ref
+ , return_reference_from_python<T>
+ , return_rvalue_from_python<T>
+ >::type
+ >::type
+ >::type type;
+ };
+}
+
+template <class T>
+struct return_from_python
+ : detail::select_return_from_python<T>::type
+{
+};
+
+// Specialization as a convenience for call and call_method
+template <>
+struct return_from_python<void>
+{
+ typedef python::detail::returnable<void>::type result_type;
+
+ result_type operator()(PyObject* x) const
+ {
+ (void_result_from_python)(x);
+# ifdef BOOST_NO_VOID_RETURNS
+ return result_type();
+# endif
+ }
+};
+
+//
+// Implementations
+//
+namespace detail
+{
+ template <class T>
+ inline return_rvalue_from_python<T>::return_rvalue_from_python()
+ : m_data(
+ const_cast<registration*>(&registered<T>::converters)
+ )
+ {
+ }
+
+ template <class T>
+ inline typename return_rvalue_from_python<T>::result_type
+ return_rvalue_from_python<T>::operator()(PyObject* obj)
+ {
+ // Take possession of the source object here. If the result is in
+ // fact going to be a copy of an lvalue embedded in the object,
+ // and we take possession inside rvalue_result_from_python, it
+ // will be destroyed too early.
+ handle<> holder(obj);
+
+ return *(T*)
+ (rvalue_result_from_python)(obj, m_data.stage1);
+ }
+
+ template <class T>
+ inline T return_reference_from_python<T>::operator()(PyObject* obj) const
+ {
+ return python::detail::void_ptr_to_reference(
+ (reference_result_from_python)(obj, registered<T>::converters)
+ , (T(*)())0);
+ }
+
+ template <class T>
+ inline T return_pointer_from_python<T>::operator()(PyObject* obj) const
+ {
+ return T(
+ (pointer_result_from_python)(obj, registered_pointee<T>::converters)
+ );
+ }
+
+ template <class T>
+ inline T return_object_manager_from_python<T>::operator()(PyObject* obj) const
+ {
+ return T(
+ object_manager_traits<T>::adopt(expect_non_null(obj))
+ );
+ }
+}
+
+}}} // namespace boost::python::converter
+
+#endif // RETURN_FROM_PYTHON_DWA200265_HPP
diff --git a/boost/boost/python/converter/rvalue_from_python_data.hpp b/boost/boost/python/converter/rvalue_from_python_data.hpp
new file mode 100644
index 00000000000..7d2b3e07f20
--- /dev/null
+++ b/boost/boost/python/converter/rvalue_from_python_data.hpp
@@ -0,0 +1,140 @@
+// Copyright David Abrahams 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)
+#ifndef FROM_PYTHON_AUX_DATA_DWA2002128_HPP
+# define FROM_PYTHON_AUX_DATA_DWA2002128_HPP
+
+# include <boost/python/converter/constructor_function.hpp>
+# include <boost/python/detail/referent_storage.hpp>
+# include <boost/python/detail/destroy.hpp>
+# include <boost/static_assert.hpp>
+# include <boost/type_traits/add_reference.hpp>
+# include <boost/type_traits/add_cv.hpp>
+# include <cstddef>
+
+// Data management for potential rvalue conversions from Python to C++
+// types. When a client requests a conversion to T* or T&, we
+// generally require that an object of type T exists in the source
+// Python object, and the code here does not apply**. This implements
+// conversions which may create new temporaries of type T. The classic
+// example is a conversion which converts a Python tuple to a
+// std::vector. Since no std::vector lvalue exists in the Python
+// object -- it must be created "on-the-fly" by the converter, and
+// which must manage the lifetime of the created object.
+//
+// Note that the client is not precluded from using a registered
+// lvalue conversion to T in this case. In other words, we will
+// happily accept a Python object which /does/ contain a std::vector
+// lvalue, provided an appropriate converter is registered. So, while
+// this is an rvalue conversion from the client's point-of-view, the
+// converter registry may serve up lvalue or rvalue conversions for
+// the target type.
+//
+// ** C++ argument from_python conversions to T const& are an
+// exception to the rule for references: since in C++, const
+// references can bind to temporary rvalues, we allow rvalue
+// converters to be chosen when the target type is T const& for some
+// T.
+namespace boost { namespace python { namespace converter {
+
+// Conversions begin by filling in and returning a copy of this
+// structure. The process looks up a converter in the rvalue converter
+// registry for the target type. It calls the convertible() function
+// of each registered converter, passing the source PyObject* as an
+// argument, until a non-null result is returned. This result goes in
+// the convertible field, and the converter's construct() function is
+// stored in the construct field.
+//
+// If no appropriate converter is found, conversion fails and the
+// convertible field is null. When used in argument conversion for
+// wrapped C++ functions, it causes overload resolution to reject the
+// current function but not to fail completely. If an exception is
+// thrown, overload resolution stops and the exception propagates back
+// through the caller.
+//
+// If an lvalue converter is matched, its convertible() function is
+// expected to return a pointer to the stored T object; its
+// construct() function will be NULL. The convertible() function of
+// rvalue converters may return any non-singular pointer; the actual
+// target object will only be available once the converter's
+// construct() function is called.
+struct rvalue_from_python_stage1_data
+{
+ void* convertible;
+ constructor_function construct;
+};
+
+// Augments rvalue_from_python_stage1_data by adding storage for
+// constructing an object of remove_reference<T>::type. The
+// construct() function of rvalue converters (stored in m_construct
+// above) will cast the rvalue_from_python_stage1_data to an
+// appropriate instantiation of this template in order to access that
+// storage.
+template <class T>
+struct rvalue_from_python_storage
+{
+ rvalue_from_python_stage1_data stage1;
+
+ // Storage for the result, in case an rvalue must be constructed
+ typename python::detail::referent_storage<
+ typename add_reference<T>::type
+ >::type storage;
+};
+
+// Augments rvalue_from_python_storage<T> with a destructor. If
+// stage1.convertible == storage.bytes, it indicates that an object of
+// remove_reference<T>::type has been constructed in storage and
+// should will be destroyed in ~rvalue_from_python_data(). It is
+// crucial that successful rvalue conversions establish this equality
+// and that unsuccessful ones do not.
+template <class T>
+struct rvalue_from_python_data : rvalue_from_python_storage<T>
+{
+# if (!defined(__MWERKS__) || __MWERKS__ >= 0x3000) \
+ && (!defined(__EDG_VERSION__) || __EDG_VERSION__ >= 245) \
+ && (!defined(__DECCXX_VER) || __DECCXX_VER > 60590014) \
+ && !defined(BOOST_PYTHON_SYNOPSIS) /* Synopsis' OpenCXX has trouble parsing this */
+ // This must always be a POD struct with m_data its first member.
+ BOOST_STATIC_ASSERT(BOOST_PYTHON_OFFSETOF(rvalue_from_python_storage<T>,stage1) == 0);
+# endif
+
+ // The usual constructor
+ rvalue_from_python_data(rvalue_from_python_stage1_data const&);
+
+ // This constructor just sets m_convertible -- used by
+ // implicitly_convertible<> to perform the final step of the
+ // conversion, where the construct() function is already known.
+ rvalue_from_python_data(void* convertible);
+
+ // Destroys any object constructed in the storage.
+ ~rvalue_from_python_data();
+ private:
+ typedef typename add_reference<typename add_cv<T>::type>::type ref_type;
+};
+
+//
+// Implementataions
+//
+template <class T>
+inline rvalue_from_python_data<T>::rvalue_from_python_data(rvalue_from_python_stage1_data const& stage1)
+{
+ this->stage1 = stage1;
+}
+
+template <class T>
+inline rvalue_from_python_data<T>::rvalue_from_python_data(void* convertible)
+{
+ this->stage1.convertible = convertible;
+}
+
+template <class T>
+inline rvalue_from_python_data<T>::~rvalue_from_python_data()
+{
+ if (this->stage1.convertible == this->storage.bytes)
+ python::detail::destroy_referent<ref_type>(this->storage.bytes);
+}
+
+}}} // namespace boost::python::converter
+
+#endif // FROM_PYTHON_AUX_DATA_DWA2002128_HPP
diff --git a/boost/boost/python/converter/shared_ptr_deleter.hpp b/boost/boost/python/converter/shared_ptr_deleter.hpp
new file mode 100644
index 00000000000..926508d00e1
--- /dev/null
+++ b/boost/boost/python/converter/shared_ptr_deleter.hpp
@@ -0,0 +1,22 @@
+// Copyright David Abrahams 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)
+#ifndef SHARED_PTR_DELETER_DWA2002121_HPP
+# define SHARED_PTR_DELETER_DWA2002121_HPP
+
+namespace boost { namespace python { namespace converter {
+
+struct BOOST_PYTHON_DECL shared_ptr_deleter
+{
+ shared_ptr_deleter(handle<> owner);
+ ~shared_ptr_deleter();
+
+ void operator()(void const*);
+
+ handle<> owner;
+};
+
+}}} // namespace boost::python::converter
+
+#endif // SHARED_PTR_DELETER_DWA2002121_HPP
diff --git a/boost/boost/python/converter/shared_ptr_from_python.hpp b/boost/boost/python/converter/shared_ptr_from_python.hpp
new file mode 100644
index 00000000000..577fb44768a
--- /dev/null
+++ b/boost/boost/python/converter/shared_ptr_from_python.hpp
@@ -0,0 +1,52 @@
+// Copyright David Abrahams 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)
+#ifndef SHARED_PTR_FROM_PYTHON_DWA20021130_HPP
+# define SHARED_PTR_FROM_PYTHON_DWA20021130_HPP
+
+# include <boost/python/handle.hpp>
+# include <boost/python/converter/shared_ptr_deleter.hpp>
+# include <boost/python/converter/from_python.hpp>
+# include <boost/python/converter/rvalue_from_python_data.hpp>
+# include <boost/python/converter/registered.hpp>
+# include <boost/shared_ptr.hpp>
+
+namespace boost { namespace python { namespace converter {
+
+template <class T>
+struct shared_ptr_from_python
+{
+ shared_ptr_from_python()
+ {
+ converter::registry::insert(&convertible, &construct, type_id<shared_ptr<T> >());
+ }
+
+ private:
+ static void* convertible(PyObject* p)
+ {
+ if (p == Py_None)
+ return p;
+
+ return converter::get_lvalue_from_python(p, registered<T>::converters);
+ }
+
+ static void construct(PyObject* source, rvalue_from_python_stage1_data* data)
+ {
+ void* const storage = ((converter::rvalue_from_python_storage<shared_ptr<T> >*)data)->storage.bytes;
+ // Deal with the "None" case.
+ if (data->convertible == source)
+ new (storage) shared_ptr<T>();
+ else
+ new (storage) shared_ptr<T>(
+ static_cast<T*>(data->convertible),
+ shared_ptr_deleter(handle<>(borrowed(source)))
+ );
+
+ data->convertible = storage;
+ }
+};
+
+}}} // namespace boost::python::converter
+
+#endif // SHARED_PTR_FROM_PYTHON_DWA20021130_HPP
diff --git a/boost/boost/python/converter/shared_ptr_to_python.hpp b/boost/boost/python/converter/shared_ptr_to_python.hpp
new file mode 100644
index 00000000000..fe867ace134
--- /dev/null
+++ b/boost/boost/python/converter/shared_ptr_to_python.hpp
@@ -0,0 +1,28 @@
+// Copyright David Abrahams 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)
+#ifndef SHARED_PTR_TO_PYTHON_DWA2003224_HPP
+# define SHARED_PTR_TO_PYTHON_DWA2003224_HPP
+
+# include <boost/python/refcount.hpp>
+# include <boost/python/converter/shared_ptr_deleter.hpp>
+# include <boost/shared_ptr.hpp>
+# include <boost/get_pointer.hpp>
+
+namespace boost { namespace python { namespace converter {
+
+template <class T>
+PyObject* shared_ptr_to_python(shared_ptr<T> const& x)
+{
+ if (!x)
+ return python::detail::none();
+ else if (shared_ptr_deleter* d = boost::get_deleter<shared_ptr_deleter>(x))
+ return incref( get_pointer( d->owner ) );
+ else
+ return converter::registered<shared_ptr<T> const&>::converters.to_python(&x);
+}
+
+}}} // namespace boost::python::converter
+
+#endif // SHARED_PTR_TO_PYTHON_DWA2003224_HPP
diff --git a/boost/boost/python/converter/to_python_function_type.hpp b/boost/boost/python/converter/to_python_function_type.hpp
new file mode 100644
index 00000000000..cccd014d68f
--- /dev/null
+++ b/boost/boost/python/converter/to_python_function_type.hpp
@@ -0,0 +1,19 @@
+// Copyright David Abrahams 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)
+#ifndef TO_PYTHON_FUNCTION_TYPE_DWA200236_HPP
+# define TO_PYTHON_FUNCTION_TYPE_DWA200236_HPP
+# include <boost/python/detail/prefix.hpp>
+# include <boost/static_assert.hpp>
+
+namespace boost { namespace python { namespace converter {
+
+// The type of stored function pointers which actually do conversion
+// by-value. The void* points to the object to be converted, and
+// type-safety is preserved through runtime registration.
+typedef PyObject* (*to_python_function_t)(void const*);
+
+}}} // namespace boost::python::converter
+
+#endif // TO_PYTHON_FUNCTION_TYPE_DWA200236_HPP
diff --git a/boost/boost/python/copy_const_reference.hpp b/boost/boost/python/copy_const_reference.hpp
new file mode 100644
index 00000000000..19e3b42332d
--- /dev/null
+++ b/boost/boost/python/copy_const_reference.hpp
@@ -0,0 +1,43 @@
+// Copyright David Abrahams 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)
+#ifndef COPY_CONST_REFERENCE_DWA2002131_HPP
+# define COPY_CONST_REFERENCE_DWA2002131_HPP
+
+# include <boost/python/detail/prefix.hpp>
+# include <boost/python/detail/indirect_traits.hpp>
+# include <boost/mpl/if.hpp>
+# include <boost/python/to_python_value.hpp>
+
+namespace boost { namespace python {
+
+namespace detail
+{
+ template <class R>
+ struct copy_const_reference_expects_a_const_reference_return_type
+# if defined(__GNUC__) && __GNUC__ >= 3 || defined(__EDG__)
+ {}
+# endif
+ ;
+}
+
+template <class T> struct to_python_value;
+
+struct copy_const_reference
+{
+ template <class T>
+ struct apply
+ {
+ typedef typename mpl::if_c<
+ indirect_traits::is_reference_to_const<T>::value
+ , to_python_value<T>
+ , detail::copy_const_reference_expects_a_const_reference_return_type<T>
+ >::type type;
+ };
+};
+
+
+}} // namespace boost::python
+
+#endif // COPY_CONST_REFERENCE_DWA2002131_HPP
diff --git a/boost/boost/python/copy_non_const_reference.hpp b/boost/boost/python/copy_non_const_reference.hpp
new file mode 100644
index 00000000000..78b70f5d3bf
--- /dev/null
+++ b/boost/boost/python/copy_non_const_reference.hpp
@@ -0,0 +1,43 @@
+// Copyright David Abrahams 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)
+#ifndef COPY_NON_CONST_REFERENCE_DWA2002131_HPP
+# define COPY_NON_CONST_REFERENCE_DWA2002131_HPP
+
+# include <boost/python/detail/prefix.hpp>
+# include <boost/python/detail/indirect_traits.hpp>
+# include <boost/mpl/if.hpp>
+# include <boost/python/to_python_value.hpp>
+
+namespace boost { namespace python {
+
+namespace detail
+{
+ template <class R>
+ struct copy_non_const_reference_expects_a_non_const_reference_return_type
+# if defined(__GNUC__) && __GNUC__ >= 3 || defined(__EDG__)
+ {}
+# endif
+ ;
+}
+
+template <class T> struct to_python_value;
+
+struct copy_non_const_reference
+{
+ template <class T>
+ struct apply
+ {
+ typedef typename mpl::if_c<
+ indirect_traits::is_reference_to_non_const<T>::value
+ , to_python_value<T>
+ , detail::copy_non_const_reference_expects_a_non_const_reference_return_type<T>
+ >::type type;
+ };
+};
+
+
+}} // namespace boost::python
+
+#endif // COPY_NON_CONST_REFERENCE_DWA2002131_HPP
diff --git a/boost/boost/python/data_members.hpp b/boost/boost/python/data_members.hpp
new file mode 100644
index 00000000000..8cbc0ac365f
--- /dev/null
+++ b/boost/boost/python/data_members.hpp
@@ -0,0 +1,316 @@
+// Copyright David Abrahams 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)
+#ifndef DATA_MEMBERS_DWA2002328_HPP
+# define DATA_MEMBERS_DWA2002328_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+# include <boost/python/handle.hpp>
+
+# include <boost/python/return_value_policy.hpp>
+# include <boost/python/return_by_value.hpp>
+# include <boost/python/return_internal_reference.hpp>
+# include <boost/python/make_function.hpp>
+
+# include <boost/python/converter/builtin_converters.hpp>
+
+# include <boost/python/detail/indirect_traits.hpp>
+# include <boost/python/detail/not_specified.hpp>
+# include <boost/python/detail/value_arg.hpp>
+
+# include <boost/type_traits/add_const.hpp>
+# include <boost/type_traits/add_reference.hpp>
+# include <boost/type_traits/is_member_pointer.hpp>
+
+# if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003))
+# include <boost/type_traits/remove_cv.hpp>
+# endif
+
+# include <boost/mpl/eval_if.hpp>
+# include <boost/mpl/if.hpp>
+# include <boost/mpl/vector/vector10.hpp>
+
+# include <boost/detail/workaround.hpp>
+
+namespace boost { namespace python {
+
+//
+// This file defines the make_getter and make_setter function
+// families, which are responsible for turning pointers, references,
+// and pointers-to-data-members into callable Python objects which
+// can be used for attribute access on wrapped classes.
+//
+
+namespace detail
+{
+
+ // A small function object which handles the getting and setting of
+ // data members.
+ template <class Data, class Class>
+ struct member
+ {
+ public:
+ member(Data Class::*which) : m_which(which) {}
+
+ Data& operator()(Class& c) const
+ {
+ return c.*m_which;
+ }
+
+ void operator()(Class& c, typename value_arg<Data>::type d) const
+ {
+ c.*m_which = d;
+ }
+ private:
+ Data Class::*m_which;
+ };
+
+ // A small function object which handles the getting and setting of
+ // non-member objects.
+ template <class Data>
+ struct datum
+ {
+ public:
+ datum(Data *which) : m_which(which) {}
+
+ Data& operator()() const
+ {
+ return *m_which;
+ }
+
+ void operator()(typename value_arg<Data>::type d) const
+ {
+ *m_which = d;
+ }
+ private:
+ Data *m_which;
+ };
+
+ //
+ // Helper metafunction for determining the default CallPolicy to use
+ // for attribute access. If T is a [reference to a] class type X
+ // whose conversion to python would normally produce a new copy of X
+ // in a wrapped X class instance (as opposed to types such as
+ // std::string, which are converted to native Python types, and
+ // smart pointer types which produce a wrapped class instance of the
+ // pointee type), to-python conversions will attempt to produce an
+ // object which refers to the original C++ object, rather than a
+ // copy. See default_member_getter_policy for rationale.
+ //
+ template <class T>
+ struct default_getter_by_ref
+ : mpl::and_<
+ mpl::bool_<
+ to_python_value<
+ typename value_arg<T>::type
+ >::uses_registry
+ >
+ , indirect_traits::is_reference_to_class<
+ typename value_arg<T>::type
+ >
+ >
+ {
+ };
+
+ // Metafunction computing the default CallPolicy to use for reading
+ // data members
+ //
+ // If it's a regular class type (not an object manager or other
+ // type for which we have to_python specializations, use
+ // return_internal_reference so that we can do things like
+ // x.y.z = 1
+ // and get the right result.
+ template <class T>
+ struct default_member_getter_policy
+ : mpl::if_<
+ default_getter_by_ref<T>
+ , return_internal_reference<>
+ , return_value_policy<return_by_value>
+ >
+ {};
+
+ // Metafunction computing the default CallPolicy to use for reading
+ // non-member data.
+ template <class T>
+ struct default_datum_getter_policy
+ : mpl::if_<
+ default_getter_by_ref<T>
+ , return_value_policy<reference_existing_object>
+ , return_value_policy<return_by_value>
+ >
+ {};
+
+ //
+ // make_getter helper function family -- These helpers to
+ // boost::python::make_getter are used to dispatch behavior. The
+ // third argument is a workaround for a CWPro8 partial ordering bug
+ // with pointers to data members. It should be convertible to
+ // mpl::true_ iff the first argument is a pointer-to-member, and
+ // mpl::false_ otherwise. The fourth argument is for compilers
+ // which don't support partial ordering at all and should always be
+ // passed 0L.
+ //
+
+#if BOOST_WORKAROUND(__EDG_VERSION__, <= 238)
+ template <class D, class P>
+ inline object make_getter(D& d, P& p, mpl::false_, ...);
+#endif
+
+ // Handle non-member pointers with policies
+ template <class D, class Policies>
+ inline object make_getter(D* d, Policies const& policies, mpl::false_, int)
+ {
+ return python::make_function(
+ detail::datum<D>(d), policies, mpl::vector1<D&>()
+ );
+ }
+
+ // Handle non-member pointers without policies
+ template <class D>
+ inline object make_getter(D* d, not_specified, mpl::false_, long)
+ {
+ typedef typename default_datum_getter_policy<D>::type policies;
+ return detail::make_getter(d, policies(), mpl::false_(), 0);
+ }
+
+ // Handle pointers-to-members with policies
+ template <class C, class D, class Policies>
+ inline object make_getter(D C::*pm, Policies const& policies, mpl::true_, int)
+ {
+#if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003))
+ typedef typename remove_cv<C>::type Class;
+#else
+ typedef C Class;
+#endif
+ return python::make_function(
+ detail::member<D,Class>(pm)
+ , policies
+ , mpl::vector2<D&,Class&>()
+ );
+ }
+
+ // Handle pointers-to-members without policies
+ template <class C, class D>
+ inline object make_getter(D C::*pm, not_specified, mpl::true_, long)
+ {
+ typedef typename default_member_getter_policy<D>::type policies;
+ return detail::make_getter(pm, policies(), mpl::true_(), 0);
+ }
+
+ // Handle references
+ template <class D, class P>
+ inline object make_getter(D& d, P& p, mpl::false_, ...)
+ {
+ // Just dispatch to the handler for pointer types.
+ return detail::make_getter(&d, p, mpl::false_(), 0L);
+ }
+
+ //
+ // make_setter helper function family -- These helpers to
+ // boost::python::make_setter are used to dispatch behavior. The
+ // third argument is for compilers which don't support partial
+ // ordering at all and should always be passed 0.
+ //
+
+
+ // Handle non-member pointers
+ template <class D, class Policies>
+ inline object make_setter(D* p, Policies const& policies, mpl::false_, int)
+ {
+ return python::make_function(
+ detail::datum<D>(p), policies, mpl::vector2<void,D const&>()
+ );
+ }
+
+ // Handle pointers-to-members
+ template <class C, class D, class Policies>
+ inline object make_setter(D C::*pm, Policies const& policies, mpl::true_, int)
+ {
+ return python::make_function(
+ detail::member<D,C>(pm)
+ , policies
+ , mpl::vector3<void, C&, D const&>()
+ );
+ }
+
+ // Handle references
+ template <class D, class Policies>
+ inline object make_setter(D& x, Policies const& policies, mpl::false_, ...)
+ {
+ return detail::make_setter(&x, policies, mpl::false_(), 0L);
+ }
+}
+
+//
+// make_getter function family -- build a callable object which
+// retrieves data through the first argument and is appropriate for
+// use as the `get' function in Python properties . The second,
+// policies argument, is optional. We need both D& and D const&
+// overloads in order be able to handle rvalues.
+//
+template <class D, class Policies>
+inline object make_getter(D& d, Policies const& policies)
+{
+ return detail::make_getter(d, policies, is_member_pointer<D>(), 0L);
+}
+
+template <class D, class Policies>
+inline object make_getter(D const& d, Policies const& policies)
+{
+ return detail::make_getter(d, policies, is_member_pointer<D>(), 0L);
+}
+
+template <class D>
+inline object make_getter(D& x)
+{
+ detail::not_specified policy;
+ return detail::make_getter(x, policy, is_member_pointer<D>(), 0L);
+}
+
+# if !BOOST_WORKAROUND(__EDG_VERSION__, <= 238) && !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+template <class D>
+inline object make_getter(D const& d)
+{
+ detail::not_specified policy;
+ return detail::make_getter(d, policy, is_member_pointer<D>(), 0L);
+}
+# endif
+
+//
+// make_setter function family -- build a callable object which
+// writes data through the first argument and is appropriate for
+// use as the `set' function in Python properties . The second,
+// policies argument, is optional. We need both D& and D const&
+// overloads in order be able to handle rvalues.
+//
+template <class D, class Policies>
+inline object make_setter(D& x, Policies const& policies)
+{
+ return detail::make_setter(x, policies, is_member_pointer<D>(), 0);
+}
+
+template <class D, class Policies>
+inline object make_setter(D const& x, Policies const& policies)
+{
+ return detail::make_setter(x, policies, is_member_pointer<D>(), 0);
+}
+
+template <class D>
+inline object make_setter(D& x)
+{
+ return detail::make_setter(x, default_call_policies(), is_member_pointer<D>(), 0);
+}
+
+# if !(BOOST_WORKAROUND(BOOST_MSVC, <= 1300) || BOOST_WORKAROUND(__EDG_VERSION__, <= 238))
+template <class D>
+inline object make_setter(D const& x)
+{
+ return detail::make_setter(x, default_call_policies(), is_member_pointer<D>(), 0);
+}
+# endif
+
+}} // namespace boost::python
+
+#endif // DATA_MEMBERS_DWA2002328_HPP
diff --git a/boost/boost/python/def.hpp b/boost/boost/python/def.hpp
new file mode 100644
index 00000000000..76829b0855b
--- /dev/null
+++ b/boost/boost/python/def.hpp
@@ -0,0 +1,114 @@
+// Copyright David Abrahams 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)
+#ifndef DEF_DWA200292_HPP
+# define DEF_DWA200292_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+# include <boost/python/object_fwd.hpp>
+# include <boost/python/make_function.hpp>
+# include <boost/python/detail/def_helper.hpp>
+# include <boost/python/detail/overloads_fwd.hpp>
+# include <boost/python/scope.hpp>
+# include <boost/python/signature.hpp>
+# include <boost/python/detail/scope.hpp>
+
+namespace boost { namespace python {
+
+namespace detail
+{
+ namespace error
+ {
+ // Compile-time error messages
+ template <bool> struct multiple_functions_passed_to_def;
+ template <> struct multiple_functions_passed_to_def<false> { typedef char type; };
+ }
+
+ //
+ // def_from_helper --
+ //
+ // Use a def_helper to define a regular wrapped function in the current scope.
+ template <class F, class Helper>
+ void def_from_helper(
+ char const* name, F const& fn, Helper const& helper)
+ {
+ // Must not try to use default implementations except with method definitions.
+ typedef typename error::multiple_functions_passed_to_def<
+ Helper::has_default_implementation
+ >::type assertion;
+
+ detail::scope_setattr_doc(
+ name, boost::python::make_function(
+ fn
+ , helper.policies()
+ , helper.keywords())
+ , helper.doc()
+ );
+ }
+
+ //
+ // These two overloads discriminate between def() as applied to
+ // regular functions and def() as applied to the result of
+ // BOOST_PYTHON_FUNCTION_OVERLOADS(). The final argument is used to
+ // discriminate.
+ //
+ template <class Fn, class A1>
+ void
+ def_maybe_overloads(
+ char const* name
+ , Fn fn
+ , A1 const& a1
+ , ...)
+ {
+ detail::def_from_helper(name, fn, def_helper<A1>(a1));
+ }
+
+ template <class StubsT, class SigT>
+ void def_maybe_overloads(
+ char const* name
+ , SigT sig
+ , StubsT const& stubs
+ , detail::overloads_base const*)
+ {
+ scope current;
+
+ detail::define_with_defaults(
+ name, stubs, current, detail::get_signature(sig));
+ }
+
+ template <class T>
+ object make_function1(T fn, ...) { return make_function(fn); }
+
+ inline
+ object make_function1(object const& x, object const*) { return x; }
+}
+
+template <class Fn>
+void def(char const* name, Fn fn)
+{
+ detail::scope_setattr_doc(name, detail::make_function1(fn, &fn), 0);
+}
+
+template <class Arg1T, class Arg2T>
+void def(char const* name, Arg1T arg1, Arg2T const& arg2)
+{
+ detail::def_maybe_overloads(name, arg1, arg2, &arg2);
+}
+
+template <class F, class A1, class A2>
+void def(char const* name, F f, A1 const& a1, A2 const& a2)
+{
+ detail::def_from_helper(name, f, detail::def_helper<A1,A2>(a1,a2));
+}
+
+template <class F, class A1, class A2, class A3>
+void def(char const* name, F f, A1 const& a1, A2 const& a2, A3 const& a3)
+{
+ detail::def_from_helper(name, f, detail::def_helper<A1,A2,A3>(a1,a2,a3));
+}
+
+}} // namespace boost::python
+
+#endif // DEF_DWA200292_HPP
diff --git a/boost/boost/python/def_visitor.hpp b/boost/boost/python/def_visitor.hpp
new file mode 100644
index 00000000000..9c8907cd6fd
--- /dev/null
+++ b/boost/boost/python/def_visitor.hpp
@@ -0,0 +1,86 @@
+// Copyright David Abrahams 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)
+#ifndef DEF_VISITOR_DWA2003810_HPP
+# define DEF_VISITOR_DWA2003810_HPP
+
+# include <boost/python/detail/prefix.hpp>
+# include <boost/detail/workaround.hpp>
+
+namespace boost { namespace python {
+
+template <class DerivedVisitor> class def_visitor;
+template <class T, class X1, class X2, class X3> class class_;
+
+class def_visitor_access
+{
+# if defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) \
+ || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))
+ // Tasteless as this may seem, making all members public allows member templates
+ // to work in the absence of member template friends.
+ public:
+# else
+ template <class Derived> friend class def_visitor;
+# endif
+
+ // unnamed visit, c.f. init<...>, container suites
+ template <class V, class classT>
+ static void visit(V const& v, classT& c)
+ {
+ v.derived_visitor().visit(c);
+ }
+
+ // named visit, c.f. object, pure_virtual
+ template <class V, class classT, class OptionalArgs>
+ static void visit(
+ V const& v
+ , classT& c
+ , char const* name
+ , OptionalArgs const& options
+ )
+ {
+ v.derived_visitor().visit(c, name, options);
+ }
+
+};
+
+
+template <class DerivedVisitor>
+class def_visitor
+{
+ friend class def_visitor_access;
+
+# if defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) \
+ || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))
+ // Tasteless as this may seem, making all members public allows member templates
+ // to work in the absence of member template friends.
+ public:
+# else
+ template <class T, class X1, class X2, class X3> friend class class_;
+# endif
+
+ // unnamed visit, c.f. init<...>, container suites
+ template <class classT>
+ void visit(classT& c) const
+ {
+ def_visitor_access::visit(*this, c);
+ }
+
+ // named visit, c.f. object, pure_virtual
+ template <class classT, class OptionalArgs>
+ void visit(classT& c, char const* name, OptionalArgs const& options) const
+ {
+ def_visitor_access::visit(*this, c, name, options);
+ }
+
+ protected:
+ DerivedVisitor const& derived_visitor() const
+ {
+ return static_cast<DerivedVisitor const&>(*this);
+ }
+};
+
+}} // namespace boost::python
+
+#endif // DEF_VISITOR_DWA2003810_HPP
diff --git a/boost/boost/python/default_call_policies.hpp b/boost/boost/python/default_call_policies.hpp
new file mode 100644
index 00000000000..800cce79e6d
--- /dev/null
+++ b/boost/boost/python/default_call_policies.hpp
@@ -0,0 +1,84 @@
+// Copyright David Abrahams 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)
+#ifndef DEFAULT_CALL_POLICIES_DWA2002131_HPP
+# define DEFAULT_CALL_POLICIES_DWA2002131_HPP
+
+# include <boost/python/detail/prefix.hpp>
+# include <boost/mpl/if.hpp>
+# include <boost/python/to_python_value.hpp>
+# include <boost/python/detail/value_arg.hpp>
+# include <boost/type_traits/transform_traits.hpp>
+# include <boost/type_traits/is_pointer.hpp>
+# include <boost/type_traits/is_reference.hpp>
+# include <boost/mpl/or.hpp>
+
+namespace boost { namespace python {
+
+template <class T> struct to_python_value;
+
+namespace detail
+{
+// for "readable" error messages
+ template <class T> struct specify_a_return_value_policy_to_wrap_functions_returning
+# if defined(__GNUC__) && __GNUC__ >= 3 || defined(__EDG__)
+ {}
+# endif
+ ;
+}
+
+struct default_result_converter;
+
+struct default_call_policies
+{
+ // Ownership of this argument tuple will ultimately be adopted by
+ // the caller.
+ template <class ArgumentPackage>
+ static bool precall(ArgumentPackage const&)
+ {
+ return true;
+ }
+
+ // Pass the result through
+ template <class ArgumentPackage>
+ static PyObject* postcall(ArgumentPackage const&, PyObject* result)
+ {
+ return result;
+ }
+
+ typedef default_result_converter result_converter;
+ typedef PyObject* argument_package;
+};
+
+struct default_result_converter
+{
+ template <class R>
+ struct apply
+ {
+ typedef typename mpl::if_<
+ mpl::or_<is_pointer<R>, is_reference<R> >
+ , detail::specify_a_return_value_policy_to_wrap_functions_returning<R>
+ , boost::python::to_python_value<
+ typename detail::value_arg<R>::type
+ >
+ >::type type;
+ };
+};
+
+// Exceptions for c strings an PyObject*s
+template <>
+struct default_result_converter::apply<char const*>
+{
+ typedef boost::python::to_python_value<char const*const&> type;
+};
+
+template <>
+struct default_result_converter::apply<PyObject*>
+{
+ typedef boost::python::to_python_value<PyObject*const&> type;
+};
+
+}} // namespace boost::python
+
+#endif // DEFAULT_CALL_POLICIES_DWA2002131_HPP
diff --git a/boost/boost/python/detail/aix_init_module.hpp b/boost/boost/python/detail/aix_init_module.hpp
new file mode 100644
index 00000000000..9214dbf09bb
--- /dev/null
+++ b/boost/boost/python/detail/aix_init_module.hpp
@@ -0,0 +1,26 @@
+// Copyright David Abrahams 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)
+#ifndef AIX_INIT_MODULE_DWA2002529_HPP
+# define AIX_INIT_MODULE_DWA2002529_HPP
+# ifdef _AIX
+# include <boost/python/detail/prefix.hpp>
+# include <cstdio>
+# ifdef __KCC
+# include <iostream> // this works around a problem in KCC 4.0f
+# endif
+
+namespace boost { namespace python { namespace detail {
+
+extern "C"
+{
+ typedef PyObject* (*so_load_function)(char*,char*,FILE*);
+}
+
+void aix_init_module(so_load_function, char const* name, void (*init_module)());
+
+}}} // namespace boost::python::detail
+# endif
+
+#endif // AIX_INIT_MODULE_DWA2002529_HPP
diff --git a/boost/boost/python/detail/api_placeholder.hpp b/boost/boost/python/detail/api_placeholder.hpp
new file mode 100644
index 00000000000..5975a13bda3
--- /dev/null
+++ b/boost/boost/python/detail/api_placeholder.hpp
@@ -0,0 +1,15 @@
+// Copyright David Abrahams 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)
+
+// DEPRECATED HEADER (2006 Jan 12)
+// Provided only for backward compatibility.
+// The boost::python::len() function is now defined in object.hpp.
+
+#ifndef BOOST_PYTHON_API_PLACE_HOLDER_HPP
+#define BOOST_PYTHON_API_PLACE_HOLDER_HPP
+
+#include <boost/python/object.hpp>
+
+#endif // BOOST_PYTHON_API_PLACE_HOLDER_HPP
diff --git a/boost/boost/python/detail/borrowed_ptr.hpp b/boost/boost/python/detail/borrowed_ptr.hpp
new file mode 100644
index 00000000000..b88457b83a1
--- /dev/null
+++ b/boost/boost/python/detail/borrowed_ptr.hpp
@@ -0,0 +1,111 @@
+#ifndef BORROWED_PTR_DWA20020601_HPP
+# define BORROWED_PTR_DWA20020601_HPP
+// Copyright David Abrahams 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)
+
+# include <boost/config.hpp>
+# include <boost/type.hpp>
+# include <boost/mpl/if.hpp>
+# include <boost/type_traits/object_traits.hpp>
+# include <boost/type_traits/cv_traits.hpp>
+# include <boost/python/tag.hpp>
+
+namespace boost { namespace python { namespace detail {
+
+template<class T> class borrowed
+{
+ typedef T type;
+};
+
+# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+template<typename T>
+struct is_borrowed_ptr
+{
+ BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+# if !defined(__MWERKS__) || __MWERKS__ > 0x3000
+template<typename T>
+struct is_borrowed_ptr<borrowed<T>*>
+{
+ BOOST_STATIC_CONSTANT(bool, value = true);
+};
+
+template<typename T>
+struct is_borrowed_ptr<borrowed<T> const*>
+{
+ BOOST_STATIC_CONSTANT(bool, value = true);
+};
+
+template<typename T>
+struct is_borrowed_ptr<borrowed<T> volatile*>
+{
+ BOOST_STATIC_CONSTANT(bool, value = true);
+};
+
+template<typename T>
+struct is_borrowed_ptr<borrowed<T> const volatile*>
+{
+ BOOST_STATIC_CONSTANT(bool, value = true);
+};
+# else
+template<typename T>
+struct is_borrowed
+{
+ BOOST_STATIC_CONSTANT(bool, value = false);
+};
+template<typename T>
+struct is_borrowed<borrowed<T> >
+{
+ BOOST_STATIC_CONSTANT(bool, value = true);
+};
+template<typename T>
+struct is_borrowed_ptr<T*>
+ : is_borrowed<typename remove_cv<T>::type>
+{
+};
+# endif
+
+# else // no partial specialization
+
+typedef char (&yes_borrowed_ptr_t)[1];
+typedef char (&no_borrowed_ptr_t)[2];
+
+no_borrowed_ptr_t is_borrowed_ptr_test(...);
+
+template <class T>
+typename mpl::if_c<
+ is_pointer<T>::value
+ , T
+ , int
+ >::type
+is_borrowed_ptr_test1(boost::type<T>);
+
+template<typename T>
+yes_borrowed_ptr_t is_borrowed_ptr_test(borrowed<T> const volatile*);
+
+template<typename T>
+class is_borrowed_ptr
+{
+ public:
+ BOOST_STATIC_CONSTANT(
+ bool, value = (
+ sizeof(detail::is_borrowed_ptr_test(is_borrowed_ptr_test1(boost::type<T>())))
+ == sizeof(detail::yes_borrowed_ptr_t)));
+};
+
+# endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+}
+
+template <class T>
+inline T* get_managed_object(detail::borrowed<T> const volatile* p, tag_t)
+{
+ return (T*)p;
+}
+
+}} // namespace boost::python::detail
+
+#endif // #ifndef BORROWED_PTR_DWA20020601_HPP
diff --git a/boost/boost/python/detail/caller.hpp b/boost/boost/python/detail/caller.hpp
new file mode 100644
index 00000000000..1054b6e2447
--- /dev/null
+++ b/boost/boost/python/detail/caller.hpp
@@ -0,0 +1,220 @@
+#if !defined(BOOST_PP_IS_ITERATING)
+
+// Copyright David Abrahams 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)
+
+# ifndef CALLER_DWA20021121_HPP
+# define CALLER_DWA20021121_HPP
+
+# include <boost/python/type_id.hpp>
+# include <boost/python/handle.hpp>
+
+# include <boost/python/detail/invoke.hpp>
+# include <boost/python/detail/signature.hpp>
+# include <boost/python/detail/preprocessor.hpp>
+
+# include <boost/python/arg_from_python.hpp>
+# include <boost/python/converter/context_result_converter.hpp>
+
+# include <boost/preprocessor/iterate.hpp>
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/dec.hpp>
+# include <boost/preprocessor/if.hpp>
+# include <boost/preprocessor/iteration/local.hpp>
+# include <boost/preprocessor/repetition/enum_trailing_params.hpp>
+# include <boost/preprocessor/repetition/repeat.hpp>
+
+# include <boost/compressed_pair.hpp>
+
+# include <boost/type_traits/is_same.hpp>
+# include <boost/type_traits/is_convertible.hpp>
+
+# include <boost/mpl/apply.hpp>
+# include <boost/mpl/eval_if.hpp>
+# include <boost/mpl/identity.hpp>
+# include <boost/mpl/size.hpp>
+# include <boost/mpl/at.hpp>
+# include <boost/mpl/int.hpp>
+# include <boost/mpl/next.hpp>
+
+namespace boost { namespace python { namespace detail {
+
+template <int N>
+inline PyObject* get(mpl::int_<N>, PyObject* const& args_)
+{
+ return PyTuple_GET_ITEM(args_,N);
+}
+
+inline unsigned arity(PyObject* const& args_)
+{
+ return PyTuple_GET_SIZE(args_);
+}
+
+// This "result converter" is really just used as
+// a dispatch tag to invoke(...), selecting the appropriate
+// implementation
+typedef int void_result_to_python;
+
+// Given a model of CallPolicies and a C++ result type, this
+// metafunction selects the appropriate converter to use for
+// converting the result to python.
+template <class Policies, class Result>
+struct select_result_converter
+ : mpl::eval_if<
+ is_same<Result,void>
+ , mpl::identity<void_result_to_python>
+ , mpl::apply1<typename Policies::result_converter,Result>
+ >
+{
+};
+
+template <class ArgPackage, class ResultConverter>
+inline ResultConverter create_result_converter(
+ ArgPackage const& args_
+ , ResultConverter*
+ , converter::context_result_converter*
+)
+{
+ return ResultConverter(args_);
+}
+
+template <class ArgPackage, class ResultConverter>
+inline ResultConverter create_result_converter(
+ ArgPackage const&
+ , ResultConverter*
+ , ...
+)
+{
+ return ResultConverter();
+}
+
+template <unsigned> struct caller_arity;
+
+template <class F, class CallPolicies, class Sig>
+struct caller;
+
+# define BOOST_PYTHON_NEXT(init,name,n) \
+ typedef BOOST_PP_IF(n,typename mpl::next< BOOST_PP_CAT(name,BOOST_PP_DEC(n)) >::type, init) name##n;
+
+# define BOOST_PYTHON_ARG_CONVERTER(n) \
+ BOOST_PYTHON_NEXT(typename mpl::next<first>::type, arg_iter,n) \
+ typedef arg_from_python<BOOST_DEDUCED_TYPENAME arg_iter##n::type> c_t##n; \
+ c_t##n c##n(get(mpl::int_<n>(), inner_args)); \
+ if (!c##n.convertible()) \
+ return 0;
+
+# define BOOST_PP_ITERATION_PARAMS_1 \
+ (3, (0, BOOST_PYTHON_MAX_ARITY + 1, <boost/python/detail/caller.hpp>))
+# include BOOST_PP_ITERATE()
+
+# undef BOOST_PYTHON_ARG_CONVERTER
+# undef BOOST_PYTHON_NEXT
+
+// A metafunction returning the base class used for caller<class F,
+// class ConverterGenerators, class CallPolicies, class Sig>.
+template <class F, class CallPolicies, class Sig>
+struct caller_base_select
+{
+ enum { arity = mpl::size<Sig>::value - 1 };
+ typedef typename caller_arity<arity>::template impl<F,CallPolicies,Sig> type;
+};
+
+// A function object type which wraps C++ objects as Python callable
+// objects.
+//
+// Template Arguments:
+//
+// F -
+// the C++ `function object' that will be called. Might
+// actually be any data for which an appropriate invoke_tag() can
+// be generated. invoke(...) takes care of the actual invocation syntax.
+//
+// CallPolicies -
+// The precall, postcall, and what kind of resultconverter to
+// generate for mpl::front<Sig>::type
+//
+// Sig -
+// The `intended signature' of the function. An MPL sequence
+// beginning with a result type and continuing with a list of
+// argument types.
+template <class F, class CallPolicies, class Sig>
+struct caller
+ : caller_base_select<F,CallPolicies,Sig>::type
+{
+ typedef typename caller_base_select<
+ F,CallPolicies,Sig
+ >::type base;
+
+ typedef PyObject* result_type;
+
+ caller(F f, CallPolicies p) : base(f,p) {}
+
+};
+
+}}} // namespace boost::python::detail
+
+# endif // CALLER_DWA20021121_HPP
+
+#else
+
+# define N BOOST_PP_ITERATION()
+
+template <>
+struct caller_arity<N>
+{
+ template <class F, class Policies, class Sig>
+ struct impl
+ {
+ impl(F f, Policies p) : m_data(f,p) {}
+
+ PyObject* operator()(PyObject* args_, PyObject*) // eliminate
+ // this
+ // trailing
+ // keyword dict
+ {
+ typedef typename mpl::begin<Sig>::type first;
+ typedef typename first::type result_t;
+ typedef typename select_result_converter<Policies, result_t>::type result_converter;
+ typedef typename Policies::argument_package argument_package;
+
+ argument_package inner_args(args_);
+
+# if N
+# define BOOST_PP_LOCAL_MACRO(i) BOOST_PYTHON_ARG_CONVERTER(i)
+# define BOOST_PP_LOCAL_LIMITS (0, N-1)
+# include BOOST_PP_LOCAL_ITERATE()
+# endif
+ // all converters have been checked. Now we can do the
+ // precall part of the policy
+ if (!m_data.second().precall(inner_args))
+ return 0;
+
+ PyObject* result = detail::invoke(
+ detail::invoke_tag<result_t,F>()
+ , create_result_converter(args_, (result_converter*)0, (result_converter*)0)
+ , m_data.first()
+ BOOST_PP_ENUM_TRAILING_PARAMS(N, c)
+ );
+
+ return m_data.second().postcall(inner_args, result);
+ }
+
+ static unsigned min_arity() { return N; }
+
+ static signature_element const* signature()
+ {
+ return detail::signature<Sig>::elements();
+ }
+
+ private:
+ compressed_pair<F,Policies> m_data;
+ };
+};
+
+
+
+#endif // BOOST_PP_IS_ITERATING
+
+
diff --git a/boost/boost/python/detail/config.hpp b/boost/boost/python/detail/config.hpp
new file mode 100644
index 00000000000..cfd762b92dc
--- /dev/null
+++ b/boost/boost/python/detail/config.hpp
@@ -0,0 +1,137 @@
+// (C) Copyright David Abrahams 2000.
+// 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)
+//
+// The author gratefully acknowleges the support of Dragon Systems, Inc., in
+// producing this work.
+
+// Revision History:
+// 04 Mar 01 Some fixes so it will compile with Intel C++ (Dave Abrahams)
+
+#ifndef CONFIG_DWA052200_H_
+# define CONFIG_DWA052200_H_
+
+# include <boost/config.hpp>
+# include <boost/detail/workaround.hpp>
+
+# ifdef BOOST_NO_OPERATORS_IN_NAMESPACE
+ // A gcc bug forces some symbols into the global namespace
+# define BOOST_PYTHON_BEGIN_CONVERSION_NAMESPACE
+# define BOOST_PYTHON_END_CONVERSION_NAMESPACE
+# define BOOST_PYTHON_CONVERSION
+# define BOOST_PYTHON_IMPORT_CONVERSION(x) using ::x
+# else
+# define BOOST_PYTHON_BEGIN_CONVERSION_NAMESPACE namespace boost { namespace python {
+# define BOOST_PYTHON_END_CONVERSION_NAMESPACE }} // namespace boost::python
+# define BOOST_PYTHON_CONVERSION boost::python
+# define BOOST_PYTHON_IMPORT_CONVERSION(x) void never_defined() // so we can follow the macro with a ';'
+# endif
+
+# if defined(BOOST_MSVC)
+# if _MSC_VER < 1300
+# define BOOST_MSVC6_OR_EARLIER 1
+# endif
+
+# pragma warning (disable : 4786) // disable truncated debug symbols
+# pragma warning (disable : 4251) // disable exported dll function
+# pragma warning (disable : 4800) //'int' : forcing value to bool 'true' or 'false'
+# pragma warning (disable : 4275) // non dll-interface class
+
+# elif defined(__ICL) && __ICL < 600 // Intel C++ 5
+
+# pragma warning(disable: 985) // identifier was truncated in debug information
+
+# endif
+
+// The STLport puts all of the standard 'C' library names in std (as far as the
+// user is concerned), but without it you need a fix if you're using MSVC or
+// Intel C++
+# if defined(BOOST_NO_STDC_NAMESPACE)
+# define BOOST_CSTD_
+# else
+# define BOOST_CSTD_ std
+# endif
+
+/*****************************************************************************
+ *
+ * Set up dll import/export options:
+ *
+ ****************************************************************************/
+
+// backwards compatibility:
+#ifdef BOOST_PYTHON_STATIC_LIB
+# define BOOST_PYTHON_STATIC_LINK
+# elif !defined(BOOST_PYTHON_DYNAMIC_LIB)
+# define BOOST_PYTHON_DYNAMIC_LIB
+#endif
+
+#if defined(BOOST_PYTHON_DYNAMIC_LIB)
+
+# if !defined(_WIN32) && !defined(__CYGWIN__) \
+ && !defined(BOOST_PYTHON_USE_GCC_SYMBOL_VISIBILITY) \
+ && BOOST_WORKAROUND(__GNUC__, >= 3) && (__GNUC_MINOR__ >=5 || __GNUC__ > 3)
+# define BOOST_PYTHON_USE_GCC_SYMBOL_VISIBILITY 1
+# endif
+
+# if BOOST_PYTHON_USE_GCC_SYMBOL_VISIBILITY
+# if defined(BOOST_PYTHON_SOURCE)
+# define BOOST_PYTHON_DECL __attribute__ ((visibility("default")))
+# define BOOST_PYTHON_BUILD_DLL
+# else
+# define BOOST_PYTHON_DECL
+# endif
+# define BOOST_PYTHON_DECL_FORWARD
+# define BOOST_PYTHON_DECL_EXCEPTION __attribute__ ((visibility("default")))
+# elif (defined(_WIN32) || defined(__CYGWIN__))
+# if defined(BOOST_PYTHON_SOURCE)
+# define BOOST_PYTHON_DECL __declspec(dllexport)
+# define BOOST_PYTHON_BUILD_DLL
+# else
+# define BOOST_PYTHON_DECL __declspec(dllimport)
+# endif
+# endif
+
+#endif
+
+#ifndef BOOST_PYTHON_DECL
+# define BOOST_PYTHON_DECL
+#endif
+
+#ifndef BOOST_PYTHON_DECL_FORWARD
+# define BOOST_PYTHON_DECL_FORWARD BOOST_PYTHON_DECL
+#endif
+
+#ifndef BOOST_PYTHON_DECL_EXCEPTION
+# define BOOST_PYTHON_DECL_EXCEPTION BOOST_PYTHON_DECL
+#endif
+
+#if BOOST_WORKAROUND(__DECCXX_VER, BOOST_TESTED_AT(60590042))
+// Replace broken Tru64/cxx offsetof macro
+# define BOOST_PYTHON_OFFSETOF(s_name, s_member) \
+ ((size_t)__INTADDR__(&(((s_name *)0)->s_member)))
+#else
+# define BOOST_PYTHON_OFFSETOF offsetof
+#endif
+
+// enable automatic library variant selection ------------------------------//
+
+#if !defined(BOOST_PYTHON_SOURCE) && !defined(BOOST_ALL_NO_LIB) && !defined(BOOST_PYTHON_NO_LIB)
+//
+// Set the name of our library, this will get undef'ed by auto_link.hpp
+// once it's done with it:
+//
+#define BOOST_LIB_NAME boost_python
+//
+// If we're importing code from a dll, then tell auto_link.hpp about it:
+//
+#ifdef BOOST_PYTHON_DYNAMIC_LIB
+# define BOOST_DYN_LINK
+#endif
+//
+// And include the header that does the work:
+//
+#include <boost/config/auto_link.hpp>
+#endif // auto-linking disabled
+
+#endif // CONFIG_DWA052200_H_
diff --git a/boost/boost/python/detail/construct.hpp b/boost/boost/python/detail/construct.hpp
new file mode 100644
index 00000000000..5f15d22c6ed
--- /dev/null
+++ b/boost/boost/python/detail/construct.hpp
@@ -0,0 +1,42 @@
+// Copyright David Abrahams 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)
+#ifndef CONSTRUCT_REFERENCE_DWA2002716_HPP
+# define CONSTRUCT_REFERENCE_DWA2002716_HPP
+
+namespace boost { namespace python { namespace detail {
+
+template <class T, class Arg>
+void construct_pointee(void* storage, Arg& x
+# if !defined(BOOST_MSVC) || BOOST_MSVC > 1300
+ , T const volatile*
+# else
+ , T const*
+# endif
+ )
+{
+ new (storage) T(x);
+}
+
+template <class T, class Arg>
+void construct_referent_impl(void* storage, Arg& x, T&(*)())
+{
+ construct_pointee(storage, x, (T*)0);
+}
+
+template <class T, class Arg>
+void construct_referent(void* storage, Arg const& x, T(*tag)() = 0)
+{
+ construct_referent_impl(storage, x, tag);
+}
+
+template <class T, class Arg>
+void construct_referent(void* storage, Arg& x, T(*tag)() = 0)
+{
+ construct_referent_impl(storage, x, tag);
+}
+
+}}} // namespace boost::python::detail
+
+#endif // CONSTRUCT_REFERENCE_DWA2002716_HPP
diff --git a/boost/boost/python/detail/convertible.hpp b/boost/boost/python/detail/convertible.hpp
new file mode 100644
index 00000000000..2ce552f5f75
--- /dev/null
+++ b/boost/boost/python/detail/convertible.hpp
@@ -0,0 +1,38 @@
+// Copyright David Abrahams 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)
+#ifndef CONVERTIBLE_DWA2002614_HPP
+# define CONVERTIBLE_DWA2002614_HPP
+
+# if defined(__EDG_VERSION__) && __EDG_VERSION__ <= 241
+# include <boost/mpl/if.hpp>
+# include <boost/type_traits/conversion_traits.hpp>
+# endif
+
+// Supplies a runtime is_convertible check which can be used with tag
+// dispatching to work around the Metrowerks Pro7 limitation with boost::is_convertible
+namespace boost { namespace python { namespace detail {
+
+typedef char* yes_convertible;
+typedef int* no_convertible;
+
+template <class Target>
+struct convertible
+{
+# if !defined(__EDG_VERSION__) || __EDG_VERSION__ > 241 || __EDG_VERSION__ == 238
+ static inline no_convertible check(...) { return 0; }
+ static inline yes_convertible check(Target) { return 0; }
+# else
+ template <class X>
+ static inline typename mpl::if_c<
+ is_convertible<X,Target>::value
+ , yes_convertible
+ , no_convertible
+ >::type check(X const&) { return 0; }
+# endif
+};
+
+}}} // namespace boost::python::detail
+
+#endif // CONVERTIBLE_DWA2002614_HPP
diff --git a/boost/boost/python/detail/copy_ctor_mutates_rhs.hpp b/boost/boost/python/detail/copy_ctor_mutates_rhs.hpp
new file mode 100644
index 00000000000..4ca8d039114
--- /dev/null
+++ b/boost/boost/python/detail/copy_ctor_mutates_rhs.hpp
@@ -0,0 +1,21 @@
+// Copyright David Abrahams 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)
+#ifndef COPY_CTOR_MUTATES_RHS_DWA2003219_HPP
+# define COPY_CTOR_MUTATES_RHS_DWA2003219_HPP
+
+#include <boost/python/detail/is_auto_ptr.hpp>
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace python { namespace detail {
+
+template <class T>
+struct copy_ctor_mutates_rhs
+ : is_auto_ptr<T>
+{
+};
+
+}}} // namespace boost::python::detail
+
+#endif // COPY_CTOR_MUTATES_RHS_DWA2003219_HPP
diff --git a/boost/boost/python/detail/cv_category.hpp b/boost/boost/python/detail/cv_category.hpp
new file mode 100644
index 00000000000..1765b36f8cd
--- /dev/null
+++ b/boost/boost/python/detail/cv_category.hpp
@@ -0,0 +1,36 @@
+// Copyright David Abrahams 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)
+#ifndef CV_CATEGORY_DWA200222_HPP
+# define CV_CATEGORY_DWA200222_HPP
+# include <boost/type_traits/cv_traits.hpp>
+
+namespace boost { namespace python { namespace detail {
+
+template <bool is_const_, bool is_volatile_>
+struct cv_tag
+{
+ BOOST_STATIC_CONSTANT(bool, is_const = is_const_);
+ BOOST_STATIC_CONSTANT(bool, is_volatile = is_const_);
+};
+
+typedef cv_tag<false,false> cv_unqualified;
+typedef cv_tag<true,false> const_;
+typedef cv_tag<false,true> volatile_;
+typedef cv_tag<true,true> const_volatile_;
+
+template <class T>
+struct cv_category
+{
+// BOOST_STATIC_CONSTANT(bool, c = is_const<T>::value);
+// BOOST_STATIC_CONSTANT(bool, v = is_volatile<T>::value);
+ typedef cv_tag<
+ ::boost::is_const<T>::value
+ , ::boost::is_volatile<T>::value
+ > type;
+};
+
+}}} // namespace boost::python::detail
+
+#endif // CV_CATEGORY_DWA200222_HPP
diff --git a/boost/boost/python/detail/dealloc.hpp b/boost/boost/python/detail/dealloc.hpp
new file mode 100644
index 00000000000..f2d914b18c0
--- /dev/null
+++ b/boost/boost/python/detail/dealloc.hpp
@@ -0,0 +1,17 @@
+// Copyright Gottfried Ganßauge 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)
+
+# ifndef BOOST_PYTHON_DETAIL_DEALLOC_HPP_
+# define BOOST_PYTHON_DETAIL_DEALLOC_HPP_
+namespace boost { namespace python { namespace detail {
+ extern "C"
+ {
+ inline void dealloc(PyObject* self)
+ {
+ PyObject_Del(self);
+ }
+ }
+}}} // namespace boost::python::detail
+# endif // BOOST_PYTHON_DETAIL_DEALLOC_HPP_
diff --git a/boost/boost/python/detail/decorated_type_id.hpp b/boost/boost/python/detail/decorated_type_id.hpp
new file mode 100644
index 00000000000..2e44ac2c97a
--- /dev/null
+++ b/boost/boost/python/detail/decorated_type_id.hpp
@@ -0,0 +1,76 @@
+// Copyright David Abrahams 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)
+#ifndef DECORATED_TYPE_ID_DWA2002517_HPP
+# define DECORATED_TYPE_ID_DWA2002517_HPP
+
+# include <boost/python/type_id.hpp>
+# include <boost/python/detail/indirect_traits.hpp>
+# include <boost/type_traits/cv_traits.hpp>
+
+namespace boost { namespace python { namespace detail {
+
+struct decorated_type_info : totally_ordered<decorated_type_info>
+{
+ enum decoration { const_ = 0x1, volatile_ = 0x2, reference = 0x4 };
+
+ decorated_type_info(type_info, decoration = decoration());
+
+ inline bool operator<(decorated_type_info const& rhs) const;
+ inline bool operator==(decorated_type_info const& rhs) const;
+
+ friend BOOST_PYTHON_DECL std::ostream& operator<<(std::ostream&, decorated_type_info const&);
+
+ operator type_info const&() const;
+ private: // type
+ typedef type_info base_id_t;
+
+ private: // data members
+ decoration m_decoration;
+ base_id_t m_base_type;
+};
+
+template <class T>
+inline decorated_type_info decorated_type_id(boost::type<T>* = 0)
+{
+ return decorated_type_info(
+ type_id<T>()
+ , decorated_type_info::decoration(
+ (is_const<T>::value || indirect_traits::is_reference_to_const<T>::value
+ ? decorated_type_info::const_ : 0)
+ | (is_volatile<T>::value || indirect_traits::is_reference_to_volatile<T>::value
+ ? decorated_type_info::volatile_ : 0)
+ | (is_reference<T>::value ? decorated_type_info::reference : 0)
+ )
+ );
+}
+
+inline decorated_type_info::decorated_type_info(type_info base_t, decoration decoration)
+ : m_decoration(decoration)
+ , m_base_type(base_t)
+{
+}
+
+inline bool decorated_type_info::operator<(decorated_type_info const& rhs) const
+{
+ return m_decoration < rhs.m_decoration
+ || m_decoration == rhs.m_decoration
+ && m_base_type < rhs.m_base_type;
+}
+
+inline bool decorated_type_info::operator==(decorated_type_info const& rhs) const
+{
+ return m_decoration == rhs.m_decoration && m_base_type == rhs.m_base_type;
+}
+
+inline decorated_type_info::operator type_info const&() const
+{
+ return m_base_type;
+}
+
+BOOST_PYTHON_DECL std::ostream& operator<<(std::ostream&, decorated_type_info const&);
+
+}}} // namespace boost::python::detail
+
+#endif // DECORATED_TYPE_ID_DWA2002517_HPP
diff --git a/boost/boost/python/detail/decref_guard.hpp b/boost/boost/python/detail/decref_guard.hpp
new file mode 100644
index 00000000000..d713e0a6043
--- /dev/null
+++ b/boost/boost/python/detail/decref_guard.hpp
@@ -0,0 +1,21 @@
+// Copyright David Abrahams 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)
+#ifndef DECREF_GUARD_DWA20021220_HPP
+# define DECREF_GUARD_DWA20021220_HPP
+
+namespace boost { namespace python { namespace detail {
+
+struct decref_guard
+{
+ decref_guard(PyObject* o) : obj(o) {}
+ ~decref_guard() { Py_XDECREF(obj); }
+ void cancel() { obj = 0; }
+ private:
+ PyObject* obj;
+};
+
+}}} // namespace boost::python::detail
+
+#endif // DECREF_GUARD_DWA20021220_HPP
diff --git a/boost/boost/python/detail/def_helper.hpp b/boost/boost/python/detail/def_helper.hpp
new file mode 100644
index 00000000000..33abf19d9e8
--- /dev/null
+++ b/boost/boost/python/detail/def_helper.hpp
@@ -0,0 +1,212 @@
+// Copyright David Abrahams 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)
+#ifndef DEF_HELPER_DWA200287_HPP
+# define DEF_HELPER_DWA200287_HPP
+
+# include <boost/python/args.hpp>
+# include <boost/type_traits/ice.hpp>
+# include <boost/type_traits/same_traits.hpp>
+# include <boost/python/detail/indirect_traits.hpp>
+# include <boost/mpl/not.hpp>
+# include <boost/mpl/and.hpp>
+# include <boost/mpl/or.hpp>
+# include <boost/type_traits/add_reference.hpp>
+# include <boost/mpl/lambda.hpp>
+# include <boost/mpl/apply.hpp>
+# include <boost/tuple/tuple.hpp>
+# include <boost/python/detail/not_specified.hpp>
+# include <boost/python/detail/def_helper_fwd.hpp>
+
+namespace boost { namespace python {
+
+struct default_call_policies;
+
+namespace detail
+{
+ // tuple_extract<Tuple,Predicate>::extract(t) returns the first
+ // element of a Tuple whose type E satisfies the given Predicate
+ // applied to add_reference<E>. The Predicate must be an MPL
+ // metafunction class.
+ template <class Tuple, class Predicate>
+ struct tuple_extract;
+
+ // Implementation class for when the tuple's head type does not
+ // satisfy the Predicate
+ template <bool matched>
+ struct tuple_extract_impl
+ {
+ template <class Tuple, class Predicate>
+ struct apply
+ {
+ typedef typename Tuple::head_type result_type;
+
+ static typename Tuple::head_type extract(Tuple const& x)
+ {
+ return x.get_head();
+ }
+ };
+ };
+
+ // Implementation specialization for when the tuple's head type
+ // satisfies the predicate
+ template <>
+ struct tuple_extract_impl<false>
+ {
+ template <class Tuple, class Predicate>
+ struct apply
+ {
+ // recursive application of tuple_extract on the tail of the tuple
+ typedef tuple_extract<typename Tuple::tail_type, Predicate> next;
+ typedef typename next::result_type result_type;
+
+ static result_type extract(Tuple const& x)
+ {
+ return next::extract(x.get_tail());
+ }
+ };
+ };
+
+ // A metafunction which selects a version of tuple_extract_impl to
+ // use for the implementation of tuple_extract
+ template <class Tuple, class Predicate>
+ struct tuple_extract_base_select
+ {
+ typedef typename Tuple::head_type head_type;
+ typedef typename mpl::apply1<Predicate, typename add_reference<head_type>::type>::type match_t;
+ BOOST_STATIC_CONSTANT(bool, match = match_t::value);
+ typedef typename tuple_extract_impl<match>::template apply<Tuple,Predicate> type;
+ };
+
+ template <class Tuple, class Predicate>
+ struct tuple_extract
+ : tuple_extract_base_select<
+ Tuple
+ , typename mpl::lambda<Predicate>::type
+ >::type
+ {
+ };
+
+
+ //
+ // Specialized extractors for the docstring, keywords, CallPolicies,
+ // and default implementation of virtual functions
+ //
+
+ template <class Tuple>
+ struct doc_extract
+ : tuple_extract<
+ Tuple
+ , mpl::not_<
+ mpl::or_<
+ indirect_traits::is_reference_to_class<mpl::_1>
+ , indirect_traits::is_reference_to_member_function_pointer<mpl::_1 >
+ >
+ >
+ >
+ {
+ };
+
+ template <class Tuple>
+ struct keyword_extract
+ : tuple_extract<Tuple, is_reference_to_keywords<mpl::_1 > >
+ {
+ };
+
+ template <class Tuple>
+ struct policy_extract
+ : tuple_extract<
+ Tuple
+ , mpl::and_<
+ mpl::not_<is_same<not_specified const&,mpl::_1> >
+ , indirect_traits::is_reference_to_class<mpl::_1 >
+ , mpl::not_<is_reference_to_keywords<mpl::_1 > >
+ >
+ >
+ {
+ };
+
+ template <class Tuple>
+ struct default_implementation_extract
+ : tuple_extract<
+ Tuple
+ , indirect_traits::is_reference_to_member_function_pointer<mpl::_1 >
+ >
+ {
+ };
+
+ //
+ // A helper class for decoding the optional arguments to def()
+ // invocations, which can be supplied in any order and are
+ // discriminated by their type properties. The template parameters
+ // are expected to be the types of the actual (optional) arguments
+ // passed to def().
+ //
+ template <class T1, class T2, class T3, class T4>
+ struct def_helper
+ {
+ // A tuple type which begins with references to the supplied
+ // arguments and ends with actual representatives of the default
+ // types.
+ typedef boost::tuples::tuple<
+ T1 const&
+ , T2 const&
+ , T3 const&
+ , T4 const&
+ , default_call_policies
+ , keywords<0>
+ , char const*
+ , void(not_specified::*)() // A function pointer type which is never an
+ // appropriate default implementation
+ > all_t;
+
+ // Constructors; these initialize an member of the tuple type
+ // shown above.
+ def_helper(T1 const& a1) : m_all(a1,m_nil,m_nil,m_nil) {}
+ def_helper(T1 const& a1, T2 const& a2) : m_all(a1,a2,m_nil,m_nil) {}
+ def_helper(T1 const& a1, T2 const& a2, T3 const& a3) : m_all(a1,a2,a3,m_nil) {}
+ def_helper(T1 const& a1, T2 const& a2, T3 const& a3, T4 const& a4) : m_all(a1,a2,a3,a4) {}
+
+ private: // types
+ typedef typename default_implementation_extract<all_t>::result_type default_implementation_t;
+
+ public: // Constants which can be used for static assertions.
+
+ // Users must not supply a default implementation for non-class
+ // methods.
+ BOOST_STATIC_CONSTANT(
+ bool, has_default_implementation = (
+ !is_same<default_implementation_t, void(not_specified::*)()>::value));
+
+ public: // Extractor functions which pull the appropriate value out
+ // of the tuple
+ char const* doc() const
+ {
+ return doc_extract<all_t>::extract(m_all);
+ }
+
+ typename keyword_extract<all_t>::result_type keywords() const
+ {
+ return keyword_extract<all_t>::extract(m_all);
+ }
+
+ typename policy_extract<all_t>::result_type policies() const
+ {
+ return policy_extract<all_t>::extract(m_all);
+ }
+
+ default_implementation_t default_implementation() const
+ {
+ return default_implementation_extract<all_t>::extract(m_all);
+ }
+
+ private: // data members
+ all_t m_all;
+ not_specified m_nil; // for filling in not_specified slots
+ };
+}
+
+}} // namespace boost::python::detail
+
+#endif // DEF_HELPER_DWA200287_HPP
diff --git a/boost/boost/python/detail/def_helper_fwd.hpp b/boost/boost/python/detail/def_helper_fwd.hpp
new file mode 100644
index 00000000000..31c22e97a34
--- /dev/null
+++ b/boost/boost/python/detail/def_helper_fwd.hpp
@@ -0,0 +1,17 @@
+// Copyright David Abrahams 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)
+#ifndef DEF_HELPER_FWD_DWA2003810_HPP
+# define DEF_HELPER_FWD_DWA2003810_HPP
+
+# include <boost/python/detail/not_specified.hpp>
+
+namespace boost { namespace python { namespace detail {
+
+template <class T1, class T2 = not_specified, class T3 = not_specified, class T4 = not_specified>
+struct def_helper;
+
+}}} // namespace boost::python::detail
+
+#endif // DEF_HELPER_FWD_DWA2003810_HPP
diff --git a/boost/boost/python/detail/defaults_def.hpp b/boost/boost/python/detail/defaults_def.hpp
new file mode 100644
index 00000000000..9ce98a62f62
--- /dev/null
+++ b/boost/boost/python/detail/defaults_def.hpp
@@ -0,0 +1,291 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// Copyright David Abrahams 2002, Joel de Guzman, 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)
+//
+///////////////////////////////////////////////////////////////////////////////
+#if !defined(BOOST_PP_IS_ITERATING)
+
+#ifndef DEFAULTS_DEF_JDG20020811_HPP
+#define DEFAULTS_DEF_JDG20020811_HPP
+
+#include <boost/python/detail/defaults_gen.hpp>
+#include <boost/type_traits.hpp>
+#include <boost/mpl/front.hpp>
+#include <boost/mpl/size.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/preprocessor/iterate.hpp>
+#include <boost/python/class_fwd.hpp>
+#include <boost/python/scope.hpp>
+#include <boost/preprocessor/debug/line.hpp>
+#include <boost/python/detail/scope.hpp>
+#include <boost/python/detail/make_keyword_range_fn.hpp>
+#include <boost/python/object/add_to_namespace.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace python {
+
+struct module;
+
+namespace objects
+{
+ struct class_base;
+}
+
+namespace detail
+{
+ // Called as::
+ //
+ // name_space_def(ns, "func", func, kw, policies, docstring, &ns)
+ //
+ // Dispatch to properly add f to namespace ns.
+ //
+ // @group define_stub_function helpers {
+ template <class Func, class CallPolicies, class NameSpaceT>
+ static void name_space_def(
+ NameSpaceT& name_space
+ , char const* name
+ , Func f
+ , keyword_range const& kw
+ , CallPolicies const& policies
+ , char const* doc
+ , objects::class_base*
+ )
+ {
+ typedef typename NameSpaceT::wrapped_type wrapped_type;
+
+ objects::add_to_namespace(
+ name_space, name,
+ detail::make_keyword_range_function(
+ f, policies, kw, get_signature(f, (wrapped_type*)0))
+ , doc
+ );
+ }
+
+ template <class Func, class CallPolicies>
+ static void name_space_def(
+ object& name_space
+ , char const* name
+ , Func f
+ , keyword_range const& kw
+ , CallPolicies const& policies
+ , char const* doc
+ , ...
+ )
+ {
+ scope within(name_space);
+
+ detail::scope_setattr_doc(
+ name
+ , detail::make_keyword_range_function(f, policies, kw)
+ , doc);
+ }
+
+ // For backward compatibility -- is this obsolete?
+ template <class Func, class CallPolicies, class NameSpaceT>
+ static void name_space_def(
+ NameSpaceT& name_space
+ , char const* name
+ , Func f
+ , keyword_range const& kw // ignored
+ , CallPolicies const& policies
+ , char const* doc
+ , module*
+ )
+ {
+ name_space.def(name, f, policies, doc);
+ }
+ // }
+
+
+ // Expansions of ::
+ //
+ // template <typename OverloadsT, typename NameSpaceT>
+ // inline void
+ // define_stub_function(
+ // char const* name, OverloadsT s, NameSpaceT& name_space, mpl::int_<N>)
+ // {
+ // name_space.def(name, &OverloadsT::func_N);
+ // }
+ //
+ // where N runs from 0 to BOOST_PYTHON_MAX_ARITY.
+ //
+ // The set of overloaded functions (define_stub_function) expects:
+ //
+ // 1. char const* name: function name that will be visible to python
+ // 2. OverloadsT: a function overloads struct (see defaults_gen.hpp)
+ // 3. NameSpaceT& name_space: a python::class_ or python::module instance
+ // 4. int_t<N>: the Nth overloaded function (OverloadsT::func_N)
+ // (see defaults_gen.hpp)
+ // 5. char const* name: doc string
+ //
+ // @group define_stub_function<N> {
+ template <int N>
+ struct define_stub_function {};
+
+#define BOOST_PP_ITERATION_PARAMS_1 \
+ (3, (0, BOOST_PYTHON_MAX_ARITY, <boost/python/detail/defaults_def.hpp>))
+
+#include BOOST_PP_ITERATE()
+
+ // }
+
+ // This helper template struct does the actual recursive
+ // definition. There's a generic version
+ // define_with_defaults_helper<N> and a terminal case
+ // define_with_defaults_helper<0>. The struct and its
+ // specialization has a sole static member function def that
+ // expects:
+ //
+ // 1. char const* name: function name that will be
+ // visible to python
+ //
+ // 2. OverloadsT: a function overloads struct
+ // (see defaults_gen.hpp)
+ //
+ // 3. NameSpaceT& name_space: a python::class_ or
+ // python::module instance
+ //
+ // 4. char const* name: doc string
+ //
+ // The def static member function calls a corresponding
+ // define_stub_function<N>. The general case recursively calls
+ // define_with_defaults_helper<N-1>::def until it reaches the
+ // terminal case case define_with_defaults_helper<0>.
+ template <int N>
+ struct define_with_defaults_helper {
+
+ template <class StubsT, class CallPolicies, class NameSpaceT>
+ static void
+ def(
+ char const* name,
+ StubsT stubs,
+ keyword_range kw,
+ CallPolicies const& policies,
+ NameSpaceT& name_space,
+ char const* doc)
+ {
+ // define the NTH stub function of stubs
+ define_stub_function<N>::define(name, stubs, kw, policies, name_space, 0);
+
+ if (kw.second > kw.first)
+ --kw.second;
+
+ // call the next define_with_defaults_helper
+ define_with_defaults_helper<N-1>::def(name, stubs, kw, policies, name_space, doc);
+ }
+ };
+
+ template <>
+ struct define_with_defaults_helper<0> {
+
+ template <class StubsT, class CallPolicies, class NameSpaceT>
+ static void
+ def(
+ char const* name,
+ StubsT stubs,
+ keyword_range const& kw,
+ CallPolicies const& policies,
+ NameSpaceT& name_space,
+ char const* doc)
+ {
+ // define the Oth stub function of stubs
+ define_stub_function<0>::define(name, stubs, kw, policies, name_space, doc);
+ // return
+ }
+ };
+
+ // define_with_defaults
+ //
+ // 1. char const* name: function name that will be
+ // visible to python
+ //
+ // 2. OverloadsT: a function overloads struct
+ // (see defaults_gen.hpp)
+ //
+ // 3. CallPolicies& policies: Call policies
+ // 4. NameSpaceT& name_space: a python::class_ or
+ // python::module instance
+ //
+ // 5. SigT sig: Function signature typelist
+ // (see defaults_gen.hpp)
+ //
+ // 6. char const* name: doc string
+ //
+ // This is the main entry point. This function recursively
+ // defines all stub functions of StubT (see defaults_gen.hpp) in
+ // NameSpaceT name_space which can be either a python::class_ or
+ // a python::module. The sig argument is a typelist that
+ // specifies the return type, the class (for member functions,
+ // and the arguments. Here are some SigT examples:
+ //
+ // int foo(int) mpl::vector<int, int>
+ // void bar(int, int) mpl::vector<void, int, int>
+ // void C::foo(int) mpl::vector<void, C, int>
+ //
+ template <class OverloadsT, class NameSpaceT, class SigT>
+ inline void
+ define_with_defaults(
+ char const* name,
+ OverloadsT const& overloads,
+ NameSpaceT& name_space,
+ SigT const&)
+ {
+ typedef typename mpl::front<SigT>::type return_type;
+ typedef typename OverloadsT::void_return_type void_return_type;
+ typedef typename OverloadsT::non_void_return_type non_void_return_type;
+
+ typedef typename mpl::if_c<
+ boost::is_same<void, return_type>::value
+ , void_return_type
+ , non_void_return_type
+ >::type stubs_type;
+
+ BOOST_STATIC_ASSERT(
+ (stubs_type::max_args) <= mpl::size<SigT>::value);
+
+ typedef typename stubs_type::template gen<SigT> gen_type;
+ define_with_defaults_helper<stubs_type::n_funcs-1>::def(
+ name
+ , gen_type()
+ , overloads.keywords()
+ , overloads.call_policies()
+ , name_space
+ , overloads.doc_string());
+ }
+
+} // namespace detail
+
+}} // namespace boost::python
+
+#endif // DEFAULTS_DEF_JDG20020811_HPP
+
+#else // defined(BOOST_PP_IS_ITERATING)
+// PP vertical iteration code
+
+
+template <>
+struct define_stub_function<BOOST_PP_ITERATION()> {
+ template <class StubsT, class CallPolicies, class NameSpaceT>
+ static void define(
+ char const* name
+ , StubsT const&
+ , keyword_range const& kw
+ , CallPolicies const& policies
+ , NameSpaceT& name_space
+ , char const* doc)
+ {
+ detail::name_space_def(
+ name_space
+ , name
+ , &StubsT::BOOST_PP_CAT(func_, BOOST_PP_ITERATION())
+ , kw
+ , policies
+ , doc
+ , &name_space);
+ }
+};
+
+#endif // !defined(BOOST_PP_IS_ITERATING)
diff --git a/boost/boost/python/detail/defaults_gen.hpp b/boost/boost/python/detail/defaults_gen.hpp
new file mode 100644
index 00000000000..4527495714d
--- /dev/null
+++ b/boost/boost/python/detail/defaults_gen.hpp
@@ -0,0 +1,388 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// Copyright David Abrahams 2002, Joel de Guzman, 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)
+//
+///////////////////////////////////////////////////////////////////////////////
+#ifndef DEFAULTS_GEN_JDG20020807_HPP
+#define DEFAULTS_GEN_JDG20020807_HPP
+
+#include <boost/python/detail/preprocessor.hpp>
+#include <boost/preprocessor/repeat.hpp>
+#include <boost/preprocessor/repeat_from_to.hpp>
+#include <boost/preprocessor/enum.hpp>
+#include <boost/preprocessor/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/tuple.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/arithmetic/sub.hpp>
+#include <boost/preprocessor/stringize.hpp>
+#include <boost/preprocessor/inc.hpp>
+#include <boost/preprocessor/empty.hpp>
+#include <boost/preprocessor/comma_if.hpp>
+#include <boost/config.hpp>
+#include <boost/mpl/begin_end.hpp>
+#include <boost/mpl/next.hpp>
+#include <boost/mpl/deref.hpp>
+#include <cstddef>
+
+namespace boost { namespace python {
+
+namespace detail
+{
+ // overloads_base is used as a base class for all function
+ // stubs. This class holds the doc_string of the stubs.
+ struct overloads_base
+ {
+ overloads_base(char const* doc_)
+ : m_doc(doc_) {}
+
+ overloads_base(char const* doc_, detail::keyword_range const& kw)
+ : m_doc(doc_), m_keywords(kw) {}
+
+ char const* doc_string() const
+ {
+ return m_doc;
+ }
+
+ detail::keyword_range const& keywords() const
+ {
+ return m_keywords;
+ }
+
+ private:
+ char const* m_doc;
+ detail::keyword_range m_keywords;
+ };
+
+ // overloads_proxy is generated by the overloads_common operator[] (see
+ // below). This class holds a user defined call policies of the stubs.
+ template <class CallPoliciesT, class OverloadsT>
+ struct overloads_proxy
+ : public overloads_base
+ {
+ typedef typename OverloadsT::non_void_return_type non_void_return_type;
+ typedef typename OverloadsT::void_return_type void_return_type;
+
+ overloads_proxy(
+ CallPoliciesT const& policies_
+ , char const* doc
+ , keyword_range const& kw
+ )
+ : overloads_base(doc, kw)
+ , policies(policies_)
+ {}
+
+ CallPoliciesT
+ call_policies() const
+ {
+ return policies;
+ }
+
+ CallPoliciesT policies;
+ };
+
+ // overloads_common is our default function stubs base class. This
+ // class returns the default_call_policies in its call_policies()
+ // member function. It can generate a overloads_proxy however through
+ // its operator[]
+ template <class DerivedT>
+ struct overloads_common
+ : public overloads_base
+ {
+ overloads_common(char const* doc)
+ : overloads_base(doc) {}
+
+ overloads_common(char const* doc, keyword_range const& kw)
+ : overloads_base(doc, kw) {}
+
+ default_call_policies
+ call_policies() const
+ {
+ return default_call_policies();
+ }
+
+ template <class CallPoliciesT>
+ overloads_proxy<CallPoliciesT, DerivedT>
+ operator[](CallPoliciesT const& policies) const
+ {
+ return overloads_proxy<CallPoliciesT, DerivedT>(
+ policies, this->doc_string(), this->keywords());
+ }
+ };
+
+}}} // namespace boost::python::detail
+
+
+#define BOOST_PYTHON_TYPEDEF_GEN(z, index, data) \
+ typedef typename ::boost::mpl::next<BOOST_PP_CAT(iter, index)>::type \
+ BOOST_PP_CAT(iter, BOOST_PP_INC(index)); \
+ typedef typename ::boost::mpl::deref<BOOST_PP_CAT(iter, index)>::type \
+ BOOST_PP_CAT(T, index);
+
+#define BOOST_PYTHON_FUNC_WRAPPER_GEN(z, index, data) \
+ static RT BOOST_PP_CAT(func_, \
+ BOOST_PP_SUB_D(1, index, BOOST_PP_TUPLE_ELEM(3, 1, data))) ( \
+ BOOST_PP_ENUM_BINARY_PARAMS_Z( \
+ 1, index, T, arg)) \
+ { \
+ BOOST_PP_TUPLE_ELEM(3, 2, data) \
+ BOOST_PP_TUPLE_ELEM(3, 0, data)( \
+ BOOST_PP_ENUM_PARAMS( \
+ index, \
+ arg)); \
+ }
+
+#define BOOST_PYTHON_GEN_FUNCTION(fname, fstubs_name, n_args, n_dflts, ret) \
+ struct fstubs_name \
+ { \
+ BOOST_STATIC_CONSTANT(int, n_funcs = BOOST_PP_INC(n_dflts)); \
+ BOOST_STATIC_CONSTANT(int, max_args = n_funcs); \
+ \
+ template <typename SigT> \
+ struct gen \
+ { \
+ typedef typename ::boost::mpl::begin<SigT>::type rt_iter; \
+ typedef typename ::boost::mpl::deref<rt_iter>::type RT; \
+ typedef typename ::boost::mpl::next<rt_iter>::type iter0; \
+ \
+ BOOST_PP_REPEAT_2ND( \
+ n_args, \
+ BOOST_PYTHON_TYPEDEF_GEN, \
+ 0) \
+ \
+ BOOST_PP_REPEAT_FROM_TO_2( \
+ BOOST_PP_SUB_D(1, n_args, n_dflts), \
+ BOOST_PP_INC(n_args), \
+ BOOST_PYTHON_FUNC_WRAPPER_GEN, \
+ (fname, BOOST_PP_SUB_D(1, n_args, n_dflts), ret)) \
+ }; \
+ }; \
+
+///////////////////////////////////////////////////////////////////////////////
+#define BOOST_PYTHON_MEM_FUNC_WRAPPER_GEN(z, index, data) \
+ static RT BOOST_PP_CAT(func_, \
+ BOOST_PP_SUB_D(1, index, BOOST_PP_TUPLE_ELEM(3, 1, data))) ( \
+ ClassT obj BOOST_PP_COMMA_IF(index) \
+ BOOST_PP_ENUM_BINARY_PARAMS_Z(1, index, T, arg) \
+ ) \
+ { \
+ BOOST_PP_TUPLE_ELEM(3, 2, data) obj.BOOST_PP_TUPLE_ELEM(3, 0, data)( \
+ BOOST_PP_ENUM_PARAMS(index, arg) \
+ ); \
+ }
+
+#define BOOST_PYTHON_GEN_MEM_FUNCTION(fname, fstubs_name, n_args, n_dflts, ret) \
+ struct fstubs_name \
+ { \
+ BOOST_STATIC_CONSTANT(int, n_funcs = BOOST_PP_INC(n_dflts)); \
+ BOOST_STATIC_CONSTANT(int, max_args = n_funcs + 1); \
+ \
+ template <typename SigT> \
+ struct gen \
+ { \
+ typedef typename ::boost::mpl::begin<SigT>::type rt_iter; \
+ typedef typename ::boost::mpl::deref<rt_iter>::type RT; \
+ \
+ typedef typename ::boost::mpl::next<rt_iter>::type class_iter; \
+ typedef typename ::boost::mpl::deref<class_iter>::type ClassT; \
+ typedef typename ::boost::mpl::next<class_iter>::type iter0; \
+ \
+ BOOST_PP_REPEAT_2ND( \
+ n_args, \
+ BOOST_PYTHON_TYPEDEF_GEN, \
+ 0) \
+ \
+ BOOST_PP_REPEAT_FROM_TO_2( \
+ BOOST_PP_SUB_D(1, n_args, n_dflts), \
+ BOOST_PP_INC(n_args), \
+ BOOST_PYTHON_MEM_FUNC_WRAPPER_GEN, \
+ (fname, BOOST_PP_SUB_D(1, n_args, n_dflts), ret)) \
+ }; \
+ };
+
+#define BOOST_PYTHON_OVERLOAD_CONSTRUCTORS(fstubs_name, n_args, n_dflts) \
+ fstubs_name(char const* doc = 0) \
+ : ::boost::python::detail::overloads_common<fstubs_name>(doc) {} \
+ template <std::size_t N> \
+ fstubs_name(char const* doc, ::boost::python::detail::keywords<N> const& keywords) \
+ : ::boost::python::detail::overloads_common<fstubs_name>( \
+ doc, keywords.range()) \
+ { \
+ typedef typename ::boost::python::detail:: \
+ error::more_keywords_than_function_arguments< \
+ N,n_args>::too_many_keywords assertion; \
+ } \
+ template <std::size_t N> \
+ fstubs_name(::boost::python::detail::keywords<N> const& keywords, char const* doc = 0) \
+ : ::boost::python::detail::overloads_common<fstubs_name>( \
+ doc, keywords.range()) \
+ { \
+ typedef typename ::boost::python::detail:: \
+ error::more_keywords_than_function_arguments< \
+ N,n_args>::too_many_keywords assertion; \
+ }
+
+# if defined(BOOST_NO_VOID_RETURNS)
+
+# define BOOST_PYTHON_GEN_FUNCTION_STUB(fname, fstubs_name, n_args, n_dflts) \
+ struct fstubs_name \
+ : public ::boost::python::detail::overloads_common<fstubs_name> \
+ { \
+ BOOST_PYTHON_GEN_FUNCTION( \
+ fname, non_void_return_type, n_args, n_dflts, return) \
+ BOOST_PYTHON_GEN_FUNCTION( \
+ fname, void_return_type, n_args, n_dflts, ;) \
+ \
+ BOOST_PYTHON_OVERLOAD_CONSTRUCTORS(fstubs_name, n_args, n_dflts) \
+ };
+
+# define BOOST_PYTHON_GEN_MEM_FUNCTION_STUB(fname, fstubs_name, n_args, n_dflts) \
+ struct fstubs_name \
+ : public ::boost::python::detail::overloads_common<fstubs_name> \
+ { \
+ BOOST_PYTHON_GEN_MEM_FUNCTION( \
+ fname, non_void_return_type, n_args, n_dflts, return) \
+ BOOST_PYTHON_GEN_MEM_FUNCTION( \
+ fname, void_return_type, n_args, n_dflts, ;) \
+ \
+ BOOST_PYTHON_OVERLOAD_CONSTRUCTORS(fstubs_name, n_args, n_dflts) \
+ };
+
+# else // !defined(BOOST_NO_VOID_RETURNS)
+
+# define BOOST_PYTHON_GEN_FUNCTION_STUB(fname, fstubs_name, n_args, n_dflts) \
+ struct fstubs_name \
+ : public ::boost::python::detail::overloads_common<fstubs_name> \
+ { \
+ BOOST_PYTHON_GEN_FUNCTION( \
+ fname, non_void_return_type, n_args, n_dflts, return) \
+ \
+ typedef non_void_return_type void_return_type; \
+ BOOST_PYTHON_OVERLOAD_CONSTRUCTORS(fstubs_name, n_args, n_dflts) \
+ };
+
+
+# define BOOST_PYTHON_GEN_MEM_FUNCTION_STUB(fname, fstubs_name, n_args, n_dflts) \
+ struct fstubs_name \
+ : public ::boost::python::detail::overloads_common<fstubs_name> \
+ { \
+ BOOST_PYTHON_GEN_MEM_FUNCTION( \
+ fname, non_void_return_type, n_args, n_dflts, return) \
+ \
+ typedef non_void_return_type void_return_type; \
+ BOOST_PYTHON_OVERLOAD_CONSTRUCTORS(fstubs_name, n_args, n_dflts) \
+ };
+
+# endif // !defined(BOOST_NO_VOID_RETURNS)
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// MAIN MACROS
+//
+// Given generator_name, fname, min_args and max_args, These macros
+// generate function stubs that forward to a function or member function
+// named fname. max_args is the arity of the function or member function
+// fname. fname can have default arguments. min_args is the minimum
+// arity that fname can accept.
+//
+// There are two versions:
+//
+// 1. BOOST_PYTHON_FUNCTION_OVERLOADS for free functions
+// 2. BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS for member functions.
+//
+// For instance, given a function:
+//
+// int
+// foo(int a, char b = 1, unsigned c = 2, double d = 3)
+// {
+// return a + b + c + int(d);
+// }
+//
+// The macro invocation:
+//
+// BOOST_PYTHON_FUNCTION_OVERLOADS(foo_stubs, foo, 1, 4)
+//
+// Generates this code:
+//
+// struct foo_stubsNonVoid
+// {
+// static const int n_funcs = 4;
+// static const int max_args = n_funcs;
+//
+// template <typename SigT>
+// struct gen
+// {
+// typedef typename ::boost::mpl::begin<SigT>::type rt_iter;
+// typedef typename rt_iter::type RT;
+// typedef typename rt_iter::next iter0;
+// typedef typename iter0::type T0;
+// typedef typename iter0::next iter1;
+// typedef typename iter1::type T1;
+// typedef typename iter1::next iter2;
+// typedef typename iter2::type T2;
+// typedef typename iter2::next iter3;
+// typedef typename iter3::type T3;
+// typedef typename iter3::next iter4;
+//
+// static RT func_0(T0 arg0)
+// { return foo(arg0); }
+//
+// static RT func_1(T0 arg0, T1 arg1)
+// { return foo(arg0, arg1); }
+//
+// static RT func_2(T0 arg0, T1 arg1, T2 arg2)
+// { return foo(arg0, arg1, arg2); }
+//
+// static RT func_3(T0 arg0, T1 arg1, T2 arg2, T3 arg3)
+// { return foo(arg0, arg1, arg2, arg3); }
+// };
+// };
+//
+// struct foo_overloads
+// : public boost::python::detail::overloads_common<foo_overloads>
+// {
+// typedef foo_overloadsNonVoid non_void_return_type;
+// typedef foo_overloadsNonVoid void_return_type;
+//
+// foo_overloads(char const* doc = 0)
+// : boost::python::detail::overloads_common<foo_overloads>(doc) {}
+// };
+//
+// The typedefs non_void_return_type and void_return_type are
+// used to handle compilers that do not support void returns. The
+// example above typedefs non_void_return_type and
+// void_return_type to foo_overloadsNonVoid. On compilers that do
+// not support void returns, there are two versions:
+// foo_overloadsNonVoid and foo_overloadsVoid. The "Void"
+// version is almost identical to the "NonVoid" version except
+// for the return type (void) and the lack of the return keyword.
+//
+// See the overloads_common above for a description of the
+// foo_overloads' base class.
+//
+///////////////////////////////////////////////////////////////////////////////
+#define BOOST_PYTHON_FUNCTION_OVERLOADS(generator_name, fname, min_args, max_args) \
+ BOOST_PYTHON_GEN_FUNCTION_STUB( \
+ fname, \
+ generator_name, \
+ max_args, \
+ BOOST_PP_SUB_D(1, max_args, min_args))
+
+#define BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(generator_name, fname, min_args, max_args) \
+ BOOST_PYTHON_GEN_MEM_FUNCTION_STUB( \
+ fname, \
+ generator_name, \
+ max_args, \
+ BOOST_PP_SUB_D(1, max_args, min_args))
+
+// deprecated macro names (to be removed)
+#define BOOST_PYTHON_FUNCTION_GENERATOR BOOST_PYTHON_FUNCTION_OVERLOADS
+#define BOOST_PYTHON_MEM_FUN_GENERATOR BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS
+
+///////////////////////////////////////////////////////////////////////////////
+#endif // DEFAULTS_GEN_JDG20020807_HPP
+
+
diff --git a/boost/boost/python/detail/dependent.hpp b/boost/boost/python/detail/dependent.hpp
new file mode 100644
index 00000000000..70392c4d780
--- /dev/null
+++ b/boost/boost/python/detail/dependent.hpp
@@ -0,0 +1,27 @@
+// Copyright David Abrahams 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)
+#ifndef DEPENDENT_DWA200286_HPP
+# define DEPENDENT_DWA200286_HPP
+
+namespace boost { namespace python { namespace detail {
+
+// A way to turn a concrete type T into a type dependent on U. This
+// keeps conforming compilers (those implementing proper 2-phase
+// name lookup for templates) from complaining about incomplete
+// types in situations where it would otherwise be inconvenient or
+// impossible to re-order code so that all types are defined in time.
+
+// One such use is when we must return an incomplete T from a member
+// function template (which must be defined in the class body to
+// keep MSVC happy).
+template <class T, class U>
+struct dependent
+{
+ typedef T type;
+};
+
+}}} // namespace boost::python::detail
+
+#endif // DEPENDENT_DWA200286_HPP
diff --git a/boost/boost/python/detail/destroy.hpp b/boost/boost/python/detail/destroy.hpp
new file mode 100644
index 00000000000..7df31d4c2a1
--- /dev/null
+++ b/boost/boost/python/detail/destroy.hpp
@@ -0,0 +1,106 @@
+// Copyright David Abrahams 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)
+#ifndef DESTROY_DWA2002221_HPP
+# define DESTROY_DWA2002221_HPP
+
+# include <boost/type_traits/is_array.hpp>
+# include <boost/detail/workaround.hpp>
+# if BOOST_WORKAROUND(BOOST_MSVC, == 1300)
+# include <boost/type_traits/is_enum.hpp>
+# endif
+namespace boost { namespace python { namespace detail {
+
+template <
+ bool array
+# if BOOST_WORKAROUND(BOOST_MSVC, == 1300)
+ , bool enum_ // vc7 has a problem destroying enums
+# endif
+ > struct value_destroyer;
+
+template <>
+struct value_destroyer<
+ false
+# if BOOST_WORKAROUND(BOOST_MSVC, == 1300)
+ , false
+# endif
+ >
+{
+ template <class T>
+ static void execute(T const volatile* p)
+ {
+ p->T::~T();
+ }
+};
+
+template <>
+struct value_destroyer<
+ true
+# if BOOST_WORKAROUND(BOOST_MSVC, == 1300)
+ , false
+# endif
+ >
+{
+ template <class A, class T>
+ static void execute(A*, T const volatile* const first)
+ {
+ for (T const volatile* p = first; p != first + sizeof(A)/sizeof(T); ++p)
+ {
+ value_destroyer<
+ boost::is_array<T>::value
+# if BOOST_WORKAROUND(BOOST_MSVC, == 1300)
+ , boost::is_enum<T>::value
+# endif
+ >::execute(p);
+ }
+ }
+
+ template <class T>
+ static void execute(T const volatile* p)
+ {
+ execute(p, *p);
+ }
+};
+
+# if BOOST_WORKAROUND(BOOST_MSVC, == 1300)
+template <>
+struct value_destroyer<true,true>
+{
+ template <class T>
+ static void execute(T const volatile*)
+ {
+ }
+};
+
+template <>
+struct value_destroyer<false,true>
+{
+ template <class T>
+ static void execute(T const volatile*)
+ {
+ }
+};
+# endif
+template <class T>
+inline void destroy_referent_impl(void* p, T& (*)())
+{
+ // note: cv-qualification needed for MSVC6
+ // must come *before* T for metrowerks
+ value_destroyer<
+ (boost::is_array<T>::value)
+# if BOOST_WORKAROUND(BOOST_MSVC, == 1300)
+ , (boost::is_enum<T>::value)
+# endif
+ >::execute((const volatile T*)p);
+}
+
+template <class T>
+inline void destroy_referent(void* p, T(*)() = 0)
+{
+ destroy_referent_impl(p, (T(*)())0);
+}
+
+}}} // namespace boost::python::detail
+
+#endif // DESTROY_DWA2002221_HPP
diff --git a/boost/boost/python/detail/enable_if.hpp b/boost/boost/python/detail/enable_if.hpp
new file mode 100644
index 00000000000..46a1d532b3d
--- /dev/null
+++ b/boost/boost/python/detail/enable_if.hpp
@@ -0,0 +1,72 @@
+// Copyright David Abrahams 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)
+#ifndef ENABLE_IF_DWA2004722_HPP
+# define ENABLE_IF_DWA2004722_HPP
+
+# include <boost/python/detail/sfinae.hpp>
+# include <boost/detail/workaround.hpp>
+
+# if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+# include <boost/mpl/if.hpp>
+
+namespace boost { namespace python { namespace detail {
+
+template <class T> struct always_void { typedef void type; };
+
+template <class C, class T = int>
+struct enable_if_arg
+{
+ typedef typename mpl::if_<C,T,int&>::type type;
+};
+
+template <class C, class T = int>
+struct disable_if_arg
+{
+ typedef typename mpl::if_<C,int&,T>::type type;
+};
+
+template <class C, class T = typename always_void<C>::type>
+struct enable_if_ret
+{
+ typedef typename mpl::if_<C,T,int[2]>::type type;
+};
+
+template <class C, class T = typename always_void<C>::type>
+struct disable_if_ret
+{
+ typedef typename mpl::if_<C,int[2],T>::type type;
+};
+
+}}} // namespace boost::python::detail
+
+# elif !defined(BOOST_NO_SFINAE)
+# include <boost/utility/enable_if.hpp>
+
+namespace boost { namespace python { namespace detail {
+
+template <class C, class T = int>
+struct enable_if_arg
+ : enable_if<C,T>
+{};
+
+template <class C, class T = int>
+struct disable_if_arg
+ : disable_if<C,T>
+{};
+
+template <class C, class T = void>
+struct enable_if_ret
+ : enable_if<C,T>
+{};
+
+template <class C, class T = void>
+struct disable_if_ret
+ : disable_if<C,T>
+{};
+
+}}} // namespace boost::python::detail
+
+# endif
+
+#endif // ENABLE_IF_DWA2004722_HPP
diff --git a/boost/boost/python/detail/exception_handler.hpp b/boost/boost/python/detail/exception_handler.hpp
new file mode 100644
index 00000000000..7f49868be67
--- /dev/null
+++ b/boost/boost/python/detail/exception_handler.hpp
@@ -0,0 +1,48 @@
+// Copyright David Abrahams 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)
+#ifndef EXCEPTION_HANDLER_DWA2002810_HPP
+# define EXCEPTION_HANDLER_DWA2002810_HPP
+
+# include <boost/python/detail/config.hpp>
+# include <boost/function/function0.hpp>
+# include <boost/function/function2.hpp>
+
+namespace boost { namespace python { namespace detail {
+
+struct BOOST_PYTHON_DECL_FORWARD exception_handler;
+
+typedef function2<bool, exception_handler const&, function0<void> const&> handler_function;
+
+struct BOOST_PYTHON_DECL exception_handler
+{
+ private: // types
+
+ public:
+ explicit exception_handler(handler_function const& impl);
+
+ inline bool handle(function0<void> const& f) const;
+
+ bool operator()(function0<void> const& f) const;
+
+ static exception_handler* chain;
+
+ private:
+ static exception_handler* tail;
+
+ handler_function m_impl;
+ exception_handler* m_next;
+};
+
+
+inline bool exception_handler::handle(function0<void> const& f) const
+{
+ return this->m_impl(*this, f);
+}
+
+BOOST_PYTHON_DECL void register_exception_handler(handler_function const& f);
+
+}}} // namespace boost::python::detail
+
+#endif // EXCEPTION_HANDLER_DWA2002810_HPP
diff --git a/boost/boost/python/detail/force_instantiate.hpp b/boost/boost/python/detail/force_instantiate.hpp
new file mode 100644
index 00000000000..63e28749450
--- /dev/null
+++ b/boost/boost/python/detail/force_instantiate.hpp
@@ -0,0 +1,32 @@
+// Copyright David Abrahams 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)
+#ifndef FORCE_INSTANTIATE_DWA200265_HPP
+# define FORCE_INSTANTIATE_DWA200265_HPP
+
+namespace boost { namespace python { namespace detail {
+
+// Allows us to force the argument to be instantiated without
+// incurring unused variable warnings
+
+# if !defined(BOOST_MSVC) || BOOST_MSVC < 1300 || _MSC_FULL_VER > 13102196
+
+template <class T>
+inline void force_instantiate(T const&) {}
+
+# else
+
+# pragma optimize("g", off)
+inline void force_instantiate_impl(...) {}
+# pragma optimize("", on)
+template <class T>
+inline void force_instantiate(T const& x)
+{
+ detail::force_instantiate_impl(&x);
+}
+# endif
+
+}}} // namespace boost::python::detail
+
+#endif // FORCE_INSTANTIATE_DWA200265_HPP
diff --git a/boost/boost/python/detail/if_else.hpp b/boost/boost/python/detail/if_else.hpp
new file mode 100644
index 00000000000..244e63a8aec
--- /dev/null
+++ b/boost/boost/python/detail/if_else.hpp
@@ -0,0 +1,116 @@
+// Copyright David Abrahams 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)
+#ifndef IF_ELSE_DWA2002322_HPP
+# define IF_ELSE_DWA2002322_HPP
+# include <boost/config.hpp>
+
+namespace boost { namespace python { namespace detail {
+
+template <class T> struct elif_selected;
+
+template <class T>
+struct if_selected
+{
+ template <bool b>
+ struct elif : elif_selected<T>
+ {
+ };
+
+ template <class U>
+ struct else_
+ {
+ typedef T type;
+ };
+};
+
+# if defined(BOOST_MSVC) && (BOOST_MSVC == 1300)
+namespace msvc70_aux {
+
+template< bool > struct inherit_from
+{
+ template< typename T > struct result
+ {
+ typedef T type;
+ };
+};
+
+template<> struct inherit_from<true>
+{
+ template< typename T > struct result
+ {
+ struct type {};
+ };
+};
+
+template< typename T >
+struct never_true
+{
+ BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+} // namespace msvc70_aux
+
+#endif // # if defined(BOOST_MSVC) && (BOOST_MSVC == 1300)
+
+template <class T>
+struct elif_selected
+{
+# if !(defined(BOOST_MSVC) && BOOST_MSVC <= 1300 || defined(__MWERKS__) && __MWERKS__ <= 0x2407)
+ template <class U> class then;
+# elif defined(BOOST_MSVC) && (BOOST_MSVC == 1300)
+ template <class U>
+ struct then : msvc70_aux::inherit_from< msvc70_aux::never_true<U>::value >
+ ::template result< if_selected<T> >::type
+ {
+ };
+# else
+ template <class U>
+ struct then : if_selected<T>
+ {
+ };
+# endif
+};
+
+# if !(defined(BOOST_MSVC) && BOOST_MSVC <= 1300 || defined(__MWERKS__) && __MWERKS__ <= 0x2407)
+template <class T>
+template <class U>
+class elif_selected<T>::then : public if_selected<T>
+{
+};
+# endif
+
+template <bool b> struct if_
+{
+ template <class T>
+ struct then : if_selected<T>
+ {
+ };
+};
+
+struct if_unselected
+{
+ template <bool b> struct elif : if_<b>
+ {
+ };
+
+ template <class U>
+ struct else_
+ {
+ typedef U type;
+ };
+};
+
+template <>
+struct if_<false>
+{
+ template <class T>
+ struct then : if_unselected
+ {
+ };
+};
+
+}}} // namespace boost::python::detail
+
+#endif // IF_ELSE_DWA2002322_HPP
diff --git a/boost/boost/python/detail/indirect_traits.hpp b/boost/boost/python/detail/indirect_traits.hpp
new file mode 100644
index 00000000000..ce8ba310a28
--- /dev/null
+++ b/boost/boost/python/detail/indirect_traits.hpp
@@ -0,0 +1,13 @@
+// Copyright David Abrahams 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)
+#ifndef INDIRECT_TRAITS_DWA2004915_HPP
+# define INDIRECT_TRAITS_DWA2004915_HPP
+
+# include <boost/detail/indirect_traits.hpp>
+
+namespace boost { namespace python {
+namespace indirect_traits = boost::detail::indirect_traits;
+}} // namespace boost::python::detail
+
+#endif // INDIRECT_TRAITS_DWA2004915_HPP
diff --git a/boost/boost/python/detail/invoke.hpp b/boost/boost/python/detail/invoke.hpp
new file mode 100644
index 00000000000..939fa118183
--- /dev/null
+++ b/boost/boost/python/detail/invoke.hpp
@@ -0,0 +1,100 @@
+#if !defined(BOOST_PP_IS_ITERATING)
+
+// Copyright David Abrahams 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)
+# ifndef INVOKE_DWA20021122_HPP
+# define INVOKE_DWA20021122_HPP
+
+# include <boost/python/detail/prefix.hpp>
+# include <boost/python/detail/preprocessor.hpp>
+# include <boost/python/detail/none.hpp>
+
+# include <boost/type_traits/is_member_function_pointer.hpp>
+
+# include <boost/preprocessor/iterate.hpp>
+# include <boost/preprocessor/facilities/intercept.hpp>
+# include <boost/preprocessor/repetition/enum_trailing_params.hpp>
+# include <boost/preprocessor/repetition/enum_trailing_binary_params.hpp>
+# include <boost/preprocessor/repetition/enum_binary_params.hpp>
+# include <boost/python/to_python_value.hpp>
+
+// This file declares a series of overloaded invoke(...) functions,
+// used to invoke wrapped C++ function (object)s from Python. Each one
+// accepts:
+//
+// - a tag which identifies the invocation syntax (e.g. member
+// functions must be invoked with a different syntax from regular
+// functions)
+//
+// - a pointer to a result converter type, used solely as a way of
+// transmitting the type of the result converter to the function (or
+// an int, if the return type is void).
+//
+// - the "function", which may be a function object, a function or
+// member function pointer, or a defaulted_virtual_fn.
+//
+// - The arg_from_python converters for each of the arguments to be
+// passed to the function being invoked.
+
+namespace boost { namespace python { namespace detail {
+
+// This "result converter" is really just used as a dispatch tag to
+// invoke(...), selecting the appropriate implementation
+typedef int void_result_to_python;
+
+template <bool void_return, bool member>
+struct invoke_tag_ {};
+
+// A metafunction returning the appropriate tag type for invoking an
+// object of type F with return type R.
+template <class R, class F>
+struct invoke_tag
+ : invoke_tag_<
+ is_same<R,void>::value
+ , is_member_function_pointer<F>::value
+ >
+{
+};
+
+# define BOOST_PP_ITERATION_PARAMS_1 \
+ (3, (0, BOOST_PYTHON_MAX_ARITY, <boost/python/detail/invoke.hpp>))
+# include BOOST_PP_ITERATE()
+
+}}} // namespace boost::python::detail
+
+# endif // INVOKE_DWA20021122_HPP
+#else
+
+# define N BOOST_PP_ITERATION()
+
+template <class RC, class F BOOST_PP_ENUM_TRAILING_PARAMS_Z(1, N, class AC)>
+inline PyObject* invoke(invoke_tag_<false,false>, RC const& rc, F& f BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_Z(1, N, AC, & ac) )
+{
+ return rc(f( BOOST_PP_ENUM_BINARY_PARAMS_Z(1, N, ac, () BOOST_PP_INTERCEPT) ));
+}
+
+template <class RC, class F BOOST_PP_ENUM_TRAILING_PARAMS_Z(1, N, class AC)>
+inline PyObject* invoke(invoke_tag_<true,false>, RC const&, F& f BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_Z(1, N, AC, & ac) )
+{
+ f( BOOST_PP_ENUM_BINARY_PARAMS_Z(1, N, ac, () BOOST_PP_INTERCEPT) );
+ return none();
+}
+
+template <class RC, class F, class TC BOOST_PP_ENUM_TRAILING_PARAMS_Z(1, N, class AC)>
+inline PyObject* invoke(invoke_tag_<false,true>, RC const& rc, F& f, TC& tc BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_Z(1, N, AC, & ac) )
+{
+ return rc( (tc().*f)(BOOST_PP_ENUM_BINARY_PARAMS_Z(1, N, ac, () BOOST_PP_INTERCEPT)) );
+}
+
+template <class RC, class F, class TC BOOST_PP_ENUM_TRAILING_PARAMS_Z(1, N, class AC)>
+inline PyObject* invoke(invoke_tag_<true,true>, RC const&, F& f, TC& tc BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_Z(1, N, AC, & ac) )
+{
+ (tc().*f)(BOOST_PP_ENUM_BINARY_PARAMS_Z(1, N, ac, () BOOST_PP_INTERCEPT));
+ return none();
+}
+
+# undef N
+
+#endif // BOOST_PP_IS_ITERATING
diff --git a/boost/boost/python/detail/is_auto_ptr.hpp b/boost/boost/python/detail/is_auto_ptr.hpp
new file mode 100644
index 00000000000..3b8198b8dda
--- /dev/null
+++ b/boost/boost/python/detail/is_auto_ptr.hpp
@@ -0,0 +1,30 @@
+// Copyright David Abrahams 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)
+#ifndef IS_AUTO_PTR_DWA2003224_HPP
+# define IS_AUTO_PTR_DWA2003224_HPP
+
+# ifndef BOOST_NO_AUTO_PTR
+# include <boost/python/detail/is_xxx.hpp>
+# include <memory>
+# endif
+
+namespace boost { namespace python { namespace detail {
+
+# if !defined(BOOST_NO_AUTO_PTR)
+
+BOOST_PYTHON_IS_XXX_DEF(auto_ptr, std::auto_ptr, 1)
+
+# else
+
+template <class T>
+struct is_auto_ptr : mpl::false_
+{
+};
+
+# endif
+
+}}} // namespace boost::python::detail
+
+#endif // IS_AUTO_PTR_DWA2003224_HPP
diff --git a/boost/boost/python/detail/is_shared_ptr.hpp b/boost/boost/python/detail/is_shared_ptr.hpp
new file mode 100644
index 00000000000..547af3f1cba
--- /dev/null
+++ b/boost/boost/python/detail/is_shared_ptr.hpp
@@ -0,0 +1,17 @@
+// Copyright David Abrahams 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)
+#ifndef IS_SHARED_PTR_DWA2003224_HPP
+# define IS_SHARED_PTR_DWA2003224_HPP
+
+# include <boost/python/detail/is_xxx.hpp>
+# include <boost/shared_ptr.hpp>
+
+namespace boost { namespace python { namespace detail {
+
+BOOST_PYTHON_IS_XXX_DEF(shared_ptr, shared_ptr, 1)
+
+}}} // namespace boost::python::detail
+
+#endif // IS_SHARED_PTR_DWA2003224_HPP
diff --git a/boost/boost/python/detail/is_wrapper.hpp b/boost/boost/python/detail/is_wrapper.hpp
new file mode 100644
index 00000000000..d7bce7b6273
--- /dev/null
+++ b/boost/boost/python/detail/is_wrapper.hpp
@@ -0,0 +1,29 @@
+// Copyright David Abrahams 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)
+#ifndef IS_WRAPPER_DWA2004723_HPP
+# define IS_WRAPPER_DWA2004723_HPP
+
+# include <boost/python/detail/prefix.hpp>
+# include <boost/mpl/bool.hpp>
+
+namespace boost { namespace python {
+
+template <class T> class wrapper;
+
+namespace detail
+{
+ typedef char (&is_not_wrapper)[2];
+ is_not_wrapper is_wrapper_helper(...);
+ template <class T>
+ char is_wrapper_helper(wrapper<T> const volatile*);
+
+ // A metafunction returning true iff T is [derived from] wrapper<U>
+ template <class T>
+ struct is_wrapper
+ : mpl::bool_<(sizeof(detail::is_wrapper_helper((T*)0)) == 1)>
+ {};
+
+}}} // namespace boost::python::detail
+
+#endif // IS_WRAPPER_DWA2004723_HPP
diff --git a/boost/boost/python/detail/is_xxx.hpp b/boost/boost/python/detail/is_xxx.hpp
new file mode 100644
index 00000000000..9ddfafd3c07
--- /dev/null
+++ b/boost/boost/python/detail/is_xxx.hpp
@@ -0,0 +1,13 @@
+// Copyright David Abrahams 2005.
+// 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 IS_XXX_DWA2003224_HPP
+# define IS_XXX_DWA2003224_HPP
+
+# include <boost/detail/is_xxx.hpp>
+
+# define BOOST_PYTHON_IS_XXX_DEF(name, qualified_name, nargs) \
+ BOOST_DETAIL_IS_XXX_DEF(name, qualified_name, nargs)
+
+#endif // IS_XXX_DWA2003224_HPP
diff --git a/boost/boost/python/detail/make_keyword_range_fn.hpp b/boost/boost/python/detail/make_keyword_range_fn.hpp
new file mode 100644
index 00000000000..bc959997a8e
--- /dev/null
+++ b/boost/boost/python/detail/make_keyword_range_fn.hpp
@@ -0,0 +1,69 @@
+// Copyright David Abrahams 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)
+#ifndef MAKE_KEYWORD_RANGE_FN_DWA2002927_HPP
+# define MAKE_KEYWORD_RANGE_FN_DWA2002927_HPP
+
+# include <boost/python/make_function.hpp>
+# include <boost/python/args_fwd.hpp>
+
+# include <boost/python/object/make_holder.hpp>
+
+# include <boost/mpl/size.hpp>
+
+
+namespace boost { namespace python { namespace detail {
+
+// Think of this as a version of make_function without a compile-time
+// check that the size of kw is no greater than the expected arity of
+// F. This version is needed when defining functions with default
+// arguments, because compile-time information about the number of
+// keywords is missing for all but the initial function definition.
+//
+// @group make_keyword_range_function {
+template <class F, class Policies>
+object make_keyword_range_function(
+ F f
+ , Policies const& policies
+ , keyword_range const& kw)
+{
+ return detail::make_function_aux(
+ f, policies, detail::get_signature(f), kw, mpl::int_<0>());
+}
+
+template <class F, class Policies, class Signature>
+object make_keyword_range_function(
+ F f
+ , Policies const& policies
+ , keyword_range const& kw
+ , Signature const& sig)
+{
+ return detail::make_function_aux(
+ f, policies, sig, kw, mpl::int_<0>());
+}
+// }
+
+// Builds an '__init__' function which inserts the given Holder type
+// in a wrapped C++ class instance. ArgList is an MPL type sequence
+// describing the C++ argument types to be passed to Holder's
+// constructor.
+//
+// Holder and ArgList are intended to be explicitly specified.
+template <class ArgList, class Arity, class Holder, class CallPolicies>
+object make_keyword_range_constructor(
+ CallPolicies const& policies // The CallPolicies with which to invoke the Holder's constructor
+ , detail::keyword_range const& kw // The (possibly empty) set of associated argument keywords
+ , Holder* = 0
+ , ArgList* = 0, Arity* = 0)
+{
+ return detail::make_keyword_range_function(
+ objects::make_holder<Arity::value>
+ ::template apply<Holder,ArgList>::execute
+ , policies
+ , kw);
+}
+
+}}} // namespace boost::python::detail
+
+#endif // MAKE_KEYWORD_RANGE_FN_DWA2002927_HPP
diff --git a/boost/boost/python/detail/make_tuple.hpp b/boost/boost/python/detail/make_tuple.hpp
new file mode 100644
index 00000000000..57b285be1c3
--- /dev/null
+++ b/boost/boost/python/detail/make_tuple.hpp
@@ -0,0 +1,32 @@
+# ifndef BOOST_PYTHON_SYNOPSIS
+# // Copyright David Abrahams 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)
+
+# if !defined(BOOST_PP_IS_ITERATING)
+# error Boost.Python - do not include this file!
+# endif
+
+# define N BOOST_PP_ITERATION()
+
+# define BOOST_PYTHON_MAKE_TUPLE_ARG(z, N, ignored) \
+ PyTuple_SET_ITEM( \
+ result.ptr() \
+ , N \
+ , python::incref(python::object(a##N).ptr()) \
+ );
+
+ template <BOOST_PP_ENUM_PARAMS_Z(1, N, class A)>
+ tuple
+ make_tuple(BOOST_PP_ENUM_BINARY_PARAMS_Z(1, N, A, const& a))
+ {
+ tuple result((detail::new_reference)::PyTuple_New(N));
+ BOOST_PP_REPEAT_1ST(N, BOOST_PYTHON_MAKE_TUPLE_ARG, _)
+ return result;
+ }
+
+# undef BOOST_PYTHON_MAKE_TUPLE_ARG
+
+# undef N
+# endif // BOOST_PYTHON_SYNOPSIS
diff --git a/boost/boost/python/detail/map_entry.hpp b/boost/boost/python/detail/map_entry.hpp
new file mode 100644
index 00000000000..8bf1759f9fd
--- /dev/null
+++ b/boost/boost/python/detail/map_entry.hpp
@@ -0,0 +1,43 @@
+// Copyright David Abrahams 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)
+#ifndef MAP_ENTRY_DWA2002118_HPP
+# define MAP_ENTRY_DWA2002118_HPP
+
+namespace boost { namespace python { namespace detail {
+
+// A trivial type that works well as the value_type of associative
+// vector maps
+template <class Key, class Value>
+struct map_entry
+{
+ map_entry() {}
+ map_entry(Key k) : key(k), value() {}
+ map_entry(Key k, Value v) : key(k), value(v) {}
+
+ bool operator<(map_entry const& rhs) const
+ {
+ return this->key < rhs.key;
+ }
+
+ Key key;
+ Value value;
+};
+
+template <class Key, class Value>
+bool operator<(map_entry<Key,Value> const& e, Key const& k)
+{
+ return e.key < k;
+}
+
+template <class Key, class Value>
+bool operator<(Key const& k, map_entry<Key,Value> const& e)
+{
+ return k < e.key;
+}
+
+
+}}} // namespace boost::python::detail
+
+#endif // MAP_ENTRY_DWA2002118_HPP
diff --git a/boost/boost/python/detail/mpl_lambda.hpp b/boost/boost/python/detail/mpl_lambda.hpp
new file mode 100644
index 00000000000..a20608e710e
--- /dev/null
+++ b/boost/boost/python/detail/mpl_lambda.hpp
@@ -0,0 +1,12 @@
+// Copyright David Abrahams 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)
+#ifndef MPL_LAMBDA_DWA2002122_HPP
+# define MPL_LAMBDA_DWA2002122_HPP
+
+// this header should go away soon
+# include <boost/mpl/aux_/lambda_support.hpp>
+# define BOOST_PYTHON_MPL_LAMBDA_SUPPORT BOOST_MPL_AUX_LAMBDA_SUPPORT
+
+#endif // MPL_LAMBDA_DWA2002122_HPP
diff --git a/boost/boost/python/detail/msvc_typeinfo.hpp b/boost/boost/python/detail/msvc_typeinfo.hpp
new file mode 100644
index 00000000000..10f845058a0
--- /dev/null
+++ b/boost/boost/python/detail/msvc_typeinfo.hpp
@@ -0,0 +1,75 @@
+// Copyright David Abrahams 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)
+#ifndef MSVC_TYPEINFO_DWA200222_HPP
+# define MSVC_TYPEINFO_DWA200222_HPP
+
+#include <typeinfo>
+#include <boost/type.hpp>
+#include <boost/type_traits/config.hpp>
+
+//
+// Fix for MSVC's broken typeid() implementation which doesn't strip
+// decoration. This fix doesn't handle cv-qualified array types. It
+// could probably be done, but I haven't figured it out yet.
+//
+
+# if defined(BOOST_MSVC) && BOOST_MSVC <= 1300 || defined(BOOST_INTEL_CXX_VERSION) && BOOST_INTEL_CXX_VERSION <= 700
+
+namespace boost { namespace python { namespace detail {
+
+typedef std::type_info const& typeinfo;
+
+template <class T>
+static typeinfo typeid_nonref(T const volatile*) { return typeid(T); }
+
+template <class T>
+inline typeinfo typeid_ref_1(T&(*)())
+{
+ return detail::typeid_nonref((T*)0);
+}
+
+// A non-reference
+template <class T>
+inline typeinfo typeid_ref(type<T>*, T&(*)(type<T>))
+{
+ return detail::typeid_nonref((T*)0);
+}
+
+// A reference
+template <class T>
+inline typeinfo typeid_ref(type<T>*, ...)
+{
+ return detail::typeid_ref_1((T(*)())0);
+}
+
+template< typename T > T&(* is_ref_tester1(type<T>) )(type<T>) { return 0; }
+inline char BOOST_TT_DECL is_ref_tester1(...) { return 0; }
+
+template <class T>
+inline typeinfo msvc_typeid(boost::type<T>*)
+{
+ return detail::typeid_ref(
+ (boost::type<T>*)0, detail::is_ref_tester1(type<T>())
+ );
+}
+
+template <>
+inline typeinfo msvc_typeid<void>(boost::type<void>*)
+{
+ return typeid(void);
+}
+
+# ifndef NDEBUG
+inline typeinfo assert_array_typeid_compiles()
+{
+ return msvc_typeid((boost::type<char const[3]>*)0)
+ , msvc_typeid((boost::type<char[3]>*)0);
+}
+# endif
+
+}}} // namespace boost::python::detail
+
+# endif // BOOST_MSVC
+#endif // MSVC_TYPEINFO_DWA200222_HPP
diff --git a/boost/boost/python/detail/none.hpp b/boost/boost/python/detail/none.hpp
new file mode 100644
index 00000000000..bc3337a234d
--- /dev/null
+++ b/boost/boost/python/detail/none.hpp
@@ -0,0 +1,20 @@
+// (C) Copyright David Abrahams 2000.
+// 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)
+//
+// The author gratefully acknowleges the support of Dragon Systems, Inc., in
+// producing this work.
+
+#ifndef NONE_DWA_052000_H_
+# define NONE_DWA_052000_H_
+
+# include <boost/python/detail/prefix.hpp>
+
+namespace boost { namespace python { namespace detail {
+
+inline PyObject* none() { Py_INCREF(Py_None); return Py_None; }
+
+}}} // namespace boost::python::detail
+
+#endif // NONE_DWA_052000_H_
diff --git a/boost/boost/python/detail/not_specified.hpp b/boost/boost/python/detail/not_specified.hpp
new file mode 100644
index 00000000000..2f7c7ad9979
--- /dev/null
+++ b/boost/boost/python/detail/not_specified.hpp
@@ -0,0 +1,14 @@
+// Copyright David Abrahams 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)
+#ifndef NOT_SPECIFIED_DWA2002321_HPP
+# define NOT_SPECIFIED_DWA2002321_HPP
+
+namespace boost { namespace python { namespace detail {
+
+ struct not_specified {};
+
+}}} // namespace boost::python::detail
+
+#endif // NOT_SPECIFIED_DWA2002321_HPP
diff --git a/boost/boost/python/detail/nullary_function_adaptor.hpp b/boost/boost/python/detail/nullary_function_adaptor.hpp
new file mode 100644
index 00000000000..9dcc434f8e6
--- /dev/null
+++ b/boost/boost/python/detail/nullary_function_adaptor.hpp
@@ -0,0 +1,46 @@
+// Copyright David Abrahams 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)
+#ifndef NULLARY_FUNCTION_ADAPTOR_DWA2003824_HPP
+# define NULLARY_FUNCTION_ADAPTOR_DWA2003824_HPP
+
+# include <boost/python/detail/prefix.hpp>
+# include <boost/preprocessor/iteration/local.hpp>
+# include <boost/preprocessor/facilities/intercept.hpp>
+# include <boost/preprocessor/repetition/enum_params.hpp>
+# include <boost/preprocessor/repetition/enum_binary_params.hpp>
+
+namespace boost { namespace python { namespace detail {
+
+// nullary_function_adaptor -- a class template which ignores its
+// arguments and calls a nullary function instead. Used for building
+// error-reporting functions, c.f. pure_virtual
+template <class NullaryFunction>
+struct nullary_function_adaptor
+{
+ nullary_function_adaptor(NullaryFunction fn)
+ : m_fn(fn)
+ {}
+
+ void operator()() const { m_fn(); }
+
+# define BOOST_PP_LOCAL_MACRO(i) \
+ template <BOOST_PP_ENUM_PARAMS_Z(1, i, class A)> \
+ void operator()( \
+ BOOST_PP_ENUM_BINARY_PARAMS_Z(1, i, A, const& BOOST_PP_INTERCEPT) \
+ ) const \
+ { \
+ m_fn(); \
+ }
+
+# define BOOST_PP_LOCAL_LIMITS (1, BOOST_PYTHON_MAX_ARITY)
+# include BOOST_PP_LOCAL_ITERATE()
+
+ private:
+ NullaryFunction m_fn;
+};
+
+}}} // namespace boost::python::detail
+
+#endif // NULLARY_FUNCTION_ADAPTOR_DWA2003824_HPP
diff --git a/boost/boost/python/detail/operator_id.hpp b/boost/boost/python/detail/operator_id.hpp
new file mode 100644
index 00000000000..f2cd404e2f4
--- /dev/null
+++ b/boost/boost/python/detail/operator_id.hpp
@@ -0,0 +1,55 @@
+// Copyright David Abrahams 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)
+#ifndef OPERATOR_ID_DWA2002531_HPP
+# define OPERATOR_ID_DWA2002531_HPP
+
+namespace boost { namespace python { namespace detail {
+
+enum operator_id
+{
+ op_add,
+ op_sub,
+ op_mul,
+ op_div,
+ op_mod,
+ op_divmod,
+ op_pow,
+ op_lshift,
+ op_rshift,
+ op_and,
+ op_xor,
+ op_or,
+ op_neg,
+ op_pos,
+ op_abs,
+ op_invert,
+ op_int,
+ op_long,
+ op_float,
+ op_str,
+ op_cmp,
+ op_gt,
+ op_ge,
+ op_lt,
+ op_le,
+ op_eq,
+ op_ne,
+ op_iadd,
+ op_isub,
+ op_imul,
+ op_idiv,
+ op_imod,
+ op_ilshift,
+ op_irshift,
+ op_iand,
+ op_ixor,
+ op_ior,
+ op_complex,
+ op_nonzero
+};
+
+}}} // namespace boost::python::detail
+
+#endif // OPERATOR_ID_DWA2002531_HPP
diff --git a/boost/boost/python/detail/overloads_fwd.hpp b/boost/boost/python/detail/overloads_fwd.hpp
new file mode 100644
index 00000000000..4c7fdf292bd
--- /dev/null
+++ b/boost/boost/python/detail/overloads_fwd.hpp
@@ -0,0 +1,18 @@
+// Copyright David Abrahams 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)
+#ifndef OVERLOADS_FWD_DWA2002101_HPP
+# define OVERLOADS_FWD_DWA2002101_HPP
+
+namespace boost { namespace python { namespace detail {
+
+// forward declarations
+struct overloads_base;
+
+template <class OverloadsT, class NameSpaceT, class SigT>
+inline void define_with_defaults(char const* name, OverloadsT const&, NameSpaceT&, SigT const&);
+
+}}} // namespace boost::python::detail
+
+#endif // OVERLOADS_FWD_DWA2002101_HPP
diff --git a/boost/boost/python/detail/pointee.hpp b/boost/boost/python/detail/pointee.hpp
new file mode 100644
index 00000000000..e18c1f49b62
--- /dev/null
+++ b/boost/boost/python/detail/pointee.hpp
@@ -0,0 +1,35 @@
+// Copyright David Abrahams 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)
+#ifndef POINTEE_DWA2002323_HPP
+# define POINTEE_DWA2002323_HPP
+
+# include <boost/type_traits/object_traits.hpp>
+
+namespace boost { namespace python { namespace detail {
+
+template <bool is_ptr = true>
+struct pointee_impl
+{
+ template <class T> struct apply : remove_pointer<T> {};
+};
+
+template <>
+struct pointee_impl<false>
+{
+ template <class T> struct apply
+ {
+ typedef typename T::element_type type;
+ };
+};
+
+template <class T>
+struct pointee
+ : pointee_impl<is_pointer<T>::value>::template apply<T>
+{
+};
+
+}}} // namespace boost::python::detail
+
+#endif // POINTEE_DWA2002323_HPP
diff --git a/boost/boost/python/detail/prefix.hpp b/boost/boost/python/detail/prefix.hpp
new file mode 100644
index 00000000000..8b34ed77018
--- /dev/null
+++ b/boost/boost/python/detail/prefix.hpp
@@ -0,0 +1,16 @@
+// Copyright David Abrahams 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)
+#ifndef PREFIX_DWA2003531_HPP
+# define PREFIX_DWA2003531_HPP
+
+// The rule is that <Python.h> must be included before any system
+// headers (so it can get control over some awful macros).
+// Unfortunately, Boost.Python needs to #include <limits.h> first, at
+// least... but this gets us as close as possible.
+
+# include <boost/python/detail/wrap_python.hpp>
+# include <boost/python/detail/config.hpp>
+
+#endif // PREFIX_DWA2003531_HPP
diff --git a/boost/boost/python/detail/preprocessor.hpp b/boost/boost/python/detail/preprocessor.hpp
new file mode 100644
index 00000000000..2c1b2e84ea9
--- /dev/null
+++ b/boost/boost/python/detail/preprocessor.hpp
@@ -0,0 +1,66 @@
+// Copyright David Abrahams 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)
+#ifndef PREPROCESSOR_DWA200247_HPP
+# define PREPROCESSOR_DWA200247_HPP
+
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/comma_if.hpp>
+# include <boost/preprocessor/repeat.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+
+// stuff that should be in the preprocessor library
+
+# define BOOST_PYTHON_APPLY(x) BOOST_PP_CAT(BOOST_PYTHON_APPLY_, x)
+
+# define BOOST_PYTHON_APPLY_BOOST_PYTHON_ITEM(v) v
+# define BOOST_PYTHON_APPLY_BOOST_PYTHON_NIL
+
+// cv-qualifiers
+
+# if !defined(__MWERKS__) || __MWERKS__ > 0x2407
+# define BOOST_PYTHON_CV_COUNT 4
+# else
+# define BOOST_PYTHON_CV_COUNT 1
+# endif
+
+# ifndef BOOST_PYTHON_MAX_ARITY
+# define BOOST_PYTHON_MAX_ARITY 15
+# endif
+
+# ifndef BOOST_PYTHON_MAX_BASES
+# define BOOST_PYTHON_MAX_BASES 10
+# endif
+
+# define BOOST_PYTHON_CV_QUALIFIER(i) \
+ BOOST_PYTHON_APPLY( \
+ BOOST_PP_TUPLE_ELEM(4, i, BOOST_PYTHON_CV_QUALIFIER_I) \
+ )
+
+# define BOOST_PYTHON_CV_QUALIFIER_I \
+ ( \
+ BOOST_PYTHON_NIL, \
+ BOOST_PYTHON_ITEM(const), \
+ BOOST_PYTHON_ITEM(volatile), \
+ BOOST_PYTHON_ITEM(const volatile) \
+ )
+
+// enumerators
+# define BOOST_PYTHON_UNARY_ENUM(c, text) BOOST_PP_REPEAT(c, BOOST_PYTHON_UNARY_ENUM_I, text)
+# define BOOST_PYTHON_UNARY_ENUM_I(z, n, text) BOOST_PP_COMMA_IF(n) text ## n
+
+# define BOOST_PYTHON_BINARY_ENUM(c, a, b) BOOST_PP_REPEAT(c, BOOST_PYTHON_BINARY_ENUM_I, (a, b))
+# define BOOST_PYTHON_BINARY_ENUM_I(z, n, _) BOOST_PP_COMMA_IF(n) BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(2, 0, _), n) BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(2, 1, _), n)
+
+# define BOOST_PYTHON_ENUM_WITH_DEFAULT(c, text, def) BOOST_PP_REPEAT(c, BOOST_PYTHON_ENUM_WITH_DEFAULT_I, (text, def))
+# define BOOST_PYTHON_ENUM_WITH_DEFAULT_I(z, n, _) BOOST_PP_COMMA_IF(n) BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(2, 0, _), n) = BOOST_PP_TUPLE_ELEM(2, 1, _)
+
+// fixed text (no commas)
+# define BOOST_PYTHON_FIXED(z, n, text) text
+
+// flags
+# define BOOST_PYTHON_FUNCTION_POINTER 0x0001
+# define BOOST_PYTHON_POINTER_TO_MEMBER 0x0002
+
+#endif // PREPROCESSOR_DWA200247_HPP
diff --git a/boost/boost/python/detail/python22_fixed.h b/boost/boost/python/detail/python22_fixed.h
new file mode 100644
index 00000000000..32bf941feff
--- /dev/null
+++ b/boost/boost/python/detail/python22_fixed.h
@@ -0,0 +1,152 @@
+// This file is a modified version of Python 2.2/2.2.1 Python.h. As
+// such it is:
+//
+// Copyright (c) 2001, 2002 Python Software Foundation; All Rights
+// Reserved
+//
+// boostinspect:nolicense (don't complain about the lack of a Boost license)
+//
+// Changes from the original:
+// 1. #includes <unistd.h> for Python 2.2.1
+// 2. Provides missing extern "C" wrapper for "iterobject.h" and "descrobject.h".
+//
+
+// Changes marked with "Boost.Python modification"
+#ifndef Py_PYTHON_H
+#define Py_PYTHON_H
+/* Since this is a "meta-include" file, no #ifdef __cplusplus / extern "C" { */
+
+
+/* Enable compiler features; switching on C lib defines doesn't work
+ here, because the symbols haven't necessarily been defined yet. */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE 1
+#endif
+
+/* Forcing SUSv2 compatibility still produces problems on some
+ platforms, True64 and SGI IRIX begin two of them, so for now the
+ define is switched off. */
+#if 0
+#ifndef _XOPEN_SOURCE
+# define _XOPEN_SOURCE 500
+#endif
+#endif
+
+/* Include nearly all Python header files */
+
+#include "patchlevel.h"
+#include "pyconfig.h"
+
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+
+/* pyconfig.h may or may not define DL_IMPORT */
+#ifndef DL_IMPORT /* declarations for DLL import/export */
+#define DL_IMPORT(RTYPE) RTYPE
+#endif
+#ifndef DL_EXPORT /* declarations for DLL import/export */
+#define DL_EXPORT(RTYPE) RTYPE
+#endif
+
+#if defined(__sgi) && defined(WITH_THREAD) && !defined(_SGI_MP_SOURCE)
+#define _SGI_MP_SOURCE
+#endif
+
+#include <stdio.h>
+#ifndef NULL
+# error "Python.h requires that stdio.h define NULL."
+#endif
+
+#include <string.h>
+#include <errno.h>
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#if PY_MICRO_VERSION == 1 // Boost.Python modification: emulate Python 2.2
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#endif // Boost.Python modification: emulate Python 2.2
+
+/* CAUTION: Build setups should ensure that NDEBUG is defined on the
+ * compiler command line when building Python in release mode; else
+ * assert() calls won't be removed.
+ */
+#include <assert.h>
+
+#include "pyport.h"
+
+#include "pymem.h"
+
+#include "object.h"
+#include "objimpl.h"
+
+#include "pydebug.h"
+
+#include "unicodeobject.h"
+#include "intobject.h"
+#include "longobject.h"
+#include "floatobject.h"
+#ifndef WITHOUT_COMPLEX
+#include "complexobject.h"
+#endif
+#include "rangeobject.h"
+#include "stringobject.h"
+#include "bufferobject.h"
+#include "tupleobject.h"
+#include "listobject.h"
+#include "dictobject.h"
+#include "methodobject.h"
+#include "moduleobject.h"
+#include "funcobject.h"
+#include "classobject.h"
+#include "fileobject.h"
+#include "cobject.h"
+#include "traceback.h"
+#include "sliceobject.h"
+#include "cellobject.h"
+extern "C" { // Boost.Python modification: provide missing extern "C"
+#include "iterobject.h"
+#include "descrobject.h"
+} // Boost.Python modification: provide missing extern "C"
+#include "weakrefobject.h"
+
+#include "codecs.h"
+#include "pyerrors.h"
+
+#include "pystate.h"
+
+#include "modsupport.h"
+#include "pythonrun.h"
+#include "ceval.h"
+#include "sysmodule.h"
+#include "intrcheck.h"
+#include "import.h"
+
+#include "abstract.h"
+
+#define PyArg_GetInt(v, a) PyArg_Parse((v), "i", (a))
+#define PyArg_NoArgs(v) PyArg_Parse(v, "")
+
+/* Convert a possibly signed character to a nonnegative int */
+/* XXX This assumes characters are 8 bits wide */
+#ifdef __CHAR_UNSIGNED__
+#define Py_CHARMASK(c) (c)
+#else
+#define Py_CHARMASK(c) ((c) & 0xff)
+#endif
+
+#include "pyfpe.h"
+
+/* These definitions must match corresponding definitions in graminit.h.
+ There's code in compile.c that checks that they are the same. */
+#define Py_single_input 256
+#define Py_file_input 257
+#define Py_eval_input 258
+
+#ifdef HAVE_PTH
+/* GNU pth user-space thread support */
+#include <pth.h>
+#endif
+#endif /* !Py_PYTHON_H */
diff --git a/boost/boost/python/detail/raw_pyobject.hpp b/boost/boost/python/detail/raw_pyobject.hpp
new file mode 100644
index 00000000000..194409eda49
--- /dev/null
+++ b/boost/boost/python/detail/raw_pyobject.hpp
@@ -0,0 +1,32 @@
+// Copyright David Abrahams 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)
+#ifndef RAW_PYOBJECT_DWA2002628_HPP
+# define RAW_PYOBJECT_DWA2002628_HPP
+
+namespace boost { namespace python { namespace detail {
+
+//
+// Define some types which we can use to get around the vagaries of
+// PyObject*. We will use these to initialize object instances, and
+// keep them in namespace detail to make sure they stay out of the
+// hands of users. That is much simpler than trying to grant
+// friendship to all the appropriate parties.
+//
+
+// New references are normally checked for null
+struct new_reference_t;
+typedef new_reference_t* new_reference;
+
+// Borrowed references are assumed to be non-null
+struct borrowed_reference_t;
+typedef borrowed_reference_t* borrowed_reference;
+
+// New references which aren't checked for null
+struct new_non_null_reference_t;
+typedef new_non_null_reference_t* new_non_null_reference;
+
+}}} // namespace boost::python::detail
+
+#endif // RAW_PYOBJECT_DWA2002628_HPP
diff --git a/boost/boost/python/detail/referent_storage.hpp b/boost/boost/python/detail/referent_storage.hpp
new file mode 100644
index 00000000000..0a1ef5a04ef
--- /dev/null
+++ b/boost/boost/python/detail/referent_storage.hpp
@@ -0,0 +1,76 @@
+// Copyright David Abrahams 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)
+#ifndef REFERENT_STORAGE_DWA200278_HPP
+# define REFERENT_STORAGE_DWA200278_HPP
+# include <boost/mpl/if.hpp>
+# include <cstddef>
+
+namespace boost { namespace python { namespace detail {
+
+struct alignment_dummy;
+typedef void (*function_ptr)();
+typedef int (alignment_dummy::*member_ptr);
+typedef int (alignment_dummy::*member_function_ptr)();
+
+# define BOOST_PYTHON_ALIGNER(T, n) \
+ typename mpl::if_c< \
+ sizeof(T) <= size, T, char>::type t##n
+
+// Storage for size bytes, aligned to all fundamental types no larger than size
+template <std::size_t size>
+union aligned_storage
+{
+ BOOST_PYTHON_ALIGNER(char, 0);
+ BOOST_PYTHON_ALIGNER(short, 1);
+ BOOST_PYTHON_ALIGNER(int, 2);
+ BOOST_PYTHON_ALIGNER(long, 3);
+ BOOST_PYTHON_ALIGNER(float, 4);
+ BOOST_PYTHON_ALIGNER(double, 5);
+ BOOST_PYTHON_ALIGNER(long double, 6);
+ BOOST_PYTHON_ALIGNER(void*, 7);
+ BOOST_PYTHON_ALIGNER(function_ptr, 8);
+ BOOST_PYTHON_ALIGNER(member_ptr, 9);
+ BOOST_PYTHON_ALIGNER(member_function_ptr, 10);
+ char bytes[size];
+};
+
+# undef BOOST_PYTHON_ALIGNER
+
+ // Compute the size of T's referent. We wouldn't need this at all,
+ // but sizeof() is broken in CodeWarriors <= 8.0
+ template <class T> struct referent_size;
+
+# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+ template <class T>
+ struct referent_size<T&>
+ {
+ BOOST_STATIC_CONSTANT(
+ std::size_t, value = sizeof(T));
+ };
+
+# else
+
+ template <class T> struct referent_size
+ {
+ static T f();
+ BOOST_STATIC_CONSTANT(std::size_t, value = sizeof(f()));
+ };
+
+# endif
+
+// A metafunction returning a POD type which can store U, where T ==
+// U&. If T is not a reference type, returns a POD which can store T.
+template <class T>
+struct referent_storage
+{
+ typedef aligned_storage<
+ ::boost::python::detail::referent_size<T>::value
+ > type;
+};
+
+}}} // namespace boost::python::detail
+
+#endif // REFERENT_STORAGE_DWA200278_HPP
diff --git a/boost/boost/python/detail/result.hpp b/boost/boost/python/detail/result.hpp
new file mode 100644
index 00000000000..9e322dd7442
--- /dev/null
+++ b/boost/boost/python/detail/result.hpp
@@ -0,0 +1,131 @@
+#if !defined(BOOST_PP_IS_ITERATING)
+
+// Copyright David Abrahams 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)
+
+# ifndef RESULT_DWA2002521_HPP
+# define RESULT_DWA2002521_HPP
+
+# include <boost/type.hpp>
+
+# include <boost/python/detail/preprocessor.hpp>
+
+# include <boost/type_traits/object_traits.hpp>
+# include <boost/mpl/if.hpp>
+
+# include <boost/preprocessor/comma_if.hpp>
+# include <boost/preprocessor/iterate.hpp>
+# include <boost/preprocessor/debug/line.hpp>
+# include <boost/preprocessor/enum_params.hpp>
+# include <boost/preprocessor/repetition/enum_trailing_params.hpp>
+
+namespace boost { namespace python { namespace detail {
+
+// Defines a family of overloaded function which, given x, a function
+// pointer, member [function] pointer, or an AdaptableFunction object,
+// returns a pointer to type<R>*, where R is the result type of
+// invoking the result of bind(x).
+//
+// In order to work around bugs in deficient compilers, if x might be
+// an AdaptableFunction object, you must pass OL as a second argument
+// to get this to work portably.
+
+# define BOOST_PP_ITERATION_PARAMS_1 \
+ (4, (0, BOOST_PYTHON_MAX_ARITY, <boost/python/detail/result.hpp>, BOOST_PYTHON_FUNCTION_POINTER))
+# include BOOST_PP_ITERATE()
+
+# define BOOST_PP_ITERATION_PARAMS_1 \
+ (4, (0, BOOST_PYTHON_CV_COUNT - 1, <boost/python/detail/result.hpp>, BOOST_PYTHON_POINTER_TO_MEMBER))
+# include BOOST_PP_ITERATE()
+
+template <class R, class T>
+boost::type<R>* result(R (T::*), int = 0) { return 0; }
+
+# if (defined(BOOST_MSVC) && _MSC_FULL_VER <= 13102140) \
+ || (defined(__GNUC__) && __GNUC__ < 3) \
+ || (defined(__MWERKS__) && __MWERKS__ < 0x3000)
+// This code actually works on all implementations, but why use it when we don't have to?
+template <class T>
+struct get_result_type
+{
+ typedef boost::type<typename T::result_type> type;
+};
+
+struct void_type
+{
+ typedef void type;
+};
+
+template <class T>
+struct result_result
+{
+ typedef typename mpl::if_c<
+ is_class<T>::value
+ , get_result_type<T>
+ , void_type
+ >::type t1;
+
+ typedef typename t1::type* type;
+};
+
+template <class X>
+typename result_result<X>::type
+result(X const&, short) { return 0; }
+
+# else // Simpler code for more-capable compilers
+template <class X>
+boost::type<typename X::result_type>*
+result(X const&, short = 0) { return 0; }
+
+# endif
+
+}}} // namespace boost::python::detail
+
+# endif // RESULT_DWA2002521_HPP
+
+/* --------------- function pointers --------------- */
+#elif BOOST_PP_ITERATION_DEPTH() == 1 && BOOST_PP_ITERATION_FLAGS() == BOOST_PYTHON_FUNCTION_POINTER
+# if !(BOOST_WORKAROUND(__MWERKS__, > 0x3100) \
+ && BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3201)))
+# line BOOST_PP_LINE(__LINE__, result.hpp(function pointers))
+# endif
+
+# define N BOOST_PP_ITERATION()
+
+template <class R BOOST_PP_ENUM_TRAILING_PARAMS_Z(1, N, class A)>
+boost::type<R>* result(R (*pf)(BOOST_PP_ENUM_PARAMS_Z(1, N, A)), int = 0)
+{
+ return 0;
+}
+
+# undef N
+
+/* --------------- pointers-to-members --------------- */
+#elif BOOST_PP_ITERATION_DEPTH() == 1 && BOOST_PP_ITERATION_FLAGS() == BOOST_PYTHON_POINTER_TO_MEMBER
+// Outer over cv-qualifiers
+
+# define BOOST_PP_ITERATION_PARAMS_2 (3, (0, BOOST_PYTHON_MAX_ARITY, <boost/python/detail/result.hpp>))
+# include BOOST_PP_ITERATE()
+
+#elif BOOST_PP_ITERATION_DEPTH() == 2
+# if !(BOOST_WORKAROUND(__MWERKS__, > 0x3100) \
+ && BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3201)))
+# line BOOST_PP_LINE(__LINE__, result.hpp(pointers-to-members))
+# endif
+// Inner over arities
+
+# define N BOOST_PP_ITERATION()
+# define Q BOOST_PYTHON_CV_QUALIFIER(BOOST_PP_RELATIVE_ITERATION(1))
+
+template <class R, class T BOOST_PP_ENUM_TRAILING_PARAMS_Z(1, N, class A)>
+boost::type<R>* result(R (T::*pmf)(BOOST_PP_ENUM_PARAMS_Z(1, N, A)) Q, int = 0)
+{
+ return 0;
+}
+
+# undef N
+# undef Q
+
+#endif
diff --git a/boost/boost/python/detail/scope.hpp b/boost/boost/python/detail/scope.hpp
new file mode 100644
index 00000000000..5367bbd35c2
--- /dev/null
+++ b/boost/boost/python/detail/scope.hpp
@@ -0,0 +1,16 @@
+// Copyright David Abrahams 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)
+#ifndef SCOPE_DWA2002927_HPP
+# define SCOPE_DWA2002927_HPP
+
+# include <boost/python/detail/config.hpp>
+
+namespace boost { namespace python { namespace detail {
+
+void BOOST_PYTHON_DECL scope_setattr_doc(char const* name, object const& obj, char const* doc);
+
+}}} // namespace boost::python::detail
+
+#endif // SCOPE_DWA2002927_HPP
diff --git a/boost/boost/python/detail/sfinae.hpp b/boost/boost/python/detail/sfinae.hpp
new file mode 100644
index 00000000000..6281875111b
--- /dev/null
+++ b/boost/boost/python/detail/sfinae.hpp
@@ -0,0 +1,13 @@
+// Copyright David Abrahams 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)
+#ifndef SFINAE_DWA2004723_HPP
+# define SFINAE_DWA2004723_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+# if defined(BOOST_NO_SFINAE) && !defined(BOOST_MSVC)
+# define BOOST_PYTHON_NO_SFINAE
+# endif
+
+#endif // SFINAE_DWA2004723_HPP
diff --git a/boost/boost/python/detail/signature.hpp b/boost/boost/python/detail/signature.hpp
new file mode 100644
index 00000000000..26e986cc9f4
--- /dev/null
+++ b/boost/boost/python/detail/signature.hpp
@@ -0,0 +1,88 @@
+#if !defined(BOOST_PP_IS_ITERATING)
+
+// Copyright David Abrahams 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)
+
+# ifndef SIGNATURE_DWA20021121_HPP
+# define SIGNATURE_DWA20021121_HPP
+
+# include <boost/python/type_id.hpp>
+
+# include <boost/python/detail/preprocessor.hpp>
+# include <boost/python/detail/indirect_traits.hpp>
+
+# include <boost/preprocessor/iterate.hpp>
+# include <boost/preprocessor/iteration/local.hpp>
+
+# include <boost/mpl/at.hpp>
+# include <boost/mpl/size.hpp>
+
+namespace boost { namespace python { namespace detail {
+
+struct signature_element
+{
+ char const* basename;
+ bool lvalue;
+};
+
+template <unsigned> struct signature_arity;
+
+# define BOOST_PP_ITERATION_PARAMS_1 \
+ (3, (0, BOOST_PYTHON_MAX_ARITY + 1, <boost/python/detail/signature.hpp>))
+# include BOOST_PP_ITERATE()
+
+// A metafunction returning the base class used for
+//
+// signature<class F, class CallPolicies, class Sig>.
+//
+template <class Sig>
+struct signature_base_select
+{
+ enum { arity = mpl::size<Sig>::value - 1 };
+ typedef typename signature_arity<arity>::template impl<Sig> type;
+};
+
+template <class Sig>
+struct signature
+ : signature_base_select<Sig>::type
+{
+};
+
+}}} // namespace boost::python::detail
+
+# endif // SIGNATURE_DWA20021121_HPP
+
+#else
+
+# define N BOOST_PP_ITERATION()
+
+template <>
+struct signature_arity<N>
+{
+ template <class Sig>
+ struct impl
+ {
+ static signature_element const* elements()
+ {
+ static signature_element const result[N+2] = {
+
+# define BOOST_PP_LOCAL_MACRO(i) \
+ { \
+ type_id<BOOST_DEDUCED_TYPENAME mpl::at_c<Sig,i>::type>().name() \
+ , indirect_traits::is_reference_to_non_const<BOOST_DEDUCED_TYPENAME mpl::at_c<Sig,i>::type>::value \
+ },
+
+# define BOOST_PP_LOCAL_LIMITS (0, N)
+# include BOOST_PP_LOCAL_ITERATE()
+ {0,0}
+ };
+ return result;
+ }
+ };
+};
+
+#endif // BOOST_PP_IS_ITERATING
+
+
diff --git a/boost/boost/python/detail/string_literal.hpp b/boost/boost/python/detail/string_literal.hpp
new file mode 100644
index 00000000000..50193b64361
--- /dev/null
+++ b/boost/boost/python/detail/string_literal.hpp
@@ -0,0 +1,88 @@
+// Copyright David Abrahams 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)
+#ifndef STRING_LITERAL_DWA2002629_HPP
+# define STRING_LITERAL_DWA2002629_HPP
+
+# include <cstddef>
+# include <boost/type.hpp>
+# include <boost/type_traits/array_traits.hpp>
+# include <boost/type_traits/same_traits.hpp>
+# include <boost/mpl/bool.hpp>
+# include <boost/detail/workaround.hpp>
+
+namespace boost { namespace python { namespace detail {
+
+# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+template <class T>
+struct is_string_literal : mpl::false_
+{
+};
+
+# if !defined(__MWERKS__) || __MWERKS__ > 0x2407
+template <std::size_t n>
+struct is_string_literal<char const[n]> : mpl::true_
+{
+};
+
+# if BOOST_WORKAROUND(__DECCXX_VER, BOOST_TESTED_AT(60590040)) \
+ || (defined(__sgi) && defined(_COMPILER_VERSION) && _COMPILER_VERSION <= 730)
+// This compiler mistakenly gets the type of string literals as char*
+// instead of char[NN].
+template <>
+struct is_string_literal<char* const> : mpl::true_
+{
+};
+# endif
+
+# else
+
+// CWPro7 has trouble with the array type deduction above
+template <class T, std::size_t n>
+struct is_string_literal<T[n]>
+ : is_same<T, char const>
+{
+};
+# endif
+# else
+template <bool is_array = true>
+struct string_literal_helper
+{
+ typedef char (&yes_string_literal)[1];
+ typedef char (&no_string_literal)[2];
+
+ template <class T>
+ struct apply
+ {
+ typedef apply<T> self;
+ static T x;
+ static yes_string_literal check(char const*);
+ static no_string_literal check(char*);
+ static no_string_literal check(void const volatile*);
+
+ BOOST_STATIC_CONSTANT(
+ bool, value = sizeof(self::check(x)) == sizeof(yes_string_literal));
+ typedef mpl::bool_<value> type;
+ };
+};
+
+template <>
+struct string_literal_helper<false>
+{
+ template <class T>
+ struct apply : mpl::false_
+ {
+ };
+};
+
+template <class T>
+struct is_string_literal
+ : string_literal_helper<is_array<T>::value>::apply<T>
+{
+};
+# endif
+
+}}} // namespace boost::python::detail
+
+#endif // STRING_LITERAL_DWA2002629_HPP
diff --git a/boost/boost/python/detail/target.hpp b/boost/boost/python/detail/target.hpp
new file mode 100644
index 00000000000..5079699a7ef
--- /dev/null
+++ b/boost/boost/python/detail/target.hpp
@@ -0,0 +1,82 @@
+#if !defined(BOOST_PP_IS_ITERATING)
+
+// Copyright David Abrahams 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)
+
+# ifndef TARGET_DWA2002521_HPP
+# define TARGET_DWA2002521_HPP
+
+# include <boost/python/detail/preprocessor.hpp>
+
+# include <boost/type.hpp>
+
+# include <boost/preprocessor/comma_if.hpp>
+# include <boost/preprocessor/if.hpp>
+# include <boost/preprocessor/iterate.hpp>
+# include <boost/preprocessor/debug/line.hpp>
+# include <boost/preprocessor/enum_params.hpp>
+# include <boost/preprocessor/repetition/enum_trailing_params.hpp>
+
+namespace boost { namespace python { namespace detail {
+
+# define BOOST_PP_ITERATION_PARAMS_1 \
+ (4, (0, BOOST_PYTHON_MAX_ARITY, <boost/python/detail/target.hpp>, BOOST_PYTHON_FUNCTION_POINTER))
+# include BOOST_PP_ITERATE()
+
+# define BOOST_PP_ITERATION_PARAMS_1 \
+ (4, (0, BOOST_PYTHON_CV_COUNT - 1, <boost/python/detail/target.hpp>, BOOST_PYTHON_POINTER_TO_MEMBER))
+# include BOOST_PP_ITERATE()
+
+template <class R, class T>
+T& (* target(R (T::*)) )() { return 0; }
+
+}}} // namespace boost::python::detail
+
+# endif // TARGET_DWA2002521_HPP
+
+/* --------------- function pointers --------------- */
+#elif BOOST_PP_ITERATION_DEPTH() == 1 && BOOST_PP_ITERATION_FLAGS() == BOOST_PYTHON_FUNCTION_POINTER
+# if !(BOOST_WORKAROUND(__MWERKS__, > 0x3100) \
+ && BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3201)))
+# line BOOST_PP_LINE(__LINE__, target.hpp(function_pointers))
+# endif
+
+# define N BOOST_PP_ITERATION()
+
+template <class R BOOST_PP_ENUM_TRAILING_PARAMS_Z(1, N, class A)>
+BOOST_PP_IF(N, A0, void)(* target(R (*)(BOOST_PP_ENUM_PARAMS_Z(1, N, A))) )()
+{
+ return 0;
+}
+
+# undef N
+
+/* --------------- pointers-to-members --------------- */
+#elif BOOST_PP_ITERATION_DEPTH() == 1 && BOOST_PP_ITERATION_FLAGS() == BOOST_PYTHON_POINTER_TO_MEMBER
+// Outer over cv-qualifiers
+
+# define BOOST_PP_ITERATION_PARAMS_2 (3, (0, BOOST_PYTHON_MAX_ARITY, <boost/python/detail/target.hpp>))
+# include BOOST_PP_ITERATE()
+
+#elif BOOST_PP_ITERATION_DEPTH() == 2
+# if !(BOOST_WORKAROUND(__MWERKS__, > 0x3100) \
+ && BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3201)))
+# line BOOST_PP_LINE(__LINE__, target.hpp(pointers-to-members))
+# endif
+// Inner over arities
+
+# define N BOOST_PP_ITERATION()
+# define Q BOOST_PYTHON_CV_QUALIFIER(BOOST_PP_RELATIVE_ITERATION(1))
+
+template <class R, class T BOOST_PP_ENUM_TRAILING_PARAMS_Z(1, N, class A)>
+T& (* target(R (T::*)(BOOST_PP_ENUM_PARAMS_Z(1, N, A)) Q) )()
+{
+ return 0;
+}
+
+# undef N
+# undef Q
+
+#endif
diff --git a/boost/boost/python/detail/translate_exception.hpp b/boost/boost/python/detail/translate_exception.hpp
new file mode 100644
index 00000000000..466b8c89079
--- /dev/null
+++ b/boost/boost/python/detail/translate_exception.hpp
@@ -0,0 +1,67 @@
+// Copyright David Abrahams 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)
+#ifndef TRANSLATE_EXCEPTION_DWA2002810_HPP
+# define TRANSLATE_EXCEPTION_DWA2002810_HPP
+
+# include <boost/python/detail/exception_handler.hpp>
+
+# include <boost/call_traits.hpp>
+# include <boost/type_traits/add_const.hpp>
+
+# include <boost/function/function0.hpp>
+
+namespace boost { namespace python { namespace detail {
+
+// A ternary function object used to translate C++ exceptions of type
+// ExceptionType into Python exceptions by invoking an object of type
+// Translate. Typically the translate function will be curried with
+// boost::bind().
+template <class ExceptionType, class Translate>
+struct translate_exception
+{
+// workaround for broken gcc that ships with SuSE 9.0 and SuSE 9.1
+# if defined(__linux__) && defined(__GNUC__) \
+ && BOOST_WORKAROUND(__GNUC__, == 3) \
+ && BOOST_WORKAROUND(__GNUC_MINOR__, == 3) \
+ && (BOOST_WORKAROUND(__GNUC_PATCHLEVEL__, == 1) \
+ || BOOST_WORKAROUND(__GNUC_PATCHLEVEL__, == 3))
+ typedef typename remove_reference<
+ typename add_const<ExceptionType>::type
+ >::type exception_non_ref;
+# else
+ typedef typename add_reference<
+ typename add_const<ExceptionType>::type
+ >::type exception_cref;
+# endif
+
+ inline bool operator()(
+ exception_handler const& handler
+ , function0<void> const& f
+ , typename call_traits<Translate>::param_type translate) const
+ {
+ try
+ {
+ return handler(f);
+ }
+// workaround for broken gcc that ships with SuSE 9.0 and SuSE 9.1
+# if defined(__linux__) && defined(__GNUC__) \
+ && BOOST_WORKAROUND(__GNUC__, == 3) \
+ && BOOST_WORKAROUND(__GNUC_MINOR__, == 3) \
+ && (BOOST_WORKAROUND(__GNUC_PATCHLEVEL__, == 1) \
+ || BOOST_WORKAROUND(__GNUC_PATCHLEVEL__, == 3))
+ catch(exception_non_ref& e)
+# else
+ catch(exception_cref e)
+# endif
+ {
+ translate(e);
+ return true;
+ }
+ }
+};
+
+}}} // namespace boost::python::detail
+
+#endif // TRANSLATE_EXCEPTION_DWA2002810_HPP
diff --git a/boost/boost/python/detail/type_list.hpp b/boost/boost/python/detail/type_list.hpp
new file mode 100644
index 00000000000..9483c1945c0
--- /dev/null
+++ b/boost/boost/python/detail/type_list.hpp
@@ -0,0 +1,39 @@
+// Copyright David Abrahams 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)
+#ifndef TYPE_LIST_DWA2002913_HPP
+# define TYPE_LIST_DWA2002913_HPP
+
+# include <boost/config.hpp>
+# include <boost/python/detail/preprocessor.hpp>
+# include <boost/preprocessor/arithmetic/inc.hpp>
+
+# if BOOST_PYTHON_MAX_ARITY + 2 > BOOST_PYTHON_MAX_BASES
+# define BOOST_PYTHON_LIST_SIZE BOOST_PP_INC(BOOST_PP_INC(BOOST_PYTHON_MAX_ARITY))
+# else
+# define BOOST_PYTHON_LIST_SIZE BOOST_PYTHON_MAX_BASES
+# endif
+
+// Compute the MPL vector header to use for lists up to BOOST_PYTHON_LIST_SIZE in length
+# if BOOST_PYTHON_LIST_SIZE > 48
+# error Arities above 48 not supported by Boost.Python due to MPL internal limit
+# elif BOOST_PYTHON_LIST_SIZE > 38
+# include <boost/mpl/vector/vector50.hpp>
+# elif BOOST_PYTHON_LIST_SIZE > 28
+# include <boost/mpl/vector/vector40.hpp>
+# elif BOOST_PYTHON_LIST_SIZE > 18
+# include <boost/mpl/vector/vector30.hpp>
+# elif BOOST_PYTHON_LIST_SIZE > 8
+# include <boost/mpl/vector/vector20.hpp>
+# else
+# include <boost/mpl/vector/vector10.hpp>
+# endif
+
+# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+# include <boost/python/detail/type_list_impl.hpp>
+# else
+# include <boost/python/detail/type_list_impl_no_pts.hpp>
+# endif
+
+#endif // TYPE_LIST_DWA2002913_HPP
diff --git a/boost/boost/python/detail/type_list_impl.hpp b/boost/boost/python/detail/type_list_impl.hpp
new file mode 100644
index 00000000000..fdcfa85030e
--- /dev/null
+++ b/boost/boost/python/detail/type_list_impl.hpp
@@ -0,0 +1,57 @@
+#ifndef BOOST_PP_IS_ITERATING
+// Copyright David Abrahams 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)
+# ifndef TYPE_LIST_IMPL_DWA2002913_HPP
+# define TYPE_LIST_IMPL_DWA2002913_HPP
+
+# include <boost/python/detail/type_list.hpp>
+
+# include <boost/preprocessor/enum_params.hpp>
+# include <boost/preprocessor/enum_params_with_a_default.hpp>
+# include <boost/preprocessor/repetition/enum.hpp>
+# include <boost/preprocessor/comma_if.hpp>
+# include <boost/preprocessor/arithmetic/sub.hpp>
+# include <boost/preprocessor/iterate.hpp>
+# include <boost/preprocessor/repetition/enum_trailing.hpp>
+
+namespace boost { namespace python { namespace detail {
+
+template <BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(BOOST_PYTHON_LIST_SIZE, class T, mpl::void_)>
+struct type_list
+ : BOOST_PP_CAT(mpl::vector,BOOST_PYTHON_LIST_SIZE)<BOOST_PP_ENUM_PARAMS_Z(1, BOOST_PYTHON_LIST_SIZE, T)>
+{
+};
+
+# define BOOST_PP_ITERATION_PARAMS_1 \
+ (3, (0, BOOST_PP_DEC(BOOST_PYTHON_LIST_SIZE), <boost/python/detail/type_list_impl.hpp>))
+# include BOOST_PP_ITERATE()
+
+
+}}} // namespace boost::python::detail
+
+# endif // TYPE_LIST_IMPL_DWA2002913_HPP
+
+#else // BOOST_PP_IS_ITERATING
+
+# define N BOOST_PP_ITERATION()
+# define BOOST_PYTHON_VOID_ARGS BOOST_PP_SUB_D(1,BOOST_PYTHON_LIST_SIZE,N)
+
+template <
+ BOOST_PP_ENUM_PARAMS_Z(1, N, class T)
+ >
+struct type_list<
+ BOOST_PP_ENUM_PARAMS_Z(1, N, T)
+ BOOST_PP_COMMA_IF(N)
+ BOOST_PP_ENUM(
+ BOOST_PYTHON_VOID_ARGS, BOOST_PYTHON_FIXED, mpl::void_)
+ >
+ : BOOST_PP_CAT(mpl::vector,N)<BOOST_PP_ENUM_PARAMS_Z(1, N, T)>
+{
+};
+
+# undef BOOST_PYTHON_VOID_ARGS
+# undef N
+
+#endif // BOOST_PP_IS_ITERATING
diff --git a/boost/boost/python/detail/type_list_impl_no_pts.hpp b/boost/boost/python/detail/type_list_impl_no_pts.hpp
new file mode 100644
index 00000000000..15d92523742
--- /dev/null
+++ b/boost/boost/python/detail/type_list_impl_no_pts.hpp
@@ -0,0 +1,107 @@
+#ifndef BOOST_PP_IS_ITERATING
+// Copyright David Abrahams 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)
+# ifndef TYPE_LIST_IMPL_NO_PTS_DWA2002913_HPP
+# define TYPE_LIST_IMPL_NO_PTS_DWA2002913_HPP
+
+# include <boost/python/detail/type_list.hpp>
+
+# include <boost/preprocessor/enum_params.hpp>
+# include <boost/preprocessor/enum_params_with_a_default.hpp>
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/repeat.hpp>
+# include <boost/preprocessor/empty.hpp>
+# include <boost/preprocessor/iterate.hpp>
+# include <boost/mpl/void.hpp>
+
+namespace boost { namespace python { namespace detail {
+
+template< typename T >
+struct is_list_arg
+{
+ enum { value = true };
+};
+
+template<>
+struct is_list_arg<mpl::void_>
+{
+ enum { value = false };
+};
+
+template<int> struct type_list_impl_chooser;
+
+# define BOOST_PYTHON_LIST_ACTUAL_PARAMS BOOST_PP_ENUM_PARAMS_Z(1,BOOST_PYTHON_LIST_SIZE,T)
+# define BOOST_PYTHON_LIST_FORMAL_PARAMS BOOST_PP_ENUM_PARAMS_Z(1,BOOST_PYTHON_LIST_SIZE,class T)
+
+# define BOOST_PP_ITERATION_PARAMS_1 \
+ (3, (0, BOOST_PYTHON_LIST_SIZE, <boost/python/detail/type_list_impl_no_pts.hpp>))
+# include BOOST_PP_ITERATE()
+
+# define BOOST_PYTHON_PLUS() +
+# define BOOST_PYTHON_IS_LIST_ARG(z, n, data) \
+ BOOST_PP_IF(n, BOOST_PYTHON_PLUS, BOOST_PP_EMPTY)() \
+ is_list_arg< BOOST_PP_CAT(T,n) >::value
+
+template<
+ BOOST_PYTHON_LIST_FORMAL_PARAMS
+ >
+struct type_list_count_args
+{
+ enum { value =
+ BOOST_PP_REPEAT_1(BOOST_PYTHON_LIST_SIZE, BOOST_PYTHON_IS_LIST_ARG, _)
+ };
+};
+
+template<
+ BOOST_PYTHON_LIST_FORMAL_PARAMS
+ >
+struct type_list_impl
+{
+ typedef type_list_count_args< BOOST_PYTHON_LIST_ACTUAL_PARAMS > arg_num_;
+ typedef typename detail::type_list_impl_chooser< arg_num_::value >
+ ::template result_< BOOST_PYTHON_LIST_ACTUAL_PARAMS >::type type;
+};
+
+template<
+ BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(BOOST_PYTHON_LIST_SIZE, class T, mpl::void_)
+ >
+struct type_list
+ : detail::type_list_impl< BOOST_PYTHON_LIST_ACTUAL_PARAMS >::type
+{
+ typedef typename detail::type_list_impl<
+ BOOST_PYTHON_LIST_ACTUAL_PARAMS
+ >::type type;
+};
+
+# undef BOOST_PYTHON_IS_LIST_ARG
+# undef BOOST_PYTHON_PLUS
+# undef BOOST_PYTHON_LIST_FORMAL_PARAMS
+# undef BOOST_PYTHON_LIST_ACTUAL_PARAMS
+
+}}} // namespace boost::python::detail
+
+# endif // TYPE_LIST_IMPL_NO_PTS_DWA2002913_HPP
+
+#else // BOOST_PP_IS_ITERATING
+
+# define N BOOST_PP_ITERATION()
+
+template<>
+struct type_list_impl_chooser<N>
+{
+ template<
+ BOOST_PYTHON_LIST_FORMAL_PARAMS
+ >
+ struct result_
+ {
+ typedef typename BOOST_PP_CAT(mpl::vector,N)<
+ BOOST_PP_ENUM_PARAMS(N, T)
+ >::type type;
+ };
+};
+
+# undef N
+
+#endif // BOOST_PP_IS_ITERATING
diff --git a/boost/boost/python/detail/unwrap_type_id.hpp b/boost/boost/python/detail/unwrap_type_id.hpp
new file mode 100644
index 00000000000..96c1f530133
--- /dev/null
+++ b/boost/boost/python/detail/unwrap_type_id.hpp
@@ -0,0 +1,31 @@
+// Copyright David Abrahams 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)
+#ifndef UNWRAP_TYPE_ID_DWA2004722_HPP
+# define UNWRAP_TYPE_ID_DWA2004722_HPP
+
+# include <boost/python/type_id.hpp>
+
+# include <boost/mpl/bool.hpp>
+
+namespace boost { namespace python {
+
+template <class T> class wrapper;
+
+namespace detail {
+
+template <class T>
+inline type_info unwrap_type_id(T*, ...)
+{
+ return type_id<T>();
+}
+
+template <class U, class T>
+inline type_info unwrap_type_id(U*, wrapper<T>*)
+{
+ return type_id<T>();
+}
+
+}}} // namespace boost::python::detail
+
+#endif // UNWRAP_TYPE_ID_DWA2004722_HPP
diff --git a/boost/boost/python/detail/unwrap_wrapper.hpp b/boost/boost/python/detail/unwrap_wrapper.hpp
new file mode 100644
index 00000000000..95bc233a728
--- /dev/null
+++ b/boost/boost/python/detail/unwrap_wrapper.hpp
@@ -0,0 +1,34 @@
+// Copyright David Abrahams 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)
+#ifndef UNWRAP_WRAPPER_DWA2004723_HPP
+# define UNWRAP_WRAPPER_DWA2004723_HPP
+
+# include <boost/python/detail/prefix.hpp>
+# include <boost/python/detail/is_wrapper.hpp>
+# include <boost/mpl/eval_if.hpp>
+# include <boost/mpl/identity.hpp>
+
+namespace boost { namespace python { namespace detail {
+
+template <class T>
+struct unwrap_wrapper_helper
+{
+ typedef typename T::_wrapper_wrapped_type_ type;
+};
+
+template <class T>
+struct unwrap_wrapper_
+ : mpl::eval_if<is_wrapper<T>,unwrap_wrapper_helper<T>,mpl::identity<T> >
+{};
+
+template <class T>
+typename unwrap_wrapper_<T>::type*
+unwrap_wrapper(T*)
+{
+ return 0;
+}
+
+}}} // namespace boost::python::detail
+
+#endif // UNWRAP_WRAPPER_DWA2004723_HPP
diff --git a/boost/boost/python/detail/value_arg.hpp b/boost/boost/python/detail/value_arg.hpp
new file mode 100644
index 00000000000..747588d6fd6
--- /dev/null
+++ b/boost/boost/python/detail/value_arg.hpp
@@ -0,0 +1,27 @@
+// Copyright David Abrahams 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)
+#ifndef VALUE_ARG_DWA2004312_HPP
+# define VALUE_ARG_DWA2004312_HPP
+
+# include <boost/python/detail/copy_ctor_mutates_rhs.hpp>
+# include <boost/mpl/if.hpp>
+# include <boost/type_traits/add_reference.hpp>
+# include <boost/type_traits/add_const.hpp>
+
+namespace boost { namespace python { namespace detail {
+
+template <class T>
+struct value_arg
+ : mpl::if_<
+ copy_ctor_mutates_rhs<T>
+ , T
+ , typename add_reference<
+ typename add_const<T>::type
+ >::type
+ >
+{};
+
+}}} // namespace boost::python::detail
+
+#endif // VALUE_ARG_DWA2004312_HPP
diff --git a/boost/boost/python/detail/value_is_shared_ptr.hpp b/boost/boost/python/detail/value_is_shared_ptr.hpp
new file mode 100644
index 00000000000..361c369b5bb
--- /dev/null
+++ b/boost/boost/python/detail/value_is_shared_ptr.hpp
@@ -0,0 +1,17 @@
+// Copyright David Abrahams 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)
+#ifndef VALUE_IS_SHARED_PTR_DWA2003224_HPP
+# define VALUE_IS_SHARED_PTR_DWA2003224_HPP
+
+# include <boost/python/detail/value_is_xxx.hpp>
+# include <boost/shared_ptr.hpp>
+
+namespace boost { namespace python { namespace detail {
+
+BOOST_PYTHON_VALUE_IS_XXX_DEF(shared_ptr, shared_ptr, 1)
+
+}}} // namespace boost::python::detail
+
+#endif // VALUE_IS_SHARED_PTR_DWA2003224_HPP
diff --git a/boost/boost/python/detail/value_is_xxx.hpp b/boost/boost/python/detail/value_is_xxx.hpp
new file mode 100644
index 00000000000..2b125649077
--- /dev/null
+++ b/boost/boost/python/detail/value_is_xxx.hpp
@@ -0,0 +1,62 @@
+// Copyright David Abrahams 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)
+#ifndef VALUE_IS_XXX_DWA2003224_HPP
+# define VALUE_IS_XXX_DWA2003224_HPP
+
+# include <boost/config.hpp>
+# include <boost/mpl/bool.hpp>
+# include <boost/preprocessor/enum_params.hpp>
+
+# if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+# include <boost/type_traits/is_reference.hpp>
+# include <boost/type_traits/add_reference.hpp>
+
+# define BOOST_PYTHON_VALUE_IS_XXX_DEF(name, qualified_name, nargs) \
+template <class X_> \
+struct value_is_##name \
+{ \
+ typedef char yes; \
+ typedef char (&no)[2]; \
+ \
+ static typename add_reference<X_>::type dummy; \
+ \
+ template < BOOST_PP_ENUM_PARAMS_Z(1, nargs, class U) > \
+ static yes test( \
+ qualified_name< BOOST_PP_ENUM_PARAMS_Z(1, nargs, U) > const&, int \
+ ); \
+ \
+ template <class U> \
+ static no test(U&, ...); \
+ \
+ BOOST_STATIC_CONSTANT( \
+ bool, value \
+ = (sizeof(test(dummy, 0)) == sizeof(yes))); \
+ \
+ typedef mpl::bool_<value> type; \
+};
+
+# else
+
+# include <boost/type_traits/remove_reference.hpp>
+# include <boost/type_traits/remove_cv.hpp>
+# include <boost/python/detail/is_xxx.hpp>
+
+# define BOOST_PYTHON_VALUE_IS_XXX_DEF(name, qualified_name, nargs) \
+template <class X_> \
+struct value_is_##name \
+{ \
+ BOOST_PYTHON_IS_XXX_DEF(name,qualified_name,nargs) \
+ BOOST_STATIC_CONSTANT(bool, value = is_##name< \
+ typename remove_cv< \
+ typename remove_reference<X_>::type \
+ >::type \
+ >::value); \
+ typedef mpl::bool_<value> type; \
+ \
+};
+
+# endif
+
+#endif // VALUE_IS_XXX_DWA2003224_HPP
diff --git a/boost/boost/python/detail/void_ptr.hpp b/boost/boost/python/detail/void_ptr.hpp
new file mode 100644
index 00000000000..06f680104db
--- /dev/null
+++ b/boost/boost/python/detail/void_ptr.hpp
@@ -0,0 +1,35 @@
+// Copyright David Abrahams 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)
+#ifndef VOID_PTR_DWA200239_HPP
+# define VOID_PTR_DWA200239_HPP
+
+# include <boost/type_traits/remove_cv.hpp>
+
+namespace boost { namespace python { namespace detail {
+
+template <class U>
+inline U& void_ptr_to_reference(void const volatile* p, U&(*)())
+{
+ return *(U*)p;
+}
+
+template <class T>
+inline void write_void_ptr(void const volatile* storage, void* ptr, T*)
+{
+ *(T**)storage = (T*)ptr;
+}
+
+// writes U(ptr) into the storage
+template <class U>
+inline void write_void_ptr_reference(void const volatile* storage, void* ptr, U&(*)())
+{
+ // stripping CV qualification suppresses warnings on older EDGs
+ typedef typename remove_cv<U>::type u_stripped;
+ write_void_ptr(storage, ptr, u_stripped(0));
+}
+
+}}} // namespace boost::python::detail
+
+#endif // VOID_PTR_DWA200239_HPP
diff --git a/boost/boost/python/detail/void_return.hpp b/boost/boost/python/detail/void_return.hpp
new file mode 100644
index 00000000000..30db8251770
--- /dev/null
+++ b/boost/boost/python/detail/void_return.hpp
@@ -0,0 +1,42 @@
+// Copyright David Abrahams 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)
+#ifndef VOID_RETURN_DWA200274_HPP
+# define VOID_RETURN_DWA200274_HPP
+
+# include <boost/config.hpp>
+
+namespace boost { namespace python { namespace detail {
+
+struct void_return
+{
+ void_return() {}
+ private:
+ void operator=(void_return const&);
+};
+
+template <class T>
+struct returnable
+{
+ typedef T type;
+};
+
+# ifdef BOOST_NO_VOID_RETURNS
+template <>
+struct returnable<void>
+{
+ typedef void_return type;
+};
+
+# ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
+template <> struct returnable<const void> : returnable<void> {};
+template <> struct returnable<volatile void> : returnable<void> {};
+template <> struct returnable<const volatile void> : returnable<void> {};
+# endif
+
+# endif // BOOST_NO_VOID_RETURNS
+
+}}} // namespace boost::python::detail
+
+#endif // VOID_RETURN_DWA200274_HPP
diff --git a/boost/boost/python/detail/wrap_python.hpp b/boost/boost/python/detail/wrap_python.hpp
new file mode 100644
index 00000000000..af76fcceb5f
--- /dev/null
+++ b/boost/boost/python/detail/wrap_python.hpp
@@ -0,0 +1,192 @@
+// (C) Copyright David Abrahams 2000.
+// 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)
+//
+// The author gratefully acknowleges the support of Dragon Systems, Inc., in
+// producing this work.
+
+// This file serves as a wrapper around <Python.h> which allows it to be
+// compiled with GCC 2.95.2 under Win32 and which disables the default MSVC
+// behavior so that a program may be compiled in debug mode without requiring a
+// special debugging build of the Python library.
+
+
+// To use the Python debugging library, #define BOOST_DEBUG_PYTHON on the
+// compiler command-line.
+
+// Revision History:
+// 05 Mar 01 Suppress warnings under Cygwin with Python 2.0 (Dave Abrahams)
+// 04 Mar 01 Rolled in some changes from the Dragon fork (Dave Abrahams)
+// 01 Mar 01 define PyObject_INIT() for Python 1.x (Dave Abrahams)
+
+#ifdef _DEBUG
+# ifndef BOOST_DEBUG_PYTHON
+# ifdef _MSC_VER
+ // VC8.0 will complain if system headers are #included both with
+ // and without _DEBUG defined, so we have to #include all the
+ // system headers used by pyconfig.h right here.
+# include <stddef.h>
+# include <stdarg.h>
+# include <stdio.h>
+# include <stdlib.h>
+# include <assert.h>
+# include <errno.h>
+# include <ctype.h>
+# include <wchar.h>
+# include <basetsd.h>
+# include <io.h>
+# include <limits.h>
+# include <float.h>
+# include <string.h>
+# include <math.h>
+# include <time.h>
+# endif
+# undef _DEBUG // Don't let Python force the debug library just because we're debugging.
+# define DEBUG_UNDEFINED_FROM_WRAP_PYTHON_H
+# endif
+#endif
+
+# include <pyconfig.h>
+# if defined(_SGI_COMPILER_VERSION) && _SGI_COMPILER_VERSION >= 740
+# undef _POSIX_C_SOURCE
+# undef _XOPEN_SOURCE
+# undef HAVE_STDINT_H // undo Python 2.5.1 define
+# endif
+
+//
+// Python's LongObject.h helpfully #defines ULONGLONG_MAX for us,
+// which confuses Boost's config
+//
+#include <limits.h>
+#ifndef ULONG_MAX
+# define BOOST_PYTHON_ULONG_MAX_UNDEFINED
+#endif
+#ifndef LONGLONG_MAX
+# define BOOST_PYTHON_LONGLONG_MAX_UNDEFINED
+#endif
+#ifndef ULONGLONG_MAX
+# define BOOST_PYTHON_ULONGLONG_MAX_UNDEFINED
+#endif
+
+//
+// Get ahold of Python's version number
+//
+#include <patchlevel.h>
+
+#if PY_MAJOR_VERSION<2 || PY_MAJOR_VERSION==2 && PY_MINOR_VERSION<2
+#error Python 2.2 or higher is required for this version of Boost.Python.
+#endif
+
+//
+// Some things we need in order to get Python.h to work with compilers other
+// than MSVC on Win32
+//
+#if defined(_WIN32) || defined(__CYGWIN__)
+# if defined(__GNUC__) && defined(__CYGWIN__)
+
+# define SIZEOF_LONG 4
+
+# if PY_MAJOR_VERSION < 2 || PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION <= 2
+
+typedef int pid_t;
+
+# define WORD_BIT 32
+# define hypot _hypot
+# include <stdio.h>
+
+# if PY_MAJOR_VERSION < 2
+# define HAVE_CLOCK
+# define HAVE_STRFTIME
+# define HAVE_STRERROR
+# endif
+
+# define NT_THREADS
+
+# ifndef NETSCAPE_PI
+# define USE_SOCKET
+# endif
+
+# ifdef USE_DL_IMPORT
+# define DL_IMPORT(RTYPE) __declspec(dllimport) RTYPE
+# endif
+
+# ifdef USE_DL_EXPORT
+# define DL_IMPORT(RTYPE) __declspec(dllexport) RTYPE
+# define DL_EXPORT(RTYPE) __declspec(dllexport) RTYPE
+# endif
+
+# define HAVE_LONG_LONG 1
+# define LONG_LONG long long
+# endif
+
+# elif defined(__MWERKS__)
+
+# ifndef _MSC_VER
+# define PY_MSC_VER_DEFINED_FROM_WRAP_PYTHON_H 1
+# define _MSC_VER 900
+# endif
+
+# undef hypot // undo the evil #define left by Python.
+
+# elif defined(__BORLANDC__)
+# undef HAVE_HYPOT
+# define HAVE_HYPOT 1
+# endif
+
+#endif // _WIN32
+
+#if PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION == 2 && PY_MICRO_VERSION < 2
+# include <boost/python/detail/python22_fixed.h>
+#else
+# include <Python.h>
+#endif
+
+#ifdef BOOST_PYTHON_ULONG_MAX_UNDEFINED
+# undef ULONG_MAX
+# undef BOOST_PYTHON_ULONG_MAX_UNDEFINED
+#endif
+
+#ifdef BOOST_PYTHON_LONGLONG_MAX_UNDEFINED
+# undef LONGLONG_MAX
+# undef BOOST_PYTHON_LONGLONG_MAX_UNDEFINED
+#endif
+
+#ifdef BOOST_PYTHON_ULONGLONG_MAX_UNDEFINED
+# undef ULONGLONG_MAX
+# undef BOOST_PYTHON_ULONGLONG_MAX_UNDEFINED
+#endif
+
+#ifdef PY_MSC_VER_DEFINED_FROM_WRAP_PYTHON_H
+# undef _MSC_VER
+#endif
+
+#ifdef DEBUG_UNDEFINED_FROM_WRAP_PYTHON_H
+# undef DEBUG_UNDEFINED_FROM_WRAP_PYTHON_H
+# define _DEBUG
+# ifdef _CRT_NOFORCE_MANIFEST_DEFINED_FROM_WRAP_PYTHON_H
+# undef _CRT_NOFORCE_MANIFEST_DEFINED_FROM_WRAP_PYTHON_H
+# undef _CRT_NOFORCE_MANIFEST
+# endif
+#endif
+
+#if !defined(PY_MAJOR_VERSION) || PY_MAJOR_VERSION < 2
+# define PyObject_INIT(op, typeobj) \
+ ( (op)->ob_type = (typeobj), _Py_NewReference((PyObject *)(op)), (op) )
+#endif
+
+#ifdef __MWERKS__
+# pragma warn_possunwant off
+#elif _MSC_VER
+# pragma warning(disable:4786)
+#endif
+
+#if defined(HAVE_LONG_LONG)
+# if defined(PY_LONG_LONG)
+# define BOOST_PYTHON_LONG_LONG PY_LONG_LONG
+# elif defined(LONG_LONG)
+# define BOOST_PYTHON_LONG_LONG LONG_LONG
+# else
+# error "HAVE_LONG_LONG defined but not PY_LONG_LONG or LONG_LONG"
+# endif
+#endif
diff --git a/boost/boost/python/detail/wrapper_base.hpp b/boost/boost/python/detail/wrapper_base.hpp
new file mode 100644
index 00000000000..e5b93aa449b
--- /dev/null
+++ b/boost/boost/python/detail/wrapper_base.hpp
@@ -0,0 +1,90 @@
+// Copyright David Abrahams 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)
+#ifndef WRAPPER_BASE_DWA2004722_HPP
+# define WRAPPER_BASE_DWA2004722_HPP
+
+# include <boost/python/detail/prefix.hpp>
+# include <boost/type_traits/is_polymorphic.hpp>
+# include <boost/mpl/bool.hpp>
+
+namespace boost { namespace python {
+
+class override;
+
+namespace detail
+{
+ class BOOST_PYTHON_DECL_FORWARD wrapper_base;
+
+ namespace wrapper_base_ // ADL disabler
+ {
+ inline PyObject* get_owner(wrapper_base const volatile& w);
+
+ inline PyObject*
+ owner_impl(void const volatile* /*x*/, mpl::false_)
+ {
+ return 0;
+ }
+
+ template <class T>
+ inline PyObject*
+ owner_impl(T const volatile* x, mpl::true_);
+
+ template <class T>
+ inline PyObject*
+ owner(T const volatile* x)
+ {
+ return wrapper_base_::owner_impl(x,is_polymorphic<T>());
+ }
+ }
+
+ class BOOST_PYTHON_DECL wrapper_base
+ {
+ friend void initialize_wrapper(PyObject* self, wrapper_base* w);
+ friend PyObject* wrapper_base_::get_owner(wrapper_base const volatile& w);
+ protected:
+ wrapper_base() : m_self(0) {}
+
+ override get_override(
+ char const* name, PyTypeObject* class_object) const;
+
+ private:
+ void detach();
+
+ private:
+ PyObject* m_self;
+ };
+
+ namespace wrapper_base_ // ADL disabler
+ {
+ template <class T>
+ inline PyObject*
+ owner_impl(T const volatile* x, mpl::true_)
+ {
+ if (wrapper_base const volatile* w = dynamic_cast<wrapper_base const volatile*>(x))
+ {
+ return wrapper_base_::get_owner(*w);
+ }
+ return 0;
+ }
+
+ inline PyObject* get_owner(wrapper_base const volatile& w)
+ {
+ return w.m_self;
+ }
+ }
+
+ inline void initialize_wrapper(PyObject* self, wrapper_base* w)
+ {
+ w->m_self = self;
+ }
+
+ inline void initialize_wrapper(PyObject* /*self*/, ...) {}
+
+
+
+} // namespace detail
+
+}} // namespace boost::python
+
+#endif // WRAPPER_BASE_DWA2004722_HPP
diff --git a/boost/boost/python/dict.hpp b/boost/boost/python/dict.hpp
new file mode 100644
index 00000000000..6fcaf14382a
--- /dev/null
+++ b/boost/boost/python/dict.hpp
@@ -0,0 +1,152 @@
+// Copyright David Abrahams 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)
+#ifndef DICT_20020706_HPP
+#define DICT_20020706_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+#include <boost/python/object.hpp>
+#include <boost/python/list.hpp>
+#include <boost/python/tuple.hpp>
+#include <boost/python/converter/pytype_object_mgr_traits.hpp>
+
+namespace boost { namespace python {
+
+class dict;
+
+namespace detail
+{
+ struct BOOST_PYTHON_DECL dict_base : object
+ {
+ // D.clear() -> None. Remove all items from D.
+ void clear();
+
+ // D.copy() -> a shallow copy of D
+ dict copy();
+
+ // D.get(k[,d]) -> D[k] if D.has_key(k), else d. d defaults to None.
+ object get(object_cref k) const;
+
+ object get(object_cref k, object_cref d) const;
+
+ // D.has_key(k) -> 1 if D has a key k, else 0
+ bool has_key(object_cref k) const;
+
+ // D.items() -> list of D's (key, value) pairs, as 2-tuples
+ list items() const;
+
+ // D.iteritems() -> an iterator over the (key, value) items of D
+ object iteritems() const;
+
+ // D.iterkeys() -> an iterator over the keys of D
+ object iterkeys() const;
+
+ // D.itervalues() -> an iterator over the values of D
+ object itervalues() const;
+
+ // D.keys() -> list of D's keys
+ list keys() const;
+
+ // D.popitem() -> (k, v), remove and return some (key, value) pair as a
+ // 2-tuple; but raise KeyError if D is empty
+ tuple popitem();
+
+ // D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if not D.has_key(k)
+ object setdefault(object_cref k);
+
+ object setdefault(object_cref k, object_cref d);
+
+ // D.update(E) -> None. Update D from E: for k in E.keys(): D[k] = E[k]
+ void update(object_cref E);
+
+ // D.values() -> list of D's values
+ list values() const;
+
+ protected:
+ // dict() -> new empty dictionary.
+ // dict(mapping) -> new dictionary initialized from a mapping object's
+ // (key, value) pairs.
+ // dict(seq) -> new dictionary initialized as if via:
+ dict_base(); // new dict
+ explicit dict_base(object_cref data);
+
+ BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS(dict_base, object)
+ private:
+ static detail::new_reference call(object const&);
+ };
+}
+
+class dict : public detail::dict_base
+{
+ typedef detail::dict_base base;
+ public:
+ // dict() -> new empty dictionary.
+ // dict(mapping) -> new dictionary initialized from a mapping object's
+ // (key, value) pairs.
+ // dict(seq) -> new dictionary initialized as if via:
+ dict() {} // new dict
+
+ template <class T>
+ explicit dict(T const& data)
+ : base(object(data))
+ {
+ }
+
+ template<class T>
+ object get(T const& k) const
+ {
+ return base::get(object(k));
+ }
+
+ template<class T1, class T2>
+ object get(T1 const& k, T2 const& d) const
+ {
+ return base::get(object(k),object(d));
+ }
+
+ template<class T>
+ bool has_key(T const& k) const
+ {
+ return base::has_key(object(k));
+ }
+
+ template<class T>
+ object setdefault(T const& k)
+ {
+ return base::setdefault(object(k));
+ }
+
+ template<class T1, class T2>
+ object setdefault(T1 const& k, T2 const& d)
+ {
+ return base::setdefault(object(k),object(d));
+ }
+
+ template<class T>
+ void update(T const& E)
+ {
+ base::update(object(E));
+ }
+
+ public: // implementation detail -- for internal use only
+ BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS(dict, base)
+};
+
+//
+// Converter Specializations
+//
+namespace converter
+{
+ template <>
+ struct object_manager_traits<dict>
+ : pytype_object_manager_traits<&PyDict_Type,dict>
+ {
+ };
+}
+
+}} // namespace boost::python
+
+#endif
+
diff --git a/boost/boost/python/docstring_options.hpp b/boost/boost/python/docstring_options.hpp
new file mode 100644
index 00000000000..507a4c5d8bd
--- /dev/null
+++ b/boost/boost/python/docstring_options.hpp
@@ -0,0 +1,76 @@
+// Copyright Ralf W. Grosse-Kunstleve 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)
+#ifndef DOCSTRING_OPTIONS_RWGK20060111_HPP
+# define DOCSTRING_OPTIONS_RWGK20060111_HPP
+
+#include <boost/python/object/function.hpp>
+
+namespace boost { namespace python {
+
+// Note: the static data members are defined in object/function.cpp
+
+class BOOST_PYTHON_DECL docstring_options : boost::noncopyable
+{
+ public:
+ docstring_options(bool show_all=true)
+ {
+ previous_show_user_defined_ = show_user_defined_;
+ previous_show_signatures_ = show_signatures_;
+ show_user_defined_ = show_all;
+ show_signatures_ = show_all;
+ }
+
+ docstring_options(bool show_user_defined, bool show_signatures)
+ {
+ previous_show_user_defined_ = show_user_defined_;
+ previous_show_signatures_ = show_signatures_;
+ show_user_defined_ = show_user_defined;
+ show_signatures_ = show_signatures;
+ }
+
+ ~docstring_options()
+ {
+ show_user_defined_ = previous_show_user_defined_;
+ show_signatures_ = previous_show_signatures_;
+ }
+
+ void
+ disable_user_defined() { show_user_defined_ = false; }
+
+ void
+ enable_user_defined() { show_user_defined_ = true; }
+
+ void
+ disable_signatures() { show_signatures_ = false; }
+
+ void
+ enable_signatures() { show_signatures_ = true; }
+
+ void
+ disable_all()
+ {
+ show_user_defined_ = false;
+ show_signatures_ = false;
+ }
+
+ void
+ enable_all()
+ {
+ show_user_defined_ = true;
+ show_signatures_ = true;
+ }
+
+ friend struct objects::function;
+
+ private:
+ static volatile bool show_user_defined_;
+ static volatile bool show_signatures_;
+ bool previous_show_user_defined_;
+ bool previous_show_signatures_;
+};
+
+}} // namespace boost::python
+
+#endif // DOCSTRING_OPTIONS_RWGK20060111_HPP
diff --git a/boost/boost/python/enum.hpp b/boost/boost/python/enum.hpp
new file mode 100644
index 00000000000..24b616a4f29
--- /dev/null
+++ b/boost/boost/python/enum.hpp
@@ -0,0 +1,102 @@
+// Copyright David Abrahams 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)
+#ifndef ENUM_DWA200298_HPP
+# define ENUM_DWA200298_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+# include <boost/python/object/enum_base.hpp>
+# include <boost/python/converter/rvalue_from_python_data.hpp>
+# include <boost/python/converter/registered.hpp>
+
+namespace boost { namespace python {
+
+template <class T>
+struct enum_ : public objects::enum_base
+{
+ typedef objects::enum_base base;
+
+ // Declare a new enumeration type in the current scope()
+ enum_(char const* name);
+
+ // Add a new enumeration value with the given name and value.
+ inline enum_<T>& value(char const* name, T);
+
+ // Add all of the defined enumeration values to the current scope with the
+ // same names used here.
+ inline enum_<T>& export_values();
+ private:
+ static PyObject* to_python(void const* x);
+ static void* convertible_from_python(PyObject* obj);
+ static void construct(PyObject* obj, converter::rvalue_from_python_stage1_data* data);
+};
+
+template <class T>
+inline enum_<T>::enum_(char const* name)
+ : base(
+ name
+ , &enum_<T>::to_python
+ , &enum_<T>::convertible_from_python
+ , &enum_<T>::construct
+ , type_id<T>())
+{
+}
+
+// This is the conversion function that gets registered for converting
+// these enums to Python.
+template <class T>
+PyObject* enum_<T>::to_python(void const* x)
+{
+ return base::to_python(
+ converter::registered<T>::converters.m_class_object
+ , static_cast<long>(*(T const*)x));
+}
+
+//
+// The following two static functions serve as the elements of an
+// rvalue from_python converter for the enumeration type.
+//
+
+// This checks that a given Python object can be converted to the
+// enumeration type.
+template <class T>
+void* enum_<T>::convertible_from_python(PyObject* obj)
+{
+ return PyObject_IsInstance(
+ obj
+ , upcast<PyObject>(
+ converter::registered<T>::converters.m_class_object))
+
+ ? obj : 0;
+}
+
+// Constructs an instance of the enumeration type in the from_python
+// data.
+template <class T>
+void enum_<T>::construct(PyObject* obj, converter::rvalue_from_python_stage1_data* data)
+{
+ T x = static_cast<T>(PyInt_AS_LONG(obj));
+ void* const storage = ((converter::rvalue_from_python_storage<T>*)data)->storage.bytes;
+ new (storage) T(x);
+ data->convertible = storage;
+}
+
+template <class T>
+inline enum_<T>& enum_<T>::value(char const* name, T x)
+{
+ this->add_value(name, static_cast<long>(x));
+ return *this;
+}
+
+template <class T>
+inline enum_<T>& enum_<T>::export_values()
+{
+ this->base::export_values();
+ return *this;
+}
+
+}} // namespace boost::python
+
+#endif // ENUM_DWA200298_HPP
diff --git a/boost/boost/python/errors.hpp b/boost/boost/python/errors.hpp
new file mode 100644
index 00000000000..72960d9ea2c
--- /dev/null
+++ b/boost/boost/python/errors.hpp
@@ -0,0 +1,55 @@
+// (C) Copyright David Abrahams 2000.
+// 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)
+//
+// The author gratefully acknowleges the support of Dragon Systems, Inc., in
+// producing this work.
+
+#ifndef ERRORS_DWA052500_H_
+# define ERRORS_DWA052500_H_
+
+# include <boost/python/detail/prefix.hpp>
+# include <boost/function/function0.hpp>
+
+namespace boost { namespace python {
+
+struct BOOST_PYTHON_DECL_EXCEPTION error_already_set
+{
+ virtual ~error_already_set();
+};
+
+// Handles exceptions caught just before returning to Python code.
+// Returns true iff an exception was caught.
+BOOST_PYTHON_DECL bool handle_exception_impl(function0<void>);
+
+template <class T>
+bool handle_exception(T f)
+{
+ return handle_exception_impl(function0<void>(boost::ref(f)));
+}
+
+namespace detail { inline void rethrow() { throw; } }
+
+inline void handle_exception()
+{
+ handle_exception(detail::rethrow);
+}
+
+BOOST_PYTHON_DECL void throw_error_already_set();
+
+template <class T>
+inline T* expect_non_null(T* x)
+{
+ if (x == 0)
+ throw_error_already_set();
+ return x;
+}
+
+// Return source if it is an instance of pytype; throw an appropriate
+// exception otherwise.
+BOOST_PYTHON_DECL PyObject* pytype_check(PyTypeObject* pytype, PyObject* source);
+
+}} // namespace boost::python
+
+#endif // ERRORS_DWA052500_H_
diff --git a/boost/boost/python/exception_translator.hpp b/boost/boost/python/exception_translator.hpp
new file mode 100644
index 00000000000..60760dce29f
--- /dev/null
+++ b/boost/boost/python/exception_translator.hpp
@@ -0,0 +1,27 @@
+// Copyright David Abrahams 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)
+#ifndef EXCEPTION_TRANSLATOR_DWA2002810_HPP
+# define EXCEPTION_TRANSLATOR_DWA2002810_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+# include <boost/bind.hpp>
+# include <boost/type.hpp>
+# include <boost/python/detail/translate_exception.hpp>
+# include <boost/python/detail/exception_handler.hpp>
+
+namespace boost { namespace python {
+
+template <class ExceptionType, class Translate>
+void register_exception_translator(Translate translate, boost::type<ExceptionType>* = 0)
+{
+ detail::register_exception_handler(
+ bind<bool>(detail::translate_exception<ExceptionType,Translate>(), _1, _2, translate)
+ );
+}
+
+}} // namespace boost::python
+
+#endif // EXCEPTION_TRANSLATOR_DWA2002810_HPP
diff --git a/boost/boost/python/exec.hpp b/boost/boost/python/exec.hpp
new file mode 100644
index 00000000000..359830a4b9a
--- /dev/null
+++ b/boost/boost/python/exec.hpp
@@ -0,0 +1,40 @@
+// Copyright Stefan Seefeld 2005.
+// 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 EXEC_SS20050616_HPP
+# define EXEC_SS20050616_HPP
+
+# include <boost/python/object.hpp>
+# include <boost/python/str.hpp>
+
+namespace boost
+{
+namespace python
+{
+
+// Evaluate python expression from str.
+// global and local are the global and local scopes respectively,
+// used during evaluation.
+object
+BOOST_PYTHON_DECL
+eval(str string, object global = object(), object local = object());
+
+// Execute python source code from str.
+// global and local are the global and local scopes respectively,
+// used during execution.
+object
+BOOST_PYTHON_DECL
+exec(str string, object global = object(), object local = object());
+
+// Execute python source code from file filename.
+// global and local are the global and local scopes respectively,
+// used during execution.
+object
+BOOST_PYTHON_DECL
+exec_file(str filename, object global = object(), object local = object());
+
+}
+}
+
+#endif
diff --git a/boost/boost/python/extract.hpp b/boost/boost/python/extract.hpp
new file mode 100644
index 00000000000..4e876f5009f
--- /dev/null
+++ b/boost/boost/python/extract.hpp
@@ -0,0 +1,261 @@
+// Copyright David Abrahams 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)
+#ifndef EXTRACT_DWA200265_HPP
+# define EXTRACT_DWA200265_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+# include <boost/python/converter/object_manager.hpp>
+# include <boost/python/converter/from_python.hpp>
+# include <boost/python/converter/rvalue_from_python_data.hpp>
+# include <boost/python/converter/registered.hpp>
+# include <boost/python/converter/registered_pointee.hpp>
+
+# include <boost/python/object_core.hpp>
+# include <boost/python/refcount.hpp>
+
+# include <boost/python/detail/copy_ctor_mutates_rhs.hpp>
+# include <boost/python/detail/void_ptr.hpp>
+# include <boost/python/detail/void_return.hpp>
+# include <boost/utility.hpp>
+# include <boost/call_traits.hpp>
+
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) || BOOST_WORKAROUND(BOOST_INTEL_WIN, <= 900)
+// workaround for VC++ 6.x or 7.0
+# define BOOST_EXTRACT_WORKAROUND ()
+#else
+# define BOOST_EXTRACT_WORKAROUND
+#endif
+
+namespace boost { namespace python {
+
+namespace api
+{
+ class object;
+}
+
+namespace converter
+{
+ template <class Ptr>
+ struct extract_pointer
+ {
+ typedef Ptr result_type;
+ extract_pointer(PyObject*);
+
+ bool check() const;
+ Ptr operator()() const;
+
+ private:
+ PyObject* m_source;
+ void* m_result;
+ };
+
+ template <class Ref>
+ struct extract_reference
+ {
+ typedef Ref result_type;
+ extract_reference(PyObject*);
+
+ bool check() const;
+ Ref operator()() const;
+
+ private:
+ PyObject* m_source;
+ void* m_result;
+ };
+
+ template <class T>
+ struct extract_rvalue : private noncopyable
+ {
+ typedef typename mpl::if_<
+ python::detail::copy_ctor_mutates_rhs<T>
+ , T&
+ , typename call_traits<T>::param_type
+ >::type result_type;
+
+ extract_rvalue(PyObject*);
+
+ bool check() const;
+ result_type operator()() const;
+ private:
+ PyObject* m_source;
+ mutable rvalue_from_python_data<T> m_data;
+ };
+
+ template <class T>
+ struct extract_object_manager
+ {
+ typedef T result_type;
+ extract_object_manager(PyObject*);
+
+ bool check() const;
+ result_type operator()() const;
+ private:
+ PyObject* m_source;
+ };
+
+ template <class T>
+ struct select_extract
+ {
+ BOOST_STATIC_CONSTANT(
+ bool, obj_mgr = is_object_manager<T>::value);
+
+ BOOST_STATIC_CONSTANT(
+ bool, ptr = is_pointer<T>::value);
+
+ BOOST_STATIC_CONSTANT(
+ bool, ref = is_reference<T>::value);
+
+ typedef typename mpl::if_c<
+ obj_mgr
+ , extract_object_manager<T>
+ , typename mpl::if_c<
+ ptr
+ , extract_pointer<T>
+ , typename mpl::if_c<
+ ref
+ , extract_reference<T>
+ , extract_rvalue<T>
+ >::type
+ >::type
+ >::type type;
+ };
+}
+
+template <class T>
+struct extract
+ : converter::select_extract<T>::type
+{
+ private:
+ typedef typename converter::select_extract<T>::type base;
+ public:
+ typedef typename base::result_type result_type;
+
+ operator result_type() const
+ {
+ return (*this)();
+ }
+
+ extract(PyObject*);
+ extract(api::object const&);
+};
+
+//
+// Implementations
+//
+template <class T>
+inline extract<T>::extract(PyObject* o)
+ : base(o)
+{
+}
+
+template <class T>
+inline extract<T>::extract(api::object const& o)
+ : base(o.ptr())
+{
+}
+
+namespace converter
+{
+ template <class T>
+ inline extract_rvalue<T>::extract_rvalue(PyObject* x)
+ : m_source(x)
+ , m_data(
+ (rvalue_from_python_stage1)(x, registered<T>::converters)
+ )
+ {
+ }
+
+ template <class T>
+ inline bool
+ extract_rvalue<T>::check() const
+ {
+ return m_data.stage1.convertible;
+ }
+
+ template <class T>
+ inline typename extract_rvalue<T>::result_type
+ extract_rvalue<T>::operator()() const
+ {
+ return *(T*)(
+ // Only do the stage2 conversion once
+ m_data.stage1.convertible == m_data.storage.bytes
+ ? m_data.storage.bytes
+ : (rvalue_from_python_stage2)(m_source, m_data.stage1, registered<T>::converters)
+ );
+ }
+
+ template <class Ref>
+ inline extract_reference<Ref>::extract_reference(PyObject* obj)
+ : m_source(obj)
+ , m_result(
+ (get_lvalue_from_python)(obj, registered<Ref>::converters)
+ )
+ {
+ }
+
+ template <class Ref>
+ inline bool extract_reference<Ref>::check() const
+ {
+ return m_result != 0;
+ }
+
+ template <class Ref>
+ inline Ref extract_reference<Ref>::operator()() const
+ {
+ if (m_result == 0)
+ (throw_no_reference_from_python)(m_source, registered<Ref>::converters);
+
+ return python::detail::void_ptr_to_reference(m_result, (Ref(*)())0);
+ }
+
+ template <class Ptr>
+ inline extract_pointer<Ptr>::extract_pointer(PyObject* obj)
+ : m_source(obj)
+ , m_result(
+ obj == Py_None ? 0 : (get_lvalue_from_python)(obj, registered_pointee<Ptr>::converters)
+ )
+ {
+ }
+
+ template <class Ptr>
+ inline bool extract_pointer<Ptr>::check() const
+ {
+ return m_source == Py_None || m_result != 0;
+ }
+
+ template <class Ptr>
+ inline Ptr extract_pointer<Ptr>::operator()() const
+ {
+ if (m_result == 0 && m_source != Py_None)
+ (throw_no_pointer_from_python)(m_source, registered_pointee<Ptr>::converters);
+
+ return Ptr(m_result);
+ }
+
+ template <class T>
+ inline extract_object_manager<T>::extract_object_manager(PyObject* obj)
+ : m_source(obj)
+ {
+ }
+
+ template <class T>
+ inline bool extract_object_manager<T>::check() const
+ {
+ return object_manager_traits<T>::check(m_source);
+ }
+
+ template <class T>
+ inline T extract_object_manager<T>::operator()() const
+ {
+ return T(
+ object_manager_traits<T>::adopt(python::incref(m_source))
+ );
+ }
+}
+
+}} // namespace boost::python::converter
+
+#endif // EXTRACT_DWA200265_HPP
diff --git a/boost/boost/python/handle.hpp b/boost/boost/python/handle.hpp
new file mode 100644
index 00000000000..461a219ad89
--- /dev/null
+++ b/boost/boost/python/handle.hpp
@@ -0,0 +1,264 @@
+// Copyright David Abrahams 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)
+#ifndef HANDLE_DWA200269_HPP
+# define HANDLE_DWA200269_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+# include <boost/python/cast.hpp>
+# include <boost/python/errors.hpp>
+# include <boost/python/borrowed.hpp>
+# include <boost/python/handle_fwd.hpp>
+# include <boost/python/refcount.hpp>
+# include <boost/python/tag.hpp>
+# include <boost/python/detail/raw_pyobject.hpp>
+
+namespace boost { namespace python {
+
+template <class T> struct null_ok;
+
+template <class T>
+inline null_ok<T>* allow_null(T* p)
+{
+ return (null_ok<T>*)p;
+}
+
+namespace detail
+{
+ template <class T>
+ inline T* manage_ptr(detail::borrowed<null_ok<T> >* p, int)
+ {
+ return python::xincref((T*)p);
+ }
+
+ template <class T>
+ inline T* manage_ptr(null_ok<detail::borrowed<T> >* p, int)
+ {
+ return python::xincref((T*)p);
+ }
+
+ template <class T>
+ inline T* manage_ptr(detail::borrowed<T>* p, long)
+ {
+ return python::incref(expect_non_null((T*)p));
+ }
+
+ template <class T>
+ inline T* manage_ptr(null_ok<T>* p, long)
+ {
+ return (T*)p;
+ }
+
+ template <class T>
+ inline T* manage_ptr(T* p, ...)
+ {
+ return expect_non_null(p);
+ }
+}
+
+template <class T>
+class handle
+{
+ typedef T* (handle::* bool_type )() const;
+
+ public: // types
+ typedef T element_type;
+
+ public: // member functions
+ handle();
+ ~handle();
+
+ template <class Y>
+ explicit handle(Y* p)
+ : m_p(
+ python::upcast<T>(
+ detail::manage_ptr(p, 0)
+ )
+ )
+ {
+ }
+
+ handle& operator=(handle const& r)
+ {
+ python::xdecref(m_p);
+ m_p = python::xincref(r.m_p);
+ return *this;
+ }
+
+#if !defined(BOOST_MSVC) || (BOOST_MSVC >= 1300)
+
+ template<typename Y>
+ handle& operator=(handle<Y> const & r) // never throws
+ {
+ python::xdecref(m_p);
+ m_p = python::xincref(python::upcast<T>(r.get()));
+ return *this;
+ }
+
+#endif
+
+ template <typename Y>
+ handle(handle<Y> const& r)
+ : m_p(python::xincref(python::upcast<T>(r.get())))
+ {
+ }
+
+ handle(handle const& r)
+ : m_p(python::xincref(r.m_p))
+ {
+ }
+
+ T* operator-> () const;
+ T& operator* () const;
+ T* get() const;
+ T* release();
+ void reset();
+
+ operator bool_type() const // never throws
+ {
+ return m_p ? &handle<T>::get : 0;
+ }
+ bool operator! () const; // never throws
+
+ public: // implementation details -- do not touch
+ // Defining this in the class body suppresses a VC7 link failure
+ inline handle(detail::borrowed_reference x)
+ : m_p(
+ python::incref(
+ downcast<T>((PyObject*)x)
+ ))
+ {
+ }
+
+ private: // data members
+ T* m_p;
+};
+
+#ifdef BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
+} // namespace python
+#endif
+
+template<class T> inline T * get_pointer(python::handle<T> const & p)
+{
+ return p.get();
+}
+
+#ifdef BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
+namespace python {
+#else
+
+// We don't want get_pointer above to hide the others
+using boost::get_pointer;
+
+#endif
+
+typedef handle<PyTypeObject> type_handle;
+
+//
+// Compile-time introspection
+//
+# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+template<typename T>
+class is_handle
+{
+ public:
+ BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+template<typename T>
+class is_handle<handle<T> >
+{
+ public:
+ BOOST_STATIC_CONSTANT(bool, value = true);
+};
+# else
+namespace detail
+{
+ typedef char (&yes_handle_t)[1];
+ typedef char (&no_handle_t)[2];
+
+ no_handle_t is_handle_test(...);
+
+ template<typename T>
+ yes_handle_t is_handle_test(boost::type< handle<T> >);
+}
+
+template<typename T>
+class is_handle
+{
+ public:
+ BOOST_STATIC_CONSTANT(
+ bool, value = (
+ sizeof(detail::is_handle_test(boost::type<T>()))
+ == sizeof(detail::yes_handle_t)));
+};
+# endif
+
+//
+// implementations
+//
+template <class T>
+inline handle<T>::handle()
+ : m_p(0)
+{
+}
+
+template <class T>
+inline handle<T>::~handle()
+{
+ python::xdecref(m_p);
+}
+
+template <class T>
+inline T* handle<T>::operator->() const
+{
+ return m_p;
+}
+
+template <class T>
+inline T& handle<T>::operator*() const
+{
+ return *m_p;
+}
+
+template <class T>
+inline T* handle<T>::get() const
+{
+ return m_p;
+}
+
+template <class T>
+inline bool handle<T>::operator!() const
+{
+ return m_p == 0;
+}
+
+template <class T>
+inline T* handle<T>::release()
+{
+ T* result = m_p;
+ m_p = 0;
+ return result;
+}
+
+template <class T>
+inline void handle<T>::reset()
+{
+ python::xdecref(m_p);
+ m_p = 0;
+}
+
+// Because get_managed_object must return a non-null PyObject*, we
+// return Py_None if the handle is null.
+template <class T>
+inline PyObject* get_managed_object(handle<T> const& h, tag_t)
+{
+ return h.get() ? python::upcast<PyObject>(h.get()) : Py_None;
+}
+
+}} // namespace boost::python
+
+
+#endif // HANDLE_DWA200269_HPP
diff --git a/boost/boost/python/handle_fwd.hpp b/boost/boost/python/handle_fwd.hpp
new file mode 100644
index 00000000000..5987ec4fdbf
--- /dev/null
+++ b/boost/boost/python/handle_fwd.hpp
@@ -0,0 +1,16 @@
+// Copyright David Abrahams 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)
+#ifndef HANDLE_FWD_DWA2002615_HPP
+# define HANDLE_FWD_DWA2002615_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+namespace boost { namespace python {
+
+template <class T = PyObject> class handle;
+
+}} // namespace boost::python
+
+#endif // HANDLE_FWD_DWA2002615_HPP
diff --git a/boost/boost/python/has_back_reference.hpp b/boost/boost/python/has_back_reference.hpp
new file mode 100644
index 00000000000..67fe24c5cff
--- /dev/null
+++ b/boost/boost/python/has_back_reference.hpp
@@ -0,0 +1,24 @@
+// Copyright David Abrahams 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)
+#ifndef HAS_BACK_REFERENCE_DWA2002323_HPP
+# define HAS_BACK_REFERENCE_DWA2002323_HPP
+
+# include <boost/python/detail/prefix.hpp>
+# include <boost/mpl/bool.hpp>
+
+namespace boost { namespace python {
+
+// traits class which users can specialize to indicate that a class
+// contains a back-reference to its owning PyObject*
+template <class T>
+struct has_back_reference
+ : mpl::false_
+{
+};
+
+
+}} // namespace boost::python
+
+#endif // HAS_BACK_REFERENCE_DWA2002323_HPP
diff --git a/boost/boost/python/implicit.hpp b/boost/boost/python/implicit.hpp
new file mode 100644
index 00000000000..14a69700319
--- /dev/null
+++ b/boost/boost/python/implicit.hpp
@@ -0,0 +1,29 @@
+// Copyright David Abrahams 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)
+#ifndef IMPLICIT_DWA2002325_HPP
+# define IMPLICIT_DWA2002325_HPP
+
+# include <boost/python/detail/prefix.hpp>
+# include <boost/type.hpp>
+# include <boost/python/converter/implicit.hpp>
+# include <boost/python/converter/registry.hpp>
+# include <boost/python/type_id.hpp>
+
+namespace boost { namespace python {
+
+template <class Source, class Target>
+void implicitly_convertible(boost::type<Source>* = 0, boost::type<Target>* = 0)
+{
+ typedef converter::implicit<Source,Target> functions;
+
+ converter::registry::push_back(
+ &functions::convertible
+ , &functions::construct
+ , type_id<Target>());
+}
+
+}} // namespace boost::python
+
+#endif // IMPLICIT_DWA2002325_HPP
diff --git a/boost/boost/python/import.hpp b/boost/boost/python/import.hpp
new file mode 100644
index 00000000000..45c02a9366b
--- /dev/null
+++ b/boost/boost/python/import.hpp
@@ -0,0 +1,22 @@
+// Copyright Stefan Seefeld 2005.
+// 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 IMPORT_SS20050624_HPP
+# define IMPORT_SS20050624_HPP
+
+# include <boost/python/object.hpp>
+# include <boost/python/str.hpp>
+
+namespace boost
+{
+namespace python
+{
+
+// Import the named module and return a reference to it.
+object BOOST_PYTHON_DECL import(str name);
+
+}
+}
+
+#endif
diff --git a/boost/boost/python/init.hpp b/boost/boost/python/init.hpp
new file mode 100644
index 00000000000..a07359e666a
--- /dev/null
+++ b/boost/boost/python/init.hpp
@@ -0,0 +1,421 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// Copyright David Abrahams 2002, Joel de Guzman, 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)
+//
+///////////////////////////////////////////////////////////////////////////////
+#ifndef INIT_JDG20020820_HPP
+#define INIT_JDG20020820_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+#include <boost/python/detail/type_list.hpp>
+#include <boost/python/args_fwd.hpp>
+#include <boost/python/detail/make_keyword_range_fn.hpp>
+#include <boost/python/def_visitor.hpp>
+
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/size.hpp>
+#include <boost/mpl/iterator_range.hpp>
+#include <boost/mpl/empty.hpp>
+#include <boost/mpl/begin_end.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/prior.hpp>
+#include <boost/mpl/joint_view.hpp>
+#include <boost/mpl/back.hpp>
+
+#include <boost/type_traits/is_same.hpp>
+
+#include <boost/preprocessor/enum_params_with_a_default.hpp>
+#include <boost/preprocessor/enum_params.hpp>
+
+#include <utility>
+
+///////////////////////////////////////////////////////////////////////////////
+#define BOOST_PYTHON_OVERLOAD_TYPES_WITH_DEFAULT \
+ BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT( \
+ BOOST_PYTHON_MAX_ARITY, \
+ class T, \
+ mpl::void_) \
+
+#define BOOST_PYTHON_OVERLOAD_TYPES \
+ BOOST_PP_ENUM_PARAMS_Z(1, \
+ BOOST_PYTHON_MAX_ARITY, \
+ class T) \
+
+#define BOOST_PYTHON_OVERLOAD_ARGS \
+ BOOST_PP_ENUM_PARAMS_Z(1, \
+ BOOST_PYTHON_MAX_ARITY, \
+ T) \
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace python {
+
+template <BOOST_PYTHON_OVERLOAD_TYPES_WITH_DEFAULT>
+class init; // forward declaration
+
+
+template <BOOST_PYTHON_OVERLOAD_TYPES_WITH_DEFAULT>
+struct optional; // forward declaration
+
+namespace detail
+{
+ namespace error
+ {
+ template <int keywords, int init_args>
+ struct more_keywords_than_init_arguments
+ {
+ typedef char too_many_keywords[init_args - keywords >= 0 ? 1 : -1];
+ };
+ }
+
+ // is_optional<T>::value
+ //
+ // This metaprogram checks if T is an optional
+ //
+#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+ template <class T>
+ struct is_optional {
+
+ private:
+
+ template <BOOST_PYTHON_OVERLOAD_TYPES>
+ static boost::type_traits::yes_type f(optional<BOOST_PYTHON_OVERLOAD_ARGS>);
+ static boost::type_traits::no_type f(...);
+ static T t();
+
+ public:
+
+ BOOST_STATIC_CONSTANT(
+ bool, value =
+ sizeof(f(t())) == sizeof(::boost::type_traits::yes_type));
+ typedef mpl::bool_<value> type;
+ };
+
+#else
+
+ template <class T>
+ struct is_optional
+ : mpl::false_
+ {};
+
+ template <BOOST_PYTHON_OVERLOAD_TYPES>
+ struct is_optional<optional<BOOST_PYTHON_OVERLOAD_ARGS> >
+ : mpl::true_
+ {};
+
+#endif
+
+ template <int NDefaults>
+ struct define_class_init_helper;
+
+} // namespace detail
+
+template <class DerivedT>
+struct init_base : def_visitor<DerivedT>
+{
+ init_base(char const* doc_, detail::keyword_range const& keywords_)
+ : m_doc(doc_), m_keywords(keywords_)
+ {}
+
+ init_base(char const* doc_)
+ : m_doc(doc_)
+ {}
+
+ DerivedT const& derived() const
+ {
+ return *static_cast<DerivedT const*>(this);
+ }
+
+ char const* doc_string() const
+ {
+ return m_doc;
+ }
+
+ detail::keyword_range const& keywords() const
+ {
+ return m_keywords;
+ }
+
+ static default_call_policies call_policies()
+ {
+ return default_call_policies();
+ }
+
+ private:
+ // visit
+ //
+ // Defines a set of n_defaults + 1 constructors for its
+ // class_<...> argument. Each constructor after the first has
+ // one less argument to its right. Example:
+ //
+ // init<int, optional<char, long, double> >
+ //
+ // Defines:
+ //
+ // __init__(int, char, long, double)
+ // __init__(int, char, long)
+ // __init__(int, char)
+ // __init__(int)
+ template <class classT>
+ void visit(classT& cl) const
+ {
+ typedef typename DerivedT::signature signature;
+ typedef typename DerivedT::n_arguments n_arguments;
+ typedef typename DerivedT::n_defaults n_defaults;
+
+ detail::define_class_init_helper<n_defaults::value>::apply(
+ cl
+ , derived().call_policies()
+ , signature()
+ , n_arguments()
+ , derived().doc_string()
+ , derived().keywords());
+ }
+
+ friend class python::def_visitor_access;
+
+ private: // data members
+ char const* m_doc;
+ detail::keyword_range m_keywords;
+};
+
+template <class CallPoliciesT, class InitT>
+class init_with_call_policies
+ : public init_base<init_with_call_policies<CallPoliciesT, InitT> >
+{
+ typedef init_base<init_with_call_policies<CallPoliciesT, InitT> > base;
+ public:
+ typedef typename InitT::n_arguments n_arguments;
+ typedef typename InitT::n_defaults n_defaults;
+ typedef typename InitT::signature signature;
+
+ init_with_call_policies(
+ CallPoliciesT const& policies_
+ , char const* doc_
+ , detail::keyword_range const& keywords
+ )
+ : base(doc_, keywords)
+ , m_policies(policies_)
+ {}
+
+ CallPoliciesT const& call_policies() const
+ {
+ return this->m_policies;
+ }
+
+ private: // data members
+ CallPoliciesT m_policies;
+};
+
+//
+// drop1<S> is the initial length(S) elements of S
+//
+namespace detail
+{
+ template <class S>
+ struct drop1
+ : mpl::iterator_range<
+ typename mpl::begin<S>::type
+ , typename mpl::prior<
+ typename mpl::end<S>::type
+ >::type
+ >
+ {};
+}
+
+template <BOOST_PYTHON_OVERLOAD_TYPES>
+class init : public init_base<init<BOOST_PYTHON_OVERLOAD_ARGS> >
+{
+ typedef init_base<init<BOOST_PYTHON_OVERLOAD_ARGS> > base;
+ public:
+ typedef init<BOOST_PYTHON_OVERLOAD_ARGS> self_t;
+
+ init(char const* doc_ = 0)
+ : base(doc_)
+ {
+ }
+
+ template <std::size_t N>
+ init(char const* doc_, detail::keywords<N> const& kw)
+ : base(doc_, kw.range())
+ {
+ typedef typename detail::error::more_keywords_than_init_arguments<
+ N, n_arguments::value
+ >::too_many_keywords assertion;
+ }
+
+ template <std::size_t N>
+ init(detail::keywords<N> const& kw, char const* doc_ = 0)
+ : base(doc_, kw.range())
+ {
+ typedef typename detail::error::more_keywords_than_init_arguments<
+ N, n_arguments::value
+ >::too_many_keywords assertion;
+ }
+
+ template <class CallPoliciesT>
+ init_with_call_policies<CallPoliciesT, self_t>
+ operator[](CallPoliciesT const& policies) const
+ {
+ return init_with_call_policies<CallPoliciesT, self_t>(
+ policies, this->doc_string(), this->keywords());
+ }
+
+ typedef detail::type_list<BOOST_PYTHON_OVERLOAD_ARGS> signature_;
+
+ typedef detail::is_optional<
+ typename mpl::eval_if<
+ mpl::empty<signature_>
+ , mpl::false_
+ , mpl::back<signature_>
+ >::type
+ > back_is_optional;
+
+ typedef typename mpl::eval_if<
+ back_is_optional
+ , mpl::back<signature_>
+ , mpl::vector0<>
+ >::type optional_args;
+
+ typedef typename mpl::eval_if<
+ back_is_optional
+ , mpl::if_<
+ mpl::empty<optional_args>
+ , detail::drop1<signature_>
+ , mpl::joint_view<
+ detail::drop1<signature_>
+ , optional_args
+ >
+ >
+ , signature_
+ >::type signature;
+
+ // TODO: static assert to make sure there are no other optional elements
+
+ // Count the number of default args
+ typedef mpl::size<optional_args> n_defaults;
+ typedef mpl::size<signature> n_arguments;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// optional
+//
+// optional<T0...TN>::type returns a typelist.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <BOOST_PYTHON_OVERLOAD_TYPES>
+struct optional
+ : detail::type_list<BOOST_PYTHON_OVERLOAD_ARGS>
+{
+};
+
+namespace detail
+{
+ template <class ClassT, class CallPoliciesT, class Signature, class NArgs>
+ inline void def_init_aux(
+ ClassT& cl
+ , Signature const&
+ , NArgs
+ , CallPoliciesT const& policies
+ , char const* doc
+ , detail::keyword_range const& keywords_
+ )
+ {
+ cl.def(
+ "__init__"
+ , detail::make_keyword_range_constructor<Signature,NArgs>(
+ policies
+ , keywords_
+ , (typename ClassT::metadata::holder*)0
+ )
+ , doc
+ );
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ // define_class_init_helper<N>::apply
+ //
+ // General case
+ //
+ // Accepts a class_ and an arguments list. Defines a constructor
+ // for the class given the arguments and recursively calls
+ // define_class_init_helper<N-1>::apply with one fewer argument (the
+ // rightmost argument is shaved off)
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ template <int NDefaults>
+ struct define_class_init_helper
+ {
+
+ template <class ClassT, class CallPoliciesT, class Signature, class NArgs>
+ static void apply(
+ ClassT& cl
+ , CallPoliciesT const& policies
+ , Signature const& args
+ , NArgs
+ , char const* doc
+ , detail::keyword_range keywords)
+ {
+ detail::def_init_aux(cl, args, NArgs(), policies, 0, keywords);
+
+ if (keywords.second > keywords.first)
+ --keywords.second;
+
+ typedef typename mpl::prior<NArgs>::type next_nargs;
+ define_class_init_helper<NDefaults-1>::apply(
+ cl, policies, Signature(), next_nargs(), doc, keywords);
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ // define_class_init_helper<0>::apply
+ //
+ // Terminal case
+ //
+ // Accepts a class_ and an arguments list. Defines a constructor
+ // for the class given the arguments.
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ template <>
+ struct define_class_init_helper<0> {
+
+ template <class ClassT, class CallPoliciesT, class Signature, class NArgs>
+ static void apply(
+ ClassT& cl
+ , CallPoliciesT const& policies
+ , Signature const& args
+ , NArgs
+ , char const* doc
+ , detail::keyword_range const& keywords)
+ {
+ detail::def_init_aux(cl, args, NArgs(), policies, doc, keywords);
+ }
+ };
+}
+
+}} // namespace boost::python
+
+#undef BOOST_PYTHON_OVERLOAD_TYPES_WITH_DEFAULT
+#undef BOOST_PYTHON_OVERLOAD_TYPES
+#undef BOOST_PYTHON_OVERLOAD_ARGS
+#undef BOOST_PYTHON_IS_OPTIONAL_VALUE
+#undef BOOST_PYTHON_APPEND_TO_INIT
+
+///////////////////////////////////////////////////////////////////////////////
+#endif // INIT_JDG20020820_HPP
+
+
+
+
+
+
+
+
diff --git a/boost/boost/python/instance_holder.hpp b/boost/boost/python/instance_holder.hpp
new file mode 100644
index 00000000000..0916348ef64
--- /dev/null
+++ b/boost/boost/python/instance_holder.hpp
@@ -0,0 +1,63 @@
+// Copyright David Abrahams 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)
+#ifndef INSTANCE_HOLDER_DWA2002517_HPP
+# define INSTANCE_HOLDER_DWA2002517_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+# include <boost/utility.hpp>
+# include <boost/python/type_id.hpp>
+# include <cstddef>
+
+namespace boost { namespace python {
+
+// Base class for all holders
+struct BOOST_PYTHON_DECL instance_holder : private noncopyable
+{
+ public:
+ instance_holder();
+ virtual ~instance_holder();
+
+ // return the next holder in a chain
+ instance_holder* next() const;
+
+ // When the derived holder actually holds by [smart] pointer and
+ // null_ptr_only is set, only report that the type is held when
+ // the pointer is null. This is needed for proper shared_ptr
+ // support, to prevent holding shared_ptrs from being found when
+ // converting from python so that we can use the conversion method
+ // that always holds the Python object.
+ virtual void* holds(type_info, bool null_ptr_only) = 0;
+
+ void install(PyObject* inst) throw();
+
+ // These functions should probably be located elsewhere.
+
+ // Allocate storage for an object of the given size at the given
+ // offset in the Python instance<> object if bytes are available
+ // there. Otherwise allocate size bytes of heap memory.
+ static void* allocate(PyObject*, std::size_t offset, std::size_t size);
+
+ // Deallocate storage from the heap if it was not carved out of
+ // the given Python object by allocate(), above.
+ static void deallocate(PyObject*, void* storage) throw();
+ private:
+ instance_holder* m_next;
+};
+
+// This macro is needed for implementation of derived holders
+# define BOOST_PYTHON_UNFORWARD(N,ignored) (typename unforward<A##N>::type)(a##N)
+
+//
+// implementation
+//
+inline instance_holder* instance_holder::next() const
+{
+ return m_next;
+}
+
+}} // namespace boost::python
+
+#endif // INSTANCE_HOLDER_DWA2002517_HPP
diff --git a/boost/boost/python/iterator.hpp b/boost/boost/python/iterator.hpp
new file mode 100644
index 00000000000..146dcbfe845
--- /dev/null
+++ b/boost/boost/python/iterator.hpp
@@ -0,0 +1,127 @@
+// Copyright David Abrahams 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)
+#ifndef ITERATOR_DWA2002512_HPP
+# define ITERATOR_DWA2002512_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+# include <boost/python/detail/target.hpp>
+# include <boost/python/object/iterator.hpp>
+# include <boost/python/object_core.hpp>
+
+# include <boost/type_traits/cv_traits.hpp>
+# include <boost/type_traits/transform_traits.hpp>
+
+# include <boost/bind.hpp>
+# include <boost/bind/protect.hpp>
+
+namespace boost { namespace python {
+
+namespace detail
+{
+ // Adds an additional layer of binding to
+ // objects::make_iterator(...), which allows us to pass member
+ // function and member data pointers.
+ template <class Target, class Accessor1, class Accessor2, class NextPolicies>
+ inline object make_iterator(
+ Accessor1 get_start
+ , Accessor2 get_finish
+ , NextPolicies next_policies
+ , Target&(*)()
+ )
+ {
+ return objects::make_iterator_function<Target>(
+ boost::protect(boost::bind(get_start, _1))
+ , boost::protect(boost::bind(get_finish, _1))
+ , next_policies
+ );
+ }
+
+ // Guts of template class iterators<>, below.
+ template <bool const_ = false>
+ struct iterators_impl
+ {
+ template <class T>
+ struct apply
+ {
+ typedef typename T::iterator iterator;
+ static iterator begin(T& x) { return x.begin(); }
+ static iterator end(T& x) { return x.end(); }
+ };
+ };
+
+ template <>
+ struct iterators_impl<true>
+ {
+ template <class T>
+ struct apply
+ {
+ typedef typename T::const_iterator iterator;
+ static iterator begin(T& x) { return x.begin(); }
+ static iterator end(T& x) { return x.end(); }
+ };
+ };
+}
+
+// An "ordinary function generator" which contains static begin(x) and
+// end(x) functions that invoke T::begin() and T::end(), respectively.
+template <class T>
+struct iterators
+ : detail::iterators_impl<
+ boost::is_const<T>::value
+ >::template apply<T>
+{
+};
+
+// Create an iterator-building function which uses the given
+// accessors. Deduce the Target type from the accessors. The iterator
+// returns copies of the inderlying elements.
+template <class Accessor1, class Accessor2>
+object range(Accessor1 start, Accessor2 finish)
+{
+ return detail::make_iterator(
+ start, finish
+ , objects::default_iterator_call_policies()
+ , detail::target(start)
+ );
+}
+
+// Create an iterator-building function which uses the given accessors
+// and next() policies. Deduce the Target type.
+template <class NextPolicies, class Accessor1, class Accessor2>
+object range(Accessor1 start, Accessor2 finish, NextPolicies* = 0)
+{
+ return detail::make_iterator(start, finish, NextPolicies(), detail::target(start));
+}
+
+// Create an iterator-building function which uses the given accessors
+// and next() policies, operating on the given Target type
+template <class NextPolicies, class Target, class Accessor1, class Accessor2>
+object range(Accessor1 start, Accessor2 finish, NextPolicies* = 0, boost::type<Target>* = 0)
+{
+ // typedef typename add_reference<Target>::type target;
+ return detail::make_iterator(start, finish, NextPolicies(), (Target&(*)())0);
+}
+
+// A Python callable object which produces an iterator traversing
+// [x.begin(), x.end()), where x is an instance of the Container
+// type. NextPolicies are used as the CallPolicies for the iterator's
+// next() function.
+template <class Container
+ , class NextPolicies = objects::default_iterator_call_policies>
+struct iterator : object
+{
+ iterator()
+ : object(
+ python::range<NextPolicies>(
+ &iterators<Container>::begin, &iterators<Container>::end
+ ))
+ {
+ }
+};
+
+}} // namespace boost::python
+
+#endif // ITERATOR_DWA2002512_HPP
diff --git a/boost/boost/python/list.hpp b/boost/boost/python/list.hpp
new file mode 100644
index 00000000000..0f6d1e8e9ca
--- /dev/null
+++ b/boost/boost/python/list.hpp
@@ -0,0 +1,142 @@
+// Copyright David Abrahams 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)
+#ifndef LIST_DWA2002627_HPP
+# define LIST_DWA2002627_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+# include <boost/python/object.hpp>
+# include <boost/python/converter/pytype_object_mgr_traits.hpp>
+# include <boost/python/ssize_t.hpp>
+
+namespace boost { namespace python {
+
+namespace detail
+{
+ struct BOOST_PYTHON_DECL list_base : object
+ {
+ void append(object_cref); // append object to end
+
+ long count(object_cref value) const; // return number of occurrences of value
+
+ void extend(object_cref sequence); // extend list by appending sequence elements
+
+ long index(object_cref value) const; // return index of first occurrence of value
+
+ void insert(ssize_t index, object_cref); // insert object before index
+ void insert(object const& index, object_cref);
+
+ object pop(); // remove and return item at index (default last)
+ object pop(ssize_t index);
+ object pop(object const& index);
+
+ void remove(object_cref value); // remove first occurrence of value
+
+ void reverse(); // reverse *IN PLACE*
+
+ void sort(); // sort *IN PLACE*; if given, cmpfunc(x, y) -> -1, 0, 1
+ void sort(object_cref cmpfunc);
+
+
+ protected:
+ list_base(); // new list
+ explicit list_base(object_cref sequence); // new list initialized from sequence's items
+
+ BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS(list_base, object)
+ private:
+ static detail::new_non_null_reference call(object const&);
+ };
+}
+
+class list : public detail::list_base
+{
+ typedef detail::list_base base;
+ public:
+ list() {} // new list
+
+ template <class T>
+ explicit list(T const& sequence)
+ : base(object(sequence))
+ {
+ }
+
+ template <class T>
+ void append(T const& x)
+ {
+ base::append(object(x));
+ }
+
+ template <class T>
+ long count(T const& value) const
+ {
+ return base::count(object(value));
+ }
+
+ template <class T>
+ void extend(T const& x)
+ {
+ base::extend(object(x));
+ }
+
+ template <class T>
+ long index(T const& x) const
+ {
+ return base::index(object(x));
+ }
+
+ template <class T>
+ void insert(ssize_t index, T const& x) // insert object before index
+ {
+ base::insert(index, object(x));
+ }
+
+ template <class T>
+ void insert(object const& index, T const& x) // insert object before index
+ {
+ base::insert(index, object(x));
+ }
+
+ object pop() { return base::pop(); }
+ object pop(ssize_t index) { return base::pop(index); }
+
+ template <class T>
+ object pop(T const& index)
+ {
+ return base::pop(object(index));
+ }
+
+ template <class T>
+ void remove(T const& value)
+ {
+ base::remove(object(value));
+ }
+
+ void sort() { base::sort(); }
+
+ template <class T>
+ void sort(T const& value)
+ {
+ base::sort(object(value));
+ }
+
+ public: // implementation detail -- for internal use only
+ BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS(list, base)
+};
+
+//
+// Converter Specializations
+//
+namespace converter
+{
+ template <>
+ struct object_manager_traits<list>
+ : pytype_object_manager_traits<&PyList_Type,list>
+ {
+ };
+}
+
+}} // namespace boost::python
+
+#endif // LIST_DWA2002627_HPP
diff --git a/boost/boost/python/long.hpp b/boost/boost/python/long.hpp
new file mode 100644
index 00000000000..129c61f9e42
--- /dev/null
+++ b/boost/boost/python/long.hpp
@@ -0,0 +1,68 @@
+// Copyright David Abrahams 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)
+#ifndef LONG_DWA2002627_HPP
+# define LONG_DWA2002627_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+# include <boost/python/object.hpp>
+# include <boost/python/converter/pytype_object_mgr_traits.hpp>
+
+namespace boost { namespace python {
+
+namespace detail
+{
+ struct BOOST_PYTHON_DECL long_base : object
+ {
+ protected:
+ long_base(); // new long_
+ explicit long_base(object_cref rhs);
+ explicit long_base(object_cref rhs, object_cref base);
+
+ BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS(long_base, object)
+
+ private:
+ static detail::new_non_null_reference call(object const&);
+ static detail::new_non_null_reference call(object const&, object const&);
+ };
+}
+
+class long_ : public detail::long_base
+{
+ typedef detail::long_base base;
+ public:
+ long_() {} // new long_
+
+ template <class T>
+ explicit long_(T const& rhs)
+ : detail::long_base(object(rhs))
+ {
+ }
+
+ template <class T, class U>
+ explicit long_(T const& rhs, U const& base)
+ : detail::long_base(object(rhs), object(base))
+ {
+ }
+
+ public: // implementation detail -- for internal use only
+ BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS(long_, base)
+};
+
+//
+// Converter Specializations
+//
+namespace converter
+{
+ template <>
+ struct object_manager_traits<long_>
+ : pytype_object_manager_traits<&PyLong_Type,long_>
+ {
+ };
+}
+
+}} // namespace boost::python
+
+#endif // LONG_DWA2002627_HPP
diff --git a/boost/boost/python/lvalue_from_pytype.hpp b/boost/boost/python/lvalue_from_pytype.hpp
new file mode 100644
index 00000000000..51660050477
--- /dev/null
+++ b/boost/boost/python/lvalue_from_pytype.hpp
@@ -0,0 +1,105 @@
+// Copyright David Abrahams 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)
+#ifndef LVALUE_FROM_PYTYPE_DWA2002130_HPP
+# define LVALUE_FROM_PYTYPE_DWA2002130_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+# include <boost/python/type_id.hpp>
+# include <boost/python/converter/registry.hpp>
+# include <boost/python/detail/void_ptr.hpp>
+
+namespace boost { namespace python {
+
+namespace detail
+{
+ // Given a pointer-to-function of 1 parameter returning a reference
+ // type, return the type_id of the function's return type.
+ template <class T, class U>
+ inline type_info extractor_type_id(T&(*)(U))
+ {
+ return type_id<T>();
+ }
+
+ // A function generator whose static execute() function is an lvalue
+ // from_python converter using the given Extractor. U is expected to
+ // be the actual type of the PyObject instance from which the result
+ // is being extracted.
+ template <class Extractor, class U>
+ struct normalized_extractor
+ {
+ static inline void* execute(PyObject* op)
+ {
+ typedef typename boost::add_reference<U>::type param;
+ return &Extractor::execute(
+ boost::python::detail::void_ptr_to_reference(
+ op, (param(*)())0 )
+ );
+ }
+ };
+
+ // Given an Extractor type and a pointer to its execute function,
+ // return a new object whose static execute function does the same
+ // job but is a conforming lvalue from_python conversion function.
+ //
+ // usage: normalize<Extractor>(&Extractor::execute)
+ template <class Extractor, class T, class U>
+ inline normalized_extractor<Extractor,U>
+ normalize(T(*)(U), Extractor* = 0)
+ {
+ return normalized_extractor<Extractor, U>();
+ }
+}
+
+// An Extractor which extracts the given member from a Python object
+// whose instances are stored as InstanceType.
+template <class InstanceType, class MemberType, MemberType (InstanceType::*member)>
+struct extract_member
+{
+ static MemberType& execute(InstanceType& c)
+ {
+ (void)c.ob_type; // static assertion
+ return c.*member;
+ }
+};
+
+// An Extractor which simply extracts the entire python object
+// instance of InstanceType.
+template <class InstanceType>
+struct extract_identity
+{
+ static InstanceType& execute(InstanceType& c)
+ {
+ (void)c.ob_type; // static assertion
+ return c;
+ }
+};
+
+// Registers a from_python conversion which extracts lvalues using
+// Extractor's static execute function from Python objects whose type
+// object is python_type.
+template <class Extractor, PyTypeObject const* python_type>
+struct lvalue_from_pytype
+{
+ lvalue_from_pytype()
+ {
+ converter::registry::insert(
+ &extract, detail::extractor_type_id(&Extractor::execute));
+ }
+ private:
+ static void* extract(PyObject* op)
+ {
+ return PyObject_TypeCheck(op, const_cast<PyTypeObject*>(python_type))
+ ? const_cast<void*>(
+ static_cast<void const volatile*>(
+ detail::normalize<Extractor>(&Extractor::execute).execute(op)))
+ : 0
+ ;
+ }
+};
+
+}} // namespace boost::python
+
+#endif // LVALUE_FROM_PYTYPE_DWA2002130_HPP
diff --git a/boost/boost/python/make_constructor.hpp b/boost/boost/python/make_constructor.hpp
new file mode 100644
index 00000000000..598bf4f6910
--- /dev/null
+++ b/boost/boost/python/make_constructor.hpp
@@ -0,0 +1,279 @@
+// Copyright David Abrahams 2001.
+// 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 MAKE_CONSTRUCTOR_DWA20011221_HPP
+# define MAKE_CONSTRUCTOR_DWA20011221_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+# include <boost/python/default_call_policies.hpp>
+# include <boost/python/args.hpp>
+# include <boost/python/object_fwd.hpp>
+
+# include <boost/python/object/function_object.hpp>
+# include <boost/python/object/make_holder.hpp>
+# include <boost/python/object/pointer_holder.hpp>
+# include <boost/python/converter/context_result_converter.hpp>
+
+# include <boost/python/detail/caller.hpp>
+# include <boost/python/detail/none.hpp>
+
+# include <boost/mpl/size.hpp>
+# include <boost/mpl/int.hpp>
+# include <boost/mpl/push_front.hpp>
+# include <boost/mpl/pop_front.hpp>
+
+namespace boost { namespace python {
+
+namespace detail
+{
+ template <class T>
+ struct install_holder : converter::context_result_converter
+ {
+ install_holder(PyObject* args_)
+ : m_self(PyTuple_GetItem(args_, 0)) {}
+
+ PyObject* operator()(T x) const
+ {
+ dispatch(x, is_pointer<T>());
+ return none();
+ }
+
+ private:
+ template <class U>
+ void dispatch(U* x, mpl::true_) const
+ {
+ std::auto_ptr<U> owner(x);
+ dispatch(owner, mpl::false_());
+ }
+
+ template <class Ptr>
+ void dispatch(Ptr x, mpl::false_) const
+ {
+ typedef typename pointee<Ptr>::type value_type;
+ typedef objects::pointer_holder<Ptr,value_type> holder;
+ typedef objects::instance<holder> instance_t;
+
+ void* memory = holder::allocate(this->m_self, offsetof(instance_t, storage), sizeof(holder));
+ try {
+ (new (memory) holder(x))->install(this->m_self);
+ }
+ catch(...) {
+ holder::deallocate(this->m_self, memory);
+ throw;
+ }
+ }
+
+ PyObject* m_self;
+ };
+
+ struct constructor_result_converter
+ {
+ template <class T>
+ struct apply
+ {
+ typedef install_holder<T> type;
+ };
+ };
+
+ template <class BaseArgs, class Offset>
+ struct offset_args
+ {
+ offset_args(BaseArgs base_) : base(base_) {}
+ BaseArgs base;
+ };
+
+ template <int N, class BaseArgs, class Offset>
+ inline PyObject* get(mpl::int_<N>, offset_args<BaseArgs,Offset> const& args_)
+ {
+ return get(mpl::int_<(N+Offset::value)>(), args_.base);
+ }
+
+ template <class BaseArgs, class Offset>
+ inline unsigned arity(offset_args<BaseArgs,Offset> const& args_)
+ {
+ return arity(args_.base) - Offset::value;
+ }
+
+ template <class BasePolicy_ = default_call_policies>
+ struct constructor_policy : BasePolicy_
+ {
+ constructor_policy(BasePolicy_ base) : BasePolicy_(base) {}
+
+ // If the BasePolicy_ supplied a result converter it would be
+ // ignored; issue an error if it's not the default.
+ BOOST_STATIC_ASSERT((
+ is_same<
+ typename BasePolicy_::result_converter
+ , default_result_converter
+ >::value
+ ));
+
+ typedef constructor_result_converter result_converter;
+ typedef offset_args<typename BasePolicy_::argument_package, mpl::int_<1> > argument_package;
+ };
+
+ template <class InnerSignature>
+ struct outer_constructor_signature
+ {
+ typedef typename mpl::pop_front<InnerSignature>::type inner_args;
+ typedef typename mpl::push_front<inner_args,object>::type outer_args;
+ typedef typename mpl::push_front<outer_args,void>::type type;
+ };
+
+ // ETI workaround
+ template <>
+ struct outer_constructor_signature<int>
+ {
+ typedef int type;
+ };
+
+ //
+ // These helper functions for make_constructor (below) do the raw work
+ // of constructing a Python object from some invokable entity. See
+ // <boost/python/detail/caller.hpp> for more information about how
+ // the Sig arguments is used.
+ //
+ // @group make_constructor_aux {
+ template <class F, class CallPolicies, class Sig>
+ object make_constructor_aux(
+ F f // An object that can be invoked by detail::invoke()
+ , CallPolicies const& p // CallPolicies to use in the invocation
+ , Sig const& // An MPL sequence of argument types expected by F
+ )
+ {
+ typedef typename outer_constructor_signature<Sig>::type outer_signature;
+
+ typedef constructor_policy<CallPolicies> inner_policy;
+
+ return objects::function_object(
+ objects::py_function(
+ detail::caller<F,inner_policy,Sig>(f, inner_policy(p))
+ , outer_signature()
+ )
+ );
+ }
+
+ // As above, except that it accepts argument keywords. NumKeywords
+ // is used only for a compile-time assertion to make sure the user
+ // doesn't pass more keywords than the function can accept. To
+ // disable all checking, pass mpl::int_<0> for NumKeywords.
+ template <class F, class CallPolicies, class Sig, class NumKeywords>
+ object make_constructor_aux(
+ F f
+ , CallPolicies const& p
+ , Sig const&
+ , detail::keyword_range const& kw // a [begin,end) pair of iterators over keyword names
+ , NumKeywords // An MPL integral type wrapper: the size of kw
+ )
+ {
+ enum { arity = mpl::size<Sig>::value - 1 };
+
+ typedef typename detail::error::more_keywords_than_function_arguments<
+ NumKeywords::value, arity
+ >::too_many_keywords assertion;
+
+ typedef typename outer_constructor_signature<Sig>::type outer_signature;
+
+ typedef constructor_policy<CallPolicies> inner_policy;
+
+ return objects::function_object(
+ objects::py_function(
+ detail::caller<F,inner_policy,Sig>(f, inner_policy(p))
+ , outer_signature()
+ )
+ , kw
+ );
+ }
+ // }
+
+ //
+ // These dispatch functions are used to discriminate between the
+ // cases when the 3rd argument is keywords or when it is a
+ // signature.
+ //
+ // @group Helpers for make_constructor when called with 3 arguments. {
+ //
+ template <class F, class CallPolicies, class Keywords>
+ object make_constructor_dispatch(F f, CallPolicies const& policies, Keywords const& kw, mpl::true_)
+ {
+ return detail::make_constructor_aux(
+ f
+ , policies
+ , detail::get_signature(f)
+ , kw.range()
+ , mpl::int_<Keywords::size>()
+ );
+ }
+
+ template <class F, class CallPolicies, class Signature>
+ object make_constructor_dispatch(F f, CallPolicies const& policies, Signature const& sig, mpl::false_)
+ {
+ return detail::make_constructor_aux(
+ f
+ , policies
+ , sig
+ );
+ }
+ // }
+}
+
+// These overloaded functions wrap a function or member function
+// pointer as a Python object, using optional CallPolicies,
+// Keywords, and/or Signature. @group {
+//
+template <class F>
+object make_constructor(F f)
+{
+ return detail::make_constructor_aux(
+ f,default_call_policies(), detail::get_signature(f));
+}
+
+template <class F, class CallPolicies>
+object make_constructor(F f, CallPolicies const& policies)
+{
+ return detail::make_constructor_aux(
+ f, policies, detail::get_signature(f));
+}
+
+template <class F, class CallPolicies, class KeywordsOrSignature>
+object make_constructor(
+ F f
+ , CallPolicies const& policies
+ , KeywordsOrSignature const& keywords_or_signature)
+{
+ typedef typename
+ detail::is_reference_to_keywords<KeywordsOrSignature&>::type
+ is_kw;
+
+ return detail::make_constructor_dispatch(
+ f
+ , policies
+ , keywords_or_signature
+ , is_kw()
+ );
+}
+
+template <class F, class CallPolicies, class Keywords, class Signature>
+object make_constructor(
+ F f
+ , CallPolicies const& policies
+ , Keywords const& kw
+ , Signature const& sig
+ )
+{
+ return detail::make_constructor_aux(
+ f
+ , policies
+ , sig
+ , kw.range()
+ , mpl::int_<Keywords::size>()
+ );
+}
+// }
+
+}}
+
+
+#endif // MAKE_CONSTRUCTOR_DWA20011221_HPP
diff --git a/boost/boost/python/make_function.hpp b/boost/boost/python/make_function.hpp
new file mode 100644
index 00000000000..f2f2a9e5450
--- /dev/null
+++ b/boost/boost/python/make_function.hpp
@@ -0,0 +1,153 @@
+// Copyright David Abrahams 2001.
+// 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 MAKE_FUNCTION_DWA20011221_HPP
+# define MAKE_FUNCTION_DWA20011221_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+# include <boost/python/default_call_policies.hpp>
+# include <boost/python/args.hpp>
+# include <boost/python/detail/caller.hpp>
+
+# include <boost/python/object/function_object.hpp>
+
+# include <boost/mpl/size.hpp>
+# include <boost/mpl/int.hpp>
+
+namespace boost { namespace python {
+
+namespace detail
+{
+ // make_function_aux --
+ //
+ // These helper functions for make_function (below) do the raw work
+ // of constructing a Python object from some invokable entity. See
+ // <boost/python/detail/caller.hpp> for more information about how
+ // the Sig arguments is used.
+ template <class F, class CallPolicies, class Sig>
+ object make_function_aux(
+ F f // An object that can be invoked by detail::invoke()
+ , CallPolicies const& p // CallPolicies to use in the invocation
+ , Sig const& // An MPL sequence of argument types expected by F
+ )
+ {
+ return objects::function_object(
+ detail::caller<F,CallPolicies,Sig>(f, p)
+ );
+ }
+
+ // As above, except that it accepts argument keywords. NumKeywords
+ // is used only for a compile-time assertion to make sure the user
+ // doesn't pass more keywords than the function can accept. To
+ // disable all checking, pass mpl::int_<0> for NumKeywords.
+ template <class F, class CallPolicies, class Sig, class NumKeywords>
+ object make_function_aux(
+ F f
+ , CallPolicies const& p
+ , Sig const&
+ , detail::keyword_range const& kw // a [begin,end) pair of iterators over keyword names
+ , NumKeywords // An MPL integral type wrapper: the size of kw
+ )
+ {
+ enum { arity = mpl::size<Sig>::value - 1 };
+
+ typedef typename detail::error::more_keywords_than_function_arguments<
+ NumKeywords::value, arity
+ >::too_many_keywords assertion;
+
+ return objects::function_object(
+ detail::caller<F,CallPolicies,Sig>(f, p)
+ , kw);
+ }
+
+ // Helpers for make_function when called with 3 arguments. These
+ // dispatch functions are used to discriminate between the cases
+ // when the 3rd argument is keywords or when it is a signature.
+ //
+ // @group {
+ template <class F, class CallPolicies, class Keywords>
+ object make_function_dispatch(F f, CallPolicies const& policies, Keywords const& kw, mpl::true_)
+ {
+ return detail::make_function_aux(
+ f
+ , policies
+ , detail::get_signature(f)
+ , kw.range()
+ , mpl::int_<Keywords::size>()
+ );
+ }
+
+ template <class F, class CallPolicies, class Signature>
+ object make_function_dispatch(F f, CallPolicies const& policies, Signature const& sig, mpl::false_)
+ {
+ return detail::make_function_aux(
+ f
+ , policies
+ , sig
+ );
+ }
+ // }
+
+ }
+
+// These overloaded functions wrap a function or member function
+// pointer as a Python object, using optional CallPolicies,
+// Keywords, and/or Signature.
+//
+// @group {
+template <class F>
+object make_function(F f)
+{
+ return detail::make_function_aux(
+ f,default_call_policies(), detail::get_signature(f));
+}
+
+template <class F, class CallPolicies>
+object make_function(F f, CallPolicies const& policies)
+{
+ return detail::make_function_aux(
+ f, policies, detail::get_signature(f));
+}
+
+template <class F, class CallPolicies, class KeywordsOrSignature>
+object make_function(
+ F f
+ , CallPolicies const& policies
+ , KeywordsOrSignature const& keywords_or_signature)
+{
+ typedef typename
+ detail::is_reference_to_keywords<KeywordsOrSignature&>::type
+ is_kw;
+
+ return detail::make_function_dispatch(
+ f
+ , policies
+ , keywords_or_signature
+ , is_kw()
+ );
+}
+
+template <class F, class CallPolicies, class Keywords, class Signature>
+object make_function(
+ F f
+ , CallPolicies const& policies
+ , Keywords const& kw
+ , Signature const& sig
+ )
+{
+ return detail::make_function_aux(
+ f
+ , policies
+ , sig
+ , kw.range()
+ , mpl::int_<Keywords::size>()
+ );
+}
+// }
+
+}}
+
+
+#endif // MAKE_FUNCTION_DWA20011221_HPP
diff --git a/boost/boost/python/manage_new_object.hpp b/boost/boost/python/manage_new_object.hpp
new file mode 100644
index 00000000000..d81421dace8
--- /dev/null
+++ b/boost/boost/python/manage_new_object.hpp
@@ -0,0 +1,41 @@
+// Copyright David Abrahams 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)
+#ifndef MANAGE_NEW_OBJECT_DWA200222_HPP
+# define MANAGE_NEW_OBJECT_DWA200222_HPP
+
+# include <boost/python/detail/prefix.hpp>
+# include <boost/python/detail/indirect_traits.hpp>
+# include <boost/mpl/if.hpp>
+# include <boost/python/to_python_indirect.hpp>
+# include <boost/type_traits/composite_traits.hpp>
+
+namespace boost { namespace python {
+
+namespace detail
+{
+ template <class R>
+ struct manage_new_object_requires_a_pointer_return_type
+# if defined(__GNUC__) && __GNUC__ >= 3 || defined(__EDG__)
+ {}
+# endif
+ ;
+}
+
+struct manage_new_object
+{
+ template <class T>
+ struct apply
+ {
+ typedef typename mpl::if_c<
+ boost::is_pointer<T>::value
+ , to_python_indirect<T, detail::make_owning_holder>
+ , detail::manage_new_object_requires_a_pointer_return_type<T>
+ >::type type;
+ };
+};
+
+}} // namespace boost::python
+
+#endif // MANAGE_NEW_OBJECT_DWA200222_HPP
diff --git a/boost/boost/python/module.hpp b/boost/boost/python/module.hpp
new file mode 100644
index 00000000000..8ad69f5a343
--- /dev/null
+++ b/boost/boost/python/module.hpp
@@ -0,0 +1,13 @@
+// Copyright David Abrahams 2001.
+// 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 MODULE_DWA2001128_HPP
+# define MODULE_DWA2001128_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+# include <boost/python/module_init.hpp>
+# define BOOST_PYTHON_MODULE BOOST_PYTHON_MODULE_INIT
+
+#endif // MODULE_DWA20011221_HPP
diff --git a/boost/boost/python/module_init.hpp b/boost/boost/python/module_init.hpp
new file mode 100644
index 00000000000..aaf2a0f9388
--- /dev/null
+++ b/boost/boost/python/module_init.hpp
@@ -0,0 +1,53 @@
+// Copyright David Abrahams 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)
+#ifndef MODULE_INIT_DWA20020722_HPP
+# define MODULE_INIT_DWA20020722_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+# ifndef BOOST_PYTHON_MODULE_INIT
+
+namespace boost { namespace python { namespace detail {
+
+BOOST_PYTHON_DECL void init_module(char const* name, void(*)());
+
+}}}
+
+# if (defined(_WIN32) || defined(__CYGWIN__)) && !defined(BOOST_PYTHON_STATIC_MODULE)
+
+# define BOOST_PYTHON_MODULE_INIT(name) \
+void init_module_##name(); \
+extern "C" __declspec(dllexport) void init##name() \
+{ \
+ boost::python::detail::init_module( \
+ #name,&init_module_##name); \
+} \
+void init_module_##name()
+
+# elif BOOST_PYTHON_USE_GCC_SYMBOL_VISIBILITY
+
+# define BOOST_PYTHON_MODULE_INIT(name) \
+void init_module_##name(); \
+extern "C" __attribute__ ((visibility("default"))) void init##name() \
+{ \
+ boost::python::detail::init_module(#name, &init_module_##name); \
+} \
+void init_module_##name()
+
+# else
+
+# define BOOST_PYTHON_MODULE_INIT(name) \
+void init_module_##name(); \
+extern "C" void init##name() \
+{ \
+ boost::python::detail::init_module(#name, &init_module_##name); \
+} \
+void init_module_##name()
+
+# endif
+
+# endif
+
+#endif // MODULE_INIT_DWA20020722_HPP
diff --git a/boost/boost/python/numeric.hpp b/boost/boost/python/numeric.hpp
new file mode 100644
index 00000000000..66fde676227
--- /dev/null
+++ b/boost/boost/python/numeric.hpp
@@ -0,0 +1,241 @@
+// Copyright David Abrahams 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)
+#ifndef NUMARRAY_DWA2002922_HPP
+# define NUMARRAY_DWA2002922_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+# include <boost/python/tuple.hpp>
+# include <boost/python/str.hpp>
+# include <boost/preprocessor/iteration/local.hpp>
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/repetition/enum.hpp>
+# include <boost/preprocessor/repetition/enum_params.hpp>
+# include <boost/preprocessor/repetition/enum_binary_params.hpp>
+
+namespace boost { namespace python { namespace numeric {
+
+class array;
+
+namespace aux
+{
+ struct BOOST_PYTHON_DECL array_base : object
+ {
+# define BOOST_PP_LOCAL_MACRO(n) \
+ array_base(BOOST_PP_ENUM_PARAMS_Z(1, n, object const& x));
+# define BOOST_PP_LOCAL_LIMITS (1, 7)
+# include BOOST_PP_LOCAL_ITERATE()
+
+ object argmax(long axis=-1);
+ object argmin(long axis=-1);
+ object argsort(long axis=-1);
+ object astype(object const& type = object());
+ void byteswap();
+ object copy() const;
+ object diagonal(long offset = 0, long axis1 = 0, long axis2 = 1) const;
+ void info() const;
+ bool is_c_array() const;
+ bool isbyteswapped() const;
+ array new_(object type) const;
+ void sort();
+ object trace(long offset = 0, long axis1 = 0, long axis2 = 1) const;
+ object type() const;
+ char typecode() const;
+
+ object factory(
+ object const& sequence = object()
+ , object const& typecode = object()
+ , bool copy = true
+ , bool savespace = false
+ , object type = object()
+ , object shape = object());
+
+ object getflat() const;
+ long getrank() const;
+ object getshape() const;
+ bool isaligned() const;
+ bool iscontiguous() const;
+ long itemsize() const;
+ long nelements() const;
+ object nonzero() const;
+
+ void put(object const& indices, object const& values);
+
+ void ravel();
+
+ object repeat(object const& repeats, long axis=0);
+
+ void resize(object const& shape);
+
+ void setflat(object const& flat);
+ void setshape(object const& shape);
+
+ void swapaxes(long axis1, long axis2);
+
+ object take(object const& sequence, long axis = 0) const;
+
+ void tofile(object const& file) const;
+
+ str tostring() const;
+
+ void transpose(object const& axes = object());
+
+ object view() const;
+
+ public: // implementation detail - do not touch.
+ BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS(array_base, object);
+ };
+
+ struct BOOST_PYTHON_DECL array_object_manager_traits
+ {
+ static bool check(PyObject* obj);
+ static detail::new_non_null_reference adopt(PyObject* obj);
+ };
+} // namespace aux
+
+class array : public aux::array_base
+{
+ typedef aux::array_base base;
+ public:
+
+ object astype() { return base::astype(); }
+
+ template <class Type>
+ object astype(Type const& type_)
+ {
+ return base::astype(object(type_));
+ }
+
+ template <class Type>
+ array new_(Type const& type_) const
+ {
+ return base::new_(object(type_));
+ }
+
+ template <class Sequence>
+ void resize(Sequence const& x)
+ {
+ base::resize(object(x));
+ }
+
+# define BOOST_PP_LOCAL_MACRO(n) \
+ void resize(BOOST_PP_ENUM_PARAMS_Z(1, n, long x)) \
+ { \
+ resize(make_tuple(BOOST_PP_ENUM_PARAMS_Z(1, n, x))); \
+ }
+# define BOOST_PP_LOCAL_LIMITS (1, BOOST_PYTHON_MAX_ARITY)
+# include BOOST_PP_LOCAL_ITERATE()
+
+ template <class Sequence>
+ void setshape(Sequence const& x)
+ {
+ base::setshape(object(x));
+ }
+
+# define BOOST_PP_LOCAL_MACRO(n) \
+ void setshape(BOOST_PP_ENUM_PARAMS_Z(1, n, long x)) \
+ { \
+ setshape(make_tuple(BOOST_PP_ENUM_PARAMS_Z(1, n, x))); \
+ }
+# define BOOST_PP_LOCAL_LIMITS (1, BOOST_PYTHON_MAX_ARITY)
+# include BOOST_PP_LOCAL_ITERATE()
+
+ template <class Indices, class Values>
+ void put(Indices const& indices, Values const& values)
+ {
+ base::put(object(indices), object(values));
+ }
+
+ template <class Sequence>
+ object take(Sequence const& sequence, long axis = 0)
+ {
+ return base::take(object(sequence), axis);
+ }
+
+ template <class File>
+ void tofile(File const& f) const
+ {
+ base::tofile(object(f));
+ }
+
+ object factory()
+ {
+ return base::factory();
+ }
+
+ template <class Sequence>
+ object factory(Sequence const& sequence)
+ {
+ return base::factory(object(sequence));
+ }
+
+ template <class Sequence, class Typecode>
+ object factory(
+ Sequence const& sequence
+ , Typecode const& typecode_
+ , bool copy = true
+ , bool savespace = false
+ )
+ {
+ return base::factory(object(sequence), object(typecode_), copy, savespace);
+ }
+
+ template <class Sequence, class Typecode, class Type>
+ object factory(
+ Sequence const& sequence
+ , Typecode const& typecode_
+ , bool copy
+ , bool savespace
+ , Type const& type
+ )
+ {
+ return base::factory(object(sequence), object(typecode_), copy, savespace, object(type));
+ }
+
+ template <class Sequence, class Typecode, class Type, class Shape>
+ object factory(
+ Sequence const& sequence
+ , Typecode const& typecode_
+ , bool copy
+ , bool savespace
+ , Type const& type
+ , Shape const& shape
+ )
+ {
+ return base::factory(object(sequence), object(typecode_), copy, savespace, object(type), object(shape));
+ }
+
+# define BOOST_PYTHON_ENUM_AS_OBJECT(z, n, x) object(BOOST_PP_CAT(x,n))
+# define BOOST_PP_LOCAL_MACRO(n) \
+ template <BOOST_PP_ENUM_PARAMS_Z(1, n, class T)> \
+ explicit array(BOOST_PP_ENUM_BINARY_PARAMS_Z(1, n, T, const& x)) \
+ : base(BOOST_PP_ENUM_1(n, BOOST_PYTHON_ENUM_AS_OBJECT, x)) \
+ {}
+# define BOOST_PP_LOCAL_LIMITS (1, 7)
+# include BOOST_PP_LOCAL_ITERATE()
+# undef BOOST_PYTHON_AS_OBJECT
+
+ static BOOST_PYTHON_DECL void set_module_and_type(char const* package_name = 0, char const* type_attribute_name = 0);
+ static BOOST_PYTHON_DECL std::string get_module_name();
+
+ public: // implementation detail -- for internal use only
+ BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS(array, base);
+};
+
+} // namespace boost::python::numeric
+
+namespace converter
+{
+ template <>
+ struct object_manager_traits< numeric::array >
+ : numeric::aux::array_object_manager_traits
+ {
+ BOOST_STATIC_CONSTANT(bool, is_specialized = true);
+ };
+}
+
+}} // namespace boost::python
+
+#endif // NUMARRAY_DWA2002922_HPP
diff --git a/boost/boost/python/object.hpp b/boost/boost/python/object.hpp
new file mode 100644
index 00000000000..9adec90f64b
--- /dev/null
+++ b/boost/boost/python/object.hpp
@@ -0,0 +1,27 @@
+// Copyright David Abrahams 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)
+#ifndef OBJECT_DWA2002612_HPP
+# define OBJECT_DWA2002612_HPP
+
+# include <boost/python/ssize_t.hpp>
+# include <boost/python/object_core.hpp>
+# include <boost/python/object_attributes.hpp>
+# include <boost/python/object_items.hpp>
+# include <boost/python/object_slices.hpp>
+# include <boost/python/object_operators.hpp>
+# include <boost/python/converter/arg_to_python.hpp>
+
+namespace boost { namespace python {
+
+ inline ssize_t len(object const& obj)
+ {
+ ssize_t result = PyObject_Length(obj.ptr());
+ if (PyErr_Occurred()) throw_error_already_set();
+ return result;
+ }
+
+}} // namespace boost::python
+
+#endif // OBJECT_DWA2002612_HPP
diff --git a/boost/boost/python/object/add_to_namespace.hpp b/boost/boost/python/object/add_to_namespace.hpp
new file mode 100644
index 00000000000..9f4167d6d27
--- /dev/null
+++ b/boost/boost/python/object/add_to_namespace.hpp
@@ -0,0 +1,23 @@
+// Copyright David Abrahams 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)
+#ifndef ADD_TO_NAMESPACE_DWA200286_HPP
+# define ADD_TO_NAMESPACE_DWA200286_HPP
+
+# include <boost/python/object_fwd.hpp>
+
+namespace boost { namespace python { namespace objects {
+
+//
+// A setattr that's "smart" about function overloading (and docstrings).
+//
+BOOST_PYTHON_DECL void add_to_namespace(
+ object const& name_space, char const* name, object const& attribute);
+
+BOOST_PYTHON_DECL void add_to_namespace(
+ object const& name_space, char const* name, object const& attribute, char const* doc);
+
+}}} // namespace boost::python::objects
+
+#endif // ADD_TO_NAMESPACE_DWA200286_HPP
diff --git a/boost/boost/python/object/class.hpp b/boost/boost/python/object/class.hpp
new file mode 100644
index 00000000000..6aad45e7862
--- /dev/null
+++ b/boost/boost/python/object/class.hpp
@@ -0,0 +1,64 @@
+// Copyright David Abrahams 2001.
+// 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 CLASS_DWA20011214_HPP
+# define CLASS_DWA20011214_HPP
+
+# include <boost/python/detail/prefix.hpp>
+# include <boost/utility.hpp>
+# include <boost/python/object_core.hpp>
+# include <boost/python/type_id.hpp>
+# include <cstddef>
+
+namespace boost { namespace python {
+
+namespace objects {
+
+struct BOOST_PYTHON_DECL class_base : python::api::object
+{
+ // constructor
+ class_base(
+ char const* name // The name of the class
+
+ , std::size_t num_types // A list of class_ids. The first is the type
+ , type_info const*const types // this is wrapping. The rest are the types of
+ // any bases.
+
+ , char const* doc = 0 // Docstring, if any.
+ );
+
+
+ // Implementation detail. Hiding this in the private section would
+ // require use of template friend declarations.
+ void enable_pickling_(bool getstate_manages_dict);
+
+ protected:
+ void add_property(
+ char const* name, object const& fget, char const* docstr);
+ void add_property(char const* name,
+ object const& fget, object const& fset, char const* docstr);
+
+ void add_static_property(char const* name, object const& fget);
+ void add_static_property(char const* name, object const& fget, object const& fset);
+
+ // Retrieve the underlying object
+ void setattr(char const* name, object const&);
+
+ // Set a special attribute in the class which tells Boost.Python
+ // to allocate extra bytes for embedded C++ objects in Python
+ // instances.
+ void set_instance_size(std::size_t bytes);
+
+ // Set an __init__ function which throws an appropriate exception
+ // for abstract classes.
+ void def_no_init();
+
+ // Effects:
+ // setattr(self, staticmethod(getattr(self, method_name)))
+ void make_method_static(const char *method_name);
+};
+
+}}} // namespace boost::python::objects
+
+#endif // CLASS_DWA20011214_HPP
diff --git a/boost/boost/python/object/class_detail.hpp b/boost/boost/python/object/class_detail.hpp
new file mode 100644
index 00000000000..a17a4f43309
--- /dev/null
+++ b/boost/boost/python/object/class_detail.hpp
@@ -0,0 +1,19 @@
+// Copyright David Abrahams 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)
+#ifndef CLASS_DETAIL_DWA200295_HPP
+# define CLASS_DETAIL_DWA200295_HPP
+
+# include <boost/python/handle.hpp>
+# include <boost/python/type_id.hpp>
+
+namespace boost { namespace python { namespace objects {
+
+BOOST_PYTHON_DECL type_handle registered_class_object(type_info id);
+BOOST_PYTHON_DECL type_handle class_metatype();
+BOOST_PYTHON_DECL type_handle class_type();
+
+}}} // namespace boost::python::object
+
+#endif // CLASS_DETAIL_DWA200295_HPP
diff --git a/boost/boost/python/object/class_metadata.hpp b/boost/boost/python/object/class_metadata.hpp
new file mode 100644
index 00000000000..bf0e2748ac8
--- /dev/null
+++ b/boost/boost/python/object/class_metadata.hpp
@@ -0,0 +1,281 @@
+// Copyright David Abrahams 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)
+#ifndef CLASS_METADATA_DWA2004719_HPP
+# define CLASS_METADATA_DWA2004719_HPP
+# include <boost/python/converter/shared_ptr_from_python.hpp>
+
+# include <boost/python/object/inheritance.hpp>
+# include <boost/python/object/class_wrapper.hpp>
+# include <boost/python/object/make_instance.hpp>
+# include <boost/python/object/value_holder.hpp>
+# include <boost/python/object/pointer_holder.hpp>
+# include <boost/python/object/make_ptr_instance.hpp>
+
+# include <boost/python/detail/force_instantiate.hpp>
+# include <boost/python/detail/not_specified.hpp>
+
+# include <boost/python/has_back_reference.hpp>
+# include <boost/python/bases.hpp>
+
+# include <boost/type_traits/add_pointer.hpp>
+# include <boost/type_traits/is_convertible.hpp>
+# include <boost/type_traits/is_polymorphic.hpp>
+
+# include <boost/mpl/if.hpp>
+# include <boost/mpl/eval_if.hpp>
+# include <boost/mpl/bool.hpp>
+# include <boost/mpl/or.hpp>
+# include <boost/mpl/identity.hpp>
+# include <boost/mpl/for_each.hpp>
+# include <boost/mpl/placeholders.hpp>
+# include <boost/mpl/single_view.hpp>
+
+# include <boost/mpl/assert.hpp>
+# include <boost/type_traits/is_same.hpp>
+
+# include <boost/type_traits/is_convertible.hpp>
+
+# include <boost/noncopyable.hpp>
+# include <boost/detail/workaround.hpp>
+
+namespace boost { namespace python { namespace objects {
+
+BOOST_PYTHON_DECL
+void copy_class_object(type_info const& src, type_info const& dst);
+
+//
+// Support for registering base/derived relationships
+//
+template <class Derived>
+struct register_base_of
+{
+ template <class Base>
+ inline void operator()(Base*) const
+ {
+# if !BOOST_WORKAROUND(BOOST_MSVC, == 1200)
+ BOOST_MPL_ASSERT_NOT((is_same<Base,Derived>));
+# else
+ BOOST_STATIC_ASSERT(!(is_same<Base,Derived>::value));
+# endif
+
+ // Register the Base class
+ register_dynamic_id<Base>();
+
+ // Register the up-cast
+ register_conversion<Derived,Base>(false);
+
+ // Register the down-cast, if appropriate.
+ this->register_downcast((Base*)0, is_polymorphic<Base>());
+ }
+
+ private:
+ static inline void register_downcast(void*, mpl::false_) {}
+
+ template <class Base>
+ static inline void register_downcast(Base*, mpl::true_)
+ {
+ register_conversion<Base, Derived>(true);
+ }
+
+};
+
+//
+// Preamble of register_class. Also used for callback classes, which
+// need some registration of their own.
+//
+template <class T, class Bases>
+inline void register_shared_ptr_from_python_and_casts(T*, Bases)
+{
+ // Constructor performs registration
+ python::detail::force_instantiate(converter::shared_ptr_from_python<T>());
+
+ //
+ // register all up/downcasts here. We're using the alternate
+ // interface to mpl::for_each to avoid an MSVC 6 bug.
+ //
+ register_dynamic_id<T>();
+ mpl::for_each(register_base_of<T>(), (Bases*)0, (add_pointer<mpl::_>*)0);
+}
+
+//
+// Helper for choosing the unnamed held_type argument
+//
+template <class T, class Prev>
+struct select_held_type
+ : mpl::if_<
+ mpl::or_<
+ python::detail::specifies_bases<T>
+ , is_same<T,noncopyable>
+ >
+ , Prev
+ , T
+ >
+{
+};
+
+template <
+ class T // class being wrapped
+ , class X1 // = detail::not_specified
+ , class X2 // = detail::not_specified
+ , class X3 // = detail::not_specified
+>
+struct class_metadata
+{
+ //
+ // Calculate the unnamed template arguments
+ //
+
+ // held_type_arg -- not_specified, [a class derived from] T or a
+ // smart pointer to [a class derived from] T. Preserving
+ // not_specified allows us to give class_<T,T> a back-reference.
+ typedef typename select_held_type<
+ X1
+ , typename select_held_type<
+ X2
+ , typename select_held_type<
+ X3
+ , python::detail::not_specified
+ >::type
+ >::type
+ >::type held_type_arg;
+
+ // bases
+ typedef typename python::detail::select_bases<
+ X1
+ , typename python::detail::select_bases<
+ X2
+ , typename python::detail::select_bases<
+ X3
+ , python::bases<>
+ >::type
+ >::type
+ >::type bases;
+
+ typedef mpl::or_<
+ is_same<X1,noncopyable>
+ , is_same<X2,noncopyable>
+ , is_same<X3,noncopyable>
+ > is_noncopyable;
+
+ //
+ // Holder computation.
+ //
+
+ // Compute the actual type that will be held in the Holder.
+ typedef typename mpl::if_<
+ is_same<held_type_arg,python::detail::not_specified>, T, held_type_arg
+ >::type held_type;
+
+ // Determine if the object will be held by value
+ typedef is_convertible<held_type*,T*> use_value_holder;
+
+ // Compute the "wrapped type", that is, if held_type is a smart
+ // pointer, we're talking about the pointee.
+ typedef typename mpl::eval_if<
+ use_value_holder
+ , mpl::identity<held_type>
+ , pointee<held_type>
+ >::type wrapped;
+
+ // Determine whether to use a "back-reference holder"
+ typedef mpl::or_<
+ has_back_reference<T>
+ , is_same<held_type_arg,T>
+ , is_base_and_derived<T,wrapped>
+ > use_back_reference;
+
+ // Select the holder.
+ typedef typename mpl::eval_if<
+ use_back_reference
+ , mpl::if_<
+ use_value_holder
+ , value_holder_back_reference<T, wrapped>
+ , pointer_holder_back_reference<held_type,T>
+ >
+ , mpl::if_<
+ use_value_holder
+ , value_holder<T>
+ , pointer_holder<held_type,wrapped>
+ >
+ >::type holder;
+
+ inline static void register_() // Register the runtime metadata.
+ {
+ class_metadata::register_aux((T*)0);
+ }
+
+ private:
+ template <class T2>
+ inline static void register_aux(python::wrapper<T2>*)
+ {
+ typedef typename mpl::not_<is_same<T2,wrapped> >::type use_callback;
+ class_metadata::register_aux2((T2*)0, use_callback());
+ }
+
+ inline static void register_aux(void*)
+ {
+ typedef typename is_base_and_derived<T,wrapped>::type use_callback;
+ class_metadata::register_aux2((T*)0, use_callback());
+ }
+
+ template <class T2, class Callback>
+ inline static void register_aux2(T2*, Callback)
+ {
+ objects::register_shared_ptr_from_python_and_casts((T2*)0, bases());
+
+ class_metadata::maybe_register_callback_class((T2*)0, Callback());
+
+ class_metadata::maybe_register_class_to_python((T2*)0, is_noncopyable());
+
+ class_metadata::maybe_register_pointer_to_python(
+ (T2*)0, (use_value_holder*)0, (use_back_reference*)0);
+ }
+
+
+ //
+ // Support for converting smart pointers to python
+ //
+ inline static void maybe_register_pointer_to_python(void*,void*,void*) {}
+
+ template <class T2>
+ inline static void maybe_register_pointer_to_python(T2*, mpl::false_*, mpl::false_*)
+ {
+ python::detail::force_instantiate(
+ objects::class_value_wrapper<
+ held_type
+ , make_ptr_instance<T2, pointer_holder<held_type, T2> >
+ >()
+ );
+ }
+ //
+ // Support for registering to-python converters
+ //
+ inline static void maybe_register_class_to_python(void*, mpl::true_) {}
+
+
+ template <class T2>
+ inline static void maybe_register_class_to_python(T2*, mpl::false_)
+ {
+ python::detail::force_instantiate(class_cref_wrapper<T2, make_instance<T2, holder> >());
+ }
+
+ //
+ // Support for registering callback classes
+ //
+ inline static void maybe_register_callback_class(void*, mpl::false_) {}
+
+ template <class T2>
+ inline static void maybe_register_callback_class(T2*, mpl::true_)
+ {
+ objects::register_shared_ptr_from_python_and_casts(
+ (wrapped*)0, mpl::single_view<T2>());
+
+ // explicit qualification of type_id makes msvc6 happy
+ objects::copy_class_object(python::type_id<T2>(), python::type_id<wrapped>());
+ }
+};
+
+}}} // namespace boost::python::object
+
+#endif // CLASS_METADATA_DWA2004719_HPP
diff --git a/boost/boost/python/object/class_wrapper.hpp b/boost/boost/python/object/class_wrapper.hpp
new file mode 100644
index 00000000000..5097ee5ad54
--- /dev/null
+++ b/boost/boost/python/object/class_wrapper.hpp
@@ -0,0 +1,42 @@
+// Copyright David Abrahams 2001.
+// 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 CLASS_WRAPPER_DWA20011221_HPP
+# define CLASS_WRAPPER_DWA20011221_HPP
+
+# include <boost/python/to_python_converter.hpp>
+# include <boost/ref.hpp>
+
+namespace boost { namespace python { namespace objects {
+
+//
+// These two classes adapt the static execute function of a class
+// MakeInstance execute() function returning a new PyObject*
+// reference. The first one is used for class copy constructors, and
+// the second one is used to handle smart pointers.
+//
+
+template <class Src, class MakeInstance>
+struct class_cref_wrapper
+ : to_python_converter<Src,class_cref_wrapper<Src,MakeInstance> >
+{
+ static PyObject* convert(Src const& x)
+ {
+ return MakeInstance::execute(boost::ref(x));
+ }
+};
+
+template <class Src, class MakeInstance>
+struct class_value_wrapper
+ : to_python_converter<Src,class_value_wrapper<Src,MakeInstance> >
+{
+ static PyObject* convert(Src x)
+ {
+ return MakeInstance::execute(x);
+ }
+};
+
+}}} // namespace boost::python::objects
+
+#endif // CLASS_WRAPPER_DWA20011221_HPP
diff --git a/boost/boost/python/object/enum_base.hpp b/boost/boost/python/object/enum_base.hpp
new file mode 100644
index 00000000000..7062ed90e3d
--- /dev/null
+++ b/boost/boost/python/object/enum_base.hpp
@@ -0,0 +1,34 @@
+// Copyright David Abrahams 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)
+#ifndef ENUM_BASE_DWA200298_HPP
+# define ENUM_BASE_DWA200298_HPP
+
+# include <boost/python/object_core.hpp>
+# include <boost/python/type_id.hpp>
+# include <boost/python/converter/to_python_function_type.hpp>
+# include <boost/python/converter/convertible_function.hpp>
+# include <boost/python/converter/constructor_function.hpp>
+
+namespace boost { namespace python { namespace objects {
+
+struct BOOST_PYTHON_DECL enum_base : python::api::object
+{
+ protected:
+ enum_base(
+ char const* name
+ , converter::to_python_function_t
+ , converter::convertible_function
+ , converter::constructor_function
+ , type_info);
+
+ void add_value(char const* name, long value);
+ void export_values();
+
+ static PyObject* to_python(PyTypeObject* type, long x);
+};
+
+}}} // namespace boost::python::object
+
+#endif // ENUM_BASE_DWA200298_HPP
diff --git a/boost/boost/python/object/find_instance.hpp b/boost/boost/python/object/find_instance.hpp
new file mode 100644
index 00000000000..3202c1cd155
--- /dev/null
+++ b/boost/boost/python/object/find_instance.hpp
@@ -0,0 +1,21 @@
+// Copyright David Abrahams 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)
+#ifndef FIND_INSTANCE_DWA2002312_HPP
+# define FIND_INSTANCE_DWA2002312_HPP
+
+# include <boost/python/type_id.hpp>
+
+namespace boost { namespace python { namespace objects {
+
+// Given a type_id, find the instance data which corresponds to it, or
+// return 0 in case no such type is held. If null_shared_ptr_only is
+// true and the type being sought is a shared_ptr, only find an
+// instance if it turns out to be NULL. Needed for shared_ptr rvalue
+// from_python support.
+BOOST_PYTHON_DECL void* find_instance_impl(PyObject*, type_info, bool null_shared_ptr_only = false);
+
+}}} // namespace boost::python::objects
+
+#endif // FIND_INSTANCE_DWA2002312_HPP
diff --git a/boost/boost/python/object/forward.hpp b/boost/boost/python/object/forward.hpp
new file mode 100644
index 00000000000..2faf3321ecd
--- /dev/null
+++ b/boost/boost/python/object/forward.hpp
@@ -0,0 +1,194 @@
+// Copyright David Abrahams 2001.
+// 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 FORWARD_DWA20011215_HPP
+# define FORWARD_DWA20011215_HPP
+
+# include <boost/mpl/if.hpp>
+# include <boost/type_traits/is_scalar.hpp>
+# include <boost/type_traits/add_const.hpp>
+# include <boost/type_traits/add_reference.hpp>
+# include <boost/ref.hpp>
+# include <boost/python/detail/value_arg.hpp>
+# include <boost/python/detail/copy_ctor_mutates_rhs.hpp>
+# if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+# include <boost/type_traits/is_enum.hpp>
+# include <boost/mpl/and.hpp>
+# include <boost/mpl/not.hpp>
+# else
+# include <boost/mpl/or.hpp>
+# endif
+
+namespace boost { namespace python { namespace objects {
+
+// Very much like boost::reference_wrapper<T>, except that in this
+// case T can be a reference already without causing a
+// reference-to-reference error.
+template <class T>
+struct reference_to_value
+{
+ typedef typename add_reference<typename add_const<T>::type>::type reference;
+
+ reference_to_value(reference x) : m_value(x) {}
+ reference get() const { return m_value; }
+ private:
+ reference m_value;
+};
+
+// A little metaprogram which selects the type to pass through an
+// intermediate forwarding function when the destination argument type
+// is T.
+template <class T>
+struct forward
+ : mpl::if_<
+# if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ // vc6 chokes on unforwarding enums nested in classes
+ mpl::and_<
+ is_scalar<T>
+ , mpl::not_<
+ is_enum<T>
+ >
+ >
+# else
+ mpl::or_<python::detail::copy_ctor_mutates_rhs<T>, is_scalar<T> >
+# endif
+ , T
+ , reference_to_value<T>
+ >
+{
+};
+
+# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+template<typename T>
+struct unforward
+{
+ typedef typename unwrap_reference<T>::type& type;
+};
+
+template<typename T>
+struct unforward<reference_to_value<T> >
+{
+ typedef T type;
+};
+
+template <typename T>
+struct unforward_cref
+ : python::detail::value_arg<
+ typename unwrap_reference<T>::type
+ >
+{
+};
+
+template<typename T>
+struct unforward_cref<reference_to_value<T> >
+ : add_reference<typename add_const<T>::type>
+{
+};
+
+# else // no partial specialization
+
+namespace detail
+{
+ typedef char (&yes_reference_to_value_t)[1];
+ typedef char (&no_reference_to_value_t)[2];
+
+ no_reference_to_value_t is_reference_to_value_test(...);
+
+ template<typename T>
+ yes_reference_to_value_t is_reference_to_value_test(boost::type< reference_to_value<T> >);
+
+ template<bool wrapped>
+ struct unforwarder
+ {
+ template <class T>
+ struct apply
+ {
+ typedef typename unwrap_reference<T>::type& type;
+ };
+ };
+
+ template<>
+ struct unforwarder<true>
+ {
+ template <class T>
+ struct apply
+ {
+ typedef typename T::reference type;
+ };
+ };
+
+ template<bool wrapped = false>
+ struct cref_unforwarder
+ {
+ template <class T>
+ struct apply
+ : python::detail::value_arg<
+ typename unwrap_reference<T>::type
+ >
+ {
+ };
+ };
+
+ template<>
+ struct cref_unforwarder<true>
+ {
+ template <class T>
+ struct apply
+ : python::detail::value_arg<
+ typename T::reference
+ >
+ {
+ };
+ };
+
+ template<typename T>
+ struct is_reference_to_value
+ {
+ BOOST_STATIC_CONSTANT(
+ bool, value = (
+ sizeof(is_reference_to_value_test(boost::type<T>()))
+ == sizeof(yes_reference_to_value_t)));
+ typedef mpl::bool_<value> type;
+ };
+}
+
+template <typename T>
+struct unforward
+ : public detail::unforwarder<
+ detail::is_reference_to_value<T>::value
+ >::template apply<T>
+{};
+
+template <typename T>
+struct unforward_cref
+ : public detail::cref_unforwarder<
+ detail::is_reference_to_value<T>::value
+ >::template apply<T>
+{};
+
+# endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+template <class T>
+typename reference_to_value<T>::reference
+do_unforward(reference_to_value<T> const& x, int)
+{
+ return x.get();
+}
+
+template <class T>
+typename reference_wrapper<T>::type&
+do_unforward(reference_wrapper<T> const& x, int)
+{
+ return x.get();
+}
+
+template <class T>
+T const& do_unforward(T const& x, ...)
+{
+ return x;
+}
+
+}}} // namespace boost::python::objects
+
+#endif // FORWARD_DWA20011215_HPP
diff --git a/boost/boost/python/object/function.hpp b/boost/boost/python/object/function.hpp
new file mode 100644
index 00000000000..5ef0f827d93
--- /dev/null
+++ b/boost/boost/python/object/function.hpp
@@ -0,0 +1,78 @@
+// Copyright David Abrahams 2001.
+// 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 FUNCTION_DWA20011214_HPP
+# define FUNCTION_DWA20011214_HPP
+
+# include <boost/python/detail/prefix.hpp>
+# include <boost/python/args_fwd.hpp>
+# include <boost/python/handle.hpp>
+# include <boost/function/function2.hpp>
+# include <boost/python/object_core.hpp>
+# include <boost/python/object/py_function.hpp>
+
+namespace boost { namespace python { namespace objects {
+
+struct BOOST_PYTHON_DECL function : PyObject
+{
+ function(
+ py_function const&
+ , python::detail::keyword const* names_and_defaults
+ , unsigned num_keywords);
+
+ ~function();
+
+ PyObject* call(PyObject*, PyObject*) const;
+
+ // Add an attribute to the name_space with the given name. If it is
+ // a function object (this class), and an existing function is
+ // already there, add it as an overload.
+ static void add_to_namespace(
+ object const& name_space, char const* name, object const& attribute);
+
+ static void add_to_namespace(
+ object const& name_space, char const* name, object const& attribute, char const* doc);
+
+ object const& doc() const;
+ void doc(object const& x);
+
+ object const& name() const;
+
+ private: // helper functions
+ object signature(bool show_return_type=false) const;
+ object signatures(bool show_return_type=false) const;
+ void argument_error(PyObject* args, PyObject* keywords) const;
+ void add_overload(handle<function> const&);
+
+ private: // data members
+ py_function m_fn;
+ handle<function> m_overloads;
+ object m_name;
+ object m_namespace;
+ object m_doc;
+ object m_arg_names;
+ unsigned m_nkeyword_values;
+};
+
+//
+// implementations
+//
+inline object const& function::doc() const
+{
+ return this->m_doc;
+}
+
+inline void function::doc(object const& x)
+{
+ this->m_doc = x;
+}
+
+inline object const& function::name() const
+{
+ return this->m_name;
+}
+
+}}} // namespace boost::python::objects
+
+#endif // FUNCTION_DWA20011214_HPP
diff --git a/boost/boost/python/object/function_handle.hpp b/boost/boost/python/object/function_handle.hpp
new file mode 100644
index 00000000000..7edaf2ce3ae
--- /dev/null
+++ b/boost/boost/python/object/function_handle.hpp
@@ -0,0 +1,44 @@
+// Copyright David Abrahams 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)
+#ifndef FUNCTION_HANDLE_DWA2002725_HPP
+# define FUNCTION_HANDLE_DWA2002725_HPP
+# include <boost/python/handle.hpp>
+# include <boost/python/detail/caller.hpp>
+# include <boost/python/default_call_policies.hpp>
+# include <boost/python/object/py_function.hpp>
+# include <boost/python/signature.hpp>
+
+namespace boost { namespace python { namespace objects {
+
+BOOST_PYTHON_DECL handle<> function_handle_impl(py_function const& f);
+
+// Just like function_object, but returns a handle<> instead. Using
+// this for arg_to_python<> allows us to break a circular dependency
+// between object and arg_to_python.
+template <class F, class Signature>
+inline handle<> function_handle(F const& f, Signature)
+{
+ enum { n_arguments = mpl::size<Signature>::value - 1 };
+
+ return objects::function_handle_impl(
+ python::detail::caller<
+ F,default_call_policies,Signature
+ >(
+ f, default_call_policies()
+ )
+ );
+}
+
+// Just like make_function, but returns a handle<> intead. Same
+// reasoning as above.
+template <class F>
+handle<> make_function_handle(F f)
+{
+ return objects::function_handle(f, python::detail::get_signature(f));
+}
+
+}}} // namespace boost::python::objects
+
+#endif // FUNCTION_HANDLE_DWA2002725_HPP
diff --git a/boost/boost/python/object/function_object.hpp b/boost/boost/python/object/function_object.hpp
new file mode 100644
index 00000000000..eaa079fbe05
--- /dev/null
+++ b/boost/boost/python/object/function_object.hpp
@@ -0,0 +1,40 @@
+// Copyright David Abrahams 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)
+#ifndef FUNCTION_OBJECT_DWA2002725_HPP
+# define FUNCTION_OBJECT_DWA2002725_HPP
+# include <boost/python/detail/prefix.hpp>
+# include <boost/function/function2.hpp>
+# include <boost/python/object_core.hpp>
+# include <boost/python/args_fwd.hpp>
+# include <boost/python/object/py_function.hpp>
+
+namespace boost { namespace python {
+
+namespace objects
+{
+ BOOST_PYTHON_DECL api::object function_object(
+ py_function const& f
+ , python::detail::keyword_range const&);
+
+ BOOST_PYTHON_DECL api::object function_object(
+ py_function const& f
+ , python::detail::keyword_range const&);
+
+ BOOST_PYTHON_DECL api::object function_object(py_function const& f);
+
+ // Add an attribute to the name_space with the given name. If it is
+ // a Boost.Python function object
+ // (boost/python/object/function.hpp), and an existing function is
+ // already there, add it as an overload.
+ BOOST_PYTHON_DECL void add_to_namespace(
+ object const& name_space, char const* name, object const& attribute);
+
+ BOOST_PYTHON_DECL void add_to_namespace(
+ object const& name_space, char const* name, object const& attribute, char const* doc);
+}
+
+}} // namespace boost::python::objects
+
+#endif // FUNCTION_OBJECT_DWA2002725_HPP
diff --git a/boost/boost/python/object/inheritance.hpp b/boost/boost/python/object/inheritance.hpp
new file mode 100644
index 00000000000..b49a0442e2f
--- /dev/null
+++ b/boost/boost/python/object/inheritance.hpp
@@ -0,0 +1,132 @@
+// Copyright David Abrahams 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)
+#ifndef INHERITANCE_DWA200216_HPP
+# define INHERITANCE_DWA200216_HPP
+
+# include <boost/python/type_id.hpp>
+# include <boost/shared_ptr.hpp>
+# include <boost/mpl/if.hpp>
+# include <boost/type_traits/is_polymorphic.hpp>
+# include <boost/type_traits/is_base_and_derived.hpp>
+# include <boost/detail/workaround.hpp>
+
+namespace boost { namespace python { namespace objects {
+
+typedef type_info class_id;
+using python::type_id;
+
+// Types used to get address and id of most derived type
+typedef std::pair<void*,class_id> dynamic_id_t;
+typedef dynamic_id_t (*dynamic_id_function)(void*);
+
+BOOST_PYTHON_DECL void register_dynamic_id_aux(
+ class_id static_id, dynamic_id_function get_dynamic_id);
+
+BOOST_PYTHON_DECL void add_cast(
+ class_id src_t, class_id dst_t, void* (*cast)(void*), bool is_downcast);
+
+//
+// a generator with an execute() function which, given a source type
+// and a pointer to an object of that type, returns its most-derived
+// /reachable/ type identifier and object pointer.
+//
+
+// first, the case where T has virtual functions
+template <class T>
+struct polymorphic_id_generator
+{
+ static dynamic_id_t execute(void* p_)
+ {
+ T* p = static_cast<T*>(p_);
+ return std::make_pair(dynamic_cast<void*>(p), class_id(typeid(*p)));
+ }
+};
+
+// now, the non-polymorphic case.
+template <class T>
+struct non_polymorphic_id_generator
+{
+ static dynamic_id_t execute(void* p_)
+ {
+ return std::make_pair(p_, python::type_id<T>());
+ }
+};
+
+// Now the generalized selector
+template <class T>
+struct dynamic_id_generator
+ : mpl::if_<
+ boost::is_polymorphic<T>
+ , boost::python::objects::polymorphic_id_generator<T>
+ , boost::python::objects::non_polymorphic_id_generator<T>
+ >
+{};
+
+// Register the dynamic id function for T with the type-conversion
+// system.
+template <class T>
+void register_dynamic_id(T* = 0)
+{
+ typedef typename dynamic_id_generator<T>::type generator;
+ register_dynamic_id_aux(
+ python::type_id<T>(), &generator::execute);
+}
+
+//
+// a generator with an execute() function which, given a void*
+// pointing to an object of type Source will attempt to convert it to
+// an object of type Target.
+//
+
+template <class Source, class Target>
+struct dynamic_cast_generator
+{
+ static void* execute(void* source)
+ {
+ return dynamic_cast<Target*>(
+ static_cast<Source*>(source));
+ }
+
+};
+
+template <class Source, class Target>
+struct implicit_cast_generator
+{
+ static void* execute(void* source)
+ {
+ Target* result = static_cast<Source*>(source);
+ return result;
+ }
+};
+
+template <class Source, class Target>
+struct cast_generator
+ : mpl::if_<
+ is_base_and_derived<Target,Source>
+ , implicit_cast_generator<Source,Target>
+ , dynamic_cast_generator<Source,Target>
+ >
+{
+};
+
+template <class Source, class Target>
+inline void register_conversion(
+ bool is_downcast = ::boost::is_base_and_derived<Source,Target>::value
+ // These parameters shouldn't be used; they're an MSVC bug workaround
+ , Source* = 0, Target* = 0)
+{
+ typedef typename cast_generator<Source,Target>::type generator;
+
+ add_cast(
+ python::type_id<Source>()
+ , python::type_id<Target>()
+ , &generator::execute
+ , is_downcast
+ );
+}
+
+}}} // namespace boost::python::object
+
+#endif // INHERITANCE_DWA200216_HPP
diff --git a/boost/boost/python/object/inheritance_query.hpp b/boost/boost/python/object/inheritance_query.hpp
new file mode 100644
index 00000000000..916e161f29e
--- /dev/null
+++ b/boost/boost/python/object/inheritance_query.hpp
@@ -0,0 +1,17 @@
+// Copyright David Abrahams 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)
+#ifndef INHERITANCE_QUERY_DWA2003520_HPP
+# define INHERITANCE_QUERY_DWA2003520_HPP
+
+# include <boost/python/type_id.hpp>
+
+namespace boost { namespace python { namespace objects {
+
+BOOST_PYTHON_DECL void* find_static_type(void* p, type_info src, type_info dst);
+BOOST_PYTHON_DECL void* find_dynamic_type(void* p, type_info src, type_info dst);
+
+}}} // namespace boost::python::object
+
+#endif // INHERITANCE_QUERY_DWA2003520_HPP
diff --git a/boost/boost/python/object/instance.hpp b/boost/boost/python/object/instance.hpp
new file mode 100644
index 00000000000..177576ef828
--- /dev/null
+++ b/boost/boost/python/object/instance.hpp
@@ -0,0 +1,51 @@
+// Copyright David Abrahams 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)
+#ifndef INSTANCE_DWA200295_HPP
+# define INSTANCE_DWA200295_HPP
+
+# include <boost/python/detail/prefix.hpp>
+# include <boost/type_traits/alignment_traits.hpp>
+# include <cstddef>
+
+namespace boost { namespace python
+{
+ struct BOOST_PYTHON_DECL_FORWARD instance_holder;
+}} // namespace boost::python
+
+namespace boost { namespace python { namespace objects {
+
+// Each extension instance will be one of these
+template <class Data = char>
+struct instance
+{
+ PyObject_VAR_HEAD
+ PyObject* dict;
+ PyObject* weakrefs;
+ instance_holder* objects;
+
+ typedef typename type_with_alignment<
+ ::boost::alignment_of<Data>::value
+ >::type align_t;
+
+ union
+ {
+ align_t align;
+ char bytes[sizeof(Data)];
+ } storage;
+};
+
+template <class Data>
+struct additional_instance_size
+{
+ typedef instance<Data> instance_data;
+ typedef instance<char> instance_char;
+ BOOST_STATIC_CONSTANT(
+ std::size_t, value = sizeof(instance_data)
+ - BOOST_PYTHON_OFFSETOF(instance_char,storage));
+};
+
+}}} // namespace boost::python::object
+
+#endif // INSTANCE_DWA200295_HPP
diff --git a/boost/boost/python/object/iterator.hpp b/boost/boost/python/object/iterator.hpp
new file mode 100644
index 00000000000..3e24afd2603
--- /dev/null
+++ b/boost/boost/python/object/iterator.hpp
@@ -0,0 +1,254 @@
+// Copyright David Abrahams 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)
+#ifndef ITERATOR_DWA2002510_HPP
+# define ITERATOR_DWA2002510_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+# include <boost/python/class.hpp>
+# include <boost/python/return_value_policy.hpp>
+# include <boost/python/return_by_value.hpp>
+# include <boost/python/handle.hpp>
+# include <boost/python/make_function.hpp>
+
+# include <boost/python/object/iterator_core.hpp>
+# include <boost/python/object/class_detail.hpp>
+# include <boost/python/object/function_object.hpp>
+
+# include <boost/mpl/vector/vector10.hpp>
+# include <boost/mpl/if.hpp>
+
+# include <boost/python/detail/raw_pyobject.hpp>
+
+# include <boost/type.hpp>
+
+# include <boost/type_traits/is_same.hpp>
+# include <boost/type_traits/add_reference.hpp>
+# include <boost/type_traits/add_const.hpp>
+
+# include <boost/detail/iterator.hpp>
+
+namespace boost { namespace python { namespace objects {
+
+// CallPolicies for the next() method of iterators. We don't want
+// users to have to explicitly specify that the references returned by
+// iterators are copied, so we just replace the result_converter from
+// the default_iterator_call_policies with a permissive one which
+// always copies the result.
+typedef return_value_policy<return_by_value> default_iterator_call_policies;
+
+// Instantiations of these are wrapped to produce Python iterators.
+template <class NextPolicies, class Iterator>
+struct iterator_range
+{
+ iterator_range(object sequence, Iterator start, Iterator finish);
+
+ typedef boost::detail::iterator_traits<Iterator> traits_t;
+
+ struct next
+ {
+ typedef typename mpl::if_<
+ is_reference<
+ typename traits_t::reference
+ >
+ , typename traits_t::reference
+ , typename traits_t::value_type
+ >::type result_type;
+
+ result_type
+ operator()(iterator_range<NextPolicies,Iterator>& self)
+ {
+ if (self.m_start == self.m_finish)
+ stop_iteration_error();
+ return *self.m_start++;
+ }
+
+# if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003))
+ // CWPro8 has a codegen problem when this is an empty class
+ int garbage;
+# endif
+ };
+
+# ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ // for compilers which can't deduce the value_type of pointers, we
+ // have a special implementation of next. This takes advantage of
+ // the fact that T* results are treated like T& results by
+ // Boost.Python's function wrappers.
+ struct next_ptr
+ {
+ typedef Iterator result_type;
+
+ result_type
+ operator()(iterator_range<NextPolicies,Iterator>& self)
+ {
+ if (self.m_start == self.m_finish)
+ stop_iteration_error();
+ return self.m_start++;
+ }
+ };
+
+ typedef mpl::if_<
+ is_same<
+ boost::detail::please_invoke_BOOST_TT_BROKEN_COMPILER_SPEC_on_cv_unqualified_pointee<Iterator>
+ , typename traits_t::value_type
+ >
+ , next_ptr
+ , next
+ >::type next_fn;
+# else
+ typedef next next_fn;
+# endif
+
+ object m_sequence; // Keeps the sequence alive while iterating.
+ Iterator m_start;
+ Iterator m_finish;
+};
+
+namespace detail
+{
+ // Get a Python class which contains the given iterator and
+ // policies, creating it if necessary. Requires: NextPolicies is
+ // default-constructible.
+ template <class Iterator, class NextPolicies>
+ object demand_iterator_class(char const* name, Iterator* = 0, NextPolicies const& policies = NextPolicies())
+ {
+ typedef iterator_range<NextPolicies,Iterator> range_;
+
+ // Check the registry. If one is already registered, return it.
+ handle<> class_obj(
+ objects::registered_class_object(python::type_id<range_>()));
+
+ if (class_obj.get() != 0)
+ return object(class_obj);
+
+ typedef typename range_::next_fn next_fn;
+ typedef typename next_fn::result_type result_type;
+
+ return class_<range_>(name, no_init)
+ .def("__iter__", identity_function())
+ .def(
+ "next"
+ , make_function(
+ next_fn()
+ , policies
+ , mpl::vector2<result_type,range_&>()
+ ));
+ }
+
+ // A function object which builds an iterator_range.
+ template <
+ class Target
+ , class Iterator
+ , class Accessor1
+ , class Accessor2
+ , class NextPolicies
+ >
+ struct py_iter_
+ {
+ py_iter_(Accessor1 const& get_start, Accessor2 const& get_finish)
+ : m_get_start(get_start)
+ , m_get_finish(get_finish)
+ {}
+
+ // Extract an object x of the Target type from the first Python
+ // argument, and invoke get_start(x)/get_finish(x) to produce
+ // iterators, which are used to construct a new iterator_range<>
+ // object that gets wrapped into a Python iterator.
+ iterator_range<NextPolicies,Iterator>
+ operator()(back_reference<Target&> x) const
+ {
+ // Make sure the Python class is instantiated.
+ detail::demand_iterator_class("iterator", (Iterator*)0, NextPolicies());
+
+ return iterator_range<NextPolicies,Iterator>(
+ x.source()
+ , m_get_start(x.get())
+ , m_get_finish(x.get())
+ );
+ }
+ private:
+ Accessor1 m_get_start;
+ Accessor2 m_get_finish;
+ };
+
+ template <class Target, class Iterator, class NextPolicies, class Accessor1, class Accessor2>
+ inline object make_iterator_function(
+ Accessor1 const& get_start
+ , Accessor2 const& get_finish
+ , NextPolicies const& /*next_policies*/
+ , Iterator const& (*)()
+ , boost::type<Target>*
+ , int
+ )
+ {
+ return make_function(
+ py_iter_<Target,Iterator,Accessor1,Accessor2,NextPolicies>(get_start, get_finish)
+ , default_call_policies()
+ , mpl::vector2<iterator_range<NextPolicies,Iterator>, back_reference<Target&> >()
+ );
+ }
+
+ template <class Target, class Iterator, class NextPolicies, class Accessor1, class Accessor2>
+ inline object make_iterator_function(
+ Accessor1 const& get_start
+ , Accessor2 const& get_finish
+ , NextPolicies const& next_policies
+ , Iterator& (*)()
+ , boost::type<Target>*
+ , ...)
+ {
+ return make_iterator_function(
+ get_start
+ , get_finish
+ , next_policies
+ , (Iterator const&(*)())0
+ , (boost::type<Target>*)0
+ , 0
+ );
+ }
+
+}
+
+// Create a Python callable object which accepts a single argument
+// convertible to the C++ Target type and returns a Python
+// iterator. The Python iterator uses get_start(x) and get_finish(x)
+// (where x is an instance of Target) to produce begin and end
+// iterators for the range, and an instance of NextPolicies is used as
+// CallPolicies for the Python iterator's next() function.
+template <class Target, class NextPolicies, class Accessor1, class Accessor2>
+inline object make_iterator_function(
+ Accessor1 const& get_start
+ , Accessor2 const& get_finish
+ , NextPolicies const& next_policies
+ , boost::type<Target>* = 0
+)
+{
+ typedef typename Accessor1::result_type iterator;
+ typedef typename add_const<iterator>::type iterator_const;
+ typedef typename add_reference<iterator_const>::type iterator_cref;
+
+ return detail::make_iterator_function(
+ get_start
+ , get_finish
+ , next_policies
+ , (iterator_cref(*)())0
+ , (boost::type<Target>*)0
+ , 0
+ );
+}
+
+//
+// implementation
+//
+template <class NextPolicies, class Iterator>
+inline iterator_range<NextPolicies,Iterator>::iterator_range(
+ object sequence, Iterator start, Iterator finish)
+ : m_sequence(sequence), m_start(start), m_finish(finish)
+{
+}
+
+}}} // namespace boost::python::objects
+
+#endif // ITERATOR_DWA2002510_HPP
diff --git a/boost/boost/python/object/iterator_core.hpp b/boost/boost/python/object/iterator_core.hpp
new file mode 100644
index 00000000000..064accc5a8a
--- /dev/null
+++ b/boost/boost/python/object/iterator_core.hpp
@@ -0,0 +1,17 @@
+// Copyright David Abrahams 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)
+#ifndef ITERATOR_CORE_DWA2002512_HPP
+# define ITERATOR_CORE_DWA2002512_HPP
+
+# include <boost/python/object_fwd.hpp>
+
+namespace boost { namespace python { namespace objects {
+
+BOOST_PYTHON_DECL object const& identity_function();
+BOOST_PYTHON_DECL void stop_iteration_error();
+
+}}} // namespace boost::python::object
+
+#endif // ITERATOR_CORE_DWA2002512_HPP
diff --git a/boost/boost/python/object/life_support.hpp b/boost/boost/python/object/life_support.hpp
new file mode 100644
index 00000000000..9a1b16b689e
--- /dev/null
+++ b/boost/boost/python/object/life_support.hpp
@@ -0,0 +1,15 @@
+// Copyright David Abrahams 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)
+#ifndef LIFE_SUPPORT_DWA200222_HPP
+# define LIFE_SUPPORT_DWA200222_HPP
+# include <boost/python/detail/prefix.hpp>
+
+namespace boost { namespace python { namespace objects {
+
+BOOST_PYTHON_DECL PyObject* make_nurse_and_patient(PyObject* nurse, PyObject* patient);
+
+}}} // namespace boost::python::object
+
+#endif // LIFE_SUPPORT_DWA200222_HPP
diff --git a/boost/boost/python/object/make_holder.hpp b/boost/boost/python/object/make_holder.hpp
new file mode 100644
index 00000000000..83c185820ce
--- /dev/null
+++ b/boost/boost/python/object/make_holder.hpp
@@ -0,0 +1,97 @@
+#if !defined(BOOST_PP_IS_ITERATING)
+
+// Copyright David Abrahams 2001.
+// 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 MAKE_HOLDER_DWA20011215_HPP
+# define MAKE_HOLDER_DWA20011215_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+# include <boost/python/object/instance.hpp>
+
+# include <boost/python/object/forward.hpp>
+# include <boost/python/detail/preprocessor.hpp>
+
+# include <boost/mpl/next.hpp>
+# include <boost/mpl/begin_end.hpp>
+# include <boost/mpl/deref.hpp>
+
+# include <boost/preprocessor/iterate.hpp>
+# include <boost/preprocessor/iteration/local.hpp>
+# include <boost/preprocessor/repeat.hpp>
+# include <boost/preprocessor/debug/line.hpp>
+# include <boost/preprocessor/repetition/enum_trailing_binary_params.hpp>
+
+# include <cstddef>
+
+namespace boost { namespace python { namespace objects {
+
+template <int nargs> struct make_holder;
+
+# define BOOST_PYTHON_DO_FORWARD_ARG(z, index, _) , f##index(a##index)
+
+// specializations...
+# define BOOST_PP_ITERATION_PARAMS_1 (3, (0, BOOST_PYTHON_MAX_ARITY, <boost/python/object/make_holder.hpp>))
+# include BOOST_PP_ITERATE()
+
+# undef BOOST_PYTHON_DO_FORWARD_ARG
+
+}}} // namespace boost::python::objects
+
+# endif // MAKE_HOLDER_DWA20011215_HPP
+
+#elif BOOST_PP_ITERATION_DEPTH() == 1
+# if !(BOOST_WORKAROUND(__MWERKS__, > 0x3100) \
+ && BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3201)))
+# line BOOST_PP_LINE(__LINE__, make_holder.hpp)
+# endif
+
+# define N BOOST_PP_ITERATION()
+
+template <>
+struct make_holder<N>
+{
+ template <class Holder, class ArgList>
+ struct apply
+ {
+# if N
+ // Unrolled iteration through each argument type in ArgList,
+ // choosing the type that will be forwarded on to the holder's
+ // templated constructor.
+ typedef typename mpl::begin<ArgList>::type iter0;
+
+# define BOOST_PP_LOCAL_MACRO(n) \
+ typedef typename mpl::deref<iter##n>::type t##n; \
+ typedef typename forward<t##n>::type f##n; \
+ typedef typename mpl::next<iter##n>::type \
+ BOOST_PP_CAT(iter,BOOST_PP_INC(n)); // Next iterator type
+
+# define BOOST_PP_LOCAL_LIMITS (0, N-1)
+# include BOOST_PP_LOCAL_ITERATE()
+# endif
+
+ static void execute(
+ PyObject* p
+ BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_Z(1, N, t, a))
+ {
+ typedef instance<Holder> instance_t;
+
+ void* memory = Holder::allocate(p, offsetof(instance_t, storage), sizeof(Holder));
+ try {
+ (new (memory) Holder(
+ p BOOST_PP_REPEAT_1ST(N, BOOST_PYTHON_DO_FORWARD_ARG, nil)))->install(p);
+ }
+ catch(...) {
+ Holder::deallocate(p, memory);
+ throw;
+ }
+ }
+ };
+};
+
+# undef N
+
+#endif
diff --git a/boost/boost/python/object/make_instance.hpp b/boost/boost/python/object/make_instance.hpp
new file mode 100644
index 00000000000..55771eca0a2
--- /dev/null
+++ b/boost/boost/python/object/make_instance.hpp
@@ -0,0 +1,75 @@
+// Copyright David Abrahams 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)
+#ifndef MAKE_INSTANCE_DWA200296_HPP
+# define MAKE_INSTANCE_DWA200296_HPP
+
+# include <boost/python/detail/prefix.hpp>
+# include <boost/python/object/instance.hpp>
+# include <boost/python/converter/registered.hpp>
+# include <boost/python/detail/decref_guard.hpp>
+# include <boost/python/detail/none.hpp>
+
+namespace boost { namespace python { namespace objects {
+
+template <class T, class Holder, class Derived>
+struct make_instance_impl
+{
+ typedef objects::instance<Holder> instance_t;
+
+ template <class Arg>
+ static inline PyObject* execute(Arg& x)
+ {
+ BOOST_STATIC_ASSERT(is_class<T>::value);
+
+ PyTypeObject* type = Derived::get_class_object(x);
+
+ if (type == 0)
+ return python::detail::none();
+
+ PyObject* raw_result = type->tp_alloc(
+ type, objects::additional_instance_size<Holder>::value);
+
+ if (raw_result != 0)
+ {
+ python::detail::decref_guard protect(raw_result);
+
+ instance_t* instance = (instance_t*)raw_result;
+
+ // construct the new C++ object and install the pointer
+ // in the Python object.
+ Derived::construct(&instance->storage, (PyObject*)instance, x)->install(raw_result);
+
+ // Note the position of the internally-stored Holder,
+ // for the sake of destruction
+ instance->ob_size = offsetof(instance_t, storage);
+
+ // Release ownership of the python object
+ protect.cancel();
+ }
+ return raw_result;
+ }
+};
+
+
+template <class T, class Holder>
+struct make_instance
+ : make_instance_impl<T, Holder, make_instance<T,Holder> >
+{
+ template <class U>
+ static inline PyTypeObject* get_class_object(U&)
+ {
+ return converter::registered<T>::converters.get_class_object();
+ }
+
+ static inline Holder* construct(void* storage, PyObject* instance, reference_wrapper<T const> x)
+ {
+ return new (storage) Holder(instance, x);
+ }
+};
+
+
+}}} // namespace boost::python::object
+
+#endif // MAKE_INSTANCE_DWA200296_HPP
diff --git a/boost/boost/python/object/make_ptr_instance.hpp b/boost/boost/python/object/make_ptr_instance.hpp
new file mode 100644
index 00000000000..d045243bb34
--- /dev/null
+++ b/boost/boost/python/object/make_ptr_instance.hpp
@@ -0,0 +1,67 @@
+// Copyright David Abrahams 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)
+#ifndef MAKE_PTR_INSTANCE_DWA200296_HPP
+# define MAKE_PTR_INSTANCE_DWA200296_HPP
+
+# include <boost/python/object/make_instance.hpp>
+# include <boost/python/converter/registry.hpp>
+# include <boost/type_traits/is_polymorphic.hpp>
+# include <boost/get_pointer.hpp>
+# include <boost/detail/workaround.hpp>
+# include <typeinfo>
+
+namespace boost { namespace python { namespace objects {
+
+template <class T, class Holder>
+struct make_ptr_instance
+ : make_instance_impl<T, Holder, make_ptr_instance<T,Holder> >
+{
+ template <class Arg>
+ static inline Holder* construct(void* storage, PyObject*, Arg& x)
+ {
+ return new (storage) Holder(x);
+ }
+
+ template <class Ptr>
+ static inline PyTypeObject* get_class_object(Ptr const& x)
+ {
+ return get_class_object_impl(get_pointer(x));
+ }
+
+ private:
+ template <class U>
+ static inline PyTypeObject* get_class_object_impl(U const volatile* p)
+ {
+ if (p == 0)
+ return 0; // means "return None".
+
+ PyTypeObject* derived = get_derived_class_object(
+ BOOST_DEDUCED_TYPENAME is_polymorphic<U>::type(), p);
+
+ if (derived)
+ return derived;
+ return converter::registered<T>::converters.get_class_object();
+ }
+
+ template <class U>
+ static inline PyTypeObject* get_derived_class_object(mpl::true_, U const volatile* x)
+ {
+ converter::registration const* r = converter::registry::query(
+ type_info(typeid(*get_pointer(x)))
+ );
+ return r ? r->m_class_object : 0;
+ }
+
+ template <class U>
+ static inline PyTypeObject* get_derived_class_object(mpl::false_, U*)
+ {
+ return 0;
+ }
+};
+
+
+}}} // namespace boost::python::object
+
+#endif // MAKE_PTR_INSTANCE_DWA200296_HPP
diff --git a/boost/boost/python/object/pickle_support.hpp b/boost/boost/python/object/pickle_support.hpp
new file mode 100644
index 00000000000..cbdbcbb9d66
--- /dev/null
+++ b/boost/boost/python/object/pickle_support.hpp
@@ -0,0 +1,124 @@
+// (C) Copyright R.W. Grosse-Kunstleve 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)
+#ifndef BOOST_PYTHON_OBJECT_PICKLE_SUPPORT_RWGK20020603_HPP
+# define BOOST_PYTHON_OBJECT_PICKLE_SUPPORT_RWGK20020603_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+namespace boost { namespace python {
+
+namespace api
+{
+ class object;
+}
+using api::object;
+class tuple;
+
+BOOST_PYTHON_DECL object const& make_instance_reduce_function();
+
+struct pickle_suite;
+
+namespace error_messages {
+
+ template <class T>
+ struct missing_pickle_suite_function_or_incorrect_signature {};
+
+ inline void must_be_derived_from_pickle_suite(pickle_suite const&) {}
+}
+
+namespace detail { struct pickle_suite_registration; }
+
+struct pickle_suite
+{
+ private:
+ struct inaccessible {};
+ friend struct detail::pickle_suite_registration;
+ public:
+ static inaccessible* getinitargs() { return 0; }
+ static inaccessible* getstate() { return 0; }
+ static inaccessible* setstate() { return 0; }
+ static bool getstate_manages_dict() { return false; }
+};
+
+namespace detail {
+
+ struct pickle_suite_registration
+ {
+ typedef pickle_suite::inaccessible inaccessible;
+
+ template <class Class_, class Tgetinitargs>
+ static
+ void
+ register_(
+ Class_& cl,
+ tuple (*getinitargs_fn)(Tgetinitargs),
+ inaccessible* (* /*getstate_fn*/)(),
+ inaccessible* (* /*setstate_fn*/)(),
+ bool)
+ {
+ cl.enable_pickling_(false);
+ cl.def("__getinitargs__", getinitargs_fn);
+ }
+
+ template <class Class_,
+ class Rgetstate, class Tgetstate,
+ class Tsetstate, class Ttuple>
+ static
+ void
+ register_(
+ Class_& cl,
+ inaccessible* (* /*getinitargs_fn*/)(),
+ Rgetstate (*getstate_fn)(Tgetstate),
+ void (*setstate_fn)(Tsetstate, Ttuple),
+ bool getstate_manages_dict)
+ {
+ cl.enable_pickling_(getstate_manages_dict);
+ cl.def("__getstate__", getstate_fn);
+ cl.def("__setstate__", setstate_fn);
+ }
+
+ template <class Class_,
+ class Tgetinitargs,
+ class Rgetstate, class Tgetstate,
+ class Tsetstate, class Ttuple>
+ static
+ void
+ register_(
+ Class_& cl,
+ tuple (*getinitargs_fn)(Tgetinitargs),
+ Rgetstate (*getstate_fn)(Tgetstate),
+ void (*setstate_fn)(Tsetstate, Ttuple),
+ bool getstate_manages_dict)
+ {
+ cl.enable_pickling_(getstate_manages_dict);
+ cl.def("__getinitargs__", getinitargs_fn);
+ cl.def("__getstate__", getstate_fn);
+ cl.def("__setstate__", setstate_fn);
+ }
+
+ template <class Class_>
+ static
+ void
+ register_(
+ Class_&,
+ ...)
+ {
+ typedef typename
+ error_messages::missing_pickle_suite_function_or_incorrect_signature<
+ Class_>::error_type error_type;
+ }
+ };
+
+ template <typename PickleSuiteType>
+ struct pickle_suite_finalize
+ : PickleSuiteType,
+ pickle_suite_registration
+ {};
+
+} // namespace detail
+
+}} // namespace boost::python
+
+#endif // BOOST_PYTHON_OBJECT_PICKLE_SUPPORT_RWGK20020603_HPP
diff --git a/boost/boost/python/object/pointer_holder.hpp b/boost/boost/python/object/pointer_holder.hpp
new file mode 100644
index 00000000000..7fad2a25463
--- /dev/null
+++ b/boost/boost/python/object/pointer_holder.hpp
@@ -0,0 +1,208 @@
+#if !defined(BOOST_PP_IS_ITERATING)
+
+// Copyright David Abrahams 2001.
+// 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 POINTER_HOLDER_DWA20011215_HPP
+# define POINTER_HOLDER_DWA20011215_HPP
+
+# include <boost/get_pointer.hpp>
+# include <boost/type.hpp>
+
+# include <boost/python/instance_holder.hpp>
+# include <boost/python/object/inheritance_query.hpp>
+# include <boost/python/object/forward.hpp>
+
+# include <boost/python/pointee.hpp>
+# include <boost/python/type_id.hpp>
+
+# include <boost/python/detail/wrapper_base.hpp>
+# include <boost/python/detail/force_instantiate.hpp>
+# include <boost/python/detail/preprocessor.hpp>
+
+
+# include <boost/mpl/if.hpp>
+# include <boost/mpl/apply.hpp>
+
+# include <boost/preprocessor/comma_if.hpp>
+# include <boost/preprocessor/iterate.hpp>
+# include <boost/preprocessor/repeat.hpp>
+# include <boost/preprocessor/debug/line.hpp>
+# include <boost/preprocessor/enum_params.hpp>
+# include <boost/preprocessor/repetition/enum_binary_params.hpp>
+
+# include <boost/detail/workaround.hpp>
+
+namespace boost { namespace python {
+
+template <class T> class wrapper;
+
+}}
+
+
+namespace boost { namespace python { namespace objects {
+
+# if BOOST_WORKAROUND(__GNUC__, == 2)
+# define BOOST_PYTHON_UNFORWARD_LOCAL(z, n, _) BOOST_PP_COMMA_IF(n) (typename unforward<A##n>::type)objects::do_unforward(a##n,0)
+# else
+# define BOOST_PYTHON_UNFORWARD_LOCAL(z, n, _) BOOST_PP_COMMA_IF(n) objects::do_unforward(a##n,0)
+# endif
+
+template <class Pointer, class Value>
+struct pointer_holder : instance_holder
+{
+ typedef Value value_type;
+
+ pointer_holder(Pointer);
+
+ // Forward construction to the held object
+
+# define BOOST_PP_ITERATION_PARAMS_1 (4, (0, BOOST_PYTHON_MAX_ARITY, <boost/python/object/pointer_holder.hpp>, 1))
+# include BOOST_PP_ITERATE()
+
+ private: // types
+
+ private: // required holder implementation
+ void* holds(type_info, bool null_ptr_only);
+
+ template <class T>
+ inline void* holds_wrapped(type_info dst_t, wrapper<T>*,T* p)
+ {
+ return python::type_id<T>() == dst_t ? p : 0;
+ }
+
+ inline void* holds_wrapped(type_info, ...)
+ {
+ return 0;
+ }
+
+ private: // data members
+ Pointer m_p;
+};
+
+template <class Pointer, class Value>
+struct pointer_holder_back_reference : instance_holder
+{
+ private:
+ typedef typename python::pointee<Pointer>::type held_type;
+ public:
+ typedef Value value_type;
+
+ // Not sure about this one -- can it work? The source object
+ // undoubtedly does not carry the correct back reference pointer.
+ pointer_holder_back_reference(Pointer);
+
+ // Forward construction to the held object
+# define BOOST_PP_ITERATION_PARAMS_1 (4, (0, BOOST_PYTHON_MAX_ARITY, <boost/python/object/pointer_holder.hpp>, 2))
+# include BOOST_PP_ITERATE()
+
+ private: // required holder implementation
+ void* holds(type_info, bool null_ptr_only);
+
+ private: // data members
+ Pointer m_p;
+};
+
+# undef BOOST_PYTHON_UNFORWARD_LOCAL
+
+template <class Pointer, class Value>
+inline pointer_holder<Pointer,Value>::pointer_holder(Pointer p)
+ : m_p(p)
+{
+}
+
+template <class Pointer, class Value>
+inline pointer_holder_back_reference<Pointer,Value>::pointer_holder_back_reference(Pointer p)
+ : m_p(p)
+{
+}
+
+template <class Pointer, class Value>
+void* pointer_holder<Pointer, Value>::holds(type_info dst_t, bool null_ptr_only)
+{
+ if (dst_t == python::type_id<Pointer>()
+ && !(null_ptr_only && get_pointer(this->m_p))
+ )
+ return &this->m_p;
+
+ Value* p = get_pointer(this->m_p);
+ if (p == 0)
+ return 0;
+
+ if (void* wrapped = holds_wrapped(dst_t, p, p))
+ return wrapped;
+
+ type_info src_t = python::type_id<Value>();
+ return src_t == dst_t ? p : find_dynamic_type(p, src_t, dst_t);
+}
+
+template <class Pointer, class Value>
+void* pointer_holder_back_reference<Pointer, Value>::holds(type_info dst_t, bool null_ptr_only)
+{
+ if (dst_t == python::type_id<Pointer>()
+ && !(null_ptr_only && get_pointer(this->m_p))
+ )
+ return &this->m_p;
+
+ if (!get_pointer(this->m_p))
+ return 0;
+
+ Value* p = get_pointer(m_p);
+
+ if (dst_t == python::type_id<held_type>())
+ return p;
+
+ type_info src_t = python::type_id<Value>();
+ return src_t == dst_t ? p : find_dynamic_type(p, src_t, dst_t);
+}
+
+}}} // namespace boost::python::objects
+
+# endif // POINTER_HOLDER_DWA20011215_HPP
+
+/* --------------- pointer_holder --------------- */
+#elif BOOST_PP_ITERATION_DEPTH() == 1 && BOOST_PP_ITERATION_FLAGS() == 1
+# if !(BOOST_WORKAROUND(__MWERKS__, > 0x3100) \
+ && BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3201)))
+# line BOOST_PP_LINE(__LINE__, pointer_holder.hpp)
+# endif
+
+# define N BOOST_PP_ITERATION()
+
+# if (N != 0)
+ template< BOOST_PP_ENUM_PARAMS_Z(1, N, class A) >
+# endif
+ pointer_holder(PyObject* self BOOST_PP_COMMA_IF(N) BOOST_PP_ENUM_BINARY_PARAMS_Z(1, N, A, a))
+ : m_p(new Value(
+ BOOST_PP_REPEAT_1ST(N, BOOST_PYTHON_UNFORWARD_LOCAL, nil)
+ ))
+ {
+ python::detail::initialize_wrapper(self, get_pointer(this->m_p));
+ }
+
+# undef N
+
+/* --------------- pointer_holder_back_reference --------------- */
+#elif BOOST_PP_ITERATION_DEPTH() == 1 && BOOST_PP_ITERATION_FLAGS() == 2
+# if !(BOOST_WORKAROUND(__MWERKS__, > 0x3100) \
+ && BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3201)))
+# line BOOST_PP_LINE(__LINE__, pointer_holder.hpp(pointer_holder_back_reference))
+# endif
+
+# define N BOOST_PP_ITERATION()
+
+# if (N != 0)
+ template < BOOST_PP_ENUM_PARAMS_Z(1, N, class A) >
+# endif
+ pointer_holder_back_reference(
+ PyObject* p BOOST_PP_COMMA_IF(N) BOOST_PP_ENUM_BINARY_PARAMS_Z(1, N, A, a))
+ : m_p(new held_type(
+ p BOOST_PP_COMMA_IF(N) BOOST_PP_REPEAT_1ST(N, BOOST_PYTHON_UNFORWARD_LOCAL, nil)
+ ))
+ {}
+
+# undef N
+
+#endif
diff --git a/boost/boost/python/object/py_function.hpp b/boost/boost/python/object/py_function.hpp
new file mode 100644
index 00000000000..b8ef5ab445d
--- /dev/null
+++ b/boost/boost/python/object/py_function.hpp
@@ -0,0 +1,163 @@
+// Copyright David Abrahams 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)
+#ifndef PY_FUNCTION_DWA200286_HPP
+# define PY_FUNCTION_DWA200286_HPP
+
+# include <boost/python/detail/signature.hpp>
+# include <boost/detail/workaround.hpp>
+# include <boost/mpl/size.hpp>
+# include <memory>
+
+namespace boost { namespace python { namespace objects {
+
+// This type is used as a "generalized Python callback", wrapping the
+// function signature:
+//
+// PyObject* (PyObject* args, PyObject* keywords)
+
+struct BOOST_PYTHON_DECL py_function_impl_base
+{
+ virtual ~py_function_impl_base();
+ virtual PyObject* operator()(PyObject*, PyObject*) = 0;
+ virtual unsigned min_arity() const = 0;
+ virtual unsigned max_arity() const;
+ virtual python::detail::signature_element const* signature() const = 0;
+};
+
+template <class Caller>
+struct caller_py_function_impl : py_function_impl_base
+{
+ caller_py_function_impl(Caller const& caller)
+ : m_caller(caller)
+ {}
+
+ PyObject* operator()(PyObject* args, PyObject* kw)
+ {
+ return m_caller(args, kw);
+ }
+
+ virtual unsigned min_arity() const
+ {
+ return m_caller.min_arity();
+ }
+
+ virtual python::detail::signature_element const* signature() const
+ {
+ return m_caller.signature();
+ }
+
+ private:
+ Caller m_caller;
+};
+
+template <class Caller, class Sig>
+struct signature_py_function_impl : py_function_impl_base
+{
+ signature_py_function_impl(Caller const& caller)
+ : m_caller(caller)
+ {}
+
+ PyObject* operator()(PyObject* args, PyObject* kw)
+ {
+ return m_caller(args, kw);
+ }
+
+ virtual unsigned min_arity() const
+ {
+ return mpl::size<Sig>::value - 1;
+ }
+
+ virtual python::detail::signature_element const* signature() const
+ {
+ return python::detail::signature<Sig>::elements();
+ }
+
+ private:
+ Caller m_caller;
+};
+
+template <class Caller, class Sig>
+struct full_py_function_impl : py_function_impl_base
+{
+ full_py_function_impl(Caller const& caller, unsigned min_arity, unsigned max_arity)
+ : m_caller(caller)
+ , m_min_arity(min_arity)
+ , m_max_arity(max_arity > min_arity ? max_arity : min_arity)
+ {}
+
+ PyObject* operator()(PyObject* args, PyObject* kw)
+ {
+ return m_caller(args, kw);
+ }
+
+ virtual unsigned min_arity() const
+ {
+ return m_min_arity;
+ }
+
+ virtual unsigned max_arity() const
+ {
+ return m_max_arity;
+ }
+
+ virtual python::detail::signature_element const* signature() const
+ {
+ return python::detail::signature<Sig>::elements();
+ }
+
+ private:
+ Caller m_caller;
+ unsigned m_min_arity;
+ unsigned m_max_arity;
+};
+
+struct py_function
+{
+ template <class Caller>
+ py_function(Caller const& caller)
+ : m_impl(new caller_py_function_impl<Caller>(caller))
+ {}
+
+ template <class Caller, class Sig>
+ py_function(Caller const& caller, Sig)
+ : m_impl(new signature_py_function_impl<Caller, Sig>(caller))
+ {}
+
+ template <class Caller, class Sig>
+ py_function(Caller const& caller, Sig, int min_arity, int max_arity = 0)
+ : m_impl(new full_py_function_impl<Caller, Sig>(caller, min_arity, max_arity))
+ {}
+
+ py_function(py_function const& rhs)
+ : m_impl(rhs.m_impl)
+ {}
+
+ PyObject* operator()(PyObject* args, PyObject* kw) const
+ {
+ return (*m_impl)(args, kw);
+ }
+
+ unsigned min_arity() const
+ {
+ return m_impl->min_arity();
+ }
+
+ unsigned max_arity() const
+ {
+ return m_impl->max_arity();
+ }
+
+ python::detail::signature_element const* signature() const
+ {
+ return m_impl->signature();
+ }
+
+ private:
+ mutable std::auto_ptr<py_function_impl_base> m_impl;
+};
+
+}}} // namespace boost::python::objects
+
+#endif // PY_FUNCTION_DWA200286_HPP
diff --git a/boost/boost/python/object/stl_iterator_core.hpp b/boost/boost/python/object/stl_iterator_core.hpp
new file mode 100644
index 00000000000..68e0c2441bc
--- /dev/null
+++ b/boost/boost/python/object/stl_iterator_core.hpp
@@ -0,0 +1,27 @@
+// Copyright Eric Niebler 2005.
+// 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 STL_ITERATOR_CORE_EAN20051028_HPP
+# define STL_ITERATOR_CORE_EAN20051028_HPP
+
+# include <boost/python/object_fwd.hpp>
+# include <boost/python/handle_fwd.hpp>
+
+namespace boost { namespace python { namespace objects {
+
+struct BOOST_PYTHON_DECL stl_input_iterator_impl
+{
+ stl_input_iterator_impl();
+ stl_input_iterator_impl(boost::python::object const &ob);
+ void increment();
+ bool equal(stl_input_iterator_impl const &that) const;
+ boost::python::handle<> const &current() const;
+private:
+ boost::python::object it_;
+ boost::python::handle<> ob_;
+};
+
+}}} // namespace boost::python::object
+
+#endif // STL_ITERATOR_CORE_EAN20051028_HPP
diff --git a/boost/boost/python/object/value_holder.hpp b/boost/boost/python/object/value_holder.hpp
new file mode 100644
index 00000000000..e53866a187d
--- /dev/null
+++ b/boost/boost/python/object/value_holder.hpp
@@ -0,0 +1,166 @@
+#if !defined(BOOST_PP_IS_ITERATING)
+
+// Copyright David Abrahams 2001.
+// 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 VALUE_HOLDER_DWA20011215_HPP
+# define VALUE_HOLDER_DWA20011215_HPP
+
+# include <boost/python/object/value_holder_fwd.hpp>
+
+# include <boost/python/instance_holder.hpp>
+# include <boost/python/type_id.hpp>
+# include <boost/python/wrapper.hpp>
+
+# include <boost/python/object/inheritance_query.hpp>
+# include <boost/python/object/forward.hpp>
+
+# include <boost/python/detail/force_instantiate.hpp>
+# include <boost/python/detail/preprocessor.hpp>
+
+# include <boost/preprocessor/comma_if.hpp>
+# include <boost/preprocessor/enum_params.hpp>
+# include <boost/preprocessor/iterate.hpp>
+# include <boost/preprocessor/repeat.hpp>
+# include <boost/preprocessor/debug/line.hpp>
+
+# include <boost/preprocessor/repetition/enum_params.hpp>
+# include <boost/preprocessor/repetition/enum_binary_params.hpp>
+
+# include <boost/utility/addressof.hpp>
+
+namespace boost { namespace python { namespace objects {
+
+# if BOOST_WORKAROUND(__GNUC__, == 2)
+# define BOOST_PYTHON_UNFORWARD_LOCAL(z, n, _) BOOST_PP_COMMA_IF(n) (typename unforward<A##n>::type)objects::do_unforward(a##n,0)
+# else
+# define BOOST_PYTHON_UNFORWARD_LOCAL(z, n, _) BOOST_PP_COMMA_IF(n) objects::do_unforward(a##n,0)
+# endif
+
+template <class Value>
+struct value_holder : instance_holder
+{
+ typedef Value held_type;
+ typedef Value value_type;
+
+ // Forward construction to the held object
+# define BOOST_PP_ITERATION_PARAMS_1 (4, (0, BOOST_PYTHON_MAX_ARITY, <boost/python/object/value_holder.hpp>, 1))
+# include BOOST_PP_ITERATE()
+
+ private: // required holder implementation
+ void* holds(type_info, bool null_ptr_only);
+
+ template <class T>
+ inline void* holds_wrapped(type_info dst_t, wrapper<T>*,T* p)
+ {
+ return python::type_id<T>() == dst_t ? p : 0;
+ }
+
+ inline void* holds_wrapped(type_info, ...)
+ {
+ return 0;
+ }
+ private: // data members
+ Value m_held;
+};
+
+template <class Value, class Held>
+struct value_holder_back_reference : instance_holder
+{
+ typedef Held held_type;
+ typedef Value value_type;
+
+ // Forward construction to the held object
+# define BOOST_PP_ITERATION_PARAMS_1 (4, (0, BOOST_PYTHON_MAX_ARITY, <boost/python/object/value_holder.hpp>, 2))
+# include BOOST_PP_ITERATE()
+
+private: // required holder implementation
+ void* holds(type_info, bool null_ptr_only);
+
+ private: // data members
+ Held m_held;
+};
+
+# undef BOOST_PYTHON_UNFORWARD_LOCAL
+
+template <class Value>
+void* value_holder<Value>::holds(type_info dst_t, bool /*null_ptr_only*/)
+{
+ if (void* wrapped = holds_wrapped(dst_t, boost::addressof(m_held), boost::addressof(m_held)))
+ return wrapped;
+
+ type_info src_t = python::type_id<Value>();
+ return src_t == dst_t ? boost::addressof(m_held)
+ : find_static_type(boost::addressof(m_held), src_t, dst_t);
+}
+
+template <class Value, class Held>
+void* value_holder_back_reference<Value,Held>::holds(
+ type_info dst_t, bool /*null_ptr_only*/)
+{
+ type_info src_t = python::type_id<Value>();
+ Value* x = &m_held;
+
+ if (dst_t == src_t)
+ return x;
+ else if (dst_t == python::type_id<Held>())
+ return &m_held;
+ else
+ return find_static_type(x, src_t, dst_t);
+}
+
+}}} // namespace boost::python::objects
+
+# endif // VALUE_HOLDER_DWA20011215_HPP
+
+// --------------- value_holder ---------------
+
+#elif BOOST_PP_ITERATION_DEPTH() == 1 && BOOST_PP_ITERATION_FLAGS() == 1
+# if !(BOOST_WORKAROUND(__MWERKS__, > 0x3100) \
+ && BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3201)))
+# line BOOST_PP_LINE(__LINE__, value_holder.hpp(value_holder))
+# endif
+
+# define N BOOST_PP_ITERATION()
+
+# if (N != 0)
+ template <BOOST_PP_ENUM_PARAMS_Z(1, N, class A)>
+# endif
+ value_holder(
+ PyObject* self BOOST_PP_COMMA_IF(N) BOOST_PP_ENUM_BINARY_PARAMS_Z(1, N, A, a))
+ : m_held(
+ BOOST_PP_REPEAT_1ST(N, BOOST_PYTHON_UNFORWARD_LOCAL, nil)
+ )
+ {
+ python::detail::initialize_wrapper(self, boost::addressof(this->m_held));
+ }
+
+# undef N
+
+// --------------- value_holder_back_reference ---------------
+
+#elif BOOST_PP_ITERATION_DEPTH() == 1 && BOOST_PP_ITERATION_FLAGS() == 2
+# if !(BOOST_WORKAROUND(__MWERKS__, > 0x3100) \
+ && BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3201)))
+# line BOOST_PP_LINE(__LINE__, value_holder.hpp(value_holder_back_reference))
+# endif
+
+# define N BOOST_PP_ITERATION()
+
+# if (N != 0)
+ template <BOOST_PP_ENUM_PARAMS_Z(1, N, class A)>
+# endif
+ value_holder_back_reference(
+ PyObject* p BOOST_PP_COMMA_IF(N) BOOST_PP_ENUM_BINARY_PARAMS_Z(1, N, A, a))
+ : m_held(
+ p BOOST_PP_COMMA_IF(N)
+ BOOST_PP_REPEAT_1ST(N, BOOST_PYTHON_UNFORWARD_LOCAL, nil)
+ )
+ {
+ }
+
+# undef N
+
+#endif
diff --git a/boost/boost/python/object/value_holder_fwd.hpp b/boost/boost/python/object/value_holder_fwd.hpp
new file mode 100644
index 00000000000..3454bac426f
--- /dev/null
+++ b/boost/boost/python/object/value_holder_fwd.hpp
@@ -0,0 +1,16 @@
+// Copyright David Abrahams 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)
+#ifndef VALUE_HOLDER_FWD_DWA2002311_HPP
+# define VALUE_HOLDER_FWD_DWA2002311_HPP
+
+namespace boost { namespace python { namespace objects {
+
+struct no_back_reference;
+
+template <class CallbackType = no_back_reference> struct value_holder_generator;
+
+}}} // namespace boost::python::object
+
+#endif // VALUE_HOLDER_FWD_DWA2002311_HPP
diff --git a/boost/boost/python/object_attributes.hpp b/boost/boost/python/object_attributes.hpp
new file mode 100644
index 00000000000..012240b2ac4
--- /dev/null
+++ b/boost/boost/python/object_attributes.hpp
@@ -0,0 +1,68 @@
+// Copyright David Abrahams 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)
+#ifndef OBJECT_ATTRIBUTES_DWA2002615_HPP
+# define OBJECT_ATTRIBUTES_DWA2002615_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+# include <boost/python/proxy.hpp>
+# include <boost/python/object_core.hpp>
+# include <boost/python/object_protocol.hpp>
+
+namespace boost { namespace python { namespace api {
+
+struct const_attribute_policies
+{
+ typedef char const* key_type;
+ static object get(object const& target, char const* key);
+};
+
+struct attribute_policies : const_attribute_policies
+{
+ static object const& set(object const& target, char const* key, object const& value);
+ static void del(object const&target, char const* key);
+};
+
+//
+// implementation
+//
+template <class U>
+inline object_attribute object_operators<U>::attr(char const* name)
+{
+ object_cref2 x = *static_cast<U*>(this);
+ return object_attribute(x, name);
+}
+
+template <class U>
+inline const_object_attribute object_operators<U>::attr(char const* name) const
+{
+ object_cref2 x = *static_cast<U const*>(this);
+ return const_object_attribute(x, name);
+}
+
+inline object const_attribute_policies::get(object const& target, char const* key)
+{
+ return python::getattr(target, key);
+}
+
+inline object const& attribute_policies::set(
+ object const& target
+ , char const* key
+ , object const& value)
+{
+ python::setattr(target, key, value);
+ return value;
+}
+
+inline void attribute_policies::del(
+ object const& target
+ , char const* key)
+{
+ python::delattr(target, key);
+}
+
+}}} // namespace boost::python::api
+
+#endif // OBJECT_ATTRIBUTES_DWA2002615_HPP
diff --git a/boost/boost/python/object_call.hpp b/boost/boost/python/object_call.hpp
new file mode 100644
index 00000000000..5c4d0f2fbee
--- /dev/null
+++ b/boost/boost/python/object_call.hpp
@@ -0,0 +1,23 @@
+# if !defined(BOOST_PYTHON_SYNOPSIS)
+# // Copyright David Abrahams 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)
+
+# if !defined(BOOST_PP_IS_ITERATING)
+# error Boost.Python - do not include this file!
+# endif
+
+# define N BOOST_PP_ITERATION()
+
+ template <BOOST_PP_ENUM_PARAMS_Z(1, N, class A)>
+ typename detail::dependent<object, A0>::type
+ operator()(BOOST_PP_ENUM_BINARY_PARAMS_Z(1, N, A, const& a)) const
+ {
+ typedef typename detail::dependent<object, A0>::type obj;
+ U const& self = *static_cast<U const*>(this);
+ return call<obj>(get_managed_object(self, tag), BOOST_PP_ENUM_PARAMS_Z(1, N, a));
+ }
+
+# undef N
+# endif // BOOST_PYTHON_SYNOPSIS
diff --git a/boost/boost/python/object_core.hpp b/boost/boost/python/object_core.hpp
new file mode 100644
index 00000000000..6aa5df21462
--- /dev/null
+++ b/boost/boost/python/object_core.hpp
@@ -0,0 +1,485 @@
+// Copyright David Abrahams 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)
+#ifndef OBJECT_CORE_DWA2002615_HPP
+# define OBJECT_CORE_DWA2002615_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+# include <boost/type.hpp>
+
+# include <boost/python/call.hpp>
+# include <boost/python/handle_fwd.hpp>
+# include <boost/python/errors.hpp>
+# include <boost/python/refcount.hpp>
+# include <boost/python/detail/preprocessor.hpp>
+# include <boost/python/tag.hpp>
+# include <boost/python/def_visitor.hpp>
+
+# include <boost/python/detail/raw_pyobject.hpp>
+# include <boost/python/detail/dependent.hpp>
+
+# include <boost/python/object/forward.hpp>
+# include <boost/python/object/add_to_namespace.hpp>
+
+# include <boost/preprocessor/iterate.hpp>
+# include <boost/preprocessor/debug/line.hpp>
+
+# include <boost/python/detail/is_xxx.hpp>
+# include <boost/python/detail/string_literal.hpp>
+# include <boost/python/detail/def_helper_fwd.hpp>
+
+# include <boost/type_traits/is_same.hpp>
+# include <boost/type_traits/is_convertible.hpp>
+# include <boost/type_traits/remove_reference.hpp>
+
+# if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+# include <boost/type_traits/add_pointer.hpp>
+# endif
+
+# include <boost/mpl/if.hpp>
+
+namespace boost { namespace python {
+
+namespace converter
+{
+ template <class T> struct arg_to_python;
+}
+
+// Put this in an inner namespace so that the generalized operators won't take over
+namespace api
+{
+
+// This file contains the definition of the object class and enough to
+// construct/copy it, but not enough to do operations like
+// attribute/item access or addition.
+
+ template <class Policies> class proxy;
+
+ struct const_attribute_policies;
+ struct attribute_policies;
+ struct const_item_policies;
+ struct item_policies;
+ struct const_slice_policies;
+ struct slice_policies;
+ class slice_nil;
+
+ typedef proxy<const_attribute_policies> const_object_attribute;
+ typedef proxy<attribute_policies> object_attribute;
+ typedef proxy<const_item_policies> const_object_item;
+ typedef proxy<item_policies> object_item;
+ typedef proxy<const_slice_policies> const_object_slice;
+ typedef proxy<slice_policies> object_slice;
+
+ //
+ // is_proxy -- proxy type detection
+ //
+ BOOST_PYTHON_IS_XXX_DEF(proxy, boost::python::api::proxy, 1)
+
+ template <class T> struct object_initializer;
+
+ class object;
+ typedef PyObject* (object::*bool_type)() const;
+
+ template <class U>
+ class object_operators : public def_visitor<U>
+ {
+ protected:
+# if !defined(BOOST_MSVC) || BOOST_MSVC >= 1300
+ typedef object const& object_cref;
+# else
+ typedef object object_cref;
+# endif
+ public:
+ // function call
+ //
+ object operator()() const;
+
+# define BOOST_PP_ITERATION_PARAMS_1 (3, (1, BOOST_PYTHON_MAX_ARITY, <boost/python/object_call.hpp>))
+# include BOOST_PP_ITERATE()
+
+ // truth value testing
+ //
+ operator bool_type() const;
+ bool operator!() const; // needed for vc6
+
+ // Attribute access
+ //
+ const_object_attribute attr(char const*) const;
+ object_attribute attr(char const*);
+
+ // item access
+ //
+ const_object_item operator[](object_cref) const;
+ object_item operator[](object_cref);
+
+ template <class T>
+ const_object_item
+ operator[](T const& key) const
+# if !defined(BOOST_MSVC) || BOOST_MSVC > 1300
+ ;
+# else
+ {
+ return (*this)[object(key)];
+ }
+# endif
+
+ template <class T>
+ object_item
+ operator[](T const& key)
+# if !defined(BOOST_MSVC) || BOOST_MSVC > 1300
+ ;
+# else
+ {
+ return (*this)[object(key)];
+ }
+# endif
+
+ // slicing
+ //
+ const_object_slice slice(object_cref, object_cref) const;
+ object_slice slice(object_cref, object_cref);
+
+ const_object_slice slice(slice_nil, object_cref) const;
+ object_slice slice(slice_nil, object_cref);
+
+ const_object_slice slice(object_cref, slice_nil) const;
+ object_slice slice(object_cref, slice_nil);
+
+ const_object_slice slice(slice_nil, slice_nil) const;
+ object_slice slice(slice_nil, slice_nil);
+
+ template <class T, class V>
+ const_object_slice
+ slice(T const& start, V const& end) const
+# if !defined(BOOST_MSVC) || BOOST_MSVC > 1300
+ ;
+# else
+ {
+ return this->slice(
+ slice_bound<T>::type(start)
+ , slice_bound<V>::type(end));
+ }
+# endif
+
+ template <class T, class V>
+ object_slice
+ slice(T const& start, V const& end)
+# if !defined(BOOST_MSVC) || BOOST_MSVC > 1300
+ ;
+# else
+ {
+ return this->slice(
+ slice_bound<T>::type(start)
+ , slice_bound<V>::type(end));
+ }
+# endif
+
+ private: // def visitation for adding callable objects as class methods
+
+ template <class ClassT, class DocStringT>
+ void visit(ClassT& cl, char const* name, python::detail::def_helper<DocStringT> const& helper) const
+ {
+ // It's too late to specify anything other than docstrings if
+ // the callable object is already wrapped.
+ BOOST_STATIC_ASSERT(
+ (is_same<char const*,DocStringT>::value
+ || detail::is_string_literal<DocStringT const>::value));
+
+ objects::add_to_namespace(cl, name, this->derived_visitor(), helper.doc());
+ }
+
+ friend class python::def_visitor_access;
+
+ private:
+ // there is a confirmed CWPro8 codegen bug here. We prevent the
+ // early destruction of a temporary by binding a named object
+ // instead.
+# if __MWERKS__ < 0x3000 || __MWERKS__ > 0x3003
+ typedef object const& object_cref2;
+# else
+ typedef object const object_cref2;
+# endif
+ };
+
+
+ // VC6 and VC7 require this base class in order to generate the
+ // correct copy constructor for object. We can't define it there
+ // explicitly or it will complain of ambiguity.
+ struct object_base : object_operators<object>
+ {
+ // copy constructor without NULL checking, for efficiency.
+ inline object_base(object_base const&);
+ inline object_base(PyObject* ptr);
+
+ object_base& operator=(object_base const& rhs);
+ ~object_base();
+
+ // Underlying object access -- returns a borrowed reference
+ PyObject* ptr() const;
+
+ private:
+ PyObject* m_ptr;
+ };
+
+# ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ template <class T, class U>
+ struct is_derived_impl
+ {
+ static T x;
+ template <class X>
+ static X* to_pointer(X const&);
+
+ static char test(U const*);
+ typedef char (&no)[2];
+ static no test(...);
+
+ BOOST_STATIC_CONSTANT(bool, value = sizeof(test(to_pointer(x))) == 1);
+ };
+
+ template <class T, class U>
+ struct is_derived
+ : mpl::bool_<is_derived_impl<T,U>::value>
+ {};
+# else
+ template <class T, class U>
+ struct is_derived
+ : is_convertible<
+ typename remove_reference<T>::type*
+ , U const*
+ >
+ {};
+# endif
+
+ template <class T>
+ typename objects::unforward_cref<T>::type do_unforward_cref(T const& x)
+ {
+# if BOOST_WORKAROUND(__GNUC__, == 2)
+ typedef typename objects::unforward_cref<T>::type ret;
+ return ret(x);
+# else
+ return x;
+# endif
+ }
+
+# if BOOST_WORKAROUND(__GNUC__, == 2)
+ // GCC 2.x has non-const string literals; this hacks around that problem.
+ template <unsigned N>
+ char const (& do_unforward_cref(char const(&x)[N]) )[N]
+ {
+ return x;
+ }
+# endif
+
+ class object;
+
+ template <class T>
+ PyObject* object_base_initializer(T const& x)
+ {
+ typedef typename is_derived<
+ BOOST_DEDUCED_TYPENAME objects::unforward_cref<T>::type
+ , object
+ >::type is_obj;
+
+ return object_initializer<
+ BOOST_DEDUCED_TYPENAME unwrap_reference<T>::type
+ >::get(
+ x
+ , is_obj()
+ );
+ }
+
+ class object : public object_base
+ {
+ public:
+ // default constructor creates a None object
+ object();
+
+ // explicit conversion from any C++ object to Python
+ template <class T>
+ explicit object(
+ T const& x
+# if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ // use some SFINAE to un-confuse MSVC about its
+ // copy-initialization ambiguity claim.
+ , typename mpl::if_<is_proxy<T>,int&,int>::type* = 0
+# endif
+ )
+ : object_base(object_base_initializer(x))
+ {
+ }
+
+ // Throw error_already_set() if the handle is null.
+ BOOST_PYTHON_DECL explicit object(handle<> const&);
+ private:
+
+ public: // implementation detail -- for internal use only
+ explicit object(detail::borrowed_reference);
+ explicit object(detail::new_reference);
+ explicit object(detail::new_non_null_reference);
+ };
+
+ // Macros for forwarding constructors in classes derived from
+ // object. Derived classes will usually want these as an
+ // implementation detail
+# define BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS_(derived, base) \
+ inline explicit derived(python::detail::borrowed_reference p) \
+ : base(p) {} \
+ inline explicit derived(python::detail::new_reference p) \
+ : base(p) {} \
+ inline explicit derived(python::detail::new_non_null_reference p) \
+ : base(p) {}
+
+# if !defined(BOOST_MSVC) || BOOST_MSVC >= 1300
+# define BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS_
+# else
+ // MSVC6 has a bug which causes an explicit template constructor to
+ // be preferred over an appropriate implicit conversion operator
+ // declared on the argument type. Normally, that would cause a
+ // runtime failure when using extract<T> to extract a type with a
+ // templated constructor. This additional constructor will turn that
+ // runtime failure into an ambiguity error at compile-time due to
+ // the lack of partial ordering, or at least a link-time error if no
+ // generalized template constructor is declared.
+# define BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS(derived, base) \
+ BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS_(derived, base) \
+ template <class T> \
+ explicit derived(extract<T> const&);
+# endif
+
+ //
+ // object_initializer -- get the handle to construct the object with,
+ // based on whether T is a proxy or derived from object
+ //
+ template <bool is_proxy = false, bool is_object_manager = false>
+ struct object_initializer_impl
+ {
+ static PyObject*
+ get(object const& x, mpl::true_)
+ {
+ return python::incref(x.ptr());
+ }
+
+ template <class T>
+ static PyObject*
+ get(T const& x, mpl::false_)
+ {
+ return python::incref(converter::arg_to_python<T>(x).get());
+ }
+ };
+
+ template <>
+ struct object_initializer_impl<true, false>
+ {
+ template <class Policies>
+ static PyObject*
+ get(proxy<Policies> const& x, mpl::false_)
+ {
+ return python::incref(x.operator object().ptr());
+ }
+ };
+
+ template <>
+ struct object_initializer_impl<false, true>
+ {
+ template <class T, class U>
+ static PyObject*
+ get(T const& x, U)
+ {
+ return python::incref(get_managed_object(x, tag));
+ }
+ };
+
+ template <>
+ struct object_initializer_impl<true, true>
+ {}; // empty implementation should cause an error
+
+ template <class T>
+ struct object_initializer : object_initializer_impl<
+ is_proxy<T>::value
+ , converter::is_object_manager<T>::value
+ >
+ {};
+
+}
+using api::object;
+template <class T> struct extract;
+
+//
+// implementation
+//
+
+inline object::object()
+ : object_base(python::incref(Py_None))
+{}
+
+// copy constructor without NULL checking, for efficiency
+inline api::object_base::object_base(object_base const& rhs)
+ : m_ptr(python::incref(rhs.m_ptr))
+{}
+
+inline api::object_base::object_base(PyObject* p)
+ : m_ptr(p)
+{}
+
+inline api::object_base& api::object_base::operator=(api::object_base const& rhs)
+{
+ Py_INCREF(rhs.m_ptr);
+ Py_DECREF(this->m_ptr);
+ this->m_ptr = rhs.m_ptr;
+ return *this;
+}
+
+inline api::object_base::~object_base()
+{
+ Py_DECREF(m_ptr);
+}
+
+inline object::object(detail::borrowed_reference p)
+ : object_base(python::incref((PyObject*)p))
+{}
+
+inline object::object(detail::new_reference p)
+ : object_base(expect_non_null((PyObject*)p))
+{}
+
+inline object::object(detail::new_non_null_reference p)
+ : object_base((PyObject*)p)
+{}
+
+inline PyObject* api::object_base::ptr() const
+{
+ return m_ptr;
+}
+
+//
+// Converter specialization implementations
+//
+namespace converter
+{
+ template <class T> struct object_manager_traits;
+
+ template <>
+ struct object_manager_traits<object>
+ {
+ BOOST_STATIC_CONSTANT(bool, is_specialized = true);
+ static bool check(PyObject*) { return true; }
+
+ static python::detail::new_non_null_reference adopt(PyObject* x)
+ {
+ return python::detail::new_non_null_reference(x);
+ }
+ };
+}
+
+inline PyObject* get_managed_object(object const& x, tag_t)
+{
+ return x.ptr();
+}
+
+}} // namespace boost::python
+
+# include <boost/python/slice_nil.hpp>
+
+#endif // OBJECT_CORE_DWA2002615_HPP
diff --git a/boost/boost/python/object_fwd.hpp b/boost/boost/python/object_fwd.hpp
new file mode 100644
index 00000000000..11efcc7075f
--- /dev/null
+++ b/boost/boost/python/object_fwd.hpp
@@ -0,0 +1,18 @@
+// Copyright David Abrahams 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)
+#ifndef OBJECT_FWD_DWA2002724_HPP
+# define OBJECT_FWD_DWA2002724_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+namespace boost { namespace python {
+namespace api
+{
+ class object;
+}
+using api::object;
+}} // namespace boost::python
+
+#endif // OBJECT_FWD_DWA2002724_HPP
diff --git a/boost/boost/python/object_items.hpp b/boost/boost/python/object_items.hpp
new file mode 100644
index 00000000000..f0761dadbb6
--- /dev/null
+++ b/boost/boost/python/object_items.hpp
@@ -0,0 +1,89 @@
+// Copyright David Abrahams 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)
+#ifndef OBJECT_ITEMS_DWA2002615_HPP
+# define OBJECT_ITEMS_DWA2002615_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+# include <boost/python/proxy.hpp>
+# include <boost/python/object_core.hpp>
+# include <boost/python/object_protocol.hpp>
+
+namespace boost { namespace python { namespace api {
+
+struct const_item_policies
+{
+ typedef object key_type;
+ static object get(object const& target, object const& key);
+};
+
+struct item_policies : const_item_policies
+{
+ static object const& set(object const& target, object const& key, object const& value);
+ static void del(object const& target, object const& key);
+};
+
+//
+// implementation
+//
+template <class U>
+inline object_item
+object_operators<U>::operator[](object_cref key)
+{
+ object_cref2 x = *static_cast<U*>(this);
+ return object_item(x, key);
+}
+
+template <class U>
+inline const_object_item
+object_operators<U>::operator[](object_cref key) const
+{
+ object_cref2 x = *static_cast<U const*>(this);
+ return const_object_item(x, key);
+}
+
+# if !defined(BOOST_MSVC) || BOOST_MSVC > 1300
+template <class U>
+template <class T>
+inline const_object_item
+object_operators<U>::operator[](T const& key) const
+{
+ return (*this)[object(key)];
+}
+
+template <class U>
+template <class T>
+inline object_item
+object_operators<U>::operator[](T const& key)
+{
+ return (*this)[object(key)];
+}
+# endif
+
+
+inline object const_item_policies::get(object const& target, object const& key)
+{
+ return getitem(target, key);
+}
+
+inline object const& item_policies::set(
+ object const& target
+ , object const& key
+ , object const& value)
+{
+ setitem(target, key, value);
+ return value;
+}
+
+inline void item_policies::del(
+ object const& target
+ , object const& key)
+{
+ delitem(target, key);
+}
+
+}}} // namespace boost::python::api
+
+#endif // OBJECT_ITEMS_DWA2002615_HPP
diff --git a/boost/boost/python/object_operators.hpp b/boost/boost/python/object_operators.hpp
new file mode 100644
index 00000000000..f27f88f8a49
--- /dev/null
+++ b/boost/boost/python/object_operators.hpp
@@ -0,0 +1,132 @@
+// Copyright David Abrahams 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)
+#ifndef OBJECT_OPERATORS_DWA2002617_HPP
+# define OBJECT_OPERATORS_DWA2002617_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+# include <boost/python/object_core.hpp>
+# include <boost/python/call.hpp>
+# include <boost/iterator/detail/enable_if.hpp>
+# include <boost/mpl/bool.hpp>
+
+# include <boost/iterator/detail/config_def.hpp>
+
+namespace boost { namespace python { namespace api {
+
+template <class X>
+char is_object_operators_helper(object_operators<X> const*);
+
+typedef char (&no_type)[2];
+no_type is_object_operators_helper(...);
+
+template <class X> X* make_ptr();
+
+template <class L, class R = L>
+struct is_object_operators
+{
+ enum {
+ value
+ = (sizeof(api::is_object_operators_helper(api::make_ptr<L>()))
+ + sizeof(api::is_object_operators_helper(api::make_ptr<R>()))
+ < 4
+ )
+ };
+ typedef mpl::bool_<value> type;
+};
+
+# if !defined(BOOST_NO_SFINAE) && !defined(BOOST_NO_IS_CONVERTIBLE)
+template <class L, class R, class T>
+struct enable_binary
+ : boost::iterators::enable_if<is_object_operators<L,R>, T>
+{};
+# define BOOST_PYTHON_BINARY_RETURN(T) typename enable_binary<L,R,T>::type
+# else
+# define BOOST_PYTHON_BINARY_RETURN(T) T
+# endif
+
+template <class U>
+object object_operators<U>::operator()() const
+{
+ object_cref2 f = *static_cast<U const*>(this);
+ return call<object>(f.ptr());
+}
+
+
+template <class U>
+inline
+object_operators<U>::operator bool_type() const
+{
+ object_cref2 x = *static_cast<U const*>(this);
+ return PyObject_IsTrue(x.ptr()) ? &object::ptr : 0;
+}
+
+template <class U>
+inline bool
+object_operators<U>::operator!() const
+{
+ object_cref2 x = *static_cast<U const*>(this);
+ return !PyObject_IsTrue(x.ptr());
+}
+
+# define BOOST_PYTHON_COMPARE_OP(op, opid) \
+template <class L, class R> \
+BOOST_PYTHON_BINARY_RETURN(object) operator op(L const& l, R const& r) \
+{ \
+ return PyObject_RichCompare( \
+ object(l).ptr(), object(r).ptr(), opid); \
+}
+# undef BOOST_PYTHON_COMPARE_OP
+
+# define BOOST_PYTHON_BINARY_OPERATOR(op) \
+BOOST_PYTHON_DECL object operator op(object const& l, object const& r); \
+template <class L, class R> \
+BOOST_PYTHON_BINARY_RETURN(object) operator op(L const& l, R const& r) \
+{ \
+ return object(l) op object(r); \
+}
+BOOST_PYTHON_BINARY_OPERATOR(>)
+BOOST_PYTHON_BINARY_OPERATOR(>=)
+BOOST_PYTHON_BINARY_OPERATOR(<)
+BOOST_PYTHON_BINARY_OPERATOR(<=)
+BOOST_PYTHON_BINARY_OPERATOR(==)
+BOOST_PYTHON_BINARY_OPERATOR(!=)
+BOOST_PYTHON_BINARY_OPERATOR(+)
+BOOST_PYTHON_BINARY_OPERATOR(-)
+BOOST_PYTHON_BINARY_OPERATOR(*)
+BOOST_PYTHON_BINARY_OPERATOR(/)
+BOOST_PYTHON_BINARY_OPERATOR(%)
+BOOST_PYTHON_BINARY_OPERATOR(<<)
+BOOST_PYTHON_BINARY_OPERATOR(>>)
+BOOST_PYTHON_BINARY_OPERATOR(&)
+BOOST_PYTHON_BINARY_OPERATOR(^)
+BOOST_PYTHON_BINARY_OPERATOR(|)
+# undef BOOST_PYTHON_BINARY_OPERATOR
+
+
+# define BOOST_PYTHON_INPLACE_OPERATOR(op) \
+BOOST_PYTHON_DECL object& operator op(object& l, object const& r); \
+template <class R> \
+object& operator op(object& l, R const& r) \
+{ \
+ return l op object(r); \
+}
+BOOST_PYTHON_INPLACE_OPERATOR(+=)
+BOOST_PYTHON_INPLACE_OPERATOR(-=)
+BOOST_PYTHON_INPLACE_OPERATOR(*=)
+BOOST_PYTHON_INPLACE_OPERATOR(/=)
+BOOST_PYTHON_INPLACE_OPERATOR(%=)
+BOOST_PYTHON_INPLACE_OPERATOR(<<=)
+BOOST_PYTHON_INPLACE_OPERATOR(>>=)
+BOOST_PYTHON_INPLACE_OPERATOR(&=)
+BOOST_PYTHON_INPLACE_OPERATOR(^=)
+BOOST_PYTHON_INPLACE_OPERATOR(|=)
+# undef BOOST_PYTHON_INPLACE_OPERATOR
+
+}}} // namespace boost::python
+
+#include <boost/iterator/detail/config_undef.hpp>
+
+#endif // OBJECT_OPERATORS_DWA2002617_HPP
diff --git a/boost/boost/python/object_protocol.hpp b/boost/boost/python/object_protocol.hpp
new file mode 100644
index 00000000000..2011b04a6fa
--- /dev/null
+++ b/boost/boost/python/object_protocol.hpp
@@ -0,0 +1,79 @@
+// Copyright David Abrahams 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)
+#ifndef OBJECT_PROTOCOL_DWA2002615_HPP
+# define OBJECT_PROTOCOL_DWA2002615_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+# include <boost/python/object_protocol_core.hpp>
+# include <boost/python/object_core.hpp>
+
+namespace boost { namespace python { namespace api {
+
+template <class Target, class Key>
+object getattr(Target const& target, Key const& key)
+{
+ return getattr(object(target), object(key));
+}
+
+template <class Target, class Key, class Default>
+object getattr(Target const& target, Key const& key, Default const& default_)
+{
+ return getattr(object(target), object(key), object(default_));
+}
+
+
+template <class Key, class Value>
+void setattr(object const& target, Key const& key, Value const& value)
+{
+ setattr(target, object(key), object(value));
+}
+
+template <class Key>
+void delattr(object const& target, Key const& key)
+{
+ delattr(target, object(key));
+}
+
+template <class Target, class Key>
+object getitem(Target const& target, Key const& key)
+{
+ return getitem(object(target), object(key));
+}
+
+
+template <class Key, class Value>
+void setitem(object const& target, Key const& key, Value const& value)
+{
+ setitem(target, object(key), object(value));
+}
+
+template <class Key>
+void delitem(object const& target, Key const& key)
+{
+ delitem(target, object(key));
+}
+
+template <class Target, class Begin, class End>
+object getslice(Target const& target, Begin const& begin, End const& end)
+{
+ return getslice(object(target), object(begin), object(end));
+}
+
+template <class Begin, class End, class Value>
+void setslice(object const& target, Begin const& begin, End const& end, Value const& value)
+{
+ setslice(target, object(begin), object(end), object(value));
+}
+
+template <class Begin, class End>
+void delslice(object const& target, Begin const& begin, End const& end)
+{
+ delslice(target, object(begin), object(end));
+}
+
+}}} // namespace boost::python::api
+
+#endif // OBJECT_PROTOCOL_DWA2002615_HPP
diff --git a/boost/boost/python/object_protocol_core.hpp b/boost/boost/python/object_protocol_core.hpp
new file mode 100644
index 00000000000..a5bd9afcb46
--- /dev/null
+++ b/boost/boost/python/object_protocol_core.hpp
@@ -0,0 +1,53 @@
+// Copyright David Abrahams 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)
+#ifndef OBJECT_PROTOCOL_CORE_DWA2002615_HPP
+# define OBJECT_PROTOCOL_CORE_DWA2002615_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+# include <boost/python/handle_fwd.hpp>
+
+namespace boost { namespace python {
+
+namespace api
+{
+ class object;
+
+ BOOST_PYTHON_DECL object getattr(object const& target, object const& key);
+ BOOST_PYTHON_DECL object getattr(object const& target, object const& key, object const& default_);
+ BOOST_PYTHON_DECL void setattr(object const& target, object const& key, object const& value);
+ BOOST_PYTHON_DECL void delattr(object const& target, object const& key);
+
+ // These are defined for efficiency, since attributes are commonly
+ // accessed through literal strings.
+ BOOST_PYTHON_DECL object getattr(object const& target, char const* key);
+ BOOST_PYTHON_DECL object getattr(object const& target, char const* key, object const& default_);
+ BOOST_PYTHON_DECL void setattr(object const& target, char const* key, object const& value);
+ BOOST_PYTHON_DECL void delattr(object const& target, char const* key);
+
+ BOOST_PYTHON_DECL object getitem(object const& target, object const& key);
+ BOOST_PYTHON_DECL void setitem(object const& target, object const& key, object const& value);
+ BOOST_PYTHON_DECL void delitem(object const& target, object const& key);
+
+ BOOST_PYTHON_DECL object getslice(object const& target, handle<> const& begin, handle<> const& end);
+ BOOST_PYTHON_DECL void setslice(object const& target, handle<> const& begin, handle<> const& end, object const& value);
+ BOOST_PYTHON_DECL void delslice(object const& target, handle<> const& begin, handle<> const& end);
+}
+
+using api::getattr;
+using api::setattr;
+using api::delattr;
+
+using api::getitem;
+using api::setitem;
+using api::delitem;
+
+using api::getslice;
+using api::setslice;
+using api::delslice;
+
+}} // namespace boost::python
+
+#endif // OBJECT_PROTOCOL_CORE_DWA2002615_HPP
diff --git a/boost/boost/python/object_slices.hpp b/boost/boost/python/object_slices.hpp
new file mode 100644
index 00000000000..e70faff7a47
--- /dev/null
+++ b/boost/boost/python/object_slices.hpp
@@ -0,0 +1,142 @@
+// Copyright David Abrahams 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)
+#ifndef OBJECT_SLICES_DWA2002615_HPP
+# define OBJECT_SLICES_DWA2002615_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+# include <boost/python/proxy.hpp>
+# include <boost/python/object_core.hpp>
+# include <boost/python/object_protocol.hpp>
+# include <boost/python/handle.hpp>
+# include <utility>
+
+namespace boost { namespace python { namespace api {
+
+struct const_slice_policies
+{
+ typedef std::pair<handle<>, handle<> > key_type;
+ static object get(object const& target, key_type const& key);
+};
+
+struct slice_policies : const_slice_policies
+{
+ static object const& set(object const& target, key_type const& key, object const& value);
+ static void del(object const& target, key_type const& key);
+};
+
+//
+// implementation
+//
+template <class U>
+object_slice
+object_operators<U>::slice(object_cref start, object_cref finish)
+{
+ object_cref2 x = *static_cast<U*>(this);
+ return object_slice(x, std::make_pair(borrowed(start.ptr()), borrowed(finish.ptr())));
+}
+
+template <class U>
+const_object_slice
+object_operators<U>::slice(object_cref start, object_cref finish) const
+{
+ object_cref2 x = *static_cast<U const*>(this);
+ return const_object_slice(x, std::make_pair(borrowed(start.ptr()), borrowed(finish.ptr())));
+}
+
+template <class U>
+object_slice
+object_operators<U>::slice(slice_nil, object_cref finish)
+{
+ object_cref2 x = *static_cast<U*>(this);
+ return object_slice(x, std::make_pair(allow_null((PyObject*)0), borrowed(finish.ptr())));
+}
+
+template <class U>
+const_object_slice
+object_operators<U>::slice(slice_nil, object_cref finish) const
+{
+ object_cref2 x = *static_cast<U const*>(this);
+ return const_object_slice(x, std::make_pair(allow_null((PyObject*)0), borrowed(finish.ptr())));
+}
+
+template <class U>
+object_slice
+object_operators<U>::slice(slice_nil, slice_nil)
+{
+ object_cref2 x = *static_cast<U*>(this);
+ return object_slice(x, std::make_pair(allow_null((PyObject*)0), allow_null((PyObject*)0)));
+}
+
+template <class U>
+const_object_slice
+object_operators<U>::slice(slice_nil, slice_nil) const
+{
+ object_cref2 x = *static_cast<U const*>(this);
+ return const_object_slice(x, std::make_pair(allow_null((PyObject*)0), allow_null((PyObject*)0)));
+}
+
+template <class U>
+object_slice
+object_operators<U>::slice(object_cref start, slice_nil)
+{
+ object_cref2 x = *static_cast<U*>(this);
+ return object_slice(x, std::make_pair(borrowed(start.ptr()), allow_null((PyObject*)0)));
+}
+
+template <class U>
+const_object_slice
+object_operators<U>::slice(object_cref start, slice_nil) const
+{
+ object_cref2 x = *static_cast<U const*>(this);
+ return const_object_slice(x, std::make_pair(borrowed(start.ptr()), allow_null((PyObject*)0)));
+}
+# if !defined(BOOST_MSVC) || BOOST_MSVC > 1300
+template <class U>
+template <class T, class V>
+inline const_object_slice
+object_operators<U>::slice(T const& start, V const& end) const
+{
+ return this->slice(
+ typename slice_bound<T>::type(start)
+ , typename slice_bound<V>::type(end));
+}
+
+template <class U>
+template <class T, class V>
+inline object_slice
+object_operators<U>::slice(T const& start, V const& end)
+{
+ return this->slice(
+ typename slice_bound<T>::type(start)
+ , typename slice_bound<V>::type(end));
+}
+# endif
+
+
+inline object const_slice_policies::get(object const& target, key_type const& key)
+{
+ return getslice(target, key.first, key.second);
+}
+
+inline object const& slice_policies::set(
+ object const& target
+ , key_type const& key
+ , object const& value)
+{
+ setslice(target, key.first, key.second, value);
+ return value;
+}
+
+inline void slice_policies::del(
+ object const& target
+ , key_type const& key)
+{
+ delslice(target, key.first, key.second);
+}
+
+}}} // namespace boost::python::api
+
+#endif // OBJECT_SLICES_DWA2002615_HPP
diff --git a/boost/boost/python/opaque_pointer_converter.hpp b/boost/boost/python/opaque_pointer_converter.hpp
new file mode 100644
index 00000000000..83c76433eb0
--- /dev/null
+++ b/boost/boost/python/opaque_pointer_converter.hpp
@@ -0,0 +1,192 @@
+// Copyright Gottfried Ganßauge 2003..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)
+/*
+ * Generic Conversion of opaque C++-pointers to a Python-Wrapper.
+ */
+# ifndef OPAQUE_POINTER_CONVERTER_HPP_
+# define OPAQUE_POINTER_CONVERTER_HPP_
+
+# include <boost/python/detail/prefix.hpp>
+# include <boost/python/lvalue_from_pytype.hpp>
+# include <boost/python/to_python_converter.hpp>
+# include <boost/python/converter/registrations.hpp>
+# include <boost/python/detail/dealloc.hpp>
+# include <boost/python/detail/none.hpp>
+# include <boost/python/type_id.hpp>
+# include <boost/python/errors.hpp>
+
+# include <boost/type_traits/remove_pointer.hpp>
+# include <boost/type_traits/is_pointer.hpp>
+# include <boost/type_traits/is_void.hpp>
+
+# include <boost/implicit_cast.hpp>
+
+# include <boost/mpl/eval_if.hpp>
+# include <boost/mpl/identity.hpp>
+# include <boost/mpl/assert.hpp>
+
+// opaque --
+//
+// registers to- and from- python conversions for a type Pointee.
+//
+// Note:
+// In addition you need to define specializations for type_id
+// on the type pointed to by Pointer using
+// BOOST_PYTHON_OPAQUE_SPECIALIZED_TYPE_ID(Pointee)
+//
+// For an example see libs/python/test/opaque.cpp
+//
+namespace boost { namespace python {
+
+template <class Pointee>
+struct opaque
+{
+ opaque()
+ {
+ if (type_object.tp_name == 0)
+ {
+ type_object.tp_name = const_cast<char*>(type_id<Pointee*>().name());
+ if (PyType_Ready (&type_object) < 0)
+ {
+ throw error_already_set();
+ }
+
+ this->register_self();
+ }
+ }
+
+ static opaque instance;
+private:
+
+ static void* extract(PyObject* op)
+ {
+ return PyObject_TypeCheck(op, &type_object)
+ ? static_cast<python_instance*>(implicit_cast<void*>(op))->x
+ : 0
+ ;
+ }
+
+ static PyObject* wrap(void const* px)
+ {
+ Pointee* x = *static_cast<Pointee*const*>(px);
+
+ if (x == 0)
+ return detail::none();
+
+ if ( python_instance *o = PyObject_New(python_instance, &type_object) )
+ {
+ o->x = x;
+ return static_cast<PyObject*>(implicit_cast<void*>(o));
+ }
+ else
+ {
+ throw error_already_set();
+ }
+ }
+
+ void register_self()
+ {
+ converter::registration const *existing =
+ converter::registry::query (type_id<Pointee*>());
+
+ if ((existing == 0) || (existing->m_to_python == 0))
+ {
+ converter::registry::insert(&extract, type_id<Pointee>());
+ converter::registry::insert(&wrap, type_id<Pointee*>());
+ }
+ }
+
+ struct python_instance
+ {
+ PyObject_HEAD
+ Pointee* x;
+ };
+
+ static PyTypeObject type_object;
+};
+
+template <class Pointee>
+opaque<Pointee> opaque<Pointee>::instance;
+
+template <class Pointee>
+PyTypeObject opaque<Pointee>::type_object =
+{
+ PyObject_HEAD_INIT(0)
+ 0,
+ 0,
+ sizeof( BOOST_DEDUCED_TYPENAME opaque<Pointee>::python_instance ),
+ 0,
+ ::boost::python::detail::dealloc,
+ 0, /* tp_print */
+ 0, /* tp_getattr */
+ 0, /* tp_setattr */
+ 0, /* tp_compare */
+ 0, /* tp_repr */
+ 0, /* tp_as_number */
+ 0, /* tp_as_sequence */
+ 0, /* tp_as_mapping */
+ 0, /* tp_hash */
+ 0, /* tp_call */
+ 0, /* tp_str */
+ 0, /* tp_getattro */
+ 0, /* tp_setattro */
+ 0, /* tp_as_buffer */
+ 0, /* tp_flags */
+ 0, /* tp_doc */
+ 0, /* tp_traverse */
+ 0, /* tp_clear */
+ 0, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ 0, /* tp_methods */
+ 0, /* tp_members */
+ 0, /* tp_getset */
+ 0, /* tp_base */
+ 0, /* tp_dict */
+ 0, /* tp_descr_get */
+ 0, /* tp_descr_set */
+ 0, /* tp_dictoffset */
+ 0, /* tp_init */
+ 0, /* tp_alloc */
+ 0, /* tp_new */
+ 0, /* tp_free */
+ 0, /* tp_is_gc */
+ 0, /* tp_bases */
+ 0, /* tp_mro */
+ 0, /* tp_cache */
+ 0, /* tp_subclasses */
+ 0, /* tp_weaklist */
+#if PYTHON_API_VERSION >= 1012
+ 0 /* tp_del */
+#endif
+};
+}} // namespace boost::python
+
+# if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+
+# define BOOST_PYTHON_OPAQUE_SPECIALIZED_TYPE_ID(Pointee)
+
+# else
+
+// If you change the below, don't forget to alter the end of type_id.hpp
+# define BOOST_PYTHON_OPAQUE_SPECIALIZED_TYPE_ID(Pointee) \
+ namespace boost { namespace python { \
+ template<> \
+ inline type_info type_id<Pointee>(BOOST_PYTHON_EXPLICIT_TT_DEF(Pointee)) \
+ { \
+ return type_info (typeid (Pointee *)); \
+ } \
+ template<> \
+ inline type_info type_id<const volatile Pointee&>( \
+ BOOST_PYTHON_EXPLICIT_TT_DEF(const volatile Pointee&)) \
+ { \
+ return type_info (typeid (Pointee *)); \
+ } \
+ }}
+
+# endif
+
+# endif // OPAQUE_POINTER_CONVERTER_HPP_
diff --git a/boost/boost/python/operators.hpp b/boost/boost/python/operators.hpp
new file mode 100644
index 00000000000..41f24d284ae
--- /dev/null
+++ b/boost/boost/python/operators.hpp
@@ -0,0 +1,364 @@
+// Copyright David Abrahams 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)
+#ifndef OPERATORS_DWA2002530_HPP
+# define OPERATORS_DWA2002530_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+# include <boost/python/def_visitor.hpp>
+# include <boost/python/converter/arg_to_python.hpp>
+# include <boost/python/detail/operator_id.hpp>
+# include <boost/python/detail/not_specified.hpp>
+# include <boost/python/back_reference.hpp>
+# include <boost/mpl/if.hpp>
+# include <boost/mpl/eval_if.hpp>
+# include <boost/python/self.hpp>
+# include <boost/python/other.hpp>
+# include <boost/lexical_cast.hpp>
+# include <boost/python/refcount.hpp>
+# include <boost/python/detail/unwrap_wrapper.hpp>
+# include <string>
+# include <complex>
+
+namespace boost { namespace python {
+
+namespace detail
+{
+ // This is essentially the old v1 to_python(). It will be eliminated
+ // once the public interface for to_python is settled on.
+ template <class T>
+ PyObject* convert_result(T const& x)
+ {
+ return converter::arg_to_python<T>(x).release();
+ }
+
+ // Operator implementation template declarations. The nested apply
+ // declaration here keeps MSVC6 happy.
+ template <operator_id> struct operator_l
+ {
+ template <class L, class R> struct apply;
+ };
+
+ template <operator_id> struct operator_r
+ {
+ template <class L, class R> struct apply;
+ };
+
+ template <operator_id> struct operator_1
+ {
+ template <class T> struct apply;
+ };
+
+ // MSVC6 doesn't want us to do this sort of inheritance on a nested
+ // class template, so we use this layer of indirection to avoid
+ // ::template<...> on the nested apply functions below
+ template <operator_id id, class L, class R>
+ struct operator_l_inner
+ : operator_l<id>::template apply<L,R>
+ {};
+
+ template <operator_id id, class L, class R>
+ struct operator_r_inner
+ : operator_r<id>::template apply<L,R>
+ {};
+
+ template <operator_id id, class T>
+ struct operator_1_inner
+ : operator_1<id>::template apply<T>
+ {};
+
+ // Define three different binary_op templates which take care of
+ // these cases:
+ // self op self
+ // self op R
+ // L op self
+ //
+ // The inner apply metafunction is used to adjust the operator to
+ // the class type being defined. Inheritance of the outer class is
+ // simply used to provide convenient access to the operation's
+ // name().
+
+ // self op self
+ template <operator_id id>
+ struct binary_op : operator_l<id>
+ {
+ template <class T>
+ struct apply : operator_l_inner<id,T,T>
+ {
+ };
+ };
+
+ // self op R
+ template <operator_id id, class R>
+ struct binary_op_l : operator_l<id>
+ {
+ template <class T>
+ struct apply : operator_l_inner<id,T,R>
+ {
+ };
+ };
+
+ // L op self
+ template <operator_id id, class L>
+ struct binary_op_r : operator_r<id>
+ {
+ template <class T>
+ struct apply : operator_r_inner<id,L,T>
+ {
+ };
+ };
+
+ template <operator_id id>
+ struct unary_op : operator_1<id>
+ {
+ template <class T>
+ struct apply : operator_1_inner<id,T>
+ {
+ };
+ };
+
+ // This type is what actually gets returned from operators used on
+ // self_t
+ template <operator_id id, class L = not_specified, class R = not_specified>
+ struct operator_
+ : def_visitor<operator_<id,L,R> >
+ {
+ private:
+ template <class ClassT>
+ void visit(ClassT& cl) const
+ {
+ typedef typename mpl::eval_if<
+ is_same<L,self_t>
+ , mpl::if_<
+ is_same<R,self_t>
+ , binary_op<id>
+ , binary_op_l<
+ id
+ , BOOST_DEDUCED_TYPENAME unwrap_other<R>::type
+ >
+ >
+ , mpl::if_<
+ is_same<L,not_specified>
+ , unary_op<id>
+ , binary_op_r<
+ id
+ , BOOST_DEDUCED_TYPENAME unwrap_other<L>::type
+ >
+ >
+ >::type generator;
+
+ cl.def(
+ generator::name()
+ , &generator::template apply<
+ BOOST_DEDUCED_TYPENAME ClassT::wrapped_type
+ >::execute
+ );
+ }
+
+ friend class python::def_visitor_access;
+ };
+}
+
+# define BOOST_PYTHON_BINARY_OPERATION(id, rid, expr) \
+namespace detail \
+{ \
+ template <> \
+ struct operator_l<op_##id> \
+ { \
+ template <class L, class R> \
+ struct apply \
+ { \
+ typedef typename unwrap_wrapper_<L>::type lhs; \
+ typedef typename unwrap_wrapper_<R>::type rhs; \
+ static PyObject* execute(lhs& l, rhs const& r) \
+ { \
+ return detail::convert_result(expr); \
+ } \
+ }; \
+ static char const* name() { return "__" #id "__"; } \
+ }; \
+ \
+ template <> \
+ struct operator_r<op_##id> \
+ { \
+ template <class L, class R> \
+ struct apply \
+ { \
+ typedef typename unwrap_wrapper_<L>::type lhs; \
+ typedef typename unwrap_wrapper_<R>::type rhs; \
+ static PyObject* execute(rhs& r, lhs const& l) \
+ { \
+ return detail::convert_result(expr); \
+ } \
+ }; \
+ static char const* name() { return "__" #rid "__"; } \
+ }; \
+}
+
+# define BOOST_PYTHON_BINARY_OPERATOR(id, rid, op) \
+BOOST_PYTHON_BINARY_OPERATION(id, rid, l op r) \
+namespace self_ns \
+{ \
+ template <class L, class R> \
+ inline detail::operator_<detail::op_##id,L,R> \
+ operator op(L const&, R const&) \
+ { \
+ return detail::operator_<detail::op_##id,L,R>(); \
+ } \
+}
+
+BOOST_PYTHON_BINARY_OPERATOR(add, radd, +)
+BOOST_PYTHON_BINARY_OPERATOR(sub, rsub, -)
+BOOST_PYTHON_BINARY_OPERATOR(mul, rmul, *)
+BOOST_PYTHON_BINARY_OPERATOR(div, rdiv, /)
+BOOST_PYTHON_BINARY_OPERATOR(mod, rmod, %)
+BOOST_PYTHON_BINARY_OPERATOR(lshift, rlshift, <<)
+BOOST_PYTHON_BINARY_OPERATOR(rshift, rrshift, >>)
+BOOST_PYTHON_BINARY_OPERATOR(and, rand, &)
+BOOST_PYTHON_BINARY_OPERATOR(xor, rxor, ^)
+BOOST_PYTHON_BINARY_OPERATOR(or, ror, |)
+BOOST_PYTHON_BINARY_OPERATOR(gt, lt, >)
+BOOST_PYTHON_BINARY_OPERATOR(ge, le, >=)
+BOOST_PYTHON_BINARY_OPERATOR(lt, gt, <)
+BOOST_PYTHON_BINARY_OPERATOR(le, ge, <=)
+BOOST_PYTHON_BINARY_OPERATOR(eq, eq, ==)
+BOOST_PYTHON_BINARY_OPERATOR(ne, ne, !=)
+# undef BOOST_PYTHON_BINARY_OPERATOR
+
+// pow isn't an operator in C++; handle it specially.
+BOOST_PYTHON_BINARY_OPERATION(pow, rpow, pow(l,r))
+# undef BOOST_PYTHON_BINARY_OPERATION
+
+namespace self_ns
+{
+# ifndef BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
+ template <class L, class R>
+ inline detail::operator_<detail::op_pow,L,R>
+ pow(L const&, R const&)
+ {
+ return detail::operator_<detail::op_pow,L,R>();
+ }
+# else
+ // When there's no argument-dependent lookup, we need these
+ // overloads to handle the case when everything is imported into the
+ // global namespace. Note that the plain overload below does /not/
+ // take const& arguments. This is needed by MSVC6 at least, or it
+ // complains of ambiguities, since there's no partial ordering.
+ inline detail::operator_<detail::op_pow,self_t,self_t>
+ pow(self_t, self_t)
+ {
+ return detail::operator_<detail::op_pow,self_t,self_t>();
+ }
+ template <class R>
+ inline detail::operator_<detail::op_pow,self_t,R>
+ pow(self_t const&, R const&)
+ {
+ return detail::operator_<detail::op_pow,self_t,R>();
+ }
+ template <class L>
+ inline detail::operator_<detail::op_pow,L,self_t>
+ pow(L const&, self_t const&)
+ {
+ return detail::operator_<detail::op_pow,L,self_t>();
+ }
+# endif
+}
+
+
+# define BOOST_PYTHON_INPLACE_OPERATOR(id, op) \
+namespace detail \
+{ \
+ template <> \
+ struct operator_l<op_##id> \
+ { \
+ template <class L, class R> \
+ struct apply \
+ { \
+ typedef typename unwrap_wrapper_<L>::type lhs; \
+ typedef typename unwrap_wrapper_<R>::type rhs; \
+ static PyObject* \
+ execute(back_reference<lhs&> l, rhs const& r) \
+ { \
+ l.get() op r; \
+ return python::incref(l.source().ptr()); \
+ } \
+ }; \
+ static char const* name() { return "__" #id "__"; } \
+ }; \
+} \
+namespace self_ns \
+{ \
+ template <class R> \
+ inline detail::operator_<detail::op_##id,self_t,R> \
+ operator op(self_t const&, R const&) \
+ { \
+ return detail::operator_<detail::op_##id,self_t,R>(); \
+ } \
+}
+
+BOOST_PYTHON_INPLACE_OPERATOR(iadd,+=)
+BOOST_PYTHON_INPLACE_OPERATOR(isub,-=)
+BOOST_PYTHON_INPLACE_OPERATOR(imul,*=)
+BOOST_PYTHON_INPLACE_OPERATOR(idiv,/=)
+BOOST_PYTHON_INPLACE_OPERATOR(imod,%=)
+BOOST_PYTHON_INPLACE_OPERATOR(ilshift,<<=)
+BOOST_PYTHON_INPLACE_OPERATOR(irshift,>>=)
+BOOST_PYTHON_INPLACE_OPERATOR(iand,&=)
+BOOST_PYTHON_INPLACE_OPERATOR(ixor,^=)
+BOOST_PYTHON_INPLACE_OPERATOR(ior,|=)
+
+# define BOOST_PYTHON_UNARY_OPERATOR(id, op, func_name) \
+namespace detail \
+{ \
+ template <> \
+ struct operator_1<op_##id> \
+ { \
+ template <class T> \
+ struct apply \
+ { \
+ typedef typename unwrap_wrapper_<T>::type self_t; \
+ static PyObject* execute(self_t& x) \
+ { \
+ return detail::convert_result(op(x)); \
+ } \
+ }; \
+ static char const* name() { return "__" #id "__"; } \
+ }; \
+} \
+namespace self_ns \
+{ \
+ inline detail::operator_<detail::op_##id> \
+ func_name(self_t const&) \
+ { \
+ return detail::operator_<detail::op_##id>(); \
+ } \
+}
+# undef BOOST_PYTHON_INPLACE_OPERATOR
+
+BOOST_PYTHON_UNARY_OPERATOR(neg, -, operator-)
+BOOST_PYTHON_UNARY_OPERATOR(pos, +, operator+)
+BOOST_PYTHON_UNARY_OPERATOR(abs, abs, abs)
+BOOST_PYTHON_UNARY_OPERATOR(invert, ~, operator~)
+BOOST_PYTHON_UNARY_OPERATOR(nonzero, !!, operator!)
+BOOST_PYTHON_UNARY_OPERATOR(int, long, int_)
+BOOST_PYTHON_UNARY_OPERATOR(long, PyLong_FromLong, long_)
+BOOST_PYTHON_UNARY_OPERATOR(float, double, float_)
+BOOST_PYTHON_UNARY_OPERATOR(complex, std::complex<double>, complex_)
+BOOST_PYTHON_UNARY_OPERATOR(str, lexical_cast<std::string>, str)
+# undef BOOST_PYTHON_UNARY_OPERATOR
+
+}} // namespace boost::python
+
+# ifdef BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
+using boost::python::self_ns::abs;
+using boost::python::self_ns::int_;
+using boost::python::self_ns::long_;
+using boost::python::self_ns::float_;
+using boost::python::self_ns::complex_;
+using boost::python::self_ns::str;
+using boost::python::self_ns::pow;
+# endif
+
+#endif // OPERATORS_DWA2002530_HPP
diff --git a/boost/boost/python/other.hpp b/boost/boost/python/other.hpp
new file mode 100644
index 00000000000..eeece99b7d2
--- /dev/null
+++ b/boost/boost/python/other.hpp
@@ -0,0 +1,114 @@
+#ifndef OTHER_DWA20020601_HPP
+# define OTHER_DWA20020601_HPP
+
+# include <boost/python/detail/prefix.hpp>
+// Copyright David Abrahams 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)
+
+# if _MSC_VER+0 >= 1020
+# pragma once
+# endif
+
+# include <boost/config.hpp>
+
+namespace boost { namespace python {
+
+template<class T> struct other
+{
+ typedef T type;
+};
+
+# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+namespace detail
+{
+ template<typename T>
+ class is_other
+ {
+ public:
+ BOOST_STATIC_CONSTANT(bool, value = false);
+ };
+
+ template<typename T>
+ class is_other<other<T> >
+ {
+ public:
+ BOOST_STATIC_CONSTANT(bool, value = true);
+ };
+
+ template<typename T>
+ class unwrap_other
+ {
+ public:
+ typedef T type;
+ };
+
+ template<typename T>
+ class unwrap_other<other<T> >
+ {
+ public:
+ typedef T type;
+ };
+}
+# else // no partial specialization
+
+}} // namespace boost::python
+
+#include <boost/type.hpp>
+
+namespace boost { namespace python {
+
+namespace detail
+{
+ typedef char (&yes_other_t)[1];
+ typedef char (&no_other_t)[2];
+
+ no_other_t is_other_test(...);
+
+ template<typename T>
+ yes_other_t is_other_test(type< other<T> >);
+
+ template<bool wrapped>
+ struct other_unwrapper
+ {
+ template <class T>
+ struct apply
+ {
+ typedef T type;
+ };
+ };
+
+ template<>
+ struct other_unwrapper<true>
+ {
+ template <class T>
+ struct apply
+ {
+ typedef typename T::type type;
+ };
+ };
+
+ template<typename T>
+ class is_other
+ {
+ public:
+ BOOST_STATIC_CONSTANT(
+ bool, value = (
+ sizeof(detail::is_other_test(type<T>()))
+ == sizeof(detail::yes_other_t)));
+ };
+
+ template <typename T>
+ class unwrap_other
+ : public detail::other_unwrapper<
+ is_other<T>::value
+ >::template apply<T>
+ {};
+}
+
+# endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+}} // namespace boost::python
+
+#endif // #ifndef OTHER_DWA20020601_HPP
diff --git a/boost/boost/python/overloads.hpp b/boost/boost/python/overloads.hpp
new file mode 100644
index 00000000000..e60dc1798e9
--- /dev/null
+++ b/boost/boost/python/overloads.hpp
@@ -0,0 +1,13 @@
+// Copyright David Abrahams 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)
+#ifndef OVERLOADS_DWA2002101_HPP
+# define OVERLOADS_DWA2002101_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+# include <boost/python/detail/overloads_fwd.hpp>
+# include <boost/python/detail/defaults_def.hpp>
+
+#endif // OVERLOADS_DWA2002101_HPP
diff --git a/boost/boost/python/override.hpp b/boost/boost/python/override.hpp
new file mode 100644
index 00000000000..d5a95b838b2
--- /dev/null
+++ b/boost/boost/python/override.hpp
@@ -0,0 +1,144 @@
+#if !defined(BOOST_PP_IS_ITERATING)
+
+// Copyright David Abrahams 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)
+#ifndef OVERRIDE_DWA2004721_HPP
+# define OVERRIDE_DWA2004721_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+# include <boost/python/converter/return_from_python.hpp>
+
+# include <boost/python/extract.hpp>
+# include <boost/python/handle.hpp>
+
+# include <boost/preprocessor/iterate.hpp>
+# include <boost/preprocessor/repeat.hpp>
+# include <boost/preprocessor/debug/line.hpp>
+# include <boost/preprocessor/repetition/enum_params.hpp>
+# include <boost/preprocessor/repetition/enum_binary_params.hpp>
+
+# include <boost/type.hpp>
+
+namespace boost { namespace python {
+
+class override;
+
+namespace detail
+{
+ class wrapper_base;
+
+ // The result of calling a method.
+ class method_result
+ {
+ private:
+ friend class boost::python::override;
+ explicit method_result(PyObject* x)
+ : m_obj(x)
+ {}
+
+ public:
+ template <class T>
+ operator T()
+ {
+ converter::return_from_python<T> converter;
+ return converter(m_obj.release());
+ }
+
+# if BOOST_WORKAROUND(_MSC_FULL_VER, BOOST_TESTED_AT(140050215))
+ template <class T>
+ operator T*()
+ {
+ converter::return_from_python<T*> converter;
+ return converter(m_obj.release());
+ }
+# endif
+
+# if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) || BOOST_WORKAROUND(BOOST_INTEL_WIN, >= 900)
+ // No operator T&
+# else
+
+ template <class T>
+ operator T&() const
+ {
+ converter::return_from_python<T&> converter;
+ return converter(const_cast<handle<>&>(m_obj).release());
+ }
+# endif
+
+ template <class T>
+ T as(type<T>* = 0)
+ {
+ converter::return_from_python<T> converter;
+ return converter(m_obj.release());
+ }
+
+ template <class T>
+ T unchecked(type<T>* = 0)
+ {
+ return extract<T>(m_obj)();
+ }
+ private:
+ mutable handle<> m_obj;
+ };
+}
+
+class override : public object
+{
+ private:
+ friend class detail::wrapper_base;
+ override(handle<> x)
+ : object(x)
+ {}
+
+ public:
+ detail::method_result
+ operator()() const
+ {
+ detail::method_result x(
+ PyEval_CallFunction(
+ this->ptr()
+ , const_cast<char*>("()")
+ ));
+ return x;
+ }
+
+# define BOOST_PYTHON_fast_arg_to_python_get(z, n, _) \
+ , converter::arg_to_python<A##n>(a##n).get()
+
+# define BOOST_PP_ITERATION_PARAMS_1 (3, (1, BOOST_PYTHON_MAX_ARITY, <boost/python/override.hpp>))
+# include BOOST_PP_ITERATE()
+
+# undef BOOST_PYTHON_fast_arg_to_python_get
+};
+
+}} // namespace boost::python
+
+#endif // OVERRIDE_DWA2004721_HPP
+
+#else
+# if !(BOOST_WORKAROUND(__MWERKS__, > 0x3100) \
+ && BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3201)))
+# line BOOST_PP_LINE(__LINE__, override.hpp)
+# endif
+
+# define N BOOST_PP_ITERATION()
+
+template <
+ BOOST_PP_ENUM_PARAMS_Z(1, N, class A)
+ >
+detail::method_result
+operator()( BOOST_PP_ENUM_BINARY_PARAMS_Z(1, N, A, const& a) ) const
+{
+ detail::method_result x(
+ PyEval_CallFunction(
+ this->ptr()
+ , const_cast<char*>("(" BOOST_PP_REPEAT_1ST(N, BOOST_PYTHON_FIXED, "O") ")")
+ BOOST_PP_REPEAT_1ST(N, BOOST_PYTHON_fast_arg_to_python_get, nil)
+ ));
+ return x;
+}
+
+# undef N
+#endif
diff --git a/boost/boost/python/pointee.hpp b/boost/boost/python/pointee.hpp
new file mode 100644
index 00000000000..ab8bb874398
--- /dev/null
+++ b/boost/boost/python/pointee.hpp
@@ -0,0 +1,43 @@
+// Copyright David Abrahams 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)
+#ifndef POINTEE_DWA2002323_HPP
+# define POINTEE_DWA2002323_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+# include <boost/type_traits/object_traits.hpp>
+# include <boost/type_traits/remove_pointer.hpp>
+
+namespace boost { namespace python {
+
+namespace detail
+{
+ template <bool is_ptr = true>
+ struct pointee_impl
+ {
+ template <class T> struct apply : remove_pointer<T> {};
+ };
+
+ template <>
+ struct pointee_impl<false>
+ {
+ template <class T> struct apply
+ {
+ typedef typename T::element_type type;
+ };
+ };
+}
+
+template <class T>
+struct pointee
+ : detail::pointee_impl<
+ ::boost::is_pointer<T>::value
+ >::template apply<T>
+{
+};
+
+}} // namespace boost::python::detail
+
+#endif // POINTEE_DWA2002323_HPP
diff --git a/boost/boost/python/proxy.hpp b/boost/boost/python/proxy.hpp
new file mode 100644
index 00000000000..a956eac1cc7
--- /dev/null
+++ b/boost/boost/python/proxy.hpp
@@ -0,0 +1,101 @@
+// Copyright David Abrahams 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)
+#ifndef PROXY_DWA2002615_HPP
+# define PROXY_DWA2002615_HPP
+# include <boost/python/detail/prefix.hpp>
+# include <boost/python/object_core.hpp>
+# include <boost/python/object_operators.hpp>
+
+namespace boost { namespace python { namespace api {
+
+template <class Policies>
+class proxy : public object_operators<proxy<Policies> >
+{
+ typedef typename Policies::key_type key_type;
+
+# if !defined(BOOST_MSVC) || BOOST_MSVC >= 1300
+ typedef proxy const& assignment_self;
+# else
+ typedef proxy assignment_self;
+# endif
+ public:
+ proxy(object const& target, key_type const& key);
+ operator object() const;
+
+ // to support a[b] = c[d]
+ proxy const& operator=(assignment_self) const;
+
+ template <class T>
+ inline proxy const& operator=(T const& rhs) const
+ {
+ Policies::set(m_target, m_key, object(rhs));
+ return *this;
+ }
+
+ public: // implementation detail
+ void del() const;
+
+ private:
+ object m_target;
+ key_type m_key;
+};
+
+
+template <class T>
+inline void del(proxy<T> const& x)
+{
+ x.del();
+}
+
+//
+// implementation
+//
+
+template <class Policies>
+inline proxy<Policies>::proxy(object const& target, key_type const& key)
+ : m_target(target), m_key(key)
+{}
+
+template <class Policies>
+inline proxy<Policies>::operator object() const
+{
+ return Policies::get(m_target, m_key);
+}
+
+// to support a[b] = c[d]
+template <class Policies>
+inline proxy<Policies> const& proxy<Policies>::operator=(typename proxy::assignment_self rhs) const
+{
+ return *this = python::object(rhs);
+}
+
+# define BOOST_PYTHON_PROXY_INPLACE(op) \
+template <class Policies, class R> \
+proxy<Policies> const& operator op(proxy<Policies> const& lhs, R const& rhs) \
+{ \
+ object old(lhs); \
+ return lhs = (old op rhs); \
+}
+BOOST_PYTHON_PROXY_INPLACE(+=)
+BOOST_PYTHON_PROXY_INPLACE(-=)
+BOOST_PYTHON_PROXY_INPLACE(*=)
+BOOST_PYTHON_PROXY_INPLACE(/=)
+BOOST_PYTHON_PROXY_INPLACE(%=)
+BOOST_PYTHON_PROXY_INPLACE(<<=)
+BOOST_PYTHON_PROXY_INPLACE(>>=)
+BOOST_PYTHON_PROXY_INPLACE(&=)
+BOOST_PYTHON_PROXY_INPLACE(^=)
+BOOST_PYTHON_PROXY_INPLACE(|=)
+# undef BOOST_PYTHON_PROXY_INPLACE
+
+template <class Policies>
+inline void proxy<Policies>::del() const
+{
+ Policies::del(m_target, m_key);
+}
+
+}}} // namespace boost::python::api
+
+#endif // PROXY_DWA2002615_HPP
diff --git a/boost/boost/python/ptr.hpp b/boost/boost/python/ptr.hpp
new file mode 100644
index 00000000000..94e3cfe2294
--- /dev/null
+++ b/boost/boost/python/ptr.hpp
@@ -0,0 +1,128 @@
+#ifndef PTR_DWA20020601_HPP
+# define PTR_DWA20020601_HPP
+
+# include <boost/python/detail/prefix.hpp>
+// Copyright David Abrahams 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)
+//
+// Based on boost/ref.hpp, thus:
+// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi@cs.utu.fi)
+// Copyright (C) 2001 Peter Dimov
+
+# if _MSC_VER+0 >= 1020
+# pragma once
+# endif
+
+# include <boost/config.hpp>
+# include <boost/mpl/bool.hpp>
+
+namespace boost { namespace python {
+
+template<class Ptr> class pointer_wrapper
+{
+ public:
+ typedef Ptr type;
+
+ explicit pointer_wrapper(Ptr x): p_(x) {}
+ operator Ptr() const { return p_; }
+ Ptr get() const { return p_; }
+ private:
+ Ptr p_;
+};
+
+template<class T>
+inline pointer_wrapper<T> ptr(T t)
+{
+ return pointer_wrapper<T>(t);
+}
+
+# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+template<typename T>
+class is_pointer_wrapper
+ : public mpl::false_
+{
+};
+
+template<typename T>
+class is_pointer_wrapper<pointer_wrapper<T> >
+ : public mpl::true_
+{
+};
+
+template<typename T>
+class unwrap_pointer
+{
+ public:
+ typedef T type;
+};
+
+template<typename T>
+class unwrap_pointer<pointer_wrapper<T> >
+{
+ public:
+ typedef T type;
+};
+# else // no partial specialization
+
+}} // namespace boost::python
+
+#include <boost/type.hpp>
+
+namespace boost { namespace python {
+
+namespace detail
+{
+ typedef char (&yes_pointer_wrapper_t)[1];
+ typedef char (&no_pointer_wrapper_t)[2];
+
+ no_pointer_wrapper_t is_pointer_wrapper_test(...);
+
+ template<typename T>
+ yes_pointer_wrapper_t is_pointer_wrapper_test(boost::type< pointer_wrapper<T> >);
+
+ template<bool wrapped>
+ struct pointer_unwrapper
+ {
+ template <class T>
+ struct apply
+ {
+ typedef T type;
+ };
+ };
+
+ template<>
+ struct pointer_unwrapper<true>
+ {
+ template <class T>
+ struct apply
+ {
+ typedef typename T::type type;
+ };
+ };
+}
+
+template<typename T>
+class is_pointer_wrapper
+{
+ public:
+ BOOST_STATIC_CONSTANT(
+ bool, value = (
+ sizeof(detail::is_pointer_wrapper_test(boost::type<T>()))
+ == sizeof(detail::yes_pointer_wrapper_t)));
+ typedef mpl::bool_<value> type;
+};
+
+template <typename T>
+class unwrap_pointer
+ : public detail::pointer_unwrapper<
+ is_pointer_wrapper<T>::value
+ >::template apply<T>
+{};
+
+# endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+}} // namespace boost::python
+
+#endif // #ifndef PTR_DWA20020601_HPP
diff --git a/boost/boost/python/pure_virtual.hpp b/boost/boost/python/pure_virtual.hpp
new file mode 100644
index 00000000000..b3b34ffcdb5
--- /dev/null
+++ b/boost/boost/python/pure_virtual.hpp
@@ -0,0 +1,124 @@
+// Copyright David Abrahams 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)
+#ifndef PURE_VIRTUAL_DWA2003810_HPP
+# define PURE_VIRTUAL_DWA2003810_HPP
+
+# include <boost/python/def_visitor.hpp>
+# include <boost/python/default_call_policies.hpp>
+# include <boost/mpl/push_front.hpp>
+# include <boost/mpl/pop_front.hpp>
+
+# include <boost/python/detail/nullary_function_adaptor.hpp>
+
+namespace boost { namespace python {
+
+namespace detail
+{
+ //
+ // @group Helpers for pure_virtual_visitor. {
+ //
+
+ // Raises a Python RuntimeError reporting that a pure virtual
+ // function was called.
+ void BOOST_PYTHON_DECL pure_virtual_called();
+
+ // Replace the two front elements of S with T1 and T2
+ template <class S, class T1, class T2>
+ struct replace_front2
+ {
+ // Metafunction forwarding seemed to confound vc6
+ typedef typename mpl::push_front<
+ typename mpl::push_front<
+ typename mpl::pop_front<
+ typename mpl::pop_front<
+ S
+ >::type
+ >::type
+ , T2
+ >::type
+ , T1
+ >::type type;
+ };
+
+ // Given an MPL sequence representing a member function [object]
+ // signature, returns a new MPL sequence whose return type is
+ // replaced by void, and whose first argument is replaced by C&.
+ template <class C, class S>
+ typename replace_front2<S,void,C&>::type
+ error_signature(S BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(C))
+ {
+ typedef typename replace_front2<S,void,C&>::type r;
+ return r();
+ }
+
+ //
+ // }
+ //
+
+ //
+ // A def_visitor which defines a method as usual, then adds a
+ // corresponding function which raises a "pure virtual called"
+ // exception unless it's been overridden.
+ //
+ template <class PointerToMemberFunction>
+ struct pure_virtual_visitor
+ : def_visitor<pure_virtual_visitor<PointerToMemberFunction> >
+ {
+ pure_virtual_visitor(PointerToMemberFunction pmf)
+ : m_pmf(pmf)
+ {}
+
+ private:
+ friend class python::def_visitor_access;
+
+ template <class C_, class Options>
+ void visit(C_& c, char const* name, Options& options) const
+ {
+ // This should probably be a nicer error message
+ BOOST_STATIC_ASSERT(!Options::has_default_implementation);
+
+ // Add the virtual function dispatcher
+ c.def(
+ name
+ , m_pmf
+ , options.doc()
+ , options.keywords()
+ , options.policies()
+ );
+
+ typedef BOOST_DEDUCED_TYPENAME C_::metadata::held_type held_type;
+
+ // Add the default implementation which raises the exception
+ c.def(
+ name
+ , make_function(
+ detail::nullary_function_adaptor<void(*)()>(pure_virtual_called)
+ , default_call_policies()
+ , detail::error_signature<held_type>(detail::get_signature(m_pmf))
+ )
+ );
+ }
+
+ private: // data members
+ PointerToMemberFunction m_pmf;
+ };
+}
+
+//
+// Passed a pointer to member function, generates a def_visitor which
+// creates a method that only dispatches to Python if the function has
+// been overridden, either in C++ or in Python, raising a "pure
+// virtual called" exception otherwise.
+//
+template <class PointerToMemberFunction>
+detail::pure_virtual_visitor<PointerToMemberFunction>
+pure_virtual(PointerToMemberFunction pmf)
+{
+ return detail::pure_virtual_visitor<PointerToMemberFunction>(pmf);
+}
+
+}} // namespace boost::python
+
+#endif // PURE_VIRTUAL_DWA2003810_HPP
diff --git a/boost/boost/python/raw_function.hpp b/boost/boost/python/raw_function.hpp
new file mode 100644
index 00000000000..9d9f6b8b1b2
--- /dev/null
+++ b/boost/boost/python/raw_function.hpp
@@ -0,0 +1,61 @@
+// Copyright David Abrahams 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)
+#ifndef RAW_FUNCTION_DWA200336_HPP
+# define RAW_FUNCTION_DWA200336_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+# include <boost/python/tuple.hpp>
+# include <boost/python/dict.hpp>
+# include <boost/python/object/py_function.hpp>
+# include <boost/mpl/vector/vector10.hpp>
+
+# include <boost/limits.hpp>
+# include <cstddef>
+
+namespace boost { namespace python {
+
+namespace detail
+{
+ template <class F>
+ struct raw_dispatcher
+ {
+ raw_dispatcher(F f) : f(f) {}
+
+ PyObject* operator()(PyObject* args, PyObject* keywords)
+ {
+ return incref(
+ object(
+ f(
+ tuple(borrowed_reference(args))
+ , keywords ? dict(borrowed_reference(keywords)) : dict()
+ )
+ ).ptr()
+ );
+ }
+
+ private:
+ F f;
+ };
+
+ object BOOST_PYTHON_DECL make_raw_function(objects::py_function);
+}
+
+template <class F>
+object raw_function(F f, std::size_t min_args = 0)
+{
+ return detail::make_raw_function(
+ objects::py_function(
+ detail::raw_dispatcher<F>(f)
+ , mpl::vector1<PyObject*>()
+ , min_args
+ , (std::numeric_limits<unsigned>::max)()
+ )
+ );
+}
+
+}} // namespace boost::python
+
+#endif // RAW_FUNCTION_DWA200336_HPP
diff --git a/boost/boost/python/refcount.hpp b/boost/boost/python/refcount.hpp
new file mode 100644
index 00000000000..5ba5433c224
--- /dev/null
+++ b/boost/boost/python/refcount.hpp
@@ -0,0 +1,41 @@
+// Copyright David Abrahams 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)
+#ifndef REFCOUNT_DWA2002615_HPP
+# define REFCOUNT_DWA2002615_HPP
+
+# include <boost/python/detail/prefix.hpp>
+# include <boost/python/cast.hpp>
+
+namespace boost { namespace python {
+
+template <class T>
+inline T* incref(T* p)
+{
+ Py_INCREF(python::upcast<PyObject>(p));
+ return p;
+}
+
+template <class T>
+inline T* xincref(T* p)
+{
+ Py_XINCREF(python::upcast<PyObject>(p));
+ return p;
+}
+
+template <class T>
+inline void decref(T* p)
+{
+ Py_DECREF(python::upcast<PyObject>(p));
+}
+
+template <class T>
+inline void xdecref(T* p)
+{
+ Py_XDECREF(python::upcast<PyObject>(p));
+}
+
+}} // namespace boost::python
+
+#endif // REFCOUNT_DWA2002615_HPP
diff --git a/boost/boost/python/reference_existing_object.hpp b/boost/boost/python/reference_existing_object.hpp
new file mode 100644
index 00000000000..bb8ddf73809
--- /dev/null
+++ b/boost/boost/python/reference_existing_object.hpp
@@ -0,0 +1,46 @@
+// Copyright David Abrahams 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)
+#ifndef REFERENCE_EXISTING_OBJECT_DWA200222_HPP
+# define REFERENCE_EXISTING_OBJECT_DWA200222_HPP
+
+# include <boost/python/detail/prefix.hpp>
+# include <boost/python/detail/indirect_traits.hpp>
+# include <boost/mpl/if.hpp>
+# include <boost/python/to_python_indirect.hpp>
+# include <boost/type_traits/composite_traits.hpp>
+
+namespace boost { namespace python {
+
+namespace detail
+{
+ template <class R>
+ struct reference_existing_object_requires_a_pointer_or_reference_return_type
+# if defined(__GNUC__) && __GNUC__ >= 3 || defined(__EDG__)
+ {}
+# endif
+ ;
+}
+
+template <class T> struct to_python_value;
+
+struct reference_existing_object
+{
+ template <class T>
+ struct apply
+ {
+ BOOST_STATIC_CONSTANT(
+ bool, ok = is_pointer<T>::value || is_reference<T>::value);
+
+ typedef typename mpl::if_c<
+ ok
+ , to_python_indirect<T, detail::make_reference_holder>
+ , detail::reference_existing_object_requires_a_pointer_or_reference_return_type<T>
+ >::type type;
+ };
+};
+
+}} // namespace boost::python
+
+#endif // REFERENCE_EXISTING_OBJECT_DWA200222_HPP
diff --git a/boost/boost/python/register_ptr_to_python.hpp b/boost/boost/python/register_ptr_to_python.hpp
new file mode 100644
index 00000000000..7a22fe50520
--- /dev/null
+++ b/boost/boost/python/register_ptr_to_python.hpp
@@ -0,0 +1,31 @@
+// Copyright David Abrahams 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)
+#ifndef REGISTER_PTR_TO_PYTHON_HPP
+#define REGISTER_PTR_TO_PYTHON_HPP
+
+#include <boost/python/pointee.hpp>
+#include <boost/python/object.hpp>
+#include <boost/python/object/class_wrapper.hpp>
+
+namespace boost { namespace python {
+
+template <class P>
+void register_ptr_to_python(BOOST_EXPLICIT_TEMPLATE_TYPE(P))
+{
+ typedef typename boost::python::pointee<P>::type X;
+ objects::class_value_wrapper<
+ P
+ , objects::make_ptr_instance<
+ X
+ , objects::pointer_holder<P,X>
+ >
+ >();
+}
+
+}} // namespace boost::python
+
+#endif // REGISTER_PTR_TO_PYTHON_HPP
+
+
diff --git a/boost/boost/python/return_arg.hpp b/boost/boost/python/return_arg.hpp
new file mode 100644
index 00000000000..a6f651b677d
--- /dev/null
+++ b/boost/boost/python/return_arg.hpp
@@ -0,0 +1,96 @@
+// Copyright David Abrahams and Nikolay Mladenov 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)
+#ifndef RETURN_ARG_DWA2003719_HPP
+# define RETURN_ARG_DWA2003719_HPP
+# include <boost/python/default_call_policies.hpp>
+# include <boost/python/detail/none.hpp>
+# include <boost/python/detail/value_arg.hpp>
+
+# include <boost/type_traits/add_reference.hpp>
+# include <boost/type_traits/add_const.hpp>
+
+# include <boost/mpl/int.hpp>
+
+# include <boost/static_assert.hpp>
+# include <boost/python/refcount.hpp>
+
+# include <cstddef>
+
+namespace boost { namespace python {
+
+namespace detail
+{
+ template <std::size_t>
+ struct return_arg_pos_argument_must_be_positive
+# if defined(__GNUC__) && __GNUC__ >= 3 || defined(__EDG__)
+ {}
+# endif
+ ;
+
+ struct return_none
+ {
+ template <class T> struct apply
+ {
+ struct type
+ {
+ static bool convertible()
+ {
+ return true;
+ }
+
+ PyObject *operator()( typename value_arg<T>::type ) const
+ {
+ return none();
+ }
+ };
+ };
+ };
+}
+
+template <
+ std::size_t arg_pos=1
+ , class Base = default_call_policies
+>
+struct return_arg : Base
+{
+ private:
+ BOOST_STATIC_CONSTANT(bool, legal = arg_pos > 0);
+
+ public:
+ typedef typename mpl::if_c<
+ legal
+ , detail::return_none
+ , detail::return_arg_pos_argument_must_be_positive<arg_pos>
+ // we could default to the base result_converter in case or
+ // arg_pos==0 since return arg 0 means return result, but I
+ // think it is better to issue an error instead, cause it can
+ // lead to confusions
+ >::type result_converter;
+
+ template <class ArgumentPackage>
+ static PyObject* postcall(ArgumentPackage const& args, PyObject* result)
+ {
+ // In case of arg_pos == 0 we could simply return Base::postcall,
+ // but this is redundant
+ BOOST_STATIC_ASSERT(arg_pos > 0);
+
+ result = Base::postcall(args,result);
+ if (!result)
+ return 0;
+ Py_DECREF(result);
+ return incref( detail::get(mpl::int_<arg_pos-1>(),args) );
+ }
+};
+
+template <
+ class Base = default_call_policies
+ >
+struct return_self
+ : return_arg<1,Base>
+{};
+
+}} // namespace boost::python
+
+#endif // RETURN_ARG_DWA2003719_HPP
diff --git a/boost/boost/python/return_by_value.hpp b/boost/boost/python/return_by_value.hpp
new file mode 100644
index 00000000000..593fc59cfe5
--- /dev/null
+++ b/boost/boost/python/return_by_value.hpp
@@ -0,0 +1,31 @@
+// Copyright David Abrahams 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)
+#ifndef BY_VALUE_DWA20021015_HPP
+# define BY_VALUE_DWA20021015_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+# include <boost/python/to_python_value.hpp>
+# include <boost/type_traits/add_reference.hpp>
+# include <boost/type_traits/add_const.hpp>
+
+# include <boost/python/detail/value_arg.hpp>
+
+namespace boost { namespace python {
+
+struct return_by_value
+{
+ template <class R>
+ struct apply
+ {
+ typedef to_python_value<
+ typename detail::value_arg<R>::type
+ > type;
+ };
+};
+
+}} // namespace boost::python
+
+#endif // BY_VALUE_DWA20021015_HPP
diff --git a/boost/boost/python/return_internal_reference.hpp b/boost/boost/python/return_internal_reference.hpp
new file mode 100644
index 00000000000..acb89e6dc85
--- /dev/null
+++ b/boost/boost/python/return_internal_reference.hpp
@@ -0,0 +1,43 @@
+// Copyright David Abrahams 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)
+#ifndef RETURN_INTERNAL_REFERENCE_DWA2002131_HPP
+# define RETURN_INTERNAL_REFERENCE_DWA2002131_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+# include <boost/python/default_call_policies.hpp>
+# include <boost/python/reference_existing_object.hpp>
+# include <boost/python/with_custodian_and_ward.hpp>
+# include <boost/mpl/if.hpp>
+
+namespace boost { namespace python {
+
+namespace detail
+{
+ template <std::size_t>
+ struct return_internal_reference_owner_arg_must_be_greater_than_zero
+# if defined(__GNUC__) && __GNUC__ >= 3 || defined(__EDG__)
+ {}
+# endif
+ ;
+}
+
+template <std::size_t owner_arg = 1, class BasePolicy_ = default_call_policies>
+struct return_internal_reference
+ : with_custodian_and_ward_postcall<0, owner_arg, BasePolicy_>
+{
+ private:
+ BOOST_STATIC_CONSTANT(bool, legal = owner_arg > 0);
+ public:
+ typedef typename mpl::if_c<
+ legal
+ , reference_existing_object
+ , detail::return_internal_reference_owner_arg_must_be_greater_than_zero<owner_arg>
+ >::type result_converter;
+};
+
+}} // namespace boost::python
+
+#endif // RETURN_INTERNAL_REFERENCE_DWA2002131_HPP
diff --git a/boost/boost/python/return_opaque_pointer.hpp b/boost/boost/python/return_opaque_pointer.hpp
new file mode 100644
index 00000000000..cf544d80309
--- /dev/null
+++ b/boost/boost/python/return_opaque_pointer.hpp
@@ -0,0 +1,47 @@
+// Copyright Gottfried Ganßauge 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)
+/*
+ * Generic Return value converter generator for opaque C++-pointers
+ */
+# ifndef RETURN_OPAQUE_POINTER_HPP_
+# define RETURN_OPAQUE_POINTER_HPP_
+
+# include <boost/python/detail/prefix.hpp>
+# include <boost/python/opaque_pointer_converter.hpp>
+# include <boost/python/detail/force_instantiate.hpp>
+# include <boost/python/to_python_value.hpp>
+# include <boost/python/detail/value_arg.hpp>
+# include <boost/mpl/assert.hpp>
+
+namespace boost { namespace python {
+
+namespace detail
+{
+ template <class Pointee>
+ static void opaque_pointee(Pointee const volatile*)
+ {
+ force_instantiate(opaque<Pointee>::instance);
+ }
+}
+
+struct return_opaque_pointer
+{
+ template <class R>
+ struct apply
+ {
+ BOOST_MPL_ASSERT_MSG( is_pointer<R>::value, RETURN_OPAQUE_POINTER_EXPECTS_A_POINTER_TYPE, (R));
+
+ struct type :
+ boost::python::to_python_value<
+ typename detail::value_arg<R>::type
+ >
+ {
+ type() { detail::opaque_pointee(R()); }
+ };
+ };
+};
+
+}} // namespace boost::python
+# endif // RETURN_OPAQUE_POINTER_HPP_
diff --git a/boost/boost/python/return_value_policy.hpp b/boost/boost/python/return_value_policy.hpp
new file mode 100644
index 00000000000..9a5fba380b2
--- /dev/null
+++ b/boost/boost/python/return_value_policy.hpp
@@ -0,0 +1,21 @@
+// Copyright David Abrahams 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)
+#ifndef RETURN_VALUE_POLICY_DWA2002131_HPP
+# define RETURN_VALUE_POLICY_DWA2002131_HPP
+
+# include <boost/python/detail/prefix.hpp>
+# include <boost/python/default_call_policies.hpp>
+
+namespace boost { namespace python {
+
+template <class ResultConverterGenerator, class BasePolicy_ = default_call_policies>
+struct return_value_policy : BasePolicy_
+{
+ typedef ResultConverterGenerator result_converter;
+};
+
+}} // namespace boost::python
+
+#endif // RETURN_VALUE_POLICY_DWA2002131_HPP
diff --git a/boost/boost/python/scope.hpp b/boost/boost/python/scope.hpp
new file mode 100644
index 00000000000..ae9a40a3833
--- /dev/null
+++ b/boost/boost/python/scope.hpp
@@ -0,0 +1,78 @@
+// Copyright David Abrahams 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)
+#ifndef SCOPE_DWA2002724_HPP
+# define SCOPE_DWA2002724_HPP
+
+# include <boost/python/detail/prefix.hpp>
+# include <boost/python/object.hpp>
+# include <boost/python/refcount.hpp>
+# include <boost/utility.hpp>
+
+namespace boost { namespace python {
+
+namespace detail
+{
+ // Making this a namespace-scope variable to avoid Cygwin issues.
+ // Use a PyObject* to avoid problems with static destruction after Py_Finalize
+ extern BOOST_PYTHON_DECL PyObject* current_scope;
+}
+
+class scope
+ : public object
+{
+ public:
+ inline scope(scope const&);
+ inline scope(object const&);
+ inline scope();
+ inline ~scope();
+
+ private: // data members
+ PyObject* m_previous_scope;
+
+ private: // unimplemented functions
+ void operator=(scope const&);
+};
+
+inline scope::scope(object const& new_scope)
+ : object(new_scope)
+ , m_previous_scope(detail::current_scope)
+{
+ detail::current_scope = python::incref(new_scope.ptr());
+}
+
+inline scope::scope()
+ : object(detail::borrowed_reference(
+ detail::current_scope ? detail::current_scope : Py_None
+ ))
+ , m_previous_scope(python::xincref(detail::current_scope))
+{
+}
+
+inline scope::~scope()
+{
+ python::xdecref(detail::current_scope);
+ detail::current_scope = m_previous_scope;
+}
+
+namespace converter
+{
+ template <>
+ struct object_manager_traits<scope>
+ : object_manager_traits<object>
+ {
+ };
+}
+
+// Placing this after the specialization above suppresses a CWPro8.3 bug
+inline scope::scope(scope const& new_scope)
+ : object(new_scope)
+ , m_previous_scope(detail::current_scope)
+{
+ detail::current_scope = python::incref(new_scope.ptr());
+}
+
+}} // namespace boost::python
+
+#endif // SCOPE_DWA2002724_HPP
diff --git a/boost/boost/python/self.hpp b/boost/boost/python/self.hpp
new file mode 100644
index 00000000000..99ec5b8fbe7
--- /dev/null
+++ b/boost/boost/python/self.hpp
@@ -0,0 +1,33 @@
+// Copyright David Abrahams 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)
+#ifndef SELF_DWA2002531_HPP
+# define SELF_DWA2002531_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+namespace boost { namespace python {
+
+#define BOOST_PYTHON_SELF_IS_CLASS
+
+// Sink self_t into its own namespace so that we have a safe place to
+// put the completely general operator templates which operate on
+// it. It is possible to avoid this, but it turns out to be much more
+// complicated and finally GCC 2.95.2 chokes on it.
+namespace self_ns
+{
+# ifndef BOOST_PYTHON_SELF_IS_CLASS
+ enum self_t { self };
+# else
+ struct self_t {};
+ extern BOOST_PYTHON_DECL self_t self;
+# endif
+}
+
+using self_ns::self_t;
+using self_ns::self;
+
+}} // namespace boost::python
+
+#endif // SELF_DWA2002531_HPP
diff --git a/boost/boost/python/signature.hpp b/boost/boost/python/signature.hpp
new file mode 100644
index 00000000000..c4151814f73
--- /dev/null
+++ b/boost/boost/python/signature.hpp
@@ -0,0 +1,179 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// Copyright David Abrahams 2002, Joel de Guzman, 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)
+//
+///////////////////////////////////////////////////////////////////////////////
+#if !defined(BOOST_PP_IS_ITERATING)
+
+# ifndef SIGNATURE_JDG20020813_HPP
+# define SIGNATURE_JDG20020813_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+# include <boost/mpl/if.hpp>
+# include <boost/type_traits/is_convertible.hpp>
+
+# include <boost/python/detail/preprocessor.hpp>
+# include <boost/preprocessor/repeat.hpp>
+# include <boost/preprocessor/enum.hpp>
+# include <boost/preprocessor/enum_params.hpp>
+# include <boost/preprocessor/empty.hpp>
+# include <boost/preprocessor/arithmetic/sub.hpp>
+# include <boost/preprocessor/iterate.hpp>
+# include <boost/python/detail/type_list.hpp>
+
+# include <boost/preprocessor/debug/line.hpp>
+# include <boost/preprocessor/arithmetic/sub.hpp>
+# include <boost/preprocessor/arithmetic/inc.hpp>
+# include <boost/preprocessor/repetition/enum_trailing_params.hpp>
+
+# define BOOST_PYTHON_LIST_INC(n) \
+ BOOST_PP_CAT(mpl::vector, BOOST_PP_INC(n))
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace python { namespace detail {
+
+// A metafunction returning C1 if C1 is derived from C2, and C2
+// otherwise
+template <class C1, class C2>
+struct most_derived
+{
+ typedef typename mpl::if_<
+ is_convertible<C1*,C2*>
+ , C1
+ , C2
+ >::type type;
+};
+
+// The following macros generate expansions for::
+//
+// template <class RT, class T0... class TN>
+// inline mpl::vector<RT, T0...TN>
+// get_signature(RT(*)(T0...TN), void* = 0)
+// {
+// return mpl::list<RT, T0...TN>();
+// }
+//
+// And, for an appropriate assortment of cv-qualifications::
+//
+// template <class RT, class ClassT, class T0... class TN>
+// inline mpl::vector<RT, ClassT&, T0...TN>
+// get_signature(RT(ClassT::*)(T0...TN) cv))
+// {
+// return mpl::list<RT, ClassT&, T0...TN>();
+// }
+//
+// template <class Target, class RT, class ClassT, class T0... class TN>
+// inline mpl::vector<
+// RT
+// , typename most_derived<Target, ClassT>::type&
+// , T0...TN
+// >
+// get_signature(RT(ClassT::*)(T0...TN) cv), Target*)
+// {
+// return mpl::list<RT, ClassT&, T0...TN>();
+// }
+//
+// There are two forms for invoking get_signature::
+//
+// get_signature(f)
+//
+// and ::
+//
+// get_signature(f,(Target*)0)
+//
+// These functions extract the return type, class (for member
+// functions) and arguments of the input signature and stuff them in
+// an mpl type sequence. Note that cv-qualification is dropped from
+// the "hidden this" argument of member functions; that is a
+// necessary sacrifice to ensure that an lvalue from_python converter
+// is used. A pointer is not used so that None will be rejected for
+// overload resolution.
+//
+// The second form of get_signature essentially downcasts the "hidden
+// this" argument of member functions to Target, because the function
+// may actually be a member of a base class which is not wrapped, and
+// in that case conversion from python would fail.
+//
+// @group {
+
+# define BOOST_PP_ITERATION_PARAMS_1 \
+ (3, (0, BOOST_PYTHON_MAX_ARITY, <boost/python/signature.hpp>))
+
+# include BOOST_PP_ITERATE()
+# undef BOOST_PYTHON_LIST_INC
+
+// }
+
+}}} // namespace boost::python::detail
+
+
+# endif // SIGNATURE_JDG20020813_HPP
+
+#elif BOOST_PP_ITERATION_DEPTH() == 1 // defined(BOOST_PP_IS_ITERATING)
+
+# define N BOOST_PP_ITERATION()
+
+template <
+ class RT BOOST_PP_ENUM_TRAILING_PARAMS_Z(1, N, class T)>
+inline BOOST_PYTHON_LIST_INC(N)<
+ RT BOOST_PP_ENUM_TRAILING_PARAMS_Z(1, N, T)>
+get_signature(RT(*)(BOOST_PP_ENUM_PARAMS_Z(1, N, T)), void* = 0)
+{
+ return BOOST_PYTHON_LIST_INC(N)<
+ RT BOOST_PP_ENUM_TRAILING_PARAMS_Z(1, N, T)
+ >();
+}
+
+# undef N
+
+# define BOOST_PP_ITERATION_PARAMS_2 \
+ (3, (0, 3, <boost/python/signature.hpp>))
+# include BOOST_PP_ITERATE()
+
+#else
+
+# define N BOOST_PP_RELATIVE_ITERATION(1)
+# define Q BOOST_PYTHON_CV_QUALIFIER(BOOST_PP_ITERATION())
+
+template <
+ class RT, class ClassT BOOST_PP_ENUM_TRAILING_PARAMS_Z(1, N, class T)>
+inline BOOST_PYTHON_LIST_INC(BOOST_PP_INC(N))<
+ RT, ClassT& BOOST_PP_ENUM_TRAILING_PARAMS_Z(1, N, T)>
+get_signature(RT(ClassT::*)(BOOST_PP_ENUM_PARAMS_Z(1, N, T)) Q)
+{
+ return BOOST_PYTHON_LIST_INC(BOOST_PP_INC(N))<
+ RT, ClassT& BOOST_PP_ENUM_TRAILING_PARAMS_Z(1, N, T)
+ >();
+}
+
+template <
+ class Target
+ , class RT
+ , class ClassT
+ BOOST_PP_ENUM_TRAILING_PARAMS_Z(1, N, class T)
+>
+inline BOOST_PYTHON_LIST_INC(BOOST_PP_INC(N))<
+ RT
+ , typename most_derived<Target, ClassT>::type&
+ BOOST_PP_ENUM_TRAILING_PARAMS_Z(1, N, T)
+>
+get_signature(
+ RT(ClassT::*)(BOOST_PP_ENUM_PARAMS_Z(1, N, T)) Q
+ , Target*
+)
+{
+ return BOOST_PYTHON_LIST_INC(BOOST_PP_INC(N))<
+ RT
+ , BOOST_DEDUCED_TYPENAME most_derived<Target, ClassT>::type&
+ BOOST_PP_ENUM_TRAILING_PARAMS_Z(1, N, T)
+ >();
+}
+
+# undef Q
+# undef N
+
+#endif // !defined(BOOST_PP_IS_ITERATING)
diff --git a/boost/boost/python/slice.hpp b/boost/boost/python/slice.hpp
new file mode 100644
index 00000000000..382ceb812c3
--- /dev/null
+++ b/boost/boost/python/slice.hpp
@@ -0,0 +1,266 @@
+#ifndef BOOST_PYTHON_SLICE_JDB20040105_HPP
+#define BOOST_PYTHON_SLICE_JDB20040105_HPP
+
+// Copyright (c) 2004 Jonathan Brandmeyer
+// 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)
+
+#include <boost/python/detail/prefix.hpp>
+#include <boost/config.hpp>
+#include <boost/python/object.hpp>
+#include <boost/python/extract.hpp>
+#include <boost/python/converter/pytype_object_mgr_traits.hpp>
+
+#include <boost/iterator/iterator_traits.hpp>
+
+#include <iterator>
+#include <algorithm>
+
+namespace boost { namespace python {
+
+namespace detail
+{
+ class BOOST_PYTHON_DECL slice_base : public object
+ {
+ public:
+ // Get the Python objects associated with the slice. In principle, these
+ // may be any arbitrary Python type, but in practice they are usually
+ // integers. If one or more parameter is ommited in the Python expression
+ // that created this slice, than that parameter is None here, and compares
+ // equal to a default-constructed boost::python::object.
+ // If a user-defined type wishes to support slicing, then support for the
+ // special meaning associated with negative indicies is up to the user.
+ object start() const;
+ object stop() const;
+ object step() const;
+
+ protected:
+ explicit slice_base(PyObject*, PyObject*, PyObject*);
+
+ BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS(slice_base, object)
+ };
+}
+
+class slice : public detail::slice_base
+{
+ typedef detail::slice_base base;
+ public:
+ // Equivalent to slice(::)
+ slice() : base(0,0,0) {}
+
+ // Each argument must be slice_nil, or implicitly convertable to object.
+ // They should normally be integers.
+ template<typename Integer1, typename Integer2>
+ slice( Integer1 start, Integer2 stop)
+ : base( object(start).ptr(), object(stop).ptr(), 0 )
+ {}
+
+ template<typename Integer1, typename Integer2, typename Integer3>
+ slice( Integer1 start, Integer2 stop, Integer3 stride)
+ : base( object(start).ptr(), object(stop).ptr(), object(stride).ptr() )
+ {}
+
+ // The following algorithm is intended to automate the process of
+ // determining a slice range when you want to fully support negative
+ // indicies and non-singular step sizes. Its functionallity is simmilar to
+ // PySlice_GetIndicesEx() in the Python/C API, but tailored for C++ users.
+ // This template returns a slice::range struct that, when used in the
+ // following iterative loop, will traverse a slice of the function's
+ // arguments.
+ // while (start != end) {
+ // do_foo(...);
+ // std::advance( start, step);
+ // }
+ // do_foo(...); // repeat exactly once more.
+
+ // Arguments: a [begin, end) pair of STL-conforming random-access iterators.
+
+ // Return: slice::range, where start and stop define a _closed_ interval
+ // that covers at most [begin, end-1] of the provided arguments, and a step
+ // that is non-zero.
+
+ // Throws: error_already_set() if any of the indices are neither None nor
+ // integers, or the slice has a step value of zero.
+ // std::invalid_argument if the resulting range would be empty. Normally,
+ // you should catch this exception and return an empty sequence of the
+ // appropriate type.
+
+ // Performance: constant time for random-access iterators.
+
+ // Rationale:
+ // closed-interval: If an open interval were used, then for a non-singular
+ // value for step, the required state for the end iterator could be
+ // beyond the one-past-the-end postion of the specified range. While
+ // probably harmless, the behavior of STL-conforming iterators is
+ // undefined in this case.
+ // exceptions on zero-length range: It is impossible to define a closed
+ // interval over an empty range, so some other form of error checking
+ // would have to be used by the user to prevent undefined behavior. In
+ // the case where the user fails to catch the exception, it will simply
+ // be translated to Python by the default exception handling mechanisms.
+
+ template<typename RandomAccessIterator>
+ struct range
+ {
+ RandomAccessIterator start;
+ RandomAccessIterator stop;
+ typename iterator_difference<RandomAccessIterator>::type step;
+ };
+
+ template<typename RandomAccessIterator>
+ slice::range<RandomAccessIterator>
+ get_indicies( const RandomAccessIterator& begin,
+ const RandomAccessIterator& end) const
+ {
+ // This is based loosely on PySlice_GetIndicesEx(), but it has been
+ // carefully crafted to ensure that these iterators never fall out of
+ // the range of the container.
+ slice::range<RandomAccessIterator> ret;
+
+ typedef typename iterator_difference<RandomAccessIterator>::type difference_type;
+ difference_type max_dist = boost::detail::distance(begin, end);
+
+ object slice_start = this->start();
+ object slice_stop = this->stop();
+ object slice_step = this->step();
+
+ // Extract the step.
+ if (slice_step == object()) {
+ ret.step = 1;
+ }
+ else {
+ ret.step = extract<long>( slice_step);
+ if (ret.step == 0) {
+ PyErr_SetString( PyExc_IndexError, "step size cannot be zero.");
+ throw_error_already_set();
+ }
+ }
+
+ // Setup the start iterator.
+ if (slice_start == object()) {
+ if (ret.step < 0) {
+ ret.start = end;
+ --ret.start;
+ }
+ else
+ ret.start = begin;
+ }
+ else {
+ difference_type i = extract<long>( slice_start);
+ if (i >= max_dist && ret.step > 0)
+ throw std::invalid_argument( "Zero-length slice");
+ if (i >= 0) {
+ ret.start = begin;
+ BOOST_USING_STD_MIN();
+ std::advance( ret.start, min BOOST_PREVENT_MACRO_SUBSTITUTION(i, max_dist-1));
+ }
+ else {
+ if (i < -max_dist && ret.step < 0)
+ throw std::invalid_argument( "Zero-length slice");
+ ret.start = end;
+ // Advance start (towards begin) not farther than begin.
+ std::advance( ret.start, (-i < max_dist) ? i : -max_dist );
+ }
+ }
+
+ // Set up the stop iterator. This one is a little trickier since slices
+ // define a [) range, and we are returning a [] range.
+ if (slice_stop == object()) {
+ if (ret.step < 0) {
+ ret.stop = begin;
+ }
+ else {
+ ret.stop = end;
+ std::advance( ret.stop, -1);
+ }
+ }
+ else {
+ difference_type i = extract<long>(slice_stop);
+ // First, branch on which direction we are going with this.
+ if (ret.step < 0) {
+ if (i+1 >= max_dist || i == -1)
+ throw std::invalid_argument( "Zero-length slice");
+
+ if (i >= 0) {
+ ret.stop = begin;
+ std::advance( ret.stop, i+1);
+ }
+ else { // i is negative, but more negative than -1.
+ ret.stop = end;
+ std::advance( ret.stop, (-i < max_dist) ? i : -max_dist);
+ }
+ }
+ else { // stepping forward
+ if (i == 0 || -i >= max_dist)
+ throw std::invalid_argument( "Zero-length slice");
+
+ if (i > 0) {
+ ret.stop = begin;
+ std::advance( ret.stop, (std::min)( i-1, max_dist-1));
+ }
+ else { // i is negative, but not more negative than -max_dist
+ ret.stop = end;
+ std::advance( ret.stop, i-1);
+ }
+ }
+ }
+
+ // Now the fun part, handling the possibilites surrounding step.
+ // At this point, step has been initialized, ret.stop, and ret.step
+ // represent the widest possible range that could be traveled
+ // (inclusive), and final_dist is the maximum distance covered by the
+ // slice.
+ typename iterator_difference<RandomAccessIterator>::type final_dist =
+ boost::detail::distance( ret.start, ret.stop);
+
+ // First case, if both ret.start and ret.stop are equal, then step
+ // is irrelevant and we can return here.
+ if (final_dist == 0)
+ return ret;
+
+ // Second, if there is a sign mismatch, than the resulting range and
+ // step size conflict: std::advance( ret.start, ret.step) goes away from
+ // ret.stop.
+ if ((final_dist > 0) != (ret.step > 0))
+ throw std::invalid_argument( "Zero-length slice.");
+
+ // Finally, if the last step puts us past the end, we move ret.stop
+ // towards ret.start in the amount of the remainder.
+ // I don't remember all of the oolies surrounding negative modulii,
+ // so I am handling each of these cases separately.
+ if (final_dist < 0) {
+ difference_type remainder = -final_dist % -ret.step;
+ std::advance( ret.stop, remainder);
+ }
+ else {
+ difference_type remainder = final_dist % ret.step;
+ std::advance( ret.stop, -remainder);
+ }
+
+ return ret;
+ }
+
+ public:
+ // This declaration, in conjunction with the specialization of
+ // object_manager_traits<> below, allows C++ functions accepting slice
+ // arguments to be called from from Python. These constructors should never
+ // be used in client code.
+ BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS(slice, detail::slice_base)
+};
+
+
+namespace converter {
+
+template<>
+struct object_manager_traits<slice>
+ : pytype_object_manager_traits<&PySlice_Type, slice>
+{
+};
+
+} // !namesapce converter
+
+} } // !namespace ::boost::python
+
+
+#endif // !defined BOOST_PYTHON_SLICE_JDB20040105_HPP
diff --git a/boost/boost/python/slice_nil.hpp b/boost/boost/python/slice_nil.hpp
new file mode 100644
index 00000000000..e911f068011
--- /dev/null
+++ b/boost/boost/python/slice_nil.hpp
@@ -0,0 +1,44 @@
+// Copyright David Abrahams 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)
+#ifndef SLICE_NIL_DWA2002620_HPP
+# define SLICE_NIL_DWA2002620_HPP
+
+# include <boost/python/detail/prefix.hpp>
+# include <boost/python/object_core.hpp>
+
+namespace boost { namespace python { namespace api {
+
+class slice_nil : public object
+{
+ public:
+ slice_nil() : object() {}
+};
+
+# ifndef _ // Watch out for GNU gettext users, who #define _(x)
+static const slice_nil _ = slice_nil();
+# endif
+
+template <class T>
+struct slice_bound
+{
+ typedef object type;
+};
+
+template <>
+struct slice_bound<slice_nil>
+{
+ typedef slice_nil type;
+};
+
+}
+
+using api::slice_nil;
+# ifndef _ // Watch out for GNU gettext users, who #define _(x)
+using api::_;
+# endif
+
+}} // namespace boost::python
+
+#endif // SLICE_NIL_DWA2002620_HPP
diff --git a/boost/boost/python/ssize_t.hpp b/boost/boost/python/ssize_t.hpp
new file mode 100644
index 00000000000..e8a2d92f631
--- /dev/null
+++ b/boost/boost/python/ssize_t.hpp
@@ -0,0 +1,29 @@
+// Copyright Ralf W. Grosse-Kunstleve & David Abrahams 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)
+
+#ifndef BOOST_PYTHON_SSIZE_T_RWGK20060924_HPP
+# define BOOST_PYTHON_SSIZE_T_RWGK20060924_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+namespace boost { namespace python {
+
+#if PY_VERSION_HEX >= 0x02050000
+
+typedef Py_ssize_t ssize_t;
+ssize_t const ssize_t_max = PY_SSIZE_T_MAX;
+ssize_t const ssize_t_min = PY_SSIZE_T_MIN;
+
+#else
+
+typedef int ssize_t;
+ssize_t const ssize_t_max = INT_MAX;
+ssize_t const ssize_t_min = INT_MIN;
+
+#endif
+
+}} // namespace boost::python
+
+#endif // BOOST_PYTHON_SSIZE_T_RWGK20060924_HPP
diff --git a/boost/boost/python/stl_iterator.hpp b/boost/boost/python/stl_iterator.hpp
new file mode 100644
index 00000000000..838954879ad
--- /dev/null
+++ b/boost/boost/python/stl_iterator.hpp
@@ -0,0 +1,61 @@
+// Copyright Eric Niebler 2005.
+// 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 STL_ITERATOR_EAN20051028_HPP
+# define STL_ITERATOR_EAN20051028_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+# include <boost/python/object/stl_iterator_core.hpp>
+
+# include <boost/iterator/iterator_facade.hpp>
+
+namespace boost { namespace python
+{
+
+// An STL input iterator over a python sequence
+template<typename ValueT>
+struct stl_input_iterator
+ : boost::iterator_facade<
+ stl_input_iterator<ValueT>
+ , ValueT
+ , std::input_iterator_tag
+ , ValueT
+ >
+{
+ stl_input_iterator()
+ : impl_()
+ {
+ }
+
+ // ob is the python sequence
+ stl_input_iterator(boost::python::object const &ob)
+ : impl_(ob)
+ {
+ }
+
+private:
+ friend class boost::iterator_core_access;
+
+ void increment()
+ {
+ this->impl_.increment();
+ }
+
+ ValueT dereference() const
+ {
+ return extract<ValueT>(this->impl_.current().get())();
+ }
+
+ bool equal(stl_input_iterator<ValueT> const &that) const
+ {
+ return this->impl_.equal(that.impl_);
+ }
+
+ objects::stl_input_iterator_impl impl_;
+};
+
+}} // namespace boost::python
+
+#endif // STL_ITERATOR_EAN20051028_HPP
diff --git a/boost/boost/python/str.hpp b/boost/boost/python/str.hpp
new file mode 100644
index 00000000000..86bc3ba6e8f
--- /dev/null
+++ b/boost/boost/python/str.hpp
@@ -0,0 +1,414 @@
+// Copyright David Abrahams 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)
+#ifndef STR_20020703_HPP
+#define STR_20020703_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+#include <boost/python/object.hpp>
+#include <boost/python/list.hpp>
+#include <boost/python/converter/pytype_object_mgr_traits.hpp>
+
+// disable defines in <cctype> provided by some system libraries
+#undef isspace
+#undef islower
+#undef isalpha
+#undef isdigit
+#undef isalnum
+#undef isupper
+
+namespace boost { namespace python {
+
+class str;
+
+namespace detail
+{
+ struct BOOST_PYTHON_DECL str_base : object
+ {
+ str capitalize() const;
+
+ str center(object_cref width) const;
+
+ long count(object_cref sub) const;
+
+ long count(object_cref sub, object_cref start) const;
+
+ long count(object_cref sub, object_cref start, object_cref end) const;
+
+ object decode() const;
+ object decode(object_cref encoding) const;
+
+ object decode(object_cref encoding, object_cref errors) const;
+
+ object encode() const;
+ object encode(object_cref encoding) const;
+ object encode(object_cref encoding, object_cref errors) const;
+
+ bool endswith(object_cref suffix) const;
+
+ bool endswith(object_cref suffix, object_cref start) const;
+ bool endswith(object_cref suffix, object_cref start, object_cref end) const;
+
+ str expandtabs() const;
+ str expandtabs(object_cref tabsize) const;
+
+ long find(object_cref sub) const;
+ long find(object_cref sub, object_cref start) const;
+
+ long find(object_cref sub, object_cref start, object_cref end) const;
+
+ long index(object_cref sub) const;
+
+ long index(object_cref sub, object_cref start) const;
+ long index(object_cref sub, object_cref start, object_cref end) const;
+
+ bool isalnum() const;
+ bool isalpha() const;
+ bool isdigit() const;
+ bool islower() const;
+ bool isspace() const;
+ bool istitle() const;
+ bool isupper() const;
+
+ str join(object_cref sequence) const;
+
+ str ljust(object_cref width) const;
+ str lower() const;
+ str lstrip() const;
+
+ str replace(object_cref old, object_cref new_) const;
+ str replace(object_cref old, object_cref new_, object_cref maxsplit) const;
+ long rfind(object_cref sub) const;
+
+ long rfind(object_cref sub, object_cref start) const;
+
+ long rfind(object_cref sub, object_cref start, object_cref end) const;
+ long rindex(object_cref sub) const;
+ long rindex(object_cref sub, object_cref start) const;
+
+
+ long rindex(object_cref sub, object_cref start, object_cref end) const;
+
+ str rjust(object_cref width) const;
+
+ str rstrip() const;
+
+ list split() const;
+ list split(object_cref sep) const;
+
+ list split(object_cref sep, object_cref maxsplit) const;
+
+
+ list splitlines() const;
+ list splitlines(object_cref keepends) const;
+
+ bool startswith(object_cref prefix) const;
+
+
+ bool startswith(object_cref prefix, object_cref start) const;
+ bool startswith(object_cref prefix, object_cref start, object_cref end) const;
+
+ str strip() const;
+ str swapcase() const;
+ str title() const;
+
+ str translate(object_cref table) const;
+
+ str translate(object_cref table, object_cref deletechars) const;
+
+
+ str upper() const;
+
+ protected:
+ str_base(); // new str
+
+ str_base(const char* s); // new str
+
+ str_base(char const* start, char const* finish);
+
+ str_base(char const* start, std::size_t length);
+
+ explicit str_base(object_cref other);
+
+ BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS(str_base, object)
+ private:
+ static new_reference call(object const&);
+ };
+}
+
+
+class str : public detail::str_base
+{
+ typedef detail::str_base base;
+ public:
+ str() {} // new str
+
+ str(const char* s) : base(s) {} // new str
+
+ str(char const* start, char const* finish) // new str
+ : base(start, finish)
+ {}
+
+ str(char const* start, std::size_t length) // new str
+ : base(start, length)
+ {}
+
+ template <class T>
+ explicit str(T const& other)
+ : base(object(other))
+ {
+ }
+
+ template <class T>
+ str center(T const& width) const
+ {
+ return base::center(object(width));
+ }
+
+ template<class T>
+ long count(T const& sub) const
+ {
+ return base::count(object(sub));
+ }
+
+ template<class T1, class T2>
+ long count(T1 const& sub,T2 const& start) const
+ {
+ return base::count(object(sub), object(start));
+ }
+
+ template<class T1, class T2, class T3>
+ long count(T1 const& sub,T2 const& start, T3 const& end) const
+ {
+ return base::count(object(sub), object(start));
+ }
+
+ object decode() const { return base::decode(); }
+
+ template<class T>
+ object decode(T const& encoding) const
+ {
+ return base::decode(object(encoding));
+ }
+
+ template<class T1, class T2>
+ object decode(T1 const& encoding, T2 const& errors) const
+ {
+ return base::decode(object(encoding),object(errors));
+ }
+
+ object encode() const { return base::encode(); }
+
+ template <class T>
+ object encode(T const& encoding) const
+ {
+ return base::encode(object(encoding));
+ }
+
+ template <class T1, class T2>
+ object encode(T1 const& encoding, T2 const& errors) const
+ {
+ return base::encode(object(encoding),object(errors));
+ }
+
+ template <class T>
+ bool endswith(T const& suffix) const
+ {
+ return base::endswith(object(suffix));
+ }
+
+ template <class T1, class T2>
+ bool endswith(T1 const& suffix, T2 const& start) const
+ {
+ return base::endswith(object(suffix), object(start));
+ }
+
+ template <class T1, class T2, class T3>
+ bool endswith(T1 const& suffix, T2 const& start, T3 const& end) const
+ {
+ return base::endswith(object(suffix), object(start), object(end));
+ }
+
+ str expandtabs() const { return base::expandtabs(); }
+
+ template <class T>
+ str expandtabs(T const& tabsize) const
+ {
+ return base::expandtabs(object(tabsize));
+ }
+
+ template <class T>
+ long find(T const& sub) const
+ {
+ return base::find(object(sub));
+ }
+
+ template <class T1, class T2>
+ long find(T1 const& sub, T2 const& start) const
+ {
+ return base::find(object(sub), object(start));
+ }
+
+ template <class T1, class T2, class T3>
+ long find(T1 const& sub, T2 const& start, T3 const& end) const
+ {
+ return base::find(object(sub), object(start), object(end));
+ }
+
+ template <class T>
+ long index(T const& sub) const
+ {
+ return base::index(object(sub));
+ }
+
+ template <class T1, class T2>
+ long index(T1 const& sub, T2 const& start) const
+ {
+ return base::index(object(sub), object(start));
+ }
+
+ template <class T1, class T2, class T3>
+ long index(T1 const& sub, T2 const& start, T3 const& end) const
+ {
+ return base::index(object(sub), object(start), object(end));
+ }
+
+ template <class T>
+ str join(T const& sequence) const
+ {
+ return base::join(object(sequence));
+ }
+
+ template <class T>
+ str ljust(T const& width) const
+ {
+ return base::ljust(object(width));
+ }
+
+ template <class T1, class T2>
+ str replace(T1 const& old, T2 const& new_) const
+ {
+ return base::replace(object(old),object(new_));
+ }
+
+ template <class T1, class T2, class T3>
+ str replace(T1 const& old, T2 const& new_, T3 const& maxsplit) const
+ {
+ return base::replace(object(old),object(new_), object(maxsplit));
+ }
+
+ template <class T>
+ long rfind(T const& sub) const
+ {
+ return base::rfind(object(sub));
+ }
+
+ template <class T1, class T2>
+ long rfind(T1 const& sub, T2 const& start) const
+ {
+ return base::rfind(object(sub), object(start));
+ }
+
+ template <class T1, class T2, class T3>
+ long rfind(T1 const& sub, T2 const& start, T3 const& end) const
+ {
+ return base::rfind(object(sub), object(start), object(end));
+ }
+
+ template <class T>
+ long rindex(T const& sub) const
+ {
+ return base::rindex(object(sub));
+ }
+
+ template <class T1, class T2>
+ long rindex(T1 const& sub, T2 const& start) const
+ {
+ return base::rindex(object(sub), object(start));
+ }
+
+ template <class T1, class T2, class T3>
+ long rindex(T1 const& sub, T2 const& start, T3 const& end) const
+ {
+ return base::rindex(object(sub), object(start), object(end));
+ }
+
+ template <class T>
+ str rjust(T const& width) const
+ {
+ return base::rjust(object(width));
+ }
+
+ list split() const { return base::split(); }
+
+ template <class T>
+ list split(T const& sep) const
+ {
+ return base::split(object(sep));
+ }
+
+ template <class T1, class T2>
+ list split(T1 const& sep, T2 const& maxsplit) const
+ {
+ return base::split(object(sep), object(maxsplit));
+ }
+
+ list splitlines() const { return base::splitlines(); }
+
+ template <class T>
+ list splitlines(T const& keepends) const
+ {
+ return base::splitlines(object(keepends));
+ }
+
+ template <class T>
+ bool startswith(T const& prefix) const
+ {
+ return base::startswith(object(prefix));
+ }
+
+ template <class T1, class T2>
+ bool startswith(T1 const& prefix, T2 const& start) const
+ {
+ return base::startswith(object(prefix), object(start));
+ }
+
+ template <class T1, class T2, class T3>
+ bool startswith(T1 const& prefix, T2 const& start, T3 const& end) const
+ {
+ return base::startswith(object(prefix), object(start), object(end));
+ }
+
+ template <class T>
+ str translate(T const& table) const
+ {
+ return base::translate(object(table));
+ }
+
+ template <class T1, class T2>
+ str translate(T1 const& table, T2 const& deletechars) const
+ {
+ return base::translate(object(table), object(deletechars));
+ }
+
+ public: // implementation detail -- for internal use only
+ BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS(str, base)
+};
+
+//
+// Converter Specializations
+//
+namespace converter
+{
+ template <>
+ struct object_manager_traits<str>
+ : pytype_object_manager_traits<&PyString_Type,str>
+ {
+ };
+}
+
+}} // namespace boost::python
+
+#endif // STR_20020703_HPP
diff --git a/boost/boost/python/suite/indexing/container_utils.hpp b/boost/boost/python/suite/indexing/container_utils.hpp
new file mode 100644
index 00000000000..a25185d077d
--- /dev/null
+++ b/boost/boost/python/suite/indexing/container_utils.hpp
@@ -0,0 +1,52 @@
+
+// (C) Copyright Joel de Guzman 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)
+
+#ifndef PY_CONTAINER_UTILS_JDG20038_HPP
+# define PY_CONTAINER_UTILS_JDG20038_HPP
+
+# include <boost/python/object.hpp>
+# include <boost/python/handle.hpp>
+# include <boost/python/extract.hpp>
+
+namespace boost { namespace python { namespace container_utils {
+
+ template <typename Container>
+ void
+ extend_container(Container& container, object l)
+ {
+ typedef typename Container::value_type data_type;
+
+ // l must be a list or some container
+
+ for (int i = 0; i < l.attr("__len__")(); i++)
+ {
+ object elem(l[i]);
+ extract<data_type const&> x(elem);
+ // try if elem is an exact data_type type
+ if (x.check())
+ {
+ container.push_back(x());
+ }
+ else
+ {
+ // try to convert elem to data_type type
+ extract<data_type> x(elem);
+ if (x.check())
+ {
+ container.push_back(x());
+ }
+ else
+ {
+ PyErr_SetString(PyExc_TypeError, "Incompatible Data Type");
+ throw_error_already_set();
+ }
+ }
+ }
+ }
+
+}}} // namespace boost::python::container_utils
+
+#endif
diff --git a/boost/boost/python/suite/indexing/detail/indexing_suite_detail.hpp b/boost/boost/python/suite/indexing/detail/indexing_suite_detail.hpp
new file mode 100644
index 00000000000..70df8a7273b
--- /dev/null
+++ b/boost/boost/python/suite/indexing/detail/indexing_suite_detail.hpp
@@ -0,0 +1,759 @@
+// (C) Copyright Joel de Guzman 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)
+
+#ifndef INDEXING_SUITE_DETAIL_JDG20036_HPP
+# define INDEXING_SUITE_DETAIL_JDG20036_HPP
+
+# include <boost/python/extract.hpp>
+# include <boost/scoped_ptr.hpp>
+# include <boost/get_pointer.hpp>
+# include <boost/detail/binary_search.hpp>
+# include <boost/numeric/conversion/cast.hpp>
+# include <boost/type_traits/is_pointer.hpp>
+# include <vector>
+# include <map>
+#include <iostream>
+
+namespace boost { namespace python { namespace detail {
+
+#if defined(NDEBUG)
+#define BOOST_PYTHON_INDEXING_CHECK_INVARIANT
+#else
+#define BOOST_PYTHON_INDEXING_CHECK_INVARIANT check_invariant()
+#endif
+
+ template <class Proxy>
+ struct compare_proxy_index
+ {
+ // This functor compares a proxy and an index.
+ // This is used by proxy_group::first_proxy to
+ // get first proxy with index i.
+
+ template <class Index>
+ bool operator()(PyObject* prox, Index i) const
+ {
+ typedef typename Proxy::policies_type policies_type;
+ Proxy& proxy = extract<Proxy&>(prox)();
+ return policies_type::
+ compare_index(proxy.get_container(), proxy.get_index(), i);
+ }
+ };
+
+ // The proxy_group class holds a vector of container element
+ // proxies. First, what is a container element proxy? A container
+ // element proxy acts like a smart pointer holding a reference to
+ // a container and an index (see container_element, for details).
+ //
+ // The proxies are held in a vector always sorted by its index.
+ // Various functions manage the addition, removal and searching
+ // of proxies from the vector.
+ //
+ template <class Proxy>
+ class proxy_group
+ {
+ public:
+
+ typedef typename std::vector<PyObject*>::const_iterator const_iterator;
+ typedef typename std::vector<PyObject*>::iterator iterator;
+ typedef typename Proxy::index_type index_type;
+ typedef typename Proxy::policies_type policies_type;
+
+ iterator
+ first_proxy(index_type i)
+ {
+ // Return the first proxy with index <= i
+ return boost::detail::lower_bound(
+ proxies.begin(), proxies.end(),
+ i, compare_proxy_index<Proxy>());
+ }
+
+ void
+ remove(Proxy& proxy)
+ {
+ // Remove a proxy
+ for (iterator iter = first_proxy(proxy.get_index());
+ iter != proxies.end(); ++iter)
+ {
+ if (&extract<Proxy&>(*iter)() == &proxy)
+ {
+ proxies.erase(iter);
+ break;
+ }
+ }
+ BOOST_PYTHON_INDEXING_CHECK_INVARIANT;
+ }
+
+ void
+ add(PyObject* prox)
+ {
+ BOOST_PYTHON_INDEXING_CHECK_INVARIANT;
+ // Add a proxy
+ proxies.insert(
+ first_proxy(extract<Proxy&>(prox)().get_index()), prox);
+ BOOST_PYTHON_INDEXING_CHECK_INVARIANT;
+ }
+
+ void
+ erase(index_type i, mpl::false_)
+ {
+ BOOST_PYTHON_INDEXING_CHECK_INVARIANT;
+ // Erase the proxy with index i
+ replace(i, i+1, 0);
+ BOOST_PYTHON_INDEXING_CHECK_INVARIANT;
+ }
+
+ void
+ erase(index_type i, mpl::true_)
+ {
+ BOOST_PYTHON_INDEXING_CHECK_INVARIANT;
+ // Erase the proxy with index i
+
+ iterator iter = first_proxy(i);
+ extract<Proxy&> p(*iter);
+
+ if (iter != proxies.end() && p().get_index() == i)
+ {
+ extract<Proxy&> p(*iter);
+ p().detach();
+ proxies.erase(iter);
+ }
+ BOOST_PYTHON_INDEXING_CHECK_INVARIANT;
+ }
+
+ void
+ erase(index_type from, index_type to)
+ {
+ // note: this cannot be called when container is not sliceable
+
+ BOOST_PYTHON_INDEXING_CHECK_INVARIANT;
+ // Erase all proxies with indexes from..to
+ replace(from, to, 0);
+ BOOST_PYTHON_INDEXING_CHECK_INVARIANT;
+ }
+
+ void
+ replace(
+ index_type from,
+ index_type to,
+ typename std::vector<PyObject*>::size_type len)
+ {
+ // note: this cannot be called when container is not sliceable
+
+ BOOST_PYTHON_INDEXING_CHECK_INVARIANT;
+ // Erase all proxies with indexes from..to.
+ // Adjust the displaced indexes such that the
+ // final effect is that we have inserted *len*
+ // number of proxies in the vacated region. This
+ // procedure involves adjusting the indexes of
+ // the proxies.
+
+ iterator left = first_proxy(from);
+ iterator right = proxies.end(); // we'll adjust this later
+
+ for (iterator iter = left; iter != right; ++iter)
+ {
+ if (extract<Proxy&>(*iter)().get_index() > to)
+ {
+ right = iter; // adjust right
+ break;
+ }
+ extract<Proxy&> p(*iter);
+ p().detach();
+ }
+
+ typename std::vector<PyObject*>::size_type
+ offset = left-proxies.begin();
+ proxies.erase(left, right);
+ right = proxies.begin()+offset;
+
+ while (right != proxies.end())
+ {
+ typedef typename Proxy::container_type::difference_type difference_type;
+ extract<Proxy&> p(*right);
+ p().set_index(
+ extract<Proxy&>(*right)().get_index()
+ - (difference_type(to) - from - len)
+ );
+
+ ++right;
+ }
+ BOOST_PYTHON_INDEXING_CHECK_INVARIANT;
+ }
+
+ PyObject*
+ find(index_type i)
+ {
+ BOOST_PYTHON_INDEXING_CHECK_INVARIANT;
+ // Find the proxy with *exact* index i.
+ // Return 0 (null) if no proxy with the
+ // given index is found.
+ iterator iter = first_proxy(i);
+ if (iter != proxies.end()
+ && extract<Proxy&>(*iter)().get_index() == i)
+ {
+ BOOST_PYTHON_INDEXING_CHECK_INVARIANT;
+ return *iter;
+ }
+ BOOST_PYTHON_INDEXING_CHECK_INVARIANT;
+ return 0;
+ }
+
+ typename std::vector<PyObject*>::size_type
+ size() const
+ {
+ BOOST_PYTHON_INDEXING_CHECK_INVARIANT;
+ // How many proxies are there so far?
+ return proxies.size();
+ }
+
+ private:
+
+#if !defined(NDEBUG)
+ void
+ check_invariant() const
+ {
+ for (const_iterator i = proxies.begin(); i != proxies.end(); ++i)
+ {
+ if ((*i)->ob_refcnt <= 0)
+ {
+ PyErr_SetString(PyExc_RuntimeError,
+ "Invariant: Proxy vector in an inconsistent state");
+ throw_error_already_set();
+ }
+
+ if (i+1 != proxies.end())
+ {
+ if (extract<Proxy&>(*(i+1))().get_index() ==
+ extract<Proxy&>(*(i))().get_index())
+ {
+ PyErr_SetString(PyExc_RuntimeError,
+ "Invariant: Proxy vector in an inconsistent state (duplicate proxy)");
+ throw_error_already_set();
+ }
+ }
+ }
+ }
+#endif
+
+ std::vector<PyObject*> proxies;
+ };
+
+ // proxy_links holds a map of Container pointers (keys)
+ // with proxy_group(s) (data). Various functions manage
+ // the addition, removal and searching of proxies from
+ // the map.
+ //
+ template <class Proxy, class Container>
+ class proxy_links
+ {
+ public:
+
+ typedef std::map<Container*, proxy_group<Proxy> > links_t;
+ typedef typename Proxy::index_type index_type;
+
+ void
+ remove(Proxy& proxy)
+ {
+ // Remove a proxy.
+ typename links_t::iterator r = links.find(&proxy.get_container());
+ if (r != links.end())
+ {
+ r->second.remove(proxy);
+ if (r->second.size() == 0)
+ links.erase(r);
+ }
+ }
+
+ void
+ add(PyObject* prox, Container& container)
+ {
+ // Add a proxy
+ links[&container].add(prox);
+ }
+
+ template <class NoSlice>
+ void erase(Container& container, index_type i, NoSlice no_slice)
+ {
+ // Erase the proxy with index i
+ typename links_t::iterator r = links.find(&container);
+ if (r != links.end())
+ {
+ r->second.erase(i, no_slice);
+ if (r->second.size() == 0)
+ links.erase(r);
+ }
+ }
+
+ void
+ erase(Container& container, index_type from, index_type to)
+ {
+ // Erase all proxies with indexes from..to
+ typename links_t::iterator r = links.find(&container);
+ if (r != links.end())
+ {
+ r->second.erase(from, to);
+ if (r->second.size() == 0)
+ links.erase(r);
+ }
+ }
+
+ void
+ replace(
+ Container& container,
+ index_type from, index_type to, index_type len)
+ {
+ // Erase all proxies with indexes from..to.
+ // Adjust the displaced indexes such that the
+ // final effect is that we have inserted *len*
+ // number of proxies in the vacated region. This
+ // procedure involves adjusting the indexes of
+ // the proxies.
+
+ typename links_t::iterator r = links.find(&container);
+ if (r != links.end())
+ {
+ r->second.replace(from, to, len);
+ if (r->second.size() == 0)
+ links.erase(r);
+ }
+ }
+
+ PyObject*
+ find(Container& container, index_type i)
+ {
+ // Find the proxy with *exact* index i.
+ // Return 0 (null) if no proxy with the given
+ // index is found.
+ typename links_t::iterator r = links.find(&container);
+ if (r != links.end())
+ return r->second.find(i);
+ return 0;
+ }
+
+ private:
+
+ links_t links;
+ };
+
+ // container_element is our container proxy class.
+ // This class acts like a smart pointer to a container
+ // element. The class holds an index and a reference to
+ // a container. Dereferencing the smart pointer will
+ // retrieve the nth (index) element from the container.
+ //
+ // A container_element can also be detached from the
+ // container. In such a detached state, the container_element
+ // holds a copy of the nth (index) element, which it
+ // returns when dereferenced.
+ //
+ template <class Container, class Index, class Policies>
+ class container_element
+ {
+ public:
+
+ typedef Index index_type;
+ typedef Container container_type;
+ typedef typename Policies::data_type element_type;
+ typedef Policies policies_type;
+ typedef container_element<Container, Index, Policies> self_t;
+ typedef proxy_group<self_t> links_type;
+
+ container_element(object container, Index index)
+ : ptr()
+ , container(container)
+ , index(index)
+ {
+ }
+
+ container_element(container_element const& ce)
+ : ptr(ce.ptr.get() == 0 ? 0 : new element_type(*ce.ptr.get()))
+ , container(ce.container)
+ , index(ce.index)
+ {
+ }
+
+ ~container_element()
+ {
+ if (!is_detached())
+ get_links().remove(*this);
+ }
+
+ element_type& operator*() const
+ {
+ if (is_detached())
+ return *get_pointer(ptr);
+ return Policies::get_item(get_container(), index);
+ }
+
+ element_type* get() const
+ {
+ if (is_detached())
+ return get_pointer(ptr);
+ return &Policies::get_item(get_container(), index);
+ }
+
+ void
+ detach()
+ {
+ if (!is_detached())
+ {
+ ptr.reset(
+ new element_type(
+ Policies::get_item(get_container(), index)));
+ container = object(); // free container. reset it to None
+ }
+ }
+
+ bool
+ is_detached() const
+ {
+ return get_pointer(ptr) != 0;
+ }
+
+ Container&
+ get_container() const
+ {
+ return extract<Container&>(container)();
+ }
+
+ Index
+ get_index() const
+ {
+ return index;
+ }
+
+ void
+ set_index(Index i)
+ {
+ index = i;
+ }
+
+ static proxy_links<self_t, Container>&
+ get_links()
+ {
+ // All container_element(s) maintain links to
+ // its container in a global map (see proxy_links).
+ // This global "links" map is a singleton.
+
+ static proxy_links<self_t, Container> links;
+ return links; // singleton
+ }
+
+ private:
+
+ container_element& operator=(container_element const& ce);
+
+ scoped_ptr<element_type> ptr;
+ object container;
+ Index index;
+ };
+
+ template <
+ class Container
+ , class DerivedPolicies
+ , class ContainerElement
+ , class Index
+ >
+ struct no_proxy_helper
+ {
+ static void
+ register_container_element()
+ {
+ }
+
+ template <class DataType>
+ static object
+ base_get_item_helper(DataType const& p, mpl::true_)
+ {
+ return object(ptr(p));
+ }
+
+ template <class DataType>
+ static object
+ base_get_item_helper(DataType const& x, mpl::false_)
+ {
+ return object(x);
+ }
+
+ static object
+ base_get_item_(back_reference<Container&> const& container, PyObject* i)
+ {
+ return base_get_item_helper(
+ DerivedPolicies::get_item(
+ container.get(), DerivedPolicies::
+ convert_index(container.get(), i))
+ , is_pointer<BOOST_DEDUCED_TYPENAME Container::value_type>()
+ );
+ }
+
+ static void
+ base_replace_indexes(
+ Container& /*container*/, Index /*from*/,
+ Index /*to*/, Index /*n*/)
+ {
+ }
+
+ template <class NoSlice>
+ static void
+ base_erase_index(
+ Container& /*container*/, Index /*i*/, NoSlice /*no_slice*/)
+ {
+ }
+
+ static void
+ base_erase_indexes(Container& /*container*/, Index /*from*/, Index /*to*/)
+ {
+ }
+ };
+
+ template <
+ class Container
+ , class DerivedPolicies
+ , class ContainerElement
+ , class Index
+ >
+ struct proxy_helper
+ {
+ static void
+ register_container_element()
+ {
+ register_ptr_to_python<ContainerElement>();
+ }
+
+ static object
+ base_get_item_(back_reference<Container&> const& container, PyObject* i)
+ {
+ // Proxy
+ Index idx = DerivedPolicies::convert_index(container.get(), i);
+
+ if (PyObject* shared =
+ ContainerElement::get_links().find(container.get(), idx))
+ {
+ handle<> h(python::borrowed(shared));
+ return object(h);
+ }
+ else
+ {
+ object prox(ContainerElement(container.source(), idx));
+ ContainerElement::
+ get_links().add(prox.ptr(), container.get());
+ return prox;
+ }
+ }
+
+ static void
+ base_replace_indexes(
+ Container& container, Index from,
+ Index to, Index n)
+ {
+ ContainerElement::get_links().replace(container, from, to, n);
+ }
+
+ template <class NoSlice>
+ static void
+ base_erase_index(
+ Container& container, Index i, NoSlice no_slice)
+ {
+ ContainerElement::get_links().erase(container, i, no_slice);
+ }
+
+ static void
+ base_erase_indexes(
+ Container& container, Index from, Index to)
+ {
+ ContainerElement::get_links().erase(container, from, to);
+ }
+ };
+
+ template <
+ class Container
+ , class DerivedPolicies
+ , class ProxyHandler
+ , class Data
+ , class Index
+ >
+ struct slice_helper
+ {
+ static object
+ base_get_slice(Container& container, PySliceObject* slice)
+ {
+ Index from, to;
+ base_get_slice_data(container, slice, from, to);
+ return DerivedPolicies::get_slice(container, from, to);
+ }
+
+ static void
+ base_get_slice_data(
+ Container& container, PySliceObject* slice, Index& from_, Index& to_)
+ {
+ if (Py_None != slice->step) {
+ PyErr_SetString( PyExc_IndexError, "slice step size not supported.");
+ throw_error_already_set();
+ }
+
+ Index min_index = DerivedPolicies::get_min_index(container);
+ Index max_index = DerivedPolicies::get_max_index(container);
+
+ if (Py_None == slice->start) {
+ from_ = min_index;
+ }
+ else {
+ long from = extract<long>( slice->start);
+ if (from < 0) // Negative slice index
+ from += max_index;
+ if (from < 0) // Clip lower bounds to zero
+ from = 0;
+ from_ = boost::numeric_cast<Index>(from);
+ if (from_ > max_index) // Clip upper bounds to max_index.
+ from_ = max_index;
+ }
+
+ if (Py_None == slice->stop) {
+ to_ = max_index;
+ }
+ else {
+ long to = extract<long>( slice->stop);
+ if (to < 0)
+ to += max_index;
+ if (to < 0)
+ to = 0;
+ to_ = boost::numeric_cast<Index>(to);
+ if (to_ > max_index)
+ to_ = max_index;
+ }
+ }
+
+ static void
+ base_set_slice(Container& container, PySliceObject* slice, PyObject* v)
+ {
+ Index from, to;
+ base_get_slice_data(container, slice, from, to);
+
+ extract<Data&> elem(v);
+ // try if elem is an exact Data
+ if (elem.check())
+ {
+ ProxyHandler::base_replace_indexes(container, from, to, 1);
+ DerivedPolicies::set_slice(container, from, to, elem());
+ }
+ else
+ {
+ // try to convert elem to Data
+ extract<Data> elem(v);
+ if (elem.check())
+ {
+ ProxyHandler::base_replace_indexes(container, from, to, 1);
+ DerivedPolicies::set_slice(container, from, to, elem());
+ }
+ else
+ {
+ // Otherwise, it must be a list or some container
+ handle<> l_(python::borrowed(v));
+ object l(l_);
+
+ std::vector<Data> temp;
+ for (int i = 0; i < l.attr("__len__")(); i++)
+ {
+ object elem(l[i]);
+ extract<Data const&> x(elem);
+ // try if elem is an exact Data type
+ if (x.check())
+ {
+ temp.push_back(x());
+ }
+ else
+ {
+ // try to convert elem to Data type
+ extract<Data> x(elem);
+ if (x.check())
+ {
+ temp.push_back(x());
+ }
+ else
+ {
+ PyErr_SetString(PyExc_TypeError,
+ "Invalid sequence element");
+ throw_error_already_set();
+ }
+ }
+ }
+
+ ProxyHandler::base_replace_indexes(container, from, to,
+ temp.end()-temp.begin());
+ DerivedPolicies::set_slice(container, from, to,
+ temp.begin(), temp.end());
+ }
+ }
+ }
+
+ static void
+ base_delete_slice(Container& container, PySliceObject* slice)
+ {
+ Index from, to;
+ base_get_slice_data(container, slice, from, to);
+ ProxyHandler::base_erase_indexes(container, from, to);
+ DerivedPolicies::delete_slice(container, from, to);
+ }
+ };
+
+ template <
+ class Container
+ , class DerivedPolicies
+ , class ProxyHandler
+ , class Data
+ , class Index
+ >
+ struct no_slice_helper
+ {
+ static void
+ slicing_not_suported()
+ {
+ PyErr_SetString(PyExc_RuntimeError, "Slicing not supported");
+ throw_error_already_set();
+ }
+
+ static object
+ base_get_slice(Container& /*container*/, PySliceObject* /*slice*/)
+ {
+ slicing_not_suported();
+ return object();
+ }
+
+ static void
+ base_set_slice(Container& /*container*/, PySliceObject* /*slice*/, PyObject* /*v*/)
+ {
+ slicing_not_suported();
+ }
+
+ static void
+ base_delete_slice(Container& /*container*/, PySliceObject* /*slice*/)
+ {
+ slicing_not_suported();
+ }
+ };
+
+#ifdef BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
+}} // namespace python::detail
+#endif
+
+ template <class Container, class Index, class Policies>
+ inline typename Policies::data_type*
+ get_pointer(
+ python::detail::container_element<Container, Index, Policies> const& p)
+ {
+ // Get the pointer of a container_element smart pointer
+ return p.get();
+ }
+
+#ifndef BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
+ // Don't hide these other get_pointer overloads
+ using boost::python::get_pointer;
+ using boost::get_pointer;
+}} // namespace python::detail
+#endif
+
+} // namespace boost
+
+#endif // INDEXING_SUITE_DETAIL_JDG20036_HPP
diff --git a/boost/boost/python/suite/indexing/indexing_suite.hpp b/boost/boost/python/suite/indexing/indexing_suite.hpp
new file mode 100644
index 00000000000..0ebb755aef8
--- /dev/null
+++ b/boost/boost/python/suite/indexing/indexing_suite.hpp
@@ -0,0 +1,299 @@
+// (C) Copyright Joel de Guzman 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)
+
+#ifndef INDEXING_SUITE_JDG20036_HPP
+# define INDEXING_SUITE_JDG20036_HPP
+
+# include <boost/python/class.hpp>
+# include <boost/python/def_visitor.hpp>
+# include <boost/python/register_ptr_to_python.hpp>
+# include <boost/python/suite/indexing/detail/indexing_suite_detail.hpp>
+# include <boost/python/return_internal_reference.hpp>
+# include <boost/python/iterator.hpp>
+# include <boost/mpl/or.hpp>
+# include <boost/mpl/not.hpp>
+# include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace python {
+
+ // indexing_suite class. This class is the facade class for
+ // the management of C++ containers intended to be integrated
+ // to Python. The objective is make a C++ container look and
+ // feel and behave exactly as we'd expect a Python container.
+ // By default indexed elements are returned by proxy. This can be
+ // disabled by supplying *true* in the NoProxy template parameter.
+ //
+ // Derived classes provide the hooks needed by the indexing_suite
+ // to do its job:
+ //
+ // static data_type&
+ // get_item(Container& container, index_type i);
+ //
+ // static object
+ // get_slice(Container& container, index_type from, index_type to);
+ //
+ // static void
+ // set_item(Container& container, index_type i, data_type const& v);
+ //
+ // static void
+ // set_slice(
+ // Container& container, index_type from,
+ // index_type to, data_type const& v
+ // );
+ //
+ // template <class Iter>
+ // static void
+ // set_slice(Container& container, index_type from,
+ // index_type to, Iter first, Iter last
+ // );
+ //
+ // static void
+ // delete_item(Container& container, index_type i);
+ //
+ // static void
+ // delete_slice(Container& container, index_type from, index_type to);
+ //
+ // static size_t
+ // size(Container& container);
+ //
+ // template <class T>
+ // static bool
+ // contains(Container& container, T const& val);
+ //
+ // static index_type
+ // convert_index(Container& container, PyObject* i);
+ //
+ // static index_type
+ // adjust_index(index_type current, index_type from,
+ // index_type to, size_type len
+ // );
+ //
+ // Most of these policies are self explanatory. convert_index and
+ // adjust_index, however, deserves some explanation.
+ //
+ // convert_index converts an Python index into a C++ index that the
+ // container can handle. For instance, negative indexes in Python, by
+ // convention, indexes from the right (e.g. C[-1] indexes the rightmost
+ // element in C). convert_index should handle the necessary conversion
+ // for the C++ container (e.g. convert -1 to C.size()-1). convert_index
+ // should also be able to convert the type of the index (A dynamic Python
+ // type) to the actual type that the C++ container expects.
+ //
+ // When a container expands or contracts, held indexes to its elements
+ // must be adjusted to follow the movement of data. For instance, if
+ // we erase 3 elements, starting from index 0 from a 5 element vector,
+ // what used to be at index 4 will now be at index 1:
+ //
+ // [a][b][c][d][e] ---> [d][e]
+ // ^ ^
+ // 4 1
+ //
+ // adjust_index takes care of the adjustment. Given a current index,
+ // the function should return the adjusted index when data in the
+ // container at index from..to is replaced by *len* elements.
+ //
+
+ template <
+ class Container
+ , class DerivedPolicies
+ , bool NoProxy = false
+ , bool NoSlice = false
+ , class Data = typename Container::value_type
+ , class Index = typename Container::size_type
+ , class Key = typename Container::value_type
+ >
+ class indexing_suite
+ : public def_visitor<
+ indexing_suite<
+ Container
+ , DerivedPolicies
+ , NoProxy
+ , NoSlice
+ , Data
+ , Index
+ , Key
+ > >
+ {
+ private:
+
+ typedef mpl::or_<
+ mpl::bool_<NoProxy>
+ , mpl::not_<is_class<Data> >
+ , typename mpl::or_<
+ is_same<Data, std::string>
+ , is_same<Data, std::complex<float> >
+ , is_same<Data, std::complex<double> >
+ , is_same<Data, std::complex<long double> > >::type>
+ no_proxy;
+
+ typedef detail::container_element<Container, Index, DerivedPolicies>
+ container_element_t;
+
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ struct return_policy : return_internal_reference<> {};
+#else
+ typedef return_internal_reference<> return_policy;
+#endif
+
+ typedef typename mpl::if_<
+ no_proxy
+ , iterator<Container>
+ , iterator<Container, return_policy> >::type
+ def_iterator;
+
+ typedef typename mpl::if_<
+ no_proxy
+ , detail::no_proxy_helper<
+ Container
+ , DerivedPolicies
+ , container_element_t
+ , Index>
+ , detail::proxy_helper<
+ Container
+ , DerivedPolicies
+ , container_element_t
+ , Index> >::type
+ proxy_handler;
+
+ typedef typename mpl::if_<
+ mpl::bool_<NoSlice>
+ , detail::no_slice_helper<
+ Container
+ , DerivedPolicies
+ , proxy_handler
+ , Data
+ , Index>
+ , detail::slice_helper<
+ Container
+ , DerivedPolicies
+ , proxy_handler
+ , Data
+ , Index> >::type
+ slice_handler;
+
+ public:
+
+ template <class Class>
+ void visit(Class& cl) const
+ {
+ // Hook into the class_ generic visitation .def function
+ proxy_handler::register_container_element();
+
+ cl
+ .def("__len__", base_size)
+ .def("__setitem__", &base_set_item)
+ .def("__delitem__", &base_delete_item)
+ .def("__getitem__", &base_get_item)
+ .def("__contains__", &base_contains)
+ .def("__iter__", def_iterator())
+ ;
+
+ DerivedPolicies::extension_def(cl);
+ }
+
+ template <class Class>
+ static void
+ extension_def(Class& cl)
+ {
+ // default.
+ // no more extensions
+ }
+
+ private:
+
+ static object
+ base_get_item(back_reference<Container&> container, PyObject* i)
+ {
+ if (PySlice_Check(i))
+ return slice_handler::base_get_slice(
+ container.get(), reinterpret_cast<PySliceObject*>(i));
+
+ return proxy_handler::base_get_item_(container, i);
+ }
+
+ static void
+ base_set_item(Container& container, PyObject* i, PyObject* v)
+ {
+ if (PySlice_Check(i))
+ {
+ slice_handler::base_set_slice(container,
+ reinterpret_cast<PySliceObject*>(i), v);
+ }
+ else
+ {
+ extract<Data&> elem(v);
+ // try if elem is an exact Data
+ if (elem.check())
+ {
+ DerivedPolicies::
+ set_item(container,
+ DerivedPolicies::
+ convert_index(container, i), elem());
+ }
+ else
+ {
+ // try to convert elem to Data
+ extract<Data> elem(v);
+ if (elem.check())
+ {
+ DerivedPolicies::
+ set_item(container,
+ DerivedPolicies::
+ convert_index(container, i), elem());
+ }
+ else
+ {
+ PyErr_SetString(PyExc_TypeError, "Invalid assignment");
+ throw_error_already_set();
+ }
+ }
+ }
+ }
+
+ static void
+ base_delete_item(Container& container, PyObject* i)
+ {
+ if (PySlice_Check(i))
+ {
+ slice_handler::base_delete_slice(
+ container, reinterpret_cast<PySliceObject*>(i));
+ return;
+ }
+
+ Index index = DerivedPolicies::convert_index(container, i);
+ proxy_handler::base_erase_index(container, index, mpl::bool_<NoSlice>());
+ DerivedPolicies::delete_item(container, index);
+ }
+
+ static size_t
+ base_size(Container& container)
+ {
+ return DerivedPolicies::size(container);
+ }
+
+ static bool
+ base_contains(Container& container, PyObject* key)
+ {
+ extract<Key const&> x(key);
+ // try if key is an exact Key type
+ if (x.check())
+ {
+ return DerivedPolicies::contains(container, x());
+ }
+ else
+ {
+ // try to convert key to Key type
+ extract<Key> x(key);
+ if (x.check())
+ return DerivedPolicies::contains(container, x());
+ else
+ return false;
+ }
+ }
+ };
+
+}} // namespace boost::python
+
+#endif // INDEXING_SUITE_JDG20036_HPP
diff --git a/boost/boost/python/suite/indexing/map_indexing_suite.hpp b/boost/boost/python/suite/indexing/map_indexing_suite.hpp
new file mode 100644
index 00000000000..7fbad4cace3
--- /dev/null
+++ b/boost/boost/python/suite/indexing/map_indexing_suite.hpp
@@ -0,0 +1,181 @@
+// (C) Copyright Joel de Guzman 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)
+
+#ifndef MAP_INDEXING_SUITE_JDG20038_HPP
+# define MAP_INDEXING_SUITE_JDG20038_HPP
+
+# include <boost/python/suite/indexing/indexing_suite.hpp>
+# include <boost/python/iterator.hpp>
+# include <boost/python/call_method.hpp>
+# include <boost/python/tuple.hpp>
+
+namespace boost { namespace python {
+
+ // Forward declaration
+ template <class Container, bool NoProxy, class DerivedPolicies>
+ class map_indexing_suite;
+
+ namespace detail
+ {
+ template <class Container, bool NoProxy>
+ class final_map_derived_policies
+ : public map_indexing_suite<Container,
+ NoProxy, final_map_derived_policies<Container, NoProxy> > {};
+ }
+
+ // The map_indexing_suite class is a predefined indexing_suite derived
+ // class for wrapping std::map (and std::map like) classes. It provides
+ // all the policies required by the indexing_suite (see indexing_suite).
+ // Example usage:
+ //
+ // class X {...};
+ //
+ // ...
+ //
+ // class_<std::map<std::string, X> >("XMap")
+ // .def(map_indexing_suite<std::map<std::string, X> >())
+ // ;
+ //
+ // By default indexed elements are returned by proxy. This can be
+ // disabled by supplying *true* in the NoProxy template parameter.
+ //
+ template <
+ class Container,
+ bool NoProxy = false,
+ class DerivedPolicies
+ = detail::final_map_derived_policies<Container, NoProxy> >
+ class map_indexing_suite
+ : public indexing_suite<
+ Container
+ , DerivedPolicies
+ , NoProxy
+ , true
+ , typename Container::value_type::second_type
+ , typename Container::key_type
+ , typename Container::key_type
+ >
+ {
+ public:
+
+ typedef typename Container::value_type value_type;
+ typedef typename Container::value_type::second_type data_type;
+ typedef typename Container::key_type key_type;
+ typedef typename Container::key_type index_type;
+ typedef typename Container::size_type size_type;
+ typedef typename Container::difference_type difference_type;
+
+ template <class Class>
+ static void
+ extension_def(Class& cl)
+ {
+ // Wrap the map's element (value_type)
+ std::string elem_name = "map_indexing_suite_";
+ object class_name(cl.attr("__name__"));
+ extract<std::string> class_name_extractor(class_name);
+ elem_name += class_name_extractor();
+ elem_name += "_entry";
+
+ typedef typename mpl::if_<
+ mpl::and_<is_class<data_type>, mpl::bool_<!NoProxy> >
+ , return_internal_reference<>
+ , default_call_policies
+ >::type get_data_return_policy;
+
+ class_<value_type>(elem_name.c_str())
+ .def("__repr__", &DerivedPolicies::print_elem)
+ .def("data", &DerivedPolicies::get_data, get_data_return_policy())
+ .def("key", &DerivedPolicies::get_key)
+ ;
+ }
+
+ static object
+ print_elem(typename Container::value_type const& e)
+ {
+ return "(%s, %s)" % python::make_tuple(e.first, e.second);
+ }
+
+ static
+ typename mpl::if_<
+ mpl::and_<is_class<data_type>, mpl::bool_<!NoProxy> >
+ , data_type&
+ , data_type
+ >::type
+ get_data(typename Container::value_type& e)
+ {
+ return e.second;
+ }
+
+ static typename Container::key_type
+ get_key(typename Container::value_type& e)
+ {
+ return e.first;
+ }
+
+ static data_type&
+ get_item(Container& container, index_type i_)
+ {
+ typename Container::iterator i = container.find(i_);
+ if (i == container.end())
+ {
+ PyErr_SetString(PyExc_KeyError, "Invalid key");
+ throw_error_already_set();
+ }
+ return i->second;
+ }
+
+ static void
+ set_item(Container& container, index_type i, data_type const& v)
+ {
+ container[i] = v;
+ }
+
+ static void
+ delete_item(Container& container, index_type i)
+ {
+ container.erase(i);
+ }
+
+ static size_t
+ size(Container& container)
+ {
+ return container.size();
+ }
+
+ static bool
+ contains(Container& container, key_type const& key)
+ {
+ return container.find(key) != container.end();
+ }
+
+ static bool
+ compare_index(Container& container, index_type a, index_type b)
+ {
+ return container.key_comp()(a, b);
+ }
+
+ static index_type
+ convert_index(Container& /*container*/, PyObject* i_)
+ {
+ extract<key_type const&> i(i_);
+ if (i.check())
+ {
+ return i();
+ }
+ else
+ {
+ extract<key_type> i(i_);
+ if (i.check())
+ return i();
+ }
+
+ PyErr_SetString(PyExc_TypeError, "Invalid index type");
+ throw_error_already_set();
+ return index_type();
+ }
+ };
+
+}} // namespace boost::python
+
+#endif // MAP_INDEXING_SUITE_JDG20038_HPP
diff --git a/boost/boost/python/suite/indexing/vector_indexing_suite.hpp b/boost/boost/python/suite/indexing/vector_indexing_suite.hpp
new file mode 100644
index 00000000000..34c29ecc6ff
--- /dev/null
+++ b/boost/boost/python/suite/indexing/vector_indexing_suite.hpp
@@ -0,0 +1,242 @@
+// (C) Copyright Joel de Guzman 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)
+
+#ifndef VECTOR_INDEXING_SUITE_JDG20036_HPP
+# define VECTOR_INDEXING_SUITE_JDG20036_HPP
+
+# include <boost/python/suite/indexing/indexing_suite.hpp>
+# include <boost/python/suite/indexing/container_utils.hpp>
+# include <boost/python/iterator.hpp>
+
+namespace boost { namespace python {
+
+ // Forward declaration
+ template <class Container, bool NoProxy, class DerivedPolicies>
+ class vector_indexing_suite;
+
+ namespace detail
+ {
+ template <class Container, bool NoProxy>
+ class final_vector_derived_policies
+ : public vector_indexing_suite<Container,
+ NoProxy, final_vector_derived_policies<Container, NoProxy> > {};
+ }
+
+ // The vector_indexing_suite class is a predefined indexing_suite derived
+ // class for wrapping std::vector (and std::vector like) classes. It provides
+ // all the policies required by the indexing_suite (see indexing_suite).
+ // Example usage:
+ //
+ // class X {...};
+ //
+ // ...
+ //
+ // class_<std::vector<X> >("XVec")
+ // .def(vector_indexing_suite<std::vector<X> >())
+ // ;
+ //
+ // By default indexed elements are returned by proxy. This can be
+ // disabled by supplying *true* in the NoProxy template parameter.
+ //
+ template <
+ class Container,
+ bool NoProxy = false,
+ class DerivedPolicies
+ = detail::final_vector_derived_policies<Container, NoProxy> >
+ class vector_indexing_suite
+ : public indexing_suite<Container, DerivedPolicies, NoProxy>
+ {
+ public:
+
+ typedef typename Container::value_type data_type;
+ typedef typename Container::value_type key_type;
+ typedef typename Container::size_type index_type;
+ typedef typename Container::size_type size_type;
+ typedef typename Container::difference_type difference_type;
+
+ template <class Class>
+ static void
+ extension_def(Class& cl)
+ {
+ cl
+ .def("append", &base_append)
+ .def("extend", &base_extend)
+ ;
+ }
+
+ static
+ typename mpl::if_<
+ is_class<data_type>
+ , data_type&
+ , data_type
+ >::type
+ get_item(Container& container, index_type i)
+ {
+ return container[i];
+ }
+
+ static object
+ get_slice(Container& container, index_type from, index_type to)
+ {
+ if (from > to)
+ return object(Container());
+ return object(Container(container.begin()+from, container.begin()+to));
+ }
+
+ static void
+ set_item(Container& container, index_type i, data_type const& v)
+ {
+ container[i] = v;
+ }
+
+ static void
+ set_slice(Container& container, index_type from,
+ index_type to, data_type const& v)
+ {
+ if (from > to) {
+ return;
+ }
+ else {
+ container.erase(container.begin()+from, container.begin()+to);
+ container.insert(container.begin()+from, v);
+ }
+ }
+
+ template <class Iter>
+ static void
+ set_slice(Container& container, index_type from,
+ index_type to, Iter first, Iter last)
+ {
+ if (from > to) {
+ container.insert(container.begin()+from, first, last);
+ }
+ else {
+ container.erase(container.begin()+from, container.begin()+to);
+ container.insert(container.begin()+from, first, last);
+ }
+ }
+
+ static void
+ delete_item(Container& container, index_type i)
+ {
+ container.erase(container.begin()+i);
+ }
+
+ static void
+ delete_slice(Container& container, index_type from, index_type to)
+ {
+ if (from > to) {
+ // A null-op.
+ return;
+ }
+ container.erase(container.begin()+from, container.begin()+to);
+ }
+
+ static size_t
+ size(Container& container)
+ {
+ return container.size();
+ }
+
+ static bool
+ contains(Container& container, key_type const& key)
+ {
+ return std::find(container.begin(), container.end(), key)
+ != container.end();
+ }
+
+ static index_type
+ get_min_index(Container& /*container*/)
+ {
+ return 0;
+ }
+
+ static index_type
+ get_max_index(Container& container)
+ {
+ return container.size();
+ }
+
+ static bool
+ compare_index(Container& /*container*/, index_type a, index_type b)
+ {
+ return a < b;
+ }
+
+ static index_type
+ convert_index(Container& container, PyObject* i_)
+ {
+ extract<long> i(i_);
+ if (i.check())
+ {
+ long index = i();
+ if (index < 0)
+ index += DerivedPolicies::size(container);
+ if (index >= long(container.size()) || index < 0)
+ {
+ PyErr_SetString(PyExc_IndexError, "Index out of range");
+ throw_error_already_set();
+ }
+ return index;
+ }
+
+ PyErr_SetString(PyExc_TypeError, "Invalid index type");
+ throw_error_already_set();
+ return index_type();
+ }
+
+ static void
+ append(Container& container, data_type const& v)
+ {
+ container.push_back(v);
+ }
+
+ template <class Iter>
+ static void
+ extend(Container& container, Iter first, Iter last)
+ {
+ container.insert(container.end(), first, last);
+ }
+
+ private:
+
+ static void
+ base_append(Container& container, object v)
+ {
+ extract<data_type&> elem(v);
+ // try if elem is an exact Data
+ if (elem.check())
+ {
+ DerivedPolicies::append(container, elem());
+ }
+ else
+ {
+ // try to convert elem to data_type
+ extract<data_type> elem(v);
+ if (elem.check())
+ {
+ DerivedPolicies::append(container, elem());
+ }
+ else
+ {
+ PyErr_SetString(PyExc_TypeError,
+ "Attempting to append an invalid type");
+ throw_error_already_set();
+ }
+ }
+ }
+
+ static void
+ base_extend(Container& container, object v)
+ {
+ std::vector<data_type> temp;
+ container_utils::extend_container(temp, v);
+ DerivedPolicies::extend(container, temp.begin(), temp.end());
+ }
+ };
+
+}} // namespace boost::python
+
+#endif // VECTOR_INDEXING_SUITE_JDG20036_HPP
diff --git a/boost/boost/python/tag.hpp b/boost/boost/python/tag.hpp
new file mode 100644
index 00000000000..ccff9f1a17f
--- /dev/null
+++ b/boost/boost/python/tag.hpp
@@ -0,0 +1,18 @@
+// Copyright David Abrahams 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)
+#ifndef TAG_DWA2002720_HPP
+# define TAG_DWA2002720_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+namespace boost { namespace python {
+
+// used only to prevent argument-dependent lookup from finding the
+// wrong function in some cases. Cheaper than qualification.
+enum tag_t { tag };
+
+}} // namespace boost::python
+
+#endif // TAG_DWA2002720_HPP
diff --git a/boost/boost/python/to_python_converter.hpp b/boost/boost/python/to_python_converter.hpp
new file mode 100644
index 00000000000..b7dd3c3d8ae
--- /dev/null
+++ b/boost/boost/python/to_python_converter.hpp
@@ -0,0 +1,40 @@
+// Copyright David Abrahams 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)
+#ifndef TO_PYTHON_CONVERTER_DWA200221_HPP
+# define TO_PYTHON_CONVERTER_DWA200221_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+# include <boost/python/converter/registry.hpp>
+# include <boost/python/converter/as_to_python_function.hpp>
+# include <boost/python/type_id.hpp>
+
+namespace boost { namespace python {
+
+template <class T, class Conversion>
+struct to_python_converter
+{
+ to_python_converter();
+};
+
+//
+// implementation
+//
+
+template <class T, class Conversion>
+to_python_converter<T,Conversion>::to_python_converter()
+{
+ typedef converter::as_to_python_function<
+ T, Conversion
+ > normalized;
+
+ converter::registry::insert(
+ &normalized::convert
+ , type_id<T>());
+}
+
+}} // namespace boost::python
+
+#endif // TO_PYTHON_CONVERTER_DWA200221_HPP
diff --git a/boost/boost/python/to_python_indirect.hpp b/boost/boost/python/to_python_indirect.hpp
new file mode 100644
index 00000000000..a39b723d37a
--- /dev/null
+++ b/boost/boost/python/to_python_indirect.hpp
@@ -0,0 +1,103 @@
+// Copyright David Abrahams 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)
+#ifndef TO_PYTHON_INDIRECT_DWA200221_HPP
+# define TO_PYTHON_INDIRECT_DWA200221_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+# include <boost/python/object/pointer_holder.hpp>
+# include <boost/python/object/make_ptr_instance.hpp>
+
+# include <boost/python/detail/none.hpp>
+
+# include <boost/python/refcount.hpp>
+
+# include <boost/type_traits/is_pointer.hpp>
+# include <boost/type_traits/is_polymorphic.hpp>
+
+# include <boost/mpl/bool.hpp>
+
+# if defined(__ICL) && __ICL < 600
+# include <boost/shared_ptr.hpp>
+# else
+# include <memory>
+# endif
+
+namespace boost { namespace python {
+
+template <class T, class MakeHolder>
+struct to_python_indirect
+{
+ template <class U>
+ inline PyObject*
+ operator()(U const& ref) const
+ {
+ return this->execute(const_cast<U&>(ref), is_pointer<U>());
+ }
+
+ private:
+ template <class U>
+ inline PyObject* execute(U* ptr, mpl::true_) const
+ {
+ // No special NULL treatment for references
+ if (ptr == 0)
+ return python::detail::none();
+ else
+ return this->execute(*ptr, mpl::false_());
+ }
+
+ template <class U>
+ inline PyObject* execute(U const& x, mpl::false_) const
+ {
+ U* const p = &const_cast<U&>(x);
+ if (is_polymorphic<U>::value)
+ {
+ if (PyObject* o = detail::wrapper_base_::owner(p))
+ return incref(o);
+ }
+ return MakeHolder::execute(p);
+ }
+};
+
+//
+// implementations
+//
+namespace detail
+{
+ struct make_owning_holder
+ {
+ template <class T>
+ static PyObject* execute(T* p)
+ {
+ // can't use auto_ptr with Intel 5 and VC6 Dinkum library
+ // for some reason. We get link errors against the auto_ptr
+ // copy constructor.
+# if defined(__ICL) && __ICL < 600
+ typedef boost::shared_ptr<T> smart_pointer;
+# else
+ typedef std::auto_ptr<T> smart_pointer;
+# endif
+ typedef objects::pointer_holder<smart_pointer, T> holder_t;
+
+ smart_pointer ptr(const_cast<T*>(p));
+ return objects::make_ptr_instance<T, holder_t>::execute(ptr);
+ }
+ };
+
+ struct make_reference_holder
+ {
+ template <class T>
+ static PyObject* execute(T* p)
+ {
+ typedef objects::pointer_holder<T*, T> holder_t;
+ T* q = const_cast<T*>(p);
+ return objects::make_ptr_instance<T, holder_t>::execute(q);
+ }
+ };
+}
+
+}} // namespace boost::python
+
+#endif // TO_PYTHON_INDIRECT_DWA200221_HPP
diff --git a/boost/boost/python/to_python_value.hpp b/boost/boost/python/to_python_value.hpp
new file mode 100644
index 00000000000..7c350bb40f3
--- /dev/null
+++ b/boost/boost/python/to_python_value.hpp
@@ -0,0 +1,124 @@
+// Copyright David Abrahams 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)
+#ifndef TO_PYTHON_VALUE_DWA200221_HPP
+# define TO_PYTHON_VALUE_DWA200221_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+# include <boost/python/refcount.hpp>
+# include <boost/python/tag.hpp>
+
+# include <boost/python/converter/registry.hpp>
+# include <boost/python/converter/registered.hpp>
+# include <boost/python/converter/builtin_converters.hpp>
+# include <boost/python/converter/object_manager.hpp>
+# include <boost/python/converter/object_manager.hpp>
+# include <boost/python/converter/shared_ptr_to_python.hpp>
+
+# include <boost/python/detail/value_is_shared_ptr.hpp>
+# include <boost/python/detail/value_arg.hpp>
+
+# include <boost/type_traits/transform_traits.hpp>
+
+# include <boost/mpl/if.hpp>
+# include <boost/mpl/or.hpp>
+
+namespace boost { namespace python {
+
+namespace detail
+{
+ template <class T>
+ struct object_manager_to_python_value
+ {
+ typedef typename value_arg<T>::type argument_type;
+
+ PyObject* operator()(argument_type) const;
+
+ // This information helps make_getter() decide whether to try to
+ // return an internal reference or not. I don't like it much,
+ // but it will have to serve for now.
+ BOOST_STATIC_CONSTANT(bool, uses_registry = false);
+ };
+
+
+ template <class T>
+ struct registry_to_python_value
+ {
+ typedef typename value_arg<T>::type argument_type;
+
+ PyObject* operator()(argument_type) const;
+
+ // This information helps make_getter() decide whether to try to
+ // return an internal reference or not. I don't like it much,
+ // but it will have to serve for now.
+ BOOST_STATIC_CONSTANT(bool, uses_registry = true);
+ };
+
+ template <class T>
+ struct shared_ptr_to_python_value
+ {
+ typedef typename value_arg<T>::type argument_type;
+
+ PyObject* operator()(argument_type) const;
+
+ // This information helps make_getter() decide whether to try to
+ // return an internal reference or not. I don't like it much,
+ // but it will have to serve for now.
+ BOOST_STATIC_CONSTANT(bool, uses_registry = false);
+ };
+}
+
+template <class T>
+struct to_python_value
+ : mpl::if_<
+ detail::value_is_shared_ptr<T>
+ , detail::shared_ptr_to_python_value<T>
+ , typename mpl::if_<
+ mpl::or_<
+ converter::is_object_manager<T>
+ , converter::is_reference_to_object_manager<T>
+ >
+ , detail::object_manager_to_python_value<T>
+ , detail::registry_to_python_value<T>
+ >::type
+ >::type
+{
+};
+
+//
+// implementation
+//
+namespace detail
+{
+ template <class T>
+ inline PyObject* registry_to_python_value<T>::operator()(argument_type x) const
+ {
+ typedef converter::registered<argument_type> r;
+# if BOOST_WORKAROUND(__GNUC__, < 3)
+ // suppresses an ICE, somehow
+ (void)r::converters;
+# endif
+ return converter::registered<argument_type>::converters.to_python(&x);
+ }
+
+ template <class T>
+ inline PyObject* object_manager_to_python_value<T>::operator()(argument_type x) const
+ {
+ return python::upcast<PyObject>(
+ python::xincref(
+ get_managed_object(x, tag))
+ );
+ }
+
+ template <class T>
+ inline PyObject* shared_ptr_to_python_value<T>::operator()(argument_type x) const
+ {
+ return converter::shared_ptr_to_python(x);
+ }
+}
+
+}} // namespace boost::python
+
+#endif // TO_PYTHON_VALUE_DWA200221_HPP
diff --git a/boost/boost/python/tuple.hpp b/boost/boost/python/tuple.hpp
new file mode 100644
index 00000000000..babfb63f1e4
--- /dev/null
+++ b/boost/boost/python/tuple.hpp
@@ -0,0 +1,70 @@
+// Copyright David Abrahams 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)
+#ifndef TUPLE_20020706_HPP
+#define TUPLE_20020706_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+#include <boost/python/object.hpp>
+#include <boost/python/converter/pytype_object_mgr_traits.hpp>
+#include <boost/preprocessor/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+
+namespace boost { namespace python {
+
+namespace detail
+{
+ struct BOOST_PYTHON_DECL tuple_base : object
+ {
+ protected:
+ tuple_base();
+ tuple_base(object_cref sequence);
+
+ BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS(tuple_base, object)
+
+ private:
+ static detail::new_reference call(object const&);
+ };
+}
+
+class tuple : public detail::tuple_base
+{
+ typedef detail::tuple_base base;
+ public:
+ tuple() {}
+
+ template <class T>
+ explicit tuple(T const& sequence)
+ : base(object(sequence))
+ {
+ }
+
+ public: // implementation detail -- for internal use only
+ BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS(tuple, base)
+};
+
+//
+// Converter Specializations // $$$ JDG $$$ moved here to prevent
+// // G++ bug complaining specialization
+ // provided after instantiation
+namespace converter
+{
+ template <>
+ struct object_manager_traits<tuple>
+ : pytype_object_manager_traits<&PyTuple_Type,tuple>
+ {
+ };
+}
+
+// for completeness
+inline tuple make_tuple() { return tuple(); }
+
+# define BOOST_PP_ITERATION_PARAMS_1 (3, (1, BOOST_PYTHON_MAX_ARITY, <boost/python/detail/make_tuple.hpp>))
+# include BOOST_PP_ITERATE()
+
+}} // namespace boost::python
+
+#endif
+
diff --git a/boost/boost/python/type_id.hpp b/boost/boost/python/type_id.hpp
new file mode 100644
index 00000000000..559a38b5b3f
--- /dev/null
+++ b/boost/boost/python/type_id.hpp
@@ -0,0 +1,191 @@
+// Copyright David Abrahams 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)
+#ifndef TYPE_ID_DWA2002517_HPP
+# define TYPE_ID_DWA2002517_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+# include <boost/python/detail/msvc_typeinfo.hpp>
+# include <boost/operators.hpp>
+# include <typeinfo>
+# include <cstring>
+# include <boost/static_assert.hpp>
+# include <boost/detail/workaround.hpp>
+# include <boost/type_traits/same_traits.hpp>
+# include <boost/type_traits/broken_compiler_spec.hpp>
+
+# ifndef BOOST_PYTHON_HAVE_GCC_CP_DEMANGLE
+# if defined(__GNUC__) \
+ && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 1))) \
+ && !defined(__EDG_VERSION__)
+# define BOOST_PYTHON_HAVE_GCC_CP_DEMANGLE
+# endif
+# endif
+
+namespace boost { namespace python {
+
+// for this compiler at least, cross-shared-library type_info
+// comparisons don't work, so use typeid(x).name() instead. It's not
+// yet clear what the best default strategy is.
+# if (defined(__GNUC__) && __GNUC__ >= 3) \
+ || defined(_AIX) \
+ || ( defined(__sgi) && defined(__host_mips)) \
+ || (defined(__hpux) && defined(__HP_aCC)) \
+ || (defined(linux) && defined(__INTEL_COMPILER) && defined(__ICC))
+# define BOOST_PYTHON_TYPE_ID_NAME
+# endif
+
+#ifdef BOOST_PYTHON_HAVE_GCC_CP_DEMANGLE
+// Runtime detection of broken cxxabi::__cxa_demangle versions,
+// to avoid #ifdef clutter.
+bool cxxabi_cxa_demangle_is_broken();
+#define BOOST_PYTHON_HAVE_CXXABI_CXA_DEMANGLE_IS_BROKEN
+#endif
+
+// type ids which represent the same information as std::type_info
+// (i.e. the top-level reference and cv-qualifiers are stripped), but
+// which works across shared libraries.
+struct type_info : private totally_ordered<type_info>
+{
+ inline type_info(std::type_info const& = typeid(void));
+
+ inline bool operator<(type_info const& rhs) const;
+ inline bool operator==(type_info const& rhs) const;
+
+ char const* name() const;
+ friend BOOST_PYTHON_DECL std::ostream& operator<<(
+ std::ostream&, type_info const&);
+
+ private: // data members
+# ifdef BOOST_PYTHON_TYPE_ID_NAME
+ typedef char const* base_id_t;
+# else
+ typedef std::type_info const* base_id_t;
+# endif
+
+ base_id_t m_base_type;
+};
+
+# ifdef BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS
+# define BOOST_PYTHON_EXPLICIT_TT_DEF(T) ::boost::type<T>*
+# else
+# define BOOST_PYTHON_EXPLICIT_TT_DEF(T)
+# endif
+
+template <class T>
+inline type_info type_id(BOOST_EXPLICIT_TEMPLATE_TYPE(T))
+{
+ return type_info(
+# if !defined(_MSC_VER) \
+ || (!BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \
+ && !BOOST_WORKAROUND(BOOST_INTEL_CXX_VERSION, <= 700))
+ typeid(T)
+# else // strip the decoration which msvc and Intel mistakenly leave in
+ python::detail::msvc_typeid((boost::type<T>*)0)
+# endif
+ );
+}
+
+# if (defined(__EDG_VERSION__) && __EDG_VERSION__ < 245) \
+ || (defined(__sgi) && defined(_COMPILER_VERSION) && _COMPILER_VERSION <= 744)
+// Older EDG-based compilers seems to mistakenly distinguish "int" from
+// "signed int", etc., but only in typeid() expressions. However
+// though int == signed int, the "signed" decoration is propagated
+// down into template instantiations. Explicit specialization stops
+// that from taking hold.
+
+# define BOOST_PYTHON_SIGNED_INTEGRAL_TYPE_ID(T) \
+template <> \
+inline type_info type_id<T>(BOOST_PYTHON_EXPLICIT_TT_DEF(T)) \
+{ \
+ return type_info(typeid(T)); \
+}
+
+BOOST_PYTHON_SIGNED_INTEGRAL_TYPE_ID(short)
+BOOST_PYTHON_SIGNED_INTEGRAL_TYPE_ID(int)
+BOOST_PYTHON_SIGNED_INTEGRAL_TYPE_ID(long)
+// using Python's macro instead of Boost's - we don't seem to get the
+// config right all the time.
+# ifdef HAVE_LONG_LONG
+BOOST_PYTHON_SIGNED_INTEGRAL_TYPE_ID(long long)
+# endif
+# undef BOOST_PYTHON_SIGNED_INTEGRAL_TYPE_ID
+# endif
+
+//
+inline type_info::type_info(std::type_info const& id)
+ : m_base_type(
+# ifdef BOOST_PYTHON_TYPE_ID_NAME
+ id.name()
+# else
+ &id
+# endif
+ )
+{
+}
+
+inline bool type_info::operator<(type_info const& rhs) const
+{
+# ifdef BOOST_PYTHON_TYPE_ID_NAME
+ return std::strcmp(m_base_type, rhs.m_base_type) < 0;
+# else
+ return m_base_type->before(*rhs.m_base_type);
+# endif
+}
+
+inline bool type_info::operator==(type_info const& rhs) const
+{
+# ifdef BOOST_PYTHON_TYPE_ID_NAME
+ return !std::strcmp(m_base_type, rhs.m_base_type);
+# else
+ return *m_base_type == *rhs.m_base_type;
+# endif
+}
+
+# ifdef BOOST_PYTHON_HAVE_GCC_CP_DEMANGLE
+namespace detail
+{
+ BOOST_PYTHON_DECL char const* gcc_demangle(char const*);
+}
+# endif
+
+inline char const* type_info::name() const
+{
+ char const* raw_name
+ = m_base_type
+# ifndef BOOST_PYTHON_TYPE_ID_NAME
+ ->name()
+# endif
+ ;
+
+# ifdef BOOST_PYTHON_HAVE_GCC_CP_DEMANGLE
+ return detail::gcc_demangle(raw_name);
+# else
+ return raw_name;
+# endif
+}
+
+
+BOOST_PYTHON_DECL std::ostream& operator<<(std::ostream&, type_info const&);
+
+# if !BOOST_WORKAROUND(BOOST_MSVC, == 1200)
+template<>
+inline type_info type_id<void>(BOOST_PYTHON_EXPLICIT_TT_DEF(void))
+{
+ return type_info (typeid (void *));
+}
+# ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
+template<>
+inline type_info type_id<const volatile void>(BOOST_PYTHON_EXPLICIT_TT_DEF(const volatile void))
+{
+ return type_info (typeid (void *));
+}
+# endif
+
+# endif
+
+}} // namespace boost::python
+
+#endif // TYPE_ID_DWA2002517_HPP
diff --git a/boost/boost/python/with_custodian_and_ward.hpp b/boost/boost/python/with_custodian_and_ward.hpp
new file mode 100644
index 00000000000..906de6d7b74
--- /dev/null
+++ b/boost/boost/python/with_custodian_and_ward.hpp
@@ -0,0 +1,124 @@
+// Copyright David Abrahams 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)
+#ifndef WITH_CUSTODIAN_AND_WARD_DWA2002131_HPP
+# define WITH_CUSTODIAN_AND_WARD_DWA2002131_HPP
+
+# include <boost/python/detail/prefix.hpp>
+
+# include <boost/python/default_call_policies.hpp>
+# include <boost/python/object/life_support.hpp>
+# include <algorithm>
+
+namespace boost { namespace python {
+
+namespace detail
+{
+ template <std::size_t N>
+ struct get_prev
+ {
+ template <class ArgumentPackage>
+ static PyObject* execute(ArgumentPackage const& args, PyObject* = 0)
+ {
+ int const pre_n = static_cast<int>(N) - 1; // separate line is gcc-2.96 workaround
+ return detail::get(mpl::int_<pre_n>(), args);
+ }
+ };
+ template <>
+ struct get_prev<0>
+ {
+ template <class ArgumentPackage>
+ static PyObject* execute(ArgumentPackage const&, PyObject* zeroth)
+ {
+ return zeroth;
+ }
+ };
+}
+template <
+ std::size_t custodian
+ , std::size_t ward
+ , class BasePolicy_ = default_call_policies
+>
+struct with_custodian_and_ward : BasePolicy_
+{
+ BOOST_STATIC_ASSERT(custodian != ward);
+ BOOST_STATIC_ASSERT(custodian > 0);
+ BOOST_STATIC_ASSERT(ward > 0);
+
+ template <class ArgumentPackage>
+ static bool precall(ArgumentPackage const& args_)
+ {
+ unsigned arity_ = detail::arity(args_);
+ if (custodian > arity_ || ward > arity_)
+ {
+ PyErr_SetString(
+ PyExc_IndexError
+ , "boost::python::with_custodian_and_ward: argument index out of range"
+ );
+ return false;
+ }
+
+ PyObject* patient = detail::get_prev<ward>::execute(args_);
+ PyObject* nurse = detail::get_prev<custodian>::execute(args_);
+
+ PyObject* life_support = python::objects::make_nurse_and_patient(nurse, patient);
+ if (life_support == 0)
+ return false;
+
+ bool result = BasePolicy_::precall(args_);
+
+ if (!result)
+ Py_DECREF(life_support);
+
+ return result;
+ }
+};
+
+template <std::size_t custodian, std::size_t ward, class BasePolicy_ = default_call_policies>
+struct with_custodian_and_ward_postcall : BasePolicy_
+{
+ BOOST_STATIC_ASSERT(custodian != ward);
+
+ template <class ArgumentPackage>
+ static PyObject* postcall(ArgumentPackage const& args_, PyObject* result)
+ {
+ std::size_t arity_ = detail::arity(args_);
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ if ( custodian > arity_ || ward > arity_ )
+#else
+ // check if either custodian or ward exceeds the arity
+ // (this weird formulation avoids "always false" warnings
+ // for arity_ = 0)
+ if ( (std::max)(custodian, ward) > arity_ )
+#endif
+ {
+ PyErr_SetString(
+ PyExc_IndexError
+ , "boost::python::with_custodian_and_ward_postcall: argument index out of range"
+ );
+ return 0;
+ }
+
+ PyObject* patient = detail::get_prev<ward>::execute(args_, result);
+ PyObject* nurse = detail::get_prev<custodian>::execute(args_, result);
+
+ if (nurse == 0) return 0;
+
+ result = BasePolicy_::postcall(args_, result);
+ if (result == 0)
+ return 0;
+
+ if (python::objects::make_nurse_and_patient(nurse, patient) == 0)
+ {
+ Py_XDECREF(result);
+ return 0;
+ }
+ return result;
+ }
+};
+
+
+}} // namespace boost::python
+
+#endif // WITH_CUSTODIAN_AND_WARD_DWA2002131_HPP
diff --git a/boost/boost/python/wrapper.hpp b/boost/boost/python/wrapper.hpp
new file mode 100644
index 00000000000..166c8e2327d
--- /dev/null
+++ b/boost/boost/python/wrapper.hpp
@@ -0,0 +1,35 @@
+// Copyright David Abrahams 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)
+#ifndef WRAPPER_DWA2004720_HPP
+# define WRAPPER_DWA2004720_HPP
+
+# include <boost/python/detail/wrapper_base.hpp>
+# include <boost/python/override.hpp>
+# include <boost/python/converter/registered.hpp>
+# include <boost/python/detail/sfinae.hpp>
+
+namespace boost { namespace python {
+
+template <class T>
+class wrapper : public detail::wrapper_base
+{
+ public:
+ // Do not touch this implementation detail!
+ typedef T _wrapper_wrapped_type_;
+
+ protected:
+ override get_override(char const* name) const
+ {
+ typedef detail::wrapper_base base;
+ converter::registration const& r
+ = converter::registered<T>::converters;
+ PyTypeObject* type = r.get_class_object();
+
+ return this->base::get_override(name, type);
+ }
+};
+
+}} // namespace boost::python
+
+#endif // WRAPPER_DWA2004720_HPP
diff --git a/boost/boost/random.hpp b/boost/boost/random.hpp
new file mode 100644
index 00000000000..397eaf194e6
--- /dev/null
+++ b/boost/boost/random.hpp
@@ -0,0 +1,72 @@
+/* boost random.hpp header file
+ *
+ * Copyright Jens Maurer 2000-2001
+ * 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/random for documentation.
+ *
+ * $Id: random.hpp,v 1.18 2004/07/27 03:43:27 dgregor Exp $
+ *
+ * Revision history
+ * 2000-02-18 portability fixes (thanks to Beman Dawes)
+ * 2000-02-21 shuffle_output, inversive_congruential_schrage,
+ * generator_iterator, uniform_smallint
+ * 2000-02-23 generic modulus arithmetic helper, removed *_schrage classes,
+ * implemented Streamable and EqualityComparable concepts for
+ * generators, added Bernoulli distribution and Box-Muller
+ * transform
+ * 2000-03-01 cauchy, lognormal, triangle distributions; fixed
+ * uniform_smallint; renamed gaussian to normal distribution
+ * 2000-03-05 implemented iterator syntax for distribution functions
+ * 2000-04-21 removed some optimizations for better BCC/MSVC compatibility
+ * 2000-05-10 adapted to BCC and MSVC
+ * 2000-06-13 incorporated review results
+ * 2000-07-06 moved basic templates from namespace detail to random
+ * 2000-09-23 warning removals and int64 fixes (Ed Brey)
+ * 2000-09-24 added lagged_fibonacci generator (Matthias Troyer)
+ * 2001-02-18 moved to individual header files
+ */
+
+#ifndef BOOST_RANDOM_HPP
+#define BOOST_RANDOM_HPP
+
+// generators
+#include <boost/random/linear_congruential.hpp>
+#include <boost/random/additive_combine.hpp>
+#include <boost/random/inversive_congruential.hpp>
+#include <boost/random/shuffle_output.hpp>
+#include <boost/random/mersenne_twister.hpp>
+#include <boost/random/lagged_fibonacci.hpp>
+#include <boost/random/ranlux.hpp>
+#include <boost/random/linear_feedback_shift.hpp>
+#include <boost/random/xor_combine.hpp>
+
+namespace boost {
+ typedef random::xor_combine<random::xor_combine<random::linear_feedback_shift<uint32_t, 32, 31, 13, 12, 0>, 0,
+ random::linear_feedback_shift<uint32_t, 32, 29, 2, 4, 0>, 0, 0>, 0,
+ random::linear_feedback_shift<uint32_t, 32, 28, 3, 17, 0>, 0, 0> taus88;
+} // namespace boost
+
+// misc
+#include <boost/random/random_number_generator.hpp>
+
+// distributions
+#include <boost/random/uniform_smallint.hpp>
+#include <boost/random/uniform_int.hpp>
+#include <boost/random/uniform_01.hpp>
+#include <boost/random/uniform_real.hpp>
+#include <boost/random/triangle_distribution.hpp>
+#include <boost/random/bernoulli_distribution.hpp>
+#include <boost/random/cauchy_distribution.hpp>
+#include <boost/random/exponential_distribution.hpp>
+#include <boost/random/geometric_distribution.hpp>
+#include <boost/random/normal_distribution.hpp>
+#include <boost/random/lognormal_distribution.hpp>
+#include <boost/random/poisson_distribution.hpp>
+#include <boost/random/gamma_distribution.hpp>
+#include <boost/random/binomial_distribution.hpp>
+#include <boost/random/uniform_on_sphere.hpp>
+
+#endif // BOOST_RANDOM_HPP
diff --git a/boost/boost/random/additive_combine.hpp b/boost/boost/random/additive_combine.hpp
new file mode 100644
index 00000000000..64ae439dfa3
--- /dev/null
+++ b/boost/boost/random/additive_combine.hpp
@@ -0,0 +1,125 @@
+/* boost random/additive_combine.hpp header file
+ *
+ * Copyright Jens Maurer 2000-2001
+ * 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.
+ *
+ * $Id: additive_combine.hpp,v 1.11 2005/05/21 15:57:00 dgregor Exp $
+ *
+ * Revision history
+ * 2001-02-18 moved to individual header files
+ */
+
+#ifndef BOOST_RANDOM_ADDITIVE_COMBINE_HPP
+#define BOOST_RANDOM_ADDITIVE_COMBINE_HPP
+
+#include <iostream>
+#include <algorithm> // for std::min and std::max
+#include <boost/config.hpp>
+#include <boost/cstdint.hpp>
+#include <boost/random/linear_congruential.hpp>
+
+namespace boost {
+namespace random {
+
+// L'Ecuyer 1988
+template<class MLCG1, class MLCG2,
+#ifndef BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS
+ typename MLCG1::result_type
+#else
+ int32_t
+#endif
+ val>
+class additive_combine
+{
+public:
+ typedef MLCG1 first_base;
+ typedef MLCG2 second_base;
+ typedef typename MLCG1::result_type result_type;
+#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION
+ static const bool has_fixed_range = true;
+ static const result_type min_value = 1;
+ static const result_type max_value = MLCG1::max_value-1;
+#else
+ enum { has_fixed_range = false };
+#endif
+ result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return 1; }
+ result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return (_mlcg1.max)()-1; }
+
+ additive_combine() : _mlcg1(), _mlcg2() { }
+ additive_combine(typename MLCG1::result_type seed1,
+ typename MLCG2::result_type seed2)
+ : _mlcg1(seed1), _mlcg2(seed2) { }
+ template<class It> additive_combine(It& first, It last)
+ : _mlcg1(first, last), _mlcg2(first, last) { }
+
+ void seed()
+ {
+ _mlcg1.seed();
+ _mlcg2.seed();
+ }
+
+ void seed(typename MLCG1::result_type seed1,
+ typename MLCG2::result_type seed2)
+ {
+ _mlcg1(seed1);
+ _mlcg2(seed2);
+ }
+
+ template<class It> void seed(It& first, It last)
+ {
+ _mlcg1.seed(first, last);
+ _mlcg2.seed(first, last);
+ }
+
+ result_type operator()() {
+ result_type z = _mlcg1() - _mlcg2();
+ if(z < 1)
+ z += MLCG1::modulus-1;
+ return z;
+ }
+ static bool validation(result_type x) { return val == x; }
+
+#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE
+
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+ template<class CharT, class Traits>
+ friend std::basic_ostream<CharT,Traits>&
+ operator<<(std::basic_ostream<CharT,Traits>& os, const additive_combine& r)
+ { os << r._mlcg1 << " " << r._mlcg2; return os; }
+
+ template<class CharT, class Traits>
+ friend std::basic_istream<CharT,Traits>&
+ operator>>(std::basic_istream<CharT,Traits>& is, additive_combine& r)
+ { is >> r._mlcg1 >> std::ws >> r._mlcg2; return is; }
+#endif
+
+ friend bool operator==(const additive_combine& x, const additive_combine& y)
+ { return x._mlcg1 == y._mlcg1 && x._mlcg2 == y._mlcg2; }
+ friend bool operator!=(const additive_combine& x, const additive_combine& y)
+ { return !(x == y); }
+#else
+ // Use a member function; Streamable concept not supported.
+ bool operator==(const additive_combine& rhs) const
+ { return _mlcg1 == rhs._mlcg1 && _mlcg2 == rhs._mlcg2; }
+ bool operator!=(const additive_combine& rhs) const
+ { return !(*this == rhs); }
+#endif
+private:
+ MLCG1 _mlcg1;
+ MLCG2 _mlcg2;
+};
+
+} // namespace random
+
+typedef random::additive_combine<
+ random::linear_congruential<int32_t, 40014, 0, 2147483563, 0>,
+ random::linear_congruential<int32_t, 40692, 0, 2147483399, 0>,
+ 2060321752> ecuyer1988;
+
+} // namespace boost
+
+#endif // BOOST_RANDOM_ADDITIVE_COMBINE_HPP
diff --git a/boost/boost/random/bernoulli_distribution.hpp b/boost/boost/random/bernoulli_distribution.hpp
new file mode 100644
index 00000000000..d1db4dff2c4
--- /dev/null
+++ b/boost/boost/random/bernoulli_distribution.hpp
@@ -0,0 +1,80 @@
+/* boost random/bernoulli_distribution.hpp header file
+ *
+ * Copyright Jens Maurer 2000-2001
+ * 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.
+ *
+ * $Id: bernoulli_distribution.hpp,v 1.19 2004/07/27 03:43:32 dgregor Exp $
+ *
+ * Revision history
+ * 2001-02-18 moved to individual header files
+ */
+
+#ifndef BOOST_RANDOM_BERNOULLI_DISTRIBUTION_HPP
+#define BOOST_RANDOM_BERNOULLI_DISTRIBUTION_HPP
+
+#include <cassert>
+#include <iostream>
+
+namespace boost {
+
+// Bernoulli distribution: p(true) = p, p(false) = 1-p (boolean)
+template<class RealType = double>
+class bernoulli_distribution
+{
+public:
+ // In principle, this could work with both integer and floating-point
+ // types. Generating floating-point random numbers in the first
+ // place is probably more expensive, so use integer as input.
+ typedef int input_type;
+ typedef bool result_type;
+
+ explicit bernoulli_distribution(const RealType& p = RealType(0.5))
+ : _p(p)
+ {
+ assert(p >= 0);
+ assert(p <= 1);
+ }
+
+ // compiler-generated copy ctor and assignment operator are fine
+
+ RealType p() const { return _p; }
+ void reset() { }
+
+ template<class Engine>
+ result_type operator()(Engine& eng)
+ {
+ if(_p == RealType(0))
+ return false;
+ else
+ return RealType(eng() - (eng.min)()) <= _p * RealType((eng.max)()-(eng.min)());
+ }
+
+#if !defined(BOOST_NO_OPERATORS_IN_NAMESPACE) && !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS)
+ template<class CharT, class Traits>
+ friend std::basic_ostream<CharT,Traits>&
+ operator<<(std::basic_ostream<CharT,Traits>& os, const bernoulli_distribution& bd)
+ {
+ os << bd._p;
+ return os;
+ }
+
+ template<class CharT, class Traits>
+ friend std::basic_istream<CharT,Traits>&
+ operator>>(std::basic_istream<CharT,Traits>& is, bernoulli_distribution& bd)
+ {
+ is >> std::ws >> bd._p;
+ return is;
+ }
+#endif
+
+private:
+ RealType _p;
+};
+
+} // namespace boost
+
+#endif // BOOST_RANDOM_BERNOULLI_DISTRIBUTION_HPP
diff --git a/boost/boost/random/binomial_distribution.hpp b/boost/boost/random/binomial_distribution.hpp
new file mode 100644
index 00000000000..2a426896ee9
--- /dev/null
+++ b/boost/boost/random/binomial_distribution.hpp
@@ -0,0 +1,81 @@
+/* boost random/binomial_distribution.hpp header file
+ *
+ * Copyright Jens Maurer 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 for most recent version including documentation.
+ *
+ * $Id: binomial_distribution.hpp,v 1.10 2005/06/24 22:13:43 jmaurer Exp $
+ *
+ */
+
+#ifndef BOOST_RANDOM_BINOMIAL_DISTRIBUTION_HPP
+#define BOOST_RANDOM_BINOMIAL_DISTRIBUTION_HPP
+
+#include <cmath>
+#include <cassert>
+#include <boost/random/bernoulli_distribution.hpp>
+
+namespace boost {
+
+// Knuth
+template<class IntType = int, class RealType = double>
+class binomial_distribution
+{
+public:
+ typedef typename bernoulli_distribution<RealType>::input_type input_type;
+ typedef IntType result_type;
+
+ explicit binomial_distribution(IntType t = 1,
+ const RealType& p = RealType(0.5))
+ : _bernoulli(p), _t(t)
+ {
+ assert(t >= 0);
+ assert(RealType(0) <= 0 && p <= RealType(1));
+ }
+
+ // compiler-generated copy ctor and assignment operator are fine
+
+ IntType t() const { return _t; }
+ RealType p() const { return _bernoulli.p(); }
+ void reset() { }
+
+ template<class Engine>
+ result_type operator()(Engine& eng)
+ {
+ // TODO: This is O(_t), but it should be O(log(_t)) for large _t
+ result_type n = 0;
+ for(IntType i = 0; i < _t; ++i)
+ if(_bernoulli(eng))
+ ++n;
+ return n;
+ }
+
+#if !defined(BOOST_NO_OPERATORS_IN_NAMESPACE) && !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS)
+ template<class CharT, class Traits>
+ friend std::basic_ostream<CharT,Traits>&
+ operator<<(std::basic_ostream<CharT,Traits>& os, const binomial_distribution& bd)
+ {
+ os << bd._bernoulli << " " << bd._t;
+ return os;
+ }
+
+ template<class CharT, class Traits>
+ friend std::basic_istream<CharT,Traits>&
+ operator>>(std::basic_istream<CharT,Traits>& is, binomial_distribution& bd)
+ {
+ is >> std::ws >> bd._bernoulli >> std::ws >> bd._t;
+ return is;
+ }
+#endif
+
+private:
+ bernoulli_distribution<RealType> _bernoulli;
+ IntType _t;
+};
+
+} // namespace boost
+
+#endif // BOOST_RANDOM_BINOMIAL_DISTRIBUTION_HPP
diff --git a/boost/boost/random/cauchy_distribution.hpp b/boost/boost/random/cauchy_distribution.hpp
new file mode 100644
index 00000000000..19f28bafbb6
--- /dev/null
+++ b/boost/boost/random/cauchy_distribution.hpp
@@ -0,0 +1,89 @@
+/* boost random/cauchy_distribution.hpp header file
+ *
+ * Copyright Jens Maurer 2000-2001
+ * 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.
+ *
+ * $Id: cauchy_distribution.hpp,v 1.15 2004/07/27 03:43:32 dgregor Exp $
+ *
+ * Revision history
+ * 2001-02-18 moved to individual header files
+ */
+
+#ifndef BOOST_RANDOM_CAUCHY_DISTRIBUTION_HPP
+#define BOOST_RANDOM_CAUCHY_DISTRIBUTION_HPP
+
+#include <cmath>
+#include <iostream>
+#include <boost/limits.hpp>
+#include <boost/static_assert.hpp>
+
+namespace boost {
+
+#if defined(__GNUC__) && (__GNUC__ < 3)
+// Special gcc workaround: gcc 2.95.x ignores using-declarations
+// in template classes (confirmed by gcc author Martin v. Loewis)
+ using std::tan;
+#endif
+
+// Cauchy distribution: p(x) = sigma/(pi*(sigma**2 + (x-median)**2))
+template<class RealType = double>
+class cauchy_distribution
+{
+public:
+ typedef RealType input_type;
+ typedef RealType result_type;
+
+#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+ BOOST_STATIC_ASSERT(!std::numeric_limits<RealType>::is_integer);
+#endif
+
+ explicit cauchy_distribution(result_type median = result_type(0),
+ result_type sigma = result_type(1))
+ : _median(median), _sigma(sigma) { }
+
+ // compiler-generated copy ctor and assignment operator are fine
+
+ result_type median() const { return _median; }
+ result_type sigma() const { return _sigma; }
+ void reset() { }
+
+ template<class Engine>
+ result_type operator()(Engine& eng)
+ {
+ // Can we have a boost::mathconst please?
+ const result_type pi = result_type(3.14159265358979323846);
+#ifndef BOOST_NO_STDC_NAMESPACE
+ using std::tan;
+#endif
+ return _median + _sigma * tan(pi*(eng()-result_type(0.5)));
+ }
+
+#if !defined(BOOST_NO_OPERATORS_IN_NAMESPACE) && !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS)
+ template<class CharT, class Traits>
+ friend std::basic_ostream<CharT,Traits>&
+ operator<<(std::basic_ostream<CharT,Traits>& os, const cauchy_distribution& cd)
+ {
+ os << cd._median << " " << cd._sigma;
+ return os;
+ }
+
+ template<class CharT, class Traits>
+ friend std::basic_istream<CharT,Traits>&
+ operator>>(std::basic_istream<CharT,Traits>& is, cauchy_distribution& cd)
+ {
+ is >> std::ws >> cd._median >> std::ws >> cd._sigma;
+ return is;
+ }
+#endif
+
+private:
+ result_type _median, _sigma;
+};
+
+} // namespace boost
+
+#endif // BOOST_RANDOM_CAUCHY_DISTRIBUTION_HPP
diff --git a/boost/boost/random/detail/const_mod.hpp b/boost/boost/random/detail/const_mod.hpp
new file mode 100644
index 00000000000..cdcab4bbd24
--- /dev/null
+++ b/boost/boost/random/detail/const_mod.hpp
@@ -0,0 +1,359 @@
+/* boost random/detail/const_mod.hpp header file
+ *
+ * Copyright Jens Maurer 2000-2001
+ * 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.
+ *
+ * $Id: const_mod.hpp,v 1.8 2004/07/27 03:43:32 dgregor Exp $
+ *
+ * Revision history
+ * 2001-02-18 moved to individual header files
+ */
+
+#ifndef BOOST_RANDOM_CONST_MOD_HPP
+#define BOOST_RANDOM_CONST_MOD_HPP
+
+#include <cassert>
+#include <boost/static_assert.hpp>
+#include <boost/cstdint.hpp>
+#include <boost/integer_traits.hpp>
+#include <boost/detail/workaround.hpp>
+
+namespace boost {
+namespace random {
+
+/*
+ * Some random number generators require modular arithmetic. Put
+ * everything we need here.
+ * IntType must be an integral type.
+ */
+
+namespace detail {
+
+ template<bool is_signed>
+ struct do_add
+ { };
+
+ template<>
+ struct do_add<true>
+ {
+ template<class IntType>
+ static IntType add(IntType m, IntType x, IntType c)
+ {
+ x += (c-m);
+ if(x < 0)
+ x += m;
+ return x;
+ }
+ };
+
+ template<>
+ struct do_add<false>
+ {
+ template<class IntType>
+ static IntType add(IntType, IntType, IntType)
+ {
+ // difficult
+ assert(!"const_mod::add with c too large");
+ return 0;
+ }
+ };
+} // namespace detail
+
+#if !(defined(__BORLANDC__) && (__BORLANDC__ == 0x560))
+
+template<class IntType, IntType m>
+class const_mod
+{
+public:
+ static IntType add(IntType x, IntType c)
+ {
+ if(c == 0)
+ return x;
+ else if(c <= traits::const_max - m) // i.e. m+c < max
+ return add_small(x, c);
+ else
+ return detail::do_add<traits::is_signed>::add(m, x, c);
+ }
+
+ static IntType mult(IntType a, IntType x)
+ {
+ if(a == 1)
+ return x;
+ else if(m <= traits::const_max/a) // i.e. a*m <= max
+ return mult_small(a, x);
+ else if(traits::is_signed && (m%a < m/a))
+ return mult_schrage(a, x);
+ else {
+ // difficult
+ assert(!"const_mod::mult with a too large");
+ return 0;
+ }
+ }
+
+ static IntType mult_add(IntType a, IntType x, IntType c)
+ {
+ if(m <= (traits::const_max-c)/a) // i.e. a*m+c <= max
+ return (a*x+c) % m;
+ else
+ return add(mult(a, x), c);
+ }
+
+ static IntType invert(IntType x)
+ { return x == 0 ? 0 : invert_euclidian(x); }
+
+private:
+ typedef integer_traits<IntType> traits;
+
+ const_mod(); // don't instantiate
+
+ static IntType add_small(IntType x, IntType c)
+ {
+ x += c;
+ if(x >= m)
+ x -= m;
+ return x;
+ }
+
+ static IntType mult_small(IntType a, IntType x)
+ {
+ return a*x % m;
+ }
+
+ static IntType mult_schrage(IntType a, IntType value)
+ {
+ const IntType q = m / a;
+ const IntType r = m % a;
+
+ assert(r < q); // check that overflow cannot happen
+
+ value = a*(value%q) - r*(value/q);
+ // An optimizer bug in the SGI MIPSpro 7.3.1.x compiler requires this
+ // convoluted formulation of the loop (Synge Todo)
+ for(;;) {
+ if (value > 0)
+ break;
+ value += m;
+ }
+ return value;
+ }
+
+ // invert c in the finite field (mod m) (m must be prime)
+ static IntType invert_euclidian(IntType c)
+ {
+ // we are interested in the gcd factor for c, because this is our inverse
+ BOOST_STATIC_ASSERT(m > 0);
+#if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003))
+ assert(boost::integer_traits<IntType>::is_signed);
+#elif !defined(BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS)
+ BOOST_STATIC_ASSERT(boost::integer_traits<IntType>::is_signed);
+#endif
+ assert(c > 0);
+ IntType l1 = 0;
+ IntType l2 = 1;
+ IntType n = c;
+ IntType p = m;
+ for(;;) {
+ IntType q = p / n;
+ l1 -= q * l2; // this requires a signed IntType!
+ p -= q * n;
+ if(p == 0)
+ return (l2 < 1 ? l2 + m : l2);
+ IntType q2 = n / p;
+ l2 -= q2 * l1;
+ n -= q2 * p;
+ if(n == 0)
+ return (l1 < 1 ? l1 + m : l1);
+ }
+ }
+};
+
+// The modulus is exactly the word size: rely on machine overflow handling.
+// Due to a GCC bug, we cannot partially specialize in the presence of
+// template value parameters.
+template<>
+class const_mod<unsigned int, 0>
+{
+ typedef unsigned int IntType;
+public:
+ static IntType add(IntType x, IntType c) { return x+c; }
+ static IntType mult(IntType a, IntType x) { return a*x; }
+ static IntType mult_add(IntType a, IntType x, IntType c) { return a*x+c; }
+
+ // m is not prime, thus invert is not useful
+private: // don't instantiate
+ const_mod();
+};
+
+template<>
+class const_mod<unsigned long, 0>
+{
+ typedef unsigned long IntType;
+public:
+ static IntType add(IntType x, IntType c) { return x+c; }
+ static IntType mult(IntType a, IntType x) { return a*x; }
+ static IntType mult_add(IntType a, IntType x, IntType c) { return a*x+c; }
+
+ // m is not prime, thus invert is not useful
+private: // don't instantiate
+ const_mod();
+};
+
+// the modulus is some power of 2: rely partly on machine overflow handling
+// we only specialize for rand48 at the moment
+#ifndef BOOST_NO_INT64_T
+template<>
+class const_mod<uint64_t, uint64_t(1) << 48>
+{
+ typedef uint64_t IntType;
+public:
+ static IntType add(IntType x, IntType c) { return c == 0 ? x : mod(x+c); }
+ static IntType mult(IntType a, IntType x) { return mod(a*x); }
+ static IntType mult_add(IntType a, IntType x, IntType c)
+ { return mod(a*x+c); }
+ static IntType mod(IntType x) { return x &= ((uint64_t(1) << 48)-1); }
+
+ // m is not prime, thus invert is not useful
+private: // don't instantiate
+ const_mod();
+};
+#endif /* !BOOST_NO_INT64_T */
+
+#else
+
+//
+// for some reason Borland C++ Builder 6 has problems with
+// the full specialisations of const_mod, define a generic version
+// instead, the compiler will optimise away the const-if statements:
+//
+
+template<class IntType, IntType m>
+class const_mod
+{
+public:
+ static IntType add(IntType x, IntType c)
+ {
+ if(0 == m)
+ {
+ return x+c;
+ }
+ else
+ {
+ if(c == 0)
+ return x;
+ else if(c <= traits::const_max - m) // i.e. m+c < max
+ return add_small(x, c);
+ else
+ return detail::do_add<traits::is_signed>::add(m, x, c);
+ }
+ }
+
+ static IntType mult(IntType a, IntType x)
+ {
+ if(x == 0)
+ {
+ return a*x;
+ }
+ else
+ {
+ if(a == 1)
+ return x;
+ else if(m <= traits::const_max/a) // i.e. a*m <= max
+ return mult_small(a, x);
+ else if(traits::is_signed && (m%a < m/a))
+ return mult_schrage(a, x);
+ else {
+ // difficult
+ assert(!"const_mod::mult with a too large");
+ return 0;
+ }
+ }
+ }
+
+ static IntType mult_add(IntType a, IntType x, IntType c)
+ {
+ if(m == 0)
+ {
+ return a*x+c;
+ }
+ else
+ {
+ if(m <= (traits::const_max-c)/a) // i.e. a*m+c <= max
+ return (a*x+c) % m;
+ else
+ return add(mult(a, x), c);
+ }
+ }
+
+ static IntType invert(IntType x)
+ { return x == 0 ? 0 : invert_euclidian(x); }
+
+private:
+ typedef integer_traits<IntType> traits;
+
+ const_mod(); // don't instantiate
+
+ static IntType add_small(IntType x, IntType c)
+ {
+ x += c;
+ if(x >= m)
+ x -= m;
+ return x;
+ }
+
+ static IntType mult_small(IntType a, IntType x)
+ {
+ return a*x % m;
+ }
+
+ static IntType mult_schrage(IntType a, IntType value)
+ {
+ const IntType q = m / a;
+ const IntType r = m % a;
+
+ assert(r < q); // check that overflow cannot happen
+
+ value = a*(value%q) - r*(value/q);
+ while(value <= 0)
+ value += m;
+ return value;
+ }
+
+ // invert c in the finite field (mod m) (m must be prime)
+ static IntType invert_euclidian(IntType c)
+ {
+ // we are interested in the gcd factor for c, because this is our inverse
+ BOOST_STATIC_ASSERT(m > 0);
+#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+ BOOST_STATIC_ASSERT(boost::integer_traits<IntType>::is_signed);
+#endif
+ assert(c > 0);
+ IntType l1 = 0;
+ IntType l2 = 1;
+ IntType n = c;
+ IntType p = m;
+ for(;;) {
+ IntType q = p / n;
+ l1 -= q * l2; // this requires a signed IntType!
+ p -= q * n;
+ if(p == 0)
+ return (l2 < 1 ? l2 + m : l2);
+ IntType q2 = n / p;
+ l2 -= q2 * l1;
+ n -= q2 * p;
+ if(n == 0)
+ return (l1 < 1 ? l1 + m : l1);
+ }
+ }
+};
+
+
+#endif
+
+} // namespace random
+} // namespace boost
+
+#endif // BOOST_RANDOM_CONST_MOD_HPP
diff --git a/boost/boost/random/detail/iterator_mixin.hpp b/boost/boost/random/detail/iterator_mixin.hpp
new file mode 100644
index 00000000000..57ff75cecab
--- /dev/null
+++ b/boost/boost/random/detail/iterator_mixin.hpp
@@ -0,0 +1,45 @@
+/* boost random/detail/iterator_mixin.hpp header file
+ *
+ * Copyright Jens Maurer 2000-2001
+ * 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.
+ *
+ * Revision history
+ */
+
+#ifndef BOOST_ITERATOR_MIXIN_HPP
+#define BOOST_ITERATOR_MIXIN_HPP
+
+#include <boost/operators.hpp>
+
+namespace boost {
+
+// must be in boost namespace, otherwise the inline friend trick fails
+template<class Generator, class ResultType>
+class generator_iterator_mixin_adapter
+ : incrementable<Generator>, equality_comparable<Generator>
+{
+public:
+ typedef std::input_iterator_tag iterator_category;
+ typedef ResultType value_type;
+ typedef std::ptrdiff_t difference_type;
+ typedef const value_type * pointer;
+ typedef const value_type & reference;
+ Generator& operator++() { v = cast()(); return cast(); }
+ const value_type& operator*() const { return v; }
+
+protected:
+ // instantiate from derived classes only
+ generator_iterator_mixin_adapter() { }
+ void iterator_init() { operator++(); }
+private:
+ Generator & cast() { return static_cast<Generator&>(*this); }
+ value_type v;
+};
+
+} // namespace boost
+
+#endif // BOOST_ITERATOR_MIXIN_HPP
diff --git a/boost/boost/random/detail/pass_through_engine.hpp b/boost/boost/random/detail/pass_through_engine.hpp
new file mode 100644
index 00000000000..df9b14e4146
--- /dev/null
+++ b/boost/boost/random/detail/pass_through_engine.hpp
@@ -0,0 +1,98 @@
+/* boost random/detail/uniform_int_float.hpp header file
+ *
+ * Copyright Jens Maurer 2000-2001
+ * 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.
+ *
+ * $Id: pass_through_engine.hpp,v 1.5 2004/07/27 03:43:32 dgregor Exp $
+ *
+ */
+
+#ifndef BOOST_RANDOM_DETAIL_PASS_THROUGH_ENGINE_HPP
+#define BOOST_RANDOM_DETAIL_PASS_THROUGH_ENGINE_HPP
+
+#include <boost/config.hpp>
+#include <boost/random/detail/ptr_helper.hpp>
+
+
+namespace boost {
+namespace random {
+namespace detail {
+
+template<class UniformRandomNumberGenerator>
+class pass_through_engine
+{
+private:
+ typedef ptr_helper<UniformRandomNumberGenerator> helper_type;
+
+public:
+ typedef typename helper_type::value_type base_type;
+ typedef typename base_type::result_type result_type;
+
+ explicit pass_through_engine(UniformRandomNumberGenerator rng)
+ // make argument an rvalue to avoid matching Generator& constructor
+ : _rng(static_cast<typename helper_type::rvalue_type>(rng))
+ { }
+
+ result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return (base().min)(); }
+ result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return (base().max)(); }
+ base_type& base() { return helper_type::ref(_rng); }
+ const base_type& base() const { return helper_type::ref(_rng); }
+
+ result_type operator()() { return base()(); }
+
+private:
+ UniformRandomNumberGenerator _rng;
+};
+
+#ifndef BOOST_NO_STD_LOCALE
+
+template<class UniformRandomNumberGenerator, class CharT, class Traits>
+std::basic_ostream<CharT,Traits>&
+operator<<(
+ std::basic_ostream<CharT,Traits>& os
+ , const pass_through_engine<UniformRandomNumberGenerator>& ud
+ )
+{
+ return os << ud.base();
+}
+
+template<class UniformRandomNumberGenerator, class CharT, class Traits>
+std::basic_istream<CharT,Traits>&
+operator>>(
+ std::basic_istream<CharT,Traits>& is
+ , const pass_through_engine<UniformRandomNumberGenerator>& ud
+ )
+{
+ return is >> ud.base();
+}
+
+#else // no new streams
+
+template<class UniformRandomNumberGenerator>
+inline std::ostream&
+operator<<(std::ostream& os,
+ const pass_through_engine<UniformRandomNumberGenerator>& ud)
+{
+ return os << ud.base();
+}
+
+template<class UniformRandomNumberGenerator>
+inline std::istream&
+operator>>(std::istream& is,
+ const pass_through_engine<UniformRandomNumberGenerator>& ud)
+{
+ return is >> ud.base();
+}
+
+#endif
+
+} // namespace detail
+} // namespace random
+} // namespace boost
+
+#endif // BOOST_RANDOM_DETAIL_PASS_THROUGH_ENGINE_HPP
+
diff --git a/boost/boost/random/detail/ptr_helper.hpp b/boost/boost/random/detail/ptr_helper.hpp
new file mode 100644
index 00000000000..7b0de822ccb
--- /dev/null
+++ b/boost/boost/random/detail/ptr_helper.hpp
@@ -0,0 +1,94 @@
+/* boost random/detail/ptr_helper.hpp header file
+ *
+ * Copyright Jens Maurer 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 for most recent version including documentation.
+ *
+ * $Id: ptr_helper.hpp,v 1.3 2004/07/27 03:43:32 dgregor Exp $
+ *
+ */
+
+#ifndef BOOST_RANDOM_DETAIL_PTR_HELPER_HPP
+#define BOOST_RANDOM_DETAIL_PTR_HELPER_HPP
+
+#include <boost/config.hpp>
+
+
+namespace boost {
+namespace random {
+namespace detail {
+
+// type_traits could help here, but I don't want to depend on type_traits.
+template<class T>
+struct ptr_helper
+{
+ typedef T value_type;
+ typedef T& reference_type;
+ typedef const T& rvalue_type;
+ static reference_type ref(T& r) { return r; }
+ static const T& ref(const T& r) { return r; }
+};
+
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+template<class T>
+struct ptr_helper<T&>
+{
+ typedef T value_type;
+ typedef T& reference_type;
+ typedef T& rvalue_type;
+ static reference_type ref(T& r) { return r; }
+ static const T& ref(const T& r) { return r; }
+};
+
+template<class T>
+struct ptr_helper<T*>
+{
+ typedef T value_type;
+ typedef T& reference_type;
+ typedef T* rvalue_type;
+ static reference_type ref(T * p) { return *p; }
+ static const T& ref(const T * p) { return *p; }
+};
+#endif
+
+} // namespace detail
+} // namespace random
+} // namespace boost
+
+//
+// BOOST_RANDOM_PTR_HELPER_SPEC --
+//
+// Helper macro for broken compilers defines specializations of
+// ptr_helper.
+//
+#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+# define BOOST_RANDOM_PTR_HELPER_SPEC(T) \
+namespace boost { namespace random { namespace detail { \
+template<> \
+struct ptr_helper<T&> \
+{ \
+ typedef T value_type; \
+ typedef T& reference_type; \
+ typedef T& rvalue_type; \
+ static reference_type ref(T& r) { return r; } \
+ static const T& ref(const T& r) { return r; } \
+}; \
+ \
+template<> \
+struct ptr_helper<T*> \
+{ \
+ typedef T value_type; \
+ typedef T& reference_type; \
+ typedef T* rvalue_type; \
+ static reference_type ref(T * p) { return *p; } \
+ static const T& ref(const T * p) { return *p; } \
+}; \
+}}}
+#else
+# define BOOST_RANDOM_PTR_HELPER_SPEC(T)
+#endif
+
+#endif // BOOST_RANDOM_DETAIL_PTR_HELPER_HPP
diff --git a/boost/boost/random/detail/signed_unsigned_compare.hpp b/boost/boost/random/detail/signed_unsigned_compare.hpp
new file mode 100644
index 00000000000..b421862df22
--- /dev/null
+++ b/boost/boost/random/detail/signed_unsigned_compare.hpp
@@ -0,0 +1,91 @@
+/* boost random/detail/signed_unsigned_compare.hpp header file
+ *
+ * Copyright Jens Maurer 2000-2001
+ * 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.
+ *
+ * Revision history
+ */
+
+
+#ifndef BOOST_RANDOM_DETAIL_SIGNED_UNSIGNED_COMPARE
+#define BOOST_RANDOM_DETAIL_SIGNED_UNSIGNED_COMPARE
+
+#include <boost/limits.hpp>
+
+namespace boost {
+namespace random {
+
+/*
+ * Correctly compare two numbers whose types possibly differ in signedness.
+ * See boost::numeric_cast<> for the general idea.
+ * Most "if" statements involve only compile-time constants, so the
+ * optimizing compiler can do its job easily.
+ *
+ * With most compilers, the straightforward implementation produces a
+ * bunch of (legitimate) warnings. Some template magic helps, though.
+ */
+
+namespace detail {
+template<bool signed1, bool signed2>
+struct do_compare
+{ };
+
+template<>
+struct do_compare<false, false>
+{
+ // cast to the larger type is automatic with built-in types
+ template<class T1, class T2>
+ static bool equal(T1 x, T2 y) { return x == y; }
+ template<class T1, class T2>
+ static bool lessthan(T1 x, T2 y) { return x < y; }
+};
+
+template<>
+struct do_compare<true, true> : do_compare<false, false>
+{ };
+
+template<>
+struct do_compare<true, false>
+{
+ template<class T1, class T2>
+ static bool equal(T1 x, T2 y) { return x >= 0 && static_cast<T2>(x) == y; }
+ template<class T1, class T2>
+ static bool lessthan(T1 x, T2 y) { return x < 0 || static_cast<T2>(x) < y; }
+};
+
+template<>
+struct do_compare<false, true>
+{
+ template<class T1, class T2>
+ static bool equal(T1 x, T2 y) { return y >= 0 && x == static_cast<T1>(y); }
+ template<class T1, class T2>
+ static bool lessthan(T1 x, T2 y) { return y >= 0 && x < static_cast<T1>(y); }
+};
+
+} // namespace detail
+
+
+template<class T1, class T2>
+int equal_signed_unsigned(T1 x, T2 y)
+{
+ typedef std::numeric_limits<T1> x_traits;
+ typedef std::numeric_limits<T2> y_traits;
+ return detail::do_compare<x_traits::is_signed, y_traits::is_signed>::equal(x, y);
+}
+
+template<class T1, class T2>
+int lessthan_signed_unsigned(T1 x, T2 y)
+{
+ typedef std::numeric_limits<T1> x_traits;
+ typedef std::numeric_limits<T2> y_traits;
+ return detail::do_compare<x_traits::is_signed, y_traits::is_signed>::lessthan(x, y);
+}
+
+} // namespace random
+} // namespace boost
+
+#endif // BOOST_RANDOM_DETAIL_SIGNED_UNSIGNED_COMPARE
diff --git a/boost/boost/random/detail/uniform_int_float.hpp b/boost/boost/random/detail/uniform_int_float.hpp
new file mode 100644
index 00000000000..df30135b85e
--- /dev/null
+++ b/boost/boost/random/detail/uniform_int_float.hpp
@@ -0,0 +1,84 @@
+/* boost random/detail/uniform_int_float.hpp header file
+ *
+ * Copyright Jens Maurer 2000-2001
+ * 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.
+ *
+ * $Id: uniform_int_float.hpp,v 1.3 2004/07/27 03:43:32 dgregor Exp $
+ *
+ */
+
+#ifndef BOOST_RANDOM_DETAIL_UNIFORM_INT_FLOAT_HPP
+#define BOOST_RANDOM_DETAIL_UNIFORM_INT_FLOAT_HPP
+
+#include <boost/config.hpp>
+#include <boost/random/uniform_01.hpp>
+
+
+namespace boost {
+namespace random {
+namespace detail {
+
+template<class UniformRandomNumberGenerator, class IntType = unsigned long>
+class uniform_int_float
+{
+public:
+ typedef UniformRandomNumberGenerator base_type;
+ typedef IntType result_type;
+
+ uniform_int_float(base_type rng, IntType min = 0, IntType max = 0xffffffff)
+ : _rng(rng), _min(min), _max(max)
+ {
+ init();
+ }
+
+ result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return _min; }
+ result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return _max; }
+ base_type& base() { return _rng.base(); }
+ const base_type& base() const { return _rng.base(); }
+
+ result_type operator()()
+ {
+ return static_cast<IntType>(_rng() * _range) + _min;
+ }
+
+#if !defined(BOOST_NO_OPERATORS_IN_NAMESPACE) && !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS)
+ template<class CharT, class Traits>
+ friend std::basic_ostream<CharT,Traits>&
+ operator<<(std::basic_ostream<CharT,Traits>& os, const uniform_int_float& ud)
+ {
+ os << ud._min << " " << ud._max;
+ return os;
+ }
+
+ template<class CharT, class Traits>
+ friend std::basic_istream<CharT,Traits>&
+ operator>>(std::basic_istream<CharT,Traits>& is, uniform_int_float& ud)
+ {
+ is >> std::ws >> ud._min >> std::ws >> ud._max;
+ ud.init();
+ return is;
+ }
+#endif
+
+private:
+ void init()
+ {
+ _range = static_cast<base_result>(_max-_min)+1;
+ }
+
+ typedef typename base_type::result_type base_result;
+ uniform_01<base_type> _rng;
+ result_type _min, _max;
+ base_result _range;
+};
+
+
+} // namespace detail
+} // namespace random
+} // namespace boost
+
+#endif // BOOST_RANDOM_DETAIL_UNIFORM_INT_FLOAT_HPP
diff --git a/boost/boost/random/discard_block.hpp b/boost/boost/random/discard_block.hpp
new file mode 100644
index 00000000000..23d7b2ada38
--- /dev/null
+++ b/boost/boost/random/discard_block.hpp
@@ -0,0 +1,121 @@
+/* boost random/discard_block.hpp header file
+ *
+ * Copyright Jens Maurer 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 for most recent version including documentation.
+ *
+ * $Id: discard_block.hpp,v 1.12 2005/05/21 15:57:00 dgregor Exp $
+ *
+ * Revision history
+ * 2001-03-02 created
+ */
+
+#ifndef BOOST_RANDOM_DISCARD_BLOCK_HPP
+#define BOOST_RANDOM_DISCARD_BLOCK_HPP
+
+#include <iostream>
+#include <boost/config.hpp>
+#include <boost/limits.hpp>
+#include <boost/static_assert.hpp>
+
+
+namespace boost {
+namespace random {
+
+template<class UniformRandomNumberGenerator, unsigned int p, unsigned int r>
+class discard_block
+{
+public:
+ typedef UniformRandomNumberGenerator base_type;
+ typedef typename base_type::result_type result_type;
+
+ BOOST_STATIC_CONSTANT(bool, has_fixed_range = false);
+ BOOST_STATIC_CONSTANT(unsigned int, total_block = p);
+ BOOST_STATIC_CONSTANT(unsigned int, returned_block = r);
+
+#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+ BOOST_STATIC_ASSERT(total_block >= returned_block);
+#endif
+
+ discard_block() : _rng(), _n(0) { }
+ explicit discard_block(const base_type & rng) : _rng(rng), _n(0) { }
+ template<class It> discard_block(It& first, It last)
+ : _rng(first, last), _n(0) { }
+ void seed() { _rng.seed(); _n = 0; }
+ template<class T> void seed(T s) { _rng.seed(s); _n = 0; }
+ template<class It> void seed(It& first, It last)
+ { _n = 0; _rng.seed(first, last); }
+
+ const base_type& base() const { return _rng; }
+
+ result_type operator()()
+ {
+ if(_n >= returned_block) {
+ // discard values of random number generator
+ for( ; _n < total_block; ++_n)
+ _rng();
+ _n = 0;
+ }
+ ++_n;
+ return _rng();
+ }
+
+ result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return (_rng.min)(); }
+ result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return (_rng.max)(); }
+ static bool validation(result_type x) { return true; } // dummy
+
+#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE
+
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+ template<class CharT, class Traits>
+ friend std::basic_ostream<CharT,Traits>&
+ operator<<(std::basic_ostream<CharT,Traits>& os, const discard_block& s)
+ {
+ os << s._rng << " " << s._n << " ";
+ return os;
+ }
+
+ template<class CharT, class Traits>
+ friend std::basic_istream<CharT,Traits>&
+ operator>>(std::basic_istream<CharT,Traits>& is, discard_block& s)
+ {
+ is >> s._rng >> std::ws >> s._n >> std::ws;
+ return is;
+ }
+#endif
+
+ friend bool operator==(const discard_block& x, const discard_block& y)
+ { return x._rng == y._rng && x._n == y._n; }
+ friend bool operator!=(const discard_block& x, const discard_block& y)
+ { return !(x == y); }
+#else
+ // Use a member function; Streamable concept not supported.
+ bool operator==(const discard_block& rhs) const
+ { return _rng == rhs._rng && _n == rhs._n; }
+ bool operator!=(const discard_block& rhs) const
+ { return !(*this == rhs); }
+#endif
+
+private:
+ base_type _rng;
+ unsigned int _n;
+};
+
+#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION
+// A definition is required even for integral static constants
+template<class UniformRandomNumberGenerator, unsigned int p, unsigned int r>
+const bool discard_block<UniformRandomNumberGenerator, p, r>::has_fixed_range;
+template<class UniformRandomNumberGenerator, unsigned int p, unsigned int r>
+const unsigned int discard_block<UniformRandomNumberGenerator, p, r>::total_block;
+template<class UniformRandomNumberGenerator, unsigned int p, unsigned int r>
+const unsigned int discard_block<UniformRandomNumberGenerator, p, r>::returned_block;
+#endif
+
+} // namespace random
+
+} // namespace boost
+
+#endif // BOOST_RANDOM_DISCARD_BLOCK_HPP
diff --git a/boost/boost/random/exponential_distribution.hpp b/boost/boost/random/exponential_distribution.hpp
new file mode 100644
index 00000000000..1d0111409e8
--- /dev/null
+++ b/boost/boost/random/exponential_distribution.hpp
@@ -0,0 +1,81 @@
+/* boost random/exponential_distribution.hpp header file
+ *
+ * Copyright Jens Maurer 2000-2001
+ * 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.
+ *
+ * $Id: exponential_distribution.hpp,v 1.16 2004/07/27 03:43:32 dgregor Exp $
+ *
+ * Revision history
+ * 2001-02-18 moved to individual header files
+ */
+
+#ifndef BOOST_RANDOM_EXPONENTIAL_DISTRIBUTION_HPP
+#define BOOST_RANDOM_EXPONENTIAL_DISTRIBUTION_HPP
+
+#include <cmath>
+#include <cassert>
+#include <iostream>
+#include <boost/limits.hpp>
+#include <boost/static_assert.hpp>
+
+namespace boost {
+
+// exponential distribution: p(x) = lambda * exp(-lambda * x)
+template<class RealType = double>
+class exponential_distribution
+{
+public:
+ typedef RealType input_type;
+ typedef RealType result_type;
+
+#if !defined(BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS) && !(defined(BOOST_MSVC) && BOOST_MSVC <= 1300)
+ BOOST_STATIC_ASSERT(!std::numeric_limits<RealType>::is_integer);
+#endif
+
+ explicit exponential_distribution(result_type lambda = result_type(1))
+ : _lambda(lambda) { assert(lambda > result_type(0)); }
+
+ // compiler-generated copy ctor and assignment operator are fine
+
+ result_type lambda() const { return _lambda; }
+
+ void reset() { }
+
+ template<class Engine>
+ result_type operator()(Engine& eng)
+ {
+#ifndef BOOST_NO_STDC_NAMESPACE
+ using std::log;
+#endif
+ return -result_type(1) / _lambda * log(result_type(1)-eng());
+ }
+
+#if !defined(BOOST_NO_OPERATORS_IN_NAMESPACE) && !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS)
+ template<class CharT, class Traits>
+ friend std::basic_ostream<CharT,Traits>&
+ operator<<(std::basic_ostream<CharT,Traits>& os, const exponential_distribution& ed)
+ {
+ os << ed._lambda;
+ return os;
+ }
+
+ template<class CharT, class Traits>
+ friend std::basic_istream<CharT,Traits>&
+ operator>>(std::basic_istream<CharT,Traits>& is, exponential_distribution& ed)
+ {
+ is >> std::ws >> ed._lambda;
+ return is;
+ }
+#endif
+
+private:
+ result_type _lambda;
+};
+
+} // namespace boost
+
+#endif // BOOST_RANDOM_EXPONENTIAL_DISTRIBUTION_HPP
diff --git a/boost/boost/random/gamma_distribution.hpp b/boost/boost/random/gamma_distribution.hpp
new file mode 100644
index 00000000000..4f9a76f837c
--- /dev/null
+++ b/boost/boost/random/gamma_distribution.hpp
@@ -0,0 +1,133 @@
+/* boost random/gamma_distribution.hpp header file
+ *
+ * Copyright Jens Maurer 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 for most recent version including documentation.
+ *
+ * $Id: gamma_distribution.hpp,v 1.9 2004/07/27 03:43:32 dgregor Exp $
+ *
+ */
+
+#ifndef BOOST_RANDOM_GAMMA_DISTRIBUTION_HPP
+#define BOOST_RANDOM_GAMMA_DISTRIBUTION_HPP
+
+#include <cmath>
+#include <cassert>
+#include <boost/limits.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/random/exponential_distribution.hpp>
+
+namespace boost {
+
+// Knuth
+template<class RealType = double>
+class gamma_distribution
+{
+public:
+ typedef RealType input_type;
+ typedef RealType result_type;
+
+#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+ BOOST_STATIC_ASSERT(!std::numeric_limits<RealType>::is_integer);
+#endif
+
+ explicit gamma_distribution(const result_type& alpha = result_type(1))
+ : _exp(result_type(1)), _alpha(alpha)
+ {
+ assert(alpha > result_type(0));
+ init();
+ }
+
+ // compiler-generated copy ctor and assignment operator are fine
+
+ RealType alpha() const { return _alpha; }
+
+ void reset() { _exp.reset(); }
+
+ template<class Engine>
+ result_type operator()(Engine& eng)
+ {
+#ifndef BOOST_NO_STDC_NAMESPACE
+ // allow for Koenig lookup
+ using std::tan; using std::sqrt; using std::exp; using std::log;
+ using std::pow;
+#endif
+ if(_alpha == result_type(1)) {
+ return _exp(eng);
+ } else if(_alpha > result_type(1)) {
+ // Can we have a boost::mathconst please?
+ const result_type pi = result_type(3.14159265358979323846);
+ for(;;) {
+ result_type y = tan(pi * eng());
+ result_type x = sqrt(result_type(2)*_alpha-result_type(1))*y
+ + _alpha-result_type(1);
+ if(x <= result_type(0))
+ continue;
+ if(eng() >
+ (result_type(1)+y*y) * exp((_alpha-result_type(1))
+ *log(x/(_alpha-result_type(1)))
+ - sqrt(result_type(2)*_alpha
+ -result_type(1))*y))
+ continue;
+ return x;
+ }
+ } else /* alpha < 1.0 */ {
+ for(;;) {
+ result_type u = eng();
+ result_type y = _exp(eng);
+ result_type x, q;
+ if(u < _p) {
+ x = exp(-y/_alpha);
+ q = _p*exp(-x);
+ } else {
+ x = result_type(1)+y;
+ q = _p + (result_type(1)-_p) * pow(x, _alpha-result_type(1));
+ }
+ if(u >= q)
+ continue;
+ return x;
+ }
+ }
+ }
+
+#if !defined(BOOST_NO_OPERATORS_IN_NAMESPACE) && !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS)
+ template<class CharT, class Traits>
+ friend std::basic_ostream<CharT,Traits>&
+ operator<<(std::basic_ostream<CharT,Traits>& os, const gamma_distribution& gd)
+ {
+ os << gd._alpha;
+ return os;
+ }
+
+ template<class CharT, class Traits>
+ friend std::basic_istream<CharT,Traits>&
+ operator>>(std::basic_istream<CharT,Traits>& is, gamma_distribution& gd)
+ {
+ is >> std::ws >> gd._alpha;
+ gd.init();
+ return is;
+ }
+#endif
+
+private:
+ void init()
+ {
+#ifndef BOOST_NO_STDC_NAMESPACE
+ // allow for Koenig lookup
+ using std::exp;
+#endif
+ _p = exp(result_type(1)) / (_alpha + exp(result_type(1)));
+ }
+
+ exponential_distribution<RealType> _exp;
+ result_type _alpha;
+ // some data precomputed from the parameters
+ result_type _p;
+};
+
+} // namespace boost
+
+#endif // BOOST_RANDOM_GAMMA_DISTRIBUTION_HPP
diff --git a/boost/boost/random/geometric_distribution.hpp b/boost/boost/random/geometric_distribution.hpp
new file mode 100644
index 00000000000..def0c3561d2
--- /dev/null
+++ b/boost/boost/random/geometric_distribution.hpp
@@ -0,0 +1,97 @@
+/* boost random/geometric_distribution.hpp header file
+ *
+ * Copyright Jens Maurer 2000-2001
+ * 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.
+ *
+ * $Id: geometric_distribution.hpp,v 1.16 2004/07/27 03:43:32 dgregor Exp $
+ *
+ * Revision history
+ * 2001-02-18 moved to individual header files
+ */
+
+#ifndef BOOST_RANDOM_GEOMETRIC_DISTRIBUTION_HPP
+#define BOOST_RANDOM_GEOMETRIC_DISTRIBUTION_HPP
+
+#include <cmath> // std::log
+#include <cassert>
+#include <iostream>
+#include <boost/random/uniform_01.hpp>
+
+namespace boost {
+
+#if defined(__GNUC__) && (__GNUC__ < 3)
+// Special gcc workaround: gcc 2.95.x ignores using-declarations
+// in template classes (confirmed by gcc author Martin v. Loewis)
+ using std::log;
+#endif
+
+// geometric distribution: p(i) = (1-p) * pow(p, i-1) (integer)
+template<class IntType = int, class RealType = double>
+class geometric_distribution
+{
+public:
+ typedef RealType input_type;
+ typedef IntType result_type;
+
+ explicit geometric_distribution(const RealType& p = RealType(0.5))
+ : _p(p)
+ {
+ assert(RealType(0) < p && p < RealType(1));
+ init();
+ }
+
+ // compiler-generated copy ctor and assignment operator are fine
+
+ RealType p() const { return _p; }
+ void reset() { }
+
+ template<class Engine>
+ result_type operator()(Engine& eng)
+ {
+#ifndef BOOST_NO_STDC_NAMESPACE
+ using std::log;
+ using std::floor;
+#endif
+ return IntType(floor(log(RealType(1)-eng()) / _log_p)) + IntType(1);
+ }
+
+#if !defined(BOOST_NO_OPERATORS_IN_NAMESPACE) && !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS)
+ template<class CharT, class Traits>
+ friend std::basic_ostream<CharT,Traits>&
+ operator<<(std::basic_ostream<CharT,Traits>& os, const geometric_distribution& gd)
+ {
+ os << gd._p;
+ return os;
+ }
+
+ template<class CharT, class Traits>
+ friend std::basic_istream<CharT,Traits>&
+ operator>>(std::basic_istream<CharT,Traits>& is, geometric_distribution& gd)
+ {
+ is >> std::ws >> gd._p;
+ gd.init();
+ return is;
+ }
+#endif
+
+private:
+ void init()
+ {
+#ifndef BOOST_NO_STDC_NAMESPACE
+ using std::log;
+#endif
+ _log_p = log(_p);
+ }
+
+ RealType _p;
+ RealType _log_p;
+};
+
+} // namespace boost
+
+#endif // BOOST_RANDOM_GEOMETRIC_DISTRIBUTION_HPP
+
diff --git a/boost/boost/random/inversive_congruential.hpp b/boost/boost/random/inversive_congruential.hpp
new file mode 100644
index 00000000000..df3bd87bef2
--- /dev/null
+++ b/boost/boost/random/inversive_congruential.hpp
@@ -0,0 +1,127 @@
+/* boost random/inversive_congruential.hpp header file
+ *
+ * Copyright Jens Maurer 2000-2001
+ * 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.
+ *
+ * $Id: inversive_congruential.hpp,v 1.11 2005/05/21 15:57:00 dgregor Exp $
+ *
+ * Revision history
+ * 2001-02-18 moved to individual header files
+ */
+
+#ifndef BOOST_RANDOM_INVERSIVE_CONGRUENTIAL_HPP
+#define BOOST_RANDOM_INVERSIVE_CONGRUENTIAL_HPP
+
+#include <iostream>
+#include <cassert>
+#include <boost/config.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/random/detail/const_mod.hpp>
+
+namespace boost {
+namespace random {
+
+// Eichenauer and Lehn 1986
+template<class IntType, IntType a, IntType b, IntType p, IntType val>
+class inversive_congruential
+{
+public:
+ typedef IntType result_type;
+#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION
+ static const bool has_fixed_range = true;
+ static const result_type min_value = (b == 0 ? 1 : 0);
+ static const result_type max_value = p-1;
+#else
+ BOOST_STATIC_CONSTANT(bool, has_fixed_range = false);
+#endif
+ BOOST_STATIC_CONSTANT(result_type, multiplier = a);
+ BOOST_STATIC_CONSTANT(result_type, increment = b);
+ BOOST_STATIC_CONSTANT(result_type, modulus = p);
+
+ result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return b == 0 ? 1 : 0; }
+ result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return p-1; }
+
+ explicit inversive_congruential(IntType y0 = 1) : value(y0)
+ {
+ BOOST_STATIC_ASSERT(b >= 0);
+ BOOST_STATIC_ASSERT(p > 1);
+ BOOST_STATIC_ASSERT(a >= 1);
+ if(b == 0)
+ assert(y0 > 0);
+ }
+ template<class It> inversive_congruential(It& first, It last)
+ { seed(first, last); }
+
+ void seed(IntType y0 = 1) { value = y0; if(b == 0) assert(y0 > 0); }
+ template<class It> void seed(It& first, It last)
+ {
+ if(first == last)
+ throw std::invalid_argument("inversive_congruential::seed");
+ value = *first++;
+ }
+ IntType operator()()
+ {
+ typedef const_mod<IntType, p> do_mod;
+ value = do_mod::mult_add(a, do_mod::invert(value), b);
+ return value;
+ }
+
+ bool validation(result_type x) const { return val == x; }
+
+#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE
+
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+ template<class CharT, class Traits>
+ friend std::basic_ostream<CharT,Traits>&
+ operator<<(std::basic_ostream<CharT,Traits>& os, inversive_congruential x)
+ { os << x.value; return os; }
+
+ template<class CharT, class Traits>
+ friend std::basic_istream<CharT,Traits>&
+ operator>>(std::basic_istream<CharT,Traits>& is, inversive_congruential& x)
+ { is >> x.value; return is; }
+#endif
+
+ friend bool operator==(inversive_congruential x, inversive_congruential y)
+ { return x.value == y.value; }
+ friend bool operator!=(inversive_congruential x, inversive_congruential y)
+ { return !(x == y); }
+#else
+ // Use a member function; Streamable concept not supported.
+ bool operator==(inversive_congruential rhs) const
+ { return value == rhs.value; }
+ bool operator!=(inversive_congruential rhs) const
+ { return !(*this == rhs); }
+#endif
+private:
+ IntType value;
+};
+
+#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION
+// A definition is required even for integral static constants
+template<class IntType, IntType a, IntType b, IntType p, IntType val>
+const bool inversive_congruential<IntType, a, b, p, val>::has_fixed_range;
+template<class IntType, IntType a, IntType b, IntType p, IntType val>
+const typename inversive_congruential<IntType, a, b, p, val>::result_type inversive_congruential<IntType, a, b, p, val>::min_value;
+template<class IntType, IntType a, IntType b, IntType p, IntType val>
+const typename inversive_congruential<IntType, a, b, p, val>::result_type inversive_congruential<IntType, a, b, p, val>::max_value;
+template<class IntType, IntType a, IntType b, IntType p, IntType val>
+const typename inversive_congruential<IntType, a, b, p, val>::result_type inversive_congruential<IntType, a, b, p, val>::multiplier;
+template<class IntType, IntType a, IntType b, IntType p, IntType val>
+const typename inversive_congruential<IntType, a, b, p, val>::result_type inversive_congruential<IntType, a, b, p, val>::increment;
+template<class IntType, IntType a, IntType b, IntType p, IntType val>
+const typename inversive_congruential<IntType, a, b, p, val>::result_type inversive_congruential<IntType, a, b, p, val>::modulus;
+#endif
+
+} // namespace random
+
+typedef random::inversive_congruential<int32_t, 9102, 2147483647-36884165,
+ 2147483647, 0> hellekalek1995;
+
+} // namespace boost
+
+#endif // BOOST_RANDOM_INVERSIVE_CONGRUENTIAL_HPP
diff --git a/boost/boost/random/lagged_fibonacci.hpp b/boost/boost/random/lagged_fibonacci.hpp
new file mode 100644
index 00000000000..8042ba85f8d
--- /dev/null
+++ b/boost/boost/random/lagged_fibonacci.hpp
@@ -0,0 +1,464 @@
+/* boost random/lagged_fibonacci.hpp header file
+ *
+ * Copyright Jens Maurer 2000-2001
+ * 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.
+ *
+ * $Id: lagged_fibonacci.hpp,v 1.28 2005/05/21 15:57:00 dgregor Exp $
+ *
+ * Revision history
+ * 2001-02-18 moved to individual header files
+ */
+
+#ifndef BOOST_RANDOM_LAGGED_FIBONACCI_HPP
+#define BOOST_RANDOM_LAGGED_FIBONACCI_HPP
+
+#include <cmath>
+#include <iostream>
+#include <algorithm> // std::max
+#include <iterator>
+#include <cmath> // std::pow
+#include <boost/config.hpp>
+#include <boost/limits.hpp>
+#include <boost/cstdint.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/random/linear_congruential.hpp>
+#include <boost/random/uniform_01.hpp>
+#include <boost/random/detail/pass_through_engine.hpp>
+
+namespace boost {
+namespace random {
+
+#if BOOST_WORKAROUND(_MSC_FULL_VER, BOOST_TESTED_AT(13102292)) && BOOST_MSVC > 1300
+# define BOOST_RANDOM_EXTRACT_LF
+#endif
+
+#if defined(__APPLE_CC__) && defined(__GNUC__) && (__GNUC__ == 3) && (__GNUC_MINOR__ <= 3)
+# define BOOST_RANDOM_EXTRACT_LF
+#endif
+
+# ifdef BOOST_RANDOM_EXTRACT_LF
+namespace detail
+{
+ template<class IStream, class F, class RealType>
+ IStream&
+ extract_lagged_fibonacci_01(
+ IStream& is
+ , F const& f
+ , unsigned int& i
+ , RealType* x
+ , RealType modulus)
+ {
+ is >> i >> std::ws;
+ for(unsigned int i = 0; i < f.long_lag; ++i)
+ {
+ RealType value;
+ is >> value >> std::ws;
+ x[i] = value / modulus;
+ }
+ return is;
+ }
+
+ template<class IStream, class F, class UIntType>
+ IStream&
+ extract_lagged_fibonacci(
+ IStream& is
+ , F const& f
+ , unsigned int& i
+ , UIntType* x)
+ {
+ is >> i >> std::ws;
+ for(unsigned int i = 0; i < f.long_lag; ++i)
+ is >> x[i] >> std::ws;
+ return is;
+ }
+}
+# endif
+
+template<class UIntType, int w, unsigned int p, unsigned int q,
+ UIntType val = 0>
+class lagged_fibonacci
+{
+public:
+ typedef UIntType result_type;
+ BOOST_STATIC_CONSTANT(bool, has_fixed_range = false);
+ BOOST_STATIC_CONSTANT(int, word_size = w);
+ BOOST_STATIC_CONSTANT(unsigned int, long_lag = p);
+ BOOST_STATIC_CONSTANT(unsigned int, short_lag = q);
+
+ result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return 0; }
+ result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return wordmask; }
+
+ lagged_fibonacci() { init_wordmask(); seed(); }
+ explicit lagged_fibonacci(uint32_t value) { init_wordmask(); seed(value); }
+ template<class It> lagged_fibonacci(It& first, It last)
+ { init_wordmask(); seed(first, last); }
+ // compiler-generated copy ctor and assignment operator are fine
+
+private:
+ void init_wordmask()
+ {
+ wordmask = 0;
+ for(int i = 0; i < w; ++i)
+ wordmask |= (1u << i);
+ }
+
+public:
+ void seed(uint32_t value = 331u)
+ {
+ minstd_rand0 gen(value);
+ for(unsigned int j = 0; j < long_lag; ++j)
+ x[j] = gen() & wordmask;
+ i = long_lag;
+ }
+
+ template<class It>
+ void seed(It& first, It last)
+ {
+ // word size could be smaller than the seed values
+ unsigned int j;
+ for(j = 0; j < long_lag && first != last; ++j, ++first)
+ x[j] = *first & wordmask;
+ i = long_lag;
+ if(first == last && j < long_lag)
+ throw std::invalid_argument("lagged_fibonacci::seed");
+ }
+
+ result_type operator()()
+ {
+ if(i >= long_lag)
+ fill();
+ return x[i++];
+ }
+
+ static bool validation(result_type x)
+ {
+ return x == val;
+ }
+
+#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE
+
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+ template<class CharT, class Traits>
+ friend std::basic_ostream<CharT,Traits>&
+ operator<<(std::basic_ostream<CharT,Traits>& os, const lagged_fibonacci& f)
+ {
+ os << f.i << " ";
+ for(unsigned int i = 0; i < f.long_lag; ++i)
+ os << f.x[i] << " ";
+ return os;
+ }
+
+ template<class CharT, class Traits>
+ friend std::basic_istream<CharT, Traits>&
+ operator>>(std::basic_istream<CharT, Traits>& is, lagged_fibonacci& f)
+ {
+# ifdef BOOST_RANDOM_EXTRACT_LF
+ return detail::extract_lagged_fibonacci(is, f, f.i, f.x);
+# else
+ is >> f.i >> std::ws;
+ for(unsigned int i = 0; i < f.long_lag; ++i)
+ is >> f.x[i] >> std::ws;
+ return is;
+# endif
+ }
+#endif
+
+ friend bool operator==(const lagged_fibonacci& x, const lagged_fibonacci& y)
+ { return x.i == y.i && std::equal(x.x, x.x+long_lag, y.x); }
+ friend bool operator!=(const lagged_fibonacci& x,
+ const lagged_fibonacci& y)
+ { return !(x == y); }
+#else
+ // Use a member function; Streamable concept not supported.
+ bool operator==(const lagged_fibonacci& rhs) const
+ { return i == rhs.i && std::equal(x, x+long_lag, rhs.x); }
+ bool operator!=(const lagged_fibonacci& rhs) const
+ { return !(*this == rhs); }
+#endif
+
+private:
+ void fill();
+ UIntType wordmask;
+ unsigned int i;
+ UIntType x[long_lag];
+};
+
+#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION
+// A definition is required even for integral static constants
+template<class UIntType, int w, unsigned int p, unsigned int q, UIntType val>
+const bool lagged_fibonacci<UIntType, w, p, q, val>::has_fixed_range;
+template<class UIntType, int w, unsigned int p, unsigned int q, UIntType val>
+const unsigned int lagged_fibonacci<UIntType, w, p, q, val>::long_lag;
+template<class UIntType, int w, unsigned int p, unsigned int q, UIntType val>
+const unsigned int lagged_fibonacci<UIntType, w, p, q, val>::short_lag;
+#endif
+
+template<class UIntType, int w, unsigned int p, unsigned int q, UIntType val>
+void lagged_fibonacci<UIntType, w, p, q, val>::fill()
+{
+ // two loops to avoid costly modulo operations
+ { // extra scope for MSVC brokenness w.r.t. for scope
+ for(unsigned int j = 0; j < short_lag; ++j)
+ x[j] = (x[j] + x[j+(long_lag-short_lag)]) & wordmask;
+ }
+ for(unsigned int j = short_lag; j < long_lag; ++j)
+ x[j] = (x[j] + x[j-short_lag]) & wordmask;
+ i = 0;
+}
+
+
+
+// lagged Fibonacci generator for the range [0..1)
+// contributed by Matthias Troyer
+// for p=55, q=24 originally by G. J. Mitchell and D. P. Moore 1958
+
+template<class T, unsigned int p, unsigned int q>
+struct fibonacci_validation
+{
+ BOOST_STATIC_CONSTANT(bool, is_specialized = false);
+ static T value() { return 0; }
+ static T tolerance() { return 0; }
+};
+
+#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION
+// A definition is required even for integral static constants
+template<class T, unsigned int p, unsigned int q>
+const bool fibonacci_validation<T, p, q>::is_specialized;
+#endif
+
+#define BOOST_RANDOM_FIBONACCI_VAL(T,P,Q,V,E) \
+template<> \
+struct fibonacci_validation<T, P, Q> \
+{ \
+ BOOST_STATIC_CONSTANT(bool, is_specialized = true); \
+ static T value() { return V; } \
+ static T tolerance() \
+{ return (std::max)(E, static_cast<T>(5*std::numeric_limits<T>::epsilon())); } \
+};
+// (The extra static_cast<T> in the std::max call above is actually
+// unnecessary except for HP aCC 1.30, which claims that
+// numeric_limits<double>::epsilon() doesn't actually return a double.)
+
+BOOST_RANDOM_FIBONACCI_VAL(double, 607, 273, 0.4293817707235914, 1e-14)
+BOOST_RANDOM_FIBONACCI_VAL(double, 1279, 418, 0.9421630240437659, 1e-14)
+BOOST_RANDOM_FIBONACCI_VAL(double, 2281, 1252, 0.1768114046909004, 1e-14)
+BOOST_RANDOM_FIBONACCI_VAL(double, 3217, 576, 0.1956232694868209, 1e-14)
+BOOST_RANDOM_FIBONACCI_VAL(double, 4423, 2098, 0.9499762202147172, 1e-14)
+BOOST_RANDOM_FIBONACCI_VAL(double, 9689, 5502, 0.05737836943695162, 1e-14)
+BOOST_RANDOM_FIBONACCI_VAL(double, 19937, 9842, 0.5076528587449834, 1e-14)
+BOOST_RANDOM_FIBONACCI_VAL(double, 23209, 13470, 0.5414473810619185, 1e-14)
+BOOST_RANDOM_FIBONACCI_VAL(double, 44497,21034, 0.254135073399297, 1e-14)
+
+#undef BOOST_RANDOM_FIBONACCI_VAL
+
+template<class RealType, int w, unsigned int p, unsigned int q>
+class lagged_fibonacci_01
+{
+public:
+ typedef RealType result_type;
+ BOOST_STATIC_CONSTANT(bool, has_fixed_range = false);
+ BOOST_STATIC_CONSTANT(int, word_size = w);
+ BOOST_STATIC_CONSTANT(unsigned int, long_lag = p);
+ BOOST_STATIC_CONSTANT(unsigned int, short_lag = q);
+
+ lagged_fibonacci_01() { init_modulus(); seed(); }
+ explicit lagged_fibonacci_01(uint32_t value) { init_modulus(); seed(value); }
+ template<class Generator>
+ explicit lagged_fibonacci_01(Generator & gen) { init_modulus(); seed(gen); }
+ template<class It> lagged_fibonacci_01(It& first, It last)
+ { init_modulus(); seed(first, last); }
+ // compiler-generated copy ctor and assignment operator are fine
+
+private:
+ void init_modulus()
+ {
+#ifndef BOOST_NO_STDC_NAMESPACE
+ // allow for Koenig lookup
+ using std::pow;
+#endif
+ _modulus = pow(RealType(2), word_size);
+ }
+
+public:
+ void seed(uint32_t value = 331u)
+ {
+ minstd_rand0 intgen(value);
+ seed(intgen);
+ }
+
+ // For GCC, moving this function out-of-line prevents inlining, which may
+ // reduce overall object code size. However, MSVC does not grok
+ // out-of-line template member functions.
+ template<class Generator>
+ void seed(Generator & gen)
+ {
+ // use pass-by-reference, but wrap argument in pass_through_engine
+ typedef detail::pass_through_engine<Generator&> ref_gen;
+ uniform_01<ref_gen, RealType> gen01 =
+ uniform_01<ref_gen, RealType>(ref_gen(gen));
+ // I could have used std::generate_n, but it takes "gen" by value
+ for(unsigned int j = 0; j < long_lag; ++j)
+ x[j] = gen01();
+ i = long_lag;
+ }
+
+ template<class It>
+ void seed(It& first, It last)
+ {
+#ifndef BOOST_NO_STDC_NAMESPACE
+ // allow for Koenig lookup
+ using std::fmod;
+ using std::pow;
+#endif
+ unsigned long mask = ~((~0u) << (w%32)); // now lowest w bits set
+ RealType two32 = pow(RealType(2), 32);
+ unsigned int j;
+ for(j = 0; j < long_lag && first != last; ++j, ++first) {
+ x[j] = RealType(0);
+ for(int i = 0; i < w/32 && first != last; ++i, ++first)
+ x[j] += *first / pow(two32,i+1);
+ if(first != last && mask != 0)
+ x[j] += fmod((*first & mask) / _modulus, RealType(1));
+ }
+ i = long_lag;
+ if(first == last && j < long_lag)
+ throw std::invalid_argument("lagged_fibonacci_01::seed");
+ }
+
+ result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return result_type(0); }
+ result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return result_type(1); }
+
+ result_type operator()()
+ {
+ if(i >= long_lag)
+ fill();
+ return x[i++];
+ }
+
+ static bool validation(result_type x)
+ {
+ result_type v = fibonacci_validation<result_type, p, q>::value();
+ result_type epsilon = fibonacci_validation<result_type, p, q>::tolerance();
+ // std::abs is a source of trouble: sometimes, it's not overloaded
+ // for double, plus the usual namespace std noncompliance -> avoid it
+ // using std::abs;
+ // return abs(x - v) < 5 * epsilon
+ return x > v - epsilon && x < v + epsilon;
+ }
+
+#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE
+
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+ template<class CharT, class Traits>
+ friend std::basic_ostream<CharT,Traits>&
+ operator<<(std::basic_ostream<CharT,Traits>& os, const lagged_fibonacci_01&f)
+ {
+#ifndef BOOST_NO_STDC_NAMESPACE
+ // allow for Koenig lookup
+ using std::pow;
+#endif
+ os << f.i << " ";
+ std::ios_base::fmtflags oldflags = os.flags(os.dec | os.fixed | os.left);
+ for(unsigned int i = 0; i < f.long_lag; ++i)
+ os << f.x[i] * f._modulus << " ";
+ os.flags(oldflags);
+ return os;
+ }
+
+ template<class CharT, class Traits>
+ friend std::basic_istream<CharT, Traits>&
+ operator>>(std::basic_istream<CharT, Traits>& is, lagged_fibonacci_01& f)
+ {
+# ifdef BOOST_RANDOM_EXTRACT_LF
+ return detail::extract_lagged_fibonacci_01(is, f, f.i, f.x, f._modulus);
+# else
+ is >> f.i >> std::ws;
+ for(unsigned int i = 0; i < f.long_lag; ++i) {
+ typename lagged_fibonacci_01::result_type value;
+ is >> value >> std::ws;
+ f.x[i] = value / f._modulus;
+ }
+ return is;
+# endif
+ }
+#endif
+
+ friend bool operator==(const lagged_fibonacci_01& x,
+ const lagged_fibonacci_01& y)
+ { return x.i == y.i && std::equal(x.x, x.x+long_lag, y.x); }
+ friend bool operator!=(const lagged_fibonacci_01& x,
+ const lagged_fibonacci_01& y)
+ { return !(x == y); }
+#else
+ // Use a member function; Streamable concept not supported.
+ bool operator==(const lagged_fibonacci_01& rhs) const
+ { return i == rhs.i && std::equal(x, x+long_lag, rhs.x); }
+ bool operator!=(const lagged_fibonacci_01& rhs) const
+ { return !(*this == rhs); }
+#endif
+
+private:
+ void fill();
+ unsigned int i;
+ RealType x[long_lag];
+ RealType _modulus;
+};
+
+#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION
+// A definition is required even for integral static constants
+template<class RealType, int w, unsigned int p, unsigned int q>
+const bool lagged_fibonacci_01<RealType, w, p, q>::has_fixed_range;
+template<class RealType, int w, unsigned int p, unsigned int q>
+const unsigned int lagged_fibonacci_01<RealType, w, p, q>::long_lag;
+template<class RealType, int w, unsigned int p, unsigned int q>
+const unsigned int lagged_fibonacci_01<RealType, w, p, q>::short_lag;
+template<class RealType, int w, unsigned int p, unsigned int q>
+const int lagged_fibonacci_01<RealType,w,p,q>::word_size;
+
+#endif
+
+template<class RealType, int w, unsigned int p, unsigned int q>
+void lagged_fibonacci_01<RealType, w, p, q>::fill()
+{
+ // two loops to avoid costly modulo operations
+ { // extra scope for MSVC brokenness w.r.t. for scope
+ for(unsigned int j = 0; j < short_lag; ++j) {
+ RealType t = x[j] + x[j+(long_lag-short_lag)];
+ if(t >= RealType(1))
+ t -= RealType(1);
+ x[j] = t;
+ }
+ }
+ for(unsigned int j = short_lag; j < long_lag; ++j) {
+ RealType t = x[j] + x[j-short_lag];
+ if(t >= RealType(1))
+ t -= RealType(1);
+ x[j] = t;
+ }
+ i = 0;
+}
+
+} // namespace random
+
+typedef random::lagged_fibonacci_01<double, 48, 607, 273> lagged_fibonacci607;
+typedef random::lagged_fibonacci_01<double, 48, 1279, 418> lagged_fibonacci1279;
+typedef random::lagged_fibonacci_01<double, 48, 2281, 1252> lagged_fibonacci2281;
+typedef random::lagged_fibonacci_01<double, 48, 3217, 576> lagged_fibonacci3217;
+typedef random::lagged_fibonacci_01<double, 48, 4423, 2098> lagged_fibonacci4423;
+typedef random::lagged_fibonacci_01<double, 48, 9689, 5502> lagged_fibonacci9689;
+typedef random::lagged_fibonacci_01<double, 48, 19937, 9842> lagged_fibonacci19937;
+typedef random::lagged_fibonacci_01<double, 48, 23209, 13470> lagged_fibonacci23209;
+typedef random::lagged_fibonacci_01<double, 48, 44497, 21034> lagged_fibonacci44497;
+
+
+// It is possible to partially specialize uniform_01<> on lagged_fibonacci_01<>
+// to help the compiler generate efficient code. For GCC, this seems useless,
+// because GCC optimizes (x-0)/(1-0) to (x-0). This is good enough for now.
+
+} // namespace boost
+
+#endif // BOOST_RANDOM_LAGGED_FIBONACCI_HPP
diff --git a/boost/boost/random/linear_congruential.hpp b/boost/boost/random/linear_congruential.hpp
new file mode 100644
index 00000000000..e8339cf06be
--- /dev/null
+++ b/boost/boost/random/linear_congruential.hpp
@@ -0,0 +1,258 @@
+/* boost random/linear_congruential.hpp header file
+ *
+ * Copyright Jens Maurer 2000-2001
+ * 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.
+ *
+ * $Id: linear_congruential.hpp,v 1.22 2005/05/21 15:57:00 dgregor Exp $
+ *
+ * Revision history
+ * 2001-02-18 moved to individual header files
+ */
+
+#ifndef BOOST_RANDOM_LINEAR_CONGRUENTIAL_HPP
+#define BOOST_RANDOM_LINEAR_CONGRUENTIAL_HPP
+
+#include <iostream>
+#include <cassert>
+#include <stdexcept>
+#include <boost/config.hpp>
+#include <boost/limits.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/random/detail/const_mod.hpp>
+#include <boost/detail/workaround.hpp>
+
+namespace boost {
+namespace random {
+
+// compile-time configurable linear congruential generator
+template<class IntType, IntType a, IntType c, IntType m, IntType val>
+class linear_congruential
+{
+public:
+ typedef IntType result_type;
+#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION
+ static const bool has_fixed_range = true;
+ static const result_type min_value = ( c == 0 ? 1 : 0 );
+ static const result_type max_value = m-1;
+#else
+ BOOST_STATIC_CONSTANT(bool, has_fixed_range = false);
+#endif
+ BOOST_STATIC_CONSTANT(IntType, multiplier = a);
+ BOOST_STATIC_CONSTANT(IntType, increment = c);
+ BOOST_STATIC_CONSTANT(IntType, modulus = m);
+
+ // MSVC 6 and possibly others crash when encountering complicated integral
+ // constant expressions. Avoid the check for now.
+ // BOOST_STATIC_ASSERT(m == 0 || a < m);
+ // BOOST_STATIC_ASSERT(m == 0 || c < m);
+
+ explicit linear_congruential(IntType x0 = 1)
+ : _modulus(modulus), _x(_modulus ? (x0 % _modulus) : x0)
+ {
+ assert(c || x0); /* if c == 0 and x(0) == 0 then x(n) = 0 for all n */
+ // overflow check
+ // disabled because it gives spurious "divide by zero" gcc warnings
+ // assert(m == 0 || (a*(m-1)+c) % m == (c < a ? c-a+m : c-a));
+
+ // MSVC fails BOOST_STATIC_ASSERT with std::numeric_limits at class scope
+#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+ BOOST_STATIC_ASSERT(std::numeric_limits<IntType>::is_integer);
+#endif
+ }
+
+ template<class It>
+ linear_congruential(It& first, It last) { seed(first, last); }
+
+ // compiler-generated copy constructor and assignment operator are fine
+ void seed(IntType x0 = 1)
+ {
+ assert(c || x0);
+ _x = (_modulus ? (x0 % _modulus) : x0);
+ }
+
+ template<class It>
+ void seed(It& first, It last)
+ {
+ if(first == last)
+ throw std::invalid_argument("linear_congruential::seed");
+ IntType value = *first++;
+ _x = (_modulus ? (value % _modulus) : value);
+ }
+
+ result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return c == 0 ? 1 : 0; }
+ result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return modulus-1; }
+
+ IntType operator()()
+ {
+ _x = const_mod<IntType, m>::mult_add(a, _x, c);
+ return _x;
+ }
+
+ static bool validation(IntType x) { return val == x; }
+
+#ifdef BOOST_NO_OPERATORS_IN_NAMESPACE
+
+ // Use a member function; Streamable concept not supported.
+ bool operator==(const linear_congruential& rhs) const
+ { return _x == rhs._x; }
+ bool operator!=(const linear_congruential& rhs) const
+ { return !(*this == rhs); }
+
+#else
+ friend bool operator==(const linear_congruential& x,
+ const linear_congruential& y)
+ { return x._x == y._x; }
+ friend bool operator!=(const linear_congruential& x,
+ const linear_congruential& y)
+ { return !(x == y); }
+
+#if !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) && !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))
+ template<class CharT, class Traits>
+ friend std::basic_ostream<CharT,Traits>&
+ operator<<(std::basic_ostream<CharT,Traits>& os,
+ const linear_congruential& lcg)
+ {
+ return os << lcg._x;
+ }
+
+ template<class CharT, class Traits>
+ friend std::basic_istream<CharT,Traits>&
+ operator>>(std::basic_istream<CharT,Traits>& is,
+ linear_congruential& lcg)
+ {
+ return is >> lcg._x;
+ }
+
+private:
+#endif
+#endif
+
+ IntType _modulus; // work-around for gcc "divide by zero" warning in ctor
+ IntType _x;
+};
+
+// probably needs the "no native streams" caveat for STLPort
+#if !defined(__SGI_STL_PORT) && BOOST_WORKAROUND(__GNUC__, == 2)
+template<class IntType, IntType a, IntType c, IntType m, IntType val>
+std::ostream&
+operator<<(std::ostream& os,
+ const linear_congruential<IntType,a,c,m,val>& lcg)
+{
+ return os << lcg._x;
+}
+
+template<class IntType, IntType a, IntType c, IntType m, IntType val>
+std::istream&
+operator>>(std::istream& is,
+ linear_congruential<IntType,a,c,m,val>& lcg)
+{
+ return is >> lcg._x;
+}
+#elif defined(BOOST_NO_OPERATORS_IN_NAMESPACE) || defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))
+template<class CharT, class Traits, class IntType, IntType a, IntType c, IntType m, IntType val>
+std::basic_ostream<CharT,Traits>&
+operator<<(std::basic_ostream<CharT,Traits>& os,
+ const linear_congruential<IntType,a,c,m,val>& lcg)
+{
+ return os << lcg._x;
+}
+
+template<class CharT, class Traits, class IntType, IntType a, IntType c, IntType m, IntType val>
+std::basic_istream<CharT,Traits>&
+operator>>(std::basic_istream<CharT,Traits>& is,
+ linear_congruential<IntType,a,c,m,val>& lcg)
+{
+ return is >> lcg._x;
+}
+#endif
+
+#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION
+// A definition is required even for integral static constants
+template<class IntType, IntType a, IntType c, IntType m, IntType val>
+const bool linear_congruential<IntType, a, c, m, val>::has_fixed_range;
+template<class IntType, IntType a, IntType c, IntType m, IntType val>
+const typename linear_congruential<IntType, a, c, m, val>::result_type linear_congruential<IntType, a, c, m, val>::min_value;
+template<class IntType, IntType a, IntType c, IntType m, IntType val>
+const typename linear_congruential<IntType, a, c, m, val>::result_type linear_congruential<IntType, a, c, m, val>::max_value;
+template<class IntType, IntType a, IntType c, IntType m, IntType val>
+const IntType linear_congruential<IntType,a,c,m,val>::modulus;
+#endif
+
+} // namespace random
+
+// validation values from the publications
+typedef random::linear_congruential<int32_t, 16807, 0, 2147483647,
+ 1043618065> minstd_rand0;
+typedef random::linear_congruential<int32_t, 48271, 0, 2147483647,
+ 399268537> minstd_rand;
+
+
+#if !defined(BOOST_NO_INT64_T) && !defined(BOOST_NO_INTEGRAL_INT64_T)
+// emulate the lrand48() C library function; requires support for uint64_t
+class rand48
+{
+public:
+ typedef int32_t result_type;
+#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION
+ static const bool has_fixed_range = true;
+ static const int32_t min_value = 0;
+ static const int32_t max_value = integer_traits<int32_t>::const_max;
+#else
+ enum { has_fixed_range = false };
+#endif
+ int32_t min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return 0; }
+ int32_t max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return std::numeric_limits<int32_t>::max BOOST_PREVENT_MACRO_SUBSTITUTION (); }
+
+ explicit rand48(int32_t x0 = 1) : lcf(cnv(x0)) { }
+ explicit rand48(uint64_t x0) : lcf(x0) { }
+ template<class It> rand48(It& first, It last) : lcf(first, last) { }
+ // compiler-generated copy ctor and assignment operator are fine
+ void seed(int32_t x0 = 1) { lcf.seed(cnv(x0)); }
+ void seed(uint64_t x0) { lcf.seed(x0); }
+ template<class It> void seed(It& first, It last) { lcf.seed(first,last); }
+
+ int32_t operator()() { return static_cast<int32_t>(lcf() >> 17); }
+ // by experiment from lrand48()
+ static bool validation(int32_t x) { return x == 1993516219; }
+
+#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE
+
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+ template<class CharT,class Traits>
+ friend std::basic_ostream<CharT,Traits>&
+ operator<<(std::basic_ostream<CharT,Traits>& os, const rand48& r)
+ { os << r.lcf; return os; }
+
+ template<class CharT,class Traits>
+ friend std::basic_istream<CharT,Traits>&
+ operator>>(std::basic_istream<CharT,Traits>& is, rand48& r)
+ { is >> r.lcf; return is; }
+#endif
+
+ friend bool operator==(const rand48& x, const rand48& y)
+ { return x.lcf == y.lcf; }
+ friend bool operator!=(const rand48& x, const rand48& y)
+ { return !(x == y); }
+#else
+ // Use a member function; Streamable concept not supported.
+ bool operator==(const rand48& rhs) const
+ { return lcf == rhs.lcf; }
+ bool operator!=(const rand48& rhs) const
+ { return !(*this == rhs); }
+#endif
+private:
+ random::linear_congruential<uint64_t,
+ uint64_t(0xDEECE66DUL) | (uint64_t(0x5) << 32), // xxxxULL is not portable
+ 0xB, uint64_t(1)<<48, /* unknown */ 0> lcf;
+ static uint64_t cnv(int32_t x)
+ { return (static_cast<uint64_t>(x) << 16) | 0x330e; }
+};
+#endif /* !BOOST_NO_INT64_T && !BOOST_NO_INTEGRAL_INT64_T */
+
+} // namespace boost
+
+#endif // BOOST_RANDOM_LINEAR_CONGRUENTIAL_HPP
diff --git a/boost/boost/random/linear_feedback_shift.hpp b/boost/boost/random/linear_feedback_shift.hpp
new file mode 100644
index 00000000000..1823636afb9
--- /dev/null
+++ b/boost/boost/random/linear_feedback_shift.hpp
@@ -0,0 +1,145 @@
+/* boost random/tausworthe.hpp header file
+ *
+ * Copyright Jens Maurer 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 for most recent version including documentation.
+ *
+ * $Id: linear_feedback_shift.hpp,v 1.12 2005/05/21 15:57:00 dgregor Exp $
+ *
+ */
+
+#ifndef BOOST_RANDOM_LINEAR_FEEDBACK_SHIFT_HPP
+#define BOOST_RANDOM_LINEAR_FEEDBACK_SHIFT_HPP
+
+#include <iostream>
+#include <cassert>
+#include <stdexcept>
+#include <boost/config.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/limits.hpp>
+
+namespace boost {
+namespace random {
+
+// Tausworte 1965
+template<class UIntType, int w, int k, int q, int s, UIntType val>
+class linear_feedback_shift
+{
+public:
+ typedef UIntType result_type;
+ // avoid the warning trouble when using (1<<w) on 32 bit machines
+ BOOST_STATIC_CONSTANT(bool, has_fixed_range = false);
+ BOOST_STATIC_CONSTANT(int, word_size = w);
+ BOOST_STATIC_CONSTANT(int, exponent1 = k);
+ BOOST_STATIC_CONSTANT(int, exponent2 = q);
+ BOOST_STATIC_CONSTANT(int, step_size = s);
+
+ result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return 0; }
+ result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return wordmask; }
+
+ // MSVC 6 and possibly others crash when encountering complicated integral
+ // constant expressions. Avoid the checks for now.
+ // BOOST_STATIC_ASSERT(w > 0);
+ // BOOST_STATIC_ASSERT(q > 0);
+ // BOOST_STATIC_ASSERT(k < w);
+ // BOOST_STATIC_ASSERT(0 < 2*q && 2*q < k);
+ // BOOST_STATIC_ASSERT(0 < s && s <= k-q);
+
+ explicit linear_feedback_shift(UIntType s0 = 341) : wordmask(0)
+ {
+ // MSVC fails BOOST_STATIC_ASSERT with std::numeric_limits at class scope
+#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+ BOOST_STATIC_ASSERT(std::numeric_limits<UIntType>::is_integer);
+ BOOST_STATIC_ASSERT(!std::numeric_limits<UIntType>::is_signed);
+#endif
+
+ // avoid "left shift count >= with of type" warning
+ for(int i = 0; i < w; ++i)
+ wordmask |= (1u << i);
+ seed(s0);
+ }
+
+ template<class It> linear_feedback_shift(It& first, It last) : wordmask(0)
+ {
+ // MSVC fails BOOST_STATIC_ASSERT with std::numeric_limits at class scope
+#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+ BOOST_STATIC_ASSERT(std::numeric_limits<UIntType>::is_integer);
+ BOOST_STATIC_ASSERT(!std::numeric_limits<UIntType>::is_signed);
+#endif
+
+ // avoid "left shift count >= with of type" warning
+ for(int i = 0; i < w; ++i)
+ wordmask |= (1u << i);
+ seed(first, last);
+ }
+
+ void seed(UIntType s0 = 341) { assert(s0 >= (1 << (w-k))); value = s0; }
+ template<class It> void seed(It& first, It last)
+ {
+ if(first == last)
+ throw std::invalid_argument("linear_feedback_shift::seed");
+ value = *first++;
+ assert(value >= (1 << (w-k)));
+ }
+
+ result_type operator()()
+ {
+ const UIntType b = (((value << q) ^ value) & wordmask) >> (k-s);
+ const UIntType mask = ( (~static_cast<UIntType>(0)) << (w-k) ) & wordmask;
+ value = ((value & mask) << s) ^ b;
+ return value;
+ }
+ bool validation(result_type x) const { return val == x; }
+
+#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE
+
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+ template<class CharT, class Traits>
+ friend std::basic_ostream<CharT,Traits>&
+ operator<<(std::basic_ostream<CharT,Traits>& os, linear_feedback_shift x)
+ { os << x.value; return os; }
+
+ template<class CharT, class Traits>
+ friend std::basic_istream<CharT,Traits>&
+ operator>>(std::basic_istream<CharT,Traits>& is, linear_feedback_shift& x)
+ { is >> x.value; return is; }
+#endif
+
+ friend bool operator==(linear_feedback_shift x, linear_feedback_shift y)
+ { return x.value == y.value; }
+ friend bool operator!=(linear_feedback_shift x, linear_feedback_shift y)
+ { return !(x == y); }
+#else
+ // Use a member function; Streamable concept not supported.
+ bool operator==(linear_feedback_shift rhs) const
+ { return value == rhs.value; }
+ bool operator!=(linear_feedback_shift rhs) const
+ { return !(*this == rhs); }
+#endif
+
+private:
+ UIntType wordmask; // avoid "left shift count >= width of type" warnings
+ UIntType value;
+};
+
+#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION
+// A definition is required even for integral static constants
+template<class UIntType, int w, int k, int q, int s, UIntType val>
+const bool linear_feedback_shift<UIntType, w, k, q, s, val>::has_fixed_range;
+template<class UIntType, int w, int k, int q, int s, UIntType val>
+const int linear_feedback_shift<UIntType, w, k, q, s, val>::word_size;
+template<class UIntType, int w, int k, int q, int s, UIntType val>
+const int linear_feedback_shift<UIntType, w, k, q, s, val>::exponent1;
+template<class UIntType, int w, int k, int q, int s, UIntType val>
+const int linear_feedback_shift<UIntType, w, k, q, s, val>::exponent2;
+template<class UIntType, int w, int k, int q, int s, UIntType val>
+const int linear_feedback_shift<UIntType, w, k, q, s, val>::step_size;
+#endif
+
+} // namespace random
+} // namespace boost
+
+#endif // BOOST_RANDOM_LINEAR_FEEDBACK_SHIFT_HPP
diff --git a/boost/boost/random/lognormal_distribution.hpp b/boost/boost/random/lognormal_distribution.hpp
new file mode 100644
index 00000000000..f951c7d2546
--- /dev/null
+++ b/boost/boost/random/lognormal_distribution.hpp
@@ -0,0 +1,114 @@
+/* boost random/lognormal_distribution.hpp header file
+ *
+ * Copyright Jens Maurer 2000-2001
+ * 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.
+ *
+ * $Id: lognormal_distribution.hpp,v 1.16 2004/07/27 03:43:32 dgregor Exp $
+ *
+ * Revision history
+ * 2001-02-18 moved to individual header files
+ */
+
+#ifndef BOOST_RANDOM_LOGNORMAL_DISTRIBUTION_HPP
+#define BOOST_RANDOM_LOGNORMAL_DISTRIBUTION_HPP
+
+#include <cmath> // std::exp, std::sqrt
+#include <cassert>
+#include <iostream>
+#include <boost/limits.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/random/normal_distribution.hpp>
+
+#ifdef BOOST_NO_STDC_NAMESPACE
+namespace std {
+ using ::log;
+ using ::sqrt;
+}
+#endif
+
+namespace boost {
+
+#if defined(__GNUC__) && (__GNUC__ < 3)
+// Special gcc workaround: gcc 2.95.x ignores using-declarations
+// in template classes (confirmed by gcc author Martin v. Loewis)
+ using std::sqrt;
+ using std::exp;
+#endif
+
+template<class RealType = double>
+class lognormal_distribution
+{
+public:
+ typedef typename normal_distribution<RealType>::input_type input_type;
+ typedef RealType result_type;
+
+#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+ BOOST_STATIC_ASSERT(!std::numeric_limits<RealType>::is_integer);
+#endif
+
+ explicit lognormal_distribution(result_type mean = result_type(1),
+ result_type sigma = result_type(1))
+ : _mean(mean), _sigma(sigma)
+ {
+ assert(mean > result_type(0));
+ init();
+ }
+
+ // compiler-generated copy ctor and assignment operator are fine
+
+ RealType& mean() const { return _mean; }
+ RealType& sigma() const { return _sigma; }
+ void reset() { _normal.reset(); }
+
+ template<class Engine>
+ result_type operator()(Engine& eng)
+ {
+#ifndef BOOST_NO_STDC_NAMESPACE
+ // allow for Koenig lookup
+ using std::exp;
+#endif
+ return exp(_normal(eng) * _nsigma + _nmean);
+ }
+
+#if !defined(BOOST_NO_OPERATORS_IN_NAMESPACE) && !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS)
+ template<class CharT, class Traits>
+ friend std::basic_ostream<CharT,Traits>&
+ operator<<(std::basic_ostream<CharT,Traits>& os, const lognormal_distribution& ld)
+ {
+ os << ld._normal << " " << ld._mean << " " << ld._sigma;
+ return os;
+ }
+
+ template<class CharT, class Traits>
+ friend std::basic_istream<CharT,Traits>&
+ operator>>(std::basic_istream<CharT,Traits>& is, lognormal_distribution& ld)
+ {
+ is >> std::ws >> ld._normal >> std::ws >> ld._mean >> std::ws >> ld._sigma;
+ ld.init();
+ return is;
+ }
+#endif
+
+private:
+ void init()
+ {
+#ifndef BOOST_NO_STDC_NAMESPACE
+ // allow for Koenig lookup
+ using std::exp; using std::log; using std::sqrt;
+#endif
+ _nmean = log(_mean*_mean/sqrt(_sigma*_sigma + _mean*_mean));
+ _nsigma = sqrt(log(_sigma*_sigma/_mean/_mean+result_type(1)));
+ }
+
+ RealType _mean, _sigma;
+ RealType _nmean, _nsigma;
+ normal_distribution<result_type> _normal;
+};
+
+} // namespace boost
+
+#endif // BOOST_RANDOM_LOGNORMAL_DISTRIBUTION_HPP
diff --git a/boost/boost/random/mersenne_twister.hpp b/boost/boost/random/mersenne_twister.hpp
new file mode 100644
index 00000000000..cdada35ab03
--- /dev/null
+++ b/boost/boost/random/mersenne_twister.hpp
@@ -0,0 +1,302 @@
+/* boost random/mersenne_twister.hpp header file
+ *
+ * Copyright Jens Maurer 2000-2001
+ * 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.
+ *
+ * $Id: mersenne_twister.hpp,v 1.20 2005/07/21 22:04:31 jmaurer Exp $
+ *
+ * Revision history
+ * 2001-02-18 moved to individual header files
+ */
+
+#ifndef BOOST_RANDOM_MERSENNE_TWISTER_HPP
+#define BOOST_RANDOM_MERSENNE_TWISTER_HPP
+
+#include <iostream>
+#include <algorithm> // std::copy
+#include <stdexcept>
+#include <boost/config.hpp>
+#include <boost/limits.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/integer_traits.hpp>
+#include <boost/cstdint.hpp>
+#include <boost/random/linear_congruential.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/random/detail/ptr_helper.hpp>
+
+namespace boost {
+namespace random {
+
+// http://www.math.keio.ac.jp/matumoto/emt.html
+template<class UIntType, int w, int n, int m, int r, UIntType a, int u,
+ int s, UIntType b, int t, UIntType c, int l, UIntType val>
+class mersenne_twister
+{
+public:
+ typedef UIntType result_type;
+ BOOST_STATIC_CONSTANT(int, word_size = w);
+ BOOST_STATIC_CONSTANT(int, state_size = n);
+ BOOST_STATIC_CONSTANT(int, shift_size = m);
+ BOOST_STATIC_CONSTANT(int, mask_bits = r);
+ BOOST_STATIC_CONSTANT(UIntType, parameter_a = a);
+ BOOST_STATIC_CONSTANT(int, output_u = u);
+ BOOST_STATIC_CONSTANT(int, output_s = s);
+ BOOST_STATIC_CONSTANT(UIntType, output_b = b);
+ BOOST_STATIC_CONSTANT(int, output_t = t);
+ BOOST_STATIC_CONSTANT(UIntType, output_c = c);
+ BOOST_STATIC_CONSTANT(int, output_l = l);
+
+ BOOST_STATIC_CONSTANT(bool, has_fixed_range = false);
+
+ mersenne_twister() { seed(); }
+
+#if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x520)
+ // Work around overload resolution problem (Gennadiy E. Rozental)
+ explicit mersenne_twister(const UIntType& value)
+#else
+ explicit mersenne_twister(UIntType value)
+#endif
+ { seed(value); }
+ template<class It> mersenne_twister(It& first, It last) { seed(first,last); }
+
+ template<class Generator>
+ explicit mersenne_twister(Generator & gen) { seed(gen); }
+
+ // compiler-generated copy ctor and assignment operator are fine
+
+ void seed() { seed(UIntType(5489)); }
+
+#if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x520)
+ // Work around overload resolution problem (Gennadiy E. Rozental)
+ void seed(const UIntType& value)
+#else
+ void seed(UIntType value)
+#endif
+ {
+ // New seeding algorithm from
+ // http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/emt19937ar.html
+ // In the previous versions, MSBs of the seed affected only MSBs of the
+ // state x[].
+ const UIntType mask = ~0u;
+ x[0] = value & mask;
+ for (i = 1; i < n; i++) {
+ // See Knuth "The Art of Computer Programming" Vol. 2, 3rd ed., page 106
+ x[i] = (1812433253UL * (x[i-1] ^ (x[i-1] >> (w-2))) + i) & mask;
+ }
+ }
+
+ // For GCC, moving this function out-of-line prevents inlining, which may
+ // reduce overall object code size. However, MSVC does not grok
+ // out-of-line definitions of member function templates.
+ template<class Generator>
+ void seed(Generator & gen)
+ {
+#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+ BOOST_STATIC_ASSERT(!std::numeric_limits<result_type>::is_signed);
+#endif
+ // I could have used std::generate_n, but it takes "gen" by value
+ for(int j = 0; j < n; j++)
+ x[j] = gen();
+ i = n;
+ }
+
+ template<class It>
+ void seed(It& first, It last)
+ {
+ int j;
+ for(j = 0; j < n && first != last; ++j, ++first)
+ x[j] = *first;
+ i = n;
+ if(first == last && j < n)
+ throw std::invalid_argument("mersenne_twister::seed");
+ }
+
+ result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return 0; }
+ result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const
+ {
+ // avoid "left shift count >= with of type" warning
+ result_type res = 0;
+ for(int i = 0; i < w; ++i)
+ res |= (1u << i);
+ return res;
+ }
+
+ result_type operator()();
+ static bool validation(result_type v) { return val == v; }
+
+#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE
+
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+ template<class CharT, class Traits>
+ friend std::basic_ostream<CharT,Traits>&
+ operator<<(std::basic_ostream<CharT,Traits>& os, const mersenne_twister& mt)
+ {
+ for(int j = 0; j < mt.state_size; ++j)
+ os << mt.compute(j) << " ";
+ return os;
+ }
+
+ template<class CharT, class Traits>
+ friend std::basic_istream<CharT,Traits>&
+ operator>>(std::basic_istream<CharT,Traits>& is, mersenne_twister& mt)
+ {
+ for(int j = 0; j < mt.state_size; ++j)
+ is >> mt.x[j] >> std::ws;
+ // MSVC (up to 7.1) and Borland (up to 5.64) don't handle the template
+ // value parameter "n" available from the class template scope, so use
+ // the static constant with the same value
+ mt.i = mt.state_size;
+ return is;
+ }
+#endif
+
+ friend bool operator==(const mersenne_twister& x, const mersenne_twister& y)
+ {
+ for(int j = 0; j < state_size; ++j)
+ if(x.compute(j) != y.compute(j))
+ return false;
+ return true;
+ }
+
+ friend bool operator!=(const mersenne_twister& x, const mersenne_twister& y)
+ { return !(x == y); }
+#else
+ // Use a member function; Streamable concept not supported.
+ bool operator==(const mersenne_twister& rhs) const
+ {
+ for(int j = 0; j < state_size; ++j)
+ if(compute(j) != rhs.compute(j))
+ return false;
+ return true;
+ }
+
+ bool operator!=(const mersenne_twister& rhs) const
+ { return !(*this == rhs); }
+#endif
+
+private:
+ // returns x(i-n+index), where index is in 0..n-1
+ UIntType compute(unsigned int index) const
+ {
+ // equivalent to (i-n+index) % 2n, but doesn't produce negative numbers
+ return x[ (i + n + index) % (2*n) ];
+ }
+ void twist(int block);
+
+ // state representation: next output is o(x(i))
+ // x[0] ... x[k] x[k+1] ... x[n-1] x[n] ... x[2*n-1] represents
+ // x(i-k) ... x(i) x(i+1) ... x(i-k+n-1) x(i-k-n) ... x[i(i-k-1)]
+ // The goal is to always have x(i-n) ... x(i-1) available for
+ // operator== and save/restore.
+
+ UIntType x[2*n];
+ int i;
+};
+
+#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION
+// A definition is required even for integral static constants
+template<class UIntType, int w, int n, int m, int r, UIntType a, int u,
+ int s, UIntType b, int t, UIntType c, int l, UIntType val>
+const bool mersenne_twister<UIntType,w,n,m,r,a,u,s,b,t,c,l,val>::has_fixed_range;
+template<class UIntType, int w, int n, int m, int r, UIntType a, int u,
+ int s, UIntType b, int t, UIntType c, int l, UIntType val>
+const int mersenne_twister<UIntType,w,n,m,r,a,u,s,b,t,c,l,val>::state_size;
+template<class UIntType, int w, int n, int m, int r, UIntType a, int u,
+ int s, UIntType b, int t, UIntType c, int l, UIntType val>
+const int mersenne_twister<UIntType,w,n,m,r,a,u,s,b,t,c,l,val>::shift_size;
+template<class UIntType, int w, int n, int m, int r, UIntType a, int u,
+ int s, UIntType b, int t, UIntType c, int l, UIntType val>
+const int mersenne_twister<UIntType,w,n,m,r,a,u,s,b,t,c,l,val>::mask_bits;
+template<class UIntType, int w, int n, int m, int r, UIntType a, int u,
+ int s, UIntType b, int t, UIntType c, int l, UIntType val>
+const UIntType mersenne_twister<UIntType,w,n,m,r,a,u,s,b,t,c,l,val>::parameter_a;
+template<class UIntType, int w, int n, int m, int r, UIntType a, int u,
+ int s, UIntType b, int t, UIntType c, int l, UIntType val>
+const int mersenne_twister<UIntType,w,n,m,r,a,u,s,b,t,c,l,val>::output_u;
+template<class UIntType, int w, int n, int m, int r, UIntType a, int u,
+ int s, UIntType b, int t, UIntType c, int l, UIntType val>
+const int mersenne_twister<UIntType,w,n,m,r,a,u,s,b,t,c,l,val>::output_s;
+template<class UIntType, int w, int n, int m, int r, UIntType a, int u,
+ int s, UIntType b, int t, UIntType c, int l, UIntType val>
+const UIntType mersenne_twister<UIntType,w,n,m,r,a,u,s,b,t,c,l,val>::output_b;
+template<class UIntType, int w, int n, int m, int r, UIntType a, int u,
+ int s, UIntType b, int t, UIntType c, int l, UIntType val>
+const int mersenne_twister<UIntType,w,n,m,r,a,u,s,b,t,c,l,val>::output_t;
+template<class UIntType, int w, int n, int m, int r, UIntType a, int u,
+ int s, UIntType b, int t, UIntType c, int l, UIntType val>
+const UIntType mersenne_twister<UIntType,w,n,m,r,a,u,s,b,t,c,l,val>::output_c;
+template<class UIntType, int w, int n, int m, int r, UIntType a, int u,
+ int s, UIntType b, int t, UIntType c, int l, UIntType val>
+const int mersenne_twister<UIntType,w,n,m,r,a,u,s,b,t,c,l,val>::output_l;
+#endif
+
+template<class UIntType, int w, int n, int m, int r, UIntType a, int u,
+ int s, UIntType b, int t, UIntType c, int l, UIntType val>
+void mersenne_twister<UIntType,w,n,m,r,a,u,s,b,t,c,l,val>::twist(int block)
+{
+ const UIntType upper_mask = (~0u) << r;
+ const UIntType lower_mask = ~upper_mask;
+
+ if(block == 0) {
+ for(int j = n; j < 2*n; j++) {
+ UIntType y = (x[j-n] & upper_mask) | (x[j-(n-1)] & lower_mask);
+ x[j] = x[j-(n-m)] ^ (y >> 1) ^ (y&1 ? a : 0);
+ }
+ } else if (block == 1) {
+ // split loop to avoid costly modulo operations
+ { // extra scope for MSVC brokenness w.r.t. for scope
+ for(int j = 0; j < n-m; j++) {
+ UIntType y = (x[j+n] & upper_mask) | (x[j+n+1] & lower_mask);
+ x[j] = x[j+n+m] ^ (y >> 1) ^ (y&1 ? a : 0);
+ }
+ }
+
+ for(int j = n-m; j < n-1; j++) {
+ UIntType y = (x[j+n] & upper_mask) | (x[j+n+1] & lower_mask);
+ x[j] = x[j-(n-m)] ^ (y >> 1) ^ (y&1 ? a : 0);
+ }
+ // last iteration
+ UIntType y = (x[2*n-1] & upper_mask) | (x[0] & lower_mask);
+ x[n-1] = x[m-1] ^ (y >> 1) ^ (y&1 ? a : 0);
+ i = 0;
+ }
+}
+
+template<class UIntType, int w, int n, int m, int r, UIntType a, int u,
+ int s, UIntType b, int t, UIntType c, int l, UIntType val>
+inline typename mersenne_twister<UIntType,w,n,m,r,a,u,s,b,t,c,l,val>::result_type
+mersenne_twister<UIntType,w,n,m,r,a,u,s,b,t,c,l,val>::operator()()
+{
+ if(i == n)
+ twist(0);
+ else if(i >= 2*n)
+ twist(1);
+ // Step 4
+ UIntType z = x[i];
+ ++i;
+ z ^= (z >> u);
+ z ^= ((z << s) & b);
+ z ^= ((z << t) & c);
+ z ^= (z >> l);
+ return z;
+}
+
+} // namespace random
+
+
+typedef random::mersenne_twister<uint32_t,32,351,175,19,0xccab8ee7,11,
+ 7,0x31b6ab00,15,0xffe50000,17, 0xa37d3c92> mt11213b;
+
+// validation by experiment from mt19937.c
+typedef random::mersenne_twister<uint32_t,32,624,397,31,0x9908b0df,11,
+ 7,0x9d2c5680,15,0xefc60000,18, 3346425566U> mt19937;
+
+} // namespace boost
+
+BOOST_RANDOM_PTR_HELPER_SPEC(boost::mt19937)
+
+#endif // BOOST_RANDOM_MERSENNE_TWISTER_HPP
diff --git a/boost/boost/random/normal_distribution.hpp b/boost/boost/random/normal_distribution.hpp
new file mode 100644
index 00000000000..ed63e5839b2
--- /dev/null
+++ b/boost/boost/random/normal_distribution.hpp
@@ -0,0 +1,111 @@
+/* boost random/normal_distribution.hpp header file
+ *
+ * Copyright Jens Maurer 2000-2001
+ * 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.
+ *
+ * $Id: normal_distribution.hpp,v 1.20 2004/07/27 03:43:32 dgregor Exp $
+ *
+ * Revision history
+ * 2001-02-18 moved to individual header files
+ */
+
+#ifndef BOOST_RANDOM_NORMAL_DISTRIBUTION_HPP
+#define BOOST_RANDOM_NORMAL_DISTRIBUTION_HPP
+
+#include <cmath>
+#include <cassert>
+#include <iostream>
+#include <boost/limits.hpp>
+#include <boost/static_assert.hpp>
+
+namespace boost {
+
+// deterministic polar method, uses trigonometric functions
+template<class RealType = double>
+class normal_distribution
+{
+public:
+ typedef RealType input_type;
+ typedef RealType result_type;
+
+#if !defined(BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS) && !(defined(BOOST_MSVC) && BOOST_MSVC <= 1300)
+ BOOST_STATIC_ASSERT(!std::numeric_limits<RealType>::is_integer);
+#endif
+
+ explicit normal_distribution(const result_type& mean = result_type(0),
+ const result_type& sigma = result_type(1))
+ : _mean(mean), _sigma(sigma), _valid(false)
+ {
+ assert(sigma >= result_type(0));
+ }
+
+ // compiler-generated copy constructor is NOT fine, need to purge cache
+ normal_distribution(const normal_distribution& other)
+ : _mean(other._mean), _sigma(other._sigma), _valid(false)
+ {
+ }
+
+ // compiler-generated copy ctor and assignment operator are fine
+
+ RealType mean() const { return _mean; }
+ RealType sigma() const { return _sigma; }
+
+ void reset() { _valid = false; }
+
+ template<class Engine>
+ result_type operator()(Engine& eng)
+ {
+#ifndef BOOST_NO_STDC_NAMESPACE
+ // allow for Koenig lookup
+ using std::sqrt; using std::log; using std::sin; using std::cos;
+#endif
+ if(!_valid) {
+ _r1 = eng();
+ _r2 = eng();
+ _cached_rho = sqrt(-result_type(2) * log(result_type(1)-_r2));
+ _valid = true;
+ } else {
+ _valid = false;
+ }
+ // Can we have a boost::mathconst please?
+ const result_type pi = result_type(3.14159265358979323846);
+
+ return _cached_rho * (_valid ?
+ cos(result_type(2)*pi*_r1) :
+ sin(result_type(2)*pi*_r1))
+ * _sigma + _mean;
+ }
+
+#if !defined(BOOST_NO_OPERATORS_IN_NAMESPACE) && !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS)
+ template<class CharT, class Traits>
+ friend std::basic_ostream<CharT,Traits>&
+ operator<<(std::basic_ostream<CharT,Traits>& os, const normal_distribution& nd)
+ {
+ os << nd._mean << " " << nd._sigma << " "
+ << nd._valid << " " << nd._cached_rho << " " << nd._r1;
+ return os;
+ }
+
+ template<class CharT, class Traits>
+ friend std::basic_istream<CharT,Traits>&
+ operator>>(std::basic_istream<CharT,Traits>& is, normal_distribution& nd)
+ {
+ is >> std::ws >> nd._mean >> std::ws >> nd._sigma
+ >> std::ws >> nd._valid >> std::ws >> nd._cached_rho
+ >> std::ws >> nd._r1;
+ return is;
+ }
+#endif
+private:
+ result_type _mean, _sigma;
+ result_type _r1, _r2, _cached_rho;
+ bool _valid;
+};
+
+} // namespace boost
+
+#endif // BOOST_RANDOM_NORMAL_DISTRIBUTION_HPP
diff --git a/boost/boost/random/poisson_distribution.hpp b/boost/boost/random/poisson_distribution.hpp
new file mode 100644
index 00000000000..dead505445b
--- /dev/null
+++ b/boost/boost/random/poisson_distribution.hpp
@@ -0,0 +1,99 @@
+/* boost random/poisson_distribution.hpp header file
+ *
+ * Copyright Jens Maurer 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 for most recent version including documentation.
+ *
+ * $Id: poisson_distribution.hpp,v 1.15 2005/05/21 15:57:00 dgregor Exp $
+ *
+ */
+
+#ifndef BOOST_RANDOM_POISSON_DISTRIBUTION_HPP
+#define BOOST_RANDOM_POISSON_DISTRIBUTION_HPP
+
+#include <cmath>
+#include <cassert>
+#include <iostream>
+#include <boost/limits.hpp>
+#include <boost/static_assert.hpp>
+
+namespace boost {
+
+// Knuth
+template<class IntType = int, class RealType = double>
+class poisson_distribution
+{
+public:
+ typedef RealType input_type;
+ typedef IntType result_type;
+
+ explicit poisson_distribution(const RealType& mean = RealType(1))
+ : _mean(mean)
+ {
+#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+ // MSVC fails BOOST_STATIC_ASSERT with std::numeric_limits at class scope
+ BOOST_STATIC_ASSERT(std::numeric_limits<IntType>::is_integer);
+ BOOST_STATIC_ASSERT(!std::numeric_limits<RealType>::is_integer);
+#endif
+
+ assert(mean > RealType(0));
+ init();
+ }
+
+ // compiler-generated copy ctor and assignment operator are fine
+
+ RealType mean() const { return _mean; }
+ void reset() { }
+
+ template<class Engine>
+ result_type operator()(Engine& eng)
+ {
+ // TODO: This is O(_mean), but it should be O(log(_mean)) for large _mean
+ RealType product = RealType(1);
+ for(result_type m = 0; ; ++m) {
+ product *= eng();
+ if(product <= _exp_mean)
+ return m;
+ }
+ }
+
+#if !defined(BOOST_NO_OPERATORS_IN_NAMESPACE) && !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS)
+ template<class CharT, class Traits>
+ friend std::basic_ostream<CharT,Traits>&
+ operator<<(std::basic_ostream<CharT,Traits>& os, const poisson_distribution& pd)
+ {
+ os << pd._mean;
+ return os;
+ }
+
+ template<class CharT, class Traits>
+ friend std::basic_istream<CharT,Traits>&
+ operator>>(std::basic_istream<CharT,Traits>& is, poisson_distribution& pd)
+ {
+ is >> std::ws >> pd._mean;
+ pd.init();
+ return is;
+ }
+#endif
+
+private:
+ void init()
+ {
+#ifndef BOOST_NO_STDC_NAMESPACE
+ // allow for Koenig lookup
+ using std::exp;
+#endif
+ _exp_mean = exp(-_mean);
+ }
+
+ RealType _mean;
+ // some precomputed data from the parameters
+ RealType _exp_mean;
+};
+
+} // namespace boost
+
+#endif // BOOST_RANDOM_POISSON_DISTRIBUTION_HPP
diff --git a/boost/boost/random/random_number_generator.hpp b/boost/boost/random/random_number_generator.hpp
new file mode 100644
index 00000000000..794f32bd5c8
--- /dev/null
+++ b/boost/boost/random/random_number_generator.hpp
@@ -0,0 +1,56 @@
+/* boost random/random_number_generator.hpp header file
+ *
+ * Copyright Jens Maurer 2000-2001
+ * 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.
+ *
+ * $Id: random_number_generator.hpp,v 1.5 2004/11/09 21:22:00 jmaurer Exp $
+ *
+ * Revision history
+ * 2001-02-18 moved to individual header files
+ */
+
+#ifndef BOOST_RANDOM_RANDOM_NUMBER_GENERATOR_HPP
+#define BOOST_RANDOM_RANDOM_NUMBER_GENERATOR_HPP
+
+#include <boost/config.hpp>
+#include <boost/limits.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/random/uniform_int.hpp>
+#include <boost/random/variate_generator.hpp>
+
+namespace boost {
+
+// a model for RandomNumberGenerator std:25.2.11 [lib.alg.random.shuffle]
+template<class UniformRandomNumberGenerator, class IntType = long>
+class random_number_generator
+{
+public:
+ typedef UniformRandomNumberGenerator base_type;
+ typedef IntType argument_type;
+ typedef IntType result_type;
+ random_number_generator(base_type& rng) : _rng(rng)
+ {
+#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+ BOOST_STATIC_ASSERT(std::numeric_limits<result_type>::is_integer);
+#endif
+ }
+ // compiler-generated copy ctor is fine
+ // assignment is disallowed because there is a reference member
+
+ result_type operator()(argument_type n)
+ {
+ typedef uniform_int<IntType> dist_type;
+ return variate_generator<base_type&, dist_type>(_rng, dist_type(0, n-1))();
+ }
+
+private:
+ base_type& _rng;
+};
+
+} // namespace boost
+
+#endif // BOOST_RANDOM_RANDOM_NUMBER_GENERATOR_HPP
diff --git a/boost/boost/random/ranlux.hpp b/boost/boost/random/ranlux.hpp
new file mode 100644
index 00000000000..dfd845e6c9e
--- /dev/null
+++ b/boost/boost/random/ranlux.hpp
@@ -0,0 +1,50 @@
+/* boost random/ranlux.hpp header file
+ *
+ * Copyright Jens Maurer 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 for most recent version including documentation.
+ *
+ * $Id: ranlux.hpp,v 1.5 2004/07/27 03:43:32 dgregor Exp $
+ *
+ * Revision history
+ * 2001-02-18 created
+ */
+
+#ifndef BOOST_RANDOM_RANLUX_HPP
+#define BOOST_RANDOM_RANLUX_HPP
+
+#include <boost/config.hpp>
+#include <boost/random/subtract_with_carry.hpp>
+#include <boost/random/discard_block.hpp>
+
+namespace boost {
+
+namespace random {
+ typedef subtract_with_carry<int, (1<<24), 10, 24, 0> ranlux_base;
+ typedef subtract_with_carry_01<float, 24, 10, 24> ranlux_base_01;
+ typedef subtract_with_carry_01<double, 48, 10, 24> ranlux64_base_01;
+}
+
+typedef random::discard_block<random::ranlux_base, 223, 24> ranlux3;
+typedef random::discard_block<random::ranlux_base, 389, 24> ranlux4;
+
+typedef random::discard_block<random::ranlux_base_01, 223, 24> ranlux3_01;
+typedef random::discard_block<random::ranlux_base_01, 389, 24> ranlux4_01;
+
+typedef random::discard_block<random::ranlux64_base_01, 223, 24> ranlux64_3_01;
+typedef random::discard_block<random::ranlux64_base_01, 389, 24> ranlux64_4_01;
+
+#if !defined(BOOST_NO_INT64_T) && !defined(BOOST_NO_INTEGRAL_INT64_T)
+namespace random {
+ typedef random::subtract_with_carry<int64_t, (int64_t(1)<<48), 10, 24, 0> ranlux64_base;
+}
+typedef random::discard_block<random::ranlux64_base, 223, 24> ranlux64_3;
+typedef random::discard_block<random::ranlux64_base, 389, 24> ranlux64_4;
+#endif /* !BOOST_NO_INT64_T && !BOOST_NO_INTEGRAL_INT64_T */
+
+} // namespace boost
+
+#endif // BOOST_RANDOM_LINEAR_CONGRUENTIAL_HPP
diff --git a/boost/boost/random/shuffle_output.hpp b/boost/boost/random/shuffle_output.hpp
new file mode 100644
index 00000000000..25ebacd824c
--- /dev/null
+++ b/boost/boost/random/shuffle_output.hpp
@@ -0,0 +1,175 @@
+/* boost random/shuffle_output.hpp header file
+ *
+ * Copyright Jens Maurer 2000-2001
+ * 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.
+ *
+ * $Id: shuffle_output.hpp,v 1.10 2005/08/25 16:27:22 johnmaddock Exp $
+ *
+ * Revision history
+ * 2001-02-18 moved to individual header files
+ */
+
+#ifndef BOOST_RANDOM_SHUFFLE_OUTPUT_HPP
+#define BOOST_RANDOM_SHUFFLE_OUTPUT_HPP
+
+#include <iostream>
+#include <algorithm> // std::copy
+#include <cassert>
+#include <boost/config.hpp>
+#include <boost/limits.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/cstdint.hpp>
+#include <boost/random/linear_congruential.hpp>
+
+namespace boost {
+namespace random {
+
+// Carter Bays and S.D. Durham 1979
+template<class UniformRandomNumberGenerator, int k,
+#ifndef BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS
+ typename UniformRandomNumberGenerator::result_type
+#else
+ uint32_t
+#endif
+ val = 0>
+class shuffle_output
+{
+public:
+ typedef UniformRandomNumberGenerator base_type;
+ typedef typename base_type::result_type result_type;
+
+ BOOST_STATIC_CONSTANT(bool, has_fixed_range = false);
+ BOOST_STATIC_CONSTANT(int, buffer_size = k);
+
+ shuffle_output() : _rng() { init(); }
+#if defined(BOOST_MSVC) && _MSC_VER < 1300
+ // MSVC does not implicitly generate the copy constructor here
+ shuffle_output(const shuffle_output & x)
+ : _rng(x._rng), y(x.y) { std::copy(x.v, x.v+k, v); }
+#endif
+ template<class T>
+ explicit shuffle_output(T seed) : _rng(seed) { init(); }
+ explicit shuffle_output(const base_type & rng) : _rng(rng) { init(); }
+ template<class It> shuffle_output(It& first, It last)
+ : _rng(first, last) { init(); }
+ void seed() { _rng.seed(); init(); }
+ template<class T>
+ void seed(T s) { _rng.seed(s); init(); }
+ template<class It> void seed(It& first, It last)
+ {
+ _rng.seed(first, last);
+ init();
+ }
+
+ const base_type& base() const { return _rng; }
+
+ result_type operator()() {
+ // calculating the range every time may seem wasteful. However, this
+ // makes the information locally available for the optimizer.
+ result_type range = (max)()-(min)()+1;
+ int j = k*(y-(min)())/range;
+ // assert(0 <= j && j < k);
+ y = v[j];
+ v[j] = _rng();
+ return y;
+ }
+
+ result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return (_rng.min)(); }
+ result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return (_rng.max)(); }
+ static bool validation(result_type x) { return val == x; }
+
+#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE
+
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+ template<class CharT, class Traits>
+ friend std::basic_ostream<CharT,Traits>&
+ operator<<(std::basic_ostream<CharT,Traits>& os, const shuffle_output& s)
+ {
+ os << s._rng << " " << s.y << " ";
+ for(int i = 0; i < s.buffer_size; ++i)
+ os << s.v[i] << " ";
+ return os;
+ }
+
+ template<class CharT, class Traits>
+ friend std::basic_istream<CharT,Traits>&
+ operator>>(std::basic_istream<CharT,Traits>& is, shuffle_output& s)
+ {
+ is >> s._rng >> std::ws >> s.y >> std::ws;
+ for(int i = 0; i < s.buffer_size; ++i)
+ is >> s.v[i] >> std::ws;
+ return is;
+ }
+#endif
+
+ friend bool operator==(const shuffle_output& x, const shuffle_output& y)
+ { return x._rng == y._rng && x.y == y.y && std::equal(x.v, x.v+k, y.v); }
+ friend bool operator!=(const shuffle_output& x, const shuffle_output& y)
+ { return !(x == y); }
+#else
+ // Use a member function; Streamable concept not supported.
+ bool operator==(const shuffle_output& rhs) const
+ { return _rng == rhs._rng && y == rhs.y && std::equal(v, v+k, rhs.v); }
+ bool operator!=(const shuffle_output& rhs) const
+ { return !(*this == rhs); }
+#endif
+private:
+ void init()
+ {
+#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+ BOOST_STATIC_ASSERT(std::numeric_limits<result_type>::is_integer);
+#endif
+ result_type range = (max)()-(min)();
+ assert(range > 0); // otherwise there would be little choice
+ if(static_cast<unsigned long>(k * range) <
+ static_cast<unsigned long>(range)) // not a sufficient condition
+ // likely overflow with bucket number computation
+ assert(!"overflow will occur");
+
+ // we cannot use std::generate, because it uses pass-by-value for _rng
+ for(result_type * p = v; p != v+k; ++p)
+ *p = _rng();
+ y = _rng();
+ }
+
+ base_type _rng;
+ result_type v[k];
+ result_type y;
+};
+
+#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION
+// A definition is required even for integral static constants
+template<class UniformRandomNumberGenerator, int k,
+#ifndef BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS
+ typename UniformRandomNumberGenerator::result_type
+#else
+ uint32_t
+#endif
+ val>
+const bool shuffle_output<UniformRandomNumberGenerator, k, val>::has_fixed_range;
+
+template<class UniformRandomNumberGenerator, int k,
+#ifndef BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS
+ typename UniformRandomNumberGenerator::result_type
+#else
+ uint32_t
+#endif
+ val>
+const int shuffle_output<UniformRandomNumberGenerator, k, val>::buffer_size;
+#endif
+
+} // namespace random
+
+// validation by experiment from Harry Erwin's generator.h (private e-mail)
+typedef random::shuffle_output<
+ random::linear_congruential<uint32_t, 1366, 150889, 714025, 0>,
+ 97, 139726> kreutzer1986;
+
+
+} // namespace boost
+
+#endif // BOOST_RANDOM_SHUFFLE_OUTPUT_HPP
diff --git a/boost/boost/random/subtract_with_carry.hpp b/boost/boost/random/subtract_with_carry.hpp
new file mode 100644
index 00000000000..0887372ebfb
--- /dev/null
+++ b/boost/boost/random/subtract_with_carry.hpp
@@ -0,0 +1,445 @@
+/* boost random/subtract_with_carry.hpp header file
+ *
+ * Copyright Jens Maurer 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 for most recent version including documentation.
+ *
+ * $Id: subtract_with_carry.hpp,v 1.24 2005/05/21 15:57:00 dgregor Exp $
+ *
+ * Revision history
+ * 2002-03-02 created
+ */
+
+#ifndef BOOST_RANDOM_SUBTRACT_WITH_CARRY_HPP
+#define BOOST_RANDOM_SUBTRACT_WITH_CARRY_HPP
+
+#include <cmath>
+#include <iostream>
+#include <algorithm> // std::equal
+#include <stdexcept>
+#include <cmath> // std::pow
+#include <boost/config.hpp>
+#include <boost/limits.hpp>
+#include <boost/cstdint.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/random/linear_congruential.hpp>
+
+
+namespace boost {
+namespace random {
+
+#if BOOST_WORKAROUND(_MSC_FULL_VER, BOOST_TESTED_AT(13102292)) && BOOST_MSVC > 1300
+# define BOOST_RANDOM_EXTRACT_SWC_01
+#endif
+
+#if defined(__APPLE_CC__) && defined(__GNUC__) && (__GNUC__ == 3) && (__GNUC_MINOR__ <= 3)
+# define BOOST_RANDOM_EXTRACT_SWC_01
+#endif
+
+# ifdef BOOST_RANDOM_EXTRACT_SWC_01
+namespace detail
+{
+ template <class IStream, class SubtractWithCarry, class RealType>
+ void extract_subtract_with_carry_01(
+ IStream& is
+ , SubtractWithCarry& f
+ , RealType& carry
+ , RealType* x
+ , RealType modulus)
+ {
+ RealType value;
+ for(unsigned int j = 0; j < f.long_lag; ++j) {
+ is >> value >> std::ws;
+ x[j] = value / modulus;
+ }
+ is >> value >> std::ws;
+ carry = value / modulus;
+ }
+}
+# endif
+// subtract-with-carry generator
+// Marsaglia and Zaman
+
+template<class IntType, IntType m, unsigned int s, unsigned int r,
+ IntType val>
+class subtract_with_carry
+{
+public:
+ typedef IntType result_type;
+ BOOST_STATIC_CONSTANT(bool, has_fixed_range = true);
+ BOOST_STATIC_CONSTANT(result_type, min_value = 0);
+ BOOST_STATIC_CONSTANT(result_type, max_value = m-1);
+ BOOST_STATIC_CONSTANT(result_type, modulus = m);
+ BOOST_STATIC_CONSTANT(unsigned int, long_lag = r);
+ BOOST_STATIC_CONSTANT(unsigned int, short_lag = s);
+
+ subtract_with_carry() {
+ // MSVC fails BOOST_STATIC_ASSERT with std::numeric_limits at class scope
+#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+ BOOST_STATIC_ASSERT(std::numeric_limits<result_type>::is_signed);
+ BOOST_STATIC_ASSERT(std::numeric_limits<result_type>::is_integer);
+#endif
+ seed();
+ }
+ explicit subtract_with_carry(uint32_t value) { seed(value); }
+ template<class Generator>
+ explicit subtract_with_carry(Generator & gen) { seed(gen); }
+ template<class It> subtract_with_carry(It& first, It last) { seed(first,last); }
+
+ // compiler-generated copy ctor and assignment operator are fine
+
+ void seed(uint32_t value = 19780503u)
+ {
+ random::linear_congruential<int32_t, 40014, 0, 2147483563, 0> intgen(value);
+ seed(intgen);
+ }
+
+ // For GCC, moving this function out-of-line prevents inlining, which may
+ // reduce overall object code size. However, MSVC does not grok
+ // out-of-line template member functions.
+ template<class Generator>
+ void seed(Generator & gen)
+ {
+ // I could have used std::generate_n, but it takes "gen" by value
+ for(unsigned int j = 0; j < long_lag; ++j)
+ x[j] = gen() % modulus;
+ carry = (x[long_lag-1] == 0);
+ k = 0;
+ }
+
+ template<class It>
+ void seed(It& first, It last)
+ {
+ unsigned int j;
+ for(j = 0; j < long_lag && first != last; ++j, ++first)
+ x[j] = *first % modulus;
+ if(first == last && j < long_lag)
+ throw std::invalid_argument("subtract_with_carry::seed");
+ carry = (x[long_lag-1] == 0);
+ k = 0;
+ }
+
+ result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return min_value; }
+ result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return max_value; }
+
+ result_type operator()()
+ {
+ int short_index = k - short_lag;
+ if(short_index < 0)
+ short_index += long_lag;
+ IntType delta;
+ if (x[short_index] >= x[k] + carry) {
+ // x(n) >= 0
+ delta = x[short_index] - (x[k] + carry);
+ carry = 0;
+ } else {
+ // x(n) < 0
+ delta = modulus - x[k] - carry + x[short_index];
+ carry = 1;
+ }
+ x[k] = delta;
+ ++k;
+ if(k >= long_lag)
+ k = 0;
+ return delta;
+ }
+
+public:
+ static bool validation(result_type x) { return x == val; }
+
+#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE
+
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+ template<class CharT, class Traits>
+ friend std::basic_ostream<CharT,Traits>&
+ operator<<(std::basic_ostream<CharT,Traits>& os,
+ const subtract_with_carry& f)
+ {
+ for(unsigned int j = 0; j < f.long_lag; ++j)
+ os << f.compute(j) << " ";
+ os << f.carry << " ";
+ return os;
+ }
+
+ template<class CharT, class Traits>
+ friend std::basic_istream<CharT,Traits>&
+ operator>>(std::basic_istream<CharT,Traits>& is, subtract_with_carry& f)
+ {
+ for(unsigned int j = 0; j < f.long_lag; ++j)
+ is >> f.x[j] >> std::ws;
+ is >> f.carry >> std::ws;
+ f.k = 0;
+ return is;
+ }
+#endif
+
+ friend bool operator==(const subtract_with_carry& x, const subtract_with_carry& y)
+ {
+ for(unsigned int j = 0; j < r; ++j)
+ if(x.compute(j) != y.compute(j))
+ return false;
+ return true;
+ }
+
+ friend bool operator!=(const subtract_with_carry& x, const subtract_with_carry& y)
+ { return !(x == y); }
+#else
+ // Use a member function; Streamable concept not supported.
+ bool operator==(const subtract_with_carry& rhs) const
+ {
+ for(unsigned int j = 0; j < r; ++j)
+ if(compute(j) != rhs.compute(j))
+ return false;
+ return true;
+ }
+
+ bool operator!=(const subtract_with_carry& rhs) const
+ { return !(*this == rhs); }
+#endif
+
+private:
+ // returns x(i-r+index), where index is in 0..r-1
+ IntType compute(unsigned int index) const
+ {
+ return x[(k+index) % long_lag];
+ }
+
+ // state representation; next output (state) is x(i)
+ // x[0] ... x[k] x[k+1] ... x[long_lag-1] represents
+ // x(i-k) ... x(i) x(i+1) ... x(i-k+long_lag-1)
+ // speed: base: 20-25 nsec
+ // ranlux_4: 230 nsec, ranlux_7: 430 nsec, ranlux_14: 810 nsec
+ // This state representation makes operator== and save/restore more
+ // difficult, because we've already computed "too much" and thus
+ // have to undo some steps to get at x(i-r) etc.
+
+ // state representation: next output (state) is x(i)
+ // x[0] ... x[k] x[k+1] ... x[long_lag-1] represents
+ // x(i-k) ... x(i) x(i-long_lag+1) ... x(i-k-1)
+ // speed: base 28 nsec
+ // ranlux_4: 370 nsec, ranlux_7: 688 nsec, ranlux_14: 1343 nsec
+ IntType x[long_lag];
+ unsigned int k;
+ int carry;
+};
+
+#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION
+// A definition is required even for integral static constants
+template<class IntType, IntType m, unsigned int s, unsigned int r, IntType val>
+const bool subtract_with_carry<IntType, m, s, r, val>::has_fixed_range;
+template<class IntType, IntType m, unsigned int s, unsigned int r, IntType val>
+const IntType subtract_with_carry<IntType, m, s, r, val>::min_value;
+template<class IntType, IntType m, unsigned int s, unsigned int r, IntType val>
+const IntType subtract_with_carry<IntType, m, s, r, val>::max_value;
+template<class IntType, IntType m, unsigned int s, unsigned int r, IntType val>
+const IntType subtract_with_carry<IntType, m, s, r, val>::modulus;
+template<class IntType, IntType m, unsigned int s, unsigned int r, IntType val>
+const unsigned int subtract_with_carry<IntType, m, s, r, val>::long_lag;
+template<class IntType, IntType m, unsigned int s, unsigned int r, IntType val>
+const unsigned int subtract_with_carry<IntType, m, s, r, val>::short_lag;
+#endif
+
+
+// use a floating-point representation to produce values in [0..1)
+template<class RealType, int w, unsigned int s, unsigned int r, int val=0>
+class subtract_with_carry_01
+{
+public:
+ typedef RealType result_type;
+ BOOST_STATIC_CONSTANT(bool, has_fixed_range = false);
+ BOOST_STATIC_CONSTANT(int, word_size = w);
+ BOOST_STATIC_CONSTANT(unsigned int, long_lag = r);
+ BOOST_STATIC_CONSTANT(unsigned int, short_lag = s);
+
+#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+ BOOST_STATIC_ASSERT(!std::numeric_limits<result_type>::is_integer);
+#endif
+
+ subtract_with_carry_01() { init_modulus(); seed(); }
+ explicit subtract_with_carry_01(uint32_t value)
+ { init_modulus(); seed(value); }
+ template<class It> subtract_with_carry_01(It& first, It last)
+ { init_modulus(); seed(first,last); }
+
+private:
+ void init_modulus()
+ {
+#ifndef BOOST_NO_STDC_NAMESPACE
+ // allow for Koenig lookup
+ using std::pow;
+#endif
+ _modulus = pow(RealType(2), word_size);
+ }
+
+public:
+ // compiler-generated copy ctor and assignment operator are fine
+
+ void seed(uint32_t value = 19780503u)
+ {
+#ifndef BOOST_NO_STDC_NAMESPACE
+ // allow for Koenig lookup
+ using std::fmod;
+#endif
+ random::linear_congruential<int32_t, 40014, 0, 2147483563, 0> gen(value);
+ unsigned long array[(w+31)/32 * long_lag];
+ for(unsigned int j = 0; j < sizeof(array)/sizeof(unsigned long); ++j)
+ array[j] = gen();
+ unsigned long * start = array;
+ seed(start, array + sizeof(array)/sizeof(unsigned long));
+ }
+
+ template<class It>
+ void seed(It& first, It last)
+ {
+#ifndef BOOST_NO_STDC_NAMESPACE
+ // allow for Koenig lookup
+ using std::fmod;
+ using std::pow;
+#endif
+ unsigned long mask = ~((~0u) << (w%32)); // now lowest (w%32) bits set
+ RealType two32 = pow(RealType(2), 32);
+ unsigned int j;
+ for(j = 0; j < long_lag && first != last; ++j) {
+ x[j] = RealType(0);
+ for(int i = 0; i < w/32 && first != last; ++i, ++first)
+ x[j] += *first / pow(two32,i+1);
+ if(first != last && mask != 0) {
+ x[j] += fmod((*first & mask) / _modulus, RealType(1));
+ ++first;
+ }
+ }
+ if(first == last && j < long_lag)
+ throw std::invalid_argument("subtract_with_carry_01::seed");
+ carry = (x[long_lag-1] ? 0 : 1 / _modulus);
+ k = 0;
+ }
+
+ result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return result_type(0); }
+ result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return result_type(1); }
+
+ result_type operator()()
+ {
+ int short_index = k - short_lag;
+ if(short_index < 0)
+ short_index += long_lag;
+ RealType delta = x[short_index] - x[k] - carry;
+ if(delta < 0) {
+ delta += RealType(1);
+ carry = RealType(1)/_modulus;
+ } else {
+ carry = 0;
+ }
+ x[k] = delta;
+ ++k;
+ if(k >= long_lag)
+ k = 0;
+ return delta;
+ }
+
+ static bool validation(result_type x)
+ { return x == val/pow(RealType(2), word_size); }
+
+#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE
+
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+ template<class CharT, class Traits>
+ friend std::basic_ostream<CharT,Traits>&
+ operator<<(std::basic_ostream<CharT,Traits>& os,
+ const subtract_with_carry_01& f)
+ {
+#ifndef BOOST_NO_STDC_NAMESPACE
+ // allow for Koenig lookup
+ using std::pow;
+#endif
+ std::ios_base::fmtflags oldflags = os.flags(os.dec | os.fixed | os.left);
+ for(unsigned int j = 0; j < f.long_lag; ++j)
+ os << (f.compute(j) * f._modulus) << " ";
+ os << (f.carry * f._modulus);
+ os.flags(oldflags);
+ return os;
+ }
+
+ template<class CharT, class Traits>
+ friend std::basic_istream<CharT,Traits>&
+ operator>>(std::basic_istream<CharT,Traits>& is, subtract_with_carry_01& f)
+ {
+# ifdef BOOST_RANDOM_EXTRACT_SWC_01
+ detail::extract_subtract_with_carry_01(is, f, f.carry, f.x, f._modulus);
+# else
+ // MSVC (up to 7.1) and Borland (up to 5.64) don't handle the template type
+ // parameter "RealType" available from the class template scope, so use
+ // the member typedef
+ typename subtract_with_carry_01::result_type value;
+ for(unsigned int j = 0; j < long_lag; ++j) {
+ is >> value >> std::ws;
+ f.x[j] = value / f._modulus;
+ }
+ is >> value >> std::ws;
+ f.carry = value / f._modulus;
+# endif
+ f.k = 0;
+ return is;
+ }
+#endif
+
+ friend bool operator==(const subtract_with_carry_01& x,
+ const subtract_with_carry_01& y)
+ {
+ for(unsigned int j = 0; j < r; ++j)
+ if(x.compute(j) != y.compute(j))
+ return false;
+ return true;
+ }
+
+ friend bool operator!=(const subtract_with_carry_01& x,
+ const subtract_with_carry_01& y)
+ { return !(x == y); }
+#else
+ // Use a member function; Streamable concept not supported.
+ bool operator==(const subtract_with_carry_01& rhs) const
+ {
+ for(unsigned int j = 0; j < r; ++j)
+ if(compute(j) != rhs.compute(j))
+ return false;
+ return true;
+ }
+
+ bool operator!=(const subtract_with_carry_01& rhs) const
+ { return !(*this == rhs); }
+#endif
+
+private:
+ RealType compute(unsigned int index) const;
+ unsigned int k;
+ RealType carry;
+ RealType x[long_lag];
+ RealType _modulus;
+};
+
+#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION
+// A definition is required even for integral static constants
+template<class RealType, int w, unsigned int s, unsigned int r, int val>
+const bool subtract_with_carry_01<RealType, w, s, r, val>::has_fixed_range;
+template<class RealType, int w, unsigned int s, unsigned int r, int val>
+const int subtract_with_carry_01<RealType, w, s, r, val>::word_size;
+template<class RealType, int w, unsigned int s, unsigned int r, int val>
+const unsigned int subtract_with_carry_01<RealType, w, s, r, val>::long_lag;
+template<class RealType, int w, unsigned int s, unsigned int r, int val>
+const unsigned int subtract_with_carry_01<RealType, w, s, r, val>::short_lag;
+#endif
+
+template<class RealType, int w, unsigned int s, unsigned int r, int val>
+RealType subtract_with_carry_01<RealType, w, s, r, val>::compute(unsigned int index) const
+{
+ return x[(k+index) % long_lag];
+}
+
+
+} // namespace random
+} // namespace boost
+
+#endif // BOOST_RANDOM_SUBTRACT_WITH_CARRY_HPP
diff --git a/boost/boost/random/triangle_distribution.hpp b/boost/boost/random/triangle_distribution.hpp
new file mode 100644
index 00000000000..fd4dc58fd7d
--- /dev/null
+++ b/boost/boost/random/triangle_distribution.hpp
@@ -0,0 +1,101 @@
+/* boost random/triangle_distribution.hpp header file
+ *
+ * Copyright Jens Maurer 2000-2001
+ * 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.
+ *
+ * $Id: triangle_distribution.hpp,v 1.11 2004/07/27 03:43:32 dgregor Exp $
+ *
+ * Revision history
+ * 2001-02-18 moved to individual header files
+ */
+
+#ifndef BOOST_RANDOM_TRIANGLE_DISTRIBUTION_HPP
+#define BOOST_RANDOM_TRIANGLE_DISTRIBUTION_HPP
+
+#include <cmath>
+#include <cassert>
+#include <boost/random/uniform_01.hpp>
+
+namespace boost {
+
+// triangle distribution, with a smallest, b most probable, and c largest
+// value.
+template<class RealType = double>
+class triangle_distribution
+{
+public:
+ typedef RealType input_type;
+ typedef RealType result_type;
+
+ explicit triangle_distribution(result_type a = result_type(0),
+ result_type b = result_type(0.5),
+ result_type c = result_type(1))
+ : _a(a), _b(b), _c(c)
+ {
+ assert(_a <= _b && _b <= _c);
+ init();
+ }
+
+ // compiler-generated copy ctor and assignment operator are fine
+ result_type a() const { return _a; }
+ result_type b() const { return _b; }
+ result_type c() const { return _c; }
+
+ void reset() { }
+
+ template<class Engine>
+ result_type operator()(Engine& eng)
+ {
+#ifndef BOOST_NO_STDC_NAMESPACE
+ using std::sqrt;
+#endif
+ result_type u = eng();
+ if( u <= q1 )
+ return _a + p1*sqrt(u);
+ else
+ return _c - d3*sqrt(d2*u-d1);
+ }
+
+#if !defined(BOOST_NO_OPERATORS_IN_NAMESPACE) && !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS)
+ template<class CharT, class Traits>
+ friend std::basic_ostream<CharT,Traits>&
+ operator<<(std::basic_ostream<CharT,Traits>& os, const triangle_distribution& td)
+ {
+ os << td._a << " " << td._b << " " << td._c;
+ return os;
+ }
+
+ template<class CharT, class Traits>
+ friend std::basic_istream<CharT,Traits>&
+ operator>>(std::basic_istream<CharT,Traits>& is, triangle_distribution& td)
+ {
+ is >> std::ws >> td._a >> std::ws >> td._b >> std::ws >> td._c;
+ td.init();
+ return is;
+ }
+#endif
+
+private:
+ void init()
+ {
+#ifndef BOOST_NO_STDC_NAMESPACE
+ using std::sqrt;
+#endif
+ d1 = _b - _a;
+ d2 = _c - _a;
+ d3 = sqrt(_c - _b);
+ q1 = d1 / d2;
+ p1 = sqrt(d1 * d2);
+ }
+
+ result_type _a, _b, _c;
+ result_type d1, d2, d3, q1, p1;
+};
+
+} // namespace boost
+
+#endif // BOOST_RANDOM_TRIANGLE_DISTRIBUTION_HPP
diff --git a/boost/boost/random/uniform_01.hpp b/boost/boost/random/uniform_01.hpp
new file mode 100644
index 00000000000..6948d1d795d
--- /dev/null
+++ b/boost/boost/random/uniform_01.hpp
@@ -0,0 +1,93 @@
+/* boost random/uniform_01.hpp header file
+ *
+ * Copyright Jens Maurer 2000-2001
+ * 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.
+ *
+ * $Id: uniform_01.hpp,v 1.18 2004/07/27 03:43:32 dgregor Exp $
+ *
+ * Revision history
+ * 2001-02-18 moved to individual header files
+ */
+
+#ifndef BOOST_RANDOM_UNIFORM_01_HPP
+#define BOOST_RANDOM_UNIFORM_01_HPP
+
+#include <iostream>
+#include <boost/config.hpp>
+#include <boost/limits.hpp>
+#include <boost/static_assert.hpp>
+
+namespace boost {
+
+// Because it is so commonly used: uniform distribution on the real [0..1)
+// range. This allows for specializations to avoid a costly int -> float
+// conversion plus float multiplication
+template<class UniformRandomNumberGenerator, class RealType = double>
+class uniform_01
+{
+public:
+ typedef UniformRandomNumberGenerator base_type;
+ typedef RealType result_type;
+
+ BOOST_STATIC_CONSTANT(bool, has_fixed_range = false);
+
+#if !defined(BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS) && !(defined(BOOST_MSVC) && BOOST_MSVC <= 1300)
+ BOOST_STATIC_ASSERT(!std::numeric_limits<RealType>::is_integer);
+#endif
+
+ explicit uniform_01(base_type rng)
+ : _rng(rng),
+ _factor(result_type(1) /
+ (result_type((_rng.max)()-(_rng.min)()) +
+ result_type(std::numeric_limits<base_result>::is_integer ? 1 : 0)))
+ {
+ }
+ // compiler-generated copy ctor and copy assignment are fine
+
+ result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return result_type(0); }
+ result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return result_type(1); }
+ base_type& base() { return _rng; }
+ const base_type& base() const { return _rng; }
+ void reset() { }
+
+ result_type operator()() {
+ return result_type(_rng() - (_rng.min)()) * _factor;
+ }
+
+#if !defined(BOOST_NO_OPERATORS_IN_NAMESPACE) && !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS)
+ template<class CharT, class Traits>
+ friend std::basic_ostream<CharT,Traits>&
+ operator<<(std::basic_ostream<CharT,Traits>& os, const uniform_01& u)
+ {
+ os << u._rng;
+ return os;
+ }
+
+ template<class CharT, class Traits>
+ friend std::basic_istream<CharT,Traits>&
+ operator>>(std::basic_istream<CharT,Traits>& is, uniform_01& u)
+ {
+ is >> u._rng;
+ return is;
+ }
+#endif
+
+private:
+ typedef typename base_type::result_type base_result;
+ base_type _rng;
+ result_type _factor;
+};
+
+#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION
+// A definition is required even for integral static constants
+template<class UniformRandomNumberGenerator, class RealType>
+const bool uniform_01<UniformRandomNumberGenerator, RealType>::has_fixed_range;
+#endif
+
+} // namespace boost
+
+#endif // BOOST_RANDOM_UNIFORM_01_HPP
diff --git a/boost/boost/random/uniform_int.hpp b/boost/boost/random/uniform_int.hpp
new file mode 100644
index 00000000000..660d8d6f7b4
--- /dev/null
+++ b/boost/boost/random/uniform_int.hpp
@@ -0,0 +1,152 @@
+/* boost random/uniform_int.hpp header file
+ *
+ * Copyright Jens Maurer 2000-2001
+ * 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.
+ *
+ * $Id: uniform_int.hpp,v 1.27 2004/07/27 03:43:32 dgregor Exp $
+ *
+ * Revision history
+ * 2001-04-08 added min<max assertion (N. Becker)
+ * 2001-02-18 moved to individual header files
+ */
+
+#ifndef BOOST_RANDOM_UNIFORM_INT_HPP
+#define BOOST_RANDOM_UNIFORM_INT_HPP
+
+#include <cassert>
+#include <iostream>
+#include <boost/config.hpp>
+#include <boost/limits.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/random/uniform_smallint.hpp>
+#include <boost/random/detail/signed_unsigned_compare.hpp>
+#ifdef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+#include <boost/type_traits/is_float.hpp>
+#endif
+
+namespace boost {
+
+// uniform integer distribution on [min, max]
+template<class IntType = int>
+class uniform_int
+{
+public:
+ typedef IntType input_type;
+ typedef IntType result_type;
+
+ explicit uniform_int(IntType min = 0, IntType max = 9)
+ : _min(min), _max(max)
+ {
+#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+ // MSVC fails BOOST_STATIC_ASSERT with std::numeric_limits at class scope
+ BOOST_STATIC_ASSERT(std::numeric_limits<IntType>::is_integer);
+#endif
+ assert(min <= max);
+ init();
+ }
+
+ result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return _min; }
+ result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return _max; }
+ void reset() { }
+
+ // can't have member function templates out-of-line due to MSVC bugs
+ template<class Engine>
+ result_type operator()(Engine& eng)
+ {
+ typedef typename Engine::result_type base_result;
+ base_result bmin = (eng.min)();
+ base_result brange = (eng.max)() - (eng.min)();
+
+ if(_range == 0) {
+ return _min;
+ } else if(random::equal_signed_unsigned(brange, _range)) {
+ // this will probably never happen in real life
+ // basically nothing to do; just take care we don't overflow / underflow
+ return static_cast<result_type>(eng() - bmin) + _min;
+ } else if(random::lessthan_signed_unsigned(brange, _range)) {
+ // use rejection method to handle things like 0..3 --> 0..4
+ for(;;) {
+ // concatenate several invocations of the base RNG
+ // take extra care to avoid overflows
+ result_type limit;
+ if(_range == (std::numeric_limits<result_type>::max)()) {
+ limit = _range/(result_type(brange)+1);
+ if(_range % result_type(brange)+1 == result_type(brange))
+ ++limit;
+ } else {
+ limit = (_range+1)/(result_type(brange)+1);
+ }
+ // We consider "result" as expressed to base (brange+1):
+ // For every power of (brange+1), we determine a random factor
+ result_type result = result_type(0);
+ result_type mult = result_type(1);
+ while(mult <= limit) {
+ result += (eng() - bmin) * mult;
+ mult *= result_type(brange)+result_type(1);
+ }
+ if(mult == limit)
+ // _range+1 is an integer power of brange+1: no rejections required
+ return result;
+ // _range/mult < brange+1 -> no endless loop
+ result += uniform_int<result_type>(0, _range/mult)(eng) * mult;
+ if(result <= _range)
+ return result + _min;
+ }
+ } else { // brange > range
+ if(brange / _range > 4 /* quantization_cutoff */ ) {
+ // the new range is vastly smaller than the source range,
+ // so quantization effects are not relevant
+ return boost::uniform_smallint<result_type>(_min, _max)(eng);
+ } else {
+ // use rejection method to handle cases like 0..5 -> 0..4
+ for(;;) {
+ base_result result = eng() - bmin;
+ // result and range are non-negative, and result is possibly larger
+ // than range, so the cast is safe
+ if(result <= static_cast<base_result>(_range))
+ return result + _min;
+ }
+ }
+ }
+ }
+
+#if !defined(BOOST_NO_OPERATORS_IN_NAMESPACE) && !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS)
+ template<class CharT, class Traits>
+ friend std::basic_ostream<CharT,Traits>&
+ operator<<(std::basic_ostream<CharT,Traits>& os, const uniform_int& ud)
+ {
+ os << ud._min << " " << ud._max;
+ return os;
+ }
+
+ template<class CharT, class Traits>
+ friend std::basic_istream<CharT,Traits>&
+ operator>>(std::basic_istream<CharT,Traits>& is, uniform_int& ud)
+ {
+# if BOOST_WORKAROUND(_MSC_FULL_VER, BOOST_TESTED_AT(13102292)) && BOOST_MSVC > 1300
+ return detail::extract_uniform_int(is, ud, ud.impl);
+# else
+ is >> std::ws >> ud._min >> std::ws >> ud._max;
+ ud.init();
+ return is;
+# endif
+ }
+#endif
+
+private:
+ void init()
+ {
+ _range = _max - _min;
+ }
+
+ result_type _min, _max, _range;
+};
+
+} // namespace boost
+
+#endif // BOOST_RANDOM_UNIFORM_INT_HPP
diff --git a/boost/boost/random/uniform_on_sphere.hpp b/boost/boost/random/uniform_on_sphere.hpp
new file mode 100644
index 00000000000..e201c57f520
--- /dev/null
+++ b/boost/boost/random/uniform_on_sphere.hpp
@@ -0,0 +1,86 @@
+/* boost random/uniform_on_sphere.hpp header file
+ *
+ * Copyright Jens Maurer 2000-2001
+ * 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.
+ *
+ * $Id: uniform_on_sphere.hpp,v 1.11 2004/07/27 03:43:32 dgregor Exp $
+ *
+ * Revision history
+ * 2001-02-18 moved to individual header files
+ */
+
+#ifndef BOOST_RANDOM_UNIFORM_ON_SPHERE_HPP
+#define BOOST_RANDOM_UNIFORM_ON_SPHERE_HPP
+
+#include <vector>
+#include <algorithm> // std::transform
+#include <functional> // std::bind2nd, std::divides
+#include <boost/random/normal_distribution.hpp>
+
+namespace boost {
+
+template<class RealType = double, class Cont = std::vector<RealType> >
+class uniform_on_sphere
+{
+public:
+ typedef RealType input_type;
+ typedef Cont result_type;
+
+ explicit uniform_on_sphere(int dim = 2) : _container(dim), _dim(dim) { }
+
+ // compiler-generated copy ctor and assignment operator are fine
+
+ void reset() { _normal.reset(); }
+
+ template<class Engine>
+ const result_type & operator()(Engine& eng)
+ {
+ RealType sqsum = 0;
+ for(typename Cont::iterator it = _container.begin();
+ it != _container.end();
+ ++it) {
+ RealType val = _normal(eng);
+ *it = val;
+ sqsum += val * val;
+ }
+#ifndef BOOST_NO_STDC_NAMESPACE
+ using std::sqrt;
+#endif
+ // for all i: result[i] /= sqrt(sqsum)
+ std::transform(_container.begin(), _container.end(), _container.begin(),
+ std::bind2nd(std::divides<RealType>(), sqrt(sqsum)));
+ return _container;
+ }
+
+#if !defined(BOOST_NO_OPERATORS_IN_NAMESPACE) && !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS)
+ template<class CharT, class Traits>
+ friend std::basic_ostream<CharT,Traits>&
+ operator<<(std::basic_ostream<CharT,Traits>& os, const uniform_on_sphere& sd)
+ {
+ os << sd._dim;
+ return os;
+ }
+
+ template<class CharT, class Traits>
+ friend std::basic_istream<CharT,Traits>&
+ operator>>(std::basic_istream<CharT,Traits>& is, uniform_on_sphere& sd)
+ {
+ is >> std::ws >> sd._dim;
+ sd._container.resize(sd._dim);
+ return is;
+ }
+#endif
+
+private:
+ normal_distribution<RealType> _normal;
+ result_type _container;
+ int _dim;
+};
+
+} // namespace boost
+
+#endif // BOOST_RANDOM_UNIFORM_ON_SPHERE_HPP
diff --git a/boost/boost/random/uniform_real.hpp b/boost/boost/random/uniform_real.hpp
new file mode 100644
index 00000000000..ea4c63a4dc8
--- /dev/null
+++ b/boost/boost/random/uniform_real.hpp
@@ -0,0 +1,83 @@
+/* boost random/uniform_real.hpp header file
+ *
+ * Copyright Jens Maurer 2000-2001
+ * 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.
+ *
+ * $Id: uniform_real.hpp,v 1.17 2005/01/28 15:04:17 dgregor Exp $
+ *
+ * Revision history
+ * 2001-04-08 added min<max assertion (N. Becker)
+ * 2001-02-18 moved to individual header files
+ */
+
+#ifndef BOOST_RANDOM_UNIFORM_REAL_HPP
+#define BOOST_RANDOM_UNIFORM_REAL_HPP
+
+#include <cassert>
+#include <iostream>
+#include <boost/config.hpp>
+#include <boost/limits.hpp>
+#include <boost/static_assert.hpp>
+
+namespace boost {
+
+// uniform distribution on a real range
+template<class RealType = double>
+class uniform_real
+{
+public:
+ typedef RealType input_type;
+ typedef RealType result_type;
+
+ explicit uniform_real(RealType min = RealType(0),
+ RealType max = RealType(1))
+ : _min(min), _max(max)
+ {
+#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+ BOOST_STATIC_ASSERT(!std::numeric_limits<RealType>::is_integer);
+#endif
+ assert(min < max);
+ }
+
+ // compiler-generated copy ctor and assignment operator are fine
+
+ result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return _min; }
+ result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return _max; }
+ void reset() { }
+
+ template<class Engine>
+ result_type operator()(Engine& eng) {
+ return static_cast<result_type>(eng() - eng.min BOOST_PREVENT_MACRO_SUBSTITUTION())
+ / static_cast<result_type>(eng.max BOOST_PREVENT_MACRO_SUBSTITUTION() - eng.min BOOST_PREVENT_MACRO_SUBSTITUTION())
+ * (_max - _min) + _min;
+ }
+
+#if !defined(BOOST_NO_OPERATORS_IN_NAMESPACE) && !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS)
+ template<class CharT, class Traits>
+ friend std::basic_ostream<CharT,Traits>&
+ operator<<(std::basic_ostream<CharT,Traits>& os, const uniform_real& ud)
+ {
+ os << ud._min << " " << ud._max;
+ return os;
+ }
+
+ template<class CharT, class Traits>
+ friend std::basic_istream<CharT,Traits>&
+ operator>>(std::basic_istream<CharT,Traits>& is, uniform_real& ud)
+ {
+ is >> std::ws >> ud._min >> std::ws >> ud._max;
+ return is;
+ }
+#endif
+
+private:
+ RealType _min, _max;
+};
+
+} // namespace boost
+
+#endif // BOOST_RANDOM_UNIFORM_REAL_HPP
diff --git a/boost/boost/random/uniform_smallint.hpp b/boost/boost/random/uniform_smallint.hpp
new file mode 100644
index 00000000000..0ea5712074b
--- /dev/null
+++ b/boost/boost/random/uniform_smallint.hpp
@@ -0,0 +1,236 @@
+/* boost random/uniform_smallint.hpp header file
+ *
+ * Copyright Jens Maurer 2000-2001
+ * 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.
+ *
+ * $Id: uniform_smallint.hpp,v 1.29 2004/07/27 03:43:32 dgregor Exp $
+ *
+ * Revision history
+ * 2001-04-08 added min<max assertion (N. Becker)
+ * 2001-02-18 moved to individual header files
+ */
+
+#ifndef BOOST_RANDOM_UNIFORM_SMALLINT_HPP
+#define BOOST_RANDOM_UNIFORM_SMALLINT_HPP
+
+#include <cassert>
+#include <iostream>
+#include <boost/config.hpp>
+#include <boost/limits.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/random/uniform_01.hpp>
+#include <boost/detail/workaround.hpp>
+#ifdef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+#include <boost/type_traits/is_float.hpp>
+#endif
+
+
+namespace boost {
+
+// uniform integer distribution on a small range [min, max]
+
+namespace detail {
+
+template <class InputStream, class UniformInt, class Impl>
+InputStream& extract_uniform_int(InputStream& is, UniformInt& ud, Impl& impl)
+{
+ typename UniformInt::result_type min, max;
+ is >> std::ws >> min >> std::ws >> max;
+ impl.set(min, max);
+ return is;
+}
+
+template<class UniformRandomNumberGenerator, class IntType>
+struct uniform_smallint_integer
+{
+public:
+ typedef UniformRandomNumberGenerator base_type;
+ typedef IntType result_type;
+
+ uniform_smallint_integer(base_type & rng, IntType min, IntType max)
+ : _rng(&rng)
+ { set(min, max); }
+
+ void set(result_type min, result_type max);
+
+ result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return _min; }
+ result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return _max; }
+ base_type& base() const { return *_rng; }
+
+ result_type operator()()
+ {
+ // we must not use the low bits here, because LCGs get very bad then
+ return (((*_rng)() - (_rng->min)()) / _factor) % _range + _min;
+ }
+
+private:
+ typedef typename base_type::result_type base_result;
+ base_type * _rng;
+ IntType _min, _max;
+ base_result _range;
+ int _factor;
+};
+
+template<class UniformRandomNumberGenerator, class IntType>
+void uniform_smallint_integer<UniformRandomNumberGenerator, IntType>::
+set(result_type min, result_type max)
+{
+ _min = min;
+ _max = max;
+ assert(min < max);
+
+ _range = static_cast<base_result>(_max-_min)+1;
+ base_result _factor = 1;
+
+ // LCGs get bad when only taking the low bits.
+ // (probably put this logic into a partial template specialization)
+ // Check how many low bits we can ignore before we get too much
+ // quantization error.
+ base_result r_base = (_rng->max)() - (_rng->min)();
+ if(r_base == (std::numeric_limits<base_result>::max)()) {
+ _factor = 2;
+ r_base /= 2;
+ }
+ r_base += 1;
+ if(r_base % _range == 0) {
+ // No quantization effects, good
+ _factor = r_base / _range;
+ } else {
+ // carefully avoid overflow; pessimizing heree
+ for( ; r_base/_range/32 >= _range; _factor *= 2)
+ r_base /= 2;
+ }
+}
+
+template<class UniformRandomNumberGenerator, class IntType>
+class uniform_smallint_float
+{
+public:
+ typedef UniformRandomNumberGenerator base_type;
+ typedef IntType result_type;
+
+ uniform_smallint_float(base_type & rng, IntType min, IntType max)
+ : _rng(rng)
+ {
+ // MSVC fails BOOST_STATIC_ASSERT with std::numeric_limits at class scope
+#if !defined(BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS) && !(defined(BOOST_MSVC) && BOOST_MSVC <= 1300)
+ BOOST_STATIC_ASSERT(std::numeric_limits<IntType>::is_integer);
+ BOOST_STATIC_ASSERT(!std::numeric_limits<typename base_type::result_type>::is_integer);
+#endif
+
+ assert(min < max);
+ set(min, max);
+ }
+
+ void set(result_type min, result_type max)
+ {
+ _min = min;
+ _max = max;
+ _range = static_cast<base_result>(_max-_min)+1;
+ }
+
+ result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return _min; }
+ result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return _max; }
+ base_type& base() const { return _rng.base(); }
+
+ result_type operator()()
+ {
+ return static_cast<IntType>(_rng() * _range) + _min;
+ }
+
+private:
+ typedef typename base_type::result_type base_result;
+ uniform_01<base_type> _rng;
+ IntType _min, _max;
+ base_result _range;
+};
+
+
+} // namespace detail
+
+
+
+
+template<class IntType = int>
+class uniform_smallint
+{
+public:
+ typedef IntType input_type;
+ typedef IntType result_type;
+
+ explicit uniform_smallint(IntType min = 0, IntType max = 9)
+ : _min(min), _max(max)
+ {
+#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+ // MSVC fails BOOST_STATIC_ASSERT with std::numeric_limits at class scope
+ BOOST_STATIC_ASSERT(std::numeric_limits<IntType>::is_integer);
+#endif
+ }
+
+ result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return _min; }
+ result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return _max; }
+ void reset() { }
+
+ template<class Engine>
+ result_type operator()(Engine& eng)
+ {
+ typedef typename Engine::result_type base_result;
+ base_result _range = static_cast<base_result>(_max-_min)+1;
+ base_result _factor = 1;
+
+ // LCGs get bad when only taking the low bits.
+ // (probably put this logic into a partial template specialization)
+ // Check how many low bits we can ignore before we get too much
+ // quantization error.
+ base_result r_base = (eng.max)() - (eng.min)();
+ if(r_base == (std::numeric_limits<base_result>::max)()) {
+ _factor = 2;
+ r_base /= 2;
+ }
+ r_base += 1;
+ if(r_base % _range == 0) {
+ // No quantization effects, good
+ _factor = r_base / _range;
+ } else {
+ // carefully avoid overflow; pessimizing heree
+ for( ; r_base/_range/32 >= _range; _factor *= 2)
+ r_base /= 2;
+ }
+
+ return ((eng() - (eng.min)()) / _factor) % _range + _min;
+ }
+
+#if !defined(BOOST_NO_OPERATORS_IN_NAMESPACE) && !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS)
+ template<class CharT, class Traits>
+ friend std::basic_ostream<CharT,Traits>&
+ operator<<(std::basic_ostream<CharT,Traits>& os, const uniform_smallint& ud)
+ {
+ os << ud._min << " " << ud._max;
+ return os;
+ }
+
+ template<class CharT, class Traits>
+ friend std::basic_istream<CharT,Traits>&
+ operator>>(std::basic_istream<CharT,Traits>& is, uniform_smallint& ud)
+ {
+# if BOOST_WORKAROUND(_MSC_FULL_VER, BOOST_TESTED_AT(13102292)) && BOOST_MSVC > 1300
+ return detail::extract_uniform_int(is, ud, ud._impl);
+# else
+ is >> std::ws >> ud._min >> std::ws >> ud._max;
+ return is;
+# endif
+ }
+#endif
+
+private:
+ result_type _min;
+ result_type _max;
+};
+
+} // namespace boost
+
+#endif // BOOST_RANDOM_UNIFORM_SMALLINT_HPP
diff --git a/boost/boost/random/variate_generator.hpp b/boost/boost/random/variate_generator.hpp
new file mode 100644
index 00000000000..5fa2eb2c691
--- /dev/null
+++ b/boost/boost/random/variate_generator.hpp
@@ -0,0 +1,133 @@
+/* boost random/variate_generator.hpp header file
+ *
+ * Copyright Jens Maurer 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 for most recent version including documentation.
+ *
+ * $Id: variate_generator.hpp,v 1.8 2005/02/14 11:53:50 johnmaddock Exp $
+ *
+ */
+
+#ifndef BOOST_RANDOM_RANDOM_GENERATOR_HPP
+#define BOOST_RANDOM_RANDOM_GENERATOR_HPP
+
+#include <boost/config.hpp>
+
+// implementation details
+#include <boost/detail/workaround.hpp>
+#include <boost/random/uniform_01.hpp>
+#include <boost/random/detail/pass_through_engine.hpp>
+#include <boost/random/detail/uniform_int_float.hpp>
+#include <boost/random/detail/ptr_helper.hpp>
+
+// Borland C++ 5.6.0 has problems using its numeric_limits traits as
+// template parameters
+#if BOOST_WORKAROUND(__BORLANDC__, <= 0x564)
+#include <boost/type_traits/is_integral.hpp>
+#endif
+
+namespace boost {
+
+namespace random {
+namespace detail {
+
+template<bool have_int, bool want_int>
+struct engine_helper;
+
+// for consistency, always have two levels of decorations
+template<>
+struct engine_helper<true, true>
+{
+ template<class Engine, class DistInputType>
+ struct impl
+ {
+ typedef pass_through_engine<Engine> type;
+ };
+};
+
+template<>
+struct engine_helper<false, false>
+{
+ template<class Engine, class DistInputType>
+ struct impl
+ {
+ typedef uniform_01<Engine, DistInputType> type;
+ };
+};
+
+template<>
+struct engine_helper<true, false>
+{
+ template<class Engine, class DistInputType>
+ struct impl
+ {
+ typedef uniform_01<Engine, DistInputType> type;
+ };
+};
+
+template<>
+struct engine_helper<false, true>
+{
+ template<class Engine, class DistInputType>
+ struct impl
+ {
+ typedef uniform_int_float<Engine, unsigned long> type;
+ };
+};
+
+} // namespace detail
+} // namespace random
+
+
+template<class Engine, class Distribution>
+class variate_generator
+{
+private:
+ typedef random::detail::pass_through_engine<Engine> decorated_engine;
+
+public:
+ typedef typename decorated_engine::base_type engine_value_type;
+ typedef Engine engine_type;
+ typedef Distribution distribution_type;
+ typedef typename Distribution::result_type result_type;
+
+ variate_generator(Engine e, Distribution d)
+ : _eng(decorated_engine(e)), _dist(d) { }
+
+ result_type operator()() { return _dist(_eng); }
+ template<class T>
+ result_type operator()(T value) { return _dist(_eng, value); }
+
+ engine_value_type& engine() { return _eng.base().base(); }
+ const engine_value_type& engine() const { return _eng.base().base(); }
+
+ distribution_type& distribution() { return _dist; }
+ const distribution_type& distribution() const { return _dist; }
+
+ result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return (distribution().min)(); }
+ result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return (distribution().max)(); }
+
+private:
+#if BOOST_WORKAROUND(__BORLANDC__, <= 0x564)
+ typedef typename random::detail::engine_helper<
+ boost::is_integral<typename decorated_engine::result_type>::value,
+ boost::is_integral<typename Distribution::input_type>::value
+ >::BOOST_NESTED_TEMPLATE impl<decorated_engine, typename Distribution::input_type>::type internal_engine_type;
+#else
+ enum {
+ have_int = std::numeric_limits<typename decorated_engine::result_type>::is_integer,
+ want_int = std::numeric_limits<typename Distribution::input_type>::is_integer
+ };
+ typedef typename random::detail::engine_helper<have_int, want_int>::BOOST_NESTED_TEMPLATE impl<decorated_engine, typename Distribution::input_type>::type internal_engine_type;
+#endif
+
+ internal_engine_type _eng;
+ distribution_type _dist;
+};
+
+} // namespace boost
+
+#endif // BOOST_RANDOM_RANDOM_GENERATOR_HPP
diff --git a/boost/boost/random/xor_combine.hpp b/boost/boost/random/xor_combine.hpp
new file mode 100644
index 00000000000..8eb60cb7dc7
--- /dev/null
+++ b/boost/boost/random/xor_combine.hpp
@@ -0,0 +1,130 @@
+/* boost random/xor_combine.hpp header file
+ *
+ * Copyright Jens Maurer 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 for most recent version including documentation.
+ *
+ * $Id: xor_combine.hpp,v 1.13 2005/05/21 15:57:00 dgregor Exp $
+ *
+ */
+
+#ifndef BOOST_RANDOM_XOR_COMBINE_HPP
+#define BOOST_RANDOM_XOR_COMBINE_HPP
+
+#include <iostream>
+#include <cassert>
+#include <algorithm> // for std::min and std::max
+#include <boost/config.hpp>
+#include <boost/limits.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/cstdint.hpp> // uint32_t
+
+
+namespace boost {
+namespace random {
+
+template<class URNG1, int s1, class URNG2, int s2,
+#ifndef BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS
+ typename URNG1::result_type
+#else
+ uint32_t
+#endif
+ val = 0>
+class xor_combine
+{
+public:
+ typedef URNG1 base1_type;
+ typedef URNG2 base2_type;
+ typedef typename base1_type::result_type result_type;
+
+ BOOST_STATIC_CONSTANT(bool, has_fixed_range = false);
+ BOOST_STATIC_CONSTANT(int, shift1 = s1);
+ BOOST_STATIC_CONSTANT(int, shfit2 = s2);
+
+ xor_combine() : _rng1(), _rng2()
+ { }
+ xor_combine(const base1_type & rng1, const base2_type & rng2)
+ : _rng1(rng1), _rng2(rng2) { }
+ template<class It> xor_combine(It& first, It last)
+ : _rng1(first, last), _rng2( /* advanced by other call */ first, last) { }
+ void seed() { _rng1.seed(); _rng2.seed(); }
+ template<class It> void seed(It& first, It last)
+ {
+ _rng1.seed(first, last);
+ _rng2.seed(first, last);
+ }
+
+ const base1_type& base1() { return _rng1; }
+ const base2_type& base2() { return _rng2; }
+
+ result_type operator()()
+ {
+ // MSVC fails BOOST_STATIC_ASSERT with std::numeric_limits at class scope
+#if !defined(BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS) && !(defined(BOOST_MSVC) && BOOST_MSVC <= 1300)
+ BOOST_STATIC_ASSERT(std::numeric_limits<typename base1_type::result_type>::is_integer);
+ BOOST_STATIC_ASSERT(std::numeric_limits<typename base2_type::result_type>::is_integer);
+ BOOST_STATIC_ASSERT(std::numeric_limits<typename base1_type::result_type>::digits >= std::numeric_limits<typename base2_type::result_type>::digits);
+#endif
+ return (_rng1() << s1) ^ (_rng2() << s2);
+ }
+
+ result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return std::min BOOST_PREVENT_MACRO_SUBSTITUTION((_rng1.min)(), (_rng2.min)()); }
+ result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return std::max BOOST_PREVENT_MACRO_SUBSTITUTION((_rng1.min)(), (_rng2.max)()); }
+ static bool validation(result_type x) { return val == x; }
+
+#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE
+
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+ template<class CharT, class Traits>
+ friend std::basic_ostream<CharT,Traits>&
+ operator<<(std::basic_ostream<CharT,Traits>& os, const xor_combine& s)
+ {
+ os << s._rng1 << " " << s._rng2 << " ";
+ return os;
+ }
+
+ template<class CharT, class Traits>
+ friend std::basic_istream<CharT,Traits>&
+ operator>>(std::basic_istream<CharT,Traits>& is, xor_combine& s)
+ {
+ is >> s._rng1 >> std::ws >> s._rng2 >> std::ws;
+ return is;
+ }
+#endif
+
+ friend bool operator==(const xor_combine& x, const xor_combine& y)
+ { return x._rng1 == y._rng1 && x._rng2 == y._rng2; }
+ friend bool operator!=(const xor_combine& x, const xor_combine& y)
+ { return !(x == y); }
+#else
+ // Use a member function; Streamable concept not supported.
+ bool operator==(const xor_combine& rhs) const
+ { return _rng1 == rhs._rng1 && _rng2 == rhs._rng2; }
+ bool operator!=(const xor_combine& rhs) const
+ { return !(*this == rhs); }
+#endif
+
+private:
+ base1_type _rng1;
+ base2_type _rng2;
+};
+
+#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION
+// A definition is required even for integral static constants
+template<class URNG1, int s1, class URNG2, int s2,
+#ifndef BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS
+ typename URNG1::result_type
+#else
+ uint32_t
+#endif
+ val>
+const bool xor_combine<URNG1, s1, URNG2, s2, val>::has_fixed_range;
+#endif
+
+} // namespace random
+} // namespace boost
+
+#endif // BOOST_RANDOM_XOR_COMBINE_HPP
diff --git a/boost/boost/range.hpp b/boost/boost/range.hpp
new file mode 100644
index 00000000000..948c3d75e42
--- /dev/null
+++ b/boost/boost/range.hpp
@@ -0,0 +1,33 @@
+// Boost.Range library
+//
+// Copyright Thorsten Ottosen 2003-2004. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_HPP_27_07_04
+#define BOOST_RANGE_HPP_27_07_04
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif
+
+#if _MSC_VER == 1300 // experiment
+
+#include <boost/range/detail/collection_traits.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <boost/range/sub_range.hpp>
+
+#else
+
+#include <boost/range/functions.hpp>
+#include <boost/range/metafunctions.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <boost/range/sub_range.hpp>
+
+#endif // _MSC_VER == 1300 // experiment
+
+#endif
diff --git a/boost/boost/range/begin.hpp b/boost/boost/range/begin.hpp
new file mode 100644
index 00000000000..d16ce1e2f88
--- /dev/null
+++ b/boost/boost/range/begin.hpp
@@ -0,0 +1,197 @@
+// Boost.Range library
+//
+// Copyright Thorsten Ottosen 2003-2004. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_BEGIN_HPP
+#define BOOST_RANGE_BEGIN_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif
+
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/range/config.hpp>
+
+#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+#include <boost/range/detail/begin.hpp>
+#else
+
+#include <boost/range/iterator.hpp>
+#include <boost/range/const_iterator.hpp>
+
+namespace boost
+{
+
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \
+ !BOOST_WORKAROUND(__GNUC__, < 3) \
+ /**/
+namespace range_detail
+{
+#endif
+
+ //////////////////////////////////////////////////////////////////////
+ // primary template
+ //////////////////////////////////////////////////////////////////////
+
+ template< typename C >
+ inline BOOST_DEDUCED_TYPENAME range_const_iterator<C>::type
+ boost_range_begin( const C& c )
+ {
+ return c.begin();
+ }
+
+ template< typename C >
+ inline BOOST_DEDUCED_TYPENAME range_iterator<
+ typename remove_const<C>::type >::type
+ boost_range_begin( C& c )
+ {
+ return c.begin();
+ }
+
+ //////////////////////////////////////////////////////////////////////
+ // pair
+ //////////////////////////////////////////////////////////////////////
+
+ template< typename Iterator >
+ inline Iterator boost_range_begin( const std::pair<Iterator,Iterator>& p )
+ {
+ return p.first;
+ }
+
+ template< typename Iterator >
+ inline Iterator boost_range_begin( std::pair<Iterator,Iterator>& p )
+ {
+ return p.first;
+ }
+
+ //////////////////////////////////////////////////////////////////////
+ // array
+ //////////////////////////////////////////////////////////////////////
+
+ template< typename T, std::size_t sz >
+ inline const T* boost_range_begin( const T (&array)[sz] )
+ {
+ return array;
+ }
+
+ template< typename T, std::size_t sz >
+ inline T* boost_range_begin( T (&array)[sz] )
+ {
+ return array;
+ }
+
+
+ //////////////////////////////////////////////////////////////////////
+ // string
+ //////////////////////////////////////////////////////////////////////
+
+#if 1 || BOOST_WORKAROUND(__MWERKS__, <= 0x3204 ) || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+// CW up to 9.3 and borland have troubles with function ordering
+ inline const char* boost_range_begin( const char* s )
+ {
+ return s;
+ }
+
+ inline char* boost_range_begin( char* s )
+ {
+ return s;
+ }
+
+ inline const wchar_t* boost_range_begin( const wchar_t* s )
+ {
+ return s;
+ }
+
+ inline wchar_t* boost_range_begin( wchar_t* s )
+ {
+ return s;
+ }
+#else
+ inline const char* boost_range_begin( const char*& s )
+ {
+ return s;
+ }
+
+ inline char* boost_range_begin( char*& s )
+ {
+ return s;
+ }
+
+ inline const wchar_t* boost_range_begin( const wchar_t*& s )
+ {
+ return s;
+ }
+
+ inline wchar_t* boost_range_begin( wchar_t*& s )
+ {
+ return s;
+ }
+#endif
+
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \
+ !BOOST_WORKAROUND(__GNUC__, < 3) \
+ /**/
+} // namespace 'range_detail'
+#endif
+
+
+template< class T >
+inline BOOST_DEDUCED_TYPENAME range_iterator<
+ typename remove_const<T>::type >::type begin( T& r )
+{
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \
+ !BOOST_WORKAROUND(__GNUC__, < 3) \
+ /**/
+ using namespace range_detail;
+#endif
+ return boost_range_begin( r );
+}
+
+template< class T >
+inline BOOST_DEDUCED_TYPENAME range_const_iterator<T>::type begin( const T& r )
+{
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \
+ !BOOST_WORKAROUND(__GNUC__, < 3) \
+ /**/
+ using namespace range_detail;
+#endif
+ return boost_range_begin( r );
+}
+
+#if BOOST_WORKAROUND(__MWERKS__, <= 0x3003 ) || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+// BCB and CW are not able to overload pointer when class overloads are also available.
+template<>
+inline range_const_iterator<const char*>::type begin<const char*>( const char*& r )
+{
+ return r;
+}
+
+template<>
+inline range_const_iterator<const wchar_t*>::type begin<const wchar_t*>( const wchar_t*& r )
+{
+ return r;
+}
+
+#endif
+
+} // namespace boost
+
+#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+namespace boost
+{
+ template< class T >
+ inline BOOST_DEDUCED_TYPENAME range_const_iterator<T>::type
+ const_begin( const T& r )
+ {
+ return boost::begin( r );
+ }
+}
+
+#endif
diff --git a/boost/boost/range/concepts.hpp b/boost/boost/range/concepts.hpp
new file mode 100644
index 00000000000..2441d43371d
--- /dev/null
+++ b/boost/boost/range/concepts.hpp
@@ -0,0 +1,155 @@
+// Boost.Range library concept checks
+//
+// Copyright Daniel Walker 2006. 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)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_CONCEPTS_HPP
+#define BOOST_RANGE_CONCEPTS_HPP
+
+#include <boost/concept_check.hpp>
+#include <boost/iterator/iterator_concepts.hpp>
+#include <boost/range/functions.hpp>
+#include <boost/range/metafunctions.hpp>
+
+/*!
+ * \file
+ * \brief Concept checks for the Boost Range library.
+ *
+ * The structures in this file may be used in conjunction with the
+ * Boost Concept Check library to insure that the type of a function
+ * parameter is compatible with a range concept. If not, a meaningful
+ * compile time error is generated. Checks are provided for the range
+ * concepts related to iterator traversal categories. For example, the
+ * following line checks that the type T models the ForwardRange
+ * concept.
+ *
+ * \code
+ * function_requires<ForwardRangeConcept<T> >();
+ * \endcode
+ *
+ * An additional concept check is required for the value access
+ * property of the range. For example to check for a
+ * ForwardReadableRange, the following code is required.
+ *
+ * \code
+ * function_requires<ForwardRangeConcept<T> >();
+ * function_requires<
+ * ReadableIteratorConcept<
+ * typename range_iterator<T>::type
+ * >
+ * >();
+ * \endcode
+ *
+ * \see http://www.boost.org/libs/range/doc/range.html for details
+ * about range concepts.
+ * \see http://www.boost.org/libs/iterator/doc/iterator_concepts.html
+ * for details about iterator concepts.
+ * \see http://www.boost.org/libs/concept_check/concept_check.htm for
+ * details about concept checks.
+ */
+
+namespace boost {
+
+ //! Check if a type T models the SinglePassRange range concept.
+ template<typename T>
+ struct SinglePassRangeConcept {
+ typedef typename range_value<T>::type range_value;
+ typedef typename range_iterator<T>::type range_iterator;
+ typedef typename range_const_iterator<T>::type range_const_iterator;
+ void constraints()
+ {
+ function_requires<
+ boost_concepts::SinglePassIteratorConcept<
+ range_iterator
+ >
+ >();
+ i = boost::begin(a);
+ i = boost::end(a);
+ b = boost::empty(a);
+ const_constraints(a);
+ }
+ void const_constraints(const T& a)
+ {
+ ci = boost::begin(a);
+ ci = boost::end(a);
+ }
+ T a;
+ range_iterator i;
+ range_const_iterator ci;
+ bool b;
+ };
+
+ //! Check if a type T models the ForwardRange range concept.
+ template<typename T>
+ struct ForwardRangeConcept {
+ typedef typename range_difference<T>::type range_difference;
+ typedef typename range_size<T>::type range_size;
+ void constraints()
+ {
+ function_requires<
+ SinglePassRangeConcept<T>
+ >();
+ function_requires<
+ boost_concepts::ForwardTraversalConcept<
+ typename range_iterator<T>::type
+ >
+ >();
+ s = boost::size(a);
+ }
+ T a;
+ range_size s;
+ };
+
+ //! Check if a type T models the BidirectionalRange range concept.
+ template<typename T>
+ struct BidirectionalRangeConcept {
+ typedef typename range_reverse_iterator<T>::type range_reverse_iterator;
+ typedef typename range_const_reverse_iterator<T>::type range_const_reverse_iterator;
+ void constraints()
+ {
+ function_requires<
+ ForwardRangeConcept<T>
+ >();
+ function_requires<
+ boost_concepts::BidirectionalTraversalConcept<
+ typename range_iterator<T>::type
+ >
+ >();
+ i = boost::rbegin(a);
+ i = boost::rend(a);
+ const_constraints(a);
+ }
+ void const_constraints(const T& a)
+ {
+ ci = boost::rbegin(a);
+ ci = boost::rend(a);
+ }
+ T a;
+ range_reverse_iterator i;
+ range_const_reverse_iterator ci;
+ };
+
+ //! Check if a type T models the RandomAccessRange range concept.
+ template<typename T>
+ struct RandomAccessRangeConcept {
+ void constraints()
+ {
+ function_requires<
+ BidirectionalRangeConcept<T>
+ >();
+ function_requires<
+ boost_concepts::RandomAccessTraversalConcept<
+ typename range_iterator<T>::type
+ >
+ >();
+ }
+ };
+
+} // namespace boost
+
+#endif // BOOST_RANGE_CONCEPTS_HPP
diff --git a/boost/boost/range/config.hpp b/boost/boost/range/config.hpp
new file mode 100644
index 00000000000..5f856bbb028
--- /dev/null
+++ b/boost/boost/range/config.hpp
@@ -0,0 +1,55 @@
+// Boost.Range library
+//
+// Copyright Thorsten Ottosen 2003-2004. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_CONFIG_HPP
+#define BOOST_RANGE_CONFIG_HPP
+
+#include <boost/detail/workaround.hpp>
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif
+
+#include <boost/config.hpp>
+
+#ifdef BOOST_RANGE_DEDUCED_TYPENAME
+#error "macro already defined!"
+#endif
+
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+# define BOOST_RANGE_DEDUCED_TYPENAME typename
+#else
+# if BOOST_WORKAROUND(BOOST_MSVC, == 1300) && !defined(_MSC_EXTENSIONS)
+# define BOOST_RANGE_DEDUCED_TYPENAME typename
+# else
+# define BOOST_RANGE_DEDUCED_TYPENAME BOOST_DEDUCED_TYPENAME
+# endif
+#endif
+
+#ifdef BOOST_RANGE_NO_ARRAY_SUPPORT
+#error "macro already defined!"
+#endif
+
+//#if BOOST_WORKAROUND( BOOST_MSVC, < 1300 ) || __MWERKS__ <= 0x3003
+#if _MSC_VER <= 1300 && !defined( __COMO__ ) && !defined( __GNUC__ ) && __MWERKS__ <= 0x3003
+#define BOOST_RANGE_NO_ARRAY_SUPPORT 1
+#endif
+
+#ifdef BOOST_RANGE_NO_ARRAY_SUPPORT
+#define BOOST_RANGE_ARRAY_REF() (boost_range_array)
+#define BOOST_RANGE_NO_STATIC_ASSERT
+#else
+#define BOOST_RANGE_ARRAY_REF() (&boost_range_array)
+#endif
+
+
+
+#endif
+
diff --git a/boost/boost/range/const_iterator.hpp b/boost/boost/range/const_iterator.hpp
new file mode 100644
index 00000000000..4ba41b2affb
--- /dev/null
+++ b/boost/boost/range/const_iterator.hpp
@@ -0,0 +1,127 @@
+// Boost.Range library
+//
+// Copyright Thorsten Ottosen 2003-2004. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_CONST_ITERATOR_HPP
+#define BOOST_RANGE_CONST_ITERATOR_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif
+
+#include <boost/range/config.hpp>
+
+#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#include <boost/range/detail/const_iterator.hpp>
+#else
+
+#include <cstddef>
+#include <utility>
+
+namespace boost
+{
+ //////////////////////////////////////////////////////////////////////////
+ // default
+ //////////////////////////////////////////////////////////////////////////
+
+ template< typename C >
+ struct range_const_iterator
+ {
+ typedef BOOST_DEDUCED_TYPENAME C::const_iterator type;
+ };
+
+ //////////////////////////////////////////////////////////////////////////
+ // pair
+ //////////////////////////////////////////////////////////////////////////
+
+ template< typename Iterator >
+ struct range_const_iterator< std::pair<Iterator,Iterator> >
+ {
+ typedef Iterator type;
+ };
+
+ template< typename Iterator >
+ struct range_const_iterator< const std::pair<Iterator,Iterator> >
+ {
+ typedef Iterator type;
+ };
+
+ //////////////////////////////////////////////////////////////////////////
+ // array
+ //////////////////////////////////////////////////////////////////////////
+
+ template< typename T, std::size_t sz >
+ struct range_const_iterator< T[sz] >
+ {
+ typedef const T* type;
+ };
+
+ template< typename T, std::size_t sz >
+ struct range_const_iterator< const T[sz] >
+ {
+ typedef const T* type;
+ };
+
+ //////////////////////////////////////////////////////////////////////////
+ // string
+ //////////////////////////////////////////////////////////////////////////
+
+ template<>
+ struct range_const_iterator< char* >
+ {
+ typedef const char* type;
+ };
+
+ template<>
+ struct range_const_iterator< wchar_t* >
+ {
+ typedef const wchar_t* type;
+ };
+
+ template<>
+ struct range_const_iterator< const char* >
+ {
+ typedef const char* type;
+ };
+
+ template<>
+ struct range_const_iterator< const wchar_t* >
+ {
+ typedef const wchar_t* type;
+ };
+
+ template<>
+ struct range_const_iterator< char* const >
+ {
+ typedef const char* type;
+ };
+
+ template<>
+ struct range_const_iterator< wchar_t* const >
+ {
+ typedef const wchar_t* type;
+ };
+
+ template<>
+ struct range_const_iterator< const char* const >
+ {
+ typedef const char* type;
+ };
+
+ template<>
+ struct range_const_iterator< const wchar_t* const >
+ {
+ typedef const wchar_t* type;
+ };
+
+} // namespace boost
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#endif
diff --git a/boost/boost/range/const_reverse_iterator.hpp b/boost/boost/range/const_reverse_iterator.hpp
new file mode 100644
index 00000000000..f33f63dfe12
--- /dev/null
+++ b/boost/boost/range/const_reverse_iterator.hpp
@@ -0,0 +1,37 @@
+// Boost.Range library
+//
+// Copyright Thorsten Ottosen 2003-2004. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_CONST_REVERSE_ITERATOR_HPP
+#define BOOST_RANGE_CONST_REVERSE_ITERATOR_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif
+
+#include <boost/range/config.hpp>
+#include <boost/range/const_iterator.hpp>
+#include <boost/iterator/reverse_iterator.hpp>
+
+namespace boost
+{
+ //////////////////////////////////////////////////////////////////////////
+ // default
+ //////////////////////////////////////////////////////////////////////////
+
+ template< typename C >
+ struct range_const_reverse_iterator
+ {
+ typedef reverse_iterator<
+ BOOST_DEDUCED_TYPENAME range_const_iterator<C>::type > type;
+ };
+
+} // namespace boost
+
+#endif
diff --git a/boost/boost/range/detail/begin.hpp b/boost/boost/range/detail/begin.hpp
new file mode 100644
index 00000000000..f516a14509e
--- /dev/null
+++ b/boost/boost/range/detail/begin.hpp
@@ -0,0 +1,133 @@
+// Boost.Range library
+//
+// Copyright Thorsten Ottosen 2003-2004. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_DETAIL_BEGIN_HPP
+#define BOOST_RANGE_DETAIL_BEGIN_HPP
+
+#include <boost/config.hpp> // BOOST_MSVC
+#include <boost/detail/workaround.hpp>
+#include <boost/range/result_iterator.hpp>
+#include <boost/range/detail/common.hpp>
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1310)
+# include <boost/range/value_type.hpp>
+#endif
+
+namespace boost
+{
+
+ namespace range_detail
+ {
+ template< typename T >
+ struct range_begin;
+
+ //////////////////////////////////////////////////////////////////////
+ // default
+ //////////////////////////////////////////////////////////////////////
+
+ template<>
+ struct range_begin<std_container_>
+ {
+ template< typename C >
+ static BOOST_RANGE_DEDUCED_TYPENAME range_result_iterator<C>::type fun( C& c )
+ {
+ return c.begin();
+ };
+ };
+
+ //////////////////////////////////////////////////////////////////////
+ // pair
+ //////////////////////////////////////////////////////////////////////
+
+ template<>
+ struct range_begin<std_pair_>
+ {
+ template< typename P >
+ static BOOST_RANGE_DEDUCED_TYPENAME range_result_iterator<P>::type fun( const P& p )
+ {
+ return p.first;
+ }
+ };
+
+ //////////////////////////////////////////////////////////////////////
+ // array
+ //////////////////////////////////////////////////////////////////////
+
+ template<>
+ struct range_begin<array_>
+ {
+ #if !BOOST_WORKAROUND(BOOST_MSVC, < 1310)
+ template< typename T, std::size_t sz >
+ static T* fun( T BOOST_RANGE_ARRAY_REF()[sz] )
+ {
+ return boost_range_array;
+ }
+ #else
+ template<typename T>
+ static BOOST_RANGE_DEDUCED_TYPENAME range_value<T>::type* fun(T& t)
+ {
+ return t;
+ }
+ #endif
+ };
+
+ //////////////////////////////////////////////////////////////////////
+ // string
+ //////////////////////////////////////////////////////////////////////
+
+ template<>
+ struct range_begin<char_ptr_>
+ {
+ static char* fun( char* s )
+ {
+ return s;
+ }
+ };
+
+ template<>
+ struct range_begin<const_char_ptr_>
+ {
+ static const char* fun( const char* s )
+ {
+ return s;
+ }
+ };
+
+ template<>
+ struct range_begin<wchar_t_ptr_>
+ {
+
+ static wchar_t* fun( wchar_t* s )
+ {
+ return s;
+ }
+ };
+
+ template<>
+ struct range_begin<const_wchar_t_ptr_>
+ {
+ static const wchar_t* fun( const wchar_t* s )
+ {
+ return s;
+ }
+ };
+
+ } // namespace 'range_detail'
+
+ template< typename C >
+ inline BOOST_RANGE_DEDUCED_TYPENAME range_result_iterator<C>::type
+ begin( C& c )
+ {
+ return range_detail::range_begin< BOOST_RANGE_DEDUCED_TYPENAME range_detail::range<C>::type >::fun( c );
+ }
+
+} // namespace 'boost'
+
+
+#endif
diff --git a/boost/boost/range/detail/collection_traits.hpp b/boost/boost/range/detail/collection_traits.hpp
new file mode 100644
index 00000000000..c50ca3e83da
--- /dev/null
+++ b/boost/boost/range/detail/collection_traits.hpp
@@ -0,0 +1,266 @@
+// Boost string_algo library collection_traits.hpp header file -------------//
+
+// Copyright Pavol Droba 2002-2003. Use, modification and
+// distribution is 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)
+
+// (C) Copyright Thorsten Ottosen 2002-2003. Use, modification and
+// distribution is 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)
+
+// (C) Copyright Jeremy Siek 2001. Use, modification and
+// distribution is 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)
+
+// Original idea of container traits was proposed by Jeremy Siek and
+// Thorsten Ottosen. This implementation is lightweighted version
+// of container_traits adapter for usage with string_algo library
+
+#ifndef BOOST_RANGE_STRING_COLLECTION_TRAITS_HPP
+#define BOOST_RANGE_STRING_COLLECTION_TRAITS_HPP
+
+#include <boost/algorithm/string/config.hpp>
+#include <boost/type_traits/is_array.hpp>
+#include <boost/type_traits/is_pointer.hpp>
+#include <boost/mpl/eval_if.hpp>
+
+// Implementation
+#include <boost/range/detail/collection_traits_detail.hpp>
+
+/*! \file
+ Defines collection_traits class and related free-standing functions.
+ This facility is used to unify the access to different types of collections.
+ It allows the algorithms in the library to work with STL collections, c-style
+ array, null-terminated c-strings (and more) using the same interface.
+*/
+
+namespace boost {
+ namespace algorithm {
+
+// collection_traits template class -----------------------------------------//
+
+ //! collection_traits class
+ /*!
+ Collection traits provide uniform access to different types of
+ collections. This functionality allows to write generic algorithms
+ which work with several different kinds of collections.
+
+ Currently following collection types are supported:
+ - containers with STL compatible container interface ( see ContainerConcept )
+ ( i.e. \c std::vector<>, \c std::list<>, \c std::string<> ... )
+ - c-style array
+ ( \c char[10], \c int[15] ... )
+ - null-terminated c-strings
+ ( \c char*, \c wchar_T* )
+ - std::pair of iterators
+ ( i.e \c std::pair<vector<int>::iterator,vector<int>::iterator> )
+
+ Collection traits provide an external collection interface operations.
+ All are accessible using free-standing functions.
+
+ The following operations are supported:
+ - \c size()
+ - \c empty()
+ - \c begin()
+ - \c end()
+
+ Container traits have somewhat limited functionality on compilers not
+ supporting partial template specialization and partial template ordering.
+ */
+ template< typename T >
+ struct collection_traits
+ {
+ private:
+ typedef BOOST_STRING_TYPENAME ::boost::mpl::eval_if<
+ ::boost::algorithm::detail::is_pair<T>,
+ detail::pair_container_traits_selector<T>,
+ BOOST_STRING_TYPENAME ::boost::mpl::eval_if<
+ ::boost::is_array<T>,
+ detail::array_container_traits_selector<T>,
+ BOOST_STRING_TYPENAME ::boost::mpl::eval_if<
+ ::boost::is_pointer<T>,
+ detail::pointer_container_traits_selector<T>,
+ detail::default_container_traits_selector<T>
+ >
+ >
+ >::type container_helper_type;
+ public:
+ //! Function type
+ typedef container_helper_type function_type;
+ //! Value type
+ typedef BOOST_STRING_TYPENAME
+ container_helper_type::value_type value_type;
+ //! Size type
+ typedef BOOST_STRING_TYPENAME
+ container_helper_type::size_type size_type;
+ //! Iterator type
+ typedef BOOST_STRING_TYPENAME
+ container_helper_type::iterator iterator;
+ //! Const iterator type
+ typedef BOOST_STRING_TYPENAME
+ container_helper_type::const_iterator const_iterator;
+ //! Result iterator type ( iterator of const_iterator, depending on the constness of the container )
+ typedef BOOST_STRING_TYPENAME
+ container_helper_type::result_iterator result_iterator;
+ //! Difference type
+ typedef BOOST_STRING_TYPENAME
+ container_helper_type::difference_type difference_type;
+
+ }; // 'collection_traits'
+
+// collection_traits metafunctions -----------------------------------------//
+
+ //! Container value_type trait
+ /*!
+ Extract the type of elements contained in a container
+ */
+ template< typename C >
+ struct value_type_of
+ {
+ typedef BOOST_STRING_TYPENAME collection_traits<C>::value_type type;
+ };
+
+ //! Container difference trait
+ /*!
+ Extract the container's difference type
+ */
+ template< typename C >
+ struct difference_type_of
+ {
+ typedef BOOST_STRING_TYPENAME collection_traits<C>::difference_type type;
+ };
+
+ //! Container iterator trait
+ /*!
+ Extract the container's iterator type
+ */
+ template< typename C >
+ struct iterator_of
+ {
+ typedef BOOST_STRING_TYPENAME collection_traits<C>::iterator type;
+ };
+
+ //! Container const_iterator trait
+ /*!
+ Extract the container's const_iterator type
+ */
+ template< typename C >
+ struct const_iterator_of
+ {
+ typedef BOOST_STRING_TYPENAME collection_traits<C>::const_iterator type;
+ };
+
+
+ //! Container result_iterator
+ /*!
+ Extract the container's result_iterator type. This type maps to \c C::iterator
+ for mutable container and \c C::const_iterator for const containers.
+ */
+ template< typename C >
+ struct result_iterator_of
+ {
+ typedef BOOST_STRING_TYPENAME collection_traits<C>::result_iterator type;
+ };
+
+// collection_traits related functions -----------------------------------------//
+
+ //! Free-standing size() function
+ /*!
+ Get the size of the container. Uses collection_traits.
+ */
+ template< typename C >
+ inline BOOST_STRING_TYPENAME collection_traits<C>::size_type
+ size( const C& c )
+ {
+ return collection_traits<C>::function_type::size( c );
+ }
+
+ //! Free-standing empty() function
+ /*!
+ Check whether the container is empty. Uses container traits.
+ */
+ template< typename C >
+ inline bool empty( const C& c )
+ {
+ return collection_traits<C>::function_type::empty( c );
+ }
+
+#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+ //! Free-standing begin() function
+ /*!
+ Get the begin iterator of the container. Uses collection_traits.
+ */
+ template< typename C >
+ inline BOOST_STRING_TYPENAME collection_traits<C>::iterator
+ begin( C& c )
+ {
+ return collection_traits<C>::function_type::begin( c );
+ }
+
+ //! Free-standing begin() function
+ /*!
+ \overload
+ */
+ template< typename C >
+ inline BOOST_STRING_TYPENAME collection_traits<C>::const_iterator
+ begin( const C& c )
+ {
+ return collection_traits<C>::function_type::begin( c );
+ }
+
+ //! Free-standing end() function
+ /*!
+ Get the begin iterator of the container. Uses collection_traits.
+ */
+ template< typename C >
+ inline BOOST_STRING_TYPENAME collection_traits<C>::iterator
+ end( C& c )
+ {
+ return collection_traits<C>::function_type::end( c );
+ }
+
+ //! Free-standing end() function
+ /*!
+ \overload
+ */
+ template< typename C >
+ inline BOOST_STRING_TYPENAME collection_traits<C>::const_iterator
+ end( const C& c )
+ {
+ return collection_traits<C>::function_type::end( c );
+ }
+
+#else // BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+ //! Free-standing begin() function
+ /*!
+ \overload
+ */
+ template< typename C >
+ inline BOOST_STRING_TYPENAME collection_traits<C>::result_iterator
+ begin( C& c )
+ {
+ return collection_traits<C>::function_type::begin( c );
+ }
+
+ //! Free-standing end() function
+ /*!
+ \overload
+ */
+ template< typename C >
+ inline BOOST_STRING_TYPENAME collection_traits<C>::result_iterator
+ end( C& c )
+ {
+ return collection_traits<C>::function_type::end( c );
+ }
+
+#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+ } // namespace algorithm
+} // namespace boost
+
+#endif // BOOST_STRING_COLLECTION_TRAITS_HPP
diff --git a/boost/boost/range/detail/collection_traits_detail.hpp b/boost/boost/range/detail/collection_traits_detail.hpp
new file mode 100644
index 00000000000..44fbde031fc
--- /dev/null
+++ b/boost/boost/range/detail/collection_traits_detail.hpp
@@ -0,0 +1,621 @@
+// Boost string_algo library collection_traits.hpp header file -----------------------//
+
+// Copyright Pavol Droba 2002-2003. Use, modification and
+// distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#ifndef BOOST_RANGE_STRING_DETAIL_COLLECTION_TRAITS_HPP
+#define BOOST_RANGE_STRING_DETAIL_COLLECTION_TRAITS_HPP
+
+#include <boost/algorithm/string/config.hpp>
+#include <cstddef>
+#include <string>
+#include <boost/type_traits/is_array.hpp>
+#include <boost/type_traits/is_pointer.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/type_traits/remove_pointer.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/vector.hpp>
+#include <boost/mpl/fold.hpp>
+#include <boost/detail/iterator.hpp>
+#include <boost/algorithm/string/yes_no_type.hpp>
+
+// Container traits implementation ---------------------------------------------------------
+
+namespace boost {
+ namespace algorithm {
+ namespace detail {
+
+// Default collection traits -----------------------------------------------------------------
+
+ // Default collection helper
+ /*
+ Wraps std::container compliant containers
+ */
+ template< typename ContainerT >
+ struct default_container_traits
+ {
+ typedef BOOST_STRING_TYPENAME ContainerT::value_type value_type;
+ typedef BOOST_STRING_TYPENAME ContainerT::iterator iterator;
+ typedef BOOST_STRING_TYPENAME ContainerT::const_iterator const_iterator;
+ typedef BOOST_STRING_TYPENAME
+ ::boost::mpl::if_< ::boost::is_const<ContainerT>,
+ const_iterator,
+ iterator
+ >::type result_iterator;
+ typedef BOOST_STRING_TYPENAME ContainerT::difference_type difference_type;
+ typedef BOOST_STRING_TYPENAME ContainerT::size_type size_type;
+
+ // static operations
+ template< typename C >
+ static size_type size( const C& c )
+ {
+ return c.size();
+ }
+
+ template< typename C >
+ static bool empty( const C& c )
+ {
+ return c.empty();
+ }
+
+#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+ template< typename C >
+ static iterator begin( C& c )
+ {
+ return c.begin();
+ }
+
+ template< typename C >
+ static const_iterator begin( const C& c )
+ {
+ return c.begin();
+ }
+
+ template< typename C >
+ static iterator end( C& c )
+ {
+ return c.end();
+ }
+
+ template< typename C >
+ static const_iterator end( const C& c )
+ {
+ return c.end();
+ }
+
+#else // BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+ template< typename C >
+ static result_iterator begin( C& c )
+ {
+ return c.begin();
+ }
+
+ template< typename C >
+ static result_iterator end( C& c )
+ {
+ return c.end();
+ }
+
+#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+ };
+
+ template<typename T>
+ struct default_container_traits_selector
+ {
+ typedef default_container_traits<T> type;
+ };
+
+// Pair container traits ---------------------------------------------------------------------
+
+ // pair selector
+ template< typename T, typename U >
+ yes_type is_pair_impl( const std::pair<T,U>* );
+ no_type is_pair_impl( ... );
+
+ template<typename T> struct is_pair
+ {
+ private:
+ static T* t;
+ public:
+ BOOST_STATIC_CONSTANT( bool, value=
+ sizeof(is_pair_impl(t))==sizeof(yes_type) );
+ };
+
+ // pair helper
+ template< typename PairT >
+ struct pair_container_traits
+ {
+ typedef BOOST_STRING_TYPENAME PairT::first_type element_type;
+
+ typedef BOOST_STRING_TYPENAME ::boost::detail::
+ iterator_traits<element_type>::value_type value_type;
+ typedef std::size_t size_type;
+ typedef BOOST_STRING_TYPENAME ::boost::detail::
+ iterator_traits<element_type>::difference_type difference_type;
+
+ typedef element_type iterator;
+ typedef element_type const_iterator;
+ typedef element_type result_iterator;
+
+ // static operations
+ template< typename P >
+ static size_type size( const P& p )
+ {
+ difference_type diff = std::distance( p.first, p.second );
+ if ( diff < 0 )
+ return 0;
+ else
+ return diff;
+ }
+
+ template< typename P >
+ static bool empty( const P& p )
+ {
+ return p.first==p.second;
+ }
+
+ template< typename P >
+ static const_iterator begin( const P& p )
+ {
+ return p.first;
+ }
+
+ template< typename P >
+ static const_iterator end( const P& p )
+ {
+ return p.second;
+ }
+ }; // 'pair_container_helper'
+
+ template<typename T>
+ struct pair_container_traits_selector
+ {
+ typedef pair_container_traits<T> type;
+ };
+
+// Array container traits ---------------------------------------------------------------
+
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ // array traits ( partial specialization )
+ template< typename T >
+ struct array_traits;
+
+ template< typename T, std::size_t sz >
+ struct array_traits<T[sz]>
+ {
+ // typedef
+ typedef T* iterator;
+ typedef const T* const_iterator;
+ typedef T value_type;
+ typedef std::size_t size_type;
+ typedef std::ptrdiff_t difference_type;
+
+ // size of the array ( static );
+ BOOST_STATIC_CONSTANT( size_type, array_size = sz );
+ };
+
+#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+ // array traits ( no partial specialization )
+ /*
+ without parial specialization we are able to
+ provide support only for a limited number of
+ types. Currently the primitive numeric types
+ are supported
+ */
+ template< typename T, typename BaseT >
+ struct array_traits_impl
+ {
+ typedef BaseT value_type;
+ typedef BaseT* iterator;
+ typedef const BaseT* const_iterator;
+ typedef std::size_t size_type;
+ typedef std::ptrdiff_t difference_type;
+
+ // size of the array
+ BOOST_STATIC_CONSTANT( size_type, array_size = sizeof(T)/sizeof(BaseT) );
+ };
+
+ template< typename T, typename BaseT >
+ struct array_traits_impl_selector
+ {
+ typedef array_traits_impl<T,BaseT> type;
+ };
+
+ struct array_traits_void
+ {
+ typedef void type;
+ };
+
+ template< typename T, typename BaseT >
+ struct array_traits_cv_selector
+ {
+ typedef BOOST_STRING_TYPENAME
+ ::boost::mpl::eval_if<
+ ::boost::is_convertible<T,BaseT*>,
+ array_traits_impl_selector<T,BaseT>,
+ ::boost::mpl::eval_if<
+ ::boost::is_convertible<T,const BaseT*>,
+ array_traits_impl_selector<T, const BaseT>,
+ ::boost::mpl::eval_if<
+ ::boost::is_convertible<T, volatile BaseT*>,
+ array_traits_impl_selector<T, volatile BaseT>,
+ array_traits_impl_selector<T, const volatile BaseT>
+ >
+ >
+ >::type type;
+ };
+
+ template< typename T >
+ struct array_traits_select
+ {
+ template< typename T1, typename T2 >
+ struct apply
+ {
+ typedef BOOST_STRING_TYPENAME
+ ::boost::mpl::eval_if<
+ ::boost::is_convertible<T,const volatile T2*>,
+ array_traits_cv_selector<T,T2>,
+ ::boost::mpl::identity<T1> >::type type;
+ };
+ };
+
+ template< typename T >
+ struct array_traits_selector
+ {
+ private:
+ // supported array base types
+#ifndef BOOST_NO_INTRINSIC_WCHAR_T
+ typedef BOOST_STRING_TYPENAME
+ ::boost::mpl::vector10<
+ wchar_t,
+#else // BOOST_NO_INTRINSIC_WCHAR_T
+ typedef BOOST_STRING_TYPENAME
+ ::boost::mpl::vector9<
+#endif // BOOST_NO_INTRINSIC_WCHAR_T
+ char,
+ signed char,
+ unsigned char,
+ signed short,
+ unsigned short,
+ signed int,
+ unsigned int,
+ signed long,
+ unsigned long
+ >::type array_base_types;
+
+ public:
+ typedef BOOST_STRING_TYPENAME
+ ::boost::mpl::fold<
+ array_base_types,
+ ::boost::algorithm::detail::array_traits_void,
+ ::boost::algorithm::detail::array_traits_select<T> >::type type;
+ };
+
+ template< typename T >
+ struct array_traits
+ {
+ typedef BOOST_STRING_TYPENAME
+ array_traits_selector<T>::type traits_type;
+
+ typedef BOOST_STRING_TYPENAME
+ traits_type::value_type value_type;
+ typedef BOOST_STRING_TYPENAME
+ traits_type::iterator iterator;
+ typedef BOOST_STRING_TYPENAME
+ traits_type::const_iterator const_iterator;
+ typedef BOOST_STRING_TYPENAME
+ traits_type::size_type size_type;
+ typedef BOOST_STRING_TYPENAME
+ traits_type::difference_type difference_type;
+
+ BOOST_STATIC_CONSTANT( size_type, array_size = traits_type::array_size );
+ };
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+ // array lenght resolving
+ /*
+ Lenght of string contained in a static array could
+ be different from the size of the array.
+ For string processing we need the lenght without
+ terminating 0.
+
+ Therefore, the lenght is calulated for char and wchar_t
+ using char_traits, rather then simply returning
+ the array size.
+ */
+ template< typename T >
+ struct array_length_selector
+ {
+ template< typename TraitsT >
+ struct array_length
+ {
+ typedef BOOST_STRING_TYPENAME
+ TraitsT::size_type size_type;
+
+ BOOST_STATIC_CONSTANT(
+ size_type,
+ array_size=TraitsT::array_size );
+
+ template< typename A >
+ static size_type length( const A& )
+ {
+ return array_size;
+ }
+
+ template< typename A >
+ static bool empty( const A& )
+ {
+ return array_size==0;
+ }
+ };
+ };
+
+ // specialization for char
+ template<>
+ struct array_length_selector<char>
+ {
+ template< typename TraitsT >
+ struct array_length
+ {
+ typedef BOOST_STRING_TYPENAME
+ TraitsT::size_type size_type;
+
+ template< typename A >
+ static size_type length( const A& a )
+ {
+ if ( a==0 )
+ return 0;
+ else
+ return std::char_traits<char>::length(a);
+ }
+
+ template< typename A >
+ static bool empty( const A& a )
+ {
+ return a==0 || a[0]==0;
+ }
+ };
+ };
+
+ // specialization for wchar_t
+ template<>
+ struct array_length_selector<wchar_t>
+ {
+ template< typename TraitsT >
+ struct array_length
+ {
+ typedef BOOST_STRING_TYPENAME
+ TraitsT::size_type size_type;
+
+ template< typename A >
+ static size_type length( const A& a )
+ {
+ if ( a==0 )
+ return 0;
+ else
+ return std::char_traits<wchar_t>::length(a);
+ }
+
+ template< typename A >
+ static bool empty( const A& a )
+ {
+ return a==0 || a[0]==0;
+ }
+ };
+ };
+
+ template< typename T >
+ struct array_container_traits
+ {
+ private:
+ // resolve array traits
+ typedef array_traits<T> traits_type;
+
+ public:
+ typedef BOOST_STRING_TYPENAME
+ traits_type::value_type value_type;
+ typedef BOOST_STRING_TYPENAME
+ traits_type::iterator iterator;
+ typedef BOOST_STRING_TYPENAME
+ traits_type::const_iterator const_iterator;
+ typedef BOOST_STRING_TYPENAME
+ traits_type::size_type size_type;
+ typedef BOOST_STRING_TYPENAME
+ traits_type::difference_type difference_type;
+
+ typedef BOOST_STRING_TYPENAME
+ ::boost::mpl::if_< ::boost::is_const<T>,
+ const_iterator,
+ iterator
+ >::type result_iterator;
+
+ private:
+ // resolve array size
+ typedef BOOST_STRING_TYPENAME
+ ::boost::remove_cv<value_type>::type char_type;
+ typedef BOOST_STRING_TYPENAME
+ array_length_selector<char_type>::
+ BOOST_NESTED_TEMPLATE array_length<traits_type> array_length_type;
+
+ public:
+ BOOST_STATIC_CONSTANT( size_type, array_size = traits_type::array_size );
+
+ // static operations
+ template< typename A >
+ static size_type size( const A& a )
+ {
+ return array_length_type::length(a);
+ }
+
+ template< typename A >
+ static bool empty( const A& a )
+ {
+ return array_length_type::empty(a);
+ }
+
+
+#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+ template< typename A >
+ static iterator begin( A& a )
+ {
+ return a;
+ }
+
+ template< typename A >
+ static const_iterator begin( const A& a )
+ {
+ return a;
+ }
+
+ template< typename A >
+ static iterator end( A& a )
+ {
+ return a+array_length_type::length(a);
+ }
+
+ template< typename A >
+ static const_iterator end( const A& a )
+ {
+ return a+array_length_type::length(a);
+ }
+
+#else // BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+ template< typename A >
+ static result_iterator begin( A& a )
+ {
+ return a;
+ }
+
+ template< typename A >
+ static result_iterator end( A& a )
+ {
+ return a+array_length_type::length(a);
+ }
+
+#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+ };
+
+ template<typename T>
+ struct array_container_traits_selector
+ {
+ typedef array_container_traits<T> type;
+ };
+
+// Pointer container traits ---------------------------------------------------------------
+
+ template<typename T>
+ struct pointer_container_traits
+ {
+ typedef BOOST_STRING_TYPENAME
+ ::boost::remove_pointer<T>::type value_type;
+
+ typedef BOOST_STRING_TYPENAME
+ ::boost::remove_cv<value_type>::type char_type;
+ typedef ::std::char_traits<char_type> char_traits;
+
+ typedef value_type* iterator;
+ typedef const value_type* const_iterator;
+ typedef std::ptrdiff_t difference_type;
+ typedef std::size_t size_type;
+
+ typedef BOOST_STRING_TYPENAME
+ ::boost::mpl::if_< ::boost::is_const<T>,
+ const_iterator,
+ iterator
+ >::type result_iterator;
+
+ // static operations
+ template< typename P >
+ static size_type size( const P& p )
+ {
+ if ( p==0 )
+ return 0;
+ else
+ return char_traits::length(p);
+ }
+
+ template< typename P >
+ static bool empty( const P& p )
+ {
+ return p==0 || p[0]==0;
+ }
+
+#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+ template< typename P >
+ static iterator begin( P& p )
+ {
+ return p;
+ }
+
+ template< typename P >
+ static const_iterator begin( const P& p )
+ {
+ return p;
+ }
+
+ template< typename P >
+ static iterator end( P& p )
+ {
+ if ( p==0 )
+ return p;
+ else
+ return p+char_traits::length(p);
+ }
+
+ template< typename P >
+ static const_iterator end( const P& p )
+ {
+ if ( p==0 )
+ return p;
+ else
+ return p+char_traits::length(p);
+ }
+
+#else // BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+ template< typename P >
+ static result_iterator begin( P& p )
+ {
+ return p;
+ }
+
+ template< typename P >
+ static result_iterator end( P& p )
+ {
+ if ( p==0 )
+ return p;
+ else
+ return p+char_traits::length(p);
+ }
+
+#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+ };
+
+ template<typename T>
+ struct pointer_container_traits_selector
+ {
+ typedef pointer_container_traits<T> type;
+ };
+
+ } // namespace detail
+ } // namespace algorithm
+} // namespace boost
+
+
+#endif // BOOST_STRING_DETAIL_COLLECTION_HPP
diff --git a/boost/boost/range/detail/common.hpp b/boost/boost/range/detail/common.hpp
new file mode 100644
index 00000000000..36fada16ebb
--- /dev/null
+++ b/boost/boost/range/detail/common.hpp
@@ -0,0 +1,116 @@
+// Boost.Range library
+//
+// Copyright Thorsten Ottosen 2003-2004. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_DETAIL_COMMON_HPP
+#define BOOST_RANGE_DETAIL_COMMON_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif
+
+#include <boost/range/config.hpp>
+#include <boost/range/detail/sfinae.hpp>
+#include <boost/type_traits/is_void.hpp>
+#include <boost/type_traits/detail/ice_or.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/int.hpp>
+#include <cstddef>
+
+//////////////////////////////////////////////////////////////////////////////
+// missing partial specialization workaround.
+//////////////////////////////////////////////////////////////////////////////
+
+namespace boost
+{
+ namespace range_detail
+ {
+ // 1 = std containers
+ // 2 = std::pair
+ // 3 = const std::pair
+ // 4 = array
+ // 5 = const array
+ // 6 = char array
+ // 7 = wchar_t array
+ // 8 = char*
+ // 9 = const char*
+ // 10 = whar_t*
+ // 11 = const wchar_t*
+ // 12 = string
+
+ typedef mpl::int_<1>::type std_container_;
+ typedef mpl::int_<2>::type std_pair_;
+ typedef mpl::int_<3>::type const_std_pair_;
+ typedef mpl::int_<4>::type array_;
+ typedef mpl::int_<5>::type const_array_;
+ typedef mpl::int_<6>::type char_array_;
+ typedef mpl::int_<7>::type wchar_t_array_;
+ typedef mpl::int_<8>::type char_ptr_;
+ typedef mpl::int_<9>::type const_char_ptr_;
+ typedef mpl::int_<10>::type wchar_t_ptr_;
+ typedef mpl::int_<11>::type const_wchar_t_ptr_;
+ typedef mpl::int_<12>::type string_;
+
+ template< typename C >
+ struct range_helper
+ {
+ static C* c;
+ static C ptr;
+
+ BOOST_STATIC_CONSTANT( bool, is_pair_ = sizeof( boost::range_detail::is_pair_impl( c ) ) == sizeof( yes_type ) );
+ BOOST_STATIC_CONSTANT( bool, is_char_ptr_ = sizeof( boost::range_detail::is_char_ptr_impl( ptr ) ) == sizeof( yes_type ) );
+ BOOST_STATIC_CONSTANT( bool, is_const_char_ptr_ = sizeof( boost::range_detail::is_const_char_ptr_impl( ptr ) ) == sizeof( yes_type ) );
+ BOOST_STATIC_CONSTANT( bool, is_wchar_t_ptr_ = sizeof( boost::range_detail::is_wchar_t_ptr_impl( ptr ) ) == sizeof( yes_type ) );
+ BOOST_STATIC_CONSTANT( bool, is_const_wchar_t_ptr_ = sizeof( boost::range_detail::is_const_wchar_t_ptr_impl( ptr ) ) == sizeof( yes_type ) );
+ BOOST_STATIC_CONSTANT( bool, is_char_array_ = sizeof( boost::range_detail::is_char_array_impl( ptr ) ) == sizeof( yes_type ) );
+ BOOST_STATIC_CONSTANT( bool, is_wchar_t_array_ = sizeof( boost::range_detail::is_wchar_t_array_impl( ptr ) ) == sizeof( yes_type ) );
+ BOOST_STATIC_CONSTANT( bool, is_string_ = (boost::type_traits::ice_or<is_const_char_ptr_, is_const_wchar_t_ptr_>::value ));
+ BOOST_STATIC_CONSTANT( bool, is_array_ = boost::is_array<C>::value );
+
+ };
+
+ template< typename C >
+ class range
+ {
+ typedef BOOST_RANGE_DEDUCED_TYPENAME boost::mpl::if_c< ::boost::range_detail::range_helper<C>::is_pair_,
+ boost::range_detail::std_pair_,
+ void >::type pair_t;
+ typedef BOOST_RANGE_DEDUCED_TYPENAME boost::mpl::if_c< ::boost::range_detail::range_helper<C>::is_array_,
+ boost::range_detail::array_,
+ pair_t >::type array_t;
+ typedef BOOST_RANGE_DEDUCED_TYPENAME boost::mpl::if_c< ::boost::range_detail::range_helper<C>::is_string_,
+ boost::range_detail::string_,
+ array_t >::type string_t;
+ typedef BOOST_RANGE_DEDUCED_TYPENAME boost::mpl::if_c< ::boost::range_detail::range_helper<C>::is_const_char_ptr_,
+ boost::range_detail::const_char_ptr_,
+ string_t >::type const_char_ptr_t;
+ typedef BOOST_RANGE_DEDUCED_TYPENAME boost::mpl::if_c< ::boost::range_detail::range_helper<C>::is_char_ptr_,
+ boost::range_detail::char_ptr_,
+ const_char_ptr_t >::type char_ptr_t;
+ typedef BOOST_RANGE_DEDUCED_TYPENAME boost::mpl::if_c< ::boost::range_detail::range_helper<C>::is_const_wchar_t_ptr_,
+ boost::range_detail::const_wchar_t_ptr_,
+ char_ptr_t >::type const_wchar_ptr_t;
+ typedef BOOST_RANGE_DEDUCED_TYPENAME boost::mpl::if_c< ::boost::range_detail::range_helper<C>::is_wchar_t_ptr_,
+ boost::range_detail::wchar_t_ptr_,
+ const_wchar_ptr_t >::type wchar_ptr_t;
+ typedef BOOST_RANGE_DEDUCED_TYPENAME boost::mpl::if_c< ::boost::range_detail::range_helper<C>::is_wchar_t_array_,
+ boost::range_detail::wchar_t_array_,
+ wchar_ptr_t >::type wchar_array_t;
+ typedef BOOST_RANGE_DEDUCED_TYPENAME boost::mpl::if_c< ::boost::range_detail::range_helper<C>::is_char_array_,
+ boost::range_detail::char_array_,
+ wchar_array_t >::type char_array_t;
+ public:
+ typedef BOOST_RANGE_DEDUCED_TYPENAME boost::mpl::if_c< ::boost::is_void<char_array_t>::value,
+ boost::range_detail::std_container_,
+ char_array_t >::type type;
+ }; // class 'range'
+ }
+}
+
+#endif
diff --git a/boost/boost/range/detail/const_iterator.hpp b/boost/boost/range/detail/const_iterator.hpp
new file mode 100644
index 00000000000..3aef82a51df
--- /dev/null
+++ b/boost/boost/range/detail/const_iterator.hpp
@@ -0,0 +1,123 @@
+// Boost.Range library
+//
+// Copyright Thorsten Ottosen 2003-2004. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_DETAIL_CONST_ITERATOR_HPP
+#define BOOST_RANGE_DETAIL_CONST_ITERATOR_HPP
+
+#include <boost/range/detail/common.hpp>
+#include <boost/range/detail/remove_extent.hpp>
+
+//////////////////////////////////////////////////////////////////////////////
+// missing partial specialization workaround.
+//////////////////////////////////////////////////////////////////////////////
+
+namespace boost
+{
+ namespace range_detail
+ {
+ template< typename T >
+ struct range_const_iterator_;
+
+ template<>
+ struct range_const_iterator_<std_container_>
+ {
+ template< typename C >
+ struct pts
+ {
+ typedef BOOST_RANGE_DEDUCED_TYPENAME C::const_iterator type;
+ };
+ };
+
+ template<>
+ struct range_const_iterator_<std_pair_>
+ {
+ template< typename P >
+ struct pts
+ {
+ typedef BOOST_RANGE_DEDUCED_TYPENAME P::first_type type;
+ };
+ };
+
+
+ template<>
+ struct range_const_iterator_<array_>
+ {
+ template< typename T >
+ struct pts
+ {
+ typedef const BOOST_RANGE_DEDUCED_TYPENAME
+ remove_extent<T>::type* type;
+ };
+ };
+
+ template<>
+ struct range_const_iterator_<char_array_>
+ {
+ template< typename T >
+ struct pts
+ {
+ typedef const BOOST_RANGE_DEDUCED_TYPENAME
+ remove_extent<T>::type* type;
+ };
+ };
+
+ template<>
+ struct range_const_iterator_<char_ptr_>
+ {
+ template< typename S >
+ struct pts
+ {
+ typedef const char* type;
+ };
+ };
+
+ template<>
+ struct range_const_iterator_<const_char_ptr_>
+ {
+ template< typename S >
+ struct pts
+ {
+ typedef const char* type;
+ };
+ };
+
+ template<>
+ struct range_const_iterator_<wchar_t_ptr_>
+ {
+ template< typename S >
+ struct pts
+ {
+ typedef const wchar_t* type;
+ };
+ };
+
+ template<>
+ struct range_const_iterator_<const_wchar_t_ptr_>
+ {
+ template< typename S >
+ struct pts
+ {
+ typedef const wchar_t* type;
+ };
+ };
+
+ }
+
+ template< typename C >
+ class range_const_iterator
+ {
+ typedef BOOST_DEDUCED_TYPENAME range_detail::range<C>::type c_type;
+ public:
+ typedef BOOST_DEDUCED_TYPENAME range_detail::range_const_iterator_<c_type>::BOOST_NESTED_TEMPLATE pts<C>::type type;
+ };
+
+}
+
+#endif
diff --git a/boost/boost/range/detail/difference_type.hpp b/boost/boost/range/detail/difference_type.hpp
new file mode 100644
index 00000000000..c6415160f18
--- /dev/null
+++ b/boost/boost/range/detail/difference_type.hpp
@@ -0,0 +1,121 @@
+// Boost.Range library
+//
+// Copyright Thorsten Ottosen 2003-2004. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_DETAIL_DIFFERENCE_TYPE_HPP
+#define BOOST_RANGE_DETAIL_DIFFERENCE_TYPE_HPP
+
+#include <boost/range/detail/common.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+
+//////////////////////////////////////////////////////////////////////////////
+// missing partial specialization workaround.
+//////////////////////////////////////////////////////////////////////////////
+
+namespace boost
+{
+ namespace range_detail
+ {
+ template< typename T >
+ struct range_difference_type_;
+
+ template<>
+ struct range_difference_type_<std_container_>
+ {
+ template< typename C >
+ struct pts
+ {
+ typedef BOOST_DEDUCED_TYPENAME C::difference_type type;
+ };
+ };
+
+ template<>
+ struct range_difference_type_<std_pair_>
+ {
+ template< typename P >
+ struct pts
+ {
+ typedef BOOST_RANGE_DEDUCED_TYPENAME boost::iterator_difference< BOOST_DEDUCED_TYPENAME P::first_type>::type type;
+ };
+ };
+
+ template<>
+ struct range_difference_type_<array_>
+ {
+ template< typename A >
+ struct pts
+ {
+ typedef std::ptrdiff_t type;
+ };
+ };
+
+ template<>
+ struct range_difference_type_<char_array_>
+ {
+ template< typename A >
+ struct pts
+ {
+ typedef std::ptrdiff_t type;
+ };
+ };
+
+ template<>
+ struct range_difference_type_<char_ptr_>
+ {
+ template< typename S >
+ struct pts
+ {
+ typedef std::ptrdiff_t type;
+ };
+ };
+
+ template<>
+ struct range_difference_type_<const_char_ptr_>
+ {
+ template< typename S >
+ struct pts
+ {
+ typedef std::ptrdiff_t type;
+ };
+ };
+
+ template<>
+ struct range_difference_type_<wchar_t_ptr_>
+ {
+ template< typename S >
+ struct pts
+ {
+ typedef std::ptrdiff_t type;
+ };
+ };
+
+ template<>
+ struct range_difference_type_<const_wchar_t_ptr_>
+ {
+ template< typename S >
+ struct pts
+ {
+ typedef std::ptrdiff_t type;
+ };
+ };
+
+ }
+
+ template< typename C >
+ class range_difference
+ {
+ typedef BOOST_RANGE_DEDUCED_TYPENAME range_detail::range<C>::type c_type;
+ public:
+ typedef BOOST_RANGE_DEDUCED_TYPENAME range_detail::range_difference_type_<c_type>::BOOST_NESTED_TEMPLATE pts<C>::type type;
+ };
+
+}
+
+#endif
+
diff --git a/boost/boost/range/detail/empty.hpp b/boost/boost/range/detail/empty.hpp
new file mode 100644
index 00000000000..b098705d161
--- /dev/null
+++ b/boost/boost/range/detail/empty.hpp
@@ -0,0 +1,120 @@
+// Boost.Range library
+//
+// Copyright Thorsten Ottosen 2003-2004. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_DETAIL_EMPTY_HPP
+#define BOOST_RANGE_DETAIL_EMPTY_HPP
+
+#include <boost/range/detail/common.hpp>
+
+namespace boost
+{
+ namespace range_detail
+ {
+ template< typename T >
+ struct range_empty;
+
+ //////////////////////////////////////////////////////////////////////
+ // default
+ //////////////////////////////////////////////////////////////////////
+
+ template<>
+ struct range_empty<std_container_>
+ {
+ template< typename C >
+ static bool fun( C& c )
+ {
+ return c.empty();
+ };
+ };
+
+ //////////////////////////////////////////////////////////////////////
+ // pair
+ //////////////////////////////////////////////////////////////////////
+
+ template<>
+ struct range_empty<std_pair_>
+ {
+ template< typename P >
+ static bool fun( const P& p )
+ {
+ return p.first == p.second;
+ }
+ };
+
+ //////////////////////////////////////////////////////////////////////
+ // array
+ //////////////////////////////////////////////////////////////////////
+
+ template<>
+ struct range_empty<array_>
+ {
+ template< typename T, std::size_t sz >
+ static bool fun( T BOOST_ARRAY_REF[sz] )
+ {
+ if( boost_range_array == 0 )
+ return true;
+ return false;
+ }
+ };
+
+ //////////////////////////////////////////////////////////////////////
+ // string
+ //////////////////////////////////////////////////////////////////////
+
+ template<>
+ struct range_empty<char_ptr_>
+ {
+ static bool fun( const char* s )
+ {
+ return s == 0 || s[0] == 0;
+ }
+ };
+
+ template<>
+ struct range_empty<const_char_ptr_>
+ {
+ static bool fun( const char* s )
+ {
+ return s == 0 || s[0] == 0;
+ }
+ };
+
+ template<>
+ struct range_empty<wchar_t_ptr_>
+ {
+ static bool fun( const wchar_t* s )
+ {
+ return s == 0 || s[0] == 0;
+ }
+ };
+
+ template<>
+ struct range_empty<const_wchar_t_ptr_>
+ {
+ static bool fun( const wchar_t* s )
+ {
+ return s == 0 || s[0] == 0;
+ }
+ };
+
+ } // namespace 'range_detail'
+
+
+ template< typename C >
+ inline bool
+ empty( const C& c )
+ {
+ return range_detail::range_empty< BOOST_RANGE_DEDUCED_TYPENAME range_detail::range<C>::type >::fun( c );
+ }
+
+} // namespace 'boost'
+
+
+#endif
diff --git a/boost/boost/range/detail/end.hpp b/boost/boost/range/detail/end.hpp
new file mode 100644
index 00000000000..410ae6074e0
--- /dev/null
+++ b/boost/boost/range/detail/end.hpp
@@ -0,0 +1,161 @@
+// Boost.Range library
+//
+// Copyright Thorsten Ottosen 2003-2004. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_DETAIL_END_HPP
+#define BOOST_RANGE_DETAIL_END_HPP
+
+#include <boost/config.hpp> // BOOST_MSVC
+#include <boost/detail/workaround.hpp>
+
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+# include <boost/range/detail/vc6/end.hpp>
+#else
+# include <boost/range/detail/implementation_help.hpp>
+# include <boost/range/detail/implementation_help.hpp>
+# include <boost/range/result_iterator.hpp>
+# include <boost/range/detail/common.hpp>
+# if BOOST_WORKAROUND(BOOST_MSVC, < 1310)
+# include <boost/range/detail/remove_extent.hpp>
+# endif
+
+namespace boost
+{
+ namespace range_detail
+ {
+ template< typename T >
+ struct range_end;
+
+ //////////////////////////////////////////////////////////////////////
+ // default
+ //////////////////////////////////////////////////////////////////////
+
+ template<>
+ struct range_end<std_container_>
+ {
+ template< typename C >
+ static BOOST_RANGE_DEDUCED_TYPENAME range_result_iterator<C>::type
+ fun( C& c )
+ {
+ return c.end();
+ };
+ };
+
+ //////////////////////////////////////////////////////////////////////
+ // pair
+ //////////////////////////////////////////////////////////////////////
+
+ template<>
+ struct range_end<std_pair_>
+ {
+ template< typename P >
+ static BOOST_RANGE_DEDUCED_TYPENAME range_result_iterator<P>::type
+ fun( const P& p )
+ {
+ return p.second;
+ }
+ };
+
+ //////////////////////////////////////////////////////////////////////
+ // array
+ //////////////////////////////////////////////////////////////////////
+
+ template<>
+ struct range_end<array_>
+ {
+ #if !BOOST_WORKAROUND(BOOST_MSVC, < 1310)
+ template< typename T, std::size_t sz >
+ static T* fun( T BOOST_RANGE_ARRAY_REF()[sz] )
+ {
+ return boost::range_detail::array_end( boost_range_array );
+ }
+ #else
+ template<typename T>
+ static BOOST_RANGE_DEDUCED_TYPENAME remove_extent<T>::type* fun(T& t)
+ {
+ return t + remove_extent<T>::size;
+ }
+ #endif
+ };
+
+
+ template<>
+ struct range_end<char_array_>
+ {
+ template< typename T, std::size_t sz >
+ static T* fun( T BOOST_RANGE_ARRAY_REF()[sz] )
+ {
+ return boost::range_detail::array_end( boost_range_array );
+ }
+ };
+
+ template<>
+ struct range_end<wchar_t_array_>
+ {
+ template< typename T, std::size_t sz >
+ static T* fun( T BOOST_RANGE_ARRAY_REF()[sz] )
+ {
+ return boost::range_detail::array_end( boost_range_array );
+ }
+ };
+
+ //////////////////////////////////////////////////////////////////////
+ // string
+ //////////////////////////////////////////////////////////////////////
+
+ template<>
+ struct range_end<char_ptr_>
+ {
+ static char* fun( char* s )
+ {
+ return boost::range_detail::str_end( s );
+ }
+ };
+
+ template<>
+ struct range_end<const_char_ptr_>
+ {
+ static const char* fun( const char* s )
+ {
+ return boost::range_detail::str_end( s );
+ }
+ };
+
+ template<>
+ struct range_end<wchar_t_ptr_>
+ {
+ static wchar_t* fun( wchar_t* s )
+ {
+ return boost::range_detail::str_end( s );
+ }
+ };
+
+
+ template<>
+ struct range_end<const_wchar_t_ptr_>
+ {
+ static const wchar_t* fun( const wchar_t* s )
+ {
+ return boost::range_detail::str_end( s );
+ }
+ };
+
+ } // namespace 'range_detail'
+
+ template< typename C >
+ inline BOOST_RANGE_DEDUCED_TYPENAME range_result_iterator<C>::type
+ end( C& c )
+ {
+ return range_detail::range_end< BOOST_RANGE_DEDUCED_TYPENAME range_detail::range<C>::type >::fun( c );
+ }
+
+} // namespace 'boost'
+
+# endif // VC6
+#endif
diff --git a/boost/boost/range/detail/implementation_help.hpp b/boost/boost/range/detail/implementation_help.hpp
new file mode 100644
index 00000000000..11c6612fc17
--- /dev/null
+++ b/boost/boost/range/detail/implementation_help.hpp
@@ -0,0 +1,162 @@
+// Boost.Range library
+//
+// Copyright Thorsten Ottosen 2003-2004. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_DETAIL_IMPLEMENTATION_HELP_HPP
+#define BOOST_RANGE_DETAIL_IMPLEMENTATION_HELP_HPP
+
+#include <boost/range/config.hpp>
+#include <boost/range/detail/common.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <cstddef>
+#include <string.h>
+
+#ifndef BOOST_NO_CWCHAR
+#include <wchar.h>
+#endif
+
+namespace boost
+{
+ namespace range_detail
+ {
+
+ /////////////////////////////////////////////////////////////////////
+ // end() help
+ /////////////////////////////////////////////////////////////////////
+
+ inline const char* str_end( const char* s, const char* )
+ {
+ return s + strlen( s );
+ }
+
+#ifndef BOOST_NO_CWCHAR
+ inline const wchar_t* str_end( const wchar_t* s, const wchar_t* )
+ {
+ return s + wcslen( s );
+ }
+#else
+ inline const wchar_t* str_end( const wchar_t* s, const wchar_t* )
+ {
+ if( s == 0 || s[0] == 0 )
+ return s;
+ while( *++s != 0 )
+ ;
+ return s;
+ }
+#endif
+
+ template< class Char >
+ inline Char* str_end( Char* s )
+ {
+ return const_cast<Char*>( str_end( s, s ) );
+ }
+
+ template< class T, std::size_t sz >
+ inline T* array_end( T BOOST_RANGE_ARRAY_REF()[sz], int )
+ {
+ return boost_range_array + sz;
+ }
+
+ template< class T, std::size_t sz >
+ inline const T* array_end( const T BOOST_RANGE_ARRAY_REF()[sz], int )
+ {
+ return boost_range_array + sz;
+ }
+
+ template< class T, std::size_t sz >
+ inline T* array_end( T BOOST_RANGE_ARRAY_REF()[sz], char_or_wchar_t_array_tag )
+ {
+ return boost_range_array + sz - 1;
+ }
+
+ template< class T, std::size_t sz >
+ inline const T* array_end( const T BOOST_RANGE_ARRAY_REF()[sz], char_or_wchar_t_array_tag )
+ {
+ return boost_range_array + sz - 1;
+ }
+
+ template< class T, std::size_t sz >
+ inline T* array_end( T BOOST_RANGE_ARRAY_REF()[sz] )
+ {
+ typedef BOOST_RANGE_DEDUCED_TYPENAME boost::mpl::if_c< is_same<char,T>::value || is_same<wchar_t,T>::value,
+ char_or_wchar_t_array_tag,
+ int >::type tag;
+
+ return array_end<T,sz>( boost_range_array, tag() );
+ }
+
+ template< class T, std::size_t sz >
+ inline const T* array_end( const T BOOST_RANGE_ARRAY_REF()[sz] )
+ {
+ typedef BOOST_RANGE_DEDUCED_TYPENAME boost::mpl::if_c< is_same<char,T>::value || is_same<wchar_t,T>::value,
+ char_or_wchar_t_array_tag,
+ int >::type tag;
+
+ return array_end<T,sz>( boost_range_array, tag() );
+ }
+
+ /////////////////////////////////////////////////////////////////////
+ // size() help
+ /////////////////////////////////////////////////////////////////////
+
+ template< class Char >
+ inline std::size_t str_size( const Char* const& s )
+ {
+ return str_end( s ) - s;
+ }
+
+ template< class T, std::size_t sz >
+ inline std::size_t array_size( T BOOST_RANGE_ARRAY_REF()[sz], int )
+ {
+ return sz;
+ }
+
+ template< class T, std::size_t sz >
+ inline std::size_t array_size( const T BOOST_RANGE_ARRAY_REF()[sz], int )
+ {
+ return sz;
+ }
+
+ template< class T, std::size_t sz >
+ inline std::size_t array_size( T BOOST_RANGE_ARRAY_REF()[sz], char_or_wchar_t_array_tag )
+ {
+ return sz - 1;
+ }
+
+ template< class T, std::size_t sz >
+ inline std::size_t array_size( const T BOOST_RANGE_ARRAY_REF()[sz], char_or_wchar_t_array_tag )
+ {
+ return sz - 1;
+ }
+
+ template< class T, std::size_t sz >
+ inline std::size_t array_size( T BOOST_RANGE_ARRAY_REF()[sz] )
+ {
+ typedef BOOST_RANGE_DEDUCED_TYPENAME boost::mpl::if_c< is_same<const char,T>::value || is_same<const wchar_t,T>::value ||
+ is_same<char,T>::value || is_same<wchar_t,T>::value,
+ char_or_wchar_t_array_tag,
+ int >::type tag;
+ return array_size<T,sz>( boost_range_array, tag() );
+ }
+
+ template< class T, std::size_t sz >
+ inline std::size_t array_size( const T BOOST_RANGE_ARRAY_REF()[sz] )
+ {
+ typedef BOOST_RANGE_DEDUCED_TYPENAME boost::mpl::if_c< is_same<char,T>::value || is_same<wchar_t,T>::value,
+ char_or_wchar_t_array_tag,
+ int >::type tag;
+ return array_size<T,sz>( boost_range_array, tag() );
+ }
+
+ } // namespace 'range_detail'
+
+} // namespace 'boost'
+
+
+#endif
diff --git a/boost/boost/range/detail/iterator.hpp b/boost/boost/range/detail/iterator.hpp
new file mode 100644
index 00000000000..b9098e652ea
--- /dev/null
+++ b/boost/boost/range/detail/iterator.hpp
@@ -0,0 +1,128 @@
+// Boost.Range library
+//
+// Copyright Thorsten Ottosen 2003-2004. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_DETAIL_ITERATOR_HPP
+#define BOOST_RANGE_DETAIL_ITERATOR_HPP
+
+#include <boost/range/detail/common.hpp>
+#include <boost/range/detail/remove_extent.hpp>
+
+#include <boost/static_assert.hpp>
+
+//////////////////////////////////////////////////////////////////////////////
+// missing partial specialization workaround.
+//////////////////////////////////////////////////////////////////////////////
+
+namespace boost
+{
+ namespace range_detail
+ {
+ template< typename T >
+ struct range_iterator_ {
+ template< typename C >
+ struct pts
+ {
+ typedef int type;
+ };
+ };
+
+ template<>
+ struct range_iterator_<std_container_>
+ {
+ template< typename C >
+ struct pts
+ {
+ typedef BOOST_RANGE_DEDUCED_TYPENAME C::iterator type;
+ };
+ };
+
+ template<>
+ struct range_iterator_<std_pair_>
+ {
+ template< typename P >
+ struct pts
+ {
+ typedef BOOST_RANGE_DEDUCED_TYPENAME P::first_type type;
+ };
+ };
+
+ template<>
+ struct range_iterator_<array_>
+ {
+ template< typename T >
+ struct pts
+ {
+ typedef BOOST_RANGE_DEDUCED_TYPENAME
+ remove_extent<T>::type* type;
+ };
+ };
+
+ template<>
+ struct range_iterator_<char_array_>
+ {
+ template< typename T >
+ struct pts
+ {
+ typedef BOOST_RANGE_DEDUCED_TYPENAME
+ remove_extent<T>::type* type;
+ };
+ };
+
+ template<>
+ struct range_iterator_<char_ptr_>
+ {
+ template< typename S >
+ struct pts
+ {
+ typedef char* type;
+ };
+ };
+
+ template<>
+ struct range_iterator_<const_char_ptr_>
+ {
+ template< typename S >
+ struct pts
+ {
+ typedef const char* type;
+ };
+ };
+
+ template<>
+ struct range_iterator_<wchar_t_ptr_>
+ {
+ template< typename S >
+ struct pts
+ {
+ typedef wchar_t* type;
+ };
+ };
+
+ template<>
+ struct range_iterator_<const_wchar_t_ptr_>
+ {
+ template< typename S >
+ struct pts
+ {
+ typedef const wchar_t* type;
+ };
+ };
+ }
+
+ template< typename C >
+ class range_iterator
+ {
+ typedef BOOST_RANGE_DEDUCED_TYPENAME range_detail::range<C>::type c_type;
+ public:
+ typedef typename range_detail::range_iterator_<c_type>::BOOST_NESTED_TEMPLATE pts<C>::type type;
+ };
+}
+
+#endif
diff --git a/boost/boost/range/detail/mfc/carray.hpp b/boost/boost/range/detail/mfc/carray.hpp
new file mode 100644
index 00000000000..71ab5cb5dbe
--- /dev/null
+++ b/boost/boost/range/detail/mfc/carray.hpp
@@ -0,0 +1,97 @@
+// Boost.Range library
+//
+// Copyright Thorsten Ottosen 2003-2004. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#if !defined( BOOST_RANGE_DETAIL_MFC_CARRAY_HPP ) && defined( BOOST_RANGE_ENABLE_MCF_CARRAY )
+#define BOOST_RANGE_DETAIL_MFC_CARRAY_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif
+
+#include <afxtempl.h> // for CArray
+#include <boost/range/config.hpp>
+#include <boost/range/metafunctions.hpp>
+
+namespace boost
+{
+ template< class T, class U >
+ struct range_iterator< CArray<T,U> >
+ {
+ typedef T* type;
+ };
+
+ //
+ // Why is this needed?!?
+ //
+ template< class T, class U >
+ struct range_iterator< const CArray<T,U> >
+ {
+ typedef T* type;
+ };
+
+ template< class T, class U >
+ struct range_const_iterator< CArray<T,U> >
+ {
+ typedef const T* type;
+ };
+
+ template< class T, class U >
+ struct range_difference< CArray<T,U> >
+ {
+ typedef std::ptrdiff_t type;
+ };
+
+ template< class T, class U >
+ struct range_size< CArray<T,U> >
+ {
+ typedef int type;
+ };
+
+ template< class T, class U >
+ struct range_value< CArray<T,U> >
+ {
+ typedef T type;
+ };
+
+ template< class T, class U >
+ T* boost_range_begin( CArray<T,U>& r )
+ {
+ return r.GetData();
+ }
+
+ template< class T, class U >
+ const T* boost_range_begin( const CArray<T,U>& r )
+ {
+ return r.GetData();
+ }
+
+ template< class T, class U >
+ int boost_range_size( const CArray<T,U>& r )
+ {
+ return r.GetSize();
+ }
+
+ template< class T, class U >
+ T* boost_range_end( CArray<T,U>& r )
+ {
+ return boost_range_begin( r ) + boost_range_size( r );
+ }
+
+ template< class T, class U >
+ const T* boost_range_end( const CArray<T,U>& r )
+ {
+ return boost_range_begin( r ) + boost_range_size( r );
+ }
+
+ // default 'empty()' ok
+
+} // namespace 'boost'
+
+#endif
diff --git a/boost/boost/range/detail/mfc/cstring.hpp b/boost/boost/range/detail/mfc/cstring.hpp
new file mode 100644
index 00000000000..ccb07451976
--- /dev/null
+++ b/boost/boost/range/detail/mfc/cstring.hpp
@@ -0,0 +1,92 @@
+// Boost.Range library
+//
+// Copyright Thorsten Ottosen 2003-2004. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#if !defined(BOOST_RANGE_DETAIL_MFC_CSTRING_HPP) && defined(BOOST_RANGE_ENABLE_MFC)
+#define BOOST_RANGE_DETAIL_MFC_CSTRING_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif
+
+#include <afx.h> // for CString
+#include <boost/range/config.hpp>
+#include <boost/range/metafunctions.hpp>
+
+namespace boost
+{
+ template<>
+ struct range_iterator< CString >
+ {
+ typedef TCHAR* type;
+ };
+
+ //
+ // Why is this needed?!?
+ //
+ template<>
+ struct range_iterator< const CString >
+ {
+ typedef TCHAR* type;
+ };
+
+ template<>
+ struct range_const_iterator< CString >
+ {
+ typedef const TCHAR* type;
+ };
+
+ template<>
+ struct range_difference< CString >
+ {
+ typedef std::ptrdiff_t type;
+ };
+
+ template<>
+ struct range_size< CString >
+ {
+ typedef int type;
+ };
+
+ template<>
+ struct range_value< CString >
+ {
+ typedef TCHAR type;
+ };
+
+ TCHAR* boost_range_begin( CString& r )
+ {
+ return r.GetBuffer(0);
+ }
+
+ const TCHAR* boost_range_begin( const CString& r )
+ {
+ return (LPCTSTR)r;
+ }
+
+ int boost_range_size( const CString& r )
+ {
+ return r.GetLength();
+ }
+
+ TCHAR* boost_range_end( CString& r )
+ {
+ return boost_range_begin( r ) + boost_range_size( r );
+ }
+
+ const TCHAR* range_adl_end( const CString& r )
+ {
+ return boost_range_begin( r ) + boost_range_size( r );
+ }
+
+ // default 'empty()' ok
+
+} // namespace 'boost'
+
+#endif
diff --git a/boost/boost/range/detail/remove_extent.hpp b/boost/boost/range/detail/remove_extent.hpp
new file mode 100644
index 00000000000..68e45972456
--- /dev/null
+++ b/boost/boost/range/detail/remove_extent.hpp
@@ -0,0 +1,157 @@
+// Boost.Range library
+//
+// Copyright Jonathan Turkanis 2005. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+
+#ifndef BOOST_RANGE_DETAIL_REMOVE_BOUNDS_HPP
+#define BOOST_RANGE_DETAIL_REMOVE_BOUNDS_HPP
+
+#include <boost/config.hpp> // MSVC, NO_INTRINSIC_WCHAR_T, put size_t in std.
+#include <cstddef>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost
+{
+ namespace range_detail
+ {
+
+ template< typename Case1 = mpl::true_,
+ typename Type1 = mpl::void_,
+ typename Case2 = mpl::true_,
+ typename Type2 = mpl::void_,
+ typename Case3 = mpl::true_,
+ typename Type3 = mpl::void_,
+ typename Case4 = mpl::true_,
+ typename Type4 = mpl::void_,
+ typename Case5 = mpl::true_,
+ typename Type5 = mpl::void_,
+ typename Case6 = mpl::true_,
+ typename Type6 = mpl::void_,
+ typename Case7 = mpl::true_,
+ typename Type7 = mpl::void_,
+ typename Case8 = mpl::true_,
+ typename Type8 = mpl::void_,
+ typename Case9 = mpl::true_,
+ typename Type9 = mpl::void_,
+ typename Case10 = mpl::true_,
+ typename Type10 = mpl::void_,
+ typename Case11 = mpl::true_,
+ typename Type11 = mpl::void_,
+ typename Case12 = mpl::true_,
+ typename Type12 = mpl::void_,
+ typename Case13 = mpl::true_,
+ typename Type13 = mpl::void_,
+ typename Case14 = mpl::true_,
+ typename Type14 = mpl::void_,
+ typename Case15 = mpl::true_,
+ typename Type15 = mpl::void_,
+ typename Case16 = mpl::true_,
+ typename Type16 = mpl::void_,
+ typename Case17 = mpl::true_,
+ typename Type17 = mpl::void_,
+ typename Case18 = mpl::true_,
+ typename Type18 = mpl::void_,
+ typename Case19 = mpl::true_,
+ typename Type19 = mpl::void_,
+ typename Case20 = mpl::true_,
+ typename Type20 = mpl::void_>
+ struct select {
+ typedef typename
+ mpl::eval_if<
+ Case1, mpl::identity<Type1>, mpl::eval_if<
+ Case2, mpl::identity<Type2>, mpl::eval_if<
+ Case3, mpl::identity<Type3>, mpl::eval_if<
+ Case4, mpl::identity<Type4>, mpl::eval_if<
+ Case5, mpl::identity<Type5>, mpl::eval_if<
+ Case6, mpl::identity<Type6>, mpl::eval_if<
+ Case7, mpl::identity<Type7>, mpl::eval_if<
+ Case8, mpl::identity<Type8>, mpl::eval_if<
+ Case9, mpl::identity<Type9>, mpl::if_<
+ Case10, Type10, mpl::void_ > > > > > > > > >
+ >::type result1;
+ typedef typename
+ mpl::eval_if<
+ Case11, mpl::identity<Type11>, mpl::eval_if<
+ Case12, mpl::identity<Type12>, mpl::eval_if<
+ Case13, mpl::identity<Type13>, mpl::eval_if<
+ Case14, mpl::identity<Type14>, mpl::eval_if<
+ Case15, mpl::identity<Type15>, mpl::eval_if<
+ Case16, mpl::identity<Type16>, mpl::eval_if<
+ Case17, mpl::identity<Type17>, mpl::eval_if<
+ Case18, mpl::identity<Type18>, mpl::eval_if<
+ Case19, mpl::identity<Type19>, mpl::if_<
+ Case20, Type20, mpl::void_ > > > > > > > > >
+ > result2;
+ typedef typename
+ mpl::eval_if<
+ is_same<result1, mpl::void_>,
+ result2,
+ mpl::identity<result1>
+ >::type type;
+ };
+
+ template<typename T>
+ struct remove_extent {
+ static T* ar;
+ BOOST_STATIC_CONSTANT(std::size_t, size = sizeof(*ar) / sizeof((*ar)[0]));
+
+ typedef typename
+ select<
+ is_same<T, bool[size]>, bool,
+ is_same<T, char[size]>, char,
+ is_same<T, signed char[size]>, signed char,
+ is_same<T, unsigned char[size]>, unsigned char,
+ #ifndef BOOST_NO_INTRINSIC_WCHAR_T
+ is_same<T, wchar_t[size]>, wchar_t,
+ #endif
+ is_same<T, short[size]>, short,
+ is_same<T, unsigned short[size]>, unsigned short,
+ is_same<T, int[size]>, int,
+ is_same<T, unsigned int[size]>, unsigned int,
+ is_same<T, long[size]>, long,
+ is_same<T, unsigned long[size]>, unsigned long,
+ is_same<T, float[size]>, float,
+ is_same<T, double[size]>, double,
+ is_same<T, long double[size]>, long double
+ >::type result1;
+ typedef typename
+ select<
+ is_same<T, const bool[size]>, const bool,
+ is_same<T, const char[size]>, const char,
+ is_same<T, const signed char[size]>, const signed char,
+ is_same<T, const unsigned char[size]>, const unsigned char,
+ #ifndef BOOST_NO_INTRINSIC_WCHAR_T
+ is_same<T, const wchar_t[size]>, const wchar_t,
+ #endif
+ is_same<T, const short[size]>, const short,
+ is_same<T, const unsigned short[size]>, const unsigned short,
+ is_same<T, const int[size]>, const int,
+ is_same<T, const unsigned int[size]>, const unsigned int,
+ is_same<T, const long[size]>, const long,
+ is_same<T, const unsigned long[size]>, const unsigned long,
+ is_same<T, const float[size]>, const float,
+ is_same<T, const double[size]>, const double,
+ is_same<T, const long double[size]>, const long double
+ > result2;
+ typedef typename
+ mpl::eval_if<
+ is_same<result1, mpl::void_>,
+ result2,
+ mpl::identity<result1>
+ >::type type;
+ };
+
+ } // namespace 'range_detail'
+
+} // namespace 'boost'
+
+
+#endif
diff --git a/boost/boost/range/detail/sfinae.hpp b/boost/boost/range/detail/sfinae.hpp
new file mode 100644
index 00000000000..5b2c61e71ee
--- /dev/null
+++ b/boost/boost/range/detail/sfinae.hpp
@@ -0,0 +1,77 @@
+// Boost.Range library
+//
+// Copyright Thorsten Ottosen 2003-2004. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_DETAIL_SFINAE_HPP
+#define BOOST_RANGE_DETAIL_SFINAE_HPP
+
+#include <boost/range/config.hpp>
+#include <boost/type_traits/is_array.hpp>
+#include <boost/type_traits/detail/yes_no_type.hpp>
+#include <utility>
+
+
+namespace boost
+{
+ namespace range_detail
+ {
+ using type_traits::yes_type;
+ using type_traits::no_type;
+
+ //////////////////////////////////////////////////////////////////////
+ // string
+ //////////////////////////////////////////////////////////////////////
+
+ yes_type is_string_impl( const char* const );
+ yes_type is_string_impl( const wchar_t* const );
+ no_type is_string_impl( ... );
+
+ template< std::size_t sz >
+ yes_type is_char_array_impl( char BOOST_RANGE_ARRAY_REF()[sz] );
+ template< std::size_t sz >
+ yes_type is_char_array_impl( const char BOOST_RANGE_ARRAY_REF()[sz] );
+ no_type is_char_array_impl( ... );
+
+ template< std::size_t sz >
+ yes_type is_wchar_t_array_impl( wchar_t BOOST_RANGE_ARRAY_REF()[sz] );
+ template< std::size_t sz >
+ yes_type is_wchar_t_array_impl( const wchar_t BOOST_RANGE_ARRAY_REF()[sz] );
+ no_type is_wchar_t_array_impl( ... );
+
+ yes_type is_char_ptr_impl( char* const );
+ no_type is_char_ptr_impl( ... );
+
+ yes_type is_const_char_ptr_impl( const char* const );
+ no_type is_const_char_ptr_impl( ... );
+
+ yes_type is_wchar_t_ptr_impl( wchar_t* const );
+ no_type is_wchar_t_ptr_impl( ... );
+
+ yes_type is_const_wchar_t_ptr_impl( const wchar_t* const );
+ no_type is_const_wchar_t_ptr_impl( ... );
+
+ //////////////////////////////////////////////////////////////////////
+ // pair
+ //////////////////////////////////////////////////////////////////////
+
+ template< typename Iterator >
+ yes_type is_pair_impl( const std::pair<Iterator,Iterator>* );
+ no_type is_pair_impl( ... );
+
+ //////////////////////////////////////////////////////////////////////
+ // tags
+ //////////////////////////////////////////////////////////////////////
+
+ struct char_or_wchar_t_array_tag {};
+
+ } // namespace 'range_detail'
+
+} // namespace 'boost'
+
+#endif
diff --git a/boost/boost/range/detail/size.hpp b/boost/boost/range/detail/size.hpp
new file mode 100644
index 00000000000..fe52ba0d64d
--- /dev/null
+++ b/boost/boost/range/detail/size.hpp
@@ -0,0 +1,159 @@
+// Boost.Range library
+//
+// Copyright Thorsten Ottosen 2003-2004. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+
+#ifndef BOOST_RANGE_DETAIL_SIZE_HPP
+#define BOOST_RANGE_DETAIL_SIZE_HPP
+
+#include <boost/config.hpp> // BOOST_MSVC
+#include <boost/detail/workaround.hpp>
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+# include <boost/range/detail/vc6/size.hpp>
+#else
+# include <boost/range/detail/implementation_help.hpp>
+# include <boost/range/detail/size_type.hpp>
+# include <boost/range/detail/common.hpp>
+# if BOOST_WORKAROUND(BOOST_MSVC, == 1300)
+# include <boost/range/detail/remove_extent.hpp>
+# endif
+# include <iterator>
+
+namespace boost
+{
+ namespace range_detail
+ {
+ template< typename T >
+ struct range_size_;
+
+ //////////////////////////////////////////////////////////////////////
+ // default
+ //////////////////////////////////////////////////////////////////////
+
+ template<>
+ struct range_size_<std_container_>
+ {
+ template< typename C >
+ static BOOST_RANGE_DEDUCED_TYPENAME C::size_type fun( const C& c )
+ {
+ return c.size();
+ };
+ };
+
+ //////////////////////////////////////////////////////////////////////
+ // pair
+ //////////////////////////////////////////////////////////////////////
+
+ template<>
+ struct range_size_<std_pair_>
+ {
+ template< typename P >
+ static BOOST_RANGE_DEDUCED_TYPENAME range_size<P>::type
+ fun( const P& p )
+ {
+ return std::distance( p.first, p.second );
+ }
+ };
+
+ //////////////////////////////////////////////////////////////////////
+ // array
+ //////////////////////////////////////////////////////////////////////
+
+ template<>
+ struct range_size_<array_>
+ {
+ #if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+ template< typename T, std::size_t sz >
+ static std::size_t fun( T BOOST_RANGE_ARRAY_REF()[sz] )
+ {
+ return sz;
+ }
+ #else
+ template<typename T>
+ static std::size_t fun(T& t)
+ {
+ return remove_extent<T>::size;
+ }
+ #endif
+ };
+
+ template<>
+ struct range_size_<char_array_>
+ {
+ template< typename T, std::size_t sz >
+ static std::size_t fun( T BOOST_RANGE_ARRAY_REF()[sz] )
+ {
+ return boost::range_detail::array_size( boost_range_array );
+ }
+ };
+
+ template<>
+ struct range_size_<wchar_t_array_>
+ {
+ template< typename T, std::size_t sz >
+ static std::size_t fun( T BOOST_RANGE_ARRAY_REF()[sz] )
+ {
+ return boost::range_detail::array_size( boost_range_array );
+ }
+ };
+
+ //////////////////////////////////////////////////////////////////////
+ // string
+ //////////////////////////////////////////////////////////////////////
+
+ template<>
+ struct range_size_<char_ptr_>
+ {
+ static std::size_t fun( const char* s )
+ {
+ return boost::range_detail::str_size( s );
+ }
+ };
+
+ template<>
+ struct range_size_<const_char_ptr_>
+ {
+ static std::size_t fun( const char* s )
+ {
+ return boost::range_detail::str_size( s );
+ }
+ };
+
+ template<>
+ struct range_size_<wchar_t_ptr_>
+ {
+ static std::size_t fun( const wchar_t* s )
+ {
+ return boost::range_detail::str_size( s );
+ }
+ };
+
+ template<>
+ struct range_size_<const_wchar_t_ptr_>
+ {
+ static std::size_t fun( const wchar_t* s )
+ {
+ return boost::range_detail::str_size( s );
+ }
+ };
+
+ } // namespace 'range_detail'
+
+
+ template< typename C >
+ BOOST_RANGE_DEDUCED_TYPENAME range_size<C>::type
+ size( const C& c )
+ {
+ return range_detail::range_size_< BOOST_RANGE_DEDUCED_TYPENAME range_detail::range<C>::type >::fun( c );
+ }
+
+} // namespace 'boost'
+
+# endif
+#endif
diff --git a/boost/boost/range/detail/size_type.hpp b/boost/boost/range/detail/size_type.hpp
new file mode 100644
index 00000000000..d4f07040649
--- /dev/null
+++ b/boost/boost/range/detail/size_type.hpp
@@ -0,0 +1,118 @@
+// Boost.Range library
+//
+// Copyright Thorsten Ottosen 2003-2004. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_DETAIL_SIZE_TYPE_HPP
+#define BOOST_RANGE_DETAIL_SIZE_TYPE_HPP
+
+#include <boost/range/detail/common.hpp>
+
+//////////////////////////////////////////////////////////////////////////////
+// missing partial specialization workaround.
+//////////////////////////////////////////////////////////////////////////////
+
+namespace boost
+{
+ namespace range_detail
+ {
+ template< typename T >
+ struct range_size_type_;
+
+ template<>
+ struct range_size_type_<std_container_>
+ {
+ template< typename C >
+ struct pts
+ {
+ typedef BOOST_RANGE_DEDUCED_TYPENAME C::size_type type;
+ };
+ };
+
+ template<>
+ struct range_size_type_<std_pair_>
+ {
+ template< typename P >
+ struct pts
+ {
+ typedef std::size_t type;
+ };
+ };
+
+ template<>
+ struct range_size_type_<array_>
+ {
+ template< typename A >
+ struct pts
+ {
+ typedef std::size_t type;
+ };
+ };
+
+ template<>
+ struct range_size_type_<char_array_>
+ {
+ template< typename A >
+ struct pts
+ {
+ typedef std::size_t type;
+ };
+ };
+
+ template<>
+ struct range_size_type_<char_ptr_>
+ {
+ template< typename S >
+ struct pts
+ {
+ typedef std::size_t type;
+ };
+ };
+
+ template<>
+ struct range_size_type_<const_char_ptr_>
+ {
+ template< typename S >
+ struct pts
+ {
+ typedef std::size_t type;
+ };
+ };
+
+ template<>
+ struct range_size_type_<wchar_t_ptr_>
+ {
+ template< typename S >
+ struct pts
+ {
+ typedef std::size_t type;
+ };
+ };
+
+ template<>
+ struct range_size_type_<const_wchar_t_ptr_>
+ {
+ template< typename S >
+ struct pts
+ {
+ typedef std::size_t type;
+ };
+ };
+ }
+
+ template< typename C >
+ class range_size
+ {
+ typedef typename range_detail::range<C>::type c_type;
+ public:
+ typedef typename range_detail::range_size_type_<c_type>::BOOST_NESTED_TEMPLATE pts<C>::type type;
+ };
+}
+
+#endif
+
diff --git a/boost/boost/range/detail/sizer.hpp b/boost/boost/range/detail/sizer.hpp
new file mode 100644
index 00000000000..5d754375ebd
--- /dev/null
+++ b/boost/boost/range/detail/sizer.hpp
@@ -0,0 +1,37 @@
+// Boost.Range library
+//
+// Copyright Thorsten Ottosen 2003-2004. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_DETAIL_SIZER_HPP
+#define BOOST_RANGE_DETAIL_SIZER_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/range/config.hpp>
+#include <cstddef>
+
+namespace boost
+{
+ //////////////////////////////////////////////////////////////////////
+ // constant array size
+ //////////////////////////////////////////////////////////////////////
+
+ template< typename T, std::size_t sz >
+ char&
+ sizer( const T BOOST_RANGE_ARRAY_REF()[sz] )[sz];
+
+ template< typename T, std::size_t sz >
+ char&
+ sizer( T BOOST_RANGE_ARRAY_REF()[sz] )[sz];
+
+} // namespace 'boost'
+
+#endif
diff --git a/boost/boost/range/detail/value_type.hpp b/boost/boost/range/detail/value_type.hpp
new file mode 100644
index 00000000000..c3a46930872
--- /dev/null
+++ b/boost/boost/range/detail/value_type.hpp
@@ -0,0 +1,122 @@
+// Boost.Range library
+//
+// Copyright Thorsten Ottosen 2003-2004. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_DETAIL_VALUE_TYPE_HPP
+#define BOOST_RANGE_DETAIL_VALUE_TYPE_HPP
+
+#include <boost/range/detail/common.hpp>
+#include <boost/range/detail/remove_extent.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+
+//////////////////////////////////////////////////////////////////////////////
+// missing partial specialization workaround.
+//////////////////////////////////////////////////////////////////////////////
+
+namespace boost
+{
+ namespace range_detail
+ {
+ template< typename T >
+ struct range_value_type_;
+
+ template<>
+ struct range_value_type_<std_container_>
+ {
+ template< typename C >
+ struct pts
+ {
+ typedef BOOST_RANGE_DEDUCED_TYPENAME C::value_type type;
+ };
+ };
+
+ template<>
+ struct range_value_type_<std_pair_>
+ {
+ template< typename P >
+ struct pts
+ {
+ typedef BOOST_RANGE_DEDUCED_TYPENAME boost::iterator_value< BOOST_RANGE_DEDUCED_TYPENAME P::first_type >::type type;
+ };
+ };
+
+ template<>
+ struct range_value_type_<array_>
+ {
+ template< typename T >
+ struct pts
+ {
+ typedef BOOST_DEDUCED_TYPENAME remove_extent<T>::type type;
+ };
+ };
+
+ template<>
+ struct range_value_type_<char_array_>
+ {
+ template< typename T >
+ struct pts
+ {
+ typedef char type;
+ };
+ };
+
+ template<>
+ struct range_value_type_<char_ptr_>
+ {
+ template< typename S >
+ struct pts
+ {
+ typedef char type;
+ };
+ };
+
+ template<>
+ struct range_value_type_<const_char_ptr_>
+ {
+ template< typename S >
+ struct pts
+ {
+ typedef const char type;
+ };
+ };
+
+ template<>
+ struct range_value_type_<wchar_t_ptr_>
+ {
+ template< typename S >
+ struct pts
+ {
+ typedef wchar_t type;
+ };
+ };
+
+ template<>
+ struct range_value_type_<const_wchar_t_ptr_>
+ {
+ template< typename S >
+ struct pts
+ {
+ typedef const wchar_t type;
+ };
+ };
+
+ }
+
+ template< typename C >
+ class range_value
+ {
+ typedef BOOST_DEDUCED_TYPENAME range_detail::range<C>::type c_type;
+ public:
+ typedef BOOST_DEDUCED_TYPENAME range_detail::range_value_type_<c_type>::BOOST_NESTED_TEMPLATE pts<C>::type type;
+ };
+
+}
+
+#endif
+
diff --git a/boost/boost/range/detail/vc6/end.hpp b/boost/boost/range/detail/vc6/end.hpp
new file mode 100644
index 00000000000..4f76af5d6bb
--- /dev/null
+++ b/boost/boost/range/detail/vc6/end.hpp
@@ -0,0 +1,170 @@
+// Boost.Range library
+//
+// Copyright Thorsten Ottosen 2003-2004. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_DETAIL_VC6_END_HPP
+#define BOOST_RANGE_DETAIL_VC6_END_HPP
+
+#include <boost/range/detail/implementation_help.hpp>
+#include <boost/range/detail/implementation_help.hpp>
+#include <boost/range/result_iterator.hpp>
+#include <boost/range/detail/common.hpp>
+#include <boost/range/detail/remove_extent.hpp>
+
+namespace boost
+{
+ namespace range_detail
+ {
+ template< typename T >
+ struct range_end;
+
+ //////////////////////////////////////////////////////////////////////
+ // default
+ //////////////////////////////////////////////////////////////////////
+
+ template<>
+ struct range_end<std_container_>
+ {
+ template< typename C >
+ struct inner {
+ static BOOST_RANGE_DEDUCED_TYPENAME range_result_iterator<C>::type
+ fun( C& c )
+ {
+ return c.end();
+ };
+ };
+ };
+
+ //////////////////////////////////////////////////////////////////////
+ // pair
+ //////////////////////////////////////////////////////////////////////
+
+ template<>
+ struct range_end<std_pair_>
+ {
+ template< typename P >
+ struct inner {
+ static BOOST_RANGE_DEDUCED_TYPENAME range_result_iterator<P>::type
+ fun( const P& p )
+ {
+ return p.second;
+ }
+ };
+ };
+
+ //////////////////////////////////////////////////////////////////////
+ // array
+ //////////////////////////////////////////////////////////////////////
+
+ template<>
+ struct range_end<array_>
+ {
+ template< typename T >
+ struct inner {
+ static BOOST_DEDUCED_TYPENAME remove_extent<T>::type*
+ fun(T& t)
+ {
+ return t + remove_extent<T>::size;
+ }
+ };
+ };
+
+
+ template<>
+ struct range_end<char_array_>
+ {
+ template< typename T >
+ struct inner {
+ static BOOST_DEDUCED_TYPENAME remove_extent<T>::type*
+ fun(T& t)
+ {
+ return t + remove_extent<T>::size;
+ }
+ };
+ };
+
+ template<>
+ struct range_end<wchar_t_array_>
+ {
+ template< typename T >
+ struct inner {
+ static BOOST_DEDUCED_TYPENAME remove_extent<T>::type*
+ fun(T& t)
+ {
+ return t + remove_extent<T>::size;
+ }
+ };
+ };
+
+ //////////////////////////////////////////////////////////////////////
+ // string
+ //////////////////////////////////////////////////////////////////////
+
+ template<>
+ struct range_end<char_ptr_>
+ {
+ template< typename T >
+ struct inner {
+ static char* fun( char* s )
+ {
+ return boost::range_detail::str_end( s );
+ }
+ };
+ };
+
+ template<>
+ struct range_end<const_char_ptr_>
+ {
+ template< typename T >
+ struct inner {
+ static const char* fun( const char* s )
+ {
+ return boost::range_detail::str_end( s );
+ }
+ };
+ };
+
+ template<>
+ struct range_end<wchar_t_ptr_>
+ {
+ template< typename T >
+ struct inner {
+ static wchar_t* fun( wchar_t* s )
+ {
+ return boost::range_detail::str_end( s );
+ }
+ };
+ };
+
+
+ template<>
+ struct range_end<const_wchar_t_ptr_>
+ {
+ template< typename T >
+ struct inner {
+ static const wchar_t* fun( const wchar_t* s )
+ {
+ return boost::range_detail::str_end( s );
+ }
+ };
+ };
+
+ } // namespace 'range_detail'
+
+ template< typename C >
+ inline BOOST_DEDUCED_TYPENAME range_result_iterator<C>::type
+ end( C& c )
+ {
+ return range_detail::range_end<range_detail::range<C>::type>::inner<C>::fun( c );
+ }
+
+} // namespace 'boost'
+
+
+#endif
diff --git a/boost/boost/range/detail/vc6/size.hpp b/boost/boost/range/detail/vc6/size.hpp
new file mode 100644
index 00000000000..39f559fd4a6
--- /dev/null
+++ b/boost/boost/range/detail/vc6/size.hpp
@@ -0,0 +1,166 @@
+// Boost.Range library
+//
+// Copyright Thorsten Ottosen 2003-2004. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+
+#ifndef BOOST_RANGE_DETAIL_VC6_SIZE_HPP
+#define BOOST_RANGE_DETAIL_VC6_SIZE_HPP
+
+#include <boost/range/detail/implementation_help.hpp>
+#include <boost/range/detail/size_type.hpp>
+#include <boost/range/detail/common.hpp>
+#include <boost/range/detail/remove_extent.hpp>
+#include <iterator>
+
+namespace boost
+{
+ namespace range_detail
+ {
+ template< typename T >
+ struct range_size_;
+
+ //////////////////////////////////////////////////////////////////////
+ // default
+ //////////////////////////////////////////////////////////////////////
+
+ template<>
+ struct range_size_<std_container_>
+ {
+ template< typename C >
+ struct inner {
+ static BOOST_RANGE_DEDUCED_TYPENAME C::size_type fun( const C& c )
+ {
+ return c.size();
+ };
+ };
+ };
+
+ //////////////////////////////////////////////////////////////////////
+ // pair
+ //////////////////////////////////////////////////////////////////////
+
+ template<>
+ struct range_size_<std_pair_>
+ {
+ template< typename P >
+ struct inner {
+ static BOOST_RANGE_DEDUCED_TYPENAME range_size<P>::type
+ fun( const P& p )
+ {
+ return std::distance( p.first, p.second );
+ }
+ };
+ };
+
+ //////////////////////////////////////////////////////////////////////
+ // array
+ //////////////////////////////////////////////////////////////////////
+
+ template<>
+ struct range_size_<array_>
+ {
+ template<typename T>
+ struct inner {
+ static std::size_t fun(T& t)
+ {
+ return remove_extent<T>::size;
+ }
+ };
+ };
+
+ template<>
+ struct range_size_<char_array_>
+ {
+ template<typename T>
+ struct inner {
+ static std::size_t fun(T& t)
+ {
+ return sizeof(T) / sizeof(T[0]);
+ }
+ };
+ };
+
+ template<>
+ struct range_size_<wchar_t_array_>
+ {
+ template<typename T>
+ struct inner {
+ static std::size_t fun(T& t)
+ {
+ return sizeof(T) / sizeof(T[0]);
+ }
+ };
+ };
+
+ //////////////////////////////////////////////////////////////////////
+ // string
+ //////////////////////////////////////////////////////////////////////
+
+ template<>
+ struct range_size_<char_ptr_>
+ {
+ template<typename T>
+ struct inner {
+ static std::size_t fun( const char* s )
+ {
+ return boost::range_detail::str_size( s );
+ }
+ };
+ };
+
+ template<>
+ struct range_size_<const_char_ptr_>
+ {
+ template<typename T>
+ struct inner {
+ static std::size_t fun( const char* s )
+ {
+ return boost::range_detail::str_size( s );
+ }
+ };
+ };
+
+ template<>
+ struct range_size_<wchar_t_ptr_>
+ {
+ template<typename T>
+ struct inner {
+ static std::size_t fun( const wchar_t* s )
+ {
+ return boost::range_detail::str_size( s );
+ }
+ };
+ };
+
+ template<>
+ struct range_size_<const_wchar_t_ptr_>
+ {
+ template<typename T>
+ struct inner {
+ static std::size_t fun( const wchar_t* s )
+ {
+ return boost::range_detail::str_size( s );
+ }
+ };
+ };
+
+ } // namespace 'range_detail'
+
+
+ template< typename C >
+ BOOST_RANGE_DEDUCED_TYPENAME range_size<C>::type
+ size( const C& c )
+ {
+ return range_detail::range_size_<range_detail::range<C>::type>::inner<C>::fun( c );
+ }
+
+} // namespace 'boost'
+
+
+#endif
diff --git a/boost/boost/range/difference_type.hpp b/boost/boost/range/difference_type.hpp
new file mode 100644
index 00000000000..33c56e36803
--- /dev/null
+++ b/boost/boost/range/difference_type.hpp
@@ -0,0 +1,145 @@
+// Boost.Range library
+//
+// Copyright Thorsten Ottosen 2003-2004. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_DIFFERENCE_TYPE_HPP
+#define BOOST_RANGE_DIFFERENCE_TYPE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif
+
+#include <boost/range/config.hpp>
+#include <boost/range/const_iterator.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+
+namespace boost
+{
+ template< class T >
+ struct range_difference
+ {
+ typedef BOOST_DEDUCED_TYPENAME iterator_difference<
+ BOOST_DEDUCED_TYPENAME range_const_iterator<T>::type >::type
+ type;
+ };
+}
+
+//#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+//#include <boost/range/detail/difference_type.hpp>
+//#else
+
+/*
+#include <cstddef>
+#include <utility>
+
+namespace boost
+{
+ //////////////////////////////////////////////////////////////////////////
+ // default
+ //////////////////////////////////////////////////////////////////////////
+
+ template< typename C >
+ struct range_difference
+ {
+ typedef BOOST_DEDUCED_TYPENAME C::difference_type type;
+ };
+
+ //////////////////////////////////////////////////////////////////////////
+ // pair
+ //////////////////////////////////////////////////////////////////////////
+
+ template< typename Iterator >
+ struct range_difference< std::pair<Iterator,Iterator> >
+ {
+ typedef BOOST_DEDUCED_TYPENAME
+ iterator_difference<Iterator>::type type;
+ };
+
+ template< typename Iterator >
+ struct range_difference< const std::pair<Iterator,Iterator> >
+ {
+ typedef BOOST_DEDUCED_TYPENAME
+ iterator_difference<Iterator>::type type;
+ };
+
+
+ //////////////////////////////////////////////////////////////////////////
+ // array
+ //////////////////////////////////////////////////////////////////////////
+
+ template< typename T, std::size_t sz >
+ struct range_difference< T[sz] >
+ {
+ typedef std::ptrdiff_t type;
+ };
+
+ template< typename T, std::size_t sz >
+ struct range_difference< const T[sz] >
+ {
+ typedef std::ptrdiff_t type;
+ };
+
+ //////////////////////////////////////////////////////////////////////////
+ // string
+ //////////////////////////////////////////////////////////////////////////
+
+ template<>
+ struct range_difference< char* >
+ {
+ typedef std::ptrdiff_t type;
+ };
+
+ template<>
+ struct range_difference< wchar_t* >
+ {
+ typedef std::ptrdiff_t type;
+ };
+
+ template<>
+ struct range_difference< const char* >
+ {
+ typedef std::ptrdiff_t type;
+ };
+
+ template<>
+ struct range_difference< const wchar_t* >
+ {
+ typedef std::ptrdiff_t type;
+ };
+
+ template<>
+ struct range_difference< char* const >
+ {
+ typedef std::ptrdiff_t type;
+ };
+
+ template<>
+ struct range_difference< wchar_t* const >
+ {
+ typedef std::ptrdiff_t type;
+ };
+
+ template<>
+ struct range_difference< const char* const >
+ {
+ typedef std::ptrdiff_t type;
+ };
+
+ template<>
+ struct range_difference< const wchar_t* const >
+ {
+ typedef std::ptrdiff_t type;
+ };
+
+} // namespace boost
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+*/
+
+#endif
diff --git a/boost/boost/range/empty.hpp b/boost/boost/range/empty.hpp
new file mode 100644
index 00000000000..7363262cc40
--- /dev/null
+++ b/boost/boost/range/empty.hpp
@@ -0,0 +1,67 @@
+// Boost.Range library
+//
+// Copyright Thorsten Ottosen 2003-2004. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_EMPTY_HPP
+#define BOOST_RANGE_EMPTY_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif
+
+#include <boost/range/config.hpp>
+//#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+//#include <boost/range/detail/empty.hpp>
+//#else
+
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+
+namespace boost
+{
+namespace range_detail
+{
+
+ //////////////////////////////////////////////////////////////////////
+ // primary template
+ //////////////////////////////////////////////////////////////////////
+
+ template< typename C >
+ inline bool empty( const C& c )
+ {
+ return boost::begin( c ) == boost::end( c );
+ }
+
+ //////////////////////////////////////////////////////////////////////
+ // string
+ //////////////////////////////////////////////////////////////////////
+
+ inline bool empty( const char* const& s )
+ {
+ return s == 0 || s[0] == 0;
+ }
+
+ inline bool empty( const wchar_t* const& s )
+ {
+ return s == 0 || s[0] == 0;
+ }
+
+} // namespace 'range_detail'
+
+template< class T >
+inline bool empty( const T& r )
+{
+ return range_detail::empty( r );
+}
+
+} // namepace 'boost'
+
+//#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+#endif
diff --git a/boost/boost/range/end.hpp b/boost/boost/range/end.hpp
new file mode 100644
index 00000000000..493208f636c
--- /dev/null
+++ b/boost/boost/range/end.hpp
@@ -0,0 +1,201 @@
+// Boost.Range library
+//
+// Copyright Thorsten Ottosen 2003-2004. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_END_HPP
+#define BOOST_RANGE_END_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif
+
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/range/config.hpp>
+
+#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+#include <boost/range/detail/end.hpp>
+#else
+
+#include <boost/range/detail/implementation_help.hpp>
+#include <boost/range/iterator.hpp>
+#include <boost/range/const_iterator.hpp>
+
+namespace boost
+{
+
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \
+ !BOOST_WORKAROUND(__GNUC__, < 3) \
+ /**/
+namespace range_detail
+{
+#endif
+
+ //////////////////////////////////////////////////////////////////////
+ // primary template
+ //////////////////////////////////////////////////////////////////////
+
+ template< typename C >
+ inline BOOST_DEDUCED_TYPENAME range_const_iterator<C>::type
+ boost_range_end( const C& c )
+ {
+ return c.end();
+ }
+
+ template< typename C >
+ inline BOOST_DEDUCED_TYPENAME range_iterator<
+ typename remove_const<C>::type >::type
+ boost_range_end( C& c )
+ {
+ return c.end();
+ }
+
+ //////////////////////////////////////////////////////////////////////
+ // pair
+ //////////////////////////////////////////////////////////////////////
+
+ template< typename Iterator >
+ inline Iterator boost_range_end( const std::pair<Iterator,Iterator>& p )
+ {
+ return p.second;
+ }
+
+ template< typename Iterator >
+ inline Iterator boost_range_end( std::pair<Iterator,Iterator>& p )
+ {
+ return p.second;
+ }
+
+ //////////////////////////////////////////////////////////////////////
+ // array
+ //////////////////////////////////////////////////////////////////////
+
+ template< typename T, std::size_t sz >
+ inline const T* boost_range_end( const T (&array)[sz] )
+ {
+ return range_detail::array_end<T,sz>( array );
+ }
+
+ template< typename T, std::size_t sz >
+ inline T* boost_range_end( T (&array)[sz] )
+ {
+ return range_detail::array_end<T,sz>( array );
+ }
+
+ //////////////////////////////////////////////////////////////////////
+ // string
+ //////////////////////////////////////////////////////////////////////
+
+#if 1 || BOOST_WORKAROUND(__MWERKS__, <= 0x3204 ) || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+// CW up to 9.3 and borland have troubles with function ordering
+ inline char* boost_range_end( char* s )
+ {
+ return range_detail::str_end( s );
+ }
+
+ inline wchar_t* boost_range_end( wchar_t* s )
+ {
+ return range_detail::str_end( s );
+ }
+
+ inline const char* boost_range_end( const char* s )
+ {
+ return range_detail::str_end( s );
+ }
+
+ inline const wchar_t* boost_range_end( const wchar_t* s )
+ {
+ return range_detail::str_end( s );
+ }
+#else
+ inline char* boost_range_end( char*& s )
+ {
+ return range_detail::str_end( s );
+ }
+
+ inline wchar_t* boost_range_end( wchar_t*& s )
+ {
+ return range_detail::str_end( s );
+ }
+
+ inline const char* boost_range_end( const char*& s )
+ {
+ return range_detail::str_end( s );
+ }
+
+ inline const wchar_t* boost_range_end( const wchar_t*& s )
+ {
+ return range_detail::str_end( s );
+ }
+#endif
+
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \
+ !BOOST_WORKAROUND(__GNUC__, < 3) \
+ /**/
+} // namespace 'range_detail'
+#endif
+
+template< class T >
+inline BOOST_DEDUCED_TYPENAME range_iterator<
+ typename remove_const<T>::type >::type end( T& r )
+{
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \
+ !BOOST_WORKAROUND(__GNUC__, < 3) \
+ /**/
+ using namespace range_detail;
+#endif
+ return boost_range_end( r );
+}
+
+template< class T >
+inline BOOST_DEDUCED_TYPENAME range_const_iterator<T>::type end( const T& r )
+{
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \
+ !BOOST_WORKAROUND(__GNUC__, < 3) \
+ /**/
+ using namespace range_detail;
+#endif
+ return boost_range_end( r );
+}
+
+
+
+#if BOOST_WORKAROUND(__MWERKS__, <= 0x3003 ) || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+// BCB and CW are not able to overload pointer when class overloads are also available.
+template<>
+inline range_const_iterator<const char*>::type end<const char*>( const char*& r )
+{
+ return range_detail::str_end( r );
+}
+
+template<>
+inline range_const_iterator<const wchar_t*>::type end<const wchar_t*>( const wchar_t*& r )
+{
+ return range_detail::str_end( r );
+}
+
+#endif
+
+} // namespace 'boost'
+
+
+
+#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+
+namespace boost
+{
+ template< class T >
+ inline BOOST_DEDUCED_TYPENAME range_const_iterator<T>::type
+ const_end( const T& r )
+ {
+ return boost::end( r );
+ }
+}
+
+#endif
diff --git a/boost/boost/range/functions.hpp b/boost/boost/range/functions.hpp
new file mode 100644
index 00000000000..5b5fb549a1d
--- /dev/null
+++ b/boost/boost/range/functions.hpp
@@ -0,0 +1,25 @@
+// Boost.Range library
+//
+// Copyright Thorsten Ottosen 2003-2004. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_FUNCTIONS_HPP
+#define BOOST_RANGE_FUNCTIONS_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif
+
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/size.hpp>
+#include <boost/range/empty.hpp>
+#include <boost/range/rbegin.hpp>
+#include <boost/range/rend.hpp>
+
+#endif
diff --git a/boost/boost/range/iterator.hpp b/boost/boost/range/iterator.hpp
new file mode 100644
index 00000000000..0225495b72e
--- /dev/null
+++ b/boost/boost/range/iterator.hpp
@@ -0,0 +1,128 @@
+// Boost.Range library
+//
+// Copyright Thorsten Ottosen 2003-2004. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_ITERATOR_HPP
+#define BOOST_RANGE_ITERATOR_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif
+
+#include <boost/range/config.hpp>
+
+#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#include <boost/range/detail/iterator.hpp>
+#else
+
+#include <boost/iterator/iterator_traits.hpp>
+#include <cstddef>
+#include <utility>
+
+namespace boost
+{
+ //////////////////////////////////////////////////////////////////////////
+ // default
+ //////////////////////////////////////////////////////////////////////////
+
+ template< typename C >
+ struct range_iterator
+ {
+ typedef BOOST_DEDUCED_TYPENAME C::iterator type;
+ };
+
+ //////////////////////////////////////////////////////////////////////////
+ // pair
+ //////////////////////////////////////////////////////////////////////////
+
+ template< typename Iterator >
+ struct range_iterator< std::pair<Iterator,Iterator> >
+ {
+ typedef Iterator type;
+ };
+
+ template< typename Iterator >
+ struct range_iterator< const std::pair<Iterator,Iterator> >
+ {
+ typedef Iterator type;
+ };
+
+ //////////////////////////////////////////////////////////////////////////
+ // array
+ //////////////////////////////////////////////////////////////////////////
+
+ template< typename T, std::size_t sz >
+ struct range_iterator< T[sz] >
+ {
+ typedef T* type;
+ };
+
+ template< typename T, std::size_t sz >
+ struct range_iterator< const T[sz] >
+ {
+ typedef const T* type;
+ };
+
+ //////////////////////////////////////////////////////////////////////////
+ // string
+ //////////////////////////////////////////////////////////////////////////
+
+ template<>
+ struct range_iterator< char* >
+ {
+ typedef char* type;
+ };
+
+ template<>
+ struct range_iterator< wchar_t* >
+ {
+ typedef wchar_t* type;
+ };
+
+ template<>
+ struct range_iterator< const char* >
+ {
+ typedef const char* type;
+ };
+
+ template<>
+ struct range_iterator< const wchar_t* >
+ {
+ typedef const wchar_t* type;
+ };
+
+ template<>
+ struct range_iterator< char* const >
+ {
+ typedef char* type;
+ };
+
+ template<>
+ struct range_iterator< wchar_t* const >
+ {
+ typedef wchar_t* type;
+ };
+
+ template<>
+ struct range_iterator< const char* const >
+ {
+ typedef const char* type;
+ };
+
+ template<>
+ struct range_iterator< const wchar_t* const >
+ {
+ typedef const wchar_t* type;
+ };
+
+} // namespace boost
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#endif
diff --git a/boost/boost/range/iterator_range.hpp b/boost/boost/range/iterator_range.hpp
new file mode 100644
index 00000000000..bd77ffaff23
--- /dev/null
+++ b/boost/boost/range/iterator_range.hpp
@@ -0,0 +1,608 @@
+// Boost.Range library
+//
+// Copyright Thorsten Ottosen & Pavol Droba 2003-2004. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_ITERATOR_RANGE_HPP
+#define BOOST_RANGE_ITERATOR_RANGE_HPP
+
+// From boost/dynamic_bitset.hpp; thanks to Matthias Troyer for Cray X1 patch.
+#include <boost/config.hpp> // Define __STL_CONFIG_H, if appropriate.
+#ifndef BOOST_OLD_IOSTREAMS
+# if defined(__STL_CONFIG_H) && \
+ !defined (__STL_USE_NEW_IOSTREAMS) && !defined(__crayx1) \
+ /**/
+# define BOOST_OLD_IOSTREAMS
+# endif
+#endif // #ifndef BOOST_OLD_IOSTREAMS
+
+#include <boost/detail/workaround.hpp>
+#include <boost/range/functions.hpp>
+#include <boost/range/result_iterator.hpp>
+#include <boost/range/difference_type.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+#include <boost/assert.hpp>
+#include <iterator>
+#include <algorithm>
+#ifndef BOOST_OLD_IOSTREAMS
+# include <ostream>
+#else
+# include <ostream.h>
+#endif
+#include <cstddef>
+
+
+/*! \file
+ Defines the \c iterator_class and related functions.
+ \c iterator_range is a simple wrapper of iterator pair idiom. It provides
+ a rich subset of Container interface.
+*/
+
+
+namespace boost
+{
+ namespace iterator_range_detail
+ {
+ //
+ // The functions adl_begin and adl_end are implemented in a separate
+ // class for gcc-2.9x
+ //
+ template<typename IteratorT>
+ struct iterator_range_impl {
+ template< class ForwardRange >
+ static IteratorT adl_begin( ForwardRange& r )
+ {
+ return IteratorT( boost::begin( r ) );
+ }
+
+ template< class ForwardRange >
+ static IteratorT adl_end( ForwardRange& r )
+ {
+ return IteratorT( boost::end( r ) );
+ }
+ };
+
+ template< class Left, class Right >
+ inline bool equal( const Left& l, const Right& r )
+ {
+ typedef BOOST_DEDUCED_TYPENAME boost::range_size<Left>::type sz_type;
+
+ sz_type l_size = boost::size( l ),
+ r_size = boost::size( r );
+
+ if( l_size != r_size )
+ return false;
+
+ return std::equal( boost::begin(l), boost::end(l),
+ boost::begin(r) );
+ }
+
+ template< class Left, class Right >
+ inline bool less_than( const Left& l, const Right& r )
+ {
+ return std::lexicographical_compare( boost::begin(l),
+ boost::end(l),
+ boost::begin(r),
+ boost::end(r) );
+ }
+
+ struct range_tag { };
+ struct const_range_tag { };
+
+ }
+
+// iterator range template class -----------------------------------------//
+
+ //! iterator_range class
+ /*!
+ An \c iterator_range delimits a range in a sequence by beginning and ending iterators.
+ An iterator_range can be passed to an algorithm which requires a sequence as an input.
+ For example, the \c toupper() function may be used most frequently on strings,
+ but can also be used on iterator_ranges:
+
+ \code
+ boost::tolower( find( s, "UPPERCASE STRING" ) );
+ \endcode
+
+ Many algorithms working with sequences take a pair of iterators,
+ delimiting a working range, as an arguments. The \c iterator_range class is an
+ encapsulation of a range identified by a pair of iterators.
+ It provides a collection interface,
+ so it is possible to pass an instance to an algorithm requiring a collection as an input.
+ */
+ template<typename IteratorT>
+ class iterator_range
+ {
+ protected: // Used by sub_range
+ //! implementation class
+ typedef iterator_range_detail::iterator_range_impl<IteratorT> impl;
+ public:
+
+ //! this type
+ typedef iterator_range<IteratorT> type;
+ //BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(value_type);
+
+ //! Encapsulated value type
+ typedef BOOST_DEDUCED_TYPENAME
+ iterator_value<IteratorT>::type value_type;
+
+ //! Difference type
+ typedef BOOST_DEDUCED_TYPENAME
+ iterator_difference<IteratorT>::type difference_type;
+
+ //! Size type
+ typedef std::size_t size_type; // note: must be unsigned
+
+ //! This type
+ typedef iterator_range<IteratorT> this_type;
+
+ //! Refence type
+ //
+ // Needed because value-type is the same for
+ // const and non-const iterators
+ //
+ typedef BOOST_DEDUCED_TYPENAME
+ iterator_reference<IteratorT>::type reference;
+
+ //! const_iterator type
+ /*!
+ There is no distinction between const_iterator and iterator.
+ These typedefs are provides to fulfill container interface
+ */
+ typedef IteratorT const_iterator;
+ //! iterator type
+ typedef IteratorT iterator;
+
+ iterator_range() : m_Begin( iterator() ), m_End( iterator() ),
+ singular( true )
+ { }
+/*
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+ iterator_range( this_type r ) :
+ : m_Begin(r.begin()), m_End(r.end())
+ { }
+
+ this_type& operator=( this_type r )
+ {
+ m_Begin = r.begin();
+ m_End = r.end();
+ return *this;
+ }
+#endif
+*/
+ //! Constructor from a pair of iterators
+ template< class Iterator >
+ iterator_range( Iterator Begin, Iterator End ) :
+ m_Begin(Begin), m_End(End), singular(false) {}
+
+ //! Constructor from a Range
+ template< class Range >
+ iterator_range( const Range& r ) :
+ m_Begin( impl::adl_begin( r ) ), m_End( impl::adl_end( r ) ),
+ singular(false) {}
+
+ //! Constructor from a Range
+ template< class Range >
+ iterator_range( Range& r ) :
+ m_Begin( impl::adl_begin( r ) ), m_End( impl::adl_end( r ) ),
+ singular(false) {}
+
+ //! Constructor from a Range
+ template< class Range >
+ iterator_range( const Range& r, iterator_range_detail::const_range_tag ) :
+ m_Begin( impl::adl_begin( r ) ), m_End( impl::adl_end( r ) ),
+ singular(false) {}
+
+ //! Constructor from a Range
+ template< class Range >
+ iterator_range( Range& r, iterator_range_detail::range_tag ) :
+ m_Begin( impl::adl_begin( r ) ), m_End( impl::adl_end( r ) ),
+ singular(false) {}
+
+ #if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ this_type& operator=( const this_type& r )
+ {
+ m_Begin = r.begin();
+ m_End = r.end();
+ //
+ // remark: this need not necessarily be true, but it does no harm
+ //
+ singular = r.singular;
+ return *this;
+ }
+ #endif
+
+ template< class Iterator >
+ iterator_range& operator=( const iterator_range<Iterator>& r )
+ {
+ m_Begin = r.begin();
+ m_End = r.end();
+ //
+ // remark: this need not necessarily be true, but it does no harm
+ //
+ singular = r.empty();
+ return *this;
+ }
+
+ template< class ForwardRange >
+ iterator_range& operator=( ForwardRange& r )
+ {
+ m_Begin = impl::adl_begin( r );
+ m_End = impl::adl_end( r );
+ singular = false;
+ return *this;
+ }
+
+ template< class ForwardRange >
+ iterator_range& operator=( const ForwardRange& r )
+ {
+ m_Begin = impl::adl_begin( r );
+ m_End = impl::adl_end( r );
+ singular = false;
+ return *this;
+ }
+
+ IteratorT begin() const
+ {
+ return m_Begin;
+ }
+
+ IteratorT end() const
+ {
+ return m_End;
+ }
+
+ size_type size() const
+ {
+ if( singular )
+ return 0;
+
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
+ return std::distance<IteratorT>( m_Begin, m_End );
+#else
+ return std::distance( m_Begin, m_End );
+#endif
+ }
+
+ bool empty() const
+ {
+ if( singular )
+ return true;
+
+ return m_Begin == m_End;
+ }
+
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+ operator bool() const
+ {
+ return !empty();
+ }
+#else
+ typedef iterator (iterator_range::*unspecified_bool_type) () const;
+ operator unspecified_bool_type() const
+ {
+ return empty() ? 0: &iterator_range::end;
+ }
+#endif
+
+ bool equal( const iterator_range& r ) const
+ {
+ return singular == r.singular && m_Begin == r.m_Begin && m_End == r.m_End;
+ }
+
+
+#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+ bool operator==( const iterator_range& r ) const
+ {
+ return iterator_range_detail::equal( *this, r );
+ }
+
+ bool operator!=( const iterator_range& r ) const
+ {
+ return !operator==(r);
+ }
+
+ bool operator<( const iterator_range& r ) const
+ {
+ return iterator_range_detail::less_than( *this, r );
+ }
+
+#endif
+
+ public: // convenience
+ reference front() const
+ {
+ BOOST_ASSERT( !empty() );
+ return *m_Begin;
+ }
+
+ reference back() const
+ {
+ BOOST_ASSERT( !empty() );
+ IteratorT last( m_End );
+ return *--last;
+ }
+
+ reference operator[]( size_type sz ) const
+ {
+ //BOOST_STATIC_ASSERT( is_random_access );
+ BOOST_ASSERT( sz < size() );
+ return m_Begin[sz];
+ }
+
+ iterator_range& advance_begin( difference_type n )
+ {
+ std::advance( m_Begin, n );
+ return *this;
+ }
+
+ iterator_range& advance_end( difference_type n )
+ {
+ std::advance( m_End, n );
+ return *this;
+ }
+
+ private:
+ // begin and end iterators
+ IteratorT m_Begin;
+ IteratorT m_End;
+ bool singular;
+ };
+
+// iterator range free-standing operators ---------------------------//
+
+#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+#else
+ template< class Iterator >
+ inline bool empty( const iterator_range<Iterator>& r )
+ {
+ //
+ // this will preserve the well-defined empty() even
+ // though 'r' is singular.
+ //
+ return r.empty();
+ }
+#endif
+
+#ifndef BOOST_OLD_IOSTREAMS
+
+ //! iterator_range output operator
+ /*!
+ Output the range to an ostream. Elements are outputed
+ in a sequence without separators.
+ */
+ template< typename IteratorT, typename Elem, typename Traits >
+ inline std::basic_ostream<Elem,Traits>& operator<<(
+ std::basic_ostream<Elem, Traits>& Os,
+ const iterator_range<IteratorT>& r )
+ {
+ std::copy( r.begin(), r.end(),
+ std::ostream_iterator< BOOST_DEDUCED_TYPENAME
+ iterator_value<IteratorT>::type,
+ Elem, Traits>(Os) );
+ return Os;
+ }
+
+#else
+
+ //! iterator_range output operator
+ /*!
+ Output the range to an ostream. Elements are outputed
+ in a sequence without separators.
+ */
+ template< typename IteratorT >
+ inline std::ostream& operator<<(
+ std::ostream& Os,
+ const iterator_range<IteratorT>& r )
+ {
+ std::copy( r.begin(), r.end(), std::ostream_iterator<char>(Os));
+ return Os;
+ }
+
+#endif
+
+ /////////////////////////////////////////////////////////////////////
+ // comparison operators
+ /////////////////////////////////////////////////////////////////////
+
+ template< class IteratorT, class ForwardRange >
+ inline bool operator==( const ForwardRange& l,
+ const iterator_range<IteratorT>& r )
+ {
+ return iterator_range_detail::equal( l, r );
+ }
+
+ template< class IteratorT, class ForwardRange >
+ inline bool operator!=( const ForwardRange& l,
+ const iterator_range<IteratorT>& r )
+ {
+ return !iterator_range_detail::equal( l, r );
+ }
+
+ template< class IteratorT, class ForwardRange >
+ inline bool operator<( const ForwardRange& l,
+ const iterator_range<IteratorT>& r )
+ {
+ return iterator_range_detail::less_than( l, r );
+ }
+
+#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+#else
+ template< class Iterator1T, class Iterator2T >
+ inline bool operator==( const iterator_range<Iterator1T>& l,
+ const iterator_range<Iterator2T>& r )
+ {
+ return iterator_range_detail::equal( l, r );
+ }
+
+ template< class IteratorT, class ForwardRange >
+ inline bool operator==( const iterator_range<IteratorT>& l,
+ const ForwardRange& r )
+ {
+ return iterator_range_detail::equal( l, r );
+ }
+
+
+ template< class Iterator1T, class Iterator2T >
+ inline bool operator!=( const iterator_range<Iterator1T>& l,
+ const iterator_range<Iterator2T>& r )
+ {
+ return !iterator_range_detail::equal( l, r );
+ }
+
+ template< class IteratorT, class ForwardRange >
+ inline bool operator!=( const iterator_range<IteratorT>& l,
+ const ForwardRange& r )
+ {
+ return !iterator_range_detail::equal( l, r );
+ }
+
+
+ template< class Iterator1T, class Iterator2T >
+ inline bool operator<( const iterator_range<Iterator1T>& l,
+ const iterator_range<Iterator2T>& r )
+ {
+ return iterator_range_detail::less_than( l, r );
+ }
+
+ template< class IteratorT, class ForwardRange >
+ inline bool operator<( const iterator_range<IteratorT>& l,
+ const ForwardRange& r )
+ {
+ return iterator_range_detail::less_than( l, r );
+ }
+
+#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+// iterator range utilities -----------------------------------------//
+
+ //! iterator_range construct helper
+ /*!
+ Construct an \c iterator_range from a pair of iterators
+
+ \param Begin A begin iterator
+ \param End An end iterator
+ \return iterator_range object
+ */
+ template< typename IteratorT >
+ inline iterator_range< IteratorT >
+ make_iterator_range( IteratorT Begin, IteratorT End )
+ {
+ return iterator_range<IteratorT>( Begin, End );
+ }
+
+#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+ template< typename Range >
+ inline iterator_range< BOOST_DEDUCED_TYPENAME range_result_iterator<Range>::type >
+ make_iterator_range( Range& r )
+ {
+ return iterator_range< BOOST_DEDUCED_TYPENAME range_result_iterator<Range>::type >
+ ( boost::begin( r ), boost::end( r ) );
+ }
+
+#else
+ //! iterator_range construct helper
+ /*!
+ Construct an \c iterator_range from a \c Range containing the begin
+ and end iterators.
+ */
+ template< class ForwardRange >
+ inline iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type >
+ make_iterator_range( ForwardRange& r )
+ {
+ return iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type >
+ ( r, iterator_range_detail::range_tag() );
+ }
+
+ template< class ForwardRange >
+ inline iterator_range< BOOST_DEDUCED_TYPENAME range_const_iterator<ForwardRange>::type >
+ make_iterator_range( const ForwardRange& r )
+ {
+ return iterator_range< BOOST_DEDUCED_TYPENAME range_const_iterator<ForwardRange>::type >
+ ( r, iterator_range_detail::const_range_tag() );
+ }
+
+#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+ namespace iterator_range_detail
+ {
+ template< class Range >
+ inline iterator_range< BOOST_DEDUCED_TYPENAME range_result_iterator<Range>::type >
+ make_range_impl( Range& r,
+ BOOST_DEDUCED_TYPENAME range_difference<Range>::type advance_begin,
+ BOOST_DEDUCED_TYPENAME range_difference<Range>::type advance_end )
+ {
+ if( advance_begin == 0 && advance_end == 0 )
+ return make_iterator_range( r );
+
+ BOOST_DEDUCED_TYPENAME range_result_iterator<Range>::type
+ new_begin = boost::begin( r ),
+ new_end = boost::end( r );
+ std::advance( new_begin, advance_begin );
+ std::advance( new_end, advance_end );
+ return make_iterator_range( new_begin, new_end );
+ }
+ }
+
+#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+ template< class Range >
+ inline iterator_range< BOOST_DEDUCED_TYPENAME range_result_iterator<Range>::type >
+ make_iterator_range( Range& r,
+ BOOST_DEDUCED_TYPENAME range_difference<Range>::type advance_begin,
+ BOOST_DEDUCED_TYPENAME range_difference<Range>::type advance_end )
+ {
+ //BOOST_ASSERT( advance_begin - advance_end <= size(r) && "creating invalid range" );
+ return iterator_range_detail::make_range_impl( r, advance_begin, advance_end );
+ }
+
+#else
+
+ template< class Range >
+ inline iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<Range>::type >
+ make_iterator_range( Range& r,
+ BOOST_DEDUCED_TYPENAME range_difference<Range>::type advance_begin,
+ BOOST_DEDUCED_TYPENAME range_difference<Range>::type advance_end )
+ {
+ //BOOST_ASSERT( advance_begin - advance_end <= size(r) && "creating invalid range" );
+ return iterator_range_detail::make_range_impl( r, advance_begin, advance_end );
+ }
+
+ template< class Range >
+ inline iterator_range< BOOST_DEDUCED_TYPENAME range_const_iterator<Range>::type >
+ make_iterator_range( const Range& r,
+ BOOST_DEDUCED_TYPENAME range_difference<Range>::type advance_begin,
+ BOOST_DEDUCED_TYPENAME range_difference<Range>::type advance_end )
+ {
+ //BOOST_ASSERT( advance_begin - advance_end <= size(r) && "creating invalid range" );
+ return iterator_range_detail::make_range_impl( r, advance_begin, advance_end );
+ }
+
+#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+ //! copy a range into a sequence
+ /*!
+ Construct a new sequence of the specified type from the elements
+ in the given range
+
+ \param Range An input range
+ \return New sequence
+ */
+ template< typename SeqT, typename Range >
+ inline SeqT copy_range( const Range& r )
+ {
+ return SeqT( boost::begin( r ), boost::end( r ) );
+ }
+
+} // namespace 'boost'
+
+#undef BOOST_OLD_IOSTREAMS
+
+#endif
diff --git a/boost/boost/range/metafunctions.hpp b/boost/boost/range/metafunctions.hpp
new file mode 100644
index 00000000000..3bf899f1768
--- /dev/null
+++ b/boost/boost/range/metafunctions.hpp
@@ -0,0 +1,28 @@
+// Boost.Range library
+//
+// Copyright Thorsten Ottosen 2003-2004. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_METAFUNCTIONS_HPP
+#define BOOST_RANGE_METAFUNCTIONS_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif
+
+#include <boost/range/iterator.hpp>
+#include <boost/range/const_iterator.hpp>
+#include <boost/range/value_type.hpp>
+#include <boost/range/size_type.hpp>
+#include <boost/range/difference_type.hpp>
+#include <boost/range/result_iterator.hpp>
+#include <boost/range/reverse_iterator.hpp>
+#include <boost/range/const_reverse_iterator.hpp>
+#include <boost/range/reverse_result_iterator.hpp>
+
+#endif
diff --git a/boost/boost/range/rbegin.hpp b/boost/boost/range/rbegin.hpp
new file mode 100644
index 00000000000..0fcf00c9319
--- /dev/null
+++ b/boost/boost/range/rbegin.hpp
@@ -0,0 +1,68 @@
+// Boost.Range library
+//
+// Copyright Thorsten Ottosen 2003-2004. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_RBEGIN_HPP
+#define BOOST_RANGE_RBEGIN_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif
+
+#include <boost/range/end.hpp>
+#include <boost/range/reverse_result_iterator.hpp>
+#include <boost/range/reverse_iterator.hpp>
+#include <boost/range/const_reverse_iterator.hpp>
+
+namespace boost
+{
+
+#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+template< class C >
+inline BOOST_DEDUCED_TYPENAME range_reverse_result_iterator<C>::type
+rbegin( C& c )
+{
+ return BOOST_DEDUCED_TYPENAME range_reverse_result_iterator<C>::type( end( c ) );
+}
+
+#else
+
+template< class C >
+inline BOOST_DEDUCED_TYPENAME range_reverse_iterator<
+ typename remove_const<C>::type >::type
+rbegin( C& c )
+{
+ typedef BOOST_DEDUCED_TYPENAME range_reverse_iterator<
+ typename remove_const<C>::type >::type
+ iter_type;
+ return iter_type( boost::end( c ) );
+}
+
+template< class C >
+inline BOOST_DEDUCED_TYPENAME range_const_reverse_iterator<C>::type
+rbegin( const C& c )
+{
+ typedef BOOST_DEDUCED_TYPENAME range_const_reverse_iterator<C>::type
+ iter_type;
+ return iter_type( boost::end( c ) );
+}
+
+#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+template< class T >
+inline BOOST_DEDUCED_TYPENAME range_const_reverse_iterator<T>::type
+const_rbegin( const T& r )
+{
+ return boost::rbegin( r );
+}
+
+} // namespace 'boost'
+
+#endif
diff --git a/boost/boost/range/rend.hpp b/boost/boost/range/rend.hpp
new file mode 100644
index 00000000000..3e91ff7196c
--- /dev/null
+++ b/boost/boost/range/rend.hpp
@@ -0,0 +1,68 @@
+// Boost.Range library
+//
+// Copyright Thorsten Ottosen 2003-2004. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_REND_HPP
+#define BOOST_RANGE_REND_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif
+
+#include <boost/range/begin.hpp>
+#include <boost/range/reverse_result_iterator.hpp>
+#include <boost/range/reverse_iterator.hpp>
+#include <boost/range/const_reverse_iterator.hpp>
+
+namespace boost
+{
+
+#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+template< class C >
+inline BOOST_DEDUCED_TYPENAME range_reverse_result_iterator<C>::type
+rend( C& c )
+{
+ return BOOST_DEDUCED_TYPENAME range_reverse_result_iterator<C>::type( boost::begin( c ) );
+}
+
+#else
+
+template< class C >
+inline BOOST_DEDUCED_TYPENAME range_reverse_iterator<
+ typename remove_const<C>::type >::type
+rend( C& c )
+{
+ typedef BOOST_DEDUCED_TYPENAME range_reverse_iterator<
+ typename remove_const<C>::type >::type
+ iter_type;
+ return iter_type( boost::begin( c ) );
+}
+
+template< class C >
+inline BOOST_DEDUCED_TYPENAME range_const_reverse_iterator<C>::type
+rend( const C& c )
+{
+ typedef BOOST_DEDUCED_TYPENAME range_const_reverse_iterator<C>::type
+ iter_type;
+ return iter_type( boost::begin( c ) );
+}
+
+#endif
+
+template< class T >
+inline BOOST_DEDUCED_TYPENAME range_const_reverse_iterator<T>::type
+const_rend( const T& r )
+{
+ return boost::rend( r );
+}
+
+} // namespace 'boost'
+
+#endif
diff --git a/boost/boost/range/result_iterator.hpp b/boost/boost/range/result_iterator.hpp
new file mode 100644
index 00000000000..86e71cd6c91
--- /dev/null
+++ b/boost/boost/range/result_iterator.hpp
@@ -0,0 +1,43 @@
+// Boost.Range library
+//
+// Copyright Thorsten Ottosen 2003-2004. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_RESULT_ITERATOR_HPP
+#define BOOST_RANGE_RESULT_ITERATOR_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/range/config.hpp>
+#include <boost/range/iterator.hpp>
+#include <boost/range/const_iterator.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/mpl/if.hpp>
+
+namespace boost
+{
+ //////////////////////////////////////////////////////////////////////////
+ // default
+ //////////////////////////////////////////////////////////////////////////
+
+ template< typename C >
+ struct range_result_iterator
+ {
+ typedef BOOST_RANGE_DEDUCED_TYPENAME
+ mpl::if_< BOOST_DEDUCED_TYPENAME is_const<C>::type,
+ BOOST_DEDUCED_TYPENAME range_const_iterator<C>::type,
+ BOOST_DEDUCED_TYPENAME range_iterator<C>::type >::type type;
+ };
+
+} // namespace boost
+
+//#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#endif
diff --git a/boost/boost/range/reverse_iterator.hpp b/boost/boost/range/reverse_iterator.hpp
new file mode 100644
index 00000000000..f8e922175ab
--- /dev/null
+++ b/boost/boost/range/reverse_iterator.hpp
@@ -0,0 +1,40 @@
+// Boost.Range library
+//
+// Copyright Thorsten Ottosen 2003-2004. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_REVERSE_ITERATOR_HPP
+#define BOOST_RANGE_REVERSE_ITERATOR_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif
+
+#include <boost/range/config.hpp>
+#include <boost/range/iterator.hpp>
+#include <boost/iterator/reverse_iterator.hpp>
+
+
+namespace boost
+{
+ //////////////////////////////////////////////////////////////////////////
+ // default
+ //////////////////////////////////////////////////////////////////////////
+
+ template< typename C >
+ struct range_reverse_iterator
+ {
+ typedef reverse_iterator<
+ BOOST_DEDUCED_TYPENAME range_iterator<C>::type > type;
+ };
+
+
+} // namespace boost
+
+
+#endif
diff --git a/boost/boost/range/reverse_result_iterator.hpp b/boost/boost/range/reverse_result_iterator.hpp
new file mode 100644
index 00000000000..bb1738984c9
--- /dev/null
+++ b/boost/boost/range/reverse_result_iterator.hpp
@@ -0,0 +1,37 @@
+// Boost.Range library
+//
+// Copyright Thorsten Ottosen 2003-2004. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_REVERSE_RESULT_ITERATOR_HPP
+#define BOOST_RANGE_REVERSE_RESULT_ITERATOR_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/range/config.hpp>
+#include <boost/range/result_iterator.hpp>
+#include <boost/iterator/reverse_iterator.hpp>
+
+namespace boost
+{
+ //////////////////////////////////////////////////////////////////////////
+ // default
+ //////////////////////////////////////////////////////////////////////////
+
+ template< typename C >
+ struct range_reverse_result_iterator
+ {
+ typedef reverse_iterator<
+ BOOST_RANGE_DEDUCED_TYPENAME range_result_iterator<C>::type > type;
+ };
+
+} // namespace boost
+
+#endif
diff --git a/boost/boost/range/size.hpp b/boost/boost/range/size.hpp
new file mode 100644
index 00000000000..88201daf9a6
--- /dev/null
+++ b/boost/boost/range/size.hpp
@@ -0,0 +1,123 @@
+// Boost.Range library
+//
+// Copyright Thorsten Ottosen 2003-2004. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_SIZE_HPP
+#define BOOST_RANGE_SIZE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif
+
+#include <boost/range/config.hpp>
+
+#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+#include <boost/range/detail/size.hpp>
+#else
+
+#include <boost/range/detail/implementation_help.hpp>
+#include <boost/range/size_type.hpp>
+#include <cstddef>
+#include <iterator>
+#include <utility>
+
+namespace boost
+{
+
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+namespace range_detail
+{
+#endif
+ //////////////////////////////////////////////////////////////////////
+ // primary template
+ //////////////////////////////////////////////////////////////////////
+
+ template< typename C >
+ inline BOOST_DEDUCED_TYPENAME C::size_type
+ boost_range_size( const C& c )
+ {
+ return c.size();
+ }
+
+ //////////////////////////////////////////////////////////////////////
+ // pair
+ //////////////////////////////////////////////////////////////////////
+
+ template< typename Iterator >
+ inline std::size_t boost_range_size( const std::pair<Iterator,Iterator>& p )
+ {
+ return std::distance( p.first, p.second );
+ }
+
+ //////////////////////////////////////////////////////////////////////
+ // array
+ //////////////////////////////////////////////////////////////////////
+
+ template< typename T, std::size_t sz >
+ inline std::size_t boost_range_size( const T (&array)[sz] )
+ {
+ return range_detail::array_size<T,sz>( array );
+ }
+
+ template< typename T, std::size_t sz >
+ inline std::size_t boost_range_size( T (&array)[sz] )
+ {
+ return boost::range_detail::array_size<T,sz>( array );
+ }
+
+ //////////////////////////////////////////////////////////////////////
+ // string
+ //////////////////////////////////////////////////////////////////////
+
+ inline std::size_t boost_range_size( const char* const& s )
+ {
+ return boost::range_detail::str_size( s );
+ }
+
+ inline std::size_t boost_range_size( const wchar_t* const& s )
+ {
+ return boost::range_detail::str_size( s );
+ }
+
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+} // namespace 'range_detail'
+#endif
+
+template< class T >
+inline BOOST_DEDUCED_TYPENAME range_size<T>::type size( const T& r )
+{
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+ using namespace range_detail;
+#endif
+ return boost_range_size( r );
+}
+
+
+#if BOOST_WORKAROUND(__MWERKS__, <= 0x3003 ) || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+// BCB and CW are not able to overload pointer when class overloads are also available.
+inline range_size<const char*>::type size( const char* r ) {
+ return range_detail::str_size( r );
+}
+inline range_size<char*>::type size( char* r ) {
+ return range_detail::str_size( r );
+}
+inline range_size<const wchar_t*>::type size( const wchar_t* r ) {
+ return range_detail::str_size( r );
+}
+inline range_size<wchar_t*>::type size( wchar_t* r ) {
+ return range_detail::str_size( r );
+}
+#endif
+
+
+} // namespace 'boost'
+
+#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+#endif
diff --git a/boost/boost/range/size_type.hpp b/boost/boost/range/size_type.hpp
new file mode 100644
index 00000000000..57f191d4ca4
--- /dev/null
+++ b/boost/boost/range/size_type.hpp
@@ -0,0 +1,176 @@
+// Boost.Range library
+//
+// Copyright Thorsten Ottosen 2003-2004. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_SIZE_TYPE_HPP
+#define BOOST_RANGE_SIZE_TYPE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/range/config.hpp>
+/*
+#include <boost/range/difference_type.hpp>
+
+namespace boost
+{
+ namespace range_detail
+ {
+ template< class T >
+ struct add_unsigned;
+
+ template<>
+ struct add_unsigned<short>
+ {
+ typedef unsigned short type;
+ };
+
+ template<>
+ struct add_unsigned<int>
+ {
+ typedef unsigned int type;
+ };
+
+ template<>
+ struct add_unsigned<long>
+ {
+ typedef unsigned long type;
+ };
+
+#ifdef BOOST_HAS_LONG_LONG
+
+ template<>
+ struct add_unsigned<long long>
+ {
+ typedef unsigned long long type;
+ };
+#endif
+
+ }
+
+ template< class T >
+ struct range_size
+ {
+ typedef BOOST_DEDUCED_TYPENAME range_detail::add_unsigned<
+ BOOST_DEDUCED_TYPENAME range_difference<T>::type >::type
+ type;
+ };
+}
+*/
+
+#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#include <boost/range/detail/size_type.hpp>
+#else
+
+#include <cstddef>
+#include <utility>
+
+namespace boost
+{
+ //////////////////////////////////////////////////////////////////////////
+ // default
+ //////////////////////////////////////////////////////////////////////////
+
+ template< typename C >
+ struct range_size
+ {
+ typedef BOOST_DEDUCED_TYPENAME C::size_type type;
+ };
+
+ //////////////////////////////////////////////////////////////////////////
+ // pair
+ //////////////////////////////////////////////////////////////////////////
+
+ template< typename Iterator >
+ struct range_size< std::pair<Iterator,Iterator> >
+ {
+ typedef std::size_t type;
+ };
+
+ template< typename Iterator >
+ struct range_size< const std::pair<Iterator,Iterator> >
+ {
+ typedef std::size_t type;
+ };
+
+ //////////////////////////////////////////////////////////////////////////
+ // array
+ //////////////////////////////////////////////////////////////////////////
+
+ template< typename T, std::size_t sz >
+ struct range_size< T[sz] >
+ {
+ typedef std::size_t type;
+ };
+
+ template< typename T, std::size_t sz >
+ struct range_size< const T[sz] >
+ {
+ typedef std::size_t type;
+ };
+
+ //////////////////////////////////////////////////////////////////////////
+ // string
+ //////////////////////////////////////////////////////////////////////////
+
+ template<>
+ struct range_size< char* >
+ {
+ typedef std::size_t type;
+ };
+
+ template<>
+ struct range_size< wchar_t* >
+ {
+ typedef std::size_t type;
+ };
+
+ template<>
+ struct range_size< const char* >
+ {
+ typedef std::size_t type;
+ };
+
+ template<>
+ struct range_size< const wchar_t* >
+ {
+ typedef std::size_t type;
+ };
+
+ template<>
+ struct range_size< char* const >
+ {
+ typedef std::size_t type;
+ };
+
+ template<>
+ struct range_size< wchar_t* const >
+ {
+ typedef std::size_t type;
+ };
+
+ template<>
+ struct range_size< const char* const >
+ {
+ typedef std::size_t type;
+ };
+
+ template<>
+ struct range_size< const wchar_t* const >
+ {
+ typedef std::size_t type;
+ };
+
+} // namespace boost
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+
+#endif
diff --git a/boost/boost/range/sub_range.hpp b/boost/boost/range/sub_range.hpp
new file mode 100644
index 00000000000..7781fcace19
--- /dev/null
+++ b/boost/boost/range/sub_range.hpp
@@ -0,0 +1,170 @@
+// Boost.Range library
+//
+// Copyright Thorsten Ottosen 2003-2004. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_SUB_RANGE_HPP
+#define BOOST_RANGE_SUB_RANGE_HPP
+
+#include <boost/range/config.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <boost/range/value_type.hpp>
+#include <boost/range/result_iterator.hpp>
+#include <boost/range/size_type.hpp>
+#include <boost/range/difference_type.hpp>
+#include <boost/assert.hpp>
+
+namespace boost
+{
+
+ template< class ForwardRange >
+ class sub_range : public iterator_range< BOOST_DEDUCED_TYPENAME range_result_iterator<ForwardRange>::type >
+ {
+ typedef BOOST_DEDUCED_TYPENAME range_result_iterator<ForwardRange>::type iterator_t;
+ typedef iterator_range< iterator_t > base;
+
+ typedef BOOST_DEDUCED_TYPENAME base::impl impl;
+ public:
+ typedef BOOST_DEDUCED_TYPENAME range_value<ForwardRange>::type value_type;
+ typedef BOOST_DEDUCED_TYPENAME range_result_iterator<ForwardRange>::type iterator;
+ typedef BOOST_DEDUCED_TYPENAME range_const_iterator<ForwardRange>::type const_iterator;
+ typedef BOOST_DEDUCED_TYPENAME range_difference<ForwardRange>::type difference_type;
+ typedef BOOST_DEDUCED_TYPENAME range_size<ForwardRange>::type size_type;
+ typedef BOOST_DEDUCED_TYPENAME base::reference reference;
+ typedef BOOST_DEDUCED_TYPENAME iterator_reference<const_iterator>::type const_reference;
+
+ public:
+ sub_range() : base()
+ { }
+
+/*
+ template< class ForwardRange2 >
+ sub_range( sub_range<ForwardRange2> r ) :
+
+#if BOOST_WORKAROUND(BOOST_INTEL_CXX_VERSION, <= 800 )
+ base( impl::adl_begin( r ), impl::adl_end( r ) )
+#else
+ base( r )
+#endif */
+
+ template< class ForwardRange2 >
+ sub_range( ForwardRange2& r ) :
+
+#if BOOST_WORKAROUND(BOOST_INTEL_CXX_VERSION, <= 800 )
+ base( impl::adl_begin( r ), impl::adl_end( r ) )
+#else
+ base( r )
+#endif
+ { }
+
+ template< class ForwardRange2 >
+ sub_range( const ForwardRange2& r ) :
+
+#if BOOST_WORKAROUND(BOOST_INTEL_CXX_VERSION, <= 800 )
+ base( impl::adl_begin( r ), impl::adl_end( r ) )
+#else
+ base( r )
+#endif
+ { }
+
+ template< class Iter >
+ sub_range( Iter first, Iter last ) :
+ base( first, last )
+ { }
+
+ template< class ForwardRange2 >
+ sub_range& operator=( ForwardRange2& r )
+ {
+ base::operator=( r );
+ return *this;
+ }
+
+ template< class ForwardRange2 >
+ sub_range& operator=( const ForwardRange2& r )
+ {
+ base::operator=( r );
+ return *this;
+ }
+
+ sub_range& operator=( sub_range r )
+ {
+ //
+ // argument passed by value to avoid
+ // const_iterator to iterator conversion
+ //
+ base::operator=( r );
+ return *this;
+ }
+
+ public:
+
+ iterator begin() { return base::begin(); }
+ const_iterator begin() const { return base::begin(); }
+ iterator end() { return base::end(); }
+ const_iterator end() const { return base::end(); }
+ size_type size() const { return base::size(); }
+
+
+ public: // convenience
+ reference front()
+ {
+ return base::front();
+ }
+
+ const_reference front() const
+ {
+ return base::front();
+ }
+
+ reference back()
+ {
+ return base::back();
+ }
+
+ const_reference back() const
+ {
+ return base::back();
+ }
+
+ reference operator[]( size_type sz )
+ {
+ return base::operator[](sz);
+ }
+
+ const_reference operator[]( size_type sz ) const
+ {
+ return base::operator[](sz);
+ }
+
+ };
+
+ template< class ForwardRange, class ForwardRange2 >
+ inline bool operator==( const sub_range<ForwardRange>& l,
+ const sub_range<ForwardRange2>& r )
+ {
+ return iterator_range_detail::equal( l, r );
+ }
+
+ template< class ForwardRange, class ForwardRange2 >
+ inline bool operator!=( const sub_range<ForwardRange>& l,
+ const sub_range<ForwardRange2>& r )
+ {
+ return !iterator_range_detail::equal( l, r );
+ }
+
+ template< class ForwardRange, class ForwardRange2 >
+ inline bool operator<( const sub_range<ForwardRange>& l,
+ const sub_range<ForwardRange2>& r )
+ {
+ return iterator_range_detail::less_than( l, r );
+ }
+
+
+} // namespace 'boost'
+
+#endif
diff --git a/boost/boost/range/value_type.hpp b/boost/boost/range/value_type.hpp
new file mode 100644
index 00000000000..15537b042a1
--- /dev/null
+++ b/boost/boost/range/value_type.hpp
@@ -0,0 +1,146 @@
+// Boost.Range library
+//
+// Copyright Thorsten Ottosen 2003-2004. Use, modification and
+// distribution is 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)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_VALUE_TYPE_HPP
+#define BOOST_RANGE_VALUE_TYPE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif
+
+#include <boost/range/config.hpp>
+#include <boost/range/iterator.hpp>
+
+#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#include <boost/range/detail/value_type.hpp>
+#else
+
+#include <boost/iterator/iterator_traits.hpp>
+
+namespace boost
+{
+ template< class T >
+ struct range_value
+ {
+ typedef BOOST_DEDUCED_TYPENAME iterator_value<
+ BOOST_DEDUCED_TYPENAME range_iterator<T>::type >::type
+ type;
+ };
+}
+
+/*
+#include <cstddef>
+#include <utility>
+
+
+namespace boost
+{
+ //////////////////////////////////////////////////////////////////////////
+ // default
+ //////////////////////////////////////////////////////////////////////////
+
+ template< typename C >
+ struct range_value
+ {
+ typedef BOOST_DEDUCED_TYPENAME C::value_type type;
+ };
+
+ //////////////////////////////////////////////////////////////////////////
+ // pair
+ //////////////////////////////////////////////////////////////////////////
+
+ template< typename Iterator >
+ struct range_value< std::pair<Iterator,Iterator> >
+ {
+ typedef BOOST_DEDUCED_TYPENAME
+ iterator_value<Iterator>::type type;
+ };
+
+
+ template< typename Iterator >
+ struct range_value< const std::pair<Iterator,Iterator> >
+ {
+ typedef BOOST_DEDUCED_TYPENAME
+ iterator_value<Iterator>::type type;
+ };
+
+ //////////////////////////////////////////////////////////////////////////
+ // array
+ //////////////////////////////////////////////////////////////////////////
+
+ template< typename T, std::size_t sz >
+ struct range_value< T[sz] >
+ {
+ typedef T type;
+ };
+
+ template< typename T, std::size_t sz >
+ struct range_value< const T[sz] >
+ {
+ typedef const T type;
+ };
+
+ //////////////////////////////////////////////////////////////////////////
+ // string
+ //////////////////////////////////////////////////////////////////////////
+
+ template<>
+ struct range_value< char* >
+ {
+ typedef char type;
+ };
+
+ template<>
+ struct range_value< wchar_t* >
+ {
+ typedef wchar_t type;
+ };
+
+ template<>
+ struct range_value< const char* >
+ {
+ typedef const char type;
+ };
+
+ template<>
+ struct range_value< const wchar_t* >
+ {
+ typedef const wchar_t type;
+ };
+
+ template<>
+ struct range_value< char* const >
+ {
+ typedef char type;
+ };
+
+ template<>
+ struct range_value< wchar_t* const >
+ {
+ typedef wchar_t type;
+ };
+
+ template<>
+ struct range_value< const char* const >
+ {
+ typedef const char type;
+ };
+
+ template<>
+ struct range_value< const wchar_t* const >
+ {
+ typedef const wchar_t type;
+ };
+
+} // namespace boost
+*/
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#endif
diff --git a/boost/boost/rational.hpp b/boost/boost/rational.hpp
new file mode 100644
index 00000000000..5986a62997c
--- /dev/null
+++ b/boost/boost/rational.hpp
@@ -0,0 +1,548 @@
+// Boost rational.hpp header file ------------------------------------------//
+
+// (C) Copyright Paul Moore 1999. Permission to copy, use, modify, sell and
+// distribute this software is granted provided this copyright notice appears
+// in all copies. This software is provided "as is" without express or
+// implied warranty, and with no claim as to its suitability for any purpose.
+
+// See http://www.boost.org/libs/rational for documentation.
+
+// Credits:
+// Thanks to the boost mailing list in general for useful comments.
+// Particular contributions included:
+// Andrew D Jewell, for reminding me to take care to avoid overflow
+// Ed Brey, for many comments, including picking up on some dreadful typos
+// Stephen Silver contributed the test suite and comments on user-defined
+// IntType
+// Nickolay Mladenov, for the implementation of operator+=
+
+// Revision History
+// 20 Oct 06 Fix operator bool_type for CW 8.3 (Joaquín M López Muñoz)
+// 18 Oct 06 Use EXPLICIT_TEMPLATE_TYPE helper macros from Boost.Config
+// (Joaquín M López Muñoz)
+// 27 Dec 05 Add Boolean conversion operator (Daryle Walker)
+// 28 Sep 02 Use _left versions of operators from operators.hpp
+// 05 Jul 01 Recode gcd(), avoiding std::swap (Helmut Zeisel)
+// 03 Mar 01 Workarounds for Intel C++ 5.0 (David Abrahams)
+// 05 Feb 01 Update operator>> to tighten up input syntax
+// 05 Feb 01 Final tidy up of gcd code prior to the new release
+// 27 Jan 01 Recode abs() without relying on abs(IntType)
+// 21 Jan 01 Include Nickolay Mladenov's operator+= algorithm,
+// tidy up a number of areas, use newer features of operators.hpp
+// (reduces space overhead to zero), add operator!,
+// introduce explicit mixed-mode arithmetic operations
+// 12 Jan 01 Include fixes to handle a user-defined IntType better
+// 19 Nov 00 Throw on divide by zero in operator /= (John (EBo) David)
+// 23 Jun 00 Incorporate changes from Mark Rodgers for Borland C++
+// 22 Jun 00 Change _MSC_VER to BOOST_MSVC so other compilers are not
+// affected (Beman Dawes)
+// 6 Mar 00 Fix operator-= normalization, #include <string> (Jens Maurer)
+// 14 Dec 99 Modifications based on comments from the boost list
+// 09 Dec 99 Initial Version (Paul Moore)
+
+#ifndef BOOST_RATIONAL_HPP
+#define BOOST_RATIONAL_HPP
+
+#include <iostream> // for std::istream and std::ostream
+#include <iomanip> // for std::noskipws
+#include <stdexcept> // for std::domain_error
+#include <string> // for std::string implicit constructor
+#include <boost/operators.hpp> // for boost::addable etc
+#include <cstdlib> // for std::abs
+#include <boost/call_traits.hpp> // for boost::call_traits
+#include <boost/config.hpp> // for BOOST_NO_STDC_NAMESPACE, BOOST_MSVC
+#include <boost/detail/workaround.hpp> // for BOOST_WORKAROUND
+
+namespace boost {
+
+// Note: We use n and m as temporaries in this function, so there is no value
+// in using const IntType& as we would only need to make a copy anyway...
+template <typename IntType>
+IntType gcd(IntType n, IntType m)
+{
+ // Avoid repeated construction
+ IntType zero(0);
+
+ // This is abs() - given the existence of broken compilers with Koenig
+ // lookup issues and other problems, I code this explicitly. (Remember,
+ // IntType may be a user-defined type).
+ if (n < zero)
+ n = -n;
+ if (m < zero)
+ m = -m;
+
+ // As n and m are now positive, we can be sure that %= returns a
+ // positive value (the standard guarantees this for built-in types,
+ // and we require it of user-defined types).
+ for(;;) {
+ if(m == zero)
+ return n;
+ n %= m;
+ if(n == zero)
+ return m;
+ m %= n;
+ }
+}
+
+template <typename IntType>
+IntType lcm(IntType n, IntType m)
+{
+ // Avoid repeated construction
+ IntType zero(0);
+
+ if (n == zero || m == zero)
+ return zero;
+
+ n /= gcd(n, m);
+ n *= m;
+
+ if (n < zero)
+ n = -n;
+ return n;
+}
+
+class bad_rational : public std::domain_error
+{
+public:
+ explicit bad_rational() : std::domain_error("bad rational: zero denominator") {}
+};
+
+template <typename IntType>
+class rational;
+
+template <typename IntType>
+rational<IntType> abs(const rational<IntType>& r);
+
+template <typename IntType>
+class rational :
+ less_than_comparable < rational<IntType>,
+ equality_comparable < rational<IntType>,
+ less_than_comparable2 < rational<IntType>, IntType,
+ equality_comparable2 < rational<IntType>, IntType,
+ addable < rational<IntType>,
+ subtractable < rational<IntType>,
+ multipliable < rational<IntType>,
+ dividable < rational<IntType>,
+ addable2 < rational<IntType>, IntType,
+ subtractable2 < rational<IntType>, IntType,
+ subtractable2_left < rational<IntType>, IntType,
+ multipliable2 < rational<IntType>, IntType,
+ dividable2 < rational<IntType>, IntType,
+ dividable2_left < rational<IntType>, IntType,
+ incrementable < rational<IntType>,
+ decrementable < rational<IntType>
+ > > > > > > > > > > > > > > > >
+{
+ typedef typename boost::call_traits<IntType>::param_type param_type;
+
+ struct helper { IntType parts[2]; };
+ typedef IntType (helper::* bool_type)[2];
+
+public:
+ typedef IntType int_type;
+ rational() : num(0), den(1) {}
+ rational(param_type n) : num(n), den(1) {}
+ rational(param_type n, param_type d) : num(n), den(d) { normalize(); }
+
+ // Default copy constructor and assignment are fine
+
+ // Add assignment from IntType
+ rational& operator=(param_type n) { return assign(n, 1); }
+
+ // Assign in place
+ rational& assign(param_type n, param_type d);
+
+ // Access to representation
+ IntType numerator() const { return num; }
+ IntType denominator() const { return den; }
+
+ // Arithmetic assignment operators
+ rational& operator+= (const rational& r);
+ rational& operator-= (const rational& r);
+ rational& operator*= (const rational& r);
+ rational& operator/= (const rational& r);
+
+ rational& operator+= (param_type i);
+ rational& operator-= (param_type i);
+ rational& operator*= (param_type i);
+ rational& operator/= (param_type i);
+
+ // Increment and decrement
+ const rational& operator++();
+ const rational& operator--();
+
+ // Operator not
+ bool operator!() const { return !num; }
+
+ // Boolean conversion
+
+#if BOOST_WORKAROUND(__MWERKS__,<=0x3003)
+ // The "ISO C++ Template Parser" option in CW 8.3 chokes on the
+ // following, hence we selectively disable that option for the
+ // offending memfun.
+#pragma parse_mfunc_templ off
+#endif
+
+ operator bool_type() const { return operator !() ? 0 : &helper::parts; }
+
+#if BOOST_WORKAROUND(__MWERKS__,<=0x3003)
+#pragma parse_mfunc_templ reset
+#endif
+
+ // Comparison operators
+ bool operator< (const rational& r) const;
+ bool operator== (const rational& r) const;
+
+ bool operator< (param_type i) const;
+ bool operator> (param_type i) const;
+ bool operator== (param_type i) const;
+
+private:
+ // Implementation - numerator and denominator (normalized).
+ // Other possibilities - separate whole-part, or sign, fields?
+ IntType num;
+ IntType den;
+
+ // Representation note: Fractions are kept in normalized form at all
+ // times. normalized form is defined as gcd(num,den) == 1 and den > 0.
+ // In particular, note that the implementation of abs() below relies
+ // on den always being positive.
+ void normalize();
+};
+
+// Assign in place
+template <typename IntType>
+inline rational<IntType>& rational<IntType>::assign(param_type n, param_type d)
+{
+ num = n;
+ den = d;
+ normalize();
+ return *this;
+}
+
+// Unary plus and minus
+template <typename IntType>
+inline rational<IntType> operator+ (const rational<IntType>& r)
+{
+ return r;
+}
+
+template <typename IntType>
+inline rational<IntType> operator- (const rational<IntType>& r)
+{
+ return rational<IntType>(-r.numerator(), r.denominator());
+}
+
+// Arithmetic assignment operators
+template <typename IntType>
+rational<IntType>& rational<IntType>::operator+= (const rational<IntType>& r)
+{
+ // This calculation avoids overflow, and minimises the number of expensive
+ // calculations. Thanks to Nickolay Mladenov for this algorithm.
+ //
+ // Proof:
+ // We have to compute a/b + c/d, where gcd(a,b)=1 and gcd(b,c)=1.
+ // Let g = gcd(b,d), and b = b1*g, d=d1*g. Then gcd(b1,d1)=1
+ //
+ // The result is (a*d1 + c*b1) / (b1*d1*g).
+ // Now we have to normalize this ratio.
+ // Let's assume h | gcd((a*d1 + c*b1), (b1*d1*g)), and h > 1
+ // If h | b1 then gcd(h,d1)=1 and hence h|(a*d1+c*b1) => h|a.
+ // But since gcd(a,b1)=1 we have h=1.
+ // Similarly h|d1 leads to h=1.
+ // So we have that h | gcd((a*d1 + c*b1) , (b1*d1*g)) => h|g
+ // Finally we have gcd((a*d1 + c*b1), (b1*d1*g)) = gcd((a*d1 + c*b1), g)
+ // Which proves that instead of normalizing the result, it is better to
+ // divide num and den by gcd((a*d1 + c*b1), g)
+
+ // Protect against self-modification
+ IntType r_num = r.num;
+ IntType r_den = r.den;
+
+ IntType g = gcd(den, r_den);
+ den /= g; // = b1 from the calculations above
+ num = num * (r_den / g) + r_num * den;
+ g = gcd(num, g);
+ num /= g;
+ den *= r_den/g;
+
+ return *this;
+}
+
+template <typename IntType>
+rational<IntType>& rational<IntType>::operator-= (const rational<IntType>& r)
+{
+ // Protect against self-modification
+ IntType r_num = r.num;
+ IntType r_den = r.den;
+
+ // This calculation avoids overflow, and minimises the number of expensive
+ // calculations. It corresponds exactly to the += case above
+ IntType g = gcd(den, r_den);
+ den /= g;
+ num = num * (r_den / g) - r_num * den;
+ g = gcd(num, g);
+ num /= g;
+ den *= r_den/g;
+
+ return *this;
+}
+
+template <typename IntType>
+rational<IntType>& rational<IntType>::operator*= (const rational<IntType>& r)
+{
+ // Protect against self-modification
+ IntType r_num = r.num;
+ IntType r_den = r.den;
+
+ // Avoid overflow and preserve normalization
+ IntType gcd1 = gcd<IntType>(num, r_den);
+ IntType gcd2 = gcd<IntType>(r_num, den);
+ num = (num/gcd1) * (r_num/gcd2);
+ den = (den/gcd2) * (r_den/gcd1);
+ return *this;
+}
+
+template <typename IntType>
+rational<IntType>& rational<IntType>::operator/= (const rational<IntType>& r)
+{
+ // Protect against self-modification
+ IntType r_num = r.num;
+ IntType r_den = r.den;
+
+ // Avoid repeated construction
+ IntType zero(0);
+
+ // Trap division by zero
+ if (r_num == zero)
+ throw bad_rational();
+ if (num == zero)
+ return *this;
+
+ // Avoid overflow and preserve normalization
+ IntType gcd1 = gcd<IntType>(num, r_num);
+ IntType gcd2 = gcd<IntType>(r_den, den);
+ num = (num/gcd1) * (r_den/gcd2);
+ den = (den/gcd2) * (r_num/gcd1);
+
+ if (den < zero) {
+ num = -num;
+ den = -den;
+ }
+ return *this;
+}
+
+// Mixed-mode operators
+template <typename IntType>
+inline rational<IntType>&
+rational<IntType>::operator+= (param_type i)
+{
+ return operator+= (rational<IntType>(i));
+}
+
+template <typename IntType>
+inline rational<IntType>&
+rational<IntType>::operator-= (param_type i)
+{
+ return operator-= (rational<IntType>(i));
+}
+
+template <typename IntType>
+inline rational<IntType>&
+rational<IntType>::operator*= (param_type i)
+{
+ return operator*= (rational<IntType>(i));
+}
+
+template <typename IntType>
+inline rational<IntType>&
+rational<IntType>::operator/= (param_type i)
+{
+ return operator/= (rational<IntType>(i));
+}
+
+// Increment and decrement
+template <typename IntType>
+inline const rational<IntType>& rational<IntType>::operator++()
+{
+ // This can never denormalise the fraction
+ num += den;
+ return *this;
+}
+
+template <typename IntType>
+inline const rational<IntType>& rational<IntType>::operator--()
+{
+ // This can never denormalise the fraction
+ num -= den;
+ return *this;
+}
+
+// Comparison operators
+template <typename IntType>
+bool rational<IntType>::operator< (const rational<IntType>& r) const
+{
+ // Avoid repeated construction
+ IntType zero(0);
+
+ // If the two values have different signs, we don't need to do the
+ // expensive calculations below. We take advantage here of the fact
+ // that the denominator is always positive.
+ if (num < zero && r.num >= zero) // -ve < +ve
+ return true;
+ if (num >= zero && r.num <= zero) // +ve or zero is not < -ve or zero
+ return false;
+
+ // Avoid overflow
+ IntType gcd1 = gcd<IntType>(num, r.num);
+ IntType gcd2 = gcd<IntType>(r.den, den);
+ return (num/gcd1) * (r.den/gcd2) < (den/gcd2) * (r.num/gcd1);
+}
+
+template <typename IntType>
+bool rational<IntType>::operator< (param_type i) const
+{
+ // Avoid repeated construction
+ IntType zero(0);
+
+ // If the two values have different signs, we don't need to do the
+ // expensive calculations below. We take advantage here of the fact
+ // that the denominator is always positive.
+ if (num < zero && i >= zero) // -ve < +ve
+ return true;
+ if (num >= zero && i <= zero) // +ve or zero is not < -ve or zero
+ return false;
+
+ // Now, use the fact that n/d truncates towards zero as long as n and d
+ // are both positive.
+ // Divide instead of multiplying to avoid overflow issues. Of course,
+ // division may be slower, but accuracy is more important than speed...
+ if (num > zero)
+ return (num/den) < i;
+ else
+ return -i < (-num/den);
+}
+
+template <typename IntType>
+bool rational<IntType>::operator> (param_type i) const
+{
+ // Trap equality first
+ if (num == i && den == IntType(1))
+ return false;
+
+ // Otherwise, we can use operator<
+ return !operator<(i);
+}
+
+template <typename IntType>
+inline bool rational<IntType>::operator== (const rational<IntType>& r) const
+{
+ return ((num == r.num) && (den == r.den));
+}
+
+template <typename IntType>
+inline bool rational<IntType>::operator== (param_type i) const
+{
+ return ((den == IntType(1)) && (num == i));
+}
+
+// Normalisation
+template <typename IntType>
+void rational<IntType>::normalize()
+{
+ // Avoid repeated construction
+ IntType zero(0);
+
+ if (den == zero)
+ throw bad_rational();
+
+ // Handle the case of zero separately, to avoid division by zero
+ if (num == zero) {
+ den = IntType(1);
+ return;
+ }
+
+ IntType g = gcd<IntType>(num, den);
+
+ num /= g;
+ den /= g;
+
+ // Ensure that the denominator is positive
+ if (den < zero) {
+ num = -num;
+ den = -den;
+ }
+}
+
+namespace detail {
+
+ // A utility class to reset the format flags for an istream at end
+ // of scope, even in case of exceptions
+ struct resetter {
+ resetter(std::istream& is) : is_(is), f_(is.flags()) {}
+ ~resetter() { is_.flags(f_); }
+ std::istream& is_;
+ std::istream::fmtflags f_; // old GNU c++ lib has no ios_base
+ };
+
+}
+
+// Input and output
+template <typename IntType>
+std::istream& operator>> (std::istream& is, rational<IntType>& r)
+{
+ IntType n = IntType(0), d = IntType(1);
+ char c = 0;
+ detail::resetter sentry(is);
+
+ is >> n;
+ c = is.get();
+
+ if (c != '/')
+ is.clear(std::istream::badbit); // old GNU c++ lib has no ios_base
+
+#if !defined(__GNUC__) || (defined(__GNUC__) && (__GNUC__ >= 3)) || defined __SGI_STL_PORT
+ is >> std::noskipws;
+#else
+ is.unsetf(ios::skipws); // compiles, but seems to have no effect.
+#endif
+ is >> d;
+
+ if (is)
+ r.assign(n, d);
+
+ return is;
+}
+
+// Add manipulators for output format?
+template <typename IntType>
+std::ostream& operator<< (std::ostream& os, const rational<IntType>& r)
+{
+ os << r.numerator() << '/' << r.denominator();
+ return os;
+}
+
+// Type conversion
+template <typename T, typename IntType>
+inline T rational_cast(
+ const rational<IntType>& src BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(T))
+{
+ return static_cast<T>(src.numerator())/src.denominator();
+}
+
+// Do not use any abs() defined on IntType - it isn't worth it, given the
+// difficulties involved (Koenig lookup required, there may not *be* an abs()
+// defined, etc etc).
+template <typename IntType>
+inline rational<IntType> abs(const rational<IntType>& r)
+{
+ if (r.numerator() >= IntType(0))
+ return r;
+
+ return rational<IntType>(-r.numerator(), r.denominator());
+}
+
+} // namespace boost
+
+#endif // BOOST_RATIONAL_HPP
+
diff --git a/boost/boost/ref.hpp b/boost/boost/ref.hpp
new file mode 100644
index 00000000000..ab09ae7412d
--- /dev/null
+++ b/boost/boost/ref.hpp
@@ -0,0 +1,178 @@
+#ifndef BOOST_REF_HPP_INCLUDED
+#define BOOST_REF_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp>
+#include <boost/utility/addressof.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/detail/workaround.hpp>
+
+//
+// ref.hpp - ref/cref, useful helper functions
+//
+// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi@cs.utu.fi)
+// Copyright (C) 2001, 2002 Peter Dimov
+// 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)
+//
+// See http://www.boost.org/libs/bind/ref.html for documentation.
+//
+
+namespace boost
+{
+
+template<class T> class reference_wrapper
+{
+public:
+ typedef T type;
+
+#if defined( BOOST_MSVC ) && BOOST_WORKAROUND( BOOST_MSVC, < 1300 )
+
+ explicit reference_wrapper(T& t): t_(&t) {}
+
+#else
+
+ explicit reference_wrapper(T& t): t_(boost::addressof(t)) {}
+
+#endif
+
+ operator T& () const { return *t_; }
+
+ T& get() const { return *t_; }
+
+ T* get_pointer() const { return t_; }
+
+private:
+
+ T* t_;
+};
+
+# if defined( __BORLANDC__ ) && BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT(0x581) )
+# define BOOST_REF_CONST
+# else
+# define BOOST_REF_CONST const
+# endif
+
+template<class T> inline reference_wrapper<T> BOOST_REF_CONST ref(T & t)
+{
+ return reference_wrapper<T>(t);
+}
+
+template<class T> inline reference_wrapper<T const> BOOST_REF_CONST cref(T const & t)
+{
+ return reference_wrapper<T const>(t);
+}
+
+# undef BOOST_REF_CONST
+
+# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+template<typename T>
+class is_reference_wrapper
+ : public mpl::false_
+{
+};
+
+template<typename T>
+class unwrap_reference
+{
+ public:
+ typedef T type;
+};
+
+# define AUX_REFERENCE_WRAPPER_METAFUNCTIONS_DEF(X) \
+template<typename T> \
+class is_reference_wrapper< X > \
+ : public mpl::true_ \
+{ \
+}; \
+\
+template<typename T> \
+class unwrap_reference< X > \
+{ \
+ public: \
+ typedef T type; \
+}; \
+/**/
+
+AUX_REFERENCE_WRAPPER_METAFUNCTIONS_DEF(reference_wrapper<T>)
+#if !defined(BOOST_NO_CV_SPECIALIZATIONS)
+AUX_REFERENCE_WRAPPER_METAFUNCTIONS_DEF(reference_wrapper<T> const)
+AUX_REFERENCE_WRAPPER_METAFUNCTIONS_DEF(reference_wrapper<T> volatile)
+AUX_REFERENCE_WRAPPER_METAFUNCTIONS_DEF(reference_wrapper<T> const volatile)
+#endif
+
+# undef AUX_REFERENCE_WRAPPER_METAFUNCTIONS_DEF
+
+# else // no partial specialization
+
+} // namespace boost
+
+#include <boost/type.hpp>
+
+namespace boost
+{
+
+namespace detail
+{
+ typedef char (&yes_reference_wrapper_t)[1];
+ typedef char (&no_reference_wrapper_t)[2];
+
+ no_reference_wrapper_t is_reference_wrapper_test(...);
+
+ template<typename T>
+ yes_reference_wrapper_t is_reference_wrapper_test(type< reference_wrapper<T> >);
+
+ template<bool wrapped>
+ struct reference_unwrapper
+ {
+ template <class T>
+ struct apply
+ {
+ typedef T type;
+ };
+ };
+
+ template<>
+ struct reference_unwrapper<true>
+ {
+ template <class T>
+ struct apply
+ {
+ typedef typename T::type type;
+ };
+ };
+}
+
+template<typename T>
+class is_reference_wrapper
+{
+ public:
+ BOOST_STATIC_CONSTANT(
+ bool, value = (
+ sizeof(detail::is_reference_wrapper_test(type<T>()))
+ == sizeof(detail::yes_reference_wrapper_t)));
+
+ typedef ::boost::mpl::bool_<value> type;
+};
+
+template <typename T>
+class unwrap_reference
+ : public detail::reference_unwrapper<
+ is_reference_wrapper<T>::value
+ >::template apply<T>
+{};
+
+# endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+} // namespace boost
+
+#endif // #ifndef BOOST_REF_HPP_INCLUDED
diff --git a/boost/boost/regex.h b/boost/boost/regex.h
new file mode 100644
index 00000000000..52af275cfa2
--- /dev/null
+++ b/boost/boost/regex.h
@@ -0,0 +1,100 @@
+/*
+ *
+ * Copyright (c) 1998-2000
+ * Dr John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org/libs/regex for documentation.
+ * FILE regex.h
+ * VERSION 3.12
+ * DESCRIPTION: Declares POSIX API functions
+ */
+
+#ifndef BOOST_RE_REGEX_H
+#define BOOST_RE_REGEX_H
+
+#include <boost/cregex.hpp>
+
+/*
+* add using declarations to bring POSIX API functions into
+* global scope, only if this is C++ (and not C).
+*/
+#ifdef __cplusplus
+
+using boost::regoff_t;
+using boost::regex_tA;
+using boost::regmatch_t;
+using boost::REG_BASIC;
+using boost::REG_EXTENDED;
+using boost::REG_ICASE;
+using boost::REG_NOSUB;
+using boost::REG_NEWLINE;
+using boost::REG_NOSPEC;
+using boost::REG_PEND;
+using boost::REG_DUMP;
+using boost::REG_NOCOLLATE;
+using boost::REG_ESCAPE_IN_LISTS;
+using boost::REG_NEWLINE_ALT;
+using boost::REG_PERL;
+using boost::REG_AWK;
+using boost::REG_GREP;
+using boost::REG_EGREP;
+using boost::REG_ASSERT;
+using boost::REG_INVARG;
+using boost::REG_ATOI;
+using boost::REG_ITOA;
+
+using boost::REG_NOTBOL;
+using boost::REG_NOTEOL;
+using boost::REG_STARTEND;
+
+using boost::reg_comp_flags;
+using boost::reg_exec_flags;
+using boost::regcompA;
+using boost::regerrorA;
+using boost::regexecA;
+using boost::regfreeA;
+
+#ifndef BOOST_NO_WREGEX
+using boost::regcompW;
+using boost::regerrorW;
+using boost::regexecW;
+using boost::regfreeW;
+using boost::regex_tW;
+#endif
+
+using boost::REG_NOERROR;
+using boost::REG_NOMATCH;
+using boost::REG_BADPAT;
+using boost::REG_ECOLLATE;
+using boost::REG_ECTYPE;
+using boost::REG_EESCAPE;
+using boost::REG_ESUBREG;
+using boost::REG_EBRACK;
+using boost::REG_EPAREN;
+using boost::REG_EBRACE;
+using boost::REG_BADBR;
+using boost::REG_ERANGE;
+using boost::REG_ESPACE;
+using boost::REG_BADRPT;
+using boost::REG_EEND;
+using boost::REG_ESIZE;
+using boost::REG_ERPAREN;
+using boost::REG_EMPTY;
+using boost::REG_E_MEMORY;
+using boost::REG_E_UNKNOWN;
+using boost::reg_errcode_t;
+
+#endif /* __cplusplus */
+
+#endif /* BOOST_RE_REGEX_H */
+
+
+
+
diff --git a/boost/boost/regex.hpp b/boost/boost/regex.hpp
new file mode 100644
index 00000000000..6dc3dfbd427
--- /dev/null
+++ b/boost/boost/regex.hpp
@@ -0,0 +1,37 @@
+/*
+ *
+ * Copyright (c) 1998-2002
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org/libs/regex for documentation.
+ * FILE regex.cpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: Declares boost::basic_regex<> and associated
+ * functions and classes. This header is the main
+ * entry point for the template regex code.
+ */
+
+
+/* start with C compatibility API */
+
+#ifndef BOOST_RE_REGEX_HPP
+#define BOOST_RE_REGEX_HPP
+
+#ifndef BOOST_REGEX_CONFIG_HPP
+#include <boost/regex/config.hpp>
+#endif
+
+#include <boost/regex/v4/regex.hpp>
+
+#endif // include
+
+
+
+
diff --git a/boost/boost/regex/concepts.hpp b/boost/boost/regex/concepts.hpp
new file mode 100644
index 00000000000..d90054636fd
--- /dev/null
+++ b/boost/boost/regex/concepts.hpp
@@ -0,0 +1,870 @@
+/*
+ *
+ * Copyright (c) 2004
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE concepts.hpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: Declares regular expression concepts.
+ */
+
+#ifndef BOOST_REGEX_CONCEPTS_HPP_INCLUDED
+#define BOOST_REGEX_CONCEPTS_HPP_INCLUDED
+
+#include <boost/concept_archetype.hpp>
+#include <boost/concept_check.hpp>
+#include <boost/type_traits/is_enum.hpp>
+#include <boost/type_traits/is_base_and_derived.hpp>
+#include <boost/static_assert.hpp>
+#ifndef BOOST_TEST_TR1_REGEX
+#include <boost/regex.hpp>
+#endif
+#include <bitset>
+#include <vector>
+#include <iostream>
+
+namespace boost{
+
+//
+// bitmask_archetype:
+// this can be either an integer type, an enum, or a std::bitset,
+// we use the latter as the architype as it offers the "strictest"
+// of the possible interfaces:
+//
+typedef std::bitset<512> bitmask_archetype;
+//
+// char_architype:
+// A strict model for the character type interface.
+//
+struct char_architype
+{
+ // default constructable:
+ char_architype();
+ // copy constructable / assignable:
+ char_architype(const char_architype&);
+ char_architype& operator=(const char_architype&);
+ // constructable from an integral value:
+ char_architype(unsigned long val);
+ // comparable:
+ bool operator==(const char_architype&)const;
+ bool operator!=(const char_architype&)const;
+ bool operator<(const char_architype&)const;
+ bool operator<=(const char_architype&)const;
+ bool operator>=(const char_architype&)const;
+ bool operator>(const char_architype&)const;
+ // conversion to integral type:
+ operator long()const;
+};
+//
+// char_architype can not be used with basic_string:
+//
+} // namespace boost
+namespace std{
+ template<> struct char_traits<boost::char_architype>
+ {
+ // The intent is that this template is not instantiated,
+ // but this typedef gives us a chance of compilation in
+ // case it is:
+ typedef boost::char_architype char_type;
+ };
+}
+namespace boost{
+//
+// regex_traits_architype:
+// A strict interpretation of the regular expression traits class requirements.
+//
+template <class charT>
+struct regex_traits_architype
+{
+public:
+ regex_traits_architype();
+ typedef charT char_type;
+ typedef std::size_t size_type;
+ typedef std::vector<char_type> string_type;
+ typedef copy_constructible_archetype<assignable_archetype<> > locale_type;
+ typedef bitmask_archetype char_class_type;
+
+ static size_type length(const char_type* ) { return 0; }
+
+ charT translate(charT ) const { return charT(); }
+ charT translate_nocase(charT ) const { return static_object<charT>::get(); }
+
+ template <class ForwardIterator>
+ string_type transform(ForwardIterator , ForwardIterator ) const
+ { return static_object<string_type>::get(); }
+ template <class ForwardIterator>
+ string_type transform_primary(ForwardIterator , ForwardIterator ) const
+ { return static_object<string_type>::get(); }
+
+ template <class ForwardIterator>
+ char_class_type lookup_classname(ForwardIterator , ForwardIterator ) const
+ { return static_object<char_class_type>::get(); }
+ template <class ForwardIterator>
+ string_type lookup_collatename(ForwardIterator , ForwardIterator ) const
+ { return static_object<string_type>::get(); }
+
+ bool isctype(charT, char_class_type) const
+ { return false; }
+ int value(charT, int) const
+ { return 0; }
+
+ locale_type imbue(locale_type l)
+ { return l; }
+ locale_type getloc()const
+ { return static_object<locale_type>::get(); }
+
+private:
+ // this type is not copyable:
+ regex_traits_architype(const regex_traits_architype&);
+ regex_traits_architype& operator=(const regex_traits_architype&);
+};
+
+//
+// alter this to std::tr1, to test a std implementation:
+//
+#ifndef BOOST_TEST_TR1_REGEX
+namespace global_regex_namespace = ::boost;
+#else
+namespace global_regex_namespace = ::std::tr1;
+#endif
+
+template <class Bitmask>
+struct BitmaskConcept
+{
+ void constraints()
+ {
+ function_requires<CopyConstructibleConcept<Bitmask> >();
+ function_requires<AssignableConcept<Bitmask> >();
+
+ m_mask1 = m_mask2 | m_mask3;
+ m_mask1 = m_mask2 & m_mask3;
+ m_mask1 = m_mask2 ^ m_mask3;
+
+ m_mask1 = ~m_mask2;
+
+ m_mask1 |= m_mask2;
+ m_mask1 &= m_mask2;
+ m_mask1 ^= m_mask2;
+ }
+ Bitmask m_mask1, m_mask2, m_mask3;
+};
+
+template <class traits>
+struct RegexTraitsConcept
+{
+ RegexTraitsConcept();
+ // required typedefs:
+ typedef typename traits::char_type char_type;
+ typedef typename traits::size_type size_type;
+ typedef typename traits::string_type string_type;
+ typedef typename traits::locale_type locale_type;
+ typedef typename traits::char_class_type char_class_type;
+
+ void constraints()
+ {
+ function_requires<UnsignedIntegerConcept<size_type> >();
+ function_requires<RandomAccessContainerConcept<string_type> >();
+ function_requires<DefaultConstructibleConcept<locale_type> >();
+ function_requires<CopyConstructibleConcept<locale_type> >();
+ function_requires<AssignableConcept<locale_type> >();
+ function_requires<BitmaskConcept<char_class_type> >();
+
+ size_type n = traits::length(m_pointer);
+ ignore_unused_variable_warning(n);
+
+ char_type c = m_ctraits.translate(m_char);
+ ignore_unused_variable_warning(c);
+ c = m_ctraits.translate_nocase(m_char);
+
+ //string_type::foobar bar;
+ string_type s1 = m_ctraits.transform(m_pointer, m_pointer);
+ ignore_unused_variable_warning(s1);
+
+ string_type s2 = m_ctraits.transform_primary(m_pointer, m_pointer);
+ ignore_unused_variable_warning(s2);
+
+ char_class_type cc = m_ctraits.lookup_classname(m_pointer, m_pointer);
+ ignore_unused_variable_warning(cc);
+
+ string_type s3 = m_ctraits.lookup_collatename(m_pointer, m_pointer);
+ ignore_unused_variable_warning(s3);
+
+ bool b = m_ctraits.isctype(m_char, cc);
+ ignore_unused_variable_warning(b);
+
+ int v = m_ctraits.value(m_char, 16);
+ ignore_unused_variable_warning(v);
+
+ locale_type l(m_ctraits.getloc());
+ m_traits.imbue(l);
+ ignore_unused_variable_warning(l);
+ }
+ traits m_traits;
+ const traits m_ctraits;
+ const char_type* m_pointer;
+ char_type m_char;
+private:
+ RegexTraitsConcept& operator=(RegexTraitsConcept&);
+};
+
+//
+// helper class to compute what traits class a regular expression type is using:
+//
+template <class Regex>
+struct regex_traits_computer;
+
+template <class charT, class traits>
+struct regex_traits_computer< global_regex_namespace::basic_regex<charT, traits> >
+{
+ typedef traits type;
+};
+
+//
+// BaseRegexConcept does not test anything dependent on basic_string,
+// in case our charT does not have an associated char_traits:
+//
+template <class Regex>
+struct BaseRegexConcept
+{
+ typedef typename Regex::value_type value_type;
+ typedef typename Regex::size_type size_type;
+ typedef typename Regex::flag_type flag_type;
+ typedef typename Regex::locale_type locale_type;
+ typedef input_iterator_archetype<value_type> input_iterator_type;
+
+ // derived test types:
+ typedef const value_type* pointer_type;
+ typedef bidirectional_iterator_archetype<value_type> BidiIterator;
+ typedef global_regex_namespace::sub_match<BidiIterator> sub_match_type;
+ typedef global_regex_namespace::match_results<BidiIterator> match_results_type;
+ typedef output_iterator_archetype<value_type> OutIterator;
+ typedef typename regex_traits_computer<Regex>::type traits_type;
+ typedef global_regex_namespace::regex_iterator<BidiIterator, value_type, traits_type> regex_iterator_type;
+ typedef global_regex_namespace::regex_token_iterator<BidiIterator, value_type, traits_type> regex_token_iterator_type;
+
+ void global_constraints()
+ {
+ //
+ // test non-template components:
+ //
+ function_requires<BitmaskConcept<global_regex_namespace::regex_constants::syntax_option_type> >();
+ global_regex_namespace::regex_constants::syntax_option_type opts
+ = global_regex_namespace::regex_constants::icase
+ | global_regex_namespace::regex_constants::nosubs
+ | global_regex_namespace::regex_constants::optimize
+ | global_regex_namespace::regex_constants::collate
+ | global_regex_namespace::regex_constants::ECMAScript
+ | global_regex_namespace::regex_constants::basic
+ | global_regex_namespace::regex_constants::extended
+ | global_regex_namespace::regex_constants::awk
+ | global_regex_namespace::regex_constants::grep
+ | global_regex_namespace::regex_constants::egrep;
+ ignore_unused_variable_warning(opts);
+
+ function_requires<BitmaskConcept<global_regex_namespace::regex_constants::match_flag_type> >();
+ global_regex_namespace::regex_constants::match_flag_type mopts
+ = global_regex_namespace::regex_constants::match_default
+ | global_regex_namespace::regex_constants::match_not_bol
+ | global_regex_namespace::regex_constants::match_not_eol
+ | global_regex_namespace::regex_constants::match_not_bow
+ | global_regex_namespace::regex_constants::match_not_eow
+ | global_regex_namespace::regex_constants::match_any
+ | global_regex_namespace::regex_constants::match_not_null
+ | global_regex_namespace::regex_constants::match_continuous
+ | global_regex_namespace::regex_constants::match_prev_avail
+ | global_regex_namespace::regex_constants::format_default
+ | global_regex_namespace::regex_constants::format_sed
+ | global_regex_namespace::regex_constants::format_no_copy
+ | global_regex_namespace::regex_constants::format_first_only;
+ ignore_unused_variable_warning(mopts);
+
+ BOOST_STATIC_ASSERT((::boost::is_enum<global_regex_namespace::regex_constants::error_type>::value));
+ global_regex_namespace::regex_constants::error_type e1 = global_regex_namespace::regex_constants::error_collate;
+ ignore_unused_variable_warning(e1);
+ e1 = global_regex_namespace::regex_constants::error_ctype;
+ ignore_unused_variable_warning(e1);
+ e1 = global_regex_namespace::regex_constants::error_escape;
+ ignore_unused_variable_warning(e1);
+ e1 = global_regex_namespace::regex_constants::error_backref;
+ ignore_unused_variable_warning(e1);
+ e1 = global_regex_namespace::regex_constants::error_brack;
+ ignore_unused_variable_warning(e1);
+ e1 = global_regex_namespace::regex_constants::error_paren;
+ ignore_unused_variable_warning(e1);
+ e1 = global_regex_namespace::regex_constants::error_brace;
+ ignore_unused_variable_warning(e1);
+ e1 = global_regex_namespace::regex_constants::error_badbrace;
+ ignore_unused_variable_warning(e1);
+ e1 = global_regex_namespace::regex_constants::error_range;
+ ignore_unused_variable_warning(e1);
+ e1 = global_regex_namespace::regex_constants::error_space;
+ ignore_unused_variable_warning(e1);
+ e1 = global_regex_namespace::regex_constants::error_badrepeat;
+ ignore_unused_variable_warning(e1);
+ e1 = global_regex_namespace::regex_constants::error_complexity;
+ ignore_unused_variable_warning(e1);
+ e1 = global_regex_namespace::regex_constants::error_stack;
+ ignore_unused_variable_warning(e1);
+
+ BOOST_STATIC_ASSERT((::boost::is_base_and_derived<std::runtime_error, global_regex_namespace::regex_error>::value ));
+ const global_regex_namespace::regex_error except(e1);
+ e1 = except.code();
+
+ typedef typename Regex::value_type value_type;
+ function_requires< RegexTraitsConcept<global_regex_namespace::regex_traits<char> > >();
+ function_requires< BaseRegexConcept<global_regex_namespace::basic_regex<char> > >();
+ }
+ void constraints()
+ {
+ global_constraints();
+
+ BOOST_STATIC_ASSERT((::boost::is_same< flag_type, global_regex_namespace::regex_constants::syntax_option_type>::value));
+ flag_type opts
+ = Regex::icase
+ | Regex::nosubs
+ | Regex::optimize
+ | Regex::collate
+ | Regex::ECMAScript
+ | Regex::basic
+ | Regex::extended
+ | Regex::awk
+ | Regex::grep
+ | Regex::egrep;
+ ignore_unused_variable_warning(opts);
+
+ function_requires<DefaultConstructibleConcept<Regex> >();
+ function_requires<CopyConstructibleConcept<Regex> >();
+
+ // Regex constructors:
+ Regex e1(m_pointer);
+ ignore_unused_variable_warning(e1);
+ Regex e2(m_pointer, m_flags);
+ ignore_unused_variable_warning(e2);
+ Regex e3(m_pointer, m_size, m_flags);
+ ignore_unused_variable_warning(e3);
+ Regex e4(in1, in2);
+ ignore_unused_variable_warning(e4);
+ Regex e5(in1, in2, m_flags);
+ ignore_unused_variable_warning(e5);
+
+ // assign etc:
+ Regex e;
+ e = m_pointer;
+ e = e1;
+ e.assign(e1);
+ e.assign(m_pointer);
+ e.assign(m_pointer, m_flags);
+ e.assign(m_pointer, m_size, m_flags);
+ e.assign(in1, in2);
+ e.assign(in1, in2, m_flags);
+
+ // access:
+ const Regex ce;
+ bool b = ce.empty();
+ ignore_unused_variable_warning(b);
+ size_type i = ce.mark_count();
+ ignore_unused_variable_warning(i);
+ m_flags = ce.flags();
+ e.imbue(ce.getloc());
+ e.swap(e1);
+
+ global_regex_namespace::swap(e, e1);
+
+ // sub_match:
+ BOOST_STATIC_ASSERT((::boost::is_base_and_derived<std::pair<BidiIterator, BidiIterator>, sub_match_type>::value));
+ typedef typename sub_match_type::value_type sub_value_type;
+ typedef typename sub_match_type::difference_type sub_diff_type;
+ typedef typename sub_match_type::iterator sub_iter_type;
+ BOOST_STATIC_ASSERT((::boost::is_same<sub_value_type, value_type>::value));
+ BOOST_STATIC_ASSERT((::boost::is_same<sub_iter_type, BidiIterator>::value));
+ b = m_sub.matched;
+ ignore_unused_variable_warning(b);
+ BidiIterator bi = m_sub.first;
+ ignore_unused_variable_warning(bi);
+ bi = m_sub.second;
+ ignore_unused_variable_warning(bi);
+ sub_diff_type diff = m_sub.length();
+ ignore_unused_variable_warning(diff);
+ // match_results tests:
+ typedef typename match_results_type::value_type mr_value_type;
+ typedef typename match_results_type::const_reference mr_const_reference;
+ typedef typename match_results_type::reference mr_reference;
+ typedef typename match_results_type::const_iterator mr_const_iterator;
+ typedef typename match_results_type::iterator mr_iterator;
+ typedef typename match_results_type::difference_type mr_difference_type;
+ typedef typename match_results_type::size_type mr_size_type;
+ typedef typename match_results_type::allocator_type mr_allocator_type;
+ typedef typename match_results_type::char_type mr_char_type;
+ typedef typename match_results_type::string_type mr_string_type;
+
+ match_results_type m1;
+ mr_allocator_type at;
+ match_results_type m2(at);
+ match_results_type m3(m1);
+ m1 = m2;
+
+ int ival = 0;
+
+ mr_size_type mrs = m_cresults.size();
+ ignore_unused_variable_warning(mrs);
+ mrs = m_cresults.max_size();
+ ignore_unused_variable_warning(mrs);
+ b = m_cresults.empty();
+ ignore_unused_variable_warning(b);
+ mr_difference_type mrd = m_cresults.length();
+ ignore_unused_variable_warning(mrd);
+ mrd = m_cresults.length(ival);
+ ignore_unused_variable_warning(mrd);
+ mrd = m_cresults.position();
+ ignore_unused_variable_warning(mrd);
+ mrd = m_cresults.position(mrs);
+ ignore_unused_variable_warning(mrd);
+
+ mr_const_reference mrcr = m_cresults[ival];
+ ignore_unused_variable_warning(mrcr);
+ mr_const_reference mrcr2 = m_cresults.prefix();
+ ignore_unused_variable_warning(mrcr2);
+ mr_const_reference mrcr3 = m_cresults.suffix();
+ ignore_unused_variable_warning(mrcr3);
+ mr_const_iterator mrci = m_cresults.begin();
+ ignore_unused_variable_warning(mrci);
+ mrci = m_cresults.end();
+ ignore_unused_variable_warning(mrci);
+
+ mr_allocator_type at2 = m_cresults.get_allocator();
+ m_results.swap(m_results);
+ global_regex_namespace::swap(m_results, m_results);
+
+ // regex_match:
+ b = global_regex_namespace::regex_match(m_in, m_in, m_results, e);
+ ignore_unused_variable_warning(b);
+ b = global_regex_namespace::regex_match(m_in, m_in, m_results, e, m_mft);
+ ignore_unused_variable_warning(b);
+ b = global_regex_namespace::regex_match(m_in, m_in, e);
+ ignore_unused_variable_warning(b);
+ b = global_regex_namespace::regex_match(m_in, m_in, e, m_mft);
+ ignore_unused_variable_warning(b);
+ b = global_regex_namespace::regex_match(m_pointer, m_pmatch, e);
+ ignore_unused_variable_warning(b);
+ b = global_regex_namespace::regex_match(m_pointer, m_pmatch, e, m_mft);
+ ignore_unused_variable_warning(b);
+ b = global_regex_namespace::regex_match(m_pointer, e);
+ ignore_unused_variable_warning(b);
+ b = global_regex_namespace::regex_match(m_pointer, e, m_mft);
+ ignore_unused_variable_warning(b);
+ // regex_search:
+ b = global_regex_namespace::regex_search(m_in, m_in, m_results, e);
+ ignore_unused_variable_warning(b);
+ b = global_regex_namespace::regex_search(m_in, m_in, m_results, e, m_mft);
+ ignore_unused_variable_warning(b);
+ b = global_regex_namespace::regex_search(m_in, m_in, e);
+ ignore_unused_variable_warning(b);
+ b = global_regex_namespace::regex_search(m_in, m_in, e, m_mft);
+ ignore_unused_variable_warning(b);
+ b = global_regex_namespace::regex_search(m_pointer, m_pmatch, e);
+ ignore_unused_variable_warning(b);
+ b = global_regex_namespace::regex_search(m_pointer, m_pmatch, e, m_mft);
+ ignore_unused_variable_warning(b);
+ b = global_regex_namespace::regex_search(m_pointer, e);
+ ignore_unused_variable_warning(b);
+ b = global_regex_namespace::regex_search(m_pointer, e, m_mft);
+ ignore_unused_variable_warning(b);
+
+ // regex_iterator:
+ typedef typename regex_iterator_type::regex_type rit_regex_type;
+ typedef typename regex_iterator_type::value_type rit_value_type;
+ typedef typename regex_iterator_type::difference_type rit_difference_type;
+ typedef typename regex_iterator_type::pointer rit_pointer;
+ typedef typename regex_iterator_type::reference rit_reference;
+ typedef typename regex_iterator_type::iterator_category rit_iterator_category;
+ BOOST_STATIC_ASSERT((::boost::is_same<rit_regex_type, Regex>::value));
+ BOOST_STATIC_ASSERT((::boost::is_same<rit_value_type, match_results_type>::value));
+ BOOST_STATIC_ASSERT((::boost::is_same<rit_difference_type, std::ptrdiff_t>::value));
+ BOOST_STATIC_ASSERT((::boost::is_same<rit_pointer, const match_results_type*>::value));
+ BOOST_STATIC_ASSERT((::boost::is_same<rit_reference, const match_results_type&>::value));
+ BOOST_STATIC_ASSERT((::boost::is_convertible<rit_iterator_category*, std::forward_iterator_tag*>::value));
+ // this takes care of most of the checks needed:
+ function_requires<ForwardIteratorConcept<regex_iterator_type> >();
+ regex_iterator_type iter1(m_in, m_in, e);
+ ignore_unused_variable_warning(iter1);
+ regex_iterator_type iter2(m_in, m_in, e, m_mft);
+ ignore_unused_variable_warning(iter2);
+
+ // regex_token_iterator:
+ typedef typename regex_token_iterator_type::regex_type rtit_regex_type;
+ typedef typename regex_token_iterator_type::value_type rtit_value_type;
+ typedef typename regex_token_iterator_type::difference_type rtit_difference_type;
+ typedef typename regex_token_iterator_type::pointer rtit_pointer;
+ typedef typename regex_token_iterator_type::reference rtit_reference;
+ typedef typename regex_token_iterator_type::iterator_category rtit_iterator_category;
+ BOOST_STATIC_ASSERT((::boost::is_same<rtit_regex_type, Regex>::value));
+ BOOST_STATIC_ASSERT((::boost::is_same<rtit_value_type, sub_match_type>::value));
+ BOOST_STATIC_ASSERT((::boost::is_same<rtit_difference_type, std::ptrdiff_t>::value));
+ BOOST_STATIC_ASSERT((::boost::is_same<rtit_pointer, const sub_match_type*>::value));
+ BOOST_STATIC_ASSERT((::boost::is_same<rtit_reference, const sub_match_type&>::value));
+ BOOST_STATIC_ASSERT((::boost::is_convertible<rtit_iterator_category*, std::forward_iterator_tag*>::value));
+ // this takes care of most of the checks needed:
+ function_requires<ForwardIteratorConcept<regex_token_iterator_type> >();
+ regex_token_iterator_type ti1(m_in, m_in, e);
+ ignore_unused_variable_warning(ti1);
+ regex_token_iterator_type ti2(m_in, m_in, e, 0);
+ ignore_unused_variable_warning(ti2);
+ regex_token_iterator_type ti3(m_in, m_in, e, 0, m_mft);
+ ignore_unused_variable_warning(ti3);
+ std::vector<int> subs;
+ regex_token_iterator_type ti4(m_in, m_in, e, subs);
+ ignore_unused_variable_warning(ti4);
+ regex_token_iterator_type ti5(m_in, m_in, e, subs, m_mft);
+ ignore_unused_variable_warning(ti5);
+ static const int i_array[3] = { 1, 2, 3, };
+ regex_token_iterator_type ti6(m_in, m_in, e, i_array);
+ ignore_unused_variable_warning(ti6);
+ regex_token_iterator_type ti7(m_in, m_in, e, i_array, m_mft);
+ ignore_unused_variable_warning(ti7);
+ }
+
+ pointer_type m_pointer;
+ flag_type m_flags;
+ size_type m_size;
+ input_iterator_type in1, in2;
+ const sub_match_type m_sub;
+ const value_type m_char;
+ match_results_type m_results;
+ const match_results_type m_cresults;
+ OutIterator m_out;
+ BidiIterator m_in;
+ global_regex_namespace::regex_constants::match_flag_type m_mft;
+ global_regex_namespace::match_results<pointer_type> m_pmatch;
+
+ BaseRegexConcept();
+ BaseRegexConcept(const BaseRegexConcept&);
+ BaseRegexConcept& operator=(const BaseRegexConcept&);
+};
+
+//
+// RegexConcept:
+// Test every interface in the std:
+//
+template <class Regex>
+struct RegexConcept
+{
+ typedef typename Regex::value_type value_type;
+ typedef typename Regex::size_type size_type;
+ typedef typename Regex::flag_type flag_type;
+ typedef typename Regex::locale_type locale_type;
+
+ // derived test types:
+ typedef const value_type* pointer_type;
+ typedef std::basic_string<value_type> string_type;
+ typedef boost::bidirectional_iterator_archetype<value_type> BidiIterator;
+ typedef global_regex_namespace::sub_match<BidiIterator> sub_match_type;
+ typedef global_regex_namespace::match_results<BidiIterator> match_results_type;
+ typedef output_iterator_archetype<value_type> OutIterator;
+
+
+ void constraints()
+ {
+ function_requires<BaseRegexConcept<Regex> >();
+ // string based construct:
+ Regex e1(m_string);
+ ignore_unused_variable_warning(e1);
+ Regex e2(m_string, m_flags);
+ ignore_unused_variable_warning(e2);
+
+ // assign etc:
+ Regex e;
+ e = m_string;
+ e.assign(m_string);
+ e.assign(m_string, m_flags);
+
+ // sub_match:
+ string_type s(m_sub);
+ ignore_unused_variable_warning(s);
+ s = m_sub.str();
+ ignore_unused_variable_warning(s);
+ int i = m_sub.compare(m_string);
+ ignore_unused_variable_warning(i);
+
+ int i2 = m_sub.compare(m_sub);
+ ignore_unused_variable_warning(i2);
+ i2 = m_sub.compare(m_pointer);
+ ignore_unused_variable_warning(i2);
+
+ bool b = m_sub == m_sub;
+ ignore_unused_variable_warning(b);
+ b = m_sub != m_sub;
+ ignore_unused_variable_warning(b);
+ b = m_sub <= m_sub;
+ ignore_unused_variable_warning(b);
+ b = m_sub <= m_sub;
+ ignore_unused_variable_warning(b);
+ b = m_sub > m_sub;
+ ignore_unused_variable_warning(b);
+ b = m_sub >= m_sub;
+ ignore_unused_variable_warning(b);
+
+ b = m_sub == m_pointer;
+ ignore_unused_variable_warning(b);
+ b = m_sub != m_pointer;
+ ignore_unused_variable_warning(b);
+ b = m_sub <= m_pointer;
+ ignore_unused_variable_warning(b);
+ b = m_sub <= m_pointer;
+ ignore_unused_variable_warning(b);
+ b = m_sub > m_pointer;
+ ignore_unused_variable_warning(b);
+ b = m_sub >= m_pointer;
+ ignore_unused_variable_warning(b);
+
+ b = m_pointer == m_sub;
+ ignore_unused_variable_warning(b);
+ b = m_pointer != m_sub;
+ ignore_unused_variable_warning(b);
+ b = m_pointer <= m_sub;
+ ignore_unused_variable_warning(b);
+ b = m_pointer <= m_sub;
+ ignore_unused_variable_warning(b);
+ b = m_pointer > m_sub;
+ ignore_unused_variable_warning(b);
+ b = m_pointer >= m_sub;
+ ignore_unused_variable_warning(b);
+
+ b = m_sub == m_char;
+ ignore_unused_variable_warning(b);
+ b = m_sub != m_char;
+ ignore_unused_variable_warning(b);
+ b = m_sub <= m_char;
+ ignore_unused_variable_warning(b);
+ b = m_sub <= m_char;
+ ignore_unused_variable_warning(b);
+ b = m_sub > m_char;
+ ignore_unused_variable_warning(b);
+ b = m_sub >= m_char;
+ ignore_unused_variable_warning(b);
+
+ b = m_char == m_sub;
+ ignore_unused_variable_warning(b);
+ b = m_char != m_sub;
+ ignore_unused_variable_warning(b);
+ b = m_char <= m_sub;
+ ignore_unused_variable_warning(b);
+ b = m_char <= m_sub;
+ ignore_unused_variable_warning(b);
+ b = m_char > m_sub;
+ ignore_unused_variable_warning(b);
+ b = m_char >= m_sub;
+ ignore_unused_variable_warning(b);
+
+ b = m_sub == m_string;
+ ignore_unused_variable_warning(b);
+ b = m_sub != m_string;
+ ignore_unused_variable_warning(b);
+ b = m_sub <= m_string;
+ ignore_unused_variable_warning(b);
+ b = m_sub <= m_string;
+ ignore_unused_variable_warning(b);
+ b = m_sub > m_string;
+ ignore_unused_variable_warning(b);
+ b = m_sub >= m_string;
+ ignore_unused_variable_warning(b);
+
+ b = m_string == m_sub;
+ ignore_unused_variable_warning(b);
+ b = m_string != m_sub;
+ ignore_unused_variable_warning(b);
+ b = m_string <= m_sub;
+ ignore_unused_variable_warning(b);
+ b = m_string <= m_sub;
+ ignore_unused_variable_warning(b);
+ b = m_string > m_sub;
+ ignore_unused_variable_warning(b);
+ b = m_string >= m_sub;
+ ignore_unused_variable_warning(b);
+
+ // match results:
+ m_string = m_results.str();
+ ignore_unused_variable_warning(m_string);
+ m_string = m_results.str(0);
+ ignore_unused_variable_warning(m_string);
+ m_out = m_cresults.format(m_out, m_string);
+ m_out = m_cresults.format(m_out, m_string, m_mft);
+ m_string = m_cresults.format(m_string);
+ ignore_unused_variable_warning(m_string);
+ m_string = m_cresults.format(m_string, m_mft);
+ ignore_unused_variable_warning(m_string);
+
+ // regex_match:
+ b = global_regex_namespace::regex_match(m_string, m_smatch, e);
+ ignore_unused_variable_warning(b);
+ b = global_regex_namespace::regex_match(m_string, m_smatch, e, m_mft);
+ ignore_unused_variable_warning(b);
+ b = global_regex_namespace::regex_match(m_string, e);
+ ignore_unused_variable_warning(b);
+ b = global_regex_namespace::regex_match(m_string, e, m_mft);
+ ignore_unused_variable_warning(b);
+
+ // regex_search:
+ b = global_regex_namespace::regex_search(m_string, m_smatch, e);
+ ignore_unused_variable_warning(b);
+ b = global_regex_namespace::regex_search(m_string, m_smatch, e, m_mft);
+ ignore_unused_variable_warning(b);
+ b = global_regex_namespace::regex_search(m_string, e);
+ ignore_unused_variable_warning(b);
+ b = global_regex_namespace::regex_search(m_string, e, m_mft);
+ ignore_unused_variable_warning(b);
+
+ // regex_replace:
+ m_out = global_regex_namespace::regex_replace(m_out, m_in, m_in, e, m_string, m_mft);
+ m_out = global_regex_namespace::regex_replace(m_out, m_in, m_in, e, m_string);
+ m_string = global_regex_namespace::regex_replace(m_string, e, m_string, m_mft);
+ ignore_unused_variable_warning(m_string);
+ m_string = global_regex_namespace::regex_replace(m_string, e, m_string);
+ ignore_unused_variable_warning(m_string);
+
+ }
+
+ flag_type m_flags;
+ string_type m_string;
+ const sub_match_type m_sub;
+ match_results_type m_results;
+ pointer_type m_pointer;
+ value_type m_char;
+ const match_results_type m_cresults;
+ OutIterator m_out;
+ BidiIterator m_in;
+ global_regex_namespace::regex_constants::match_flag_type m_mft;
+ global_regex_namespace::match_results<typename string_type::const_iterator> m_smatch;
+
+ RegexConcept();
+ RegexConcept(const RegexConcept&);
+ RegexConcept& operator=(const RegexConcept&);
+};
+
+#ifndef BOOST_REGEX_TEST_STD
+//
+// BoostRegexConcept:
+// Test every interface in the Boost implementation:
+//
+template <class Regex>
+struct BoostRegexConcept
+{
+ typedef typename Regex::value_type value_type;
+ typedef typename Regex::size_type size_type;
+ typedef typename Regex::flag_type flag_type;
+ typedef typename Regex::locale_type locale_type;
+
+ // derived test types:
+ typedef const value_type* pointer_type;
+ typedef std::basic_string<value_type> string_type;
+ typedef typename Regex::const_iterator const_iterator;
+ typedef bidirectional_iterator_archetype<value_type> BidiIterator;
+ typedef global_regex_namespace::sub_match<BidiIterator> sub_match_type;
+ typedef global_regex_namespace::match_results<BidiIterator> match_results_type;
+
+ void constraints()
+ {
+ global_regex_namespace::regex_constants::match_flag_type mopts
+ = global_regex_namespace::regex_constants::match_default
+ | global_regex_namespace::regex_constants::match_not_bol
+ | global_regex_namespace::regex_constants::match_not_eol
+ | global_regex_namespace::regex_constants::match_not_bow
+ | global_regex_namespace::regex_constants::match_not_eow
+ | global_regex_namespace::regex_constants::match_any
+ | global_regex_namespace::regex_constants::match_not_null
+ | global_regex_namespace::regex_constants::match_continuous
+ | global_regex_namespace::regex_constants::match_partial
+ | global_regex_namespace::regex_constants::match_prev_avail
+ | global_regex_namespace::regex_constants::format_default
+ | global_regex_namespace::regex_constants::format_sed
+ | global_regex_namespace::regex_constants::format_perl
+ | global_regex_namespace::regex_constants::format_no_copy
+ | global_regex_namespace::regex_constants::format_first_only;
+
+ (void)mopts;
+
+ function_requires<RegexConcept<Regex> >();
+ const global_regex_namespace::regex_error except(global_regex_namespace::regex_constants::error_collate);
+ std::ptrdiff_t pt = except.position();
+ ignore_unused_variable_warning(pt);
+ const Regex ce, ce2;
+#ifndef BOOST_NO_STD_LOCALE
+ m_stream << ce;
+#endif
+ unsigned i = ce.error_code();
+ ignore_unused_variable_warning(i);
+ pointer_type p = ce.expression();
+ ignore_unused_variable_warning(p);
+ int i2 = ce.compare(ce2);
+ ignore_unused_variable_warning(i2);
+ bool b = ce == ce2;
+ ignore_unused_variable_warning(b);
+ b = ce != ce2;
+ ignore_unused_variable_warning(b);
+ b = ce < ce2;
+ ignore_unused_variable_warning(b);
+ b = ce > ce2;
+ ignore_unused_variable_warning(b);
+ b = ce <= ce2;
+ ignore_unused_variable_warning(b);
+ b = ce >= ce2;
+ ignore_unused_variable_warning(b);
+ i = ce.status();
+ ignore_unused_variable_warning(i);
+ size_type s = ce.max_size();
+ ignore_unused_variable_warning(s);
+ s = ce.size();
+ ignore_unused_variable_warning(s);
+ const_iterator pi = ce.begin();
+ ignore_unused_variable_warning(pi);
+ pi = ce.end();
+ ignore_unused_variable_warning(pi);
+ string_type s2 = ce.str();
+ ignore_unused_variable_warning(s2);
+
+ m_string = m_sub + m_sub;
+ ignore_unused_variable_warning(m_string);
+ m_string = m_sub + m_pointer;
+ ignore_unused_variable_warning(m_string);
+ m_string = m_pointer + m_sub;
+ ignore_unused_variable_warning(m_string);
+ m_string = m_sub + m_string;
+ ignore_unused_variable_warning(m_string);
+ m_string = m_string + m_sub;
+ ignore_unused_variable_warning(m_string);
+ m_string = m_sub + m_char;
+ ignore_unused_variable_warning(m_string);
+ m_string = m_char + m_sub;
+ ignore_unused_variable_warning(m_string);
+
+#ifndef BOOST_NO_STD_LOCALE
+ m_stream << m_sub;
+ m_stream << m_cresults;
+#endif
+ }
+
+ std::basic_ostream<value_type> m_stream;
+ sub_match_type m_sub;
+ pointer_type m_pointer;
+ string_type m_string;
+ const value_type m_char;
+ match_results_type m_results;
+ const match_results_type m_cresults;
+
+ BoostRegexConcept();
+ BoostRegexConcept(const BoostRegexConcept&);
+ BoostRegexConcept& operator=(const BoostRegexConcept&);
+};
+
+#endif // BOOST_REGEX_TEST_STD
+
+}
+
+#endif
diff --git a/boost/boost/regex/config.hpp b/boost/boost/regex/config.hpp
new file mode 100644
index 00000000000..0e229f5070a
--- /dev/null
+++ b/boost/boost/regex/config.hpp
@@ -0,0 +1,411 @@
+/*
+ *
+ * Copyright (c) 1998-2002
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE config.hpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: regex extended config setup.
+ */
+
+#ifndef BOOST_REGEX_CONFIG_HPP
+#define BOOST_REGEX_CONFIG_HPP
+/*
+ * Borland C++ Fix/error check
+ * this has to go *before* we include any std lib headers:
+ */
+#if defined(__BORLANDC__)
+# include <boost/regex/config/borland.hpp>
+#endif
+
+/*****************************************************************************
+ *
+ * Include all the headers we need here:
+ *
+ ****************************************************************************/
+
+#ifdef __cplusplus
+
+# ifndef BOOST_REGEX_USER_CONFIG
+# define BOOST_REGEX_USER_CONFIG <boost/regex/user.hpp>
+# endif
+
+# include BOOST_REGEX_USER_CONFIG
+
+# include <boost/config.hpp>
+
+#else
+ /*
+ * C build,
+ * don't include <boost/config.hpp> because that may
+ * do C++ specific things in future...
+ */
+# include <stdlib.h>
+# include <stddef.h>
+# ifdef _MSC_VER
+# define BOOST_MSVC _MSC_VER
+# endif
+#endif
+
+/*****************************************************************************
+ *
+ * Boilerplate regex config options:
+ *
+ ****************************************************************************/
+
+/* Obsolete macro, use BOOST_VERSION instead: */
+#define BOOST_RE_VERSION 320
+
+/* fix: */
+#if defined(_UNICODE) && !defined(UNICODE)
+#define UNICODE
+#endif
+
+/*
+ * Fix for gcc prior to 3.4: std::ctype<wchar_t> doesn't allow
+ * masks to be combined, for example:
+ * std::use_facet<std::ctype<wchar_t> >.is(std::ctype_base::lower|std::ctype_base::upper, L'a');
+ * returns *false*.
+ */
+#ifdef __GLIBCPP__
+# define BOOST_REGEX_BUGGY_CTYPE_FACET
+#endif
+
+/*
+ * Intel C++ before 8.0 ends up with unresolved externals unless we turn off
+ * extern template support:
+ */
+#if defined(BOOST_INTEL) && defined(__cplusplus) && (BOOST_INTEL <= 800)
+# define BOOST_REGEX_NO_EXTERNAL_TEMPLATES
+#endif
+
+/*
+ * If there isn't good enough wide character support then there will
+ * be no wide character regular expressions:
+ */
+#if (defined(BOOST_NO_CWCHAR) || defined(BOOST_NO_CWCTYPE) || defined(BOOST_NO_STD_WSTRING))
+# if !defined(BOOST_NO_WREGEX)
+# define BOOST_NO_WREGEX
+# endif
+#else
+# if defined(__sgi) && (defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION))
+ /* STLPort on IRIX is misconfigured: <cwctype> does not compile
+ * as a temporary fix include <wctype.h> instead and prevent inclusion
+ * of STLPort version of <cwctype> */
+# include <wctype.h>
+# define __STLPORT_CWCTYPE
+# define _STLP_CWCTYPE
+# endif
+
+#ifdef __cplusplus
+# include <boost/regex/config/cwchar.hpp>
+#endif
+
+#endif
+
+/*
+ * If Win32 support has been disabled for boost in general, then
+ * it is for regex in particular:
+ */
+#if defined(BOOST_DISABLE_WIN32) && !defined(BOOST_REGEX_NO_W32)
+# define BOOST_REGEX_NO_W32
+#endif
+
+/* disable our own file-iterators and mapfiles if we can't
+ * support them: */
+#if !defined(BOOST_HAS_DIRENT_H) && !(defined(_WIN32) && !defined(BOOST_REGEX_NO_W32))
+# define BOOST_REGEX_NO_FILEITER
+#endif
+
+/* backwards compatibitity: */
+#if defined(BOOST_RE_NO_LIB)
+# define BOOST_REGEX_NO_LIB
+#endif
+
+#if defined(__GNUC__) && (defined(_WIN32) || defined(__CYGWIN__))
+/* gcc on win32 has problems if you include <windows.h>
+ (sporadically generates bad code). */
+# define BOOST_REGEX_NO_W32
+#endif
+#if defined(__COMO__) && !defined(BOOST_REGEX_NO_W32) && !defined(_MSC_EXTENSIONS)
+# define BOOST_REGEX_NO_W32
+#endif
+
+/*****************************************************************************
+ *
+ * Wide character workarounds:
+ *
+ ****************************************************************************/
+
+/*
+ * define BOOST_REGEX_HAS_OTHER_WCHAR_T when wchar_t is a native type, but the users
+ * code may be built with wchar_t as unsigned short: basically when we're building
+ * with MSVC and the /Zc:wchar_t option we place some extra unsigned short versions
+ * of the non-inline functions in the library, so that users can still link to the lib,
+ * irrespective of whether their own code is built with /Zc:wchar_t.
+ */
+#if defined(__cplusplus) && (defined(BOOST_MSVC) || defined(__ICL)) && !defined(BOOST_NO_INTRINSIC_WCHAR_T) && defined(BOOST_WINDOWS) && !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION)
+# define BOOST_REGEX_HAS_OTHER_WCHAR_T
+# ifdef BOOST_MSVC
+# pragma warning(push)
+# pragma warning(disable : 4251 4231 4660)
+# endif
+# ifdef _DLL
+# include <string>
+ extern template class __declspec(dllimport) std::basic_string<unsigned short>;
+# endif
+# ifdef BOOST_MSVC
+# pragma warning(pop)
+# endif
+#endif
+
+
+/*****************************************************************************
+ *
+ * Set up dll import/export options:
+ *
+ ****************************************************************************/
+
+#if defined(BOOST_HAS_DECLSPEC) && (defined(BOOST_REGEX_DYN_LINK) || defined(BOOST_ALL_DYN_LINK)) && !defined(BOOST_REGEX_STATIC_LINK)
+# if defined(BOOST_REGEX_SOURCE)
+# define BOOST_REGEX_DECL __declspec(dllexport)
+# define BOOST_REGEX_BUILD_DLL
+# else
+# define BOOST_REGEX_DECL __declspec(dllimport)
+# endif
+#endif
+
+#ifndef BOOST_REGEX_DECL
+# define BOOST_REGEX_DECL
+#endif
+
+#if !defined(BOOST_REGEX_NO_LIB) && !defined(BOOST_REGEX_SOURCE) && !defined(BOOST_ALL_NO_LIB) && defined(__cplusplus)
+# define BOOST_LIB_NAME boost_regex
+# if defined(BOOST_REGEX_DYN_LINK) || defined(BOOST_ALL_DYN_LINK)
+# define BOOST_DYN_LINK
+# endif
+# ifdef BOOST_REGEX_DIAG
+# define BOOST_LIB_DIAGNOSTIC
+# endif
+# include <boost/config/auto_link.hpp>
+#endif
+
+/*****************************************************************************
+ *
+ * Set up function call type:
+ *
+ ****************************************************************************/
+
+#if defined(BOOST_MSVC) && (BOOST_MSVC >= 1200) && defined(_MSC_EXTENSIONS)
+#if defined(_DEBUG) || defined(__MSVC_RUNTIME_CHECKS) || defined(_MANAGED)
+# define BOOST_REGEX_CALL __cdecl
+#else
+# define BOOST_REGEX_CALL __fastcall
+#endif
+# define BOOST_REGEX_CCALL __cdecl
+#endif
+
+#if defined(__BORLANDC__) && !defined(BOOST_DISABLE_WIN32)
+# define BOOST_REGEX_CALL __fastcall
+# define BOOST_REGEX_CCALL __stdcall
+#endif
+
+#ifndef BOOST_REGEX_CALL
+# define BOOST_REGEX_CALL
+#endif
+#ifndef BOOST_REGEX_CCALL
+#define BOOST_REGEX_CCALL
+#endif
+
+/*****************************************************************************
+ *
+ * Set up localisation model:
+ *
+ ****************************************************************************/
+
+/* backwards compatibility: */
+#ifdef BOOST_RE_LOCALE_C
+# define BOOST_REGEX_USE_C_LOCALE
+#endif
+
+#ifdef BOOST_RE_LOCALE_CPP
+# define BOOST_REGEX_USE_CPP_LOCALE
+#endif
+
+/* Win32 defaults to native Win32 locale: */
+#if defined(_WIN32) && !defined(BOOST_REGEX_USE_WIN32_LOCALE) && !defined(BOOST_REGEX_USE_C_LOCALE) && !defined(BOOST_REGEX_USE_CPP_LOCALE) && !defined(BOOST_REGEX_NO_W32)
+# define BOOST_REGEX_USE_WIN32_LOCALE
+#endif
+/* otherwise use C++ locale if supported: */
+#if !defined(BOOST_REGEX_USE_WIN32_LOCALE) && !defined(BOOST_REGEX_USE_C_LOCALE) && !defined(BOOST_REGEX_USE_CPP_LOCALE) && !defined(BOOST_NO_STD_LOCALE)
+# define BOOST_REGEX_USE_CPP_LOCALE
+#endif
+/* otherwise use C+ locale: */
+#if !defined(BOOST_REGEX_USE_WIN32_LOCALE) && !defined(BOOST_REGEX_USE_C_LOCALE) && !defined(BOOST_REGEX_USE_CPP_LOCALE)
+# define BOOST_REGEX_USE_C_LOCALE
+#endif
+
+#ifndef BOOST_REGEX_MAX_STATE_COUNT
+# define BOOST_REGEX_MAX_STATE_COUNT 100000000
+#endif
+
+
+/*****************************************************************************
+ *
+ * Error Handling for exception free compilers:
+ *
+ ****************************************************************************/
+
+#ifdef BOOST_NO_EXCEPTIONS
+/*
+ * If there are no exceptions then we must report critical-errors
+ * the only way we know how; by terminating.
+ */
+#include <stdexcept>
+#include <string>
+#include <boost/throw_exception.hpp>
+
+# define BOOST_REGEX_NOEH_ASSERT(x)\
+if(0 == (x))\
+{\
+ std::string s("Error: critical regex++ failure in: ");\
+ s.append(#x);\
+ std::runtime_error e(s);\
+ boost::throw_exception(e);\
+}
+#else
+/*
+ * With exceptions then error handling is taken care of and
+ * there is no need for these checks:
+ */
+# define BOOST_REGEX_NOEH_ASSERT(x)
+#endif
+
+
+/*****************************************************************************
+ *
+ * Stack protection under MS Windows:
+ *
+ ****************************************************************************/
+
+#if !defined(BOOST_REGEX_NO_W32) && !defined(BOOST_REGEX_V3)
+# if(defined(_WIN32) || defined(_WIN64) || defined(_WINCE)) \
+ && !defined(__GNUC__) \
+ && !(defined(__BORLANDC__) && (__BORLANDC__ >= 0x600)) \
+ && !(defined(__MWERKS__) && (__MWERKS__ <= 0x3003))
+# define BOOST_REGEX_HAS_MS_STACK_GUARD
+# endif
+#elif defined(BOOST_REGEX_HAS_MS_STACK_GUARD)
+# undef BOOST_REGEX_HAS_MS_STACK_GUARD
+#endif
+
+#if defined(__cplusplus) && defined(BOOST_REGEX_HAS_MS_STACK_GUARD)
+
+namespace boost{
+namespace re_detail{
+
+BOOST_REGEX_DECL void BOOST_REGEX_CALL reset_stack_guard_page();
+
+}
+}
+
+#endif
+
+
+/*****************************************************************************
+ *
+ * Algorithm selection and configuration:
+ *
+ ****************************************************************************/
+
+#if !defined(BOOST_REGEX_RECURSIVE) && !defined(BOOST_REGEX_NON_RECURSIVE)
+# if defined(BOOST_REGEX_HAS_MS_STACK_GUARD) && !defined(_STLP_DEBUG) && !defined(__STL_DEBUG) && !(defined(BOOST_MSVC) && (BOOST_MSVC >= 1400))
+# define BOOST_REGEX_RECURSIVE
+# else
+# define BOOST_REGEX_NON_RECURSIVE
+# endif
+#endif
+
+#ifdef BOOST_REGEX_NON_RECURSIVE
+# ifdef BOOST_REGEX_RECURSIVE
+# error "Can't set both BOOST_REGEX_RECURSIVE and BOOST_REGEX_NON_RECURSIVE"
+# endif
+# ifndef BOOST_REGEX_BLOCKSIZE
+# define BOOST_REGEX_BLOCKSIZE 4096
+# endif
+# if BOOST_REGEX_BLOCKSIZE < 512
+# error "BOOST_REGEX_BLOCKSIZE must be at least 512"
+# endif
+# ifndef BOOST_REGEX_MAX_BLOCKS
+# define BOOST_REGEX_MAX_BLOCKS 1024
+# endif
+# ifdef BOOST_REGEX_HAS_MS_STACK_GUARD
+# undef BOOST_REGEX_HAS_MS_STACK_GUARD
+# endif
+# ifndef BOOST_REGEX_MAX_CACHE_BLOCKS
+# define BOOST_REGEX_MAX_CACHE_BLOCKS 16
+# endif
+#endif
+
+
+/*****************************************************************************
+ *
+ * helper memory allocation functions:
+ *
+ ****************************************************************************/
+
+#if defined(__cplusplus) && defined(BOOST_REGEX_NON_RECURSIVE)
+namespace boost{ namespace re_detail{
+
+BOOST_REGEX_DECL void* BOOST_REGEX_CALL get_mem_block();
+BOOST_REGEX_DECL void BOOST_REGEX_CALL put_mem_block(void*);
+
+}} /* namespaces */
+#endif
+
+/*****************************************************************************
+ *
+ * Diagnostics:
+ *
+ ****************************************************************************/
+
+#ifdef BOOST_REGEX_CONFIG_INFO
+BOOST_REGEX_DECL void BOOST_REGEX_CALL print_regex_library_info();
+#endif
+
+#if defined(BOOST_REGEX_DIAG)
+# pragma message ("BOOST_REGEX_DECL" BOOST_STRINGIZE(=BOOST_REGEX_DECL))
+# pragma message ("BOOST_REGEX_CALL" BOOST_STRINGIZE(=BOOST_REGEX_CALL))
+# pragma message ("BOOST_REGEX_CCALL" BOOST_STRINGIZE(=BOOST_REGEX_CCALL))
+#ifdef BOOST_REGEX_USE_C_LOCALE
+# pragma message ("Using C locale in regex traits class")
+#elif BOOST_REGEX_USE_CPP_LOCALE
+# pragma message ("Using C++ locale in regex traits class")
+#else
+# pragma message ("Using Win32 locale in regex traits class")
+#endif
+#if defined(BOOST_REGEX_DYN_LINK) || defined(BOOST_ALL_DYN_LINK)
+# pragma message ("Dynamic linking enabled")
+#endif
+#if defined(BOOST_REGEX_NO_LIB) || defined(BOOST_ALL_NO_LIB)
+# pragma message ("Auto-linking disabled")
+#endif
+#ifdef BOOST_REGEX_NO_EXTERNAL_TEMPLATES
+# pragma message ("Extern templates disabled")
+#endif
+
+#endif
+
+#endif
+
+
+
+
diff --git a/boost/boost/regex/config/borland.hpp b/boost/boost/regex/config/borland.hpp
new file mode 100644
index 00000000000..51c2126b8ec
--- /dev/null
+++ b/boost/boost/regex/config/borland.hpp
@@ -0,0 +1,72 @@
+/*
+ *
+ * Copyright (c) 1998-2002
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE boost/regex/config/borland.hpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: regex borland-specific config setup.
+ */
+
+
+#if defined(__BORLANDC__)
+# if (__BORLANDC__ == 0x550) || (__BORLANDC__ == 0x551)
+ // problems with std::basic_string and dll RTL:
+# if defined(_RTLDLL) && defined(_RWSTD_COMPILE_INSTANTIATE)
+# ifdef BOOST_REGEX_BUILD_DLL
+# error _RWSTD_COMPILE_INSTANTIATE must not be defined when building regex++ as a DLL
+# else
+# pragma message("Defining _RWSTD_COMPILE_INSTANTIATE when linking to the DLL version of the RTL may produce memory corruption problems in std::basic_string, as a result of separate versions of basic_string's static data in the RTL and you're exe/dll: be warned!!")
+# endif
+# endif
+# ifndef _RTLDLL
+ // this is harmless for a staic link:
+# define _RWSTD_COMPILE_INSTANTIATE
+# endif
+ // external templates cause problems for some reason:
+# define BOOST_REGEX_NO_EXTERNAL_TEMPLATES
+# endif
+# if (__BORLANDC__ <= 0x540) && !defined(BOOST_REGEX_NO_LIB) && !defined(_NO_VCL)
+ // C++ Builder 4 and earlier, we can't tell whether we should be using
+ // the VCL runtime or not, do a static link instead:
+# define BOOST_REGEX_STATIC_LINK
+# endif
+ //
+ // VCL support:
+ // if we're building a console app then there can't be any VCL (can there?)
+# if !defined(__CONSOLE__) && !defined(_NO_VCL)
+# define BOOST_REGEX_USE_VCL
+# endif
+ //
+ // if this isn't Win32 then don't automatically select link
+ // libraries:
+ //
+# ifndef _Windows
+# ifndef BOOST_REGEX_NO_LIB
+# define BOOST_REGEX_NO_LIB
+# endif
+# ifndef BOOST_REGEX_STATIC_LINK
+# define BOOST_REGEX_STATIC_LINK
+# endif
+# endif
+
+#if __BORLANDC__ < 0x600
+//
+// string workarounds:
+//
+#include <cstring>
+#undef strcmp
+#undef strcpy
+#endif
+
+#endif
+
+
diff --git a/boost/boost/regex/config/cwchar.hpp b/boost/boost/regex/config/cwchar.hpp
new file mode 100644
index 00000000000..1d189e6ccd7
--- /dev/null
+++ b/boost/boost/regex/config/cwchar.hpp
@@ -0,0 +1,207 @@
+/*
+ *
+ * Copyright (c) 1998-2002
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE boost/regex/config/cwchar.hpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: regex wide character string fixes.
+ */
+
+#ifndef BOOST_REGEX_CONFIG_CWCHAR_HPP
+#define BOOST_REGEX_CONFIG_CWCHAR_HPP
+
+#include <cwchar>
+#include <cwctype>
+#include <boost/config.hpp>
+
+#if defined(__STD_RWCOMPILER_H__) || defined(_RWSTD_VER)
+// apparently this is required for the RW STL on Linux:
+#undef iswalnum
+#undef iswalpha
+#undef iswblank
+#undef iswcntrl
+#undef iswdigit
+#undef iswgraph
+#undef iswlower
+#undef iswprint
+#undef iswprint
+#undef iswpunct
+#undef iswspace
+#undef iswupper
+#undef iswxdigit
+#undef iswctype
+#undef towlower
+#undef towupper
+#undef towctrans
+#undef wctrans
+#undef wctype
+#endif
+
+namespace std{
+
+#ifndef BOOST_NO_STDC_NAMESPACE
+extern "C"{
+#endif
+
+#ifdef iswalnum
+inline int (iswalnum)(wint_t i)
+{ return iswalnum(i); }
+#undef iswalnum
+#elif defined(BOOST_NO_STDC_NAMESPACE)
+using ::iswalnum;
+#endif
+
+#ifdef iswalpha
+inline int (iswalpha)(wint_t i)
+{ return iswalpha(i); }
+#undef iswalpha
+#elif defined(BOOST_NO_STDC_NAMESPACE)
+using ::iswalpha;
+#endif
+
+#ifdef iswcntrl
+inline int (iswcntrl)(wint_t i)
+{ return iswcntrl(i); }
+#undef iswcntrl
+#elif defined(BOOST_NO_STDC_NAMESPACE)
+using ::iswcntrl;
+#endif
+
+#ifdef iswdigit
+inline int (iswdigit)(wint_t i)
+{ return iswdigit(i); }
+#undef iswdigit
+#elif defined(BOOST_NO_STDC_NAMESPACE)
+using ::iswdigit;
+#endif
+
+#ifdef iswgraph
+inline int (iswgraph)(wint_t i)
+{ return iswgraph(i); }
+#undef iswgraph
+#elif defined(BOOST_NO_STDC_NAMESPACE)
+using ::iswgraph;
+#endif
+
+#ifdef iswlower
+inline int (iswlower)(wint_t i)
+{ return iswlower(i); }
+#undef iswlower
+#elif defined(BOOST_NO_STDC_NAMESPACE)
+using ::iswlower;
+#endif
+
+#ifdef iswprint
+inline int (iswprint)(wint_t i)
+{ return iswprint(i); }
+#undef iswprint
+#elif defined(BOOST_NO_STDC_NAMESPACE)
+using ::iswprint;
+#endif
+
+#ifdef iswpunct
+inline int (iswpunct)(wint_t i)
+{ return iswpunct(i); }
+#undef iswpunct
+#elif defined(BOOST_NO_STDC_NAMESPACE)
+using ::iswpunct;
+#endif
+
+#ifdef iswspace
+inline int (iswspace)(wint_t i)
+{ return iswspace(i); }
+#undef iswspace
+#elif defined(BOOST_NO_STDC_NAMESPACE)
+using ::iswspace;
+#endif
+
+#ifdef iswupper
+inline int (iswupper)(wint_t i)
+{ return iswupper(i); }
+#undef iswupper
+#elif defined(BOOST_NO_STDC_NAMESPACE)
+using ::iswupper;
+#endif
+
+#ifdef iswxdigit
+inline int (iswxdigit)(wint_t i)
+{ return iswxdigit(i); }
+#undef iswxdigit
+#elif defined(BOOST_NO_STDC_NAMESPACE)
+using ::iswxdigit;
+#endif
+
+#ifdef towlower
+inline wint_t (towlower)(wint_t i)
+{ return towlower(i); }
+#undef towlower
+#elif defined(BOOST_NO_STDC_NAMESPACE)
+using ::towlower;
+#endif
+
+#ifdef towupper
+inline wint_t (towupper)(wint_t i)
+{ return towupper(i); }
+#undef towupper
+#elif defined(BOOST_NO_STDC_NAMESPACE)
+using :: towupper;
+#endif
+
+#ifdef wcscmp
+inline int (wcscmp)(const wchar_t *p1, const wchar_t *p2)
+{ return wcscmp(p1,p2); }
+#undef wcscmp
+#elif defined(BOOST_NO_STDC_NAMESPACE)
+using ::wcscmp;
+#endif
+
+#ifdef wcscoll
+inline int (wcscoll)(const wchar_t *p1, const wchar_t *p2)
+{ return wcscoll(p1,p2); }
+#undef wcscoll
+#elif defined(BOOST_NO_STDC_NAMESPACE)
+using ::wcscoll;
+#endif
+
+#ifdef wcscpy
+inline wchar_t *(wcscpy)(wchar_t *p1, const wchar_t *p2)
+{ return wcscpy(p1,p2); }
+#undef wcscpy
+#elif defined(BOOST_NO_STDC_NAMESPACE)
+using ::wcscpy;
+#endif
+
+#ifdef wcslen
+inline size_t (wcslen)(const wchar_t *p)
+{ return wcslen(p); }
+#undef wcslen
+#elif defined(BOOST_NO_STDC_NAMESPACE)
+using ::wcslen;
+#endif
+
+#ifdef wcsxfrm
+size_t wcsxfrm(wchar_t *p1, const wchar_t *p2, size_t s)
+{ return wcsxfrm(p1,p2,s); }
+#undef wcsxfrm
+#elif defined(BOOST_NO_STDC_NAMESPACE)
+using ::wcsxfrm;
+#endif
+
+
+#ifndef BOOST_NO_STDC_NAMESPACE
+} // extern "C"
+#endif
+
+} // namespace std
+
+#endif
+
diff --git a/boost/boost/regex/icu.hpp b/boost/boost/regex/icu.hpp
new file mode 100644
index 00000000000..53941b64c9d
--- /dev/null
+++ b/boost/boost/regex/icu.hpp
@@ -0,0 +1,1017 @@
+/*
+ *
+ * Copyright (c) 2004
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE icu.hpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: Unicode regular expressions on top of the ICU Library.
+ */
+
+#ifndef BOOST_REGEX_ICU_HPP
+#define BOOST_REGEX_ICU_HPP
+
+#include <unicode/utypes.h>
+#include <unicode/uchar.h>
+#include <unicode/coll.h>
+#include <boost/regex.hpp>
+#include <boost/regex/pending/unicode_iterator.hpp>
+#include <boost/mpl/int_fwd.hpp>
+#include <bitset>
+
+
+namespace boost{
+
+namespace re_detail{
+
+//
+// Implementation details:
+//
+class BOOST_REGEX_DECL icu_regex_traits_implementation
+{
+ typedef UChar32 char_type;
+ typedef std::size_t size_type;
+ typedef std::vector<char_type> string_type;
+ typedef U_NAMESPACE_QUALIFIER Locale locale_type;
+ typedef boost::uint_least32_t char_class_type;
+public:
+ icu_regex_traits_implementation(const U_NAMESPACE_QUALIFIER Locale& l)
+ : m_locale(l)
+ {
+ UErrorCode success = U_ZERO_ERROR;
+ m_collator.reset(U_NAMESPACE_QUALIFIER Collator::createInstance(l, success));
+ if(U_SUCCESS(success) == 0)
+ init_error();
+ m_collator->setStrength(U_NAMESPACE_QUALIFIER Collator::IDENTICAL);
+ success = U_ZERO_ERROR;
+ m_primary_collator.reset(U_NAMESPACE_QUALIFIER Collator::createInstance(l, success));
+ if(U_SUCCESS(success) == 0)
+ init_error();
+ m_primary_collator->setStrength(U_NAMESPACE_QUALIFIER Collator::PRIMARY);
+ }
+ U_NAMESPACE_QUALIFIER Locale getloc()const
+ {
+ return m_locale;
+ }
+ string_type do_transform(const char_type* p1, const char_type* p2, const U_NAMESPACE_QUALIFIER Collator* pcoll) const;
+ string_type transform(const char_type* p1, const char_type* p2) const
+ {
+ return do_transform(p1, p2, m_collator.get());
+ }
+ string_type transform_primary(const char_type* p1, const char_type* p2) const
+ {
+ return do_transform(p1, p2, m_primary_collator.get());
+ }
+private:
+ void init_error()
+ {
+ std::runtime_error e("Could not initialize ICU resources");
+ boost::throw_exception(e);
+ }
+ U_NAMESPACE_QUALIFIER Locale m_locale; // The ICU locale that we're using
+ boost::scoped_ptr< U_NAMESPACE_QUALIFIER Collator> m_collator; // The full collation object
+ boost::scoped_ptr< U_NAMESPACE_QUALIFIER Collator> m_primary_collator; // The primary collation object
+};
+
+inline boost::shared_ptr<icu_regex_traits_implementation> get_icu_regex_traits_implementation(const U_NAMESPACE_QUALIFIER Locale& loc)
+{
+ return boost::shared_ptr<icu_regex_traits_implementation>(new icu_regex_traits_implementation(loc));
+}
+
+}
+
+class BOOST_REGEX_DECL icu_regex_traits
+{
+public:
+ typedef UChar32 char_type;
+ typedef std::size_t size_type;
+ typedef std::vector<char_type> string_type;
+ typedef U_NAMESPACE_QUALIFIER Locale locale_type;
+#ifdef BOOST_NO_INT64_T
+ typedef std::bitset<64> char_class_type;
+#else
+ typedef boost::uint64_t char_class_type;
+#endif
+
+ struct boost_extensions_tag{};
+
+ icu_regex_traits()
+ : m_pimpl(re_detail::get_icu_regex_traits_implementation(U_NAMESPACE_QUALIFIER Locale()))
+ {
+ }
+ static size_type length(const char_type* p);
+
+ ::boost::regex_constants::syntax_type syntax_type(char_type c)const
+ {
+ return ((c < 0x7f) && (c > 0)) ? re_detail::get_default_syntax_type(static_cast<char>(c)) : regex_constants::syntax_char;
+ }
+ ::boost::regex_constants::escape_syntax_type escape_syntax_type(char_type c) const
+ {
+ return ((c < 0x7f) && (c > 0)) ? re_detail::get_default_escape_syntax_type(static_cast<char>(c)) : regex_constants::syntax_char;
+ }
+ char_type translate(char_type c) const
+ {
+ return c;
+ }
+ char_type translate_nocase(char_type c) const
+ {
+ return ::u_tolower(c);
+ }
+ char_type translate(char_type c, bool icase) const
+ {
+ return icase ? translate_nocase(c) : translate(c);
+ }
+ char_type tolower(char_type c) const
+ {
+ return ::u_tolower(c);
+ }
+ char_type toupper(char_type c) const
+ {
+ return ::u_toupper(c);
+ }
+ string_type transform(const char_type* p1, const char_type* p2) const
+ {
+ return m_pimpl->transform(p1, p2);
+ }
+ string_type transform_primary(const char_type* p1, const char_type* p2) const
+ {
+ return m_pimpl->transform_primary(p1, p2);
+ }
+ char_class_type lookup_classname(const char_type* p1, const char_type* p2) const;
+ string_type lookup_collatename(const char_type* p1, const char_type* p2) const;
+ bool isctype(char_type c, char_class_type f) const;
+ int toi(const char_type*& p1, const char_type* p2, int radix)const
+ {
+ return re_detail::global_toi(p1, p2, radix, *this);
+ }
+ int value(char_type c, int radix)const
+ {
+ return u_digit(c, static_cast< ::int8_t>(radix));
+ }
+ locale_type imbue(locale_type l)
+ {
+ locale_type result(m_pimpl->getloc());
+ m_pimpl = re_detail::get_icu_regex_traits_implementation(l);
+ return result;
+ }
+ locale_type getloc()const
+ {
+ return locale_type();
+ }
+ std::string error_string(::boost::regex_constants::error_type n) const
+ {
+ return re_detail::get_default_error_string(n);
+ }
+private:
+ icu_regex_traits(const icu_regex_traits&);
+ icu_regex_traits& operator=(const icu_regex_traits&);
+
+ //
+ // define the bitmasks offsets we need for additional character properties:
+ //
+ enum{
+ offset_blank = U_CHAR_CATEGORY_COUNT,
+ offset_space = U_CHAR_CATEGORY_COUNT+1,
+ offset_xdigit = U_CHAR_CATEGORY_COUNT+2,
+ offset_underscore = U_CHAR_CATEGORY_COUNT+3,
+ offset_unicode = U_CHAR_CATEGORY_COUNT+4,
+ offset_any = U_CHAR_CATEGORY_COUNT+5,
+ offset_ascii = U_CHAR_CATEGORY_COUNT+6
+ };
+
+ //
+ // and now the masks:
+ //
+ static const char_class_type mask_blank;
+ static const char_class_type mask_space;
+ static const char_class_type mask_xdigit;
+ static const char_class_type mask_underscore;
+ static const char_class_type mask_unicode;
+ static const char_class_type mask_any;
+ static const char_class_type mask_ascii;
+
+ static char_class_type lookup_icu_mask(const ::UChar32* p1, const ::UChar32* p2);
+
+ boost::shared_ptr< ::boost::re_detail::icu_regex_traits_implementation> m_pimpl;
+};
+
+} // namespace boost
+
+//
+// template instances:
+//
+#define BOOST_REGEX_CHAR_T UChar32
+#undef BOOST_REGEX_TRAITS_T
+#define BOOST_REGEX_TRAITS_T , icu_regex_traits
+#define BOOST_REGEX_ICU_INSTANCES
+#ifdef BOOST_REGEX_ICU_INSTANTIATE
+# define BOOST_REGEX_INSTANTIATE
+#endif
+#include <boost/regex/v4/instances.hpp>
+#undef BOOST_REGEX_CHAR_T
+#undef BOOST_REGEX_TRAITS_T
+#undef BOOST_REGEX_ICU_INSTANCES
+#ifdef BOOST_REGEX_INSTANTIATE
+# undef BOOST_REGEX_INSTANTIATE
+#endif
+
+namespace boost{
+
+// types:
+typedef basic_regex< ::UChar32, icu_regex_traits> u32regex;
+typedef match_results<const ::UChar32*> u32match;
+typedef match_results<const ::UChar*> u16match;
+
+//
+// Construction of 32-bit regex types from UTF-8 and UTF-16 primitives:
+//
+namespace re_detail{
+
+#if !defined(BOOST_NO_MEMBER_TEMPLATES) && !defined(__IBMCPP__)
+template <class InputIterator>
+inline u32regex do_make_u32regex(InputIterator i,
+ InputIterator j,
+ boost::regex_constants::syntax_option_type opt,
+ const boost::mpl::int_<1>*)
+{
+ typedef boost::u8_to_u32_iterator<InputIterator, UChar32> conv_type;
+ return u32regex(conv_type(i), conv_type(j), opt);
+}
+
+template <class InputIterator>
+inline u32regex do_make_u32regex(InputIterator i,
+ InputIterator j,
+ boost::regex_constants::syntax_option_type opt,
+ const boost::mpl::int_<2>*)
+{
+ typedef boost::u16_to_u32_iterator<InputIterator, UChar32> conv_type;
+ return u32regex(conv_type(i), conv_type(j), opt);
+}
+
+template <class InputIterator>
+inline u32regex do_make_u32regex(InputIterator i,
+ InputIterator j,
+ boost::regex_constants::syntax_option_type opt,
+ const boost::mpl::int_<4>*)
+{
+ return u32regex(i, j, opt);
+}
+#else
+template <class InputIterator>
+inline u32regex do_make_u32regex(InputIterator i,
+ InputIterator j,
+ boost::regex_constants::syntax_option_type opt,
+ const boost::mpl::int_<1>*)
+{
+ typedef boost::u8_to_u32_iterator<InputIterator, UChar32> conv_type;
+ typedef std::vector<UChar32> vector_type;
+ vector_type v;
+ conv_type a(i), b(j);
+ while(a != b)
+ {
+ v.push_back(*a);
+ ++a;
+ }
+ if(v.size())
+ return u32regex(&*v.begin(), v.size(), opt);
+ return u32regex(static_cast<UChar32 const*>(0), static_cast<u32regex::size_type>(0), opt);
+}
+
+template <class InputIterator>
+inline u32regex do_make_u32regex(InputIterator i,
+ InputIterator j,
+ boost::regex_constants::syntax_option_type opt,
+ const boost::mpl::int_<2>*)
+{
+ typedef boost::u16_to_u32_iterator<InputIterator, UChar32> conv_type;
+ typedef std::vector<UChar32> vector_type;
+ vector_type v;
+ conv_type a(i), b(j);
+ while(a != b)
+ {
+ v.push_back(*a);
+ ++a;
+ }
+ if(v.size())
+ return u32regex(&*v.begin(), v.size(), opt);
+ return u32regex(static_cast<UChar32 const*>(0), static_cast<u32regex::size_type>(0), opt);
+}
+
+template <class InputIterator>
+inline u32regex do_make_u32regex(InputIterator i,
+ InputIterator j,
+ boost::regex_constants::syntax_option_type opt,
+ const boost::mpl::int_<4>*)
+{
+ typedef std::vector<UCHAR32> vector_type;
+ vector_type v;
+ while(i != j)
+ {
+ v.push_back((UCHAR32)(*i));
+ ++a;
+ }
+ if(v.size())
+ return u32regex(&*v.begin(), v.size(), opt);
+ return u32regex(static_cast<UChar32 const*>(0), static_cast<u32regex::size_type>(0), opt);
+}
+#endif
+}
+
+//
+// Construction from an iterator pair:
+//
+template <class InputIterator>
+inline u32regex make_u32regex(InputIterator i,
+ InputIterator j,
+ boost::regex_constants::syntax_option_type opt)
+{
+ return re_detail::do_make_u32regex(i, j, opt, static_cast<boost::mpl::int_<sizeof(*i)> const*>(0));
+}
+//
+// construction from UTF-8 nul-terminated strings:
+//
+inline u32regex make_u32regex(const char* p, boost::regex_constants::syntax_option_type opt = boost::regex_constants::perl)
+{
+ return re_detail::do_make_u32regex(p, p + std::strlen(p), opt, static_cast<boost::mpl::int_<1> const*>(0));
+}
+inline u32regex make_u32regex(const unsigned char* p, boost::regex_constants::syntax_option_type opt = boost::regex_constants::perl)
+{
+ return re_detail::do_make_u32regex(p, p + std::strlen(reinterpret_cast<const char*>(p)), opt, static_cast<boost::mpl::int_<1> const*>(0));
+}
+//
+// construction from UTF-16 nul-terminated strings:
+//
+#ifndef BOOST_NO_WREGEX
+inline u32regex make_u32regex(const wchar_t* p, boost::regex_constants::syntax_option_type opt = boost::regex_constants::perl)
+{
+ return re_detail::do_make_u32regex(p, p + std::wcslen(p), opt, static_cast<boost::mpl::int_<sizeof(wchar_t)> const*>(0));
+}
+#endif
+#ifndef U_WCHAR_IS_UTF16
+inline u32regex make_u32regex(const UChar* p, boost::regex_constants::syntax_option_type opt = boost::regex_constants::perl)
+{
+ return re_detail::do_make_u32regex(p, p + u_strlen(p), opt, static_cast<boost::mpl::int_<2> const*>(0));
+}
+#endif
+//
+// construction from basic_string class-template:
+//
+template<class C, class T, class A>
+inline u32regex make_u32regex(const std::basic_string<C, T, A>& s, boost::regex_constants::syntax_option_type opt = boost::regex_constants::perl)
+{
+ return re_detail::do_make_u32regex(s.begin(), s.end(), opt, static_cast<boost::mpl::int_<sizeof(C)> const*>(0));
+}
+//
+// Construction from ICU string type:
+//
+inline u32regex make_u32regex(const UnicodeString& s, boost::regex_constants::syntax_option_type opt = boost::regex_constants::perl)
+{
+ return re_detail::do_make_u32regex(s.getBuffer(), s.getBuffer() + s.length(), opt, static_cast<boost::mpl::int_<2> const*>(0));
+}
+
+//
+// regex_match overloads that widen the character type as appropriate:
+//
+namespace re_detail{
+template<class MR1, class MR2>
+void copy_results(MR1& out, MR2 const& in)
+{
+ // copy results from an adapted MR2 match_results:
+ out.set_size(in.size(), in.prefix().first.base(), in.suffix().second.base());
+ out.set_base(in.base().base());
+ for(int i = 0; i < (int)in.size(); ++i)
+ {
+ if(in[i].matched)
+ {
+ out.set_first(in[i].first.base(), i);
+ out.set_second(in[i].second.base(), i);
+ }
+ }
+}
+
+template <class BidiIterator, class Allocator>
+inline bool do_regex_match(BidiIterator first, BidiIterator last,
+ match_results<BidiIterator, Allocator>& m,
+ const u32regex& e,
+ match_flag_type flags,
+ boost::mpl::int_<4> const*)
+{
+ return ::boost::regex_match(first, last, m, e, flags);
+}
+template <class BidiIterator, class Allocator>
+bool do_regex_match(BidiIterator first, BidiIterator last,
+ match_results<BidiIterator, Allocator>& m,
+ const u32regex& e,
+ match_flag_type flags,
+ boost::mpl::int_<2> const*)
+{
+ typedef u16_to_u32_iterator<BidiIterator, UChar32> conv_type;
+ typedef match_results<conv_type> match_type;
+ typedef typename match_type::allocator_type alloc_type;
+ match_type what;
+ bool result = ::boost::regex_match(conv_type(first), conv_type(last), what, e, flags);
+ // copy results across to m:
+ if(result) copy_results(m, what);
+ return result;
+}
+template <class BidiIterator, class Allocator>
+bool do_regex_match(BidiIterator first, BidiIterator last,
+ match_results<BidiIterator, Allocator>& m,
+ const u32regex& e,
+ match_flag_type flags,
+ boost::mpl::int_<1> const*)
+{
+ typedef u8_to_u32_iterator<BidiIterator, UChar32> conv_type;
+ typedef match_results<conv_type> match_type;
+ typedef typename match_type::allocator_type alloc_type;
+ match_type what;
+ bool result = ::boost::regex_match(conv_type(first), conv_type(last), what, e, flags);
+ // copy results across to m:
+ if(result) copy_results(m, what);
+ return result;
+}
+} // namespace re_detail
+
+template <class BidiIterator, class Allocator>
+inline bool u32regex_match(BidiIterator first, BidiIterator last,
+ match_results<BidiIterator, Allocator>& m,
+ const u32regex& e,
+ match_flag_type flags = match_default)
+{
+ return re_detail::do_regex_match(first, last, m, e, flags, static_cast<mpl::int_<sizeof(*first)> const*>(0));
+}
+inline bool u32regex_match(const UChar* p,
+ match_results<const UChar*>& m,
+ const u32regex& e,
+ match_flag_type flags = match_default)
+{
+ return re_detail::do_regex_match(p, p+u_strlen(p), m, e, flags, static_cast<mpl::int_<2> const*>(0));
+}
+#if !defined(U_WCHAR_IS_UTF16) && !defined(BOOST_NO_WREGEX)
+inline bool u32regex_match(const wchar_t* p,
+ match_results<const wchar_t*>& m,
+ const u32regex& e,
+ match_flag_type flags = match_default)
+{
+ return re_detail::do_regex_match(p, p+std::wcslen(p), m, e, flags, static_cast<mpl::int_<sizeof(wchar_t)> const*>(0));
+}
+#endif
+inline bool u32regex_match(const char* p,
+ match_results<const char*>& m,
+ const u32regex& e,
+ match_flag_type flags = match_default)
+{
+ return re_detail::do_regex_match(p, p+std::strlen(p), m, e, flags, static_cast<mpl::int_<1> const*>(0));
+}
+inline bool u32regex_match(const unsigned char* p,
+ match_results<const unsigned char*>& m,
+ const u32regex& e,
+ match_flag_type flags = match_default)
+{
+ return re_detail::do_regex_match(p, p+std::strlen((const char*)p), m, e, flags, static_cast<mpl::int_<1> const*>(0));
+}
+inline bool u32regex_match(const std::string& s,
+ match_results<std::string::const_iterator>& m,
+ const u32regex& e,
+ match_flag_type flags = match_default)
+{
+ return re_detail::do_regex_match(s.begin(), s.end(), m, e, flags, static_cast<mpl::int_<1> const*>(0));
+}
+#ifndef BOOST_NO_STD_WSTRING
+inline bool u32regex_match(const std::wstring& s,
+ match_results<std::wstring::const_iterator>& m,
+ const u32regex& e,
+ match_flag_type flags = match_default)
+{
+ return re_detail::do_regex_match(s.begin(), s.end(), m, e, flags, static_cast<mpl::int_<sizeof(wchar_t)> const*>(0));
+}
+#endif
+inline bool u32regex_match(const UnicodeString& s,
+ match_results<const UChar*>& m,
+ const u32regex& e,
+ match_flag_type flags = match_default)
+{
+ return re_detail::do_regex_match(s.getBuffer(), s.getBuffer() + s.length(), m, e, flags, static_cast<mpl::int_<sizeof(wchar_t)> const*>(0));
+}
+//
+// regex_match overloads that do not return what matched:
+//
+template <class BidiIterator>
+inline bool u32regex_match(BidiIterator first, BidiIterator last,
+ const u32regex& e,
+ match_flag_type flags = match_default)
+{
+ match_results<BidiIterator> m;
+ return re_detail::do_regex_match(first, last, m, e, flags, static_cast<mpl::int_<sizeof(*first)> const*>(0));
+}
+inline bool u32regex_match(const UChar* p,
+ const u32regex& e,
+ match_flag_type flags = match_default)
+{
+ match_results<const UChar*> m;
+ return re_detail::do_regex_match(p, p+u_strlen(p), m, e, flags, static_cast<mpl::int_<2> const*>(0));
+}
+#if !defined(U_WCHAR_IS_UTF16) && !defined(BOOST_NO_WREGEX)
+inline bool u32regex_match(const wchar_t* p,
+ const u32regex& e,
+ match_flag_type flags = match_default)
+{
+ match_results<const wchar_t*> m;
+ return re_detail::do_regex_match(p, p+std::wcslen(p), m, e, flags, static_cast<mpl::int_<sizeof(wchar_t)> const*>(0));
+}
+#endif
+inline bool u32regex_match(const char* p,
+ const u32regex& e,
+ match_flag_type flags = match_default)
+{
+ match_results<const char*> m;
+ return re_detail::do_regex_match(p, p+std::strlen(p), m, e, flags, static_cast<mpl::int_<1> const*>(0));
+}
+inline bool u32regex_match(const unsigned char* p,
+ const u32regex& e,
+ match_flag_type flags = match_default)
+{
+ match_results<const unsigned char*> m;
+ return re_detail::do_regex_match(p, p+std::strlen((const char*)p), m, e, flags, static_cast<mpl::int_<1> const*>(0));
+}
+inline bool u32regex_match(const std::string& s,
+ const u32regex& e,
+ match_flag_type flags = match_default)
+{
+ match_results<std::string::const_iterator> m;
+ return re_detail::do_regex_match(s.begin(), s.end(), m, e, flags, static_cast<mpl::int_<1> const*>(0));
+}
+#ifndef BOOST_NO_STD_WSTRING
+inline bool u32regex_match(const std::wstring& s,
+ const u32regex& e,
+ match_flag_type flags = match_default)
+{
+ match_results<std::wstring::const_iterator> m;
+ return re_detail::do_regex_match(s.begin(), s.end(), m, e, flags, static_cast<mpl::int_<sizeof(wchar_t)> const*>(0));
+}
+#endif
+inline bool u32regex_match(const UnicodeString& s,
+ const u32regex& e,
+ match_flag_type flags = match_default)
+{
+ match_results<const UChar*> m;
+ return re_detail::do_regex_match(s.getBuffer(), s.getBuffer() + s.length(), m, e, flags, static_cast<mpl::int_<sizeof(wchar_t)> const*>(0));
+}
+
+//
+// regex_search overloads that widen the character type as appropriate:
+//
+namespace re_detail{
+template <class BidiIterator, class Allocator>
+inline bool do_regex_search(BidiIterator first, BidiIterator last,
+ match_results<BidiIterator, Allocator>& m,
+ const u32regex& e,
+ match_flag_type flags,
+ BidiIterator base,
+ boost::mpl::int_<4> const*)
+{
+ return ::boost::regex_search(first, last, m, e, flags, base);
+}
+template <class BidiIterator, class Allocator>
+bool do_regex_search(BidiIterator first, BidiIterator last,
+ match_results<BidiIterator, Allocator>& m,
+ const u32regex& e,
+ match_flag_type flags,
+ BidiIterator base,
+ boost::mpl::int_<2> const*)
+{
+ typedef u16_to_u32_iterator<BidiIterator, UChar32> conv_type;
+ typedef match_results<conv_type> match_type;
+ typedef typename match_type::allocator_type alloc_type;
+ match_type what;
+ bool result = ::boost::regex_search(conv_type(first), conv_type(last), what, e, flags, conv_type(base));
+ // copy results across to m:
+ if(result) copy_results(m, what);
+ return result;
+}
+template <class BidiIterator, class Allocator>
+bool do_regex_search(BidiIterator first, BidiIterator last,
+ match_results<BidiIterator, Allocator>& m,
+ const u32regex& e,
+ match_flag_type flags,
+ BidiIterator base,
+ boost::mpl::int_<1> const*)
+{
+ typedef u8_to_u32_iterator<BidiIterator, UChar32> conv_type;
+ typedef match_results<conv_type> match_type;
+ typedef typename match_type::allocator_type alloc_type;
+ match_type what;
+ bool result = ::boost::regex_search(conv_type(first), conv_type(last), what, e, flags, conv_type(base));
+ // copy results across to m:
+ if(result) copy_results(m, what);
+ return result;
+}
+}
+
+template <class BidiIterator, class Allocator>
+inline bool u32regex_search(BidiIterator first, BidiIterator last,
+ match_results<BidiIterator, Allocator>& m,
+ const u32regex& e,
+ match_flag_type flags = match_default)
+{
+ return re_detail::do_regex_search(first, last, m, e, flags, first, static_cast<mpl::int_<sizeof(*first)> const*>(0));
+}
+template <class BidiIterator, class Allocator>
+inline bool u32regex_search(BidiIterator first, BidiIterator last,
+ match_results<BidiIterator, Allocator>& m,
+ const u32regex& e,
+ match_flag_type flags,
+ BidiIterator base)
+{
+ return re_detail::do_regex_search(first, last, m, e, flags, base, static_cast<mpl::int_<sizeof(*first)> const*>(0));
+}
+inline bool u32regex_search(const UChar* p,
+ match_results<const UChar*>& m,
+ const u32regex& e,
+ match_flag_type flags = match_default)
+{
+ return re_detail::do_regex_search(p, p+u_strlen(p), m, e, flags, p, static_cast<mpl::int_<2> const*>(0));
+}
+#if !defined(U_WCHAR_IS_UTF16) && !defined(BOOST_NO_WREGEX)
+inline bool u32regex_search(const wchar_t* p,
+ match_results<const wchar_t*>& m,
+ const u32regex& e,
+ match_flag_type flags = match_default)
+{
+ return re_detail::do_regex_search(p, p+std::wcslen(p), m, e, flags, p, static_cast<mpl::int_<sizeof(wchar_t)> const*>(0));
+}
+#endif
+inline bool u32regex_search(const char* p,
+ match_results<const char*>& m,
+ const u32regex& e,
+ match_flag_type flags = match_default)
+{
+ return re_detail::do_regex_search(p, p+std::strlen(p), m, e, flags, p, static_cast<mpl::int_<1> const*>(0));
+}
+inline bool u32regex_search(const unsigned char* p,
+ match_results<const unsigned char*>& m,
+ const u32regex& e,
+ match_flag_type flags = match_default)
+{
+ return re_detail::do_regex_search(p, p+std::strlen((const char*)p), m, e, flags, p, static_cast<mpl::int_<1> const*>(0));
+}
+inline bool u32regex_search(const std::string& s,
+ match_results<std::string::const_iterator>& m,
+ const u32regex& e,
+ match_flag_type flags = match_default)
+{
+ return re_detail::do_regex_search(s.begin(), s.end(), m, e, flags, s.begin(), static_cast<mpl::int_<1> const*>(0));
+}
+#ifndef BOOST_NO_STD_WSTRING
+inline bool u32regex_search(const std::wstring& s,
+ match_results<std::wstring::const_iterator>& m,
+ const u32regex& e,
+ match_flag_type flags = match_default)
+{
+ return re_detail::do_regex_search(s.begin(), s.end(), m, e, flags, s.begin(), static_cast<mpl::int_<sizeof(wchar_t)> const*>(0));
+}
+#endif
+inline bool u32regex_search(const UnicodeString& s,
+ match_results<const UChar*>& m,
+ const u32regex& e,
+ match_flag_type flags = match_default)
+{
+ return re_detail::do_regex_search(s.getBuffer(), s.getBuffer() + s.length(), m, e, flags, s.getBuffer(), static_cast<mpl::int_<sizeof(wchar_t)> const*>(0));
+}
+template <class BidiIterator>
+inline bool u32regex_search(BidiIterator first, BidiIterator last,
+ const u32regex& e,
+ match_flag_type flags = match_default)
+{
+ match_results<BidiIterator> m;
+ return re_detail::do_regex_search(first, last, m, e, flags, first, static_cast<mpl::int_<sizeof(*first)> const*>(0));
+}
+inline bool u32regex_search(const UChar* p,
+ const u32regex& e,
+ match_flag_type flags = match_default)
+{
+ match_results<const UChar*> m;
+ return re_detail::do_regex_search(p, p+u_strlen(p), m, e, flags, p, static_cast<mpl::int_<2> const*>(0));
+}
+#if !defined(U_WCHAR_IS_UTF16) && !defined(BOOST_NO_WREGEX)
+inline bool u32regex_search(const wchar_t* p,
+ const u32regex& e,
+ match_flag_type flags = match_default)
+{
+ match_results<const wchar_t*> m;
+ return re_detail::do_regex_search(p, p+std::wcslen(p), m, e, flags, p, static_cast<mpl::int_<sizeof(wchar_t)> const*>(0));
+}
+#endif
+inline bool u32regex_search(const char* p,
+ const u32regex& e,
+ match_flag_type flags = match_default)
+{
+ match_results<const char*> m;
+ return re_detail::do_regex_search(p, p+std::strlen(p), m, e, flags, p, static_cast<mpl::int_<1> const*>(0));
+}
+inline bool u32regex_search(const unsigned char* p,
+ const u32regex& e,
+ match_flag_type flags = match_default)
+{
+ match_results<const unsigned char*> m;
+ return re_detail::do_regex_search(p, p+std::strlen((const char*)p), m, e, flags, p, static_cast<mpl::int_<1> const*>(0));
+}
+inline bool u32regex_search(const std::string& s,
+ const u32regex& e,
+ match_flag_type flags = match_default)
+{
+ match_results<std::string::const_iterator> m;
+ return re_detail::do_regex_search(s.begin(), s.end(), m, e, flags, s.begin(), static_cast<mpl::int_<1> const*>(0));
+}
+#ifndef BOOST_NO_STD_WSTRING
+inline bool u32regex_search(const std::wstring& s,
+ const u32regex& e,
+ match_flag_type flags = match_default)
+{
+ match_results<std::wstring::const_iterator> m;
+ return re_detail::do_regex_search(s.begin(), s.end(), m, e, flags, s.begin(), static_cast<mpl::int_<sizeof(wchar_t)> const*>(0));
+}
+#endif
+inline bool u32regex_search(const UnicodeString& s,
+ const u32regex& e,
+ match_flag_type flags = match_default)
+{
+ match_results<const UChar*> m;
+ return re_detail::do_regex_search(s.getBuffer(), s.getBuffer() + s.length(), m, e, flags, s.getBuffer(), static_cast<mpl::int_<sizeof(wchar_t)> const*>(0));
+}
+
+//
+// overloads for regex_replace with utf-8 and utf-16 data types:
+//
+namespace re_detail{
+template <class I>
+inline std::pair< boost::u8_to_u32_iterator<I>, boost::u8_to_u32_iterator<I> >
+ make_utf32_seq(I i, I j, mpl::int_<1> const*)
+{
+ return std::pair< boost::u8_to_u32_iterator<I>, boost::u8_to_u32_iterator<I> >(boost::u8_to_u32_iterator<I>(i), boost::u8_to_u32_iterator<I>(j));
+}
+template <class I>
+inline std::pair< boost::u16_to_u32_iterator<I>, boost::u16_to_u32_iterator<I> >
+ make_utf32_seq(I i, I j, mpl::int_<2> const*)
+{
+ return std::pair< boost::u16_to_u32_iterator<I>, boost::u16_to_u32_iterator<I> >(boost::u16_to_u32_iterator<I>(i), boost::u16_to_u32_iterator<I>(j));
+}
+template <class I>
+inline std::pair< I, I >
+ make_utf32_seq(I i, I j, mpl::int_<4> const*)
+{
+ return std::pair< I, I >(i, j);
+}
+template <class charT>
+inline std::pair< boost::u8_to_u32_iterator<const charT*>, boost::u8_to_u32_iterator<const charT*> >
+ make_utf32_seq(const charT* p, mpl::int_<1> const*)
+{
+ return std::pair< boost::u8_to_u32_iterator<const charT*>, boost::u8_to_u32_iterator<const charT*> >(boost::u8_to_u32_iterator<const charT*>(p), boost::u8_to_u32_iterator<const charT*>(p+std::strlen((const char*)p)));
+}
+template <class charT>
+inline std::pair< boost::u16_to_u32_iterator<const charT*>, boost::u16_to_u32_iterator<const charT*> >
+ make_utf32_seq(const charT* p, mpl::int_<2> const*)
+{
+ return std::pair< boost::u16_to_u32_iterator<const charT*>, boost::u16_to_u32_iterator<const charT*> >(boost::u16_to_u32_iterator<const charT*>(p), boost::u16_to_u32_iterator<const charT*>(p+u_strlen((const UChar*)p)));
+}
+template <class charT>
+inline std::pair< const charT*, const charT* >
+ make_utf32_seq(const charT* p, mpl::int_<4> const*)
+{
+ return std::pair< const charT*, const charT* >(p, p+icu_regex_traits::length((UChar32 const*)p));
+}
+template <class OutputIterator>
+inline OutputIterator make_utf32_out(OutputIterator o, mpl::int_<4> const*)
+{
+ return o;
+}
+template <class OutputIterator>
+inline utf16_output_iterator<OutputIterator> make_utf32_out(OutputIterator o, mpl::int_<2> const*)
+{
+ return o;
+}
+template <class OutputIterator>
+inline utf8_output_iterator<OutputIterator> make_utf32_out(OutputIterator o, mpl::int_<1> const*)
+{
+ return o;
+}
+
+template <class OutputIterator, class I1, class I2>
+OutputIterator do_regex_replace(OutputIterator out,
+ std::pair<I1, I1> const& in,
+ const u32regex& e,
+ const std::pair<I2, I2>& fmt,
+ match_flag_type flags
+ )
+{
+ // unfortunately we have to copy the format string in order to pass in onward:
+ std::vector<UChar32> f;
+#ifndef BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS
+ f.assign(fmt.first, fmt.second);
+#else
+ f.clear();
+ I2 pos = fmt.first;
+ while(pos != fmt.second)
+ f.push_back(*pos++);
+#endif
+
+ regex_iterator<I1, UChar32, icu_regex_traits> i(in.first, in.second, e, flags);
+ regex_iterator<I1, UChar32, icu_regex_traits> j;
+ if(i == j)
+ {
+ if(!(flags & regex_constants::format_no_copy))
+ out = re_detail::copy(in.first, in.second, out);
+ }
+ else
+ {
+ I1 last_m = in.first;
+ while(i != j)
+ {
+ if(!(flags & regex_constants::format_no_copy))
+ out = re_detail::copy(i->prefix().first, i->prefix().second, out);
+ if(f.size())
+ out = ::boost::re_detail::regex_format_imp(out, *i, &*f.begin(), &*f.begin() + f.size(), flags, e.get_traits());
+ else
+ out = ::boost::re_detail::regex_format_imp(out, *i, static_cast<UChar32 const*>(0), static_cast<UChar32 const*>(0), flags, e.get_traits());
+ last_m = (*i)[0].second;
+ if(flags & regex_constants::format_first_only)
+ break;
+ ++i;
+ }
+ if(!(flags & regex_constants::format_no_copy))
+ out = re_detail::copy(last_m, in.second, out);
+ }
+ return out;
+}
+template <class BaseIterator>
+inline const BaseIterator& extract_output_base(const BaseIterator& b)
+{
+ return b;
+}
+template <class BaseIterator>
+inline BaseIterator extract_output_base(const utf8_output_iterator<BaseIterator>& b)
+{
+ return b.base();
+}
+template <class BaseIterator>
+inline BaseIterator extract_output_base(const utf16_output_iterator<BaseIterator>& b)
+{
+ return b.base();
+}
+} // re_detail
+
+template <class OutputIterator, class BidirectionalIterator, class charT>
+inline OutputIterator u32regex_replace(OutputIterator out,
+ BidirectionalIterator first,
+ BidirectionalIterator last,
+ const u32regex& e,
+ const charT* fmt,
+ match_flag_type flags = match_default)
+{
+ return re_detail::extract_output_base
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+ <OutputIterator>
+#endif
+ (
+ re_detail::do_regex_replace(
+ re_detail::make_utf32_out(out, static_cast<mpl::int_<sizeof(*first)> const*>(0)),
+ re_detail::make_utf32_seq(first, last, static_cast<mpl::int_<sizeof(*first)> const*>(0)),
+ e,
+ re_detail::make_utf32_seq(fmt, static_cast<mpl::int_<sizeof(*fmt)> const*>(0)),
+ flags)
+ );
+}
+
+template <class OutputIterator, class Iterator, class charT>
+inline OutputIterator u32regex_replace(OutputIterator out,
+ Iterator first,
+ Iterator last,
+ const u32regex& e,
+ const std::basic_string<charT>& fmt,
+ match_flag_type flags = match_default)
+{
+ return re_detail::extract_output_base
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+ <OutputIterator>
+#endif
+ (
+ re_detail::do_regex_replace(
+ re_detail::make_utf32_out(out, static_cast<mpl::int_<sizeof(*first)> const*>(0)),
+ re_detail::make_utf32_seq(first, last, static_cast<mpl::int_<sizeof(*first)> const*>(0)),
+ e,
+ re_detail::make_utf32_seq(fmt.begin(), fmt.end(), static_cast<mpl::int_<sizeof(charT)> const*>(0)),
+ flags)
+ );
+}
+
+template <class OutputIterator, class Iterator>
+inline OutputIterator u32regex_replace(OutputIterator out,
+ Iterator first,
+ Iterator last,
+ const u32regex& e,
+ const UnicodeString& fmt,
+ match_flag_type flags = match_default)
+{
+ return re_detail::extract_output_base
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+ <OutputIterator>
+#endif
+ (
+ re_detail::do_regex_replace(
+ re_detail::make_utf32_out(out, static_cast<mpl::int_<sizeof(*first)> const*>(0)),
+ re_detail::make_utf32_seq(first, last, static_cast<mpl::int_<sizeof(*first)> const*>(0)),
+ e,
+ re_detail::make_utf32_seq(fmt.getBuffer(), fmt.getBuffer() + fmt.length(), static_cast<mpl::int_<2> const*>(0)),
+ flags)
+ );
+}
+
+template <class charT>
+std::basic_string<charT> u32regex_replace(const std::basic_string<charT>& s,
+ const u32regex& e,
+ const charT* fmt,
+ match_flag_type flags = match_default)
+{
+ std::basic_string<charT> result;
+ re_detail::string_out_iterator<std::basic_string<charT> > i(result);
+ u32regex_replace(i, s.begin(), s.end(), e, fmt, flags);
+ return result;
+}
+
+template <class charT>
+std::basic_string<charT> u32regex_replace(const std::basic_string<charT>& s,
+ const u32regex& e,
+ const std::basic_string<charT>& fmt,
+ match_flag_type flags = match_default)
+{
+ std::basic_string<charT> result;
+ re_detail::string_out_iterator<std::basic_string<charT> > i(result);
+ u32regex_replace(i, s.begin(), s.end(), e, fmt.c_str(), flags);
+ return result;
+}
+
+namespace re_detail{
+
+class unicode_string_out_iterator
+{
+ UnicodeString* out;
+public:
+ unicode_string_out_iterator(UnicodeString& s) : out(&s) {}
+ unicode_string_out_iterator& operator++() { return *this; }
+ unicode_string_out_iterator& operator++(int) { return *this; }
+ unicode_string_out_iterator& operator*() { return *this; }
+ unicode_string_out_iterator& operator=(UChar v)
+ {
+ *out += v;
+ return *this;
+ }
+ typedef std::ptrdiff_t difference_type;
+ typedef UChar value_type;
+ typedef value_type* pointer;
+ typedef value_type& reference;
+ typedef std::output_iterator_tag iterator_category;
+};
+
+}
+
+inline UnicodeString u32regex_replace(const UnicodeString& s,
+ const u32regex& e,
+ const UChar* fmt,
+ match_flag_type flags = match_default)
+{
+ UnicodeString result;
+ re_detail::unicode_string_out_iterator i(result);
+ u32regex_replace(i, s.getBuffer(), s.getBuffer()+s.length(), e, fmt, flags);
+ return result;
+}
+
+inline UnicodeString u32regex_replace(const UnicodeString& s,
+ const u32regex& e,
+ const UnicodeString& fmt,
+ match_flag_type flags = match_default)
+{
+ UnicodeString result;
+ re_detail::unicode_string_out_iterator i(result);
+ re_detail::do_regex_replace(
+ re_detail::make_utf32_out(i, static_cast<mpl::int_<2> const*>(0)),
+ re_detail::make_utf32_seq(s.getBuffer(), s.getBuffer()+s.length(), static_cast<mpl::int_<2> const*>(0)),
+ e,
+ re_detail::make_utf32_seq(fmt.getBuffer(), fmt.getBuffer() + fmt.length(), static_cast<mpl::int_<2> const*>(0)),
+ flags);
+ return result;
+}
+
+} // namespace boost.
+
+#include <boost/regex/v4/u32regex_iterator.hpp>
+#include <boost/regex/v4/u32regex_token_iterator.hpp>
+
+#endif
diff --git a/boost/boost/regex/mfc.hpp b/boost/boost/regex/mfc.hpp
new file mode 100644
index 00000000000..02502f95048
--- /dev/null
+++ b/boost/boost/regex/mfc.hpp
@@ -0,0 +1,190 @@
+/*
+ *
+ * Copyright (c) 2004
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE mfc.hpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: Overloads and helpers for using MFC/ATL string types with Boost.Regex.
+ */
+
+#ifndef BOOST_REGEX_MFC_HPP
+#define BOOST_REGEX_MFC_HPP
+
+#include <atlsimpstr.h>
+#include <boost/regex.hpp>
+
+namespace boost{
+
+//
+// define the types used for TCHAR's:
+typedef basic_regex<TCHAR> tregex;
+typedef match_results<TCHAR const*> tmatch;
+typedef regex_iterator<TCHAR const*> tregex_iterator;
+typedef regex_token_iterator<TCHAR const*> tregex_token_iterator;
+
+#if _MSC_VER >= 1310
+#define SIMPLE_STRING_PARAM class B, bool b
+#define SIMPLE_STRING_ARG_LIST B, b
+#else
+#define SIMPLE_STRING_PARAM class B
+#define SIMPLE_STRING_ARG_LIST B
+#endif
+
+//
+// define regex creation functions:
+//
+template <SIMPLE_STRING_PARAM>
+inline basic_regex<B>
+make_regex(const ATL::CSimpleStringT<SIMPLE_STRING_ARG_LIST>& s, ::boost::regex_constants::syntax_option_type f = boost::regex_constants::normal)
+{
+ basic_regex<B> result(s.GetString(), s.GetString() + s.GetLength(), f);
+ return result;
+}
+//
+// regex_match overloads:
+//
+template <SIMPLE_STRING_PARAM, class A, class T>
+inline bool regex_match(const ATL::CSimpleStringT<SIMPLE_STRING_ARG_LIST>& s,
+ match_results<const B*, A>& what,
+ const basic_regex<B, T>& e,
+ boost::regex_constants::match_flag_type f = boost::regex_constants::match_default)
+{
+ return ::boost::regex_match(s.GetString(),
+ s.GetString() + s.GetLength(),
+ what,
+ e,
+ f);
+}
+
+template <SIMPLE_STRING_PARAM, class T>
+inline bool regex_match(const ATL::CSimpleStringT<SIMPLE_STRING_ARG_LIST>& s,
+ const basic_regex<B, T>& e,
+ boost::regex_constants::match_flag_type f = boost::regex_constants::match_default)
+{
+ return ::boost::regex_match(s.GetString(),
+ s.GetString() + s.GetLength(),
+ e,
+ f);
+}
+//
+// regex_search overloads:
+//
+template <SIMPLE_STRING_PARAM, class A, class T>
+inline bool regex_search(const ATL::CSimpleStringT<SIMPLE_STRING_ARG_LIST>& s,
+ match_results<const B*, A>& what,
+ const basic_regex<B, T>& e,
+ boost::regex_constants::match_flag_type f = boost::regex_constants::match_default)
+{
+ return ::boost::regex_search(s.GetString(),
+ s.GetString() + s.GetLength(),
+ what,
+ e,
+ f);
+}
+
+template <SIMPLE_STRING_PARAM, class T>
+inline bool regex_search(const ATL::CSimpleStringT<SIMPLE_STRING_ARG_LIST>& s,
+ const basic_regex<B, T>& e,
+ boost::regex_constants::match_flag_type f = boost::regex_constants::match_default)
+{
+ return ::boost::regex_search(s.GetString(),
+ s.GetString() + s.GetLength(),
+ e,
+ f);
+}
+//
+// regex_iterator creation:
+//
+template <SIMPLE_STRING_PARAM>
+inline regex_iterator<B const*>
+make_regex_iterator(const ATL::CSimpleStringT<SIMPLE_STRING_ARG_LIST>& s, const basic_regex<B>& e, ::boost::regex_constants::match_flag_type f = boost::regex_constants::match_default)
+{
+ regex_iterator<B const*> result(s.GetString(), s.GetString() + s.GetLength(), e, f);
+ return result;
+}
+
+template <SIMPLE_STRING_PARAM>
+inline regex_token_iterator<B const*>
+ make_regex_token_iterator(const ATL::CSimpleStringT<SIMPLE_STRING_ARG_LIST>& s, const basic_regex<B>& e, int sub = 0, ::boost::regex_constants::match_flag_type f = boost::regex_constants::match_default)
+{
+ regex_token_iterator<B const*> result(s.GetString(), s.GetString() + s.GetLength(), e, sub, f);
+ return result;
+}
+
+template <SIMPLE_STRING_PARAM>
+inline regex_token_iterator<B const*>
+make_regex_token_iterator(const ATL::CSimpleStringT<SIMPLE_STRING_ARG_LIST>& s, const basic_regex<B>& e, const std::vector<int>& subs, ::boost::regex_constants::match_flag_type f = boost::regex_constants::match_default)
+{
+ regex_token_iterator<B const*> result(s.GetString(), s.GetString() + s.GetLength(), e, subs, f);
+ return result;
+}
+
+template <SIMPLE_STRING_PARAM, std::size_t N>
+inline regex_token_iterator<B const*>
+make_regex_token_iterator(const ATL::CSimpleStringT<SIMPLE_STRING_ARG_LIST>& s, const basic_regex<B>& e, const int (& subs)[N], ::boost::regex_constants::match_flag_type f = boost::regex_constants::match_default)
+{
+ regex_token_iterator<B const*> result(s.GetString(), s.GetString() + s.GetLength(), e, subs, f);
+ return result;
+}
+
+template <class OutputIterator, class BidirectionalIterator, class traits,
+ SIMPLE_STRING_PARAM>
+OutputIterator regex_replace(OutputIterator out,
+ BidirectionalIterator first,
+ BidirectionalIterator last,
+ const basic_regex<B, traits>& e,
+ const ATL::CSimpleStringT<SIMPLE_STRING_ARG_LIST>& fmt,
+ match_flag_type flags = match_default)
+{
+ return ::boost::regex_replace(out, first, last, e, fmt.GetString(), flags);
+}
+
+namespace re_detail{
+
+template <SIMPLE_STRING_PARAM>
+class mfc_string_out_iterator
+{
+ ATL::CSimpleStringT<SIMPLE_STRING_ARG_LIST>* out;
+public:
+ mfc_string_out_iterator(ATL::CSimpleStringT<SIMPLE_STRING_ARG_LIST>& s) : out(&s) {}
+ mfc_string_out_iterator& operator++() { return *this; }
+ mfc_string_out_iterator& operator++(int) { return *this; }
+ mfc_string_out_iterator& operator*() { return *this; }
+ mfc_string_out_iterator& operator=(B v)
+ {
+ out->AppendChar(v);
+ return *this;
+ }
+ typedef std::ptrdiff_t difference_type;
+ typedef B value_type;
+ typedef value_type* pointer;
+ typedef value_type& reference;
+ typedef std::output_iterator_tag iterator_category;
+};
+
+}
+
+template <class traits, SIMPLE_STRING_PARAM>
+ATL::CSimpleStringT<SIMPLE_STRING_ARG_LIST> regex_replace(const ATL::CSimpleStringT<SIMPLE_STRING_ARG_LIST>& s,
+ const basic_regex<B, traits>& e,
+ const ATL::CSimpleStringT<SIMPLE_STRING_ARG_LIST>& fmt,
+ match_flag_type flags = match_default)
+{
+ ATL::CSimpleStringT<SIMPLE_STRING_ARG_LIST> result(s.GetManager());
+ re_detail::mfc_string_out_iterator<SIMPLE_STRING_ARG_LIST> i(result);
+ regex_replace(i, s.GetString(), s.GetString() + s.GetLength(), e, fmt.GetString(), flags);
+ return result;
+}
+
+} // namespace boost.
+
+#endif
diff --git a/boost/boost/regex/pattern_except.hpp b/boost/boost/regex/pattern_except.hpp
new file mode 100644
index 00000000000..25cab1cc5cf
--- /dev/null
+++ b/boost/boost/regex/pattern_except.hpp
@@ -0,0 +1,83 @@
+/*
+ *
+ * Copyright (c) 1998-2002
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE pattern_except.hpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: Declares pattern-matching exception classes.
+ */
+
+#ifndef BOOST_RE_PAT_EXCEPT_HPP
+#define BOOST_RE_PAT_EXCEPT_HPP
+
+#ifndef BOOST_REGEX_CONFIG_HPP
+#include <boost/regex/config.hpp>
+#endif
+
+#include <stdexcept>
+#include <cstddef>
+#include <boost/regex/v4/error_type.hpp>
+
+namespace boost{
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable : 4275)
+#endif
+ class BOOST_REGEX_DECL regex_error : public std::runtime_error
+{
+public:
+ explicit regex_error(const std::string& s, regex_constants::error_type err = regex_constants::error_unknown, std::ptrdiff_t pos = 0);
+ explicit regex_error(regex_constants::error_type err);
+ ~regex_error() throw();
+ regex_constants::error_type code()const
+ { return m_error_code; }
+ std::ptrdiff_t position()const
+ { return m_position; }
+ void raise()const;
+private:
+ regex_constants::error_type m_error_code;
+ std::ptrdiff_t m_position;
+};
+
+typedef regex_error bad_pattern;
+typedef regex_error bad_expression;
+
+namespace re_detail{
+
+BOOST_REGEX_DECL void BOOST_REGEX_CALL raise_runtime_error(const std::runtime_error& ex);
+
+template <class traits>
+void raise_error(const traits& t, regex_constants::error_type code)
+{
+ (void)t; // warning suppression
+ std::runtime_error e(t.error_string(code));
+ ::boost::re_detail::raise_runtime_error(e);
+}
+
+}
+
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+} // namespace boost
+
+#endif
+
+
+
diff --git a/boost/boost/regex/pending/object_cache.hpp b/boost/boost/regex/pending/object_cache.hpp
new file mode 100644
index 00000000000..bc37e276d3a
--- /dev/null
+++ b/boost/boost/regex/pending/object_cache.hpp
@@ -0,0 +1,163 @@
+/*
+ *
+ * Copyright (c) 2004
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE object_cache.hpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: Implements a generic object cache.
+ */
+
+#ifndef BOOST_REGEX_OBJECT_CACHE_HPP
+#define BOOST_REGEX_OBJECT_CACHE_HPP
+
+#include <map>
+#include <list>
+#include <stdexcept>
+#include <string>
+#include <boost/config.hpp>
+#include <boost/shared_ptr.hpp>
+#ifdef BOOST_HAS_THREADS
+#include <boost/regex/pending/static_mutex.hpp>
+#endif
+
+namespace boost{
+
+template <class Key, class Object>
+class object_cache
+{
+public:
+ typedef std::pair< ::boost::shared_ptr<Object const>, Key const*> value_type;
+ typedef std::list<value_type> list_type;
+ typedef typename list_type::iterator list_iterator;
+ typedef std::map<Key, list_iterator> map_type;
+ typedef typename map_type::iterator map_iterator;
+ typedef typename list_type::size_type size_type;
+ static boost::shared_ptr<Object const> get(const Key& k, size_type max_cache_size);
+
+private:
+ static boost::shared_ptr<Object const> do_get(const Key& k, size_type max_cache_size);
+
+ struct data
+ {
+ list_type cont;
+ map_type index;
+ };
+
+ // Needed by compilers not implementing the resolution to DR45. For reference,
+ // see http://www.open-std.org/JTC1/SC22/WG21/docs/cwg_defects.html#45.
+ friend struct data;
+};
+
+template <class Key, class Object>
+boost::shared_ptr<Object const> object_cache<Key, Object>::get(const Key& k, size_type max_cache_size)
+{
+#ifdef BOOST_HAS_THREADS
+ static boost::static_mutex mut = BOOST_STATIC_MUTEX_INIT;
+
+ boost::static_mutex::scoped_lock l(mut);
+ if(l)
+ {
+ return do_get(k, max_cache_size);
+ }
+ //
+ // what do we do if the lock fails?
+ // for now just throw, but we should never really get here...
+ //
+ ::boost::throw_exception(std::runtime_error("Error in thread safety code: could not acquire a lock"));
+ return boost::shared_ptr<Object>();
+#else
+ return do_get(k, max_cache_size);
+#endif
+}
+
+template <class Key, class Object>
+boost::shared_ptr<Object const> object_cache<Key, Object>::do_get(const Key& k, size_type max_cache_size)
+{
+ typedef typename object_cache<Key, Object>::data object_data;
+ typedef typename map_type::size_type map_size_type;
+ static object_data s_data;
+
+ //
+ // see if the object is already in the cache:
+ //
+ map_iterator mpos = s_data.index.find(k);
+ if(mpos != s_data.index.end())
+ {
+ //
+ // Eureka!
+ // We have a cached item, bump it up the list and return it:
+ //
+ if(--(s_data.cont.end()) != mpos->second)
+ {
+ // splice out the item we want to move:
+ list_type temp;
+ temp.splice(temp.end(), s_data.cont, mpos->second);
+ // and now place it at the end of the list:
+ s_data.cont.splice(s_data.cont.end(), temp, temp.begin());
+ BOOST_ASSERT(*(s_data.cont.back().second) == k);
+ // update index with new position:
+ mpos->second = --(s_data.cont.end());
+ BOOST_ASSERT(&(mpos->first) == mpos->second->second);
+ BOOST_ASSERT(&(mpos->first) == s_data.cont.back().second);
+ }
+ return s_data.cont.back().first;
+ }
+ //
+ // if we get here then the item is not in the cache,
+ // so create it:
+ //
+ boost::shared_ptr<Object const> result(new Object(k));
+ //
+ // Add it to the list, and index it:
+ //
+ s_data.cont.push_back(value_type(result, 0));
+ s_data.index.insert(std::make_pair(k, --(s_data.cont.end())));
+ s_data.cont.back().second = &(s_data.index.find(k)->first);
+ map_size_type s = s_data.index.size();
+ BOOST_ASSERT(s_data.index[k]->first.get() == result.get());
+ BOOST_ASSERT(&(s_data.index.find(k)->first) == s_data.cont.back().second);
+ BOOST_ASSERT(s_data.index.find(k)->first == k);
+ if(s > max_cache_size)
+ {
+ //
+ // We have too many items in the list, so we need to start
+ // popping them off the back of the list, but only if they're
+ // being held uniquely by us:
+ //
+ list_iterator pos = s_data.cont.begin();
+ list_iterator last = s_data.cont.end();
+ while((pos != last) && (s > max_cache_size))
+ {
+ if(pos->first.unique())
+ {
+ list_iterator condemmed(pos);
+ ++pos;
+ // now remove the items from our containers,
+ // then order has to be as follows:
+ BOOST_ASSERT(s_data.index.find(*(condemmed->second)) != s_data.index.end());
+ s_data.index.erase(*(condemmed->second));
+ s_data.cont.erase(condemmed);
+ --s;
+ }
+ else
+ --pos;
+ }
+ BOOST_ASSERT(s_data.index[k]->first.get() == result.get());
+ BOOST_ASSERT(&(s_data.index.find(k)->first) == s_data.cont.back().second);
+ BOOST_ASSERT(s_data.index.find(k)->first == k);
+ }
+ return result;
+}
+
+}
+
+#endif
diff --git a/boost/boost/regex/pending/static_mutex.hpp b/boost/boost/regex/pending/static_mutex.hpp
new file mode 100644
index 00000000000..8dbf48e7749
--- /dev/null
+++ b/boost/boost/regex/pending/static_mutex.hpp
@@ -0,0 +1,177 @@
+/*
+ *
+ * Copyright (c) 2004
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE static_mutex.hpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: Declares static_mutex lock type, there are three different
+ * implementations: POSIX pthreads, WIN32 threads, and portable,
+ * these are described in more detail below.
+ */
+
+#ifndef BOOST_REGEX_STATIC_MUTEX_HPP
+#define BOOST_REGEX_STATIC_MUTEX_HPP
+
+#include <boost/config.hpp>
+#include <boost/regex/config.hpp> // dll import/export options.
+
+#ifdef BOOST_HAS_PTHREADS
+#include <pthread.h>
+#endif
+
+#if defined(BOOST_HAS_PTHREADS) && defined(PTHREAD_MUTEX_INITIALIZER)
+//
+// pthreads version:
+// simple wrap around a pthread_mutex_t initialized with
+// PTHREAD_MUTEX_INITIALIZER.
+//
+namespace boost{
+
+class BOOST_REGEX_DECL scoped_static_mutex_lock;
+
+class static_mutex
+{
+public:
+ typedef scoped_static_mutex_lock scoped_lock;
+ pthread_mutex_t m_mutex;
+};
+
+#define BOOST_STATIC_MUTEX_INIT { PTHREAD_MUTEX_INITIALIZER, }
+
+class BOOST_REGEX_DECL scoped_static_mutex_lock
+{
+public:
+ scoped_static_mutex_lock(static_mutex& mut, bool lk = true);
+ ~scoped_static_mutex_lock();
+ inline bool locked()const
+ {
+ return m_have_lock;
+ }
+ inline operator void const*()const
+ {
+ return locked() ? this : 0;
+ }
+ void lock();
+ void unlock();
+private:
+ static_mutex& m_mutex;
+ bool m_have_lock;
+};
+
+
+} // namespace boost
+#elif defined(BOOST_HAS_WINTHREADS)
+//
+// Win32 version:
+// Use a 32-bit int as a lock, along with a test-and-set
+// implementation using InterlockedCompareExchange.
+//
+
+#include <boost/cstdint.hpp>
+
+namespace boost{
+
+class BOOST_REGEX_DECL scoped_static_mutex_lock;
+
+class static_mutex
+{
+public:
+ typedef scoped_static_mutex_lock scoped_lock;
+ boost::int32_t m_mutex;
+};
+
+#define BOOST_STATIC_MUTEX_INIT { 0, }
+
+class BOOST_REGEX_DECL scoped_static_mutex_lock
+{
+public:
+ scoped_static_mutex_lock(static_mutex& mut, bool lk = true);
+ ~scoped_static_mutex_lock();
+ operator void const*()const;
+ bool locked()const;
+ void lock();
+ void unlock();
+private:
+ static_mutex& m_mutex;
+ bool m_have_lock;
+ scoped_static_mutex_lock(const scoped_static_mutex_lock&);
+ scoped_static_mutex_lock& operator=(const scoped_static_mutex_lock&);
+};
+
+inline scoped_static_mutex_lock::operator void const*()const
+{
+ return locked() ? this : 0;
+}
+
+inline bool scoped_static_mutex_lock::locked()const
+{
+ return m_have_lock;
+}
+
+} // namespace
+
+#else
+//
+// Portable version of a static mutex based on Boost.Thread library:
+// This has to use a single mutex shared by all instances of static_mutex
+// because boost::call_once doesn't alow us to pass instance information
+// down to the initialisation proceedure. In fact the initialisation routine
+// may need to be called more than once - but only once per instance.
+//
+#include <boost/thread/once.hpp>
+#include <boost/thread/recursive_mutex.hpp>
+
+namespace boost{
+
+class BOOST_REGEX_DECL scoped_static_mutex_lock;
+extern "C" BOOST_REGEX_DECL void free_static_mutex();
+
+class BOOST_REGEX_DECL static_mutex
+{
+public:
+ typedef scoped_static_mutex_lock scoped_lock;
+ static void init();
+ static boost::recursive_mutex* m_pmutex;
+ static boost::once_flag m_once;
+};
+
+#define BOOST_STATIC_MUTEX_INIT { }
+
+class BOOST_REGEX_DECL scoped_static_mutex_lock
+{
+public:
+ scoped_static_mutex_lock(static_mutex& mut, bool lk = true);
+ ~scoped_static_mutex_lock();
+ operator void const*()const;
+ bool locked()const;
+ void lock();
+ void unlock();
+private:
+ boost::recursive_mutex::scoped_lock* m_plock;
+ bool m_have_lock;
+};
+
+inline scoped_static_mutex_lock::operator void const*()const
+{
+ return locked() ? this : 0;
+}
+
+inline bool scoped_static_mutex_lock::locked()const
+{
+ return m_have_lock;
+}
+
+} // namespace
+
+#endif
+
+#endif
diff --git a/boost/boost/regex/pending/unicode_iterator.hpp b/boost/boost/regex/pending/unicode_iterator.hpp
new file mode 100644
index 00000000000..14196c0a122
--- /dev/null
+++ b/boost/boost/regex/pending/unicode_iterator.hpp
@@ -0,0 +1,691 @@
+/*
+ *
+ * Copyright (c) 2004
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE unicode_iterator.hpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: Iterator adapters for converting between different Unicode encodings.
+ */
+
+/****************************************************************************
+
+Contents:
+~~~~~~~~~
+
+1) Read Only, Input Adapters:
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+template <class BaseIterator, class U8Type = ::boost::uint8_t>
+class u32_to_u8_iterator;
+
+Adapts sequence of UTF-32 code points to "look like" a sequence of UTF-8.
+
+template <class BaseIterator, class U32Type = ::boost::uint32_t>
+class u8_to_u32_iterator;
+
+Adapts sequence of UTF-8 code points to "look like" a sequence of UTF-32.
+
+template <class BaseIterator, class U16Type = ::boost::uint16_t>
+class u32_to_u16_iterator;
+
+Adapts sequence of UTF-32 code points to "look like" a sequence of UTF-16.
+
+template <class BaseIterator, class U32Type = ::boost::uint32_t>
+class u16_to_u32_iterator;
+
+Adapts sequence of UTF-16 code points to "look like" a sequence of UTF-32.
+
+2) Single pass output iterator adapters:
+
+template <class BaseIterator>
+class utf8_output_iterator;
+
+Accepts UTF-32 code points and forwards them on as UTF-8 code points.
+
+template <class BaseIterator>
+class utf16_output_iterator;
+
+Accepts UTF-32 code points and forwards them on as UTF-16 code points.
+
+****************************************************************************/
+
+#ifndef BOOST_REGEX_UNICODE_ITERATOR_HPP
+#define BOOST_REGEX_UNICODE_ITERATOR_HPP
+#include <boost/cstdint.hpp>
+#include <boost/assert.hpp>
+#include <boost/iterator/iterator_facade.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/throw_exception.hpp>
+#include <stdexcept>
+#ifndef BOOST_NO_STD_LOCALE
+#include <sstream>
+#endif
+#include <limits.h> // CHAR_BIT
+
+namespace boost{
+
+namespace detail{
+
+static const ::boost::uint16_t high_surrogate_base = 0xD7C0u;
+static const ::boost::uint16_t low_surrogate_base = 0xDC00u;
+static const ::boost::uint32_t ten_bit_mask = 0x3FFu;
+
+inline bool is_high_surrogate(::boost::uint16_t v)
+{
+ return (v & 0xFC00u) == 0xd800u;
+}
+inline bool is_low_surrogate(::boost::uint16_t v)
+{
+ return (v & 0xFC00u) == 0xdc00u;
+}
+template <class T>
+inline bool is_surrogate(T v)
+{
+ return (v & 0xF800u) == 0xd800;
+}
+
+inline unsigned utf8_byte_count(boost::uint8_t c)
+{
+ // if the most significant bit with a zero in it is in position
+ // 8-N then there are N bytes in this UTF-8 sequence:
+ boost::uint8_t mask = 0x80u;
+ unsigned result = 0;
+ while(c & mask)
+ {
+ ++result;
+ mask >>= 1;
+ }
+ return (result == 0) ? 1 : ((result > 4) ? 4 : result);
+}
+
+inline unsigned utf8_trailing_byte_count(boost::uint8_t c)
+{
+ return utf8_byte_count(c) - 1;
+}
+
+inline void invalid_utf32_code_point(::boost::uint32_t val)
+{
+#ifndef BOOST_NO_STD_LOCALE
+ std::stringstream ss;
+ ss << "Invalid UTF-32 code point U+" << std::showbase << std::hex << val << " encountered while trying to encode UTF-16 sequence";
+ std::out_of_range e(ss.str());
+#else
+ std::out_of_range e("Invalid UTF-32 code point encountered while trying to encode UTF-16 sequence");
+#endif
+ boost::throw_exception(e);
+}
+
+
+} // namespace detail
+
+template <class BaseIterator, class U16Type = ::boost::uint16_t>
+class u32_to_u16_iterator
+ : public boost::iterator_facade<u32_to_u16_iterator<BaseIterator, U16Type>, U16Type, std::bidirectional_iterator_tag, const U16Type>
+{
+ typedef boost::iterator_facade<u32_to_u16_iterator<BaseIterator, U16Type>, U16Type, std::bidirectional_iterator_tag, const U16Type> base_type;
+
+#if !defined(BOOST_NO_STD_ITERATOR_TRAITS) && !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+ typedef typename std::iterator_traits<BaseIterator>::value_type base_value_type;
+
+ BOOST_STATIC_ASSERT(sizeof(base_value_type)*CHAR_BIT == 32);
+ BOOST_STATIC_ASSERT(sizeof(U16Type)*CHAR_BIT == 16);
+#endif
+
+public:
+ typename base_type::reference
+ dereference()const
+ {
+ if(m_current == 2)
+ extract_current();
+ return m_values[m_current];
+ }
+ bool equal(const u32_to_u16_iterator& that)const
+ {
+ if(m_position == that.m_position)
+ {
+ // Both m_currents must be equal, or both even
+ // this is the same as saying their sum must be even:
+ return (m_current + that.m_current) & 1u ? false : true;
+ }
+ return false;
+ }
+ void increment()
+ {
+ // if we have a pending read then read now, so that we know whether
+ // to skip a position, or move to a low-surrogate:
+ if(m_current == 2)
+ {
+ // pending read:
+ extract_current();
+ }
+ // move to the next surrogate position:
+ ++m_current;
+ // if we've reached the end skip a position:
+ if(m_values[m_current] == 0)
+ {
+ m_current = 2;
+ ++m_position;
+ }
+ }
+ void decrement()
+ {
+ if(m_current != 1)
+ {
+ // decrementing an iterator always leads to a valid position:
+ --m_position;
+ extract_current();
+ m_current = m_values[1] ? 1 : 0;
+ }
+ else
+ {
+ m_current = 0;
+ }
+ }
+ BaseIterator base()const
+ {
+ return m_position;
+ }
+ // construct:
+ u32_to_u16_iterator() : m_position(), m_current(0)
+ {
+ m_values[0] = 0;
+ m_values[1] = 0;
+ m_values[2] = 0;
+ }
+ u32_to_u16_iterator(BaseIterator b) : m_position(b), m_current(2)
+ {
+ m_values[0] = 0;
+ m_values[1] = 0;
+ m_values[2] = 0;
+ }
+private:
+
+ void extract_current()const
+ {
+ // begin by checking for a code point out of range:
+ ::boost::uint32_t v = *m_position;
+ if(v >= 0x10000u)
+ {
+ if(v > 0x10FFFFu)
+ detail::invalid_utf32_code_point(*m_position);
+ // split into two surrogates:
+ m_values[0] = static_cast<U16Type>(v >> 10) + detail::high_surrogate_base;
+ m_values[1] = static_cast<U16Type>(v & detail::ten_bit_mask) + detail::low_surrogate_base;
+ m_current = 0;
+ BOOST_ASSERT(detail::is_high_surrogate(m_values[0]));
+ BOOST_ASSERT(detail::is_low_surrogate(m_values[1]));
+ }
+ else
+ {
+ // 16-bit code point:
+ m_values[0] = static_cast<U16Type>(*m_position);
+ m_values[1] = 0;
+ m_current = 0;
+ // value must not be a surrogate:
+ if(detail::is_surrogate(m_values[0]))
+ detail::invalid_utf32_code_point(*m_position);
+ }
+ }
+ BaseIterator m_position;
+ mutable U16Type m_values[3];
+ mutable unsigned m_current;
+};
+
+template <class BaseIterator, class U32Type = ::boost::uint32_t>
+class u16_to_u32_iterator
+ : public boost::iterator_facade<u16_to_u32_iterator<BaseIterator, U32Type>, U32Type, std::bidirectional_iterator_tag, const U32Type>
+{
+ typedef boost::iterator_facade<u16_to_u32_iterator<BaseIterator, U32Type>, U32Type, std::bidirectional_iterator_tag, const U32Type> base_type;
+ // special values for pending iterator reads:
+ BOOST_STATIC_CONSTANT(U32Type, pending_read = 0xffffffffu);
+
+#if !defined(BOOST_NO_STD_ITERATOR_TRAITS) && !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+ typedef typename std::iterator_traits<BaseIterator>::value_type base_value_type;
+
+ BOOST_STATIC_ASSERT(sizeof(base_value_type)*CHAR_BIT == 16);
+ BOOST_STATIC_ASSERT(sizeof(U32Type)*CHAR_BIT == 32);
+#endif
+
+public:
+ typename base_type::reference
+ dereference()const
+ {
+ if(m_value == pending_read)
+ extract_current();
+ return m_value;
+ }
+ bool equal(const u16_to_u32_iterator& that)const
+ {
+ return m_position == that.m_position;
+ }
+ void increment()
+ {
+ // skip high surrogate first if there is one:
+ if(detail::is_high_surrogate(*m_position)) ++m_position;
+ ++m_position;
+ m_value = pending_read;
+ }
+ void decrement()
+ {
+ --m_position;
+ // if we have a low surrogate then go back one more:
+ if(detail::is_low_surrogate(*m_position))
+ --m_position;
+ m_value = pending_read;
+ }
+ BaseIterator base()const
+ {
+ return m_position;
+ }
+ // construct:
+ u16_to_u32_iterator() : m_position()
+ {
+ m_value = pending_read;
+ }
+ u16_to_u32_iterator(BaseIterator b) : m_position(b)
+ {
+ m_value = pending_read;
+ }
+private:
+ static void invalid_code_point(::boost::uint16_t val)
+ {
+#ifndef BOOST_NO_STD_LOCALE
+ std::stringstream ss;
+ ss << "Misplaced UTF-16 surrogate U+" << std::showbase << std::hex << val << " encountered while trying to encode UTF-32 sequence";
+ std::out_of_range e(ss.str());
+#else
+ std::out_of_range e("Misplaced UTF-16 surrogate encountered while trying to encode UTF-32 sequence");
+#endif
+ boost::throw_exception(e);
+ }
+ void extract_current()const
+ {
+ m_value = static_cast<U32Type>(static_cast< ::boost::uint16_t>(*m_position));
+ // if the last value is a high surrogate then adjust m_position and m_value as needed:
+ if(detail::is_high_surrogate(*m_position))
+ {
+ // precondition; next value must have be a low-surrogate:
+ BaseIterator next(m_position);
+ ::boost::uint16_t t = *++next;
+ if((t & 0xFC00u) != 0xDC00u)
+ invalid_code_point(t);
+ m_value = (m_value - detail::high_surrogate_base) << 10;
+ m_value |= (static_cast<U32Type>(static_cast< ::boost::uint16_t>(t)) & detail::ten_bit_mask);
+ }
+ // postcondition; result must not be a surrogate:
+ if(detail::is_surrogate(m_value))
+ invalid_code_point(static_cast< ::boost::uint16_t>(m_value));
+ }
+ BaseIterator m_position;
+ mutable U32Type m_value;
+};
+
+template <class BaseIterator, class U8Type = ::boost::uint8_t>
+class u32_to_u8_iterator
+ : public boost::iterator_facade<u32_to_u8_iterator<BaseIterator, U8Type>, U8Type, std::bidirectional_iterator_tag, const U8Type>
+{
+ typedef boost::iterator_facade<u32_to_u8_iterator<BaseIterator, U8Type>, U8Type, std::bidirectional_iterator_tag, const U8Type> base_type;
+
+#if !defined(BOOST_NO_STD_ITERATOR_TRAITS) && !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+ typedef typename std::iterator_traits<BaseIterator>::value_type base_value_type;
+
+ BOOST_STATIC_ASSERT(sizeof(base_value_type)*CHAR_BIT == 32);
+ BOOST_STATIC_ASSERT(sizeof(U8Type)*CHAR_BIT == 8);
+#endif
+
+public:
+ typename base_type::reference
+ dereference()const
+ {
+ if(m_current == 4)
+ extract_current();
+ return m_values[m_current];
+ }
+ bool equal(const u32_to_u8_iterator& that)const
+ {
+ if(m_position == that.m_position)
+ {
+ // either the m_current's must be equal, or one must be 0 and
+ // the other 4: which means neither must have bits 1 or 2 set:
+ return (m_current == that.m_current)
+ || (((m_current | that.m_current) & 3) == 0);
+ }
+ return false;
+ }
+ void increment()
+ {
+ // if we have a pending read then read now, so that we know whether
+ // to skip a position, or move to a low-surrogate:
+ if(m_current == 4)
+ {
+ // pending read:
+ extract_current();
+ }
+ // move to the next surrogate position:
+ ++m_current;
+ // if we've reached the end skip a position:
+ if(m_values[m_current] == 0)
+ {
+ m_current = 4;
+ ++m_position;
+ }
+ }
+ void decrement()
+ {
+ if((m_current & 3) == 0)
+ {
+ --m_position;
+ extract_current();
+ m_current = 3;
+ while(m_current && (m_values[m_current] == 0))
+ --m_current;
+ }
+ else
+ --m_current;
+ }
+ BaseIterator base()const
+ {
+ return m_position;
+ }
+ // construct:
+ u32_to_u8_iterator() : m_position(), m_current(0)
+ {
+ m_values[0] = 0;
+ m_values[1] = 0;
+ m_values[2] = 0;
+ m_values[3] = 0;
+ m_values[4] = 0;
+ }
+ u32_to_u8_iterator(BaseIterator b) : m_position(b), m_current(4)
+ {
+ m_values[0] = 0;
+ m_values[1] = 0;
+ m_values[2] = 0;
+ m_values[3] = 0;
+ m_values[4] = 0;
+ }
+private:
+
+ void extract_current()const
+ {
+ boost::uint32_t c = *m_position;
+ if(c > 0x10FFFFu)
+ detail::invalid_utf32_code_point(c);
+ if(c < 0x80u)
+ {
+ m_values[0] = static_cast<unsigned char>(c);
+ m_values[1] = static_cast<unsigned char>(0u);
+ m_values[2] = static_cast<unsigned char>(0u);
+ m_values[3] = static_cast<unsigned char>(0u);
+ }
+ else if(c < 0x800u)
+ {
+ m_values[0] = static_cast<unsigned char>(0xC0u + (c >> 6));
+ m_values[1] = static_cast<unsigned char>(0x80u + (c & 0x3Fu));
+ m_values[2] = static_cast<unsigned char>(0u);
+ m_values[3] = static_cast<unsigned char>(0u);
+ }
+ else if(c < 0x10000u)
+ {
+ m_values[0] = static_cast<unsigned char>(0xE0u + (c >> 12));
+ m_values[1] = static_cast<unsigned char>(0x80u + ((c >> 6) & 0x3Fu));
+ m_values[2] = static_cast<unsigned char>(0x80u + (c & 0x3Fu));
+ m_values[3] = static_cast<unsigned char>(0u);
+ }
+ else
+ {
+ m_values[0] = static_cast<unsigned char>(0xF0u + (c >> 18));
+ m_values[1] = static_cast<unsigned char>(0x80u + ((c >> 12) & 0x3Fu));
+ m_values[2] = static_cast<unsigned char>(0x80u + ((c >> 6) & 0x3Fu));
+ m_values[3] = static_cast<unsigned char>(0x80u + (c & 0x3Fu));
+ }
+ m_current= 0;
+ }
+ BaseIterator m_position;
+ mutable U8Type m_values[5];
+ mutable unsigned m_current;
+};
+
+template <class BaseIterator, class U32Type = ::boost::uint32_t>
+class u8_to_u32_iterator
+ : public boost::iterator_facade<u8_to_u32_iterator<BaseIterator, U32Type>, U32Type, std::bidirectional_iterator_tag, const U32Type>
+{
+ typedef boost::iterator_facade<u8_to_u32_iterator<BaseIterator, U32Type>, U32Type, std::bidirectional_iterator_tag, const U32Type> base_type;
+ // special values for pending iterator reads:
+ BOOST_STATIC_CONSTANT(U32Type, pending_read = 0xffffffffu);
+
+#if !defined(BOOST_NO_STD_ITERATOR_TRAITS) && !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+ typedef typename std::iterator_traits<BaseIterator>::value_type base_value_type;
+
+ BOOST_STATIC_ASSERT(sizeof(base_value_type)*CHAR_BIT == 8);
+ BOOST_STATIC_ASSERT(sizeof(U32Type)*CHAR_BIT == 32);
+#endif
+
+public:
+ typename base_type::reference
+ dereference()const
+ {
+ if(m_value == pending_read)
+ extract_current();
+ return m_value;
+ }
+ bool equal(const u8_to_u32_iterator& that)const
+ {
+ return m_position == that.m_position;
+ }
+ void increment()
+ {
+ // skip high surrogate first if there is one:
+ unsigned c = detail::utf8_byte_count(*m_position);
+ std::advance(m_position, c);
+ m_value = pending_read;
+ }
+ void decrement()
+ {
+ // Keep backtracking until we don't have a trailing character:
+ unsigned count = 0;
+ while((*--m_position & 0xC0u) == 0x80u) ++count;
+ // now check that the sequence was valid:
+ if(count != detail::utf8_trailing_byte_count(*m_position))
+ invalid_sequnce();
+ m_value = pending_read;
+ }
+ BaseIterator base()const
+ {
+ return m_position;
+ }
+ // construct:
+ u8_to_u32_iterator() : m_position()
+ {
+ m_value = pending_read;
+ }
+ u8_to_u32_iterator(BaseIterator b) : m_position(b)
+ {
+ m_value = pending_read;
+ }
+private:
+ static void invalid_sequnce()
+ {
+ std::out_of_range e("Invalid UTF-8 sequence encountered while trying to encode UTF-32 character");
+ boost::throw_exception(e);
+ }
+ void extract_current()const
+ {
+ m_value = static_cast<U32Type>(static_cast< ::boost::uint8_t>(*m_position));
+ // we must not have a continuation character:
+ if((m_value & 0xC0u) == 0x80u)
+ invalid_sequnce();
+ // see how many extra byts we have:
+ unsigned extra = detail::utf8_trailing_byte_count(*m_position);
+ // extract the extra bits, 6 from each extra byte:
+ BaseIterator next(m_position);
+ for(unsigned c = 0; c < extra; ++c)
+ {
+ ++next;
+ m_value <<= 6;
+ m_value += static_cast<boost::uint8_t>(*next) & 0x3Fu;
+ }
+ // we now need to remove a few of the leftmost bits, but how many depends
+ // upon how many extra bytes we've extracted:
+ static const boost::uint32_t masks[4] =
+ {
+ 0x7Fu,
+ 0x7FFu,
+ 0xFFFFu,
+ 0x1FFFFFu,
+ };
+ m_value &= masks[extra];
+ // check the result:
+ if(m_value > static_cast<U32Type>(0x10FFFFu))
+ invalid_sequnce();
+ }
+ BaseIterator m_position;
+ mutable U32Type m_value;
+};
+
+template <class BaseIterator>
+class utf16_output_iterator
+{
+public:
+ typedef void difference_type;
+ typedef void value_type;
+ typedef boost::uint32_t* pointer;
+ typedef boost::uint32_t& reference;
+ typedef std::output_iterator_tag iterator_category;
+
+ utf16_output_iterator(const BaseIterator& b)
+ : m_position(b){}
+ utf16_output_iterator(const utf16_output_iterator& that)
+ : m_position(that.m_position){}
+ utf16_output_iterator& operator=(const utf16_output_iterator& that)
+ {
+ m_position = that.m_position;
+ return *this;
+ }
+ const utf16_output_iterator& operator*()const
+ {
+ return *this;
+ }
+ void operator=(boost::uint32_t val)const
+ {
+ push(val);
+ }
+ utf16_output_iterator& operator++()
+ {
+ return *this;
+ }
+ utf16_output_iterator& operator++(int)
+ {
+ return *this;
+ }
+ BaseIterator base()const
+ {
+ return m_position;
+ }
+private:
+ void push(boost::uint32_t v)const
+ {
+ if(v >= 0x10000u)
+ {
+ // begin by checking for a code point out of range:
+ if(v > 0x10FFFFu)
+ detail::invalid_utf32_code_point(v);
+ // split into two surrogates:
+ *m_position++ = static_cast<boost::uint16_t>(v >> 10) + detail::high_surrogate_base;
+ *m_position++ = static_cast<boost::uint16_t>(v & detail::ten_bit_mask) + detail::low_surrogate_base;
+ }
+ else
+ {
+ // 16-bit code point:
+ // value must not be a surrogate:
+ if(detail::is_surrogate(v))
+ detail::invalid_utf32_code_point(v);
+ *m_position++ = static_cast<boost::uint16_t>(v);
+ }
+ }
+ mutable BaseIterator m_position;
+};
+
+template <class BaseIterator>
+class utf8_output_iterator
+{
+public:
+ typedef void difference_type;
+ typedef void value_type;
+ typedef boost::uint32_t* pointer;
+ typedef boost::uint32_t& reference;
+ typedef std::output_iterator_tag iterator_category;
+
+ utf8_output_iterator(const BaseIterator& b)
+ : m_position(b){}
+ utf8_output_iterator(const utf8_output_iterator& that)
+ : m_position(that.m_position){}
+ utf8_output_iterator& operator=(const utf8_output_iterator& that)
+ {
+ m_position = that.m_position;
+ return *this;
+ }
+ const utf8_output_iterator& operator*()const
+ {
+ return *this;
+ }
+ void operator=(boost::uint32_t val)const
+ {
+ push(val);
+ }
+ utf8_output_iterator& operator++()
+ {
+ return *this;
+ }
+ utf8_output_iterator& operator++(int)
+ {
+ return *this;
+ }
+ BaseIterator base()const
+ {
+ return m_position;
+ }
+private:
+ void push(boost::uint32_t c)const
+ {
+ if(c > 0x10FFFFu)
+ detail::invalid_utf32_code_point(c);
+ if(c < 0x80u)
+ {
+ *m_position++ = static_cast<unsigned char>(c);
+ }
+ else if(c < 0x800u)
+ {
+ *m_position++ = static_cast<unsigned char>(0xC0u + (c >> 6));
+ *m_position++ = static_cast<unsigned char>(0x80u + (c & 0x3Fu));
+ }
+ else if(c < 0x10000u)
+ {
+ *m_position++ = static_cast<unsigned char>(0xE0u + (c >> 12));
+ *m_position++ = static_cast<unsigned char>(0x80u + ((c >> 6) & 0x3Fu));
+ *m_position++ = static_cast<unsigned char>(0x80u + (c & 0x3Fu));
+ }
+ else
+ {
+ *m_position++ = static_cast<unsigned char>(0xF0u + (c >> 18));
+ *m_position++ = static_cast<unsigned char>(0x80u + ((c >> 12) & 0x3Fu));
+ *m_position++ = static_cast<unsigned char>(0x80u + ((c >> 6) & 0x3Fu));
+ *m_position++ = static_cast<unsigned char>(0x80u + (c & 0x3Fu));
+ }
+ }
+ mutable BaseIterator m_position;
+};
+
+} // namespace boost
+
+#endif // BOOST_REGEX_UNICODE_ITERATOR_HPP
+
diff --git a/boost/boost/regex/regex_traits.hpp b/boost/boost/regex/regex_traits.hpp
new file mode 100644
index 00000000000..730ba6e0d84
--- /dev/null
+++ b/boost/boost/regex/regex_traits.hpp
@@ -0,0 +1,35 @@
+/*
+ *
+ * Copyright (c) 1998-2002
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE regex_traits.hpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: Declares regular expression traits classes.
+ */
+
+#ifndef BOOST_REGEX_TRAITS_HPP
+#define BOOST_REGEX_TRAITS_HPP
+
+#ifndef BOOST_REGEX_CONFIG_HPP
+# include <boost/regex/config.hpp>
+#endif
+
+# ifndef BOOST_REGEX_TRAITS_HPP_INCLUDED
+# include <boost/regex/v4/regex_traits.hpp>
+# endif
+
+#endif // include
+
+
+
+
+
diff --git a/boost/boost/regex/user.hpp b/boost/boost/regex/user.hpp
new file mode 100644
index 00000000000..95908173d73
--- /dev/null
+++ b/boost/boost/regex/user.hpp
@@ -0,0 +1,90 @@
+/*
+ *
+ * Copyright (c) 1998-2002
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE user.hpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: User settable options.
+ */
+
+// define if you want the regex library to use the C locale
+// even on Win32:
+// #define BOOST_REGEX_USE_C_LOCALE
+
+// define this is you want the regex library to use the C++
+// locale:
+// #define BOOST_REGEX_USE_CPP_LOCALE
+
+// define this if the runtime library is a dll, and you
+// want BOOST_REGEX_DYN_LINK to set up dll exports/imports
+// with __declspec(dllexport)/__declspec(dllimport.)
+// #define BOOST_REGEX_HAS_DLL_RUNTIME
+
+// define this if you want to dynamically link to regex,
+// if the runtime library is also a dll (Probably Win32 specific,
+// and has no effect unless BOOST_REGEX_HAS_DLL_RUNTIME is set):
+// #define BOOST_REGEX_DYN_LINK
+
+// define this if you don't want the lib to automatically
+// select its link libraries:
+// #define BOOST_REGEX_NO_LIB
+
+// define this if templates with switch statements cause problems:
+// #define BOOST_REGEX_NO_TEMPLATE_SWITCH_MERGE
+
+// define this to disable Win32 support when available:
+// #define BOOST_REGEX_NO_W32
+
+// define this if bool is not a real type:
+// #define BOOST_REGEX_NO_BOOL
+
+// define this if no template instances are to be placed in
+// the library rather than users object files:
+// #define BOOST_REGEX_NO_EXTERNAL_TEMPLATES
+
+// define this if the forward declarations in regex_fwd.hpp
+// cause more problems than they are worth:
+// #define BOOST_REGEX_NO_FWD
+
+// define this if your compiler supports MS Windows structured
+// exception handling.
+// #define BOOST_REGEX_HAS_MS_STACK_GUARD
+
+// define this if you want to use the recursive algorithm
+// even if BOOST_REGEX_HAS_MS_STACK_GUARD is not defined.
+// #define BOOST_REGEX_RECURSIVE
+
+// define this if you want to use the non-recursive
+// algorithm, even if the recursive version would be the default.
+// #define BOOST_REGEX_NON_RECURSIVE
+
+// define this if you want to set the size of the memory blocks
+// used by the non-recursive algorithm.
+// #define BOOST_REGEX_BLOCKSIZE 4096
+
+// define this if you want to set the maximum number of memory blocks
+// used by the non-recursive algorithm.
+// #define BOOST_REGEX_MAX_BLOCKS 1024
+
+// define this if you want to set the maximum number of memory blocks
+// cached by the non-recursive algorithm: Normally this is 16, but can be
+// higher if you have multiple threads all using boost.regex, or lower
+// if you don't want boost.regex to cache memory.
+// #define BOOST_REGEX_MAX_CACHE_BLOCKS 16
+
+// define this if you want to be able to access extended capture
+// information in your sub_match's (caution this will slow things
+// down quite a bit).
+// #define BOOST_REGEX_MATCH_EXTRA
+
+// define this if you want to enable support for Unicode via ICU.
+// #define BOOST_HAS_ICU
diff --git a/boost/boost/regex/v4/basic_regex.hpp b/boost/boost/regex/v4/basic_regex.hpp
new file mode 100644
index 00000000000..c6ef40028a7
--- /dev/null
+++ b/boost/boost/regex/v4/basic_regex.hpp
@@ -0,0 +1,638 @@
+/*
+ *
+ * Copyright (c) 1998-2004
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org/ for most recent version.
+ * FILE basic_regex.cpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: Declares template class basic_regex.
+ */
+
+#ifndef BOOST_REGEX_V4_BASIC_REGEX_HPP
+#define BOOST_REGEX_V4_BASIC_REGEX_HPP
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+namespace boost{
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable : 4251 4231 4660)
+#endif
+
+namespace re_detail{
+
+//
+// forward declaration, we will need this one later:
+//
+template <class charT, class traits>
+class basic_regex_parser;
+
+//
+// class regex_data:
+// represents the data we wish to expose to the matching algorithms.
+//
+template <class charT, class traits>
+struct regex_data
+{
+ typedef regex_constants::syntax_option_type flag_type;
+ typedef std::size_t size_type;
+
+ regex_data(const ::boost::shared_ptr<
+ ::boost::regex_traits_wrapper<traits> >& t)
+ : m_ptraits(t), m_expression(0), m_expression_len(0) {}
+ regex_data()
+ : m_ptraits(new ::boost::regex_traits_wrapper<traits>()), m_expression(0), m_expression_len(0) {}
+
+ ::boost::shared_ptr<
+ ::boost::regex_traits_wrapper<traits>
+ > m_ptraits; // traits class instance
+ flag_type m_flags; // flags with which we were compiled
+ int m_status; // error code (0 implies OK).
+ const charT* m_expression; // the original expression
+ std::ptrdiff_t m_expression_len; // the length of the original expression
+ size_type m_mark_count; // the number of marked sub-expressions
+ re_detail::re_syntax_base* m_first_state; // the first state of the machine
+ unsigned m_restart_type; // search optimisation type
+ unsigned char m_startmap[1 << CHAR_BIT]; // which characters can start a match
+ unsigned int m_can_be_null; // whether we can match a null string
+ re_detail::raw_storage m_data; // the buffer in which our states are constructed
+ typename traits::char_class_type m_word_mask; // mask used to determine if a character is a word character
+};
+//
+// class basic_regex_implementation
+// pimpl implementation class for basic_regex.
+//
+template <class charT, class traits>
+class basic_regex_implementation
+ : public regex_data<charT, traits>
+{
+public:
+ typedef regex_constants::syntax_option_type flag_type;
+ typedef std::ptrdiff_t difference_type;
+ typedef std::size_t size_type;
+ typedef typename traits::locale_type locale_type;
+ typedef const charT* const_iterator;
+
+ basic_regex_implementation(){}
+ basic_regex_implementation(const ::boost::shared_ptr<
+ ::boost::regex_traits_wrapper<traits> >& t)
+ : regex_data<charT, traits>(t) {}
+ void assign(const charT* arg_first,
+ const charT* arg_last,
+ flag_type f)
+ {
+ regex_data<charT, traits>* pdat = this;
+ basic_regex_parser<charT, traits> parser(pdat);
+ parser.parse(arg_first, arg_last, f);
+ }
+
+ locale_type BOOST_REGEX_CALL imbue(locale_type l)
+ {
+ return this->m_ptraits->imbue(l);
+ }
+ locale_type BOOST_REGEX_CALL getloc()const
+ {
+ return this->m_ptraits->getloc();
+ }
+ std::basic_string<charT> BOOST_REGEX_CALL str()const
+ {
+ std::basic_string<charT> result;
+ if(this->m_status == 0)
+ result = std::basic_string<charT>(this->m_expression, this->m_expression_len);
+ return result;
+ }
+ const_iterator BOOST_REGEX_CALL expression()const
+ {
+ return this->m_expression;
+ }
+ //
+ // begin, end:
+ const_iterator BOOST_REGEX_CALL begin()const
+ {
+ return (!this->m_status ? 0 : this->m_expression);
+ }
+ const_iterator BOOST_REGEX_CALL end()const
+ {
+ return (!this->m_status ? 0 : this->m_expression + this->m_expression_len);
+ }
+ flag_type BOOST_REGEX_CALL flags()const
+ {
+ return this->m_flags;
+ }
+ size_type BOOST_REGEX_CALL size()const
+ {
+ return this->m_expression_len;
+ }
+ int BOOST_REGEX_CALL status()const
+ {
+ return this->m_status;
+ }
+ size_type BOOST_REGEX_CALL mark_count()const
+ {
+ return this->m_mark_count;
+ }
+ const re_detail::re_syntax_base* get_first_state()const
+ {
+ return this->m_first_state;
+ }
+ unsigned get_restart_type()const
+ {
+ return this->m_restart_type;
+ }
+ const unsigned char* get_map()const
+ {
+ return this->m_startmap;
+ }
+ const ::boost::regex_traits_wrapper<traits>& get_traits()const
+ {
+ return *(this->m_ptraits);
+ }
+ bool can_be_null()const
+ {
+ return this->m_can_be_null;
+ }
+ const regex_data<charT, traits>& get_data()const
+ {
+ basic_regex_implementation<charT, traits> const* p = this;
+ return *static_cast<const regex_data<charT, traits>*>(p);
+ }
+};
+
+} // namespace re_detail
+//
+// class basic_regex:
+// represents the compiled
+// regular expression:
+//
+
+#ifdef BOOST_REGEX_NO_FWD
+template <class charT, class traits = regex_traits<charT> >
+#else
+template <class charT, class traits >
+#endif
+class basic_regex : public regbase
+{
+public:
+ // typedefs:
+ typedef typename traits::size_type traits_size_type;
+ typedef typename traits::string_type traits_string_type;
+ typedef charT char_type;
+ typedef traits traits_type;
+
+ typedef charT value_type;
+ typedef charT& reference;
+ typedef const charT& const_reference;
+ typedef const charT* const_iterator;
+ typedef const_iterator iterator;
+ typedef std::ptrdiff_t difference_type;
+ typedef std::size_t size_type;
+ typedef regex_constants::syntax_option_type flag_type;
+ // locale_type
+ // placeholder for actual locale type used by the
+ // traits class to localise *this.
+ typedef typename traits::locale_type locale_type;
+
+public:
+ explicit basic_regex(){}
+ explicit basic_regex(const charT* p, flag_type f = regex_constants::normal)
+ {
+ assign(p, f);
+ }
+ basic_regex(const charT* p1, const charT* p2, flag_type f = regex_constants::normal)
+ {
+ assign(p1, p2, f);
+ }
+ basic_regex(const charT* p, size_type len, flag_type f)
+ {
+ assign(p, len, f);
+ }
+ basic_regex(const basic_regex& that)
+ : m_pimpl(that.m_pimpl) {}
+ ~basic_regex(){}
+ basic_regex& BOOST_REGEX_CALL operator=(const basic_regex& that)
+ {
+ return assign(that);
+ }
+ basic_regex& BOOST_REGEX_CALL operator=(const charT* ptr)
+ {
+ return assign(ptr);
+ }
+
+ //
+ // assign:
+ basic_regex& assign(const basic_regex& that)
+ {
+ m_pimpl = that.m_pimpl;
+ return *this;
+ }
+ basic_regex& assign(const charT* p, flag_type f = regex_constants::normal)
+ {
+ return assign(p, p + traits::length(p), f);
+ }
+ basic_regex& assign(const charT* p, size_type len, flag_type f)
+ {
+ return assign(p, p + len, f);
+ }
+private:
+ basic_regex& do_assign(const charT* p1,
+ const charT* p2,
+ flag_type f);
+public:
+ basic_regex& assign(const charT* p1,
+ const charT* p2,
+ flag_type f = regex_constants::normal)
+ {
+ return do_assign(p1, p2, f);
+ }
+#if !defined(BOOST_NO_MEMBER_TEMPLATES)
+
+ template <class ST, class SA>
+ unsigned int BOOST_REGEX_CALL set_expression(const std::basic_string<charT, ST, SA>& p, flag_type f = regex_constants::normal)
+ {
+ return set_expression(p.data(), p.data() + p.size(), f);
+ }
+
+ template <class ST, class SA>
+ explicit basic_regex(const std::basic_string<charT, ST, SA>& p, flag_type f = regex_constants::normal)
+ {
+ assign(p, f);
+ }
+
+ template <class InputIterator>
+ basic_regex(InputIterator arg_first, InputIterator arg_last, flag_type f = regex_constants::normal)
+ {
+ typedef typename traits::string_type seq_type;
+ seq_type a(arg_first, arg_last);
+ if(a.size())
+ assign(&*a.begin(), &*a.begin() + a.size(), f);
+ else
+ assign(static_cast<const charT*>(0), static_cast<const charT*>(0), f);
+ }
+
+ template <class ST, class SA>
+ basic_regex& BOOST_REGEX_CALL operator=(const std::basic_string<charT, ST, SA>& p)
+ {
+ return assign(p.data(), p.data() + p.size(), regex_constants::normal);
+ }
+
+ template <class string_traits, class A>
+ basic_regex& BOOST_REGEX_CALL assign(
+ const std::basic_string<charT, string_traits, A>& s,
+ flag_type f = regex_constants::normal)
+ {
+ return assign(s.data(), s.data() + s.size(), f);
+ }
+
+ template <class InputIterator>
+ basic_regex& BOOST_REGEX_CALL assign(InputIterator arg_first,
+ InputIterator arg_last,
+ flag_type f = regex_constants::normal)
+ {
+ typedef typename traits::string_type seq_type;
+ seq_type a(arg_first, arg_last);
+ if(a.size())
+ {
+ const charT* p1 = &*a.begin();
+ const charT* p2 = &*a.begin() + a.size();
+ return assign(p1, p2, f);
+ }
+ return assign(static_cast<const charT*>(0), static_cast<const charT*>(0), f);
+ }
+#else
+ unsigned int BOOST_REGEX_CALL set_expression(const std::basic_string<charT>& p, flag_type f = regex_constants::normal)
+ {
+ return set_expression(p.data(), p.data() + p.size(), f);
+ }
+
+ basic_regex(const std::basic_string<charT>& p, flag_type f = regex_constants::normal)
+ {
+ assign(p, f);
+ }
+
+ basic_regex& BOOST_REGEX_CALL operator=(const std::basic_string<charT>& p)
+ {
+ return assign(p.data(), p.data() + p.size(), regex_constants::normal);
+ }
+
+ basic_regex& BOOST_REGEX_CALL assign(
+ const std::basic_string<charT>& s,
+ flag_type f = regex_constants::normal)
+ {
+ return assign(s.data(), s.data() + s.size(), f);
+ }
+
+#endif
+
+ //
+ // locale:
+ locale_type BOOST_REGEX_CALL imbue(locale_type l);
+ locale_type BOOST_REGEX_CALL getloc()const
+ {
+ return m_pimpl.get() ? m_pimpl->getloc() : locale_type();
+ }
+ //
+ // getflags:
+ // retained for backwards compatibility only, "flags"
+ // is now the preferred name:
+ flag_type BOOST_REGEX_CALL getflags()const
+ {
+ return flags();
+ }
+ flag_type BOOST_REGEX_CALL flags()const
+ {
+ return m_pimpl.get() ? m_pimpl->flags() : 0;
+ }
+ //
+ // str:
+ std::basic_string<charT> BOOST_REGEX_CALL str()const
+ {
+ return m_pimpl.get() ? m_pimpl->str() : std::basic_string<charT>();
+ }
+ //
+ // begin, end:
+ const_iterator BOOST_REGEX_CALL begin()const
+ {
+ return (m_pimpl.get() ? m_pimpl->begin() : 0);
+ }
+ const_iterator BOOST_REGEX_CALL end()const
+ {
+ return (m_pimpl.get() ? m_pimpl->end() : 0);
+ }
+ //
+ // swap:
+ void BOOST_REGEX_CALL swap(basic_regex& that)throw()
+ {
+ m_pimpl.swap(that.m_pimpl);
+ }
+ //
+ // size:
+ size_type BOOST_REGEX_CALL size()const
+ {
+ return (m_pimpl.get() ? m_pimpl->size() : 0);
+ }
+ //
+ // max_size:
+ size_type BOOST_REGEX_CALL max_size()const
+ {
+ return UINT_MAX;
+ }
+ //
+ // empty:
+ bool BOOST_REGEX_CALL empty()const
+ {
+ return (m_pimpl.get() ? 0 != m_pimpl->status() : true);
+ }
+
+ size_type BOOST_REGEX_CALL mark_count()const
+ {
+ return (m_pimpl.get() ? m_pimpl->mark_count() : 0);
+ }
+
+ int status()const
+ {
+ return (m_pimpl.get() ? m_pimpl->status() : regex_constants::error_empty);
+ }
+
+ int BOOST_REGEX_CALL compare(const basic_regex& that) const
+ {
+ if(m_pimpl.get() == that.m_pimpl.get())
+ return 0;
+ if(!m_pimpl.get())
+ return -1;
+ if(!that.m_pimpl.get())
+ return 1;
+ if(status() != that.status())
+ return status() - that.status();
+ if(flags() != that.flags())
+ return flags() - that.flags();
+ return str().compare(that.str());
+ }
+ bool BOOST_REGEX_CALL operator==(const basic_regex& e)const
+ {
+ return compare(e) == 0;
+ }
+ bool BOOST_REGEX_CALL operator != (const basic_regex& e)const
+ {
+ return compare(e) != 0;
+ }
+ bool BOOST_REGEX_CALL operator<(const basic_regex& e)const
+ {
+ return compare(e) < 0;
+ }
+ bool BOOST_REGEX_CALL operator>(const basic_regex& e)const
+ {
+ return compare(e) > 0;
+ }
+ bool BOOST_REGEX_CALL operator<=(const basic_regex& e)const
+ {
+ return compare(e) <= 0;
+ }
+ bool BOOST_REGEX_CALL operator>=(const basic_regex& e)const
+ {
+ return compare(e) >= 0;
+ }
+
+ //
+ // The following are deprecated as public interfaces
+ // but are available for compatibility with earlier versions.
+ const charT* BOOST_REGEX_CALL expression()const
+ {
+ return (m_pimpl.get() && !m_pimpl->status() ? m_pimpl->expression() : 0);
+ }
+ unsigned int BOOST_REGEX_CALL set_expression(const charT* p1, const charT* p2, flag_type f = regex_constants::normal)
+ {
+ assign(p1, p2, f | regex_constants::no_except);
+ return status();
+ }
+ unsigned int BOOST_REGEX_CALL set_expression(const charT* p, flag_type f = regex_constants::normal)
+ {
+ assign(p, f | regex_constants::no_except);
+ return status();
+ }
+ unsigned int BOOST_REGEX_CALL error_code()const
+ {
+ return status();
+ }
+ //
+ // private access methods:
+ //
+ const re_detail::re_syntax_base* get_first_state()const
+ {
+ BOOST_ASSERT(0 != m_pimpl.get());
+ return m_pimpl->get_first_state();
+ }
+ unsigned get_restart_type()const
+ {
+ BOOST_ASSERT(0 != m_pimpl.get());
+ return m_pimpl->get_restart_type();
+ }
+ const unsigned char* get_map()const
+ {
+ BOOST_ASSERT(0 != m_pimpl.get());
+ return m_pimpl->get_map();
+ }
+ const ::boost::regex_traits_wrapper<traits>& get_traits()const
+ {
+ BOOST_ASSERT(0 != m_pimpl.get());
+ return m_pimpl->get_traits();
+ }
+ bool can_be_null()const
+ {
+ BOOST_ASSERT(0 != m_pimpl.get());
+ return m_pimpl->can_be_null();
+ }
+ const re_detail::regex_data<charT, traits>& get_data()const
+ {
+ BOOST_ASSERT(0 != m_pimpl.get());
+ return m_pimpl->get_data();
+ }
+
+private:
+ shared_ptr<re_detail::basic_regex_implementation<charT, traits> > m_pimpl;
+};
+
+//
+// out of line members;
+// these are the only members that mutate the basic_regex object,
+// and are designed to provide the strong exception guarentee
+// (in the event of a throw, the state of the object remains unchanged).
+//
+template <class charT, class traits>
+basic_regex<charT, traits>& basic_regex<charT, traits>::do_assign(const charT* p1,
+ const charT* p2,
+ flag_type f)
+{
+ shared_ptr<re_detail::basic_regex_implementation<charT, traits> > temp;
+ if(!m_pimpl.get())
+ {
+ temp = shared_ptr<re_detail::basic_regex_implementation<charT, traits> >(new re_detail::basic_regex_implementation<charT, traits>());
+ }
+ else
+ {
+ temp = shared_ptr<re_detail::basic_regex_implementation<charT, traits> >(new re_detail::basic_regex_implementation<charT, traits>(m_pimpl->m_ptraits));
+ }
+ temp->assign(p1, p2, f);
+ temp.swap(m_pimpl);
+ return *this;
+}
+
+template <class charT, class traits>
+typename basic_regex<charT, traits>::locale_type BOOST_REGEX_CALL basic_regex<charT, traits>::imbue(locale_type l)
+{
+ shared_ptr<re_detail::basic_regex_implementation<charT, traits> > temp(new re_detail::basic_regex_implementation<charT, traits>());
+ locale_type result = temp->imbue(l);
+ temp.swap(m_pimpl);
+ return result;
+}
+
+//
+// non-members:
+//
+template <class charT, class traits>
+void swap(basic_regex<charT, traits>& e1, basic_regex<charT, traits>& e2)
+{
+ e1.swap(e2);
+}
+
+#ifndef BOOST_NO_STD_LOCALE
+template <class charT, class traits, class traits2>
+std::basic_ostream<charT, traits>&
+ operator << (std::basic_ostream<charT, traits>& os,
+ const basic_regex<charT, traits2>& e)
+{
+ return (os << e.str());
+}
+#else
+template <class traits>
+std::ostream& operator << (std::ostream& os, const basic_regex<char, traits>& e)
+{
+ return (os << e.str());
+}
+#endif
+
+//
+// class reg_expression:
+// this is provided for backwards compatibility only,
+// it is deprecated, no not use!
+//
+#ifdef BOOST_REGEX_NO_FWD
+template <class charT, class traits = regex_traits<charT> >
+#else
+template <class charT, class traits >
+#endif
+class reg_expression : public basic_regex<charT, traits>
+{
+public:
+ typedef typename basic_regex<charT, traits>::flag_type flag_type;
+ typedef typename basic_regex<charT, traits>::size_type size_type;
+ explicit reg_expression(){}
+ explicit reg_expression(const charT* p, flag_type f = regex_constants::normal)
+ : basic_regex<charT, traits>(p, f){}
+ reg_expression(const charT* p1, const charT* p2, flag_type f = regex_constants::normal)
+ : basic_regex<charT, traits>(p1, p2, f){}
+ reg_expression(const charT* p, size_type len, flag_type f)
+ : basic_regex<charT, traits>(p, len, f){}
+ reg_expression(const reg_expression& that)
+ : basic_regex<charT, traits>(that) {}
+ ~reg_expression(){}
+ reg_expression& BOOST_REGEX_CALL operator=(const reg_expression& that)
+ {
+ return this->assign(that);
+ }
+
+#if !defined(BOOST_NO_MEMBER_TEMPLATES)
+ template <class ST, class SA>
+ explicit reg_expression(const std::basic_string<charT, ST, SA>& p, flag_type f = regex_constants::normal)
+ : basic_regex<charT, traits>(p, f)
+ {
+ }
+
+ template <class InputIterator>
+ reg_expression(InputIterator arg_first, InputIterator arg_last, flag_type f = regex_constants::normal)
+ : basic_regex<charT, traits>(arg_first, arg_last, f)
+ {
+ }
+
+ template <class ST, class SA>
+ reg_expression& BOOST_REGEX_CALL operator=(const std::basic_string<charT, ST, SA>& p)
+ {
+ this->assign(p);
+ return *this;
+ }
+#else
+ explicit reg_expression(const std::basic_string<charT>& p, flag_type f = regex_constants::normal)
+ : basic_regex<charT, traits>(p, f)
+ {
+ }
+
+ reg_expression& BOOST_REGEX_CALL operator=(const std::basic_string<charT>& p)
+ {
+ this->assign(p);
+ return *this;
+ }
+#endif
+
+};
+
+#ifdef BOOST_MSVC
+#pragma warning (pop)
+#endif
+
+} // namespace boost
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif
+
diff --git a/boost/boost/regex/v4/basic_regex_creator.hpp b/boost/boost/regex/v4/basic_regex_creator.hpp
new file mode 100644
index 00000000000..a03c9520167
--- /dev/null
+++ b/boost/boost/regex/v4/basic_regex_creator.hpp
@@ -0,0 +1,1296 @@
+/*
+ *
+ * Copyright (c) 2004
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE basic_regex_creator.cpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: Declares template class basic_regex_creator which fills in
+ * the data members of a regex_data object.
+ */
+
+#ifndef BOOST_REGEX_V4_BASIC_REGEX_CREATOR_HPP
+#define BOOST_REGEX_V4_BASIC_REGEX_CREATOR_HPP
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+namespace boost{
+
+namespace re_detail{
+
+template <class charT>
+struct digraph : public std::pair<charT, charT>
+{
+ digraph() : std::pair<charT, charT>(0, 0){}
+ digraph(charT c1) : std::pair<charT, charT>(c1, 0){}
+ digraph(charT c1, charT c2) : std::pair<charT, charT>(c1, c2)
+ {}
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ digraph(const digraph<charT>& d) : std::pair<charT, charT>(d.first, d.second){}
+#endif
+ template <class Seq>
+ digraph(const Seq& s) : std::pair<charT, charT>()
+ {
+ BOOST_ASSERT(s.size() <= 2);
+ BOOST_ASSERT(s.size());
+ this->first = s[0];
+ this->second = (s.size() > 1) ? s[1] : 0;
+ }
+};
+
+template <class charT, class traits>
+class basic_char_set
+{
+public:
+ typedef digraph<charT> digraph_type;
+ typedef typename traits::string_type string_type;
+ typedef typename traits::char_class_type mask_type;
+
+ basic_char_set()
+ {
+ m_negate = false;
+ m_has_digraphs = false;
+ m_classes = 0;
+ m_negated_classes = 0;
+ m_empty = true;
+ }
+
+ void add_single(const digraph_type& s)
+ {
+ m_singles.insert(m_singles.end(), s);
+ if(s.second)
+ m_has_digraphs = true;
+ m_empty = false;
+ }
+ void add_range(const digraph_type& first, const digraph_type& end)
+ {
+ m_ranges.insert(m_ranges.end(), first);
+ m_ranges.insert(m_ranges.end(), end);
+ if(first.second)
+ {
+ m_has_digraphs = true;
+ add_single(first);
+ }
+ if(end.second)
+ {
+ m_has_digraphs = true;
+ add_single(end);
+ }
+ m_empty = false;
+ }
+ void add_class(mask_type m)
+ {
+ m_classes |= m;
+ m_empty = false;
+ }
+ void add_negated_class(mask_type m)
+ {
+ m_negated_classes |= m;
+ m_empty = false;
+ }
+ void add_equivalent(const digraph_type& s)
+ {
+ m_equivalents.insert(m_equivalents.end(), s);
+ if(s.second)
+ {
+ m_has_digraphs = true;
+ add_single(s);
+ }
+ m_empty = false;
+ }
+ void negate()
+ {
+ m_negate = true;
+ //m_empty = false;
+ }
+
+ //
+ // accessor functions:
+ //
+ bool has_digraphs()const
+ {
+ return m_has_digraphs;
+ }
+ bool is_negated()const
+ {
+ return m_negate;
+ }
+ typedef typename std::vector<digraph_type>::const_iterator list_iterator;
+ list_iterator singles_begin()const
+ {
+ return m_singles.begin();
+ }
+ list_iterator singles_end()const
+ {
+ return m_singles.end();
+ }
+ list_iterator ranges_begin()const
+ {
+ return m_ranges.begin();
+ }
+ list_iterator ranges_end()const
+ {
+ return m_ranges.end();
+ }
+ list_iterator equivalents_begin()const
+ {
+ return m_equivalents.begin();
+ }
+ list_iterator equivalents_end()const
+ {
+ return m_equivalents.end();
+ }
+ mask_type classes()const
+ {
+ return m_classes;
+ }
+ mask_type negated_classes()const
+ {
+ return m_negated_classes;
+ }
+ bool empty()const
+ {
+ return m_empty;
+ }
+private:
+ std::vector<digraph_type> m_singles; // a list of single characters to match
+ std::vector<digraph_type> m_ranges; // a list of end points of our ranges
+ bool m_negate; // true if the set is to be negated
+ bool m_has_digraphs; // true if we have digraphs present
+ mask_type m_classes; // character classes to match
+ mask_type m_negated_classes; // negated character classes to match
+ bool m_empty; // whether we've added anything yet
+ std::vector<digraph_type> m_equivalents; // a list of equivalence classes
+};
+
+template <class charT, class traits>
+class basic_regex_creator
+{
+public:
+ basic_regex_creator(regex_data<charT, traits>* data);
+ std::ptrdiff_t getoffset(void* addr)
+ {
+ return getoffset(addr, m_pdata->m_data.data());
+ }
+ std::ptrdiff_t getoffset(const void* addr, const void* base)
+ {
+ return static_cast<const char*>(addr) - static_cast<const char*>(base);
+ }
+ re_syntax_base* getaddress(std::ptrdiff_t off)
+ {
+ return getaddress(off, m_pdata->m_data.data());
+ }
+ re_syntax_base* getaddress(std::ptrdiff_t off, void* base)
+ {
+ return static_cast<re_syntax_base*>(static_cast<void*>(static_cast<char*>(base) + off));
+ }
+ void init(unsigned l_flags)
+ {
+ m_pdata->m_flags = l_flags;
+ m_icase = l_flags & regex_constants::icase;
+ }
+ regbase::flag_type flags()
+ {
+ return m_pdata->m_flags;
+ }
+ void flags(regbase::flag_type f)
+ {
+ m_pdata->m_flags = f;
+ if(m_icase != static_cast<bool>(f & regbase::icase))
+ {
+ m_icase = static_cast<bool>(f & regbase::icase);
+ }
+ }
+ re_syntax_base* append_state(syntax_element_type t, std::size_t s = sizeof(re_syntax_base));
+ re_syntax_base* insert_state(std::ptrdiff_t pos, syntax_element_type t, std::size_t s = sizeof(re_syntax_base));
+ re_literal* append_literal(charT c);
+ re_syntax_base* append_set(const basic_char_set<charT, traits>& char_set);
+ re_syntax_base* append_set(const basic_char_set<charT, traits>& char_set, mpl::false_*);
+ re_syntax_base* append_set(const basic_char_set<charT, traits>& char_set, mpl::true_*);
+ void finalize(const charT* p1, const charT* p2);
+protected:
+ regex_data<charT, traits>* m_pdata; // pointer to the basic_regex_data struct we are filling in
+ const ::boost::regex_traits_wrapper<traits>&
+ m_traits; // convenience reference to traits class
+ re_syntax_base* m_last_state; // the last state we added
+ bool m_icase; // true for case insensitive matches
+ unsigned m_repeater_id; // the id of the next repeater
+ bool m_has_backrefs; // true if there are actually any backrefs
+ unsigned m_backrefs; // bitmask of permitted backrefs
+ boost::uintmax_t m_bad_repeats; // bitmask of repeats we can't deduce a startmap for;
+ typename traits::char_class_type m_word_mask; // mask used to determine if a character is a word character
+ typename traits::char_class_type m_mask_space; // mask used to determine if a character is a word character
+ typename traits::char_class_type m_lower_mask; // mask used to determine if a character is a lowercase character
+ typename traits::char_class_type m_upper_mask; // mask used to determine if a character is an uppercase character
+ typename traits::char_class_type m_alpha_mask; // mask used to determine if a character is an alphabetic character
+private:
+ basic_regex_creator& operator=(const basic_regex_creator&);
+ basic_regex_creator(const basic_regex_creator&);
+
+ void fixup_pointers(re_syntax_base* state);
+ void create_startmaps(re_syntax_base* state);
+ int calculate_backstep(re_syntax_base* state);
+ void create_startmap(re_syntax_base* state, unsigned char* l_map, unsigned int* pnull, unsigned char mask);
+ unsigned get_restart_type(re_syntax_base* state);
+ void set_all_masks(unsigned char* bits, unsigned char);
+ bool is_bad_repeat(re_syntax_base* pt);
+ void set_bad_repeat(re_syntax_base* pt);
+ syntax_element_type get_repeat_type(re_syntax_base* state);
+ void probe_leading_repeat(re_syntax_base* state);
+};
+
+template <class charT, class traits>
+basic_regex_creator<charT, traits>::basic_regex_creator(regex_data<charT, traits>* data)
+ : m_pdata(data), m_traits(*(data->m_ptraits)), m_last_state(0), m_repeater_id(0), m_has_backrefs(false), m_backrefs(0)
+{
+ m_pdata->m_data.clear();
+ m_pdata->m_status = ::boost::regex_constants::error_ok;
+ static const charT w = 'w';
+ static const charT s = 's';
+ static const charT l[5] = { 'l', 'o', 'w', 'e', 'r', };
+ static const charT u[5] = { 'u', 'p', 'p', 'e', 'r', };
+ static const charT a[5] = { 'a', 'l', 'p', 'h', 'a', };
+ m_word_mask = m_traits.lookup_classname(&w, &w +1);
+ m_mask_space = m_traits.lookup_classname(&s, &s +1);
+ m_lower_mask = m_traits.lookup_classname(l, l + 5);
+ m_upper_mask = m_traits.lookup_classname(u, u + 5);
+ m_alpha_mask = m_traits.lookup_classname(a, a + 5);
+ m_pdata->m_word_mask = m_word_mask;
+ BOOST_ASSERT(m_word_mask != 0);
+ BOOST_ASSERT(m_mask_space != 0);
+ BOOST_ASSERT(m_lower_mask != 0);
+ BOOST_ASSERT(m_upper_mask != 0);
+ BOOST_ASSERT(m_alpha_mask != 0);
+}
+
+template <class charT, class traits>
+re_syntax_base* basic_regex_creator<charT, traits>::append_state(syntax_element_type t, std::size_t s)
+{
+ // if the state is a backref then make a note of it:
+ if(t == syntax_element_backref)
+ this->m_has_backrefs = true;
+ // append a new state, start by aligning our last one:
+ m_pdata->m_data.align();
+ // set the offset to the next state in our last one:
+ if(m_last_state)
+ m_last_state->next.i = m_pdata->m_data.size() - getoffset(m_last_state);
+ // now actually extent our data:
+ m_last_state = static_cast<re_syntax_base*>(m_pdata->m_data.extend(s));
+ // fill in boilerplate options in the new state:
+ m_last_state->next.i = 0;
+ m_last_state->type = t;
+ return m_last_state;
+}
+
+template <class charT, class traits>
+re_syntax_base* basic_regex_creator<charT, traits>::insert_state(std::ptrdiff_t pos, syntax_element_type t, std::size_t s)
+{
+ // append a new state, start by aligning our last one:
+ m_pdata->m_data.align();
+ // set the offset to the next state in our last one:
+ if(m_last_state)
+ m_last_state->next.i = m_pdata->m_data.size() - getoffset(m_last_state);
+ // remember the last state position:
+ std::ptrdiff_t off = getoffset(m_last_state) + s;
+ // now actually insert our data:
+ re_syntax_base* new_state = static_cast<re_syntax_base*>(m_pdata->m_data.insert(pos, s));
+ // fill in boilerplate options in the new state:
+ new_state->next.i = s;
+ new_state->type = t;
+ m_last_state = getaddress(off);
+ return new_state;
+}
+
+template <class charT, class traits>
+re_literal* basic_regex_creator<charT, traits>::append_literal(charT c)
+{
+ re_literal* result;
+ // start by seeing if we have an existing re_literal we can extend:
+ if((0 == m_last_state) || (m_last_state->type != syntax_element_literal))
+ {
+ // no existing re_literal, create a new one:
+ result = static_cast<re_literal*>(append_state(syntax_element_literal, sizeof(re_literal) + sizeof(charT)));
+ result->length = 1;
+ *static_cast<charT*>(static_cast<void*>(result+1)) = m_traits.translate(c, m_icase);
+ }
+ else
+ {
+ // we have an existing re_literal, extend it:
+ std::ptrdiff_t off = getoffset(m_last_state);
+ m_pdata->m_data.extend(sizeof(charT));
+ m_last_state = result = static_cast<re_literal*>(getaddress(off));
+ charT* characters = static_cast<charT*>(static_cast<void*>(result+1));
+ characters[result->length] = m_traits.translate(c, m_icase);
+ ++(result->length);
+ }
+ return result;
+}
+
+template <class charT, class traits>
+inline re_syntax_base* basic_regex_creator<charT, traits>::append_set(
+ const basic_char_set<charT, traits>& char_set)
+{
+ typedef mpl::bool_< (sizeof(charT) == 1) > truth_type;
+ return char_set.has_digraphs()
+ ? append_set(char_set, static_cast<mpl::false_*>(0))
+ : append_set(char_set, static_cast<truth_type*>(0));
+}
+
+template <class charT, class traits>
+re_syntax_base* basic_regex_creator<charT, traits>::append_set(
+ const basic_char_set<charT, traits>& char_set, mpl::false_*)
+{
+ typedef typename traits::string_type string_type;
+ typedef typename basic_char_set<charT, traits>::list_iterator item_iterator;
+ typedef typename traits::char_class_type mask_type;
+
+ re_set_long<mask_type>* result = static_cast<re_set_long<mask_type>*>(append_state(syntax_element_long_set, sizeof(re_set_long<mask_type>)));
+ //
+ // fill in the basics:
+ //
+ result->csingles = static_cast<unsigned int>(::boost::re_detail::distance(char_set.singles_begin(), char_set.singles_end()));
+ result->cranges = static_cast<unsigned int>(::boost::re_detail::distance(char_set.ranges_begin(), char_set.ranges_end())) / 2;
+ result->cequivalents = static_cast<unsigned int>(::boost::re_detail::distance(char_set.equivalents_begin(), char_set.equivalents_end()));
+ result->cclasses = char_set.classes();
+ result->cnclasses = char_set.negated_classes();
+ if(flags() & regbase::icase)
+ {
+ // adjust classes as needed:
+ if(((result->cclasses & m_lower_mask) == m_lower_mask) || ((result->cclasses & m_upper_mask) == m_upper_mask))
+ result->cclasses |= m_alpha_mask;
+ if(((result->cnclasses & m_lower_mask) == m_lower_mask) || ((result->cnclasses & m_upper_mask) == m_upper_mask))
+ result->cnclasses |= m_alpha_mask;
+ }
+
+ result->isnot = char_set.is_negated();
+ result->singleton = !char_set.has_digraphs();
+ //
+ // remember where the state is for later:
+ //
+ std::ptrdiff_t offset = getoffset(result);
+ //
+ // now extend with all the singles:
+ //
+ item_iterator first, last;
+ first = char_set.singles_begin();
+ last = char_set.singles_end();
+ while(first != last)
+ {
+ charT* p = static_cast<charT*>(this->m_pdata->m_data.extend(sizeof(charT) * (first->second ? 3 : 2)));
+ p[0] = m_traits.translate(first->first, m_icase);
+ if(first->second)
+ {
+ p[1] = m_traits.translate(first->second, m_icase);
+ p[2] = 0;
+ }
+ else
+ p[1] = 0;
+ ++first;
+ }
+ //
+ // now extend with all the ranges:
+ //
+ first = char_set.ranges_begin();
+ last = char_set.ranges_end();
+ while(first != last)
+ {
+ // first grab the endpoints of the range:
+ digraph<charT> c1 = *first;
+ c1.first = this->m_traits.translate(c1.first, this->m_icase);
+ c1.second = this->m_traits.translate(c1.second, this->m_icase);
+ ++first;
+ digraph<charT> c2 = *first;
+ c2.first = this->m_traits.translate(c2.first, this->m_icase);
+ c2.second = this->m_traits.translate(c2.second, this->m_icase);
+ ++first;
+ string_type s1, s2;
+ // different actions now depending upon whether collation is turned on:
+ if(flags() & regex_constants::collate)
+ {
+ // we need to transform our range into sort keys:
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ string_type in(3, charT(0));
+ in[0] = c1.first;
+ in[1] = c1.second;
+ s1 = this->m_traits.transform(in.c_str(), (in[1] ? in.c_str()+2 : in.c_str()+1));
+ in[0] = c2.first;
+ in[1] = c2.second;
+ s2 = this->m_traits.transform(in.c_str(), (in[1] ? in.c_str()+2 : in.c_str()+1));
+#else
+ charT a1[3] = { c1.first, c1.second, charT(0), };
+ charT a2[3] = { c2.first, c2.second, charT(0), };
+ s1 = this->m_traits.transform(a1, (a1[1] ? a1+2 : a1+1));
+ s2 = this->m_traits.transform(a2, (a2[1] ? a2+2 : a2+1));
+#endif
+ if(s1.size() == 0)
+ s1 = string_type(1, charT(0));
+ if(s2.size() == 0)
+ s2 = string_type(1, charT(0));
+ }
+ else
+ {
+ if(c1.second)
+ {
+ s1.insert(s1.end(), c1.first);
+ s1.insert(s1.end(), c1.second);
+ }
+ else
+ s1 = string_type(1, c1.first);
+ if(c2.second)
+ {
+ s2.insert(s2.end(), c2.first);
+ s2.insert(s2.end(), c2.second);
+ }
+ else
+ s2.insert(s2.end(), c2.first);
+ }
+ if(s1 > s2)
+ {
+ // Oops error:
+ return 0;
+ }
+ charT* p = static_cast<charT*>(this->m_pdata->m_data.extend(sizeof(charT) * (s1.size() + s2.size() + 2) ) );
+ re_detail::copy(s1.begin(), s1.end(), p);
+ p[s1.size()] = charT(0);
+ p += s1.size() + 1;
+ re_detail::copy(s2.begin(), s2.end(), p);
+ p[s2.size()] = charT(0);
+ }
+ //
+ // now process the equivalence classes:
+ //
+ first = char_set.equivalents_begin();
+ last = char_set.equivalents_end();
+ while(first != last)
+ {
+ string_type s;
+ if(first->second)
+ {
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+ string_type in(3, charT(0));
+ in[0] = first->first;
+ in[1] = first->second;
+ s = m_traits.transform_primary(in.c_str(), in.c_str()+2);
+#else
+ charT cs[3] = { first->first, first->second, charT(0), };
+ s = m_traits.transform_primary(cs, cs+2);
+#endif
+ }
+ else
+ s = m_traits.transform_primary(&first->first, &first->first+1);
+ if(s.empty())
+ return 0; // invalid or unsupported equivalence class
+ charT* p = static_cast<charT*>(this->m_pdata->m_data.extend(sizeof(charT) * (s.size()+1) ) );
+ re_detail::copy(s.begin(), s.end(), p);
+ p[s.size()] = charT(0);
+ ++first;
+ }
+ //
+ // finally reset the address of our last state:
+ //
+ m_last_state = result = static_cast<re_set_long<mask_type>*>(getaddress(offset));
+ return result;
+}
+
+namespace{
+
+template<class T>
+inline bool char_less(T t1, T t2)
+{
+ return t1 < t2;
+}
+template<>
+inline bool char_less<char>(char t1, char t2)
+{
+ return static_cast<unsigned char>(t1) < static_cast<unsigned char>(t2);
+}
+template<>
+inline bool char_less<signed char>(signed char t1, signed char t2)
+{
+ return static_cast<unsigned char>(t1) < static_cast<unsigned char>(t2);
+}
+}
+
+template <class charT, class traits>
+re_syntax_base* basic_regex_creator<charT, traits>::append_set(
+ const basic_char_set<charT, traits>& char_set, mpl::true_*)
+{
+ typedef typename traits::string_type string_type;
+ typedef typename basic_char_set<charT, traits>::list_iterator item_iterator;
+
+ re_set* result = static_cast<re_set*>(append_state(syntax_element_set, sizeof(re_set)));
+ bool negate = char_set.is_negated();
+ std::memset(result->_map, 0, sizeof(result->_map));
+ //
+ // handle singles first:
+ //
+ item_iterator first, last;
+ first = char_set.singles_begin();
+ last = char_set.singles_end();
+ while(first != last)
+ {
+ for(unsigned int i = 0; i < (1 << CHAR_BIT); ++i)
+ {
+ if(this->m_traits.translate(static_cast<charT>(i), this->m_icase)
+ == this->m_traits.translate(first->first, this->m_icase))
+ result->_map[i] = true;
+ }
+ ++first;
+ }
+ //
+ // OK now handle ranges:
+ //
+ first = char_set.ranges_begin();
+ last = char_set.ranges_end();
+ while(first != last)
+ {
+ // first grab the endpoints of the range:
+ charT c1 = this->m_traits.translate(first->first, this->m_icase);
+ ++first;
+ charT c2 = this->m_traits.translate(first->first, this->m_icase);
+ ++first;
+ // different actions now depending upon whether collation is turned on:
+ if(flags() & regex_constants::collate)
+ {
+ // we need to transform our range into sort keys:
+ charT c3[2] = { c1, charT(0), };
+ string_type s1 = this->m_traits.transform(c3, c3+1);
+ c3[0] = c2;
+ string_type s2 = this->m_traits.transform(c3, c3+1);
+ if(s1 > s2)
+ {
+ // Oops error:
+ return 0;
+ }
+ BOOST_ASSERT(c3[1] == charT(0));
+ for(unsigned i = 0; i < (1u << CHAR_BIT); ++i)
+ {
+ c3[0] = static_cast<charT>(i);
+ string_type s3 = this->m_traits.transform(c3, c3 +1);
+ if((s1 <= s3) && (s3 <= s2))
+ result->_map[i] = true;
+ }
+ }
+ else
+ {
+ if(char_less<charT>(c2, c1))
+ {
+ // Oops error:
+ return 0;
+ }
+ // everything in range matches:
+ std::memset(result->_map + static_cast<unsigned char>(c1), true, 1 + static_cast<unsigned char>(c2) - static_cast<unsigned char>(c1));
+ }
+ }
+ //
+ // and now the classes:
+ //
+ typedef typename traits::char_class_type mask_type;
+ mask_type m = char_set.classes();
+ if(flags() & regbase::icase)
+ {
+ // adjust m as needed:
+ if(((m & m_lower_mask) == m_lower_mask) || ((m & m_upper_mask) == m_upper_mask))
+ m |= m_alpha_mask;
+ }
+ if(m != 0)
+ {
+ for(unsigned i = 0; i < (1u << CHAR_BIT); ++i)
+ {
+ if(this->m_traits.isctype(static_cast<charT>(i), m))
+ result->_map[i] = true;
+ }
+ }
+ //
+ // and now the negated classes:
+ //
+ m = char_set.negated_classes();
+ if(flags() & regbase::icase)
+ {
+ // adjust m as needed:
+ if(((m & m_lower_mask) == m_lower_mask) || ((m & m_upper_mask) == m_upper_mask))
+ m |= m_alpha_mask;
+ }
+ if(m != 0)
+ {
+ for(unsigned i = 0; i < (1u << CHAR_BIT); ++i)
+ {
+ if(0 == this->m_traits.isctype(static_cast<charT>(i), m))
+ result->_map[i] = true;
+ }
+ }
+ //
+ // now process the equivalence classes:
+ //
+ first = char_set.equivalents_begin();
+ last = char_set.equivalents_end();
+ while(first != last)
+ {
+ string_type s;
+ BOOST_ASSERT(static_cast<charT>(0) == first->second);
+ s = m_traits.transform_primary(&first->first, &first->first+1);
+ if(s.empty())
+ return 0; // invalid or unsupported equivalence class
+ for(unsigned i = 0; i < (1u << CHAR_BIT); ++i)
+ {
+ charT c[2] = { (static_cast<charT>(i)), charT(0), };
+ string_type s2 = this->m_traits.transform_primary(c, c+1);
+ if(s == s2)
+ result->_map[i] = true;
+ }
+ ++first;
+ }
+ if(negate)
+ {
+ for(unsigned i = 0; i < (1u << CHAR_BIT); ++i)
+ {
+ result->_map[i] = !(result->_map[i]);
+ }
+ }
+ return result;
+}
+
+template <class charT, class traits>
+void basic_regex_creator<charT, traits>::finalize(const charT* p1, const charT* p2)
+{
+ // we've added all the states we need, now finish things off.
+ // start by adding a terminating state:
+ append_state(syntax_element_match);
+ // extend storage to store original expression:
+ std::ptrdiff_t len = p2 - p1;
+ m_pdata->m_expression_len = len;
+ charT* ps = static_cast<charT*>(m_pdata->m_data.extend(sizeof(charT) * (1 + (p2 - p1))));
+ m_pdata->m_expression = ps;
+ re_detail::copy(p1, p2, ps);
+ ps[p2 - p1] = 0;
+ // fill in our other data...
+ // successful parsing implies a zero status:
+ m_pdata->m_status = 0;
+ // get the first state of the machine:
+ m_pdata->m_first_state = static_cast<re_syntax_base*>(m_pdata->m_data.data());
+ // fixup pointers in the machine:
+ fixup_pointers(m_pdata->m_first_state);
+ // create nested startmaps:
+ create_startmaps(m_pdata->m_first_state);
+ // create main startmap:
+ std::memset(m_pdata->m_startmap, 0, sizeof(m_pdata->m_startmap));
+ m_pdata->m_can_be_null = 0;
+
+ m_bad_repeats = 0;
+ create_startmap(m_pdata->m_first_state, m_pdata->m_startmap, &(m_pdata->m_can_be_null), mask_all);
+ // get the restart type:
+ m_pdata->m_restart_type = get_restart_type(m_pdata->m_first_state);
+ // optimise a leading repeat if there is one:
+ probe_leading_repeat(m_pdata->m_first_state);
+}
+
+template <class charT, class traits>
+void basic_regex_creator<charT, traits>::fixup_pointers(re_syntax_base* state)
+{
+ while(state)
+ {
+ switch(state->type)
+ {
+ case syntax_element_rep:
+ case syntax_element_dot_rep:
+ case syntax_element_char_rep:
+ case syntax_element_short_set_rep:
+ case syntax_element_long_set_rep:
+ // set the id of this repeat:
+ static_cast<re_repeat*>(state)->id = m_repeater_id++;
+ // fall through:
+ case syntax_element_alt:
+ std::memset(static_cast<re_alt*>(state)->_map, 0, sizeof(static_cast<re_alt*>(state)->_map));
+ static_cast<re_alt*>(state)->can_be_null = 0;
+ // fall through:
+ case syntax_element_jump:
+ static_cast<re_jump*>(state)->alt.p = getaddress(static_cast<re_jump*>(state)->alt.i, state);
+ // fall through again:
+ default:
+ if(state->next.i)
+ state->next.p = getaddress(state->next.i, state);
+ else
+ state->next.p = 0;
+ }
+ state = state->next.p;
+ }
+}
+
+template <class charT, class traits>
+void basic_regex_creator<charT, traits>::create_startmaps(re_syntax_base* state)
+{
+ // non-recursive implementation:
+ // create the last map in the machine first, so that earlier maps
+ // can make use of the result...
+ //
+ // This was originally a recursive implementation, but that caused stack
+ // overflows with complex expressions on small stacks (think COM+).
+
+ // start by saving the case setting:
+ bool l_icase = m_icase;
+ std::vector<std::pair<bool, re_syntax_base*> > v;
+
+ while(state)
+ {
+ switch(state->type)
+ {
+ case syntax_element_toggle_case:
+ // we need to track case changes here:
+ m_icase = static_cast<re_case*>(state)->icase;
+ state = state->next.p;
+ continue;
+ case syntax_element_alt:
+ case syntax_element_rep:
+ case syntax_element_dot_rep:
+ case syntax_element_char_rep:
+ case syntax_element_short_set_rep:
+ case syntax_element_long_set_rep:
+ // just push the state onto our stack for now:
+ v.push_back(std::pair<bool, re_syntax_base*>(m_icase, state));
+ state = state->next.p;
+ break;
+ case syntax_element_backstep:
+ // we need to calculate how big the backstep is:
+ static_cast<re_brace*>(state)->index
+ = this->calculate_backstep(state->next.p);
+ if(static_cast<re_brace*>(state)->index < 0)
+ {
+ // Oops error:
+ if(0 == this->m_pdata->m_status) // update the error code if not already set
+ this->m_pdata->m_status = boost::regex_constants::error_bad_pattern;
+ //
+ // clear the expression, we should be empty:
+ //
+ this->m_pdata->m_expression = 0;
+ this->m_pdata->m_expression_len = 0;
+ //
+ // and throw if required:
+ //
+ if(0 == (this->flags() & regex_constants::no_except))
+ {
+ std::string message = this->m_pdata->m_ptraits->error_string(boost::regex_constants::error_bad_pattern);
+ boost::regex_error e(message, boost::regex_constants::error_bad_pattern, 0);
+ e.raise();
+ }
+ }
+ // fall through:
+ default:
+ state = state->next.p;
+ }
+ }
+ // now work through our list, building all the maps as we go:
+ while(v.size())
+ {
+ const std::pair<bool, re_syntax_base*>& p = v.back();
+ m_icase = p.first;
+ state = p.second;
+ v.pop_back();
+
+ // Build maps:
+ m_bad_repeats = 0;
+ create_startmap(state->next.p, static_cast<re_alt*>(state)->_map, &static_cast<re_alt*>(state)->can_be_null, mask_take);
+ m_bad_repeats = 0;
+ create_startmap(static_cast<re_alt*>(state)->alt.p, static_cast<re_alt*>(state)->_map, &static_cast<re_alt*>(state)->can_be_null, mask_skip);
+ // adjust the type of the state to allow for faster matching:
+ state->type = this->get_repeat_type(state);
+ }
+ // restore case sensitivity:
+ m_icase = l_icase;
+}
+
+template <class charT, class traits>
+int basic_regex_creator<charT, traits>::calculate_backstep(re_syntax_base* state)
+{
+ typedef typename traits::char_class_type mask_type;
+ int result = 0;
+ while(state)
+ {
+ switch(state->type)
+ {
+ case syntax_element_startmark:
+ if((static_cast<re_brace*>(state)->index == -1)
+ || (static_cast<re_brace*>(state)->index == -2))
+ {
+ state = static_cast<re_jump*>(state->next.p)->alt.p->next.p;
+ continue;
+ }
+ else if(static_cast<re_brace*>(state)->index == -3)
+ {
+ state = state->next.p->next.p;
+ continue;
+ }
+ break;
+ case syntax_element_endmark:
+ if((static_cast<re_brace*>(state)->index == -1)
+ || (static_cast<re_brace*>(state)->index == -2))
+ return result;
+ break;
+ case syntax_element_literal:
+ result += static_cast<re_literal*>(state)->length;
+ break;
+ case syntax_element_wild:
+ case syntax_element_set:
+ result += 1;
+ break;
+ case syntax_element_dot_rep:
+ case syntax_element_char_rep:
+ case syntax_element_short_set_rep:
+ case syntax_element_backref:
+ case syntax_element_rep:
+ case syntax_element_combining:
+ case syntax_element_long_set_rep:
+ case syntax_element_backstep:
+ {
+ re_repeat* rep = static_cast<re_repeat *>(state);
+ // adjust the type of the state to allow for faster matching:
+ state->type = this->get_repeat_type(state);
+ if((state->type == syntax_element_dot_rep)
+ || (state->type == syntax_element_char_rep)
+ || (state->type == syntax_element_short_set_rep))
+ {
+ if(rep->max != rep->min)
+ return -1;
+ result += static_cast<int>(rep->min);
+ state = rep->alt.p;
+ continue;
+ }
+ else if((state->type == syntax_element_long_set_rep))
+ {
+ BOOST_ASSERT(rep->next.p->type == syntax_element_long_set);
+ if(static_cast<re_set_long<mask_type>*>(rep->next.p)->singleton == 0)
+ return -1;
+ if(rep->max != rep->min)
+ return -1;
+ result += static_cast<int>(rep->min);
+ state = rep->alt.p;
+ continue;
+ }
+ }
+ return -1;
+ case syntax_element_long_set:
+ if(static_cast<re_set_long<mask_type>*>(state)->singleton == 0)
+ return -1;
+ result += 1;
+ break;
+ case syntax_element_jump:
+ state = static_cast<re_jump*>(state)->alt.p;
+ continue;
+ default:
+ break;
+ }
+ state = state->next.p;
+ }
+ return -1;
+}
+
+template <class charT, class traits>
+void basic_regex_creator<charT, traits>::create_startmap(re_syntax_base* state, unsigned char* l_map, unsigned int* pnull, unsigned char mask)
+{
+ int not_last_jump = 1;
+
+ // track case sensitivity:
+ bool l_icase = m_icase;
+
+ while(state)
+ {
+ switch(state->type)
+ {
+ case syntax_element_toggle_case:
+ l_icase = static_cast<re_case*>(state)->icase;
+ state = state->next.p;
+ break;
+ case syntax_element_literal:
+ {
+ // don't set anything in *pnull, set each element in l_map
+ // that could match the first character in the literal:
+ if(l_map)
+ {
+ l_map[0] |= mask_init;
+ charT first_char = *static_cast<charT*>(static_cast<void*>(static_cast<re_literal*>(state) + 1));
+ for(unsigned int i = 0; i < (1u << CHAR_BIT); ++i)
+ {
+ if(m_traits.translate(static_cast<charT>(i), l_icase) == first_char)
+ l_map[i] |= mask;
+ }
+ }
+ return;
+ }
+ case syntax_element_end_line:
+ {
+ // next character must be a line separator (if there is one):
+ if(l_map)
+ {
+ l_map[0] |= mask_init;
+ l_map['\n'] |= mask;
+ l_map['\r'] |= mask;
+ l_map['\f'] |= mask;
+ l_map[0x85] |= mask;
+ }
+ // now figure out if we can match a NULL string at this point:
+ if(pnull)
+ create_startmap(state->next.p, 0, pnull, mask);
+ return;
+ }
+ case syntax_element_backref:
+ // can be null, and any character can match:
+ if(pnull)
+ *pnull |= mask;
+ // fall through:
+ case syntax_element_wild:
+ {
+ // can't be null, any character can match:
+ set_all_masks(l_map, mask);
+ return;
+ }
+ case syntax_element_match:
+ {
+ // must be null, any character can match:
+ set_all_masks(l_map, mask);
+ if(pnull)
+ *pnull |= mask;
+ return;
+ }
+ case syntax_element_word_start:
+ {
+ // recurse, then AND with all the word characters:
+ create_startmap(state->next.p, l_map, pnull, mask);
+ if(l_map)
+ {
+ l_map[0] |= mask_init;
+ for(unsigned int i = 0; i < (1u << CHAR_BIT); ++i)
+ {
+ if(!m_traits.isctype(static_cast<charT>(i), m_word_mask))
+ l_map[i] &= static_cast<unsigned char>(~mask);
+ }
+ }
+ return;
+ }
+ case syntax_element_word_end:
+ {
+ // recurse, then AND with all the word characters:
+ create_startmap(state->next.p, l_map, pnull, mask);
+ if(l_map)
+ {
+ l_map[0] |= mask_init;
+ for(unsigned int i = 0; i < (1u << CHAR_BIT); ++i)
+ {
+ if(m_traits.isctype(static_cast<charT>(i), m_word_mask))
+ l_map[i] &= static_cast<unsigned char>(~mask);
+ }
+ }
+ return;
+ }
+ case syntax_element_buffer_end:
+ {
+ // we *must be null* :
+ if(pnull)
+ *pnull |= mask;
+ return;
+ }
+ case syntax_element_long_set:
+ if(l_map)
+ {
+ typedef typename traits::char_class_type mask_type;
+ if(static_cast<re_set_long<mask_type>*>(state)->singleton)
+ {
+ l_map[0] |= mask_init;
+ for(unsigned int i = 0; i < (1u << CHAR_BIT); ++i)
+ {
+ charT c = static_cast<charT>(i);
+ if(&c != re_is_set_member(&c, &c + 1, static_cast<re_set_long<mask_type>*>(state), *m_pdata, m_icase))
+ l_map[i] |= mask;
+ }
+ }
+ else
+ set_all_masks(l_map, mask);
+ }
+ return;
+ case syntax_element_set:
+ if(l_map)
+ {
+ l_map[0] |= mask_init;
+ for(unsigned int i = 0; i < (1u << CHAR_BIT); ++i)
+ {
+ if(static_cast<re_set*>(state)->_map[
+ static_cast<unsigned char>(m_traits.translate(static_cast<charT>(i), l_icase))])
+ l_map[i] |= mask;
+ }
+ }
+ return;
+ case syntax_element_jump:
+ // take the jump:
+ state = static_cast<re_alt*>(state)->alt.p;
+ not_last_jump = -1;
+ break;
+ case syntax_element_alt:
+ case syntax_element_rep:
+ case syntax_element_dot_rep:
+ case syntax_element_char_rep:
+ case syntax_element_short_set_rep:
+ case syntax_element_long_set_rep:
+ {
+ re_alt* rep = static_cast<re_alt*>(state);
+ if(rep->_map[0] & mask_init)
+ {
+ if(l_map)
+ {
+ // copy previous results:
+ l_map[0] |= mask_init;
+ for(unsigned int i = 0; i <= UCHAR_MAX; ++i)
+ {
+ if(rep->_map[i] & mask_any)
+ l_map[i] |= mask;
+ }
+ }
+ if(pnull)
+ {
+ if(rep->can_be_null & mask_any)
+ *pnull |= mask;
+ }
+ }
+ else
+ {
+ // we haven't created a startmap for this alternative yet
+ // so take the union of the two options:
+ if(is_bad_repeat(state))
+ {
+ set_all_masks(l_map, mask);
+ if(pnull)
+ *pnull |= mask;
+ return;
+ }
+ set_bad_repeat(state);
+ create_startmap(state->next.p, l_map, pnull, mask);
+ if((state->type == syntax_element_alt)
+ || (static_cast<re_repeat*>(state)->min == 0)
+ || (not_last_jump == 0))
+ create_startmap(rep->alt.p, l_map, pnull, mask);
+ }
+ }
+ return;
+ case syntax_element_soft_buffer_end:
+ // match newline or null:
+ if(l_map)
+ {
+ l_map[0] |= mask_init;
+ l_map['\n'] |= mask;
+ l_map['\r'] |= mask;
+ }
+ if(pnull)
+ *pnull |= mask;
+ return;
+ case syntax_element_endmark:
+ // need to handle independent subs as a special case:
+ if(static_cast<re_brace*>(state)->index < 0)
+ {
+ // can be null, any character can match:
+ set_all_masks(l_map, mask);
+ if(pnull)
+ *pnull |= mask;
+ return;
+ }
+ else
+ {
+ state = state->next.p;
+ break;
+ }
+
+ case syntax_element_startmark:
+ // need to handle independent subs as a special case:
+ if(static_cast<re_brace*>(state)->index == -3)
+ {
+ state = state->next.p->next.p;
+ break;
+ }
+ // otherwise fall through:
+ default:
+ state = state->next.p;
+ }
+ ++not_last_jump;
+ }
+}
+
+template <class charT, class traits>
+unsigned basic_regex_creator<charT, traits>::get_restart_type(re_syntax_base* state)
+{
+ //
+ // find out how the machine starts, so we can optimise the search:
+ //
+ while(state)
+ {
+ switch(state->type)
+ {
+ case syntax_element_startmark:
+ case syntax_element_endmark:
+ state = state->next.p;
+ continue;
+ case syntax_element_start_line:
+ return regbase::restart_line;
+ case syntax_element_word_start:
+ return regbase::restart_word;
+ case syntax_element_buffer_start:
+ return regbase::restart_buf;
+ case syntax_element_restart_continue:
+ return regbase::restart_continue;
+ default:
+ state = 0;
+ continue;
+ }
+ }
+ return regbase::restart_any;
+}
+
+template <class charT, class traits>
+void basic_regex_creator<charT, traits>::set_all_masks(unsigned char* bits, unsigned char mask)
+{
+ //
+ // set mask in all of bits elements,
+ // if bits[0] has mask_init not set then we can
+ // optimise this to a call to memset:
+ //
+ if(bits)
+ {
+ if(bits[0] == 0)
+ (std::memset)(bits, mask, 1u << CHAR_BIT);
+ else
+ {
+ for(unsigned i = 0; i < (1u << CHAR_BIT); ++i)
+ bits[i] |= mask;
+ }
+ bits[0] |= mask_init;
+ }
+}
+
+template <class charT, class traits>
+bool basic_regex_creator<charT, traits>::is_bad_repeat(re_syntax_base* pt)
+{
+ switch(pt->type)
+ {
+ case syntax_element_rep:
+ case syntax_element_dot_rep:
+ case syntax_element_char_rep:
+ case syntax_element_short_set_rep:
+ case syntax_element_long_set_rep:
+ {
+ unsigned id = static_cast<re_repeat*>(pt)->id;
+ if(id > sizeof(m_bad_repeats) * CHAR_BIT)
+ return true; // run out of bits, assume we can't traverse this one.
+ static const boost::uintmax_t one = 1uL;
+ return m_bad_repeats & (one << id);
+ }
+ default:
+ return false;
+ }
+}
+
+template <class charT, class traits>
+void basic_regex_creator<charT, traits>::set_bad_repeat(re_syntax_base* pt)
+{
+ switch(pt->type)
+ {
+ case syntax_element_rep:
+ case syntax_element_dot_rep:
+ case syntax_element_char_rep:
+ case syntax_element_short_set_rep:
+ case syntax_element_long_set_rep:
+ {
+ unsigned id = static_cast<re_repeat*>(pt)->id;
+ static const boost::uintmax_t one = 1uL;
+ if(id <= sizeof(m_bad_repeats) * CHAR_BIT)
+ m_bad_repeats |= (one << id);
+ }
+ default:
+ break;
+ }
+}
+
+template <class charT, class traits>
+syntax_element_type basic_regex_creator<charT, traits>::get_repeat_type(re_syntax_base* state)
+{
+ typedef typename traits::char_class_type mask_type;
+ if(state->type == syntax_element_rep)
+ {
+ // check to see if we are repeating a single state:
+ if(state->next.p->next.p->next.p == static_cast<re_alt*>(state)->alt.p)
+ {
+ switch(state->next.p->type)
+ {
+ case re_detail::syntax_element_wild:
+ return re_detail::syntax_element_dot_rep;
+ case re_detail::syntax_element_literal:
+ return re_detail::syntax_element_char_rep;
+ case re_detail::syntax_element_set:
+ return re_detail::syntax_element_short_set_rep;
+ case re_detail::syntax_element_long_set:
+ if(static_cast<re_detail::re_set_long<mask_type>*>(state->next.p)->singleton)
+ return re_detail::syntax_element_long_set_rep;
+ break;
+ default:
+ break;
+ }
+ }
+ }
+ return state->type;
+}
+
+template <class charT, class traits>
+void basic_regex_creator<charT, traits>::probe_leading_repeat(re_syntax_base* state)
+{
+ // enumerate our states, and see if we have a leading repeat
+ // for which failed search restarts can be optimised;
+ do
+ {
+ switch(state->type)
+ {
+ case syntax_element_startmark:
+ if(static_cast<re_brace*>(state)->index >= 0)
+ {
+ state = state->next.p;
+ continue;
+ }
+ return;
+ case syntax_element_endmark:
+ case syntax_element_start_line:
+ case syntax_element_end_line:
+ case syntax_element_word_boundary:
+ case syntax_element_within_word:
+ case syntax_element_word_start:
+ case syntax_element_word_end:
+ case syntax_element_buffer_start:
+ case syntax_element_buffer_end:
+ case syntax_element_restart_continue:
+ state = state->next.p;
+ break;
+ case syntax_element_dot_rep:
+ case syntax_element_char_rep:
+ case syntax_element_short_set_rep:
+ case syntax_element_long_set_rep:
+ if(this->m_has_backrefs == 0)
+ static_cast<re_repeat*>(state)->leading = true;
+ // fall through:
+ default:
+ return;
+ }
+ }while(state);
+}
+
+
+} // namespace re_detail
+
+} // namespace boost
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif
diff --git a/boost/boost/regex/v4/basic_regex_parser.hpp b/boost/boost/regex/v4/basic_regex_parser.hpp
new file mode 100644
index 00000000000..08e705ad00d
--- /dev/null
+++ b/boost/boost/regex/v4/basic_regex_parser.hpp
@@ -0,0 +1,2089 @@
+/*
+ *
+ * Copyright (c) 2004
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE basic_regex_parser.cpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: Declares template class basic_regex_parser.
+ */
+
+#ifndef BOOST_REGEX_V4_BASIC_REGEX_PARSER_HPP
+#define BOOST_REGEX_V4_BASIC_REGEX_PARSER_HPP
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+namespace boost{
+namespace re_detail{
+
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable:4244)
+#endif
+
+template <class charT, class traits>
+class basic_regex_parser : public basic_regex_creator<charT, traits>
+{
+public:
+ basic_regex_parser(regex_data<charT, traits>* data);
+ void parse(const charT* p1, const charT* p2, unsigned flags);
+ void fail(regex_constants::error_type error_code, std::ptrdiff_t position);
+
+ bool parse_all();
+ bool parse_basic();
+ bool parse_extended();
+ bool parse_literal();
+ bool parse_open_paren();
+ bool parse_basic_escape();
+ bool parse_extended_escape();
+ bool parse_match_any();
+ bool parse_repeat(std::size_t low = 0, std::size_t high = (std::numeric_limits<std::size_t>::max)());
+ bool parse_repeat_range(bool isbasic);
+ bool parse_alt();
+ bool parse_set();
+ bool parse_backref();
+ void parse_set_literal(basic_char_set<charT, traits>& char_set);
+ bool parse_inner_set(basic_char_set<charT, traits>& char_set);
+ bool parse_QE();
+ bool parse_perl_extension();
+ bool add_emacs_code(bool negate);
+ bool unwind_alts(std::ptrdiff_t last_paren_start);
+ digraph<charT> get_next_set_literal(basic_char_set<charT, traits>& char_set);
+ charT unescape_character();
+ regex_constants::syntax_option_type parse_options();
+
+private:
+ typedef bool (basic_regex_parser::*parser_proc_type)();
+ typedef typename traits::string_type string_type;
+ typedef typename traits::char_class_type char_class_type;
+ parser_proc_type m_parser_proc; // the main parser to use
+ const charT* m_base; // the start of the string being parsed
+ const charT* m_end; // the end of the string being parsed
+ const charT* m_position; // our current parser position
+ unsigned m_mark_count; // how many sub-expressions we have
+ std::ptrdiff_t m_paren_start; // where the last seen ')' began (where repeats are inserted).
+ std::ptrdiff_t m_alt_insert_point; // where to insert the next alternative
+ bool m_has_case_change; // true if somewhere in the current block the case has changed
+#if defined(BOOST_MSVC) && defined(_M_IX86)
+ // This is an ugly warning suppression workaround (for warnings *inside* std::vector
+ // that can not otherwise be suppressed)...
+ BOOST_STATIC_ASSERT(sizeof(long) >= sizeof(void*));
+ std::vector<long> m_alt_jumps; // list of alternative in the current scope.
+#else
+ std::vector<std::ptrdiff_t> m_alt_jumps; // list of alternative in the current scope.
+#endif
+
+ basic_regex_parser& operator=(const basic_regex_parser&);
+ basic_regex_parser(const basic_regex_parser&);
+};
+
+template <class charT, class traits>
+basic_regex_parser<charT, traits>::basic_regex_parser(regex_data<charT, traits>* data)
+ : basic_regex_creator<charT, traits>(data), m_mark_count(0), m_paren_start(0), m_alt_insert_point(0), m_has_case_change(false)
+{
+}
+
+template <class charT, class traits>
+void basic_regex_parser<charT, traits>::parse(const charT* p1, const charT* p2, unsigned l_flags)
+{
+ // pass l_flags on to base class:
+ this->init(l_flags);
+ // set up pointers:
+ m_position = m_base = p1;
+ m_end = p2;
+ // empty strings are errors:
+ if(p1 == p2)
+ {
+ fail(regex_constants::error_empty, 0);
+ return;
+ }
+ // select which parser to use:
+ switch(l_flags & regbase::main_option_type)
+ {
+ case regbase::perl_syntax_group:
+ m_parser_proc = &basic_regex_parser<charT, traits>::parse_extended;
+ break;
+ case regbase::basic_syntax_group:
+ m_parser_proc = &basic_regex_parser<charT, traits>::parse_basic;
+ break;
+ case regbase::literal:
+ m_parser_proc = &basic_regex_parser<charT, traits>::parse_literal;
+ break;
+ }
+
+ // parse all our characters:
+ bool result = parse_all();
+ //
+ // Unwind our alternatives:
+ //
+ unwind_alts(-1);
+ // reset l_flags as a global scope (?imsx) may have altered them:
+ this->flags(l_flags);
+ // if we haven't gobbled up all the characters then we must
+ // have had an unexpected ')' :
+ if(!result)
+ {
+ fail(regex_constants::error_paren, ::boost::re_detail::distance(m_base, m_position));
+ return;
+ }
+ // if an error has been set then give up now:
+ if(this->m_pdata->m_status)
+ return;
+ // fill in our sub-expression count:
+ this->m_pdata->m_mark_count = 1 + m_mark_count;
+ this->finalize(p1, p2);
+}
+
+template <class charT, class traits>
+void basic_regex_parser<charT, traits>::fail(regex_constants::error_type error_code, std::ptrdiff_t position)
+{
+ if(0 == this->m_pdata->m_status) // update the error code if not already set
+ this->m_pdata->m_status = error_code;
+ m_position = m_end; // don't bother parsing anything else
+ // get the error message:
+ std::string message = this->m_pdata->m_ptraits->error_string(error_code);
+ // and raise the exception, this will do nothing if exceptions are disabled:
+#ifndef BOOST_NO_EXCEPTIONS
+ if(0 == (this->flags() & regex_constants::no_except))
+ {
+ boost::regex_error e(message, error_code, position);
+ e.raise();
+ }
+#else
+ (void)position; // suppress warnings.
+#endif
+}
+
+template <class charT, class traits>
+bool basic_regex_parser<charT, traits>::parse_all()
+{
+ bool result = true;
+ while(result && (m_position != m_end))
+ {
+ result = (this->*m_parser_proc)();
+ }
+ return result;
+}
+
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable:4702)
+#endif
+template <class charT, class traits>
+bool basic_regex_parser<charT, traits>::parse_basic()
+{
+ switch(this->m_traits.syntax_type(*m_position))
+ {
+ case regex_constants::syntax_escape:
+ return parse_basic_escape();
+ case regex_constants::syntax_dot:
+ return parse_match_any();
+ case regex_constants::syntax_caret:
+ ++m_position;
+ this->append_state(syntax_element_start_line);
+ break;
+ case regex_constants::syntax_dollar:
+ ++m_position;
+ this->append_state(syntax_element_end_line);
+ break;
+ case regex_constants::syntax_star:
+ if(!(this->m_last_state) || (this->m_last_state->type == syntax_element_start_line))
+ return parse_literal();
+ else
+ {
+ ++m_position;
+ return parse_repeat();
+ }
+ case regex_constants::syntax_plus:
+ if(!(this->m_last_state) || (this->m_last_state->type == syntax_element_start_line) || !(this->flags() & regbase::emacs_ex))
+ return parse_literal();
+ else
+ {
+ ++m_position;
+ return parse_repeat(1);
+ }
+ case regex_constants::syntax_question:
+ if(!(this->m_last_state) || (this->m_last_state->type == syntax_element_start_line) || !(this->flags() & regbase::emacs_ex))
+ return parse_literal();
+ else
+ {
+ ++m_position;
+ return parse_repeat(0, 1);
+ }
+ case regex_constants::syntax_open_set:
+ return parse_set();
+ case regex_constants::syntax_newline:
+ if(this->flags() & regbase::newline_alt)
+ return parse_alt();
+ else
+ return parse_literal();
+ default:
+ return parse_literal();
+ }
+ return true;
+}
+
+template <class charT, class traits>
+bool basic_regex_parser<charT, traits>::parse_extended()
+{
+ bool result = true;
+ switch(this->m_traits.syntax_type(*m_position))
+ {
+ case regex_constants::syntax_open_mark:
+ return parse_open_paren();
+ case regex_constants::syntax_close_mark:
+ return false;
+ case regex_constants::syntax_escape:
+ return parse_extended_escape();
+ case regex_constants::syntax_dot:
+ return parse_match_any();
+ case regex_constants::syntax_caret:
+ ++m_position;
+ this->append_state(
+ (this->flags() & regex_constants::no_mod_m ? syntax_element_buffer_start : syntax_element_start_line));
+ break;
+ case regex_constants::syntax_dollar:
+ ++m_position;
+ this->append_state(
+ (this->flags() & regex_constants::no_mod_m ? syntax_element_buffer_end : syntax_element_end_line));
+ break;
+ case regex_constants::syntax_star:
+ if(m_position == this->m_base)
+ {
+ fail(regex_constants::error_badrepeat, 0);
+ return false;
+ }
+ ++m_position;
+ return parse_repeat();
+ case regex_constants::syntax_question:
+ if(m_position == this->m_base)
+ {
+ fail(regex_constants::error_badrepeat, 0);
+ return false;
+ }
+ ++m_position;
+ return parse_repeat(0,1);
+ case regex_constants::syntax_plus:
+ if(m_position == this->m_base)
+ {
+ fail(regex_constants::error_badrepeat, 0);
+ return false;
+ }
+ ++m_position;
+ return parse_repeat(1);
+ case regex_constants::syntax_open_brace:
+ ++m_position;
+ return parse_repeat_range(false);
+ case regex_constants::syntax_close_brace:
+ fail(regex_constants::error_brace, this->m_position - this->m_end);
+ return false;
+ case regex_constants::syntax_or:
+ return parse_alt();
+ case regex_constants::syntax_open_set:
+ return parse_set();
+ case regex_constants::syntax_newline:
+ if(this->flags() & regbase::newline_alt)
+ return parse_alt();
+ else
+ return parse_literal();
+ case regex_constants::syntax_hash:
+ //
+ // If we have a mod_x flag set, then skip until
+ // we get to a newline character:
+ //
+ if((this->flags()
+ & (regbase::no_perl_ex|regbase::mod_x))
+ == regbase::mod_x)
+ {
+ while((m_position != m_end) && !is_separator(*m_position++)){}
+ return true;
+ }
+ // Otherwise fall through:
+ default:
+ result = parse_literal();
+ break;
+ }
+ return result;
+}
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+template <class charT, class traits>
+bool basic_regex_parser<charT, traits>::parse_literal()
+{
+ // append this as a literal provided it's not a space character
+ // or the perl option regbase::mod_x is not set:
+ if(
+ ((this->flags()
+ & (regbase::main_option_type|regbase::mod_x|regbase::no_perl_ex))
+ != regbase::mod_x)
+ || !this->m_traits.isctype(*m_position, this->m_mask_space))
+ this->append_literal(*m_position);
+ ++m_position;
+ return true;
+}
+
+template <class charT, class traits>
+bool basic_regex_parser<charT, traits>::parse_open_paren()
+{
+ //
+ // skip the '(' and error check:
+ //
+ if(++m_position == m_end)
+ {
+ fail(regex_constants::error_paren, m_position - m_base);
+ return false;
+ }
+ //
+ // begin by checking for a perl-style (?...) extension:
+ //
+ if(
+ ((this->flags() & (regbase::main_option_type | regbase::no_perl_ex)) == 0)
+ || ((this->flags() & (regbase::main_option_type | regbase::emacs_ex)) == (regbase::basic_syntax_group|regbase::emacs_ex))
+ )
+ {
+ if(this->m_traits.syntax_type(*m_position) == regex_constants::syntax_question)
+ return parse_perl_extension();
+ }
+ //
+ // update our mark count, and append the required state:
+ //
+ unsigned markid = 0;
+ if(0 == (this->flags() & regbase::nosubs))
+ markid = ++m_mark_count;
+ re_brace* pb = static_cast<re_brace*>(this->append_state(syntax_element_startmark, sizeof(re_brace)));
+ pb->index = markid;
+ std::ptrdiff_t last_paren_start = this->getoffset(pb);
+ // back up insertion point for alternations, and set new point:
+ std::ptrdiff_t last_alt_point = m_alt_insert_point;
+ this->m_pdata->m_data.align();
+ m_alt_insert_point = this->m_pdata->m_data.size();
+ //
+ // back up the current flags in case we have a nested (?imsx) group:
+ //
+ regex_constants::syntax_option_type opts = this->flags();
+ bool old_case_change = m_has_case_change;
+ m_has_case_change = false; // no changes to this scope as yet...
+ //
+ // now recursively add more states, this will terminate when we get to a
+ // matching ')' :
+ //
+ parse_all();
+ //
+ // Unwind pushed alternatives:
+ //
+ if(0 == unwind_alts(last_paren_start))
+ return false;
+ //
+ // restore flags:
+ //
+ if(m_has_case_change)
+ {
+ // the case has changed in one or more of the alternatives
+ // within the scoped (...) block: we have to add a state
+ // to reset the case sensitivity:
+ static_cast<re_case*>(
+ this->append_state(syntax_element_toggle_case, sizeof(re_case))
+ )->icase = opts & regbase::icase;
+ }
+ this->flags(opts);
+ m_has_case_change = old_case_change;
+ //
+ // we either have a ')' or we have run out of characters prematurely:
+ //
+ if(m_position == m_end)
+ {
+ this->fail(regex_constants::error_paren, ::boost::re_detail::distance(m_base, m_end));
+ return false;
+ }
+ BOOST_ASSERT(this->m_traits.syntax_type(*m_position) == regex_constants::syntax_close_mark);
+ ++m_position;
+ //
+ // append closing parenthesis state:
+ //
+ pb = static_cast<re_brace*>(this->append_state(syntax_element_endmark, sizeof(re_brace)));
+ pb->index = markid;
+ this->m_paren_start = last_paren_start;
+ //
+ // restore the alternate insertion point:
+ //
+ this->m_alt_insert_point = last_alt_point;
+ //
+ // allow backrefs to this mark:
+ //
+ if((markid > 0) && (markid < sizeof(unsigned) * CHAR_BIT))
+ this->m_backrefs |= 1u << (markid - 1);
+
+ return true;
+}
+
+template <class charT, class traits>
+bool basic_regex_parser<charT, traits>::parse_basic_escape()
+{
+ ++m_position;
+ bool result = true;
+ switch(this->m_traits.escape_syntax_type(*m_position))
+ {
+ case regex_constants::syntax_open_mark:
+ return parse_open_paren();
+ case regex_constants::syntax_close_mark:
+ return false;
+ case regex_constants::syntax_plus:
+ if(this->flags() & regex_constants::bk_plus_qm)
+ {
+ ++m_position;
+ return parse_repeat(1);
+ }
+ else
+ return parse_literal();
+ case regex_constants::syntax_question:
+ if(this->flags() & regex_constants::bk_plus_qm)
+ {
+ ++m_position;
+ return parse_repeat(0, 1);
+ }
+ else
+ return parse_literal();
+ case regex_constants::syntax_open_brace:
+ if(this->flags() & regbase::no_intervals)
+ return parse_literal();
+ ++m_position;
+ return parse_repeat_range(true);
+ case regex_constants::syntax_close_brace:
+ if(this->flags() & regbase::no_intervals)
+ return parse_literal();
+ fail(regex_constants::error_brace, this->m_position - this->m_base);
+ return false;
+ case regex_constants::syntax_or:
+ if(this->flags() & regbase::bk_vbar)
+ return parse_alt();
+ else
+ result = parse_literal();
+ break;
+ case regex_constants::syntax_digit:
+ return parse_backref();
+ case regex_constants::escape_type_start_buffer:
+ if(this->flags() & regbase::emacs_ex)
+ {
+ ++m_position;
+ this->append_state(syntax_element_buffer_start);
+ }
+ else
+ result = parse_literal();
+ break;
+ case regex_constants::escape_type_end_buffer:
+ if(this->flags() & regbase::emacs_ex)
+ {
+ ++m_position;
+ this->append_state(syntax_element_buffer_end);
+ }
+ else
+ result = parse_literal();
+ break;
+ case regex_constants::escape_type_word_assert:
+ if(this->flags() & regbase::emacs_ex)
+ {
+ ++m_position;
+ this->append_state(syntax_element_word_boundary);
+ }
+ else
+ result = parse_literal();
+ break;
+ case regex_constants::escape_type_not_word_assert:
+ if(this->flags() & regbase::emacs_ex)
+ {
+ ++m_position;
+ this->append_state(syntax_element_within_word);
+ }
+ else
+ result = parse_literal();
+ break;
+ case regex_constants::escape_type_left_word:
+ if(this->flags() & regbase::emacs_ex)
+ {
+ ++m_position;
+ this->append_state(syntax_element_word_start);
+ }
+ else
+ result = parse_literal();
+ break;
+ case regex_constants::escape_type_right_word:
+ if(this->flags() & regbase::emacs_ex)
+ {
+ ++m_position;
+ this->append_state(syntax_element_word_end);
+ }
+ else
+ result = parse_literal();
+ break;
+ default:
+ if(this->flags() & regbase::emacs_ex)
+ {
+ bool negate = true;
+ switch(*m_position)
+ {
+ case 'w':
+ negate = false;
+ // fall through:
+ case 'W':
+ {
+ basic_char_set<charT, traits> char_set;
+ if(negate)
+ char_set.negate();
+ char_set.add_class(this->m_word_mask);
+ if(0 == this->append_set(char_set))
+ {
+ fail(regex_constants::error_ctype, m_position - m_base);
+ return false;
+ }
+ ++m_position;
+ return true;
+ }
+ case 's':
+ negate = false;
+ // fall through:
+ case 'S':
+ return add_emacs_code(negate);
+ case 'c':
+ case 'C':
+ // not supported yet:
+ fail(regex_constants::error_escape, m_position - m_base);
+ return false;
+ default:
+ break;
+ }
+ }
+ result = parse_literal();
+ break;
+ }
+ return result;
+}
+
+template <class charT, class traits>
+bool basic_regex_parser<charT, traits>::parse_extended_escape()
+{
+ ++m_position;
+ bool negate = false; // in case this is a character class escape: \w \d etc
+ switch(this->m_traits.escape_syntax_type(*m_position))
+ {
+ case regex_constants::escape_type_not_class:
+ negate = true;
+ // fall through:
+ case regex_constants::escape_type_class:
+ {
+ typedef typename traits::char_class_type mask_type;
+ mask_type m = this->m_traits.lookup_classname(m_position, m_position+1);
+ if(m != 0)
+ {
+ basic_char_set<charT, traits> char_set;
+ if(negate)
+ char_set.negate();
+ char_set.add_class(m);
+ if(0 == this->append_set(char_set))
+ {
+ fail(regex_constants::error_ctype, m_position - m_base);
+ return false;
+ }
+ ++m_position;
+ return true;
+ }
+ //
+ // not a class, just a regular unknown escape:
+ //
+ this->append_literal(unescape_character());
+ break;
+ }
+ case regex_constants::syntax_digit:
+ return parse_backref();
+ case regex_constants::escape_type_left_word:
+ ++m_position;
+ this->append_state(syntax_element_word_start);
+ break;
+ case regex_constants::escape_type_right_word:
+ ++m_position;
+ this->append_state(syntax_element_word_end);
+ break;
+ case regex_constants::escape_type_start_buffer:
+ ++m_position;
+ this->append_state(syntax_element_buffer_start);
+ break;
+ case regex_constants::escape_type_end_buffer:
+ ++m_position;
+ this->append_state(syntax_element_buffer_end);
+ break;
+ case regex_constants::escape_type_word_assert:
+ ++m_position;
+ this->append_state(syntax_element_word_boundary);
+ break;
+ case regex_constants::escape_type_not_word_assert:
+ ++m_position;
+ this->append_state(syntax_element_within_word);
+ break;
+ case regex_constants::escape_type_Z:
+ ++m_position;
+ this->append_state(syntax_element_soft_buffer_end);
+ break;
+ case regex_constants::escape_type_Q:
+ return parse_QE();
+ case regex_constants::escape_type_C:
+ return parse_match_any();
+ case regex_constants::escape_type_X:
+ ++m_position;
+ this->append_state(syntax_element_combining);
+ break;
+ case regex_constants::escape_type_G:
+ ++m_position;
+ this->append_state(syntax_element_restart_continue);
+ break;
+ case regex_constants::escape_type_not_property:
+ negate = true;
+ // fall through:
+ case regex_constants::escape_type_property:
+ {
+ ++m_position;
+ char_class_type m;
+ if(m_position == m_end)
+ {
+ fail(regex_constants::error_escape, m_position - m_base);
+ return false;
+ }
+ // maybe have \p{ddd}
+ if(this->m_traits.syntax_type(*m_position) == regex_constants::syntax_open_brace)
+ {
+ const charT* base = m_position;
+ // skip forward until we find enclosing brace:
+ while((m_position != m_end) && (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_brace))
+ ++m_position;
+ if(m_position == m_end)
+ {
+ fail(regex_constants::error_escape, m_position - m_base);
+ return false;
+ }
+ m = this->m_traits.lookup_classname(++base, m_position++);
+ }
+ else
+ {
+ m = this->m_traits.lookup_classname(m_position, m_position+1);
+ ++m_position;
+ }
+ if(m != 0)
+ {
+ basic_char_set<charT, traits> char_set;
+ if(negate)
+ char_set.negate();
+ char_set.add_class(m);
+ if(0 == this->append_set(char_set))
+ {
+ fail(regex_constants::error_ctype, m_position - m_base);
+ return false;
+ }
+ return true;
+ }
+ fail(regex_constants::error_ctype, m_position - m_base);
+ }
+ default:
+ this->append_literal(unescape_character());
+ break;
+ }
+ return true;
+}
+
+template <class charT, class traits>
+bool basic_regex_parser<charT, traits>::parse_match_any()
+{
+ //
+ // we have a '.' that can match any character:
+ //
+ ++m_position;
+ static_cast<re_dot*>(
+ this->append_state(syntax_element_wild, sizeof(re_dot))
+ )->mask = static_cast<unsigned char>(this->flags() & regbase::no_mod_s
+ ? re_detail::force_not_newline
+ : this->flags() & regbase::mod_s ?
+ re_detail::force_newline : re_detail::dont_care);
+ return true;
+}
+
+template <class charT, class traits>
+bool basic_regex_parser<charT, traits>::parse_repeat(std::size_t low, std::size_t high)
+{
+ bool greedy = true;
+ std::size_t insert_point;
+ //
+ // when we get to here we may have a non-greedy ? mark still to come:
+ //
+ if((m_position != m_end)
+ && (
+ (0 == (this->flags() & (regbase::main_option_type | regbase::no_perl_ex)))
+ || ((regbase::basic_syntax_group|regbase::emacs_ex) == (this->flags() & (regbase::main_option_type | regbase::emacs_ex)))
+ )
+ )
+ {
+ // OK we have a perl regex, check for a '?':
+ if(this->m_traits.syntax_type(*m_position) == regex_constants::syntax_question)
+ {
+ greedy = false;
+ ++m_position;
+ }
+ }
+ if(0 == this->m_last_state)
+ {
+ fail(regex_constants::error_badrepeat, ::boost::re_detail::distance(m_base, m_position));
+ return false;
+ }
+ if(this->m_last_state->type == syntax_element_endmark)
+ {
+ // insert a repeat before the '(' matching the last ')':
+ insert_point = this->m_paren_start;
+ }
+ else if((this->m_last_state->type == syntax_element_literal) && (static_cast<re_literal*>(this->m_last_state)->length > 1))
+ {
+ // the last state was a literal with more than one character, split it in two:
+ re_literal* lit = static_cast<re_literal*>(this->m_last_state);
+ charT c = (static_cast<charT*>(static_cast<void*>(lit+1)))[lit->length - 1];
+ --(lit->length);
+ // now append new state:
+ lit = static_cast<re_literal*>(this->append_state(syntax_element_literal, sizeof(re_literal) + sizeof(charT)));
+ lit->length = 1;
+ (static_cast<charT*>(static_cast<void*>(lit+1)))[0] = c;
+ insert_point = this->getoffset(this->m_last_state);
+ }
+ else
+ {
+ // repeat the last state whatever it was, need to add some error checking here:
+ switch(this->m_last_state->type)
+ {
+ case syntax_element_start_line:
+ case syntax_element_end_line:
+ case syntax_element_word_boundary:
+ case syntax_element_within_word:
+ case syntax_element_word_start:
+ case syntax_element_word_end:
+ case syntax_element_buffer_start:
+ case syntax_element_buffer_end:
+ case syntax_element_alt:
+ case syntax_element_soft_buffer_end:
+ case syntax_element_restart_continue:
+ case syntax_element_jump:
+ case syntax_element_startmark:
+ // can't legally repeat any of the above:
+ fail(regex_constants::error_badrepeat, m_position - m_base);
+ return false;
+ default:
+ // do nothing...
+ break;
+ }
+ insert_point = this->getoffset(this->m_last_state);
+ }
+ //
+ // OK we now know what to repeat, so insert the repeat around it:
+ //
+ re_repeat* rep = static_cast<re_repeat*>(this->insert_state(insert_point, syntax_element_rep, re_repeater_size));
+ rep->min = low;
+ rep->max = high;
+ rep->greedy = greedy;
+ rep->leading = false;
+ // store our repeater position for later:
+ std::ptrdiff_t rep_off = this->getoffset(rep);
+ // and append a back jump to the repeat:
+ re_jump* jmp = static_cast<re_jump*>(this->append_state(syntax_element_jump, sizeof(re_jump)));
+ jmp->alt.i = rep_off - this->getoffset(jmp);
+ this->m_pdata->m_data.align();
+ // now fill in the alt jump for the repeat:
+ rep = static_cast<re_repeat*>(this->getaddress(rep_off));
+ rep->alt.i = this->m_pdata->m_data.size() - rep_off;
+ return true;
+}
+
+template <class charT, class traits>
+bool basic_regex_parser<charT, traits>::parse_repeat_range(bool isbasic)
+{
+ //
+ // parse a repeat-range:
+ //
+ std::size_t min, max;
+ int v;
+ // skip whitespace:
+ while((m_position != m_end) && this->m_traits.isctype(*m_position, this->m_mask_space))
+ ++m_position;
+ // fail if at end:
+ if(this->m_position == this->m_end)
+ {
+ fail(regex_constants::error_brace, this->m_position - this->m_base);
+ return false;
+ }
+ // get min:
+ v = this->m_traits.toi(m_position, m_end, 10);
+ // skip whitespace:
+ while((m_position != m_end) && this->m_traits.isctype(*m_position, this->m_mask_space))
+ ++m_position;
+ if(v < 0)
+ {
+ fail(regex_constants::error_badbrace, this->m_position - this->m_base);
+ return false;
+ }
+ else if(this->m_position == this->m_end)
+ {
+ fail(regex_constants::error_brace, this->m_position - this->m_base);
+ return false;
+ }
+ min = v;
+ // see if we have a comma:
+ if(this->m_traits.syntax_type(*m_position) == regex_constants::syntax_comma)
+ {
+ // move on and error check:
+ ++m_position;
+ // skip whitespace:
+ while((m_position != m_end) && this->m_traits.isctype(*m_position, this->m_mask_space))
+ ++m_position;
+ if(this->m_position == this->m_end)
+ {
+ fail(regex_constants::error_brace, this->m_position - this->m_base);
+ return false;
+ }
+ // get the value if any:
+ v = this->m_traits.toi(m_position, m_end, 10);
+ max = (v >= 0) ? v : (std::numeric_limits<std::size_t>::max)();
+ }
+ else
+ {
+ // no comma, max = min:
+ max = min;
+ }
+ // skip whitespace:
+ while((m_position != m_end) && this->m_traits.isctype(*m_position, this->m_mask_space))
+ ++m_position;
+ // OK now check trailing }:
+ if(this->m_position == this->m_end)
+ {
+ fail(regex_constants::error_brace, this->m_position - this->m_base);
+ return false;
+ }
+ if(isbasic)
+ {
+ if(this->m_traits.syntax_type(*m_position) == regex_constants::syntax_escape)
+ {
+ ++m_position;
+ if(this->m_position == this->m_end)
+ {
+ fail(regex_constants::error_brace, this->m_position - this->m_base);
+ return false;
+ }
+ }
+ else
+ {
+ fail(regex_constants::error_badbrace, this->m_position - this->m_base);
+ return false;
+ }
+ }
+ if(this->m_traits.syntax_type(*m_position) == regex_constants::syntax_close_brace)
+ ++m_position;
+ else
+ {
+ fail(regex_constants::error_badbrace, this->m_position - this->m_base);
+ return false;
+ }
+ //
+ // finally go and add the repeat, unless error:
+ //
+ if(min > max)
+ {
+ fail(regex_constants::error_badbrace, this->m_position - this->m_base);
+ return false;
+ }
+ return parse_repeat(min, max);
+}
+
+template <class charT, class traits>
+bool basic_regex_parser<charT, traits>::parse_alt()
+{
+ //
+ // error check: if there have been no previous states,
+ // or if the last state was a '(' then error:
+ //
+ if((this->m_last_state == 0) || (this->m_last_state->type == syntax_element_startmark))
+ {
+ fail(regex_constants::error_empty, this->m_position - this->m_base);
+ return false;
+ }
+ ++m_position;
+ //
+ // we need to append a trailing jump:
+ //
+ re_syntax_base* pj = this->append_state(re_detail::syntax_element_jump, sizeof(re_jump));
+ std::ptrdiff_t jump_offset = this->getoffset(pj);
+ //
+ // now insert the alternative:
+ //
+ re_alt* palt = static_cast<re_alt*>(this->insert_state(this->m_alt_insert_point, syntax_element_alt, re_alt_size));
+ jump_offset += re_alt_size;
+ this->m_pdata->m_data.align();
+ palt->alt.i = this->m_pdata->m_data.size() - this->getoffset(palt);
+ //
+ // update m_alt_insert_point so that the next alternate gets
+ // inserted at the start of the second of the two we've just created:
+ //
+ this->m_alt_insert_point = this->m_pdata->m_data.size();
+ //
+ // the start of this alternative must have a case changes state
+ // if the current block has messed around with case changes:
+ //
+ if(m_has_case_change)
+ {
+ static_cast<re_case*>(
+ this->append_state(syntax_element_toggle_case, sizeof(re_case))
+ )->icase = this->m_icase;
+ }
+ //
+ // push the alternative onto our stack, a recursive
+ // implementation here is easier to understand (and faster
+ // as it happens), but causes all kinds of stack overflow problems
+ // on programs with small stacks (COM+).
+ //
+ m_alt_jumps.push_back(jump_offset);
+ return true;
+}
+
+template <class charT, class traits>
+bool basic_regex_parser<charT, traits>::parse_set()
+{
+ ++m_position;
+ if(m_position == m_end)
+ {
+ fail(regex_constants::error_brack, m_position - m_base);
+ return false;
+ }
+ basic_char_set<charT, traits> char_set;
+
+ const charT* base = m_position; // where the '[' was
+ const charT* item_base = m_position; // where the '[' or '^' was
+
+ while(m_position != m_end)
+ {
+ switch(this->m_traits.syntax_type(*m_position))
+ {
+ case regex_constants::syntax_caret:
+ if(m_position == base)
+ {
+ char_set.negate();
+ ++m_position;
+ item_base = m_position;
+ }
+ else
+ parse_set_literal(char_set);
+ break;
+ case regex_constants::syntax_close_set:
+ if(m_position == item_base)
+ {
+ parse_set_literal(char_set);
+ break;
+ }
+ else
+ {
+ ++m_position;
+ if(0 == this->append_set(char_set))
+ {
+ fail(regex_constants::error_range, m_position - m_base);
+ return false;
+ }
+ }
+ return true;
+ case regex_constants::syntax_open_set:
+ if(parse_inner_set(char_set))
+ break;
+ return true;
+ case regex_constants::syntax_escape:
+ {
+ //
+ // look ahead and see if this is a character class shortcut
+ // \d \w \s etc...
+ //
+ ++m_position;
+ if(this->m_traits.escape_syntax_type(*m_position)
+ == regex_constants::escape_type_class)
+ {
+ char_class_type m = this->m_traits.lookup_classname(m_position, m_position+1);
+ if(m != 0)
+ {
+ char_set.add_class(m);
+ ++m_position;
+ break;
+ }
+ }
+ else if(this->m_traits.escape_syntax_type(*m_position)
+ == regex_constants::escape_type_not_class)
+ {
+ // negated character class:
+ char_class_type m = this->m_traits.lookup_classname(m_position, m_position+1);
+ if(m != 0)
+ {
+ char_set.add_negated_class(m);
+ ++m_position;
+ break;
+ }
+ }
+ // not a character class, just a regular escape:
+ --m_position;
+ parse_set_literal(char_set);
+ break;
+ }
+ default:
+ parse_set_literal(char_set);
+ break;
+ }
+ }
+ return m_position != m_end;
+}
+
+template <class charT, class traits>
+bool basic_regex_parser<charT, traits>::parse_inner_set(basic_char_set<charT, traits>& char_set)
+{
+ //
+ // we have either a character class [:name:]
+ // a collating element [.name.]
+ // or an equivalence class [=name=]
+ //
+ if(m_end == ++m_position)
+ {
+ fail(regex_constants::error_brack, m_position - m_base);
+ return false;
+ }
+ switch(this->m_traits.syntax_type(*m_position))
+ {
+ case regex_constants::syntax_dot:
+ //
+ // a collating element is treated as a literal:
+ //
+ --m_position;
+ parse_set_literal(char_set);
+ return true;
+ case regex_constants::syntax_colon:
+ {
+ // check that character classes are actually enabled:
+ if((this->flags() & (regbase::main_option_type | regbase::no_char_classes))
+ == (regbase::basic_syntax_group | regbase::no_char_classes))
+ {
+ --m_position;
+ parse_set_literal(char_set);
+ return true;
+ }
+ // skip the ':'
+ if(m_end == ++m_position)
+ {
+ fail(regex_constants::error_brack, m_position - m_base);
+ return false;
+ }
+ const charT* name_first = m_position;
+ // skip at least one character, then find the matching ':]'
+ if(m_end == ++m_position)
+ {
+ fail(regex_constants::error_brack, m_position - m_base);
+ return false;
+ }
+ while((m_position != m_end)
+ && (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_colon))
+ ++m_position;
+ const charT* name_last = m_position;
+ if(m_end == m_position)
+ {
+ fail(regex_constants::error_brack, m_position - m_base);
+ return false;
+ }
+ if((m_end == ++m_position)
+ || (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_set))
+ {
+ fail(regex_constants::error_brack, m_position - m_base);
+ return false;
+ }
+ //
+ // check for negated class:
+ //
+ bool negated = false;
+ if(this->m_traits.syntax_type(*name_first) == regex_constants::syntax_caret)
+ {
+ ++name_first;
+ negated = true;
+ }
+ typedef typename traits::char_class_type mask_type;
+ mask_type m = this->m_traits.lookup_classname(name_first, name_last);
+ if(m == 0)
+ {
+ if(char_set.empty() && (name_last - name_first == 1))
+ {
+ // maybe a special case:
+ ++m_position;
+ if( (m_position != m_end)
+ && (this->m_traits.syntax_type(*m_position)
+ == regex_constants::syntax_close_set))
+ {
+ if(this->m_traits.escape_syntax_type(*name_first)
+ == regex_constants::escape_type_left_word)
+ {
+ ++m_position;
+ this->append_state(syntax_element_word_start);
+ return false;
+ }
+ if(this->m_traits.escape_syntax_type(*name_first)
+ == regex_constants::escape_type_right_word)
+ {
+ ++m_position;
+ this->append_state(syntax_element_word_end);
+ return false;
+ }
+ }
+ }
+ fail(regex_constants::error_ctype, name_first - m_base);
+ return false;
+ }
+ if(negated == false)
+ char_set.add_class(m);
+ else
+ char_set.add_negated_class(m);
+ ++m_position;
+ break;
+ }
+ case regex_constants::syntax_equal:
+ {
+ // skip the '='
+ if(m_end == ++m_position)
+ {
+ fail(regex_constants::error_brack, m_position - m_base);
+ return false;
+ }
+ const charT* name_first = m_position;
+ // skip at least one character, then find the matching '=]'
+ if(m_end == ++m_position)
+ {
+ fail(regex_constants::error_brack, m_position - m_base);
+ return false;
+ }
+ while((m_position != m_end)
+ && (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_equal))
+ ++m_position;
+ const charT* name_last = m_position;
+ if(m_end == m_position)
+ {
+ fail(regex_constants::error_brack, m_position - m_base);
+ return false;
+ }
+ if((m_end == ++m_position)
+ || (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_set))
+ {
+ fail(regex_constants::error_brack, m_position - m_base);
+ return false;
+ }
+ string_type m = this->m_traits.lookup_collatename(name_first, name_last);
+ if((0 == m.size()) || (m.size() > 2))
+ {
+ fail(regex_constants::error_collate, name_first - m_base);
+ return false;
+ }
+ digraph<charT> d;
+ d.first = m[0];
+ if(m.size() > 1)
+ d.second = m[1];
+ else
+ d.second = 0;
+ char_set.add_equivalent(d);
+ ++m_position;
+ break;
+ }
+ default:
+ --m_position;
+ parse_set_literal(char_set);
+ break;
+ }
+ return true;
+}
+
+template <class charT, class traits>
+void basic_regex_parser<charT, traits>::parse_set_literal(basic_char_set<charT, traits>& char_set)
+{
+ digraph<charT> start_range(get_next_set_literal(char_set));
+ if(m_end == m_position)
+ {
+ fail(regex_constants::error_brack, m_position - m_base);
+ return;
+ }
+ if(this->m_traits.syntax_type(*m_position) == regex_constants::syntax_dash)
+ {
+ // we have a range:
+ if(m_end == ++m_position)
+ {
+ fail(regex_constants::error_brack, m_position - m_base);
+ return;
+ }
+ if(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_set)
+ {
+ digraph<charT> end_range = get_next_set_literal(char_set);
+ char_set.add_range(start_range, end_range);
+ if(this->m_traits.syntax_type(*m_position) == regex_constants::syntax_dash)
+ {
+ if(m_end == ++m_position)
+ {
+ fail(regex_constants::error_brack, m_position - m_base);
+ return;
+ }
+ if(this->m_traits.syntax_type(*m_position) == regex_constants::syntax_close_set)
+ {
+ // trailing - :
+ --m_position;
+ return;
+ }
+ fail(regex_constants::error_range, m_position - m_base);
+ return;
+ }
+ return;
+ }
+ --m_position;
+ }
+ char_set.add_single(start_range);
+}
+
+template <class charT, class traits>
+digraph<charT> basic_regex_parser<charT, traits>::get_next_set_literal(basic_char_set<charT, traits>& char_set)
+{
+ digraph<charT> result;
+ switch(this->m_traits.syntax_type(*m_position))
+ {
+ case regex_constants::syntax_dash:
+ if(!char_set.empty())
+ {
+ // see if we are at the end of the set:
+ if((++m_position == m_end) || (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_set))
+ {
+ fail(regex_constants::error_range, m_position - m_base);
+ return result;
+ }
+ --m_position;
+ }
+ result.first = *m_position++;
+ return result;
+ case regex_constants::syntax_escape:
+ // check to see if escapes are supported first:
+ if(this->flags() & regex_constants::no_escape_in_lists)
+ {
+ result = *m_position++;
+ break;
+ }
+ ++m_position;
+ result = unescape_character();
+ break;
+ case regex_constants::syntax_open_set:
+ {
+ if(m_end == ++m_position)
+ {
+ fail(regex_constants::error_collate, m_position - m_base);
+ return result;
+ }
+ if(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_dot)
+ {
+ --m_position;
+ result.first = *m_position;
+ ++m_position;
+ return result;
+ }
+ if(m_end == ++m_position)
+ {
+ fail(regex_constants::error_collate, m_position - m_base);
+ return result;
+ }
+ const charT* name_first = m_position;
+ // skip at least one character, then find the matching ':]'
+ if(m_end == ++m_position)
+ {
+ fail(regex_constants::error_collate, name_first - m_base);
+ return result;
+ }
+ while((m_position != m_end)
+ && (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_dot))
+ ++m_position;
+ const charT* name_last = m_position;
+ if(m_end == m_position)
+ {
+ fail(regex_constants::error_collate, name_first - m_base);
+ return result;
+ }
+ if((m_end == ++m_position)
+ || (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_set))
+ {
+ fail(regex_constants::error_collate, name_first - m_base);
+ return result;
+ }
+ ++m_position;
+ string_type s = this->m_traits.lookup_collatename(name_first, name_last);
+ if(s.empty() || (s.size() > 2))
+ {
+ fail(regex_constants::error_collate, name_first - m_base);
+ return result;
+ }
+ result.first = s[0];
+ if(s.size() > 1)
+ result.second = s[1];
+ else
+ result.second = 0;
+ return result;
+ }
+ default:
+ result = *m_position++;
+ }
+ return result;
+}
+
+//
+// does a value fit in the specified charT type?
+//
+template <class charT>
+bool valid_value(charT, int v, const mpl::true_&)
+{
+ return (v >> (sizeof(charT) * CHAR_BIT)) == 0;
+}
+template <class charT>
+bool valid_value(charT, int, const mpl::false_&)
+{
+ return true; // v will alsways fit in a charT
+}
+template <class charT>
+bool valid_value(charT c, int v)
+{
+ return valid_value(c, v, mpl::bool_<(sizeof(charT) < sizeof(int))>());
+}
+
+template <class charT, class traits>
+charT basic_regex_parser<charT, traits>::unescape_character()
+{
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable:4127)
+#endif
+ charT result(0);
+ if(m_position == m_end)
+ {
+ fail(regex_constants::error_escape, m_position - m_base);
+ return false;
+ }
+ switch(this->m_traits.escape_syntax_type(*m_position))
+ {
+ case regex_constants::escape_type_control_a:
+ result = charT('\a');
+ break;
+ case regex_constants::escape_type_e:
+ result = charT(27);
+ break;
+ case regex_constants::escape_type_control_f:
+ result = charT('\f');
+ break;
+ case regex_constants::escape_type_control_n:
+ result = charT('\n');
+ break;
+ case regex_constants::escape_type_control_r:
+ result = charT('\r');
+ break;
+ case regex_constants::escape_type_control_t:
+ result = charT('\t');
+ break;
+ case regex_constants::escape_type_control_v:
+ result = charT('\v');
+ break;
+ case regex_constants::escape_type_word_assert:
+ result = charT('\b');
+ break;
+ case regex_constants::escape_type_ascii_control:
+ ++m_position;
+ if(m_position == m_end)
+ {
+ fail(regex_constants::error_escape, m_position - m_base);
+ return result;
+ }
+ /*
+ if((*m_position < charT('@'))
+ || (*m_position > charT(125)) )
+ {
+ fail(regex_constants::error_escape, m_position - m_base);
+ return result;
+ }
+ */
+ result = static_cast<charT>(*m_position % 32);
+ break;
+ case regex_constants::escape_type_hex:
+ ++m_position;
+ if(m_position == m_end)
+ {
+ fail(regex_constants::error_escape, m_position - m_base);
+ return result;
+ }
+ // maybe have \x{ddd}
+ if(this->m_traits.syntax_type(*m_position) == regex_constants::syntax_open_brace)
+ {
+ ++m_position;
+ if(m_position == m_end)
+ {
+ fail(regex_constants::error_escape, m_position - m_base);
+ return result;
+ }
+ int i = this->m_traits.toi(m_position, m_end, 16);
+ if((m_position == m_end)
+ || (i < 0)
+ || ((std::numeric_limits<charT>::is_specialized) && (charT(i) > (std::numeric_limits<charT>::max)()))
+ || (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_brace))
+ {
+ fail(regex_constants::error_badbrace, m_position - m_base);
+ return result;
+ }
+ ++m_position;
+ result = charT(i);
+ }
+ else
+ {
+ std::ptrdiff_t len = (std::min)(static_cast<std::ptrdiff_t>(2), m_end - m_position);
+ int i = this->m_traits.toi(m_position, m_position + len, 16);
+ if((i < 0)
+ || !valid_value(charT(0), i))
+ {
+ fail(regex_constants::error_escape, m_position - m_base);
+ return result;
+ }
+ result = charT(i);
+ }
+ return result;
+ case regex_constants::syntax_digit:
+ {
+ // an octal escape sequence, the first character must be a zero
+ // followed by up to 3 octal digits:
+ std::ptrdiff_t len = (std::min)(::boost::re_detail::distance(m_position, m_end), static_cast<std::ptrdiff_t>(4));
+ const charT* bp = m_position;
+ int val = this->m_traits.toi(bp, bp + 1, 8);
+ if(val != 0)
+ {
+ // Oops not an octal escape after all:
+ fail(regex_constants::error_escape, m_position - m_base);
+ return result;
+ }
+ val = this->m_traits.toi(m_position, m_position + len, 8);
+ if(val < 0)
+ {
+ fail(regex_constants::error_escape, m_position - m_base);
+ return result;
+ }
+ return static_cast<charT>(val);
+ }
+ case regex_constants::escape_type_named_char:
+ {
+ ++m_position;
+ if(m_position == m_end)
+ {
+ fail(regex_constants::error_escape, m_position - m_base);
+ return false;
+ }
+ // maybe have \N{name}
+ if(this->m_traits.syntax_type(*m_position) == regex_constants::syntax_open_brace)
+ {
+ const charT* base = m_position;
+ // skip forward until we find enclosing brace:
+ while((m_position != m_end) && (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_brace))
+ ++m_position;
+ if(m_position == m_end)
+ {
+ fail(regex_constants::error_escape, m_position - m_base);
+ return false;
+ }
+ string_type s = this->m_traits.lookup_collatename(++base, m_position++);
+ if(s.empty())
+ {
+ fail(regex_constants::error_collate, m_position - m_base);
+ return false;
+ }
+ if(s.size() == 1)
+ {
+ return s[0];
+ }
+ }
+ // fall through is a failure:
+ fail(regex_constants::error_escape, m_position - m_base);
+ return false;
+ }
+ default:
+ result = *m_position;
+ break;
+ }
+ ++m_position;
+ return result;
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+}
+
+template <class charT, class traits>
+bool basic_regex_parser<charT, traits>::parse_backref()
+{
+ BOOST_ASSERT(m_position != m_end);
+ const charT* pc = m_position;
+ int i = this->m_traits.toi(pc, pc + 1, 10);
+ if((i == 0) || (((this->flags() & regbase::main_option_type) == regbase::perl_syntax_group) && (this->flags() & regbase::no_bk_refs)))
+ {
+ // not a backref at all but an octal escape sequence:
+ charT c = unescape_character();
+ this->append_literal(c);
+ }
+ else if((i > 0) && (this->m_backrefs & (1u << (i-1))))
+ {
+ m_position = pc;
+ re_brace* pb = static_cast<re_brace*>(this->append_state(syntax_element_backref, sizeof(re_brace)));
+ pb->index = i;
+ }
+ else
+ {
+ fail(regex_constants::error_backref, m_position - m_end);
+ return false;
+ }
+ return true;
+}
+
+template <class charT, class traits>
+bool basic_regex_parser<charT, traits>::parse_QE()
+{
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable:4127)
+#endif
+ //
+ // parse a \Q...\E sequence:
+ //
+ ++m_position; // skip the Q
+ const charT* start = m_position;
+ const charT* end;
+ do
+ {
+ while((m_position != m_end)
+ && (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_escape))
+ ++m_position;
+ if(m_position == m_end)
+ {
+ // a \Q...\E sequence may terminate with the end of the expression:
+ end = m_position;
+ break;
+ }
+ if(++m_position == m_end) // skip the escape
+ {
+ fail(regex_constants::error_escape, m_position - m_base);
+ return false;
+ }
+ // check to see if it's a \E:
+ if(this->m_traits.escape_syntax_type(*m_position) == regex_constants::escape_type_E)
+ {
+ ++m_position;
+ end = m_position - 2;
+ break;
+ }
+ // otherwise go round again:
+ }while(true);
+ //
+ // now add all the character between the two escapes as literals:
+ //
+ while(start != end)
+ {
+ this->append_literal(*start);
+ ++start;
+ }
+ return true;
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+}
+
+template <class charT, class traits>
+bool basic_regex_parser<charT, traits>::parse_perl_extension()
+{
+ if(++m_position == m_end)
+ {
+ fail(regex_constants::error_badrepeat, m_position - m_base);
+ return false;
+ }
+ //
+ // treat comments as a special case, as these
+ // are the only ones that don't start with a leading
+ // startmark state:
+ //
+ if(this->m_traits.syntax_type(*m_position) == regex_constants::syntax_hash)
+ {
+ while((m_position != m_end)
+ && (this->m_traits.syntax_type(*m_position++) != regex_constants::syntax_close_mark))
+ {}
+ return true;
+ }
+ //
+ // backup some state, and prepare the way:
+ //
+ int markid = 0;
+ std::ptrdiff_t jump_offset = 0;
+ re_brace* pb = static_cast<re_brace*>(this->append_state(syntax_element_startmark, sizeof(re_brace)));
+ std::ptrdiff_t last_paren_start = this->getoffset(pb);
+ // back up insertion point for alternations, and set new point:
+ std::ptrdiff_t last_alt_point = m_alt_insert_point;
+ this->m_pdata->m_data.align();
+ m_alt_insert_point = this->m_pdata->m_data.size();
+ std::ptrdiff_t expected_alt_point = m_alt_insert_point;
+ bool restore_flags = true;
+ regex_constants::syntax_option_type old_flags = this->flags();
+ bool old_case_change = m_has_case_change;
+ m_has_case_change = false;
+ //
+ // select the actual extension used:
+ //
+ switch(this->m_traits.syntax_type(*m_position))
+ {
+ case regex_constants::syntax_colon:
+ //
+ // a non-capturing mark:
+ //
+ pb->index = markid = 0;
+ ++m_position;
+ break;
+ case regex_constants::syntax_equal:
+ pb->index = markid = -1;
+ ++m_position;
+ jump_offset = this->getoffset(this->append_state(syntax_element_jump, sizeof(re_jump)));
+ this->m_pdata->m_data.align();
+ m_alt_insert_point = this->m_pdata->m_data.size();
+ break;
+ case regex_constants::syntax_not:
+ pb->index = markid = -2;
+ ++m_position;
+ jump_offset = this->getoffset(this->append_state(syntax_element_jump, sizeof(re_jump)));
+ this->m_pdata->m_data.align();
+ m_alt_insert_point = this->m_pdata->m_data.size();
+ break;
+ case regex_constants::escape_type_left_word:
+ {
+ // a lookbehind assertion:
+ if(++m_position == m_end)
+ {
+ fail(regex_constants::error_badrepeat, m_position - m_base);
+ return false;
+ }
+ regex_constants::syntax_type t = this->m_traits.syntax_type(*m_position);
+ if(t == regex_constants::syntax_not)
+ pb->index = markid = -2;
+ else if(t == regex_constants::syntax_equal)
+ pb->index = markid = -1;
+ else
+ {
+ fail(regex_constants::error_badrepeat, m_position - m_base);
+ return false;
+ }
+ ++m_position;
+ jump_offset = this->getoffset(this->append_state(syntax_element_jump, sizeof(re_jump)));
+ this->append_state(syntax_element_backstep, sizeof(re_brace));
+ this->m_pdata->m_data.align();
+ m_alt_insert_point = this->m_pdata->m_data.size();
+ break;
+ }
+ case regex_constants::escape_type_right_word:
+ //
+ // an independent sub-expression:
+ //
+ pb->index = markid = -3;
+ ++m_position;
+ jump_offset = this->getoffset(this->append_state(syntax_element_jump, sizeof(re_jump)));
+ this->m_pdata->m_data.align();
+ m_alt_insert_point = this->m_pdata->m_data.size();
+ break;
+ case regex_constants::syntax_open_mark:
+ {
+ // a conditional expression:
+ pb->index = markid = -4;
+ if(++m_position == m_end)
+ {
+ fail(regex_constants::error_badrepeat, m_position - m_base);
+ return false;
+ }
+ int v = this->m_traits.toi(m_position, m_end, 10);
+ if(v > 0)
+ {
+ re_brace* br = static_cast<re_brace*>(this->append_state(syntax_element_assert_backref, sizeof(re_brace)));
+ br->index = v;
+ if(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_mark)
+ {
+ fail(regex_constants::error_badrepeat, m_position - m_base);
+ return false;
+ }
+ if(++m_position == m_end)
+ {
+ fail(regex_constants::error_badrepeat, m_position - m_base);
+ return false;
+ }
+ }
+ else
+ {
+ // verify that we have a lookahead or lookbehind assert:
+ if(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_question)
+ {
+ fail(regex_constants::error_badrepeat, m_position - m_base);
+ return false;
+ }
+ if(++m_position == m_end)
+ {
+ fail(regex_constants::error_badrepeat, m_position - m_base);
+ return false;
+ }
+ if(this->m_traits.syntax_type(*m_position) == regex_constants::escape_type_left_word)
+ {
+ if(++m_position == m_end)
+ {
+ fail(regex_constants::error_badrepeat, m_position - m_base);
+ return false;
+ }
+ if((this->m_traits.syntax_type(*m_position) != regex_constants::syntax_equal)
+ && (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_not))
+ {
+ fail(regex_constants::error_badrepeat, m_position - m_base);
+ return false;
+ }
+ m_position -= 3;
+ }
+ else
+ {
+ if((this->m_traits.syntax_type(*m_position) != regex_constants::syntax_equal)
+ && (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_not))
+ {
+ fail(regex_constants::error_badrepeat, m_position - m_base);
+ return false;
+ }
+ m_position -= 2;
+ }
+ }
+ break;
+ }
+ case regex_constants::syntax_close_mark:
+ fail(regex_constants::error_badrepeat, m_position - m_base);
+ return false;
+ default:
+ //
+ // lets assume that we have a (?imsx) group and try and parse it:
+ //
+ regex_constants::syntax_option_type opts = parse_options();
+ if(m_position == m_end)
+ return false;
+ // make a note of whether we have a case change:
+ m_has_case_change = ((opts & regbase::icase) != (this->flags() & regbase::icase));
+ pb->index = markid = 0;
+ if(this->m_traits.syntax_type(*m_position) == regex_constants::syntax_close_mark)
+ {
+ // update flags and carry on as normal:
+ this->flags(opts);
+ restore_flags = false;
+ old_case_change |= m_has_case_change; // defer end of scope by one ')'
+ }
+ else if(this->m_traits.syntax_type(*m_position) == regex_constants::syntax_colon)
+ {
+ // update flags and carry on until the matching ')' is found:
+ this->flags(opts);
+ ++m_position;
+ }
+ else
+ {
+ fail(regex_constants::error_badrepeat, m_position - m_base);
+ return false;
+ }
+
+ // finally append a case change state if we need it:
+ if(m_has_case_change)
+ {
+ static_cast<re_case*>(
+ this->append_state(syntax_element_toggle_case, sizeof(re_case))
+ )->icase = opts & regbase::icase;
+ }
+
+ }
+ //
+ // now recursively add more states, this will terminate when we get to a
+ // matching ')' :
+ //
+ parse_all();
+ //
+ // Unwind alternatives:
+ //
+ if(0 == unwind_alts(last_paren_start))
+ return false;
+ //
+ // we either have a ')' or we have run out of characters prematurely:
+ //
+ if(m_position == m_end)
+ {
+ this->fail(regex_constants::error_paren, ::boost::re_detail::distance(m_base, m_end));
+ return false;
+ }
+ BOOST_ASSERT(this->m_traits.syntax_type(*m_position) == regex_constants::syntax_close_mark);
+ ++m_position;
+ //
+ // restore the flags:
+ //
+ if(restore_flags)
+ {
+ // append a case change state if we need it:
+ if(m_has_case_change)
+ {
+ static_cast<re_case*>(
+ this->append_state(syntax_element_toggle_case, sizeof(re_case))
+ )->icase = old_flags & regbase::icase;
+ }
+ this->flags(old_flags);
+ }
+ //
+ // set up the jump pointer if we have one:
+ //
+ if(jump_offset)
+ {
+ this->m_pdata->m_data.align();
+ re_jump* jmp = static_cast<re_jump*>(this->getaddress(jump_offset));
+ jmp->alt.i = this->m_pdata->m_data.size() - this->getoffset(jmp);
+ if(this->m_last_state == jmp)
+ {
+ // Oops... we didn't have anything inside the assertion:
+ fail(regex_constants::error_empty, m_position - m_base);
+ return false;
+ }
+ }
+ //
+ // verify that if this is conditional expression, that we do have
+ // an alternative, if not add one:
+ //
+ if(markid == -4)
+ {
+ re_syntax_base* b = this->getaddress(expected_alt_point);
+ if(b->type != syntax_element_alt)
+ {
+ re_alt* alt = static_cast<re_alt*>(this->insert_state(expected_alt_point, syntax_element_alt, sizeof(re_alt)));
+ alt->alt.i = this->m_pdata->m_data.size() - this->getoffset(alt);
+ }
+ else if(this->getaddress(static_cast<re_alt*>(b)->alt.i, b)->type == syntax_element_alt)
+ {
+ fail(regex_constants::error_bad_pattern, m_position - m_base);
+ return false;
+ }
+ }
+ //
+ // append closing parenthesis state:
+ //
+ pb = static_cast<re_brace*>(this->append_state(syntax_element_endmark, sizeof(re_brace)));
+ pb->index = markid;
+ this->m_paren_start = last_paren_start;
+ //
+ // restore the alternate insertion point:
+ //
+ this->m_alt_insert_point = last_alt_point;
+ //
+ // and the case change data:
+ //
+ m_has_case_change = old_case_change;
+ return true;
+}
+
+template <class charT, class traits>
+bool basic_regex_parser<charT, traits>::add_emacs_code(bool negate)
+{
+ //
+ // parses an emacs style \sx or \Sx construct.
+ //
+ if(++m_position == m_end)
+ {
+ fail(regex_constants::error_escape, m_position - m_base);
+ return false;
+ }
+ basic_char_set<charT, traits> char_set;
+ if(negate)
+ char_set.negate();
+
+ static const charT s_punct[5] = { 'p', 'u', 'n', 'c', 't', };
+
+ switch(*m_position)
+ {
+ case 's':
+ case ' ':
+ char_set.add_class(this->m_mask_space);
+ break;
+ case 'w':
+ char_set.add_class(this->m_word_mask);
+ break;
+ case '_':
+ char_set.add_single(digraph<charT>(charT('$')));
+ char_set.add_single(digraph<charT>(charT('&')));
+ char_set.add_single(digraph<charT>(charT('*')));
+ char_set.add_single(digraph<charT>(charT('+')));
+ char_set.add_single(digraph<charT>(charT('-')));
+ char_set.add_single(digraph<charT>(charT('_')));
+ char_set.add_single(digraph<charT>(charT('<')));
+ char_set.add_single(digraph<charT>(charT('>')));
+ break;
+ case '.':
+ char_set.add_class(this->m_traits.lookup_classname(s_punct, s_punct+5));
+ break;
+ case '(':
+ char_set.add_single(digraph<charT>(charT('(')));
+ char_set.add_single(digraph<charT>(charT('[')));
+ char_set.add_single(digraph<charT>(charT('{')));
+ break;
+ case ')':
+ char_set.add_single(digraph<charT>(charT(')')));
+ char_set.add_single(digraph<charT>(charT(']')));
+ char_set.add_single(digraph<charT>(charT('}')));
+ break;
+ case '"':
+ char_set.add_single(digraph<charT>(charT('"')));
+ char_set.add_single(digraph<charT>(charT('\'')));
+ char_set.add_single(digraph<charT>(charT('`')));
+ break;
+ case '\'':
+ char_set.add_single(digraph<charT>(charT('\'')));
+ char_set.add_single(digraph<charT>(charT(',')));
+ char_set.add_single(digraph<charT>(charT('#')));
+ break;
+ case '<':
+ char_set.add_single(digraph<charT>(charT(';')));
+ break;
+ case '>':
+ char_set.add_single(digraph<charT>(charT('\n')));
+ char_set.add_single(digraph<charT>(charT('\f')));
+ break;
+ default:
+ fail(regex_constants::error_ctype, m_position - m_base);
+ return false;
+ }
+ if(0 == this->append_set(char_set))
+ {
+ fail(regex_constants::error_ctype, m_position - m_base);
+ return false;
+ }
+ ++m_position;
+ return true;
+}
+
+template <class charT, class traits>
+regex_constants::syntax_option_type basic_regex_parser<charT, traits>::parse_options()
+{
+ // we have a (?imsx-imsx) group, convert it into a set of flags:
+ regex_constants::syntax_option_type f = this->flags();
+ bool breakout = false;
+ do
+ {
+ switch(*m_position)
+ {
+ case 's':
+ f |= regex_constants::mod_s;
+ f &= ~regex_constants::no_mod_s;
+ break;
+ case 'm':
+ f &= ~regex_constants::no_mod_m;
+ break;
+ case 'i':
+ f |= regex_constants::icase;
+ break;
+ case 'x':
+ f |= regex_constants::mod_x;
+ break;
+ default:
+ breakout = true;
+ continue;
+ }
+ if(++m_position == m_end)
+ {
+ fail(regex_constants::error_paren, m_position - m_base);
+ return false;
+ }
+ }
+ while(!breakout);
+
+ if(*m_position == static_cast<charT>('-'))
+ {
+ if(++m_position == m_end)
+ {
+ fail(regex_constants::error_paren, m_position - m_base);
+ return false;
+ }
+ do
+ {
+ switch(*m_position)
+ {
+ case 's':
+ f &= ~regex_constants::mod_s;
+ f |= regex_constants::no_mod_s;
+ break;
+ case 'm':
+ f |= regex_constants::no_mod_m;
+ break;
+ case 'i':
+ f &= ~regex_constants::icase;
+ break;
+ case 'x':
+ f &= ~regex_constants::mod_x;
+ break;
+ default:
+ breakout = true;
+ continue;
+ }
+ if(++m_position == m_end)
+ {
+ fail(regex_constants::error_paren, m_position - m_base);
+ return false;
+ }
+ }
+ while(!breakout);
+ }
+ return f;
+}
+
+template <class charT, class traits>
+bool basic_regex_parser<charT, traits>::unwind_alts(std::ptrdiff_t last_paren_start)
+{
+ //
+ // If we didn't actually add any states after the last
+ // alternative then that's an error:
+ //
+ if((this->m_alt_insert_point == static_cast<std::ptrdiff_t>(this->m_pdata->m_data.size()))
+ && m_alt_jumps.size() && (m_alt_jumps.back() > last_paren_start))
+ {
+ fail(regex_constants::error_empty, this->m_position - this->m_base);
+ return false;
+ }
+ //
+ // Fix up our alternatives:
+ //
+ while(m_alt_jumps.size() && (m_alt_jumps.back() > last_paren_start))
+ {
+ //
+ // fix up the jump to point to the end of the states
+ // that we've just added:
+ //
+ std::ptrdiff_t jump_offset = m_alt_jumps.back();
+ m_alt_jumps.pop_back();
+ this->m_pdata->m_data.align();
+ re_jump* jmp = static_cast<re_jump*>(this->getaddress(jump_offset));
+ BOOST_ASSERT(jmp->type == syntax_element_jump);
+ jmp->alt.i = this->m_pdata->m_data.size() - jump_offset;
+ }
+ return true;
+}
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+} // namespace re_detail
+} // namespace boost
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif
diff --git a/boost/boost/regex/v4/c_regex_traits.hpp b/boost/boost/regex/v4/c_regex_traits.hpp
new file mode 100644
index 00000000000..b4ec1518261
--- /dev/null
+++ b/boost/boost/regex/v4/c_regex_traits.hpp
@@ -0,0 +1,197 @@
+/*
+ *
+ * Copyright (c) 2004
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE c_regex_traits.hpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: Declares regular expression traits class that wraps the global C locale.
+ */
+
+#ifndef BOOST_C_REGEX_TRAITS_HPP_INCLUDED
+#define BOOST_C_REGEX_TRAITS_HPP_INCLUDED
+
+#ifndef BOOST_REGEX_CONFIG_HPP
+#include <boost/regex/config.hpp>
+#endif
+#ifndef BOOST_REGEX_WORKAROUND_HPP
+#include <boost/regex/v4/regex_workaround.hpp>
+#endif
+
+#include <cctype>
+
+#ifdef BOOST_NO_STDC_NAMESPACE
+namespace std{
+ using ::strlen; using ::tolower;
+}
+#endif
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+namespace boost{
+
+template <class charT>
+struct c_regex_traits;
+
+template<>
+struct BOOST_REGEX_DECL c_regex_traits<char>
+{
+ c_regex_traits(){}
+ typedef char char_type;
+ typedef std::size_t size_type;
+ typedef std::string string_type;
+ struct locale_type{};
+ typedef boost::uint32_t char_class_type;
+
+ static size_type length(const char_type* p)
+ {
+ return (std::strlen)(p);
+ }
+
+ char translate(char c) const
+ {
+ return c;
+ }
+ char translate_nocase(char c) const
+ {
+ return static_cast<char>((std::tolower)(static_cast<unsigned char>(c)));
+ }
+
+ static string_type BOOST_REGEX_CALL transform(const char* p1, const char* p2);
+ static string_type BOOST_REGEX_CALL transform_primary(const char* p1, const char* p2);
+
+ static char_class_type BOOST_REGEX_CALL lookup_classname(const char* p1, const char* p2);
+ static string_type BOOST_REGEX_CALL lookup_collatename(const char* p1, const char* p2);
+
+ static bool BOOST_REGEX_CALL isctype(char, char_class_type);
+ static int BOOST_REGEX_CALL value(char, int);
+
+ locale_type imbue(locale_type l)
+ { return l; }
+ locale_type getloc()const
+ { return locale_type(); }
+
+private:
+ // this type is not copyable:
+ c_regex_traits(const c_regex_traits&);
+ c_regex_traits& operator=(const c_regex_traits&);
+};
+
+#ifndef BOOST_NO_WREGEX
+template<>
+struct BOOST_REGEX_DECL c_regex_traits<wchar_t>
+{
+ c_regex_traits(){}
+ typedef wchar_t char_type;
+ typedef std::size_t size_type;
+ typedef std::wstring string_type;
+ struct locale_type{};
+ typedef boost::uint32_t char_class_type;
+
+ static size_type length(const char_type* p)
+ {
+ return (std::wcslen)(p);
+ }
+
+ wchar_t translate(wchar_t c) const
+ {
+ return c;
+ }
+ wchar_t translate_nocase(wchar_t c) const
+ {
+ return (std::towlower)(c);
+ }
+
+ static string_type BOOST_REGEX_CALL transform(const wchar_t* p1, const wchar_t* p2);
+ static string_type BOOST_REGEX_CALL transform_primary(const wchar_t* p1, const wchar_t* p2);
+
+ static char_class_type BOOST_REGEX_CALL lookup_classname(const wchar_t* p1, const wchar_t* p2);
+ static string_type BOOST_REGEX_CALL lookup_collatename(const wchar_t* p1, const wchar_t* p2);
+
+ static bool BOOST_REGEX_CALL isctype(wchar_t, char_class_type);
+ static int BOOST_REGEX_CALL value(wchar_t, int);
+
+ locale_type imbue(locale_type l)
+ { return l; }
+ locale_type getloc()const
+ { return locale_type(); }
+
+private:
+ // this type is not copyable:
+ c_regex_traits(const c_regex_traits&);
+ c_regex_traits& operator=(const c_regex_traits&);
+};
+
+#ifdef BOOST_REGEX_HAS_OTHER_WCHAR_T
+//
+// Provide an unsigned short version as well, so the user can link to this
+// no matter whether they build with /Zc:wchar_t or not (MSVC specific).
+//
+template<>
+struct BOOST_REGEX_DECL c_regex_traits<unsigned short>
+{
+ c_regex_traits(){}
+ typedef unsigned short char_type;
+ typedef std::size_t size_type;
+ typedef std::basic_string<unsigned short> string_type;
+ struct locale_type{};
+ typedef boost::uint32_t char_class_type;
+
+ static size_type length(const char_type* p)
+ {
+ return (std::wcslen)((const wchar_t*)p);
+ }
+
+ unsigned short translate(unsigned short c) const
+ {
+ return c;
+ }
+ unsigned short translate_nocase(unsigned short c) const
+ {
+ return (std::towlower)((wchar_t)c);
+ }
+
+ static string_type BOOST_REGEX_CALL transform(const unsigned short* p1, const unsigned short* p2);
+ static string_type BOOST_REGEX_CALL transform_primary(const unsigned short* p1, const unsigned short* p2);
+
+ static char_class_type BOOST_REGEX_CALL lookup_classname(const unsigned short* p1, const unsigned short* p2);
+ static string_type BOOST_REGEX_CALL lookup_collatename(const unsigned short* p1, const unsigned short* p2);
+
+ static bool BOOST_REGEX_CALL isctype(unsigned short, char_class_type);
+ static int BOOST_REGEX_CALL value(unsigned short, int);
+
+ locale_type imbue(locale_type l)
+ { return l; }
+ locale_type getloc()const
+ { return locale_type(); }
+
+private:
+ // this type is not copyable:
+ c_regex_traits(const c_regex_traits&);
+ c_regex_traits& operator=(const c_regex_traits&);
+};
+
+#endif
+
+#endif // BOOST_NO_WREGEX
+
+}
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif
+
+
+
diff --git a/boost/boost/regex/v4/char_regex_traits.hpp b/boost/boost/regex/v4/char_regex_traits.hpp
new file mode 100644
index 00000000000..f00e65eb237
--- /dev/null
+++ b/boost/boost/regex/v4/char_regex_traits.hpp
@@ -0,0 +1,67 @@
+/*
+ *
+ * Copyright (c) 2002
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE char_regex_traits.cpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: Declares deprecated traits classes char_regex_traits<>.
+ */
+
+
+#ifndef BOOST_REGEX_V4_CHAR_REGEX_TRAITS_HPP
+#define BOOST_REGEX_V4_CHAR_REGEX_TRAITS_HPP
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+namespace boost{
+
+namespace deprecated{
+//
+// class char_regex_traits_i
+// provides case insensitive traits classes (deprecated):
+template <class charT>
+class char_regex_traits_i : public regex_traits<charT> {};
+
+template<>
+class char_regex_traits_i<char> : public regex_traits<char>
+{
+public:
+ typedef char char_type;
+ typedef unsigned char uchar_type;
+ typedef unsigned int size_type;
+ typedef regex_traits<char> base_type;
+
+};
+
+#ifndef BOOST_NO_WREGEX
+template<>
+class char_regex_traits_i<wchar_t> : public regex_traits<wchar_t>
+{
+public:
+ typedef wchar_t char_type;
+ typedef unsigned short uchar_type;
+ typedef unsigned int size_type;
+ typedef regex_traits<wchar_t> base_type;
+
+};
+#endif
+} // namespace deprecated
+} // namespace boost
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif // include
+
diff --git a/boost/boost/regex/v4/cpp_regex_traits.hpp b/boost/boost/regex/v4/cpp_regex_traits.hpp
new file mode 100644
index 00000000000..bbe5c5085ef
--- /dev/null
+++ b/boost/boost/regex/v4/cpp_regex_traits.hpp
@@ -0,0 +1,1041 @@
+/*
+ *
+ * Copyright (c) 2004
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE cpp_regex_traits.hpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: Declares regular expression traits class cpp_regex_traits.
+ */
+
+#ifndef BOOST_CPP_REGEX_TRAITS_HPP_INCLUDED
+#define BOOST_CPP_REGEX_TRAITS_HPP_INCLUDED
+
+#include <boost/config.hpp>
+
+#ifndef BOOST_NO_STD_LOCALE
+
+#ifndef BOOST_RE_PAT_EXCEPT_HPP
+#include <boost/regex/pattern_except.hpp>
+#endif
+#ifndef BOOST_REGEX_TRAITS_DEFAULTS_HPP_INCLUDED
+#include <boost/regex/v4/regex_traits_defaults.hpp>
+#endif
+#ifdef BOOST_HAS_THREADS
+#include <boost/regex/pending/static_mutex.hpp>
+#endif
+#ifndef BOOST_REGEX_PRIMARY_TRANSFORM
+#include <boost/regex/v4/primary_transform.hpp>
+#endif
+#ifndef BOOST_REGEX_OBJECT_CACHE_HPP
+#include <boost/regex/pending/object_cache.hpp>
+#endif
+
+#include <istream>
+#include <ios>
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable:4786)
+#endif
+
+namespace boost{
+
+//
+// forward declaration is needed by some compilers:
+//
+template <class charT>
+class cpp_regex_traits;
+
+namespace re_detail{
+
+//
+// class parser_buf:
+// acts as a stream buffer which wraps around a pair of pointers:
+//
+template <class charT,
+ class traits = ::std::char_traits<charT> >
+class parser_buf : public ::std::basic_streambuf<charT, traits>
+{
+ typedef ::std::basic_streambuf<charT, traits> base_type;
+ typedef typename base_type::int_type int_type;
+ typedef typename base_type::char_type char_type;
+ typedef typename base_type::pos_type pos_type;
+ typedef ::std::streamsize streamsize;
+ typedef typename base_type::off_type off_type;
+public:
+ parser_buf() : base_type() { setbuf(0, 0); }
+ const charT* getnext() { return this->gptr(); }
+protected:
+ std::basic_streambuf<charT, traits>* setbuf(char_type* s, streamsize n);
+ typename parser_buf<charT, traits>::pos_type seekpos(pos_type sp, ::std::ios_base::openmode which);
+ typename parser_buf<charT, traits>::pos_type seekoff(off_type off, ::std::ios_base::seekdir way, ::std::ios_base::openmode which);
+private:
+ parser_buf& operator=(const parser_buf&);
+ parser_buf(const parser_buf&);
+};
+
+template<class charT, class traits>
+std::basic_streambuf<charT, traits>*
+parser_buf<charT, traits>::setbuf(char_type* s, streamsize n)
+{
+ this->setg(s, s, s + n);
+ return this;
+}
+
+template<class charT, class traits>
+typename parser_buf<charT, traits>::pos_type
+parser_buf<charT, traits>::seekoff(off_type off, ::std::ios_base::seekdir way, ::std::ios_base::openmode which)
+{
+ if(which & ::std::ios_base::out)
+ return pos_type(off_type(-1));
+ std::ptrdiff_t size = this->egptr() - this->eback();
+ std::ptrdiff_t pos = this->gptr() - this->eback();
+ charT* g = this->eback();
+ switch(way)
+ {
+ case ::std::ios_base::beg:
+ if((off < 0) || (off > size))
+ return pos_type(off_type(-1));
+ else
+ this->setg(g, g + off, g + size);
+ break;
+ case ::std::ios_base::end:
+ if((off < 0) || (off > size))
+ return pos_type(off_type(-1));
+ else
+ this->setg(g, g + size - off, g + size);
+ break;
+ case ::std::ios_base::cur:
+ {
+ std::ptrdiff_t newpos = pos + off;
+ if((newpos < 0) || (newpos > size))
+ return pos_type(off_type(-1));
+ else
+ this->setg(g, g + newpos, g + size);
+ break;
+ }
+ default: ;
+ }
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable:4244)
+#endif
+ return static_cast<pos_type>(this->gptr() - this->eback());
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+}
+
+template<class charT, class traits>
+typename parser_buf<charT, traits>::pos_type
+parser_buf<charT, traits>::seekpos(pos_type sp, ::std::ios_base::openmode which)
+{
+ if(which & ::std::ios_base::out)
+ return pos_type(off_type(-1));
+ off_type size = static_cast<off_type>(this->egptr() - this->eback());
+ charT* g = this->eback();
+ if(off_type(sp) <= size)
+ {
+ this->setg(g, g + off_type(sp), g + size);
+ }
+ return pos_type(off_type(-1));
+}
+
+//
+// class cpp_regex_traits_base:
+// acts as a container for locale and the facets we are using.
+//
+template <class charT>
+struct cpp_regex_traits_base
+{
+ cpp_regex_traits_base(const std::locale& l)
+ { imbue(l); }
+ std::locale imbue(const std::locale& l);
+
+ std::locale m_locale;
+ std::ctype<charT> const* m_pctype;
+#ifndef BOOST_NO_STD_MESSAGES
+ std::messages<charT> const* m_pmessages;
+#endif
+ std::collate<charT> const* m_pcollate;
+
+ bool operator<(const cpp_regex_traits_base& b)const
+ {
+ if(m_pctype == b.m_pctype)
+ {
+#ifndef BOOST_NO_STD_MESSAGES
+ if(m_pmessages == b.m_pmessages)
+ {
+ }
+ return m_pmessages < b.m_pmessages;
+#else
+ return m_pcollate < b.m_pcollate;
+#endif
+ }
+ return m_pctype < b.m_pctype;
+ }
+ bool operator==(const cpp_regex_traits_base& b)const
+ {
+ return (m_pctype == b.m_pctype)
+#ifndef BOOST_NO_STD_MESSAGES
+ && (m_pmessages == b.m_pmessages)
+#endif
+ && (m_pcollate == b.m_pcollate);
+ }
+};
+
+template <class charT>
+std::locale cpp_regex_traits_base<charT>::imbue(const std::locale& l)
+{
+ std::locale result(m_locale);
+ m_locale = l;
+ m_pctype = &BOOST_USE_FACET(std::ctype<charT>, l);
+#ifndef BOOST_NO_STD_MESSAGES
+ m_pmessages = &BOOST_USE_FACET(std::messages<charT>, l);
+#endif
+ m_pcollate = &BOOST_USE_FACET(std::collate<charT>, l);
+ return result;
+}
+
+//
+// class cpp_regex_traits_char_layer:
+// implements methods that require specialisation for narrow characters:
+//
+template <class charT>
+class cpp_regex_traits_char_layer : public cpp_regex_traits_base<charT>
+{
+ typedef std::basic_string<charT> string_type;
+ typedef std::map<charT, regex_constants::syntax_type> map_type;
+ typedef typename map_type::const_iterator map_iterator_type;
+public:
+ cpp_regex_traits_char_layer(const std::locale& l)
+ : cpp_regex_traits_base<charT>(l)
+ {
+ init();
+ }
+ cpp_regex_traits_char_layer(const cpp_regex_traits_base<charT>& b)
+ : cpp_regex_traits_base<charT>(b)
+ {
+ init();
+ }
+ void init();
+
+ regex_constants::syntax_type syntax_type(charT c)const
+ {
+ map_iterator_type i = m_char_map.find(c);
+ return ((i == m_char_map.end()) ? 0 : i->second);
+ }
+ regex_constants::escape_syntax_type escape_syntax_type(charT c) const
+ {
+ map_iterator_type i = m_char_map.find(c);
+ if(i == m_char_map.end())
+ {
+ if(this->m_pctype->is(std::ctype_base::lower, c)) return regex_constants::escape_type_class;
+ if(this->m_pctype->is(std::ctype_base::upper, c)) return regex_constants::escape_type_not_class;
+ return 0;
+ }
+ return i->second;
+ }
+
+private:
+ string_type get_default_message(regex_constants::syntax_type);
+ // TODO: use a hash table when available!
+ map_type m_char_map;
+};
+
+template <class charT>
+void cpp_regex_traits_char_layer<charT>::init()
+{
+ // we need to start by initialising our syntax map so we know which
+ // character is used for which purpose:
+#ifndef BOOST_NO_STD_MESSAGES
+#ifndef __IBMCPP__
+ typename std::messages<charT>::catalog cat = static_cast<std::messages<char>::catalog>(-1);
+#else
+ typename std::messages<charT>::catalog cat = reinterpret_cast<std::messages<char>::catalog>(-1);
+#endif
+ std::string cat_name(cpp_regex_traits<charT>::get_catalog_name());
+ if(cat_name.size())
+ {
+ cat = this->m_pmessages->open(
+ cat_name,
+ this->m_locale);
+ if((int)cat < 0)
+ {
+ std::string m("Unable to open message catalog: ");
+ std::runtime_error err(m + cat_name);
+ boost::re_detail::raise_runtime_error(err);
+ }
+ }
+ //
+ // if we have a valid catalog then load our messages:
+ //
+ if((int)cat >= 0)
+ {
+ try{
+ for(regex_constants::syntax_type i = 1; i < regex_constants::syntax_max; ++i)
+ {
+ string_type mss = this->m_pmessages->get(cat, 0, i, get_default_message(i));
+ for(typename string_type::size_type j = 0; j < mss.size(); ++j)
+ {
+ m_char_map[mss[j]] = i;
+ }
+ }
+ this->m_pmessages->close(cat);
+ }
+ catch(...)
+ {
+ this->m_pmessages->close(cat);
+ throw;
+ }
+ }
+ else
+ {
+#endif
+ for(regex_constants::syntax_type i = 1; i < regex_constants::syntax_max; ++i)
+ {
+ const char* ptr = get_default_syntax(i);
+ while(ptr && *ptr)
+ {
+ m_char_map[this->m_pctype->widen(*ptr)] = i;
+ ++ptr;
+ }
+ }
+#ifndef BOOST_NO_STD_MESSAGES
+ }
+#endif
+}
+
+template <class charT>
+typename cpp_regex_traits_char_layer<charT>::string_type
+ cpp_regex_traits_char_layer<charT>::get_default_message(regex_constants::syntax_type i)
+{
+ const char* ptr = get_default_syntax(i);
+ string_type result;
+ while(ptr && *ptr)
+ {
+ result.append(1, this->m_pctype->widen(*ptr));
+ ++ptr;
+ }
+ return result;
+}
+
+//
+// specialised version for narrow characters:
+//
+template <>
+class BOOST_REGEX_DECL cpp_regex_traits_char_layer<char> : public cpp_regex_traits_base<char>
+{
+ typedef std::string string_type;
+public:
+ cpp_regex_traits_char_layer(const std::locale& l)
+ : cpp_regex_traits_base<char>(l)
+ {
+ init();
+ }
+ cpp_regex_traits_char_layer(const cpp_regex_traits_base<char>& l)
+ : cpp_regex_traits_base<char>(l)
+ {
+ init();
+ }
+
+ regex_constants::syntax_type syntax_type(char c)const
+ {
+ return m_char_map[static_cast<unsigned char>(c)];
+ }
+ regex_constants::escape_syntax_type escape_syntax_type(char c) const
+ {
+ return m_char_map[static_cast<unsigned char>(c)];
+ }
+
+private:
+ regex_constants::syntax_type m_char_map[1u << CHAR_BIT];
+ void init();
+};
+
+#ifdef BOOST_REGEX_BUGGY_CTYPE_FACET
+enum
+{
+ char_class_space=1<<0,
+ char_class_print=1<<1,
+ char_class_cntrl=1<<2,
+ char_class_upper=1<<3,
+ char_class_lower=1<<4,
+ char_class_alpha=1<<5,
+ char_class_digit=1<<6,
+ char_class_punct=1<<7,
+ char_class_xdigit=1<<8,
+ char_class_alnum=char_class_alpha|char_class_digit,
+ char_class_graph=char_class_alnum|char_class_punct,
+ char_class_blank=1<<9,
+ char_class_word=1<<10,
+ char_class_unicode=1<<11
+};
+
+#endif
+
+//
+// class cpp_regex_traits_implementation:
+// provides pimpl implementation for cpp_regex_traits.
+//
+template <class charT>
+class cpp_regex_traits_implementation : public cpp_regex_traits_char_layer<charT>
+{
+public:
+ typedef typename cpp_regex_traits<charT>::char_class_type char_class_type;
+ typedef typename std::ctype<charT>::mask native_mask_type;
+#ifndef BOOST_REGEX_BUGGY_CTYPE_FACET
+ BOOST_STATIC_CONSTANT(char_class_type, mask_blank = 1u << 24);
+ BOOST_STATIC_CONSTANT(char_class_type, mask_word = 1u << 25);
+ BOOST_STATIC_CONSTANT(char_class_type, mask_unicode = 1u << 26);
+#endif
+
+ typedef std::basic_string<charT> string_type;
+ typedef charT char_type;
+ //cpp_regex_traits_implementation();
+ cpp_regex_traits_implementation(const std::locale& l)
+ : cpp_regex_traits_char_layer<charT>(l)
+ {
+ init();
+ }
+ cpp_regex_traits_implementation(const cpp_regex_traits_base<charT>& l)
+ : cpp_regex_traits_char_layer<charT>(l)
+ {
+ init();
+ }
+ std::string error_string(regex_constants::error_type n) const
+ {
+ if(!m_error_strings.empty())
+ {
+ std::map<int, std::string>::const_iterator p = m_error_strings.find(n);
+ return (p == m_error_strings.end()) ? std::string(get_default_error_string(n)) : p->second;
+ }
+ return get_default_error_string(n);
+ }
+ char_class_type lookup_classname(const charT* p1, const charT* p2) const
+ {
+ char_class_type result = lookup_classname_imp(p1, p2);
+ if(result == 0)
+ {
+ string_type temp(p1, p2);
+ this->m_pctype->tolower(&*temp.begin(), &*temp.begin() + temp.size());
+ result = lookup_classname_imp(&*temp.begin(), &*temp.begin() + temp.size());
+ }
+ return result;
+ }
+ string_type lookup_collatename(const charT* p1, const charT* p2) const;
+ string_type transform_primary(const charT* p1, const charT* p2) const;
+ string_type transform(const charT* p1, const charT* p2) const;
+private:
+ std::map<int, std::string> m_error_strings; // error messages indexed by numberic ID
+ std::map<string_type, char_class_type> m_custom_class_names; // character class names
+ std::map<string_type, string_type> m_custom_collate_names; // collating element names
+ unsigned m_collate_type; // the form of the collation string
+ charT m_collate_delim; // the collation group delimiter
+ //
+ // helpers:
+ //
+ char_class_type lookup_classname_imp(const charT* p1, const charT* p2) const;
+ void init();
+#ifdef BOOST_REGEX_BUGGY_CTYPE_FACET
+public:
+ bool isctype(charT c, char_class_type m)const;
+#endif
+};
+
+#ifndef BOOST_REGEX_BUGGY_CTYPE_FACET
+#if !defined(BOOST_NO_INCLASS_MEMBER_INITIALIZATION)
+
+template <class charT>
+typename cpp_regex_traits_implementation<charT>::char_class_type const cpp_regex_traits_implementation<charT>::mask_blank;
+template <class charT>
+typename cpp_regex_traits_implementation<charT>::char_class_type const cpp_regex_traits_implementation<charT>::mask_word;
+template <class charT>
+typename cpp_regex_traits_implementation<charT>::char_class_type const cpp_regex_traits_implementation<charT>::mask_unicode;
+
+#endif
+#endif
+
+template <class charT>
+typename cpp_regex_traits_implementation<charT>::string_type
+ cpp_regex_traits_implementation<charT>::transform_primary(const charT* p1, const charT* p2) const
+{
+ //
+ // PRECONDITIONS:
+ //
+ // A bug in gcc 3.2 (and maybe other versions as well) treats
+ // p1 as a null terminated string, for efficiency reasons
+ // we work around this elsewhere, but just assert here that
+ // we adhere to gcc's (buggy) preconditions...
+ //
+ BOOST_ASSERT(*p2 == 0);
+
+ string_type result;
+ //
+ // swallowing all exceptions here is a bad idea
+ // however at least one std lib will always throw
+ // std::bad_alloc for certain arguments...
+ //
+ try{
+ //
+ // What we do here depends upon the format of the sort key returned by
+ // sort key returned by this->transform:
+ //
+ switch(m_collate_type)
+ {
+ case sort_C:
+ case sort_unknown:
+ // the best we can do is translate to lower case, then get a regular sort key:
+ {
+ result.assign(p1, p2);
+ this->m_pctype->tolower(&*result.begin(), &*result.begin() + result.size());
+ result = this->m_pcollate->transform(&*result.begin(), &*result.begin() + result.size());
+ break;
+ }
+ case sort_fixed:
+ {
+ // get a regular sort key, and then truncate it:
+ result.assign(this->m_pcollate->transform(p1, p2));
+ result.erase(this->m_collate_delim);
+ break;
+ }
+ case sort_delim:
+ // get a regular sort key, and then truncate everything after the delim:
+ result.assign(this->m_pcollate->transform(p1, p2));
+ std::size_t i;
+ for(i = 0; i < result.size(); ++i)
+ {
+ if(result[i] == m_collate_delim)
+ break;
+ }
+ result.erase(i);
+ break;
+ }
+ }catch(...){}
+ while(result.size() && (charT(0) == *result.rbegin()))
+ result.erase(result.size() - 1);
+ if(result.empty())
+ {
+ // character is ignorable at the primary level:
+ result = string_type(1, charT(0));
+ }
+ return result;
+}
+
+template <class charT>
+typename cpp_regex_traits_implementation<charT>::string_type
+ cpp_regex_traits_implementation<charT>::transform(const charT* p1, const charT* p2) const
+{
+ //
+ // PRECONDITIONS:
+ //
+ // A bug in gcc 3.2 (and maybe other versions as well) treats
+ // p1 as a null terminated string, for efficiency reasons
+ // we work around this elsewhere, but just assert here that
+ // we adhere to gcc's (buggy) preconditions...
+ //
+ BOOST_ASSERT(*p2 == 0);
+ //
+ // swallowing all exceptions here is a bad idea
+ // however at least one std lib will always throw
+ // std::bad_alloc for certain arguments...
+ //
+ string_type result;
+ try{
+ result = this->m_pcollate->transform(p1, p2);
+ //
+ // Borland's STLPort version returns a NULL-terminated
+ // string that has garbage at the end - each call to
+ // std::collate<wchar_t>::transform returns a different string!
+ // So as a workaround, we'll truncate the string at the first NULL
+ // which _seems_ to work....
+#if BOOST_WORKAROUND(__BORLANDC__, < 0x580)
+ result.erase(result.find(charT(0)));
+#else
+ //
+ // some implementations (Dinkumware) append unnecessary trailing \0's:
+ while(result.size() && (charT(0) == *result.rbegin()))
+ result.erase(result.size() - 1);
+#endif
+ BOOST_ASSERT(std::find(result.begin(), result.end(), charT(0)) == result.end());
+ }
+ catch(...)
+ {
+ }
+ return result;
+}
+
+
+template <class charT>
+typename cpp_regex_traits_implementation<charT>::string_type
+ cpp_regex_traits_implementation<charT>::lookup_collatename(const charT* p1, const charT* p2) const
+{
+ typedef typename std::map<string_type, string_type>::const_iterator iter_type;
+ if(m_custom_collate_names.size())
+ {
+ iter_type pos = m_custom_collate_names.find(string_type(p1, p2));
+ if(pos != m_custom_collate_names.end())
+ return pos->second;
+ }
+#if !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS)\
+ && !BOOST_WORKAROUND(BOOST_MSVC, < 1300)\
+ && !BOOST_WORKAROUND(__BORLANDC__, <= 0x0551)
+ std::string name(p1, p2);
+#else
+ std::string name;
+ const charT* p0 = p1;
+ while(p0 != p2)
+ name.append(1, char(*p0++));
+#endif
+ name = lookup_default_collate_name(name);
+#if !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS)\
+ && !BOOST_WORKAROUND(BOOST_MSVC, < 1300)\
+ && !BOOST_WORKAROUND(__BORLANDC__, <= 0x0551)
+ if(name.size())
+ return string_type(name.begin(), name.end());
+#else
+ if(name.size())
+ {
+ string_type result;
+ typedef std::string::const_iterator iter;
+ iter b = name.begin();
+ iter e = name.end();
+ while(b != e)
+ result.append(1, charT(*b++));
+ return result;
+ }
+#endif
+ if(p2 - p1 == 1)
+ return string_type(1, *p1);
+ return string_type();
+}
+
+template <class charT>
+void cpp_regex_traits_implementation<charT>::init()
+{
+#ifndef BOOST_NO_STD_MESSAGES
+#ifndef __IBMCPP__
+ typename std::messages<charT>::catalog cat = static_cast<std::messages<char>::catalog>(-1);
+#else
+ typename std::messages<charT>::catalog cat = reinterpret_cast<std::messages<char>::catalog>(-1);
+#endif
+ std::string cat_name(cpp_regex_traits<charT>::get_catalog_name());
+ if(cat_name.size())
+ {
+ cat = this->m_pmessages->open(
+ cat_name,
+ this->m_locale);
+ if((int)cat < 0)
+ {
+ std::string m("Unable to open message catalog: ");
+ std::runtime_error err(m + cat_name);
+ boost::re_detail::raise_runtime_error(err);
+ }
+ }
+ //
+ // if we have a valid catalog then load our messages:
+ //
+ if((int)cat >= 0)
+ {
+ //
+ // Error messages:
+ //
+ for(boost::regex_constants::error_type i = static_cast<boost::regex_constants::error_type>(0);
+ i <= boost::regex_constants::error_unknown;
+ i = static_cast<boost::regex_constants::error_type>(i + 1))
+ {
+ const char* p = get_default_error_string(i);
+ string_type default_message;
+ while(*p)
+ {
+ default_message.append(1, this->m_pctype->widen(*p));
+ ++p;
+ }
+ string_type s = this->m_pmessages->get(cat, 0, i+200, default_message);
+ std::string result;
+ for(std::string::size_type j = 0; j < s.size(); ++j)
+ {
+ result.append(1, this->m_pctype->narrow(s[j], 0));
+ }
+ m_error_strings[i] = result;
+ }
+ //
+ // Custom class names:
+ //
+#ifndef BOOST_REGEX_BUGGY_CTYPE_FACET
+ static const char_class_type masks[14] =
+ {
+ std::ctype<charT>::alnum,
+ std::ctype<charT>::alpha,
+ std::ctype<charT>::cntrl,
+ std::ctype<charT>::digit,
+ std::ctype<charT>::graph,
+ std::ctype<charT>::lower,
+ std::ctype<charT>::print,
+ std::ctype<charT>::punct,
+ std::ctype<charT>::space,
+ std::ctype<charT>::upper,
+ std::ctype<charT>::xdigit,
+ cpp_regex_traits_implementation<charT>::mask_blank,
+ cpp_regex_traits_implementation<charT>::mask_word,
+ cpp_regex_traits_implementation<charT>::mask_unicode,
+ };
+#else
+ static const char_class_type masks[14] =
+ {
+ ::boost::re_detail::char_class_alnum,
+ ::boost::re_detail::char_class_alpha,
+ ::boost::re_detail::char_class_cntrl,
+ ::boost::re_detail::char_class_digit,
+ ::boost::re_detail::char_class_graph,
+ ::boost::re_detail::char_class_lower,
+ ::boost::re_detail::char_class_print,
+ ::boost::re_detail::char_class_punct,
+ ::boost::re_detail::char_class_space,
+ ::boost::re_detail::char_class_upper,
+ ::boost::re_detail::char_class_xdigit,
+ ::boost::re_detail::char_class_blank,
+ ::boost::re_detail::char_class_word,
+ ::boost::re_detail::char_class_unicode,
+ };
+#endif
+ static const string_type null_string;
+ for(unsigned int j = 0; j <= 13; ++j)
+ {
+ string_type s(this->m_pmessages->get(cat, 0, j+300, null_string));
+ if(s.size())
+ this->m_custom_class_names[s] = masks[j];
+ }
+ }
+#endif
+ //
+ // get the collation format used by m_pcollate:
+ //
+ m_collate_type = re_detail::find_sort_syntax(this, &m_collate_delim);
+}
+
+template <class charT>
+typename cpp_regex_traits_implementation<charT>::char_class_type
+ cpp_regex_traits_implementation<charT>::lookup_classname_imp(const charT* p1, const charT* p2) const
+{
+#ifndef BOOST_REGEX_BUGGY_CTYPE_FACET
+ static const char_class_type masks[20] =
+ {
+ 0,
+ std::ctype<char>::alnum,
+ std::ctype<char>::alpha,
+ cpp_regex_traits_implementation<charT>::mask_blank,
+ std::ctype<char>::cntrl,
+ std::ctype<char>::digit,
+ std::ctype<char>::digit,
+ std::ctype<char>::graph,
+ std::ctype<char>::lower,
+ std::ctype<char>::lower,
+ std::ctype<char>::print,
+ std::ctype<char>::punct,
+ std::ctype<char>::space,
+ std::ctype<char>::space,
+ std::ctype<char>::upper,
+ cpp_regex_traits_implementation<charT>::mask_unicode,
+ std::ctype<char>::upper,
+ std::ctype<char>::alnum | cpp_regex_traits_implementation<charT>::mask_word,
+ std::ctype<char>::alnum | cpp_regex_traits_implementation<charT>::mask_word,
+ std::ctype<char>::xdigit,
+ };
+#else
+ static const char_class_type masks[20] =
+ {
+ 0,
+ ::boost::re_detail::char_class_alnum,
+ ::boost::re_detail::char_class_alpha,
+ ::boost::re_detail::char_class_blank,
+ ::boost::re_detail::char_class_cntrl,
+ ::boost::re_detail::char_class_digit,
+ ::boost::re_detail::char_class_digit,
+ ::boost::re_detail::char_class_graph,
+ ::boost::re_detail::char_class_lower,
+ ::boost::re_detail::char_class_lower,
+ ::boost::re_detail::char_class_print,
+ ::boost::re_detail::char_class_punct,
+ ::boost::re_detail::char_class_space,
+ ::boost::re_detail::char_class_space,
+ ::boost::re_detail::char_class_upper,
+ ::boost::re_detail::char_class_unicode,
+ ::boost::re_detail::char_class_upper,
+ ::boost::re_detail::char_class_alnum | ::boost::re_detail::char_class_word,
+ ::boost::re_detail::char_class_alnum | ::boost::re_detail::char_class_word,
+ ::boost::re_detail::char_class_xdigit,
+ };
+#endif
+ if(m_custom_class_names.size())
+ {
+ typedef typename std::map<std::basic_string<charT>, char_class_type>::const_iterator map_iter;
+ map_iter pos = m_custom_class_names.find(string_type(p1, p2));
+ if(pos != m_custom_class_names.end())
+ return pos->second;
+ }
+ std::size_t id = 1 + re_detail::get_default_class_id(p1, p2);
+ BOOST_ASSERT(id < sizeof(masks) / sizeof(masks[0]));
+ return masks[id];
+}
+
+#ifdef BOOST_REGEX_BUGGY_CTYPE_FACET
+template <class charT>
+bool cpp_regex_traits_implementation<charT>::isctype(const charT c, char_class_type mask) const
+{
+ return
+ ((mask & ::boost::re_detail::char_class_space) && (m_pctype->is(std::ctype<charT>::space, c)))
+ || ((mask & ::boost::re_detail::char_class_print) && (m_pctype->is(std::ctype<charT>::print, c)))
+ || ((mask & ::boost::re_detail::char_class_cntrl) && (m_pctype->is(std::ctype<charT>::cntrl, c)))
+ || ((mask & ::boost::re_detail::char_class_upper) && (m_pctype->is(std::ctype<charT>::upper, c)))
+ || ((mask & ::boost::re_detail::char_class_lower) && (m_pctype->is(std::ctype<charT>::lower, c)))
+ || ((mask & ::boost::re_detail::char_class_alpha) && (m_pctype->is(std::ctype<charT>::alpha, c)))
+ || ((mask & ::boost::re_detail::char_class_digit) && (m_pctype->is(std::ctype<charT>::digit, c)))
+ || ((mask & ::boost::re_detail::char_class_punct) && (m_pctype->is(std::ctype<charT>::punct, c)))
+ || ((mask & ::boost::re_detail::char_class_xdigit) && (m_pctype->is(std::ctype<charT>::xdigit, c)))
+ || ((mask & ::boost::re_detail::char_class_blank) && (m_pctype->is(std::ctype<charT>::space, c)) && !::boost::re_detail::is_separator(c))
+ || ((mask & ::boost::re_detail::char_class_word) && (c == '_'))
+ || ((mask & ::boost::re_detail::char_class_unicode) && ::boost::re_detail::is_extended(c));
+}
+#endif
+
+
+template <class charT>
+inline boost::shared_ptr<const cpp_regex_traits_implementation<charT> > create_cpp_regex_traits(const std::locale& l BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(charT))
+{
+ cpp_regex_traits_base<charT> key(l);
+ return ::boost::object_cache<cpp_regex_traits_base<charT>, cpp_regex_traits_implementation<charT> >::get(key, 5);
+}
+
+} // re_detail
+
+template <class charT>
+class cpp_regex_traits
+{
+private:
+ typedef std::ctype<charT> ctype_type;
+public:
+ typedef charT char_type;
+ typedef std::size_t size_type;
+ typedef std::basic_string<char_type> string_type;
+ typedef std::locale locale_type;
+ typedef boost::uint_least32_t char_class_type;
+
+ struct boost_extensions_tag{};
+
+ cpp_regex_traits()
+ : m_pimpl(re_detail::create_cpp_regex_traits<charT>(std::locale()))
+ { }
+ static size_type length(const char_type* p)
+ {
+ return std::char_traits<charT>::length(p);
+ }
+ regex_constants::syntax_type syntax_type(charT c)const
+ {
+ return m_pimpl->syntax_type(c);
+ }
+ regex_constants::escape_syntax_type escape_syntax_type(charT c) const
+ {
+ return m_pimpl->escape_syntax_type(c);
+ }
+ charT translate(charT c) const
+ {
+ return c;
+ }
+ charT translate_nocase(charT c) const
+ {
+ return m_pimpl->m_pctype->tolower(c);
+ }
+ charT translate(charT c, bool icase) const
+ {
+ return icase ? m_pimpl->m_pctype->tolower(c) : c;
+ }
+ charT tolower(charT c) const
+ {
+ return m_pimpl->m_pctype->tolower(c);
+ }
+ charT toupper(charT c) const
+ {
+ return m_pimpl->m_pctype->toupper(c);
+ }
+ string_type transform(const charT* p1, const charT* p2) const
+ {
+ return m_pimpl->transform(p1, p2);
+ }
+ string_type transform_primary(const charT* p1, const charT* p2) const
+ {
+ return m_pimpl->transform_primary(p1, p2);
+ }
+ char_class_type lookup_classname(const charT* p1, const charT* p2) const
+ {
+ return m_pimpl->lookup_classname(p1, p2);
+ }
+ string_type lookup_collatename(const charT* p1, const charT* p2) const
+ {
+ return m_pimpl->lookup_collatename(p1, p2);
+ }
+ bool isctype(charT c, char_class_type f) const
+ {
+#ifndef BOOST_REGEX_BUGGY_CTYPE_FACET
+ typedef typename std::ctype<charT>::mask ctype_mask;
+
+ static const ctype_mask mask_base =
+ static_cast<ctype_mask>(
+ std::ctype<charT>::alnum
+ | std::ctype<charT>::alpha
+ | std::ctype<charT>::cntrl
+ | std::ctype<charT>::digit
+ | std::ctype<charT>::graph
+ | std::ctype<charT>::lower
+ | std::ctype<charT>::print
+ | std::ctype<charT>::punct
+ | std::ctype<charT>::space
+ | std::ctype<charT>::upper
+ | std::ctype<charT>::xdigit);
+
+ if((f & mask_base)
+ && (m_pimpl->m_pctype->is(
+ static_cast<ctype_mask>(f & mask_base), c)))
+ return true;
+ else if((f & re_detail::cpp_regex_traits_implementation<charT>::mask_unicode) && re_detail::is_extended(c))
+ return true;
+ else if((f & re_detail::cpp_regex_traits_implementation<charT>::mask_word) && (c == '_'))
+ return true;
+ else if((f & re_detail::cpp_regex_traits_implementation<charT>::mask_blank)
+ && m_pimpl->m_pctype->is(std::ctype<charT>::space, c)
+ && !re_detail::is_separator(c))
+ return true;
+ return false;
+#else
+ return m_pimpl->isctype(c, f);
+#endif
+ }
+ int toi(const charT*& p1, const charT* p2, int radix)const;
+ int value(charT c, int radix)const
+ {
+ const charT* pc = &c;
+ return toi(pc, pc + 1, radix);
+ }
+ locale_type imbue(locale_type l)
+ {
+ std::locale result(getloc());
+ m_pimpl = re_detail::create_cpp_regex_traits<charT>(l);
+ return result;
+ }
+ locale_type getloc()const
+ {
+ return m_pimpl->m_locale;
+ }
+ std::string error_string(regex_constants::error_type n) const
+ {
+ return m_pimpl->error_string(n);
+ }
+
+ //
+ // extension:
+ // set the name of the message catalog in use (defaults to "boost_regex").
+ //
+ static std::string catalog_name(const std::string& name);
+ static std::string get_catalog_name();
+
+private:
+ boost::shared_ptr<const re_detail::cpp_regex_traits_implementation<charT> > m_pimpl;
+ //
+ // catalog name handler:
+ //
+ static std::string& get_catalog_name_inst();
+
+#ifdef BOOST_HAS_THREADS
+ static static_mutex& get_mutex_inst();
+#endif
+};
+
+
+template <class charT>
+int cpp_regex_traits<charT>::toi(const charT*& first, const charT* last, int radix)const
+{
+ re_detail::parser_buf<charT> sbuf; // buffer for parsing numbers.
+ std::basic_istream<charT> is(&sbuf); // stream for parsing numbers.
+
+ // we do NOT want to parse any thousands separators inside the stream:
+ last = std::find(first, last, BOOST_USE_FACET(std::numpunct<charT>, is.getloc()).thousands_sep());
+
+ sbuf.pubsetbuf(const_cast<charT*>(static_cast<const charT*>(first)), static_cast<std::streamsize>(last-first));
+ is.clear();
+ if(std::abs(radix) == 16) is >> std::hex;
+ else if(std::abs(radix) == 8) is >> std::oct;
+ else is >> std::dec;
+ int val;
+ if(is >> val)
+ {
+ first = first + ((last - first) - sbuf.in_avail());
+ return val;
+ }
+ else
+ return -1;
+}
+
+template <class charT>
+std::string cpp_regex_traits<charT>::catalog_name(const std::string& name)
+{
+#ifdef BOOST_HAS_THREADS
+ static_mutex::scoped_lock lk(get_mutex_inst());
+#endif
+ std::string result(get_catalog_name_inst());
+ get_catalog_name_inst() = name;
+ return result;
+}
+
+template <class charT>
+std::string& cpp_regex_traits<charT>::get_catalog_name_inst()
+{
+ static std::string s_name;
+ return s_name;
+}
+
+template <class charT>
+std::string cpp_regex_traits<charT>::get_catalog_name()
+{
+#ifdef BOOST_HAS_THREADS
+ static_mutex::scoped_lock lk(get_mutex_inst());
+#endif
+ std::string result(get_catalog_name_inst());
+ return result;
+}
+
+#ifdef BOOST_HAS_THREADS
+template <class charT>
+static_mutex& cpp_regex_traits<charT>::get_mutex_inst()
+{
+ static static_mutex s_mutex = BOOST_STATIC_MUTEX_INIT;
+ return s_mutex;
+}
+#endif
+
+
+} // boost
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif
+
+#endif
diff --git a/boost/boost/regex/v4/cregex.hpp b/boost/boost/regex/v4/cregex.hpp
new file mode 100644
index 00000000000..17818ec5811
--- /dev/null
+++ b/boost/boost/regex/v4/cregex.hpp
@@ -0,0 +1,301 @@
+/*
+ *
+ * Copyright (c) 1998-2002
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE cregex.cpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: Declares POSIX API functions
+ * + boost::RegEx high level wrapper.
+ */
+
+#ifndef BOOST_RE_CREGEX_HPP_INCLUDED
+#define BOOST_RE_CREGEX_HPP_INCLUDED
+
+#ifndef BOOST_REGEX_CONFIG_HPP
+#include <boost/regex/config.hpp>
+#endif
+#include <boost/regex/v4/match_flags.hpp>
+#include <boost/regex/v4/error_type.hpp>
+
+#ifdef __cplusplus
+#include <cstddef>
+#else
+#include <stddef.h>
+#endif
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+/* include these defs only for POSIX compatablity */
+#ifdef __cplusplus
+namespace boost{
+extern "C" {
+#endif
+
+#if defined(__cplusplus) && !defined(BOOST_NO_STDC_NAMESPACE)
+typedef std::ptrdiff_t regoff_t;
+typedef std::size_t regsize_t;
+#else
+typedef ptrdiff_t regoff_t;
+typedef size_t regsize_t;
+#endif
+
+typedef struct
+{
+ unsigned int re_magic;
+#ifdef __cplusplus
+ std::size_t re_nsub; /* number of parenthesized subexpressions */
+#else
+ size_t re_nsub;
+#endif
+ const char* re_endp; /* end pointer for REG_PEND */
+ void* guts; /* none of your business :-) */
+ match_flag_type eflags; /* none of your business :-) */
+} regex_tA;
+
+#ifndef BOOST_NO_WREGEX
+typedef struct
+{
+ unsigned int re_magic;
+#ifdef __cplusplus
+ std::size_t re_nsub; /* number of parenthesized subexpressions */
+#else
+ size_t re_nsub;
+#endif
+ const wchar_t* re_endp; /* end pointer for REG_PEND */
+ void* guts; /* none of your business :-) */
+ match_flag_type eflags; /* none of your business :-) */
+} regex_tW;
+#endif
+
+typedef struct
+{
+ regoff_t rm_so; /* start of match */
+ regoff_t rm_eo; /* end of match */
+} regmatch_t;
+
+/* regcomp() flags */
+typedef enum{
+ REG_BASIC = 0000,
+ REG_EXTENDED = 0001,
+ REG_ICASE = 0002,
+ REG_NOSUB = 0004,
+ REG_NEWLINE = 0010,
+ REG_NOSPEC = 0020,
+ REG_PEND = 0040,
+ REG_DUMP = 0200,
+ REG_NOCOLLATE = 0400,
+ REG_ESCAPE_IN_LISTS = 01000,
+ REG_NEWLINE_ALT = 02000,
+ REG_PERLEX = 04000,
+
+ REG_PERL = REG_EXTENDED | REG_NOCOLLATE | REG_ESCAPE_IN_LISTS | REG_PERLEX,
+ REG_AWK = REG_EXTENDED | REG_ESCAPE_IN_LISTS,
+ REG_GREP = REG_BASIC | REG_NEWLINE_ALT,
+ REG_EGREP = REG_EXTENDED | REG_NEWLINE_ALT,
+
+ REG_ASSERT = 15,
+ REG_INVARG = 16,
+ REG_ATOI = 255, /* convert name to number (!) */
+ REG_ITOA = 0400 /* convert number to name (!) */
+} reg_comp_flags;
+
+/* regexec() flags */
+typedef enum{
+ REG_NOTBOL = 00001,
+ REG_NOTEOL = 00002,
+ REG_STARTEND = 00004
+} reg_exec_flags;
+
+//
+// POSIX error codes:
+//
+typedef unsigned reg_error_t;
+typedef reg_error_t reg_errcode_t; // backwards compatibility
+
+static const reg_error_t REG_NOERROR = 0; /* Success. */
+static const reg_error_t REG_NOMATCH = 1; /* Didn't find a match (for regexec). */
+
+ /* POSIX regcomp return error codes. (In the order listed in the
+ standard.) */
+static const reg_error_t REG_BADPAT = 2; /* Invalid pattern. */
+static const reg_error_t REG_ECOLLATE = 3; /* Undefined collating element. */
+static const reg_error_t REG_ECTYPE = 4; /* Invalid character class name. */
+static const reg_error_t REG_EESCAPE = 5; /* Trailing backslash. */
+static const reg_error_t REG_ESUBREG = 6; /* Invalid back reference. */
+static const reg_error_t REG_EBRACK = 7; /* Unmatched left bracket. */
+static const reg_error_t REG_EPAREN = 8; /* Parenthesis imbalance. */
+static const reg_error_t REG_EBRACE = 9; /* Unmatched \{. */
+static const reg_error_t REG_BADBR = 10; /* Invalid contents of \{\}. */
+static const reg_error_t REG_ERANGE = 11; /* Invalid range end. */
+static const reg_error_t REG_ESPACE = 12; /* Ran out of memory. */
+static const reg_error_t REG_BADRPT = 13; /* No preceding re for repetition op. */
+static const reg_error_t REG_EEND = 14; /* unexpected end of expression */
+static const reg_error_t REG_ESIZE = 15; /* expression too big */
+static const reg_error_t REG_ERPAREN = 8; /* = REG_EPAREN : unmatched right parenthesis */
+static const reg_error_t REG_EMPTY = 17; /* empty expression */
+static const reg_error_t REG_E_MEMORY = 15; /* = REG_ESIZE : out of memory */
+static const reg_error_t REG_ECOMPLEXITY = 18; /* complexity too high */
+static const reg_error_t REG_ESTACK = 19; /* out of stack space */
+static const reg_error_t REG_E_UNKNOWN = 20; /* unknown error */
+static const reg_error_t REG_ENOSYS = 20; /* = REG_E_UNKNOWN : Reserved. */
+
+BOOST_REGEX_DECL int BOOST_REGEX_CCALL regcompA(regex_tA*, const char*, int);
+BOOST_REGEX_DECL regsize_t BOOST_REGEX_CCALL regerrorA(int, const regex_tA*, char*, regsize_t);
+BOOST_REGEX_DECL int BOOST_REGEX_CCALL regexecA(const regex_tA*, const char*, regsize_t, regmatch_t*, int);
+BOOST_REGEX_DECL void BOOST_REGEX_CCALL regfreeA(regex_tA*);
+
+#ifndef BOOST_NO_WREGEX
+BOOST_REGEX_DECL int BOOST_REGEX_CCALL regcompW(regex_tW*, const wchar_t*, int);
+BOOST_REGEX_DECL regsize_t BOOST_REGEX_CCALL regerrorW(int, const regex_tW*, wchar_t*, regsize_t);
+BOOST_REGEX_DECL int BOOST_REGEX_CCALL regexecW(const regex_tW*, const wchar_t*, regsize_t, regmatch_t*, int);
+BOOST_REGEX_DECL void BOOST_REGEX_CCALL regfreeW(regex_tW*);
+#endif
+
+#ifdef UNICODE
+#define regcomp regcompW
+#define regerror regerrorW
+#define regexec regexecW
+#define regfree regfreeW
+#define regex_t regex_tW
+#else
+#define regcomp regcompA
+#define regerror regerrorA
+#define regexec regexecA
+#define regfree regfreeA
+#define regex_t regex_tA
+#endif
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#ifdef __cplusplus
+} // extern "C"
+} // namespace
+#endif
+
+//
+// C++ high level wrapper goes here:
+//
+#if defined(__cplusplus)
+#include <string>
+#include <vector>
+namespace boost{
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+class RegEx;
+
+namespace re_detail{
+
+class RegExData;
+struct pred1;
+struct pred2;
+struct pred3;
+struct pred4;
+
+} // namespace re_detail
+
+#if (defined(BOOST_MSVC) || defined(__BORLANDC__)) && !defined(BOOST_DISABLE_WIN32)
+typedef bool (__cdecl *GrepCallback)(const RegEx& expression);
+typedef bool (__cdecl *GrepFileCallback)(const char* file, const RegEx& expression);
+typedef bool (__cdecl *FindFilesCallback)(const char* file);
+#else
+typedef bool (*GrepCallback)(const RegEx& expression);
+typedef bool (*GrepFileCallback)(const char* file, const RegEx& expression);
+typedef bool (*FindFilesCallback)(const char* file);
+#endif
+
+class BOOST_REGEX_DECL RegEx
+{
+private:
+ re_detail::RegExData* pdata;
+public:
+ RegEx();
+ RegEx(const RegEx& o);
+ ~RegEx();
+ explicit RegEx(const char* c, bool icase = false);
+ explicit RegEx(const std::string& s, bool icase = false);
+ RegEx& operator=(const RegEx& o);
+ RegEx& operator=(const char* p);
+ RegEx& operator=(const std::string& s){ return this->operator=(s.c_str()); }
+ unsigned int SetExpression(const char* p, bool icase = false);
+ unsigned int SetExpression(const std::string& s, bool icase = false){ return SetExpression(s.c_str(), icase); }
+ std::string Expression()const;
+ unsigned int error_code()const;
+ //
+ // now matching operators:
+ //
+ bool Match(const char* p, match_flag_type flags = match_default);
+ bool Match(const std::string& s, match_flag_type flags = match_default) { return Match(s.c_str(), flags); }
+ bool Search(const char* p, match_flag_type flags = match_default);
+ bool Search(const std::string& s, match_flag_type flags = match_default) { return Search(s.c_str(), flags); }
+ unsigned int Grep(GrepCallback cb, const char* p, match_flag_type flags = match_default);
+ unsigned int Grep(GrepCallback cb, const std::string& s, match_flag_type flags = match_default) { return Grep(cb, s.c_str(), flags); }
+ unsigned int Grep(std::vector<std::string>& v, const char* p, match_flag_type flags = match_default);
+ unsigned int Grep(std::vector<std::string>& v, const std::string& s, match_flag_type flags = match_default) { return Grep(v, s.c_str(), flags); }
+ unsigned int Grep(std::vector<std::size_t>& v, const char* p, match_flag_type flags = match_default);
+ unsigned int Grep(std::vector<std::size_t>& v, const std::string& s, match_flag_type flags = match_default) { return Grep(v, s.c_str(), flags); }
+#ifndef BOOST_REGEX_NO_FILEITER
+ unsigned int GrepFiles(GrepFileCallback cb, const char* files, bool recurse = false, match_flag_type flags = match_default);
+ unsigned int GrepFiles(GrepFileCallback cb, const std::string& files, bool recurse = false, match_flag_type flags = match_default) { return GrepFiles(cb, files.c_str(), recurse, flags); }
+ unsigned int FindFiles(FindFilesCallback cb, const char* files, bool recurse = false, match_flag_type flags = match_default);
+ unsigned int FindFiles(FindFilesCallback cb, const std::string& files, bool recurse = false, match_flag_type flags = match_default) { return FindFiles(cb, files.c_str(), recurse, flags); }
+#endif
+
+ std::string Merge(const std::string& in, const std::string& fmt,
+ bool copy = true, match_flag_type flags = match_default);
+ std::string Merge(const char* in, const char* fmt,
+ bool copy = true, match_flag_type flags = match_default);
+
+ std::size_t Split(std::vector<std::string>& v, std::string& s, match_flag_type flags = match_default, unsigned max_count = ~0);
+ //
+ // now operators for returning what matched in more detail:
+ //
+ std::size_t Position(int i = 0)const;
+ std::size_t Length(int i = 0)const;
+ bool Matched(int i = 0)const;
+ std::size_t Marks()const;
+ std::string What(int i = 0)const;
+ std::string operator[](int i)const { return What(i); }
+
+ static const std::size_t npos;
+
+ friend struct re_detail::pred1;
+ friend struct re_detail::pred2;
+ friend struct re_detail::pred3;
+ friend struct re_detail::pred4;
+};
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+} // namespace boost
+
+#endif
+
+#endif // include guard
+
+
+
+
+
+
+
+
+
+
diff --git a/boost/boost/regex/v4/error_type.hpp b/boost/boost/regex/v4/error_type.hpp
new file mode 100644
index 00000000000..b6633a0092f
--- /dev/null
+++ b/boost/boost/regex/v4/error_type.hpp
@@ -0,0 +1,58 @@
+/*
+ *
+ * Copyright (c) 2003-2005
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE error_type.hpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: Declares regular expression error type enumerator.
+ */
+
+#ifndef BOOST_REGEX_ERROR_TYPE_HPP
+#define BOOST_REGEX_ERROR_TYPE_HPP
+
+#ifdef __cplusplus
+namespace boost{
+#endif
+
+#ifdef __cplusplus
+namespace regex_constants{
+
+enum error_type{
+
+ error_ok = 0, // not used
+ error_no_match = 1, // not used
+ error_bad_pattern = 2,
+ error_collate = 3,
+ error_ctype = 4,
+ error_escape = 5,
+ error_backref = 6,
+ error_brack = 7,
+ error_paren = 8,
+ error_brace = 9,
+ error_badbrace = 10,
+ error_range = 11,
+ error_space = 12,
+ error_badrepeat = 13,
+ error_end = 14, // not used
+ error_size = 15,
+ error_right_paren = 16, // not used
+ error_empty = 17,
+ error_complexity = 18,
+ error_stack = 19,
+ error_unknown = 20
+};
+
+}
+}
+#endif // __cplusplus
+
+#endif
diff --git a/boost/boost/regex/v4/fileiter.hpp b/boost/boost/regex/v4/fileiter.hpp
new file mode 100644
index 00000000000..21a785ea1aa
--- /dev/null
+++ b/boost/boost/regex/v4/fileiter.hpp
@@ -0,0 +1,449 @@
+/*
+ *
+ * Copyright (c) 1998-2002
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE fileiter.hpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: Declares various platform independent file and
+ * directory iterators, plus binary file input in
+ * the form of class map_file.
+ */
+
+#ifndef BOOST_RE_FILEITER_HPP_INCLUDED
+#define BOOST_RE_FILEITER_HPP_INCLUDED
+
+#ifndef BOOST_REGEX_CONFIG_HPP
+#include <boost/regex/config.hpp>
+#endif
+#include <boost/assert.hpp>
+
+#ifndef BOOST_REGEX_NO_FILEITER
+
+#if (defined(__CYGWIN__) || defined(__CYGWIN32__)) && !defined(BOOST_REGEX_NO_W32)
+#error "Sorry, can't mix <windows.h> with STL code and gcc compiler: if you ran configure, try again with configure --disable-ms-windows"
+#define BOOST_REGEX_FI_WIN32_MAP
+#define BOOST_REGEX_FI_POSIX_DIR
+#elif (defined(__WIN32__) || defined(_WIN32) || defined(WIN32)) && !defined(BOOST_REGEX_NO_W32)
+#define BOOST_REGEX_FI_WIN32_MAP
+#define BOOST_REGEX_FI_WIN32_DIR
+#else
+#define BOOST_REGEX_FI_POSIX_MAP
+#define BOOST_REGEX_FI_POSIX_DIR
+#endif
+
+#if defined(BOOST_REGEX_FI_WIN32_MAP)||defined(BOOST_REGEX_FI_WIN32_DIR)
+#include <windows.h>
+#endif
+
+#if defined(BOOST_REGEX_FI_WIN32_DIR)
+
+namespace boost{
+ namespace re_detail{
+
+typedef WIN32_FIND_DATAA _fi_find_data;
+typedef HANDLE _fi_find_handle;
+
+ } // namespace re_detail
+
+} // namespace boost
+
+#define _fi_invalid_handle INVALID_HANDLE_VALUE
+#define _fi_dir FILE_ATTRIBUTE_DIRECTORY
+
+#elif defined(BOOST_REGEX_FI_POSIX_DIR)
+
+#include <cstddef>
+#include <cstdio>
+#include <cctype>
+#include <iterator>
+#include <list>
+#include <cassert>
+#include <dirent.h>
+
+#if defined(__SUNPRO_CC)
+using std::list;
+#endif
+
+#ifndef MAX_PATH
+#define MAX_PATH 256
+#endif
+
+namespace boost{
+ namespace re_detail{
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+struct _fi_find_data
+{
+ unsigned dwFileAttributes;
+ char cFileName[MAX_PATH];
+};
+
+struct _fi_priv_data;
+
+typedef _fi_priv_data* _fi_find_handle;
+#define _fi_invalid_handle 0
+#define _fi_dir 1
+
+_fi_find_handle _fi_FindFirstFile(const char* lpFileName, _fi_find_data* lpFindFileData);
+bool _fi_FindNextFile(_fi_find_handle hFindFile, _fi_find_data* lpFindFileData);
+bool _fi_FindClose(_fi_find_handle hFindFile);
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+ } // namespace re_detail
+} // namespace boost
+
+#ifdef FindFirstFile
+ #undef FindFirstFile
+#endif
+#ifdef FindNextFile
+ #undef FindNextFile
+#endif
+#ifdef FindClose
+ #undef FindClose
+#endif
+
+#define FindFirstFileA _fi_FindFirstFile
+#define FindNextFileA _fi_FindNextFile
+#define FindClose _fi_FindClose
+
+#endif
+
+namespace boost{
+ namespace re_detail{
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+#ifdef BOOST_REGEX_FI_WIN32_MAP // win32 mapfile
+
+class BOOST_REGEX_DECL mapfile
+{
+ HANDLE hfile;
+ HANDLE hmap;
+ const char* _first;
+ const char* _last;
+public:
+
+ typedef const char* iterator;
+
+ mapfile(){ hfile = hmap = 0; _first = _last = 0; }
+ mapfile(const char* file){ hfile = hmap = 0; _first = _last = 0; open(file); }
+ ~mapfile(){ close(); }
+ void open(const char* file);
+ void close();
+ const char* begin(){ return _first; }
+ const char* end(){ return _last; }
+ size_t size(){ return _last - _first; }
+ bool valid(){ return (hfile != 0) && (hfile != INVALID_HANDLE_VALUE); }
+};
+
+
+#else
+
+class BOOST_REGEX_DECL mapfile_iterator;
+
+class BOOST_REGEX_DECL mapfile
+{
+ typedef char* pointer;
+ std::FILE* hfile;
+ long int _size;
+ pointer* _first;
+ pointer* _last;
+ mutable std::list<pointer*> condemed;
+ enum sizes
+ {
+ buf_size = 4096
+ };
+ void lock(pointer* node)const;
+ void unlock(pointer* node)const;
+public:
+
+ typedef mapfile_iterator iterator;
+
+ mapfile(){ hfile = 0; _size = 0; _first = _last = 0; }
+ mapfile(const char* file){ hfile = 0; _size = 0; _first = _last = 0; open(file); }
+ ~mapfile(){ close(); }
+ void open(const char* file);
+ void close();
+ iterator begin()const;
+ iterator end()const;
+ unsigned long size()const{ return _size; }
+ bool valid()const{ return hfile != 0; }
+ friend class mapfile_iterator;
+};
+
+class BOOST_REGEX_DECL mapfile_iterator
+#if !defined(BOOST_NO_STD_ITERATOR) || defined(BOOST_MSVC_STD_ITERATOR)
+: public std::iterator<std::random_access_iterator_tag, char>
+#endif
+{
+ typedef mapfile::pointer internal_pointer;
+ internal_pointer* node;
+ const mapfile* file;
+ unsigned long offset;
+ long position()const
+ {
+ return file ? ((node - file->_first) * mapfile::buf_size + offset) : 0;
+ }
+ void position(long pos)
+ {
+ if(file)
+ {
+ node = file->_first + (pos / mapfile::buf_size);
+ offset = pos % mapfile::buf_size;
+ }
+ }
+public:
+ typedef std::ptrdiff_t difference_type;
+ typedef char value_type;
+ typedef const char* pointer;
+ typedef const char& reference;
+ typedef std::random_access_iterator_tag iterator_category;
+
+ mapfile_iterator() { node = 0; file = 0; offset = 0; }
+ mapfile_iterator(const mapfile* f, long arg_position)
+ {
+ file = f;
+ node = f->_first + arg_position / mapfile::buf_size;
+ offset = arg_position % mapfile::buf_size;
+ if(file)
+ file->lock(node);
+ }
+ mapfile_iterator(const mapfile_iterator& i)
+ {
+ file = i.file;
+ node = i.node;
+ offset = i.offset;
+ if(file)
+ file->lock(node);
+ }
+ ~mapfile_iterator()
+ {
+ if(file && node)
+ file->unlock(node);
+ }
+ mapfile_iterator& operator = (const mapfile_iterator& i);
+ char operator* ()const
+ {
+ BOOST_ASSERT(node >= file->_first);
+ BOOST_ASSERT(node < file->_last);
+ return file ? *(*node + sizeof(int) + offset) : char(0);
+ }
+ char operator[] (long off)const
+ {
+ mapfile_iterator tmp(*this);
+ tmp += off;
+ return *tmp;
+ }
+ mapfile_iterator& operator++ ();
+ mapfile_iterator operator++ (int);
+ mapfile_iterator& operator-- ();
+ mapfile_iterator operator-- (int);
+
+ mapfile_iterator& operator += (long off)
+ {
+ position(position() + off);
+ return *this;
+ }
+ mapfile_iterator& operator -= (long off)
+ {
+ position(position() - off);
+ return *this;
+ }
+
+ friend inline bool operator==(const mapfile_iterator& i, const mapfile_iterator& j)
+ {
+ return (i.file == j.file) && (i.node == j.node) && (i.offset == j.offset);
+ }
+
+ friend inline bool operator!=(const mapfile_iterator& i, const mapfile_iterator& j)
+ {
+ return !(i == j);
+ }
+
+ friend inline bool operator<(const mapfile_iterator& i, const mapfile_iterator& j)
+ {
+ return i.position() < j.position();
+ }
+ friend inline bool operator>(const mapfile_iterator& i, const mapfile_iterator& j)
+ {
+ return i.position() > j.position();
+ }
+ friend inline bool operator<=(const mapfile_iterator& i, const mapfile_iterator& j)
+ {
+ return i.position() <= j.position();
+ }
+ friend inline bool operator>=(const mapfile_iterator& i, const mapfile_iterator& j)
+ {
+ return i.position() >= j.position();
+ }
+
+ friend mapfile_iterator operator + (const mapfile_iterator& i, long off);
+ friend mapfile_iterator operator + (long off, const mapfile_iterator& i)
+ {
+ mapfile_iterator tmp(i);
+ return tmp += off;
+ }
+ friend mapfile_iterator operator - (const mapfile_iterator& i, long off);
+ friend inline long operator - (const mapfile_iterator& i, const mapfile_iterator& j)
+ {
+ return i.position() - j.position();
+ }
+};
+
+#endif
+
+// _fi_sep determines the directory separator, either '\\' or '/'
+BOOST_REGEX_DECL extern const char* _fi_sep;
+
+struct file_iterator_ref
+{
+ _fi_find_handle hf;
+ _fi_find_data _data;
+ long count;
+};
+
+
+class BOOST_REGEX_DECL file_iterator
+{
+ char* _root;
+ char* _path;
+ char* ptr;
+ file_iterator_ref* ref;
+
+public:
+ typedef std::ptrdiff_t difference_type;
+ typedef const char* value_type;
+ typedef const char** pointer;
+ typedef const char*& reference;
+ typedef std::input_iterator_tag iterator_category;
+
+ file_iterator();
+ file_iterator(const char* wild);
+ ~file_iterator();
+ file_iterator(const file_iterator&);
+ file_iterator& operator=(const file_iterator&);
+ const char* root()const { return _root; }
+ const char* path()const { return _path; }
+ const char* name()const { return ptr; }
+ _fi_find_data* data() { return &(ref->_data); }
+ void next();
+ file_iterator& operator++() { next(); return *this; }
+ file_iterator operator++(int);
+ const char* operator*() { return path(); }
+
+ friend inline bool operator == (const file_iterator& f1, const file_iterator& f2)
+ {
+ return ((f1.ref->hf == _fi_invalid_handle) && (f2.ref->hf == _fi_invalid_handle));
+ }
+
+ friend inline bool operator != (const file_iterator& f1, const file_iterator& f2)
+ {
+ return !(f1 == f2);
+ }
+
+};
+
+// dwa 9/13/00 - suppress unused parameter warning
+inline bool operator < (const file_iterator&, const file_iterator&)
+{
+ return false;
+}
+
+
+class BOOST_REGEX_DECL directory_iterator
+{
+ char* _root;
+ char* _path;
+ char* ptr;
+ file_iterator_ref* ref;
+
+public:
+ typedef std::ptrdiff_t difference_type;
+ typedef const char* value_type;
+ typedef const char** pointer;
+ typedef const char*& reference;
+ typedef std::input_iterator_tag iterator_category;
+
+ directory_iterator();
+ directory_iterator(const char* wild);
+ ~directory_iterator();
+ directory_iterator(const directory_iterator& other);
+ directory_iterator& operator=(const directory_iterator& other);
+
+ const char* root()const { return _root; }
+ const char* path()const { return _path; }
+ const char* name()const { return ptr; }
+ _fi_find_data* data() { return &(ref->_data); }
+ void next();
+ directory_iterator& operator++() { next(); return *this; }
+ directory_iterator operator++(int);
+ const char* operator*() { return path(); }
+
+ static const char* separator() { return _fi_sep; }
+
+ friend inline bool operator == (const directory_iterator& f1, const directory_iterator& f2)
+ {
+ return ((f1.ref->hf == _fi_invalid_handle) && (f2.ref->hf == _fi_invalid_handle));
+ }
+
+
+ friend inline bool operator != (const directory_iterator& f1, const directory_iterator& f2)
+ {
+ return !(f1 == f2);
+ }
+
+ };
+
+inline bool operator < (const directory_iterator&, const directory_iterator&)
+{
+ return false;
+}
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+
+} // namespace re_detail
+using boost::re_detail::directory_iterator;
+using boost::re_detail::file_iterator;
+using boost::re_detail::mapfile;
+} // namespace boost
+
+#endif // BOOST_REGEX_NO_FILEITER
+#endif // BOOST_RE_FILEITER_HPP
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/boost/boost/regex/v4/instances.hpp b/boost/boost/regex/v4/instances.hpp
new file mode 100644
index 00000000000..b9898cb047a
--- /dev/null
+++ b/boost/boost/regex/v4/instances.hpp
@@ -0,0 +1,206 @@
+/*
+ *
+ * Copyright (c) 1998-2002
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE instances.cpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: Defines those template instances that are placed in the
+ * library rather than in the users object files.
+ */
+
+//
+// note no include guard, we may include this multiple times:
+//
+#ifndef BOOST_REGEX_NO_EXTERNAL_TEMPLATES
+
+namespace boost{
+
+//
+// this header can be included multiple times, each time with
+// a different character type, BOOST_REGEX_CHAR_T must be defined
+// first:
+//
+#ifndef BOOST_REGEX_CHAR_T
+# error "BOOST_REGEX_CHAR_T not defined"
+#endif
+
+#ifndef BOOST_REGEX_TRAITS_T
+# define BOOST_REGEX_TRAITS_T , boost::regex_traits<BOOST_REGEX_CHAR_T >
+#endif
+
+//
+// what follows is compiler specific:
+//
+
+#if defined(__BORLANDC__) && (__BORLANDC__ < 0x600)
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+# ifndef BOOST_REGEX_INSTANTIATE
+# pragma option push -Jgx
+# endif
+
+template class BOOST_REGEX_DECL basic_regex< BOOST_REGEX_CHAR_T BOOST_REGEX_TRAITS_T >;
+template class BOOST_REGEX_DECL match_results< const BOOST_REGEX_CHAR_T* >;
+#ifndef BOOST_NO_STD_ALLOCATOR
+template class BOOST_REGEX_DECL ::boost::re_detail::perl_matcher<BOOST_REGEX_CHAR_T const *, match_results< const BOOST_REGEX_CHAR_T* >::allocator_type BOOST_REGEX_TRAITS_T >;
+#endif
+
+# ifndef BOOST_REGEX_INSTANTIATE
+# pragma option pop
+# endif
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#elif defined(BOOST_MSVC) || defined(__ICL)
+
+# ifndef BOOST_REGEX_INSTANTIATE
+# ifdef __GNUC__
+# define template __extension__ extern template
+# else
+# define template extern template
+# endif
+# endif
+
+# ifdef BOOST_MSVC
+# pragma warning(push)
+# pragma warning(disable : 4251 4231 4660)
+# endif
+
+template class BOOST_REGEX_DECL basic_regex< BOOST_REGEX_CHAR_T BOOST_REGEX_TRAITS_T >;
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+template class BOOST_REGEX_DECL match_results< const BOOST_REGEX_CHAR_T* >;
+#endif
+#ifndef BOOST_NO_STD_ALLOCATOR
+template class BOOST_REGEX_DECL ::boost::re_detail::perl_matcher<BOOST_REGEX_CHAR_T const *, match_results< const BOOST_REGEX_CHAR_T* >::allocator_type BOOST_REGEX_TRAITS_T >;
+#endif
+#if !(defined(BOOST_DINKUMWARE_STDLIB) && (BOOST_DINKUMWARE_STDLIB <= 1))\
+ && !(defined(BOOST_INTEL_CXX_VERSION) && (BOOST_INTEL_CXX_VERSION <= 800))\
+ && !(defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION))\
+ && !defined(BOOST_REGEX_ICU_INSTANCES)
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+template class BOOST_REGEX_DECL match_results< std::basic_string<BOOST_REGEX_CHAR_T>::const_iterator >;
+#endif
+#ifndef BOOST_NO_STD_ALLOCATOR
+template class BOOST_REGEX_DECL ::boost::re_detail::perl_matcher< std::basic_string<BOOST_REGEX_CHAR_T>::const_iterator, match_results< std::basic_string<BOOST_REGEX_CHAR_T>::const_iterator >::allocator_type, boost::regex_traits<BOOST_REGEX_CHAR_T > >;
+#endif
+#endif
+
+
+# ifdef BOOST_MSVC
+# pragma warning(pop)
+# endif
+
+# ifdef template
+# undef template
+# endif
+
+#elif (defined(__GNUC__) && (__GNUC__ >= 3))
+
+# ifndef BOOST_REGEX_INSTANTIATE
+# define template __extension__ extern template
+# endif
+
+#if !defined(BOOST_NO_STD_LOCALE) && !defined(BOOST_REGEX_ICU_INSTANCES)
+namespace re_detail{
+template BOOST_REGEX_DECL
+std::locale cpp_regex_traits_base<BOOST_REGEX_CHAR_T>::imbue(const std::locale& l);
+
+template BOOST_REGEX_DECL
+cpp_regex_traits_implementation<BOOST_REGEX_CHAR_T>::string_type
+ cpp_regex_traits_implementation<BOOST_REGEX_CHAR_T>::transform_primary(const BOOST_REGEX_CHAR_T* p1, const BOOST_REGEX_CHAR_T* p2) const;
+template BOOST_REGEX_DECL
+cpp_regex_traits_implementation<BOOST_REGEX_CHAR_T>::string_type
+ cpp_regex_traits_implementation<BOOST_REGEX_CHAR_T>::transform(const BOOST_REGEX_CHAR_T* p1, const BOOST_REGEX_CHAR_T* p2) const;
+template BOOST_REGEX_DECL
+cpp_regex_traits_implementation<BOOST_REGEX_CHAR_T>::string_type
+ cpp_regex_traits_implementation<BOOST_REGEX_CHAR_T>::lookup_collatename(const BOOST_REGEX_CHAR_T* p1, const BOOST_REGEX_CHAR_T* p2) const;
+template BOOST_REGEX_DECL
+void cpp_regex_traits_implementation<BOOST_REGEX_CHAR_T>::init();
+template BOOST_REGEX_DECL
+cpp_regex_traits_implementation<BOOST_REGEX_CHAR_T>::char_class_type
+ cpp_regex_traits_implementation<BOOST_REGEX_CHAR_T>::lookup_classname_imp(const BOOST_REGEX_CHAR_T* p1, const BOOST_REGEX_CHAR_T* p2) const;
+#ifdef BOOST_REGEX_BUGGY_CTYPE_FACET
+template BOOST_REGEX_DECL
+bool cpp_regex_traits_implementation<BOOST_REGEX_CHAR_T>::isctype(const BOOST_REGEX_CHAR_T c, char_class_type mask) const;
+#endif
+} // namespace
+template BOOST_REGEX_DECL
+int cpp_regex_traits<BOOST_REGEX_CHAR_T>::toi(const BOOST_REGEX_CHAR_T*& first, const BOOST_REGEX_CHAR_T* last, int radix)const;
+template BOOST_REGEX_DECL
+std::string cpp_regex_traits<BOOST_REGEX_CHAR_T>::catalog_name(const std::string& name);
+template BOOST_REGEX_DECL
+std::string& cpp_regex_traits<BOOST_REGEX_CHAR_T>::get_catalog_name_inst();
+template BOOST_REGEX_DECL
+std::string cpp_regex_traits<BOOST_REGEX_CHAR_T>::get_catalog_name();
+#ifdef BOOST_HAS_THREADS
+template BOOST_REGEX_DECL
+static_mutex& cpp_regex_traits<BOOST_REGEX_CHAR_T>::get_mutex_inst();
+#endif
+#endif
+
+template BOOST_REGEX_DECL basic_regex<BOOST_REGEX_CHAR_T BOOST_REGEX_TRAITS_T >&
+ basic_regex<BOOST_REGEX_CHAR_T BOOST_REGEX_TRAITS_T >::do_assign(
+ const BOOST_REGEX_CHAR_T* p1,
+ const BOOST_REGEX_CHAR_T* p2,
+ flag_type f);
+template BOOST_REGEX_DECL basic_regex<BOOST_REGEX_CHAR_T BOOST_REGEX_TRAITS_T >::locale_type BOOST_REGEX_CALL
+ basic_regex<BOOST_REGEX_CHAR_T BOOST_REGEX_TRAITS_T >::imbue(locale_type l);
+
+template BOOST_REGEX_DECL void BOOST_REGEX_CALL
+ match_results<const BOOST_REGEX_CHAR_T*>::maybe_assign(
+ const match_results<const BOOST_REGEX_CHAR_T*>& m);
+
+namespace re_detail{
+template BOOST_REGEX_DECL void perl_matcher<BOOST_REGEX_CHAR_T const *, match_results< const BOOST_REGEX_CHAR_T* >::allocator_type BOOST_REGEX_TRAITS_T >::construct_init(
+ const basic_regex<BOOST_REGEX_CHAR_T BOOST_REGEX_TRAITS_T >& e, match_flag_type f);
+template BOOST_REGEX_DECL bool perl_matcher<BOOST_REGEX_CHAR_T const *, match_results< const BOOST_REGEX_CHAR_T* >::allocator_type BOOST_REGEX_TRAITS_T >::match();
+template BOOST_REGEX_DECL bool perl_matcher<BOOST_REGEX_CHAR_T const *, match_results< const BOOST_REGEX_CHAR_T* >::allocator_type BOOST_REGEX_TRAITS_T >::find();
+} // namespace
+
+#if (defined(__GLIBCPP__) || defined(__GLIBCXX__)) \
+ && !defined(BOOST_REGEX_ICU_INSTANCES)\
+ && !defined(__SGI_STL_PORT)\
+ && !defined(_STLPORT_VERSION)
+// std:basic_string<>::const_iterator instances as well:
+template BOOST_REGEX_DECL void BOOST_REGEX_CALL
+ match_results<std::basic_string<BOOST_REGEX_CHAR_T>::const_iterator>::maybe_assign(
+ const match_results<std::basic_string<BOOST_REGEX_CHAR_T>::const_iterator>& m);
+
+namespace re_detail{
+template BOOST_REGEX_DECL void perl_matcher<std::basic_string<BOOST_REGEX_CHAR_T>::const_iterator, match_results< std::basic_string<BOOST_REGEX_CHAR_T>::const_iterator >::allocator_type, boost::regex_traits<BOOST_REGEX_CHAR_T > >::construct_init(
+ const basic_regex<BOOST_REGEX_CHAR_T>& e, match_flag_type f);
+template BOOST_REGEX_DECL bool perl_matcher<std::basic_string<BOOST_REGEX_CHAR_T>::const_iterator, match_results< std::basic_string<BOOST_REGEX_CHAR_T>::const_iterator >::allocator_type, boost::regex_traits<BOOST_REGEX_CHAR_T > >::match();
+template BOOST_REGEX_DECL bool perl_matcher<std::basic_string<BOOST_REGEX_CHAR_T>::const_iterator, match_results< std::basic_string<BOOST_REGEX_CHAR_T>::const_iterator >::allocator_type, boost::regex_traits<BOOST_REGEX_CHAR_T > >::find();
+} // namespace
+#endif
+
+# ifdef template
+# undef template
+# endif
+
+
+#endif
+
+} // namespace boost
+
+#endif // BOOST_REGEX_NO_EXTERNAL_TEMPLATES
+
+
+
+
+
diff --git a/boost/boost/regex/v4/iterator_category.hpp b/boost/boost/regex/v4/iterator_category.hpp
new file mode 100644
index 00000000000..20870a0ced8
--- /dev/null
+++ b/boost/boost/regex/v4/iterator_category.hpp
@@ -0,0 +1,87 @@
+/*
+ *
+ * Copyright (c) 2002
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE regex_match.hpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: Iterator traits for selecting an iterator type as
+ * an integral constant expression.
+ */
+
+
+#ifndef BOOST_REGEX_ITERATOR_CATEGORY_HPP
+#define BOOST_REGEX_ITERATOR_CATEGORY_HPP
+
+#include <iterator>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/type_traits/is_pointer.hpp>
+
+namespace boost{
+namespace detail{
+
+template <class I>
+struct is_random_imp
+{
+private:
+ typedef typename std::iterator_traits<I>::iterator_category cat;
+public:
+ BOOST_STATIC_CONSTANT(bool, value = (::boost::is_convertible<cat*, std::random_access_iterator_tag*>::value));
+};
+
+template <class I>
+struct is_random_pointer_imp
+{
+ BOOST_STATIC_CONSTANT(bool, value = true);
+};
+
+template <bool is_pointer_type>
+struct is_random_imp_selector
+{
+ template <class I>
+ struct rebind
+ {
+ typedef is_random_imp<I> type;
+ };
+};
+
+template <>
+struct is_random_imp_selector<true>
+{
+ template <class I>
+ struct rebind
+ {
+ typedef is_random_pointer_imp<I> type;
+ };
+};
+
+}
+
+template <class I>
+struct is_random_access_iterator
+{
+private:
+ typedef detail::is_random_imp_selector< ::boost::is_pointer<I>::value> selector;
+ typedef typename selector::template rebind<I> bound_type;
+ typedef typename bound_type::type answer;
+public:
+ BOOST_STATIC_CONSTANT(bool, value = answer::value);
+};
+
+#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION
+template <class I>
+const bool is_random_access_iterator<I>::value;
+#endif
+
+}
+
+#endif
+
diff --git a/boost/boost/regex/v4/iterator_traits.hpp b/boost/boost/regex/v4/iterator_traits.hpp
new file mode 100644
index 00000000000..7e247f536be
--- /dev/null
+++ b/boost/boost/regex/v4/iterator_traits.hpp
@@ -0,0 +1,121 @@
+/*
+ *
+ * Copyright (c) 1998-2002
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE iterator_traits.cpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: Declares iterator traits workarounds.
+ */
+
+#ifndef BOOST_REGEX_V4_ITERATOR_TRAITS_HPP
+#define BOOST_REGEX_V4_ITERATOR_TRAITS_HPP
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+namespace boost{
+namespace re_detail{
+
+#if defined(BOOST_NO_STD_ITERATOR_TRAITS) || defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template <class T>
+struct regex_iterator_traits
+{
+ typedef typename T::iterator_category iterator_category;
+ typedef typename T::value_type value_type;
+#if !defined(BOOST_NO_STD_ITERATOR)
+ typedef typename T::difference_type difference_type;
+ typedef typename T::pointer pointer;
+ typedef typename T::reference reference;
+#else
+ typedef std::ptrdiff_t difference_type;
+ typedef value_type* pointer;
+ typedef value_type& reference;
+#endif
+};
+
+template <class T>
+struct pointer_iterator_traits
+{
+ typedef std::ptrdiff_t difference_type;
+ typedef T value_type;
+ typedef T* pointer;
+ typedef T& reference;
+ typedef std::random_access_iterator_tag iterator_category;
+};
+template <class T>
+struct const_pointer_iterator_traits
+{
+ typedef std::ptrdiff_t difference_type;
+ typedef T value_type;
+ typedef const T* pointer;
+ typedef const T& reference;
+ typedef std::random_access_iterator_tag iterator_category;
+};
+
+template<>
+struct regex_iterator_traits<char*> : pointer_iterator_traits<char>{};
+template<>
+struct regex_iterator_traits<const char*> : const_pointer_iterator_traits<char>{};
+template<>
+struct regex_iterator_traits<wchar_t*> : pointer_iterator_traits<wchar_t>{};
+template<>
+struct regex_iterator_traits<const wchar_t*> : const_pointer_iterator_traits<wchar_t>{};
+//
+// the follwoing are needed for ICU support:
+//
+template<>
+struct regex_iterator_traits<unsigned char*> : pointer_iterator_traits<char>{};
+template<>
+struct regex_iterator_traits<const unsigned char*> : const_pointer_iterator_traits<char>{};
+template<>
+struct regex_iterator_traits<int*> : pointer_iterator_traits<int>{};
+template<>
+struct regex_iterator_traits<const int*> : const_pointer_iterator_traits<int>{};
+
+#ifdef BOOST_REGEX_HAS_OTHER_WCHAR_T
+template<>
+struct regex_iterator_traits<unsigned short*> : pointer_iterator_traits<unsigned short>{};
+template<>
+struct regex_iterator_traits<const unsigned short*> : const_pointer_iterator_traits<unsigned short>{};
+#endif
+
+#if defined(__SGI_STL_PORT) && defined(__STL_DEBUG)
+template<>
+struct regex_iterator_traits<std::string::iterator> : pointer_iterator_traits<char>{};
+template<>
+struct regex_iterator_traits<std::string::const_iterator> : const_pointer_iterator_traits<char>{};
+#ifndef BOOST_NO_STD_WSTRING
+template<>
+struct regex_iterator_traits<std::wstring::iterator> : pointer_iterator_traits<wchar_t>{};
+template<>
+struct regex_iterator_traits<std::wstring::const_iterator> : const_pointer_iterator_traits<wchar_t>{};
+#endif // BOOST_NO_WSTRING
+#endif // stport
+
+#else
+
+template <class T>
+struct regex_iterator_traits : public std::iterator_traits<T> {};
+
+#endif
+
+} // namespace re_detail
+} // namespace boost
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif
+
diff --git a/boost/boost/regex/v4/match_flags.hpp b/boost/boost/regex/v4/match_flags.hpp
new file mode 100644
index 00000000000..a86fe4613b4
--- /dev/null
+++ b/boost/boost/regex/v4/match_flags.hpp
@@ -0,0 +1,140 @@
+/*
+ *
+ * Copyright (c) 1998-2002
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE match_flags.hpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: Declares match_flags type.
+ */
+
+#ifndef BOOST_REGEX_V4_MATCH_FLAGS
+#define BOOST_REGEX_V4_MATCH_FLAGS
+
+#ifdef __cplusplus
+# include <boost/cstdint.hpp>
+#endif
+
+#include <boost/detail/workaround.hpp>
+
+#ifdef __cplusplus
+namespace boost{
+ namespace regex_constants{
+#endif
+
+typedef enum _match_flags
+{
+ match_default = 0,
+ match_not_bol = 1, // first is not start of line
+ match_not_eol = match_not_bol << 1, // last is not end of line
+ match_not_bob = match_not_eol << 1, // first is not start of buffer
+ match_not_eob = match_not_bob << 1, // last is not end of buffer
+ match_not_bow = match_not_eob << 1, // first is not start of word
+ match_not_eow = match_not_bow << 1, // last is not end of word
+ match_not_dot_newline = match_not_eow << 1, // \n is not matched by '.'
+ match_not_dot_null = match_not_dot_newline << 1, // '\0' is not matched by '.'
+ match_prev_avail = match_not_dot_null << 1, // *--first is a valid expression
+ match_init = match_prev_avail << 1, // internal use
+ match_any = match_init << 1, // don't care what we match
+ match_not_null = match_any << 1, // string can't be null
+ match_continuous = match_not_null << 1, // each grep match must continue from
+ // uninterupted from the previous one
+ match_partial = match_continuous << 1, // find partial matches
+
+ match_stop = match_partial << 1, // stop after first match (grep) V3 only
+ match_not_initial_null = match_stop, // don't match initial null, V4 only
+ match_all = match_stop << 1, // must find the whole of input even if match_any is set
+ match_perl = match_all << 1, // Use perl matching rules
+ match_posix = match_perl << 1, // Use POSIX matching rules
+ match_nosubs = match_posix << 1, // don't trap marked subs
+ match_extra = match_nosubs << 1, // include full capture information for repeated captures
+ match_single_line = match_extra << 1, // treat text as single line and ignor any \n's when matching ^ and $.
+ match_unused1 = match_single_line << 1, // unused
+ match_unused2 = match_unused1 << 1, // unused
+ match_unused3 = match_unused2 << 1, // unused
+ match_max = match_unused3,
+
+ format_perl = 0, // perl style replacement
+ format_default = 0, // ditto.
+ format_sed = match_max << 1, // sed style replacement.
+ format_all = format_sed << 1, // enable all extentions to sytax.
+ format_no_copy = format_all << 1, // don't copy non-matching segments.
+ format_first_only = format_no_copy << 1, // Only replace first occurance.
+ format_is_if = format_first_only << 1, // internal use only.
+ format_literal = format_is_if << 1 // treat string as a literal
+
+} match_flags;
+
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+typedef unsigned long match_flag_type;
+#else
+typedef match_flags match_flag_type;
+
+
+#ifdef __cplusplus
+inline match_flags operator&(match_flags m1, match_flags m2)
+{ return static_cast<match_flags>(static_cast<boost::int32_t>(m1) & static_cast<boost::int32_t>(m2)); }
+inline match_flags operator|(match_flags m1, match_flags m2)
+{ return static_cast<match_flags>(static_cast<boost::int32_t>(m1) | static_cast<boost::int32_t>(m2)); }
+inline match_flags operator^(match_flags m1, match_flags m2)
+{ return static_cast<match_flags>(static_cast<boost::int32_t>(m1) ^ static_cast<boost::int32_t>(m2)); }
+inline match_flags operator~(match_flags m1)
+{ return static_cast<match_flags>(~static_cast<boost::int32_t>(m1)); }
+inline match_flags& operator&=(match_flags& m1, match_flags m2)
+{ m1 = m1&m2; return m1; }
+inline match_flags& operator|=(match_flags& m1, match_flags m2)
+{ m1 = m1|m2; return m1; }
+inline match_flags& operator^=(match_flags& m1, match_flags m2)
+{ m1 = m1^m2; return m1; }
+#endif
+#endif
+
+#ifdef __cplusplus
+} // namespace regex_constants
+//
+// import names into boost for backwards compatiblity:
+//
+using regex_constants::match_flag_type;
+using regex_constants::match_default;
+using regex_constants::match_not_bol;
+using regex_constants::match_not_eol;
+using regex_constants::match_not_bob;
+using regex_constants::match_not_eob;
+using regex_constants::match_not_bow;
+using regex_constants::match_not_eow;
+using regex_constants::match_not_dot_newline;
+using regex_constants::match_not_dot_null;
+using regex_constants::match_prev_avail;
+//using regex_constants::match_init;
+using regex_constants::match_any;
+using regex_constants::match_not_null;
+using regex_constants::match_continuous;
+using regex_constants::match_partial;
+//using regex_constants::match_stop;
+using regex_constants::match_all;
+using regex_constants::match_perl;
+using regex_constants::match_posix;
+using regex_constants::match_nosubs;
+using regex_constants::match_extra;
+using regex_constants::match_single_line;
+//using regex_constants::match_max;
+using regex_constants::format_all;
+using regex_constants::format_sed;
+using regex_constants::format_perl;
+using regex_constants::format_default;
+using regex_constants::format_no_copy;
+using regex_constants::format_first_only;
+//using regex_constants::format_is_if;
+
+} // namespace boost
+#endif // __cplusplus
+#endif // include guard
+
diff --git a/boost/boost/regex/v4/match_results.hpp b/boost/boost/regex/v4/match_results.hpp
new file mode 100644
index 00000000000..f56c4941391
--- /dev/null
+++ b/boost/boost/regex/v4/match_results.hpp
@@ -0,0 +1,413 @@
+/*
+ *
+ * Copyright (c) 1998-2002
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE match_results.cpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: Declares template class match_results.
+ */
+
+#ifndef BOOST_REGEX_V4_MATCH_RESULTS_HPP
+#define BOOST_REGEX_V4_MATCH_RESULTS_HPP
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+namespace boost{
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable : 4251 4231 4660)
+#endif
+
+template <class BidiIterator, class Allocator>
+class match_results
+{
+private:
+#ifndef BOOST_NO_STD_ALLOCATOR
+ typedef std::vector<sub_match<BidiIterator>, Allocator> vector_type;
+#else
+ typedef std::vector<sub_match<BidiIterator> > vector_type;
+#endif
+public:
+ typedef sub_match<BidiIterator> value_type;
+#if !defined(BOOST_NO_STD_ALLOCATOR) && !(defined(BOOST_MSVC) && defined(_STLPORT_VERSION))
+ typedef typename Allocator::const_reference const_reference;
+#else
+ typedef const value_type& const_reference;
+#endif
+ typedef const_reference reference;
+ typedef typename vector_type::const_iterator const_iterator;
+ typedef const_iterator iterator;
+ typedef typename re_detail::regex_iterator_traits<
+ BidiIterator>::difference_type difference_type;
+ typedef typename Allocator::size_type size_type;
+ typedef Allocator allocator_type;
+ typedef typename re_detail::regex_iterator_traits<
+ BidiIterator>::value_type char_type;
+ typedef std::basic_string<char_type> string_type;
+
+ // construct/copy/destroy:
+ explicit match_results(const Allocator& a = Allocator())
+#ifndef BOOST_NO_STD_ALLOCATOR
+ : m_subs(a), m_base() {}
+#else
+ : m_subs(), m_base() { (void)a; }
+#endif
+ match_results(const match_results& m)
+ : m_subs(m.m_subs), m_base(m.m_base) {}
+ match_results& operator=(const match_results& m)
+ {
+ m_subs = m.m_subs;
+ m_base = m.m_base;
+ return *this;
+ }
+ ~match_results(){}
+
+ // size:
+ size_type size() const
+ { return empty() ? 0 : m_subs.size() - 2; }
+ size_type max_size() const
+ { return m_subs.max_size(); }
+ bool empty() const
+ { return m_subs.size() < 2; }
+ // element access:
+ difference_type length(int sub = 0) const
+ {
+ sub += 2;
+ if((sub < (int)m_subs.size()) && (sub > 0))
+ return m_subs[sub].length();
+ return 0;
+ }
+ difference_type position(size_type sub = 0) const
+ {
+ sub += 2;
+ if(sub < m_subs.size())
+ {
+ const sub_match<BidiIterator>& s = m_subs[sub];
+ if(s.matched || (sub == 2))
+ {
+ return ::boost::re_detail::distance((BidiIterator)(m_base), (BidiIterator)(s.first));
+ }
+ }
+ return ~static_cast<difference_type>(0);
+ }
+ string_type str(int sub = 0) const
+ {
+ sub += 2;
+ string_type result;
+ if(sub < (int)m_subs.size() && (sub > 0))
+ {
+ const sub_match<BidiIterator>& s = m_subs[sub];
+ if(s.matched)
+ {
+ result = s.str();
+ }
+ }
+ return result;
+ }
+ const_reference operator[](int sub) const
+ {
+ sub += 2;
+ if(sub < (int)m_subs.size() && (sub >= 0))
+ {
+ return m_subs[sub];
+ }
+ return m_null;
+ }
+
+ const_reference prefix() const
+ {
+ return (*this)[-1];
+ }
+
+ const_reference suffix() const
+ {
+ return (*this)[-2];
+ }
+ const_iterator begin() const
+ {
+ return (m_subs.size() > 2) ? (m_subs.begin() + 2) : m_subs.end();
+ }
+ const_iterator end() const
+ {
+ return m_subs.end();
+ }
+ // format:
+ template <class OutputIterator>
+ OutputIterator format(OutputIterator out,
+ const string_type& fmt,
+ match_flag_type flags = format_default) const
+ {
+ re_detail::trivial_format_traits<char_type> traits;
+ return re_detail::regex_format_imp(out, *this, fmt.data(), fmt.data() + fmt.size(), flags, traits);
+ }
+ string_type format(const string_type& fmt,
+ match_flag_type flags = format_default) const
+ {
+ string_type result;
+ re_detail::string_out_iterator<string_type> i(result);
+ re_detail::trivial_format_traits<char_type> traits;
+ re_detail::regex_format_imp(i, *this, fmt.data(), fmt.data() + fmt.size(), flags, traits);
+ return result;
+ }
+ // format with locale:
+ template <class OutputIterator, class RegexT>
+ OutputIterator format(OutputIterator out,
+ const string_type& fmt,
+ match_flag_type flags,
+ const RegexT& re) const
+ {
+ return ::boost::re_detail::regex_format_imp(out, *this, fmt.data(), fmt.data() + fmt.size(), flags, re.get_traits());
+ }
+ template <class RegexT>
+ string_type format(const string_type& fmt,
+ match_flag_type flags,
+ const RegexT& re) const
+ {
+ string_type result;
+ re_detail::string_out_iterator<string_type> i(result);
+ ::boost::re_detail::regex_format_imp(i, *this, fmt.data(), fmt.data() + fmt.size(), flags, re.get_traits());
+ return result;
+ }
+
+ allocator_type get_allocator() const
+ {
+#ifndef BOOST_NO_STD_ALLOCATOR
+ return m_subs.get_allocator();
+#else
+ return allocator_type();
+#endif
+ }
+ void swap(match_results& that)
+ {
+ std::swap(m_subs, that.m_subs);
+ std::swap(m_base, that.m_base);
+ }
+ bool operator==(const match_results& that)const
+ {
+ return (m_subs == that.m_subs) && (m_base == that.m_base);
+ }
+ bool operator!=(const match_results& that)const
+ { return !(*this == that); }
+
+#ifdef BOOST_REGEX_MATCH_EXTRA
+ typedef typename sub_match<BidiIterator>::capture_sequence_type capture_sequence_type;
+
+ const capture_sequence_type& captures(int i)const
+ {
+ return (*this)[i].captures();
+ }
+#endif
+
+ //
+ // private access functions:
+ void BOOST_REGEX_CALL set_second(BidiIterator i)
+ {
+ BOOST_ASSERT(m_subs.size() > 2);
+ m_subs[2].second = i;
+ m_subs[2].matched = true;
+ m_subs[0].first = i;
+ m_subs[0].matched = (m_subs[0].first != m_subs[0].second);
+ m_null.first = i;
+ m_null.second = i;
+ m_null.matched = false;
+ }
+
+ void BOOST_REGEX_CALL set_second(BidiIterator i, size_type pos, bool m = true)
+ {
+ pos += 2;
+ BOOST_ASSERT(m_subs.size() > pos);
+ m_subs[pos].second = i;
+ m_subs[pos].matched = m;
+ if(pos == 2)
+ {
+ m_subs[0].first = i;
+ m_subs[0].matched = (m_subs[0].first != m_subs[0].second);
+ m_null.first = i;
+ m_null.second = i;
+ m_null.matched = false;
+ }
+ }
+ void BOOST_REGEX_CALL set_size(size_type n, BidiIterator i, BidiIterator j)
+ {
+ value_type v(j);
+ size_type len = m_subs.size();
+ if(len > n + 2)
+ {
+ m_subs.erase(m_subs.begin()+n+2, m_subs.end());
+ std::fill(m_subs.begin(), m_subs.end(), v);
+ }
+ else
+ {
+ std::fill(m_subs.begin(), m_subs.end(), v);
+ if(n+2 != len)
+ m_subs.insert(m_subs.end(), n+2-len, v);
+ }
+ m_subs[1].first = i;
+ }
+ void BOOST_REGEX_CALL set_base(BidiIterator pos)
+ {
+ m_base = pos;
+ }
+ BidiIterator base()const
+ {
+ return m_base;
+ }
+ void BOOST_REGEX_CALL set_first(BidiIterator i)
+ {
+ // set up prefix:
+ m_subs[1].second = i;
+ m_subs[1].matched = (m_subs[1].first != i);
+ // set up $0:
+ m_subs[2].first = i;
+ // zero out everything else:
+ for(size_type n = 3; n < m_subs.size(); ++n)
+ {
+ m_subs[n].first = m_subs[n].second = m_subs[0].second;
+ m_subs[n].matched = false;
+ }
+ }
+ void BOOST_REGEX_CALL set_first(BidiIterator i, size_type pos)
+ {
+ BOOST_ASSERT(pos+2 < m_subs.size());
+ if(pos)
+ m_subs[pos+2].first = i;
+ else
+ set_first(i);
+ }
+ void BOOST_REGEX_CALL maybe_assign(const match_results<BidiIterator, Allocator>& m);
+
+
+private:
+ vector_type m_subs; // subexpressions
+ BidiIterator m_base; // where the search started from
+ sub_match<BidiIterator> m_null; // a null match
+};
+
+template <class BidiIterator, class Allocator>
+void BOOST_REGEX_CALL match_results<BidiIterator, Allocator>::maybe_assign(const match_results<BidiIterator, Allocator>& m)
+{
+ const_iterator p1, p2;
+ p1 = begin();
+ p2 = m.begin();
+ //
+ // Distances are measured from the start of *this* match, unless this isn't
+ // a valid match in which case we use the start of the whole sequence. Note that
+ // no subsequent match-candidate can ever be to the left of the first match found.
+ // This ensures that when we are using bidirectional iterators, that distances
+ // measured are as short as possible, and therefore as efficient as possible
+ // to compute. Finally note that we don't use the "matched" data member to test
+ // whether a sub-expression is a valid match, because partial matches set this
+ // to false for sub-expression 0.
+ //
+ BidiIterator l_end = this->suffix().second;
+ BidiIterator l_base = (p1->first == l_end) ? this->prefix().first : (*this)[0].first;
+ difference_type len1 = 0;
+ difference_type len2 = 0;
+ difference_type base1 = 0;
+ difference_type base2 = 0;
+ std::size_t i;
+ for(i = 0; i < size(); ++i, ++p1, ++p2)
+ {
+ //
+ // Leftmost takes priority over longest; handle special cases
+ // where distances need not be computed first (an optimisation
+ // for bidirectional iterators: ensure that we don't accidently
+ // compute the length of the whole sequence, as this can be really
+ // expensive).
+ //
+ if(p1->first == l_end)
+ {
+ if(p2->first != l_end)
+ {
+ // p2 must be better than p1, and no need to calculate
+ // actual distances:
+ base1 = 1;
+ base2 = 0;
+ break;
+ }
+ else
+ {
+ // *p1 and *p2 are either unmatched or match end-of sequence,
+ // either way no need to calculate distances:
+ if((p1->matched == false) && (p2->matched == true))
+ break;
+ if((p1->matched == true) && (p2->matched == false))
+ return;
+ continue;
+ }
+ }
+ else if(p2->first == l_end)
+ {
+ // p1 better than p2, and no need to calculate distances:
+ return;
+ }
+ base1 = ::boost::re_detail::distance(l_base, p1->first);
+ base2 = ::boost::re_detail::distance(l_base, p2->first);
+ BOOST_ASSERT(base1 >= 0);
+ BOOST_ASSERT(base2 >= 0);
+ if(base1 < base2) return;
+ if(base2 < base1) break;
+
+ len1 = ::boost::re_detail::distance((BidiIterator)p1->first, (BidiIterator)p1->second);
+ len2 = ::boost::re_detail::distance((BidiIterator)p2->first, (BidiIterator)p2->second);
+ BOOST_ASSERT(len1 >= 0);
+ BOOST_ASSERT(len2 >= 0);
+ if((len1 != len2) || ((p1->matched == false) && (p2->matched == true)))
+ break;
+ if((p1->matched == true) && (p2->matched == false))
+ return;
+ }
+ if(i == size())
+ return;
+ if(base2 < base1)
+ *this = m;
+ else if((len2 > len1) || ((p1->matched == false) && (p2->matched == true)) )
+ *this = m;
+}
+
+template <class BidiIterator, class Allocator>
+void swap(match_results<BidiIterator, Allocator>& a, match_results<BidiIterator, Allocator>& b)
+{
+ a.swap(b);
+}
+
+#ifndef BOOST_NO_STD_LOCALE
+template <class charT, class traits, class BidiIterator, class Allocator>
+std::basic_ostream<charT, traits>&
+ operator << (std::basic_ostream<charT, traits>& os,
+ const match_results<BidiIterator, Allocator>& s)
+{
+ return (os << s.str());
+}
+#else
+template <class BidiIterator, class Allocator>
+std::ostream& operator << (std::ostream& os,
+ const match_results<BidiIterator, Allocator>& s)
+{
+ return (os << s.str());
+}
+#endif
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+} // namespace boost
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif
+
+
diff --git a/boost/boost/regex/v4/mem_block_cache.hpp b/boost/boost/regex/v4/mem_block_cache.hpp
new file mode 100644
index 00000000000..222142dd69c
--- /dev/null
+++ b/boost/boost/regex/v4/mem_block_cache.hpp
@@ -0,0 +1,99 @@
+ /*
+ * Copyright (c) 2002
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE mem_block_cache.hpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: memory block cache used by the non-recursive matcher.
+ */
+
+#ifndef BOOST_REGEX_V4_MEM_BLOCK_CACHE_HPP
+#define BOOST_REGEX_V4_MEM_BLOCK_CACHE_HPP
+
+#include <new>
+#ifdef BOOST_HAS_THREADS
+#include <boost/regex/pending/static_mutex.hpp>
+#endif
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+namespace boost{
+namespace re_detail{
+
+struct mem_block_node
+{
+ mem_block_node* next;
+};
+
+struct mem_block_cache
+{
+ // this member has to be statically initialsed:
+ mem_block_node* next;
+ unsigned cached_blocks;
+#ifdef BOOST_HAS_THREADS
+ boost::static_mutex mut;
+#endif
+
+ ~mem_block_cache()
+ {
+ while(next)
+ {
+ mem_block_node* old = next;
+ next = next->next;
+ ::operator delete(old);
+ }
+ }
+ void* get()
+ {
+#ifdef BOOST_HAS_THREADS
+ boost::static_mutex::scoped_lock g(mut);
+#endif
+ if(next)
+ {
+ mem_block_node* result = next;
+ next = next->next;
+ --cached_blocks;
+ return result;
+ }
+ return ::operator new(BOOST_REGEX_BLOCKSIZE);
+ }
+ void put(void* p)
+ {
+#ifdef BOOST_HAS_THREADS
+ boost::static_mutex::scoped_lock g(mut);
+#endif
+ if(cached_blocks >= BOOST_REGEX_MAX_CACHE_BLOCKS)
+ {
+ ::operator delete(p);
+ }
+ else
+ {
+ mem_block_node* old = static_cast<mem_block_node*>(p);
+ old->next = next;
+ next = old;
+ ++cached_blocks;
+ }
+ }
+};
+
+extern mem_block_cache block_cache;
+
+}
+} // namespace boost
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif
+
diff --git a/boost/boost/regex/v4/perl_matcher.hpp b/boost/boost/regex/v4/perl_matcher.hpp
new file mode 100644
index 00000000000..73a046c6b85
--- /dev/null
+++ b/boost/boost/regex/v4/perl_matcher.hpp
@@ -0,0 +1,527 @@
+/*
+ *
+ * Copyright (c) 2002
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+#ifndef BOOST_REGEX_MATCHER_HPP
+#define BOOST_REGEX_MATCHER_HPP
+
+#include <boost/regex/v4/iterator_category.hpp>
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+namespace boost{
+namespace re_detail{
+
+//
+// error checking API:
+//
+BOOST_REGEX_DECL void BOOST_REGEX_CALL verify_options(boost::regex_constants::syntax_option_type ef, match_flag_type mf);
+//
+// function can_start:
+//
+template <class charT>
+inline bool can_start(charT c, const unsigned char* map, unsigned char mask)
+{
+ return ((c < static_cast<charT>(0)) ? true : ((c >= static_cast<charT>(1 << CHAR_BIT)) ? true : map[c] & mask));
+}
+inline bool can_start(char c, const unsigned char* map, unsigned char mask)
+{
+ return map[(unsigned char)c] & mask;
+}
+inline bool can_start(signed char c, const unsigned char* map, unsigned char mask)
+{
+ return map[(unsigned char)c] & mask;
+}
+inline bool can_start(unsigned char c, const unsigned char* map, unsigned char mask)
+{
+ return map[c] & mask;
+}
+inline bool can_start(unsigned short c, const unsigned char* map, unsigned char mask)
+{
+ return ((c >= (1 << CHAR_BIT)) ? true : map[c] & mask);
+}
+#if !defined(__hpux) // can't use WCHAR_MIN in pp-directive
+#if defined(WCHAR_MIN) && (WCHAR_MIN == 0) && !defined(BOOST_NO_INTRINSIC_WCHAR_T)
+inline bool can_start(wchar_t c, const unsigned char* map, unsigned char mask)
+{
+ return ((c >= (1 << CHAR_BIT)) ? true : map[c] & mask);
+}
+#endif
+#endif
+
+
+//
+// Unfortunately Rogue Waves standard library appears to have a bug
+// in std::basic_string::compare that results in eroneous answers
+// in some cases (tested with Borland C++ 5.1, Rogue Wave lib version
+// 0x020101) the test case was:
+// {39135,0} < {0xff,0}
+// which succeeds when it should not.
+//
+#ifndef _RWSTD_VER
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1310)
+template <class C, class T, class A>
+inline int string_compare(const std::basic_string<C,T,A>& s, const C* p)
+{
+ if(0 == *p)
+ {
+ if(s.empty() || ((s.size() == 1) && (s[0] == 0)))
+ return 0;
+ }
+ return s.compare(p);
+}
+#endif
+#else
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1310)
+template <class C, class T, class A>
+inline int string_compare(const std::basic_string<C,T,A>& s, const C* p)
+{
+ if(0 == *p)
+ {
+ if(s.empty() || ((s.size() == 1) && (s[0] == 0)))
+ return 0;
+ }
+ return s.compare(p);
+}
+#endif
+inline int string_compare(const std::string& s, const char* p)
+{ return std::strcmp(s.c_str(), p); }
+# ifndef BOOST_NO_WREGEX
+inline int string_compare(const std::wstring& s, const wchar_t* p)
+{ return std::wcscmp(s.c_str(), p); }
+#endif
+#endif
+template <class Seq, class C>
+inline int string_compare(const Seq& s, const C* p)
+{
+ std::size_t i = 0;
+ while((i < s.size()) && (p[i] == s[i]))
+ {
+ ++i;
+ }
+ return (i == s.size()) ? -p[i] : s[i] - p[i];
+}
+# define STR_COMP(s,p) string_compare(s,p)
+
+template<class charT>
+inline const charT* re_skip_past_null(const charT* p)
+{
+ while (*p != static_cast<charT>(0)) ++p;
+ return ++p;
+}
+
+template <class iterator, class charT, class traits_type, class char_classT>
+iterator BOOST_REGEX_CALL re_is_set_member(iterator next,
+ iterator last,
+ const re_set_long<char_classT>* set_,
+ const regex_data<charT, traits_type>& e, bool icase)
+{
+ const charT* p = reinterpret_cast<const charT*>(set_+1);
+ iterator ptr;
+ unsigned int i;
+ //bool icase = e.m_flags & regex_constants::icase;
+
+ if(next == last) return next;
+
+ typedef typename traits_type::string_type traits_string_type;
+ const ::boost::regex_traits_wrapper<traits_type>& traits_inst = *(e.m_ptraits);
+
+ // dwa 9/13/00 suppress incorrect MSVC warning - it claims this is never
+ // referenced
+ (void)traits_inst;
+
+ // try and match a single character, could be a multi-character
+ // collating element...
+ for(i = 0; i < set_->csingles; ++i)
+ {
+ ptr = next;
+ if(*p == static_cast<charT>(0))
+ {
+ // treat null string as special case:
+ if(traits_inst.translate(*ptr, icase) != *p)
+ {
+ while(*p == static_cast<charT>(0))++p;
+ continue;
+ }
+ return set_->isnot ? next : (ptr == next) ? ++next : ptr;
+ }
+ else
+ {
+ while(*p && (ptr != last))
+ {
+ if(traits_inst.translate(*ptr, icase) != *p)
+ break;
+ ++p;
+ ++ptr;
+ }
+
+ if(*p == static_cast<charT>(0)) // if null we've matched
+ return set_->isnot ? next : (ptr == next) ? ++next : ptr;
+
+ p = re_skip_past_null(p); // skip null
+ }
+ }
+
+ charT col = traits_inst.translate(*next, icase);
+
+
+ if(set_->cranges || set_->cequivalents)
+ {
+ traits_string_type s1;
+ //
+ // try and match a range, NB only a single character can match
+ if(set_->cranges)
+ {
+ if((e.m_flags & regex_constants::collate) == 0)
+ s1.assign(1, col);
+ else
+ {
+ charT a[2] = { col, charT(0), };
+ s1 = traits_inst.transform(a, a + 1);
+ }
+ for(i = 0; i < set_->cranges; ++i)
+ {
+ if(STR_COMP(s1, p) >= 0)
+ {
+ do{ ++p; }while(*p);
+ ++p;
+ if(STR_COMP(s1, p) <= 0)
+ return set_->isnot ? next : ++next;
+ }
+ else
+ {
+ // skip first string
+ do{ ++p; }while(*p);
+ ++p;
+ }
+ // skip second string
+ do{ ++p; }while(*p);
+ ++p;
+ }
+ }
+ //
+ // try and match an equivalence class, NB only a single character can match
+ if(set_->cequivalents)
+ {
+ charT a[2] = { col, charT(0), };
+ s1 = traits_inst.transform_primary(a, a +1);
+ for(i = 0; i < set_->cequivalents; ++i)
+ {
+ if(STR_COMP(s1, p) == 0)
+ return set_->isnot ? next : ++next;
+ // skip string
+ do{ ++p; }while(*p);
+ ++p;
+ }
+ }
+ }
+ if(traits_inst.isctype(col, set_->cclasses) == true)
+ return set_->isnot ? next : ++next;
+ if((set_->cnclasses != 0) && (traits_inst.isctype(col, set_->cnclasses) == false))
+ return set_->isnot ? next : ++next;
+ return set_->isnot ? ++next : next;
+}
+
+template <class BidiIterator>
+class repeater_count
+{
+ repeater_count** stack;
+ repeater_count* next;
+ int id;
+ std::size_t count; // the number of iterations so far
+ BidiIterator start_pos; // where the last repeat started
+public:
+ repeater_count(repeater_count** s)
+ {
+ stack = s;
+ next = 0;
+ id = -1;
+ count = 0;
+ }
+ repeater_count(int i, repeater_count** s, BidiIterator start)
+ : start_pos(start)
+ {
+ id = i;
+ stack = s;
+ next = *stack;
+ *stack = this;
+ if(id > next->id)
+ count = 0;
+ else
+ {
+ repeater_count* p = next;
+ while(p->id != id)
+ p = p->next;
+ count = p->count;
+ start_pos = p->start_pos;
+ }
+ }
+ ~repeater_count()
+ {
+ *stack = next;
+ }
+ std::size_t get_count() { return count; }
+ int get_id() { return id; }
+ std::size_t operator++() { return ++count; }
+ bool check_null_repeat(const BidiIterator& pos, std::size_t max)
+ {
+ // this is called when we are about to start a new repeat,
+ // if the last one was NULL move our count to max,
+ // otherwise save the current position.
+ bool result = (count == 0) ? false : (pos == start_pos);
+ if(result)
+ count = max;
+ else
+ start_pos = pos;
+ return result;
+ }
+};
+
+struct saved_state;
+
+enum saved_state_type
+{
+ saved_type_end = 0,
+ saved_type_paren = 1,
+ saved_type_recurse = 2,
+ saved_type_assertion = 3,
+ saved_state_alt = 4,
+ saved_state_repeater_count = 5,
+ saved_state_extra_block = 6,
+ saved_state_greedy_single_repeat = 7,
+ saved_state_rep_slow_dot = 8,
+ saved_state_rep_fast_dot = 9,
+ saved_state_rep_char = 10,
+ saved_state_rep_short_set = 11,
+ saved_state_rep_long_set = 12,
+ saved_state_non_greedy_long_repeat = 13,
+ saved_state_count = 14
+};
+
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable : 4251 4231 4660)
+#endif
+
+template <class BidiIterator, class Allocator, class traits>
+class perl_matcher
+{
+public:
+ typedef typename traits::char_type char_type;
+ typedef perl_matcher<BidiIterator, Allocator, traits> self_type;
+ typedef bool (self_type::*matcher_proc_type)(void);
+ typedef typename traits::size_type traits_size_type;
+ typedef typename is_byte<char_type>::width_type width_type;
+ typedef typename regex_iterator_traits<BidiIterator>::difference_type difference_type;
+
+ perl_matcher(BidiIterator first, BidiIterator end,
+ match_results<BidiIterator, Allocator>& what,
+ const basic_regex<char_type, traits>& e,
+ match_flag_type f,
+ BidiIterator l_base)
+ : m_result(what), base(first), last(end),
+ position(first), backstop(l_base), re(e), traits_inst(e.get_traits()),
+ m_independent(false), next_count(&rep_obj), rep_obj(&next_count)
+ {
+ construct_init(e, f);
+ }
+
+ bool match();
+ bool find();
+
+ void setf(match_flag_type f)
+ { m_match_flags |= f; }
+ void unsetf(match_flag_type f)
+ { m_match_flags &= ~f; }
+
+private:
+ void construct_init(const basic_regex<char_type, traits>& e, match_flag_type f);
+
+ bool find_imp();
+ bool match_imp();
+#ifdef BOOST_REGEX_HAS_MS_STACK_GUARD
+ typedef bool (perl_matcher::*protected_proc_type)();
+ bool protected_call(protected_proc_type);
+#endif
+ void estimate_max_state_count(std::random_access_iterator_tag*);
+ void estimate_max_state_count(void*);
+ bool match_prefix();
+ bool match_all_states();
+
+ // match procs, stored in s_match_vtable:
+ bool match_startmark();
+ bool match_endmark();
+ bool match_literal();
+ bool match_start_line();
+ bool match_end_line();
+ bool match_wild();
+ bool match_match();
+ bool match_word_boundary();
+ bool match_within_word();
+ bool match_word_start();
+ bool match_word_end();
+ bool match_buffer_start();
+ bool match_buffer_end();
+ bool match_backref();
+ bool match_long_set();
+ bool match_set();
+ bool match_jump();
+ bool match_alt();
+ bool match_rep();
+ bool match_combining();
+ bool match_soft_buffer_end();
+ bool match_restart_continue();
+ bool match_long_set_repeat();
+ bool match_set_repeat();
+ bool match_char_repeat();
+ bool match_dot_repeat_fast();
+ bool match_dot_repeat_slow();
+ bool match_backstep();
+ bool match_assert_backref();
+ bool match_toggle_case();
+#ifdef BOOST_REGEX_RECURSIVE
+ bool backtrack_till_match(std::size_t count);
+#endif
+
+ // find procs stored in s_find_vtable:
+ bool find_restart_any();
+ bool find_restart_word();
+ bool find_restart_line();
+ bool find_restart_buf();
+ bool find_restart_lit();
+
+private:
+ // final result structure to be filled in:
+ match_results<BidiIterator, Allocator>& m_result;
+ // temporary result for POSIX matches:
+ scoped_ptr<match_results<BidiIterator, Allocator> > m_temp_match;
+ // pointer to actual result structure to fill in:
+ match_results<BidiIterator, Allocator>* m_presult;
+ // start of sequence being searched:
+ BidiIterator base;
+ // end of sequence being searched:
+ BidiIterator last;
+ // current character being examined:
+ BidiIterator position;
+ // where to restart next search after failed match attempt:
+ BidiIterator restart;
+ // where the current search started from, acts as base for $` during grep:
+ BidiIterator search_base;
+ // how far we can go back when matching lookbehind:
+ BidiIterator backstop;
+ // the expression being examined:
+ const basic_regex<char_type, traits>& re;
+ // the expression's traits class:
+ const ::boost::regex_traits_wrapper<traits>& traits_inst;
+ // the next state in the machine being matched:
+ const re_syntax_base* pstate;
+ // matching flags in use:
+ match_flag_type m_match_flags;
+ // how many states we have examined so far:
+ boost::uintmax_t state_count;
+ // max number of states to examine before giving up:
+ boost::uintmax_t max_state_count;
+ // whether we should ignore case or not:
+ bool icase;
+ // set to true when (position == last), indicates that we may have a partial match:
+ bool m_has_partial_match;
+ // set to true whenever we get a match:
+ bool m_has_found_match;
+ // set to true whenever we're inside an independent sub-expression:
+ bool m_independent;
+ // the current repeat being examined:
+ repeater_count<BidiIterator>* next_count;
+ // the first repeat being examined (top of linked list):
+ repeater_count<BidiIterator> rep_obj;
+ // the mask to pass when matching word boundaries:
+ typename traits::char_class_type m_word_mask;
+ // the bitmask to use when determining whether a match_any matches a newline or not:
+ unsigned char match_any_mask;
+
+#ifdef BOOST_REGEX_NON_RECURSIVE
+ //
+ // additional members for non-recursive version:
+ //
+ typedef bool (self_type::*unwind_proc_type)(bool);
+
+ void extend_stack();
+ bool unwind(bool);
+ bool unwind_end(bool);
+ bool unwind_paren(bool);
+ bool unwind_recursion_stopper(bool);
+ bool unwind_assertion(bool);
+ bool unwind_alt(bool);
+ bool unwind_repeater_counter(bool);
+ bool unwind_extra_block(bool);
+ bool unwind_greedy_single_repeat(bool);
+ bool unwind_slow_dot_repeat(bool);
+ bool unwind_fast_dot_repeat(bool);
+ bool unwind_char_repeat(bool);
+ bool unwind_short_set_repeat(bool);
+ bool unwind_long_set_repeat(bool);
+ bool unwind_non_greedy_repeat(bool);
+ void destroy_single_repeat();
+ void push_matched_paren(int index, const sub_match<BidiIterator>& sub);
+ void push_recursion_stopper();
+ void push_assertion(const re_syntax_base* ps, bool positive);
+ void push_alt(const re_syntax_base* ps);
+ void push_repeater_count(int i, repeater_count<BidiIterator>** s);
+ void push_single_repeat(std::size_t c, const re_repeat* r, BidiIterator last_position, int id);
+ void push_non_greedy_repeat(const re_syntax_base* ps);
+
+
+ // pointer to base of stack:
+ saved_state* m_stack_base;
+ // pointer to current stack position:
+ saved_state* m_backup_state;
+ // determines what value to return when unwinding from recursion,
+ // allows for mixed recursive/non-recursive algorithm:
+ bool m_recursive_result;
+ // how many memory blocks have we used up?:
+ unsigned used_block_count;
+#endif
+
+ // these operations aren't allowed, so are declared private,
+ // bodies are provided to keep explicit-instantiation requests happy:
+ perl_matcher& operator=(const perl_matcher&)
+ {
+ return *this;
+ }
+ perl_matcher(const perl_matcher& that)
+ : m_result(that.m_result), re(that.re), traits_inst(that.traits_inst), rep_obj(0) {}
+};
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+} // namespace re_detail
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+} // namespace boost
+
+//
+// include the implementation of perl_matcher:
+//
+#ifdef BOOST_REGEX_RECURSIVE
+#include <boost/regex/v4/perl_matcher_recursive.hpp>
+#else
+#include <boost/regex/v4/perl_matcher_non_recursive.hpp>
+#endif
+// this one has to be last:
+#include <boost/regex/v4/perl_matcher_common.hpp>
+
+#endif
+
diff --git a/boost/boost/regex/v4/perl_matcher_common.hpp b/boost/boost/regex/v4/perl_matcher_common.hpp
new file mode 100644
index 00000000000..1c222b87ddc
--- /dev/null
+++ b/boost/boost/regex/v4/perl_matcher_common.hpp
@@ -0,0 +1,949 @@
+/*
+ *
+ * Copyright (c) 2002
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE perl_matcher_common.cpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: Definitions of perl_matcher member functions that are
+ * common to both the recursive and non-recursive versions.
+ */
+
+#ifndef BOOST_REGEX_V4_PERL_MATCHER_COMMON_HPP
+#define BOOST_REGEX_V4_PERL_MATCHER_COMMON_HPP
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+#ifdef __BORLANDC__
+# pragma option push -w-8008 -w-8066
+#endif
+
+namespace boost{
+namespace re_detail{
+
+template <class BidiIterator, class Allocator, class traits>
+void perl_matcher<BidiIterator, Allocator, traits>::construct_init(const basic_regex<char_type, traits>& e, match_flag_type f)
+{
+ typedef typename regex_iterator_traits<BidiIterator>::iterator_category category;
+ typedef typename basic_regex<char_type, traits>::flag_type expression_flag_type;
+
+ if(e.empty())
+ {
+ // precondition failure: e is not a valid regex.
+ std::invalid_argument ex("Invalid regular expression object");
+ boost::throw_exception(ex);
+ }
+ pstate = 0;
+ m_match_flags = f;
+ estimate_max_state_count(static_cast<category*>(0));
+ expression_flag_type re_f = re.flags();
+ icase = re_f & regex_constants::icase;
+ if(!(m_match_flags & (match_perl|match_posix)))
+ {
+ if((re_f & (regbase::main_option_type|regbase::no_perl_ex)) == 0)
+ m_match_flags |= match_perl;
+ else if((re_f & (regbase::main_option_type|regbase::emacs_ex)) == (regbase::basic_syntax_group|regbase::emacs_ex))
+ m_match_flags |= match_perl;
+ else
+ m_match_flags |= match_posix;
+ }
+ if(m_match_flags & match_posix)
+ {
+ m_temp_match.reset(new match_results<BidiIterator, Allocator>());
+ m_presult = m_temp_match.get();
+ }
+ else
+ m_presult = &m_result;
+#ifdef BOOST_REGEX_NON_RECURSIVE
+ m_stack_base = 0;
+ m_backup_state = 0;
+#endif
+ // find the value to use for matching word boundaries:
+ m_word_mask = re.get_data().m_word_mask;
+ // find bitmask to use for matching '.':
+ match_any_mask = static_cast<unsigned char>((f & match_not_dot_newline) ? re_detail::test_not_newline : re_detail::test_newline);
+}
+
+template <class BidiIterator, class Allocator, class traits>
+void perl_matcher<BidiIterator, Allocator, traits>::estimate_max_state_count(std::random_access_iterator_tag*)
+{
+ //
+ // How many states should we allow our machine to visit before giving up?
+ // This is a heuristic: it takes the greater of O(N^2) and O(NS^2)
+ // where N is the length of the string, and S is the number of states
+ // in the machine. It's tempting to up this to O(N^2S) or even O(N^2S^2)
+ // but these take unreasonably amounts of time to bale out in pathological
+ // cases.
+ //
+ // Calculate NS^2 first:
+ //
+ static const boost::uintmax_t k = 100000;
+ boost::uintmax_t dist = boost::re_detail::distance(base, last);
+ if(dist == 0)
+ dist = 1;
+ boost::uintmax_t states = re.size();
+ if(states == 0)
+ states = 1;
+ states *= states;
+ if((std::numeric_limits<boost::uintmax_t>::max)() / dist < states)
+ {
+ max_state_count = (std::numeric_limits<boost::uintmax_t>::max)() - 2;
+ return;
+ }
+ states *= dist;
+ if((std::numeric_limits<boost::uintmax_t>::max)() - k < states)
+ {
+ max_state_count = (std::numeric_limits<boost::uintmax_t>::max)() - 2;
+ return;
+ }
+ states += k;
+
+ max_state_count = states;
+
+ //
+ // Now calculate N^2:
+ //
+ states = dist;
+ if((std::numeric_limits<boost::uintmax_t>::max)() / dist < states)
+ {
+ max_state_count = (std::numeric_limits<boost::uintmax_t>::max)() - 2;
+ return;
+ }
+ states *= dist;
+ if((std::numeric_limits<boost::uintmax_t>::max)() - k < states)
+ {
+ max_state_count = (std::numeric_limits<boost::uintmax_t>::max)() - 2;
+ return;
+ }
+ states += k;
+ //
+ // N^2 can be a very large number indeed, to prevent things getting out
+ // of control, cap the max states:
+ //
+ if(states > BOOST_REGEX_MAX_STATE_COUNT)
+ states = BOOST_REGEX_MAX_STATE_COUNT;
+ //
+ // If (the possibly capped) N^2 is larger than our first estimate,
+ // use this instead:
+ //
+ if(states > max_state_count)
+ max_state_count = states;
+}
+
+template <class BidiIterator, class Allocator, class traits>
+inline void perl_matcher<BidiIterator, Allocator, traits>::estimate_max_state_count(void*)
+{
+ // we don't know how long the sequence is:
+ max_state_count = BOOST_REGEX_MAX_STATE_COUNT;
+}
+
+#ifdef BOOST_REGEX_HAS_MS_STACK_GUARD
+template <class BidiIterator, class Allocator, class traits>
+inline bool perl_matcher<BidiIterator, Allocator, traits>::protected_call(
+ protected_proc_type proc)
+{
+ ::boost::re_detail::concrete_protected_call
+ <perl_matcher<BidiIterator, Allocator, traits> >
+ obj(this, proc);
+ return obj.execute();
+
+}
+#endif
+
+template <class BidiIterator, class Allocator, class traits>
+inline bool perl_matcher<BidiIterator, Allocator, traits>::match()
+{
+#ifdef BOOST_REGEX_HAS_MS_STACK_GUARD
+ return protected_call(&perl_matcher<BidiIterator, Allocator, traits>::match_imp);
+#else
+ return match_imp();
+#endif
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::match_imp()
+{
+ // initialise our stack if we are non-recursive:
+#ifdef BOOST_REGEX_NON_RECURSIVE
+ save_state_init init(&m_stack_base, &m_backup_state);
+ used_block_count = BOOST_REGEX_MAX_BLOCKS;
+#if !defined(BOOST_NO_EXCEPTIONS)
+ try{
+#endif
+#endif
+
+ // reset our state machine:
+ position = base;
+ search_base = base;
+ state_count = 0;
+ m_match_flags |= regex_constants::match_all;
+ m_presult->set_size((m_match_flags & match_nosubs) ? 1 : re.mark_count(), search_base, last);
+ m_presult->set_base(base);
+ if(m_match_flags & match_posix)
+ m_result = *m_presult;
+ verify_options(re.flags(), m_match_flags);
+ if(0 == match_prefix())
+ return false;
+ return m_result[0].second == last;
+
+#if defined(BOOST_REGEX_NON_RECURSIVE) && !defined(BOOST_NO_EXCEPTIONS)
+ }
+ catch(...)
+ {
+ // unwind all pushed states, apart from anything else this
+ // ensures that all the states are correctly destructed
+ // not just the memory freed.
+ while(unwind(true)){}
+ throw;
+ }
+#endif
+}
+
+template <class BidiIterator, class Allocator, class traits>
+inline bool perl_matcher<BidiIterator, Allocator, traits>::find()
+{
+#ifdef BOOST_REGEX_HAS_MS_STACK_GUARD
+ return protected_call(&perl_matcher<BidiIterator, Allocator, traits>::find_imp);
+#else
+ return find_imp();
+#endif
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::find_imp()
+{
+ static matcher_proc_type const s_find_vtable[7] =
+ {
+ &perl_matcher<BidiIterator, Allocator, traits>::find_restart_any,
+ &perl_matcher<BidiIterator, Allocator, traits>::find_restart_word,
+ &perl_matcher<BidiIterator, Allocator, traits>::find_restart_line,
+ &perl_matcher<BidiIterator, Allocator, traits>::find_restart_buf,
+ &perl_matcher<BidiIterator, Allocator, traits>::match_prefix,
+ &perl_matcher<BidiIterator, Allocator, traits>::find_restart_lit,
+ &perl_matcher<BidiIterator, Allocator, traits>::find_restart_lit,
+ };
+
+ // initialise our stack if we are non-recursive:
+#ifdef BOOST_REGEX_NON_RECURSIVE
+ save_state_init init(&m_stack_base, &m_backup_state);
+ used_block_count = BOOST_REGEX_MAX_BLOCKS;
+#if !defined(BOOST_NO_EXCEPTIONS)
+ try{
+#endif
+#endif
+
+ state_count = 0;
+ if((m_match_flags & regex_constants::match_init) == 0)
+ {
+ // reset our state machine:
+ search_base = position = base;
+ pstate = re.get_first_state();
+ m_presult->set_size((m_match_flags & match_nosubs) ? 1 : re.mark_count(), base, last);
+ m_presult->set_base(base);
+ m_match_flags |= regex_constants::match_init;
+ }
+ else
+ {
+ // start again:
+ search_base = position = m_result[0].second;
+ // If last match was null and match_not_null was not set then increment
+ // our start position, otherwise we go into an infinite loop:
+ if(((m_match_flags & match_not_null) == 0) && (m_result.length() == 0))
+ {
+ if(position == last)
+ return false;
+ else
+ ++position;
+ }
+ // reset $` start:
+ m_presult->set_size((m_match_flags & match_nosubs) ? 1 : re.mark_count(), search_base, last);
+ //if((base != search_base) && (base == backstop))
+ // m_match_flags |= match_prev_avail;
+ }
+ if(m_match_flags & match_posix)
+ {
+ m_result.set_size(re.mark_count(), base, last);
+ m_result.set_base(base);
+ }
+
+ verify_options(re.flags(), m_match_flags);
+ // find out what kind of expression we have:
+ unsigned type = (m_match_flags & match_continuous) ?
+ static_cast<unsigned int>(regbase::restart_continue)
+ : static_cast<unsigned int>(re.get_restart_type());
+
+ // call the appropriate search routine:
+ matcher_proc_type proc = s_find_vtable[type];
+ return (this->*proc)();
+
+#if defined(BOOST_REGEX_NON_RECURSIVE) && !defined(BOOST_NO_EXCEPTIONS)
+ }
+ catch(...)
+ {
+ // unwind all pushed states, apart from anything else this
+ // ensures that all the states are correctly destructed
+ // not just the memory freed.
+ while(unwind(true)){}
+ throw;
+ }
+#endif
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::match_prefix()
+{
+ m_has_partial_match = false;
+ m_has_found_match = false;
+ pstate = re.get_first_state();
+ m_presult->set_first(position);
+ restart = position;
+ match_all_states();
+ if(!m_has_found_match && m_has_partial_match && (m_match_flags & match_partial))
+ {
+ m_has_found_match = true;
+ m_presult->set_second(last, 0, false);
+ position = last;
+ }
+#ifdef BOOST_REGEX_MATCH_EXTRA
+ if(m_has_found_match && (match_extra & m_match_flags))
+ {
+ //
+ // we have a match, reverse the capture information:
+ //
+ for(unsigned i = 0; i < m_presult->size(); ++i)
+ {
+ typename sub_match<BidiIterator>::capture_sequence_type & seq = ((*m_presult)[i]).get_captures();
+ std::reverse(seq.begin(), seq.end());
+ }
+ }
+#endif
+ if(!m_has_found_match)
+ position = restart; // reset search postion
+ return m_has_found_match;
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::match_endmark()
+{
+ int index = static_cast<const re_brace*>(pstate)->index;
+ if(index > 0)
+ {
+ if((m_match_flags & match_nosubs) == 0)
+ m_presult->set_second(position, index);
+ }
+ else if((index < 0) && (index != -4))
+ {
+ // matched forward lookahead:
+ pstate = 0;
+ return true;
+ }
+ pstate = pstate->next.p;
+ return true;
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::match_literal()
+{
+ unsigned int len = static_cast<const re_literal*>(pstate)->length;
+ const char_type* what = reinterpret_cast<const char_type*>(static_cast<const re_literal*>(pstate) + 1);
+ //
+ // compare string with what we stored in
+ // our records:
+ for(unsigned int i = 0; i < len; ++i, ++position)
+ {
+ if((position == last) || (traits_inst.translate(*position, icase) != what[i]))
+ return false;
+ }
+ pstate = pstate->next.p;
+ return true;
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::match_start_line()
+{
+ if(position == backstop)
+ {
+ if((m_match_flags & match_prev_avail) == 0)
+ {
+ if((m_match_flags & match_not_bol) == 0)
+ {
+ pstate = pstate->next.p;
+ return true;
+ }
+ return false;
+ }
+ }
+ else if(m_match_flags & match_single_line)
+ return false;
+
+ // check the previous value character:
+ BidiIterator t(position);
+ --t;
+ if(position != last)
+ {
+ if(is_separator(*t) && !((*t == static_cast<char_type>('\r')) && (*position == static_cast<char_type>('\n'))) )
+ {
+ pstate = pstate->next.p;
+ return true;
+ }
+ }
+ else if(is_separator(*t))
+ {
+ pstate = pstate->next.p;
+ return true;
+ }
+ return false;
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::match_end_line()
+{
+ if(position != last)
+ {
+ if(m_match_flags & match_single_line)
+ return false;
+ // we're not yet at the end so *first is always valid:
+ if(is_separator(*position))
+ {
+ if((position != backstop) || (m_match_flags & match_prev_avail))
+ {
+ // check that we're not in the middle of \r\n sequence
+ BidiIterator t(position);
+ --t;
+ if((*t == static_cast<char_type>('\r')) && (*position == static_cast<char_type>('\n')))
+ {
+ return false;
+ }
+ }
+ pstate = pstate->next.p;
+ return true;
+ }
+ }
+ else if((m_match_flags & match_not_eol) == 0)
+ {
+ pstate = pstate->next.p;
+ return true;
+ }
+ return false;
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::match_wild()
+{
+ if(position == last)
+ return false;
+ if(is_separator(*position) && ((match_any_mask & static_cast<const re_dot*>(pstate)->mask) == 0))
+ return false;
+ if((*position == char_type(0)) && (m_match_flags & match_not_dot_null))
+ return false;
+ pstate = pstate->next.p;
+ ++position;
+ return true;
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::match_match()
+{
+ if((m_match_flags & match_not_null) && (position == (*m_presult)[0].first))
+ return false;
+ if((m_match_flags & match_all) && (position != last))
+ return false;
+ if((m_match_flags & regex_constants::match_not_initial_null) && (position == search_base))
+ return false;
+ m_presult->set_second(position);
+ pstate = 0;
+ m_has_found_match = true;
+ if((m_match_flags & match_posix) == match_posix)
+ {
+ m_result.maybe_assign(*m_presult);
+ if((m_match_flags & match_any) == 0)
+ return false;
+ }
+#ifdef BOOST_REGEX_MATCH_EXTRA
+ if(match_extra & m_match_flags)
+ {
+ for(unsigned i = 0; i < m_presult->size(); ++i)
+ if((*m_presult)[i].matched)
+ ((*m_presult)[i]).get_captures().push_back((*m_presult)[i]);
+ }
+#endif
+ return true;
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::match_word_boundary()
+{
+ bool b; // indcates whether next character is a word character
+ if(position != last)
+ {
+ // prev and this character must be opposites:
+ #if defined(BOOST_REGEX_USE_C_LOCALE) && defined(__GNUC__) && (__GNUC__ == 2) && (__GNUC_MINOR__ < 95)
+ b = traits::isctype(*position, m_word_mask);
+ #else
+ b = traits_inst.isctype(*position, m_word_mask);
+ #endif
+ }
+ else
+ {
+ b = (m_match_flags & match_not_eow) ? true : false;
+ }
+ if((position == backstop) && ((m_match_flags & match_prev_avail) == 0))
+ {
+ if(m_match_flags & match_not_bow)
+ b ^= true;
+ else
+ b ^= false;
+ }
+ else
+ {
+ --position;
+ b ^= traits_inst.isctype(*position, m_word_mask);
+ ++position;
+ }
+ if(b)
+ {
+ pstate = pstate->next.p;
+ return true;
+ }
+ return false; // no match if we get to here...
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::match_within_word()
+{
+ if(position == last)
+ return false;
+ // both prev and this character must be m_word_mask:
+ if(traits_inst.isctype(*position, m_word_mask))
+ {
+ bool b;
+ if((position == backstop) && ((m_match_flags & match_prev_avail) == 0))
+ return false;
+ else
+ {
+ --position;
+ b = traits_inst.isctype(*position, m_word_mask);
+ ++position;
+ }
+ if(b)
+ {
+ pstate = pstate->next.p;
+ return true;
+ }
+ }
+ return false;
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::match_word_start()
+{
+ if(position == last)
+ return false; // can't be starting a word if we're already at the end of input
+ if(!traits_inst.isctype(*position, m_word_mask))
+ return false; // next character isn't a word character
+ if((position == backstop) && ((m_match_flags & match_prev_avail) == 0))
+ {
+ if(m_match_flags & match_not_bow)
+ return false; // no previous input
+ }
+ else
+ {
+ // otherwise inside buffer:
+ BidiIterator t(position);
+ --t;
+ if(traits_inst.isctype(*t, m_word_mask))
+ return false; // previous character not non-word
+ }
+ // OK we have a match:
+ pstate = pstate->next.p;
+ return true;
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::match_word_end()
+{
+ if((position == backstop) && ((m_match_flags & match_prev_avail) == 0))
+ return false; // start of buffer can't be end of word
+ BidiIterator t(position);
+ --t;
+ if(traits_inst.isctype(*t, m_word_mask) == false)
+ return false; // previous character wasn't a word character
+
+ if(position == last)
+ {
+ if(m_match_flags & match_not_eow)
+ return false; // end of buffer but not end of word
+ }
+ else
+ {
+ // otherwise inside buffer:
+ if(traits_inst.isctype(*position, m_word_mask))
+ return false; // next character is a word character
+ }
+ pstate = pstate->next.p;
+ return true; // if we fall through to here then we've succeeded
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::match_buffer_start()
+{
+ if((position != backstop) || (m_match_flags & match_not_bob))
+ return false;
+ // OK match:
+ pstate = pstate->next.p;
+ return true;
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::match_buffer_end()
+{
+ if((position != last) || (m_match_flags & match_not_eob))
+ return false;
+ // OK match:
+ pstate = pstate->next.p;
+ return true;
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::match_backref()
+{
+ //
+ // Compare with what we previously matched.
+ // Note that this succeeds if the backref did not partisipate
+ // in the match, this is in line with ECMAScript, but not Perl
+ // or PCRE.
+ //
+ BidiIterator i = (*m_presult)[static_cast<const re_brace*>(pstate)->index].first;
+ BidiIterator j = (*m_presult)[static_cast<const re_brace*>(pstate)->index].second;
+ while(i != j)
+ {
+ if((position == last) || (traits_inst.translate(*position, icase) != traits_inst.translate(*i, icase)))
+ return false;
+ ++i;
+ ++position;
+ }
+ pstate = pstate->next.p;
+ return true;
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::match_long_set()
+{
+ typedef typename traits::char_class_type char_class_type;
+ // let the traits class do the work:
+ if(position == last)
+ return false;
+ BidiIterator t = re_is_set_member(position, last, static_cast<const re_set_long<char_class_type>*>(pstate), re.get_data(), icase);
+ if(t != position)
+ {
+ pstate = pstate->next.p;
+ position = t;
+ return true;
+ }
+ return false;
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::match_set()
+{
+ if(position == last)
+ return false;
+ if(static_cast<const re_set*>(pstate)->_map[static_cast<unsigned char>(traits_inst.translate(*position, icase))])
+ {
+ pstate = pstate->next.p;
+ ++position;
+ return true;
+ }
+ return false;
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::match_jump()
+{
+ pstate = static_cast<const re_jump*>(pstate)->alt.p;
+ return true;
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::match_combining()
+{
+ if(position == last)
+ return false;
+ if(is_combining(traits_inst.translate(*position, icase)))
+ return false;
+ ++position;
+ while((position != last) && is_combining(traits_inst.translate(*position, icase)))
+ ++position;
+ pstate = pstate->next.p;
+ return true;
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::match_soft_buffer_end()
+{
+ if(m_match_flags & match_not_eob)
+ return false;
+ BidiIterator p(position);
+ while((p != last) && is_separator(traits_inst.translate(*p, icase)))++p;
+ if(p != last)
+ return false;
+ pstate = pstate->next.p;
+ return true;
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::match_restart_continue()
+{
+ if(position == search_base)
+ {
+ pstate = pstate->next.p;
+ return true;
+ }
+ return false;
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::match_backstep()
+{
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable:4127)
+#endif
+ if( ::boost::is_random_access_iterator<BidiIterator>::value)
+ {
+ std::ptrdiff_t maxlen = ::boost::re_detail::distance(backstop, position);
+ if(maxlen < static_cast<const re_brace*>(pstate)->index)
+ return false;
+ std::advance(position, -static_cast<const re_brace*>(pstate)->index);
+ }
+ else
+ {
+ int c = static_cast<const re_brace*>(pstate)->index;
+ while(c--)
+ {
+ if(position == backstop)
+ return false;
+ --position;
+ }
+ }
+ pstate = pstate->next.p;
+ return true;
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+}
+
+template <class BidiIterator, class Allocator, class traits>
+inline bool perl_matcher<BidiIterator, Allocator, traits>::match_assert_backref()
+{
+ // return true if marked sub-expression N has been matched:
+ bool result = (*m_presult)[static_cast<const re_brace*>(pstate)->index].matched;
+ pstate = pstate->next.p;
+ return result;
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::match_toggle_case()
+{
+ // change our case sensitivity:
+ this->icase = static_cast<const re_case*>(pstate)->icase;
+ pstate = pstate->next.p;
+ return true;
+}
+
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::find_restart_any()
+{
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable:4127)
+#endif
+ const unsigned char* _map = re.get_map();
+ while(true)
+ {
+ // skip everything we can't match:
+ while((position != last) && !can_start(*position, _map, (unsigned char)mask_any) )
+ ++position;
+ if(position == last)
+ {
+ // run out of characters, try a null match if possible:
+ if(re.can_be_null())
+ return match_prefix();
+ break;
+ }
+ // now try and obtain a match:
+ if(match_prefix())
+ return true;
+ if(position == last)
+ return false;
+ ++position;
+ }
+ return false;
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::find_restart_word()
+{
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable:4127)
+#endif
+ // do search optimised for word starts:
+ const unsigned char* _map = re.get_map();
+ if((m_match_flags & match_prev_avail) || (position != base))
+ --position;
+ else if(match_prefix())
+ return true;
+ do
+ {
+ while((position != last) && traits_inst.isctype(*position, m_word_mask))
+ ++position;
+ while((position != last) && !traits_inst.isctype(*position, m_word_mask))
+ ++position;
+ if(position == last)
+ break;
+
+ if(can_start(*position, _map, (unsigned char)mask_any) )
+ {
+ if(match_prefix())
+ return true;
+ }
+ if(position == last)
+ break;
+ } while(true);
+ return false;
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::find_restart_line()
+{
+ // do search optimised for line starts:
+ const unsigned char* _map = re.get_map();
+ if(match_prefix())
+ return true;
+ while(position != last)
+ {
+ while((position != last) && !is_separator(*position))
+ ++position;
+ if(position == last)
+ return false;
+ ++position;
+ if(position == last)
+ {
+ if(re.can_be_null() && match_prefix())
+ return true;
+ return false;
+ }
+
+ if( can_start(*position, _map, (unsigned char)mask_any) )
+ {
+ if(match_prefix())
+ return true;
+ }
+ if(position == last)
+ return false;
+ //++position;
+ }
+ return false;
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::find_restart_buf()
+{
+ if((position == base) && ((m_match_flags & match_not_bob) == 0))
+ return match_prefix();
+ return false;
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::find_restart_lit()
+{
+#if 0
+ if(position == last)
+ return false; // can't possibly match if we're at the end already
+
+ unsigned type = (m_match_flags & match_continuous) ?
+ static_cast<unsigned int>(regbase::restart_continue)
+ : static_cast<unsigned int>(re.get_restart_type());
+
+ const kmp_info<char_type>* info = access::get_kmp(re);
+ int len = info->len;
+ const char_type* x = info->pstr;
+ int j = 0;
+ while (position != last)
+ {
+ while((j > -1) && (x[j] != traits_inst.translate(*position, icase)))
+ j = info->kmp_next[j];
+ ++position;
+ ++j;
+ if(j >= len)
+ {
+ if(type == regbase::restart_fixed_lit)
+ {
+ std::advance(position, -j);
+ restart = position;
+ std::advance(restart, len);
+ m_result.set_first(position);
+ m_result.set_second(restart);
+ position = restart;
+ return true;
+ }
+ else
+ {
+ restart = position;
+ std::advance(position, -j);
+ if(match_prefix())
+ return true;
+ else
+ {
+ for(int k = 0; (restart != position) && (k < j); ++k, --restart)
+ {} // dwa 10/20/2000 - warning suppression for MWCW
+ if(restart != last)
+ ++restart;
+ position = restart;
+ j = 0; //we could do better than this...
+ }
+ }
+ }
+ }
+ if((m_match_flags & match_partial) && (position == last) && j)
+ {
+ // we need to check for a partial match:
+ restart = position;
+ std::advance(position, -j);
+ return match_prefix();
+ }
+#endif
+ return false;
+}
+
+} // namespace re_detail
+
+} // namespace boost
+
+#ifdef __BORLANDC__
+# pragma option pop
+#endif
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif
+
diff --git a/boost/boost/regex/v4/perl_matcher_non_recursive.hpp b/boost/boost/regex/v4/perl_matcher_non_recursive.hpp
new file mode 100644
index 00000000000..c055b383591
--- /dev/null
+++ b/boost/boost/regex/v4/perl_matcher_non_recursive.hpp
@@ -0,0 +1,1367 @@
+/*
+ *
+ * Copyright (c) 2002
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE perl_matcher_common.cpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: Definitions of perl_matcher member functions that are
+ * specific to the non-recursive implementation.
+ */
+
+#ifndef BOOST_REGEX_V4_PERL_MATCHER_NON_RECURSIVE_HPP
+#define BOOST_REGEX_V4_PERL_MATCHER_NON_RECURSIVE_HPP
+
+#include <new>
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+namespace boost{
+namespace re_detail{
+
+template <class T>
+inline void inplace_destroy(T* p)
+{
+ (void)p; // warning suppression
+ p->~T();
+}
+
+struct saved_state
+{
+ union{
+ unsigned int id;
+ // this padding ensures correct alignment on 64-bit platforms:
+ std::size_t padding1;
+ std::ptrdiff_t padding2;
+ void* padding3;
+ };
+ saved_state(unsigned i) : id(i) {}
+};
+
+template <class BidiIterator>
+struct saved_matched_paren : public saved_state
+{
+ int index;
+ sub_match<BidiIterator> sub;
+ saved_matched_paren(int i, const sub_match<BidiIterator>& s) : saved_state(1), index(i), sub(s){};
+};
+
+template <class BidiIterator>
+struct saved_position : public saved_state
+{
+ const re_syntax_base* pstate;
+ BidiIterator position;
+ saved_position(const re_syntax_base* ps, BidiIterator pos, int i) : saved_state(i), pstate(ps), position(pos){};
+};
+
+template <class BidiIterator>
+struct saved_assertion : public saved_position<BidiIterator>
+{
+ bool positive;
+ saved_assertion(bool p, const re_syntax_base* ps, BidiIterator pos)
+ : saved_position<BidiIterator>(ps, pos, saved_type_assertion), positive(p){};
+};
+
+template <class BidiIterator>
+struct saved_repeater : public saved_state
+{
+ repeater_count<BidiIterator> count;
+ saved_repeater(int i, repeater_count<BidiIterator>** s, BidiIterator start)
+ : saved_state(saved_state_repeater_count), count(i,s,start){}
+};
+
+struct saved_extra_block : public saved_state
+{
+ saved_state *base, *end;
+ saved_extra_block(saved_state* b, saved_state* e)
+ : saved_state(saved_state_extra_block), base(b), end(e) {}
+};
+
+struct save_state_init
+{
+ saved_state** stack;
+ save_state_init(saved_state** base, saved_state** end)
+ : stack(base)
+ {
+ *base = static_cast<saved_state*>(get_mem_block());
+ *end = reinterpret_cast<saved_state*>(reinterpret_cast<char*>(*base)+BOOST_REGEX_BLOCKSIZE);
+ --(*end);
+ (void) new (*end)saved_state(0);
+ BOOST_ASSERT(*end > *base);
+ }
+ ~save_state_init()
+ {
+ put_mem_block(*stack);
+ *stack = 0;
+ }
+};
+
+template <class BidiIterator>
+struct saved_single_repeat : public saved_state
+{
+ std::size_t count;
+ const re_repeat* rep;
+ BidiIterator last_position;
+ saved_single_repeat(std::size_t c, const re_repeat* r, BidiIterator lp, int arg_id)
+ : saved_state(arg_id), count(c), rep(r), last_position(lp){}
+};
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::match_all_states()
+{
+ static matcher_proc_type const s_match_vtable[29] =
+ {
+ (&perl_matcher<BidiIterator, Allocator, traits>::match_startmark),
+ &perl_matcher<BidiIterator, Allocator, traits>::match_endmark,
+ &perl_matcher<BidiIterator, Allocator, traits>::match_literal,
+ &perl_matcher<BidiIterator, Allocator, traits>::match_start_line,
+ &perl_matcher<BidiIterator, Allocator, traits>::match_end_line,
+ &perl_matcher<BidiIterator, Allocator, traits>::match_wild,
+ &perl_matcher<BidiIterator, Allocator, traits>::match_match,
+ &perl_matcher<BidiIterator, Allocator, traits>::match_word_boundary,
+ &perl_matcher<BidiIterator, Allocator, traits>::match_within_word,
+ &perl_matcher<BidiIterator, Allocator, traits>::match_word_start,
+ &perl_matcher<BidiIterator, Allocator, traits>::match_word_end,
+ &perl_matcher<BidiIterator, Allocator, traits>::match_buffer_start,
+ &perl_matcher<BidiIterator, Allocator, traits>::match_buffer_end,
+ &perl_matcher<BidiIterator, Allocator, traits>::match_backref,
+ &perl_matcher<BidiIterator, Allocator, traits>::match_long_set,
+ &perl_matcher<BidiIterator, Allocator, traits>::match_set,
+ &perl_matcher<BidiIterator, Allocator, traits>::match_jump,
+ &perl_matcher<BidiIterator, Allocator, traits>::match_alt,
+ &perl_matcher<BidiIterator, Allocator, traits>::match_rep,
+ &perl_matcher<BidiIterator, Allocator, traits>::match_combining,
+ &perl_matcher<BidiIterator, Allocator, traits>::match_soft_buffer_end,
+ &perl_matcher<BidiIterator, Allocator, traits>::match_restart_continue,
+ (::boost::is_random_access_iterator<BidiIterator>::value ? &perl_matcher<BidiIterator, Allocator, traits>::match_dot_repeat_fast : &perl_matcher<BidiIterator, Allocator, traits>::match_dot_repeat_slow),
+ &perl_matcher<BidiIterator, Allocator, traits>::match_char_repeat,
+ &perl_matcher<BidiIterator, Allocator, traits>::match_set_repeat,
+ &perl_matcher<BidiIterator, Allocator, traits>::match_long_set_repeat,
+ &perl_matcher<BidiIterator, Allocator, traits>::match_backstep,
+ &perl_matcher<BidiIterator, Allocator, traits>::match_assert_backref,
+ &perl_matcher<BidiIterator, Allocator, traits>::match_toggle_case,
+ };
+
+ push_recursion_stopper();
+ do{
+ while(pstate)
+ {
+ matcher_proc_type proc = s_match_vtable[pstate->type];
+ ++state_count;
+ if(!(this->*proc)())
+ {
+ if(state_count > max_state_count)
+ raise_error(traits_inst, regex_constants::error_space);
+ if((m_match_flags & match_partial) && (position == last) && (position != search_base))
+ m_has_partial_match = true;
+ bool successful_unwind = unwind(false);
+ if((m_match_flags & match_partial) && (position == last) && (position != search_base))
+ m_has_partial_match = true;
+ if(false == successful_unwind)
+ return m_recursive_result;
+ }
+ }
+ }while(unwind(true));
+ return m_recursive_result;
+}
+
+template <class BidiIterator, class Allocator, class traits>
+void perl_matcher<BidiIterator, Allocator, traits>::extend_stack()
+{
+ if(used_block_count)
+ {
+ --used_block_count;
+ saved_state* stack_base;
+ saved_state* backup_state;
+ stack_base = static_cast<saved_state*>(get_mem_block());
+ backup_state = reinterpret_cast<saved_state*>(reinterpret_cast<char*>(stack_base)+BOOST_REGEX_BLOCKSIZE);
+ saved_extra_block* block = static_cast<saved_extra_block*>(backup_state);
+ --block;
+ (void) new (block) saved_extra_block(m_stack_base, m_backup_state);
+ m_stack_base = stack_base;
+ m_backup_state = block;
+ }
+ else
+ raise_error(traits_inst, regex_constants::error_size);
+}
+
+template <class BidiIterator, class Allocator, class traits>
+inline void perl_matcher<BidiIterator, Allocator, traits>::push_matched_paren(int index, const sub_match<BidiIterator>& sub)
+{
+ BOOST_ASSERT(index);
+ saved_matched_paren<BidiIterator>* pmp = static_cast<saved_matched_paren<BidiIterator>*>(m_backup_state);
+ --pmp;
+ if(pmp < m_stack_base)
+ {
+ extend_stack();
+ pmp = static_cast<saved_matched_paren<BidiIterator>*>(m_backup_state);
+ --pmp;
+ }
+ (void) new (pmp)saved_matched_paren<BidiIterator>(index, sub);
+ m_backup_state = pmp;
+}
+
+template <class BidiIterator, class Allocator, class traits>
+inline void perl_matcher<BidiIterator, Allocator, traits>::push_recursion_stopper()
+{
+ saved_state* pmp = m_backup_state;
+ --pmp;
+ if(pmp < m_stack_base)
+ {
+ extend_stack();
+ pmp = m_backup_state;
+ --pmp;
+ }
+ (void) new (pmp)saved_state(saved_type_recurse);
+ m_backup_state = pmp;
+}
+
+template <class BidiIterator, class Allocator, class traits>
+inline void perl_matcher<BidiIterator, Allocator, traits>::push_assertion(const re_syntax_base* ps, bool positive)
+{
+ saved_assertion<BidiIterator>* pmp = static_cast<saved_assertion<BidiIterator>*>(m_backup_state);
+ --pmp;
+ if(pmp < m_stack_base)
+ {
+ extend_stack();
+ pmp = static_cast<saved_assertion<BidiIterator>*>(m_backup_state);
+ --pmp;
+ }
+ (void) new (pmp)saved_assertion<BidiIterator>(positive, ps, position);
+ m_backup_state = pmp;
+}
+
+template <class BidiIterator, class Allocator, class traits>
+inline void perl_matcher<BidiIterator, Allocator, traits>::push_alt(const re_syntax_base* ps)
+{
+ saved_position<BidiIterator>* pmp = static_cast<saved_position<BidiIterator>*>(m_backup_state);
+ --pmp;
+ if(pmp < m_stack_base)
+ {
+ extend_stack();
+ pmp = static_cast<saved_position<BidiIterator>*>(m_backup_state);
+ --pmp;
+ }
+ (void) new (pmp)saved_position<BidiIterator>(ps, position, saved_state_alt);
+ m_backup_state = pmp;
+}
+
+template <class BidiIterator, class Allocator, class traits>
+inline void perl_matcher<BidiIterator, Allocator, traits>::push_non_greedy_repeat(const re_syntax_base* ps)
+{
+ saved_position<BidiIterator>* pmp = static_cast<saved_position<BidiIterator>*>(m_backup_state);
+ --pmp;
+ if(pmp < m_stack_base)
+ {
+ extend_stack();
+ pmp = static_cast<saved_position<BidiIterator>*>(m_backup_state);
+ --pmp;
+ }
+ (void) new (pmp)saved_position<BidiIterator>(ps, position, saved_state_non_greedy_long_repeat);
+ m_backup_state = pmp;
+}
+
+template <class BidiIterator, class Allocator, class traits>
+inline void perl_matcher<BidiIterator, Allocator, traits>::push_repeater_count(int i, repeater_count<BidiIterator>** s)
+{
+ saved_repeater<BidiIterator>* pmp = static_cast<saved_repeater<BidiIterator>*>(m_backup_state);
+ --pmp;
+ if(pmp < m_stack_base)
+ {
+ extend_stack();
+ pmp = static_cast<saved_repeater<BidiIterator>*>(m_backup_state);
+ --pmp;
+ }
+ (void) new (pmp)saved_repeater<BidiIterator>(i, s, position);
+ m_backup_state = pmp;
+}
+
+template <class BidiIterator, class Allocator, class traits>
+inline void perl_matcher<BidiIterator, Allocator, traits>::push_single_repeat(std::size_t c, const re_repeat* r, BidiIterator last_position, int id)
+{
+ saved_single_repeat<BidiIterator>* pmp = static_cast<saved_single_repeat<BidiIterator>*>(m_backup_state);
+ --pmp;
+ if(pmp < m_stack_base)
+ {
+ extend_stack();
+ pmp = static_cast<saved_single_repeat<BidiIterator>*>(m_backup_state);
+ --pmp;
+ }
+ (void) new (pmp)saved_single_repeat<BidiIterator>(c, r, last_position, id);
+ m_backup_state = pmp;
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::match_startmark()
+{
+ int index = static_cast<const re_brace*>(pstate)->index;
+ switch(index)
+ {
+ case 0:
+ pstate = pstate->next.p;
+ break;
+ case -1:
+ case -2:
+ {
+ // forward lookahead assert:
+ const re_syntax_base* next_pstate = static_cast<const re_jump*>(pstate->next.p)->alt.p->next.p;
+ pstate = pstate->next.p->next.p;
+ push_assertion(next_pstate, index == -1);
+ break;
+ }
+ case -3:
+ {
+ // independent sub-expression, currently this is always recursive:
+ bool old_independent = m_independent;
+ m_independent = true;
+ const re_syntax_base* next_pstate = static_cast<const re_jump*>(pstate->next.p)->alt.p->next.p;
+ pstate = pstate->next.p->next.p;
+ bool r = match_all_states();
+ pstate = next_pstate;
+ m_independent = old_independent;
+#ifdef BOOST_REGEX_MATCH_EXTRA
+ if(r && (m_match_flags & match_extra))
+ {
+ //
+ // our captures have been stored in *m_presult
+ // we need to unpack them, and insert them
+ // back in the right order when we unwind the stack:
+ //
+ match_results<BidiIterator, Allocator> temp_match(*m_presult);
+ unsigned i;
+ for(i = 0; i < temp_match.size(); ++i)
+ (*m_presult)[i].get_captures().clear();
+ // match everything else:
+ r = match_all_states();
+ // now place the stored captures back:
+ for(i = 0; i < temp_match.size(); ++i)
+ {
+ typedef typename sub_match<BidiIterator>::capture_sequence_type seq;
+ seq& s1 = (*m_presult)[i].get_captures();
+ const seq& s2 = temp_match[i].captures();
+ s1.insert(
+ s1.end(),
+ s2.begin(),
+ s2.end());
+ }
+ }
+#endif
+ return r;
+ }
+ case -4:
+ {
+ // conditional expression:
+ const re_alt* alt = static_cast<const re_alt*>(pstate->next.p);
+ BOOST_ASSERT(alt->type == syntax_element_alt);
+ pstate = alt->next.p;
+ if(pstate->type == syntax_element_assert_backref)
+ {
+ if(!match_assert_backref())
+ pstate = alt->alt.p;
+ break;
+ }
+ else
+ {
+ // zero width assertion, have to match this recursively:
+ BOOST_ASSERT(pstate->type == syntax_element_startmark);
+ bool negated = static_cast<const re_brace*>(pstate)->index == -2;
+ BidiIterator saved_position = position;
+ const re_syntax_base* next_pstate = static_cast<const re_jump*>(pstate->next.p)->alt.p->next.p;
+ pstate = pstate->next.p->next.p;
+ bool r = match_all_states();
+ position = saved_position;
+ if(negated)
+ r = !r;
+ if(r)
+ pstate = next_pstate;
+ else
+ pstate = alt->alt.p;
+ break;
+ }
+ }
+ default:
+ {
+ BOOST_ASSERT(index > 0);
+ if((m_match_flags & match_nosubs) == 0)
+ {
+ push_matched_paren(index, (*m_presult)[index]);
+ m_presult->set_first(position, index);
+ }
+ pstate = pstate->next.p;
+ break;
+ }
+ }
+ return true;
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::match_alt()
+{
+ bool take_first, take_second;
+ const re_alt* jmp = static_cast<const re_alt*>(pstate);
+
+ // find out which of these two alternatives we need to take:
+ if(position == last)
+ {
+ take_first = jmp->can_be_null & mask_take;
+ take_second = jmp->can_be_null & mask_skip;
+ }
+ else
+ {
+ take_first = can_start(*position, jmp->_map, (unsigned char)mask_take);
+ take_second = can_start(*position, jmp->_map, (unsigned char)mask_skip);
+ }
+
+ if(take_first)
+ {
+ // we can take the first alternative,
+ // see if we need to push next alternative:
+ if(take_second)
+ {
+ push_alt(jmp->alt.p);
+ }
+ pstate = pstate->next.p;
+ return true;
+ }
+ if(take_second)
+ {
+ pstate = jmp->alt.p;
+ return true;
+ }
+ return false; // neither option is possible
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::match_rep()
+{
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable:4127 4244)
+#endif
+#ifdef __BORLANDC__
+#pragma option push -w-8008 -w-8066 -w-8004
+#endif
+ const re_repeat* rep = static_cast<const re_repeat*>(pstate);
+
+ // find out which of these two alternatives we need to take:
+ bool take_first, take_second;
+ if(position == last)
+ {
+ take_first = rep->can_be_null & mask_take;
+ take_second = rep->can_be_null & mask_skip;
+ }
+ else
+ {
+ take_first = can_start(*position, rep->_map, (unsigned char)mask_take);
+ take_second = can_start(*position, rep->_map, (unsigned char)mask_skip);
+ }
+
+ if(take_first || (next_count->get_id() != rep->id))
+ {
+ // we're moving to a different repeat from the last
+ // one, so set up a counter object:
+ push_repeater_count(rep->id, &next_count);
+ }
+ //
+ // If we've had at least one repeat already, and the last one
+ // matched the NULL string then set the repeat count to
+ // maximum:
+ //
+ next_count->check_null_repeat(position, rep->max);
+
+ if(next_count->get_count() < rep->min)
+ {
+ // we must take the repeat:
+ if(take_first)
+ {
+ // increase the counter:
+ ++(*next_count);
+ pstate = rep->next.p;
+ return true;
+ }
+ return false;
+ }
+
+ bool greedy = (rep->greedy) && (!(m_match_flags & regex_constants::match_any) || m_independent);
+ if(greedy)
+ {
+ // try and take the repeat if we can:
+ if((next_count->get_count() < rep->max) && take_first)
+ {
+ if(take_second)
+ {
+ // store position in case we fail:
+ push_alt(rep->alt.p);
+ }
+ // increase the counter:
+ ++(*next_count);
+ pstate = rep->next.p;
+ return true;
+ }
+ else if(take_second)
+ {
+ pstate = rep->alt.p;
+ return true;
+ }
+ return false; // can't take anything, fail...
+ }
+ else // non-greedy
+ {
+ // try and skip the repeat if we can:
+ if(take_second)
+ {
+ if((next_count->get_count() < rep->max) && take_first)
+ {
+ // store position in case we fail:
+ push_non_greedy_repeat(rep->next.p);
+ }
+ pstate = rep->alt.p;
+ return true;
+ }
+ if((next_count->get_count() < rep->max) && take_first)
+ {
+ // increase the counter:
+ ++(*next_count);
+ pstate = rep->next.p;
+ return true;
+ }
+ }
+ return false;
+#ifdef __BORLANDC__
+#pragma option pop
+#endif
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::match_dot_repeat_slow()
+{
+ unsigned count = 0;
+ const re_repeat* rep = static_cast<const re_repeat*>(pstate);
+ re_syntax_base* psingle = rep->next.p;
+ // match compulsary repeats first:
+ while(count < rep->min)
+ {
+ pstate = psingle;
+ if(!match_wild())
+ return false;
+ ++count;
+ }
+ bool greedy = (rep->greedy) && (!(m_match_flags & regex_constants::match_any) || m_independent);
+ if(greedy)
+ {
+ // repeat for as long as we can:
+ while(count < rep->max)
+ {
+ pstate = psingle;
+ if(!match_wild())
+ break;
+ ++count;
+ }
+ // remember where we got to if this is a leading repeat:
+ if((rep->leading) && (count < rep->max))
+ restart = position;
+ // push backtrack info if available:
+ if(count - rep->min)
+ push_single_repeat(count, rep, position, saved_state_greedy_single_repeat);
+ // jump to next state:
+ pstate = rep->alt.p;
+ return true;
+ }
+ else
+ {
+ // non-greedy, push state and return true if we can skip:
+ if(count < rep->max)
+ push_single_repeat(count, rep, position, saved_state_rep_slow_dot);
+ pstate = rep->alt.p;
+ return (position == last) ? (rep->can_be_null & mask_skip) : can_start(*position, rep->_map, mask_skip);
+ }
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::match_dot_repeat_fast()
+{
+ if(m_match_flags & match_not_dot_null)
+ return match_dot_repeat_slow();
+ if((static_cast<const re_dot*>(pstate->next.p)->mask & match_any_mask) == 0)
+ return match_dot_repeat_slow();
+
+ const re_repeat* rep = static_cast<const re_repeat*>(pstate);
+ bool greedy = (rep->greedy) && (!(m_match_flags & regex_constants::match_any) || m_independent);
+ unsigned count = static_cast<unsigned>((std::min)(static_cast<unsigned>(::boost::re_detail::distance(position, last)), static_cast<unsigned>(greedy ? rep->max : rep->min)));
+ if(rep->min > count)
+ {
+ position = last;
+ return false; // not enough text left to match
+ }
+ std::advance(position, count);
+
+ if(greedy)
+ {
+ if((rep->leading) && (count < rep->max))
+ restart = position;
+ // push backtrack info if available:
+ if(count - rep->min)
+ push_single_repeat(count, rep, position, saved_state_greedy_single_repeat);
+ // jump to next state:
+ pstate = rep->alt.p;
+ return true;
+ }
+ else
+ {
+ // non-greedy, push state and return true if we can skip:
+ if(count < rep->max)
+ push_single_repeat(count, rep, position, saved_state_rep_fast_dot);
+ pstate = rep->alt.p;
+ return (position == last) ? (rep->can_be_null & mask_skip) : can_start(*position, rep->_map, mask_skip);
+ }
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::match_char_repeat()
+{
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable:4127)
+#endif
+#ifdef __BORLANDC__
+#pragma option push -w-8008 -w-8066 -w-8004
+#endif
+ const re_repeat* rep = static_cast<const re_repeat*>(pstate);
+ BOOST_ASSERT(1 == static_cast<const re_literal*>(rep->next.p)->length);
+ const char_type what = *reinterpret_cast<const char_type*>(static_cast<const re_literal*>(rep->next.p) + 1);
+ std::size_t count = 0;
+ //
+ // start by working out how much we can skip:
+ //
+ bool greedy = (rep->greedy) && (!(m_match_flags & regex_constants::match_any) || m_independent);
+ std::size_t desired = greedy ? rep->max : rep->min;
+ if(::boost::is_random_access_iterator<BidiIterator>::value)
+ {
+ BidiIterator end = position;
+ std::advance(end, (std::min)((std::size_t)::boost::re_detail::distance(position, last), desired));
+ BidiIterator origin(position);
+ while((position != end) && (traits_inst.translate(*position, icase) == what))
+ {
+ ++position;
+ }
+ count = (unsigned)::boost::re_detail::distance(origin, position);
+ }
+ else
+ {
+ while((count < desired) && (position != last) && (traits_inst.translate(*position, icase) == what))
+ {
+ ++position;
+ ++count;
+ }
+ }
+
+ if(count < rep->min)
+ return false;
+
+ if(greedy)
+ {
+ if((rep->leading) && (count < rep->max))
+ restart = position;
+ // push backtrack info if available:
+ if(count - rep->min)
+ push_single_repeat(count, rep, position, saved_state_greedy_single_repeat);
+ // jump to next state:
+ pstate = rep->alt.p;
+ return true;
+ }
+ else
+ {
+ // non-greedy, push state and return true if we can skip:
+ if(count < rep->max)
+ push_single_repeat(count, rep, position, saved_state_rep_char);
+ pstate = rep->alt.p;
+ return (position == last) ? (rep->can_be_null & mask_skip) : can_start(*position, rep->_map, mask_skip);
+ }
+#ifdef __BORLANDC__
+#pragma option pop
+#endif
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::match_set_repeat()
+{
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable:4127)
+#endif
+#ifdef __BORLANDC__
+#pragma option push -w-8008 -w-8066 -w-8004
+#endif
+ const re_repeat* rep = static_cast<const re_repeat*>(pstate);
+ const unsigned char* map = static_cast<const re_set*>(rep->next.p)->_map;
+ std::size_t count = 0;
+ //
+ // start by working out how much we can skip:
+ //
+ bool greedy = (rep->greedy) && (!(m_match_flags & regex_constants::match_any) || m_independent);
+ std::size_t desired = greedy ? rep->max : rep->min;
+ if(::boost::is_random_access_iterator<BidiIterator>::value)
+ {
+ BidiIterator end = position;
+ std::advance(end, (std::min)((std::size_t)::boost::re_detail::distance(position, last), desired));
+ BidiIterator origin(position);
+ while((position != end) && map[static_cast<unsigned char>(traits_inst.translate(*position, icase))])
+ {
+ ++position;
+ }
+ count = (unsigned)::boost::re_detail::distance(origin, position);
+ }
+ else
+ {
+ while((count < desired) && (position != last) && map[static_cast<unsigned char>(traits_inst.translate(*position, icase))])
+ {
+ ++position;
+ ++count;
+ }
+ }
+
+ if(count < rep->min)
+ return false;
+
+ if(greedy)
+ {
+ if((rep->leading) && (count < rep->max))
+ restart = position;
+ // push backtrack info if available:
+ if(count - rep->min)
+ push_single_repeat(count, rep, position, saved_state_greedy_single_repeat);
+ // jump to next state:
+ pstate = rep->alt.p;
+ return true;
+ }
+ else
+ {
+ // non-greedy, push state and return true if we can skip:
+ if(count < rep->max)
+ push_single_repeat(count, rep, position, saved_state_rep_short_set);
+ pstate = rep->alt.p;
+ return (position == last) ? (rep->can_be_null & mask_skip) : can_start(*position, rep->_map, mask_skip);
+ }
+#ifdef __BORLANDC__
+#pragma option pop
+#endif
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::match_long_set_repeat()
+{
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable:4127)
+#endif
+#ifdef __BORLANDC__
+#pragma option push -w-8008 -w-8066 -w-8004
+#endif
+ typedef typename traits::char_class_type mask_type;
+ const re_repeat* rep = static_cast<const re_repeat*>(pstate);
+ const re_set_long<mask_type>* set = static_cast<const re_set_long<mask_type>*>(pstate->next.p);
+ std::size_t count = 0;
+ //
+ // start by working out how much we can skip:
+ //
+ bool greedy = (rep->greedy) && (!(m_match_flags & regex_constants::match_any) || m_independent);
+ std::size_t desired = greedy ? rep->max : rep->min;
+ if(::boost::is_random_access_iterator<BidiIterator>::value)
+ {
+ BidiIterator end = position;
+ std::advance(end, (std::min)((std::size_t)::boost::re_detail::distance(position, last), desired));
+ BidiIterator origin(position);
+ while((position != end) && (position != re_is_set_member(position, last, set, re.get_data(), icase)))
+ {
+ ++position;
+ }
+ count = (unsigned)::boost::re_detail::distance(origin, position);
+ }
+ else
+ {
+ while((count < desired) && (position != last) && (position != re_is_set_member(position, last, set, re.get_data(), icase)))
+ {
+ ++position;
+ ++count;
+ }
+ }
+
+ if(count < rep->min)
+ return false;
+
+ if(greedy)
+ {
+ if((rep->leading) && (count < rep->max))
+ restart = position;
+ // push backtrack info if available:
+ if(count - rep->min)
+ push_single_repeat(count, rep, position, saved_state_greedy_single_repeat);
+ // jump to next state:
+ pstate = rep->alt.p;
+ return true;
+ }
+ else
+ {
+ // non-greedy, push state and return true if we can skip:
+ if(count < rep->max)
+ push_single_repeat(count, rep, position, saved_state_rep_long_set);
+ pstate = rep->alt.p;
+ return (position == last) ? (rep->can_be_null & mask_skip) : can_start(*position, rep->_map, mask_skip);
+ }
+#ifdef __BORLANDC__
+#pragma option pop
+#endif
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+}
+
+/****************************************************************************
+
+Unwind and associated proceedures follow, these perform what normal stack
+unwinding does in the recursive implementation.
+
+****************************************************************************/
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::unwind(bool have_match)
+{
+ static unwind_proc_type const s_unwind_table[14] =
+ {
+ &perl_matcher<BidiIterator, Allocator, traits>::unwind_end,
+ &perl_matcher<BidiIterator, Allocator, traits>::unwind_paren,
+ &perl_matcher<BidiIterator, Allocator, traits>::unwind_recursion_stopper,
+ &perl_matcher<BidiIterator, Allocator, traits>::unwind_assertion,
+ &perl_matcher<BidiIterator, Allocator, traits>::unwind_alt,
+ &perl_matcher<BidiIterator, Allocator, traits>::unwind_repeater_counter,
+ &perl_matcher<BidiIterator, Allocator, traits>::unwind_extra_block,
+ &perl_matcher<BidiIterator, Allocator, traits>::unwind_greedy_single_repeat,
+ &perl_matcher<BidiIterator, Allocator, traits>::unwind_slow_dot_repeat,
+ &perl_matcher<BidiIterator, Allocator, traits>::unwind_fast_dot_repeat,
+ &perl_matcher<BidiIterator, Allocator, traits>::unwind_char_repeat,
+ &perl_matcher<BidiIterator, Allocator, traits>::unwind_short_set_repeat,
+ &perl_matcher<BidiIterator, Allocator, traits>::unwind_long_set_repeat,
+ &perl_matcher<BidiIterator, Allocator, traits>::unwind_non_greedy_repeat,
+ };
+
+ m_recursive_result = have_match;
+ unwind_proc_type unwinder;
+ bool cont;
+ //
+ // keep unwinding our stack until we have something to do:
+ //
+ do
+ {
+ unwinder = s_unwind_table[m_backup_state->id];
+ cont = (this->*unwinder)(m_recursive_result);
+ }while(cont);
+ //
+ // return true if we have more states to try:
+ //
+ return pstate ? true : false;
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::unwind_end(bool)
+{
+ pstate = 0; // nothing left to search
+ return false; // end of stack nothing more to search
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::unwind_paren(bool have_match)
+{
+ saved_matched_paren<BidiIterator>* pmp = static_cast<saved_matched_paren<BidiIterator>*>(m_backup_state);
+ // restore previous values if no match was found:
+ if(have_match == false)
+ {
+ m_presult->set_first(pmp->sub.first, pmp->index);
+ m_presult->set_second(pmp->sub.second, pmp->index, pmp->sub.matched);
+ }
+#ifdef BOOST_REGEX_MATCH_EXTRA
+ //
+ // we have a match, push the capture information onto the stack:
+ //
+ else if(pmp->sub.matched && (match_extra & m_match_flags))
+ ((*m_presult)[pmp->index]).get_captures().push_back(pmp->sub);
+#endif
+ // unwind stack:
+ m_backup_state = pmp+1;
+ boost::re_detail::inplace_destroy(pmp);
+ return true; // keep looking
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::unwind_recursion_stopper(bool)
+{
+ boost::re_detail::inplace_destroy(m_backup_state++);
+ pstate = 0; // nothing left to search
+ return false; // end of stack nothing more to search
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::unwind_assertion(bool r)
+{
+ saved_assertion<BidiIterator>* pmp = static_cast<saved_assertion<BidiIterator>*>(m_backup_state);
+ pstate = pmp->pstate;
+ position = pmp->position;
+ bool result = (r == pmp->positive);
+ m_recursive_result = pmp->positive ? r : !r;
+ boost::re_detail::inplace_destroy(pmp++);
+ m_backup_state = pmp;
+ return !result; // return false if the assertion was matched to stop search.
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::unwind_alt(bool r)
+{
+ saved_position<BidiIterator>* pmp = static_cast<saved_position<BidiIterator>*>(m_backup_state);
+ if(!r)
+ {
+ pstate = pmp->pstate;
+ position = pmp->position;
+ }
+ boost::re_detail::inplace_destroy(pmp++);
+ m_backup_state = pmp;
+ return r;
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::unwind_repeater_counter(bool)
+{
+ saved_repeater<BidiIterator>* pmp = static_cast<saved_repeater<BidiIterator>*>(m_backup_state);
+ boost::re_detail::inplace_destroy(pmp++);
+ m_backup_state = pmp;
+ return true; // keep looking
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::unwind_extra_block(bool)
+{
+ saved_extra_block* pmp = static_cast<saved_extra_block*>(m_backup_state);
+ void* condemmed = m_stack_base;
+ m_stack_base = pmp->base;
+ m_backup_state = pmp->end;
+ boost::re_detail::inplace_destroy(pmp);
+ put_mem_block(condemmed);
+ return true; // keep looking
+}
+
+template <class BidiIterator, class Allocator, class traits>
+inline void perl_matcher<BidiIterator, Allocator, traits>::destroy_single_repeat()
+{
+ saved_single_repeat<BidiIterator>* p = static_cast<saved_single_repeat<BidiIterator>*>(m_backup_state);
+ boost::re_detail::inplace_destroy(p++);
+ m_backup_state = p;
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::unwind_greedy_single_repeat(bool r)
+{
+ saved_single_repeat<BidiIterator>* pmp = static_cast<saved_single_repeat<BidiIterator>*>(m_backup_state);
+
+ // if we have a match, just discard this state:
+ if(r)
+ {
+ destroy_single_repeat();
+ return true;
+ }
+
+ const re_repeat* rep = pmp->rep;
+ std::size_t count = pmp->count;
+ BOOST_ASSERT(rep->next.p != 0);
+ BOOST_ASSERT(rep->alt.p != 0);
+
+ count -= rep->min;
+
+ if((m_match_flags & match_partial) && (position == last))
+ m_has_partial_match = true;
+
+ BOOST_ASSERT(count);
+ position = pmp->last_position;
+
+ // backtrack till we can skip out:
+ do
+ {
+ --position;
+ --count;
+ ++state_count;
+ }while(count && !can_start(*position, rep->_map, mask_skip));
+
+ // if we've hit base, destroy this state:
+ if(count == 0)
+ {
+ destroy_single_repeat();
+ if(!can_start(*position, rep->_map, mask_skip))
+ return true;
+ }
+ else
+ {
+ pmp->count = count + rep->min;
+ pmp->last_position = position;
+ }
+ pstate = rep->alt.p;
+ return false;
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::unwind_slow_dot_repeat(bool r)
+{
+ saved_single_repeat<BidiIterator>* pmp = static_cast<saved_single_repeat<BidiIterator>*>(m_backup_state);
+
+ // if we have a match, just discard this state:
+ if(r)
+ {
+ destroy_single_repeat();
+ return true;
+ }
+
+ const re_repeat* rep = pmp->rep;
+ std::size_t count = pmp->count;
+ BOOST_ASSERT(rep->type == syntax_element_dot_rep);
+ BOOST_ASSERT(rep->next.p != 0);
+ BOOST_ASSERT(rep->alt.p != 0);
+ BOOST_ASSERT(rep->next.p->type == syntax_element_wild);
+
+ BOOST_ASSERT(count < rep->max);
+ pstate = rep->next.p;
+ position = pmp->last_position;
+
+ if(position != last)
+ {
+ // wind forward until we can skip out of the repeat:
+ do
+ {
+ if(!match_wild())
+ {
+ // failed repeat match, discard this state and look for another:
+ destroy_single_repeat();
+ return true;
+ }
+ ++count;
+ ++state_count;
+ pstate = rep->next.p;
+ }while((count < rep->max) && (position != last) && !can_start(*position, rep->_map, mask_skip));
+ }
+ if(position == last)
+ {
+ // can't repeat any more, remove the pushed state:
+ destroy_single_repeat();
+ if((m_match_flags & match_partial) && (position == last) && (position != search_base))
+ m_has_partial_match = true;
+ if(0 == (rep->can_be_null & mask_skip))
+ return true;
+ }
+ else if(count == rep->max)
+ {
+ // can't repeat any more, remove the pushed state:
+ destroy_single_repeat();
+ if(!can_start(*position, rep->_map, mask_skip))
+ return true;
+ }
+ else
+ {
+ pmp->count = count;
+ pmp->last_position = position;
+ }
+ pstate = rep->alt.p;
+ return false;
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::unwind_fast_dot_repeat(bool r)
+{
+ saved_single_repeat<BidiIterator>* pmp = static_cast<saved_single_repeat<BidiIterator>*>(m_backup_state);
+
+ // if we have a match, just discard this state:
+ if(r)
+ {
+ destroy_single_repeat();
+ return true;
+ }
+
+ const re_repeat* rep = pmp->rep;
+ std::size_t count = pmp->count;
+
+ BOOST_ASSERT(count < rep->max);
+ position = pmp->last_position;
+ if(position != last)
+ {
+
+ // wind forward until we can skip out of the repeat:
+ do
+ {
+ ++position;
+ ++count;
+ ++state_count;
+ }while((count < rep->max) && (position != last) && !can_start(*position, rep->_map, mask_skip));
+ }
+
+ if(position == last)
+ {
+ // can't repeat any more, remove the pushed state:
+ destroy_single_repeat();
+ if((m_match_flags & match_partial) && (position == last) && (position != search_base))
+ m_has_partial_match = true;
+ if(0 == (rep->can_be_null & mask_skip))
+ return true;
+ }
+ else if(count == rep->max)
+ {
+ // can't repeat any more, remove the pushed state:
+ destroy_single_repeat();
+ if(!can_start(*position, rep->_map, mask_skip))
+ return true;
+ }
+ else
+ {
+ pmp->count = count;
+ pmp->last_position = position;
+ }
+ pstate = rep->alt.p;
+ return false;
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::unwind_char_repeat(bool r)
+{
+ saved_single_repeat<BidiIterator>* pmp = static_cast<saved_single_repeat<BidiIterator>*>(m_backup_state);
+
+ // if we have a match, just discard this state:
+ if(r)
+ {
+ destroy_single_repeat();
+ return true;
+ }
+
+ const re_repeat* rep = pmp->rep;
+ std::size_t count = pmp->count;
+ pstate = rep->next.p;
+ const char_type what = *reinterpret_cast<const char_type*>(static_cast<const re_literal*>(pstate) + 1);
+ position = pmp->last_position;
+
+ BOOST_ASSERT(rep->type == syntax_element_char_rep);
+ BOOST_ASSERT(rep->next.p != 0);
+ BOOST_ASSERT(rep->alt.p != 0);
+ BOOST_ASSERT(rep->next.p->type == syntax_element_literal);
+ BOOST_ASSERT(count < rep->max);
+
+ if(position != last)
+ {
+ // wind forward until we can skip out of the repeat:
+ do
+ {
+ if(traits_inst.translate(*position, icase) != what)
+ {
+ // failed repeat match, discard this state and look for another:
+ destroy_single_repeat();
+ return true;
+ }
+ ++count;
+ ++ position;
+ ++state_count;
+ pstate = rep->next.p;
+ }while((count < rep->max) && (position != last) && !can_start(*position, rep->_map, mask_skip));
+ }
+ if(position == last)
+ {
+ // can't repeat any more, remove the pushed state:
+ destroy_single_repeat();
+ if((m_match_flags & match_partial) && (position == last) && (position != search_base))
+ m_has_partial_match = true;
+ if(0 == (rep->can_be_null & mask_skip))
+ return true;
+ }
+ else if(count == rep->max)
+ {
+ // can't repeat any more, remove the pushed state:
+ destroy_single_repeat();
+ if(!can_start(*position, rep->_map, mask_skip))
+ return true;
+ }
+ else
+ {
+ pmp->count = count;
+ pmp->last_position = position;
+ }
+ pstate = rep->alt.p;
+ return false;
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::unwind_short_set_repeat(bool r)
+{
+ saved_single_repeat<BidiIterator>* pmp = static_cast<saved_single_repeat<BidiIterator>*>(m_backup_state);
+
+ // if we have a match, just discard this state:
+ if(r)
+ {
+ destroy_single_repeat();
+ return true;
+ }
+
+ const re_repeat* rep = pmp->rep;
+ std::size_t count = pmp->count;
+ pstate = rep->next.p;
+ const unsigned char* map = static_cast<const re_set*>(rep->next.p)->_map;
+ position = pmp->last_position;
+
+ BOOST_ASSERT(rep->type == syntax_element_short_set_rep);
+ BOOST_ASSERT(rep->next.p != 0);
+ BOOST_ASSERT(rep->alt.p != 0);
+ BOOST_ASSERT(rep->next.p->type == syntax_element_set);
+ BOOST_ASSERT(count < rep->max);
+
+ if(position != last)
+ {
+ // wind forward until we can skip out of the repeat:
+ do
+ {
+ if(!map[static_cast<unsigned char>(traits_inst.translate(*position, icase))])
+ {
+ // failed repeat match, discard this state and look for another:
+ destroy_single_repeat();
+ return true;
+ }
+ ++count;
+ ++ position;
+ ++state_count;
+ pstate = rep->next.p;
+ }while((count < rep->max) && (position != last) && !can_start(*position, rep->_map, mask_skip));
+ }
+ if(position == last)
+ {
+ // can't repeat any more, remove the pushed state:
+ destroy_single_repeat();
+ if((m_match_flags & match_partial) && (position == last) && (position != search_base))
+ m_has_partial_match = true;
+ if(0 == (rep->can_be_null & mask_skip))
+ return true;
+ }
+ else if(count == rep->max)
+ {
+ // can't repeat any more, remove the pushed state:
+ destroy_single_repeat();
+ if(!can_start(*position, rep->_map, mask_skip))
+ return true;
+ }
+ else
+ {
+ pmp->count = count;
+ pmp->last_position = position;
+ }
+ pstate = rep->alt.p;
+ return false;
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::unwind_long_set_repeat(bool r)
+{
+ typedef typename traits::char_class_type mask_type;
+ saved_single_repeat<BidiIterator>* pmp = static_cast<saved_single_repeat<BidiIterator>*>(m_backup_state);
+
+ // if we have a match, just discard this state:
+ if(r)
+ {
+ destroy_single_repeat();
+ return true;
+ }
+
+ const re_repeat* rep = pmp->rep;
+ std::size_t count = pmp->count;
+ pstate = rep->next.p;
+ const re_set_long<mask_type>* set = static_cast<const re_set_long<mask_type>*>(pstate);
+ position = pmp->last_position;
+
+ BOOST_ASSERT(rep->type == syntax_element_long_set_rep);
+ BOOST_ASSERT(rep->next.p != 0);
+ BOOST_ASSERT(rep->alt.p != 0);
+ BOOST_ASSERT(rep->next.p->type == syntax_element_long_set);
+ BOOST_ASSERT(count < rep->max);
+
+ if(position != last)
+ {
+ // wind forward until we can skip out of the repeat:
+ do
+ {
+ if(position == re_is_set_member(position, last, set, re.get_data(), icase))
+ {
+ // failed repeat match, discard this state and look for another:
+ destroy_single_repeat();
+ return true;
+ }
+ ++position;
+ ++count;
+ ++state_count;
+ pstate = rep->next.p;
+ }while((count < rep->max) && (position != last) && !can_start(*position, rep->_map, mask_skip));
+ }
+ if(position == last)
+ {
+ // can't repeat any more, remove the pushed state:
+ destroy_single_repeat();
+ if((m_match_flags & match_partial) && (position == last) && (position != search_base))
+ m_has_partial_match = true;
+ if(0 == (rep->can_be_null & mask_skip))
+ return true;
+ }
+ else if(count == rep->max)
+ {
+ // can't repeat any more, remove the pushed state:
+ destroy_single_repeat();
+ if(!can_start(*position, rep->_map, mask_skip))
+ return true;
+ }
+ else
+ {
+ pmp->count = count;
+ pmp->last_position = position;
+ }
+ pstate = rep->alt.p;
+ return false;
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::unwind_non_greedy_repeat(bool r)
+{
+ saved_position<BidiIterator>* pmp = static_cast<saved_position<BidiIterator>*>(m_backup_state);
+ if(!r)
+ {
+ position = pmp->position;
+ pstate = pmp->pstate;
+ ++(*next_count);
+ }
+ boost::re_detail::inplace_destroy(pmp++);
+ m_backup_state = pmp;
+ return r;
+}
+
+} // namespace re_detail
+} // namespace boost
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif
+
+
diff --git a/boost/boost/regex/v4/perl_matcher_recursive.hpp b/boost/boost/regex/v4/perl_matcher_recursive.hpp
new file mode 100644
index 00000000000..1e98b34286c
--- /dev/null
+++ b/boost/boost/regex/v4/perl_matcher_recursive.hpp
@@ -0,0 +1,832 @@
+/*
+ *
+ * Copyright (c) 2002
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE perl_matcher_common.cpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: Definitions of perl_matcher member functions that are
+ * specific to the recursive implementation.
+ */
+
+#ifndef BOOST_REGEX_V4_PERL_MATCHER_RECURSIVE_HPP
+#define BOOST_REGEX_V4_PERL_MATCHER_RECURSIVE_HPP
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+namespace boost{
+namespace re_detail{
+
+template <class BidiIterator>
+class backup_subex
+{
+ int index;
+ sub_match<BidiIterator> sub;
+public:
+ template <class A>
+ backup_subex(const match_results<BidiIterator, A>& w, int i)
+ : index(i), sub(w[i], false) {}
+ template <class A>
+ void restore(match_results<BidiIterator, A>& w)
+ {
+ w.set_first(sub.first, index);
+ w.set_second(sub.second, index, sub.matched);
+ }
+ const sub_match<BidiIterator>& get() { return sub; }
+};
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::match_all_states()
+{
+ static matcher_proc_type const s_match_vtable[29] =
+ {
+ (&perl_matcher<BidiIterator, Allocator, traits>::match_startmark),
+ &perl_matcher<BidiIterator, Allocator, traits>::match_endmark,
+ &perl_matcher<BidiIterator, Allocator, traits>::match_literal,
+ &perl_matcher<BidiIterator, Allocator, traits>::match_start_line,
+ &perl_matcher<BidiIterator, Allocator, traits>::match_end_line,
+ &perl_matcher<BidiIterator, Allocator, traits>::match_wild,
+ &perl_matcher<BidiIterator, Allocator, traits>::match_match,
+ &perl_matcher<BidiIterator, Allocator, traits>::match_word_boundary,
+ &perl_matcher<BidiIterator, Allocator, traits>::match_within_word,
+ &perl_matcher<BidiIterator, Allocator, traits>::match_word_start,
+ &perl_matcher<BidiIterator, Allocator, traits>::match_word_end,
+ &perl_matcher<BidiIterator, Allocator, traits>::match_buffer_start,
+ &perl_matcher<BidiIterator, Allocator, traits>::match_buffer_end,
+ &perl_matcher<BidiIterator, Allocator, traits>::match_backref,
+ &perl_matcher<BidiIterator, Allocator, traits>::match_long_set,
+ &perl_matcher<BidiIterator, Allocator, traits>::match_set,
+ &perl_matcher<BidiIterator, Allocator, traits>::match_jump,
+ &perl_matcher<BidiIterator, Allocator, traits>::match_alt,
+ &perl_matcher<BidiIterator, Allocator, traits>::match_rep,
+ &perl_matcher<BidiIterator, Allocator, traits>::match_combining,
+ &perl_matcher<BidiIterator, Allocator, traits>::match_soft_buffer_end,
+ &perl_matcher<BidiIterator, Allocator, traits>::match_restart_continue,
+ (::boost::is_random_access_iterator<BidiIterator>::value ? &perl_matcher<BidiIterator, Allocator, traits>::match_dot_repeat_fast : &perl_matcher<BidiIterator, Allocator, traits>::match_dot_repeat_slow),
+ &perl_matcher<BidiIterator, Allocator, traits>::match_char_repeat,
+ &perl_matcher<BidiIterator, Allocator, traits>::match_set_repeat,
+ &perl_matcher<BidiIterator, Allocator, traits>::match_long_set_repeat,
+ &perl_matcher<BidiIterator, Allocator, traits>::match_backstep,
+ &perl_matcher<BidiIterator, Allocator, traits>::match_assert_backref,
+ &perl_matcher<BidiIterator, Allocator, traits>::match_toggle_case,
+ };
+
+ if(state_count > max_state_count)
+ raise_error(traits_inst, regex_constants::error_space);
+ while(pstate)
+ {
+ matcher_proc_type proc = s_match_vtable[pstate->type];
+ ++state_count;
+ if(!(this->*proc)())
+ {
+ if((m_match_flags & match_partial) && (position == last) && (position != search_base))
+ m_has_partial_match = true;
+ return 0;
+ }
+ }
+ return true;
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::match_startmark()
+{
+ int index = static_cast<const re_brace*>(pstate)->index;
+ bool r = true;
+ switch(index)
+ {
+ case 0:
+ pstate = pstate->next.p;
+ break;
+ case -1:
+ case -2:
+ {
+ // forward lookahead assert:
+ BidiIterator old_position(position);
+ const re_syntax_base* next_pstate = static_cast<const re_jump*>(pstate->next.p)->alt.p->next.p;
+ pstate = pstate->next.p->next.p;
+ r = match_all_states();
+ pstate = next_pstate;
+ position = old_position;
+ if((r && (index != -1)) || (!r && (index != -2)))
+ r = false;
+ else
+ r = true;
+ break;
+ }
+ case -3:
+ {
+ // independent sub-expression:
+ bool old_independent = m_independent;
+ m_independent = true;
+ const re_syntax_base* next_pstate = static_cast<const re_jump*>(pstate->next.p)->alt.p->next.p;
+ pstate = pstate->next.p->next.p;
+ r = match_all_states();
+ pstate = next_pstate;
+ m_independent = old_independent;
+#ifdef BOOST_REGEX_MATCH_EXTRA
+ if(r && (m_match_flags & match_extra))
+ {
+ //
+ // our captures have been stored in *m_presult
+ // we need to unpack them, and insert them
+ // back in the right order when we unwind the stack:
+ //
+ unsigned i;
+ match_results<BidiIterator, Allocator> tm(*m_presult);
+ for(i = 0; i < tm.size(); ++i)
+ (*m_presult)[i].get_captures().clear();
+ // match everything else:
+ r = match_all_states();
+ // now place the stored captures back:
+ for(i = 0; i < tm.size(); ++i)
+ {
+ typedef typename sub_match<BidiIterator>::capture_sequence_type seq;
+ seq& s1 = (*m_presult)[i].get_captures();
+ const seq& s2 = tm[i].captures();
+ s1.insert(
+ s1.end(),
+ s2.begin(),
+ s2.end());
+ }
+ }
+#endif
+ break;
+ }
+ case -4:
+ {
+ // conditional expression:
+ const re_alt* alt = static_cast<const re_alt*>(pstate->next.p);
+ BOOST_ASSERT(alt->type == syntax_element_alt);
+ pstate = alt->next.p;
+ if(pstate->type == syntax_element_assert_backref)
+ {
+ if(!match_assert_backref())
+ pstate = alt->alt.p;
+ break;
+ }
+ else
+ {
+ // zero width assertion, have to match this recursively:
+ BOOST_ASSERT(pstate->type == syntax_element_startmark);
+ bool negated = static_cast<const re_brace*>(pstate)->index == -2;
+ BidiIterator saved_position = position;
+ const re_syntax_base* next_pstate = static_cast<const re_jump*>(pstate->next.p)->alt.p->next.p;
+ pstate = pstate->next.p->next.p;
+ bool r = match_all_states();
+ position = saved_position;
+ if(negated)
+ r = !r;
+ if(r)
+ pstate = next_pstate;
+ else
+ pstate = alt->alt.p;
+ break;
+ }
+ }
+ default:
+ {
+ BOOST_ASSERT(index > 0);
+ if((m_match_flags & match_nosubs) == 0)
+ {
+ backup_subex<BidiIterator> sub(*m_presult, index);
+ m_presult->set_first(position, index);
+ pstate = pstate->next.p;
+ r = match_all_states();
+ if(r == false)
+ sub.restore(*m_presult);
+#ifdef BOOST_REGEX_MATCH_EXTRA
+ //
+ // we have a match, push the capture information onto the stack:
+ //
+ else if(sub.get().matched && (match_extra & m_match_flags))
+ ((*m_presult)[index]).get_captures().push_back(sub.get());
+#endif
+ }
+ else
+ {
+ pstate = pstate->next.p;
+ }
+ break;
+ }
+ }
+ return r;
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::match_alt()
+{
+ bool take_first, take_second;
+ const re_alt* jmp = static_cast<const re_alt*>(pstate);
+
+ // find out which of these two alternatives we need to take:
+ if(position == last)
+ {
+ take_first = jmp->can_be_null & mask_take;
+ take_second = jmp->can_be_null & mask_skip;
+ }
+ else
+ {
+ take_first = can_start(*position, jmp->_map, (unsigned char)mask_take);
+ take_second = can_start(*position, jmp->_map, (unsigned char)mask_skip);
+ }
+
+ if(take_first)
+ {
+ // we can take the first alternative,
+ // see if we need to push next alternative:
+ if(take_second)
+ {
+ BidiIterator oldposition(position);
+ const re_syntax_base* old_pstate = jmp->alt.p;
+ pstate = pstate->next.p;
+ if(!match_all_states())
+ {
+ pstate = old_pstate;
+ position = oldposition;
+ }
+ return true;
+ }
+ pstate = pstate->next.p;
+ return true;
+ }
+ if(take_second)
+ {
+ pstate = jmp->alt.p;
+ return true;
+ }
+ return false; // neither option is possible
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::match_rep()
+{
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable:4127 4244)
+#endif
+ const re_repeat* rep = static_cast<const re_repeat*>(pstate);
+ //
+ // Always copy the repeat count, so that the state is restored
+ // when we exit this scope:
+ //
+ repeater_count<BidiIterator> r(rep->id, &next_count, position);
+ //
+ // If we've had at least one repeat already, and the last one
+ // matched the NULL string then set the repeat count to
+ // maximum:
+ //
+ next_count->check_null_repeat(position, rep->max);
+
+ // find out which of these two alternatives we need to take:
+ bool take_first, take_second;
+ if(position == last)
+ {
+ take_first = rep->can_be_null & mask_take;
+ take_second = rep->can_be_null & mask_skip;
+ }
+ else
+ {
+ take_first = can_start(*position, rep->_map, (unsigned char)mask_take);
+ take_second = can_start(*position, rep->_map, (unsigned char)mask_skip);
+ }
+
+ if(next_count->get_count() < rep->min)
+ {
+ // we must take the repeat:
+ if(take_first)
+ {
+ // increase the counter:
+ ++(*next_count);
+ pstate = rep->next.p;
+ return match_all_states();
+ }
+ return false;
+ }
+ bool greedy = (rep->greedy) && (!(m_match_flags & regex_constants::match_any) || m_independent);
+ if(greedy)
+ {
+ // try and take the repeat if we can:
+ if((next_count->get_count() < rep->max) && take_first)
+ {
+ // store position in case we fail:
+ BidiIterator pos = position;
+ // increase the counter:
+ ++(*next_count);
+ pstate = rep->next.p;
+ if(match_all_states())
+ return true;
+ // failed repeat, reset posistion and fall through for alternative:
+ position = pos;
+ }
+ if(take_second)
+ {
+ pstate = rep->alt.p;
+ return true;
+ }
+ return false; // can't take anything, fail...
+ }
+ else // non-greedy
+ {
+ // try and skip the repeat if we can:
+ if(take_second)
+ {
+ // store position in case we fail:
+ BidiIterator pos = position;
+ pstate = rep->alt.p;
+ if(match_all_states())
+ return true;
+ // failed alternative, reset posistion and fall through for repeat:
+ position = pos;
+ }
+ if((next_count->get_count() < rep->max) && take_first)
+ {
+ // increase the counter:
+ ++(*next_count);
+ pstate = rep->next.p;
+ return match_all_states();
+ }
+ }
+ return false;
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::match_dot_repeat_slow()
+{
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable:4127)
+#endif
+ unsigned count = 0;
+ const re_repeat* rep = static_cast<const re_repeat*>(pstate);
+ re_syntax_base* psingle = rep->next.p;
+ // match compulsary repeats first:
+ while(count < rep->min)
+ {
+ pstate = psingle;
+ if(!match_wild())
+ return false;
+ ++count;
+ }
+ bool greedy = (rep->greedy) && (!(m_match_flags & regex_constants::match_any) || m_independent);
+ if(greedy)
+ {
+ // normal repeat:
+ while(count < rep->max)
+ {
+ pstate = psingle;
+ if(!match_wild())
+ break;
+ ++count;
+ }
+ if((rep->leading) && (count < rep->max))
+ restart = position;
+ pstate = rep;
+ return backtrack_till_match(count - rep->min);
+ }
+ else
+ {
+ // non-greedy, keep trying till we get a match:
+ BidiIterator save_pos;
+ do
+ {
+ if((rep->leading) && (rep->max == UINT_MAX))
+ restart = position;
+ pstate = rep->alt.p;
+ save_pos = position;
+ ++state_count;
+ if(match_all_states())
+ return true;
+ if(count >= rep->max)
+ return false;
+ ++count;
+ pstate = psingle;
+ position = save_pos;
+ if(!match_wild())
+ return false;
+ }while(true);
+ }
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::match_dot_repeat_fast()
+{
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable:4127)
+#endif
+ if(m_match_flags & match_not_dot_null)
+ return match_dot_repeat_slow();
+ if((static_cast<const re_dot*>(pstate->next.p)->mask & match_any_mask) == 0)
+ return match_dot_repeat_slow();
+ //
+ // start by working out how much we can skip:
+ //
+ const re_repeat* rep = static_cast<const re_repeat*>(pstate);
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable:4267)
+#endif
+ bool greedy = (rep->greedy) && (!(m_match_flags & regex_constants::match_any) || m_independent);
+ std::size_t count = (std::min)(static_cast<std::size_t>(::boost::re_detail::distance(position, last)), static_cast<std::size_t>(greedy ? rep->max : rep->min));
+ if(rep->min > count)
+ {
+ position = last;
+ return false; // not enough text left to match
+ }
+ std::advance(position, count);
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+ if((rep->leading) && (count < rep->max) && greedy)
+ restart = position;
+ if(greedy)
+ return backtrack_till_match(count - rep->min);
+
+ // non-greedy, keep trying till we get a match:
+ BidiIterator save_pos;
+ do
+ {
+ while((position != last) && (count < rep->max) && !can_start(*position, rep->_map, mask_skip))
+ {
+ ++position;
+ ++count;
+ }
+ if((rep->leading) && (rep->max == UINT_MAX))
+ restart = position;
+ pstate = rep->alt.p;
+ save_pos = position;
+ ++state_count;
+ if(match_all_states())
+ return true;
+ if(count >= rep->max)
+ return false;
+ if(save_pos == last)
+ return false;
+ position = ++save_pos;
+ ++count;
+ }while(true);
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::match_char_repeat()
+{
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable:4127)
+#pragma warning(disable:4267)
+#endif
+#ifdef __BORLANDC__
+#pragma option push -w-8008 -w-8066 -w-8004
+#endif
+ const re_repeat* rep = static_cast<const re_repeat*>(pstate);
+ BOOST_ASSERT(1 == static_cast<const re_literal*>(rep->next.p)->length);
+ const char_type what = *reinterpret_cast<const char_type*>(static_cast<const re_literal*>(rep->next.p) + 1);
+ //
+ // start by working out how much we can skip:
+ //
+ bool greedy = (rep->greedy) && (!(m_match_flags & regex_constants::match_any) || m_independent);
+ std::size_t count, desired;
+ if(::boost::is_random_access_iterator<BidiIterator>::value)
+ {
+ desired =
+ (std::min)(
+ (std::size_t)(greedy ? rep->max : rep->min),
+ (std::size_t)::boost::re_detail::distance(position, last));
+ count = desired;
+ ++desired;
+ if(icase)
+ {
+ while(--desired && (traits_inst.translate_nocase(*position) == what))
+ {
+ ++position;
+ }
+ }
+ else
+ {
+ while(--desired && (traits_inst.translate(*position) == what))
+ {
+ ++position;
+ }
+ }
+ count = count - desired;
+ }
+ else
+ {
+ count = 0;
+ desired = greedy ? rep->max : rep->min;
+ while((count < desired) && (position != last) && (traits_inst.translate(*position, icase) == what))
+ {
+ ++position;
+ ++count;
+ }
+ }
+ if((rep->leading) && (count < rep->max) && greedy)
+ restart = position;
+ if(count < rep->min)
+ return false;
+
+ if(greedy)
+ return backtrack_till_match(count - rep->min);
+
+ // non-greedy, keep trying till we get a match:
+ BidiIterator save_pos;
+ do
+ {
+ while((position != last) && (count < rep->max) && !can_start(*position, rep->_map, mask_skip))
+ {
+ if((traits_inst.translate(*position, icase) == what))
+ {
+ ++position;
+ ++count;
+ }
+ else
+ return false; // counldn't repeat even though it was the only option
+ }
+ if((rep->leading) && (rep->max == UINT_MAX))
+ restart = position;
+ pstate = rep->alt.p;
+ save_pos = position;
+ ++state_count;
+ if(match_all_states())
+ return true;
+ if(count >= rep->max)
+ return false;
+ position = save_pos;
+ if(position == last)
+ return false;
+ if(traits_inst.translate(*position, icase) == what)
+ {
+ ++position;
+ ++count;
+ }
+ else
+ {
+ return false;
+ }
+ }while(true);
+#ifdef __BORLANDC__
+#pragma option pop
+#endif
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::match_set_repeat()
+{
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable:4127)
+#endif
+#ifdef __BORLANDC__
+#pragma option push -w-8008 -w-8066 -w-8004
+#endif
+ const re_repeat* rep = static_cast<const re_repeat*>(pstate);
+ const unsigned char* map = static_cast<const re_set*>(rep->next.p)->_map;
+ unsigned count = 0;
+ //
+ // start by working out how much we can skip:
+ //
+ bool greedy = (rep->greedy) && (!(m_match_flags & regex_constants::match_any) || m_independent);
+ std::size_t desired = greedy ? rep->max : rep->min;
+ if(::boost::is_random_access_iterator<BidiIterator>::value)
+ {
+ BidiIterator end = position;
+ std::advance(end, (std::min)((std::size_t)::boost::re_detail::distance(position, last), desired));
+ BidiIterator origin(position);
+ while((position != end) && map[static_cast<unsigned char>(traits_inst.translate(*position, icase))])
+ {
+ ++position;
+ }
+ count = (unsigned)::boost::re_detail::distance(origin, position);
+ }
+ else
+ {
+ while((count < desired) && (position != last) && map[static_cast<unsigned char>(traits_inst.translate(*position, icase))])
+ {
+ ++position;
+ ++count;
+ }
+ }
+ if((rep->leading) && (count < rep->max) && greedy)
+ restart = position;
+ if(count < rep->min)
+ return false;
+
+ if(greedy)
+ return backtrack_till_match(count - rep->min);
+
+ // non-greedy, keep trying till we get a match:
+ BidiIterator save_pos;
+ do
+ {
+ while((position != last) && (count < rep->max) && !can_start(*position, rep->_map, mask_skip))
+ {
+ if(map[static_cast<unsigned char>(traits_inst.translate(*position, icase))])
+ {
+ ++position;
+ ++count;
+ }
+ else
+ return false; // counldn't repeat even though it was the only option
+ }
+ if((rep->leading) && (rep->max == UINT_MAX))
+ restart = position;
+ pstate = rep->alt.p;
+ save_pos = position;
+ ++state_count;
+ if(match_all_states())
+ return true;
+ if(count >= rep->max)
+ return false;
+ position = save_pos;
+ if(position == last)
+ return false;
+ if(map[static_cast<unsigned char>(traits_inst.translate(*position, icase))])
+ {
+ ++position;
+ ++count;
+ }
+ else
+ {
+ return false;
+ }
+ }while(true);
+#ifdef __BORLANDC__
+#pragma option pop
+#endif
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::match_long_set_repeat()
+{
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable:4127)
+#endif
+#ifdef __BORLANDC__
+#pragma option push -w-8008 -w-8066 -w-8004
+#endif
+ typedef typename traits::char_class_type char_class_type;
+ const re_repeat* rep = static_cast<const re_repeat*>(pstate);
+ const re_set_long<char_class_type>* set = static_cast<const re_set_long<char_class_type>*>(pstate->next.p);
+ unsigned count = 0;
+ //
+ // start by working out how much we can skip:
+ //
+ bool greedy = (rep->greedy) && (!(m_match_flags & regex_constants::match_any) || m_independent);
+ std::size_t desired = greedy ? rep->max : rep->min;
+ if(::boost::is_random_access_iterator<BidiIterator>::value)
+ {
+ BidiIterator end = position;
+ std::advance(end, (std::min)((std::size_t)::boost::re_detail::distance(position, last), desired));
+ BidiIterator origin(position);
+ while((position != end) && (position != re_is_set_member(position, last, set, re.get_data(), icase)))
+ {
+ ++position;
+ }
+ count = (unsigned)::boost::re_detail::distance(origin, position);
+ }
+ else
+ {
+ while((count < desired) && (position != last) && (position != re_is_set_member(position, last, set, re.get_data(), icase)))
+ {
+ ++position;
+ ++count;
+ }
+ }
+ if((rep->leading) && (count < rep->max) && greedy)
+ restart = position;
+ if(count < rep->min)
+ return false;
+
+ if(greedy)
+ return backtrack_till_match(count - rep->min);
+
+ // non-greedy, keep trying till we get a match:
+ BidiIterator save_pos;
+ do
+ {
+ while((position != last) && (count < rep->max) && !can_start(*position, rep->_map, mask_skip))
+ {
+ if(position != re_is_set_member(position, last, set, re.get_data(), icase))
+ {
+ ++position;
+ ++count;
+ }
+ else
+ return false; // counldn't repeat even though it was the only option
+ }
+ if((rep->leading) && (rep->max == UINT_MAX))
+ restart = position;
+ pstate = rep->alt.p;
+ save_pos = position;
+ ++state_count;
+ if(match_all_states())
+ return true;
+ if(count >= rep->max)
+ return false;
+ position = save_pos;
+ if(position == last)
+ return false;
+ if(position != re_is_set_member(position, last, set, re.get_data(), icase))
+ {
+ ++position;
+ ++count;
+ }
+ else
+ {
+ return false;
+ }
+ }while(true);
+#ifdef __BORLANDC__
+#pragma option pop
+#endif
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+}
+
+template <class BidiIterator, class Allocator, class traits>
+bool perl_matcher<BidiIterator, Allocator, traits>::backtrack_till_match(std::size_t count)
+{
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable:4127)
+#endif
+ if((m_match_flags & match_partial) && (position == last))
+ m_has_partial_match = true;
+
+ const re_repeat* rep = static_cast<const re_repeat*>(pstate);
+ BidiIterator backtrack = position;
+ if(position == last)
+ {
+ if(rep->can_be_null & mask_skip)
+ {
+ pstate = rep->alt.p;
+ if(match_all_states())
+ return true;
+ }
+ if(count)
+ {
+ position = --backtrack;
+ --count;
+ }
+ else
+ return false;
+ }
+ do
+ {
+ while(count && !can_start(*position, rep->_map, mask_skip))
+ {
+ --position;
+ --count;
+ ++state_count;
+ }
+ pstate = rep->alt.p;
+ backtrack = position;
+ if(match_all_states())
+ return true;
+ if(count == 0)
+ return false;
+ position = --backtrack;
+ ++state_count;
+ --count;
+ }while(true);
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+}
+
+} // namespace re_detail
+} // namespace boost
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif
+
diff --git a/boost/boost/regex/v4/primary_transform.hpp b/boost/boost/regex/v4/primary_transform.hpp
new file mode 100644
index 00000000000..e498b63b022
--- /dev/null
+++ b/boost/boost/regex/v4/primary_transform.hpp
@@ -0,0 +1,132 @@
+/*
+ *
+ * Copyright (c) 1998-2002
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE: primary_transform.hpp
+ * VERSION: see <boost/version.hpp>
+ * DESCRIPTION: Heuristically determines the sort string format in use
+ * by the current locale.
+ */
+
+#ifndef BOOST_REGEX_PRIMARY_TRANSFORM
+#define BOOST_REGEX_PRIMARY_TRANSFORM
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+namespace boost{
+ namespace re_detail{
+
+
+enum{
+ sort_C,
+ sort_fixed,
+ sort_delim,
+ sort_unknown
+};
+
+template <class S, class charT>
+unsigned count_chars(const S& s, charT c)
+{
+ //
+ // Count how many occurances of character c occur
+ // in string s: if c is a delimeter between collation
+ // fields, then this should be the same value for all
+ // sort keys:
+ //
+ unsigned int count = 0;
+ for(unsigned pos = 0; pos < s.size(); ++pos)
+ {
+ if(s[pos] == c) ++count;
+ }
+ return count;
+}
+
+
+template <class traits, class charT>
+unsigned find_sort_syntax(const traits* pt, charT* delim)
+{
+ //
+ // compare 'a' with 'A' to see how similar they are,
+ // should really use a-accute but we can't portably do that,
+ //
+ typedef typename traits::string_type string_type;
+ typedef typename traits::char_type char_type;
+
+ // Suppress incorrect warning for MSVC
+ (void)pt;
+
+ char_type a[2] = {'a', '\0', };
+ string_type sa(pt->transform(a, a+1));
+ if(sa == a)
+ {
+ *delim = 0;
+ return sort_C;
+ }
+ char_type A[2] = { 'A', '\0', };
+ string_type sA(pt->transform(A, A+1));
+ char_type c[2] = { ';', '\0', };
+ string_type sc(pt->transform(c, c+1));
+
+ int pos = 0;
+ while((pos <= static_cast<int>(sa.size())) && (pos <= static_cast<int>(sA.size())) && (sa[pos] == sA[pos])) ++pos;
+ --pos;
+ if(pos < 0)
+ {
+ *delim = 0;
+ return sort_unknown;
+ }
+ //
+ // at this point sa[pos] is either the end of a fixed width field
+ // or the character that acts as a delimiter:
+ //
+ charT maybe_delim = sa[pos];
+ if((pos != 0) && (count_chars(sa, maybe_delim) == count_chars(sA, maybe_delim)) && (count_chars(sa, maybe_delim) == count_chars(sc, maybe_delim)))
+ {
+ *delim = maybe_delim;
+ return sort_delim;
+ }
+ //
+ // OK doen't look like a delimiter, try for fixed width field:
+ //
+ if((sa.size() == sA.size()) && (sa.size() == sc.size()))
+ {
+ // note assumes that the fixed width field is less than
+ // (numeric_limits<charT>::max)(), should be true for all types
+ // I can't imagine 127 character fields...
+ *delim = static_cast<charT>(++pos);
+ return sort_fixed;
+ }
+ //
+ // don't know what it is:
+ //
+ *delim = 0;
+ return sort_unknown;
+}
+
+
+ } // namespace re_detail
+} // namespace boost
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif
+
+
+
+
+
+
+
diff --git a/boost/boost/regex/v4/protected_call.hpp b/boost/boost/regex/v4/protected_call.hpp
new file mode 100644
index 00000000000..197c45563d4
--- /dev/null
+++ b/boost/boost/regex/v4/protected_call.hpp
@@ -0,0 +1,67 @@
+/*
+ *
+ * Copyright (c) 2004
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE basic_regex_creator.cpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: Declares template class basic_regex_creator which fills in
+ * the data members of a regex_data object.
+ */
+
+#ifndef BOOST_REGEX_V4_PROTECTED_CALL_HPP
+#define BOOST_REGEX_V4_PROTECTED_CALL_HPP
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+namespace boost{
+namespace re_detail{
+
+class BOOST_REGEX_DECL abstract_protected_call
+{
+public:
+ bool BOOST_REGEX_CALL execute()const;
+ // this stops gcc-4 from complaining:
+ virtual ~abstract_protected_call(){}
+private:
+ virtual bool call()const = 0;
+};
+
+template <class T>
+class concrete_protected_call
+ : public abstract_protected_call
+{
+public:
+ typedef bool (T::*proc_type)();
+ concrete_protected_call(T* o, proc_type p)
+ : obj(o), proc(p) {}
+private:
+ virtual bool call()const;
+ T* obj;
+ proc_type proc;
+};
+
+template <class T>
+bool concrete_protected_call<T>::call()const
+{
+ return (obj->*proc)();
+}
+
+}
+} // namespace boost
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif
diff --git a/boost/boost/regex/v4/regbase.hpp b/boost/boost/regex/v4/regbase.hpp
new file mode 100644
index 00000000000..4c6bde83f37
--- /dev/null
+++ b/boost/boost/regex/v4/regbase.hpp
@@ -0,0 +1,162 @@
+/*
+ *
+ * Copyright (c) 1998-2002
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE regbase.cpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: Declares class regbase.
+ */
+
+#ifndef BOOST_REGEX_V4_REGBASE_HPP
+#define BOOST_REGEX_V4_REGBASE_HPP
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+namespace boost{
+//
+// class regbase
+// handles error codes and flags
+//
+class BOOST_REGEX_DECL regbase
+{
+public:
+ enum flag_type_
+ {
+ //
+ // Divide the flags up into logical groups:
+ // bits 0-7 indicate main synatx type.
+ // bits 8-15 indicate syntax subtype.
+ // bits 16-31 indicate options that are common to all
+ // regex syntaxes.
+ // In all cases the default is 0.
+ //
+ // Main synatx group:
+ //
+ perl_syntax_group = 0, // default
+ basic_syntax_group = 1, // POSIX basic
+ literal = 2, // all characters are literals
+ main_option_type = literal | basic_syntax_group | perl_syntax_group, // everything!
+ //
+ // options specific to perl group:
+ //
+ no_bk_refs = 1 << 8, // \d not allowed
+ no_perl_ex = 1 << 9, // disable perl extensions
+ no_mod_m = 1 << 10, // disable Perl m modifier
+ mod_x = 1 << 11, // Perl x modifier
+ mod_s = 1 << 12, // force s modifier on (overrides match_not_dot_newline)
+ no_mod_s = 1 << 13, // force s modifier off (overrides match_not_dot_newline)
+
+ //
+ // options specific to basic group:
+ //
+ no_char_classes = 1 << 8, // [[:CLASS:]] not allowed
+ no_intervals = 1 << 9, // {x,y} not allowed
+ bk_plus_qm = 1 << 10, // uses \+ and \?
+ bk_vbar = 1 << 11, // use \| for alternatives
+ emacs_ex = 1 << 12, // enables emacs extensions
+
+ //
+ // options common to all groups:
+ //
+ no_escape_in_lists = 1 << 16, // '\' not special inside [...]
+ newline_alt = 1 << 17, // \n is the same as |
+ no_except = 1 << 18, // no exception on error
+ failbit = 1 << 19, // error flag
+ icase = 1 << 20, // characters are matched regardless of case
+ nocollate = 0, // don't use locale specific collation (deprecated)
+ collate = 1 << 21, // use locale specific collation
+ nosubs = 1 << 22, // don't mark sub-expressions
+ optimize = 0, // not really supported
+
+
+
+ basic = basic_syntax_group | collate | no_escape_in_lists,
+ extended = no_bk_refs | collate | no_perl_ex | no_escape_in_lists,
+ normal = 0,
+ emacs = basic_syntax_group | collate | emacs_ex | bk_vbar,
+ awk = no_bk_refs | collate | no_perl_ex,
+ grep = basic | newline_alt,
+ egrep = extended | newline_alt,
+ sed = basic,
+ perl = normal,
+ ECMAScript = normal,
+ JavaScript = normal,
+ JScript = normal
+ };
+ typedef unsigned int flag_type;
+
+ enum restart_info
+ {
+ restart_any = 0,
+ restart_word = 1,
+ restart_line = 2,
+ restart_buf = 3,
+ restart_continue = 4,
+ restart_lit = 5,
+ restart_fixed_lit = 6,
+ restart_count = 7
+ };
+};
+
+//
+// provide std lib proposal compatible constants:
+//
+namespace regex_constants{
+
+ enum flag_type_
+ {
+
+ no_except = ::boost::regbase::no_except,
+ failbit = ::boost::regbase::failbit,
+ literal = ::boost::regbase::literal,
+ icase = ::boost::regbase::icase,
+ nocollate = ::boost::regbase::nocollate,
+ collate = ::boost::regbase::collate,
+ nosubs = ::boost::regbase::nosubs,
+ optimize = ::boost::regbase::optimize,
+ bk_plus_qm = ::boost::regbase::bk_plus_qm,
+ bk_vbar = ::boost::regbase::bk_vbar,
+ no_intervals = ::boost::regbase::no_intervals,
+ no_char_classes = ::boost::regbase::no_char_classes,
+ no_escape_in_lists = ::boost::regbase::no_escape_in_lists,
+ no_mod_m = ::boost::regbase::no_mod_m,
+ mod_x = ::boost::regbase::mod_x,
+ mod_s = ::boost::regbase::mod_s,
+ no_mod_s = ::boost::regbase::no_mod_s,
+
+ basic = ::boost::regbase::basic,
+ extended = ::boost::regbase::extended,
+ normal = ::boost::regbase::normal,
+ emacs = ::boost::regbase::emacs,
+ awk = ::boost::regbase::awk,
+ grep = ::boost::regbase::grep,
+ egrep = ::boost::regbase::egrep,
+ sed = basic,
+ perl = normal,
+ ECMAScript = normal,
+ JavaScript = normal,
+ JScript = normal
+ };
+ typedef ::boost::regbase::flag_type syntax_option_type;
+
+} // namespace regex_constants
+
+} // namespace boost
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif
+
diff --git a/boost/boost/regex/v4/regex.hpp b/boost/boost/regex/v4/regex.hpp
new file mode 100644
index 00000000000..7cc260a3ac9
--- /dev/null
+++ b/boost/boost/regex/v4/regex.hpp
@@ -0,0 +1,202 @@
+/*
+ *
+ * Copyright (c) 1998-2002
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE regex.cpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: Declares boost::basic_regex<> and associated
+ * functions and classes. This header is the main
+ * entry point for the template regex code.
+ */
+
+#ifndef BOOST_RE_REGEX_HPP_INCLUDED
+#define BOOST_RE_REGEX_HPP_INCLUDED
+
+#ifdef __cplusplus
+
+// what follows is all C++ don't include in C builds!!
+
+#ifndef BOOST_REGEX_CONFIG_HPP
+#include <boost/regex/config.hpp>
+#endif
+#ifndef BOOST_REGEX_WORKAROUND_HPP
+#include <boost/regex/v4/regex_workaround.hpp>
+#endif
+
+#ifndef BOOST_REGEX_FWD_HPP
+#include <boost/regex_fwd.hpp>
+#endif
+#ifndef BOOST_REGEX_TRAITS_HPP
+#include <boost/regex/regex_traits.hpp>
+#endif
+#ifndef BOOST_REGEX_RAW_BUFFER_HPP
+#include <boost/regex/v4/error_type.hpp>
+#endif
+#ifndef BOOST_REGEX_V4_MATCH_FLAGS
+#include <boost/regex/v4/match_flags.hpp>
+#endif
+#ifndef BOOST_REGEX_RAW_BUFFER_HPP
+#include <boost/regex/v4/regex_raw_buffer.hpp>
+#endif
+#ifndef BOOST_RE_PAT_EXCEPT_HPP
+#include <boost/regex/pattern_except.hpp>
+#endif
+
+#ifndef BOOST_REGEX_V4_CHAR_REGEX_TRAITS_HPP
+#include <boost/regex/v4/char_regex_traits.hpp>
+#endif
+#ifndef BOOST_REGEX_V4_STATES_HPP
+#include <boost/regex/v4/states.hpp>
+#endif
+#ifndef BOOST_REGEX_V4_REGBASE_HPP
+#include <boost/regex/v4/regbase.hpp>
+#endif
+#ifndef BOOST_REGEX_V4_ITERATOR_TRAITS_HPP
+#include <boost/regex/v4/iterator_traits.hpp>
+#endif
+#ifndef BOOST_REGEX_V4_BASIC_REGEX_HPP
+#include <boost/regex/v4/basic_regex.hpp>
+#endif
+#ifndef BOOST_REGEX_V4_BASIC_REGEX_CREATOR_HPP
+#include <boost/regex/v4/basic_regex_creator.hpp>
+#endif
+#ifndef BOOST_REGEX_V4_BASIC_REGEX_PARSER_HPP
+#include <boost/regex/v4/basic_regex_parser.hpp>
+#endif
+#ifndef BOOST_REGEX_V4_SUB_MATCH_HPP
+#include <boost/regex/v4/sub_match.hpp>
+#endif
+#ifndef BOOST_REGEX_FORMAT_HPP
+#include <boost/regex/v4/regex_format.hpp>
+#endif
+#ifndef BOOST_REGEX_V4_MATCH_RESULTS_HPP
+#include <boost/regex/v4/match_results.hpp>
+#endif
+#ifndef BOOST_REGEX_V4_PROTECTED_CALL_HPP
+#include <boost/regex/v4/protected_call.hpp>
+#endif
+#ifndef BOOST_REGEX_MATCHER_HPP
+#include <boost/regex/v4/perl_matcher.hpp>
+#endif
+//
+// template instances:
+//
+#define BOOST_REGEX_CHAR_T char
+#ifdef BOOST_REGEX_NARROW_INSTANTIATE
+# define BOOST_REGEX_INSTANTIATE
+#endif
+#include <boost/regex/v4/instances.hpp>
+#undef BOOST_REGEX_CHAR_T
+#ifdef BOOST_REGEX_INSTANTIATE
+# undef BOOST_REGEX_INSTANTIATE
+#endif
+
+#ifndef BOOST_NO_WREGEX
+#define BOOST_REGEX_CHAR_T wchar_t
+#ifdef BOOST_REGEX_WIDE_INSTANTIATE
+# define BOOST_REGEX_INSTANTIATE
+#endif
+#include <boost/regex/v4/instances.hpp>
+#undef BOOST_REGEX_CHAR_T
+#ifdef BOOST_REGEX_INSTANTIATE
+# undef BOOST_REGEX_INSTANTIATE
+#endif
+#endif
+
+#if !defined(BOOST_NO_WREGEX) && defined(BOOST_REGEX_HAS_OTHER_WCHAR_T)
+#define BOOST_REGEX_CHAR_T unsigned short
+#ifdef BOOST_REGEX_US_INSTANTIATE
+# define BOOST_REGEX_INSTANTIATE
+#endif
+#include <boost/regex/v4/instances.hpp>
+#undef BOOST_REGEX_CHAR_T
+#ifdef BOOST_REGEX_INSTANTIATE
+# undef BOOST_REGEX_INSTANTIATE
+#endif
+#endif
+
+
+namespace boost{
+#ifdef BOOST_REGEX_NO_FWD
+typedef basic_regex<char, regex_traits<char> > regex;
+#ifndef BOOST_NO_WREGEX
+typedef basic_regex<wchar_t, regex_traits<wchar_t> > wregex;
+#endif
+#endif
+
+typedef match_results<const char*> cmatch;
+typedef match_results<std::string::const_iterator> smatch;
+#ifndef BOOST_NO_WREGEX
+typedef match_results<const wchar_t*> wcmatch;
+typedef match_results<std::wstring::const_iterator> wsmatch;
+#endif
+
+} // namespace boost
+#ifndef BOOST_REGEX_MATCH_HPP
+#include <boost/regex/v4/regex_match.hpp>
+#endif
+#ifndef BOOST_REGEX_V4_REGEX_SEARCH_HPP
+#include <boost/regex/v4/regex_search.hpp>
+#endif
+#ifndef BOOST_REGEX_ITERATOR_HPP
+#include <boost/regex/v4/regex_iterator.hpp>
+#endif
+#ifndef BOOST_REGEX_TOKEN_ITERATOR_HPP
+#include <boost/regex/v4/regex_token_iterator.hpp>
+#endif
+#ifndef BOOST_REGEX_V4_REGEX_GREP_HPP
+#include <boost/regex/v4/regex_grep.hpp>
+#endif
+#ifndef BOOST_REGEX_V4_REGEX_REPLACE_HPP
+#include <boost/regex/v4/regex_replace.hpp>
+#endif
+#ifndef BOOST_REGEX_V4_REGEX_MERGE_HPP
+#include <boost/regex/v4/regex_merge.hpp>
+#endif
+#ifndef BOOST_REGEX_SPLIT_HPP
+#include <boost/regex/v4/regex_split.hpp>
+#endif
+
+#endif // __cplusplus
+
+#endif // include
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/boost/boost/regex/v4/regex_cstring.hpp b/boost/boost/regex/v4/regex_cstring.hpp
new file mode 100644
index 00000000000..589380d6ee5
--- /dev/null
+++ b/boost/boost/regex/v4/regex_cstring.hpp
@@ -0,0 +1,123 @@
+/*
+ *
+ * Copyright (c) 1998-2002
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE regex_cstring.hpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: This is an internal header file, do not include directly.
+ * String support and helper functions, for regular
+ * expression library.
+ */
+
+#ifndef BOOST_REGEX_CSTRING_HPP
+#define BOOST_REGEX_CSTRING_HPP
+
+#ifndef BOOST_REGEX_CONFIG_HPP
+#include <boost/regex/config.hpp>
+#endif
+
+#include <cstring>
+
+namespace boost{
+ namespace re_detail{
+
+//
+// start by defining some template function aliases for C API functions:
+//
+
+template <class charT>
+std::size_t BOOST_REGEX_CALL re_strlen(const charT *s)
+{
+ std::size_t len = 0;
+ while(*s)
+ {
+ ++s;
+ ++len;
+ }
+ return len;
+}
+
+inline std::size_t BOOST_REGEX_CALL re_strlen(const char *s)
+{
+ return std::strlen(s);
+}
+
+#ifndef BOOST_NO_WREGEX
+
+inline std::size_t BOOST_REGEX_CALL re_strlen(const wchar_t *s)
+{
+ return std::wcslen(s);
+}
+
+#endif
+
+#ifndef BOOST_NO_WREGEX
+BOOST_REGEX_DECL void BOOST_REGEX_CALL re_transform(std::basic_string<wchar_t>& out, const std::basic_string<wchar_t>& in);
+#endif
+BOOST_REGEX_DECL void BOOST_REGEX_CALL re_transform(std::string& out, const std::string& in);
+
+template <class charT>
+void BOOST_REGEX_CALL re_trunc_primary(std::basic_string<charT>& s)
+{
+ for(unsigned int i = 0; i < s.size(); ++i)
+ {
+ if(s[i] <= 1)
+ {
+ s.erase(i);
+ break;
+ }
+ }
+}
+
+inline char* BOOST_REGEX_CALL re_strcpy(char *s1, const char *s2)
+{
+ #if defined(__BORLANDC__) && defined(strcpy)
+ return ::strcpy(s1, s2);
+ #else
+ return std::strcpy(s1, s2);
+ #endif
+}
+
+#ifndef BOOST_NO_WREGEX
+
+inline wchar_t* BOOST_REGEX_CALL re_strcpy(wchar_t *s1, const wchar_t *s2)
+{
+ return std::wcscpy(s1, s2);
+}
+
+#endif
+
+
+template <class charT>
+charT* BOOST_REGEX_CALL re_strdup(const charT* p)
+{
+ charT* buf = new charT[re_strlen(p) + 1];
+ re_strcpy(buf, p);
+ return buf;
+}
+
+template <class charT>
+inline void BOOST_REGEX_CALL re_strfree(charT* p)
+{
+ delete[] p;
+}
+
+} // namespace re_detail
+} // namespace boost
+
+#endif // BOOST_REGEX_CSTRING_HPP
+
+
+
+
+
+
diff --git a/boost/boost/regex/v4/regex_format.hpp b/boost/boost/regex/v4/regex_format.hpp
new file mode 100644
index 00000000000..5bd47cf69cd
--- /dev/null
+++ b/boost/boost/regex/v4/regex_format.hpp
@@ -0,0 +1,637 @@
+/*
+ *
+ * Copyright (c) 1998-2002
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE regex_format.hpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: Provides formatting output routines for search and replace
+ * operations. Note this is an internal header file included
+ * by regex.hpp, do not include on its own.
+ */
+
+#ifndef BOOST_REGEX_FORMAT_HPP
+#define BOOST_REGEX_FORMAT_HPP
+
+
+namespace boost{
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+//
+// Forward declaration:
+//
+ template <class BidiIterator, class Allocator = BOOST_DEDUCED_TYPENAME std::vector<sub_match<BidiIterator> >::allocator_type >
+class match_results;
+
+namespace re_detail{
+
+//
+// struct trivial_format_traits:
+// defines minimum localisation support for formatting
+// in the case that the actual regex traits is unavailable.
+//
+template <class charT>
+struct trivial_format_traits
+{
+ typedef charT char_type;
+
+ static std::ptrdiff_t length(const charT* p)
+ {
+ return global_length(p);
+ }
+ static charT tolower(charT c)
+ {
+ return ::boost::re_detail::global_lower(c);
+ }
+ static charT toupper(charT c)
+ {
+ return ::boost::re_detail::global_upper(c);
+ }
+ static int value(const charT c, int radix)
+ {
+ int result = global_value(c);
+ return result >= radix ? -1 : result;
+ }
+ int toi(const charT*& p1, const charT* p2, int radix)const
+ {
+ return global_toi(p1, p2, radix, *this);
+ }
+};
+
+template <class OutputIterator, class Results, class traits>
+class basic_regex_formatter
+{
+public:
+ typedef typename traits::char_type char_type;
+ basic_regex_formatter(OutputIterator o, const Results& r, const traits& t)
+ : m_traits(t), m_results(r), m_out(o), m_state(output_copy), m_have_conditional(false) {}
+ OutputIterator format(const char_type* p1, const char_type* p2, match_flag_type f);
+ OutputIterator format(const char_type* p1, match_flag_type f)
+ {
+ return format(p1, p1 + m_traits.length(p1), f);
+ }
+private:
+ typedef typename Results::value_type sub_match_type;
+ enum output_state
+ {
+ output_copy,
+ output_next_lower,
+ output_next_upper,
+ output_lower,
+ output_upper,
+ output_none
+ };
+
+ void put(char_type c);
+ void put(const sub_match_type& sub);
+ void format_all();
+ void format_perl();
+ void format_escape();
+ void format_conditional();
+ void format_until_scope_end();
+
+ const traits& m_traits; // the traits class for localised formatting operations
+ const Results& m_results; // the match_results being used.
+ OutputIterator m_out; // where to send output.
+ const char_type* m_position; // format string, current position
+ const char_type* m_end; // format string end
+ match_flag_type m_flags; // format flags to use
+ output_state m_state; // what to do with the next character
+ bool m_have_conditional; // we are parsing a conditional
+private:
+ basic_regex_formatter(const basic_regex_formatter&);
+ basic_regex_formatter& operator=(const basic_regex_formatter&);
+};
+
+template <class OutputIterator, class Results, class traits>
+OutputIterator basic_regex_formatter<OutputIterator, Results, traits>::format(const char_type* p1, const char_type* p2, match_flag_type f)
+{
+ m_position = p1;
+ m_end = p2;
+ m_flags = f;
+ format_all();
+ return m_out;
+}
+
+template <class OutputIterator, class Results, class traits>
+void basic_regex_formatter<OutputIterator, Results, traits>::format_all()
+{
+ // over and over:
+ while(m_position != m_end)
+ {
+ switch(*m_position)
+ {
+ case '&':
+ if(m_flags & ::boost::regex_constants::format_sed)
+ {
+ ++m_position;
+ put(m_results[0]);
+ break;
+ }
+ put(*m_position++);
+ break;
+ case '\\':
+ format_escape();
+ break;
+ case '(':
+ if(m_flags & boost::regex_constants::format_all)
+ {
+ ++m_position;
+ bool have_conditional = m_have_conditional;
+ m_have_conditional = false;
+ format_until_scope_end();
+ m_have_conditional = have_conditional;
+ if(m_position == m_end)
+ return;
+ BOOST_ASSERT(*m_position == static_cast<char_type>(')'));
+ ++m_position; // skip the closing ')'
+ break;
+ }
+ put(*m_position);
+ ++m_position;
+ break;
+ case ')':
+ if(m_flags & boost::regex_constants::format_all)
+ {
+ return;
+ }
+ put(*m_position);
+ ++m_position;
+ break;
+ case ':':
+ if((m_flags & boost::regex_constants::format_all) && m_have_conditional)
+ {
+ return;
+ }
+ put(*m_position);
+ ++m_position;
+ break;
+ case '?':
+ if(m_flags & boost::regex_constants::format_all)
+ {
+ ++m_position;
+ format_conditional();
+ break;
+ }
+ put(*m_position);
+ ++m_position;
+ break;
+ case '$':
+ if((m_flags & format_sed) == 0)
+ {
+ format_perl();
+ break;
+ }
+ // fall through, not a special character:
+ default:
+ put(*m_position);
+ ++m_position;
+ break;
+ }
+ }
+}
+
+template <class OutputIterator, class Results, class traits>
+void basic_regex_formatter<OutputIterator, Results, traits>::format_perl()
+{
+ //
+ // On entry *m_position points to a '$' character
+ // output the information that goes with it:
+ //
+ BOOST_ASSERT(*m_position == '$');
+ //
+ // see if this is a trailing '$':
+ //
+ if(++m_position == m_end)
+ {
+ --m_position;
+ put(*m_position);
+ ++m_position;
+ return;
+ }
+ //
+ // OK find out what kind it is:
+ //
+ switch(*m_position)
+ {
+ case '&':
+ ++m_position;
+ put(this->m_results[0]);
+ break;
+ case '`':
+ ++m_position;
+ put(this->m_results.prefix());
+ break;
+ case '\'':
+ ++m_position;
+ put(this->m_results.suffix());
+ break;
+ case '$':
+ put(*m_position++);
+ break;
+ default:
+ // see if we have a number:
+ {
+ std::ptrdiff_t len = ::boost::re_detail::distance(m_position, m_end);
+ len = (std::min)(static_cast<std::ptrdiff_t>(2), len);
+ int v = m_traits.toi(m_position, m_position + len, 10);
+ if(v < 0)
+ {
+ // leave the $ as is, and carry on:
+ --m_position;
+ put(*m_position);
+ ++m_position;
+ break;
+ }
+ // otherwise output sub v:
+ put(this->m_results[v]);
+ }
+ }
+}
+
+template <class OutputIterator, class Results, class traits>
+void basic_regex_formatter<OutputIterator, Results, traits>::format_escape()
+{
+ // skip the escape and check for trailing escape:
+ if(++m_position == m_end)
+ {
+ put(static_cast<char_type>('\\'));
+ return;
+ }
+ // now switch on the escape type:
+ switch(*m_position)
+ {
+ case 'a':
+ put(static_cast<char_type>('\a'));
+ ++m_position;
+ break;
+ case 'f':
+ put(static_cast<char_type>('\f'));
+ ++m_position;
+ break;
+ case 'n':
+ put(static_cast<char_type>('\n'));
+ ++m_position;
+ break;
+ case 'r':
+ put(static_cast<char_type>('\r'));
+ ++m_position;
+ break;
+ case 't':
+ put(static_cast<char_type>('\t'));
+ ++m_position;
+ break;
+ case 'v':
+ put(static_cast<char_type>('\v'));
+ ++m_position;
+ break;
+ case 'x':
+ if(++m_position == m_end)
+ {
+ put(static_cast<char_type>('x'));
+ return;
+ }
+ // maybe have \x{ddd}
+ if(*m_position == static_cast<char_type>('{'))
+ {
+ ++m_position;
+ int val = m_traits.toi(m_position, m_end, 16);
+ if(val < 0)
+ {
+ // invalid value treat everything as literals:
+ put(static_cast<char_type>('x'));
+ put(static_cast<char_type>('{'));
+ return;
+ }
+ if(*m_position != static_cast<char_type>('}'))
+ {
+ while(*m_position != static_cast<char_type>('\\'))
+ --m_position;
+ ++m_position;
+ put(*m_position++);
+ return;
+ }
+ ++m_position;
+ put(static_cast<char_type>(val));
+ return;
+ }
+ else
+ {
+ std::ptrdiff_t len = ::boost::re_detail::distance(m_position, m_end);
+ len = (std::min)(static_cast<std::ptrdiff_t>(2), len);
+ int val = m_traits.toi(m_position, m_position + len, 16);
+ if(val < 0)
+ {
+ --m_position;
+ put(*m_position++);
+ return;
+ }
+ put(static_cast<char_type>(val));
+ }
+ break;
+ case 'c':
+ if(++m_position == m_end)
+ {
+ --m_position;
+ put(*m_position++);
+ return;
+ }
+ put(static_cast<char_type>(*m_position++ % 32));
+ break;
+ case 'e':
+ put(static_cast<char_type>(27));
+ ++m_position;
+ break;
+ default:
+ // see if we have a perl specific escape:
+ if((m_flags & boost::regex_constants::format_sed) == 0)
+ {
+ bool breakout = false;
+ switch(*m_position)
+ {
+ case 'l':
+ ++m_position;
+ m_state = output_next_lower;
+ breakout = true;
+ break;
+ case 'L':
+ ++m_position;
+ m_state = output_lower;
+ breakout = true;
+ break;
+ case 'u':
+ ++m_position;
+ m_state = output_next_upper;
+ breakout = true;
+ break;
+ case 'U':
+ ++m_position;
+ m_state = output_upper;
+ breakout = true;
+ break;
+ case 'E':
+ ++m_position;
+ m_state = output_copy;
+ breakout = true;
+ break;
+ }
+ if(breakout)
+ break;
+ }
+ // see if we have a \n sed style backreference:
+ int v = m_traits.toi(m_position, m_position+1, 10);
+ if((v > 0) || ((v == 0) && (m_flags & ::boost::regex_constants::format_sed)))
+ {
+ put(m_results[v]);
+ break;
+ }
+ else if(v == 0)
+ {
+ // octal ecape sequence:
+ --m_position;
+ std::ptrdiff_t len = ::boost::re_detail::distance(m_position, m_end);
+ len = (std::min)(static_cast<std::ptrdiff_t>(4), len);
+ v = m_traits.toi(m_position, m_position + len, 8);
+ BOOST_ASSERT(v >= 0);
+ put(static_cast<char_type>(v));
+ break;
+ }
+ // Otherwise output the character "as is":
+ put(*m_position++);
+ break;
+ }
+}
+
+template <class OutputIterator, class Results, class traits>
+void basic_regex_formatter<OutputIterator, Results, traits>::format_conditional()
+{
+ if(m_position == m_end)
+ {
+ // oops trailing '?':
+ put(static_cast<char_type>('?'));
+ return;
+ }
+ std::ptrdiff_t len = ::boost::re_detail::distance(m_position, m_end);
+ len = (std::min)(static_cast<std::ptrdiff_t>(2), len);
+ int v = m_traits.toi(m_position, m_position + len, 10);
+ if(v < 0)
+ {
+ // oops not a number:
+ put(static_cast<char_type>('?'));
+ return;
+ }
+
+ // output varies depending upon whether sub-expression v matched or not:
+ if(m_results[v].matched)
+ {
+ m_have_conditional = true;
+ format_all();
+ m_have_conditional = false;
+ if((m_position != m_end) && (*m_position == static_cast<char_type>(':')))
+ {
+ // skip the ':':
+ ++m_position;
+ // save output state, then turn it off:
+ output_state saved_state = m_state;
+ m_state = output_none;
+ // format the rest of this scope:
+ format_until_scope_end();
+ // restore output state:
+ m_state = saved_state;
+ }
+ }
+ else
+ {
+ // save output state, then turn it off:
+ output_state saved_state = m_state;
+ m_state = output_none;
+ // format until ':' or ')':
+ m_have_conditional = true;
+ format_all();
+ m_have_conditional = false;
+ // restore state:
+ m_state = saved_state;
+ if((m_position != m_end) && (*m_position == static_cast<char_type>(':')))
+ {
+ // skip the ':':
+ ++m_position;
+ // format the rest of this scope:
+ format_until_scope_end();
+ }
+ }
+}
+
+template <class OutputIterator, class Results, class traits>
+void basic_regex_formatter<OutputIterator, Results, traits>::format_until_scope_end()
+{
+ do
+ {
+ format_all();
+ if((m_position == m_end) || (*m_position == static_cast<char_type>(')')))
+ return;
+ put(*m_position++);
+ }while(m_position != m_end);
+}
+
+template <class OutputIterator, class Results, class traits>
+void basic_regex_formatter<OutputIterator, Results, traits>::put(char_type c)
+{
+ // write a single character to output
+ // according to which case translation mode we are in:
+ switch(this->m_state)
+ {
+ case output_none:
+ return;
+ case output_next_lower:
+ c = m_traits.tolower(c);
+ this->m_state = output_copy;
+ break;
+ case output_next_upper:
+ c = m_traits.toupper(c);
+ this->m_state = output_copy;
+ break;
+ case output_lower:
+ c = m_traits.tolower(c);
+ break;
+ case output_upper:
+ c = m_traits.toupper(c);
+ break;
+ default:
+ break;
+ }
+ *m_out = c;
+ ++m_out;
+}
+
+template <class OutputIterator, class Results, class traits>
+void basic_regex_formatter<OutputIterator, Results, traits>::put(const sub_match_type& sub)
+{
+ typedef typename sub_match_type::iterator iterator_type;
+ iterator_type i = sub.first;
+ while(i != sub.second)
+ {
+ put(*i);
+ ++i;
+ }
+}
+
+template <class S>
+class string_out_iterator
+#ifndef BOOST_NO_STD_ITERATOR
+ : public std::iterator<std::output_iterator_tag, typename S::value_type>
+#endif
+{
+ S* out;
+public:
+ string_out_iterator(S& s) : out(&s) {}
+ string_out_iterator& operator++() { return *this; }
+ string_out_iterator& operator++(int) { return *this; }
+ string_out_iterator& operator*() { return *this; }
+ string_out_iterator& operator=(typename S::value_type v)
+ {
+ out->append(1, v);
+ return *this;
+ }
+
+#ifdef BOOST_NO_STD_ITERATOR
+ typedef std::ptrdiff_t difference_type;
+ typedef typename S::value_type value_type;
+ typedef value_type* pointer;
+ typedef value_type& reference;
+ typedef std::output_iterator_tag iterator_category;
+#endif
+};
+
+template <class OutputIterator, class Iterator, class Alloc, class charT, class traits>
+OutputIterator regex_format_imp(OutputIterator out,
+ const match_results<Iterator, Alloc>& m,
+ const charT* p1, const charT* p2,
+ match_flag_type flags,
+ const traits& t
+ )
+{
+ if(flags & regex_constants::format_literal)
+ {
+ return re_detail::copy(p1, p2, out);
+ }
+
+ re_detail::basic_regex_formatter<
+ OutputIterator,
+ match_results<Iterator, Alloc>,
+ traits > f(out, m, t);
+ return f.format(p1, p2, flags);
+}
+
+
+} // namespace re_detail
+
+template <class OutputIterator, class Iterator, class charT>
+OutputIterator regex_format(OutputIterator out,
+ const match_results<Iterator>& m,
+ const charT* fmt,
+ match_flag_type flags = format_all
+ )
+{
+ re_detail::trivial_format_traits<charT> traits;
+ return re_detail::regex_format_imp(out, m, fmt, fmt + traits.length(fmt), flags, traits);
+}
+
+template <class OutputIterator, class Iterator, class charT>
+OutputIterator regex_format(OutputIterator out,
+ const match_results<Iterator>& m,
+ const std::basic_string<charT>& fmt,
+ match_flag_type flags = format_all
+ )
+{
+ re_detail::trivial_format_traits<charT> traits;
+ return re_detail::regex_format_imp(out, m, fmt.data(), fmt.data() + fmt.size(), flags, traits);
+}
+
+template <class Iterator, class charT>
+std::basic_string<charT> regex_format(const match_results<Iterator>& m,
+ const charT* fmt,
+ match_flag_type flags = format_all)
+{
+ std::basic_string<charT> result;
+ re_detail::string_out_iterator<std::basic_string<charT> > i(result);
+ re_detail::trivial_format_traits<charT> traits;
+ re_detail::regex_format_imp(i, m, fmt, fmt + traits.length(fmt), flags, traits);
+ return result;
+}
+
+template <class Iterator, class charT>
+std::basic_string<charT> regex_format(const match_results<Iterator>& m,
+ const std::basic_string<charT>& fmt,
+ match_flag_type flags = format_all)
+{
+ std::basic_string<charT> result;
+ re_detail::string_out_iterator<std::basic_string<charT> > i(result);
+ re_detail::trivial_format_traits<charT> traits;
+ re_detail::regex_format_imp(i, m, fmt.data(), fmt.data() + fmt.size(), flags, traits);
+ return result;
+}
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+} // namespace boost
+
+#endif // BOOST_REGEX_FORMAT_HPP
+
+
+
+
+
+
diff --git a/boost/boost/regex/v4/regex_fwd.hpp b/boost/boost/regex/v4/regex_fwd.hpp
new file mode 100644
index 00000000000..3076b069ace
--- /dev/null
+++ b/boost/boost/regex/v4/regex_fwd.hpp
@@ -0,0 +1,73 @@
+/*
+ *
+ * Copyright (c) 1998-2002
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE regex_fwd.cpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: Forward declares boost::basic_regex<> and
+ * associated typedefs.
+ */
+
+#ifndef BOOST_REGEX_FWD_HPP_INCLUDED
+#define BOOST_REGEX_FWD_HPP_INCLUDED
+
+#ifndef BOOST_REGEX_CONFIG_HPP
+#include <boost/regex/config.hpp>
+#endif
+
+//
+// define BOOST_REGEX_NO_FWD if this
+// header doesn't work!
+//
+#ifdef BOOST_REGEX_NO_FWD
+# ifndef BOOST_RE_REGEX_HPP
+# include <boost/regex.hpp>
+# endif
+#else
+
+namespace boost{
+
+template <class charT>
+class cpp_regex_traits;
+template <class charT>
+struct c_regex_traits;
+template <class charT>
+class w32_regex_traits;
+
+#ifdef BOOST_REGEX_USE_WIN32_LOCALE
+template <class charT, class implementationT = w32_regex_traits<charT> >
+struct regex_traits;
+#elif defined(BOOST_REGEX_USE_CPP_LOCALE)
+template <class charT, class implementationT = cpp_regex_traits<charT> >
+struct regex_traits;
+#else
+template <class charT, class implementationT = c_regex_traits<charT> >
+struct regex_traits;
+#endif
+
+template <class charT, class traits = regex_traits<charT> >
+class basic_regex;
+
+typedef basic_regex<char, regex_traits<char> > regex;
+#ifndef BOOST_NO_WREGEX
+typedef basic_regex<wchar_t, regex_traits<wchar_t> > wregex;
+#endif
+
+} // namespace boost
+
+#endif // BOOST_REGEX_NO_FWD
+
+#endif
+
+
+
+
diff --git a/boost/boost/regex/v4/regex_grep.hpp b/boost/boost/regex/v4/regex_grep.hpp
new file mode 100644
index 00000000000..b8bb84796e4
--- /dev/null
+++ b/boost/boost/regex/v4/regex_grep.hpp
@@ -0,0 +1,141 @@
+/*
+ *
+ * Copyright (c) 1998-2002
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE regex_grep.hpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: Provides regex_grep implementation.
+ */
+
+#ifndef BOOST_REGEX_V4_REGEX_GREP_HPP
+#define BOOST_REGEX_V4_REGEX_GREP_HPP
+
+
+namespace boost{
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+//
+// regex_grep:
+// find all non-overlapping matches within the sequence first last:
+//
+template <class Predicate, class BidiIterator, class charT, class traits>
+inline unsigned int regex_grep(Predicate foo,
+ BidiIterator first,
+ BidiIterator last,
+ const basic_regex<charT, traits>& e,
+ match_flag_type flags = match_default)
+{
+ if(e.flags() & regex_constants::failbit)
+ return false;
+
+ typedef typename match_results<BidiIterator>::allocator_type match_allocator_type;
+
+ match_results<BidiIterator> m;
+ re_detail::perl_matcher<BidiIterator, match_allocator_type, traits> matcher(first, last, m, e, flags, first);
+ unsigned int count = 0;
+ while(matcher.find())
+ {
+ ++count;
+ if(0 == foo(m))
+ return count; // caller doesn't want to go on
+ if(m[0].second == last)
+ return count; // we've reached the end, don't try and find an extra null match.
+ if(m.length() == 0)
+ {
+ if(m[0].second == last)
+ return count;
+ // we found a NULL-match, now try to find
+ // a non-NULL one at the same position:
+ match_results<BidiIterator, match_allocator_type> m2(m);
+ matcher.setf(match_not_null | match_continuous);
+ if(matcher.find())
+ {
+ ++count;
+ if(0 == foo(m))
+ return count;
+ }
+ else
+ {
+ // reset match back to where it was:
+ m = m2;
+ }
+ matcher.unsetf((match_not_null | match_continuous) & ~flags);
+ }
+ }
+ return count;
+}
+
+//
+// regex_grep convenience interfaces:
+#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+//
+// this isn't really a partial specialisation, but template function
+// overloading - if the compiler doesn't support partial specialisation
+// then it really won't support this either:
+template <class Predicate, class charT, class traits>
+inline unsigned int regex_grep(Predicate foo, const charT* str,
+ const basic_regex<charT, traits>& e,
+ match_flag_type flags = match_default)
+{
+ return regex_grep(foo, str, str + traits::length(str), e, flags);
+}
+
+template <class Predicate, class ST, class SA, class charT, class traits>
+inline unsigned int regex_grep(Predicate foo, const std::basic_string<charT, ST, SA>& s,
+ const basic_regex<charT, traits>& e,
+ match_flag_type flags = match_default)
+{
+ return regex_grep(foo, s.begin(), s.end(), e, flags);
+}
+#else // partial specialisation
+inline unsigned int regex_grep(bool (*foo)(const cmatch&), const char* str,
+ const regex& e,
+ match_flag_type flags = match_default)
+{
+ return regex_grep(foo, str, str + regex::traits_type::length(str), e, flags);
+}
+#ifndef BOOST_NO_WREGEX
+inline unsigned int regex_grep(bool (*foo)(const wcmatch&), const wchar_t* str,
+ const wregex& e,
+ match_flag_type flags = match_default)
+{
+ return regex_grep(foo, str, str + wregex::traits_type::length(str), e, flags);
+}
+#endif
+inline unsigned int regex_grep(bool (*foo)(const match_results<std::string::const_iterator>&), const std::string& s,
+ const regex& e,
+ match_flag_type flags = match_default)
+{
+ return regex_grep(foo, s.begin(), s.end(), e, flags);
+}
+#if !defined(BOOST_NO_WREGEX)
+inline unsigned int regex_grep(bool (*foo)(const match_results<std::basic_string<wchar_t>::const_iterator>&),
+ const std::basic_string<wchar_t>& s,
+ const wregex& e,
+ match_flag_type flags = match_default)
+{
+ return regex_grep(foo, s.begin(), s.end(), e, flags);
+}
+#endif
+#endif
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+} // namespace boost
+
+#endif // BOOST_REGEX_V4_REGEX_GREP_HPP
+
diff --git a/boost/boost/regex/v4/regex_iterator.hpp b/boost/boost/regex/v4/regex_iterator.hpp
new file mode 100644
index 00000000000..eb51a46fdb5
--- /dev/null
+++ b/boost/boost/regex/v4/regex_iterator.hpp
@@ -0,0 +1,187 @@
+/*
+ *
+ * Copyright (c) 2003
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE regex_iterator.hpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: Provides regex_iterator implementation.
+ */
+
+#ifndef BOOST_REGEX_V4_REGEX_ITERATOR_HPP
+#define BOOST_REGEX_V4_REGEX_ITERATOR_HPP
+
+#include <boost/shared_ptr.hpp>
+
+namespace boost{
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+template <class BidirectionalIterator,
+ class charT,
+ class traits>
+class regex_iterator_implementation
+{
+ typedef basic_regex<charT, traits> regex_type;
+
+ match_results<BidirectionalIterator> what; // current match
+ BidirectionalIterator base; // start of sequence
+ BidirectionalIterator end; // end of sequence
+ const regex_type re; // the expression
+ match_flag_type flags; // flags for matching
+
+public:
+ regex_iterator_implementation(const regex_type* p, BidirectionalIterator last, match_flag_type f)
+ : base(), end(last), re(*p), flags(f){}
+ bool init(BidirectionalIterator first)
+ {
+ base = first;
+ return regex_search(first, end, what, re, flags);
+ }
+ bool compare(const regex_iterator_implementation& that)
+ {
+ if(this == &that) return true;
+ return (&re.get_data() == &that.re.get_data()) && (end == that.end) && (flags == that.flags) && (what[0].first == that.what[0].first) && (what[0].second == that.what[0].second);
+ }
+ const match_results<BidirectionalIterator>& get()
+ { return what; }
+ bool next()
+ {
+ //if(what.prefix().first != what[0].second)
+ // flags |= match_prev_avail;
+ BidirectionalIterator next_start = what[0].second;
+ match_flag_type f(flags);
+ if(!what.length())
+ f |= regex_constants::match_not_initial_null;
+ //if(base != next_start)
+ // f |= regex_constants::match_not_bob;
+ bool result = regex_search(next_start, end, what, re, f, base);
+ if(result)
+ what.set_base(base);
+ return result;
+ }
+private:
+ regex_iterator_implementation& operator=(const regex_iterator_implementation&);
+};
+
+template <class BidirectionalIterator,
+ class charT = BOOST_DEDUCED_TYPENAME re_detail::regex_iterator_traits<BidirectionalIterator>::value_type,
+ class traits = regex_traits<charT> >
+class regex_iterator
+#ifndef BOOST_NO_STD_ITERATOR
+ : public std::iterator<
+ std::forward_iterator_tag,
+ match_results<BidirectionalIterator>,
+ typename re_detail::regex_iterator_traits<BidirectionalIterator>::difference_type,
+ const match_results<BidirectionalIterator>*,
+ const match_results<BidirectionalIterator>& >
+#endif
+{
+private:
+ typedef regex_iterator_implementation<BidirectionalIterator, charT, traits> impl;
+ typedef shared_ptr<impl> pimpl;
+public:
+ typedef basic_regex<charT, traits> regex_type;
+ typedef match_results<BidirectionalIterator> value_type;
+ typedef typename re_detail::regex_iterator_traits<BidirectionalIterator>::difference_type
+ difference_type;
+ typedef const value_type* pointer;
+ typedef const value_type& reference;
+ typedef std::forward_iterator_tag iterator_category;
+
+ regex_iterator(){}
+ regex_iterator(BidirectionalIterator a, BidirectionalIterator b,
+ const regex_type& re,
+ match_flag_type m = match_default)
+ : pdata(new impl(&re, b, m))
+ {
+ if(!pdata->init(a))
+ {
+ pdata.reset();
+ }
+ }
+ regex_iterator(const regex_iterator& that)
+ : pdata(that.pdata) {}
+ regex_iterator& operator=(const regex_iterator& that)
+ {
+ pdata = that.pdata;
+ return *this;
+ }
+ bool operator==(const regex_iterator& that)const
+ {
+ if((pdata.get() == 0) || (that.pdata.get() == 0))
+ return pdata.get() == that.pdata.get();
+ return pdata->compare(*(that.pdata.get()));
+ }
+ bool operator!=(const regex_iterator& that)const
+ { return !(*this == that); }
+ const value_type& operator*()const
+ { return pdata->get(); }
+ const value_type* operator->()const
+ { return &(pdata->get()); }
+ regex_iterator& operator++()
+ {
+ cow();
+ if(0 == pdata->next())
+ {
+ pdata.reset();
+ }
+ return *this;
+ }
+ regex_iterator operator++(int)
+ {
+ regex_iterator result(*this);
+ ++(*this);
+ return result;
+ }
+private:
+
+ pimpl pdata;
+
+ void cow()
+ {
+ // copy-on-write
+ if(pdata.get() && !pdata.unique())
+ {
+ pdata.reset(new impl(*(pdata.get())));
+ }
+ }
+};
+
+typedef regex_iterator<const char*> cregex_iterator;
+typedef regex_iterator<std::string::const_iterator> sregex_iterator;
+#ifndef BOOST_NO_WREGEX
+typedef regex_iterator<const wchar_t*> wcregex_iterator;
+typedef regex_iterator<std::wstring::const_iterator> wsregex_iterator;
+#endif
+
+// make_regex_iterator:
+template <class charT, class traits>
+inline regex_iterator<const charT*, charT, traits> make_regex_iterator(const charT* p, const basic_regex<charT, traits>& e, regex_constants::match_flag_type m = regex_constants::match_default)
+{
+ return regex_iterator<const charT*, charT, traits>(p, p+traits::length(p), e, m);
+}
+template <class charT, class traits, class ST, class SA>
+inline regex_iterator<typename std::basic_string<charT, ST, SA>::const_iterator, charT, traits> make_regex_iterator(const std::basic_string<charT, ST, SA>& p, const basic_regex<charT, traits>& e, regex_constants::match_flag_type m = regex_constants::match_default)
+{
+ return regex_iterator<typename std::basic_string<charT, ST, SA>::const_iterator, charT, traits>(p.begin(), p.end(), e, m);
+}
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+} // namespace boost
+
+#endif // BOOST_REGEX_V4_REGEX_ITERATOR_HPP
+
diff --git a/boost/boost/regex/v4/regex_kmp.hpp b/boost/boost/regex/v4/regex_kmp.hpp
new file mode 100644
index 00000000000..3607ef7182b
--- /dev/null
+++ b/boost/boost/regex/v4/regex_kmp.hpp
@@ -0,0 +1,108 @@
+/*
+ *
+ * Copyright (c) 1998-2002
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE regex_kmp.hpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: Provides Knuth Morris Pratt search operations.
+ * Note this is an internal header file included
+ * by regex.hpp, do not include on its own.
+ */
+
+#ifndef BOOST_REGEX_KMP_HPP
+#define BOOST_REGEX_KMP_HPP
+
+#ifdef BOOST_REGEX_CONFIG_HPP
+#include <boost/regex/config.hpp>
+#endif
+
+
+namespace boost{
+ namespace re_detail{
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+template <class charT>
+struct kmp_info
+{
+ unsigned int size;
+ unsigned int len;
+ const charT* pstr;
+ int kmp_next[1];
+};
+
+template <class charT, class Allocator>
+void kmp_free(kmp_info<charT>* pinfo, const Allocator& a)
+{
+ typedef typename boost::detail::rebind_allocator<char, Allocator>::type atype;
+ atype(a).deallocate(reinterpret_cast<char*>(pinfo), pinfo->size);
+}
+
+template <class iterator, class charT, class Trans, class Allocator>
+kmp_info<charT>* kmp_compile(iterator first, iterator last, charT, Trans translate, const Allocator& a)
+{
+ typedef typename boost::detail::rebind_allocator<char, Allocator>::type atype;
+ int i, j, m;
+ i = 0;
+ m = static_cast<int>(::boost::re_detail::distance(first, last));
+ ++m;
+ unsigned int size = sizeof(kmp_info<charT>) + sizeof(int)*m + sizeof(charT)*m;
+ --m;
+ //
+ // allocate struct and fill it in:
+ //
+ kmp_info<charT>* pinfo = reinterpret_cast<kmp_info<charT>*>(atype(a).allocate(size));
+ BOOST_REGEX_NOEH_ASSERT(pinfo)
+ pinfo->size = size;
+ pinfo->len = m;
+ charT* p = reinterpret_cast<charT*>(reinterpret_cast<char*>(pinfo) + sizeof(kmp_info<charT>) + sizeof(int)*(m+1));
+ pinfo->pstr = p;
+ while(first != last)
+ {
+ *p = translate(*first);
+ ++first;
+ ++p;
+ }
+ *p = 0;
+ //
+ // finally do regular kmp compile:
+ //
+ j = pinfo->kmp_next[0] = -1;
+ while (i < m)
+ {
+ while ((j > -1) && (pinfo->pstr[i] != pinfo->pstr[j]))
+ j = pinfo->kmp_next[j];
+ ++i;
+ ++j;
+ if (pinfo->pstr[i] == pinfo->pstr[j])
+ pinfo->kmp_next[i] = pinfo->kmp_next[j];
+ else
+ pinfo->kmp_next[i] = j;
+ }
+
+ return pinfo;
+}
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+ } // namepsace re_detail
+} // namespace boost
+
+#endif // BOOST_REGEX_KMP_HPP
+
+
+
+
diff --git a/boost/boost/regex/v4/regex_match.hpp b/boost/boost/regex/v4/regex_match.hpp
new file mode 100644
index 00000000000..7c1f88d6466
--- /dev/null
+++ b/boost/boost/regex/v4/regex_match.hpp
@@ -0,0 +1,368 @@
+/*
+ *
+ * Copyright (c) 1998-2002
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE regex_match.hpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: Regular expression matching algorithms.
+ * Note this is an internal header file included
+ * by regex.hpp, do not include on its own.
+ */
+
+
+#ifndef BOOST_REGEX_MATCH_HPP
+#define BOOST_REGEX_MATCH_HPP
+
+namespace boost{
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+//
+// proc regex_match
+// returns true if the specified regular expression matches
+// the whole of the input. Fills in what matched in m.
+//
+template <class BidiIterator, class Allocator, class charT, class traits>
+bool regex_match(BidiIterator first, BidiIterator last,
+ match_results<BidiIterator, Allocator>& m,
+ const basic_regex<charT, traits>& e,
+ match_flag_type flags = match_default)
+{
+ re_detail::perl_matcher<BidiIterator, Allocator, traits> matcher(first, last, m, e, flags, first);
+ return matcher.match();
+}
+template <class iterator, class charT, class traits>
+bool regex_match(iterator first, iterator last,
+ const basic_regex<charT, traits>& e,
+ match_flag_type flags = match_default)
+{
+ match_results<iterator> m;
+ return regex_match(first, last, m, e, flags | regex_constants::match_any);
+}
+//
+// query_match convenience interfaces:
+#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+//
+// this isn't really a partial specialisation, but template function
+// overloading - if the compiler doesn't support partial specialisation
+// then it really won't support this either:
+template <class charT, class Allocator, class traits>
+inline bool regex_match(const charT* str,
+ match_results<const charT*, Allocator>& m,
+ const basic_regex<charT, traits>& e,
+ match_flag_type flags = match_default)
+{
+ return regex_match(str, str + traits::length(str), m, e, flags);
+}
+
+template <class ST, class SA, class Allocator, class charT, class traits>
+inline bool regex_match(const std::basic_string<charT, ST, SA>& s,
+ match_results<typename std::basic_string<charT, ST, SA>::const_iterator, Allocator>& m,
+ const basic_regex<charT, traits>& e,
+ match_flag_type flags = match_default)
+{
+ return regex_match(s.begin(), s.end(), m, e, flags);
+}
+template <class charT, class traits>
+inline bool regex_match(const charT* str,
+ const basic_regex<charT, traits>& e,
+ match_flag_type flags = match_default)
+{
+ match_results<const charT*> m;
+ return regex_match(str, str + traits::length(str), m, e, flags | regex_constants::match_any);
+}
+
+template <class ST, class SA, class charT, class traits>
+inline bool regex_match(const std::basic_string<charT, ST, SA>& s,
+ const basic_regex<charT, traits>& e,
+ match_flag_type flags = match_default)
+{
+ typedef typename std::basic_string<charT, ST, SA>::const_iterator iterator;
+ match_results<iterator> m;
+ return regex_match(s.begin(), s.end(), m, e, flags | regex_constants::match_any);
+}
+#else // partial ordering
+inline bool regex_match(const char* str,
+ cmatch& m,
+ const regex& e,
+ match_flag_type flags = match_default)
+{
+ return regex_match(str, str + regex::traits_type::length(str), m, e, flags);
+}
+inline bool regex_match(const char* str,
+ const regex& e,
+ match_flag_type flags = match_default)
+{
+ match_results<const char*> m;
+ return regex_match(str, str + regex::traits_type::length(str), m, e, flags | regex_constants::match_any);
+}
+#ifndef BOOST_NO_STD_LOCALE
+inline bool regex_match(const char* str,
+ cmatch& m,
+ const basic_regex<char, cpp_regex_traits<char> >& e,
+ match_flag_type flags = match_default)
+{
+ return regex_match(str, str + regex::traits_type::length(str), m, e, flags);
+}
+inline bool regex_match(const char* str,
+ const basic_regex<char, cpp_regex_traits<char> >& e,
+ match_flag_type flags = match_default)
+{
+ match_results<const char*> m;
+ return regex_match(str, str + regex::traits_type::length(str), m, e, flags | regex_constants::match_any);
+}
+#endif
+inline bool regex_match(const char* str,
+ cmatch& m,
+ const basic_regex<char, c_regex_traits<char> >& e,
+ match_flag_type flags = match_default)
+{
+ return regex_match(str, str + regex::traits_type::length(str), m, e, flags);
+}
+inline bool regex_match(const char* str,
+ const basic_regex<char, c_regex_traits<char> >& e,
+ match_flag_type flags = match_default)
+{
+ match_results<const char*> m;
+ return regex_match(str, str + regex::traits_type::length(str), m, e, flags | regex_constants::match_any);
+}
+#if defined(_WIN32) && !defined(BOOST_REGEX_NO_W32)
+inline bool regex_match(const char* str,
+ cmatch& m,
+ const basic_regex<char, w32_regex_traits<char> >& e,
+ match_flag_type flags = match_default)
+{
+ return regex_match(str, str + regex::traits_type::length(str), m, e, flags);
+}
+inline bool regex_match(const char* str,
+ const basic_regex<char, w32_regex_traits<char> >& e,
+ match_flag_type flags = match_default)
+{
+ match_results<const char*> m;
+ return regex_match(str, str + regex::traits_type::length(str), m, e, flags | regex_constants::match_any);
+}
+#endif
+#ifndef BOOST_NO_WREGEX
+inline bool regex_match(const wchar_t* str,
+ wcmatch& m,
+ const wregex& e,
+ match_flag_type flags = match_default)
+{
+ return regex_match(str, str + wregex::traits_type::length(str), m, e, flags);
+}
+inline bool regex_match(const wchar_t* str,
+ const wregex& e,
+ match_flag_type flags = match_default)
+{
+ match_results<const wchar_t*> m;
+ return regex_match(str, str + wregex::traits_type::length(str), m, e, flags | regex_constants::match_any);
+}
+#ifndef BOOST_NO_STD_LOCALE
+inline bool regex_match(const wchar_t* str,
+ wcmatch& m,
+ const basic_regex<wchar_t, cpp_regex_traits<wchar_t> >& e,
+ match_flag_type flags = match_default)
+{
+ return regex_match(str, str + wregex::traits_type::length(str), m, e, flags);
+}
+inline bool regex_match(const wchar_t* str,
+ const basic_regex<wchar_t, cpp_regex_traits<wchar_t> >& e,
+ match_flag_type flags = match_default)
+{
+ match_results<const wchar_t*> m;
+ return regex_match(str, str + wregex::traits_type::length(str), m, e, flags | regex_constants::match_any);
+}
+#endif
+inline bool regex_match(const wchar_t* str,
+ wcmatch& m,
+ const basic_regex<wchar_t, c_regex_traits<wchar_t> >& e,
+ match_flag_type flags = match_default)
+{
+ return regex_match(str, str + wregex::traits_type::length(str), m, e, flags);
+}
+inline bool regex_match(const wchar_t* str,
+ const basic_regex<wchar_t, c_regex_traits<wchar_t> >& e,
+ match_flag_type flags = match_default)
+{
+ match_results<const wchar_t*> m;
+ return regex_match(str, str + wregex::traits_type::length(str), m, e, flags | regex_constants::match_any);
+}
+#if defined(_WIN32) && !defined(BOOST_REGEX_NO_W32)
+inline bool regex_match(const wchar_t* str,
+ wcmatch& m,
+ const basic_regex<wchar_t, w32_regex_traits<wchar_t> >& e,
+ match_flag_type flags = match_default)
+{
+ return regex_match(str, str + wregex::traits_type::length(str), m, e, flags);
+}
+inline bool regex_match(const wchar_t* str,
+ const basic_regex<wchar_t, w32_regex_traits<wchar_t> >& e,
+ match_flag_type flags = match_default)
+{
+ match_results<const wchar_t*> m;
+ return regex_match(str, str + wregex::traits_type::length(str), m, e, flags | regex_constants::match_any);
+}
+#endif
+#endif
+inline bool regex_match(const std::string& s,
+ smatch& m,
+ const regex& e,
+ match_flag_type flags = match_default)
+{
+ return regex_match(s.begin(), s.end(), m, e, flags);
+}
+inline bool regex_match(const std::string& s,
+ const regex& e,
+ match_flag_type flags = match_default)
+{
+ match_results<std::string::const_iterator> m;
+ return regex_match(s.begin(), s.end(), m, e, flags | regex_constants::match_any);
+}
+#ifndef BOOST_NO_STD_LOCALE
+inline bool regex_match(const std::string& s,
+ smatch& m,
+ const basic_regex<char, cpp_regex_traits<char> >& e,
+ match_flag_type flags = match_default)
+{
+ return regex_match(s.begin(), s.end(), m, e, flags);
+}
+inline bool regex_match(const std::string& s,
+ const basic_regex<char, cpp_regex_traits<char> >& e,
+ match_flag_type flags = match_default)
+{
+ match_results<std::string::const_iterator> m;
+ return regex_match(s.begin(), s.end(), m, e, flags | regex_constants::match_any);
+}
+#endif
+inline bool regex_match(const std::string& s,
+ smatch& m,
+ const basic_regex<char, c_regex_traits<char> >& e,
+ match_flag_type flags = match_default)
+{
+ return regex_match(s.begin(), s.end(), m, e, flags);
+}
+inline bool regex_match(const std::string& s,
+ const basic_regex<char, c_regex_traits<char> >& e,
+ match_flag_type flags = match_default)
+{
+ match_results<std::string::const_iterator> m;
+ return regex_match(s.begin(), s.end(), m, e, flags | regex_constants::match_any);
+}
+#if defined(_WIN32) && !defined(BOOST_REGEX_NO_W32)
+inline bool regex_match(const std::string& s,
+ smatch& m,
+ const basic_regex<char, w32_regex_traits<char> >& e,
+ match_flag_type flags = match_default)
+{
+ return regex_match(s.begin(), s.end(), m, e, flags);
+}
+inline bool regex_match(const std::string& s,
+ const basic_regex<char, w32_regex_traits<char> >& e,
+ match_flag_type flags = match_default)
+{
+ match_results<std::string::const_iterator> m;
+ return regex_match(s.begin(), s.end(), m, e, flags | regex_constants::match_any);
+}
+#endif
+#if !defined(BOOST_NO_WREGEX)
+inline bool regex_match(const std::basic_string<wchar_t>& s,
+ match_results<std::basic_string<wchar_t>::const_iterator>& m,
+ const wregex& e,
+ match_flag_type flags = match_default)
+{
+ return regex_match(s.begin(), s.end(), m, e, flags);
+}
+inline bool regex_match(const std::basic_string<wchar_t>& s,
+ const wregex& e,
+ match_flag_type flags = match_default)
+{
+ match_results<std::basic_string<wchar_t>::const_iterator> m;
+ return regex_match(s.begin(), s.end(), m, e, flags | regex_constants::match_any);
+}
+#ifndef BOOST_NO_STD_LOCALE
+inline bool regex_match(const std::basic_string<wchar_t>& s,
+ match_results<std::basic_string<wchar_t>::const_iterator>& m,
+ const basic_regex<wchar_t, cpp_regex_traits<wchar_t> >& e,
+ match_flag_type flags = match_default)
+{
+ return regex_match(s.begin(), s.end(), m, e, flags);
+}
+inline bool regex_match(const std::basic_string<wchar_t>& s,
+ const basic_regex<wchar_t, cpp_regex_traits<wchar_t> >& e,
+ match_flag_type flags = match_default)
+{
+ match_results<std::basic_string<wchar_t>::const_iterator> m;
+ return regex_match(s.begin(), s.end(), m, e, flags | regex_constants::match_any);
+}
+#endif
+inline bool regex_match(const std::basic_string<wchar_t>& s,
+ match_results<std::basic_string<wchar_t>::const_iterator>& m,
+ const basic_regex<wchar_t, c_regex_traits<wchar_t> >& e,
+ match_flag_type flags = match_default)
+{
+ return regex_match(s.begin(), s.end(), m, e, flags);
+}
+inline bool regex_match(const std::basic_string<wchar_t>& s,
+ const basic_regex<wchar_t, c_regex_traits<wchar_t> >& e,
+ match_flag_type flags = match_default)
+{
+ match_results<std::basic_string<wchar_t>::const_iterator> m;
+ return regex_match(s.begin(), s.end(), m, e, flags | regex_constants::match_any);
+}
+#if defined(_WIN32) && !defined(BOOST_REGEX_NO_W32)
+inline bool regex_match(const std::basic_string<wchar_t>& s,
+ match_results<std::basic_string<wchar_t>::const_iterator>& m,
+ const basic_regex<wchar_t, w32_regex_traits<wchar_t> >& e,
+ match_flag_type flags = match_default)
+{
+ return regex_match(s.begin(), s.end(), m, e, flags);
+}
+inline bool regex_match(const std::basic_string<wchar_t>& s,
+ const basic_regex<wchar_t, w32_regex_traits<wchar_t> >& e,
+ match_flag_type flags = match_default)
+{
+ match_results<std::basic_string<wchar_t>::const_iterator> m;
+ return regex_match(s.begin(), s.end(), m, e, flags | regex_constants::match_any);
+}
+#endif
+#endif
+
+#endif
+
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+} // namespace boost
+
+#endif // BOOST_REGEX_MATCH_HPP
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/boost/boost/regex/v4/regex_merge.hpp b/boost/boost/regex/v4/regex_merge.hpp
new file mode 100644
index 00000000000..85c66dc996f
--- /dev/null
+++ b/boost/boost/regex/v4/regex_merge.hpp
@@ -0,0 +1,79 @@
+/*
+ *
+ * Copyright (c) 1998-2002
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE regex_format.hpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: Provides formatting output routines for search and replace
+ * operations. Note this is an internal header file included
+ * by regex.hpp, do not include on its own.
+ */
+
+#ifndef BOOST_REGEX_V4_REGEX_MERGE_HPP
+#define BOOST_REGEX_V4_REGEX_MERGE_HPP
+
+
+namespace boost{
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+template <class OutputIterator, class Iterator, class traits, class charT>
+inline OutputIterator regex_merge(OutputIterator out,
+ Iterator first,
+ Iterator last,
+ const basic_regex<charT, traits>& e,
+ const charT* fmt,
+ match_flag_type flags = match_default)
+{
+ return regex_replace(out, first, last, e, fmt, flags);
+}
+
+template <class OutputIterator, class Iterator, class traits, class charT>
+inline OutputIterator regex_merge(OutputIterator out,
+ Iterator first,
+ Iterator last,
+ const basic_regex<charT, traits>& e,
+ const std::basic_string<charT>& fmt,
+ match_flag_type flags = match_default)
+{
+ return regex_merge(out, first, last, e, fmt.c_str(), flags);
+}
+
+template <class traits, class charT>
+inline std::basic_string<charT> regex_merge(const std::basic_string<charT>& s,
+ const basic_regex<charT, traits>& e,
+ const charT* fmt,
+ match_flag_type flags = match_default)
+{
+ return regex_replace(s, e, fmt, flags);
+}
+
+template <class traits, class charT>
+inline std::basic_string<charT> regex_merge(const std::basic_string<charT>& s,
+ const basic_regex<charT, traits>& e,
+ const std::basic_string<charT>& fmt,
+ match_flag_type flags = match_default)
+{
+ return regex_replace(s, e, fmt, flags);
+}
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+} // namespace boost
+
+#endif // BOOST_REGEX_V4_REGEX_MERGE_HPP
+
+
diff --git a/boost/boost/regex/v4/regex_raw_buffer.hpp b/boost/boost/regex/v4/regex_raw_buffer.hpp
new file mode 100644
index 00000000000..6de7664a2fe
--- /dev/null
+++ b/boost/boost/regex/v4/regex_raw_buffer.hpp
@@ -0,0 +1,196 @@
+/*
+ *
+ * Copyright (c) 1998-2002
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE regex_raw_buffer.hpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: Raw character buffer for regex code.
+ * Note this is an internal header file included
+ * by regex.hpp, do not include on its own.
+ */
+
+#ifndef BOOST_REGEX_RAW_BUFFER_HPP
+#define BOOST_REGEX_RAW_BUFFER_HPP
+
+#ifndef BOOST_REGEX_CONFIG_HPP
+#include <boost/regex/config.hpp>
+#endif
+
+#include <algorithm>
+#include <cstddef>
+
+namespace boost{
+ namespace re_detail{
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+struct empty_padding{};
+
+union padding
+{
+ void* p;
+ unsigned int i;
+};
+
+template <int N>
+struct padding3
+{
+ enum{
+ padding_size = 8,
+ padding_mask = 7
+ };
+};
+
+template<>
+struct padding3<2>
+{
+ enum{
+ padding_size = 2,
+ padding_mask = 1
+ };
+};
+
+template<>
+struct padding3<4>
+{
+ enum{
+ padding_size = 4,
+ padding_mask = 3
+ };
+};
+
+template<>
+struct padding3<8>
+{
+ enum{
+ padding_size = 8,
+ padding_mask = 7
+ };
+};
+
+template<>
+struct padding3<16>
+{
+ enum{
+ padding_size = 16,
+ padding_mask = 15
+ };
+};
+
+enum{
+ padding_size = padding3<sizeof(padding)>::padding_size,
+ padding_mask = padding3<sizeof(padding)>::padding_mask
+};
+
+//
+// class raw_storage
+// basically this is a simplified vector<unsigned char>
+// this is used by basic_regex for expression storage
+//
+
+class BOOST_REGEX_DECL raw_storage
+{
+public:
+ typedef std::size_t size_type;
+ typedef unsigned char* pointer;
+private:
+ pointer last, start, end;
+public:
+
+ raw_storage();
+ raw_storage(size_type n);
+
+ ~raw_storage()
+ {
+ ::operator delete(start);
+ }
+
+ void BOOST_REGEX_CALL resize(size_type n);
+
+ void* BOOST_REGEX_CALL extend(size_type n)
+ {
+ if(size_type(last - end) < n)
+ resize(n + (end - start));
+ register pointer result = end;
+ end += n;
+ return result;
+ }
+
+ void* BOOST_REGEX_CALL insert(size_type pos, size_type n);
+
+ size_type BOOST_REGEX_CALL size()
+ {
+ return end - start;
+ }
+
+ size_type BOOST_REGEX_CALL capacity()
+ {
+ return last - start;
+ }
+
+ void* BOOST_REGEX_CALL data()const
+ {
+ return start;
+ }
+
+ size_type BOOST_REGEX_CALL index(void* ptr)
+ {
+ return static_cast<pointer>(ptr) - static_cast<pointer>(data());
+ }
+
+ void BOOST_REGEX_CALL clear()
+ {
+ end = start;
+ }
+
+ void BOOST_REGEX_CALL align()
+ {
+ // move end up to a boundary:
+ end = start + (((end - start) + padding_mask) & ~padding_mask);
+ }
+ void swap(raw_storage& that)
+ {
+ std::swap(start, that.start);
+ std::swap(end, that.end);
+ std::swap(last, that.last);
+ }
+};
+
+inline raw_storage::raw_storage()
+{
+ last = start = end = 0;
+}
+
+inline raw_storage::raw_storage(size_type n)
+{
+ start = end = static_cast<pointer>(::operator new(n));
+ BOOST_REGEX_NOEH_ASSERT(start)
+ last = start + n;
+}
+
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+} // namespace re_detail
+} // namespace boost
+
+#endif
+
+
+
+
+
+
diff --git a/boost/boost/regex/v4/regex_replace.hpp b/boost/boost/regex/v4/regex_replace.hpp
new file mode 100644
index 00000000000..0dabba16089
--- /dev/null
+++ b/boost/boost/regex/v4/regex_replace.hpp
@@ -0,0 +1,108 @@
+/*
+ *
+ * Copyright (c) 1998-2002
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE regex_format.hpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: Provides formatting output routines for search and replace
+ * operations. Note this is an internal header file included
+ * by regex.hpp, do not include on its own.
+ */
+
+#ifndef BOOST_REGEX_V4_REGEX_REPLACE_HPP
+#define BOOST_REGEX_V4_REGEX_REPLACE_HPP
+
+
+namespace boost{
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+template <class OutputIterator, class BidirectionalIterator, class traits, class charT>
+OutputIterator regex_replace(OutputIterator out,
+ BidirectionalIterator first,
+ BidirectionalIterator last,
+ const basic_regex<charT, traits>& e,
+ const charT* fmt,
+ match_flag_type flags = match_default)
+{
+ regex_iterator<BidirectionalIterator, charT, traits> i(first, last, e, flags);
+ regex_iterator<BidirectionalIterator, charT, traits> j;
+ if(i == j)
+ {
+ if(!(flags & regex_constants::format_no_copy))
+ out = re_detail::copy(first, last, out);
+ }
+ else
+ {
+ BidirectionalIterator last_m(first);
+ while(i != j)
+ {
+ if(!(flags & regex_constants::format_no_copy))
+ out = re_detail::copy(i->prefix().first, i->prefix().second, out);
+ out = i->format(out, fmt, flags, e);
+ last_m = (*i)[0].second;
+ if(flags & regex_constants::format_first_only)
+ break;
+ ++i;
+ }
+ if(!(flags & regex_constants::format_no_copy))
+ out = re_detail::copy(last_m, last, out);
+ }
+ return out;
+}
+
+template <class OutputIterator, class Iterator, class traits, class charT>
+inline OutputIterator regex_replace(OutputIterator out,
+ Iterator first,
+ Iterator last,
+ const basic_regex<charT, traits>& e,
+ const std::basic_string<charT>& fmt,
+ match_flag_type flags = match_default)
+{
+ return regex_replace(out, first, last, e, fmt.c_str(), flags);
+}
+
+template <class traits, class charT>
+std::basic_string<charT> regex_replace(const std::basic_string<charT>& s,
+ const basic_regex<charT, traits>& e,
+ const charT* fmt,
+ match_flag_type flags = match_default)
+{
+ std::basic_string<charT> result;
+ re_detail::string_out_iterator<std::basic_string<charT> > i(result);
+ regex_replace(i, s.begin(), s.end(), e, fmt, flags);
+ return result;
+}
+
+template <class traits, class charT>
+std::basic_string<charT> regex_replace(const std::basic_string<charT>& s,
+ const basic_regex<charT, traits>& e,
+ const std::basic_string<charT>& fmt,
+ match_flag_type flags = match_default)
+{
+ std::basic_string<charT> result;
+ re_detail::string_out_iterator<std::basic_string<charT> > i(result);
+ regex_replace(i, s.begin(), s.end(), e, fmt.c_str(), flags);
+ return result;
+}
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+} // namespace boost
+
+#endif // BOOST_REGEX_V4_REGEX_REPLACE_HPP
+
+
diff --git a/boost/boost/regex/v4/regex_search.hpp b/boost/boost/regex/v4/regex_search.hpp
new file mode 100644
index 00000000000..ee6028c29a4
--- /dev/null
+++ b/boost/boost/regex/v4/regex_search.hpp
@@ -0,0 +1,203 @@
+/*
+ *
+ * Copyright (c) 1998-2002
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE regex_search.hpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: Provides regex_search implementation.
+ */
+
+#ifndef BOOST_REGEX_V4_REGEX_SEARCH_HPP
+#define BOOST_REGEX_V4_REGEX_SEARCH_HPP
+
+
+namespace boost{
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+template <class BidiIterator, class Allocator, class charT, class traits>
+bool regex_search(BidiIterator first, BidiIterator last,
+ match_results<BidiIterator, Allocator>& m,
+ const basic_regex<charT, traits>& e,
+ match_flag_type flags = match_default)
+{
+ return regex_search(first, last, m, e, flags, first);
+}
+
+template <class BidiIterator, class Allocator, class charT, class traits>
+bool regex_search(BidiIterator first, BidiIterator last,
+ match_results<BidiIterator, Allocator>& m,
+ const basic_regex<charT, traits>& e,
+ match_flag_type flags,
+ BidiIterator base)
+{
+ if(e.flags() & regex_constants::failbit)
+ return false;
+
+ re_detail::perl_matcher<BidiIterator, Allocator, traits> matcher(first, last, m, e, flags, base);
+ return matcher.find();
+}
+
+//
+// regex_search convenience interfaces:
+#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+//
+// this isn't really a partial specialisation, but template function
+// overloading - if the compiler doesn't support partial specialisation
+// then it really won't support this either:
+template <class charT, class Allocator, class traits>
+inline bool regex_search(const charT* str,
+ match_results<const charT*, Allocator>& m,
+ const basic_regex<charT, traits>& e,
+ match_flag_type flags = match_default)
+{
+ return regex_search(str, str + traits::length(str), m, e, flags);
+}
+
+template <class ST, class SA, class Allocator, class charT, class traits>
+inline bool regex_search(const std::basic_string<charT, ST, SA>& s,
+ match_results<typename std::basic_string<charT, ST, SA>::const_iterator, Allocator>& m,
+ const basic_regex<charT, traits>& e,
+ match_flag_type flags = match_default)
+{
+ return regex_search(s.begin(), s.end(), m, e, flags);
+}
+#else // partial overloads:
+inline bool regex_search(const char* str,
+ cmatch& m,
+ const regex& e,
+ match_flag_type flags = match_default)
+{
+ return regex_search(str, str + regex::traits_type::length(str), m, e, flags);
+}
+inline bool regex_search(const char* first, const char* last,
+ const regex& e,
+ match_flag_type flags = match_default)
+{
+ cmatch m;
+ return regex_search(first, last, m, e, flags | regex_constants::match_any);
+}
+
+#ifndef BOOST_NO_WREGEX
+inline bool regex_search(const wchar_t* str,
+ wcmatch& m,
+ const wregex& e,
+ match_flag_type flags = match_default)
+{
+ return regex_search(str, str + wregex::traits_type::length(str), m, e, flags);
+}
+inline bool regex_search(const wchar_t* first, const wchar_t* last,
+ const wregex& e,
+ match_flag_type flags = match_default)
+{
+ wcmatch m;
+ return regex_search(first, last, m, e, flags | regex_constants::match_any);
+}
+#endif
+inline bool regex_search(const std::string& s,
+ smatch& m,
+ const regex& e,
+ match_flag_type flags = match_default)
+{
+ return regex_search(s.begin(), s.end(), m, e, flags);
+}
+#if !defined(BOOST_NO_WREGEX)
+inline bool regex_search(const std::basic_string<wchar_t>& s,
+ wsmatch& m,
+ const wregex& e,
+ match_flag_type flags = match_default)
+{
+ return regex_search(s.begin(), s.end(), m, e, flags);
+}
+#endif
+
+#endif
+
+template <class BidiIterator, class charT, class traits>
+bool regex_search(BidiIterator first, BidiIterator last,
+ const basic_regex<charT, traits>& e,
+ match_flag_type flags = match_default)
+{
+ if(e.flags() & regex_constants::failbit)
+ return false;
+
+ match_results<BidiIterator> m;
+ typedef typename match_results<BidiIterator>::allocator_type match_alloc_type;
+ re_detail::perl_matcher<BidiIterator, match_alloc_type, traits> matcher(first, last, m, e, flags | regex_constants::match_any, first);
+ return matcher.find();
+}
+
+#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+template <class charT, class traits>
+inline bool regex_search(const charT* str,
+ const basic_regex<charT, traits>& e,
+ match_flag_type flags = match_default)
+{
+ return regex_search(str, str + traits::length(str), e, flags);
+}
+
+template <class ST, class SA, class charT, class traits>
+inline bool regex_search(const std::basic_string<charT, ST, SA>& s,
+ const basic_regex<charT, traits>& e,
+ match_flag_type flags = match_default)
+{
+ return regex_search(s.begin(), s.end(), e, flags);
+}
+#else // non-template function overloads
+inline bool regex_search(const char* str,
+ const regex& e,
+ match_flag_type flags = match_default)
+{
+ cmatch m;
+ return regex_search(str, str + regex::traits_type::length(str), m, e, flags | regex_constants::match_any);
+}
+#ifndef BOOST_NO_WREGEX
+inline bool regex_search(const wchar_t* str,
+ const wregex& e,
+ match_flag_type flags = match_default)
+{
+ wcmatch m;
+ return regex_search(str, str + wregex::traits_type::length(str), m, e, flags | regex_constants::match_any);
+}
+#endif
+inline bool regex_search(const std::string& s,
+ const regex& e,
+ match_flag_type flags = match_default)
+{
+ smatch m;
+ return regex_search(s.begin(), s.end(), m, e, flags | regex_constants::match_any);
+}
+#if !defined(BOOST_NO_WREGEX)
+inline bool regex_search(const std::basic_string<wchar_t>& s,
+ const wregex& e,
+ match_flag_type flags = match_default)
+{
+ wsmatch m;
+ return regex_search(s.begin(), s.end(), m, e, flags | regex_constants::match_any);
+}
+
+#endif // BOOST_NO_WREGEX
+
+#endif // partial overload
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+} // namespace boost
+
+#endif // BOOST_REGEX_V4_REGEX_SEARCH_HPP
+
+
diff --git a/boost/boost/regex/v4/regex_split.hpp b/boost/boost/regex/v4/regex_split.hpp
new file mode 100644
index 00000000000..60e13e33fdd
--- /dev/null
+++ b/boost/boost/regex/v4/regex_split.hpp
@@ -0,0 +1,149 @@
+/*
+ *
+ * Copyright (c) 1998-2002
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE regex_split.hpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: Implements regex_split and associated functions.
+ * Note this is an internal header file included
+ * by regex.hpp, do not include on its own.
+ */
+
+#ifndef BOOST_REGEX_SPLIT_HPP
+#define BOOST_REGEX_SPLIT_HPP
+
+namespace boost{
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+namespace re_detail{
+
+template <class charT>
+const basic_regex<charT>& get_default_expression(charT)
+{
+ static const charT expression_text[4] = { '\\', 's', '+', '\00', };
+ static const basic_regex<charT> e(expression_text);
+ return e;
+}
+
+template <class OutputIterator, class charT, class Traits1, class Alloc1>
+class split_pred
+{
+ typedef std::basic_string<charT, Traits1, Alloc1> string_type;
+ typedef typename string_type::const_iterator iterator_type;
+ iterator_type* p_last;
+ OutputIterator* p_out;
+ std::size_t* p_max;
+ std::size_t initial_max;
+public:
+ split_pred(iterator_type* a, OutputIterator* b, std::size_t* c)
+ : p_last(a), p_out(b), p_max(c), initial_max(*c) {}
+
+ bool operator()(const match_results<iterator_type>& what);
+};
+
+template <class OutputIterator, class charT, class Traits1, class Alloc1>
+bool split_pred<OutputIterator, charT, Traits1, Alloc1>::operator()
+ (const match_results<iterator_type>& what)
+{
+ *p_last = what[0].second;
+ if(what.size() > 1)
+ {
+ // output sub-expressions only:
+ for(unsigned i = 1; i < what.size(); ++i)
+ {
+ *(*p_out) = what.str(i);
+ ++(*p_out);
+ if(0 == --*p_max) return false;
+ }
+ return *p_max != 0;
+ }
+ else
+ {
+ // output $` only if it's not-null or not at the start of the input:
+ const sub_match<iterator_type>& sub = what[-1];
+ if((sub.first != sub.second) || (*p_max != initial_max))
+ {
+ *(*p_out) = sub.str();
+ ++(*p_out);
+ return --*p_max;
+ }
+ }
+ //
+ // initial null, do nothing:
+ return true;
+}
+
+} // namespace re_detail
+
+template <class OutputIterator, class charT, class Traits1, class Alloc1, class Traits2>
+std::size_t regex_split(OutputIterator out,
+ std::basic_string<charT, Traits1, Alloc1>& s,
+ const basic_regex<charT, Traits2>& e,
+ match_flag_type flags,
+ std::size_t max_split)
+{
+ typedef typename std::basic_string<charT, Traits1, Alloc1>::const_iterator ci_t;
+ typedef typename match_results<ci_t>::allocator_type match_allocator;
+ ci_t last = s.begin();
+ std::size_t init_size = max_split;
+ re_detail::split_pred<OutputIterator, charT, Traits1, Alloc1> pred(&last, &out, &max_split);
+ ci_t i, j;
+ i = s.begin();
+ j = s.end();
+ regex_grep(pred, i, j, e, flags);
+ //
+ // if there is still input left, do a final push as long as max_split
+ // is not exhausted, and we're not splitting sub-expressions rather
+ // than whitespace:
+ if(max_split && (last != s.end()) && (e.mark_count() == 1))
+ {
+ *out = std::basic_string<charT, Traits1, Alloc1>((ci_t)last, (ci_t)s.end());
+ ++out;
+ last = s.end();
+ --max_split;
+ }
+ //
+ // delete from the string everything that has been processed so far:
+ s.erase(0, last - s.begin());
+ //
+ // return the number of new records pushed:
+ return init_size - max_split;
+}
+
+template <class OutputIterator, class charT, class Traits1, class Alloc1, class Traits2>
+inline std::size_t regex_split(OutputIterator out,
+ std::basic_string<charT, Traits1, Alloc1>& s,
+ const basic_regex<charT, Traits2>& e,
+ match_flag_type flags = match_default)
+{
+ return regex_split(out, s, e, flags, UINT_MAX);
+}
+
+template <class OutputIterator, class charT, class Traits1, class Alloc1>
+inline std::size_t regex_split(OutputIterator out,
+ std::basic_string<charT, Traits1, Alloc1>& s)
+{
+ return regex_split(out, s, re_detail::get_default_expression(charT(0)), match_default, UINT_MAX);
+}
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+} // namespace boost
+
+#endif
+
+
diff --git a/boost/boost/regex/v4/regex_stack.hpp b/boost/boost/regex/v4/regex_stack.hpp
new file mode 100644
index 00000000000..453df203a00
--- /dev/null
+++ b/boost/boost/regex/v4/regex_stack.hpp
@@ -0,0 +1,225 @@
+/*
+ *
+ * Copyright (c) 1998-2002
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE regex_stack.hpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: Implements customised internal regex stacks.
+ * Note this is an internal header file included
+ * by regex.hpp, do not include on its own.
+ */
+
+#ifndef BOOST_REGEX_STACK_HPP
+#define BOOST_REGEX_STACK_HPP
+
+#ifndef BOOST_REGEX_CONFIG_HPP
+#include <boost/regex/config.hpp>
+#endif
+#ifndef BOOST_REGEX_RAW_BUFFER_HPP
+#include <boost/regex/v4/regex_raw_buffer.hpp>
+#endif
+
+namespace boost{
+ namespace re_detail{
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+//
+// class jstack
+// simplified stack optimised for push/peek/pop
+// operations, we could use std::stack<std::vector<T>> instead...
+//
+template <class T, class Allocator = BOOST_DEFAULT_ALLOCATOR(T) >
+class jstack
+{
+public:
+ typedef typename boost::detail::rebind_allocator<unsigned char, Allocator>::type allocator_type;
+private:
+ typedef typename boost::detail::rebind_allocator<T, Allocator>::type T_alloc_type;
+ typedef typename T_alloc_type::size_type size_type;
+ typedef T value_type;
+ struct node
+ {
+ node* next;
+ T* start; // first item
+ T* end; // last item
+ T* last; // end of storage
+ };
+
+ //
+ // empty base member optimisation:
+ struct data : public allocator_type
+ {
+ padding buf[(sizeof(T) * 16 + sizeof(padding) - 1) / sizeof(padding)];
+ data(const Allocator& a) : allocator_type(a){}
+ };
+
+ data alloc_inst;
+ mutable node* m_stack;
+ mutable node* unused;
+ node base;
+ size_type block_size;
+
+ void BOOST_REGEX_CALL pop_aux()const;
+ void BOOST_REGEX_CALL push_aux();
+
+public:
+ jstack(size_type n = 64, const Allocator& a = Allocator());
+
+ ~jstack();
+
+ node* BOOST_REGEX_CALL get_node()
+ {
+ node* new_stack = reinterpret_cast<node*>(alloc_inst.allocate(sizeof(node) + sizeof(T) * block_size));
+ BOOST_REGEX_NOEH_ASSERT(new_stack)
+ new_stack->last = reinterpret_cast<T*>(new_stack+1);
+ new_stack->start = new_stack->end = new_stack->last + block_size;
+ new_stack->next = 0;
+ return new_stack;
+ }
+
+ bool BOOST_REGEX_CALL empty()
+ {
+ return (m_stack->start == m_stack->end) && (m_stack->next == 0);
+ }
+
+ bool BOOST_REGEX_CALL good()
+ {
+ return (m_stack->start != m_stack->end) || (m_stack->next != 0);
+ }
+
+ T& BOOST_REGEX_CALL peek()
+ {
+ if(m_stack->start == m_stack->end)
+ pop_aux();
+ return *m_stack->end;
+ }
+
+ const T& BOOST_REGEX_CALL peek()const
+ {
+ if(m_stack->start == m_stack->end)
+ pop_aux();
+ return *m_stack->end;
+ }
+
+ void BOOST_REGEX_CALL pop()
+ {
+ if(m_stack->start == m_stack->end)
+ pop_aux();
+ ::boost::re_detail::pointer_destroy(m_stack->end);
+ ++(m_stack->end);
+ }
+
+ void BOOST_REGEX_CALL pop(T& t)
+ {
+ if(m_stack->start == m_stack->end)
+ pop_aux();
+ t = *m_stack->end;
+ ::boost::re_detail::pointer_destroy(m_stack->end);
+ ++(m_stack->end);
+ }
+
+ void BOOST_REGEX_CALL push(const T& t)
+ {
+ if(m_stack->end == m_stack->last)
+ push_aux();
+ --(m_stack->end);
+ pointer_construct(m_stack->end, t);
+ }
+
+};
+
+template <class T, class Allocator>
+jstack<T, Allocator>::jstack(size_type n, const Allocator& a)
+ : alloc_inst(a)
+{
+ unused = 0;
+ block_size = n;
+ m_stack = &base;
+ base.last = reinterpret_cast<T*>(alloc_inst.buf);
+ base.end = base.start = base.last + 16;
+ base.next = 0;
+}
+
+template <class T, class Allocator>
+void BOOST_REGEX_CALL jstack<T, Allocator>::push_aux()
+{
+ // make sure we have spare space on TOS:
+ register node* new_node;
+ if(unused)
+ {
+ new_node = unused;
+ unused = new_node->next;
+ new_node->next = m_stack;
+ m_stack = new_node;
+ }
+ else
+ {
+ new_node = get_node();
+ new_node->next = m_stack;
+ m_stack = new_node;
+ }
+}
+
+template <class T, class Allocator>
+void BOOST_REGEX_CALL jstack<T, Allocator>::pop_aux()const
+{
+ // make sure that we have a valid item
+ // on TOS:
+ BOOST_ASSERT(m_stack->next);
+ register node* p = m_stack;
+ m_stack = p->next;
+ p->next = unused;
+ unused = p;
+}
+
+template <class T, class Allocator>
+jstack<T, Allocator>::~jstack()
+{
+ node* condemned;
+ while(good())
+ pop();
+ while(unused)
+ {
+ condemned = unused;
+ unused = unused->next;
+ alloc_inst.deallocate(reinterpret_cast<unsigned char*>(condemned), sizeof(node) + sizeof(T) * block_size);
+ }
+ while(m_stack != &base)
+ {
+ condemned = m_stack;
+ m_stack = m_stack->next;
+ alloc_inst.deallocate(reinterpret_cast<unsigned char*>(condemned), sizeof(node) + sizeof(T) * block_size);
+ }
+}
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+} // namespace re_detail
+} // namespace boost
+
+#endif
+
+
+
+
+
+
+
+
+
+
+
diff --git a/boost/boost/regex/v4/regex_token_iterator.hpp b/boost/boost/regex/v4/regex_token_iterator.hpp
new file mode 100644
index 00000000000..a03fedd2008
--- /dev/null
+++ b/boost/boost/regex/v4/regex_token_iterator.hpp
@@ -0,0 +1,328 @@
+/*
+ *
+ * Copyright (c) 2003
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE regex_token_iterator.hpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: Provides regex_token_iterator implementation.
+ */
+
+#ifndef BOOST_REGEX_V4_REGEX_TOKEN_ITERATOR_HPP
+#define BOOST_REGEX_V4_REGEX_TOKEN_ITERATOR_HPP
+
+#include <boost/shared_ptr.hpp>
+#include <boost/detail/workaround.hpp>
+#if (BOOST_WORKAROUND(__BORLANDC__, >= 0x560) && BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x570)))\
+ || BOOST_WORKAROUND(BOOST_MSVC, < 1300) \
+ || BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003))
+//
+// Borland C++ Builder 6, and Visual C++ 6,
+// can't cope with the array template constructor
+// so we have a template member that will accept any type as
+// argument, and then assert that is really is an array:
+//
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_array.hpp>
+#endif
+
+namespace boost{
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+#if BOOST_WORKAROUND(BOOST_MSVC, > 1300)
+# pragma warning(push)
+# pragma warning(disable:4700)
+#endif
+
+template <class BidirectionalIterator,
+ class charT,
+ class traits>
+class regex_token_iterator_implementation
+{
+ typedef basic_regex<charT, traits> regex_type;
+ typedef sub_match<BidirectionalIterator> value_type;
+
+ match_results<BidirectionalIterator> what; // current match
+ BidirectionalIterator base; // start of search area
+ BidirectionalIterator end; // end of search area
+ const regex_type re; // the expression
+ match_flag_type flags; // match flags
+ value_type result; // the current string result
+ int N; // the current sub-expression being enumerated
+ std::vector<int> subs; // the sub-expressions to enumerate
+
+public:
+ regex_token_iterator_implementation(const regex_type* p, BidirectionalIterator last, int sub, match_flag_type f)
+ : end(last), re(*p), flags(f){ subs.push_back(sub); }
+ regex_token_iterator_implementation(const regex_type* p, BidirectionalIterator last, const std::vector<int>& v, match_flag_type f)
+ : end(last), re(*p), flags(f), subs(v){}
+#if !BOOST_WORKAROUND(__HP_aCC, < 60700)
+#if (BOOST_WORKAROUND(__BORLANDC__, >= 0x560) && BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x570)))\
+ || BOOST_WORKAROUND(BOOST_MSVC, < 1300) \
+ || BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003)) \
+ || BOOST_WORKAROUND(__HP_aCC, < 60700)
+ template <class T>
+ regex_token_iterator_implementation(const regex_type* p, BidirectionalIterator last, const T& submatches, match_flag_type f)
+ : end(last), re(*p), flags(f)
+ {
+ // assert that T really is an array:
+ BOOST_STATIC_ASSERT(::boost::is_array<T>::value);
+ const std::size_t array_size = sizeof(T) / sizeof(submatches[0]);
+ for(std::size_t i = 0; i < array_size; ++i)
+ {
+ subs.push_back(submatches[i]);
+ }
+ }
+#else
+ template <std::size_t CN>
+ regex_token_iterator_implementation(const regex_type* p, BidirectionalIterator last, const int (&submatches)[CN], match_flag_type f)
+ : end(last), re(*p), flags(f)
+ {
+ for(std::size_t i = 0; i < CN; ++i)
+ {
+ subs.push_back(submatches[i]);
+ }
+ }
+#endif
+#endif
+ bool init(BidirectionalIterator first)
+ {
+ N = 0;
+ base = first;
+ if(regex_search(first, end, what, re, flags, base) == true)
+ {
+ N = 0;
+ result = ((subs[N] == -1) ? what.prefix() : what[(int)subs[N]]);
+ return true;
+ }
+ else if((subs[N] == -1) && (first != end))
+ {
+ result.first = first;
+ result.second = end;
+ result.matched = (first != end);
+ N = -1;
+ return true;
+ }
+ return false;
+ }
+ bool compare(const regex_token_iterator_implementation& that)
+ {
+ if(this == &that) return true;
+ return (&re.get_data() == &that.re.get_data())
+ && (end == that.end)
+ && (flags == that.flags)
+ && (N == that.N)
+ && (what[0].first == that.what[0].first)
+ && (what[0].second == that.what[0].second);
+ }
+ const value_type& get()
+ { return result; }
+ bool next()
+ {
+ if(N == -1)
+ return false;
+ if(N+1 < (int)subs.size())
+ {
+ ++N;
+ result =((subs[N] == -1) ? what.prefix() : what[subs[N]]);
+ return true;
+ }
+ //if(what.prefix().first != what[0].second)
+ // flags |= /*match_prev_avail |*/ regex_constants::match_not_bob;
+ BidirectionalIterator last_end(what[0].second);
+ if(regex_search(last_end, end, what, re, ((what[0].first == what[0].second) ? flags | regex_constants::match_not_initial_null : flags), base))
+ {
+ N =0;
+ result =((subs[N] == -1) ? what.prefix() : what[subs[N]]);
+ return true;
+ }
+ else if((last_end != end) && (subs[0] == -1))
+ {
+ N =-1;
+ result.first = last_end;
+ result.second = end;
+ result.matched = (last_end != end);
+ return true;
+ }
+ return false;
+ }
+private:
+ regex_token_iterator_implementation& operator=(const regex_token_iterator_implementation&);
+};
+
+template <class BidirectionalIterator,
+ class charT = BOOST_DEDUCED_TYPENAME re_detail::regex_iterator_traits<BidirectionalIterator>::value_type,
+ class traits = regex_traits<charT> >
+class regex_token_iterator
+#ifndef BOOST_NO_STD_ITERATOR
+ : public std::iterator<
+ std::forward_iterator_tag,
+ sub_match<BidirectionalIterator>,
+ typename re_detail::regex_iterator_traits<BidirectionalIterator>::difference_type,
+ const sub_match<BidirectionalIterator>*,
+ const sub_match<BidirectionalIterator>& >
+#endif
+{
+private:
+ typedef regex_token_iterator_implementation<BidirectionalIterator, charT, traits> impl;
+ typedef shared_ptr<impl> pimpl;
+public:
+ typedef basic_regex<charT, traits> regex_type;
+ typedef sub_match<BidirectionalIterator> value_type;
+ typedef typename re_detail::regex_iterator_traits<BidirectionalIterator>::difference_type
+ difference_type;
+ typedef const value_type* pointer;
+ typedef const value_type& reference;
+ typedef std::forward_iterator_tag iterator_category;
+
+ regex_token_iterator(){}
+ regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b, const regex_type& re,
+ int submatch = 0, match_flag_type m = match_default)
+ : pdata(new impl(&re, b, submatch, m))
+ {
+ if(!pdata->init(a))
+ pdata.reset();
+ }
+ regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b, const regex_type& re,
+ const std::vector<int>& submatches, match_flag_type m = match_default)
+ : pdata(new impl(&re, b, submatches, m))
+ {
+ if(!pdata->init(a))
+ pdata.reset();
+ }
+#if !BOOST_WORKAROUND(__HP_aCC, < 60700)
+#if (BOOST_WORKAROUND(__BORLANDC__, >= 0x560) && BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x570)))\
+ || BOOST_WORKAROUND(BOOST_MSVC, < 1300) \
+ || BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003)) \
+ || BOOST_WORKAROUND(__HP_aCC, < 60700)
+ template <class T>
+ regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b, const regex_type& re,
+ const T& submatches, match_flag_type m = match_default)
+ : pdata(new impl(&re, b, submatches, m))
+ {
+ if(!pdata->init(a))
+ pdata.reset();
+ }
+#else
+ template <std::size_t N>
+ regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b, const regex_type& re,
+ const int (&submatches)[N], match_flag_type m = match_default)
+ : pdata(new impl(&re, b, submatches, m))
+ {
+ if(!pdata->init(a))
+ pdata.reset();
+ }
+#endif
+#endif
+ regex_token_iterator(const regex_token_iterator& that)
+ : pdata(that.pdata) {}
+ regex_token_iterator& operator=(const regex_token_iterator& that)
+ {
+ pdata = that.pdata;
+ return *this;
+ }
+ bool operator==(const regex_token_iterator& that)const
+ {
+ if((pdata.get() == 0) || (that.pdata.get() == 0))
+ return pdata.get() == that.pdata.get();
+ return pdata->compare(*(that.pdata.get()));
+ }
+ bool operator!=(const regex_token_iterator& that)const
+ { return !(*this == that); }
+ const value_type& operator*()const
+ { return pdata->get(); }
+ const value_type* operator->()const
+ { return &(pdata->get()); }
+ regex_token_iterator& operator++()
+ {
+ cow();
+ if(0 == pdata->next())
+ {
+ pdata.reset();
+ }
+ return *this;
+ }
+ regex_token_iterator operator++(int)
+ {
+ regex_token_iterator result(*this);
+ ++(*this);
+ return result;
+ }
+private:
+
+ pimpl pdata;
+
+ void cow()
+ {
+ // copy-on-write
+ if(pdata.get() && !pdata.unique())
+ {
+ pdata.reset(new impl(*(pdata.get())));
+ }
+ }
+};
+
+typedef regex_token_iterator<const char*> cregex_token_iterator;
+typedef regex_token_iterator<std::string::const_iterator> sregex_token_iterator;
+#ifndef BOOST_NO_WREGEX
+typedef regex_token_iterator<const wchar_t*> wcregex_token_iterator;
+typedef regex_token_iterator<std::wstring::const_iterator> wsregex_token_iterator;
+#endif
+
+template <class charT, class traits>
+inline regex_token_iterator<const charT*, charT, traits> make_regex_token_iterator(const charT* p, const basic_regex<charT, traits>& e, int submatch = 0, regex_constants::match_flag_type m = regex_constants::match_default)
+{
+ return regex_token_iterator<const charT*, charT, traits>(p, p+traits::length(p), e, submatch, m);
+}
+template <class charT, class traits, class ST, class SA>
+inline regex_token_iterator<typename std::basic_string<charT, ST, SA>::const_iterator, charT, traits> make_regex_token_iterator(const std::basic_string<charT, ST, SA>& p, const basic_regex<charT, traits>& e, int submatch = 0, regex_constants::match_flag_type m = regex_constants::match_default)
+{
+ return regex_token_iterator<typename std::basic_string<charT, ST, SA>::const_iterator, charT, traits>(p.begin(), p.end(), e, submatch, m);
+}
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+template <class charT, class traits, std::size_t N>
+inline regex_token_iterator<const charT*, charT, traits> make_regex_token_iterator(const charT* p, const basic_regex<charT, traits>& e, const int (&submatch)[N], regex_constants::match_flag_type m = regex_constants::match_default)
+{
+ return regex_token_iterator<const charT*, charT, traits>(p, p+traits::length(p), e, submatch, m);
+}
+template <class charT, class traits, class ST, class SA, std::size_t N>
+inline regex_token_iterator<typename std::basic_string<charT, ST, SA>::const_iterator, charT, traits> make_regex_token_iterator(const std::basic_string<charT, ST, SA>& p, const basic_regex<charT, traits>& e, const int (&submatch)[N], regex_constants::match_flag_type m = regex_constants::match_default)
+{
+ return regex_token_iterator<typename std::basic_string<charT, ST, SA>::const_iterator, charT, traits>(p.begin(), p.end(), e, submatch, m);
+}
+#endif
+template <class charT, class traits>
+inline regex_token_iterator<const charT*, charT, traits> make_regex_token_iterator(const charT* p, const basic_regex<charT, traits>& e, const std::vector<int>& submatch, regex_constants::match_flag_type m = regex_constants::match_default)
+{
+ return regex_token_iterator<const charT*, charT, traits>(p, p+traits::length(p), e, submatch, m);
+}
+template <class charT, class traits, class ST, class SA>
+inline regex_token_iterator<typename std::basic_string<charT, ST, SA>::const_iterator, charT, traits> make_regex_token_iterator(const std::basic_string<charT, ST, SA>& p, const basic_regex<charT, traits>& e, const std::vector<int>& submatch, regex_constants::match_flag_type m = regex_constants::match_default)
+{
+ return regex_token_iterator<typename std::basic_string<charT, ST, SA>::const_iterator, charT, traits>(p.begin(), p.end(), e, submatch, m);
+}
+
+#if BOOST_WORKAROUND(BOOST_MSVC, == 1310)
+# pragma warning(pop)
+#endif
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+} // namespace boost
+
+#endif // BOOST_REGEX_V4_REGEX_TOKEN_ITERATOR_HPP
+
+
+
+
diff --git a/boost/boost/regex/v4/regex_traits.hpp b/boost/boost/regex/v4/regex_traits.hpp
new file mode 100644
index 00000000000..9f2b3700a9c
--- /dev/null
+++ b/boost/boost/regex/v4/regex_traits.hpp
@@ -0,0 +1,175 @@
+/*
+ *
+ * Copyright (c) 2003
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE regex_traits.hpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: Declares regular expression traits classes.
+ */
+
+#ifndef BOOST_REGEX_TRAITS_HPP_INCLUDED
+#define BOOST_REGEX_TRAITS_HPP_INCLUDED
+
+#ifndef BOOST_REGEX_CONFIG_HPP
+#include <boost/regex/config.hpp>
+#endif
+#ifndef BOOST_REGEX_WORKAROUND_HPP
+#include <boost/regex/v4/regex_workaround.hpp>
+#endif
+#ifndef BOOST_REGEX_SYNTAX_TYPE_HPP
+#include <boost/regex/v4/syntax_type.hpp>
+#endif
+#ifndef BOOST_REGEX_ERROR_TYPE_HPP
+#include <boost/regex/v4/error_type.hpp>
+#endif
+#ifndef BOOST_REGEX_TRAITS_DEFAULTS_HPP_INCLUDED
+#include <boost/regex/v4/regex_traits_defaults.hpp>
+#endif
+#ifndef BOOST_NO_STD_LOCALE
+# ifndef BOOST_CPP_REGEX_TRAITS_HPP_INCLUDED
+# include <boost/regex/v4/cpp_regex_traits.hpp>
+# endif
+#endif
+#if !BOOST_WORKAROUND(__BORLANDC__, < 0x560)
+# ifndef BOOST_C_REGEX_TRAITS_HPP_INCLUDED
+# include <boost/regex/v4/c_regex_traits.hpp>
+# endif
+#endif
+#if defined(_WIN32) && !defined(BOOST_REGEX_NO_W32)
+# ifndef BOOST_W32_REGEX_TRAITS_HPP_INCLUDED
+# include <boost/regex/v4/w32_regex_traits.hpp>
+# endif
+#endif
+#ifndef BOOST_REGEX_FWD_HPP_INCLUDED
+#include <boost/regex_fwd.hpp>
+#endif
+
+#include "boost/mpl/has_xxx.hpp"
+#include <boost/static_assert.hpp>
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+namespace boost{
+
+template <class charT, class implementationT >
+struct regex_traits : public implementationT
+{
+ regex_traits() : implementationT() {}
+};
+
+//
+// class regex_traits_wrapper.
+// this is what our implementation will actually store;
+// it provides default implementations of the "optional"
+// interfaces that we support, in addition to the
+// required "standard" ones:
+//
+namespace re_detail{
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !BOOST_WORKAROUND(__HP_aCC, < 60000)
+BOOST_MPL_HAS_XXX_TRAIT_DEF(boost_extensions_tag)
+#else
+template<class T>
+struct has_boost_extensions_tag
+{
+ BOOST_STATIC_CONSTANT(bool, value = false);
+};
+#endif
+
+template <class BaseT>
+struct default_wrapper : public BaseT
+{
+ typedef typename BaseT::char_type char_type;
+ std::string error_string(::boost::regex_constants::error_type e)const
+ {
+ return ::boost::re_detail::get_default_error_string(e);
+ }
+ ::boost::regex_constants::syntax_type syntax_type(char_type c)const
+ {
+ return ((c & 0x7f) == c) ? get_default_syntax_type(static_cast<char>(c)) : ::boost::regex_constants::syntax_char;
+ }
+ ::boost::regex_constants::escape_syntax_type escape_syntax_type(char_type c)const
+ {
+ return ((c & 0x7f) == c) ? get_default_escape_syntax_type(static_cast<char>(c)) : ::boost::regex_constants::escape_type_identity;
+ }
+ int toi(const char_type*& p1, const char_type* p2, int radix)const
+ {
+ return ::boost::re_detail::global_toi(p1, p2, radix, *this);
+ }
+ char_type translate(char_type c, bool icase)const
+ {
+ return (icase ? this->translate_nocase(c) : this->translate(c));
+ }
+ char_type translate(char_type c)const
+ {
+ return BaseT::translate(c);
+ }
+ char_type tolower(char_type c)const
+ {
+ return ::boost::re_detail::global_lower(c);
+ }
+ char_type toupper(char_type c)const
+ {
+ return ::boost::re_detail::global_upper(c);
+ }
+};
+
+template <class BaseT, bool has_extensions>
+struct compute_wrapper_base
+{
+ typedef BaseT type;
+};
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !BOOST_WORKAROUND(__HP_aCC, < 60000)
+template <class BaseT>
+struct compute_wrapper_base<BaseT, false>
+{
+ typedef default_wrapper<BaseT> type;
+};
+#else
+template <>
+struct compute_wrapper_base<c_regex_traits<char>, false>
+{
+ typedef default_wrapper<c_regex_traits<char> > type;
+};
+#ifndef BOOST_NO_WREGEX
+template <>
+struct compute_wrapper_base<c_regex_traits<wchar_t>, false>
+{
+ typedef default_wrapper<c_regex_traits<wchar_t> > type;
+};
+#endif
+#endif
+
+} // namespace re_detail
+
+template <class BaseT>
+struct regex_traits_wrapper
+ : public ::boost::re_detail::compute_wrapper_base<
+ BaseT,
+ ::boost::re_detail::has_boost_extensions_tag<BaseT>::value
+ >::type
+{
+ regex_traits_wrapper(){}
+private:
+ regex_traits_wrapper(const regex_traits_wrapper&);
+ regex_traits_wrapper& operator=(const regex_traits_wrapper&);
+};
+
+} // namespace boost
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif // include
+
diff --git a/boost/boost/regex/v4/regex_traits_defaults.hpp b/boost/boost/regex/v4/regex_traits_defaults.hpp
new file mode 100644
index 00000000000..cc1df915364
--- /dev/null
+++ b/boost/boost/regex/v4/regex_traits_defaults.hpp
@@ -0,0 +1,317 @@
+/*
+ *
+ * Copyright (c) 2004
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE regex_traits_defaults.hpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: Declares API's for access to regex_traits default properties.
+ */
+
+#ifndef BOOST_REGEX_TRAITS_DEFAULTS_HPP_INCLUDED
+#define BOOST_REGEX_TRAITS_DEFAULTS_HPP_INCLUDED
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+#ifndef BOOST_REGEX_SYNTAX_TYPE_HPP
+#include <boost/regex/v4/syntax_type.hpp>
+#endif
+#ifndef BOOST_REGEX_ERROR_TYPE_HPP
+#include <boost/regex/v4/error_type.hpp>
+#endif
+
+#ifdef BOOST_NO_STDC_NAMESPACE
+namespace std{
+ using ::strlen;
+}
+#endif
+
+namespace boost{ namespace re_detail{
+
+
+//
+// helpers to suppress warnings:
+//
+template <class charT>
+inline bool is_extended(charT c)
+{ return c > 256; }
+inline bool is_extended(char)
+{ return false; }
+
+
+BOOST_REGEX_DECL const char* BOOST_REGEX_CALL get_default_syntax(regex_constants::syntax_type n);
+BOOST_REGEX_DECL const char* BOOST_REGEX_CALL get_default_error_string(regex_constants::error_type n);
+BOOST_REGEX_DECL regex_constants::syntax_type BOOST_REGEX_CALL get_default_syntax_type(char c);
+BOOST_REGEX_DECL regex_constants::escape_syntax_type BOOST_REGEX_CALL get_default_escape_syntax_type(char c);
+
+// is charT c a combining character?
+BOOST_REGEX_DECL bool BOOST_REGEX_CALL is_combining_implementation(uint_least16_t s);
+
+template <class charT>
+inline bool is_combining(charT c)
+{
+ return (c <= static_cast<charT>(0)) ? false : ((c >= static_cast<charT>((std::numeric_limits<uint_least16_t>::max)())) ? false : is_combining_implementation(static_cast<unsigned short>(c)));
+}
+template <>
+inline bool is_combining<char>(char)
+{
+ return false;
+}
+template <>
+inline bool is_combining<signed char>(signed char)
+{
+ return false;
+}
+template <>
+inline bool is_combining<unsigned char>(unsigned char)
+{
+ return false;
+}
+#ifndef __hpux // can't use WCHAR_MIN/MAX in pp-directives.
+#ifdef _MSC_VER
+template<>
+inline bool is_combining<wchar_t>(wchar_t c)
+{
+ return is_combining_implementation(static_cast<unsigned short>(c));
+}
+#elif !defined(__DECCXX) && !defined(__osf__) && !defined(__OSF__) && defined(WCHAR_MIN) && (WCHAR_MIN == 0) && !defined(BOOST_NO_INTRINSIC_WCHAR_T)
+#if defined(WCHAR_MAX) && (WCHAR_MAX <= USHRT_MAX)
+template<>
+inline bool is_combining<wchar_t>(wchar_t c)
+{
+ return is_combining_implementation(static_cast<unsigned short>(c));
+}
+#else
+template<>
+inline bool is_combining<wchar_t>(wchar_t c)
+{
+ return (c >= (std::numeric_limits<uint_least16_t>::max)()) ? false : is_combining_implementation(static_cast<unsigned short>(c));
+}
+#endif
+#endif
+#endif
+
+//
+// is a charT c a line separator?
+//
+template <class charT>
+inline bool is_separator(charT c)
+{
+ return BOOST_REGEX_MAKE_BOOL(
+ (c == static_cast<charT>('\n'))
+ || (c == static_cast<charT>('\r'))
+ || (c == static_cast<charT>('\f'))
+ || (static_cast<boost::uint16_t>(c) == 0x2028u)
+ || (static_cast<boost::uint16_t>(c) == 0x2029u)
+ || (static_cast<boost::uint16_t>(c) == 0x85u));
+}
+template <>
+inline bool is_separator<char>(char c)
+{
+ return BOOST_REGEX_MAKE_BOOL((c == '\n') || (c == '\r') || (c == '\f'));
+}
+
+//
+// get a default collating element:
+//
+BOOST_REGEX_DECL std::string BOOST_REGEX_CALL lookup_default_collate_name(const std::string& name);
+
+//
+// get the id of a character clasification, the individual
+// traits classes then transform that id into a bitmask:
+//
+template <class charT>
+struct character_pointer_range
+{
+ const charT* p1;
+ const charT* p2;
+
+ bool operator < (const character_pointer_range& r)const
+ {
+ return std::lexicographical_compare(p1, p2, r.p1, r.p2);
+ }
+ bool operator == (const character_pointer_range& r)const
+ {
+ // Not only do we check that the ranges are of equal size before
+ // calling std::equal, but there is no other algorithm available:
+ // not even a non-standard MS one. So forward to unchecked_equal
+ // in the MS case.
+ return ((p2 - p1) == (r.p2 - r.p1)) && re_detail::equal(p1, p2, r.p1);
+ }
+};
+template <class charT>
+int get_default_class_id(const charT* p1, const charT* p2)
+{
+ static const charT data[72] = {
+ 'a', 'l', 'n', 'u', 'm',
+ 'a', 'l', 'p', 'h', 'a',
+ 'b', 'l', 'a', 'n', 'k',
+ 'c', 'n', 't', 'r', 'l',
+ 'd', 'i', 'g', 'i', 't',
+ 'g', 'r', 'a', 'p', 'h',
+ 'l', 'o', 'w', 'e', 'r',
+ 'p', 'r', 'i', 'n', 't',
+ 'p', 'u', 'n', 'c', 't',
+ 's', 'p', 'a', 'c', 'e',
+ 'u', 'n', 'i', 'c', 'o', 'd', 'e',
+ 'u', 'p', 'p', 'e', 'r',
+ 'w', 'o', 'r', 'd',
+ 'x', 'd', 'i', 'g', 'i', 't',
+ };
+
+ static const character_pointer_range<charT> ranges[19] =
+ {
+ {data+0, data+5,}, // alnum
+ {data+5, data+10,}, // alpha
+ {data+10, data+15,}, // blank
+ {data+15, data+20,}, // cntrl
+ {data+20, data+21,}, // d
+ {data+20, data+25,}, // digit
+ {data+25, data+30,}, // graph
+ {data+30, data+31,}, // l
+ {data+30, data+35,}, // lower
+ {data+35, data+40,}, // print
+ {data+40, data+45,}, // punct
+ {data+45, data+46,}, // s
+ {data+45, data+50,}, // space
+ {data+57, data+58,}, // u
+ {data+50, data+57,}, // unicode
+ {data+57, data+62,}, // upper
+ {data+62, data+63,}, // w
+ {data+62, data+66,}, // word
+ {data+66, data+72,}, // xdigit
+ };
+ static const character_pointer_range<charT>* ranges_begin = ranges;
+ static const character_pointer_range<charT>* ranges_end = ranges + (sizeof(ranges)/sizeof(ranges[0]));
+
+ character_pointer_range<charT> t = { p1, p2, };
+ const character_pointer_range<charT>* p = std::lower_bound(ranges_begin, ranges_end, t);
+ if((p != ranges_end) && (t == *p))
+ return static_cast<int>(p - ranges);
+ return -1;
+}
+
+//
+// helper functions:
+//
+template <class charT>
+std::ptrdiff_t global_length(const charT* p)
+{
+ std::ptrdiff_t n = 0;
+ while(*p)
+ {
+ ++p;
+ ++n;
+ }
+ return n;
+}
+template<>
+inline std::ptrdiff_t global_length<char>(const char* p)
+{
+ return (std::strlen)(p);
+}
+#ifndef BOOST_NO_WREGEX
+template<>
+inline std::ptrdiff_t global_length<wchar_t>(const wchar_t* p)
+{
+ return (std::wcslen)(p);
+}
+#endif
+template <class charT>
+inline charT BOOST_REGEX_CALL global_lower(charT c)
+{
+ return c;
+}
+template <class charT>
+inline charT BOOST_REGEX_CALL global_upper(charT c)
+{
+ return c;
+}
+
+BOOST_REGEX_DECL char BOOST_REGEX_CALL do_global_lower(char c);
+BOOST_REGEX_DECL char BOOST_REGEX_CALL do_global_upper(char c);
+#ifndef BOOST_NO_WREGEX
+BOOST_REGEX_DECL wchar_t BOOST_REGEX_CALL do_global_lower(wchar_t c);
+BOOST_REGEX_DECL wchar_t BOOST_REGEX_CALL do_global_upper(wchar_t c);
+#endif
+#ifdef BOOST_REGEX_HAS_OTHER_WCHAR_T
+BOOST_REGEX_DECL unsigned short BOOST_REGEX_CALL do_global_lower(unsigned short c);
+BOOST_REGEX_DECL unsigned short BOOST_REGEX_CALL do_global_upper(unsigned short c);
+#endif
+//
+// This sucks: declare template specialisations of global_lower/global_upper
+// that just forward to the non-template implementation functions. We do
+// this because there is one compiler (Compaq Tru64 C++) that doesn't seem
+// to differentiate between templates and non-template overloads....
+// what's more, the primary template, plus all overloads have to be
+// defined in the same translation unit (if one is inline they all must be)
+// otherwise the "local template instantiation" compiler option can pick
+// the wrong instantiation when linking:
+//
+template<> inline char BOOST_REGEX_CALL global_lower<char>(char c){ return do_global_lower(c); }
+template<> inline char BOOST_REGEX_CALL global_upper<char>(char c){ return do_global_upper(c); }
+#ifndef BOOST_NO_WREGEX
+template<> inline wchar_t BOOST_REGEX_CALL global_lower<wchar_t>(wchar_t c){ return do_global_lower(c); }
+template<> inline wchar_t BOOST_REGEX_CALL global_upper<wchar_t>(wchar_t c){ return do_global_upper(c); }
+#endif
+#ifdef BOOST_REGEX_HAS_OTHER_WCHAR_T
+template<> inline unsigned short BOOST_REGEX_CALL global_lower<unsigned short>(unsigned short c){ return do_global_lower(c); }
+template<> inline unsigned short BOOST_REGEX_CALL global_upper<unsigned short>(unsigned short c){ return do_global_upper(c); }
+#endif
+
+template <class charT>
+int global_value(charT c)
+{
+ static const charT zero = '0';
+ static const charT nine = '9';
+ static const charT a = 'a';
+ static const charT f = 'f';
+ static const charT A = 'A';
+ static const charT F = 'F';
+
+ if(c > f) return -1;
+ if(c >= a) return 10 + (c - a);
+ if(c > F) return -1;
+ if(c >= A) return 10 + (c - A);
+ if(c > nine) return -1;
+ if(c >= zero) return c - zero;
+ return -1;
+}
+template <class charT, class traits>
+int global_toi(const charT*& p1, const charT* p2, int radix, const traits& t)
+{
+ (void)t; // warning suppression
+ int next_value = t.value(*p1, radix);
+ if((p1 == p2) || (next_value < 0) || (next_value >= radix))
+ return -1;
+ int result = 0;
+ while(p1 != p2)
+ {
+ next_value = t.value(*p1, radix);
+ if((next_value < 0) || (next_value >= radix))
+ break;
+ result *= radix;
+ result += next_value;
+ ++p1;
+ }
+ return result;
+}
+
+} // re_detail
+} // boost
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif
diff --git a/boost/boost/regex/v4/regex_workaround.hpp b/boost/boost/regex/v4/regex_workaround.hpp
new file mode 100644
index 00000000000..3659c0720bd
--- /dev/null
+++ b/boost/boost/regex/v4/regex_workaround.hpp
@@ -0,0 +1,202 @@
+/*
+ *
+ * Copyright (c) 1998-2005
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE regex_workarounds.cpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: Declares Misc workarounds.
+ */
+
+#ifndef BOOST_REGEX_WORKAROUND_HPP
+#define BOOST_REGEX_WORKAROUND_HPP
+
+
+#include <new>
+#include <cstring>
+#include <cstdlib>
+#include <cstddef>
+#include <cassert>
+#include <cstdio>
+#include <string>
+#include <stdexcept>
+#include <iterator>
+#include <algorithm>
+#include <iosfwd>
+#include <vector>
+#include <map>
+#include <boost/limits.hpp>
+#include <boost/assert.hpp>
+#include <boost/cstdint.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/scoped_ptr.hpp>
+#include <boost/scoped_array.hpp>
+#include <boost/shared_ptr.hpp>
+#include <boost/mpl/bool_fwd.hpp>
+#ifndef BOOST_NO_STD_LOCALE
+# include <locale>
+#endif
+
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::sprintf; using ::strcpy; using ::strcat; using ::strlen;
+}
+#endif
+
+namespace boost{ namespace re_detail{
+#ifdef BOOST_NO_STD_DISTANCE
+template <class T>
+std::ptrdiff_t distance(const T& x, const T& y)
+{ return y - x; }
+#else
+using std::distance;
+#endif
+}}
+
+
+#ifdef BOOST_REGEX_NO_BOOL
+# define BOOST_REGEX_MAKE_BOOL(x) static_cast<bool>((x) ? true : false)
+#else
+# ifdef BOOST_MSVC
+ // warning suppression with VC6:
+# pragma warning(disable: 4800)
+# pragma warning(disable: 4786)
+# endif
+# define BOOST_REGEX_MAKE_BOOL(x) static_cast<bool>(x)
+#endif
+
+/*****************************************************************************
+ *
+ * Fix broken broken namespace support:
+ *
+ ****************************************************************************/
+
+#if defined(BOOST_NO_STDC_NAMESPACE) && defined(__cplusplus)
+
+namespace std{
+ using ::ptrdiff_t;
+ using ::size_t;
+ using ::abs;
+ using ::memset;
+ using ::memcpy;
+}
+
+#endif
+
+/*****************************************************************************
+ *
+ * helper functions pointer_construct/pointer_destroy:
+ *
+ ****************************************************************************/
+
+#ifdef __cplusplus
+namespace boost{ namespace re_detail{
+
+#ifdef BOOST_MSVC
+#pragma warning (push)
+#pragma warning (disable : 4100)
+#endif
+
+template <class T>
+inline void pointer_destroy(T* p)
+{ p->~T(); (void)p; }
+
+#ifdef BOOST_MSVC
+#pragma warning (pop)
+#endif
+
+template <class T>
+inline void pointer_construct(T* p, const T& t)
+{ new (p) T(t); }
+
+}} // namespaces
+#endif
+
+/*****************************************************************************
+ *
+ * helper function copy:
+ *
+ ****************************************************************************/
+
+#ifdef __cplusplus
+namespace boost{ namespace re_detail{
+#if BOOST_WORKAROUND(BOOST_MSVC,>=1400) && defined(_CPPLIB_VER) && !(defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION))
+ //
+ // MSVC 8 will either emit warnings or else refuse to compile
+ // code that makes perfectly legitimate use of std::copy, when
+ // the OutputIterator type is a user-defined class (apparently all user
+ // defined iterators are "unsafe"). This code works around that:
+ //
+ template<class InputIterator, class OutputIterator>
+ inline OutputIterator copy(
+ InputIterator first,
+ InputIterator last,
+ OutputIterator dest
+ )
+ {
+ return stdext::unchecked_copy(first, last, dest);
+ }
+ template<class InputIterator1, class InputIterator2>
+ inline bool equal(
+ InputIterator1 first,
+ InputIterator1 last,
+ InputIterator2 with
+ )
+ {
+ return stdext::unchecked_equal(first, last, with);
+ }
+
+ // use safe versions of strcpy etc:
+ using ::strcpy_s;
+ using ::strcat_s;
+#else
+ using std::copy;
+ using std::equal;
+
+ inline std::size_t strcpy_s(
+ char *strDestination,
+ std::size_t sizeInBytes,
+ const char *strSource
+ )
+ {
+ if(std::strlen(strSource)+1 > sizeInBytes)
+ return 1;
+ std::strcpy(strDestination, strSource);
+ return 0;
+ }
+ inline std::size_t strcat_s(
+ char *strDestination,
+ std::size_t sizeInBytes,
+ const char *strSource
+ )
+ {
+ if(std::strlen(strSource) + std::strlen(strDestination) + 1 > sizeInBytes)
+ return 1;
+ std::strcat(strDestination, strSource);
+ return 0;
+ }
+
+#endif
+
+ inline void overflow_error_if_not_zero(std::size_t i)
+ {
+ if(i)
+ {
+ std::overflow_error e("String buffer too small");
+ boost::throw_exception(e);
+ }
+ }
+
+}} // namespaces
+#endif
+
+#endif // include guard
+
diff --git a/boost/boost/regex/v4/states.hpp b/boost/boost/regex/v4/states.hpp
new file mode 100644
index 00000000000..551ed669a19
--- /dev/null
+++ b/boost/boost/regex/v4/states.hpp
@@ -0,0 +1,276 @@
+/*
+ *
+ * Copyright (c) 1998-2002
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE states.cpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: Declares internal state machine structures.
+ */
+
+#ifndef BOOST_REGEX_V4_STATES_HPP
+#define BOOST_REGEX_V4_STATES_HPP
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+namespace boost{
+namespace re_detail{
+
+/*** mask_type *******************************************************
+Whenever we have a choice of two alternatives, we use an array of bytes
+to indicate which of the two alternatives it is possible to take for any
+given input character. If mask_take is set, then we can take the next
+state, and if mask_skip is set then we can take the alternative.
+***********************************************************************/
+enum mask_type
+{
+ mask_take = 1,
+ mask_skip = 2,
+ mask_init = 4,
+ mask_any = mask_skip | mask_take,
+ mask_all = mask_any
+};
+
+/*** helpers **********************************************************
+These helpers let us use function overload resolution to detect whether
+we have narrow or wide character strings:
+***********************************************************************/
+struct _narrow_type{};
+struct _wide_type{};
+template <class charT> struct is_byte;
+template<> struct is_byte<char> { typedef _narrow_type width_type; };
+template<> struct is_byte<unsigned char>{ typedef _narrow_type width_type; };
+template<> struct is_byte<signed char> { typedef _narrow_type width_type; };
+template <class charT> struct is_byte { typedef _wide_type width_type; };
+
+/*** enum syntax_element_type ******************************************
+Every record in the state machine falls into one of the following types:
+***********************************************************************/
+enum syntax_element_type
+{
+ // start of a marked sub-expression, or perl-style (?...) extension
+ syntax_element_startmark = 0,
+ // end of a marked sub-expression, or perl-style (?...) extension
+ syntax_element_endmark = syntax_element_startmark + 1,
+ // any sequence of literal characters
+ syntax_element_literal = syntax_element_endmark + 1,
+ // start of line assertion: ^
+ syntax_element_start_line = syntax_element_literal + 1,
+ // end of line assertion $
+ syntax_element_end_line = syntax_element_start_line + 1,
+ // match any character: .
+ syntax_element_wild = syntax_element_end_line + 1,
+ // end of expression: we have a match when we get here
+ syntax_element_match = syntax_element_wild + 1,
+ // perl style word boundary: \b
+ syntax_element_word_boundary = syntax_element_match + 1,
+ // perl style within word boundary: \B
+ syntax_element_within_word = syntax_element_word_boundary + 1,
+ // start of word assertion: \<
+ syntax_element_word_start = syntax_element_within_word + 1,
+ // end of word assertion: \>
+ syntax_element_word_end = syntax_element_word_start + 1,
+ // start of buffer assertion: \`
+ syntax_element_buffer_start = syntax_element_word_end + 1,
+ // end of buffer assertion: \'
+ syntax_element_buffer_end = syntax_element_buffer_start + 1,
+ // backreference to previously matched sub-expression
+ syntax_element_backref = syntax_element_buffer_end + 1,
+ // either a wide character set [..] or one with multicharacter collating elements:
+ syntax_element_long_set = syntax_element_backref + 1,
+ // narrow character set: [...]
+ syntax_element_set = syntax_element_long_set + 1,
+ // jump to a new state in the machine:
+ syntax_element_jump = syntax_element_set + 1,
+ // choose between two production states:
+ syntax_element_alt = syntax_element_jump + 1,
+ // a repeat
+ syntax_element_rep = syntax_element_alt + 1,
+ // match a combining character sequence
+ syntax_element_combining = syntax_element_rep + 1,
+ // perl style soft buffer end: \z
+ syntax_element_soft_buffer_end = syntax_element_combining + 1,
+ // perl style continuation: \G
+ syntax_element_restart_continue = syntax_element_soft_buffer_end + 1,
+ // single character repeats:
+ syntax_element_dot_rep = syntax_element_restart_continue + 1,
+ syntax_element_char_rep = syntax_element_dot_rep + 1,
+ syntax_element_short_set_rep = syntax_element_char_rep + 1,
+ syntax_element_long_set_rep = syntax_element_short_set_rep + 1,
+ // a backstep for lookbehind repeats:
+ syntax_element_backstep = syntax_element_long_set_rep + 1,
+ // an assertion that a mark was matched:
+ syntax_element_assert_backref = syntax_element_backstep + 1,
+ syntax_element_toggle_case = syntax_element_assert_backref + 1
+};
+
+#ifdef BOOST_REGEX_DEBUG
+// dwa 09/26/00 - This is needed to suppress warnings about an ambiguous conversion
+std::ostream& operator<<(std::ostream&, syntax_element_type);
+#endif
+
+struct re_syntax_base;
+
+/*** union offset_type ************************************************
+Points to another state in the machine. During machine construction
+we use integral offsets, but these are converted to pointers before
+execution of the machine.
+***********************************************************************/
+union offset_type
+{
+ re_syntax_base* p;
+ std::ptrdiff_t i;
+};
+
+/*** struct re_syntax_base ********************************************
+Base class for all states in the machine.
+***********************************************************************/
+struct re_syntax_base
+{
+ syntax_element_type type; // what kind of state this is
+ offset_type next; // next state in the machine
+};
+
+/*** struct re_brace **************************************************
+A marked parenthesis.
+***********************************************************************/
+struct re_brace : public re_syntax_base
+{
+ // The index to match, can be zero (don't mark the sub-expression)
+ // or negative (for perl style (?...) extentions):
+ int index;
+};
+
+/*** struct re_dot **************************************************
+Match anything.
+***********************************************************************/
+enum
+{
+ dont_care = 1,
+ force_not_newline = 0,
+ force_newline = 2,
+
+ test_not_newline = 2,
+ test_newline = 3
+};
+struct re_dot : public re_syntax_base
+{
+ unsigned char mask;
+};
+
+/*** struct re_literal ************************************************
+A string of literals, following this structure will be an
+array of characters: charT[length]
+***********************************************************************/
+struct re_literal : public re_syntax_base
+{
+ unsigned int length;
+};
+
+/*** struct re_case ************************************************
+Indicates whether we are moving to a case insensive block or not
+***********************************************************************/
+struct re_case : public re_syntax_base
+{
+ bool icase;
+};
+
+/*** struct re_set_long ***********************************************
+A wide character set of characters, following this structure will be
+an array of type charT:
+First csingles null-terminated strings
+Then 2 * cranges NULL terminated strings
+Then cequivalents NULL terminated strings
+***********************************************************************/
+template <class mask_type>
+struct re_set_long : public re_syntax_base
+{
+ unsigned int csingles, cranges, cequivalents;
+ mask_type cclasses;
+ mask_type cnclasses;
+ bool isnot;
+ bool singleton;
+};
+
+/*** struct re_set ****************************************************
+A set of narrow-characters, matches any of _map which is none-zero
+***********************************************************************/
+struct re_set : public re_syntax_base
+{
+ unsigned char _map[1 << CHAR_BIT];
+};
+
+/*** struct re_jump ***************************************************
+Jump to a new location in the machine (not next).
+***********************************************************************/
+struct re_jump : public re_syntax_base
+{
+ offset_type alt; // location to jump to
+};
+
+/*** struct re_alt ***************************************************
+Jump to a new location in the machine (possibly next).
+***********************************************************************/
+struct re_alt : public re_jump
+{
+ unsigned char _map[1 << CHAR_BIT]; // which characters can take the jump
+ unsigned int can_be_null; // true if we match a NULL string
+};
+
+/*** struct re_repeat *************************************************
+Repeat a section of the machine
+***********************************************************************/
+struct re_repeat : public re_alt
+{
+ std::size_t min, max; // min and max allowable repeats
+ int id; // Unique identifier for this repeat
+ bool leading; // True if this repeat is at the start of the machine (lets us optimize some searches)
+ bool greedy; // True if this is a greedy repeat
+};
+
+/*** enum re_jump_size_type *******************************************
+Provides compiled size of re_jump structure (allowing for trailing alignment).
+We provide this so we know how manybytes to insert when constructing the machine
+(The value of padding_mask is defined in regex_raw_buffer.hpp).
+***********************************************************************/
+enum re_jump_size_type
+{
+ re_jump_size = (sizeof(re_jump) + padding_mask) & ~(padding_mask),
+ re_repeater_size = (sizeof(re_repeat) + padding_mask) & ~(padding_mask),
+ re_alt_size = (sizeof(re_alt) + padding_mask) & ~(padding_mask)
+};
+
+/*** proc re_is_set_member *********************************************
+Forward declaration: we'll need this one later...
+***********************************************************************/
+
+template<class charT, class traits>
+struct regex_data;
+
+template <class iterator, class charT, class traits_type, class char_classT>
+iterator BOOST_REGEX_CALL re_is_set_member(iterator next,
+ iterator last,
+ const re_set_long<char_classT>* set_,
+ const regex_data<charT, traits_type>& e, bool icase);
+
+} // namespace re_detail
+
+} // namespace boost
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif
+
+
diff --git a/boost/boost/regex/v4/sub_match.hpp b/boost/boost/regex/v4/sub_match.hpp
new file mode 100644
index 00000000000..b21f4fab3ea
--- /dev/null
+++ b/boost/boost/regex/v4/sub_match.hpp
@@ -0,0 +1,495 @@
+/*
+ *
+ * Copyright (c) 1998-2002
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE sub_match.cpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: Declares template class sub_match.
+ */
+
+#ifndef BOOST_REGEX_V4_SUB_MATCH_HPP
+#define BOOST_REGEX_V4_SUB_MATCH_HPP
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+namespace boost{
+
+template <class BidiIterator>
+struct sub_match : public std::pair<BidiIterator, BidiIterator>
+{
+ typedef typename re_detail::regex_iterator_traits<BidiIterator>::value_type value_type;
+#if defined(BOOST_NO_STD_ITERATOR_TRAITS) || defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+ typedef std::ptrdiff_t difference_type;
+#else
+ typedef typename re_detail::regex_iterator_traits<BidiIterator>::difference_type difference_type;
+#endif
+ typedef BidiIterator iterator_type;
+ typedef BidiIterator iterator;
+ typedef BidiIterator const_iterator;
+
+ bool matched;
+
+ sub_match() : std::pair<BidiIterator, BidiIterator>(), matched(false) {}
+ sub_match(BidiIterator i) : std::pair<BidiIterator, BidiIterator>(i, i), matched(false) {}
+#if !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS)\
+ && !BOOST_WORKAROUND(BOOST_MSVC, < 1310)\
+ && !BOOST_WORKAROUND(__BORLANDC__, <= 0x0551)\
+ && !BOOST_WORKAROUND(__DECCXX_VER, BOOST_TESTED_AT(60590042))
+ template <class T, class A>
+ operator std::basic_string<value_type, T, A> ()const
+ {
+ return std::basic_string<value_type, T, A>(this->first, this->second);
+ }
+#else
+ operator std::basic_string<value_type> ()const
+ {
+ return str();
+ }
+#endif
+ difference_type BOOST_REGEX_CALL length()const
+ {
+ difference_type n = ::boost::re_detail::distance((BidiIterator)this->first, (BidiIterator)this->second);
+ return n;
+ }
+ std::basic_string<value_type> str()const
+ {
+ std::basic_string<value_type> result;
+ std::size_t len = ::boost::re_detail::distance((BidiIterator)this->first, (BidiIterator)this->second);
+ result.reserve(len);
+ BidiIterator i = this->first;
+ while(i != this->second)
+ {
+ result.append(1, *i);
+ ++i;
+ }
+ return result;
+ }
+ int compare(const sub_match& s)const
+ {
+ if(matched != s.matched)
+ return static_cast<int>(matched) - static_cast<int>(s.matched);
+ return str().compare(s.str());
+ }
+ int compare(const std::basic_string<value_type>& s)const
+ {
+ return str().compare(s);
+ }
+ int compare(const value_type* p)const
+ {
+ return str().compare(p);
+ }
+
+ bool operator==(const sub_match& that)const
+ { return compare(that) == 0; }
+ bool BOOST_REGEX_CALL operator !=(const sub_match& that)const
+ { return compare(that) != 0; }
+ bool operator<(const sub_match& that)const
+ { return compare(that) < 0; }
+ bool operator>(const sub_match& that)const
+ { return compare(that) > 0; }
+ bool operator<=(const sub_match& that)const
+ { return compare(that) <= 0; }
+ bool operator>=(const sub_match& that)const
+ { return compare(that) >= 0; }
+
+#ifdef BOOST_REGEX_MATCH_EXTRA
+ typedef std::vector<sub_match<BidiIterator> > capture_sequence_type;
+
+ const capture_sequence_type& captures()const
+ {
+ if(!m_captures)
+ m_captures.reset(new capture_sequence_type());
+ return *m_captures;
+ }
+ //
+ // Private implementation API: DO NOT USE!
+ //
+ capture_sequence_type& get_captures()const
+ {
+ if(!m_captures)
+ m_captures.reset(new capture_sequence_type());
+ return *m_captures;
+ }
+
+private:
+ mutable boost::scoped_ptr<capture_sequence_type> m_captures;
+public:
+
+#endif
+ sub_match(const sub_match& that, bool
+#ifdef BOOST_REGEX_MATCH_EXTRA
+ deep_copy
+#endif
+ = true
+ )
+ : std::pair<BidiIterator, BidiIterator>(that),
+ matched(that.matched)
+ {
+#ifdef BOOST_REGEX_MATCH_EXTRA
+ if(that.m_captures)
+ if(deep_copy)
+ m_captures.reset(new capture_sequence_type(*(that.m_captures)));
+#endif
+ }
+ sub_match& operator=(const sub_match& that)
+ {
+ this->first = that.first;
+ this->second = that.second;
+ matched = that.matched;
+#ifdef BOOST_REGEX_MATCH_EXTRA
+ if(that.m_captures)
+ get_captures() = *(that.m_captures);
+#endif
+ return *this;
+ }
+
+
+#ifdef BOOST_OLD_REGEX_H
+ //
+ // the following are deprecated, do not use!!
+ //
+ operator int()const;
+ operator unsigned int()const;
+ operator short()const
+ {
+ return (short)(int)(*this);
+ }
+ operator unsigned short()const
+ {
+ return (unsigned short)(unsigned int)(*this);
+ }
+#endif
+};
+
+typedef sub_match<const char*> csub_match;
+typedef sub_match<std::string::const_iterator> ssub_match;
+#ifndef BOOST_NO_WREGEX
+typedef sub_match<const wchar_t*> wcsub_match;
+typedef sub_match<std::wstring::const_iterator> wssub_match;
+#endif
+
+// comparison to std::basic_string<> part 1:
+template <class RandomAccessIterator, class traits, class Allocator>
+inline bool operator == (const std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s,
+ const sub_match<RandomAccessIterator>& m)
+{ return s.compare(m.str()) == 0; }
+template <class RandomAccessIterator, class traits, class Allocator>
+inline bool operator != (const std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s,
+ const sub_match<RandomAccessIterator>& m)
+{ return s.compare(m.str()) != 0; }
+template <class RandomAccessIterator, class traits, class Allocator>
+inline bool operator < (const std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s,
+ const sub_match<RandomAccessIterator>& m)
+{ return s.compare(m.str()) < 0; }
+template <class RandomAccessIterator, class traits, class Allocator>
+inline bool operator <= (const std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s,
+ const sub_match<RandomAccessIterator>& m)
+{ return s.compare(m.str()) <= 0; }
+template <class RandomAccessIterator, class traits, class Allocator>
+inline bool operator >= (const std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s,
+ const sub_match<RandomAccessIterator>& m)
+{ return s.compare(m.str()) >= 0; }
+template <class RandomAccessIterator, class traits, class Allocator>
+inline bool operator > (const std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s,
+ const sub_match<RandomAccessIterator>& m)
+{ return s.compare(m.str()) > 0; }
+// comparison to std::basic_string<> part 2:
+template <class RandomAccessIterator, class traits, class Allocator>
+inline bool operator == (const sub_match<RandomAccessIterator>& m,
+ const std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s)
+{ return m.str().compare(s) == 0; }
+template <class RandomAccessIterator, class traits, class Allocator>
+inline bool operator != (const sub_match<RandomAccessIterator>& m,
+ const std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s)
+{ return m.str().compare(s) != 0; }
+template <class RandomAccessIterator, class traits, class Allocator>
+inline bool operator < (const sub_match<RandomAccessIterator>& m,
+ const std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s)
+{ return m.str().compare(s) < 0; }
+template <class RandomAccessIterator, class traits, class Allocator>
+inline bool operator > (const sub_match<RandomAccessIterator>& m,
+ const std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s)
+{ return m.str().compare(s) > 0; }
+template <class RandomAccessIterator, class traits, class Allocator>
+inline bool operator <= (const sub_match<RandomAccessIterator>& m,
+ const std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s)
+{ return m.str().compare(s) <= 0; }
+template <class RandomAccessIterator, class traits, class Allocator>
+inline bool operator >= (const sub_match<RandomAccessIterator>& m,
+ const std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s)
+{ return m.str().compare(s) >= 0; }
+// comparison to const charT* part 1:
+template <class RandomAccessIterator>
+inline bool operator == (const sub_match<RandomAccessIterator>& m,
+ typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const* s)
+{ return m.str().compare(s) == 0; }
+template <class RandomAccessIterator>
+inline bool operator != (const sub_match<RandomAccessIterator>& m,
+ typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const* s)
+{ return m.str().compare(s) != 0; }
+template <class RandomAccessIterator>
+inline bool operator > (const sub_match<RandomAccessIterator>& m,
+ typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const* s)
+{ return m.str().compare(s) > 0; }
+template <class RandomAccessIterator>
+inline bool operator < (const sub_match<RandomAccessIterator>& m,
+ typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const* s)
+{ return m.str().compare(s) < 0; }
+template <class RandomAccessIterator>
+inline bool operator >= (const sub_match<RandomAccessIterator>& m,
+ typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const* s)
+{ return m.str().compare(s) >= 0; }
+template <class RandomAccessIterator>
+inline bool operator <= (const sub_match<RandomAccessIterator>& m,
+ typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const* s)
+{ return m.str().compare(s) <= 0; }
+// comparison to const charT* part 2:
+template <class RandomAccessIterator>
+inline bool operator == (typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const* s,
+ const sub_match<RandomAccessIterator>& m)
+{ return m.str().compare(s) == 0; }
+template <class RandomAccessIterator>
+inline bool operator != (typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const* s,
+ const sub_match<RandomAccessIterator>& m)
+{ return m.str().compare(s) != 0; }
+template <class RandomAccessIterator>
+inline bool operator < (typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const* s,
+ const sub_match<RandomAccessIterator>& m)
+{ return m.str().compare(s) > 0; }
+template <class RandomAccessIterator>
+inline bool operator > (typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const* s,
+ const sub_match<RandomAccessIterator>& m)
+{ return m.str().compare(s) < 0; }
+template <class RandomAccessIterator>
+inline bool operator <= (typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const* s,
+ const sub_match<RandomAccessIterator>& m)
+{ return m.str().compare(s) >= 0; }
+template <class RandomAccessIterator>
+inline bool operator >= (typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const* s,
+ const sub_match<RandomAccessIterator>& m)
+{ return m.str().compare(s) <= 0; }
+
+// comparison to const charT& part 1:
+template <class RandomAccessIterator>
+inline bool operator == (const sub_match<RandomAccessIterator>& m,
+ typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const& s)
+{ return m.str().compare(0, m.length(), &s, 1) == 0; }
+template <class RandomAccessIterator>
+inline bool operator != (const sub_match<RandomAccessIterator>& m,
+ typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const& s)
+{ return m.str().compare(0, m.length(), &s, 1) != 0; }
+template <class RandomAccessIterator>
+inline bool operator > (const sub_match<RandomAccessIterator>& m,
+ typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const& s)
+{ return m.str().compare(0, m.length(), &s, 1) > 0; }
+template <class RandomAccessIterator>
+inline bool operator < (const sub_match<RandomAccessIterator>& m,
+ typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const& s)
+{ return m.str().compare(0, m.length(), &s, 1) < 0; }
+template <class RandomAccessIterator>
+inline bool operator >= (const sub_match<RandomAccessIterator>& m,
+ typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const& s)
+{ return m.str().compare(0, m.length(), &s, 1) >= 0; }
+template <class RandomAccessIterator>
+inline bool operator <= (const sub_match<RandomAccessIterator>& m,
+ typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const& s)
+{ return m.str().compare(0, m.length(), &s, 1) <= 0; }
+// comparison to const charT* part 2:
+template <class RandomAccessIterator>
+inline bool operator == (typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const& s,
+ const sub_match<RandomAccessIterator>& m)
+{ return m.str().compare(0, m.length(), &s, 1) == 0; }
+template <class RandomAccessIterator>
+inline bool operator != (typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const& s,
+ const sub_match<RandomAccessIterator>& m)
+{ return m.str().compare(0, m.length(), &s, 1) != 0; }
+template <class RandomAccessIterator>
+inline bool operator < (typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const& s,
+ const sub_match<RandomAccessIterator>& m)
+{ return m.str().compare(0, m.length(), &s, 1) > 0; }
+template <class RandomAccessIterator>
+inline bool operator > (typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const& s,
+ const sub_match<RandomAccessIterator>& m)
+{ return m.str().compare(0, m.length(), &s, 1) < 0; }
+template <class RandomAccessIterator>
+inline bool operator <= (typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const& s,
+ const sub_match<RandomAccessIterator>& m)
+{ return m.str().compare(0, m.length(), &s, 1) >= 0; }
+template <class RandomAccessIterator>
+inline bool operator >= (typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const& s,
+ const sub_match<RandomAccessIterator>& m)
+{ return m.str().compare(0, m.length(), &s, 1) <= 0; }
+
+// addition operators:
+template <class RandomAccessIterator, class traits, class Allocator>
+inline std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>
+operator + (const std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s,
+ const sub_match<RandomAccessIterator>& m)
+{
+ std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator> result;
+ result.reserve(s.size() + m.length() + 1);
+ return result.append(s).append(m.first, m.second);
+}
+template <class RandomAccessIterator, class traits, class Allocator>
+inline std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>
+operator + (const sub_match<RandomAccessIterator>& m,
+ const std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s)
+{
+ std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator> result;
+ result.reserve(s.size() + m.length() + 1);
+ return result.append(m.first, m.second).append(s);
+}
+#if !(defined(__GNUC__) && defined(BOOST_NO_STD_LOCALE))
+template <class RandomAccessIterator>
+inline std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type>
+operator + (typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const* s,
+ const sub_match<RandomAccessIterator>& m)
+{
+ std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type> result;
+ result.reserve(std::char_traits<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type>::length(s) + m.length() + 1);
+ return result.append(s).append(m.first, m.second);
+}
+template <class RandomAccessIterator>
+inline std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type>
+operator + (const sub_match<RandomAccessIterator>& m,
+ typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const * s)
+{
+ std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type> result;
+ result.reserve(std::char_traits<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type>::length(s) + m.length() + 1);
+ return result.append(m.first, m.second).append(s);
+}
+#else
+// worwaround versions:
+template <class RandomAccessIterator>
+inline std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type>
+operator + (typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const* s,
+ const sub_match<RandomAccessIterator>& m)
+{
+ return s + m.str();
+}
+template <class RandomAccessIterator>
+inline std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type>
+operator + (const sub_match<RandomAccessIterator>& m,
+ typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const * s)
+{
+ return m.str() + s;
+}
+#endif
+template <class RandomAccessIterator>
+inline std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type>
+operator + (typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const& s,
+ const sub_match<RandomAccessIterator>& m)
+{
+ std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type> result;
+ result.reserve(m.length() + 2);
+ return result.append(1, s).append(m.first, m.second);
+}
+template <class RandomAccessIterator>
+inline std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type>
+operator + (const sub_match<RandomAccessIterator>& m,
+ typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type const& s)
+{
+ std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type> result;
+ result.reserve(m.length() + 2);
+ return result.append(m.first, m.second).append(1, s);
+}
+template <class RandomAccessIterator>
+inline std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type>
+operator + (const sub_match<RandomAccessIterator>& m1,
+ const sub_match<RandomAccessIterator>& m2)
+{
+ std::basic_string<typename re_detail::regex_iterator_traits<RandomAccessIterator>::value_type> result;
+ result.reserve(m1.length() + m2.length() + 1);
+ return result.append(m1.first, m1.second).append(m2.first, m2.second);
+}
+#ifndef BOOST_NO_STD_LOCALE
+template <class charT, class traits, class RandomAccessIterator>
+std::basic_ostream<charT, traits>&
+ operator << (std::basic_ostream<charT, traits>& os,
+ const sub_match<RandomAccessIterator>& s)
+{
+ return (os << s.str());
+}
+#else
+template <class RandomAccessIterator>
+std::ostream& operator << (std::ostream& os,
+ const sub_match<RandomAccessIterator>& s)
+{
+ return (os << s.str());
+}
+#endif
+
+#ifdef BOOST_OLD_REGEX_H
+namespace re_detail{
+template <class BidiIterator, class charT>
+int do_toi(BidiIterator i, BidiIterator j, char c, int radix)
+{
+ std::string s(i, j);
+ char* p;
+ int result = std::strtol(s.c_str(), &p, radix);
+ if(*p)raise_regex_exception("Bad sub-expression");
+ return result;
+}
+
+//
+// helper:
+template <class I, class charT>
+int do_toi(I& i, I j, charT c)
+{
+ int result = 0;
+ while((i != j) && (isdigit(*i)))
+ {
+ result = result*10 + (*i - '0');
+ ++i;
+ }
+ return result;
+}
+}
+
+
+template <class BidiIterator>
+sub_match<BidiIterator>::operator int()const
+{
+ BidiIterator i = first;
+ BidiIterator j = second;
+ if(i == j)raise_regex_exception("Bad sub-expression");
+ int neg = 1;
+ if((i != j) && (*i == '-'))
+ {
+ neg = -1;
+ ++i;
+ }
+ neg *= re_detail::do_toi(i, j, *i);
+ if(i != j)raise_regex_exception("Bad sub-expression");
+ return neg;
+}
+template <class BidiIterator>
+sub_match<BidiIterator>::operator unsigned int()const
+{
+ BidiIterator i = first;
+ BidiIterator j = second;
+ if(i == j)
+ raise_regex_exception("Bad sub-expression");
+ return re_detail::do_toi(i, j, *first);
+}
+#endif
+
+} // namespace boost
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif
+
diff --git a/boost/boost/regex/v4/syntax_type.hpp b/boost/boost/regex/v4/syntax_type.hpp
new file mode 100644
index 00000000000..92c00d4c552
--- /dev/null
+++ b/boost/boost/regex/v4/syntax_type.hpp
@@ -0,0 +1,102 @@
+/*
+ *
+ * Copyright (c) 2003
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE syntax_type.hpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: Declares regular expression synatx type enumerator.
+ */
+
+#ifndef BOOST_REGEX_SYNTAX_TYPE_HPP
+#define BOOST_REGEX_SYNTAX_TYPE_HPP
+
+namespace boost{
+namespace regex_constants{
+
+typedef unsigned char syntax_type;
+
+//
+// values chosen are binary compatible with previous version:
+//
+static const syntax_type syntax_char = 0;
+static const syntax_type syntax_open_mark = 1;
+static const syntax_type syntax_close_mark = 2;
+static const syntax_type syntax_dollar = 3;
+static const syntax_type syntax_caret = 4;
+static const syntax_type syntax_dot = 5;
+static const syntax_type syntax_star = 6;
+static const syntax_type syntax_plus = 7;
+static const syntax_type syntax_question = 8;
+static const syntax_type syntax_open_set = 9;
+static const syntax_type syntax_close_set = 10;
+static const syntax_type syntax_or = 11;
+static const syntax_type syntax_escape = 12;
+static const syntax_type syntax_dash = 14;
+static const syntax_type syntax_open_brace = 15;
+static const syntax_type syntax_close_brace = 16;
+static const syntax_type syntax_digit = 17;
+static const syntax_type syntax_comma = 27;
+static const syntax_type syntax_equal = 37;
+static const syntax_type syntax_colon = 36;
+static const syntax_type syntax_not = 53;
+
+// extensions:
+
+static const syntax_type syntax_hash = 13;
+static const syntax_type syntax_newline = 26;
+
+// escapes:
+
+typedef syntax_type escape_syntax_type;
+
+static const escape_syntax_type escape_type_word_assert = 18;
+static const escape_syntax_type escape_type_not_word_assert = 19;
+static const escape_syntax_type escape_type_control_f = 29;
+static const escape_syntax_type escape_type_control_n = 30;
+static const escape_syntax_type escape_type_control_r = 31;
+static const escape_syntax_type escape_type_control_t = 32;
+static const escape_syntax_type escape_type_control_v = 33;
+static const escape_syntax_type escape_type_ascii_control = 35;
+static const escape_syntax_type escape_type_hex = 34;
+static const escape_syntax_type escape_type_unicode = 0; // not used
+static const escape_syntax_type escape_type_identity = 0; // not used
+static const escape_syntax_type escape_type_backref = syntax_digit;
+static const escape_syntax_type escape_type_decimal = syntax_digit; // not used
+static const escape_syntax_type escape_type_class = 22;
+static const escape_syntax_type escape_type_not_class = 23;
+
+// extensions:
+
+static const escape_syntax_type escape_type_left_word = 20;
+static const escape_syntax_type escape_type_right_word = 21;
+static const escape_syntax_type escape_type_start_buffer = 24; // for \`
+static const escape_syntax_type escape_type_end_buffer = 25; // for \'
+static const escape_syntax_type escape_type_control_a = 28; // for \a
+static const escape_syntax_type escape_type_e = 38; // for \e
+static const escape_syntax_type escape_type_E = 47; // for \Q\E
+static const escape_syntax_type escape_type_Q = 48; // for \Q\E
+static const escape_syntax_type escape_type_X = 49; // for \X
+static const escape_syntax_type escape_type_C = 50; // for \C
+static const escape_syntax_type escape_type_Z = 51; // for \Z
+static const escape_syntax_type escape_type_G = 52; // for \G
+
+static const escape_syntax_type escape_type_property = 54; // for \p
+static const escape_syntax_type escape_type_not_property = 55; // for \P
+static const escape_syntax_type escape_type_named_char = 56; // for \N
+
+static const escape_syntax_type syntax_max = 57;
+
+}
+}
+
+
+#endif
diff --git a/boost/boost/regex/v4/u32regex_iterator.hpp b/boost/boost/regex/v4/u32regex_iterator.hpp
new file mode 100644
index 00000000000..9e49c6f3832
--- /dev/null
+++ b/boost/boost/regex/v4/u32regex_iterator.hpp
@@ -0,0 +1,193 @@
+/*
+ *
+ * Copyright (c) 2003
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE u32regex_iterator.hpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: Provides u32regex_iterator implementation.
+ */
+
+#ifndef BOOST_REGEX_V4_U32REGEX_ITERATOR_HPP
+#define BOOST_REGEX_V4_U32REGEX_ITERATOR_HPP
+
+namespace boost{
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+template <class BidirectionalIterator>
+class u32regex_iterator_implementation
+{
+ typedef u32regex regex_type;
+
+ match_results<BidirectionalIterator> what; // current match
+ BidirectionalIterator base; // start of sequence
+ BidirectionalIterator end; // end of sequence
+ const regex_type re; // the expression
+ match_flag_type flags; // flags for matching
+
+public:
+ u32regex_iterator_implementation(const regex_type* p, BidirectionalIterator last, match_flag_type f)
+ : base(), end(last), re(*p), flags(f){}
+ bool init(BidirectionalIterator first)
+ {
+ base = first;
+ return u32regex_search(first, end, what, re, flags, base);
+ }
+ bool compare(const u32regex_iterator_implementation& that)
+ {
+ if(this == &that) return true;
+ return (&re.get_data() == &that.re.get_data()) && (end == that.end) && (flags == that.flags) && (what[0].first == that.what[0].first) && (what[0].second == that.what[0].second);
+ }
+ const match_results<BidirectionalIterator>& get()
+ { return what; }
+ bool next()
+ {
+ //if(what.prefix().first != what[0].second)
+ // flags |= match_prev_avail;
+ BidirectionalIterator next_start = what[0].second;
+ match_flag_type f(flags);
+ if(!what.length())
+ f |= regex_constants::match_not_initial_null;
+ //if(base != next_start)
+ // f |= regex_constants::match_not_bob;
+ bool result = u32regex_search(next_start, end, what, re, f, base);
+ if(result)
+ what.set_base(base);
+ return result;
+ }
+private:
+ u32regex_iterator_implementation& operator=(const u32regex_iterator_implementation&);
+};
+
+template <class BidirectionalIterator>
+class u32regex_iterator
+#ifndef BOOST_NO_STD_ITERATOR
+ : public std::iterator<
+ std::forward_iterator_tag,
+ match_results<BidirectionalIterator>,
+ typename re_detail::regex_iterator_traits<BidirectionalIterator>::difference_type,
+ const match_results<BidirectionalIterator>*,
+ const match_results<BidirectionalIterator>& >
+#endif
+{
+private:
+ typedef u32regex_iterator_implementation<BidirectionalIterator> impl;
+ typedef shared_ptr<impl> pimpl;
+public:
+ typedef u32regex regex_type;
+ typedef match_results<BidirectionalIterator> value_type;
+ typedef typename re_detail::regex_iterator_traits<BidirectionalIterator>::difference_type
+ difference_type;
+ typedef const value_type* pointer;
+ typedef const value_type& reference;
+ typedef std::forward_iterator_tag iterator_category;
+
+ u32regex_iterator(){}
+ u32regex_iterator(BidirectionalIterator a, BidirectionalIterator b,
+ const regex_type& re,
+ match_flag_type m = match_default)
+ : pdata(new impl(&re, b, m))
+ {
+ if(!pdata->init(a))
+ {
+ pdata.reset();
+ }
+ }
+ u32regex_iterator(const u32regex_iterator& that)
+ : pdata(that.pdata) {}
+ u32regex_iterator& operator=(const u32regex_iterator& that)
+ {
+ pdata = that.pdata;
+ return *this;
+ }
+ bool operator==(const u32regex_iterator& that)const
+ {
+ if((pdata.get() == 0) || (that.pdata.get() == 0))
+ return pdata.get() == that.pdata.get();
+ return pdata->compare(*(that.pdata.get()));
+ }
+ bool operator!=(const u32regex_iterator& that)const
+ { return !(*this == that); }
+ const value_type& operator*()const
+ { return pdata->get(); }
+ const value_type* operator->()const
+ { return &(pdata->get()); }
+ u32regex_iterator& operator++()
+ {
+ cow();
+ if(0 == pdata->next())
+ {
+ pdata.reset();
+ }
+ return *this;
+ }
+ u32regex_iterator operator++(int)
+ {
+ u32regex_iterator result(*this);
+ ++(*this);
+ return result;
+ }
+private:
+
+ pimpl pdata;
+
+ void cow()
+ {
+ // copy-on-write
+ if(pdata.get() && !pdata.unique())
+ {
+ pdata.reset(new impl(*(pdata.get())));
+ }
+ }
+};
+
+typedef u32regex_iterator<const char*> utf8regex_iterator;
+typedef u32regex_iterator<const UChar*> utf16regex_iterator;
+typedef u32regex_iterator<const UChar32*> utf32regex_iterator;
+
+inline u32regex_iterator<const char*> make_u32regex_iterator(const char* p, const u32regex& e, regex_constants::match_flag_type m = regex_constants::match_default)
+{
+ return u32regex_iterator<const char*>(p, p+std::strlen(p), e, m);
+}
+#ifndef BOOST_NO_WREGEX
+inline u32regex_iterator<const wchar_t*> make_u32regex_iterator(const wchar_t* p, const u32regex& e, regex_constants::match_flag_type m = regex_constants::match_default)
+{
+ return u32regex_iterator<const wchar_t*>(p, p+std::wcslen(p), e, m);
+}
+#endif
+#ifndef U_WCHAR_IS_UTF16
+inline u32regex_iterator<const UChar*> make_u32regex_iterator(const UChar* p, const u32regex& e, regex_constants::match_flag_type m = regex_constants::match_default)
+{
+ return u32regex_iterator<const UChar*>(p, p+u_strlen(p), e, m);
+}
+#endif
+template <class charT, class Traits, class Alloc>
+inline u32regex_iterator<typename std::basic_string<charT, Traits, Alloc>::const_iterator> make_u32regex_iterator(const std::basic_string<charT, Traits, Alloc>& p, const u32regex& e, regex_constants::match_flag_type m = regex_constants::match_default)
+{
+ typedef typename std::basic_string<charT, Traits, Alloc>::const_iterator iter_type;
+ return u32regex_iterator<iter_type>(p.begin(), p.end(), e, m);
+}
+inline u32regex_iterator<const UChar*> make_u32regex_iterator(const UnicodeString& s, const u32regex& e, regex_constants::match_flag_type m = regex_constants::match_default)
+{
+ return u32regex_iterator<const UChar*>(s.getBuffer(), s.getBuffer() + s.length(), e, m);
+}
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+} // namespace boost
+
+#endif // BOOST_REGEX_V4_REGEX_ITERATOR_HPP
+
diff --git a/boost/boost/regex/v4/u32regex_token_iterator.hpp b/boost/boost/regex/v4/u32regex_token_iterator.hpp
new file mode 100644
index 00000000000..a8d394e4e08
--- /dev/null
+++ b/boost/boost/regex/v4/u32regex_token_iterator.hpp
@@ -0,0 +1,377 @@
+/*
+ *
+ * Copyright (c) 2003
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE u32regex_token_iterator.hpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: Provides u32regex_token_iterator implementation.
+ */
+
+#ifndef BOOST_REGEX_V4_U32REGEX_TOKEN_ITERATOR_HPP
+#define BOOST_REGEX_V4_U32REGEX_TOKEN_ITERATOR_HPP
+
+#if (BOOST_WORKAROUND(__BORLANDC__, >= 0x560) && BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x570)))\
+ || BOOST_WORKAROUND(BOOST_MSVC, < 1300) \
+ || BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003))
+//
+// Borland C++ Builder 6, and Visual C++ 6,
+// can't cope with the array template constructor
+// so we have a template member that will accept any type as
+// argument, and then assert that is really is an array:
+//
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_array.hpp>
+#endif
+
+namespace boost{
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+#if BOOST_WORKAROUND(BOOST_MSVC, > 1300)
+# pragma warning(push)
+# pragma warning(disable:4700)
+#endif
+
+template <class BidirectionalIterator>
+class u32regex_token_iterator_implementation
+{
+ typedef u32regex regex_type;
+ typedef sub_match<BidirectionalIterator> value_type;
+
+ match_results<BidirectionalIterator> what; // current match
+ BidirectionalIterator end; // end of search area
+ BidirectionalIterator base; // start of search area
+ const regex_type re; // the expression
+ match_flag_type flags; // match flags
+ value_type result; // the current string result
+ int N; // the current sub-expression being enumerated
+ std::vector<int> subs; // the sub-expressions to enumerate
+
+public:
+ u32regex_token_iterator_implementation(const regex_type* p, BidirectionalIterator last, int sub, match_flag_type f)
+ : end(last), re(*p), flags(f){ subs.push_back(sub); }
+ u32regex_token_iterator_implementation(const regex_type* p, BidirectionalIterator last, const std::vector<int>& v, match_flag_type f)
+ : end(last), re(*p), flags(f), subs(v){}
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ // can't reliably get this to work....
+#elif (BOOST_WORKAROUND(__BORLANDC__, >= 0x560) && BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x570)))\
+ || BOOST_WORKAROUND(BOOST_MSVC, < 1300) \
+ || BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003)) \
+ || BOOST_WORKAROUND(__HP_aCC, < 60700)
+ template <class T>
+ u32regex_token_iterator_implementation(const regex_type* p, BidirectionalIterator last, const T& submatches, match_flag_type f)
+ : end(last), re(*p), flags(f)
+ {
+ // assert that T really is an array:
+ BOOST_STATIC_ASSERT(::boost::is_array<T>::value);
+ const std::size_t array_size = sizeof(T) / sizeof(submatches[0]);
+ for(std::size_t i = 0; i < array_size; ++i)
+ {
+ subs.push_back(submatches[i]);
+ }
+ }
+#else
+ template <std::size_t CN>
+ u32regex_token_iterator_implementation(const regex_type* p, BidirectionalIterator last, const int (&submatches)[CN], match_flag_type f)
+ : end(last), re(*p), flags(f)
+ {
+ for(std::size_t i = 0; i < CN; ++i)
+ {
+ subs.push_back(submatches[i]);
+ }
+ }
+#endif
+
+ bool init(BidirectionalIterator first)
+ {
+ base = first;
+ N = 0;
+ if(u32regex_search(first, end, what, re, flags, base) == true)
+ {
+ N = 0;
+ result = ((subs[N] == -1) ? what.prefix() : what[(int)subs[N]]);
+ return true;
+ }
+ else if((subs[N] == -1) && (first != end))
+ {
+ result.first = first;
+ result.second = end;
+ result.matched = (first != end);
+ N = -1;
+ return true;
+ }
+ return false;
+ }
+ bool compare(const u32regex_token_iterator_implementation& that)
+ {
+ if(this == &that) return true;
+ return (&re.get_data() == &that.re.get_data())
+ && (end == that.end)
+ && (flags == that.flags)
+ && (N == that.N)
+ && (what[0].first == that.what[0].first)
+ && (what[0].second == that.what[0].second);
+ }
+ const value_type& get()
+ { return result; }
+ bool next()
+ {
+ if(N == -1)
+ return false;
+ if(N+1 < (int)subs.size())
+ {
+ ++N;
+ result =((subs[N] == -1) ? what.prefix() : what[subs[N]]);
+ return true;
+ }
+ //if(what.prefix().first != what[0].second)
+ // flags |= match_prev_avail | regex_constants::match_not_bob;
+ BidirectionalIterator last_end(what[0].second);
+ if(u32regex_search(last_end, end, what, re, ((what[0].first == what[0].second) ? flags | regex_constants::match_not_initial_null : flags), base))
+ {
+ N =0;
+ result =((subs[N] == -1) ? what.prefix() : what[subs[N]]);
+ return true;
+ }
+ else if((last_end != end) && (subs[0] == -1))
+ {
+ N =-1;
+ result.first = last_end;
+ result.second = end;
+ result.matched = (last_end != end);
+ return true;
+ }
+ return false;
+ }
+private:
+ u32regex_token_iterator_implementation& operator=(const u32regex_token_iterator_implementation&);
+};
+
+template <class BidirectionalIterator>
+class u32regex_token_iterator
+#ifndef BOOST_NO_STD_ITERATOR
+ : public std::iterator<
+ std::forward_iterator_tag,
+ sub_match<BidirectionalIterator>,
+ typename re_detail::regex_iterator_traits<BidirectionalIterator>::difference_type,
+ const sub_match<BidirectionalIterator>*,
+ const sub_match<BidirectionalIterator>& >
+#endif
+{
+private:
+ typedef u32regex_token_iterator_implementation<BidirectionalIterator> impl;
+ typedef shared_ptr<impl> pimpl;
+public:
+ typedef u32regex regex_type;
+ typedef sub_match<BidirectionalIterator> value_type;
+ typedef typename re_detail::regex_iterator_traits<BidirectionalIterator>::difference_type
+ difference_type;
+ typedef const value_type* pointer;
+ typedef const value_type& reference;
+ typedef std::forward_iterator_tag iterator_category;
+
+ u32regex_token_iterator(){}
+ u32regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b, const regex_type& re,
+ int submatch = 0, match_flag_type m = match_default)
+ : pdata(new impl(&re, b, submatch, m))
+ {
+ if(!pdata->init(a))
+ pdata.reset();
+ }
+ u32regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b, const regex_type& re,
+ const std::vector<int>& submatches, match_flag_type m = match_default)
+ : pdata(new impl(&re, b, submatches, m))
+ {
+ if(!pdata->init(a))
+ pdata.reset();
+ }
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ // can't reliably get this to work....
+#elif (BOOST_WORKAROUND(__BORLANDC__, >= 0x560) && BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x570)))\
+ || BOOST_WORKAROUND(BOOST_MSVC, < 1300) \
+ || BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003)) \
+ || BOOST_WORKAROUND(__HP_aCC, < 60700)
+ template <class T>
+ u32regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b, const regex_type& re,
+ const T& submatches, match_flag_type m = match_default)
+ : pdata(new impl(&re, b, submatches, m))
+ {
+ if(!pdata->init(a))
+ pdata.reset();
+ }
+#else
+ template <std::size_t N>
+ u32regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b, const regex_type& re,
+ const int (&submatches)[N], match_flag_type m = match_default)
+ : pdata(new impl(&re, b, submatches, m))
+ {
+ if(!pdata->init(a))
+ pdata.reset();
+ }
+#endif
+ u32regex_token_iterator(const u32regex_token_iterator& that)
+ : pdata(that.pdata) {}
+ u32regex_token_iterator& operator=(const u32regex_token_iterator& that)
+ {
+ pdata = that.pdata;
+ return *this;
+ }
+ bool operator==(const u32regex_token_iterator& that)const
+ {
+ if((pdata.get() == 0) || (that.pdata.get() == 0))
+ return pdata.get() == that.pdata.get();
+ return pdata->compare(*(that.pdata.get()));
+ }
+ bool operator!=(const u32regex_token_iterator& that)const
+ { return !(*this == that); }
+ const value_type& operator*()const
+ { return pdata->get(); }
+ const value_type* operator->()const
+ { return &(pdata->get()); }
+ u32regex_token_iterator& operator++()
+ {
+ cow();
+ if(0 == pdata->next())
+ {
+ pdata.reset();
+ }
+ return *this;
+ }
+ u32regex_token_iterator operator++(int)
+ {
+ u32regex_token_iterator result(*this);
+ ++(*this);
+ return result;
+ }
+private:
+
+ pimpl pdata;
+
+ void cow()
+ {
+ // copy-on-write
+ if(pdata.get() && !pdata.unique())
+ {
+ pdata.reset(new impl(*(pdata.get())));
+ }
+ }
+};
+
+typedef u32regex_token_iterator<const char*> utf8regex_token_iterator;
+typedef u32regex_token_iterator<const UChar*> utf16regex_token_iterator;
+typedef u32regex_token_iterator<const UChar32*> utf32regex_token_iterator;
+
+// construction from an integral sub_match id:
+inline u32regex_token_iterator<const char*> make_u32regex_token_iterator(const char* p, const u32regex& e, int submatch = 0, regex_constants::match_flag_type m = regex_constants::match_default)
+{
+ return u32regex_token_iterator<const char*>(p, p+std::strlen(p), e, submatch, m);
+}
+#ifndef BOOST_NO_WREGEX
+inline u32regex_token_iterator<const wchar_t*> make_u32regex_token_iterator(const wchar_t* p, const u32regex& e, int submatch = 0, regex_constants::match_flag_type m = regex_constants::match_default)
+{
+ return u32regex_token_iterator<const wchar_t*>(p, p+std::wcslen(p), e, submatch, m);
+}
+#endif
+#ifndef U_WCHAR_IS_UTF16
+inline u32regex_token_iterator<const UChar*> make_u32regex_token_iterator(const UChar* p, const u32regex& e, int submatch = 0, regex_constants::match_flag_type m = regex_constants::match_default)
+{
+ return u32regex_token_iterator<const UChar*>(p, p+u_strlen(p), e, m);
+}
+#endif
+template <class charT, class Traits, class Alloc>
+inline u32regex_token_iterator<typename std::basic_string<charT, Traits, Alloc>::const_iterator> make_u32regex_token_iterator(const std::basic_string<charT, Traits, Alloc>& p, const u32regex& e, int submatch = 0, regex_constants::match_flag_type m = regex_constants::match_default)
+{
+ typedef typename std::basic_string<charT, Traits, Alloc>::const_iterator iter_type;
+ return u32regex_token_iterator<iter_type>(p.begin(), p.end(), e, m);
+}
+inline u32regex_token_iterator<const UChar*> make_u32regex_token_iterator(const UnicodeString& s, const u32regex& e, int submatch = 0, regex_constants::match_flag_type m = regex_constants::match_default)
+{
+ return u32regex_token_iterator<const UChar*>(s.getBuffer(), s.getBuffer() + s.length(), e, submatch, m);
+}
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+// construction from a reference to an array:
+template <std::size_t N>
+inline u32regex_token_iterator<const char*> make_u32regex_token_iterator(const char* p, const u32regex& e, const int (&submatch)[N], regex_constants::match_flag_type m = regex_constants::match_default)
+{
+ return u32regex_token_iterator<const char*>(p, p+std::strlen(p), e, submatch, m);
+}
+#ifndef BOOST_NO_WREGEX
+template <std::size_t N>
+inline u32regex_token_iterator<const wchar_t*> make_u32regex_token_iterator(const wchar_t* p, const u32regex& e, const int (&submatch)[N], regex_constants::match_flag_type m = regex_constants::match_default)
+{
+ return u32regex_token_iterator<const wchar_t*>(p, p+std::wcslen(p), e, submatch, m);
+}
+#endif
+#ifndef U_WCHAR_IS_UTF16
+template <std::size_t N>
+inline u32regex_token_iterator<const UChar*> make_u32regex_token_iterator(const UChar* p, const u32regex& e, const int (&submatch)[N], regex_constants::match_flag_type m = regex_constants::match_default)
+{
+ return u32regex_token_iterator<const UChar*>(p, p+u_strlen(p), e, m);
+}
+#endif
+template <class charT, class Traits, class Alloc, std::size_t N>
+inline u32regex_token_iterator<typename std::basic_string<charT, Traits, Alloc>::const_iterator> make_u32regex_token_iterator(const std::basic_string<charT, Traits, Alloc>& p, const u32regex& e, const int (&submatch)[N], regex_constants::match_flag_type m = regex_constants::match_default)
+{
+ typedef typename std::basic_string<charT, Traits, Alloc>::const_iterator iter_type;
+ return u32regex_token_iterator<iter_type>(p.begin(), p.end(), e, m);
+}
+template <std::size_t N>
+inline u32regex_token_iterator<const UChar*> make_u32regex_token_iterator(const UnicodeString& s, const u32regex& e, const int (&submatch)[N], regex_constants::match_flag_type m = regex_constants::match_default)
+{
+ return u32regex_token_iterator<const UChar*>(s.getBuffer(), s.getBuffer() + s.length(), e, submatch, m);
+}
+#endif // BOOST_MSVC < 1300
+
+// construction from a vector of sub_match id's:
+inline u32regex_token_iterator<const char*> make_u32regex_token_iterator(const char* p, const u32regex& e, const std::vector<int>& submatch, regex_constants::match_flag_type m = regex_constants::match_default)
+{
+ return u32regex_token_iterator<const char*>(p, p+std::strlen(p), e, submatch, m);
+}
+#ifndef BOOST_NO_WREGEX
+inline u32regex_token_iterator<const wchar_t*> make_u32regex_token_iterator(const wchar_t* p, const u32regex& e, const std::vector<int>& submatch, regex_constants::match_flag_type m = regex_constants::match_default)
+{
+ return u32regex_token_iterator<const wchar_t*>(p, p+std::wcslen(p), e, submatch, m);
+}
+#endif
+#ifndef U_WCHAR_IS_UTF16
+inline u32regex_token_iterator<const UChar*> make_u32regex_token_iterator(const UChar* p, const u32regex& e, const std::vector<int>& submatch, regex_constants::match_flag_type m = regex_constants::match_default)
+{
+ return u32regex_token_iterator<const UChar*>(p, p+u_strlen(p), e, m);
+}
+#endif
+template <class charT, class Traits, class Alloc>
+inline u32regex_token_iterator<typename std::basic_string<charT, Traits, Alloc>::const_iterator> make_u32regex_token_iterator(const std::basic_string<charT, Traits, Alloc>& p, const u32regex& e, const std::vector<int>& submatch, regex_constants::match_flag_type m = regex_constants::match_default)
+{
+ typedef typename std::basic_string<charT, Traits, Alloc>::const_iterator iter_type;
+ return u32regex_token_iterator<iter_type>(p.begin(), p.end(), e, m);
+}
+inline u32regex_token_iterator<const UChar*> make_u32regex_token_iterator(const UnicodeString& s, const u32regex& e, const std::vector<int>& submatch, regex_constants::match_flag_type m = regex_constants::match_default)
+{
+ return u32regex_token_iterator<const UChar*>(s.getBuffer(), s.getBuffer() + s.length(), e, submatch, m);
+}
+
+#if BOOST_WORKAROUND(BOOST_MSVC, == 1310)
+# pragma warning(pop)
+#endif
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+} // namespace boost
+
+#endif // BOOST_REGEX_V4_REGEX_TOKEN_ITERATOR_HPP
+
+
+
+
diff --git a/boost/boost/regex/v4/w32_regex_traits.hpp b/boost/boost/regex/v4/w32_regex_traits.hpp
new file mode 100644
index 00000000000..8a85d6837b3
--- /dev/null
+++ b/boost/boost/regex/v4/w32_regex_traits.hpp
@@ -0,0 +1,716 @@
+/*
+ *
+ * Copyright (c) 2004
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org for most recent version.
+ * FILE w32_regex_traits.hpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: Declares regular expression traits class w32_regex_traits.
+ */
+
+#ifndef BOOST_W32_REGEX_TRAITS_HPP_INCLUDED
+#define BOOST_W32_REGEX_TRAITS_HPP_INCLUDED
+
+#ifndef BOOST_RE_PAT_EXCEPT_HPP
+#include <boost/regex/pattern_except.hpp>
+#endif
+#ifndef BOOST_REGEX_TRAITS_DEFAULTS_HPP_INCLUDED
+#include <boost/regex/v4/regex_traits_defaults.hpp>
+#endif
+#ifdef BOOST_HAS_THREADS
+#include <boost/regex/pending/static_mutex.hpp>
+#endif
+#ifndef BOOST_REGEX_PRIMARY_TRANSFORM
+#include <boost/regex/v4/primary_transform.hpp>
+#endif
+#ifndef BOOST_REGEX_OBJECT_CACHE_HPP
+#include <boost/regex/pending/object_cache.hpp>
+#endif
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable:4786)
+#endif
+
+namespace boost{
+
+//
+// forward declaration is needed by some compilers:
+//
+template <class charT>
+class w32_regex_traits;
+
+namespace re_detail{
+
+//
+// start by typedeffing the types we'll need:
+//
+typedef ::boost::uint32_t lcid_type; // placeholder for LCID.
+typedef ::boost::shared_ptr<void> cat_type; // placeholder for dll HANDLE.
+
+//
+// then add wrappers around the actual Win32 API's (ie implementation hiding):
+//
+BOOST_REGEX_DECL lcid_type BOOST_REGEX_CALL w32_get_default_locale();
+BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is_lower(char, lcid_type);
+#ifndef BOOST_NO_WREGEX
+BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is_lower(wchar_t, lcid_type);
+#ifdef BOOST_REGEX_HAS_OTHER_WCHAR_T
+BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is_lower(unsigned short ca, lcid_type id);
+#endif
+#endif
+BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is_upper(char, lcid_type);
+#ifndef BOOST_NO_WREGEX
+BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is_upper(wchar_t, lcid_type);
+#ifdef BOOST_REGEX_HAS_OTHER_WCHAR_T
+BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is_upper(unsigned short ca, lcid_type id);
+#endif
+#endif
+BOOST_REGEX_DECL cat_type BOOST_REGEX_CALL w32_cat_open(const std::string& name);
+BOOST_REGEX_DECL std::string BOOST_REGEX_CALL w32_cat_get(const cat_type& cat, lcid_type id, int i, const std::string& def);
+#ifndef BOOST_NO_WREGEX
+BOOST_REGEX_DECL std::wstring BOOST_REGEX_CALL w32_cat_get(const cat_type& cat, lcid_type id, int i, const std::wstring& def);
+#ifdef BOOST_REGEX_HAS_OTHER_WCHAR_T
+BOOST_REGEX_DECL std::basic_string<unsigned short> BOOST_REGEX_CALL w32_cat_get(const cat_type& cat, lcid_type, int i, const std::basic_string<unsigned short>& def);
+#endif
+#endif
+BOOST_REGEX_DECL std::string BOOST_REGEX_CALL w32_transform(lcid_type id, const char* p1, const char* p2);
+#ifndef BOOST_NO_WREGEX
+BOOST_REGEX_DECL std::wstring BOOST_REGEX_CALL w32_transform(lcid_type id, const wchar_t* p1, const wchar_t* p2);
+#ifdef BOOST_REGEX_HAS_OTHER_WCHAR_T
+BOOST_REGEX_DECL std::basic_string<unsigned short> BOOST_REGEX_CALL w32_transform(lcid_type id, const unsigned short* p1, const unsigned short* p2);
+#endif
+#endif
+BOOST_REGEX_DECL char BOOST_REGEX_CALL w32_tolower(char c, lcid_type);
+#ifndef BOOST_NO_WREGEX
+BOOST_REGEX_DECL wchar_t BOOST_REGEX_CALL w32_tolower(wchar_t c, lcid_type);
+#ifdef BOOST_REGEX_HAS_OTHER_WCHAR_T
+BOOST_REGEX_DECL unsigned short BOOST_REGEX_CALL w32_tolower(unsigned short c, lcid_type id);
+#endif
+#endif
+BOOST_REGEX_DECL char BOOST_REGEX_CALL w32_toupper(char c, lcid_type);
+#ifndef BOOST_NO_WREGEX
+BOOST_REGEX_DECL wchar_t BOOST_REGEX_CALL w32_toupper(wchar_t c, lcid_type);
+#endif
+BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is(lcid_type, boost::uint32_t mask, char c);
+#ifndef BOOST_NO_WREGEX
+BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is(lcid_type, boost::uint32_t mask, wchar_t c);
+#ifdef BOOST_REGEX_HAS_OTHER_WCHAR_T
+BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is(lcid_type id, boost::uint32_t m, unsigned short c);
+#endif
+#endif
+//
+// class w32_regex_traits_base:
+// acts as a container for locale and the facets we are using.
+//
+template <class charT>
+struct w32_regex_traits_base
+{
+ w32_regex_traits_base(lcid_type l)
+ { imbue(l); }
+ lcid_type imbue(lcid_type l);
+
+ lcid_type m_locale;
+};
+
+template <class charT>
+inline lcid_type w32_regex_traits_base<charT>::imbue(lcid_type l)
+{
+ lcid_type result(m_locale);
+ m_locale = l;
+ return result;
+}
+
+//
+// class w32_regex_traits_char_layer:
+// implements methods that require specialisation for narrow characters:
+//
+template <class charT>
+class w32_regex_traits_char_layer : public w32_regex_traits_base<charT>
+{
+ typedef std::basic_string<charT> string_type;
+ typedef std::map<charT, regex_constants::syntax_type> map_type;
+ typedef typename map_type::const_iterator map_iterator_type;
+public:
+ w32_regex_traits_char_layer(const lcid_type l);
+
+ regex_constants::syntax_type syntax_type(charT c)const
+ {
+ map_iterator_type i = m_char_map.find(c);
+ return ((i == m_char_map.end()) ? 0 : i->second);
+ }
+ regex_constants::escape_syntax_type escape_syntax_type(charT c) const
+ {
+ map_iterator_type i = m_char_map.find(c);
+ if(i == m_char_map.end())
+ {
+ if(::boost::re_detail::w32_is_lower(c, this->m_locale)) return regex_constants::escape_type_class;
+ if(::boost::re_detail::w32_is_upper(c, this->m_locale)) return regex_constants::escape_type_not_class;
+ return 0;
+ }
+ return i->second;
+ }
+ charT tolower(charT c)const
+ {
+ return ::boost::re_detail::w32_tolower(c, this->m_locale);
+ }
+ bool isctype(boost::uint32_t mask, charT c)const
+ {
+ return ::boost::re_detail::w32_is(this->m_locale, mask, c);
+ }
+
+private:
+ string_type get_default_message(regex_constants::syntax_type);
+ // TODO: use a hash table when available!
+ map_type m_char_map;
+};
+
+template <class charT>
+w32_regex_traits_char_layer<charT>::w32_regex_traits_char_layer(::boost::re_detail::lcid_type l)
+ : w32_regex_traits_base<charT>(l)
+{
+ // we need to start by initialising our syntax map so we know which
+ // character is used for which purpose:
+ cat_type cat;
+ std::string cat_name(w32_regex_traits<charT>::get_catalog_name());
+ if(cat_name.size())
+ {
+ cat = ::boost::re_detail::w32_cat_open(cat_name);
+ if(!cat)
+ {
+ std::string m("Unable to open message catalog: ");
+ std::runtime_error err(m + cat_name);
+ boost::re_detail::raise_runtime_error(err);
+ }
+ }
+ //
+ // if we have a valid catalog then load our messages:
+ //
+ if(cat)
+ {
+ for(regex_constants::syntax_type i = 1; i < regex_constants::syntax_max; ++i)
+ {
+ string_type mss = ::boost::re_detail::w32_cat_get(cat, this->m_locale, i, get_default_message(i));
+ for(typename string_type::size_type j = 0; j < mss.size(); ++j)
+ {
+ this->m_char_map[mss[j]] = i;
+ }
+ }
+ }
+ else
+ {
+ for(regex_constants::syntax_type i = 1; i < regex_constants::syntax_max; ++i)
+ {
+ const char* ptr = get_default_syntax(i);
+ while(ptr && *ptr)
+ {
+ this->m_char_map[static_cast<charT>(*ptr)] = i;
+ ++ptr;
+ }
+ }
+ }
+}
+
+template <class charT>
+typename w32_regex_traits_char_layer<charT>::string_type
+ w32_regex_traits_char_layer<charT>::get_default_message(regex_constants::syntax_type i)
+{
+ const char* ptr = get_default_syntax(i);
+ string_type result;
+ while(ptr && *ptr)
+ {
+ result.append(1, static_cast<charT>(*ptr));
+ ++ptr;
+ }
+ return result;
+}
+
+//
+// specialised version for narrow characters:
+//
+template <>
+class BOOST_REGEX_DECL w32_regex_traits_char_layer<char> : public w32_regex_traits_base<char>
+{
+ typedef std::string string_type;
+public:
+ w32_regex_traits_char_layer(::boost::re_detail::lcid_type l)
+ : w32_regex_traits_base<char>(l)
+ {
+ init();
+ }
+
+ regex_constants::syntax_type syntax_type(char c)const
+ {
+ return m_char_map[static_cast<unsigned char>(c)];
+ }
+ regex_constants::escape_syntax_type escape_syntax_type(char c) const
+ {
+ return m_char_map[static_cast<unsigned char>(c)];
+ }
+ char tolower(char c)const
+ {
+ return m_lower_map[static_cast<unsigned char>(c)];
+ }
+ bool isctype(boost::uint32_t mask, char c)const
+ {
+ return m_type_map[static_cast<unsigned char>(c)] & mask;
+ }
+
+private:
+ regex_constants::syntax_type m_char_map[1u << CHAR_BIT];
+ char m_lower_map[1u << CHAR_BIT];
+ boost::uint16_t m_type_map[1u << CHAR_BIT];
+ void init();
+};
+
+//
+// class w32_regex_traits_implementation:
+// provides pimpl implementation for w32_regex_traits.
+//
+template <class charT>
+class w32_regex_traits_implementation : public w32_regex_traits_char_layer<charT>
+{
+public:
+ typedef typename w32_regex_traits<charT>::char_class_type char_class_type;
+ BOOST_STATIC_CONSTANT(char_class_type, mask_word = 0x0400); // must be C1_DEFINED << 1
+ BOOST_STATIC_CONSTANT(char_class_type, mask_unicode = 0x0800); // must be C1_DEFINED << 2
+ BOOST_STATIC_CONSTANT(char_class_type, mask_base = 0x3ff); // all the masks used by the CT_CTYPE1 group
+
+ typedef std::basic_string<charT> string_type;
+ typedef charT char_type;
+ w32_regex_traits_implementation(::boost::re_detail::lcid_type l);
+ std::string error_string(regex_constants::error_type n) const
+ {
+ if(!m_error_strings.empty())
+ {
+ std::map<int, std::string>::const_iterator p = m_error_strings.find(n);
+ return (p == m_error_strings.end()) ? std::string(get_default_error_string(n)) : p->second;
+ }
+ return get_default_error_string(n);
+ }
+ char_class_type lookup_classname(const charT* p1, const charT* p2) const
+ {
+ char_class_type result = lookup_classname_imp(p1, p2);
+ if(result == 0)
+ {
+ typedef typename string_type::size_type size_type;
+ string_type temp(p1, p2);
+ for(size_type i = 0; i < temp.size(); ++i)
+ temp[i] = this->tolower(temp[i]);
+ result = lookup_classname_imp(&*temp.begin(), &*temp.begin() + temp.size());
+ }
+ return result;
+ }
+ string_type lookup_collatename(const charT* p1, const charT* p2) const;
+ string_type transform_primary(const charT* p1, const charT* p2) const;
+ string_type transform(const charT* p1, const charT* p2) const
+ {
+ return ::boost::re_detail::w32_transform(this->m_locale, p1, p2);
+ }
+private:
+ std::map<int, std::string> m_error_strings; // error messages indexed by numberic ID
+ std::map<string_type, char_class_type> m_custom_class_names; // character class names
+ std::map<string_type, string_type> m_custom_collate_names; // collating element names
+ unsigned m_collate_type; // the form of the collation string
+ charT m_collate_delim; // the collation group delimiter
+ //
+ // helpers:
+ //
+ char_class_type lookup_classname_imp(const charT* p1, const charT* p2) const;
+};
+
+template <class charT>
+typename w32_regex_traits_implementation<charT>::string_type
+ w32_regex_traits_implementation<charT>::transform_primary(const charT* p1, const charT* p2) const
+{
+ string_type result;
+ //
+ // What we do here depends upon the format of the sort key returned by
+ // sort key returned by this->transform:
+ //
+ switch(m_collate_type)
+ {
+ case sort_C:
+ case sort_unknown:
+ // the best we can do is translate to lower case, then get a regular sort key:
+ {
+ result.assign(p1, p2);
+ typedef typename string_type::size_type size_type;
+ for(size_type i = 0; i < result.size(); ++i)
+ result[i] = this->tolower(result[i]);
+ result = this->transform(&*result.begin(), &*result.begin() + result.size());
+ break;
+ }
+ case sort_fixed:
+ {
+ // get a regular sort key, and then truncate it:
+ result.assign(this->transform(p1, p2));
+ result.erase(this->m_collate_delim);
+ break;
+ }
+ case sort_delim:
+ // get a regular sort key, and then truncate everything after the delim:
+ result.assign(this->transform(p1, p2));
+ std::size_t i;
+ for(i = 0; i < result.size(); ++i)
+ {
+ if(result[i] == m_collate_delim)
+ break;
+ }
+ result.erase(i);
+ break;
+ }
+ if(result.empty())
+ result = string_type(1, charT(0));
+ return result;
+}
+
+template <class charT>
+typename w32_regex_traits_implementation<charT>::string_type
+ w32_regex_traits_implementation<charT>::lookup_collatename(const charT* p1, const charT* p2) const
+{
+ typedef typename std::map<string_type, string_type>::const_iterator iter_type;
+ if(m_custom_collate_names.size())
+ {
+ iter_type pos = m_custom_collate_names.find(string_type(p1, p2));
+ if(pos != m_custom_collate_names.end())
+ return pos->second;
+ }
+#if !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS)\
+ && !BOOST_WORKAROUND(BOOST_MSVC, < 1300)\
+ && !BOOST_WORKAROUND(__BORLANDC__, <= 0x0551)
+ std::string name(p1, p2);
+#else
+ std::string name;
+ const charT* p0 = p1;
+ while(p0 != p2)
+ name.append(1, char(*p0++));
+#endif
+ name = lookup_default_collate_name(name);
+#if !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS)\
+ && !BOOST_WORKAROUND(BOOST_MSVC, < 1300)\
+ && !BOOST_WORKAROUND(__BORLANDC__, <= 0x0551)
+ if(name.size())
+ return string_type(name.begin(), name.end());
+#else
+ if(name.size())
+ {
+ string_type result;
+ typedef std::string::const_iterator iter;
+ iter b = name.begin();
+ iter e = name.end();
+ while(b != e)
+ result.append(1, charT(*b++));
+ return result;
+ }
+#endif
+ if(p2 - p1 == 1)
+ return string_type(1, *p1);
+ return string_type();
+}
+
+template <class charT>
+w32_regex_traits_implementation<charT>::w32_regex_traits_implementation(::boost::re_detail::lcid_type l)
+: w32_regex_traits_char_layer<charT>(l)
+{
+ cat_type cat;
+ std::string cat_name(w32_regex_traits<charT>::get_catalog_name());
+ if(cat_name.size())
+ {
+ cat = ::boost::re_detail::w32_cat_open(cat_name);
+ if(!cat)
+ {
+ std::string m("Unable to open message catalog: ");
+ std::runtime_error err(m + cat_name);
+ boost::re_detail::raise_runtime_error(err);
+ }
+ }
+ //
+ // if we have a valid catalog then load our messages:
+ //
+ if(cat)
+ {
+ //
+ // Error messages:
+ //
+ for(boost::regex_constants::error_type i = static_cast<boost::regex_constants::error_type>(0);
+ i <= boost::regex_constants::error_unknown;
+ i = static_cast<boost::regex_constants::error_type>(i + 1))
+ {
+ const char* p = get_default_error_string(i);
+ string_type default_message;
+ while(*p)
+ {
+ default_message.append(1, static_cast<charT>(*p));
+ ++p;
+ }
+ string_type s = ::boost::re_detail::w32_cat_get(cat, this->m_locale, i+200, default_message);
+ std::string result;
+ for(std::string::size_type j = 0; j < s.size(); ++j)
+ {
+ result.append(1, static_cast<char>(s[j]));
+ }
+ m_error_strings[i] = result;
+ }
+ //
+ // Custom class names:
+ //
+ static const char_class_type masks[14] =
+ {
+ 0x0104u, // C1_ALPHA | C1_DIGIT
+ 0x0100u, // C1_ALPHA
+ 0x0020u, // C1_CNTRL
+ 0x0004u, // C1_DIGIT
+ (~(0x0020u|0x0008u) & 0x01ffu) | 0x0400u, // not C1_CNTRL or C1_SPACE
+ 0x0002u, // C1_LOWER
+ (~0x0020u & 0x01ffu) | 0x0400, // not C1_CNTRL
+ 0x0010u, // C1_PUNCT
+ 0x0008u, // C1_SPACE
+ 0x0001u, // C1_UPPER
+ 0x0080u, // C1_XDIGIT
+ 0x0040u, // C1_BLANK
+ w32_regex_traits_implementation<charT>::mask_word,
+ w32_regex_traits_implementation<charT>::mask_unicode,
+ };
+ static const string_type null_string;
+ for(unsigned int j = 0; j <= 13; ++j)
+ {
+ string_type s(::boost::re_detail::w32_cat_get(cat, this->m_locale, j+300, null_string));
+ if(s.size())
+ this->m_custom_class_names[s] = masks[j];
+ }
+ }
+ //
+ // get the collation format used by m_pcollate:
+ //
+ m_collate_type = re_detail::find_sort_syntax(this, &m_collate_delim);
+}
+
+template <class charT>
+typename w32_regex_traits_implementation<charT>::char_class_type
+ w32_regex_traits_implementation<charT>::lookup_classname_imp(const charT* p1, const charT* p2) const
+{
+ static const char_class_type masks[20] =
+ {
+ 0,
+ 0x0104u, // C1_ALPHA | C1_DIGIT
+ 0x0100u, // C1_ALPHA
+ 0x0040u, // C1_BLANK
+ 0x0020u, // C1_CNTRL
+ 0x0004u, // C1_DIGIT
+ 0x0004u, // C1_DIGIT
+ (~(0x0020u|0x0008u|0x0040) & 0x01ffu) | 0x0400u, // not C1_CNTRL or C1_SPACE or C1_BLANK
+ 0x0002u, // C1_LOWER
+ 0x0002u, // C1_LOWER
+ (~0x0020u & 0x01ffu) | 0x0400, // not C1_CNTRL
+ 0x0010u, // C1_PUNCT
+ 0x0008u, // C1_SPACE
+ 0x0008u, // C1_SPACE
+ 0x0001u, // C1_UPPER
+ w32_regex_traits_implementation<charT>::mask_unicode,
+ 0x0001u, // C1_UPPER
+ 0x0104u | w32_regex_traits_implementation<charT>::mask_word,
+ 0x0104u | w32_regex_traits_implementation<charT>::mask_word,
+ 0x0080u, // C1_XDIGIT
+ };
+ if(m_custom_class_names.size())
+ {
+ typedef typename std::map<std::basic_string<charT>, char_class_type>::const_iterator map_iter;
+ map_iter pos = m_custom_class_names.find(string_type(p1, p2));
+ if(pos != m_custom_class_names.end())
+ return pos->second;
+ }
+ std::size_t id = 1 + re_detail::get_default_class_id(p1, p2);
+ if(id < sizeof(masks) / sizeof(masks[0]))
+ return masks[id];
+ return masks[0];
+}
+
+
+template <class charT>
+boost::shared_ptr<const w32_regex_traits_implementation<charT> > create_w32_regex_traits(::boost::re_detail::lcid_type l BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(charT))
+{
+ // TODO: create a cache for previously constructed objects.
+ return boost::object_cache< ::boost::re_detail::lcid_type, w32_regex_traits_implementation<charT> >::get(l, 5);
+}
+
+} // re_detail
+
+template <class charT>
+class w32_regex_traits
+{
+public:
+ typedef charT char_type;
+ typedef std::size_t size_type;
+ typedef std::basic_string<char_type> string_type;
+ typedef ::boost::re_detail::lcid_type locale_type;
+ typedef boost::uint_least32_t char_class_type;
+
+ struct boost_extensions_tag{};
+
+ w32_regex_traits()
+ : m_pimpl(re_detail::create_w32_regex_traits<charT>(::boost::re_detail::w32_get_default_locale()))
+ { }
+ static size_type length(const char_type* p)
+ {
+ return std::char_traits<charT>::length(p);
+ }
+ regex_constants::syntax_type syntax_type(charT c)const
+ {
+ return m_pimpl->syntax_type(c);
+ }
+ regex_constants::escape_syntax_type escape_syntax_type(charT c) const
+ {
+ return m_pimpl->escape_syntax_type(c);
+ }
+ charT translate(charT c) const
+ {
+ return c;
+ }
+ charT translate_nocase(charT c) const
+ {
+ return this->m_pimpl->tolower(c);
+ }
+ charT translate(charT c, bool icase) const
+ {
+ return icase ? this->m_pimpl->tolower(c) : c;
+ }
+ charT tolower(charT c) const
+ {
+ return this->m_pimpl->tolower(c);
+ }
+ charT toupper(charT c) const
+ {
+ return ::boost::re_detail::w32_toupper(c, this->m_pimpl->m_locale);
+ }
+ string_type transform(const charT* p1, const charT* p2) const
+ {
+ return ::boost::re_detail::w32_transform(this->m_pimpl->m_locale, p1, p2);
+ }
+ string_type transform_primary(const charT* p1, const charT* p2) const
+ {
+ return m_pimpl->transform_primary(p1, p2);
+ }
+ char_class_type lookup_classname(const charT* p1, const charT* p2) const
+ {
+ return m_pimpl->lookup_classname(p1, p2);
+ }
+ string_type lookup_collatename(const charT* p1, const charT* p2) const
+ {
+ return m_pimpl->lookup_collatename(p1, p2);
+ }
+ bool isctype(charT c, char_class_type f) const
+ {
+ if((f & re_detail::w32_regex_traits_implementation<charT>::mask_base)
+ && (this->m_pimpl->isctype(f & re_detail::w32_regex_traits_implementation<charT>::mask_base, c)))
+ return true;
+ else if((f & re_detail::w32_regex_traits_implementation<charT>::mask_unicode) && re_detail::is_extended(c))
+ return true;
+ else if((f & re_detail::w32_regex_traits_implementation<charT>::mask_word) && (c == '_'))
+ return true;
+ return false;
+ }
+ int toi(const charT*& p1, const charT* p2, int radix)const
+ {
+ return ::boost::re_detail::global_toi(p1, p2, radix, *this);
+ }
+ int value(charT c, int radix)const
+ {
+ int result = ::boost::re_detail::global_value(c);
+ return result < radix ? result : -1;
+ }
+ locale_type imbue(locale_type l)
+ {
+ ::boost::re_detail::lcid_type result(getloc());
+ m_pimpl = re_detail::create_w32_regex_traits<charT>(l);
+ return result;
+ }
+ locale_type getloc()const
+ {
+ return m_pimpl->m_locale;
+ }
+ std::string error_string(regex_constants::error_type n) const
+ {
+ return m_pimpl->error_string(n);
+ }
+
+ //
+ // extension:
+ // set the name of the message catalog in use (defaults to "boost_regex").
+ //
+ static std::string catalog_name(const std::string& name);
+ static std::string get_catalog_name();
+
+private:
+ boost::shared_ptr<const re_detail::w32_regex_traits_implementation<charT> > m_pimpl;
+ //
+ // catalog name handler:
+ //
+ static std::string& get_catalog_name_inst();
+
+#ifdef BOOST_HAS_THREADS
+ static static_mutex& get_mutex_inst();
+#endif
+};
+
+template <class charT>
+std::string w32_regex_traits<charT>::catalog_name(const std::string& name)
+{
+#ifdef BOOST_HAS_THREADS
+ static_mutex::scoped_lock lk(get_mutex_inst());
+#endif
+ std::string result(get_catalog_name_inst());
+ get_catalog_name_inst() = name;
+ return result;
+}
+
+template <class charT>
+std::string& w32_regex_traits<charT>::get_catalog_name_inst()
+{
+ static std::string s_name;
+ return s_name;
+}
+
+template <class charT>
+std::string w32_regex_traits<charT>::get_catalog_name()
+{
+#ifdef BOOST_HAS_THREADS
+ static_mutex::scoped_lock lk(get_mutex_inst());
+#endif
+ std::string result(get_catalog_name_inst());
+ return result;
+}
+
+#ifdef BOOST_HAS_THREADS
+template <class charT>
+static_mutex& w32_regex_traits<charT>::get_mutex_inst()
+{
+ static static_mutex s_mutex = BOOST_STATIC_MUTEX_INIT;
+ return s_mutex;
+}
+#endif
+
+
+} // boost
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif
diff --git a/boost/boost/regex_fwd.hpp b/boost/boost/regex_fwd.hpp
new file mode 100644
index 00000000000..2ee4a2495fe
--- /dev/null
+++ b/boost/boost/regex_fwd.hpp
@@ -0,0 +1,33 @@
+/*
+ *
+ * Copyright (c) 1998-2002
+ * John Maddock
+ *
+ * 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)
+ *
+ */
+
+ /*
+ * LOCATION: see http://www.boost.org/libs/regex for documentation.
+ * FILE regex_fwd.cpp
+ * VERSION see <boost/version.hpp>
+ * DESCRIPTION: Forward declares boost::basic_regex<> and
+ * associated typedefs.
+ */
+
+#ifndef BOOST_REGEX_FWD_HPP
+#define BOOST_REGEX_FWD_HPP
+
+#ifndef BOOST_REGEX_CONFIG_HPP
+#include <boost/regex/config.hpp>
+#endif
+
+#include <boost/regex/v4/regex_fwd.hpp>
+
+#endif
+
+
+
+
diff --git a/boost/boost/scoped_array.hpp b/boost/boost/scoped_array.hpp
new file mode 100644
index 00000000000..667dfffcb6d
--- /dev/null
+++ b/boost/boost/scoped_array.hpp
@@ -0,0 +1,135 @@
+#ifndef BOOST_SCOPED_ARRAY_HPP_INCLUDED
+#define BOOST_SCOPED_ARRAY_HPP_INCLUDED
+
+// (C) Copyright Greg Colvin and Beman Dawes 1998, 1999.
+// Copyright (c) 2001, 2002 Peter Dimov
+//
+// 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)
+//
+// http://www.boost.org/libs/smart_ptr/scoped_array.htm
+//
+
+#include <boost/assert.hpp>
+#include <boost/checked_delete.hpp>
+#include <boost/config.hpp> // in case ptrdiff_t not in std
+
+#include <boost/detail/workaround.hpp>
+
+#include <cstddef> // for std::ptrdiff_t
+
+namespace boost
+{
+
+// Debug hooks
+
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+
+void sp_array_constructor_hook(void * p);
+void sp_array_destructor_hook(void * p);
+
+#endif
+
+// scoped_array extends scoped_ptr to arrays. Deletion of the array pointed to
+// is guaranteed, either on destruction of the scoped_array or via an explicit
+// reset(). Use shared_array or std::vector if your needs are more complex.
+
+template<class T> class scoped_array // noncopyable
+{
+private:
+
+ T * ptr;
+
+ scoped_array(scoped_array const &);
+ scoped_array & operator=(scoped_array const &);
+
+ typedef scoped_array<T> this_type;
+
+public:
+
+ typedef T element_type;
+
+ explicit scoped_array(T * p = 0) : ptr(p) // never throws
+ {
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+ boost::sp_array_constructor_hook(ptr);
+#endif
+ }
+
+ ~scoped_array() // never throws
+ {
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+ boost::sp_array_destructor_hook(ptr);
+#endif
+ boost::checked_array_delete(ptr);
+ }
+
+ void reset(T * p = 0) // never throws
+ {
+ BOOST_ASSERT(p == 0 || p != ptr); // catch self-reset errors
+ this_type(p).swap(*this);
+ }
+
+ T & operator[](std::ptrdiff_t i) const // never throws
+ {
+ BOOST_ASSERT(ptr != 0);
+ BOOST_ASSERT(i >= 0);
+ return ptr[i];
+ }
+
+ T * get() const // never throws
+ {
+ return ptr;
+ }
+
+ // implicit conversion to "bool"
+
+#if defined(__SUNPRO_CC) && BOOST_WORKAROUND(__SUNPRO_CC, <= 0x530)
+
+ operator bool () const
+ {
+ return ptr != 0;
+ }
+
+#elif defined(__MWERKS__) && BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003))
+ typedef T * (this_type::*unspecified_bool_type)() const;
+
+ operator unspecified_bool_type() const // never throws
+ {
+ return ptr == 0? 0: &this_type::get;
+ }
+
+#else
+
+ typedef T * this_type::*unspecified_bool_type;
+
+ operator unspecified_bool_type() const // never throws
+ {
+ return ptr == 0? 0: &this_type::ptr;
+ }
+
+#endif
+
+ bool operator! () const // never throws
+ {
+ return ptr == 0;
+ }
+
+ void swap(scoped_array & b) // never throws
+ {
+ T * tmp = b.ptr;
+ b.ptr = ptr;
+ ptr = tmp;
+ }
+
+};
+
+template<class T> inline void swap(scoped_array<T> & a, scoped_array<T> & b) // never throws
+{
+ a.swap(b);
+}
+
+} // namespace boost
+
+#endif // #ifndef BOOST_SCOPED_ARRAY_HPP_INCLUDED
diff --git a/boost/boost/scoped_ptr.hpp b/boost/boost/scoped_ptr.hpp
new file mode 100644
index 00000000000..651deed6906
--- /dev/null
+++ b/boost/boost/scoped_ptr.hpp
@@ -0,0 +1,157 @@
+#ifndef BOOST_SCOPED_PTR_HPP_INCLUDED
+#define BOOST_SCOPED_PTR_HPP_INCLUDED
+
+// (C) Copyright Greg Colvin and Beman Dawes 1998, 1999.
+// Copyright (c) 2001, 2002 Peter Dimov
+//
+// 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)
+//
+// http://www.boost.org/libs/smart_ptr/scoped_ptr.htm
+//
+
+#include <boost/assert.hpp>
+#include <boost/checked_delete.hpp>
+#include <boost/detail/workaround.hpp>
+
+#ifndef BOOST_NO_AUTO_PTR
+# include <memory> // for std::auto_ptr
+#endif
+
+namespace boost
+{
+
+// Debug hooks
+
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+
+void sp_scalar_constructor_hook(void * p);
+void sp_scalar_destructor_hook(void * p);
+
+#endif
+
+// scoped_ptr mimics a built-in pointer except that it guarantees deletion
+// of the object pointed to, either on destruction of the scoped_ptr or via
+// an explicit reset(). scoped_ptr is a simple solution for simple needs;
+// use shared_ptr or std::auto_ptr if your needs are more complex.
+
+template<class T> class scoped_ptr // noncopyable
+{
+private:
+
+ T * ptr;
+
+ scoped_ptr(scoped_ptr const &);
+ scoped_ptr & operator=(scoped_ptr const &);
+
+ typedef scoped_ptr<T> this_type;
+
+public:
+
+ typedef T element_type;
+
+ explicit scoped_ptr(T * p = 0): ptr(p) // never throws
+ {
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+ boost::sp_scalar_constructor_hook(ptr);
+#endif
+ }
+
+#ifndef BOOST_NO_AUTO_PTR
+
+ explicit scoped_ptr(std::auto_ptr<T> p): ptr(p.release()) // never throws
+ {
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+ boost::sp_scalar_constructor_hook(ptr);
+#endif
+ }
+
+#endif
+
+ ~scoped_ptr() // never throws
+ {
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+ boost::sp_scalar_destructor_hook(ptr);
+#endif
+ boost::checked_delete(ptr);
+ }
+
+ void reset(T * p = 0) // never throws
+ {
+ BOOST_ASSERT(p == 0 || p != ptr); // catch self-reset errors
+ this_type(p).swap(*this);
+ }
+
+ T & operator*() const // never throws
+ {
+ BOOST_ASSERT(ptr != 0);
+ return *ptr;
+ }
+
+ T * operator->() const // never throws
+ {
+ BOOST_ASSERT(ptr != 0);
+ return ptr;
+ }
+
+ T * get() const // never throws
+ {
+ return ptr;
+ }
+
+ // implicit conversion to "bool"
+
+#if defined(__SUNPRO_CC) && BOOST_WORKAROUND(__SUNPRO_CC, <= 0x530)
+
+ operator bool () const
+ {
+ return ptr != 0;
+ }
+
+#elif defined(__MWERKS__) && BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003))
+ typedef T * (this_type::*unspecified_bool_type)() const;
+
+ operator unspecified_bool_type() const // never throws
+ {
+ return ptr == 0? 0: &this_type::get;
+ }
+
+#else
+ typedef T * this_type::*unspecified_bool_type;
+
+ operator unspecified_bool_type() const // never throws
+ {
+ return ptr == 0? 0: &this_type::ptr;
+ }
+
+#endif
+
+ bool operator! () const // never throws
+ {
+ return ptr == 0;
+ }
+
+ void swap(scoped_ptr & b) // never throws
+ {
+ T * tmp = b.ptr;
+ b.ptr = ptr;
+ ptr = tmp;
+ }
+};
+
+template<class T> inline void swap(scoped_ptr<T> & a, scoped_ptr<T> & b) // never throws
+{
+ a.swap(b);
+}
+
+// get_pointer(p) is a generic way to say p.get()
+
+template<class T> inline T * get_pointer(scoped_ptr<T> const & p)
+{
+ return p.get();
+}
+
+} // namespace boost
+
+#endif // #ifndef BOOST_SCOPED_PTR_HPP_INCLUDED
diff --git a/boost/boost/serialization/access.hpp b/boost/boost/serialization/access.hpp
new file mode 100644
index 00000000000..a8ee3f849a9
--- /dev/null
+++ b/boost/boost/serialization/access.hpp
@@ -0,0 +1,130 @@
+#ifndef BOOST_SERIALIZATION_ACCESS_HPP
+#define BOOST_SERIALIZATION_ACCESS_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// access.hpp: interface for serialization system.
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+
+#include <boost/pfto.hpp>
+
+namespace boost {
+
+namespace archive {
+namespace detail {
+ template<class Archive, class T>
+ class iserializer;
+ template<class Archive, class T>
+ class oserializer;
+} // namespace detail
+} // namespace archive
+
+namespace serialization {
+
+// forward declarations
+template<class Archive, class T>
+inline void serialize_adl(Archive &, T &, const unsigned int);
+namespace detail {
+ template<class Archive, class T>
+ struct member_saver;
+ template<class Archive, class T>
+ struct member_loader;
+} // namespace detail
+
+// use an "accessor class so that we can use:
+// "friend class boost::serialization::access;"
+// in any serialized class to permit clean, safe access to private class members
+// by the serialization system
+
+class access {
+public:
+ // grant access to "real" serialization defaults
+#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+public:
+#else
+ template<class Archive, class T>
+ friend struct detail::member_saver;
+ template<class Archive, class T>
+ friend struct detail::member_loader;
+ template<class Archive, class T>
+ friend class archive::detail::iserializer;
+ template<class Archive, class T>
+ friend class archive::detail::oserializer;
+ template<class Archive, class T>
+ friend inline void serialize(
+ Archive & ar,
+ T & t,
+ const BOOST_PFTO unsigned int file_version
+ );
+ template<class Archive, class T>
+ friend inline void save_construct_data(
+ Archive & ar,
+ const T * t,
+ const BOOST_PFTO unsigned int file_version
+ );
+ template<class Archive, class T>
+ friend inline void load_construct_data(
+ Archive & ar,
+ T * t,
+ const BOOST_PFTO unsigned int file_version
+ );
+#endif
+
+ // pass calls to users's class implementation
+ template<class Archive, class T>
+ static void member_save(
+ Archive & ar,
+ //const T & t,
+ T & t,
+ const unsigned int file_version
+ ){
+ t.save(ar, file_version);
+ }
+ template<class Archive, class T>
+ static void member_load(
+ Archive & ar,
+ T & t,
+ const unsigned int file_version
+ ){
+ t.load(ar, file_version);
+ }
+ template<class Archive, class T>
+ static void serialize(
+ Archive & ar,
+ T & t,
+ const unsigned int file_version
+ ){
+ t.serialize(ar, file_version);
+ }
+ template<class T>
+ static void destroy( const T * t) // const appropriate here?
+ {
+ // the const business is an MSVC 6.0 hack that should be
+ // benign on everything else
+ delete const_cast<T *>(t);
+ }
+ template<class Archive, class T>
+ static void construct(Archive & /* ar */, T * t){
+ // default is inplace invocation of default constructor
+ // Note the :: before the placement new. Required if the
+ // class doesn't have a class-specific placement new defined.
+ ::new(t)T;
+ }
+};
+
+} // namespace serialization
+} // namespace boost
+
+#endif // BOOST_SERIALIZATION_ACCESS_HPP
diff --git a/boost/boost/serialization/base_object.hpp b/boost/boost/serialization/base_object.hpp
new file mode 100644
index 00000000000..747bed0b820
--- /dev/null
+++ b/boost/boost/serialization/base_object.hpp
@@ -0,0 +1,172 @@
+#ifndef BOOST_SERIALIZATION_BASE_OBJECT_HPP
+#define BOOST_SERIALIZATION_BASE_OBJECT_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// base_object.hpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+// if no archive headers have been included this is a no op
+// this is to permit BOOST_EXPORT etc to be included in a
+// file declaration header
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/type_traits/is_base_and_derived.hpp>
+#include <boost/type_traits/is_pointer.hpp>
+#include <boost/type_traits/is_const.hpp>
+
+#include <boost/static_assert.hpp>
+#include <boost/serialization/type_info_implementation.hpp>
+#include <boost/serialization/force_include.hpp>
+#include <boost/serialization/void_cast_fwd.hpp>
+
+namespace boost {
+namespace serialization {
+
+namespace detail {
+ // metrowerks CodeWarrior
+ #if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3206))
+ // only register void casts if the types are polymorphic
+ template<class Base, class Derived>
+ struct base_register{
+ struct nothing {
+ static const void_cast_detail::void_caster & invoke(){
+ return static_cast<const void_cast_detail::void_caster &>(
+ * static_cast<const void_cast_detail::void_caster *>(NULL)
+ );
+ }
+ };
+
+ // hold a reference to the void_cast_register and void_caster in the hope of
+ // ensuring code instantiation for some compilers with over-zealous link time
+ // optimiser. The compiler that demanded this was CW
+ struct reg{
+ typedef const void_cast_detail::void_caster & (* t_vcr)(
+ const Derived *,
+ const Base *
+ );
+ t_vcr m_vcr;
+ static const void_cast_detail::void_caster & invoke(){
+ return void_cast_register<const Derived, const Base>(
+ static_cast<const Derived *>(NULL),
+ static_cast<const Base *>(NULL)
+ );
+ }
+ reg() :
+ m_vcr(static_cast<t_vcr>(void_cast_register))
+ {
+ }
+ } m_reg;
+
+ static const void_cast_detail::void_caster & invoke(){
+ typedef BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ BOOST_DEDUCED_TYPENAME type_info_implementation<Base>::type::is_polymorphic,
+ mpl::identity<reg>,
+ mpl::identity<nothing>
+ >::type typex;
+ return typex::invoke();
+ }
+
+ const void_cast_detail::void_caster & m_vc;
+ Derived & m_d;
+
+ base_register(Derived & d) :
+ m_vc(invoke()),
+ m_d(d)
+ {}
+ Base & get_base() const {
+ return m_d;
+ }
+ };
+ #else
+ // only register void casts if the types are polymorphic
+ template<class Base, class Derived>
+ struct base_register{
+ struct nothing {
+ static void invoke(){}
+ };
+ struct reg{
+ static void invoke(){
+ void_cast_register<const Derived, const Base>(
+ static_cast<const Derived *>(NULL),
+ static_cast<const Base *>(NULL)
+ );
+ }
+ };
+ static void invoke(){
+ typedef BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ BOOST_DEDUCED_TYPENAME type_info_implementation<Base>::type::is_polymorphic,
+ mpl::identity<reg>,
+ mpl::identity<nothing>
+ >::type typex;
+ typex::invoke();
+ }
+ };
+ #endif
+ // get the base type for a given derived type
+ // preserving the const-ness
+ template<class B, class D>
+ struct base_cast
+ {
+ typedef BOOST_DEDUCED_TYPENAME
+ mpl::if_<
+ is_const<D>,
+ const B,
+ B
+ >::type type;
+ BOOST_STATIC_ASSERT(is_const<type>::value == is_const<D>::value);
+ };
+} // namespace detail
+
+// metrowerks CodeWarrior
+#if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3206))
+template<class Base, class Derived>
+BOOST_DEDUCED_TYPENAME detail::base_cast<Base, Derived>::type &
+base_object(Derived &d)
+{
+ BOOST_STATIC_ASSERT(( is_base_and_derived<Base,Derived>::value));
+ BOOST_STATIC_ASSERT(! is_pointer<Derived>::value);
+ typedef BOOST_DEDUCED_TYPENAME detail::base_cast<Base, Derived>::type type;
+ return detail::base_register<type, Derived>(d).get_base();
+}
+// BORLAND
+#elif BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x560))
+template<class Base, class Derived>
+const Base &
+base_object(const Derived & d)
+{
+ BOOST_STATIC_ASSERT(! is_pointer<Derived>::value);
+ detail::base_register<Base, Derived>::invoke();
+ return static_cast<const Base &>(d);
+}
+#else
+template<class Base, class Derived>
+BOOST_DEDUCED_TYPENAME detail::base_cast<Base, Derived>::type &
+base_object(Derived &d)
+{
+ BOOST_STATIC_ASSERT(( is_base_and_derived<Base,Derived>::value));
+ BOOST_STATIC_ASSERT(! is_pointer<Derived>::value);
+ typedef BOOST_DEDUCED_TYPENAME detail::base_cast<Base, Derived>::type type;
+ detail::base_register<type, Derived>::invoke();
+ return static_cast<type &>(d);
+}
+#endif
+
+} // namespace serialization
+} // namespace boost
+
+#endif // BOOST_SERIALIZATION_BASE_OBJECT_HPP
diff --git a/boost/boost/serialization/binary_object.hpp b/boost/boost/serialization/binary_object.hpp
new file mode 100644
index 00000000000..c321470399a
--- /dev/null
+++ b/boost/boost/serialization/binary_object.hpp
@@ -0,0 +1,88 @@
+#ifndef BOOST_SERIALIZATION_BINARY_OBJECT_HPP
+#define BOOST_SERIALIZATION_BINARY_OBJECT_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// nvp.hpp: interface for serialization system.
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <cassert>
+
+#include <cstddef> // std::size_t
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::size_t;
+} // namespace std
+#endif
+
+#include <boost/preprocessor/stringize.hpp>
+#include <boost/serialization/tracking.hpp>
+#include <boost/serialization/level.hpp>
+#include <boost/serialization/split_member.hpp>
+#include <boost/serialization/nvp.hpp>
+
+namespace boost {
+namespace serialization {
+
+struct binary_object {
+ /* const */ void * const m_t;
+ const std::size_t m_size;
+ template<class Archive>
+ void save(Archive & ar, const unsigned int /* file_version */) const {
+ ar.save_binary(m_t, m_size);
+ }
+ template<class Archive>
+ void load(Archive & ar, const unsigned int /* file_version */) const {
+ ar.load_binary(const_cast<void *>(m_t), m_size);
+ }
+ BOOST_SERIALIZATION_SPLIT_MEMBER()
+ binary_object(/* const */ void * const t, std::size_t size) :
+ m_t(t),
+ m_size(size)
+ {}
+ binary_object(const binary_object & rhs) :
+ m_t(rhs.m_t),
+ m_size(rhs.m_size)
+ {}
+};
+
+// just a little helper to support the convention that all serialization
+// wrappers follow the naming convention make_xxxxx
+inline
+#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+const
+#endif
+binary_object
+make_binary_object(/* const */ void * t, std::size_t size){
+ return binary_object(t, size);
+}
+
+} // namespace serialization
+} // boost
+
+// don't need versioning info for this type
+BOOST_CLASS_IMPLEMENTATION(
+ binary_object,
+ boost::serialization::object_serializable
+)
+
+// don't track binary objects - usually they will be created on the stack
+// and tracking algorithm (which uses the object address) might get
+// confused. note that these address will likely be members of some
+// other structure which itself is tracked, so as a practical matter
+// suppressing tracking shouldn't cause any redundancy.
+
+BOOST_CLASS_TRACKING(binary_object, boost::serialization::track_never)
+
+#endif // BOOST_SERIALIZATION_BINARY_OBJECT_HPP
diff --git a/boost/boost/serialization/collection_traits.hpp b/boost/boost/serialization/collection_traits.hpp
new file mode 100644
index 00000000000..349fe914b82
--- /dev/null
+++ b/boost/boost/serialization/collection_traits.hpp
@@ -0,0 +1,86 @@
+#ifndef BOOST_SERIALIZATION_COLLECTION_TRAITS_HPP
+#define BOOST_SERIALIZATION_COLLECTION_TRAITS_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// collection_traits.hpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+// This header assigns a level implemenation trait to a collection type
+// for all primitives. It is needed so that archives which are meant to be
+// portable don't write class information in the archive. Since, not all
+// compiles recognize the same set of primitive types, the possibility
+// exists for archives to be non-portable if class information for primitive
+// types is included. This is addressed by the following macros.
+#include <boost/config.hpp>
+#include <boost/mpl/integral_c.hpp>
+#include <boost/mpl/integral_c_tag.hpp>
+
+#include <boost/cstdint.hpp>
+#include <boost/serialization/level.hpp>
+
+#define BOOST_SERIALIZATION_COLLECTION_TRAITS_HELPER(T, C) \
+template<> \
+struct implementation_level< C < T > > { \
+ typedef mpl::integral_c_tag tag; \
+ typedef mpl::int_<object_serializable> type; \
+ BOOST_STATIC_CONSTANT(int, value = object_serializable); \
+}; \
+/**/
+
+#if defined(BOOST_NO_CWCHAR) || defined(BOOST_NO_INTRINSIC_WCHAR_T)
+ #define BOOST_SERIALIZATION_COLLECTION_TRAITS_HELPER_WCHAR(C)
+#else
+ #define BOOST_SERIALIZATION_COLLECTION_TRAITS_HELPER_WCHAR(C) \
+ BOOST_SERIALIZATION_COLLECTION_TRAITS_HELPER(wchar_t, C) \
+ /**/
+#endif
+
+// determine if its necessary to handle (u)int64_t specifically
+// i.e. that its not a synonym for (unsigned) long
+// if there is no 64 bit int or if its the same as a long
+// we shouldn't define separate functions for int64 data types.
+#if defined(BOOST_NO_INT64_T) \
+ || (ULONG_MAX != 0xffffffff && ULONG_MAX == 18446744073709551615u) // 2**64 - 1
+# define BOOST_NO_INTRINSIC_INT64_T
+#endif
+
+#if !defined(BOOST_NO_INTRINSIC_INT64_T)
+ #define BOOST_SERIALIZATION_COLLECTION_TRAITS_HELPER_INT64(C) \
+ BOOST_SERIALIZATION_COLLECTION_TRAITS_HELPER(boost::int64_t, C) \
+ BOOST_SERIALIZATION_COLLECTION_TRAITS_HELPER(boost::uint64_t, C) \
+ /**/
+#else
+ #define BOOST_SERIALIZATION_COLLECTION_TRAITS_HELPER_INT64(C)
+#endif
+
+#define BOOST_SERIALIZATION_COLLECTION_TRAITS(C) \
+ namespace boost { namespace serialization { \
+ BOOST_SERIALIZATION_COLLECTION_TRAITS_HELPER(bool, C) \
+ BOOST_SERIALIZATION_COLLECTION_TRAITS_HELPER(char, C) \
+ BOOST_SERIALIZATION_COLLECTION_TRAITS_HELPER(signed char, C) \
+ BOOST_SERIALIZATION_COLLECTION_TRAITS_HELPER(unsigned char, C) \
+ BOOST_SERIALIZATION_COLLECTION_TRAITS_HELPER(signed int, C) \
+ BOOST_SERIALIZATION_COLLECTION_TRAITS_HELPER(unsigned int, C) \
+ BOOST_SERIALIZATION_COLLECTION_TRAITS_HELPER(signed long, C) \
+ BOOST_SERIALIZATION_COLLECTION_TRAITS_HELPER(unsigned long, C) \
+ BOOST_SERIALIZATION_COLLECTION_TRAITS_HELPER(float, C) \
+ BOOST_SERIALIZATION_COLLECTION_TRAITS_HELPER(double, C) \
+ BOOST_SERIALIZATION_COLLECTION_TRAITS_HELPER(unsigned short, C) \
+ BOOST_SERIALIZATION_COLLECTION_TRAITS_HELPER(signed short, C) \
+ BOOST_SERIALIZATION_COLLECTION_TRAITS_HELPER_INT64(C) \
+ BOOST_SERIALIZATION_COLLECTION_TRAITS_HELPER_WCHAR(C) \
+ } } \
+ /**/
+
+#endif // BOOST_SERIALIZATION_COLLECTION_TRAITS
diff --git a/boost/boost/serialization/collections_load_imp.hpp b/boost/boost/serialization/collections_load_imp.hpp
new file mode 100644
index 00000000000..61de585eaf1
--- /dev/null
+++ b/boost/boost/serialization/collections_load_imp.hpp
@@ -0,0 +1,139 @@
+#ifndef BOOST_SERIALIZATION_COLLECTIONS_LOAD_IMP_HPP
+#define BOOST_SERIALIZATION_COLLECTIONS_LOAD_IMP_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#if defined(_MSC_VER) && (_MSC_VER <= 1020)
+# pragma warning (disable : 4786) // too long name, harmless warning
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// collections_load_imp.hpp: serialization for loading stl collections
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+// helper function templates for serialization of collections
+
+#include <cassert>
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+#include <boost/aligned_storage.hpp>
+
+#include <boost/serialization/access.hpp>
+#include <boost/serialization/nvp.hpp>
+#include <boost/serialization/detail/stack_constructor.hpp>
+
+namespace boost{
+namespace serialization {
+namespace stl {
+
+//////////////////////////////////////////////////////////////////////
+// implementation of serialization for STL containers
+//
+
+// sequential container input
+template<class Archive, class Container>
+struct archive_input_seq
+{
+ inline void operator()(
+ Archive &ar,
+ Container &s,
+ const unsigned int v
+ ){
+ typedef BOOST_DEDUCED_TYPENAME Container::value_type type;
+ detail::stack_construct<Archive, type> t(ar, v);
+ // borland fails silently w/o full namespace
+ ar >> boost::serialization::make_nvp("item", t.reference());
+ s.push_back(t.reference());
+ ar.reset_object_address(& s.back() , & t.reference());
+ }
+};
+
+// map and set input
+template<class Archive, class Container>
+struct archive_input_unique
+{
+ inline void operator()(
+ Archive &ar,
+ Container &s,
+ const unsigned int v
+ ){
+ typedef BOOST_DEDUCED_TYPENAME Container::value_type type;
+ detail::stack_construct<Archive, type>t(ar, v);
+ // borland fails silently w/o full namespace
+ ar >> boost::serialization::make_nvp("item", t.reference());
+ std::pair<BOOST_DEDUCED_TYPENAME Container::const_iterator, bool> result =
+ s.insert(t.reference());
+ if(result.second)
+ ar.reset_object_address(& (* result.first), & t.reference());
+ }
+};
+
+// multiset and multimap input
+template<class Archive, class Container>
+struct archive_input_multi
+{
+ inline void operator()(
+ Archive &ar,
+ Container &s,
+ const unsigned int v
+ ){
+ typedef BOOST_DEDUCED_TYPENAME Container::value_type type;
+ detail::stack_construct<Archive, type> t(ar, v);
+ // borland fails silently w/o full namespace
+ ar >> boost::serialization::make_nvp("item", t.reference());
+ BOOST_DEDUCED_TYPENAME Container::const_iterator result
+ = s.insert(t.reference());
+ ar.reset_object_address(& (* result), & t.reference());
+ }
+};
+
+template<class Container>
+class reserve_imp
+{
+public:
+ void operator()(Container &s, unsigned int count) const {
+ s.reserve(count);
+ }
+};
+
+template<class Container>
+class no_reserve_imp
+{
+public:
+ void operator()(Container & /* s */, unsigned int /* count */) const{}
+};
+
+template<class Archive, class Container, class InputFunction, class R>
+inline void load_collection(Archive & ar, Container &s)
+{
+ s.clear();
+ // retrieve number of elements
+ unsigned int count;
+ unsigned int item_version(0);
+ ar >> BOOST_SERIALIZATION_NVP(count);
+ if(3 < ar.get_library_version()){
+ ar >> BOOST_SERIALIZATION_NVP(item_version);
+ }
+ R rx;
+ rx(s, count);
+ InputFunction ifunc;
+ while(count-- > 0){
+ ifunc(ar, s, item_version);
+ }
+}
+
+} // namespace stl
+} // namespace serialization
+} // namespace boost
+
+#endif //BOOST_SERIALIZATION_COLLECTIONS_LOAD_IMP_HPP
diff --git a/boost/boost/serialization/collections_save_imp.hpp b/boost/boost/serialization/collections_save_imp.hpp
new file mode 100644
index 00000000000..8ba4081d904
--- /dev/null
+++ b/boost/boost/serialization/collections_save_imp.hpp
@@ -0,0 +1,66 @@
+#ifndef BOOST_SERIALIZATION_COLLECTIONS_SAVE_IMP_HPP
+#define BOOST_SERIALIZATION_COLLECTIONS_SAVE_IMP_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// collections_save_imp.hpp: serialization for stl collections
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+// helper function templates for serialization of collections
+
+#include <boost/config.hpp>
+#include <boost/serialization/nvp.hpp>
+#include <boost/serialization/serialization.hpp>
+#include <boost/serialization/version.hpp>
+
+namespace boost{
+namespace serialization {
+namespace stl {
+
+//////////////////////////////////////////////////////////////////////
+// implementation of serialization for STL containers
+//
+
+template<class Archive, class Container>
+inline void save_collection(Archive & ar, const Container &s)
+{
+ // record number of elements
+ unsigned int count = s.size();
+ ar << BOOST_SERIALIZATION_NVP(count);
+ // make sure the target type is registered so we can retrieve
+ // the version when we load
+ if(3 < ar.get_library_version()){
+ const unsigned int item_version = version<
+ BOOST_DEDUCED_TYPENAME Container::value_type
+ >::value;
+ ar << BOOST_SERIALIZATION_NVP(item_version);
+ }
+ BOOST_DEDUCED_TYPENAME Container::const_iterator it = s.begin();
+ while(count-- > 0){
+ // note borland emits a no-op without the explicit namespace
+ boost::serialization::save_construct_data_adl(
+ ar,
+ &(*it),
+ boost::serialization::version<
+ BOOST_DEDUCED_TYPENAME Container::value_type
+ >::value
+ );
+ ar << boost::serialization::make_nvp("item", *it++);
+ }
+}
+
+} // namespace stl
+} // namespace serialization
+} // namespace boost
+
+#endif //BOOST_SERIALIZATION_COLLECTIONS_SAVE_IMP_HPP
diff --git a/boost/boost/serialization/config.hpp b/boost/boost/serialization/config.hpp
new file mode 100644
index 00000000000..07c18ff5e81
--- /dev/null
+++ b/boost/boost/serialization/config.hpp
@@ -0,0 +1,74 @@
+#ifndef BOOST_SERIALIZATION_CONFIG_HPP
+#define BOOST_SERIALIZATION_CONFIG_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+// config.hpp ---------------------------------------------//
+
+// © Copyright Robert Ramey 2004
+// Use, modification, and distribution is 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)
+
+// See library home page at http://www.boost.org/libs/serialization
+
+//----------------------------------------------------------------------------//
+
+// This header implements separate compilation features as described in
+// http://www.boost.org/more/separate_compilation.html
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/preprocessor/facilities/empty.hpp>
+
+// note: this version incorporates the related code into the the
+// the same library as BOOST_ARCHIVE. This could change some day in the
+// future
+
+#ifdef BOOST_HAS_DECLSPEC // defined in config system
+// we need to import/export our code only if the user has specifically
+// asked for it by defining either BOOST_ALL_DYN_LINK if they want all boost
+// libraries to be dynamically linked, or BOOST_SERIALIZATION_DYN_LINK
+// if they want just this one to be dynamically liked:
+#if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_SERIALIZATION_DYN_LINK)
+#define BOOST_DYN_LINK
+// export if this is our own source, otherwise import:
+#if defined(BOOST_SERIALIZATION_SOURCE)
+ #if defined(BOOST_MSVC) || defined(BOOST_INTEL_WIN) || defined(__MWERKS__)
+ #define BOOST_SERIALIZATION_DECL(T) __declspec(dllexport) T
+ #else
+ #define BOOST_SERIALIZATION_DECL(T) T __declspec(dllexport)
+ #endif
+ #pragma message( "BOOST_SERIALIZATION_DECL __declspec(dllexport)" )
+#endif // defined(BOOST_SERIALIZATION_SOURCE)
+#endif // defined(BOOST_ALL_DYN_LINK) || defined(BOOST_SERIALIZATION_DYN_LINK)
+#endif // BOOST_HAS_DECLSPEC
+
+// if BOOST_SERIALIZATION_DECL isn't defined yet define it now:
+#ifndef BOOST_SERIALIZATION_DECL
+ #define BOOST_SERIALIZATION_DECL(T) T
+#endif
+
+// enable automatic library variant selection ------------------------------//
+
+#if !defined(BOOST_ALL_NO_LIB) && !defined(BOOST_SERIALIZATION_NO_LIB) \
+&& !defined(BOOST_SERIALIZATION_SOURCE) \
+&& !defined(BOOST_ARCHIVE_SOURCE) && !defined(BOOST_WARCHIVE_SOURCE)
+//
+// Set the name of our library, this will get undef'ed by auto_link.hpp
+// once it's done with it:
+//
+#define BOOST_LIB_NAME boost_serialization
+//
+// And include the header that does the work:
+//
+#include <boost/config/auto_link.hpp>
+
+#endif // !defined(BOOST_SERIALIZATION_SOURCE) && !defined(BOOST_ARCHIVE_SOURCE)
+
+//----------------------------------------------------------------------------//
+
+#endif // BOOST_SERIALIZATION_CONFIG_HPP
diff --git a/boost/boost/serialization/deque.hpp b/boost/boost/serialization/deque.hpp
new file mode 100644
index 00000000000..f5df4fa6f22
--- /dev/null
+++ b/boost/boost/serialization/deque.hpp
@@ -0,0 +1,75 @@
+#ifndef BOOST_SERIALIZATION_DEQUE_HPP
+#define BOOST_SERIALIZATION_DEQUE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// deque.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <deque>
+
+#include <boost/config.hpp>
+
+#include <boost/serialization/collections_save_imp.hpp>
+#include <boost/serialization/collections_load_imp.hpp>
+#include <boost/serialization/split_free.hpp>
+
+namespace boost {
+namespace serialization {
+
+template<class Archive, class U, class Allocator>
+inline void save(
+ Archive & ar,
+ const std::deque<U, Allocator> &t,
+ const unsigned int /* file_version */
+){
+ boost::serialization::stl::save_collection<
+ Archive, std::deque<U, Allocator>
+ >(ar, t);
+}
+
+template<class Archive, class U, class Allocator>
+inline void load(
+ Archive & ar,
+ std::deque<U, Allocator> &t,
+ const unsigned int file_version
+){
+ boost::serialization::stl::load_collection<
+ Archive,
+ std::deque<U, Allocator>,
+ boost::serialization::stl::archive_input_seq<
+ Archive, std::deque<U, Allocator>
+ >,
+ boost::serialization::stl::no_reserve_imp<std::deque<U, Allocator> >
+ >(ar, t);
+}
+
+// split non-intrusive serialization function member into separate
+// non intrusive save/load member functions
+template<class Archive, class U, class Allocator>
+inline void serialize(
+ Archive & ar,
+ std::deque<U, Allocator> &t,
+ const unsigned int file_version
+){
+ boost::serialization::split_free(ar, t, file_version);
+}
+
+} // namespace serialization
+} // namespace boost
+
+#include <boost/serialization/collection_traits.hpp>
+
+BOOST_SERIALIZATION_COLLECTION_TRAITS(std::deque)
+
+#endif // BOOST_SERIALIZATION_DEQUE_HPP
diff --git a/boost/boost/serialization/detail/shared_count_132.hpp b/boost/boost/serialization/detail/shared_count_132.hpp
new file mode 100644
index 00000000000..fa98391406c
--- /dev/null
+++ b/boost/boost/serialization/detail/shared_count_132.hpp
@@ -0,0 +1,567 @@
+#ifndef BOOST_DETAIL_SHARED_COUNT_132_HPP_INCLUDED
+#define BOOST_DETAIL_SHARED_COUNT_132_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+// detail/shared_count.hpp
+//
+// Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.
+//
+// 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)
+//
+
+#include <boost/config.hpp>
+
+#if defined(BOOST_SP_USE_STD_ALLOCATOR) && defined(BOOST_SP_USE_QUICK_ALLOCATOR)
+# error BOOST_SP_USE_STD_ALLOCATOR and BOOST_SP_USE_QUICK_ALLOCATOR are incompatible.
+#endif
+
+#include <boost/checked_delete.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/detail/lightweight_mutex.hpp>
+
+#if defined(BOOST_SP_USE_QUICK_ALLOCATOR)
+#include <boost/detail/quick_allocator.hpp>
+#endif
+
+#include <memory> // std::auto_ptr, std::allocator
+#include <functional> // std::less
+#include <exception> // std::exception
+#include <new> // std::bad_alloc
+#include <typeinfo> // std::type_info in get_deleter
+#include <cstddef> // std::size_t
+
+#ifdef __BORLANDC__
+# pragma warn -8026 // Functions with excep. spec. are not expanded inline
+# pragma warn -8027 // Functions containing try are not expanded inline
+#endif
+
+namespace boost_132 {
+
+#if !BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT( 0x564) )
+using namespace boost;
+#endif
+
+// Debug hooks
+
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+
+void sp_scalar_constructor_hook(void * px, std::size_t size, void * pn);
+void sp_array_constructor_hook(void * px);
+void sp_scalar_destructor_hook(void * px, std::size_t size, void * pn);
+void sp_array_destructor_hook(void * px);
+
+#endif
+
+
+// The standard library that comes with Borland C++ 5.5.1
+// defines std::exception and its members as having C calling
+// convention (-pc). When the definition of bad_weak_ptr
+// is compiled with -ps, the compiler issues an error.
+// Hence, the temporary #pragma option -pc below. The version
+// check is deliberately conservative.
+
+#if defined(__BORLANDC__) && __BORLANDC__ == 0x551
+# pragma option push -pc
+#endif
+
+class bad_weak_ptr: public std::exception
+{
+public:
+
+ virtual char const * what() const throw()
+ {
+ return "boost::bad_weak_ptr";
+ }
+};
+
+#if defined(__BORLANDC__) && __BORLANDC__ == 0x551
+# pragma option pop
+#endif
+
+namespace detail{
+#if !BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT( 0x564) )
+using namespace boost::detail;
+#endif
+
+class sp_counted_base
+{
+//private:
+
+#if BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT( 0x564) )
+ typedef boost::detail::lightweight_mutex mutex_type;
+#else
+ typedef detail::lightweight_mutex mutex_type;
+#endif
+
+public:
+
+ sp_counted_base(): use_count_(1), weak_count_(1)
+ {
+ }
+
+ virtual ~sp_counted_base() // nothrow
+ {
+ }
+
+ // dispose() is called when use_count_ drops to zero, to release
+ // the resources managed by *this.
+
+ virtual void dispose() = 0; // nothrow
+
+ // destruct() is called when weak_count_ drops to zero.
+
+ virtual void destruct() // nothrow
+ {
+ delete this;
+ }
+
+ virtual void * get_deleter(std::type_info const & ti) = 0;
+
+ void add_ref_copy()
+ {
+#if defined(BOOST_HAS_THREADS)
+ mutex_type::scoped_lock lock(mtx_);
+#endif
+ ++use_count_;
+ }
+
+ void add_ref_lock()
+ {
+#if defined(BOOST_HAS_THREADS)
+ mutex_type::scoped_lock lock(mtx_);
+#endif
+ if(use_count_ == 0) boost::throw_exception(bad_weak_ptr());
+ ++use_count_;
+ }
+
+ void release() // nothrow
+ {
+ {
+#if defined(BOOST_HAS_THREADS)
+ mutex_type::scoped_lock lock(mtx_);
+#endif
+ long new_use_count = --use_count_;
+
+ if(new_use_count != 0) return;
+ }
+
+ dispose();
+ weak_release();
+ }
+
+ void weak_add_ref() // nothrow
+ {
+#if defined(BOOST_HAS_THREADS)
+ mutex_type::scoped_lock lock(mtx_);
+#endif
+ ++weak_count_;
+ }
+
+ void weak_release() // nothrow
+ {
+ long new_weak_count;
+
+ {
+#if defined(BOOST_HAS_THREADS)
+ mutex_type::scoped_lock lock(mtx_);
+#endif
+ new_weak_count = --weak_count_;
+ }
+
+ if(new_weak_count == 0)
+ {
+ destruct();
+ }
+ }
+
+ long use_count() const // nothrow
+ {
+#if defined(BOOST_HAS_THREADS)
+ mutex_type::scoped_lock lock(mtx_);
+#endif
+ return use_count_;
+ }
+
+//private:
+public:
+ sp_counted_base(sp_counted_base const &);
+ sp_counted_base & operator= (sp_counted_base const &);
+
+ long use_count_; // #shared
+ long weak_count_; // #weak + (#shared != 0)
+
+#if defined(BOOST_HAS_THREADS) || defined(BOOST_LWM_WIN32)
+ mutable mutex_type mtx_;
+#endif
+};
+
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+
+template<class T> void cbi_call_constructor_hook(sp_counted_base * pn, T * px, checked_deleter<T> const &, int)
+{
+ boost::sp_scalar_constructor_hook(px, sizeof(T), pn);
+}
+
+template<class T> void cbi_call_constructor_hook(sp_counted_base *, T * px, checked_array_deleter<T> const &, int)
+{
+ boost::sp_array_constructor_hook(px);
+}
+
+template<class P, class D> void cbi_call_constructor_hook(sp_counted_base *, P const &, D const &, long)
+{
+}
+
+template<class T> void cbi_call_destructor_hook(sp_counted_base * pn, T * px, checked_deleter<T> const &, int)
+{
+ boost::sp_scalar_destructor_hook(px, sizeof(T), pn);
+}
+
+template<class T> void cbi_call_destructor_hook(sp_counted_base *, T * px, checked_array_deleter<T> const &, int)
+{
+ boost::sp_array_destructor_hook(px);
+}
+
+template<class P, class D> void cbi_call_destructor_hook(sp_counted_base *, P const &, D const &, long)
+{
+}
+
+#endif
+
+//
+// Borland's Codeguard trips up over the -Vx- option here:
+//
+#ifdef __CODEGUARD__
+# pragma option push -Vx-
+#endif
+
+template<class P, class D> class sp_counted_base_impl: public sp_counted_base
+{
+//private:
+public:
+ P ptr; // copy constructor must not throw
+ D del; // copy constructor must not throw
+
+ sp_counted_base_impl(sp_counted_base_impl const &);
+ sp_counted_base_impl & operator= (sp_counted_base_impl const &);
+
+ typedef sp_counted_base_impl<P, D> this_type;
+
+public:
+
+ // pre: initial_use_count <= initial_weak_count, d(p) must not throw
+
+ sp_counted_base_impl(P p, D d): ptr(p), del(d)
+ {
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+ detail::cbi_call_constructor_hook(this, p, d, 0);
+#endif
+ }
+
+ virtual void dispose() // nothrow
+ {
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+ detail::cbi_call_destructor_hook(this, ptr, del, 0);
+#endif
+ del(ptr);
+ }
+
+ virtual void * get_deleter(std::type_info const & ti)
+ {
+ return ti == typeid(D)? &del: 0;
+ }
+
+#if defined(BOOST_SP_USE_STD_ALLOCATOR)
+
+ void * operator new(std::size_t)
+ {
+ return std::allocator<this_type>().allocate(1, static_cast<this_type *>(0));
+ }
+
+ void operator delete(void * p)
+ {
+ std::allocator<this_type>().deallocate(static_cast<this_type *>(p), 1);
+ }
+
+#endif
+
+#if defined(BOOST_SP_USE_QUICK_ALLOCATOR)
+
+ void * operator new(std::size_t)
+ {
+ return quick_allocator<this_type>::alloc();
+ }
+
+ void operator delete(void * p)
+ {
+ quick_allocator<this_type>::dealloc(p);
+ }
+
+#endif
+};
+
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+
+int const shared_count_id = 0x2C35F101;
+int const weak_count_id = 0x298C38A4;
+
+#endif
+
+class weak_count;
+
+class shared_count
+{
+//private:
+public:
+ sp_counted_base * pi_;
+
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+ int id_;
+#endif
+
+ friend class weak_count;
+
+public:
+
+ shared_count(): pi_(0) // nothrow
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+ , id_(shared_count_id)
+#endif
+ {
+ }
+
+ template<class P, class D> shared_count(P p, D d): pi_(0)
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+ , id_(shared_count_id)
+#endif
+ {
+#ifndef BOOST_NO_EXCEPTIONS
+
+ try
+ {
+ pi_ = new sp_counted_base_impl<P, D>(p, d);
+ }
+ catch(...)
+ {
+ d(p); // delete p
+ throw;
+ }
+
+#else
+
+ pi_ = new sp_counted_base_impl<P, D>(p, d);
+
+ if(pi_ == 0)
+ {
+ d(p); // delete p
+ boost::throw_exception(std::bad_alloc());
+ }
+
+#endif
+ }
+
+#ifndef BOOST_NO_AUTO_PTR
+
+ // auto_ptr<Y> is special cased to provide the strong guarantee
+
+ template<class Y>
+ explicit shared_count(std::auto_ptr<Y> & r): pi_(new sp_counted_base_impl< Y *, checked_deleter<Y> >(r.get(), checked_deleter<Y>()))
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+ , id_(shared_count_id)
+#endif
+ {
+ r.release();
+ }
+
+#endif
+
+ ~shared_count() // nothrow
+ {
+ if(pi_ != 0) pi_->release();
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+ id_ = 0;
+#endif
+ }
+
+ shared_count(shared_count const & r): pi_(r.pi_) // nothrow
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+ , id_(shared_count_id)
+#endif
+ {
+ if(pi_ != 0) pi_->add_ref_copy();
+ }
+
+ explicit shared_count(weak_count const & r); // throws bad_weak_ptr when r.use_count() == 0
+
+ shared_count & operator= (shared_count const & r) // nothrow
+ {
+ sp_counted_base * tmp = r.pi_;
+
+ if(tmp != pi_)
+ {
+ if(tmp != 0) tmp->add_ref_copy();
+ if(pi_ != 0) pi_->release();
+ pi_ = tmp;
+ }
+
+ return *this;
+ }
+
+ void swap(shared_count & r) // nothrow
+ {
+ sp_counted_base * tmp = r.pi_;
+ r.pi_ = pi_;
+ pi_ = tmp;
+ }
+
+ long use_count() const // nothrow
+ {
+ return pi_ != 0? pi_->use_count(): 0;
+ }
+
+ bool unique() const // nothrow
+ {
+ return use_count() == 1;
+ }
+
+ friend inline bool operator==(shared_count const & a, shared_count const & b)
+ {
+ return a.pi_ == b.pi_;
+ }
+
+ friend inline bool operator<(shared_count const & a, shared_count const & b)
+ {
+ return std::less<sp_counted_base *>()(a.pi_, b.pi_);
+ }
+
+ void * get_deleter(std::type_info const & ti) const
+ {
+ return pi_? pi_->get_deleter(ti): 0;
+ }
+};
+
+#ifdef __CODEGUARD__
+# pragma option pop
+#endif
+
+
+class weak_count
+{
+private:
+
+ sp_counted_base * pi_;
+
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+ int id_;
+#endif
+
+ friend class shared_count;
+
+public:
+
+ weak_count(): pi_(0) // nothrow
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+ , id_(weak_count_id)
+#endif
+ {
+ }
+
+ weak_count(shared_count const & r): pi_(r.pi_) // nothrow
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+ , id_(shared_count_id)
+#endif
+ {
+ if(pi_ != 0) pi_->weak_add_ref();
+ }
+
+ weak_count(weak_count const & r): pi_(r.pi_) // nothrow
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+ , id_(shared_count_id)
+#endif
+ {
+ if(pi_ != 0) pi_->weak_add_ref();
+ }
+
+ ~weak_count() // nothrow
+ {
+ if(pi_ != 0) pi_->weak_release();
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+ id_ = 0;
+#endif
+ }
+
+ weak_count & operator= (shared_count const & r) // nothrow
+ {
+ sp_counted_base * tmp = r.pi_;
+ if(tmp != 0) tmp->weak_add_ref();
+ if(pi_ != 0) pi_->weak_release();
+ pi_ = tmp;
+
+ return *this;
+ }
+
+ weak_count & operator= (weak_count const & r) // nothrow
+ {
+ sp_counted_base * tmp = r.pi_;
+ if(tmp != 0) tmp->weak_add_ref();
+ if(pi_ != 0) pi_->weak_release();
+ pi_ = tmp;
+
+ return *this;
+ }
+
+ void swap(weak_count & r) // nothrow
+ {
+ sp_counted_base * tmp = r.pi_;
+ r.pi_ = pi_;
+ pi_ = tmp;
+ }
+
+ long use_count() const // nothrow
+ {
+ return pi_ != 0? pi_->use_count(): 0;
+ }
+
+ friend inline bool operator==(weak_count const & a, weak_count const & b)
+ {
+ return a.pi_ == b.pi_;
+ }
+
+ friend inline bool operator<(weak_count const & a, weak_count const & b)
+ {
+ return std::less<sp_counted_base *>()(a.pi_, b.pi_);
+ }
+};
+
+inline shared_count::shared_count(weak_count const & r): pi_(r.pi_)
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+ , id_(shared_count_id)
+#endif
+{
+ if(pi_ != 0)
+ {
+ pi_->add_ref_lock();
+ }
+ else
+ {
+ boost::throw_exception(bad_weak_ptr());
+ }
+}
+
+} // namespace detail
+
+} // namespace boost
+
+#ifdef __BORLANDC__
+# pragma warn .8027 // Functions containing try are not expanded inline
+# pragma warn .8026 // Functions with excep. spec. are not expanded inline
+#endif
+
+#endif // #ifndef BOOST_DETAIL_SHARED_COUNT_HPP_INCLUDED
diff --git a/boost/boost/serialization/detail/shared_ptr_132.hpp b/boost/boost/serialization/detail/shared_ptr_132.hpp
new file mode 100644
index 00000000000..0e0bceca41b
--- /dev/null
+++ b/boost/boost/serialization/detail/shared_ptr_132.hpp
@@ -0,0 +1,482 @@
+#ifndef BOOST_SHARED_PTR_132_HPP_INCLUDED
+#define BOOST_SHARED_PTR_132_HPP_INCLUDED
+
+//
+// shared_ptr.hpp
+//
+// (C) Copyright Greg Colvin and Beman Dawes 1998, 1999.
+// Copyright (c) 2001, 2002, 2003 Peter Dimov
+//
+// 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/smart_ptr/shared_ptr.htm for documentation.
+//
+
+#include <boost/config.hpp> // for broken compiler workarounds
+
+#if defined(BOOST_NO_MEMBER_TEMPLATES) && !defined(BOOST_MSVC6_MEMBER_TEMPLATES)
+#include <boost/serializaition/detail/shared_ptr_nmt_132.hpp>
+#else
+
+#include <boost/assert.hpp>
+#include <boost/checked_delete.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/detail/workaround.hpp>
+
+#include <boost/serialization/access.hpp>
+#include <boost/serialization/detail/shared_count_132.hpp>
+
+#include <memory> // for std::auto_ptr
+#include <algorithm> // for std::swap
+#include <functional> // for std::less
+#include <typeinfo> // for std::bad_cast
+#include <iosfwd> // for std::basic_ostream
+
+#ifdef BOOST_MSVC // moved here to work around VC++ compiler crash
+# pragma warning(push)
+# pragma warning(disable:4284) // odd return type for operator->
+#endif
+
+namespace boost_132 {
+
+#if !BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT( 0x560) )
+using namespace boost;
+#endif
+
+template<class T> class weak_ptr;
+template<class T> class enable_shared_from_this;
+
+namespace detail
+{
+
+struct static_cast_tag {};
+struct const_cast_tag {};
+struct dynamic_cast_tag {};
+struct polymorphic_cast_tag {};
+
+template<class T> struct shared_ptr_traits
+{
+ typedef T & reference;
+};
+
+template<> struct shared_ptr_traits<void>
+{
+ typedef void reference;
+};
+
+#if !defined(BOOST_NO_CV_VOID_SPECIALIZATIONS)
+
+template<> struct shared_ptr_traits<void const>
+{
+ typedef void reference;
+};
+
+template<> struct shared_ptr_traits<void volatile>
+{
+ typedef void reference;
+};
+
+template<> struct shared_ptr_traits<void const volatile>
+{
+ typedef void reference;
+};
+
+#endif
+
+// enable_shared_from_this support
+
+template<class T, class Y> void sp_enable_shared_from_this( shared_count const & pn, enable_shared_from_this<T> const * pe, Y const * px )
+{
+ if(pe != 0) pe->_internal_weak_this._internal_assign(const_cast<Y*>(px), pn);
+}
+
+inline void sp_enable_shared_from_this( shared_count const & /*pn*/, ... )
+{
+}
+
+} // namespace detail
+
+
+//
+// shared_ptr
+//
+// An enhanced relative of scoped_ptr with reference counted copy semantics.
+// The object pointed to is deleted when the last shared_ptr pointing to it
+// is destroyed or reset.
+//
+
+template<class T> class shared_ptr
+{
+private:
+ // Borland 5.5.1 specific workaround
+ typedef shared_ptr<T> this_type;
+
+public:
+
+ typedef T element_type;
+ typedef T value_type;
+ typedef T * pointer;
+ typedef typename detail::shared_ptr_traits<T>::reference reference;
+
+ shared_ptr(): px(0), pn() // never throws in 1.30+
+ {
+ }
+
+#if BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT( 0x564) )
+ template<class Y>
+ explicit shared_ptr(Y * p): px(p), pn(p,boost::checked_deleter<Y>()) // Y must be complete
+#else
+ template<class Y>
+ explicit shared_ptr(Y * p): px(p), pn(p, checked_deleter<Y>()) // Y must be complete
+#endif
+ {
+ detail::sp_enable_shared_from_this( pn, p, p );
+ }
+
+ //
+ // Requirements: D's copy constructor must not throw
+ //
+ // shared_ptr will release p by calling d(p)
+ //
+
+ template<class Y, class D> shared_ptr(Y * p, D d): px(p), pn(p, d)
+ {
+ detail::sp_enable_shared_from_this( pn, p, p );
+ }
+
+// generated copy constructor, assignment, destructor are fine...
+
+// except that Borland C++ has a bug, and g++ with -Wsynth warns
+#if defined(__BORLANDC__) || defined(__GNUC__)
+
+ shared_ptr & operator=(shared_ptr const & r) // never throws
+ {
+ px = r.px;
+ pn = r.pn; // shared_count::op= doesn't throw
+ return *this;
+ }
+
+#endif
+
+ template<class Y>
+ explicit shared_ptr(weak_ptr<Y> const & r): pn(r.pn) // may throw
+ {
+ // it is now safe to copy r.px, as pn(r.pn) did not throw
+ px = r.px;
+ }
+
+ template<class Y>
+ shared_ptr(shared_ptr<Y> const & r): px(r.px), pn(r.pn) // never throws
+ {
+ }
+
+ template<class Y>
+ shared_ptr(shared_ptr<Y> const & r, detail::static_cast_tag): px(static_cast<element_type *>(r.px)), pn(r.pn)
+ {
+ }
+
+ template<class Y>
+ shared_ptr(shared_ptr<Y> const & r, detail::const_cast_tag): px(const_cast<element_type *>(r.px)), pn(r.pn)
+ {
+ }
+
+ template<class Y>
+ shared_ptr(shared_ptr<Y> const & r, detail::dynamic_cast_tag): px(dynamic_cast<element_type *>(r.px)), pn(r.pn)
+ {
+ if(px == 0) // need to allocate new counter -- the cast failed
+ {
+ pn = detail::shared_count();
+ }
+ }
+
+ template<class Y>
+ shared_ptr(shared_ptr<Y> const & r, detail::polymorphic_cast_tag): px(dynamic_cast<element_type *>(r.px)), pn(r.pn)
+ {
+ if(px == 0)
+ {
+ boost::throw_exception(std::bad_cast());
+ }
+ }
+
+#ifndef BOOST_NO_AUTO_PTR
+
+ template<class Y>
+ explicit shared_ptr(std::auto_ptr<Y> & r): px(r.get()), pn()
+ {
+ Y * tmp = r.get();
+ pn = detail::shared_count(r);
+ detail::sp_enable_shared_from_this( pn, tmp, tmp );
+ }
+
+#endif
+
+#if !defined(BOOST_MSVC) || (BOOST_MSVC > 1200)
+
+ template<class Y>
+ shared_ptr & operator=(shared_ptr<Y> const & r) // never throws
+ {
+ px = r.px;
+ pn = r.pn; // shared_count::op= doesn't throw
+ return *this;
+ }
+
+#endif
+
+#ifndef BOOST_NO_AUTO_PTR
+
+ template<class Y>
+ shared_ptr & operator=(std::auto_ptr<Y> & r)
+ {
+ this_type(r).swap(*this);
+ return *this;
+ }
+
+#endif
+
+ void reset() // never throws in 1.30+
+ {
+ this_type().swap(*this);
+ }
+
+ template<class Y> void reset(Y * p) // Y must be complete
+ {
+ BOOST_ASSERT(p == 0 || p != px); // catch self-reset errors
+ this_type(p).swap(*this);
+ }
+
+ template<class Y, class D> void reset(Y * p, D d)
+ {
+ this_type(p, d).swap(*this);
+ }
+
+ reference operator* () const // never throws
+ {
+ BOOST_ASSERT(px != 0);
+ return *px;
+ }
+
+ T * operator-> () const // never throws
+ {
+ BOOST_ASSERT(px != 0);
+ return px;
+ }
+
+ T * get() const // never throws
+ {
+ return px;
+ }
+
+ // implicit conversion to "bool"
+
+#if defined(__SUNPRO_CC) && BOOST_WORKAROUND(__SUNPRO_CC, <= 0x530)
+
+ operator bool () const
+ {
+ return px != 0;
+ }
+
+#elif defined(__MWERKS__) && BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003))
+ typedef T * (this_type::*unspecified_bool_type)() const;
+
+ operator unspecified_bool_type() const // never throws
+ {
+ return px == 0? 0: &this_type::get;
+ }
+
+#else
+
+ typedef T * this_type::*unspecified_bool_type;
+
+ operator unspecified_bool_type() const // never throws
+ {
+ return px == 0? 0: &this_type::px;
+ }
+
+#endif
+
+ // operator! is redundant, but some compilers need it
+
+ bool operator! () const // never throws
+ {
+ return px == 0;
+ }
+
+ bool unique() const // never throws
+ {
+ return pn.unique();
+ }
+
+ long use_count() const // never throws
+ {
+ return pn.use_count();
+ }
+
+ void swap(shared_ptr<T> & other) // never throws
+ {
+ std::swap(px, other.px);
+ pn.swap(other.pn);
+ }
+
+ template<class Y> bool _internal_less(shared_ptr<Y> const & rhs) const
+ {
+ return pn < rhs.pn;
+ }
+
+ void * _internal_get_deleter(std::type_info const & ti) const
+ {
+ return pn.get_deleter(ti);
+ }
+
+// Tasteless as this may seem, making all members public allows member templates
+// to work in the absence of member template friends. (Matthew Langston)
+
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+
+private:
+
+ template<class Y> friend class shared_ptr;
+ template<class Y> friend class weak_ptr;
+
+
+#endif
+public: // for serialization
+ T * px; // contained pointer
+ detail::shared_count pn; // reference counter
+
+}; // shared_ptr
+
+template<class T, class U> inline bool operator==(shared_ptr<T> const & a, shared_ptr<U> const & b)
+{
+ return a.get() == b.get();
+}
+
+template<class T, class U> inline bool operator!=(shared_ptr<T> const & a, shared_ptr<U> const & b)
+{
+ return a.get() != b.get();
+}
+
+#if __GNUC__ == 2 && __GNUC_MINOR__ <= 96
+
+// Resolve the ambiguity between our op!= and the one in rel_ops
+
+template<class T> inline bool operator!=(shared_ptr<T> const & a, shared_ptr<T> const & b)
+{
+ return a.get() != b.get();
+}
+
+#endif
+
+template<class T, class U> inline bool operator<(shared_ptr<T> const & a, shared_ptr<U> const & b)
+{
+ return a._internal_less(b);
+}
+
+template<class T> inline void swap(shared_ptr<T> & a, shared_ptr<T> & b)
+{
+ a.swap(b);
+}
+
+template<class T, class U> shared_ptr<T> static_pointer_cast(shared_ptr<U> const & r)
+{
+ return shared_ptr<T>(r, detail::static_cast_tag());
+}
+
+template<class T, class U> shared_ptr<T> const_pointer_cast(shared_ptr<U> const & r)
+{
+ return shared_ptr<T>(r, detail::const_cast_tag());
+}
+
+template<class T, class U> shared_ptr<T> dynamic_pointer_cast(shared_ptr<U> const & r)
+{
+ return shared_ptr<T>(r, detail::dynamic_cast_tag());
+}
+
+// shared_*_cast names are deprecated. Use *_pointer_cast instead.
+
+template<class T, class U> shared_ptr<T> shared_static_cast(shared_ptr<U> const & r)
+{
+ return shared_ptr<T>(r, detail::static_cast_tag());
+}
+
+template<class T, class U> shared_ptr<T> shared_dynamic_cast(shared_ptr<U> const & r)
+{
+ return shared_ptr<T>(r, detail::dynamic_cast_tag());
+}
+
+template<class T, class U> shared_ptr<T> shared_polymorphic_cast(shared_ptr<U> const & r)
+{
+ return shared_ptr<T>(r, detail::polymorphic_cast_tag());
+}
+
+template<class T, class U> shared_ptr<T> shared_polymorphic_downcast(shared_ptr<U> const & r)
+{
+ BOOST_ASSERT(dynamic_cast<T *>(r.get()) == r.get());
+ return shared_static_cast<T>(r);
+}
+
+// get_pointer() enables boost::mem_fn to recognize shared_ptr
+
+template<class T> inline T * get_pointer(shared_ptr<T> const & p)
+{
+ return p.get();
+}
+
+// operator<<
+
+#if defined(__GNUC__) && (__GNUC__ < 3)
+
+template<class Y> std::ostream & operator<< (std::ostream & os, shared_ptr<Y> const & p)
+{
+ os << p.get();
+ return os;
+}
+
+#else
+
+# if defined(BOOST_MSVC) && BOOST_WORKAROUND(BOOST_MSVC, <= 1200 && __SGI_STL_PORT)
+// MSVC6 has problems finding std::basic_ostream through the using declaration in namespace _STL
+using std::basic_ostream;
+template<class E, class T, class Y> basic_ostream<E, T> & operator<< (basic_ostream<E, T> & os, shared_ptr<Y> const & p)
+# else
+template<class E, class T, class Y> std::basic_ostream<E, T> & operator<< (std::basic_ostream<E, T> & os, shared_ptr<Y> const & p)
+# endif
+{
+ os << p.get();
+ return os;
+}
+
+#endif
+
+// get_deleter (experimental)
+
+#if (defined(__GNUC__) && (__GNUC__ < 3)) || (defined(__EDG_VERSION__) && (__EDG_VERSION__ <= 238))
+
+// g++ 2.9x doesn't allow static_cast<X const *>(void *)
+// apparently EDG 2.38 also doesn't accept it
+
+template<class D, class T> D * get_deleter(shared_ptr<T> const & p)
+{
+ void const * q = p._internal_get_deleter(typeid(D));
+ return const_cast<D *>(static_cast<D const *>(q));
+}
+
+#else
+
+template<class D, class T> D * get_deleter(shared_ptr<T> const & p)
+{
+ return static_cast<D *>(p._internal_get_deleter(typeid(D)));
+}
+
+#endif
+
+} // namespace boost
+
+#ifdef BOOST_MSVC
+# pragma warning(pop)
+#endif
+
+#endif // #if defined(BOOST_NO_MEMBER_TEMPLATES) && !defined(BOOST_MSVC6_MEMBER_TEMPLATES)
+
+#endif // #ifndef BOOST_SHARED_PTR_132_HPP_INCLUDED
diff --git a/boost/boost/serialization/detail/shared_ptr_nmt_132.hpp b/boost/boost/serialization/detail/shared_ptr_nmt_132.hpp
new file mode 100644
index 00000000000..2af2d73f4ac
--- /dev/null
+++ b/boost/boost/serialization/detail/shared_ptr_nmt_132.hpp
@@ -0,0 +1,182 @@
+#ifndef BOOST_DETAIL_SHARED_PTR_NMT_132_HPP_INCLUDED
+#define BOOST_DETAIL_SHARED_PTR_NMT_132_HPP_INCLUDED
+
+//
+// detail/shared_ptr_nmt.hpp - shared_ptr.hpp without member templates
+//
+// (C) Copyright Greg Colvin and Beman Dawes 1998, 1999.
+// Copyright (c) 2001, 2002 Peter Dimov
+//
+// 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/smart_ptr/shared_ptr.htm for documentation.
+//
+
+#include <boost/assert.hpp>
+#include <boost/checked_delete.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/detail/atomic_count.hpp>
+
+#ifndef BOOST_NO_AUTO_PTR
+# include <memory> // for std::auto_ptr
+#endif
+
+#include <algorithm> // for std::swap
+#include <functional> // for std::less
+#include <new> // for std::bad_alloc
+
+namespace boost
+{
+
+template<class T> class shared_ptr
+{
+private:
+
+ typedef detail::atomic_count count_type;
+
+public:
+
+ typedef T element_type;
+ typedef T value_type;
+
+ explicit shared_ptr(T * p = 0): px(p)
+ {
+#ifndef BOOST_NO_EXCEPTIONS
+
+ try // prevent leak if new throws
+ {
+ pn = new count_type(1);
+ }
+ catch(...)
+ {
+ boost::checked_delete(p);
+ throw;
+ }
+
+#else
+
+ pn = new count_type(1);
+
+ if(pn == 0)
+ {
+ boost::checked_delete(p);
+ boost::throw_exception(std::bad_alloc());
+ }
+
+#endif
+ }
+
+ ~shared_ptr()
+ {
+ if(--*pn == 0)
+ {
+ boost::checked_delete(px);
+ delete pn;
+ }
+ }
+
+ shared_ptr(shared_ptr const & r): px(r.px) // never throws
+ {
+ pn = r.pn;
+ ++*pn;
+ }
+
+ shared_ptr & operator=(shared_ptr const & r)
+ {
+ shared_ptr(r).swap(*this);
+ return *this;
+ }
+
+#ifndef BOOST_NO_AUTO_PTR
+
+ explicit shared_ptr(std::auto_ptr<T> & r)
+ {
+ pn = new count_type(1); // may throw
+ px = r.release(); // fix: moved here to stop leak if new throws
+ }
+
+ shared_ptr & operator=(std::auto_ptr<T> & r)
+ {
+ shared_ptr(r).swap(*this);
+ return *this;
+ }
+
+#endif
+
+ void reset(T * p = 0)
+ {
+ BOOST_ASSERT(p == 0 || p != px);
+ shared_ptr(p).swap(*this);
+ }
+
+ T & operator*() const // never throws
+ {
+ BOOST_ASSERT(px != 0);
+ return *px;
+ }
+
+ T * operator->() const // never throws
+ {
+ BOOST_ASSERT(px != 0);
+ return px;
+ }
+
+ T * get() const // never throws
+ {
+ return px;
+ }
+
+ long use_count() const // never throws
+ {
+ return *pn;
+ }
+
+ bool unique() const // never throws
+ {
+ return *pn == 1;
+ }
+
+ void swap(shared_ptr<T> & other) // never throws
+ {
+ std::swap(px, other.px);
+ std::swap(pn, other.pn);
+ }
+
+private:
+
+ T * px; // contained pointer
+ count_type * pn; // ptr to reference counter
+};
+
+template<class T, class U> inline bool operator==(shared_ptr<T> const & a, shared_ptr<U> const & b)
+{
+ return a.get() == b.get();
+}
+
+template<class T, class U> inline bool operator!=(shared_ptr<T> const & a, shared_ptr<U> const & b)
+{
+ return a.get() != b.get();
+}
+
+template<class T> inline bool operator<(shared_ptr<T> const & a, shared_ptr<T> const & b)
+{
+ return std::less<T*>()(a.get(), b.get());
+}
+
+template<class T> void swap(shared_ptr<T> & a, shared_ptr<T> & b)
+{
+ a.swap(b);
+}
+
+// get_pointer() enables boost::mem_fn to recognize shared_ptr
+
+template<class T> inline T * get_pointer(shared_ptr<T> const & p)
+{
+ return p.get();
+}
+
+} // namespace boost
+
+#endif // #ifndef BOOST_DETAIL_SHARED_PTR_NMT_132_HPP_INCLUDED
diff --git a/boost/boost/serialization/detail/stack_constructor.hpp b/boost/boost/serialization/detail/stack_constructor.hpp
new file mode 100644
index 00000000000..de623b0d4f7
--- /dev/null
+++ b/boost/boost/serialization/detail/stack_constructor.hpp
@@ -0,0 +1,73 @@
+#ifndef BOOST_SERIALIZATION_DETAIL_STACH_CONSTRUCTOR_HPP
+#define BOOST_SERIALIZATION_DETAIL_STACH_CONSTRUCTOR_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#if defined(_MSC_VER) && (_MSC_VER <= 1020)
+# pragma warning (disable : 4786) // too long name, harmless warning
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// collections_load_imp.hpp: serialization for loading stl collections
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/aligned_storage.hpp>
+
+namespace boost{
+namespace serialization {
+namespace detail {
+
+// reserve space on stack for an object of type T without actually
+// construction such an object
+template<typename T >
+struct stack_allocate
+{
+ T * address() {
+ return static_cast<T*>(storage_.address());
+ }
+ T & reference() {
+ return * address();
+ }
+private:
+ typedef BOOST_DEDUCED_TYPENAME boost::aligned_storage<
+ sizeof(T),
+ #if BOOST_WORKAROUND(__BORLANDC__,BOOST_TESTED_AT(0x560))
+ 8
+ #else
+ boost::alignment_of<T>::value
+ #endif
+ > type;
+ type storage_;
+};
+
+// construct element on the stack
+template<class Archive, class T>
+struct stack_construct : public stack_allocate<T>
+{
+ stack_construct(Archive & ar, const unsigned int version){
+ // note borland emits a no-op without the explicit namespace
+ boost::serialization::load_construct_data_adl(
+ ar,
+ this->address(),
+ version
+ );
+ }
+ ~stack_construct(){
+ this->address()->~T(); // undo load_construct_data above
+ }
+};
+
+} // detail
+} // serializaition
+} // boost
+
+#endif // BOOST_SERIALIZATION_DETAIL_STACH_CONSTRUCTOR_HPP
diff --git a/boost/boost/serialization/export.hpp b/boost/boost/serialization/export.hpp
new file mode 100644
index 00000000000..502e3a2ca62
--- /dev/null
+++ b/boost/boost/serialization/export.hpp
@@ -0,0 +1,280 @@
+#ifndef BOOST_SERIALIZATION_EXPORT_HPP
+#define BOOST_SERIALIZATION_EXPORT_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// export.hpp: set traits of classes to be serialized
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+// implementation of class export functionality. This is an alternative to
+// "forward declaration" method to provoke instantiation of derived classes
+// that are to be serialized through pointers.
+
+#include <utility>
+
+#include <boost/config.hpp>
+
+// if no archive headers have been included this is a no op
+// this is to permit BOOST_EXPORT etc to be included in a
+// file declaration header
+#if ! defined(BOOST_ARCHIVE_BASIC_ARCHIVE_HPP)
+#define BOOST_CLASS_EXPORT_GUID_ARCHIVE_LIST(T, K, ASEQ)
+
+#else
+#include <boost/static_assert.hpp>
+#include <boost/preprocessor/stringize.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/mpl/empty.hpp>
+#include <boost/mpl/front.hpp>
+#include <boost/mpl/pop_front.hpp>
+#include <boost/mpl/void.hpp>
+#include <boost/mpl/identity.hpp>
+
+#include <boost/archive/detail/known_archive_types.hpp>
+#include <boost/serialization/force_include.hpp>
+#include <boost/serialization/type_info_implementation.hpp>
+#include <boost/serialization/is_abstract.hpp>
+
+namespace boost {
+namespace archive {
+namespace detail {
+
+// forward template declarations
+class basic_pointer_iserializer;
+template<class Archive, class T>
+BOOST_DLLEXPORT const basic_pointer_iserializer &
+instantiate_pointer_iserializer(Archive * ar, T *) BOOST_USED;
+
+class basic_pointer_oserializer;
+template<class Archive, class T>
+BOOST_DLLEXPORT const basic_pointer_oserializer &
+instantiate_pointer_oserializer(Archive * ar, T *) BOOST_USED;
+
+namespace export_impl
+{
+ struct nothing{
+ static void instantiate(){}
+ };
+
+ template<class Archive, class T>
+ struct archive {
+ struct i {
+ static void invoke(){
+ instantiate_pointer_iserializer(
+ static_cast<Archive *>(NULL),
+ static_cast<T *>(NULL)
+ );
+ }
+ };
+ struct o {
+ static void invoke(){
+ instantiate_pointer_oserializer(
+ static_cast<Archive *>(NULL),
+ static_cast<T *>(NULL)
+ );
+ }
+ };
+ static void instantiate(){
+ #if defined(__GNUC__) && (__GNUC__ >= 3)
+ BOOST_STATIC_ASSERT(
+ Archive::is_loading::value || Archive::is_saving::value
+ );
+ #endif
+ typedef BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ BOOST_DEDUCED_TYPENAME Archive::is_saving,
+ mpl::identity<o>,
+ // else
+ BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ BOOST_DEDUCED_TYPENAME Archive::is_loading,
+ mpl::identity<i>,
+ // else
+ mpl::identity<nothing>
+ > >::type typex;
+ typex::invoke();
+ }
+ };
+
+ template<class ASeq, class T>
+ struct for_each_archive {
+ private:
+ typedef BOOST_DEDUCED_TYPENAME mpl::pop_front<ASeq>::type tail;
+ typedef BOOST_DEDUCED_TYPENAME mpl::front<ASeq>::type head;
+ public:
+ static void instantiate(){
+ archive<head, T>::instantiate();
+ typedef BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ mpl::empty<tail>,
+ mpl::identity<nothing>,
+ mpl::identity<for_each_archive<tail, T> >
+ >::type typex;
+ typex::instantiate();
+ }
+ };
+
+} // namespace export_impl
+
+// strictly conforming
+template<class T, class ASeq>
+struct export_generator {
+ export_generator(){
+ export_impl::for_each_archive<ASeq, T>::instantiate();
+ }
+ static const export_generator instance;
+};
+
+template<class T, class ASeq>
+const export_generator<T, ASeq>
+ export_generator<T, ASeq>::instance;
+
+// instantiation of this template creates a static object.
+template<class T>
+struct guid_initializer {
+ typedef BOOST_DEDUCED_TYPENAME boost::serialization::type_info_implementation<T>::type eti_type;
+ static void export_register(const char *key){
+ eti_type::export_register(key);
+ }
+ static const guid_initializer instance;
+ guid_initializer(const char *key = 0) BOOST_USED ;
+};
+
+template<class T>
+guid_initializer<T>::guid_initializer(const char *key){
+ if(0 != key)
+ export_register(key);
+}
+
+template<class T>
+const guid_initializer<T> guid_initializer<T>::instance;
+
+// only gcc seems to be able to explicitly instantiate a static instance.
+// but all can instantiate a function that refers to a static instance
+
+// the following optimization - inhibiting explicit instantiation for abstract
+// classes breaks msvc compliles
+template<class T, class ASeq>
+struct export_instance {
+ struct abstract {
+ static const export_generator<T, ASeq> *
+ invoke(){
+ return 0;
+ }
+ };
+ struct not_abstract {
+ static const export_generator<T, ASeq> *
+ invoke(){
+ return & export_generator<T, ASeq>::instance;
+ }
+ };
+};
+
+template<class T, class ASeq>
+BOOST_DLLEXPORT
+std::pair<const export_generator<T, ASeq> *, const guid_initializer<T> *>
+export_instance_invoke() {
+ typedef BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ serialization::is_abstract<T>,
+ mpl::identity<BOOST_DEDUCED_TYPENAME export_instance<T, ASeq>::abstract>,
+ mpl::identity<BOOST_DEDUCED_TYPENAME export_instance<T, ASeq>::not_abstract>
+ >::type typex;
+ return std::pair<const export_generator<T, ASeq> *, const guid_initializer<T> *>(
+ typex::invoke(),
+ & guid_initializer<T>::instance
+ );
+}
+
+template<class T, class ASeq>
+struct export_archives {
+ struct empty_archive_list {
+ static BOOST_DLLEXPORT
+ std::pair<const export_generator<T, ASeq> *, const guid_initializer<T> *>
+ invoke(){
+ return std::pair<const export_generator<T, ASeq> *,
+ const guid_initializer<T> *>(0, 0);
+ }
+ };
+ struct non_empty_archive_list {
+ static BOOST_DLLEXPORT
+ std::pair<const export_generator<T, ASeq> *, const guid_initializer<T> *>
+ invoke(){
+ return export_instance_invoke<T, ASeq>();
+ }
+ };
+};
+
+template<class T, class ASeq>
+BOOST_DLLEXPORT
+std::pair<const export_generator<T, ASeq> *, const guid_initializer<T> *>
+export_archives_invoke(T &, ASeq &){
+ typedef BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ mpl::empty<ASeq>,
+ mpl::identity<BOOST_DEDUCED_TYPENAME export_archives<T, ASeq>::empty_archive_list>,
+ mpl::identity<BOOST_DEDUCED_TYPENAME export_archives<T, ASeq>::non_empty_archive_list>
+ >::type typex;
+ return typex::invoke();
+}
+
+} // namespace detail
+} // namespace archive
+} // namespace boost
+
+#define BOOST_CLASS_EXPORT_GUID_ARCHIVE_LIST(T, K, ASEQ) \
+ namespace boost { \
+ namespace archive { \
+ namespace detail { \
+ template<> \
+ const guid_initializer< T > \
+ guid_initializer< T >::instance(K); \
+ template \
+ BOOST_DLLEXPORT \
+ std::pair<const export_generator<T, ASEQ> *, const guid_initializer< T > *> \
+ export_archives_invoke<T, ASEQ>(T &, ASEQ &); \
+ } } } \
+ /**/
+
+#endif
+
+// check for unnecessary export. T isn't polymorphic so there is no
+// need to export it.
+#define BOOST_CLASS_EXPORT_CHECK(T) \
+ BOOST_STATIC_WARNING( \
+ boost::serialization::type_info_implementation< T > \
+ ::type::is_polymorphic::value \
+ ); \
+ /**/
+
+// the default list of archives types for which code id generated
+#define BOOST_CLASS_EXPORT_GUID(T, K) \
+ BOOST_CLASS_EXPORT_GUID_ARCHIVE_LIST( \
+ T, \
+ K, \
+ boost::archive::detail::known_archive_types::type \
+ ) \
+ /**/
+
+// the default exportable class identifier is the class name
+#define BOOST_CLASS_EXPORT_ARCHIVE_LIST(T, ASEQ) \
+ BOOST_CLASS_EXPORT_GUID_ARCHIVE_LIST(T, BOOST_PP_STRINGIZE(T), A)
+
+// the default exportable class identifier is the class name
+// the default list of archives types for which code id generated
+// are the originally included with this serialization system
+#define BOOST_CLASS_EXPORT(T) \
+ BOOST_CLASS_EXPORT_GUID_ARCHIVE_LIST( \
+ T, \
+ BOOST_PP_STRINGIZE(T), \
+ boost::archive::detail::known_archive_types::type \
+ ) \
+ /**/
+
+#endif // BOOST_SERIALIZATION_EXPORT_HPP
diff --git a/boost/boost/serialization/extended_type_info.hpp b/boost/boost/serialization/extended_type_info.hpp
new file mode 100644
index 00000000000..b2a29eed674
--- /dev/null
+++ b/boost/boost/serialization/extended_type_info.hpp
@@ -0,0 +1,94 @@
+#ifndef BOOST_SERIALIZATION_EXTENDED_TYPE_INFO_HPP
+#define BOOST_SERIALIZATION_EXTENDED_TYPE_INFO_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// extended_type_info.hpp: interface for portable version of type_info
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+// for now, extended type info is part of the serialization libraries
+// this could change in the future.
+#include <boost/config.hpp>
+#include <boost/noncopyable.hpp>
+#include <boost/serialization/config.hpp>
+
+#include <boost/config/abi_prefix.hpp> // must be the last header
+#ifdef BOOST_MSVC
+# pragma warning(push)
+# pragma warning(disable : 4251 4231 4660 4275)
+#endif
+
+#define BOOST_SERIALIZATION_MAX_KEY_SIZE 128
+
+namespace boost {
+namespace serialization {
+
+class BOOST_SERIALIZATION_DECL(BOOST_PP_EMPTY()) extended_type_info :
+ private boost::noncopyable
+{
+private:
+ virtual bool
+ less_than(const extended_type_info &rhs) const = 0;
+ int type_info_key_cmp(const extended_type_info & rhs) const;
+
+ // used to uniquely identify the type of class derived from this one
+ // so that different derivations of this class can be simultaneously
+ // included in implementation of sets and maps.
+ const char * m_type_info_key;
+ // flag to indicate wheter its been registered by type;
+ bool m_self_registered;
+ // flag to indicate wheter its been registered by type;
+ bool m_key_registered;
+ // flag indicating that no virtual function should be called here
+ // this is necessary since it seems that at least one compiler (borland
+ // and one version of gcc call less_than above when erasing even
+ // when given an iterator argument.
+ bool m_is_destructing;
+protected:
+ const char * m_key;
+ extended_type_info(const char * type_info_key);
+ // account for bogus gcc warning
+ #if defined(__GNUC__)
+ virtual
+ #endif
+ ~extended_type_info();
+public:
+ void self_register();
+ void key_register(const char *key);
+ bool is_destructing() const {
+ return m_is_destructing;
+ }
+ bool operator<(const extended_type_info &rhs) const;
+ bool operator==(const extended_type_info &rhs) const {
+ return this == & rhs;
+ }
+ bool operator!=(const extended_type_info &rhs) const {
+ return this != & rhs;
+ }
+ const char * get_key() const {
+ return m_key;
+ }
+ static const extended_type_info * find(const char *key);
+ static const extended_type_info * find(const extended_type_info * t);
+};
+
+} // namespace serialization
+} // namespace boost
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+#include <boost/config/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // BOOST_SERIALIZATION_EXTENDED_TYPE_INFO_HPP
+
diff --git a/boost/boost/serialization/extended_type_info_no_rtti.hpp b/boost/boost/serialization/extended_type_info_no_rtti.hpp
new file mode 100644
index 00000000000..cdafeb2f20c
--- /dev/null
+++ b/boost/boost/serialization/extended_type_info_no_rtti.hpp
@@ -0,0 +1,133 @@
+#ifndef BOOST_EXTENDED_TYPE_INFO_NO_RTTI_HPP
+#define BOOST_EXTENDED_TYPE_INFO_NO_RTTI_HPP
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+// extended_type_info_no_rtti.hpp: implementation for version that depends
+// on runtime typing (rtti - typeid) but uses a user specified string
+// as the portable class identifier.
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+#include <cassert>
+#include <boost/config.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_const.hpp>
+
+#include <boost/serialization/extended_type_info.hpp>
+#include <boost/mpl/bool.hpp>
+
+#include <boost/config/abi_prefix.hpp> // must be the last header
+#ifdef BOOST_MSVC
+# pragma warning(push)
+# pragma warning(disable : 4251 4231 4660 4275)
+#endif
+
+namespace boost {
+namespace serialization {
+namespace detail {
+///////////////////////////////////////////////////////////////////////
+// define a special type_info that doesn't depend on rtti which is not
+// available in all situations.
+
+// common base class to share type_info_key. This is used to
+// identify the method used to keep track of the extended type
+class BOOST_SERIALIZATION_DECL(BOOST_PP_EMPTY()) extended_type_info_no_rtti_0 :
+ public extended_type_info
+{
+ virtual bool
+ less_than(const boost::serialization::extended_type_info &rhs) const ;
+protected:
+ extended_type_info_no_rtti_0();
+ // account for bogus gcc warning
+ #if defined(__GNUC__)
+ virtual
+ #endif
+ ~extended_type_info_no_rtti_0();
+public:
+ struct is_polymorphic
+ {
+ typedef boost::mpl::bool_<true> type;
+ BOOST_STATIC_CONSTANT(bool, value = is_polymorphic::type::value);
+ };
+};
+
+template<class T>
+class extended_type_info_no_rtti_1 :
+ public extended_type_info_no_rtti_0
+{
+protected:
+ extended_type_info_no_rtti_1(){}
+public:
+ // note borland complains at making this destructor protected
+ ~extended_type_info_no_rtti_1(){};
+ static const boost::serialization::extended_type_info *
+ get_derived_extended_type_info(const T & t){
+ // find the type that corresponds to the most derived type.
+ // this implementation doesn't depend on typeid() but assumes
+ // that the specified type has a function of the following signature.
+ // A common implemention of such a function is to define as a virtual
+ // function.
+ const char * derived_key = t.get_key();
+ assert(NULL != derived_key);
+ return boost::serialization::extended_type_info::find(derived_key);
+ }
+ static boost::serialization::extended_type_info *
+ get_instance(){
+ static extended_type_info_no_rtti_1<T> instance;
+ return & instance;
+ }
+ static void
+ export_register(const char * key){
+ boost::serialization::extended_type_info * eti;
+ eti = get_instance();
+ eti->key_register(key); // initialize key and add to table
+ eti->self_register(); // add type to type table
+ }
+};
+} // namespace detail
+
+template<class T>
+class extended_type_info_no_rtti :
+ public detail::extended_type_info_no_rtti_1<const T>
+{
+ // private constructor to inhibit any existence other than the
+ // static one
+ extended_type_info_no_rtti(){}
+ ~extended_type_info_no_rtti(){};
+};
+
+} // namespace serialization
+} // namespace boost
+
+///////////////////////////////////////////////////////////////////////////////
+// If no other implementation has been designated as default,
+// use this one. To use this implementation as the default, specify it
+// before any of the other headers.
+
+#ifndef BOOST_SERIALIZATION_DEFAULT_TYPE_INFO
+ #define BOOST_SERIALIZATION_DEFAULT_TYPE_INFO
+ namespace boost {
+ namespace serialization {
+ template<class T>
+ struct extended_type_info_impl {
+ typedef BOOST_DEDUCED_TYPENAME
+ boost::serialization::extended_type_info_no_rtti<const T> type;
+ };
+ } // namespace serialization
+ } // namespace boost
+#endif
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+#include <boost/config/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // BOOST_EXTENDED_TYPE_INFO_NO_RTTI_HPP
diff --git a/boost/boost/serialization/extended_type_info_typeid.hpp b/boost/boost/serialization/extended_type_info_typeid.hpp
new file mode 100644
index 00000000000..b6e8f505026
--- /dev/null
+++ b/boost/boost/serialization/extended_type_info_typeid.hpp
@@ -0,0 +1,138 @@
+#ifndef BOOST_SERIALIZATION_EXTENDED_TYPE_INFO_TYPEID_HPP
+#define BOOST_SERIALIZATION_EXTENDED_TYPE_INFO_TYPEID_HPP
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+// extended_type_info_typeid.hpp: implementation for version that depends
+// on runtime typing (rtti - typeid) but uses a user specified string
+// as the portable class identifier.
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <typeinfo>
+#include <boost/config.hpp>
+
+//#include <boost/static_warning.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_polymorphic.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/preprocessor/stringize.hpp>
+
+#include <boost/serialization/extended_type_info.hpp>
+
+#include <boost/config/abi_prefix.hpp> // must be the last header
+#ifdef BOOST_MSVC
+# pragma warning(push)
+# pragma warning(disable : 4251 4231 4660 4275)
+#endif
+
+namespace boost {
+namespace serialization {
+
+namespace detail {
+
+class BOOST_SERIALIZATION_DECL(BOOST_PP_EMPTY()) extended_type_info_typeid_0 :
+ public extended_type_info
+{
+private:
+ virtual bool
+ less_than(const extended_type_info &rhs) const;
+protected:
+ static const extended_type_info *
+ get_derived_extended_type_info(const std::type_info & ti);
+ extended_type_info_typeid_0();
+ // account for bogus gcc warning
+ #if defined(__GNUC__)
+ virtual
+ #endif
+ ~extended_type_info_typeid_0();
+public:
+ virtual const std::type_info & get_eti() const = 0;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// layer to fold T and const T into the same table entry.
+template<class T>
+class extended_type_info_typeid_1 :
+ public detail::extended_type_info_typeid_0
+{
+private:
+ virtual const std::type_info & get_eti() const {
+ return typeid(T);
+ }
+protected:
+ // private constructor to inhibit any existence other than the
+ // static one
+ extended_type_info_typeid_1() :
+ detail::extended_type_info_typeid_0()
+ {
+ self_register(); // add type to type table
+ }
+public:
+ struct is_polymorphic
+ {
+ typedef BOOST_DEDUCED_TYPENAME boost::is_polymorphic<T>::type type;
+ BOOST_STATIC_CONSTANT(bool, value = is_polymorphic::type::value);
+ };
+ static const extended_type_info *
+ get_derived_extended_type_info(const T & t){
+ // note: this implementation - based on usage of typeid (rtti)
+ // only works if the class has at least one virtual function.
+// BOOST_STATIC_WARNING(
+// static_cast<bool>(is_polymorphic::value)
+// );
+ return detail::extended_type_info_typeid_0::get_derived_extended_type_info(typeid(t));
+ }
+ static extended_type_info *
+ get_instance(){
+ static extended_type_info_typeid_1<T> instance;
+ return & instance;
+ }
+ static void
+ export_register(const char * key){
+ get_instance()->key_register(key);
+ }
+};
+
+} // namespace detail
+
+///////////////////////////////////////////////////////////////////////////////
+template<class T>
+class extended_type_info_typeid :
+ public detail::extended_type_info_typeid_1<const T>
+{};
+
+} // namespace serialization
+} // namespace boost
+
+///////////////////////////////////////////////////////////////////////////////
+// If no other implementation has been designated as default,
+// use this one. To use this implementation as the default, specify it
+// before any of the other headers.
+#ifndef BOOST_SERIALIZATION_DEFAULT_TYPE_INFO
+ #define BOOST_SERIALIZATION_DEFAULT_TYPE_INFO
+ namespace boost {
+ namespace serialization {
+ template<class T>
+ struct extended_type_info_impl {
+ typedef BOOST_DEDUCED_TYPENAME
+ boost::serialization::extended_type_info_typeid<T> type;
+ };
+ } // namespace serialization
+ } // namespace boost
+#endif
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+#include <boost/config/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // BOOST_SERIALIZATION_EXTENDED_TYPE_INFO_TYPEID_HPP
diff --git a/boost/boost/serialization/force_include.hpp b/boost/boost/serialization/force_include.hpp
new file mode 100644
index 00000000000..8d5615a2dd5
--- /dev/null
+++ b/boost/boost/serialization/force_include.hpp
@@ -0,0 +1,61 @@
+#ifndef BOOST_SERIALIZATION_FORCE_INCLUDE_HPP
+#define BOOST_SERIALIZATION_FORCE_INCLUDE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// force_include.hpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+// implementation of class export functionality. This is an alternative to
+// "forward declaration" method to provoke instantiation of derived classes
+// that are to be serialized through pointers.
+
+#include <boost/config.hpp>
+
+// the following help macro is to guarentee that certain coded
+// is not removed by over-eager linker optimiser. In certain cases
+// we create static objects must be created but are actually never
+// referenced - creation has a side-effect such as global registration
+// which is important to us. We make an effort to refer these objects
+// so that a smart linker won't remove them as being unreferenced.
+// In microsoft compilers, inlining the code that does the referring
+// means the code gets lost and the static object is not included
+// in the library and hence never registered. This manifests itself
+// in an ungraceful crash at runtime when (and only when) built in
+// release mode.
+
+#if defined(BOOST_HAS_DECLSPEC) && !defined(__COMO__)
+# if defined(__BORLANDC__)
+# define BOOST_DLLEXPORT __export
+# else
+# define BOOST_DLLEXPORT __declspec(dllexport)
+# endif
+#elif ! defined(_WIN32) && ! defined(_WIN64)
+# if defined(__MWERKS__)
+# // define BOOST_USED __attribute__ ((used))
+# elif defined(__GNUC__) && (__GNUC__ >= 3)
+# define BOOST_USED __attribute__ ((used))
+# elif defined(__INTEL_COMPILER) && (BOOST_INTEL_CXX_VERSION >= 800)
+# define BOOST_USED __attribute__ ((used))
+# endif
+#endif
+
+#ifndef BOOST_USED
+# define BOOST_USED
+#endif
+
+#ifndef BOOST_DLLEXPORT
+# define BOOST_DLLEXPORT
+#endif
+
+#endif // BOOST_SERIALIZATION_FORCE_INCLUDE_HPP
diff --git a/boost/boost/serialization/hash_collections_load_imp.hpp b/boost/boost/serialization/hash_collections_load_imp.hpp
new file mode 100644
index 00000000000..cd5bea8d189
--- /dev/null
+++ b/boost/boost/serialization/hash_collections_load_imp.hpp
@@ -0,0 +1,58 @@
+#ifndef BOOST_SERIALIZATION_HASH_COLLECTIONS_LOAD_IMP_HPP
+#define BOOST_SERIALIZATION_HASH_COLLECTIONS_LOAD_IMP_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+# pragma warning (disable : 4786) // too long name, harmless warning
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// hash_collections_load_imp.hpp: serialization for loading stl collections
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+// helper function templates for serialization of hashed collections
+#include <boost/config.hpp>
+#include <boost/serialization/nvp.hpp>
+#include <boost/serialization/collections_load_imp.hpp>
+
+namespace boost{
+namespace serialization {
+namespace stl {
+
+//////////////////////////////////////////////////////////////////////
+// implementation of serialization for STL containers
+//
+template<class Archive, class Container, class InputFunction>
+inline void load_hash_collection(Archive & ar, Container &s)
+{
+ s.clear();
+ // retrieve number of elements
+ unsigned int count;
+ unsigned int item_version(0);
+ unsigned int bucket_count;;
+ ar >> BOOST_SERIALIZATION_NVP(count);
+ if(3 < ar.get_library_version()){
+ ar >> BOOST_SERIALIZATION_NVP(bucket_count);
+ ar >> BOOST_SERIALIZATION_NVP(item_version);
+ }
+ #if ! defined(__MWERKS__)
+ s.resize(bucket_count);
+ #endif
+ InputFunction ifunc;
+ while(count-- > 0){
+ ifunc(ar, s, item_version);
+ }
+}
+
+} // namespace stl
+} // namespace serialization
+} // namespace boost
+
+#endif //BOOST_SERIALIZATION_HASH_COLLECTIONS_LOAD_IMP_HPP
diff --git a/boost/boost/serialization/hash_collections_save_imp.hpp b/boost/boost/serialization/hash_collections_save_imp.hpp
new file mode 100644
index 00000000000..e0dc0a24dff
--- /dev/null
+++ b/boost/boost/serialization/hash_collections_save_imp.hpp
@@ -0,0 +1,66 @@
+#ifndef BOOST_SERIALIZATION_HASH_COLLECTIONS_SAVE_IMP_HPP
+#define BOOST_SERIALIZATION_HASH_COLLECTIONS_SAVE_IMP_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// hash_collections_save_imp.hpp: serialization for stl collections
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+// helper function templates for serialization of collections
+
+#include <boost/config.hpp>
+#include <boost/serialization/nvp.hpp>
+#include <boost/serialization/serialization.hpp>
+#include <boost/serialization/version.hpp>
+
+namespace boost{
+namespace serialization {
+namespace stl {
+
+//////////////////////////////////////////////////////////////////////
+// implementation of serialization for STL containers
+//
+
+template<class Archive, class Container>
+inline void save_hash_collection(Archive & ar, const Container &s)
+{
+ // record number of elements
+ unsigned int count = s.size();
+ ar << BOOST_SERIALIZATION_NVP(count);
+ // make sure the target type is registered so we can retrieve
+ // the version when we load
+ if(3 < ar.get_library_version()){
+ const unsigned int bucket_count = s.bucket_count();
+ ar << BOOST_SERIALIZATION_NVP(bucket_count);
+ const unsigned int item_version = version<BOOST_DEDUCED_TYPENAME Container::value_type>::value;
+ ar << BOOST_SERIALIZATION_NVP(item_version);
+ }
+ BOOST_DEDUCED_TYPENAME Container::const_iterator it = s.begin();
+ while(count-- > 0){
+ // note borland emits a no-op without the explicit namespace
+ boost::serialization::save_construct_data_adl(
+ ar,
+ &(*it),
+ boost::serialization::version<
+ BOOST_DEDUCED_TYPENAME Container::value_type
+ >::value
+ );
+ ar << boost::serialization::make_nvp("item", *it++);
+ }
+}
+
+} // namespace stl
+} // namespace serialization
+} // namespace boost
+
+#endif //BOOST_SERIALIZATION_HASH_COLLECTIONS_SAVE_IMP_HPP
diff --git a/boost/boost/serialization/hash_map.hpp b/boost/boost/serialization/hash_map.hpp
new file mode 100644
index 00000000000..ee266d37bde
--- /dev/null
+++ b/boost/boost/serialization/hash_map.hpp
@@ -0,0 +1,175 @@
+#ifndef BOOST_SERIALIZATION_HASH_MAP_HPP
+#define BOOST_SERIALIZATION_HASH_MAP_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// serialization/hash_map.hpp:
+// serialization for stl hash_map templates
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+#ifdef BOOST_HAS_HASH
+#include BOOST_HASH_MAP_HEADER
+
+#include <boost/serialization/utility.hpp>
+#include <boost/serialization/hash_collections_save_imp.hpp>
+#include <boost/serialization/hash_collections_load_imp.hpp>
+#include <boost/serialization/split_free.hpp>
+
+namespace boost {
+namespace serialization {
+
+template<
+ class Archive,
+ class Key,
+ class HashFcn,
+ class EqualKey,
+ class Allocator
+>
+inline void save(
+ Archive & ar,
+ const BOOST_STD_EXTENSION_NAMESPACE::hash_map<
+ Key, HashFcn, EqualKey, Allocator
+ > &t,
+ const unsigned int file_version
+){
+ boost::serialization::stl::save_hash_collection<
+ Archive,
+ BOOST_STD_EXTENSION_NAMESPACE::hash_map<
+ Key, HashFcn, EqualKey, Allocator
+ >
+ >(ar, t);
+}
+
+template<
+ class Archive,
+ class Key,
+ class HashFcn,
+ class EqualKey,
+ class Allocator
+>
+inline void load(
+ Archive & ar,
+ BOOST_STD_EXTENSION_NAMESPACE::hash_map<
+ Key, HashFcn, EqualKey, Allocator
+ > &t,
+ const unsigned int file_version
+){
+ boost::serialization::stl::load_hash_collection<
+ Archive,
+ BOOST_STD_EXTENSION_NAMESPACE::hash_map<
+ Key, HashFcn, EqualKey, Allocator
+ >,
+ boost::serialization::stl::archive_input_unique<
+ Archive,
+ BOOST_STD_EXTENSION_NAMESPACE::hash_map<
+ Key, HashFcn, EqualKey, Allocator
+ >
+ >
+ >(ar, t);
+}
+
+// split non-intrusive serialization function member into separate
+// non intrusive save/load member functions
+template<
+ class Archive,
+ class Key,
+ class HashFcn,
+ class EqualKey,
+ class Allocator
+>
+inline void serialize(
+ Archive & ar,
+ BOOST_STD_EXTENSION_NAMESPACE::hash_map<
+ Key, HashFcn, EqualKey, Allocator
+ > &t,
+ const unsigned int file_version
+){
+ boost::serialization::split_free(ar, t, file_version);
+}
+
+// hash_multimap
+template<
+ class Archive,
+ class Key,
+ class HashFcn,
+ class EqualKey,
+ class Allocator
+>
+inline void save(
+ Archive & ar,
+ const BOOST_STD_EXTENSION_NAMESPACE::hash_multimap<
+ Key, HashFcn, EqualKey, Allocator
+ > &t,
+ const unsigned int file_version
+){
+ boost::serialization::stl::save_hash_collection<
+ Archive,
+ BOOST_STD_EXTENSION_NAMESPACE::hash_multimap<
+ Key, HashFcn, EqualKey, Allocator
+ >
+ >(ar, t);
+}
+
+template<
+ class Archive,
+ class Key,
+ class HashFcn,
+ class EqualKey,
+ class Allocator
+>
+inline void load(
+ Archive & ar,
+ BOOST_STD_EXTENSION_NAMESPACE::hash_multimap<
+ Key, HashFcn, EqualKey, Allocator
+ > &t,
+ const unsigned int file_version
+){
+ boost::serialization::stl::load_hash_collection<
+ Archive,
+ BOOST_STD_EXTENSION_NAMESPACE::hash_multimap<
+ Key, HashFcn, EqualKey, Allocator
+ >,
+ boost::serialization::stl::archive_input_multi<
+ Archive,
+ BOOST_STD_EXTENSION_NAMESPACE::hash_multimap<
+ Key, HashFcn, EqualKey, Allocator
+ >
+ >
+ >(ar, t);
+}
+
+// split non-intrusive serialization function member into separate
+// non intrusive save/load member functions
+template<
+ class Archive,
+ class Key,
+ class HashFcn,
+ class EqualKey,
+ class Allocator
+>
+inline void serialize(
+ Archive & ar,
+ BOOST_STD_EXTENSION_NAMESPACE::hash_multimap<
+ Key, HashFcn, EqualKey, Allocator
+ > &t,
+ const unsigned int file_version
+){
+ boost::serialization::split_free(ar, t, file_version);
+}
+
+} // namespace serialization
+} // namespace boost
+
+#endif // BOOST_HAS_HASH
+#endif // BOOST_SERIALIZATION_HASH_MAP_HPP
diff --git a/boost/boost/serialization/hash_set.hpp b/boost/boost/serialization/hash_set.hpp
new file mode 100644
index 00000000000..eca92303fd2
--- /dev/null
+++ b/boost/boost/serialization/hash_set.hpp
@@ -0,0 +1,178 @@
+#ifndef BOOST_SERIALIZATION_HASH_SET_HPP
+#define BOOST_SERIALIZATION_HASH_SET_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// hash_set.hpp: serialization for stl hash_set templates
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+#ifdef BOOST_HAS_HASH
+#include BOOST_HASH_SET_HEADER
+
+#include <boost/serialization/hash_collections_save_imp.hpp>
+#include <boost/serialization/hash_collections_load_imp.hpp>
+#include <boost/serialization/split_free.hpp>
+
+namespace boost {
+namespace serialization {
+
+template<
+ class Archive,
+ class Key,
+ class HashFcn,
+ class EqualKey,
+ class Allocator
+>
+inline void save(
+ Archive & ar,
+ const BOOST_STD_EXTENSION_NAMESPACE::hash_set<
+ Key, HashFcn, EqualKey, Allocator
+ > &t,
+ const unsigned int file_version
+){
+ boost::serialization::stl::save_hash_collection<
+ Archive,
+ BOOST_STD_EXTENSION_NAMESPACE::hash_set<
+ Key, HashFcn, EqualKey, Allocator
+ >
+ >(ar, t);
+}
+
+template<
+ class Archive,
+ class Key,
+ class HashFcn,
+ class EqualKey,
+ class Allocator
+>
+inline void load(
+ Archive & ar,
+ BOOST_STD_EXTENSION_NAMESPACE::hash_set<
+ Key, HashFcn, EqualKey, Allocator
+ > &t,
+ const unsigned int file_version
+){
+ boost::serialization::stl::load_hash_collection<
+ Archive,
+ BOOST_STD_EXTENSION_NAMESPACE::hash_set<
+ Key, HashFcn, EqualKey, Allocator
+ >,
+ boost::serialization::stl::archive_input_unique<
+ Archive,
+ BOOST_STD_EXTENSION_NAMESPACE::hash_set<
+ Key, HashFcn, EqualKey, Allocator
+ >
+ >
+ >(ar, t);
+}
+
+// split non-intrusive serialization function member into separate
+// non intrusive save/load member functions
+template<
+ class Archive,
+ class Key,
+ class HashFcn,
+ class EqualKey,
+ class Allocator
+>
+inline void serialize(
+ Archive & ar,
+ BOOST_STD_EXTENSION_NAMESPACE::hash_set<
+ Key, HashFcn, EqualKey, Allocator
+ > &t,
+ const unsigned int file_version
+){
+ boost::serialization::split_free(ar, t, file_version);
+}
+
+// hash_multiset
+template<
+ class Archive,
+ class Key,
+ class HashFcn,
+ class EqualKey,
+ class Allocator
+>
+inline void save(
+ Archive & ar,
+ const BOOST_STD_EXTENSION_NAMESPACE::hash_multiset<
+ Key, HashFcn, EqualKey, Allocator
+ > &t,
+ const unsigned int file_version
+){
+ boost::serialization::stl::save_hash_collection<
+ Archive,
+ BOOST_STD_EXTENSION_NAMESPACE::hash_multiset<
+ Key, HashFcn, EqualKey, Allocator
+ >
+ >(ar, t);
+}
+
+template<
+ class Archive,
+ class Key,
+ class HashFcn,
+ class EqualKey,
+ class Allocator
+>
+inline void load(
+ Archive & ar,
+ BOOST_STD_EXTENSION_NAMESPACE::hash_multiset<
+ Key, HashFcn, EqualKey, Allocator
+ > &t,
+ const unsigned int file_version
+){
+ boost::serialization::stl::load_hash_collection<
+ Archive,
+ BOOST_STD_EXTENSION_NAMESPACE::hash_multiset<
+ Key, HashFcn, EqualKey, Allocator
+ >,
+ boost::serialization::stl::archive_input_multi<
+ Archive,
+ BOOST_STD_EXTENSION_NAMESPACE::hash_multiset<
+ Key, HashFcn, EqualKey, Allocator
+ >
+ >
+ >(ar, t);
+}
+
+// split non-intrusive serialization function member into separate
+// non intrusive save/load member functions
+template<
+ class Archive,
+ class Key,
+ class HashFcn,
+ class EqualKey,
+ class Allocator
+>
+inline void serialize(
+ Archive & ar,
+ BOOST_STD_EXTENSION_NAMESPACE::hash_multiset<
+ Key, HashFcn, EqualKey, Allocator
+ > & t,
+ const unsigned int file_version
+){
+ boost::serialization::split_free(ar, t, file_version);
+}
+
+} // namespace serialization
+} // namespace boost
+
+#include <boost/serialization/collection_traits.hpp>
+
+BOOST_SERIALIZATION_COLLECTION_TRAITS(BOOST_STD_EXTENSION_NAMESPACE::hash_set)
+BOOST_SERIALIZATION_COLLECTION_TRAITS(BOOST_STD_EXTENSION_NAMESPACE::hash_multiset)
+
+#endif // BOOST_HAS_HASH
+#endif // BOOST_SERIALIZATION_HASH_SET_HPP
diff --git a/boost/boost/serialization/is_abstract.hpp b/boost/boost/serialization/is_abstract.hpp
new file mode 100644
index 00000000000..5691006fc54
--- /dev/null
+++ b/boost/boost/serialization/is_abstract.hpp
@@ -0,0 +1,52 @@
+#ifndef BOOST_SERIALIZATION_IS_ABSTRACT_CLASS_HPP
+#define BOOST_SERIALIZATION_IS_ABSTRACT_CLASS_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// is_abstract_class.hpp:
+
+// (C) Copyright 2002 Rani Sharoni (rani_sharoni@hotmail.com) and Robert Ramey
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/type_traits/is_abstract.hpp>
+
+namespace boost {
+namespace serialization {
+ template<class T>
+ struct is_abstract {
+ // default to false if not supported
+ #ifdef BOOST_NO_IS_ABSTRACT
+ typedef BOOST_DEDUCED_TYPENAME mpl::bool_<false> type;
+ BOOST_STATIC_CONSTANT(bool, value = false);
+ #else
+ typedef BOOST_DEDUCED_TYPENAME boost::is_abstract<T>::type type;
+ BOOST_STATIC_CONSTANT(bool, value = type::value);
+ #endif
+ };
+} // namespace serialization
+} // namespace boost
+
+// define a macro to make explicit designation of this more transparent
+#define BOOST_IS_ABSTRACT(T) \
+namespace boost { \
+namespace serialization { \
+template<> \
+struct is_abstract< T > { \
+ typedef mpl::bool_<true> type; \
+ BOOST_STATIC_CONSTANT(bool, value = true); \
+}; \
+} \
+} \
+/**/
+
+#endif //BOOST_SERIALIZATION_IS_ABSTRACT_CLASS_HPP
diff --git a/boost/boost/serialization/level.hpp b/boost/boost/serialization/level.hpp
new file mode 100644
index 00000000000..a851c7f30a5
--- /dev/null
+++ b/boost/boost/serialization/level.hpp
@@ -0,0 +1,120 @@
+#ifndef BOOST_SERIALIZATION_LEVEL_HPP
+#define BOOST_SERIALIZATION_LEVEL_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// level.hpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+#include <boost/type_traits/is_fundamental.hpp>
+#include <boost/type_traits/is_enum.hpp>
+#include <boost/type_traits/is_array.hpp>
+#include <boost/type_traits/is_class.hpp>
+#include <boost/type_traits/is_base_and_derived.hpp>
+
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/integral_c.hpp>
+#include <boost/mpl/integral_c_tag.hpp>
+#include <boost/mpl/aux_/nttp_decl.hpp>
+
+#include <boost/serialization/level_enum.hpp>
+
+namespace boost {
+namespace serialization {
+
+struct basic_traits;
+
+// default serialization implementation level
+template<class T>
+struct implementation_level {
+ template<class U>
+ struct traits_class_level {
+ typedef BOOST_DEDUCED_TYPENAME U::level type;
+ };
+
+ typedef mpl::integral_c_tag tag;
+ // note: at least one compiler complained w/o the full qualification
+ // on basic traits below
+ typedef
+ BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ is_base_and_derived<boost::serialization::basic_traits, T>,
+ traits_class_level<T>,
+ //else
+ BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ is_fundamental<T>,
+ mpl::int_<primitive_type>,
+ //else
+ BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ is_class<T>,
+ mpl::int_<object_class_info>,
+ //else
+ BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ is_array<T>,
+ #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x560))
+ mpl::int_<not_serializable>,
+ #else
+ mpl::int_<object_serializable>,
+ #endif
+ //else
+ BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ is_enum<T>,
+ //#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x560))
+ // mpl::int_<not_serializable>,
+ //#else
+ mpl::int_<primitive_type>,
+ //#endif
+ //else
+ mpl::int_<not_serializable>
+ >
+ >
+ >
+ >
+ >::type type;
+ // vc 7.1 doesn't like enums here
+ BOOST_STATIC_CONSTANT(int, value = implementation_level::type::value);
+};
+
+
+template<class T, BOOST_MPL_AUX_NTTP_DECL(int, L) >
+inline bool operator>=(implementation_level<T> t, enum level_type l)
+{
+ return t.value >= (int)l;
+}
+
+} // namespace serialization
+} // namespace boost
+
+// specify the level of serialization implementation for the class
+// require that class info saved when versioning is used
+#define BOOST_CLASS_IMPLEMENTATION(T, E) \
+ namespace boost { \
+ namespace serialization { \
+ template <> \
+ struct implementation_level< T > \
+ { \
+ typedef mpl::integral_c_tag tag; \
+ typedef mpl::int_< E > type; \
+ BOOST_STATIC_CONSTANT( \
+ int, \
+ value = implementation_level::type::value \
+ ); \
+ }; \
+ } \
+ }
+ /**/
+
+#endif // BOOST_SERIALIZATION_LEVEL_HPP
diff --git a/boost/boost/serialization/level_enum.hpp b/boost/boost/serialization/level_enum.hpp
new file mode 100644
index 00000000000..11bd17f67d6
--- /dev/null
+++ b/boost/boost/serialization/level_enum.hpp
@@ -0,0 +1,55 @@
+#ifndef BOOST_SERIALIZATION_LEVEL_ENUM_HPP
+#define BOOST_SERIALIZATION_LEVEL_ENUM_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// level_enum.hpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+namespace boost {
+namespace serialization {
+
+// for each class used in the program, specify which level
+// of serialization should be implemented
+
+// names for each level
+enum level_type
+{
+ // Don't serialize this type. An attempt to do so should
+ // invoke a compile time assertion.
+ not_serializable = 0,
+ // write/read this type directly to the archive. In this case
+ // serialization code won't be called. This is the default
+ // case for fundamental types. It presumes a member function or
+ // template in the archive class that can handle this type.
+ // there is no runtime overhead associated reading/writing
+ // instances of this level
+ primitive_type = 1,
+ // Serialize the objects of this type using the objects "serialize"
+ // function or template. This permits values to be written/read
+ // to/from archives but includes no class or version information.
+ object_serializable = 2,
+ ///////////////////////////////////////////////////////////////////
+ // once an object is serialized at one of the above levels, the
+ // corresponding archives cannot be read if the implementation level
+ // for the archive object is changed.
+ ///////////////////////////////////////////////////////////////////
+ // Add class information to the archive. Class information includes
+ // implementation level, class version and class name if available
+ object_class_info = 3
+};
+
+} // namespace serialization
+} // namespace boost
+
+#endif // BOOST_SERIALIZATION_LEVEL_ENUM_HPP
diff --git a/boost/boost/serialization/list.hpp b/boost/boost/serialization/list.hpp
new file mode 100644
index 00000000000..469bb230ec0
--- /dev/null
+++ b/boost/boost/serialization/list.hpp
@@ -0,0 +1,77 @@
+#ifndef BOOST_SERIALIZATION_LIST_HPP
+#define BOOST_SERIALIZATION_LIST_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// list.hpp: serialization for stl list templates
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <list>
+
+#include <boost/config.hpp>
+
+#include <boost/serialization/collections_save_imp.hpp>
+#include <boost/serialization/collections_load_imp.hpp>
+#include <boost/serialization/split_free.hpp>
+
+namespace boost {
+namespace serialization {
+
+template<class Archive, class U, class Allocator>
+inline void save(
+ Archive & ar,
+ const std::list<U, Allocator> &t,
+ const unsigned int /* file_version */
+){
+ boost::serialization::stl::save_collection<
+ Archive,
+ std::list<U, Allocator>
+ >(ar, t);
+}
+
+template<class Archive, class U, class Allocator>
+inline void load(
+ Archive & ar,
+ std::list<U, Allocator> &t,
+ const unsigned int /* file_version */
+){
+ boost::serialization::stl::load_collection<
+ Archive,
+ std::list<U, Allocator>,
+ boost::serialization::stl::archive_input_seq<
+ Archive,
+ std::list<U, Allocator>
+ >,
+ boost::serialization::stl::no_reserve_imp<std::list<U, Allocator> >
+ >(ar, t);
+}
+
+// split non-intrusive serialization function member into separate
+// non intrusive save/load member functions
+template<class Archive, class U, class Allocator>
+inline void serialize(
+ Archive & ar,
+ std::list<U, Allocator> & t,
+ const unsigned int file_version
+){
+ boost::serialization::split_free(ar, t, file_version);
+}
+
+} // serialization
+} // namespace boost
+
+#include <boost/serialization/collection_traits.hpp>
+
+BOOST_SERIALIZATION_COLLECTION_TRAITS(std::list)
+
+#endif // BOOST_SERIALIZATION_LIST_HPP
diff --git a/boost/boost/serialization/map.hpp b/boost/boost/serialization/map.hpp
new file mode 100644
index 00000000000..51e6059e290
--- /dev/null
+++ b/boost/boost/serialization/map.hpp
@@ -0,0 +1,118 @@
+#ifndef BOOST_SERIALIZATION_MAP_HPP
+#define BOOST_SERIALIZATION_MAP_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// serialization/map.hpp:
+// serialization for stl map templates
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <map>
+
+#include <boost/config.hpp>
+
+#include <boost/serialization/utility.hpp>
+#include <boost/serialization/collections_save_imp.hpp>
+#include <boost/serialization/collections_load_imp.hpp>
+#include <boost/serialization/split_free.hpp>
+
+namespace boost {
+namespace serialization {
+
+template<class Archive, class Type, class Key, class Compare, class Allocator >
+inline void save(
+ Archive & ar,
+ const std::map<Key, Type, Compare, Allocator> &t,
+ const unsigned int /* file_version */
+){
+ boost::serialization::stl::save_collection<
+ Archive,
+ std::map<Key, Type, Compare, Allocator>
+ >(ar, t);
+}
+
+template<class Archive, class Type, class Key, class Compare, class Allocator >
+inline void load(
+ Archive & ar,
+ std::map<Key, Type, Compare, Allocator> &t,
+ const unsigned int /* file_version */
+){
+ boost::serialization::stl::load_collection<
+ Archive,
+ std::map<Key, Type, Compare, Allocator>,
+ boost::serialization::stl::archive_input_unique<
+ Archive, std::map<Key, Type, Compare, Allocator> >,
+ boost::serialization::stl::no_reserve_imp<std::map<
+ Key, Type, Compare, Allocator
+ >
+ >
+ >(ar, t);
+}
+
+// split non-intrusive serialization function member into separate
+// non intrusive save/load member functions
+template<class Archive, class Type, class Key, class Compare, class Allocator >
+inline void serialize(
+ Archive & ar,
+ std::map<Key, Type, Compare, Allocator> &t,
+ const unsigned int file_version
+){
+ boost::serialization::split_free(ar, t, file_version);
+}
+
+// multimap
+template<class Archive, class Type, class Key, class Compare, class Allocator >
+inline void save(
+ Archive & ar,
+ const std::multimap<Key, Type, Compare, Allocator> &t,
+ const unsigned int /* file_version */
+){
+ boost::serialization::stl::save_collection<
+ Archive,
+ std::multimap<Key, Type, Compare, Allocator>
+ >(ar, t);
+}
+
+template<class Archive, class Type, class Key, class Compare, class Allocator >
+inline void load(
+ Archive & ar,
+ std::multimap<Key, Type, Compare, Allocator> &t,
+ const unsigned int /* file_version */
+){
+ boost::serialization::stl::load_collection<
+ Archive,
+ std::multimap<Key, Type, Compare, Allocator>,
+ boost::serialization::stl::archive_input_multi<
+ Archive, std::multimap<Key, Type, Compare, Allocator>
+ >,
+ boost::serialization::stl::no_reserve_imp<
+ std::multimap<Key, Type, Compare, Allocator>
+ >
+ >(ar, t);
+}
+
+// split non-intrusive serialization function member into separate
+// non intrusive save/load member functions
+template<class Archive, class Type, class Key, class Compare, class Allocator >
+inline void serialize(
+ Archive & ar,
+ std::multimap<Key, Type, Compare, Allocator> &t,
+ const unsigned int file_version
+){
+ boost::serialization::split_free(ar, t, file_version);
+}
+
+} // serialization
+} // namespace boost
+
+#endif // BOOST_SERIALIZATION_MAP_HPP
diff --git a/boost/boost/serialization/nvp.hpp b/boost/boost/serialization/nvp.hpp
new file mode 100644
index 00000000000..c7ad2bdba4a
--- /dev/null
+++ b/boost/boost/serialization/nvp.hpp
@@ -0,0 +1,142 @@
+#ifndef BOOST_SERIALIZATION_NVP_HPP
+#define BOOST_SERIALIZATION_NVP_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// nvp.hpp: interface for serialization system.
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <utility>
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+// supress noise
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1200)
+# pragma warning (disable : 4786) // too long name, harmless warning
+#endif
+
+#include <boost/mpl/integral_c.hpp>
+#include <boost/mpl/integral_c_tag.hpp>
+
+#include <boost/serialization/level.hpp>
+#include <boost/serialization/tracking.hpp>
+#include <boost/serialization/split_member.hpp>
+#include <boost/serialization/base_object.hpp>
+#include <boost/serialization/traits.hpp>
+
+namespace boost {
+namespace serialization {
+
+template<class T>
+struct nvp :
+ public std::pair<const char *, T *>,
+ public traits<nvp<T>, object_serializable, track_never>
+{
+ explicit nvp(const char * name, T & t) :
+ // note: redundant cast works around borland issue
+ std::pair<const char *, T *>(name, (T*)(& t))
+ {}
+ nvp(const nvp & rhs) :
+ // note: redundant cast works around borland issue
+ std::pair<const char *, T *>(rhs.first, (T*)rhs.second)
+ {}
+
+ const char * name() const {
+ return this->first;
+ }
+ T & value() const {
+ return *(this->second);
+ }
+
+ const T & const_value() const {
+ return *(this->second);
+ }
+
+ // True64 compiler complains with a warning about the use of
+ // the name "Archive" hiding some higher level usage. I'm sure this
+ // is an error but I want to accomodated as it generates a long warning
+ // listing and might be related to a lot of test failures.
+ // default treatment for name-value pairs. The name is
+ // just discarded and only the value is serialized.
+ template<class Archivex>
+ void save(
+ Archivex & ar,
+ const unsigned int /* file_version */
+ ) const {
+ // CodeWarrior 8.x can't seem to resolve the << op for a rhs of "const T *"
+ ar.operator<<(const_value());
+ }
+ template<class Archivex>
+ void load(
+ Archivex & ar,
+ const unsigned int /* file_version */
+ ){
+ // CodeWarrior 8.x can't seem to resolve the >> op for a rhs of "const T *"
+ ar.operator>>(value());
+ }
+ BOOST_SERIALIZATION_SPLIT_MEMBER()
+};
+
+template<class T>
+inline
+#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+const
+#endif
+nvp<T> make_nvp(const char * name, T & t){
+ return nvp<T>(name, t);
+}
+
+// to maintain efficiency and portability, we want to assign
+// specific serialization traits to all instances of this wrappers.
+// we can't strait forward method below as it depends upon
+// Partial Template Specialization and doing so would mean that wrappers
+// wouldn't be treated the same on different platforms. This would
+// break archive portability. Leave this here as reminder not to use it !!!
+#if 0 // #ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+template <class T>
+struct implementation_level<nvp<T> >
+{
+ typedef mpl::integral_c_tag tag;
+ typedef mpl::int_<object_serializable> type;
+ BOOST_STATIC_CONSTANT(int, value = implementation_level::type::value);
+};
+
+// nvp objects are generally created on the stack and are never tracked
+template<class T>
+struct tracking_level<nvp<T> >
+{
+ typedef mpl::integral_c_tag tag;
+ typedef mpl::int_<track_never> type;
+ BOOST_STATIC_CONSTANT(int, value = tracking_level::type::value);
+};
+
+#endif
+
+} // seralization
+} // boost
+
+#include <boost/preprocessor/stringize.hpp>
+
+#define BOOST_SERIALIZATION_NVP(name) \
+ boost::serialization::make_nvp(BOOST_PP_STRINGIZE(name), name)
+/**/
+
+#define BOOST_SERIALIZATION_BASE_OBJECT_NVP(name) \
+ boost::serialization::make_nvp( \
+ BOOST_PP_STRINGIZE(name), \
+ boost::serialization::base_object<name >(*this) \
+ )
+/**/
+
+#endif // BOOST_SERIALIZATION_NVP_HPP
diff --git a/boost/boost/serialization/optional.hpp b/boost/boost/serialization/optional.hpp
new file mode 100644
index 00000000000..1145fcff031
--- /dev/null
+++ b/boost/boost/serialization/optional.hpp
@@ -0,0 +1,112 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+
+// (C) Copyright 2002-4 Pavel Vozenilek .
+// Use, modification and distribution is 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)
+
+// Provides non-intrusive serialization for boost::optional.
+
+#ifndef BOOST_SERIALIZATION_OPTIONAL_HPP_
+#define BOOST_SERIALIZATION_OPTIONAL_HPP_
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp>
+
+#include <boost/optional.hpp>
+#include <boost/serialization/split_free.hpp>
+#include <boost/serialization/level.hpp>
+#include <boost/serialization/nvp.hpp>
+#include <boost/serialization/detail/stack_constructor.hpp>
+
+// function specializations must be defined in the appropriate
+// namespace - boost::serialization
+namespace boost {
+namespace serialization {
+
+template<class Archive, class T>
+void save(
+ Archive & ar,
+ const boost::optional<T> & t,
+ const unsigned int /*version*/
+){
+ const bool tflag = t.is_initialized();
+ ar << boost::serialization::make_nvp("initialized", tflag);
+ if (tflag){
+ if(3 < ar.get_library_version()){
+ const int v = version<T>::value;
+ ar << make_nvp("item_version", v);
+ }
+ ar << boost::serialization::make_nvp("value", *t);
+ }
+}
+
+template<class Archive, class T>
+void load(
+ Archive & ar,
+ boost::optional<T> & t,
+ const unsigned int /*version*/
+){
+ bool tflag;
+ ar >> boost::serialization::make_nvp("initialized", tflag);
+ if (tflag){
+ unsigned int v;
+ if(3 < ar.get_library_version()){
+ ar >> make_nvp("item_version", v);
+ }
+ detail::stack_construct<Archive, T> aux(ar, v);
+ ar >> boost::serialization::make_nvp("value", aux.reference());
+ t.reset(aux.reference());
+ }
+ else {
+ t.reset();
+ }
+}
+
+template<class Archive, class T>
+void serialize(
+ Archive & ar,
+ boost::optional<T> & t,
+ const unsigned int version
+){
+ boost::serialization::split_free(ar, t, version);
+}
+
+// the following would be slightly more efficient. But it
+// would mean that archives created with programs that support
+// TPS wouldn't be readable by programs that don't support TPS.
+// Hence we decline to support this otherwise convenient optimization.
+//#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#if 0
+
+template <class T>
+struct implementation_level<optional<T> >
+{
+ typedef mpl::integral_c_tag tag;
+ typedef mpl::int_<boost::serialization::object_serializable> type;
+ BOOST_STATIC_CONSTANT(
+ int ,
+ value = boost::serialization::implementation_level::type::value
+ );
+};
+
+template<class T>
+struct tracking_level<optional<T> >
+{
+ typedef mpl::integral_c_tag tag;
+ typedef mpl::int_<boost::serialization::track_never> type;
+ BOOST_STATIC_CONSTANT(
+ int ,
+ value = boost::serialization::tracking_level::type::value
+ );
+};
+
+#endif
+
+} // serialization
+} // namespace boost
+
+#endif // BOOST_SERIALIZATION_OPTIONAL_HPP_
diff --git a/boost/boost/serialization/scoped_ptr.hpp b/boost/boost/serialization/scoped_ptr.hpp
new file mode 100644
index 00000000000..52642c7dc61
--- /dev/null
+++ b/boost/boost/serialization/scoped_ptr.hpp
@@ -0,0 +1,58 @@
+#ifndef BOOST_SERIALIZATION_SCOPED_PTR_HPP_VP_2003_10_30
+#define BOOST_SERIALIZATION_SCOPED_PTR_HPP_VP_2003_10_30
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+// Copyright (c) 2003 Vladimir Prus.
+// Use, modification and distribution is 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)
+
+// Provides non-intrusive serialization for boost::scoped_ptr
+// Does not allow to serialize scoped_ptr's to builtin types.
+
+#include <boost/config.hpp>
+
+#include <boost/scoped_ptr.hpp>
+#include <boost/serialization/nvp.hpp>
+#include <boost/serialization/split_free.hpp>
+
+namespace boost {
+namespace serialization {
+
+ template<class Archive, class T>
+ void save(
+ Archive & ar,
+ const boost::scoped_ptr<T> & t,
+ const unsigned int /* version */
+ ){
+ T* r = t.get();
+ ar << boost::serialization::make_nvp("scoped_ptr", r);
+ }
+
+ template<class Archive, class T>
+ void load(
+ Archive & ar,
+ boost::scoped_ptr<T> & t,
+ const unsigned int /* version */
+ ){
+ T* r;
+ ar >> boost::serialization::make_nvp("scoped_ptr", r);
+ t.reset(r);
+ }
+
+ template<class Archive, class T>
+ void serialize(
+ Archive& ar,
+ boost::scoped_ptr<T>& t,
+ const unsigned int version
+ ){
+ boost::serialization::split_free(ar, t, version);
+ }
+
+} // namespace serialization
+} // namespace boost
+
+#endif // BOOST_SERIALIZATION_SCOPED_PTR_HPP_VP_2003_10_30
diff --git a/boost/boost/serialization/serialization.hpp b/boost/boost/serialization/serialization.hpp
new file mode 100644
index 00000000000..e85bd9519d5
--- /dev/null
+++ b/boost/boost/serialization/serialization.hpp
@@ -0,0 +1,179 @@
+#ifndef BOOST_SERIALIZATION_SERIALIZATION_HPP
+#define BOOST_SERIALIZATION_SERIALIZATION_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1310)
+# pragma warning (disable : 4675) // suppress ADL warning
+#endif
+
+#include <cstddef> // size_t
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::size_t;
+} // namespace std
+#endif
+
+#include <boost/strong_typedef.hpp>
+#include <boost/pfto.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/serialization/nvp.hpp>
+
+// incremented for each "release"
+#define BOOST_SERIALIZATION_LIBRARY_VERSION 19
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// serialization.hpp: interface for serialization system.
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+//////////////////////////////////////////////////////////////////////
+// public interface to serialization.
+
+/////////////////////////////////////////////////////////////////////////////
+// layer 0 - intrusive verison
+// declared and implemented for each user defined class to be serialized
+//
+// template<Archive>
+// serialize(Archive &ar, const unsigned int file_version){
+// ar & base_object<base>(*this) & member1 & member2 ... ;
+// }
+
+/////////////////////////////////////////////////////////////////////////////
+// layer 1 - layer that routes member access through the access class.
+// this is what permits us to grant access to private class member functions
+// by specifying friend class boost::serialization::access
+
+#include <boost/serialization/access.hpp>
+
+/////////////////////////////////////////////////////////////////////////////
+// layer 2 - default implementation of non-intrusive serialization.
+//
+// note the usage of function overloading to compensate that C++ does not
+// currently support Partial Template Specialization for function templates
+// We have declared the version number as "const unsigned long".
+// Overriding templates for specific data types should declare the version
+// number as "const unsigned int". Template matching will first be applied
+// to functions with the same version types - that is the overloads.
+// If there is no declared function prototype that matches, the second argument
+// will be converted to "const unsigned long" and a match will be made with
+// one of the default template functions below.
+
+namespace boost {
+namespace serialization {
+
+BOOST_STRONG_TYPEDEF(unsigned int, version_type)
+
+// default implemenation - call the member function "serialize"
+template<class Archive, class T>
+inline void serialize(
+ Archive & ar, T & t, const BOOST_PFTO unsigned int file_version
+){
+ access::serialize(ar, t, static_cast<unsigned int>(file_version));
+}
+
+// save data required for construction
+template<class Archive, class T>
+inline void save_construct_data(
+ Archive & /*ar*/,
+ const T * /*t*/,
+ const BOOST_PFTO unsigned int /*file_version */
+){
+ // default is to save no data because default constructor
+ // requires no arguments.
+}
+
+// load data required for construction and invoke constructor in place
+template<class Archive, class T>
+inline void load_construct_data(
+ Archive & ar,
+ T * t,
+ const BOOST_PFTO unsigned int /*file_version*/
+){
+ // default just uses the default constructor. going
+ // through access permits usage of otherwise private default
+ // constructor
+ access::construct(ar, t);
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// layer 3 - move call into serialization namespace so that ADL will function
+// in the manner we desire.
+//
+// on compilers which don't implement ADL. only the current namespace
+// i.e. boost::serialization will be searched.
+//
+// on compilers which DO implement ADL
+// serialize overrides can be in any of the following
+//
+// 1) same namepace as Archive
+// 2) same namespace as T
+// 3) boost::serialization
+//
+// Due to Martin Ecker
+
+template<class Archive, class T>
+inline void serialize_adl(
+ Archive & ar,
+ T & t,
+ const unsigned int file_version
+){
+ // note usage of function overloading to delay final resolution
+ // until the point of instantiation. This works around the two-phase
+ // lookup "feature" which inhibits redefintion of a default function
+ // template implementation. Due to Robert Ramey
+ //
+ // Note that this trick generates problems for compiles which don't support
+ // PFTO, suppress it here. As far as we know, there are no compilers
+ // which fail to support PFTO while supporting two-phase lookup.
+ #if ! defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
+ const version_type v(file_version);
+ serialize(ar, t, v);
+ #else
+ serialize(ar, t, file_version);
+ #endif
+}
+
+template<class Archive, class T>
+inline void save_construct_data_adl(
+ Archive & ar,
+ const T * t,
+ const unsigned int file_version
+){
+ // see above
+ #if ! defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
+ const version_type v(file_version);
+ save_construct_data(ar, t, v);
+ #else
+ save_construct_data(ar, t, file_version);
+ #endif
+}
+
+template<class Archive, class T>
+inline void load_construct_data_adl(
+ Archive & ar,
+ T * t,
+ const unsigned int file_version
+){
+ // see above comment
+ #if ! defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
+ const version_type v(file_version);
+ load_construct_data(ar, t, v);
+ #else
+ load_construct_data(ar, t, file_version);
+ #endif
+}
+
+} // namespace serialization
+} // namespace boost
+
+#endif //BOOST_SERIALIZATION_SERIALIZATION_HPP
diff --git a/boost/boost/serialization/set.hpp b/boost/boost/serialization/set.hpp
new file mode 100644
index 00000000000..d23e66f7ee9
--- /dev/null
+++ b/boost/boost/serialization/set.hpp
@@ -0,0 +1,120 @@
+#ifndef BOOST_SERIALIZATION_SET_HPP
+#define BOOST_SERIALIZATION_SET_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// set.hpp: serialization for stl set templates
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <set>
+
+#include <boost/config.hpp>
+
+#include <boost/serialization/collections_save_imp.hpp>
+#include <boost/serialization/collections_load_imp.hpp>
+#include <boost/serialization/split_free.hpp>
+
+namespace boost {
+namespace serialization {
+
+template<class Archive, class Key, class Compare, class Allocator >
+inline void save(
+ Archive & ar,
+ const std::set<Key, Compare, Allocator> &t,
+ const unsigned int /* file_version */
+){
+ boost::serialization::stl::save_collection<
+ Archive, std::set<Key, Compare, Allocator>
+ >(ar, t);
+}
+
+template<class Archive, class Key, class Compare, class Allocator >
+inline void load(
+ Archive & ar,
+ std::set<Key, Compare, Allocator> &t,
+ const unsigned int /* file_version */
+){
+ boost::serialization::stl::load_collection<
+ Archive,
+ std::set<Key, Compare, Allocator>,
+ boost::serialization::stl::archive_input_unique<
+ Archive, std::set<Key, Compare, Allocator>
+ >,
+ boost::serialization::stl::no_reserve_imp<std::set<
+ Key, Compare, Allocator>
+ >
+ >(ar, t);
+}
+
+// split non-intrusive serialization function member into separate
+// non intrusive save/load member functions
+template<class Archive, class Key, class Compare, class Allocator >
+inline void serialize(
+ Archive & ar,
+ std::set<Key, Compare, Allocator> & t,
+ const unsigned int file_version
+){
+ boost::serialization::split_free(ar, t, file_version);
+}
+
+// multiset
+template<class Archive, class Key, class Compare, class Allocator >
+inline void save(
+ Archive & ar,
+ const std::multiset<Key, Compare, Allocator> &t,
+ const unsigned int /* file_version */
+){
+ boost::serialization::stl::save_collection<
+ Archive,
+ std::multiset<Key, Compare, Allocator>
+ >(ar, t);
+}
+
+template<class Archive, class Key, class Compare, class Allocator >
+inline void load(
+ Archive & ar,
+ std::multiset<Key, Compare, Allocator> &t,
+ const unsigned int /* file_version */
+){
+ boost::serialization::stl::load_collection<
+ Archive,
+ std::multiset<Key, Compare, Allocator>,
+ boost::serialization::stl::archive_input_multi<
+ Archive, std::multiset<Key, Compare, Allocator>
+ >,
+ boost::serialization::stl::no_reserve_imp<
+ std::multiset<Key, Compare, Allocator>
+ >
+ >(ar, t);
+}
+
+// split non-intrusive serialization function member into separate
+// non intrusive save/load member functions
+template<class Archive, class Key, class Compare, class Allocator >
+inline void serialize(
+ Archive & ar,
+ std::multiset<Key, Compare, Allocator> & t,
+ const unsigned int file_version
+){
+ boost::serialization::split_free(ar, t, file_version);
+}
+
+} // namespace serialization
+} // namespace boost
+
+#include <boost/serialization/collection_traits.hpp>
+
+BOOST_SERIALIZATION_COLLECTION_TRAITS(std::set)
+BOOST_SERIALIZATION_COLLECTION_TRAITS(std::multiset)
+
+#endif // BOOST_SERIALIZATION_SET_HPP
diff --git a/boost/boost/serialization/shared_ptr.hpp b/boost/boost/serialization/shared_ptr.hpp
new file mode 100644
index 00000000000..0e421277d8e
--- /dev/null
+++ b/boost/boost/serialization/shared_ptr.hpp
@@ -0,0 +1,241 @@
+#ifndef BOOST_SERIALIZATION_SHARED_PTR_HPP
+#define BOOST_SERIALIZATION_SHARED_PTR_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// shared_ptr.hpp: serialization for boost shared pointer
+
+// (C) Copyright 2004 Robert Ramey and Martin Ecker
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <map>
+
+#include <boost/config.hpp>
+#include <boost/mpl/integral_c.hpp>
+#include <boost/mpl/integral_c_tag.hpp>
+
+#include <boost/detail/workaround.hpp>
+#include <boost/shared_ptr.hpp>
+#include <boost/throw_exception.hpp>
+
+#include <boost/archive/archive_exception.hpp>
+
+#include <boost/serialization/type_info_implementation.hpp>
+#include <boost/serialization/split_free.hpp>
+#include <boost/serialization/nvp.hpp>
+#include <boost/serialization/version.hpp>
+#include <boost/serialization/tracking.hpp>
+#include <boost/static_assert.hpp>
+
+#include <boost/serialization/void_cast_fwd.hpp>
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// shared_ptr serialization traits
+// version 1 to distinguish from boost 1.32 version. Note: we can only do this
+// for a template when the compiler supports partial template specialization
+
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ namespace boost {
+ namespace serialization{
+ template<class T>
+ struct version< ::boost::shared_ptr<T> > {
+ typedef mpl::integral_c_tag tag;
+#if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3206))
+ typedef BOOST_DEDUCED_TYPENAME mpl::int_<1> type;
+#else
+ typedef mpl::int_<1> type;
+#endif
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x570))
+ BOOST_STATIC_CONSTANT(unsigned int, value = 1);
+#else
+ BOOST_STATIC_CONSTANT(unsigned int, value = type::value);
+#endif
+ };
+ // don't track shared pointers
+ template<class T>
+ struct tracking_level< ::boost::shared_ptr<T> > {
+ typedef mpl::integral_c_tag tag;
+#if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3206))
+ typedef BOOST_DEDUCED_TYPENAME mpl::int_< ::boost::serialization::track_never> type;
+#else
+ typedef mpl::int_< ::boost::serialization::track_never> type;
+#endif
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x570))
+ BOOST_STATIC_CONSTANT(int, value = ::boost::serialization::track_never);
+#else
+ BOOST_STATIC_CONSTANT(int, value = type::value);
+#endif
+ };
+ }}
+ #define BOOST_SERIALIZATION_SHARED_PTR(T)
+#else
+ // define macro to let users of these compilers do this
+ #define BOOST_SERIALIZATION_SHARED_PTR(T) \
+ BOOST_CLASS_VERSION( \
+ ::boost::shared_ptr< T >, \
+ 1 \
+ ) \
+ BOOST_CLASS_TRACKING( \
+ ::boost::shared_ptr< T >, \
+ ::boost::serialization::track_never \
+ ) \
+ /**/
+#endif
+
+namespace boost {
+namespace serialization{
+
+class extended_type_info;
+
+namespace detail {
+
+struct null_deleter {
+ void operator()(void const *) const {}
+};
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// a common class for holding various types of shared pointers
+
+class shared_ptr_helper {
+ typedef std::map<void*, shared_ptr<void> > collection_type;
+ typedef collection_type::const_iterator iterator_type;
+ // list of shared_pointers create accessable by raw pointer. This
+ // is used to "match up" shared pointers loaded at diferent
+ // points in the archive
+ collection_type m_pointers;
+ // return a void pointer to the most derived type
+ template<class T>
+ void * object_identifier(T * t) const {
+ const extended_type_info * true_type
+ = type_info_implementation<T>::type::get_derived_extended_type_info(*t);
+ // note:if this exception is thrown, be sure that derived pointer
+ // is either regsitered or exported.
+ if(NULL == true_type)
+ boost::throw_exception(
+ boost::archive::archive_exception(
+ boost::archive::archive_exception::unregistered_class
+ )
+ );
+ const boost::serialization::extended_type_info * this_type
+ = boost::serialization::type_info_implementation<T>::type::get_instance();
+ void * vp = void_downcast(*true_type, *this_type, t);
+ return vp;
+ }
+public:
+ template<class T>
+ void reset(shared_ptr<T> & s, T * r){
+ if(NULL == r){
+ s.reset();
+ return;
+ }
+ // get pointer to the most derived object. This is effectively
+ // the object identifer
+ void * od = object_identifier(r);
+
+ iterator_type it = m_pointers.find(od);
+
+ if(it == m_pointers.end()){
+ s.reset(r);
+ m_pointers.insert(collection_type::value_type(od,s));
+ }
+ else{
+ s = static_pointer_cast<T>((*it).second);
+ }
+ }
+ virtual ~shared_ptr_helper(){}
+};
+
+} // namespace detail
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// utility function for creating/getting a helper - could be useful in general
+// but shared_ptr is the only class (so far that needs it) and I don't have a
+// convenient header to place it into.
+template<class Archive, class H>
+H &
+get_helper(Archive & ar){
+ extended_type_info * eti = type_info_implementation<H>::type::get_instance();
+ shared_ptr<void> sph;
+ ar.lookup_helper(eti, sph);
+ if(NULL == sph.get()){
+ sph = shared_ptr<H>(new H);
+ ar.insert_helper(eti, sph);
+ }
+ return * static_cast<H *>(sph.get());
+}
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// serialization for shared_ptr
+
+template<class Archive, class T>
+inline void save(
+ Archive & ar,
+ const boost::shared_ptr<T> &t,
+ const unsigned int /* file_version */
+){
+ // The most common cause of trapping here would be serializing
+ // something like shared_ptr<int>. This occurs because int
+ // is never tracked by default. Wrap int in a trackable type
+ BOOST_STATIC_ASSERT((tracking_level<T>::value != track_never));
+ const T * t_ptr = t.get();
+ ar << boost::serialization::make_nvp("px", t_ptr);
+}
+
+template<class Archive, class T>
+inline void load(
+ Archive & ar,
+ boost::shared_ptr<T> &t,
+ const unsigned int file_version
+){
+ // The most common cause of trapping here would be serializing
+ // something like shared_ptr<int>. This occurs because int
+ // is never tracked by default. Wrap int in a trackable type
+ BOOST_STATIC_ASSERT((tracking_level<T>::value != track_never));
+ T* r;
+ #ifdef BOOST_SERIALIZATION_SHARED_PTR_132_HPP
+ if(file_version < 1){
+ ar.register_type(static_cast<
+ boost_132::detail::sp_counted_base_impl<T *, boost::checked_deleter<T> > *
+ >(NULL));
+ boost_132::shared_ptr<T> sp;
+ ar >> boost::serialization::make_nvp("px", sp.px);
+ ar >> boost::serialization::make_nvp("pn", sp.pn);
+ // got to keep the sps around so the sp.pns don't disappear
+ get_helper<Archive, boost_132::serialization::detail::shared_ptr_helper>(ar).append(sp);
+ r = sp.get();
+ }
+ else
+ #endif
+ {
+ ar >> boost::serialization::make_nvp("px", r);
+ }
+ get_helper<Archive, detail::shared_ptr_helper >(ar).reset(t,r);
+}
+
+template<class Archive, class T>
+inline void serialize(
+ Archive & ar,
+ boost::shared_ptr<T> &t,
+ const unsigned int file_version
+){
+ // correct shared_ptr serialization depends upon object tracking
+ // being used.
+ BOOST_STATIC_ASSERT(
+ boost::serialization::tracking_level<T>::value
+ != boost::serialization::track_never
+ );
+ boost::serialization::split_free(ar, t, file_version);
+}
+
+} // namespace serialization
+} // namespace boost
+
+#endif // BOOST_SERIALIZATION_SHARED_PTR_HPP
diff --git a/boost/boost/serialization/shared_ptr_132.hpp b/boost/boost/serialization/shared_ptr_132.hpp
new file mode 100644
index 00000000000..df74f546e63
--- /dev/null
+++ b/boost/boost/serialization/shared_ptr_132.hpp
@@ -0,0 +1,240 @@
+#ifndef BOOST_SERIALIZATION_SHARED_PTR_132_HPP
+#define BOOST_SERIALIZATION_SHARED_PTR_132_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// shared_ptr.hpp: serialization for boost shared pointer
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+// note: totally unadvised hack to gain access to private variables
+// in shared_ptr and shared_count. Unfortunately its the only way to
+// do this without changing shared_ptr and shared_count
+// the best we can do is to detect a conflict here
+#include <boost/config.hpp>
+
+#include <list>
+
+#include <boost/serialization/detail/shared_ptr_132.hpp>
+
+#include <boost/serialization/is_abstract.hpp>
+#include <boost/serialization/split_free.hpp>
+#include <boost/serialization/nvp.hpp>
+#include <boost/serialization/tracking.hpp>
+#include <boost/serialization/void_cast.hpp>
+
+// mark base class as an (uncreatable) base class
+BOOST_IS_ABSTRACT(boost_132::detail::sp_counted_base)
+
+/////////////////////////////////////////////////////////////
+// Maintain a couple of lists of loaded shared pointers of the old previous
+// version (1.32)
+
+namespace boost_132 {
+namespace serialization {
+namespace detail {
+
+struct null_deleter {
+ void operator()(void const *) const {}
+};
+
+class shared_ptr_helper{
+ typedef std::list<shared_ptr<void> > collection_type;
+ typedef collection_type::iterator iterator_type;
+ // list of loaded pointers. This is used to be sure that the pointers
+ // stay around long enough to be "matched" with other pointers loaded
+ // by the same archive. These are created with a "null_deleter" so that
+ // when this list is destroyed - the underlaying raw pointers are not
+ // destroyed. This has to be done because the pointers are also held by
+ // new system which is disjoint from this set. This is implemented
+ // by a change in load_construct_data below. It makes this file suitable
+ // only for loading pointers into a 1.33 or later boost system.
+ collection_type m_pointers;
+public:
+ void append(const boost_132::shared_ptr<void> & t){
+ m_pointers.push_back(t);
+ }
+ virtual ~shared_ptr_helper(){}
+};
+
+} // namespace detail
+} // namespace serialization
+} // namespace boost_132
+
+/////////////////////////////////////////////////////////////
+// sp_counted_base_impl serialization
+
+namespace boost {
+namespace serialization {
+
+template<class Archive, class P, class D>
+inline void serialize(
+ Archive & /* ar */,
+ boost_132::detail::sp_counted_base_impl<P, D> & /* t */,
+ const unsigned int /*file_version*/
+){
+ // register the relationship between each derived class
+ // its polymorphic base
+ boost::serialization::void_cast_register<
+ boost_132::detail::sp_counted_base_impl<P, D>,
+ boost_132::detail::sp_counted_base
+ >(
+ static_cast<boost_132::detail::sp_counted_base_impl<P, D> *>(NULL),
+ static_cast<boost_132::detail::sp_counted_base *>(NULL)
+ );
+}
+
+template<class Archive, class P, class D>
+inline void save_construct_data(
+ Archive & ar,
+ const boost_132::detail::sp_counted_base_impl<P, D> *t,
+ const unsigned int /* file_version */
+){
+ // variables used for construction
+ ar << boost::serialization::make_nvp("ptr", t->ptr);
+}
+
+template<class Archive, class P, class D>
+inline void load_construct_data(
+ Archive & ar,
+ boost_132::detail::sp_counted_base_impl<P, D> * t,
+ const unsigned int /* file_version */
+){
+ P ptr_;
+ ar >> boost::serialization::make_nvp("ptr", ptr_);
+// ::new(t)boost_132::detail::sp_counted_base_impl<P, D>(ptr_, D()); // placement
+ // note: the original ::new... above is replaced by the one here. This one
+ // creates all new objects with a null_deleter so that after the archive
+ // is finished loading and the shared_ptrs are destroyed - the underlying
+ // raw pointers are NOT deleted. This is necessary as they are used by the
+ // new system as well.
+ ::new(t)boost_132::detail::sp_counted_base_impl<
+ P,
+ boost_132::serialization::detail::null_deleter
+ >(
+ ptr_, boost_132::serialization::detail::null_deleter()
+ ); // placement new
+ // compensate for that fact that a new shared count always is
+ // initialized with one. the add_ref_copy below will increment it
+ // every time its serialized so without this adjustment
+ // the use and weak counts will be off by one.
+ t->use_count_ = 0;
+}
+
+} // serialization
+} // namespace boost
+
+/////////////////////////////////////////////////////////////
+// shared_count serialization
+
+namespace boost {
+namespace serialization {
+
+template<class Archive>
+inline void save(
+ Archive & ar,
+ const boost_132::detail::shared_count &t,
+ const unsigned int /* file_version */
+){
+ ar << boost::serialization::make_nvp("pi", t.pi_);
+}
+
+template<class Archive>
+inline void load(
+ Archive & ar,
+ boost_132::detail::shared_count &t,
+ const unsigned int /* file_version */
+){
+ ar >> boost::serialization::make_nvp("pi", t.pi_);
+ if(NULL != t.pi_)
+ t.pi_->add_ref_copy();
+}
+
+} // serialization
+} // namespace boost
+
+BOOST_SERIALIZATION_SPLIT_FREE(boost_132::detail::shared_count)
+
+/////////////////////////////////////////////////////////////
+// implement serialization for shared_ptr<T>
+
+namespace boost {
+namespace serialization {
+
+template<class Archive, class T>
+inline void save(
+ Archive & ar,
+ const boost_132::shared_ptr<T> &t,
+ const unsigned int /* file_version */
+){
+ // only the raw pointer has to be saved
+ // the ref count is maintained automatically as shared pointers are loaded
+ ar.register_type(static_cast<
+ boost_132::detail::sp_counted_base_impl<T *, boost::checked_deleter<T> > *
+ >(NULL));
+ ar << boost::serialization::make_nvp("px", t.px);
+ ar << boost::serialization::make_nvp("pn", t.pn);
+}
+
+template<class Archive, class T>
+inline void load(
+ Archive & ar,
+ boost_132::shared_ptr<T> &t,
+ const unsigned int /* file_version */
+){
+ // only the raw pointer has to be saved
+ // the ref count is maintained automatically as shared pointers are loaded
+ ar.register_type(static_cast<
+ boost_132::detail::sp_counted_base_impl<T *, boost::checked_deleter<T> > *
+ >(NULL));
+ ar >> boost::serialization::make_nvp("px", t.px);
+ ar >> boost::serialization::make_nvp("pn", t.pn);
+}
+
+template<class Archive, class T>
+inline void serialize(
+ Archive & ar,
+ boost_132::shared_ptr<T> &t,
+ const unsigned int file_version
+){
+ // correct shared_ptr serialization depends upon object tracking
+ // being used.
+ BOOST_STATIC_ASSERT(
+ boost::serialization::tracking_level<T>::value
+ != boost::serialization::track_never
+ );
+ boost::serialization::split_free(ar, t, file_version);
+}
+
+} // serialization
+} // namespace boost
+
+// note: change below uses null_deleter
+// This macro is used to export GUIDS for shared pointers to allow
+// the serialization system to export them properly. David Tonge
+#define BOOST_SHARED_POINTER_EXPORT_GUID(T, K) \
+ typedef boost_132::detail::sp_counted_base_impl< \
+ T *, \
+ boost::checked_deleter< T > \
+ > __shared_ptr_ ## T; \
+ BOOST_CLASS_EXPORT_GUID(__shared_ptr_ ## T, "__shared_ptr_" K) \
+ BOOST_CLASS_EXPORT_GUID(T, K) \
+ /**/
+
+#define BOOST_SHARED_POINTER_EXPORT(T) \
+ BOOST_SHARED_POINTER_EXPORT_GUID( \
+ T, \
+ BOOST_PP_STRINGIZE(T) \
+ ) \
+ /**/
+
+#endif // BOOST_SERIALIZATION_SHARED_PTR_132_HPP
diff --git a/boost/boost/serialization/slist.hpp b/boost/boost/serialization/slist.hpp
new file mode 100644
index 00000000000..5c274912888
--- /dev/null
+++ b/boost/boost/serialization/slist.hpp
@@ -0,0 +1,93 @@
+#ifndef BOOST_SERIALIZATION_SLIST_HPP
+#define BOOST_SERIALIZATION_SLIST_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// slist.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+#ifdef BOOST_HAS_SLIST
+#include BOOST_SLIST_HEADER
+
+#include <boost/serialization/collections_save_imp.hpp>
+#include <boost/serialization/collections_load_imp.hpp>
+#include <boost/serialization/split_free.hpp>
+#include <boost/serialization/nvp.hpp>
+
+namespace boost {
+namespace serialization {
+
+template<class Archive, class U, class Allocator>
+inline void save(
+ Archive & ar,
+ const BOOST_STD_EXTENSION_NAMESPACE::slist<U, Allocator> &t,
+ const unsigned int file_version
+){
+ boost::serialization::stl::save_collection<
+ Archive,
+ BOOST_STD_EXTENSION_NAMESPACE::slist<U, Allocator>
+ >(ar, t);
+}
+
+template<class Archive, class U, class Allocator>
+inline void load(
+ Archive & ar,
+ BOOST_STD_EXTENSION_NAMESPACE::slist<U, Allocator> &t,
+ const unsigned int file_version
+){
+ // retrieve number of elements
+ t.clear();
+ // retrieve number of elements
+ unsigned int count;
+ ar >> BOOST_SERIALIZATION_NVP(count);
+ if(0 == count)
+ return;
+ unsigned int v;
+ if(3 < ar.get_library_version()){
+ ar >> make_nvp("item_version", v);
+ }
+ boost::serialization::detail::stack_construct<Archive, U> u(ar, v);
+ ar >> boost::serialization::make_nvp("item", u.reference());
+ t.push_front(u.reference());
+ BOOST_DEDUCED_TYPENAME BOOST_STD_EXTENSION_NAMESPACE::slist<U, Allocator>::iterator last;
+ last = t.begin();
+ while(--count > 0){
+ boost::serialization::detail::stack_construct<Archive, U>
+ u(ar, file_version);
+ ar >> boost::serialization::make_nvp("item", u.reference());
+ last = t.insert_after(last, u.reference());
+ ar.reset_object_address(& (*last), & u.reference());
+ }
+}
+
+// split non-intrusive serialization function member into separate
+// non intrusive save/load member functions
+template<class Archive, class U, class Allocator>
+inline void serialize(
+ Archive & ar,
+ BOOST_STD_EXTENSION_NAMESPACE::slist<U, Allocator> &t,
+ const unsigned int file_version
+){
+ boost::serialization::split_free(ar, t, file_version);
+}
+
+} // serialization
+} // namespace boost
+
+#include <boost/serialization/collection_traits.hpp>
+
+BOOST_SERIALIZATION_COLLECTION_TRAITS(BOOST_STD_EXTENSION_NAMESPACE::slist)
+
+#endif // BOOST_HAS_SLIST
+#endif // BOOST_SERIALIZATION_SLIST_HPP
diff --git a/boost/boost/serialization/split_free.hpp b/boost/boost/serialization/split_free.hpp
new file mode 100644
index 00000000000..9dbcd2fd1d4
--- /dev/null
+++ b/boost/boost/serialization/split_free.hpp
@@ -0,0 +1,93 @@
+#ifndef BOOST_SERIALIZATION_SPLIT_FREE_HPP
+#define BOOST_SERIALIZATION_SPLIT_FREE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// split_free.hpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/serialization/serialization.hpp>
+
+namespace boost {
+namespace archive {
+ namespace detail {
+ template<class Archive> class interface_oarchive;
+ template<class Archive> class interface_iarchive;
+ } // namespace detail
+} // namespace archive
+
+namespace serialization {
+
+//namespace detail {
+template<class Archive, class T>
+struct free_saver {
+ static void invoke(
+ Archive & ar,
+ const T & t,
+ const unsigned int file_version
+ ){
+ // use function overload (version_type) to workaround
+ // two-phase lookup issue
+ const version_type v(file_version);
+ save(ar, t, v);
+ }
+};
+template<class Archive, class T>
+struct free_loader {
+ static void invoke(
+ Archive & ar,
+ T & t,
+ const unsigned int file_version
+ ){
+ // use function overload (version_type) to workaround
+ // two-phase lookup issue
+ const version_type v(file_version);
+ load(ar, t, v);
+ }
+};
+//} // namespace detail
+
+template<class Archive, class T>
+inline void split_free(
+ Archive & ar,
+ T & t,
+ const unsigned int file_version
+){
+ typedef BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ BOOST_DEDUCED_TYPENAME Archive::is_saving,
+ mpl::identity</* detail:: */ free_saver<Archive, T> >,
+ mpl::identity</* detail:: */ free_loader<Archive, T> >
+ >::type typex;
+ typex::invoke(ar, t, file_version);
+}
+
+} // namespace serialization
+} // namespace boost
+
+#define BOOST_SERIALIZATION_SPLIT_FREE(T) \
+namespace boost { namespace serialization { \
+template<class Archive> \
+inline void serialize( \
+ Archive & ar, \
+ T & t, \
+ const unsigned int file_version \
+){ \
+ split_free(ar, t, file_version); \
+} \
+}}
+/**/
+
+#endif // BOOST_SERIALIZATION_SPLIT_FREE_HPP
diff --git a/boost/boost/serialization/split_member.hpp b/boost/boost/serialization/split_member.hpp
new file mode 100644
index 00000000000..69879450d8f
--- /dev/null
+++ b/boost/boost/serialization/split_member.hpp
@@ -0,0 +1,86 @@
+#ifndef BOOST_SERIALIZATION_SPLIT_MEMBER_HPP
+#define BOOST_SERIALIZATION_SPLIT_MEMBER_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// split_member.hpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+
+#include <boost/serialization/access.hpp>
+
+namespace boost {
+namespace archive {
+ namespace detail {
+ template<class Archive> class interface_oarchive;
+ template<class Archive> class interface_iarchive;
+ } // namespace detail
+} // namespace archive
+
+namespace serialization {
+namespace detail {
+
+ template<class Archive, class T>
+ struct member_saver {
+ static void invoke(
+ Archive & ar,
+ const T & t,
+ const unsigned int file_version
+ ){
+ access::member_save(ar, t, file_version);
+ }
+ };
+
+ template<class Archive, class T>
+ struct member_loader {
+ static void invoke(
+ Archive & ar,
+ T & t,
+ const unsigned int file_version
+ ){
+ access::member_load(ar, t, file_version);
+ }
+ };
+
+} // detail
+
+template<class Archive, class T>
+inline void split_member(
+ Archive & ar, T & t, const unsigned int file_version
+){
+ typedef BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ BOOST_DEDUCED_TYPENAME Archive::is_saving,
+ mpl::identity<detail::member_saver<Archive, T> >,
+ mpl::identity<detail::member_loader<Archive, T> >
+ >::type typex;
+ typex::invoke(ar, t, file_version);
+}
+
+} // namespace serialization
+} // namespace boost
+
+// split member function serialize funcition into save/load
+#define BOOST_SERIALIZATION_SPLIT_MEMBER() \
+template<class Archive> \
+void serialize( \
+ Archive &ar, \
+ const unsigned int file_version \
+){ \
+ boost::serialization::split_member(ar, *this, file_version); \
+} \
+/**/
+
+#endif // BOOST_SERIALIZATION_SPLIT_MEMBER_HPP
diff --git a/boost/boost/serialization/string.hpp b/boost/boost/serialization/string.hpp
new file mode 100644
index 00000000000..36d15942a87
--- /dev/null
+++ b/boost/boost/serialization/string.hpp
@@ -0,0 +1,91 @@
+#ifndef BOOST_SERIALIZATION_STRING_HPP
+#define BOOST_SERIALIZATION_STRING_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// serialization/string.hpp:
+// serialization for stl string templates
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <string>
+
+#include <boost/config.hpp>
+#include <boost/serialization/level.hpp>
+
+BOOST_CLASS_IMPLEMENTATION(std::string, boost::serialization::primitive_type)
+#ifndef BOOST_NO_STD_WSTRING
+BOOST_CLASS_IMPLEMENTATION(std::wstring, boost::serialization::primitive_type)
+#endif
+
+// left over from a previous incarnation - strings are now always primitive types
+#if 0
+#include <string>
+#include <boost/serialization/collections_save_imp.hpp>
+#include <boost/serialization/collections_load_imp.hpp>
+#include <boost/serialization/split_free.hpp>
+
+namespace boost {
+namespace serialization {
+
+// basic_string - general case
+template<class Archive, class U, class Allocator>
+inline void save(
+ Archive & ar,
+ const std::basic_string<U, Allocator> &t,
+ const unsigned int file_version
+){
+ boost::serialization::stl::save_collection<
+ Archive, std::basic_string<U, Allocator>
+ >(ar, t);
+}
+
+template<class Archive, class U, class Allocator>
+inline void load(
+ Archive & ar,
+ std::basic_string<U, Allocator> &t,
+ const unsigned int file_version
+){
+ boost::serialization::stl::load_collection<
+ Archive,
+ std::basic_string<U, Allocator>,
+ boost::serialization::stl::archive_input_seq<
+ Archive,
+ std::basic_string<U, Allocator>
+ >,
+ boost::serialization::stl::reserve_imp<
+ std::basic_string<U, Allocator>
+ >
+ >(ar, t);
+}
+
+// split non-intrusive serialization function member into separate
+// non intrusive save/load member functions
+template<class Archive, class U, class Allocator>
+inline void serialize(
+ Archive & ar,
+ std::basic_string<U, Allocator> & t,
+ const unsigned int file_version
+){
+ boost::serialization::split_free(ar, t, file_version);
+}
+
+} // serialization
+} // namespace boost
+
+#include <boost/serialization/collection_traits.hpp>
+
+BOOST_SERIALIZATION_COLLECTION_TRAITS(std::vector)
+
+#endif
+
+#endif // BOOST_SERIALIZATION_STRING_HPP
diff --git a/boost/boost/serialization/tracking.hpp b/boost/boost/serialization/tracking.hpp
new file mode 100644
index 00000000000..0d64cad40c1
--- /dev/null
+++ b/boost/boost/serialization/tracking.hpp
@@ -0,0 +1,113 @@
+#ifndef BOOST_SERIALIZATION_TRACKING_HPP
+#define BOOST_SERIALIZATION_TRACKING_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// tracking.hpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/equal_to.hpp>
+#include <boost/mpl/greater.hpp>
+#include <boost/mpl/integral_c_tag.hpp>
+
+#include <boost/type_traits/is_base_and_derived.hpp>
+#include <boost/type_traits/is_pointer.hpp>
+#include <boost/serialization/level.hpp>
+#include <boost/serialization/tracking_enum.hpp>
+//#include <boost/serialization/traits.hpp>
+
+namespace boost {
+namespace serialization {
+
+struct basic_traits;
+
+// default tracking level
+template<class T>
+struct tracking_level {
+ template<class U>
+ struct traits_class_tracking {
+ typedef BOOST_DEDUCED_TYPENAME U::tracking type;
+ };
+ typedef mpl::integral_c_tag tag;
+ // note: at least one compiler complained w/o the full qualification
+ // on basic traits below
+ typedef
+ BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ is_base_and_derived<boost::serialization::basic_traits, T>,
+ traits_class_tracking<T>,
+ //else
+ BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ is_pointer<T>,
+ // pointers are not tracked by default
+ mpl::int_<track_never>,
+ //else
+ BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ // for primitives
+ BOOST_DEDUCED_TYPENAME mpl::equal_to<
+ implementation_level<T>,
+ mpl::int_<primitive_type>
+ >,
+ // is never
+ mpl::int_<track_never>,
+ // otherwise its selective
+ mpl::int_<track_selectivly>
+ > > >::type type;
+ BOOST_STATIC_CONSTANT(int, value = tracking_level::type::value);
+};
+
+
+template<class T, enum tracking_type L>
+inline bool operator>=(tracking_level<T> t, enum tracking_type l)
+{
+ return t.value >= (int)l;
+}
+
+} // namespace serialization
+} // namespace boost
+
+
+// The STATIC_ASSERT is prevents one from setting tracking for a primitive type.
+// This almost HAS to be an error. Doing this will effect serialization of all
+// char's in your program which is almost certainly what you don't want to do.
+// If you want to track all instances of a given primitive type, You'll have to
+// wrap it in your own type so its not a primitive anymore. Then it will compile
+// without problem.
+#define BOOST_CLASS_TRACKING(T, E) \
+namespace boost { \
+namespace serialization { \
+template<> \
+struct tracking_level< T > \
+{ \
+ typedef mpl::integral_c_tag tag; \
+ typedef mpl::int_< E> type; \
+ BOOST_STATIC_CONSTANT( \
+ int, \
+ value = tracking_level::type::value \
+ ); \
+ /* tracking for a class */ \
+ BOOST_STATIC_ASSERT(( \
+ mpl::greater< \
+ /* that is a prmitive */ \
+ implementation_level< T >, \
+ mpl::int_<primitive_type> \
+ >::value \
+ )); \
+}; \
+}}
+
+#endif // BOOST_SERIALIZATION_TRACKING_HPP
diff --git a/boost/boost/serialization/tracking_enum.hpp b/boost/boost/serialization/tracking_enum.hpp
new file mode 100644
index 00000000000..a2d25465745
--- /dev/null
+++ b/boost/boost/serialization/tracking_enum.hpp
@@ -0,0 +1,41 @@
+#ifndef BOOST_SERIALIZATION_TRACKING_ENUM_HPP
+#define BOOST_SERIALIZATION_TRACKING_ENUM_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// tracking_enum.hpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+namespace boost {
+namespace serialization {
+
+// addresses of serialized objects may be tracked to avoid saving/loading
+// redundant copies. This header defines a class trait that can be used
+// to specify when objects should be tracked
+
+// names for each tracking level
+enum tracking_type
+{
+ // never track this type
+ track_never = 0,
+ // track objects of this type if the object is serialized through a
+ // pointer.
+ track_selectivly = 1,
+ // always track this type
+ track_always = 2
+};
+
+} // namespace serialization
+} // namespace boost
+
+#endif // BOOST_SERIALIZATION_TRACKING_ENUM_HPP
diff --git a/boost/boost/serialization/traits.hpp b/boost/boost/serialization/traits.hpp
new file mode 100644
index 00000000000..38e56df979f
--- /dev/null
+++ b/boost/boost/serialization/traits.hpp
@@ -0,0 +1,62 @@
+#ifndef BOOST_SERIALIZATION_TRAITS_HPP
+#define BOOST_SERIALIZATION_TRAITS_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// traits.hpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+// This header is used to apply serialization traits to templates. The
+// standard system can't be used for platforms which don't support
+// Partial Templlate Specialization.
+
+// The motivation for this is the Name-Value Pair (NVP) template.
+// it has to work the same on all platforms in order for archives
+// to be portable accross platforms.
+
+#include <boost/config.hpp>
+#include <boost/static_assert.hpp>
+
+#include <boost/mpl/int.hpp>
+#include <boost/serialization/level_enum.hpp>
+#include <boost/serialization/tracking_enum.hpp>
+
+namespace boost {
+namespace serialization {
+
+// common base class used to detect appended traits class
+struct basic_traits {};
+
+template <class T>
+struct extended_type_info_impl;
+
+template<
+ class T,
+ int Level,
+ int Tracking,
+ unsigned int Version = 0,
+ class ETII = extended_type_info_impl< T >
+>
+struct traits : public basic_traits {
+ BOOST_STATIC_ASSERT(Version == 0 || Level >= object_class_info);
+ BOOST_STATIC_ASSERT(Tracking == track_never || Level >= object_serializable);
+ typedef BOOST_DEDUCED_TYPENAME mpl::int_<Level> level;
+ typedef BOOST_DEDUCED_TYPENAME mpl::int_<Tracking> tracking;
+ typedef BOOST_DEDUCED_TYPENAME mpl::int_<Version> version;
+ typedef ETII type_info_implementation;
+};
+
+} // namespace serialization
+} // namespace boost
+
+#endif // BOOST_SERIALIZATION_TRAITS_HPP
diff --git a/boost/boost/serialization/type_info_implementation.hpp b/boost/boost/serialization/type_info_implementation.hpp
new file mode 100644
index 00000000000..d9378588f61
--- /dev/null
+++ b/boost/boost/serialization/type_info_implementation.hpp
@@ -0,0 +1,86 @@
+#ifndef BOOST_SERIALIZATION_TYPE_INFO_IMPLEMENTATION_HPP
+#define BOOST_SERIALIZATION_TYPE_INFO_IMPLEMENTATION_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// type_info_implementation.hpp: interface for portable version of type_info
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+#include <boost/static_assert.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/type_traits/is_base_and_derived.hpp>
+#include <boost/serialization/traits.hpp>
+
+namespace boost {
+namespace serialization {
+
+// note that T and const T are folded into const T so that
+// there is only one table entry per type
+template<class T>
+struct type_info_implementation {
+ template<class U>
+ struct traits_class_typeinfo_implementation {
+ typedef BOOST_DEDUCED_TYPENAME U::type_info_implementation::type type;
+ };
+ // note: at least one compiler complained w/o the full qualification
+ // on basic traits below
+ typedef
+ BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ is_base_and_derived<boost::serialization::basic_traits, T>,
+ traits_class_typeinfo_implementation<T>,
+ //else
+ mpl::identity<
+ BOOST_DEDUCED_TYPENAME extended_type_info_impl<T>::type
+ >
+ >::type type;
+};
+
+} // namespace serialization
+} // namespace boost
+
+// define a macro to assign a particular derivation of extended_type_info
+// to a specified a class.
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x560))
+#define BOOST_CLASS_TYPE_INFO(T, ETI) \
+namespace boost { \
+namespace serialization { \
+template<> \
+struct type_info_implementation< T > { \
+ typedef ETI type; \
+}; \
+} \
+} \
+/**/
+#else
+#define BOOST_CLASS_TYPE_INFO(T, ETI) \
+namespace boost { \
+namespace serialization { \
+template<> \
+struct type_info_implementation< T > { \
+ typedef ETI type; \
+}; \
+template<> \
+struct type_info_implementation< const T > { \
+ typedef ETI type; \
+}; \
+} \
+} \
+/**/
+#endif
+
+#endif /// BOOST_SERIALIZATION_TYPE_INFO_IMPLEMENTATION_HPP
diff --git a/boost/boost/serialization/utility.hpp b/boost/boost/serialization/utility.hpp
new file mode 100644
index 00000000000..ea53d04d8c4
--- /dev/null
+++ b/boost/boost/serialization/utility.hpp
@@ -0,0 +1,47 @@
+#ifndef BOOST_SERIALIZATION_UTILITY_HPP
+#define BOOST_SERIALIZATION_UTILITY_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// serialization/utility.hpp:
+// serialization for stl utility templates
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <utility>
+#include <boost/config.hpp>
+
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/serialization/nvp.hpp>
+
+namespace boost {
+namespace serialization {
+
+// pair
+template<class Archive, class F, class S>
+inline void serialize(
+ Archive & ar,
+ std::pair<F, S> & p,
+ const unsigned int /* file_version */
+){
+ // note: we remove any const-ness on the first argument. The reason is that
+ // for stl maps, the type saved is pair<const key, T). We remove
+ // the const-ness in order to be able to load it.
+ typedef BOOST_DEDUCED_TYPENAME boost::remove_const<F>::type typef;
+ ar & boost::serialization::make_nvp("first", const_cast<typef &>(p.first));
+ ar & boost::serialization::make_nvp("second", p.second);
+}
+
+} // serialization
+} // namespace boost
+
+#endif // BOOST_SERIALIZATION_UTILITY_HPP
diff --git a/boost/boost/serialization/variant.hpp b/boost/boost/serialization/variant.hpp
new file mode 100644
index 00000000000..8fc47e7882e
--- /dev/null
+++ b/boost/boost/serialization/variant.hpp
@@ -0,0 +1,161 @@
+#ifndef BOOST_SERIALIZATION_VARIANT_HPP
+#define BOOST_SERIALIZATION_VARIANT_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#if defined(_MSC_VER) && (_MSC_VER <= 1020)
+# pragma warning (disable : 4786) // too long name, harmless warning
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// variant.hpp - non-intrusive serialization of variant types
+//
+// copyright (c) 2005
+// troy d. straszheim <troy@resophonic.com>
+// http://www.resophonic.com
+//
+// Use, modification and distribution is 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)
+//
+// See http://www.boost.org for updates, documentation, and revision history.
+//
+// thanks to Robert Ramey, Peter Dimov, and Richard Crossley.
+//
+
+#include <boost/mpl/front.hpp>
+#include <boost/mpl/pop_front.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/size.hpp>
+#include <boost/mpl/empty.hpp>
+
+#include <boost/throw_exception.hpp>
+
+#include <boost/variant.hpp>
+
+#include <boost/archive/archive_exception.hpp>
+
+#include <boost/serialization/split_free.hpp>
+#include <boost/serialization/serialization.hpp>
+
+namespace boost {
+namespace serialization {
+
+template<class Archive>
+struct variant_save_visitor : boost::static_visitor<> {
+ variant_save_visitor(Archive& ar) :
+ m_ar(ar)
+ {}
+ template<class T>
+ void operator()(T const & value) const
+ {
+ m_ar << BOOST_SERIALIZATION_NVP(value);
+ }
+private:
+ Archive & m_ar;
+};
+
+template<class Archive, BOOST_VARIANT_ENUM_PARAMS(/* typename */ class T)>
+void save(
+ Archive & ar,
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const & v,
+ unsigned int version
+){
+ int which = v.which();
+ ar << BOOST_SERIALIZATION_NVP(which);
+ typedef BOOST_DEDUCED_TYPENAME boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>::types types;
+ variant_save_visitor<Archive> visitor(ar);
+ v.apply_visitor(visitor);
+}
+
+template<class S>
+struct variant_impl {
+
+ struct load_null {
+ template<class Archive, class V>
+ static void invoke(
+ Archive & ar,
+ int which,
+ V & v,
+ unsigned int version
+ ){}
+ };
+
+ struct load_impl {
+ template<class Archive, class V>
+ static void invoke(
+ Archive & ar,
+ int which,
+ V & v,
+ unsigned int version
+ ){
+ if(which == 0){
+ // note: A non-intrusive implementation (such as this one)
+ // necessary has to copy the value. This wouldn't be necessary
+ // with an implementation that de-serialized to the address of the
+ // aligned storage included in the variant.
+ typedef BOOST_DEDUCED_TYPENAME mpl::front<S>::type head_type;
+ head_type value;
+ ar >> BOOST_SERIALIZATION_NVP(value);
+ v = value;
+ ar.reset_object_address(& boost::get<head_type>(v), & value);
+ return;
+ }
+ typedef BOOST_DEDUCED_TYPENAME mpl::pop_front<S>::type type;
+ variant_impl<type>::load(ar, which - 1, v, version);
+ }
+ };
+
+ template<class Archive, class V>
+ static void load(
+ Archive & ar,
+ int which,
+ V & v,
+ unsigned int version
+ ){
+ typedef BOOST_DEDUCED_TYPENAME mpl::eval_if<mpl::empty<S>,
+ mpl::identity<load_null>,
+ mpl::identity<load_impl>
+ >::type typex;
+ typex::invoke(ar, which, v, version);
+ }
+
+};
+
+template<class Archive, BOOST_VARIANT_ENUM_PARAMS(/* typename */ class T)>
+void load(
+ Archive & ar,
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>& v,
+ unsigned int version
+){
+ int which;
+ typedef BOOST_DEDUCED_TYPENAME boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>::types types;
+ ar >> BOOST_SERIALIZATION_NVP(which);
+ if(which >= mpl::size<types>::value)
+ // this might happen if a type was removed from the list of variant types
+ boost::throw_exception(
+ boost::archive::archive_exception(
+ boost::archive::archive_exception::unsupported_version
+ )
+ );
+ variant_impl<types>::load(ar, which, v, version);
+}
+
+template<class Archive,BOOST_VARIANT_ENUM_PARAMS(/* typename */ class T)>
+inline void serialize(
+ Archive & ar,
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> & v,
+ unsigned int file_version
+){
+ split_free(ar,v,file_version);
+}
+
+} // namespace serialization
+} // namespace boost
+
+#endif //BOOST_SERIALIZATION_VARIANT_HPP
+
diff --git a/boost/boost/serialization/vector.hpp b/boost/boost/serialization/vector.hpp
new file mode 100644
index 00000000000..fcc3611740a
--- /dev/null
+++ b/boost/boost/serialization/vector.hpp
@@ -0,0 +1,128 @@
+#ifndef BOOST_SERIALIZATION_VECTOR_HPP
+#define BOOST_SERIALIZATION_VECTOR_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// vector.hpp: serialization for stl vector templates
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <vector>
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+#include <boost/serialization/collections_save_imp.hpp>
+#include <boost/serialization/collections_load_imp.hpp>
+#include <boost/serialization/split_free.hpp>
+
+namespace boost {
+namespace serialization {
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// vector<T>
+template<class Archive, class U, class Allocator>
+inline void save(
+ Archive & ar,
+ const std::vector<U, Allocator> &t,
+ const unsigned int /* file_version */
+){
+ boost::serialization::stl::save_collection<Archive, std::vector<U, Allocator> >(
+ ar, t
+ );
+}
+
+template<class Archive, class U, class Allocator>
+inline void load(
+ Archive & ar,
+ std::vector<U, Allocator> &t,
+ const unsigned int /* file_version */
+){
+ boost::serialization::stl::load_collection<
+ Archive,
+ std::vector<U, Allocator>,
+ boost::serialization::stl::archive_input_seq<
+ Archive, std::vector<U, Allocator>
+ >,
+ boost::serialization::stl::reserve_imp<std::vector<U, Allocator> >
+ >(ar, t);
+}
+
+// split non-intrusive serialization function member into separate
+// non intrusive save/load member functions
+template<class Archive, class U, class Allocator>
+inline void serialize(
+ Archive & ar,
+ std::vector<U, Allocator> & t,
+ const unsigned int file_version
+){
+ boost::serialization::split_free(ar, t, file_version);
+}
+
+#if ! BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// vector<bool>
+template<class Archive, class Allocator>
+inline void save(
+ Archive & ar,
+ const std::vector<bool, Allocator> &t,
+ const unsigned int /* file_version */
+){
+ // record number of elements
+ unsigned int count = t.size();
+ ar << BOOST_SERIALIZATION_NVP(count);
+ std::vector<bool>::const_iterator it = t.begin();
+ while(count-- > 0){
+ bool tb = *it++;
+ ar << boost::serialization::make_nvp("item", tb);
+ }
+}
+
+template<class Archive, class Allocator>
+inline void load(
+ Archive & ar,
+ std::vector<bool, Allocator> &t,
+ const unsigned int /* file_version */
+){
+ // retrieve number of elements
+ unsigned int count;
+ ar >> BOOST_SERIALIZATION_NVP(count);
+ t.clear();
+ while(count-- > 0){
+ bool i;
+ ar >> boost::serialization::make_nvp("item", i);
+ t.push_back(i);
+ }
+}
+
+// split non-intrusive serialization function member into separate
+// non intrusive save/load member functions
+template<class Archive, class Allocator>
+inline void serialize(
+ Archive & ar,
+ std::vector<bool, Allocator> & t,
+ const unsigned int file_version
+){
+ boost::serialization::split_free(ar, t, file_version);
+}
+
+#endif // BOOST_WORKAROUND
+
+} // serialization
+} // namespace boost
+
+#include <boost/serialization/collection_traits.hpp>
+
+BOOST_SERIALIZATION_COLLECTION_TRAITS(std::vector)
+
+#endif // BOOST_SERIALIZATION_VECTOR_HPP
diff --git a/boost/boost/serialization/version.hpp b/boost/boost/serialization/version.hpp
new file mode 100644
index 00000000000..5f27e9e0abc
--- /dev/null
+++ b/boost/boost/serialization/version.hpp
@@ -0,0 +1,87 @@
+#ifndef BOOST_SERIALIZATION_VERSION_HPP
+#define BOOST_SERIALIZATION_VERSION_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// version.hpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/integral_c_tag.hpp>
+
+#include <boost/type_traits/is_base_and_derived.hpp>
+//#include <boost/serialization/traits.hpp>
+
+namespace boost {
+namespace serialization {
+
+struct basic_traits;
+
+// default version number is 0. Override with higher version
+// when class definition changes.
+template<class T>
+struct version
+{
+ template<class U>
+ struct traits_class_version {
+ typedef BOOST_DEDUCED_TYPENAME U::version type;
+ };
+
+ typedef mpl::integral_c_tag tag;
+ // note: at least one compiler complained w/o the full qualification
+ // on basic traits below
+ typedef
+ BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ is_base_and_derived<boost::serialization::basic_traits,T>,
+ traits_class_version<T>,
+ mpl::int_<0>
+ >::type type;
+ BOOST_STATIC_CONSTANT(unsigned int, value = version::type::value);
+};
+
+} // namespace serialization
+} // namespace boost
+
+// specify the current version number for the class
+#define BOOST_CLASS_VERSION(T, N) \
+namespace boost { \
+namespace serialization { \
+template<> \
+struct version<T > \
+{ \
+ typedef mpl::int_<N> type; \
+ typedef mpl::integral_c_tag tag; \
+ BOOST_STATIC_CONSTANT(unsigned int, value = version::type::value); \
+ /* require that class info saved when versioning is used */ \
+ /* \
+ BOOST_STATIC_ASSERT(( \
+ mpl::or_< \
+ mpl::equal_to< \
+ mpl::int_<0>, \
+ mpl::int_<N> \
+ >, \
+ mpl::equal_to< \
+ implementation_level<T>, \
+ mpl::int_<object_class_info> \
+ > \
+ >::value \
+ )); \
+ */ \
+}; \
+} \
+}
+
+#endif // BOOST_SERIALIZATION_VERSION_HPP
diff --git a/boost/boost/serialization/void_cast.hpp b/boost/boost/serialization/void_cast.hpp
new file mode 100644
index 00000000000..630ae452ae8
--- /dev/null
+++ b/boost/boost/serialization/void_cast.hpp
@@ -0,0 +1,200 @@
+#ifndef BOOST_SERIALIZATION_VOID_CAST_HPP
+#define BOOST_SERIALIZATION_VOID_CAST_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// void_cast.hpp: interface for run-time casting of void pointers.
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+// gennadiy.rozental@tfn.com
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/smart_cast.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+
+#include <boost/serialization/config.hpp>
+#include <boost/serialization/force_include.hpp>
+#include <boost/serialization/type_info_implementation.hpp>
+
+#include <boost/config/abi_prefix.hpp> // must be the last header
+
+#ifdef BOOST_MSVC
+# pragma warning(push)
+# pragma warning(disable : 4251 4231 4660 4275)
+#endif
+
+namespace boost {
+namespace serialization {
+
+class BOOST_SERIALIZATION_DECL(BOOST_PP_EMPTY()) extended_type_info;
+
+// Given a void *, assume that it really points to an instance of one type
+// and alter it so that it would point to an instance of a related type.
+// Return the altered pointer. If there exists no sequence of casts that
+// can transform from_type to to_type, return a NULL.
+
+BOOST_SERIALIZATION_DECL(void const *)
+void_upcast(
+ extended_type_info const & derived_type,
+ extended_type_info const & base_type,
+ void const * const t,
+ bool top = true
+);
+
+inline void *
+void_upcast(
+ extended_type_info const & derived_type_,
+ extended_type_info const & base_type_,
+ void * const t
+){
+ return const_cast<void*>(void_upcast(
+ derived_type_,
+ base_type_,
+ const_cast<void const *>(t)
+ ));
+}
+
+BOOST_SERIALIZATION_DECL(void const *)
+void_downcast(
+ extended_type_info const & derived_type,
+ extended_type_info const & base_type,
+ void const * const t,
+ bool top = true
+);
+
+inline void *
+void_downcast(
+ extended_type_info const & derived_type_,
+ extended_type_info const & base_type_,
+ void * const t
+){
+ return const_cast<void*>(void_downcast(
+ derived_type_,
+ base_type_,
+ const_cast<void const *>(t)
+ ));
+}
+
+namespace void_cast_detail {
+
+// note: can't be abstract because an instance is used as a search argument
+class BOOST_SERIALIZATION_DECL(BOOST_PP_EMPTY()) void_caster
+{
+ friend struct void_caster_compare ;
+ friend
+ BOOST_SERIALIZATION_DECL(void const *)
+ boost::serialization::void_upcast(
+ const extended_type_info & derived_type,
+ const extended_type_info & base_type,
+ const void * t,
+ bool top
+ );
+ friend
+ BOOST_SERIALIZATION_DECL(void const *)
+ boost::serialization::void_downcast(
+ const extended_type_info & derived_type,
+ const extended_type_info & base_type,
+ const void * t,
+ bool top
+ );
+ // each derived class must re-implement these;
+ virtual void const * upcast(void const * t) const = 0;
+ virtual void const * downcast(void const * t) const = 0;
+ // Data members
+ extended_type_info const & m_derived_type;
+ extended_type_info const & m_base_type;
+protected:
+ static void static_register(const void_caster *);
+public:
+ // Constructor
+ void_caster(
+ extended_type_info const & derived_type_,
+ extended_type_info const & base_type_
+ );
+ // predicate used to determine if this void caster includes
+ // a particular eti *
+ bool includes(const extended_type_info * eti) const;
+ virtual ~void_caster();
+private:
+ // cw 8.3 requires this!!
+ void_caster& operator=(void_caster const&);
+};
+
+template <class Derived, class Base>
+class void_caster_primitive :
+ public void_caster
+{
+ virtual void const* downcast( void const * t ) const {
+ Derived * d = boost::smart_cast<const Derived *, const Base *>(
+ static_cast<const Base *>(t)
+ );
+ return d;
+ }
+ virtual void const* upcast(void const * t) const {
+ Base * b = boost::smart_cast<const Base *, const Derived *>(
+ static_cast<const Derived *>(t)
+ );
+ return b;
+ }
+
+public:
+ static const void_caster_primitive instance;
+ void_caster_primitive() BOOST_USED;
+};
+
+template <class Derived, class Base>
+void_caster_primitive<Derived, Base>::void_caster_primitive() :
+ void_caster(
+ * type_info_implementation<Derived>::type::get_instance(),
+ * type_info_implementation<Base>::type::get_instance()
+ )
+{
+ this->static_register(& instance);
+}
+
+// the purpose of this class is to create to->from and from->to instances
+// of void_caster_primitive for each related pair of types. This has to be
+// done a pre-execution time - hence the usage of static variable.
+template<class Derived, class Base>
+const void_caster_primitive<Derived, Base>
+ void_caster_primitive<Derived, Base>::instance;
+
+} // void_cast_detail
+
+// Register a base/derived pair. This indicates that it is possible
+// to upcast a void pointer from Derived to Base and downcast a
+// void pointer from Base to Derived. Note bogus arguments to workaround
+// bug in msvc 6.0
+template<class Derived, class Base>
+BOOST_DLLEXPORT
+inline const void_cast_detail::void_caster & void_cast_register(
+ const Derived * dnull,
+ const Base * bnull
+) BOOST_USED;
+template<class Derived, class Base>
+BOOST_DLLEXPORT
+inline const void_cast_detail::void_caster & void_cast_register(
+ const Derived * /* dnull = NULL */,
+ const Base * /* bnull = NULL */
+){
+ return void_cast_detail::void_caster_primitive<
+ const Derived,
+ const Base
+ >::instance;
+}
+
+} // namespace serialization
+} // namespace boost
+
+#include <boost/config/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // BOOST_SERIALIZATION_VOID_CAST_HPP
diff --git a/boost/boost/serialization/void_cast_fwd.hpp b/boost/boost/serialization/void_cast_fwd.hpp
new file mode 100644
index 00000000000..0ec73217c79
--- /dev/null
+++ b/boost/boost/serialization/void_cast_fwd.hpp
@@ -0,0 +1,43 @@
+#ifndef BOOST_SERIALIZATION_VOID_CAST_FWD_HPP
+#define BOOST_SERIALIZATION_VOID_CAST_FWD_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// void_cast_fwd.hpp: interface for run-time casting of void pointers.
+
+// (C) Copyright 2005 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+// gennadiy.rozental@tfn.com
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/serialization/force_include.hpp>
+#include <boost/detail/workaround.hpp>
+
+namespace boost {
+namespace serialization {
+namespace void_cast_detail{
+class void_caster;
+} // namespace void_cast_detail
+
+template<class Derived, class Base>
+BOOST_DLLEXPORT
+// DMC doesn't allow export and inline, so supress the inline
+#if BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x849))
+#else
+inline
+#endif
+const void_cast_detail::void_caster & void_cast_register(
+ const Derived * dnull = NULL,
+ const Base * bnull = NULL
+) BOOST_USED;
+} // namespace serialization
+} // namespace boost
+
+#endif // BOOST_SERIALIZATION_VOID_CAST_HPP
diff --git a/boost/boost/serialization/weak_ptr.hpp b/boost/boost/serialization/weak_ptr.hpp
new file mode 100644
index 00000000000..52093590594
--- /dev/null
+++ b/boost/boost/serialization/weak_ptr.hpp
@@ -0,0 +1,58 @@
+#ifndef BOOST_SERIALIZATION_WEAK_PTR_HPP
+#define BOOST_SERIALIZATION_WEAK_PTR_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// shared_ptr.hpp: serialization for boost shared pointer
+
+// (C) Copyright 2004 Robert Ramey and Martin Ecker
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/weak_ptr.hpp>
+#include <boost/serialization/shared_ptr.hpp>
+
+namespace boost {
+namespace serialization{
+
+template<class Archive, class T>
+inline void save(
+ Archive & ar,
+ const boost::weak_ptr<T> &t,
+ const unsigned int /* file_version */
+){
+ const boost::shared_ptr<T> sp(t);
+ ar << boost::serialization::make_nvp(NULL, sp);
+}
+
+template<class Archive, class T>
+inline void load(
+ Archive & ar,
+ boost::weak_ptr<T> &t,
+ const unsigned int /* file_version */
+){
+ boost::shared_ptr<T> sp;
+ ar >> boost::serialization::make_nvp(NULL, sp);
+ t = sp;
+}
+
+template<class Archive, class T>
+inline void serialize(
+ Archive & ar,
+ boost::weak_ptr<T> &t,
+ const unsigned int file_version
+){
+ boost::serialization::split_free(ar, t, file_version);
+}
+
+} // namespace serialization
+} // namespace boost
+
+#endif // BOOST_SERIALIZATION_WEAK_PTR_HPP
diff --git a/boost/boost/shared_array.hpp b/boost/boost/shared_array.hpp
new file mode 100644
index 00000000000..eb69c8ed67e
--- /dev/null
+++ b/boost/boost/shared_array.hpp
@@ -0,0 +1,177 @@
+#ifndef BOOST_SHARED_ARRAY_HPP_INCLUDED
+#define BOOST_SHARED_ARRAY_HPP_INCLUDED
+
+//
+// shared_array.hpp
+//
+// (C) Copyright Greg Colvin and Beman Dawes 1998, 1999.
+// Copyright (c) 2001, 2002 Peter Dimov
+//
+// 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/smart_ptr/shared_array.htm for documentation.
+//
+
+#include <boost/config.hpp> // for broken compiler workarounds
+
+#if defined(BOOST_NO_MEMBER_TEMPLATES) && !defined(BOOST_MSVC6_MEMBER_TEMPLATES)
+#include <boost/detail/shared_array_nmt.hpp>
+#else
+
+#include <memory> // TR1 cyclic inclusion fix
+
+#include <boost/assert.hpp>
+#include <boost/checked_delete.hpp>
+
+#include <boost/detail/shared_count.hpp>
+#include <boost/detail/workaround.hpp>
+
+#include <cstddef> // for std::ptrdiff_t
+#include <algorithm> // for std::swap
+#include <functional> // for std::less
+
+namespace boost
+{
+
+//
+// shared_array
+//
+// shared_array extends shared_ptr to arrays.
+// The array pointed to is deleted when the last shared_array pointing to it
+// is destroyed or reset.
+//
+
+template<class T> class shared_array
+{
+private:
+
+ // Borland 5.5.1 specific workarounds
+ typedef checked_array_deleter<T> deleter;
+ typedef shared_array<T> this_type;
+
+public:
+
+ typedef T element_type;
+
+ explicit shared_array(T * p = 0): px(p), pn(p, deleter())
+ {
+ }
+
+ //
+ // Requirements: D's copy constructor must not throw
+ //
+ // shared_array will release p by calling d(p)
+ //
+
+ template<class D> shared_array(T * p, D d): px(p), pn(p, d)
+ {
+ }
+
+// generated copy constructor, assignment, destructor are fine
+
+ void reset(T * p = 0)
+ {
+ BOOST_ASSERT(p == 0 || p != px);
+ this_type(p).swap(*this);
+ }
+
+ template <class D> void reset(T * p, D d)
+ {
+ this_type(p, d).swap(*this);
+ }
+
+ T & operator[] (std::ptrdiff_t i) const // never throws
+ {
+ BOOST_ASSERT(px != 0);
+ BOOST_ASSERT(i >= 0);
+ return px[i];
+ }
+
+ T * get() const // never throws
+ {
+ return px;
+ }
+
+ // implicit conversion to "bool"
+
+#if defined(__SUNPRO_CC) && BOOST_WORKAROUND(__SUNPRO_CC, <= 0x530)
+
+ operator bool () const
+ {
+ return px != 0;
+ }
+
+#elif defined(__MWERKS__) && BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003))
+ typedef T * (this_type::*unspecified_bool_type)() const;
+
+ operator unspecified_bool_type() const // never throws
+ {
+ return px == 0? 0: &this_type::get;
+ }
+
+#else
+
+ typedef T * this_type::*unspecified_bool_type;
+
+ operator unspecified_bool_type() const // never throws
+ {
+ return px == 0? 0: &this_type::px;
+ }
+
+#endif
+
+ bool operator! () const // never throws
+ {
+ return px == 0;
+ }
+
+ bool unique() const // never throws
+ {
+ return pn.unique();
+ }
+
+ long use_count() const // never throws
+ {
+ return pn.use_count();
+ }
+
+ void swap(shared_array<T> & other) // never throws
+ {
+ std::swap(px, other.px);
+ pn.swap(other.pn);
+ }
+
+private:
+
+ T * px; // contained pointer
+ detail::shared_count pn; // reference counter
+
+}; // shared_array
+
+template<class T> inline bool operator==(shared_array<T> const & a, shared_array<T> const & b) // never throws
+{
+ return a.get() == b.get();
+}
+
+template<class T> inline bool operator!=(shared_array<T> const & a, shared_array<T> const & b) // never throws
+{
+ return a.get() != b.get();
+}
+
+template<class T> inline bool operator<(shared_array<T> const & a, shared_array<T> const & b) // never throws
+{
+ return std::less<T*>()(a.get(), b.get());
+}
+
+template<class T> void swap(shared_array<T> & a, shared_array<T> & b) // never throws
+{
+ a.swap(b);
+}
+
+} // namespace boost
+
+#endif // #if defined(BOOST_NO_MEMBER_TEMPLATES) && !defined(BOOST_MSVC6_MEMBER_TEMPLATES)
+
+#endif // #ifndef BOOST_SHARED_ARRAY_HPP_INCLUDED
diff --git a/boost/boost/shared_container_iterator.hpp b/boost/boost/shared_container_iterator.hpp
new file mode 100644
index 00000000000..7d8ecd3e51b
--- /dev/null
+++ b/boost/boost/shared_container_iterator.hpp
@@ -0,0 +1,62 @@
+// (C) Copyright Ronald Garcia 2002. Permission to copy, use, modify, sell and
+// distribute this software is granted provided this copyright notice appears
+// in all copies. This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+
+// See http://www.boost.org/libs/utility/shared_container_iterator.html for documentation.
+
+#ifndef SHARED_CONTAINER_ITERATOR_RG08102002_HPP
+#define SHARED_CONTAINER_ITERATOR_RG08102002_HPP
+
+#include "boost/iterator_adaptors.hpp"
+#include "boost/shared_ptr.hpp"
+#include <utility>
+
+namespace boost {
+
+template <typename Container>
+class shared_container_iterator : public iterator_adaptor<
+ shared_container_iterator<Container>,
+ typename Container::iterator> {
+
+ typedef iterator_adaptor<
+ shared_container_iterator<Container>,
+ typename Container::iterator> super_t;
+
+ typedef typename Container::iterator iterator_t;
+ typedef boost::shared_ptr<Container> container_ref_t;
+
+ container_ref_t container_ref;
+public:
+ shared_container_iterator() { }
+
+ shared_container_iterator(iterator_t const& x,container_ref_t const& c) :
+ super_t(x), container_ref(c) { }
+
+
+};
+
+template <typename Container>
+shared_container_iterator<Container>
+make_shared_container_iterator(typename Container::iterator iter,
+ boost::shared_ptr<Container> const& container) {
+ typedef shared_container_iterator<Container> iterator;
+ return iterator(iter,container);
+}
+
+
+
+template <typename Container>
+std::pair<
+ shared_container_iterator<Container>,
+ shared_container_iterator<Container> >
+make_shared_container_range(boost::shared_ptr<Container> const& container) {
+ return
+ std::make_pair(
+ make_shared_container_iterator(container->begin(),container),
+ make_shared_container_iterator(container->end(),container));
+}
+
+
+} // namespace boost
+#endif // SHARED_CONTAINER_ITERATOR_RG08102002_HPP
diff --git a/boost/boost/shared_ptr.hpp b/boost/boost/shared_ptr.hpp
new file mode 100644
index 00000000000..9edc86ffaa3
--- /dev/null
+++ b/boost/boost/shared_ptr.hpp
@@ -0,0 +1,558 @@
+#ifndef BOOST_SHARED_PTR_HPP_INCLUDED
+#define BOOST_SHARED_PTR_HPP_INCLUDED
+
+//
+// shared_ptr.hpp
+//
+// (C) Copyright Greg Colvin and Beman Dawes 1998, 1999.
+// Copyright (c) 2001-2006 Peter Dimov
+//
+// 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/smart_ptr/shared_ptr.htm for documentation.
+//
+
+#include <boost/config.hpp> // for broken compiler workarounds
+
+#if defined(BOOST_NO_MEMBER_TEMPLATES) && !defined(BOOST_MSVC6_MEMBER_TEMPLATES)
+#include <boost/detail/shared_ptr_nmt.hpp>
+#else
+
+#include <memory> // for std::auto_ptr
+
+#include <boost/assert.hpp>
+#include <boost/checked_delete.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/detail/shared_count.hpp>
+#include <boost/detail/workaround.hpp>
+
+#include <algorithm> // for std::swap
+#include <functional> // for std::less
+#include <typeinfo> // for std::bad_cast
+#include <iosfwd> // for std::basic_ostream
+
+#ifdef BOOST_MSVC // moved here to work around VC++ compiler crash
+# pragma warning(push)
+# pragma warning(disable:4284) // odd return type for operator->
+#endif
+
+namespace boost
+{
+
+template<class T> class weak_ptr;
+template<class T> class enable_shared_from_this;
+
+namespace detail
+{
+
+struct static_cast_tag {};
+struct const_cast_tag {};
+struct dynamic_cast_tag {};
+struct polymorphic_cast_tag {};
+
+template<class T> struct shared_ptr_traits
+{
+ typedef T & reference;
+};
+
+template<> struct shared_ptr_traits<void>
+{
+ typedef void reference;
+};
+
+#if !defined(BOOST_NO_CV_VOID_SPECIALIZATIONS)
+
+template<> struct shared_ptr_traits<void const>
+{
+ typedef void reference;
+};
+
+template<> struct shared_ptr_traits<void volatile>
+{
+ typedef void reference;
+};
+
+template<> struct shared_ptr_traits<void const volatile>
+{
+ typedef void reference;
+};
+
+#endif
+
+// enable_shared_from_this support
+
+template<class T, class Y> void sp_enable_shared_from_this( shared_count const & pn, boost::enable_shared_from_this<T> const * pe, Y const * px )
+{
+ if(pe != 0) pe->_internal_weak_this._internal_assign(const_cast<Y*>(px), pn);
+}
+
+#ifdef sgi
+// Turn off: the last argument of the varargs function "sp_enable_shared_from_this" is unnamed
+# pragma set woff 3506
+#endif
+
+inline void sp_enable_shared_from_this( shared_count const & /*pn*/, ... )
+{
+}
+
+#ifdef sgi
+# pragma reset woff 3506
+#endif
+
+#if !defined( BOOST_NO_SFINAE ) && !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION ) && !defined( BOOST_NO_AUTO_PTR )
+
+// rvalue auto_ptr support based on a technique by Dave Abrahams
+
+template< class T, class R > struct sp_enable_if_auto_ptr
+{
+};
+
+template< class T, class R > struct sp_enable_if_auto_ptr< std::auto_ptr< T >, R >
+{
+ typedef R type;
+};
+
+#endif
+
+} // namespace detail
+
+
+//
+// shared_ptr
+//
+// An enhanced relative of scoped_ptr with reference counted copy semantics.
+// The object pointed to is deleted when the last shared_ptr pointing to it
+// is destroyed or reset.
+//
+
+template<class T> class shared_ptr
+{
+private:
+
+ // Borland 5.5.1 specific workaround
+ typedef shared_ptr<T> this_type;
+
+public:
+
+ typedef T element_type;
+ typedef T value_type;
+ typedef T * pointer;
+ typedef typename boost::detail::shared_ptr_traits<T>::reference reference;
+
+ shared_ptr(): px(0), pn() // never throws in 1.30+
+ {
+ }
+
+ template<class Y>
+ explicit shared_ptr( Y * p ): px( p ), pn( p ) // Y must be complete
+ {
+ boost::detail::sp_enable_shared_from_this( pn, p, p );
+ }
+
+ //
+ // Requirements: D's copy constructor must not throw
+ //
+ // shared_ptr will release p by calling d(p)
+ //
+
+ template<class Y, class D> shared_ptr(Y * p, D d): px(p), pn(p, d)
+ {
+ boost::detail::sp_enable_shared_from_this( pn, p, p );
+ }
+
+ // As above, but with allocator. A's copy constructor shall not throw.
+
+ template<class Y, class D, class A> shared_ptr( Y * p, D d, A a ): px( p ), pn( p, d, a )
+ {
+ boost::detail::sp_enable_shared_from_this( pn, p, p );
+ }
+
+// generated copy constructor, assignment, destructor are fine...
+
+// except that Borland C++ has a bug, and g++ with -Wsynth warns
+#if defined(__BORLANDC__) || defined(__GNUC__)
+
+ shared_ptr & operator=(shared_ptr const & r) // never throws
+ {
+ px = r.px;
+ pn = r.pn; // shared_count::op= doesn't throw
+ return *this;
+ }
+
+#endif
+
+ template<class Y>
+ explicit shared_ptr(weak_ptr<Y> const & r): pn(r.pn) // may throw
+ {
+ // it is now safe to copy r.px, as pn(r.pn) did not throw
+ px = r.px;
+ }
+
+ template<class Y>
+ shared_ptr(shared_ptr<Y> const & r): px(r.px), pn(r.pn) // never throws
+ {
+ }
+
+ template<class Y>
+ shared_ptr(shared_ptr<Y> const & r, boost::detail::static_cast_tag): px(static_cast<element_type *>(r.px)), pn(r.pn)
+ {
+ }
+
+ template<class Y>
+ shared_ptr(shared_ptr<Y> const & r, boost::detail::const_cast_tag): px(const_cast<element_type *>(r.px)), pn(r.pn)
+ {
+ }
+
+ template<class Y>
+ shared_ptr(shared_ptr<Y> const & r, boost::detail::dynamic_cast_tag): px(dynamic_cast<element_type *>(r.px)), pn(r.pn)
+ {
+ if(px == 0) // need to allocate new counter -- the cast failed
+ {
+ pn = boost::detail::shared_count();
+ }
+ }
+
+ template<class Y>
+ shared_ptr(shared_ptr<Y> const & r, boost::detail::polymorphic_cast_tag): px(dynamic_cast<element_type *>(r.px)), pn(r.pn)
+ {
+ if(px == 0)
+ {
+ boost::throw_exception(std::bad_cast());
+ }
+ }
+
+#ifndef BOOST_NO_AUTO_PTR
+
+ template<class Y>
+ explicit shared_ptr(std::auto_ptr<Y> & r): px(r.get()), pn()
+ {
+ Y * tmp = r.get();
+ pn = boost::detail::shared_count(r);
+ boost::detail::sp_enable_shared_from_this( pn, tmp, tmp );
+ }
+
+#if !defined( BOOST_NO_SFINAE ) && !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )
+
+ template<class Ap>
+ explicit shared_ptr( Ap r, typename boost::detail::sp_enable_if_auto_ptr<Ap, int>::type = 0 ): px( r.get() ), pn()
+ {
+ typename Ap::element_type * tmp = r.get();
+ pn = boost::detail::shared_count( r );
+ boost::detail::sp_enable_shared_from_this( pn, tmp, tmp );
+ }
+
+
+#endif // BOOST_NO_SFINAE, BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#endif // BOOST_NO_AUTO_PTR
+
+#if !defined(BOOST_MSVC) || (BOOST_MSVC >= 1300)
+
+ template<class Y>
+ shared_ptr & operator=(shared_ptr<Y> const & r) // never throws
+ {
+ px = r.px;
+ pn = r.pn; // shared_count::op= doesn't throw
+ return *this;
+ }
+
+#endif
+
+#ifndef BOOST_NO_AUTO_PTR
+
+ template<class Y>
+ shared_ptr & operator=( std::auto_ptr<Y> & r )
+ {
+ this_type(r).swap(*this);
+ return *this;
+ }
+
+#if !defined( BOOST_NO_SFINAE ) && !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )
+
+ template<class Ap>
+ typename boost::detail::sp_enable_if_auto_ptr< Ap, shared_ptr & >::type operator=( Ap r )
+ {
+ this_type( r ).swap( *this );
+ return *this;
+ }
+
+
+#endif // BOOST_NO_SFINAE, BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#endif // BOOST_NO_AUTO_PTR
+
+ void reset() // never throws in 1.30+
+ {
+ this_type().swap(*this);
+ }
+
+ template<class Y> void reset(Y * p) // Y must be complete
+ {
+ BOOST_ASSERT(p == 0 || p != px); // catch self-reset errors
+ this_type(p).swap(*this);
+ }
+
+ template<class Y, class D> void reset( Y * p, D d )
+ {
+ this_type( p, d ).swap( *this );
+ }
+
+ template<class Y, class D, class A> void reset( Y * p, D d, A a )
+ {
+ this_type( p, d, a ).swap( *this );
+ }
+
+ reference operator* () const // never throws
+ {
+ BOOST_ASSERT(px != 0);
+ return *px;
+ }
+
+ T * operator-> () const // never throws
+ {
+ BOOST_ASSERT(px != 0);
+ return px;
+ }
+
+ T * get() const // never throws
+ {
+ return px;
+ }
+
+ // implicit conversion to "bool"
+
+#if defined(__SUNPRO_CC) && BOOST_WORKAROUND(__SUNPRO_CC, <= 0x580)
+
+ operator bool () const
+ {
+ return px != 0;
+ }
+
+#elif defined( _MANAGED )
+
+ static void unspecified_bool( this_type*** )
+ {
+ }
+
+ typedef void (*unspecified_bool_type)( this_type*** );
+
+ operator unspecified_bool_type() const // never throws
+ {
+ return px == 0? 0: unspecified_bool;
+ }
+
+#elif \
+ ( defined(__MWERKS__) && BOOST_WORKAROUND(__MWERKS__, < 0x3200) ) || \
+ ( defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ < 304) )
+
+ typedef T * (this_type::*unspecified_bool_type)() const;
+
+ operator unspecified_bool_type() const // never throws
+ {
+ return px == 0? 0: &this_type::get;
+ }
+
+#else
+
+ typedef T * this_type::*unspecified_bool_type;
+
+ operator unspecified_bool_type() const // never throws
+ {
+ return px == 0? 0: &this_type::px;
+ }
+
+#endif
+
+ // operator! is redundant, but some compilers need it
+
+ bool operator! () const // never throws
+ {
+ return px == 0;
+ }
+
+ bool unique() const // never throws
+ {
+ return pn.unique();
+ }
+
+ long use_count() const // never throws
+ {
+ return pn.use_count();
+ }
+
+ void swap(shared_ptr<T> & other) // never throws
+ {
+ std::swap(px, other.px);
+ pn.swap(other.pn);
+ }
+
+ template<class Y> bool _internal_less(shared_ptr<Y> const & rhs) const
+ {
+ return pn < rhs.pn;
+ }
+
+ void * _internal_get_deleter(std::type_info const & ti) const
+ {
+ return pn.get_deleter(ti);
+ }
+
+// Tasteless as this may seem, making all members public allows member templates
+// to work in the absence of member template friends. (Matthew Langston)
+
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+
+private:
+
+ template<class Y> friend class shared_ptr;
+ template<class Y> friend class weak_ptr;
+
+
+#endif
+
+ T * px; // contained pointer
+ boost::detail::shared_count pn; // reference counter
+
+}; // shared_ptr
+
+template<class T, class U> inline bool operator==(shared_ptr<T> const & a, shared_ptr<U> const & b)
+{
+ return a.get() == b.get();
+}
+
+template<class T, class U> inline bool operator!=(shared_ptr<T> const & a, shared_ptr<U> const & b)
+{
+ return a.get() != b.get();
+}
+
+#if __GNUC__ == 2 && __GNUC_MINOR__ <= 96
+
+// Resolve the ambiguity between our op!= and the one in rel_ops
+
+template<class T> inline bool operator!=(shared_ptr<T> const & a, shared_ptr<T> const & b)
+{
+ return a.get() != b.get();
+}
+
+#endif
+
+template<class T, class U> inline bool operator<(shared_ptr<T> const & a, shared_ptr<U> const & b)
+{
+ return a._internal_less(b);
+}
+
+template<class T> inline void swap(shared_ptr<T> & a, shared_ptr<T> & b)
+{
+ a.swap(b);
+}
+
+template<class T, class U> shared_ptr<T> static_pointer_cast(shared_ptr<U> const & r)
+{
+ return shared_ptr<T>(r, boost::detail::static_cast_tag());
+}
+
+template<class T, class U> shared_ptr<T> const_pointer_cast(shared_ptr<U> const & r)
+{
+ return shared_ptr<T>(r, boost::detail::const_cast_tag());
+}
+
+template<class T, class U> shared_ptr<T> dynamic_pointer_cast(shared_ptr<U> const & r)
+{
+ return shared_ptr<T>(r, boost::detail::dynamic_cast_tag());
+}
+
+// shared_*_cast names are deprecated. Use *_pointer_cast instead.
+
+template<class T, class U> shared_ptr<T> shared_static_cast(shared_ptr<U> const & r)
+{
+ return shared_ptr<T>(r, boost::detail::static_cast_tag());
+}
+
+template<class T, class U> shared_ptr<T> shared_dynamic_cast(shared_ptr<U> const & r)
+{
+ return shared_ptr<T>(r, boost::detail::dynamic_cast_tag());
+}
+
+template<class T, class U> shared_ptr<T> shared_polymorphic_cast(shared_ptr<U> const & r)
+{
+ return shared_ptr<T>(r, boost::detail::polymorphic_cast_tag());
+}
+
+template<class T, class U> shared_ptr<T> shared_polymorphic_downcast(shared_ptr<U> const & r)
+{
+ BOOST_ASSERT(dynamic_cast<T *>(r.get()) == r.get());
+ return shared_static_cast<T>(r);
+}
+
+// get_pointer() enables boost::mem_fn to recognize shared_ptr
+
+template<class T> inline T * get_pointer(shared_ptr<T> const & p)
+{
+ return p.get();
+}
+
+// operator<<
+
+#if defined(__GNUC__) && (__GNUC__ < 3)
+
+template<class Y> std::ostream & operator<< (std::ostream & os, shared_ptr<Y> const & p)
+{
+ os << p.get();
+ return os;
+}
+
+#else
+
+// in STLport's no-iostreams mode no iostream symbols can be used
+#ifndef _STLP_NO_IOSTREAMS
+
+# if defined(BOOST_MSVC) && BOOST_WORKAROUND(BOOST_MSVC, < 1300 && __SGI_STL_PORT)
+// MSVC6 has problems finding std::basic_ostream through the using declaration in namespace _STL
+using std::basic_ostream;
+template<class E, class T, class Y> basic_ostream<E, T> & operator<< (basic_ostream<E, T> & os, shared_ptr<Y> const & p)
+# else
+template<class E, class T, class Y> std::basic_ostream<E, T> & operator<< (std::basic_ostream<E, T> & os, shared_ptr<Y> const & p)
+# endif
+{
+ os << p.get();
+ return os;
+}
+
+#endif // _STLP_NO_IOSTREAMS
+
+#endif // __GNUC__ < 3
+
+// get_deleter (experimental)
+
+#if ( defined(__GNUC__) && BOOST_WORKAROUND(__GNUC__, < 3) ) || \
+ ( defined(__EDG_VERSION__) && BOOST_WORKAROUND(__EDG_VERSION__, <= 238) ) || \
+ ( defined(__HP_aCC) && BOOST_WORKAROUND(__HP_aCC, <= 33500) )
+
+// g++ 2.9x doesn't allow static_cast<X const *>(void *)
+// apparently EDG 2.38 and HP aCC A.03.35 also don't accept it
+
+template<class D, class T> D * get_deleter(shared_ptr<T> const & p)
+{
+ void const * q = p._internal_get_deleter(typeid(D));
+ return const_cast<D *>(static_cast<D const *>(q));
+}
+
+#else
+
+template<class D, class T> D * get_deleter(shared_ptr<T> const & p)
+{
+ return static_cast<D *>(p._internal_get_deleter(typeid(D)));
+}
+
+#endif
+
+} // namespace boost
+
+#ifdef BOOST_MSVC
+# pragma warning(pop)
+#endif
+
+#endif // #if defined(BOOST_NO_MEMBER_TEMPLATES) && !defined(BOOST_MSVC6_MEMBER_TEMPLATES)
+
+#endif // #ifndef BOOST_SHARED_PTR_HPP_INCLUDED
diff --git a/boost/boost/signal.hpp b/boost/boost/signal.hpp
new file mode 100644
index 00000000000..d1538e110d1
--- /dev/null
+++ b/boost/boost/signal.hpp
@@ -0,0 +1,358 @@
+// Boost.Signals library
+
+// Copyright Douglas Gregor 2001-2006. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org/libs/signals
+
+#ifndef BOOST_SIGNAL_HPP
+#define BOOST_SIGNAL_HPP
+
+#ifndef BOOST_SIGNALS_MAX_ARGS
+# define BOOST_SIGNALS_MAX_ARGS 10
+#endif
+
+#include <boost/config.hpp>
+#include <boost/type_traits/function_traits.hpp>
+#include <boost/signals/signal0.hpp>
+#include <boost/signals/signal1.hpp>
+#include <boost/signals/signal2.hpp>
+#include <boost/signals/signal3.hpp>
+#include <boost/signals/signal4.hpp>
+#include <boost/signals/signal5.hpp>
+#include <boost/signals/signal6.hpp>
+#include <boost/signals/signal7.hpp>
+#include <boost/signals/signal8.hpp>
+#include <boost/signals/signal9.hpp>
+#include <boost/signals/signal10.hpp>
+#include <boost/function.hpp>
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+namespace boost {
+#ifndef BOOST_FUNCTION_NO_FUNCTION_TYPE_SYNTAX
+ namespace BOOST_SIGNALS_NAMESPACE {
+ namespace detail {
+ template<int Arity,
+ typename Signature,
+ typename Combiner,
+ typename Group,
+ typename GroupCompare,
+ typename SlotFunction>
+ class real_get_signal_impl;
+
+ template<typename Signature,
+ typename Combiner,
+ typename Group,
+ typename GroupCompare,
+ typename SlotFunction>
+ class real_get_signal_impl<0, Signature, Combiner, Group, GroupCompare,
+ SlotFunction>
+ {
+ typedef function_traits<Signature> traits;
+
+ public:
+ typedef signal0<typename traits::result_type,
+ Combiner,
+ Group,
+ GroupCompare,
+ SlotFunction> type;
+ };
+
+ template<typename Signature,
+ typename Combiner,
+ typename Group,
+ typename GroupCompare,
+ typename SlotFunction>
+ class real_get_signal_impl<1, Signature, Combiner, Group, GroupCompare,
+ SlotFunction>
+ {
+ typedef function_traits<Signature> traits;
+
+ public:
+ typedef signal1<typename traits::result_type,
+ typename traits::arg1_type,
+ Combiner,
+ Group,
+ GroupCompare,
+ SlotFunction> type;
+ };
+
+ template<typename Signature,
+ typename Combiner,
+ typename Group,
+ typename GroupCompare,
+ typename SlotFunction>
+ class real_get_signal_impl<2, Signature, Combiner, Group, GroupCompare,
+ SlotFunction>
+ {
+ typedef function_traits<Signature> traits;
+
+ public:
+ typedef signal2<typename traits::result_type,
+ typename traits::arg1_type,
+ typename traits::arg2_type,
+ Combiner,
+ Group,
+ GroupCompare,
+ SlotFunction> type;
+ };
+
+ template<typename Signature,
+ typename Combiner,
+ typename Group,
+ typename GroupCompare,
+ typename SlotFunction>
+ class real_get_signal_impl<3, Signature, Combiner, Group, GroupCompare,
+ SlotFunction>
+ {
+ typedef function_traits<Signature> traits;
+
+ public:
+ typedef signal3<typename traits::result_type,
+ typename traits::arg1_type,
+ typename traits::arg2_type,
+ typename traits::arg3_type,
+ Combiner,
+ Group,
+ GroupCompare,
+ SlotFunction> type;
+ };
+
+ template<typename Signature,
+ typename Combiner,
+ typename Group,
+ typename GroupCompare,
+ typename SlotFunction>
+ class real_get_signal_impl<4, Signature, Combiner, Group, GroupCompare,
+ SlotFunction>
+ {
+ typedef function_traits<Signature> traits;
+
+ public:
+ typedef signal4<typename traits::result_type,
+ typename traits::arg1_type,
+ typename traits::arg2_type,
+ typename traits::arg3_type,
+ typename traits::arg4_type,
+ Combiner,
+ Group,
+ GroupCompare,
+ SlotFunction> type;
+ };
+
+ template<typename Signature,
+ typename Combiner,
+ typename Group,
+ typename GroupCompare,
+ typename SlotFunction>
+ class real_get_signal_impl<5, Signature, Combiner, Group, GroupCompare,
+ SlotFunction>
+ {
+ typedef function_traits<Signature> traits;
+
+ public:
+ typedef signal5<typename traits::result_type,
+ typename traits::arg1_type,
+ typename traits::arg2_type,
+ typename traits::arg3_type,
+ typename traits::arg4_type,
+ typename traits::arg5_type,
+ Combiner,
+ Group,
+ GroupCompare,
+ SlotFunction> type;
+ };
+
+ template<typename Signature,
+ typename Combiner,
+ typename Group,
+ typename GroupCompare,
+ typename SlotFunction>
+ class real_get_signal_impl<6, Signature, Combiner, Group, GroupCompare,
+ SlotFunction>
+ {
+ typedef function_traits<Signature> traits;
+
+ public:
+ typedef signal6<typename traits::result_type,
+ typename traits::arg1_type,
+ typename traits::arg2_type,
+ typename traits::arg3_type,
+ typename traits::arg4_type,
+ typename traits::arg5_type,
+ typename traits::arg6_type,
+ Combiner,
+ Group,
+ GroupCompare,
+ SlotFunction> type;
+ };
+
+ template<typename Signature,
+ typename Combiner,
+ typename Group,
+ typename GroupCompare,
+ typename SlotFunction>
+ class real_get_signal_impl<7, Signature, Combiner, Group, GroupCompare,
+ SlotFunction>
+ {
+ typedef function_traits<Signature> traits;
+
+ public:
+ typedef signal7<typename traits::result_type,
+ typename traits::arg1_type,
+ typename traits::arg2_type,
+ typename traits::arg3_type,
+ typename traits::arg4_type,
+ typename traits::arg5_type,
+ typename traits::arg6_type,
+ typename traits::arg7_type,
+ Combiner,
+ Group,
+ GroupCompare,
+ SlotFunction> type;
+ };
+
+ template<typename Signature,
+ typename Combiner,
+ typename Group,
+ typename GroupCompare,
+ typename SlotFunction>
+ class real_get_signal_impl<8, Signature, Combiner, Group, GroupCompare,
+ SlotFunction>
+ {
+ typedef function_traits<Signature> traits;
+
+ public:
+ typedef signal8<typename traits::result_type,
+ typename traits::arg1_type,
+ typename traits::arg2_type,
+ typename traits::arg3_type,
+ typename traits::arg4_type,
+ typename traits::arg5_type,
+ typename traits::arg6_type,
+ typename traits::arg7_type,
+ typename traits::arg8_type,
+ Combiner,
+ Group,
+ GroupCompare,
+ SlotFunction> type;
+ };
+
+ template<typename Signature,
+ typename Combiner,
+ typename Group,
+ typename GroupCompare,
+ typename SlotFunction>
+ class real_get_signal_impl<9, Signature, Combiner, Group, GroupCompare,
+ SlotFunction>
+ {
+ typedef function_traits<Signature> traits;
+
+ public:
+ typedef signal9<typename traits::result_type,
+ typename traits::arg1_type,
+ typename traits::arg2_type,
+ typename traits::arg3_type,
+ typename traits::arg4_type,
+ typename traits::arg5_type,
+ typename traits::arg6_type,
+ typename traits::arg7_type,
+ typename traits::arg8_type,
+ typename traits::arg9_type,
+ Combiner,
+ Group,
+ GroupCompare,
+ SlotFunction> type;
+ };
+
+ template<typename Signature,
+ typename Combiner,
+ typename Group,
+ typename GroupCompare,
+ typename SlotFunction>
+ class real_get_signal_impl<10, Signature, Combiner, Group, GroupCompare,
+ SlotFunction>
+ {
+ typedef function_traits<Signature> traits;
+
+ public:
+ typedef signal10<typename traits::result_type,
+ typename traits::arg1_type,
+ typename traits::arg2_type,
+ typename traits::arg3_type,
+ typename traits::arg4_type,
+ typename traits::arg5_type,
+ typename traits::arg6_type,
+ typename traits::arg7_type,
+ typename traits::arg8_type,
+ typename traits::arg9_type,
+ typename traits::arg10_type,
+ Combiner,
+ Group,
+ GroupCompare,
+ SlotFunction> type;
+ };
+
+ template<typename Signature,
+ typename Combiner,
+ typename Group,
+ typename GroupCompare,
+ typename SlotFunction>
+ struct get_signal_impl :
+ public real_get_signal_impl<(function_traits<Signature>::arity),
+ Signature,
+ Combiner,
+ Group,
+ GroupCompare,
+ SlotFunction>
+ {
+ };
+
+ } // end namespace detail
+ } // end namespace BOOST_SIGNALS_NAMESPACE
+
+ // Very lightweight wrapper around the signalN classes that allows signals to
+ // be created where the number of arguments does not need to be part of the
+ // class name.
+ template<
+ typename Signature, // function type R (T1, T2, ..., TN)
+ typename Combiner = last_value<typename function_traits<Signature>::result_type>,
+ typename Group = int,
+ typename GroupCompare = std::less<Group>,
+ typename SlotFunction = function<Signature>
+ >
+ class signal :
+ public BOOST_SIGNALS_NAMESPACE::detail::get_signal_impl<Signature,
+ Combiner,
+ Group,
+ GroupCompare,
+ SlotFunction>::type
+ {
+ typedef typename BOOST_SIGNALS_NAMESPACE::detail::get_signal_impl<
+ Signature,
+ Combiner,
+ Group,
+ GroupCompare,
+ SlotFunction>::type base_type;
+
+ public:
+ explicit signal(const Combiner& combiner = Combiner(),
+ const GroupCompare& group_compare = GroupCompare()) :
+ base_type(combiner, group_compare)
+ {
+ }
+ };
+#endif // ndef BOOST_FUNCTION_NO_FUNCTION_TYPE_SYNTAX
+
+} // end namespace boost
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif // BOOST_SIGNAL_HPP
diff --git a/boost/boost/signals.hpp b/boost/boost/signals.hpp
new file mode 100644
index 00000000000..7e83ed55d80
--- /dev/null
+++ b/boost/boost/signals.hpp
@@ -0,0 +1,10 @@
+// Boost.Signals library
+
+// Copyright Douglas Gregor 2003-2004. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org/libs/signals
+#include <boost/signal.hpp>
+
diff --git a/boost/boost/signals/connection.hpp b/boost/boost/signals/connection.hpp
new file mode 100644
index 00000000000..48493aabf97
--- /dev/null
+++ b/boost/boost/signals/connection.hpp
@@ -0,0 +1,213 @@
+// Boost.Signals library
+
+// Copyright Douglas Gregor 2001-2004. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#ifndef BOOST_SIGNALS_CONNECTION_HPP
+#define BOOST_SIGNALS_CONNECTION_HPP
+
+#include <boost/signals/detail/signals_common.hpp>
+#include <boost/smart_ptr.hpp>
+#include <boost/operators.hpp>
+#include <boost/any.hpp>
+#include <list>
+#include <cassert>
+#include <utility>
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+namespace boost {
+ namespace BOOST_SIGNALS_NAMESPACE {
+ class trackable;
+
+ namespace detail {
+ // Represents an object that has been bound as part of a slot, and how
+ // to notify that object of a disconnect
+ struct bound_object {
+ void* obj;
+ void* data;
+ void (*disconnect)(void*, void*);
+
+ bool operator==(const bound_object& other) const
+ { return obj == other.obj && data == other.data; }
+ bool operator<(const bound_object& other) const
+ { return obj < other.obj; }
+
+ // To support intel 80 compiler, 2004/03/18 (Mark Rodgers)
+ bool operator!=(const bound_object& other) const
+ { return !(*this==other); }
+ bool operator>(const bound_object& other) const
+ { return !(*this < other); }
+ };
+
+ // Describes the connection between a signal and the objects that are
+ // bound for a specific slot. Enables notification of the signal and the
+ // slots when a disconnect is requested.
+ struct basic_connection {
+ void* signal;
+ void* signal_data;
+ void (*signal_disconnect)(void*, void*);
+ bool blocked_;
+
+ std::list<bound_object> bound_objects;
+ };
+ } // end namespace detail
+
+ // The user may freely pass around the "connection" object and terminate
+ // the connection at any time using disconnect().
+ class BOOST_SIGNALS_DECL connection :
+ private less_than_comparable1<connection>,
+ private equality_comparable1<connection>
+ {
+ public:
+ connection() : con(), controlling_connection(false) {}
+ connection(const connection&);
+ ~connection();
+
+ // Block he connection: if the connection is still active, there
+ // will be no notification
+ void block(bool should_block = true) { con->blocked_ = should_block; }
+ void unblock() { con->blocked_ = false; }
+ bool blocked() const { return !connected() || con->blocked_; }
+
+ // Disconnect the signal and slot, if they are connected
+ void disconnect() const;
+
+ // Returns true if the signal and slot are connected
+ bool connected() const { return con.get() && con->signal_disconnect; }
+
+ // Comparison of connections
+ bool operator==(const connection& other) const;
+ bool operator<(const connection& other) const;
+
+ // Connection assignment
+ connection& operator=(const connection& other) ;
+
+ // Swap connections
+ void swap(connection& other);
+
+ public: // TBD: CHANGE THIS
+ // Set whether this connection object is controlling or not
+ void set_controlling(bool control = true)
+ { controlling_connection = control; }
+
+ shared_ptr<BOOST_SIGNALS_NAMESPACE::detail::basic_connection>
+ get_connection() const
+ { return con; }
+
+ private:
+ friend class detail::signal_base_impl;
+ friend class detail::slot_base;
+ friend class trackable;
+
+ // Reset this connection to refer to a different actual connection
+ void reset(BOOST_SIGNALS_NAMESPACE::detail::basic_connection*);
+
+ // Add a bound object to this connection (not for users)
+ void add_bound_object(const BOOST_SIGNALS_NAMESPACE::detail::bound_object& b);
+
+ friend class BOOST_SIGNALS_NAMESPACE::detail::bound_objects_visitor;
+
+ // Pointer to the actual contents of the connection
+ shared_ptr<BOOST_SIGNALS_NAMESPACE::detail::basic_connection> con;
+
+ // True if the destruction of this connection object should disconnect
+ bool controlling_connection;
+ };
+
+ // Similar to connection, but will disconnect the connection when it is
+ // destroyed unless release() has been called.
+ class BOOST_SIGNALS_DECL scoped_connection : public connection {
+ public:
+ scoped_connection() : connection(), released(false) {}
+ scoped_connection(const connection&);
+ scoped_connection(const scoped_connection&);
+ ~scoped_connection();
+
+ connection release();
+
+ inline void swap(scoped_connection&);
+
+ scoped_connection& operator=(const connection&);
+ scoped_connection& operator=(const scoped_connection&);
+
+ private:
+ bool released;
+ };
+
+ namespace detail {
+ struct connection_slot_pair {
+ connection first;
+ any second;
+
+ connection_slot_pair() {}
+
+ connection_slot_pair(const connection& c, const any& a)
+ : first(c), second(a)
+ {
+ }
+
+ // Dummys to allow explicit instantiation to work
+ bool operator==(const connection_slot_pair&) const { return false; }
+ bool operator<(const connection_slot_pair&) const { return false;}
+ };
+
+ // Determines if the underlying connection is disconnected
+ struct is_disconnected {
+ typedef connection_slot_pair argument_type;
+ typedef bool result_type;
+
+ inline bool operator()(const argument_type& c) const
+ {
+ return !c.first.connected();
+ }
+ };
+
+ // Determines if the underlying connection is callable, ie if
+ // it is connected and not blocked
+ struct is_callable {
+ typedef connection_slot_pair argument_type;
+ typedef bool result_type;
+
+ inline bool operator()(const argument_type& c) const
+ {
+ return c.first.connected() && !c.first.blocked() ;
+ }
+ };
+
+ // Autodisconnects the bound object when it is destroyed unless the
+ // release method is invoked.
+ class auto_disconnect_bound_object {
+ public:
+ auto_disconnect_bound_object(const bound_object& b) :
+ binding(b), auto_disconnect(true)
+ {
+ }
+
+ ~auto_disconnect_bound_object()
+ {
+ if (auto_disconnect)
+ binding.disconnect(binding.obj, binding.data);
+ }
+
+ void release() { auto_disconnect = false; }
+
+ private:
+ bound_object binding;
+ bool auto_disconnect;
+ };
+ } // end namespace detail
+ } // end namespace BOOST_SIGNALS_NAMESPACE
+} // end namespace boost
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif // BOOST_SIGNALS_CONNECTION_HPP
diff --git a/boost/boost/signals/detail/config.hpp b/boost/boost/signals/detail/config.hpp
new file mode 100644
index 00000000000..bdd6d20ed49
--- /dev/null
+++ b/boost/boost/signals/detail/config.hpp
@@ -0,0 +1,54 @@
+/*
+ *
+ * Copyright (c) 1998-2002
+ * John Maddock
+ *
+ * Copyright (c) 2003-2004
+ * Douglas Gregor
+ *
+ * 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_SIGNALS_CONFIG_HPP
+#define BOOST_SIGNALS_CONFIG_HPP
+
+#include <boost/config.hpp>
+
+#ifdef BOOST_HAS_DECLSPEC
+# if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_SIGNALS_DYN_LINK)
+# ifdef BOOST_SIGNALS_SOURCE
+# define BOOST_SIGNALS_DECL __declspec(dllexport)
+# else
+# define BOOST_SIGNALS_DECL __declspec(dllimport)
+# endif // BOOST_SIGNALS_SOURCE
+# endif // DYN_LINK
+#endif // BOOST_HAS_DECLSPEC
+
+#ifndef BOOST_SIGNALS_DECL
+# define BOOST_SIGNALS_DECL
+#endif
+
+// Setup autolinking
+#if !defined(BOOST_SIGNALS_SOURCE) && !defined(BOOST_ALL_NO_LIB) && !defined(BOOST_SIGNALS_NO_LIB)
+# define BOOST_LIB_NAME boost_signals
+
+# if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_SIGNALS_DYN_LINK)
+# define BOOST_DYN_LINK
+# endif
+
+# include <boost/config/auto_link.hpp>
+#endif // autolinking on
+
+#endif // BOOST_SIGNALS_CONFIG_HPP
+
+
+
+
+
+
+
+
+
diff --git a/boost/boost/signals/detail/gen_signal_N.pl b/boost/boost/signals/detail/gen_signal_N.pl
new file mode 100644
index 00000000000..77f8e533de0
--- /dev/null
+++ b/boost/boost/signals/detail/gen_signal_N.pl
@@ -0,0 +1,132 @@
+#!/usr/bin/perl -w
+#
+# Boost.Signals library
+
+# Copyright Douglas Gregor 2001-2003. Use, modification and
+# distribution is 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)
+
+# For more information, see http://www.boost.org
+use English;
+
+if ($#ARGV < 0) {
+ print "Usage: perl gen_signal_N <number of arguments>\n";
+ exit;
+}
+
+
+$totalNumArgs = $ARGV[0];
+for ($numArgs = 0; $numArgs <= $totalNumArgs; ++$numArgs) {
+ open OUT, ">signal$numArgs.hpp";
+ print OUT "// Boost.Signals library\n";
+ print OUT "//\n";
+ print OUT "// Copyright (C) 2001 Doug Gregor (gregod\@cs.rpi.edu)\n";
+ print OUT "//\n";
+ print OUT "// Permission to copy, use, sell and distribute this software is granted\n";
+ print OUT "// provided this copyright notice appears in all copies.\n";
+ print OUT "// Permission to modify the code and to distribute modified code is granted\n";
+ print OUT "// provided this copyright notice appears in all copies, and a notice\n";
+ print OUT "// that the code was modified is included with the copyright notice.\n";
+ print OUT "//\n";
+ print OUT "// This software is provided \"as is\" without express or implied warranty,\n";
+ print OUT "// and with no claim as to its suitability for any purpose.\n";
+ print OUT " \n";
+ print OUT "// For more information, see http://www.boost.org\n";
+ print OUT "\n";
+ print OUT "#ifndef BOOST_SIGNALS_SIGNAL" . $numArgs . "_HEADER\n";
+ print OUT "#define BOOST_SIGNALS_SIGNAL" , $numArgs . "_HEADER\n";
+ print OUT "\n";
+ print OUT "#define BOOST_SIGNALS_NUM_ARGS $numArgs\n";
+
+ $templateParms = "";
+ for ($i = 1; $i <= $numArgs; ++$i) {
+ if ($i > 1) {
+ $templateParms .= ", ";
+ }
+ $templateParms .= "typename T$i";
+ }
+ print OUT "#define BOOST_SIGNALS_TEMPLATE_PARMS $templateParms\n";
+
+ $_ = $templateParms;
+ s/typename //g;
+ $templateArgs = $_;
+ print OUT "#define BOOST_SIGNALS_TEMPLATE_ARGS $templateArgs\n";
+
+ $parms = "";
+ for ($i = 1; $i <= $numArgs; ++$i) {
+ if ($i > 1) {
+ $parms .= ", ";
+ }
+ $parms .= "T$i a$i";
+ }
+ print OUT "#define BOOST_SIGNALS_PARMS $parms\n";
+
+ $args = "";
+ for ($i = 1; $i <= $numArgs; ++$i) {
+ if ($i > 1) {
+ $args .= ", ";
+ }
+ $args .= "a$i";
+ }
+ print OUT "#define BOOST_SIGNALS_ARGS $args\n";
+
+ $boundArgs = "";
+ for ($i = 1; $i <= $numArgs; ++$i) {
+ if ($i > 1) {
+ $boundArgs .= ", ";
+ }
+ $boundArgs .= "args->a$i";
+ }
+ print OUT "#define BOOST_SIGNALS_BOUND_ARGS $boundArgs\n";
+
+ $argsAsMembers = "";
+ for ($i = 1; $i <= $numArgs; ++$i) {
+ $argsAsMembers .= "T$i a$i;";
+ }
+ print OUT "#define BOOST_SIGNALS_ARGS_AS_MEMBERS $argsAsMembers\n";
+
+ $copyParms = "";
+ for ($i = 1; $i <= $numArgs; ++$i) {
+ if ($i > 1) {
+ $copyParms .= ", ";
+ }
+ $copyParms .= "T$i ia$i";
+ }
+ print OUT "#define BOOST_SIGNALS_COPY_PARMS $copyParms\n";
+
+ $initArgs = "";
+ if ($numArgs > 0) {
+ $initArgs = ":";
+ }
+ for ($i = 1; $i <= $numArgs; ++$i) {
+ if ($i > 1) {
+ $initArgs .= ", ";
+ }
+ $initArgs .= "a$i(ia$i)";
+ }
+ print OUT "#define BOOST_SIGNALS_INIT_ARGS $initArgs\n";
+
+ $argTypes = "";
+ for ($i = 1; $i <= $numArgs; ++$i) {
+ $argTypes .= "typedef T$i arg". ($i+1) . "_type; ";
+ }
+
+ print OUT "#define BOOST_SIGNALS_ARG_TYPES $argTypes\n";
+ print OUT "\n";
+ print OUT "#include <boost/signals/signal_template.hpp>\n";
+ print OUT "\n";
+ print OUT "#undef BOOST_SIGNALS_ARG_TYPES\n";
+ print OUT "#undef BOOST_SIGNALS_INIT_ARGS\n";
+ print OUT "#undef BOOST_SIGNALS_COPY_PARMS\n";
+ print OUT "#undef BOOST_SIGNALS_ARGS_AS_MEMBERS\n";
+ print OUT "#undef BOOST_SIGNALS_BOUND_ARGS\n";
+ print OUT "#undef BOOST_SIGNALS_ARGS\n";
+ print OUT "#undef BOOST_SIGNALS_PARMS\n";
+ print OUT "#undef BOOST_SIGNALS_TEMPLATE_ARGS\n";
+ print OUT "#undef BOOST_SIGNALS_TEMPLATE_PARMS\n";
+ print OUT "#undef BOOST_SIGNALS_NUM_ARGS\n";
+ print OUT "\n";
+ print OUT "#endif // BOOST_SIGNALS_SIGNAL" . $numArgs . "_HEADER\n";
+ close OUT;
+}
diff --git a/boost/boost/signals/detail/named_slot_map.hpp b/boost/boost/signals/detail/named_slot_map.hpp
new file mode 100644
index 00000000000..c13bf0b6878
--- /dev/null
+++ b/boost/boost/signals/detail/named_slot_map.hpp
@@ -0,0 +1,193 @@
+// Boost.Signals library
+
+// Copyright Douglas Gregor 2001-2004. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#ifndef BOOST_SIGNALS_NAMED_SLOT_MAP_HPP
+#define BOOST_SIGNALS_NAMED_SLOT_MAP_HPP
+
+#include <boost/signals/detail/config.hpp>
+#include <boost/signals/detail/signals_common.hpp>
+#include <boost/signals/connection.hpp>
+#include <boost/utility.hpp>
+#include <boost/shared_ptr.hpp>
+#include <boost/function/function2.hpp>
+#include <boost/iterator/iterator_facade.hpp>
+#include <map>
+#include <memory>
+#include <utility>
+
+namespace boost { namespace BOOST_SIGNALS_NAMESPACE {
+
+enum connect_position { at_back, at_front };
+
+namespace detail {
+
+class stored_group
+{
+ public:
+ enum storage_kind { sk_empty, sk_front, sk_back, sk_group };
+
+ stored_group(storage_kind kind = sk_empty) : kind(kind), group() { }
+
+ template<typename T>
+ stored_group(const T& group) : kind(sk_group), group(new T(group)) { }
+
+ bool is_front() const { return kind == sk_front; }
+ bool is_back() const { return kind == sk_back; }
+ bool empty() const { return kind == sk_empty; }
+
+ void* get() const { return group.get(); }
+
+ private:
+ storage_kind kind;
+ shared_ptr<void> group;
+};
+
+typedef function2<bool, stored_group, stored_group> compare_type;
+
+// This function object bridges from a pair of any objects that hold
+// values of type Key to the underlying function object that compares
+// values of type Key.
+template<typename Compare, typename Key>
+class group_bridge_compare {
+public:
+ typedef bool result_type;
+ typedef const stored_group& first_argument_type;
+ typedef const stored_group& second_argument_type;
+
+ group_bridge_compare(const Compare& c) : comp(c)
+ { }
+
+ bool operator()(const stored_group& k1, const stored_group& k2) const
+ {
+ if (k1.is_front()) return !k2.is_front();
+ if (k1.is_back()) return false;
+ if (k2.is_front()) return false;
+ if (k2.is_back()) return true;
+
+ // Neither is empty, so compare their values to order them
+ return comp(*static_cast<Key*>(k1.get()), *static_cast<Key*>(k2.get()));
+ }
+
+private:
+ Compare comp;
+};
+
+class BOOST_SIGNALS_DECL named_slot_map_iterator :
+ public iterator_facade<named_slot_map_iterator,
+ connection_slot_pair,
+ forward_traversal_tag>
+{
+ typedef std::list<connection_slot_pair> group_list;
+ typedef group_list::iterator slot_pair_iterator;
+ typedef std::map<stored_group, group_list, compare_type> slot_container_type;
+ typedef slot_container_type::iterator group_iterator;
+ typedef slot_container_type::const_iterator const_group_iterator;
+
+ typedef iterator_facade<named_slot_map_iterator,
+ connection_slot_pair,
+ forward_traversal_tag> inherited;
+public:
+ named_slot_map_iterator() : slot_assigned(false)
+ { }
+ named_slot_map_iterator(const named_slot_map_iterator& other)
+ : group(other.group), last_group(other.last_group),
+ slot_assigned(other.slot_assigned)
+ {
+ if (slot_assigned) slot_ = other.slot_;
+ }
+ named_slot_map_iterator& operator=(const named_slot_map_iterator& other)
+ {
+ slot_assigned = other.slot_assigned;
+ group = other.group;
+ last_group = other.last_group;
+ if (slot_assigned) slot_ = other.slot_;
+ return *this;
+ }
+ connection_slot_pair& dereference() const
+ {
+ return *slot_;
+ }
+ void increment()
+ {
+ ++slot_;
+ if (slot_ == group->second.end()) {
+ ++group;
+ init_next_group();
+ }
+ }
+ bool equal(const named_slot_map_iterator& other) const {
+ return (group == other.group
+ && (group == last_group
+ || slot_ == other.slot_));
+ }
+
+#if BOOST_WORKAROUND(_MSC_VER, <= 1400)
+ void decrement();
+ void advance(difference_type);
+#endif
+
+private:
+ named_slot_map_iterator(group_iterator group, group_iterator last) :
+ group(group), last_group(last), slot_assigned(false)
+ { init_next_group(); }
+ named_slot_map_iterator(group_iterator group, group_iterator last,
+ slot_pair_iterator slot) :
+ group(group), last_group(last), slot_(slot), slot_assigned(true)
+ { }
+
+ void init_next_group()
+ {
+ while (group != last_group && group->second.empty()) ++group;
+ if (group != last_group) {
+ slot_ = group->second.begin();
+ slot_assigned = true;
+ }
+ }
+
+ group_iterator group;
+ group_iterator last_group;
+ slot_pair_iterator slot_;
+ bool slot_assigned;
+
+ friend class named_slot_map;
+};
+
+class BOOST_SIGNALS_DECL named_slot_map
+{
+public:
+ typedef named_slot_map_iterator iterator;
+
+ named_slot_map(const compare_type& compare);
+
+ void clear();
+ iterator begin();
+ iterator end();
+ iterator insert(const stored_group& name, const connection& con,
+ const any& slot, connect_position at);
+ void disconnect(const stored_group& name);
+ void erase(iterator pos);
+ void remove_disconnected_slots();
+
+private:
+ typedef std::list<connection_slot_pair> group_list;
+ typedef std::map<stored_group, group_list, compare_type> slot_container_type;
+ typedef slot_container_type::iterator group_iterator;
+ typedef slot_container_type::const_iterator const_group_iterator;
+
+ bool empty(const_group_iterator group) const
+ {
+ return (group->second.empty() && group != groups.begin() && group != back);
+ }
+ slot_container_type groups;
+ group_iterator back;
+};
+
+} } }
+
+#endif // BOOST_SIGNALS_NAMED_SLOT_MAP_HPP
diff --git a/boost/boost/signals/detail/signal_base.hpp b/boost/boost/signals/detail/signal_base.hpp
new file mode 100644
index 00000000000..0438cf7bae4
--- /dev/null
+++ b/boost/boost/signals/detail/signal_base.hpp
@@ -0,0 +1,159 @@
+// Boost.Signals library
+
+// Copyright Douglas Gregor 2001-2004. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#ifndef BOOST_SIGNALS_SIGNAL_BASE_HEADER
+#define BOOST_SIGNALS_SIGNAL_BASE_HEADER
+
+#include <boost/signals/detail/config.hpp>
+#include <boost/signals/detail/signals_common.hpp>
+#include <boost/signals/detail/named_slot_map.hpp>
+#include <boost/signals/connection.hpp>
+#include <boost/signals/trackable.hpp>
+#include <boost/signals/slot.hpp>
+#include <boost/smart_ptr.hpp>
+#include <boost/utility.hpp>
+#include <boost/function/function2.hpp>
+#include <utility>
+#include <vector>
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+namespace boost {
+ namespace BOOST_SIGNALS_NAMESPACE {
+ namespace detail {
+ // Must be constructed before calling the slots, because it safely
+ // manages call depth
+ class BOOST_SIGNALS_DECL call_notification {
+ public:
+ call_notification(const shared_ptr<signal_base_impl>&);
+ ~call_notification();
+
+ shared_ptr<signal_base_impl> impl;
+ };
+
+ // Implementation of base class for all signals. It handles the
+ // management of the underlying slot lists.
+ class BOOST_SIGNALS_DECL signal_base_impl {
+ public:
+ friend class call_notification;
+
+ typedef function2<bool, stored_group, stored_group> compare_type;
+
+ // Make sure that an exception does not cause the "clearing" flag to
+ // remain set
+ class temporarily_set_clearing {
+ public:
+ temporarily_set_clearing(signal_base_impl* b) : base(b)
+ {
+ base->flags.clearing = true;
+ }
+
+ ~temporarily_set_clearing()
+ {
+ base->flags.clearing = false;
+ }
+
+ private:
+ signal_base_impl* base;
+ };
+
+ friend class temporarily_set_clearing;
+
+ signal_base_impl(const compare_type&, const any&);
+ ~signal_base_impl();
+
+ // Disconnect all slots connected to this signal
+ void disconnect_all_slots();
+
+ // Are there any connected slots?
+ bool empty() const;
+
+ // The number of connected slots
+ std::size_t num_slots() const;
+
+ // Disconnect all slots in the given group
+ void disconnect(const stored_group&);
+
+ // We're being notified that a slot has disconnected
+ static void slot_disconnected(void* obj, void* data);
+
+ connection connect_slot(const any& slot,
+ const stored_group& name,
+ shared_ptr<slot_base::data_t> data,
+ connect_position at);
+
+ private:
+ // Remove all of the slots that have been marked "disconnected"
+ void remove_disconnected_slots() const;
+
+ public:
+ // Our call depth when invoking slots (> 1 when we have a loop)
+ mutable int call_depth;
+
+ struct {
+ // True if some slots have disconnected, but we were not able to
+ // remove them from the list of slots because there are valid
+ // iterators into the slot list
+ mutable bool delayed_disconnect:1;
+
+ // True if we are disconnecting all disconnected slots
+ bool clearing:1;
+ } flags;
+
+ // Slots
+ mutable named_slot_map slots_;
+ any combiner_;
+
+ // Types
+ typedef named_slot_map::iterator iterator;
+ };
+
+ class BOOST_SIGNALS_DECL signal_base : public noncopyable {
+ public:
+ typedef signal_base_impl::compare_type compare_type;
+
+ friend class call_notification;
+
+ signal_base(const compare_type& comp, const any& combiner);
+ ~signal_base();
+
+ public:
+ // Disconnect all slots connected to this signal
+ void disconnect_all_slots() { impl->disconnect_all_slots(); }
+
+ // Are there any connected slots?
+ bool empty() const { return impl->empty(); }
+
+ // How many slots are connected?
+ std::size_t num_slots() const { return impl->num_slots(); }
+
+ protected:
+ connection connect_slot(const any& slot,
+ const stored_group& name,
+ shared_ptr<slot_base::data_t> data,
+ connect_position at)
+ {
+ return impl->connect_slot(slot, name, data, at);
+ }
+
+ typedef named_slot_map::iterator iterator;
+
+ shared_ptr<signal_base_impl> impl;
+ };
+ } // end namespace detail
+ } // end namespace BOOST_SIGNALS_NAMESPACE
+} // end namespace boost
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif // BOOST_SIGNALS_SIGNAL_BASE_HEADER
diff --git a/boost/boost/signals/detail/signals_common.hpp b/boost/boost/signals/detail/signals_common.hpp
new file mode 100644
index 00000000000..fe1a5a13ba6
--- /dev/null
+++ b/boost/boost/signals/detail/signals_common.hpp
@@ -0,0 +1,162 @@
+// Boost.Signals library
+
+// Copyright Douglas Gregor 2001-2004. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#ifndef BOOST_SIGNALS_COMMON_HEADER
+#define BOOST_SIGNALS_COMMON_HEADER
+
+#ifndef BOOST_SIGNALS_NAMESPACE
+# define BOOST_SIGNALS_NAMESPACE signals
+#endif
+
+#include <boost/type_traits/conversion_traits.hpp>
+#include <boost/ref.hpp>
+#include <boost/signals/detail/config.hpp>
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+namespace boost {
+ namespace BOOST_SIGNALS_NAMESPACE {
+ namespace detail {
+ // The unusable class is a placeholder for unused function arguments
+ // It is also completely unusable except that it constructable from
+ // anything. This helps compilers without partial specialization
+ // handle slots returning void.
+ struct unusable {
+ unusable() {}
+ };
+
+ // Determine the result type of a slot call
+ template<typename R>
+ struct slot_result_type {
+ typedef R type;
+ };
+
+ template<>
+ struct slot_result_type<void> {
+ typedef unusable type;
+ };
+
+ // Determine if the given type T is a signal
+ class signal_base;
+
+ template<typename T>
+ struct is_signal {
+ BOOST_STATIC_CONSTANT(bool,
+ value = (is_convertible<T*, signal_base*>::value));
+ };
+
+ /*
+ * The IF implementation is temporary code. When a Boost metaprogramming
+ * library is introduced, Boost.Signals will use it instead.
+ */
+ namespace intimate {
+ struct SelectThen
+ {
+ template<typename Then, typename Else>
+ struct Result
+ {
+ typedef Then type;
+ };
+ };
+
+ struct SelectElse
+ {
+ template<typename Then, typename Else>
+ struct Result
+ {
+ typedef Else type;
+ };
+ };
+
+ template<bool Condition>
+ struct Selector
+ {
+ typedef SelectThen type;
+ };
+
+ template<>
+ struct Selector<false>
+ {
+ typedef SelectElse type;
+ };
+ } // end namespace intimate
+
+ template<bool Condition, typename Then, typename Else>
+ struct IF
+ {
+ typedef typename intimate::Selector<Condition>::type select;
+ typedef typename select::template Result<Then,Else>::type type;
+ };
+
+ // Determine if the incoming argument is a reference_wrapper
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ template<typename T>
+ struct is_ref
+ {
+ BOOST_STATIC_CONSTANT(bool, value = false);
+ };
+
+ template<typename T>
+ struct is_ref<reference_wrapper<T> >
+ {
+ BOOST_STATIC_CONSTANT(bool, value = true);
+ };
+#else // no partial specialization
+ typedef char yes_type;
+ typedef double no_type;
+
+ no_type is_ref_tester(...);
+
+ template<typename T>
+ yes_type is_ref_tester(reference_wrapper<T>*);
+
+ template<typename T>
+ struct is_ref
+ {
+ static T* t;
+ BOOST_STATIC_CONSTANT(bool,
+ value = (sizeof(is_ref_tester(t)) == sizeof(yes_type)));
+ };
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+ // A slot can be a signal, a reference to a function object, or a
+ // function object.
+ struct signal_tag {};
+ struct reference_tag {};
+ struct value_tag {};
+
+ // Classify the given slot as a signal, a reference-to-slot, or a
+ // standard slot
+ template<typename S>
+ class get_slot_tag {
+ typedef typename IF<(is_signal<S>::value),
+ signal_tag,
+ value_tag>::type signal_or_value;
+
+ public:
+ typedef typename IF<(is_ref<S>::value),
+ reference_tag,
+ signal_or_value>::type type;
+ };
+
+ // Forward declaration needed in lots of places
+ class signal_base_impl;
+ class bound_objects_visitor;
+ class slot_base;
+ } // end namespace detail
+ } // end namespace BOOST_SIGNALS_NAMESPACE
+} // end namespace boost
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif // BOOST_SIGNALS_COMMON_HEADER
diff --git a/boost/boost/signals/detail/slot_call_iterator.hpp b/boost/boost/signals/detail/slot_call_iterator.hpp
new file mode 100644
index 00000000000..c6706bef8c4
--- /dev/null
+++ b/boost/boost/signals/detail/slot_call_iterator.hpp
@@ -0,0 +1,95 @@
+// Boost.Signals library
+
+// Copyright Douglas Gregor 2001-2004. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#ifndef BOOST_SIGNALS_SLOT_CALL_ITERATOR
+#define BOOST_SIGNALS_SLOT_CALL_ITERATOR
+
+#include <memory>
+#include <boost/iterator/iterator_facade.hpp>
+#include <boost/smart_ptr.hpp>
+#include <boost/signals/detail/config.hpp>
+#include <boost/signals/connection.hpp>
+#include <boost/optional.hpp>
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+namespace boost {
+ namespace BOOST_SIGNALS_NAMESPACE {
+ namespace detail {
+
+ // Generates a slot call iterator. Essentially, this is an iterator that:
+ // - skips over disconnected slots in the underlying list
+ // - calls the connected slots when dereferenced
+ // - caches the result of calling the slots
+ template<typename Function, typename Iterator>
+ class slot_call_iterator
+ : public iterator_facade<slot_call_iterator<Function, Iterator>,
+ typename Function::result_type,
+ single_pass_traversal_tag,
+ typename Function::result_type const&>
+ {
+ typedef iterator_facade<slot_call_iterator<Function, Iterator>,
+ typename Function::result_type,
+ single_pass_traversal_tag,
+ typename Function::result_type const&>
+ inherited;
+
+ typedef typename Function::result_type result_type;
+
+ friend class iterator_core_access;
+
+ public:
+ slot_call_iterator(Iterator iter_in, Iterator end_in, Function f,
+ optional<result_type> &c)
+ : iter(iter_in), end(end_in), f(f), cache(&c)
+ {
+ iter = std::find_if(iter, end, is_callable());
+ }
+
+ typename inherited::reference
+ dereference() const
+ {
+ if (!cache->is_initialized()) {
+ cache->reset(f(*iter));
+ }
+
+ return cache->get();
+ }
+
+ void increment()
+ {
+ iter = std::find_if(++iter, end, is_callable());
+ cache->reset();
+ }
+
+ bool equal(const slot_call_iterator& other) const
+ {
+ iter = std::find_if(iter, end, is_callable());
+ other.iter = std::find_if(other.iter, other.end,
+ is_callable());
+ return iter == other.iter;
+ }
+
+ private:
+ mutable Iterator iter;
+ Iterator end;
+ Function f;
+ optional<result_type>* cache;
+ };
+ } // end namespace detail
+ } // end namespace BOOST_SIGNALS_NAMESPACE
+} // end namespace boost
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif // BOOST_SIGNALS_SLOT_CALL_ITERATOR
diff --git a/boost/boost/signals/signal0.hpp b/boost/boost/signals/signal0.hpp
new file mode 100644
index 00000000000..6a6166c4cf6
--- /dev/null
+++ b/boost/boost/signals/signal0.hpp
@@ -0,0 +1,37 @@
+// Boost.Signals library
+
+// Copyright Douglas Gregor 2001-2003. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#ifndef BOOST_SIGNALS_SIGNAL0_HEADER
+#define BOOST_SIGNALS_SIGNAL0_HEADER
+
+#define BOOST_SIGNALS_NUM_ARGS 0
+#define BOOST_SIGNALS_TEMPLATE_PARMS
+#define BOOST_SIGNALS_TEMPLATE_ARGS
+#define BOOST_SIGNALS_PARMS
+#define BOOST_SIGNALS_ARGS
+#define BOOST_SIGNALS_BOUND_ARGS
+#define BOOST_SIGNALS_ARGS_AS_MEMBERS
+#define BOOST_SIGNALS_COPY_PARMS
+#define BOOST_SIGNALS_INIT_ARGS
+#define BOOST_SIGNALS_ARG_TYPES
+
+#include <boost/signals/signal_template.hpp>
+
+#undef BOOST_SIGNALS_ARG_TYPES
+#undef BOOST_SIGNALS_INIT_ARGS
+#undef BOOST_SIGNALS_COPY_PARMS
+#undef BOOST_SIGNALS_ARGS_AS_MEMBERS
+#undef BOOST_SIGNALS_BOUND_ARGS
+#undef BOOST_SIGNALS_ARGS
+#undef BOOST_SIGNALS_PARMS
+#undef BOOST_SIGNALS_TEMPLATE_ARGS
+#undef BOOST_SIGNALS_TEMPLATE_PARMS
+#undef BOOST_SIGNALS_NUM_ARGS
+
+#endif // BOOST_SIGNALS_SIGNAL0_HEADER
diff --git a/boost/boost/signals/signal1.hpp b/boost/boost/signals/signal1.hpp
new file mode 100644
index 00000000000..8363494bd84
--- /dev/null
+++ b/boost/boost/signals/signal1.hpp
@@ -0,0 +1,37 @@
+// Boost.Signals library
+
+// Copyright Douglas Gregor 2001-2003. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#ifndef BOOST_SIGNALS_SIGNAL1_HEADER
+#define BOOST_SIGNALS_SIGNAL1_HEADER
+
+#define BOOST_SIGNALS_NUM_ARGS 1
+#define BOOST_SIGNALS_TEMPLATE_PARMS typename T1
+#define BOOST_SIGNALS_TEMPLATE_ARGS T1
+#define BOOST_SIGNALS_PARMS T1 a1
+#define BOOST_SIGNALS_ARGS a1
+#define BOOST_SIGNALS_BOUND_ARGS args->a1
+#define BOOST_SIGNALS_ARGS_AS_MEMBERS T1 a1;
+#define BOOST_SIGNALS_COPY_PARMS T1 ia1
+#define BOOST_SIGNALS_INIT_ARGS :a1(ia1)
+#define BOOST_SIGNALS_ARG_TYPES typedef T1 arg2_type;
+
+#include <boost/signals/signal_template.hpp>
+
+#undef BOOST_SIGNALS_ARG_TYPES
+#undef BOOST_SIGNALS_INIT_ARGS
+#undef BOOST_SIGNALS_COPY_PARMS
+#undef BOOST_SIGNALS_ARGS_AS_MEMBERS
+#undef BOOST_SIGNALS_BOUND_ARGS
+#undef BOOST_SIGNALS_ARGS
+#undef BOOST_SIGNALS_PARMS
+#undef BOOST_SIGNALS_TEMPLATE_ARGS
+#undef BOOST_SIGNALS_TEMPLATE_PARMS
+#undef BOOST_SIGNALS_NUM_ARGS
+
+#endif // BOOST_SIGNALS_SIGNAL1_HEADER
diff --git a/boost/boost/signals/signal10.hpp b/boost/boost/signals/signal10.hpp
new file mode 100644
index 00000000000..07185495d69
--- /dev/null
+++ b/boost/boost/signals/signal10.hpp
@@ -0,0 +1,37 @@
+// Boost.Signals library
+
+// Copyright Douglas Gregor 2001-2003. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#ifndef BOOST_SIGNALS_SIGNAL10_HEADER
+#define BOOST_SIGNALS_SIGNAL10_HEADER
+
+#define BOOST_SIGNALS_NUM_ARGS 10
+#define BOOST_SIGNALS_TEMPLATE_PARMS typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10
+#define BOOST_SIGNALS_TEMPLATE_ARGS T1, T2, T3, T4, T5, T6, T7, T8, T9, T10
+#define BOOST_SIGNALS_PARMS T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10
+#define BOOST_SIGNALS_ARGS a1, a2, a3, a4, a5, a6, a7, a8, a9, a10
+#define BOOST_SIGNALS_BOUND_ARGS args->a1, args->a2, args->a3, args->a4, args->a5, args->a6, args->a7, args->a8, args->a9, args->a10
+#define BOOST_SIGNALS_ARGS_AS_MEMBERS T1 a1;T2 a2;T3 a3;T4 a4;T5 a5;T6 a6;T7 a7;T8 a8;T9 a9;T10 a10;
+#define BOOST_SIGNALS_COPY_PARMS T1 ia1, T2 ia2, T3 ia3, T4 ia4, T5 ia5, T6 ia6, T7 ia7, T8 ia8, T9 ia9, T10 ia10
+#define BOOST_SIGNALS_INIT_ARGS :a1(ia1), a2(ia2), a3(ia3), a4(ia4), a5(ia5), a6(ia6), a7(ia7), a8(ia8), a9(ia9), a10(ia10)
+#define BOOST_SIGNALS_ARG_TYPES typedef T1 arg2_type; typedef T2 arg3_type; typedef T3 arg4_type; typedef T4 arg5_type; typedef T5 arg6_type; typedef T6 arg7_type; typedef T7 arg8_type; typedef T8 arg9_type; typedef T9 arg10_type; typedef T10 arg11_type;
+
+#include <boost/signals/signal_template.hpp>
+
+#undef BOOST_SIGNALS_ARG_TYPES
+#undef BOOST_SIGNALS_INIT_ARGS
+#undef BOOST_SIGNALS_COPY_PARMS
+#undef BOOST_SIGNALS_ARGS_AS_MEMBERS
+#undef BOOST_SIGNALS_BOUND_ARGS
+#undef BOOST_SIGNALS_ARGS
+#undef BOOST_SIGNALS_PARMS
+#undef BOOST_SIGNALS_TEMPLATE_ARGS
+#undef BOOST_SIGNALS_TEMPLATE_PARMS
+#undef BOOST_SIGNALS_NUM_ARGS
+
+#endif // BOOST_SIGNALS_SIGNAL10_HEADER
diff --git a/boost/boost/signals/signal2.hpp b/boost/boost/signals/signal2.hpp
new file mode 100644
index 00000000000..361014eabf6
--- /dev/null
+++ b/boost/boost/signals/signal2.hpp
@@ -0,0 +1,37 @@
+// Boost.Signals library
+
+// Copyright Douglas Gregor 2001-2003. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#ifndef BOOST_SIGNALS_SIGNAL2_HEADER
+#define BOOST_SIGNALS_SIGNAL2_HEADER
+
+#define BOOST_SIGNALS_NUM_ARGS 2
+#define BOOST_SIGNALS_TEMPLATE_PARMS typename T1, typename T2
+#define BOOST_SIGNALS_TEMPLATE_ARGS T1, T2
+#define BOOST_SIGNALS_PARMS T1 a1, T2 a2
+#define BOOST_SIGNALS_ARGS a1, a2
+#define BOOST_SIGNALS_BOUND_ARGS args->a1, args->a2
+#define BOOST_SIGNALS_ARGS_AS_MEMBERS T1 a1;T2 a2;
+#define BOOST_SIGNALS_COPY_PARMS T1 ia1, T2 ia2
+#define BOOST_SIGNALS_INIT_ARGS :a1(ia1), a2(ia2)
+#define BOOST_SIGNALS_ARG_TYPES typedef T1 arg2_type; typedef T2 arg3_type;
+
+#include <boost/signals/signal_template.hpp>
+
+#undef BOOST_SIGNALS_ARG_TYPES
+#undef BOOST_SIGNALS_INIT_ARGS
+#undef BOOST_SIGNALS_COPY_PARMS
+#undef BOOST_SIGNALS_ARGS_AS_MEMBERS
+#undef BOOST_SIGNALS_BOUND_ARGS
+#undef BOOST_SIGNALS_ARGS
+#undef BOOST_SIGNALS_PARMS
+#undef BOOST_SIGNALS_TEMPLATE_ARGS
+#undef BOOST_SIGNALS_TEMPLATE_PARMS
+#undef BOOST_SIGNALS_NUM_ARGS
+
+#endif // BOOST_SIGNALS_SIGNAL2_HEADER
diff --git a/boost/boost/signals/signal3.hpp b/boost/boost/signals/signal3.hpp
new file mode 100644
index 00000000000..542a56eac6d
--- /dev/null
+++ b/boost/boost/signals/signal3.hpp
@@ -0,0 +1,37 @@
+// Boost.Signals library
+
+// Copyright Douglas Gregor 2001-2003. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#ifndef BOOST_SIGNALS_SIGNAL3_HEADER
+#define BOOST_SIGNALS_SIGNAL3_HEADER
+
+#define BOOST_SIGNALS_NUM_ARGS 3
+#define BOOST_SIGNALS_TEMPLATE_PARMS typename T1, typename T2, typename T3
+#define BOOST_SIGNALS_TEMPLATE_ARGS T1, T2, T3
+#define BOOST_SIGNALS_PARMS T1 a1, T2 a2, T3 a3
+#define BOOST_SIGNALS_ARGS a1, a2, a3
+#define BOOST_SIGNALS_BOUND_ARGS args->a1, args->a2, args->a3
+#define BOOST_SIGNALS_ARGS_AS_MEMBERS T1 a1;T2 a2;T3 a3;
+#define BOOST_SIGNALS_COPY_PARMS T1 ia1, T2 ia2, T3 ia3
+#define BOOST_SIGNALS_INIT_ARGS :a1(ia1), a2(ia2), a3(ia3)
+#define BOOST_SIGNALS_ARG_TYPES typedef T1 arg2_type; typedef T2 arg3_type; typedef T3 arg4_type;
+
+#include <boost/signals/signal_template.hpp>
+
+#undef BOOST_SIGNALS_ARG_TYPES
+#undef BOOST_SIGNALS_INIT_ARGS
+#undef BOOST_SIGNALS_COPY_PARMS
+#undef BOOST_SIGNALS_ARGS_AS_MEMBERS
+#undef BOOST_SIGNALS_BOUND_ARGS
+#undef BOOST_SIGNALS_ARGS
+#undef BOOST_SIGNALS_PARMS
+#undef BOOST_SIGNALS_TEMPLATE_ARGS
+#undef BOOST_SIGNALS_TEMPLATE_PARMS
+#undef BOOST_SIGNALS_NUM_ARGS
+
+#endif // BOOST_SIGNALS_SIGNAL3_HEADER
diff --git a/boost/boost/signals/signal4.hpp b/boost/boost/signals/signal4.hpp
new file mode 100644
index 00000000000..695f70f9c9c
--- /dev/null
+++ b/boost/boost/signals/signal4.hpp
@@ -0,0 +1,37 @@
+// Boost.Signals library
+
+// Copyright Douglas Gregor 2001-2003. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#ifndef BOOST_SIGNALS_SIGNAL4_HEADER
+#define BOOST_SIGNALS_SIGNAL4_HEADER
+
+#define BOOST_SIGNALS_NUM_ARGS 4
+#define BOOST_SIGNALS_TEMPLATE_PARMS typename T1, typename T2, typename T3, typename T4
+#define BOOST_SIGNALS_TEMPLATE_ARGS T1, T2, T3, T4
+#define BOOST_SIGNALS_PARMS T1 a1, T2 a2, T3 a3, T4 a4
+#define BOOST_SIGNALS_ARGS a1, a2, a3, a4
+#define BOOST_SIGNALS_BOUND_ARGS args->a1, args->a2, args->a3, args->a4
+#define BOOST_SIGNALS_ARGS_AS_MEMBERS T1 a1;T2 a2;T3 a3;T4 a4;
+#define BOOST_SIGNALS_COPY_PARMS T1 ia1, T2 ia2, T3 ia3, T4 ia4
+#define BOOST_SIGNALS_INIT_ARGS :a1(ia1), a2(ia2), a3(ia3), a4(ia4)
+#define BOOST_SIGNALS_ARG_TYPES typedef T1 arg2_type; typedef T2 arg3_type; typedef T3 arg4_type; typedef T4 arg5_type;
+
+#include <boost/signals/signal_template.hpp>
+
+#undef BOOST_SIGNALS_ARG_TYPES
+#undef BOOST_SIGNALS_INIT_ARGS
+#undef BOOST_SIGNALS_COPY_PARMS
+#undef BOOST_SIGNALS_ARGS_AS_MEMBERS
+#undef BOOST_SIGNALS_BOUND_ARGS
+#undef BOOST_SIGNALS_ARGS
+#undef BOOST_SIGNALS_PARMS
+#undef BOOST_SIGNALS_TEMPLATE_ARGS
+#undef BOOST_SIGNALS_TEMPLATE_PARMS
+#undef BOOST_SIGNALS_NUM_ARGS
+
+#endif // BOOST_SIGNALS_SIGNAL4_HEADER
diff --git a/boost/boost/signals/signal5.hpp b/boost/boost/signals/signal5.hpp
new file mode 100644
index 00000000000..ba2f3c2a4ad
--- /dev/null
+++ b/boost/boost/signals/signal5.hpp
@@ -0,0 +1,37 @@
+// Boost.Signals library
+
+// Copyright Douglas Gregor 2001-2003. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#ifndef BOOST_SIGNALS_SIGNAL5_HEADER
+#define BOOST_SIGNALS_SIGNAL5_HEADER
+
+#define BOOST_SIGNALS_NUM_ARGS 5
+#define BOOST_SIGNALS_TEMPLATE_PARMS typename T1, typename T2, typename T3, typename T4, typename T5
+#define BOOST_SIGNALS_TEMPLATE_ARGS T1, T2, T3, T4, T5
+#define BOOST_SIGNALS_PARMS T1 a1, T2 a2, T3 a3, T4 a4, T5 a5
+#define BOOST_SIGNALS_ARGS a1, a2, a3, a4, a5
+#define BOOST_SIGNALS_BOUND_ARGS args->a1, args->a2, args->a3, args->a4, args->a5
+#define BOOST_SIGNALS_ARGS_AS_MEMBERS T1 a1;T2 a2;T3 a3;T4 a4;T5 a5;
+#define BOOST_SIGNALS_COPY_PARMS T1 ia1, T2 ia2, T3 ia3, T4 ia4, T5 ia5
+#define BOOST_SIGNALS_INIT_ARGS :a1(ia1), a2(ia2), a3(ia3), a4(ia4), a5(ia5)
+#define BOOST_SIGNALS_ARG_TYPES typedef T1 arg2_type; typedef T2 arg3_type; typedef T3 arg4_type; typedef T4 arg5_type; typedef T5 arg6_type;
+
+#include <boost/signals/signal_template.hpp>
+
+#undef BOOST_SIGNALS_ARG_TYPES
+#undef BOOST_SIGNALS_INIT_ARGS
+#undef BOOST_SIGNALS_COPY_PARMS
+#undef BOOST_SIGNALS_ARGS_AS_MEMBERS
+#undef BOOST_SIGNALS_BOUND_ARGS
+#undef BOOST_SIGNALS_ARGS
+#undef BOOST_SIGNALS_PARMS
+#undef BOOST_SIGNALS_TEMPLATE_ARGS
+#undef BOOST_SIGNALS_TEMPLATE_PARMS
+#undef BOOST_SIGNALS_NUM_ARGS
+
+#endif // BOOST_SIGNALS_SIGNAL5_HEADER
diff --git a/boost/boost/signals/signal6.hpp b/boost/boost/signals/signal6.hpp
new file mode 100644
index 00000000000..b46afce874f
--- /dev/null
+++ b/boost/boost/signals/signal6.hpp
@@ -0,0 +1,37 @@
+// Boost.Signals library
+
+// Copyright Douglas Gregor 2001-2003. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#ifndef BOOST_SIGNALS_SIGNAL6_HEADER
+#define BOOST_SIGNALS_SIGNAL6_HEADER
+
+#define BOOST_SIGNALS_NUM_ARGS 6
+#define BOOST_SIGNALS_TEMPLATE_PARMS typename T1, typename T2, typename T3, typename T4, typename T5, typename T6
+#define BOOST_SIGNALS_TEMPLATE_ARGS T1, T2, T3, T4, T5, T6
+#define BOOST_SIGNALS_PARMS T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6
+#define BOOST_SIGNALS_ARGS a1, a2, a3, a4, a5, a6
+#define BOOST_SIGNALS_BOUND_ARGS args->a1, args->a2, args->a3, args->a4, args->a5, args->a6
+#define BOOST_SIGNALS_ARGS_AS_MEMBERS T1 a1;T2 a2;T3 a3;T4 a4;T5 a5;T6 a6;
+#define BOOST_SIGNALS_COPY_PARMS T1 ia1, T2 ia2, T3 ia3, T4 ia4, T5 ia5, T6 ia6
+#define BOOST_SIGNALS_INIT_ARGS :a1(ia1), a2(ia2), a3(ia3), a4(ia4), a5(ia5), a6(ia6)
+#define BOOST_SIGNALS_ARG_TYPES typedef T1 arg2_type; typedef T2 arg3_type; typedef T3 arg4_type; typedef T4 arg5_type; typedef T5 arg6_type; typedef T6 arg7_type;
+
+#include <boost/signals/signal_template.hpp>
+
+#undef BOOST_SIGNALS_ARG_TYPES
+#undef BOOST_SIGNALS_INIT_ARGS
+#undef BOOST_SIGNALS_COPY_PARMS
+#undef BOOST_SIGNALS_ARGS_AS_MEMBERS
+#undef BOOST_SIGNALS_BOUND_ARGS
+#undef BOOST_SIGNALS_ARGS
+#undef BOOST_SIGNALS_PARMS
+#undef BOOST_SIGNALS_TEMPLATE_ARGS
+#undef BOOST_SIGNALS_TEMPLATE_PARMS
+#undef BOOST_SIGNALS_NUM_ARGS
+
+#endif // BOOST_SIGNALS_SIGNAL6_HEADER
diff --git a/boost/boost/signals/signal7.hpp b/boost/boost/signals/signal7.hpp
new file mode 100644
index 00000000000..86f11427dab
--- /dev/null
+++ b/boost/boost/signals/signal7.hpp
@@ -0,0 +1,37 @@
+// Boost.Signals library
+
+// Copyright Douglas Gregor 2001-2003. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#ifndef BOOST_SIGNALS_SIGNAL7_HEADER
+#define BOOST_SIGNALS_SIGNAL7_HEADER
+
+#define BOOST_SIGNALS_NUM_ARGS 7
+#define BOOST_SIGNALS_TEMPLATE_PARMS typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7
+#define BOOST_SIGNALS_TEMPLATE_ARGS T1, T2, T3, T4, T5, T6, T7
+#define BOOST_SIGNALS_PARMS T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7
+#define BOOST_SIGNALS_ARGS a1, a2, a3, a4, a5, a6, a7
+#define BOOST_SIGNALS_BOUND_ARGS args->a1, args->a2, args->a3, args->a4, args->a5, args->a6, args->a7
+#define BOOST_SIGNALS_ARGS_AS_MEMBERS T1 a1;T2 a2;T3 a3;T4 a4;T5 a5;T6 a6;T7 a7;
+#define BOOST_SIGNALS_COPY_PARMS T1 ia1, T2 ia2, T3 ia3, T4 ia4, T5 ia5, T6 ia6, T7 ia7
+#define BOOST_SIGNALS_INIT_ARGS :a1(ia1), a2(ia2), a3(ia3), a4(ia4), a5(ia5), a6(ia6), a7(ia7)
+#define BOOST_SIGNALS_ARG_TYPES typedef T1 arg2_type; typedef T2 arg3_type; typedef T3 arg4_type; typedef T4 arg5_type; typedef T5 arg6_type; typedef T6 arg7_type; typedef T7 arg8_type;
+
+#include <boost/signals/signal_template.hpp>
+
+#undef BOOST_SIGNALS_ARG_TYPES
+#undef BOOST_SIGNALS_INIT_ARGS
+#undef BOOST_SIGNALS_COPY_PARMS
+#undef BOOST_SIGNALS_ARGS_AS_MEMBERS
+#undef BOOST_SIGNALS_BOUND_ARGS
+#undef BOOST_SIGNALS_ARGS
+#undef BOOST_SIGNALS_PARMS
+#undef BOOST_SIGNALS_TEMPLATE_ARGS
+#undef BOOST_SIGNALS_TEMPLATE_PARMS
+#undef BOOST_SIGNALS_NUM_ARGS
+
+#endif // BOOST_SIGNALS_SIGNAL7_HEADER
diff --git a/boost/boost/signals/signal8.hpp b/boost/boost/signals/signal8.hpp
new file mode 100644
index 00000000000..e2b86ce68b6
--- /dev/null
+++ b/boost/boost/signals/signal8.hpp
@@ -0,0 +1,37 @@
+// Boost.Signals library
+
+// Copyright Douglas Gregor 2001-2003. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#ifndef BOOST_SIGNALS_SIGNAL8_HEADER
+#define BOOST_SIGNALS_SIGNAL8_HEADER
+
+#define BOOST_SIGNALS_NUM_ARGS 8
+#define BOOST_SIGNALS_TEMPLATE_PARMS typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8
+#define BOOST_SIGNALS_TEMPLATE_ARGS T1, T2, T3, T4, T5, T6, T7, T8
+#define BOOST_SIGNALS_PARMS T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8
+#define BOOST_SIGNALS_ARGS a1, a2, a3, a4, a5, a6, a7, a8
+#define BOOST_SIGNALS_BOUND_ARGS args->a1, args->a2, args->a3, args->a4, args->a5, args->a6, args->a7, args->a8
+#define BOOST_SIGNALS_ARGS_AS_MEMBERS T1 a1;T2 a2;T3 a3;T4 a4;T5 a5;T6 a6;T7 a7;T8 a8;
+#define BOOST_SIGNALS_COPY_PARMS T1 ia1, T2 ia2, T3 ia3, T4 ia4, T5 ia5, T6 ia6, T7 ia7, T8 ia8
+#define BOOST_SIGNALS_INIT_ARGS :a1(ia1), a2(ia2), a3(ia3), a4(ia4), a5(ia5), a6(ia6), a7(ia7), a8(ia8)
+#define BOOST_SIGNALS_ARG_TYPES typedef T1 arg2_type; typedef T2 arg3_type; typedef T3 arg4_type; typedef T4 arg5_type; typedef T5 arg6_type; typedef T6 arg7_type; typedef T7 arg8_type; typedef T8 arg9_type;
+
+#include <boost/signals/signal_template.hpp>
+
+#undef BOOST_SIGNALS_ARG_TYPES
+#undef BOOST_SIGNALS_INIT_ARGS
+#undef BOOST_SIGNALS_COPY_PARMS
+#undef BOOST_SIGNALS_ARGS_AS_MEMBERS
+#undef BOOST_SIGNALS_BOUND_ARGS
+#undef BOOST_SIGNALS_ARGS
+#undef BOOST_SIGNALS_PARMS
+#undef BOOST_SIGNALS_TEMPLATE_ARGS
+#undef BOOST_SIGNALS_TEMPLATE_PARMS
+#undef BOOST_SIGNALS_NUM_ARGS
+
+#endif // BOOST_SIGNALS_SIGNAL8_HEADER
diff --git a/boost/boost/signals/signal9.hpp b/boost/boost/signals/signal9.hpp
new file mode 100644
index 00000000000..bb6a57afa7d
--- /dev/null
+++ b/boost/boost/signals/signal9.hpp
@@ -0,0 +1,37 @@
+// Boost.Signals library
+
+// Copyright Douglas Gregor 2001-2003. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#ifndef BOOST_SIGNALS_SIGNAL9_HEADER
+#define BOOST_SIGNALS_SIGNAL9_HEADER
+
+#define BOOST_SIGNALS_NUM_ARGS 9
+#define BOOST_SIGNALS_TEMPLATE_PARMS typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9
+#define BOOST_SIGNALS_TEMPLATE_ARGS T1, T2, T3, T4, T5, T6, T7, T8, T9
+#define BOOST_SIGNALS_PARMS T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9
+#define BOOST_SIGNALS_ARGS a1, a2, a3, a4, a5, a6, a7, a8, a9
+#define BOOST_SIGNALS_BOUND_ARGS args->a1, args->a2, args->a3, args->a4, args->a5, args->a6, args->a7, args->a8, args->a9
+#define BOOST_SIGNALS_ARGS_AS_MEMBERS T1 a1;T2 a2;T3 a3;T4 a4;T5 a5;T6 a6;T7 a7;T8 a8;T9 a9;
+#define BOOST_SIGNALS_COPY_PARMS T1 ia1, T2 ia2, T3 ia3, T4 ia4, T5 ia5, T6 ia6, T7 ia7, T8 ia8, T9 ia9
+#define BOOST_SIGNALS_INIT_ARGS :a1(ia1), a2(ia2), a3(ia3), a4(ia4), a5(ia5), a6(ia6), a7(ia7), a8(ia8), a9(ia9)
+#define BOOST_SIGNALS_ARG_TYPES typedef T1 arg2_type; typedef T2 arg3_type; typedef T3 arg4_type; typedef T4 arg5_type; typedef T5 arg6_type; typedef T6 arg7_type; typedef T7 arg8_type; typedef T8 arg9_type; typedef T9 arg10_type;
+
+#include <boost/signals/signal_template.hpp>
+
+#undef BOOST_SIGNALS_ARG_TYPES
+#undef BOOST_SIGNALS_INIT_ARGS
+#undef BOOST_SIGNALS_COPY_PARMS
+#undef BOOST_SIGNALS_ARGS_AS_MEMBERS
+#undef BOOST_SIGNALS_BOUND_ARGS
+#undef BOOST_SIGNALS_ARGS
+#undef BOOST_SIGNALS_PARMS
+#undef BOOST_SIGNALS_TEMPLATE_ARGS
+#undef BOOST_SIGNALS_TEMPLATE_PARMS
+#undef BOOST_SIGNALS_NUM_ARGS
+
+#endif // BOOST_SIGNALS_SIGNAL9_HEADER
diff --git a/boost/boost/signals/signal_template.hpp b/boost/boost/signals/signal_template.hpp
new file mode 100644
index 00000000000..a8420b69140
--- /dev/null
+++ b/boost/boost/signals/signal_template.hpp
@@ -0,0 +1,410 @@
+// Boost.Signals library
+
+// Copyright Douglas Gregor 2001-2004. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+// This file intentionally does not have include guards, because it is meant
+// to be included multiple times (one for each signalN class). The
+// BOOST_SIGNALS_SIGNAL_TEMPLATE_HEADER_INCLUDED macro merely serves to
+// suppress reinclusion of the files that this header depends on.
+
+#ifndef BOOST_SIGNALS_SIGNAL_TEMPLATE_HEADER_INCLUDED
+#define BOOST_SIGNALS_SIGNAL_TEMPLATE_HEADER_INCLUDED
+# include <boost/config.hpp>
+# include <boost/signals/connection.hpp>
+# include <boost/utility.hpp>
+# include <boost/ref.hpp>
+# include <boost/signals/slot.hpp>
+# include <boost/last_value.hpp>
+# include <boost/signals/detail/signal_base.hpp>
+# include <boost/signals/detail/slot_call_iterator.hpp>
+# include <boost/mpl/bool.hpp>
+# include <boost/type_traits/is_convertible.hpp>
+# include <cassert>
+# include <functional>
+# include <memory>
+#endif // !BOOST_SIGNALS_SIGNAL_TEMPLATE_HEADER_INCLUDED
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+// Include the appropriate functionN header
+#define BOOST_SIGNAL_FUNCTION_N_HEADER BOOST_JOIN(<boost/function/function,BOOST_SIGNALS_NUM_ARGS.hpp>)
+#include BOOST_SIGNAL_FUNCTION_N_HEADER
+
+// Determine if a comma should follow a listing of the arguments/parameters
+#if BOOST_SIGNALS_NUM_ARGS == 0
+# define BOOST_SIGNALS_COMMA_IF_NONZERO_ARGS
+#else
+# define BOOST_SIGNALS_COMMA_IF_NONZERO_ARGS ,
+#endif // BOOST_SIGNALS_NUM_ARGS > 0
+
+// Define class names used
+#define BOOST_SIGNALS_SIGNAL BOOST_JOIN(signal,BOOST_SIGNALS_NUM_ARGS)
+#define BOOST_SIGNALS_FUNCTION BOOST_JOIN(function,BOOST_SIGNALS_NUM_ARGS)
+#define BOOST_SIGNALS_ARGS_STRUCT BOOST_JOIN(args,BOOST_SIGNALS_NUM_ARGS)
+#define BOOST_SIGNALS_CALL_BOUND BOOST_JOIN(call_bound,BOOST_SIGNALS_NUM_ARGS)
+
+// Define commonly-used instantiations
+#define BOOST_SIGNALS_ARGS_STRUCT_INST \
+ BOOST_SIGNALS_NAMESPACE::detail::BOOST_SIGNALS_ARGS_STRUCT<BOOST_SIGNALS_TEMPLATE_ARGS>
+
+namespace boost {
+ namespace BOOST_SIGNALS_NAMESPACE {
+ namespace detail {
+ // Holds the arguments for a bound slot call in a single place
+ template<BOOST_SIGNALS_TEMPLATE_PARMS
+ BOOST_SIGNALS_COMMA_IF_NONZERO_ARGS
+ typename Dummy = int>
+ struct BOOST_SIGNALS_ARGS_STRUCT {
+ BOOST_SIGNALS_ARGS_STRUCT(BOOST_SIGNALS_COPY_PARMS)
+ BOOST_SIGNALS_INIT_ARGS
+ {
+ }
+
+ BOOST_SIGNALS_ARGS_AS_MEMBERS
+ };
+
+ // Function object that calls the function object given to it, passing
+ // the bound arguments along to that underlying function object
+ template<typename R>
+ struct BOOST_SIGNALS_CALL_BOUND {
+ template<BOOST_SIGNALS_TEMPLATE_PARMS
+ BOOST_SIGNALS_COMMA_IF_NONZERO_ARGS
+ typename F>
+ struct caller {
+ typedef BOOST_SIGNALS_ARGS_STRUCT<BOOST_SIGNALS_TEMPLATE_ARGS>*
+ args_type;
+
+ args_type args;
+
+ typedef R result_type;
+
+ caller() {}
+ caller(args_type a) : args(a) {}
+
+ template<typename Pair>
+ R operator()(const Pair& slot) const
+ {
+ F* target = const_cast<F*>(unsafe_any_cast<F>(&slot.second));
+ return (*target)(BOOST_SIGNALS_BOUND_ARGS);
+ }
+ };
+ };
+
+ template<>
+ struct BOOST_SIGNALS_CALL_BOUND<void> {
+ template<BOOST_SIGNALS_TEMPLATE_PARMS
+ BOOST_SIGNALS_COMMA_IF_NONZERO_ARGS
+ typename F>
+ struct caller {
+ typedef BOOST_SIGNALS_ARGS_STRUCT<BOOST_SIGNALS_TEMPLATE_ARGS>*
+ args_type;
+
+ args_type args;
+
+ typedef unusable result_type;
+
+ caller(args_type a) : args(a) {}
+
+ template<typename Pair>
+ unusable operator()(const Pair& slot) const
+ {
+ F* target = const_cast<F*>(unsafe_any_cast<F>(&slot.second));
+ (*target)(BOOST_SIGNALS_BOUND_ARGS);
+ return unusable();
+ }
+ };
+ };
+ } // namespace detail
+ } // namespace BOOST_SIGNALS_NAMESPACE
+
+ // The actual signalN class
+ template<
+ typename R,
+ BOOST_SIGNALS_TEMPLATE_PARMS
+ BOOST_SIGNALS_COMMA_IF_NONZERO_ARGS
+ typename Combiner = last_value<R>,
+ typename Group = int,
+ typename GroupCompare = std::less<Group>,
+ typename SlotFunction = BOOST_SIGNALS_FUNCTION<
+ R BOOST_SIGNALS_COMMA_IF_NONZERO_ARGS
+ BOOST_SIGNALS_TEMPLATE_ARGS>
+ >
+ class BOOST_SIGNALS_SIGNAL :
+ public BOOST_SIGNALS_NAMESPACE::detail::signal_base, // management of slot list
+ public BOOST_SIGNALS_NAMESPACE::trackable // signals are trackable
+ {
+ public:
+ // The slot function type
+ typedef SlotFunction slot_function_type;
+
+ // Result type of a slot
+ typedef typename BOOST_SIGNALS_NAMESPACE::detail::slot_result_type<R>::type
+ slot_result_type;
+
+ // Argument types
+ BOOST_SIGNALS_ARG_TYPES
+
+#if BOOST_SIGNALS_NUM_ARGS == 1
+ typedef T1 argument_type;
+#elif BOOST_SIGNALS_NUM_ARGS == 2
+ typedef T1 first_argument_type;
+ typedef T2 second_argument_type;
+#endif
+
+ private:
+ // The real slot name comparison object type
+ typedef BOOST_SIGNALS_NAMESPACE::detail::group_bridge_compare<GroupCompare, Group>
+ real_group_compare_type;
+
+ // The function object passed to the slot call iterator that will call
+ // the underlying slot function with its arguments bound
+ typedef BOOST_SIGNALS_NAMESPACE::detail::BOOST_SIGNALS_CALL_BOUND<R>
+ outer_bound_slot_caller;
+ typedef typename outer_bound_slot_caller::template
+ caller<BOOST_SIGNALS_TEMPLATE_ARGS
+ BOOST_SIGNALS_COMMA_IF_NONZERO_ARGS
+ slot_function_type>
+ call_bound_slot;
+
+ public:
+ // Combiner's result type
+ typedef typename Combiner::result_type result_type;
+
+ // Combiner type
+ typedef Combiner combiner_type;
+
+ // Slot type
+ typedef slot<slot_function_type> slot_type;
+
+ // Slot name type and comparison
+ typedef Group group_type;
+ typedef GroupCompare group_compare_type;
+
+ typedef BOOST_SIGNALS_NAMESPACE::detail::slot_call_iterator<
+ call_bound_slot, iterator> slot_call_iterator;
+
+ explicit
+ BOOST_SIGNALS_SIGNAL(const Combiner& c = Combiner(),
+ const GroupCompare& comp = GroupCompare()) :
+ BOOST_SIGNALS_NAMESPACE::detail::signal_base(real_group_compare_type(comp),
+ c)
+ {
+ }
+
+ // Connect a slot to this signal
+ BOOST_SIGNALS_NAMESPACE::connection
+ connect(const slot_type&,
+ BOOST_SIGNALS_NAMESPACE::connect_position at
+ = BOOST_SIGNALS_NAMESPACE::at_back);
+
+
+ BOOST_SIGNALS_NAMESPACE::connection
+ connect(const group_type&, const slot_type&,
+ BOOST_SIGNALS_NAMESPACE::connect_position at
+ = BOOST_SIGNALS_NAMESPACE::at_back);
+
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+ // MSVC 6.0 and 7.0 don't handle the is_convertible test well
+ void disconnect(const group_type& group)
+ {
+ impl->disconnect(group);
+ }
+#else
+ template<typename T>
+ void disconnect(const T& t)
+ {
+ typedef mpl::bool_<(is_convertible<T, group_type>::value)> is_group;
+ this->do_disconnect(t, is_group());
+ }
+
+ private:
+ // Disconnect a named slot
+ void do_disconnect(const group_type& group, mpl::bool_<true>)
+ {
+ impl->disconnect(group);
+ }
+
+ template<typename Function>
+ void do_disconnect(const Function& f, mpl::bool_<false>)
+ {
+ // Notify the slot handling code that we are iterating through the slots
+ BOOST_SIGNALS_NAMESPACE::detail::call_notification notification(this->impl);
+
+ for (iterator i = impl->slots_.begin(); i != impl->slots_.end(); ++i) {
+ slot_function_type& s = *unsafe_any_cast<slot_function_type>(&i->second);
+ if (s == f) i->first.disconnect();
+ }
+ }
+#endif
+
+ public:
+
+ // Emit the signal
+ result_type operator()(BOOST_SIGNALS_PARMS);
+ result_type operator()(BOOST_SIGNALS_PARMS) const;
+
+ Combiner& combiner()
+ { return *unsafe_any_cast<Combiner>(&impl->combiner_); }
+
+ const Combiner& combiner() const
+ { return *unsafe_any_cast<const Combiner>(&impl->combiner_); }
+ };
+
+ template<
+ typename R,
+ BOOST_SIGNALS_TEMPLATE_PARMS
+ BOOST_SIGNALS_COMMA_IF_NONZERO_ARGS
+ typename Combiner,
+ typename Group,
+ typename GroupCompare,
+ typename SlotFunction
+ >
+ BOOST_SIGNALS_NAMESPACE::connection
+ BOOST_SIGNALS_SIGNAL<
+ R, BOOST_SIGNALS_TEMPLATE_ARGS
+ BOOST_SIGNALS_COMMA_IF_NONZERO_ARGS
+ Combiner, Group, GroupCompare, SlotFunction
+ >::connect(const slot_type& in_slot,
+ BOOST_SIGNALS_NAMESPACE::connect_position at)
+ {
+ using boost::BOOST_SIGNALS_NAMESPACE::detail::stored_group;
+
+ // If the slot has been disconnected, just return a disconnected
+ // connection
+ if (!in_slot.is_active()) {
+ return BOOST_SIGNALS_NAMESPACE::connection();
+ }
+
+ return impl->connect_slot(in_slot.get_slot_function(), stored_group(),
+ in_slot.get_data(), at);
+ }
+
+ template<
+ typename R,
+ BOOST_SIGNALS_TEMPLATE_PARMS
+ BOOST_SIGNALS_COMMA_IF_NONZERO_ARGS
+ typename Combiner,
+ typename Group,
+ typename GroupCompare,
+ typename SlotFunction
+ >
+ BOOST_SIGNALS_NAMESPACE::connection
+ BOOST_SIGNALS_SIGNAL<
+ R, BOOST_SIGNALS_TEMPLATE_ARGS
+ BOOST_SIGNALS_COMMA_IF_NONZERO_ARGS
+ Combiner, Group, GroupCompare, SlotFunction
+ >::connect(const group_type& group,
+ const slot_type& in_slot,
+ BOOST_SIGNALS_NAMESPACE::connect_position at)
+ {
+ // If the slot has been disconnected, just return a disconnected
+ // connection
+ if (!in_slot.is_active()) {
+ return BOOST_SIGNALS_NAMESPACE::connection();
+ }
+
+ return impl->connect_slot(in_slot.get_slot_function(), group,
+ in_slot.get_data(), at);
+ }
+
+ template<
+ typename R,
+ BOOST_SIGNALS_TEMPLATE_PARMS
+ BOOST_SIGNALS_COMMA_IF_NONZERO_ARGS
+ typename Combiner,
+ typename Group,
+ typename GroupCompare,
+ typename SlotFunction
+ >
+ typename BOOST_SIGNALS_SIGNAL<
+ R, BOOST_SIGNALS_TEMPLATE_ARGS
+ BOOST_SIGNALS_COMMA_IF_NONZERO_ARGS
+ Combiner, Group, GroupCompare, SlotFunction>::result_type
+ BOOST_SIGNALS_SIGNAL<
+ R, BOOST_SIGNALS_TEMPLATE_ARGS
+ BOOST_SIGNALS_COMMA_IF_NONZERO_ARGS
+ Combiner, Group, GroupCompare, SlotFunction
+ >::operator()(BOOST_SIGNALS_PARMS)
+ {
+ // Notify the slot handling code that we are making a call
+ BOOST_SIGNALS_NAMESPACE::detail::call_notification notification(this->impl);
+
+ // Construct a function object that will call the underlying slots
+ // with the given arguments.
+#if BOOST_SIGNALS_NUM_ARGS == 0
+ BOOST_SIGNALS_ARGS_STRUCT_INST args;
+#else
+ BOOST_SIGNALS_ARGS_STRUCT_INST args(BOOST_SIGNALS_ARGS);
+#endif // BOOST_SIGNALS_NUM_ARGS > 0
+ call_bound_slot f(&args);
+
+ typedef typename call_bound_slot::result_type result_type;
+ optional<result_type> cache;
+ // Let the combiner call the slots via a pair of input iterators
+ return combiner()(slot_call_iterator(notification.impl->slots_.begin(),
+ impl->slots_.end(), f, cache),
+ slot_call_iterator(notification.impl->slots_.end(),
+ impl->slots_.end(), f, cache));
+ }
+
+ template<
+ typename R,
+ BOOST_SIGNALS_TEMPLATE_PARMS
+ BOOST_SIGNALS_COMMA_IF_NONZERO_ARGS
+ typename Combiner,
+ typename Group,
+ typename GroupCompare,
+ typename SlotFunction
+ >
+ typename BOOST_SIGNALS_SIGNAL<
+ R, BOOST_SIGNALS_TEMPLATE_ARGS
+ BOOST_SIGNALS_COMMA_IF_NONZERO_ARGS
+ Combiner, Group, GroupCompare, SlotFunction>::result_type
+ BOOST_SIGNALS_SIGNAL<
+ R, BOOST_SIGNALS_TEMPLATE_ARGS
+ BOOST_SIGNALS_COMMA_IF_NONZERO_ARGS
+ Combiner, Group, GroupCompare, SlotFunction
+ >::operator()(BOOST_SIGNALS_PARMS) const
+ {
+ // Notify the slot handling code that we are making a call
+ BOOST_SIGNALS_NAMESPACE::detail::call_notification notification(this->impl);
+
+ // Construct a function object that will call the underlying slots
+ // with the given arguments.
+#if BOOST_SIGNALS_NUM_ARGS == 0
+ BOOST_SIGNALS_ARGS_STRUCT_INST args;
+#else
+ BOOST_SIGNALS_ARGS_STRUCT_INST args(BOOST_SIGNALS_ARGS);
+#endif // BOOST_SIGNALS_NUM_ARGS > 0
+
+ call_bound_slot f(&args);
+
+ typedef typename call_bound_slot::result_type result_type;
+ optional<result_type> cache;
+
+ // Let the combiner call the slots via a pair of input iterators
+ return combiner()(slot_call_iterator(notification.impl->slots_.begin(),
+ impl->slots_.end(), f, cache),
+ slot_call_iterator(notification.impl->slots_.end(),
+ impl->slots_.end(), f, cache));
+ }
+} // namespace boost
+
+#undef BOOST_SIGNAL_FUNCTION_N_HEADER
+#undef BOOST_SIGNALS_ARGS_STRUCT_INST
+#undef BOOST_SIGNALS_CALL_BOUND
+#undef BOOST_SIGNALS_ARGS_STRUCT
+#undef BOOST_SIGNALS_FUNCTION
+#undef BOOST_SIGNALS_SIGNAL
+#undef BOOST_SIGNALS_COMMA_IF_NONZERO_ARGS
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
diff --git a/boost/boost/signals/slot.hpp b/boost/boost/signals/slot.hpp
new file mode 100644
index 00000000000..bbf18480106
--- /dev/null
+++ b/boost/boost/signals/slot.hpp
@@ -0,0 +1,157 @@
+// Boost.Signals library
+
+// Copyright Douglas Gregor 2001-2004. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#ifndef BOOST_SIGNALS_SLOT_HEADER
+#define BOOST_SIGNALS_SLOT_HEADER
+
+#include <boost/signals/detail/signals_common.hpp>
+#include <boost/signals/connection.hpp>
+#include <boost/signals/trackable.hpp>
+#include <boost/visit_each.hpp>
+#include <boost/shared_ptr.hpp>
+#include <cassert>
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+namespace boost {
+ namespace BOOST_SIGNALS_NAMESPACE {
+ namespace detail {
+ class BOOST_SIGNALS_DECL slot_base {
+ // We would have to enumerate all of the signalN classes here as
+ // friends to make this private (as it otherwise should be). We can't
+ // name all of them because we don't know how many there are.
+ public:
+ struct data_t {
+ std::vector<const trackable*> bound_objects;
+ connection watch_bound_objects;
+ };
+ shared_ptr<data_t> get_data() const { return data; }
+
+ // Get the set of bound objects
+ std::vector<const trackable*>& get_bound_objects() const
+ { return data->bound_objects; }
+
+ // Determine if this slot is still "active", i.e., all of the bound
+ // objects still exist
+ bool is_active() const
+ { return data->watch_bound_objects.connected(); }
+
+ protected:
+ // Create a connection for this slot
+ void create_connection();
+
+ shared_ptr<data_t> data;
+
+ private:
+ static void bound_object_destructed(void*, void*) {}
+ };
+ } // end namespace detail
+
+ // Get the slot so that it can be copied
+ template<typename F>
+ reference_wrapper<const F>
+ get_invocable_slot(const F& f, BOOST_SIGNALS_NAMESPACE::detail::signal_tag)
+ { return reference_wrapper<const F>(f); }
+
+ template<typename F>
+ const F&
+ get_invocable_slot(const F& f, BOOST_SIGNALS_NAMESPACE::detail::reference_tag)
+ { return f; }
+
+ template<typename F>
+ const F&
+ get_invocable_slot(const F& f, BOOST_SIGNALS_NAMESPACE::detail::value_tag)
+ { return f; }
+
+ // Get the slot so that it can be inspected for trackable objects
+ template<typename F>
+ const F&
+ get_inspectable_slot(const F& f, BOOST_SIGNALS_NAMESPACE::detail::signal_tag)
+ { return f; }
+
+ template<typename F>
+ const F&
+ get_inspectable_slot(const reference_wrapper<F>& f, BOOST_SIGNALS_NAMESPACE::detail::reference_tag)
+ { return f.get(); }
+
+ template<typename F>
+ const F&
+ get_inspectable_slot(const F& f, BOOST_SIGNALS_NAMESPACE::detail::value_tag)
+ { return f; }
+
+ // Determines the type of the slot - is it a signal, a reference to a
+ // slot or just a normal slot.
+ template<typename F>
+ typename BOOST_SIGNALS_NAMESPACE::detail::get_slot_tag<F>::type
+ tag_type(const F&)
+ {
+ typedef typename BOOST_SIGNALS_NAMESPACE::detail::get_slot_tag<F>::type
+ the_tag_type;
+ the_tag_type tag = the_tag_type();
+ return tag;
+ }
+
+ } // end namespace BOOST_SIGNALS_NAMESPACE
+
+ template<typename SlotFunction>
+ class slot : public BOOST_SIGNALS_NAMESPACE::detail::slot_base {
+ typedef BOOST_SIGNALS_NAMESPACE::detail::slot_base inherited;
+ typedef typename inherited::data_t data_t;
+
+ public:
+ template<typename F>
+ slot(const F& f) : slot_function(BOOST_SIGNALS_NAMESPACE::get_invocable_slot(f, BOOST_SIGNALS_NAMESPACE::tag_type(f)))
+ {
+ this->data.reset(new data_t);
+
+ // Visit each of the bound objects and store them for later use
+ // An exception thrown here will allow the basic_connection to be
+ // destroyed when this goes out of scope, and no other connections
+ // have been made.
+ BOOST_SIGNALS_NAMESPACE::detail::bound_objects_visitor
+ do_bind(this->data->bound_objects);
+ visit_each(do_bind,
+ BOOST_SIGNALS_NAMESPACE::get_inspectable_slot
+ (f, BOOST_SIGNALS_NAMESPACE::tag_type(f)));
+ create_connection();
+ }
+
+#ifdef __BORLANDC__
+ template<typename F>
+ slot(F* f) : slot_function(f)
+ {
+ this->data.reset(new data_t);
+ create_connection();
+ }
+#endif // __BORLANDC__
+
+ // We would have to enumerate all of the signalN classes here as friends
+ // to make this private (as it otherwise should be). We can't name all of
+ // them because we don't know how many there are.
+ public:
+ // Get the slot function to call the actual slot
+ const SlotFunction& get_slot_function() const { return slot_function; }
+
+ void release() const { data->watch_bound_objects.set_controlling(false); }
+
+ private:
+ slot(); // no default constructor
+ slot& operator=(const slot&); // no assignment operator
+
+ SlotFunction slot_function;
+ };
+} // end namespace boost
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif // BOOST_SIGNALS_SLOT_HEADER
diff --git a/boost/boost/signals/trackable.hpp b/boost/boost/signals/trackable.hpp
new file mode 100644
index 00000000000..544ec611e0b
--- /dev/null
+++ b/boost/boost/signals/trackable.hpp
@@ -0,0 +1,195 @@
+// Boost.Signals library
+
+// Copyright Douglas Gregor 2001-2004. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org
+
+#ifndef BOOST_SIGNALS_TRACKABLE_HPP
+#define BOOST_SIGNALS_TRACKABLE_HPP
+
+#include <boost/type_traits.hpp>
+#include <boost/signals/connection.hpp>
+#include <boost/pending/ct_if.hpp>
+#include <boost/ref.hpp>
+#include <boost/utility/addressof.hpp>
+#include <list>
+#include <vector>
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+namespace boost {
+
+namespace BOOST_SIGNALS_NAMESPACE {
+ // Base class for "trackable" objects that can be tracked when they are
+ // bound in slot target functions. When a trackable object is destroyed,
+ // the signal/slot connections are disconnected automatically.
+ class BOOST_SIGNALS_DECL trackable {
+ private:
+ static void signal_disconnected(void* obj, void* data);
+
+ friend class detail::signal_base_impl;
+ friend class detail::slot_base;
+ void signal_connected(connection, BOOST_SIGNALS_NAMESPACE::detail::bound_object&) const;
+
+ protected:
+ trackable() : connected_signals(), dying(false) {}
+ trackable(const trackable&) : connected_signals(), dying(false) {}
+ ~trackable();
+
+ trackable& operator=(const trackable&)
+ {
+ connected_signals.clear();
+ return *this;
+ }
+
+ private:
+ typedef std::list<connection> connection_list;
+ typedef connection_list::iterator connection_iterator;
+
+ // List of connections that this object is part of
+ mutable connection_list connected_signals;
+
+ // True when the object is being destroyed
+ mutable bool dying;
+ };
+
+ namespace detail {
+ template<bool Cond> struct truth {};
+
+ // A visitor that adds each trackable object to a vector
+ class bound_objects_visitor {
+ public:
+ bound_objects_visitor(std::vector<const trackable*>& v) :
+ bound_objects(v)
+ {
+ }
+
+ template<typename T>
+ void operator()(const T& t) const
+ {
+ decode(t, 0);
+ }
+
+ private:
+ // decode() decides between a reference wrapper and anything else
+ template<typename T>
+ void decode(const reference_wrapper<T>& t, int) const
+ {
+ add_if_trackable(t.get_pointer());
+ }
+
+ template<typename T>
+ void decode(const T& t, long) const
+ {
+ typedef truth<(is_pointer<T>::value)> is_a_pointer;
+ maybe_get_pointer(t, is_a_pointer());
+ }
+
+ // maybe_get_pointer() decides between a pointer and a non-pointer
+ template<typename T>
+ void maybe_get_pointer(const T& t, truth<true>) const
+ {
+ add_if_trackable(t);
+ }
+
+ template<typename T>
+ void maybe_get_pointer(const T& t, truth<false>) const
+ {
+ // Take the address of this object, because the object itself may be
+ // trackable
+ add_if_trackable(boost::addressof(t));
+ }
+
+ // add_if_trackable() adds trackable objects to the list of bound objects
+ inline void add_if_trackable(const trackable* b) const
+ {
+ if (b) {
+ bound_objects.push_back(b);
+ }
+ }
+
+ inline void add_if_trackable(const void*) const
+ {
+ }
+
+ template<typename R>
+ inline void add_if_trackable(R (*)()) const
+ {
+ }
+
+ template<typename R, typename T1>
+ inline void add_if_trackable(R (*)(T1)) const
+ {
+ }
+
+ template<typename R, typename T1, typename T2>
+ inline void add_if_trackable(R (*)(T1, T2)) const
+ {
+ }
+
+ template<typename R, typename T1, typename T2, typename T3>
+ inline void add_if_trackable(R (*)(T1, T2, T3)) const
+ {
+ }
+
+ template<typename R, typename T1, typename T2, typename T3, typename T4>
+ inline void add_if_trackable(R (*)(T1, T2, T3, T4)) const
+ {
+ }
+
+ template<typename R, typename T1, typename T2, typename T3, typename T4,
+ typename T5>
+ inline void add_if_trackable(R (*)(T1, T2, T3, T4, T5)) const
+ {
+ }
+
+ template<typename R, typename T1, typename T2, typename T3, typename T4,
+ typename T5, typename T6>
+ inline void add_if_trackable(R (*)(T1, T2, T3, T4, T5, T6)) const
+ {
+ }
+
+ template<typename R, typename T1, typename T2, typename T3, typename T4,
+ typename T5, typename T6, typename T7>
+ inline void add_if_trackable(R (*)(T1, T2, T3, T4, T5, T6, T7)) const
+ {
+ }
+
+ template<typename R, typename T1, typename T2, typename T3, typename T4,
+ typename T5, typename T6, typename T7, typename T8>
+ inline void add_if_trackable(R (*)(T1, T2, T3, T4, T5, T6, T7, T8)) const
+ {
+ }
+
+ template<typename R, typename T1, typename T2, typename T3, typename T4,
+ typename T5, typename T6, typename T7, typename T8, typename T9>
+ inline void
+ add_if_trackable(R (*)(T1, T2, T3, T4, T5, T6, T7, T8, T9)) const
+ {
+ }
+
+ template<typename R, typename T1, typename T2, typename T3, typename T4,
+ typename T5, typename T6, typename T7, typename T8, typename T9,
+ typename T10>
+ inline void
+ add_if_trackable(R (*)(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)) const
+ {
+ }
+
+ std::vector<const trackable*>& bound_objects;
+ };
+ } // end namespace detail
+} // end namespace BOOST_SIGNALS_NAMESPACE
+
+} // end namespace boost
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif // BOOST_SIGNALS_TRACKABLE_HPP
diff --git a/boost/boost/smart_cast.hpp b/boost/boost/smart_cast.hpp
new file mode 100644
index 00000000000..756afc3a083
--- /dev/null
+++ b/boost/boost/smart_cast.hpp
@@ -0,0 +1,298 @@
+#ifndef BOOST_SMART_CAST_HPP
+#define BOOST_SMART_CAST_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// smart_cast.hpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+// casting of pointers and references.
+
+// In casting between different C++ classes, there are a number of
+// rules that have to be kept in mind in deciding whether to use
+// static_cast or dynamic_cast.
+
+// a) dynamic casting can only be applied when one of the types is polymorphic
+// Otherwise static_cast must be used.
+// b) only dynamic casting can do runtime error checking
+// use of static_cast is generally un checked even when compiled for debug
+// c) static_cast would be considered faster than dynamic_cast.
+
+// If casting is applied to a template parameter, there is no apriori way
+// to know which of the two casting methods will be permitted or convenient.
+
+// smart_cast uses C++ type_traits, and program debug mode to select the
+// most convenient cast to use.
+
+#include <exception>
+#include <typeinfo>
+
+#include <boost/config.hpp>
+#include <boost/static_assert.hpp>
+
+#include <boost/type_traits/is_base_and_derived.hpp>
+#include <boost/type_traits/is_polymorphic.hpp>
+#include <boost/type_traits/is_pointer.hpp>
+#include <boost/type_traits/is_reference.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/remove_pointer.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/identity.hpp>
+
+namespace boost {
+namespace smart_cast_impl {
+
+ template<class T>
+ struct reference {
+
+ struct polymorphic {
+
+ struct linear {
+ template<class U>
+ static T cast(U & u){
+ return static_cast<T>(u);
+ }
+ };
+
+ struct cross {
+ template<class U>
+ static T cast(U & u){
+ return dynamic_cast<T>(u);
+ }
+ };
+
+ template<class U>
+ static T cast(U & u){
+ // if we're in debug mode
+ #if ! defined(NDEBUG) \
+ || defined(__BORLANDC__) && (__BORLANDC__ <= 0x560) \
+ || defined(__MWERKS__)
+ // do a checked dynamic cast
+ return cross::cast(u);
+ #else
+ // borland 5.51 chokes here so we can't use it
+ // note: if remove_reference isn't function for these types
+ // cross casting will be selected this will work but will
+ // not be the most efficient method. This will conflict with
+ // the original smart_cast motivation.
+ typedef BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ BOOST_DEDUCED_TYPENAME mpl::and_<
+ mpl::not_<is_base_and_derived<
+ BOOST_DEDUCED_TYPENAME remove_reference<T>::type,
+ U
+ > >,
+ mpl::not_<is_base_and_derived<
+ U,
+ BOOST_DEDUCED_TYPENAME remove_reference<T>::type
+ > >
+ >,
+ // borland chokes w/o full qualification here
+ mpl::identity<cross>,
+ mpl::identity<linear>
+ >::type typex;
+ // typex works around gcc 2.95 issue
+ return typex::cast(u);
+ #endif
+ }
+ };
+
+ struct non_polymorphic {
+ template<class U>
+ static T cast(U & u){
+ return static_cast<T>(u);
+ }
+ };
+ template<class U>
+ static T cast(U & u){
+ #if defined(__BORLANDC__)
+ return mpl::eval_if<
+ boost::is_polymorphic<U>,
+ mpl::identity<polymorphic>,
+ mpl::identity<non_polymorphic>
+ >::type::cast(u);
+ #else
+ typedef BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ boost::is_polymorphic<U>,
+ mpl::identity<polymorphic>,
+ mpl::identity<non_polymorphic>
+ >::type typex;
+ return typex::cast(u);
+ #endif
+ }
+ };
+
+ template<class T>
+ struct pointer {
+
+ struct polymorphic {
+ // unfortunately, this below fails to work for virtual base
+ // classes. need has_virtual_base to do this.
+ // Subject for further study
+ #if 0
+ struct linear {
+ template<class U>
+ static T cast(U * u){
+ return static_cast<T>(u);
+ }
+ };
+
+ struct cross {
+ template<class U>
+ static T cast(U * u){
+ T tmp = dynamic_cast<T>(u);
+ #ifndef NDEBUG
+ if ( tmp == 0 ) throw std::bad_cast();
+ #endif
+ return tmp;
+ }
+ };
+
+ template<class U>
+ static T cast(U * u){
+ // if we're in debug mode
+ #if ! defined(NDEBUG) || defined(__BORLANDC__) && (__BORLANDC__ <= 0x560)
+ // do a checked dynamic cast
+ return cross::cast(u);
+ #else
+ // borland 5.51 chokes here so we can't use it
+ // note: if remove_pointer isn't function for these types
+ // cross casting will be selected this will work but will
+ // not be the most efficient method. This will conflict with
+ // the original smart_cast motivation.
+ typedef
+ BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ BOOST_DEDUCED_TYPENAME mpl::and_<
+ mpl::not_<is_base_and_derived<
+ BOOST_DEDUCED_TYPENAME remove_pointer<T>::type,
+ U
+ > >,
+ mpl::not_<is_base_and_derived<
+ U,
+ BOOST_DEDUCED_TYPENAME remove_pointer<T>::type
+ > >
+ >,
+ // borland chokes w/o full qualification here
+ mpl::identity<cross>,
+ mpl::identity<linear>
+ >::type typex;
+ return typex::cast(u);
+ #endif
+ }
+ #else
+ template<class U>
+ static T cast(U * u){
+ T tmp = dynamic_cast<T>(u);
+ #ifndef NDEBUG
+ if ( tmp == 0 ) throw std::bad_cast();
+ #endif
+ return tmp;
+ }
+ #endif
+ };
+
+ struct non_polymorphic {
+ template<class U>
+ static T cast(U * u){
+ return static_cast<T>(u);
+ }
+ };
+
+ template<class U>
+ static T cast(U * u){
+ #if defined(__BORLANDC__)
+ return mpl::eval_if<
+ boost::is_polymorphic<U>,
+ mpl::identity<polymorphic>,
+ mpl::identity<non_polymorphic>
+ >::type::cast(u);
+ #else
+ typedef BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ boost::is_polymorphic<U>,
+ mpl::identity<polymorphic>,
+ mpl::identity<non_polymorphic>
+ >::type typex;
+ return typex::cast(u);
+ #endif
+ }
+
+ };
+
+ template<class TPtr>
+ struct void_pointer {
+ template<class UPtr>
+ static TPtr cast(UPtr uptr){
+ return static_cast<TPtr>(uptr);
+ }
+ };
+
+ template<class T>
+ struct error {
+ // if we get here, its because we are using one argument in the
+ // cast on a system which doesn't support partial template
+ // specialization
+ template<class U>
+ static T cast(U u){
+ BOOST_STATIC_ASSERT(sizeof(T)==0);
+ return * static_cast<T *>(NULL);
+ }
+ };
+
+} // smart_cast_impl
+
+// this implements:
+// smart_cast<Target *, Source *>(Source * s)
+// smart_cast<Target &, Source &>(s)
+// note that it will fail with
+// smart_cast<Target &>(s)
+template<class T, class U>
+T smart_cast(U u) {
+ typedef
+ BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ BOOST_DEDUCED_TYPENAME mpl::or_<
+ boost::is_same<void *, U>,
+ boost::is_same<void *, T>,
+ boost::is_same<const void *, U>,
+ boost::is_same<const void *, T>
+ >,
+ mpl::identity<smart_cast_impl::void_pointer<T> >,
+ // else
+ BOOST_DEDUCED_TYPENAME mpl::eval_if<boost::is_pointer<U>,
+ mpl::identity<smart_cast_impl::pointer<T> >,
+ // else
+ BOOST_DEDUCED_TYPENAME mpl::eval_if<boost::is_reference<U>,
+ mpl::identity<smart_cast_impl::reference<T> >,
+ // else
+ mpl::identity<smart_cast_impl::error<T>
+ >
+ >
+ >
+ >::type typex;
+ return typex::cast(u);
+}
+
+// this implements:
+// smart_cast_reference<Target &>(Source & s)
+template<class T, class U>
+T smart_cast_reference(U & u) {
+ return smart_cast_impl::reference<T>::cast(u);
+}
+
+} // namespace boost
+
+#endif // BOOST_SMART_CAST_HPP
diff --git a/boost/boost/smart_ptr.hpp b/boost/boost/smart_ptr.hpp
new file mode 100644
index 00000000000..98e08948afd
--- /dev/null
+++ b/boost/boost/smart_ptr.hpp
@@ -0,0 +1,25 @@
+//
+// smart_ptr.hpp
+//
+// For convenience, this header includes the rest of the smart
+// pointer library headers.
+//
+// Copyright (c) 2003 Peter Dimov 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)
+//
+// http://www.boost.org/libs/smart_ptr/smart_ptr.htm
+//
+
+#include <boost/config.hpp>
+
+#include <boost/scoped_ptr.hpp>
+#include <boost/scoped_array.hpp>
+#include <boost/shared_ptr.hpp>
+#include <boost/shared_array.hpp>
+
+#if !defined(BOOST_NO_MEMBER_TEMPLATES) || defined(BOOST_MSVC6_MEMBER_TEMPLATES)
+# include <boost/weak_ptr.hpp>
+# include <boost/intrusive_ptr.hpp>
+# include <boost/enable_shared_from_this.hpp>
+#endif
diff --git a/boost/boost/spirit.hpp b/boost/boost/spirit.hpp
new file mode 100644
index 00000000000..cae9ad15521
--- /dev/null
+++ b/boost/boost/spirit.hpp
@@ -0,0 +1,72 @@
+/*=============================================================================
+ Copyright (c) 1998-2003 Joel de Guzman
+ Copyright (c) 2001-2003 Daniel Nuffer
+ Copyright (c) 2001-2003 Hartmut Kaiser
+ Copyright (c) 2002-2003 Martin Wille
+ Copyright (c) 2002 Juan Carlos Arevalo-Baeza
+ Copyright (c) 2002 Raghavendra Satish
+ Copyright (c) 2002 Jeff Westfahl
+ Copyright (c) 2001 Bruce Florman
+ Copyright (c) 2003 Giovanni Bajo
+ Copyright (c) 2003 Vaclav Vesely
+ Copyright (c) 2003 Jonathan de Halleux
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(SPIRIT_HPP)
+#define SPIRIT_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// If BOOST_SPIRIT_DEBUG is defined, the following header includes the
+// Spirit.Debug layer, otherwise the non-debug Spirit.Core is included.
+//
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/core.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Spirit.Meta
+//
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/meta.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Spirit.ErrorHandling
+//
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/error_handling.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Spirit.Iterators
+//
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/iterator.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Spirit.Symbols
+//
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/symbols.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Spirit.Utilities
+//
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/utility.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Spirit.Attributes
+//
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/attribute.hpp>
+
+#endif // !defined(SPIRIT_HPP)
diff --git a/boost/boost/spirit/actor.hpp b/boost/boost/spirit/actor.hpp
new file mode 100644
index 00000000000..57b1044404f
--- /dev/null
+++ b/boost/boost/spirit/actor.hpp
@@ -0,0 +1,114 @@
+/*=============================================================================
+ Copyright (c) 2003 Jonathan de Halleux (dehalleux@pelikhan.com)
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_ACTOR_HPP
+#define BOOST_SPIRIT_ACTOR_HPP
+
+#include <boost/spirit/version.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Actors documentation and convention
+//
+// Actors
+//
+// Actors are predefined semantic action functors. They are used to do an
+// action on the parse result if the parser has had a successful match. An
+// example of actor is the append_actor described in the Spirit
+// documentation.
+//
+// The action takes place through a call to the () operator: single argument
+// () operator call for character parsers and two argument (first,last) call
+// for phrase parsers. Actors should implement at least one of the two ()
+// operator.
+//
+// Actor instances are not created direcly since they usually involve a
+// number of template parameters. Instead generator functions ("helper
+// functions") are provided to generate actors according to their arguments.
+// All helper functions have the "_a" suffix. For example, append_actor is
+// created using the append_a function.
+//
+// Policy holder actors and policy actions
+//
+// A lot of actors need to store reference to one or more objects. For
+// example, actions on container need to store a reference to the container.
+// Therefore, this kind of actor have been broken down into
+//
+// - a action policy that does the action (act method),
+// - a policy holder actor that stores the references and feeds the act
+// method.
+//
+// Policy holder actors
+//
+// Policy holder have the following naming convention:
+// <member>_ >> *<member> >> !value >> actor
+// where member are the policy stored member, they can be of type:
+//
+// - ref, a reference,
+// - const_ref, a const reference,
+// - value, by value,
+// - empty, no stored members
+// - !value states if the policy uses the parse result or not.
+//
+// The available policy holder are enumerated below:
+//
+// - empty_actor, nothing stored, feeds parse result
+// - value_actor, 1 object stored by value, feeds value
+// - ref_actor, 1 reference stored, feeds ref
+// - ref_value_actor, 1 reference stored, feeds ref and parse result
+//
+// Doc. convention
+//
+// - ref is a reference to an object stored in a policy holder actor,
+// - value_ref,value1_ref, value2_ref are a const reference stored in a
+// policy holder actor,
+// - value is the parse result in the single argument () operator,
+// - first,last are the parse result in the two argument () operator
+//
+// Actors (generator functions) and quick description
+//
+// - assign_a(ref) assign parse result to ref
+// - assign_a(ref, value_ref) assign value_ref to ref
+// - increment_a(ref) increment ref
+// - decrement_a(ref) decrement ref
+// - push_back_a(ref) push back the parse result in ref
+// - push_back_a(ref, value_ref) push back value_ref in ref
+// - push_front_a(ref) push front the parse result in ref
+// - push_front_a(ref, value_ref) push front value_ref in ref
+// - insert_key_a(ref,value_ref) insert value_ref in ref using the
+// parse result as key
+// - insert_at_a(ref, key_ref) insert the parse result in ref at key_ref
+// - insert_at_a(ref, key_ref insert value_ref in ref at key_ref
+// , value_ref)
+// - assign_key_a(ref, value_ref) assign value_ref in ref using the
+// parse result as key
+// - erase_a(ref, key) erase data at key from ref
+// - clear_a(ref) clears ref
+// - swap_a(aref, bref) swaps aref and bref
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#include <boost/spirit/actor/ref_actor.hpp>
+#include <boost/spirit/actor/ref_value_actor.hpp>
+#include <boost/spirit/actor/ref_const_ref_actor.hpp>
+#include <boost/spirit/actor/ref_const_ref_value_actor.hpp>
+#include <boost/spirit/actor/ref_const_ref_const_ref_a.hpp>
+
+#include <boost/spirit/actor/assign_actor.hpp>
+#include <boost/spirit/actor/clear_actor.hpp>
+#include <boost/spirit/actor/increment_actor.hpp>
+#include <boost/spirit/actor/decrement_actor.hpp>
+#include <boost/spirit/actor/push_back_actor.hpp>
+#include <boost/spirit/actor/push_front_actor.hpp>
+#include <boost/spirit/actor/erase_actor.hpp>
+#include <boost/spirit/actor/insert_key_actor.hpp>
+#include <boost/spirit/actor/insert_at_actor.hpp>
+#include <boost/spirit/actor/assign_key_actor.hpp>
+#include <boost/spirit/actor/swap_actor.hpp>
+
+#endif
diff --git a/boost/boost/spirit/actor/assign_actor.hpp b/boost/boost/spirit/actor/assign_actor.hpp
new file mode 100644
index 00000000000..6eb58c9e20b
--- /dev/null
+++ b/boost/boost/spirit/actor/assign_actor.hpp
@@ -0,0 +1,96 @@
+/*=============================================================================
+ Copyright (c) 2003 Jonathan de Halleux (dehalleux@pelikhan.com)
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_ACTOR_ASSIGN_ACTOR_HPP
+#define BOOST_SPIRIT_ACTOR_ASSIGN_ACTOR_HPP
+
+#include <boost/spirit/actor/ref_value_actor.hpp>
+#include <boost/spirit/actor/ref_const_ref_actor.hpp>
+
+namespace boost { namespace spirit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Summary:
+ // A semantic action policy that applies the assignement operator.
+ // (This doc uses convention available in actors.hpp)
+ //
+ // Actions (what it does):
+ // ref = value;
+ // ref = T(first,last);
+ // ref = value_ref;
+ //
+ // Policy name:
+ // assign_action
+ //
+ // Policy holder, corresponding helper method:
+ // ref_value_actor, assign_a( ref );
+ // ref_const_ref_actor, assign_a( ref, value_ref );
+ //
+ // () operators: both
+ //
+ // See also ref_value_actor and ref_const_ref_actor for more details.
+ ///////////////////////////////////////////////////////////////////////////
+ struct assign_action
+ {
+ template<
+ typename T,
+ typename ValueT
+ >
+ void act(T& ref_, ValueT const& value_) const
+ {
+ ref_ = value_;
+ }
+ template<
+ typename T,
+ typename IteratorT
+ >
+ void act(
+ T& ref_,
+ IteratorT const& first_,
+ IteratorT const& last_
+ ) const
+ {
+ typedef T value_type;
+#ifndef BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS
+ value_type value(first_,last_);
+#else
+ value_type value;
+ std::copy(first_, last_, std::inserter(value, value.end()));
+#endif
+ ref_ = value;
+ }
+ };
+
+ // Deprecated. Please use assign_a
+ template<typename T>
+ inline ref_value_actor<T,assign_action> assign(T& ref_)
+ {
+ return ref_value_actor<T,assign_action>(ref_);
+ }
+
+ template<typename T>
+ inline ref_value_actor<T,assign_action> assign_a(T& ref_)
+ {
+ return ref_value_actor<T,assign_action>(ref_);
+ }
+
+ template<
+ typename T,
+ typename ValueT
+ >
+ inline ref_const_ref_actor<T,ValueT,assign_action> assign_a(
+ T& ref_,
+ ValueT const& value_
+ )
+ {
+ return ref_const_ref_actor<T,ValueT,assign_action>(ref_,value_);
+ }
+
+}}
+
+#endif
diff --git a/boost/boost/spirit/actor/assign_key_actor.hpp b/boost/boost/spirit/actor/assign_key_actor.hpp
new file mode 100644
index 00000000000..8122400cd51
--- /dev/null
+++ b/boost/boost/spirit/actor/assign_key_actor.hpp
@@ -0,0 +1,92 @@
+/*=============================================================================
+ Copyright (c) 2003 Jonathan de Halleux (dehalleux@pelikhan.com)
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_ACTOR_ASSIGN_KEY_ACTOR_HPP
+#define BOOST_SPIRIT_ACTOR_ASSIGN_KEY_ACTOR_HPP
+
+#include <boost/spirit/actor/ref_const_ref_value_actor.hpp>
+#include <boost/spirit/actor/ref_const_ref_const_ref_a.hpp>
+
+namespace boost { namespace spirit {
+
+ struct assign_key_action
+ {
+ template<
+ typename T,
+ typename ValueT,
+ typename KeyT
+ >
+ void act(T& ref_, ValueT const& value_, KeyT const& key_) const
+ {
+ ref_[ key_ ] = value_;
+ }
+
+ template<
+ typename T,
+ typename ValueT,
+ typename IteratorT
+ >
+ void act(
+ T& ref_,
+ ValueT const& value_,
+ IteratorT const& first_,
+ IteratorT const& last_
+ ) const
+ {
+ typedef typename T::key_type key_type;
+ key_type key(first_,last_);
+
+ ref_[key] = value_;
+ }
+ };
+
+ template<
+ typename T,
+ typename ValueT
+ >
+ inline ref_const_ref_value_actor<T,ValueT,assign_key_action>
+ assign_key_a(T& ref_, ValueT const& value_)
+ {
+ return ref_const_ref_value_actor<T,ValueT,assign_key_action>(
+ ref_,
+ value_
+ );
+ }
+
+ template<
+ typename T,
+ typename ValueT,
+ typename KeyT
+ >
+ inline ref_const_ref_const_ref_actor<
+ T,
+ ValueT,
+ KeyT,
+ assign_key_action
+ >
+ assign_key_a(
+ T& ref_,
+ ValueT const& value_,
+ KeyT const& key_
+ )
+ {
+ return ref_const_ref_const_ref_actor<
+ T,
+ ValueT,
+ KeyT,
+ assign_key_action
+ >(
+ ref_,
+ value_,
+ key_
+ );
+ }
+
+}}
+
+#endif
diff --git a/boost/boost/spirit/actor/clear_actor.hpp b/boost/boost/spirit/actor/clear_actor.hpp
new file mode 100644
index 00000000000..58c971a1943
--- /dev/null
+++ b/boost/boost/spirit/actor/clear_actor.hpp
@@ -0,0 +1,58 @@
+/*=============================================================================
+ Copyright (c) 2003 Jonathan de Halleux (dehalleux@pelikhan.com)
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_ACTOR_CLEAR_ACTOR_HPP
+#define BOOST_SPIRIT_ACTOR_CLEAR_ACTOR_HPP
+
+#include <boost/spirit/actor/ref_actor.hpp>
+
+namespace boost { namespace spirit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Summary:
+ // A semantic action policy that calls clear method.
+ // (This doc uses convention available in actors.hpp)
+ //
+ // Actions (what it does):
+ // ref.clear();
+ //
+ // Policy name:
+ // clear_action
+ //
+ // Policy holder, corresponding helper method:
+ // ref_actor, clear_a( ref );
+ //
+ // () operators: both.
+ //
+ // See also ref_actor for more details.
+ ///////////////////////////////////////////////////////////////////////////
+ struct clear_action
+ {
+ template<
+ typename T
+ >
+ void act(T& ref_) const
+ {
+ ref_.clear();
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ // helper method that creates a and_assign_actor.
+ ///////////////////////////////////////////////////////////////////////////
+ template<typename T>
+ inline ref_actor<T,clear_action> clear_a(T& ref_)
+ {
+ return ref_actor<T,clear_action>(ref_);
+ }
+
+
+}}
+
+#endif
+
diff --git a/boost/boost/spirit/actor/decrement_actor.hpp b/boost/boost/spirit/actor/decrement_actor.hpp
new file mode 100644
index 00000000000..6198ef5f97d
--- /dev/null
+++ b/boost/boost/spirit/actor/decrement_actor.hpp
@@ -0,0 +1,56 @@
+/*=============================================================================
+ Copyright (c) 2003 Jonathan de Halleux (dehalleux@pelikhan.com)
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_ACTOR_DECREMENT_ACTOR_HPP
+#define BOOST_SPIRIT_ACTOR_DECREMENT_ACTOR_HPP
+
+#include <boost/spirit/actor/ref_actor.hpp>
+
+namespace boost { namespace spirit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Summary:
+ // A semantic action policy that calls the -- operator on a reference.
+ // (This doc uses convention available in actors.hpp)
+ //
+ // Actions:
+ // --ref;
+ //
+ // Policy name:
+ // decrement_action
+ //
+ // Policy holder, corresponding helper method:
+ // ref_actor, decrement_a( ref );
+ //
+ // () operators: both.
+ //
+ // See also ref_actor for more details.
+ ///////////////////////////////////////////////////////////////////////////
+ struct decrement_action
+ {
+ template<
+ typename T
+ >
+ void act(T& ref_) const
+ {
+ --ref_;
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ // helper method that creates a and_assign_actor.
+ ///////////////////////////////////////////////////////////////////////////
+ template<typename T>
+ inline ref_actor<T,decrement_action> decrement_a(T& ref_)
+ {
+ return ref_actor<T,decrement_action>(ref_);
+ }
+
+}}
+
+#endif
diff --git a/boost/boost/spirit/actor/erase_actor.hpp b/boost/boost/spirit/actor/erase_actor.hpp
new file mode 100644
index 00000000000..19595dac3ed
--- /dev/null
+++ b/boost/boost/spirit/actor/erase_actor.hpp
@@ -0,0 +1,85 @@
+/*=============================================================================
+ Copyright (c) 2003 Jonathan de Halleux (dehalleux@pelikhan.com)
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_ACTOR_ERASE_ACTOR_HPP
+#define BOOST_SPIRIT_ACTOR_ERASE_ACTOR_HPP
+
+#include <boost/spirit/actor/ref_value_actor.hpp>
+#include <boost/spirit/actor/ref_const_ref_actor.hpp>
+
+namespace boost { namespace spirit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Summary:
+ // A semantic action policy that calss the erase method.
+ // (This doc uses convention available in actors.hpp)
+ //
+ // Actions (what it does):
+ // ref.erase( value );
+ // ref.erase( T::key_type(first,last) );
+ // ref.erase( key_ref );
+ //
+ // Policy name:
+ // erase_action
+ //
+ // Policy holder, corresponding helper method:
+ // ref_value_actor, erase_a( ref );
+ // ref_const_ref_actor, erase_a( ref, key_ref );
+ //
+ // () operators: both
+ //
+ // See also ref_value_actor and ref_const_ref_actor for more details.
+ ///////////////////////////////////////////////////////////////////////////
+ struct erase_action
+ {
+ template<
+ typename T,
+ typename KeyT
+ >
+ void act(T& ref_, KeyT const& key_) const
+ {
+ ref_.erase(key_);
+ }
+ template<
+ typename T,
+ typename IteratorT
+ >
+ void act(
+ T& ref_,
+ IteratorT const& first_,
+ IteratorT const& last_
+ ) const
+ {
+ typedef typename T::key_type key_type;
+ key_type key(first_,last_);
+
+ ref_.erase(key);
+ }
+ };
+
+ template<typename T>
+ inline ref_value_actor<T,erase_action> erase_a(T& ref_)
+ {
+ return ref_value_actor<T,erase_action>(ref_);
+ }
+
+ template<
+ typename T,
+ typename KeyT
+ >
+ inline ref_const_ref_actor<T,KeyT,erase_action> erase_a(
+ T& ref_,
+ KeyT const& key_
+ )
+ {
+ return ref_const_ref_actor<T,KeyT,erase_action>(ref_,key_);
+ }
+
+}}
+
+#endif
diff --git a/boost/boost/spirit/actor/increment_actor.hpp b/boost/boost/spirit/actor/increment_actor.hpp
new file mode 100644
index 00000000000..48e1cb47956
--- /dev/null
+++ b/boost/boost/spirit/actor/increment_actor.hpp
@@ -0,0 +1,56 @@
+/*=============================================================================
+ Copyright (c) 2003 Jonathan de Halleux (dehalleux@pelikhan.com)
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_ACTOR_INCREMENT_ACTOR_HPP
+#define BOOST_SPIRIT_ACTOR_INCREMENT_ACTOR_HPP
+
+#include <boost/spirit/actor/ref_actor.hpp>
+
+namespace boost { namespace spirit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Summary:
+ // A semantic action policy that calls the ++ operator on a reference.
+ // (This doc uses convention available in actors.hpp)
+ //
+ // Actions:
+ // ++ref;
+ //
+ // Policy name:
+ // increment_action
+ //
+ // Policy holder, corresponding helper method:
+ // ref_actor, increment_a( ref );
+ //
+ // () operators: both.
+ //
+ // See also ref_actor for more details.
+ ///////////////////////////////////////////////////////////////////////////
+ struct increment_action
+ {
+ template<
+ typename T
+ >
+ void act(T& ref_) const
+ {
+ ++ref_;
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ // helper method that creates a increment_actor.
+ ///////////////////////////////////////////////////////////////////////////
+ template<typename T>
+ inline ref_actor<T,increment_action> increment_a(T& ref_)
+ {
+ return ref_actor<T,increment_action>(ref_);
+ }
+
+}}
+
+#endif
diff --git a/boost/boost/spirit/actor/insert_at_actor.hpp b/boost/boost/spirit/actor/insert_at_actor.hpp
new file mode 100644
index 00000000000..0690fdd2d2b
--- /dev/null
+++ b/boost/boost/spirit/actor/insert_at_actor.hpp
@@ -0,0 +1,117 @@
+/*=============================================================================
+ Copyright (c) 2003 Jonathan de Halleux (dehalleux@pelikhan.com)
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_ACTOR_INSERT_AT_ACTOR_HPP
+#define BOOST_SPIRIT_ACTOR_INSERT_AT_ACTOR_HPP
+
+#include <boost/spirit/actor/ref_const_ref_value_actor.hpp>
+#include <boost/spirit/actor/ref_const_ref_const_ref_a.hpp>
+
+namespace boost { namespace spirit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Summary:
+ // A semantic action policy that insert data into an associative
+ // container using a const reference to a key.
+ // (This doc uses convention available in actors.hpp)
+ //
+ // Actions (what it does):
+ // ref.insert( T::value_type(key_ref,value) );
+ // ref.insert( T::value_type(key_ref, T::mapped_type(first,last)));;
+ // ref.insert( T::value_type(key_ref,value_ref) );
+ //
+ // Policy name:
+ // insert_at_action
+ //
+ // Policy holder, corresponding helper method:
+ // ref_const_ref_value_actor, insert_at_a( ref, key_ref );
+ // ref_const_ref_const_ref_actor, insert_a( ref, key_ref, value_ref );
+ //
+ // () operators: both
+ //
+ // See also ref_const_ref_value_actor and ref_const_ref_const_ref_actor
+ // for more details.
+ ///////////////////////////////////////////////////////////////////////////
+ struct insert_at_action
+ {
+ template<
+ typename T,
+ typename ReferentT,
+ typename ValueT
+ >
+ void act(
+ T& ref_,
+ ReferentT const& key_,
+ ValueT const& value_
+ ) const
+ {
+ typedef typename T::value_type value_type;
+ ref_.insert( value_type(key_, value_) );
+ }
+
+ template<
+ typename T,
+ typename ReferentT,
+ typename IteratorT
+ >
+ void act(
+ T& ref_,
+ ReferentT const& key_,
+ IteratorT const& first_,
+ IteratorT const& last_
+ ) const
+ {
+ typedef typename T::mapped_type mapped_type;
+ typedef typename T::value_type value_type;
+
+ mapped_type value(first_,last_);
+ value_type key_value(key_, value);
+ ref_.insert( key_value );
+ }
+ };
+
+ template<
+ typename T,
+ typename ReferentT
+ >
+ inline ref_const_ref_value_actor<T,ReferentT,insert_at_action>
+ insert_at_a(
+ T& ref_,
+ ReferentT const& key_
+ )
+ {
+ return ref_const_ref_value_actor<
+ T,
+ ReferentT,
+ insert_at_action
+ >(ref_,key_);
+ }
+
+ template<
+ typename T,
+ typename ReferentT,
+ typename ValueT
+ >
+ inline ref_const_ref_const_ref_actor<T,ReferentT,ValueT,insert_at_action>
+ insert_at_a(
+ T& ref_,
+ ReferentT const& key_,
+ ValueT const& value_
+ )
+ {
+ return ref_const_ref_const_ref_actor<
+ T,
+ ReferentT,
+ ValueT,
+ insert_at_action
+ >(ref_,key_,value_);
+ }
+
+}}
+
+#endif
diff --git a/boost/boost/spirit/actor/insert_key_actor.hpp b/boost/boost/spirit/actor/insert_key_actor.hpp
new file mode 100644
index 00000000000..1448c4f25c4
--- /dev/null
+++ b/boost/boost/spirit/actor/insert_key_actor.hpp
@@ -0,0 +1,93 @@
+/*=============================================================================
+ Copyright (c) 2003 Jonathan de Halleux (dehalleux@pelikhan.com)
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_ACTOR_INSERT_KEY_ACTOR_HPP
+#define BOOST_SPIRIT_ACTOR_INSERT_KEY_ACTOR_HPP
+
+#include <boost/spirit/actor/ref_const_ref_value_actor.hpp>
+
+namespace boost { namespace spirit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Summary:
+ // A semantic action policy that insert data into an associative
+ // container using a const reference to data.
+ // (This doc uses convention available in actors.hpp)
+ //
+ // Actions (what it does):
+ // ref.insert( T::value_type(value,value_ref) );
+ // ref.insert( T::value_type(T::key_type(first,last), value_ref));;
+ //
+ // Policy name:
+ // insert_key_action
+ //
+ // Policy holder, corresponding helper method:
+ // ref_const_ref_value_actor, insert_key_a( ref, value_ref );
+ //
+ // () operators: both
+ //
+ // See also ref_const_ref_value_actor for more details.
+ ///////////////////////////////////////////////////////////////////////////
+ struct insert_key_action
+ {
+ template<
+ typename T,
+ typename ValueT,
+ typename ReferentT
+ >
+ void act(
+ T& ref_,
+ ValueT const& value_,
+ ReferentT const& key_
+ ) const
+ {
+ typedef typename T::value_type value_type;
+ value_type key_value(key_, value_);
+ ref_.insert( key_value );
+ }
+
+ template<
+ typename T,
+ typename ValueT,
+ typename IteratorT
+ >
+ void act(
+ T& ref_,
+ ValueT const& value_,
+ IteratorT const& first_,
+ IteratorT const& last_
+ ) const
+ {
+ typedef typename T::key_type key_type;
+ typedef typename T::value_type value_type;
+
+ key_type key(first_,last_);
+ value_type key_value(key, value_);
+ ref_.insert( key_value );
+ }
+ };
+
+ template<
+ typename T,
+ typename ValueT
+ >
+ inline ref_const_ref_value_actor<T,ValueT,insert_key_action> insert_key_a(
+ T& ref_,
+ ValueT const& value_
+ )
+ {
+ return ref_const_ref_value_actor<
+ T,
+ ValueT,
+ insert_key_action
+ >(ref_,value_);
+ }
+
+}}
+
+#endif
diff --git a/boost/boost/spirit/actor/push_back_actor.hpp b/boost/boost/spirit/actor/push_back_actor.hpp
new file mode 100644
index 00000000000..6fbd24f4644
--- /dev/null
+++ b/boost/boost/spirit/actor/push_back_actor.hpp
@@ -0,0 +1,97 @@
+/*=============================================================================
+ Copyright (c) 2003 Jonathan de Halleux (dehalleux@pelikhan.com)
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_ACTOR_PUSH_BACK_ACTOR_HPP
+#define BOOST_SPIRIT_ACTOR_PUSH_BACK_ACTOR_HPP
+
+#include <boost/spirit/actor/ref_value_actor.hpp>
+#include <boost/spirit/actor/ref_const_ref_actor.hpp>
+
+namespace boost { namespace spirit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Summary:
+ //
+ // A semantic action policy that appends a value to the back of a
+ // container.
+ // (This doc uses convention available in actors.hpp)
+ //
+ // Actions (what it does and what ref, value_ref must support):
+ // ref.push_back( value );
+ // ref.push_back( T::value_type(first,last) );
+ // ref.push_back( value_ref );
+ //
+ // Policy name:
+ // push_back_action
+ //
+ // Policy holder, corresponding helper method:
+ // ref_value_actor, push_back_a( ref );
+ // ref_const_ref_actor, push_back_a( ref, value_ref );
+ //
+ // () operators: both
+ //
+ // See also ref_value_actor and ref_const_ref_actor for more details.
+ ///////////////////////////////////////////////////////////////////////////
+ struct push_back_action
+ {
+ template<
+ typename T,
+ typename ValueT
+ >
+ void act(T& ref_, ValueT const& value_) const
+ {
+ ref_.push_back( value_ );
+ }
+ template<
+ typename T,
+ typename IteratorT
+ >
+ void act(
+ T& ref_,
+ IteratorT const& first_,
+ IteratorT const& last_
+ ) const
+ {
+ typedef typename T::value_type value_type;
+ value_type value(first_,last_);
+
+ ref_.push_back( value );
+ }
+ };
+
+// Deprecated interface. Use push_back_a
+ template<typename T>
+ inline ref_value_actor<T,push_back_action>
+ append(T& ref_)
+ {
+ return ref_value_actor<T,push_back_action>(ref_);
+ }
+
+ template<typename T>
+ inline ref_value_actor<T,push_back_action>
+ push_back_a(T& ref_)
+ {
+ return ref_value_actor<T,push_back_action>(ref_);
+ }
+
+ template<
+ typename T,
+ typename ValueT
+ >
+ inline ref_const_ref_actor<T,ValueT,push_back_action>
+ push_back_a(
+ T& ref_,
+ ValueT const& value_
+ )
+ {
+ return ref_const_ref_actor<T,ValueT,push_back_action>(ref_,value_);
+ }
+
+}}
+
+#endif
diff --git a/boost/boost/spirit/actor/push_front_actor.hpp b/boost/boost/spirit/actor/push_front_actor.hpp
new file mode 100644
index 00000000000..9ea2204bd3a
--- /dev/null
+++ b/boost/boost/spirit/actor/push_front_actor.hpp
@@ -0,0 +1,87 @@
+/*=============================================================================
+ Copyright (c) 2003 Jonathan de Halleux (dehalleux@pelikhan.com)
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_ACTOR_PUSH_FRONT_ACTOR_HPP
+#define BOOST_SPIRIT_ACTOR_PUSH_FRONT_ACTOR_HPP
+
+#include <boost/spirit/actor/ref_value_actor.hpp>
+#include <boost/spirit/actor/ref_const_ref_actor.hpp>
+
+namespace boost { namespace spirit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Summary:
+ //
+ // A semantic action policy that appends a value to the front of a
+ // container.
+ // (This doc uses convention available in actors.hpp)
+ //
+ // Actions (what it does and what ref, value_ref must support):
+ // ref.push_front( value );
+ // ref.push_front( T::value_type(first,last) );
+ // ref.push_front( value_ref );
+ //
+ // Policy name:
+ // push_front_action
+ //
+ // Policy holder, corresponding helper method:
+ // ref_value_actor, push_front_a( ref );
+ // ref_const_ref_actor, push_front_a( ref, value_ref );
+ //
+ // () operators: both
+ //
+ // See also ref_value_actor and ref_const_ref_actor for more details.
+ ///////////////////////////////////////////////////////////////////////////
+ struct push_front_action
+ {
+ template<
+ typename T,
+ typename ValueT
+ >
+ void act(T& ref_, ValueT const& value_) const
+ {
+ ref_.push_front( value_ );
+ }
+ template<
+ typename T,
+ typename IteratorT
+ >
+ void act(
+ T& ref_,
+ IteratorT const& first_,
+ IteratorT const& last_
+ ) const
+ {
+ typedef typename T::value_type value_type;
+ value_type value(first_,last_);
+
+ ref_.push_front( value );
+ }
+ };
+
+ template<typename T>
+ inline ref_value_actor<T,push_front_action> push_front_a(T& ref_)
+ {
+ return ref_value_actor<T,push_front_action>(ref_);
+ }
+
+ template<
+ typename T,
+ typename ValueT
+ >
+ inline ref_const_ref_actor<T,ValueT,push_front_action> push_front_a(
+ T& ref_,
+ ValueT const& value_
+ )
+ {
+ return ref_const_ref_actor<T,ValueT,push_front_action>(ref_,value_);
+ }
+
+}}
+
+#endif
diff --git a/boost/boost/spirit/actor/ref_actor.hpp b/boost/boost/spirit/actor/ref_actor.hpp
new file mode 100644
index 00000000000..4023518ef14
--- /dev/null
+++ b/boost/boost/spirit/actor/ref_actor.hpp
@@ -0,0 +1,65 @@
+/*=============================================================================
+ Copyright (c) 2003 Jonathan de Halleux (dehalleux@pelikhan.com)
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_ACTOR_REF_ACTOR_HPP
+#define BOOST_SPIRIT_ACTOR_REF_ACTOR_HPP
+
+namespace boost { namespace spirit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Summary:
+ // A semantic action policy holder. This holder stores a reference to ref,
+ // act methods are fead with this reference. The parse result is not used
+ // by this holder.
+ //
+ // (This doc uses convention available in actors.hpp)
+ //
+ // Constructor:
+ // ...(T& ref_);
+ // where ref_ is stored.
+ //
+ // Action calls:
+ // act(ref);
+ //
+ // () operators: both
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template<
+ typename T,
+ typename ActionT
+ >
+ class ref_actor : public ActionT
+ {
+ private:
+ T& ref;
+ public:
+ explicit
+ ref_actor(T& ref_)
+ : ref(ref_){}
+
+
+ template<typename T2>
+ void operator()(T2 const& /*val*/) const
+ {
+ this->act(ref); // defined in ActionT
+ }
+
+
+ template<typename IteratorT>
+ void operator()(
+ IteratorT const& /*first*/,
+ IteratorT const& /*last*/
+ ) const
+ {
+ this->act(ref); // defined in ActionT
+ }
+ };
+
+}}
+
+#endif
diff --git a/boost/boost/spirit/actor/ref_const_ref_actor.hpp b/boost/boost/spirit/actor/ref_const_ref_actor.hpp
new file mode 100644
index 00000000000..3691606810e
--- /dev/null
+++ b/boost/boost/spirit/actor/ref_const_ref_actor.hpp
@@ -0,0 +1,73 @@
+/*=============================================================================
+ Copyright (c) 2003 Jonathan de Halleux (dehalleux@pelikhan.com)
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_ACTOR_REF_CONST_REF_ACTOR_HPP
+#define BOOST_SPIRIT_ACTOR_REF_CONST_REF_ACTOR_HPP
+
+namespace boost { namespace spirit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Summary:
+ // A semantic action policy holder. This holder stores a reference to ref
+ // and a const reference to value_ref.
+ // act methods are feed with ref and value_ref. The parse result is
+ // not used by this holder.
+ //
+ // (This doc uses convention available in actors.hpp)
+ //
+ // Constructor:
+ // ...(T& ref_, ValueT const& value_ref_);
+ // where ref_ and value_ref_ are stored in the holder.
+ //
+ // Action calls:
+ // act(ref, value_ref);
+ //
+ // () operators: both
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template<
+ typename T,
+ typename ValueT,
+ typename ActionT
+ >
+ class ref_const_ref_actor : public ActionT
+ {
+ private:
+ T& ref;
+ ValueT const& value_ref;
+ public:
+ ref_const_ref_actor(
+ T& ref_,
+ ValueT const& value_ref_
+ )
+ :
+ ref(ref_),
+ value_ref(value_ref_)
+ {}
+
+
+ template<typename T2>
+ void operator()(T2 const& /*val*/) const
+ {
+ this->act(ref,value_ref); // defined in ActionT
+ }
+
+
+ template<typename IteratorT>
+ void operator()(
+ IteratorT const& /*first*/,
+ IteratorT const& /*last*/
+ ) const
+ {
+ this->act(ref,value_ref); // defined in ActionT
+ }
+ };
+
+}}
+
+#endif
diff --git a/boost/boost/spirit/actor/ref_const_ref_const_ref_a.hpp b/boost/boost/spirit/actor/ref_const_ref_const_ref_a.hpp
new file mode 100644
index 00000000000..2cf1786fc2c
--- /dev/null
+++ b/boost/boost/spirit/actor/ref_const_ref_const_ref_a.hpp
@@ -0,0 +1,82 @@
+/*=============================================================================
+ Copyright (c) 2003 Jonathan de Halleux (dehalleux@pelikhan.com)
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_ACTOR_REF_CONST_REF_CONST_REF_ACTOR_HPP
+#define BOOST_SPIRIT_ACTOR_REF_CONST_REF_CONST_REF_ACTOR_HPP
+
+namespace boost { namespace spirit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Summary:
+ // A semantic action policy holder. This holder stores a reference to ref
+ // , a const reference to value1_ref and a const reference to value2_ref.
+ // Typically, value1_ref is a key and value2_ref is value for associative
+ // container operations.
+ // act methods are feed with ref, value1_ref, value2_ref. The parse result
+ // is not used by this holder.
+ //
+ // (This doc uses convention available in actors.hpp)
+ //
+ // Constructor:
+ // ...(
+ // T& ref_,
+ // Value1T const& value1_ref_,
+ // Value2T const& value2_ref_ );
+ // where ref_, value1_ref and value2_ref_ are stored in the holder.
+ //
+ // Action calls:
+ // act(ref, value1_ref, value2_ref);
+ //
+ // () operators: both
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template<
+ typename T,
+ typename Value1T,
+ typename Value2T,
+ typename ActionT
+ >
+ class ref_const_ref_const_ref_actor : public ActionT
+ {
+ private:
+ T& ref;
+ Value1T const& value1_ref;
+ Value2T const& value2_ref;
+ public:
+ ref_const_ref_const_ref_actor(
+ T& ref_,
+ Value1T const& value1_ref_,
+ Value2T const& value2_ref_
+ )
+ :
+ ref(ref_),
+ value1_ref(value1_ref_),
+ value2_ref(value2_ref_)
+ {}
+
+
+ template<typename T2>
+ void operator()(T2 const& /*val*/) const
+ {
+ this->act(ref,value1_ref,value2_ref); // defined in ActionT
+ }
+
+
+ template<typename IteratorT>
+ void operator()(
+ IteratorT const& /*first*/,
+ IteratorT const& /*last*/
+ ) const
+ {
+ this->act(ref,value1_ref,value2_ref); // defined in ActionT
+ }
+ };
+
+}}
+
+#endif
diff --git a/boost/boost/spirit/actor/ref_const_ref_value_actor.hpp b/boost/boost/spirit/actor/ref_const_ref_value_actor.hpp
new file mode 100644
index 00000000000..54a6a242a05
--- /dev/null
+++ b/boost/boost/spirit/actor/ref_const_ref_value_actor.hpp
@@ -0,0 +1,73 @@
+/*=============================================================================
+ Copyright (c) 2003 Jonathan de Halleux (dehalleux@pelikhan.com)
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_ACTOR_REF_CONST_REF_VALUE_ACTOR_HPP
+#define BOOST_SPIRIT_ACTOR_REF_CONST_REF_VALUE_ACTOR_HPP
+
+namespace boost { namespace spirit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Summary:
+ // A semantic action policy holder. This holder stores a reference to ref
+ // and a const reference to value_ref.
+ // act methods are feed with ref, value_ref and the parse result.
+ //
+ // (This doc uses convention available in actors.hpp)
+ //
+ // Constructor:
+ // ...(T& ref_, ValueT const& value_ref_);
+ // where ref_ and value_ref_ are stored in the holder.
+ //
+ // Action calls:
+ // act(ref, value_ref, value);
+ // act(ref, value_ref, first, last);
+ //
+ // () operators: both
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template<
+ typename T,
+ typename ValueT,
+ typename ActionT
+ >
+ class ref_const_ref_value_actor : public ActionT
+ {
+ private:
+ T& ref;
+ ValueT const& value_ref;
+ public:
+ ref_const_ref_value_actor(
+ T& ref_,
+ ValueT const& value_ref_
+ )
+ :
+ ref(ref_),
+ value_ref(value_ref_)
+ {}
+
+
+ template<typename T2>
+ void operator()(T2 const& val_) const
+ {
+ this->act(ref,value_ref,val_); // defined in ActionT
+ }
+
+
+ template<typename IteratorT>
+ void operator()(
+ IteratorT const& first_,
+ IteratorT const& last_
+ ) const
+ {
+ this->act(ref,value_ref,first_,last_); // defined in ActionT
+ }
+ };
+
+}}
+
+#endif
diff --git a/boost/boost/spirit/actor/ref_value_actor.hpp b/boost/boost/spirit/actor/ref_value_actor.hpp
new file mode 100644
index 00000000000..cd21ab8bcbb
--- /dev/null
+++ b/boost/boost/spirit/actor/ref_value_actor.hpp
@@ -0,0 +1,65 @@
+/*=============================================================================
+ Copyright (c) 2003 Jonathan de Halleux (dehalleux@pelikhan.com)
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_ACTOR_REF_VALUE_ACTOR_HPP
+#define BOOST_SPIRIT_ACTOR_REF_VALUE_ACTOR_HPP
+
+namespace boost { namespace spirit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Summary:
+ // A semantic action policy holder. This holder stores a reference to ref.
+ // act methods are feed with ref and the parse result.
+ //
+ // (This doc uses convention available in actors.hpp)
+ //
+ // Constructor:
+ // ...(T& ref_);
+ // where ref_ is stored.
+ //
+ // Action calls:
+ // act(ref, value);
+ // act(ref, first,last);
+ //
+ // () operators: both
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template<
+ typename T,
+ typename ActionT
+ >
+ class ref_value_actor : public ActionT
+ {
+ private:
+ T& ref;
+ public:
+ explicit
+ ref_value_actor(T& ref_)
+ : ref(ref_){}
+
+
+ template<typename T2>
+ void operator()(T2 const& val_) const
+ {
+ this->act(ref,val_); // defined in ActionT
+ }
+
+
+ template<typename IteratorT>
+ void operator()(
+ IteratorT const& first_,
+ IteratorT const& last_
+ ) const
+ {
+ this->act(ref,first_,last_); // defined in ActionT
+ }
+ };
+
+}}
+
+#endif
diff --git a/boost/boost/spirit/actor/swap_actor.hpp b/boost/boost/spirit/actor/swap_actor.hpp
new file mode 100644
index 00000000000..257d1ca4b7c
--- /dev/null
+++ b/boost/boost/spirit/actor/swap_actor.hpp
@@ -0,0 +1,81 @@
+/*=============================================================================
+ Copyright (c) 2003 Jonathan de Halleux (dehalleux@pelikhan.com)
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_ACTOR_SWAP_ACTOR_HPP
+#define BOOST_SPIRIT_ACTOR_SWAP_ACTOR_HPP
+
+#include <boost/spirit/actor/ref_value_actor.hpp>
+
+namespace boost { namespace spirit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Summary:
+ // A semantic action policy that swaps values.
+ // (This doc uses convention available in actors.hpp)
+ //
+ // Actions (what it does):
+ // ref.swap( value_ref );
+ //
+ // Policy name:
+ // swap_action
+ //
+ // Policy holder, corresponding helper method:
+ // ref_value_actor, swap_a( ref );
+ // ref_const_ref_actor, swap_a( ref, value_ref );
+ //
+ // () operators: both
+ //
+ // See also ref_value_actor and ref_const_ref_actor for more details.
+ ///////////////////////////////////////////////////////////////////////////
+ template<
+ typename T
+ >
+ class swap_actor
+ {
+ private:
+ T& ref;
+ T& swap_ref;
+
+ public:
+ swap_actor(
+ T& ref_,
+ T& swap_ref_)
+ : ref(ref_), swap_ref(swap_ref_)
+ {};
+
+ template<typename T2>
+ void operator()(T2 const& /*val*/) const
+ {
+ ref.swap(swap_ref);
+ }
+
+
+ template<typename IteratorT>
+ void operator()(
+ IteratorT const& /*first*/,
+ IteratorT const& /*last*/
+ ) const
+ {
+ ref.swap(swap_ref);
+ }
+ };
+
+ template<
+ typename T
+ >
+ inline swap_actor<T> swap_a(
+ T& ref_,
+ T& swap_ref_
+ )
+ {
+ return swap_actor<T>(ref_,swap_ref_);
+ }
+
+}}
+
+#endif
diff --git a/boost/boost/spirit/actor/typeof.hpp b/boost/boost/spirit/actor/typeof.hpp
new file mode 100644
index 00000000000..183fb784b70
--- /dev/null
+++ b/boost/boost/spirit/actor/typeof.hpp
@@ -0,0 +1,70 @@
+/*=============================================================================
+ Copyright (c) 2006 Tobias Schwinger
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_ACTOR_TYPEOF_HPP)
+#define BOOST_SPIRIT_ACTOR_TYPEOF_HPP
+
+#include <boost/typeof/typeof.hpp>
+
+namespace boost { namespace spirit {
+
+ template<typename T, typename ActionT> class ref_actor;
+
+ template<typename T, typename ActionT> class ref_value_actor;
+
+ template<typename T, typename ValueT, typename ActionT>
+
+ class ref_const_ref_actor;
+ template<typename T, typename ValueT, typename ActionT>
+
+ class ref_const_ref_value_actor;
+ template<typename T, typename Value1T, typename Value2T, typename ActionT>
+
+ class ref_const_ref_const_ref_actor;
+
+ struct assign_action;
+ struct clear_action;
+ struct increment_action;
+ struct decrement_action;
+ struct push_back_action;
+ struct push_front_action;
+ struct insert_key_action;
+ struct insert_at_action;
+ struct assign_key_action;
+
+ template<typename T> class swap_actor;
+
+}} // namespace boost::spirit
+
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::ref_actor,2)
+#if !defined(BOOST_SPIRIT_CORE_TYPEOF_HPP)
+// this part also lives in the core master header and is deprecated there...
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::ref_value_actor,2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::ref_const_ref_actor,3)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::assign_action)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::push_back_action)
+#endif
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::ref_const_ref_value_actor,3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::ref_const_ref_const_ref_actor,4)
+
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::clear_action)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::increment_action)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::decrement_action)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::push_front_action)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::insert_key_action)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::insert_at_action)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::assign_key_action)
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::swap_actor,1)
+
+#endif
+
diff --git a/boost/boost/spirit/attribute.hpp b/boost/boost/spirit/attribute.hpp
new file mode 100644
index 00000000000..48e9a5dfc55
--- /dev/null
+++ b/boost/boost/spirit/attribute.hpp
@@ -0,0 +1,38 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Joel de Guzman
+ Copyright (c) 2002-2003 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_ATTRIBUTE_MAIN_HPP)
+#define BOOST_SPIRIT_ATTRIBUTE_MAIN_HPP
+
+#include <boost/spirit/version.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Master header for Spirit.Attributes
+//
+///////////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Phoenix predefined maximum limit. This limit defines the maximum
+// number of elements a tuple can hold. This number defaults to 3. The
+// actual maximum is rounded up in multiples of 3. Thus, if this value
+// is 4, the actual limit is 6. The ultimate maximum limit in this
+// implementation is 15.
+//
+///////////////////////////////////////////////////////////////////////////////
+#if !defined(PHOENIX_LIMIT)
+#define PHOENIX_LIMIT 3
+#endif // !defined(PHOENIX_LIMIT)
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/attribute/parametric.hpp>
+#include <boost/spirit/attribute/closure.hpp>
+
+#endif // !defined(BOOST_SPIRIT_ATTRIBUTE_MAIN_HPP)
diff --git a/boost/boost/spirit/attribute/closure.hpp b/boost/boost/spirit/attribute/closure.hpp
new file mode 100644
index 00000000000..0443791364e
--- /dev/null
+++ b/boost/boost/spirit/attribute/closure.hpp
@@ -0,0 +1,1079 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Joel de Guzman
+ Copyright (c) 2002-2003 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_CLOSURE_HPP
+#define BOOST_SPIRIT_CLOSURE_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/core/parser.hpp>
+#include <boost/spirit/core/composite/composite.hpp>
+#include <boost/spirit/core/non_terminal/parser_context.hpp>
+#include <boost/spirit/attribute/parametric.hpp>
+#include <boost/spirit/attribute/closure_context.hpp>
+#include <boost/spirit/attribute/closure_fwd.hpp>
+
+#include <boost/spirit/phoenix/closures.hpp>
+#include <boost/spirit/phoenix/primitives.hpp>
+#include <boost/spirit/phoenix/casts.hpp>
+#include <boost/spirit/phoenix/operators.hpp>
+#include <boost/spirit/phoenix/tuple_helpers.hpp>
+
+#include <boost/static_assert.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Spirit predefined maximum closure limit. This limit defines the maximum
+// number of elements a closure can hold. This number defaults to 3. The
+// actual maximum is rounded up in multiples of 3. Thus, if this value
+// is 4, the actual limit is 6. The ultimate maximum limit in this
+// implementation is 15.
+//
+// It should NOT be greater than PHOENIX_LIMIT!
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#if !defined(BOOST_SPIRIT_CLOSURE_LIMIT)
+#define BOOST_SPIRIT_CLOSURE_LIMIT PHOENIX_LIMIT
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// ensure BOOST_SPIRIT_CLOSURE_LIMIT <= PHOENIX_LIMIT and SPIRIT_CLOSURE_LIMIT <= 15
+//
+///////////////////////////////////////////////////////////////////////////////
+BOOST_STATIC_ASSERT(BOOST_SPIRIT_CLOSURE_LIMIT <= PHOENIX_LIMIT);
+BOOST_STATIC_ASSERT(BOOST_SPIRIT_CLOSURE_LIMIT <= 15);
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // closure_context class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename ClosureT>
+ class closure_context : public parser_context_base
+ {
+ public:
+
+ typedef typename phoenix::tuple_element<0,
+ typename ClosureT::tuple_t>::type attr_t;
+ typedef ClosureT base_t;
+ typedef closure_context_linker<closure_context<ClosureT> >
+ context_linker_t;
+
+ closure_context(ClosureT const& clos)
+ : frame(clos) {}
+
+ ~closure_context() {}
+
+ template <typename ParserT, typename ScannerT>
+ void pre_parse(ParserT const&, ScannerT const&) {}
+
+ template <typename ResultT, typename ParserT, typename ScannerT>
+ ResultT& post_parse(ResultT& hit, ParserT const&, ScannerT const&)
+ { hit.value(frame[phoenix::tuple_index<0>()]); return hit; }
+
+ private:
+
+ phoenix::closure_frame<typename ClosureT::phoenix_closure_t> frame;
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // init_closure_context class
+ //
+ // The init_closure_context class is a special parser context type
+ // which additionally initializes a closure contained in the derived
+ // parser with values from a given tuple. Please note, that this
+ // given tuple does not contain the required values directly, it
+ // contains phoenix::actor objects. These actors have to be
+ // dereferenced to gain the values to be used for initialization
+ // (this is done by the help of the phoenix::convert_actors<>
+ // template).
+ //
+ ///////////////////////////////////////////////////////////////////////////
+
+ template <typename ClosureT>
+ class init_closure_context : public parser_context_base
+ {
+ typedef typename ClosureT::tuple_t tuple_t;
+ typedef typename ClosureT::closure_t closure_t;
+
+ public:
+
+ init_closure_context(ClosureT const& clos)
+ : frame(clos.subject(), phoenix::convert_actors<tuple_t>(clos.init)) {}
+
+ ~init_closure_context() {}
+
+ template <typename ParserT, typename ScannerT>
+ void pre_parse(ParserT const& /*p*/, ScannerT const&) {}
+
+ template <typename ResultT, typename ParserT, typename ScannerT>
+ ResultT& post_parse(ResultT& hit, ParserT const&, ScannerT const&)
+ { hit.value(frame[phoenix::tuple_index<0>()]); return hit; }
+
+ private:
+
+ phoenix::closure_frame<closure_t> frame;
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // init_closure_parser class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename ParserT, typename ActorTupleT>
+ struct init_closure_parser
+ : public unary<ParserT, parser<init_closure_parser<ParserT, ActorTupleT> > >
+ {
+ typedef init_closure_parser<ParserT, ActorTupleT> self_t;
+ typedef unary<ParserT, parser<self_t> > base_t;
+ typedef typename ParserT::phoenix_closure_t closure_t;
+ typedef typename ParserT::tuple_t tuple_t;
+ typedef typename phoenix::tuple_element<0, tuple_t>::type attr_t;
+
+ template <typename ScannerT>
+ struct result
+ {
+ typedef typename match_result<ScannerT, attr_t>::type type;
+ };
+
+ init_closure_parser(ParserT const& p, ActorTupleT const& init_)
+ : base_t(p), init(init_) {}
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse_main(ScannerT const& scan) const
+ {
+ return this->subject().parse_main(scan);
+ }
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ typedef init_closure_context<self_t> init_context_t;
+ typedef parser_scanner_linker<ScannerT> scanner_t;
+ typedef closure_context_linker<init_context_t> context_t;
+ typedef typename parser_result<self_t, ScannerT>::type result_t;
+ BOOST_SPIRIT_CONTEXT_PARSE(
+ scan, *this, scanner_t, context_t, result_t);
+ }
+
+ ActorTupleT init;
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // closure class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <
+ typename DerivedT
+ , typename T0
+ , typename T1
+ , typename T2
+
+ #if BOOST_SPIRIT_CLOSURE_LIMIT > 3
+ , typename T3
+ , typename T4
+ , typename T5
+
+ #if BOOST_SPIRIT_CLOSURE_LIMIT > 6
+ , typename T6
+ , typename T7
+ , typename T8
+
+ #if BOOST_SPIRIT_CLOSURE_LIMIT > 9
+ , typename T9
+ , typename T10
+ , typename T11
+
+ #if BOOST_SPIRIT_CLOSURE_LIMIT > 12
+ , typename T12
+ , typename T13
+ , typename T14
+ #endif
+ #endif
+ #endif
+ #endif
+ >
+ struct closure :
+ public phoenix::closure<
+ T0, T1, T2
+ #if BOOST_SPIRIT_CLOSURE_LIMIT > 3
+ , T3, T4, T5
+ #if BOOST_SPIRIT_CLOSURE_LIMIT > 6
+ , T6, T7, T8
+ #if BOOST_SPIRIT_CLOSURE_LIMIT > 9
+ , T9, T10, T11
+ #if BOOST_SPIRIT_CLOSURE_LIMIT > 12
+ , T12, T13, T14
+ #endif
+ #endif
+ #endif
+ #endif
+ >
+ {
+ typedef phoenix::closure<
+ T0, T1, T2
+ #if BOOST_SPIRIT_CLOSURE_LIMIT > 3
+ , T3, T4, T5
+ #if BOOST_SPIRIT_CLOSURE_LIMIT > 6
+ , T6, T7, T8
+ #if BOOST_SPIRIT_CLOSURE_LIMIT > 9
+ , T9, T10, T11
+ #if BOOST_SPIRIT_CLOSURE_LIMIT > 12
+ , T12, T13, T14
+ #endif
+ #endif
+ #endif
+ #endif
+ > phoenix_closure_t;
+
+ typedef closure_context<DerivedT> context_t;
+
+ template <typename DerivedT2>
+ struct aux
+ {
+ DerivedT2& aux_derived()
+ { return *static_cast<DerivedT2*>(this); }
+
+ DerivedT2 const& aux_derived() const
+ { return *static_cast<DerivedT2 const*>(this); }
+
+ // initialization functions
+ template <typename A>
+ init_closure_parser<
+ DerivedT2,
+ phoenix::tuple<
+ typename phoenix::as_actor<A>::type
+ >
+ >
+ operator()(A const &a) const
+ {
+ typedef typename phoenix::as_actor<A>::type a_t;
+ typedef phoenix::tuple<a_t> actor_tuple_t;
+
+ return init_closure_parser<DerivedT2, actor_tuple_t>(
+ aux_derived(),
+ actor_tuple_t(
+ phoenix::as_actor<A>::convert(a)
+ )
+ );
+ }
+
+ template <typename A, typename B>
+ init_closure_parser<
+ DerivedT2,
+ phoenix::tuple<
+ typename phoenix::as_actor<A>::type,
+ typename phoenix::as_actor<B>::type
+ >
+ >
+ operator()(A const &a, B const &b) const
+ {
+ typedef typename phoenix::as_actor<A>::type a_t;
+ typedef typename phoenix::as_actor<B>::type b_t;
+ typedef phoenix::tuple<a_t, b_t> actor_tuple_t;
+
+ return init_closure_parser<DerivedT2, actor_tuple_t>(
+ aux_derived(),
+ actor_tuple_t(
+ phoenix::as_actor<A>::convert(a),
+ phoenix::as_actor<B>::convert(b)
+ )
+ );
+ }
+
+ template <typename A, typename B, typename C>
+ init_closure_parser<
+ DerivedT2,
+ phoenix::tuple<
+ typename phoenix::as_actor<A>::type,
+ typename phoenix::as_actor<B>::type,
+ typename phoenix::as_actor<C>::type
+ >
+ >
+ operator()(A const &a, B const &b, C const &c) const
+ {
+ typedef typename phoenix::as_actor<A>::type a_t;
+ typedef typename phoenix::as_actor<B>::type b_t;
+ typedef typename phoenix::as_actor<C>::type c_t;
+ typedef phoenix::tuple<a_t, b_t, c_t> actor_tuple_t;
+
+ return init_closure_parser<DerivedT2, actor_tuple_t>(
+ aux_derived(),
+ actor_tuple_t(
+ phoenix::as_actor<A>::convert(a),
+ phoenix::as_actor<B>::convert(b),
+ phoenix::as_actor<C>::convert(c)
+ )
+ );
+ }
+
+ #if BOOST_SPIRIT_CLOSURE_LIMIT > 3
+
+ template <
+ typename A, typename B, typename C, typename D
+ >
+ init_closure_parser<
+ DerivedT2,
+ phoenix::tuple<
+ typename phoenix::as_actor<A>::type,
+ typename phoenix::as_actor<B>::type,
+ typename phoenix::as_actor<C>::type,
+ typename phoenix::as_actor<D>::type
+ >
+ >
+ operator()(
+ A const &a, B const &b, C const &c, D const &d
+ ) const
+ {
+ typedef typename phoenix::as_actor<A>::type a_t;
+ typedef typename phoenix::as_actor<B>::type b_t;
+ typedef typename phoenix::as_actor<C>::type c_t;
+ typedef typename phoenix::as_actor<D>::type d_t;
+ typedef phoenix::tuple<
+ a_t, b_t, c_t, d_t
+ > actor_tuple_t;
+
+ return init_closure_parser<DerivedT2, actor_tuple_t>(
+ aux_derived(),
+ actor_tuple_t(
+ phoenix::as_actor<A>::convert(a),
+ phoenix::as_actor<B>::convert(b),
+ phoenix::as_actor<C>::convert(c),
+ phoenix::as_actor<D>::convert(d)
+ )
+ );
+ }
+
+ template <
+ typename A, typename B, typename C, typename D, typename E
+ >
+ init_closure_parser<
+ DerivedT2,
+ phoenix::tuple<
+ typename phoenix::as_actor<A>::type,
+ typename phoenix::as_actor<B>::type,
+ typename phoenix::as_actor<C>::type,
+ typename phoenix::as_actor<D>::type,
+ typename phoenix::as_actor<E>::type
+ >
+ >
+ operator()(
+ A const &a, B const &b, C const &c, D const &d, E const &e
+ ) const
+ {
+ typedef typename phoenix::as_actor<A>::type a_t;
+ typedef typename phoenix::as_actor<B>::type b_t;
+ typedef typename phoenix::as_actor<C>::type c_t;
+ typedef typename phoenix::as_actor<D>::type d_t;
+ typedef typename phoenix::as_actor<E>::type e_t;
+ typedef phoenix::tuple<
+ a_t, b_t, c_t, d_t, e_t
+ > actor_tuple_t;
+
+ return init_closure_parser<DerivedT2, actor_tuple_t>(
+ aux_derived(),
+ actor_tuple_t(
+ phoenix::as_actor<A>::convert(a),
+ phoenix::as_actor<B>::convert(b),
+ phoenix::as_actor<C>::convert(c),
+ phoenix::as_actor<D>::convert(d),
+ phoenix::as_actor<E>::convert(e)
+ )
+ );
+ }
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F
+ >
+ init_closure_parser<
+ DerivedT2,
+ phoenix::tuple<
+ typename phoenix::as_actor<A>::type,
+ typename phoenix::as_actor<B>::type,
+ typename phoenix::as_actor<C>::type,
+ typename phoenix::as_actor<D>::type,
+ typename phoenix::as_actor<E>::type,
+ typename phoenix::as_actor<F>::type
+ >
+ >
+ operator()(
+ A const &a, B const &b, C const &c, D const &d, E const &e,
+ F const &f
+ ) const
+ {
+ typedef typename phoenix::as_actor<A>::type a_t;
+ typedef typename phoenix::as_actor<B>::type b_t;
+ typedef typename phoenix::as_actor<C>::type c_t;
+ typedef typename phoenix::as_actor<D>::type d_t;
+ typedef typename phoenix::as_actor<E>::type e_t;
+ typedef typename phoenix::as_actor<F>::type f_t;
+ typedef phoenix::tuple<
+ a_t, b_t, c_t, d_t, e_t, f_t
+ > actor_tuple_t;
+
+ return init_closure_parser<DerivedT2, actor_tuple_t>(
+ aux_derived(),
+ actor_tuple_t(
+ phoenix::as_actor<A>::convert(a),
+ phoenix::as_actor<B>::convert(b),
+ phoenix::as_actor<C>::convert(c),
+ phoenix::as_actor<D>::convert(d),
+ phoenix::as_actor<E>::convert(e),
+ phoenix::as_actor<F>::convert(f)
+ )
+ );
+ }
+
+ #if BOOST_SPIRIT_CLOSURE_LIMIT > 6
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G
+ >
+ init_closure_parser<
+ DerivedT2,
+ phoenix::tuple<
+ typename phoenix::as_actor<A>::type,
+ typename phoenix::as_actor<B>::type,
+ typename phoenix::as_actor<C>::type,
+ typename phoenix::as_actor<D>::type,
+ typename phoenix::as_actor<E>::type,
+ typename phoenix::as_actor<F>::type,
+ typename phoenix::as_actor<G>::type
+ >
+ >
+ operator()(
+ A const &a, B const &b, C const &c, D const &d, E const &e,
+ F const &f, G const &g
+ ) const
+ {
+ typedef typename phoenix::as_actor<A>::type a_t;
+ typedef typename phoenix::as_actor<B>::type b_t;
+ typedef typename phoenix::as_actor<C>::type c_t;
+ typedef typename phoenix::as_actor<D>::type d_t;
+ typedef typename phoenix::as_actor<E>::type e_t;
+ typedef typename phoenix::as_actor<F>::type f_t;
+ typedef typename phoenix::as_actor<G>::type g_t;
+ typedef phoenix::tuple<
+ a_t, b_t, c_t, d_t, e_t, f_t, g_t
+ > actor_tuple_t;
+
+ return init_closure_parser<DerivedT2, actor_tuple_t>(
+ aux_derived(),
+ actor_tuple_t(
+ phoenix::as_actor<A>::convert(a),
+ phoenix::as_actor<B>::convert(b),
+ phoenix::as_actor<C>::convert(c),
+ phoenix::as_actor<D>::convert(d),
+ phoenix::as_actor<E>::convert(e),
+ phoenix::as_actor<F>::convert(f),
+ phoenix::as_actor<G>::convert(g)
+ )
+ );
+ }
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H
+ >
+ init_closure_parser<
+ DerivedT2,
+ phoenix::tuple<
+ typename phoenix::as_actor<A>::type,
+ typename phoenix::as_actor<B>::type,
+ typename phoenix::as_actor<C>::type,
+ typename phoenix::as_actor<D>::type,
+ typename phoenix::as_actor<E>::type,
+ typename phoenix::as_actor<F>::type,
+ typename phoenix::as_actor<G>::type,
+ typename phoenix::as_actor<H>::type
+ >
+ >
+ operator()(
+ A const &a, B const &b, C const &c, D const &d, E const &e,
+ F const &f, G const &g, H const &h
+ ) const
+ {
+ typedef typename phoenix::as_actor<A>::type a_t;
+ typedef typename phoenix::as_actor<B>::type b_t;
+ typedef typename phoenix::as_actor<C>::type c_t;
+ typedef typename phoenix::as_actor<D>::type d_t;
+ typedef typename phoenix::as_actor<E>::type e_t;
+ typedef typename phoenix::as_actor<F>::type f_t;
+ typedef typename phoenix::as_actor<G>::type g_t;
+ typedef typename phoenix::as_actor<H>::type h_t;
+ typedef phoenix::tuple<
+ a_t, b_t, c_t, d_t, e_t, f_t, g_t, h_t
+ > actor_tuple_t;
+
+ return init_closure_parser<DerivedT2, actor_tuple_t>(
+ aux_derived(),
+ actor_tuple_t(
+ phoenix::as_actor<A>::convert(a),
+ phoenix::as_actor<B>::convert(b),
+ phoenix::as_actor<C>::convert(c),
+ phoenix::as_actor<D>::convert(d),
+ phoenix::as_actor<E>::convert(e),
+ phoenix::as_actor<F>::convert(f),
+ phoenix::as_actor<G>::convert(g),
+ phoenix::as_actor<H>::convert(h)
+ )
+ );
+ }
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I
+ >
+ init_closure_parser<
+ DerivedT2,
+ phoenix::tuple<
+ typename phoenix::as_actor<A>::type,
+ typename phoenix::as_actor<B>::type,
+ typename phoenix::as_actor<C>::type,
+ typename phoenix::as_actor<D>::type,
+ typename phoenix::as_actor<E>::type,
+ typename phoenix::as_actor<F>::type,
+ typename phoenix::as_actor<G>::type,
+ typename phoenix::as_actor<H>::type,
+ typename phoenix::as_actor<I>::type
+ >
+ >
+ operator()(
+ A const &a, B const &b, C const &c, D const &d, E const &e,
+ F const &f, G const &g, H const &h, I const &i
+ ) const
+ {
+ typedef typename phoenix::as_actor<A>::type a_t;
+ typedef typename phoenix::as_actor<B>::type b_t;
+ typedef typename phoenix::as_actor<C>::type c_t;
+ typedef typename phoenix::as_actor<D>::type d_t;
+ typedef typename phoenix::as_actor<E>::type e_t;
+ typedef typename phoenix::as_actor<F>::type f_t;
+ typedef typename phoenix::as_actor<G>::type g_t;
+ typedef typename phoenix::as_actor<H>::type h_t;
+ typedef typename phoenix::as_actor<I>::type i_t;
+ typedef phoenix::tuple<
+ a_t, b_t, c_t, d_t, e_t, f_t, g_t, h_t, i_t
+ > actor_tuple_t;
+
+ return init_closure_parser<DerivedT2, actor_tuple_t>(
+ aux_derived(),
+ actor_tuple_t(
+ phoenix::as_actor<A>::convert(a),
+ phoenix::as_actor<B>::convert(b),
+ phoenix::as_actor<C>::convert(c),
+ phoenix::as_actor<D>::convert(d),
+ phoenix::as_actor<E>::convert(e),
+ phoenix::as_actor<F>::convert(f),
+ phoenix::as_actor<G>::convert(g),
+ phoenix::as_actor<H>::convert(h),
+ phoenix::as_actor<I>::convert(i)
+ )
+ );
+ }
+
+ #if BOOST_SPIRIT_CLOSURE_LIMIT > 9
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J
+ >
+ init_closure_parser<
+ DerivedT2,
+ phoenix::tuple<
+ typename phoenix::as_actor<A>::type,
+ typename phoenix::as_actor<B>::type,
+ typename phoenix::as_actor<C>::type,
+ typename phoenix::as_actor<D>::type,
+ typename phoenix::as_actor<E>::type,
+ typename phoenix::as_actor<F>::type,
+ typename phoenix::as_actor<G>::type,
+ typename phoenix::as_actor<H>::type,
+ typename phoenix::as_actor<I>::type,
+ typename phoenix::as_actor<J>::type
+ >
+ >
+ operator()(
+ A const &a, B const &b, C const &c, D const &d, E const &e,
+ F const &f, G const &g, H const &h, I const &i, J const &j
+ ) const
+ {
+ typedef typename phoenix::as_actor<A>::type a_t;
+ typedef typename phoenix::as_actor<B>::type b_t;
+ typedef typename phoenix::as_actor<C>::type c_t;
+ typedef typename phoenix::as_actor<D>::type d_t;
+ typedef typename phoenix::as_actor<E>::type e_t;
+ typedef typename phoenix::as_actor<F>::type f_t;
+ typedef typename phoenix::as_actor<G>::type g_t;
+ typedef typename phoenix::as_actor<H>::type h_t;
+ typedef typename phoenix::as_actor<I>::type i_t;
+ typedef typename phoenix::as_actor<J>::type j_t;
+ typedef phoenix::tuple<
+ a_t, b_t, c_t, d_t, e_t, f_t, g_t, h_t, i_t, j_t
+ > actor_tuple_t;
+
+ return init_closure_parser<DerivedT2, actor_tuple_t>(
+ aux_derived(),
+ actor_tuple_t(
+ phoenix::as_actor<A>::convert(a),
+ phoenix::as_actor<B>::convert(b),
+ phoenix::as_actor<C>::convert(c),
+ phoenix::as_actor<D>::convert(d),
+ phoenix::as_actor<E>::convert(e),
+ phoenix::as_actor<F>::convert(f),
+ phoenix::as_actor<G>::convert(g),
+ phoenix::as_actor<H>::convert(h),
+ phoenix::as_actor<I>::convert(i),
+ phoenix::as_actor<J>::convert(j)
+ )
+ );
+ }
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K
+ >
+ init_closure_parser<
+ DerivedT2,
+ phoenix::tuple<
+ typename phoenix::as_actor<A>::type,
+ typename phoenix::as_actor<B>::type,
+ typename phoenix::as_actor<C>::type,
+ typename phoenix::as_actor<D>::type,
+ typename phoenix::as_actor<E>::type,
+ typename phoenix::as_actor<F>::type,
+ typename phoenix::as_actor<G>::type,
+ typename phoenix::as_actor<H>::type,
+ typename phoenix::as_actor<I>::type,
+ typename phoenix::as_actor<J>::type,
+ typename phoenix::as_actor<K>::type
+ >
+ >
+ operator()(
+ A const &a, B const &b, C const &c, D const &d, E const &e,
+ F const &f, G const &g, H const &h, I const &i, J const &j,
+ K const &k
+ ) const
+ {
+ typedef typename phoenix::as_actor<A>::type a_t;
+ typedef typename phoenix::as_actor<B>::type b_t;
+ typedef typename phoenix::as_actor<C>::type c_t;
+ typedef typename phoenix::as_actor<D>::type d_t;
+ typedef typename phoenix::as_actor<E>::type e_t;
+ typedef typename phoenix::as_actor<F>::type f_t;
+ typedef typename phoenix::as_actor<G>::type g_t;
+ typedef typename phoenix::as_actor<H>::type h_t;
+ typedef typename phoenix::as_actor<I>::type i_t;
+ typedef typename phoenix::as_actor<J>::type j_t;
+ typedef typename phoenix::as_actor<K>::type k_t;
+ typedef phoenix::tuple<
+ a_t, b_t, c_t, d_t, e_t, f_t, g_t, h_t, i_t, j_t,
+ k_t
+ > actor_tuple_t;
+
+ return init_closure_parser<DerivedT2, actor_tuple_t>(
+ aux_derived(),
+ actor_tuple_t(
+ phoenix::as_actor<A>::convert(a),
+ phoenix::as_actor<B>::convert(b),
+ phoenix::as_actor<C>::convert(c),
+ phoenix::as_actor<D>::convert(d),
+ phoenix::as_actor<E>::convert(e),
+ phoenix::as_actor<F>::convert(f),
+ phoenix::as_actor<G>::convert(g),
+ phoenix::as_actor<H>::convert(h),
+ phoenix::as_actor<I>::convert(i),
+ phoenix::as_actor<J>::convert(j),
+ phoenix::as_actor<K>::convert(k)
+ )
+ );
+ }
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L
+ >
+ init_closure_parser<
+ DerivedT2,
+ phoenix::tuple<
+ typename phoenix::as_actor<A>::type,
+ typename phoenix::as_actor<B>::type,
+ typename phoenix::as_actor<C>::type,
+ typename phoenix::as_actor<D>::type,
+ typename phoenix::as_actor<E>::type,
+ typename phoenix::as_actor<F>::type,
+ typename phoenix::as_actor<G>::type,
+ typename phoenix::as_actor<H>::type,
+ typename phoenix::as_actor<I>::type,
+ typename phoenix::as_actor<J>::type,
+ typename phoenix::as_actor<K>::type,
+ typename phoenix::as_actor<L>::type
+ >
+ >
+ operator()(
+ A const &a, B const &b, C const &c, D const &d, E const &e,
+ F const &f, G const &g, H const &h, I const &i, J const &j,
+ K const &k, L const &l
+ ) const
+ {
+ typedef typename phoenix::as_actor<A>::type a_t;
+ typedef typename phoenix::as_actor<B>::type b_t;
+ typedef typename phoenix::as_actor<C>::type c_t;
+ typedef typename phoenix::as_actor<D>::type d_t;
+ typedef typename phoenix::as_actor<E>::type e_t;
+ typedef typename phoenix::as_actor<F>::type f_t;
+ typedef typename phoenix::as_actor<G>::type g_t;
+ typedef typename phoenix::as_actor<H>::type h_t;
+ typedef typename phoenix::as_actor<I>::type i_t;
+ typedef typename phoenix::as_actor<J>::type j_t;
+ typedef typename phoenix::as_actor<K>::type k_t;
+ typedef typename phoenix::as_actor<L>::type l_t;
+ typedef phoenix::tuple<
+ a_t, b_t, c_t, d_t, e_t, f_t, g_t, h_t, i_t, j_t,
+ k_t, l_t
+ > actor_tuple_t;
+
+ return init_closure_parser<DerivedT2, actor_tuple_t>(
+ aux_derived(),
+ actor_tuple_t(
+ phoenix::as_actor<A>::convert(a),
+ phoenix::as_actor<B>::convert(b),
+ phoenix::as_actor<C>::convert(c),
+ phoenix::as_actor<D>::convert(d),
+ phoenix::as_actor<E>::convert(e),
+ phoenix::as_actor<F>::convert(f),
+ phoenix::as_actor<G>::convert(g),
+ phoenix::as_actor<H>::convert(h),
+ phoenix::as_actor<I>::convert(i),
+ phoenix::as_actor<J>::convert(j),
+ phoenix::as_actor<K>::convert(k),
+ phoenix::as_actor<L>::convert(l)
+ )
+ );
+ }
+
+ #if BOOST_SPIRIT_CLOSURE_LIMIT > 12
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L, typename M
+ >
+ init_closure_parser<
+ DerivedT2,
+ phoenix::tuple<
+ typename phoenix::as_actor<A>::type,
+ typename phoenix::as_actor<B>::type,
+ typename phoenix::as_actor<C>::type,
+ typename phoenix::as_actor<D>::type,
+ typename phoenix::as_actor<E>::type,
+ typename phoenix::as_actor<F>::type,
+ typename phoenix::as_actor<G>::type,
+ typename phoenix::as_actor<H>::type,
+ typename phoenix::as_actor<I>::type,
+ typename phoenix::as_actor<J>::type,
+ typename phoenix::as_actor<K>::type,
+ typename phoenix::as_actor<L>::type,
+ typename phoenix::as_actor<M>::type
+ >
+ >
+ operator()(
+ A const &a, B const &b, C const &c, D const &d, E const &e,
+ F const &f, G const &g, H const &h, I const &i, J const &j,
+ K const &k, L const &l, M const &m
+ ) const
+ {
+ typedef typename phoenix::as_actor<A>::type a_t;
+ typedef typename phoenix::as_actor<B>::type b_t;
+ typedef typename phoenix::as_actor<C>::type c_t;
+ typedef typename phoenix::as_actor<D>::type d_t;
+ typedef typename phoenix::as_actor<E>::type e_t;
+ typedef typename phoenix::as_actor<F>::type f_t;
+ typedef typename phoenix::as_actor<G>::type g_t;
+ typedef typename phoenix::as_actor<H>::type h_t;
+ typedef typename phoenix::as_actor<I>::type i_t;
+ typedef typename phoenix::as_actor<J>::type j_t;
+ typedef typename phoenix::as_actor<K>::type k_t;
+ typedef typename phoenix::as_actor<L>::type l_t;
+ typedef typename phoenix::as_actor<M>::type m_t;
+ typedef phoenix::tuple<
+ a_t, b_t, c_t, d_t, e_t, f_t, g_t, h_t, i_t, j_t,
+ k_t, l_t, m_t
+ > actor_tuple_t;
+
+ return init_closure_parser<DerivedT2, actor_tuple_t>(
+ aux_derived(),
+ actor_tuple_t(
+ phoenix::as_actor<A>::convert(a),
+ phoenix::as_actor<B>::convert(b),
+ phoenix::as_actor<C>::convert(c),
+ phoenix::as_actor<D>::convert(d),
+ phoenix::as_actor<E>::convert(e),
+ phoenix::as_actor<F>::convert(f),
+ phoenix::as_actor<G>::convert(g),
+ phoenix::as_actor<H>::convert(h),
+ phoenix::as_actor<I>::convert(i),
+ phoenix::as_actor<J>::convert(j),
+ phoenix::as_actor<K>::convert(k),
+ phoenix::as_actor<L>::convert(l),
+ phoenix::as_actor<M>::convert(m)
+ )
+ );
+ }
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L, typename M, typename N
+ >
+ init_closure_parser<
+ DerivedT2,
+ phoenix::tuple<
+ typename phoenix::as_actor<A>::type,
+ typename phoenix::as_actor<B>::type,
+ typename phoenix::as_actor<C>::type,
+ typename phoenix::as_actor<D>::type,
+ typename phoenix::as_actor<E>::type,
+ typename phoenix::as_actor<F>::type,
+ typename phoenix::as_actor<G>::type,
+ typename phoenix::as_actor<H>::type,
+ typename phoenix::as_actor<I>::type,
+ typename phoenix::as_actor<J>::type,
+ typename phoenix::as_actor<K>::type,
+ typename phoenix::as_actor<L>::type,
+ typename phoenix::as_actor<M>::type,
+ typename phoenix::as_actor<N>::type
+ >
+ >
+ operator()(
+ A const &a, B const &b, C const &c, D const &d, E const &e,
+ F const &f, G const &g, H const &h, I const &i, J const &j,
+ K const &k, L const &l, M const &m, N const &n
+ ) const
+ {
+ typedef typename phoenix::as_actor<A>::type a_t;
+ typedef typename phoenix::as_actor<B>::type b_t;
+ typedef typename phoenix::as_actor<C>::type c_t;
+ typedef typename phoenix::as_actor<D>::type d_t;
+ typedef typename phoenix::as_actor<E>::type e_t;
+ typedef typename phoenix::as_actor<F>::type f_t;
+ typedef typename phoenix::as_actor<G>::type g_t;
+ typedef typename phoenix::as_actor<H>::type h_t;
+ typedef typename phoenix::as_actor<I>::type i_t;
+ typedef typename phoenix::as_actor<J>::type j_t;
+ typedef typename phoenix::as_actor<K>::type k_t;
+ typedef typename phoenix::as_actor<L>::type l_t;
+ typedef typename phoenix::as_actor<M>::type m_t;
+ typedef typename phoenix::as_actor<N>::type n_t;
+ typedef phoenix::tuple<
+ a_t, b_t, c_t, d_t, e_t, f_t, g_t, h_t, i_t, j_t,
+ k_t, l_t, m_t, n_t
+ > actor_tuple_t;
+
+ return init_closure_parser<DerivedT2, actor_tuple_t>(
+ aux_derived(),
+ actor_tuple_t(
+ phoenix::as_actor<A>::convert(a),
+ phoenix::as_actor<B>::convert(b),
+ phoenix::as_actor<C>::convert(c),
+ phoenix::as_actor<D>::convert(d),
+ phoenix::as_actor<E>::convert(e),
+ phoenix::as_actor<F>::convert(f),
+ phoenix::as_actor<G>::convert(g),
+ phoenix::as_actor<H>::convert(h),
+ phoenix::as_actor<I>::convert(i),
+ phoenix::as_actor<J>::convert(j),
+ phoenix::as_actor<K>::convert(k),
+ phoenix::as_actor<L>::convert(l),
+ phoenix::as_actor<M>::convert(m),
+ phoenix::as_actor<N>::convert(n)
+ )
+ );
+ }
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L, typename M, typename N, typename O
+ >
+ init_closure_parser<
+ DerivedT2,
+ phoenix::tuple<
+ typename phoenix::as_actor<A>::type,
+ typename phoenix::as_actor<B>::type,
+ typename phoenix::as_actor<C>::type,
+ typename phoenix::as_actor<D>::type,
+ typename phoenix::as_actor<E>::type,
+ typename phoenix::as_actor<F>::type,
+ typename phoenix::as_actor<G>::type,
+ typename phoenix::as_actor<H>::type,
+ typename phoenix::as_actor<I>::type,
+ typename phoenix::as_actor<J>::type,
+ typename phoenix::as_actor<K>::type,
+ typename phoenix::as_actor<L>::type,
+ typename phoenix::as_actor<M>::type,
+ typename phoenix::as_actor<N>::type,
+ typename phoenix::as_actor<O>::type
+ >
+ >
+ operator()(
+ A const &a, B const &b, C const &c, D const &d, E const &e,
+ F const &f, G const &g, H const &h, I const &i, J const &j,
+ K const &k, L const &l, M const &m, N const &n, O const &o
+ ) const
+ {
+ typedef typename phoenix::as_actor<A>::type a_t;
+ typedef typename phoenix::as_actor<B>::type b_t;
+ typedef typename phoenix::as_actor<C>::type c_t;
+ typedef typename phoenix::as_actor<D>::type d_t;
+ typedef typename phoenix::as_actor<E>::type e_t;
+ typedef typename phoenix::as_actor<F>::type f_t;
+ typedef typename phoenix::as_actor<G>::type g_t;
+ typedef typename phoenix::as_actor<H>::type h_t;
+ typedef typename phoenix::as_actor<I>::type i_t;
+ typedef typename phoenix::as_actor<J>::type j_t;
+ typedef typename phoenix::as_actor<K>::type k_t;
+ typedef typename phoenix::as_actor<L>::type l_t;
+ typedef typename phoenix::as_actor<M>::type m_t;
+ typedef typename phoenix::as_actor<N>::type n_t;
+ typedef typename phoenix::as_actor<O>::type o_t;
+ typedef phoenix::tuple<
+ a_t, b_t, c_t, d_t, e_t, f_t, g_t, h_t, i_t, j_t,
+ k_t, l_t, m_t, n_t, o_t
+ > actor_tuple_t;
+
+ return init_closure_parser<DerivedT2, actor_tuple_t>(
+ aux_derived(),
+ actor_tuple_t(
+ phoenix::as_actor<A>::convert(a),
+ phoenix::as_actor<B>::convert(b),
+ phoenix::as_actor<C>::convert(c),
+ phoenix::as_actor<D>::convert(d),
+ phoenix::as_actor<E>::convert(e),
+ phoenix::as_actor<F>::convert(f),
+ phoenix::as_actor<G>::convert(g),
+ phoenix::as_actor<H>::convert(h),
+ phoenix::as_actor<I>::convert(i),
+ phoenix::as_actor<J>::convert(j),
+ phoenix::as_actor<K>::convert(k),
+ phoenix::as_actor<L>::convert(l),
+ phoenix::as_actor<M>::convert(m),
+ phoenix::as_actor<N>::convert(n),
+ phoenix::as_actor<O>::convert(o)
+ )
+ );
+ }
+
+ #endif
+ #endif
+ #endif
+ #endif
+ };
+
+ ~closure() {}
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // overloads for chseq_p and str_p taking in phoenix actors
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename ActorT>
+ struct container_begin
+ {
+ typedef container_begin<ActorT> self_t;
+
+ template <typename TupleT>
+ struct result
+ {
+ typedef typename phoenix::actor_result<ActorT, TupleT>
+ ::plain_type::iterator type;
+ };
+
+ container_begin(ActorT actor_)
+ : actor(actor_) {}
+
+ template <typename TupleT>
+ typename phoenix::actor_result<self_t, TupleT>::type
+ eval(TupleT const& /*args*/) const
+ { return actor().begin(); }
+
+ ActorT actor;
+ };
+
+ template <typename ActorT>
+ struct container_end
+ {
+ typedef container_begin<ActorT> self_t;
+
+ template <typename TupleT>
+ struct result
+ {
+ typedef typename phoenix::actor_result<ActorT, TupleT>
+ ::plain_type::iterator type;
+ };
+
+ container_end(ActorT actor_)
+ : actor(actor_) {}
+
+ template <typename TupleT>
+ typename phoenix::actor_result<self_t, TupleT>::type
+ eval(TupleT const& /*args*/) const
+ { return actor().end(); }
+
+ ActorT actor;
+ };
+
+ template <typename BaseT>
+ inline f_chseq<
+ phoenix::actor<container_begin<phoenix::actor<BaseT> > >,
+ phoenix::actor<container_end<phoenix::actor<BaseT> > >
+ >
+ f_chseq_p(phoenix::actor<BaseT> const& a)
+ {
+ typedef phoenix::actor<container_begin<phoenix::actor<BaseT> > >
+ container_begin_t;
+ typedef phoenix::actor<container_end<phoenix::actor<BaseT> > >
+ container_end_t;
+ typedef f_chseq<container_begin_t, container_end_t> result_t;
+
+ return result_t(container_begin_t(a), container_end_t(a));
+ }
+
+ template <typename BaseT>
+ inline f_strlit<
+ phoenix::actor<container_begin<phoenix::actor<BaseT> > >,
+ phoenix::actor<container_end<phoenix::actor<BaseT> > >
+ >
+ f_str_p(phoenix::actor<BaseT> const& a)
+ {
+ typedef phoenix::actor<container_begin<phoenix::actor<BaseT> > >
+ container_begin_t;
+ typedef phoenix::actor<container_end<phoenix::actor<BaseT> > >
+ container_end_t;
+ typedef f_strlit<container_begin_t, container_end_t> result_t;
+
+ return result_t(container_begin_t(a), container_end_t(a));
+ }
+
+}} // namespace boost::spirit
+
+#endif
diff --git a/boost/boost/spirit/attribute/closure_context.hpp b/boost/boost/spirit/attribute/closure_context.hpp
new file mode 100644
index 00000000000..ff46228acaf
--- /dev/null
+++ b/boost/boost/spirit/attribute/closure_context.hpp
@@ -0,0 +1,51 @@
+/*=============================================================================
+ Copyright (c) 2002-2003 Joel de Guzman
+ Copyright (c) 2002-2003 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_CLOSURE_CONTEXT_HPP)
+#define BOOST_SPIRIT_CLOSURE_CONTEXT_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+#if !defined(BOOST_SPIRIT_CLOSURE_CONTEXT_LINKER_DEFINED)
+#define BOOST_SPIRIT_CLOSURE_CONTEXT_LINKER_DEFINED
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// closure_context_linker
+// { helper template for the closure extendability }
+//
+// This classes can be 'overloaded' (defined elsewhere), to plug
+// in additional functionality into the closure parsing process.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+template<typename ContextT>
+struct closure_context_linker : public ContextT
+{
+ template <typename ParserT>
+ closure_context_linker(ParserT const& p)
+ : ContextT(p) {}
+
+ template <typename ParserT, typename ScannerT>
+ void pre_parse(ParserT const& p, ScannerT const& scan)
+ { ContextT::pre_parse(p, scan); }
+
+ template <typename ResultT, typename ParserT, typename ScannerT>
+ ResultT&
+ post_parse(ResultT& hit, ParserT const& p, ScannerT const& scan)
+ { return ContextT::post_parse(hit, p, scan); }
+};
+
+#endif // !defined(BOOST_SPIRIT_CLOSURE_CONTEXT_LINKER_DEFINED)
+
+///////////////////////////////////////////////////////////////////////////////
+}} // namespace boost::spirit
+
+#endif // BOOST_SPIRIT_CLOSURE_CONTEXT_HPP
diff --git a/boost/boost/spirit/attribute/closure_fwd.hpp b/boost/boost/spirit/attribute/closure_fwd.hpp
new file mode 100644
index 00000000000..1c00d0ab340
--- /dev/null
+++ b/boost/boost/spirit/attribute/closure_fwd.hpp
@@ -0,0 +1,65 @@
+/*=============================================================================
+ Copyright (c) 2006 Tobias Schwinger
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_CLOSURE_FWD_HPP)
+#define BOOST_SPIRIT_CLOSURE_FWD_HPP
+
+#include <boost/spirit/phoenix/tuples.hpp>
+
+#if !defined(BOOST_SPIRIT_CLOSURE_LIMIT)
+# define BOOST_SPIRIT_CLOSURE_LIMIT PHOENIX_LIMIT
+#endif
+
+namespace boost { namespace spirit {
+
+ template<typename ClosureT>
+ class closure_context;
+
+ template <typename ClosureT>
+ class init_closure_context;
+
+ template <typename ParserT, typename ActorTupleT>
+ struct init_closure_parser;
+
+ template <
+ typename DerivedT
+ , typename T0 = phoenix::nil_t
+ , typename T1 = phoenix::nil_t
+ , typename T2 = phoenix::nil_t
+
+ #if BOOST_SPIRIT_CLOSURE_LIMIT > 3
+ , typename T3 = phoenix::nil_t
+ , typename T4 = phoenix::nil_t
+ , typename T5 = phoenix::nil_t
+
+ #if BOOST_SPIRIT_CLOSURE_LIMIT > 6
+ , typename T6 = phoenix::nil_t
+ , typename T7 = phoenix::nil_t
+ , typename T8 = phoenix::nil_t
+
+ #if BOOST_SPIRIT_CLOSURE_LIMIT > 9
+ , typename T9 = phoenix::nil_t
+ , typename T10 = phoenix::nil_t
+ , typename T11 = phoenix::nil_t
+
+ #if BOOST_SPIRIT_CLOSURE_LIMIT > 12
+ , typename T12 = phoenix::nil_t
+ , typename T13 = phoenix::nil_t
+ , typename T14 = phoenix::nil_t
+
+ #endif
+ #endif
+ #endif
+ #endif
+ >
+ struct closure;
+
+}} // namespace boost::spirit
+
+#endif
+
diff --git a/boost/boost/spirit/attribute/parametric.hpp b/boost/boost/spirit/attribute/parametric.hpp
new file mode 100644
index 00000000000..2e2883bf2e7
--- /dev/null
+++ b/boost/boost/spirit/attribute/parametric.hpp
@@ -0,0 +1,140 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Joel de Guzman
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_PARAMETRIC_HPP
+#define BOOST_SPIRIT_PARAMETRIC_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/core/parser.hpp>
+#include <boost/spirit/core/composite/composite.hpp>
+#include <boost/spirit/core/primitives/primitives.hpp>
+
+namespace boost { namespace spirit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // f_chlit class [ functional version of chlit ]
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename ChGenT>
+ struct f_chlit : public char_parser<f_chlit<ChGenT> >
+ {
+ f_chlit(ChGenT chgen_)
+ : chgen(chgen_) {}
+
+ template <typename T>
+ bool test(T ch) const
+ { return ch == chgen(); }
+
+ ChGenT chgen;
+ };
+
+ template <typename ChGenT>
+ inline f_chlit<ChGenT>
+ f_ch_p(ChGenT chgen)
+ { return f_chlit<ChGenT>(chgen); }
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // f_range class [ functional version of range ]
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename ChGenAT, typename ChGenBT>
+ struct f_range : public char_parser<f_range<ChGenAT, ChGenBT> >
+ {
+ f_range(ChGenAT first_, ChGenBT last_)
+ : first(first_), last(last_)
+ {}
+
+ template <typename T>
+ bool test(T ch) const
+ {
+ BOOST_SPIRIT_ASSERT(first() <= last());
+ return (ch >= first()) && (ch <= last());
+ }
+
+ ChGenAT first;
+ ChGenBT last;
+ };
+
+ template <typename ChGenAT, typename ChGenBT>
+ inline f_range<ChGenAT, ChGenBT>
+ f_range_p(ChGenAT first, ChGenBT last)
+ { return f_range<ChGenAT, ChGenBT>(first, last); }
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // f_chseq class [ functional version of chseq ]
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename IterGenAT, typename IterGenBT>
+ class f_chseq : public parser<f_chseq<IterGenAT, IterGenBT> >
+ {
+ public:
+
+ typedef f_chseq<IterGenAT, IterGenBT> self_t;
+
+ f_chseq(IterGenAT first_, IterGenBT last_)
+ : first(first_), last(last_) {}
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ typedef typename parser_result<self_t, ScannerT>::type result_t;
+ return impl::string_parser_parse<result_t>(first(), last(), scan);
+ }
+
+ private:
+
+ IterGenAT first;
+ IterGenBT last;
+ };
+
+ template <typename IterGenAT, typename IterGenBT>
+ inline f_chseq<IterGenAT, IterGenBT>
+ f_chseq_p(IterGenAT first, IterGenBT last)
+ { return f_chseq<IterGenAT, IterGenBT>(first, last); }
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // f_strlit class [ functional version of strlit ]
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename IterGenAT, typename IterGenBT>
+ class f_strlit : public parser<f_strlit<IterGenAT, IterGenBT> >
+ {
+ public:
+
+ typedef f_strlit<IterGenAT, IterGenBT> self_t;
+
+ f_strlit(IterGenAT first, IterGenBT last)
+ : seq(first, last) {}
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ typedef typename parser_result<self_t, ScannerT>::type result_t;
+ return impl::contiguous_parser_parse<result_t>
+ (seq, scan, scan);
+ }
+
+ private:
+
+ f_chseq<IterGenAT, IterGenBT> seq;
+ };
+
+ template <typename IterGenAT, typename IterGenBT>
+ inline f_strlit<IterGenAT, IterGenBT>
+ f_str_p(IterGenAT first, IterGenBT last)
+ { return f_strlit<IterGenAT, IterGenBT>(first, last); }
+
+}} // namespace boost::spirit
+
+#endif
diff --git a/boost/boost/spirit/attribute/typeof.hpp b/boost/boost/spirit/attribute/typeof.hpp
new file mode 100644
index 00000000000..a1b604911c3
--- /dev/null
+++ b/boost/boost/spirit/attribute/typeof.hpp
@@ -0,0 +1,64 @@
+/*=============================================================================
+ Copyright (c) 2006 Tobias Schwinger
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_ATTRIBUTE_TYPEOF_HPP)
+#define BOOST_SPIRIT_ATTRIBUTE_TYPEOF_HPP
+
+#include <boost/typeof/typeof.hpp>
+
+#include <boost/spirit/core/typeof.hpp>
+
+#include <boost/spirit/attribute/closure_fwd.hpp>
+
+namespace boost { namespace spirit {
+
+ // parametric.hpp
+ template<typename ChGenT> struct f_chlit;
+ template<typename ChGenAT, typename ChGenBT> struct f_range;
+ template<typename IterGenAT, typename IterGenBT> struct f_chseq;
+ template<typename IterGenAT, typename IterGenBT> struct f_strlit;
+
+}} // namespace boost::spirit
+
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+
+// parametric.hpp
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::f_chlit,1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::f_range,2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::f_chseq,2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::f_strlit,2)
+
+
+// closure.hpp (has forward header)
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::closure,BOOST_SPIRIT_CLOSURE_LIMIT)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::closure_context,1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::init_closure_context,1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::init_closure_parser,2)
+
+
+#if BOOST_SPIRIT_CLOSURE_LIMIT > 12
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::closure,12)
+#endif
+#if BOOST_SPIRIT_CLOSURE_LIMIT > 9
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::closure, 9)
+#endif
+#if BOOST_SPIRIT_CLOSURE_LIMIT > 6
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::closure, 6)
+#endif
+#if BOOST_SPIRIT_CLOSURE_LIMIT > 3
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::closure, 3)
+#endif
+
+
+
+#endif
+
diff --git a/boost/boost/spirit/core.hpp b/boost/boost/spirit/core.hpp
new file mode 100644
index 00000000000..2bcba62fc54
--- /dev/null
+++ b/boost/boost/spirit/core.hpp
@@ -0,0 +1,74 @@
+/*=============================================================================
+ Copyright (c) 1998-2003 Joel de Guzman
+ Copyright (c) 2001-2003 Daniel Nuffer
+ Copyright (c) 2001-2003 Hartmut Kaiser
+ Copyright (c) 2002-2003 Martin Wille
+ Copyright (c) 2002 Raghavendra Satish
+ Copyright (c) 2001 Bruce Florman
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_CORE_MAIN_HPP)
+#define BOOST_SPIRIT_CORE_MAIN_HPP
+
+#include <boost/spirit/version.hpp>
+#include <boost/spirit/debug.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Spirit.Core includes
+//
+///////////////////////////////////////////////////////////////////////////////
+
+// Spirit.Core.Kernel
+#include <boost/spirit/core/config.hpp>
+#include <boost/spirit/core/nil.hpp>
+#include <boost/spirit/core/match.hpp>
+#include <boost/spirit/core/parser.hpp>
+
+// Spirit.Core.Primitives
+#include <boost/spirit/core/primitives/primitives.hpp>
+#include <boost/spirit/core/primitives/numerics.hpp>
+
+// Spirit.Core.Scanner
+#include <boost/spirit/core/scanner/scanner.hpp>
+#include <boost/spirit/core/scanner/skipper.hpp>
+
+// Spirit.Core.NonTerminal
+#include <boost/spirit/core/non_terminal/subrule.hpp>
+#include <boost/spirit/core/non_terminal/rule.hpp>
+#include <boost/spirit/core/non_terminal/grammar.hpp>
+
+// Spirit.Core.Composite
+#include <boost/spirit/core/composite/actions.hpp>
+#include <boost/spirit/core/composite/composite.hpp>
+#include <boost/spirit/core/composite/directives.hpp>
+#include <boost/spirit/core/composite/epsilon.hpp>
+#include <boost/spirit/core/composite/sequence.hpp>
+#include <boost/spirit/core/composite/sequential_and.hpp>
+#include <boost/spirit/core/composite/sequential_or.hpp>
+#include <boost/spirit/core/composite/alternative.hpp>
+#include <boost/spirit/core/composite/difference.hpp>
+#include <boost/spirit/core/composite/intersection.hpp>
+#include <boost/spirit/core/composite/exclusive_or.hpp>
+#include <boost/spirit/core/composite/kleene_star.hpp>
+#include <boost/spirit/core/composite/positive.hpp>
+#include <boost/spirit/core/composite/optional.hpp>
+#include <boost/spirit/core/composite/list.hpp>
+#include <boost/spirit/core/composite/no_actions.hpp>
+
+// Deprecated interface includes
+#include <boost/spirit/actor/assign_actor.hpp>
+#include <boost/spirit/actor/push_back_actor.hpp>
+
+#if defined(BOOST_SPIRIT_DEBUG)
+ //////////////////////////////////
+ #include <boost/spirit/debug/parser_names.hpp>
+
+#endif // BOOST_SPIRIT_DEBUG
+
+#endif // BOOST_SPIRIT_CORE_MAIN_HPP
+
diff --git a/boost/boost/spirit/core/assert.hpp b/boost/boost/spirit/core/assert.hpp
new file mode 100644
index 00000000000..11002442ee4
--- /dev/null
+++ b/boost/boost/spirit/core/assert.hpp
@@ -0,0 +1,39 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Joel de Guzman
+ Copyright (c) 2002-2003 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_ASSERT_HPP)
+#define BOOST_SPIRIT_ASSERT_HPP
+
+#include <boost/config.hpp>
+#include <boost/throw_exception.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// BOOST_SPIRIT_ASSERT is used throughout the framework. It can be
+// overridden by the user. If BOOST_SPIRIT_ASSERT_EXCEPTION is defined,
+// then that will be thrown, otherwise, BOOST_SPIRIT_ASSERT simply turns
+// into a plain assert()
+//
+///////////////////////////////////////////////////////////////////////////////
+#if !defined(BOOST_SPIRIT_ASSERT)
+#if defined(NDEBUG)
+ #define BOOST_SPIRIT_ASSERT(x)
+#elif defined (BOOST_SPIRIT_ASSERT_EXCEPTION)
+ #define BOOST_SPIRIT_ASSERT_AUX(f, l, x) BOOST_SPIRIT_ASSERT_AUX2(f, l, x)
+ #define BOOST_SPIRIT_ASSERT_AUX2(f, l, x) \
+ do{ if (!(x)) boost::throw_exception( \
+ BOOST_SPIRIT_ASSERT_EXCEPTION(f "(" #l "): " #x)); } while(0)
+ #define BOOST_SPIRIT_ASSERT(x) BOOST_SPIRIT_ASSERT_AUX(__FILE__, __LINE__, x)
+#else
+ #include <cassert>
+ #define BOOST_SPIRIT_ASSERT(x) assert(x)
+#endif
+#endif // !defined(BOOST_SPIRIT_ASSERT)
+
+#endif // BOOST_SPIRIT_ASSERT_HPP
diff --git a/boost/boost/spirit/core/composite/actions.hpp b/boost/boost/spirit/core/composite/actions.hpp
new file mode 100644
index 00000000000..543faedc011
--- /dev/null
+++ b/boost/boost/spirit/core/composite/actions.hpp
@@ -0,0 +1,123 @@
+/*=============================================================================
+ Copyright (c) 1998-2003 Joel de Guzman
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_ACTIONS_HPP
+#define BOOST_SPIRIT_ACTIONS_HPP
+
+#include <boost/spirit/core/parser.hpp>
+#include <boost/spirit/core/composite/composite.hpp>
+
+namespace boost { namespace spirit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // action class
+ //
+ // The action class binds a parser with a user defined semantic
+ // action. Instances of action are never created manually. Instead,
+ // action objects are typically created indirectly through
+ // expression templates of the form:
+ //
+ // p[f]
+ //
+ // where p is a parser and f is a function or functor. The semantic
+ // action may be a function or a functor. When the parser is
+ // successful, the actor calls the scanner's action_policy policy
+ // (see scanner.hpp):
+ //
+ // scan.do_action(actor, attribute, first, last);
+ //
+ // passing in these information:
+ //
+ // actor: The action's function or functor
+ // attribute: The match (returned by the parser) object's
+ // attribute (see match.hpp)
+ // first: Iterator pointing to the start of the matching
+ // portion of the input
+ // last: Iterator pointing to one past the end of the
+ // matching portion of the input
+ //
+ // It is the responsibility of the scanner's action_policy policy to
+ // dispatch the function or functor as it sees fit. The expected
+ // function or functor signature depends on the parser being
+ // wrapped. In general, if the attribute type of the parser being
+ // wrapped is a nil_t, the function or functor expect the signature:
+ //
+ // void func(Iterator first, Iterator last); // functions
+ //
+ // struct ftor // functors
+ // {
+ // void func(Iterator first, Iterator last) const;
+ // };
+ //
+ // where Iterator is the type of the iterator that is being used and
+ // first and last are the iterators pointing to the matching portion
+ // of the input.
+ //
+ // If the attribute type of the parser being wrapped is not a nil_t,
+ // the function or functor usually expect the signature:
+ //
+ // void func(T val); // functions
+ //
+ // struct ftor // functors
+ // {
+ // void func(T val) const;
+ // };
+ //
+ // where T is the attribute type and val is the attribute value
+ // returned by the parser being wrapped.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename ParserT, typename ActionT>
+ class action : public unary<ParserT, parser<action<ParserT, ActionT> > >
+ {
+ public:
+
+ typedef action<ParserT, ActionT> self_t;
+ typedef action_parser_category parser_category_t;
+ typedef unary<ParserT, parser<self_t> > base_t;
+ typedef ActionT predicate_t;
+
+ template <typename ScannerT>
+ struct result
+ {
+ typedef typename parser_result<ParserT, ScannerT>::type type;
+ };
+
+ action(ParserT const& p, ActionT const& a)
+ : base_t(p)
+ , actor(a) {}
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ typedef typename ScannerT::iterator_t iterator_t;
+ typedef typename parser_result<self_t, ScannerT>::type result_t;
+
+ scan.at_end(); // allow skipper to take effect
+ iterator_t save = scan.first;
+ result_t hit = this->subject().parse(scan);
+ if (hit)
+ {
+ typename result_t::return_t val = hit.value();
+ scan.do_action(actor, val, save, scan.first);
+ }
+ return hit;
+ }
+
+ ActionT const& predicate() const { return actor; }
+
+ private:
+
+ ActionT actor;
+ };
+
+}} // namespace boost::spirit
+
+#endif
diff --git a/boost/boost/spirit/core/composite/alternative.hpp b/boost/boost/spirit/core/composite/alternative.hpp
new file mode 100644
index 00000000000..a587c20f2fb
--- /dev/null
+++ b/boost/boost/spirit/core/composite/alternative.hpp
@@ -0,0 +1,134 @@
+/*=============================================================================
+ Copyright (c) 1998-2003 Joel de Guzman
+ Copyright (c) 2001 Daniel Nuffer
+ Copyright (c) 2002 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_ALTERNATIVE_HPP)
+#define BOOST_SPIRIT_ALTERNATIVE_HPP
+
+#include <boost/spirit/core/parser.hpp>
+#include <boost/spirit/core/primitives/primitives.hpp>
+#include <boost/spirit/core/composite/composite.hpp>
+#include <boost/spirit/meta/as_parser.hpp>
+
+namespace boost { namespace spirit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // alternative class
+ //
+ // Handles expressions of the form:
+ //
+ // a | b
+ //
+ // where a and b are parsers. The expression returns a composite
+ // parser that matches a or b. One (not both) of the operands may
+ // be a literal char, wchar_t or a primitive string char const*,
+ // wchar_t const*.
+ //
+ // The expression is short circuit evaluated. b is never touched
+ // when a is returns a successful match.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ struct alternative_parser_gen;
+
+ template <typename A, typename B>
+ struct alternative
+ : public binary<A, B, parser<alternative<A, B> > >
+ {
+ typedef alternative<A, B> self_t;
+ typedef binary_parser_category parser_category_t;
+ typedef alternative_parser_gen parser_generator_t;
+ typedef binary<A, B, parser<self_t> > base_t;
+
+ alternative(A const& a, B const& b)
+ : base_t(a, b) {}
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ typedef typename parser_result<self_t, ScannerT>::type result_t;
+ typedef typename ScannerT::iterator_t iterator_t;
+ { // scope for save
+ iterator_t save = scan.first;
+ if (result_t hit = this->left().parse(scan))
+ return hit;
+ scan.first = save;
+ }
+ return this->right().parse(scan);
+ }
+ };
+
+ struct alternative_parser_gen
+ {
+ template <typename A, typename B>
+ struct result
+ {
+ typedef
+ alternative<
+ typename as_parser<A>::type
+ , typename as_parser<B>::type
+ >
+ type;
+ };
+
+ template <typename A, typename B>
+ static alternative<
+ typename as_parser<A>::type
+ , typename as_parser<B>::type
+ >
+ generate(A const& a, B const& b)
+ {
+ return alternative<BOOST_DEDUCED_TYPENAME as_parser<A>::type,
+ BOOST_DEDUCED_TYPENAME as_parser<B>::type>
+ (as_parser<A>::convert(a), as_parser<B>::convert(b));
+ }
+ };
+
+ template <typename A, typename B>
+ alternative<A, B>
+ operator|(parser<A> const& a, parser<B> const& b);
+
+ template <typename A>
+ alternative<A, chlit<char> >
+ operator|(parser<A> const& a, char b);
+
+ template <typename B>
+ alternative<chlit<char>, B>
+ operator|(char a, parser<B> const& b);
+
+ template <typename A>
+ alternative<A, strlit<char const*> >
+ operator|(parser<A> const& a, char const* b);
+
+ template <typename B>
+ alternative<strlit<char const*>, B>
+ operator|(char const* a, parser<B> const& b);
+
+ template <typename A>
+ alternative<A, chlit<wchar_t> >
+ operator|(parser<A> const& a, wchar_t b);
+
+ template <typename B>
+ alternative<chlit<wchar_t>, B>
+ operator|(wchar_t a, parser<B> const& b);
+
+ template <typename A>
+ alternative<A, strlit<wchar_t const*> >
+ operator|(parser<A> const& a, wchar_t const* b);
+
+ template <typename B>
+ alternative<strlit<wchar_t const*>, B>
+ operator|(wchar_t const* a, parser<B> const& b);
+
+}} // namespace boost::spirit
+
+#endif
+
+#include <boost/spirit/core/composite/impl/alternative.ipp>
diff --git a/boost/boost/spirit/core/composite/composite.hpp b/boost/boost/spirit/core/composite/composite.hpp
new file mode 100644
index 00000000000..8e5ae3d26de
--- /dev/null
+++ b/boost/boost/spirit/core/composite/composite.hpp
@@ -0,0 +1,138 @@
+/*=============================================================================
+ Copyright (c) 1998-2003 Joel de Guzman
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_COMPOSITE_HPP)
+#define BOOST_SPIRIT_COMPOSITE_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/compressed_pair.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // unary class.
+ //
+ // Composite class composed of a single subject. This template class
+ // is parameterized by the subject type S and a base class to
+ // inherit from, BaseT. The unary class is meant to be a base class
+ // to inherit from. The inheritance structure, given the BaseT
+ // template parameter places the unary class in the middle of a
+ // linear, single parent hierarchy. For instance, given a class S
+ // and a base class B, a class D can derive from unary:
+ //
+ // struct D : public unary<S, B> {...};
+ //
+ // The inheritance structure is thus:
+ //
+ // B
+ // |
+ // unary (has S)
+ // |
+ // D
+ //
+ // The subject can be accessed from the derived class D as:
+ // this->subject();
+ //
+ // Typically, the subject S is specified as typename S::embed_t.
+ // embed_t specifies how the subject is embedded in the composite
+ // (See parser.hpp for details).
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename S, typename BaseT>
+ class unary : public BaseT
+ {
+ public:
+
+ typedef BaseT base_t;
+ typedef typename boost::call_traits<S>::param_type param_t;
+ typedef typename boost::call_traits<S>::const_reference return_t;
+ typedef S subject_t;
+ typedef typename S::embed_t subject_embed_t;
+
+ unary(param_t subj_)
+ : base_t(), subj(subj_) {}
+
+ unary(BaseT const& base, param_t subj_)
+ : base_t(base), subj(subj_) {}
+
+ return_t
+ subject() const
+ { return subj; }
+
+ private:
+
+ subject_embed_t subj;
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // binary class.
+ //
+ // Composite class composed of a pair (left and right). This
+ // template class is parameterized by the left and right subject
+ // types A and B and a base class to inherit from, BaseT. The binary
+ // class is meant to be a base class to inherit from. The
+ // inheritance structure, given the BaseT template parameter places
+ // the binary class in the middle of a linear, single parent
+ // hierarchy. For instance, given classes X and Y and a base class
+ // B, a class D can derive from binary:
+ //
+ // struct D : public binary<X, Y, B> {...};
+ //
+ // The inheritance structure is thus:
+ //
+ // B
+ // |
+ // binary (has X and Y)
+ // |
+ // D
+ //
+ // The left and right subjects can be accessed from the derived
+ // class D as: this->left(); and this->right();
+ //
+ // Typically, the pairs X and Y are specified as typename X::embed_t
+ // and typename Y::embed_t. embed_t specifies how the subject is
+ // embedded in the composite (See parser.hpp for details).
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ template <typename A, typename B, typename BaseT>
+ class binary : public BaseT
+ {
+ public:
+
+ typedef BaseT base_t;
+ typedef typename boost::call_traits<A>::param_type left_param_t;
+ typedef typename boost::call_traits<A>::const_reference left_return_t;
+ typedef typename boost::call_traits<B>::param_type right_param_t;
+ typedef typename boost::call_traits<B>::const_reference right_return_t;
+ typedef A left_t;
+ typedef typename A::embed_t left_embed_t;
+ typedef B right_t;
+ typedef typename B::embed_t right_embed_t;
+
+ binary(left_param_t a, right_param_t b)
+ : base_t(), subj(a, b) {}
+
+ left_return_t
+ left() const
+ { return subj.first(); }
+
+ right_return_t
+ right() const
+ { return subj.second(); }
+
+ private:
+
+ boost::compressed_pair<left_embed_t, right_embed_t> subj;
+ };
+
+}} // namespace boost::spirit
+
+#endif
diff --git a/boost/boost/spirit/core/composite/difference.hpp b/boost/boost/spirit/core/composite/difference.hpp
new file mode 100644
index 00000000000..51ad9e3c14e
--- /dev/null
+++ b/boost/boost/spirit/core/composite/difference.hpp
@@ -0,0 +1,137 @@
+/*=============================================================================
+ Copyright (c) 1998-2003 Joel de Guzman
+ Copyright (c) 2001 Daniel Nuffer
+ Copyright (c) 2002 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_DIFFERENCE_HPP)
+#define BOOST_SPIRIT_DIFFERENCE_HPP
+
+#include <boost/spirit/core/parser.hpp>
+#include <boost/spirit/core/primitives/primitives.hpp>
+#include <boost/spirit/core/composite/composite.hpp>
+#include <boost/spirit/meta/as_parser.hpp>
+
+namespace boost { namespace spirit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // difference: a - b; Matches a but not b
+ //
+ // Handles expressions of the form:
+ //
+ // a - b
+ //
+ // where a and b are parsers. The expression returns a composite
+ // parser that matches a but not b. One (not both) of the operands
+ // may be a literal char, wchar_t or a primitive string char const*,
+ // wchar_t const*.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ struct difference_parser_gen;
+
+ template <typename A, typename B>
+ struct difference
+ : public binary<A, B, parser<difference<A, B> > >
+ {
+ typedef difference<A, B> self_t;
+ typedef binary_parser_category parser_category_t;
+ typedef difference_parser_gen parser_generator_t;
+ typedef binary<A, B, parser<self_t> > base_t;
+
+ difference(A const& a, B const& b)
+ : base_t(a, b) {}
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ typedef typename parser_result<self_t, ScannerT>::type result_t;
+ typedef typename ScannerT::iterator_t iterator_t;
+ iterator_t save = scan.first;
+ if (result_t hl = this->left().parse(scan))
+ {
+ std::swap(save, scan.first);
+ result_t hr = this->right().parse(scan);
+ if (!hr || (hr.length() < hl.length()))
+ {
+ scan.first = save;
+ return hl;
+ }
+ }
+
+ return scan.no_match();
+ }
+ };
+
+ struct difference_parser_gen
+ {
+ template <typename A, typename B>
+ struct result
+ {
+ typedef
+ difference<
+ typename as_parser<A>::type
+ , typename as_parser<B>::type
+ >
+ type;
+ };
+
+ template <typename A, typename B>
+ static difference<
+ typename as_parser<A>::type
+ , typename as_parser<B>::type
+ >
+ generate(A const& a, B const& b)
+ {
+ return difference<BOOST_DEDUCED_TYPENAME as_parser<A>::type,
+ BOOST_DEDUCED_TYPENAME as_parser<B>::type>
+ (as_parser<A>::convert(a), as_parser<B>::convert(b));
+ }
+ };
+
+ template <typename A, typename B>
+ difference<A, B>
+ operator-(parser<A> const& a, parser<B> const& b);
+
+ template <typename A>
+ difference<A, chlit<char> >
+ operator-(parser<A> const& a, char b);
+
+ template <typename B>
+ difference<chlit<char>, B>
+ operator-(char a, parser<B> const& b);
+
+ template <typename A>
+ difference<A, strlit<char const*> >
+ operator-(parser<A> const& a, char const* b);
+
+ template <typename B>
+ difference<strlit<char const*>, B>
+ operator-(char const* a, parser<B> const& b);
+
+ template <typename A>
+ difference<A, chlit<wchar_t> >
+ operator-(parser<A> const& a, wchar_t b);
+
+ template <typename B>
+ difference<chlit<wchar_t>, B>
+ operator-(wchar_t a, parser<B> const& b);
+
+ template <typename A>
+ difference<A, strlit<wchar_t const*> >
+ operator-(parser<A> const& a, wchar_t const* b);
+
+ template <typename B>
+ difference<strlit<wchar_t const*>, B>
+ operator-(wchar_t const* a, parser<B> const& b);
+
+}} // namespace boost::spirit
+
+#endif
+
+#include <boost/spirit/core/composite/impl/difference.ipp>
diff --git a/boost/boost/spirit/core/composite/directives.hpp b/boost/boost/spirit/core/composite/directives.hpp
new file mode 100644
index 00000000000..546382de583
--- /dev/null
+++ b/boost/boost/spirit/core/composite/directives.hpp
@@ -0,0 +1,603 @@
+/*=============================================================================
+ Copyright (c) 1998-2003 Joel de Guzman
+ Copyright (c) 2001 Daniel Nuffer
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_DIRECTIVES_HPP)
+#define BOOST_SPIRIT_DIRECTIVES_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <algorithm>
+
+#include <boost/spirit/core/parser.hpp>
+#include <boost/spirit/core/scanner/skipper.hpp>
+#include <boost/spirit/core/primitives/primitives.hpp>
+#include <boost/spirit/core/composite/composite.hpp>
+#include <boost/spirit/core/composite/impl/directives.ipp>
+
+namespace boost { namespace spirit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // contiguous class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ struct lexeme_parser_gen;
+
+ template <typename ParserT>
+ struct contiguous
+ : public unary<ParserT, parser<contiguous<ParserT> > >
+ {
+ typedef contiguous<ParserT> self_t;
+ typedef unary_parser_category parser_category_t;
+ typedef lexeme_parser_gen parser_generator_t;
+ typedef unary<ParserT, parser<self_t> > base_t;
+
+ template <typename ScannerT>
+ struct result
+ {
+ typedef typename parser_result<ParserT, ScannerT>::type type;
+ };
+
+ contiguous(ParserT const& p)
+ : base_t(p) {}
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ typedef typename parser_result<self_t, ScannerT>::type result_t;
+ return impl::contiguous_parser_parse<result_t>
+ (this->subject(), scan, scan);
+ }
+ };
+
+ struct lexeme_parser_gen
+ {
+ template <typename ParserT>
+ struct result {
+
+ typedef contiguous<ParserT> type;
+ };
+
+ template <typename ParserT>
+ static contiguous<ParserT>
+ generate(parser<ParserT> const& subject)
+ {
+ return contiguous<ParserT>(subject.derived());
+ }
+
+ template <typename ParserT>
+ contiguous<ParserT>
+ operator[](parser<ParserT> const& subject) const
+ {
+ return contiguous<ParserT>(subject.derived());
+ }
+ };
+
+ //////////////////////////////////
+ const lexeme_parser_gen lexeme_d = lexeme_parser_gen();
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // lexeme_scanner
+ //
+ // Given a Scanner, return the correct scanner type that
+ // the lexeme_d uses. Scanner is assumed to be a phrase
+ // level scanner (see skipper.hpp)
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename ScannerT>
+ struct lexeme_scanner
+ {
+ typedef scanner_policies<
+ no_skipper_iteration_policy<
+ typename ScannerT::iteration_policy_t>,
+ typename ScannerT::match_policy_t,
+ typename ScannerT::action_policy_t
+ > policies_t;
+
+ typedef typename
+ rebind_scanner_policies<ScannerT, policies_t>::type type;
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // inhibit_case_iteration_policy class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename BaseT>
+ struct inhibit_case_iteration_policy : public BaseT
+ {
+ typedef BaseT base_t;
+
+ inhibit_case_iteration_policy()
+ : BaseT() {}
+
+ template <typename PolicyT>
+ inhibit_case_iteration_policy(PolicyT const& other)
+ : BaseT(other) {}
+
+ template <typename CharT>
+ CharT filter(CharT ch) const
+ { return impl::tolower_(ch); }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // inhibit_case class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ struct inhibit_case_parser_gen;
+
+ template <typename ParserT>
+ struct inhibit_case
+ : public unary<ParserT, parser<inhibit_case<ParserT> > >
+ {
+ typedef inhibit_case<ParserT> self_t;
+ typedef unary_parser_category parser_category_t;
+ typedef inhibit_case_parser_gen parser_generator_t;
+ typedef unary<ParserT, parser<self_t> > base_t;
+
+ template <typename ScannerT>
+ struct result
+ {
+ typedef typename parser_result<ParserT, ScannerT>::type type;
+ };
+
+ inhibit_case(ParserT const& p)
+ : base_t(p) {}
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ typedef typename parser_result<self_t, ScannerT>::type result_t;
+ return impl::inhibit_case_parser_parse<result_t>
+ (this->subject(), scan, scan);
+ }
+ };
+
+ template <int N>
+ struct inhibit_case_parser_gen_base
+ {
+ // This hack is needed to make borland happy.
+ // If these member operators were defined in the
+ // inhibit_case_parser_gen class, or if this class
+ // is non-templated, borland ICEs.
+
+ static inhibit_case<strlit<char const*> >
+ generate(char const* str)
+ { return inhibit_case<strlit<char const*> >(str); }
+
+ static inhibit_case<strlit<wchar_t const*> >
+ generate(wchar_t const* str)
+ { return inhibit_case<strlit<wchar_t const*> >(str); }
+
+ static inhibit_case<chlit<char> >
+ generate(char ch)
+ { return inhibit_case<chlit<char> >(ch); }
+
+ static inhibit_case<chlit<wchar_t> >
+ generate(wchar_t ch)
+ { return inhibit_case<chlit<wchar_t> >(ch); }
+
+ template <typename ParserT>
+ static inhibit_case<ParserT>
+ generate(parser<ParserT> const& subject)
+ { return inhibit_case<ParserT>(subject.derived()); }
+
+ inhibit_case<strlit<char const*> >
+ operator[](char const* str) const
+ { return inhibit_case<strlit<char const*> >(str); }
+
+ inhibit_case<strlit<wchar_t const*> >
+ operator[](wchar_t const* str) const
+ { return inhibit_case<strlit<wchar_t const*> >(str); }
+
+ inhibit_case<chlit<char> >
+ operator[](char ch) const
+ { return inhibit_case<chlit<char> >(ch); }
+
+ inhibit_case<chlit<wchar_t> >
+ operator[](wchar_t ch) const
+ { return inhibit_case<chlit<wchar_t> >(ch); }
+
+ template <typename ParserT>
+ inhibit_case<ParserT>
+ operator[](parser<ParserT> const& subject) const
+ { return inhibit_case<ParserT>(subject.derived()); }
+ };
+
+ //////////////////////////////////
+ struct inhibit_case_parser_gen : public inhibit_case_parser_gen_base<0>
+ {
+ inhibit_case_parser_gen() {}
+ };
+
+ //////////////////////////////////
+ // Depracated
+ const inhibit_case_parser_gen nocase_d = inhibit_case_parser_gen();
+
+ // Preferred syntax
+ const inhibit_case_parser_gen as_lower_d = inhibit_case_parser_gen();
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // as_lower_scanner
+ //
+ // Given a Scanner, return the correct scanner type that
+ // the as_lower_d uses. Scanner is assumed to be a scanner
+ // with an inhibit_case_iteration_policy.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename ScannerT>
+ struct as_lower_scanner
+ {
+ typedef scanner_policies<
+ inhibit_case_iteration_policy<
+ typename ScannerT::iteration_policy_t>,
+ typename ScannerT::match_policy_t,
+ typename ScannerT::action_policy_t
+ > policies_t;
+
+ typedef typename
+ rebind_scanner_policies<ScannerT, policies_t>::type type;
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // longest_alternative class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ struct longest_parser_gen;
+
+ template <typename A, typename B>
+ struct longest_alternative
+ : public binary<A, B, parser<longest_alternative<A, B> > >
+ {
+ typedef longest_alternative<A, B> self_t;
+ typedef binary_parser_category parser_category_t;
+ typedef longest_parser_gen parser_generator_t;
+ typedef binary<A, B, parser<self_t> > base_t;
+
+ longest_alternative(A const& a, B const& b)
+ : base_t(a, b) {}
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ typedef typename parser_result<self_t, ScannerT>::type result_t;
+ typename ScannerT::iterator_t save = scan.first;
+ result_t l = this->left().parse(scan);
+ std::swap(scan.first, save);
+ result_t r = this->right().parse(scan);
+
+ if (l || r)
+ {
+ if (l.length() > r.length())
+ {
+ scan.first = save;
+ return l;
+ }
+ return r;
+ }
+
+ return scan.no_match();
+ }
+ };
+
+ struct longest_parser_gen
+ {
+ template <typename A, typename B>
+ struct result {
+
+ typedef typename
+ impl::to_longest_alternative<alternative<A, B> >::result_t
+ type;
+ };
+
+ template <typename A, typename B>
+ static typename
+ impl::to_longest_alternative<alternative<A, B> >::result_t
+ generate(alternative<A, B> const& alt)
+ {
+ return impl::to_longest_alternative<alternative<A, B> >::
+ convert(alt);
+ }
+
+ //'generate' for binary composite
+ template <typename A, typename B>
+ static
+ longest_alternative<A, B>
+ generate(A const &left, B const &right)
+ {
+ return longest_alternative<A, B>(left, right);
+ }
+
+ template <typename A, typename B>
+ typename impl::to_longest_alternative<alternative<A, B> >::result_t
+ operator[](alternative<A, B> const& alt) const
+ {
+ return impl::to_longest_alternative<alternative<A, B> >::
+ convert(alt);
+ }
+ };
+
+ const longest_parser_gen longest_d = longest_parser_gen();
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // shortest_alternative class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ struct shortest_parser_gen;
+
+ template <typename A, typename B>
+ struct shortest_alternative
+ : public binary<A, B, parser<shortest_alternative<A, B> > >
+ {
+ typedef shortest_alternative<A, B> self_t;
+ typedef binary_parser_category parser_category_t;
+ typedef shortest_parser_gen parser_generator_t;
+ typedef binary<A, B, parser<self_t> > base_t;
+
+ shortest_alternative(A const& a, B const& b)
+ : base_t(a, b) {}
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ typedef typename parser_result<self_t, ScannerT>::type result_t;
+ typename ScannerT::iterator_t save = scan.first;
+ result_t l = this->left().parse(scan);
+ std::swap(scan.first, save);
+ result_t r = this->right().parse(scan);
+
+ if (l || r)
+ {
+ if (l.length() < r.length() && l || !r)
+ {
+ scan.first = save;
+ return l;
+ }
+ return r;
+ }
+
+ return scan.no_match();
+ }
+ };
+
+ struct shortest_parser_gen
+ {
+ template <typename A, typename B>
+ struct result {
+
+ typedef typename
+ impl::to_shortest_alternative<alternative<A, B> >::result_t
+ type;
+ };
+
+ template <typename A, typename B>
+ static typename
+ impl::to_shortest_alternative<alternative<A, B> >::result_t
+ generate(alternative<A, B> const& alt)
+ {
+ return impl::to_shortest_alternative<alternative<A, B> >::
+ convert(alt);
+ }
+
+ //'generate' for binary composite
+ template <typename A, typename B>
+ static
+ shortest_alternative<A, B>
+ generate(A const &left, B const &right)
+ {
+ return shortest_alternative<A, B>(left, right);
+ }
+
+ template <typename A, typename B>
+ typename impl::to_shortest_alternative<alternative<A, B> >::result_t
+ operator[](alternative<A, B> const& alt) const
+ {
+ return impl::to_shortest_alternative<alternative<A, B> >::
+ convert(alt);
+ }
+ };
+
+ const shortest_parser_gen shortest_d = shortest_parser_gen();
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // min_bounded class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename BoundsT>
+ struct min_bounded_gen;
+
+ template <typename ParserT, typename BoundsT>
+ struct min_bounded
+ : public unary<ParserT, parser<min_bounded<ParserT, BoundsT> > >
+ {
+ typedef min_bounded<ParserT, BoundsT> self_t;
+ typedef unary_parser_category parser_category_t;
+ typedef min_bounded_gen<BoundsT> parser_generator_t;
+ typedef unary<ParserT, parser<self_t> > base_t;
+
+ template <typename ScannerT>
+ struct result
+ {
+ typedef typename parser_result<ParserT, ScannerT>::type type;
+ };
+
+ min_bounded(ParserT const& p, BoundsT const& min__)
+ : base_t(p)
+ , min_(min__) {}
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ typedef typename parser_result<self_t, ScannerT>::type result_t;
+ result_t hit = this->subject().parse(scan);
+ if (hit.has_valid_attribute() && hit.value() < min_)
+ return scan.no_match();
+ return hit;
+ }
+
+ BoundsT min_;
+ };
+
+ template <typename BoundsT>
+ struct min_bounded_gen
+ {
+ min_bounded_gen(BoundsT const& min__)
+ : min_(min__) {}
+
+ template <typename DerivedT>
+ min_bounded<DerivedT, BoundsT>
+ operator[](parser<DerivedT> const& p) const
+ { return min_bounded<DerivedT, BoundsT>(p.derived(), min_); }
+
+ BoundsT min_;
+ };
+
+ template <typename BoundsT>
+ inline min_bounded_gen<BoundsT>
+ min_limit_d(BoundsT const& min_)
+ { return min_bounded_gen<BoundsT>(min_); }
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // max_bounded class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename BoundsT>
+ struct max_bounded_gen;
+
+ template <typename ParserT, typename BoundsT>
+ struct max_bounded
+ : public unary<ParserT, parser<max_bounded<ParserT, BoundsT> > >
+ {
+ typedef max_bounded<ParserT, BoundsT> self_t;
+ typedef unary_parser_category parser_category_t;
+ typedef max_bounded_gen<BoundsT> parser_generator_t;
+ typedef unary<ParserT, parser<self_t> > base_t;
+
+ template <typename ScannerT>
+ struct result
+ {
+ typedef typename parser_result<ParserT, ScannerT>::type type;
+ };
+
+ max_bounded(ParserT const& p, BoundsT const& max__)
+ : base_t(p)
+ , max_(max__) {}
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ typedef typename parser_result<self_t, ScannerT>::type result_t;
+ result_t hit = this->subject().parse(scan);
+ if (hit.has_valid_attribute() && hit.value() > max_)
+ return scan.no_match();
+ return hit;
+ }
+
+ BoundsT max_;
+ };
+
+ template <typename BoundsT>
+ struct max_bounded_gen
+ {
+ max_bounded_gen(BoundsT const& max__)
+ : max_(max__) {}
+
+ template <typename DerivedT>
+ max_bounded<DerivedT, BoundsT>
+ operator[](parser<DerivedT> const& p) const
+ { return max_bounded<DerivedT, BoundsT>(p.derived(), max_); }
+
+ BoundsT max_;
+ };
+
+ //////////////////////////////////
+ template <typename BoundsT>
+ inline max_bounded_gen<BoundsT>
+ max_limit_d(BoundsT const& max_)
+ { return max_bounded_gen<BoundsT>(max_); }
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // bounded class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename BoundsT>
+ struct bounded_gen;
+
+ template <typename ParserT, typename BoundsT>
+ struct bounded
+ : public unary<ParserT, parser<bounded<ParserT, BoundsT> > >
+ {
+ typedef bounded<ParserT, BoundsT> self_t;
+ typedef unary_parser_category parser_category_t;
+ typedef bounded_gen<BoundsT> parser_generator_t;
+ typedef unary<ParserT, parser<self_t> > base_t;
+
+ template <typename ScannerT>
+ struct result
+ {
+ typedef typename parser_result<ParserT, ScannerT>::type type;
+ };
+
+ bounded(ParserT const& p, BoundsT const& min__, BoundsT const& max__)
+ : base_t(p)
+ , min_(min__)
+ , max_(max__) {}
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ typedef typename parser_result<self_t, ScannerT>::type result_t;
+ result_t hit = this->subject().parse(scan);
+ if (hit.has_valid_attribute() &&
+ (hit.value() < min_ || hit.value() > max_))
+ return scan.no_match();
+ return hit;
+ }
+
+ BoundsT min_, max_;
+ };
+
+ template <typename BoundsT>
+ struct bounded_gen
+ {
+ bounded_gen(BoundsT const& min__, BoundsT const& max__)
+ : min_(min__)
+ , max_(max__) {}
+
+ template <typename DerivedT>
+ bounded<DerivedT, BoundsT>
+ operator[](parser<DerivedT> const& p) const
+ { return bounded<DerivedT, BoundsT>(p.derived(), min_, max_); }
+
+ BoundsT min_, max_;
+ };
+
+ template <typename BoundsT>
+ inline bounded_gen<BoundsT>
+ limit_d(BoundsT const& min_, BoundsT const& max_)
+ { return bounded_gen<BoundsT>(min_, max_); }
+
+}} // namespace boost::spirit
+
+#endif
+
diff --git a/boost/boost/spirit/core/composite/epsilon.hpp b/boost/boost/spirit/core/composite/epsilon.hpp
new file mode 100644
index 00000000000..71d962e136e
--- /dev/null
+++ b/boost/boost/spirit/core/composite/epsilon.hpp
@@ -0,0 +1,272 @@
+/*=============================================================================
+ Copyright (c) 1998-2003 Joel de Guzman
+ Copyright (c) 2002-2003 Martin Wille
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_EPSILON_HPP
+#define BOOST_SPIRIT_EPSILON_HPP
+
+////////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/core/parser.hpp>
+#include <boost/spirit/meta/parser_traits.hpp>
+#include <boost/spirit/core/composite/composite.hpp>
+#include <boost/spirit/core/composite/no_actions.hpp>
+
+////////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// condition_parser class
+//
+// handles expresions of the form
+//
+// epsilon_p(cond)
+//
+// where cond is a function or a functor that returns a value suitable
+// to be used in boolean context. The expression returns a parser that
+// returns an empty match when the condition evaluates to true.
+//
+///////////////////////////////////////////////////////////////////////////////
+ template <typename CondT, bool positive_ = true>
+ struct condition_parser : parser<condition_parser<CondT, positive_> >
+ {
+ typedef condition_parser<CondT, positive_> self_t;
+
+ // not explicit! (needed for implementation of if_p et al.)
+ condition_parser(CondT const& cond_) : cond(cond_) {}
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ if (positive_ == bool(cond())) // allow cond to return int
+ return scan.empty_match();
+ else
+ return scan.no_match();
+ }
+
+ condition_parser<CondT, !positive_>
+ negate() const
+ { return condition_parser<CondT, !positive_>(cond); }
+
+ private:
+
+ CondT cond;
+ };
+
+#if BOOST_WORKAROUND(BOOST_MSVC, == 1310) || \
+ BOOST_WORKAROUND(BOOST_MSVC, == 1400) || \
+ BOOST_WORKAROUND(__SUNPRO_CC, <= 0x580)
+// VC 7.1, VC8 and Sun CC <= 5.8 do not support general
+// expressions of non-type template parameters in instantiations
+ template <typename CondT>
+ inline condition_parser<CondT, false>
+ operator~(condition_parser<CondT, true> const& p)
+ { return p.negate(); }
+
+ template <typename CondT>
+ inline condition_parser<CondT, true>
+ operator~(condition_parser<CondT, false> const& p)
+ { return p.negate(); }
+#else // BOOST_WORKAROUND(BOOST_MSVC, == 1310) || == 1400
+ template <typename CondT, bool positive>
+ inline condition_parser<CondT, !positive>
+ operator~(condition_parser<CondT, positive> const& p)
+ { return p.negate(); }
+#endif // BOOST_WORKAROUND(BOOST_MSVC, == 1310) || == 1400
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// empty_match_parser class
+//
+// handles expressions of the form
+// epsilon_p(subject)
+// where subject is a parser. The expresion returns a composite
+// parser that returns an empty match if the subject parser matches.
+//
+///////////////////////////////////////////////////////////////////////////////
+ struct empty_match_parser_gen;
+ struct negated_empty_match_parser_gen;
+
+ template <typename SubjectT>
+ struct negated_empty_match_parser; // Forward declaration
+
+ template<typename SubjectT>
+ struct empty_match_parser
+ : unary<SubjectT, parser<empty_match_parser<SubjectT> > >
+ {
+ typedef empty_match_parser<SubjectT> self_t;
+ typedef unary<SubjectT, parser<self_t> > base_t;
+ typedef unary_parser_category parser_category_t;
+ typedef empty_match_parser_gen parser_genererator_t;
+ typedef self_t embed_t;
+
+ explicit empty_match_parser(SubjectT const& p) : base_t(p) {}
+
+ template <typename ScannerT>
+ struct result
+ { typedef typename match_result<ScannerT, nil_t>::type type; };
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ typename ScannerT::iterator_t save(scan.first);
+
+ typedef typename no_actions_scanner<ScannerT>::policies_t
+ policies_t;
+
+ bool matches = this->subject().parse(
+ scan.change_policies(policies_t(scan)));
+ if (matches)
+ {
+ scan.first = save; // reset the position
+ return scan.empty_match();
+ }
+ else
+ {
+ return scan.no_match();
+ }
+ }
+
+ negated_empty_match_parser<SubjectT>
+ negate() const
+ { return negated_empty_match_parser<SubjectT>(this->subject()); }
+ };
+
+ template<typename SubjectT>
+ struct negated_empty_match_parser
+ : public unary<SubjectT, parser<negated_empty_match_parser<SubjectT> > >
+ {
+ typedef negated_empty_match_parser<SubjectT> self_t;
+ typedef unary<SubjectT, parser<self_t> > base_t;
+ typedef unary_parser_category parser_category_t;
+ typedef negated_empty_match_parser_gen parser_genererator_t;
+
+ explicit negated_empty_match_parser(SubjectT const& p) : base_t(p) {}
+
+ template <typename ScannerT>
+ struct result
+ { typedef typename match_result<ScannerT, nil_t>::type type; };
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ typename ScannerT::iterator_t save(scan.first);
+
+ typedef typename no_actions_scanner<ScannerT>::policies_t
+ policies_t;
+
+ bool matches = this->subject().parse(
+ scan.change_policies(policies_t(scan)));
+ if (!matches)
+ {
+ scan.first = save; // reset the position
+ return scan.empty_match();
+ }
+ else
+ {
+ return scan.no_match();
+ }
+ }
+
+ empty_match_parser<SubjectT>
+ negate() const
+ { return empty_match_parser<SubjectT>(this->subject()); }
+ };
+
+ struct empty_match_parser_gen
+ {
+ template <typename SubjectT>
+ struct result
+ { typedef empty_match_parser<SubjectT> type; };
+
+ template <typename SubjectT>
+ static empty_match_parser<SubjectT>
+ generate(parser<SubjectT> const& subject)
+ { return empty_match_parser<SubjectT>(subject.derived()); }
+ };
+
+ struct negated_empty_match_parser_gen
+ {
+ template <typename SubjectT>
+ struct result
+ { typedef negated_empty_match_parser<SubjectT> type; };
+
+ template <typename SubjectT>
+ static negated_empty_match_parser<SubjectT>
+ generate(parser<SubjectT> const& subject)
+ { return negated_empty_match_parser<SubjectT>(subject.derived()); }
+ };
+
+ //////////////////////////////
+ template <typename SubjectT>
+ inline negated_empty_match_parser<SubjectT>
+ operator~(empty_match_parser<SubjectT> const& p)
+ { return p.negate(); }
+
+ template <typename SubjectT>
+ inline empty_match_parser<SubjectT>
+ operator~(negated_empty_match_parser<SubjectT> const& p)
+ { return p.negate(); }
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// epsilon_ parser and parser generator class
+//
+// Operates as primitive parser that always matches an empty sequence.
+//
+// Also operates as a parser generator. According to the type of the
+// argument an instance of empty_match_parser<> (when the argument is
+// a parser) or condition_parser<> (when the argument is not a parser)
+// is returned by operator().
+//
+///////////////////////////////////////////////////////////////////////////////
+ namespace impl
+ {
+ template <typename SubjectT>
+ struct epsilon_selector
+ {
+ typedef typename as_parser<SubjectT>::type subject_t;
+ typedef typename
+ mpl::if_<
+ is_parser<subject_t>
+ ,empty_match_parser<subject_t>
+ ,condition_parser<subject_t>
+ >::type type;
+ };
+ }
+
+ struct epsilon_parser : public parser<epsilon_parser>
+ {
+ typedef epsilon_parser self_t;
+
+ epsilon_parser() {}
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ { return scan.empty_match(); }
+
+ template <typename SubjectT>
+ typename impl::epsilon_selector<SubjectT>::type
+ operator()(SubjectT const& subject) const
+ {
+ typedef typename impl::epsilon_selector<SubjectT>::type result_t;
+ return result_t(subject);
+ }
+ };
+
+ epsilon_parser const epsilon_p = epsilon_parser();
+ epsilon_parser const eps_p = epsilon_parser();
+
+///////////////////////////////////////////////////////////////////////////////
+}} // namespace boost::spirit
+
+#endif
diff --git a/boost/boost/spirit/core/composite/exclusive_or.hpp b/boost/boost/spirit/core/composite/exclusive_or.hpp
new file mode 100644
index 00000000000..e7af4530d1d
--- /dev/null
+++ b/boost/boost/spirit/core/composite/exclusive_or.hpp
@@ -0,0 +1,138 @@
+/*=============================================================================
+ Copyright (c) 1998-2003 Joel de Guzman
+ Copyright (c) 2001 Daniel Nuffer
+ Copyright (c) 2002 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_EXCLUSIVE_OR_HPP)
+#define BOOST_SPIRIT_EXCLUSIVE_OR_HPP
+
+#include <boost/spirit/core/parser.hpp>
+#include <boost/spirit/core/primitives/primitives.hpp>
+#include <boost/spirit/core/composite/composite.hpp>
+#include <boost/spirit/meta/as_parser.hpp>
+
+namespace boost { namespace spirit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // exclusive_or class
+ //
+ // Handles expressions of the form:
+ //
+ // a ^ b
+ //
+ // where a and b are parsers. The expression returns a composite
+ // parser that matches a or b but not both. One (not both) of the
+ // operands may be a literal char, wchar_t or a primitive string
+ // char const*, wchar_t const*.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ struct exclusive_or_parser_gen;
+
+ template <typename A, typename B>
+ struct exclusive_or
+ : public binary<A, B, parser<exclusive_or<A, B> > >
+ {
+ typedef exclusive_or<A, B> self_t;
+ typedef binary_parser_category parser_category_t;
+ typedef exclusive_or_parser_gen parser_generator_t;
+ typedef binary<A, B, parser<self_t> > base_t;
+
+ exclusive_or(A const& a, B const& b)
+ : base_t(a, b) {}
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ typedef typename parser_result<self_t, ScannerT>::type result_t;
+ typedef typename ScannerT::iterator_t iterator_t;
+
+ iterator_t save = scan.first;
+ result_t l = this->left().parse(scan);
+ std::swap(save, scan.first);
+ result_t r = this->right().parse(scan);
+
+ if (l ? !bool(r) : bool(r))
+ {
+ if (l)
+ scan.first = save;
+ return l ? l : r;
+ }
+
+ return scan.no_match();
+ }
+ };
+
+ struct exclusive_or_parser_gen
+ {
+ template <typename A, typename B>
+ struct result
+ {
+ typedef
+ exclusive_or<
+ typename as_parser<A>::type
+ , typename as_parser<B>::type
+ >
+ type;
+ };
+
+ template <typename A, typename B>
+ static exclusive_or<
+ typename as_parser<A>::type
+ , typename as_parser<B>::type
+ >
+ generate(A const& a, B const& b)
+ {
+ return exclusive_or<BOOST_DEDUCED_TYPENAME as_parser<A>::type,
+ BOOST_DEDUCED_TYPENAME as_parser<B>::type>
+ (as_parser<A>::convert(a), as_parser<B>::convert(b));
+ }
+ };
+
+ template <typename A, typename B>
+ exclusive_or<A, B>
+ operator^(parser<A> const& a, parser<B> const& b);
+
+ template <typename A>
+ exclusive_or<A, chlit<char> >
+ operator^(parser<A> const& a, char b);
+
+ template <typename B>
+ exclusive_or<chlit<char>, B>
+ operator^(char a, parser<B> const& b);
+
+ template <typename A>
+ exclusive_or<A, strlit<char const*> >
+ operator^(parser<A> const& a, char const* b);
+
+ template <typename B>
+ exclusive_or<strlit<char const*>, B>
+ operator^(char const* a, parser<B> const& b);
+
+ template <typename A>
+ exclusive_or<A, chlit<wchar_t> >
+ operator^(parser<A> const& a, wchar_t b);
+
+ template <typename B>
+ exclusive_or<chlit<wchar_t>, B>
+ operator^(wchar_t a, parser<B> const& b);
+
+ template <typename A>
+ exclusive_or<A, strlit<wchar_t const*> >
+ operator^(parser<A> const& a, wchar_t const* b);
+
+ template <typename B>
+ exclusive_or<strlit<wchar_t const*>, B>
+ operator^(wchar_t const* a, parser<B> const& b);
+
+}} // namespace boost::spirit
+
+#endif
+
+#include <boost/spirit/core/composite/impl/exclusive_or.ipp>
diff --git a/boost/boost/spirit/core/composite/impl/alternative.ipp b/boost/boost/spirit/core/composite/impl/alternative.ipp
new file mode 100644
index 00000000000..d03901cde23
--- /dev/null
+++ b/boost/boost/spirit/core/composite/impl/alternative.ipp
@@ -0,0 +1,86 @@
+/*=============================================================================
+ Copyright (c) 1998-2003 Joel de Guzman
+ Copyright (c) 2001 Daniel Nuffer
+ Copyright (c) 2002 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_ALTERNATIVE_IPP)
+#define BOOST_SPIRIT_ALTERNATIVE_IPP
+
+namespace boost { namespace spirit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // alternative class implementation
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename A, typename B>
+ inline alternative<A, B>
+ operator|(parser<A> const& a, parser<B> const& b)
+ {
+ return alternative<A, B>(a.derived(), b.derived());
+ }
+
+ template <typename A>
+ inline alternative<A, chlit<char> >
+ operator|(parser<A> const& a, char b)
+ {
+ return alternative<A, chlit<char> >(a.derived(), b);
+ }
+
+ template <typename B>
+ inline alternative<chlit<char>, B>
+ operator|(char a, parser<B> const& b)
+ {
+ return alternative<chlit<char>, B>(a, b.derived());
+ }
+
+ template <typename A>
+ inline alternative<A, strlit<char const*> >
+ operator|(parser<A> const& a, char const* b)
+ {
+ return alternative<A, strlit<char const*> >(a.derived(), b);
+ }
+
+ template <typename B>
+ inline alternative<strlit<char const*>, B>
+ operator|(char const* a, parser<B> const& b)
+ {
+ return alternative<strlit<char const*>, B>(a, b.derived());
+ }
+
+ template <typename A>
+ inline alternative<A, chlit<wchar_t> >
+ operator|(parser<A> const& a, wchar_t b)
+ {
+ return alternative<A, chlit<wchar_t> >(a.derived(), b);
+ }
+
+ template <typename B>
+ inline alternative<chlit<wchar_t>, B>
+ operator|(wchar_t a, parser<B> const& b)
+ {
+ return alternative<chlit<wchar_t>, B>(a, b.derived());
+ }
+
+ template <typename A>
+ inline alternative<A, strlit<wchar_t const*> >
+ operator|(parser<A> const& a, wchar_t const* b)
+ {
+ return alternative<A, strlit<wchar_t const*> >(a.derived(), b);
+ }
+
+ template <typename B>
+ inline alternative<strlit<wchar_t const*>, B>
+ operator|(wchar_t const* a, parser<B> const& b)
+ {
+ return alternative<strlit<wchar_t const*>, B>(a, b.derived());
+ }
+
+}} // namespace boost::spirit
+
+#endif
diff --git a/boost/boost/spirit/core/composite/impl/difference.ipp b/boost/boost/spirit/core/composite/impl/difference.ipp
new file mode 100644
index 00000000000..533ec343e54
--- /dev/null
+++ b/boost/boost/spirit/core/composite/impl/difference.ipp
@@ -0,0 +1,86 @@
+/*=============================================================================
+ Copyright (c) 1998-2003 Joel de Guzman
+ Copyright (c) 2001 Daniel Nuffer
+ Copyright (c) 2002 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_DIFFERENCE_IPP)
+#define BOOST_SPIRIT_DIFFERENCE_IPP
+
+namespace boost { namespace spirit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // difference class implementation
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename A, typename B>
+ inline difference<A, B>
+ operator-(parser<A> const& a, parser<B> const& b)
+ {
+ return difference<A, B>(a.derived(), b.derived());
+ }
+
+ template <typename A>
+ inline difference<A, chlit<char> >
+ operator-(parser<A> const& a, char b)
+ {
+ return difference<A, chlit<char> >(a.derived(), b);
+ }
+
+ template <typename B>
+ inline difference<chlit<char>, B>
+ operator-(char a, parser<B> const& b)
+ {
+ return difference<chlit<char>, B>(a, b.derived());
+ }
+
+ template <typename A>
+ inline difference<A, strlit<char const*> >
+ operator-(parser<A> const& a, char const* b)
+ {
+ return difference<A, strlit<char const*> >(a.derived(), b);
+ }
+
+ template <typename B>
+ inline difference<strlit<char const*>, B>
+ operator-(char const* a, parser<B> const& b)
+ {
+ return difference<strlit<char const*>, B>(a, b.derived());
+ }
+
+ template <typename A>
+ inline difference<A, chlit<wchar_t> >
+ operator-(parser<A> const& a, wchar_t b)
+ {
+ return difference<A, chlit<wchar_t> >(a.derived(), b);
+ }
+
+ template <typename B>
+ inline difference<chlit<wchar_t>, B>
+ operator-(wchar_t a, parser<B> const& b)
+ {
+ return difference<chlit<wchar_t>, B>(a, b.derived());
+ }
+
+ template <typename A>
+ inline difference<A, strlit<wchar_t const*> >
+ operator-(parser<A> const& a, wchar_t const* b)
+ {
+ return difference<A, strlit<wchar_t const*> >(a.derived(), b);
+ }
+
+ template <typename B>
+ inline difference<strlit<wchar_t const*>, B>
+ operator-(wchar_t const* a, parser<B> const& b)
+ {
+ return difference<strlit<wchar_t const*>, B>(a, b.derived());
+ }
+
+}} // namespace boost::spirit
+
+#endif
diff --git a/boost/boost/spirit/core/composite/impl/directives.ipp b/boost/boost/spirit/core/composite/impl/directives.ipp
new file mode 100644
index 00000000000..48cc1d10ed5
--- /dev/null
+++ b/boost/boost/spirit/core/composite/impl/directives.ipp
@@ -0,0 +1,370 @@
+/*=============================================================================
+ Copyright (c) 1998-2003 Joel de Guzman
+ Copyright (c) 2001 Daniel Nuffer
+ Copyright (c) 2001 Bruce Florman
+ Copyright (c) 2002 Raghavendra Satish
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_DIRECTIVES_IPP)
+#define BOOST_SPIRIT_DIRECTIVES_IPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/core/scanner/skipper.hpp>
+
+namespace boost { namespace spirit {
+
+ template <typename BaseT>
+ struct no_skipper_iteration_policy;
+
+ template <typename BaseT>
+ struct inhibit_case_iteration_policy;
+
+ template <typename A, typename B>
+ struct alternative;
+
+ template <typename A, typename B>
+ struct longest_alternative;
+
+ template <typename A, typename B>
+ struct shortest_alternative;
+
+ namespace impl
+ {
+ template <typename RT, typename ST, typename ScannerT, typename BaseT>
+ inline RT
+ contiguous_parser_parse(
+ ST const& s,
+ ScannerT const& scan,
+ skipper_iteration_policy<BaseT> const&)
+ {
+ typedef scanner_policies<
+ no_skipper_iteration_policy<
+ BOOST_DEDUCED_TYPENAME ScannerT::iteration_policy_t>,
+ BOOST_DEDUCED_TYPENAME ScannerT::match_policy_t,
+ BOOST_DEDUCED_TYPENAME ScannerT::action_policy_t
+ > policies_t;
+
+ scan.skip(scan);
+ RT hit = s.parse(scan.change_policies(policies_t(scan)));
+ // We will not do a post skip!!!
+ return hit;
+ }
+
+ template <typename RT, typename ST, typename ScannerT, typename BaseT>
+ inline RT
+ contiguous_parser_parse(
+ ST const& s,
+ ScannerT const& scan,
+ no_skipper_iteration_policy<BaseT> const&)
+ {
+ return s.parse(scan);
+ }
+
+ template <typename RT, typename ST, typename ScannerT>
+ inline RT
+ contiguous_parser_parse(
+ ST const& s,
+ ScannerT const& scan,
+ iteration_policy const&)
+ {
+ return s.parse(scan);
+ }
+
+ template <
+ typename RT,
+ typename ParserT,
+ typename ScannerT,
+ typename BaseT>
+ inline RT
+ implicit_lexeme_parse(
+ ParserT const& p,
+ ScannerT const& scan,
+ skipper_iteration_policy<BaseT> const&)
+ {
+ typedef scanner_policies<
+ no_skipper_iteration_policy<
+ BOOST_DEDUCED_TYPENAME ScannerT::iteration_policy_t>,
+ BOOST_DEDUCED_TYPENAME ScannerT::match_policy_t,
+ BOOST_DEDUCED_TYPENAME ScannerT::action_policy_t
+ > policies_t;
+
+ scan.skip(scan);
+ RT hit = p.parse_main(scan.change_policies(policies_t(scan)));
+ // We will not do a post skip!!!
+ return hit;
+ }
+
+ template <
+ typename RT,
+ typename ParserT,
+ typename ScannerT,
+ typename BaseT>
+ inline RT
+ implicit_lexeme_parse(
+ ParserT const& p,
+ ScannerT const& scan,
+ no_skipper_iteration_policy<BaseT> const&)
+ {
+ return p.parse_main(scan);
+ }
+
+ template <typename RT, typename ParserT, typename ScannerT>
+ inline RT
+ implicit_lexeme_parse(
+ ParserT const& p,
+ ScannerT const& scan,
+ iteration_policy const&)
+ {
+ return p.parse_main(scan);
+ }
+
+ template <typename RT, typename ST, typename ScannerT>
+ inline RT
+ inhibit_case_parser_parse(
+ ST const& s,
+ ScannerT const& scan,
+ iteration_policy const&)
+ {
+ typedef scanner_policies<
+ inhibit_case_iteration_policy<
+ BOOST_DEDUCED_TYPENAME ScannerT::iteration_policy_t>,
+ BOOST_DEDUCED_TYPENAME ScannerT::match_policy_t,
+ BOOST_DEDUCED_TYPENAME ScannerT::action_policy_t
+ > policies_t;
+
+ return s.parse(scan.change_policies(policies_t(scan)));
+ }
+
+ template <typename RT, typename ST, typename ScannerT, typename BaseT>
+ inline RT
+ inhibit_case_parser_parse(
+ ST const& s,
+ ScannerT const& scan,
+ inhibit_case_iteration_policy<BaseT> const&)
+ {
+ return s.parse(scan);
+ }
+
+#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+ ///////////////////////////////////////////////////////////////////////
+ //
+ // from spirit 1.1 (copyright (c) 2001 Bruce Florman)
+ // various workarounds to support longest and shortest directives
+ //
+ ///////////////////////////////////////////////////////////////////////
+ template <typename T>
+ struct is_alternative
+ {
+ // Determine at compile time (without partial specialization)
+ // whether a given type is an instance of the alternative<A,B>
+
+ static T t();
+ template <typename A, typename B>
+ static char test_(alternative<A, B> const&); // no implementation
+ static int test_(...); // no implementation
+ enum { r = sizeof(char) == sizeof(test_(t())) };
+ typedef mpl::bool_<r> value;
+ };
+
+ template <typename T> struct select_to_longest;
+
+ template <typename T>
+ struct to_longest_alternative
+ {
+ typedef typename select_to_longest<T>::result_t result_t;
+ typedef typename select_to_longest<T>::plain_t plain_t;
+ typedef typename select_to_longest<T>::choose_t choose_t;
+ static result_t convert(T const& a);
+ };
+
+ template <typename T>
+ struct to_longest_generic
+ {
+ typedef T const& result_t;
+ typedef T plain_t;
+ typedef mpl::false_ choose_t;
+ };
+
+ template <typename T>
+ inline T const&
+ to_longest_convert(T const& a, mpl::false_)
+ { return a; }
+
+ template <typename T>
+ struct to_longest_recursive
+ {
+ typedef typename to_longest_alternative<
+ typename T::left_t>::plain_t a_t;
+ typedef typename to_longest_alternative<
+ typename T::right_t>::plain_t b_t;
+
+ typedef longest_alternative<a_t, b_t> result_t;
+
+ typedef result_t plain_t;
+ typedef mpl::true_ choose_t;
+ };
+
+ template <typename A, typename B>
+ inline typename to_longest_alternative<alternative<A, B> >::result_t
+ to_longest_convert(alternative<A, B> const& alt, mpl::true_)
+ {
+ typedef typename to_longest_alternative<
+ alternative<A, B> >::result_t result_t;
+ return result_t(
+ to_longest_alternative<A>::convert(alt.left()),
+ to_longest_alternative<B>::convert(alt.right()));
+ }
+
+ template <typename T>
+ inline typename to_longest_alternative<T>::result_t
+ to_longest_alternative<T>::convert(T const& a)
+ {
+ return to_longest_convert(
+ a, to_longest_alternative<T>::choose_t());
+ }
+
+ template <typename T>
+ struct select_to_longest
+ {
+ typedef typename mpl::if_<
+ is_alternative<T> // IF
+ , to_longest_recursive<T> // THEN
+ , to_longest_generic<T> // ELSE
+ >::type type;
+
+ typedef typename select_to_longest::type::result_t result_t;
+ typedef typename select_to_longest::type::plain_t plain_t;
+ typedef typename select_to_longest::type::choose_t choose_t;
+ };
+
+ template <typename T> struct select_to_shortest;
+
+ template <typename T>
+ struct to_shortest_alternative
+ {
+ typedef typename select_to_shortest<T>::result_t result_t;
+ typedef typename select_to_shortest<T>::plain_t plain_t;
+ typedef typename select_to_shortest<T>::choose_t choose_t;
+ static result_t convert(T const& a);
+ };
+
+ template <typename T>
+ struct to_shortest_generic
+ {
+ typedef T const& result_t;
+ typedef T plain_t;
+ typedef mpl::false_ choose_t;
+ };
+
+ template <typename T>
+ inline T const&
+ to_shortest_convert(T const& a, mpl::false_) { return a; }
+
+ template <typename T>
+ struct to_shortest_recursive
+ {
+ typedef typename to_shortest_alternative<
+ typename T::left_t>::plain_t a_t;
+ typedef typename to_shortest_alternative<
+ typename T::right_t>::plain_t b_t;
+
+ typedef shortest_alternative<a_t, b_t> result_t;
+
+ typedef result_t plain_t;
+ typedef mpl::true_ choose_t;
+ };
+
+ template <typename A, typename B>
+ inline typename to_shortest_alternative<alternative<A, B> >::result_t
+ to_shortest_convert(alternative<A, B> const& alt, mpl::true_)
+ {
+ typedef typename to_shortest_alternative<
+ alternative<A, B> >::result_t result_t;
+ return result_t(
+ to_shortest_alternative<A>::convert(alt.left()),
+ to_shortest_alternative<B>::convert(alt.right()));
+ }
+
+ template <typename T>
+ inline typename to_shortest_alternative<T>::result_t
+ to_shortest_alternative<T>::convert(T const& a)
+ {
+ return to_shortest_convert(
+ a, to_shortest_alternative<T>::choose_t());
+ }
+
+ template <typename T>
+ struct select_to_shortest
+ {
+ typedef typename mpl::if_<
+ is_alternative<T> // IF
+ , to_shortest_recursive<T> // THEN
+ , to_shortest_generic<T> // ELSE
+ >::type type;
+
+ typedef typename select_to_shortest::type::result_t result_t;
+ typedef typename select_to_shortest::type::plain_t plain_t;
+ typedef typename select_to_shortest::type::choose_t choose_t;
+ };
+#else
+ template <typename T>
+ struct to_longest_alternative
+ {
+ typedef T result_t;
+ static result_t const&
+ convert(T const& a) // Special (end) case
+ { return a; }
+ };
+
+ template <typename A, typename B>
+ struct to_longest_alternative<alternative<A, B> >
+ {
+ typedef typename to_longest_alternative<A>::result_t a_t;
+ typedef typename to_longest_alternative<B>::result_t b_t;
+ typedef longest_alternative<a_t, b_t> result_t;
+
+ static result_t
+ convert(alternative<A, B> const& alt) // Recursive case
+ {
+ return result_t(
+ to_longest_alternative<A>::convert(alt.left()),
+ to_longest_alternative<B>::convert(alt.right()));
+ }
+ };
+
+ template <typename T>
+ struct to_shortest_alternative
+ {
+ typedef T result_t;
+ static result_t const&
+ convert(T const& a) // Special (end) case
+ { return a; }
+ };
+
+ template <typename A, typename B>
+ struct to_shortest_alternative<alternative<A, B> >
+ {
+ typedef typename to_shortest_alternative<A>::result_t a_t;
+ typedef typename to_shortest_alternative<B>::result_t b_t;
+ typedef shortest_alternative<a_t, b_t> result_t;
+
+ static result_t
+ convert(alternative<A, B> const& alt) // Recursive case
+ {
+ return result_t(
+ to_shortest_alternative<A>::convert(alt.left()),
+ to_shortest_alternative<B>::convert(alt.right()));
+ }
+ };
+#endif
+ }
+
+}} // namespace boost::spirit
+
+#endif
+
diff --git a/boost/boost/spirit/core/composite/impl/exclusive_or.ipp b/boost/boost/spirit/core/composite/impl/exclusive_or.ipp
new file mode 100644
index 00000000000..79a607dce17
--- /dev/null
+++ b/boost/boost/spirit/core/composite/impl/exclusive_or.ipp
@@ -0,0 +1,86 @@
+/*=============================================================================
+ Copyright (c) 1998-2003 Joel de Guzman
+ Copyright (c) 2001 Daniel Nuffer
+ Copyright (c) 2002 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_EXCLUSIVE_OR_IPP)
+#define BOOST_SPIRIT_EXCLUSIVE_OR_IPP
+
+namespace boost { namespace spirit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // exclusive_or class implementation
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename A, typename B>
+ inline exclusive_or<A, B>
+ operator^(parser<A> const& a, parser<B> const& b)
+ {
+ return exclusive_or<A, B>(a.derived(), b.derived());
+ }
+
+ template <typename A>
+ inline exclusive_or<A, chlit<char> >
+ operator^(parser<A> const& a, char b)
+ {
+ return exclusive_or<A, chlit<char> >(a.derived(), b);
+ }
+
+ template <typename B>
+ inline exclusive_or<chlit<char>, B>
+ operator^(char a, parser<B> const& b)
+ {
+ return exclusive_or<chlit<char>, B>(a, b.derived());
+ }
+
+ template <typename A>
+ inline exclusive_or<A, strlit<char const*> >
+ operator^(parser<A> const& a, char const* b)
+ {
+ return exclusive_or<A, strlit<char const*> >(a.derived(), b);
+ }
+
+ template <typename B>
+ inline exclusive_or<strlit<char const*>, B>
+ operator^(char const* a, parser<B> const& b)
+ {
+ return exclusive_or<strlit<char const*>, B>(a, b.derived());
+ }
+
+ template <typename A>
+ inline exclusive_or<A, chlit<wchar_t> >
+ operator^(parser<A> const& a, wchar_t b)
+ {
+ return exclusive_or<A, chlit<wchar_t> >(a.derived(), b);
+ }
+
+ template <typename B>
+ inline exclusive_or<chlit<wchar_t>, B>
+ operator^(wchar_t a, parser<B> const& b)
+ {
+ return exclusive_or<chlit<wchar_t>, B>(a, b.derived());
+ }
+
+ template <typename A>
+ inline exclusive_or<A, strlit<wchar_t const*> >
+ operator^(parser<A> const& a, wchar_t const* b)
+ {
+ return exclusive_or<A, strlit<wchar_t const*> >(a.derived(), b);
+ }
+
+ template <typename B>
+ inline exclusive_or<strlit<wchar_t const*>, B>
+ operator^(wchar_t const* a, parser<B> const& b)
+ {
+ return exclusive_or<strlit<wchar_t const*>, B>(a, b.derived());
+ }
+
+}} // namespace boost::spirit
+
+#endif
diff --git a/boost/boost/spirit/core/composite/impl/intersection.ipp b/boost/boost/spirit/core/composite/impl/intersection.ipp
new file mode 100644
index 00000000000..5f1f51b2835
--- /dev/null
+++ b/boost/boost/spirit/core/composite/impl/intersection.ipp
@@ -0,0 +1,86 @@
+/*=============================================================================
+ Copyright (c) 1998-2003 Joel de Guzman
+ Copyright (c) 2001 Daniel Nuffer
+ Copyright (c) 2002 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_INTERSECTION_IPP)
+#define BOOST_SPIRIT_INTERSECTION_IPP
+
+namespace boost { namespace spirit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // intersection class implementation
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename A, typename B>
+ inline intersection<A, B>
+ operator&(parser<A> const& a, parser<B> const& b)
+ {
+ return intersection<A, B>(a.derived(), b.derived());
+ }
+
+ template <typename A>
+ inline intersection<A, chlit<char> >
+ operator&(parser<A> const& a, char b)
+ {
+ return intersection<A, chlit<char> >(a.derived(), b);
+ }
+
+ template <typename B>
+ inline intersection<chlit<char>, B>
+ operator&(char a, parser<B> const& b)
+ {
+ return intersection<chlit<char>, B>(a, b.derived());
+ }
+
+ template <typename A>
+ inline intersection<A, strlit<char const*> >
+ operator&(parser<A> const& a, char const* b)
+ {
+ return intersection<A, strlit<char const*> >(a.derived(), b);
+ }
+
+ template <typename B>
+ inline intersection<strlit<char const*>, B>
+ operator&(char const* a, parser<B> const& b)
+ {
+ return intersection<strlit<char const*>, B>(a, b.derived());
+ }
+
+ template <typename A>
+ inline intersection<A, chlit<wchar_t> >
+ operator&(parser<A> const& a, wchar_t b)
+ {
+ return intersection<A, chlit<wchar_t> >(a.derived(), b);
+ }
+
+ template <typename B>
+ inline intersection<chlit<wchar_t>, B>
+ operator&(wchar_t a, parser<B> const& b)
+ {
+ return intersection<chlit<wchar_t>, B>(a, b.derived());
+ }
+
+ template <typename A>
+ inline intersection<A, strlit<wchar_t const*> >
+ operator&(parser<A> const& a, wchar_t const* b)
+ {
+ return intersection<A, strlit<wchar_t const*> >(a.derived(), b);
+ }
+
+ template <typename B>
+ inline intersection<strlit<wchar_t const*>, B>
+ operator&(wchar_t const* a, parser<B> const& b)
+ {
+ return intersection<strlit<wchar_t const*>, B>(a, b.derived());
+ }
+
+}} // namespace boost::spirit
+
+#endif
diff --git a/boost/boost/spirit/core/composite/impl/kleene_star.ipp b/boost/boost/spirit/core/composite/impl/kleene_star.ipp
new file mode 100644
index 00000000000..1ed639fb0c3
--- /dev/null
+++ b/boost/boost/spirit/core/composite/impl/kleene_star.ipp
@@ -0,0 +1,30 @@
+/*=============================================================================
+ Copyright (c) 1998-2003 Joel de Guzman
+ Copyright (c) 2001 Daniel Nuffer
+ Copyright (c) 2002 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_KLEENE_STAR_IPP)
+#define BOOST_SPIRIT_KLEENE_STAR_IPP
+
+namespace boost { namespace spirit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // kleene_star class implementation
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename S>
+ inline kleene_star<S>
+ operator*(parser<S> const& a)
+ {
+ return kleene_star<S>(a.derived());
+ }
+
+}} // namespace boost::spirit
+
+#endif
diff --git a/boost/boost/spirit/core/composite/impl/list.ipp b/boost/boost/spirit/core/composite/impl/list.ipp
new file mode 100644
index 00000000000..36ecbc56fe0
--- /dev/null
+++ b/boost/boost/spirit/core/composite/impl/list.ipp
@@ -0,0 +1,89 @@
+/*=============================================================================
+ Copyright (c) 1998-2003 Joel de Guzman
+ Copyright (c) 2001 Daniel Nuffer
+ Copyright (c) 2002 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_LIST_IPP)
+#define BOOST_SPIRIT_LIST_IPP
+
+namespace boost { namespace spirit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // operator% is defined as:
+ // a % b ---> a >> *(b >> a)
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename A, typename B>
+ inline sequence<A, kleene_star<sequence<B, A> > >
+ operator%(parser<A> const& a, parser<B> const& b)
+ {
+ return a.derived() >> *(b.derived() >> a.derived());
+ }
+
+ template <typename A>
+ inline sequence<A, kleene_star<sequence<chlit<char>, A> > >
+ operator%(parser<A> const& a, char b)
+ {
+ return a.derived() >> *(b >> a.derived());
+ }
+
+ template <typename B>
+ inline sequence<chlit<char>, kleene_star<sequence<B, chlit<char> > > >
+ operator%(char a, parser<B> const& b)
+ {
+ return a >> *(b.derived() >> a);
+ }
+
+ template <typename A>
+ inline sequence<A, kleene_star<sequence<strlit<char const*>, A> > >
+ operator%(parser<A> const& a, char const* b)
+ {
+ return a.derived() >> *(b >> a.derived());
+ }
+
+ template <typename B>
+ inline sequence<strlit<char const*>,
+ kleene_star<sequence<B, strlit<char const*> > > >
+ operator%(char const* a, parser<B> const& b)
+ {
+ return a >> *(b.derived() >> a);
+ }
+
+ template <typename A>
+ inline sequence<A, kleene_star<sequence<chlit<wchar_t>, A> > >
+ operator%(parser<A> const& a, wchar_t b)
+ {
+ return a.derived() >> *(b >> a.derived());
+ }
+
+ template <typename B>
+ inline sequence<chlit<wchar_t>, kleene_star<sequence<B, chlit<wchar_t> > > >
+ operator%(wchar_t a, parser<B> const& b)
+ {
+ return a >> *(b.derived() >> a);
+ }
+
+ template <typename A>
+ inline sequence<A, kleene_star<sequence<strlit<wchar_t const*>, A> > >
+ operator%(parser<A> const& a, wchar_t const* b)
+ {
+ return a.derived() >> *(b >> a.derived());
+ }
+
+ template <typename B>
+ inline sequence<strlit<wchar_t const*>,
+ kleene_star<sequence<B, strlit<wchar_t const*> > > >
+ operator%(wchar_t const* a, parser<B> const& b)
+ {
+ return a >> *(b.derived() >> a);
+ }
+
+}} // namespace boost::spirit
+
+#endif
diff --git a/boost/boost/spirit/core/composite/impl/optional.ipp b/boost/boost/spirit/core/composite/impl/optional.ipp
new file mode 100644
index 00000000000..7bbe6b40650
--- /dev/null
+++ b/boost/boost/spirit/core/composite/impl/optional.ipp
@@ -0,0 +1,30 @@
+/*=============================================================================
+ Copyright (c) 1998-2003 Joel de Guzman
+ Copyright (c) 2001 Daniel Nuffer
+ Copyright (c) 2002 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_OPTIONAL_IPP)
+#define BOOST_SPIRIT_OPTIONAL_IPP
+
+namespace boost { namespace spirit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // optional class implementation
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename S>
+ optional<S>
+ operator!(parser<S> const& a)
+ {
+ return optional<S>(a.derived());
+ }
+
+}} // namespace boost::spirit
+
+#endif
diff --git a/boost/boost/spirit/core/composite/impl/positive.ipp b/boost/boost/spirit/core/composite/impl/positive.ipp
new file mode 100644
index 00000000000..cce8dc97468
--- /dev/null
+++ b/boost/boost/spirit/core/composite/impl/positive.ipp
@@ -0,0 +1,30 @@
+/*=============================================================================
+ Copyright (c) 1998-2003 Joel de Guzman
+ Copyright (c) 2001 Daniel Nuffer
+ Copyright (c) 2002 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_POSITIVE_IPP)
+#define BOOST_SPIRIT_POSITIVE_IPP
+
+namespace boost { namespace spirit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // positive class implementation
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename S>
+ inline positive<S>
+ operator+(parser<S> const& a)
+ {
+ return positive<S>(a.derived());
+ }
+
+}} // namespace boost::spirit
+
+#endif
diff --git a/boost/boost/spirit/core/composite/impl/sequence.ipp b/boost/boost/spirit/core/composite/impl/sequence.ipp
new file mode 100644
index 00000000000..041dff08886
--- /dev/null
+++ b/boost/boost/spirit/core/composite/impl/sequence.ipp
@@ -0,0 +1,86 @@
+/*=============================================================================
+ Copyright (c) 1998-2003 Joel de Guzman
+ Copyright (c) 2001 Daniel Nuffer
+ Copyright (c) 2002 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_SEQUENCE_IPP)
+#define BOOST_SPIRIT_SEQUENCE_IPP
+
+namespace boost { namespace spirit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // sequence class implementation
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename A, typename B>
+ inline sequence<A, B>
+ operator>>(parser<A> const& a, parser<B> const& b)
+ {
+ return sequence<A, B>(a.derived(), b.derived());
+ }
+
+ template <typename A>
+ inline sequence<A, chlit<char> >
+ operator>>(parser<A> const& a, char b)
+ {
+ return sequence<A, chlit<char> >(a.derived(), b);
+ }
+
+ template <typename B>
+ inline sequence<chlit<char>, B>
+ operator>>(char a, parser<B> const& b)
+ {
+ return sequence<chlit<char>, B>(a, b.derived());
+ }
+
+ template <typename A>
+ inline sequence<A, strlit<char const*> >
+ operator>>(parser<A> const& a, char const* b)
+ {
+ return sequence<A, strlit<char const*> >(a.derived(), b);
+ }
+
+ template <typename B>
+ inline sequence<strlit<char const*>, B>
+ operator>>(char const* a, parser<B> const& b)
+ {
+ return sequence<strlit<char const*>, B>(a, b.derived());
+ }
+
+ template <typename A>
+ inline sequence<A, chlit<wchar_t> >
+ operator>>(parser<A> const& a, wchar_t b)
+ {
+ return sequence<A, chlit<wchar_t> >(a.derived(), b);
+ }
+
+ template <typename B>
+ inline sequence<chlit<wchar_t>, B>
+ operator>>(wchar_t a, parser<B> const& b)
+ {
+ return sequence<chlit<wchar_t>, B>(a, b.derived());
+ }
+
+ template <typename A>
+ inline sequence<A, strlit<wchar_t const*> >
+ operator>>(parser<A> const& a, wchar_t const* b)
+ {
+ return sequence<A, strlit<wchar_t const*> >(a.derived(), b);
+ }
+
+ template <typename B>
+ inline sequence<strlit<wchar_t const*>, B>
+ operator>>(wchar_t const* a, parser<B> const& b)
+ {
+ return sequence<strlit<wchar_t const*>, B>(a, b.derived());
+ }
+
+}} // namespace boost::spirit
+
+#endif
diff --git a/boost/boost/spirit/core/composite/impl/sequential_and.ipp b/boost/boost/spirit/core/composite/impl/sequential_and.ipp
new file mode 100644
index 00000000000..03b0904ed3f
--- /dev/null
+++ b/boost/boost/spirit/core/composite/impl/sequential_and.ipp
@@ -0,0 +1,86 @@
+/*=============================================================================
+ Copyright (c) 1998-2003 Joel de Guzman
+ Copyright (c) 2001 Daniel Nuffer
+ Copyright (c) 2002 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_SEQUENTIAL_AND_IPP)
+#define BOOST_SPIRIT_SEQUENTIAL_AND_IPP
+
+namespace boost { namespace spirit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // sequential-and operators implementation
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename A, typename B>
+ inline sequence<A, B>
+ operator&&(parser<A> const& a, parser<B> const& b)
+ {
+ return sequence<A, B>(a.derived(), b.derived());
+ }
+
+ template <typename A>
+ inline sequence<A, chlit<char> >
+ operator&&(parser<A> const& a, char b)
+ {
+ return sequence<A, chlit<char> >(a.derived(), b);
+ }
+
+ template <typename B>
+ inline sequence<chlit<char>, B>
+ operator&&(char a, parser<B> const& b)
+ {
+ return sequence<chlit<char>, B>(a, b.derived());
+ }
+
+ template <typename A>
+ inline sequence<A, strlit<char const*> >
+ operator&&(parser<A> const& a, char const* b)
+ {
+ return sequence<A, strlit<char const*> >(a.derived(), b);
+ }
+
+ template <typename B>
+ inline sequence<strlit<char const*>, B>
+ operator&&(char const* a, parser<B> const& b)
+ {
+ return sequence<strlit<char const*>, B>(a, b.derived());
+ }
+
+ template <typename A>
+ inline sequence<A, chlit<wchar_t> >
+ operator&&(parser<A> const& a, wchar_t b)
+ {
+ return sequence<A, chlit<wchar_t> >(a.derived(), b);
+ }
+
+ template <typename B>
+ inline sequence<chlit<wchar_t>, B>
+ operator&&(wchar_t a, parser<B> const& b)
+ {
+ return sequence<chlit<wchar_t>, B>(a, b.derived());
+ }
+
+ template <typename A>
+ inline sequence<A, strlit<wchar_t const*> >
+ operator&&(parser<A> const& a, wchar_t const* b)
+ {
+ return sequence<A, strlit<wchar_t const*> >(a.derived(), b);
+ }
+
+ template <typename B>
+ inline sequence<strlit<wchar_t const*>, B>
+ operator&&(wchar_t const* a, parser<B> const& b)
+ {
+ return sequence<strlit<wchar_t const*>, B>(a, b.derived());
+ }
+
+}} // namespace boost::spirit
+
+#endif
diff --git a/boost/boost/spirit/core/composite/impl/sequential_or.ipp b/boost/boost/spirit/core/composite/impl/sequential_or.ipp
new file mode 100644
index 00000000000..f5a41f3d39d
--- /dev/null
+++ b/boost/boost/spirit/core/composite/impl/sequential_or.ipp
@@ -0,0 +1,86 @@
+/*=============================================================================
+ Copyright (c) 1998-2003 Joel de Guzman
+ Copyright (c) 2001 Daniel Nuffer
+ Copyright (c) 2002 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_SEQUENTIAL_OR_IPP)
+#define BOOST_SPIRIT_SEQUENTIAL_OR_IPP
+
+namespace boost { namespace spirit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // sequential-or class implementation
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename A, typename B>
+ inline sequential_or<A, B>
+ operator||(parser<A> const& a, parser<B> const& b)
+ {
+ return sequential_or<A, B>(a.derived(), b.derived());
+ }
+
+ template <typename A>
+ inline sequential_or<A, chlit<char> >
+ operator||(parser<A> const& a, char b)
+ {
+ return sequential_or<A, chlit<char> >(a.derived(), b);
+ }
+
+ template <typename B>
+ inline sequential_or<chlit<char>, B>
+ operator||(char a, parser<B> const& b)
+ {
+ return sequential_or<chlit<char>, B>(a, b.derived());
+ }
+
+ template <typename A>
+ inline sequential_or<A, strlit<char const*> >
+ operator||(parser<A> const& a, char const* b)
+ {
+ return sequential_or<A, strlit<char const*> >(a.derived(), b);
+ }
+
+ template <typename B>
+ inline sequential_or<strlit<char const*>, B>
+ operator||(char const* a, parser<B> const& b)
+ {
+ return sequential_or<strlit<char const*>, B>(a, b.derived());
+ }
+
+ template <typename A>
+ inline sequential_or<A, chlit<wchar_t> >
+ operator||(parser<A> const& a, wchar_t b)
+ {
+ return sequential_or<A, chlit<wchar_t> >(a.derived(), b);
+ }
+
+ template <typename B>
+ inline sequential_or<chlit<wchar_t>, B>
+ operator||(wchar_t a, parser<B> const& b)
+ {
+ return sequential_or<chlit<wchar_t>, B>(a, b.derived());
+ }
+
+ template <typename A>
+ inline sequential_or<A, strlit<wchar_t const*> >
+ operator||(parser<A> const& a, wchar_t const* b)
+ {
+ return sequential_or<A, strlit<wchar_t const*> >(a.derived(), b);
+ }
+
+ template <typename B>
+ inline sequential_or<strlit<wchar_t const*>, B>
+ operator||(wchar_t const* a, parser<B> const& b)
+ {
+ return sequential_or<strlit<wchar_t const*>, B>(a, b.derived());
+ }
+
+}} // namespace boost::spirit
+
+#endif
diff --git a/boost/boost/spirit/core/composite/intersection.hpp b/boost/boost/spirit/core/composite/intersection.hpp
new file mode 100644
index 00000000000..07fb38484c9
--- /dev/null
+++ b/boost/boost/spirit/core/composite/intersection.hpp
@@ -0,0 +1,138 @@
+/*=============================================================================
+ Copyright (c) 1998-2003 Joel de Guzman
+ Copyright (c) 2001 Daniel Nuffer
+ Copyright (c) 2002 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_INTERSECTION_HPP)
+#define BOOST_SPIRIT_INTERSECTION_HPP
+
+#include <boost/spirit/core/parser.hpp>
+#include <boost/spirit/core/primitives/primitives.hpp>
+#include <boost/spirit/core/composite/composite.hpp>
+#include <boost/spirit/meta/as_parser.hpp>
+
+namespace boost { namespace spirit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // intersection class
+ //
+ // Handles expressions of the form:
+ //
+ // a & b
+ //
+ // where a and b are parsers. The expression returns a composite
+ // parser that matches a and b. One (not both) of the operands may
+ // be a literal char, wchar_t or a primitive string char const*,
+ // wchar_t const*.
+ //
+ // The expression is short circuit evaluated. b is never touched
+ // when a is returns a no-match.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ struct intersection_parser_gen;
+
+ template <typename A, typename B>
+ struct intersection
+ : public binary<A, B, parser<intersection<A, B> > >
+ {
+ typedef intersection<A, B> self_t;
+ typedef binary_parser_category parser_category_t;
+ typedef intersection_parser_gen parser_generator_t;
+ typedef binary<A, B, parser<self_t> > base_t;
+
+ intersection(A const& a, B const& b)
+ : base_t(a, b) {}
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ typedef typename parser_result<self_t, ScannerT>::type result_t;
+ typedef typename ScannerT::iterator_t iterator_t;
+ iterator_t save = scan.first;
+ if (result_t hl = this->left().parse(scan))
+ {
+ ScannerT bscan(scan.first, scan.first, scan);
+ scan.first = save;
+ result_t hr = this->right().parse(bscan);
+ if (hl.length() == hr.length())
+ return hl;
+ }
+
+ return scan.no_match();
+ }
+ };
+
+ struct intersection_parser_gen
+ {
+ template <typename A, typename B>
+ struct result
+ {
+ typedef
+ intersection<
+ typename as_parser<A>::type
+ , typename as_parser<B>::type
+ >
+ type;
+ };
+
+ template <typename A, typename B>
+ static intersection<
+ typename as_parser<A>::type
+ , typename as_parser<B>::type
+ >
+ generate(A const& a, B const& b)
+ {
+ return intersection<BOOST_DEDUCED_TYPENAME as_parser<A>::type,
+ BOOST_DEDUCED_TYPENAME as_parser<B>::type>
+ (as_parser<A>::convert(a), as_parser<B>::convert(b));
+ }
+ };
+
+ template <typename A, typename B>
+ intersection<A, B>
+ operator&(parser<A> const& a, parser<B> const& b);
+
+ template <typename A>
+ intersection<A, chlit<char> >
+ operator&(parser<A> const& a, char b);
+
+ template <typename B>
+ intersection<chlit<char>, B>
+ operator&(char a, parser<B> const& b);
+
+ template <typename A>
+ intersection<A, strlit<char const*> >
+ operator&(parser<A> const& a, char const* b);
+
+ template <typename B>
+ intersection<strlit<char const*>, B>
+ operator&(char const* a, parser<B> const& b);
+
+ template <typename A>
+ intersection<A, chlit<wchar_t> >
+ operator&(parser<A> const& a, wchar_t b);
+
+ template <typename B>
+ intersection<chlit<wchar_t>, B>
+ operator&(wchar_t a, parser<B> const& b);
+
+ template <typename A>
+ intersection<A, strlit<wchar_t const*> >
+ operator&(parser<A> const& a, wchar_t const* b);
+
+ template <typename B>
+ intersection<strlit<wchar_t const*>, B>
+ operator&(wchar_t const* a, parser<B> const& b);
+
+}} // namespace boost::spirit
+
+#endif
+
+#include <boost/spirit/core/composite/impl/intersection.ipp>
diff --git a/boost/boost/spirit/core/composite/kleene_star.hpp b/boost/boost/spirit/core/composite/kleene_star.hpp
new file mode 100644
index 00000000000..0dc3ac5a44f
--- /dev/null
+++ b/boost/boost/spirit/core/composite/kleene_star.hpp
@@ -0,0 +1,96 @@
+/*=============================================================================
+ Copyright (c) 1998-2003 Joel de Guzman
+ Copyright (c) 2001 Daniel Nuffer
+ Copyright (c) 2002 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_KLEENE_STAR_HPP)
+#define BOOST_SPIRIT_KLEENE_STAR_HPP
+
+#include <boost/spirit/core/parser.hpp>
+#include <boost/spirit/core/primitives/primitives.hpp>
+#include <boost/spirit/core/composite/composite.hpp>
+#include <boost/spirit/meta/as_parser.hpp>
+
+namespace boost { namespace spirit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // kleene_star class
+ //
+ // Handles expressions of the form:
+ //
+ // *a
+ //
+ // where a is a parser. The expression returns a composite
+ // parser that matches its subject zero (0) or more times.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ struct kleene_star_parser_gen;
+
+ template <typename S>
+ struct kleene_star
+ : public unary<S, parser<kleene_star<S> > >
+ {
+ typedef kleene_star<S> self_t;
+ typedef unary_parser_category parser_category_t;
+ typedef kleene_star_parser_gen parser_generator_t;
+ typedef unary<S, parser<self_t> > base_t;
+
+ kleene_star(S const& a)
+ : base_t(a) {}
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ typedef typename parser_result<self_t, ScannerT>::type result_t;
+ typedef typename ScannerT::iterator_t iterator_t;
+ result_t hit = scan.empty_match();
+
+ for (;;)
+ {
+ iterator_t save = scan.first;
+ if (result_t next = this->subject().parse(scan))
+ {
+ scan.concat_match(hit, next);
+ }
+ else
+ {
+ scan.first = save;
+ return hit;
+ }
+ }
+ }
+ };
+
+ struct kleene_star_parser_gen
+ {
+ template <typename S>
+ struct result
+ {
+ typedef kleene_star<S> type;
+ };
+
+ template <typename S>
+ static kleene_star<S>
+ generate(parser<S> const& a)
+ {
+ return kleene_star<S>(a.derived());
+ }
+ };
+
+ //////////////////////////////////
+ template <typename S>
+ kleene_star<S>
+ operator*(parser<S> const& a);
+
+}} // namespace boost::spirit
+
+#endif
+
+#include <boost/spirit/core/composite/impl/kleene_star.ipp>
diff --git a/boost/boost/spirit/core/composite/list.hpp b/boost/boost/spirit/core/composite/list.hpp
new file mode 100644
index 00000000000..7e94ea02455
--- /dev/null
+++ b/boost/boost/spirit/core/composite/list.hpp
@@ -0,0 +1,69 @@
+/*=============================================================================
+ Copyright (c) 1998-2003 Joel de Guzman
+ Copyright (c) 2001 Daniel Nuffer
+ Copyright (c) 2002 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_LIST_HPP)
+#define BOOST_SPIRIT_LIST_HPP
+
+#include <boost/spirit/core/parser.hpp>
+#include <boost/spirit/core/primitives/primitives.hpp>
+#include <boost/spirit/core/composite/composite.hpp>
+#include <boost/spirit/meta/as_parser.hpp>
+
+namespace boost { namespace spirit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // operator% is defined as:
+ // a % b ---> a >> *(b >> a)
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename A, typename B>
+ sequence<A, kleene_star<sequence<B, A> > >
+ operator%(parser<A> const& a, parser<B> const& b);
+
+ template <typename A>
+ sequence<A, kleene_star<sequence<chlit<char>, A> > >
+ operator%(parser<A> const& a, char b);
+
+ template <typename B>
+ sequence<chlit<char>, kleene_star<sequence<B, chlit<char> > > >
+ operator%(char a, parser<B> const& b);
+
+ template <typename A>
+ sequence<A, kleene_star<sequence<strlit<char const*>, A> > >
+ operator%(parser<A> const& a, char const* b);
+
+ template <typename B>
+ sequence<strlit<char const*>,
+ kleene_star<sequence<B, strlit<char const*> > > >
+ operator%(char const* a, parser<B> const& b);
+
+ template <typename A>
+ sequence<A, kleene_star<sequence<chlit<wchar_t>, A> > >
+ operator%(parser<A> const& a, wchar_t b);
+
+ template <typename B>
+ sequence<chlit<wchar_t>, kleene_star<sequence<B, chlit<wchar_t> > > >
+ operator%(wchar_t a, parser<B> const& b);
+
+ template <typename A>
+ sequence<A, kleene_star<sequence<strlit<wchar_t const*>, A> > >
+ operator%(parser<A> const& a, wchar_t const* b);
+
+ template <typename B>
+ sequence<strlit<wchar_t const*>,
+ kleene_star<sequence<B, strlit<wchar_t const*> > > >
+ operator%(wchar_t const* a, parser<B> const& b);
+
+}} // namespace boost::spirit
+
+#endif
+
+#include <boost/spirit/core/composite/impl/list.ipp>
diff --git a/boost/boost/spirit/core/composite/no_actions.hpp b/boost/boost/spirit/core/composite/no_actions.hpp
new file mode 100644
index 00000000000..4b5f6bc9493
--- /dev/null
+++ b/boost/boost/spirit/core/composite/no_actions.hpp
@@ -0,0 +1,163 @@
+/*=============================================================================
+ Copyright (c) 1998-2003 Joel de Guzman
+ Copyright (c) 2003 Vaclav Vesely
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_NO_ACTIONS_HPP)
+#define BOOST_SPIRIT_NO_ACTIONS_HPP
+
+#include <boost/spirit/core/parser.hpp>
+#include <boost/spirit/core/composite/composite.hpp>
+#include <boost/spirit/core/non_terminal/rule.hpp>
+
+namespace boost {
+namespace spirit {
+//-----------------------------------------------------------------------------
+// no_actions_action_policy
+
+template<typename BaseT = action_policy>
+struct no_actions_action_policy:
+ public BaseT
+{
+ typedef BaseT base_t;
+
+ no_actions_action_policy():
+ BaseT()
+ {}
+
+ template<typename PolicyT>
+ no_actions_action_policy(PolicyT const& other):
+ BaseT(other)
+ {}
+
+ template<typename ActorT, typename AttrT, typename IteratorT>
+ void
+ do_action(
+ ActorT const& actor,
+ AttrT& val,
+ IteratorT const& first,
+ IteratorT const& last) const
+ {}
+};
+
+//-----------------------------------------------------------------------------
+// no_actions_scanner
+
+
+namespace detail
+{
+ template <typename ActionPolicy>
+ struct compute_no_actions_action_policy
+ {
+ typedef no_actions_action_policy<ActionPolicy> type;
+ };
+
+ template <typename ActionPolicy>
+ struct compute_no_actions_action_policy<no_actions_action_policy<ActionPolicy> >
+ {
+ typedef no_actions_action_policy<ActionPolicy> type;
+ };
+}
+
+template<typename ScannerT = scanner<> >
+struct no_actions_scanner
+{
+ typedef scanner_policies<
+ typename ScannerT::iteration_policy_t,
+ typename ScannerT::match_policy_t,
+ typename detail::compute_no_actions_action_policy<typename ScannerT::action_policy_t>::type
+ > policies_t;
+
+ typedef typename
+ rebind_scanner_policies<ScannerT, policies_t>::type type;
+};
+
+#if BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT > 1
+
+template<typename ScannerT = scanner<> >
+struct no_actions_scanner_list
+{
+ typedef
+ scanner_list<
+ ScannerT,
+ typename no_actions_scanner<ScannerT>::type
+ >
+ type;
+};
+
+#endif // BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT > 1
+
+//-----------------------------------------------------------------------------
+// no_actions_parser
+
+struct no_actions_parser_gen;
+
+template<typename ParserT>
+struct no_actions_parser:
+ public unary<ParserT, parser<no_actions_parser<ParserT> > >
+{
+ typedef no_actions_parser<ParserT> self_t;
+ typedef unary_parser_category parser_category_t;
+ typedef no_actions_parser_gen parser_generator_t;
+ typedef unary<ParserT, parser<self_t> > base_t;
+
+ template<typename ScannerT>
+ struct result
+ {
+ typedef typename parser_result<ParserT, ScannerT>::type type;
+ };
+
+ no_actions_parser(ParserT const& p)
+ : base_t(p)
+ {}
+
+ template<typename ScannerT>
+ typename result<ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ typedef typename no_actions_scanner<ScannerT>::policies_t policies_t;
+
+ return this->subject().parse(scan.change_policies(policies_t(scan)));
+ }
+};
+
+//-----------------------------------------------------------------------------
+// no_actions_parser_gen
+
+struct no_actions_parser_gen
+{
+ template<typename ParserT>
+ struct result
+ {
+ typedef no_actions_parser<ParserT> type;
+ };
+
+ template<typename ParserT>
+ static no_actions_parser<ParserT>
+ generate(parser<ParserT> const& subject)
+ {
+ return no_actions_parser<ParserT>(subject.derived());
+ }
+
+ template<typename ParserT>
+ no_actions_parser<ParserT>
+ operator[](parser<ParserT> const& subject) const
+ {
+ return no_actions_parser<ParserT>(subject.derived());
+ }
+};
+
+//-----------------------------------------------------------------------------
+// no_actions_d
+
+const no_actions_parser_gen no_actions_d = no_actions_parser_gen();
+
+//-----------------------------------------------------------------------------
+} // namespace spirit
+} // namespace boost
+
+#endif // !defined(BOOST_SPIRIT_NO_ACTIONS_HPP)
diff --git a/boost/boost/spirit/core/composite/operators.hpp b/boost/boost/spirit/core/composite/operators.hpp
new file mode 100644
index 00000000000..a6563fe8e5e
--- /dev/null
+++ b/boost/boost/spirit/core/composite/operators.hpp
@@ -0,0 +1,26 @@
+/*=============================================================================
+ Copyright (c) 1998-2003 Joel de Guzman
+ Copyright (c) 2001 Daniel Nuffer
+ Copyright (c) 2002 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_OPERATORS_HPP)
+#define BOOST_SPIRIT_OPERATORS_HPP
+
+#include <boost/spirit/core/composite/sequence.hpp>
+#include <boost/spirit/core/composite/sequential_and.hpp>
+#include <boost/spirit/core/composite/sequential_or.hpp>
+#include <boost/spirit/core/composite/alternative.hpp>
+#include <boost/spirit/core/composite/difference.hpp>
+#include <boost/spirit/core/composite/intersection.hpp>
+#include <boost/spirit/core/composite/exclusive_or.hpp>
+#include <boost/spirit/core/composite/kleene_star.hpp>
+#include <boost/spirit/core/composite/positive.hpp>
+#include <boost/spirit/core/composite/optional.hpp>
+#include <boost/spirit/core/composite/list.hpp>
+
+#endif
diff --git a/boost/boost/spirit/core/composite/optional.hpp b/boost/boost/spirit/core/composite/optional.hpp
new file mode 100644
index 00000000000..5018551a2e9
--- /dev/null
+++ b/boost/boost/spirit/core/composite/optional.hpp
@@ -0,0 +1,90 @@
+/*=============================================================================
+ Copyright (c) 1998-2003 Joel de Guzman
+ Copyright (c) 2001 Daniel Nuffer
+ Copyright (c) 2002 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_OPTIONAL_HPP)
+#define BOOST_SPIRIT_OPTIONAL_HPP
+
+#include <boost/spirit/core/parser.hpp>
+#include <boost/spirit/core/primitives/primitives.hpp>
+#include <boost/spirit/core/composite/composite.hpp>
+#include <boost/spirit/meta/as_parser.hpp>
+
+namespace boost { namespace spirit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // optional class
+ //
+ // Handles expressions of the form:
+ //
+ // !a
+ //
+ // where a is a parser. The expression returns a composite
+ // parser that matches its subject zero (0) or one (1) time.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ struct optional_parser_gen;
+
+ template <typename S>
+ struct optional
+ : public unary<S, parser<optional<S> > >
+ {
+ typedef optional<S> self_t;
+ typedef unary_parser_category parser_category_t;
+ typedef optional_parser_gen parser_generator_t;
+ typedef unary<S, parser<self_t> > base_t;
+
+ optional(S const& a)
+ : base_t(a) {}
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ typedef typename parser_result<self_t, ScannerT>::type result_t;
+ typedef typename ScannerT::iterator_t iterator_t;
+ iterator_t save = scan.first;
+ if (result_t r = this->subject().parse(scan))
+ {
+ return r;
+ }
+ else
+ {
+ scan.first = save;
+ return scan.empty_match();
+ }
+ }
+ };
+
+ struct optional_parser_gen
+ {
+ template <typename S>
+ struct result
+ {
+ typedef optional<S> type;
+ };
+
+ template <typename S>
+ static optional<S>
+ generate(parser<S> const& a)
+ {
+ return optional<S>(a.derived());
+ }
+ };
+
+ template <typename S>
+ optional<S>
+ operator!(parser<S> const& a);
+
+}} // namespace boost::spirit
+
+#endif
+
+#include <boost/spirit/core/composite/impl/optional.ipp>
diff --git a/boost/boost/spirit/core/composite/positive.hpp b/boost/boost/spirit/core/composite/positive.hpp
new file mode 100644
index 00000000000..f108037a1c6
--- /dev/null
+++ b/boost/boost/spirit/core/composite/positive.hpp
@@ -0,0 +1,99 @@
+/*=============================================================================
+ Copyright (c) 1998-2003 Joel de Guzman
+ Copyright (c) 2001 Daniel Nuffer
+ Copyright (c) 2002 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_POSITIVE_HPP)
+#define BOOST_SPIRIT_POSITIVE_HPP
+
+#include <boost/spirit/core/parser.hpp>
+#include <boost/spirit/core/primitives/primitives.hpp>
+#include <boost/spirit/core/composite/composite.hpp>
+#include <boost/spirit/meta/as_parser.hpp>
+
+namespace boost { namespace spirit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // positive class
+ //
+ // Handles expressions of the form:
+ //
+ // +a
+ //
+ // where a is a parser. The expression returns a composite
+ // parser that matches its subject one (1) or more times.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ struct positive_parser_gen;
+
+ template <typename S>
+ struct positive
+ : public unary<S, parser<positive<S> > >
+ {
+ typedef positive<S> self_t;
+ typedef unary_parser_category parser_category_t;
+ typedef positive_parser_gen parser_generator_t;
+ typedef unary<S, parser<self_t> > base_t;
+
+ positive(S const& a)
+ : base_t(a) {}
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ typedef typename parser_result<self_t, ScannerT>::type result_t;
+ typedef typename ScannerT::iterator_t iterator_t;
+ result_t hit = this->subject().parse(scan);
+
+ if (hit)
+ {
+ for (;;)
+ {
+ iterator_t save = scan.first;
+ if (result_t next = this->subject().parse(scan))
+ {
+ scan.concat_match(hit, next);
+ }
+ else
+ {
+ scan.first = save;
+ break;
+ }
+ }
+ }
+ return hit;
+ }
+ };
+
+ struct positive_parser_gen
+ {
+ template <typename S>
+ struct result
+ {
+ typedef positive<S> type;
+ };
+
+ template <typename S>
+ static positive<S>
+ generate(parser<S> const& a)
+ {
+ return positive<S>(a.derived());
+ }
+ };
+
+ template <typename S>
+ inline positive<S>
+ operator+(parser<S> const& a);
+
+}} // namespace boost::spirit
+
+#endif
+
+#include <boost/spirit/core/composite/impl/positive.ipp>
diff --git a/boost/boost/spirit/core/composite/sequence.hpp b/boost/boost/spirit/core/composite/sequence.hpp
new file mode 100644
index 00000000000..e600957c792
--- /dev/null
+++ b/boost/boost/spirit/core/composite/sequence.hpp
@@ -0,0 +1,129 @@
+/*=============================================================================
+ Copyright (c) 1998-2003 Joel de Guzman
+ Copyright (c) 2001 Daniel Nuffer
+ Copyright (c) 2002 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_SEQUENCE_HPP)
+#define BOOST_SPIRIT_SEQUENCE_HPP
+
+#include <boost/spirit/core/parser.hpp>
+#include <boost/spirit/core/primitives/primitives.hpp>
+#include <boost/spirit/core/composite/composite.hpp>
+#include <boost/spirit/meta/as_parser.hpp>
+
+namespace boost { namespace spirit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // sequence class
+ //
+ // Handles expressions of the form:
+ //
+ // a >> b
+ //
+ // where a and b are parsers. The expression returns a composite
+ // parser that matches a and b in sequence. One (not both) of the
+ // operands may be a literal char, wchar_t or a primitive string
+ // char const*, wchar_t const*.
+ //
+ //////////////////////////////////////////////////////////////////////////
+ struct sequence_parser_gen;
+
+ template <typename A, typename B>
+ struct sequence : public binary<A, B, parser<sequence<A, B> > >
+ {
+ typedef sequence<A, B> self_t;
+ typedef binary_parser_category parser_category_t;
+ typedef sequence_parser_gen parser_generator_t;
+ typedef binary<A, B, parser<self_t> > base_t;
+
+ sequence(A const& a, B const& b)
+ : base_t(a, b) {}
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ typedef typename parser_result<self_t, ScannerT>::type result_t;
+ if (result_t ma = this->left().parse(scan))
+ if (result_t mb = this->right().parse(scan))
+ {
+ scan.concat_match(ma, mb);
+ return ma;
+ }
+ return scan.no_match();
+ }
+ };
+
+ struct sequence_parser_gen
+ {
+ template <typename A, typename B>
+ struct result
+ {
+ typedef
+ sequence<
+ typename as_parser<A>::type
+ , typename as_parser<B>::type
+ >
+ type;
+ };
+
+ template <typename A, typename B>
+ static sequence<
+ typename as_parser<A>::type
+ , typename as_parser<B>::type
+ >
+ generate(A const& a, B const& b)
+ {
+ return sequence<BOOST_DEDUCED_TYPENAME as_parser<A>::type,
+ BOOST_DEDUCED_TYPENAME as_parser<B>::type>
+ (as_parser<A>::convert(a), as_parser<B>::convert(b));
+ }
+ };
+
+ template <typename A, typename B>
+ sequence<A, B>
+ operator>>(parser<A> const& a, parser<B> const& b);
+
+ template <typename A>
+ sequence<A, chlit<char> >
+ operator>>(parser<A> const& a, char b);
+
+ template <typename B>
+ sequence<chlit<char>, B>
+ operator>>(char a, parser<B> const& b);
+
+ template <typename A>
+ sequence<A, strlit<char const*> >
+ operator>>(parser<A> const& a, char const* b);
+
+ template <typename B>
+ sequence<strlit<char const*>, B>
+ operator>>(char const* a, parser<B> const& b);
+
+ template <typename A>
+ sequence<A, chlit<wchar_t> >
+ operator>>(parser<A> const& a, wchar_t b);
+
+ template <typename B>
+ sequence<chlit<wchar_t>, B>
+ operator>>(wchar_t a, parser<B> const& b);
+
+ template <typename A>
+ sequence<A, strlit<wchar_t const*> >
+ operator>>(parser<A> const& a, wchar_t const* b);
+
+ template <typename B>
+ sequence<strlit<wchar_t const*>, B>
+ operator>>(wchar_t const* a, parser<B> const& b);
+
+}} // namespace boost::spirit
+
+#endif
+
+#include <boost/spirit/core/composite/impl/sequence.ipp>
diff --git a/boost/boost/spirit/core/composite/sequential_and.hpp b/boost/boost/spirit/core/composite/sequential_and.hpp
new file mode 100644
index 00000000000..aa900e00db3
--- /dev/null
+++ b/boost/boost/spirit/core/composite/sequential_and.hpp
@@ -0,0 +1,72 @@
+/*=============================================================================
+ Copyright (c) 1998-2003 Joel de Guzman
+ Copyright (c) 2001 Daniel Nuffer
+ Copyright (c) 2002 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_SEQUENTIAL_AND_HPP)
+#define BOOST_SPIRIT_SEQUENTIAL_AND_HPP
+
+#include <boost/spirit/core/parser.hpp>
+#include <boost/spirit/core/primitives/primitives.hpp>
+#include <boost/spirit/core/composite/composite.hpp>
+#include <boost/spirit/meta/as_parser.hpp>
+
+namespace boost { namespace spirit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // sequential-and operators
+ //
+ // Handles expressions of the form:
+ //
+ // a && b
+ //
+ // Same as a >> b.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename A, typename B>
+ sequence<A, B>
+ operator&&(parser<A> const& a, parser<B> const& b);
+
+ template <typename A>
+ sequence<A, chlit<char> >
+ operator&&(parser<A> const& a, char b);
+
+ template <typename B>
+ sequence<chlit<char>, B>
+ operator&&(char a, parser<B> const& b);
+
+ template <typename A>
+ sequence<A, strlit<char const*> >
+ operator&&(parser<A> const& a, char const* b);
+
+ template <typename B>
+ sequence<strlit<char const*>, B>
+ operator&&(char const* a, parser<B> const& b);
+
+ template <typename A>
+ sequence<A, chlit<wchar_t> >
+ operator&&(parser<A> const& a, wchar_t b);
+
+ template <typename B>
+ sequence<chlit<wchar_t>, B>
+ operator&&(wchar_t a, parser<B> const& b);
+
+ template <typename A>
+ sequence<A, strlit<wchar_t const*> >
+ operator&&(parser<A> const& a, wchar_t const* b);
+
+ template <typename B>
+ sequence<strlit<wchar_t const*>, B>
+ operator&&(wchar_t const* a, parser<B> const& b);
+
+}} // namespace boost::spirit
+
+#endif
+
+#include <boost/spirit/core/composite/impl/sequential_and.ipp>
diff --git a/boost/boost/spirit/core/composite/sequential_or.hpp b/boost/boost/spirit/core/composite/sequential_or.hpp
new file mode 100644
index 00000000000..f4ba9f13d27
--- /dev/null
+++ b/boost/boost/spirit/core/composite/sequential_or.hpp
@@ -0,0 +1,150 @@
+/*=============================================================================
+ Copyright (c) 1998-2003 Joel de Guzman
+ Copyright (c) 2001 Daniel Nuffer
+ Copyright (c) 2002 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_SEQUENTIAL_OR_HPP)
+#define BOOST_SPIRIT_SEQUENTIAL_OR_HPP
+
+#include <boost/spirit/core/parser.hpp>
+#include <boost/spirit/core/primitives/primitives.hpp>
+#include <boost/spirit/core/composite/composite.hpp>
+#include <boost/spirit/meta/as_parser.hpp>
+
+namespace boost { namespace spirit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // sequential-or class
+ //
+ // Handles expressions of the form:
+ //
+ // a || b
+ //
+ // Equivalent to
+ //
+ // a | b | a >> b;
+ //
+ // where a and b are parsers. The expression returns a composite
+ // parser that matches matches a or b in sequence. One (not both) of
+ // the operands may be a literal char, wchar_t or a primitive string
+ // char const*, wchar_t const*.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ struct sequential_or_parser_gen;
+
+ template <typename A, typename B>
+ struct sequential_or : public binary<A, B, parser<sequential_or<A, B> > >
+ {
+ typedef sequential_or<A, B> self_t;
+ typedef binary_parser_category parser_category_t;
+ typedef sequential_or_parser_gen parser_generator_t;
+ typedef binary<A, B, parser<self_t> > base_t;
+
+ sequential_or(A const& a, B const& b)
+ : base_t(a, b) {}
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ typedef typename parser_result<self_t, ScannerT>::type result_t;
+ typedef typename ScannerT::iterator_t iterator_t;
+ { // scope for save
+ iterator_t save = scan.first;
+ if (result_t ma = this->left().parse(scan))
+ {
+ save = scan.first;
+ if (result_t mb = this->right().parse(scan))
+ {
+ // matched a b
+ scan.concat_match(ma, mb);
+ return ma;
+ }
+ else
+ {
+ // matched a
+ scan.first = save;
+ return ma;
+ }
+ }
+ scan.first = save;
+ }
+
+ // matched b
+ return this->right().parse(scan);
+ }
+ };
+
+ struct sequential_or_parser_gen
+ {
+ template <typename A, typename B>
+ struct result
+ {
+ typedef
+ sequential_or<
+ typename as_parser<A>::type
+ , typename as_parser<B>::type
+ >
+ type;
+ };
+
+ template <typename A, typename B>
+ static sequential_or<
+ typename as_parser<A>::type
+ , typename as_parser<B>::type
+ >
+ generate(A const& a, B const& b)
+ {
+ return sequential_or<BOOST_DEDUCED_TYPENAME as_parser<A>::type,
+ BOOST_DEDUCED_TYPENAME as_parser<B>::type>
+ (as_parser<A>::convert(a), as_parser<B>::convert(b));
+ }
+ };
+
+ template <typename A, typename B>
+ sequential_or<A, B>
+ operator||(parser<A> const& a, parser<B> const& b);
+
+ template <typename A>
+ sequential_or<A, chlit<char> >
+ operator||(parser<A> const& a, char b);
+
+ template <typename B>
+ sequential_or<chlit<char>, B>
+ operator||(char a, parser<B> const& b);
+
+ template <typename A>
+ sequential_or<A, strlit<char const*> >
+ operator||(parser<A> const& a, char const* b);
+
+ template <typename B>
+ sequential_or<strlit<char const*>, B>
+ operator||(char const* a, parser<B> const& b);
+
+ template <typename A>
+ sequential_or<A, chlit<wchar_t> >
+ operator||(parser<A> const& a, wchar_t b);
+
+ template <typename B>
+ sequential_or<chlit<wchar_t>, B>
+ operator||(wchar_t a, parser<B> const& b);
+
+ template <typename A>
+ sequential_or<A, strlit<wchar_t const*> >
+ operator||(parser<A> const& a, wchar_t const* b);
+
+ template <typename B>
+ sequential_or<strlit<wchar_t const*>, B>
+ operator||(wchar_t const* a, parser<B> const& b);
+
+}} // namespace boost::spirit
+
+#endif
+
+#include <boost/spirit/core/composite/impl/sequential_or.ipp>
diff --git a/boost/boost/spirit/core/config.hpp b/boost/boost/spirit/core/config.hpp
new file mode 100644
index 00000000000..62a98412e78
--- /dev/null
+++ b/boost/boost/spirit/core/config.hpp
@@ -0,0 +1,63 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Joel de Guzman
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_CONFIG_HPP)
+#define BOOST_SPIRIT_CONFIG_HPP
+
+#include <boost/config.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Compiler check:
+//
+// Historically, Spirit supported a lot of compilers, including (to some
+// extent) poorly conforming compilers such as VC6. Spirit v1.6.x will be
+// the last release that will support older poorly conforming compilers.
+// Starting from Spirit v1.8.0, ill conforming compilers will not be
+// supported. If you are still using one of these older compilers, you can
+// still use Spirit v1.6.x.
+//
+// The reason why Spirit v1.6.x worked on old non-conforming compilers is
+// that the authors laboriously took the trouble of searching for
+// workarounds to make these compilers happy. The process takes a lot of
+// time and energy, especially when one encounters the dreaded ICE or
+// "Internal Compiler Error". Sometimes searching for a single workaround
+// takes days or even weeks. Sometimes, there are no known workarounds. This
+// stifles progress a lot. And, as the library gets more progressive and
+// takes on more advanced C++ techniques, the difficulty is escalated to
+// even new heights.
+//
+// Spirit v1.6.x will still be supported. Maintenance and bug fixes will
+// still be applied. There will still be active development for the back-
+// porting of new features introduced in Spirit v1.8.0 (and Spirit 1.9.0)
+// to lesser able compilers; hopefully, fueled by contributions from the
+// community. For instance, there is already a working AST tree back-port
+// for VC6 and VC7 by Peder Holt.
+//
+// If you got here somehow, your compiler is known to be poorly conforming
+// WRT ANSI/ISO C++ standard. Library implementers get a bad reputation when
+// someone attempts to compile the code on a non-conforming compiler. She'll
+// be confronted with tons of compiler errors when she tries to compile the
+// library. Such errors will somehow make less informed users conclude that
+// the code is poorly written. It's better for the user to see a message
+// "sorry, this code has not been ported to your compiler yet", than to see
+// pages and pages of compiler error messages.
+//
+/////////////////////////////////////////////////////////////////////////////////
+#if (defined(BOOST_MSVC) && (BOOST_MSVC < 1310)) \
+ || (defined(__BORLANDC__) && (__BORLANDC__ <= 0x570)) \
+ || (defined(__GNUC__) && (__GNUC__ < 3)) \
+ || (defined(__GNUC__) && (__GNUC__ == 3) && (__GNUC_MINOR__ < 1))
+# error "Compiler not supported. See note in <boost/spirit/core/config.hpp>"
+#else
+// Pass... Compiler supported.
+#endif
+
+#endif
+
+
diff --git a/boost/boost/spirit/core/impl/match.ipp b/boost/boost/spirit/core/impl/match.ipp
new file mode 100644
index 00000000000..f30f9f83e9e
--- /dev/null
+++ b/boost/boost/spirit/core/impl/match.ipp
@@ -0,0 +1,109 @@
+/*=============================================================================
+ Copyright (c) 1998-2003 Joel de Guzman
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_MATCH_IPP)
+#define BOOST_SPIRIT_MATCH_IPP
+#include <algorithm>
+
+namespace boost { namespace spirit
+{
+ template <typename T>
+ inline match<T>::match()
+ : len(-1), val() {}
+
+ template <typename T>
+ inline match<T>::match(std::size_t length)
+ : len(length), val() {}
+
+ template <typename T>
+ inline match<T>::match(std::size_t length, ctor_param_t val_)
+ : len(length), val(val_) {}
+
+ template <typename T>
+ inline bool
+ match<T>::operator!() const
+ {
+ return len < 0;
+ }
+
+ template <typename T>
+ inline std::ptrdiff_t
+ match<T>::length() const
+ {
+ return len;
+ }
+
+ template <typename T>
+ inline bool
+ match<T>::has_valid_attribute() const
+ {
+ return val.is_initialized();
+ }
+
+ template <typename T>
+ inline typename match<T>::return_t
+ match<T>::value() const
+ {
+ BOOST_SPIRIT_ASSERT(val.is_initialized());
+ return *val;
+ }
+
+ template <typename T>
+ inline void
+ match<T>::swap(match& other)
+ {
+ std::swap(len, other.len);
+ std::swap(val, other.val);
+ }
+
+ inline match<nil_t>::match()
+ : len(-1) {}
+
+ inline match<nil_t>::match(std::size_t length)
+ : len(length) {}
+
+ inline match<nil_t>::match(std::size_t length, nil_t)
+ : len(length) {}
+
+ inline bool
+ match<nil_t>::operator!() const
+ {
+ return len < 0;
+ }
+
+ inline bool
+ match<nil_t>::has_valid_attribute() const
+ {
+ return false;
+ }
+
+ inline std::ptrdiff_t
+ match<nil_t>::length() const
+ {
+ return len;
+ }
+
+ inline nil_t
+ match<nil_t>::value() const
+ {
+ return nil_t();
+ }
+
+ inline void
+ match<nil_t>::value(nil_t) {}
+
+ inline void
+ match<nil_t>::swap(match<nil_t>& other)
+ {
+ std::swap(len, other.len);
+ }
+
+}} // namespace boost::spirit
+
+#endif
+
diff --git a/boost/boost/spirit/core/impl/match_attr_traits.ipp b/boost/boost/spirit/core/impl/match_attr_traits.ipp
new file mode 100644
index 00000000000..c6398b56642
--- /dev/null
+++ b/boost/boost/spirit/core/impl/match_attr_traits.ipp
@@ -0,0 +1,94 @@
+/*=============================================================================
+ Copyright (c) 1998-2003 Joel de Guzman
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_MATCH_ATTR_TRAITS_IPP)
+#define BOOST_SPIRIT_MATCH_ATTR_TRAITS_IPP
+
+#include <boost/optional.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace spirit { namespace impl
+{
+ template <typename T>
+ struct match_attr_traits
+ {
+ typedef typename
+ boost::optional<T>::reference_const_type
+ const_reference;
+
+ // case where src *IS* convertible to T (dest)
+ template <typename T2>
+ static void
+ convert(boost::optional<T>& dest, T2 const& src, mpl::true_)
+ {
+ dest.reset(src);
+ }
+
+ // case where src *IS NOT* convertible to T (dest)
+ template <typename T2>
+ static void
+ convert(boost::optional<T>& dest, T2 const& /*src*/, mpl::false_)
+ {
+ dest.reset();
+ }
+
+ static void
+ convert(boost::optional<T>& dest, nil_t/*src*/)
+ {
+ dest.reset();
+ }
+
+ template <typename T2>
+ static void
+ convert(boost::optional<T>& dest, T2 const& src)
+ {
+ convert(dest, src, is_convertible<T2, T>());
+ }
+
+ template <typename OtherMatchT>
+ static void
+ copy(boost::optional<T>& dest, OtherMatchT const& src)
+ {
+ if (src.has_valid_attribute())
+ convert(dest, src.value());
+ }
+
+ template <typename OtherMatchT>
+ static void
+ assign(boost::optional<T>& dest, OtherMatchT const& src)
+ {
+ if (src.has_valid_attribute())
+ convert(dest, src.value());
+ else
+ dest.reset();
+ }
+
+ // T is not reference
+ template <typename ValueT>
+ static void
+ set_value(boost::optional<T>& dest, ValueT const& val, mpl::false_)
+ {
+ dest.reset(val);
+ }
+
+ // T is a reference
+ template <typename ValueT>
+ static void
+ set_value(boost::optional<T>& dest, ValueT const& val, mpl::true_)
+ {
+ dest.get() = val;
+ }
+ };
+
+}}} // namespace boost::spirit::impl
+
+#endif
+
diff --git a/boost/boost/spirit/core/impl/parser.ipp b/boost/boost/spirit/core/impl/parser.ipp
new file mode 100644
index 00000000000..3f5a3722434
--- /dev/null
+++ b/boost/boost/spirit/core/impl/parser.ipp
@@ -0,0 +1,51 @@
+/*=============================================================================
+ Copyright (c) 1998-2003 Joel de Guzman
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_PARSER_IPP)
+#define BOOST_SPIRIT_PARSER_IPP
+
+namespace boost { namespace spirit
+{
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // Generic parse function implementation
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename IteratorT, typename DerivedT>
+ inline parse_info<IteratorT>
+ parse(
+ IteratorT const& first_
+ , IteratorT const& last
+ , parser<DerivedT> const& p)
+ {
+ IteratorT first = first_;
+ scanner<IteratorT, scanner_policies<> > scan(first, last);
+ match<nil_t> hit = p.derived().parse(scan);
+ return parse_info<IteratorT>(
+ first, hit, hit && (first == last), hit.length());
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // Parse function for null terminated strings implementation
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename CharT, typename DerivedT>
+ inline parse_info<CharT const*>
+ parse(CharT const* str, parser<DerivedT> const& p)
+ {
+ CharT const* last = str;
+ while (*last)
+ last++;
+ return parse(str, last, p);
+ }
+
+}} // namespace boost::spirit
+
+#endif
+
diff --git a/boost/boost/spirit/core/match.hpp b/boost/boost/spirit/core/match.hpp
new file mode 100644
index 00000000000..741cc025d46
--- /dev/null
+++ b/boost/boost/spirit/core/match.hpp
@@ -0,0 +1,181 @@
+/*=============================================================================
+ Copyright (c) 1998-2003 Joel de Guzman
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_MATCH_HPP)
+#define BOOST_SPIRIT_MATCH_HPP
+
+#include <boost/spirit/core/config.hpp>
+#include <boost/spirit/core/nil.hpp>
+#include <boost/call_traits.hpp>
+#include <boost/optional.hpp>
+#include <boost/spirit/core/assert.hpp>
+#include <boost/spirit/core/safe_bool.hpp>
+#include <boost/spirit/core/impl/match_attr_traits.ipp>
+#include <boost/type_traits/add_const.hpp>
+#include <boost/type_traits/is_reference.hpp>
+
+namespace boost { namespace spirit
+{
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // match class
+ //
+ // The match holds the result of a parser. A match object evaluates
+ // to true when a successful match is found, otherwise false. The
+ // length of the match is the number of characters (or tokens) that
+ // is successfully matched. This can be queried through its length()
+ // member function. A negative value means that the match is
+ // unsucessful.
+ //
+ // Each parser may have an associated attribute. This attribute is
+ // also returned back to the client on a successful parse through
+ // the match object. The match's value() member function returns the
+ // match's attribute.
+ //
+ // A match attribute is valid:
+ //
+ // * on a successful match
+ // * when its value is set through the value(val) member function
+ // * if it is assigned or copied from a compatible match object
+ // (e.g. match<double> from match<int>) with a valid attribute.
+ //
+ // The match attribute is undefined:
+ //
+ // * on an unsuccessful match
+ // * when an attempt to copy or assign from another match object
+ // with an incompatible attribute type (e.g. match<std::string>
+ // from match<int>).
+ //
+ // The member function has_valid_attribute() can be queried to know if
+ // it is safe to get the match's attribute. The attribute may be set
+ // through the member function value(v) where v is the new attribute
+ // value.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename T = nil_t>
+ class match : public safe_bool<match<T> >
+ {
+
+ public:
+
+ typedef typename boost::optional<T> optional_type;
+ typedef typename optional_type::argument_type ctor_param_t;
+ typedef typename optional_type::reference_const_type return_t;
+ typedef T attr_t;
+
+ match();
+ explicit match(std::size_t length);
+ match(std::size_t length, ctor_param_t val);
+
+ bool operator!() const;
+ std::ptrdiff_t length() const;
+ bool has_valid_attribute() const;
+ return_t value() const;
+ void swap(match& other);
+
+ template <typename T2>
+ match(match<T2> const& other)
+ : len(other.length()), val()
+ {
+ impl::match_attr_traits<T>::copy(val, other);
+ }
+
+ template <typename T2>
+ match&
+ operator=(match<T2> const& other)
+ {
+ impl::match_attr_traits<T>::assign(val, other);
+ len = other.length();
+ return *this;
+ }
+
+ template <typename MatchT>
+ void
+ concat(MatchT const& other)
+ {
+ BOOST_SPIRIT_ASSERT(*this && other);
+ len += other.length();
+ }
+
+ template <typename ValueT>
+ void
+ value(ValueT const& val_)
+ {
+ impl::match_attr_traits<T>::set_value(val, val_, is_reference<T>());
+ }
+
+ bool operator_bool() const
+ {
+ return len >= 0;
+ }
+
+ private:
+
+ std::ptrdiff_t len;
+ optional_type val;
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // match class specialization for nil_t values
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <>
+ class match<nil_t> : public safe_bool<match<nil_t> >
+ {
+ public:
+
+ typedef nil_t attr_t;
+ typedef nil_t return_t;
+
+ match();
+ explicit match(std::size_t length);
+ match(std::size_t length, nil_t);
+
+ bool operator!() const;
+ bool has_valid_attribute() const;
+ std::ptrdiff_t length() const;
+ nil_t value() const;
+ void value(nil_t);
+ void swap(match& other);
+
+ template <typename T>
+ match(match<T> const& other)
+ : len(other.length()) {}
+
+ template <typename T>
+ match<>&
+ operator=(match<T> const& other)
+ {
+ len = other.length();
+ return *this;
+ }
+
+ template <typename T>
+ void
+ concat(match<T> const& other)
+ {
+ BOOST_SPIRIT_ASSERT(*this && other);
+ len += other.length();
+ }
+
+ bool operator_bool() const
+ {
+ return len >= 0;
+ }
+
+ private:
+
+ std::ptrdiff_t len;
+ };
+
+}} // namespace boost::spirit
+
+#endif
+#include <boost/spirit/core/impl/match.ipp>
+
diff --git a/boost/boost/spirit/core/nil.hpp b/boost/boost/spirit/core/nil.hpp
new file mode 100644
index 00000000000..2b61851a158
--- /dev/null
+++ b/boost/boost/spirit/core/nil.hpp
@@ -0,0 +1,19 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Joel de Guzman
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_NIL_HPP)
+#define BOOST_SPIRIT_NIL_HPP
+
+namespace boost { namespace spirit
+{
+ struct nil_t {};
+}}
+
+#endif
+
+
diff --git a/boost/boost/spirit/core/non_terminal/grammar.hpp b/boost/boost/spirit/core/non_terminal/grammar.hpp
new file mode 100644
index 00000000000..a43382d04dc
--- /dev/null
+++ b/boost/boost/spirit/core/non_terminal/grammar.hpp
@@ -0,0 +1,81 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Joel de Guzman
+ Copyright (c) 2002-2003 Martin Wille
+ Copyright (c) 2003 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_GRAMMAR_HPP)
+#define BOOST_SPIRIT_GRAMMAR_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#if defined(BOOST_SPIRIT_THREADSAFE) && defined(BOOST_SPIRIT_SINGLE_GRAMMAR_INSTANCE)
+#undef BOOST_SPIRIT_SINGLE_GRAMMAR_INSTANCE
+#endif
+
+#include <boost/spirit/core/parser.hpp>
+#include <boost/spirit/core/non_terminal/parser_context.hpp>
+#include <boost/spirit/core/non_terminal/impl/grammar.ipp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// grammar class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename DerivedT, typename ContextT = parser_context<> >
+struct grammar
+ : public parser<DerivedT>
+ , public ContextT::base_t
+ , public context_aux<ContextT, DerivedT>
+ BOOST_SPIRIT_GRAMMAR_ID
+{
+ typedef grammar<DerivedT, ContextT> self_t;
+ typedef DerivedT const& embed_t;
+ typedef typename ContextT::context_linker_t context_t;
+ typedef typename context_t::attr_t attr_t;
+
+ template <typename ScannerT>
+ struct result
+ {
+ typedef typename match_result<ScannerT, attr_t>::type type;
+ };
+
+ grammar() {}
+ ~grammar() { impl::grammar_destruct(this); }
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse_main(ScannerT const& scan) const
+ { return impl::grammar_parser_parse<0>(this, scan); }
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ typedef typename parser_result<self_t, ScannerT>::type result_t;
+ typedef parser_scanner_linker<ScannerT> scanner_t;
+ BOOST_SPIRIT_CONTEXT_PARSE(scan, *this, scanner_t, context_t, result_t)
+ }
+
+ template <int N>
+ impl::entry_grammar<DerivedT, N, ContextT>
+ use_parser() const
+ { return impl::entry_grammar<DerivedT, N, ContextT>( this->derived()); }
+
+ BOOST_SPIRIT_GRAMMAR_STATE
+};
+
+///////////////////////////////////////////////////////////////////////////////
+}} // namespace boost::spirit
+
+#undef BOOST_SPIRIT_GRAMMAR_ID
+#undef BOOST_SPIRIT_GRAMMAR_ACCESS
+#undef BOOST_SPIRIT_GRAMMAR_STATE
+#endif
+
diff --git a/boost/boost/spirit/core/non_terminal/impl/grammar.ipp b/boost/boost/spirit/core/non_terminal/impl/grammar.ipp
new file mode 100644
index 00000000000..68112606613
--- /dev/null
+++ b/boost/boost/spirit/core/non_terminal/impl/grammar.ipp
@@ -0,0 +1,388 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Joel de Guzman
+ Copyright (c) 2002-2003 Martin Wille
+ Copyright (c) 2003 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined BOOST_SPIRIT_GRAMMAR_IPP
+#define BOOST_SPIRIT_GRAMMAR_IPP
+
+#if !defined(BOOST_SPIRIT_SINGLE_GRAMMAR_INSTANCE)
+#include <boost/spirit/core/non_terminal/impl/object_with_id.ipp>
+#include <algorithm>
+#include <functional>
+#include <memory> // for std::auto_ptr
+#include <boost/weak_ptr.hpp>
+#endif
+
+#ifdef BOOST_SPIRIT_THREADSAFE
+#include <boost/thread/tss.hpp>
+#include <boost/thread/mutex.hpp>
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+template <typename DerivedT, typename ContextT>
+struct grammar;
+
+#if defined(BOOST_MSVC) && (BOOST_MSVC < 1300)
+
+BOOST_SPIRIT_DEPENDENT_TEMPLATE_WRAPPER(grammar_definition_wrapper, definition);
+
+//////////////////////////////////
+template <typename GrammarT, typename ScannerT>
+struct grammar_definition
+{
+ typedef typename impl::grammar_definition_wrapper<GrammarT>
+ ::template result_<ScannerT>::param_t type;
+};
+
+#else
+
+//////////////////////////////////
+template <typename GrammarT, typename ScannerT>
+struct grammar_definition
+{
+ typedef typename GrammarT::template definition<ScannerT> type;
+};
+
+#endif
+
+ namespace impl
+ {
+
+#if !defined(BOOST_SPIRIT_SINGLE_GRAMMAR_INSTANCE)
+ struct grammar_tag {};
+
+ //////////////////////////////////
+ template <typename GrammarT>
+ struct grammar_helper_base
+ {
+ virtual int undefine(GrammarT *) = 0;
+ virtual ~grammar_helper_base() {}
+ };
+
+ //////////////////////////////////
+ template <typename GrammarT>
+ struct grammar_helper_list
+ {
+ typedef GrammarT grammar_t;
+ typedef grammar_helper_base<GrammarT> helper_t;
+ typedef std::vector<helper_t*> vector_t;
+
+ grammar_helper_list() {}
+ grammar_helper_list(grammar_helper_list const& /*x*/)
+ { // Does _not_ copy the helpers member !
+ }
+
+ grammar_helper_list& operator=(grammar_helper_list const& x)
+ { // Does _not_ copy the helpers member !
+ return *this;
+ }
+
+ void push_back(helper_t *helper)
+ { helpers.push_back(helper); }
+
+ void pop_back()
+ { helpers.pop_back(); }
+
+ typename vector_t::size_type
+ size() const
+ { return helpers.size(); }
+
+ typename vector_t::reverse_iterator
+ rbegin()
+ { return helpers.rbegin(); }
+
+ typename vector_t::reverse_iterator
+ rend()
+ { return helpers.rend(); }
+
+#ifdef BOOST_SPIRIT_THREADSAFE
+ boost::mutex & mutex()
+ { return m; }
+#endif
+
+ private:
+
+ vector_t helpers;
+#ifdef BOOST_SPIRIT_THREADSAFE
+ boost::mutex m;
+#endif
+ };
+
+ //////////////////////////////////
+ struct grammartract_helper_list;
+
+#if !defined(BOOST_SPIRIT_SINGLE_GRAMMAR_INSTANCE) \
+ && (!defined(__GNUC__) || (__GNUC__ > 2))
+
+ struct grammartract_helper_list
+ {
+ template<typename GrammarT>
+ static grammar_helper_list<GrammarT>&
+ do_(GrammarT const* g)
+ {
+ return g->helpers;
+ }
+ };
+
+#endif
+
+ //////////////////////////////////
+ template <typename GrammarT, typename DerivedT, typename ScannerT>
+ struct grammar_helper : private grammar_helper_base<GrammarT>
+ {
+ typedef GrammarT grammar_t;
+ typedef ScannerT scanner_t;
+ typedef DerivedT derived_t;
+ typedef typename grammar_definition<DerivedT, ScannerT>::type definition_t;
+
+ typedef grammar_helper<grammar_t, derived_t, scanner_t> helper_t;
+ typedef boost::shared_ptr<helper_t> helper_ptr_t;
+ typedef boost::weak_ptr<helper_t> helper_weak_ptr_t;
+
+ grammar_helper*
+ this_() { return this; }
+
+ grammar_helper(helper_weak_ptr_t& p)
+ : definitions_cnt(0)
+ , self(this_())
+ { p = self; }
+
+ definition_t&
+ define(grammar_t const* target_grammar)
+ {
+ grammar_helper_list<GrammarT> &helpers =
+#if !defined(__GNUC__) || (__GNUC__ > 2)
+ grammartract_helper_list::do_(target_grammar);
+#else
+ target_grammar->helpers;
+#endif
+ typename grammar_t::object_id id = target_grammar->get_object_id();
+
+ if (definitions.size()<=id)
+ definitions.resize(id*3/2+1);
+ if (definitions[id]!=0)
+ return *definitions[id];
+
+ std::auto_ptr<definition_t>
+ result(new definition_t(target_grammar->derived()));
+
+#ifdef BOOST_SPIRIT_THREADSAFE
+ boost::mutex::scoped_lock lock(helpers.mutex());
+#endif
+ helpers.push_back(this);
+
+ ++definitions_cnt;
+ definitions[id] = result.get();
+ return *(result.release());
+ }
+
+ int
+ undefine(grammar_t* target_grammar)
+ {
+ typename grammar_t::object_id id = target_grammar->get_object_id();
+
+ if (definitions.size()<=id)
+ return 0;
+ delete definitions[id];
+ definitions[id] = 0;
+ if (--definitions_cnt==0)
+ self.reset();
+ return 0;
+ }
+
+ private:
+
+ std::vector<definition_t*> definitions;
+ unsigned long definitions_cnt;
+ helper_ptr_t self;
+ };
+
+#endif /* defined(BOOST_SPIRIT_SINGLE_GRAMMAR_INSTANCE) */
+
+ template<typename DerivedT, typename ContextT, typename ScannerT>
+ inline typename DerivedT::template definition<ScannerT> &
+ get_definition(grammar<DerivedT, ContextT> const* self)
+ {
+#if defined(BOOST_SPIRIT_SINGLE_GRAMMAR_INSTANCE)
+
+ typedef typename DerivedT::template definition<ScannerT> definition_t;
+ static definition_t def(self->derived());
+ return def;
+#else
+ typedef grammar<DerivedT, ContextT> self_t;
+ typedef impl::grammar_helper<self_t, DerivedT, ScannerT> helper_t;
+ typedef typename helper_t::helper_weak_ptr_t ptr_t;
+
+# ifdef BOOST_SPIRIT_THREADSAFE
+ static boost::thread_specific_ptr<ptr_t> tld_helper;
+ if (!tld_helper.get())
+ tld_helper.reset(new ptr_t);
+ ptr_t &helper = *tld_helper;
+# else
+ static ptr_t helper;
+# endif
+ if (!boost::make_shared(helper).get())
+ new helper_t(helper);
+ return boost::make_shared(helper)->define(self);
+#endif
+ }
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+ template <int N>
+ struct call_helper {
+
+ template <typename RT, typename DefinitionT, typename ScannerT>
+ static void
+ do_ (RT &result, DefinitionT &def, ScannerT const &scan)
+ {
+ result = def.template get_start_parser<N>()->parse(scan);
+ }
+ };
+#else
+ // The grammar_def stuff isn't supported for compilers, which do not
+ // support partial template specialization
+ template <int N> struct call_helper;
+#endif
+
+ template <>
+ struct call_helper<0> {
+
+ template <typename RT, typename DefinitionT, typename ScannerT>
+ static void
+ do_ (RT &result, DefinitionT &def, ScannerT const &scan)
+ {
+ result = def.start().parse(scan);
+ }
+ };
+
+ //////////////////////////////////
+ template<int N, typename DerivedT, typename ContextT, typename ScannerT>
+ inline typename parser_result<grammar<DerivedT, ContextT>, ScannerT>::type
+ grammar_parser_parse(
+ grammar<DerivedT, ContextT> const* self,
+ ScannerT const &scan)
+ {
+ typedef
+ typename parser_result<grammar<DerivedT, ContextT>, ScannerT>::type
+ result_t;
+ typedef typename DerivedT::template definition<ScannerT> definition_t;
+
+ result_t result;
+ definition_t &def = get_definition<DerivedT, ContextT, ScannerT>(self);
+
+ call_helper<N>::do_(result, def, scan);
+ return result;
+ }
+
+ //////////////////////////////////
+ template<typename GrammarT>
+ inline void
+ grammar_destruct(GrammarT* self)
+ {
+#if !defined(BOOST_SPIRIT_SINGLE_GRAMMAR_INSTANCE)
+ typedef impl::grammar_helper_base<GrammarT> helper_base_t;
+ typedef grammar_helper_list<GrammarT> helper_list_t;
+ typedef typename helper_list_t::vector_t::reverse_iterator iterator_t;
+
+ helper_list_t& helpers =
+# if !defined(__GNUC__) || (__GNUC__ > 2)
+ grammartract_helper_list::do_(self);
+# else
+ self->helpers;
+# endif
+
+# if (defined(BOOST_MSVC) && (BOOST_MSVC < 1300)) \
+ || defined(BOOST_INTEL_CXX_VERSION)
+ for (iterator_t i = helpers.rbegin(); i != helpers.rend(); ++i)
+ (*i)->undefine(self);
+# else
+ std::for_each(helpers.rbegin(), helpers.rend(),
+ std::bind2nd(std::mem_fun(&helper_base_t::undefine), self));
+# endif
+
+#else
+ (void)self;
+#endif
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // entry_grammar class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename DerivedT, int N, typename ContextT>
+ class entry_grammar
+ : public parser<entry_grammar<DerivedT, N, ContextT> >
+ {
+
+ public:
+ typedef entry_grammar<DerivedT, N, ContextT> self_t;
+ typedef self_t embed_t;
+ typedef typename ContextT::context_linker_t context_t;
+ typedef typename context_t::attr_t attr_t;
+
+ template <typename ScannerT>
+ struct result
+ {
+ typedef typename match_result<ScannerT, attr_t>::type type;
+ };
+
+ entry_grammar(DerivedT const &p) : target_grammar(p) {}
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse_main(ScannerT const& scan) const
+ { return impl::grammar_parser_parse<N>(&target_grammar, scan); }
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ typedef typename parser_result<self_t, ScannerT>::type result_t;
+ typedef parser_scanner_linker<ScannerT> scanner_t;
+ BOOST_SPIRIT_CONTEXT_PARSE(scan, target_grammar, scanner_t,
+ context_t, result_t)
+ }
+
+ private:
+ DerivedT const &target_grammar;
+ };
+
+ } // namespace impl
+
+///////////////////////////////////////
+#if !defined(BOOST_SPIRIT_SINGLE_GRAMMAR_INSTANCE)
+#define BOOST_SPIRIT_GRAMMAR_ID , public impl::object_with_id<impl::grammar_tag>
+#else
+#define BOOST_SPIRIT_GRAMMAR_ID
+#endif
+
+///////////////////////////////////////
+#if !defined(__GNUC__) || (__GNUC__ > 2)
+#define BOOST_SPIRIT_GRAMMAR_ACCESS private:
+#else
+#define BOOST_SPIRIT_GRAMMAR_ACCESS
+#endif
+
+///////////////////////////////////////
+#if !defined(BOOST_SPIRIT_SINGLE_GRAMMAR_INSTANCE)
+#define BOOST_SPIRIT_GRAMMAR_STATE \
+ BOOST_SPIRIT_GRAMMAR_ACCESS \
+ friend struct impl::grammartract_helper_list; \
+ mutable impl::grammar_helper_list<self_t> helpers;
+#else
+#define BOOST_SPIRIT_GRAMMAR_STATE
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+}} // namespace boost::spirit
+
+#endif
diff --git a/boost/boost/spirit/core/non_terminal/impl/object_with_id.ipp b/boost/boost/spirit/core/non_terminal/impl/object_with_id.ipp
new file mode 100644
index 00000000000..e3624f0fd08
--- /dev/null
+++ b/boost/boost/spirit/core/non_terminal/impl/object_with_id.ipp
@@ -0,0 +1,185 @@
+/*=============================================================================
+ Copyright (c) 2002-2003 Joel de Guzman
+ Copyright (c) 2002-2003 Martin Wille
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined BOOST_SPIRIT_OBJECT_WITH_ID_IPP
+#define BOOST_SPIRIT_OBJECT_WITH_ID_IPP
+
+#include <vector>
+#include <boost/shared_ptr.hpp>
+
+#ifdef BOOST_SPIRIT_THREADSAFE
+#include <boost/thread/mutex.hpp>
+#include <boost/thread/once.hpp>
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+ namespace impl {
+
+ //////////////////////////////////
+ template <typename IdT = std::size_t>
+ struct object_with_id_base_supply
+ {
+ typedef IdT object_id;
+ typedef std::vector<object_id> id_vector;
+
+ object_with_id_base_supply() : max_id(object_id()) {}
+
+#ifdef BOOST_SPIRIT_THREADSAFE
+ boost::mutex mutex;
+#endif
+ object_id max_id;
+ id_vector free_ids;
+
+ object_id acquire();
+ void release(object_id);
+ };
+
+ //////////////////////////////////
+ template <typename TagT, typename IdT = std::size_t>
+ struct object_with_id_base
+ {
+ typedef TagT tag_t;
+ typedef IdT object_id;
+
+ protected:
+
+ object_id acquire_object_id();
+ void release_object_id(object_id);
+
+ private:
+#ifdef BOOST_SPIRIT_THREADSAFE
+ static boost::mutex &mutex_instance();
+ static void mutex_init();
+#endif
+
+ boost::shared_ptr<object_with_id_base_supply<IdT> > id_supply;
+ };
+
+ //////////////////////////////////
+ template<class TagT, typename IdT = std::size_t>
+ struct object_with_id : private object_with_id_base<TagT, IdT>
+ {
+ typedef object_with_id<TagT, IdT> self_t;
+ typedef object_with_id_base<TagT, IdT> base_t;
+ typedef IdT object_id;
+
+ object_with_id() : id(base_t::acquire_object_id()) {}
+ object_with_id(self_t const &other)
+ : base_t(other)
+ , id(base_t::acquire_object_id())
+ {} // don't copy id
+ self_t &operator = (self_t const &other)
+ { // don't assign id
+ base_t::operator=(other);
+ return *this;
+ }
+ ~object_with_id() { base_t::release_object_id(id); }
+ object_id get_object_id() const { return id; }
+
+ private:
+
+ object_id const id;
+ };
+
+ //////////////////////////////////
+ template <typename IdT>
+ inline IdT
+ object_with_id_base_supply<IdT>::acquire()
+ {
+#ifdef BOOST_SPIRIT_THREADSAFE
+ boost::mutex::scoped_lock lock(mutex);
+#endif
+ if (free_ids.size())
+ {
+ object_id id = *free_ids.rbegin();
+ free_ids.pop_back();
+ return id;
+ }
+ else
+ {
+ if (free_ids.capacity()<=max_id)
+ free_ids.reserve(max_id*3/2+1);
+ return ++max_id;
+ }
+ }
+
+ //////////////////////////////////
+ template <typename IdT>
+ inline void
+ object_with_id_base_supply<IdT>::release(IdT id)
+ {
+#ifdef BOOST_SPIRIT_THREADSAFE
+ boost::mutex::scoped_lock lock(mutex);
+#endif
+ if (max_id == id)
+ max_id--;
+ else
+ free_ids.push_back(id); // doesn't throw
+ }
+
+ //////////////////////////////////
+ template <typename TagT, typename IdT>
+ inline IdT
+ object_with_id_base<TagT, IdT>::acquire_object_id()
+ {
+ {
+#ifdef BOOST_SPIRIT_THREADSAFE
+ static boost::once_flag been_here = BOOST_ONCE_INIT;
+ boost::call_once(mutex_init, been_here);
+ boost::mutex &mutex = mutex_instance();
+ boost::mutex::scoped_lock lock(mutex);
+#endif
+ static boost::shared_ptr<object_with_id_base_supply<IdT> >
+ static_supply;
+
+ if (!static_supply.get())
+ static_supply.reset(new object_with_id_base_supply<IdT>());
+ id_supply = static_supply;
+ }
+
+ return id_supply->acquire();
+ }
+
+ //////////////////////////////////
+ template <typename TagT, typename IdT>
+ inline void
+ object_with_id_base<TagT, IdT>::release_object_id(IdT id)
+ {
+ id_supply->release(id);
+ }
+
+ //////////////////////////////////
+#ifdef BOOST_SPIRIT_THREADSAFE
+ template <typename TagT, typename IdT>
+ inline boost::mutex &
+ object_with_id_base<TagT, IdT>::mutex_instance()
+ {
+ static boost::mutex mutex;
+ return mutex;
+ }
+#endif
+
+ //////////////////////////////////
+#ifdef BOOST_SPIRIT_THREADSAFE
+ template <typename TagT, typename IdT>
+ inline void
+ object_with_id_base<TagT, IdT>::mutex_init()
+ {
+ mutex_instance();
+ }
+#endif
+
+ } // namespace impl
+
+///////////////////////////////////////////////////////////////////////////////
+}} // namespace boost::spirit
+
+#endif
diff --git a/boost/boost/spirit/core/non_terminal/impl/rule.ipp b/boost/boost/spirit/core/non_terminal/impl/rule.ipp
new file mode 100644
index 00000000000..ee9ed2c1549
--- /dev/null
+++ b/boost/boost/spirit/core/non_terminal/impl/rule.ipp
@@ -0,0 +1,407 @@
+/*=============================================================================
+ Copyright (c) 1998-2003 Joel de Guzman
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_RULE_IPP)
+#define BOOST_SPIRIT_RULE_IPP
+
+#if BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT > 1
+#include <boost/preprocessor/repeat.hpp>
+#include <boost/preprocessor/repeat_from_to.hpp>
+#include <boost/preprocessor/enum_params.hpp>
+#include <boost/preprocessor/enum_params_with_defaults.hpp>
+#include <boost/preprocessor/facilities/intercept.hpp>
+#include <boost/preprocessor/inc.hpp>
+#include <boost/preprocessor/cat.hpp>
+#endif
+
+#include <boost/spirit/core/parser.hpp>
+#include <boost/spirit/core/scanner/scanner.hpp>
+#include <boost/spirit/core/non_terminal/parser_context.hpp>
+#include <boost/spirit/core/non_terminal/parser_id.hpp>
+#include <boost/type_traits/is_base_and_derived.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+#if BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT > 1
+
+ template <
+ BOOST_PP_ENUM_BINARY_PARAMS(
+ BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT,
+ typename ScannerT, = mpl::void_ BOOST_PP_INTERCEPT
+ )
+ >
+ struct scanner_list;
+
+#endif // BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT > 1
+
+ ///////////////////////////////////////////////////////////////////////////
+ namespace impl
+ {
+ template <typename BaseT, typename DefaultT
+ , typename T0, typename T1, typename T2>
+ struct get_param
+ {
+ typedef typename mpl::if_<
+ is_base_and_derived<BaseT, T0>
+ , T0
+ , typename mpl::if_<
+ is_base_and_derived<BaseT, T1>
+ , T1
+ , typename mpl::if_<
+ is_base_and_derived<BaseT, T2>
+ , T2
+ , DefaultT
+ >::type
+ >::type
+ >::type type;
+ };
+
+ template <typename T0, typename T1, typename T2>
+ struct get_context
+ {
+ typedef typename get_param<
+ parser_context_base, parser_context<>, T0, T1, T2>::type
+ type;
+ };
+
+ template <typename T0, typename T1, typename T2>
+ struct get_tag
+ {
+ typedef typename get_param<
+ parser_tag_base, parser_address_tag, T0, T1, T2>::type
+ type;
+ };
+
+ template <typename T0, typename T1, typename T2>
+ struct get_scanner
+ {
+ typedef typename get_param<
+ scanner_base, scanner<>, T0, T1, T2>::type
+ type;
+ };
+
+ ///////////////////////////////////////////////////////////////////////
+ //
+ // rule_base class
+ //
+ // The rule_base class implements the basic plumbing for rules
+ // minus the storage mechanism. It is up to the derived class
+ // to actually store the definition somewhere. The rule_base
+ // class assumes that the derived class provides a get() function
+ // that will return a pointer to a parser. The get() function
+ // may return NULL. See rule below for details.
+ //
+ // <<< For framework use only. Not for public consumption. >>>
+ //
+ ///////////////////////////////////////////////////////////////////////
+ template <
+ typename DerivedT // derived class
+ , typename EmbedT // how derived class is embedded
+ , typename T0 = nil_t // see rule class
+ , typename T1 = nil_t // see rule class
+ , typename T2 = nil_t // see rule class
+ >
+ class rule_base; // forward declaration
+
+ class rule_base_access
+ {
+#if defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) \
+ || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))
+ public: // YUCK!
+#else
+ template <
+ typename DerivedT
+ , typename EmbedT
+ , typename T0
+ , typename T1
+ , typename T2
+ >
+ friend class rule_base;
+#endif
+ template <typename RuleT>
+ static typename RuleT::abstract_parser_t*
+ get(RuleT const& r)
+ {
+ return r.get();
+ }
+ };
+
+ template <
+ typename DerivedT // derived class
+ , typename EmbedT // how derived class is embedded
+ , typename T0 // see rule class
+ , typename T1 // see rule class
+ , typename T2 // see rule class
+ >
+ class rule_base
+ : public parser<DerivedT>
+ , public impl::get_context<T0, T1, T2>::type::base_t
+ , public context_aux<
+ typename impl::get_context<T0, T1, T2>::type, DerivedT>
+ , public impl::get_tag<T0, T1, T2>::type
+ {
+ public:
+
+ typedef typename impl::get_scanner<T0, T1, T2>::type scanner_t;
+ typedef typename impl::get_context<T0, T1, T2>::type context_t;
+ typedef typename impl::get_tag<T0, T1, T2>::type tag_t;
+
+ typedef EmbedT embed_t;
+ typedef typename context_t::context_linker_t linked_context_t;
+ typedef typename linked_context_t::attr_t attr_t;
+
+ template <typename ScannerT>
+ struct result
+ {
+ typedef typename match_result<ScannerT, attr_t>::type type;
+ };
+
+ template <typename ScannerT>
+ typename parser_result<DerivedT, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ typedef parser_scanner_linker<ScannerT> linked_scanner_t;
+ typedef typename parser_result<DerivedT, ScannerT>::type result_t;
+ BOOST_SPIRIT_CONTEXT_PARSE(
+ scan, *this, linked_scanner_t, linked_context_t, result_t);
+ }
+
+ template <typename ScannerT>
+ typename parser_result<DerivedT, ScannerT>::type
+ parse_main(ScannerT const& scan) const
+ {
+ typename parser_result<DerivedT, ScannerT>::type hit;
+
+ // MWCW 8.3 needs this cast to be done through a pointer,
+ // not a reference. Otherwise, it will silently construct
+ // a temporary, causing an infinite runtime recursion.
+ DerivedT const* derived_this = static_cast<DerivedT const*>(this);
+
+ if (rule_base_access::get(*derived_this))
+ {
+ typename ScannerT::iterator_t s(scan.first);
+ hit = rule_base_access::get(*derived_this)
+ ->do_parse_virtual(scan);
+ scan.group_match(hit, this->id(), s, scan.first);
+ }
+ else
+ {
+ hit = scan.no_match();
+ }
+ return hit;
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////
+ //
+ // abstract_parser class
+ //
+ ///////////////////////////////////////////////////////////////////////
+ template <typename ScannerT, typename AttrT>
+ struct abstract_parser
+ {
+ abstract_parser() {}
+ virtual ~abstract_parser() {}
+
+ virtual typename match_result<ScannerT, AttrT>::type
+ do_parse_virtual(ScannerT const& scan) const = 0;
+
+ virtual abstract_parser*
+ clone() const = 0;
+ };
+
+ ///////////////////////////////////////////////////////////////////////
+ //
+ // concrete_parser class
+ //
+ ///////////////////////////////////////////////////////////////////////
+ template <typename ParserT, typename ScannerT, typename AttrT>
+ struct concrete_parser : abstract_parser<ScannerT, AttrT>
+ {
+ concrete_parser(ParserT const& p) : p(p) {}
+ virtual ~concrete_parser() {}
+
+ virtual typename match_result<ScannerT, AttrT>::type
+ do_parse_virtual(ScannerT const& scan) const
+ {
+ return p.parse(scan);
+ }
+
+ virtual abstract_parser<ScannerT, AttrT>*
+ clone() const
+ {
+ return new concrete_parser(p);
+ }
+
+ typename ParserT::embed_t p;
+ };
+
+#if BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT > 1
+
+ ///////////////////////////////////////////////////////////////////////
+ //
+ // This generates partial specializations for the class
+ //
+ // abstract_parser
+ //
+ // with an increasing number of different ScannerT template parameters
+ // and corresponding do_parse_virtual function declarations for each
+ // of the different required scanner types:
+ //
+ // template <typename ScannerT0, ..., typename AttrT>
+ // struct abstract_parser<scanner_list<ScannerT0, ...>, AttrT>
+ // {
+ // abstract_parser() {}
+ // virtual ~abstract_parser() {}
+ //
+ // virtual typename match_result<ScannerT0, AttrT>::type
+ // do_parse_virtual(ScannerT0 const &scan) const = 0;
+ //
+ // virtual abstract_parser*
+ // clone() const = 0;
+ //
+ // ...
+ // };
+ //
+ ///////////////////////////////////////////////////////////////////////
+ #define BOOST_SPIRIT_RULE_ENUM_DOPARSE_A(z, N, _) \
+ virtual typename match_result< \
+ BOOST_PP_CAT(ScannerT, N), AttrT \
+ >::type \
+ do_parse_virtual( \
+ BOOST_PP_CAT(ScannerT, N) const& scan) const = 0; \
+
+ #define BOOST_SPIRIT_ENUM_ABSTRACT_PARSERS(z, N, _) \
+ template < \
+ BOOST_PP_ENUM_PARAMS_Z(z, BOOST_PP_INC(N), typename ScannerT), \
+ typename AttrT \
+ > \
+ struct abstract_parser< \
+ scanner_list< \
+ BOOST_PP_ENUM_PARAMS_Z(z, BOOST_PP_INC(N), ScannerT) \
+ >, \
+ AttrT \
+ > \
+ { \
+ abstract_parser() {} \
+ virtual ~abstract_parser() {} \
+ \
+ BOOST_PP_REPEAT_ ## z( \
+ BOOST_PP_INC(N), BOOST_SPIRIT_RULE_ENUM_DOPARSE_A, _) \
+ \
+ virtual abstract_parser* \
+ clone() const = 0; \
+ }; \
+
+ BOOST_PP_REPEAT_FROM_TO(1, BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT,
+ BOOST_SPIRIT_ENUM_ABSTRACT_PARSERS, _)
+
+ #undef BOOST_SPIRIT_RULE_ENUM_DOPARSE_A
+ #undef BOOST_SPIRIT_ENUM_ABSTRACT_PARSERS
+ ///////////////////////////////////////////////////////////////////////
+
+ ///////////////////////////////////////////////////////////////////////
+ //
+ // This generates partial specializations for the class
+ //
+ // concrete_parser
+ //
+ // with an increasing number of different ScannerT template parameters
+ // and corresponding do_parse_virtual function declarations for each
+ // of the different required scanner types:
+ //
+ // template <
+ // typename ParserT, typename ScannerT0, ..., typename AttrT
+ // >
+ // struct concrete_parser<
+ // ParserT, scanner_list<ScannerT0, ...>, AttrT
+ // >
+ // : public abstract_parser<scanner_list<ScannerT0, ...>, AttrT>
+ // {
+ // concrete_parser(ParserT const& p_) : p(p_) {}
+ // virtual ~concrete_parser() {}
+ //
+ // virtual typename match_result<ScannerT0, AttrT>::type
+ // do_parse_virtual(ScannerT0 const &scan) const
+ // { return p.parse(scan); }
+ //
+ // virtual abstract_parser<scanner_list<ScannerT0, ...>, AttrT>*
+ // clone() const
+ // {
+ // return new concrete_parser(p);
+ // }
+ //
+ // ...
+ //
+ // typename ParserT::embed_t p;
+ // };
+ //
+ ///////////////////////////////////////////////////////////////////////
+ #define BOOST_SPIRIT_RULE_ENUM_DOPARSE_C(z, N, _) \
+ virtual typename match_result< \
+ BOOST_PP_CAT(ScannerT, N), AttrT \
+ >::type \
+ do_parse_virtual( \
+ BOOST_PP_CAT(ScannerT, N) const& scan) const \
+ { return p.parse(scan); } \
+
+ #define BOOST_SPIRIT_ENUM_CONCRETE_PARSERS(z, N, _) \
+ template < \
+ typename ParserT, \
+ BOOST_PP_ENUM_PARAMS_Z(z, BOOST_PP_INC(N), typename ScannerT), \
+ typename AttrT \
+ > \
+ struct concrete_parser< \
+ ParserT, \
+ scanner_list< \
+ BOOST_PP_ENUM_PARAMS_Z(z, BOOST_PP_INC(N), ScannerT) \
+ >, \
+ AttrT \
+ > \
+ : abstract_parser< \
+ scanner_list< \
+ BOOST_PP_ENUM_PARAMS_Z(z, BOOST_PP_INC(N), ScannerT) \
+ >, \
+ AttrT \
+ > \
+ { \
+ concrete_parser(ParserT const& p_) : p(p_) {} \
+ virtual ~concrete_parser() {} \
+ \
+ BOOST_PP_REPEAT_ ## z( \
+ BOOST_PP_INC(N), BOOST_SPIRIT_RULE_ENUM_DOPARSE_C, _) \
+ \
+ virtual abstract_parser< \
+ scanner_list< \
+ BOOST_PP_ENUM_PARAMS_Z(z, BOOST_PP_INC(N), ScannerT) \
+ >, \
+ AttrT \
+ >* \
+ clone() const \
+ { \
+ return new concrete_parser(p); \
+ } \
+ \
+ typename ParserT::embed_t p; \
+ }; \
+
+ BOOST_PP_REPEAT_FROM_TO(1, BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT,
+ BOOST_SPIRIT_ENUM_CONCRETE_PARSERS, _)
+
+ #undef BOOST_SPIRIT_ENUM_CONCRETE_PARSERS
+ #undef BOOST_SPIRIT_RULE_ENUM_DOPARSE_C
+ ///////////////////////////////////////////////////////////////////////
+
+#endif // BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT > 1
+
+ } // namespace impl
+
+}} // namespace boost::spirit
+
+#endif
diff --git a/boost/boost/spirit/core/non_terminal/impl/subrule.ipp b/boost/boost/spirit/core/non_terminal/impl/subrule.ipp
new file mode 100644
index 00000000000..a194d4fbae0
--- /dev/null
+++ b/boost/boost/spirit/core/non_terminal/impl/subrule.ipp
@@ -0,0 +1,205 @@
+/*=============================================================================
+ Copyright (c) 2002-2003 Joel de Guzman
+ Copyright (c) 2002-2003 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_SUBRULE_IPP)
+#define BOOST_SPIRIT_SUBRULE_IPP
+
+namespace boost { namespace spirit {
+
+ template <typename FirstT, typename RestT>
+ struct subrule_list;
+
+ template <int ID, typename DefT, typename ContextT>
+ struct subrule_parser;
+
+ namespace impl {
+
+ #if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+ template <int N, typename ListT>
+ struct get_subrule;
+
+ template <int N, typename ListT>
+ struct get_subrule_chooser
+ {
+ static ListT t();
+ static char test(nil_t);
+ static int test(...);
+
+ // Set value to
+ // 0: ListT is empty
+ // 1: ListT's first item has same ID
+ // 2: ListT's first item has a different ID
+
+ enum
+ {
+ id = ListT::first_t::id,
+ is_same_id = N == id,
+ is_nil_t = sizeof(char) == sizeof(test(t())),
+ value = is_nil_t ? 0 : (is_same_id ? 1 : 2)
+ };
+ };
+
+ template <int N>
+ struct subrule_chooser;
+
+ template <>
+ struct subrule_chooser<0>
+ {
+ // First case. ListT is empty
+
+ template <int N, typename ListT>
+ struct result
+ { typedef nil_t type; };
+ };
+
+ template <>
+ struct subrule_chooser<1>
+ {
+ // Second case. ListT is non-empty and the list's
+ // first item has the ID we are looking for.
+
+ template <int N, typename ListT>
+ struct result
+ { typedef typename ListT::first_t::def_t type; };
+ };
+
+ template <>
+ struct subrule_chooser<2>
+ {
+ // Third case. ListT is non-empty but the list's
+ // first item does not have the ID we are looking for.
+
+ template <int N, typename ListT>
+ struct result
+ { typedef typename get_subrule<N, ListT::rest_t>::type type; };
+ };
+
+ template <int N, typename ListT>
+ struct get_subrule
+ {
+ enum { n = get_subrule_chooser<N, ListT>::value };
+ typedef typename subrule_chooser<n>::template
+ result<N, ListT>::type type;
+ };
+
+ #else
+
+ template <int N, typename ListT>
+ struct get_subrule
+ {
+ // First case. ListT is non-empty but the list's
+ // first item does not have the ID we are looking for.
+
+ typedef typename get_subrule<N, typename ListT::rest_t>::type type;
+ };
+
+ template <int ID, typename DefT, typename ContextT, typename RestT>
+ struct get_subrule<
+ ID,
+ subrule_list<
+ subrule_parser<ID, DefT, ContextT>,
+ RestT> >
+ {
+ // Second case. ListT is non-empty and the list's
+ // first item has the ID we are looking for.
+
+ typedef DefT type;
+ };
+
+ template <int ID>
+ struct get_subrule<ID, nil_t>
+ {
+ // Third case. ListT is empty
+ typedef nil_t type;
+ };
+
+ #endif
+
+ template <typename T1, typename T2>
+ struct get_result_t {
+
+ // If the result type dictated by the context is nil_t (no closures
+ // present), then the whole subrule_parser return type is equal to
+ // the return type of the right hand side of this subrule_parser,
+ // otherwise it is equal to the dictated return value.
+
+ typedef typename mpl::if_<
+ boost::is_same<T1, nil_t>, T2, T1
+ >::type type;
+ };
+
+ template <int ID, typename ScannerT, typename ContextResultT>
+ struct get_subrule_result
+ {
+ typedef typename
+ impl::get_subrule<ID, typename ScannerT::list_t>::type
+ parser_t;
+
+ typedef typename parser_result<parser_t, ScannerT>::type
+ def_result_t;
+
+ typedef typename match_result<ScannerT, ContextResultT>::type
+ context_result_t;
+
+ typedef typename get_result_t<context_result_t, def_result_t>::type
+ type;
+ };
+
+ template <typename DefT, typename ScannerT, typename ContextResultT>
+ struct get_subrule_parser_result
+ {
+ typedef typename parser_result<DefT, ScannerT>::type
+ def_result_t;
+
+ typedef typename match_result<ScannerT, ContextResultT>::type
+ context_result_t;
+
+ typedef typename get_result_t<context_result_t, def_result_t>::type
+ type;
+ };
+
+ template <typename SubruleT, int ID>
+ struct same_subrule_id
+ {
+ BOOST_STATIC_CONSTANT(bool, value = (SubruleT::id == ID));
+ };
+
+ template <typename RT, typename ScannerT, int ID>
+ struct parse_subrule
+ {
+ template <typename ListT>
+ static void
+ do_parse(RT& r, ScannerT const& scan, ListT const& list, mpl::true_)
+ {
+ r = list.first.rhs.parse(scan);
+ }
+
+ template <typename ListT>
+ static void
+ do_parse(RT& r, ScannerT const& scan, ListT const& list, mpl::false_)
+ {
+ typedef typename ListT::rest_t::first_t subrule_t;
+ mpl::bool_<same_subrule_id<subrule_t, ID>::value> same_id;
+ do_parse(r, scan, list.rest, same_id);
+ }
+
+ static void
+ do_(RT& r, ScannerT const& scan)
+ {
+ typedef typename ScannerT::list_t::first_t subrule_t;
+ mpl::bool_<same_subrule_id<subrule_t, ID>::value> same_id;
+ do_parse(r, scan, scan.list, same_id);
+ }
+ };
+
+}}} // namespace boost::spirit::impl
+
+#endif
+
diff --git a/boost/boost/spirit/core/non_terminal/parser_context.hpp b/boost/boost/spirit/core/non_terminal/parser_context.hpp
new file mode 100644
index 00000000000..4c9662fc77e
--- /dev/null
+++ b/boost/boost/spirit/core/non_terminal/parser_context.hpp
@@ -0,0 +1,147 @@
+/*=============================================================================
+ Copyright (c) 2002-2003 Joel de Guzman
+ Copyright (c) 2002-2003 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_PARSER_CONTEXT_HPP)
+#define BOOST_SPIRIT_PARSER_CONTEXT_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost
+{
+ namespace spirit
+ {
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // default_parser_context_base class { default context base }
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ struct default_parser_context_base
+ {
+ template <typename DerivedT>
+ struct aux {};
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // parser_context_base class { base class of all context classes }
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ struct parser_context_base {};
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // parser_context class { default context }
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ struct nil_t;
+ template<typename ContextT> struct parser_context_linker;
+
+ template<typename AttrT = nil_t>
+ struct parser_context : parser_context_base
+ {
+ typedef AttrT attr_t;
+ typedef default_parser_context_base base_t;
+ typedef parser_context_linker<parser_context<AttrT> > context_linker_t;
+
+ template <typename ParserT>
+ parser_context(ParserT const&) {}
+
+ template <typename ParserT, typename ScannerT>
+ void
+ pre_parse(ParserT const&, ScannerT const&) {}
+
+ template <typename ResultT, typename ParserT, typename ScannerT>
+ ResultT&
+ post_parse(ResultT& hit, ParserT const&, ScannerT const&)
+ { return hit; }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // context_aux class
+ //
+ // context_aux<ContextT, DerivedT> is a class derived from the
+ // ContextT's nested base_t::base<DerivedT> template class. (see
+ // default_parser_context_base::aux for an example).
+ //
+ // Basically, this class provides ContextT dependent optional
+ // functionality to the derived class DerivedT through the CRTP
+ // idiom (Curiously recurring template pattern).
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename ContextT, typename DerivedT>
+ struct context_aux : public ContextT::base_t::template aux<DerivedT> {};
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // parser_scanner_linker and parser_scanner_linker classes
+ // { helper templates for the rule extensibility }
+ //
+ // This classes can be 'overloaded' (defined elsewhere), to plug
+ // in additional functionality into the non-terminal parsing process.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ #if !defined(BOOST_SPIRIT_PARSER_SCANNER_LINKER_DEFINED)
+ #define BOOST_SPIRIT_PARSER_SCANNER_LINKER_DEFINED
+
+ template<typename ScannerT>
+ struct parser_scanner_linker : public ScannerT
+ {
+ parser_scanner_linker(ScannerT const scan_) : ScannerT(scan_) {}
+ };
+
+ #endif // !defined(BOOST_SPIRIT_PARSER_SCANNER_LINKER_DEFINED)
+
+ //////////////////////////////////
+ #if !defined(BOOST_SPIRIT_PARSER_CONTEXT_LINKER_DEFINED)
+ #define BOOST_SPIRIT_PARSER_CONTEXT_LINKER_DEFINED
+
+ template<typename ContextT>
+ struct parser_context_linker : public ContextT
+ {
+ template <typename ParserT>
+ parser_context_linker(ParserT const& p)
+ : ContextT(p) {}
+
+ template <typename ParserT, typename ScannerT>
+ void pre_parse(ParserT const& p, ScannerT const& scan)
+ { ContextT::pre_parse(p, scan); }
+
+ template <typename ResultT, typename ParserT, typename ScannerT>
+ ResultT&
+ post_parse(ResultT& hit, ParserT const& p, ScannerT const& scan)
+ { return ContextT::post_parse(hit, p, scan); }
+ };
+
+ #endif // !defined(BOOST_SPIRIT_PARSER_CONTEXT_LINKER_DEFINED)
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // BOOST_SPIRIT_CONTEXT_PARSE helper macro
+ //
+ // The original implementation uses a template class. However, we
+ // need to lessen the template instantiation depth to help inferior
+ // compilers that sometimes choke on deep template instantiations.
+ // The objective is to avoid code redundancy. A macro, in this case
+ // is an obvious solution. Sigh!
+ //
+ // WARNING: INTERNAL USE ONLY. NOT FOR PUBLIC CONSUMPTION.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ #define BOOST_SPIRIT_CONTEXT_PARSE(scan, this_, scanner_t, context_t, result_t) \
+ scanner_t scan_wrap(scan); \
+ context_t context_wrap(this_); \
+ context_wrap.pre_parse(this_, scan_wrap); \
+ result_t hit = parse_main(scan); \
+ return context_wrap.post_parse(hit, this_, scan_wrap);
+
+ } // namespace spirit
+} // namespace boost
+
+#endif
diff --git a/boost/boost/spirit/core/non_terminal/parser_id.hpp b/boost/boost/spirit/core/non_terminal/parser_id.hpp
new file mode 100644
index 00000000000..25bccb848ca
--- /dev/null
+++ b/boost/boost/spirit/core/non_terminal/parser_id.hpp
@@ -0,0 +1,118 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Joel de Guzman
+ Copyright (c) 2001 Daniel Nuffer
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_PARSER_ID_HPP)
+#define BOOST_SPIRIT_PARSER_ID_HPP
+
+#if defined(BOOST_SPIRIT_DEBUG)
+# include <ostream>
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // parser_id class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ class parser_id
+ {
+ public:
+ parser_id() : p(0) {}
+ explicit parser_id(void const* prule) : p(prule) {}
+ parser_id(std::size_t l_) : l(l_) {}
+
+ bool operator==(parser_id const& x) const { return p == x.p; }
+ bool operator!=(parser_id const& x) const { return !(*this == x); }
+ bool operator<(parser_id const& x) const { return p < x.p; }
+ std::size_t to_long() const { return l; }
+
+ private:
+
+ union
+ {
+ void const* p;
+ std::size_t l;
+ };
+ };
+
+ #if defined(BOOST_SPIRIT_DEBUG)
+ inline std::ostream&
+ operator<<(std::ostream& out, parser_id const& rid)
+ {
+ out << rid.to_long();
+ return out;
+ }
+ #endif
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // parser_tag_base class: base class of all parser tags
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ struct parser_tag_base {};
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // parser_address_tag class: tags a parser with its address
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ struct parser_address_tag : parser_tag_base
+ {
+ parser_id id() const
+ { return parser_id(reinterpret_cast<std::size_t>(this)); }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // parser_tag class: tags a parser with an integer ID
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <int N>
+ struct parser_tag : parser_tag_base
+ {
+ static parser_id id()
+ { return parser_id(std::size_t(N)); }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // dynamic_parser_tag class: tags a parser with a dynamically changeable
+ // integer ID
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ class dynamic_parser_tag : public parser_tag_base
+ {
+ public:
+
+ dynamic_parser_tag()
+ : tag(std::size_t(0)) {}
+
+ parser_id
+ id() const
+ {
+ return
+ tag.to_long()
+ ? tag
+ : parser_id(reinterpret_cast<std::size_t>(this));
+ }
+
+ void set_id(parser_id id) { tag = id; }
+
+ private:
+
+ parser_id tag;
+ };
+
+///////////////////////////////////////////////////////////////////////////////
+}} // namespace boost::spirit
+
+#endif
+
diff --git a/boost/boost/spirit/core/non_terminal/rule.hpp b/boost/boost/spirit/core/non_terminal/rule.hpp
new file mode 100644
index 00000000000..001e5cd3bfd
--- /dev/null
+++ b/boost/boost/spirit/core/non_terminal/rule.hpp
@@ -0,0 +1,168 @@
+/*=============================================================================
+ Copyright (c) 1998-2003 Joel de Guzman
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_RULE_HPP)
+#define BOOST_SPIRIT_RULE_HPP
+
+#include <boost/static_assert.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Spirit predefined maximum number of simultaneously usable different
+// scanner types.
+//
+// This limit defines the maximum number of of possible different scanner
+// types for which a specific rule<> may be used. If this isn't defined, a
+// rule<> may be used with one scanner type only (multiple scanner support
+// is disabled).
+//
+///////////////////////////////////////////////////////////////////////////////
+#if !defined(BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT)
+# define BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT 1
+#endif
+
+// Ensure a meaningful maximum number of simultaneously usable scanner types
+BOOST_STATIC_ASSERT(BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT > 0);
+
+#include <boost/scoped_ptr.hpp>
+#include <boost/spirit/core/non_terminal/impl/rule.ipp>
+
+#if BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT > 1
+# include <boost/preprocessor/enum_params.hpp>
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+#if BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT > 1
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // scanner_list (a fake scanner)
+ //
+ // Typically, rules are tied to a specific scanner type and
+ // a particular rule cannot be used with anything else. Sometimes
+ // there's a need for rules that can accept more than one scanner
+ // type. The scanner_list<S0, ...SN> can be used as a template
+ // parameter to the rule class to specify up to the number of
+ // scanner types defined by the BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT
+ // constant. Example:
+ //
+ // rule<scanner_list<ScannerT0, ScannerT1> > r;
+ //
+ // *** This feature is available only to compilers that support
+ // partial template specialization. ***
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <
+ BOOST_PP_ENUM_PARAMS(
+ BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT,
+ typename ScannerT
+ )
+ >
+ struct scanner_list : scanner_base {};
+
+#endif
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // rule class
+ //
+ // The rule is a polymorphic parser that acts as a named place-
+ // holder capturing the behavior of an EBNF expression assigned to
+ // it.
+ //
+ // The rule is a template class parameterized by:
+ //
+ // 1) scanner (scanner_t, see scanner.hpp),
+ // 2) the rule's context (context_t, see parser_context.hpp)
+ // 3) an arbitrary tag (tag_t, see parser_id.hpp) that allows
+ // a rule to be tagged for identification.
+ //
+ // These template parameters may be specified in any order. The
+ // scanner will default to scanner<> when it is not specified.
+ // The context will default to parser_context when not specified.
+ // The tag will default to parser_address_tag when not specified.
+ //
+ // The definition of the rule (its right hand side, RHS) held by
+ // the rule through a scoped_ptr. When a rule is seen in the RHS
+ // of an assignment or copy construction EBNF expression, the rule
+ // is held by the LHS rule by reference.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <
+ typename T0 = nil_t
+ , typename T1 = nil_t
+ , typename T2 = nil_t
+ >
+ class rule
+ : public impl::rule_base<
+ rule<T0, T1, T2>
+ , rule<T0, T1, T2> const&
+ , T0, T1, T2>
+ {
+ public:
+
+ typedef rule<T0, T1, T2> self_t;
+ typedef impl::rule_base<
+ self_t
+ , self_t const&
+ , T0, T1, T2>
+ base_t;
+
+ typedef typename base_t::scanner_t scanner_t;
+ typedef typename base_t::attr_t attr_t;
+ typedef impl::abstract_parser<scanner_t, attr_t> abstract_parser_t;
+
+ rule() : ptr() {}
+ ~rule() {}
+
+ rule(rule const& r)
+ : ptr(new impl::concrete_parser<rule, scanner_t, attr_t>(r)) {}
+
+ template <typename ParserT>
+ rule(ParserT const& p)
+ : ptr(new impl::concrete_parser<ParserT, scanner_t, attr_t>(p)) {}
+
+ template <typename ParserT>
+ rule& operator=(ParserT const& p)
+ {
+ ptr.reset(new impl::concrete_parser<ParserT, scanner_t, attr_t>(p));
+ return *this;
+ }
+
+ rule& operator=(rule const& r)
+ {
+ ptr.reset(new impl::concrete_parser<rule, scanner_t, attr_t>(r));
+ return *this;
+ }
+
+ rule<T0, T1, T2>
+ copy() const
+ {
+ return rule<T0, T1, T2>(ptr.get() ? ptr->clone() : 0);
+ }
+
+ private:
+ friend class impl::rule_base_access;
+
+ abstract_parser_t*
+ get() const
+ {
+ return ptr.get();
+ }
+
+ rule(abstract_parser_t const* ptr)
+ : ptr(ptr) {}
+
+ scoped_ptr<abstract_parser_t> ptr;
+ };
+
+}} // namespace boost::spirit
+
+#endif
diff --git a/boost/boost/spirit/core/non_terminal/subrule.hpp b/boost/boost/spirit/core/non_terminal/subrule.hpp
new file mode 100644
index 00000000000..7509d204e9b
--- /dev/null
+++ b/boost/boost/spirit/core/non_terminal/subrule.hpp
@@ -0,0 +1,296 @@
+/*=============================================================================
+ Copyright (c) 2002-2003 Joel de Guzman
+ Copyright (c) 2002-2003 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_SUBRULE_HPP)
+#define BOOST_SPIRIT_SUBRULE_HPP
+
+#include <boost/config.hpp>
+#include <boost/static_assert.hpp>
+
+#include <boost/spirit/core/parser.hpp>
+#include <boost/spirit/core/non_terminal/parser_context.hpp>
+
+#include <boost/spirit/core/non_terminal/subrule_fwd.hpp>
+#include <boost/spirit/core/non_terminal/impl/subrule.ipp>
+
+namespace boost { namespace spirit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // subrules_scanner class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename ScannerT, typename ListT>
+ struct subrules_scanner : public ScannerT
+ {
+ typedef ScannerT scanner_t;
+ typedef ListT list_t;
+ typedef subrules_scanner<ScannerT, ListT> self_t;
+
+ subrules_scanner(ScannerT const& scan, ListT const& list_)
+ : ScannerT(scan), list(list_) {}
+
+ template <typename PoliciesT>
+ struct rebind_policies
+ {
+ typedef typename rebind_scanner_policies<ScannerT, PoliciesT>::type
+ rebind_scanner;
+ typedef subrules_scanner<rebind_scanner, ListT> type;
+ };
+
+ template <typename PoliciesT>
+ subrules_scanner<
+ typename rebind_scanner_policies<ScannerT, PoliciesT>::type,
+ ListT>
+ change_policies(PoliciesT const& policies) const
+ {
+ typedef subrules_scanner<
+ BOOST_DEDUCED_TYPENAME
+ rebind_scanner_policies<ScannerT, PoliciesT>::type,
+ ListT>
+ subrules_scanner_t;
+
+ return subrules_scanner_t(
+ ScannerT::change_policies(policies),
+ list);
+ }
+
+ template <typename IteratorT>
+ struct rebind_iterator
+ {
+ typedef typename rebind_scanner_iterator<ScannerT, IteratorT>::type
+ rebind_scanner;
+ typedef subrules_scanner<rebind_scanner, ListT> type;
+ };
+
+ template <typename IteratorT>
+ subrules_scanner<
+ typename rebind_scanner_iterator<ScannerT, IteratorT>::type,
+ ListT>
+ change_iterator(IteratorT const& first, IteratorT const &last) const
+ {
+ typedef subrules_scanner<
+ BOOST_DEDUCED_TYPENAME
+ rebind_scanner_iterator<ScannerT, IteratorT>::type,
+ ListT>
+ subrules_scanner_t;
+
+ return subrules_scanner_t(
+ ScannerT::change_iterator(first, last),
+ list);
+ }
+
+ ListT const& list;
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // subrule_scanner type computer class
+ //
+ // This computer ensures that the scanner will not be recursively
+ // instantiated if it's not needed.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename ScannerT, typename ListT>
+ struct subrules_scanner_finder
+ {
+ typedef subrules_scanner<ScannerT, ListT> type;
+ };
+
+ template <typename ScannerT, typename ListT>
+ struct subrules_scanner_finder<subrules_scanner<ScannerT, ListT>, ListT>
+ {
+ typedef subrules_scanner<ScannerT, ListT> type;
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // subrule_list class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename FirstT, typename RestT>
+ struct subrule_list : public parser<subrule_list<FirstT, RestT> >
+ {
+ typedef subrule_list<FirstT, RestT> self_t;
+ typedef FirstT first_t;
+ typedef RestT rest_t;
+
+ subrule_list(FirstT const& first_, RestT const& rest_)
+ : first(first_), rest(rest_) {}
+
+ template <typename ScannerT>
+ struct result
+ {
+ typedef typename parser_result<FirstT, ScannerT>::type type;
+ };
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ typedef typename subrules_scanner_finder<ScannerT, self_t>::type
+ subrules_scanner_t;
+ subrules_scanner_t g_arg(scan, *this);
+ return first.start.parse(g_arg);
+ }
+
+ template <int ID, typename DefT, typename ContextT>
+ subrule_list<
+ FirstT,
+ subrule_list<
+ subrule_parser<ID, DefT, ContextT>,
+ RestT> >
+ operator,(subrule_parser<ID, DefT, ContextT> const& rhs)
+ {
+ return subrule_list<
+ FirstT,
+ subrule_list<
+ subrule_parser<ID, DefT, ContextT>,
+ RestT> >(
+ first,
+ subrule_list<
+ subrule_parser<ID, DefT, ContextT>,
+ RestT>(rhs, rest));
+ }
+
+ FirstT first;
+ RestT rest;
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // subrule_parser class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <int ID, typename DefT, typename ContextT>
+ struct subrule_parser
+ : public parser<subrule_parser<ID, DefT, ContextT> >
+ {
+ typedef subrule_parser<ID, DefT, ContextT> self_t;
+ typedef subrule<ID, ContextT> subrule_t;
+ typedef DefT def_t;
+
+ BOOST_STATIC_CONSTANT(int, id = ID);
+
+ template <typename ScannerT>
+ struct result
+ {
+ typedef typename
+ impl::get_subrule_parser_result<
+ DefT, ScannerT, typename subrule_t::attr_t>::type type;
+ };
+
+ subrule_parser(subrule_t const& start_, DefT const& rhs_)
+ : rhs(rhs_), start(start_) {}
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ // This will only be called when parsing single subrules.
+ typedef subrule_list<self_t, nil_t> list_t;
+ typedef subrules_scanner<ScannerT, list_t> scanner_t;
+
+ list_t list(*this, nil_t());
+ scanner_t g_arg(scan, list);
+ return start.parse(g_arg);
+ }
+
+ template <int ID2, typename DefT2, typename ContextT2>
+ inline subrule_list<
+ self_t,
+ subrule_list<
+ subrule_parser<ID2, DefT2, ContextT2>,
+ nil_t> >
+ operator,(subrule_parser<ID2, DefT2, ContextT2> const& rhs) const
+ {
+ return subrule_list<
+ self_t,
+ subrule_list<
+ subrule_parser<ID2, DefT2, ContextT2>,
+ nil_t> >(
+ *this,
+ subrule_list<
+ subrule_parser<ID2, DefT2, ContextT2>, nil_t>(
+ rhs, nil_t()));
+ }
+
+ typename DefT::embed_t rhs;
+ subrule_t const& start;
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // subrule class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <int ID, typename ContextT>
+ struct subrule
+ : public parser<subrule<ID, ContextT> >
+ , public ContextT::base_t
+ , public context_aux<ContextT, subrule<ID, ContextT> >
+ {
+ typedef subrule<ID, ContextT> self_t;
+ typedef subrule<ID, ContextT> const& embed_t;
+
+ typedef typename ContextT::context_linker_t context_t;
+ typedef typename context_t::attr_t attr_t;
+
+ BOOST_STATIC_CONSTANT(int, id = ID);
+
+ template <typename ScannerT>
+ struct result
+ {
+ typedef typename
+ impl::get_subrule_result<ID, ScannerT, attr_t>::type type;
+ };
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse_main(ScannerT const& scan) const
+ {
+ typedef typename parser_result<self_t, ScannerT>::type result_t;
+ result_t result;
+ impl::parse_subrule<result_t, ScannerT, ID>::
+ do_(result, scan);
+ return result;
+ }
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ typedef typename parser_result<self_t, ScannerT>::type result_t;
+ typedef parser_scanner_linker<ScannerT> scanner_t;
+ BOOST_SPIRIT_CONTEXT_PARSE(
+ scan, *this, scanner_t, context_t, result_t);
+ }
+
+ template <typename DefT>
+ subrule_parser<ID, DefT, ContextT>
+ operator=(parser<DefT> const& rhs) const
+ {
+ return subrule_parser<ID, DefT, ContextT>(*this, rhs.derived());
+ }
+
+ private:
+
+ // assignment of subrules is not allowed. Use subrules
+ // with identical IDs if you want to have aliases.
+
+ subrule& operator=(subrule const&);
+
+ template <int ID2, typename ContextT2>
+ subrule& operator=(subrule<ID2, ContextT2> const&);
+ };
+
+}} // namespace boost::spirit
+
+#endif
+
diff --git a/boost/boost/spirit/core/non_terminal/subrule_fwd.hpp b/boost/boost/spirit/core/non_terminal/subrule_fwd.hpp
new file mode 100644
index 00000000000..c51a7bab850
--- /dev/null
+++ b/boost/boost/spirit/core/non_terminal/subrule_fwd.hpp
@@ -0,0 +1,31 @@
+/*=============================================================================
+ Copyright (c) 2006 Tobias Schwinger
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_SUBRULE_FWD_HPP)
+#define BOOST_SPIRIT_SUBRULE_FWD_HPP
+
+#include <boost/spirit/core/non_terminal/parser_context.hpp>
+
+namespace boost { namespace spirit {
+
+ template <int ID, typename ContextT = parser_context<> >
+ struct subrule;
+
+ template <int ID, typename DefT, typename ContextT = parser_context<> >
+ struct subrule_parser;
+
+ template <typename ScannerT, typename ListT>
+ struct subrules_scanner;
+
+ template <typename FirstT, typename RestT>
+ struct subrule_list;
+
+}} // namespace boost::spirit
+
+#endif
+
diff --git a/boost/boost/spirit/core/parser.hpp b/boost/boost/spirit/core/parser.hpp
new file mode 100644
index 00000000000..6b0a616b39c
--- /dev/null
+++ b/boost/boost/spirit/core/parser.hpp
@@ -0,0 +1,219 @@
+/*=============================================================================
+ Copyright (c) 1998-2003 Joel de Guzman
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_PARSER_HPP)
+#define BOOST_SPIRIT_PARSER_HPP
+
+#include <boost/config.hpp>
+#include <boost/type_traits.hpp>
+#include <boost/spirit/core/scanner/scanner.hpp>
+#include <boost/spirit/core/nil.hpp>
+
+namespace boost { namespace spirit
+{
+ template <typename ParserT, typename ActionT>
+ class action; // forward declaration
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // Parser categories
+ //
+ // Helper template classes to distinguish different types of
+ // parsers. The following categories are the most generic. More
+ // specific types may inherit from these. Each parser has a typedef
+ // parser_category_t that defines its category. By default, if one
+ // is not specified, it will inherit from the base parser class
+ // which typedefs its parser_category_t as plain_parser_category.
+ //
+ // - plain parser has nothing special
+ // - binary parser has subject a and b (e.g. alternative)
+ // - unary parser has single subject (e.g. kleene star)
+ // - action parser has an attached action parser
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ struct plain_parser_category {};
+ struct binary_parser_category : plain_parser_category {};
+ struct unary_parser_category : plain_parser_category {};
+ struct action_parser_category : unary_parser_category {};
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // parser_result metafunction
+ //
+ // Given a scanner type ScannerT and a parser type ParserT, the
+ // parser_result metafunction provides the actual result of the
+ // parser.
+ //
+ // Usage:
+ //
+ // typename parser_result<ParserT, ScannerT>::type
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename ParserT, typename ScannerT>
+ struct parser_result
+ {
+ typedef typename boost::remove_reference<ParserT>::type parser_type;
+ typedef typename parser_type::template result<ScannerT>::type type;
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // parser class
+ //
+ // This class is a protocol base class for all parsers. This is
+ // essentially an interface contract. The parser class does not
+ // really know how to parse anything but instead relies on the
+ // template parameter DerivedT (which obviously is assumed to be a
+ // subclass) to do the actual parsing.
+ //
+ // Concrete sub-classes inheriting from parser must have a
+ // corresponding member function parse(...) compatible with the
+ // conceptual Interface:
+ //
+ // template <typename ScannerT>
+ // RT parse(ScannerT const& scan) const;
+ //
+ // where RT is the desired return type of the parser and ScannerT
+ // scan is the scanner (see scanner.hpp).
+ //
+ // Concrete sub-classes inheriting from parser in most cases need to
+ // have a nested meta-function result that returns the result type
+ // of the parser's parse member function, given a scanner type. The
+ // meta-function has the form:
+ //
+ // template <typename ScannerT>
+ // struct result
+ // {
+ // typedef RT type;
+ // };
+ //
+ // where RT is the desired return type of the parser. This is
+ // usually, but not always, dependent on the template parameter
+ // ScannerT. If a parser does not supply a result metafunction, a
+ // default is provided by the base parser class.
+ //
+ // The parser's derived() member function returns a reference to the
+ // parser as its derived object.
+ //
+ // An operator[] is provided. The operator returns a semantic action
+ // handler (see actions.hpp).
+ //
+ // Each parser has a typedef embed_t. This typedef specifies how a
+ // parser is embedded in a composite (see composite.hpp). By
+ // default, if one is not specified, the parser will be embedded by
+ // value. That is, a copy of the parser is placed as a member
+ // variable of the composite. Most parsers are embedded by value. In
+ // certain situations however, this is not desirable or possible.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename DerivedT>
+ struct parser
+ {
+ typedef DerivedT embed_t;
+ typedef DerivedT derived_t;
+ typedef plain_parser_category parser_category_t;
+
+ template <typename ScannerT>
+ struct result
+ {
+ typedef typename match_result<ScannerT, nil_t>::type type;
+ };
+
+ DerivedT& derived()
+ {
+ return *static_cast<DerivedT*>(this);
+ }
+
+ DerivedT const& derived() const
+ {
+ return *static_cast<DerivedT const*>(this);
+ }
+
+ template <typename ActionT>
+ action<DerivedT, ActionT>
+ operator[](ActionT const& actor) const
+ {
+ return action<DerivedT, ActionT>(derived(), actor);
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // parse_info
+ //
+ // Results returned by the free parse functions:
+ //
+ // stop: points to the final parse position (i.e parsing
+ // processed the input up to this point).
+ //
+ // hit: true if parsing is successful. This may be full:
+ // the parser consumed all the input, or partial:
+ // the parser consumed only a portion of the input.
+ //
+ // full: true when we have a full hit (i.e the parser
+ // consumed all the input.
+ //
+ // length: The number of characters consumed by the parser.
+ // This is valid only if we have a successful hit
+ // (either partial or full).
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename IteratorT = char const*>
+ struct parse_info
+ {
+ IteratorT stop;
+ bool hit;
+ bool full;
+ std::size_t length;
+
+ parse_info(
+ IteratorT const& stop_ = IteratorT(),
+ bool hit_ = false,
+ bool full_ = false,
+ std::size_t length_ = 0)
+ : stop(stop_)
+ , hit(hit_)
+ , full(full_)
+ , length(length_) {}
+
+ template <typename ParseInfoT>
+ parse_info(ParseInfoT const& pi)
+ : stop(pi.stop)
+ , hit(pi.hit)
+ , full(pi.full)
+ , length(pi.length) {}
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // Generic parse function
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename IteratorT, typename DerivedT>
+ parse_info<IteratorT>
+ parse(
+ IteratorT const& first,
+ IteratorT const& last,
+ parser<DerivedT> const& p);
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // Parse function for null terminated strings
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename CharT, typename DerivedT>
+ parse_info<CharT const*>
+ parse(
+ CharT const* str,
+ parser<DerivedT> const& p);
+
+}} // namespace boost::spirit
+
+#endif
+
+#include <boost/spirit/core/impl/parser.ipp>
diff --git a/boost/boost/spirit/core/primitives/impl/numerics.ipp b/boost/boost/spirit/core/primitives/impl/numerics.ipp
new file mode 100644
index 00000000000..144011f4f05
--- /dev/null
+++ b/boost/boost/spirit/core/primitives/impl/numerics.ipp
@@ -0,0 +1,531 @@
+/*=============================================================================
+ Copyright (c) 1998-2003 Joel de Guzman
+ Copyright (c) 2001-2003 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_NUMERICS_IPP
+#define BOOST_SPIRIT_NUMERICS_IPP
+
+#include <cmath>
+
+#if defined(BOOST_NO_STDC_NAMESPACE)
+# define BOOST_SPIRIT_IMPL_STD_NS
+#else
+# define BOOST_SPIRIT_IMPL_STD_NS std
+#endif
+
+namespace boost { namespace spirit {
+
+ struct sign_parser; // forward declaration only
+
+ namespace impl
+ {
+ ///////////////////////////////////////////////////////////////////////
+ //
+ // Extract the prefix sign (- or +)
+ //
+ ///////////////////////////////////////////////////////////////////////
+ template <typename ScannerT>
+ bool
+ extract_sign(ScannerT const& scan, std::size_t& count)
+ {
+ // Extract the sign
+ count = 0;
+ bool neg = *scan == '-';
+ if (neg || (*scan == '+'))
+ {
+ ++scan;
+ ++count;
+ return neg;
+ }
+
+ return false;
+ }
+
+ ///////////////////////////////////////////////////////////////////////
+ //
+ // Traits class for radix specific number conversion
+ //
+ // Test the validity of a single character:
+ //
+ // template<typename CharT> static bool is_valid(CharT ch);
+ //
+ // Convert a digit from character representation to binary
+ // representation:
+ //
+ // template<typename CharT> static int digit(CharT ch);
+ //
+ ///////////////////////////////////////////////////////////////////////
+ template<const int Radix>
+ struct radix_traits;
+
+ ////////////////////////////////// Binary
+ template<>
+ struct radix_traits<2>
+ {
+ template<typename CharT>
+ static bool is_valid(CharT ch)
+ {
+ return ('0' == ch || '1' == ch);
+ }
+
+ template<typename CharT>
+ static int digit(CharT ch)
+ {
+ return ch - '0';
+ }
+ };
+
+ ////////////////////////////////// Octal
+ template<>
+ struct radix_traits<8>
+ {
+ template<typename CharT>
+ static bool is_valid(CharT ch)
+ {
+ return ('0' <= ch && ch <= '7');
+ }
+
+ template<typename CharT>
+ static int digit(CharT ch)
+ {
+ return ch - '0';
+ }
+ };
+
+ ////////////////////////////////// Decimal
+ template<>
+ struct radix_traits<10>
+ {
+ template<typename CharT>
+ static bool is_valid(CharT ch)
+ {
+ return impl::isdigit_(ch);
+ }
+
+ template<typename CharT>
+ static int digit(CharT ch)
+ {
+ return ch - '0';
+ }
+ };
+
+ ////////////////////////////////// Hexadecimal
+ template<>
+ struct radix_traits<16>
+ {
+ template<typename CharT>
+ static bool is_valid(CharT ch)
+ {
+ return impl::isxdigit_(ch);
+ }
+
+ template<typename CharT>
+ static int digit(CharT ch)
+ {
+ if (impl::isdigit_(ch))
+ return ch - '0';
+ return impl::tolower_(ch) - 'a' + 10;
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////
+ //
+ // Helper templates for encapsulation of radix specific
+ // conversion of an input string to an integral value.
+ //
+ // main entry point:
+ //
+ // extract_int<Radix, MinDigits, MaxDigits, Accumulate>
+ // ::f(first, last, n, count);
+ //
+ // The template parameter Radix represents the radix of the
+ // number contained in the parsed string. The template
+ // parameter MinDigits specifies the minimum digits to
+ // accept. The template parameter MaxDigits specifies the
+ // maximum digits to parse. A -1 value for MaxDigits will
+ // make it parse an arbitrarilly large number as long as the
+ // numeric type can hold it. Accumulate is either
+ // positive_accumulate<Radix> (default) for parsing positive
+ // numbers or negative_accumulate<Radix> otherwise.
+ //
+ // scan.first and scan.last are iterators as usual (i.e.
+ // first is mutable and is moved forward when a match is
+ // found), n is a variable that holds the number (passed by
+ // reference). The number of parsed characters is added to
+ // count (also passed by reference)
+ //
+ // NOTE:
+ // Returns a non-match, if the number to parse
+ // overflows (or underflows) the used integral type.
+ // Overflow (or underflow) is detected when an
+ // operation wraps a value from its maximum to its
+ // minimum (or vice-versa). For example, overflow
+ // occurs when the result of the expression n * x is
+ // less than n (assuming n is positive and x is
+ // greater than 1).
+ //
+ // BEWARE:
+ // the parameters 'n' and 'count' should be properly
+ // initialized before calling this function.
+ //
+ ///////////////////////////////////////////////////////////////////////
+ template <int Radix>
+ struct positive_accumulate
+ {
+ // Use this accumulator if number is positive
+
+ template <typename T>
+ static bool check(T const& n, T const& prev)
+ {
+ return n < prev;
+ }
+
+ template <typename T, typename CharT>
+ static void add(T& n, CharT ch)
+ {
+ n += radix_traits<Radix>::digit(ch);
+ }
+ };
+
+ template <int Radix>
+ struct negative_accumulate
+ {
+ // Use this accumulator if number is negative
+
+ template <typename T>
+ static bool check(T const& n, T const& prev)
+ {
+ return n > prev;
+ }
+
+ template <typename T, typename CharT>
+ static void add(T& n, CharT ch)
+ {
+ n -= radix_traits<Radix>::digit(ch);
+ }
+ };
+
+ template <int Radix, typename Accumulate>
+ struct extract_int_base
+ {
+ // Common code for extract_int specializations
+ template <typename ScannerT, typename T>
+ static bool
+ f(ScannerT& scan, T& n)
+ {
+ T prev = n;
+ n *= Radix;
+ if (Accumulate::check(n, prev))
+ return false; // over/underflow!
+ prev = n;
+ Accumulate::add(n, *scan);
+ if (Accumulate::check(n, prev))
+ return false; // over/underflow!
+ return true;
+ }
+ };
+
+ template <bool Bounded>
+ struct extract_int_
+ {
+ template <
+ int Radix,
+ unsigned MinDigits,
+ int MaxDigits,
+ typename Accumulate
+ >
+ struct apply
+ {
+ typedef extract_int_base<Radix, Accumulate> base;
+ typedef radix_traits<Radix> check;
+
+ template <typename ScannerT, typename T>
+ static bool
+ f(ScannerT& scan, T& n, std::size_t& count)
+ {
+ std::size_t i = 0;
+ for (; (i < MaxDigits) && !scan.at_end()
+ && check::is_valid(*scan);
+ ++i, ++scan, ++count)
+ {
+ if (!base::f(scan, n))
+ return false; // over/underflow!
+ }
+ return i >= MinDigits;
+ }
+ };
+ };
+
+ template <>
+ struct extract_int_<false>
+ {
+ template <
+ int Radix,
+ unsigned MinDigits,
+ int MaxDigits,
+ typename Accumulate
+ >
+ struct apply
+ {
+ typedef extract_int_base<Radix, Accumulate> base;
+ typedef radix_traits<Radix> check;
+
+ template <typename ScannerT, typename T>
+ static bool
+ f(ScannerT& scan, T& n, std::size_t& count)
+ {
+ std::size_t i = 0;
+ for (; !scan.at_end() && check::is_valid(*scan);
+ ++i, ++scan, ++count)
+ {
+ if (!base::f(scan, n))
+ return false; // over/underflow!
+ }
+ return i >= MinDigits;
+ }
+ };
+ };
+
+ //////////////////////////////////
+ template <
+ int Radix, unsigned MinDigits, int MaxDigits,
+ typename Accumulate = positive_accumulate<Radix>
+ >
+ struct extract_int
+ {
+ template <typename ScannerT, typename T>
+ static bool
+ f(ScannerT& scan, T& n, std::size_t& count)
+ {
+ typedef typename extract_int_<(MaxDigits >= 0)>::template
+ apply<Radix, MinDigits, MaxDigits, Accumulate> extractor;
+ return extractor::f(scan, n, count);
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////
+ //
+ // uint_parser_impl class
+ //
+ ///////////////////////////////////////////////////////////////////////
+ template <
+ typename T = unsigned,
+ int Radix = 10,
+ unsigned MinDigits = 1,
+ int MaxDigits = -1
+ >
+ struct uint_parser_impl
+ : parser<uint_parser_impl<T, Radix, MinDigits, MaxDigits> >
+ {
+ typedef uint_parser_impl<T, Radix, MinDigits, MaxDigits> self_t;
+
+ template <typename ScannerT>
+ struct result
+ {
+ typedef typename match_result<ScannerT, T>::type type;
+ };
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ if (!scan.at_end())
+ {
+ T n = 0;
+ std::size_t count = 0;
+ typename ScannerT::iterator_t save = scan.first;
+ if (extract_int<Radix, MinDigits, MaxDigits>::
+ f(scan, n, count))
+ {
+ return scan.create_match(count, n, save, scan.first);
+ }
+ // return no-match if number overflows
+ }
+ return scan.no_match();
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////
+ //
+ // int_parser_impl class
+ //
+ ///////////////////////////////////////////////////////////////////////
+ template <
+ typename T = unsigned,
+ int Radix = 10,
+ unsigned MinDigits = 1,
+ int MaxDigits = -1
+ >
+ struct int_parser_impl
+ : parser<int_parser_impl<T, Radix, MinDigits, MaxDigits> >
+ {
+ typedef int_parser_impl<T, Radix, MinDigits, MaxDigits> self_t;
+
+ template <typename ScannerT>
+ struct result
+ {
+ typedef typename match_result<ScannerT, T>::type type;
+ };
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ typedef extract_int<Radix, MinDigits, MaxDigits,
+ negative_accumulate<Radix> > extract_int_neg_t;
+ typedef extract_int<Radix, MinDigits, MaxDigits>
+ extract_int_pos_t;
+
+ if (!scan.at_end())
+ {
+ T n = 0;
+ std::size_t count = 0;
+ typename ScannerT::iterator_t save = scan.first;
+
+ bool hit = impl::extract_sign(scan, count);
+
+ if (hit)
+ hit = extract_int_neg_t::f(scan, n, count);
+ else
+ hit = extract_int_pos_t::f(scan, n, count);
+
+ if (hit)
+ return scan.create_match(count, n, save, scan.first);
+ else
+ scan.first = save;
+ // return no-match if number overflows or underflows
+ }
+ return scan.no_match();
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////
+ //
+ // real_parser_impl class
+ //
+ ///////////////////////////////////////////////////////////////////////
+#if (defined(BOOST_MSVC) && (BOOST_MSVC <= 1310))
+#pragma warning(push)
+#pragma warning(disable:4127)
+#endif
+
+ template <typename RT, typename T, typename RealPoliciesT>
+ struct real_parser_impl
+ {
+ typedef real_parser_impl<RT, T, RealPoliciesT> self_t;
+
+ template <typename ScannerT>
+ RT parse_main(ScannerT const& scan) const
+ {
+ if (scan.at_end())
+ return scan.no_match();
+ typename ScannerT::iterator_t save = scan.first;
+
+ typedef typename parser_result<sign_parser, ScannerT>::type
+ sign_match_t;
+ typedef typename parser_result<chlit<>, ScannerT>::type
+ exp_match_t;
+
+ sign_match_t sign_match = RealPoliciesT::parse_sign(scan);
+ std::size_t count = sign_match ? sign_match.length() : 0;
+ bool neg = sign_match.has_valid_attribute() ?
+ sign_match.value() : false;
+
+ RT n_match = RealPoliciesT::parse_n(scan);
+ T n = n_match.has_valid_attribute() ?
+ n_match.value() : T(0);
+ bool got_a_number = n_match;
+ exp_match_t e_hit;
+
+ if (!got_a_number && !RealPoliciesT::allow_leading_dot)
+ return scan.no_match();
+ else
+ count += n_match.length();
+
+ if (neg)
+ n = -n;
+
+ if (RealPoliciesT::parse_dot(scan))
+ {
+ // We got the decimal point. Now we will try to parse
+ // the fraction if it is there. If not, it defaults
+ // to zero (0) only if we already got a number.
+
+ if (RT hit = RealPoliciesT::parse_frac_n(scan))
+ {
+ hit.value(hit.value()
+ * BOOST_SPIRIT_IMPL_STD_NS::
+ pow(T(10), T(-hit.length())));
+ if (neg)
+ n -= hit.value();
+ else
+ n += hit.value();
+ count += hit.length() + 1;
+
+ }
+
+ else if (!got_a_number ||
+ !RealPoliciesT::allow_trailing_dot)
+ return scan.no_match();
+
+ e_hit = RealPoliciesT::parse_exp(scan);
+ }
+ else
+ {
+ // We have reached a point where we
+ // still haven't seen a number at all.
+ // We return early with a no-match.
+ if (!got_a_number)
+ return scan.no_match();
+
+ // If we must expect a dot and we didn't see
+ // an exponent, return early with a no-match.
+ e_hit = RealPoliciesT::parse_exp(scan);
+ if (RealPoliciesT::expect_dot && !e_hit)
+ return scan.no_match();
+ }
+
+ if (e_hit)
+ {
+ // We got the exponent prefix. Now we will try to parse the
+ // actual exponent. It is an error if it is not there.
+ if (RT e_n_hit = RealPoliciesT::parse_exp_n(scan))
+ {
+ n *= BOOST_SPIRIT_IMPL_STD_NS::
+ pow(T(10), T(e_n_hit.value()));
+ count += e_n_hit.length() + e_hit.length();
+ }
+ else
+ {
+ // Oops, no exponent, return a no-match
+ return scan.no_match();
+ }
+ }
+
+ return scan.create_match(count, n, save, scan.first);
+ }
+
+ template <typename ScannerT>
+ static RT parse(ScannerT const& scan)
+ {
+ static self_t this_;
+ return impl::implicit_lexeme_parse<RT>(this_, scan, scan);
+ }
+ };
+
+#if (defined(BOOST_MSVC) && (BOOST_MSVC <= 1310))
+#pragma warning(pop)
+#endif
+
+ } // namespace impl
+
+///////////////////////////////////////////////////////////////////////////////
+}} // namespace boost::spirit
+
+#endif
+#undef BOOST_SPIRIT_IMPL_STD_NS
diff --git a/boost/boost/spirit/core/primitives/impl/primitives.ipp b/boost/boost/spirit/core/primitives/impl/primitives.ipp
new file mode 100644
index 00000000000..17ff2ce0290
--- /dev/null
+++ b/boost/boost/spirit/core/primitives/impl/primitives.ipp
@@ -0,0 +1,465 @@
+/*=============================================================================
+ Copyright (c) 1998-2003 Joel de Guzman
+ Copyright (c) 2003 Martin Wille
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_PRIMITIVES_IPP)
+#define BOOST_SPIRIT_PRIMITIVES_IPP
+
+// This should eventually go to a config file.
+#if defined(__GNUC__) && (__GNUC__ < 3) && !defined(_STLPORT_VERSION)
+# ifndef BOOST_SPIRIT_NO_CHAR_TRAITS
+# define BOOST_SPIRIT_NO_CHAR_TRAITS
+# endif
+#endif
+
+#include <cctype>
+#if !defined(BOOST_NO_CWCTYPE)
+#include <cwctype>
+#endif
+
+#ifndef BOOST_SPIRIT_NO_CHAR_TRAITS
+# include <string> // char_traits
+#endif
+
+#if defined(BOOST_MSVC)
+# pragma warning(disable:4800)
+#endif
+
+namespace boost { namespace spirit {
+
+ template <typename DrivedT> struct char_parser;
+
+ namespace impl
+ {
+ template <typename IteratorT>
+ inline IteratorT
+ get_last(IteratorT first)
+ {
+ while (*first)
+ first++;
+ return first;
+ }
+
+ template<
+ typename RT,
+ typename IteratorT,
+ typename ScannerT>
+ inline RT
+ string_parser_parse(
+ IteratorT str_first,
+ IteratorT str_last,
+ ScannerT& scan)
+ {
+ typedef typename ScannerT::iterator_t iterator_t;
+ iterator_t saved = scan.first;
+ std::size_t slen = str_last - str_first;
+
+ while (str_first != str_last)
+ {
+ if (scan.at_end() || (*str_first != *scan))
+ return scan.no_match();
+ ++str_first;
+ ++scan;
+ }
+
+ return scan.create_match(slen, nil_t(), saved, scan.first);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // Conversion from char_type to int_type
+ //
+ ///////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_SPIRIT_NO_CHAR_TRAITS
+# define BOOST_SPIRIT_CHAR_TRAITS_NAMESPACE std
+#else
+
+ template <typename CharT>
+ struct char_traits
+ {
+ typedef CharT int_type;
+ typedef CharT char_type;
+ };
+
+ template<>
+ struct char_traits<char>
+ {
+ typedef int int_type;
+ typedef char char_type;
+
+ static char_type
+ to_char_type(int_type c)
+ {
+ return static_cast<char_type>(c);
+ }
+
+ static int
+ to_int_type(char c)
+ {
+ return static_cast<unsigned char>(c);
+ }
+ };
+
+ template<>
+ struct char_traits<unsigned char>
+ {
+ typedef int int_type;
+ typedef unsigned char char_type;
+
+ static char_type
+ to_char_type(int_type c)
+ {
+ return static_cast<char_type>(c);
+ }
+
+ static int
+ to_int_type(unsigned char c)
+ {
+ return c;
+ }
+ };
+
+# define BOOST_SPIRIT_CHAR_TRAITS_NAMESPACE impl
+# ifndef BOOST_NO_CWCTYPE
+
+ template<>
+ struct char_traits<wchar_t>
+ {
+ typedef wint_t int_type;
+ typedef wchar_t char_type;
+
+ static char_type
+ to_char_type(int_type c)
+ {
+ return static_cast<char_type>(c);
+ }
+
+ static wint_t
+ to_int_type(wchar_t c)
+ {
+ return c;
+ }
+ };
+
+# endif
+#endif // BOOST_SPIRIT_NO_CHAR_TRAITS
+
+ // Use char_traits for char and wchar_t only, as these are the only
+ // specializations provided in the standard. Other types are on their
+ // own.
+ //
+ // For UDT, one may override:
+ //
+ // isalnum
+ // isalpha
+ // iscntrl
+ // isdigit
+ // isgraph
+ // islower
+ // isprint
+ // ispunct
+ // isspace
+ // isupper
+ // isxdigit
+ // isblank
+ // isupper
+ // tolower
+ // toupper
+ //
+ // in a namespace suitable for Argument Dependent lookup or in
+ // namespace std (disallowed by the standard).
+
+ template <typename CharT>
+ struct char_type_char_traits_helper
+ {
+ typedef CharT char_type;
+ typedef typename BOOST_SPIRIT_CHAR_TRAITS_NAMESPACE
+ ::char_traits<CharT>::int_type int_type;
+
+ static int_type to_int_type(CharT c)
+ {
+ return BOOST_SPIRIT_CHAR_TRAITS_NAMESPACE
+ ::char_traits<CharT>::to_int_type(c);
+ }
+
+ static char_type to_char_type(int_type i)
+ {
+ return BOOST_SPIRIT_CHAR_TRAITS_NAMESPACE
+ ::char_traits<CharT>::to_char_type(i);
+ }
+ };
+
+ template <typename CharT>
+ struct char_traits_helper
+ {
+ typedef CharT char_type;
+ typedef CharT int_type;
+
+ static CharT & to_int_type(CharT & c)
+ {
+ return c;
+ }
+
+ static CharT & to_char_type(CharT & c)
+ {
+ return c;
+ }
+ };
+
+ template <>
+ struct char_traits_helper<char>
+ : char_type_char_traits_helper<char>
+ {
+ };
+
+#if !defined(BOOST_NO_CWCTYPE)
+
+ template <>
+ struct char_traits_helper<wchar_t>
+ : char_type_char_traits_helper<wchar_t>
+ {
+ };
+
+#endif
+
+ template <typename CharT>
+ inline typename char_traits_helper<CharT>::int_type
+ to_int_type(CharT c)
+ {
+ return char_traits_helper<CharT>::to_int_type(c);
+ }
+
+ template <typename CharT>
+ inline CharT
+ to_char_type(typename char_traits_helper<CharT>::int_type c)
+ {
+ return char_traits_helper<CharT>::to_char_type(c);
+ }
+
+ ///////////////////////////////////////////////////////////////////////
+ //
+ // Convenience functions
+ //
+ ///////////////////////////////////////////////////////////////////////
+
+ template <typename CharT>
+ inline bool
+ isalnum_(CharT c)
+ {
+ using namespace std;
+ return isalnum(to_int_type(c)) ? true : false;
+ }
+
+ template <typename CharT>
+ inline bool
+ isalpha_(CharT c)
+ {
+ using namespace std;
+ return isalpha(to_int_type(c)) ? true : false;
+ }
+
+ template <typename CharT>
+ inline bool
+ iscntrl_(CharT c)
+ {
+ using namespace std;
+ return iscntrl(to_int_type(c)) ? true : false;
+ }
+
+ template <typename CharT>
+ inline bool
+ isdigit_(CharT c)
+ {
+ using namespace std;
+ return isdigit(to_int_type(c)) ? true : false;
+ }
+
+ template <typename CharT>
+ inline bool
+ isgraph_(CharT c)
+ {
+ using namespace std;
+ return isgraph(to_int_type(c)) ? true : false;
+ }
+
+ template <typename CharT>
+ inline bool
+ islower_(CharT c)
+ {
+ using namespace std;
+ return islower(to_int_type(c)) ? true : false;
+ }
+
+ template <typename CharT>
+ inline bool
+ isprint_(CharT c)
+ {
+ using namespace std;
+ return isprint(to_int_type(c)) ? true : false;
+ }
+
+ template <typename CharT>
+ inline bool
+ ispunct_(CharT c)
+ {
+ using namespace std;
+ return ispunct(to_int_type(c)) ? true : false;
+ }
+
+ template <typename CharT>
+ inline bool
+ isspace_(CharT c)
+ {
+ using namespace std;
+ return isspace(to_int_type(c)) ? true : false;
+ }
+
+ template <typename CharT>
+ inline bool
+ isupper_(CharT c)
+ {
+ using namespace std;
+ return isupper(to_int_type(c)) ? true : false;
+ }
+
+ template <typename CharT>
+ inline bool
+ isxdigit_(CharT c)
+ {
+ using namespace std;
+ return isxdigit(to_int_type(c)) ? true : false;
+ }
+
+ template <typename CharT>
+ inline bool
+ isblank_(CharT c)
+ {
+ return (c == ' ' || c == '\t');
+ }
+
+ template <typename CharT>
+ inline CharT
+ tolower_(CharT c)
+ {
+ using namespace std;
+ return to_char_type<CharT>(tolower(to_int_type(c)));
+ }
+
+ template <typename CharT>
+ inline CharT
+ toupper_(CharT c)
+ {
+ using namespace std;
+ return to_char_type<CharT>(toupper(to_int_type(c)));
+ }
+
+#if !defined(BOOST_NO_CWCTYPE)
+
+ inline bool
+ isalnum_(wchar_t c)
+ {
+ using namespace std;
+ return iswalnum(to_int_type(c)) ? true : false;
+ }
+
+ inline bool
+ isalpha_(wchar_t c)
+ {
+ using namespace std;
+ return iswalpha(to_int_type(c)) ? true : false;
+ }
+
+ inline bool
+ iscntrl_(wchar_t c)
+ {
+ using namespace std;
+ return iswcntrl(to_int_type(c)) ? true : false;
+ }
+
+ inline bool
+ isdigit_(wchar_t c)
+ {
+ using namespace std;
+ return iswdigit(to_int_type(c)) ? true : false;
+ }
+
+ inline bool
+ isgraph_(wchar_t c)
+ {
+ using namespace std;
+ return iswgraph(to_int_type(c)) ? true : false;
+ }
+
+ inline bool
+ islower_(wchar_t c)
+ {
+ using namespace std;
+ return iswlower(to_int_type(c)) ? true : false;
+ }
+
+ inline bool
+ isprint_(wchar_t c)
+ {
+ using namespace std;
+ return iswprint(to_int_type(c)) ? true : false;
+ }
+
+ inline bool
+ ispunct_(wchar_t c)
+ {
+ using namespace std;
+ return iswpunct(to_int_type(c)) ? true : false;
+ }
+
+ inline bool
+ isspace_(wchar_t c)
+ {
+ using namespace std;
+ return iswspace(to_int_type(c)) ? true : false;
+ }
+
+ inline bool
+ isupper_(wchar_t c)
+ {
+ using namespace std;
+ return iswupper(to_int_type(c)) ? true : false;
+ }
+
+ inline bool
+ isxdigit_(wchar_t c)
+ {
+ using namespace std;
+ return iswxdigit(to_int_type(c)) ? true : false;
+ }
+
+ inline bool
+ isblank_(wchar_t c)
+ {
+ return (c == L' ' || c == L'\t');
+ }
+
+ inline wchar_t
+ tolower_(wchar_t c)
+ {
+ using namespace std;
+ return to_char_type<wchar_t>(towlower(to_int_type(c)));
+ }
+
+ inline wchar_t
+ toupper_(wchar_t c)
+ {
+ using namespace std;
+ return to_char_type<wchar_t>(towupper(to_int_type(c)));
+ }
+
+#endif // !defined(BOOST_NO_CWCTYPE)
+
+}}} // namespace boost::spirit::impl
+
+#endif
diff --git a/boost/boost/spirit/core/primitives/numerics.hpp b/boost/boost/spirit/core/primitives/numerics.hpp
new file mode 100644
index 00000000000..58e552aabaa
--- /dev/null
+++ b/boost/boost/spirit/core/primitives/numerics.hpp
@@ -0,0 +1,285 @@
+/*=============================================================================
+ Copyright (c) 1998-2003 Joel de Guzman
+ Copyright (c) 2001-2003 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_NUMERICS_HPP
+#define BOOST_SPIRIT_NUMERICS_HPP
+
+#include <boost/config.hpp>
+#include <boost/spirit/core/parser.hpp>
+#include <boost/spirit/core/composite/directives.hpp>
+
+#include <boost/spirit/core/primitives/numerics_fwd.hpp>
+#include <boost/spirit/core/primitives/impl/numerics.ipp>
+
+namespace boost { namespace spirit
+{
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // uint_parser class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <
+ typename T,
+ int Radix,
+ unsigned MinDigits,
+ int MaxDigits
+ >
+ struct uint_parser : parser<uint_parser<T, Radix, MinDigits, MaxDigits> >
+ {
+ typedef uint_parser<T, Radix, MinDigits, MaxDigits> self_t;
+
+ template <typename ScannerT>
+ struct result
+ {
+ typedef typename match_result<ScannerT, T>::type type;
+ };
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ typedef impl::uint_parser_impl<T, Radix, MinDigits, MaxDigits> impl_t;
+ typedef typename parser_result<impl_t, ScannerT>::type result_t;
+ return impl::contiguous_parser_parse<result_t>(impl_t(), scan, scan);
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // int_parser class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <
+ typename T,
+ int Radix,
+ unsigned MinDigits,
+ int MaxDigits
+ >
+ struct int_parser : parser<int_parser<T, Radix, MinDigits, MaxDigits> >
+ {
+ typedef int_parser<T, Radix, MinDigits, MaxDigits> self_t;
+
+ template <typename ScannerT>
+ struct result
+ {
+ typedef typename match_result<ScannerT, T>::type type;
+ };
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ typedef impl::int_parser_impl<T, Radix, MinDigits, MaxDigits> impl_t;
+ typedef typename parser_result<impl_t, ScannerT>::type result_t;
+ return impl::contiguous_parser_parse<result_t>(impl_t(), scan, scan);
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // uint_parser/int_parser instantiations
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ int_parser<int> const
+ int_p = int_parser<int>();
+
+ uint_parser<unsigned> const
+ uint_p = uint_parser<unsigned>();
+
+ uint_parser<unsigned, 2> const
+ bin_p = uint_parser<unsigned, 2>();
+
+ uint_parser<unsigned, 8> const
+ oct_p = uint_parser<unsigned, 8>();
+
+ uint_parser<unsigned, 16> const
+ hex_p = uint_parser<unsigned, 16>();
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // sign_parser class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ namespace impl
+ {
+ // Utility to extract the prefix sign ('-' | '+')
+ template <typename ScannerT>
+ bool extract_sign(ScannerT const& scan, std::size_t& count);
+ }
+
+ struct sign_parser : public parser<sign_parser>
+ {
+ typedef sign_parser self_t;
+
+ template <typename ScannerT>
+ struct result
+ {
+ typedef typename match_result<ScannerT, bool>::type type;
+ };
+
+ sign_parser() {}
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ if (!scan.at_end())
+ {
+ std::size_t length;
+ typename ScannerT::iterator_t save(scan.first);
+ bool neg = impl::extract_sign(scan, length);
+ if (length)
+ return scan.create_match(1, neg, save, scan.first);
+ }
+ return scan.no_match();
+ }
+ };
+
+ sign_parser const sign_p = sign_parser();
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // default real number policies
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename T>
+ struct ureal_parser_policies
+ {
+ // trailing dot policy suggested suggested by Gustavo Guerra
+ BOOST_STATIC_CONSTANT(bool, allow_leading_dot = true);
+ BOOST_STATIC_CONSTANT(bool, allow_trailing_dot = true);
+ BOOST_STATIC_CONSTANT(bool, expect_dot = false);
+
+ typedef uint_parser<T, 10, 1, -1> uint_parser_t;
+ typedef int_parser<T, 10, 1, -1> int_parser_t;
+
+ template <typename ScannerT>
+ static typename match_result<ScannerT, nil_t>::type
+ parse_sign(ScannerT& scan)
+ {
+ return scan.no_match();
+ }
+
+ template <typename ScannerT>
+ static typename parser_result<uint_parser_t, ScannerT>::type
+ parse_n(ScannerT& scan)
+ {
+ return uint_parser_t().parse(scan);
+ }
+
+ template <typename ScannerT>
+ static typename parser_result<chlit<>, ScannerT>::type
+ parse_dot(ScannerT& scan)
+ {
+ return ch_p('.').parse(scan);
+ }
+
+ template <typename ScannerT>
+ static typename parser_result<uint_parser_t, ScannerT>::type
+ parse_frac_n(ScannerT& scan)
+ {
+ return uint_parser_t().parse(scan);
+ }
+
+ template <typename ScannerT>
+ static typename parser_result<chlit<>, ScannerT>::type
+ parse_exp(ScannerT& scan)
+ {
+ return as_lower_d['e'].parse(scan);
+ }
+
+ template <typename ScannerT>
+ static typename parser_result<int_parser_t, ScannerT>::type
+ parse_exp_n(ScannerT& scan)
+ {
+ return int_parser_t().parse(scan);
+ }
+ };
+
+ template <typename T>
+ struct real_parser_policies : public ureal_parser_policies<T>
+ {
+ template <typename ScannerT>
+ static typename parser_result<sign_parser, ScannerT>::type
+ parse_sign(ScannerT& scan)
+ {
+ return sign_p.parse(scan);
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // real_parser class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <
+ typename T,
+ typename RealPoliciesT
+ >
+ struct real_parser
+ : public parser<real_parser<T, RealPoliciesT> >
+ {
+ typedef real_parser<T, RealPoliciesT> self_t;
+
+ template <typename ScannerT>
+ struct result
+ {
+ typedef typename match_result<ScannerT, T>::type type;
+ };
+
+ real_parser() {}
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ typedef typename parser_result<self_t, ScannerT>::type result_t;
+ return impl::real_parser_impl<result_t, T, RealPoliciesT>::parse(scan);
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // real_parser instantiations
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ real_parser<double, ureal_parser_policies<double> > const
+ ureal_p = real_parser<double, ureal_parser_policies<double> >();
+
+ real_parser<double, real_parser_policies<double> > const
+ real_p = real_parser<double, real_parser_policies<double> >();
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // strict reals (do not allow plain integers (no decimal point))
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename T>
+ struct strict_ureal_parser_policies : public ureal_parser_policies<T>
+ {
+ BOOST_STATIC_CONSTANT(bool, expect_dot = true);
+ };
+
+ template <typename T>
+ struct strict_real_parser_policies : public real_parser_policies<T>
+ {
+ BOOST_STATIC_CONSTANT(bool, expect_dot = true);
+ };
+
+ real_parser<double, strict_ureal_parser_policies<double> > const
+ strict_ureal_p
+ = real_parser<double, strict_ureal_parser_policies<double> >();
+
+ real_parser<double, strict_real_parser_policies<double> > const
+ strict_real_p
+ = real_parser<double, strict_real_parser_policies<double> >();
+
+}} // namespace boost::spirit
+
+#endif
diff --git a/boost/boost/spirit/core/primitives/numerics_fwd.hpp b/boost/boost/spirit/core/primitives/numerics_fwd.hpp
new file mode 100644
index 00000000000..9b42061067e
--- /dev/null
+++ b/boost/boost/spirit/core/primitives/numerics_fwd.hpp
@@ -0,0 +1,83 @@
+/*=============================================================================
+ Copyright (C) 2006 Tobias Schwinger
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_NUMERICS_FWD_HPP)
+# define BOOST_SPIRIT_NUMERICS_FWD_HPP
+
+namespace boost { namespace spirit
+{
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // uint_parser class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <
+ typename T = unsigned,
+ int Radix = 10,
+ unsigned MinDigits = 1,
+ int MaxDigits = -1
+ >
+ struct uint_parser;
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // int_parser class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <
+ typename T = unsigned,
+ int Radix = 10,
+ unsigned MinDigits = 1,
+ int MaxDigits = -1
+ >
+ struct int_parser;
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // sign_parser class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ struct sign_parser;
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // default real number policies
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename T>
+ struct ureal_parser_policies;
+
+ template <typename T>
+ struct real_parser_policies;
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // real_parser class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <
+ typename T = double,
+ typename RealPoliciesT = ureal_parser_policies<T>
+ >
+ struct real_parser;
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // strict reals (do not allow plain integers (no decimal point))
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename T>
+ struct strict_ureal_parser_policies;
+
+ template <typename T>
+ struct strict_real_parser_policies;
+
+}} // namespace boost::spirit
+
+#endif
+
diff --git a/boost/boost/spirit/core/primitives/primitives.hpp b/boost/boost/spirit/core/primitives/primitives.hpp
new file mode 100644
index 00000000000..89be6ccf1a4
--- /dev/null
+++ b/boost/boost/spirit/core/primitives/primitives.hpp
@@ -0,0 +1,645 @@
+/*=============================================================================
+ Copyright (c) 1998-2003 Joel de Guzman
+ Copyright (c) 2003 Martin Wille
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_PRIMITIVES_HPP)
+#define BOOST_SPIRIT_PRIMITIVES_HPP
+
+#include <boost/ref.hpp>
+#include <boost/spirit/core/assert.hpp>
+#include <boost/spirit/core/parser.hpp>
+#include <boost/spirit/core/composite/impl/directives.ipp>
+#include <boost/spirit/core/primitives/impl/primitives.ipp>
+
+#ifdef BOOST_MSVC
+#pragma warning(disable : 4512)
+#endif
+
+namespace boost { namespace spirit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // char_parser class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename DerivedT>
+ struct char_parser : public parser<DerivedT>
+ {
+ typedef DerivedT self_t;
+ template <typename ScannerT>
+ struct result
+ {
+ typedef typename match_result<
+ ScannerT,
+ typename ScannerT::value_t
+ >::type type;
+ };
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ typedef typename parser_result<self_t, ScannerT>::type result_t;
+ typedef typename ScannerT::value_t value_t;
+ typedef typename ScannerT::iterator_t iterator_t;
+
+ if (!scan.at_end())
+ {
+ value_t ch = *scan;
+ if (this->derived().test(ch))
+ {
+ iterator_t save(scan.first);
+ ++scan.first;
+ return scan.create_match(1, ch, save, scan.first);
+ }
+ }
+ return scan.no_match();
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // negation of char_parsers
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename PositiveT>
+ struct negated_char_parser
+ : public char_parser<negated_char_parser<PositiveT> >
+ {
+ typedef negated_char_parser<PositiveT> self_t;
+ typedef PositiveT positive_t;
+
+ negated_char_parser(positive_t const& p)
+ : positive(p.derived()) {}
+
+ template <typename T>
+ bool test(T ch) const
+ {
+ return !positive.test(ch);
+ }
+
+ positive_t const positive;
+ };
+
+ template <typename ParserT>
+ inline negated_char_parser<ParserT>
+ operator~(char_parser<ParserT> const& p)
+ {
+ return negated_char_parser<ParserT>(p.derived());
+ }
+
+ template <typename ParserT>
+ inline ParserT
+ operator~(negated_char_parser<ParserT> const& n)
+ {
+ return n.positive;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // chlit class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename CharT = char>
+ struct chlit : public char_parser<chlit<CharT> >
+ {
+ chlit(CharT ch_)
+ : ch(ch_) {}
+
+ template <typename T>
+ bool test(T ch_) const
+ {
+ return ch_ == ch;
+ }
+
+ CharT ch;
+ };
+
+ template <typename CharT>
+ inline chlit<CharT>
+ ch_p(CharT ch)
+ {
+ return chlit<CharT>(ch);
+ }
+
+ // This should take care of ch_p("a") "bugs"
+ template <typename CharT, std::size_t N>
+ inline chlit<CharT>
+ ch_p(CharT const (& str)[N])
+ {
+ // ch_p's argument should be a single character or a null-terminated
+ // string with a single character
+ BOOST_STATIC_ASSERT(N < 3);
+ return chlit<CharT>(str[0]);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // range class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename CharT = char>
+ struct range : public char_parser<range<CharT> >
+ {
+ range(CharT first_, CharT last_)
+ : first(first_), last(last_)
+ {
+ BOOST_SPIRIT_ASSERT(!(last < first));
+ }
+
+ template <typename T>
+ bool test(T ch) const
+ {
+ return !(CharT(ch) < first) && !(last < CharT(ch));
+ }
+
+ CharT first;
+ CharT last;
+ };
+
+ template <typename CharT>
+ inline range<CharT>
+ range_p(CharT first, CharT last)
+ {
+ return range<CharT>(first, last);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // chseq class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename IteratorT = char const*>
+ class chseq : public parser<chseq<IteratorT> >
+ {
+ public:
+
+ typedef chseq<IteratorT> self_t;
+
+ chseq(IteratorT first_, IteratorT last_)
+ : first(first_), last(last_) {}
+
+ chseq(IteratorT first_)
+ : first(first_), last(impl::get_last(first_)) {}
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ typedef typename boost::unwrap_reference<IteratorT>::type striter_t;
+ typedef typename parser_result<self_t, ScannerT>::type result_t;
+ return impl::string_parser_parse<result_t>(
+ striter_t(first),
+ striter_t(last),
+ scan);
+ }
+
+ private:
+
+ IteratorT first;
+ IteratorT last;
+ };
+
+ template <typename CharT>
+ inline chseq<CharT const*>
+ chseq_p(CharT const* str)
+ {
+ return chseq<CharT const*>(str);
+ }
+
+ template <typename IteratorT>
+ inline chseq<IteratorT>
+ chseq_p(IteratorT first, IteratorT last)
+ {
+ return chseq<IteratorT>(first, last);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // strlit class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename IteratorT = char const*>
+ class strlit : public parser<strlit<IteratorT> >
+ {
+ public:
+
+ typedef strlit<IteratorT> self_t;
+
+ strlit(IteratorT first, IteratorT last)
+ : seq(first, last) {}
+
+ strlit(IteratorT first)
+ : seq(first) {}
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ typedef typename parser_result<self_t, ScannerT>::type result_t;
+ return impl::contiguous_parser_parse<result_t>
+ (seq, scan, scan);
+ }
+
+ private:
+
+ chseq<IteratorT> seq;
+ };
+
+ template <typename CharT>
+ inline strlit<CharT const*>
+ str_p(CharT const* str)
+ {
+ return strlit<CharT const*>(str);
+ }
+
+ template <typename CharT>
+ inline strlit<CharT *>
+ str_p(CharT * str)
+ {
+ return strlit<CharT *>(str);
+ }
+
+ template <typename IteratorT>
+ inline strlit<IteratorT>
+ str_p(IteratorT first, IteratorT last)
+ {
+ return strlit<IteratorT>(first, last);
+ }
+
+ // This should take care of str_p('a') "bugs"
+ template <typename CharT>
+ inline chlit<CharT>
+ str_p(CharT ch)
+ {
+ return chlit<CharT>(ch);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // nothing_parser class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ struct nothing_parser : public parser<nothing_parser>
+ {
+ typedef nothing_parser self_t;
+
+ nothing_parser() {}
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ return scan.no_match();
+ }
+ };
+
+ nothing_parser const nothing_p = nothing_parser();
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // anychar_parser class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ struct anychar_parser : public char_parser<anychar_parser>
+ {
+ typedef anychar_parser self_t;
+
+ anychar_parser() {}
+
+ template <typename CharT>
+ bool test(CharT) const
+ {
+ return true;
+ }
+ };
+
+ anychar_parser const anychar_p = anychar_parser();
+
+ inline nothing_parser
+ operator~(anychar_parser)
+ {
+ return nothing_p;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // alnum_parser class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ struct alnum_parser : public char_parser<alnum_parser>
+ {
+ typedef alnum_parser self_t;
+
+ alnum_parser() {}
+
+ template <typename CharT>
+ bool test(CharT ch) const
+ {
+ return impl::isalnum_(ch);
+ }
+ };
+
+ alnum_parser const alnum_p = alnum_parser();
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // alpha_parser class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ struct alpha_parser : public char_parser<alpha_parser>
+ {
+ typedef alpha_parser self_t;
+
+ alpha_parser() {}
+
+ template <typename CharT>
+ bool test(CharT ch) const
+ {
+ return impl::isalpha_(ch);
+ }
+ };
+
+ alpha_parser const alpha_p = alpha_parser();
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // cntrl_parser class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ struct cntrl_parser : public char_parser<cntrl_parser>
+ {
+ typedef cntrl_parser self_t;
+
+ cntrl_parser() {}
+
+ template <typename CharT>
+ bool test(CharT ch) const
+ {
+ return impl::iscntrl_(ch);
+ }
+ };
+
+ cntrl_parser const cntrl_p = cntrl_parser();
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // digit_parser class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ struct digit_parser : public char_parser<digit_parser>
+ {
+ typedef digit_parser self_t;
+
+ digit_parser() {}
+
+ template <typename CharT>
+ bool test(CharT ch) const
+ {
+ return impl::isdigit_(ch);
+ }
+ };
+
+ digit_parser const digit_p = digit_parser();
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // graph_parser class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ struct graph_parser : public char_parser<graph_parser>
+ {
+ typedef graph_parser self_t;
+
+ graph_parser() {}
+
+ template <typename CharT>
+ bool test(CharT ch) const
+ {
+ return impl::isgraph_(ch);
+ }
+ };
+
+ graph_parser const graph_p = graph_parser();
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // lower_parser class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ struct lower_parser : public char_parser<lower_parser>
+ {
+ typedef lower_parser self_t;
+
+ lower_parser() {}
+
+ template <typename CharT>
+ bool test(CharT ch) const
+ {
+ return impl::islower_(ch);
+ }
+ };
+
+ lower_parser const lower_p = lower_parser();
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // print_parser class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ struct print_parser : public char_parser<print_parser>
+ {
+ typedef print_parser self_t;
+
+ print_parser() {}
+
+ template <typename CharT>
+ bool test(CharT ch) const
+ {
+ return impl::isprint_(ch);
+ }
+ };
+
+ print_parser const print_p = print_parser();
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // punct_parser class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ struct punct_parser : public char_parser<punct_parser>
+ {
+ typedef punct_parser self_t;
+
+ punct_parser() {}
+
+ template <typename CharT>
+ bool test(CharT ch) const
+ {
+ return impl::ispunct_(ch);
+ }
+ };
+
+ punct_parser const punct_p = punct_parser();
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // blank_parser class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ struct blank_parser : public char_parser<blank_parser>
+ {
+ typedef blank_parser self_t;
+
+ blank_parser() {}
+
+ template <typename CharT>
+ bool test(CharT ch) const
+ {
+ return impl::isblank_(ch);
+ }
+ };
+
+ blank_parser const blank_p = blank_parser();
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // space_parser class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ struct space_parser : public char_parser<space_parser>
+ {
+ typedef space_parser self_t;
+
+ space_parser() {}
+
+ template <typename CharT>
+ bool test(CharT ch) const
+ {
+ return impl::isspace_(ch);
+ }
+ };
+
+ space_parser const space_p = space_parser();
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // upper_parser class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ struct upper_parser : public char_parser<upper_parser>
+ {
+ typedef upper_parser self_t;
+
+ upper_parser() {}
+
+ template <typename CharT>
+ bool test(CharT ch) const
+ {
+ return impl::isupper_(ch);
+ }
+ };
+
+ upper_parser const upper_p = upper_parser();
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // xdigit_parser class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ struct xdigit_parser : public char_parser<xdigit_parser>
+ {
+ typedef xdigit_parser self_t;
+
+ xdigit_parser() {}
+
+ template <typename CharT>
+ bool test(CharT ch) const
+ {
+ return impl::isxdigit_(ch);
+ }
+ };
+
+ xdigit_parser const xdigit_p = xdigit_parser();
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // eol_parser class (contributed by Martin Wille)
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ struct eol_parser : public parser<eol_parser>
+ {
+ typedef eol_parser self_t;
+
+ eol_parser() {}
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ typename ScannerT::iterator_t save = scan.first;
+ std::size_t len = 0;
+
+ if (!scan.at_end() && *scan == '\r') // CR
+ {
+ ++scan.first;
+ ++len;
+ }
+
+ // Don't call skipper here
+ if (scan.first != scan.last && *scan == '\n') // LF
+ {
+ ++scan.first;
+ ++len;
+ }
+
+ if (len)
+ return scan.create_match(len, nil_t(), save, scan.first);
+ return scan.no_match();
+ }
+ };
+
+ eol_parser const eol_p = eol_parser();
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // end_parser class (suggested by Markus Schöpflin)
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ struct end_parser : public parser<end_parser>
+ {
+ typedef end_parser self_t;
+
+ end_parser() {}
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ if (scan.at_end())
+ return scan.empty_match();
+ return scan.no_match();
+ }
+ };
+
+ end_parser const end_p = end_parser();
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // the pizza_p parser :-)
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ inline strlit<char const*> const
+ pizza_p(char const* your_favorite_pizza)
+ {
+ return your_favorite_pizza;
+ }
+
+}} // namespace boost::spirit
+
+#endif
diff --git a/boost/boost/spirit/core/safe_bool.hpp b/boost/boost/spirit/core/safe_bool.hpp
new file mode 100644
index 00000000000..5a2631aac09
--- /dev/null
+++ b/boost/boost/spirit/core/safe_bool.hpp
@@ -0,0 +1,59 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_SAFE_BOOL_HPP)
+#define BOOST_SPIRIT_SAFE_BOOL_HPP
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+namespace boost { namespace spirit
+{
+ namespace impl
+ {
+ template <typename T>
+ struct no_base {};
+
+ template <typename T>
+ struct safe_bool_impl
+ {
+#if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003))
+ void stub(T*) {};
+ typedef void (safe_bool_impl::*type)(T*);
+#else
+ typedef T* TP; // workaround to make parsing easier
+ TP stub;
+ typedef TP safe_bool_impl::*type;
+#endif
+ };
+ }
+
+ template <typename DerivedT, typename BaseT = impl::no_base<DerivedT> >
+ struct safe_bool : BaseT
+ {
+ private:
+ typedef impl::safe_bool_impl<DerivedT> impl_t;
+ typedef typename impl_t::type bool_type;
+
+ public:
+ operator bool_type() const
+ {
+ return static_cast<const DerivedT*>(this)->operator_bool() ?
+ &impl_t::stub : 0;
+ }
+
+ operator bool_type()
+ {
+ return static_cast<DerivedT*>(this)->operator_bool() ?
+ &impl_t::stub : 0;
+ }
+ };
+}}
+
+#endif
+
diff --git a/boost/boost/spirit/core/scanner/impl/skipper.ipp b/boost/boost/spirit/core/scanner/impl/skipper.ipp
new file mode 100644
index 00000000000..b809e64cb11
--- /dev/null
+++ b/boost/boost/spirit/core/scanner/impl/skipper.ipp
@@ -0,0 +1,177 @@
+/*=============================================================================
+ Copyright (c) 1998-2003 Joel de Guzman
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+============================================================================*/
+#if !defined(BOOST_SPIRIT_SKIPPER_IPP)
+#define BOOST_SPIRIT_SKIPPER_IPP
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+ struct space_parser;
+ template <typename BaseT>
+ struct no_skipper_iteration_policy;
+
+ namespace impl
+ {
+ template <typename ST, typename ScannerT, typename BaseT>
+ inline void
+ skipper_skip(
+ ST const& s,
+ ScannerT const& scan,
+ skipper_iteration_policy<BaseT> const&)
+ {
+ typedef scanner_policies<
+ no_skipper_iteration_policy<
+ BOOST_DEDUCED_TYPENAME ScannerT::iteration_policy_t>,
+ BOOST_DEDUCED_TYPENAME ScannerT::match_policy_t,
+ BOOST_DEDUCED_TYPENAME ScannerT::action_policy_t
+ > policies_t;
+
+ scanner<BOOST_DEDUCED_TYPENAME ScannerT::iterator_t, policies_t>
+ scan2(scan.first, scan.last, policies_t(scan));
+ typedef typename ScannerT::iterator_t iterator_t;
+
+ for (;;)
+ {
+ iterator_t save = scan.first;
+ if (!s.parse(scan2))
+ {
+ scan.first = save;
+ break;
+ }
+ }
+ }
+
+ template <typename ST, typename ScannerT, typename BaseT>
+ inline void
+ skipper_skip(
+ ST const& s,
+ ScannerT const& scan,
+ no_skipper_iteration_policy<BaseT> const&)
+ {
+ for (;;)
+ {
+ typedef typename ScannerT::iterator_t iterator_t;
+ iterator_t save = scan.first;
+ if (!s.parse(scan))
+ {
+ scan.first = save;
+ break;
+ }
+ }
+ }
+
+ template <typename ST, typename ScannerT>
+ inline void
+ skipper_skip(
+ ST const& s,
+ ScannerT const& scan,
+ iteration_policy const&)
+ {
+ for (;;)
+ {
+ typedef typename ScannerT::iterator_t iterator_t;
+ iterator_t save = scan.first;
+ if (!s.parse(scan))
+ {
+ scan.first = save;
+ break;
+ }
+ }
+ }
+
+ template <typename SkipT>
+ struct phrase_parser
+ {
+ template <typename IteratorT, typename ParserT>
+ static parse_info<IteratorT>
+ parse(
+ IteratorT const& first_,
+ IteratorT const& last,
+ ParserT const& p,
+ SkipT const& skip)
+ {
+ typedef skip_parser_iteration_policy<SkipT> iter_policy_t;
+ typedef scanner_policies<iter_policy_t> scanner_policies_t;
+ typedef scanner<IteratorT, scanner_policies_t> scanner_t;
+
+ iter_policy_t iter_policy(skip);
+ scanner_policies_t policies(iter_policy);
+ IteratorT first = first_;
+ scanner_t scan(first, last, policies);
+ match<nil_t> hit = p.parse(scan);
+ return parse_info<IteratorT>(
+ first, hit, hit && (first == last),
+ hit.length());
+ }
+ };
+
+ template <>
+ struct phrase_parser<space_parser>
+ {
+ template <typename IteratorT, typename ParserT>
+ static parse_info<IteratorT>
+ parse(
+ IteratorT const& first_,
+ IteratorT const& last,
+ ParserT const& p,
+ space_parser const&)
+ {
+ typedef skipper_iteration_policy<> iter_policy_t;
+ typedef scanner_policies<iter_policy_t> scanner_policies_t;
+ typedef scanner<IteratorT, scanner_policies_t> scanner_t;
+
+ IteratorT first = first_;
+ scanner_t scan(first, last);
+ match<nil_t> hit = p.parse(scan);
+ return parse_info<IteratorT>(
+ first, hit, hit && (first == last),
+ hit.length());
+ }
+ };
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // Free parse functions using the skippers
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename IteratorT, typename ParserT, typename SkipT>
+ inline parse_info<IteratorT>
+ parse(
+ IteratorT const& first,
+ IteratorT const& last,
+ parser<ParserT> const& p,
+ parser<SkipT> const& skip)
+ {
+ return impl::phrase_parser<SkipT>::
+ parse(first, last, p.derived(), skip.derived());
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // Parse function for null terminated strings using the skippers
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename CharT, typename ParserT, typename SkipT>
+ inline parse_info<CharT const*>
+ parse(
+ CharT const* str,
+ parser<ParserT> const& p,
+ parser<SkipT> const& skip)
+ {
+ CharT const* last = str;
+ while (*last)
+ last++;
+ return parse(str, last, p, skip);
+ }
+
+}} // namespace boost::spirit
+
+#endif
+
diff --git a/boost/boost/spirit/core/scanner/scanner.hpp b/boost/boost/spirit/core/scanner/scanner.hpp
new file mode 100644
index 00000000000..e369dc4eb81
--- /dev/null
+++ b/boost/boost/spirit/core/scanner/scanner.hpp
@@ -0,0 +1,320 @@
+/*=============================================================================
+ Copyright (c) 1998-2002 Joel de Guzman
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_SCANNER_HPP)
+#define BOOST_SPIRIT_SCANNER_HPP
+
+#include <iterator>
+#include <boost/config.hpp>
+#include <boost/spirit/core/match.hpp>
+#include <boost/spirit/core/non_terminal/parser_id.hpp>
+#include <boost/detail/iterator.hpp> // for boost::detail::iterator_traits
+
+#include <boost/spirit/core/scanner/scanner_fwd.hpp>
+
+namespace boost { namespace spirit
+{
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // iteration_policy class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ struct iteration_policy
+ {
+ template <typename ScannerT>
+ void
+ advance(ScannerT const& scan) const
+ {
+ ++scan.first;
+ }
+
+ template <typename ScannerT>
+ bool at_end(ScannerT const& scan) const
+ {
+ return scan.first == scan.last;
+ }
+
+ template <typename T>
+ T filter(T ch) const
+ {
+ return ch;
+ }
+
+ template <typename ScannerT>
+ typename ScannerT::ref_t
+ get(ScannerT const& scan) const
+ {
+ return *scan.first;
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // match_policy class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ struct match_policy
+ {
+ template <typename T>
+ struct result { typedef match<T> type; };
+
+ const match<nil_t>
+ no_match() const
+ {
+ return match<nil_t>();
+ }
+
+ const match<nil_t>
+ empty_match() const
+ {
+ return match<nil_t>(0, nil_t());
+ }
+
+ template <typename AttrT, typename IteratorT>
+ match<AttrT>
+ create_match(
+ std::size_t length,
+ AttrT const& val,
+ IteratorT const& /*first*/,
+ IteratorT const& /*last*/) const
+ {
+ return match<AttrT>(length, val);
+ }
+
+ template <typename MatchT, typename IteratorT>
+ void group_match(
+ MatchT& /*m*/,
+ parser_id const& /*id*/,
+ IteratorT const& /*first*/,
+ IteratorT const& /*last*/) const {}
+
+ template <typename Match1T, typename Match2T>
+ void concat_match(Match1T& l, Match2T const& r) const
+ {
+ l.concat(r);
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // match_result class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename MatchPolicyT, typename T>
+ struct match_result
+ {
+ typedef typename MatchPolicyT::template result<T>::type type;
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // action_policy class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename AttrT>
+ struct attributed_action_policy
+ {
+ template <typename ActorT, typename IteratorT>
+ static void
+ call(
+ ActorT const& actor,
+ AttrT& val,
+ IteratorT const&,
+ IteratorT const&)
+ {
+ actor(val);
+ }
+ };
+
+ //////////////////////////////////
+ template <>
+ struct attributed_action_policy<nil_t>
+ {
+ template <typename ActorT, typename IteratorT>
+ static void
+ call(
+ ActorT const& actor,
+ nil_t,
+ IteratorT const& first,
+ IteratorT const& last)
+ {
+ actor(first, last);
+ }
+ };
+
+ //////////////////////////////////
+ struct action_policy
+ {
+ template <typename ActorT, typename AttrT, typename IteratorT>
+ void
+ do_action(
+ ActorT const& actor,
+ AttrT& val,
+ IteratorT const& first,
+ IteratorT const& last) const
+ {
+ attributed_action_policy<AttrT>::call(actor, val, first, last);
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // scanner_policies class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <
+ typename IterationPolicyT,
+ typename MatchPolicyT,
+ typename ActionPolicyT>
+ struct scanner_policies :
+ public IterationPolicyT,
+ public MatchPolicyT,
+ public ActionPolicyT
+ {
+ typedef IterationPolicyT iteration_policy_t;
+ typedef MatchPolicyT match_policy_t;
+ typedef ActionPolicyT action_policy_t;
+
+ scanner_policies(
+ IterationPolicyT const& i_policy = IterationPolicyT(),
+ MatchPolicyT const& m_policy = MatchPolicyT(),
+ ActionPolicyT const& a_policy = ActionPolicyT())
+ : IterationPolicyT(i_policy)
+ , MatchPolicyT(m_policy)
+ , ActionPolicyT(a_policy) {}
+
+ template <typename ScannerPoliciesT>
+ scanner_policies(ScannerPoliciesT const& policies)
+ : IterationPolicyT(policies)
+ , MatchPolicyT(policies)
+ , ActionPolicyT(policies) {}
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // scanner_policies_base class: the base class of all scanners
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ struct scanner_base {};
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // scanner class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <
+ typename IteratorT,
+ typename PoliciesT>
+ class scanner : public PoliciesT, public scanner_base
+ {
+ public:
+
+ typedef IteratorT iterator_t;
+ typedef PoliciesT policies_t;
+
+ typedef typename boost::detail::
+ iterator_traits<IteratorT>::value_type value_t;
+ typedef typename boost::detail::
+ iterator_traits<IteratorT>::reference ref_t;
+ typedef typename boost::
+ call_traits<IteratorT>::param_type iter_param_t;
+
+ scanner(
+ IteratorT& first_,
+ iter_param_t last_,
+ PoliciesT const& policies = PoliciesT())
+ : PoliciesT(policies), first(first_), last(last_)
+ {
+ at_end();
+ }
+
+ scanner(scanner const& other)
+ : PoliciesT(other), first(other.first), last(other.last) {}
+
+ scanner(scanner const& other, IteratorT& first_)
+ : PoliciesT(other), first(first_), last(other.last) {}
+
+ bool
+ at_end() const
+ {
+ typedef typename PoliciesT::iteration_policy_t iteration_policy_t;
+ return iteration_policy_t::at_end(*this);
+ }
+
+ value_t
+ operator*() const
+ {
+ typedef typename PoliciesT::iteration_policy_t iteration_policy_t;
+ return iteration_policy_t::filter(iteration_policy_t::get(*this));
+ }
+
+ scanner const&
+ operator++() const
+ {
+ typedef typename PoliciesT::iteration_policy_t iteration_policy_t;
+ iteration_policy_t::advance(*this);
+ return *this;
+ }
+
+ template <typename PoliciesT2>
+ struct rebind_policies
+ {
+ typedef scanner<IteratorT, PoliciesT2> type;
+ };
+
+ template <typename PoliciesT2>
+ scanner<IteratorT, PoliciesT2>
+ change_policies(PoliciesT2 const& policies) const
+ {
+ return scanner<IteratorT, PoliciesT2>(first, last, policies);
+ }
+
+ template <typename IteratorT2>
+ struct rebind_iterator
+ {
+ typedef scanner<IteratorT2, PoliciesT> type;
+ };
+
+ template <typename IteratorT2>
+ scanner<IteratorT2, PoliciesT>
+ change_iterator(IteratorT2 const& first_, IteratorT2 const &last_) const
+ {
+ return scanner<IteratorT2, PoliciesT>(first_, last_, *this);
+ }
+
+ IteratorT& first;
+ IteratorT const last;
+
+ private:
+
+ scanner&
+ operator=(scanner const& other);
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // rebind_scanner_policies class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename ScannerT, typename PoliciesT>
+ struct rebind_scanner_policies
+ {
+ typedef typename ScannerT::template
+ rebind_policies<PoliciesT>::type type;
+ };
+
+ //////////////////////////////////
+ template <typename ScannerT, typename IteratorT>
+ struct rebind_scanner_iterator
+ {
+ typedef typename ScannerT::template
+ rebind_iterator<IteratorT>::type type;
+ };
+}}
+
+#endif
diff --git a/boost/boost/spirit/core/scanner/scanner_fwd.hpp b/boost/boost/spirit/core/scanner/scanner_fwd.hpp
new file mode 100644
index 00000000000..7cce453eda8
--- /dev/null
+++ b/boost/boost/spirit/core/scanner/scanner_fwd.hpp
@@ -0,0 +1,48 @@
+/*=============================================================================
+ Copyright (c) 2006 Tobias Schwinger
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_SCANNER_FWD_HPP)
+#define BOOST_SPIRIT_SCANNER_FWD_HPP
+
+namespace boost { namespace spirit
+{
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // policy classes
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ struct iteration_policy;
+ struct action_policy;
+ struct match_policy;
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // scanner_policies class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <
+ typename IterationPolicyT = iteration_policy,
+ typename MatchPolicyT = match_policy,
+ typename ActionPolicyT = action_policy>
+ struct scanner_policies;
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // scanner class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <
+ typename IteratorT = char const*,
+ typename PoliciesT = scanner_policies<> >
+ class scanner;
+
+}} // namespace boost::spirit
+
+#endif
+
diff --git a/boost/boost/spirit/core/scanner/skipper.hpp b/boost/boost/spirit/core/scanner/skipper.hpp
new file mode 100644
index 00000000000..9fe2a73ead0
--- /dev/null
+++ b/boost/boost/spirit/core/scanner/skipper.hpp
@@ -0,0 +1,192 @@
+/*=============================================================================
+ Copyright (c) 1998-2003 Joel de Guzman
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_SKIPPER_HPP)
+#define BOOST_SPIRIT_SKIPPER_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <cctype>
+
+#include <boost/spirit/core/scanner/scanner.hpp>
+#include <boost/spirit/core/primitives/impl/primitives.ipp>
+
+#include <boost/spirit/core/scanner/skipper_fwd.hpp>
+
+namespace boost { namespace spirit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // skipper_iteration_policy class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename BaseT>
+ struct skipper_iteration_policy : public BaseT
+ {
+ typedef BaseT base_t;
+
+ skipper_iteration_policy()
+ : BaseT() {}
+
+ template <typename PolicyT>
+ skipper_iteration_policy(PolicyT const& other)
+ : BaseT(other) {}
+
+ template <typename ScannerT>
+ void
+ advance(ScannerT const& scan) const
+ {
+ BaseT::advance(scan);
+ scan.skip(scan);
+ }
+
+ template <typename ScannerT>
+ bool
+ at_end(ScannerT const& scan) const
+ {
+ scan.skip(scan);
+ return BaseT::at_end(scan);
+ }
+
+ template <typename ScannerT>
+ void
+ skip(ScannerT const& scan) const
+ {
+ while (!BaseT::at_end(scan) && impl::isspace_(BaseT::get(scan)))
+ BaseT::advance(scan);
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // no_skipper_iteration_policy class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename BaseT>
+ struct no_skipper_iteration_policy : public BaseT
+ {
+ typedef BaseT base_t;
+
+ no_skipper_iteration_policy()
+ : BaseT() {}
+
+ template <typename PolicyT>
+ no_skipper_iteration_policy(PolicyT const& other)
+ : BaseT(other) {}
+
+ template <typename ScannerT>
+ void
+ skip(ScannerT const& /*scan*/) const {}
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // skip_parser_iteration_policy class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ namespace impl
+ {
+ template <typename ST, typename ScannerT, typename BaseT>
+ void
+ skipper_skip(
+ ST const& s,
+ ScannerT const& scan,
+ skipper_iteration_policy<BaseT> const&);
+
+ template <typename ST, typename ScannerT, typename BaseT>
+ void
+ skipper_skip(
+ ST const& s,
+ ScannerT const& scan,
+ no_skipper_iteration_policy<BaseT> const&);
+
+ template <typename ST, typename ScannerT>
+ void
+ skipper_skip(
+ ST const& s,
+ ScannerT const& scan,
+ iteration_policy const&);
+ }
+
+ template <typename ParserT, typename BaseT>
+ class skip_parser_iteration_policy : public skipper_iteration_policy<BaseT>
+ {
+ public:
+
+ typedef skipper_iteration_policy<BaseT> base_t;
+
+ skip_parser_iteration_policy(
+ ParserT const& skip_parser,
+ base_t const& base = base_t())
+ : base_t(base), subject(skip_parser) {}
+
+ template <typename PolicyT>
+ skip_parser_iteration_policy(PolicyT const& other)
+ : base_t(other), subject(other.skipper()) {}
+
+ template <typename ScannerT>
+ void
+ skip(ScannerT const& scan) const
+ {
+ impl::skipper_skip(subject, scan, scan);
+ }
+
+ ParserT const&
+ skipper() const
+ {
+ return subject;
+ }
+
+ private:
+
+ ParserT const& subject;
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ // Free parse functions using the skippers
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ template <typename IteratorT, typename ParserT, typename SkipT>
+ parse_info<IteratorT>
+ parse(
+ IteratorT const& first,
+ IteratorT const& last,
+ parser<ParserT> const& p,
+ parser<SkipT> const& skip);
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ // Parse function for null terminated strings using the skippers
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ template <typename CharT, typename ParserT, typename SkipT>
+ parse_info<CharT const*>
+ parse(
+ CharT const* str,
+ parser<ParserT> const& p,
+ parser<SkipT> const& skip);
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ // phrase_scanner_t and wide_phrase_scanner_t
+ //
+ // The most common scanners. Use these typedefs when you need
+ // a scanner that skips white spaces.
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ typedef skipper_iteration_policy<> iter_policy_t;
+ typedef scanner_policies<iter_policy_t> scanner_policies_t;
+ typedef scanner<char const*, scanner_policies_t> phrase_scanner_t;
+ typedef scanner<wchar_t const*, scanner_policies_t> wide_phrase_scanner_t;
+
+ ///////////////////////////////////////////////////////////////////////////////
+}} // namespace boost::spirit
+
+#include <boost/spirit/core/scanner/impl/skipper.ipp>
+#endif
+
diff --git a/boost/boost/spirit/core/scanner/skipper_fwd.hpp b/boost/boost/spirit/core/scanner/skipper_fwd.hpp
new file mode 100644
index 00000000000..ef7608ad7d6
--- /dev/null
+++ b/boost/boost/spirit/core/scanner/skipper_fwd.hpp
@@ -0,0 +1,28 @@
+/*=============================================================================
+ Copyright (c) 2006 Tobias Schwinger
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_SKIPPER_FWD_HPP)
+#define BOOST_SPIRIT_SKIPPER_FWD_HPP
+
+#include <boost/spirit/core/scanner/scanner_fwd.hpp>
+
+namespace boost { namespace spirit {
+
+ template <typename BaseT = iteration_policy>
+ struct skipper_iteration_policy;
+
+ template <typename BaseT = iteration_policy>
+ struct no_skipper_iteration_policy;
+
+ template <typename ParserT, typename BaseT = iteration_policy>
+ class skip_parser_iteration_policy;
+
+}} // namespace boost::spirit
+
+#endif
+
diff --git a/boost/boost/spirit/core/typeof.hpp b/boost/boost/spirit/core/typeof.hpp
new file mode 100644
index 00000000000..283750f3888
--- /dev/null
+++ b/boost/boost/spirit/core/typeof.hpp
@@ -0,0 +1,335 @@
+/*=============================================================================
+ Copyright (c) 2006 Tobias Schwinger
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_CORE_TYPEOF_HPP)
+#define BOOST_SPIRIT_CORE_TYPEOF_HPP
+
+#include <boost/config.hpp>
+#include <boost/cstdint.hpp>
+
+#include <boost/typeof/typeof.hpp>
+
+#include <boost/spirit/core/nil.hpp>
+#include <boost/spirit/core/primitives/numerics_fwd.hpp>
+#include <boost/spirit/core/scanner/scanner_fwd.hpp>
+#include <boost/spirit/core/scanner/skipper_fwd.hpp>
+#include <boost/spirit/core/non_terminal/subrule_fwd.hpp>
+
+namespace boost { namespace spirit {
+
+ // parser.hpp
+ template <typename IteratorT> struct parse_info;
+ struct plain_parser_category;
+ struct binary_parser_category;
+ struct unary_parser_category;
+ struct action_parser_category;
+
+ // match.hpp
+ template<typename T> class match;
+
+ // primitives/primitives.hpp
+ template<class ParserT> struct negated_char_parser;
+ template<typename CharT> struct chlit;
+ template<typename CharT> struct range;
+ template<typename IteratorT> class chseq;
+ template<typename IteratorT> class strlit;
+ struct nothing_parser;
+ struct anychar_parser;
+ struct alnum_parser;
+ struct alpha_parser;
+ struct cntrl_parser;
+ struct digit_parser;
+ struct xdigit_parser;
+ struct graph_parser;
+ struct upper_parser;
+ struct lower_parser;
+ struct print_parser;
+ struct punct_parser;
+ struct blank_parser;
+ struct space_parser;
+ struct eol_parser;
+ struct end_parser;
+
+ // non_terminal/parser_context.hpp
+ template<typename T> struct parser_context;
+
+ // non_terminal/parser_id.hpp
+ class parser_id;
+ template<int N> struct parser_tag;
+ class dynamic_parser_tag;
+ struct parser_address_tag;
+
+ // non_terminal/rule.hpp
+ template<typename T0, typename T1, typename T2> class rule;
+
+ // non_terminal/grammar.hpp
+ template<class DerivedT, typename ContextT> struct grammar;
+
+ // composite.hpp
+ template<class ParserT, typename ActionT> class action;
+ template<class A, class B> struct alternative;
+ template<class A, class B> struct difference;
+ template<class A, class B> struct exclusive_or;
+ template<class A, class B> struct intersection;
+ template<class a, class b> struct sequence;
+ template<class A, class B> struct sequential_or;
+ template<class S> struct kleene_star;
+ template<class S> struct positive;
+ template<class S> struct optional;
+ // composite/directives.hpp
+ template<class ParserT> struct contiguous;
+ template<class ParserT> struct inhibit_case;
+ template<class BaseT> struct inhibit_case_iteration_policy;
+ template<class A, class B> struct longest_alternative;
+ template<class A, class B> struct shortest_alternative;
+ template<class ParserT, typename BoundsT> struct min_bounded;
+ template<class ParserT, typename BoundsT> struct max_bounded;
+ template<class ParserT, typename BoundsT> struct bounded;
+ // composite/no_actions.hpp
+ template<class Parser> struct no_actions_parser;
+ template<class Base> struct no_actions_action_policy;
+ // composite/epsilon.hpp
+ struct epsilon_parser;
+ template<typename CondT, bool positive> struct condition_parser;
+ template<typename SubjectT> struct empty_match_parser;
+ template<typename SubjectT> struct negated_empty_match_parser;
+
+ // deprecated assign/push_back actor -- they live somewhere else, now
+ struct assign_action;
+ struct push_back_action;
+ template<typename T, typename ActionT> class ref_value_actor;
+ template<typename T, typename ValueT, typename ActionT>
+ class ref_const_ref_actor;
+
+}} // namespace boost::spirit
+
+
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+
+// parser.hpp
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::parse_info,1)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::plain_parser_category)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::binary_parser_category)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::unary_parser_category)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::action_parser_category)
+
+
+// nil.hpp (included directly)
+
+#if !defined(BOOST_SPIRIT_NIL_T_TYPEOF_REGISTERED)
+// registration guard to decouple the iterators from the core
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::nil_t)
+# define BOOST_SPIRIT_NIL_T_TYPEOF_REGISTERED
+#endif
+
+// match.hpp
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::match, 1)
+
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::match<boost::spirit::nil_t>)
+
+
+// primitives/primitives.hpp
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::negated_char_parser, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::chlit, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::range, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::chseq, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::strlit, 1)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::nothing_parser)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::anychar_parser)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::alnum_parser)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::alpha_parser)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::cntrl_parser)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::digit_parser)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::xdigit_parser)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::graph_parser)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::upper_parser)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::lower_parser)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::print_parser)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::punct_parser)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::blank_parser)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::space_parser)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::eol_parser)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::end_parser)
+
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::chlit<char>)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::chlit<wchar_t>)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::range<char>)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::range<wchar_t>)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::chseq<char const *>)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::chseq<wchar_t const *>)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::strlit<char const *>)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::strlit<wchar_t const *>)
+
+
+// primitives/numerics.hpp (has forward header)
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::int_parser, (class)(int)(unsigned)(int))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::uint_parser, (class)(int)(unsigned)(int))
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::sign_parser)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::real_parser, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::real_parser_policies, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::ureal_parser_policies, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::strict_real_parser_policies, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::strict_ureal_parser_policies, 1)
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::int_parser, (class)(int))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::uint_parser, (class)(int))
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::int_parser<boost::int32_t>)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::uint_parser<boost::uint32_t>)
+#if !defined(BOOST_NO_INT64_T)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::int_parser<boost::int64_t>)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::uint_parser<boost::uint64_t>)
+#endif
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::real_parser_policies<float>)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::real_parser_policies<double>)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::ureal_parser_policies<float>)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::ureal_parser_policies<double>)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::strict_real_parser_policies<float>)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::strict_real_parser_policies<double>)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::strict_ureal_parser_policies<float>)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::strict_ureal_parser_policies<double>)
+
+
+// scanner/scanner.hpp (has forward header)
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::scanner,2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::scanner_policies,3)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::iteration_policy)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::action_policy)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::match_policy)
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::scanner,1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::scanner_policies,2)
+
+
+// scanner/skipper.hpp (has forward header)
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::skipper_iteration_policy,1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::no_skipper_iteration_policy,1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::skip_parser_iteration_policy,2)
+
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::skipper_iteration_policy<>)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::skip_parser_iteration_policy,1)
+
+
+// non_terminal/parser_context.hpp
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::parser_context,1)
+
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::parser_context<boost::spirit::nil_t>)
+
+
+// non_terminal/parser_id.hpp
+
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::parser_id)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::parser_tag, (int))
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::dynamic_parser_tag)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::parser_address_tag)
+
+
+// non_terminal/subrule.hpp (has forward header)
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::subrule,(int)(class))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::subrule_parser,(int)(class)(class))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::subrule_list,2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::subrules_scanner,2)
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::subrule,(int))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::subrule_parser,(int)(class))
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::subrule<0>)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::subrule<1>)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::subrule<2>)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::subrule<3>)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::subrule<4>)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::subrule<5>)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::subrule<6>)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::subrule<7>)
+
+
+// non_terminal/rule.hpp
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::rule,3)
+#if BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT > 1
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::scanner_list,1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::scanner_list,BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT)
+#endif
+
+
+// non_terminal/grammar.hpp
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::grammar,2)
+
+
+// composite.hpp
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::action, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::alternative, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::difference, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::exclusive_or, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::intersection, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::sequence, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::sequential_or, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::kleene_star, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::positive, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::optional, 1)
+
+
+// composite/directives.hpp
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::contiguous, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::inhibit_case, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::inhibit_case_iteration_policy,1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::longest_alternative, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::shortest_alternative, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::min_bounded, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::max_bounded, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::bounded, 2)
+
+
+// composite/no_actions.hpp
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::no_actions_parser, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::no_actions_action_policy, 1)
+
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::no_actions_action_policy<boost::spirit::action_policy>)
+
+
+// composite/epsilon.hpp
+
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::epsilon_parser)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::condition_parser, (class)(bool))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::empty_match_parser, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::negated_empty_match_parser, 1)
+
+
+#if !defined(BOOST_SPIRIT_ACTOR_TYPEOF_HPP)
+// deprecated assign/push_back actor -- they live somewhere else, now
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::ref_value_actor,2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::ref_const_ref_actor,3)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::assign_action)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::push_back_action)
+#endif
+
+
+#if BOOST_WORKAROUND(BOOST_MSVC,BOOST_TESTED_AT(1400)) && BOOST_MSVC >= 1400
+namespace boost { namespace spirit {
+
+ nil_t & operator* (nil_t);
+ nil_t & operator+ (nil_t);
+
+} } // namespace ::boost::spirit::type_of
+#endif
+
+
+#endif
+
diff --git a/boost/boost/spirit/debug.hpp b/boost/boost/spirit/debug.hpp
new file mode 100644
index 00000000000..8b97edeadf1
--- /dev/null
+++ b/boost/boost/spirit/debug.hpp
@@ -0,0 +1,146 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Joel de Guzman
+ Copyright (c) 2002-2003 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_DEBUG_MAIN_HPP)
+#define BOOST_SPIRIT_DEBUG_MAIN_HPP
+
+///////////////////////////////////////////////////////////////////////////
+#if defined(BOOST_SPIRIT_DEBUG)
+
+#include <boost/spirit/version.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Spirit.Debug includes and defines
+//
+///////////////////////////////////////////////////////////////////////////////
+
+ #include <iostream>
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // The BOOST_SPIRIT_DEBUG_OUT defines the stream object, which should be used
+ // for debug diagnostics. This defaults to std::cout.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ #if !defined(BOOST_SPIRIT_DEBUG_OUT)
+ #define BOOST_SPIRIT_DEBUG_OUT std::cout
+ #endif
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // The BOOST_SPIRIT_DEBUG_PRINT_SOME constant defines the number of characters
+ // from the stream to be printed for diagnosis. This defaults to the first
+ // 20 characters.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ #if !defined(BOOST_SPIRIT_DEBUG_PRINT_SOME)
+ #define BOOST_SPIRIT_DEBUG_PRINT_SOME 20
+ #endif
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // Additional BOOST_SPIRIT_DEBUG_FLAGS control the level of diagnostics printed
+ // Basic constants are defined in debug/minimal.hpp.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ #define BOOST_SPIRIT_DEBUG_FLAGS_NODES 0x0001 // node diagnostics
+ #define BOOST_SPIRIT_DEBUG_FLAGS_ESCAPE_CHAR 0x0002 // escape_char_parse diagnostics
+ #define BOOST_SPIRIT_DEBUG_FLAGS_TREES 0x0004 // parse tree/ast diagnostics
+ #define BOOST_SPIRIT_DEBUG_FLAGS_CLOSURES 0x0008 // closure diagnostics
+ #define BOOST_SPIRIT_DEBUG_FLAGS_SLEX 0x8000 // slex diagnostics
+
+ #define BOOST_SPIRIT_DEBUG_FLAGS_MAX 0xFFFF // print maximal diagnostics
+
+ #if !defined(BOOST_SPIRIT_DEBUG_FLAGS)
+ #define BOOST_SPIRIT_DEBUG_FLAGS BOOST_SPIRIT_DEBUG_FLAGS_MAX
+ #endif
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // By default all nodes are traced (even those, not registered with
+ // BOOST_SPIRIT_DEBUG_RULE et.al. - see below). The following constant may be
+ // used to redefine this default.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ #if !defined(BOOST_SPIRIT_DEBUG_TRACENODE)
+ #define BOOST_SPIRIT_DEBUG_TRACENODE (true)
+ #endif // !defined(BOOST_SPIRIT_DEBUG_TRACENODE)
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // Helper macros for giving rules and subrules a name accessible through
+ // parser_name() functions (see parser_names.hpp).
+ //
+ // Additionally, the macros BOOST_SPIRIT_DEBUG_RULE, SPIRIT_DEBUG_NODE and
+ // BOOST_SPIRIT_DEBUG_GRAMMAR enable/disable the tracing of the
+ // correspondingnode accordingly to the PP constant
+ // BOOST_SPIRIT_DEBUG_TRACENODE.
+ //
+ // The macros BOOST_SPIRIT_DEBUG_TRACE_RULE, BOOST_SPIRIT_DEBUG_TRACE_NODE
+ // and BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR allow to specify a flag to define,
+ // whether the corresponding node is to be traced or not.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ #if !defined(BOOST_SPIRIT_DEBUG_RULE)
+ #define BOOST_SPIRIT_DEBUG_RULE(r) \
+ ::boost::spirit::impl::get_node_registry().register_node(&r, #r, BOOST_SPIRIT_DEBUG_TRACENODE)
+ #endif // !defined(BOOST_SPIRIT_DEBUG_RULE)
+
+ #if !defined(BOOST_SPIRIT_DEBUG_NODE)
+ #define BOOST_SPIRIT_DEBUG_NODE(r) \
+ ::boost::spirit::impl::get_node_registry().register_node(&r, #r, BOOST_SPIRIT_DEBUG_TRACENODE)
+ #endif // !defined(BOOST_SPIRIT_DEBUG_NODE)
+
+ #if !defined(BOOST_SPIRIT_DEBUG_GRAMMAR)
+ #define BOOST_SPIRIT_DEBUG_GRAMMAR(r) \
+ ::boost::spirit::impl::get_node_registry().register_node(&r, #r, BOOST_SPIRIT_DEBUG_TRACENODE)
+ #endif // !defined(BOOST_SPIRIT_DEBUG_GRAMMAR)
+
+ #if !defined(BOOST_SPIRIT_DEBUG_TRACE_RULE)
+ #define BOOST_SPIRIT_DEBUG_TRACE_RULE(r, t) \
+ ::boost::spirit::impl::get_node_registry().register_node(&r, #r, (t))
+ #endif // !defined(BOOST_SPIRIT_TRACE_RULE)
+
+ #if !defined(BOOST_SPIRIT_DEBUG_TRACE_NODE)
+ #define BOOST_SPIRIT_DEBUG_TRACE_NODE(r, t) \
+ ::boost::spirit::impl::get_node_registry().register_node(&r, #r, (t))
+ #endif // !defined(BOOST_SPIRIT_DEBUG_TRACE_NODE)
+
+ #if !defined(BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR)
+ #define BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR(r, t) \
+ ::boost::spirit::impl::get_node_registry().register_node(&r, #r, (t))
+ #endif // !defined(BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR)
+
+ #if !defined(BOOST_SPIRIT_DEBUG_TRACE_RULE_NAME)
+ #define BOOST_SPIRIT_DEBUG_TRACE_RULE_NAME(r, n, t) \
+ ::boost::spirit::impl::get_node_registry().register_node(&r, (n), (t))
+ #endif // !defined(BOOST_SPIRIT_DEBUG_TRACE_RULE_NAME)
+
+ #if !defined(BOOST_SPIRIT_DEBUG_TRACE_NODE_NAME)
+ #define BOOST_SPIRIT_DEBUG_TRACE_NODE_NAME(r, n, t) \
+ ::boost::spirit::impl::get_node_registry().register_node(&r, (n), (t))
+ #endif // !defined(BOOST_SPIRIT_DEBUG_TRACE_NODE_NAME)
+
+ #if !defined(BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR_NAME)
+ #define BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR_NAME(r, n, t) \
+ ::boost::spirit::impl::get_node_registry().register_node(&r, (n), (t))
+ #endif // !defined(BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR_NAME)
+
+ //////////////////////////////////
+ #include <boost/spirit/debug/debug_node.hpp>
+
+#else
+ //////////////////////////////////
+ #include <boost/spirit/debug/minimal.hpp>
+
+#endif // BOOST_SPIRIT_DEBUG
+
+#endif
+
diff --git a/boost/boost/spirit/debug/debug_node.hpp b/boost/boost/spirit/debug/debug_node.hpp
new file mode 100644
index 00000000000..a7c5e0f2e6d
--- /dev/null
+++ b/boost/boost/spirit/debug/debug_node.hpp
@@ -0,0 +1,315 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Joel de Guzman
+ Copyright (c) 2002-2003 Hartmut Kaiser
+ Copyright (c) 2003 Gustavo Guerra
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_DEBUG_NODE_HPP)
+#define BOOST_SPIRIT_DEBUG_NODE_HPP
+
+#if !defined(BOOST_SPIRIT_DEBUG_MAIN_HPP)
+#error "You must include boost/spirit/debug.hpp, not boost/spirit/debug/debug_node.hpp"
+#endif
+
+#if defined(BOOST_SPIRIT_DEBUG)
+
+#include <string>
+
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/spirit/core/primitives/primitives.hpp> // for iscntrl_
+
+namespace boost { namespace spirit {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Debug helper classes for rules, which ensure maximum non-intrusiveness of
+// the Spirit debug support
+//
+///////////////////////////////////////////////////////////////////////////////
+
+namespace impl {
+
+ struct token_printer_aux_for_chars
+ {
+ template<typename CharT>
+ static void print(std::ostream& o, CharT c)
+ {
+ if (c == static_cast<CharT>('\a'))
+ o << "\\a";
+
+ else if (c == static_cast<CharT>('\b'))
+ o << "\\b";
+
+ else if (c == static_cast<CharT>('\f'))
+ o << "\\f";
+
+ else if (c == static_cast<CharT>('\n'))
+ o << "\\n";
+
+ else if (c == static_cast<CharT>('\r'))
+ o << "\\r";
+
+ else if (c == static_cast<CharT>('\t'))
+ o << "\\t";
+
+ else if (c == static_cast<CharT>('\v'))
+ o << "\\v";
+
+ else if (iscntrl_(c))
+ o << "\\" << static_cast<int>(c);
+
+ else
+ o << static_cast<char>(c);
+ }
+ };
+
+ // for token types where the comparison with char constants wouldn't work
+ struct token_printer_aux_for_other_types
+ {
+ template<typename CharT>
+ static void print(std::ostream& o, CharT c)
+ {
+ o << c;
+ }
+ };
+
+ template <typename CharT>
+ struct token_printer_aux
+ : mpl::if_<
+ mpl::and_<
+ is_convertible<CharT, char>,
+ is_convertible<char, CharT> >,
+ token_printer_aux_for_chars,
+ token_printer_aux_for_other_types
+ >::type
+ {
+ };
+
+ template<typename CharT>
+ inline void token_printer(std::ostream& o, CharT c)
+ {
+ #if !defined(BOOST_SPIRIT_DEBUG_TOKEN_PRINTER)
+
+ token_printer_aux<CharT>::print(o, c);
+
+ #else
+
+ BOOST_SPIRIT_DEBUG_TOKEN_PRINTER(o, c);
+
+ #endif
+ }
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Dump infos about the parsing state of a rule
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#if BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_NODES
+ template <typename IteratorT>
+ inline void
+ print_node_info(bool hit, int level, bool close, std::string const& name,
+ IteratorT first, IteratorT last)
+ {
+ if (!name.empty())
+ {
+ for (int i = 0; i < level; ++i)
+ BOOST_SPIRIT_DEBUG_OUT << " ";
+ if (close)
+ {
+ if (hit)
+ BOOST_SPIRIT_DEBUG_OUT << "/";
+ else
+ BOOST_SPIRIT_DEBUG_OUT << "#";
+ }
+ BOOST_SPIRIT_DEBUG_OUT << name << ":\t\"";
+ IteratorT iter = first;
+ IteratorT ilast = last;
+ for (int j = 0; j < BOOST_SPIRIT_DEBUG_PRINT_SOME; ++j)
+ {
+ if (iter == ilast)
+ break;
+
+ token_printer(BOOST_SPIRIT_DEBUG_OUT, *iter);
+ ++iter;
+ }
+ BOOST_SPIRIT_DEBUG_OUT << "\"\n";
+ }
+ }
+#endif // BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_NODES
+
+#if BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_CLOSURES
+ template <typename ResultT>
+ inline ResultT &
+ print_closure_info(ResultT &hit, int level, std::string const& name)
+ {
+ if (!name.empty())
+ {
+ for (int i = 0; i < level-1; ++i)
+ BOOST_SPIRIT_DEBUG_OUT << " ";
+
+ // for now, print out the return value only
+ BOOST_SPIRIT_DEBUG_OUT << "^" << name << ":\t";
+ if (hit.has_valid_attribute())
+ BOOST_SPIRIT_DEBUG_OUT << hit.value();
+ else
+ BOOST_SPIRIT_DEBUG_OUT << "undefined attribute";
+ BOOST_SPIRIT_DEBUG_OUT << "\n";
+ }
+ return hit;
+ }
+#endif // BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_CLOSURES
+
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Implementation note: The parser_context_linker, parser_scanner_linker and
+// closure_context_linker classes are wrapped by a PP constant to allow
+// redefinition of this classes outside of Spirit
+//
+///////////////////////////////////////////////////////////////////////////////
+#if !defined(BOOST_SPIRIT_PARSER_CONTEXT_LINKER_DEFINED)
+#define BOOST_SPIRIT_PARSER_CONTEXT_LINKER_DEFINED
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // parser_context_linker is a debug wrapper for the ContextT template
+ // parameter of the rule<>, subrule<> and the grammar<> classes
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template<typename ContextT>
+ struct parser_context_linker : public ContextT
+ {
+ typedef ContextT base_t;
+
+ template <typename ParserT>
+ parser_context_linker(ParserT const& p)
+ : ContextT(p) {}
+
+ template <typename ParserT, typename ScannerT>
+ void pre_parse(ParserT const& p, ScannerT &scan)
+ {
+ this->base_t::pre_parse(p, scan);
+
+#if BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_NODES
+ if (trace_parser(p.derived())) {
+ impl::print_node_info(
+ false,
+ scan.get_level(),
+ false,
+ parser_name(p.derived()),
+ scan.first,
+ scan.last);
+ }
+ scan.get_level()++;
+#endif // BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_NODES
+ }
+
+ template <typename ResultT, typename ParserT, typename ScannerT>
+ ResultT& post_parse(ResultT& hit, ParserT const& p, ScannerT &scan)
+ {
+#if BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_NODES
+ --scan.get_level();
+ if (trace_parser(p.derived())) {
+ impl::print_node_info(
+ hit,
+ scan.get_level(),
+ true,
+ parser_name(p.derived()),
+ scan.first,
+ scan.last);
+ }
+#endif // BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_NODES
+
+ return this->base_t::post_parse(hit, p, scan);
+ }
+ };
+
+#endif // !defined(BOOST_SPIRIT_PARSER_CONTEXT_LINKER_DEFINED)
+
+#if !defined(BOOST_SPIRIT_PARSER_SCANNER_LINKER_DEFINED)
+#define BOOST_SPIRIT_PARSER_SCANNER_LINKER_DEFINED
+
+///////////////////////////////////////////////////////////////////////////////
+// This class is to avoid linker problems and to ensure a real singleton
+// 'level' variable
+ struct debug_support
+ {
+ int& get_level()
+ {
+ static int level = 0;
+ return level;
+ }
+ };
+
+ template<typename ScannerT>
+ struct parser_scanner_linker : public ScannerT
+ {
+ parser_scanner_linker(ScannerT const &scan_) : ScannerT(scan_)
+ {}
+
+ int &get_level()
+ { return debug.get_level(); }
+
+ private: debug_support debug;
+ };
+
+#endif // !defined(BOOST_SPIRIT_PARSER_SCANNER_LINKER_DEFINED)
+
+#if !defined(BOOST_SPIRIT_CLOSURE_CONTEXT_LINKER_DEFINED)
+#define BOOST_SPIRIT_CLOSURE_CONTEXT_LINKER_DEFINED
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // closure_context_linker is a debug wrapper for the closure template
+ // parameter of the rule<>, subrule<> and grammar classes
+ //
+ ///////////////////////////////////////////////////////////////////////////
+
+ template<typename ContextT>
+ struct closure_context_linker : public parser_context_linker<ContextT>
+ {
+ typedef parser_context_linker<ContextT> base_t;
+
+ template <typename ParserT>
+ closure_context_linker(ParserT const& p)
+ : parser_context_linker<ContextT>(p) {}
+
+ template <typename ParserT, typename ScannerT>
+ void pre_parse(ParserT const& p, ScannerT &scan)
+ { this->base_t::pre_parse(p, scan); }
+
+ template <typename ResultT, typename ParserT, typename ScannerT>
+ ResultT&
+ post_parse(ResultT& hit, ParserT const& p, ScannerT &scan)
+ {
+#if BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_CLOSURES
+ if (hit && trace_parser(p.derived())) {
+ // for now, print out the return value only
+ return impl::print_closure_info(
+ this->base_t::post_parse(hit, p, scan),
+ scan.get_level(),
+ parser_name(p.derived())
+ );
+ }
+#endif // BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_CLOSURES
+
+ return this->base_t::post_parse(hit, p, scan);
+ }
+ };
+
+#endif // !defined(BOOST_SPIRIT_CLOSURE_CONTEXT_LINKER_DEFINED)
+
+}} // namespace boost::spirit
+
+#endif // defined(BOOST_SPIRIT_DEBUG)
+
+#endif // !defined(BOOST_SPIRIT_DEBUG_NODE_HPP)
+
diff --git a/boost/boost/spirit/debug/impl/parser_names.ipp b/boost/boost/spirit/debug/impl/parser_names.ipp
new file mode 100644
index 00000000000..69c9a57ae3d
--- /dev/null
+++ b/boost/boost/spirit/debug/impl/parser_names.ipp
@@ -0,0 +1,551 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Joel de Guzman
+ Copyright (c) 2002-2003 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_PARSER_NAMES_IPP)
+#define BOOST_SPIRIT_PARSER_NAMES_IPP
+
+#if defined(BOOST_SPIRIT_DEBUG)
+
+#include <string>
+#include <iostream>
+#include <map>
+
+#include <boost/config.hpp>
+#ifdef BOOST_NO_STRINGSTREAM
+#include <strstream>
+#define BOOST_SPIRIT_SSTREAM std::strstream
+std::string BOOST_SPIRIT_GETSTRING(std::strstream& ss)
+{
+ ss << ends;
+ std::string rval = ss.str();
+ ss.freeze(false);
+ return rval;
+}
+#else
+#include <sstream>
+#define BOOST_SPIRIT_GETSTRING(ss) ss.str()
+#define BOOST_SPIRIT_SSTREAM std::stringstream
+#endif
+
+namespace boost { namespace spirit {
+
+///////////////////////////////////////////////////////////////////////////////
+// from actions.hpp
+ template <typename ParserT, typename ActionT>
+ inline std::string
+ parser_name(action<ParserT, ActionT> const& p)
+ {
+ return std::string("action")
+ + std::string("[")
+ + parser_name(p.subject())
+ + std::string("]");
+ }
+
+///////////////////////////////////////////////////////////////////////////////
+// from directives.hpp
+ template <typename ParserT>
+ inline std::string
+ parser_name(contiguous<ParserT> const& p)
+ {
+ return std::string("contiguous")
+ + std::string("[")
+ + parser_name(p.subject())
+ + std::string("]");
+ }
+
+ template <typename ParserT>
+ inline std::string
+ parser_name(inhibit_case<ParserT> const& p)
+ {
+ return std::string("inhibit_case")
+ + std::string("[")
+ + parser_name(p.subject())
+ + std::string("]");
+ }
+
+ template <typename A, typename B>
+ inline std::string
+ parser_name(longest_alternative<A, B> const& p)
+ {
+ return std::string("longest_alternative")
+ + std::string("[")
+ + parser_name(p.left()) + std::string(", ") + parser_name(p.right())
+ + std::string("]");
+ }
+
+ template <typename A, typename B>
+ inline std::string
+ parser_name(shortest_alternative<A, B> const& p)
+ {
+ return std::string("shortest_alternative")
+ + std::string("[")
+ + parser_name(p.left()) + std::string(", ") + parser_name(p.right())
+ + std::string("]");
+ }
+
+///////////////////////////////////////////////////////////////////////////////
+// from numerics.hpp
+ template <typename T, int Radix, unsigned MinDigits, int MaxDigits>
+ inline std::string
+ parser_name(uint_parser<T, Radix, MinDigits, MaxDigits> const& p)
+ {
+ BOOST_SPIRIT_SSTREAM stream;
+ stream << Radix << ", " << MinDigits << ", " << MaxDigits;
+ return std::string("uint_parser<")
+ + BOOST_SPIRIT_GETSTRING(stream)
+ + std::string(">");
+ }
+
+ template <typename T, int Radix, unsigned MinDigits, int MaxDigits>
+ inline std::string
+ parser_name(int_parser<T, Radix, MinDigits, MaxDigits> const& p)
+ {
+ BOOST_SPIRIT_SSTREAM stream;
+ stream << Radix << ", " << MinDigits << ", " << MaxDigits;
+ return std::string("int_parser<")
+ + BOOST_SPIRIT_GETSTRING(stream)
+ + std::string(">");
+ }
+
+ template <typename T, typename RealPoliciesT>
+ inline std::string
+ parser_name(real_parser<T, RealPoliciesT> const& p)
+ {
+ return std::string("real_parser");
+ }
+
+///////////////////////////////////////////////////////////////////////////////
+// from operators.hpp
+ template <typename A, typename B>
+ inline std::string
+ parser_name(sequence<A, B> const& p)
+ {
+ return std::string("sequence")
+ + std::string("[")
+ + parser_name(p.left()) + std::string(", ") + parser_name(p.right())
+ + std::string("]");
+ }
+
+ template <typename A, typename B>
+ inline std::string
+ parser_name(sequential_or<A, B> const& p)
+ {
+ return std::string("sequential_or")
+ + std::string("[")
+ + parser_name(p.left()) + std::string(", ") + parser_name(p.right())
+ + std::string("]");
+ }
+
+ template <typename A, typename B>
+ inline std::string
+ parser_name(alternative<A, B> const& p)
+ {
+ return std::string("alternative")
+ + std::string("[")
+ + parser_name(p.left()) + std::string(", ") + parser_name(p.right())
+ + std::string("]");
+ }
+
+ template <typename A, typename B>
+ inline std::string
+ parser_name(intersection<A, B> const& p)
+ {
+ return std::string("intersection")
+ + std::string("[")
+ + parser_name(p.left()) + std::string(", ") + parser_name(p.right())
+ + std::string("]");
+ }
+
+ template <typename A, typename B>
+ inline std::string
+ parser_name(difference<A, B> const& p)
+ {
+ return std::string("difference")
+ + std::string("[")
+ + parser_name(p.left()) + std::string(", ") + parser_name(p.right())
+ + std::string("]");
+ }
+
+ template <typename A, typename B>
+ inline std::string
+ parser_name(exclusive_or<A, B> const& p)
+ {
+ return std::string("exclusive_or")
+ + std::string("[")
+ + parser_name(p.left()) + std::string(", ") + parser_name(p.right())
+ + std::string("]");
+ }
+
+ template <typename S>
+ inline std::string
+ parser_name(optional<S> const& p)
+ {
+ return std::string("optional")
+ + std::string("[")
+ + parser_name(p.subject())
+ + std::string("]");
+ }
+
+ template <typename S>
+ inline std::string
+ parser_name(kleene_star<S> const& p)
+ {
+ return std::string("kleene_star")
+ + std::string("[")
+ + parser_name(p.subject())
+ + std::string("]");
+ }
+
+ template <typename S>
+ inline std::string
+ parser_name(positive<S> const& p)
+ {
+ return std::string("positive")
+ + std::string("[")
+ + parser_name(p.subject())
+ + std::string("]");
+ }
+
+///////////////////////////////////////////////////////////////////////////////
+// from parser.hpp
+ template <typename DerivedT>
+ inline std::string
+ parser_name(parser<DerivedT> const& p)
+ {
+ return std::string("parser");
+ }
+
+///////////////////////////////////////////////////////////////////////////////
+// from primitives.hpp
+ template <typename DerivedT>
+ inline std::string
+ parser_name(char_parser<DerivedT> const &p)
+ {
+ return std::string("char_parser");
+ }
+
+ template <typename CharT>
+ inline std::string
+ parser_name(chlit<CharT> const &p)
+ {
+ return std::string("chlit(\'")
+ + std::string(1, p.ch)
+ + std::string("\')");
+ }
+
+ template <typename CharT>
+ inline std::string
+ parser_name(range<CharT> const &p)
+ {
+ return std::string("range(")
+ + std::string(1, p.first) + std::string(", ") + std::string(1, p.last)
+ + std::string(")");
+ }
+
+ template <typename IteratorT>
+ inline std::string
+ parser_name(chseq<IteratorT> const &p)
+ {
+ return std::string("chseq(\"")
+ + std::string(p.first, p.last)
+ + std::string("\")");
+ }
+
+ template <typename IteratorT>
+ inline std::string
+ parser_name(strlit<IteratorT> const &p)
+ {
+ return std::string("strlit(\"")
+ + std::string(p.seq.first, p.seq.last)
+ + std::string("\")");
+ }
+
+ inline std::string
+ parser_name(nothing_parser const&)
+ {
+ return std::string("nothing");
+ }
+
+ inline std::string
+ parser_name(epsilon_parser const&)
+ {
+ return std::string("epsilon");
+ }
+
+ inline std::string
+ parser_name(anychar_parser const&)
+ {
+ return std::string("anychar");
+ }
+
+ inline std::string
+ parser_name(alnum_parser const&)
+ {
+ return std::string("alnum");
+ }
+
+ inline std::string
+ parser_name(alpha_parser const&)
+ {
+ return std::string("alpha");
+ }
+
+ inline std::string
+ parser_name(cntrl_parser const&)
+ {
+ return std::string("cntrl");
+ }
+
+ inline std::string
+ parser_name(digit_parser const&)
+ {
+ return std::string("digit");
+ }
+
+ inline std::string
+ parser_name(graph_parser const&)
+ {
+ return std::string("graph");
+ }
+
+ inline std::string
+ parser_name(lower_parser const&)
+ {
+ return std::string("lower");
+ }
+
+ inline std::string
+ parser_name(print_parser const&)
+ {
+ return std::string("print");
+ }
+
+ inline std::string
+ parser_name(punct_parser const&)
+ {
+ return std::string("punct");
+ }
+
+ inline std::string
+ parser_name(blank_parser const&)
+ {
+ return std::string("blank");
+ }
+
+ inline std::string
+ parser_name(space_parser const&)
+ {
+ return std::string("space");
+ }
+
+ inline std::string
+ parser_name(upper_parser const&)
+ {
+ return std::string("upper");
+ }
+
+ inline std::string
+ parser_name(xdigit_parser const&)
+ {
+ return std::string("xdigit");
+ }
+
+ inline std::string
+ parser_name(eol_parser const&)
+ {
+ return std::string("eol");
+ }
+
+ inline std::string
+ parser_name(end_parser const&)
+ {
+ return std::string("end");
+ }
+
+///////////////////////////////////////////////////////////////////////////////
+// from rule.hpp
+ namespace impl {
+ struct node_registry
+ {
+ typedef std::pair<std::string, bool> rule_info;
+ typedef std::map<void const *, rule_info> rule_infos;
+
+ std::string find_node(void const *r)
+ {
+ rule_infos::const_iterator cit = infos.find(r);
+ if (cit != infos.end())
+ return (*cit).second.first;
+ return std::string("<unknown>");
+ }
+
+ bool trace_node(void const *r)
+ {
+ rule_infos::const_iterator cit = infos.find(r);
+ if (cit != infos.end())
+ return (*cit).second.second;
+ return BOOST_SPIRIT_DEBUG_TRACENODE;
+ }
+
+ bool register_node(void const *r, char const *name_to_register,
+ bool trace_node)
+ {
+ if (infos.find(r) != infos.end())
+ return false;
+
+ return infos.insert(rule_infos::value_type(r,
+ rule_info(std::string(name_to_register), trace_node))
+ ).second;
+ }
+
+ bool unregister_node(void const *r)
+ {
+ if (infos.find(r) == infos.end())
+ return false;
+ return (1 == infos.erase(r));
+ }
+
+ private:
+ rule_infos infos;
+ };
+
+ inline node_registry &
+ get_node_registry()
+ {
+ static node_registry node_infos;
+ return node_infos;
+ }
+ } // namespace impl
+
+ template<
+ typename DerivedT, typename EmbedT,
+ typename T0, typename T1, typename T2
+ >
+ inline std::string
+ parser_name(impl::rule_base<DerivedT, EmbedT, T0, T1, T2> const& p)
+ {
+ return std::string("rule_base")
+ + std::string("(")
+ + impl::get_node_registry().find_node(&p)
+ + std::string(")");
+ }
+
+ template<typename T0, typename T1, typename T2>
+ inline std::string
+ parser_name(rule<T0, T1, T2> const& p)
+ {
+ return std::string("rule")
+ + std::string("(")
+ + impl::get_node_registry().find_node(&p)
+ + std::string(")");
+ }
+
+///////////////////////////////////////////////////////////////////////////////
+// from subrule.hpp
+ template <typename FirstT, typename RestT>
+ inline std::string
+ parser_name(subrule_list<FirstT, RestT> const &p)
+ {
+ return std::string("subrule_list")
+ + std::string("(")
+ + impl::get_node_registry().find_node(&p)
+ + std::string(")");
+ }
+
+ template <int ID, typename DefT, typename ContextT>
+ inline std::string
+ parser_name(subrule_parser<ID, DefT, ContextT> const &p)
+ {
+ return std::string("subrule_parser")
+ + std::string("(")
+ + impl::get_node_registry().find_node(&p)
+ + std::string(")");
+ }
+
+ template <int ID, typename ContextT>
+ inline std::string
+ parser_name(subrule<ID, ContextT> const &p)
+ {
+ BOOST_SPIRIT_SSTREAM stream;
+ stream << ID;
+ return std::string("subrule<")
+ + BOOST_SPIRIT_GETSTRING(stream)
+ + std::string(">(")
+ + impl::get_node_registry().find_node(&p)
+ + std::string(")");
+ }
+
+///////////////////////////////////////////////////////////////////////////////
+// from grammar.hpp
+ template <typename DerivedT, typename ContextT>
+ inline std::string
+ parser_name(grammar<DerivedT, ContextT> const& p)
+ {
+ return std::string("grammar")
+ + std::string("(")
+ + impl::get_node_registry().find_node(&p)
+ + std::string(")");
+ }
+
+///////////////////////////////////////////////////////////////////////////////
+// decide, if a node is to be traced or not
+ template<
+ typename DerivedT, typename EmbedT,
+ typename T0, typename T1, typename T2
+ >
+ inline bool
+ trace_parser(impl::rule_base<DerivedT, EmbedT, T0, T1, T2>
+ const& p)
+ {
+ return impl::get_node_registry().trace_node(&p);
+ }
+
+ template<typename T0, typename T1, typename T2>
+ inline bool
+ trace_parser(rule<T0, T1, T2> const& p)
+ {
+ return impl::get_node_registry().trace_node(&p);
+ }
+
+ template <typename DerivedT, typename ContextT>
+ inline bool
+ trace_parser(grammar<DerivedT, ContextT> const& p)
+ {
+ return impl::get_node_registry().trace_node(&p);
+ }
+
+ template <typename DerivedT, int N, typename ContextT>
+ inline bool
+ trace_parser(impl::entry_grammar<DerivedT, N, ContextT> const& p)
+ {
+ return impl::get_node_registry().trace_node(&p);
+ }
+
+ template <int ID, typename ContextT>
+ bool
+ trace_parser(subrule<ID, ContextT> const& p)
+ {
+ return impl::get_node_registry().trace_node(&p);
+ }
+
+ template <typename ParserT, typename ActorTupleT>
+ bool
+ trace_parser(init_closure_parser<ParserT, ActorTupleT> const& p)
+ {
+ return impl::get_node_registry().trace_node(&p);
+ }
+
+///////////////////////////////////////////////////////////////////////////////
+}} // namespace boost::spirit
+
+#undef BOOST_SPIRIT_SSTREAM
+#undef BOOST_SPIRIT_GETSTRING
+
+#endif // defined(BOOST_SPIRIT_DEBUG)
+
+#endif // !defined(BOOST_SPIRIT_PARSER_NAMES_IPP)
diff --git a/boost/boost/spirit/debug/minimal.hpp b/boost/boost/spirit/debug/minimal.hpp
new file mode 100644
index 00000000000..47b6c781ebd
--- /dev/null
+++ b/boost/boost/spirit/debug/minimal.hpp
@@ -0,0 +1,82 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Joel de Guzman
+ Copyright (c) 2002-2003 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_MINIMAL_DEBUG_HPP)
+#define BOOST_SPIRIT_MINIMAL_DEBUG_HPP
+
+#if !defined(BOOST_SPIRIT_DEBUG_MAIN_HPP)
+#error "You must include boost/spirit/debug.hpp, not boost/spirit/debug/minimal.hpp"
+#endif
+///////////////////////////////////////////////////////////////////////////////
+//
+// Minimum debugging tools support
+//
+///////////////////////////////////////////////////////////////////////////////
+#if !defined(BOOST_SPIRIT_DEBUG_OUT)
+#define BOOST_SPIRIT_DEBUG_OUT std::cout
+#endif
+
+///////////////////////////////////////////////////////////////////////////
+//
+// BOOST_SPIRIT_DEBUG_FLAGS controls the level of diagnostics printed
+//
+///////////////////////////////////////////////////////////////////////////
+#if !defined(BOOST_SPIRIT_DEBUG_FLAGS_NONE)
+#define BOOST_SPIRIT_DEBUG_FLAGS_NONE 0x0000 // no diagnostics at all
+#endif
+
+#if !defined(BOOST_SPIRIT_DEBUG_FLAGS_MAX)
+#define BOOST_SPIRIT_DEBUG_FLAGS_MAX 0xFFFF // print maximal diagnostics
+#endif
+
+#if !defined(BOOST_SPIRIT_DEBUG_FLAGS)
+#define BOOST_SPIRIT_DEBUG_FLAGS SPIRIT_DEBUG_FLAGS_MAX
+#endif
+
+#if !defined(BOOST_SPIRIT_DEBUG_PRINT_SOME)
+#define BOOST_SPIRIT_DEBUG_PRINT_SOME 20
+#endif
+
+#if !defined(BOOST_SPIRIT_DEBUG_RULE)
+#define BOOST_SPIRIT_DEBUG_RULE(r)
+#endif // !defined(BOOST_SPIRIT_DEBUG_RULE)
+
+#if !defined(BOOST_SPIRIT_DEBUG_NODE)
+#define BOOST_SPIRIT_DEBUG_NODE(r)
+#endif // !defined(BOOST_SPIRIT_DEBUG_NODE)
+
+#if !defined(BOOST_SPIRIT_DEBUG_GRAMMAR)
+#define BOOST_SPIRIT_DEBUG_GRAMMAR(r)
+#endif // !defined(BOOST_SPIRIT_DEBUG_GRAMMAR)
+
+#if !defined(BOOST_SPIRIT_DEBUG_TRACE_RULE)
+#define BOOST_SPIRIT_DEBUG_TRACE_RULE(r, t)
+#endif // !defined(BOOST_SPIRIT_DEBUG_TRACE_RULE)
+
+#if !defined(BOOST_SPIRIT_DEBUG_TRACE_NODE)
+#define BOOST_SPIRIT_DEBUG_TRACE_NODE(r, t)
+#endif // !defined(BOOST_SPIRIT_DEBUG_TRACE_NODE)
+
+#if !defined(BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR)
+#define BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR(r, t)
+#endif // !defined(BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR)
+
+#if !defined(BOOST_SPIRIT_DEBUG_TRACE_RULE_NAME)
+#define BOOST_SPIRIT_DEBUG_TRACE_RULE_NAME(r, n, t)
+#endif // !defined(BOOST_SPIRIT_DEBUG_TRACE_RULE_NAME)
+
+#if !defined(BOOST_SPIRIT_DEBUG_TRACE_NODE_NAME)
+#define BOOST_SPIRIT_DEBUG_TRACE_NODE_NAME(r, n, t)
+#endif // !defined(BOOST_SPIRIT_DEBUG_TRACE_NODE_NAME)
+
+#if !defined(BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR_NAME)
+#define BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR_NAME(r, n, t)
+#endif // !defined(BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR_NAME)
+
+#endif // !defined(BOOST_SPIRIT_MINIMAL_DEBUG_HPP)
diff --git a/boost/boost/spirit/debug/parser_names.hpp b/boost/boost/spirit/debug/parser_names.hpp
new file mode 100644
index 00000000000..c2bf3bd11f0
--- /dev/null
+++ b/boost/boost/spirit/debug/parser_names.hpp
@@ -0,0 +1,250 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Joel de Guzman
+ Copyright (c) 2002-2003 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_PARSER_NAMES_HPP)
+#define BOOST_SPIRIT_PARSER_NAMES_HPP
+
+#if defined(BOOST_SPIRIT_DEBUG)
+
+//////////////////////////////////
+#include <boost/spirit/core.hpp>
+
+namespace boost { namespace spirit {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Declaration of helper functions, which return the name of a concrete
+// parser instance. The functions are specialized on the parser types. The
+// functions declared in this file are for the predefined parser types from
+// the Spirit core library only, so additional functions might be provided as
+// needed.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////////////////////////
+// from actions.hpp
+ template <typename ParserT, typename ActionT>
+ std::string
+ parser_name(action<ParserT, ActionT> const& p);
+
+///////////////////////////////////////////////////////////////////////////////
+// from directives.hpp
+ template <typename ParserT>
+ std::string
+ parser_name(contiguous<ParserT> const& p);
+
+ template <typename ParserT>
+ std::string
+ parser_name(inhibit_case<ParserT> const& p);
+
+ template <typename A, typename B>
+ std::string
+ parser_name(longest_alternative<A, B> const& p);
+
+ template <typename A, typename B>
+ std::string
+ parser_name(shortest_alternative<A, B> const& p);
+
+///////////////////////////////////////////////////////////////////////////////
+// from grammar.hpp
+ template <typename DerivedT, typename ContextT>
+ std::string
+ parser_name(grammar<DerivedT, ContextT> const& p);
+
+///////////////////////////////////////////////////////////////////////////////
+// from numerics.hpp
+ template <typename T, int Radix, unsigned MinDigits, int MaxDigits>
+ std::string
+ parser_name(uint_parser<T, Radix, MinDigits, MaxDigits> const& p);
+
+ template <typename T, int Radix, unsigned MinDigits, int MaxDigits>
+ std::string
+ parser_name(int_parser<T, Radix, MinDigits, MaxDigits> const& p);
+
+ template <typename T, typename RealPoliciesT>
+ std::string
+ parser_name(real_parser<T, RealPoliciesT> const& p);
+
+///////////////////////////////////////////////////////////////////////////////
+// from operators.hpp
+ template <typename A, typename B>
+ std::string
+ parser_name(sequence<A, B> const& p);
+
+ template <typename A, typename B>
+ std::string
+ parser_name(sequential_or<A, B> const& p);
+
+ template <typename A, typename B>
+ std::string
+ parser_name(alternative<A, B> const& p);
+
+ template <typename A, typename B>
+ std::string
+ parser_name(intersection<A, B> const& p);
+
+ template <typename A, typename B>
+ std::string
+ parser_name(difference<A, B> const& p);
+
+ template <typename A, typename B>
+ std::string
+ parser_name(exclusive_or<A, B> const& p);
+
+ template <typename S>
+ std::string
+ parser_name(optional<S> const& p);
+
+ template <typename S>
+ std::string
+ parser_name(kleene_star<S> const& p);
+
+ template <typename S>
+ std::string
+ parser_name(positive<S> const& p);
+
+///////////////////////////////////////////////////////////////////////////////
+// from parser.hpp
+ template <typename DerivedT>
+ std::string
+ parser_name(parser<DerivedT> const& p);
+
+///////////////////////////////////////////////////////////////////////////////
+// from primitives.hpp
+ template <typename DerivedT>
+ std::string
+ parser_name(char_parser<DerivedT> const &p);
+
+ template <typename CharT>
+ std::string
+ parser_name(chlit<CharT> const &p);
+
+ template <typename CharT>
+ std::string
+ parser_name(range<CharT> const &p);
+
+ template <typename IteratorT>
+ std::string
+ parser_name(chseq<IteratorT> const &p);
+
+ template <typename IteratorT>
+ std::string
+ parser_name(strlit<IteratorT> const &p);
+
+ std::string
+ parser_name(nothing_parser const &p);
+
+ std::string
+ parser_name(epsilon_parser const &p);
+
+ std::string
+ parser_name(anychar_parser const &p);
+
+ std::string
+ parser_name(alnum_parser const &p);
+
+ std::string
+ parser_name(alpha_parser const &p);
+
+ std::string
+ parser_name(cntrl_parser const &p);
+
+ std::string
+ parser_name(digit_parser const &p);
+
+ std::string
+ parser_name(graph_parser const &p);
+
+ std::string
+ parser_name(lower_parser const &p);
+
+ std::string
+ parser_name(print_parser const &p);
+
+ std::string
+ parser_name(punct_parser const &p);
+
+ std::string
+ parser_name(blank_parser const &p);
+
+ std::string
+ parser_name(space_parser const &p);
+
+ std::string
+ parser_name(upper_parser const &p);
+
+ std::string
+ parser_name(xdigit_parser const &p);
+
+ std::string
+ parser_name(eol_parser const &p);
+
+ std::string
+ parser_name(end_parser const &p);
+
+///////////////////////////////////////////////////////////////////////////////
+// from rule.hpp
+ template<typename T0, typename T1, typename T2>
+ std::string
+ parser_name(rule<T0, T1, T2> const& p);
+
+///////////////////////////////////////////////////////////////////////////////
+// from subrule.hpp
+ template <typename FirstT, typename RestT>
+ std::string
+ parser_name(subrule_list<FirstT, RestT> const &p);
+
+ template <int ID, typename DefT, typename ContextT>
+ std::string
+ parser_name(subrule_parser<ID, DefT, ContextT> const &p);
+
+ template <int ID, typename ContextT>
+ std::string
+ parser_name(subrule<ID, ContextT> const &p);
+
+///////////////////////////////////////////////////////////////////////////////
+// from chset.hpp
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Decide, if a node is to be traced or not
+//
+///////////////////////////////////////////////////////////////////////////////
+ template<
+ typename DerivedT, typename EmbedT,
+ typename T0, typename T1, typename T2
+ >
+ bool
+ trace_parser(impl::rule_base<DerivedT, EmbedT, T0, T1, T2>
+ const& p);
+
+ template <typename DerivedT, typename ContextT>
+ bool
+ trace_parser(grammar<DerivedT, ContextT> const& p);
+
+ template <int ID, typename ContextT>
+ bool
+ trace_parser(subrule<ID, ContextT> const& p);
+
+ template <typename ParserT, typename ActorTupleT>
+ struct init_closure_parser;
+
+ template <typename ParserT, typename ActorTupleT>
+ bool
+ trace_parser(init_closure_parser<ParserT, ActorTupleT> const& p);
+
+///////////////////////////////////////////////////////////////////////////////
+}} // namespace boost::spirit
+
+//////////////////////////////////
+#include <boost/spirit/debug/impl/parser_names.ipp>
+
+#endif // defined(BOOST_SPIRIT_DEBUG)
+
+#endif // !defined(BOOST_SPIRIT_PARSER_NAMES_HPP)
diff --git a/boost/boost/spirit/debug/typeof.hpp b/boost/boost/spirit/debug/typeof.hpp
new file mode 100644
index 00000000000..ccd65a0dd9f
--- /dev/null
+++ b/boost/boost/spirit/debug/typeof.hpp
@@ -0,0 +1,36 @@
+/*=============================================================================
+ Copyright (c) 2006 Tobias Schwinger
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_DEBUG_TYPEOF_HPP)
+#define BOOST_SPIRIT_DEBUG_TYPEOF_HPP
+
+#include <boost/typeof/typeof.hpp>
+
+#include <boost/spirit/core/typeof.hpp>
+
+
+namespace boost { namespace spirit {
+
+ // debug_node.hpp
+ template<typename ContextT> struct parser_context_linker;
+ template<typename ScannerT> struct scanner_context_linker;
+ template<typename ContextT> struct closure_context_linker;
+
+}} // namespace boost::spirit
+
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+
+// debug_node.hpp
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::parser_context_linker,1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::scanner_context_linker,1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::closure_context_linker,1)
+
+#endif
+
diff --git a/boost/boost/spirit/dynamic.hpp b/boost/boost/spirit/dynamic.hpp
new file mode 100644
index 00000000000..cf0d024c1c4
--- /dev/null
+++ b/boost/boost/spirit/dynamic.hpp
@@ -0,0 +1,29 @@
+/*=============================================================================
+ Copyright (c) 2002-2003 Joel de Guzman
+ Copyright (c) 2002 Juan Carlos Arevalo-Baeza
+ Copyright (c) 2002-2003 Martin Wille
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_DYNAMIC_HPP
+#define BOOST_SPIRIT_DYNAMIC_HPP
+
+#include <boost/spirit/version.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Master header for Spirit.Dynamic
+//
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/dynamic/if.hpp>
+#include <boost/spirit/dynamic/for.hpp>
+#include <boost/spirit/dynamic/while.hpp>
+#include <boost/spirit/dynamic/lazy.hpp>
+#include <boost/spirit/dynamic/stored_rule.hpp>
+#include <boost/spirit/dynamic/rule_alias.hpp>
+
+////////////////////////////////////////////////////////////////////////////////
+#endif // BOOST_SPIRIT_DYNAMIC_HPP
diff --git a/boost/boost/spirit/dynamic/for.hpp b/boost/boost/spirit/dynamic/for.hpp
new file mode 100644
index 00000000000..3f1e9c4ce09
--- /dev/null
+++ b/boost/boost/spirit/dynamic/for.hpp
@@ -0,0 +1,183 @@
+/*=============================================================================
+ Copyright (c) 2002-2003 Joel de Guzman
+ Copyright (c) 2002-2003 Martin Wille
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_FOR_HPP
+#define BOOST_SPIRIT_FOR_HPP
+////////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/core/parser.hpp>
+#include <boost/spirit/core/composite/composite.hpp>
+#include <boost/spirit/dynamic/impl/conditions.ipp>
+
+////////////////////////////////////////////////////////////////////////////////
+
+namespace boost { namespace spirit
+{
+ namespace impl
+ {
+
+ template <typename FuncT>
+ struct for_functor
+ {
+ typedef typename boost::call_traits<FuncT>::param_type param_t;
+
+ for_functor(param_t f) : func(f) {}
+ for_functor() {}
+ FuncT func;
+ };
+
+ template <typename InitF>
+ struct for_init_functor : for_functor<InitF>
+ {
+ typedef for_functor<InitF> base_t;
+ typedef typename base_t::param_t param_t;
+
+ for_init_functor(param_t f) : base_t(f) {}
+ for_init_functor() : base_t() {}
+ void init() const { /*return*/ this->func(); }
+ };
+
+ template <typename StepF>
+ struct for_step_functor : for_functor<StepF>
+ {
+ typedef for_functor<StepF> base_t;
+ typedef typename base_t::param_t param_t;
+
+ for_step_functor(param_t f) : base_t(f) {}
+ for_step_functor() : base_t() {}
+ void step() const { /*return*/ this->func(); }
+ };
+
+ //////////////////////////////////
+ // for_parser
+ template
+ <
+ typename InitF, typename CondT, typename StepF,
+ typename ParsableT
+ >
+ struct for_parser
+ : private for_init_functor<InitF>
+ , private for_step_functor<StepF>
+ , private condition_evaluator<typename as_parser<CondT>::type>
+ , public unary
+ <
+ typename as_parser<ParsableT>::type,
+ parser< for_parser<InitF, CondT, StepF, ParsableT> >
+ >
+ {
+ typedef for_parser<InitF, CondT, StepF, ParsableT> self_t;
+ typedef as_parser<CondT> cond_as_parser_t;
+ typedef typename cond_as_parser_t::type condition_t;
+ typedef condition_evaluator<condition_t> eval_t;
+ typedef as_parser<ParsableT> as_parser_t;
+ typedef typename as_parser_t::type parser_t;
+ typedef unary< parser_t, parser< self_t > > base_t;
+
+
+ //////////////////////////////
+ // constructor, saves init, condition and step functors
+ // for later use the parse member function
+ for_parser
+ (
+ InitF const &i, CondT const &c, StepF const &s,
+ ParsableT const &p
+ )
+ : for_init_functor<InitF>(i)
+ , for_step_functor<StepF>(s)
+ , eval_t(cond_as_parser_t::convert(c))
+ , base_t(as_parser_t::convert(p))
+ { }
+
+ for_parser()
+ : for_init_functor<InitF>()
+ , for_step_functor<StepF>()
+ , eval_t()
+ , base_t()
+ {}
+
+ //////////////////////////////
+ // parse member function
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const &scan) const
+ {
+ typedef typename parser_result<self_t, ScannerT>::type
+ result_t;
+ typedef typename parser_result<parser_t, ScannerT>::type
+ body_result_t;
+
+ typename ScannerT::iterator_t save(scan.first);
+
+ std::size_t length = 0;
+ int eval_length = 0;
+
+ this->init();
+ while ((eval_length = this->evaluate(scan))>=0)
+ {
+ length += eval_length;
+ body_result_t tmp(this->subject().parse(scan));
+ if (tmp)
+ {
+ length+=tmp.length();
+ }
+ else
+ {
+ return scan.no_match();
+ }
+ this->step();
+ }
+
+ boost::spirit::nil_t attr;
+ return scan.create_match
+ (length, attr, save, scan.first);
+ }
+ };
+
+ //////////////////////////////////
+ // for_parser_gen generates takes the body parser in brackets
+ // and returns the for_parser
+ template <typename InitF, typename CondT, typename StepF>
+ struct for_parser_gen
+ {
+ for_parser_gen(InitF const &i, CondT const &c, StepF const &s)
+ : init(i)
+ , condition(c)
+ , step(s)
+ {}
+
+ template <typename ParsableT>
+ for_parser<InitF, CondT, StepF, ParsableT>
+ operator[](ParsableT const &p) const
+ {
+ return for_parser<InitF, CondT, StepF, ParsableT>
+ (init, condition, step, p);
+ }
+
+ InitF const &init;
+ CondT const &condition;
+ StepF const &step;
+ };
+ } // namespace impl
+
+ //////////////////////////////
+ // for_p, returns for-parser generator
+ // Usage: spirit::for_p(init-ftor, condition, step-ftor)[body]
+ template
+ <
+ typename InitF, typename ConditionT, typename StepF
+ >
+ impl::for_parser_gen<InitF, ConditionT, StepF>
+ for_p(InitF const &init_f, ConditionT const &condition, StepF const &step_f)
+ {
+ return impl::for_parser_gen<InitF, ConditionT, StepF>
+ (init_f, condition, step_f);
+ }
+
+}} // namespace boost::spirit
+
+#endif // BOOST_SPIRIT_FOR_HPP
diff --git a/boost/boost/spirit/dynamic/if.hpp b/boost/boost/spirit/dynamic/if.hpp
new file mode 100644
index 00000000000..81cc4c1b164
--- /dev/null
+++ b/boost/boost/spirit/dynamic/if.hpp
@@ -0,0 +1,225 @@
+/*=============================================================================
+ Copyright (c) 2002-2003 Joel de Guzman
+ Copyright (c) 2002 Juan Carlos Arevalo-Baeza
+ Copyright (c) 2002-2003 Martin Wille
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_IF_HPP
+#define BOOST_SPIRIT_IF_HPP
+
+#include <boost/spirit/core/parser.hpp>
+#include <boost/spirit/core/composite/composite.hpp>
+#include <boost/spirit/dynamic/impl/conditions.ipp>
+
+namespace boost { namespace spirit {
+
+ namespace impl {
+
+ //////////////////////////////////
+ // if-else-parser, holds two alternative parsers and a conditional functor
+ // that selects between them.
+ template <typename ParsableTrueT, typename ParsableFalseT, typename CondT>
+ struct if_else_parser
+ : public condition_evaluator<typename as_parser<CondT>::type>
+ , public binary
+ <
+ typename as_parser<ParsableTrueT>::type,
+ typename as_parser<ParsableFalseT>::type,
+ parser< if_else_parser<ParsableTrueT, ParsableFalseT, CondT> >
+ >
+ {
+ typedef if_else_parser<ParsableTrueT, ParsableFalseT, CondT> self_t;
+
+ typedef as_parser<ParsableTrueT> as_parser_true_t;
+ typedef as_parser<ParsableFalseT> as_parser_false_t;
+ typedef typename as_parser_true_t::type parser_true_t;
+ typedef typename as_parser_false_t::type parser_false_t;
+ typedef as_parser<CondT> cond_as_parser_t;
+ typedef typename cond_as_parser_t::type condition_t;
+
+ typedef binary<parser_true_t, parser_false_t, parser<self_t> > base_t;
+ typedef condition_evaluator<condition_t> eval_t;
+
+ if_else_parser
+ (
+ ParsableTrueT const& p_true,
+ ParsableFalseT const& p_false,
+ CondT const& cond_
+ )
+ : eval_t(cond_as_parser_t::convert(cond_))
+ , base_t
+ (
+ as_parser_true_t::convert(p_true),
+ as_parser_false_t::convert(p_false)
+ )
+ { }
+
+ template <typename ScannerT>
+ struct result
+ {
+ typedef typename match_result<ScannerT, nil_t>::type type;
+ };
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ typedef typename parser_result
+ <parser_true_t, ScannerT>::type then_result_t;
+ typedef typename parser_result
+ <parser_false_t, ScannerT>::type else_result_t;
+
+ typename ScannerT::iterator_t const save(scan.first);
+
+ std::ptrdiff_t length = this->evaluate(scan);
+ if (length >= 0)
+ {
+ then_result_t then_result(this->left().parse(scan));
+ if (then_result)
+ {
+ length += then_result.length();
+ return scan.create_match(std::size_t(length), nil_t(), save, scan.first);
+ }
+ }
+ else
+ {
+ else_result_t else_result(this->right().parse(scan));
+ if (else_result)
+ {
+ length = else_result.length();
+ return scan.create_match(std::size_t(length), nil_t(), save, scan.first);
+ }
+ }
+ return scan.no_match();
+ }
+ };
+
+ //////////////////////////////////
+ // if-else-parser generator, takes the false-parser in brackets
+ // and returns the if-else-parser.
+ template <typename ParsableTrueT, typename CondT>
+ struct if_else_parser_gen
+ {
+ if_else_parser_gen(ParsableTrueT const& p_true_, CondT const& cond_)
+ : p_true(p_true_)
+ , cond(cond_) {}
+
+ template <typename ParsableFalseT>
+ if_else_parser
+ <
+ ParsableTrueT,
+ ParsableFalseT,
+ CondT
+ >
+ operator[](ParsableFalseT const& p_false) const
+ {
+ return if_else_parser<ParsableTrueT, ParsableFalseT, CondT>
+ (
+ p_true,
+ p_false,
+ cond
+ );
+ }
+
+ ParsableTrueT const &p_true;
+ CondT const &cond;
+ };
+
+ //////////////////////////////////
+ // if-parser, conditionally runs a parser is a functor condition is true.
+ // If the condition is fales, it fails the parse.
+ // It can optionally become an if-else-parser through the member else_p.
+ template <typename ParsableT, typename CondT>
+ struct if_parser
+ : public condition_evaluator<typename as_parser<CondT>::type>
+ , public unary
+ <
+ typename as_parser<ParsableT>::type,
+ parser<if_parser<ParsableT, CondT> > >
+ {
+ typedef if_parser<ParsableT, CondT> self_t;
+ typedef as_parser<ParsableT> as_parser_t;
+ typedef typename as_parser_t::type parser_t;
+
+ typedef as_parser<CondT> cond_as_parser_t;
+ typedef typename cond_as_parser_t::type condition_t;
+ typedef condition_evaluator<condition_t> eval_t;
+ typedef unary<parser_t, parser<self_t> > base_t;
+
+ if_parser(ParsableT const& p, CondT const& cond_)
+ : eval_t(cond_as_parser_t::convert(cond_))
+ , base_t(as_parser_t::convert(p))
+ , else_p(p, cond_)
+ {}
+
+ template <typename ScannerT>
+ struct result
+ {
+ typedef typename match_result<ScannerT, nil_t>::type type;
+ };
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ typedef typename parser_result<parser_t, ScannerT>::type t_result_t;
+ typename ScannerT::iterator_t const save(scan.first);
+
+ std::ptrdiff_t length = this->evaluate(scan);
+ if (length >= 0)
+ {
+ t_result_t then_result(this->subject().parse(scan));
+ if (then_result)
+ {
+ length += then_result.length();
+ return scan.create_match(std::size_t(length), nil_t(), save, scan.first);
+ }
+ return scan.no_match();
+ }
+ return scan.empty_match();
+ }
+
+ if_else_parser_gen<ParsableT, CondT> else_p;
+ };
+
+ //////////////////////////////////
+ // if-parser generator, takes the true-parser in brackets and returns the
+ // if-parser.
+ template <typename CondT>
+ struct if_parser_gen
+ {
+ if_parser_gen(CondT const& cond_) : cond(cond_) {}
+
+ template <typename ParsableT>
+ if_parser
+ <
+ ParsableT,
+ CondT
+ >
+ operator[](ParsableT const& subject) const
+ {
+ return if_parser<ParsableT, CondT>(subject, cond);
+ }
+
+ CondT const &cond;
+ };
+
+} // namespace impl
+
+//////////////////////////////////
+// if_p function, returns "if" parser generator
+
+template <typename CondT>
+impl::if_parser_gen<CondT>
+if_p(CondT const& cond)
+{
+ return impl::if_parser_gen<CondT>(cond);
+}
+
+}} // namespace boost::spirit
+
+#endif // BOOST_SPIRIT_IF_HPP
diff --git a/boost/boost/spirit/dynamic/impl/conditions.ipp b/boost/boost/spirit/dynamic/impl/conditions.ipp
new file mode 100644
index 00000000000..a2fd0327288
--- /dev/null
+++ b/boost/boost/spirit/dynamic/impl/conditions.ipp
@@ -0,0 +1,100 @@
+/*=============================================================================
+ Copyright (c) 2002-2003 Martin Wille
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_CONDITIONS_IPP
+#define BOOST_SPIRIT_CONDITIONS_IPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/meta/parser_traits.hpp>
+#include <boost/spirit/core/composite/epsilon.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+ namespace impl {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// condition evaluation
+//
+///////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////
+ // condition_parser_selector, decides which parser to use for a condition
+ // If the template argument is a parser then that parser is used.
+ // If the template argument is a functor then a condition parser using
+ // the functor is chosen
+
+ template <typename T> struct embed_t_accessor
+ {
+ typedef typename T::embed_t type;
+ };
+
+#if defined(BOOST_MSVC) && BOOST_MSVC <= 1300
+ template <> struct embed_t_accessor<int>
+ {
+ typedef int type;
+ };
+#endif
+
+ template <typename ConditionT>
+ struct condition_parser_selector
+ {
+ typedef
+ typename mpl::if_<
+ is_parser<ConditionT>,
+ ConditionT,
+ condition_parser<ConditionT>
+ >::type
+ type;
+
+ typedef typename embed_t_accessor<type>::type embed_t;
+ };
+
+ //////////////////////////////////
+ // condition_evaluator, uses a parser to check wether a condition is met
+ // takes a parser or a functor that can be evaluated in boolean context
+ // as template parameter.
+
+ // JDG 4-15-03 refactored
+ template <typename ConditionT>
+ struct condition_evaluator
+ {
+ typedef condition_parser_selector<ConditionT> selector_t;
+ typedef typename selector_t::type selected_t;
+ typedef typename selector_t::embed_t cond_embed_t;
+
+ typedef typename boost::call_traits<cond_embed_t>::param_type
+ param_t;
+
+ condition_evaluator(param_t s) : cond(s) {}
+
+ /////////////////////////////
+ // evaluate, checks wether condition is met
+ // returns length of a match or a negative number for no-match
+ template <typename ScannerT>
+ std::ptrdiff_t
+ evaluate(ScannerT const &scan) const
+ {
+ typedef typename ScannerT::iterator_t iterator_t;
+ typedef typename parser_result<selected_t, ScannerT>::type cres_t;
+ iterator_t save(scan.first);
+ cres_t result = cond.parse(scan);
+ if (!result) // reset the position if evaluation
+ scan.first = save; // fails.
+ return result.length();
+ }
+
+ cond_embed_t cond;
+ };
+
+///////////////////////////////////////////////////////////////////////////////
+ } // namespace impl
+
+}} // namespace boost::spirit
+
+#endif
diff --git a/boost/boost/spirit/dynamic/impl/select.ipp b/boost/boost/spirit/dynamic/impl/select.ipp
new file mode 100644
index 00000000000..80cc9c30c4e
--- /dev/null
+++ b/boost/boost/spirit/dynamic/impl/select.ipp
@@ -0,0 +1,115 @@
+/*=============================================================================
+ Copyright (c) 2003 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_SELECT_IPP
+#define BOOST_SPIRIT_SELECT_IPP
+
+#include <boost/spirit/core/parser.hpp>
+#include <boost/spirit/core/composite/composite.hpp>
+#include <boost/spirit/meta/as_parser.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+///////////////////////////////////////////////////////////////////////////////
+namespace impl {
+
+///////////////////////////////////////////////////////////////////////////////
+template <typename ParserT>
+struct as_embedded_parser : public as_parser<ParserT>
+{
+ typedef typename as_parser<ParserT>::type::derived_t::embed_t type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+
+// no implementation here to catch unknown BehaviourT template arguments
+template <typename ResultT, typename BehaviourT>
+struct select_match_gen;
+
+// implementation for the select_default_no_fail behaviour
+template <typename ResultT>
+struct select_match_gen<ResultT, select_default_no_fail> {
+
+ template <typename ScannerT>
+ static ResultT
+ do_ (ScannerT const &scan)
+ {
+ return scan.create_match(0, -1, scan.first, scan.first);
+ }
+};
+
+// implementation for the select_default_fail behaviour
+template <typename ResultT>
+struct select_match_gen<ResultT, select_default_fail> {
+
+ template <typename ScannerT>
+ static ResultT
+ do_ (ScannerT const &scan)
+ {
+ return scan.no_match();
+ }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+template <int N, typename ResultT, typename TupleT, typename BehaviourT>
+struct parse_tuple_element {
+
+ BOOST_STATIC_CONSTANT(int, index = (TupleT::length - N));
+
+ template <typename ScannerT>
+ static ResultT
+ do_(TupleT const &t, ScannerT const &scan)
+ {
+ typedef typename phoenix::tuple_element<index, TupleT>::type parser_t;
+ typedef typename ScannerT::iterator_t iterator_t;
+ typedef typename parser_result<parser_t, ScannerT>::type result_t;
+
+ iterator_t save(scan.first);
+ result_t result(t[phoenix::tuple_index<index>()].parse(scan));
+
+ if (result) {
+ return scan.create_match(result.length(), TupleT::length - N,
+ save, scan.first);
+ }
+ scan.first = save; // reset the input stream
+ return parse_tuple_element<N-1, ResultT, TupleT, BehaviourT>::
+ do_(t, scan);
+ }
+};
+
+template <typename ResultT, typename TupleT, typename BehaviourT>
+struct parse_tuple_element<1, ResultT, TupleT, BehaviourT> {
+
+ BOOST_STATIC_CONSTANT(int, index = (TupleT::length - 1));
+
+ template <typename ScannerT>
+ static ResultT
+ do_(TupleT const &t, ScannerT const &scan)
+ {
+ typedef typename phoenix::tuple_element<index, TupleT>::type parser_t;
+ typedef typename ScannerT::iterator_t iterator_t;
+ typedef typename parser_result<parser_t, ScannerT>::type result_t;
+
+ iterator_t save(scan.first);
+ result_t result(t[phoenix::tuple_index<index>()].parse(scan));
+
+ if (result) {
+ return scan.create_match(result.length(), TupleT::length - 1,
+ save, scan.first);
+ }
+ scan.first = save; // reset the input stream
+ return select_match_gen<ResultT, BehaviourT>::do_(scan);
+ }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace impl
+}} // namespace boost::spirit
+
+#endif // BOOST_SPIRIT_SELECT_IPP
diff --git a/boost/boost/spirit/dynamic/impl/switch.ipp b/boost/boost/spirit/dynamic/impl/switch.ipp
new file mode 100644
index 00000000000..59777296099
--- /dev/null
+++ b/boost/boost/spirit/dynamic/impl/switch.ipp
@@ -0,0 +1,569 @@
+/*=============================================================================
+ Copyright (c) 2003 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_SWITCH_IPP
+#define BOOST_SPIRIT_SWITCH_IPP
+
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/static_assert.hpp>
+
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/inc.hpp>
+#include <boost/preprocessor/repeat.hpp>
+#include <boost/preprocessor/repeat_from_to.hpp>
+
+#include <boost/spirit/core/parser.hpp>
+#include <boost/spirit/core/primitives/primitives.hpp>
+#include <boost/spirit/core/composite/composite.hpp>
+#include <boost/spirit/meta/as_parser.hpp>
+
+#include <boost/spirit/phoenix/actor.hpp>
+#include <boost/spirit/phoenix/tuples.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+// forward declaration
+template <int N, typename ParserT, bool IsDefault> struct case_parser;
+
+///////////////////////////////////////////////////////////////////////////////
+namespace impl {
+
+///////////////////////////////////////////////////////////////////////////////
+// parse helper functions
+template <typename ParserT, typename ScannerT>
+inline typename parser_result<ParserT, ScannerT>::type
+delegate_parse(ParserT const &p, ScannerT const &scan,
+ typename ScannerT::iterator_t const save)
+{
+ typedef typename parser_result<ParserT, ScannerT>::type result_t;
+
+ result_t result (p.subject().parse(scan));
+ if (!result)
+ scan.first = save;
+ return result;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// General default case handling (no default_p case branch given).
+// First try to match the current parser node (if the condition value is
+// matched) and, if that fails, return a no_match
+template <int N, bool IsDefault, bool HasDefault>
+struct default_delegate_parse {
+
+ template <
+ typename ParserT, typename DefaultT,
+ typename ValueT, typename ScannerT
+ >
+ static typename parser_result<ParserT, ScannerT>::type
+ parse (ValueT const &value, ParserT const &p, DefaultT const &,
+ ScannerT const &scan, typename ScannerT::iterator_t const save)
+ {
+ if (value == N)
+ return delegate_parse(p, scan, save);
+ return scan.no_match();
+ }
+};
+
+// The current case parser node is the default parser.
+// Ignore the given case value and try to match the given default parser.
+template <int N, bool HasDefault>
+struct default_delegate_parse<N, true, HasDefault> {
+
+ template <
+ typename ParserT, typename DefaultT,
+ typename ValueT, typename ScannerT
+ >
+ static typename parser_result<ParserT, ScannerT>::type
+ parse (ValueT const& /*value*/, ParserT const &, DefaultT const &d,
+ ScannerT const &scan, typename ScannerT::iterator_t const save)
+ {
+ // Since there is a default_p case branch defined, the corresponding
+ // parser shouldn't be the nothing_parser
+ BOOST_STATIC_ASSERT((!boost::is_same<DefaultT, nothing_parser>::value));
+ return delegate_parse(d, scan, save);
+ }
+};
+
+// The current case parser node is not the default parser, but there is a
+// default_p branch given inside the switch_p parser.
+// First try to match the current parser node (if the condition value is
+// matched) and, if that fails, match the given default_p parser.
+template <int N>
+struct default_delegate_parse<N, false, true> {
+
+ template <
+ typename ParserT, typename DefaultT,
+ typename ValueT, typename ScannerT
+ >
+ static typename parser_result<ParserT, ScannerT>::type
+ parse (ValueT const &value, ParserT const &p, DefaultT const &d,
+ ScannerT const &scan, typename ScannerT::iterator_t const save)
+ {
+ // Since there is a default_p case branch defined, the corresponding
+ // parser shouldn't be the nothing_parser
+ BOOST_STATIC_ASSERT((!boost::is_same<DefaultT, nothing_parser>::value));
+ if (value == N)
+ return delegate_parse(p, scan, save);
+
+ return delegate_parse(d, scan, save);
+ }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// Look through the case parser chain to test, if there is a default case
+// branch defined (returned by 'value').
+template <typename CaseT, bool IsSimple = CaseT::is_simple>
+struct default_case;
+
+////////////////////////////////////////
+template <typename ResultT, bool IsDefault>
+struct get_default_parser {
+
+ template <typename ParserT>
+ static ResultT
+ get(parser<ParserT> const &p)
+ {
+ return default_case<typename ParserT::derived_t::left_t>::
+ get(p.derived().left());
+ }
+};
+
+template <typename ResultT>
+struct get_default_parser<ResultT, true> {
+
+ template <typename ParserT>
+ static ResultT
+ get(parser<ParserT> const &p) { return p.derived().right(); }
+};
+
+////////////////////////////////////////
+template <typename CaseT, bool IsSimple>
+struct default_case {
+
+ // The 'value' constant is true, if the current case_parser or one of its
+ // left siblings is a default_p generated case_parser.
+ BOOST_STATIC_CONSTANT(bool, value =
+ (CaseT::is_default || default_case<typename CaseT::left_t>::value));
+
+ // The 'is_epsilon' constant is true, if the current case_parser or one of
+ // its left siblings is a default_p generated parser with an attached
+ // epsilon_p (this is generated by the plain default_p).
+ BOOST_STATIC_CONSTANT(bool, is_epsilon = (
+ (CaseT::is_default && CaseT::is_epsilon) ||
+ default_case<typename CaseT::left_t>::is_epsilon
+ ));
+
+ // The computed 'type' represents the type of the default case branch
+ // parser (if there is one) or nothing_parser (if there isn't any default
+ // case branch).
+ typedef typename boost::mpl::if_c<
+ CaseT::is_default, typename CaseT::right_embed_t,
+ typename default_case<typename CaseT::left_t>::type
+ >::type type;
+
+ // The get function returns the parser attached to the default case branch
+ // (if there is one) or an instance of a nothing_parser (if there isn't
+ // any default case branch).
+ template <typename ParserT>
+ static type
+ get(parser<ParserT> const &p)
+ { return get_default_parser<type, CaseT::is_default>::get(p); }
+};
+
+////////////////////////////////////////
+template <typename ResultT, bool IsDefault>
+struct get_default_parser_simple {
+
+ template <typename ParserT>
+ static ResultT
+ get(parser<ParserT> const &p) { return p.derived(); }
+};
+
+template <typename ResultT>
+struct get_default_parser_simple<ResultT, false> {
+
+ template <typename ParserT>
+ static nothing_parser
+ get(parser<ParserT> const &) { return nothing_p; }
+};
+
+////////////////////////////////////////
+// Specialization of the default_case template for the last (leftmost) element
+// of the case parser chain.
+template <typename CaseT>
+struct default_case<CaseT, true> {
+
+ // The 'value' and 'is_epsilon' constant, the 'type' type and the function
+ // 'get' are described above.
+
+ BOOST_STATIC_CONSTANT(bool, value = CaseT::is_default);
+ BOOST_STATIC_CONSTANT(bool, is_epsilon = (
+ CaseT::is_default && CaseT::is_epsilon
+ ));
+
+ typedef typename boost::mpl::if_c<
+ CaseT::is_default, CaseT, nothing_parser
+ >::type type;
+
+ template <typename ParserT>
+ static type
+ get(parser<ParserT> const &p)
+ { return get_default_parser_simple<type, value>::get(p); }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// The case_chain template calculates recursivly the depth of the left
+// subchain of the given case branch node.
+template <typename CaseT, bool IsSimple = CaseT::is_simple>
+struct case_chain {
+
+ BOOST_STATIC_CONSTANT(int, depth = (
+ case_chain<typename CaseT::left_t>::depth + 1
+ ));
+};
+
+template <typename CaseT>
+struct case_chain<CaseT, true> {
+
+ BOOST_STATIC_CONSTANT(int, depth = 0);
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// The chain_parser template is used to extract the type and the instance of
+// a left or a right parser, burried arbitrary deep inside the case parser
+// chain.
+template <int Depth, typename CaseT>
+struct chain_parser {
+
+ typedef typename CaseT::left_t our_left_t;
+
+ typedef typename chain_parser<Depth-1, our_left_t>::left_t left_t;
+ typedef typename chain_parser<Depth-1, our_left_t>::right_t right_t;
+
+ static left_t
+ left(CaseT const &p)
+ { return chain_parser<Depth-1, our_left_t>::left(p.left()); }
+
+ static right_t
+ right(CaseT const &p)
+ { return chain_parser<Depth-1, our_left_t>::right(p.left()); }
+};
+
+template <typename CaseT>
+struct chain_parser<1, CaseT> {
+
+ typedef typename CaseT::left_t left_t;
+ typedef typename CaseT::right_t right_t;
+
+ static left_t left(CaseT const &p) { return p.left(); }
+ static right_t right(CaseT const &p) { return p.right(); }
+};
+
+template <typename CaseT>
+struct chain_parser<0, CaseT>; // shouldn't be instantiated
+
+///////////////////////////////////////////////////////////////////////////////
+// Type computing meta function for calculating the type of the return value
+// of the used conditional switch expression
+template <typename TargetT, typename ScannerT>
+struct condition_result {
+
+ typedef typename TargetT::template result<ScannerT>::type type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+template <typename LeftT, typename RightT, bool IsDefault>
+struct compound_case_parser
+: public binary<LeftT, RightT,
+ parser<compound_case_parser<LeftT, RightT, IsDefault> > >
+{
+ typedef compound_case_parser<LeftT, RightT, IsDefault> self_t;
+ typedef binary_parser_category parser_category_t;
+ typedef binary<LeftT, RightT, parser<self_t> > base_t;
+
+ BOOST_STATIC_CONSTANT(int, value = RightT::value);
+ BOOST_STATIC_CONSTANT(bool, is_default = IsDefault);
+ BOOST_STATIC_CONSTANT(bool, is_simple = false);
+ BOOST_STATIC_CONSTANT(bool, is_epsilon = (
+ is_default &&
+ boost::is_same<typename RightT::subject_t, epsilon_parser>::value
+ ));
+
+ compound_case_parser(parser<LeftT> const &lhs, parser<RightT> const &rhs)
+ : base_t(lhs.derived(), rhs.derived())
+ {}
+
+ template <typename ScannerT>
+ struct result
+ {
+ typedef typename match_result<ScannerT, nil_t>::type type;
+ };
+
+ template <typename ScannerT, typename CondT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan, CondT const &cond) const;
+
+ template <int N1, typename ParserT1, bool IsDefault1>
+ compound_case_parser<
+ self_t, case_parser<N1, ParserT1, IsDefault1>, IsDefault1
+ >
+ operator, (case_parser<N1, ParserT1, IsDefault1> const &p) const
+ {
+ // If the following compile time assertion fires, you've probably used
+ // more than one default_p case inside the switch_p parser construct.
+ BOOST_STATIC_ASSERT(!default_case<self_t>::value || !IsDefault1);
+
+ // If this compile time assertion fires, you've probably want to use
+ // more case_p/default_p case branches, than possible.
+ BOOST_STATIC_ASSERT(
+ case_chain<self_t>::depth < BOOST_SPIRIT_SWITCH_CASE_LIMIT
+ );
+
+ typedef case_parser<N1, ParserT1, IsDefault1> right_t;
+ return compound_case_parser<self_t, right_t, IsDefault1>(*this, p);
+ }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// The parse_switch::do_ functions dispatch to the correct parser, which is
+// selected through the given conditional switch value.
+template <int Value, int Depth, bool IsDefault>
+struct parse_switch;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// The following generates a couple of parse_switch template specializations
+// with an increasing number of handled case branches (for 1..N).
+//
+// template <int Value, bool IsDefault>
+// struct parse_switch<Value, N, IsDefault> {
+//
+// template <typename ParserT, typename ScannerT>
+// static typename parser_result<ParserT, ScannerT>::type
+// do_(ParserT const &p, ScannerT const &scan, long cond_value,
+// typename ScannerT::iterator_t const &save)
+// {
+// typedef ParserT left_t0;
+// typedef typename left_t0::left left_t1;
+// ...
+//
+// switch (cond_value) {
+// case left_tN::value:
+// return delegate_parse(chain_parser<
+// case_chain<ParserT>::depth, ParserT
+// >::left(p), scan, save);
+// ...
+// case left_t1::value:
+// return delegate_parse(chain_parser<
+// 1, left_t1
+// >::right(p.left()), scan, save);
+//
+// case left_t0::value:
+// default:
+// typedef default_case<ParserT> default_t;
+// typedef default_delegate_parse<
+// Value, IsDefault, default_t::value>
+// default_parse_t;
+//
+// return default_parse_t::parse(cond_value, p.right(),
+// default_t::get(p), scan, save);
+// }
+// }
+// };
+//
+///////////////////////////////////////////////////////////////////////////////
+#define BOOST_SPIRIT_PARSE_SWITCH_TYPEDEFS(z, N, _) \
+ typedef typename BOOST_PP_CAT(left_t, N)::left_t \
+ BOOST_PP_CAT(left_t, BOOST_PP_INC(N)); \
+ /**/
+
+#define BOOST_SPIRIT_PARSE_SWITCH_CASES(z, N, _) \
+ case (long)(BOOST_PP_CAT(left_t, N)::value): \
+ return delegate_parse(chain_parser<N, left_t1>::right(p.left()), \
+ scan, save); \
+ /**/
+
+#define BOOST_SPIRIT_PARSE_SWITCHES(z, N, _) \
+ template <int Value, bool IsDefault> \
+ struct parse_switch<Value, BOOST_PP_INC(N), IsDefault> { \
+ \
+ template <typename ParserT, typename ScannerT> \
+ static typename parser_result<ParserT, ScannerT>::type \
+ do_(ParserT const &p, ScannerT const &scan, long cond_value, \
+ typename ScannerT::iterator_t const &save) \
+ { \
+ typedef ParserT left_t0; \
+ BOOST_PP_REPEAT_FROM_TO_ ## z(0, BOOST_PP_INC(N), \
+ BOOST_SPIRIT_PARSE_SWITCH_TYPEDEFS, _) \
+ \
+ switch (cond_value) { \
+ case (long)(BOOST_PP_CAT(left_t, BOOST_PP_INC(N))::value): \
+ return delegate_parse( \
+ chain_parser< \
+ case_chain<ParserT>::depth, ParserT \
+ >::left(p), scan, save); \
+ \
+ BOOST_PP_REPEAT_FROM_TO_ ## z(1, BOOST_PP_INC(N), \
+ BOOST_SPIRIT_PARSE_SWITCH_CASES, _) \
+ \
+ case (long)(left_t0::value): \
+ default: \
+ typedef default_case<ParserT> default_t; \
+ typedef \
+ default_delegate_parse<Value, IsDefault, default_t::value> \
+ default_parse_t; \
+ \
+ return default_parse_t::parse(cond_value, p.right(), \
+ default_t::get(p), scan, save); \
+ } \
+ } \
+ }; \
+ /**/
+
+BOOST_PP_REPEAT(BOOST_PP_DEC(BOOST_SPIRIT_SWITCH_CASE_LIMIT),
+ BOOST_SPIRIT_PARSE_SWITCHES, _)
+
+#undef BOOST_SPIRIT_PARSE_SWITCH_TYPEDEFS
+#undef BOOST_SPIRIT_PARSE_SWITCH_CASES
+#undef BOOST_SPIRIT_PARSE_SWITCHES
+///////////////////////////////////////////////////////////////////////////////
+
+template <typename LeftT, typename RightT, bool IsDefault>
+template <typename ScannerT, typename CondT>
+inline typename parser_result<
+ compound_case_parser<LeftT, RightT, IsDefault>, ScannerT
+>::type
+compound_case_parser<LeftT, RightT, IsDefault>::
+ parse(ScannerT const& scan, CondT const &cond) const
+{
+ scan.at_end(); // allow skipper to take effect
+ return parse_switch<value, case_chain<self_t>::depth, is_default>::
+ do_(*this, scan, cond(scan), scan.first);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// The switch condition is to be evaluated from a parser result value.
+template <typename ParserT>
+struct cond_functor {
+
+ typedef cond_functor<ParserT> self_t;
+
+ cond_functor(ParserT const &p_)
+ : p(p_)
+ {}
+
+ template <typename ScannerT>
+ struct result
+ {
+ typedef typename parser_result<ParserT, ScannerT>::type::attr_t type;
+ };
+
+ template <typename ScannerT>
+ typename condition_result<self_t, ScannerT>::type
+ operator()(ScannerT const &scan) const
+ {
+ typedef typename parser_result<ParserT, ScannerT>::type result_t;
+ typedef typename result_t::attr_t attr_t;
+
+ result_t result(p.parse(scan));
+ return !result ? attr_t() : result.value();
+ }
+
+ typename ParserT::embed_t p;
+};
+
+template <typename ParserT>
+struct make_cond_functor {
+
+ typedef as_parser<ParserT> as_parser_t;
+
+ static cond_functor<typename as_parser_t::type>
+ do_(ParserT const &cond)
+ {
+ return cond_functor<typename as_parser_t::type>(
+ as_parser_t::convert(cond));
+ }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// The switch condition is to be evaluated from a phoenix actor
+template <typename ActorT>
+struct cond_actor {
+
+ typedef cond_actor<ActorT> self_t;
+
+ cond_actor(ActorT const &actor_)
+ : actor(actor_)
+ {}
+
+ template <typename ScannerT>
+ struct result
+ {
+ typedef typename phoenix::actor_result<ActorT, phoenix::tuple<> >::type
+ type;
+ };
+
+ template <typename ScannerT>
+ typename condition_result<self_t, ScannerT>::type
+ operator()(ScannerT const& /*scan*/) const
+ {
+ return actor();
+ }
+
+ ActorT const &actor;
+};
+
+template <typename ActorT>
+struct make_cond_functor<phoenix::actor<ActorT> > {
+
+ static cond_actor<phoenix::actor<ActorT> >
+ do_(phoenix::actor<ActorT> const &actor)
+ {
+ return cond_actor<phoenix::actor<ActorT> >(actor);
+ }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// The switch condition is to be taken directly from the input stream
+struct get_next_token_cond {
+
+ typedef get_next_token_cond self_t;
+
+ template <typename ScannerT>
+ struct result
+ {
+ typedef typename ScannerT::value_t type;
+ };
+
+ template <typename ScannerT>
+ typename condition_result<self_t, ScannerT>::type
+ operator()(ScannerT const &scan) const
+ {
+ typename ScannerT::value_t val(*scan);
+ ++scan.first;
+ return val;
+ }
+};
+
+template <>
+struct make_cond_functor<get_next_token_cond> {
+
+ static get_next_token_cond
+ do_(get_next_token_cond const &cond)
+ {
+ return cond;
+ }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace impl
+}} // namespace boost::spirit
+
+#endif // BOOST_SPIRIT_SWITCH_IPP
diff --git a/boost/boost/spirit/dynamic/lazy.hpp b/boost/boost/spirit/dynamic/lazy.hpp
new file mode 100644
index 00000000000..e6d64ba61ee
--- /dev/null
+++ b/boost/boost/spirit/dynamic/lazy.hpp
@@ -0,0 +1,62 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+ Copyright (c) 2003 Vaclav Vesely
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_LAZY_HPP
+#define BOOST_SPIRIT_LAZY_HPP
+
+////////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/core/parser.hpp>
+#include <boost/spirit/phoenix/actor.hpp>
+
+////////////////////////////////////////////////////////////////////////////////
+
+namespace boost { namespace spirit
+{
+ ////////////////////////////////////////////////////////////////////////////
+ //
+ // lazy_parser, holds phoenix actor which returns a spirit parser.
+ //
+ ////////////////////////////////////////////////////////////////////////////
+
+ template<class ActorT>
+ struct lazy_parser : parser<lazy_parser<ActorT> >
+ {
+ typedef lazy_parser<ActorT> self_t;
+ typedef typename phoenix::actor_result<
+ ActorT, phoenix::tuple<> >::plain_type actor_result_t;
+
+ template<typename ScannerT>
+ struct result
+ {
+ typedef typename
+ parser_result<actor_result_t, ScannerT>::type
+ type;
+ };
+
+ lazy_parser(ActorT const& actor_)
+ : actor(actor_) {}
+
+ template<typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ { return actor().parse(scan); }
+
+ ActorT actor;
+ };
+
+ //////////////////////////////
+ // lazy_p, returns lazy_parser
+ // Usage: lazy_p(actor)
+ template<class ActorT>
+ lazy_parser<ActorT> lazy_p(ActorT const& actor)
+ { return lazy_parser<ActorT>(actor); }
+
+}} // namespace boost::spirit
+
+#endif // BOOST_SPIRIT_LAZY_HPP
diff --git a/boost/boost/spirit/dynamic/rule_alias.hpp b/boost/boost/spirit/dynamic/rule_alias.hpp
new file mode 100644
index 00000000000..7a15a1f9e79
--- /dev/null
+++ b/boost/boost/spirit/dynamic/rule_alias.hpp
@@ -0,0 +1,72 @@
+/*=============================================================================
+ Copyright (c) 1998-2003 Joel de Guzman
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_RULE_ALIAS_HPP)
+#define BOOST_SPIRIT_RULE_ALIAS_HPP
+
+#include <boost/spirit/core/parser.hpp>
+
+namespace boost { namespace spirit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // rule_alias class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename ParserT>
+ class rule_alias :
+ public parser<rule_alias<ParserT> >
+ {
+ public:
+
+ typedef rule_alias<ParserT> self_t;
+
+ template <typename ScannerT>
+ struct result
+ {
+ typedef typename parser_result<ParserT, ScannerT>::type type;
+ };
+
+ rule_alias()
+ : ptr(0) {}
+
+ rule_alias(ParserT const& p)
+ : ptr(&p) {}
+
+ rule_alias&
+ operator=(ParserT const& p)
+ {
+ ptr = &p;
+ return *this;
+ }
+
+ template <typename ScannerT>
+ typename parser_result<ParserT, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ if (ptr)
+ return ptr->parse(scan);
+ else
+ return scan.no_match();
+ }
+
+ ParserT const&
+ get() const
+ {
+ assert(ptr != 0);
+ return *ptr;
+ }
+
+ private:
+
+ ParserT const* ptr; // hold it by pointer
+ };
+
+}} // namespace boost::spirit
+
+#endif
diff --git a/boost/boost/spirit/dynamic/select.hpp b/boost/boost/spirit/dynamic/select.hpp
new file mode 100644
index 00000000000..b54cefafac5
--- /dev/null
+++ b/boost/boost/spirit/dynamic/select.hpp
@@ -0,0 +1,237 @@
+/*=============================================================================
+ Copyright (c) 2003 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_SELECT_HPP
+#define BOOST_SPIRIT_SELECT_HPP
+
+#include <boost/preprocessor/repeat.hpp>
+#include <boost/preprocessor/enum.hpp>
+#include <boost/preprocessor/enum_params.hpp>
+#include <boost/preprocessor/enum_params_with_defaults.hpp>
+#include <boost/preprocessor/inc.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/facilities/intercept.hpp>
+
+#include <boost/spirit/core/parser.hpp>
+
+#include <boost/spirit/phoenix/tuples.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Spirit predefined maximum number of possible embedded select_p parsers.
+// It should NOT be greater than PHOENIX_LIMIT!
+//
+///////////////////////////////////////////////////////////////////////////////
+#if !defined(BOOST_SPIRIT_SELECT_LIMIT)
+#define BOOST_SPIRIT_SELECT_LIMIT PHOENIX_LIMIT
+#endif // !defined(BOOST_SPIRIT_SELECT_LIMIT)
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// ensure BOOST_SPIRIT_SELECT_LIMIT <= PHOENIX_LIMIT and
+// BOOST_SPIRIT_SELECT_LIMIT > 0
+// BOOST_SPIRIT_SELECT_LIMIT <= 15
+//
+// [Pushed this down a little to make CW happy with BOOST_STATIC_ASSERT]
+// [Otherwise, it complains: 'boost_static_assert_test_42' redefined]
+//
+///////////////////////////////////////////////////////////////////////////////
+BOOST_STATIC_ASSERT(BOOST_SPIRIT_SELECT_LIMIT <= PHOENIX_LIMIT);
+BOOST_STATIC_ASSERT(BOOST_SPIRIT_SELECT_LIMIT > 0);
+BOOST_STATIC_ASSERT(BOOST_SPIRIT_SELECT_LIMIT <= 15);
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Calculate the required amount of tuple members rounded up to the nearest
+// integer dividable by 3
+//
+///////////////////////////////////////////////////////////////////////////////
+#if BOOST_SPIRIT_SELECT_LIMIT > 12
+#define BOOST_SPIRIT_SELECT_LIMIT_A 15
+#elif BOOST_SPIRIT_SELECT_LIMIT > 9
+#define BOOST_SPIRIT_SELECT_LIMIT_A 12
+#elif BOOST_SPIRIT_SELECT_LIMIT > 6
+#define BOOST_SPIRIT_SELECT_LIMIT_A 9
+#elif BOOST_SPIRIT_SELECT_LIMIT > 3
+#define BOOST_SPIRIT_SELECT_LIMIT_A 6
+#else
+#define BOOST_SPIRIT_SELECT_LIMIT_A 3
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// The select_default_no_fail and select_default_fail structs are used to
+// distinguish two different behaviours for the select_parser in case that not
+// any of the given sub-parsers match.
+//
+// If the select_parser is used with the select_default_no_fail behaviour,
+// then in case of no matching sub-parser the whole select_parser returns an
+// empty match and the value -1.
+//
+// If the select_parser is used with the select_default_fail behaviour, then
+// in case of no matching sub-parser the whole select_parser fails to match at
+// all.
+//
+///////////////////////////////////////////////////////////////////////////////
+struct select_default_no_fail {};
+struct select_default_fail {};
+
+}} // namespace boost::spirit
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/dynamic/impl/select.ipp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+///////////////////////////////////////////////////////////////////////////////
+template <typename TupleT, typename BehaviourT, typename T>
+struct select_parser
+: public parser<select_parser<TupleT, BehaviourT, T> >
+{
+ typedef select_parser<TupleT, BehaviourT, T> self_t;
+
+ select_parser(TupleT const &t_)
+ : t(t_)
+ {}
+
+ template <typename ScannerT>
+ struct result
+ {
+ typedef typename match_result<ScannerT, T>::type type;
+ };
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ typedef typename parser_result<self_t, ScannerT>::type result_t;
+
+ if (!scan.at_end()) {
+ return impl::parse_tuple_element<
+ TupleT::length, result_t, TupleT, BehaviourT>::do_(t, scan);
+ }
+ return impl::select_match_gen<result_t, BehaviourT>::do_(scan);
+ }
+
+ TupleT const t;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+template <typename BehaviourT, typename T = int>
+struct select_parser_gen {
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // This generates different select_parser_gen::operator()() functions with
+ // an increasing number of parser parameters:
+ //
+ // template <typename ParserT0, ...>
+ // select_parser<
+ // phoenix::tuple<
+ // typename impl::as_embedded_parser<ParserT0>::type,
+ // ...
+ // >,
+ // BehaviourT,
+ // T
+ // >
+ // operator()(ParserT0 const &p0, ...) const
+ // {
+ // typedef impl::as_embedded_parser<ParserT0> parser_t0;
+ // ...
+ //
+ // typedef phoenix::tuple<
+ // parser_t0::type,
+ // ...
+ // > tuple_t;
+ // typedef select_parser<tuple_t, BehaviourT, T> result_t;
+ //
+ // return result_t(tuple_t(
+ // parser_t0::convert(p0),
+ // ...
+ // ));
+ // }
+ //
+ // The number of generated functions depends on the maximum tuple member
+ // limit defined by the PHOENIX_LIMIT pp constant.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ #define BOOST_SPIRIT_SELECT_EMBEDDED(z, N, _) \
+ typename impl::as_embedded_parser<BOOST_PP_CAT(ParserT, N)>::type \
+ /**/
+ #define BOOST_SPIRIT_SELECT_EMBEDDED_TYPEDEF(z, N, _) \
+ typedef impl::as_embedded_parser<BOOST_PP_CAT(ParserT, N)> \
+ BOOST_PP_CAT(parser_t, N); \
+ /**/
+ #define BOOST_SPIRIT_SELECT_CONVERT(z, N, _) \
+ BOOST_PP_CAT(parser_t, N)::convert(BOOST_PP_CAT(p, N)) \
+ /**/
+
+ #define BOOST_SPIRIT_SELECT_PARSER(z, N, _) \
+ template < \
+ BOOST_PP_ENUM_PARAMS_Z(z, BOOST_PP_INC(N), typename ParserT) \
+ > \
+ select_parser< \
+ phoenix::tuple< \
+ BOOST_PP_ENUM_ ## z(BOOST_PP_INC(N), \
+ BOOST_SPIRIT_SELECT_EMBEDDED, _) \
+ >, \
+ BehaviourT, \
+ T \
+ > \
+ operator()( \
+ BOOST_PP_ENUM_BINARY_PARAMS_Z(z, BOOST_PP_INC(N), \
+ ParserT, const &p) \
+ ) const \
+ { \
+ BOOST_PP_REPEAT_ ## z(BOOST_PP_INC(N), \
+ BOOST_SPIRIT_SELECT_EMBEDDED_TYPEDEF, _) \
+ \
+ typedef phoenix::tuple< \
+ BOOST_PP_ENUM_BINARY_PARAMS_Z(z, BOOST_PP_INC(N), \
+ typename parser_t, ::type BOOST_PP_INTERCEPT) \
+ > tuple_t; \
+ typedef select_parser<tuple_t, BehaviourT, T> result_t; \
+ \
+ return result_t(tuple_t( \
+ BOOST_PP_ENUM_ ## z(BOOST_PP_INC(N), \
+ BOOST_SPIRIT_SELECT_CONVERT, _) \
+ )); \
+ } \
+ /**/
+
+ BOOST_PP_REPEAT(BOOST_SPIRIT_SELECT_LIMIT_A,
+ BOOST_SPIRIT_SELECT_PARSER, _)
+
+ #undef BOOST_SPIRIT_SELECT_PARSER
+ #undef BOOST_SPIRIT_SELECT_CONVERT
+ #undef BOOST_SPIRIT_SELECT_EMBEDDED_TYPEDEF
+ #undef BOOST_SPIRIT_SELECT_EMBEDDED
+ ///////////////////////////////////////////////////////////////////////////
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Predefined parser generator helper objects
+//
+///////////////////////////////////////////////////////////////////////////////
+select_parser_gen<select_default_no_fail> const select_p =
+ select_parser_gen<select_default_no_fail>();
+
+select_parser_gen<select_default_fail> const select_fail_p =
+ select_parser_gen<select_default_fail>();
+
+#undef BOOST_SPIRIT_SELECT_LIMIT_A
+
+///////////////////////////////////////////////////////////////////////////////
+}} // namespace boost::spirit
+
+#endif // BOOST_SPIRIT_SELECT_HPP
diff --git a/boost/boost/spirit/dynamic/stored_rule.hpp b/boost/boost/spirit/dynamic/stored_rule.hpp
new file mode 100644
index 00000000000..d939d68bec6
--- /dev/null
+++ b/boost/boost/spirit/dynamic/stored_rule.hpp
@@ -0,0 +1,123 @@
+/*=============================================================================
+ Copyright (c) 1998-2003 Joel de Guzman
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_STORED_RULE_HPP)
+#define BOOST_SPIRIT_STORED_RULE_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/core/non_terminal/impl/rule.ipp>
+#include <boost/spirit/dynamic/rule_alias.hpp>
+#include <boost/shared_ptr.hpp>
+
+#include <boost/spirit/dynamic/stored_rule_fwd.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // stored_rule class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <
+ typename T0
+ , typename T1
+ , typename T2
+ , bool EmbedByValue
+ >
+ class stored_rule
+ : public impl::rule_base<
+ stored_rule<T0, T1, T2, EmbedByValue>
+ , typename mpl::if_c<
+ EmbedByValue
+ , stored_rule<T0, T1, T2, true>
+ , stored_rule<T0, T1, T2> const&>::type
+ , T0, T1, T2>
+ {
+ public:
+
+ typedef stored_rule<T0, T1, T2, EmbedByValue> self_t;
+ typedef impl::rule_base<
+ self_t
+ , typename mpl::if_c<
+ EmbedByValue
+ , stored_rule<T0, T1, T2, true>
+ , self_t const&>::type
+ , T0, T1, T2>
+ base_t;
+
+ typedef typename base_t::scanner_t scanner_t;
+ typedef typename base_t::attr_t attr_t;
+ typedef impl::abstract_parser<scanner_t, attr_t> abstract_parser_t;
+ typedef rule_alias<self_t> alias_t;
+
+ stored_rule() : ptr() {}
+ ~stored_rule() {}
+
+ stored_rule(stored_rule const& r)
+ : ptr(r.ptr) {}
+
+ template <typename ParserT>
+ stored_rule(ParserT const& p)
+ : ptr(new impl::concrete_parser<ParserT, scanner_t, attr_t>(p)) {}
+
+ template <typename ParserT>
+ stored_rule& operator=(ParserT const& p)
+ {
+ ptr.reset(new impl::concrete_parser<ParserT, scanner_t, attr_t>(p));
+ return *this;
+ }
+
+ stored_rule& operator=(stored_rule const& r)
+ {
+ // If this is placed above the templatized assignment
+ // operator, VC6 incorrectly complains ambiguity with
+ // r1 = r2, where r1 and r2 are both rules.
+ ptr = r.ptr;
+ return *this;
+ }
+
+ stored_rule<T0, T1, T2, true>
+ copy() const
+ {
+ return stored_rule<T0, T1, T2, true>(ptr);
+ }
+
+ alias_t
+ alias() const
+ {
+ return alias_t(*this);
+ }
+
+ private:
+
+ friend class impl::rule_base_access;
+ friend class stored_rule<T0, T1, T2, !EmbedByValue>;
+
+#if defined(__GNUC__) && (__GNUC__ < 3)
+ public:
+#endif
+ abstract_parser_t*
+ get() const
+ {
+ return ptr.get();
+ }
+#if defined(__GNUC__) && (__GNUC__ < 3)
+ private:
+#endif
+
+ stored_rule(shared_ptr<abstract_parser_t> const& ptr)
+ : ptr(ptr) {}
+
+ shared_ptr<abstract_parser_t> ptr;
+ };
+
+///////////////////////////////////////////////////////////////////////////////
+}} // namespace boost::spirit
+
+#endif
diff --git a/boost/boost/spirit/dynamic/stored_rule_fwd.hpp b/boost/boost/spirit/dynamic/stored_rule_fwd.hpp
new file mode 100644
index 00000000000..bda5bc768b3
--- /dev/null
+++ b/boost/boost/spirit/dynamic/stored_rule_fwd.hpp
@@ -0,0 +1,27 @@
+/*=============================================================================
+ Copyright (c) 2006 Tobias Schwinger
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_STORED_RULE_FWD_HPP)
+#define BOOST_SPIRIT_STORED_RULE_FWD_HPP
+
+#include <boost/spirit/core/nil.hpp>
+
+namespace boost { namespace spirit {
+
+ template <
+ typename T0 = nil_t
+ , typename T1 = nil_t
+ , typename T2 = nil_t
+ , bool EmbedByValue = false
+ >
+ class stored_rule;
+
+}} // namespace boost::spirit
+
+#endif
+
diff --git a/boost/boost/spirit/dynamic/switch.hpp b/boost/boost/spirit/dynamic/switch.hpp
new file mode 100644
index 00000000000..3395a9305e4
--- /dev/null
+++ b/boost/boost/spirit/dynamic/switch.hpp
@@ -0,0 +1,255 @@
+/*=============================================================================
+ Copyright (c) 2003 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_SWITCH_HPP
+#define BOOST_SPIRIT_SWITCH_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// The default_p parser generator template uses the following magic number
+// as the corresponding case label value inside the generated switch()
+// statements. If this number conflicts with your code, please pick a
+// different one.
+//
+///////////////////////////////////////////////////////////////////////////////
+#if !defined(BOOST_SPIRIT_DEFAULTCASE_MAGIC)
+#define BOOST_SPIRIT_DEFAULTCASE_MAGIC 0x15F97A7
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Spirit predefined maximum number of possible case_p/default_p case branch
+// parsers.
+//
+///////////////////////////////////////////////////////////////////////////////
+#if !defined(BOOST_SPIRIT_SWITCH_CASE_LIMIT)
+#define BOOST_SPIRIT_SWITCH_CASE_LIMIT 3
+#endif // !defined(BOOST_SPIRIT_SWITCH_CASE_LIMIT)
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/static_assert.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Ensure BOOST_SPIRIT_SELECT_LIMIT > 0
+//
+///////////////////////////////////////////////////////////////////////////////
+BOOST_STATIC_ASSERT(BOOST_SPIRIT_SWITCH_CASE_LIMIT > 0);
+
+#include <boost/spirit/core/config.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/spirit/core/parser.hpp>
+#include <boost/spirit/core/composite/epsilon.hpp>
+#include <boost/spirit/dynamic/impl/switch.ipp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// The switch_parser allows to build switch like parsing constructs, which
+// will have much better perfomance as comparable straight solutions.
+//
+// Input stream driven syntax:
+//
+// switch_p
+// [
+// case_p<'a'>
+// (...parser to use, if the next character is 'a'...),
+// case_p<'b'>
+// (...parser to use, if the next character is 'b'...),
+// default_p
+// (...parser to use, if nothing was matched before...)
+// ]
+//
+// General syntax:
+//
+// switch_p(...lazy expression returning the switch condition value...)
+// [
+// case_p<1>
+// (...parser to use, if the switch condition value is 1...),
+// case_p<2>
+// (...parser to use, if the switch condition value is 2...),
+// default_p
+// (...parser to use, if nothing was matched before...)
+// ]
+//
+// The maximum number of possible case_p branches is defined by the p constant
+// BOOST_SPIRIT_SWITCH_CASE_LIMIT (this value defaults to 3 if not otherwise
+// defined).
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename CaseT, typename CondT = impl::get_next_token_cond>
+struct switch_parser
+: public unary<CaseT, parser<switch_parser<CaseT, CondT> > >
+{
+ typedef switch_parser<CaseT, CondT> self_t;
+ typedef unary_parser_category parser_category_t;
+ typedef unary<CaseT, parser<self_t> > base_t;
+
+ switch_parser(CaseT const &case_)
+ : base_t(case_), cond(CondT())
+ {}
+
+ switch_parser(CaseT const &case_, CondT const &cond_)
+ : base_t(case_), cond(cond_)
+ {}
+
+ template <typename ScannerT>
+ struct result
+ {
+ typedef typename match_result<ScannerT, nil_t>::type type;
+ };
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ return this->subject().parse(scan,
+ impl::make_cond_functor<CondT>::do_(cond));
+ }
+
+ CondT cond;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+template <typename CondT>
+struct switch_cond_parser
+{
+ switch_cond_parser(CondT const &cond_)
+ : cond(cond_)
+ {}
+
+ template <typename ParserT>
+ switch_parser<ParserT, CondT>
+ operator[](parser<ParserT> const &p) const
+ {
+ return switch_parser<ParserT, CondT>(p.derived(), cond);
+ }
+
+ CondT const &cond;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+template <int N, typename ParserT, bool IsDefault>
+struct case_parser
+: public unary<ParserT, parser<case_parser<N, ParserT, IsDefault> > >
+{
+ typedef case_parser<N, ParserT, IsDefault> self_t;
+ typedef unary_parser_category parser_category_t;
+ typedef unary<ParserT, parser<self_t> > base_t;
+
+ typedef typename base_t::subject_t self_subject_t;
+
+ BOOST_STATIC_CONSTANT(int, value = N);
+ BOOST_STATIC_CONSTANT(bool, is_default = IsDefault);
+ BOOST_STATIC_CONSTANT(bool, is_simple = true);
+ BOOST_STATIC_CONSTANT(bool, is_epsilon = (
+ is_default && boost::is_same<self_subject_t, epsilon_parser>::value
+ ));
+
+ case_parser(parser<ParserT> const &p)
+ : base_t(p.derived())
+ {}
+
+ template <typename ScannerT>
+ struct result
+ {
+ typedef typename match_result<ScannerT, nil_t>::type type;
+ };
+
+ template <typename ScannerT, typename CondT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan, CondT const &cond) const
+ {
+ typedef impl::default_case<self_t> default_t;
+
+ if (!scan.at_end()) {
+ typedef impl::default_delegate_parse<
+ value, is_default, default_t::value> default_parse_t;
+
+ typename ScannerT::iterator_t const save(scan.first);
+ return default_parse_t::parse(cond(scan), *this,
+ *this, scan, save);
+ }
+
+ return default_t::is_epsilon ? scan.empty_match() : scan.no_match();
+ }
+
+ template <int N1, typename ParserT1, bool IsDefault1>
+ impl::compound_case_parser<
+ self_t, case_parser<N1, ParserT1, IsDefault1>, IsDefault1
+ >
+ operator, (case_parser<N1, ParserT1, IsDefault1> const &p) const
+ {
+ // If the following compile time assertion fires, you've probably used
+ // more than one default_p case inside the switch_p parser construct.
+ BOOST_STATIC_ASSERT(!is_default || !IsDefault1);
+
+ typedef case_parser<N1, ParserT1, IsDefault1> right_t;
+ return impl::compound_case_parser<self_t, right_t, IsDefault1>(*this, p);
+ }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+struct switch_parser_gen {
+
+// This generates a switch parser, which is driven by the condition value
+// returned by the lazy parameter expression 'cond'. This may be a parser,
+// which result is used or a phoenix actor, which will be dereferenced to
+// obtain the switch condition value.
+ template <typename CondT>
+ switch_cond_parser<CondT>
+ operator()(CondT const &cond) const
+ {
+ return switch_cond_parser<CondT>(cond);
+ }
+
+// This generates a switch parser, which is driven by the next character/token
+// found in the input stream.
+ template <typename CaseT>
+ switch_parser<CaseT>
+ operator[](parser<CaseT> const &p) const
+ {
+ return switch_parser<CaseT>(p.derived());
+ }
+};
+
+switch_parser_gen const switch_p = switch_parser_gen();
+
+///////////////////////////////////////////////////////////////////////////////
+template <int N, typename ParserT>
+inline case_parser<N, ParserT, false>
+case_p(parser<ParserT> const &p)
+{
+ return case_parser<N, ParserT, false>(p);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+struct default_parser_gen
+: public case_parser<BOOST_SPIRIT_DEFAULTCASE_MAGIC, epsilon_parser, true>
+{
+ default_parser_gen()
+ : case_parser<BOOST_SPIRIT_DEFAULTCASE_MAGIC, epsilon_parser, true>
+ (epsilon_p)
+ {}
+
+ template <typename ParserT>
+ case_parser<BOOST_SPIRIT_DEFAULTCASE_MAGIC, ParserT, true>
+ operator()(parser<ParserT> const &p) const
+ {
+ return case_parser<BOOST_SPIRIT_DEFAULTCASE_MAGIC, ParserT, true>(p);
+ }
+};
+
+default_parser_gen const default_p = default_parser_gen();
+
+///////////////////////////////////////////////////////////////////////////////
+}} // namespace boost::spirit
+
+#endif // BOOST_SPIRIT_SWITCH_HPP
diff --git a/boost/boost/spirit/dynamic/typeof.hpp b/boost/boost/spirit/dynamic/typeof.hpp
new file mode 100644
index 00000000000..bb17eb951c9
--- /dev/null
+++ b/boost/boost/spirit/dynamic/typeof.hpp
@@ -0,0 +1,85 @@
+/*=============================================================================
+ Copyright (c) 2006 Tobias Schwinger
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_DYNAMIC_TYPEOF_HPP)
+#define BOOST_SPIRIT_DYNAMIC_TYPEOF_HPP
+
+#include <boost/typeof/typeof.hpp>
+
+#include <boost/spirit/core/typeof.hpp>
+
+#include <boost/spirit/dynamic/stored_rule_fwd.hpp>
+
+namespace boost { namespace spirit {
+
+ // if.hpp
+ template <class ParsableT, typename CondT> struct if_parser;
+ template <class ParsableTrueT, class ParsableFalseT, typename CondT>
+ struct if_else_parser;
+
+ // for.hpp
+ namespace impl {
+ template<typename InitF, typename CondT, typename StepF, class ParsableT>
+ struct for_parser;
+ }
+
+ // while.hpp
+ template<typename ParsableT, typename CondT, bool is_do_parser>
+ struct while_parser;
+
+ // lazy.hpp
+ template<typename ActorT> struct lazy_parser;
+
+ // rule_alias.hpp
+ template <typename ParserT> class rule_alias;
+
+ // switch.hpp
+ template <typename CaseT, typename CondT> struct switch_parser;
+ template <int N, class ParserT, bool IsDefault> struct case_parser;
+
+ // select.hpp
+ template <typename TupleT, typename BehaviourT, typename T>
+ struct select_parser;
+
+}} // namespace boost::spirit
+
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+// if.hpp
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::if_parser,2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::if_else_parser,3)
+
+// for.hpp
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::impl::for_parser,4)
+
+// while.hpp
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::while_parser,(class)(class)(bool))
+
+// lazy.hpp
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::lazy_parser,1)
+
+// stored_rule.hpp (has forward header)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::stored_rule,(typename)(typename)(typename)(bool))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::stored_rule,3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::stored_rule,2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::stored_rule,1)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::stored_rule<>)
+
+// rule_alias.hpp
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::rule_alias,1)
+
+// switch.hpp
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::switch_parser,2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::case_parser,(int)(class)(bool))
+
+// select.hpp
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::select_parser,3)
+
+#endif
+
diff --git a/boost/boost/spirit/dynamic/while.hpp b/boost/boost/spirit/dynamic/while.hpp
new file mode 100644
index 00000000000..750d3787d82
--- /dev/null
+++ b/boost/boost/spirit/dynamic/while.hpp
@@ -0,0 +1,185 @@
+/*=============================================================================
+ Copyright (c) 2002-2003 Joel de Guzman
+ Copyright (c) 2002-2003 Martin Wille
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_WHILE_HPP
+#define BOOST_SPIRIT_WHILE_HPP
+
+#include <boost/spirit/core/parser.hpp>
+#include <boost/spirit/core/composite/composite.hpp>
+#include <boost/spirit/dynamic/impl/conditions.ipp>
+
+////////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+ namespace impl {
+
+ //////////////////////////////////
+ // while parser
+ // object are created by while_parser_gen and do_parser_gen
+ template <typename ParsableT, typename CondT, bool is_do_parser>
+ struct while_parser
+ : public condition_evaluator< typename as_parser<CondT>::type >
+ , public unary // the parent stores a copy of the body parser
+ <
+ typename as_parser<ParsableT>::type,
+ parser<while_parser<ParsableT, CondT, is_do_parser> >
+ >
+ {
+ typedef while_parser<ParsableT, CondT, is_do_parser> self_t;
+
+ typedef as_parser<ParsableT> as_parser_t;
+ typedef typename as_parser_t::type parser_t;
+ typedef as_parser<CondT> cond_as_parser_t;
+ typedef typename cond_as_parser_t::type condition_t;
+
+ typedef unary<parser_t, parser<self_t> > base_t;
+ typedef condition_evaluator<condition_t> eval_t;
+
+
+ //////////////////////////////
+ // constructor, saves condition and body parser
+ while_parser(ParsableT const &body, CondT const &cond)
+ : eval_t(cond_as_parser_t::convert(cond))
+ , base_t(as_parser_t::convert(body))
+ {}
+
+ //////////////////////////////
+ // result type computer.
+ template <typename ScannerT>
+ struct result
+ {
+ typedef typename match_result
+ <ScannerT, nil_t>::type type;
+ };
+
+ //////////////////////////////
+ // parse member function
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ typedef typename parser_result<parser_t, ScannerT>::type sresult_t;
+ typedef typename ScannerT::iterator_t iterator_t;
+
+ iterator_t save(scan.first);
+ std::size_t length = 0;
+ int eval_length = 0;
+
+ bool dont_check_condition = is_do_parser;
+
+ while (dont_check_condition || (eval_length=this->evaluate(scan))>=0)
+ {
+ dont_check_condition = false;
+ length += eval_length;
+ sresult_t tmp(this->subject().parse(scan));
+ if (tmp)
+ {
+ length+=tmp.length();
+ }
+ else
+ {
+ return scan.no_match();
+ }
+ }
+ return scan.create_match(length, nil_t(), save, scan.first);
+ }
+ };
+
+ //////////////////////////////////
+ // while-parser generator, takes the body-parser in brackets
+ // and returns the actual while-parser.
+ template <typename CondT>
+ struct while_parser_gen
+ {
+ //////////////////////////////
+ // constructor, saves the condition for use by operator[]
+ while_parser_gen(CondT const& cond_) : cond(cond_) {}
+
+ //////////////////////////////
+ // operator[] returns the actual while-parser object
+ template <typename ParsableT>
+ while_parser<ParsableT, CondT, false>
+ operator[](ParsableT const &subject) const
+ {
+ return while_parser<ParsableT, CondT, false>(subject, cond);
+ }
+ private:
+
+ //////////////////////////////
+ // the condition is stored by reference here.
+ // this should not cause any harm since object of type
+ // while_parser_gen<> are only used as temporaries
+ // the while-parser object constructed by the operator[]
+ // stores a copy of the condition.
+ CondT const &cond;
+ };
+
+ //////////////////////////////////
+ // do-while-parser generator, takes the condition as
+ // parameter to while_p member function and returns the
+ // actual do-while-parser.
+ template <typename ParsableT>
+ struct do_while_parser_gen
+ {
+ //////////////////////////////
+ // constructor. saves the body parser for use by while_p.
+ explicit do_while_parser_gen(ParsableT const &body_parser)
+ : body(body_parser)
+ {}
+
+ //////////////////////////////
+ // while_p returns the actual while-parser object
+ template <typename CondT>
+ while_parser<ParsableT, CondT, true>
+ while_p(CondT cond) const
+ {
+ return while_parser<ParsableT, CondT, true>(body, cond);
+ }
+ private:
+
+ //////////////////////////////
+ // the body is stored by reference here
+ // this should not cause any harm since object of type
+ // do_while_parser_gen<> are only used as temporaries
+ // the while-parser object constructed by the while_p
+ // member function stores a copy of the body parser.
+ ParsableT const &body;
+ };
+
+ struct do_parser_gen
+ {
+ inline do_parser_gen() {}
+
+ template <typename ParsableT>
+ impl::do_while_parser_gen<ParsableT>
+ operator[](ParsableT const& body) const
+ {
+ return impl::do_while_parser_gen<ParsableT>(body);
+ }
+ };
+} // namespace impl
+
+//////////////////////////////////
+// while_p function, while-parser generator
+// Usage: spirit::while_p(Condition)[Body]
+template <typename CondT>
+impl::while_parser_gen<CondT>
+while_p(CondT const& cond)
+{
+ return impl::while_parser_gen<CondT>(cond);
+}
+
+//////////////////////////////////
+// do_p functor, do-while-parser generator
+// Usage: spirit::do_p[Body].while_p(Condition)
+impl::do_parser_gen const do_p = impl::do_parser_gen();
+
+}} // namespace boost::spirit
+
+#endif // BOOST_SPIRIT_WHILE_HPP
diff --git a/boost/boost/spirit/error_handling.hpp b/boost/boost/spirit/error_handling.hpp
new file mode 100644
index 00000000000..3d94ca40b28
--- /dev/null
+++ b/boost/boost/spirit/error_handling.hpp
@@ -0,0 +1,22 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Joel de Guzman
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_ERROR_HANDLING_MAIN_HPP)
+#define BOOST_SPIRIT_ERROR_HANDLING_MAIN_HPP
+
+#include <boost/spirit/version.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Master header for Spirit.ErrorHandling
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#include <boost/spirit/error_handling/exceptions.hpp>
+
+#endif // !defined(BOOST_SPIRIT_ERROR_HANDLING_MAIN_HPP)
diff --git a/boost/boost/spirit/error_handling/exceptions.hpp b/boost/boost/spirit/error_handling/exceptions.hpp
new file mode 100644
index 00000000000..a848a0f2314
--- /dev/null
+++ b/boost/boost/spirit/error_handling/exceptions.hpp
@@ -0,0 +1,361 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Joel de Guzman
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_EXCEPTIONS_HPP
+#define BOOST_SPIRIT_EXCEPTIONS_HPP
+
+#include <boost/config.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/spirit/core/parser.hpp>
+#include <boost/spirit/core/composite/composite.hpp>
+#include <exception>
+
+#include <boost/spirit/error_handling/exceptions_fwd.hpp>
+
+namespace boost { namespace spirit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // parser_error_base class
+ //
+ // This is the base class of parser_error (see below). This may be
+ // used to catch any type of parser error.
+ //
+ // This exception shouldn't propagate outside the parser. However to
+ // avoid quirks of many platforms/implementations which fall outside
+ // the C++ standard, we derive parser_error_base from std::exception
+ // to allow a single catch handler to catch all exceptions.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ class parser_error_base : public std::exception
+ {
+ protected:
+
+ parser_error_base() {}
+ virtual ~parser_error_base() throw() {}
+
+ public:
+
+ parser_error_base(parser_error_base const& rhs)
+ : std::exception(rhs) {}
+ parser_error_base& operator=(parser_error_base const&)
+ {
+ return *this;
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // parser_error class
+ //
+ // Generic parser exception class. This is the base class for all
+ // parser exceptions. The exception holds the iterator position
+ // where the error was encountered in its member variable "where".
+ // The parser_error also holds information regarding the error
+ // (error descriptor) in its member variable "descriptor".
+ //
+ // The throw_ function creates and throws a parser_error given
+ // an iterator and an error descriptor.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename ErrorDescrT, typename IteratorT>
+ struct parser_error : public parser_error_base
+ {
+ typedef ErrorDescrT error_descr_t;
+ typedef IteratorT iterator_t;
+
+ parser_error(IteratorT where_, ErrorDescrT descriptor_)
+ : where(where_), descriptor(descriptor_) {}
+
+ parser_error(parser_error const& rhs)
+ : parser_error_base(rhs)
+ , where(rhs.where), descriptor(rhs.descriptor) {}
+
+ parser_error&
+ operator=(parser_error const& rhs)
+ {
+ where = rhs.where;
+ descriptor = rhs.descriptor;
+ return *this;
+ }
+
+ virtual
+ ~parser_error() throw() {}
+
+ virtual const char*
+ what() const throw()
+ {
+ return "boost::spirit::parser_error";
+ }
+
+ IteratorT where;
+ ErrorDescrT descriptor;
+ };
+
+ //////////////////////////////////
+ template <typename ErrorDescrT, typename IteratorT>
+ inline void
+ throw_(IteratorT where, ErrorDescrT descriptor)
+ {
+ boost::throw_exception(
+ parser_error<ErrorDescrT, IteratorT>(where, descriptor));
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // assertive_parser class
+ //
+ // An assertive_parser class is a parser that throws an exception
+ // in response to a parsing failure. The assertive_parser throws a
+ // parser_error exception rather than returning an unsuccessful
+ // match to signal that the parser failed to match the input.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename ErrorDescrT, typename ParserT>
+ struct assertive_parser
+ : public unary<ParserT, parser<assertive_parser<ErrorDescrT, ParserT> > >
+ {
+ typedef assertive_parser<ErrorDescrT, ParserT> self_t;
+ typedef unary<ParserT, parser<self_t> > base_t;
+ typedef unary_parser_category parser_category_t;
+
+ assertive_parser(ParserT const& parser, ErrorDescrT descriptor)
+ : base_t(parser), descriptor(descriptor) {}
+
+ template <typename ScannerT>
+ struct result
+ {
+ typedef typename parser_result<ParserT, ScannerT>::type type;
+ };
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ typedef typename parser_result<ParserT, ScannerT>::type result_t;
+ typedef typename ScannerT::iterator_t iterator_t;
+
+ result_t hit = this->subject().parse(scan);
+ if (!hit)
+ {
+ throw_(scan.first, descriptor);
+ }
+ return hit;
+ }
+
+ ErrorDescrT descriptor;
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // assertion class
+ //
+ // assertive_parsers are never instantiated directly. The assertion
+ // class is used to indirectly create an assertive_parser object.
+ // Before declaring the grammar, we declare some assertion objects.
+ // Examples:
+ //
+ // enum Errors
+ // {
+ // program_expected, begin_expected, end_expected
+ // };
+ //
+ // assertion<Errors> expect_program(program_expected);
+ // assertion<Errors> expect_begin(begin_expected);
+ // assertion<Errors> expect_end(end_expected);
+ //
+ // Now, we can use these assertions as wrappers around parsers:
+ //
+ // expect_end(str_p("end"))
+ //
+ // Take note that although the example uses enums to hold the
+ // information regarding the error (error desccriptor), we are free
+ // to use other types such as integers and strings. Enums are
+ // convenient for error handlers to easily catch since C++ treats
+ // enums as unique types.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename ErrorDescrT>
+ struct assertion
+ {
+ assertion(ErrorDescrT descriptor_)
+ : descriptor(descriptor_) {}
+
+ template <typename ParserT>
+ assertive_parser<ErrorDescrT, ParserT>
+ operator()(ParserT const& parser) const
+ {
+ return assertive_parser<ErrorDescrT, ParserT>(parser, descriptor);
+ }
+
+ ErrorDescrT descriptor;
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // error_status<T>
+ //
+ // Where T is an attribute type compatible with the match attribute
+ // of the fallback_parser's subject (defaults to nil_t). The class
+ // error_status reports the result of an error handler (see
+ // fallback_parser). result can be one of:
+ //
+ // fail: quit and fail (return a no_match)
+ // retry: attempt error recovery, possibly moving the scanner
+ // accept: force success returning a matching length, moving
+ // the scanner appropriately and returning an attribute
+ // value
+ // rethrow: rethrows the error.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename T>
+ struct error_status
+ {
+ enum result_t { fail, retry, accept, rethrow };
+
+ error_status(
+ result_t result_ = fail,
+ std::ptrdiff_t length = -1,
+ T const& value_ = T())
+ : result(result_), length(length), value(value_) {}
+
+ result_t result;
+ std::ptrdiff_t length;
+ T value;
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // fallback_parser class
+ //
+ // Handles exceptions of type parser_error<ErrorDescrT, IteratorT>
+ // thrown somewhere inside its embedded ParserT object. The class
+ // sets up a try block before delegating parsing to its subject.
+ // When an exception is caught, the catch block then calls the
+ // HandlerT object. HandlerT may be a function or a functor (with
+ // an operator() member function) compatible with the interface:
+ //
+ // error_status<T>
+ // handler(ScannerT const& scan, ErrorT error);
+ //
+ // Where scan points to the scanner state prior to parsing and error
+ // is the error that arose (see parser_error). The handler must
+ // return an error_status<T> object (see above).
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ namespace impl
+ {
+ template <typename RT, typename ParserT, typename ScannerT>
+ RT fallback_parser_parse(ParserT const& p, ScannerT const& scan);
+ }
+
+ template <typename ErrorDescrT, typename ParserT, typename HandlerT>
+ struct fallback_parser
+ : public unary<ParserT,
+ parser<fallback_parser<ErrorDescrT, ParserT, HandlerT> > >
+ {
+ typedef fallback_parser<ErrorDescrT, ParserT, HandlerT>
+ self_t;
+ typedef ErrorDescrT
+ error_descr_t;
+ typedef unary<ParserT, parser<self_t> >
+ base_t;
+ typedef unary_parser_category
+ parser_category_t;
+
+ fallback_parser(ParserT const& parser, HandlerT const& handler_)
+ : base_t(parser), handler(handler_) {}
+
+ template <typename ScannerT>
+ struct result
+ {
+ typedef typename parser_result<ParserT, ScannerT>::type type;
+ };
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ typedef typename parser_result<self_t, ScannerT>::type result_t;
+ return impl::fallback_parser_parse<result_t>(*this, scan);
+ }
+
+ HandlerT handler;
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // guard class
+ //
+ // fallback_parser objects are not instantiated directly. The guard
+ // class is used to indirectly create a fallback_parser object.
+ // guards are typically predeclared just like assertions (see the
+ // assertion class above; the example extends the previous example
+ // introduced in the assertion class above):
+ //
+ // guard<Errors> my_guard;
+ //
+ // Errors, in this example is the error descriptor type we want to
+ // detect; This is essentially the ErrorDescrT template parameter
+ // of the fallback_parser class.
+ //
+ // my_guard may now be used in a grammar declaration as:
+ //
+ // my_guard(p)[h]
+ //
+ // where p is a parser, h is a function or functor compatible with
+ // fallback_parser's HandlerT (see above).
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename ErrorDescrT, typename ParserT>
+ struct guard_gen : public unary<ParserT, nil_t>
+ {
+ typedef guard<ErrorDescrT> parser_generator_t;
+ typedef unary_parser_category parser_category_t;
+
+ guard_gen(ParserT const& p)
+ : unary<ParserT, nil_t>(p) {}
+
+ template <typename HandlerT>
+ fallback_parser<ErrorDescrT, ParserT, HandlerT>
+ operator[](HandlerT const& handler) const
+ {
+ return fallback_parser<ErrorDescrT, ParserT, HandlerT>
+ (this->subject(), handler);
+ }
+ };
+
+ template <typename ErrorDescrT>
+ struct guard
+ {
+ template <typename ParserT>
+ struct result
+ {
+ typedef guard_gen<ErrorDescrT, ParserT> type;
+ };
+
+ template <typename ParserT>
+ static guard_gen<ErrorDescrT, ParserT>
+ generate(ParserT const& parser)
+ {
+ return guard_gen<ErrorDescrT, ParserT>(parser);
+ }
+
+ template <typename ParserT>
+ guard_gen<ErrorDescrT, ParserT>
+ operator()(ParserT const& parser) const
+ {
+ return guard_gen<ErrorDescrT, ParserT>(parser);
+ }
+ };
+
+}} // namespace boost::spirit
+
+#include <boost/spirit/error_handling/impl/exceptions.ipp>
+#endif
+
diff --git a/boost/boost/spirit/error_handling/exceptions_fwd.hpp b/boost/boost/spirit/error_handling/exceptions_fwd.hpp
new file mode 100644
index 00000000000..fc3dc09d90a
--- /dev/null
+++ b/boost/boost/spirit/error_handling/exceptions_fwd.hpp
@@ -0,0 +1,37 @@
+/*=============================================================================
+ Copyright (c) 2006 Tobias Schwinger
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_EXCEPTIONS_FWD_HPP)
+#define BOOST_SPIRIT_EXCEPTIONS_FWD_HPP
+
+#include <boost/spirit/core/nil.hpp>
+
+namespace boost { namespace spirit {
+
+ template <typename ErrorDescrT, typename IteratorT = char const*>
+ struct parser_error;
+
+ template <typename ErrorDescrT, typename ParserT>
+ struct assertive_parser;
+
+ template <typename ErrorDescrT>
+ struct assertion;
+
+ template <typename T = nil_t>
+ struct error_status;
+
+ template <typename ErrorDescrT, typename ParserT, typename HandlerT>
+ struct fallback_parser;
+
+ template <typename ErrorDescrT>
+ struct guard;
+
+}} // namespace boost::spirit
+
+#endif
+
diff --git a/boost/boost/spirit/error_handling/impl/exceptions.ipp b/boost/boost/spirit/error_handling/impl/exceptions.ipp
new file mode 100644
index 00000000000..e1a871b0c9c
--- /dev/null
+++ b/boost/boost/spirit/error_handling/impl/exceptions.ipp
@@ -0,0 +1,85 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Joel de Guzman
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_EXCEPTIONS_IPP
+#define BOOST_SPIRIT_EXCEPTIONS_IPP
+
+namespace boost { namespace spirit { namespace impl {
+
+#ifdef __BORLANDC__
+ template <typename ParserT, typename ScannerT>
+ typename parser_result<ParserT, ScannerT>::type
+ fallback_parser_helper(ParserT const& subject, ScannerT const& scan);
+#endif
+
+ template <typename RT, typename ParserT, typename ScannerT>
+ RT fallback_parser_parse(ParserT const& p, ScannerT const& scan)
+ {
+ typedef typename ScannerT::iterator_t iterator_t;
+ typedef typename RT::attr_t attr_t;
+ typedef error_status<attr_t> error_status_t;
+ typedef typename ParserT::error_descr_t error_descr_t;
+
+ iterator_t save = scan.first;
+ error_status_t hr(error_status_t::retry);
+
+ while (hr.result == error_status_t::retry)
+ {
+ try
+ {
+ #ifndef __BORLANDC__
+ return p.subject().parse(scan);
+ #else
+ return impl::fallback_parser_helper(p, scan);
+ #endif
+ }
+
+ catch (parser_error<error_descr_t, iterator_t>& error)
+ {
+ scan.first = save;
+ hr = p.handler(scan, error);
+ switch (hr.result)
+ {
+ case error_status_t::fail:
+ return scan.no_match();
+ case error_status_t::accept:
+ return scan.create_match
+ (std::size_t(hr.length), hr.value, save, scan.first);
+ case error_status_t::rethrow:
+ boost::throw_exception(error);
+ default:
+ continue;
+ }
+ }
+ }
+ return scan.no_match();
+ }
+
+///////////////////////////////////////////////////////////////////////////
+//
+// Borland does not like calling the subject directly in the try block.
+// Removing the #ifdef __BORLANDC__ code makes Borland complain that
+// some variables and types cannot be found in the catch block. Weird!
+//
+///////////////////////////////////////////////////////////////////////////
+#ifdef __BORLANDC__
+
+ template <typename ParserT, typename ScannerT>
+ typename parser_result<ParserT, ScannerT>::type
+ fallback_parser_helper(ParserT const& p, ScannerT const& scan)
+ {
+ return p.subject().parse(scan);
+ }
+
+#endif
+
+}}} // namespace boost::spirit::impl
+
+///////////////////////////////////////////////////////////////////////////////
+#endif
+
diff --git a/boost/boost/spirit/error_handling/typeof.hpp b/boost/boost/spirit/error_handling/typeof.hpp
new file mode 100644
index 00000000000..8154401f738
--- /dev/null
+++ b/boost/boost/spirit/error_handling/typeof.hpp
@@ -0,0 +1,34 @@
+/*=============================================================================
+ Copyright (c) 2006 Tobias Schwinger
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_ERROR_HANDLING_TYPEOF_HPP)
+#define BOOST_SPIRIT_ERROR_HANDLING_TYPEOF_HPP
+
+#include <boost/typeof/typeof.hpp>
+
+#include <boost/spirit/core/typeof.hpp>
+
+#include <boost/spirit/error_handling/exceptions_fwd.hpp>
+
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+
+// exceptions.hpp (has forward header)
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::parser_error,2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::assertive_parser,2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::error_status,1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::fallback_parser,3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::guard,1)
+
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::error_status<>)
+
+
+#endif
+
diff --git a/boost/boost/spirit/fusion/algorithm/any.hpp b/boost/boost/spirit/fusion/algorithm/any.hpp
new file mode 100644
index 00000000000..0a13d236c64
--- /dev/null
+++ b/boost/boost/spirit/fusion/algorithm/any.hpp
@@ -0,0 +1,71 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+ Copyright (c) 2005 Eric Niebler
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ALGORITHM_ANY_HPP)
+#define FUSION_ALGORITHM_ANY_HPP
+
+#include <boost/spirit/fusion/sequence/begin.hpp>
+#include <boost/spirit/fusion/sequence/end.hpp>
+#include <boost/spirit/fusion/iterator/equal_to.hpp>
+#include <boost/spirit/fusion/algorithm/detail/any.ipp>
+
+namespace boost { namespace fusion
+{
+ namespace meta
+ {
+ template <typename Sequence, typename F>
+ struct any
+ {
+ typedef bool type;
+ };
+ }
+
+ namespace function
+ {
+ struct any
+ {
+ template <typename Sequence, typename F>
+ struct apply
+ {
+ typedef bool type;
+ };
+
+ template <typename Sequence, typename F>
+ inline bool
+ operator()(Sequence const& seq, F const& f) const
+ {
+ return detail::any(
+ fusion::begin(seq)
+ , fusion::end(seq)
+ , f
+ , meta::equal_to<
+ BOOST_DEDUCED_TYPENAME meta::begin<Sequence>::type
+ , BOOST_DEDUCED_TYPENAME meta::end<Sequence>::type>());
+ }
+
+ template <typename Sequence, typename F>
+ inline bool
+ operator()(Sequence& seq, F const& f) const
+ {
+ return detail::any(
+ fusion::begin(seq)
+ , fusion::end(seq)
+ , f
+ , meta::equal_to<
+ BOOST_DEDUCED_TYPENAME meta::begin<Sequence>::type
+ , BOOST_DEDUCED_TYPENAME meta::end<Sequence>::type>());
+ }
+ };
+ }
+
+ function::any const any = function::any();
+}}
+
+#endif
+
diff --git a/boost/boost/spirit/fusion/algorithm/detail/any.ipp b/boost/boost/spirit/fusion/algorithm/detail/any.ipp
new file mode 100644
index 00000000000..5da0dfaf543
--- /dev/null
+++ b/boost/boost/spirit/fusion/algorithm/detail/any.ipp
@@ -0,0 +1,39 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+ Copyright (c) 2005 Eric Niebler
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ALGORITHM_DETAIL_ANY_IPP)
+#define FUSION_ALGORITHM_DETAIL_ANY_IPP
+
+#include <boost/mpl/bool.hpp>
+#include <boost/spirit/fusion/iterator/equal_to.hpp>
+#include <boost/spirit/fusion/iterator/next.hpp>
+#include <boost/spirit/fusion/iterator/deref.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+ template <typename First, typename Last, typename F>
+ inline bool
+ any(First const&, Last const&, F const&, mpl::true_)
+ {
+ return false;
+ }
+
+ template <typename First, typename Last, typename F>
+ inline bool
+ any(First const& first, Last const& last, F const& f, mpl::false_)
+ {
+ if(f(*first))
+ return true;
+ return detail::any(fusion::next(first), last, f
+ , meta::equal_to<BOOST_DEDUCED_TYPENAME meta::next<First>::type, Last>());
+ }
+}}}
+
+#endif
+
diff --git a/boost/boost/spirit/fusion/algorithm/detail/find_if.ipp b/boost/boost/spirit/fusion/algorithm/detail/find_if.ipp
new file mode 100644
index 00000000000..930da51a91c
--- /dev/null
+++ b/boost/boost/spirit/fusion/algorithm/detail/find_if.ipp
@@ -0,0 +1,118 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ALGORITHM_DETAIL_FIND_IF_HPP)
+#define FUSION_ALGORITHM_DETAIL_FIND_IF_HPP
+
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/apply.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/mpl/lambda.hpp>
+#include <boost/spirit/fusion/iterator/value_of.hpp>
+#include <boost/spirit/fusion/iterator/equal_to.hpp>
+#include <boost/spirit/fusion/iterator/next.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+ template <typename Iterator, typename Pred>
+ struct apply_filter
+ {
+ typedef typename
+ mpl::apply1<
+ Pred
+ , typename meta::value_of<Iterator>::type
+ >::type
+ type;
+ };
+
+ template <typename First, typename Last, typename Pred>
+ struct main_find_if;
+
+ template <typename First, typename Last, typename Pred>
+ struct recursive_find_if
+ {
+ typedef typename
+ main_find_if<
+ typename meta::next<First>::type, Last, Pred
+ >::type
+ type;
+ };
+
+ template <typename First, typename Last, typename Pred>
+ struct main_find_if
+ {
+ typedef mpl::or_<
+ meta::equal_to<First, Last>
+ , apply_filter<First, Pred> >
+ filter;
+
+ typedef typename
+ mpl::eval_if<
+ filter
+ , mpl::identity<First>
+ , recursive_find_if<First, Last, Pred>
+ >::type
+ type;
+ };
+
+ template <typename First, typename Last, typename Pred>
+ struct static_find_if;
+
+ namespace static_find_if_detail {
+ template <typename First,typename Last,typename Pred,typename Iterator>
+ typename main_find_if<First,Last,typename mpl::lambda<Pred>::type>::type
+ call(static_find_if<First,Last,Pred> const& obj,Iterator const& iter);
+ }
+
+ template <typename First, typename Last, typename Pred>
+ struct static_find_if
+ {
+ typedef typename
+ main_find_if<
+ First
+ , Last
+ , typename mpl::lambda<Pred>::type
+ >::type
+ type;
+
+ //Workaround to please MSVC
+ template<typename Iterator>
+ static type
+ call(Iterator const& iter)
+ {
+ return static_find_if_detail::call(static_find_if<First,Last,Pred>(),iter);
+ }
+ };
+
+ namespace static_find_if_detail {
+ template <typename First,typename Last,typename Pred,typename Iterator>
+ typename static_find_if<First,Last,Pred>::type
+ call(static_find_if<First,Last,Pred> const&, Iterator const& iter, mpl::true_)
+ {
+ return iter;
+ };
+
+ template <typename First,typename Last,typename Pred,typename Iterator>
+ typename static_find_if<First,Last,Pred>::type
+ call(static_find_if<First,Last,Pred> const& obj,Iterator const& iter, mpl::false_)
+ {
+ return call(obj,fusion::next(iter));
+ };
+
+ template <typename First,typename Last,typename Pred,typename Iterator>
+ typename main_find_if<First,Last,typename mpl::lambda<Pred>::type>::type
+ call(static_find_if<First,Last,Pred> const& obj,Iterator const& iter)
+ {
+ typedef meta::equal_to<Iterator, BOOST_DEDUCED_TYPENAME static_find_if<First,Last,Pred>::type> found;
+ return call(obj,iter, found());
+ };
+ }
+
+}}}
+
+#endif
diff --git a/boost/boost/spirit/fusion/algorithm/detail/fold.ipp b/boost/boost/spirit/fusion/algorithm/detail/fold.ipp
new file mode 100644
index 00000000000..93580421e88
--- /dev/null
+++ b/boost/boost/spirit/fusion/algorithm/detail/fold.ipp
@@ -0,0 +1,88 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ALGORITHM_DETAIL_FOLD_IPP)
+#define FUSION_ALGORITHM_DETAIL_FOLD_IPP
+
+#include <boost/mpl/bool.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/spirit/fusion/sequence/begin.hpp>
+#include <boost/spirit/fusion/sequence/end.hpp>
+#include <boost/spirit/fusion/iterator/value_of.hpp>
+#include <boost/spirit/fusion/iterator/next.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+ template <typename Iterator, typename State, typename F>
+ struct fold_apply
+ {
+ typedef typename fusion_apply2<F,
+ typename meta::value_of<Iterator>::type, State
+ >::type type;
+ };
+
+ template <typename First, typename Last, typename State, typename F>
+ struct static_fold;
+
+ template <typename First, typename Last, typename State, typename F>
+ struct next_result_of_fold
+ {
+ typedef typename
+ static_fold<
+ typename meta::next<First>::type
+ , Last
+ , typename fold_apply<First, State, F>::type
+ , F
+ >::type
+ type;
+ };
+
+ template <typename First, typename Last, typename State, typename F>
+ struct static_fold
+ {
+ typedef typename
+ mpl::if_<
+ is_same<First, Last>
+ , mpl::identity<State>
+ , next_result_of_fold<First, Last, State, F>
+ >::type
+ result;
+
+ typedef typename result::type type;
+ };
+
+ // terminal case
+ template <typename First, typename Last, typename State, typename F>
+ inline State const&
+ fold(First const&, Last const&, State const& state, F const&, mpl::true_)
+ {
+ return state;
+ }
+
+ // non-terminal case
+ template <typename First, typename Last, typename State, typename F>
+ inline typename static_fold<First, Last, State, F>::type
+ fold(
+ First const& first
+ , Last const& last
+ , State const& state
+ , F const& f
+ , mpl::false_)
+ {
+ return detail::fold(
+ fusion::next(first)
+ , last
+ , f(*first, state)
+ , f
+ , is_same<BOOST_DEDUCED_TYPENAME meta::next<First>::type, Last>()
+ );
+ }
+}}}
+
+#endif
+
diff --git a/boost/boost/spirit/fusion/algorithm/detail/for_each.ipp b/boost/boost/spirit/fusion/algorithm/detail/for_each.ipp
new file mode 100644
index 00000000000..19a7561ca6c
--- /dev/null
+++ b/boost/boost/spirit/fusion/algorithm/detail/for_each.ipp
@@ -0,0 +1,36 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ALGORITHM_DETAIL_FOR_EACH_IPP)
+#define FUSION_ALGORITHM_DETAIL_FOR_EACH_IPP
+
+#include <boost/mpl/bool.hpp>
+#include <boost/spirit/fusion/iterator/equal_to.hpp>
+#include <boost/spirit/fusion/iterator/next.hpp>
+#include <boost/spirit/fusion/iterator/deref.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+ template <typename First, typename Last, typename F>
+ inline void
+ for_each(First const&, Last const&, F const&, mpl::true_)
+ {
+ }
+
+ template <typename First, typename Last, typename F>
+ inline void
+ for_each(First const& first, Last const& last, F const& f, mpl::false_)
+ {
+ f(*first);
+ detail::for_each(fusion::next(first), last, f
+ , meta::equal_to<BOOST_DEDUCED_TYPENAME meta::next<First>::type, Last>());
+ }
+}}}
+
+#endif
+
diff --git a/boost/boost/spirit/fusion/algorithm/erase.hpp b/boost/boost/spirit/fusion/algorithm/erase.hpp
new file mode 100644
index 00000000000..b8558bdf0f9
--- /dev/null
+++ b/boost/boost/spirit/fusion/algorithm/erase.hpp
@@ -0,0 +1,81 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ALGORITHM_ERASE_HPP)
+#define FUSION_ALGORITHM_ERASE_HPP
+
+#include <boost/spirit/fusion/sequence/single_view.hpp>
+#include <boost/spirit/fusion/sequence/joint_view.hpp>
+#include <boost/spirit/fusion/sequence/range.hpp>
+#include <boost/spirit/fusion/sequence/begin.hpp>
+#include <boost/spirit/fusion/sequence/end.hpp>
+#include <boost/spirit/fusion/iterator/next.hpp>
+#include <boost/spirit/fusion/iterator/equal_to.hpp>
+
+namespace boost { namespace fusion
+{
+ namespace meta
+ {
+ template <typename Sequence, typename Position>
+ struct erase
+ {
+ typedef typename meta::begin<Sequence>::type first_type;
+ typedef typename meta::end<Sequence>::type last_type;
+#if! BOOST_WORKAROUND(BOOST_MSVC,<=1300)
+ BOOST_STATIC_ASSERT((!meta::equal_to<Position, last_type>::value));
+#endif
+
+ typedef typename meta::next<Position>::type next_type;
+ typedef range<first_type, Position> left_type;
+ typedef range<next_type, last_type> right_type;
+ typedef joint_view<left_type, right_type> type;
+ };
+ }
+
+ namespace function
+ {
+ struct erase
+ {
+ template <typename Sequence, typename Position>
+ struct apply : meta::erase<Sequence, Position> {};
+
+ template <typename Sequence, typename Position>
+ typename apply<Sequence const, Position>::type
+ operator()(Sequence const& seq, Position const& pos) const
+ {
+ typedef apply<Sequence const, Position> meta_type;
+ typedef typename meta_type::left_type left_type;
+ typedef typename meta_type::right_type right_type;
+ typedef typename meta_type::type result_type;
+
+ left_type left(fusion::begin(seq), pos);
+ right_type right(fusion::next(pos), fusion::end(seq));
+ return result_type(left, right);
+ }
+
+// template <typename Sequence, typename Position>
+// typename apply<Sequence, Position>::type
+// operator()(Sequence& seq, Position const& pos) const
+// {
+// typedef apply<Sequence, Position> meta;
+// typedef typename meta::left_type left_type;
+// typedef typename meta::right_type right_type;
+// typedef typename meta::type result_type;
+//
+// left_type left(fusion::begin(seq), pos);
+// right_type right(fusion::next(pos), fusion::end(seq));
+// return result_type(left, right);
+// }
+ };
+ }
+
+ function::erase const erase = function::erase();
+}}
+
+#endif
+
diff --git a/boost/boost/spirit/fusion/algorithm/filter.hpp b/boost/boost/spirit/fusion/algorithm/filter.hpp
new file mode 100644
index 00000000000..cf1faeefa44
--- /dev/null
+++ b/boost/boost/spirit/fusion/algorithm/filter.hpp
@@ -0,0 +1,51 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ALGORITHM_FILTER_HPP)
+#define FUSION_ALGORITHM_FILTER_HPP
+
+#include <boost/spirit/fusion/sequence/filter_view.hpp>
+
+namespace boost { namespace fusion
+{
+ namespace meta
+ {
+ template <typename Sequence, typename Pred>
+ struct filter
+ {
+ typedef filter_view<Sequence, Pred> type;
+ };
+ }
+
+ namespace function
+ {
+ struct filter
+ {
+ template <typename Sequence, typename Pred>
+ struct apply : meta::filter<Sequence, Pred> {};
+
+ template <typename Sequence, typename Pred>
+ typename apply<Sequence const, Pred>::type
+ operator()(Sequence const& seq, Pred) const
+ {
+ return filter_view<Sequence const, Pred>(seq);
+ }
+
+ template <typename Sequence, typename Pred>
+ typename apply<Sequence, Pred>::type
+ operator()(Sequence& seq, Pred) const
+ {
+ return filter_view<Sequence, Pred>(seq);
+ }
+ };
+ }
+
+ function::filter const filter = function::filter();
+}}
+
+#endif
+
diff --git a/boost/boost/spirit/fusion/algorithm/find.hpp b/boost/boost/spirit/fusion/algorithm/find.hpp
new file mode 100644
index 00000000000..a95cd3e9cf9
--- /dev/null
+++ b/boost/boost/spirit/fusion/algorithm/find.hpp
@@ -0,0 +1,77 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ALGORITHM_FIND_HPP)
+#define FUSION_ALGORITHM_FIND_HPP
+
+#include <boost/spirit/fusion/algorithm/detail/find_if.ipp>
+#include <boost/spirit/fusion/sequence/begin.hpp>
+#include <boost/spirit/fusion/sequence/end.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace fusion
+{
+ namespace meta
+ {
+ template <typename Sequence, typename T>
+ struct find
+ {
+ typedef typename
+ detail::static_find_if<
+ typename meta::begin<Sequence>::type
+ , typename meta::end<Sequence>::type
+ , is_same<mpl::_, T>
+ >::type
+ type;
+ };
+ }
+
+ namespace function
+ {
+ struct find
+ {
+ template <typename Sequence, typename T>
+ struct apply : meta::find<Sequence, T> {};
+
+ template <typename Sequence, typename T>
+ typename apply<Sequence const, typename T::type>::type
+ operator()(Sequence const& seq, T) const
+ {
+ typedef
+ detail::static_find_if<
+ BOOST_DEDUCED_TYPENAME meta::begin<Sequence const>::type
+ , BOOST_DEDUCED_TYPENAME meta::end<Sequence const>::type
+ , is_same<mpl::_, BOOST_DEDUCED_TYPENAME T::type>
+ >
+ filter;
+
+ return filter::call(fusion::begin(seq));
+ }
+
+ template <typename Sequence, typename T>
+ typename apply<Sequence, typename T::type>::type
+ operator()(Sequence& seq, T) const
+ {
+ typedef
+ detail::static_find_if<
+ BOOST_DEDUCED_TYPENAME meta::begin<Sequence>::type
+ , BOOST_DEDUCED_TYPENAME meta::end<Sequence>::type
+ , is_same<mpl::_, BOOST_DEDUCED_TYPENAME T::type>
+ >
+ filter;
+
+ return filter::call(fusion::begin(seq));
+ }
+ };
+ }
+
+ function::find const find = function::find();
+}}
+
+#endif
+
diff --git a/boost/boost/spirit/fusion/algorithm/find_if.hpp b/boost/boost/spirit/fusion/algorithm/find_if.hpp
new file mode 100644
index 00000000000..e134a8c2cbc
--- /dev/null
+++ b/boost/boost/spirit/fusion/algorithm/find_if.hpp
@@ -0,0 +1,76 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ALGORITHM_FIND_IF_HPP)
+#define FUSION_ALGORITHM_FIND_IF_HPP
+
+#include <boost/spirit/fusion/algorithm/detail/find_if.ipp>
+#include <boost/spirit/fusion/sequence/begin.hpp>
+#include <boost/spirit/fusion/sequence/end.hpp>
+
+namespace boost { namespace fusion
+{
+ namespace meta
+ {
+ template <typename Sequence, typename Pred>
+ struct find_if
+ {
+ typedef typename
+ detail::static_find_if<
+ typename meta::begin<Sequence>::type
+ , typename meta::end<Sequence>::type
+ , Pred
+ >::type
+ type;
+ };
+ }
+
+ namespace function
+ {
+ struct find_if
+ {
+ template <typename Sequence, typename Pred>
+ struct apply : meta::find_if<Sequence, Pred> {};
+
+ template <typename Sequence, typename Pred>
+ inline typename apply<Sequence const, Pred>::type
+ operator()(Sequence const& seq, Pred) const
+ {
+ typedef
+ detail::static_find_if<
+ BOOST_DEDUCED_TYPENAME meta::begin<Sequence const>::type
+ , BOOST_DEDUCED_TYPENAME meta::end<Sequence const>::type
+ , Pred
+ >
+ filter;
+
+ return filter::call(fusion::begin(seq));
+ }
+
+ template <typename Sequence, typename Pred>
+ inline typename apply<Sequence, Pred>::type
+ operator()(Sequence& seq, Pred) const
+ {
+ typedef
+ detail::static_find_if<
+ BOOST_DEDUCED_TYPENAME meta::begin<Sequence>::type
+ , BOOST_DEDUCED_TYPENAME meta::end<Sequence>::type
+ , Pred
+ >
+ filter;
+
+ return filter::call(fusion::begin(seq));
+ }
+ };
+ }
+
+ function::find_if const find_if = function::find_if();
+}}
+
+#endif
+
diff --git a/boost/boost/spirit/fusion/algorithm/fold.hpp b/boost/boost/spirit/fusion/algorithm/fold.hpp
new file mode 100644
index 00000000000..59bb0b87749
--- /dev/null
+++ b/boost/boost/spirit/fusion/algorithm/fold.hpp
@@ -0,0 +1,75 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ALGORITHM_FOLD_HPP)
+#define FUSION_ALGORITHM_FOLD_HPP
+
+#include <boost/spirit/fusion/algorithm/detail/fold.ipp>
+
+namespace boost { namespace fusion
+{
+ namespace meta
+ {
+ template <typename Sequence, typename State, typename F>
+ struct fold
+ {
+ typedef typename
+ detail::static_fold<
+ typename meta::begin<Sequence>::type
+ , typename meta::end<Sequence>::type
+ , State
+ , F
+ >::type
+ type;
+ };
+ }
+
+ namespace function
+ {
+ struct fold
+ {
+ template <typename Sequence, typename State, typename F>
+ struct apply : meta::fold<Sequence, State, F> {};
+
+ template <typename Sequence, typename State, typename F>
+ inline typename apply<Sequence const, State, F>::type
+ operator()(Sequence const& seq, State const& state, F const& f) const
+ {
+ return detail::fold(
+ fusion::begin(seq)
+ , fusion::end(seq)
+ , state
+ , f
+ , is_same<
+ BOOST_DEDUCED_TYPENAME meta::begin<Sequence const>::type
+ , BOOST_DEDUCED_TYPENAME meta::end<Sequence const>::type>()
+ );
+ }
+
+ template <typename Sequence, typename State, typename F>
+ inline typename apply<Sequence, State, F>::type
+ operator()(Sequence& seq, State const& state, F const& f) const
+ {
+ return detail::fold(
+ fusion::begin(seq)
+ , fusion::end(seq)
+ , state
+ , f
+ , is_same<
+ BOOST_DEDUCED_TYPENAME meta::begin<Sequence>::type
+ , BOOST_DEDUCED_TYPENAME meta::end<Sequence>::type>()
+ );
+ }
+ };
+ }
+
+ function::fold const fold = function::fold();
+}}
+
+#endif
+
diff --git a/boost/boost/spirit/fusion/algorithm/for_each.hpp b/boost/boost/spirit/fusion/algorithm/for_each.hpp
new file mode 100644
index 00000000000..a8b7aa7967a
--- /dev/null
+++ b/boost/boost/spirit/fusion/algorithm/for_each.hpp
@@ -0,0 +1,70 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ALGORITHM_FOR_EACH_HPP)
+#define FUSION_ALGORITHM_FOR_EACH_HPP
+
+#include <boost/spirit/fusion/sequence/begin.hpp>
+#include <boost/spirit/fusion/sequence/end.hpp>
+#include <boost/spirit/fusion/iterator/equal_to.hpp>
+#include <boost/spirit/fusion/algorithm/detail/for_each.ipp>
+
+namespace boost { namespace fusion
+{
+ namespace meta
+ {
+ template <typename Sequence, typename F>
+ struct for_each
+ {
+ typedef void type;
+ };
+ }
+
+ namespace function
+ {
+ struct for_each
+ {
+ template <typename Sequence, typename F>
+ struct apply
+ {
+ typedef void type;
+ };
+
+ template <typename Sequence, typename F>
+ inline void
+ operator()(Sequence const& seq, F const& f) const
+ {
+ detail::for_each(
+ fusion::begin(seq)
+ , fusion::end(seq)
+ , f
+ , meta::equal_to<
+ BOOST_DEDUCED_TYPENAME meta::begin<Sequence>::type
+ , BOOST_DEDUCED_TYPENAME meta::end<Sequence>::type>());
+ }
+
+ template <typename Sequence, typename F>
+ inline void
+ operator()(Sequence& seq, F const& f) const
+ {
+ detail::for_each(
+ fusion::begin(seq)
+ , fusion::end(seq)
+ , f
+ , meta::equal_to<
+ BOOST_DEDUCED_TYPENAME meta::begin<Sequence>::type
+ , BOOST_DEDUCED_TYPENAME meta::end<Sequence>::type>());
+ }
+ };
+ }
+
+ function::for_each const for_each = function::for_each();
+}}
+
+#endif
+
diff --git a/boost/boost/spirit/fusion/algorithm/insert.hpp b/boost/boost/spirit/fusion/algorithm/insert.hpp
new file mode 100644
index 00000000000..4deff9304fb
--- /dev/null
+++ b/boost/boost/spirit/fusion/algorithm/insert.hpp
@@ -0,0 +1,85 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ALGORITHM_INSERT_HPP)
+#define FUSION_ALGORITHM_INSERT_HPP
+
+#include <boost/spirit/fusion/sequence/single_view.hpp>
+#include <boost/spirit/fusion/sequence/joint_view.hpp>
+#include <boost/spirit/fusion/sequence/range.hpp>
+#include <boost/spirit/fusion/sequence/begin.hpp>
+#include <boost/spirit/fusion/sequence/end.hpp>
+
+namespace boost { namespace fusion
+{
+ namespace meta
+ {
+ template <typename Sequence, typename Position, typename T>
+ struct insert
+ {
+ typedef typename meta::begin<Sequence>::type first_type;
+ typedef typename meta::end<Sequence>::type last_type;
+
+ typedef const single_view<T> insert_type;
+ typedef range<first_type, Position> left_type;
+ typedef range<Position, last_type> right_type;
+ typedef joint_view<left_type, insert_type, true, true> left_insert_type;
+ typedef joint_view<left_insert_type, right_type, true, true> type;
+ };
+ }
+
+ namespace function
+ {
+ struct insert
+ {
+ template <typename Sequence, typename Position, typename T>
+ struct apply : meta::insert<Sequence, Position, T> {};
+
+ template <typename Sequence, typename Position, typename T>
+ inline typename apply<Sequence const, Position, T>::type
+ operator()(Sequence const& seq, Position const& pos, T const& x) const
+ {
+ typedef apply<Sequence const, Position, T> meta;
+ typedef typename meta::left_type left_type;
+ typedef typename meta::right_type right_type;
+ typedef typename meta::left_insert_type left_insert_type;
+ typedef typename meta::insert_type insert_type;
+ typedef typename meta::type result;
+
+ left_type left(fusion::begin(seq), pos);
+ right_type right(pos, fusion::end(seq));
+ insert_type ins(x);
+ left_insert_type left_insert(left, ins);
+ return result(left_insert, right);
+ }
+
+ template <typename Sequence, typename Position, typename T>
+ inline typename apply<Sequence, Position, T>::type
+ operator()(Sequence& seq, Position const& pos, T const& x) const
+ {
+ typedef apply<Sequence, Position, T> meta_type;
+ typedef typename meta_type::left_type left_type;
+ typedef typename meta_type::right_type right_type;
+ typedef typename meta_type::left_insert_type left_insert_type;
+ typedef typename meta_type::insert_type insert_type;
+ typedef typename meta_type::type result;
+
+ left_type left(fusion::begin(seq), pos);
+ right_type right(pos, fusion::end(seq));
+ insert_type ins(x);
+ left_insert_type left_insert(left, ins);
+ return result(left_insert, right);
+ }
+ };
+ }
+
+ function::insert const insert = function::insert();
+}}
+
+#endif
+
diff --git a/boost/boost/spirit/fusion/algorithm/push_back.hpp b/boost/boost/spirit/fusion/algorithm/push_back.hpp
new file mode 100644
index 00000000000..92efff45af0
--- /dev/null
+++ b/boost/boost/spirit/fusion/algorithm/push_back.hpp
@@ -0,0 +1,53 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ALGORITHM_PUSH_BACK_HPP)
+#define FUSION_ALGORITHM_PUSH_BACK_HPP
+
+#include <boost/spirit/fusion/sequence/append_view.hpp>
+
+namespace boost { namespace fusion
+{
+ namespace meta
+ {
+ template <typename Sequence, typename T>
+ struct push_back
+ {
+ typedef append_view<Sequence, T> type;
+ };
+ }
+
+ namespace function
+ {
+ struct push_back
+ {
+ template <typename Sequence, typename T>
+ struct apply : meta::push_back<Sequence, T> {};
+
+ template <typename Sequence, typename T>
+ inline typename apply<Sequence const, T>::type
+ operator()(Sequence const& seq, T const& x) const
+ {
+ typedef append_view<Sequence const, T> result;
+ return result(seq, x);
+ }
+
+ template <typename Sequence, typename T>
+ inline typename apply<Sequence, T>::type
+ operator()(Sequence& seq, T const& x) const
+ {
+ typedef append_view<Sequence, T> result;
+ return result(seq, x);
+ }
+ };
+ }
+
+ function::push_back const push_back = function::push_back();
+}}
+
+#endif
+
diff --git a/boost/boost/spirit/fusion/algorithm/push_front.hpp b/boost/boost/spirit/fusion/algorithm/push_front.hpp
new file mode 100644
index 00000000000..08e9dcf476b
--- /dev/null
+++ b/boost/boost/spirit/fusion/algorithm/push_front.hpp
@@ -0,0 +1,53 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ALGORITHM_PUSH_FRONT_HPP)
+#define FUSION_ALGORITHM_PUSH_FRONT_HPP
+
+#include <boost/spirit/fusion/sequence/prepend_view.hpp>
+
+namespace boost { namespace fusion
+{
+ namespace meta
+ {
+ template <typename Sequence, typename T>
+ struct push_front
+ {
+ typedef prepend_view<Sequence, T> type;
+ };
+ }
+
+ namespace function
+ {
+ struct push_front
+ {
+ template <typename Sequence, typename T>
+ struct apply : meta::push_front<Sequence, T> {};
+
+ template <typename Sequence, typename T>
+ inline typename apply<Sequence const, T>::type
+ operator()(Sequence const& seq, T const& x) const
+ {
+ typedef prepend_view<Sequence const, T> result;
+ return result(seq, x);
+ }
+
+ template <typename Sequence, typename T>
+ inline typename apply<Sequence, T>::type
+ operator()(Sequence& seq, T const& x) const
+ {
+ typedef prepend_view<Sequence, T> result;
+ return result(seq, x);
+ }
+ };
+ }
+
+ function::push_front const push_front = function::push_front();
+}}
+
+#endif
+
diff --git a/boost/boost/spirit/fusion/algorithm/remove.hpp b/boost/boost/spirit/fusion/algorithm/remove.hpp
new file mode 100644
index 00000000000..f01082c13d6
--- /dev/null
+++ b/boost/boost/spirit/fusion/algorithm/remove.hpp
@@ -0,0 +1,64 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ALGORITHM_REMOVE_HPP)
+#define FUSION_ALGORITHM_REMOVE_HPP
+
+#include <boost/spirit/fusion/sequence/filter_view.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace fusion
+{
+ namespace meta
+ {
+ template <typename Sequence, typename T>
+ struct remove
+ {
+ typedef filter_view<Sequence, mpl::not_<is_same<mpl::_, T> > > type;
+ };
+ }
+
+ namespace function
+ {
+ struct remove
+ {
+ template <typename Sequence, typename T>
+ struct apply : meta::remove<Sequence, T> {};
+
+ template <typename Sequence, typename T>
+ inline filter_view<
+ Sequence const
+ , mpl::not_<is_same<mpl::_, typename T::type> > >
+ operator()(Sequence const& seq, T) const
+ {
+ return filter_view<
+ Sequence const
+ , mpl::not_<is_same<mpl::_, BOOST_DEDUCED_TYPENAME T::type>
+ > >(seq);
+ }
+
+ template <typename Sequence, typename T>
+ inline filter_view<
+ Sequence
+ , mpl::not_<is_same<mpl::_, typename T::type> > >
+ operator()(Sequence& seq, T) const
+ {
+ return filter_view<
+ Sequence
+ , mpl::not_<is_same<mpl::_, BOOST_DEDUCED_TYPENAME T::type>
+ > >(seq);
+ }
+ };
+ }
+
+ function::remove const remove = function::remove();
+}}
+
+#endif
+
diff --git a/boost/boost/spirit/fusion/algorithm/remove_if.hpp b/boost/boost/spirit/fusion/algorithm/remove_if.hpp
new file mode 100644
index 00000000000..211d8867419
--- /dev/null
+++ b/boost/boost/spirit/fusion/algorithm/remove_if.hpp
@@ -0,0 +1,52 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ALGORITHM_REMOVE_IF_HPP)
+#define FUSION_ALGORITHM_REMOVE_IF_HPP
+
+#include <boost/spirit/fusion/sequence/filter_view.hpp>
+#include <boost/mpl/not.hpp>
+
+namespace boost { namespace fusion
+{
+ namespace meta
+ {
+ template <typename Sequence, typename Pred>
+ struct remove_if
+ {
+ typedef filter_view<Sequence, mpl::not_<Pred> > type;
+ };
+ }
+
+ namespace function
+ {
+ struct remove_if
+ {
+ template <typename Sequence, typename Pred>
+ struct apply : meta::remove_if<Sequence, Pred> {};
+
+ template <typename Sequence, typename Pred>
+ inline typename apply<Sequence const, Pred>::type
+ operator()(Sequence const& seq, Pred) const
+ {
+ return filter_view<Sequence const, mpl::not_<Pred> >(seq);
+ }
+
+ template <typename Sequence, typename Pred>
+ inline typename apply<Sequence, Pred>::type
+ operator()(Sequence& seq, Pred) const
+ {
+ return filter_view<Sequence, mpl::not_<Pred> >(seq);
+ }
+ };
+ }
+
+ function::remove_if const remove_if = function::remove_if();
+}}
+
+#endif
+
diff --git a/boost/boost/spirit/fusion/algorithm/replace.hpp b/boost/boost/spirit/fusion/algorithm/replace.hpp
new file mode 100644
index 00000000000..bb4610f26aa
--- /dev/null
+++ b/boost/boost/spirit/fusion/algorithm/replace.hpp
@@ -0,0 +1,91 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ALGORITHM_REPLACE_HPP)
+#define FUSION_ALGORITHM_REPLACE_HPP
+
+#include <boost/spirit/fusion/sequence/single_view.hpp>
+#include <boost/spirit/fusion/sequence/joint_view.hpp>
+#include <boost/spirit/fusion/sequence/range.hpp>
+#include <boost/spirit/fusion/sequence/begin.hpp>
+#include <boost/spirit/fusion/sequence/end.hpp>
+#include <boost/spirit/fusion/iterator/equal_to.hpp>
+
+namespace boost { namespace fusion
+{
+ namespace meta
+ {
+ template <typename Sequence, typename Position, typename T>
+ struct replace
+ {
+ typedef typename meta::begin<Sequence>::type first_type;
+ typedef typename meta::end<Sequence>::type last_type;
+ typedef typename meta::next<Position>::type next_type;
+#if! BOOST_WORKAROUND(BOOST_MSVC,<=1300)
+ BOOST_STATIC_ASSERT((!meta::equal_to<Position, last_type>::value));
+#endif
+ typedef const single_view<T> insert_type;
+ typedef range<first_type, Position> left_type;
+ typedef range<next_type, last_type> right_type;
+ typedef joint_view<left_type, insert_type, true, true> left_replace_type;
+ typedef joint_view<left_replace_type, right_type, true, true> type;
+ };
+ }
+
+ namespace function
+ {
+ struct replace
+ {
+ template <typename Sequence, typename Position, typename T>
+ struct apply : meta::replace<Sequence, Position, T> {};
+
+ template <typename Sequence, typename Position, typename T>
+ typename apply<Sequence const, Position, T>::type
+ operator()(Sequence const& seq, Position const& pos, T const& x) const
+ {
+ typedef apply<Sequence const, Position, T> replacer;
+
+ typedef typename replacer::left_type left_type;
+ typedef typename replacer::right_type right_type;
+ typedef typename replacer::left_replace_type left_replace_type;
+ typedef typename replacer::insert_type insert_type;
+ typedef typename replacer::type result;
+
+ left_type left(fusion::begin(seq), pos);
+ right_type right(fusion::next(pos), fusion::end(seq));
+ insert_type ins(x);
+ left_replace_type left_replace(left, ins);
+ return result(left_replace, right);
+ }
+
+ template <typename Sequence, typename Position, typename T>
+ typename apply<Sequence, Position, T>::type
+ operator()(Sequence& seq, Position const& pos, T const& x) const
+ {
+ typedef apply<Sequence, Position, T> replacer;
+
+ typedef typename replacer::left_type left_type;
+ typedef typename replacer::right_type right_type;
+ typedef typename replacer::left_replace_type left_replace_type;
+ typedef typename replacer::insert_type insert_type;
+ typedef typename replacer::type result;
+
+ left_type left(fusion::begin(seq), pos);
+ right_type right(fusion::next(pos), fusion::end(seq));
+ insert_type ins(x);
+ left_replace_type left_replace(left, ins);
+ return result(left_replace, right);
+ }
+ };
+ }
+
+ function::replace const replace = function::replace();
+}}
+
+#endif
+
diff --git a/boost/boost/spirit/fusion/algorithm/transform.hpp b/boost/boost/spirit/fusion/algorithm/transform.hpp
new file mode 100644
index 00000000000..b5c5c5fcceb
--- /dev/null
+++ b/boost/boost/spirit/fusion/algorithm/transform.hpp
@@ -0,0 +1,52 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ALGORITHM_TRANSFORM_HPP)
+#define FUSION_ALGORITHM_TRANSFORM_HPP
+
+#include <boost/spirit/fusion/sequence/transform_view.hpp>
+
+namespace boost { namespace fusion
+{
+ namespace meta
+ {
+ template <typename Sequence, typename F>
+ struct transform
+ {
+ typedef transform_view<Sequence, F> type;
+ };
+ }
+
+ namespace function
+ {
+ struct transform
+ {
+ template <typename Sequence, typename F>
+ struct apply : meta::transform<Sequence, F> {};
+
+ template <typename Sequence, typename F>
+ typename apply<Sequence const, F>::type
+ operator()(Sequence const& seq, F const& f) const
+ {
+ return transform_view<Sequence const, F>(seq, f);
+ }
+
+ template <typename Sequence, typename F>
+ typename apply<Sequence, F>::type
+ operator()(Sequence& seq, F const& f) const
+ {
+ return transform_view<Sequence, F>(seq, f);
+ }
+ };
+ }
+
+ function::transform const transform = function::transform();
+
+}}
+
+#endif
+
diff --git a/boost/boost/spirit/fusion/detail/access.hpp b/boost/boost/spirit/fusion/detail/access.hpp
new file mode 100644
index 00000000000..4b3561d5edc
--- /dev/null
+++ b/boost/boost/spirit/fusion/detail/access.hpp
@@ -0,0 +1,55 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_DETAIL_ACCESS_HPP)
+#define FUSION_DETAIL_ACCESS_HPP
+
+#include <boost/spirit/fusion/detail/config.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/type_traits/add_const.hpp>
+#include <boost/type_traits/add_reference.hpp>
+#include <boost/type_traits/is_reference.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+ template <typename T>
+ struct ref_result
+ {
+ typedef typename add_reference<FUSION_GET_TYPE(T)>::type type;
+ };
+
+ template <typename T>
+ struct cref_result
+ {
+ typedef typename add_reference<
+ typename add_const<FUSION_GET_TYPE(T)>::type
+ >::type type;
+ };
+
+ template <typename T>
+ struct non_ref_parameter
+ {
+ typedef typename boost::remove_cv<T>::type const& type;
+ };
+
+ template <typename T>
+ struct call_param
+ {
+ typedef
+ typename mpl::eval_if<
+ is_reference<T>
+ , mpl::identity<T>
+ , non_ref_parameter<T>
+ >::type
+ type;
+ };
+}}}
+
+#endif
+
diff --git a/boost/boost/spirit/fusion/detail/config.hpp b/boost/boost/spirit/fusion/detail/config.hpp
new file mode 100644
index 00000000000..01137291022
--- /dev/null
+++ b/boost/boost/spirit/fusion/detail/config.hpp
@@ -0,0 +1,442 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_DETAIL_CONFIG_HPP)
+#define FUSION_DETAIL_CONFIG_HPP
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/preprocessor/cat.hpp>
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+#include <boost/mpl/bool.hpp>
+#endif
+
+#if (defined(BOOST_MSVC) && (BOOST_MSVC < 1310)) \
+ || (defined(__BORLANDC__) && (__BORLANDC__ <= 0x570)) \
+ || (defined(__GNUC__) && (__GNUC__ < 3)) \
+ || (defined(__GNUC__) && (__GNUC__ == 3) && (__GNUC_MINOR__ < 1))
+#else
+# define FUSION_COMFORMING_COMPILER
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// BOOST_NO_TEMPLATED_STREAMS macro. This ought to be in boost.config
+//
+///////////////////////////////////////////////////////////////////////////////
+#if defined __GNUC__ && __GNUC__ == 2 && __GNUC_MINOR__ <= 97
+#define BOOST_NO_TEMPLATED_STREAMS
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Before including MPL, we define these dummy template functions. Borland
+// complains when a template class has the same name as a template function,
+// regardless if they are in different namespaces. This is a workaround to
+// this Borland quirk.
+//
+///////////////////////////////////////////////////////////////////////////////
+#if BOOST_WORKAROUND(__BORLANDC__, <= 0x551)
+namespace boost { namespace fusion { namespace borland_only {
+
+ template <typename T> void begin(T) {}
+ template <typename T> void end(T) {}
+ template <typename T> void next(T) {}
+ template <typename T> void prior(T) {}
+ template <typename T> void find(T) {}
+ template <typename T> void find_if(T) {}
+
+}}}
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// MSVC, even with VC7.1 has problems with returning a default constructed
+// value of a given type: return type(); This only happens on debug builds.
+// It seems to be a return value optimization bug.
+//
+///////////////////////////////////////////////////////////////////////////////
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1301) && !defined(NDEBUG)
+# define FUSION_RETURN_DEFAULT_CONSTRUCTED type r=type(); return r
+#else
+# define FUSION_RETURN_DEFAULT_CONSTRUCTED return type()
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Borland does not like the T::value syntax. Instead, we use a metafunction
+// get_value<T>::value. The explicit qualification (::boost::fusion::detail::)
+// also makes Borland happy.
+//
+// VC6/7 on the other hand chokes with ETI (early instantiation bug). So we
+// forward the call to get_value<T>::value and fix the ETI bug there (see
+// get_value below).
+//
+///////////////////////////////////////////////////////////////////////////////
+#if BOOST_WORKAROUND(__BORLANDC__, <= 0x551) \
+ || BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+namespace boost { namespace fusion { namespace detail
+{
+ template <typename T>
+ struct get_value
+ {
+ BOOST_STATIC_CONSTANT(int, value = T::value);
+ };
+
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+
+ // VC6 ETI (early template instantiation) bug workaround.
+ template <>
+ struct get_value<int>
+ {
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+#endif
+}}}
+#endif
+
+#if BOOST_WORKAROUND(__BORLANDC__, <= 0x551) \
+ || BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+# define FUSION_GET_VALUE(T) ::boost::fusion::detail::get_value<T>::value
+#else
+# define FUSION_GET_VALUE(T) T::value
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Borland does not like returning a const reference from a tuple member.
+// We do the cast explicitly.
+//
+///////////////////////////////////////////////////////////////////////////////
+#if BOOST_WORKAROUND(__BORLANDC__, <= 0x551)
+# define FUSION_RETURN_TUPLE_MEMBER(n) \
+ typedef typename tuple_access_result<n, Tuple>::type type; \
+ return type(t.BOOST_PP_CAT(m, n))
+#else
+# define FUSION_RETURN_TUPLE_MEMBER(n) \
+ return t.BOOST_PP_CAT(m, n)
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// See get.hpp. In function get<N>(t), mpl::int_<N>* = 0 is a function
+// parameter that defaults to 0. This is a hack to make VC6 happy, otherwise,
+// VC6 will return the wrong result from a wrong index!
+//
+///////////////////////////////////////////////////////////////////////////////
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+# define FUSION_GET_MSVC_WORKAROUND , mpl::int_<N>* = 0
+#else
+# define FUSION_GET_MSVC_WORKAROUND
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// FUSION_MSVC_ETI_WRAPPER (VC6 and VC7)
+//
+// VC6/VC7 chokes with ETI (early instantiation bug) with typename T::name.
+// So, we forward the call to get_name<T>::type and fix the ETI bug.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+// VC6 ETI (early template instantiation) bug workaround.
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+#define FUSION_MSVC_ETI_WRAPPER(name) \
+namespace boost { namespace fusion { namespace detail \
+{ \
+ template <typename T> \
+ struct BOOST_PP_CAT(get_, name) \
+ { \
+ typedef typename T::name type; \
+ }; \
+ \
+ template <> \
+ struct BOOST_PP_CAT(get_, name)<int> \
+ { \
+ typedef int type; \
+ }; \
+}}}
+#endif
+/*
+// is_msvc_70_ETI_arg: Detect a VC7 ETI arg
+#if BOOST_WORKAROUND(BOOST_MSVC, == 1300)
+namespace boost { namespace fusion { namespace detail
+{
+ struct int_convertible_
+ {
+ int_convertible_(int);
+ };
+
+ template< typename T >
+ struct is_msvc_70_ETI_arg
+ {
+ typedef char (&no_tag)[1];
+ typedef char (&yes_tag)[2];
+
+ static no_tag test(...);
+ static yes_tag test(int_convertible_);
+ static T get();
+
+ BOOST_STATIC_CONSTANT(bool, value =
+ sizeof(test(get())) == sizeof(yes_tag)
+ );
+ };
+}}}
+#endif
+
+// VC7 ETI (early template instantiation) bug workaround.
+#if BOOST_WORKAROUND(BOOST_MSVC, == 1300)
+#define FUSION_MSVC_ETI_WRAPPER(name) \
+namespace boost { namespace fusion { namespace detail \
+{ \
+ template <bool> \
+ struct BOOST_PP_CAT(get_impl_, name) \
+ { \
+ template <typename T> \
+ struct result \
+ { \
+ typedef int type; \
+ }; \
+ }; \
+ \
+ struct BOOST_PP_CAT(get_impl_, name)<false> \
+ { \
+ template <typename T> \
+ struct result \
+ { \
+ typedef typename T::name type; \
+ }; \
+ }; \
+ \
+ template <typename T> \
+ struct BOOST_PP_CAT(get_, name) \
+ : BOOST_PP_CAT(get_impl_, name)<is_msvc_70_ETI_arg<T>::value> \
+ ::template result<T> {}; \
+}}}
+#endif
+*/
+///////////////////////////////////////////////////////////////////////////////
+//
+// T::tag wrapper
+//
+///////////////////////////////////////////////////////////////////////////////
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+FUSION_MSVC_ETI_WRAPPER(tag)
+# define FUSION_GET_TAG(T) ::boost::fusion::detail::get_tag<T>::type
+#else
+# define FUSION_GET_TAG(T) typename T::tag
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// T::type wrapper
+//
+///////////////////////////////////////////////////////////////////////////////
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+FUSION_MSVC_ETI_WRAPPER(type)
+# define FUSION_GET_TYPE(T) ::boost::fusion::detail::get_type<T>::type
+#else
+# define FUSION_GET_TYPE(T) typename T::type
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// T::types wrapper
+//
+///////////////////////////////////////////////////////////////////////////////
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+FUSION_MSVC_ETI_WRAPPER(types)
+# define FUSION_GET_TYPES(T) ::boost::fusion::detail::get_types<T>::type
+#else
+# define FUSION_GET_TYPES(T) typename T::types
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// T::index wrapper
+//
+///////////////////////////////////////////////////////////////////////////////
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+FUSION_MSVC_ETI_WRAPPER(index)
+# define FUSION_GET_INDEX(T) ::boost::fusion::detail::get_index<T>::type
+#else
+# define FUSION_GET_INDEX(T) typename T::index
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// T::tuple wrapper
+//
+///////////////////////////////////////////////////////////////////////////////
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+FUSION_MSVC_ETI_WRAPPER(tuple)
+# define FUSION_GET_TUPLE(T) ::boost::fusion::detail::get_tuple<T>::type
+#else
+# define FUSION_GET_TUPLE(T) typename T::tuple
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// T::size wrapper
+//
+///////////////////////////////////////////////////////////////////////////////
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+FUSION_MSVC_ETI_WRAPPER(size)
+# define FUSION_GET_SIZE(T) ::boost::fusion::detail::get_size<T>::type
+#else
+# define FUSION_GET_SIZE(T) typename T::size
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// T::value_type wrapper
+//
+///////////////////////////////////////////////////////////////////////////////
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+FUSION_MSVC_ETI_WRAPPER(value_type)
+# define FUSION_GET_VALUE_TYPE(T) ::boost::fusion::detail::get_value_type<T>::type
+#else
+# define FUSION_GET_VALUE_TYPE(T) typename T::value_type
+#endif
+
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+
+namespace boost {namespace fusion { namespace aux {
+template< typename T >
+struct msvc_never_true
+{
+ enum { value = false };
+};
+}}} //namespace boost::fusion::aux
+
+#endif
+
+namespace boost {namespace fusion {
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+
+namespace aux {
+ // msvc_apply
+#define AUX778076_MSVC_DTW_NAME msvc_apply1
+#define AUX778076_MSVC_DTW_ORIGINAL_NAME apply
+#define AUX778076_MSVC_DTW_ARITY 1
+#include "boost/mpl/aux_/msvc_dtw.hpp"
+
+#define AUX778076_MSVC_DTW_NAME msvc_apply2
+#define AUX778076_MSVC_DTW_ORIGINAL_NAME apply
+#define AUX778076_MSVC_DTW_ARITY 2
+#include "boost/mpl/aux_/msvc_dtw.hpp"
+
+} //namespace aux
+
+template<typename A,typename B>
+struct fusion_apply1
+{
+ typedef typename aux::msvc_apply1<A>::template result_<B>::type type;
+};
+
+template<typename A,typename B,typename C>
+struct fusion_apply2
+{
+ typedef typename aux::msvc_apply2<A>::template result_<B,C>::type type;
+};
+
+#else
+template<typename A,typename B>
+struct fusion_apply1
+{
+ typedef typename A::template apply<B>::type type;
+};
+template<typename A,typename B,typename C>
+struct fusion_apply2
+{
+ typedef typename A::template apply<B,C>::type type;
+};
+#endif
+}} //namespace boost::fusion
+
+namespace boost {namespace fusion {namespace detail {
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ template<typename T>
+ struct bool_base {};
+ template<>
+ struct bool_base<mpl::bool_<true> > : boost::mpl::bool_<true>{};
+ template<>
+ struct bool_base<mpl::bool_<false> > : boost::mpl::bool_<false>{};
+#else
+ template<typename T>
+ struct bool_base : T {};
+#endif
+}}}
+
+//VC 6 has serious problems with mpl::int_ in tuple_iterator_base.
+//It ICEs because operator int() const on mpl::int_ is inlined.
+//At the same time, another test using integral_c<T,N> ICEs because operator int() is not inlined.
+//Only solution seems to be to define a special msvc_fusion_int for VC 6 to be used in tuple_iterator_base
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+namespace boost {namespace fusion {namespace detail{
+
+template<int N>
+struct msvc_fusion_int
+{
+ BOOST_STATIC_CONSTANT(int, value = N);
+ typedef msvc_fusion_int<N> type;
+ typedef int value_type;
+ typedef boost::mpl::integral_c_tag tag;
+
+ typedef msvc_fusion_int<value + 1> next;
+ typedef msvc_fusion_int<value - 1> prior;
+
+ operator int() const;
+};
+
+template<int N>
+msvc_fusion_int<N>::operator int() const
+{
+ return static_cast<int>(this->value);
+}
+
+}}}
+#define FUSION_INT(N) boost::fusion::detail::msvc_fusion_int<N>
+#else
+#define FUSION_INT(N) boost::mpl::int_<N>
+#endif
+
+
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Borland is so flaky with const correctness of iterators. It's getting
+// confused with tuple_iterator<N, T> where T is a const tuple. We cast
+// what Borland thinks is a const reference to a true reference.
+//
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace fusion { namespace detail
+{
+#if BOOST_WORKAROUND(__BORLANDC__, <= 0x551)
+
+ template <typename T>
+ T& ref(T const& r)
+ {
+ return const_cast<T&>(r);
+ }
+
+#else
+
+ template <typename T>
+ T& ref(T& r)
+ {
+ return r;
+ }
+
+#endif
+
+}}}
+
+#endif
+
+
diff --git a/boost/boost/spirit/fusion/iterator/as_fusion_iterator.hpp b/boost/boost/spirit/fusion/iterator/as_fusion_iterator.hpp
new file mode 100644
index 00000000000..28c00a2c9aa
--- /dev/null
+++ b/boost/boost/spirit/fusion/iterator/as_fusion_iterator.hpp
@@ -0,0 +1,72 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_AS_FUSION_ITERATOR_HPP)
+#define FUSION_SEQUENCE_AS_FUSION_ITERATOR_HPP
+
+#include <boost/spirit/fusion/iterator/is_iterator.hpp>
+#include <boost/spirit/fusion/iterator/type_sequence_iterator.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace fusion
+{
+ // Test T. If it is a fusion iterator, return a reference to it.
+ // else, assume it is an mpl iterator.
+
+ namespace as_fusion_iterator_detail {
+ template <typename T>
+ static T const&
+ convert(T const& x, mpl::true_)
+ {
+ return x;
+ }
+
+ template <typename T>
+ static type_sequence_iterator<T>
+ convert(T const& x, mpl::false_)
+ {
+ return type_sequence_iterator<T>();
+ }
+ }
+
+ template <typename T>
+ struct as_fusion_iterator
+ {
+ typedef typename
+ mpl::if_<
+ fusion::is_iterator<T>
+ , T
+ , type_sequence_iterator<T>
+ >::type
+ type;
+
+ static typename
+ mpl::if_<
+ fusion::is_iterator<T>
+ , T const&
+ , type_sequence_iterator<T>
+ >::type
+ convert(T const& x);
+ };
+
+ template <typename T>
+ typename
+ mpl::if_<
+ fusion::is_iterator<T>
+ , T const&
+ , type_sequence_iterator<T>
+ >::type
+ as_fusion_iterator<T>::convert(T const& x)
+ {
+ return as_fusion_iterator_detail::convert(x, fusion::is_iterator<T>());
+ }
+
+}}
+
+#endif
diff --git a/boost/boost/spirit/fusion/iterator/cons_iterator.hpp b/boost/boost/spirit/fusion/iterator/cons_iterator.hpp
new file mode 100644
index 00000000000..9df62d5ca84
--- /dev/null
+++ b/boost/boost/spirit/fusion/iterator/cons_iterator.hpp
@@ -0,0 +1,81 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+ Copyright (c) 2005 Eric Niebler
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ITERATOR_CONS_ITERATOR_HPP)
+#define FUSION_ITERATOR_CONS_ITERATOR_HPP
+
+#include <boost/mpl/aux_/na_fwd.hpp>
+#include <boost/mpl/iterator_tags.hpp>
+#include <boost/spirit/fusion/iterator/as_fusion_iterator.hpp>
+#include <boost/spirit/fusion/iterator/detail/iterator_base.hpp>
+#include <boost/spirit/fusion/sequence/detail/sequence_base.hpp>
+#include <boost/spirit/fusion/iterator/detail/cons_iterator/deref_traits.hpp>
+#include <boost/spirit/fusion/iterator/detail/cons_iterator/next_traits.hpp>
+#include <boost/spirit/fusion/iterator/detail/cons_iterator/value_traits.hpp>
+
+namespace boost { namespace fusion
+{
+ struct nil;
+
+ struct cons_iterator_tag;
+
+ template <typename Cons = nil>
+ struct cons_iterator : iterator_base<cons_iterator<Cons> >
+ {
+ typedef cons_iterator_tag tag;
+ typedef Cons cons_type;
+ typedef mpl::forward_iterator_tag category;
+
+ #if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+ typedef typename cons_detail::next_traits_impl<cons_iterator>::type next;
+ typedef typename cons_detail::value_traits_impl<cons_iterator>::type type;
+ #endif
+
+ explicit cons_iterator(cons_type& cons_)
+ : cons(cons_) {}
+
+ cons_type& cons;
+ private:
+ cons_iterator& operator=(cons_iterator const&);
+ };
+
+ template <>
+ struct cons_iterator<nil> : iterator_base<cons_iterator<nil> >
+ {
+ typedef cons_iterator_tag tag;
+ typedef nil cons_type;
+ typedef mpl::forward_iterator_tag category;
+
+ #if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+ typedef cons_iterator next;
+ typedef mpl::na type;
+ #endif
+
+ cons_iterator() {}
+ explicit cons_iterator(nil const&) {}
+ };
+
+ template <>
+ struct cons_iterator<nil const> : iterator_base<cons_iterator<nil const> >
+ {
+ typedef cons_iterator_tag tag;
+ typedef nil const cons_type;
+ typedef mpl::forward_iterator_tag category;
+
+ #if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+ typedef cons_iterator next;
+ typedef mpl::na type;
+ #endif
+
+ cons_iterator() {}
+ explicit cons_iterator(nil const&) {}
+ };
+}}
+
+#endif
diff --git a/boost/boost/spirit/fusion/iterator/deref.hpp b/boost/boost/spirit/fusion/iterator/deref.hpp
new file mode 100644
index 00000000000..2c624f8ac4b
--- /dev/null
+++ b/boost/boost/spirit/fusion/iterator/deref.hpp
@@ -0,0 +1,101 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ITERATOR_DEREF_HPP)
+#define FUSION_ITERATOR_DEREF_HPP
+
+#include <boost/spirit/fusion/detail/config.hpp>
+#include <boost/spirit/fusion/iterator/detail/iterator_base.hpp>
+#include <boost/spirit/fusion/iterator/as_fusion_iterator.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/is_const.hpp>
+
+namespace boost { namespace fusion
+{
+ namespace meta
+ {
+ template <typename Tag>
+ struct deref_impl
+ {
+ template <typename Iterator>
+ struct apply {};
+ };
+
+ template <typename Iterator>
+ struct deref
+ {
+ typedef as_fusion_iterator<Iterator> converter;
+ typedef typename converter::type iter;
+
+ typedef typename
+ deref_impl<FUSION_GET_TAG(iter)>::
+ template apply<iter>::type
+ type;
+ };
+ }
+
+ namespace deref_detail {
+ template <typename Iterator>
+ typename meta::deref<Iterator>::type
+ deref(Iterator const& i,mpl::true_)
+ {
+ typedef as_fusion_iterator<Iterator> converter;
+ typedef typename converter::type iter;
+
+ typename meta::deref<iter>::type result =
+ meta::deref_impl<FUSION_GET_TAG(iter)>::
+ template apply<iter>::call(converter::convert(i));
+ return result;
+ }
+
+ template <typename Iterator>
+ inline typename meta::deref<Iterator>::type
+ deref(Iterator& i,mpl::false_)
+ {
+ typedef as_fusion_iterator<Iterator> converter;
+ typedef typename converter::type iter;
+
+ typename meta::deref<iter>::type result =
+ meta::deref_impl<FUSION_GET_TAG(iter)>::
+ template apply<iter>::call(converter::convert(i));
+ return result;
+ }
+ }
+
+ template <typename Iterator>
+ typename meta::deref<Iterator>::type
+ deref(Iterator& i) {
+ return deref_detail::deref(i,is_const<Iterator>());
+ }
+
+ template <typename Iterator>
+ typename meta::deref<Iterator>::type
+ deref(Iterator const & i) {
+ return deref_detail::deref(i,is_const<Iterator const>());
+ }
+
+ template <typename Iterator>
+ typename meta::deref<Iterator>::type
+ operator*(iterator_base<Iterator> const& i)
+ {
+ return fusion::deref(i.cast());
+ }
+
+ template <typename Iterator>
+ inline typename meta::deref<Iterator>::type
+ operator*(iterator_base<Iterator>& i)
+ {
+ return fusion::deref(i.cast());
+ }
+
+ // Note: VC7.1 has a problem when we pass the return value directly.
+ // Try removing the named temporary. This only happens on debug builds.
+ // It seems to be a return value optimization bug.
+}}
+
+#endif
diff --git a/boost/boost/spirit/fusion/iterator/detail/adapt_deref_traits.hpp b/boost/boost/spirit/fusion/iterator/detail/adapt_deref_traits.hpp
new file mode 100644
index 00000000000..d0231411c50
--- /dev/null
+++ b/boost/boost/spirit/fusion/iterator/detail/adapt_deref_traits.hpp
@@ -0,0 +1,45 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ADAPT_DEREF_TRAITS_HPP)
+#define FUSION_ADAPT_DEREF_TRAITS_HPP
+
+#include <boost/spirit/fusion/iterator/deref.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+ namespace adapt_deref_detail {
+ template<typename Iterator>
+ struct deref_traits_impl
+ {
+ typedef typename
+ meta::deref<typename Iterator::first_type>::type
+ type;
+
+ static type
+ call(Iterator const& i);
+ };
+
+ template<typename Iterator>
+ typename deref_traits_impl<Iterator>::type
+ deref_traits_impl<Iterator>::call(Iterator const& i)
+ {
+ return *i.first;
+ }
+ }
+ struct adapt_deref_traits {
+ template<typename Iterator>
+ struct apply : adapt_deref_detail::deref_traits_impl<Iterator>
+ {};
+ };
+
+}}}
+
+#endif
+
+
diff --git a/boost/boost/spirit/fusion/iterator/detail/adapt_value_traits.hpp b/boost/boost/spirit/fusion/iterator/detail/adapt_value_traits.hpp
new file mode 100644
index 00000000000..6a0001b0632
--- /dev/null
+++ b/boost/boost/spirit/fusion/iterator/detail/adapt_value_traits.hpp
@@ -0,0 +1,29 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ADAPT_VALUE_TRAITS_HPP)
+#define FUSION_ADAPT_VALUE_TRAITS_HPP
+
+#include <boost/spirit/fusion/iterator/value_of.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+ struct adapt_value_traits
+ {
+ template <typename Iterator>
+ struct apply
+ {
+ typedef typename
+ meta::value_of<typename Iterator::first_type>::type
+ type;
+ };
+ };
+}}}
+
+#endif
+
+
diff --git a/boost/boost/spirit/fusion/iterator/detail/cons_iterator/deref_traits.hpp b/boost/boost/spirit/fusion/iterator/detail/cons_iterator/deref_traits.hpp
new file mode 100644
index 00000000000..b182bf5103a
--- /dev/null
+++ b/boost/boost/spirit/fusion/iterator/detail/cons_iterator/deref_traits.hpp
@@ -0,0 +1,60 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+ Copyright (c) 2005 Eric Niebler
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ITERATOR_DETAIL_CONS_ITERATOR_DEREF_TRAITS_HPP)
+#define FUSION_ITERATOR_DETAIL_CONS_ITERATOR_DEREF_TRAITS_HPP
+
+#include <boost/spirit/fusion/detail/config.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/add_const.hpp>
+#include <boost/type_traits/add_reference.hpp>
+
+namespace boost { namespace fusion
+{
+ struct cons_iterator_tag;
+
+ namespace cons_detail
+ {
+ template <typename Iterator>
+ struct deref_traits_impl
+ {
+ typedef typename Iterator::cons_type cons_type;
+ typedef typename cons_type::car_type value_type;
+
+ typedef typename mpl::eval_if<
+ is_const<cons_type>
+ , add_reference<typename add_const<value_type>::type>
+ , add_reference<value_type> >::type
+ type;
+
+ static type
+ call(Iterator const& i)
+ {
+ return detail::ref(i.cons.car);
+ }
+ };
+ }
+
+ namespace meta
+ {
+ template <typename Tag>
+ struct deref_impl;
+
+ template <>
+ struct deref_impl<cons_iterator_tag>
+ {
+ template <typename Iterator>
+ struct apply : cons_detail::deref_traits_impl<Iterator> {};
+ };
+ }
+}}
+
+#endif
+
+
diff --git a/boost/boost/spirit/fusion/iterator/detail/cons_iterator/next_traits.hpp b/boost/boost/spirit/fusion/iterator/detail/cons_iterator/next_traits.hpp
new file mode 100644
index 00000000000..353f4b2147f
--- /dev/null
+++ b/boost/boost/spirit/fusion/iterator/detail/cons_iterator/next_traits.hpp
@@ -0,0 +1,84 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+ Copyright (c) 2005 Eric Niebler
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ITERATOR_DETAIL_CONS_ITERATOR_NEXT_TRAITS_HPP)
+#define FUSION_ITERATOR_DETAIL_CONS_ITERATOR_NEXT_TRAITS_HPP
+
+#include <boost/spirit/fusion/detail/config.hpp>
+#include <boost/spirit/fusion/iterator/next.hpp>
+#include <boost/spirit/fusion/iterator/equal_to.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/add_const.hpp>
+
+namespace boost { namespace fusion
+{
+ struct cons_iterator_tag;
+
+ template <typename Cons>
+ struct cons_iterator;
+
+ namespace cons_detail
+ {
+ template <typename Iterator>
+ struct next_traits_impl
+ {
+ typedef typename Iterator::cons_type cons_type;
+ typedef typename cons_type::cdr_type cdr_type;
+
+ typedef cons_iterator<
+ typename mpl::eval_if<
+ is_const<cons_type>
+ , add_const<cdr_type>
+ , mpl::identity<cdr_type>
+ >::type>
+ type;
+
+ static type
+ call(Iterator const& i)
+ {
+ return type(detail::ref(i.cons.cdr));
+ }
+ };
+ }
+
+ namespace meta
+ {
+ template <typename Tag>
+ struct next_impl;
+
+ template <>
+ struct next_impl<cons_iterator_tag>
+ {
+ template <typename Iterator>
+ struct apply : cons_detail::next_traits_impl<Iterator> {};
+ };
+ }
+}}
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+namespace boost { namespace mpl
+{
+ template <typename Iterator>
+ struct next;
+
+ template <typename Cons>
+ struct next<fusion::cons_iterator<Cons> >
+ : fusion::cons_detail::next_traits_impl<fusion::cons_iterator<Cons> >
+ {
+ };
+}}
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#endif
+
+
diff --git a/boost/boost/spirit/fusion/iterator/detail/cons_iterator/value_traits.hpp b/boost/boost/spirit/fusion/iterator/detail/cons_iterator/value_traits.hpp
new file mode 100644
index 00000000000..33bd27ddb33
--- /dev/null
+++ b/boost/boost/spirit/fusion/iterator/detail/cons_iterator/value_traits.hpp
@@ -0,0 +1,61 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+ Copyright (c) 2005 Eric Niebler
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ITERATOR_DETAIL_CONS_ITERATOR_VALUE_TRAITS_HPP)
+#define FUSION_ITERATOR_DETAIL_CONS_ITERATOR_VALUE_TRAITS_HPP
+
+#include <boost/spirit/fusion/detail/config.hpp>
+
+namespace boost { namespace fusion
+{
+ struct cons_iterator_tag;
+
+ namespace cons_detail
+ {
+ template <typename Iterator>
+ struct value_traits_impl
+ {
+ typedef typename Iterator::cons_type cons_type;
+ typedef typename cons_type::car_type type;
+ };
+ }
+
+ namespace meta
+ {
+ template <typename Tag>
+ struct value_impl;
+
+ template <>
+ struct value_impl<cons_iterator_tag>
+ {
+ template <typename Iterator>
+ struct apply : cons_detail::value_traits_impl<Iterator> {};
+ };
+ }
+
+}}
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+namespace boost { namespace mpl
+{
+ template <typename Iterator>
+ struct deref;
+
+ template <typename Cons>
+ struct deref<fusion::cons_iterator<Cons> >
+ : fusion::cons_detail::value_traits_impl<fusion::cons_iterator<Cons> >
+ {
+ };
+}}
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#endif
+
+
diff --git a/boost/boost/spirit/fusion/iterator/detail/filter_view_iterator/deref_traits.hpp b/boost/boost/spirit/fusion/iterator/detail/filter_view_iterator/deref_traits.hpp
new file mode 100644
index 00000000000..7205162b02c
--- /dev/null
+++ b/boost/boost/spirit/fusion/iterator/detail/filter_view_iterator/deref_traits.hpp
@@ -0,0 +1,32 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ITERATOR_DETAIL_FILTER_VIEW_ITERATOR_DEREF_TRAITS_HPP)
+#define FUSION_ITERATOR_DETAIL_FILTER_VIEW_ITERATOR_DEREF_TRAITS_HPP
+
+#include <boost/spirit/fusion/detail/config.hpp>
+#include <boost/spirit/fusion/iterator/detail/adapt_deref_traits.hpp>
+
+namespace boost { namespace fusion
+{
+ struct filter_view_iterator_tag;
+
+ namespace meta
+ {
+ template <typename Tag>
+ struct deref_impl;
+
+ template <>
+ struct deref_impl<filter_view_iterator_tag> : detail::adapt_deref_traits
+ {};
+ }
+}}
+
+#endif
+
+
diff --git a/boost/boost/spirit/fusion/iterator/detail/filter_view_iterator/equal_to_traits.hpp b/boost/boost/spirit/fusion/iterator/detail/filter_view_iterator/equal_to_traits.hpp
new file mode 100644
index 00000000000..fd14536452d
--- /dev/null
+++ b/boost/boost/spirit/fusion/iterator/detail/filter_view_iterator/equal_to_traits.hpp
@@ -0,0 +1,35 @@
+/*=============================================================================
+ Copyright (c) 2003-2005 Joel de Guzman
+ Copyright (c) 2005 Dan Marsden
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ITERATOR_DETAIL_FILTER_VIEW_ITERATOR_EQUAL_TO_TRAITS_HPP)
+#define FUSION_ITERATOR_DETAIL_FILTER_VIEW_ITERATOR_EQUAL_TO_TRAITS_HPP
+
+namespace boost { namespace fusion
+{
+ struct filter_view_iterator_tag;
+
+ namespace meta
+ {
+ template<typename I1, typename I2>
+ struct equal_to;
+
+ template<typename Tag>
+ struct equal_to_impl;
+
+ template<>
+ struct equal_to_impl<filter_view_iterator_tag>
+ {
+ template<typename I1, typename I2>
+ struct apply
+ : equal_to<typename I1::first_type, typename I2::first_type>
+ {};
+ };
+ }
+}}
+
+#endif
diff --git a/boost/boost/spirit/fusion/iterator/detail/filter_view_iterator/next_traits.hpp b/boost/boost/spirit/fusion/iterator/detail/filter_view_iterator/next_traits.hpp
new file mode 100644
index 00000000000..8e26b89aaa4
--- /dev/null
+++ b/boost/boost/spirit/fusion/iterator/detail/filter_view_iterator/next_traits.hpp
@@ -0,0 +1,77 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ITERATOR_DETAIL_FILTER_VIEW_ITERATOR_NEXT_TRAITS_HPP)
+#define FUSION_ITERATOR_DETAIL_FILTER_VIEW_ITERATOR_NEXT_TRAITS_HPP
+
+#include <boost/spirit/fusion/detail/config.hpp>
+#include <boost/spirit/fusion/algorithm/detail/find_if.ipp>
+#include <boost/spirit/fusion/iterator/next.hpp>
+#include <boost/spirit/fusion/iterator/equal_to.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+
+namespace boost { namespace fusion
+{
+ struct filter_view_iterator_tag;
+
+ template <typename First, typename Last, typename Pred>
+ struct filter_iterator;
+
+ namespace filter_view_detail {
+ template<typename Iterator>
+ struct next_traits_impl {
+ typedef typename Iterator::first_type first_type;
+ typedef typename Iterator::last_type last_type;
+ typedef typename Iterator::pred_type pred_type;
+
+ typedef typename
+ mpl::eval_if<
+ meta::equal_to<first_type, last_type>
+ , mpl::identity<last_type>
+ , meta::next<first_type>
+ >::type
+ next_type;
+
+ typedef typename detail::static_find_if<
+ next_type, last_type, pred_type>
+ filter;
+
+ typedef filter_iterator<
+ typename filter::type, last_type, pred_type>
+ type;
+
+ static type
+ call(Iterator const& i);
+ };
+ template<typename Iterator>
+ typename next_traits_impl<Iterator>::type
+ next_traits_impl<Iterator>::call(Iterator const& i)
+ {
+ return type(filter::call(i.first));
+ }
+ }
+
+ namespace meta
+ {
+ template <typename Tag>
+ struct next_impl;
+
+ template <>
+ struct next_impl<filter_view_iterator_tag>
+ {
+ template <typename Iterator>
+ struct apply : filter_view_detail::next_traits_impl<Iterator>
+ {};
+ };
+ }
+}}
+
+#endif
+
+
diff --git a/boost/boost/spirit/fusion/iterator/detail/filter_view_iterator/value_traits.hpp b/boost/boost/spirit/fusion/iterator/detail/filter_view_iterator/value_traits.hpp
new file mode 100644
index 00000000000..94e1d27f494
--- /dev/null
+++ b/boost/boost/spirit/fusion/iterator/detail/filter_view_iterator/value_traits.hpp
@@ -0,0 +1,31 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ITERATOR_DETAIL_FILTER_VIEW_ITERATOR_VALUE_TRAITS_HPP)
+#define FUSION_ITERATOR_DETAIL_FILTER_VIEW_ITERATOR_VALUE_TRAITS_HPP
+
+#include <boost/spirit/fusion/detail/config.hpp>
+#include <boost/spirit/fusion/iterator/detail/adapt_value_traits.hpp>
+
+namespace boost { namespace fusion
+{
+ struct filter_view_iterator_tag;
+
+ namespace meta
+ {
+ template <typename Tag>
+ struct value_impl;
+
+ template <>
+ struct value_impl<filter_view_iterator_tag>
+ : detail::adapt_value_traits {};
+ }
+}}
+
+#endif
+
+
diff --git a/boost/boost/spirit/fusion/iterator/detail/iterator_base.hpp b/boost/boost/spirit/fusion/iterator/detail/iterator_base.hpp
new file mode 100644
index 00000000000..7ab9301ce85
--- /dev/null
+++ b/boost/boost/spirit/fusion/iterator/detail/iterator_base.hpp
@@ -0,0 +1,41 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ITERATOR_DETAIL_ITERATOR_BASE_HPP)
+#define FUSION_ITERATOR_DETAIL_ITERATOR_BASE_HPP
+
+namespace boost { namespace fusion
+{
+ struct iterator_root {};
+
+ template <typename Iterator>
+ struct iterator_base : iterator_root
+ {
+ Iterator const&
+ cast() const;
+
+ Iterator&
+ cast();
+ };
+
+ template <typename Iterator>
+ Iterator const&
+ iterator_base<Iterator>::cast() const
+ {
+ return static_cast<Iterator const&>(*this);
+ }
+
+ template <typename Iterator>
+ Iterator&
+ iterator_base<Iterator>::cast()
+ {
+ return static_cast<Iterator&>(*this);
+ }
+}}
+
+#endif
diff --git a/boost/boost/spirit/fusion/iterator/detail/joint_view_iterator/deref_traits.hpp b/boost/boost/spirit/fusion/iterator/detail/joint_view_iterator/deref_traits.hpp
new file mode 100644
index 00000000000..8738365a730
--- /dev/null
+++ b/boost/boost/spirit/fusion/iterator/detail/joint_view_iterator/deref_traits.hpp
@@ -0,0 +1,31 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ITERATOR_DETAIL_JOINT_VIEW_ITERATOR_DEREF_TRAITS_HPP)
+#define FUSION_ITERATOR_DETAIL_JOINT_VIEW_ITERATOR_DEREF_TRAITS_HPP
+
+#include <boost/spirit/fusion/detail/config.hpp>
+#include <boost/spirit/fusion/iterator/detail/adapt_deref_traits.hpp>
+
+namespace boost { namespace fusion
+{
+ struct joint_view_iterator_tag;
+
+ namespace meta
+ {
+ template <typename Tag>
+ struct deref_impl;
+
+ template <>
+ struct deref_impl<joint_view_iterator_tag>
+ : detail::adapt_deref_traits {};
+ }
+}}
+
+#endif
+
+
diff --git a/boost/boost/spirit/fusion/iterator/detail/joint_view_iterator/next_traits.hpp b/boost/boost/spirit/fusion/iterator/detail/joint_view_iterator/next_traits.hpp
new file mode 100644
index 00000000000..f497492449b
--- /dev/null
+++ b/boost/boost/spirit/fusion/iterator/detail/joint_view_iterator/next_traits.hpp
@@ -0,0 +1,85 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ITERATOR_DETAIL_JOINT_VIEW_ITERATOR_NEXT_TRAITS_HPP)
+#define FUSION_ITERATOR_DETAIL_JOINT_VIEW_ITERATOR_NEXT_TRAITS_HPP
+
+#include <boost/spirit/fusion/detail/config.hpp>
+#include <boost/spirit/fusion/iterator/next.hpp>
+#include <boost/spirit/fusion/iterator/equal_to.hpp>
+#include <boost/mpl/if.hpp>
+
+namespace boost { namespace fusion
+{
+ struct joint_view_iterator_tag;
+
+ template <typename First, typename Last, typename Concat>
+ struct joint_view_iterator;
+
+ namespace join_view_detail {
+ template<typename Iterator>
+ struct next_traits_impl {
+ typedef typename Iterator::first_type first_type;
+ typedef typename Iterator::last_type last_type;
+ typedef typename Iterator::concat_type concat_type;
+ typedef typename meta::next<first_type>::type next_type;
+ typedef meta::equal_to<next_type, last_type> equal_to;
+
+ typedef typename
+ mpl::if_<
+ equal_to
+ , concat_type
+ , joint_view_iterator<next_type, last_type, concat_type>
+ >::type
+ type;
+
+ static type
+ call(Iterator const& i);
+ };
+
+ template<typename Iterator>
+ typename next_traits_impl<Iterator>::type
+ call(Iterator const& i, mpl::true_)
+ {
+ return i.concat;
+ }
+
+ template<typename Iterator>
+ typename next_traits_impl<Iterator>::type
+ call(Iterator const& i, mpl::false_)
+ {
+ typedef typename next_traits_impl<Iterator>::type type;
+ return type(fusion::next(i.first), i.concat);
+ }
+
+ template<typename Iterator>
+ typename next_traits_impl<Iterator>::type
+ next_traits_impl<Iterator>::call(Iterator const& i)
+ {
+ return join_view_detail::call(i, equal_to());
+ }
+ }
+
+ namespace meta
+ {
+ template <typename Tag>
+ struct next_impl;
+
+ template <>
+ struct next_impl<joint_view_iterator_tag>
+ {
+ template <typename Iterator>
+ struct apply : join_view_detail::next_traits_impl<Iterator>
+ {};
+ };
+ }
+}}
+
+#endif
+
+
diff --git a/boost/boost/spirit/fusion/iterator/detail/joint_view_iterator/value_traits.hpp b/boost/boost/spirit/fusion/iterator/detail/joint_view_iterator/value_traits.hpp
new file mode 100644
index 00000000000..ed6431efd0f
--- /dev/null
+++ b/boost/boost/spirit/fusion/iterator/detail/joint_view_iterator/value_traits.hpp
@@ -0,0 +1,31 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ITERATOR_DETAIL_JOINT_VIEW_ITERATOR_VALUE_TRAITS_HPP)
+#define FUSION_ITERATOR_DETAIL_JOINT_VIEW_ITERATOR_VALUE_TRAITS_HPP
+
+#include <boost/spirit/fusion/detail/config.hpp>
+#include <boost/spirit/fusion/iterator/detail/adapt_value_traits.hpp>
+
+namespace boost { namespace fusion
+{
+ struct joint_view_iterator_tag;
+
+ namespace meta
+ {
+ template <typename Tag>
+ struct value_impl;
+
+ template <>
+ struct value_impl<joint_view_iterator_tag>
+ : detail::adapt_value_traits {};
+ }
+}}
+
+#endif
+
+
diff --git a/boost/boost/spirit/fusion/iterator/detail/single_view_iterator/deref_traits.hpp b/boost/boost/spirit/fusion/iterator/detail/single_view_iterator/deref_traits.hpp
new file mode 100644
index 00000000000..ac5b69b2255
--- /dev/null
+++ b/boost/boost/spirit/fusion/iterator/detail/single_view_iterator/deref_traits.hpp
@@ -0,0 +1,72 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ITERATOR_DETAIL_SINGLE_VIEW_ITERATOR_DEREF_TRAITS_HPP)
+#define FUSION_ITERATOR_DETAIL_SINGLE_VIEW_ITERATOR_DEREF_TRAITS_HPP
+
+#include <boost/spirit/fusion/detail/config.hpp>
+#include <boost/spirit/fusion/detail/access.hpp>
+#include <boost/mpl/identity.hpp>
+
+namespace boost { namespace fusion
+{
+ namespace detail
+ {
+ template <typename SingleView>
+ struct single_view_access_result
+ {
+ typedef typename
+ mpl::eval_if<
+ is_const<SingleView>
+ , cref_result<mpl::identity<FUSION_GET_VALUE_TYPE(SingleView)> >
+ , ref_result<mpl::identity<FUSION_GET_VALUE_TYPE(SingleView)> >
+ >::type
+ type;
+ };
+ }
+
+ namespace single_view_iterator_detail
+ {
+ template <typename Iterator>
+ struct deref_traits_impl
+ {
+ typedef typename Iterator::single_view_type single_view_type;
+ typedef typename detail::single_view_access_result<
+ single_view_type>::type
+ type;
+
+ static type
+ call(Iterator const& i);
+ };
+
+ template <typename Iterator>
+ inline typename deref_traits_impl<Iterator>::type
+ deref_traits_impl<Iterator>::call(Iterator const& i)
+ {
+ return detail::ref(i.view.val);
+ }
+ }
+
+ struct single_view_iterator_tag;
+
+ namespace meta
+ {
+ template <typename Tag>
+ struct deref_impl;
+
+ template <>
+ struct deref_impl<single_view_iterator_tag>
+ {
+ template <typename Iterator>
+ struct apply : single_view_iterator_detail::deref_traits_impl<Iterator> {};
+ };
+ }
+}}
+
+#endif
+
+
diff --git a/boost/boost/spirit/fusion/iterator/detail/single_view_iterator/next_traits.hpp b/boost/boost/spirit/fusion/iterator/detail/single_view_iterator/next_traits.hpp
new file mode 100644
index 00000000000..46521b456fc
--- /dev/null
+++ b/boost/boost/spirit/fusion/iterator/detail/single_view_iterator/next_traits.hpp
@@ -0,0 +1,62 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ITERATOR_DETAIL_SINGLE_VIEW_ITERATOR_NEXT_TRAITS_HPP)
+#define FUSION_ITERATOR_DETAIL_SINGLE_VIEW_ITERATOR_NEXT_TRAITS_HPP
+
+#include <boost/spirit/fusion/detail/config.hpp>
+
+namespace boost { namespace fusion
+{
+ struct single_view_iterator_tag;
+
+ template <typename SingleView>
+ struct single_view_iterator_end;
+
+ template <typename SingleView>
+ struct single_view_iterator;
+
+ namespace single_view_detail
+ {
+ template<typename Iterator>
+ struct next_traits_impl
+ {
+ typedef single_view_iterator_end<
+ typename Iterator::single_view_type>
+ type;
+
+ static type
+ call(Iterator);
+ };
+
+ template<typename Iterator>
+ typename next_traits_impl<Iterator>::type
+ next_traits_impl<Iterator>::call(Iterator)
+ {
+ FUSION_RETURN_DEFAULT_CONSTRUCTED;
+ }
+ }
+
+ namespace meta
+ {
+ template <typename Tag>
+ struct next_impl;
+
+ template <>
+ struct next_impl<single_view_iterator_tag>
+ {
+ template <typename Iterator>
+ struct apply : single_view_detail::next_traits_impl<Iterator>
+ {};
+ };
+ }
+}}
+
+#endif
+
+
diff --git a/boost/boost/spirit/fusion/iterator/detail/single_view_iterator/value_traits.hpp b/boost/boost/spirit/fusion/iterator/detail/single_view_iterator/value_traits.hpp
new file mode 100644
index 00000000000..86520cd9f8a
--- /dev/null
+++ b/boost/boost/spirit/fusion/iterator/detail/single_view_iterator/value_traits.hpp
@@ -0,0 +1,37 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ITERATOR_DETAIL_SINGLE_VIEW_ITERATOR_VALUE_TRAITS_HPP)
+#define FUSION_ITERATOR_DETAIL_SINGLE_VIEW_ITERATOR_VALUE_TRAITS_HPP
+
+#include <boost/spirit/fusion/detail/config.hpp>
+
+namespace boost { namespace fusion
+{
+ struct single_view_iterator_tag;
+
+ namespace meta
+ {
+ template <typename Tag>
+ struct value_impl;
+
+ template <>
+ struct value_impl<single_view_iterator_tag>
+ {
+ template <typename Iterator>
+ struct apply
+ {
+ typedef typename Iterator::single_view_type single_view_type;
+ typedef FUSION_GET_VALUE_TYPE(single_view_type) type;
+ };
+ };
+ }
+}}
+
+#endif
+
+
diff --git a/boost/boost/spirit/fusion/iterator/detail/transform_view_iterator/deref_traits.hpp b/boost/boost/spirit/fusion/iterator/detail/transform_view_iterator/deref_traits.hpp
new file mode 100644
index 00000000000..e481cf13fc9
--- /dev/null
+++ b/boost/boost/spirit/fusion/iterator/detail/transform_view_iterator/deref_traits.hpp
@@ -0,0 +1,59 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ITERATOR_DETAIL_TRANSFORM_VIEW_ITERATOR_DEREF_TRAITS_HPP)
+#define FUSION_ITERATOR_DETAIL_TRANSFORM_VIEW_ITERATOR_DEREF_TRAITS_HPP
+
+#include <boost/spirit/fusion/detail/config.hpp>
+#include <boost/spirit/fusion/iterator/deref.hpp>
+#include <boost/spirit/fusion/iterator/value_of.hpp>
+
+namespace boost { namespace fusion
+{
+ struct transform_view_iterator_tag;
+
+ namespace transform_view_detail {
+ template<typename Iterator>
+ struct deref_traits_impl {
+ typedef typename
+ meta::value_of<typename Iterator::first_type>::type
+ value_type;
+
+ typedef typename Iterator::transform_type transform_type;
+ typedef typename fusion_apply1<transform_type, value_type>::type type;
+
+ static type
+ call(Iterator const& i);
+ };
+
+ template<typename Iterator>
+ BOOST_DEDUCED_TYPENAME deref_traits_impl<Iterator>::type
+ deref_traits_impl<Iterator>::call(Iterator const& i)
+ {
+ return i.f(*i.first);
+ }
+ }
+
+ namespace meta
+ {
+ template <typename Tag>
+ struct deref_impl;
+
+ template <>
+ struct deref_impl<transform_view_iterator_tag>
+ {
+ template <typename Iterator>
+ struct apply : transform_view_detail::deref_traits_impl<Iterator>
+ {};
+ };
+ }
+}}
+
+#endif
+
+
diff --git a/boost/boost/spirit/fusion/iterator/detail/transform_view_iterator/next_traits.hpp b/boost/boost/spirit/fusion/iterator/detail/transform_view_iterator/next_traits.hpp
new file mode 100644
index 00000000000..cdf1b0a5ba6
--- /dev/null
+++ b/boost/boost/spirit/fusion/iterator/detail/transform_view_iterator/next_traits.hpp
@@ -0,0 +1,59 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ITERATOR_DETAIL_TRANSFORM_VIEW_ITERATOR_NEXT_TRAITS_HPP)
+#define FUSION_ITERATOR_DETAIL_TRANSFORM_VIEW_ITERATOR_NEXT_TRAITS_HPP
+
+#include <boost/spirit/fusion/detail/config.hpp>
+#include <boost/spirit/fusion/iterator/next.hpp>
+
+namespace boost { namespace fusion
+{
+ struct transform_view_iterator_tag;
+
+ template <typename First, typename F>
+ struct transform_view_iterator;
+
+ namespace transform_view_detail {
+ template <typename Iterator>
+ struct next_traits_impl
+ {
+ typedef typename Iterator::first_type first_type;
+ typedef typename meta::next<first_type>::type next_type;
+ typedef typename Iterator::transform_type transform_type;
+ typedef transform_view_iterator<next_type, transform_type> type;
+
+ static type
+ call(Iterator const& i);
+ };
+ template <typename Iterator>
+ typename next_traits_impl<Iterator>::type
+ next_traits_impl<Iterator>::call(Iterator const& i)
+ {
+ return type(fusion::next(i.first), i.f);
+ }
+ }
+
+ namespace meta
+ {
+ template <typename Tag>
+ struct next_impl;
+
+ template <>
+ struct next_impl<transform_view_iterator_tag>
+ {
+ template <typename Iterator>
+ struct apply : transform_view_detail::next_traits_impl<Iterator>
+ {};
+ };
+ }
+}}
+
+#endif
+
+
diff --git a/boost/boost/spirit/fusion/iterator/detail/transform_view_iterator/value_traits.hpp b/boost/boost/spirit/fusion/iterator/detail/transform_view_iterator/value_traits.hpp
new file mode 100644
index 00000000000..94e959b8863
--- /dev/null
+++ b/boost/boost/spirit/fusion/iterator/detail/transform_view_iterator/value_traits.hpp
@@ -0,0 +1,44 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ITERATOR_DETAIL_TRANSFORM_VIEW_ITERATOR_VALUE_TRAITS_HPP)
+#define FUSION_ITERATOR_DETAIL_TRANSFORM_VIEW_ITERATOR_VALUE_TRAITS_HPP
+
+#include <boost/spirit/fusion/detail/config.hpp>
+#include <boost/spirit/fusion/iterator/detail/adapt_value_traits.hpp>
+#include <boost/spirit/fusion/iterator/value_of.hpp>
+
+namespace boost { namespace fusion
+{
+ struct transform_view_iterator_tag;
+
+ namespace meta
+ {
+ template <typename Tag>
+ struct value_impl;
+
+ template <>
+ struct value_impl<transform_view_iterator_tag>
+ {
+ template <typename Iterator>
+ struct apply
+ {
+ typedef typename
+ meta::value_of<typename Iterator::first_type>::type
+ value_type;
+
+ typedef typename Iterator::transform_type transform_type;
+ typedef typename fusion_apply1<transform_type,value_type>::type type;
+ };
+ };
+ }
+}}
+
+#endif
+
+
diff --git a/boost/boost/spirit/fusion/iterator/detail/tuple_iterator/deref_traits.hpp b/boost/boost/spirit/fusion/iterator/detail/tuple_iterator/deref_traits.hpp
new file mode 100644
index 00000000000..5002c9ee04c
--- /dev/null
+++ b/boost/boost/spirit/fusion/iterator/detail/tuple_iterator/deref_traits.hpp
@@ -0,0 +1,66 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ITERATOR_DETAIL_TUPLE_ITERATOR_DEREF_TRAITS_HPP)
+#define FUSION_ITERATOR_DETAIL_TUPLE_ITERATOR_DEREF_TRAITS_HPP
+
+#include <boost/spirit/fusion/detail/config.hpp>
+#include <boost/spirit/fusion/detail/access.hpp>
+#include <boost/spirit/fusion/sequence/detail/tuple_access_result.hpp>
+
+namespace boost { namespace fusion
+{
+ struct tuple_iterator_tag;
+
+ namespace detail
+ {
+ template <int N>
+ struct tuple_access;
+ }
+
+ namespace tuple_iterator_detail
+ {
+ template <typename Iterator>
+ struct deref_traits_impl
+ {
+ typedef FUSION_GET_INDEX(Iterator) index;
+ typedef FUSION_GET_TUPLE(Iterator) tuple_;
+
+ typedef BOOST_DEDUCED_TYPENAME
+ boost::fusion::detail::tuple_access_result<
+ tuple_, FUSION_GET_VALUE(index)>::type
+ type;
+
+ static type
+ call(Iterator const& i);
+ };
+
+ template <typename Iterator>
+ inline typename deref_traits_impl<Iterator>::type
+ deref_traits_impl<Iterator>::call(Iterator const& i)
+ {
+ return detail::tuple_access<FUSION_GET_VALUE(index)>
+ ::get(detail::ref(i.get_tuple()));
+ }
+ }
+
+ namespace meta
+ {
+ template <typename Tag>
+ struct deref_impl;
+
+ template <>
+ struct deref_impl<tuple_iterator_tag>
+ {
+ template <typename Iterator>
+ struct apply :
+ tuple_iterator_detail::deref_traits_impl<Iterator> {};
+ };
+ }
+}}
+
+#endif
diff --git a/boost/boost/spirit/fusion/iterator/detail/tuple_iterator/equal_to_traits.hpp b/boost/boost/spirit/fusion/iterator/detail/tuple_iterator/equal_to_traits.hpp
new file mode 100644
index 00000000000..27dfc3434e4
--- /dev/null
+++ b/boost/boost/spirit/fusion/iterator/detail/tuple_iterator/equal_to_traits.hpp
@@ -0,0 +1,71 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ITERATOR_DETAIL_TUPLE_ITERATOR_EQUAL_TO_TRAITS_HPP)
+#define FUSION_ITERATOR_DETAIL_TUPLE_ITERATOR_EQUAL_TO_TRAITS_HPP
+
+#include <boost/spirit/fusion/detail/config.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/mpl/equal_to.hpp>
+#include <boost/mpl/and.hpp>
+
+namespace boost { namespace fusion
+{
+ struct tuple_iterator_tag;
+
+ namespace detail
+ {
+ template <typename I1, typename I2>
+ struct has_same_tags
+ : is_same<FUSION_GET_TAG(I1), FUSION_GET_TAG(I2)> {};
+
+ template <typename I1, typename I2>
+ struct has_same_index
+ : mpl::equal_to<FUSION_GET_INDEX(I1), FUSION_GET_INDEX(I2)>::type {};
+
+ template <typename I>
+ struct tuple_identity
+ {
+ typedef typename I::tuple tuple_type;
+ typedef typename tuple_type::identity_type type;
+ };
+
+ template <typename I1, typename I2>
+ struct has_same_tuple_identity
+ : is_same<
+ typename tuple_identity<I1>::type
+ , typename tuple_identity<I2>::type
+ >
+ {};
+
+ template <typename I1, typename I2>
+ struct tuple_iterator_equal_to
+ : mpl::and_<
+ has_same_index<I1, I2>
+ , has_same_tuple_identity<I1, I2>
+ >
+ {
+ BOOST_STATIC_ASSERT((has_same_tags<I1, I2>::value));
+ };
+ }
+
+ namespace meta
+ {
+ template <typename Tag>
+ struct equal_to_impl;
+
+ template <>
+ struct equal_to_impl<tuple_iterator_tag>
+ {
+ template <typename I1, typename I2>
+ struct apply : detail::tuple_iterator_equal_to<I1, I2> {};
+ };
+ }
+}}
+
+#endif
+
diff --git a/boost/boost/spirit/fusion/iterator/detail/tuple_iterator/next_traits.hpp b/boost/boost/spirit/fusion/iterator/detail/tuple_iterator/next_traits.hpp
new file mode 100644
index 00000000000..ead1e624767
--- /dev/null
+++ b/boost/boost/spirit/fusion/iterator/detail/tuple_iterator/next_traits.hpp
@@ -0,0 +1,65 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ITERATOR_DETAIL_TUPLE_ITERATOR_NEXT_TRAITS_HPP)
+#define FUSION_ITERATOR_DETAIL_TUPLE_ITERATOR_NEXT_TRAITS_HPP
+
+#include <boost/spirit/fusion/detail/config.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/mpl/next.hpp>
+#include <boost/mpl/less.hpp>
+
+namespace boost { namespace fusion
+{
+ struct tuple_iterator_tag;
+
+ template <int N, typename Tuple>
+ struct tuple_iterator;
+
+ namespace detail
+ {
+ template <typename Iterator>
+ struct tuple_iterator_next_traits_impl
+ {
+ typedef FUSION_GET_INDEX(Iterator) index;
+ typedef FUSION_GET_TUPLE(Iterator) tuple_;
+ typedef FUSION_GET_SIZE(tuple_) size;
+#if !BOOST_WORKAROUND(BOOST_MSVC,<=1300)
+ BOOST_STATIC_ASSERT((::boost::mpl::less<index, size>::value));
+#endif
+ typedef typename mpl::next<index>::type next;
+ typedef tuple_iterator<FUSION_GET_VALUE(next), tuple_> type;
+
+ static type
+ call(Iterator const& i);
+ };
+
+ template <typename Iterator>
+ inline typename tuple_iterator_next_traits_impl<Iterator>::type
+ tuple_iterator_next_traits_impl<Iterator>::call(Iterator const& i)
+ {
+ return type(detail::ref(i.get_tuple()));
+ }
+ }
+
+ namespace meta
+ {
+ template <typename Tag>
+ struct next_impl;
+
+ template <>
+ struct next_impl<tuple_iterator_tag>
+ {
+ template <typename Iterator>
+ struct apply : detail::tuple_iterator_next_traits_impl<Iterator> {};
+ };
+ }
+}}
+
+#endif
+
diff --git a/boost/boost/spirit/fusion/iterator/detail/tuple_iterator/prior_traits.hpp b/boost/boost/spirit/fusion/iterator/detail/tuple_iterator/prior_traits.hpp
new file mode 100644
index 00000000000..ac1ca17dbcd
--- /dev/null
+++ b/boost/boost/spirit/fusion/iterator/detail/tuple_iterator/prior_traits.hpp
@@ -0,0 +1,67 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ITERATOR_DETAIL_TUPLE_ITERATOR_PRIOR_TRAITS_HPP)
+#define FUSION_ITERATOR_DETAIL_TUPLE_ITERATOR_PRIOR_TRAITS_HPP
+
+#include <boost/spirit/fusion/detail/config.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/mpl/prior.hpp>
+#include <boost/mpl/greater_equal.hpp>
+#include <boost/mpl/int.hpp>
+
+namespace boost { namespace fusion
+{
+ struct tuple_iterator_tag;
+
+ template <int N, typename Tuple>
+ struct tuple_iterator;
+
+ namespace detail
+ {
+ template <typename Iterator>
+ struct tuple_iterator_prior_traits_impl
+ {
+ typedef FUSION_GET_INDEX(Iterator) index;
+ typedef FUSION_GET_TUPLE(Iterator) tuple_;
+ typedef FUSION_INT(0) other_index;
+#if !BOOST_WORKAROUND(BOOST_MSVC,<=1300)
+ BOOST_STATIC_ASSERT((
+ ::boost::mpl::greater_equal<index, other_index >::value));
+#endif
+ typedef typename mpl::prior<index>::type prior;
+ typedef tuple_iterator<FUSION_GET_VALUE(prior), tuple_> type;
+
+ static type
+ call(Iterator const& i);
+ };
+
+ template <typename Iterator>
+ inline typename tuple_iterator_prior_traits_impl<Iterator>::type
+ tuple_iterator_prior_traits_impl<Iterator>::call(Iterator const& i)
+ {
+ return type(detail::ref(i.get_tuple()));
+ }
+ }
+
+ namespace meta
+ {
+ template <typename Tag>
+ struct prior_impl;
+
+ template <>
+ struct prior_impl<tuple_iterator_tag>
+ {
+ template <typename Iterator>
+ struct apply : detail::tuple_iterator_prior_traits_impl<Iterator> {};
+ };
+ }
+}}
+
+#endif
+
diff --git a/boost/boost/spirit/fusion/iterator/detail/tuple_iterator/value_traits.hpp b/boost/boost/spirit/fusion/iterator/detail/tuple_iterator/value_traits.hpp
new file mode 100644
index 00000000000..1b5fca4d482
--- /dev/null
+++ b/boost/boost/spirit/fusion/iterator/detail/tuple_iterator/value_traits.hpp
@@ -0,0 +1,54 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ITERATOR_DETAIL_TUPLE_ITERATOR_VALUE_TRAITS_HPP)
+#define FUSION_ITERATOR_DETAIL_TUPLE_ITERATOR_VALUE_TRAITS_HPP
+
+#include <boost/spirit/fusion/detail/config.hpp>
+#include <boost/spirit/fusion/detail/access.hpp>
+#include <boost/spirit/fusion/sequence/tuple_element.hpp>
+
+namespace boost { namespace fusion
+{
+ struct tuple_iterator_tag;
+
+ namespace detail
+ {
+ template <int N>
+ struct tuple_access;
+ }
+
+ namespace detail
+ {
+ template <typename Iterator>
+ struct tuple_iterator_value_traits_impl
+ {
+ typedef FUSION_GET_INDEX(Iterator) index;
+ typedef FUSION_GET_TUPLE(Iterator) tuple_;
+
+ typedef BOOST_DEDUCED_TYPENAME
+ tuple_element<
+ FUSION_GET_VALUE(index), tuple_>::type
+ type;
+ };
+ }
+
+ namespace meta
+ {
+ template <typename Tag>
+ struct value_impl;
+
+ template <>
+ struct value_impl<tuple_iterator_tag>
+ {
+ template <typename Iterator>
+ struct apply : detail::tuple_iterator_value_traits_impl<Iterator> {};
+ };
+ }
+}}
+
+#endif
diff --git a/boost/boost/spirit/fusion/iterator/detail/type_sequence_iterator/deref_traits.hpp b/boost/boost/spirit/fusion/iterator/detail/type_sequence_iterator/deref_traits.hpp
new file mode 100644
index 00000000000..3f43ecaf48c
--- /dev/null
+++ b/boost/boost/spirit/fusion/iterator/detail/type_sequence_iterator/deref_traits.hpp
@@ -0,0 +1,57 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ITERATOR_DETAIL_TYPE_SEQUENCE_ITERATOR_DEREF_TRAITS_HPP)
+#define FUSION_ITERATOR_DETAIL_TYPE_SEQUENCE_ITERATOR_DEREF_TRAITS_HPP
+
+#include <boost/spirit/fusion/detail/config.hpp>
+#include <boost/spirit/fusion/detail/access.hpp>
+#include <boost/mpl/deref.hpp>
+
+namespace boost { namespace fusion
+{
+ namespace type_sequence_iterator_detail
+ {
+ template <typename Iterator>
+ struct deref_traits_impl
+ {
+ typedef typename mpl::deref<
+ typename Iterator::iterator_type>::type
+ type;
+
+ static type
+ call(Iterator);
+ };
+
+ template <typename Iterator>
+ inline typename deref_traits_impl<Iterator>::type
+ deref_traits_impl<Iterator>::call(Iterator)
+ {
+ FUSION_RETURN_DEFAULT_CONSTRUCTED;
+ }
+ }
+
+ struct type_sequence_iterator_tag;
+
+ namespace meta
+ {
+ template <typename Tag>
+ struct deref_impl;
+
+ template <>
+ struct deref_impl<type_sequence_iterator_tag>
+ {
+ template <typename Iterator>
+ struct apply
+ : type_sequence_iterator_detail::deref_traits_impl<Iterator> {};
+ };
+ }
+}}
+
+#endif
+
+
diff --git a/boost/boost/spirit/fusion/iterator/detail/type_sequence_iterator/next_traits.hpp b/boost/boost/spirit/fusion/iterator/detail/type_sequence_iterator/next_traits.hpp
new file mode 100644
index 00000000000..66e60ea4188
--- /dev/null
+++ b/boost/boost/spirit/fusion/iterator/detail/type_sequence_iterator/next_traits.hpp
@@ -0,0 +1,59 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ITERATOR_DETAIL_TYPE_SEQUENCE_ITERATOR_NEXT_TRAITS_HPP)
+#define FUSION_ITERATOR_DETAIL_TYPE_SEQUENCE_ITERATOR_NEXT_TRAITS_HPP
+
+#include <boost/spirit/fusion/detail/config.hpp>
+#include <boost/mpl/next.hpp>
+
+namespace boost { namespace fusion
+{
+ struct type_sequence_iterator_tag;
+
+ template <typename Iterator>
+ struct type_sequence_iterator;
+
+ namespace type_sequence_detail {
+ template <typename Iterator>
+ struct next_traits_impl
+ {
+ typedef type_sequence_iterator<
+ typename mpl::next<typename Iterator::iterator_type>::type
+ > type;
+
+ static type
+ call(Iterator);
+ };
+
+ template <typename Iterator>
+ typename next_traits_impl<Iterator>::type
+ next_traits_impl<Iterator>::call(Iterator)
+ {
+ FUSION_RETURN_DEFAULT_CONSTRUCTED;
+ }
+ }
+
+ namespace meta
+ {
+ template <typename Tag>
+ struct next_impl;
+
+ template <>
+ struct next_impl<type_sequence_iterator_tag>
+ {
+ template <typename Iterator>
+ struct apply : type_sequence_detail::next_traits_impl<Iterator>
+ {};
+ };
+ }
+}}
+
+#endif
+
+
diff --git a/boost/boost/spirit/fusion/iterator/detail/type_sequence_iterator/value_traits.hpp b/boost/boost/spirit/fusion/iterator/detail/type_sequence_iterator/value_traits.hpp
new file mode 100644
index 00000000000..4268b19cf65
--- /dev/null
+++ b/boost/boost/spirit/fusion/iterator/detail/type_sequence_iterator/value_traits.hpp
@@ -0,0 +1,39 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ITERATOR_DETAIL_TYPE_SEQUENCE_ITERATOR_VALUE_TRAITS_HPP)
+#define FUSION_ITERATOR_DETAIL_TYPE_SEQUENCE_ITERATOR_VALUE_TRAITS_HPP
+
+#include <boost/spirit/fusion/detail/config.hpp>
+#include <boost/mpl/deref.hpp>
+
+namespace boost { namespace fusion
+{
+ struct type_sequence_iterator_tag;
+
+ namespace meta
+ {
+ template <typename Tag>
+ struct value_impl;
+
+ template <>
+ struct value_impl<type_sequence_iterator_tag>
+ {
+ template <typename Iterator>
+ struct apply
+ {
+ typedef typename mpl::deref<
+ typename Iterator::iterator_type>::type
+ type;
+ };
+ };
+ }
+}}
+
+#endif
+
+
diff --git a/boost/boost/spirit/fusion/iterator/equal_to.hpp b/boost/boost/spirit/fusion/iterator/equal_to.hpp
new file mode 100644
index 00000000000..5daf835c4b5
--- /dev/null
+++ b/boost/boost/spirit/fusion/iterator/equal_to.hpp
@@ -0,0 +1,50 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ITERATOR_EQUAL_TO_HPP)
+#define FUSION_ITERATOR_EQUAL_TO_HPP
+
+#include <boost/spirit/fusion/detail/config.hpp>
+#include <boost/spirit/fusion/iterator/as_fusion_iterator.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/add_const.hpp>
+
+namespace boost { namespace fusion
+{
+ namespace meta
+ {
+ template <typename Tag>
+ struct equal_to_impl
+ {
+ template <typename I1, typename I2>
+ struct apply
+ {
+ typedef typename
+ is_same<
+ typename add_const<I1>::type
+ , typename add_const<I2>::type
+ >::type
+ type;
+ BOOST_STATIC_CONSTANT(bool, value = FUSION_GET_VALUE(type));
+ };
+ };
+
+ template <typename I1, typename I2>
+ struct equal_to
+ : detail::bool_base<
+ typename equal_to_impl<typename as_fusion_iterator<I1>::type::tag>::
+ template apply<
+ typename as_fusion_iterator<I1>::type
+ , typename as_fusion_iterator<I2>::type
+ >::type
+ > {};
+ }
+}}
+
+#endif
+
diff --git a/boost/boost/spirit/fusion/iterator/filter_view_iterator.hpp b/boost/boost/spirit/fusion/iterator/filter_view_iterator.hpp
new file mode 100644
index 00000000000..84b785745e7
--- /dev/null
+++ b/boost/boost/spirit/fusion/iterator/filter_view_iterator.hpp
@@ -0,0 +1,51 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ITERATOR_FILTER_VIEW_ITERATOR_HPP)
+#define FUSION_ITERATOR_FILTER_VIEW_ITERATOR_HPP
+
+#include <boost/spirit/fusion/iterator/as_fusion_iterator.hpp>
+#include <boost/spirit/fusion/iterator/detail/iterator_base.hpp>
+#include <boost/spirit/fusion/iterator/detail/filter_view_iterator/deref_traits.hpp>
+#include <boost/spirit/fusion/iterator/detail/filter_view_iterator/next_traits.hpp>
+#include <boost/spirit/fusion/iterator/detail/filter_view_iterator/value_traits.hpp>
+#include <boost/spirit/fusion/iterator/detail/filter_view_iterator/equal_to_traits.hpp>
+#include <boost/spirit/fusion/algorithm/detail/find_if.ipp>
+
+namespace boost { namespace fusion
+{
+ struct filter_view_iterator_tag;
+
+ template <typename First, typename Last, typename Pred>
+ struct filter_iterator : iterator_base<filter_iterator<First, Last, Pred> >
+ {
+ typedef as_fusion_iterator<First> first_converter;
+ typedef typename first_converter::type first_iter;
+ typedef as_fusion_iterator<Last> last_converter;
+ typedef typename last_converter::type last_iter;
+
+ typedef filter_view_iterator_tag tag;
+ typedef detail::static_find_if<first_iter, last_iter, Pred> filter;
+ typedef typename filter::type first_type;
+ typedef last_iter last_type;
+ typedef Pred pred_type;
+
+ filter_iterator(First const& first);
+
+ first_type first;
+ };
+
+ template <typename First, typename Last, typename Pred>
+ filter_iterator<First,Last,Pred>::filter_iterator(First const& first)
+ : first(filter::call(first_converter::convert(first)))
+ {}
+}}
+
+#endif
+
+
diff --git a/boost/boost/spirit/fusion/iterator/is_iterator.hpp b/boost/boost/spirit/fusion/iterator/is_iterator.hpp
new file mode 100644
index 00000000000..b0376efe477
--- /dev/null
+++ b/boost/boost/spirit/fusion/iterator/is_iterator.hpp
@@ -0,0 +1,32 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ITERATOR_IS_ITERATOR_HPP)
+#define FUSION_ITERATOR_IS_ITERATOR_HPP
+
+#include <boost/type_traits/is_base_and_derived.hpp>
+
+namespace boost { namespace fusion
+{
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // is_iterator metafunction
+ //
+ // Given a type T, returns a value true or false if T is a
+ // fusion iterator or not. Usage:
+ //
+ // is_iterator<T>::value
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ struct iterator_root;
+
+ template <typename T>
+ struct is_iterator : is_base_and_derived<iterator_root, T> {};
+
+}}
+
+#endif
diff --git a/boost/boost/spirit/fusion/iterator/joint_view_iterator.hpp b/boost/boost/spirit/fusion/iterator/joint_view_iterator.hpp
new file mode 100644
index 00000000000..031e2c3107c
--- /dev/null
+++ b/boost/boost/spirit/fusion/iterator/joint_view_iterator.hpp
@@ -0,0 +1,55 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ITERATOR_JOINT_VIEW_ITERATOR_HPP)
+#define FUSION_ITERATOR_JOINT_VIEW_ITERATOR_HPP
+
+#include <boost/spirit/fusion/iterator/as_fusion_iterator.hpp>
+#include <boost/spirit/fusion/iterator/detail/iterator_base.hpp>
+#include <boost/spirit/fusion/iterator/detail/joint_view_iterator/deref_traits.hpp>
+#include <boost/spirit/fusion/iterator/detail/joint_view_iterator/next_traits.hpp>
+#include <boost/spirit/fusion/iterator/detail/joint_view_iterator/value_traits.hpp>
+#include <boost/spirit/fusion/iterator/equal_to.hpp>
+
+namespace boost { namespace fusion
+{
+ struct joint_view_iterator_tag;
+
+ template <typename First, typename Last, typename Concat>
+ struct joint_view_iterator
+ : iterator_base<joint_view_iterator<First, Last, Concat> >
+ {
+ typedef as_fusion_iterator<First> first_converter;
+ typedef as_fusion_iterator<Last> last_converter;
+ typedef as_fusion_iterator<Concat> concat_converter;
+
+ typedef typename first_converter::type first_type;
+ typedef typename last_converter::type last_type;
+ typedef typename concat_converter::type concat_type;
+
+ typedef joint_view_iterator_tag tag;
+#if! BOOST_WORKAROUND(BOOST_MSVC,<=1300)
+ BOOST_STATIC_ASSERT((!meta::equal_to<first_type, last_type>::value));
+#endif
+ joint_view_iterator(First const& first, Concat const& concat);
+
+ first_type first;
+ concat_type concat;
+ };
+ template <typename First, typename Last, typename Concat>
+ joint_view_iterator<First,Last,Concat>::joint_view_iterator(First const& first, Concat const& concat)
+ : first(first_converter::convert(first))
+ , concat(concat_converter::convert(concat))
+ {}
+
+
+}}
+
+#endif
+
+
diff --git a/boost/boost/spirit/fusion/iterator/next.hpp b/boost/boost/spirit/fusion/iterator/next.hpp
new file mode 100644
index 00000000000..676257816ca
--- /dev/null
+++ b/boost/boost/spirit/fusion/iterator/next.hpp
@@ -0,0 +1,54 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ITERATOR_NEXT_HPP)
+#define FUSION_ITERATOR_NEXT_HPP
+
+#include <boost/spirit/fusion/detail/config.hpp>
+#include <boost/spirit/fusion/iterator/as_fusion_iterator.hpp>
+
+namespace boost { namespace fusion
+{
+ namespace meta
+ {
+ template <typename Tag>
+ struct next_impl
+ {
+ template <typename Iterator>
+ struct apply
+ {
+ // VC6 needs this
+ typedef int type;
+ };
+ };
+
+ template <typename Iterator>
+ struct next
+ {
+ typedef as_fusion_iterator<Iterator> converter;
+ typedef typename converter::type iter;
+
+ typedef typename
+ next_impl<FUSION_GET_TAG(iter)>::
+ template apply<iter>::type
+ type;
+ };
+ }
+
+ template <typename Iterator>
+ inline typename meta::next<Iterator>::type
+ next(Iterator const& i)
+ {
+ typedef as_fusion_iterator<Iterator> converter;
+ typedef typename converter::type iter;
+
+ return meta::next_impl<FUSION_GET_TAG(iter)>::
+ template apply<iter>::call(converter::convert(i));
+ }
+}}
+
+#endif
diff --git a/boost/boost/spirit/fusion/iterator/prior.hpp b/boost/boost/spirit/fusion/iterator/prior.hpp
new file mode 100644
index 00000000000..9ac539aebdf
--- /dev/null
+++ b/boost/boost/spirit/fusion/iterator/prior.hpp
@@ -0,0 +1,51 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ITERATOR_PRIOR_HPP)
+#define FUSION_ITERATOR_PRIOR_HPP
+
+#include <boost/spirit/fusion/detail/config.hpp>
+#include <boost/spirit/fusion/iterator/as_fusion_iterator.hpp>
+
+namespace boost { namespace fusion
+{
+ namespace meta
+ {
+ template <typename Tag>
+ struct prior_impl
+ {
+ template <typename Iterator>
+ struct apply {};
+ };
+
+ template <typename Iterator>
+ struct prior
+ {
+ typedef as_fusion_iterator<Iterator> converter;
+ typedef typename converter::type iter;
+
+ typedef typename
+ prior_impl<FUSION_GET_TAG(iter)>::
+ template apply<iter>::type
+ type;
+ };
+ }
+
+ template <typename Iterator>
+ inline typename meta::prior<Iterator>::type
+ prior(Iterator const& i)
+ {
+ typedef as_fusion_iterator<Iterator> converter;
+ typedef typename converter::type iter;
+
+ return meta::prior_impl<FUSION_GET_TAG(iter)>::
+ template apply<iter>::call(converter::convert(i));
+ }
+}}
+
+#endif
diff --git a/boost/boost/spirit/fusion/iterator/single_view_iterator.hpp b/boost/boost/spirit/fusion/iterator/single_view_iterator.hpp
new file mode 100644
index 00000000000..4762ea7ff1b
--- /dev/null
+++ b/boost/boost/spirit/fusion/iterator/single_view_iterator.hpp
@@ -0,0 +1,46 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ITERATOR_SINGLE_VIEW_ITERATOR_HPP)
+#define FUSION_ITERATOR_SINGLE_VIEW_ITERATOR_HPP
+
+#include <boost/spirit/fusion/detail/access.hpp>
+#include <boost/spirit/fusion/sequence/detail/as_tuple_element.hpp>
+#include <boost/spirit/fusion/iterator/detail/iterator_base.hpp>
+#include <boost/spirit/fusion/iterator/detail/single_view_iterator/deref_traits.hpp>
+#include <boost/spirit/fusion/iterator/detail/single_view_iterator/next_traits.hpp>
+#include <boost/spirit/fusion/iterator/detail/single_view_iterator/value_traits.hpp>
+
+namespace boost { namespace fusion
+{
+ struct single_view_iterator_tag;
+
+ template <typename SingleView>
+ struct single_view_iterator_end
+ : iterator_base<single_view_iterator_end<SingleView> >
+ {
+ typedef single_view_iterator_tag tag;
+ };
+
+ template <typename SingleView>
+ struct single_view_iterator
+ : iterator_base<single_view_iterator<SingleView> >
+ {
+ typedef single_view_iterator_tag tag;
+ typedef SingleView single_view_type;
+ typedef typename add_reference<SingleView>::type reference_type;
+
+ explicit single_view_iterator(reference_type view)
+ : view(view) {}
+
+ reference_type view;
+ };
+}}
+
+#endif
+
+
diff --git a/boost/boost/spirit/fusion/iterator/transform_view_iterator.hpp b/boost/boost/spirit/fusion/iterator/transform_view_iterator.hpp
new file mode 100644
index 00000000000..f98f7bc564e
--- /dev/null
+++ b/boost/boost/spirit/fusion/iterator/transform_view_iterator.hpp
@@ -0,0 +1,44 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ITERATOR_TRANSFORM_VIEW_ITERATOR_HPP)
+#define FUSION_ITERATOR_TRANSFORM_VIEW_ITERATOR_HPP
+
+#include <boost/spirit/fusion/iterator/as_fusion_iterator.hpp>
+#include <boost/spirit/fusion/iterator/detail/iterator_base.hpp>
+#include <boost/spirit/fusion/iterator/detail/transform_view_iterator/deref_traits.hpp>
+#include <boost/spirit/fusion/iterator/detail/transform_view_iterator/next_traits.hpp>
+#include <boost/spirit/fusion/iterator/detail/transform_view_iterator/value_traits.hpp>
+
+namespace boost { namespace fusion
+{
+ struct transform_view_iterator_tag;
+
+ template <typename First, typename F>
+ struct transform_view_iterator
+ : iterator_base<transform_view_iterator<First, F> >
+ {
+ typedef transform_view_iterator_tag tag;
+ typedef as_fusion_iterator<First> converter;
+ typedef typename converter::type first_type;
+ typedef F transform_type;
+
+ transform_view_iterator(First const& first, F f);
+
+ first_type first;
+ transform_type f;
+ };
+
+ template <typename First, typename F>
+ transform_view_iterator<First,F>::transform_view_iterator(First const& first, F f)
+ : first(converter::convert(first)), f(f) {}
+
+}}
+
+#endif
+
diff --git a/boost/boost/spirit/fusion/iterator/tuple_iterator.hpp b/boost/boost/spirit/fusion/iterator/tuple_iterator.hpp
new file mode 100644
index 00000000000..58cd5836849
--- /dev/null
+++ b/boost/boost/spirit/fusion/iterator/tuple_iterator.hpp
@@ -0,0 +1,97 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ITERATOR_TUPLE_ITERATOR_HPP)
+#define FUSION_ITERATOR_TUPLE_ITERATOR_HPP
+
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/spirit/fusion/iterator/detail/iterator_base.hpp>
+#include <boost/spirit/fusion/iterator/detail/tuple_iterator/deref_traits.hpp>
+#include <boost/spirit/fusion/iterator/detail/tuple_iterator/value_traits.hpp>
+#include <boost/spirit/fusion/iterator/detail/tuple_iterator/next_traits.hpp>
+#include <boost/spirit/fusion/iterator/detail/tuple_iterator/prior_traits.hpp>
+#include <boost/spirit/fusion/iterator/detail/tuple_iterator/equal_to_traits.hpp>
+#include <boost/spirit/fusion/sequence/detail/tuple_begin_end_traits.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/less.hpp>
+#include <boost/mpl/identity.hpp>
+
+namespace boost { namespace fusion
+{
+ struct tuple_iterator_tag;
+ struct void_t;
+
+ template <int N, typename Tuple>
+ struct tuple_iterator;
+
+ template <int N, typename Tuple>
+ struct tuple_iterator_base : iterator_base<tuple_iterator<N, Tuple> >
+ {
+ typedef FUSION_INT(N) index;
+ typedef Tuple tuple;
+ typedef tuple_iterator_tag tag;
+ typedef tuple_iterator<N, Tuple> self_type;
+ };
+
+ template <int N, typename Tuple>
+ struct tuple_iterator : tuple_iterator_base<N,Tuple>
+ {
+ typedef typename tuple_iterator_base<N,Tuple>::tuple tuple;
+ typedef typename tuple_iterator_base<N,Tuple>::index index;
+ typedef typename
+ mpl::eval_if<
+ mpl::less<index, typename Tuple::size>
+ , detail::tuple_iterator_next_traits_impl<tuple_iterator_base<N,Tuple> >
+ , mpl::identity<void_t>
+ >::type
+ next;
+
+ typedef typename
+ mpl::eval_if<
+ mpl::less<index, typename Tuple::size>
+ , detail::tuple_iterator_value_traits_impl<tuple_iterator_base<N,Tuple> >
+ , mpl::identity<void_t>
+ >::type
+ type;
+
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ tuple_iterator(tuple_iterator const& i);
+#else
+ template <int N2, typename Tuple2>
+ tuple_iterator(tuple_iterator<N2, Tuple2> const& i)
+ : t(static_cast<tuple&>(i.get_tuple())) {}
+#endif
+ tuple_iterator(tuple& t);
+
+ tuple&
+ get_tuple() const;
+ private:
+
+ tuple& t;
+ };
+
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ template <int N, typename Tuple>
+ tuple_iterator<N,Tuple>::tuple_iterator(tuple_iterator const& i)
+ : t(static_cast<tuple&>(i.get_tuple())) {}
+#endif
+
+ template <int N, typename Tuple>
+ tuple_iterator<N,Tuple>::tuple_iterator(tuple& t)
+ : t(t) {}
+
+ template <int N, typename Tuple>
+ typename tuple_iterator<N,Tuple>::tuple&
+ tuple_iterator<N,Tuple>::get_tuple() const
+ {
+ return t;
+ }
+}}
+
+#endif
diff --git a/boost/boost/spirit/fusion/iterator/type_sequence_iterator.hpp b/boost/boost/spirit/fusion/iterator/type_sequence_iterator.hpp
new file mode 100644
index 00000000000..afd9c2d1543
--- /dev/null
+++ b/boost/boost/spirit/fusion/iterator/type_sequence_iterator.hpp
@@ -0,0 +1,32 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_ITERATOR_TYPE_SEQUENCE_ITERATOR_HPP)
+#define FUSION_ITERATOR_TYPE_SEQUENCE_ITERATOR_HPP
+
+#include <boost/spirit/fusion/iterator/detail/iterator_base.hpp>
+#include <boost/spirit/fusion/iterator/detail/type_sequence_iterator/deref_traits.hpp>
+#include <boost/spirit/fusion/iterator/detail/type_sequence_iterator/next_traits.hpp>
+#include <boost/spirit/fusion/iterator/detail/type_sequence_iterator/value_traits.hpp>
+#include <boost/type_traits/remove_const.hpp>
+
+namespace boost { namespace fusion
+{
+ struct type_sequence_iterator_tag;
+
+ template <typename Iterator>
+ struct type_sequence_iterator
+ : iterator_base<type_sequence_iterator<Iterator> >
+ {
+ typedef type_sequence_iterator_tag tag;
+ typedef typename remove_const<Iterator>::type iterator_type;
+ };
+}}
+
+#endif
+
+
diff --git a/boost/boost/spirit/fusion/iterator/value_of.hpp b/boost/boost/spirit/fusion/iterator/value_of.hpp
new file mode 100644
index 00000000000..9a5a6e51c60
--- /dev/null
+++ b/boost/boost/spirit/fusion/iterator/value_of.hpp
@@ -0,0 +1,39 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_VALUE_OF_HPP)
+#define FUSION_VALUE_OF_HPP
+
+#include <boost/spirit/fusion/detail/config.hpp>
+
+namespace boost { namespace fusion
+{
+ namespace meta
+ {
+ template <typename Tag>
+ struct value_impl
+ {
+ template <typename Iterator>
+ struct apply
+ {
+ // VC6 needs this
+ typedef int type;
+ };
+ };
+
+ template <typename Iterator>
+ struct value_of
+ {
+ typedef typename
+ value_impl<FUSION_GET_TAG(Iterator)>::
+ template apply<Iterator>::type
+ type;
+ };
+ }
+}}
+
+#endif
diff --git a/boost/boost/spirit/fusion/sequence/append_view.hpp b/boost/boost/spirit/fusion/sequence/append_view.hpp
new file mode 100644
index 00000000000..be107617ed9
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/append_view.hpp
@@ -0,0 +1,29 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_APPEND_VIEW_HPP)
+#define FUSION_SEQUENCE_APPEND_VIEW_HPP
+
+#include <boost/spirit/fusion/detail/access.hpp>
+#include <boost/spirit/fusion/sequence/joint_view.hpp>
+#include <boost/spirit/fusion/sequence/single_view.hpp>
+
+namespace boost { namespace fusion
+{
+ template <typename View, typename T>
+ struct append_view : joint_view<View, single_view<T> >
+ {
+ append_view(View& view, typename detail::call_param<T>::type val)
+ : joint_view<View, single_view<T> >(view, held)
+ , held(val) {}
+ single_view<T> held;
+ };
+}}
+
+#endif
+
+
diff --git a/boost/boost/spirit/fusion/sequence/as_fusion_sequence.hpp b/boost/boost/spirit/fusion/sequence/as_fusion_sequence.hpp
new file mode 100644
index 00000000000..2b6312b99d8
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/as_fusion_sequence.hpp
@@ -0,0 +1,99 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_AS_FUSION_SEQUENCE_HPP)
+#define FUSION_SEQUENCE_AS_FUSION_SEQUENCE_HPP
+
+#include <boost/spirit/fusion/sequence/is_sequence.hpp>
+#include <boost/spirit/fusion/sequence/type_sequence.hpp>
+#include <boost/mpl/is_sequence.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/static_assert.hpp>
+
+namespace boost { namespace fusion
+{
+ // Test T. If it is a fusion sequence, return a reference to it.
+ // else, assume it is an mpl sequence. Fail if it is not.
+
+ namespace fusion_sequence_detail {
+ template<typename T>
+ static T const& convert_const(T const& x, mpl::true_) {
+ return x;
+ }
+ template<typename T>
+ static type_sequence<T const> convert_const(T const& x, mpl::false_) {
+ BOOST_STATIC_ASSERT(mpl::is_sequence<T>::value);
+ return type_sequence<T const>();
+ }
+ template<typename T>
+ static T& convert(T& x, mpl::true_)
+ {
+ return x;
+ }
+
+ template<typename T>
+ static type_sequence<T> convert(T& x, mpl::false_)
+ {
+ BOOST_STATIC_ASSERT(mpl::is_sequence<T>::value);
+ return type_sequence<T>();
+ }
+ }
+
+ template <typename T>
+ struct as_fusion_sequence {
+ typedef typename
+ mpl::if_<
+ fusion::is_sequence<T>
+ , T
+ , type_sequence<T>
+ >::type
+ type;
+
+ static typename
+ mpl::if_<
+ fusion::is_sequence<T>
+ , T const&
+ , type_sequence<T const>
+ >::type
+ convert_const(T const& x);
+
+ static typename
+ mpl::if_<
+ fusion::is_sequence<T>
+ , T &
+ , type_sequence<T>
+ >::type
+ convert(T& x);
+ };
+
+ template<typename T>
+ typename
+ mpl::if_<
+ fusion::is_sequence<T>
+ , T const&
+ , type_sequence<T const>
+ >::type
+ as_fusion_sequence<T>::convert_const(T const& x) {
+ return fusion_sequence_detail::convert_const(x,fusion::is_sequence<T>());
+ }
+
+ template<typename T>
+ typename
+ mpl::if_<
+ fusion::is_sequence<T>
+ , T&
+ , type_sequence<T>
+ >::type
+ as_fusion_sequence<T>::convert(T& x) {
+ return fusion_sequence_detail::convert(x,fusion::is_sequence<T>());
+ }
+}}
+
+
+#endif
diff --git a/boost/boost/spirit/fusion/sequence/at.hpp b/boost/boost/spirit/fusion/sequence/at.hpp
new file mode 100644
index 00000000000..c651737d821
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/at.hpp
@@ -0,0 +1,67 @@
+/*=============================================================================
+ Copyright (c) 1999-2003 Jaakko Järvi
+ Copyright (c) 2001-2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_AT_HPP)
+#define FUSION_SEQUENCE_AT_HPP
+
+#include <boost/spirit/fusion/detail/config.hpp>
+#include <boost/spirit/fusion/sequence/as_fusion_sequence.hpp>
+#include <boost/spirit/fusion/sequence/detail/sequence_base.hpp>
+
+namespace boost { namespace fusion
+{
+ namespace meta
+ {
+ template <typename Tag>
+ struct at_impl
+ {
+ template <typename Sequence, int N>
+ struct apply;
+ };
+
+ template <typename Sequence, int N>
+ struct at_c
+ {
+ typedef as_fusion_sequence<Sequence> seq_converter;
+ typedef typename seq_converter::type seq;
+
+ typedef typename
+ at_impl<FUSION_GET_TAG(seq)>::
+ template apply<seq, N>::type
+ type;
+ };
+
+ template <typename Sequence, typename N>
+ struct at : at_c<Sequence, N::value> {};
+ }
+#if! BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ template <int N, typename Sequence>
+ inline typename meta::at_c<Sequence const, N>::type
+ at(sequence_base<Sequence> const& seq FUSION_GET_MSVC_WORKAROUND)
+ {
+ typedef meta::at_c<Sequence const, N> at_meta;
+ return meta::at_impl<typename at_meta::seq::tag>::
+ template apply<typename at_meta::seq const, N>::call(
+ at_meta::seq_converter::convert_const(seq.cast()));
+ }
+
+ template <int N, typename Sequence>
+ inline typename meta::at_c<Sequence, N>::type
+ at(sequence_base<Sequence>& seq FUSION_GET_MSVC_WORKAROUND)
+ {
+ typedef meta::at_c<Sequence, N> at_meta;
+ return meta::at_impl<typename at_meta::seq::tag>::
+ template apply<typename at_meta::seq, N>::call(
+ at_meta::seq_converter::convert(seq.cast()));
+ }
+#endif
+}}
+
+#endif
+
diff --git a/boost/boost/spirit/fusion/sequence/begin.hpp b/boost/boost/spirit/fusion/sequence/begin.hpp
new file mode 100644
index 00000000000..6e1ff1fed21
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/begin.hpp
@@ -0,0 +1,93 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_BEGIN_HPP)
+#define FUSION_SEQUENCE_BEGIN_HPP
+
+#include <boost/spirit/fusion/detail/config.hpp>
+#include <boost/spirit/fusion/sequence/as_fusion_sequence.hpp>
+#include <boost/type_traits/is_const.hpp>
+namespace boost { namespace fusion
+{
+ namespace meta
+ {
+ template <typename Tag>
+ struct begin_impl
+ {
+ template <typename Sequence>
+ struct apply {
+ typedef int type;
+ };
+ };
+
+ template <typename Sequence>
+ struct begin
+ {
+ typedef as_fusion_sequence<Sequence> seq_converter;
+ typedef typename seq_converter::type seq;
+
+ typedef typename
+ begin_impl<typename seq::tag>::
+ template apply<seq>::type
+ type;
+ };
+ }
+
+#if BOOST_WORKAROUND(BOOST_MSVC,<=1300)
+ namespace detail {
+ template <typename Sequence>
+ inline typename meta::begin<Sequence const>::type
+ begin(Sequence const& seq,mpl::bool_<true>)
+ {
+ typedef meta::begin<Sequence const> begin_meta;
+ return meta::begin_impl<BOOST_DEDUCED_TYPENAME begin_meta::seq::tag>::
+ template apply<BOOST_DEDUCED_TYPENAME begin_meta::seq const>::call(
+ begin_meta::seq_converter::convert_const(seq));
+ }
+
+ template <typename Sequence>
+ inline typename meta::begin<Sequence>::type
+ begin(Sequence& seq,mpl::bool_<false>)
+ {
+ typedef meta::begin<Sequence> begin_meta;
+ return meta::begin_impl<BOOST_DEDUCED_TYPENAME begin_meta::seq::tag>::
+ template apply<BOOST_DEDUCED_TYPENAME begin_meta::seq>::call(
+ begin_meta::seq_converter::convert(seq));
+ }
+ }
+
+ template <typename Sequence>
+ inline typename meta::begin<Sequence>::type
+ begin(Sequence& seq)
+ {
+ return detail::begin(seq,is_const<Sequence>());
+ }
+#else
+ template <typename Sequence>
+ inline typename meta::begin<Sequence const>::type
+ begin(Sequence const& seq)
+ {
+ typedef meta::begin<Sequence const> begin_meta;
+ return meta::begin_impl<typename begin_meta::seq::tag>::
+ template apply<typename begin_meta::seq const>::call(
+ begin_meta::seq_converter::convert_const(seq));
+ }
+
+ template <typename Sequence>
+ inline typename meta::begin<Sequence>::type
+ begin(Sequence& seq)
+ {
+ typedef meta::begin<Sequence> begin_meta;
+ return meta::begin_impl<typename begin_meta::seq::tag>::
+ template apply<typename begin_meta::seq>::call(
+ begin_meta::seq_converter::convert(seq));
+ }
+#endif
+}}
+
+#endif
diff --git a/boost/boost/spirit/fusion/sequence/cons.hpp b/boost/boost/spirit/fusion/sequence/cons.hpp
new file mode 100644
index 00000000000..ad0e84a6507
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/cons.hpp
@@ -0,0 +1,69 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+ Copyright (c) 2005 Eric Niebler
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_CONS_HPP)
+#define FUSION_SEQUENCE_CONS_HPP
+
+#include <boost/call_traits.hpp>
+#include <boost/spirit/fusion/detail/access.hpp>
+#include <boost/spirit/fusion/sequence/begin.hpp>
+#include <boost/spirit/fusion/sequence/end.hpp>
+#include <boost/spirit/fusion/iterator/cons_iterator.hpp>
+#include <boost/spirit/fusion/sequence/detail/cons_begin_end_traits.hpp>
+#include <boost/spirit/fusion/sequence/as_fusion_sequence.hpp>
+
+namespace boost { namespace fusion
+{
+ struct void_t;
+
+ struct cons_tag;
+
+ struct nil : sequence_base<nil>
+ {
+ typedef cons_tag tag;
+ typedef void_t car_type;
+ typedef void_t cdr_type;
+ };
+
+ template <typename Car, typename Cdr = nil>
+ struct cons : sequence_base<cons<Car,Cdr> >
+ {
+ typedef cons_tag tag;
+ typedef typename call_traits<Car>::value_type car_type;
+ typedef Cdr cdr_type;
+
+ cons()
+ : car(), cdr() {}
+
+ explicit cons(
+ typename call_traits<Car>::param_type car_
+ , typename call_traits<Cdr>::param_type cdr_ = Cdr())
+ : car(car_), cdr(cdr_) {}
+
+ car_type car;
+ cdr_type cdr;
+ };
+
+ template <typename Car>
+ inline cons<Car>
+ make_cons(Car const& car)
+ {
+ return cons<Car>(car);
+ }
+
+ template <typename Car, typename Cdr>
+ inline cons<Car, Cdr>
+ make_cons(Car const& car, Cdr const& cdr)
+ {
+ return cons<Car, Cdr>(car, cdr);
+ }
+}}
+
+#endif
+
diff --git a/boost/boost/spirit/fusion/sequence/detail/as_tuple_element.hpp b/boost/boost/spirit/fusion/sequence/detail/as_tuple_element.hpp
new file mode 100644
index 00000000000..426a6840788
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/detail/as_tuple_element.hpp
@@ -0,0 +1,108 @@
+/*=============================================================================
+ Copyright (c) 1999-2003 Jaakko Järvi
+ Copyright (c) 2001-2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_DETAIL_AS_TUPLE_ELEMENT_HPP)
+#define FUSION_SEQUENCE_DETAIL_AS_TUPLE_ELEMENT_HPP
+
+#include <boost/ref.hpp>
+
+#if defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+# include <boost/mpl/eval_if.hpp>
+# include <boost/mpl/identity.hpp>
+# include <boost/type_traits/is_array.hpp>
+# include <boost/type_traits/is_convertible.hpp>
+#endif
+
+namespace boost { namespace fusion { namespace detail
+{
+#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+ template <typename T>
+ struct as_tuple_element
+ {
+ typedef T type;
+ };
+
+ template <typename T>
+ struct as_tuple_element<reference_wrapper<T> >
+ {
+ typedef T& type;
+ };
+
+#if !BOOST_WORKAROUND(__MWERKS__, <= 0x2407)
+
+ template <typename T>
+ struct as_tuple_element<reference_wrapper<T> const>
+ {
+ typedef T& type;
+ };
+
+#endif
+
+ template <typename T, int N>
+ struct as_tuple_element<T[N]>
+ {
+ typedef const T(&type)[N];
+ };
+
+ template <typename T, int N>
+ struct as_tuple_element<volatile T[N]>
+ {
+ typedef const volatile T(&type)[N];
+ };
+
+ template <typename T, int N>
+ struct as_tuple_element<const volatile T[N]>
+ {
+ typedef const volatile T(&type)[N];
+ };
+
+#else
+
+ // The Non-PTS version cannot accept arrays since there is no way to
+ // get the element type of an array T[N]. However, we shall provide
+ // the most common case where the array is a char[N] or wchar_t[N].
+ // Doing so will allow literal string argument types.
+
+ template <typename T>
+ struct maybe_string
+ {
+ typedef typename
+ mpl::eval_if<
+ is_array<T>
+ , mpl::eval_if<
+ is_convertible<T, char const*>
+ , mpl::identity<char const*>
+ , mpl::eval_if<
+ is_convertible<T, wchar_t const*>
+ , mpl::identity<wchar_t const*>
+ , mpl::identity<T>
+ >
+ >
+ , mpl::identity<T>
+ >::type
+ type;
+ };
+
+ template <typename T>
+ struct as_tuple_element
+ {
+ typedef typename
+ mpl::eval_if<
+ is_reference_wrapper<T>
+ , add_reference<typename unwrap_reference<T>::type>
+ , maybe_string<T>
+ >::type
+ type;
+ };
+
+#endif
+
+}}}
+
+#endif
diff --git a/boost/boost/spirit/fusion/sequence/detail/cons_begin_end_traits.hpp b/boost/boost/spirit/fusion/sequence/detail/cons_begin_end_traits.hpp
new file mode 100644
index 00000000000..53a2055fed8
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/detail/cons_begin_end_traits.hpp
@@ -0,0 +1,101 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+ Copyright (c) 2005 Eric Niebler
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_DETAIL_CONS_BEGIN_END_TRAITS_HPP)
+#define FUSION_SEQUENCE_DETAIL_CONS_BEGIN_END_TRAITS_HPP
+
+#include <boost/spirit/fusion/detail/config.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/is_const.hpp>
+
+namespace boost { namespace fusion
+{
+ struct nil;
+
+ struct cons_tag;
+
+ template <typename Car, typename Cdr>
+ struct cons;
+
+ template <typename Cons>
+ struct cons_iterator;
+
+ namespace cons_detail
+ {
+ template <typename Cons>
+ struct begin_traits_impl
+ {
+ typedef cons_iterator<Cons> type;
+
+ static type
+ call(Cons& t)
+ {
+ return type(t);
+ }
+ };
+
+ template <typename Cons>
+ struct end_traits_impl
+ {
+ typedef cons_iterator<
+ typename mpl::if_<is_const<Cons>, nil const, nil>::type>
+ type;
+
+ static type
+ call(Cons&)
+ {
+ FUSION_RETURN_DEFAULT_CONSTRUCTED;
+ }
+ };
+ }
+
+ namespace meta
+ {
+ template <typename Tag>
+ struct begin_impl;
+
+ template <>
+ struct begin_impl<cons_tag>
+ {
+ template <typename Sequence>
+ struct apply : cons_detail::begin_traits_impl<Sequence>
+ {};
+ };
+
+ template <typename Tag>
+ struct end_impl;
+
+ template <>
+ struct end_impl<cons_tag>
+ {
+ template <typename Sequence>
+ struct apply : cons_detail::end_traits_impl<Sequence>
+ {};
+ };
+ }
+}}
+
+namespace boost { namespace mpl
+{
+ template <typename Tag>
+ struct begin_impl;
+
+ template <typename Tag>
+ struct end_impl;
+
+ template <>
+ struct begin_impl<fusion::cons_tag>
+ : fusion::meta::begin_impl<fusion::cons_tag> {};
+
+ template <>
+ struct end_impl<fusion::cons_tag>
+ : fusion::meta::end_impl<fusion::cons_tag> {};
+}}
+
+#endif
diff --git a/boost/boost/spirit/fusion/sequence/detail/filter_view_begin_end_trts.hpp b/boost/boost/spirit/fusion/sequence/detail/filter_view_begin_end_trts.hpp
new file mode 100644
index 00000000000..630dab5ffec
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/detail/filter_view_begin_end_trts.hpp
@@ -0,0 +1,89 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_DETAIL_FILTER_VIEW_BEGIN_END_TRAITS_HPP)
+#define FUSION_SEQUENCE_DETAIL_FILTER_VIEW_BEGIN_END_TRAITS_HPP
+
+#include <boost/spirit/fusion/detail/config.hpp>
+
+namespace boost { namespace fusion
+{
+ struct filter_view_tag;
+
+ template <typename View, typename Pred>
+ struct filter_view;
+
+ template <typename First, typename Last, typename Pred>
+ struct filter_iterator;
+
+ namespace meta
+ {
+ template <typename Tag>
+ struct begin_impl;
+
+ template <>
+ struct begin_impl<filter_view_tag>
+ {
+ template <typename Sequence>
+ struct apply
+ {
+ typedef typename Sequence::first_type first_type;
+ typedef typename Sequence::last_type last_type;
+ typedef typename Sequence::pred_type pred_type;
+ typedef filter_iterator<first_type, last_type, pred_type> type;
+
+ static type
+ call(Sequence& s)
+ {
+ return type(s.first);
+ }
+ };
+ };
+
+ template <typename Tag>
+ struct end_impl;
+
+ template <>
+ struct end_impl<filter_view_tag>
+ {
+ template <typename Sequence>
+ struct apply
+ {
+ typedef typename Sequence::last_type last_type;
+ typedef typename Sequence::pred_type pred_type;
+ typedef filter_iterator<last_type, last_type, pred_type> type;
+
+ static type
+ call(Sequence& s)
+ {
+ return type(s.last);
+ }
+ };
+ };
+ }
+}}
+
+namespace boost { namespace mpl
+{
+ template <typename Tag>
+ struct begin_impl;
+
+ template <typename Tag>
+ struct end_impl;
+
+ template <>
+ struct begin_impl<fusion::filter_view_tag>
+ : fusion::meta::begin_impl<fusion::filter_view_tag> {};
+
+ template <>
+ struct end_impl<fusion::filter_view_tag>
+ : fusion::meta::end_impl<fusion::filter_view_tag> {};
+}}
+
+#endif
+
+
diff --git a/boost/boost/spirit/fusion/sequence/detail/generate.hpp b/boost/boost/spirit/fusion/sequence/detail/generate.hpp
new file mode 100644
index 00000000000..7e41b00cb96
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/detail/generate.hpp
@@ -0,0 +1,80 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_DETAIL_GENERATE_HPP)
+#define FUSION_SEQUENCE_DETAIL_GENERATE_HPP
+
+#include <boost/spirit/fusion/sequence/tuple.hpp>
+#include <boost/spirit/fusion/iterator/value_of.hpp>
+#include <boost/spirit/fusion/iterator/next.hpp>
+#include <boost/spirit/fusion/iterator/equal_to.hpp>
+#include <boost/preprocessor/repetition/repeat.hpp>
+#include <boost/preprocessor/repetition/enum.hpp>
+#include <boost/preprocessor/arithmetic/inc.hpp>
+#include <boost/preprocessor/arithmetic/dec.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+
+#define FUSION_DEREF_ITERATOR(z, n, data) \
+ typename checked_deref_iterator< \
+ BOOST_PP_CAT(T, n), Last>::type
+
+#define FUSION_NEXT_ITERATOR(z, n, data) \
+ typedef typename checked_next_iterator< \
+ BOOST_PP_CAT(T, n), Last>::type \
+ BOOST_PP_CAT(T, BOOST_PP_INC(n));
+
+namespace boost { namespace fusion { namespace detail
+{
+ template <typename First, typename Last>
+ struct checked_deref_iterator
+ {
+ typedef typename
+ mpl::eval_if<
+ meta::equal_to<First, Last>
+ , mpl::identity<void_t>
+ , meta::value_of<First>
+ >::type
+ type;
+ };
+
+ template <typename First, typename Last>
+ struct checked_next_iterator
+ {
+ typedef typename
+ mpl::eval_if<
+ meta::equal_to<First, Last>
+ , mpl::identity<Last>
+ , meta::next<First>
+ >::type
+ type;
+ };
+
+ template <typename First, typename Last>
+ struct result_of_generate
+ {
+ typedef First T0;
+ BOOST_PP_REPEAT(
+ BOOST_PP_DEC(FUSION_MAX_TUPLE_SIZE), FUSION_NEXT_ITERATOR, _)
+ typedef tuple<BOOST_PP_ENUM(FUSION_MAX_TUPLE_SIZE
+ , FUSION_DEREF_ITERATOR, _)> type;
+ };
+
+ template <typename First, typename Last>
+ inline typename result_of_generate<First, Last>::type
+ generate(First const& first, Last const&)
+ {
+ typedef typename result_of_generate<First, Last>::type result;
+ return result(first);
+ }
+}}}
+
+#undef FUSION_DEREF_ITERATOR
+#undef FUSION_NEXT_ITERATOR
+#endif
+
+
diff --git a/boost/boost/spirit/fusion/sequence/detail/io.hpp b/boost/boost/spirit/fusion/sequence/detail/io.hpp
new file mode 100644
index 00000000000..c12889bafe3
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/detail/io.hpp
@@ -0,0 +1,142 @@
+/*=============================================================================
+ Copyright (c) 1999-2003 Jaakko Järvi
+ Copyright (c) 1999-2003 Jeremiah Willcock
+ Copyright (c) 2001-2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_DETAIL_IO_HPP)
+#define FUSION_SEQUENCE_DETAIL_IO_HPP
+
+#include <iostream>
+#include <boost/spirit/fusion/sequence/detail/manip.hpp>
+
+#include <boost/mpl/bool.hpp>
+#include <boost/spirit/fusion/sequence/begin.hpp>
+#include <boost/spirit/fusion/sequence/end.hpp>
+#include <boost/spirit/fusion/iterator/deref.hpp>
+#include <boost/spirit/fusion/iterator/next.hpp>
+#include <boost/spirit/fusion/iterator/equal_to.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+ template <typename Tag>
+ struct delimiter_io
+ {
+ // print a delimiter
+ template <typename OS>
+ static void
+ print(OS& os, char const* delim, mpl::false_ = mpl::false_())
+ {
+ detail::string_ios_manip<Tag, OS> manip(os);
+ manip.print(delim);
+ }
+
+ template <typename OS>
+ static void
+ print(OS& os, char const* delim, mpl::true_)
+ {
+ }
+
+ // read a delimiter
+ template <typename IS>
+ static void
+ read(IS& is, char const* delim, mpl::false_ = mpl::false_())
+ {
+ detail::string_ios_manip<Tag, IS> manip(is);
+ manip.read(delim);
+ }
+
+ template <typename IS>
+ static void
+ read(IS& is, char const* delim, mpl::true_)
+ {
+ }
+ };
+
+ struct print_sequence_loop
+ {
+ template <typename OS, typename First, typename Last>
+ static void
+ call(OS& os, First const&, Last const&, mpl::true_)
+ {
+ }
+
+ template <typename OS, typename First, typename Last>
+ static void
+ call(OS& os, First const& first, Last const& last, mpl::false_)
+ {
+ meta::equal_to<
+ BOOST_DEDUCED_TYPENAME meta::next<First>::type
+ , Last
+ >
+ is_last;
+
+ os << *first;
+ delimiter_io<tuple_delimiter_tag>::print(os, " ", is_last);
+ call(os, fusion::next(first), last, is_last);
+ }
+
+ template <typename OS, typename First, typename Last>
+ static void
+ call(OS& os, First const& first, Last const& last)
+ {
+ meta::equal_to<First, Last> eq;
+ call(os, first, last, eq);
+ }
+ };
+
+ struct read_sequence_loop
+ {
+ template <typename IS, typename First, typename Last>
+ static void
+ call(IS& is, First const&, Last const&, mpl::true_)
+ {
+ }
+
+ template <typename IS, typename First, typename Last>
+ static void
+ call(IS& is, First const& first, Last const& last, mpl::false_)
+ {
+ meta::equal_to<
+ BOOST_DEDUCED_TYPENAME meta::next<First>::type
+ , Last
+ >
+ is_last;
+
+ is >> *first;
+ delimiter_io<tuple_delimiter_tag>::read(is, " ", is_last);
+ call(is, fusion::next(first), last, is_last);
+ }
+
+ template <typename IS, typename First, typename Last>
+ static void
+ call(IS& is, First const& first, Last const& last)
+ {
+ meta::equal_to<First, Last> eq;
+ call(is, first, last, eq);
+ }
+ };
+
+ template <typename OS, typename Sequence>
+ inline void
+ print_sequence(OS& os, Sequence const& seq)
+ {
+ delimiter_io<tuple_open_tag>::print(os, "(");
+ print_sequence_loop::call(os, fusion::begin(seq), fusion::end(seq));
+ delimiter_io<tuple_close_tag>::print(os, ")");
+ }
+
+ template <typename IS, typename Sequence>
+ inline void
+ read_sequence(IS& is, Sequence& seq)
+ {
+ delimiter_io<tuple_open_tag>::read(is, "(");
+ read_sequence_loop::call(is, fusion::begin(seq), fusion::end(seq));
+ delimiter_io<tuple_close_tag>::read(is, ")");
+ }
+}}}
+
+#endif
diff --git a/boost/boost/spirit/fusion/sequence/detail/joint_view_begin_end_traits.hpp b/boost/boost/spirit/fusion/sequence/detail/joint_view_begin_end_traits.hpp
new file mode 100644
index 00000000000..d98fa0cc1c2
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/detail/joint_view_begin_end_traits.hpp
@@ -0,0 +1,126 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_DETAIL_JOINT_VIEW_BEGIN_END_TRAITS_HPP)
+#define FUSION_SEQUENCE_DETAIL_JOINT_VIEW_BEGIN_END_TRAITS_HPP
+
+#include <boost/spirit/fusion/detail/config.hpp>
+#include <boost/spirit/fusion/iterator/equal_to.hpp>
+#include <boost/mpl/if.hpp>
+
+namespace boost { namespace fusion
+{
+ struct joint_view_tag;
+
+ template <typename First, typename Last, typename Concat>
+ struct joint_view_iterator;
+
+ namespace joint_view_detail {
+ template <typename Sequence>
+ struct begin_traits_impl
+ {
+ typedef typename Sequence::first_type first_type;
+ typedef typename Sequence::last_type last_type;
+ typedef typename Sequence::concat_type concat_type;
+ typedef boost::fusion::meta::equal_to<first_type, last_type> equal_to;
+
+ typedef typename
+ boost::mpl::if_<
+ equal_to
+ , concat_type
+ , boost::fusion::joint_view_iterator<first_type, last_type, concat_type>
+ >::type
+ type;
+
+ static type
+ call(Sequence& s);
+ };
+
+ template<typename Sequence>
+ typename begin_traits_impl<Sequence>::type
+ call(Sequence& s, boost::mpl::true_) {
+ return s.concat();
+ }
+
+ template<typename Sequence>
+ typename begin_traits_impl<Sequence>::type
+ call(Sequence& s, boost::mpl::false_) {
+ typedef BOOST_DEDUCED_TYPENAME begin_traits_impl<Sequence>::type type;
+ return type(s.first(), s.concat());
+ }
+
+ template<typename Sequence>
+ typename begin_traits_impl<Sequence>::type
+ begin_traits_impl<Sequence>::call(Sequence& s)
+ {
+ return joint_view_detail::call(s, equal_to());
+ }
+
+ template <typename Sequence>
+ struct end_traits_impl
+ {
+ typedef typename Sequence::concat_last_type type;
+
+ static type
+ call(Sequence& s);
+ };
+
+ template<typename Sequence>
+ typename end_traits_impl<Sequence>::type
+ end_traits_impl<Sequence>::call(Sequence& s)
+ {
+ return s.concat_last();
+ }
+ }
+
+ namespace meta
+ {
+ template <typename Tag>
+ struct begin_impl;
+
+ template <>
+ struct begin_impl<joint_view_tag>
+ {
+ template <typename Sequence>
+ struct apply : joint_view_detail::begin_traits_impl<Sequence>
+ {};
+ };
+
+ template <typename Tag>
+ struct end_impl;
+
+ template <>
+ struct end_impl<joint_view_tag>
+ {
+ template <typename Sequence>
+ struct apply : joint_view_detail::end_traits_impl<Sequence>
+ {};
+ };
+ }
+}}
+
+namespace boost { namespace mpl
+{
+ template <typename Tag>
+ struct begin_impl;
+
+ template <typename Tag>
+ struct end_impl;
+
+ template <>
+ struct begin_impl<fusion::joint_view_tag>
+ : fusion::meta::begin_impl<fusion::joint_view_tag> {};
+
+ template <>
+ struct end_impl<fusion::joint_view_tag>
+ : fusion::meta::end_impl<fusion::joint_view_tag> {};
+}}
+
+#endif
+
+
diff --git a/boost/boost/spirit/fusion/sequence/detail/manip.hpp b/boost/boost/spirit/fusion/sequence/detail/manip.hpp
new file mode 100644
index 00000000000..a402469af5d
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/detail/manip.hpp
@@ -0,0 +1,336 @@
+/*=============================================================================
+ Copyright (c) 1999-2003 Jeremiah Willcock
+ Copyright (c) 1999-2003 Jaakko Järvi
+ Copyright (c) 2001-2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#ifndef FUSION_SEQUENCE_DETAIL_MANIP_HPP
+#define FUSION_SEQUENCE_DETAIL_MANIP_HPP
+
+#include <boost/config.hpp>
+#include <iostream>
+#include <string>
+#include <vector>
+#include <cctype>
+
+// Tuple I/O manipulators
+
+#include <boost/spirit/fusion/detail/config.hpp>
+
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+FUSION_MSVC_ETI_WRAPPER(char_type)
+FUSION_MSVC_ETI_WRAPPER(traits_type)
+# define FUSION_GET_CHAR_TYPE(T) get_char_type<T>::type
+# define FUSION_GET_TRAITS_TYPE(T) get_traits_type<T>::type
+#else
+# define FUSION_GET_CHAR_TYPE(T) typename T::char_type
+# define FUSION_GET_TRAITS_TYPE(T) typename T::traits_type
+#endif
+
+#if defined (BOOST_NO_TEMPLATED_STREAMS)
+#define FUSION_STRING_OF_STREAM(Stream) std::string
+#else
+#define FUSION_STRING_OF_STREAM(Stream) \
+ std::basic_string< \
+ FUSION_GET_CHAR_TYPE(Stream) \
+ , FUSION_GET_TRAITS_TYPE(Stream) \
+ >
+#endif
+
+namespace boost { namespace fusion
+{
+ namespace detail
+ {
+ template <typename Tag>
+ int get_xalloc_index(Tag* = 0)
+ {
+ // each Tag will have a unique index
+ static int index = std::ios::xalloc();
+ return index;
+ }
+
+ template <typename Stream, typename Tag, typename T>
+ struct stream_data
+ {
+ struct arena
+ {
+ ~arena()
+ {
+ for (
+ typename std::vector<T*>::iterator i = data.begin()
+ ; i != data.end()
+ ; ++i)
+ {
+ delete *i;
+ }
+ }
+
+ std::vector<T*> data;
+ };
+
+ static void attach(Stream& stream, T const& data);
+ static T const* get(Stream& stream);
+ };
+
+ template <typename Stream, typename Tag, typename T>
+ void stream_data<Stream,Tag,T>::attach(Stream& stream, T const& data)
+ {
+ static arena ar; // our arena
+ ar.data.push_back(new T(data));
+ stream.pword(get_xalloc_index<Tag>()) = ar.data.back();
+ }
+
+ template <typename Stream, typename Tag, typename T>
+ T const* stream_data<Stream,Tag,T>::get(Stream& stream)
+ {
+ return (T const*)stream.pword(get_xalloc_index<Tag>());
+ }
+
+ template <class Tag, class Stream>
+ class string_ios_manip
+ {
+ public:
+
+ typedef FUSION_STRING_OF_STREAM(Stream) string_type;
+
+ typedef stream_data<Stream, Tag, string_type> stream_data_t;
+
+ string_ios_manip(Stream& str_);
+ void set(string_type const& s);
+ void print(char const* default_) const;
+ void read(char const* default_) const;
+ private:
+
+ template <typename Char>
+ void
+ check_delim(Char c) const
+ {
+ if (!isspace(c))
+ {
+ if (stream.get() != c)
+ {
+ stream.unget();
+ stream.setstate(std::ios::failbit);
+ }
+ }
+ }
+
+ Stream& stream;
+ };
+
+ template <class Tag, class Stream>
+ string_ios_manip<Tag,Stream>::string_ios_manip(Stream& str_)
+ : stream(str_)
+ {}
+
+ template <class Tag, class Stream>
+ void
+ string_ios_manip<Tag,Stream>::set(string_type const& s)
+ {
+ stream_data_t::attach(stream, s);
+ }
+
+ template <class Tag, class Stream>
+ void
+ string_ios_manip<Tag,Stream>::print(char const* default_) const
+ {
+ // print a delimiter
+ string_type const* p = stream_data_t::get(stream);
+ if (p)
+ stream << *p;
+ else
+ stream << default_;
+ }
+
+ template <class Tag, class Stream>
+ void
+ string_ios_manip<Tag,Stream>::read(char const* default_) const
+ {
+ // read a delimiter
+ string_type const* p = stream_data_t::get(stream);
+ using namespace std;
+ ws(stream);
+
+ if (p)
+ {
+ typedef typename string_type::const_iterator iterator;
+ for (iterator i = p->begin(); i != p->end(); ++i)
+ check_delim(*i);
+ }
+ else
+ {
+ while (*default_)
+ check_delim(*default_++);
+ }
+ }
+
+ } // detail
+
+#if defined (BOOST_NO_TEMPLATED_STREAMS)
+
+#define STD_TUPLE_DEFINE_MANIPULATOR(name) \
+ namespace detail \
+ { \
+ struct name##_tag; \
+ \
+ struct name##_type \
+ { \
+ typedef std::string string_type; \
+ string_type data; \
+ name##_type(const string_type& d): data(d) {} \
+ }; \
+ \
+ template <class Stream> \
+ Stream& operator>>(Stream& s, const name##_type& m) \
+ { \
+ string_ios_manip<name##_tag, Stream>(s).set(m.data); \
+ return s; \
+ } \
+ \
+ template <class Stream> \
+ Stream& operator<<(Stream& s, const name##_type& m) \
+ { \
+ string_ios_manip<name##_tag, Stream>(s).set(m.data); \
+ return s; \
+ } \
+ }
+
+#define STD_TUPLE_DEFINE_MANIPULATOR_FUNCTIONS(name) \
+ inline detail::name##_type \
+ name(const std::string& s) \
+ { \
+ return detail::name##_type(s); \
+ } \
+ \
+ inline detail::name##_type \
+ name(const char* s) \
+ { \
+ return detail::name##_type(std::string(s)); \
+ } \
+ \
+ inline detail::name##_type \
+ name(char c) \
+ { \
+ return detail::name##_type(std::string(1, c)); \
+ }
+
+#else // defined(BOOST_NO_TEMPLATED_STREAMS)
+
+#if defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
+
+#define STD_TUPLE_DEFINE_MANIPULATOR_FUNCTIONS(name) \
+ template <class Char, class Traits> \
+ inline detail::name##_type<Char, Traits> \
+ name(const std::basic_string<Char, Traits>& s) \
+ { \
+ return detail::name##_type<Char, Traits>(s); \
+ } \
+ \
+ inline detail::name##_type<char> \
+ name(char const* s) \
+ { \
+ return detail::name##_type<char>(std::basic_string<char>(s)); \
+ } \
+ \
+ inline detail::name##_type<wchar_t> \
+ name(wchar_t const* s) \
+ { \
+ return detail::name##_type<wchar_t>(std::basic_string<wchar_t>(s)); \
+ } \
+ \
+ inline detail::name##_type<char> \
+ name(char c) \
+ { \
+ return detail::name##_type<char>(std::basic_string<char>(1, c)); \
+ } \
+ \
+ inline detail::name##_type<wchar_t> \
+ name(wchar_t c) \
+ { \
+ return detail::name##_type<wchar_t>(std::basic_string<wchar_t>(1, c)); \
+ }
+
+#else // defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
+
+#define STD_TUPLE_DEFINE_MANIPULATOR_FUNCTIONS(name) \
+ template <class Char, class Traits> \
+ inline detail::name##_type<Char, Traits> \
+ name(const std::basic_string<Char, Traits>& s) \
+ { \
+ return detail::name##_type<Char, Traits>(s); \
+ } \
+ \
+ template <class Char> \
+ inline detail::name##_type<Char> \
+ name(Char s[]) \
+ { \
+ return detail::name##_type<Char>(std::basic_string<Char>(s)); \
+ } \
+ \
+ template <class Char> \
+ inline detail::name##_type<Char> \
+ name(Char const s[]) \
+ { \
+ return detail::name##_type<Char>(std::basic_string<Char>(s)); \
+ } \
+ \
+ template <class Char> \
+ inline detail::name##_type<Char> \
+ name(Char c) \
+ { \
+ return detail::name##_type<Char>(std::basic_string<Char>(1, c)); \
+ }
+
+#endif
+
+#define STD_TUPLE_DEFINE_MANIPULATOR(name) \
+ namespace detail \
+ { \
+ struct name##_tag; \
+ \
+ template <class Char, class Traits = std::char_traits<Char> > \
+ struct name##_type \
+ { \
+ typedef std::basic_string<Char, Traits> string_type; \
+ string_type data; \
+ name##_type(const string_type& d): data(d) {} \
+ }; \
+ \
+ template <class Stream, class Char, class Traits> \
+ Stream& operator>>(Stream& s, const name##_type<Char,Traits>& m) \
+ { \
+ string_ios_manip<name##_tag, Stream>(s).set(m.data); \
+ return s; \
+ } \
+ \
+ template <class Stream, class Char, class Traits> \
+ Stream& operator<<(Stream& s, const name##_type<Char,Traits>& m) \
+ { \
+ string_ios_manip<name##_tag, Stream>(s).set(m.data); \
+ return s; \
+ } \
+ } \
+
+#endif // defined(BOOST_NO_TEMPLATED_STREAMS)
+
+ STD_TUPLE_DEFINE_MANIPULATOR(tuple_open)
+ STD_TUPLE_DEFINE_MANIPULATOR(tuple_close)
+ STD_TUPLE_DEFINE_MANIPULATOR(tuple_delimiter)
+
+ STD_TUPLE_DEFINE_MANIPULATOR_FUNCTIONS(tuple_open)
+ STD_TUPLE_DEFINE_MANIPULATOR_FUNCTIONS(tuple_close)
+ STD_TUPLE_DEFINE_MANIPULATOR_FUNCTIONS(tuple_delimiter)
+
+#undef STD_TUPLE_DEFINE_MANIPULATOR
+#undef STD_TUPLE_DEFINE_MANIPULATOR_FUNCTIONS
+#undef FUSION_STRING_OF_STREAM
+#undef FUSION_GET_CHAR_TYPE
+#undef FUSION_GET_TRAITS_TYPE
+
+}}
+
+#endif
diff --git a/boost/boost/spirit/fusion/sequence/detail/range_begin_end_traits.hpp b/boost/boost/spirit/fusion/sequence/detail/range_begin_end_traits.hpp
new file mode 100644
index 00000000000..2bdae7bbbbb
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/detail/range_begin_end_traits.hpp
@@ -0,0 +1,104 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_DETAIL_RANGE_BEGIN_END_TRAITS_HPP)
+#define FUSION_SEQUENCE_DETAIL_RANGE_BEGIN_END_TRAITS_HPP
+
+#include <boost/spirit/fusion/detail/config.hpp>
+
+namespace boost { namespace fusion
+{
+ struct range_tag;
+
+ template <typename First, typename Last>
+ struct range;
+
+ template <typename Tag>
+ struct begin_impl;
+
+ namespace range_detail
+ {
+ template <typename Sequence>
+ struct begin_traits_impl
+ {
+ typedef typename Sequence::begin_type type;
+
+ static type
+ call(Sequence const& s);
+ };
+
+ template <typename Sequence>
+ inline typename begin_traits_impl<Sequence>::type
+ begin_traits_impl<Sequence>::call(Sequence const& s)
+ {
+ return s.first;
+ }
+
+ template <typename Sequence>
+ struct end_traits_impl
+ {
+ typedef typename Sequence::end_type type;
+
+ static type
+ call(Sequence const& s);
+ };
+
+ template <typename Sequence>
+ inline typename end_traits_impl<Sequence>::type
+ end_traits_impl<Sequence>::call(Sequence const& s)
+ {
+ return s.last;
+ }
+ }
+
+ namespace meta
+ {
+ template <typename Tag>
+ struct begin_impl;
+
+ template <>
+ struct begin_impl<range_tag>
+ {
+ template <typename Sequence>
+ struct apply : range_detail::begin_traits_impl<Sequence>
+ {};
+ };
+
+ template <typename Tag>
+ struct end_impl;
+
+ template <>
+ struct end_impl<range_tag>
+ {
+ template <typename Sequence>
+ struct apply : range_detail::end_traits_impl<Sequence>
+ {};
+ };
+ }
+}}
+
+namespace boost { namespace mpl
+{
+ template <typename Tag>
+ struct begin_impl;
+
+ template <typename Tag>
+ struct end_impl;
+
+ template <>
+ struct begin_impl<fusion::range_tag>
+ : fusion::meta::begin_impl<fusion::range_tag> {};
+
+ template <>
+ struct end_impl<fusion::range_tag>
+ : fusion::meta::end_impl<fusion::range_tag> {};
+}}
+
+#endif
+
+
diff --git a/boost/boost/spirit/fusion/sequence/detail/sequence_base.hpp b/boost/boost/spirit/fusion/sequence/detail/sequence_base.hpp
new file mode 100644
index 00000000000..782c3fdf3b0
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/detail/sequence_base.hpp
@@ -0,0 +1,42 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_DETAIL_SEQUENCE_BASE_HPP)
+#define FUSION_SEQUENCE_DETAIL_SEQUENCE_BASE_HPP
+
+namespace boost { namespace fusion
+{
+ struct sequence_root {};
+
+ template <typename Sequence>
+ struct sequence_base : sequence_root
+ {
+ Sequence const&
+ cast() const;
+
+ Sequence&
+ cast();
+ };
+
+ template <typename Sequence>
+ Sequence const&
+ sequence_base<Sequence>::cast() const
+ {
+ return static_cast<Sequence const&>(*this);
+ }
+
+ template <typename Sequence>
+ Sequence&
+ sequence_base<Sequence>::cast()
+ {
+ return static_cast<Sequence&>(*this);
+ }
+
+}}
+
+#endif
diff --git a/boost/boost/spirit/fusion/sequence/detail/sequence_equal_to.hpp b/boost/boost/spirit/fusion/sequence/detail/sequence_equal_to.hpp
new file mode 100644
index 00000000000..6daf3eefced
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/detail/sequence_equal_to.hpp
@@ -0,0 +1,60 @@
+/*=============================================================================
+ Copyright (c) 1999-2003 Jaakko Järvi
+ Copyright (c) 2001-2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_DETAIL_SEQUENCE_EQUAL_TO_HPP)
+#define FUSION_SEQUENCE_DETAIL_SEQUENCE_EQUAL_TO_HPP
+
+#include <boost/mpl/bool.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/spirit/fusion/iterator/deref.hpp>
+#include <boost/spirit/fusion/iterator/next.hpp>
+#include <boost/spirit/fusion/iterator/equal_to.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+ namespace sequence_equal_to_detail {
+ template<typename T,typename I1,typename I2>
+ bool call(T const& self,I1 const& a, I2 const& b) {
+ return fusion::deref(a) == fusion::deref(b)
+ && T::call(fusion::next(a), fusion::next(b));
+ }
+ }
+
+ template <typename Seq1, typename Seq2>
+ struct sequence_equal_to
+ {
+ typedef typename meta::end<Seq1>::type end1_type;
+ typedef typename meta::end<Seq2>::type end2_type;
+
+ template <typename I1, typename I2>
+ static bool
+ call(I1 const& a, I2 const& b)
+ {
+ typename meta::equal_to<I1, end1_type>::type eq;
+ return call(a, b, eq);
+ }
+
+ template <typename I1, typename I2>
+ static bool
+ call(I1 const&, I2 const&, mpl::true_)
+ {
+ BOOST_STATIC_ASSERT((meta::equal_to<I2, end2_type>::value));
+ return true;
+ }
+
+ template <typename I1, typename I2>
+ static bool
+ call(I1 const& a, I2 const& b, mpl::false_)
+ {
+ return sequence_equal_to_detail::call(sequence_equal_to<Seq1,Seq2>(),a,b);
+ }
+ };
+}}}
+
+#endif
diff --git a/boost/boost/spirit/fusion/sequence/detail/sequence_greater.hpp b/boost/boost/spirit/fusion/sequence/detail/sequence_greater.hpp
new file mode 100644
index 00000000000..49cbbe1d30c
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/detail/sequence_greater.hpp
@@ -0,0 +1,59 @@
+/*=============================================================================
+ Copyright (c) 1999-2003 Jaakko Järvi
+ Copyright (c) 2001-2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_DETAIL_SEQUENCE_GREATER_HPP)
+#define FUSION_SEQUENCE_DETAIL_SEQUENCE_GREATER_HPP
+
+#include <boost/mpl/bool.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/spirit/fusion/iterator/deref.hpp>
+#include <boost/spirit/fusion/iterator/next.hpp>
+#include <boost/spirit/fusion/iterator/equal_to.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+ namespace sequence_greater_detail {
+ template <typename T,typename I1, typename I2>
+ bool call(T const& self,I1 const& a, I2 const& b) {
+ return (*b < *a) || !(*a < *b) && T::call(fusion::next(a), fusion::next(b));
+ }
+ }
+
+ template <typename Seq1, typename Seq2>
+ struct sequence_greater
+ {
+ typedef typename meta::end<Seq1>::type end1_type;
+ typedef typename meta::end<Seq2>::type end2_type;
+
+ template <typename I1, typename I2>
+ static bool
+ call(I1 const& a, I2 const& b)
+ {
+ typename meta::equal_to<I1, end1_type>::type eq;
+ return call(a, b, eq);
+ }
+
+ template <typename I1, typename I2>
+ static bool
+ call(I1 const&, I2 const&, mpl::true_)
+ {
+ BOOST_STATIC_ASSERT((meta::equal_to<I2, end2_type>::value));
+ return false;
+ }
+
+ template <typename I1, typename I2>
+ static bool
+ call(I1 const& a, I2 const& b, mpl::false_)
+ {
+ return sequence_greater_detail::call(sequence_greater<Seq1,Seq2>(),a,b);
+ }
+ };
+}}}
+
+#endif
diff --git a/boost/boost/spirit/fusion/sequence/detail/sequence_greater_equal.hpp b/boost/boost/spirit/fusion/sequence/detail/sequence_greater_equal.hpp
new file mode 100644
index 00000000000..5ccbb9eb94a
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/detail/sequence_greater_equal.hpp
@@ -0,0 +1,60 @@
+/*=============================================================================
+ Copyright (c) 1999-2003 Jaakko Järvi
+ Copyright (c) 2001-2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_DETAIL_SEQUENCE_GREATER_EQUAL_HPP)
+#define FUSION_SEQUENCE_DETAIL_SEQUENCE_GREATER_EQUAL_HPP
+
+#include <boost/mpl/bool.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/spirit/fusion/iterator/deref.hpp>
+#include <boost/spirit/fusion/iterator/next.hpp>
+#include <boost/spirit/fusion/iterator/equal_to.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+ namespace sequence_greater_equal_detail {
+ template <typename T,typename I1, typename I2>
+ bool call(T const& self,I1 const& a, I2 const& b) {
+ return *b < *a
+ || !(*a < *b) && T::call(fusion::next(a), fusion::next(b));
+ }
+ }
+
+ template <typename Seq1, typename Seq2>
+ struct sequence_greater_equal
+ {
+ typedef typename meta::end<Seq1>::type end1_type;
+ typedef typename meta::end<Seq2>::type end2_type;
+
+ template <typename I1, typename I2>
+ static bool
+ call(I1 const& a, I2 const& b)
+ {
+ typename meta::equal_to<I1, end1_type>::type eq;
+ return call(a, b, eq);
+ }
+
+ template <typename I1, typename I2>
+ static bool
+ call(I1 const&, I2 const&, mpl::true_)
+ {
+ BOOST_STATIC_ASSERT((meta::equal_to<I2, end2_type>::value));
+ return true;
+ }
+
+ template <typename I1, typename I2>
+ static bool
+ call(I1 const& a, I2 const& b, mpl::false_)
+ {
+ return sequence_greater_equal_detail::call(sequence_greater_equal<Seq1,Seq2>(),a,b);
+ }
+ };
+}}}
+
+#endif
diff --git a/boost/boost/spirit/fusion/sequence/detail/sequence_less.hpp b/boost/boost/spirit/fusion/sequence/detail/sequence_less.hpp
new file mode 100644
index 00000000000..caf1a5872b5
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/detail/sequence_less.hpp
@@ -0,0 +1,61 @@
+/*=============================================================================
+ Copyright (c) 1999-2003 Jaakko Järvi
+ Copyright (c) 2001-2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_DETAIL_SEQUENCE_LESS_HPP)
+#define FUSION_SEQUENCE_DETAIL_SEQUENCE_LESS_HPP
+
+#include <boost/mpl/bool.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/spirit/fusion/iterator/deref.hpp>
+#include <boost/spirit/fusion/iterator/next.hpp>
+#include <boost/spirit/fusion/iterator/equal_to.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+ namespace sequence_less_detail {
+ template <typename T,typename I1, typename I2>
+ bool call(T const& self,I1 const& a, I2 const& b) {
+ return *a < *b
+ || !(*b < *a)
+ && T::call(fusion::next(a), fusion::next(b));
+ }
+ }
+
+ template <typename Seq1, typename Seq2>
+ struct sequence_less
+ {
+ typedef typename meta::end<Seq1>::type end1_type;
+ typedef typename meta::end<Seq2>::type end2_type;
+
+ template <typename I1, typename I2>
+ static bool
+ call(I1 const& a, I2 const& b)
+ {
+ typename meta::equal_to<I1, end1_type>::type eq;
+ return call(a, b, eq);
+ }
+
+ template <typename I1, typename I2>
+ static bool
+ call(I1 const&, I2 const&, mpl::true_)
+ {
+ BOOST_STATIC_ASSERT((meta::equal_to<I2, end2_type>::value));
+ return false;
+ }
+
+ template <typename I1, typename I2>
+ static bool
+ call(I1 const& a, I2 const& b, mpl::false_)
+ {
+ return sequence_less_detail::call(sequence_less<Seq1,Seq2>(),a,b);
+ }
+ };
+}}}
+
+#endif
diff --git a/boost/boost/spirit/fusion/sequence/detail/sequence_less_equal.hpp b/boost/boost/spirit/fusion/sequence/detail/sequence_less_equal.hpp
new file mode 100644
index 00000000000..e36a9800788
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/detail/sequence_less_equal.hpp
@@ -0,0 +1,59 @@
+/*=============================================================================
+ Copyright (c) 1999-2003 Jaakko Järvi
+ Copyright (c) 2001-2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_DETAIL_SEQUENCE_LESS_EQUAL_HPP)
+#define FUSION_SEQUENCE_DETAIL_SEQUENCE_LESS_EQUAL_HPP
+
+#include <boost/mpl/bool.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/spirit/fusion/iterator/deref.hpp>
+#include <boost/spirit/fusion/iterator/next.hpp>
+#include <boost/spirit/fusion/iterator/equal_to.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+ namespace sequence_less_equal_detail {
+ template <typename T,typename I1, typename I2>
+ bool call(T const& self,I1 const& a, I2 const& b) {
+ return *a < *b || !(*b < *a) && T::call(fusion::next(a), fusion::next(b));
+ }
+ }
+
+ template <typename Seq1, typename Seq2>
+ struct sequence_less_equal
+ {
+ typedef typename meta::end<Seq1>::type end1_type;
+ typedef typename meta::end<Seq2>::type end2_type;
+
+ template <typename I1, typename I2>
+ static bool
+ call(I1 const& a, I2 const& b)
+ {
+ typename meta::equal_to<I1, end1_type>::type eq;
+ return call(a, b, eq);
+ }
+
+ template <typename I1, typename I2>
+ static bool
+ call(I1 const&, I2 const&, mpl::true_)
+ {
+ BOOST_STATIC_ASSERT((meta::equal_to<I2, end2_type>::value));
+ return true;
+ }
+
+ template <typename I1, typename I2>
+ static bool
+ call(I1 const& a, I2 const& b, mpl::false_)
+ {
+ return sequence_less_equal_detail::call(sequence_less_equal<Seq1,Seq2>(),a,b);
+ }
+ };
+}}}
+
+#endif
diff --git a/boost/boost/spirit/fusion/sequence/detail/sequence_not_equal_to.hpp b/boost/boost/spirit/fusion/sequence/detail/sequence_not_equal_to.hpp
new file mode 100644
index 00000000000..e230c291792
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/detail/sequence_not_equal_to.hpp
@@ -0,0 +1,59 @@
+/*=============================================================================
+ Copyright (c) 1999-2003 Jaakko Järvi
+ Copyright (c) 2001-2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_DETAIL_SEQUENCE_NOT_EQUAL_TO_HPP)
+#define FUSION_SEQUENCE_DETAIL_SEQUENCE_NOT_EQUAL_TO_HPP
+
+#include <boost/mpl/bool.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/spirit/fusion/iterator/deref.hpp>
+#include <boost/spirit/fusion/iterator/next.hpp>
+#include <boost/spirit/fusion/iterator/equal_to.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+ namespace sequence_not_equal_to_detail {
+ template <typename T,typename I1, typename I2>
+ bool call(T const& self,I1 const& a, I2 const& b) {
+ return !(*a == *b)
+ || T::call(fusion::next(a), fusion::next(b));
+ }
+ }
+ template <typename Seq1, typename Seq2>
+ struct sequence_not_equal_to
+ {
+ typedef typename meta::end<Seq1>::type end1_type;
+ typedef typename meta::end<Seq2>::type end2_type;
+
+ template <typename I1, typename I2>
+ static bool
+ call(I1 const& a, I2 const& b)
+ {
+ typename meta::equal_to<I1, end1_type>::type eq;
+ return call(a, b, eq);
+ }
+
+ template <typename I1, typename I2>
+ static bool
+ call(I1 const&, I2 const&, mpl::true_)
+ {
+ BOOST_STATIC_ASSERT((meta::equal_to<I2, end2_type>::value));
+ return false;
+ }
+
+ template <typename I1, typename I2>
+ static bool
+ call(I1 const& a, I2 const& b, mpl::false_)
+ {
+ return sequence_not_equal_to_detail::call(sequence_not_equal_to<Seq1,Seq2>(),a,b);
+ }
+ };
+}}}
+
+#endif
diff --git a/boost/boost/spirit/fusion/sequence/detail/single_view_begin_end_trts.hpp b/boost/boost/spirit/fusion/sequence/detail/single_view_begin_end_trts.hpp
new file mode 100644
index 00000000000..86173e28eb4
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/detail/single_view_begin_end_trts.hpp
@@ -0,0 +1,101 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_DETAIL_SINGLE_VIEW_BEGIN_END_TRAITS_HPP)
+#define FUSION_SEQUENCE_DETAIL_SINGLE_VIEW_BEGIN_END_TRAITS_HPP
+
+#include <boost/spirit/fusion/detail/config.hpp>
+
+namespace boost { namespace fusion
+{
+ struct single_view_tag;
+
+ template <typename T>
+ struct single_view_iterator_end;
+
+ template <typename T>
+ struct single_view_iterator;
+
+ namespace single_view_detail
+ {
+ template <typename Sequence>
+ struct begin_traits_impl
+ {
+ typedef single_view_iterator<Sequence> type;
+
+ static type
+ call(Sequence& s);
+ };
+
+ template <typename Sequence>
+ inline typename begin_traits_impl<Sequence>::type
+ begin_traits_impl<Sequence>::call(Sequence& s)
+ {
+ return type(s);
+ }
+
+ template <typename Sequence>
+ struct end_traits_impl
+ {
+ typedef single_view_iterator_end<Sequence> type;
+
+ static type
+ call(Sequence&);
+ };
+
+ template <typename Sequence>
+ inline typename end_traits_impl<Sequence>::type
+ end_traits_impl<Sequence>::call(Sequence&)
+ {
+ FUSION_RETURN_DEFAULT_CONSTRUCTED;
+ }
+ }
+
+ namespace meta
+ {
+ template <typename Tag>
+ struct begin_impl;
+
+ template <>
+ struct begin_impl<single_view_tag>
+ {
+ template <typename Sequence>
+ struct apply : single_view_detail::begin_traits_impl<Sequence> {};
+ };
+
+ template <typename Tag>
+ struct end_impl;
+
+ template <>
+ struct end_impl<single_view_tag>
+ {
+ template <typename Sequence>
+ struct apply : single_view_detail::end_traits_impl<Sequence> {};
+ };
+ }
+}}
+
+namespace boost { namespace mpl
+{
+ template <typename Tag>
+ struct begin_impl;
+
+ template <typename Tag>
+ struct end_impl;
+
+ template <>
+ struct begin_impl<fusion::single_view_tag>
+ : fusion::meta::begin_impl<fusion::single_view_tag> {};
+
+ template <>
+ struct end_impl<fusion::single_view_tag>
+ : fusion::meta::end_impl<fusion::single_view_tag> {};
+}}
+
+#endif
+
+
diff --git a/boost/boost/spirit/fusion/sequence/detail/trsfrm_view_begin_end_trts.hpp b/boost/boost/spirit/fusion/sequence/detail/trsfrm_view_begin_end_trts.hpp
new file mode 100644
index 00000000000..19e513c9c45
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/detail/trsfrm_view_begin_end_trts.hpp
@@ -0,0 +1,88 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_DETAIL_TRANSFORM_VIEW_BEGIN_END_TRAITS_HPP)
+#define FUSION_SEQUENCE_DETAIL_TRANSFORM_VIEW_BEGIN_END_TRAITS_HPP
+
+#include <boost/spirit/fusion/detail/config.hpp>
+
+namespace boost { namespace fusion
+{
+ struct transform_view_tag;
+
+ template <typename Sequence, typename F>
+ struct transform_view;
+
+ template <typename First, typename F>
+ struct transform_view_iterator;
+
+ namespace meta
+ {
+ template <typename Tag>
+ struct begin_impl;
+
+ template <>
+ struct begin_impl<transform_view_tag>
+ {
+ template <typename Sequence>
+ struct apply
+ {
+ typedef typename Sequence::first_type first_type;
+ typedef typename Sequence::transform_type transform_type;
+ typedef transform_view_iterator<first_type, transform_type> type;
+
+ static type
+ call(Sequence& s)
+ {
+ return type(s.first, s.f);
+ }
+ };
+ };
+
+ template <typename Tag>
+ struct end_impl;
+
+ template <>
+ struct end_impl<transform_view_tag>
+ {
+ template <typename Sequence>
+ struct apply
+ {
+ typedef typename Sequence::last_type last_type;
+ typedef typename Sequence::transform_type transform_type;
+ typedef transform_view_iterator<last_type, transform_type> type;
+
+ static type
+ call(Sequence& s)
+ {
+ return type(s.last, s.f);
+ }
+ };
+ };
+ }
+}}
+
+namespace boost { namespace mpl
+{
+ template <typename Tag>
+ struct begin_impl;
+
+ template <typename Tag>
+ struct end_impl;
+
+ template <>
+ struct begin_impl<fusion::transform_view_tag>
+ : fusion::meta::begin_impl<fusion::transform_view_tag> {};
+
+ template <>
+ struct end_impl<fusion::transform_view_tag>
+ : fusion::meta::end_impl<fusion::transform_view_tag> {};
+}}
+
+#endif
+
+
diff --git a/boost/boost/spirit/fusion/sequence/detail/tuple10.hpp b/boost/boost/spirit/fusion/sequence/detail/tuple10.hpp
new file mode 100644
index 00000000000..c24f196f129
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/detail/tuple10.hpp
@@ -0,0 +1,123 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_DETAIL_TUPLE10_HPP)
+#define FUSION_SEQUENCE_DETAIL_TUPLE10_HPP
+
+#include <boost/spirit/fusion/detail/config.hpp>
+#include <boost/spirit/fusion/detail/access.hpp>
+#include <boost/spirit/fusion/iterator/tuple_iterator.hpp>
+#include <boost/spirit/fusion/sequence/detail/tuple_access_result.hpp>
+#include <boost/spirit/fusion/sequence/detail/tuple_value_at_traits.hpp>
+#include <boost/spirit/fusion/sequence/detail/tuple_at_traits.hpp>
+#include <boost/spirit/fusion/sequence/detail/tuple_size_traits.hpp>
+#include <boost/spirit/fusion/sequence/detail/tuple_begin_end_traits.hpp>
+#include <boost/spirit/fusion/sequence/detail/sequence_base.hpp>
+#include <boost/spirit/fusion/iterator/next.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/at.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/vector/vector10.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/type_traits/is_base_and_derived.hpp>
+#include <boost/preprocessor/iteration/iterate.hpp>
+
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+# include <boost/spirit/fusion/iterator/next.hpp>
+#endif
+
+namespace boost { namespace fusion
+{
+ namespace detail
+ {
+ struct disambiguate_as_tuple {};
+ struct disambiguate_as_data {};
+ struct disambiguate_as_iterator {};
+
+ template <typename X, typename T0>
+ struct disambiguate
+ {
+ typedef typename
+ mpl::if_<
+ is_convertible<X, T0>
+ , disambiguate_as_data
+ , typename mpl::if_<
+ is_base_and_derived<sequence_root, X>
+ , disambiguate_as_tuple
+ , disambiguate_as_iterator
+ >::type
+ >::type
+ type;
+
+ static type
+ call()
+ {
+ FUSION_RETURN_DEFAULT_CONSTRUCTED;
+ }
+ };
+
+ template <int N>
+ struct tuple_access;
+
+ template <>
+ struct tuple_access<0>
+ {
+ template <typename Tuple>
+ static typename tuple_access_result<Tuple, 0>::type
+ get(Tuple& t)
+ {
+ FUSION_RETURN_TUPLE_MEMBER(0);
+ }
+ };
+
+ template <>
+ struct tuple_access<1>
+ {
+ template <typename Tuple>
+ static typename tuple_access_result<Tuple, 1>::type
+ get(Tuple& t)
+ {
+ FUSION_RETURN_TUPLE_MEMBER(1);
+ }
+ };
+
+ template <>
+ struct tuple_access<2>
+ {
+ template <typename Tuple>
+ static typename tuple_access_result<Tuple, 2>::type
+ get(Tuple& t)
+ {
+ FUSION_RETURN_TUPLE_MEMBER(2);
+ }
+ };
+
+}}} // namespace boost::fusion::detail
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Bring in the rest of the fixed-tuples using the pre-processor. Generate
+// expansions for the tuple_access<N> and tupleN+1 classes for N = 3..10.
+//
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/fusion/sequence/detail/tuple_macro.hpp>
+
+namespace boost { namespace fusion
+{
+ namespace detail
+ {
+ BOOST_PP_REPEAT_FROM_TO(3, 10, FUSION_TUPLE_N_ACCESS, _)
+ }
+
+ struct tuple_tag;
+
+# define BOOST_PP_ITERATION_PARAMS_1 (3, (4, 10, <boost/spirit/fusion/sequence/detail/tuple_body.hpp>))
+# include BOOST_PP_ITERATE()
+}}
+
+#endif
diff --git a/boost/boost/spirit/fusion/sequence/detail/tuple_access_result.hpp b/boost/boost/spirit/fusion/sequence/detail/tuple_access_result.hpp
new file mode 100644
index 00000000000..eb18b88711f
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/detail/tuple_access_result.hpp
@@ -0,0 +1,33 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_DETAIL_TUPLE_ACCESS_RESULT_HPP)
+#define FUSION_SEQUENCE_DETAIL_TUPLE_ACCESS_RESULT_HPP
+
+#include <boost/spirit/fusion/detail/config.hpp>
+#include <boost/spirit/fusion/detail/access.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/mpl/at.hpp>
+#include <boost/mpl/eval_if.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+ template <typename Tuple, int N>
+ struct tuple_access_result
+ {
+ typedef mpl::at_c<FUSION_GET_TYPES(Tuple), N> element;
+ typedef typename
+ mpl::eval_if<
+ is_const<Tuple>
+ , cref_result<element>
+ , ref_result<element>
+ >::type
+ type;
+ };
+}}}
+
+#endif
diff --git a/boost/boost/spirit/fusion/sequence/detail/tuple_at_traits.hpp b/boost/boost/spirit/fusion/sequence/detail/tuple_at_traits.hpp
new file mode 100644
index 00000000000..f1be6119d2e
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/detail/tuple_at_traits.hpp
@@ -0,0 +1,60 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_DETAIL_TUPLE_AT_TRAITS_HPP)
+#define FUSION_SEQUENCE_DETAIL_TUPLE_AT_TRAITS_HPP
+
+#include <boost/spirit/fusion/detail/config.hpp>
+#include <boost/spirit/fusion/detail/access.hpp>
+#include <boost/spirit/fusion/sequence/detail/tuple_access_result.hpp>
+
+namespace boost { namespace fusion
+{
+ struct tuple_tag;
+
+ namespace detail
+ {
+ template <int N>
+ struct tuple_access;
+ }
+
+ namespace detail
+ {
+ template <typename Sequence, int N>
+ struct tuple_at_impl
+ {
+ typedef BOOST_DEDUCED_TYPENAME
+ boost::fusion::detail::tuple_access_result<Sequence, N>::type
+ type;
+
+ static type
+ call(Sequence& t);
+ };
+
+ template <typename Sequence, int N>
+ inline typename tuple_at_impl<Sequence, N>::type
+ tuple_at_impl<Sequence, N>::call(Sequence& t)
+ {
+ return detail::tuple_access<N>::get(t);
+ }
+ }
+
+ namespace meta
+ {
+ template <typename Tag>
+ struct at_impl;
+
+ template <>
+ struct at_impl<tuple_tag>
+ {
+ template <typename Sequence, int N>
+ struct apply : detail::tuple_at_impl<Sequence, N> {};
+ };
+ }
+}}
+
+#endif
diff --git a/boost/boost/spirit/fusion/sequence/detail/tuple_begin_end_traits.hpp b/boost/boost/spirit/fusion/sequence/detail/tuple_begin_end_traits.hpp
new file mode 100644
index 00000000000..e8155162650
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/detail/tuple_begin_end_traits.hpp
@@ -0,0 +1,143 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_DETAIL_TUPLE_BEGIN_END_TRAITS_HPP)
+#define FUSION_SEQUENCE_DETAIL_TUPLE_BEGIN_END_TRAITS_HPP
+
+#include <boost/spirit/fusion/detail/config.hpp>
+
+namespace boost { namespace fusion
+{
+ struct tuple_tag;
+
+ template <int N, typename Tuple>
+ struct tuple_iterator;
+
+ namespace tuple_detail
+ {
+ template <typename Tuple>
+ struct begin_traits_impl
+ {
+ typedef tuple_iterator<0, Tuple> type;
+
+ static type
+ call(Tuple& t);
+ };
+
+ template <typename Tuple>
+ inline typename begin_traits_impl<Tuple>::type
+ begin_traits_impl<Tuple>::call(Tuple& t)
+ {
+ return type(t);
+ }
+
+ template <typename Tuple>
+ struct end_traits_impl
+ {
+ typedef typename Tuple::size size;
+ typedef tuple_iterator<FUSION_GET_VALUE(size), Tuple> type;
+
+ static type
+ call(Tuple& t);
+ };
+
+ template <typename Tuple>
+ inline typename end_traits_impl<Tuple>::type
+ end_traits_impl<Tuple>::call(Tuple& t)
+ {
+ return type(t);
+ }
+ }
+
+ namespace meta
+ {
+ template <typename Tag>
+ struct begin_impl;
+
+ template <>
+ struct begin_impl<tuple_tag>
+ {
+ template <typename Tuple>
+ struct apply : tuple_detail::begin_traits_impl<Tuple> {};
+ };
+
+ template <typename Tag>
+ struct end_impl;
+
+ template <>
+ struct end_impl<tuple_tag>
+ {
+ template <typename Tuple>
+ struct apply : tuple_detail::end_traits_impl<Tuple> {};
+ };
+ }
+}}
+
+#include <boost/mpl/begin_end.hpp>
+#include <boost/mpl/clear.hpp>
+#include <boost/mpl/insert.hpp>
+#include <boost/mpl/empty.hpp>
+#include <boost/spirit/fusion/sequence/tuple_forward.hpp>
+
+namespace boost { namespace fusion { namespace meta
+{
+ template <typename Sequence>
+ struct generate;
+
+ template <typename Sequence, typename T>
+ struct push_front;
+}}}
+
+namespace boost { namespace mpl
+{
+ // these mpl traits really ought to be placed somewhere else
+
+ template <typename Tag>
+ struct begin_impl;
+
+ template <>
+ struct begin_impl<fusion::tuple_tag>
+ : fusion::meta::begin_impl<fusion::tuple_tag> {};
+
+ template <typename Tag>
+ struct end_impl;
+
+ template <>
+ struct end_impl<fusion::tuple_tag>
+ : fusion::meta::end_impl<fusion::tuple_tag> {};
+
+ template <typename Tag>
+ struct clear_impl;
+
+ template <>
+ struct clear_impl<fusion::tuple_tag>
+ {
+ template <typename Tuple>
+ struct apply
+ {
+ typedef fusion::tuple<> type;
+ };
+ };
+
+ template <typename Tag>
+ struct push_front_impl;
+
+ template <>
+ struct push_front_impl<fusion::tuple_tag>
+ {
+ template <typename Tuple, typename T>
+ struct apply
+ {
+ typedef typename fusion::meta::push_front<Tuple, T> func1_;
+ typedef typename fusion::meta::generate<FUSION_GET_TYPE(func1_)>::type
+ type;
+ };
+ };
+}}
+
+#endif
diff --git a/boost/boost/spirit/fusion/sequence/detail/tuple_body.hpp b/boost/boost/spirit/fusion/sequence/detail/tuple_body.hpp
new file mode 100644
index 00000000000..81aa65c5219
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/detail/tuple_body.hpp
@@ -0,0 +1,86 @@
+// Copyright David Abrahams 2003. Use, modification and distribution is
+// 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)
+
+// !!No include guards, intentionally!!
+
+#define N BOOST_PP_ITERATION()
+
+template <BOOST_PP_ENUM_PARAMS(N, typename T)>
+struct BOOST_PP_CAT(tuple, N);
+
+template <BOOST_PP_ENUM_PARAMS(N, typename T)>
+struct BOOST_PP_CAT(tuple_data, N)
+ : sequence_base<BOOST_PP_CAT(tuple, N)
+ <BOOST_PP_ENUM_PARAMS(N, T)> >
+{
+ typedef mpl::BOOST_PP_CAT(vector, N)<BOOST_PP_ENUM_PARAMS(N, T)> types;
+ typedef tuple_tag tag;
+ typedef mpl::int_<N> size;
+ typedef BOOST_PP_CAT(tuple_data, N) identity_type;
+
+ BOOST_PP_CAT(tuple_data, N)()
+ : BOOST_PP_ENUM(N, FUSION_TUPLE_MEMBER_DEFAULT_INIT, _) {}
+
+ BOOST_PP_CAT(tuple_data, N)(BOOST_PP_ENUM_BINARY_PARAMS(
+ N, typename detail::call_param<T, >::type _))
+ : BOOST_PP_ENUM(N, FUSION_TUPLE_MEMBER_INIT, _) {}
+
+ template <BOOST_PP_ENUM_PARAMS(N, typename A)>
+ BOOST_PP_CAT(tuple_data, N)(detail::disambiguate_as_iterator,
+ BOOST_PP_ENUM_BINARY_PARAMS(N, A, & _))
+ : BOOST_PP_ENUM(N, FUSION_TUPLE_MEMBER_ITERATOR_INIT, _) {}
+
+ BOOST_PP_REPEAT(N, FUSION_TUPLE_MEMBER, _)
+};
+
+template <BOOST_PP_ENUM_PARAMS(N, typename T)>
+struct BOOST_PP_CAT(tuple, N)
+ : BOOST_PP_CAT(tuple_data, N)<BOOST_PP_ENUM_PARAMS(N, T)>
+{
+ typedef BOOST_PP_CAT(tuple_data, N)<
+ BOOST_PP_ENUM_PARAMS(N, T)> base_type;
+
+ BOOST_PP_CAT(tuple, N)()
+ : base_type()
+ {}
+
+ BOOST_PP_CAT(tuple, N)(BOOST_PP_ENUM_BINARY_PARAMS(
+ N, typename detail::call_param<T, >::type _))
+ : base_type(BOOST_PP_ENUM_PARAMS(N, _))
+ {}
+
+ template <typename X>
+ explicit BOOST_PP_CAT(tuple, N)(X const& x)
+ : base_type(construct(x, &x))
+ {}
+
+ template <BOOST_PP_ENUM_PARAMS(N, typename U)>
+ BOOST_PP_CAT(tuple, N)&
+ operator=(BOOST_PP_CAT(tuple, N)<BOOST_PP_ENUM_PARAMS(N, U)> const& t)
+ {
+ BOOST_PP_REPEAT(N, FUSION_TUPLE_MEMBER_ASSIGN, _)
+ return *this;
+ }
+
+private:
+
+ template <typename i0_type>
+ static base_type
+ construct(i0_type const& i0, void const*)
+ {
+ FUSION_TUPLE_CONSTRUCT_FROM_ITER(N)
+ return base_type(
+ detail::disambiguate_as_iterator(), BOOST_PP_ENUM_PARAMS(N, i));
+ }
+
+ template <typename Tuple>
+ static base_type
+ construct(Tuple const& t, sequence_root const*)
+ {
+ return base_type(BOOST_PP_ENUM_PARAMS(N, t.m));
+ }
+};
+
+#undef N
+
diff --git a/boost/boost/spirit/fusion/sequence/detail/tuple_builder.hpp b/boost/boost/spirit/fusion/sequence/detail/tuple_builder.hpp
new file mode 100644
index 00000000000..53602455d3a
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/detail/tuple_builder.hpp
@@ -0,0 +1,89 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_DETAIL_TUPLE_BUILDER_HPP)
+#define FUSION_SEQUENCE_DETAIL_TUPLE_BUILDER_HPP
+
+#include <boost/spirit/fusion/detail/config.hpp>
+#include <boost/spirit/fusion/sequence/limits.hpp>
+
+// include tuple0..N where N is FUSION_MAX_TUPLE_SIZE
+#include <boost/spirit/fusion/sequence/tuple10.hpp>
+#if (FUSION_MAX_TUPLE_SIZE > 10)
+#include <boost/spirit/fusion/sequence/tuple20.hpp>
+#endif
+#if (FUSION_MAX_TUPLE_SIZE > 20)
+#include <boost/spirit/fusion/sequence/tuple30.hpp>
+#endif
+#if (FUSION_MAX_TUPLE_SIZE > 30)
+#include <boost/spirit/fusion/sequence/tuple40.hpp>
+#endif
+#if (FUSION_MAX_TUPLE_SIZE > 40)
+#include <boost/spirit/fusion/sequence/tuple50.hpp>
+#endif
+
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/distance.hpp>
+#include <boost/mpl/find.hpp>
+#include <boost/mpl/begin_end.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+
+namespace boost { namespace fusion
+{
+ struct void_t;
+}}
+
+namespace boost { namespace fusion { namespace detail
+{
+ template <int N>
+ struct get_tuple_n;
+
+ template <>
+ struct get_tuple_n<0>
+ {
+ template <BOOST_PP_ENUM_PARAMS(FUSION_MAX_TUPLE_SIZE, typename T)>
+ struct call
+ {
+ typedef tuple0 type;
+ };
+ };
+
+#define FUSION_GET_TUPLE_N(z, n, _) \
+ template <> \
+ struct get_tuple_n<n> \
+ { \
+ template <BOOST_PP_ENUM_PARAMS(FUSION_MAX_TUPLE_SIZE, typename T)> \
+ struct call \
+ { \
+ typedef BOOST_PP_CAT(tuple, n)<BOOST_PP_ENUM_PARAMS(n, T)> type; \
+ }; \
+ };
+
+ BOOST_PP_REPEAT_FROM_TO(1, FUSION_MAX_TUPLE_SIZE, FUSION_GET_TUPLE_N, _)
+#undef FUSION_GET_TUPLE_N
+
+ template <BOOST_PP_ENUM_PARAMS(FUSION_MAX_TUPLE_SIZE, typename T)>
+ struct tuple_builder
+ {
+ typedef
+ mpl::BOOST_PP_CAT(vector, FUSION_MAX_TUPLE_SIZE)
+ <BOOST_PP_ENUM_PARAMS(FUSION_MAX_TUPLE_SIZE, T)>
+ input;
+
+ typedef typename mpl::begin<input>::type begin;
+ typedef typename mpl::find<input, void_t>::type end;
+ typedef typename mpl::distance<begin, end>::type size;
+
+ typedef typename get_tuple_n<FUSION_GET_VALUE(size)>::template
+ call<BOOST_PP_ENUM_PARAMS(FUSION_MAX_TUPLE_SIZE, T)>::type
+ type;
+ };
+}}}
+
+#endif
diff --git a/boost/boost/spirit/fusion/sequence/detail/tuple_macro.hpp b/boost/boost/spirit/fusion/sequence/detail/tuple_macro.hpp
new file mode 100644
index 00000000000..8192b7b7673
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/detail/tuple_macro.hpp
@@ -0,0 +1,97 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_DETAIL_TUPLE_MACRO_HPP)
+#define FUSION_SEQUENCE_DETAIL_TUPLE_MACRO_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Pre-processor gunk. See tuple10.hpp and detail/tuple10.hpp. The
+// following code is the preprocessor version of the code found in
+// those files, plus/minus a few specific details (specifically,
+// the tuple_access<N> and tupleN+1 classes).
+//
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/repetition/repeat.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/arithmetic/inc.hpp>
+#include <boost/preprocessor/arithmetic/dec.hpp>
+#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+#include <boost/preprocessor/repetition/enum.hpp>
+
+#define FUSION_TUPLE_N_ACCESS(z, n, _) \
+ \
+ template <> \
+ struct tuple_access<n> \
+ { \
+ template <typename Tuple> \
+ static typename tuple_access_result<Tuple, n>::type \
+ get(Tuple& t) \
+ { \
+ FUSION_RETURN_TUPLE_MEMBER(n); \
+ } \
+ };
+
+#define FUSION_TUPLE_MEMBER_DEFAULT_INIT(z, n, _) \
+ BOOST_PP_CAT(m, n)(BOOST_PP_CAT(T, n)())
+
+#define FUSION_TUPLE_MEMBER_INIT(z, n, _) \
+ BOOST_PP_CAT(m, n)(BOOST_PP_CAT(_, n))
+
+#define FUSION_TUPLE_MEMBER_ITERATOR_INIT(z, n, _) \
+ BOOST_PP_CAT(m, n)(*BOOST_PP_CAT(_, n))
+
+#define FUSION_TUPLE_MEMBER(z, n, _) \
+ BOOST_PP_CAT(T, n) BOOST_PP_CAT(m, n);
+
+#define FUSION_TUPLE_MEMBER_ASSIGN(z, n, _) \
+ this->BOOST_PP_CAT(m, n) = t.BOOST_PP_CAT(m, n);
+
+#define FUSION_TUPLE_RESULT_OF_NEXT_TYPE(z, n, _) \
+ typedef typename meta::next< \
+ BOOST_PP_CAT(BOOST_PP_CAT(i, n), _type)>::type \
+ BOOST_PP_CAT(BOOST_PP_CAT(i, BOOST_PP_INC(n)), _type);
+
+#if BOOST_WORKAROUND(__BORLANDC__, <= 0x551)
+# define FUSION_TUPLE_RESULT_OF_NEXT(z, n, _) \
+ next_iter::BOOST_PP_CAT(BOOST_PP_CAT(i, BOOST_PP_INC(n)), _type) \
+ BOOST_PP_CAT(i, BOOST_PP_INC(n))(fusion::next(BOOST_PP_CAT(i, n)));
+#else
+# define FUSION_TUPLE_RESULT_OF_NEXT(z, n, _) \
+ FUSION_TUPLE_RESULT_OF_NEXT_TYPE(z, n, _) \
+ BOOST_PP_CAT(BOOST_PP_CAT(i, BOOST_PP_INC(n)), _type) \
+ BOOST_PP_CAT(i, BOOST_PP_INC(n))(fusion::next(BOOST_PP_CAT(i, n)));
+#endif
+
+#if BOOST_WORKAROUND(__BORLANDC__, <= 0x551)
+# define FUSION_TUPLE_NEXT_ITER_N(z, n, _) \
+ namespace detail \
+ { \
+ template <typename i0_type> \
+ struct BOOST_PP_CAT(next_iter, n) \
+ { \
+ BOOST_PP_REPEAT( \
+ BOOST_PP_DEC(n), FUSION_TUPLE_RESULT_OF_NEXT_TYPE, _) \
+ }; \
+ }
+
+#else
+# define FUSION_TUPLE_NEXT_ITER_N(z, n, _)
+#endif
+
+#if BOOST_WORKAROUND(__BORLANDC__, <= 0x551)
+# define FUSION_TUPLE_CONSTRUCT_FROM_ITER(n) \
+ typedef detail::BOOST_PP_CAT(next_iter, n)<i0_type> next_iter; \
+ BOOST_PP_REPEAT(BOOST_PP_DEC(n), FUSION_TUPLE_RESULT_OF_NEXT, _)
+#else
+# define FUSION_TUPLE_CONSTRUCT_FROM_ITER(n) \
+ BOOST_PP_REPEAT(BOOST_PP_DEC(n), FUSION_TUPLE_RESULT_OF_NEXT, _)
+#endif
+
+#endif
diff --git a/boost/boost/spirit/fusion/sequence/detail/tuple_size_traits.hpp b/boost/boost/spirit/fusion/sequence/detail/tuple_size_traits.hpp
new file mode 100644
index 00000000000..dc1e86d06f1
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/detail/tuple_size_traits.hpp
@@ -0,0 +1,29 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_DETAIL_TUPLE_SIZE_TRAITS_HPP)
+#define FUSION_SEQUENCE_DETAIL_TUPLE_SIZE_TRAITS_HPP
+
+namespace boost { namespace fusion
+{
+ struct tuple_tag;
+
+ namespace meta
+ {
+ template <typename Tag>
+ struct size_impl;
+
+ template <>
+ struct size_impl<tuple_tag>
+ {
+ template <typename Sequence>
+ struct apply : Sequence::size {};
+ };
+ }
+}}
+
+#endif
diff --git a/boost/boost/spirit/fusion/sequence/detail/tuple_value_at_traits.hpp b/boost/boost/spirit/fusion/sequence/detail/tuple_value_at_traits.hpp
new file mode 100644
index 00000000000..9c5e7d910f3
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/detail/tuple_value_at_traits.hpp
@@ -0,0 +1,37 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_DETAIL_TUPLE_VALUE_AT_TRAITS_IPP)
+#define FUSION_SEQUENCE_DETAIL_TUPLE_VALUE_AT_TRAITS_IPP
+
+#include <boost/spirit/fusion/detail/config.hpp>
+#include <boost/mpl/at.hpp>
+
+namespace boost { namespace fusion
+{
+ struct tuple_tag;
+
+ namespace meta
+ {
+ template <typename Tag>
+ struct value_at_impl;
+
+ template <>
+ struct value_at_impl<tuple_tag>
+ {
+ template <typename Tuple, int N>
+ struct apply
+ {
+ typedef typename
+ mpl::at_c<FUSION_GET_TYPES(Tuple), N>::type
+ type;
+ };
+ };
+ }
+}}
+
+#endif
diff --git a/boost/boost/spirit/fusion/sequence/detail/type_seq_begin_end_trts.hpp b/boost/boost/spirit/fusion/sequence/detail/type_seq_begin_end_trts.hpp
new file mode 100644
index 00000000000..86352cd53f6
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/detail/type_seq_begin_end_trts.hpp
@@ -0,0 +1,89 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_DETAIL_TYPE_SEQUENCE_BEGIN_END_TRAITS_HPP)
+#define FUSION_SEQUENCE_DETAIL_TYPE_SEQUENCE_BEGIN_END_TRAITS_HPP
+
+#include <boost/spirit/fusion/detail/config.hpp>
+#include <boost/mpl/begin_end.hpp>
+
+namespace boost { namespace fusion
+{
+ template <typename Iterator>
+ struct type_sequence_iterator;
+
+ struct type_sequence_tag;
+
+ template <typename SequenceT>
+ struct type_sequence;
+
+ namespace meta
+ {
+ template <typename Tag>
+ struct begin_impl;
+
+ template <>
+ struct begin_impl<type_sequence_tag>
+ {
+ template <typename Sequence>
+ struct apply
+ {
+ typedef type_sequence_iterator<
+ typename mpl::begin<typename Sequence::sequence_type>::type>
+ type;
+
+ static type
+ call(Sequence)
+ {
+ FUSION_RETURN_DEFAULT_CONSTRUCTED;
+ }
+ };
+ };
+
+ template <typename Tag>
+ struct end_impl;
+
+ template <>
+ struct end_impl<type_sequence_tag>
+ {
+ template <typename Sequence>
+ struct apply
+ {
+ typedef type_sequence_iterator<
+ typename mpl::end<typename Sequence::sequence_type>::type>
+ type;
+
+ static type
+ call(Sequence)
+ {
+ FUSION_RETURN_DEFAULT_CONSTRUCTED;
+ }
+ };
+ };
+ }
+}}
+
+namespace boost { namespace mpl
+{
+ template <typename Tag>
+ struct begin_impl;
+
+ template <typename Tag>
+ struct end_impl;
+
+ template <>
+ struct begin_impl<fusion::type_sequence_tag>
+ : fusion::meta::begin_impl<fusion::type_sequence_tag> {};
+
+ template <>
+ struct end_impl<fusion::type_sequence_tag>
+ : fusion::meta::end_impl<fusion::type_sequence_tag> {};
+}}
+
+#endif
+
+
diff --git a/boost/boost/spirit/fusion/sequence/end.hpp b/boost/boost/spirit/fusion/sequence/end.hpp
new file mode 100644
index 00000000000..82fdfc6ceba
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/end.hpp
@@ -0,0 +1,94 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_END_HPP)
+#define FUSION_SEQUENCE_END_HPP
+
+#include <boost/spirit/fusion/detail/config.hpp>
+#include <boost/spirit/fusion/sequence/as_fusion_sequence.hpp>
+#include <boost/type_traits/is_const.hpp>
+
+namespace boost { namespace fusion
+{
+ namespace meta
+ {
+ template <typename Tag>
+ struct end_impl
+ {
+ template <typename Sequence>
+ struct apply {
+ typedef int type;
+ };
+ };
+
+ template <typename Sequence>
+ struct end
+ {
+ typedef as_fusion_sequence<Sequence> seq_converter;
+ typedef typename seq_converter::type seq;
+
+ typedef typename
+ end_impl<typename seq::tag>::
+ template apply<seq>::type
+ type;
+ };
+ }
+
+#if BOOST_WORKAROUND(BOOST_MSVC,<=1300)
+ namespace detail {
+ template <typename Sequence>
+ inline typename meta::end<Sequence const>::type
+ end(Sequence const& seq,mpl::true_)
+ {
+ typedef meta::end<Sequence const> end_meta;
+ return meta::end_impl<BOOST_DEDUCED_TYPENAME end_meta::seq::tag>::
+ template apply<BOOST_DEDUCED_TYPENAME end_meta::seq const>::call(
+ end_meta::seq_converter::convert_const(seq));
+ }
+
+ template <typename Sequence>
+ inline typename meta::end<Sequence>::type
+ end(Sequence& seq,mpl::false_)
+ {
+ typedef meta::end<Sequence> end_meta;
+ return meta::end_impl<BOOST_DEDUCED_TYPENAME end_meta::seq::tag>::
+ template apply<BOOST_DEDUCED_TYPENAME end_meta::seq>::call(
+ end_meta::seq_converter::convert(seq));
+ }
+
+ }
+ template <typename Sequence>
+ inline typename meta::end<Sequence>::type
+ end(Sequence& seq)
+ {
+ return detail::end(seq,is_const<Sequence>());
+ }
+#else
+ template <typename Sequence>
+ inline typename meta::end<Sequence const>::type
+ end(Sequence const& seq)
+ {
+ typedef meta::end<Sequence const> end_meta;
+ return meta::end_impl<typename end_meta::seq::tag>::
+ template apply<typename end_meta::seq const>::call(
+ end_meta::seq_converter::convert_const(seq));
+ }
+
+ template <typename Sequence>
+ inline typename meta::end<Sequence>::type
+ end(Sequence& seq)
+ {
+ typedef meta::end<Sequence> end_meta;
+ return meta::end_impl<typename end_meta::seq::tag>::
+ template apply<typename end_meta::seq>::call(
+ end_meta::seq_converter::convert(seq));
+ }
+#endif
+}}
+
+#endif
diff --git a/boost/boost/spirit/fusion/sequence/equal_to.hpp b/boost/boost/spirit/fusion/sequence/equal_to.hpp
new file mode 100644
index 00000000000..da2f4c64d46
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/equal_to.hpp
@@ -0,0 +1,54 @@
+/*=============================================================================
+ Copyright (c) 1999-2003 Jaakko Järvi
+ Copyright (c) 2001-2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_EQUAL_TO_HPP)
+#define FUSION_SEQUENCE_EQUAL_TO_HPP
+
+#include <boost/spirit/fusion/sequence/begin.hpp>
+#include <boost/spirit/fusion/sequence/end.hpp>
+#include <boost/spirit/fusion/sequence/detail/sequence_equal_to.hpp>
+
+#ifdef FUSION_COMFORMING_COMPILER
+#include <boost/utility/enable_if.hpp>
+#include <boost/spirit/fusion/sequence/is_sequence.hpp>
+#include <boost/spirit/fusion/sequence/as_fusion_sequence.hpp>
+#endif
+
+namespace boost { namespace fusion
+{
+ template <typename Seq1, typename Seq2>
+ inline bool
+ operator==(sequence_base<Seq1> const& a, sequence_base<Seq2> const& b)
+ {
+ return detail::sequence_equal_to<Seq1 const, Seq2 const>::
+ call(
+ fusion::begin(a.cast())
+ , fusion::begin(b.cast())
+ );
+ }
+
+#ifdef FUSION_COMFORMING_COMPILER
+
+ template <typename Seq1, typename Seq2>
+ inline typename disable_if<fusion::is_sequence<Seq2>, bool>::type
+ operator==(sequence_base<Seq1> const& a, Seq2 const& b)
+ {
+ return a == as_fusion_sequence<Seq2>::convert_const(b);
+ }
+
+ template <typename Seq1, typename Seq2>
+ inline typename disable_if<fusion::is_sequence<Seq1>, bool>::type
+ operator==(Seq1 const& a, sequence_base<Seq2> const& b)
+ {
+ return as_fusion_sequence<Seq1>::convert_const(a) == b;
+ }
+
+#endif
+}}
+
+#endif
diff --git a/boost/boost/spirit/fusion/sequence/filter_view.hpp b/boost/boost/spirit/fusion/sequence/filter_view.hpp
new file mode 100644
index 00000000000..ea5f9907069
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/filter_view.hpp
@@ -0,0 +1,46 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_FILTER_VIEW_HPP)
+#define FUSION_SEQUENCE_FILTER_VIEW_HPP
+
+#include <boost/spirit/fusion/detail/access.hpp>
+#include <boost/spirit/fusion/iterator/filter_view_iterator.hpp>
+#include <boost/spirit/fusion/sequence/detail/filter_view_begin_end_trts.hpp>
+#include <boost/spirit/fusion/sequence/detail/sequence_base.hpp>
+#include <boost/spirit/fusion/sequence/as_fusion_sequence.hpp>
+#include <boost/spirit/fusion/sequence/begin.hpp>
+#include <boost/spirit/fusion/sequence/end.hpp>
+
+namespace boost { namespace fusion
+{
+ struct filter_view_tag;
+
+ template <typename Sequence, typename Pred>
+ struct filter_view : sequence_base<filter_view<Sequence, Pred> >
+ {
+ typedef as_fusion_sequence<Sequence> seq_converter;
+ typedef typename seq_converter::type seq;
+
+ typedef filter_view_tag tag;
+ typedef typename meta::begin<seq>::type first_type;
+ typedef typename meta::end<seq>::type last_type;
+ typedef Pred pred_type;
+
+ filter_view(Sequence& seq)
+ : first(fusion::begin(seq))
+ , last(fusion::end(seq))
+ {}
+
+ first_type first;
+ last_type last;
+ };
+}}
+
+#endif
+
+
diff --git a/boost/boost/spirit/fusion/sequence/generate.hpp b/boost/boost/spirit/fusion/sequence/generate.hpp
new file mode 100644
index 00000000000..903909c3954
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/generate.hpp
@@ -0,0 +1,47 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_GENERATE_HPP)
+#define FUSION_SEQUENCE_GENERATE_HPP
+
+#include <boost/spirit/fusion/sequence/begin.hpp>
+#include <boost/spirit/fusion/sequence/end.hpp>
+#include <boost/spirit/fusion/sequence/detail/generate.hpp>
+#include <boost/spirit/fusion/sequence/detail/sequence_base.hpp>
+#include <boost/spirit/fusion/sequence/as_fusion_sequence.hpp>
+
+namespace boost { namespace fusion
+{
+ namespace meta
+ {
+ template <typename Sequence>
+ struct generate
+ {
+ typedef typename as_fusion_sequence<Sequence>::type seq;
+ typedef typename
+ detail::result_of_generate<
+ typename meta::begin<seq const>::type
+ , typename meta::end<seq const>::type
+ >::type
+ type;
+ };
+ }
+
+ template <typename Sequence>
+ inline typename meta::generate<Sequence>::type
+ generate(Sequence const& seq)
+ {
+ typedef as_fusion_sequence<Sequence> converter;
+ return detail::generate(
+ fusion::begin(converter::convert_const(seq))
+ , fusion::end(converter::convert_const(seq)));
+ }
+}}
+
+#endif
+
+
diff --git a/boost/boost/spirit/fusion/sequence/get.hpp b/boost/boost/spirit/fusion/sequence/get.hpp
new file mode 100644
index 00000000000..2eba1858459
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/get.hpp
@@ -0,0 +1,116 @@
+/*=============================================================================
+ Copyright (c) 1999-2003 Jaakko Järvi
+ Copyright (c) 2001-2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_GET_HPP)
+#define FUSION_SEQUENCE_GET_HPP
+
+#include <boost/spirit/fusion/sequence/at.hpp>
+#include <boost/spirit/fusion/sequence/tuple_element.hpp>
+#include <boost/spirit/fusion/sequence/detail/sequence_base.hpp>
+#include <boost/type_traits/add_reference.hpp>
+
+namespace boost { namespace fusion
+{
+ namespace detail
+ {
+ template<int N>
+ struct pair_element;
+
+ template<>
+ struct pair_element<0>
+ {
+ template<typename T1, typename T2>
+ static BOOST_DEDUCED_TYPENAME add_reference<T1>::type
+ get(std::pair<T1, T2>& pr)
+ {
+ return pr.first;
+ }
+
+ template<typename T1, typename T2>
+ static BOOST_DEDUCED_TYPENAME add_reference<const T1>::type
+ get(const std::pair<T1, T2>& pr)
+ {
+ return pr.first;
+ }
+ };
+
+ template<>
+ struct pair_element<1>
+ {
+ template<typename T1, typename T2>
+ static BOOST_DEDUCED_TYPENAME add_reference<T2>::type
+ get(std::pair<T1, T2>& pr)
+ {
+ return pr.second;
+ }
+
+ template<typename T1, typename T2>
+ static BOOST_DEDUCED_TYPENAME add_reference<const T2>::type
+ get(const std::pair<T1, T2>& pr)
+ {
+ return pr.second;
+ }
+ };
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // get function
+ //
+ // Given a constant integer N and a sequence, returns a reference to
+ // the Nth element of the sequence. (N is a zero based index). Usage:
+ //
+ // get<N>(seq)
+ //
+ // This function is provided here for compatibility with the tuples TR1
+ // specification. This function forwards to at<N>(seq).
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <int N, typename Sequence>
+ inline typename meta::at_c<Sequence const, N>::type
+ get(sequence_base<Sequence> const& seq FUSION_GET_MSVC_WORKAROUND)
+ {
+ typedef meta::at_c<Sequence const, N> at_meta;
+ return meta::at_impl<BOOST_DEDUCED_TYPENAME at_meta::seq::tag>::
+ template apply<BOOST_DEDUCED_TYPENAME at_meta::seq const, N>::call(
+ at_meta::seq_converter::convert_const(seq.cast()));
+
+// return at<N>(seq.cast());
+ }
+
+ template <int N, typename Sequence>
+ inline typename meta::at_c<Sequence, N>::type
+ get(sequence_base<Sequence>& seq FUSION_GET_MSVC_WORKAROUND)
+ {
+ typedef meta::at_c<Sequence, N> at_meta;
+ return meta::at_impl<BOOST_DEDUCED_TYPENAME at_meta::seq::tag>::
+ template apply<BOOST_DEDUCED_TYPENAME at_meta::seq, N>::call(
+ at_meta::seq_converter::convert(seq.cast()));
+// return at<N>(seq.cast());
+ }
+
+ template<int N, typename T1, typename T2>
+ inline BOOST_DEDUCED_TYPENAME boost::add_reference<
+ BOOST_DEDUCED_TYPENAME tuple_element<N, std::pair<T1, T2> >::type>::type
+ get(std::pair<T1, T2>& pr)
+ {
+ return detail::pair_element<N>::get(pr);
+ }
+
+ template<int N, typename T1, typename T2>
+ inline BOOST_DEDUCED_TYPENAME boost::add_reference<
+ const BOOST_DEDUCED_TYPENAME tuple_element<N, std::pair<T1, T2> >::type>::type
+ get(const std::pair<T1, T2>& pr)
+ {
+ return detail::pair_element<N>::get(pr);
+ }
+}}
+
+#endif
+
diff --git a/boost/boost/spirit/fusion/sequence/greater.hpp b/boost/boost/spirit/fusion/sequence/greater.hpp
new file mode 100644
index 00000000000..c52515c26b9
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/greater.hpp
@@ -0,0 +1,54 @@
+/*=============================================================================
+ Copyright (c) 1999-2003 Jaakko Järvi
+ Copyright (c) 2001-2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_GREATER_HPP)
+#define FUSION_SEQUENCE_GREATER_HPP
+
+#include <boost/spirit/fusion/sequence/begin.hpp>
+#include <boost/spirit/fusion/sequence/end.hpp>
+#include <boost/spirit/fusion/sequence/detail/sequence_greater.hpp>
+
+#ifdef FUSION_COMFORMING_COMPILER
+#include <boost/utility/enable_if.hpp>
+#include <boost/spirit/fusion/sequence/is_sequence.hpp>
+#include <boost/spirit/fusion/sequence/as_fusion_sequence.hpp>
+#endif
+
+namespace boost { namespace fusion
+{
+ template <typename Seq1, typename Seq2>
+ inline bool
+ operator>(sequence_base<Seq1> const& a, sequence_base<Seq2> const& b)
+ {
+ return detail::sequence_greater<Seq1 const, Seq2 const>::
+ call(
+ fusion::begin(a.cast())
+ , fusion::begin(b.cast())
+ );
+ }
+
+#ifdef FUSION_COMFORMING_COMPILER
+
+ template <typename Seq1, typename Seq2>
+ inline typename disable_if<fusion::is_sequence<Seq2>, bool>::type
+ operator>(sequence_base<Seq1> const& a, Seq2 const& b)
+ {
+ return a > as_fusion_sequence<Seq2>::convert_const(b);
+ }
+
+ template <typename Seq1, typename Seq2>
+ inline typename disable_if<fusion::is_sequence<Seq1>, bool>::type
+ operator>(Seq1 const& a, sequence_base<Seq2> const& b)
+ {
+ return as_fusion_sequence<Seq1>::convert_const(a) > b;
+ }
+
+#endif
+}}
+
+#endif
diff --git a/boost/boost/spirit/fusion/sequence/greater_equal.hpp b/boost/boost/spirit/fusion/sequence/greater_equal.hpp
new file mode 100644
index 00000000000..cd3e5dc56cc
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/greater_equal.hpp
@@ -0,0 +1,54 @@
+/*=============================================================================
+ Copyright (c) 1999-2003 Jaakko Järvi
+ Copyright (c) 2001-2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_GREATER_EQUAL_HPP)
+#define FUSION_SEQUENCE_GREATER_EQUAL_HPP
+
+#include <boost/spirit/fusion/sequence/begin.hpp>
+#include <boost/spirit/fusion/sequence/end.hpp>
+#include <boost/spirit/fusion/sequence/detail/sequence_greater_equal.hpp>
+
+#ifdef FUSION_COMFORMING_COMPILER
+#include <boost/utility/enable_if.hpp>
+#include <boost/spirit/fusion/sequence/is_sequence.hpp>
+#include <boost/spirit/fusion/sequence/as_fusion_sequence.hpp>
+#endif
+
+namespace boost { namespace fusion
+{
+ template <typename Seq1, typename Seq2>
+ inline bool
+ operator>=(sequence_base<Seq1> const& a, sequence_base<Seq2> const& b)
+ {
+ return detail::sequence_greater_equal<Seq1 const, Seq2 const>::
+ call(
+ fusion::begin(a.cast())
+ , fusion::begin(b.cast())
+ );
+ }
+
+#ifdef FUSION_COMFORMING_COMPILER
+
+ template <typename Seq1, typename Seq2>
+ inline typename disable_if<fusion::is_sequence<Seq2>, bool>::type
+ operator>=(sequence_base<Seq1> const& a, Seq2 const& b)
+ {
+ return a >= as_fusion_sequence<Seq2>::convert_const(b);
+ }
+
+ template <typename Seq1, typename Seq2>
+ inline typename disable_if<fusion::is_sequence<Seq1>, bool>::type
+ operator>=(Seq1 const& a, sequence_base<Seq2> const& b)
+ {
+ return as_fusion_sequence<Seq1>::convert_const(a) >= b;
+ }
+
+#endif
+}}
+
+#endif
diff --git a/boost/boost/spirit/fusion/sequence/io.hpp b/boost/boost/spirit/fusion/sequence/io.hpp
new file mode 100644
index 00000000000..cceadc6dc5f
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/io.hpp
@@ -0,0 +1,45 @@
+/*=============================================================================
+ Copyright (c) 1999-2003 Jaakko Järvi
+ Copyright (c) 1999-2003 Jeremiah Willcock
+ Copyright (c) 2001-2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(BOOST_IO_HPP)
+#define BOOST_IO_HPP
+
+#include <iostream>
+#include <boost/spirit/fusion/sequence/detail/io.hpp>
+#include <boost/spirit/fusion/sequence/as_fusion_sequence.hpp>
+
+namespace boost { namespace fusion
+{
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // Sequence I/O (<< and >> operators)
+ //
+ ///////////////////////////////////////////////////////////////////////////
+
+ template <typename OStream, typename Sequence>
+ inline OStream&
+ operator<<(OStream& os, sequence_base<Sequence> const& seq)
+ {
+ detail::print_sequence(os,
+ as_fusion_sequence<Sequence const>::convert(seq.cast()));
+ return os;
+ }
+
+ template <typename IStream, typename Sequence>
+ inline IStream&
+ operator>>(IStream& is, sequence_base<Sequence>& seq)
+ {
+ detail::read_sequence(is,
+ as_fusion_sequence<Sequence>::convert(seq.cast()));
+ return is;
+ }
+}}
+
+#endif
diff --git a/boost/boost/spirit/fusion/sequence/is_sequence.hpp b/boost/boost/spirit/fusion/sequence/is_sequence.hpp
new file mode 100644
index 00000000000..40615d7fd6f
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/is_sequence.hpp
@@ -0,0 +1,31 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_IS_SEQUENCE_HPP)
+#define FUSION_SEQUENCE_IS_SEQUENCE_HPP
+
+#include <boost/type_traits/is_base_and_derived.hpp>
+#include <boost/spirit/fusion/sequence/detail/sequence_base.hpp>
+
+namespace boost { namespace fusion
+{
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // is_sequence metafunction
+ //
+ // Given a type T, returns a value true or false if T is a
+ // fusion sequence or not. Usage:
+ //
+ // is_sequence<T>::value
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename T>
+ struct is_sequence : is_base_and_derived<sequence_root, T> {};
+
+}}
+
+#endif
diff --git a/boost/boost/spirit/fusion/sequence/joint_view.hpp b/boost/boost/spirit/fusion/sequence/joint_view.hpp
new file mode 100644
index 00000000000..ca1db7880f0
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/joint_view.hpp
@@ -0,0 +1,63 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_JOINT_VIEW_HPP)
+#define FUSION_SEQUENCE_JOINT_VIEW_HPP
+
+#include <boost/spirit/fusion/detail/access.hpp>
+#include <boost/spirit/fusion/sequence/begin.hpp>
+#include <boost/spirit/fusion/sequence/end.hpp>
+#include <boost/spirit/fusion/iterator/joint_view_iterator.hpp>
+#include <boost/spirit/fusion/sequence/detail/joint_view_begin_end_traits.hpp>
+#include <boost/spirit/fusion/sequence/detail/sequence_base.hpp>
+#include <boost/spirit/fusion/sequence/as_fusion_sequence.hpp>
+
+#include <boost/mpl/if.hpp>
+
+namespace boost { namespace fusion
+{
+ struct joint_view_tag;
+
+ template<typename View1, typename View2, bool copy1, bool copy2>
+ struct joint_view;
+
+ template <typename View1, typename View2, bool copy1 = false, bool copy2 = false>
+ struct joint_view : sequence_base<joint_view<View1, View2, copy1, copy2> >
+ {
+ typedef as_fusion_sequence<View1> view1_converter;
+ typedef typename view1_converter::type view1;
+ typedef as_fusion_sequence<View2> view2_converter;
+ typedef typename view2_converter::type view2;
+
+ typedef joint_view_tag tag;
+ typedef typename meta::begin<view1>::type first_type;
+ typedef typename meta::end<view1>::type last_type;
+ typedef typename meta::begin<view2>::type concat_type;
+ typedef typename meta::end<view2>::type concat_last_type;
+
+ joint_view(View1& view1, View2& view2);
+
+ first_type first() const { return boost::fusion::begin(view1_); }
+ concat_type concat() const { return boost::fusion::begin(view2_); }
+ concat_last_type concat_last() const { return boost::fusion::end(view2_); }
+
+ private:
+ typename boost::mpl::if_c<copy1, View1, View1&>::type view1_;
+ typename boost::mpl::if_c<copy2, View2, View2&>::type view2_;
+ };
+
+ template <typename View1, typename View2, bool copy1, bool copy2>
+ joint_view<View1,View2,copy1,copy2>::joint_view(View1& view1, View2& view2)
+ : view1_(view1), view2_(view2)
+ {}
+
+}}
+
+#endif
+
+
diff --git a/boost/boost/spirit/fusion/sequence/less.hpp b/boost/boost/spirit/fusion/sequence/less.hpp
new file mode 100644
index 00000000000..3b176b3f2e8
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/less.hpp
@@ -0,0 +1,54 @@
+/*=============================================================================
+ Copyright (c) 1999-2003 Jaakko Järvi
+ Copyright (c) 2001-2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_LESS_HPP)
+#define FUSION_SEQUENCE_LESS_HPP
+
+#include <boost/spirit/fusion/sequence/begin.hpp>
+#include <boost/spirit/fusion/sequence/end.hpp>
+#include <boost/spirit/fusion/sequence/detail/sequence_less.hpp>
+
+#ifdef FUSION_COMFORMING_COMPILER
+#include <boost/utility/enable_if.hpp>
+#include <boost/spirit/fusion/sequence/is_sequence.hpp>
+#include <boost/spirit/fusion/sequence/as_fusion_sequence.hpp>
+#endif
+
+namespace boost { namespace fusion
+{
+ template <typename Seq1, typename Seq2>
+ inline bool
+ operator<(sequence_base<Seq1> const& a, sequence_base<Seq2> const& b)
+ {
+ return detail::sequence_less<Seq1 const, Seq2 const>::
+ call(
+ fusion::begin(a.cast())
+ , fusion::begin(b.cast())
+ );
+ }
+
+#ifdef FUSION_COMFORMING_COMPILER
+
+ template <typename Seq1, typename Seq2>
+ inline typename disable_if<fusion::is_sequence<Seq2>, bool>::type
+ operator<(sequence_base<Seq1> const& a, Seq2 const& b)
+ {
+ return a < as_fusion_sequence<Seq2>::convert_const(b);
+ }
+
+ template <typename Seq1, typename Seq2>
+ inline typename disable_if<fusion::is_sequence<Seq1>, bool>::type
+ operator<(Seq1 const& a, sequence_base<Seq2> const& b)
+ {
+ return as_fusion_sequence<Seq1>::convert_const(a) < b;
+ }
+
+#endif
+}}
+
+#endif
diff --git a/boost/boost/spirit/fusion/sequence/less_equal.hpp b/boost/boost/spirit/fusion/sequence/less_equal.hpp
new file mode 100644
index 00000000000..445f0e741a0
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/less_equal.hpp
@@ -0,0 +1,54 @@
+/*=============================================================================
+ Copyright (c) 1999-2003 Jaakko Järvi
+ Copyright (c) 2001-2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_LESS_EQUAL_HPP)
+#define FUSION_SEQUENCE_LESS_EQUAL_HPP
+
+#include <boost/spirit/fusion/sequence/begin.hpp>
+#include <boost/spirit/fusion/sequence/end.hpp>
+#include <boost/spirit/fusion/sequence/detail/sequence_less_equal.hpp>
+
+#ifdef FUSION_COMFORMING_COMPILER
+#include <boost/utility/enable_if.hpp>
+#include <boost/spirit/fusion/sequence/is_sequence.hpp>
+#include <boost/spirit/fusion/sequence/as_fusion_sequence.hpp>
+#endif
+
+namespace boost { namespace fusion
+{
+ template <typename Seq1, typename Seq2>
+ inline bool
+ operator<=(sequence_base<Seq1> const& a, sequence_base<Seq2> const& b)
+ {
+ return detail::sequence_less_equal<Seq1 const, Seq2 const>::
+ call(
+ fusion::begin(a.cast())
+ , fusion::begin(b.cast())
+ );
+ }
+
+#ifdef FUSION_COMFORMING_COMPILER
+
+ template <typename Seq1, typename Seq2>
+ inline typename disable_if<fusion::is_sequence<Seq2>, bool>::type
+ operator<=(sequence_base<Seq1> const& a, Seq2 const& b)
+ {
+ return a <= as_fusion_sequence<Seq2>::convert_const(b);
+ }
+
+ template <typename Seq1, typename Seq2>
+ inline typename disable_if<fusion::is_sequence<Seq1>, bool>::type
+ operator<=(Seq1 const& a, sequence_base<Seq2> const& b)
+ {
+ return as_fusion_sequence<Seq1>::convert_const(a) <= b;
+ }
+
+#endif
+}}
+
+#endif
diff --git a/boost/boost/spirit/fusion/sequence/limits.hpp b/boost/boost/spirit/fusion/sequence/limits.hpp
new file mode 100644
index 00000000000..5c817973d0c
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/limits.hpp
@@ -0,0 +1,20 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_LIMITS_HPP)
+#define FUSION_SEQUENCE_LIMITS_HPP
+
+#if !defined(FUSION_MAX_TUPLE_SIZE)
+# define FUSION_MAX_TUPLE_SIZE 10
+#else
+# if FUSION_MAX_TUPLE_SIZE < 3
+# undef FUSION_MAX_TUPLE_SIZE
+# define FUSION_MAX_TUPLE_SIZE 10
+# endif
+#endif
+
+#endif
diff --git a/boost/boost/spirit/fusion/sequence/make_tuple.hpp b/boost/boost/spirit/fusion/sequence/make_tuple.hpp
new file mode 100644
index 00000000000..6b73bd0182a
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/make_tuple.hpp
@@ -0,0 +1,47 @@
+/*=============================================================================
+ Copyright (c) 1999-2003 Jaakko Järvi
+ Copyright (c) 2001-2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_MAKE_TUPLE_HPP)
+#define FUSION_SEQUENCE_MAKE_TUPLE_HPP
+
+#include <boost/preprocessor/repetition/enum.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+#include <boost/spirit/fusion/sequence/tuple.hpp>
+#include <boost/spirit/fusion/sequence/detail/as_tuple_element.hpp>
+
+namespace boost { namespace fusion
+{
+ inline tuple<>
+ make_tuple()
+ {
+ return tuple<>();
+ }
+
+#define BOOST_FUSION_AS_TUPLE_ELEMENT(z, n, data) \
+ BOOST_DEDUCED_TYPENAME detail::as_tuple_element<BOOST_PP_CAT(T, n)>::type
+
+#define FUSION_MAKE_TUPLE(z, n, _) \
+ \
+ template <BOOST_PP_ENUM_PARAMS(n, typename T)> \
+ inline tuple<BOOST_PP_ENUM(n, BOOST_FUSION_AS_TUPLE_ELEMENT, _)> \
+ make_tuple(BOOST_PP_ENUM_BINARY_PARAMS(n, T, const& _)) \
+ { \
+ return tuple<BOOST_PP_ENUM(n, BOOST_FUSION_AS_TUPLE_ELEMENT, _)>( \
+ BOOST_PP_ENUM_PARAMS(n, _)); \
+ }
+
+ BOOST_PP_REPEAT_FROM_TO(1, FUSION_MAX_TUPLE_SIZE, FUSION_MAKE_TUPLE, _)
+
+#undef BOOST_FUSION_AS_TUPLE_ELEMENT
+#undef FUSION_MAKE_TUPLE
+
+}}
+
+#endif
diff --git a/boost/boost/spirit/fusion/sequence/not_equal_to.hpp b/boost/boost/spirit/fusion/sequence/not_equal_to.hpp
new file mode 100644
index 00000000000..cdaf5c839c3
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/not_equal_to.hpp
@@ -0,0 +1,54 @@
+/*=============================================================================
+ Copyright (c) 1999-2003 Jaakko Järvi
+ Copyright (c) 2001-2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_NOT_EQUAL_TO_HPP)
+#define FUSION_SEQUENCE_NOT_EQUAL_TO_HPP
+
+#include <boost/spirit/fusion/sequence/begin.hpp>
+#include <boost/spirit/fusion/sequence/end.hpp>
+#include <boost/spirit/fusion/sequence/detail/sequence_not_equal_to.hpp>
+
+#ifdef FUSION_COMFORMING_COMPILER
+#include <boost/utility/enable_if.hpp>
+#include <boost/spirit/fusion/sequence/is_sequence.hpp>
+#include <boost/spirit/fusion/sequence/as_fusion_sequence.hpp>
+#endif
+
+namespace boost { namespace fusion
+{
+ template <typename Seq1, typename Seq2>
+ inline bool
+ operator!=(sequence_base<Seq1> const& a, sequence_base<Seq2> const& b)
+ {
+ return detail::sequence_not_equal_to<Seq1 const, Seq2 const>::
+ call(
+ fusion::begin(a.cast())
+ , fusion::begin(b.cast())
+ );
+ }
+
+#ifdef FUSION_COMFORMING_COMPILER
+
+ template <typename Seq1, typename Seq2>
+ inline typename disable_if<fusion::is_sequence<Seq2>, bool>::type
+ operator!=(sequence_base<Seq1> const& a, Seq2 const& b)
+ {
+ return a != as_fusion_sequence<Seq2>::convert_const(b);
+ }
+
+ template <typename Seq1, typename Seq2>
+ inline typename disable_if<fusion::is_sequence<Seq1>, bool>::type
+ operator!=(Seq1 const& a, sequence_base<Seq2> const& b)
+ {
+ return as_fusion_sequence<Seq1>::convert_const(a) != b;
+ }
+
+#endif
+}}
+
+#endif
diff --git a/boost/boost/spirit/fusion/sequence/prepend_view.hpp b/boost/boost/spirit/fusion/sequence/prepend_view.hpp
new file mode 100644
index 00000000000..c0e51ee70b8
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/prepend_view.hpp
@@ -0,0 +1,29 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_PREPEND_VIEW_HPP)
+#define FUSION_SEQUENCE_PREPEND_VIEW_HPP
+
+#include <boost/spirit/fusion/detail/access.hpp>
+#include <boost/spirit/fusion/sequence/joint_view.hpp>
+#include <boost/spirit/fusion/sequence/single_view.hpp>
+
+namespace boost { namespace fusion
+{
+ template <typename View, typename T>
+ struct prepend_view : joint_view<single_view<T>, View>
+ {
+ prepend_view(View& view, typename detail::call_param<T>::type val)
+ : joint_view<single_view<T>, View>(held, view)
+ , held(val) {}
+ single_view<T> held;
+ };
+}}
+
+#endif
+
+
diff --git a/boost/boost/spirit/fusion/sequence/range.hpp b/boost/boost/spirit/fusion/sequence/range.hpp
new file mode 100644
index 00000000000..ff7db2ac3c8
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/range.hpp
@@ -0,0 +1,38 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_RANGE_HPP)
+#define FUSION_SEQUENCE_RANGE_HPP
+
+#include <boost/spirit/fusion/detail/access.hpp>
+#include <boost/spirit/fusion/sequence/detail/range_begin_end_traits.hpp>
+#include <boost/spirit/fusion/sequence/detail/sequence_base.hpp>
+#include <boost/spirit/fusion/iterator/as_fusion_iterator.hpp>
+
+namespace boost { namespace fusion
+{
+ struct range_tag;
+
+ template <typename First, typename Last>
+ struct range : sequence_base<range<First, Last> >
+ {
+ typedef typename as_fusion_iterator<First>::type begin_type;
+ typedef typename as_fusion_iterator<Last>::type end_type;
+ typedef range_tag tag;
+
+ range(First const& first, Last const& last)
+ : first(as_fusion_iterator<First>::convert(first))
+ , last(as_fusion_iterator<Last>::convert(last)) {}
+
+ begin_type first;
+ end_type last;
+ };
+}}
+
+#endif
+
+
diff --git a/boost/boost/spirit/fusion/sequence/single_view.hpp b/boost/boost/spirit/fusion/sequence/single_view.hpp
new file mode 100644
index 00000000000..55a81a8ac70
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/single_view.hpp
@@ -0,0 +1,39 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_SINGLE_VIEW_HPP)
+#define FUSION_SEQUENCE_SINGLE_VIEW_HPP
+
+#include <boost/spirit/fusion/detail/access.hpp>
+#include <boost/spirit/fusion/sequence/detail/as_tuple_element.hpp>
+#include <boost/spirit/fusion/iterator/single_view_iterator.hpp>
+#include <boost/spirit/fusion/sequence/detail/single_view_begin_end_trts.hpp>
+#include <boost/spirit/fusion/sequence/detail/sequence_base.hpp>
+
+namespace boost { namespace fusion
+{
+ struct single_view_tag;
+
+ template <typename T>
+ struct single_view : sequence_base<single_view<T> >
+ {
+ typedef single_view_tag tag;
+ typedef typename detail::as_tuple_element<T>::type value_type;
+
+ single_view()
+ : val() {}
+
+ explicit single_view(typename detail::call_param<T>::type val)
+ : val(val) {}
+
+ value_type val;
+ };
+}}
+
+#endif
+
+
diff --git a/boost/boost/spirit/fusion/sequence/size.hpp b/boost/boost/spirit/fusion/sequence/size.hpp
new file mode 100644
index 00000000000..1fdc5b9b50c
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/size.hpp
@@ -0,0 +1,43 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_SIZE_HPP)
+#define FUSION_SEQUENCE_SIZE_HPP
+
+#include <boost/spirit/fusion/detail/config.hpp>
+#include <boost/spirit/fusion/sequence/as_fusion_sequence.hpp>
+
+namespace boost { namespace fusion
+{
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // size metafunction
+ //
+ // Get the size of a Sequence. Usage:
+ //
+ // size<Sequence>::value
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ namespace meta
+ {
+ template <typename Tag>
+ struct size_impl
+ {
+ template <typename Sequence>
+ struct apply {};
+ };
+
+ template <typename Sequence>
+ struct size
+ : size_impl<typename as_fusion_sequence<Sequence>::type::tag>::
+ template apply<typename as_fusion_sequence<Sequence>::type>
+ {};
+ }
+}}
+
+#endif
diff --git a/boost/boost/spirit/fusion/sequence/tie.hpp b/boost/boost/spirit/fusion/sequence/tie.hpp
new file mode 100644
index 00000000000..68e180300e0
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/tie.hpp
@@ -0,0 +1,58 @@
+/*=============================================================================
+ Copyright (c) 1999-2003 Jaakko Järvi
+ Copyright (c) 2001-2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_TIE_HPP)
+#define FUSION_SEQUENCE_TIE_HPP
+
+#include <boost/ref.hpp>
+#include <boost/preprocessor/repetition/enum.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+#include <boost/spirit/fusion/sequence/tuple.hpp>
+
+namespace boost { namespace fusion
+{
+ // Swallows any assignment (by Doug Gregor)
+ namespace detail
+ {
+ struct swallow_assign
+ {
+ template<typename T>
+ swallow_assign const&
+ operator=(const T&) const
+ {
+ return *this;
+ }
+ };
+ }
+
+ // "ignore" allows tuple positions to be ignored when using "tie".
+ detail::swallow_assign const ignore = detail::swallow_assign();
+
+#define FUSION_REFERENCE_TYPE(z, n, data) \
+ BOOST_PP_CAT(T, n)&
+
+#define FUSION_TIE(z, n, _) \
+ \
+ template <BOOST_PP_ENUM_PARAMS(n, typename T)> \
+ inline tuple<BOOST_PP_ENUM(n, FUSION_REFERENCE_TYPE, _)> \
+ tie(BOOST_PP_ENUM_BINARY_PARAMS(n, T, & _)) \
+ { \
+ return tuple<BOOST_PP_ENUM(n, FUSION_REFERENCE_TYPE, _)>( \
+ BOOST_PP_ENUM_PARAMS(n, _)); \
+ }
+
+ BOOST_PP_REPEAT_FROM_TO(1, FUSION_MAX_TUPLE_SIZE, FUSION_TIE, _)
+
+#undef FUSION_REFERENCE_TYPE
+#undef FUSION_TIE
+
+}}
+
+#endif
diff --git a/boost/boost/spirit/fusion/sequence/transform_view.hpp b/boost/boost/spirit/fusion/sequence/transform_view.hpp
new file mode 100644
index 00000000000..d1815b80a40
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/transform_view.hpp
@@ -0,0 +1,51 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_TRANSFORM_VIEW_HPP)
+#define FUSION_SEQUENCE_TRANSFORM_VIEW_HPP
+
+#include <boost/spirit/fusion/detail/access.hpp>
+#include <boost/spirit/fusion/iterator/transform_view_iterator.hpp>
+#include <boost/spirit/fusion/sequence/detail/trsfrm_view_begin_end_trts.hpp>
+#include <boost/spirit/fusion/sequence/detail/sequence_base.hpp>
+#include <boost/spirit/fusion/sequence/begin.hpp>
+#include <boost/spirit/fusion/sequence/end.hpp>
+
+namespace boost { namespace fusion
+{
+ struct transform_view_tag;
+
+ template <typename Sequence, typename F>
+ struct transform_view : sequence_base<transform_view<Sequence, F> >
+ {
+ typedef as_fusion_sequence<Sequence> seq_converter;
+ typedef typename seq_converter::type seq;
+
+ typedef transform_view_tag tag;
+ typedef typename meta::begin<seq>::type first_type;
+ typedef typename meta::end<seq>::type last_type;
+ typedef F transform_type;
+
+ transform_view(Sequence& seq, F f);
+
+ first_type first;
+ last_type last;
+ transform_type f;
+ };
+
+ template <typename Sequence, typename F>
+ transform_view<Sequence,F>::transform_view(Sequence& seq, F f)
+ : first(fusion::begin(seq))
+ , last(fusion::end(seq))
+ , f(f)
+ {}
+}}
+
+#endif
+
+
diff --git a/boost/boost/spirit/fusion/sequence/tuple.hpp b/boost/boost/spirit/fusion/sequence/tuple.hpp
new file mode 100644
index 00000000000..5d27572ed3a
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/tuple.hpp
@@ -0,0 +1,74 @@
+/*=============================================================================
+ Copyright (c) 1999-2003 Jaakko Järvi
+ Copyright (c) 2001-2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_TUPLE_HPP)
+#define FUSION_SEQUENCE_TUPLE_HPP
+
+#include <utility> // for std::pair
+#include <boost/spirit/fusion/detail/access.hpp>
+#include <boost/spirit/fusion/sequence/detail/tuple_builder.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
+#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+#include <boost/spirit/fusion/sequence/tuple_forward.hpp>
+
+#define FUSION_TUPLE_CONSTRUCTOR(z, n, _) \
+ tuple(BOOST_PP_ENUM_BINARY_PARAMS( \
+ n, typename detail::call_param<T, >::type _)) \
+ : base_type(BOOST_PP_ENUM_PARAMS(n, _)) \
+ {}
+
+namespace boost { namespace fusion
+{
+ struct void_t;
+
+ template <BOOST_PP_ENUM_PARAMS(FUSION_MAX_TUPLE_SIZE, typename T)>
+ struct tuple :
+ detail::tuple_builder<
+ BOOST_PP_ENUM_PARAMS(FUSION_MAX_TUPLE_SIZE, T)
+ >::type
+ {
+ typedef
+ typename detail::tuple_builder<
+ BOOST_PP_ENUM_PARAMS(FUSION_MAX_TUPLE_SIZE, T)
+ >::type
+ base_type;
+
+ tuple()
+ : base_type() {}
+
+ template <typename X>
+ /*explicit*/ tuple(X const& x)
+ : base_type(x) {}
+
+ explicit tuple(typename detail::call_param<T0>::type _0)
+ : base_type(_0) {}
+
+ BOOST_PP_REPEAT_FROM_TO(
+ 2, FUSION_MAX_TUPLE_SIZE, FUSION_TUPLE_CONSTRUCTOR, _)
+
+ template <typename X>
+ tuple& operator=(X const& other)
+ {
+ base() = other;
+ return *this;
+ }
+
+ typedef detail::tuple_builder<BOOST_PP_ENUM_PARAMS(FUSION_MAX_TUPLE_SIZE, T)> builder;
+
+ typedef typename builder::begin begin;
+ typedef typename builder::end end;
+ typedef typename builder::size size;
+
+ base_type& base() { return *this; }
+ base_type const& base() const { return *this; }
+ };
+}}
+
+#endif
diff --git a/boost/boost/spirit/fusion/sequence/tuple10.hpp b/boost/boost/spirit/fusion/sequence/tuple10.hpp
new file mode 100644
index 00000000000..16414183a5d
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/tuple10.hpp
@@ -0,0 +1,307 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_TUPLE10_HPP)
+#define FUSION_SEQUENCE_TUPLE10_HPP
+
+#include <boost/spirit/fusion/detail/config.hpp>
+#include <boost/spirit/fusion/sequence/detail/tuple10.hpp>
+#include <boost/spirit/fusion/sequence/detail/sequence_base.hpp>
+#include <boost/spirit/fusion/detail/access.hpp>
+#include <utility> // for std::pair
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/vector/vector10.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/utility/addressof.hpp>
+
+namespace boost { namespace fusion
+{
+ namespace meta
+ {
+ template <typename Iterator>
+ struct next;
+ }
+
+ struct tuple_tag;
+
+ struct tuple0 : sequence_base<tuple0>
+ {
+ typedef mpl::void_ types;
+ typedef tuple_tag tag;
+ typedef mpl::int_<0> size;
+ typedef tuple0 identity_type;
+
+ tuple0() {}
+
+ template <typename Iterator>
+ tuple0(Iterator const& i) {}
+ };
+
+ template <typename T0>
+ struct tuple1 : sequence_base<tuple1<T0> >
+ {
+ typedef mpl::vector1<T0> types;
+ typedef tuple_tag tag;
+ typedef mpl::int_<1> size;
+ typedef tuple1 identity_type;
+
+ tuple1()
+ : m0(T0())
+ {}
+
+ template <typename X>
+ explicit tuple1(X const& x)
+ : m0(construct(x, detail::disambiguate<X, T0>::call()))
+ {}
+
+ tuple1(typename detail::call_param<T0>::type _0)
+ : m0(_0)
+ {}
+
+ template <typename U0>
+ tuple1& operator=(tuple1<U0> const& t)
+ {
+ m0 = t.m0;
+ return *this;
+ }
+
+ tuple1& operator=(tuple1 const& t)
+ {
+ m0 = t.m0;
+ return *this;
+ }
+
+ T0 m0;
+
+ private:
+
+ template <typename Iterator>
+ static T0
+ construct(Iterator const& i, detail::disambiguate_as_iterator)
+ {
+ return *i;
+ }
+
+ template <typename Tuple>
+ static T0
+ construct(Tuple const& t, detail::disambiguate_as_tuple)
+ {
+ return t.m0;
+ }
+
+ template <typename X>
+ static T0
+ construct(X const& v, detail::disambiguate_as_data)
+ {
+ return v;
+ }
+ };
+
+ template <typename T0, typename T1>
+ struct tuple2;
+
+ template <typename T0, typename T1>
+ struct tuple_data2 : sequence_base<tuple2<T0, T1> >
+ {
+ typedef mpl::vector2<T0, T1> types;
+ typedef tuple_tag tag;
+ typedef mpl::int_<2> size;
+ typedef tuple_data2 identity_type;
+
+ tuple_data2()
+ : m0(T0())
+ , m1(T1())
+ {}
+
+ tuple_data2(
+ typename detail::call_param<T0>::type _0
+ , typename detail::call_param<T1>::type _1
+ )
+ : m0(_0)
+ , m1(_1)
+ {}
+
+ template <typename A0, typename A1>
+ tuple_data2(detail::disambiguate_as_iterator, A0& _0, A1& _1)
+ : m0(*_0)
+ , m1(*_1)
+ {}
+
+ T0 m0;
+ T1 m1;
+ };
+
+ template <typename T0, typename T1, typename T2>
+ struct tuple3;
+
+ template <typename T0, typename T1, typename T2>
+ struct tuple_data3 : sequence_base<tuple3<T0, T1, T2> >
+ {
+ typedef mpl::vector3<T0, T1, T2> types;
+ typedef tuple_tag tag;
+ typedef mpl::int_<3> size;
+ typedef tuple_data3 identity_type;
+
+ tuple_data3()
+ : m0(T0())
+ , m1(T1())
+ , m2(T2())
+ {}
+
+ tuple_data3(
+ typename detail::call_param<T0>::type _0
+ , typename detail::call_param<T1>::type _1
+ , typename detail::call_param<T2>::type _2
+ )
+ : m0(_0)
+ , m1(_1)
+ , m2(_2)
+ {}
+
+ template <typename A0, typename A1, typename A2>
+ tuple_data3(detail::disambiguate_as_iterator, A0& _0, A1& _1, A2& _2)
+ : m0(*_0)
+ , m1(*_1)
+ , m2(*_2)
+ {}
+
+ T0 m0;
+ T1 m1;
+ T2 m2;
+ };
+
+ template <typename T0, typename T1>
+ struct tuple2 : tuple_data2<T0, T1>
+ {
+ tuple2()
+ : tuple_data2<T0, T1>()
+ {}
+
+ tuple2(
+ typename detail::call_param<T0>::type _0
+ , typename detail::call_param<T1>::type _1
+ )
+ : tuple_data2<T0, T1>(_0, _1)
+ {}
+
+ template <typename X>
+ explicit tuple2(X const& x)
+ : tuple_data2<T0, T1>(construct(x, addressof(x)))
+ {}
+
+ template <typename U0, typename U1>
+ tuple2& operator=(tuple2<U0, U1> const& t)
+ {
+ this->m0 = t.m0;
+ this->m1 = t.m1;
+ return *this;
+ }
+
+ template <typename First, typename Second>
+ tuple2& operator=(std::pair<First, Second> const& p)
+ {
+ this->m0 = p.first;
+ this->m1 = p.second;
+ return *this;
+ }
+
+ private:
+
+ template <typename Iterator>
+ static tuple_data2<T0, T1>
+ construct(Iterator const& i, void const*)
+ {
+ typedef typename meta::next<Iterator>::type i1_type;
+ i1_type i1(fusion::next(i));
+ return tuple_data2<T0, T1>(detail::disambiguate_as_iterator(), i, i1);
+ }
+
+ template <typename Tuple>
+ static tuple_data2<T0, T1>
+ construct(Tuple const& t, sequence_root const*)
+ {
+ return tuple_data2<T0, T1>(t.m0, t.m1);
+ }
+
+ template <typename U0, typename U1>
+ static tuple_data2<T0, T1>
+ construct(std::pair<U0, U1> const& p, std::pair<U0, U1> const*)
+ {
+ return tuple_data2<T0, T1>(p.first, p.second);
+ }
+ };
+
+#if BOOST_WORKAROUND(__BORLANDC__, <= 0x551)
+ namespace detail
+ {
+ template <typename Iterator>
+ struct next_iter3
+ {
+ typedef typename meta::next<Iterator>::type i1_type;
+ typedef typename meta::next<i1_type>::type i2_type;
+ };
+ }
+#endif
+
+ template <typename T0, typename T1, typename T2>
+ struct tuple3 : tuple_data3<T0, T1, T2>
+ {
+ tuple3()
+ : tuple_data3<T0, T1, T2>()
+ {}
+
+ tuple3(
+ typename detail::call_param<T0>::type _0
+ , typename detail::call_param<T1>::type _1
+ , typename detail::call_param<T2>::type _2
+ )
+ : tuple_data3<T0, T1, T2>(_0, _1, _2)
+ {}
+
+ template <typename X>
+ explicit tuple3(X const& x)
+ : tuple_data3<T0, T1, T2>(construct(x, &x))
+ {}
+
+ template <typename U0, typename U1, typename U2>
+ tuple3& operator=(tuple3<U0, U1, U2> const& t)
+ {
+ this->m0 = t.m0;
+ this->m1 = t.m1;
+ this->m2 = t.m2;
+ return *this;
+ }
+
+ private:
+
+ template <typename Iterator>
+ static tuple_data3<T0, T1, T2>
+ construct(Iterator const& i, void const*)
+ {
+#if BOOST_WORKAROUND(__BORLANDC__, <= 0x551)
+ typedef detail::next_iter3<Iterator> next_iter;
+ next_iter::i1_type i1(fusion::next(i));
+ next_iter::i2_type i2(fusion::next(i1));
+#else
+ typedef typename meta::next<Iterator>::type i1_type;
+ typedef typename meta::next<i1_type>::type i2_type;
+ i1_type i1(fusion::next(i));
+ i2_type i2(fusion::next(i1));
+#endif
+ return tuple_data3<T0, T1, T2>(detail::disambiguate_as_iterator(), i, i1, i2);
+ }
+
+ template <typename Tuple>
+ static tuple_data3<T0, T1, T2>
+ construct(Tuple const& t, sequence_root const*)
+ {
+ return tuple_data3<T0, T1, T2>(t.m0, t.m1, t.m2);
+ }
+ };
+}}
+
+#endif
diff --git a/boost/boost/spirit/fusion/sequence/tuple20.hpp b/boost/boost/spirit/fusion/sequence/tuple20.hpp
new file mode 100644
index 00000000000..5dac6e93f3d
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/tuple20.hpp
@@ -0,0 +1,51 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_TUPLE20_HPP)
+#define FUSION_SEQUENCE_TUPLE20_HPP
+
+#include <boost/spirit/fusion/detail/config.hpp>
+#include <boost/spirit/fusion/detail/access.hpp>
+#include <boost/spirit/fusion/iterator/tuple_iterator.hpp>
+#include <boost/spirit/fusion/sequence/detail/tuple_macro.hpp>
+#include <boost/spirit/fusion/sequence/detail/tuple_access_result.hpp>
+#include <boost/spirit/fusion/sequence/detail/tuple_value_at_traits.hpp>
+#include <boost/spirit/fusion/sequence/detail/tuple_at_traits.hpp>
+#include <boost/spirit/fusion/sequence/detail/tuple_size_traits.hpp>
+#include <boost/spirit/fusion/sequence/detail/tuple_begin_end_traits.hpp>
+#include <boost/spirit/fusion/sequence/detail/sequence_base.hpp>
+#include <boost/spirit/fusion/iterator/next.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/at.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/vector/vector20.hpp>
+#include <boost/preprocessor/iteration/iterate.hpp>
+
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+# include <boost/spirit/fusion/iterator/next.hpp>
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// See tuple10.hpp and detail/tuple10.ipp. The following code are
+// expansions of the tuple_access<N> and tupleN+1 classes for N = 10..20.
+//
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace fusion
+{
+ namespace detail
+ {
+ BOOST_PP_REPEAT_FROM_TO(10, 20, FUSION_TUPLE_N_ACCESS, _)
+ }
+
+ struct tuple_tag;
+
+# define BOOST_PP_ITERATION_PARAMS_1 (3, (11, 20, <boost/spirit/fusion/sequence/detail/tuple_body.hpp>))
+# include BOOST_PP_ITERATE()
+}}
+
+#endif
diff --git a/boost/boost/spirit/fusion/sequence/tuple30.hpp b/boost/boost/spirit/fusion/sequence/tuple30.hpp
new file mode 100644
index 00000000000..bf7abebcec9
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/tuple30.hpp
@@ -0,0 +1,51 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_TUPLE30_HPP)
+#define FUSION_SEQUENCE_TUPLE30_HPP
+
+#include <boost/spirit/fusion/detail/config.hpp>
+#include <boost/spirit/fusion/detail/access.hpp>
+#include <boost/spirit/fusion/iterator/tuple_iterator.hpp>
+#include <boost/spirit/fusion/sequence/detail/tuple_macro.hpp>
+#include <boost/spirit/fusion/sequence/detail/tuple_access_result.hpp>
+#include <boost/spirit/fusion/sequence/detail/tuple_value_at_traits.hpp>
+#include <boost/spirit/fusion/sequence/detail/tuple_at_traits.hpp>
+#include <boost/spirit/fusion/sequence/detail/tuple_size_traits.hpp>
+#include <boost/spirit/fusion/sequence/detail/tuple_begin_end_traits.hpp>
+#include <boost/spirit/fusion/sequence/detail/sequence_base.hpp>
+#include <boost/spirit/fusion/iterator/next.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/at.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/vector/vector30.hpp>
+#include <boost/preprocessor/iteration/iterate.hpp>
+
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+# include <boost/spirit/fusion/iterator/next.hpp>
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// See tuple10.hpp and detail/tuple10.ipp. The following code are
+// expansions of the tuple_access<N> and tupleN+1 classes for N = 20..30.
+//
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace fusion
+{
+ namespace detail
+ {
+ BOOST_PP_REPEAT_FROM_TO(20, 30, FUSION_TUPLE_N_ACCESS, _)
+ }
+
+ struct tuple_tag;
+
+# define BOOST_PP_ITERATION_PARAMS_1 (3, (21, 30, <boost/spirit/fusion/sequence/detail/tuple_body.hpp>))
+# include BOOST_PP_ITERATE()
+}}
+
+#endif
diff --git a/boost/boost/spirit/fusion/sequence/tuple40.hpp b/boost/boost/spirit/fusion/sequence/tuple40.hpp
new file mode 100644
index 00000000000..fb0d135637f
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/tuple40.hpp
@@ -0,0 +1,51 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_TUPLE40_HPP)
+#define FUSION_SEQUENCE_TUPLE40_HPP
+
+#include <boost/spirit/fusion/detail/config.hpp>
+#include <boost/spirit/fusion/detail/access.hpp>
+#include <boost/spirit/fusion/iterator/tuple_iterator.hpp>
+#include <boost/spirit/fusion/sequence/detail/tuple_macro.hpp>
+#include <boost/spirit/fusion/sequence/detail/tuple_access_result.hpp>
+#include <boost/spirit/fusion/sequence/detail/tuple_value_at_traits.hpp>
+#include <boost/spirit/fusion/sequence/detail/tuple_at_traits.hpp>
+#include <boost/spirit/fusion/sequence/detail/tuple_size_traits.hpp>
+#include <boost/spirit/fusion/sequence/detail/tuple_begin_end_traits.hpp>
+#include <boost/spirit/fusion/sequence/detail/sequence_base.hpp>
+#include <boost/spirit/fusion/iterator/next.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/at.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/vector/vector40.hpp>
+#include <boost/preprocessor/iteration/iterate.hpp>
+
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+# include <boost/spirit/fusion/iterator/next.hpp>
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// See tuple10.hpp and detail/tuple10.ipp. The following code are
+// expansions of the tuple_access<N> and tupleN+1 classes for N = 30..40.
+//
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace fusion
+{
+ namespace detail
+ {
+ BOOST_PP_REPEAT_FROM_TO(30, 40, FUSION_TUPLE_N_ACCESS, _)
+ }
+
+ struct tuple_tag;
+
+# define BOOST_PP_ITERATION_PARAMS_1 (3, (31, 40, <boost/spirit/fusion/sequence/detail/tuple_body.hpp>))
+# include BOOST_PP_ITERATE()
+}}
+
+#endif
diff --git a/boost/boost/spirit/fusion/sequence/tuple50.hpp b/boost/boost/spirit/fusion/sequence/tuple50.hpp
new file mode 100644
index 00000000000..301b53d8008
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/tuple50.hpp
@@ -0,0 +1,51 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_TUPLE50_HPP)
+#define FUSION_SEQUENCE_TUPLE50_HPP
+
+#include <boost/spirit/fusion/detail/config.hpp>
+#include <boost/spirit/fusion/detail/access.hpp>
+#include <boost/spirit/fusion/iterator/tuple_iterator.hpp>
+#include <boost/spirit/fusion/sequence/detail/tuple_macro.hpp>
+#include <boost/spirit/fusion/sequence/detail/tuple_access_result.hpp>
+#include <boost/spirit/fusion/sequence/detail/tuple_value_at_traits.hpp>
+#include <boost/spirit/fusion/sequence/detail/tuple_at_traits.hpp>
+#include <boost/spirit/fusion/sequence/detail/tuple_size_traits.hpp>
+#include <boost/spirit/fusion/sequence/detail/tuple_begin_end_traits.hpp>
+#include <boost/spirit/fusion/sequence/detail/sequence_base.hpp>
+#include <boost/spirit/fusion/iterator/next.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/at.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/vector/vector50.hpp>
+#include <boost/preprocessor/iteration/iterate.hpp>
+
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+# include <boost/spirit/fusion/iterator/next.hpp>
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// See tuple10.hpp and detail/tuple10.hpp. The following code are
+// expansions of the tuple_access<N> and tupleN+1 classes for N = 40..50.
+//
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace fusion
+{
+ namespace detail
+ {
+ BOOST_PP_REPEAT_FROM_TO(40, 50, FUSION_TUPLE_N_ACCESS, _)
+ }
+
+ struct tuple_tag;
+
+# define BOOST_PP_ITERATION_PARAMS_1 (3, (41, 50, <boost/spirit/fusion/sequence/detail/tuple_body.hpp>))
+# include BOOST_PP_ITERATE()
+}}
+
+#endif
diff --git a/boost/boost/spirit/fusion/sequence/tuple_element.hpp b/boost/boost/spirit/fusion/sequence/tuple_element.hpp
new file mode 100644
index 00000000000..59a8e9a4274
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/tuple_element.hpp
@@ -0,0 +1,46 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_TUPLE_ELEMENT_HPP)
+#define FUSION_SEQUENCE_TUPLE_ELEMENT_HPP
+
+#include <boost/spirit/fusion/sequence/value_at.hpp>
+#include <utility>
+
+namespace boost { namespace fusion
+{
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // tuple_element metafunction
+ //
+ // Given a constant integer N and a Sequence, returns the
+ // tuple element type at slot N. (N is a zero based index). Usage:
+ //
+ // tuple_element<N, Sequence>::type
+ //
+ // This metafunction is provided here for compatibility with the
+ // tuples TR1 specification. This metafunction forwards to
+ // meta::value_at_c<Sequence>.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <int N, typename Sequence>
+ struct tuple_element : meta::value_at_c<Sequence, N> {};
+
+ template<typename T1, typename T2>
+ struct tuple_element<0, std::pair<T1, T2> >
+ {
+ typedef T1 type;
+ };
+
+ template<typename T1, typename T2>
+ struct tuple_element<1, std::pair<T1, T2> >
+ {
+ typedef T2 type;
+ };
+}}
+
+#endif
diff --git a/boost/boost/spirit/fusion/sequence/tuple_forward.hpp b/boost/boost/spirit/fusion/sequence/tuple_forward.hpp
new file mode 100644
index 00000000000..4b44a437f0a
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/tuple_forward.hpp
@@ -0,0 +1,28 @@
+/*=============================================================================
+ Copyright (c) 1999-2003 Jaakko Järvi
+ Copyright (c) 2001-2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_TUPLE_FORWARD_HPP)
+#define FUSION_SEQUENCE_TUPLE_FORWARD_HPP
+
+#include <boost/spirit/fusion/sequence/limits.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
+#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+
+namespace boost { namespace fusion
+{
+ struct void_t;
+
+ template <
+ BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
+ FUSION_MAX_TUPLE_SIZE, typename T, void_t)
+ >
+ struct tuple;
+}}
+
+#endif
diff --git a/boost/boost/spirit/fusion/sequence/tuple_size.hpp b/boost/boost/spirit/fusion/sequence/tuple_size.hpp
new file mode 100644
index 00000000000..df740246fd2
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/tuple_size.hpp
@@ -0,0 +1,38 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_TUPLE_SIZE_HPP)
+#define FUSION_SEQUENCE_TUPLE_SIZE_HPP
+
+#include <boost/spirit/fusion/sequence/size.hpp>
+#include <boost/mpl/int.hpp>
+
+#include <utility>
+
+namespace boost { namespace fusion
+{
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // tuple_size metafunction
+ //
+ // Get the size of Sequence. Usage:
+ //
+ // tuple_size<Sequence>::value
+ //
+ // This metafunction is provided here for compatibility with the
+ // tuples TR1 specification. This metafunction forwards to
+ // meta::size<Sequence>.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename Sequence>
+ struct tuple_size : meta::size<Sequence> {};
+
+ template<typename T1, typename T2>
+ struct tuple_size<std::pair<T1, T2> > : boost::mpl::int_<2> { };
+}}
+
+#endif
diff --git a/boost/boost/spirit/fusion/sequence/type_sequence.hpp b/boost/boost/spirit/fusion/sequence/type_sequence.hpp
new file mode 100644
index 00000000000..6df8891ccfe
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/type_sequence.hpp
@@ -0,0 +1,31 @@
+/*=============================================================================
+ Copyright (c) 2003 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_TYPE_SEQUENCE_HPP)
+#define FUSION_SEQUENCE_TYPE_SEQUENCE_HPP
+
+#include <boost/spirit/fusion/detail/access.hpp>
+#include <boost/spirit/fusion/iterator/type_sequence_iterator.hpp>
+#include <boost/spirit/fusion/sequence/detail/type_seq_begin_end_trts.hpp>
+#include <boost/spirit/fusion/sequence/detail/sequence_base.hpp>
+#include <boost/type_traits/remove_const.hpp>
+
+namespace boost { namespace fusion
+{
+ struct type_sequence_tag;
+
+ template <typename Sequence>
+ struct type_sequence : sequence_base<type_sequence<Sequence> >
+ {
+ typedef type_sequence_tag tag;
+ typedef typename remove_const<Sequence>::type sequence_type;
+ };
+}}
+
+#endif
+
+
diff --git a/boost/boost/spirit/fusion/sequence/value_at.hpp b/boost/boost/spirit/fusion/sequence/value_at.hpp
new file mode 100644
index 00000000000..5cebad33e78
--- /dev/null
+++ b/boost/boost/spirit/fusion/sequence/value_at.hpp
@@ -0,0 +1,45 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Joel de Guzman
+ Copyright (c) 2004 Peder Holt
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(FUSION_SEQUENCE_VALUE_AT_HPP)
+#define FUSION_SEQUENCE_VALUE_AT_HPP
+
+#include <boost/spirit/fusion/detail/config.hpp>
+#include <boost/spirit/fusion/sequence/as_fusion_sequence.hpp>
+
+namespace boost { namespace fusion
+{
+ namespace meta
+ {
+ template <typename Tag>
+ struct value_at_impl
+ {
+ template <typename Sequence, int N>
+ struct apply {
+ typedef int type;
+ };
+ };
+
+ template <typename Sequence, int N>
+ struct value_at_c
+ {
+ typedef as_fusion_sequence<Sequence> seq_converter;
+ typedef typename seq_converter::type seq;
+
+ typedef typename
+ value_at_impl<FUSION_GET_TAG(seq)>::
+ template apply<seq, N>::type
+ type;
+ };
+
+ template <typename Sequence, typename N>
+ struct value_at : value_at_c<Sequence, N::value> {};
+ }
+}}
+
+#endif
diff --git a/boost/boost/spirit/iterator.hpp b/boost/boost/spirit/iterator.hpp
new file mode 100644
index 00000000000..b0719c13b0d
--- /dev/null
+++ b/boost/boost/spirit/iterator.hpp
@@ -0,0 +1,26 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Daniel Nuffer
+ Copyright (c) 2003 Giovanni Bajo
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_ITERATOR_MAIN_HPP)
+#define BOOST_SPIRIT_ITERATOR_MAIN_HPP
+
+#include <boost/spirit/version.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Master header for Spirit.Iterators
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#include <boost/spirit/iterator/file_iterator.hpp>
+#include <boost/spirit/iterator/fixed_size_queue.hpp>
+#include <boost/spirit/iterator/position_iterator.hpp>
+#include <boost/spirit/iterator/multi_pass.hpp>
+
+#endif // !defined(BOOST_SPIRIT_ITERATOR_MAIN_HPP)
diff --git a/boost/boost/spirit/iterator/file_iterator.hpp b/boost/boost/spirit/iterator/file_iterator.hpp
new file mode 100644
index 00000000000..3edd0c072f2
--- /dev/null
+++ b/boost/boost/spirit/iterator/file_iterator.hpp
@@ -0,0 +1,225 @@
+/*=============================================================================
+ Copyright (c) 2003 Giovanni Bajo
+ Copyright (c) 2003 Thomas Witt
+ Copyright (c) 2003 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// File Iterator structure
+//
+// The new structure is designed on layers. The top class (used by the user)
+// is file_iterator, which implements a full random access iterator through
+// the file, and some specific member functions (constructor that opens
+// the file, make_end() to generate the end iterator, operator bool to check
+// if the file was opened correctly).
+//
+// file_iterator implements the random access iterator interface by the means
+// of boost::iterator_adaptor, that is inhering an object created with it.
+// iterator_adaptor gets a low-level file iterator implementation (with just
+// a few member functions) and a policy (that basically describes to it how
+// the low-level file iterator interface is). The advantage is that
+// with boost::iterator_adaptor only 5 functions are needed to implement
+// a fully conformant random access iterator, instead of dozens of functions
+// and operators.
+//
+// There are two low-level file iterators implemented in this module. The
+// first (std_file_iterator) uses cstdio stream functions (fopen/fread), which
+// support full buffering, and is available everywhere (it's standard C++).
+// The second (mmap_file_iterator) is currently available only on Windows
+// platforms, and uses memory mapped files, which gives a decent speed boost.
+//
+///////////////////////////////////////////////////////////////////////////////
+//
+// TODO LIST:
+//
+// - In the Win32 mmap iterator, we could check if keeping a handle to the
+// opened file is really required. If it's not, we can just store the file
+// length (for make_end()) and save performance. Notice that this should be
+// tested under different Windows versions, the behaviour might change.
+// - Add some error support (by the means of some exceptions) in case of
+// low-level I/O failure.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_SPIRIT_FILE_ITERATOR_HPP
+#define BOOST_SPIRIT_FILE_ITERATOR_HPP
+
+#include <string>
+#include <boost/config.hpp>
+#include <boost/iterator_adaptors.hpp>
+#include <boost/spirit/core/safe_bool.hpp>
+
+#include <boost/spirit/iterator/file_iterator_fwd.hpp>
+
+#if !defined(BOOST_SPIRIT_FILEITERATOR_STD)
+# if (defined(WIN32) || defined(_WIN32) || defined(__WIN32__)) \
+ && !defined(BOOST_DISABLE_WIN32)
+# define BOOST_SPIRIT_FILEITERATOR_WINDOWS
+# elif defined(BOOST_HAS_UNISTD_H)
+extern "C"
+{
+# include <unistd.h>
+}
+# ifdef _POSIX_MAPPED_FILES
+# define BOOST_SPIRIT_FILEITERATOR_POSIX
+# endif // _POSIX_MAPPED_FILES
+# endif // BOOST_HAS_UNISTD_H
+
+# if !defined(BOOST_SPIRIT_FILEITERATOR_WINDOWS) && \
+ !defined(BOOST_SPIRIT_FILEITERATOR_POSIX)
+# define BOOST_SPIRIT_FILEITERATOR_STD
+# endif
+#endif // BOOST_SPIRIT_FILEITERATOR_STD
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+template <
+ typename CharT = char,
+ typename BaseIterator =
+#ifdef BOOST_SPIRIT_FILEITERATOR_STD
+ fileiter_impl::std_file_iterator<CharT>
+#else
+ fileiter_impl::mmap_file_iterator<CharT>
+#endif
+> class file_iterator;
+
+///////////////////////////////////////////////////////////////////////////////
+namespace fileiter_impl {
+
+ /////////////////////////////////////////////////////////////////////////
+ //
+ // file_iter_generator
+ //
+ // Template meta-function to invoke boost::iterator_adaptor
+ // NOTE: This cannot be moved into the implementation file because of
+ // a bug of MSVC 7.0 and previous versions (base classes types are
+ // looked up at compilation time, not instantion types, and
+ // file_iterator would break).
+ //
+ /////////////////////////////////////////////////////////////////////////
+
+#if !defined(BOOST_ITERATOR_ADAPTORS_VERSION) || \
+ BOOST_ITERATOR_ADAPTORS_VERSION < 0x0200
+#error "Please use at least Boost V1.31.0 while compiling the file_iterator class!"
+#else // BOOST_ITERATOR_ADAPTORS_VERSION < 0x0200
+
+ template <typename CharT, typename BaseIteratorT>
+ struct file_iter_generator
+ {
+ public:
+ typedef BaseIteratorT adapted_t;
+ typedef typename adapted_t::value_type value_type;
+
+ typedef boost::iterator_adaptor <
+ file_iterator<CharT, BaseIteratorT>,
+ adapted_t,
+ value_type const,
+ std::random_access_iterator_tag,
+ boost::use_default,
+ std::ptrdiff_t
+ > type;
+ };
+
+#endif // BOOST_ITERATOR_ADAPTORS_VERSION < 0x0200
+
+///////////////////////////////////////////////////////////////////////////////
+} /* namespace impl */
+
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// file_iterator
+//
+// Iterates through an opened file.
+//
+// The main iterator interface is implemented by the iterator_adaptors
+// library, which wraps a conforming iterator interface around the
+// impl::BaseIterator class. This class merely derives the iterator_adaptors
+// generated class to implement the custom constructors and make_end()
+// member function.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+template<typename CharT, typename BaseIteratorT>
+class file_iterator
+ : public fileiter_impl::file_iter_generator<CharT, BaseIteratorT>::type,
+ public safe_bool<file_iterator<CharT, BaseIteratorT> >
+{
+private:
+ typedef typename
+ fileiter_impl::file_iter_generator<CharT, BaseIteratorT>::type
+ base_t;
+ typedef typename
+ fileiter_impl::file_iter_generator<CharT, BaseIteratorT>::adapted_t
+ adapted_t;
+
+public:
+ file_iterator()
+ {}
+
+ file_iterator(std::string fileName)
+ : base_t(adapted_t(fileName))
+ {}
+
+ file_iterator(const base_t& iter)
+ : base_t(iter)
+ {}
+
+ inline file_iterator& operator=(const base_t& iter);
+ file_iterator make_end(void);
+
+ // operator bool. This borrows a trick from boost::shared_ptr to avoid
+ // to interfere with arithmetic operations.
+ bool operator_bool(void) const
+ { return this->base(); }
+
+private:
+ friend class ::boost::iterator_core_access;
+
+ typename base_t::reference dereference() const
+ {
+ return this->base_reference().get_cur_char();
+ }
+
+ void increment()
+ {
+ this->base_reference().next_char();
+ }
+
+ void decrement()
+ {
+ this->base_reference().prev_char();
+ }
+
+ void advance(typename base_t::difference_type n)
+ {
+ this->base_reference().advance(n);
+ }
+
+ template <
+ typename OtherDerivedT, typename OtherIteratorT,
+ typename V, typename C, typename R, typename D
+ >
+ typename base_t::difference_type distance_to(
+ iterator_adaptor<OtherDerivedT, OtherIteratorT, V, C, R, D>
+ const &x) const
+ {
+ return x.base().distance(this->base_reference());
+ }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+}} /* namespace boost::spirit */
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/iterator/impl/file_iterator.ipp> /* implementation */
+
+#endif /* BOOST_SPIRIT_FILE_ITERATOR_HPP */
+
diff --git a/boost/boost/spirit/iterator/file_iterator_fwd.hpp b/boost/boost/spirit/iterator/file_iterator_fwd.hpp
new file mode 100644
index 00000000000..5fb1bd6abb7
--- /dev/null
+++ b/boost/boost/spirit/iterator/file_iterator_fwd.hpp
@@ -0,0 +1,34 @@
+/*=============================================================================
+ Copyright (c) 2006 Tobias Schwinger
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+
+#if !defined(BOOST_SPIRIT_FILE_ITERATOR_FWD_HPP)
+#define BOOST_SPIRIT_FILE_ITERATOR_FWD_HPP
+
+namespace boost { namespace spirit {
+
+ namespace fileiter_impl
+ {
+ template <typename CharT = char>
+ class std_file_iterator;
+
+ // may never be defined -- so what...
+ template <typename CharT = char>
+ class mmap_file_iterator;
+ }
+
+ // no defaults here -- too much dependencies
+ template <
+ typename CharT,
+ typename BaseIterator
+ > class file_iterator;
+
+}} // namespace boost::spirit
+
+#endif
+
diff --git a/boost/boost/spirit/iterator/fixed_size_queue.hpp b/boost/boost/spirit/iterator/fixed_size_queue.hpp
new file mode 100644
index 00000000000..9f18b422880
--- /dev/null
+++ b/boost/boost/spirit/iterator/fixed_size_queue.hpp
@@ -0,0 +1,398 @@
+/*=============================================================================
+ Copyright (c) 2001, Daniel C. Nuffer
+ Copyright (c) 2003, Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef FIXED_SIZE_QUEUE
+#define FIXED_SIZE_QUEUE
+
+#include <cstdlib>
+#include <iterator>
+#include <cstddef>
+
+#include <boost/spirit/core/assert.hpp> // for BOOST_SPIRIT_ASSERT
+
+// FIXES for broken compilers
+#include <boost/config.hpp>
+#include <boost/iterator_adaptors.hpp>
+
+#define BOOST_SPIRIT_ASSERT_FSQ_SIZE \
+ BOOST_SPIRIT_ASSERT(((m_tail + N + 1) - m_head) % (N+1) == m_size % (N+1)) \
+ /**/
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+///////////////////////////////////////////////////////////////////////////////
+namespace impl {
+
+#if !defined(BOOST_ITERATOR_ADAPTORS_VERSION) || \
+ BOOST_ITERATOR_ADAPTORS_VERSION < 0x0200
+#error "Please use at least Boost V1.31.0 while compiling the fixed_size_queue class!"
+#else // BOOST_ITERATOR_ADAPTORS_VERSION < 0x0200
+
+template <typename QueueT, typename T, typename PointerT>
+class fsq_iterator
+: public boost::iterator_adaptor<
+ fsq_iterator<QueueT, T, PointerT>,
+ PointerT,
+ T,
+ std::random_access_iterator_tag
+ >
+{
+public:
+ typedef typename QueueT::position_t position;
+ typedef boost::iterator_adaptor<
+ fsq_iterator<QueueT, T, PointerT>, PointerT, T,
+ std::random_access_iterator_tag
+ > base_t;
+
+ fsq_iterator() {}
+ fsq_iterator(position const &p_) : p(p_) {}
+
+ position const &get_position() const { return p; }
+
+private:
+ friend class boost::iterator_core_access;
+
+ typename base_t::reference dereference() const
+ {
+ return p.self->m_queue[p.pos];
+ }
+
+ void increment()
+ {
+ ++p.pos;
+ if (p.pos == QueueT::MAX_SIZE+1)
+ p.pos = 0;
+ }
+
+ void decrement()
+ {
+ if (p.pos == 0)
+ p.pos = QueueT::MAX_SIZE;
+ else
+ --p.pos;
+ }
+
+ template <
+ typename OtherDerivedT, typename OtherIteratorT,
+ typename V, typename C, typename R, typename D
+ >
+ bool equal(iterator_adaptor<OtherDerivedT, OtherIteratorT, V, C, R, D>
+ const &x) const
+ {
+ position const &rhs_pos =
+ static_cast<OtherDerivedT const &>(x).get_position();
+ return (p.self == rhs_pos.self) && (p.pos == rhs_pos.pos);
+ }
+
+ template <
+ typename OtherDerivedT, typename OtherIteratorT,
+ typename V, typename C, typename R, typename D
+ >
+ typename base_t::difference_type distance_to(
+ iterator_adaptor<OtherDerivedT, OtherIteratorT, V, C, R, D>
+ const &x) const
+ {
+ typedef typename base_t::difference_type diff_t;
+
+ position const &p2 =
+ static_cast<OtherDerivedT const &>(x).get_position();
+ std::size_t pos1 = p.pos;
+ std::size_t pos2 = p2.pos;
+
+ // Undefined behaviour if the iterators come from different
+ // containers
+ BOOST_SPIRIT_ASSERT(p.self == p2.self);
+
+ if (pos1 < p.self->m_head)
+ pos1 += QueueT::MAX_SIZE;
+ if (pos2 < p2.self->m_head)
+ pos2 += QueueT::MAX_SIZE;
+
+ if (pos2 > pos1)
+ return diff_t(pos2 - pos1);
+ else
+ return -diff_t(pos1 - pos2);
+ }
+
+ void advance(typename base_t::difference_type n)
+ {
+ // Notice that we don't care values of n that can
+ // wrap around more than one time, since it would
+ // be undefined behaviour anyway (going outside
+ // the begin/end range). Negative wrapping is a bit
+ // cumbersome because we don't want to case p.pos
+ // to signed.
+ if (n < 0)
+ {
+ n = -n;
+ if (p.pos < (std::size_t)n)
+ p.pos = QueueT::MAX_SIZE+1 - (n - p.pos);
+ else
+ p.pos -= n;
+ }
+ else
+ {
+ p.pos += n;
+ if (p.pos >= QueueT::MAX_SIZE+1)
+ p.pos -= QueueT::MAX_SIZE+1;
+ }
+ }
+
+private:
+ position p;
+};
+
+#endif // BOOST_ITERATOR_ADAPTORS_VERSION < 0x0200
+
+///////////////////////////////////////////////////////////////////////////////
+} /* namespace impl */
+
+template <typename T, std::size_t N>
+class fixed_size_queue
+{
+private:
+ struct position
+ {
+ fixed_size_queue* self;
+ std::size_t pos;
+
+ position() : self(0), pos(0) {}
+
+ // The const_cast here is just to avoid to have two different
+ // position structures for the const and non-const case.
+ // The const semantic is guaranteed by the iterator itself
+ position(const fixed_size_queue* s, std::size_t p)
+ : self(const_cast<fixed_size_queue*>(s)), pos(p)
+ {}
+ };
+
+public:
+ // Declare the iterators
+ typedef impl::fsq_iterator<fixed_size_queue<T, N>, T, T*> iterator;
+ typedef impl::fsq_iterator<fixed_size_queue<T, N>, T const, T const*>
+ const_iterator;
+ typedef position position_t;
+
+ friend class impl::fsq_iterator<fixed_size_queue<T, N>, T, T*>;
+ friend class impl::fsq_iterator<fixed_size_queue<T, N>, T const, T const*>;
+
+ fixed_size_queue();
+ fixed_size_queue(const fixed_size_queue& x);
+ fixed_size_queue& operator=(const fixed_size_queue& x);
+ ~fixed_size_queue();
+
+ void push_back(const T& e);
+ void push_front(const T& e);
+ void serve(T& e);
+ void pop_front();
+
+ bool empty() const
+ {
+ return m_size == 0;
+ }
+
+ bool full() const
+ {
+ return m_size == N;
+ }
+
+ iterator begin()
+ {
+ return iterator(position(this, m_head));
+ }
+
+ const_iterator begin() const
+ {
+ return const_iterator(position(this, m_head));
+ }
+
+ iterator end()
+ {
+ return iterator(position(this, m_tail));
+ }
+
+ const_iterator end() const
+ {
+ return const_iterator(position(this, m_tail));
+ }
+
+ std::size_t size() const
+ {
+ return m_size;
+ }
+
+ T& front()
+ {
+ return m_queue[m_head];
+ }
+
+ const T& front() const
+ {
+ return m_queue[m_head];
+ }
+
+private:
+ // Redefine the template parameters to avoid using partial template
+ // specialization on the iterator policy to extract N.
+ BOOST_STATIC_CONSTANT(std::size_t, MAX_SIZE = N);
+
+ std::size_t m_head;
+ std::size_t m_tail;
+ std::size_t m_size;
+ T m_queue[N+1];
+};
+
+template <typename T, std::size_t N>
+inline
+fixed_size_queue<T, N>::fixed_size_queue()
+ : m_head(0)
+ , m_tail(0)
+ , m_size(0)
+{
+ BOOST_SPIRIT_ASSERT(m_size <= N+1);
+ BOOST_SPIRIT_ASSERT_FSQ_SIZE;
+ BOOST_SPIRIT_ASSERT(m_head <= N+1);
+ BOOST_SPIRIT_ASSERT(m_tail <= N+1);
+}
+
+template <typename T, std::size_t N>
+inline
+fixed_size_queue<T, N>::fixed_size_queue(const fixed_size_queue& x)
+ : m_head(x.m_head)
+ , m_tail(x.m_tail)
+ , m_size(x.m_size)
+{
+ copy(x.begin(), x.end(), begin());
+ BOOST_SPIRIT_ASSERT(m_size <= N+1);
+ BOOST_SPIRIT_ASSERT_FSQ_SIZE;
+ BOOST_SPIRIT_ASSERT(m_head <= N+1);
+ BOOST_SPIRIT_ASSERT(m_tail <= N+1);
+}
+
+template <typename T, std::size_t N>
+inline fixed_size_queue<T, N>&
+fixed_size_queue<T, N>::operator=(const fixed_size_queue& x)
+{
+ if (this != &x)
+ {
+ m_head = x.m_head;
+ m_tail = x.m_tail;
+ m_size = x.m_size;
+ copy(x.begin(), x.end(), begin());
+ }
+ BOOST_SPIRIT_ASSERT(m_size <= N+1);
+ BOOST_SPIRIT_ASSERT_FSQ_SIZE;
+ BOOST_SPIRIT_ASSERT(m_head <= N+1);
+ BOOST_SPIRIT_ASSERT(m_tail <= N+1);
+
+ return *this;
+}
+
+template <typename T, std::size_t N>
+inline
+fixed_size_queue<T, N>::~fixed_size_queue()
+{
+ BOOST_SPIRIT_ASSERT(m_size <= N+1);
+ BOOST_SPIRIT_ASSERT_FSQ_SIZE;
+ BOOST_SPIRIT_ASSERT(m_head <= N+1);
+ BOOST_SPIRIT_ASSERT(m_tail <= N+1);
+}
+
+template <typename T, std::size_t N>
+inline void
+fixed_size_queue<T, N>::push_back(const T& e)
+{
+ BOOST_SPIRIT_ASSERT(m_size <= N+1);
+ BOOST_SPIRIT_ASSERT_FSQ_SIZE;
+ BOOST_SPIRIT_ASSERT(m_head <= N+1);
+ BOOST_SPIRIT_ASSERT(m_tail <= N+1);
+
+ BOOST_SPIRIT_ASSERT(!full());
+
+ m_queue[m_tail] = e;
+ ++m_size;
+ ++m_tail;
+ if (m_tail == N+1)
+ m_tail = 0;
+
+
+ BOOST_SPIRIT_ASSERT(m_size <= N+1);
+ BOOST_SPIRIT_ASSERT_FSQ_SIZE;
+ BOOST_SPIRIT_ASSERT(m_head <= N+1);
+ BOOST_SPIRIT_ASSERT(m_tail <= N+1);
+}
+
+template <typename T, std::size_t N>
+inline void
+fixed_size_queue<T, N>::push_front(const T& e)
+{
+ BOOST_SPIRIT_ASSERT(m_size <= N+1);
+ BOOST_SPIRIT_ASSERT_FSQ_SIZE;
+ BOOST_SPIRIT_ASSERT(m_head <= N+1);
+ BOOST_SPIRIT_ASSERT(m_tail <= N+1);
+
+ BOOST_SPIRIT_ASSERT(!full());
+
+ if (m_head == 0)
+ m_head = N;
+ else
+ --m_head;
+
+ m_queue[m_head] = e;
+ ++m_size;
+
+ BOOST_SPIRIT_ASSERT(m_size <= N+1);
+ BOOST_SPIRIT_ASSERT_FSQ_SIZE;
+ BOOST_SPIRIT_ASSERT(m_head <= N+1);
+ BOOST_SPIRIT_ASSERT(m_tail <= N+1);
+}
+
+
+template <typename T, std::size_t N>
+inline void
+fixed_size_queue<T, N>::serve(T& e)
+{
+ BOOST_SPIRIT_ASSERT(m_size <= N+1);
+ BOOST_SPIRIT_ASSERT_FSQ_SIZE;
+ BOOST_SPIRIT_ASSERT(m_head <= N+1);
+ BOOST_SPIRIT_ASSERT(m_tail <= N+1);
+
+ e = m_queue[m_head];
+ pop_front();
+}
+
+
+
+template <typename T, std::size_t N>
+inline void
+fixed_size_queue<T, N>::pop_front()
+{
+ BOOST_SPIRIT_ASSERT(m_size <= N+1);
+ BOOST_SPIRIT_ASSERT_FSQ_SIZE;
+ BOOST_SPIRIT_ASSERT(m_head <= N+1);
+ BOOST_SPIRIT_ASSERT(m_tail <= N+1);
+
+ ++m_head;
+ if (m_head == N+1)
+ m_head = 0;
+ --m_size;
+
+ BOOST_SPIRIT_ASSERT(m_size <= N+1);
+ BOOST_SPIRIT_ASSERT_FSQ_SIZE;
+ BOOST_SPIRIT_ASSERT(m_head <= N+1);
+ BOOST_SPIRIT_ASSERT(m_tail <= N+1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+}} // namespace boost::spirit
+
+#undef BOOST_SPIRIT_ASSERT_FSQ_SIZE
+
+#endif
diff --git a/boost/boost/spirit/iterator/impl/file_iterator.ipp b/boost/boost/spirit/iterator/impl/file_iterator.ipp
new file mode 100644
index 00000000000..8d22b04b5a4
--- /dev/null
+++ b/boost/boost/spirit/iterator/impl/file_iterator.ipp
@@ -0,0 +1,460 @@
+/*=============================================================================
+ Copyright (c) 2003 Giovanni Bajo
+ Copyright (c) 2003 Martin Wille
+ Copyright (c) 2003 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+
+#ifndef BOOST_SPIRIT_FILE_ITERATOR_IPP
+#define BOOST_SPIRIT_FILE_ITERATOR_IPP
+
+#ifdef BOOST_SPIRIT_FILEITERATOR_WINDOWS
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+#endif
+
+#include <cstdio>
+#include <boost/shared_ptr.hpp>
+
+#ifdef BOOST_SPIRIT_FILEITERATOR_WINDOWS
+# include <boost/type_traits/remove_pointer.hpp>
+#endif
+
+#ifdef BOOST_SPIRIT_FILEITERATOR_POSIX
+# include <sys/types.h> // open, stat, mmap, munmap
+# include <sys/stat.h> // stat
+# include <fcntl.h> // open
+# include <unistd.h> // stat, mmap, munmap
+# include <sys/mman.h> // mmap, mmunmap
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+///////////////////////////////////////////////////////////////////////////////
+namespace fileiter_impl {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// std_file_iterator
+//
+// Base class that implements iteration through a file using standard C
+// stream library (fopen and friends). This class and the following are
+// the base components on which the iterator is built (through the
+// iterator adaptor library).
+//
+// The opened file stream (FILE) is held with a shared_ptr<>, whose
+// custom deleter invokes fcose(). This makes the syntax of the class
+// very easy, especially everything related to copying.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+template <typename CharT>
+class std_file_iterator
+{
+public:
+ typedef CharT value_type;
+
+ std_file_iterator()
+ {}
+
+ explicit std_file_iterator(std::string fileName)
+ {
+ using namespace std;
+ FILE* f = fopen(fileName.c_str(), "rb");
+
+ // If the file was opened, store it into
+ // the smart pointer.
+ if (f)
+ {
+ m_file.reset(f, fclose);
+ m_pos = 0;
+ m_eof = false;
+ update_char();
+ }
+ }
+
+ std_file_iterator(const std_file_iterator& iter)
+ { *this = iter; }
+
+ std_file_iterator& operator=(const std_file_iterator& iter)
+ {
+ m_file = iter.m_file;
+ m_curChar = iter.m_curChar;
+ m_eof = iter.m_eof;
+ m_pos = iter.m_pos;
+
+ return *this;
+ }
+
+ // Nasty bug in Comeau up to 4.3.0.1, we need explicit boolean context
+ // for shared_ptr to evaluate correctly
+ operator bool() const
+ { return m_file ? true : false; }
+
+ bool operator==(const std_file_iterator& iter) const
+ {
+ return (m_file == iter.m_file) && (m_eof == iter.m_eof) &&
+ (m_pos == iter.m_pos);
+ }
+
+ const CharT& get_cur_char(void) const
+ {
+ return m_curChar;
+ }
+
+ void prev_char(void)
+ {
+ m_pos -= sizeof(CharT);
+ update_char();
+ }
+
+ void next_char(void)
+ {
+ m_pos += sizeof(CharT);
+ update_char();
+ }
+
+ void seek_end(void)
+ {
+ using namespace std;
+ fseek(m_file.get(), 0, SEEK_END);
+ m_pos = ftell(m_file.get()) / sizeof(CharT);
+ m_eof = true;
+ }
+
+ void advance(std::ptrdiff_t n)
+ {
+ m_pos += n * sizeof(CharT);
+ update_char();
+ }
+
+ std::ptrdiff_t distance(const std_file_iterator& iter) const
+ {
+ return (std::ptrdiff_t)(m_pos - iter.m_pos) / sizeof(CharT);
+ }
+
+private:
+ boost::shared_ptr<std::FILE> m_file;
+ std::size_t m_pos;
+ CharT m_curChar;
+ bool m_eof;
+
+ void update_char(void)
+ {
+ using namespace std;
+ if ((std::size_t)ftell(m_file.get()) != m_pos)
+ fseek(m_file.get(), m_pos, SEEK_SET);
+
+ m_eof = (fread(&m_curChar, sizeof(CharT), 1, m_file.get()) < 1);
+ }
+};
+
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// mmap_file_iterator
+//
+// File iterator for memory mapped files, for now implemented on Windows and
+// POSIX platforms. This class has the same interface of std_file_iterator,
+// and can be used in its place (in fact, it's the default for Windows and
+// POSIX).
+//
+///////////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////////////////////////
+// mmap_file_iterator, Windows version
+#ifdef BOOST_SPIRIT_FILEITERATOR_WINDOWS
+template <typename CharT>
+class mmap_file_iterator
+{
+public:
+ typedef CharT value_type;
+
+ mmap_file_iterator()
+ {}
+
+ explicit mmap_file_iterator(std::string fileName)
+ {
+ HANDLE hFile = ::CreateFileA(
+ fileName.c_str(),
+ GENERIC_READ,
+ FILE_SHARE_READ,
+ NULL,
+ OPEN_EXISTING,
+ FILE_FLAG_SEQUENTIAL_SCAN,
+ NULL
+ );
+
+ if (hFile == INVALID_HANDLE_VALUE)
+ return;
+
+ // Store the size of the file, it's used to construct
+ // the end iterator
+ m_filesize = ::GetFileSize(hFile, NULL);
+
+ HANDLE hMap = ::CreateFileMapping(
+ hFile,
+ NULL,
+ PAGE_READONLY,
+ 0, 0,
+ NULL
+ );
+
+ if (hMap == NULL)
+ {
+ ::CloseHandle(hFile);
+ return;
+ }
+
+ LPVOID pMem = ::MapViewOfFile(
+ hMap,
+ FILE_MAP_READ,
+ 0, 0, 0
+ );
+
+ if (pMem == NULL)
+ {
+ ::CloseHandle(hMap);
+ ::CloseHandle(hFile);
+ return;
+ }
+
+ // We hold both the file handle and the memory pointer.
+ // We can close the hMap handle now because Windows holds internally
+ // a reference to it since there is a view mapped.
+ ::CloseHandle(hMap);
+
+ // It seems like we can close the file handle as well (because
+ // a reference is hold by the filemap object).
+ ::CloseHandle(hFile);
+
+ // Store the handles inside the shared_ptr (with the custom destructors)
+ m_mem.reset(static_cast<CharT*>(pMem), ::UnmapViewOfFile);
+
+ // Start of the file
+ m_curChar = m_mem.get();
+ }
+
+ mmap_file_iterator(const mmap_file_iterator& iter)
+ { *this = iter; }
+
+ mmap_file_iterator& operator=(const mmap_file_iterator& iter)
+ {
+ m_curChar = iter.m_curChar;
+ m_mem = iter.m_mem;
+ m_filesize = iter.m_filesize;
+
+ return *this;
+ }
+
+ // Nasty bug in Comeau up to 4.3.0.1, we need explicit boolean context
+ // for shared_ptr to evaluate correctly
+ operator bool() const
+ { return m_mem ? true : false; }
+
+ bool operator==(const mmap_file_iterator& iter) const
+ { return m_curChar == iter.m_curChar; }
+
+ const CharT& get_cur_char(void) const
+ { return *m_curChar; }
+
+ void next_char(void)
+ { m_curChar++; }
+
+ void prev_char(void)
+ { m_curChar--; }
+
+ void advance(std::ptrdiff_t n)
+ { m_curChar += n; }
+
+ std::ptrdiff_t distance(const mmap_file_iterator& iter) const
+ { return m_curChar - iter.m_curChar; }
+
+ void seek_end(void)
+ {
+ m_curChar = m_mem.get() +
+ (m_filesize / sizeof(CharT));
+ }
+
+private:
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ typedef boost::remove_pointer<HANDLE>::type handle_t;
+#else
+ typedef void handle_t;
+#endif
+
+ boost::shared_ptr<CharT> m_mem;
+ std::size_t m_filesize;
+ CharT* m_curChar;
+};
+
+#endif // BOOST_SPIRIT_FILEITERATOR_WINDOWS
+
+///////////////////////////////////////////////////////////////////////////////
+// mmap_file_iterator, POSIX version
+#ifdef BOOST_SPIRIT_FILEITERATOR_POSIX
+template <typename CharT>
+class mmap_file_iterator
+{
+private:
+ struct mapping
+ {
+ mapping(void *p, off_t len)
+ : data(p)
+ , size(len)
+ { }
+
+ CharT const *begin() const
+ {
+ return static_cast<CharT *>(data);
+ }
+
+ CharT const *end() const
+ {
+ return static_cast<CharT *>(data) + size/sizeof(CharT);
+ }
+
+ ~mapping()
+ {
+ munmap(data, size);
+ }
+
+ private:
+ void *data;
+ off_t size;
+ };
+
+public:
+ typedef CharT value_type;
+
+ mmap_file_iterator()
+ {}
+
+ explicit mmap_file_iterator(std::string file_name)
+ {
+ // open the file
+ int fd = open(file_name.c_str(),
+#ifdef O_NOCTTY
+ O_NOCTTY | // if stdin was closed then opening a file
+ // would cause the file to become the controlling
+ // terminal if the filename refers to a tty. Setting
+ // O_NOCTTY inhibits this.
+#endif
+ O_RDONLY);
+
+ if (fd == -1)
+ return;
+
+ // call fstat to find get information about the file just
+ // opened (size and file type)
+ struct stat stat_buf;
+ if ((fstat(fd, &stat_buf) != 0) || !S_ISREG(stat_buf.st_mode))
+ { // if fstat returns an error or if the file isn't a
+ // regular file we give up.
+ close(fd);
+ return;
+ }
+
+ // perform the actual mapping
+ void *p = mmap(0, stat_buf.st_size, PROT_READ, MAP_SHARED, fd, 0);
+ // it is safe to close() here. POSIX requires that the OS keeps a
+ // second handle to the file while the file is mmapped.
+ close(fd);
+
+ if (p == MAP_FAILED)
+ return;
+
+ mapping *m = 0;
+ try
+ {
+ m = new mapping(p, stat_buf.st_size);
+ }
+ catch(...)
+ {
+ munmap(p, stat_buf.st_size);
+ throw;
+ }
+
+ m_mem.reset(m);
+
+ // Start of the file
+ m_curChar = m_mem->begin();
+ }
+
+ mmap_file_iterator(const mmap_file_iterator& iter)
+ { *this = iter; }
+
+ mmap_file_iterator& operator=(const mmap_file_iterator& iter)
+ {
+ m_curChar = iter.m_curChar;
+ m_mem = iter.m_mem;
+
+ return *this;
+ }
+
+ // Nasty bug in Comeau up to 4.3.0.1, we need explicit boolean context
+ // for shared_ptr to evaluate correctly
+ operator bool() const
+ { return m_mem ? true : false; }
+
+ bool operator==(const mmap_file_iterator& iter) const
+ { return m_curChar == iter.m_curChar; }
+
+ const CharT& get_cur_char(void) const
+ { return *m_curChar; }
+
+ void next_char(void)
+ { m_curChar++; }
+
+ void prev_char(void)
+ { m_curChar--; }
+
+ void advance(signed long n)
+ { m_curChar += n; }
+
+ long distance(const mmap_file_iterator& iter) const
+ { return m_curChar - iter.m_curChar; }
+
+ void seek_end(void)
+ {
+ m_curChar = m_mem->end();
+ }
+
+private:
+
+ boost::shared_ptr<mapping> m_mem;
+ CharT const* m_curChar;
+};
+
+#endif // BOOST_SPIRIT_FILEITERATOR_POSIX
+
+///////////////////////////////////////////////////////////////////////////////
+} /* namespace boost::spirit::fileiter_impl */
+
+template <typename CharT, typename BaseIteratorT>
+file_iterator<CharT,BaseIteratorT>
+file_iterator<CharT,BaseIteratorT>::make_end(void)
+{
+ file_iterator iter(*this);
+ iter.base_reference().seek_end();
+ return iter;
+}
+
+template <typename CharT, typename BaseIteratorT>
+file_iterator<CharT,BaseIteratorT>&
+file_iterator<CharT,BaseIteratorT>::operator=(const base_t& iter)
+{
+ base_t::operator=(iter);
+ return *this;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+}} /* namespace boost::spirit */
+
+
+#endif /* BOOST_SPIRIT_FILE_ITERATOR_IPP */
diff --git a/boost/boost/spirit/iterator/impl/position_iterator.ipp b/boost/boost/spirit/iterator/impl/position_iterator.ipp
new file mode 100644
index 00000000000..fd97041b2a4
--- /dev/null
+++ b/boost/boost/spirit/iterator/impl/position_iterator.ipp
@@ -0,0 +1,131 @@
+/*=============================================================================
+ Copyright (c) 2002 Juan Carlos Arevalo-Baeza
+ Copyright (c) 2002-2006 Hartmut Kaiser
+ Copyright (c) 2003 Giovanni Bajo
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef POSITION_ITERATOR_IPP
+#define POSITION_ITERATOR_IPP
+
+#include <boost/config.hpp>
+#include <boost/iterator_adaptors.hpp>
+#include <boost/type_traits/add_const.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/spirit/core/nil.hpp> // for nil_t
+#include <boost/detail/iterator.hpp> // for boost::detail::iterator_traits
+
+namespace boost { namespace spirit {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// position_policy<file_position_without_column>
+//
+// Specialization to handle file_position_without_column. Only take care of
+// newlines since no column tracking is needed.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename String>
+class position_policy<file_position_without_column_base<String> > {
+
+public:
+ void next_line(file_position_without_column_base<String>& pos)
+ {
+ ++pos.line;
+ }
+
+ void set_tab_chars(unsigned int /*chars*/){}
+ void next_char(file_position_without_column_base<String>& /*pos*/) {}
+ void tabulation(file_position_without_column_base<String>& /*pos*/) {}
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// position_policy<file_position>
+//
+// Specialization to handle file_position. Track characters and tabulation
+// to compute the current column correctly.
+//
+// Default tab size is 4. You can change this with the set_tabchars member
+// of position_iterator.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename String>
+class position_policy<file_position_base<String> > {
+
+public:
+ position_policy()
+ : m_CharsPerTab(4)
+ {}
+
+ void next_line(file_position_base<String>& pos)
+ {
+ ++pos.line;
+ pos.column = 1;
+ }
+
+ void set_tab_chars(unsigned int chars)
+ {
+ m_CharsPerTab = chars;
+ }
+
+ void next_char(file_position_base<String>& pos)
+ {
+ ++pos.column;
+ }
+
+ void tabulation(file_position_base<String>& pos)
+ {
+ pos.column += m_CharsPerTab - (pos.column - 1) % m_CharsPerTab;
+ }
+
+private:
+ unsigned int m_CharsPerTab;
+};
+
+/* namespace boost::spirit { */ namespace iterator_ { namespace impl {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// position_iterator_base_generator
+//
+// Metafunction to generate the iterator type using boost::iterator_adaptors,
+// hiding all the metaprogramming thunking code in it. It is used
+// mainly to keep the public interface (position_iterator) cleanear.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename MainIterT, typename ForwardIterT, typename PositionT>
+struct position_iterator_base_generator
+{
+private:
+ typedef boost::detail::iterator_traits<ForwardIterT> traits;
+ typedef typename traits::value_type value_type;
+ typedef typename traits::iterator_category iter_category_t;
+
+ // Position iterator is always a non-mutable iterator
+ typedef typename boost::add_const<value_type>::type const_value_type;
+
+public:
+ // Check if the MainIterT is nil. If it's nil, it means that the actual
+ // self type is position_iterator. Otherwise, it's a real type we
+ // must use
+ typedef typename boost::mpl::if_<
+ typename boost::is_same<MainIterT, nil_t>::type,
+ position_iterator<ForwardIterT, PositionT, nil_t>,
+ MainIterT
+ >::type main_iter_t;
+
+ typedef boost::iterator_adaptor<
+ main_iter_t,
+ ForwardIterT,
+ const_value_type
+ > type;
+};
+
+}}}} /* namespace boost::spirit::iterator_::impl */
+
+#endif
diff --git a/boost/boost/spirit/iterator/multi_pass.hpp b/boost/boost/spirit/iterator/multi_pass.hpp
new file mode 100644
index 00000000000..437044f9e6d
--- /dev/null
+++ b/boost/boost/spirit/iterator/multi_pass.hpp
@@ -0,0 +1,1295 @@
+/*=============================================================================
+ Copyright (c) 2001, Daniel C. Nuffer
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_ITERATOR_MULTI_PASS_HPP
+#define BOOST_SPIRIT_ITERATOR_MULTI_PASS_HPP
+
+#include <boost/config.hpp>
+#include <boost/throw_exception.hpp>
+#include <deque>
+#include <iterator>
+#include <iostream>
+#include <algorithm> // for std::swap
+#include <exception> // for std::exception
+#include <boost/limits.hpp>
+#include <boost/iterator.hpp>
+
+#include <boost/spirit/core/assert.hpp> // for BOOST_SPIRIT_ASSERT
+#include <boost/spirit/iterator/fixed_size_queue.hpp>
+#include <boost/detail/iterator.hpp> // for boost::detail::iterator_traits
+
+#include <boost/spirit/iterator/multi_pass_fwd.hpp>
+
+namespace boost { namespace spirit {
+
+namespace impl {
+ template <typename T>
+ inline void mp_swap(T& t1, T& t2);
+}
+
+namespace multi_pass_policies
+{
+
+///////////////////////////////////////////////////////////////////////////////
+// class ref_counted
+// Implementation of an OwnershipPolicy used by multi_pass.
+//
+// Implementation modified from RefCounted class from the Loki library by
+// Andrei Alexandrescu
+///////////////////////////////////////////////////////////////////////////////
+class ref_counted
+{
+ protected:
+ ref_counted()
+ : count(new std::size_t(1))
+ {}
+
+ ref_counted(ref_counted const& x)
+ : count(x.count)
+ {}
+
+ // clone is called when a copy of the iterator is made, so increment
+ // the ref-count.
+ void clone()
+ {
+ ++*count;
+ }
+
+ // called when a copy is deleted. Decrement the ref-count. Return
+ // value of true indicates that the last copy has been released.
+ bool release()
+ {
+ if (!--*count)
+ {
+ delete count;
+ count = 0;
+ return true;
+ }
+ return false;
+ }
+
+ void swap(ref_counted& x)
+ {
+ impl::mp_swap(count, x.count);
+ }
+
+ public:
+ // returns true if there is only one iterator in existence.
+ // std_deque StoragePolicy will free it's buffered data if this
+ // returns true.
+ bool unique() const
+ {
+ return *count == 1;
+ }
+
+ private:
+ std::size_t* count;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// class first_owner
+// Implementation of an OwnershipPolicy used by multi_pass
+// This ownership policy dictates that the first iterator created will
+// determine the lifespan of the shared components. This works well for
+// spirit, since no dynamic allocation of iterators is done, and all copies
+// are make on the stack.
+//
+// There is a caveat about using this policy together with the std_deque
+// StoragePolicy. Since first_owner always returns false from unique(),
+// std_deque will only release the queued data if clear_queue() is called.
+///////////////////////////////////////////////////////////////////////////////
+class first_owner
+{
+ protected:
+ first_owner()
+ : first(true)
+ {}
+
+ first_owner(first_owner const&)
+ : first(false)
+ {}
+
+ void clone()
+ {
+ }
+
+ // return true to indicate deletion of resources
+ bool release()
+ {
+ return first;
+ }
+
+ void swap(first_owner&)
+ {
+ // if we're the first, we still remain the first, even if assigned
+ // to, so don't swap first_. swap is only called from operator=
+ }
+
+ public:
+ bool unique() const
+ {
+ return false; // no way to know, so always return false
+ }
+
+ private:
+ bool first;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// class illegal_backtracking
+// thrown by buf_id_check CheckingPolicy if an instance of an iterator is
+// used after another one has invalidated the queue
+///////////////////////////////////////////////////////////////////////////////
+class illegal_backtracking : public std::exception
+{
+public:
+
+ illegal_backtracking() throw() {}
+ ~illegal_backtracking() throw() {}
+
+ virtual const char*
+ what() const throw()
+ { return "boost::spirit::illegal_backtracking"; }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// class buf_id_check
+// Implementation of the CheckingPolicy used by multi_pass
+// This policy is most effective when used together with the std_deque
+// StoragePolicy.
+// If used with the fixed_size_queue StoragePolicy, it will not detect
+// iterator derefereces that are out of the range of the queue.
+///////////////////////////////////////////////////////////////////////////////
+class buf_id_check
+{
+ protected:
+ buf_id_check()
+ : shared_buf_id(new unsigned long(0))
+ , buf_id(0)
+ {}
+
+ buf_id_check(buf_id_check const& x)
+ : shared_buf_id(x.shared_buf_id)
+ , buf_id(x.buf_id)
+ {}
+
+ // will be called from the destructor of the last iterator.
+ void destroy()
+ {
+ delete shared_buf_id;
+ shared_buf_id = 0;
+ }
+
+ void swap(buf_id_check& x)
+ {
+ impl::mp_swap(shared_buf_id, x.shared_buf_id);
+ impl::mp_swap(buf_id, x.buf_id);
+ }
+
+ // called to verify that everything is okay.
+ void check() const
+ {
+ if (buf_id != *shared_buf_id)
+ {
+ boost::throw_exception(illegal_backtracking());
+ }
+ }
+
+ // called from multi_pass::clear_queue, so we can increment the count
+ void clear_queue()
+ {
+ ++*shared_buf_id;
+ ++buf_id;
+ }
+
+ private:
+ unsigned long* shared_buf_id;
+ unsigned long buf_id;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// class no_check
+// Implementation of the CheckingPolicy used by multi_pass
+// It does not do anything :-)
+///////////////////////////////////////////////////////////////////////////////
+class no_check
+{
+ protected:
+ no_check() {}
+ no_check(no_check const&) {}
+ void destroy() {}
+ void swap(no_check&) {}
+ void check() const {}
+ void clear_queue() {}
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// class std_deque
+// Implementation of the StoragePolicy used by multi_pass
+// This stores all data in a std::deque, and keeps an offset to the current
+// position. It stores all the data unless there is only one
+// iterator using the queue.
+// Note: a position is used instead of an iterator, because a push_back on
+// a deque can invalidate any iterators.
+///////////////////////////////////////////////////////////////////////////////
+class std_deque
+{
+ public:
+
+template <typename ValueT>
+class inner
+{
+ private:
+
+ typedef std::deque<ValueT> queue_type;
+ queue_type* queuedElements;
+ mutable typename queue_type::size_type queuePosition;
+
+ protected:
+ inner()
+ : queuedElements(new queue_type)
+ , queuePosition(0)
+ {}
+
+ inner(inner const& x)
+ : queuedElements(x.queuedElements)
+ , queuePosition(x.queuePosition)
+ {}
+
+ // will be called from the destructor of the last iterator.
+ void destroy()
+ {
+ BOOST_SPIRIT_ASSERT(NULL != queuedElements);
+ delete queuedElements;
+ queuedElements = 0;
+ }
+
+ void swap(inner& x)
+ {
+ impl::mp_swap(queuedElements, x.queuedElements);
+ impl::mp_swap(queuePosition, x.queuePosition);
+ }
+
+ // This is called when the iterator is dereferenced. It's a template
+ // method so we can recover the type of the multi_pass iterator
+ // and call unique and access the m_input data member.
+ template <typename MultiPassT>
+ static typename MultiPassT::reference dereference(MultiPassT const& mp)
+ {
+ if (mp.queuePosition == mp.queuedElements->size())
+ {
+ // check if this is the only iterator
+ if (mp.unique())
+ {
+ // free up the memory used by the queue.
+ if (mp.queuedElements->size() > 0)
+ {
+ mp.queuedElements->clear();
+ mp.queuePosition = 0;
+ }
+ }
+ return mp.get_input();
+ }
+ else
+ {
+ return (*mp.queuedElements)[mp.queuePosition];
+ }
+ }
+
+ // This is called when the iterator is incremented. It's a template
+ // method so we can recover the type of the multi_pass iterator
+ // and call unique and access the m_input data member.
+ template <typename MultiPassT>
+ static void increment(MultiPassT& mp)
+ {
+ if (mp.queuePosition == mp.queuedElements->size())
+ {
+ // check if this is the only iterator
+ if (mp.unique())
+ {
+ // free up the memory used by the queue.
+ if (mp.queuedElements->size() > 0)
+ {
+ mp.queuedElements->clear();
+ mp.queuePosition = 0;
+ }
+ }
+ else
+ {
+ mp.queuedElements->push_back(mp.get_input());
+ ++mp.queuePosition;
+ }
+ mp.advance_input();
+ }
+ else
+ {
+ ++mp.queuePosition;
+ }
+
+ }
+
+ // called to forcibly clear the queue
+ void clear_queue()
+ {
+ queuedElements->clear();
+ queuePosition = 0;
+ }
+
+ // called to determine whether the iterator is an eof iterator
+ template <typename MultiPassT>
+ static bool is_eof(MultiPassT const& mp)
+ {
+ return mp.queuePosition == mp.queuedElements->size() &&
+ mp.input_at_eof();
+ }
+
+ // called by operator==
+ bool equal_to(inner const& x) const
+ {
+ return queuePosition == x.queuePosition;
+ }
+
+ // called by operator<
+ bool less_than(inner const& x) const
+ {
+ return queuePosition < x.queuePosition;
+ }
+}; // class inner
+
+}; // class std_deque
+
+
+///////////////////////////////////////////////////////////////////////////////
+// class fixed_size_queue
+// Implementation of the StoragePolicy used by multi_pass
+// fixed_size_queue keeps a circular buffer (implemented by
+// boost::spirit::fixed_size_queue class) that is size N+1 and stores N elements.
+// It is up to the user to ensure that there is enough look ahead for their
+// grammar. Currently there is no way to tell if an iterator is pointing
+// to forgotten data. The leading iterator will put an item in the queue
+// and remove one when it is incremented. No dynamic allocation is done,
+// except on creation of the queue (fixed_size_queue constructor).
+///////////////////////////////////////////////////////////////////////////////
+template < std::size_t N>
+class fixed_size_queue
+{
+ public:
+
+template <typename ValueT>
+class inner
+{
+ private:
+
+ typedef boost::spirit::fixed_size_queue<ValueT, N> queue_type;
+ queue_type * queuedElements;
+ mutable typename queue_type::iterator queuePosition;
+
+ protected:
+ inner()
+ : queuedElements(new queue_type)
+ , queuePosition(queuedElements->begin())
+ {}
+
+ inner(inner const& x)
+ : queuedElements(x.queuedElements)
+ , queuePosition(x.queuePosition)
+ {}
+
+ // will be called from the destructor of the last iterator.
+ void destroy()
+ {
+ BOOST_SPIRIT_ASSERT(NULL != queuedElements);
+ delete queuedElements;
+ queuedElements = 0;
+ }
+
+ void swap(inner& x)
+ {
+ impl::mp_swap(queuedElements, x.queuedElements);
+ impl::mp_swap(queuePosition, x.queuePosition);
+ }
+
+ // This is called when the iterator is dereferenced. It's a template
+ // method so we can recover the type of the multi_pass iterator
+ // and access the m_input data member.
+ template <typename MultiPassT>
+ static typename MultiPassT::reference dereference(MultiPassT const& mp)
+ {
+ if (mp.queuePosition == mp.queuedElements->end())
+ {
+ return mp.get_input();
+ }
+ else
+ {
+ return *mp.queuePosition;
+ }
+ }
+
+ // This is called when the iterator is incremented. It's a template
+ // method so we can recover the type of the multi_pass iterator
+ // and access the m_input data member.
+ template <typename MultiPassT>
+ static void increment(MultiPassT& mp)
+ {
+ if (mp.queuePosition == mp.queuedElements->end())
+ {
+ // don't let the queue get larger than N
+ if (mp.queuedElements->size() >= N)
+ mp.queuedElements->pop_front();
+
+ mp.queuedElements->push_back(mp.get_input());
+ mp.advance_input();
+ }
+ ++mp.queuePosition;
+ }
+
+ // no-op
+ void clear_queue()
+ {}
+
+ // called to determine whether the iterator is an eof iterator
+ template <typename MultiPassT>
+ static bool is_eof(MultiPassT const& mp)
+ {
+ return mp.queuePosition == mp.queuedElements->end() &&
+ mp.input_at_eof();
+ }
+
+ // called by operator==
+ bool equal_to(inner const& x) const
+ {
+ return queuePosition == x.queuePosition;
+ }
+
+ // called by operator<
+ bool less_than(inner const& x) const
+ {
+ return queuePosition < x.queuePosition;
+ }
+}; // class inner
+
+}; // class fixed_size_queue
+
+
+///////////////////////////////////////////////////////////////////////////////
+// class input_iterator
+// Implementation of the InputPolicy used by multi_pass
+// input_iterator encapsulates an input iterator of type InputT
+///////////////////////////////////////////////////////////////////////////////
+class input_iterator
+{
+ public:
+
+template <typename InputT>
+class inner
+{
+ typedef
+ typename boost::detail::iterator_traits<InputT>::value_type
+ result_type;
+
+ struct Data {
+ Data(InputT const &input_)
+ : input(input_), was_initialized(false)
+ {}
+
+ InputT input;
+ result_type curtok;
+ bool was_initialized;
+ };
+
+ // Needed by compilers not implementing the resolution to DR45. For
+ // reference, see
+ // http://www.open-std.org/JTC1/SC22/WG21/docs/cwg_defects.html#45.
+
+ friend struct Data;
+
+ public:
+ typedef result_type value_type;
+ typedef
+ typename boost::detail::iterator_traits<InputT>::difference_type
+ difference_type;
+ typedef
+ typename boost::detail::iterator_traits<InputT>::pointer
+ pointer;
+ typedef
+ typename boost::detail::iterator_traits<InputT>::reference
+ reference;
+
+ protected:
+ inner()
+ : data(0)
+ {}
+
+ inner(InputT x)
+ : data(new Data(x))
+ {}
+
+ inner(inner const& x)
+ : data(x.data)
+ {}
+
+ void destroy()
+ {
+ delete data;
+ data = 0;
+ }
+
+ bool same_input(inner const& x) const
+ {
+ return data == x.data;
+ }
+
+ typedef
+ typename boost::detail::iterator_traits<InputT>::value_type
+ value_t;
+ void swap(inner& x)
+ {
+ impl::mp_swap(data, x.data);
+ }
+
+ void ensure_initialized() const
+ {
+ if (data && !data->was_initialized) {
+ data->curtok = *data->input; // get the first token
+ data->was_initialized = true;
+ }
+ }
+
+ public:
+ reference get_input() const
+ {
+ BOOST_SPIRIT_ASSERT(NULL != data);
+ ensure_initialized();
+ return data->curtok;
+ }
+
+ void advance_input()
+ {
+ BOOST_SPIRIT_ASSERT(NULL != data);
+ data->was_initialized = false; // should get the next token
+ ++data->input;
+ }
+
+ bool input_at_eof() const
+ {
+ return !data || data->input == InputT();
+ }
+
+ private:
+ Data *data;
+};
+
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// class lex_input
+// Implementation of the InputPolicy used by multi_pass
+// lex_input gets tokens (ints) from yylex()
+///////////////////////////////////////////////////////////////////////////////
+class lex_input
+{
+ public:
+
+template <typename InputT>
+class inner
+{
+ public:
+ typedef int value_type;
+ typedef std::ptrdiff_t difference_type;
+ typedef int* pointer;
+ typedef int& reference;
+
+ protected:
+ inner()
+ : curtok(new int(0))
+ {}
+
+ inner(InputT x)
+ : curtok(new int(x))
+ {}
+
+ inner(inner const& x)
+ : curtok(x.curtok)
+ {}
+
+ void destroy()
+ {
+ delete curtok;
+ curtok = 0;
+ }
+
+ bool same_input(inner const& x) const
+ {
+ return curtok == x.curtok;
+ }
+
+ void swap(inner& x)
+ {
+ impl::mp_swap(curtok, x.curtok);
+ }
+
+ public:
+ reference get_input() const
+ {
+ return *curtok;
+ }
+
+ void advance_input()
+ {
+ extern int yylex();
+ *curtok = yylex();
+ }
+
+ bool input_at_eof() const
+ {
+ return *curtok == 0;
+ }
+
+ private:
+ int* curtok;
+
+};
+
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// class functor_input
+// Implementation of the InputPolicy used by multi_pass
+// functor_input gets tokens from a functor
+// Note: the functor must have a typedef for result_type
+// It also must have a static variable of type result_type defined to
+// represent eof that is called eof.
+///////////////////////////////////////////////////////////////////////////////
+class functor_input
+{
+ public:
+
+template <typename FunctorT>
+class inner
+{
+ typedef typename FunctorT::result_type result_type;
+ public:
+ typedef result_type value_type;
+ typedef std::ptrdiff_t difference_type;
+ typedef result_type* pointer;
+ typedef result_type& reference;
+
+ protected:
+ inner()
+ : ftor(0)
+ , curtok(0)
+ {}
+
+ inner(FunctorT const& x)
+ : ftor(new FunctorT(x))
+ , curtok(new result_type((*ftor)()))
+ {}
+
+ inner(inner const& x)
+ : ftor(x.ftor)
+ , curtok(x.curtok)
+ {}
+
+ void destroy()
+ {
+ delete ftor;
+ ftor = 0;
+ delete curtok;
+ curtok = 0;
+ }
+
+ bool same_input(inner const& x) const
+ {
+ return ftor == x.ftor;
+ }
+
+ void swap(inner& x)
+ {
+ impl::mp_swap(curtok, x.curtok);
+ impl::mp_swap(ftor, x.ftor);
+ }
+
+ public:
+ reference get_input() const
+ {
+ return *curtok;
+ }
+
+ void advance_input()
+ {
+ if (curtok) {
+ *curtok = (*ftor)();
+ }
+ }
+
+ bool input_at_eof() const
+ {
+ return !curtok || *curtok == ftor->eof;
+ }
+
+ FunctorT& get_functor() const
+ {
+ return *ftor;
+ }
+
+
+ private:
+ FunctorT* ftor;
+ result_type* curtok;
+
+};
+
+};
+
+} // namespace multi_pass_policies
+
+///////////////////////////////////////////////////////////////////////////////
+// iterator_base_creator
+///////////////////////////////////////////////////////////////////////////////
+
+namespace iterator_ { namespace impl {
+
+// Meta-function to generate a std::iterator<> base class for multi_pass. This
+// is used mainly to improve conformance of compilers not supporting PTS
+// and thus relying on inheritance to recognize an iterator.
+// We are using boost::iterator<> because it offers an automatic workaround
+// for broken std::iterator<> implementations.
+template <typename InputPolicyT, typename InputT>
+struct iterator_base_creator
+{
+ typedef typename InputPolicyT::BOOST_NESTED_TEMPLATE inner<InputT> input_t;
+
+ typedef boost::iterator
+ <
+ std::forward_iterator_tag,
+ typename input_t::value_type,
+ typename input_t::difference_type,
+ typename input_t::pointer,
+ typename input_t::reference
+ > type;
+};
+
+}}
+
+///////////////////////////////////////////////////////////////////////////////
+// class template multi_pass
+///////////////////////////////////////////////////////////////////////////////
+
+// The default multi_pass instantiation uses a ref-counted std_deque scheme.
+template
+<
+ typename InputT,
+ typename InputPolicy,
+ typename OwnershipPolicy,
+ typename CheckingPolicy,
+ typename StoragePolicy
+>
+class multi_pass
+ : public OwnershipPolicy
+ , public CheckingPolicy
+ , public StoragePolicy::template inner<
+ typename InputPolicy::template inner<InputT>::value_type>
+ , public InputPolicy::template inner<InputT>
+ , public iterator_::impl::iterator_base_creator<InputPolicy, InputT>::type
+{
+ typedef OwnershipPolicy OP;
+ typedef CheckingPolicy CHP;
+ typedef typename StoragePolicy::template inner<
+ typename InputPolicy::template inner<InputT>::value_type> SP;
+ typedef typename InputPolicy::template inner<InputT> IP;
+ typedef typename
+ iterator_::impl::iterator_base_creator<InputPolicy, InputT>::type
+ IB;
+
+ public:
+ typedef typename IB::value_type value_type;
+ typedef typename IB::difference_type difference_type;
+ typedef typename IB::reference reference;
+ typedef typename IB::pointer pointer;
+ typedef InputT iterator_type;
+
+ multi_pass();
+ explicit multi_pass(InputT input);
+
+#if BOOST_WORKAROUND(__GLIBCPP__, == 20020514)
+ multi_pass(int);
+#endif // BOOST_WORKAROUND(__GLIBCPP__, == 20020514)
+
+ ~multi_pass();
+
+ multi_pass(multi_pass const&);
+ multi_pass& operator=(multi_pass const&);
+
+ void swap(multi_pass& x);
+
+ reference operator*() const;
+ pointer operator->() const;
+ multi_pass& operator++();
+ multi_pass operator++(int);
+
+ void clear_queue();
+
+ bool operator==(const multi_pass& y) const;
+ bool operator<(const multi_pass& y) const;
+
+ private: // helper functions
+ bool is_eof() const;
+};
+
+template
+<
+ typename InputT,
+ typename InputPolicy,
+ typename OwnershipPolicy,
+ typename CheckingPolicy,
+ typename StoragePolicy
+>
+inline
+multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>::
+multi_pass()
+ : OP()
+ , CHP()
+ , SP()
+ , IP()
+{
+}
+
+template
+<
+ typename InputT,
+ typename InputPolicy,
+ typename OwnershipPolicy,
+ typename CheckingPolicy,
+ typename StoragePolicy
+>
+inline
+multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>::
+multi_pass(InputT input)
+ : OP()
+ , CHP()
+ , SP()
+ , IP(input)
+{
+}
+
+#if BOOST_WORKAROUND(__GLIBCPP__, == 20020514)
+ // The standard library shipped with gcc-3.1 has a bug in
+ // bits/basic_string.tcc. It tries to use iter::iter(0) to
+ // construct an iterator. Ironically, this happens in sanity
+ // checking code that isn't required by the standard.
+ // The workaround is to provide an additional constructor that
+ // ignores its int argument and behaves like the default constructor.
+template
+<
+ typename InputT,
+ typename InputPolicy,
+ typename OwnershipPolicy,
+ typename CheckingPolicy,
+ typename StoragePolicy
+>
+inline
+multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>::
+multi_pass(int)
+ : OP()
+ , CHP()
+ , SP()
+ , IP()
+{
+}
+#endif // BOOST_WORKAROUND(__GLIBCPP__, == 20020514)
+
+template
+<
+ typename InputT,
+ typename InputPolicy,
+ typename OwnershipPolicy,
+ typename CheckingPolicy,
+ typename StoragePolicy
+>
+inline
+multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>::
+~multi_pass()
+{
+ if (OP::release())
+ {
+ CHP::destroy();
+ SP::destroy();
+ IP::destroy();
+ }
+}
+
+template
+<
+ typename InputT,
+ typename InputPolicy,
+ typename OwnershipPolicy,
+ typename CheckingPolicy,
+ typename StoragePolicy
+>
+inline
+multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>::
+multi_pass(
+ multi_pass const& x)
+ : OP(x)
+ , CHP(x)
+ , SP(x)
+ , IP(x)
+{
+ OP::clone();
+}
+
+template
+<
+ typename InputT,
+ typename InputPolicy,
+ typename OwnershipPolicy,
+ typename CheckingPolicy,
+ typename StoragePolicy
+>
+inline
+multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>&
+multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>::
+operator=(
+ multi_pass const& x)
+{
+ multi_pass temp(x);
+ temp.swap(*this);
+ return *this;
+}
+
+template
+<
+ typename InputT,
+ typename InputPolicy,
+ typename OwnershipPolicy,
+ typename CheckingPolicy,
+ typename StoragePolicy
+>
+inline void
+multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>::
+swap(multi_pass& x)
+{
+ OP::swap(x);
+ CHP::swap(x);
+ SP::swap(x);
+ IP::swap(x);
+}
+
+template
+<
+ typename InputT,
+ typename InputPolicy,
+ typename OwnershipPolicy,
+ typename CheckingPolicy,
+ typename StoragePolicy
+>
+inline
+typename multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>::
+reference
+multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>::
+operator*() const
+{
+ CHP::check();
+ return SP::dereference(*this);
+}
+
+template
+<
+ typename InputT,
+ typename InputPolicy,
+ typename OwnershipPolicy,
+ typename CheckingPolicy,
+ typename StoragePolicy
+>
+inline
+typename multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>::
+pointer
+multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>::
+operator->() const
+{
+ return &(operator*());
+}
+
+template
+<
+ typename InputT,
+ typename InputPolicy,
+ typename OwnershipPolicy,
+ typename CheckingPolicy,
+ typename StoragePolicy
+>
+inline
+multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>&
+multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>::
+operator++()
+{
+ CHP::check();
+ SP::increment(*this);
+ return *this;
+}
+
+template
+<
+ typename InputT,
+ typename InputPolicy,
+ typename OwnershipPolicy,
+ typename CheckingPolicy,
+ typename StoragePolicy
+>
+inline
+multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>
+multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>::
+operator++(int)
+{
+ multi_pass
+ <
+ InputT,
+ InputPolicy,
+ OwnershipPolicy,
+ CheckingPolicy,
+ StoragePolicy
+ > tmp(*this);
+
+ ++*this;
+
+ return tmp;
+}
+
+template
+<
+ typename InputT,
+ typename InputPolicy,
+ typename OwnershipPolicy,
+ typename CheckingPolicy,
+ typename StoragePolicy
+>
+inline void
+multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>::
+clear_queue()
+{
+ SP::clear_queue();
+ CHP::clear_queue();
+}
+
+template
+<
+ typename InputT,
+ typename InputPolicy,
+ typename OwnershipPolicy,
+ typename CheckingPolicy,
+ typename StoragePolicy
+>
+inline bool
+multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>::
+is_eof() const
+{
+ return SP::is_eof(*this);
+}
+
+///// Comparisons
+template
+<
+ typename InputT,
+ typename InputPolicy,
+ typename OwnershipPolicy,
+ typename CheckingPolicy,
+ typename StoragePolicy
+>
+inline bool
+multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>::
+operator==(const multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy,
+ StoragePolicy>& y) const
+{
+ bool is_eof_ = SP::is_eof(*this);
+ bool y_is_eof_ = SP::is_eof(y);
+
+ if (is_eof_ && y_is_eof_)
+ {
+ return true; // both are EOF
+ }
+ else if (is_eof_ ^ y_is_eof_)
+ {
+ return false; // one is EOF, one isn't
+ }
+ else if (!IP::same_input(y))
+ {
+ return false;
+ }
+ else
+ {
+ return SP::equal_to(y);
+ }
+}
+
+template
+<
+ typename InputT,
+ typename InputPolicy,
+ typename OwnershipPolicy,
+ typename CheckingPolicy,
+ typename StoragePolicy
+>
+inline bool
+multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy>::
+operator<(const multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy,
+ StoragePolicy>& y) const
+{
+ return SP::less_than(y);
+}
+
+template
+<
+ typename InputT,
+ typename InputPolicy,
+ typename OwnershipPolicy,
+ typename CheckingPolicy,
+ typename StoragePolicy
+>
+inline
+bool operator!=(
+ const multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy,
+ StoragePolicy>& x,
+ const multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy,
+ StoragePolicy>& y)
+{
+ return !(x == y);
+}
+
+template
+<
+ typename InputT,
+ typename InputPolicy,
+ typename OwnershipPolicy,
+ typename CheckingPolicy,
+ typename StoragePolicy
+>
+inline
+bool operator>(
+ const multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy,
+ StoragePolicy>& x,
+ const multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy,
+ StoragePolicy>& y)
+{
+ return y < x;
+}
+
+template
+<
+ typename InputT,
+ typename InputPolicy,
+ typename OwnershipPolicy,
+ typename CheckingPolicy,
+ typename StoragePolicy
+>
+inline
+bool operator>=(
+ const multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy,
+ StoragePolicy>& x,
+ const multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy,
+ StoragePolicy>& y)
+{
+ return !(x < y);
+}
+
+template
+<
+ typename InputT,
+ typename InputPolicy,
+ typename OwnershipPolicy,
+ typename CheckingPolicy,
+ typename StoragePolicy
+>
+inline
+bool operator<=(
+ const multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy,
+ StoragePolicy>& x,
+ const multi_pass<InputT, InputPolicy, OwnershipPolicy, CheckingPolicy,
+ StoragePolicy>& y)
+{
+ return !(y < x);
+}
+
+///// Generator function
+template <typename InputT>
+inline multi_pass<InputT>
+make_multi_pass(InputT i)
+{
+ return multi_pass<InputT>(i);
+}
+
+// this could be a template typedef, since such a thing doesn't
+// exist in C++, we'll use inheritance to accomplish the same thing.
+
+template <typename InputT, std::size_t N>
+class look_ahead :
+ public multi_pass<
+ InputT,
+ multi_pass_policies::input_iterator,
+ multi_pass_policies::first_owner,
+ multi_pass_policies::no_check,
+ multi_pass_policies::fixed_size_queue<N> >
+{
+ typedef multi_pass<
+ InputT,
+ multi_pass_policies::input_iterator,
+ multi_pass_policies::first_owner,
+ multi_pass_policies::no_check,
+ multi_pass_policies::fixed_size_queue<N> > base_t;
+ public:
+ look_ahead()
+ : base_t() {}
+
+ explicit look_ahead(InputT x)
+ : base_t(x) {}
+
+ look_ahead(look_ahead const& x)
+ : base_t(x) {}
+
+#if BOOST_WORKAROUND(__GLIBCPP__, == 20020514)
+ look_ahead(int) // workaround for a bug in the library
+ : base_t() {} // shipped with gcc 3.1
+#endif // BOOST_WORKAROUND(__GLIBCPP__, == 20020514)
+
+ // default generated operators destructor and assignment operator are okay.
+};
+
+template
+<
+ typename InputT,
+ typename InputPolicy,
+ typename OwnershipPolicy,
+ typename CheckingPolicy,
+ typename StoragePolicy
+>
+void swap(
+ multi_pass<
+ InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy
+ > &x,
+ multi_pass<
+ InputT, InputPolicy, OwnershipPolicy, CheckingPolicy, StoragePolicy
+ > &y)
+{
+ x.swap(y);
+}
+
+namespace impl {
+
+ template <typename T>
+ inline void mp_swap(T& t1, T& t2)
+ {
+ using std::swap;
+ using boost::spirit::swap;
+ swap(t1, t2);
+ }
+}
+
+}} // namespace boost::spirit
+
+#endif // BOOST_SPIRIT_ITERATOR_MULTI_PASS_HPP
+
+
diff --git a/boost/boost/spirit/iterator/multi_pass_fwd.hpp b/boost/boost/spirit/iterator/multi_pass_fwd.hpp
new file mode 100644
index 00000000000..2eaa1bc552f
--- /dev/null
+++ b/boost/boost/spirit/iterator/multi_pass_fwd.hpp
@@ -0,0 +1,42 @@
+/*=============================================================================
+ Copyright (c) 2006 Tobias Schwinger
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_ITERATOR_MULTI_PASS_FWD_HPP)
+#define BOOST_SPIRIT_ITERATOR_MULTI_PASS_FWD_HPP
+
+#include <cstddef>
+
+namespace boost { namespace spirit {
+
+ namespace multi_pass_policies
+ {
+ class ref_counted;
+ class first_owner;
+ class buf_id_check;
+ class no_check;
+ class std_deque;
+ template<std::size_t N> class fixed_size_queue;
+ class input_iterator;
+ class lex_input;
+ class functor_input;
+ }
+
+ template
+ <
+ typename InputT,
+ typename InputPolicy = multi_pass_policies::input_iterator,
+ typename OwnershipPolicy = multi_pass_policies::ref_counted,
+ typename CheckingPolicy = multi_pass_policies::buf_id_check,
+ typename StoragePolicy = multi_pass_policies::std_deque
+ >
+ class multi_pass;
+
+}} // namespace boost::spirit
+
+#endif
+
diff --git a/boost/boost/spirit/iterator/position_iterator.hpp b/boost/boost/spirit/iterator/position_iterator.hpp
new file mode 100644
index 00000000000..19cf316bd72
--- /dev/null
+++ b/boost/boost/spirit/iterator/position_iterator.hpp
@@ -0,0 +1,429 @@
+/*=============================================================================
+ Copyright (c) 2002 Juan Carlos Arevalo-Baeza
+ Copyright (c) 2002-2006 Hartmut Kaiser
+ Copyright (c) 2003 Giovanni Bajo
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_POSITION_ITERATOR_HPP
+#define BOOST_SPIRIT_POSITION_ITERATOR_HPP
+
+#include <string>
+#include <boost/config.hpp>
+#include <boost/concept_check.hpp>
+
+#include <boost/spirit/iterator/position_iterator_fwd.hpp>
+
+namespace boost { namespace spirit {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// file_position_without_column
+//
+// A structure to hold positional information. This includes the file,
+// and the line number
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename String>
+struct file_position_without_column_base {
+ String file;
+ int line;
+
+ file_position_without_column_base(String const& file_ = String(),
+ int line_ = 1):
+ file (file_),
+ line (line_)
+ {}
+
+ bool operator==(const file_position_without_column_base& fp) const
+ { return line == fp.line && file == fp.file; }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// file_position
+//
+// This structure holds complete file position, including file name,
+// line and column number
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename String>
+struct file_position_base : public file_position_without_column_base<String> {
+ int column;
+
+ file_position_base(String const& file_ = String(),
+ int line_ = 1, int column_ = 1):
+ file_position_without_column_base<String> (file_, line_),
+ column (column_)
+ {}
+
+ bool operator==(const file_position_base& fp) const
+ { return column == fp.column && this->line == fp.line && this->file == fp.file; }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// position_policy<>
+//
+// This template is the policy to handle the file position. It is specialized
+// on the position type. Providing a custom file_position also requires
+// providing a specialization of this class.
+//
+// Policy interface:
+//
+// Default constructor of the custom position class must be accessible.
+// set_tab_chars(unsigned int chars) - Set the tabstop width
+// next_char(PositionT& pos) - Notify that a new character has been
+// processed
+// tabulation(PositionT& pos) - Notify that a tab character has been
+// processed
+// next_line(PositionT& pos) - Notify that a new line delimiter has
+// been reached.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename PositionT> class position_policy;
+
+///////////////////////////////////////////////////////////////////////////////
+}} /* namespace boost::spirit */
+
+
+// This must be included here for full compatibility with old MSVC
+#include "boost/spirit/iterator/impl/position_iterator.ipp"
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// position_iterator
+//
+// It wraps an iterator, and keeps track of the current position in the input,
+// as it gets incremented.
+//
+// The wrapped iterator must be at least a Forward iterator. The position
+// iterator itself will always be a non-mutable Forward iterator.
+//
+// In order to have begin/end iterators constructed, the end iterator must be
+// empty constructed. Similar to what happens with stream iterators. The begin
+// iterator must be constructed from both, the begin and end iterators of the
+// wrapped iterator type. This is necessary to implement the lookahead of
+// characters necessary to parse CRLF sequences.
+//
+// In order to extract the current positional data from the iterator, you may
+// use the get_position member function.
+//
+// You can also use the set_position member function to reset the current
+// position to something new.
+//
+// The structure that holds the current position can be customized through a
+// template parameter, and the class position_policy must be specialized
+// on the new type to define how to handle it. Currently, it's possible
+// to choose between the file_position and file_position_without_column
+// (which saves some overhead if managing current column is not required).
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#if !defined(BOOST_ITERATOR_ADAPTORS_VERSION) || \
+ BOOST_ITERATOR_ADAPTORS_VERSION < 0x0200
+#error "Please use at least Boost V1.31.0 while compiling the position_iterator class!"
+#else // BOOST_ITERATOR_ADAPTORS_VERSION < 0x0200
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Uses the newer iterator_adaptor version (should be released with
+// Boost V1.31.0)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+ typename ForwardIteratorT,
+ typename PositionT,
+ typename SelfT
+>
+class position_iterator
+: public iterator_::impl::position_iterator_base_generator<
+ SelfT,
+ ForwardIteratorT,
+ PositionT
+ >::type,
+ public position_policy<PositionT>
+{
+private:
+
+ typedef position_policy<PositionT> position_policy_t;
+ typedef typename iterator_::impl::position_iterator_base_generator<
+ SelfT,
+ ForwardIteratorT,
+ PositionT
+ >::type base_t;
+ typedef typename iterator_::impl::position_iterator_base_generator<
+ SelfT,
+ ForwardIteratorT,
+ PositionT
+ >::main_iter_t main_iter_t;
+
+public:
+
+ typedef PositionT position_t;
+
+ position_iterator()
+ : _isend(true)
+ {}
+
+ position_iterator(
+ const ForwardIteratorT& begin,
+ const ForwardIteratorT& end)
+ : base_t(begin), _end(end), _pos(PositionT()), _isend(begin == end)
+ {}
+
+ template <typename FileNameT>
+ position_iterator(
+ const ForwardIteratorT& begin,
+ const ForwardIteratorT& end,
+ FileNameT fileName)
+ : base_t(begin), _end(end), _pos(PositionT(fileName)),
+ _isend(begin == end)
+ {}
+
+ template <typename FileNameT, typename LineT>
+ position_iterator(
+ const ForwardIteratorT& begin,
+ const ForwardIteratorT& end,
+ FileNameT fileName, LineT line)
+ : base_t(begin), _end(end), _pos(PositionT(fileName, line)),
+ _isend(begin == end)
+ {}
+
+ template <typename FileNameT, typename LineT, typename ColumnT>
+ position_iterator(
+ const ForwardIteratorT& begin,
+ const ForwardIteratorT& end,
+ FileNameT fileName, LineT line, ColumnT column)
+ : base_t(begin), _end(end), _pos(PositionT(fileName, line, column)),
+ _isend(begin == end)
+ {}
+
+ position_iterator(
+ const ForwardIteratorT& begin,
+ const ForwardIteratorT& end,
+ const PositionT& pos)
+ : base_t(begin), _end(end), _pos(pos), _isend(begin == end)
+ {}
+
+ position_iterator(const position_iterator& iter)
+ : base_t(iter.base()), position_policy_t(iter),
+ _end(iter._end), _pos(iter._pos), _isend(iter._isend)
+ {}
+
+ position_iterator& operator=(const position_iterator& iter)
+ {
+ base_t::operator=(iter);
+ position_policy_t::operator=(iter);
+ _end = iter._end;
+ _pos = iter._pos;
+ _isend = iter._isend;
+ return *this;
+ }
+
+ void set_position(PositionT const& newpos) { _pos = newpos; }
+ PositionT& get_position() { return _pos; }
+ PositionT const& get_position() const { return _pos; }
+
+ void set_tabchars(unsigned int chars)
+ {
+ // This function (which comes from the position_policy) has a
+ // different name on purpose, to avoid messing with using
+ // declarations or qualified calls to access the base template
+ // function, which might break some compilers.
+ this->position_policy_t::set_tab_chars(chars);
+ }
+
+private:
+ friend class boost::iterator_core_access;
+
+ void increment()
+ {
+ typename base_t::reference val = *(this->base());
+ if (val == '\n' || val == '\r') {
+ ++this->base_reference();
+ if (this->base_reference() != _end) {
+ typename base_t::reference val2 = *(this->base());
+ if ((val == '\n' && val2 == '\r')
+ || (val == '\r' && val2 == '\n'))
+ {
+ ++this->base_reference();
+ }
+ }
+ this->next_line(_pos);
+ static_cast<main_iter_t &>(*this).newline();
+ }
+ else if (val == '\t') {
+ this->tabulation(_pos);
+ ++this->base_reference();
+ }
+ else {
+ this->next_char(_pos);
+ ++this->base_reference();
+ }
+
+ // The iterator is at the end only if it's the same
+ // of the
+ _isend = (this->base_reference() == _end);
+ }
+
+ template <
+ typename OtherDerivedT, typename OtherIteratorT,
+ typename V, typename C, typename R, typename D
+ >
+ bool equal(iterator_adaptor<OtherDerivedT, OtherIteratorT, V, C, R, D>
+ const &x) const
+ {
+ OtherDerivedT const &rhs = static_cast<OtherDerivedT const &>(x);
+ bool x_is_end = rhs._isend;
+
+ return (_isend && x_is_end) ||
+ (!_isend && !x_is_end && this->base() == rhs.base());
+ }
+
+protected:
+
+ void newline(void)
+ {}
+
+ ForwardIteratorT _end;
+ PositionT _pos;
+ bool _isend;
+};
+
+#endif // BOOST_ITERATOR_ADAPTORS_VERSION < 0x0200
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// position_iterator2
+//
+// Equivalent to position_iterator, but it is able to extract the current
+// line into a string. This is very handy for error reports.
+//
+// Notice that the footprint of this class is higher than position_iterator,
+// (how much depends on how bulky the underlying iterator is), so it should
+// be used only if necessary.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+template
+<
+ typename ForwardIteratorT,
+ typename PositionT
+>
+class position_iterator2
+ : public position_iterator
+ <
+ ForwardIteratorT,
+ PositionT,
+ position_iterator2<ForwardIteratorT, PositionT>
+ >
+{
+ typedef position_iterator
+ <
+ ForwardIteratorT,
+ PositionT,
+ position_iterator2<ForwardIteratorT, PositionT> // JDG 4-15-03
+ > base_t;
+
+public:
+ typedef typename base_t::value_type value_type;
+ typedef PositionT position_t;
+
+ position_iterator2()
+ {}
+
+ position_iterator2(
+ const ForwardIteratorT& begin,
+ const ForwardIteratorT& end):
+ base_t(begin, end),
+ _startline(begin)
+ {}
+
+ template <typename FileNameT>
+ position_iterator2(
+ const ForwardIteratorT& begin,
+ const ForwardIteratorT& end,
+ FileNameT file):
+ base_t(begin, end, file),
+ _startline(begin)
+ {}
+
+ template <typename FileNameT, typename LineT>
+ position_iterator2(
+ const ForwardIteratorT& begin,
+ const ForwardIteratorT& end,
+ FileNameT file, LineT line):
+ base_t(begin, end, file, line),
+ _startline(begin)
+ {}
+
+ template <typename FileNameT, typename LineT, typename ColumnT>
+ position_iterator2(
+ const ForwardIteratorT& begin,
+ const ForwardIteratorT& end,
+ FileNameT file, LineT line, ColumnT column):
+ base_t(begin, end, file, line, column),
+ _startline(begin)
+ {}
+
+ position_iterator2(
+ const ForwardIteratorT& begin,
+ const ForwardIteratorT& end,
+ const PositionT& pos):
+ base_t(begin, end, pos),
+ _startline(begin)
+ {}
+
+ position_iterator2(const position_iterator2& iter)
+ : base_t(iter), _startline(iter._startline)
+ {}
+
+ position_iterator2& operator=(const position_iterator2& iter)
+ {
+ base_t::operator=(iter);
+ _startline = iter._startline;
+ return *this;
+ }
+
+ ForwardIteratorT get_currentline_begin(void) const
+ { return _startline; }
+
+ ForwardIteratorT get_currentline_end(void) const
+ { return get_endline(); }
+
+ std::basic_string<value_type> get_currentline(void) const
+ {
+ return std::basic_string<value_type>
+ (get_currentline_begin(), get_currentline_end());
+ }
+
+protected:
+ ForwardIteratorT _startline;
+
+ friend class position_iterator<ForwardIteratorT, PositionT,
+ position_iterator2<ForwardIteratorT, PositionT> >;
+
+ ForwardIteratorT get_endline() const
+ {
+ ForwardIteratorT endline = _startline;
+ while (endline != this->_end && *endline != '\r' && *endline != '\n')
+ {
+ ++endline;
+ }
+ return endline;
+ }
+
+ void newline(void)
+ { _startline = this->base(); }
+};
+
+}} // namespace boost::spirit
+
+#endif
diff --git a/boost/boost/spirit/iterator/position_iterator_fwd.hpp b/boost/boost/spirit/iterator/position_iterator_fwd.hpp
new file mode 100644
index 00000000000..18abb5906e6
--- /dev/null
+++ b/boost/boost/spirit/iterator/position_iterator_fwd.hpp
@@ -0,0 +1,56 @@
+/*=============================================================================
+ Copyright (c) 2006 Tobias Schwinger
+ Copyright (c) 2002-2006 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_POSITION_ITERATOR_FWD_HPP)
+#define BOOST_SPIRIT_POSITION_ITERATOR_FWD_HPP
+
+#include <string>
+#include <boost/detail/iterator.hpp> // for boost::detail::iterator_traits
+#include <boost/spirit/core/nil.hpp>
+
+namespace boost { namespace spirit {
+
+ template <typename String = std::string>
+ struct file_position_base;
+
+ typedef file_position_base<std::string> file_position;
+
+ template <typename String = std::string>
+ struct file_position_without_column_base;
+
+ typedef file_position_without_column_base<std::string> file_position_without_column;
+
+ template <
+ typename ForwardIteratorT,
+ typename PositionT = file_position_base<
+ std::basic_string<
+ typename boost::detail::iterator_traits<ForwardIteratorT>::value_type
+ >
+ >,
+ typename SelfT = nil_t
+ >
+ class position_iterator;
+
+ template
+ <
+ typename ForwardIteratorT,
+ typename PositionT = file_position_base<
+ std::basic_string<
+ typename boost::detail::iterator_traits<ForwardIteratorT>::value_type
+ >
+ >
+ >
+ class position_iterator2;
+
+ template <typename PositionT> class position_policy;
+
+}} // namespace boost::spirit
+
+#endif
+
diff --git a/boost/boost/spirit/iterator/typeof.hpp b/boost/boost/spirit/iterator/typeof.hpp
new file mode 100644
index 00000000000..8a39a8c5dda
--- /dev/null
+++ b/boost/boost/spirit/iterator/typeof.hpp
@@ -0,0 +1,92 @@
+/*=============================================================================
+ Copyright (c) 2006 Tobias Schwinger
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_ITERATOR_TYPEOF_HPP)
+#define BOOST_SPIRIT_ITERATOR_TYPEOF_HPP
+
+#include <boost/typeof/typeof.hpp>
+
+#include <boost/spirit/iterator/multi_pass_fwd.hpp>
+#include <boost/spirit/iterator/file_iterator_fwd.hpp>
+#include <boost/spirit/iterator/position_iterator_fwd.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+namespace boost { namespace spirit {
+
+ // external (from core)
+ struct nil_t;
+
+ // fixed_size_queue.hpp
+ template<typename T, std::size_t N> class fixed_size_queue;
+ template<typename QueueT, typename T, typename PointerT>
+ class fsq_iterator;
+
+}} // namespace boost::spirit
+
+
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+
+#if !defined(BOOST_SPIRIT_NIL_T_TYPEOF_REGISTERED)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::nil_t)
+# define BOOST_SPIRIT_NIL_T_TYPEOF_REGISTERED
+#endif
+
+
+// multi_pass.hpp (has forward header)
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::multi_pass,5)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::multi_pass_policies::ref_counted)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::multi_pass_policies::first_owner)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::multi_pass_policies::buf_id_check)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::multi_pass_policies::no_check)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::multi_pass_policies::std_deque)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::multi_pass_policies::fixed_size_queue,(BOOST_TYPEOF_INTEGRAL(std::size_t)))
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::multi_pass_policies::input_iterator)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::multi_pass_policies::lex_input)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::multi_pass_policies::functor_input)
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::multi_pass,3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::multi_pass,1)
+
+
+// file_iterator.hpp
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::file_iterator,2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::fileiter_impl::std_file_iterator,1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::fileiter_impl::mmap_file_iterator,1)
+
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::fileiter_impl::std_file_iterator<char>)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::fileiter_impl::std_file_iterator<wchar_t>)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::fileiter_impl::mmap_file_iterator<char>)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::fileiter_impl::mmap_file_iterator<wchar_t>)
+
+
+// fixed_size_queue.hpp
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::fixed_size_queue,(typename)(BOOST_TYPEOF_INTEGRAL(std::size_t)))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::fsq_iterator,3)
+
+
+// position_iterator.hpp
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::position_iterator,3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::position_iterator2,2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::position_policy,1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::file_position_base,1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::file_position_without_column_base,1)
+
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::file_position)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::file_position_base<std::basic_string<wchar_t> >)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::file_position_without_column)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::file_position_without_column_base<std::basic_string<wchar_t> >)
+
+#endif
+
diff --git a/boost/boost/spirit/meta.hpp b/boost/boost/spirit/meta.hpp
new file mode 100644
index 00000000000..85876f39b59
--- /dev/null
+++ b/boost/boost/spirit/meta.hpp
@@ -0,0 +1,27 @@
+/*=============================================================================
+ Copyright (c) 1998-2003 Joel de Guzman
+ Copyright (c) 2001-2003 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_META_MAIN_HPP)
+#define BOOST_SPIRIT_META_MAIN_HPP
+
+#include <boost/spirit/version.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Master header for Spirit.Meta
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#include <boost/spirit/meta/fundamental.hpp>
+#include <boost/spirit/meta/parser_traits.hpp>
+#include <boost/spirit/meta/as_parser.hpp>
+#include <boost/spirit/meta/traverse.hpp>
+
+#endif // BOOST_SPIRIT_CORE_MAIN_HPP
+
diff --git a/boost/boost/spirit/meta/as_parser.hpp b/boost/boost/spirit/meta/as_parser.hpp
new file mode 100644
index 00000000000..53d58775cab
--- /dev/null
+++ b/boost/boost/spirit/meta/as_parser.hpp
@@ -0,0 +1,109 @@
+/*=============================================================================
+ Copyright (c) 2002-2003 Joel de Guzman
+ Copyright (c) 2002-2003 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_AS_PARSER_HPP)
+#define BOOST_SPIRIT_AS_PARSER_HPP
+
+#include <boost/spirit/core/primitives/primitives.hpp>
+
+namespace boost { namespace spirit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // Helper templates to derive the parser type from an auxilliary type
+ // and to generate an object of the required parser type given an
+ // auxilliary object. Supported types to convert are parsers,
+ // single characters and character strings.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ namespace impl
+ {
+ template<typename T>
+ struct default_as_parser
+ {
+ typedef T type;
+ static type const& convert(type const& p)
+ {
+ return p;
+ }
+ };
+
+ struct char_as_parser
+ {
+ typedef chlit<char> type;
+ static type convert(char ch)
+ {
+ return type(ch);
+ }
+ };
+
+ struct wchar_as_parser
+ {
+ typedef chlit<wchar_t> type;
+ static type convert(wchar_t ch)
+ {
+ return type(ch);
+ }
+ };
+
+ struct string_as_parser
+ {
+ typedef strlit<char const*> type;
+ static type convert(char const* str)
+ {
+ return type(str);
+ }
+ };
+
+ struct wstring_as_parser
+ {
+ typedef strlit<wchar_t const*> type;
+ static type convert(wchar_t const* str)
+ {
+ return type(str);
+ }
+ };
+ }
+
+ template<typename T>
+ struct as_parser : impl::default_as_parser<T> {};
+
+ template<>
+ struct as_parser<char> : impl::char_as_parser {};
+
+ template<>
+ struct as_parser<wchar_t> : impl::wchar_as_parser {};
+
+ template<>
+ struct as_parser<char*> : impl::string_as_parser {};
+
+ template<>
+ struct as_parser<char const*> : impl::string_as_parser {};
+
+ template<>
+ struct as_parser<wchar_t*> : impl::wstring_as_parser {};
+
+ template<>
+ struct as_parser<wchar_t const*> : impl::wstring_as_parser {};
+
+ template<int N>
+ struct as_parser<char[N]> : impl::string_as_parser {};
+
+ template<int N>
+ struct as_parser<wchar_t[N]> : impl::wstring_as_parser {};
+
+ template<int N>
+ struct as_parser<char const[N]> : impl::string_as_parser {};
+
+ template<int N>
+ struct as_parser<wchar_t const[N]> : impl::wstring_as_parser {};
+
+}} // namespace boost::spirit
+
+#endif
diff --git a/boost/boost/spirit/meta/fundamental.hpp b/boost/boost/spirit/meta/fundamental.hpp
new file mode 100644
index 00000000000..cb0986cbc0a
--- /dev/null
+++ b/boost/boost/spirit/meta/fundamental.hpp
@@ -0,0 +1,52 @@
+/*=============================================================================
+ Copyright (c) 2002-2003 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_FUNDAMENTAL_HPP)
+#define BOOST_SPIRIT_FUNDAMENTAL_HPP
+
+#include <boost/spirit/meta/impl/fundamental.ipp>
+
+namespace boost { namespace spirit
+{
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // Helper template for counting the number of nodes contained in a
+ // given parser type.
+ // All parser_category type parsers are counted as nodes.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename ParserT>
+ struct node_count {
+
+ typedef typename ParserT::parser_category_t parser_category_t;
+ typedef typename impl::nodes<parser_category_t>
+ ::template count<ParserT, mpl::int_<0> > count_t;
+
+ BOOST_STATIC_CONSTANT(int, value = count_t::value);
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // Helper template for counting the number of leaf nodes contained in a
+ // given parser type.
+ // Only plain_parser_category type parsers are counted as leaf nodes.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename ParserT>
+ struct leaf_count {
+
+ typedef typename ParserT::parser_category_t parser_category_t;
+ typedef typename impl::leafs<parser_category_t>
+ ::template count<ParserT, mpl::int_<0> > count_t;
+
+ BOOST_STATIC_CONSTANT(int, value = count_t::value);
+ };
+
+}} // namespace boost::spirit
+
+#endif // !defined(BOOST_SPIRIT_FUNDAMENTAL_HPP)
diff --git a/boost/boost/spirit/meta/impl/fundamental.ipp b/boost/boost/spirit/meta/impl/fundamental.ipp
new file mode 100644
index 00000000000..f0b16ca45a9
--- /dev/null
+++ b/boost/boost/spirit/meta/impl/fundamental.ipp
@@ -0,0 +1,305 @@
+/*=============================================================================
+ Copyright (c) 2002-2003 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_FUNDAMENTAL_IPP)
+#define BOOST_SPIRIT_FUNDAMENTAL_IPP
+
+#include <boost/mpl/int.hpp>
+
+namespace boost { namespace spirit {
+
+#if defined(BOOST_MSVC) && (BOOST_MSVC <= 1300)
+ BOOST_SPIRIT_DEPENDENT_TEMPLATE_WRAPPER2(count_wrapper, count);
+#endif // defined(BOOST_MSVC) && (BOOST_MSVC <= 1300)
+
+namespace impl
+{
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // Helper template for counting the number of nodes contained in a
+ // given parser type.
+ // All parser_category type parsers are counted as nodes.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename CategoryT>
+ struct nodes;
+
+ template <>
+ struct nodes<plain_parser_category> {
+
+ template <typename ParserT, typename LeafCountT>
+ struct count {
+
+ // __BORLANDC__ == 0x0561 isn't happy with BOOST_STATIC_CONSTANT
+ enum { value = (LeafCountT::value + 1) };
+ };
+ };
+
+#if defined(BOOST_MSVC) && (BOOST_MSVC <= 1300)
+
+ template <>
+ struct nodes<unary_parser_category> {
+
+ template <typename ParserT, typename LeafCountT>
+ struct count {
+
+ typedef typename ParserT::subject_t subject_t;
+ typedef typename subject_t::parser_category_t subject_category_t;
+
+ typedef nodes<subject_category_t> nodes_t;
+ typedef typename count_wrapper<nodes_t>
+ ::template result_<subject_t, LeafCountT> count_t;
+
+ BOOST_STATIC_CONSTANT(int, value = count_t::value + 1);
+ };
+ };
+
+ template <>
+ struct nodes<action_parser_category> {
+
+ template <typename ParserT, typename LeafCountT>
+ struct count {
+
+ typedef typename ParserT::subject_t subject_t;
+ typedef typename subject_t::parser_category_t subject_category_t;
+
+ typedef nodes<subject_category_t> nodes_t;
+ typedef typename count_wrapper<nodes_t>
+ ::template result_<subject_t, LeafCountT> count_t;
+
+ BOOST_STATIC_CONSTANT(int, value = count_t::value + 1);
+ };
+ };
+
+ template <>
+ struct nodes<binary_parser_category> {
+
+ template <typename ParserT, typename LeafCountT>
+ struct count {
+
+ typedef typename ParserT::left_t left_t;
+ typedef typename ParserT::right_t right_t;
+ typedef typename left_t::parser_category_t left_category_t;
+ typedef typename right_t::parser_category_t right_category_t;
+
+ typedef nodes<left_category_t> left_nodes_t;
+ typedef typename count_wrapper<left_nodes_t>
+ ::template result_<left_t, LeafCountT> left_count_t;
+
+ typedef nodes<right_category_t> right_nodes_t;
+ typedef typename count_wrapper<right_nodes_t>
+ ::template result_<right_t, LeafCountT> right_count_t;
+
+ BOOST_STATIC_CONSTANT(int,
+ value = (left_count_t::value + right_count_t::value + 1));
+ };
+ };
+
+#else
+
+ template <>
+ struct nodes<unary_parser_category> {
+
+ template <typename ParserT, typename LeafCountT>
+ struct count {
+
+ typedef typename ParserT::subject_t subject_t;
+ typedef typename subject_t::parser_category_t subject_category_t;
+
+ // __BORLANDC__ == 0x0561 isn't happy with BOOST_STATIC_CONSTANT
+ enum { value = (nodes<subject_category_t>
+ ::template count<subject_t, LeafCountT>::value + 1) };
+ };
+ };
+
+ template <>
+ struct nodes<action_parser_category> {
+
+ template <typename ParserT, typename LeafCountT>
+ struct count {
+
+ typedef typename ParserT::subject_t subject_t;
+ typedef typename subject_t::parser_category_t subject_category_t;
+
+ // __BORLANDC__ == 0x0561 isn't happy with BOOST_STATIC_CONSTANT
+ enum { value = (nodes<subject_category_t>
+ ::template count<subject_t, LeafCountT>::value + 1) };
+ };
+ };
+
+ template <>
+ struct nodes<binary_parser_category> {
+
+ template <typename ParserT, typename LeafCountT>
+ struct count {
+
+ typedef typename ParserT::left_t left_t;
+ typedef typename ParserT::right_t right_t;
+ typedef typename left_t::parser_category_t left_category_t;
+ typedef typename right_t::parser_category_t right_category_t;
+
+ typedef count self_t;
+
+ // __BORLANDC__ == 0x0561 isn't happy with BOOST_STATIC_CONSTANT
+ enum {
+ leftcount = (nodes<left_category_t>
+ ::template count<left_t, LeafCountT>::value),
+ rightcount = (nodes<right_category_t>
+ ::template count<right_t, LeafCountT>::value),
+ value = ((self_t::leftcount) + (self_t::rightcount) + 1)
+ };
+ };
+ };
+
+#endif
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // Helper template for counting the number of leaf nodes contained in a
+ // given parser type.
+ // Only plain_parser_category type parsers are counted as leaf nodes.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename CategoryT>
+ struct leafs;
+
+ template <>
+ struct leafs<plain_parser_category> {
+
+ template <typename ParserT, typename LeafCountT>
+ struct count {
+
+ // __BORLANDC__ == 0x0561 isn't happy with BOOST_STATIC_CONSTANT
+ enum { value = (LeafCountT::value + 1) };
+ };
+ };
+
+#if defined(BOOST_MSVC) && (BOOST_MSVC <= 1300)
+
+ template <>
+ struct leafs<unary_parser_category> {
+
+ template <typename ParserT, typename LeafCountT>
+ struct count {
+
+ typedef typename ParserT::subject_t subject_t;
+ typedef typename subject_t::parser_category_t subject_category_t;
+
+ typedef leafs<subject_category_t> nodes_t;
+ typedef typename count_wrapper<nodes_t>
+ ::template result_<subject_t, LeafCountT> count_t;
+
+ BOOST_STATIC_CONSTANT(int, value = count_t::value);
+ };
+ };
+
+ template <>
+ struct leafs<action_parser_category> {
+
+ template <typename ParserT, typename LeafCountT>
+ struct count {
+
+ typedef typename ParserT::subject_t subject_t;
+ typedef typename subject_t::parser_category_t subject_category_t;
+
+ typedef leafs<subject_category_t> nodes_t;
+ typedef typename count_wrapper<nodes_t>
+ ::template result_<subject_t, LeafCountT> count_t;
+
+ BOOST_STATIC_CONSTANT(int, value = count_t::value);
+ };
+ };
+
+ template <>
+ struct leafs<binary_parser_category> {
+
+ template <typename ParserT, typename LeafCountT>
+ struct count {
+
+ typedef typename ParserT::left_t left_t;
+ typedef typename ParserT::right_t right_t;
+ typedef typename left_t::parser_category_t left_category_t;
+ typedef typename right_t::parser_category_t right_category_t;
+
+ typedef leafs<left_category_t> left_nodes_t;
+ typedef typename count_wrapper<left_nodes_t>
+ ::template result_<left_t, LeafCountT> left_count_t;
+
+ typedef leafs<right_category_t> right_nodes_t;
+ typedef typename count_wrapper<right_nodes_t>
+ ::template result_<right_t, LeafCountT> right_count_t;
+
+ BOOST_STATIC_CONSTANT(int,
+ value = (left_count_t::value + right_count_t::value));
+ };
+ };
+
+#else
+
+ template <>
+ struct leafs<unary_parser_category> {
+
+ template <typename ParserT, typename LeafCountT>
+ struct count {
+
+ typedef typename ParserT::subject_t subject_t;
+ typedef typename subject_t::parser_category_t subject_category_t;
+
+ // __BORLANDC__ == 0x0561 isn't happy with BOOST_STATIC_CONSTANT
+ enum { value = (leafs<subject_category_t>
+ ::template count<subject_t, LeafCountT>::value) };
+ };
+ };
+
+ template <>
+ struct leafs<action_parser_category> {
+
+ template <typename ParserT, typename LeafCountT>
+ struct count {
+
+ typedef typename ParserT::subject_t subject_t;
+ typedef typename subject_t::parser_category_t subject_category_t;
+
+ // __BORLANDC__ == 0x0561 isn't happy with BOOST_STATIC_CONSTANT
+ enum { value = (leafs<subject_category_t>
+ ::template count<subject_t, LeafCountT>::value) };
+ };
+ };
+
+ template <>
+ struct leafs<binary_parser_category> {
+
+ template <typename ParserT, typename LeafCountT>
+ struct count {
+
+ typedef typename ParserT::left_t left_t;
+ typedef typename ParserT::right_t right_t;
+ typedef typename left_t::parser_category_t left_category_t;
+ typedef typename right_t::parser_category_t right_category_t;
+
+ typedef count self_t;
+
+ // __BORLANDC__ == 0x0561 isn't happy with BOOST_STATIC_CONSTANT
+ enum {
+ leftcount = (leafs<left_category_t>
+ ::template count<left_t, LeafCountT>::value),
+ rightcount = (leafs<right_category_t>
+ ::template count<right_t, LeafCountT>::value),
+ value = (self_t::leftcount + self_t::rightcount)
+ };
+ };
+ };
+
+#endif
+
+} // namespace impl
+
+///////////////////////////////////////////////////////////////////////////////
+}} // namespace boost::spirit
+
+#endif // !defined(BOOST_SPIRIT_FUNDAMENTAL_IPP)
diff --git a/boost/boost/spirit/meta/impl/parser_traits.ipp b/boost/boost/spirit/meta/impl/parser_traits.ipp
new file mode 100644
index 00000000000..af210f177a8
--- /dev/null
+++ b/boost/boost/spirit/meta/impl/parser_traits.ipp
@@ -0,0 +1,187 @@
+/*=============================================================================
+ Copyright (c) 2002-2003 Joel de Guzman
+ Copyright (c) 2002-2003 Hartmut Kaiser
+ Copyright (c) 2003 Martin Wille
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_PARSER_TRAITS_IPP)
+#define BOOST_SPIRIT_PARSER_TRAITS_IPP
+
+#include <boost/spirit/core/composite/operators.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+namespace impl
+{
+
+#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // from spirit 1.1 (copyright (c) 2001 Bruce Florman)
+ // various workarounds to support compile time decisions without partial
+ // template specialization whether a given type is an instance of a
+ // concrete parser type.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename T>
+ struct parser_type_traits
+ {
+ // Determine at compile time (without partial specialization)
+ // whether a given type is an instance of the alternative<A,B>
+
+ static T t();
+
+ typedef struct { char dummy[1]; } size1_t;
+ typedef struct { char dummy[2]; } size2_t;
+ typedef struct { char dummy[3]; } size3_t;
+ typedef struct { char dummy[4]; } size4_t;
+ typedef struct { char dummy[5]; } size5_t;
+ typedef struct { char dummy[6]; } size6_t;
+ typedef struct { char dummy[7]; } size7_t;
+ typedef struct { char dummy[8]; } size8_t;
+ typedef struct { char dummy[9]; } size9_t;
+ typedef struct { char dummy[10]; } size10_t;
+
+ // the following functions need no implementation
+ template <typename A, typename B>
+ static size1_t test_(alternative<A, B> const&);
+ template <typename A, typename B>
+ static size2_t test_(sequence<A, B> const&);
+ template <typename A, typename B>
+ static size3_t test_(sequential_or<A, B> const&);
+ template <typename A, typename B>
+ static size4_t test_(intersection<A, B> const&);
+ template <typename A, typename B>
+ static size5_t test_(difference<A, B> const&);
+ template <typename A, typename B>
+ static size6_t test_(exclusive_or<A, B> const&);
+ template <typename S>
+ static size7_t test_(optional<S> const&);
+ template <typename S>
+ static size8_t test_(kleene_star<S> const&);
+ template <typename S>
+ static size9_t test_(positive<S> const&);
+
+ static size10_t test_(...);
+
+ BOOST_STATIC_CONSTANT(bool,
+ is_alternative = (sizeof(size1_t) == sizeof(test_(t()))) );
+ BOOST_STATIC_CONSTANT(bool,
+ is_sequence = (sizeof(size2_t) == sizeof(test_(t()))) );
+ BOOST_STATIC_CONSTANT(bool,
+ is_sequential_or = (sizeof(size3_t) == sizeof(test_(t()))) );
+ BOOST_STATIC_CONSTANT(bool,
+ is_intersection = (sizeof(size4_t) == sizeof(test_(t()))) );
+ BOOST_STATIC_CONSTANT(bool,
+ is_difference = (sizeof(size5_t) == sizeof(test_(t()))) );
+ BOOST_STATIC_CONSTANT(bool,
+ is_exclusive_or = (sizeof(size6_t) == sizeof(test_(t()))) );
+ BOOST_STATIC_CONSTANT(bool,
+ is_optional = (sizeof(size7_t) == sizeof(test_(t()))) );
+ BOOST_STATIC_CONSTANT(bool,
+ is_kleene_star = (sizeof(size8_t) == sizeof(test_(t()))) );
+ BOOST_STATIC_CONSTANT(bool,
+ is_positive = (sizeof(size9_t) == sizeof(test_(t()))) );
+ };
+
+#else
+
+ ///////////////////////////////////////////////////////////////////////////
+ struct parser_type_traits_base {
+
+ BOOST_STATIC_CONSTANT(bool, is_alternative = false);
+ BOOST_STATIC_CONSTANT(bool, is_sequence = false);
+ BOOST_STATIC_CONSTANT(bool, is_sequential_or = false);
+ BOOST_STATIC_CONSTANT(bool, is_intersection = false);
+ BOOST_STATIC_CONSTANT(bool, is_difference = false);
+ BOOST_STATIC_CONSTANT(bool, is_exclusive_or = false);
+ BOOST_STATIC_CONSTANT(bool, is_optional = false);
+ BOOST_STATIC_CONSTANT(bool, is_kleene_star = false);
+ BOOST_STATIC_CONSTANT(bool, is_positive = false);
+ };
+
+ template <typename ParserT>
+ struct parser_type_traits : public parser_type_traits_base {
+
+ // no definition here, fallback for all not explicitly mentioned parser
+ // types
+ };
+
+ template <typename A, typename B>
+ struct parser_type_traits<alternative<A, B> >
+ : public parser_type_traits_base {
+
+ BOOST_STATIC_CONSTANT(bool, is_alternative = true);
+ };
+
+ template <typename A, typename B>
+ struct parser_type_traits<sequence<A, B> >
+ : public parser_type_traits_base {
+
+ BOOST_STATIC_CONSTANT(bool, is_sequence = true);
+ };
+
+ template <typename A, typename B>
+ struct parser_type_traits<sequential_or<A, B> >
+ : public parser_type_traits_base {
+
+ BOOST_STATIC_CONSTANT(bool, is_sequential_or = true);
+ };
+
+ template <typename A, typename B>
+ struct parser_type_traits<intersection<A, B> >
+ : public parser_type_traits_base {
+
+ BOOST_STATIC_CONSTANT(bool, is_intersection = true);
+ };
+
+ template <typename A, typename B>
+ struct parser_type_traits<difference<A, B> >
+ : public parser_type_traits_base {
+
+ BOOST_STATIC_CONSTANT(bool, is_difference = true);
+ };
+
+ template <typename A, typename B>
+ struct parser_type_traits<exclusive_or<A, B> >
+ : public parser_type_traits_base {
+
+ BOOST_STATIC_CONSTANT(bool, is_exclusive_or = true);
+ };
+
+ template <typename S>
+ struct parser_type_traits<optional<S> >
+ : public parser_type_traits_base {
+
+ BOOST_STATIC_CONSTANT(bool, is_optional = true);
+ };
+
+ template <typename S>
+ struct parser_type_traits<kleene_star<S> >
+ : public parser_type_traits_base {
+
+ BOOST_STATIC_CONSTANT(bool, is_kleene_star = true);
+ };
+
+ template <typename S>
+ struct parser_type_traits<positive<S> >
+ : public parser_type_traits_base {
+
+ BOOST_STATIC_CONSTANT(bool, is_positive = true);
+ };
+
+#endif // defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+} // namespace impl
+
+///////////////////////////////////////////////////////////////////////////////
+}} // namespace boost::spirit
+
+#endif // !defined(BOOST_SPIRIT_PARSER_TRAITS_IPP)
diff --git a/boost/boost/spirit/meta/impl/refactoring.ipp b/boost/boost/spirit/meta/impl/refactoring.ipp
new file mode 100644
index 00000000000..c63a8c07c32
--- /dev/null
+++ b/boost/boost/spirit/meta/impl/refactoring.ipp
@@ -0,0 +1,447 @@
+/*=============================================================================
+ Copyright (c) 2002-2003 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_REFACTORING_IPP
+#define BOOST_SPIRIT_REFACTORING_IPP
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// The struct 'self_nested_refactoring' is used to indicate, that the
+// refactoring algorithm should be 'self-nested'.
+//
+// The struct 'non_nested_refactoring' is used to indicate, that no nesting
+// of refactoring algorithms is reqired.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+struct non_nested_refactoring { typedef non_nested_refactoring embed_t; };
+struct self_nested_refactoring { typedef self_nested_refactoring embed_t; };
+
+///////////////////////////////////////////////////////////////////////////////
+namespace impl {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Helper templates for refactoring parsers
+//
+///////////////////////////////////////////////////////////////////////////////
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // refactor the left unary operand of a binary parser
+ //
+ // The refactoring should be done only if the left operand is an
+ // unary_parser_category parser.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename CategoryT>
+ struct refactor_unary_nested {
+
+ template <
+ typename ParserT, typename NestedT,
+ typename ScannerT, typename BinaryT
+ >
+ static typename parser_result<ParserT, ScannerT>::type
+ parse(ParserT const &, ScannerT const& scan, BinaryT const& binary,
+ NestedT const& /*nested_d*/)
+ {
+ return binary.parse(scan);
+ }
+ };
+
+ template <>
+ struct refactor_unary_nested<unary_parser_category> {
+
+ template <
+ typename ParserT, typename ScannerT, typename BinaryT,
+ typename NestedT
+ >
+ static typename parser_result<ParserT, ScannerT>::type
+ parse(ParserT const &, ScannerT const& scan, BinaryT const& binary,
+ NestedT const& nested_d)
+ {
+ typedef typename BinaryT::parser_generator_t op_t;
+ typedef
+ typename BinaryT::left_t::parser_generator_t
+ unary_t;
+
+ return
+ unary_t::generate(
+ nested_d[
+ op_t::generate(binary.left().subject(), binary.right())
+ ]
+ ).parse(scan);
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename CategoryT>
+ struct refactor_unary_non_nested {
+
+ template <typename ParserT, typename ScannerT, typename BinaryT>
+ static typename parser_result<ParserT, ScannerT>::type
+ parse(ParserT const &, ScannerT const& scan, BinaryT const& binary)
+ {
+ return binary.parse(scan);
+ }
+ };
+
+ template <>
+ struct refactor_unary_non_nested<unary_parser_category> {
+
+ template <typename ParserT, typename ScannerT, typename BinaryT>
+ static typename parser_result<ParserT, ScannerT>::type
+ parse(ParserT const &, ScannerT const& scan, BinaryT const& binary)
+ {
+ typedef typename BinaryT::parser_generator_t op_t;
+ typedef
+ typename BinaryT::left_t::parser_generator_t
+ unary_t;
+
+ return unary_t::generate(
+ op_t::generate(binary.left().subject(), binary.right())
+ ).parse(scan);
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename NestedT>
+ struct refactor_unary_type {
+
+ template <typename ParserT, typename ScannerT, typename BinaryT>
+ static typename parser_result<ParserT, ScannerT>::type
+ parse(ParserT const &p, ScannerT const& scan, BinaryT const& binary,
+ NestedT const& nested_d)
+ {
+ typedef
+ typename BinaryT::left_t::parser_category_t
+ parser_category_t;
+
+ return refactor_unary_nested<parser_category_t>::
+ parse(p, scan, binary, nested_d);
+ }
+ };
+
+ template <>
+ struct refactor_unary_type<non_nested_refactoring> {
+
+ template <typename ParserT, typename ScannerT, typename BinaryT>
+ static typename parser_result<ParserT, ScannerT>::type
+ parse(ParserT const &p, ScannerT const& scan, BinaryT const& binary,
+ non_nested_refactoring const&)
+ {
+ typedef
+ typename BinaryT::left_t::parser_category_t
+ parser_category_t;
+
+ return refactor_unary_non_nested<parser_category_t>::
+ parse(p, scan, binary);
+ }
+
+ };
+
+ template <>
+ struct refactor_unary_type<self_nested_refactoring> {
+
+ template <typename ParserT, typename ScannerT, typename BinaryT>
+ static typename parser_result<ParserT, ScannerT>::type
+ parse(ParserT const &p, ScannerT const& scan, BinaryT const& binary,
+ self_nested_refactoring const &nested_tag)
+ {
+ typedef
+ typename BinaryT::left_t::parser_category_t
+ parser_category_t;
+ typedef typename ParserT::parser_generator_t parser_generator_t;
+
+ parser_generator_t nested_d(nested_tag);
+ return refactor_unary_nested<parser_category_t>::
+ parse(p, scan, binary, nested_d);
+ }
+
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // refactor the action on the left operand of a binary parser
+ //
+ // The refactoring should be done only if the left operand is an
+ // action_parser_category parser.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename CategoryT>
+ struct refactor_action_nested {
+
+ template <
+ typename ParserT, typename ScannerT, typename BinaryT,
+ typename NestedT
+ >
+ static typename parser_result<ParserT, ScannerT>::type
+ parse(ParserT const &, ScannerT const& scan, BinaryT const& binary,
+ NestedT const& nested_d)
+ {
+ return nested_d[binary].parse(scan);
+ }
+ };
+
+ template <>
+ struct refactor_action_nested<action_parser_category> {
+
+ template <
+ typename ParserT, typename ScannerT, typename BinaryT,
+ typename NestedT
+ >
+ static typename parser_result<ParserT, ScannerT>::type
+ parse(ParserT const &, ScannerT const& scan, BinaryT const& binary,
+ NestedT const& nested_d)
+ {
+ typedef typename BinaryT::parser_generator_t binary_gen_t;
+
+ return (
+ nested_d[
+ binary_gen_t::generate(
+ binary.left().subject(),
+ binary.right()
+ )
+ ][binary.left().predicate()]
+ ).parse(scan);
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename CategoryT>
+ struct refactor_action_non_nested {
+
+ template <typename ParserT, typename ScannerT, typename BinaryT>
+ static typename parser_result<ParserT, ScannerT>::type
+ parse(ParserT const &, ScannerT const& scan, BinaryT const& binary)
+ {
+ return binary.parse(scan);
+ }
+ };
+
+ template <>
+ struct refactor_action_non_nested<action_parser_category> {
+
+ template <typename ParserT, typename ScannerT, typename BinaryT>
+ static typename parser_result<ParserT, ScannerT>::type
+ parse(ParserT const &, ScannerT const& scan, BinaryT const& binary)
+ {
+ typedef typename BinaryT::parser_generator_t binary_gen_t;
+
+ return (
+ binary_gen_t::generate(
+ binary.left().subject(),
+ binary.right()
+ )[binary.left().predicate()]
+ ).parse(scan);
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename NestedT>
+ struct refactor_action_type {
+
+ template <typename ParserT, typename ScannerT, typename BinaryT>
+ static typename parser_result<ParserT, ScannerT>::type
+ parse(ParserT const &p, ScannerT const& scan, BinaryT const& binary,
+ NestedT const& nested_d)
+ {
+ typedef
+ typename BinaryT::left_t::parser_category_t
+ parser_category_t;
+
+ return refactor_action_nested<parser_category_t>::
+ parse(p, scan, binary, nested_d);
+ }
+ };
+
+ template <>
+ struct refactor_action_type<non_nested_refactoring> {
+
+ template <typename ParserT, typename ScannerT, typename BinaryT>
+ static typename parser_result<ParserT, ScannerT>::type
+ parse(ParserT const &p, ScannerT const& scan, BinaryT const& binary,
+ non_nested_refactoring const&)
+ {
+ typedef
+ typename BinaryT::left_t::parser_category_t
+ parser_category_t;
+
+ return refactor_action_non_nested<parser_category_t>::
+ parse(p, scan, binary);
+ }
+ };
+
+ template <>
+ struct refactor_action_type<self_nested_refactoring> {
+
+ template <typename ParserT, typename ScannerT, typename BinaryT>
+ static typename parser_result<ParserT, ScannerT>::type
+ parse(ParserT const &p, ScannerT const& scan, BinaryT const& binary,
+ self_nested_refactoring const &nested_tag)
+ {
+ typedef typename ParserT::parser_generator_t parser_generator_t;
+ typedef
+ typename BinaryT::left_t::parser_category_t
+ parser_category_t;
+
+ parser_generator_t nested_d(nested_tag);
+ return refactor_action_nested<parser_category_t>::
+ parse(p, scan, binary, nested_d);
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // refactor the action attached to a binary parser
+ //
+ // The refactoring should be done only if the given parser is an
+ // binary_parser_category parser.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename CategoryT>
+ struct attach_action_nested {
+
+ template <
+ typename ParserT, typename ScannerT, typename ActionT,
+ typename NestedT
+ >
+ static typename parser_result<ParserT, ScannerT>::type
+ parse(ParserT const &, ScannerT const& scan, ActionT const &action,
+ NestedT const& nested_d)
+ {
+ return action.parse(scan);
+ }
+ };
+
+ template <>
+ struct attach_action_nested<binary_parser_category> {
+
+ template <
+ typename ParserT, typename ScannerT, typename ActionT,
+ typename NestedT
+ >
+ static typename parser_result<ParserT, ScannerT>::type
+ parse(ParserT const &, ScannerT const& scan, ActionT const &action,
+ NestedT const& nested_d)
+ {
+ typedef
+ typename ActionT::subject_t::parser_generator_t
+ binary_gen_t;
+
+ return (
+ binary_gen_t::generate(
+ nested_d[action.subject().left()[action.predicate()]],
+ nested_d[action.subject().right()[action.predicate()]]
+ )
+ ).parse(scan);
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename CategoryT>
+ struct attach_action_non_nested {
+
+ template <typename ParserT, typename ScannerT, typename ActionT>
+ static typename parser_result<ParserT, ScannerT>::type
+ parse(ParserT const &, ScannerT const& scan, ActionT const &action)
+ {
+ return action.parse(scan);
+ }
+ };
+
+ template <>
+ struct attach_action_non_nested<binary_parser_category> {
+
+ template <typename ParserT, typename ScannerT, typename ActionT>
+ static typename parser_result<ParserT, ScannerT>::type
+ parse(ParserT const &, ScannerT const& scan, ActionT const &action)
+ {
+ typedef
+ typename ActionT::subject_t::parser_generator_t
+ binary_gen_t;
+
+ return (
+ binary_gen_t::generate(
+ action.subject().left()[action.predicate()],
+ action.subject().right()[action.predicate()]
+ )
+ ).parse(scan);
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename NestedT>
+ struct attach_action_type {
+
+ template <typename ParserT, typename ScannerT, typename ActionT>
+ static typename parser_result<ParserT, ScannerT>::type
+ parse(ParserT const &p, ScannerT const& scan, ActionT const& action,
+ NestedT const& nested_d)
+ {
+ typedef
+ typename ActionT::subject_t::parser_category_t
+ parser_category_t;
+
+ return attach_action_nested<parser_category_t>::
+ parse(p, scan, action, nested_d);
+ }
+ };
+
+ template <>
+ struct attach_action_type<non_nested_refactoring> {
+
+ template <typename ParserT, typename ScannerT, typename ActionT>
+ static typename parser_result<ParserT, ScannerT>::type
+ parse(ParserT const &p, ScannerT const& scan, ActionT const &action,
+ non_nested_refactoring const&)
+ {
+ typedef
+ typename ActionT::subject_t::parser_category_t
+ parser_category_t;
+
+ return attach_action_non_nested<parser_category_t>::
+ parse(p, scan, action);
+ }
+ };
+
+ template <>
+ struct attach_action_type<self_nested_refactoring> {
+
+ template <typename ParserT, typename ScannerT, typename ActionT>
+ static typename parser_result<ParserT, ScannerT>::type
+ parse(ParserT const &p, ScannerT const& scan, ActionT const &action,
+ self_nested_refactoring const& nested_tag)
+ {
+ typedef typename ParserT::parser_generator_t parser_generator_t;
+ typedef
+ typename ActionT::subject_t::parser_category_t
+ parser_category_t;
+
+ parser_generator_t nested_d(nested_tag);
+ return attach_action_nested<parser_category_t>::
+ parse(p, scan, action, nested_d);
+ }
+ };
+
+} // namespace impl
+
+///////////////////////////////////////////////////////////////////////////////
+}} // namespace boost::spirit
+
+#endif
+
diff --git a/boost/boost/spirit/meta/impl/traverse.ipp b/boost/boost/spirit/meta/impl/traverse.ipp
new file mode 100644
index 00000000000..71c9a9fa808
--- /dev/null
+++ b/boost/boost/spirit/meta/impl/traverse.ipp
@@ -0,0 +1,389 @@
+/*=============================================================================
+ Copyright (c) 2002-2003 Joel de Guzman
+ Copyright (c) 2002-2003 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_TRAVERSE_IPP)
+#define BOOST_SPIRIT_TRAVERSE_IPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/meta/fundamental.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+///////////////////////////////////////////////////////////////////////////////
+namespace impl
+{
+
+ template <typename CategoryT>
+ struct traverse_post_order_return_category;
+
+} // namespace impl
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Environment class for post_order_traversal
+//
+///////////////////////////////////////////////////////////////////////////////
+
+template <int Level, int Node, int Index, int LastLeft>
+struct traverse_post_order_env {
+
+ BOOST_STATIC_CONSTANT(int, level = Level);
+ BOOST_STATIC_CONSTANT(int, node = Node);
+ BOOST_STATIC_CONSTANT(int, index = Index);
+ BOOST_STATIC_CONSTANT(int, lastleft = LastLeft);
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// traverse_post_order_return template
+//
+// This template is a helper for dispatching the calculation of a parser
+// type result for a traversal level to the corresponding parser_category
+// based specialization.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+template <typename MetaT, typename ParserT, typename EnvT>
+struct traverse_post_order_return {
+
+ typedef typename ParserT::parser_category_t parser_category_t;
+ typedef typename impl::traverse_post_order_return_category<parser_category_t>
+ ::template result<MetaT, ParserT, EnvT>::type type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// parser_traversal_..._result templates
+//
+// These are metafunctions, which calculate the resulting parser type
+// for all subparsers and feed these types to the user supplied
+// metafunctions to get back the resulting parser type of this traversal
+// level.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+template <typename MetaT, typename ParserT, typename EnvT>
+struct parser_traversal_plain_result {
+
+ typedef typename MetaT::template plain_result<ParserT, EnvT>::type type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+template <typename MetaT, typename UnaryT, typename SubjectT, typename EnvT>
+struct parser_traversal_unary_result {
+
+ typedef typename MetaT
+ ::template unary_result<UnaryT, SubjectT, EnvT>::type type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+template <typename MetaT, typename ActionT, typename SubjectT, typename EnvT>
+struct parser_traversal_action_result {
+
+ typedef typename MetaT
+ ::template action_result<ActionT, SubjectT, EnvT>::type type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+template <
+ typename MetaT, typename BinaryT, typename LeftT,
+ typename RightT, typename EnvT
+>
+struct parser_traversal_binary_result {
+
+ BOOST_STATIC_CONSTANT(int,
+ thisnum = (node_count<BinaryT>::value + EnvT::lastleft-1));
+ BOOST_STATIC_CONSTANT(int,
+ leftnum = (node_count<LeftT>::value + EnvT::lastleft-1));
+ BOOST_STATIC_CONSTANT(int,
+ leafnum = (leaf_count<LeftT>::value + EnvT::index));
+
+ typedef parser_traversal_binary_result self_t;
+
+ // left traversal environment and resulting parser type
+ typedef traverse_post_order_env<
+ (EnvT::level+1), (self_t::leftnum), (EnvT::index), (EnvT::lastleft)
+ > left_sub_env_t;
+ typedef typename traverse_post_order_return<
+ MetaT, LeftT, left_sub_env_t
+ >::type
+ left_t;
+
+ // right traversal environment and resulting parser type
+ typedef traverse_post_order_env<
+ (EnvT::level+1), (self_t::thisnum-1), (self_t::leafnum), (self_t::leftnum+1)
+ > right_sub_env_t;
+ typedef typename traverse_post_order_return<
+ MetaT, RightT, right_sub_env_t
+ >::type
+ right_t;
+
+ typedef typename MetaT::template binary_result<
+ BinaryT, left_t, right_t, EnvT
+ >::type
+ type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+namespace impl
+{
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // Meta functions, which dispatch the calculation of the return type of
+ // of the post_order traverse function to the result template of the
+ // corresponding parser_category based metafunction template.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+
+ template <typename CategoryT>
+ struct traverse_post_order_return_category;
+
+ template <>
+ struct traverse_post_order_return_category<plain_parser_category> {
+
+ template <typename MetaT, typename ParserT, typename EnvT>
+ struct result {
+
+ typedef typename parser_traversal_plain_result<
+ MetaT, ParserT, EnvT
+ >::type
+ type;
+ };
+ };
+
+ template <>
+ struct traverse_post_order_return_category<unary_parser_category> {
+
+ template <typename MetaT, typename ParserT, typename EnvT>
+ struct result {
+
+ typedef typename parser_traversal_unary_result<
+ MetaT, ParserT, typename ParserT::subject_t, EnvT
+ >::type
+ type;
+ };
+ };
+
+ template <>
+ struct traverse_post_order_return_category<action_parser_category> {
+
+ template <typename MetaT, typename ParserT, typename EnvT>
+ struct result {
+
+ typedef typename parser_traversal_action_result<
+ MetaT, ParserT, typename ParserT::subject_t, EnvT
+ >::type
+ type;
+ };
+ };
+
+ template <>
+ struct traverse_post_order_return_category<binary_parser_category> {
+
+ template <typename MetaT, typename ParserT, typename EnvT>
+ struct result {
+
+ typedef typename parser_traversal_binary_result<
+ MetaT, ParserT, typename ParserT::left_t,
+ typename ParserT::right_t, EnvT
+ >::type
+ type;
+ };
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // Post-order parser traversal
+ //
+ // The following templates contain the parser_category based code for
+ //
+ // - calculating the type of the resulting parser, which is to be
+ // returned from a level of traversal
+ // - traversing down the composite parser structure, this traversal
+ // returnes a new parser object
+ //
+ // Both tasks are delegated to the MetaT metafunction supplied by the
+ // user.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+
+ template <typename CategoryT>
+ struct traverse_post_order;
+
+ template <>
+ struct traverse_post_order<plain_parser_category> {
+
+ template <typename MetaT, typename ParserT, typename EnvT>
+ struct result {
+
+ typedef
+ typename parser_traversal_plain_result<MetaT, ParserT, EnvT>::type
+ type;
+ };
+
+ template <typename MetaT, typename ParserT, typename EnvT>
+ static
+ typename parser_traversal_plain_result<MetaT, ParserT, EnvT>::type
+ generate(MetaT const &meta_, ParserT const &parser_, EnvT const &env)
+ {
+ return meta_.generate_plain(parser_, env);
+ }
+ };
+
+ template <>
+ struct traverse_post_order<unary_parser_category> {
+
+ template <
+ typename MetaT, typename ParserT, typename SubjectT, typename EnvT
+ >
+ struct result {
+
+ typedef typename parser_traversal_unary_result<
+ MetaT, ParserT, SubjectT, EnvT
+ >::type
+ type;
+ };
+
+ template <typename MetaT, typename ParserT, typename EnvT>
+ static
+ typename parser_traversal_unary_result<
+ MetaT, ParserT,
+ typename traverse_post_order_return<
+ MetaT, typename ParserT::subject_t, EnvT
+ >::type,
+ EnvT
+ >::type
+ generate(MetaT const &meta_, ParserT const &unary_, EnvT const &env)
+ {
+ typedef typename ParserT::subject_t subject_t;
+ typedef typename subject_t::parser_category_t subject_category_t;
+
+ return meta_.generate_unary(
+ unary_,
+ traverse_post_order<subject_category_t>::generate(meta_,
+ unary_.subject(),
+ traverse_post_order_env<
+ EnvT::level+1, EnvT::node-1, EnvT::index, EnvT::lastleft
+ >()
+ ),
+ env
+ );
+ }
+ };
+
+ template <>
+ struct traverse_post_order<action_parser_category> {
+
+ template <
+ typename MetaT, typename ParserT, typename SubjectT, typename EnvT
+ >
+ struct result {
+
+ typedef typename parser_traversal_action_result<
+ MetaT, ParserT, SubjectT, EnvT
+ >::type
+ type;
+ };
+
+ template <typename MetaT, typename ParserT, typename EnvT>
+ static
+ typename parser_traversal_action_result<
+ MetaT, ParserT,
+ typename traverse_post_order_return<
+ MetaT, typename ParserT::subject_t, EnvT
+ >::type,
+ EnvT
+ >::type
+ generate(MetaT const &meta_, ParserT const &action_, EnvT const &env)
+ {
+ typedef typename ParserT::subject_t subject_t;
+ typedef typename subject_t::parser_category_t subject_category_t;
+
+ return meta_.generate_action(
+ action_,
+ traverse_post_order<subject_category_t>::generate(meta_,
+ action_.subject(),
+ traverse_post_order_env<
+ EnvT::level+1, EnvT::node-1, EnvT::index, EnvT::lastleft
+ >()
+ ),
+ env
+ );
+ }
+ };
+
+ template <>
+ struct traverse_post_order<binary_parser_category> {
+
+ template <
+ typename MetaT, typename ParserT, typename LeftT,
+ typename RightT, typename EnvT
+ >
+ struct result {
+
+ typedef typename parser_traversal_binary_result<
+ MetaT, ParserT, LeftT, RightT, EnvT
+ >::type
+ type;
+ };
+
+ template <typename MetaT, typename ParserT, typename EnvT>
+ static
+ typename parser_traversal_binary_result<
+ MetaT, ParserT,
+ typename traverse_post_order_return<
+ MetaT, typename ParserT::left_t, EnvT
+ >::type,
+ typename traverse_post_order_return<
+ MetaT, typename ParserT::right_t, EnvT
+ >::type,
+ EnvT
+ >::type
+ generate(MetaT const &meta_, ParserT const &binary_, EnvT const& /*env*/)
+ {
+ typedef typename ParserT::left_t left_t;
+ typedef typename ParserT::right_t right_t;
+ typedef typename left_t::parser_category_t left_category_t;
+ typedef typename right_t::parser_category_t right_category_t;
+
+ enum {
+ leftnum = (node_count<left_t>::value + EnvT::lastleft-1),
+ thisnum = (node_count<ParserT>::value + EnvT::lastleft-1),
+ rightnum = (thisnum-1),
+ leafnum = (leaf_count<left_t>::value + EnvT::index)
+ };
+
+ return meta_.generate_binary(
+ binary_,
+ traverse_post_order<left_category_t>::generate(
+ meta_, binary_.left(),
+ traverse_post_order_env<
+ EnvT::level+1, leftnum, EnvT::index, EnvT::lastleft
+ >()
+ ),
+ traverse_post_order<right_category_t>::generate(
+ meta_, binary_.right(),
+ traverse_post_order_env<
+ EnvT::level+1, rightnum, leafnum, leftnum+1
+ >()
+ ),
+ traverse_post_order_env<
+ EnvT::level, thisnum, EnvT::index, EnvT::lastleft
+ >()
+ );
+ }
+ };
+
+} // namespace impl
+
+///////////////////////////////////////////////////////////////////////////////
+}} // namespace boost::spirit
+
+#endif // !defined(BOOST_SPIRIT_TRAVERSE_IPP)
diff --git a/boost/boost/spirit/meta/parser_traits.hpp b/boost/boost/spirit/meta/parser_traits.hpp
new file mode 100644
index 00000000000..3a967415e91
--- /dev/null
+++ b/boost/boost/spirit/meta/parser_traits.hpp
@@ -0,0 +1,316 @@
+/*=============================================================================
+ Copyright (c) 2002-2003 Joel de Guzman
+ Copyright (c) 2002-2003 Hartmut Kaiser
+ Copyright (c) 2003 Martin Wille
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_PARSER_TRAITS_HPP)
+#define BOOST_SPIRIT_PARSER_TRAITS_HPP
+
+#include <boost/type_traits/is_base_and_derived.hpp>
+#include <boost/static_assert.hpp>
+
+#include <boost/spirit/core/parser.hpp>
+#include <boost/spirit/meta/impl/parser_traits.ipp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Parser traits templates
+//
+// Used to determine the type and several other characteristics of a given
+// parser type.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// The is_parser traits template can be used to tell wether a given
+// class is a parser.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename T>
+struct is_parser
+{
+ BOOST_STATIC_CONSTANT(bool, value =
+ (::boost::is_base_and_derived<parser<T>, T>::value));
+
+// [JDG 2/3/03] simplified implementation by
+// using boost::is_base_and_derived
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// The is_unary_composite traits template can be used to tell if a given
+// parser is a unary parser as for instance kleene_star or optional.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename UnaryT>
+struct is_unary_composite {
+
+ BOOST_STATIC_CONSTANT(bool, value = (::boost::is_convertible<
+ typename UnaryT::parser_category_t, unary_parser_category>::value));
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// The is_acction_parser traits template can be used to tell if a given
+// parser is a action parser, i.e. it is a composite consisting of a
+// auxilliary parser and an attached semantic action.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ActionT>
+struct is_action_parser {
+
+ BOOST_STATIC_CONSTANT(bool, value = (::boost::is_convertible<
+ typename ActionT::parser_category_t, action_parser_category>::value));
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// The is_binary_composite traits template can be used to tell if a given
+// parser is a binary parser as for instance sequence or difference.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename BinaryT>
+struct is_binary_composite {
+
+ BOOST_STATIC_CONSTANT(bool, value = (::boost::is_convertible<
+ typename BinaryT::parser_category_t, binary_parser_category>::value));
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// The is_composite_parser traits template can be used to tell if a given
+// parser is a unary or a binary parser composite type.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename CompositeT>
+struct is_composite_parser {
+
+ BOOST_STATIC_CONSTANT(bool, value = (
+ ::boost::spirit::is_unary_composite<CompositeT>::value ||
+ ::boost::spirit::is_binary_composite<CompositeT>::value));
+};
+
+///////////////////////////////////////////////////////////////////////////////
+template <typename ParserT>
+struct is_alternative {
+
+ BOOST_STATIC_CONSTANT(bool, value = (
+ ::boost::spirit::impl::parser_type_traits<ParserT>::is_alternative));
+};
+
+template <typename ParserT>
+struct is_sequence {
+
+ BOOST_STATIC_CONSTANT(bool, value = (
+ ::boost::spirit::impl::parser_type_traits<ParserT>::is_sequence));
+};
+
+template <typename ParserT>
+struct is_sequential_or {
+
+ BOOST_STATIC_CONSTANT(bool, value = (
+ ::boost::spirit::impl::parser_type_traits<ParserT>::is_sequential_or));
+};
+
+template <typename ParserT>
+struct is_intersection {
+
+ BOOST_STATIC_CONSTANT(bool, value = (
+ ::boost::spirit::impl::parser_type_traits<ParserT>::is_intersection));
+};
+
+template <typename ParserT>
+struct is_difference {
+
+ BOOST_STATIC_CONSTANT(bool, value = (
+ ::boost::spirit::impl::parser_type_traits<ParserT>::is_difference));
+};
+
+template <typename ParserT>
+struct is_exclusive_or {
+
+ BOOST_STATIC_CONSTANT(bool, value = (
+ ::boost::spirit::impl::parser_type_traits<ParserT>::is_exclusive_or));
+};
+
+template <typename ParserT>
+struct is_optional {
+
+ BOOST_STATIC_CONSTANT(bool, value = (
+ ::boost::spirit::impl::parser_type_traits<ParserT>::is_optional));
+};
+
+template <typename ParserT>
+struct is_kleene_star {
+
+ BOOST_STATIC_CONSTANT(bool, value = (
+ ::boost::spirit::impl::parser_type_traits<ParserT>::is_kleene_star));
+};
+
+template <typename ParserT>
+struct is_positive {
+
+ BOOST_STATIC_CONSTANT(bool, value = (
+ ::boost::spirit::impl::parser_type_traits<ParserT>::is_positive));
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Parser extraction templates
+//
+///////////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// The unary_subject template can be used to return the type of the
+// parser used as the subject of an unary parser.
+// If the parser under inspection is not an unary type parser the compilation
+// will fail.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename UnaryT>
+struct unary_subject {
+
+ BOOST_STATIC_ASSERT(::boost::spirit::is_unary_composite<UnaryT>::value);
+ typedef typename UnaryT::subject_t type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// The get_unary_subject template function returns the parser object, which
+// is used as the subject of an unary parser.
+// If the parser under inspection is not an unary type parser the compilation
+// will fail.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename UnaryT>
+inline typename unary_subject<UnaryT>::type const &
+get_unary_subject(UnaryT const &unary_)
+{
+ BOOST_STATIC_ASSERT(::boost::spirit::is_unary_composite<UnaryT>::value);
+ return unary_.subject();
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// The binary_left_subject and binary_right_subject templates can be used to
+// return the types of the parsers used as the left and right subject of an
+// binary parser.
+// If the parser under inspection is not a binary type parser the compilation
+// will fail.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename BinaryT>
+struct binary_left_subject {
+
+ BOOST_STATIC_ASSERT(::boost::spirit::is_binary_composite<BinaryT>::value);
+ typedef typename BinaryT::left_t type;
+};
+
+template <typename BinaryT>
+struct binary_right_subject {
+
+ BOOST_STATIC_ASSERT(::boost::spirit::is_binary_composite<BinaryT>::value);
+ typedef typename BinaryT::right_t type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// The get_binary_left_subject and get_binary_right_subject template functions
+// return the parser object, which is used as the left or right subject of a
+// binary parser.
+// If the parser under inspection is not a binary type parser the compilation
+// will fail.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename BinaryT>
+inline typename binary_left_subject<BinaryT>::type const &
+get_binary_left_subject(BinaryT const &binary_)
+{
+ BOOST_STATIC_ASSERT(::boost::spirit::is_binary_composite<BinaryT>::value);
+ return binary_.left();
+}
+
+template <typename BinaryT>
+inline typename binary_right_subject<BinaryT>::type const &
+get_binary_right_subject(BinaryT const &binary_)
+{
+ BOOST_STATIC_ASSERT(::boost::spirit::is_binary_composite<BinaryT>::value);
+ return binary_.right();
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// The action_subject template can be used to return the type of the
+// parser used as the subject of an action parser.
+// If the parser under inspection is not an action type parser the compilation
+// will fail.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ActionT>
+struct action_subject {
+
+ BOOST_STATIC_ASSERT(::boost::spirit::is_action_parser<ActionT>::value);
+ typedef typename ActionT::subject_t type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// The get_action_subject template function returns the parser object, which
+// is used as the subject of an action parser.
+// If the parser under inspection is not an action type parser the compilation
+// will fail.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ActionT>
+inline typename action_subject<ActionT>::type const &
+get_action_subject(ActionT const &action_)
+{
+ BOOST_STATIC_ASSERT(::boost::spirit::is_action_parser<ActionT>::value);
+ return action_.subject();
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// The semantic_action template can be used to return the type of the
+// attached semantic action of an action parser.
+// If the parser under inspection is not an action type parser the compilation
+// will fail.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ActionT>
+struct semantic_action {
+
+ BOOST_STATIC_ASSERT(::boost::spirit::is_action_parser<ActionT>::value);
+ typedef typename ActionT::predicate_t type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// The get_semantic_action template function returns the attached semantic
+// action of an action parser.
+// If the parser under inspection is not an action type parser the compilation
+// will fail.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ActionT>
+inline typename semantic_action<ActionT>::type const &
+get_semantic_action(ActionT const &action_)
+{
+ BOOST_STATIC_ASSERT(::boost::spirit::is_action_parser<ActionT>::value);
+ return action_.predicate();
+}
+
+///////////////////////////////////////////////////////////////////////////////
+}} // namespace boost::spirit
+
+#endif // !defined(BOOST_SPIRIT_PARSER_TRAITS_HPP)
diff --git a/boost/boost/spirit/meta/refactoring.hpp b/boost/boost/spirit/meta/refactoring.hpp
new file mode 100644
index 00000000000..6e92683b70d
--- /dev/null
+++ b/boost/boost/spirit/meta/refactoring.hpp
@@ -0,0 +1,274 @@
+/*=============================================================================
+ Copyright (c) 2002-2003 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_REFACTORING_HPP
+#define BOOST_SPIRIT_REFACTORING_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/static_assert.hpp>
+#include <boost/spirit/meta/as_parser.hpp>
+#include <boost/spirit/core/parser.hpp>
+#include <boost/spirit/core/composite/composite.hpp>
+#include <boost/spirit/meta/impl/refactoring.ipp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// refactor_unary_parser class
+//
+// This helper template allows to attach an unary operation to a newly
+// constructed parser, which combines the subject of the left operand of
+// the original given parser (BinaryT) with the right operand of the
+// original binary parser through the original binary operation and
+// rewraps the resulting parser with the original unary operator.
+//
+// For instance given the parser:
+// *some_parser - another_parser
+//
+// will be refactored to:
+// *(some_parser - another_parser)
+//
+// If the parser to refactor is not a unary parser, no refactoring is done
+// at all.
+//
+// The original parser should be a binary_parser_category parser,
+// else the compilation will fail
+//
+///////////////////////////////////////////////////////////////////////////////
+
+template <typename NestedT = non_nested_refactoring>
+class refactor_unary_gen;
+
+template <typename BinaryT, typename NestedT = non_nested_refactoring>
+class refactor_unary_parser :
+ public parser<refactor_unary_parser<BinaryT, NestedT> > {
+
+public:
+ // the parser to refactor has to be at least a binary_parser_category
+ // parser
+ BOOST_STATIC_ASSERT((
+ boost::is_convertible<typename BinaryT::parser_category_t,
+ binary_parser_category>::value
+ ));
+
+ refactor_unary_parser(BinaryT const& binary_, NestedT const& nested_)
+ : binary(binary_), nested(nested_) {}
+
+ typedef refactor_unary_parser<BinaryT, NestedT> self_t;
+ typedef refactor_unary_gen<NestedT> parser_generator_t;
+ typedef typename BinaryT::left_t::parser_category_t parser_category_t;
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ return impl::refactor_unary_type<NestedT>::
+ parse(*this, scan, binary, nested);
+ }
+
+private:
+ typename as_parser<BinaryT>::type::embed_t binary;
+ typename NestedT::embed_t nested;
+};
+
+//////////////////////////////////
+template <typename NestedT>
+class refactor_unary_gen {
+
+public:
+ typedef refactor_unary_gen<NestedT> embed_t;
+
+ refactor_unary_gen(NestedT const& nested_ = non_nested_refactoring())
+ : nested(nested_) {}
+
+ template <typename ParserT>
+ refactor_unary_parser<ParserT, NestedT>
+ operator[](parser<ParserT> const& subject) const
+ {
+ return refactor_unary_parser<ParserT, NestedT>
+ (subject.derived(), nested);
+ }
+
+private:
+ typename NestedT::embed_t nested;
+};
+
+const refactor_unary_gen<> refactor_unary_d = refactor_unary_gen<>();
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// refactor_action_parser class
+//
+// This helper template allows to attach an action taken from the left
+// operand of the given binary parser to a newly constructed parser,
+// which combines the subject of the left operand of the original binary
+// parser with the right operand of the original binary parser by means of
+// the original binary operator parser.
+//
+// For instance the parser:
+// some_parser[some_attached_functor] - another_parser
+//
+// will be refactored to:
+// (some_parser - another_parser)[some_attached_functor]
+//
+// If the left operand to refactor is not an action parser, no refactoring
+// is done at all.
+//
+// The original parser should be a binary_parser_category parser,
+// else the compilation will fail
+//
+///////////////////////////////////////////////////////////////////////////////
+
+template <typename NestedT = non_nested_refactoring>
+class refactor_action_gen;
+
+template <typename BinaryT, typename NestedT = non_nested_refactoring>
+class refactor_action_parser :
+ public parser<refactor_action_parser<BinaryT, NestedT> > {
+
+public:
+ // the parser to refactor has to be at least a binary_parser_category
+ // parser
+ BOOST_STATIC_ASSERT((
+ boost::is_convertible<typename BinaryT::parser_category_t,
+ binary_parser_category>::value
+ ));
+
+ refactor_action_parser(BinaryT const& binary_, NestedT const& nested_)
+ : binary(binary_), nested(nested_) {}
+
+ typedef refactor_action_parser<BinaryT, NestedT> self_t;
+ typedef refactor_action_gen<NestedT> parser_generator_t;
+ typedef typename BinaryT::left_t::parser_category_t parser_category_t;
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ return impl::refactor_action_type<NestedT>::
+ parse(*this, scan, binary, nested);
+ }
+
+private:
+ typename as_parser<BinaryT>::type::embed_t binary;
+ typename NestedT::embed_t nested;
+};
+
+//////////////////////////////////
+template <typename NestedT>
+class refactor_action_gen {
+
+public:
+ typedef refactor_action_gen<NestedT> embed_t;
+
+ refactor_action_gen(NestedT const& nested_ = non_nested_refactoring())
+ : nested(nested_) {}
+
+ template <typename ParserT>
+ refactor_action_parser<ParserT, NestedT>
+ operator[](parser<ParserT> const& subject) const
+ {
+ return refactor_action_parser<ParserT, NestedT>
+ (subject.derived(), nested);
+ }
+
+private:
+ typename NestedT::embed_t nested;
+};
+
+const refactor_action_gen<> refactor_action_d = refactor_action_gen<>();
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// attach_action_parser class
+//
+// This helper template allows to attach an action given separately
+// to to all parsers, out of which the given parser is constructed and
+// reconstructs a new parser having the same structure.
+//
+// For instance the parser:
+// (some_parser >> another_parser)[some_attached_functor]
+//
+// will be refactored to:
+// some_parser[some_attached_functor]
+// >> another_parser[some_attached_functor]
+//
+// The original parser should be a action_parser_category parser,
+// else the compilation will fail
+//
+// If the parser, to which the action is attached is not an binary parser,
+// no refactoring is done at all.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+template <typename NestedT = non_nested_refactoring>
+class attach_action_gen;
+
+template <typename ActionT, typename NestedT = non_nested_refactoring>
+class attach_action_parser :
+ public parser<attach_action_parser<ActionT, NestedT> > {
+
+public:
+ // the parser to refactor has to be at least a action_parser_category
+ // parser
+ BOOST_STATIC_ASSERT((
+ boost::is_convertible<typename ActionT::parser_category_t,
+ action_parser_category>::value
+ ));
+
+ attach_action_parser(ActionT const& actor_, NestedT const& nested_)
+ : actor(actor_), nested(nested_) {}
+
+ typedef attach_action_parser<ActionT, NestedT> self_t;
+ typedef attach_action_gen<NestedT> parser_generator_t;
+ typedef typename ActionT::parser_category_t parser_category_t;
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ return impl::attach_action_type<NestedT>::
+ parse(*this, scan, actor, nested);
+ }
+
+private:
+ typename as_parser<ActionT>::type::embed_t actor;
+ typename NestedT::embed_t nested;
+};
+
+//////////////////////////////////
+template <typename NestedT>
+class attach_action_gen {
+
+public:
+ typedef attach_action_gen<NestedT> embed_t;
+
+ attach_action_gen(NestedT const& nested_ = non_nested_refactoring())
+ : nested(nested_) {}
+
+ template <typename ParserT, typename ActionT>
+ attach_action_parser<action<ParserT, ActionT>, NestedT>
+ operator[](action<ParserT, ActionT> const& actor) const
+ {
+ return attach_action_parser<action<ParserT, ActionT>, NestedT>
+ (actor, nested);
+ }
+
+private:
+ typename NestedT::embed_t nested;
+};
+
+const attach_action_gen<> attach_action_d = attach_action_gen<>();
+
+///////////////////////////////////////////////////////////////////////////////
+}} // namespace boost::spirit
+
+#endif // BOOST_SPIRIT_REFACTORING_HPP
+
diff --git a/boost/boost/spirit/meta/traverse.hpp b/boost/boost/spirit/meta/traverse.hpp
new file mode 100644
index 00000000000..0151412c1c1
--- /dev/null
+++ b/boost/boost/spirit/meta/traverse.hpp
@@ -0,0 +1,218 @@
+/*=============================================================================
+ Copyright (c) 2002-2003 Joel de Guzman
+ Copyright (c) 2002-2003 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_TRAVERSE_HPP)
+#define BOOST_SPIRIT_TRAVERSE_HPP
+
+#include <boost/spirit/meta/impl/traverse.ipp>
+
+namespace boost { namespace spirit
+{
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // Post-order traversal of auxilliary parsers.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ struct post_order
+ {
+ // Return the parser type, which is generated as the result of the
+ // traverse function below.
+
+ template <typename MetaT, typename ParserT>
+ struct result
+ {
+ typedef typename
+ traverse_post_order_return<
+ MetaT
+ , ParserT
+ , traverse_post_order_env<0, 0, 0, 0>
+ >::type
+ type;
+ };
+
+ // Traverse a given parser and refactor it with the help of the given
+ // MetaT metafunction template.
+
+ template <typename MetaT, typename ParserT>
+ static typename result<MetaT, ParserT>::type
+ traverse(MetaT const &meta_, ParserT const &parser_)
+ {
+ typedef typename ParserT::parser_category_t parser_category_t;
+ return impl::traverse_post_order<parser_category_t>::generate(
+ meta_, parser_, traverse_post_order_env<0, 0, 0, 0>());
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // Transform policies
+ //
+ // The following policy classes could be used to assemble some new
+ // transformation metafunction which uses identity transformations
+ // for some parser_category type parsers.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+
+ ///////////////////////////////////////////////////////////////////////////
+ // transform plain parsers
+ template <typename TransformT>
+ struct plain_identity_policy
+ {
+ template <typename ParserT, typename EnvT>
+ struct plain_result
+ {
+ // plain parsers should be embedded and returned correctly
+ typedef typename ParserT::embed_t type;
+ };
+
+ template <typename ParserT, typename EnvT>
+ typename parser_traversal_plain_result<TransformT, ParserT, EnvT>::type
+ generate_plain(ParserT const &parser_, EnvT const& /*env*/) const
+ {
+ return parser_;
+ }
+ };
+
+ //////////////////////////////////
+ // transform unary parsers
+ template <typename UnaryT, typename SubjectT>
+ struct unary_identity_policy_return
+ {
+ typedef typename UnaryT::parser_generator_t parser_generator_t;
+ typedef typename parser_generator_t
+ ::template result<SubjectT>::type type;
+ };
+
+ template <typename TransformT>
+ struct unary_identity_policy
+ {
+ template <typename UnaryT, typename SubjectT, typename EnvT>
+ struct unary_result
+ {
+ typedef
+ typename unary_identity_policy_return<UnaryT, SubjectT>::type
+ type;
+ };
+
+ template <typename UnaryT, typename SubjectT, typename EnvT>
+ typename parser_traversal_unary_result<
+ TransformT, UnaryT, SubjectT, EnvT>::type
+ generate_unary(
+ UnaryT const &, SubjectT const &subject_, EnvT const& /*env*/) const
+ {
+ typedef typename UnaryT::parser_generator_t parser_generator_t;
+ return parser_generator_t::template generate<SubjectT>(subject_);
+ }
+ };
+
+ //////////////////////////////////
+ // transform action parsers
+ template <typename TransformT>
+ struct action_identity_policy
+ {
+ template <typename ActionT, typename SubjectT, typename EnvT>
+ struct action_result
+ {
+ typedef action<SubjectT, typename ActionT::predicate_t> type;
+ };
+
+ template <typename ActionT, typename SubjectT, typename EnvT>
+ typename parser_traversal_action_result<
+ TransformT, ActionT, SubjectT, EnvT
+ >::type
+ generate_action(ActionT const &action_, SubjectT const &subject_,
+ EnvT const& /*env*/) const
+ {
+ return subject_[action_.predicate()];
+ }
+ };
+
+ //////////////////////////////////
+ // transform binary parsers
+ template <typename BinaryT, typename LeftT, typename RightT>
+ struct binary_identity_policy_return
+ {
+ typedef typename BinaryT::parser_generator_t parser_generator_t;
+ typedef typename parser_generator_t
+ ::template result<LeftT, RightT>::type type;
+ };
+
+ template <typename TransformT>
+ struct binary_identity_policy
+ {
+ template <typename BinaryT, typename LeftT
+ , typename RightT, typename EnvT>
+ struct binary_result {
+
+ typedef typename
+ binary_identity_policy_return<BinaryT, LeftT, RightT>::type
+ type;
+ };
+
+ template <typename BinaryT, typename LeftT
+ , typename RightT, typename EnvT>
+ typename parser_traversal_binary_result<
+ TransformT, BinaryT, LeftT, RightT, EnvT
+ >::type
+ generate_binary(
+ BinaryT const &, LeftT const& left_
+ , RightT const& right_, EnvT const& /*env*/) const
+ {
+ typedef typename BinaryT::parser_generator_t parser_generator_t;
+ return parser_generator_t::
+ template generate<LeftT, RightT>(left_, right_);
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // transform_policies template
+ //
+ // The transform_policies template metafunction could serve as a
+ // base class for new metafunctions to be passed to the traverse meta
+ // template (see above), where only minimal parts have to be
+ // overwritten.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+
+ template <
+ typename TransformT,
+ typename PlainPolicyT = plain_identity_policy<TransformT>,
+ typename UnaryPolicyT = unary_identity_policy<TransformT>,
+ typename ActionPolicyT = action_identity_policy<TransformT>,
+ typename BinaryPolicyT = binary_identity_policy<TransformT>
+ >
+ struct transform_policies :
+ public PlainPolicyT,
+ public UnaryPolicyT,
+ public ActionPolicyT,
+ public BinaryPolicyT
+ {
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // Identity transformation
+ //
+ // The identity_transform metafunction supplied to the traverse
+ // template will generate a new parser, which will be exactly
+ // identical to the parser given as the parameter to the traverse
+ // metafunction. I.e. the following conceptual 'equation' will be
+ // always true:
+ //
+ // some_parser ==
+ // post_order::traverse(identity_transform(), some_parser)
+ //
+ ///////////////////////////////////////////////////////////////////////////
+
+ struct identity_transform : transform_policies<identity_transform> {};
+
+}} // namespace boost::spirit
+
+#endif // !defined(BOOST_SPIRIT_TRAVERSE_HPP)
diff --git a/boost/boost/spirit/phoenix.hpp b/boost/boost/spirit/phoenix.hpp
new file mode 100644
index 00000000000..f3655b2cb95
--- /dev/null
+++ b/boost/boost/spirit/phoenix.hpp
@@ -0,0 +1,26 @@
+/*=============================================================================
+ Phoenix V1.2.1
+ Copyright (c) 2001-2002 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_PHOENIX_HPP)
+#define BOOST_SPIRIT_PHOENIX_HPP
+
+#include <boost/spirit/phoenix/tuples.hpp>
+#include <boost/spirit/phoenix/tuple_helpers.hpp>
+#include <boost/spirit/phoenix/actor.hpp>
+#include <boost/spirit/phoenix/primitives.hpp>
+#include <boost/spirit/phoenix/composite.hpp>
+#include <boost/spirit/phoenix/functions.hpp>
+#include <boost/spirit/phoenix/operators.hpp>
+#include <boost/spirit/phoenix/special_ops.hpp>
+#include <boost/spirit/phoenix/statements.hpp>
+#include <boost/spirit/phoenix/binders.hpp>
+#include <boost/spirit/phoenix/closures.hpp>
+#include <boost/spirit/phoenix/casts.hpp>
+#include <boost/spirit/phoenix/new.hpp>
+
+#endif // !defined(BOOST_SPIRIT_PHOENIX_HPP)
diff --git a/boost/boost/spirit/phoenix/actor.hpp b/boost/boost/spirit/phoenix/actor.hpp
new file mode 100644
index 00000000000..9398bc1a66e
--- /dev/null
+++ b/boost/boost/spirit/phoenix/actor.hpp
@@ -0,0 +1,596 @@
+/*=============================================================================
+ Phoenix v1.2
+ Copyright (c) 2001-2002 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#ifndef PHOENIX_ACTOR_HPP
+#define PHOENIX_ACTOR_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/phoenix/tuples.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace phoenix {
+
+// These are forward declared here because we cannot include impl.hpp
+// or operators.hpp yet but the actor's assignment operator and index
+// operator are required to be members.
+
+//////////////////////////////////
+struct assign_op;
+struct index_op;
+
+//////////////////////////////////
+namespace impl {
+
+ template <typename OperationT, typename BaseT, typename B>
+ struct make_binary1;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// unpack_tuple class
+//
+// This class is used to unpack a supplied tuple such, that the members of
+// this tuple will be handled as if they would be supplied separately.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename TupleT>
+struct unpack_tuple : public TupleT {
+
+ typedef TupleT tuple_t;
+
+ unpack_tuple() {}
+ unpack_tuple(tuple_t const &tuple_) : TupleT(tuple_) {}
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// actor class
+//
+// This class is a protocol class for all actors. This class is
+// essentially an interface contract. The actor class does not
+// really know how how to act on anything but instead relies on the
+// template parameter BaseT (from which the actor will derive from)
+// to do the actual action.
+//
+// An actor is a functor that is capable of accepting arguments up
+// to a predefined maximum. It is up to the base class to do the
+// actual processing or possibly to limit the arity (no. of
+// arguments) passed in. Upon invocation of the functor through a
+// supplied operator(), the actor funnels the arguments passed in
+// by the client into a tuple and calls the base eval member
+// function.
+//
+// Schematically:
+//
+// arg0 ---------|
+// arg1 ---------|
+// arg2 ---------|---> tupled_args ---> base.eval
+// ... |
+// argN ---------|
+//
+// actor::operator()(arg0, arg1... argN)
+// ---> BaseT::eval(tupled_args);
+//
+// Actor base classes from which this class inherits from are
+// expected to have a corresponding member function eval compatible
+// with the conceptual Interface:
+//
+// template <typename TupleT>
+// actor_return_type
+// eval(TupleT const& args) const;
+//
+// where args are the actual arguments passed in by the client
+// funneled into a tuple (see tuple.hpp for details).
+//
+// The actor_return_type can be anything. Base classes are free to
+// return any type, even argument dependent types (types that are
+// deduced from the types of the arguments). After evaluating the
+// parameters and doing some computations or actions, the eval
+// member function concludes by returning something back to the
+// client. To do this, the forwarding function (the actor's
+// operator()) needs to know the return type of the eval member
+// function that it is calling. For this purpose, actor base
+// classes are required to provide a nested template class:
+//
+// template <typename TupleT>
+// struct result;
+//
+// This auxiliary class provides the result type information
+// returned by the eval member function of a base actor class. The
+// nested template class result should have a typedef 'type' that
+// reflects the return type of its member function eval. It is
+// basically a type computer that answers the question "given
+// arguments packed into a TupleT type, what will be the result
+// type of the eval member function of ActorT?". The template class
+// actor_result queries this to extract the return type of an
+// actor. Example:
+//
+// typedef typename actor_result<ActorT, TupleT>::type
+// actor_return_type;
+//
+// where actor_return_type is the actual type returned by ActorT's
+// eval member function given some arguments in a TupleT.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ActorT, typename TupleT>
+struct actor_result {
+
+ typedef typename ActorT::template result<TupleT>::type type;
+ typedef typename remove_reference<type>::type plain_type;
+};
+
+//////////////////////////////////
+template <typename BaseT>
+struct actor : public BaseT {
+
+ actor();
+ actor(BaseT const& base);
+
+ typename actor_result<BaseT, tuple<> >::type
+ operator()() const;
+
+ template <typename A>
+ typename actor_result<BaseT, tuple<A&> >::type
+ operator()(A& a) const;
+
+ template <typename A, typename B>
+ typename actor_result<BaseT, tuple<A&, B&> >::type
+ operator()(A& a, B& b) const;
+
+ template <typename A, typename B, typename C>
+ typename actor_result<BaseT, tuple<A&, B&, C&> >::type
+ operator()(A& a, B& b, C& c) const;
+
+#if PHOENIX_LIMIT > 3
+ template <typename A, typename B, typename C, typename D>
+ typename actor_result<BaseT, tuple<A&, B&, C&, D&> >::type
+ operator()(A& a, B& b, C& c, D& d) const;
+
+ template <typename A, typename B, typename C, typename D, typename E>
+ typename actor_result<BaseT, tuple<A&, B&, C&, D&, E&> >::type
+ operator()(A& a, B& b, C& c, D& d, E& e) const;
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F>
+ typename actor_result<BaseT, tuple<A&, B&, C&, D&, E&, F&> >::type
+ operator()(A& a, B& b, C& c, D& d, E& e, F& f) const;
+
+#if PHOENIX_LIMIT > 6
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G>
+ typename actor_result<BaseT, tuple<A&, B&, C&, D&, E&, F&, G&> >::type
+ operator()(A& a, B& b, C& c, D& d, E& e, F& f, G& g) const;
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H>
+ typename actor_result<BaseT,
+ tuple<A&, B&, C&, D&, E&, F&, G&, H&>
+ >::type
+ operator()(A& a, B& b, C& c, D& d, E& e, F& f, G& g, H& h) const;
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I>
+ typename actor_result<BaseT,
+ tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&>
+ >::type
+ operator()(A& a, B& b, C& c, D& d, E& e, F& f, G& g, H& h, I& i) const;
+
+#if PHOENIX_LIMIT > 9
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J>
+ typename actor_result<BaseT,
+ tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&, J&>
+ >::type
+ operator()(
+ A& a, B& b, C& c, D& d, E& e, F& f, G& g, H& h, I& i, J& j) const;
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K>
+ typename actor_result<BaseT,
+ tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&, J&, K&>
+ >::type
+ operator()(
+ A& a, B& b, C& c, D& d, E& e, F& f, G& g, H& h, I& i, J& j,
+ K& k) const;
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L>
+ typename actor_result<BaseT,
+ tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&, J&, K&, L&>
+ >::type
+ operator()(
+ A& a, B& b, C& c, D& d, E& e, F& f, G& g, H& h, I& i, J& j,
+ K& k, L& l) const;
+
+#if PHOENIX_LIMIT > 12
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L, typename M>
+ typename actor_result<BaseT,
+ tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&, J&, K&, L&, M&>
+ >::type
+ operator()(
+ A& a, B& b, C& c, D& d, E& e, F& f, G& g, H& h, I& i, J& j,
+ K& k, L& l, M& m) const;
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L, typename M, typename N>
+ typename actor_result<BaseT,
+ tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&, J&, K&, L&, M&, N&>
+ >::type
+ operator()(
+ A& a, B& b, C& c, D& d, E& e, F& f, G& g, H& h, I& i, J& j,
+ K& k, L& l, M& m, N& n) const;
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L, typename M, typename N, typename O>
+ typename actor_result<BaseT,
+ tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&, J&, K&, L&, M&, N&, O&>
+ >::type
+ operator()(
+ A& a, B& b, C& c, D& d, E& e, F& f, G& g, H& h, I& i, J& j,
+ K& k, L& l, M& m, N& n, O& o) const;
+
+#endif
+#endif
+#endif
+#endif
+
+ template <typename TupleT>
+ typename actor_result<BaseT, unpack_tuple<TupleT> >::type
+ operator()(unpack_tuple<TupleT> const &t) const;
+
+ template <typename B>
+ typename impl::make_binary1<assign_op, BaseT, B>::type
+ operator=(B const& b) const;
+
+ template <typename B>
+ typename impl::make_binary1<index_op, BaseT, B>::type
+ operator[](B const& b) const;
+};
+
+///////////////////////////////////////////////////////////////////////////
+//
+// as_actor
+//
+// as_actor is a meta-program that converts an arbitrary type into
+// an actor. All participants in the framework must be first-class
+// actors. This meta-program is used all throughout the framework
+// whenever an unknown type needs to be converted to an actor.
+// as_actor specializations are expected to have a typedef 'type'.
+// This is the destination actor type. A static member function
+// 'convert' converts an object to this target type.
+//
+// The meta-program does no conversion if the object to be
+// converted is already an actor.
+//
+///////////////////////////////////////////////////////////////////////////
+template <typename T>
+struct as_actor;
+
+//////////////////////////////////
+template <typename BaseT>
+struct as_actor<actor<BaseT> > {
+
+ typedef actor<BaseT> type;
+ static type convert(actor<BaseT> const& x) { return x; }
+};
+
+//////////////////////////////////
+template <>
+struct as_actor<nil_t> {
+
+ typedef nil_t type;
+ static nil_t convert(nil_t /*x*/)
+ { return nil_t(); }
+};
+
+//////////////////////////////////
+template <>
+struct as_actor<void> {
+
+ typedef void type;
+ // ERROR!!!
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// actor class implementation
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename BaseT>
+actor<BaseT>::actor()
+: BaseT() {}
+
+//////////////////////////////////
+template <typename BaseT>
+actor<BaseT>::actor(BaseT const& base)
+: BaseT(base) {}
+
+//////////////////////////////////
+template <typename BaseT>
+inline typename actor_result<BaseT, tuple<> >::type
+actor<BaseT>::operator()() const
+{
+ return BaseT::eval(tuple<>());
+}
+
+//////////////////////////////////
+template <typename BaseT>
+template <typename A>
+inline typename actor_result<BaseT, tuple<A&> >::type
+actor<BaseT>::operator()(A& a) const
+{
+ return BaseT::eval(tuple<A&>(a));
+}
+
+//////////////////////////////////
+template <typename BaseT>
+template <typename A, typename B>
+inline typename actor_result<BaseT, tuple<A&, B&> >::type
+actor<BaseT>::operator()(A& a, B& b) const
+{
+ return BaseT::eval(tuple<A&, B&>(a, b));
+}
+
+//////////////////////////////////
+template <typename BaseT>
+template <typename A, typename B, typename C>
+inline typename actor_result<BaseT, tuple<A&, B&, C&> >::type
+actor<BaseT>::operator()(A& a, B& b, C& c) const
+{
+ return BaseT::eval(tuple<A&, B&, C&>(a, b, c));
+}
+
+#if PHOENIX_LIMIT > 3
+//////////////////////////////////
+template <typename BaseT>
+template <typename A, typename B, typename C, typename D>
+inline typename actor_result<BaseT, tuple<A&, B&, C&, D&> >::type
+actor<BaseT>::operator()(A& a, B& b, C& c, D& d) const
+{
+ return BaseT::eval(tuple<A&, B&, C&, D&>(a, b, c, d));
+}
+
+//////////////////////////////////
+template <typename BaseT>
+template <typename A, typename B, typename C, typename D, typename E>
+inline typename actor_result<BaseT, tuple<A&, B&, C&, D&, E&> >::type
+actor<BaseT>::operator()(A& a, B& b, C& c, D& d, E& e) const
+{
+ return BaseT::eval(tuple<A&, B&, C&, D&, E&>(a, b, c, d, e));
+}
+
+//////////////////////////////////
+template <typename BaseT>
+template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F>
+inline typename actor_result<BaseT,
+ tuple<A&, B&, C&, D&, E&, F&>
+>::type
+actor<BaseT>::operator()(
+ A& a, B& b, C& c, D& d, E& e, F& f
+) const
+{
+ return BaseT::eval(
+ tuple<A&, B&, C&, D&, E&, F&>
+ (a, b, c, d, e, f)
+ );
+}
+
+#if PHOENIX_LIMIT > 6
+//////////////////////////////////
+template <typename BaseT>
+template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G>
+inline typename actor_result<BaseT,
+ tuple<A&, B&, C&, D&, E&, F&, G&>
+>::type
+actor<BaseT>::operator()(
+ A& a, B& b, C& c, D& d, E& e, F& f, G& g
+) const
+{
+ return BaseT::eval(
+ tuple<A&, B&, C&, D&, E&, F&, G&>
+ (a, b, c, d, e, f, g)
+ );
+}
+
+//////////////////////////////////
+template <typename BaseT>
+template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H>
+inline typename actor_result<BaseT,
+ tuple<A&, B&, C&, D&, E&, F&, G&, H&>
+>::type
+actor<BaseT>::operator()(
+ A& a, B& b, C& c, D& d, E& e, F& f, G& g, H& h
+) const
+{
+ return BaseT::eval(
+ tuple<A&, B&, C&, D&, E&, F&, G&, H&>
+ (a, b, c, d, e, f, g, h)
+ );
+}
+
+//////////////////////////////////
+template <typename BaseT>
+template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I>
+inline typename actor_result<BaseT,
+ tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&>
+>::type
+actor<BaseT>::operator()(
+ A& a, B& b, C& c, D& d, E& e, F& f, G& g, H& h, I& i
+) const
+{
+ return BaseT::eval(
+ tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&>
+ (a, b, c, d, e, f, g, h, i)
+ );
+}
+
+#if PHOENIX_LIMIT > 9
+//////////////////////////////////
+template <typename BaseT>
+template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J>
+inline typename actor_result<BaseT,
+ tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&, J&>
+>::type
+actor<BaseT>::operator()(
+ A& a, B& b, C& c, D& d, E& e, F& f, G& g, H& h, I& i, J& j
+) const
+{
+ return BaseT::eval(
+ tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&, J&>
+ (a, b, c, d, e, f, g, h, i, j)
+ );
+}
+
+//////////////////////////////////
+template <typename BaseT>
+template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K>
+inline typename actor_result<BaseT,
+ tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&, J&, K&>
+>::type
+actor<BaseT>::operator()(
+ A& a, B& b, C& c, D& d, E& e, F& f, G& g, H& h, I& i, J& j,
+ K& k
+) const
+{
+ return BaseT::eval(
+ tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&, J&, K&>
+ (a, b, c, d, e, f, g, h, i, j, k)
+ );
+}
+
+//////////////////////////////////
+template <typename BaseT>
+template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L>
+inline typename actor_result<BaseT,
+ tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&, J&, K&, L&>
+>::type
+actor<BaseT>::operator()(
+ A& a, B& b, C& c, D& d, E& e, F& f, G& g, H& h, I& i, J& j,
+ K& k, L& l
+) const
+{
+ return BaseT::eval(
+ tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&, J&, K&, L&>
+ (a, b, c, d, e, f, g, h, i, j, k, l)
+ );
+}
+
+#if PHOENIX_LIMIT > 12
+//////////////////////////////////
+template <typename BaseT>
+template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L, typename M>
+inline typename actor_result<BaseT,
+ tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&, J&, K&, L&, M&>
+>::type
+actor<BaseT>::operator()(
+ A& a, B& b, C& c, D& d, E& e, F& f, G& g, H& h, I& i, J& j,
+ K& k, L& l, M& m
+) const
+{
+ return BaseT::eval(
+ tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&, J&, K&, L&, M&>
+ (a, b, c, d, e, f, g, h, i, j, k, l, m)
+ );
+}
+
+//////////////////////////////////
+template <typename BaseT>
+template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L, typename M, typename N>
+inline typename actor_result<BaseT,
+ tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&, J&, K&, L&, M&, N&>
+>::type
+actor<BaseT>::operator()(
+ A& a, B& b, C& c, D& d, E& e, F& f, G& g, H& h, I& i, J& j,
+ K& k, L& l, M& m, N& n
+) const
+{
+ return BaseT::eval(
+ tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&, J&, K&, L&, M&, N&>
+ (a, b, c, d, e, f, g, h, i, j, k, l, m, n)
+ );
+}
+
+//////////////////////////////////
+template <typename BaseT>
+template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L, typename M, typename N, typename O>
+inline typename actor_result<BaseT,
+ tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&, J&, K&, L&, M&, N&, O&>
+>::type
+actor<BaseT>::operator()(
+ A& a, B& b, C& c, D& d, E& e, F& f, G& g, H& h, I& i, J& j,
+ K& k, L& l, M& m, N& n, O& o
+) const
+{
+ return BaseT::eval(
+ tuple<A&, B&, C&, D&, E&, F&, G&, H&, I&, J&, K&, L&, M&, N&, O&>
+ (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)
+ );
+}
+
+#endif
+#endif
+#endif
+#endif
+
+//////////////////////////////////
+template <typename BaseT>
+template <typename TupleT>
+typename actor_result<BaseT, unpack_tuple<TupleT> >::type
+actor<BaseT>::operator()(unpack_tuple<TupleT> const &t) const
+{
+ return BaseT::eval(t);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace phoenix
+
+#endif
diff --git a/boost/boost/spirit/phoenix/binders.hpp b/boost/boost/spirit/phoenix/binders.hpp
new file mode 100644
index 00000000000..4b2ca57e8f1
--- /dev/null
+++ b/boost/boost/spirit/phoenix/binders.hpp
@@ -0,0 +1,4067 @@
+/*=============================================================================
+ Phoenix v1.2
+ Copyright (c) 2001-2002 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#ifndef PHOENIX_BINDERS_HPP
+#define PHOENIX_BINDERS_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/phoenix/functions.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/mpl/if.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace phoenix {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Binders
+//
+// There are times when it is desireable to bind a simple functor,
+// function, member function or member variable for deferred
+// evaluation. This can be done through the binding facilities
+// provided below. There are template classes:
+//
+// 1) function_ptr ( function pointer binder )
+// 2) functor ( functor pointer binder )
+// 3) member_function_ptr ( member function pointer binder )
+// 4) member_var_ptr ( member variable pointer binder )
+//
+// These template classes are specialized lazy function classes for
+// functors, function pointers, member function pointers and member
+// variable pointers, respectively. These are subclasses of the
+// lazy-function class (see functions.hpp). Each of these has a
+// corresponding overloaded bind(x) function. Each bind(x) function
+// generates a suitable binder object.
+//
+// Example, given a function foo:
+//
+// void foo_(int n) { std::cout << n << std::endl; }
+//
+// Here's how the function foo is bound:
+//
+// bind(&foo_)
+//
+// This bind expression results to a lazy-function (see
+// functions.hpp) that is lazily evaluated. This bind expression is
+// also equivalent to:
+//
+// function_ptr<void, int> foo = &foo_;
+//
+// The template parameter of the function_ptr is the return and
+// argument types of actual signature of the function to be bound
+// read from left to right:
+//
+// void foo_(int); ---> function_ptr<void, int>
+//
+// Either bind(&foo_) and its equivalent foo can now be used in the
+// same way a lazy function (see functions.hpp) is used:
+//
+// bind(&foo_)(arg1)
+//
+// or
+//
+// foo(arg1)
+//
+// The latter, of course, being much easier to understand. This is
+// now a full-fledged lazy function that can finally be evaluated
+// by another function call invocation. A second function call will
+// invoke the actual foo function:
+//
+// int i = 4;
+// foo(arg1)(i);
+//
+// will print out "4".
+//
+// Binding functors and member functions can be done similarly.
+// Here's how to bind a functor (e.g. std::plus<int>):
+//
+// bind(std::plus<int>())
+//
+// or
+//
+// functor<std::plus<int> > plus;
+//
+// Again, these are full-fledged lazy functions. In this case,
+// unlike the first example, expect 2 arguments (std::plus<int>
+// needs two arguments lhs and rhs). Either or both of which can be
+// lazily bound:
+//
+// plus(arg1, arg2) // arg1 + arg2
+// plus(100, arg1) // 100 + arg1
+// plus(100, 200) // 300
+//
+// A bound member function takes in a pointer or reference to an
+// object as the first argument. For instance, given:
+//
+// struct xyz { void foo(int) const; };
+//
+// xyz's foo member function can be bound as:
+//
+// bind(&xyz::foo)
+//
+// or
+//
+// member_function_ptr<void, xyz, int> xyz_foo = &xyz::foo;
+//
+// The template parameter of the member_function_ptr is the return,
+// class and argument types of actual signature of the function to
+// be bound read from left to right:
+//
+// void xyz::foo_(int); ---> member_function_ptr<void, xyz, int>
+//
+// Take note that a member_function_ptr lazy-function expects the
+// first argument to be a pointer or reference to an object. Both
+// the object (reference or pointer) and the arguments can be
+// lazily bound. Examples:
+//
+// xyz obj;
+// xyz_foo(arg1, arg2) // arg1.foo(arg2)
+// xyz_foo(obj, arg1) // obj.foo(arg1)
+// xyz_foo(obj, 100) // obj.foo(100)
+//
+// Be reminded that var(obj) must be used to call non-const member
+// functions. For example, if xyz was declared as:
+//
+// struct xyz { void foo(int); };
+//
+// the pointer or reference to the object must also be non-const.
+// Lazily bound arguments are stored as const value by default (see
+// variable class in primitives.hpp).
+//
+// xyz_foo(var(obj), 100) // obj.foo(100)
+//
+// Finally, member variables can be bound much like member
+// functions. For instance, given:
+//
+// struct xyz { int v; };
+//
+// xyz::v can be bound as:
+//
+// bind(&xyz::v)
+// or
+//
+// member_var_ptr<int, xyz> xyz_v = &xyz::v;
+//
+// The template parameter of the member_var_ptr is the type of the
+// variable followed by the class:
+//
+// int xyz::v; ---> member_var_ptr<int, xyz>
+//
+// Just like the member_function_ptr, member_var_ptr also expects
+// the first argument to be a pointer or reference to an object.
+// Both the object (reference or pointer) and the arguments can be
+// lazily bound. Examples:
+//
+// xyz obj;
+// xyz_v(arg1) // arg1.v
+// xyz_v(obj) // obj.v
+//
+///////////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Functor binder
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename FuncT>
+struct functor_action : public FuncT {
+
+#if !defined(__BORLANDC__) && (!defined(__MWERKS__) || (__MWERKS__ > 0x3002))
+
+ template <
+ typename A = nil_t
+ , typename B = nil_t
+ , typename C = nil_t
+
+#if PHOENIX_LIMIT > 3
+ , typename D = nil_t
+ , typename E = nil_t
+ , typename F = nil_t
+
+#if PHOENIX_LIMIT > 6
+ , typename G = nil_t
+ , typename H = nil_t
+ , typename I = nil_t
+
+#if PHOENIX_LIMIT > 9
+ , typename J = nil_t
+ , typename K = nil_t
+ , typename L = nil_t
+
+#if PHOENIX_LIMIT > 12
+ , typename M = nil_t
+ , typename N = nil_t
+ , typename O = nil_t
+
+#endif
+#endif
+#endif
+#endif
+ >
+ struct result { typedef typename FuncT::result_type type; };
+#endif
+
+ functor_action(FuncT fptr_ = FuncT())
+ : FuncT(fptr_) {}
+};
+
+#if defined(__BORLANDC__) || (defined(__MWERKS__) && (__MWERKS__ <= 0x3002))
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// The following specializations are needed because Borland and CodeWarrior
+// does not accept default template arguments in nested template classes in
+// classes (i.e functor_action::result)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename FuncT, typename TupleT>
+struct composite0_result<functor_action<FuncT>, TupleT> {
+
+ typedef typename FuncT::result_type type;
+};
+
+//////////////////////////////////
+template <typename FuncT, typename TupleT,
+ typename A>
+struct composite1_result<functor_action<FuncT>, TupleT, A> {
+
+ typedef typename FuncT::result_type type;
+};
+
+//////////////////////////////////
+template <typename FuncT, typename TupleT,
+ typename A, typename B>
+struct composite2_result<functor_action<FuncT>, TupleT, A, B> {
+
+ typedef typename FuncT::result_type type;
+};
+
+//////////////////////////////////
+template <typename FuncT, typename TupleT,
+ typename A, typename B, typename C>
+struct composite3_result<functor_action<FuncT>, TupleT, A, B, C> {
+
+ typedef typename FuncT::result_type type;
+};
+
+#if PHOENIX_LIMIT > 3
+//////////////////////////////////
+template <typename FuncT, typename TupleT,
+ typename A, typename B, typename C, typename D>
+struct composite4_result<functor_action<FuncT>, TupleT,
+ A, B, C, D> {
+
+ typedef typename FuncT::result_type type;
+};
+
+//////////////////////////////////
+template <typename FuncT, typename TupleT,
+ typename A, typename B, typename C, typename D, typename E>
+struct composite5_result<functor_action<FuncT>, TupleT,
+ A, B, C, D, E> {
+
+ typedef typename FuncT::result_type type;
+};
+
+//////////////////////////////////
+template <typename FuncT, typename TupleT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F>
+struct composite6_result<functor_action<FuncT>, TupleT,
+ A, B, C, D, E, F> {
+
+ typedef typename FuncT::result_type type;
+};
+
+#if PHOENIX_LIMIT > 6
+//////////////////////////////////
+template <typename FuncT, typename TupleT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G>
+struct composite7_result<functor_action<FuncT>, TupleT,
+ A, B, C, D, E, F, G> {
+
+ typedef typename FuncT::result_type type;
+};
+
+//////////////////////////////////
+template <typename FuncT, typename TupleT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H>
+struct composite8_result<functor_action<FuncT>, TupleT,
+ A, B, C, D, E, F, G, H> {
+
+ typedef typename FuncT::result_type type;
+};
+
+//////////////////////////////////
+template <typename FuncT, typename TupleT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I>
+struct composite9_result<functor_action<FuncT>, TupleT,
+ A, B, C, D, E, F, G, H, I> {
+
+ typedef typename FuncT::result_type type;
+};
+
+#if PHOENIX_LIMIT > 9
+//////////////////////////////////
+template <typename FuncT, typename TupleT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J>
+struct composite10_result<functor_action<FuncT>, TupleT,
+ A, B, C, D, E, F, G, H, I, J> {
+
+ typedef typename FuncT::result_type type;
+};
+
+//////////////////////////////////
+template <typename FuncT, typename TupleT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K>
+struct composite11_result<functor_action<FuncT>, TupleT,
+ A, B, C, D, E, F, G, H, I, J, K> {
+
+ typedef typename FuncT::result_type type;
+};
+
+//////////////////////////////////
+template <typename FuncT, typename TupleT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L>
+struct composite12_result<functor_action<FuncT>, TupleT,
+ A, B, C, D, E, F, G, H, I, J, K, L> {
+
+ typedef typename FuncT::result_type type;
+};
+
+#if PHOENIX_LIMIT > 12
+//////////////////////////////////
+template <typename FuncT, typename TupleT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L, typename M>
+struct composite13_result<functor_action<FuncT>, TupleT,
+ A, B, C, D, E, F, G, H, I, J, K, L, M> {
+
+ typedef typename FuncT::result_type type;
+};
+
+//////////////////////////////////
+template <typename FuncT, typename TupleT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L, typename M, typename N>
+struct composite14_result<functor_action<FuncT>, TupleT,
+ A, B, C, D, E, F, G, H, I, J, K, L, M, N> {
+
+ typedef typename FuncT::result_type type;
+};
+
+//////////////////////////////////
+template <typename FuncT, typename TupleT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L, typename M, typename N, typename O>
+struct composite15_result<functor_action<FuncT>, TupleT,
+ A, B, C, D, E, F, G, H, I, J, K, L, M, N, O> {
+
+ typedef typename FuncT::result_type type;
+};
+
+#endif
+#endif
+#endif
+#endif
+#endif
+
+//////////////////////////////////
+template <typename FuncT>
+struct functor : public function<functor_action<FuncT> > {
+
+ functor(FuncT func)
+ : function<functor_action<FuncT> >(functor_action<FuncT>(func)) {};
+};
+
+//////////////////////////////////
+template <typename FuncT>
+inline functor<FuncT>
+bind(FuncT func)
+{
+ return functor<FuncT>(func);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Member variable pointer binder
+//
+///////////////////////////////////////////////////////////////////////////////
+namespace impl {
+
+ //////////////////////////////////
+ template <typename T>
+ struct as_ptr {
+
+ typedef T* pointer_type;
+
+ static T* get(T& ref)
+ { return &ref; }
+ };
+
+ //////////////////////////////////
+ template <typename T>
+ struct as_ptr<T*> {
+
+ typedef T* pointer_type;
+
+ static T* get(T* ptr)
+ { return ptr; }
+ };
+}
+
+//////////////////////////////////
+template <typename ActionT, typename ClassT>
+struct member_var_ptr_action_result {
+
+ typedef typename ActionT::template result<ClassT>::type type;
+};
+
+//////////////////////////////////
+template <typename T, typename ClassT>
+struct member_var_ptr_action {
+
+ typedef member_var_ptr_action<T, ClassT> self_t;
+
+ template <typename CT>
+ struct result {
+ typedef typename boost::mpl::if_<boost::is_const<CT>, T const&, T&
+ >::type type;
+ };
+
+ typedef T ClassT::*mem_var_ptr_t;
+
+ member_var_ptr_action(mem_var_ptr_t ptr_)
+ : ptr(ptr_) {}
+
+ template <typename CT>
+ typename member_var_ptr_action_result<self_t, CT>::type
+ operator()(CT& obj) const
+ { return impl::as_ptr<CT>::get(obj)->*ptr; }
+
+ mem_var_ptr_t ptr;
+};
+
+//////////////////////////////////
+template <typename T, typename ClassT>
+struct member_var_ptr
+: public function<member_var_ptr_action<T, ClassT> > {
+
+ member_var_ptr(T ClassT::*mp)
+ : function<member_var_ptr_action<T, ClassT> >
+ (member_var_ptr_action<T, ClassT>(mp)) {}
+};
+
+//////////////////////////////////
+template <typename T, typename ClassT>
+inline member_var_ptr<T, ClassT>
+bind(T ClassT::*mp)
+{
+ return member_var_ptr<T, ClassT>(mp);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Function pointer binder (main class)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+ typename RT
+ , typename A = nil_t
+ , typename B = nil_t
+ , typename C = nil_t
+
+#if PHOENIX_LIMIT > 3
+ , typename D = nil_t
+ , typename E = nil_t
+ , typename F = nil_t
+
+#if PHOENIX_LIMIT > 6
+ , typename G = nil_t
+ , typename H = nil_t
+ , typename I = nil_t
+
+#if PHOENIX_LIMIT > 9
+ , typename J = nil_t
+ , typename K = nil_t
+ , typename L = nil_t
+
+#if PHOENIX_LIMIT > 12
+ , typename M = nil_t
+ , typename N = nil_t
+ , typename O = nil_t
+
+#endif
+#endif
+#endif
+#endif
+
+ , typename NU = nil_t // Not used
+>
+struct function_ptr_action;
+
+//////////////////////////////////
+template <
+ typename RT
+ , typename A = nil_t
+ , typename B = nil_t
+ , typename C = nil_t
+
+#if PHOENIX_LIMIT > 3
+ , typename D = nil_t
+ , typename E = nil_t
+ , typename F = nil_t
+
+#if PHOENIX_LIMIT > 6
+ , typename G = nil_t
+ , typename H = nil_t
+ , typename I = nil_t
+
+#if PHOENIX_LIMIT > 9
+ , typename J = nil_t
+ , typename K = nil_t
+ , typename L = nil_t
+
+#if PHOENIX_LIMIT > 12
+ , typename M = nil_t
+ , typename N = nil_t
+ , typename O = nil_t
+
+#endif
+#endif
+#endif
+#endif
+>
+struct function_ptr
+: public function<function_ptr_action<RT
+ , A, B, C
+#if PHOENIX_LIMIT > 3
+ , D, E, F
+#if PHOENIX_LIMIT > 6
+ , G, H, I
+#if PHOENIX_LIMIT > 9
+ , J, K, L
+#if PHOENIX_LIMIT > 12
+ , M, N, O
+#endif
+#endif
+#endif
+#endif
+ > > {
+
+ typedef function_ptr_action<RT
+ , A, B, C
+#if PHOENIX_LIMIT > 3
+ , D, E, F
+#if PHOENIX_LIMIT > 6
+ , G, H, I
+#if PHOENIX_LIMIT > 9
+ , J, K, L
+#if PHOENIX_LIMIT > 12
+ , M, N, O
+#endif
+#endif
+#endif
+#endif
+ > action_t;
+
+ template <typename FPT>
+ function_ptr(FPT fp)
+ : function<action_t>(action_t(fp)) {}
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Function pointer binder (specialization for 0 arg)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT>
+struct function_ptr_action<RT,
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 3
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 6
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+#endif
+ nil_t // Unused
+> {
+
+ typedef RT result_type;
+ typedef RT(*func_ptr_t)();
+
+ function_ptr_action(func_ptr_t fptr_)
+ : fptr(fptr_) {}
+
+ result_type operator()() const
+ { return fptr(); }
+
+ func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT>
+inline function_ptr<RT>
+bind(RT(*fptr)())
+{
+ return function_ptr<RT>(fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Function pointer binder (specialization for 1 arg)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename A>
+struct function_ptr_action<RT,
+ A, nil_t, nil_t,
+#if PHOENIX_LIMIT > 3
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 6
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+#endif
+ nil_t // Unused
+> {
+
+ typedef RT result_type;
+ typedef RT(*func_ptr_t)(A);
+
+ template <typename A_>
+ struct result { typedef result_type type; };
+
+ function_ptr_action(func_ptr_t fptr_)
+ : fptr(fptr_) {}
+
+ result_type operator()(A a) const
+ { return fptr(a); }
+
+ func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename A>
+inline function_ptr<RT, A>
+bind(RT(*fptr)(A))
+{
+ return function_ptr<RT, A>(fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Function pointer binder (specialization for 2 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename A, typename B>
+struct function_ptr_action<RT,
+ A, B, nil_t,
+#if PHOENIX_LIMIT > 3
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 6
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+#endif
+ nil_t // Unused
+> {
+
+ typedef RT result_type;
+ typedef RT(*func_ptr_t)(A, B);
+
+ template <typename A_, typename B_>
+ struct result { typedef result_type type; };
+
+ function_ptr_action(func_ptr_t fptr_)
+ : fptr(fptr_) {}
+
+ result_type operator()(A a, B b) const
+ { return fptr(a, b); }
+
+ func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename A, typename B>
+inline function_ptr<RT, A, B>
+bind(RT(*fptr)(A, B))
+{
+ return function_ptr<RT, A, B>(fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Function pointer binder (specialization for 3 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename A, typename B, typename C>
+struct function_ptr_action<RT,
+ A, B, C,
+#if PHOENIX_LIMIT > 3
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 6
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+#endif
+ nil_t // Unused
+> {
+
+ typedef RT result_type;
+ typedef RT(*func_ptr_t)(A, B, C);
+
+ template <typename A_, typename B_, typename C_>
+ struct result { typedef result_type type; };
+
+ function_ptr_action(func_ptr_t fptr_)
+ : fptr(fptr_) {}
+
+ result_type operator()(A a, B b, C c) const
+ { return fptr(a, b, c); }
+
+ func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename A, typename B, typename C>
+inline function_ptr<RT, A, B, C>
+bind(RT(*fptr)(A, B, C))
+{
+ return function_ptr<RT, A, B, C>(fptr);
+}
+
+#if PHOENIX_LIMIT > 3
+///////////////////////////////////////////////////////////////////////////////
+//
+// Function pointer binder (specialization for 4 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename A, typename B, typename C, typename D>
+struct function_ptr_action<RT,
+ A, B, C, D, nil_t, nil_t,
+#if PHOENIX_LIMIT > 6
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+ nil_t // Unused
+> {
+
+ typedef RT result_type;
+ typedef RT(*func_ptr_t)(A, B, C, D);
+
+ template <typename A_, typename B_, typename C_, typename D_>
+ struct result { typedef result_type type; };
+
+ function_ptr_action(func_ptr_t fptr_)
+ : fptr(fptr_) {}
+
+ result_type operator()(A a, B b, C c, D d) const
+ { return fptr(a, b, c, d); }
+
+ func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename A, typename B, typename C, typename D>
+inline function_ptr<RT, A, B, C, D>
+bind(RT(*fptr)(A, B, C, D))
+{
+ return function_ptr<RT, A, B, C, D>(fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Function pointer binder (specialization for 5 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT,
+ typename A, typename B, typename C, typename D, typename E
+>
+struct function_ptr_action<RT,
+ A, B, C, D, E, nil_t,
+#if PHOENIX_LIMIT > 6
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+ nil_t // Unused
+> {
+
+ typedef RT result_type;
+ typedef RT(*func_ptr_t)(A, B, C, D, E);
+
+ template <
+ typename A_, typename B_, typename C_, typename D_, typename E_
+ >
+ struct result { typedef result_type type; };
+
+ function_ptr_action(func_ptr_t fptr_)
+ : fptr(fptr_) {}
+
+ result_type operator()(
+ A a, B b, C c, D d, E e
+ ) const
+ { return fptr(a, b, c, d, e); }
+
+ func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT,
+ typename A, typename B, typename C, typename D, typename E
+>
+inline function_ptr<RT, A, B, C, D, E>
+bind(RT(*fptr)(A, B, C, D, E))
+{
+ return function_ptr<RT, A, B, C, D, E>(fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Function pointer binder (specialization for 6 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F
+>
+struct function_ptr_action<RT,
+ A, B, C, D, E, F,
+#if PHOENIX_LIMIT > 6
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+ nil_t // Unused
+> {
+
+ typedef RT result_type;
+ typedef RT(*func_ptr_t)(A, B, C, D, E, F);
+
+ template <
+ typename A_, typename B_, typename C_, typename D_, typename E_,
+ typename F_
+ >
+ struct result { typedef result_type type; };
+
+ function_ptr_action(func_ptr_t fptr_)
+ : fptr(fptr_) {}
+
+ result_type operator()(
+ A a, B b, C c, D d, E e,
+ F f
+ ) const
+ { return fptr(a, b, c, d, e, f); }
+
+ func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F
+>
+inline function_ptr<RT, A, B, C, D, E, F>
+bind(RT(*fptr)(A, B, C, D, E, F))
+{
+ return function_ptr<RT, A, B, C, D, E, F>(fptr);
+}
+
+#if PHOENIX_LIMIT > 6
+///////////////////////////////////////////////////////////////////////////////
+//
+// Function pointer binder (specialization for 7 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G
+>
+struct function_ptr_action<RT,
+ A, B, C, D, E, F, G, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+#endif
+ nil_t // Unused
+> {
+
+ typedef RT result_type;
+ typedef RT(*func_ptr_t)(A, B, C, D, E, F, G);
+
+ template <
+ typename A_, typename B_, typename C_, typename D_, typename E_,
+ typename F_, typename G_
+ >
+ struct result { typedef result_type type; };
+
+ function_ptr_action(func_ptr_t fptr_)
+ : fptr(fptr_) {}
+
+ result_type operator()(
+ A a, B b, C c, D d, E e,
+ F f, G g
+ ) const
+ { return fptr(a, b, c, d, e, f, g); }
+
+ func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G
+>
+inline function_ptr<RT, A, B, C, D, E, F, G>
+bind(RT(*fptr)(A, B, C, D, E, F, G))
+{
+ return function_ptr<RT, A, B, C, D, E, F, G>(fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Function pointer binder (specialization for 8 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H
+>
+struct function_ptr_action<RT,
+ A, B, C, D, E, F, G, H, nil_t,
+#if PHOENIX_LIMIT > 9
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+#endif
+ nil_t // Unused
+> {
+
+ typedef RT result_type;
+ typedef RT(*func_ptr_t)(A, B, C, D, E, F, G, H);
+
+ template <
+ typename A_, typename B_, typename C_, typename D_, typename E_,
+ typename F_, typename G_, typename H_
+ >
+ struct result { typedef result_type type; };
+
+ function_ptr_action(func_ptr_t fptr_)
+ : fptr(fptr_) {}
+
+ result_type operator()(
+ A a, B b, C c, D d, E e,
+ F f, G g, H h
+ ) const
+ { return fptr(a, b, c, d, e, f, g, h); }
+
+ func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H
+>
+inline function_ptr<RT, A, B, C, D, E, F, G, H>
+bind(RT(*fptr)(A, B, C, D, E, F, G, H))
+{
+ return function_ptr<RT, A, B, C, D, E, F, G, H>(fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Function pointer binder (specialization for 9 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I
+>
+struct function_ptr_action<RT,
+ A, B, C, D, E, F, G, H, I,
+#if PHOENIX_LIMIT > 9
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+#endif
+ nil_t // Unused
+> {
+
+ typedef RT result_type;
+ typedef RT(*func_ptr_t)(A, B, C, D, E, F, G, H, I);
+
+ template <
+ typename A_, typename B_, typename C_, typename D_, typename E_,
+ typename F_, typename G_, typename H_, typename I_
+ >
+ struct result { typedef result_type type; };
+
+ function_ptr_action(func_ptr_t fptr_)
+ : fptr(fptr_) {}
+
+ result_type operator()(
+ A a, B b, C c, D d, E e,
+ F f, G g, H h, I i
+ ) const
+ { return fptr(a, b, c, d, e, f, g, h, i); }
+
+ func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I
+>
+inline function_ptr<RT, A, B, C, D, E, F, G, H, I>
+bind(RT(*fptr)(A, B, C, D, E, F, G, H, I))
+{
+ return function_ptr<RT, A, B, C, D, E, F, G, H, I>(fptr);
+}
+
+#if PHOENIX_LIMIT > 9
+///////////////////////////////////////////////////////////////////////////////
+//
+// Function pointer binder (specialization for 10 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J
+>
+struct function_ptr_action<RT,
+ A, B, C, D, E, F, G, H, I, J, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+ nil_t // Unused
+> {
+
+ typedef RT result_type;
+ typedef RT(*func_ptr_t)(A, B, C, D, E, F, G, H, I, J);
+
+ template <
+ typename A_, typename B_, typename C_, typename D_, typename E_,
+ typename F_, typename G_, typename H_, typename I_, typename J_
+ >
+ struct result { typedef result_type type; };
+
+ function_ptr_action(func_ptr_t fptr_)
+ : fptr(fptr_) {}
+
+ result_type operator()(
+ A a, B b, C c, D d, E e,
+ F f, G g, H h, I i, J j
+ ) const
+ { return fptr(a, b, c, d, e, f, g, h, i, j); }
+
+ func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J
+>
+inline function_ptr<RT, A, B, C, D, E, F, G, H, I, J>
+bind(RT(*fptr)(A, B, C, D, E, F, G, H, I, J))
+{
+ return function_ptr<RT, A, B, C, D, E, F, G, H, I, J>(fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Function pointer binder (specialization for 11 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K
+>
+struct function_ptr_action<RT,
+ A, B, C, D, E, F, G, H, I, J, K, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+ nil_t // Unused
+> {
+
+ typedef RT result_type;
+ typedef RT(*func_ptr_t)(A, B, C, D, E, F, G, H, I, J, K);
+
+ template <
+ typename A_, typename B_, typename C_, typename D_, typename E_,
+ typename F_, typename G_, typename H_, typename I_, typename J_,
+ typename K_
+ >
+ struct result { typedef result_type type; };
+
+ function_ptr_action(func_ptr_t fptr_)
+ : fptr(fptr_) {}
+
+ result_type operator()(
+ A a, B b, C c, D d, E e,
+ F f, G g, H h, I i, J j,
+ K k
+ ) const
+ { return fptr(a, b, c, d, e, f, g, h, i, j, k); }
+
+ func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K
+>
+inline function_ptr<RT, A, B, C, D, E, F, G, H, I, J, K>
+bind(RT(*fptr)(A, B, C, D, E, F, G, H, I, J, K))
+{
+ return function_ptr<RT, A, B, C, D, E, F, G, H, I, J, K>(fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Function pointer binder (specialization for 12 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L
+>
+struct function_ptr_action<RT,
+ A, B, C, D, E, F, G, H, I, J, K, L,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+ nil_t // Unused
+> {
+
+ typedef RT result_type;
+ typedef RT(*func_ptr_t)(A, B, C, D, E, F, G, H, I, J, K, L);
+
+ template <
+ typename A_, typename B_, typename C_, typename D_, typename E_,
+ typename F_, typename G_, typename H_, typename I_, typename J_,
+ typename K_, typename L_
+ >
+ struct result { typedef result_type type; };
+
+ function_ptr_action(func_ptr_t fptr_)
+ : fptr(fptr_) {}
+
+ result_type operator()(
+ A a, B b, C c, D d, E e,
+ F f, G g, H h, I i, J j,
+ K k, L l
+ ) const
+ { return fptr(a, b, c, d, e, f, g, h, i, j, k, l); }
+
+ func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L
+>
+inline function_ptr<RT, A, B, C, D, E, F, G, H, I, J, K, L>
+bind(RT(*fptr)(A, B, C, D, E, F, G, H, I, J, K, L))
+{
+ return function_ptr<RT, A, B, C, D, E, F, G, H, I, J, K, L>(fptr);
+}
+
+#if PHOENIX_LIMIT > 12
+///////////////////////////////////////////////////////////////////////////////
+//
+// Function pointer binder (specialization for 13 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L, typename M
+>
+struct function_ptr_action<RT,
+ A, B, C, D, E, F, G, H, I, J, K, L, M, nil_t, nil_t, nil_t> {
+
+ typedef RT result_type;
+ typedef RT(*func_ptr_t)(A, B, C, D, E, F, G, H, I, J, K, L, M);
+
+ template <
+ typename A_, typename B_, typename C_, typename D_, typename E_,
+ typename F_, typename G_, typename H_, typename I_, typename J_,
+ typename K_, typename L_, typename M_
+ >
+ struct result { typedef result_type type; };
+
+ function_ptr_action(func_ptr_t fptr_)
+ : fptr(fptr_) {}
+
+ result_type operator()(
+ A a, B b, C c, D d, E e,
+ F f, G g, H h, I i, J j,
+ K k, L l, M m
+ ) const
+ { return fptr(a, b, c, d, e, f, g, h, i, j, k, l, m); }
+
+ func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L, typename M
+>
+inline function_ptr<RT, A, B, C, D, E, F, G, H, I, J, K, L, M>
+bind(RT(*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M))
+{
+ return function_ptr<RT, A, B, C, D, E, F, G, H, I, J, K, L, M>(fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Function pointer binder (specialization for 14 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L, typename M, typename N
+>
+struct function_ptr_action<RT,
+ A, B, C, D, E, F, G, H, I, J, K, L, M, N, nil_t, nil_t> {
+
+ typedef RT result_type;
+ typedef RT(*func_ptr_t)(A, B, C, D, E, F, G, H, I, J, K, L, M, N);
+
+ template <
+ typename A_, typename B_, typename C_, typename D_, typename E_,
+ typename F_, typename G_, typename H_, typename I_, typename J_,
+ typename K_, typename L_, typename M_, typename N_
+ >
+ struct result { typedef result_type type; };
+
+ function_ptr_action(func_ptr_t fptr_)
+ : fptr(fptr_) {}
+
+ result_type operator()(
+ A a, B b, C c, D d, E e,
+ F f, G g, H h, I i, J j,
+ K k, L l, M m, N n
+ ) const
+ { return fptr(a, b, c, d, e, f, g, h, i, j, k, l, m, n); }
+
+ func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L, typename M, typename N
+>
+inline function_ptr<RT, A, B, C, D, E, F, G, H, I, J, K, L, M, N>
+bind(RT(*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M, N))
+{
+ return function_ptr<RT, A, B, C, D, E, F, G, H, I, J, K, L, M, N>(fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Function pointer binder (specialization for 15 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L, typename M, typename N, typename O
+>
+struct function_ptr_action<RT,
+ A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, nil_t> {
+
+ typedef RT result_type;
+ typedef RT(*func_ptr_t)(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O);
+
+ template <
+ typename A_, typename B_, typename C_, typename D_, typename E_,
+ typename F_, typename G_, typename H_, typename I_, typename J_,
+ typename K_, typename L_, typename M_, typename N_, typename O_
+ >
+ struct result { typedef result_type type; };
+
+ function_ptr_action(func_ptr_t fptr_)
+ : fptr(fptr_) {}
+
+ result_type operator()(
+ A a, B b, C c, D d, E e,
+ F f, G g, H h, I i, J j,
+ K k, L l, M m, N n, O o
+ ) const
+ { return fptr(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o); }
+
+ func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L, typename M, typename N, typename O
+>
+inline function_ptr<RT, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O>
+bind(RT(*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O))
+{
+ return function_ptr<RT, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O>(fptr);
+}
+
+#endif
+#endif
+#endif
+#endif
+///////////////////////////////////////////////////////////////////////////////
+//
+// Member function pointer binder (main class)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+ typename RT,
+ typename ClassT
+ , typename A = nil_t
+ , typename B = nil_t
+ , typename C = nil_t
+
+#if PHOENIX_LIMIT > 3
+ , typename D = nil_t
+ , typename E = nil_t
+ , typename F = nil_t
+
+#if PHOENIX_LIMIT > 6
+ , typename G = nil_t
+ , typename H = nil_t
+ , typename I = nil_t
+
+#if PHOENIX_LIMIT > 9
+ , typename J = nil_t
+ , typename K = nil_t
+ , typename L = nil_t
+
+#if PHOENIX_LIMIT > 12
+ , typename M = nil_t
+ , typename N = nil_t
+ , typename O = nil_t
+
+#endif
+#endif
+#endif
+#endif
+
+ , typename NU = nil_t // Not used
+>
+struct member_function_ptr_action;
+
+//////////////////////////////////
+template <
+ typename RT,
+ typename ClassT
+ , typename A = nil_t
+ , typename B = nil_t
+ , typename C = nil_t
+
+#if PHOENIX_LIMIT > 3
+ , typename D = nil_t
+ , typename E = nil_t
+ , typename F = nil_t
+
+#if PHOENIX_LIMIT > 6
+ , typename G = nil_t
+ , typename H = nil_t
+ , typename I = nil_t
+
+#if PHOENIX_LIMIT > 9
+ , typename J = nil_t
+ , typename K = nil_t
+ , typename L = nil_t
+
+#if PHOENIX_LIMIT > 12
+ , typename M = nil_t
+ , typename N = nil_t
+ , typename O = nil_t
+
+#endif
+#endif
+#endif
+#endif
+>
+struct member_function_ptr
+: public function<member_function_ptr_action<RT, ClassT
+ , A, B, C
+#if PHOENIX_LIMIT > 3
+ , D, E, F
+#if PHOENIX_LIMIT > 6
+ , G, H, I
+#if PHOENIX_LIMIT > 9
+ , J, K, L
+#if PHOENIX_LIMIT > 12
+ , M, N, O
+#endif
+#endif
+#endif
+#endif
+ > > {
+
+ typedef member_function_ptr_action<RT, ClassT
+ , A, B, C
+#if PHOENIX_LIMIT > 3
+ , D, E, F
+#if PHOENIX_LIMIT > 6
+ , G, H, I
+#if PHOENIX_LIMIT > 9
+ , J, K, L
+#if PHOENIX_LIMIT > 12
+ , M, N, O
+#endif
+#endif
+#endif
+#endif
+ > action_t;
+
+ template <typename FPT>
+ member_function_ptr(FPT fp)
+ : function<action_t>(action_t(fp)) {}
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Member function pointer binder (specialization for 0 arg)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT>
+struct member_function_ptr_action<RT, ClassT,
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 3
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 6
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+#endif
+ nil_t // Unused
+> {
+
+ typedef RT result_type;
+ typedef RT(ClassT::*mf)();
+ typedef RT(ClassT::*cmf)() const;
+ typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+ mem_func_ptr_t;
+
+ template <typename CT>
+ struct result { typedef result_type type; };
+
+ member_function_ptr_action(mem_func_ptr_t fptr_)
+ : fptr(fptr_) {}
+
+ template <typename CT>
+ result_type operator()(CT& obj) const
+ { return (impl::as_ptr<CT>::get(obj)->*fptr)(); }
+
+ mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT>
+inline member_function_ptr<RT, ClassT>
+bind(RT(ClassT::*fptr)())
+{
+ return member_function_ptr<RT, ClassT>(fptr);
+}
+
+template <typename RT, typename ClassT>
+inline member_function_ptr<RT, ClassT const>
+bind(RT(ClassT::*fptr)() const)
+{
+ return member_function_ptr<RT, ClassT const>(fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Member function pointer binder (specialization for 1 arg)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT, typename A>
+struct member_function_ptr_action<RT, ClassT,
+ A, nil_t, nil_t,
+#if PHOENIX_LIMIT > 3
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 6
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+#endif
+ nil_t // Unused
+> {
+
+ typedef RT result_type;
+ typedef RT(ClassT::*mf)(A);
+ typedef RT(ClassT::*cmf)(A) const;
+ typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+ mem_func_ptr_t;
+
+ template <typename CT, typename A_>
+ struct result { typedef result_type type; };
+
+ member_function_ptr_action(mem_func_ptr_t fptr_)
+ : fptr(fptr_) {}
+
+ template <typename CT>
+ result_type operator()(CT& obj, A a) const
+ { return (impl::as_ptr<CT>::get(obj)->*fptr)(a); }
+
+ mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT, typename A>
+inline member_function_ptr<RT, ClassT, A>
+bind(RT(ClassT::*fptr)(A))
+{
+ return member_function_ptr<RT, ClassT, A>(fptr);
+}
+
+//////////////////////////////////
+template <typename RT, typename ClassT, typename A>
+inline member_function_ptr<RT, ClassT const, A>
+bind(RT(ClassT::*fptr)(A) const)
+{
+ return member_function_ptr<RT, ClassT const, A>(fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Member function pointer binder (specialization for 2 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT, typename A, typename B>
+struct member_function_ptr_action<RT, ClassT,
+ A, B, nil_t,
+#if PHOENIX_LIMIT > 3
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 6
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+#endif
+ nil_t // Unused
+> {
+
+ typedef RT result_type;
+ typedef RT(ClassT::*mf)(A, B);
+ typedef RT(ClassT::*cmf)(A, B) const;
+ typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+ mem_func_ptr_t;
+
+ template <typename CT, typename A_, typename B_>
+ struct result { typedef result_type type; };
+
+ member_function_ptr_action(mem_func_ptr_t fptr_)
+ : fptr(fptr_) {}
+
+ template <typename CT>
+ result_type operator()(CT& obj, A a, B b) const
+ { return (impl::as_ptr<CT>::get(obj)->*fptr)(a, b); }
+
+ mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT, typename A, typename B>
+inline member_function_ptr<RT, ClassT, A, B>
+bind(RT(ClassT::*fptr)(A, B))
+{
+ return member_function_ptr<RT, ClassT, A, B>(fptr);
+}
+
+//////////////////////////////////
+template <typename RT, typename ClassT, typename A, typename B>
+inline member_function_ptr<RT, ClassT const, A, B>
+bind(RT(ClassT::*fptr)(A, B) const)
+{
+ return member_function_ptr<RT, ClassT const, A, B>(fptr);
+}
+
+#if PHOENIX_LIMIT > 3
+///////////////////////////////////////////////////////////////////////////////
+//
+// Member function pointer binder (specialization for 3 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT, typename A, typename B, typename C>
+struct member_function_ptr_action<RT, ClassT,
+ A, B, C, nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 6
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+ nil_t // Unused
+> {
+
+ typedef RT result_type;
+ typedef RT(ClassT::*mf)(A, B, C);
+ typedef RT(ClassT::*cmf)(A, B, C) const;
+ typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+ mem_func_ptr_t;
+
+ template <typename CT, typename A_, typename B_, typename C_>
+ struct result { typedef result_type type; };
+
+ member_function_ptr_action(mem_func_ptr_t fptr_)
+ : fptr(fptr_) {}
+
+ template <typename CT>
+ result_type operator()(CT& obj, A a, B b, C c) const
+ { return (impl::as_ptr<CT>::get(obj)->*fptr)(a, b, c); }
+
+ mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT, typename A, typename B, typename C>
+inline member_function_ptr<RT, ClassT, A, B, C>
+bind(RT(ClassT::*fptr)(A, B, C))
+{
+ return member_function_ptr<RT, ClassT, A, B, C>(fptr);
+}
+
+//////////////////////////////////
+template <typename RT, typename ClassT, typename A, typename B, typename C>
+inline member_function_ptr<RT, ClassT const, A, B, C>
+bind(RT(ClassT::*fptr)(A, B, C) const)
+{
+ return member_function_ptr<RT, ClassT const, A, B, C>(fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Member function pointer binder (specialization for 4 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D
+>
+struct member_function_ptr_action<RT, ClassT,
+ A, B, C, D, nil_t, nil_t,
+#if PHOENIX_LIMIT > 6
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+ nil_t // Unused
+> {
+
+ typedef RT result_type;
+ typedef RT(ClassT::*mf)(A, B, C, D);
+ typedef RT(ClassT::*cmf)(A, B, C, D) const;
+ typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+ mem_func_ptr_t;
+
+ template <typename CT,
+ typename A_, typename B_, typename C_, typename D_
+ >
+ struct result { typedef result_type type; };
+
+ member_function_ptr_action(mem_func_ptr_t fptr_)
+ : fptr(fptr_) {}
+
+ template <typename CT>
+ result_type operator()(CT& obj,
+ A a, B b, C c, D d
+ ) const
+ { return (impl::as_ptr<CT>::get(obj)->*fptr)(a, b, c, d); }
+
+ mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D
+>
+inline member_function_ptr<RT, ClassT, A, B, C, D>
+bind(RT(ClassT::*fptr)(A, B, C, D))
+{
+ return member_function_ptr<
+ RT, ClassT, A, B, C, D>(fptr);
+}
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D
+>
+inline member_function_ptr<RT, ClassT const, A, B, C, D>
+bind(RT(ClassT::*fptr)(A, B, C, D) const)
+{
+ return member_function_ptr<
+ RT, ClassT const, A, B, C, D>(fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Member function pointer binder (specialization for 5 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E
+>
+struct member_function_ptr_action<RT, ClassT,
+ A, B, C, D, E, nil_t,
+#if PHOENIX_LIMIT > 6
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+ nil_t // Unused
+> {
+
+ typedef RT result_type;
+ typedef RT(ClassT::*mf)(A, B, C, D, E);
+ typedef RT(ClassT::*cmf)(A, B, C, D, E) const;
+ typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+ mem_func_ptr_t;
+
+ template <typename CT,
+ typename A_, typename B_, typename C_, typename D_,
+ typename E_
+ >
+ struct result { typedef result_type type; };
+
+ member_function_ptr_action(mem_func_ptr_t fptr_)
+ : fptr(fptr_) {}
+
+ template <typename CT>
+ result_type operator()(CT& obj,
+ A a, B b, C c, D d, E e
+ ) const
+ { return (impl::as_ptr<CT>::get(obj)->*fptr)(a, b, c, d, e); }
+
+ mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E
+>
+inline member_function_ptr<RT, ClassT, A, B, C, D, E>
+bind(RT(ClassT::*fptr)(A, B, C, D, E))
+{
+ return member_function_ptr<
+ RT, ClassT, A, B, C, D, E>(fptr);
+}
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E
+>
+inline member_function_ptr<RT, ClassT const, A, B, C, D, E>
+bind(RT(ClassT::*fptr)(A, B, C, D, E) const)
+{
+ return member_function_ptr<
+ RT, ClassT const, A, B, C, D, E>(fptr);
+}
+
+#if PHOENIX_LIMIT > 6
+///////////////////////////////////////////////////////////////////////////////
+//
+// Member function pointer binder (specialization for 6 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F
+>
+struct member_function_ptr_action<RT, ClassT,
+ A, B, C, D, E, F, nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+#endif
+ nil_t // Unused
+> {
+
+ typedef RT result_type;
+ typedef RT(ClassT::*mf)(A, B, C, D, E, F);
+ typedef RT(ClassT::*cmf)(A, B, C, D, E, F) const;
+ typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+ mem_func_ptr_t;
+
+ template <typename CT,
+ typename A_, typename B_, typename C_, typename D_,
+ typename E_, typename F_
+ >
+ struct result { typedef result_type type; };
+
+ member_function_ptr_action(mem_func_ptr_t fptr_)
+ : fptr(fptr_) {}
+
+ template <typename CT>
+ result_type operator()(CT& obj,
+ A a, B b, C c, D d, E e, F f
+ ) const
+ { return (impl::as_ptr<CT>::get(obj)->*fptr)(a, b, c, d, e, f); }
+
+ mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F
+>
+inline member_function_ptr<RT, ClassT, A, B, C, D, E, F>
+bind(RT(ClassT::*fptr)(A, B, C, D, E, F))
+{
+ return member_function_ptr<
+ RT, ClassT, A, B, C, D, E, F>(fptr);
+}
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F
+>
+inline member_function_ptr<RT, ClassT const, A, B, C, D, E, F>
+bind(RT(ClassT::*fptr)(A, B, C, D, E, F) const)
+{
+ return member_function_ptr<
+ RT, ClassT const, A, B, C, D, E, F>(fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Member function pointer binder (specialization for 7 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G
+>
+struct member_function_ptr_action<RT, ClassT,
+ A, B, C, D, E, F, G, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+#endif
+ nil_t // Unused
+> {
+
+ typedef RT result_type;
+ typedef RT(ClassT::*mf)(A, B, C, D, E, F, G);
+ typedef RT(ClassT::*cmf)(A, B, C, D, E, F, G) const;
+ typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+ mem_func_ptr_t;
+
+ template <typename CT,
+ typename A_, typename B_, typename C_, typename D_,
+ typename E_, typename F_, typename G_
+ >
+ struct result { typedef result_type type; };
+
+ member_function_ptr_action(mem_func_ptr_t fptr_)
+ : fptr(fptr_) {}
+
+ template <typename CT>
+ result_type operator()(CT& obj,
+ A a, B b, C c, D d, E e, F f, G g
+ ) const
+ { return (impl::as_ptr<CT>::get(obj)->*fptr)(a, b, c, d, e, f, g); }
+
+ mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G
+>
+inline member_function_ptr<RT, ClassT, A, B, C, D, E, F, G>
+bind(RT(ClassT::*fptr)(A, B, C, D, E, F, G))
+{
+ return member_function_ptr<
+ RT, ClassT, A, B, C, D, E, F, G>(fptr);
+}
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G
+>
+inline member_function_ptr<RT, ClassT const, A, B, C, D, E, F, G>
+bind(RT(ClassT::*fptr)(A, B, C, D, E, F, G) const)
+{
+ return member_function_ptr<
+ RT, ClassT const, A, B, C, D, E, F, G>(fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Member function pointer binder (specialization for 8 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H
+>
+struct member_function_ptr_action<RT, ClassT,
+ A, B, C, D, E, F, G, H, nil_t,
+#if PHOENIX_LIMIT > 9
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+#endif
+ nil_t // Unused
+> {
+
+ typedef RT result_type;
+ typedef RT(ClassT::*mf)(A, B, C, D, E, F, G, H);
+ typedef RT(ClassT::*cmf)(A, B, C, D, E, F, G, H) const;
+ typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+ mem_func_ptr_t;
+
+ template <typename CT,
+ typename A_, typename B_, typename C_, typename D_,
+ typename E_, typename F_, typename G_, typename H_
+ >
+ struct result { typedef result_type type; };
+
+ member_function_ptr_action(mem_func_ptr_t fptr_)
+ : fptr(fptr_) {}
+
+ template <typename CT>
+ result_type operator()(CT& obj,
+ A a, B b, C c, D d, E e, F f, G g, H h
+ ) const
+ { return (impl::as_ptr<CT>::get(obj)->*fptr)(a, b, c, d, e, f, g, h); }
+
+ mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H
+>
+inline member_function_ptr<RT, ClassT, A, B, C, D, E, F, G, H>
+bind(RT(ClassT::*fptr)(A, B, C, D, E, F, G, H))
+{
+ return member_function_ptr<
+ RT, ClassT, A, B, C, D, E, F, G, H>(fptr);
+}
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H
+>
+inline member_function_ptr<RT, ClassT const, A, B, C, D, E, F, G, H>
+bind(RT(ClassT::*fptr)(A, B, C, D, E, F, G, H) const)
+{
+ return member_function_ptr<
+ RT, ClassT const, A, B, C, D, E, F, G, H>(fptr);
+}
+
+#if PHOENIX_LIMIT > 9
+///////////////////////////////////////////////////////////////////////////////
+//
+// Member function pointer binder (specialization for 9 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I
+>
+struct member_function_ptr_action<RT, ClassT,
+ A, B, C, D, E, F, G, H, I, nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+ nil_t // Unused
+> {
+
+ typedef RT result_type;
+ typedef RT(ClassT::*mf)(A, B, C, D, E, F, G, H, I);
+ typedef RT(ClassT::*cmf)(A, B, C, D, E, F, G, H, I) const;
+ typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+ mem_func_ptr_t;
+
+ template <typename CT,
+ typename A_, typename B_, typename C_, typename D_,
+ typename E_, typename F_, typename G_, typename H_, typename I_
+ >
+ struct result { typedef result_type type; };
+
+ member_function_ptr_action(mem_func_ptr_t fptr_)
+ : fptr(fptr_) {}
+
+ template <typename CT>
+ result_type operator()(CT& obj,
+ A a, B b, C c, D d, E e, F f, G g, H h, I i
+ ) const
+ { return (impl::as_ptr<CT>::get(obj)->*fptr)(a, b, c, d, e, f, g, h, i); }
+
+ mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I
+>
+inline member_function_ptr<RT, ClassT, A, B, C, D, E, F, G, H, I>
+bind(RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I))
+{
+ return member_function_ptr<
+ RT, ClassT, A, B, C, D, E, F, G, H, I>(fptr);
+}
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I
+>
+inline member_function_ptr<RT, ClassT const, A, B, C, D, E, F, G, H, I>
+bind(RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I) const)
+{
+ return member_function_ptr<
+ RT, ClassT const, A, B, C, D, E, F, G, H, I>(fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Member function pointer binder (specialization for 10 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I,
+ typename J
+>
+struct member_function_ptr_action<RT, ClassT,
+ A, B, C, D, E, F, G, H, I, J, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+ nil_t // Unused
+> {
+
+ typedef RT result_type;
+ typedef RT(ClassT::*mf)(A, B, C, D, E, F, G, H, I, J);
+ typedef RT(ClassT::*cmf)(A, B, C, D, E, F, G, H, I, J) const;
+ typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+ mem_func_ptr_t;
+
+ template <typename CT,
+ typename A_, typename B_, typename C_, typename D_,
+ typename E_, typename F_, typename G_, typename H_, typename I_,
+ typename J_
+ >
+ struct result { typedef result_type type; };
+
+ member_function_ptr_action(mem_func_ptr_t fptr_)
+ : fptr(fptr_) {}
+
+ template <typename CT>
+ result_type operator()(CT& obj,
+ A a, B b, C c, D d, E e, F f, G g, H h, I i, J j
+ ) const
+ {
+ return (impl::as_ptr<CT>::get(obj)->*fptr)
+ (a, b, c, d, e, f, g, h, i, j);
+ }
+
+ mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I,
+ typename J
+>
+inline member_function_ptr<RT, ClassT, A, B, C, D, E, F, G, H, I, J>
+bind(RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J))
+{
+ return member_function_ptr<
+ RT, ClassT, A, B, C, D, E, F, G, H, I, J>(fptr);
+}
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I,
+ typename J
+>
+inline member_function_ptr<RT, ClassT const, A, B, C, D, E, F, G, H, I, J>
+bind(RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J) const)
+{
+ return member_function_ptr<
+ RT, ClassT const, A, B, C, D, E, F, G, H, I, J>(fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Member function pointer binder (specialization for 11 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I,
+ typename J, typename K
+>
+struct member_function_ptr_action<RT, ClassT,
+ A, B, C, D, E, F, G, H, I, J, K, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+ nil_t // Unused
+> {
+
+ typedef RT result_type;
+ typedef RT(ClassT::*mf)(A, B, C, D, E, F, G, H, I, J, K);
+ typedef RT(ClassT::*cmf)(A, B, C, D, E, F, G, H, I, J, K) const;
+ typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+ mem_func_ptr_t;
+
+ template <typename CT,
+ typename A_, typename B_, typename C_, typename D_,
+ typename E_, typename F_, typename G_, typename H_, typename I_,
+ typename J_, typename K_
+ >
+ struct result { typedef result_type type; };
+
+ member_function_ptr_action(mem_func_ptr_t fptr_)
+ : fptr(fptr_) {}
+
+ template <typename CT>
+ result_type operator()(CT& obj,
+ A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k
+ ) const
+ {
+ return (impl::as_ptr<CT>::get(obj)->*fptr)
+ (a, b, c, d, e, f, g, h, i, j, k);
+ }
+
+ mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I,
+ typename J, typename K
+>
+inline member_function_ptr<RT, ClassT, A, B, C, D, E, F, G, H, I, J, K>
+bind(RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K))
+{
+ return member_function_ptr<
+ RT, ClassT, A, B, C, D, E, F, G, H, I, J, K>(fptr);
+}
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I,
+ typename J, typename K
+>
+inline member_function_ptr<RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K>
+bind(RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K) const)
+{
+ return member_function_ptr<
+ RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K>(fptr);
+}
+
+#if PHOENIX_LIMIT > 12
+///////////////////////////////////////////////////////////////////////////////
+//
+// Member function pointer binder (specialization for 12 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I,
+ typename J, typename K, typename L
+>
+struct member_function_ptr_action<RT, ClassT,
+ A, B, C, D, E, F, G, H, I, J, K, L, nil_t, nil_t, nil_t, nil_t> {
+
+ typedef RT result_type;
+ typedef RT(ClassT::*mf)(A, B, C, D, E, F, G, H, I, J, K, L);
+ typedef RT(ClassT::*cmf)(A, B, C, D, E, F, G, H, I, J, K, L) const;
+ typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+ mem_func_ptr_t;
+
+ template <typename CT,
+ typename A_, typename B_, typename C_, typename D_,
+ typename E_, typename F_, typename G_, typename H_, typename I_,
+ typename J_, typename K_, typename L_
+ >
+ struct result { typedef result_type type; };
+
+ member_function_ptr_action(mem_func_ptr_t fptr_)
+ : fptr(fptr_) {}
+
+ template <typename CT>
+ result_type operator()(CT& obj,
+ A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k, L l
+ ) const
+ {
+ return (impl::as_ptr<CT>::get(obj)->*fptr)
+ (a, b, c, d, e, f, g, h, i, j, k, l);
+ }
+
+ mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I,
+ typename J, typename K, typename L
+>
+inline member_function_ptr<RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L>
+bind(RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L))
+{
+ return member_function_ptr<
+ RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L>(fptr);
+}
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I,
+ typename J, typename K, typename L
+>
+inline member_function_ptr<RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L>
+bind(RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L) const)
+{
+ return member_function_ptr<
+ RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L>(fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Member function pointer binder (specialization for 13 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I,
+ typename J, typename K, typename L, typename M
+>
+struct member_function_ptr_action<RT, ClassT,
+ A, B, C, D, E, F, G, H, I, J, K, L, M, nil_t, nil_t, nil_t> {
+
+ typedef RT result_type;
+ typedef RT(ClassT::*mf)(A, B, C, D, E, F, G, H, I, J, K, L, M);
+ typedef RT(ClassT::*cmf)(A, B, C, D, E, F, G, H, I, J, K, L, M) const;
+ typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+ mem_func_ptr_t;
+
+ template <typename CT,
+ typename A_, typename B_, typename C_, typename D_,
+ typename E_, typename F_, typename G_, typename H_, typename I_,
+ typename J_, typename K_, typename L_, typename M_
+ >
+ struct result { typedef result_type type; };
+
+ member_function_ptr_action(mem_func_ptr_t fptr_)
+ : fptr(fptr_) {}
+
+ template <typename CT>
+ result_type operator()(CT& obj,
+ A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k, L l, M m
+ ) const
+ {
+ return (impl::as_ptr<CT>::get(obj)->*fptr)
+ (a, b, c, d, e, f, g, h, i, j, k, l, m);
+ }
+
+ mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I,
+ typename J, typename K, typename L, typename M
+>
+inline member_function_ptr<RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L, M>
+bind(RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M))
+{
+ return member_function_ptr<
+ RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L, M>(fptr);
+}
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I,
+ typename J, typename K, typename L, typename M
+>
+inline member_function_ptr<RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L, M>
+bind(RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M) const)
+{
+ return member_function_ptr<
+ RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L, M>(fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Member function pointer binder (specialization for 14 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I,
+ typename J, typename K, typename L, typename M, typename N
+>
+struct member_function_ptr_action<RT, ClassT,
+ A, B, C, D, E, F, G, H, I, J, K, L, M, N, nil_t, nil_t> {
+
+ typedef RT result_type;
+ typedef RT(ClassT::*mf)(A, B, C, D, E, F, G, H, I, J, K, L, M, N);
+ typedef RT(ClassT::*cmf)(A, B, C, D, E, F, G, H, I, J, K, L, M, N) const;
+ typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+ mem_func_ptr_t;
+
+ template <typename CT,
+ typename A_, typename B_, typename C_, typename D_,
+ typename E_, typename F_, typename G_, typename H_, typename I_,
+ typename J_, typename K_, typename L_, typename M_, typename N_
+ >
+ struct result { typedef result_type type; };
+
+ member_function_ptr_action(mem_func_ptr_t fptr_)
+ : fptr(fptr_) {}
+
+ template <typename CT>
+ result_type operator()(CT& obj,
+ A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k, L l, M m, N n
+ ) const
+ {
+ return (impl::as_ptr<CT>::get(obj)->*fptr)
+ (a, b, c, d, e, f, g, h, i, j, k, l, m, n);
+ }
+
+ mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I,
+ typename J, typename K, typename L, typename M, typename N
+>
+inline member_function_ptr<RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L, M, N>
+bind(RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M, N))
+{
+ return member_function_ptr<
+ RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L, M, N>(fptr);
+}
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I,
+ typename J, typename K, typename L, typename M, typename N
+>
+inline member_function_ptr<RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L, M, N>
+bind(RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M, N) const)
+{
+ return member_function_ptr<
+ RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L, M, N>(fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Member function pointer binder (specialization for 15 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I,
+ typename J, typename K, typename L, typename M, typename N,
+ typename O
+>
+struct member_function_ptr_action<RT, ClassT,
+ A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, nil_t> {
+
+ typedef RT result_type;
+ typedef RT(ClassT::*mf)(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O);
+ typedef RT(ClassT::*cmf)(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O) const;
+ typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+ mem_func_ptr_t;
+
+ template <typename CT,
+ typename A_, typename B_, typename C_, typename D_,
+ typename E_, typename F_, typename G_, typename H_, typename I_,
+ typename J_, typename K_, typename L_, typename M_, typename N_,
+ typename O_
+ >
+ struct result { typedef result_type type; };
+
+ member_function_ptr_action(mem_func_ptr_t fptr_)
+ : fptr(fptr_) {}
+
+ template <typename CT>
+ result_type operator()(CT& obj,
+ A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k, L l, M m, N n, O o
+ ) const
+ {
+ return (impl::as_ptr<CT>::get(obj)->*fptr)
+ (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o);
+ }
+
+ mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I,
+ typename J, typename K, typename L, typename M, typename N,
+ typename O
+>
+inline member_function_ptr<RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O>
+bind(RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O))
+{
+ return member_function_ptr<
+ RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O>(fptr);
+}
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I,
+ typename J, typename K, typename L, typename M, typename N,
+ typename O
+>
+inline member_function_ptr<RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O>
+bind(RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O) const)
+{
+ return member_function_ptr<
+ RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O>(fptr);
+}
+
+#endif
+#endif
+#endif
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Bound member function binder (main class)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+ typename RT,
+ typename ClassT
+ , typename A = nil_t
+ , typename B = nil_t
+ , typename C = nil_t
+
+#if PHOENIX_LIMIT > 3
+ , typename D = nil_t
+ , typename E = nil_t
+ , typename F = nil_t
+
+#if PHOENIX_LIMIT > 6
+ , typename G = nil_t
+ , typename H = nil_t
+ , typename I = nil_t
+
+#if PHOENIX_LIMIT > 9
+ , typename J = nil_t
+ , typename K = nil_t
+ , typename L = nil_t
+
+#if PHOENIX_LIMIT > 12
+ , typename M = nil_t
+ , typename N = nil_t
+ , typename O = nil_t
+
+#endif
+#endif
+#endif
+#endif
+
+ , typename NU = nil_t // Not used
+>
+struct bound_member_action;
+
+//////////////////////////////////
+template <
+ typename RT,
+ typename ClassT
+ , typename A = nil_t
+ , typename B = nil_t
+ , typename C = nil_t
+
+#if PHOENIX_LIMIT > 3
+ , typename D = nil_t
+ , typename E = nil_t
+ , typename F = nil_t
+
+#if PHOENIX_LIMIT > 6
+ , typename G = nil_t
+ , typename H = nil_t
+ , typename I = nil_t
+
+#if PHOENIX_LIMIT > 9
+ , typename J = nil_t
+ , typename K = nil_t
+ , typename L = nil_t
+
+#if PHOENIX_LIMIT > 12
+ , typename M = nil_t
+ , typename N = nil_t
+ , typename O = nil_t
+
+#endif
+#endif
+#endif
+#endif
+>
+struct bound_member
+: public function<bound_member_action<RT, ClassT
+ , A, B, C
+#if PHOENIX_LIMIT > 3
+ , D, E, F
+#if PHOENIX_LIMIT > 6
+ , G, H, I
+#if PHOENIX_LIMIT > 9
+ , J, K, L
+#if PHOENIX_LIMIT > 12
+ , M, N, O
+#endif
+#endif
+#endif
+#endif
+ > > {
+
+ typedef bound_member_action<RT, ClassT
+ , A, B, C
+#if PHOENIX_LIMIT > 3
+ , D, E, F
+#if PHOENIX_LIMIT > 6
+ , G, H, I
+#if PHOENIX_LIMIT > 9
+ , J, K, L
+#if PHOENIX_LIMIT > 12
+ , M, N, O
+#endif
+#endif
+#endif
+#endif
+ > action_t;
+
+ template <typename CT, typename FPT>
+ bound_member(CT & c, FPT fp)
+ : function<action_t>(action_t(c,fp)) {}
+
+#if !defined(__BORLANDC__)
+ template <typename CT, typename FPT>
+ bound_member(CT * c, FPT fp)
+ : function<action_t>(action_t(c,fp)) {}
+#endif
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Bound member function binder (specialization for 0 arg)
+//
+///////////////////////////////////////////////////////////////////////////////
+
+template <typename RT, typename ClassT>
+struct bound_member_action<RT, ClassT,
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 3
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 6
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+#endif
+ nil_t // Unused
+> {
+
+ typedef RT result_type;
+ typedef RT(ClassT::*mf)();
+ typedef RT(ClassT::*cmf)() const;
+ typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+ mem_func_ptr_t;
+
+ template <typename CT>
+ struct result { typedef result_type type; };
+
+ template <typename CT>
+ bound_member_action(CT & obj_, mem_func_ptr_t fptr_)
+ : obj(impl::as_ptr<CT>::get(obj_)), fptr(fptr_) {}
+
+ result_type operator()() const
+ { return (obj->*fptr)(); }
+
+ typename impl::as_ptr<ClassT>::pointer_type obj;
+ mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+
+template <typename RT, typename ClassT>
+inline bound_member<RT,ClassT>
+bind(ClassT & obj, RT(ClassT::*fptr)())
+{
+ return bound_member<RT,ClassT>(obj, fptr);
+}
+
+template <typename RT, typename ClassT>
+inline bound_member<RT,ClassT>
+bind(ClassT * obj, RT(ClassT::*fptr)())
+{
+#if defined(__MWERKS__) && (__MWERKS__ < 0x3003)
+ return bound_member<RT,ClassT>(*obj, fptr);
+#else
+ return bound_member<RT,ClassT>(obj, fptr);
+#endif
+}
+
+template <typename RT, typename ClassT>
+inline bound_member<RT,ClassT const>
+bind(ClassT const& obj, RT(ClassT::*fptr)())
+{
+ return bound_member<RT,ClassT const>(obj, fptr);
+}
+
+template <typename RT, typename ClassT>
+inline bound_member<RT,ClassT const>
+bind(ClassT const* obj, RT(ClassT::*fptr)() const)
+{
+#if defined(__MWERKS__) && (__MWERKS__ < 0x3003)
+ return bound_member<RT,ClassT const>(*obj, fptr);
+#else
+ return bound_member<RT,ClassT const>(obj, fptr);
+#endif
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Bound member function binder (specialization for 1 arg)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT, typename A>
+struct bound_member_action<RT, ClassT,
+ A, nil_t, nil_t,
+#if PHOENIX_LIMIT > 3
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 6
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+#endif
+ nil_t // Unused
+> {
+
+ typedef RT result_type;
+ typedef RT(ClassT::*mf)(A);
+ typedef RT(ClassT::*cmf)(A) const;
+ typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+ mem_func_ptr_t;
+
+ template <typename A_>
+ struct result { typedef result_type type; };
+
+ template <typename CT>
+ bound_member_action(CT & obj_, mem_func_ptr_t fptr_)
+ : obj(impl::as_ptr<CT>::get(obj_)), fptr(fptr_) {}
+
+ result_type operator()(A a) const
+ { return (obj->*fptr)(a); }
+
+ typename impl::as_ptr<ClassT>::pointer_type obj;
+ mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT, typename A>
+inline bound_member<RT, ClassT, A>
+bind(ClassT & obj, RT(ClassT::*fptr)(A))
+{
+ return bound_member<RT, ClassT, A>(obj,fptr);
+}
+
+template <typename RT, typename ClassT, typename A>
+inline bound_member<RT, ClassT, A>
+bind(ClassT * obj, RT(ClassT::*fptr)(A))
+{
+ return bound_member<RT, ClassT, A>(obj,fptr);
+}
+
+//////////////////////////////////
+template <typename RT, typename ClassT, typename A>
+inline bound_member<RT, ClassT const, A>
+bind(ClassT const& obj, RT(ClassT::*fptr)(A) const)
+{
+ return bound_member<RT, ClassT const, A>(obj,fptr);
+}
+
+template <typename RT, typename ClassT, typename A>
+inline bound_member<RT, ClassT const, A>
+bind(ClassT const* obj, RT(ClassT::*fptr)(A) const)
+{
+ return bound_member<RT, ClassT const, A>(obj,fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Bound member function binder (specialization for 2 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT, typename A, typename B>
+struct bound_member_action<RT, ClassT,
+ A, B, nil_t,
+#if PHOENIX_LIMIT > 3
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 6
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+#endif
+ nil_t // Unused
+> {
+
+ typedef RT result_type;
+ typedef RT(ClassT::*mf)(A, B);
+ typedef RT(ClassT::*cmf)(A, B) const;
+ typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+ mem_func_ptr_t;
+
+ template <typename A_, typename B_>
+ struct result { typedef result_type type; };
+
+ template <typename CT>
+ bound_member_action(CT & obj_, mem_func_ptr_t fptr_)
+ : obj(impl::as_ptr<CT>::get(obj_)), fptr(fptr_) {}
+
+ result_type operator()(A a, B b) const
+ { return (obj->*fptr)(a, b); }
+
+ typename impl::as_ptr<ClassT>::pointer_type obj;
+ mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT, typename A, typename B>
+inline bound_member<RT, ClassT, A, B>
+bind(ClassT & obj,RT(ClassT::*fptr)(A, B))
+{
+ return bound_member<RT, ClassT, A, B>(obj,fptr);
+}
+
+template <typename RT, typename ClassT, typename A, typename B>
+inline bound_member<RT, ClassT, A, B>
+bind(ClassT * obj,RT(ClassT::*fptr)(A, B))
+{
+ return bound_member<RT, ClassT, A, B>(obj,fptr);
+}
+
+template <typename RT, typename ClassT, typename A, typename B>
+inline bound_member<RT, ClassT const, A, B>
+bind(ClassT const& obj,RT(ClassT::*fptr)(A, B) const)
+{
+ return bound_member<RT, ClassT const, A, B>(obj,fptr);
+}
+
+template <typename RT, typename ClassT, typename A, typename B>
+inline bound_member<RT, ClassT const, A, B>
+bind(ClassT const* obj,RT(ClassT::*fptr)(A, B) const)
+{
+ return bound_member<RT, ClassT const, A, B>(obj,fptr);
+}
+
+#if PHOENIX_LIMIT > 3
+///////////////////////////////////////////////////////////////////////////////
+//
+// Bound member function binder (specialization for 3 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT, typename A, typename B, typename C>
+struct bound_member_action<RT, ClassT,
+ A, B, C, nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 6
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+ nil_t // Unused
+> {
+
+ typedef RT result_type;
+ typedef RT(ClassT::*mf)(A, B, C);
+ typedef RT(ClassT::*cmf)(A, B, C) const;
+ typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+ mem_func_ptr_t;
+
+ template <typename A_, typename B_, typename C_>
+ struct result { typedef result_type type; };
+
+ template <typename CT>
+ bound_member_action(CT & obj_, mem_func_ptr_t fptr_)
+ : obj(impl::as_ptr<CT>::get(obj_)), fptr(fptr_) {}
+
+ result_type operator()(A a, B b, C c) const
+ { return (obj->*fptr)(a, b, c); }
+
+ typename impl::as_ptr<ClassT>::pointer_type obj;
+ mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT, typename A, typename B, typename C>
+inline bound_member<RT, ClassT, A, B, C>
+bind(ClassT & obj,RT(ClassT::*fptr)(A, B, C))
+{
+ return bound_member<RT, ClassT, A, B, C>(obj,fptr);
+}
+
+template <typename RT, typename ClassT, typename A, typename B, typename C>
+inline bound_member<RT, ClassT, A, B, C>
+bind(ClassT * obj,RT(ClassT::*fptr)(A, B, C))
+{
+ return bound_member<RT, ClassT, A, B, C>(obj,fptr);
+}
+
+template <typename RT, typename ClassT, typename A, typename B, typename C>
+inline bound_member<RT, ClassT const, A, B, C>
+bind(ClassT const& obj,RT(ClassT::*fptr)(A, B, C) const)
+{
+ return bound_member<RT, ClassT const, A, B, C>(obj,fptr);
+}
+
+template <typename RT, typename ClassT, typename A, typename B, typename C>
+inline bound_member<RT, ClassT const, A, B, C>
+bind(ClassT const* obj,RT(ClassT::*fptr)(A, B, C) const)
+{
+ return bound_member<RT, ClassT const, A, B, C>(obj,fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Bound member function binder (specialization for 4 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D
+>
+struct bound_member_action<RT, ClassT,
+ A, B, C, D, nil_t, nil_t,
+#if PHOENIX_LIMIT > 6
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+ nil_t // Unused
+> {
+
+ typedef RT result_type;
+ typedef RT(ClassT::*mf)(A, B, C, D);
+ typedef RT(ClassT::*cmf)(A, B, C, D) const;
+ typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+ mem_func_ptr_t;
+
+ template <typename A_, typename B_, typename C_, typename D_>
+ struct result { typedef result_type type; };
+
+ template <typename CT>
+ bound_member_action(CT & obj_, mem_func_ptr_t fptr_)
+ : obj(impl::as_ptr<CT>::get(obj_)), fptr(fptr_) {}
+
+ result_type operator()(A a, B b, C c, D d) const
+ { return (obj->*fptr)(a, b, c, d); }
+
+ typename impl::as_ptr<ClassT>::pointer_type obj;
+ mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D
+>
+inline bound_member<RT, ClassT, A, B, C, D>
+bind(ClassT & obj,RT(ClassT::*fptr)(A, B, C, D))
+{
+ return bound_member<
+ RT, ClassT, A, B, C, D>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D
+>
+inline bound_member<RT, ClassT, A, B, C, D>
+bind(ClassT * obj,RT(ClassT::*fptr)(A, B, C, D))
+{
+ return bound_member<
+ RT, ClassT, A, B, C, D>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D
+>
+inline bound_member<RT, ClassT const, A, B, C, D>
+bind(ClassT const& obj,RT(ClassT::*fptr)(A, B, C, D) const)
+{
+ return bound_member<
+ RT, ClassT const, A, B, C, D>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D
+>
+inline bound_member<RT, ClassT const, A, B, C, D>
+bind(ClassT const* obj,RT(ClassT::*fptr)(A, B, C, D) const)
+{
+ return bound_member<
+ RT, ClassT const, A, B, C, D>(obj,fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Bound member function binder (specialization for 5 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E
+>
+struct bound_member_action<RT, ClassT,
+ A, B, C, D, E, nil_t,
+#if PHOENIX_LIMIT > 6
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+ nil_t // Unused
+> {
+
+ typedef RT result_type;
+ typedef RT(ClassT::*mf)(A, B, C, D, E);
+ typedef RT(ClassT::*cmf)(A, B, C, D, E) const;
+ typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+ mem_func_ptr_t;
+
+ template <typename A_, typename B_, typename C_, typename D_,
+ typename E_
+ >
+ struct result { typedef result_type type; };
+
+ template <typename CT>
+ bound_member_action(CT & obj_, mem_func_ptr_t fptr_)
+ : obj(impl::as_ptr<CT>::get(obj_)), fptr(fptr_) {}
+
+ result_type operator()(
+ A a, B b, C c, D d, E e
+ ) const
+ { return (obj->*fptr)(a, b, c, d, e); }
+
+ typename impl::as_ptr<ClassT>::pointer_type obj;
+ mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E
+>
+inline bound_member<RT, ClassT, A, B, C, D, E>
+bind(ClassT & obj,RT(ClassT::*fptr)(A, B, C, D, E))
+{
+ return bound_member<
+ RT, ClassT, A, B, C, D, E>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E
+>
+inline bound_member<RT, ClassT, A, B, C, D, E>
+bind(ClassT * obj,RT(ClassT::*fptr)(A, B, C, D, E))
+{
+ return bound_member<
+ RT, ClassT, A, B, C, D, E>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E
+>
+inline bound_member<RT, ClassT const, A, B, C, D, E>
+bind(ClassT const& obj,RT(ClassT::*fptr)(A, B, C, D, E) const)
+{
+ return bound_member<
+ RT, ClassT const, A, B, C, D, E>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E
+>
+inline bound_member<RT, ClassT const, A, B, C, D, E>
+bind(ClassT const* obj,RT(ClassT::*fptr)(A, B, C, D, E) const)
+{
+ return bound_member<
+ RT, ClassT const, A, B, C, D, E>(obj,fptr);
+}
+
+#if PHOENIX_LIMIT > 6
+///////////////////////////////////////////////////////////////////////////////
+//
+// Bound member function binder (specialization for 6 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F
+>
+struct bound_member_action<RT, ClassT,
+ A, B, C, D, E, F, nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+#endif
+ nil_t // Unused
+> {
+
+ typedef RT result_type;
+ typedef RT(ClassT::*mf)(A, B, C, D, E, F);
+ typedef RT(ClassT::*cmf)(A, B, C, D, E, F) const;
+ typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+ mem_func_ptr_t;
+
+ template <
+ typename A_, typename B_, typename C_, typename D_,
+ typename E_, typename F_
+ >
+ struct result { typedef result_type type; };
+
+ template <typename CT>
+ bound_member_action(CT & obj_, mem_func_ptr_t fptr_)
+ : obj(impl::as_ptr<CT>::get(obj_)), fptr(fptr_) {}
+
+ result_type operator()(
+ A a, B b, C c, D d, E e, F f
+ ) const
+ { return (obj->*fptr)(a, b, c, d, e, f); }
+
+ typename impl::as_ptr<ClassT>::pointer_type obj;
+ mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F
+>
+inline bound_member<RT, ClassT, A, B, C, D, E, F>
+bind(ClassT & obj,RT(ClassT::*fptr)(A, B, C, D, E, F))
+{
+ return bound_member<
+ RT, ClassT, A, B, C, D, E, F>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F
+>
+inline bound_member<RT, ClassT, A, B, C, D, E, F>
+bind(ClassT * obj,RT(ClassT::*fptr)(A, B, C, D, E, F))
+{
+ return bound_member<
+ RT, ClassT, A, B, C, D, E, F>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F
+>
+inline bound_member<RT, ClassT const, A, B, C, D, E, F>
+bind(ClassT const& obj,RT(ClassT::*fptr)(A, B, C, D, E, F) const)
+{
+ return bound_member<
+ RT, ClassT const, A, B, C, D, E, F>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F
+>
+inline bound_member<RT, ClassT const, A, B, C, D, E, F>
+bind(ClassT const* obj,RT(ClassT::*fptr)(A, B, C, D, E, F) const)
+{
+ return bound_member<
+ RT, ClassT const, A, B, C, D, E, F>(obj,fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Bound member function binder (specialization for 7 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G
+>
+struct bound_member_action<RT, ClassT,
+ A, B, C, D, E, F, G, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+#endif
+ nil_t // Unused
+> {
+
+ typedef RT result_type;
+ typedef RT(ClassT::*mf)(A, B, C, D, E, F, G);
+ typedef RT(ClassT::*cmf)(A, B, C, D, E, F, G) const;
+ typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+ mem_func_ptr_t;
+
+ template <
+ typename A_, typename B_, typename C_, typename D_,
+ typename E_, typename F_, typename G_
+ >
+ struct result { typedef result_type type; };
+
+ template <typename CT>
+ bound_member_action(CT & obj_, mem_func_ptr_t fptr_)
+ : obj(impl::as_ptr<CT>::get(obj_)), fptr(fptr_) {}
+
+ result_type operator()(
+ A a, B b, C c, D d, E e, F f, G g
+ ) const
+ { return (obj->*fptr)(a, b, c, d, e, f, g); }
+
+ typename impl::as_ptr<ClassT>::pointer_type obj;
+ mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G
+>
+inline bound_member<RT, ClassT, A, B, C, D, E, F, G>
+bind(ClassT & obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G))
+{
+ return bound_member<
+ RT, ClassT, A, B, C, D, E, F, G>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G
+>
+inline bound_member<RT, ClassT, A, B, C, D, E, F, G>
+bind(ClassT * obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G))
+{
+ return bound_member<
+ RT, ClassT, A, B, C, D, E, F, G>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G
+>
+inline bound_member<RT, ClassT const, A, B, C, D, E, F, G>
+bind(ClassT const& obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G) const)
+{
+ return bound_member<
+ RT, ClassT const, A, B, C, D, E, F, G>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G
+>
+inline bound_member<RT, ClassT const, A, B, C, D, E, F, G>
+bind(ClassT const* obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G) const)
+{
+ return bound_member<
+ RT, ClassT const, A, B, C, D, E, F, G>(obj,fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Bound member function binder (specialization for 8 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H
+>
+struct bound_member_action<RT, ClassT,
+ A, B, C, D, E, F, G, H, nil_t,
+#if PHOENIX_LIMIT > 9
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+#endif
+ nil_t // Unused
+> {
+
+ typedef RT result_type;
+ typedef RT(ClassT::*mf)(A, B, C, D, E, F, G, H);
+ typedef RT(ClassT::*cmf)(A, B, C, D, E, F, G, H) const;
+ typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+ mem_func_ptr_t;
+
+ template <
+ typename A_, typename B_, typename C_, typename D_,
+ typename E_, typename F_, typename G_, typename H_
+ >
+ struct result { typedef result_type type; };
+
+ template <typename CT>
+ bound_member_action(CT & obj_, mem_func_ptr_t fptr_)
+ : obj(impl::as_ptr<CT>::get(obj_)), fptr(fptr_) {}
+
+ result_type operator()(
+ A a, B b, C c, D d, E e, F f, G g, H h
+ ) const
+ { return (obj->*fptr)(a, b, c, d, e, f, g, h); }
+
+ typename impl::as_ptr<ClassT>::pointer_type obj;
+ mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H
+>
+inline bound_member<RT, ClassT, A, B, C, D, E, F, G, H>
+bind(ClassT & obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H))
+{
+ return bound_member<
+ RT, ClassT, A, B, C, D, E, F, G, H>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H
+>
+inline bound_member<RT, ClassT, A, B, C, D, E, F, G, H>
+bind(ClassT * obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H))
+{
+ return bound_member<
+ RT, ClassT, A, B, C, D, E, F, G, H>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H
+>
+inline bound_member<RT, ClassT const, A, B, C, D, E, F, G, H>
+bind(ClassT const& obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H) const)
+{
+ return bound_member<
+ RT, ClassT const, A, B, C, D, E, F, G, H>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H
+>
+inline bound_member<RT, ClassT const, A, B, C, D, E, F, G, H>
+bind(ClassT const* obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H) const)
+{
+ return bound_member<
+ RT, ClassT const, A, B, C, D, E, F, G, H>(obj,fptr);
+}
+
+#if PHOENIX_LIMIT > 9
+///////////////////////////////////////////////////////////////////////////////
+//
+// Bound member function binder (specialization for 9 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I
+>
+struct bound_member_action<RT, ClassT,
+ A, B, C, D, E, F, G, H, I, nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+ nil_t // Unused
+> {
+
+ typedef RT result_type;
+ typedef RT(ClassT::*mf)(A, B, C, D, E, F, G, H, I);
+ typedef RT(ClassT::*cmf)(A, B, C, D, E, F, G, H, I) const;
+ typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+ mem_func_ptr_t;
+
+ template <
+ typename A_, typename B_, typename C_, typename D_,
+ typename E_, typename F_, typename G_, typename H_, typename I_
+ >
+ struct result { typedef result_type type; };
+
+ template <typename CT>
+ bound_member_action(CT & obj_, mem_func_ptr_t fptr_)
+ : obj(impl::as_ptr<CT>::get(obj_)), fptr(fptr_) {}
+
+ result_type operator()(
+ A a, B b, C c, D d, E e, F f, G g, H h, I i
+ ) const
+ { return (obj->*fptr)(a, b, c, d, e, f, g, h, i); }
+
+ typename impl::as_ptr<ClassT>::pointer_type obj;
+ mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I
+>
+inline bound_member<RT, ClassT, A, B, C, D, E, F, G, H, I>
+bind(ClassT & obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I))
+{
+ return bound_member<
+ RT, ClassT, A, B, C, D, E, F, G, H, I>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I
+>
+inline bound_member<RT, ClassT, A, B, C, D, E, F, G, H, I>
+bind(ClassT * obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I))
+{
+ return bound_member<
+ RT, ClassT, A, B, C, D, E, F, G, H, I>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I
+>
+inline bound_member<RT, ClassT const, A, B, C, D, E, F, G, H, I>
+bind(ClassT const& obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I) const)
+{
+ return bound_member<
+ RT, ClassT const, A, B, C, D, E, F, G, H, I>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I
+>
+inline bound_member<RT, ClassT const, A, B, C, D, E, F, G, H, I>
+bind(ClassT const* obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I) const)
+{
+ return bound_member<
+ RT, ClassT const, A, B, C, D, E, F, G, H, I>(obj,fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Bound member function binder (specialization for 10 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I,
+ typename J
+>
+struct bound_member_action<RT, ClassT,
+ A, B, C, D, E, F, G, H, I, J, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+ nil_t // Unused
+> {
+
+ typedef RT result_type;
+ typedef RT(ClassT::*mf)(A, B, C, D, E, F, G, H, I, J);
+ typedef RT(ClassT::*cmf)(A, B, C, D, E, F, G, H, I, J) const;
+ typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+ mem_func_ptr_t;
+
+ template <
+ typename A_, typename B_, typename C_, typename D_,
+ typename E_, typename F_, typename G_, typename H_, typename I_,
+ typename J_
+ >
+ struct result { typedef result_type type; };
+
+ template <typename CT>
+ bound_member_action(CT & obj_, mem_func_ptr_t fptr_)
+ : obj(impl::as_ptr<CT>::get(obj_)), fptr(fptr_) {}
+
+ result_type operator()(
+ A a, B b, C c, D d, E e, F f, G g, H h, I i, J j
+ ) const
+ {
+ return (obj->*fptr)(a, b, c, d, e, f, g, h, i, j);
+ }
+
+ typename impl::as_ptr<ClassT>::pointer_type obj;
+ mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I,
+ typename J
+>
+inline bound_member<RT, ClassT, A, B, C, D, E, F, G, H, I, J>
+bind(ClassT & obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J))
+{
+ return bound_member<
+ RT, ClassT, A, B, C, D, E, F, G, H, I, J>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I,
+ typename J
+>
+inline bound_member<RT, ClassT, A, B, C, D, E, F, G, H, I, J>
+bind(ClassT * obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J))
+{
+ return bound_member<
+ RT, ClassT, A, B, C, D, E, F, G, H, I, J>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I,
+ typename J
+>
+inline bound_member<RT, ClassT const, A, B, C, D, E, F, G, H, I, J>
+bind(ClassT const& obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J) const)
+{
+ return bound_member<
+ RT, ClassT const, A, B, C, D, E, F, G, H, I, J>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I,
+ typename J
+>
+inline bound_member<RT, ClassT const, A, B, C, D, E, F, G, H, I, J>
+bind(ClassT const* obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J) const)
+{
+ return bound_member<
+ RT, ClassT const, A, B, C, D, E, F, G, H, I, J>(obj,fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Bound member function binder (specialization for 11 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I,
+ typename J, typename K
+>
+struct bound_member_action<RT, ClassT,
+ A, B, C, D, E, F, G, H, I, J, K, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+ nil_t // Unused
+> {
+
+ typedef RT result_type;
+ typedef RT(ClassT::*mf)(A, B, C, D, E, F, G, H, I, J, K);
+ typedef RT(ClassT::*cmf)(A, B, C, D, E, F, G, H, I, J, K) const;
+ typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+ mem_func_ptr_t;
+
+ template <
+ typename A_, typename B_, typename C_, typename D_,
+ typename E_, typename F_, typename G_, typename H_, typename I_,
+ typename J_, typename K_
+ >
+ struct result { typedef result_type type; };
+
+ template <typename CT>
+ bound_member_action(CT & obj_, mem_func_ptr_t fptr_)
+ : obj(impl::as_ptr<CT>::get(obj_)), fptr(fptr_) {}
+
+ result_type operator()(
+ A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k
+ ) const
+ {
+ return (obj->*fptr)(a, b, c, d, e, f, g, h, i, j, k);
+ }
+
+ typename impl::as_ptr<ClassT>::pointer_type obj;
+ mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I,
+ typename J, typename K
+>
+inline bound_member<RT, ClassT, A, B, C, D, E, F, G, H, I, J, K>
+bind(ClassT & obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K))
+{
+ return bound_member<
+ RT, ClassT, A, B, C, D, E, F, G, H, I, J, K>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I,
+ typename J, typename K
+>
+inline bound_member<RT, ClassT, A, B, C, D, E, F, G, H, I, J, K>
+bind(ClassT * obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K))
+{
+ return bound_member<
+ RT, ClassT, A, B, C, D, E, F, G, H, I, J, K>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I,
+ typename J, typename K
+>
+inline bound_member<RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K>
+bind(ClassT const& obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K) const)
+{
+ return bound_member<
+ RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I,
+ typename J, typename K
+>
+inline bound_member<RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K>
+bind(ClassT const* obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K) const)
+{
+ return bound_member<
+ RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K>(obj,fptr);
+}
+
+#if PHOENIX_LIMIT > 12
+///////////////////////////////////////////////////////////////////////////////
+//
+// Bound member function binder (specialization for 12 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I,
+ typename J, typename K, typename L
+>
+struct bound_member_action<RT, ClassT,
+ A, B, C, D, E, F, G, H, I, J, K, L, nil_t, nil_t, nil_t, nil_t> {
+
+ typedef RT result_type;
+ typedef RT(ClassT::*mf)(A, B, C, D, E, F, G, H, I, J, K, L);
+ typedef RT(ClassT::*cmf)(A, B, C, D, E, F, G, H, I, J, K, L) const;
+ typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+ mem_func_ptr_t;
+
+ template <
+ typename A_, typename B_, typename C_, typename D_,
+ typename E_, typename F_, typename G_, typename H_, typename I_,
+ typename J_, typename K_, typename L_
+ >
+ struct result { typedef result_type type; };
+
+ template <typename CT>
+ bound_member_action(CT & obj_, mem_func_ptr_t fptr_)
+ : obj(impl::as_ptr<CT>::get(obj_)), fptr(fptr_) {}
+
+ result_type operator()(
+ A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k, L l
+ ) const
+ {
+ return (obj->*fptr)(a, b, c, d, e, f, g, h, i, j, k, l);
+ }
+
+ typename impl::as_ptr<ClassT>::pointer_type obj;
+ mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I,
+ typename J, typename K, typename L
+>
+inline bound_member<RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L>
+bind(ClassT & obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L))
+{
+ return bound_member<
+ RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I,
+ typename J, typename K, typename L
+>
+inline bound_member<RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L>
+bind(ClassT * obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L))
+{
+ return bound_member<
+ RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I,
+ typename J, typename K, typename L
+>
+inline bound_member<RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L>
+bind(ClassT const& obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L) const)
+{
+ return bound_member<
+ RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I,
+ typename J, typename K, typename L
+>
+inline bound_member<RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L>
+bind(ClassT const* obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L) const)
+{
+ return bound_member<
+ RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L>(obj,fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Bound member function binder (specialization for 13 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I,
+ typename J, typename K, typename L, typename M
+>
+struct bound_member_action<RT, ClassT,
+ A, B, C, D, E, F, G, H, I, J, K, L, M, nil_t, nil_t, nil_t> {
+
+ typedef RT result_type;
+ typedef RT(ClassT::*mf)(A, B, C, D, E, F, G, H, I, J, K, L, M);
+ typedef RT(ClassT::*cmf)(A, B, C, D, E, F, G, H, I, J, K, L, M) const;
+ typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+ mem_func_ptr_t;
+
+ template <
+ typename A_, typename B_, typename C_, typename D_,
+ typename E_, typename F_, typename G_, typename H_, typename I_,
+ typename J_, typename K_, typename L_, typename M_
+ >
+ struct result { typedef result_type type; };
+
+ template <typename CT>
+ bound_member_action(CT & obj_, mem_func_ptr_t fptr_)
+ : obj(impl::as_ptr<CT>::get(obj_)), fptr(fptr_) {}
+
+ result_type operator()(
+ A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k, L l, M m
+ ) const
+ {
+ return (obj->*fptr)(a, b, c, d, e, f, g, h, i, j, k, l, m);
+ }
+
+ typename impl::as_ptr<ClassT>::pointer_type obj;
+ mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I,
+ typename J, typename K, typename L, typename M
+>
+inline bound_member<RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L, M>
+bind(ClassT & obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M))
+{
+ return bound_member<
+ RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L, M>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I,
+ typename J, typename K, typename L, typename M
+>
+inline bound_member<RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L, M>
+bind(ClassT * obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M))
+{
+ return bound_member<
+ RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L, M>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I,
+ typename J, typename K, typename L, typename M
+>
+inline bound_member<RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L, M>
+bind(ClassT const& obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M) const)
+{
+ return bound_member<
+ RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L, M>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I,
+ typename J, typename K, typename L, typename M
+>
+inline bound_member<RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L, M>
+bind(ClassT const* obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M) const)
+{
+ return bound_member<
+ RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L, M>(obj,fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Bound member function binder (specialization for 14 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I,
+ typename J, typename K, typename L, typename M, typename N
+>
+struct bound_member_action<RT, ClassT,
+ A, B, C, D, E, F, G, H, I, J, K, L, M, N, nil_t, nil_t> {
+
+ typedef RT result_type;
+ typedef RT(ClassT::*mf)(A, B, C, D, E, F, G, H, I, J, K, L, M, N);
+ typedef RT(ClassT::*cmf)(A, B, C, D, E, F, G, H, I, J, K, L, M, N) const;
+ typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+ mem_func_ptr_t;
+
+ template <
+ typename A_, typename B_, typename C_, typename D_,
+ typename E_, typename F_, typename G_, typename H_, typename I_,
+ typename J_, typename K_, typename L_, typename M_, typename N_
+ >
+ struct result { typedef result_type type; };
+
+ template <typename CT>
+ bound_member_action(CT & obj_, mem_func_ptr_t fptr_)
+ : obj(impl::as_ptr<CT>::get(obj_)), fptr(fptr_) {}
+
+ result_type operator()(
+ A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k, L l, M m, N n
+ ) const
+ {
+ return (obj->*fptr)(a, b, c, d, e, f, g, h, i, j, k, l, m, n);
+ }
+
+ typename impl::as_ptr<ClassT>::pointer_type obj;
+ mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I,
+ typename J, typename K, typename L, typename M, typename N
+>
+inline bound_member<RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L, M, N>
+bind(ClassT & obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M, N))
+{
+ return bound_member<
+ RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L, M, N>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I,
+ typename J, typename K, typename L, typename M, typename N
+>
+inline bound_member<RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L, M, N>
+bind(ClassT * obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M, N))
+{
+ return bound_member<
+ RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L, M, N>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I,
+ typename J, typename K, typename L, typename M, typename N
+>
+inline bound_member<RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L, M, N>
+bind(ClassT const& obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M, N) const)
+{
+ return bound_member<
+ RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L, M, N>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I,
+ typename J, typename K, typename L, typename M, typename N
+>
+inline bound_member<RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L, M, N>
+bind(ClassT const* obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M, N) const)
+{
+ return bound_member<
+ RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L, M, N>(obj,fptr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Bound member function binder (specialization for 15 args)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I,
+ typename J, typename K, typename L, typename M, typename N,
+ typename O
+>
+struct bound_member_action<RT, ClassT,
+ A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, nil_t> {
+
+ typedef RT result_type;
+ typedef RT(ClassT::*mf)(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O);
+ typedef RT(ClassT::*cmf)(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O) const;
+ typedef typename boost::mpl::if_<boost::is_const<ClassT>, cmf, mf>::type
+ mem_func_ptr_t;
+
+ template <
+ typename A_, typename B_, typename C_, typename D_,
+ typename E_, typename F_, typename G_, typename H_, typename I_,
+ typename J_, typename K_, typename L_, typename M_, typename N_,
+ typename O_
+ >
+ struct result { typedef result_type type; };
+
+ template <typename CT>
+ bound_member_action(CT & obj_, mem_func_ptr_t fptr_)
+ : obj(impl::as_ptr<CT>::get(obj_)), fptr(fptr_) {}
+
+ result_type operator()(
+ A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k, L l, M m, N n, O o
+ ) const
+ {
+ return (obj->*fptr)(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o);
+ }
+
+ typename impl::as_ptr<ClassT>::pointer_type obj;
+ mem_func_ptr_t fptr;
+};
+
+//////////////////////////////////
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I,
+ typename J, typename K, typename L, typename M, typename N,
+ typename O
+>
+inline bound_member<RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O>
+bind(ClassT & obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O))
+{
+ return bound_member<
+ RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I,
+ typename J, typename K, typename L, typename M, typename N,
+ typename O
+>
+inline bound_member<RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O>
+bind(ClassT * obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O))
+{
+ return bound_member<
+ RT, ClassT, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I,
+ typename J, typename K, typename L, typename M, typename N,
+ typename O
+>
+inline bound_member<RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O>
+bind(ClassT const& obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O) const)
+{
+ return bound_member<
+ RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O>(obj,fptr);
+}
+
+template <typename RT, typename ClassT,
+ typename A, typename B, typename C, typename D,
+ typename E, typename F, typename G, typename H, typename I,
+ typename J, typename K, typename L, typename M, typename N,
+ typename O
+>
+inline bound_member<RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O>
+bind(ClassT const* obj,RT(ClassT::*fptr)(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O) const)
+{
+ return bound_member<
+ RT, ClassT const, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O>(obj,fptr);
+}
+
+#endif
+#endif
+#endif
+#endif
+
+} // namespace phoenix
+
+#endif
diff --git a/boost/boost/spirit/phoenix/casts.hpp b/boost/boost/spirit/phoenix/casts.hpp
new file mode 100644
index 00000000000..3782e9f8b4e
--- /dev/null
+++ b/boost/boost/spirit/phoenix/casts.hpp
@@ -0,0 +1,1471 @@
+/*=============================================================================
+ Phoenix V1.2.1
+ Copyright (c) 2001-2003 Joel de Guzman
+ Copyright (c) 2001-2003 Hartmut Kaiser
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+
+#ifndef PHOENIX_CASTS_HPP
+#define PHOENIX_CASTS_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/phoenix/actor.hpp>
+#include <boost/spirit/phoenix/composite.hpp>
+#include <boost/static_assert.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace phoenix {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Phoenix predefined maximum construct_ limit. This limit defines the maximum
+// number of parameters supported for calles to the set of construct_ template
+// functions (lazy object construction, see below). This number defaults to 3.
+// The actual maximum is rounded up in multiples of 3. Thus, if this value
+// is 4, the actual limit is 6. The ultimate maximum limit in this
+// implementation is 15.
+// PHOENIX_CONSTRUCT_LIMIT should NOT be greater than PHOENIX_LIMIT!
+
+#if !defined(PHOENIX_CONSTRUCT_LIMIT)
+#define PHOENIX_CONSTRUCT_LIMIT PHOENIX_LIMIT
+#endif
+
+// ensure PHOENIX_CONSTRUCT_LIMIT <= PHOENIX_LIMIT
+BOOST_STATIC_ASSERT(PHOENIX_CONSTRUCT_LIMIT <= PHOENIX_LIMIT);
+
+// ensure PHOENIX_CONSTRUCT_LIMIT <= 15
+BOOST_STATIC_ASSERT(PHOENIX_CONSTRUCT_LIMIT <= 15);
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Lazy C++ casts
+//
+// The set of lazy C++ cast template classes and functions provide a way
+// of lazily casting certain type to another during parsing.
+// The lazy C++ templates are (syntactically) used very much like
+// the well known C++ casts:
+//
+// A *a = static_cast_<A *>(...actor returning a convertible type...);
+//
+// where the given parameter should be an actor, which eval() function
+// returns a convertible type.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename T, typename A>
+struct static_cast_l {
+
+ template <typename TupleT>
+ struct result { typedef T type; };
+
+ static_cast_l(A const& a_)
+ : a(a_) {}
+
+ template <typename TupleT>
+ T
+ eval(TupleT const& args) const
+ {
+ return static_cast<T>(a.eval(args));
+ }
+
+ A a;
+};
+
+//////////////////////////////////
+template <typename T, typename BaseAT>
+inline actor<static_cast_l<T, BaseAT> >
+static_cast_(actor<BaseAT> const& a)
+{
+ typedef static_cast_l<T, BaseAT> cast_t;
+ return actor<cast_t>(cast_t(a));
+}
+
+//////////////////////////////////
+template <typename T, typename A>
+struct dynamic_cast_l {
+
+ template <typename TupleT>
+ struct result { typedef T type; };
+
+ dynamic_cast_l(A const& a_)
+ : a(a_) {}
+
+ template <typename TupleT>
+ T
+ eval(TupleT const& args) const
+ {
+ return dynamic_cast<T>(a.eval(args));
+ }
+
+ A a;
+};
+
+//////////////////////////////////
+template <typename T, typename BaseAT>
+inline actor<dynamic_cast_l<T, BaseAT> >
+dynamic_cast_(actor<BaseAT> const& a)
+{
+ typedef dynamic_cast_l<T, BaseAT> cast_t;
+ return actor<cast_t>(cast_t(a));
+}
+
+//////////////////////////////////
+template <typename T, typename A>
+struct reinterpret_cast_l {
+
+ template <typename TupleT>
+ struct result { typedef T type; };
+
+ reinterpret_cast_l(A const& a_)
+ : a(a_) {}
+
+ template <typename TupleT>
+ T
+ eval(TupleT const& args) const
+ {
+ return reinterpret_cast<T>(a.eval(args));
+ }
+
+ A a;
+};
+
+//////////////////////////////////
+template <typename T, typename BaseAT>
+inline actor<reinterpret_cast_l<T, BaseAT> >
+reinterpret_cast_(actor<BaseAT> const& a)
+{
+ typedef reinterpret_cast_l<T, BaseAT> cast_t;
+ return actor<cast_t>(cast_t(a));
+}
+
+//////////////////////////////////
+template <typename T, typename A>
+struct const_cast_l {
+
+ template <typename TupleT>
+ struct result { typedef T type; };
+
+ const_cast_l(A const& a_)
+ : a(a_) {}
+
+ template <typename TupleT>
+ T
+ eval(TupleT const& args) const
+ {
+ return const_cast<T>(a.eval(args));
+ }
+
+ A a;
+};
+
+//////////////////////////////////
+template <typename T, typename BaseAT>
+inline actor<const_cast_l<T, BaseAT> >
+const_cast_(actor<BaseAT> const& a)
+{
+ typedef const_cast_l<T, BaseAT> cast_t;
+ return actor<cast_t>(cast_t(a));
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// construct_
+//
+// Lazy object construction
+//
+// The set of construct_<> template classes and functions provide a way
+// of lazily constructing certain object from a arbitrary set of
+// actors during parsing.
+// The construct_ templates are (syntactically) used very much like
+// the well known C++ casts:
+//
+// A a = construct_<A>(...arbitrary list of actors...);
+//
+// where the given parameters are submitted as parameters to the
+// contructor of the object of type A. (This certainly implies, that
+// type A has a constructor with a fitting set of parameter types
+// defined.)
+//
+// The maximum number of needed parameters is controlled through the
+// preprocessor constant PHOENIX_CONSTRUCT_LIMIT. Note though, that this
+// limit should not be greater than PHOENIX_LIMIT.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename T>
+struct construct_l_0 {
+ typedef T result_type;
+
+ T operator()() const {
+ return T();
+ }
+};
+
+
+template <typename T>
+struct construct_l {
+
+ template <
+ typename A
+ , typename B
+ , typename C
+
+#if PHOENIX_CONSTRUCT_LIMIT > 3
+ , typename D
+ , typename E
+ , typename F
+
+#if PHOENIX_CONSTRUCT_LIMIT > 6
+ , typename G
+ , typename H
+ , typename I
+
+#if PHOENIX_CONSTRUCT_LIMIT > 9
+ , typename J
+ , typename K
+ , typename L
+
+#if PHOENIX_CONSTRUCT_LIMIT > 12
+ , typename M
+ , typename N
+ , typename O
+#endif
+#endif
+#endif
+#endif
+ >
+ struct result { typedef T type; };
+
+ T operator()() const
+ {
+ return T();
+ }
+
+ template <typename A>
+ T operator()(A const& a) const
+ {
+ T t(a);
+ return t;
+ }
+
+ template <typename A, typename B>
+ T operator()(A const& a, B const& b) const
+ {
+ T t(a, b);
+ return t;
+ }
+
+ template <typename A, typename B, typename C>
+ T operator()(A const& a, B const& b, C const& c) const
+ {
+ T t(a, b, c);
+ return t;
+ }
+
+#if PHOENIX_CONSTRUCT_LIMIT > 3
+ template <
+ typename A, typename B, typename C, typename D
+ >
+ T operator()(
+ A const& a, B const& b, C const& c, D const& d) const
+ {
+ T t(a, b, c, d);
+ return t;
+ }
+
+ template <
+ typename A, typename B, typename C, typename D, typename E
+ >
+ T operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e) const
+ {
+ T t(a, b, c, d, e);
+ return t;
+ }
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F
+ >
+ T operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f) const
+ {
+ T t(a, b, c, d, e, f);
+ return t;
+ }
+
+#if PHOENIX_CONSTRUCT_LIMIT > 6
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G
+ >
+ T operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g) const
+ {
+ T t(a, b, c, d, e, f, g);
+ return t;
+ }
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H
+ >
+ T operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h) const
+ {
+ T t(a, b, c, d, e, f, g, h);
+ return t;
+ }
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I
+ >
+ T operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i) const
+ {
+ T t(a, b, c, d, e, f, g, h, i);
+ return t;
+ }
+
+#if PHOENIX_CONSTRUCT_LIMIT > 9
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J
+ >
+ T operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i, J const& j) const
+ {
+ T t(a, b, c, d, e, f, g, h, i, j);
+ return t;
+ }
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K
+ >
+ T operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i, J const& j,
+ K const& k) const
+ {
+ T t(a, b, c, d, e, f, g, h, i, j, k);
+ return t;
+ }
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L
+ >
+ T operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i, J const& j,
+ K const& k, L const& l) const
+ {
+ T t(a, b, c, d, e, f, g, h, i, j, k, l);
+ return t;
+ }
+
+#if PHOENIX_CONSTRUCT_LIMIT > 12
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L, typename M
+ >
+ T operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i, J const& j,
+ K const& k, L const& l, M const& m) const
+ {
+ T t(a, b, c, d, e, f, g, h, i, j, k, l, m);
+ return t;
+ }
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L, typename M, typename N
+ >
+ T operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i, J const& j,
+ K const& k, L const& l, M const& m, N const& n) const
+ {
+ T t(a, b, c, d, e, f, g, h, i, j, k, l, m, n);
+ return t;
+ }
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L, typename M, typename N, typename O
+ >
+ T operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i, J const& j,
+ K const& k, L const& l, M const& m, N const& n, O const& o) const
+ {
+ T t(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o);
+ return t;
+ }
+
+#endif
+#endif
+#endif
+#endif
+};
+
+
+template <typename T>
+struct construct_1 {
+
+ template <
+ typename A
+ >
+ struct result { typedef T type; };
+
+ template <typename A>
+ T operator()(A const& a) const
+ {
+ T t(a);
+ return t;
+ }
+
+};
+
+template <typename T>
+struct construct_2 {
+
+ template <
+ typename A
+ , typename B
+ >
+ struct result { typedef T type; };
+
+ template <typename A, typename B>
+ T operator()(A const& a, B const& b) const
+ {
+ T t(a, b);
+ return t;
+ }
+
+};
+
+template <typename T>
+struct construct_3 {
+
+ template <
+ typename A
+ , typename B
+ , typename C
+ >
+ struct result { typedef T type; };
+
+ template <typename A, typename B, typename C>
+ T operator()(A const& a, B const& b, C const& c) const
+ {
+ T t(a, b, c);
+ return t;
+ }
+};
+
+#if PHOENIX_CONSTRUCT_LIMIT > 3
+template <typename T>
+struct construct_4 {
+
+ template <
+ typename A
+ , typename B
+ , typename C
+ , typename D
+ >
+ struct result { typedef T type; };
+
+ template <
+ typename A, typename B, typename C, typename D
+ >
+ T operator()(
+ A const& a, B const& b, C const& c, D const& d) const
+ {
+ T t(a, b, c, d);
+ return t;
+ }
+};
+
+
+template <typename T>
+struct construct_5 {
+
+ template <
+ typename A
+ , typename B
+ , typename C
+ , typename D
+ , typename E
+ >
+ struct result { typedef T type; };
+
+ template <
+ typename A, typename B, typename C, typename D, typename E
+ >
+ T operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e) const
+ {
+ T t(a, b, c, d, e);
+ return t;
+ }
+};
+
+
+template <typename T>
+struct construct_6 {
+
+ template <
+ typename A
+ , typename B
+ , typename C
+ , typename D
+ , typename E
+ , typename F
+ >
+ struct result { typedef T type; };
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F
+ >
+ T operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f) const
+ {
+ T t(a, b, c, d, e, f);
+ return t;
+ }
+};
+#endif
+
+
+#if PHOENIX_CONSTRUCT_LIMIT > 6
+template <typename T>
+struct construct_7 {
+
+ template <
+ typename A
+ , typename B
+ , typename C
+ , typename D
+ , typename E
+ , typename F
+ , typename G
+ >
+ struct result { typedef T type; };
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G
+ >
+ T operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g) const
+ {
+ T t(a, b, c, d, e, f, g);
+ return t;
+ }
+};
+
+template <typename T>
+struct construct_8 {
+
+ template <
+ typename A
+ , typename B
+ , typename C
+ , typename D
+ , typename E
+ , typename F
+ , typename G
+ , typename H
+ >
+ struct result { typedef T type; };
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H
+ >
+ T operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h) const
+ {
+ T t(a, b, c, d, e, f, g, h);
+ return t;
+ }
+};
+
+template <typename T>
+struct construct_9 {
+
+ template <
+ typename A
+ , typename B
+ , typename C
+ , typename D
+ , typename E
+ , typename F
+ , typename G
+ , typename H
+ , typename I
+ >
+ struct result { typedef T type; };
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I
+ >
+ T operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i) const
+ {
+ T t(a, b, c, d, e, f, g, h, i);
+ return t;
+ }
+};
+#endif
+
+
+#if PHOENIX_CONSTRUCT_LIMIT > 9
+template <typename T>
+struct construct_10 {
+
+ template <
+ typename A
+ , typename B
+ , typename C
+ , typename D
+ , typename E
+ , typename F
+ , typename G
+ , typename H
+ , typename I
+ , typename J
+ >
+ struct result { typedef T type; };
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J
+ >
+ T operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i, J const& j) const
+ {
+ T t(a, b, c, d, e, f, g, h, i, j);
+ return t;
+ }
+};
+
+template <typename T>
+struct construct_11 {
+
+ template <
+ typename A
+ , typename B
+ , typename C
+ , typename D
+ , typename E
+ , typename F
+ , typename G
+ , typename H
+ , typename I
+ , typename J
+ , typename K
+ >
+ struct result { typedef T type; };
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K
+ >
+ T operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i, J const& j,
+ K const& k) const
+ {
+ T t(a, b, c, d, e, f, g, h, i, j, k);
+ return t;
+ }
+};
+
+template <typename T>
+struct construct_12 {
+
+ template <
+ typename A
+ , typename B
+ , typename C
+ , typename D
+ , typename E
+ , typename F
+ , typename G
+ , typename H
+ , typename I
+ , typename J
+ , typename K
+ , typename L
+ >
+ struct result { typedef T type; };
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L
+ >
+ T operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i, J const& j,
+ K const& k, L const& l) const
+ {
+ T t(a, b, c, d, f, e, g, h, i, j, k, l);
+ return t;
+ }
+};
+#endif
+
+#if PHOENIX_CONSTRUCT_LIMIT > 12
+template <typename T>
+struct construct_13 {
+
+ template <
+ typename A
+ , typename B
+ , typename C
+ , typename D
+ , typename E
+ , typename F
+ , typename G
+ , typename H
+ , typename I
+ , typename J
+ , typename K
+ , typename L
+ , typename M
+ >
+ struct result { typedef T type; };
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L, typename M
+ >
+ T operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i, J const& j,
+ K const& k, L const& l, M const& m) const
+ {
+ T t(a, b, c, d, e, f, g, h, i, j, k, l, m);
+ return t;
+ }
+};
+
+template <typename T>
+struct construct_14 {
+
+ template <
+ typename A
+ , typename B
+ , typename C
+ , typename D
+ , typename E
+ , typename F
+ , typename G
+ , typename H
+ , typename I
+ , typename J
+ , typename K
+ , typename L
+ , typename M
+ , typename N
+ >
+ struct result { typedef T type; };
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L, typename M, typename N
+ >
+ T operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i, J const& j,
+ K const& k, L const& l, M const& m, N const& n) const
+ {
+ T t(a, b, c, d, e, f, g, h, i, j, k, l, m, n);
+ return t;
+ }
+};
+
+template <typename T>
+struct construct_15 {
+
+ template <
+ typename A
+ , typename B
+ , typename C
+ , typename D
+ , typename E
+ , typename F
+ , typename G
+ , typename H
+ , typename I
+ , typename J
+ , typename K
+ , typename L
+ , typename M
+ , typename N
+ , typename O
+ >
+ struct result { typedef T type; };
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L, typename M, typename N, typename O
+ >
+ T operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i, J const& j,
+ K const& k, L const& l, M const& m, N const& n, O const& o) const
+ {
+ T t(a, b, c, d, f, e, g, h, i, j, k, l, m, n, o);
+ return t;
+ }
+};
+#endif
+
+
+#if defined(__BORLANDC__) || (defined(__MWERKS__) && (__MWERKS__ <= 0x3002))
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// The following specializations are needed because Borland and CodeWarrior
+// does not accept default template arguments in nested template classes in
+// classes (i.e construct_l::result)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename T, typename TupleT>
+struct composite0_result<construct_l_0<T>, TupleT> {
+
+ typedef T type;
+};
+
+//////////////////////////////////
+template <typename T, typename TupleT,
+ typename A>
+struct composite1_result<construct_l<T>, TupleT, A> {
+
+ typedef T type;
+};
+
+//////////////////////////////////
+template <typename T, typename TupleT,
+ typename A, typename B>
+struct composite2_result<construct_l<T>, TupleT, A, B> {
+
+ typedef T type;
+};
+
+//////////////////////////////////
+template <typename T, typename TupleT,
+ typename A, typename B, typename C>
+struct composite3_result<construct_l<T>, TupleT, A, B, C> {
+
+ typedef T type;
+};
+
+#if PHOENIX_LIMIT > 3
+//////////////////////////////////
+template <typename T, typename TupleT,
+ typename A, typename B, typename C, typename D>
+struct composite4_result<construct_l<T>, TupleT,
+ A, B, C, D> {
+
+ typedef T type;
+};
+
+//////////////////////////////////
+template <typename T, typename TupleT,
+ typename A, typename B, typename C, typename D, typename E>
+struct composite5_result<construct_l<T>, TupleT,
+ A, B, C, D, E> {
+
+ typedef T type;
+};
+
+//////////////////////////////////
+template <typename T, typename TupleT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F>
+struct composite6_result<construct_l<T>, TupleT,
+ A, B, C, D, E, F> {
+
+ typedef T type;
+};
+
+#if PHOENIX_LIMIT > 6
+//////////////////////////////////
+template <typename T, typename TupleT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G>
+struct composite7_result<construct_l<T>, TupleT,
+ A, B, C, D, E, F, G> {
+
+ typedef T type;
+};
+
+//////////////////////////////////
+template <typename T, typename TupleT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H>
+struct composite8_result<construct_l<T>, TupleT,
+ A, B, C, D, E, F, G, H> {
+
+ typedef T type;
+};
+
+//////////////////////////////////
+template <typename T, typename TupleT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I>
+struct composite9_result<construct_l<T>, TupleT,
+ A, B, C, D, E, F, G, H, I> {
+
+ typedef T type;
+};
+
+#if PHOENIX_LIMIT > 9
+//////////////////////////////////
+template <typename T, typename TupleT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J>
+struct composite10_result<construct_l<T>, TupleT,
+ A, B, C, D, E, F, G, H, I, J> {
+
+ typedef T type;
+};
+
+//////////////////////////////////
+template <typename T, typename TupleT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K>
+struct composite11_result<construct_l<T>, TupleT,
+ A, B, C, D, E, F, G, H, I, J, K> {
+
+ typedef T type;
+};
+
+//////////////////////////////////
+template <typename T, typename TupleT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L>
+struct composite12_result<construct_l<T>, TupleT,
+ A, B, C, D, E, F, G, H, I, J, K, L> {
+
+ typedef T type;
+};
+
+#if PHOENIX_LIMIT > 12
+//////////////////////////////////
+template <typename T, typename TupleT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L, typename M>
+struct composite13_result<construct_l<T>, TupleT,
+ A, B, C, D, E, F, G, H, I, J, K, L, M> {
+
+ typedef T type;
+};
+
+//////////////////////////////////
+template <typename T, typename TupleT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L, typename M, typename N>
+struct composite14_result<construct_l<T>, TupleT,
+ A, B, C, D, E, F, G, H, I, J, K, L, M, N> {
+
+ typedef T type;
+};
+
+//////////////////////////////////
+template <typename T, typename TupleT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L, typename M, typename N, typename O>
+struct composite15_result<construct_l<T>, TupleT,
+ A, B, C, D, E, F, G, H, I, J, K, L, M, N, O> {
+
+ typedef T type;
+};
+
+#endif
+#endif
+#endif
+#endif
+#endif
+
+//////////////////////////////////
+template <typename T>
+inline typename impl::make_composite<construct_l_0<T> >::type
+construct_()
+{
+ typedef impl::make_composite<construct_l_0<T> > make_composite_t;
+ typedef typename make_composite_t::type type_t;
+ typedef typename make_composite_t::composite_type composite_type_t;
+
+ return type_t(composite_type_t(construct_l_0<T>()));
+}
+
+//////////////////////////////////
+template <typename T, typename A>
+inline typename impl::make_composite<construct_1<T>, A>::type
+construct_(A const& a)
+{
+ typedef impl::make_composite<construct_1<T>, A> make_composite_t;
+ typedef typename make_composite_t::type type_t;
+ typedef typename make_composite_t::composite_type composite_type_t;
+
+ return type_t(composite_type_t(construct_1<T>(),
+ as_actor<A>::convert(a)
+ ));
+}
+
+//////////////////////////////////
+template <typename T, typename A, typename B>
+inline typename impl::make_composite<construct_2<T>, A, B>::type
+construct_(A const& a, B const& b)
+{
+ typedef impl::make_composite<construct_2<T>, A, B> make_composite_t;
+ typedef typename make_composite_t::type type_t;
+ typedef typename make_composite_t::composite_type composite_type_t;
+
+ return type_t(composite_type_t(construct_2<T>(),
+ as_actor<A>::convert(a),
+ as_actor<B>::convert(b)
+ ));
+}
+
+//////////////////////////////////
+template <typename T, typename A, typename B, typename C>
+inline typename impl::make_composite<construct_3<T>, A, B, C>::type
+construct_(A const& a, B const& b, C const& c)
+{
+ typedef impl::make_composite<construct_3<T>, A, B, C> make_composite_t;
+ typedef typename make_composite_t::type type_t;
+ typedef typename make_composite_t::composite_type composite_type_t;
+
+ return type_t(composite_type_t(construct_3<T>(),
+ as_actor<A>::convert(a),
+ as_actor<B>::convert(b),
+ as_actor<C>::convert(c)
+ ));
+}
+
+#if PHOENIX_CONSTRUCT_LIMIT > 3
+//////////////////////////////////
+template <
+ typename T, typename A, typename B, typename C, typename D
+>
+inline typename impl::make_composite<construct_4<T>, A, B, C, D>::type
+construct_(
+ A const& a, B const& b, C const& c, D const& d)
+{
+ typedef
+ impl::make_composite<construct_4<T>, A, B, C, D>
+ make_composite_t;
+ typedef typename make_composite_t::type type_t;
+ typedef typename make_composite_t::composite_type composite_type_t;
+
+ return type_t(composite_type_t(construct_4<T>(),
+ as_actor<A>::convert(a),
+ as_actor<B>::convert(b),
+ as_actor<C>::convert(c),
+ as_actor<D>::convert(d)
+ ));
+}
+
+//////////////////////////////////
+template <
+ typename T, typename A, typename B, typename C, typename D, typename E
+>
+inline typename impl::make_composite<construct_5<T>, A, B, C, D, E>::type
+construct_(
+ A const& a, B const& b, C const& c, D const& d, E const& e)
+{
+ typedef
+ impl::make_composite<construct_5<T>, A, B, C, D, E>
+ make_composite_t;
+ typedef typename make_composite_t::type type_t;
+ typedef typename make_composite_t::composite_type composite_type_t;
+
+ return type_t(composite_type_t(construct_5<T>(),
+ as_actor<A>::convert(a),
+ as_actor<B>::convert(b),
+ as_actor<C>::convert(c),
+ as_actor<D>::convert(d),
+ as_actor<E>::convert(e)
+ ));
+}
+
+//////////////////////////////////
+template <
+ typename T, typename A, typename B, typename C, typename D, typename E,
+ typename F
+>
+inline typename impl::make_composite<construct_6<T>, A, B, C, D, E, F>::type
+construct_(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f)
+{
+ typedef
+ impl::make_composite<construct_6<T>, A, B, C, D, E, F>
+ make_composite_t;
+ typedef typename make_composite_t::type type_t;
+ typedef typename make_composite_t::composite_type composite_type_t;
+
+ return type_t(composite_type_t(construct_6<T>(),
+ as_actor<A>::convert(a),
+ as_actor<B>::convert(b),
+ as_actor<C>::convert(c),
+ as_actor<D>::convert(d),
+ as_actor<E>::convert(e),
+ as_actor<F>::convert(f)
+ ));
+}
+
+#if PHOENIX_CONSTRUCT_LIMIT > 6
+//////////////////////////////////
+template <
+ typename T, typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G
+>
+inline typename impl::make_composite<construct_7<T>, A, B, C, D, E, F, G>::type
+construct_(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g)
+{
+ typedef
+ impl::make_composite<construct_7<T>, A, B, C, D, E, F, G>
+ make_composite_t;
+ typedef typename make_composite_t::type type_t;
+ typedef typename make_composite_t::composite_type composite_type_t;
+
+ return type_t(composite_type_t(construct_7<T>(),
+ as_actor<A>::convert(a),
+ as_actor<B>::convert(b),
+ as_actor<C>::convert(c),
+ as_actor<D>::convert(d),
+ as_actor<E>::convert(e),
+ as_actor<F>::convert(f),
+ as_actor<G>::convert(g)
+ ));
+}
+
+//////////////////////////////////
+template <
+ typename T, typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H
+>
+inline typename impl::make_composite<construct_8<T>, A, B, C, D, E, F, G, H>::type
+construct_(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h)
+{
+ typedef
+ impl::make_composite<construct_8<T>, A, B, C, D, E, F, G, H>
+ make_composite_t;
+ typedef typename make_composite_t::type type_t;
+ typedef typename make_composite_t::composite_type composite_type_t;
+
+ return type_t(composite_type_t(construct_8<T>(),
+ as_actor<A>::convert(a),
+ as_actor<B>::convert(b),
+ as_actor<C>::convert(c),
+ as_actor<D>::convert(d),
+ as_actor<E>::convert(e),
+ as_actor<F>::convert(f),
+ as_actor<G>::convert(g),
+ as_actor<H>::convert(h)
+ ));
+}
+
+//////////////////////////////////
+template <
+ typename T, typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I
+>
+inline typename impl::make_composite<construct_9<T>, A, B, C, D, E, F, G, H, I>::type
+construct_(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i)
+{
+ typedef
+ impl::make_composite<construct_9<T>, A, B, C, D, E, F, G, H, I>
+ make_composite_t;
+ typedef typename make_composite_t::type type_t;
+ typedef typename make_composite_t::composite_type composite_type_t;
+
+ return type_t(composite_type_t(construct_9<T>(),
+ as_actor<A>::convert(a),
+ as_actor<B>::convert(b),
+ as_actor<C>::convert(c),
+ as_actor<D>::convert(d),
+ as_actor<E>::convert(e),
+ as_actor<F>::convert(f),
+ as_actor<G>::convert(g),
+ as_actor<H>::convert(h),
+ as_actor<I>::convert(i)
+ ));
+}
+
+#if PHOENIX_CONSTRUCT_LIMIT > 9
+//////////////////////////////////
+template <
+ typename T, typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J
+>
+inline typename impl::make_composite<
+ construct_10<T>, A, B, C, D, E, F, G, H, I, J>::type
+construct_(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i, J const& j)
+{
+ typedef
+ impl::make_composite<
+ construct_10<T>, A, B, C, D, E, F, G, H, I, J
+ >
+ make_composite_t;
+ typedef typename make_composite_t::type type_t;
+ typedef typename make_composite_t::composite_type composite_type_t;
+
+ return type_t(composite_type_t(construct_10<T>(),
+ as_actor<A>::convert(a),
+ as_actor<B>::convert(b),
+ as_actor<C>::convert(c),
+ as_actor<D>::convert(d),
+ as_actor<E>::convert(e),
+ as_actor<F>::convert(f),
+ as_actor<G>::convert(g),
+ as_actor<H>::convert(h),
+ as_actor<I>::convert(i),
+ as_actor<J>::convert(j)
+ ));
+}
+
+//////////////////////////////////
+template <
+ typename T, typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J, typename K
+>
+inline typename impl::make_composite<
+ construct_11<T>, A, B, C, D, E, F, G, H, I, J, K>::type
+construct_(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i, J const& j,
+ K const& k)
+{
+ typedef
+ impl::make_composite<
+ construct_11<T>, A, B, C, D, E, F, G, H, I, J, K
+ >
+ make_composite_t;
+ typedef typename make_composite_t::type type_t;
+ typedef typename make_composite_t::composite_type composite_type_t;
+
+ return type_t(composite_type_t(construct_11<T>(),
+ as_actor<A>::convert(a),
+ as_actor<B>::convert(b),
+ as_actor<C>::convert(c),
+ as_actor<D>::convert(d),
+ as_actor<E>::convert(e),
+ as_actor<F>::convert(f),
+ as_actor<G>::convert(g),
+ as_actor<H>::convert(h),
+ as_actor<I>::convert(i),
+ as_actor<J>::convert(j),
+ as_actor<K>::convert(k)
+ ));
+}
+
+//////////////////////////////////
+template <
+ typename T, typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J, typename K,
+ typename L
+>
+inline typename impl::make_composite<
+ construct_12<T>, A, B, C, D, E, F, G, H, I, J, K, L>::type
+construct_(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i, J const& j,
+ K const& k, L const& l)
+{
+ typedef
+ impl::make_composite<
+ construct_12<T>, A, B, C, D, E, F, G, H, I, J, K, L
+ >
+ make_composite_t;
+ typedef typename make_composite_t::type type_t;
+ typedef typename make_composite_t::composite_type composite_type_t;
+
+ return type_t(composite_type_t(construct_12<T>(),
+ as_actor<A>::convert(a),
+ as_actor<B>::convert(b),
+ as_actor<C>::convert(c),
+ as_actor<D>::convert(d),
+ as_actor<E>::convert(e),
+ as_actor<F>::convert(f),
+ as_actor<G>::convert(g),
+ as_actor<H>::convert(h),
+ as_actor<I>::convert(i),
+ as_actor<J>::convert(j),
+ as_actor<K>::convert(k),
+ as_actor<L>::convert(l)
+ ));
+}
+
+#if PHOENIX_CONSTRUCT_LIMIT > 12
+//////////////////////////////////
+template <
+ typename T, typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J, typename K,
+ typename L, typename M
+>
+inline typename impl::make_composite<
+ construct_13<T>, A, B, C, D, E, F, G, H, I, J, K, L, M>::type
+construct_(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i, J const& j,
+ K const& k, L const& l, M const& m)
+{
+ typedef
+ impl::make_composite<
+ construct_13<T>, A, B, C, D, E, F, G, H, I, J, K, L, M
+ >
+ make_composite_t;
+ typedef typename make_composite_t::type type_t;
+ typedef typename make_composite_t::composite_type composite_type_t;
+
+ return type_t(composite_type_t(construct_13<T>(),
+ as_actor<A>::convert(a),
+ as_actor<B>::convert(b),
+ as_actor<C>::convert(c),
+ as_actor<D>::convert(d),
+ as_actor<E>::convert(e),
+ as_actor<F>::convert(f),
+ as_actor<G>::convert(g),
+ as_actor<H>::convert(h),
+ as_actor<I>::convert(i),
+ as_actor<J>::convert(j),
+ as_actor<K>::convert(k),
+ as_actor<L>::convert(l),
+ as_actor<M>::convert(m)
+ ));
+}
+
+//////////////////////////////////
+template <
+ typename T, typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J, typename K,
+ typename L, typename M, typename N
+>
+inline typename impl::make_composite<
+ construct_14<T>, A, B, C, D, E, F, G, H, I, J, K, L, M>::type
+construct_(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i, J const& j,
+ K const& k, L const& l, M const& m, N const& n)
+{
+ typedef
+ impl::make_composite<
+ construct_14<T>, A, B, C, D, E, F, G, H, I, J, K, L, M, N
+ >
+ make_composite_t;
+ typedef typename make_composite_t::type type_t;
+ typedef typename make_composite_t::composite_type composite_type_t;
+
+ return type_t(composite_type_t(construct_14<T>(),
+ as_actor<A>::convert(a),
+ as_actor<B>::convert(b),
+ as_actor<C>::convert(c),
+ as_actor<D>::convert(d),
+ as_actor<E>::convert(e),
+ as_actor<F>::convert(f),
+ as_actor<G>::convert(g),
+ as_actor<H>::convert(h),
+ as_actor<I>::convert(i),
+ as_actor<J>::convert(j),
+ as_actor<K>::convert(k),
+ as_actor<L>::convert(l),
+ as_actor<M>::convert(m),
+ as_actor<N>::convert(n)
+ ));
+}
+
+//////////////////////////////////
+template <
+ typename T, typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J, typename K,
+ typename L, typename M, typename N, typename O
+>
+inline typename impl::make_composite<
+ construct_15<T>, A, B, C, D, E, F, G, H, I, J, K, L, M, O>::type
+construct_(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i, J const& j,
+ K const& k, L const& l, M const& m, N const& n, O const& o)
+{
+ typedef
+ impl::make_composite<
+ construct_15<T>, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O
+ >
+ make_composite_t;
+ typedef typename make_composite_t::type type_t;
+ typedef typename make_composite_t::composite_type composite_type_t;
+
+ return type_t(composite_type_t(construct_15<T>(),
+ as_actor<A>::convert(a),
+ as_actor<B>::convert(b),
+ as_actor<C>::convert(c),
+ as_actor<D>::convert(d),
+ as_actor<E>::convert(e),
+ as_actor<F>::convert(f),
+ as_actor<G>::convert(g),
+ as_actor<H>::convert(h),
+ as_actor<I>::convert(i),
+ as_actor<J>::convert(j),
+ as_actor<K>::convert(k),
+ as_actor<L>::convert(l),
+ as_actor<M>::convert(m),
+ as_actor<N>::convert(n),
+ as_actor<O>::convert(o)
+ ));
+}
+
+#endif
+#endif
+#endif
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace phoenix
+
+#endif // PHOENIX_CASTS_HPP
diff --git a/boost/boost/spirit/phoenix/closures.hpp b/boost/boost/spirit/phoenix/closures.hpp
new file mode 100644
index 00000000000..fb707ba4698
--- /dev/null
+++ b/boost/boost/spirit/phoenix/closures.hpp
@@ -0,0 +1,440 @@
+/*=============================================================================
+ Phoenix V1.2.1
+ Copyright (c) 2001-2002 Joel de Guzman
+ MT code Copyright (c) 2002-2003 Martin Wille
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#ifndef PHOENIX_CLOSURES_HPP
+#define PHOENIX_CLOSURES_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/phoenix/actor.hpp>
+#include <cassert>
+
+#ifdef PHOENIX_THREADSAFE
+#include <boost/thread/tss.hpp>
+#include <boost/thread/once.hpp>
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace phoenix {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Adaptable closures
+//
+// The framework will not be complete without some form of closures
+// support. Closures encapsulate a stack frame where local
+// variables are created upon entering a function and destructed
+// upon exiting. Closures provide an environment for local
+// variables to reside. Closures can hold heterogeneous types.
+//
+// Phoenix closures are true hardware stack based closures. At the
+// very least, closures enable true reentrancy in lambda functions.
+// A closure provides access to a function stack frame where local
+// variables reside. Modeled after Pascal nested stack frames,
+// closures can be nested just like nested functions where code in
+// inner closures may access local variables from in-scope outer
+// closures (accessing inner scopes from outer scopes is an error
+// and will cause a run-time assertion failure).
+//
+// There are three (3) interacting classes:
+//
+// 1) closure:
+//
+// At the point of declaration, a closure does not yet create a
+// stack frame nor instantiate any variables. A closure declaration
+// declares the types and names[note] of the local variables. The
+// closure class is meant to be subclassed. It is the
+// responsibility of a closure subclass to supply the names for
+// each of the local variable in the closure. Example:
+//
+// struct my_closure : closure<int, string, double> {
+//
+// member1 num; // names the 1st (int) local variable
+// member2 message; // names the 2nd (string) local variable
+// member3 real; // names the 3rd (double) local variable
+// };
+//
+// my_closure clos;
+//
+// Now that we have a closure 'clos', its local variables can be
+// accessed lazily using the dot notation. Each qualified local
+// variable can be used just like any primitive actor (see
+// primitives.hpp). Examples:
+//
+// clos.num = 30
+// clos.message = arg1
+// clos.real = clos.num * 1e6
+//
+// The examples above are lazily evaluated. As usual, these
+// expressions return composite actors that will be evaluated
+// through a second function call invocation (see operators.hpp).
+// Each of the members (clos.xxx) is an actor. As such, applying
+// the operator() will reveal its identity:
+//
+// clos.num() // will return the current value of clos.num
+//
+// *** [note] Acknowledgement: Juan Carlos Arevalo-Baeza (JCAB)
+// introduced and initilally implemented the closure member names
+// that uses the dot notation.
+//
+// 2) closure_member
+//
+// The named local variables of closure 'clos' above are actually
+// closure members. The closure_member class is an actor and
+// conforms to its conceptual interface. member1..memberN are
+// predefined typedefs that correspond to each of the listed types
+// in the closure template parameters.
+//
+// 3) closure_frame
+//
+// When a closure member is finally evaluated, it should refer to
+// an actual instance of the variable in the hardware stack.
+// Without doing so, the process is not complete and the evaluated
+// member will result to an assertion failure. Remember that the
+// closure is just a declaration. The local variables that a
+// closure refers to must still be instantiated.
+//
+// The closure_frame class does the actual instantiation of the
+// local variables and links these variables with the closure and
+// all its members. There can be multiple instances of
+// closure_frames typically situated in the stack inside a
+// function. Each closure_frame instance initiates a stack frame
+// with a new set of closure local variables. Example:
+//
+// void foo()
+// {
+// closure_frame<my_closure> frame(clos);
+// /* do something */
+// }
+//
+// where 'clos' is an instance of our closure 'my_closure' above.
+// Take note that the usage above precludes locally declared
+// classes. If my_closure is a locally declared type, we can still
+// use its self_type as a paramater to closure_frame:
+//
+// closure_frame<my_closure::self_type> frame(clos);
+//
+// Upon instantiation, the closure_frame links the local variables
+// to the closure. The previous link to another closure_frame
+// instance created before is saved. Upon destruction, the
+// closure_frame unlinks itself from the closure and relinks the
+// preceding closure_frame prior to this instance.
+//
+// The local variables in the closure 'clos' above is default
+// constructed in the stack inside function 'foo'. Once 'foo' is
+// exited, all of these local variables are destructed. In some
+// cases, default construction is not desirable and we need to
+// initialize the local closure variables with some values. This
+// can be done by passing in the initializers in a compatible
+// tuple. A compatible tuple is one with the same number of
+// elements as the destination and where each element from the
+// destination can be constructed from each corresponding element
+// in the source. Example:
+//
+// tuple<int, char const*, int> init(123, "Hello", 1000);
+// closure_frame<my_closure> frame(clos, init);
+//
+// Here now, our closure_frame's variables are initialized with
+// int: 123, char const*: "Hello" and int: 1000.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+namespace impl
+{
+ ///////////////////////////////////////////////////////////////////////
+ // closure_frame_holder is a simple class that encapsulates the
+ // storage for a frame pointer. It uses thread specific data in
+ // case when multithreading is enabled, an ordinary pointer otherwise
+ //
+ // it has get() and set() member functions. set() has to be used
+ // _after_ get(). get() contains intialisation code in the multi
+ // threading case
+ //
+ // closure_frame_holder is used by the closure<> class to store
+ // the pointer to the current frame.
+ //
+#ifndef PHOENIX_THREADSAFE
+ template <typename FrameT>
+ struct closure_frame_holder
+ {
+ typedef FrameT frame_t;
+ typedef frame_t *frame_ptr;
+
+ closure_frame_holder() : frame(0) {}
+
+ frame_ptr &get() { return frame; }
+ void set(frame_t *f) { frame = f; }
+
+ private:
+ frame_ptr frame;
+
+ // no copies, no assignments
+ closure_frame_holder(closure_frame_holder const &);
+ closure_frame_holder &operator=(closure_frame_holder const &);
+ };
+#else
+ template <typename FrameT>
+ struct closure_frame_holder
+ {
+ typedef FrameT frame_t;
+ typedef frame_t *frame_ptr;
+
+ closure_frame_holder() : tsp_frame() {}
+
+ frame_ptr &get()
+ {
+ if (!tsp_frame.get())
+ tsp_frame.reset(new frame_ptr(0));
+ return *tsp_frame;
+ }
+ void set(frame_ptr f)
+ {
+ *tsp_frame = f;
+ }
+
+ private:
+ boost::thread_specific_ptr<frame_ptr> tsp_frame;
+
+ // no copies, no assignments
+ closure_frame_holder(closure_frame_holder const &);
+ closure_frame_holder &operator=(closure_frame_holder const &);
+ };
+#endif
+} // namespace phoenix::impl
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// closure_frame class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ClosureT>
+class closure_frame : public ClosureT::tuple_t {
+
+public:
+
+ closure_frame(ClosureT const& clos)
+ : ClosureT::tuple_t(), save(clos.frame.get()), frame(clos.frame)
+ { clos.frame.set(this); }
+
+ template <typename TupleT>
+ closure_frame(ClosureT const& clos, TupleT const& init)
+ : ClosureT::tuple_t(init), save(clos.frame.get()), frame(clos.frame)
+ { clos.frame.set(this); }
+
+ ~closure_frame()
+ { frame.set(save); }
+
+private:
+
+ closure_frame(closure_frame const&); // no copy
+ closure_frame& operator=(closure_frame const&); // no assign
+
+ closure_frame* save;
+ impl::closure_frame_holder<closure_frame>& frame;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// closure_member class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <int N, typename ClosureT>
+class closure_member {
+
+public:
+
+ typedef typename ClosureT::tuple_t tuple_t;
+
+ closure_member()
+ : frame(ClosureT::closure_frame_holder_ref()) {}
+
+ template <typename TupleT>
+ struct result {
+
+ typedef typename tuple_element<
+ N, typename ClosureT::tuple_t
+ >::rtype type;
+ };
+
+ template <typename TupleT>
+ typename tuple_element<N, typename ClosureT::tuple_t>::rtype
+ eval(TupleT const& /*args*/) const
+ {
+ using namespace std;
+ assert(frame.get() != 0);
+ return (*frame.get())[tuple_index<N>()];
+ }
+
+private:
+ impl::closure_frame_holder<typename ClosureT::closure_frame_t> &frame;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// closure class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+ typename T0 = nil_t
+ , typename T1 = nil_t
+ , typename T2 = nil_t
+
+#if PHOENIX_LIMIT > 3
+ , typename T3 = nil_t
+ , typename T4 = nil_t
+ , typename T5 = nil_t
+
+#if PHOENIX_LIMIT > 6
+ , typename T6 = nil_t
+ , typename T7 = nil_t
+ , typename T8 = nil_t
+
+#if PHOENIX_LIMIT > 9
+ , typename T9 = nil_t
+ , typename T10 = nil_t
+ , typename T11 = nil_t
+
+#if PHOENIX_LIMIT > 12
+ , typename T12 = nil_t
+ , typename T13 = nil_t
+ , typename T14 = nil_t
+
+#endif
+#endif
+#endif
+#endif
+>
+class closure {
+
+public:
+
+ typedef tuple<
+ T0, T1, T2
+#if PHOENIX_LIMIT > 3
+ , T3, T4, T5
+#if PHOENIX_LIMIT > 6
+ , T6, T7, T8
+#if PHOENIX_LIMIT > 9
+ , T9, T10, T11
+#if PHOENIX_LIMIT > 12
+ , T12, T13, T14
+#endif
+#endif
+#endif
+#endif
+ > tuple_t;
+
+ typedef closure<
+ T0, T1, T2
+#if PHOENIX_LIMIT > 3
+ , T3, T4, T5
+#if PHOENIX_LIMIT > 6
+ , T6, T7, T8
+#if PHOENIX_LIMIT > 9
+ , T9, T10, T11
+#if PHOENIX_LIMIT > 12
+ , T12, T13, T14
+#endif
+#endif
+#endif
+#endif
+ > self_t;
+
+ typedef closure_frame<self_t> closure_frame_t;
+
+ closure()
+ : frame() { closure_frame_holder_ref(&frame); }
+ closure_frame_t& context() { assert(frame!=0); return frame.get(); }
+ closure_frame_t const& context() const { assert(frame!=0); return frame.get(); }
+
+ typedef actor<closure_member<0, self_t> > member1;
+ typedef actor<closure_member<1, self_t> > member2;
+ typedef actor<closure_member<2, self_t> > member3;
+
+#if PHOENIX_LIMIT > 3
+ typedef actor<closure_member<3, self_t> > member4;
+ typedef actor<closure_member<4, self_t> > member5;
+ typedef actor<closure_member<5, self_t> > member6;
+
+#if PHOENIX_LIMIT > 6
+ typedef actor<closure_member<6, self_t> > member7;
+ typedef actor<closure_member<7, self_t> > member8;
+ typedef actor<closure_member<8, self_t> > member9;
+
+#if PHOENIX_LIMIT > 9
+ typedef actor<closure_member<9, self_t> > member10;
+ typedef actor<closure_member<10, self_t> > member11;
+ typedef actor<closure_member<11, self_t> > member12;
+
+#if PHOENIX_LIMIT > 12
+ typedef actor<closure_member<12, self_t> > member13;
+ typedef actor<closure_member<13, self_t> > member14;
+ typedef actor<closure_member<14, self_t> > member15;
+
+#endif
+#endif
+#endif
+#endif
+
+#if !defined(__MWERKS__) || (__MWERKS__ > 0x3002)
+private:
+#endif
+
+ closure(closure const&); // no copy
+ closure& operator=(closure const&); // no assign
+
+#if !defined(__MWERKS__) || (__MWERKS__ > 0x3002)
+ template <int N, typename ClosureT>
+ friend class closure_member;
+
+ template <typename ClosureT>
+ friend class closure_frame;
+#endif
+
+ typedef impl::closure_frame_holder<closure_frame_t> holder_t;
+
+#ifdef PHOENIX_THREADSAFE
+ static boost::thread_specific_ptr<holder_t*> &
+ tsp_frame_instance()
+ {
+ static boost::thread_specific_ptr<holder_t*> the_instance;
+ return the_instance;
+ }
+
+ static void
+ tsp_frame_instance_init()
+ {
+ tsp_frame_instance();
+ }
+#endif
+
+ static holder_t &
+ closure_frame_holder_ref(holder_t* holder_ = 0)
+ {
+#ifdef PHOENIX_THREADSAFE
+ static boost::once_flag been_here = BOOST_ONCE_INIT;
+ boost::call_once(tsp_frame_instance_init, been_here);
+ boost::thread_specific_ptr<holder_t*> &tsp_frame = tsp_frame_instance();
+ if (!tsp_frame.get())
+ tsp_frame.reset(new holder_t *(0));
+ holder_t *& holder = *tsp_frame;
+#else
+ static holder_t* holder = 0;
+#endif
+ if (holder_ != 0)
+ holder = holder_;
+ return *holder;
+ }
+
+ mutable holder_t frame;
+};
+
+}
+ // namespace phoenix
+
+#endif
diff --git a/boost/boost/spirit/phoenix/composite.hpp b/boost/boost/spirit/phoenix/composite.hpp
new file mode 100644
index 00000000000..903d31935ec
--- /dev/null
+++ b/boost/boost/spirit/phoenix/composite.hpp
@@ -0,0 +1,1423 @@
+/*=============================================================================
+ Phoenix V1.2.1
+ Copyright (c) 2001-2002 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#ifndef PHOENIX_COMPOSITE_HPP
+#define PHOENIX_COMPOSITE_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/phoenix/actor.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace phoenix {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// composite class
+//
+// A composite is an actor base class composed of zero or more
+// actors (see actor.hpp) and an operation. A composite is itself
+// an actor superclass and conforms to its conceptual interface.
+// Its eval member function un-funnels the tupled actual arguments
+// from the tuple by invoking each of the actors' eval member
+// function. The results of each are then passed on as arguments to
+// the operation. Specializations are provided to handle different
+// numbers of actors.
+//
+// Schematically:
+//
+// actor0.eval(tupled_args) --> arg0 --> |
+// actor1.eval(tupled_args) --> arg1 --> |
+// actor2.eval(tupled_args) --> arg3 --> | --> operation(arg0...argN)
+// ... |
+// actorN.eval(tupled_args) --> argN --> |
+//
+// The operation can be any suitable functor that can accept the
+// arguments passed in by the composite. The operation is expected
+// to have a member operator() that carries out the actual
+// operation. There should be a one to one correspondence between
+// actors of the composite and the arguments of the operation's
+// member operator().
+//
+// The operation is also expected to have a nested template class
+// result<T0...TN>. The nested template class result should have a
+// typedef 'type' that reflects the return type of its member
+// operator(). This is essentially a type computer that answers the
+// metaprogramming question "Given arguments of type T0...TN, what
+// will be its operator()'s return type?".
+//
+// There is a special case for operations that accept no arguments.
+// Such nullary operations are only required to define a typedef
+// result_type that reflects the return type of its operator().
+//
+// Here's an example of a simple operation that squares a number:
+//
+// struct square {
+//
+// template <typename ArgT>
+// struct result { typedef ArgT type; };
+//
+// template <typename ArgT>
+// ArgT operator()(ArgT n) const { return n * n; }
+// };
+//
+// As can be seen, operations can be polymorphic. Its arguments and
+// return type are not fixed to a particular type. The example
+// above for example, can handle any ArgT type as long as it has a
+// multiplication operator.
+//
+// Composites are not created directly. Instead, there are meta-
+// programs provided that indirectly create composites. See
+// operators.hpp, binders.hpp and functions.hpp for examples.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+ typename OperationT
+ , typename A = nil_t
+ , typename B = nil_t
+ , typename C = nil_t
+
+#if PHOENIX_LIMIT > 3
+ , typename D = nil_t
+ , typename E = nil_t
+ , typename F = nil_t
+
+#if PHOENIX_LIMIT > 6
+ , typename G = nil_t
+ , typename H = nil_t
+ , typename I = nil_t
+
+#if PHOENIX_LIMIT > 9
+ , typename J = nil_t
+ , typename K = nil_t
+ , typename L = nil_t
+
+#if PHOENIX_LIMIT > 12
+ , typename M = nil_t
+ , typename N = nil_t
+ , typename O = nil_t
+
+#endif
+#endif
+#endif
+#endif
+
+ , typename NU = nil_t // Not used
+>
+struct composite;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// composite <0 actor> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename OperationT, typename TupleT>
+struct composite0_result {
+
+ typedef typename OperationT::result_type type;
+};
+
+//////////////////////////////////
+template <typename OperationT>
+struct composite<OperationT,
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 3
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 6
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+#endif
+ nil_t // Unused
+> {
+
+ typedef composite<OperationT> self_t;
+
+ template <typename TupleT>
+ struct result {
+
+ typedef typename composite0_result<
+ OperationT, TupleT
+ >::type type;
+ };
+
+ composite(OperationT const& op_)
+ : op(op_) {}
+
+ template <typename TupleT>
+ typename OperationT::result_type
+ eval(TupleT const& /*args*/) const
+ {
+ return op();
+ }
+
+ mutable OperationT op; // operation
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// composite <1 actor> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename OperationT, typename TupleT,
+ typename A>
+struct composite1_result {
+
+ typedef typename OperationT::template result<
+ typename actor_result<A, TupleT>::plain_type
+ >::type type;
+};
+
+//////////////////////////////////
+template <typename OperationT,
+ typename A>
+struct composite<OperationT,
+ A, nil_t, nil_t,
+#if PHOENIX_LIMIT > 3
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 6
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+#endif
+ nil_t // Unused
+> {
+
+ typedef composite<OperationT, A> self_t;
+
+ template <typename TupleT>
+ struct result {
+
+ typedef typename composite1_result<
+ OperationT, TupleT, A
+ >::type type;
+ };
+
+ composite(OperationT const& op_,
+ A const& a_)
+ : op(op_), a(a_) {}
+
+ template <typename TupleT>
+ typename actor_result<self_t, TupleT>::type
+ eval(TupleT const& args) const
+ {
+ typename actor_result<A, TupleT>::type ra = a.eval(args);
+ return op(ra);
+ }
+
+ mutable OperationT op; // operation
+ A a; // actors
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// composite <2 actors> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename OperationT, typename TupleT,
+ typename A, typename B>
+struct composite2_result {
+
+ typedef typename OperationT::template result<
+ typename actor_result<A, TupleT>::plain_type,
+ typename actor_result<B, TupleT>::plain_type
+ >::type type;
+};
+
+//////////////////////////////////
+template <typename OperationT,
+ typename A, typename B>
+struct composite<OperationT,
+ A, B, nil_t,
+#if PHOENIX_LIMIT > 3
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 6
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+#endif
+ nil_t // Unused
+> {
+
+ typedef composite<OperationT, A, B> self_t;
+
+ template <typename TupleT>
+ struct result {
+
+ typedef typename composite2_result<
+ OperationT, TupleT, A, B
+ >::type type;
+ };
+
+ composite(OperationT const& op_,
+ A const& a_, B const& b_)
+ : op(op_), a(a_), b(b_) {}
+
+ template <typename TupleT>
+ typename actor_result<self_t, TupleT>::type
+ eval(TupleT const& args) const
+ {
+ typename actor_result<A, TupleT>::type ra = a.eval(args);
+ typename actor_result<B, TupleT>::type rb = b.eval(args);
+ return op(ra, rb);
+ }
+
+ mutable OperationT op; // operation
+ A a; B b; // actors
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// composite <3 actors> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename OperationT, typename TupleT,
+ typename A, typename B, typename C>
+struct composite3_result {
+
+ typedef typename OperationT::template result<
+ typename actor_result<A, TupleT>::plain_type,
+ typename actor_result<B, TupleT>::plain_type,
+ typename actor_result<C, TupleT>::plain_type
+ >::type type;
+};
+
+//////////////////////////////////
+template <typename OperationT,
+ typename A, typename B, typename C>
+struct composite<OperationT,
+ A, B, C,
+#if PHOENIX_LIMIT > 3
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 6
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+#endif
+ nil_t // Unused
+> {
+
+ typedef composite<OperationT, A, B, C> self_t;
+
+ template <typename TupleT>
+ struct result {
+
+ typedef typename composite3_result<
+ OperationT, TupleT, A, B, C
+ >::type type;
+ };
+
+ composite(OperationT const& op_,
+ A const& a_, B const& b_, C const& c_)
+ : op(op_), a(a_), b(b_), c(c_) {}
+
+ template <typename TupleT>
+ typename actor_result<self_t, TupleT>::type
+ eval(TupleT const& args) const
+ {
+ typename actor_result<A, TupleT>::type ra = a.eval(args);
+ typename actor_result<B, TupleT>::type rb = b.eval(args);
+ typename actor_result<C, TupleT>::type rc = c.eval(args);
+ return op(ra, rb, rc);
+ }
+
+ mutable OperationT op; // operation
+ A a; B b; C c; // actors
+};
+
+#if PHOENIX_LIMIT > 3
+///////////////////////////////////////////////////////////////////////////////
+//
+// composite <4 actors> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename OperationT, typename TupleT,
+ typename A, typename B, typename C, typename D>
+struct composite4_result {
+
+ typedef typename OperationT::template result<
+ typename actor_result<A, TupleT>::plain_type,
+ typename actor_result<B, TupleT>::plain_type,
+ typename actor_result<C, TupleT>::plain_type,
+ typename actor_result<D, TupleT>::plain_type
+ >::type type;
+};
+
+//////////////////////////////////
+template <typename OperationT,
+ typename A, typename B, typename C, typename D>
+struct composite<OperationT,
+ A, B, C, D, nil_t, nil_t,
+#if PHOENIX_LIMIT > 6
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+ nil_t // Unused
+> {
+
+ typedef composite<OperationT, A, B, C, D> self_t;
+
+ template <typename TupleT>
+ struct result {
+
+ typedef typename composite4_result<
+ OperationT, TupleT, A, B, C, D
+ >::type type;
+ };
+
+ composite(OperationT const& op_,
+ A const& a_, B const& b_, C const& c_, D const& d_)
+ : op(op_), a(a_), b(b_), c(c_), d(d_) {}
+
+ template <typename TupleT>
+ typename actor_result<self_t, TupleT>::type
+ eval(TupleT const& args) const
+ {
+ typename actor_result<A, TupleT>::type ra = a.eval(args);
+ typename actor_result<B, TupleT>::type rb = b.eval(args);
+ typename actor_result<C, TupleT>::type rc = c.eval(args);
+ typename actor_result<D, TupleT>::type rd = d.eval(args);
+ return op(ra, rb, rc, rd);
+ }
+
+ mutable OperationT op; // operation
+ A a; B b; C c; D d; // actors
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// composite <5 actors> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename OperationT, typename TupleT,
+ typename A, typename B, typename C, typename D, typename E>
+struct composite5_result {
+
+ typedef typename OperationT::template result<
+ typename actor_result<A, TupleT>::plain_type,
+ typename actor_result<B, TupleT>::plain_type,
+ typename actor_result<C, TupleT>::plain_type,
+ typename actor_result<D, TupleT>::plain_type,
+ typename actor_result<E, TupleT>::plain_type
+ >::type type;
+};
+
+//////////////////////////////////
+template <typename OperationT,
+ typename A, typename B, typename C, typename D, typename E>
+struct composite<OperationT,
+ A, B, C, D, E, nil_t,
+#if PHOENIX_LIMIT > 6
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+ nil_t // Unused
+> {
+
+ typedef composite<OperationT, A, B, C, D, E> self_t;
+
+ template <typename TupleT>
+ struct result {
+
+ typedef typename composite5_result<
+ OperationT, TupleT, A, B, C, D, E
+ >::type type;
+ };
+
+ composite(OperationT const& op_,
+ A const& a_, B const& b_, C const& c_, D const& d_, E const& e_)
+ : op(op_), a(a_), b(b_), c(c_), d(d_), e(e_) {}
+
+ template <typename TupleT>
+ typename actor_result<self_t, TupleT>::type
+ eval(TupleT const& args) const
+ {
+ typename actor_result<A, TupleT>::type ra = a.eval(args);
+ typename actor_result<B, TupleT>::type rb = b.eval(args);
+ typename actor_result<C, TupleT>::type rc = c.eval(args);
+ typename actor_result<D, TupleT>::type rd = d.eval(args);
+ typename actor_result<E, TupleT>::type re = e.eval(args);
+ return op(ra, rb, rc, rd, re);
+ }
+
+ mutable OperationT op; // operation
+ A a; B b; C c; D d; E e; // actors
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// composite <6 actors> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename OperationT, typename TupleT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F>
+struct composite6_result {
+
+ typedef typename OperationT::template result<
+ typename actor_result<A, TupleT>::plain_type,
+ typename actor_result<B, TupleT>::plain_type,
+ typename actor_result<C, TupleT>::plain_type,
+ typename actor_result<D, TupleT>::plain_type,
+ typename actor_result<E, TupleT>::plain_type,
+ typename actor_result<F, TupleT>::plain_type
+ >::type type;
+};
+
+//////////////////////////////////
+template <typename OperationT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F>
+struct composite<OperationT,
+ A, B, C, D, E, F,
+#if PHOENIX_LIMIT > 6
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+ nil_t // Unused
+> {
+
+ typedef composite<OperationT, A, B, C, D, E, F> self_t;
+
+ template <typename TupleT>
+ struct result {
+
+ typedef typename composite6_result<
+ OperationT, TupleT, A, B, C, D, E, F
+ >::type type;
+ };
+
+ composite(OperationT const& op_,
+ A const& a_, B const& b_, C const& c_, D const& d_, E const& e_,
+ F const& f_)
+ : op(op_), a(a_), b(b_), c(c_), d(d_), e(e_),
+ f(f_) {}
+
+ template <typename TupleT>
+ typename actor_result<self_t, TupleT>::type
+ eval(TupleT const& args) const
+ {
+ typename actor_result<A, TupleT>::type ra = a.eval(args);
+ typename actor_result<B, TupleT>::type rb = b.eval(args);
+ typename actor_result<C, TupleT>::type rc = c.eval(args);
+ typename actor_result<D, TupleT>::type rd = d.eval(args);
+ typename actor_result<E, TupleT>::type re = e.eval(args);
+ typename actor_result<F, TupleT>::type rf = f.eval(args);
+ return op(ra, rb, rc, rd, re, rf);
+ }
+
+ mutable OperationT op; // operation
+ A a; B b; C c; D d; E e; F f; // actors
+};
+
+#if PHOENIX_LIMIT > 6
+///////////////////////////////////////////////////////////////////////////////
+//
+// composite <7 actors> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename OperationT, typename TupleT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G>
+struct composite7_result {
+
+ typedef typename OperationT::template result<
+ typename actor_result<A, TupleT>::plain_type,
+ typename actor_result<B, TupleT>::plain_type,
+ typename actor_result<C, TupleT>::plain_type,
+ typename actor_result<D, TupleT>::plain_type,
+ typename actor_result<E, TupleT>::plain_type,
+ typename actor_result<F, TupleT>::plain_type,
+ typename actor_result<G, TupleT>::plain_type
+ >::type type;
+};
+
+//////////////////////////////////
+template <typename OperationT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G>
+struct composite<OperationT,
+ A, B, C, D, E, F, G, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+#endif
+ nil_t // Unused
+> {
+
+ typedef composite<OperationT, A, B, C, D, E, F, G> self_t;
+
+ template <typename TupleT>
+ struct result {
+
+ typedef typename composite7_result<
+ OperationT, TupleT, A, B, C, D, E, F, G
+ >::type type;
+ };
+
+ composite(OperationT const& op_,
+ A const& a_, B const& b_, C const& c_, D const& d_, E const& e_,
+ F const& f_, G const& g_)
+ : op(op_), a(a_), b(b_), c(c_), d(d_), e(e_),
+ f(f_), g(g_) {}
+
+ template <typename TupleT>
+ typename actor_result<self_t, TupleT>::type
+ eval(TupleT const& args) const
+ {
+ typename actor_result<A, TupleT>::type ra = a.eval(args);
+ typename actor_result<B, TupleT>::type rb = b.eval(args);
+ typename actor_result<C, TupleT>::type rc = c.eval(args);
+ typename actor_result<D, TupleT>::type rd = d.eval(args);
+ typename actor_result<E, TupleT>::type re = e.eval(args);
+ typename actor_result<F, TupleT>::type rf = f.eval(args);
+ typename actor_result<G, TupleT>::type rg = g.eval(args);
+ return op(ra, rb, rc, rd, re, rf, rg);
+ }
+
+ mutable OperationT op; // operation
+ A a; B b; C c; D d; E e; F f; G g; // actors
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// composite <8 actors> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename OperationT, typename TupleT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H>
+struct composite8_result {
+
+ typedef typename OperationT::template result<
+ typename actor_result<A, TupleT>::plain_type,
+ typename actor_result<B, TupleT>::plain_type,
+ typename actor_result<C, TupleT>::plain_type,
+ typename actor_result<D, TupleT>::plain_type,
+ typename actor_result<E, TupleT>::plain_type,
+ typename actor_result<F, TupleT>::plain_type,
+ typename actor_result<G, TupleT>::plain_type,
+ typename actor_result<H, TupleT>::plain_type
+ >::type type;
+};
+
+//////////////////////////////////
+template <typename OperationT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H>
+struct composite<OperationT,
+ A, B, C, D, E, F, G, H, nil_t,
+#if PHOENIX_LIMIT > 9
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+#endif
+ nil_t // Unused
+> {
+
+ typedef composite<OperationT, A, B, C, D, E, F, G, H> self_t;
+
+ template <typename TupleT>
+ struct result {
+
+ typedef typename composite8_result<
+ OperationT, TupleT, A, B, C, D, E, F, G, H
+ >::type type;
+ };
+
+ composite(OperationT const& op_,
+ A const& a_, B const& b_, C const& c_, D const& d_, E const& e_,
+ F const& f_, G const& g_, H const& h_)
+ : op(op_), a(a_), b(b_), c(c_), d(d_), e(e_),
+ f(f_), g(g_), h(h_) {}
+
+ template <typename TupleT>
+ typename actor_result<self_t, TupleT>::type
+ eval(TupleT const& args) const
+ {
+ typename actor_result<A, TupleT>::type ra = a.eval(args);
+ typename actor_result<B, TupleT>::type rb = b.eval(args);
+ typename actor_result<C, TupleT>::type rc = c.eval(args);
+ typename actor_result<D, TupleT>::type rd = d.eval(args);
+ typename actor_result<E, TupleT>::type re = e.eval(args);
+ typename actor_result<F, TupleT>::type rf = f.eval(args);
+ typename actor_result<G, TupleT>::type rg = g.eval(args);
+ typename actor_result<H, TupleT>::type rh = h.eval(args);
+ return op(ra, rb, rc, rd, re, rf, rg, rh);
+ }
+
+ mutable OperationT op; // operation
+ A a; B b; C c; D d; E e; F f; G g; H h; // actors
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// composite <9 actors> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename OperationT, typename TupleT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I>
+struct composite9_result {
+
+ typedef typename OperationT::template result<
+ typename actor_result<A, TupleT>::plain_type,
+ typename actor_result<B, TupleT>::plain_type,
+ typename actor_result<C, TupleT>::plain_type,
+ typename actor_result<D, TupleT>::plain_type,
+ typename actor_result<E, TupleT>::plain_type,
+ typename actor_result<F, TupleT>::plain_type,
+ typename actor_result<G, TupleT>::plain_type,
+ typename actor_result<H, TupleT>::plain_type,
+ typename actor_result<I, TupleT>::plain_type
+ >::type type;
+};
+
+//////////////////////////////////
+template <typename OperationT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I>
+struct composite<OperationT,
+ A, B, C, D, E, F, G, H, I,
+#if PHOENIX_LIMIT > 9
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+#endif
+ nil_t // Unused
+> {
+
+ typedef composite<OperationT, A, B, C, D, E, F, G, H, I> self_t;
+
+ template <typename TupleT>
+ struct result {
+
+ typedef typename composite9_result<
+ OperationT, TupleT, A, B, C, D, E, F, G, H, I
+ >::type type;
+ };
+
+ composite(OperationT const& op_,
+ A const& a_, B const& b_, C const& c_, D const& d_, E const& e_,
+ F const& f_, G const& g_, H const& h_, I const& i_)
+ : op(op_), a(a_), b(b_), c(c_), d(d_), e(e_),
+ f(f_), g(g_), h(h_), i(i_) {}
+
+ template <typename TupleT>
+ typename actor_result<self_t, TupleT>::type
+ eval(TupleT const& args) const
+ {
+ typename actor_result<A, TupleT>::type ra = a.eval(args);
+ typename actor_result<B, TupleT>::type rb = b.eval(args);
+ typename actor_result<C, TupleT>::type rc = c.eval(args);
+ typename actor_result<D, TupleT>::type rd = d.eval(args);
+ typename actor_result<E, TupleT>::type re = e.eval(args);
+ typename actor_result<F, TupleT>::type rf = f.eval(args);
+ typename actor_result<G, TupleT>::type rg = g.eval(args);
+ typename actor_result<H, TupleT>::type rh = h.eval(args);
+ typename actor_result<I, TupleT>::type ri = i.eval(args);
+ return op(ra, rb, rc, rd, re, rf, rg, rh, ri);
+ }
+
+ mutable OperationT op; // operation
+ A a; B b; C c; D d; E e; F f; G g; H h; I i; // actors
+};
+
+#if PHOENIX_LIMIT > 9
+///////////////////////////////////////////////////////////////////////////////
+//
+// composite <10 actors> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename OperationT, typename TupleT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J>
+struct composite10_result {
+
+ typedef typename OperationT::template result<
+ typename actor_result<A, TupleT>::plain_type,
+ typename actor_result<B, TupleT>::plain_type,
+ typename actor_result<C, TupleT>::plain_type,
+ typename actor_result<D, TupleT>::plain_type,
+ typename actor_result<E, TupleT>::plain_type,
+ typename actor_result<F, TupleT>::plain_type,
+ typename actor_result<G, TupleT>::plain_type,
+ typename actor_result<H, TupleT>::plain_type,
+ typename actor_result<I, TupleT>::plain_type,
+ typename actor_result<J, TupleT>::plain_type
+ >::type type;
+};
+
+//////////////////////////////////
+template <typename OperationT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J>
+struct composite<OperationT,
+ A, B, C, D, E, F, G, H, I, J, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+ nil_t // Unused
+> {
+
+ typedef composite<OperationT, A, B, C, D, E, F, G, H, I, J> self_t;
+
+ template <typename TupleT>
+ struct result {
+
+ typedef typename composite10_result<
+ OperationT, TupleT, A, B, C, D, E, F, G, H, I, J
+ >::type type;
+ };
+
+ composite(OperationT const& op_,
+ A const& a_, B const& b_, C const& c_, D const& d_, E const& e_,
+ F const& f_, G const& g_, H const& h_, I const& i_, J const& j_)
+ : op(op_), a(a_), b(b_), c(c_), d(d_), e(e_),
+ f(f_), g(g_), h(h_), i(i_), j(j_) {}
+
+ template <typename TupleT>
+ typename actor_result<self_t, TupleT>::type
+ eval(TupleT const& args) const
+ {
+ typename actor_result<A, TupleT>::type ra = a.eval(args);
+ typename actor_result<B, TupleT>::type rb = b.eval(args);
+ typename actor_result<C, TupleT>::type rc = c.eval(args);
+ typename actor_result<D, TupleT>::type rd = d.eval(args);
+ typename actor_result<E, TupleT>::type re = e.eval(args);
+ typename actor_result<F, TupleT>::type rf = f.eval(args);
+ typename actor_result<G, TupleT>::type rg = g.eval(args);
+ typename actor_result<H, TupleT>::type rh = h.eval(args);
+ typename actor_result<I, TupleT>::type ri = i.eval(args);
+ typename actor_result<J, TupleT>::type rj = j.eval(args);
+ return op(ra, rb, rc, rd, re, rf, rg, rh, ri, rj);
+ }
+
+ mutable OperationT op; // operation
+ A a; B b; C c; D d; E e; F f; G g; H h; I i; J j; // actors
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// composite <11 actors> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename OperationT, typename TupleT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K>
+struct composite11_result {
+
+ typedef typename OperationT::template result<
+ typename actor_result<A, TupleT>::plain_type,
+ typename actor_result<B, TupleT>::plain_type,
+ typename actor_result<C, TupleT>::plain_type,
+ typename actor_result<D, TupleT>::plain_type,
+ typename actor_result<E, TupleT>::plain_type,
+ typename actor_result<F, TupleT>::plain_type,
+ typename actor_result<G, TupleT>::plain_type,
+ typename actor_result<H, TupleT>::plain_type,
+ typename actor_result<I, TupleT>::plain_type,
+ typename actor_result<J, TupleT>::plain_type,
+ typename actor_result<K, TupleT>::plain_type
+ >::type type;
+};
+
+//////////////////////////////////
+template <typename OperationT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K>
+struct composite<OperationT,
+ A, B, C, D, E, F, G, H, I, J, K, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+ nil_t // Unused
+> {
+
+ typedef composite<OperationT,
+ A, B, C, D, E, F, G, H, I, J, K> self_t;
+
+ template <typename TupleT>
+ struct result {
+
+ typedef typename composite11_result<
+ OperationT, TupleT, A, B, C, D, E, F, G, H, I, J, K
+ >::type type;
+ };
+
+ composite(OperationT const& op_,
+ A const& a_, B const& b_, C const& c_, D const& d_, E const& e_,
+ F const& f_, G const& g_, H const& h_, I const& i_, J const& j_,
+ K const& k_)
+ : op(op_), a(a_), b(b_), c(c_), d(d_), e(e_),
+ f(f_), g(g_), h(h_), i(i_), j(j_),
+ k(k_) {}
+
+ template <typename TupleT>
+ typename actor_result<self_t, TupleT>::type
+ eval(TupleT const& args) const
+ {
+ typename actor_result<A, TupleT>::type ra = a.eval(args);
+ typename actor_result<B, TupleT>::type rb = b.eval(args);
+ typename actor_result<C, TupleT>::type rc = c.eval(args);
+ typename actor_result<D, TupleT>::type rd = d.eval(args);
+ typename actor_result<E, TupleT>::type re = e.eval(args);
+ typename actor_result<F, TupleT>::type rf = f.eval(args);
+ typename actor_result<G, TupleT>::type rg = g.eval(args);
+ typename actor_result<H, TupleT>::type rh = h.eval(args);
+ typename actor_result<I, TupleT>::type ri = i.eval(args);
+ typename actor_result<J, TupleT>::type rj = j.eval(args);
+ typename actor_result<K, TupleT>::type rk = k.eval(args);
+ return op(ra, rb, rc, rd, re, rf, rg, rh, ri, rj, rk);
+ }
+
+ mutable OperationT op; // operation
+ A a; B b; C c; D d; E e; F f; G g; H h; I i; J j;
+ K k;// actors
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// composite <12 actors> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename OperationT, typename TupleT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L>
+struct composite12_result {
+
+ typedef typename OperationT::template result<
+ typename actor_result<A, TupleT>::plain_type,
+ typename actor_result<B, TupleT>::plain_type,
+ typename actor_result<C, TupleT>::plain_type,
+ typename actor_result<D, TupleT>::plain_type,
+ typename actor_result<E, TupleT>::plain_type,
+ typename actor_result<F, TupleT>::plain_type,
+ typename actor_result<G, TupleT>::plain_type,
+ typename actor_result<H, TupleT>::plain_type,
+ typename actor_result<I, TupleT>::plain_type,
+ typename actor_result<J, TupleT>::plain_type,
+ typename actor_result<K, TupleT>::plain_type,
+ typename actor_result<L, TupleT>::plain_type
+ >::type type;
+};
+
+//////////////////////////////////
+template <typename OperationT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L>
+struct composite<OperationT,
+ A, B, C, D, E, F, G, H, I, J, K, L,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+ nil_t // Unused
+> {
+
+ typedef composite<OperationT,
+ A, B, C, D, E, F, G, H, I, J, K, L> self_t;
+
+ template <typename TupleT>
+ struct result {
+
+ typedef typename composite12_result<
+ OperationT, TupleT, A, B, C, D, E, F, G, H, I, J, K, L
+ >::type type;
+ };
+
+ composite(OperationT const& op_,
+ A const& a_, B const& b_, C const& c_, D const& d_, E const& e_,
+ F const& f_, G const& g_, H const& h_, I const& i_, J const& j_,
+ K const& k_, L const& l_)
+ : op(op_), a(a_), b(b_), c(c_), d(d_), e(e_),
+ f(f_), g(g_), h(h_), i(i_), j(j_),
+ k(k_), l(l_) {}
+
+ template <typename TupleT>
+ typename actor_result<self_t, TupleT>::type
+ eval(TupleT const& args) const
+ {
+ typename actor_result<A, TupleT>::type ra = a.eval(args);
+ typename actor_result<B, TupleT>::type rb = b.eval(args);
+ typename actor_result<C, TupleT>::type rc = c.eval(args);
+ typename actor_result<D, TupleT>::type rd = d.eval(args);
+ typename actor_result<E, TupleT>::type re = e.eval(args);
+ typename actor_result<F, TupleT>::type rf = f.eval(args);
+ typename actor_result<G, TupleT>::type rg = g.eval(args);
+ typename actor_result<H, TupleT>::type rh = h.eval(args);
+ typename actor_result<I, TupleT>::type ri = i.eval(args);
+ typename actor_result<J, TupleT>::type rj = j.eval(args);
+ typename actor_result<K, TupleT>::type rk = k.eval(args);
+ typename actor_result<L, TupleT>::type rl = l.eval(args);
+ return op(ra, rb, rc, rd, re, rf, rg, rh, ri, rj, rk, rl);
+ }
+
+ mutable OperationT op; // operation
+ A a; B b; C c; D d; E e; F f; G g; H h; I i; J j;
+ K k; L l;// actors
+};
+
+#if PHOENIX_LIMIT > 12
+///////////////////////////////////////////////////////////////////////////////
+//
+// composite <13 actors> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename OperationT, typename TupleT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L, typename M>
+struct composite13_result {
+
+ typedef typename OperationT::template result<
+ typename actor_result<A, TupleT>::plain_type,
+ typename actor_result<B, TupleT>::plain_type,
+ typename actor_result<C, TupleT>::plain_type,
+ typename actor_result<D, TupleT>::plain_type,
+ typename actor_result<E, TupleT>::plain_type,
+ typename actor_result<F, TupleT>::plain_type,
+ typename actor_result<G, TupleT>::plain_type,
+ typename actor_result<H, TupleT>::plain_type,
+ typename actor_result<I, TupleT>::plain_type,
+ typename actor_result<J, TupleT>::plain_type,
+ typename actor_result<K, TupleT>::plain_type,
+ typename actor_result<L, TupleT>::plain_type,
+ typename actor_result<M, TupleT>::plain_type
+ >::type type;
+};
+
+//////////////////////////////////
+template <typename OperationT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L, typename M>
+struct composite<OperationT,
+ A, B, C, D, E, F, G, H, I, J, K, L, M, nil_t, nil_t, nil_t
+> {
+
+ typedef composite<OperationT,
+ A, B, C, D, E, F, G, H, I, J, K, L, M> self_t;
+
+ template <typename TupleT>
+ struct result {
+
+ typedef typename composite13_result<
+ OperationT, TupleT, A, B, C, D, E, F, G, H, I, J, K, L, M
+ >::type type;
+ };
+
+ composite(OperationT const& op_,
+ A const& a_, B const& b_, C const& c_, D const& d_, E const& e_,
+ F const& f_, G const& g_, H const& h_, I const& i_, J const& j_,
+ K const& k_, L const& l_, M const& m_)
+ : op(op_), a(a_), b(b_), c(c_), d(d_), e(e_),
+ f(f_), g(g_), h(h_), i(i_), j(j_),
+ k(k_), l(l_), m(m_) {}
+
+ template <typename TupleT>
+ typename actor_result<self_t, TupleT>::type
+ eval(TupleT const& args) const
+ {
+ typename actor_result<A, TupleT>::type ra = a.eval(args);
+ typename actor_result<B, TupleT>::type rb = b.eval(args);
+ typename actor_result<C, TupleT>::type rc = c.eval(args);
+ typename actor_result<D, TupleT>::type rd = d.eval(args);
+ typename actor_result<E, TupleT>::type re = e.eval(args);
+ typename actor_result<F, TupleT>::type rf = f.eval(args);
+ typename actor_result<G, TupleT>::type rg = g.eval(args);
+ typename actor_result<H, TupleT>::type rh = h.eval(args);
+ typename actor_result<I, TupleT>::type ri = i.eval(args);
+ typename actor_result<J, TupleT>::type rj = j.eval(args);
+ typename actor_result<K, TupleT>::type rk = k.eval(args);
+ typename actor_result<L, TupleT>::type rl = l.eval(args);
+ typename actor_result<M, TupleT>::type rm = m.eval(args);
+ return op(ra, rb, rc, rd, re, rf, rg, rh, ri, rj, rk, rl, rm);
+ }
+
+ mutable OperationT op; // operation
+ A a; B b; C c; D d; E e; F f; G g; H h; I i; J j;
+ K k; L l; M m; // actors
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// composite <14 actors> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename OperationT, typename TupleT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L, typename M, typename N>
+struct composite14_result {
+
+ typedef typename OperationT::template result<
+ typename actor_result<A, TupleT>::plain_type,
+ typename actor_result<B, TupleT>::plain_type,
+ typename actor_result<C, TupleT>::plain_type,
+ typename actor_result<D, TupleT>::plain_type,
+ typename actor_result<E, TupleT>::plain_type,
+ typename actor_result<F, TupleT>::plain_type,
+ typename actor_result<G, TupleT>::plain_type,
+ typename actor_result<H, TupleT>::plain_type,
+ typename actor_result<I, TupleT>::plain_type,
+ typename actor_result<J, TupleT>::plain_type,
+ typename actor_result<K, TupleT>::plain_type,
+ typename actor_result<L, TupleT>::plain_type,
+ typename actor_result<M, TupleT>::plain_type,
+ typename actor_result<N, TupleT>::plain_type
+ >::type type;
+};
+
+//////////////////////////////////
+template <typename OperationT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L, typename M, typename N>
+struct composite<OperationT,
+ A, B, C, D, E, F, G, H, I, J, K, L, M, N, nil_t, nil_t
+> {
+
+ typedef composite<OperationT,
+ A, B, C, D, E, F, G, H, I, J, K, L, M, N> self_t;
+
+ template <typename TupleT>
+ struct result {
+
+ typedef typename composite14_result<
+ OperationT, TupleT, A, B, C, D, E, F, G, H, I, J, K, L, M, N
+ >::type type;
+ };
+
+ composite(OperationT const& op_,
+ A const& a_, B const& b_, C const& c_, D const& d_, E const& e_,
+ F const& f_, G const& g_, H const& h_, I const& i_, J const& j_,
+ K const& k_, L const& l_, M const& m_, N const& n_)
+ : op(op_), a(a_), b(b_), c(c_), d(d_), e(e_),
+ f(f_), g(g_), h(h_), i(i_), j(j_),
+ k(k_), l(l_), m(m_), n(n_) {}
+
+ template <typename TupleT>
+ typename actor_result<self_t, TupleT>::type
+ eval(TupleT const& args) const
+ {
+ typename actor_result<A, TupleT>::type ra = a.eval(args);
+ typename actor_result<B, TupleT>::type rb = b.eval(args);
+ typename actor_result<C, TupleT>::type rc = c.eval(args);
+ typename actor_result<D, TupleT>::type rd = d.eval(args);
+ typename actor_result<E, TupleT>::type re = e.eval(args);
+ typename actor_result<F, TupleT>::type rf = f.eval(args);
+ typename actor_result<G, TupleT>::type rg = g.eval(args);
+ typename actor_result<H, TupleT>::type rh = h.eval(args);
+ typename actor_result<I, TupleT>::type ri = i.eval(args);
+ typename actor_result<J, TupleT>::type rj = j.eval(args);
+ typename actor_result<K, TupleT>::type rk = k.eval(args);
+ typename actor_result<L, TupleT>::type rl = l.eval(args);
+ typename actor_result<M, TupleT>::type rm = m.eval(args);
+ typename actor_result<N, TupleT>::type rn = n.eval(args);
+ return op(ra, rb, rc, rd, re, rf, rg, rh, ri, rj, rk, rl, rm, rn);
+ }
+
+ mutable OperationT op; // operation
+ A a; B b; C c; D d; E e; F f; G g; H h; I i; J j;
+ K k; L l; M m; N n; // actors
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// composite <15 actors> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename OperationT, typename TupleT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L, typename M, typename N, typename O>
+struct composite15_result {
+
+ typedef typename OperationT::template result<
+ typename actor_result<A, TupleT>::plain_type,
+ typename actor_result<B, TupleT>::plain_type,
+ typename actor_result<C, TupleT>::plain_type,
+ typename actor_result<D, TupleT>::plain_type,
+ typename actor_result<E, TupleT>::plain_type,
+ typename actor_result<F, TupleT>::plain_type,
+ typename actor_result<G, TupleT>::plain_type,
+ typename actor_result<H, TupleT>::plain_type,
+ typename actor_result<I, TupleT>::plain_type,
+ typename actor_result<J, TupleT>::plain_type,
+ typename actor_result<K, TupleT>::plain_type,
+ typename actor_result<L, TupleT>::plain_type,
+ typename actor_result<M, TupleT>::plain_type,
+ typename actor_result<N, TupleT>::plain_type,
+ typename actor_result<O, TupleT>::plain_type
+ >::type type;
+};
+
+//////////////////////////////////
+template <typename OperationT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L, typename M, typename N, typename O>
+struct composite<OperationT,
+ A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, nil_t
+> {
+
+ typedef composite<OperationT,
+ A, B, C, D, E, F, G, H, I, J, K, L, M, N, O> self_t;
+
+ template <typename TupleT>
+ struct result {
+
+ typedef typename composite15_result<
+ OperationT, TupleT, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O
+ >::type type;
+ };
+
+ composite(OperationT const& op_,
+ A const& a_, B const& b_, C const& c_, D const& d_, E const& e_,
+ F const& f_, G const& g_, H const& h_, I const& i_, J const& j_,
+ K const& k_, L const& l_, M const& m_, N const& n_, O const& o_)
+ : op(op_), a(a_), b(b_), c(c_), d(d_), e(e_),
+ f(f_), g(g_), h(h_), i(i_), j(j_),
+ k(k_), l(l_), m(m_), n(n_), o(o_) {}
+
+ template <typename TupleT>
+ typename actor_result<self_t, TupleT>::type
+ eval(TupleT const& args) const
+ {
+ typename actor_result<A, TupleT>::type ra = a.eval(args);
+ typename actor_result<B, TupleT>::type rb = b.eval(args);
+ typename actor_result<C, TupleT>::type rc = c.eval(args);
+ typename actor_result<D, TupleT>::type rd = d.eval(args);
+ typename actor_result<E, TupleT>::type re = e.eval(args);
+ typename actor_result<F, TupleT>::type rf = f.eval(args);
+ typename actor_result<G, TupleT>::type rg = g.eval(args);
+ typename actor_result<H, TupleT>::type rh = h.eval(args);
+ typename actor_result<I, TupleT>::type ri = i.eval(args);
+ typename actor_result<J, TupleT>::type rj = j.eval(args);
+ typename actor_result<K, TupleT>::type rk = k.eval(args);
+ typename actor_result<L, TupleT>::type rl = l.eval(args);
+ typename actor_result<M, TupleT>::type rm = m.eval(args);
+ typename actor_result<N, TupleT>::type rn = n.eval(args);
+ typename actor_result<O, TupleT>::type ro = o.eval(args);
+ return op(ra, rb, rc, rd, re, rf, rg, rh, ri, rj, rk, rl, rm, rn, ro);
+ }
+
+ mutable OperationT op; // operation
+ A a; B b; C c; D d; E e; F f; G g; H h; I i; J j;
+ K k; L l; M m; N n; O o; // actors
+};
+
+#endif
+#endif
+#endif
+#endif
+
+namespace impl {
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // make_composite is basically a type computer that answers the
+ // question "Given types T0..TN, what composite type should I
+ // create <composite_type> and if I were to generate an actual
+ // composite, what type <type> should I return?"
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <
+ typename OperationT
+ , typename A = nil_t
+ , typename B = nil_t
+ , typename C = nil_t
+
+#if PHOENIX_LIMIT > 3
+ , typename D = nil_t
+ , typename E = nil_t
+ , typename F = nil_t
+
+#if PHOENIX_LIMIT > 6
+ , typename G = nil_t
+ , typename H = nil_t
+ , typename I = nil_t
+
+#if PHOENIX_LIMIT > 9
+ , typename J = nil_t
+ , typename K = nil_t
+ , typename L = nil_t
+
+#if PHOENIX_LIMIT > 12
+ , typename M = nil_t
+ , typename N = nil_t
+ , typename O = nil_t
+
+#endif
+#endif
+#endif
+#endif
+ >
+ struct make_composite {
+
+ typedef composite<OperationT
+ , typename as_actor<A>::type
+ , typename as_actor<B>::type
+ , typename as_actor<C>::type
+
+#if PHOENIX_LIMIT > 3
+ , typename as_actor<D>::type
+ , typename as_actor<E>::type
+ , typename as_actor<F>::type
+
+#if PHOENIX_LIMIT > 6
+ , typename as_actor<G>::type
+ , typename as_actor<H>::type
+ , typename as_actor<I>::type
+
+#if PHOENIX_LIMIT > 9
+ , typename as_actor<J>::type
+ , typename as_actor<K>::type
+ , typename as_actor<L>::type
+
+#if PHOENIX_LIMIT > 12
+ , typename as_actor<M>::type
+ , typename as_actor<N>::type
+ , typename as_actor<O>::type
+
+#endif
+#endif
+#endif
+#endif
+ > composite_type;
+
+ typedef actor<composite_type> type;
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // make_unary, make_binary, make_binary1, make_binary2 and
+ // make_binary3 utilities are provided here for easy creation of
+ // unary and binary composites.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+
+ ////////////////////////////////// input is an actor
+ template <typename OperationT, typename BaseT>
+ struct make_unary {
+
+ typedef typename make_composite
+ <OperationT, actor<BaseT> >::type type;
+
+ static type
+ construct(actor<BaseT> const& _0)
+ {
+ typedef typename make_composite
+ <OperationT, actor<BaseT> >::composite_type
+ ret_t;
+
+ return ret_t(OperationT(), _0);
+ }
+ };
+
+ ////////////////////////////////// LHS is an actor, RHS is unknown
+ template <typename OperationT, typename BaseT, typename B>
+ struct make_binary1 {
+
+ typedef typename make_composite
+ <OperationT, actor<BaseT>, B>::type type;
+
+ static type
+ construct(actor<BaseT> const& _0, B const& _1)
+ {
+ typedef typename make_composite
+ <OperationT, actor<BaseT>, B>::composite_type
+ ret_t;
+
+ return ret_t(OperationT(), _0, as_actor<B>::convert(_1));
+ }
+ };
+
+ ////////////////////////////////// LHS is unknown, RHS is an actor
+ template <typename OperationT, typename A, typename BaseT>
+ struct make_binary2 {
+
+ typedef typename make_composite
+ <OperationT, A, actor<BaseT> >::type type;
+
+ static type
+ construct(A const& _0, actor<BaseT> const& _1)
+ {
+ typedef typename make_composite
+ <OperationT, A, actor<BaseT> >::composite_type
+ ret_t;
+
+ return ret_t(OperationT(), as_actor<A>::convert(_0), _1);
+ }
+ };
+
+ ////////////////////////////////// Both LHS and RHS are actors
+ template <typename OperationT, typename BaseA, typename BaseB>
+ struct make_binary3 {
+
+ typedef typename make_composite
+ <OperationT, actor<BaseA>, actor<BaseB> >::type type;
+
+ static type
+ construct(actor<BaseA> const& _0, actor<BaseB> const& _1)
+ {
+ typedef typename make_composite
+ <OperationT, actor<BaseA>, actor<BaseB> >::composite_type
+ ret_t;
+
+ return ret_t(OperationT(), _0, _1);
+ }
+ };
+
+} // namespace impl
+
+} // namespace phoenix
+
+#endif
diff --git a/boost/boost/spirit/phoenix/functions.hpp b/boost/boost/spirit/phoenix/functions.hpp
new file mode 100644
index 00000000000..dc134858574
--- /dev/null
+++ b/boost/boost/spirit/phoenix/functions.hpp
@@ -0,0 +1,761 @@
+/*=============================================================================
+ Phoenix V1.2.1
+ Copyright (c) 2001-2002 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#ifndef PHOENIX_FUNCTIONS_HPP
+#define PHOENIX_FUNCTIONS_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/phoenix/actor.hpp>
+#include <boost/spirit/phoenix/composite.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace phoenix {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// function class
+//
+// Lazy functions
+//
+// This class provides a mechanism for lazily evaluating functions.
+// Syntactically, a lazy function looks like an ordinary C/C++
+// function. The function call looks the same. However, unlike
+// ordinary functions, the actual function execution is deferred.
+// (see actor.hpp, primitives.hpp and composite.hpp for an
+// overview). For example here are sample factorial function calls:
+//
+// factorial(4)
+// factorial(arg1)
+// factorial(arg1 * 6)
+//
+// These functions are automatically lazily bound unlike ordinary
+// function pointers or functor objects that need to be explicitly
+// bound through the bind function (see binders.hpp).
+//
+// A lazy function works in conjunction with a user defined functor
+// (as usual with a member operator()). Only special forms of
+// functor objects are allowed. This is required to enable true
+// polymorphism (STL style monomorphic functors and function
+// pointers can still be used through the bind facility in
+// binders.hpp).
+//
+// This special functor is expected to have a nested template class
+// result<A...TN> (where N is the number of arguments of its
+// member operator()). The nested template class result should have
+// a typedef 'type' that reflects the return type of its member
+// operator(). This is essentially a type computer that answers the
+// metaprogramming question "Given arguments of type A...TN, what
+// will be the operator()'s return type?".
+//
+// There is a special case for functors that accept no arguments.
+// Such nullary functors are only required to define a typedef
+// result_type that reflects the return type of its operator().
+//
+// Here's an example of a simple functor that computes the
+// factorial of a number:
+//
+// struct factorial_impl {
+//
+// template <typename Arg>
+// struct result { typedef Arg type; };
+//
+// template <typename Arg>
+// Arg operator()(Arg n) const
+// { return (n <= 0) ? 1 : n * this->operator()(n-1); }
+// };
+//
+// As can be seen, the functor can be polymorphic. Its arguments
+// and return type are not fixed to a particular type. The example
+// above for example, can handle any type as long as it can carry
+// out the required operations (i.e. <=, * and -).
+//
+// We can now declare and instantiate a lazy 'factorial' function:
+//
+// function<factorial_impl> factorial;
+//
+// Invoking a lazy function 'factorial' does not immediately
+// execute the functor factorial_impl. Instead, a composite (see
+// composite.hpp) object is created and returned to the caller.
+// Example:
+//
+// factorial(arg1)
+//
+// does nothing more than return a composite. A second function
+// call will invoke the actual factorial function. Example:
+//
+// int i = 4;
+// cout << factorial(arg1)(i);
+//
+// will print out "24".
+//
+// Take note that in certain cases (e.g. for functors with state),
+// an instance may be passed on to the constructor. Example:
+//
+// function<factorial_impl> factorial(ftor);
+//
+// where ftor is an instance of factorial_impl (this is not
+// necessary in this case since factorial is a simple stateless
+// functor). Take care though when using functors with state
+// because the functors are taken in by value. It is best to keep
+// the data manipulated by a functor outside the functor itself and
+// keep a reference to this data inside the functor. Also, it is
+// best to keep functors as small as possible.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename OperationT>
+struct function {
+
+ function() : op() {}
+ function(OperationT const& op_) : op(op_) {}
+
+ actor<composite<OperationT> >
+ operator()() const;
+
+ template <typename A>
+ typename impl::make_composite<OperationT, A>::type
+ operator()(A const& a) const;
+
+ template <typename A, typename B>
+ typename impl::make_composite<OperationT, A, B>::type
+ operator()(A const& a, B const& b) const;
+
+ template <typename A, typename B, typename C>
+ typename impl::make_composite<OperationT, A, B, C>::type
+ operator()(A const& a, B const& b, C const& c) const;
+
+#if PHOENIX_LIMIT > 3
+
+ template <typename A, typename B, typename C, typename D>
+ typename impl::make_composite<OperationT, A, B, C, D>::type
+ operator()(A const& a, B const& b, C const& c, D const& d) const;
+
+ template <typename A, typename B, typename C, typename D, typename E>
+ typename impl::make_composite<
+ OperationT, A, B, C, D, E
+ >::type
+ operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e
+ ) const;
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F
+ >
+ typename impl::make_composite<
+ OperationT, A, B, C, D, E, F
+ >::type
+ operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f
+ ) const;
+
+#if PHOENIX_LIMIT > 6
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G
+ >
+ typename impl::make_composite<
+ OperationT, A, B, C, D, E, F, G
+ >::type
+ operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g
+ ) const;
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H
+ >
+ typename impl::make_composite<
+ OperationT, A, B, C, D, E, F, G, H
+ >::type
+ operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h
+ ) const;
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I
+ >
+ typename impl::make_composite<
+ OperationT, A, B, C, D, E, F, G, H, I
+ >::type
+ operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i
+ ) const;
+
+#if PHOENIX_LIMIT > 9
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J
+ >
+ typename impl::make_composite<
+ OperationT, A, B, C, D, E, F, G, H, I, J
+ >::type
+ operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i, J const& j
+ ) const;
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K
+ >
+ typename impl::make_composite<
+ OperationT, A, B, C, D, E, F, G, H, I, J, K
+ >::type
+ operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i, J const& j,
+ K const& k
+ ) const;
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L
+ >
+ typename impl::make_composite<
+ OperationT, A, B, C, D, E, F, G, H, I, J, K, L
+ >::type
+ operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i, J const& j,
+ K const& k, L const& l
+ ) const;
+
+#if PHOENIX_LIMIT > 12
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L, typename M
+ >
+ typename impl::make_composite<
+ OperationT, A, B, C, D, E, F, G, H, I, J, K, L, M
+ >::type
+ operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i, J const& j,
+ K const& k, L const& l, M const& m
+ ) const;
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L, typename M, typename N
+ >
+ typename impl::make_composite<
+ OperationT, A, B, C, D, E, F, G, H, I, J, K, L, M, N
+ >::type
+ operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i, J const& j,
+ K const& k, L const& l, M const& m, N const& n
+ ) const;
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L, typename M, typename N, typename O
+ >
+ typename impl::make_composite<
+ OperationT, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O
+ >::type
+ operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i, J const& j,
+ K const& k, L const& l, M const& m, N const& n, O const& o
+ ) const;
+
+#endif
+#endif
+#endif
+#endif
+
+ OperationT op;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// function class implementation
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename OperationT>
+inline actor<composite<OperationT> >
+function<OperationT>::operator()() const
+{
+ return actor<composite<OperationT> >(op);
+}
+
+//////////////////////////////////
+template <typename OperationT>
+template <typename A>
+inline typename impl::make_composite<OperationT, A>::type
+function<OperationT>::operator()(A const& a) const
+{
+ typedef typename impl::make_composite<OperationT, A>::composite_type ret_t;
+ return ret_t
+ (
+ op,
+ as_actor<A>::convert(a)
+ );
+}
+
+//////////////////////////////////
+template <typename OperationT>
+template <typename A, typename B>
+inline typename impl::make_composite<OperationT, A, B>::type
+function<OperationT>::operator()(A const& a, B const& b) const
+{
+ typedef
+ typename impl::make_composite<OperationT, A, B>::composite_type
+ ret_t;
+
+ return ret_t(
+ op,
+ as_actor<A>::convert(a),
+ as_actor<B>::convert(b)
+ );
+}
+
+//////////////////////////////////
+template <typename OperationT>
+template <typename A, typename B, typename C>
+inline typename impl::make_composite<OperationT, A, B, C>::type
+function<OperationT>::operator()(A const& a, B const& b, C const& c) const
+{
+ typedef
+ typename impl::make_composite<OperationT, A, B, C>::composite_type
+ ret_t;
+
+ return ret_t(
+ op,
+ as_actor<A>::convert(a),
+ as_actor<B>::convert(b),
+ as_actor<C>::convert(c)
+ );
+}
+
+#if PHOENIX_LIMIT > 3
+//////////////////////////////////
+template <typename OperationT>
+template <
+ typename A, typename B, typename C, typename D
+>
+inline typename impl::make_composite<
+ OperationT, A, B, C, D
+>::type
+function<OperationT>::operator()(
+ A const& a, B const& b, C const& c, D const& d
+) const
+{
+ typedef typename impl::make_composite<
+ OperationT, A, B, C, D
+ >::composite_type ret_t;
+
+ return ret_t(
+ op,
+ as_actor<A>::convert(a),
+ as_actor<B>::convert(b),
+ as_actor<C>::convert(c),
+ as_actor<D>::convert(d)
+ );
+}
+
+//////////////////////////////////
+template <typename OperationT>
+template <
+ typename A, typename B, typename C, typename D, typename E
+>
+inline typename impl::make_composite<
+ OperationT, A, B, C, D, E
+>::type
+function<OperationT>::operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e
+) const
+{
+ typedef typename impl::make_composite<
+ OperationT, A, B, C, D, E
+ >::composite_type ret_t;
+
+ return ret_t(
+ op,
+ as_actor<A>::convert(a),
+ as_actor<B>::convert(b),
+ as_actor<C>::convert(c),
+ as_actor<D>::convert(d),
+ as_actor<E>::convert(e)
+ );
+}
+
+//////////////////////////////////
+template <typename OperationT>
+template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F
+>
+inline typename impl::make_composite<
+ OperationT, A, B, C, D, E, F
+>::type
+function<OperationT>::operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f
+) const
+{
+ typedef typename impl::make_composite<
+ OperationT, A, B, C, D, E, F
+ >::composite_type ret_t;
+
+ return ret_t(
+ op,
+ as_actor<A>::convert(a),
+ as_actor<B>::convert(b),
+ as_actor<C>::convert(c),
+ as_actor<D>::convert(d),
+ as_actor<E>::convert(e),
+ as_actor<F>::convert(f)
+ );
+}
+
+#if PHOENIX_LIMIT > 6
+
+//////////////////////////////////
+template <typename OperationT>
+template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G
+>
+inline typename impl::make_composite<
+ OperationT, A, B, C, D, E, F, G
+>::type
+function<OperationT>::operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g
+) const
+{
+ typedef typename impl::make_composite<
+ OperationT, A, B, C, D, E, F, G
+ >::composite_type ret_t;
+
+ return ret_t(
+ op,
+ as_actor<A>::convert(a),
+ as_actor<B>::convert(b),
+ as_actor<C>::convert(c),
+ as_actor<D>::convert(d),
+ as_actor<E>::convert(e),
+ as_actor<F>::convert(f),
+ as_actor<G>::convert(g)
+ );
+}
+
+//////////////////////////////////
+template <typename OperationT>
+template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H
+>
+inline typename impl::make_composite<
+ OperationT, A, B, C, D, E, F, G, H
+>::type
+function<OperationT>::operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h
+) const
+{
+ typedef typename impl::make_composite<
+ OperationT, A, B, C, D, E, F, G, H
+ >::composite_type ret_t;
+
+ return ret_t(
+ op,
+ as_actor<A>::convert(a),
+ as_actor<B>::convert(b),
+ as_actor<C>::convert(c),
+ as_actor<D>::convert(d),
+ as_actor<E>::convert(e),
+ as_actor<F>::convert(f),
+ as_actor<G>::convert(g),
+ as_actor<H>::convert(h)
+ );
+}
+
+//////////////////////////////////
+template <typename OperationT>
+template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I
+>
+inline typename impl::make_composite<
+ OperationT, A, B, C, D, E, F, G, H, I
+>::type
+function<OperationT>::operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i
+) const
+{
+ typedef typename impl::make_composite<
+ OperationT, A, B, C, D, E, F, G, H, I
+ >::composite_type ret_t;
+
+ return ret_t(
+ op,
+ as_actor<A>::convert(a),
+ as_actor<B>::convert(b),
+ as_actor<C>::convert(c),
+ as_actor<D>::convert(d),
+ as_actor<E>::convert(e),
+ as_actor<F>::convert(f),
+ as_actor<G>::convert(g),
+ as_actor<H>::convert(h),
+ as_actor<I>::convert(i)
+ );
+}
+
+#if PHOENIX_LIMIT > 9
+
+//////////////////////////////////
+template <typename OperationT>
+template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J
+>
+inline typename impl::make_composite<
+ OperationT, A, B, C, D, E, F, G, H, I, J
+>::type
+function<OperationT>::operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i, J const& j
+) const
+{
+ typedef typename impl::make_composite<
+ OperationT, A, B, C, D, E, F, G, H, I, J
+ >::composite_type ret_t;
+
+ return ret_t(
+ op,
+ as_actor<A>::convert(a),
+ as_actor<B>::convert(b),
+ as_actor<C>::convert(c),
+ as_actor<D>::convert(d),
+ as_actor<E>::convert(e),
+ as_actor<F>::convert(f),
+ as_actor<G>::convert(g),
+ as_actor<H>::convert(h),
+ as_actor<I>::convert(i),
+ as_actor<J>::convert(j)
+ );
+}
+
+//////////////////////////////////
+template <typename OperationT>
+template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K
+>
+inline typename impl::make_composite<
+ OperationT, A, B, C, D, E, F, G, H, I, J, K
+>::type
+function<OperationT>::operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i, J const& j,
+ K const& k
+) const
+{
+ typedef typename impl::make_composite<
+ OperationT, A, B, C, D, E, F, G, H, I, J, K
+ >::composite_type ret_t;
+
+ return ret_t(
+ op,
+ as_actor<A>::convert(a),
+ as_actor<B>::convert(b),
+ as_actor<C>::convert(c),
+ as_actor<D>::convert(d),
+ as_actor<E>::convert(e),
+ as_actor<F>::convert(f),
+ as_actor<G>::convert(g),
+ as_actor<H>::convert(h),
+ as_actor<I>::convert(i),
+ as_actor<J>::convert(j),
+ as_actor<K>::convert(k)
+ );
+}
+
+//////////////////////////////////
+template <typename OperationT>
+template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L
+>
+inline typename impl::make_composite<
+ OperationT, A, B, C, D, E, F, G, H, I, J, K, L
+>::type
+function<OperationT>::operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i, J const& j,
+ K const& k, L const& l
+) const
+{
+ typedef typename impl::make_composite<
+ OperationT, A, B, C, D, E, F, G, H, I, J, K, L
+ >::composite_type ret_t;
+
+ return ret_t(
+ op,
+ as_actor<A>::convert(a),
+ as_actor<B>::convert(b),
+ as_actor<C>::convert(c),
+ as_actor<D>::convert(d),
+ as_actor<E>::convert(e),
+ as_actor<F>::convert(f),
+ as_actor<G>::convert(g),
+ as_actor<H>::convert(h),
+ as_actor<I>::convert(i),
+ as_actor<J>::convert(j),
+ as_actor<K>::convert(k),
+ as_actor<L>::convert(l)
+ );
+}
+
+#if PHOENIX_LIMIT > 12
+
+//////////////////////////////////
+template <typename OperationT>
+template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L, typename M
+>
+inline typename impl::make_composite<
+ OperationT, A, B, C, D, E, F, G, H, I, J, K, L, M
+>::type
+function<OperationT>::operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i, J const& j,
+ K const& k, L const& l, M const& m
+) const
+{
+ typedef typename impl::make_composite<
+ OperationT, A, B, C, D, E, F, G, H, I, J, K, L, M
+ >::composite_type ret_t;
+
+ return ret_t(
+ op,
+ as_actor<A>::convert(a),
+ as_actor<B>::convert(b),
+ as_actor<C>::convert(c),
+ as_actor<D>::convert(d),
+ as_actor<E>::convert(e),
+ as_actor<F>::convert(f),
+ as_actor<G>::convert(g),
+ as_actor<H>::convert(h),
+ as_actor<I>::convert(i),
+ as_actor<J>::convert(j),
+ as_actor<K>::convert(k),
+ as_actor<L>::convert(l),
+ as_actor<M>::convert(m)
+ );
+}
+
+//////////////////////////////////
+template <typename OperationT>
+template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L, typename M, typename N
+>
+inline typename impl::make_composite<
+ OperationT, A, B, C, D, E, F, G, H, I, J, K, L, M, N
+>::type
+function<OperationT>::operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i, J const& j,
+ K const& k, L const& l, M const& m, N const& n
+) const
+{
+ typedef typename impl::make_composite<
+ OperationT, A, B, C, D, E, F, G, H, I, J, K, L, M, N
+ >::composite_type ret_t;
+
+ return ret_t(
+ op,
+ as_actor<A>::convert(a),
+ as_actor<B>::convert(b),
+ as_actor<C>::convert(c),
+ as_actor<D>::convert(d),
+ as_actor<E>::convert(e),
+ as_actor<F>::convert(f),
+ as_actor<G>::convert(g),
+ as_actor<H>::convert(h),
+ as_actor<I>::convert(i),
+ as_actor<J>::convert(j),
+ as_actor<K>::convert(k),
+ as_actor<L>::convert(l),
+ as_actor<M>::convert(m),
+ as_actor<N>::convert(n)
+ );
+}
+
+//////////////////////////////////
+template <typename OperationT>
+template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L, typename M, typename N, typename O
+>
+inline typename impl::make_composite<
+ OperationT, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O
+>::type
+function<OperationT>::operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i, J const& j,
+ K const& k, L const& l, M const& m, N const& n, O const& o
+) const
+{
+ typedef typename impl::make_composite<
+ OperationT, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O
+ >::composite_type ret_t;
+
+ return ret_t(
+ op,
+ as_actor<A>::convert(a),
+ as_actor<B>::convert(b),
+ as_actor<C>::convert(c),
+ as_actor<D>::convert(d),
+ as_actor<E>::convert(e),
+ as_actor<F>::convert(f),
+ as_actor<G>::convert(g),
+ as_actor<H>::convert(h),
+ as_actor<I>::convert(i),
+ as_actor<J>::convert(j),
+ as_actor<K>::convert(k),
+ as_actor<L>::convert(l),
+ as_actor<M>::convert(m),
+ as_actor<N>::convert(n),
+ as_actor<O>::convert(o)
+ );
+}
+
+#endif
+#endif
+#endif
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace phoenix
+
+#endif
diff --git a/boost/boost/spirit/phoenix/new.hpp b/boost/boost/spirit/phoenix/new.hpp
new file mode 100644
index 00000000000..acd3255c945
--- /dev/null
+++ b/boost/boost/spirit/phoenix/new.hpp
@@ -0,0 +1,1316 @@
+/*=============================================================================
+ Phoenix V1.2.1
+ Copyright (c) 2001-2003 Joel de Guzman
+ Copyright (c) 2001-2003 Hartmut Kaiser
+ Copyright (c) 2003 Vaclav Vesely
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+
+#ifndef PHOENIX_NEW_HPP
+#define PHOENIX_NEW_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/phoenix/actor.hpp>
+#include <boost/spirit/phoenix/composite.hpp>
+#include <boost/static_assert.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace phoenix {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Phoenix predefined maximum new_ limit. This limit defines the maximum
+// number of parameters supported for calles to the set of new_ template
+// functions (lazy object construction, see below). This number defaults to 3.
+// The actual maximum is rounded up in multiples of 3. Thus, if this value
+// is 4, the actual limit is 6. The ultimate maximum limit in this
+// implementation is 15.
+// PHOENIX_CONSTRUCT_LIMIT should NOT be greater than PHOENIX_LIMIT!
+
+#if !defined(PHOENIX_CONSTRUCT_LIMIT)
+#define PHOENIX_CONSTRUCT_LIMIT PHOENIX_LIMIT
+#endif
+
+// ensure PHOENIX_CONSTRUCT_LIMIT <= PHOENIX_LIMIT
+BOOST_STATIC_ASSERT(PHOENIX_CONSTRUCT_LIMIT <= PHOENIX_LIMIT);
+
+// ensure PHOENIX_CONSTRUCT_LIMIT <= 15
+BOOST_STATIC_ASSERT(PHOENIX_CONSTRUCT_LIMIT <= 15);
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// new_
+//
+// Lazy object construction
+//
+// The set of new_<> template classes and functions provide a way
+// of lazily constructing certain object from a arbitrary set of
+// actors during parsing.
+// The new_ templates are (syntactically) used very much like
+// the well known C++ casts:
+//
+// A *a = new_<A>(...arbitrary list of actors...);
+//
+// where the given parameters are submitted as parameters to the
+// contructor of the object of type A. (This certainly implies, that
+// type A has a constructor with a fitting set of parameter types
+// defined.)
+//
+// The maximum number of needed parameters is controlled through the
+// preprocessor constant PHOENIX_CONSTRUCT_LIMIT. Note though, that this
+// limit should not be greater than PHOENIX_LIMIT.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+template <typename T>
+struct new_l_0
+{
+ typedef T* result_type;
+
+ T* operator()() const
+ {
+ return new T();
+ }
+};
+
+template <typename T>
+struct new_l {
+
+ template <
+ typename A
+ , typename B
+ , typename C
+
+#if PHOENIX_CONSTRUCT_LIMIT > 3
+ , typename D
+ , typename E
+ , typename F
+
+#if PHOENIX_CONSTRUCT_LIMIT > 6
+ , typename G
+ , typename H
+ , typename I
+
+#if PHOENIX_CONSTRUCT_LIMIT > 9
+ , typename J
+ , typename K
+ , typename L
+
+#if PHOENIX_CONSTRUCT_LIMIT > 12
+ , typename M
+ , typename N
+ , typename O
+#endif
+#endif
+#endif
+#endif
+ >
+ struct result { typedef T* type; };
+
+ T* operator()() const {
+ return new T();
+ }
+
+ template <typename A>
+ T* operator()(A const& a) const {
+ return new T(a);
+ }
+
+ template <typename A, typename B>
+ T* operator()(A const& a, B const& b) const {
+ return new T(a, b);
+ }
+
+ template <typename A, typename B, typename C>
+ T* operator()(A const& a, B const& b, C const& c) const {
+ return new T(a, b, c);
+ }
+
+#if PHOENIX_CONSTRUCT_LIMIT > 3
+ template <
+ typename A, typename B, typename C, typename D
+ >
+ T* operator()(
+ A const& a, B const& b, C const& c, D const& d) const
+ {
+ return new T(a, b, c, d);
+ }
+
+ template <
+ typename A, typename B, typename C, typename D, typename E
+ >
+ T* operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e) const
+ {
+ return new T(a, b, c, d, e);
+ }
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F
+ >
+ T* operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f) const
+ {
+ return new T(a, b, c, d, e, f);
+ }
+
+#if PHOENIX_CONSTRUCT_LIMIT > 6
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G
+ >
+ T* operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g) const
+ {
+ return new T(a, b, c, d, e, f, g);
+ }
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H
+ >
+ T* operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h) const
+ {
+ return new T(a, b, c, d, e, f, g, h);
+ }
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I
+ >
+ T* operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i) const
+ {
+ return new T(a, b, c, d, e, f, g, h, i);
+ }
+
+#if PHOENIX_CONSTRUCT_LIMIT > 9
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J
+ >
+ T* operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i, J const& j) const
+ {
+ return new T(a, b, c, d, e, f, g, h, i, j);
+ }
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K
+ >
+ T* operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i, J const& j,
+ K const& k) const
+ {
+ return new T(a, b, c, d, e, f, g, h, i, j, k);
+ }
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L
+ >
+ T* operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i, J const& j,
+ K const& k, L const& l) const
+ {
+ return new T(a, b, c, d, e, f, g, h, i, j, k, l);
+ }
+
+#if PHOENIX_CONSTRUCT_LIMIT > 12
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L, typename M
+ >
+ T* operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i, J const& j,
+ K const& k, L const& l, M const& m) const
+ {
+ return new T(a, b, c, d, e, f, g, h, i, j, k, l, m);
+ }
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L, typename M, typename N
+ >
+ T* operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i, J const& j,
+ K const& k, L const& l, M const& m, N const& n) const
+ {
+ return new T(a, b, c, d, e, f, g, h, i, j, k, l, m, n);
+ }
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L, typename M, typename N, typename O
+ >
+ T* operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i, J const& j,
+ K const& k, L const& l, M const& m, N const& n, O const& o) const
+ {
+ return new T(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o);
+ }
+
+#endif
+#endif
+#endif
+#endif
+};
+
+template <typename T>
+struct new_1 {
+
+ template <
+ typename A
+ >
+ struct result { typedef T* type; };
+
+ template <typename A>
+ T* operator()(A const& a) const {
+ return new T(a);
+ }
+
+};
+
+template <typename T>
+struct new_2 {
+
+ template <
+ typename A
+ , typename B
+ >
+ struct result { typedef T* type; };
+
+ template <typename A, typename B>
+ T* operator()(A const& a, B const& b) const {
+ return new T(a, b);
+ }
+
+};
+
+template <typename T>
+struct new_3 {
+
+ template <
+ typename A
+ , typename B
+ , typename C
+ >
+ struct result { typedef T* type; };
+
+ template <typename A, typename B, typename C>
+ T* operator()(A const& a, B const& b, C const& c) const {
+ return new T(a, b, c);
+ }
+};
+
+#if PHOENIX_CONSTRUCT_LIMIT > 3
+template <typename T>
+struct new_4 {
+
+ template <
+ typename A
+ , typename B
+ , typename C
+ , typename D
+ >
+ struct result { typedef T* type; };
+
+
+ template <
+ typename A, typename B, typename C, typename D
+ >
+ T* operator()(
+ A const& a, B const& b, C const& c, D const& d) const
+ {
+ return new T(a, b, c, d);
+ }
+};
+
+
+template <typename T>
+struct new_5 {
+
+ template <
+ typename A
+ , typename B
+ , typename C
+ , typename D
+ , typename E
+ >
+ struct result { typedef T* type; };
+
+ template <
+ typename A, typename B, typename C, typename D, typename E
+ >
+ T* operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e) const
+ {
+ return new T(a, b, c, d, e);
+ }
+};
+
+
+template <typename T>
+struct new_6 {
+
+ template <
+ typename A
+ , typename B
+ , typename C
+ , typename D
+ , typename E
+ , typename F
+ >
+ struct result { typedef T* type; };
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F
+ >
+ T* operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f) const
+ {
+ return new T(a, b, c, d, e, f);
+ }
+};
+#endif
+
+
+#if PHOENIX_CONSTRUCT_LIMIT > 6
+template <typename T>
+struct new_7 {
+
+ template <
+ typename A
+ , typename B
+ , typename C
+ , typename D
+ , typename E
+ , typename F
+ , typename G
+ >
+ struct result { typedef T* type; };
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G
+ >
+ T* operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g) const
+ {
+ return new T(a, b, c, d, e, f, g);
+ }
+};
+
+template <typename T>
+struct new_8 {
+
+ template <
+ typename A
+ , typename B
+ , typename C
+ , typename D
+ , typename E
+ , typename F
+ , typename G
+ , typename H
+ >
+ struct result { typedef T* type; };
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H
+ >
+ T* operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h) const
+ {
+ return new T(a, b, c, d, e, f, g, h);
+ }
+};
+
+template <typename T>
+struct new_9 {
+
+ template <
+ typename A
+ , typename B
+ , typename C
+ , typename D
+ , typename E
+ , typename F
+ , typename G
+ , typename H
+ , typename I
+ >
+ struct result { typedef T* type; };
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I
+ >
+ T* operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i) const
+ {
+ return new T(a, b, c, d, e, f, g, h, i);
+ }
+};
+#endif
+
+
+#if PHOENIX_CONSTRUCT_LIMIT > 9
+template <typename T>
+struct new_10 {
+
+ template <
+ typename A
+ , typename B
+ , typename C
+ , typename D
+ , typename E
+ , typename F
+ , typename G
+ , typename H
+ , typename I
+ , typename J
+ >
+ struct result { typedef T* type; };
+
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J
+ >
+ T* operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i, J const& j) const
+ {
+ return new T(a, b, c, d, e, f, g, h, i, j);
+ }
+};
+
+template <typename T>
+struct new_11 {
+
+ template <
+ typename A
+ , typename B
+ , typename C
+ , typename D
+ , typename E
+ , typename F
+ , typename G
+ , typename H
+ , typename I
+ , typename J
+ , typename K
+ >
+ struct result { typedef T* type; };
+
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K
+ >
+ T* operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i, J const& j,
+ K const& k) const
+ {
+ return new T(a, b, c, d, e, f, g, h, i, j, k);
+ }
+
+};
+
+template <typename T>
+struct new_12 {
+
+ template <
+ typename A
+ , typename B
+ , typename C
+ , typename D
+ , typename E
+ , typename F
+ , typename G
+ , typename H
+ , typename I
+ , typename J
+ , typename K
+ , typename L
+ >
+ struct result { typedef T* type; };
+
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L
+ >
+ T* operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i, J const& j,
+ K const& k, L const& l) const
+ {
+ return new T(a, b, c, d, f, e, g, h, i, j, k, l);
+ }
+};
+#endif
+
+#if PHOENIX_CONSTRUCT_LIMIT > 12
+template <typename T>
+struct new_13 {
+
+ template <
+ typename A
+ , typename B
+ , typename C
+ , typename D
+ , typename E
+ , typename F
+ , typename G
+ , typename H
+ , typename I
+ , typename J
+ , typename K
+ , typename L
+ , typename M
+ >
+ struct result { typedef T* type; };
+
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L, typename M
+ >
+ T* operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i, J const& j,
+ K const& k, L const& l, M const& m) const
+ {
+ return new T(a, b, c, d, e, f, g, h, i, j, k, l, m);
+ }
+};
+
+template <typename T>
+struct new_14 {
+
+ template <
+ typename A
+ , typename B
+ , typename C
+ , typename D
+ , typename E
+ , typename F
+ , typename G
+ , typename H
+ , typename I
+ , typename J
+ , typename K
+ , typename L
+ , typename M
+ , typename N
+ >
+ struct result { typedef T* type; };
+
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L, typename M, typename N
+ >
+ T* operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i, J const& j,
+ K const& k, L const& l, M const& m, N const& n) const
+ {
+ return new T(a, b, c, d, e, f, g, h, i, j, k, l, m, n);
+ }
+
+};
+
+template <typename T>
+struct new_15 {
+
+ template <
+ typename A
+ , typename B
+ , typename C
+ , typename D
+ , typename E
+ , typename F
+ , typename G
+ , typename H
+ , typename I
+ , typename J
+ , typename K
+ , typename L
+ , typename M
+ , typename N
+ , typename O
+ >
+ struct result { typedef T* type; };
+
+
+ template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L, typename M, typename N, typename O
+ >
+ T* operator()(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i, J const& j,
+ K const& k, L const& l, M const& m, N const& n, O const& o) const
+ {
+ return new T(a, b, c, d, f, e, g, h, i, j, k, l, m, n, o);
+ }
+
+};
+#endif
+
+
+#if defined(__BORLANDC__) || (defined(__MWERKS__) && (__MWERKS__ <= 0x3002))
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// The following specializations are needed because Borland and CodeWarrior
+// does not accept default template arguments in nested template classes in
+// classes (i.e new_l::result)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename T, typename TupleT>
+struct composite0_result<new_l_0<T>, TupleT> {
+
+ typedef T* type;
+};
+
+//////////////////////////////////
+template <typename T, typename TupleT,
+ typename A>
+struct composite1_result<new_l<T>, TupleT, A> {
+
+ typedef T* type;
+};
+
+//////////////////////////////////
+template <typename T, typename TupleT,
+ typename A, typename B>
+struct composite2_result<new_l<T>, TupleT, A, B> {
+
+ typedef T* type;
+};
+
+//////////////////////////////////
+template <typename T, typename TupleT,
+ typename A, typename B, typename C>
+struct composite3_result<new_l<T>, TupleT, A, B, C> {
+
+ typedef T* type;
+};
+
+#if PHOENIX_LIMIT > 3
+//////////////////////////////////
+template <typename T, typename TupleT,
+ typename A, typename B, typename C, typename D>
+struct composite4_result<new_l<T>, TupleT,
+ A, B, C, D> {
+
+ typedef T* type;
+};
+
+//////////////////////////////////
+template <typename T, typename TupleT,
+ typename A, typename B, typename C, typename D, typename E>
+struct composite5_result<new_l<T>, TupleT,
+ A, B, C, D, E> {
+
+ typedef T* type;
+};
+
+//////////////////////////////////
+template <typename T, typename TupleT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F>
+struct composite6_result<new_l<T>, TupleT,
+ A, B, C, D, E, F> {
+
+ typedef T* type;
+};
+
+#if PHOENIX_LIMIT > 6
+//////////////////////////////////
+template <typename T, typename TupleT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G>
+struct composite7_result<new_l<T>, TupleT,
+ A, B, C, D, E, F, G> {
+
+ typedef T* type;
+};
+
+//////////////////////////////////
+template <typename T, typename TupleT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H>
+struct composite8_result<new_l<T>, TupleT,
+ A, B, C, D, E, F, G, H> {
+
+ typedef T* type;
+};
+
+//////////////////////////////////
+template <typename T, typename TupleT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I>
+struct composite9_result<new_l<T>, TupleT,
+ A, B, C, D, E, F, G, H, I> {
+
+ typedef T* type;
+};
+
+#if PHOENIX_LIMIT > 9
+//////////////////////////////////
+template <typename T, typename TupleT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J>
+struct composite10_result<new_l<T>, TupleT,
+ A, B, C, D, E, F, G, H, I, J> {
+
+ typedef T* type;
+};
+
+//////////////////////////////////
+template <typename T, typename TupleT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K>
+struct composite11_result<new_l<T>, TupleT,
+ A, B, C, D, E, F, G, H, I, J, K> {
+
+ typedef T* type;
+};
+
+//////////////////////////////////
+template <typename T, typename TupleT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L>
+struct composite12_result<new_l<T>, TupleT,
+ A, B, C, D, E, F, G, H, I, J, K, L> {
+
+ typedef T* type;
+};
+
+#if PHOENIX_LIMIT > 12
+//////////////////////////////////
+template <typename T, typename TupleT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L, typename M>
+struct composite13_result<new_l<T>, TupleT,
+ A, B, C, D, E, F, G, H, I, J, K, L, M> {
+
+ typedef T* type;
+};
+
+//////////////////////////////////
+template <typename T, typename TupleT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L, typename M, typename N>
+struct composite14_result<new_l<T>, TupleT,
+ A, B, C, D, E, F, G, H, I, J, K, L, M, N> {
+
+ typedef T* type;
+};
+
+//////////////////////////////////
+template <typename T, typename TupleT,
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L, typename M, typename N, typename O>
+struct composite15_result<new_l<T>, TupleT,
+ A, B, C, D, E, F, G, H, I, J, K, L, M, N, O> {
+
+ typedef T* type;
+};
+
+#endif
+#endif
+#endif
+#endif
+#endif
+
+//////////////////////////////////
+template <typename T>
+inline typename impl::make_composite<new_l_0<T> >::type
+new_()
+{
+ typedef impl::make_composite<new_l_0<T> > make_composite_t;
+ typedef typename make_composite_t::type type_t;
+ typedef typename make_composite_t::composite_type composite_type_t;
+
+ return type_t(composite_type_t(new_l_0<T>()));
+}
+
+//////////////////////////////////
+template <typename T, typename A>
+inline typename impl::make_composite<new_1<T>, A>::type
+new_(A const& a)
+{
+ typedef impl::make_composite<new_1<T>, A> make_composite_t;
+ typedef typename make_composite_t::type type_t;
+ typedef typename make_composite_t::composite_type composite_type_t;
+
+ return type_t(composite_type_t(new_1<T>(),
+ as_actor<A>::convert(a)
+ ));
+}
+
+//////////////////////////////////
+template <typename T, typename A, typename B>
+inline typename impl::make_composite<new_2<T>, A, B>::type
+new_(A const& a, B const& b)
+{
+ typedef impl::make_composite<new_2<T>, A, B> make_composite_t;
+ typedef typename make_composite_t::type type_t;
+ typedef typename make_composite_t::composite_type composite_type_t;
+
+ return type_t(composite_type_t(new_2<T>(),
+ as_actor<A>::convert(a),
+ as_actor<B>::convert(b)
+ ));
+}
+
+//////////////////////////////////
+template <typename T, typename A, typename B, typename C>
+inline typename impl::make_composite<new_3<T>, A, B, C>::type
+new_(A const& a, B const& b, C const& c)
+{
+ typedef impl::make_composite<new_3<T>, A, B, C> make_composite_t;
+ typedef typename make_composite_t::type type_t;
+ typedef typename make_composite_t::composite_type composite_type_t;
+
+ return type_t(composite_type_t(new_3<T>(),
+ as_actor<A>::convert(a),
+ as_actor<B>::convert(b),
+ as_actor<C>::convert(c)
+ ));
+}
+
+#if PHOENIX_CONSTRUCT_LIMIT > 3
+//////////////////////////////////
+template <
+ typename T, typename A, typename B, typename C, typename D
+>
+inline typename impl::make_composite<new_4<T>, A, B, C, D>::type
+new_(
+ A const& a, B const& b, C const& c, D const& d)
+{
+ typedef
+ impl::make_composite<new_4<T>, A, B, C, D>
+ make_composite_t;
+ typedef typename make_composite_t::type type_t;
+ typedef typename make_composite_t::composite_type composite_type_t;
+
+ return type_t(composite_type_t(new_4<T>(),
+ as_actor<A>::convert(a),
+ as_actor<B>::convert(b),
+ as_actor<C>::convert(c),
+ as_actor<D>::convert(d)
+ ));
+}
+
+//////////////////////////////////
+template <
+ typename T, typename A, typename B, typename C, typename D, typename E
+>
+inline typename impl::make_composite<new_5<T>, A, B, C, D, E>::type
+new_(
+ A const& a, B const& b, C const& c, D const& d, E const& e)
+{
+ typedef
+ impl::make_composite<new_5<T>, A, B, C, D, E>
+ make_composite_t;
+ typedef typename make_composite_t::type type_t;
+ typedef typename make_composite_t::composite_type composite_type_t;
+
+ return type_t(composite_type_t(new_5<T>(),
+ as_actor<A>::convert(a),
+ as_actor<B>::convert(b),
+ as_actor<C>::convert(c),
+ as_actor<D>::convert(d),
+ as_actor<E>::convert(e)
+ ));
+}
+
+//////////////////////////////////
+template <
+ typename T, typename A, typename B, typename C, typename D, typename E,
+ typename F
+>
+inline typename impl::make_composite<new_6<T>, A, B, C, D, E, F>::type
+new_(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f)
+{
+ typedef
+ impl::make_composite<new_6<T>, A, B, C, D, E, F>
+ make_composite_t;
+ typedef typename make_composite_t::type type_t;
+ typedef typename make_composite_t::composite_type composite_type_t;
+
+ return type_t(composite_type_t(new_6<T>(),
+ as_actor<A>::convert(a),
+ as_actor<B>::convert(b),
+ as_actor<C>::convert(c),
+ as_actor<D>::convert(d),
+ as_actor<E>::convert(e),
+ as_actor<F>::convert(f)
+ ));
+}
+
+#if PHOENIX_CONSTRUCT_LIMIT > 6
+//////////////////////////////////
+template <
+ typename T, typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G
+>
+inline typename impl::make_composite<new_7<T>, A, B, C, D, E, F, G>::type
+new_(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g)
+{
+ typedef
+ impl::make_composite<new_7<T>, A, B, C, D, E, F, G>
+ make_composite_t;
+ typedef typename make_composite_t::type type_t;
+ typedef typename make_composite_t::composite_type composite_type_t;
+
+ return type_t(composite_type_t(new_7<T>(),
+ as_actor<A>::convert(a),
+ as_actor<B>::convert(b),
+ as_actor<C>::convert(c),
+ as_actor<D>::convert(d),
+ as_actor<E>::convert(e),
+ as_actor<F>::convert(f),
+ as_actor<G>::convert(g)
+ ));
+}
+
+//////////////////////////////////
+template <
+ typename T, typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H
+>
+inline typename impl::make_composite<new_8<T>, A, B, C, D, E, F, G, H>::type
+new_(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h)
+{
+ typedef
+ impl::make_composite<new_8<T>, A, B, C, D, E, F, G, H>
+ make_composite_t;
+ typedef typename make_composite_t::type type_t;
+ typedef typename make_composite_t::composite_type composite_type_t;
+
+ return type_t(composite_type_t(new_8<T>(),
+ as_actor<A>::convert(a),
+ as_actor<B>::convert(b),
+ as_actor<C>::convert(c),
+ as_actor<D>::convert(d),
+ as_actor<E>::convert(e),
+ as_actor<F>::convert(f),
+ as_actor<G>::convert(g),
+ as_actor<H>::convert(h)
+ ));
+}
+
+//////////////////////////////////
+template <
+ typename T, typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I
+>
+inline typename impl::make_composite<new_9<T>, A, B, C, D, E, F, G, H, I>::type
+new_(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i)
+{
+ typedef
+ impl::make_composite<new_9<T>, A, B, C, D, E, F, G, H, I>
+ make_composite_t;
+ typedef typename make_composite_t::type type_t;
+ typedef typename make_composite_t::composite_type composite_type_t;
+
+ return type_t(composite_type_t(new_9<T>(),
+ as_actor<A>::convert(a),
+ as_actor<B>::convert(b),
+ as_actor<C>::convert(c),
+ as_actor<D>::convert(d),
+ as_actor<E>::convert(e),
+ as_actor<F>::convert(f),
+ as_actor<G>::convert(g),
+ as_actor<H>::convert(h),
+ as_actor<I>::convert(i)
+ ));
+}
+
+#if PHOENIX_CONSTRUCT_LIMIT > 9
+//////////////////////////////////
+template <
+ typename T, typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J
+>
+inline typename impl::make_composite<
+ new_10<T>, A, B, C, D, E, F, G, H, I, J>::type
+new_(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i, J const& j)
+{
+ typedef
+ impl::make_composite<
+ new_10<T>, A, B, C, D, E, F, G, H, I, J
+ >
+ make_composite_t;
+ typedef typename make_composite_t::type type_t;
+ typedef typename make_composite_t::composite_type composite_type_t;
+
+ return type_t(composite_type_t(new_10<T>(),
+ as_actor<A>::convert(a),
+ as_actor<B>::convert(b),
+ as_actor<C>::convert(c),
+ as_actor<D>::convert(d),
+ as_actor<E>::convert(e),
+ as_actor<F>::convert(f),
+ as_actor<G>::convert(g),
+ as_actor<H>::convert(h),
+ as_actor<I>::convert(i),
+ as_actor<J>::convert(j)
+ ));
+}
+
+//////////////////////////////////
+template <
+ typename T, typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J, typename K
+>
+inline typename impl::make_composite<
+ new_11<T>, A, B, C, D, E, F, G, H, I, J, K>::type
+new_(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i, J const& j,
+ K const& k)
+{
+ typedef
+ impl::make_composite<
+ new_11<T>, A, B, C, D, E, F, G, H, I, J, K
+ >
+ make_composite_t;
+ typedef typename make_composite_t::type type_t;
+ typedef typename make_composite_t::composite_type composite_type_t;
+
+ return type_t(composite_type_t(new_11<T>(),
+ as_actor<A>::convert(a),
+ as_actor<B>::convert(b),
+ as_actor<C>::convert(c),
+ as_actor<D>::convert(d),
+ as_actor<E>::convert(e),
+ as_actor<F>::convert(f),
+ as_actor<G>::convert(g),
+ as_actor<H>::convert(h),
+ as_actor<I>::convert(i),
+ as_actor<J>::convert(j),
+ as_actor<K>::convert(k)
+ ));
+}
+
+//////////////////////////////////
+template <
+ typename T, typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J, typename K,
+ typename L
+>
+inline typename impl::make_composite<
+ new_12<T>, A, B, C, D, E, F, G, H, I, J, K, L>::type
+new_(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i, J const& j,
+ K const& k, L const& l)
+{
+ typedef
+ impl::make_composite<
+ new_12<T>, A, B, C, D, E, F, G, H, I, J, K, L
+ >
+ make_composite_t;
+ typedef typename make_composite_t::type type_t;
+ typedef typename make_composite_t::composite_type composite_type_t;
+
+ return type_t(composite_type_t(new_12<T>(),
+ as_actor<A>::convert(a),
+ as_actor<B>::convert(b),
+ as_actor<C>::convert(c),
+ as_actor<D>::convert(d),
+ as_actor<E>::convert(e),
+ as_actor<F>::convert(f),
+ as_actor<G>::convert(g),
+ as_actor<H>::convert(h),
+ as_actor<I>::convert(i),
+ as_actor<J>::convert(j),
+ as_actor<K>::convert(k),
+ as_actor<L>::convert(l)
+ ));
+}
+
+#if PHOENIX_CONSTRUCT_LIMIT > 12
+//////////////////////////////////
+template <
+ typename T, typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J, typename K,
+ typename L, typename M
+>
+inline typename impl::make_composite<
+ new_13<T>, A, B, C, D, E, F, G, H, I, J, K, L, M>::type
+new_(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i, J const& j,
+ K const& k, L const& l, M const& m)
+{
+ typedef
+ impl::make_composite<
+ new_13<T>, A, B, C, D, E, F, G, H, I, J, K, L, M
+ >
+ make_composite_t;
+ typedef typename make_composite_t::type type_t;
+ typedef typename make_composite_t::composite_type composite_type_t;
+
+ return type_t(composite_type_t(new_13<T>(),
+ as_actor<A>::convert(a),
+ as_actor<B>::convert(b),
+ as_actor<C>::convert(c),
+ as_actor<D>::convert(d),
+ as_actor<E>::convert(e),
+ as_actor<F>::convert(f),
+ as_actor<G>::convert(g),
+ as_actor<H>::convert(h),
+ as_actor<I>::convert(i),
+ as_actor<J>::convert(j),
+ as_actor<K>::convert(k),
+ as_actor<L>::convert(l),
+ as_actor<M>::convert(m)
+ ));
+}
+
+//////////////////////////////////
+template <
+ typename T, typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J, typename K,
+ typename L, typename M, typename N
+>
+inline typename impl::make_composite<
+ new_14<T>, A, B, C, D, E, F, G, H, I, J, K, L, M>::type
+new_(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i, J const& j,
+ K const& k, L const& l, M const& m, N const& n)
+{
+ typedef
+ impl::make_composite<
+ new_14<T>, A, B, C, D, E, F, G, H, I, J, K, L, M, N
+ >
+ make_composite_t;
+ typedef typename make_composite_t::type type_t;
+ typedef typename make_composite_t::composite_type composite_type_t;
+
+ return type_t(composite_type_t(new_14<T>(),
+ as_actor<A>::convert(a),
+ as_actor<B>::convert(b),
+ as_actor<C>::convert(c),
+ as_actor<D>::convert(d),
+ as_actor<E>::convert(e),
+ as_actor<F>::convert(f),
+ as_actor<G>::convert(g),
+ as_actor<H>::convert(h),
+ as_actor<I>::convert(i),
+ as_actor<J>::convert(j),
+ as_actor<K>::convert(k),
+ as_actor<L>::convert(l),
+ as_actor<M>::convert(m),
+ as_actor<N>::convert(n)
+ ));
+}
+
+//////////////////////////////////
+template <
+ typename T, typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J, typename K,
+ typename L, typename M, typename N, typename O
+>
+inline typename impl::make_composite<
+ new_15<T>, A, B, C, D, E, F, G, H, I, J, K, L, M, O>::type
+new_(
+ A const& a, B const& b, C const& c, D const& d, E const& e,
+ F const& f, G const& g, H const& h, I const& i, J const& j,
+ K const& k, L const& l, M const& m, N const& n, O const& o)
+{
+ typedef
+ impl::make_composite<
+ new_15<T>, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O
+ >
+ make_composite_t;
+ typedef typename make_composite_t::type type_t;
+ typedef typename make_composite_t::composite_type composite_type_t;
+
+ return type_t(composite_type_t(new_15<T>(),
+ as_actor<A>::convert(a),
+ as_actor<B>::convert(b),
+ as_actor<C>::convert(c),
+ as_actor<D>::convert(d),
+ as_actor<E>::convert(e),
+ as_actor<F>::convert(f),
+ as_actor<G>::convert(g),
+ as_actor<H>::convert(h),
+ as_actor<I>::convert(i),
+ as_actor<J>::convert(j),
+ as_actor<K>::convert(k),
+ as_actor<L>::convert(l),
+ as_actor<M>::convert(m),
+ as_actor<N>::convert(n),
+ as_actor<O>::convert(o)
+ ));
+}
+
+#endif
+#endif
+#endif
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace phoenix
+
+#endif // PHOENIX_NEW_HPP
diff --git a/boost/boost/spirit/phoenix/operators.hpp b/boost/boost/spirit/phoenix/operators.hpp
new file mode 100644
index 00000000000..95f70a9b306
--- /dev/null
+++ b/boost/boost/spirit/phoenix/operators.hpp
@@ -0,0 +1,2203 @@
+/*=============================================================================
+ Phoenix V1.2.1
+ Copyright (c) 2001-2002 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#ifndef PHOENIX_OPERATORS_HPP
+#define PHOENIX_OPERATORS_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#if !defined(BOOST_NO_CWCTYPE)
+ #include <cwctype>
+#endif
+
+#if defined(__BORLANDC__) || (defined(__ICL) && __ICL >= 700)
+#define CREF const&
+#else
+#define CREF
+#endif
+
+#include <boost/spirit/phoenix/actor.hpp>
+#include <boost/spirit/phoenix/composite.hpp>
+#include <boost/config.hpp>
+#include <boost/mpl/if.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace phoenix {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Operators
+//
+// Lazy operators
+//
+// This class provides a mechanism for lazily evaluating operators.
+// Syntactically, a lazy operator looks like an ordinary C/C++
+// infix, prefix or postfix operator. The operator application
+// looks the same. However, unlike ordinary operators, the actual
+// operator execution is deferred. (see actor.hpp, primitives.hpp
+// and composite.hpp for an overview). Samples:
+//
+// arg1 + arg2
+// 1 + arg1 * arg2
+// 1 / -arg1
+// arg1 < 150
+//
+// T1 set of classes implement all the C++ free operators. Like
+// lazy functions (see functions.hpp), lazy operators are not
+// immediately executed when invoked. Instead, a composite (see
+// composite.hpp) object is created and returned to the caller.
+// Example:
+//
+// (arg1 + arg2) * arg3
+//
+// does nothing more than return a composite. T1 second function
+// call will evaluate the actual operators. Example:
+//
+// int i = 4, j = 5, k = 6;
+// cout << ((arg1 + arg2) * arg3)(i, j, k);
+//
+// will print out "54".
+//
+// Arbitrarily complex expressions can be lazily evaluated
+// following three simple rules:
+//
+// 1) Lazy evaluated binary operators apply when at least one
+// of the operands is an actor object (see actor.hpp and
+// primitives.hpp). Consequently, if an operand is not an actor
+// object, it is implicitly converted to an object of type
+// actor<value<T> > (where T is the original type of the
+// operand).
+//
+// 2) Lazy evaluated unary operators apply only to operands
+// which are actor objects.
+//
+// 3) The result of a lazy operator is a composite actor object
+// that can in turn apply to rule 1.
+//
+// Example:
+//
+// arg1 + 3
+//
+// is a lazy expression involving the operator+. Following rule 1,
+// lazy evaluation is triggered since arg1 is an instance of an
+// actor<argument<N> > class (see primitives.hpp). The right
+// operand <3> is implicitly converted to an actor<value<int> >.
+// The result of this binary + expression is a composite object,
+// following rule 3.
+//
+// Take note that although at least one of the operands must be a
+// valid actor class in order for lazy evaluation to take effect,
+// if this is not the case and we still want to lazily evaluate an
+// expression, we can use var(x), val(x) or cref(x) to transform
+// the operand into a valid action object (see primitives.hpp).
+// Example:
+//
+// val(1) << 3;
+//
+// Supported operators:
+//
+// Unary operators:
+//
+// prefix: ~, !, -, +, ++, --, & (reference), * (dereference)
+// postfix: ++, --
+//
+// Binary operators:
+//
+// =, [], +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=
+// +, -, *, /, %, &, |, ^, <<, >>
+// ==, !=, <, >, <=, >=
+// &&, ||
+//
+// Each operator has a special tag type associated with it. For
+// example the binary + operator has a plus_op tag type associated
+// with it. This is used to specialize either the unary_operator or
+// binary_operator template classes (see unary_operator and
+// binary_operator below). Specializations of these unary_operator
+// and binary_operator are the actual workhorses that implement the
+// operations. The behavior of each lazy operator depends on these
+// unary_operator and binary_operator specializations. 'preset'
+// specializations conform to the canonical operator rules modeled
+// by the behavior of integers and pointers:
+//
+// Prefix -, + and ~ accept constant arguments and return an
+// object by value.
+//
+// The ! accept constant arguments and returns a boolean
+// result.
+//
+// The & (address-of), * (dereference) both return a reference
+// to an object.
+//
+// Prefix ++ returns a reference to its mutable argument after
+// it is incremented.
+//
+// Postfix ++ returns the mutable argument by value before it
+// is incremented.
+//
+// The += and its family accept mutable right hand side (rhs)
+// operand and return a reference to the rhs operand.
+//
+// Infix + and its family accept constant arguments and return
+// an object by value.
+//
+// The == and its family accept constant arguments and return a
+// boolean result.
+//
+// Operators && and || accept constant arguments and return a
+// boolean result and are short circuit evaluated as expected.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Operator tags
+//
+// Each C++ operator has a corresponding tag type. This is
+// used as a means for specializing the unary_operator and
+// binary_operator (see below). The tag also serves as the
+// lazy operator type compatible as a composite operation
+// see (composite.hpp).
+//
+///////////////////////////////////////////////////////////////////////////////
+
+// Unary operator tags
+
+struct negative_op; struct positive_op;
+struct logical_not_op; struct invert_op;
+struct reference_op; struct dereference_op;
+struct pre_incr_op; struct pre_decr_op;
+struct post_incr_op; struct post_decr_op;
+
+// Binary operator tags
+
+struct assign_op; struct index_op;
+struct plus_assign_op; struct minus_assign_op;
+struct times_assign_op; struct divide_assign_op; struct mod_assign_op;
+struct and_assign_op; struct or_assign_op; struct xor_assign_op;
+struct shift_l_assign_op; struct shift_r_assign_op;
+
+struct plus_op; struct minus_op;
+struct times_op; struct divide_op; struct mod_op;
+struct and_op; struct or_op; struct xor_op;
+struct shift_l_op; struct shift_r_op;
+
+struct eq_op; struct not_eq_op;
+struct lt_op; struct lt_eq_op;
+struct gt_op; struct gt_eq_op;
+struct logical_and_op; struct logical_or_op;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// unary_operator<TagT, T>
+//
+// The unary_operator class implements most of the C++ unary
+// operators. Each specialization is basically a simple static eval
+// function plus a result_type typedef that determines the return
+// type of the eval function.
+//
+// TagT is one of the unary operator tags above and T is the data
+// type (argument) involved in the operation.
+//
+// Only the behavior of C/C++ built-in types are taken into account
+// in the specializations provided below. For user-defined types,
+// these specializations may still be used provided that the
+// operator overloads of such types adhere to the standard behavior
+// of built-in types.
+//
+// T1 separate special_ops.hpp file implements more stl savvy
+// specializations. Other more specialized unary_operator
+// implementations may be defined by the client for specific
+// unary operator tags/data types.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename TagT, typename T>
+struct unary_operator;
+
+//////////////////////////////////
+template <typename T>
+struct unary_operator<negative_op, T> {
+
+ typedef T const result_type;
+ static result_type eval(T const& v)
+ { return -v; }
+};
+
+//////////////////////////////////
+template <typename T>
+struct unary_operator<positive_op, T> {
+
+ typedef T const result_type;
+ static result_type eval(T const& v)
+ { return +v; }
+};
+
+//////////////////////////////////
+template <typename T>
+struct unary_operator<logical_not_op, T> {
+
+ typedef T const result_type;
+ static result_type eval(T const& v)
+ { return !v; }
+};
+
+//////////////////////////////////
+template <typename T>
+struct unary_operator<invert_op, T> {
+
+ typedef T const result_type;
+ static result_type eval(T const& v)
+ { return ~v; }
+};
+
+//////////////////////////////////
+template <typename T>
+struct unary_operator<reference_op, T> {
+
+ typedef T* result_type;
+ static result_type eval(T& v)
+ { return &v; }
+};
+
+//////////////////////////////////
+template <typename T>
+struct unary_operator<dereference_op, T*> {
+
+ typedef T& result_type;
+ static result_type eval(T* v)
+ { return *v; }
+};
+
+//////////////////////////////////
+template <typename T>
+struct unary_operator<dereference_op, T* const> {
+
+ typedef T& result_type;
+ static result_type eval(T* const v)
+ { return *v; }
+};
+
+//////////////////////////////////
+template <>
+struct unary_operator<dereference_op, nil_t> {
+
+ // G++ eager template instantiation
+ // somehow requires this.
+ typedef nil_t result_type;
+};
+
+//////////////////////////////////
+#ifndef __BORLANDC__
+template <>
+struct unary_operator<dereference_op, nil_t const> {
+
+ // G++ eager template instantiation
+ // somehow requires this.
+ typedef nil_t result_type;
+};
+#endif
+
+//////////////////////////////////
+template <typename T>
+struct unary_operator<pre_incr_op, T> {
+
+ typedef T& result_type;
+ static result_type eval(T& v)
+ { return ++v; }
+};
+
+//////////////////////////////////
+template <typename T>
+struct unary_operator<pre_decr_op, T> {
+
+ typedef T& result_type;
+ static result_type eval(T& v)
+ { return --v; }
+};
+
+//////////////////////////////////
+template <typename T>
+struct unary_operator<post_incr_op, T> {
+
+ typedef T const result_type;
+ static result_type eval(T& v)
+ { T t(v); ++v; return t; }
+};
+
+//////////////////////////////////
+template <typename T>
+struct unary_operator<post_decr_op, T> {
+
+ typedef T const result_type;
+ static result_type eval(T& v)
+ { T t(v); --v; return t; }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// rank<T>
+//
+// rank<T> class has a static int constant 'value' that defines the
+// absolute rank of a type. rank<T> is used to choose the result
+// type of binary operators such as +. The type with the higher
+// rank wins and is used as the operator's return type. T1 generic
+// user defined type has a very high rank and always wins when
+// compared against a user defined type. If this is not desireable,
+// one can write a rank specialization for the type.
+//
+// Take note that ranks 0..9999 are reserved for the framework.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename T>
+struct rank { static int const value = INT_MAX; };
+
+template <> struct rank<void> { static int const value = 0; };
+template <> struct rank<bool> { static int const value = 10; };
+
+template <> struct rank<char> { static int const value = 20; };
+template <> struct rank<signed char> { static int const value = 20; };
+template <> struct rank<unsigned char> { static int const value = 30; };
+#if !defined(BOOST_NO_INTRINSIC_WCHAR_T)
+template <> struct rank<wchar_t> { static int const value = 40; };
+#endif // !defined(BOOST_NO_INTRINSIC_WCHAR_T)
+
+template <> struct rank<short> { static int const value = 50; };
+template <> struct rank<unsigned short> { static int const value = 60; };
+
+template <> struct rank<int> { static int const value = 70; };
+template <> struct rank<unsigned int> { static int const value = 80; };
+
+template <> struct rank<long> { static int const value = 90; };
+template <> struct rank<unsigned long> { static int const value = 100; };
+
+#ifdef BOOST_HAS_LONG_LONG
+template <> struct rank< ::boost::long_long_type> { static int const value = 110; };
+template <> struct rank< ::boost::ulong_long_type> { static int const value = 120; };
+#endif
+
+template <> struct rank<float> { static int const value = 130; };
+template <> struct rank<double> { static int const value = 140; };
+template <> struct rank<long double> { static int const value = 150; };
+
+template <typename T> struct rank<T*>
+{ static int const value = 160; };
+
+template <typename T> struct rank<T* const>
+{ static int const value = 160; };
+
+template <typename T, int N> struct rank<T[N]>
+{ static int const value = 160; };
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// higher_rank<T0, T1>
+//
+// Chooses the type (T0 or T1) with the higher rank.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename T0, typename T1>
+struct higher_rank {
+ typedef typename boost::mpl::if_c<
+ rank<T0>::value < rank<T1>::value,
+ T1, T0>::type type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// binary_operator<TagT, T0, T1>
+//
+// The binary_operator class implements most of the C++ binary
+// operators. Each specialization is basically a simple static eval
+// function plus a result_type typedef that determines the return
+// type of the eval function.
+//
+// TagT is one of the binary operator tags above T0 and T1 are the
+// (arguments') data types involved in the operation.
+//
+// Only the behavior of C/C++ built-in types are taken into account
+// in the specializations provided below. For user-defined types,
+// these specializations may still be used provided that the
+// operator overloads of such types adhere to the standard behavior
+// of built-in types.
+//
+// T1 separate special_ops.hpp file implements more stl savvy
+// specializations. Other more specialized unary_operator
+// implementations may be defined by the client for specific
+// unary operator tags/data types.
+//
+// All binary_operator except the logical_and_op and logical_or_op
+// have an eval static function that carries out the actual operation.
+// The logical_and_op and logical_or_op d are special because these
+// two operators are short-circuit evaluated.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename TagT, typename T0, typename T1>
+struct binary_operator;
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<assign_op, T0, T1> {
+
+ typedef T0& result_type;
+ static result_type eval(T0& lhs, T1 const& rhs)
+ { return lhs = rhs; }
+};
+
+//////////////////////////////////
+template <typename T1>
+struct binary_operator<index_op, nil_t, T1> {
+
+ // G++ eager template instantiation
+ // somehow requires this.
+ typedef nil_t result_type;
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<index_op, T0*, T1> {
+
+ typedef T0& result_type;
+ static result_type eval(T0* ptr, T1 const& index)
+ { return ptr[index]; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<index_op, T0* const, T1> {
+
+ typedef T0& result_type;
+ static result_type eval(T0* const ptr, T1 const& index)
+ { return ptr[index]; }
+};
+
+//////////////////////////////////
+template <typename T0, int N, typename T1>
+struct binary_operator<index_op, T0[N], T1> {
+
+ typedef T0& result_type;
+ static result_type eval(T0* ptr, T1 const& index)
+ { return ptr[index]; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<plus_assign_op, T0, T1> {
+
+ typedef T0& result_type;
+ static result_type eval(T0& lhs, T1 const& rhs)
+ { return lhs += rhs; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<minus_assign_op, T0, T1> {
+
+ typedef T0& result_type;
+ static result_type eval(T0& lhs, T1 const& rhs)
+ { return lhs -= rhs; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<times_assign_op, T0, T1> {
+
+ typedef T0& result_type;
+ static result_type eval(T0& lhs, T1 const& rhs)
+ { return lhs *= rhs; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<divide_assign_op, T0, T1> {
+
+ typedef T0& result_type;
+ static result_type eval(T0& lhs, T1 const& rhs)
+ { return lhs /= rhs; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<mod_assign_op, T0, T1> {
+
+ typedef T0& result_type;
+ static result_type eval(T0& lhs, T1 const& rhs)
+ { return lhs %= rhs; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<and_assign_op, T0, T1> {
+
+ typedef T0& result_type;
+ static result_type eval(T0& lhs, T1 const& rhs)
+ { return lhs &= rhs; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<or_assign_op, T0, T1> {
+
+ typedef T0& result_type;
+ static result_type eval(T0& lhs, T1 const& rhs)
+ { return lhs |= rhs; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<xor_assign_op, T0, T1> {
+
+ typedef T0& result_type;
+ static result_type eval(T0& lhs, T1 const& rhs)
+ { return lhs ^= rhs; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<shift_l_assign_op, T0, T1> {
+
+ typedef T0& result_type;
+ static result_type eval(T0& lhs, T1 const& rhs)
+ { return lhs <<= rhs; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<shift_r_assign_op, T0, T1> {
+
+ typedef T0& result_type;
+ static result_type eval(T0& lhs, T1 const& rhs)
+ { return lhs >>= rhs; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<plus_op, T0, T1> {
+
+ typedef typename higher_rank<T0, T1>::type const result_type;
+ static result_type eval(T0 const& lhs, T1 const& rhs)
+ { return lhs + rhs; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<minus_op, T0, T1> {
+
+ typedef typename higher_rank<T0, T1>::type const result_type;
+ static result_type eval(T0 const& lhs, T1 const& rhs)
+ { return lhs - rhs; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<times_op, T0, T1> {
+
+ typedef typename higher_rank<T0, T1>::type const result_type;
+ static result_type eval(T0 const& lhs, T1 const& rhs)
+ { return lhs * rhs; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<divide_op, T0, T1> {
+
+ typedef typename higher_rank<T0, T1>::type const result_type;
+ static result_type eval(T0 const& lhs, T1 const& rhs)
+ { return lhs / rhs; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<mod_op, T0, T1> {
+
+ typedef typename higher_rank<T0, T1>::type const result_type;
+ static result_type eval(T0 const& lhs, T1 const& rhs)
+ { return lhs % rhs; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<and_op, T0, T1> {
+
+ typedef typename higher_rank<T0, T1>::type const result_type;
+ static result_type eval(T0 const& lhs, T1 const& rhs)
+ { return lhs & rhs; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<or_op, T0, T1> {
+
+ typedef typename higher_rank<T0, T1>::type const result_type;
+ static result_type eval(T0 const& lhs, T1 const& rhs)
+ { return lhs | rhs; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<xor_op, T0, T1> {
+
+ typedef typename higher_rank<T0, T1>::type const result_type;
+ static result_type eval(T0 const& lhs, T1 const& rhs)
+ { return lhs ^ rhs; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<shift_l_op, T0, T1> {
+
+ typedef T0 const result_type;
+ static result_type eval(T0 const& lhs, T1 const& rhs)
+ { return lhs << rhs; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<shift_r_op, T0, T1> {
+
+ typedef T0 const result_type;
+ static result_type eval(T0 const& lhs, T1 const& rhs)
+ { return lhs >> rhs; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<eq_op, T0, T1> {
+
+ typedef bool result_type;
+ static result_type eval(T0 const& lhs, T1 const& rhs)
+ { return lhs == rhs; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<not_eq_op, T0, T1> {
+
+ typedef bool result_type;
+ static result_type eval(T0 const& lhs, T1 const& rhs)
+ { return lhs != rhs; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<lt_op, T0, T1> {
+
+ typedef bool result_type;
+ static result_type eval(T0 const& lhs, T1 const& rhs)
+ { return lhs < rhs; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<lt_eq_op, T0, T1> {
+
+ typedef bool result_type;
+ static result_type eval(T0 const& lhs, T1 const& rhs)
+ { return lhs <= rhs; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<gt_op, T0, T1> {
+
+ typedef bool result_type;
+ static result_type eval(T0 const& lhs, T1 const& rhs)
+ { return lhs > rhs; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<gt_eq_op, T0, T1> {
+
+ typedef bool result_type;
+ static result_type eval(T0 const& lhs, T1 const& rhs)
+ { return lhs >= rhs; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<logical_and_op, T0, T1> {
+
+ typedef bool result_type;
+ // no eval function, see comment above.
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<logical_or_op, T0, T1> {
+
+ typedef bool result_type;
+ // no eval function, see comment above.
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// negative lazy operator (prefix -)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct negative_op {
+
+ template <typename T0>
+ struct result {
+
+ typedef typename unary_operator<negative_op, T0>::result_type type;
+ };
+
+ template <typename T0>
+ typename unary_operator<negative_op, T0>::result_type
+ operator()(T0& _0) const
+ { return unary_operator<negative_op, T0>::eval(_0); }
+};
+
+//////////////////////////////////
+template <typename BaseT>
+inline typename impl::make_unary<negative_op, BaseT>::type
+operator-(actor<BaseT> const& _0)
+{
+ return impl::make_unary<negative_op, BaseT>::construct(_0);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// positive lazy operator (prefix +)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct positive_op {
+
+ template <typename T0>
+ struct result {
+
+ typedef typename unary_operator<positive_op, T0>::result_type type;
+ };
+
+ template <typename T0>
+ typename unary_operator<positive_op, T0>::result_type
+ operator()(T0& _0) const
+ { return unary_operator<positive_op, T0>::eval(_0); }
+};
+
+//////////////////////////////////
+template <typename BaseT>
+inline typename impl::make_unary<positive_op, BaseT>::type
+operator+(actor<BaseT> const& _0)
+{
+ return impl::make_unary<positive_op, BaseT>::construct(_0);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// logical not lazy operator (prefix !)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct logical_not_op {
+
+ template <typename T0>
+ struct result {
+
+ typedef typename unary_operator<logical_not_op, T0>::result_type type;
+ };
+
+ template <typename T0>
+ typename unary_operator<logical_not_op, T0>::result_type
+ operator()(T0& _0) const
+ { return unary_operator<logical_not_op, T0>::eval(_0); }
+};
+
+//////////////////////////////////
+template <typename BaseT>
+inline typename impl::make_unary<logical_not_op, BaseT>::type
+operator!(actor<BaseT> const& _0)
+{
+ return impl::make_unary<logical_not_op, BaseT>::construct(_0);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// invert lazy operator (prefix ~)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct invert_op {
+
+ template <typename T0>
+ struct result {
+
+ typedef typename unary_operator<invert_op, T0>::result_type type;
+ };
+
+ template <typename T0>
+ typename unary_operator<invert_op, T0>::result_type
+ operator()(T0& _0) const
+ { return unary_operator<invert_op, T0>::eval(_0); }
+};
+
+//////////////////////////////////
+template <typename BaseT>
+inline typename impl::make_unary<invert_op, BaseT>::type
+operator~(actor<BaseT> const& _0)
+{
+ return impl::make_unary<invert_op, BaseT>::construct(_0);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// reference lazy operator (prefix &)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct reference_op {
+
+ template <typename T0>
+ struct result {
+
+ typedef typename unary_operator<reference_op, T0>::result_type type;
+ };
+
+ template <typename T0>
+ typename unary_operator<reference_op, T0>::result_type
+ operator()(T0& _0) const
+ { return unary_operator<reference_op, T0>::eval(_0); }
+};
+
+//////////////////////////////////
+template <typename BaseT>
+inline typename impl::make_unary<reference_op, BaseT>::type
+operator&(actor<BaseT> const& _0)
+{
+ return impl::make_unary<reference_op, BaseT>::construct(_0);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// dereference lazy operator (prefix *)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct dereference_op {
+
+ template <typename T0>
+ struct result {
+
+ typedef typename unary_operator<dereference_op, T0>::result_type type;
+ };
+
+ template <typename T0>
+ typename unary_operator<dereference_op, T0>::result_type
+ operator()(T0& _0) const
+ { return unary_operator<dereference_op, T0>::eval(_0); }
+};
+
+//////////////////////////////////
+template <typename BaseT>
+inline typename impl::make_unary<dereference_op, BaseT>::type
+operator*(actor<BaseT> const& _0)
+{
+ return impl::make_unary<dereference_op, BaseT>::construct(_0);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// pre increment lazy operator (prefix ++)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct pre_incr_op {
+
+ template <typename T0>
+ struct result {
+
+ typedef typename unary_operator<pre_incr_op, T0>::result_type type;
+ };
+
+ template <typename T0>
+ typename unary_operator<pre_incr_op, T0>::result_type
+ operator()(T0& _0) const
+ { return unary_operator<pre_incr_op, T0>::eval(_0); }
+};
+
+//////////////////////////////////
+template <typename BaseT>
+inline typename impl::make_unary<pre_incr_op, BaseT>::type
+operator++(actor<BaseT> const& _0)
+{
+ return impl::make_unary<pre_incr_op, BaseT>::construct(_0);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// pre decrement lazy operator (prefix --)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct pre_decr_op {
+
+ template <typename T0>
+ struct result {
+
+ typedef typename unary_operator<pre_decr_op, T0>::result_type type;
+ };
+
+ template <typename T0>
+ typename unary_operator<pre_decr_op, T0>::result_type
+ operator()(T0& _0) const
+ { return unary_operator<pre_decr_op, T0>::eval(_0); }
+};
+
+//////////////////////////////////
+template <typename BaseT>
+inline typename impl::make_unary<pre_decr_op, BaseT>::type
+operator--(actor<BaseT> const& _0)
+{
+ return impl::make_unary<pre_decr_op, BaseT>::construct(_0);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// post increment lazy operator (postfix ++)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct post_incr_op {
+
+ template <typename T0>
+ struct result {
+
+ typedef typename unary_operator<post_incr_op, T0>::result_type type;
+ };
+
+ template <typename T0>
+ typename unary_operator<post_incr_op, T0>::result_type
+ operator()(T0& _0) const
+ { return unary_operator<post_incr_op, T0>::eval(_0); }
+};
+
+//////////////////////////////////
+template <typename BaseT>
+inline typename impl::make_unary<post_incr_op, BaseT>::type
+operator++(actor<BaseT> const& _0, int)
+{
+ return impl::make_unary<post_incr_op, BaseT>::construct(_0);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// post decrement lazy operator (postfix --)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct post_decr_op {
+
+ template <typename T0>
+ struct result {
+
+ typedef typename unary_operator<post_decr_op, T0>::result_type type;
+ };
+
+ template <typename T0>
+ typename unary_operator<post_decr_op, T0>::result_type
+ operator()(T0& _0) const
+ { return unary_operator<post_decr_op, T0>::eval(_0); }
+};
+
+//////////////////////////////////
+template <typename BaseT>
+inline typename impl::make_unary<post_decr_op, BaseT>::type
+operator--(actor<BaseT> const& _0, int)
+{
+ return impl::make_unary<post_decr_op, BaseT>::construct(_0);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// assignment lazy operator (infix =)
+// The acual lazy operator is a member of the actor class.
+//
+///////////////////////////////////////////////////////////////////////////////
+struct assign_op {
+
+ template <typename T0, typename T1>
+ struct result {
+
+ typedef typename binary_operator<assign_op, T0, T1>
+ ::result_type type;
+ };
+
+ template <typename T0, typename T1>
+ typename binary_operator<assign_op, T0, T1>::result_type
+ operator()(T0& _0, T1& _1) const
+ { return binary_operator<assign_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT>
+template <typename B>
+inline typename impl::make_binary1<assign_op, BaseT, B>::type
+actor<BaseT>::operator=(B const& _1) const
+{
+ return impl::make_binary1<assign_op, BaseT, B>::construct(*this, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// index lazy operator (array index [])
+// The acual lazy operator is a member of the actor class.
+//
+///////////////////////////////////////////////////////////////////////////////
+struct index_op {
+
+ template <typename T0, typename T1>
+ struct result {
+
+ typedef typename binary_operator<index_op, T0, T1>
+ ::result_type type;
+ };
+
+ template <typename T0, typename T1>
+ typename binary_operator<index_op, T0, T1>::result_type
+ operator()(T0& _0, T1& _1) const
+ { return binary_operator<index_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT>
+template <typename B>
+inline typename impl::make_binary1<index_op, BaseT, B>::type
+actor<BaseT>::operator[](B const& _1) const
+{
+ return impl::make_binary1<index_op, BaseT, B>::construct(*this, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// plus assign lazy operator (infix +=)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct plus_assign_op {
+
+ template <typename T0, typename T1>
+ struct result {
+
+ typedef typename binary_operator<plus_assign_op, T0, T1>
+ ::result_type type;
+ };
+
+ template <typename T0, typename T1>
+ typename binary_operator<plus_assign_op, T0, T1>::result_type
+ operator()(T0& _0, T1& _1) const
+ { return binary_operator<plus_assign_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline typename impl::make_binary1<plus_assign_op, BaseT, T1>::type
+operator+=(actor<BaseT> const& _0, T1 CREF _1)
+{
+ return impl::make_binary1<plus_assign_op, BaseT, T1>::construct(_0, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// minus assign lazy operator (infix -=)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct minus_assign_op {
+
+ template <typename T0, typename T1>
+ struct result {
+
+ typedef typename binary_operator<minus_assign_op, T0, T1>
+ ::result_type type;
+ };
+
+ template <typename T0, typename T1>
+ typename binary_operator<minus_assign_op, T0, T1>::result_type
+ operator()(T0& _0, T1& _1) const
+ { return binary_operator<minus_assign_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline typename impl::make_binary1<minus_assign_op, BaseT, T1>::type
+operator-=(actor<BaseT> const& _0, T1 CREF _1)
+{
+ return impl::make_binary1<minus_assign_op, BaseT, T1>::construct(_0, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// times assign lazy operator (infix *=)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct times_assign_op {
+
+ template <typename T0, typename T1>
+ struct result {
+
+ typedef typename binary_operator<times_assign_op, T0, T1>
+ ::result_type type;
+ };
+
+ template <typename T0, typename T1>
+ typename binary_operator<times_assign_op, T0, T1>::result_type
+ operator()(T0& _0, T1& _1) const
+ { return binary_operator<times_assign_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline typename impl::make_binary1<times_assign_op, BaseT, T1>::type
+operator*=(actor<BaseT> const& _0, T1 CREF _1)
+{
+ return impl::make_binary1<times_assign_op, BaseT, T1>::construct(_0, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// divide assign lazy operator (infix /=)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct divide_assign_op {
+
+ template <typename T0, typename T1>
+ struct result {
+
+ typedef typename binary_operator<divide_assign_op, T0, T1>
+ ::result_type type;
+ };
+
+ template <typename T0, typename T1>
+ typename binary_operator<divide_assign_op, T0, T1>::result_type
+ operator()(T0& _0, T1& _1) const
+ { return binary_operator<divide_assign_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline typename impl::make_binary1<divide_assign_op, BaseT, T1>::type
+operator/=(actor<BaseT> const& _0, T1 CREF _1)
+{
+ return impl::make_binary1<divide_assign_op, BaseT, T1>::construct(_0, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// mod assign lazy operator (infix %=)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct mod_assign_op {
+
+ template <typename T0, typename T1>
+ struct result {
+
+ typedef typename binary_operator<mod_assign_op, T0, T1>
+ ::result_type type;
+ };
+
+ template <typename T0, typename T1>
+ typename binary_operator<mod_assign_op, T0, T1>::result_type
+ operator()(T0& _0, T1& _1) const
+ { return binary_operator<mod_assign_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline typename impl::make_binary1<mod_assign_op, BaseT, T1>::type
+operator%=(actor<BaseT> const& _0, T1 CREF _1)
+{
+ return impl::make_binary1<mod_assign_op, BaseT, T1>::construct(_0, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// and assign lazy operator (infix &=)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct and_assign_op {
+
+ template <typename T0, typename T1>
+ struct result {
+
+ typedef typename binary_operator<and_assign_op, T0, T1>
+ ::result_type type;
+ };
+
+ template <typename T0, typename T1>
+ typename binary_operator<and_assign_op, T0, T1>::result_type
+ operator()(T0& _0, T1& _1) const
+ { return binary_operator<and_assign_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline typename impl::make_binary1<and_assign_op, BaseT, T1>::type
+operator&=(actor<BaseT> const& _0, T1 CREF _1)
+{
+ return impl::make_binary1<and_assign_op, BaseT, T1>::construct(_0, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// or assign lazy operator (infix |=)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct or_assign_op {
+
+ template <typename T0, typename T1>
+ struct result {
+
+ typedef typename binary_operator<or_assign_op, T0, T1>
+ ::result_type type;
+ };
+
+ template <typename T0, typename T1>
+ typename binary_operator<or_assign_op, T0, T1>::result_type
+ operator()(T0& _0, T1& _1) const
+ { return binary_operator<or_assign_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline typename impl::make_binary1<or_assign_op, BaseT, T1>::type
+operator|=(actor<BaseT> const& _0, T1 CREF _1)
+{
+ return impl::make_binary1<or_assign_op, BaseT, T1>::construct(_0, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// xor assign lazy operator (infix ^=)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct xor_assign_op {
+
+ template <typename T0, typename T1>
+ struct result {
+
+ typedef typename binary_operator<xor_assign_op, T0, T1>
+ ::result_type type;
+ };
+
+ template <typename T0, typename T1>
+ typename binary_operator<xor_assign_op, T0, T1>::result_type
+ operator()(T0& _0, T1& _1) const
+ { return binary_operator<xor_assign_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline typename impl::make_binary1<xor_assign_op, BaseT, T1>::type
+operator^=(actor<BaseT> const& _0, T1 CREF _1)
+{
+ return impl::make_binary1<xor_assign_op, BaseT, T1>::construct(_0, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// shift left assign lazy operator (infix <<=)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct shift_l_assign_op {
+
+ template <typename T0, typename T1>
+ struct result {
+
+ typedef typename binary_operator<shift_l_assign_op, T0, T1>
+ ::result_type type;
+ };
+
+ template <typename T0, typename T1>
+ typename binary_operator<shift_l_assign_op, T0, T1>::result_type
+ operator()(T0& _0, T1& _1) const
+ { return binary_operator<shift_l_assign_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline typename impl::make_binary1<shift_l_assign_op, BaseT, T1>::type
+operator<<=(actor<BaseT> const& _0, T1 CREF _1)
+{
+ return impl::make_binary1<shift_l_assign_op, BaseT, T1>::construct(_0, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// shift right assign lazy operator (infix >>=)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct shift_r_assign_op {
+
+ template <typename T0, typename T1>
+ struct result {
+
+ typedef typename binary_operator<shift_r_assign_op, T0, T1>
+ ::result_type type;
+ };
+
+ template <typename T0, typename T1>
+ typename binary_operator<shift_r_assign_op, T0, T1>::result_type
+ operator()(T0& _0, T1& _1) const
+ { return binary_operator<shift_r_assign_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline typename impl::make_binary1<shift_r_assign_op, BaseT, T1>::type
+operator>>=(actor<BaseT> const& _0, T1 CREF _1)
+{
+ return impl::make_binary1<shift_r_assign_op, BaseT, T1>::construct(_0, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// plus lazy operator (infix +)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct plus_op {
+
+ template <typename T0, typename T1>
+ struct result {
+
+ typedef typename binary_operator<plus_op, T0, T1>
+ ::result_type type;
+ };
+
+ template <typename T0, typename T1>
+ typename binary_operator<plus_op, T0, T1>::result_type
+ operator()(T0& _0, T1& _1) const
+ { return binary_operator<plus_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline typename impl::make_binary1<plus_op, BaseT, T1>::type
+operator+(actor<BaseT> const& _0, T1 CREF _1)
+{
+ return impl::make_binary1<plus_op, BaseT, T1>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename T0, typename BaseT>
+inline typename impl::make_binary2<plus_op, T0, BaseT>::type
+operator+(T0 CREF _0, actor<BaseT> const& _1)
+{
+ return impl::make_binary2<plus_op, T0, BaseT>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename BaseT0, typename BaseT1>
+inline typename impl::make_binary3<plus_op, BaseT0, BaseT1>::type
+operator+(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
+{
+ return impl::make_binary3<plus_op, BaseT0, BaseT1>::construct(_0, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// minus lazy operator (infix -)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct minus_op {
+
+ template <typename T0, typename T1>
+ struct result {
+
+ typedef typename binary_operator<minus_op, T0, T1>
+ ::result_type type;
+ };
+
+ template <typename T0, typename T1>
+ typename binary_operator<minus_op, T0, T1>::result_type
+ operator()(T0& _0, T1& _1) const
+ { return binary_operator<minus_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline typename impl::make_binary1<minus_op, BaseT, T1>::type
+operator-(actor<BaseT> const& _0, T1 CREF _1)
+{
+ return impl::make_binary1<minus_op, BaseT, T1>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename T0, typename BaseT>
+inline typename impl::make_binary2<minus_op, T0, BaseT>::type
+operator-(T0 CREF _0, actor<BaseT> const& _1)
+{
+ return impl::make_binary2<minus_op, T0, BaseT>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename BaseT0, typename BaseT1>
+inline typename impl::make_binary3<minus_op, BaseT0, BaseT1>::type
+operator-(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
+{
+ return impl::make_binary3<minus_op, BaseT0, BaseT1>::construct(_0, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// times lazy operator (infix *)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct times_op {
+
+ template <typename T0, typename T1>
+ struct result {
+
+ typedef typename binary_operator<times_op, T0, T1>
+ ::result_type type;
+ };
+
+ template <typename T0, typename T1>
+ typename binary_operator<times_op, T0, T1>::result_type
+ operator()(T0& _0, T1& _1) const
+ { return binary_operator<times_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline typename impl::make_binary1<times_op, BaseT, T1>::type
+operator*(actor<BaseT> const& _0, T1 CREF _1)
+{
+ return impl::make_binary1<times_op, BaseT, T1>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename T0, typename BaseT>
+inline typename impl::make_binary2<times_op, T0, BaseT>::type
+operator*(T0 CREF _0, actor<BaseT> const& _1)
+{
+ return impl::make_binary2<times_op, T0, BaseT>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename BaseT0, typename BaseT1>
+inline typename impl::make_binary3<times_op, BaseT0, BaseT1>::type
+operator*(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
+{
+ return impl::make_binary3<times_op, BaseT0, BaseT1>::construct(_0, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// divide lazy operator (infix /)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct divide_op {
+
+ template <typename T0, typename T1>
+ struct result {
+
+ typedef typename binary_operator<divide_op, T0, T1>
+ ::result_type type;
+ };
+
+ template <typename T0, typename T1>
+ typename binary_operator<divide_op, T0, T1>::result_type
+ operator()(T0& _0, T1& _1) const
+ { return binary_operator<divide_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline typename impl::make_binary1<divide_op, BaseT, T1>::type
+operator/(actor<BaseT> const& _0, T1 CREF _1)
+{
+ return impl::make_binary1<divide_op, BaseT, T1>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename T0, typename BaseT>
+inline typename impl::make_binary2<divide_op, T0, BaseT>::type
+operator/(T0 CREF _0, actor<BaseT> const& _1)
+{
+ return impl::make_binary2<divide_op, T0, BaseT>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename BaseT0, typename BaseT1>
+inline typename impl::make_binary3<divide_op, BaseT0, BaseT1>::type
+operator/(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
+{
+ return impl::make_binary3<divide_op, BaseT0, BaseT1>::construct(_0, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// mod lazy operator (infix %)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct mod_op {
+
+ template <typename T0, typename T1>
+ struct result {
+
+ typedef typename binary_operator<mod_op, T0, T1>
+ ::result_type type;
+ };
+
+ template <typename T0, typename T1>
+ typename binary_operator<mod_op, T0, T1>::result_type
+ operator()(T0& _0, T1& _1) const
+ { return binary_operator<mod_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline typename impl::make_binary1<mod_op, BaseT, T1>::type
+operator%(actor<BaseT> const& _0, T1 CREF _1)
+{
+ return impl::make_binary1<mod_op, BaseT, T1>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename T0, typename BaseT>
+inline typename impl::make_binary2<mod_op, T0, BaseT>::type
+operator%(T0 CREF _0, actor<BaseT> const& _1)
+{
+ return impl::make_binary2<mod_op, T0, BaseT>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename BaseT0, typename BaseT1>
+inline typename impl::make_binary3<mod_op, BaseT0, BaseT1>::type
+operator%(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
+{
+ return impl::make_binary3<mod_op, BaseT0, BaseT1>::construct(_0, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// and lazy operator (infix &)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct and_op {
+
+ template <typename T0, typename T1>
+ struct result {
+
+ typedef typename binary_operator<and_op, T0, T1>
+ ::result_type type;
+ };
+
+ template <typename T0, typename T1>
+ typename binary_operator<and_op, T0, T1>::result_type
+ operator()(T0& _0, T1& _1) const
+ { return binary_operator<and_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline typename impl::make_binary1<and_op, BaseT, T1>::type
+operator&(actor<BaseT> const& _0, T1 CREF _1)
+{
+ return impl::make_binary1<and_op, BaseT, T1>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename T0, typename BaseT>
+inline typename impl::make_binary2<and_op, T0, BaseT>::type
+operator&(T0 CREF _0, actor<BaseT> const& _1)
+{
+ return impl::make_binary2<and_op, T0, BaseT>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename BaseT0, typename BaseT1>
+inline typename impl::make_binary3<and_op, BaseT0, BaseT1>::type
+operator&(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
+{
+ return impl::make_binary3<and_op, BaseT0, BaseT1>::construct(_0, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// or lazy operator (infix |)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct or_op {
+
+ template <typename T0, typename T1>
+ struct result {
+
+ typedef typename binary_operator<or_op, T0, T1>
+ ::result_type type;
+ };
+
+ template <typename T0, typename T1>
+ typename binary_operator<or_op, T0, T1>::result_type
+ operator()(T0& _0, T1& _1) const
+ { return binary_operator<or_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline typename impl::make_binary1<or_op, BaseT, T1>::type
+operator|(actor<BaseT> const& _0, T1 CREF _1)
+{
+ return impl::make_binary1<or_op, BaseT, T1>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename T0, typename BaseT>
+inline typename impl::make_binary2<or_op, T0, BaseT>::type
+operator|(T0 CREF _0, actor<BaseT> const& _1)
+{
+ return impl::make_binary2<or_op, T0, BaseT>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename BaseT0, typename BaseT1>
+inline typename impl::make_binary3<or_op, BaseT0, BaseT1>::type
+operator|(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
+{
+ return impl::make_binary3<or_op, BaseT0, BaseT1>::construct(_0, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// xor lazy operator (infix ^)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct xor_op {
+
+ template <typename T0, typename T1>
+ struct result {
+
+ typedef typename binary_operator<xor_op, T0, T1>
+ ::result_type type;
+ };
+
+ template <typename T0, typename T1>
+ typename binary_operator<xor_op, T0, T1>::result_type
+ operator()(T0& _0, T1& _1) const
+ { return binary_operator<xor_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline typename impl::make_binary1<xor_op, BaseT, T1>::type
+operator^(actor<BaseT> const& _0, T1 CREF _1)
+{
+ return impl::make_binary1<xor_op, BaseT, T1>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename T0, typename BaseT>
+inline typename impl::make_binary2<xor_op, T0, BaseT>::type
+operator^(T0 CREF _0, actor<BaseT> const& _1)
+{
+ return impl::make_binary2<xor_op, T0, BaseT>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename BaseT0, typename BaseT1>
+inline typename impl::make_binary3<xor_op, BaseT0, BaseT1>::type
+operator^(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
+{
+ return impl::make_binary3<xor_op, BaseT0, BaseT1>::construct(_0, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// shift left lazy operator (infix <<)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct shift_l_op {
+
+ template <typename T0, typename T1>
+ struct result {
+
+ typedef typename binary_operator<shift_l_op, T0, T1>
+ ::result_type type;
+ };
+
+ template <typename T0, typename T1>
+ typename binary_operator<shift_l_op, T0, T1>::result_type
+ operator()(T0& _0, T1& _1) const
+ { return binary_operator<shift_l_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline typename impl::make_binary1<shift_l_op, BaseT, T1>::type
+operator<<(actor<BaseT> const& _0, T1 CREF _1)
+{
+ return impl::make_binary1<shift_l_op, BaseT, T1>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename T0, typename BaseT>
+inline typename impl::make_binary2<shift_l_op, T0, BaseT>::type
+operator<<(T0 CREF _0, actor<BaseT> const& _1)
+{
+ return impl::make_binary2<shift_l_op, T0, BaseT>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename BaseT0, typename BaseT1>
+inline typename impl::make_binary3<shift_l_op, BaseT0, BaseT1>::type
+operator<<(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
+{
+ return impl::make_binary3<shift_l_op, BaseT0, BaseT1>::construct(_0, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// shift right lazy operator (infix >>)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct shift_r_op {
+
+ template <typename T0, typename T1>
+ struct result {
+
+ typedef typename binary_operator<shift_r_op, T0, T1>
+ ::result_type type;
+ };
+
+ template <typename T0, typename T1>
+ typename binary_operator<shift_r_op, T0, T1>::result_type
+ operator()(T0& _0, T1& _1) const
+ { return binary_operator<shift_r_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline typename impl::make_binary1<shift_r_op, BaseT, T1>::type
+operator>>(actor<BaseT> const& _0, T1 CREF _1)
+{
+ return impl::make_binary1<shift_r_op, BaseT, T1>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename T0, typename BaseT>
+inline typename impl::make_binary2<shift_r_op, T0, BaseT>::type
+operator>>(T0 CREF _0, actor<BaseT> const& _1)
+{
+ return impl::make_binary2<shift_r_op, T0, BaseT>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename BaseT0, typename BaseT1>
+inline typename impl::make_binary3<shift_r_op, BaseT0, BaseT1>::type
+operator>>(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
+{
+ return impl::make_binary3<shift_r_op, BaseT0, BaseT1>::construct(_0, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// equal lazy operator (infix ==)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct eq_op {
+
+ template <typename T0, typename T1>
+ struct result {
+
+ typedef typename binary_operator<eq_op, T0, T1>
+ ::result_type type;
+ };
+
+ template <typename T0, typename T1>
+ typename binary_operator<eq_op, T0, T1>::result_type
+ operator()(T0& _0, T1& _1) const
+ { return binary_operator<eq_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline typename impl::make_binary1<eq_op, BaseT, T1>::type
+operator==(actor<BaseT> const& _0, T1 CREF _1)
+{
+ return impl::make_binary1<eq_op, BaseT, T1>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename T0, typename BaseT>
+inline typename impl::make_binary2<eq_op, T0, BaseT>::type
+operator==(T0 CREF _0, actor<BaseT> const& _1)
+{
+ return impl::make_binary2<eq_op, T0, BaseT>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename BaseT0, typename BaseT1>
+inline typename impl::make_binary3<eq_op, BaseT0, BaseT1>::type
+operator==(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
+{
+ return impl::make_binary3<eq_op, BaseT0, BaseT1>::construct(_0, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// not equal lazy operator (infix !=)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct not_eq_op {
+
+ template <typename T0, typename T1>
+ struct result {
+
+ typedef typename binary_operator<not_eq_op, T0, T1>
+ ::result_type type;
+ };
+
+ template <typename T0, typename T1>
+ typename binary_operator<not_eq_op, T0, T1>::result_type
+ operator()(T0& _0, T1& _1) const
+ { return binary_operator<not_eq_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline typename impl::make_binary1<not_eq_op, BaseT, T1>::type
+operator!=(actor<BaseT> const& _0, T1 CREF _1)
+{
+ return impl::make_binary1<not_eq_op, BaseT, T1>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename T0, typename BaseT>
+inline typename impl::make_binary2<not_eq_op, T0, BaseT>::type
+operator!=(T0 CREF _0, actor<BaseT> const& _1)
+{
+ return impl::make_binary2<not_eq_op, T0, BaseT>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename BaseT0, typename BaseT1>
+inline typename impl::make_binary3<not_eq_op, BaseT0, BaseT1>::type
+operator!=(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
+{
+ return impl::make_binary3<not_eq_op, BaseT0, BaseT1>::construct(_0, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// less than lazy operator (infix <)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct lt_op {
+
+ template <typename T0, typename T1>
+ struct result {
+
+ typedef typename binary_operator<lt_op, T0, T1>
+ ::result_type type;
+ };
+
+ template <typename T0, typename T1>
+ typename binary_operator<lt_op, T0, T1>::result_type
+ operator()(T0& _0, T1& _1) const
+ { return binary_operator<lt_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline typename impl::make_binary1<lt_op, BaseT, T1>::type
+operator<(actor<BaseT> const& _0, T1 CREF _1)
+{
+ return impl::make_binary1<lt_op, BaseT, T1>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename T0, typename BaseT>
+inline typename impl::make_binary2<lt_op, T0, BaseT>::type
+operator<(T0 CREF _0, actor<BaseT> const& _1)
+{
+ return impl::make_binary2<lt_op, T0, BaseT>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename BaseT0, typename BaseT1>
+inline typename impl::make_binary3<lt_op, BaseT0, BaseT1>::type
+operator<(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
+{
+ return impl::make_binary3<lt_op, BaseT0, BaseT1>::construct(_0, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// less than equal lazy operator (infix <=)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct lt_eq_op {
+
+ template <typename T0, typename T1>
+ struct result {
+
+ typedef typename binary_operator<lt_eq_op, T0, T1>
+ ::result_type type;
+ };
+
+ template <typename T0, typename T1>
+ typename binary_operator<lt_eq_op, T0, T1>::result_type
+ operator()(T0& _0, T1& _1) const
+ { return binary_operator<lt_eq_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline typename impl::make_binary1<lt_eq_op, BaseT, T1>::type
+operator<=(actor<BaseT> const& _0, T1 CREF _1)
+{
+ return impl::make_binary1<lt_eq_op, BaseT, T1>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename T0, typename BaseT>
+inline typename impl::make_binary2<lt_eq_op, T0, BaseT>::type
+operator<=(T0 CREF _0, actor<BaseT> const& _1)
+{
+ return impl::make_binary2<lt_eq_op, T0, BaseT>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename BaseT0, typename BaseT1>
+inline typename impl::make_binary3<lt_eq_op, BaseT0, BaseT1>::type
+operator<=(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
+{
+ return impl::make_binary3<lt_eq_op, BaseT0, BaseT1>::construct(_0, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// greater than lazy operator (infix >)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct gt_op {
+
+ template <typename T0, typename T1>
+ struct result {
+
+ typedef typename binary_operator<gt_op, T0, T1>
+ ::result_type type;
+ };
+
+ template <typename T0, typename T1>
+ typename binary_operator<gt_op, T0, T1>::result_type
+ operator()(T0& _0, T1& _1) const
+ { return binary_operator<gt_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline typename impl::make_binary1<gt_op, BaseT, T1>::type
+operator>(actor<BaseT> const& _0, T1 CREF _1)
+{
+ return impl::make_binary1<gt_op, BaseT, T1>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename T0, typename BaseT>
+inline typename impl::make_binary2<gt_op, T0, BaseT>::type
+operator>(T0 CREF _0, actor<BaseT> const& _1)
+{
+ return impl::make_binary2<gt_op, T0, BaseT>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename BaseT0, typename BaseT1>
+inline typename impl::make_binary3<gt_op, BaseT0, BaseT1>::type
+operator>(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
+{
+ return impl::make_binary3<gt_op, BaseT0, BaseT1>::construct(_0, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// greater than equal lazy operator (infix >=)
+//
+///////////////////////////////////////////////////////////////////////////////
+struct gt_eq_op {
+
+ template <typename T0, typename T1>
+ struct result {
+
+ typedef typename binary_operator<gt_eq_op, T0, T1>
+ ::result_type type;
+ };
+
+ template <typename T0, typename T1>
+ typename binary_operator<gt_eq_op, T0, T1>::result_type
+ operator()(T0& _0, T1& _1) const
+ { return binary_operator<gt_eq_op, T0, T1>::eval(_0, _1); }
+};
+
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline typename impl::make_binary1<gt_eq_op, BaseT, T1>::type
+operator>=(actor<BaseT> const& _0, T1 CREF _1)
+{
+ return impl::make_binary1<gt_eq_op, BaseT, T1>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename T0, typename BaseT>
+inline typename impl::make_binary2<gt_eq_op, T0, BaseT>::type
+operator>=(T0 CREF _0, actor<BaseT> const& _1)
+{
+ return impl::make_binary2<gt_eq_op, T0, BaseT>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename BaseT0, typename BaseT1>
+inline typename impl::make_binary3<gt_eq_op, BaseT0, BaseT1>::type
+operator>=(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
+{
+ return impl::make_binary3<gt_eq_op, BaseT0, BaseT1>::construct(_0, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// logical and lazy operator (infix &&)
+//
+// The logical_and_composite class and its corresponding generators are
+// provided to allow short-circuit evaluation of the operator's
+// operands.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename A0, typename A1>
+struct logical_and_composite {
+
+ typedef logical_and_composite<A0, A1> self_t;
+
+ template <typename TupleT>
+ struct result {
+
+ typedef typename binary_operator<logical_and_op,
+ typename actor_result<A0, TupleT>::plain_type,
+ typename actor_result<A1, TupleT>::plain_type
+ >::result_type type;
+ };
+
+ logical_and_composite(A0 const& _0, A1 const& _1)
+ : a0(_0), a1(_1) {}
+
+ template <typename TupleT>
+ typename actor_result<self_t, TupleT>::type
+ eval(TupleT const& args) const
+ {
+ return a0.eval(args) && a1.eval(args);
+ }
+
+ A0 a0; A1 a1; // actors
+};
+
+#if !(defined(__ICL) && __ICL <= 500)
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline actor<logical_and_composite
+<actor<BaseT>, typename as_actor<T1>::type> >
+operator&&(actor<BaseT> const& _0, T1 CREF _1)
+{
+ return logical_and_composite
+ <actor<BaseT>, typename as_actor<T1>::type>
+ (_0, as_actor<T1>::convert(_1));
+}
+
+//////////////////////////////////
+template <typename T0, typename BaseT>
+inline actor<logical_and_composite
+<typename as_actor<T0>::type, actor<BaseT> > >
+operator&&(T0 CREF _0, actor<BaseT> const& _1)
+{
+ return logical_and_composite
+ <typename as_actor<T0>::type, actor<BaseT> >
+ (as_actor<T0>::convert(_0), _1);
+}
+
+//////////////////////////////////
+template <typename BaseT0, typename BaseT1>
+inline actor<logical_and_composite
+<actor<BaseT0>, actor<BaseT1> > >
+operator&&(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
+{
+ return logical_and_composite
+ <actor<BaseT0>, actor<BaseT1> >
+ (_0, _1);
+}
+#else
+//////////////////////////////////
+template <typename T0, typename T1>
+inline actor<logical_and_composite
+<typename as_actor<T0>::type, typename as_actor<T1>::type> >
+operator&&(T0 CREF _0, T1 CREF _1)
+{
+ return logical_and_composite
+ <typename as_actor<T0>::type, typename as_actor<T1>::type>
+ (as_actor<T0>::convert(_0), as_actor<T1>::convert(_1));
+}
+#endif // !(__ICL && __ICL <= 500)
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// logical or lazy operator (infix ||)
+//
+// The logical_or_composite class and its corresponding generators are
+// provided to allow short-circuit evaluation of the operator's
+// operands.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename A0, typename A1>
+struct logical_or_composite {
+
+ typedef logical_or_composite<A0, A1> self_t;
+
+ template <typename TupleT>
+ struct result {
+
+ typedef typename binary_operator<logical_or_op,
+ typename actor_result<A0, TupleT>::plain_type,
+ typename actor_result<A1, TupleT>::plain_type
+ >::result_type type;
+ };
+
+ logical_or_composite(A0 const& _0, A1 const& _1)
+ : a0(_0), a1(_1) {}
+
+ template <typename TupleT>
+ typename actor_result<self_t, TupleT>::type
+ eval(TupleT const& args) const
+ {
+ return a0.eval(args) || a1.eval(args);
+ }
+
+ A0 a0; A1 a1; // actors
+};
+
+//////////////////////////////////
+template <typename BaseT, typename T1>
+inline actor<logical_or_composite
+<actor<BaseT>, typename as_actor<T1>::type> >
+operator||(actor<BaseT> const& _0, T1 CREF _1)
+{
+ return logical_or_composite
+ <actor<BaseT>, typename as_actor<T1>::type>
+ (_0, as_actor<T1>::convert(_1));
+}
+
+//////////////////////////////////
+template <typename T0, typename BaseT>
+inline actor<logical_or_composite
+<typename as_actor<T0>::type, actor<BaseT> > >
+operator||(T0 CREF _0, actor<BaseT> const& _1)
+{
+ return logical_or_composite
+ <typename as_actor<T0>::type, actor<BaseT> >
+ (as_actor<T0>::convert(_0), _1);
+}
+
+//////////////////////////////////
+template <typename BaseT0, typename BaseT1>
+inline actor<logical_or_composite
+<actor<BaseT0>, actor<BaseT1> > >
+operator||(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
+{
+ return logical_or_composite
+ <actor<BaseT0>, actor<BaseT1> >
+ (_0, _1);
+}
+
+} // namespace phoenix
+
+#undef CREF
+#endif
diff --git a/boost/boost/spirit/phoenix/primitives.hpp b/boost/boost/spirit/phoenix/primitives.hpp
new file mode 100644
index 00000000000..16d5925ea7c
--- /dev/null
+++ b/boost/boost/spirit/phoenix/primitives.hpp
@@ -0,0 +1,248 @@
+/*=============================================================================
+ Phoenix V1.2.1
+ Copyright (c) 2001-2002 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#ifndef PHOENIX_PRIMITIVES_HPP
+#define PHOENIX_PRIMITIVES_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/phoenix/actor.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace phoenix {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// argument class
+//
+// Lazy arguments
+//
+// An actor base class that extracts and returns the Nth argument
+// from the argument list passed in the 'args' tuple in the eval
+// member function (see actor.hpp). There are some predefined
+// argument constants that can be used as actors (arg1..argN).
+//
+// The argument actor is a place-holder for the actual arguments
+// passed by the client. For example, wherever arg1 is seen placed
+// in a lazy function (see functions.hpp) or lazy operator (see
+// operators.hpp), this will be replaced by the actual first
+// argument in the actual function evaluation. Argument actors are
+// essentially lazy arguments. A lazy argument is a full actor in
+// its own right and can be evaluated through the actor's operator().
+//
+// Example:
+//
+// char c = 'A';
+// int i = 123;
+// const char* s = "Hello World";
+//
+// cout << arg1(c) << ' ';
+// cout << arg1(i, s) << ' ';
+// cout << arg2(i, s) << ' ';
+//
+// will print out "A 123 Hello World"
+//
+///////////////////////////////////////////////////////////////////////////////
+template <int N>
+struct argument {
+
+ template <typename TupleT>
+ struct result { typedef typename tuple_element<N, TupleT>::type type; };
+
+ template <typename TupleT>
+ typename tuple_element<N, TupleT>::type
+ eval(TupleT const& args) const
+ {
+ return args[tuple_index<N>()];
+ }
+};
+
+//////////////////////////////////
+actor<argument<0> > const arg1 = argument<0>();
+actor<argument<1> > const arg2 = argument<1>();
+actor<argument<2> > const arg3 = argument<2>();
+
+#if PHOENIX_LIMIT > 3
+actor<argument<3> > const arg4 = argument<3>();
+actor<argument<4> > const arg5 = argument<4>();
+actor<argument<5> > const arg6 = argument<5>();
+
+#if PHOENIX_LIMIT > 6
+actor<argument<6> > const arg7 = argument<6>();
+actor<argument<7> > const arg8 = argument<7>();
+actor<argument<8> > const arg9 = argument<8>();
+
+#if PHOENIX_LIMIT > 9
+actor<argument<9> > const arg10 = argument<9>();
+actor<argument<10> > const arg11 = argument<10>();
+actor<argument<11> > const arg12 = argument<11>();
+
+#if PHOENIX_LIMIT > 12
+actor<argument<12> > const arg13 = argument<12>();
+actor<argument<13> > const arg14 = argument<13>();
+actor<argument<14> > const arg15 = argument<14>();
+
+#endif
+#endif
+#endif
+#endif
+///////////////////////////////////////////////////////////////////////////////
+//
+// value class
+//
+// Lazy values
+//
+// A bound actual parameter is kept in a value class for deferred
+// access later when needed. A value object is immutable. Value
+// objects are typically created through the val(x) free function
+// which returns a value<T> with T deduced from the type of x. x is
+// held in the value<T> object by value.
+//
+// Lazy values are actors. As such, lazy values can be evaluated
+// through the actor's operator(). Such invocation gives the value's
+// identity. Example:
+//
+// cout << val(3)() << val("Hello World")();
+//
+// prints out "3 Hello World"
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename T>
+struct value {
+
+ typedef typename boost::remove_reference<T>::type plain_t;
+
+ template <typename TupleT>
+ struct result { typedef plain_t const type; };
+
+ value(plain_t val_)
+ : val(val_) {}
+
+ template <typename TupleT>
+ plain_t const
+ eval(TupleT const& /*args*/) const
+ {
+ return val;
+ }
+
+ plain_t val;
+};
+
+//////////////////////////////////
+template <typename T>
+inline actor<value<T> > const
+val(T v)
+{
+ return value<T>(v);
+}
+
+//////////////////////////////////
+template <typename BaseT>
+void
+val(actor<BaseT> const& v); // This is undefined and not allowed.
+
+///////////////////////////////////////////////////////////////////////////
+//
+// Arbitrary types T are typically converted to a actor<value<T> >
+// (see as_actor<T> in actor.hpp). A specialization is also provided
+// for arrays. T[N] arrays are converted to actor<value<T const*> >.
+//
+///////////////////////////////////////////////////////////////////////////
+template <typename T>
+struct as_actor {
+
+ typedef actor<value<T> > type;
+ static type convert(T const& x)
+ { return value<T>(x); }
+};
+
+//////////////////////////////////
+template <typename T, int N>
+struct as_actor<T[N]> {
+
+ typedef actor<value<T const*> > type;
+ static type convert(T const x[N])
+ { return value<T const*>(x); }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// variable class
+//
+// Lazy variables
+//
+// A bound actual parameter may also be held by non-const reference
+// in a variable class for deferred access later when needed. A
+// variable object is mutable, i.e. its referenced variable can be
+// modified. Variable objects are typically created through the
+// var(x) free function which returns a variable<T> with T deduced
+// from the type of x. x is held in the value<T> object by
+// reference.
+//
+// Lazy variables are actors. As such, lazy variables can be
+// evaluated through the actor's operator(). Such invocation gives
+// the variables's identity. Example:
+//
+// int i = 3;
+// char const* s = "Hello World";
+// cout << var(i)() << var(s)();
+//
+// prints out "3 Hello World"
+//
+// Another free function const_(x) may also be used. const_(x) creates
+// a variable<T const&> object using a constant reference.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename T>
+struct variable {
+
+ template <typename TupleT>
+ struct result { typedef T& type; };
+
+ variable(T& var_)
+ : var(var_) {}
+
+ template <typename TupleT>
+ T&
+ eval(TupleT const& /*args*/) const
+ {
+ return var;
+ }
+
+ T& var;
+};
+
+//////////////////////////////////
+template <typename T>
+inline actor<variable<T> > const
+var(T& v)
+{
+ return variable<T>(v);
+}
+
+//////////////////////////////////
+template <typename T>
+inline actor<variable<T const> > const
+const_(T const& v)
+{
+ return variable<T const>(v);
+}
+
+//////////////////////////////////
+template <typename BaseT>
+void
+var(actor<BaseT> const& v); // This is undefined and not allowed.
+
+//////////////////////////////////
+template <typename BaseT>
+void
+const_(actor<BaseT> const& v); // This is undefined and not allowed.
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace phoenix
+
+#endif
diff --git a/boost/boost/spirit/phoenix/special_ops.hpp b/boost/boost/spirit/phoenix/special_ops.hpp
new file mode 100644
index 00000000000..47cd9470b7a
--- /dev/null
+++ b/boost/boost/spirit/phoenix/special_ops.hpp
@@ -0,0 +1,342 @@
+/*=============================================================================
+ Phoenix V1.2.1
+ Copyright (c) 2001-2002 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#ifndef PHOENIX_SPECIAL_OPS_HPP
+#define PHOENIX_SPECIAL_OPS_HPP
+
+#include <boost/config.hpp>
+#ifdef BOOST_NO_STRINGSTREAM
+#include <strstream>
+#define PHOENIX_SSTREAM strstream
+#else
+#include <sstream>
+#define PHOENIX_SSTREAM stringstream
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/phoenix/operators.hpp>
+#include <iosfwd>
+
+///////////////////////////////////////////////////////////////////////////////
+#if defined(_STLPORT_VERSION) && defined(__STL_USE_OWN_NAMESPACE)
+#define PHOENIX_STD _STLP_STD
+#define PHOENIX_NO_STD_NAMESPACE
+#else
+#define PHOENIX_STD std
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//#if !defined(PHOENIX_NO_STD_NAMESPACE)
+namespace PHOENIX_STD
+{
+//#endif
+
+ template<typename T> class complex;
+
+//#if !defined(PHOENIX_NO_STD_NAMESPACE)
+}
+//#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace phoenix
+{
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// The following specializations take into account the C++ standard
+// library components. There are a couple of issues that have to be
+// dealt with to enable lazy operator overloads for the standard
+// library classes.
+//
+// *iostream (e.g. cout, cin, strstream/ stringstream) uses non-
+// canonical shift operator overloads where the lhs is taken in
+// by reference.
+//
+// *I/O manipulators overloads for the RHS of the << and >>
+// operators.
+//
+// *STL iterators can be objects that conform to pointer semantics.
+// Some operators need to be specialized for these.
+//
+// *std::complex is given a rank (see rank class in operators.hpp)
+//
+///////////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// specialization for rank<std::complex>
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename T> struct rank<PHOENIX_STD::complex<T> >
+{ static int const value = 170 + rank<T>::value; };
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// specializations for std::istream
+//
+///////////////////////////////////////////////////////////////////////////////
+#if defined(__GNUC__) && (__GNUC__ < 3)
+ #if defined(_STLPORT_VERSION)
+ #define PHOENIX_ISTREAM _IO_istream_withassign
+ #else
+ #define PHOENIX_ISTREAM PHOENIX_STD::_IO_istream_withassign
+ #endif
+#else
+// #if (defined(__ICL) && defined(_STLPORT_VERSION))
+// #define PHOENIX_ISTREAM istream_withassign
+// #else
+ #define PHOENIX_ISTREAM PHOENIX_STD::istream
+// #endif
+#endif
+
+//////////////////////////////////
+#if defined(__GNUC__) && (__GNUC__ < 3)
+// || (defined(__ICL) && defined(_STLPORT_VERSION))
+template <typename T1>
+struct binary_operator<shift_r_op, PHOENIX_ISTREAM, T1>
+{
+ typedef PHOENIX_STD::istream& result_type;
+ static result_type eval(PHOENIX_STD::istream& out, T1& rhs)
+ { return out >> rhs; }
+};
+#endif
+
+//////////////////////////////////
+template <typename T1>
+struct binary_operator<shift_r_op, PHOENIX_STD::istream, T1>
+{
+ typedef PHOENIX_STD::istream& result_type;
+ static result_type eval(PHOENIX_STD::istream& out, T1& rhs)
+ { return out >> rhs; }
+};
+
+//////////////////////////////////
+template <typename BaseT>
+inline typename impl::make_binary3
+ <shift_r_op, variable<PHOENIX_ISTREAM>, BaseT>::type
+operator>>(PHOENIX_ISTREAM& _0, actor<BaseT> const& _1)
+{
+ return impl::make_binary3
+ <shift_r_op, variable<PHOENIX_ISTREAM>, BaseT>
+ ::construct(var(_0), _1);
+}
+
+#undef PHOENIX_ISTREAM
+///////////////////////////////////////////////////////////////////////////////
+//
+// specializations for std::ostream
+//
+///////////////////////////////////////////////////////////////////////////////
+#if defined(__GNUC__) && (__GNUC__ < 3)
+ #if defined(_STLPORT_VERSION)
+ #define PHOENIX_OSTREAM _IO_ostream_withassign
+ #else
+ #define PHOENIX_OSTREAM PHOENIX_STD::_IO_ostream_withassign
+ #endif
+#else
+// #if (defined(__ICL) && defined(_STLPORT_VERSION))
+// #define PHOENIX_OSTREAM ostream_withassign
+// #else
+ #define PHOENIX_OSTREAM PHOENIX_STD::ostream
+// #endif
+#endif
+
+//////////////////////////////////
+#if defined(__GNUC__) && (__GNUC__ < 3)
+// || (defined(__ICL) && defined(_STLPORT_VERSION))
+template <typename T1>
+struct binary_operator<shift_l_op, PHOENIX_OSTREAM, T1>
+{
+ typedef PHOENIX_STD::ostream& result_type;
+ static result_type eval(PHOENIX_STD::ostream& out, T1 const& rhs)
+ { return out << rhs; }
+};
+#endif
+
+//////////////////////////////////
+template <typename T1>
+struct binary_operator<shift_l_op, PHOENIX_STD::ostream, T1>
+{
+ typedef PHOENIX_STD::ostream& result_type;
+ static result_type eval(PHOENIX_STD::ostream& out, T1 const& rhs)
+ { return out << rhs; }
+};
+
+//////////////////////////////////
+template <typename BaseT>
+inline typename impl::make_binary3
+ <shift_l_op, variable<PHOENIX_OSTREAM>, BaseT>::type
+operator<<(PHOENIX_OSTREAM& _0, actor<BaseT> const& _1)
+{
+ return impl::make_binary3
+ <shift_l_op, variable<PHOENIX_OSTREAM>, BaseT>
+ ::construct(var(_0), _1);
+}
+
+#undef PHOENIX_OSTREAM
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// specializations for std::strstream / stringstream
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename T1>
+struct binary_operator<shift_r_op, PHOENIX_STD::PHOENIX_SSTREAM, T1>
+{
+ typedef PHOENIX_STD::istream& result_type;
+ static result_type eval(PHOENIX_STD::istream& out, T1& rhs)
+ { return out >> rhs; }
+};
+
+//////////////////////////////////
+template <typename BaseT>
+inline typename impl::make_binary3
+ <shift_r_op, variable<PHOENIX_STD::PHOENIX_SSTREAM>, BaseT>::type
+operator>>(PHOENIX_STD::PHOENIX_SSTREAM& _0, actor<BaseT> const& _1)
+{
+ return impl::make_binary3
+ <shift_r_op, variable<PHOENIX_STD::PHOENIX_SSTREAM>, BaseT>
+ ::construct(var(_0), _1);
+}
+
+//////////////////////////////////
+template <typename T1>
+struct binary_operator<shift_l_op, PHOENIX_STD::PHOENIX_SSTREAM, T1>
+{
+ typedef PHOENIX_STD::ostream& result_type;
+ static result_type eval(PHOENIX_STD::ostream& out, T1 const& rhs)
+ { return out << rhs; }
+};
+
+//////////////////////////////////
+template <typename BaseT>
+inline typename impl::make_binary3
+ <shift_l_op, variable<PHOENIX_STD::PHOENIX_SSTREAM>, BaseT>::type
+operator<<(PHOENIX_STD::PHOENIX_SSTREAM& _0, actor<BaseT> const& _1)
+{
+ return impl::make_binary3
+ <shift_l_op, variable<PHOENIX_STD::PHOENIX_SSTREAM>, BaseT>
+ ::construct(var(_0), _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// I/O manipulator specializations
+//
+///////////////////////////////////////////////////////////////////////////////
+#if (!defined(__GNUC__) || (__GNUC__ > 2))
+// && !(defined(__ICL) && defined(_STLPORT_VERSION))
+
+typedef PHOENIX_STD::ios_base& (*iomanip_t)(PHOENIX_STD::ios_base&);
+typedef PHOENIX_STD::istream& (*imanip_t)(PHOENIX_STD::istream&);
+typedef PHOENIX_STD::ostream& (*omanip_t)(PHOENIX_STD::ostream&);
+
+#if defined(__BORLANDC__)
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Borland does not like i/o manipulators functions such as endl to
+// be the rhs of a lazy << operator (Borland incorrectly reports
+// ambiguity). To get around the problem, we provide function
+// pointer versions of the same name with a single trailing
+// underscore.
+//
+// You can use the same trick for other i/o manipulators.
+// Alternatively, you can prefix the manipulator with a '&'
+// operator. Example:
+//
+// cout << arg1 << &endl
+//
+///////////////////////////////////////////////////////////////////////////////
+
+imanip_t ws_ = &PHOENIX_STD::ws;
+iomanip_t dec_ = &PHOENIX_STD::dec;
+iomanip_t hex_ = &PHOENIX_STD::hex;
+iomanip_t oct_ = &PHOENIX_STD::oct;
+omanip_t endl_ = &PHOENIX_STD::endl;
+omanip_t ends_ = &PHOENIX_STD::ends;
+omanip_t flush_ = &PHOENIX_STD::flush;
+
+#else // __BORLANDC__
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// The following are overloads for I/O manipulators.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename BaseT>
+inline typename impl::make_binary1<shift_l_op, BaseT, imanip_t>::type
+operator>>(actor<BaseT> const& _0, imanip_t _1)
+{
+ return impl::make_binary1<shift_l_op, BaseT, imanip_t>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename BaseT>
+inline typename impl::make_binary1<shift_l_op, BaseT, iomanip_t>::type
+operator>>(actor<BaseT> const& _0, iomanip_t _1)
+{
+ return impl::make_binary1<shift_l_op, BaseT, iomanip_t>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename BaseT>
+inline typename impl::make_binary1<shift_l_op, BaseT, omanip_t>::type
+operator<<(actor<BaseT> const& _0, omanip_t _1)
+{
+ return impl::make_binary1<shift_l_op, BaseT, omanip_t>::construct(_0, _1);
+}
+
+//////////////////////////////////
+template <typename BaseT>
+inline typename impl::make_binary1<shift_l_op, BaseT, iomanip_t>::type
+operator<<(actor<BaseT> const& _0, iomanip_t _1)
+{
+ return impl::make_binary1<shift_l_op, BaseT, iomanip_t>::construct(_0, _1);
+}
+
+#endif // __BORLANDC__
+#endif // !defined(__GNUC__) || (__GNUC__ > 2)
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// specializations for stl iterators and containers
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename T>
+struct unary_operator<dereference_op, T>
+{
+ typedef typename T::reference result_type;
+ static result_type eval(T const& iter)
+ { return *iter; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<index_op, T0, T1>
+{
+ typedef typename T0::reference result_type;
+ static result_type eval(T0& container, T1 const& index)
+ { return container[index]; }
+};
+
+//////////////////////////////////
+template <typename T0, typename T1>
+struct binary_operator<index_op, T0 const, T1>
+{
+ typedef typename T0::const_reference result_type;
+ static result_type eval(T0 const& container, T1 const& index)
+ { return container[index]; }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace phoenix
+
+#undef PHOENIX_SSTREAM
+#undef PHOENIX_STD
+#endif
diff --git a/boost/boost/spirit/phoenix/statements.hpp b/boost/boost/spirit/phoenix/statements.hpp
new file mode 100644
index 00000000000..d20d199818a
--- /dev/null
+++ b/boost/boost/spirit/phoenix/statements.hpp
@@ -0,0 +1,444 @@
+/*=============================================================================
+ Phoenix V1.2.1
+ Copyright (c) 2001-2002 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#ifndef PHOENIX_STATEMENTS_HPP
+#define PHOENIX_STATEMENTS_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/phoenix/composite.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace phoenix {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// sequential_composite
+//
+// Two or more actors separated by the comma generates a
+// sequential_composite which is a composite actor. Example:
+//
+// actor,
+// actor,
+// actor
+//
+// The actors are evaluated sequentially. The result type of this
+// is void. Note that the last actor should not have a trailing
+// comma.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename A0, typename A1>
+struct sequential_composite {
+
+ typedef sequential_composite<A0, A1> self_t;
+
+ template <typename TupleT>
+ struct result { typedef void type; };
+
+ sequential_composite(A0 const& _0, A1 const& _1)
+ : a0(_0), a1(_1) {}
+
+ template <typename TupleT>
+ void
+ eval(TupleT const& args) const
+ {
+ a0.eval(args);
+ a1.eval(args);
+ }
+
+ A0 a0; A1 a1; // actors
+};
+
+//////////////////////////////////
+template <typename BaseT0, typename BaseT1>
+inline actor<sequential_composite<actor<BaseT0>, actor<BaseT1> > >
+operator,(actor<BaseT0> const& _0, actor<BaseT1> const& _1)
+{
+ return sequential_composite<actor<BaseT0>, actor<BaseT1> >(_0, _1);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// if_then_else_composite
+//
+// This composite has two (2) forms:
+//
+// if_(condition)
+// [
+// statement
+// ]
+//
+// and
+//
+// if_(condition)
+// [
+// true_statement
+// ]
+// .else_
+// [
+// false_statement
+// ]
+//
+// where condition is an actor that evaluates to bool. If condition
+// is true, the true_statement (again an actor) is executed
+// otherwise, the false_statement (another actor) is executed. The
+// result type of this is void. Note the trailing underscore after
+// if_ and the the leading dot and the trailing underscore before
+// and after .else_.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename CondT, typename ThenT, typename ElseT>
+struct if_then_else_composite {
+
+ typedef if_then_else_composite<CondT, ThenT, ElseT> self_t;
+
+ template <typename TupleT>
+ struct result {
+
+ typedef void type;
+ };
+
+ if_then_else_composite(
+ CondT const& cond_,
+ ThenT const& then_,
+ ElseT const& else__)
+ : cond(cond_), then(then_), else_(else__) {}
+
+ template <typename TupleT>
+ void eval(TupleT const& args) const
+ {
+ if (cond.eval(args))
+ then.eval(args);
+ else
+ else_.eval(args);
+ }
+
+ CondT cond; ThenT then; ElseT else_; // actors
+};
+
+//////////////////////////////////
+template <typename CondT, typename ThenT>
+struct else_gen {
+
+ else_gen(CondT const& cond_, ThenT const& then_)
+ : cond(cond_), then(then_) {}
+
+ template <typename ElseT>
+ actor<if_then_else_composite<CondT, ThenT,
+ typename as_actor<ElseT>::type> >
+ operator[](ElseT const& else_)
+ {
+ typedef if_then_else_composite<CondT, ThenT,
+ typename as_actor<ElseT>::type>
+ result;
+
+ return result(cond, then, as_actor<ElseT>::convert(else_));
+ }
+
+ CondT cond; ThenT then;
+};
+
+//////////////////////////////////
+template <typename CondT, typename ThenT>
+struct if_then_composite {
+
+ typedef if_then_composite<CondT, ThenT> self_t;
+
+ template <typename TupleT>
+ struct result { typedef void type; };
+
+ if_then_composite(CondT const& cond_, ThenT const& then_)
+ : cond(cond_), then(then_), else_(cond, then) {}
+
+ template <typename TupleT>
+ void eval(TupleT const& args) const
+ {
+ if (cond.eval(args))
+ then.eval(args);
+ }
+
+ CondT cond; ThenT then; // actors
+ else_gen<CondT, ThenT> else_;
+};
+
+//////////////////////////////////
+template <typename CondT>
+struct if_gen {
+
+ if_gen(CondT const& cond_)
+ : cond(cond_) {}
+
+ template <typename ThenT>
+ actor<if_then_composite<
+ typename as_actor<CondT>::type,
+ typename as_actor<ThenT>::type> >
+ operator[](ThenT const& then) const
+ {
+ typedef if_then_composite<
+ typename as_actor<CondT>::type,
+ typename as_actor<ThenT>::type>
+ result;
+
+ return result(
+ as_actor<CondT>::convert(cond),
+ as_actor<ThenT>::convert(then));
+ }
+
+ CondT cond;
+};
+
+//////////////////////////////////
+template <typename CondT>
+inline if_gen<CondT>
+if_(CondT const& cond)
+{
+ return if_gen<CondT>(cond);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// while_composite
+//
+// This composite has the form:
+//
+// while_(condition)
+// [
+// statement
+// ]
+//
+// While the condition (an actor) evaluates to true, statement
+// (another actor) is executed. The result type of this is void.
+// Note the trailing underscore after while_.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename CondT, typename DoT>
+struct while_composite {
+
+ typedef while_composite<CondT, DoT> self_t;
+
+ template <typename TupleT>
+ struct result { typedef void type; };
+
+ while_composite(CondT const& cond_, DoT const& do__)
+ : cond(cond_), do_(do__) {}
+
+ template <typename TupleT>
+ void eval(TupleT const& args) const
+ {
+ while (cond.eval(args))
+ do_.eval(args);
+ }
+
+ CondT cond;
+ DoT do_;
+};
+
+//////////////////////////////////
+template <typename CondT>
+struct while_gen {
+
+ while_gen(CondT const& cond_)
+ : cond(cond_) {}
+
+ template <typename DoT>
+ actor<while_composite<
+ typename as_actor<CondT>::type,
+ typename as_actor<DoT>::type> >
+ operator[](DoT const& do_) const
+ {
+ typedef while_composite<
+ typename as_actor<CondT>::type,
+ typename as_actor<DoT>::type>
+ result;
+
+ return result(
+ as_actor<CondT>::convert(cond),
+ as_actor<DoT>::convert(do_));
+ }
+
+ CondT cond;
+};
+
+//////////////////////////////////
+template <typename CondT>
+inline while_gen<CondT>
+while_(CondT const& cond)
+{
+ return while_gen<CondT>(cond);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// do_composite
+//
+// This composite has the form:
+//
+// do_
+// [
+// statement
+// ]
+// .while_(condition)
+//
+// While the condition (an actor) evaluates to true, statement
+// (another actor) is executed. The statement is executed at least
+// once. The result type of this is void. Note the trailing
+// underscore after do_ and the the leading dot and the trailing
+// underscore before and after .while_.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename DoT, typename CondT>
+struct do_composite {
+
+ typedef do_composite<DoT, CondT> self_t;
+
+ template <typename TupleT>
+ struct result { typedef void type; };
+
+ do_composite(DoT const& do__, CondT const& cond_)
+ : do_(do__), cond(cond_) {}
+
+ template <typename TupleT>
+ void eval(TupleT const& args) const
+ {
+ do
+ do_.eval(args);
+ while (cond.eval(args));
+ }
+
+ DoT do_;
+ CondT cond;
+};
+
+////////////////////////////////////
+template <typename DoT>
+struct do_gen2 {
+
+ do_gen2(DoT const& do__)
+ : do_(do__) {}
+
+ template <typename CondT>
+ actor<do_composite<
+ typename as_actor<DoT>::type,
+ typename as_actor<CondT>::type> >
+ while_(CondT const& cond) const
+ {
+ typedef do_composite<
+ typename as_actor<DoT>::type,
+ typename as_actor<CondT>::type>
+ result;
+
+ return result(
+ as_actor<DoT>::convert(do_),
+ as_actor<CondT>::convert(cond));
+ }
+
+ DoT do_;
+};
+
+////////////////////////////////////
+struct do_gen {
+
+ template <typename DoT>
+ do_gen2<DoT>
+ operator[](DoT const& do_) const
+ {
+ return do_gen2<DoT>(do_);
+ }
+};
+
+do_gen const do_ = do_gen();
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// for_composite
+//
+// This statement has the form:
+//
+// for_(init, condition, step)
+// [
+// statement
+// ]
+//
+// Where init, condition, step and statement are all actors. init
+// is executed once before entering the for-loop. The for-loop
+// exits once condition evaluates to false. At each loop iteration,
+// step and statement is called. The result of this statement is
+// void. Note the trailing underscore after for_.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename InitT, typename CondT, typename StepT, typename DoT>
+struct for_composite {
+
+ typedef composite<InitT, CondT, StepT, DoT> self_t;
+
+ template <typename TupleT>
+ struct result { typedef void type; };
+
+ for_composite(
+ InitT const& init_,
+ CondT const& cond_,
+ StepT const& step_,
+ DoT const& do__)
+ : init(init_), cond(cond_), step(step_), do_(do__) {}
+
+ template <typename TupleT>
+ void
+ eval(TupleT const& args) const
+ {
+ for (init.eval(args); cond.eval(args); step.eval(args))
+ do_.eval(args);
+ }
+
+ InitT init; CondT cond; StepT step; DoT do_; // actors
+};
+
+//////////////////////////////////
+template <typename InitT, typename CondT, typename StepT>
+struct for_gen {
+
+ for_gen(
+ InitT const& init_,
+ CondT const& cond_,
+ StepT const& step_)
+ : init(init_), cond(cond_), step(step_) {}
+
+ template <typename DoT>
+ actor<for_composite<
+ typename as_actor<InitT>::type,
+ typename as_actor<CondT>::type,
+ typename as_actor<StepT>::type,
+ typename as_actor<DoT>::type> >
+ operator[](DoT const& do_) const
+ {
+ typedef for_composite<
+ typename as_actor<InitT>::type,
+ typename as_actor<CondT>::type,
+ typename as_actor<StepT>::type,
+ typename as_actor<DoT>::type>
+ result;
+
+ return result(
+ as_actor<InitT>::convert(init),
+ as_actor<CondT>::convert(cond),
+ as_actor<StepT>::convert(step),
+ as_actor<DoT>::convert(do_));
+ }
+
+ InitT init; CondT cond; StepT step;
+};
+
+//////////////////////////////////
+template <typename InitT, typename CondT, typename StepT>
+inline for_gen<InitT, CondT, StepT>
+for_(InitT const& init, CondT const& cond, StepT const& step)
+{
+ return for_gen<InitT, CondT, StepT>(init, cond, step);
+}
+
+} // namespace phoenix
+
+#endif
diff --git a/boost/boost/spirit/phoenix/tuple_helpers.hpp b/boost/boost/spirit/phoenix/tuple_helpers.hpp
new file mode 100644
index 00000000000..f8875e0c791
--- /dev/null
+++ b/boost/boost/spirit/phoenix/tuple_helpers.hpp
@@ -0,0 +1,1076 @@
+/*=============================================================================
+ Phoenix V1.2.1
+ Copyright (c) 2002 Joel de Guzman
+ Copyright (c) 2002-2003 Hartmut Kaiser
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#ifndef PHOENIX_TUPLEHELPERS_HPP
+#define PHOENIX_TUPLEHELPERS_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <cassert>
+#include <boost/spirit/phoenix/tuples.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace phoenix
+{
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// make_tuple template class
+//
+// This template class is used to calculate a tuple type required to hold
+// the given template parameter type
+//
+///////////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////////////////////////
+// normal (non-tuple types are wrapped into a tuple)
+template <typename ResultT>
+struct make_tuple {
+
+ typedef tuple<ResultT> type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// nil_t is converted to an empty tuple type
+template <>
+struct make_tuple<nil_t> {
+
+ typedef tuple<> type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// tuple types are left alone without any refactoring
+template <
+ typename A, typename B, typename C
+#if PHOENIX_LIMIT > 3
+ , typename D, typename E, typename F
+#if PHOENIX_LIMIT > 6
+ , typename G, typename H, typename I
+#if PHOENIX_LIMIT > 9
+ , typename J, typename K, typename L
+#if PHOENIX_LIMIT > 12
+ , typename M, typename N, typename O
+#endif
+#endif
+#endif
+#endif
+>
+struct make_tuple<tuple<A, B, C
+#if PHOENIX_LIMIT > 3
+ , D, E, F
+#if PHOENIX_LIMIT > 6
+ , G, H, I
+#if PHOENIX_LIMIT > 9
+ , J, K, L
+#if PHOENIX_LIMIT > 12
+ , M, N, O
+#endif
+#endif
+#endif
+#endif
+ > > {
+
+// the tuple parameter itself is the required tuple type
+ typedef tuple<A, B, C
+#if PHOENIX_LIMIT > 3
+ , D, E, F
+#if PHOENIX_LIMIT > 6
+ , G, H, I
+#if PHOENIX_LIMIT > 9
+ , J, K, L
+#if PHOENIX_LIMIT > 12
+ , M, N, O
+#endif
+#endif
+#endif
+#endif
+ > type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// concat_tuple type computer
+//
+// This class returns the type of a tuple, which is constructed by
+// concatenating a tuple with a given type
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename TupleT, typename AppendT>
+struct concat_tuple;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// concat tuple <0 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename AppendT>
+struct concat_tuple<tuple<>, AppendT> {
+
+ typedef tuple<AppendT> type;
+};
+
+template <>
+struct concat_tuple<tuple<>, nil_t> {
+
+ typedef tuple<> type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// concat tuple <1 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename A, typename AppendT>
+struct concat_tuple<tuple<A>, AppendT> {
+
+ typedef tuple<A, AppendT> type;
+};
+
+template <typename A>
+struct concat_tuple<tuple<A>, nil_t> {
+
+ typedef tuple<A> type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// concat tuple <2 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename A, typename B, typename AppendT>
+struct concat_tuple<tuple<A, B>, AppendT> {
+
+ typedef tuple<A, B, AppendT> type;
+};
+
+template <typename A, typename B>
+struct concat_tuple<tuple<A, B>, nil_t> {
+
+ typedef tuple<A, B> type;
+};
+
+#if PHOENIX_LIMIT > 3
+///////////////////////////////////////////////////////////////////////////////
+//
+// concat tuple <3 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+ typename A, typename B, typename C,
+ typename AppendT
+>
+struct concat_tuple<tuple<A, B, C>, AppendT> {
+
+ typedef tuple<A, B, C, AppendT> type;
+};
+
+template <
+ typename A, typename B, typename C
+>
+struct concat_tuple<tuple<A, B, C>, nil_t> {
+
+ typedef tuple<A, B, C> type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// concat tuple <4 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+ typename A, typename B, typename C, typename D,
+ typename AppendT
+>
+struct concat_tuple<tuple<A, B, C, D>, AppendT> {
+
+ typedef tuple<A, B, C, D, AppendT> type;
+};
+
+template <
+ typename A, typename B, typename C, typename D
+>
+struct concat_tuple<tuple<A, B, C, D>, nil_t> {
+
+ typedef tuple<A, B, C, D> type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// concat tuple <5 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename AppendT
+>
+struct concat_tuple<tuple<A, B, C, D, E>, AppendT> {
+
+ typedef tuple<A, B, C, D, E, AppendT> type;
+};
+
+template <
+ typename A, typename B, typename C, typename D, typename E
+>
+struct concat_tuple<tuple<A, B, C, D, E>, nil_t> {
+
+ typedef tuple<A, B, C, D, E> type;
+};
+
+#if PHOENIX_LIMIT > 6
+///////////////////////////////////////////////////////////////////////////////
+//
+// concat tuple <6 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+ typename A, typename B, typename C, typename D, typename E, typename F,
+ typename AppendT
+>
+struct concat_tuple<tuple<A, B, C, D, E, F>, AppendT> {
+
+ typedef tuple<A, B, C, D, E, F, AppendT> type;
+};
+
+template <
+ typename A, typename B, typename C, typename D, typename E, typename F
+>
+struct concat_tuple<tuple<A, B, C, D, E, F>, nil_t> {
+
+ typedef tuple<A, B, C, D, E, F> type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// concat tuple <7 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+ typename A, typename B, typename C, typename D, typename E, typename F,
+ typename G,
+ typename AppendT
+>
+struct concat_tuple<tuple<A, B, C, D, E, F, G>, AppendT> {
+
+ typedef tuple<A, B, C, D, E, F, G, AppendT> type;
+};
+
+template <
+ typename A, typename B, typename C, typename D, typename E, typename F,
+ typename G
+>
+struct concat_tuple<tuple<A, B, C, D, E, F, G>, nil_t> {
+
+ typedef tuple<A, B, C, D, E, F, G> type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// concat tuple <8 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+ typename A, typename B, typename C, typename D, typename E, typename F,
+ typename G, typename H,
+ typename AppendT
+>
+struct concat_tuple<tuple<A, B, C, D, E, F, G, H>, AppendT> {
+
+ typedef tuple<A, B, C, D, E, F, G, H, AppendT> type;
+};
+
+template <
+ typename A, typename B, typename C, typename D, typename E, typename F,
+ typename G, typename H
+>
+struct concat_tuple<tuple<A, B, C, D, E, F, G, H>, nil_t> {
+
+ typedef tuple<A, B, C, D, E, F, G, H> type;
+};
+
+#if PHOENIX_LIMIT > 9
+///////////////////////////////////////////////////////////////////////////////
+//
+// concat tuple <9 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+ typename A, typename B, typename C, typename D, typename E, typename F,
+ typename G, typename H, typename I,
+ typename AppendT
+>
+struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I>, AppendT> {
+
+ typedef tuple<A, B, C, D, E, F, G, H, I, AppendT> type;
+};
+
+template <
+ typename A, typename B, typename C, typename D, typename E, typename F,
+ typename G, typename H, typename I
+>
+struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I>, nil_t> {
+
+ typedef tuple<A, B, C, D, E, F, G, H, I> type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// concat tuple <10 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+ typename A, typename B, typename C, typename D, typename E, typename F,
+ typename G, typename H, typename I, typename J,
+ typename AppendT
+>
+struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J>, AppendT> {
+
+ typedef tuple<A, B, C, D, E, F, G, H, I, J, AppendT> type;
+};
+
+template <
+ typename A, typename B, typename C, typename D, typename E, typename F,
+ typename G, typename H, typename I, typename J
+>
+struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J>, nil_t> {
+
+ typedef tuple<A, B, C, D, E, F, G, H, I, J> type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// concat tuple <11 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+ typename A, typename B, typename C, typename D, typename E, typename F,
+ typename G, typename H, typename I, typename J, typename K,
+ typename AppendT
+>
+struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J, K>, AppendT> {
+
+ typedef tuple<A, B, C, D, E, F, G, H, I, J, K, AppendT> type;
+};
+
+template <
+ typename A, typename B, typename C, typename D, typename E, typename F,
+ typename G, typename H, typename I, typename J, typename K
+>
+struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J, K>, nil_t> {
+
+ typedef tuple<A, B, C, D, E, F, G, H, I, J, K> type;
+};
+
+#if PHOENIX_LIMIT > 12
+///////////////////////////////////////////////////////////////////////////////
+//
+// concat tuple <12 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+ typename A, typename B, typename C, typename D, typename E, typename F,
+ typename G, typename H, typename I, typename J, typename K, typename L,
+ typename AppendT
+>
+struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J, K, L>, AppendT> {
+
+ typedef tuple<A, B, C, D, E, F, G, H, I, J, K, L, AppendT> type;
+};
+
+template <
+ typename A, typename B, typename C, typename D, typename E, typename F,
+ typename G, typename H, typename I, typename J, typename K, typename L
+>
+struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J, K, L>, nil_t> {
+
+ typedef tuple<A, B, C, D, E, F, G, H, I, J, K, L> type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// concat tuple <13 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+ typename A, typename B, typename C, typename D, typename E, typename F,
+ typename G, typename H, typename I, typename J, typename K, typename L,
+ typename M,
+ typename AppendT
+>
+struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J, K, L, M>, AppendT> {
+
+ typedef tuple<A, B, C, D, E, F, G, H, I, J, K, L, M, AppendT> type;
+};
+
+template <
+ typename A, typename B, typename C, typename D, typename E, typename F,
+ typename G, typename H, typename I, typename J, typename K, typename L,
+ typename M
+>
+struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J, K, L, M>, nil_t> {
+
+ typedef tuple<A, B, C, D, E, F, G, H, I, J, K, L, M> type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// concat tuple <14 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+ typename A, typename B, typename C, typename D, typename E, typename F,
+ typename G, typename H, typename I, typename J, typename K, typename L,
+ typename M, typename N,
+ typename AppendT
+>
+struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J, K, L, M, N>, AppendT> {
+
+ typedef tuple<A, B, C, D, E, F, G, H, I, J, K, L, M, N, AppendT> type;
+};
+
+template <
+ typename A, typename B, typename C, typename D, typename E, typename F,
+ typename G, typename H, typename I, typename J, typename K, typename L,
+ typename M, typename N
+>
+struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J, K, L, M, N>, nil_t> {
+
+ typedef tuple<A, B, C, D, E, F, G, H, I, J, K, L, M, N> type;
+};
+
+#endif
+#endif
+#endif
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// concat_tuples type computer
+//
+// This template class returns the type of a tuple built from the
+// concatenation of two given tuples.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename TupleT1, typename TupleT2, int N, typename AppendT>
+struct concat_tuple_element {
+
+ typedef
+ typename concat_tuple_element<
+ typename concat_tuple<TupleT1, AppendT>::type, TupleT2, N+1,
+ typename tuple_element<N+1, TupleT2>::type
+ >::type
+ type;
+};
+
+template <typename TupleT1, typename TupleT2, int N>
+struct concat_tuple_element<TupleT1, TupleT2, N, nil_t> {
+
+ typedef TupleT1 type;
+};
+
+template <typename TupleT1, typename TupleT2>
+struct concat_tuples {
+
+ typedef
+ typename concat_tuple_element<
+ TupleT1, TupleT2, 0,
+ typename tuple_element<0, TupleT2>::type
+ >::type
+ type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// convert_actors template function
+//
+// The convert_actors template functions constructs a new tuple object
+// composed of the elements returned by the actors contained in the
+// input tuple. (i.e. the given tuple type 'actor_tuple' contains a set
+// of actors to evaluate and the resulting tuple contains the results of
+// evaluating the actors.)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ActorT, typename TupleT>
+struct actor_result; // forward declaration
+
+namespace impl
+{
+ template <unsigned N>
+ struct convert_actors_ {};
+}
+
+template <typename TupleResultT, typename ActorTupleT>
+TupleResultT
+convert_actors(ActorTupleT const& actor_tuple)
+{
+ BOOST_STATIC_ASSERT(ActorTupleT::length <= TupleResultT::length);
+ BOOST_STATIC_CONSTANT(int, length = TupleResultT::length);
+ return impl::convert_actors_<length>
+ ::template apply<TupleResultT, ActorTupleT>::do_(actor_tuple);
+}
+
+namespace impl
+{
+ template <int N, typename TupleResultT, typename ActorTupleT>
+ struct convert_actor
+ {
+ typedef typename tuple_element<N, TupleResultT>::type type;
+
+ template <bool C>
+ struct is_default_t {};
+ typedef is_default_t<true> is_default;
+ typedef is_default_t<false> is_not_default;
+
+ static type
+ actor_element(ActorTupleT const& /*actor_tuple*/, is_default)
+ {
+ return type(); // default construct
+ }
+
+ static type
+ actor_element(ActorTupleT const& actor_tuple, is_not_default)
+ {
+ BOOST_STATIC_ASSERT(ActorTupleT::length <= TupleResultT::length);
+ return actor_tuple[tuple_index<N>()](); // apply the actor
+ }
+
+ static type
+ do_(ActorTupleT const& actor_tuple)
+ {
+ return actor_element(
+ actor_tuple, is_default_t<(N >= ActorTupleT::length)>());
+ }
+ };
+
+ ///////////////////////////////////////
+ template <>
+ struct convert_actors_<1>
+ {
+ template <typename TupleResultT, typename ActorTupleT>
+ struct apply
+ {
+ static TupleResultT
+ do_(ActorTupleT const& actor_tuple)
+ {
+ typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
+
+ return TupleResultT(
+ converter0::do_(actor_tuple)
+ );
+ }
+ };
+ };
+
+ ///////////////////////////////////////
+ template <>
+ struct convert_actors_<2>
+ {
+ template <typename TupleResultT, typename ActorTupleT>
+ struct apply
+ {
+ static TupleResultT
+ do_(ActorTupleT const& actor_tuple)
+ {
+ typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
+ typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
+
+ using namespace tuple_index_names;
+ return TupleResultT(
+ converter0::do_(actor_tuple)
+ , converter1::do_(actor_tuple)
+ );
+ }
+ };
+ };
+
+ ///////////////////////////////////////
+ template <>
+ struct convert_actors_<3>
+ {
+ template <typename TupleResultT, typename ActorTupleT>
+ struct apply
+ {
+ static TupleResultT
+ do_(ActorTupleT const& actor_tuple)
+ {
+ typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
+ typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
+ typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
+
+ using namespace tuple_index_names;
+ return TupleResultT(
+ converter0::do_(actor_tuple)
+ , converter1::do_(actor_tuple)
+ , converter2::do_(actor_tuple)
+ );
+ }
+ };
+ };
+
+ #if PHOENIX_LIMIT > 3
+
+ /////////////////////////////////////
+ template <>
+ struct convert_actors_<4>
+ {
+ template <typename TupleResultT, typename ActorTupleT>
+ struct apply
+ {
+ static TupleResultT
+ do_(ActorTupleT const& actor_tuple)
+ {
+ typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
+ typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
+ typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
+ typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
+
+ using namespace tuple_index_names;
+ return TupleResultT(
+ converter0::do_(actor_tuple)
+ , converter1::do_(actor_tuple)
+ , converter2::do_(actor_tuple)
+ , converter3::do_(actor_tuple)
+ );
+ }
+ };
+ };
+
+ /////////////////////////////////////
+ template <>
+ struct convert_actors_<5>
+ {
+ template <typename TupleResultT, typename ActorTupleT>
+ struct apply
+ {
+ static TupleResultT
+ do_(ActorTupleT const& actor_tuple)
+ {
+ typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
+ typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
+ typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
+ typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
+ typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
+
+ using namespace tuple_index_names;
+ return TupleResultT(
+ converter0::do_(actor_tuple)
+ , converter1::do_(actor_tuple)
+ , converter2::do_(actor_tuple)
+ , converter3::do_(actor_tuple)
+ , converter4::do_(actor_tuple)
+ );
+ }
+ };
+ };
+
+ /////////////////////////////////////
+ template <>
+ struct convert_actors_<6>
+ {
+ template <typename TupleResultT, typename ActorTupleT>
+ struct apply
+ {
+ static TupleResultT
+ do_(ActorTupleT const& actor_tuple)
+ {
+ typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
+ typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
+ typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
+ typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
+ typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
+ typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
+
+ using namespace tuple_index_names;
+ return TupleResultT(
+ converter0::do_(actor_tuple)
+ , converter1::do_(actor_tuple)
+ , converter2::do_(actor_tuple)
+ , converter3::do_(actor_tuple)
+ , converter4::do_(actor_tuple)
+ , converter5::do_(actor_tuple)
+ );
+ }
+ };
+ };
+
+ #if PHOENIX_LIMIT > 6
+
+ /////////////////////////////////////
+ template <>
+ struct convert_actors_<7>
+ {
+ template <typename TupleResultT, typename ActorTupleT>
+ struct apply
+ {
+ static TupleResultT
+ do_(ActorTupleT const& actor_tuple)
+ {
+ typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
+ typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
+ typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
+ typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
+ typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
+ typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
+ typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6;
+
+ using namespace tuple_index_names;
+ return TupleResultT(
+ converter0::do_(actor_tuple)
+ , converter1::do_(actor_tuple)
+ , converter2::do_(actor_tuple)
+ , converter3::do_(actor_tuple)
+ , converter4::do_(actor_tuple)
+ , converter5::do_(actor_tuple)
+ , converter6::do_(actor_tuple)
+ );
+ }
+ };
+ };
+
+ /////////////////////////////////////
+ template <>
+ struct convert_actors_<8>
+ {
+ template <typename TupleResultT, typename ActorTupleT>
+ struct apply
+ {
+ static TupleResultT
+ do_(ActorTupleT const& actor_tuple)
+ {
+ typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
+ typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
+ typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
+ typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
+ typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
+ typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
+ typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6;
+ typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7;
+
+ using namespace tuple_index_names;
+ return TupleResultT(
+ converter0::do_(actor_tuple)
+ , converter1::do_(actor_tuple)
+ , converter2::do_(actor_tuple)
+ , converter3::do_(actor_tuple)
+ , converter4::do_(actor_tuple)
+ , converter5::do_(actor_tuple)
+ , converter6::do_(actor_tuple)
+ , converter7::do_(actor_tuple)
+ );
+ }
+ };
+ };
+
+ /////////////////////////////////////
+ template <>
+ struct convert_actors_<9>
+ {
+ template <typename TupleResultT, typename ActorTupleT>
+ struct apply
+ {
+ static TupleResultT
+ do_(ActorTupleT const& actor_tuple)
+ {
+ typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
+ typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
+ typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
+ typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
+ typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
+ typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
+ typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6;
+ typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7;
+ typedef impl::convert_actor<8, TupleResultT, ActorTupleT> converter8;
+
+ using namespace tuple_index_names;
+ return TupleResultT(
+ converter0::do_(actor_tuple)
+ , converter1::do_(actor_tuple)
+ , converter2::do_(actor_tuple)
+ , converter3::do_(actor_tuple)
+ , converter4::do_(actor_tuple)
+ , converter5::do_(actor_tuple)
+ , converter6::do_(actor_tuple)
+ , converter7::do_(actor_tuple)
+ , converter8::do_(actor_tuple)
+ );
+ }
+ };
+ };
+
+ #if PHOENIX_LIMIT > 9
+
+ /////////////////////////////////////
+ template <>
+ struct convert_actors_<10>
+ {
+ template <typename TupleResultT, typename ActorTupleT>
+ struct apply
+ {
+ static TupleResultT
+ do_(ActorTupleT const& actor_tuple)
+ {
+ typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
+ typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
+ typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
+ typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
+ typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
+ typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
+ typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6;
+ typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7;
+ typedef impl::convert_actor<8, TupleResultT, ActorTupleT> converter8;
+ typedef impl::convert_actor<9, TupleResultT, ActorTupleT> converter9;
+
+ using namespace tuple_index_names;
+ return TupleResultT(
+ converter0::do_(actor_tuple)
+ , converter1::do_(actor_tuple)
+ , converter2::do_(actor_tuple)
+ , converter3::do_(actor_tuple)
+ , converter4::do_(actor_tuple)
+ , converter5::do_(actor_tuple)
+ , converter6::do_(actor_tuple)
+ , converter7::do_(actor_tuple)
+ , converter8::do_(actor_tuple)
+ , converter9::do_(actor_tuple)
+ );
+ }
+ };
+ };
+
+ /////////////////////////////////////
+ template <>
+ struct convert_actors_<11>
+ {
+ template <typename TupleResultT, typename ActorTupleT>
+ struct apply
+ {
+ static TupleResultT
+ do_(ActorTupleT const& actor_tuple)
+ {
+ typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
+ typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
+ typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
+ typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
+ typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
+ typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
+ typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6;
+ typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7;
+ typedef impl::convert_actor<8, TupleResultT, ActorTupleT> converter8;
+ typedef impl::convert_actor<9, TupleResultT, ActorTupleT> converter9;
+ typedef impl::convert_actor<10, TupleResultT, ActorTupleT> converter10;
+
+ using namespace tuple_index_names;
+ return TupleResultT(
+ converter0::do_(actor_tuple)
+ , converter1::do_(actor_tuple)
+ , converter2::do_(actor_tuple)
+ , converter3::do_(actor_tuple)
+ , converter4::do_(actor_tuple)
+ , converter5::do_(actor_tuple)
+ , converter6::do_(actor_tuple)
+ , converter7::do_(actor_tuple)
+ , converter8::do_(actor_tuple)
+ , converter9::do_(actor_tuple)
+ , converter10::do_(actor_tuple)
+ );
+ }
+ };
+ };
+
+ /////////////////////////////////////
+ template <>
+ struct convert_actors_<12>
+ {
+ template <typename TupleResultT, typename ActorTupleT>
+ struct apply
+ {
+ static TupleResultT
+ do_(ActorTupleT const& actor_tuple)
+ {
+ typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
+ typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
+ typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
+ typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
+ typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
+ typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
+ typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6;
+ typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7;
+ typedef impl::convert_actor<8, TupleResultT, ActorTupleT> converter8;
+ typedef impl::convert_actor<9, TupleResultT, ActorTupleT> converter9;
+ typedef impl::convert_actor<10, TupleResultT, ActorTupleT> converter10;
+ typedef impl::convert_actor<11, TupleResultT, ActorTupleT> converter11;
+
+ using namespace tuple_index_names;
+ return TupleResultT(
+ converter0::do_(actor_tuple)
+ , converter1::do_(actor_tuple)
+ , converter2::do_(actor_tuple)
+ , converter3::do_(actor_tuple)
+ , converter4::do_(actor_tuple)
+ , converter5::do_(actor_tuple)
+ , converter6::do_(actor_tuple)
+ , converter7::do_(actor_tuple)
+ , converter8::do_(actor_tuple)
+ , converter9::do_(actor_tuple)
+ , converter10::do_(actor_tuple)
+ , converter11::do_(actor_tuple)
+ );
+ }
+ };
+ };
+
+ #if PHOENIX_LIMIT > 12
+
+ /////////////////////////////////////
+ template <>
+ struct convert_actors_<13>
+ {
+ template <typename TupleResultT, typename ActorTupleT>
+ struct apply
+ {
+ static TupleResultT
+ do_(ActorTupleT const& actor_tuple)
+ {
+ typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
+ typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
+ typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
+ typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
+ typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
+ typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
+ typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6;
+ typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7;
+ typedef impl::convert_actor<8, TupleResultT, ActorTupleT> converter8;
+ typedef impl::convert_actor<9, TupleResultT, ActorTupleT> converter9;
+ typedef impl::convert_actor<10, TupleResultT, ActorTupleT> converter10;
+ typedef impl::convert_actor<11, TupleResultT, ActorTupleT> converter11;
+ typedef impl::convert_actor<12, TupleResultT, ActorTupleT> converter12;
+
+ using namespace tuple_index_names;
+ return TupleResultT(
+ converter0::do_(actor_tuple)
+ , converter1::do_(actor_tuple)
+ , converter2::do_(actor_tuple)
+ , converter3::do_(actor_tuple)
+ , converter4::do_(actor_tuple)
+ , converter5::do_(actor_tuple)
+ , converter6::do_(actor_tuple)
+ , converter7::do_(actor_tuple)
+ , converter8::do_(actor_tuple)
+ , converter9::do_(actor_tuple)
+ , converter10::do_(actor_tuple)
+ , converter11::do_(actor_tuple)
+ , converter12::do_(actor_tuple)
+ );
+ }
+ };
+ };
+
+ ///////////////////////////////////////
+ template <>
+ struct convert_actors_<14>
+ {
+ template <typename TupleResultT, typename ActorTupleT>
+ struct apply
+ {
+ static TupleResultT
+ do_(ActorTupleT const& actor_tuple)
+ {
+ typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
+ typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
+ typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
+ typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
+ typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
+ typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
+ typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6;
+ typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7;
+ typedef impl::convert_actor<8, TupleResultT, ActorTupleT> converter8;
+ typedef impl::convert_actor<9, TupleResultT, ActorTupleT> converter9;
+ typedef impl::convert_actor<10, TupleResultT, ActorTupleT> converter10;
+ typedef impl::convert_actor<11, TupleResultT, ActorTupleT> converter11;
+ typedef impl::convert_actor<12, TupleResultT, ActorTupleT> converter12;
+ typedef impl::convert_actor<13, TupleResultT, ActorTupleT> converter13;
+
+ using namespace tuple_index_names;
+ return TupleResultT(
+ converter0::do_(actor_tuple)
+ , converter1::do_(actor_tuple)
+ , converter2::do_(actor_tuple)
+ , converter3::do_(actor_tuple)
+ , converter4::do_(actor_tuple)
+ , converter5::do_(actor_tuple)
+ , converter6::do_(actor_tuple)
+ , converter7::do_(actor_tuple)
+ , converter8::do_(actor_tuple)
+ , converter9::do_(actor_tuple)
+ , converter10::do_(actor_tuple)
+ , converter11::do_(actor_tuple)
+ , converter12::do_(actor_tuple)
+ , converter13::do_(actor_tuple)
+ );
+ }
+ };
+ };
+
+ ///////////////////////////////////////
+ template <>
+ struct convert_actors_<15>
+ {
+ template <typename TupleResultT, typename ActorTupleT>
+ struct apply
+ {
+ static TupleResultT
+ do_(ActorTupleT const& actor_tuple)
+ {
+ typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
+ typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
+ typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
+ typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
+ typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
+ typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
+ typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6;
+ typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7;
+ typedef impl::convert_actor<8, TupleResultT, ActorTupleT> converter8;
+ typedef impl::convert_actor<9, TupleResultT, ActorTupleT> converter9;
+ typedef impl::convert_actor<10, TupleResultT, ActorTupleT> converter10;
+ typedef impl::convert_actor<11, TupleResultT, ActorTupleT> converter11;
+ typedef impl::convert_actor<12, TupleResultT, ActorTupleT> converter12;
+ typedef impl::convert_actor<13, TupleResultT, ActorTupleT> converter13;
+ typedef impl::convert_actor<14, TupleResultT, ActorTupleT> converter14;
+
+ using namespace tuple_index_names;
+ return TupleResultT(
+ converter0::do_(actor_tuple)
+ , converter1::do_(actor_tuple)
+ , converter2::do_(actor_tuple)
+ , converter3::do_(actor_tuple)
+ , converter4::do_(actor_tuple)
+ , converter5::do_(actor_tuple)
+ , converter6::do_(actor_tuple)
+ , converter7::do_(actor_tuple)
+ , converter8::do_(actor_tuple)
+ , converter9::do_(actor_tuple)
+ , converter10::do_(actor_tuple)
+ , converter11::do_(actor_tuple)
+ , converter12::do_(actor_tuple)
+ , converter13::do_(actor_tuple)
+ , converter14::do_(actor_tuple)
+ );
+ }
+ };
+ };
+
+ #endif
+ #endif
+ #endif
+ #endif
+} // namespace impl
+
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace phoenix
+
+#endif // PHOENIX_TUPLEHELPERS_HPP
diff --git a/boost/boost/spirit/phoenix/tuples.hpp b/boost/boost/spirit/phoenix/tuples.hpp
new file mode 100644
index 00000000000..0cde04127f2
--- /dev/null
+++ b/boost/boost/spirit/phoenix/tuples.hpp
@@ -0,0 +1,1330 @@
+/*=============================================================================
+ Phoenix V1.2.1
+ Copyright (c) 2001-2002 Joel de Guzman
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+#ifndef PHOENIX_TUPLES_HPP
+#define PHOENIX_TUPLES_HPP
+
+#if defined(BOOST_MSVC) && (BOOST_MSVC <= 1300)
+#error "Sorry, Phoenix does not support VC6 and VC7. Please upgrade to at least VC7.1"
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Phoenix predefined maximum limit. This limit defines the maximum
+// number of elements a tuple can hold. This number defaults to 3. The
+// actual maximum is rounded up in multiples of 3. Thus, if this value
+// is 4, the actual limit is 6. The ultimate maximum limit in this
+// implementation is 15.
+//
+///////////////////////////////////////////////////////////////////////////////
+#ifndef PHOENIX_LIMIT
+#define PHOENIX_LIMIT 3
+#endif
+
+#if defined(__BORLANDC__) && (__BORLANDC__ <= 0x561)
+namespace phoenix { namespace borland_only
+{
+ namespace ftors
+ {
+ // We define these dummy template functions. Borland complains when
+ // a template class has the same name as a template function,
+ // regardless if they are in different namespaces.
+
+ template <typename T> void if_(T) {}
+ template <typename T> void for_(T) {}
+ template <typename T> void while_(T) {}
+ template <typename T> void do_(T) {}
+ }
+
+ namespace tmpls
+ {
+ // We define these dummy template functions. Borland complains when
+ // a template class has the same name as a template function,
+ // regardless if they are in different namespaces.
+
+ template <typename T> struct if_ {};
+ template <typename T> struct for_ {};
+ template <typename T> struct while_ {};
+ template <typename T> struct do_ {};
+ }
+
+}} // namespace phoenix::borland_only
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/static_assert.hpp>
+#include <boost/call_traits.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace phoenix {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// tuple
+//
+// Tuples hold heterogeneous types up to a predefined maximum. Only
+// the most basic functionality needed is provided. Unlike other
+// recursive list-like tuple implementations, this tuple
+// implementation uses simple structs similar to std::pair with
+// specialization for 0 to N tuple elements.
+//
+// 1) Construction
+// Here are examples on how to construct tuples:
+//
+// typedef tuple<int, char> t1_t;
+// typedef tuple<int, std::string, double> t2_t;
+//
+// // this tuple has an int and char members
+// t1_t t1(3, 'c');
+//
+// // this tuple has an int, std::string and double members
+// t2_t t2(3, "hello", 3.14);
+//
+// Tuples can also be constructed from other tuples. The
+// source and destination tuples need not have exactly the
+// same element types. The only requirement is that the
+// source tuple have the same number of elements as the
+// destination and that each element slot in the
+// destination can be copy constructed from the source
+// element. For example:
+//
+// tuple<double, double> t3(t1); // OK. Compatible tuples
+// tuple<double, double> t4(t2); // Error! Incompatible tuples
+//
+// 2) Member access
+// A member in a tuple can be accessed using the
+// tuple's [] operator by specifying the Nth
+// tuple_index. Here are some examples:
+//
+// tuple_index<0> ix0; // 0th index == 1st item
+// tuple_index<1> ix1; // 1st index == 2nd item
+// tuple_index<2> ix2; // 2nd index == 3rd item
+//
+// t1[ix0] = 33; // sets the int member of the tuple t1
+// t2[ix2] = 6e6; // sets the double member of the tuple t2
+// t1[ix1] = 'a'; // sets the char member of the tuple t1
+//
+// There are some predefined names are provided in sub-
+// namespace tuple_index_names:
+//
+// tuple_index<0> _1;
+// tuple_index<1> _2;
+// ...
+// tuple_index<N> _N;
+//
+// These indexes may be used by 'using' namespace
+// phoenix::tuple_index_names.
+//
+// Access to out of bound indexes returns a nil_t value.
+//
+// 3) Member type inquiry
+// The type of an individual member can be queried.
+// Example:
+//
+// tuple_element<1, t2_t>::type
+//
+// Refers to the type of the second member (note zero based,
+// thus 0 = 1st item, 1 = 2nd item) of the tuple.
+//
+// Aside from tuple_element<N, T>::type, there are two
+// more types that tuple_element provides: rtype and
+// crtype. While 'type' is the plain underlying type,
+// 'rtype' is the reference type, or type& and 'crtype'
+// is the constant reference type or type const&. The
+// latter two are provided to make it easy for the
+// client in dealing with the possibility of reference
+// to reference when type is already a reference, which
+// is illegal in C++.
+//
+// Access to out of bound indexes returns a nil_t type.
+//
+// 4) Tuple length
+// The number of elements in a tuple can be queried.
+// Example:
+//
+// int n = t1.length;
+//
+// gets the number of elements in tuple t1.
+//
+// length is a static constant. Thus, TupleT::length
+// also works. Example:
+//
+// int n = t1_t::length;
+//
+///////////////////////////////////////////////////////////////////////////////
+struct nil_t {};
+using boost::remove_reference;
+using boost::call_traits;
+
+//////////////////////////////////
+namespace impl {
+
+ template <typename T>
+ struct access {
+
+ typedef const T& ctype;
+ typedef T& type;
+ };
+
+ template <typename T>
+ struct access<T&> {
+
+ typedef T& ctype;
+ typedef T& type;
+ };
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// tuple_element
+//
+// A query class that gets the Nth element inside a tuple.
+// Examples:
+//
+// tuple_element<1, tuple<int, char, void*> >::type // plain
+// tuple_element<1, tuple<int, char, void*> >::rtype // ref
+// tuple_element<1, tuple<int, char, void*> >::crtype // const ref
+//
+// Has type char which is the 2nd type in the tuple
+// (note zero based, thus 0 = 1st item, 1 = 2nd item).
+//
+// Given a tuple object, the static function tuple_element<N,
+// TupleT>::get(tuple) gets the Nth element in the tuple. The
+// tuple class' tuple::operator[] uses this to get its Nth
+// element.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <int N, typename TupleT>
+struct tuple_element
+{
+ typedef nil_t type;
+ typedef nil_t& rtype;
+ typedef nil_t const& crtype;
+
+ static nil_t get(TupleT const& t) { return nil_t(); }
+};
+
+//////////////////////////////////
+template <typename TupleT>
+struct tuple_element<0, TupleT>
+{
+ typedef typename TupleT::a_type type;
+ typedef typename impl::access<type>::type rtype;
+ typedef typename impl::access<type>::ctype crtype;
+
+ static rtype get(TupleT& t) { return t.a; }
+ static crtype get(TupleT const& t) { return t.a; }
+};
+
+//////////////////////////////////
+template <typename TupleT>
+struct tuple_element<1, TupleT>
+{
+ typedef typename TupleT::b_type type;
+ typedef typename impl::access<type>::type rtype;
+ typedef typename impl::access<type>::ctype crtype;
+
+ static rtype get(TupleT& t) { return t.b; }
+ static crtype get(TupleT const& t) { return t.b; }
+};
+
+//////////////////////////////////
+template <typename TupleT>
+struct tuple_element<2, TupleT>
+{
+ typedef typename TupleT::c_type type;
+ typedef typename impl::access<type>::type rtype;
+ typedef typename impl::access<type>::ctype crtype;
+
+ static rtype get(TupleT& t) { return t.c; }
+ static crtype get(TupleT const& t) { return t.c; }
+};
+
+#if PHOENIX_LIMIT > 3
+//////////////////////////////////
+template <typename TupleT>
+struct tuple_element<3, TupleT>
+{
+ typedef typename TupleT::d_type type;
+ typedef typename impl::access<type>::type rtype;
+ typedef typename impl::access<type>::ctype crtype;
+
+ static rtype get(TupleT& t) { return t.d; }
+ static crtype get(TupleT const& t) { return t.d; }
+};
+
+//////////////////////////////////
+template <typename TupleT>
+struct tuple_element<4, TupleT>
+{
+ typedef typename TupleT::e_type type;
+ typedef typename impl::access<type>::type rtype;
+ typedef typename impl::access<type>::ctype crtype;
+
+ static rtype get(TupleT& t) { return t.e; }
+ static crtype get(TupleT const& t) { return t.e; }
+};
+
+//////////////////////////////////
+template <typename TupleT>
+struct tuple_element<5, TupleT>
+{
+ typedef typename TupleT::f_type type;
+ typedef typename impl::access<type>::type rtype;
+ typedef typename impl::access<type>::ctype crtype;
+
+ static rtype get(TupleT& t) { return t.f; }
+ static crtype get(TupleT const& t) { return t.f; }
+};
+
+#if PHOENIX_LIMIT > 6
+//////////////////////////////////
+template <typename TupleT>
+struct tuple_element<6, TupleT>
+{
+ typedef typename TupleT::g_type type;
+ typedef typename impl::access<type>::type rtype;
+ typedef typename impl::access<type>::ctype crtype;
+
+ static rtype get(TupleT& t) { return t.g; }
+ static crtype get(TupleT const& t) { return t.g; }
+};
+
+//////////////////////////////////
+template <typename TupleT>
+struct tuple_element<7, TupleT>
+{
+ typedef typename TupleT::h_type type;
+ typedef typename impl::access<type>::type rtype;
+ typedef typename impl::access<type>::ctype crtype;
+
+ static rtype get(TupleT& t) { return t.h; }
+ static crtype get(TupleT const& t) { return t.h; }
+};
+
+//////////////////////////////////
+template <typename TupleT>
+struct tuple_element<8, TupleT>
+{
+ typedef typename TupleT::i_type type;
+ typedef typename impl::access<type>::type rtype;
+ typedef typename impl::access<type>::ctype crtype;
+
+ static rtype get(TupleT& t) { return t.i; }
+ static crtype get(TupleT const& t) { return t.i; }
+};
+
+#if PHOENIX_LIMIT > 9
+//////////////////////////////////
+template <typename TupleT>
+struct tuple_element<9, TupleT>
+{
+ typedef typename TupleT::j_type type;
+ typedef typename impl::access<type>::type rtype;
+ typedef typename impl::access<type>::ctype crtype;
+
+ static rtype get(TupleT& t) { return t.j; }
+ static crtype get(TupleT const& t) { return t.j; }
+};
+
+//////////////////////////////////
+template <typename TupleT>
+struct tuple_element<10, TupleT>
+{
+ typedef typename TupleT::k_type type;
+ typedef typename impl::access<type>::type rtype;
+ typedef typename impl::access<type>::ctype crtype;
+
+ static rtype get(TupleT& t) { return t.k; }
+ static crtype get(TupleT const& t) { return t.k; }
+};
+
+//////////////////////////////////
+template <typename TupleT>
+struct tuple_element<11, TupleT>
+{
+ typedef typename TupleT::l_type type;
+ typedef typename impl::access<type>::type rtype;
+ typedef typename impl::access<type>::ctype crtype;
+
+ static rtype get(TupleT& t) { return t.l; }
+ static crtype get(TupleT const& t) { return t.l; }
+};
+
+#if PHOENIX_LIMIT > 12
+//////////////////////////////////
+template <typename TupleT>
+struct tuple_element<12, TupleT>
+{
+ typedef typename TupleT::m_type type;
+ typedef typename impl::access<type>::type rtype;
+ typedef typename impl::access<type>::ctype crtype;
+
+ static rtype get(TupleT& t) { return t.m; }
+ static crtype get(TupleT const& t) { return t.m; }
+};
+
+//////////////////////////////////
+template <typename TupleT>
+struct tuple_element<13, TupleT>
+{
+ typedef typename TupleT::n_type type;
+ typedef typename impl::access<type>::type rtype;
+ typedef typename impl::access<type>::ctype crtype;
+
+ static rtype get(TupleT& t) { return t.n; }
+ static crtype get(TupleT const& t) { return t.n; }
+};
+
+//////////////////////////////////
+template <typename TupleT>
+struct tuple_element<14, TupleT>
+{
+ typedef typename TupleT::o_type type;
+ typedef typename impl::access<type>::type rtype;
+ typedef typename impl::access<type>::ctype crtype;
+
+ static rtype get(TupleT& t) { return t.o; }
+ static crtype get(TupleT const& t) { return t.o; }
+};
+
+#endif
+#endif
+#endif
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// tuple forward declaration.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+ typename A = nil_t
+ , typename B = nil_t
+ , typename C = nil_t
+
+#if PHOENIX_LIMIT > 3
+ , typename D = nil_t
+ , typename E = nil_t
+ , typename F = nil_t
+
+#if PHOENIX_LIMIT > 6
+ , typename G = nil_t
+ , typename H = nil_t
+ , typename I = nil_t
+
+#if PHOENIX_LIMIT > 9
+ , typename J = nil_t
+ , typename K = nil_t
+ , typename L = nil_t
+
+#if PHOENIX_LIMIT > 12
+ , typename M = nil_t
+ , typename N = nil_t
+ , typename O = nil_t
+
+#endif
+#endif
+#endif
+#endif
+
+ , typename NU = nil_t // Not used
+>
+struct tuple;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// tuple_index
+//
+// This class wraps an integer in a type to be used for indexing
+// the Nth element in a tuple. See tuple operator[]. Some
+// predefined names are provided in sub-namespace
+// tuple_index_names.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <int N>
+struct tuple_index {};
+
+//////////////////////////////////
+namespace tuple_index_names {
+
+ tuple_index<0> const _1 = tuple_index<0>();
+ tuple_index<1> const _2 = tuple_index<1>();
+ tuple_index<2> const _3 = tuple_index<2>();
+
+#if PHOENIX_LIMIT > 3
+ tuple_index<3> const _4 = tuple_index<3>();
+ tuple_index<4> const _5 = tuple_index<4>();
+ tuple_index<5> const _6 = tuple_index<5>();
+
+#if PHOENIX_LIMIT > 6
+ tuple_index<6> const _7 = tuple_index<6>();
+ tuple_index<7> const _8 = tuple_index<7>();
+ tuple_index<8> const _9 = tuple_index<8>();
+
+#if PHOENIX_LIMIT > 9
+ tuple_index<9> const _10 = tuple_index<9>();
+ tuple_index<10> const _11 = tuple_index<10>();
+ tuple_index<11> const _12 = tuple_index<11>();
+
+#if PHOENIX_LIMIT > 12
+ tuple_index<12> const _13 = tuple_index<12>();
+ tuple_index<13> const _14 = tuple_index<13>();
+ tuple_index<14> const _15 = tuple_index<14>();
+
+#endif
+#endif
+#endif
+#endif
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// tuple_common class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename DerivedT>
+struct tuple_base {
+
+ typedef nil_t a_type;
+ typedef nil_t b_type;
+ typedef nil_t c_type;
+
+#if PHOENIX_LIMIT > 3
+ typedef nil_t d_type;
+ typedef nil_t e_type;
+ typedef nil_t f_type;
+
+#if PHOENIX_LIMIT > 6
+ typedef nil_t g_type;
+ typedef nil_t h_type;
+ typedef nil_t i_type;
+
+#if PHOENIX_LIMIT > 9
+ typedef nil_t j_type;
+ typedef nil_t k_type;
+ typedef nil_t l_type;
+
+#if PHOENIX_LIMIT > 12
+ typedef nil_t m_type;
+ typedef nil_t n_type;
+ typedef nil_t o_type;
+
+#endif
+#endif
+#endif
+#endif
+
+ template <int N>
+ typename tuple_element<N, DerivedT>::crtype
+ operator[](tuple_index<N>) const
+ {
+ return tuple_element<N, DerivedT>
+ ::get(*static_cast<DerivedT const*>(this));
+ }
+
+ template <int N>
+ typename tuple_element<N, DerivedT>::rtype
+ operator[](tuple_index<N>)
+ {
+ return tuple_element<N, DerivedT>
+ ::get(*static_cast<DerivedT*>(this));
+ }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// tuple <0 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <>
+struct tuple<>
+: public tuple_base<tuple<> > {
+
+ BOOST_STATIC_CONSTANT(int, length = 0);
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// tuple <1 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename A>
+struct tuple<A, nil_t, nil_t,
+#if PHOENIX_LIMIT > 3
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 6
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+#endif
+ nil_t // Unused
+>
+: public tuple_base<tuple<A> > {
+
+ BOOST_STATIC_CONSTANT(int, length = 1);
+ typedef A a_type;
+
+ tuple() {}
+
+ tuple(
+ typename call_traits<A>::param_type a_
+ ): a(a_) {}
+
+ template <typename TupleT>
+ tuple(TupleT const& init)
+ : a(init[tuple_index<0>()])
+ { BOOST_STATIC_ASSERT(TupleT::length == length); }
+
+ A a;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// tuple <2 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename A, typename B>
+struct tuple<A, B, nil_t,
+#if PHOENIX_LIMIT > 3
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 6
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+#endif
+ nil_t // Unused
+>
+: public tuple_base<tuple<A, B> > {
+
+ BOOST_STATIC_CONSTANT(int, length = 2);
+ typedef A a_type; typedef B b_type;
+
+ tuple() {}
+
+ tuple(
+ typename call_traits<A>::param_type a_,
+ typename call_traits<B>::param_type b_
+ ): a(a_), b(b_) {}
+
+ template <typename TupleT>
+ tuple(TupleT const& init)
+ : a(init[tuple_index<0>()]), b(init[tuple_index<1>()])
+ { BOOST_STATIC_ASSERT(TupleT::length == length); }
+
+ A a; B b;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// tuple <3 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename A, typename B, typename C>
+struct tuple<A, B, C,
+#if PHOENIX_LIMIT > 3
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 6
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+#endif
+ nil_t // Unused
+>
+: public tuple_base<tuple<A, B, C> > {
+
+ BOOST_STATIC_CONSTANT(int, length = 3);
+ typedef A a_type; typedef B b_type;
+ typedef C c_type;
+
+ tuple() {}
+
+ tuple(
+ typename call_traits<A>::param_type a_,
+ typename call_traits<B>::param_type b_,
+ typename call_traits<C>::param_type c_
+ ): a(a_), b(b_), c(c_) {}
+
+ template <typename TupleT>
+ tuple(TupleT const& init)
+ : a(init[tuple_index<0>()]), b(init[tuple_index<1>()]),
+ c(init[tuple_index<2>()])
+ { BOOST_STATIC_ASSERT(TupleT::length == length); }
+
+ A a; B b; C c;
+};
+
+#if PHOENIX_LIMIT > 3
+///////////////////////////////////////////////////////////////////////////////
+//
+// tuple <4 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename A, typename B, typename C, typename D>
+struct tuple<A, B, C, D, nil_t, nil_t,
+#if PHOENIX_LIMIT > 6
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+ nil_t // Unused
+>
+: public tuple_base<tuple<A, B, C, D> > {
+
+ BOOST_STATIC_CONSTANT(int, length = 4);
+ typedef A a_type; typedef B b_type;
+ typedef C c_type; typedef D d_type;
+
+ tuple() {}
+
+ tuple(
+ typename call_traits<A>::param_type a_,
+ typename call_traits<B>::param_type b_,
+ typename call_traits<C>::param_type c_,
+ typename call_traits<D>::param_type d_
+ ): a(a_), b(b_), c(c_), d(d_) {}
+
+ template <typename TupleT>
+ tuple(TupleT const& init)
+ : a(init[tuple_index<0>()]), b(init[tuple_index<1>()]),
+ c(init[tuple_index<2>()]), d(init[tuple_index<3>()])
+ { BOOST_STATIC_ASSERT(TupleT::length == length); }
+
+ A a; B b; C c; D d;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// tuple <5 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename A, typename B, typename C, typename D, typename E>
+struct tuple<A, B, C, D, E, nil_t,
+#if PHOENIX_LIMIT > 6
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+ nil_t // Unused
+>
+: public tuple_base<tuple<A, B, C, D, E> > {
+
+ BOOST_STATIC_CONSTANT(int, length = 5);
+ typedef A a_type; typedef B b_type;
+ typedef C c_type; typedef D d_type;
+ typedef E e_type;
+
+ tuple() {}
+
+ tuple(
+ typename call_traits<A>::param_type a_,
+ typename call_traits<B>::param_type b_,
+ typename call_traits<C>::param_type c_,
+ typename call_traits<D>::param_type d_,
+ typename call_traits<E>::param_type e_
+ ): a(a_), b(b_), c(c_), d(d_), e(e_) {}
+
+ template <typename TupleT>
+ tuple(TupleT const& init)
+ : a(init[tuple_index<0>()]), b(init[tuple_index<1>()]),
+ c(init[tuple_index<2>()]), d(init[tuple_index<3>()]),
+ e(init[tuple_index<4>()])
+ { BOOST_STATIC_ASSERT(TupleT::length == length); }
+
+ A a; B b; C c; D d; E e;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// tuple <6 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F>
+struct tuple<A, B, C, D, E, F,
+#if PHOENIX_LIMIT > 6
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+#endif
+#endif
+ nil_t // Unused
+>
+: public tuple_base<tuple<A, B, C, D, E, F> > {
+
+ BOOST_STATIC_CONSTANT(int, length = 6);
+ typedef A a_type; typedef B b_type;
+ typedef C c_type; typedef D d_type;
+ typedef E e_type; typedef F f_type;
+
+ tuple() {}
+
+ tuple(
+ typename call_traits<A>::param_type a_,
+ typename call_traits<B>::param_type b_,
+ typename call_traits<C>::param_type c_,
+ typename call_traits<D>::param_type d_,
+ typename call_traits<E>::param_type e_,
+ typename call_traits<F>::param_type f_
+ ): a(a_), b(b_), c(c_), d(d_), e(e_),
+ f(f_) {}
+
+ template <typename TupleT>
+ tuple(TupleT const& init)
+ : a(init[tuple_index<0>()]), b(init[tuple_index<1>()]),
+ c(init[tuple_index<2>()]), d(init[tuple_index<3>()]),
+ e(init[tuple_index<4>()]), f(init[tuple_index<5>()])
+ { BOOST_STATIC_ASSERT(TupleT::length == length); }
+
+ A a; B b; C c; D d; E e;
+ F f;
+};
+
+#if PHOENIX_LIMIT > 6
+///////////////////////////////////////////////////////////////////////////////
+//
+// tuple <7 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G>
+struct tuple<A, B, C, D, E, F, G, nil_t, nil_t,
+#if PHOENIX_LIMIT > 9
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+#endif
+ nil_t // Unused
+>
+: public tuple_base<tuple<A, B, C, D, E, F, G> > {
+
+ BOOST_STATIC_CONSTANT(int, length = 7);
+ typedef A a_type; typedef B b_type;
+ typedef C c_type; typedef D d_type;
+ typedef E e_type; typedef F f_type;
+ typedef G g_type;
+
+ tuple() {}
+
+ tuple(
+ typename call_traits<A>::param_type a_,
+ typename call_traits<B>::param_type b_,
+ typename call_traits<C>::param_type c_,
+ typename call_traits<D>::param_type d_,
+ typename call_traits<E>::param_type e_,
+ typename call_traits<F>::param_type f_,
+ typename call_traits<G>::param_type g_
+ ): a(a_), b(b_), c(c_), d(d_), e(e_),
+ f(f_), g(g_) {}
+
+ template <typename TupleT>
+ tuple(TupleT const& init)
+ : a(init[tuple_index<0>()]), b(init[tuple_index<1>()]),
+ c(init[tuple_index<2>()]), d(init[tuple_index<3>()]),
+ e(init[tuple_index<4>()]), f(init[tuple_index<5>()]),
+ g(init[tuple_index<6>()])
+ { BOOST_STATIC_ASSERT(TupleT::length == length); }
+
+ A a; B b; C c; D d; E e;
+ F f; G g;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// tuple <8 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H>
+struct tuple<A, B, C, D, E, F, G, H, nil_t,
+#if PHOENIX_LIMIT > 9
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+#endif
+ nil_t // Unused
+>
+: public tuple_base<tuple<A, B, C, D, E, F, G, H> > {
+
+ BOOST_STATIC_CONSTANT(int, length = 8);
+ typedef A a_type; typedef B b_type;
+ typedef C c_type; typedef D d_type;
+ typedef E e_type; typedef F f_type;
+ typedef G g_type; typedef H h_type;
+
+ tuple() {}
+
+ tuple(
+ typename call_traits<A>::param_type a_,
+ typename call_traits<B>::param_type b_,
+ typename call_traits<C>::param_type c_,
+ typename call_traits<D>::param_type d_,
+ typename call_traits<E>::param_type e_,
+ typename call_traits<F>::param_type f_,
+ typename call_traits<G>::param_type g_,
+ typename call_traits<H>::param_type h_
+ ): a(a_), b(b_), c(c_), d(d_), e(e_),
+ f(f_), g(g_), h(h_) {}
+
+ template <typename TupleT>
+ tuple(TupleT const& init)
+ : a(init[tuple_index<0>()]), b(init[tuple_index<1>()]),
+ c(init[tuple_index<2>()]), d(init[tuple_index<3>()]),
+ e(init[tuple_index<4>()]), f(init[tuple_index<5>()]),
+ g(init[tuple_index<6>()]), h(init[tuple_index<7>()])
+ { BOOST_STATIC_ASSERT(TupleT::length == length); }
+
+ A a; B b; C c; D d; E e;
+ F f; G g; H h;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// tuple <9 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I>
+struct tuple<A, B, C, D, E, F, G, H, I,
+#if PHOENIX_LIMIT > 9
+ nil_t, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+#endif
+ nil_t // Unused
+>
+: public tuple_base<tuple<A, B, C, D, E, F, G, H, I> > {
+
+ BOOST_STATIC_CONSTANT(int, length = 9);
+ typedef A a_type; typedef B b_type;
+ typedef C c_type; typedef D d_type;
+ typedef E e_type; typedef F f_type;
+ typedef G g_type; typedef H h_type;
+ typedef I i_type;
+
+ tuple() {}
+
+ tuple(
+ typename call_traits<A>::param_type a_,
+ typename call_traits<B>::param_type b_,
+ typename call_traits<C>::param_type c_,
+ typename call_traits<D>::param_type d_,
+ typename call_traits<E>::param_type e_,
+ typename call_traits<F>::param_type f_,
+ typename call_traits<G>::param_type g_,
+ typename call_traits<H>::param_type h_,
+ typename call_traits<I>::param_type i_
+ ): a(a_), b(b_), c(c_), d(d_), e(e_),
+ f(f_), g(g_), h(h_), i(i_) {}
+
+ template <typename TupleT>
+ tuple(TupleT const& init)
+ : a(init[tuple_index<0>()]), b(init[tuple_index<1>()]),
+ c(init[tuple_index<2>()]), d(init[tuple_index<3>()]),
+ e(init[tuple_index<4>()]), f(init[tuple_index<5>()]),
+ g(init[tuple_index<6>()]), h(init[tuple_index<7>()]),
+ i(init[tuple_index<8>()])
+ { BOOST_STATIC_ASSERT(TupleT::length == length); }
+
+ A a; B b; C c; D d; E e;
+ F f; G g; H h; I i;
+};
+
+#if PHOENIX_LIMIT > 9
+///////////////////////////////////////////////////////////////////////////////
+//
+// tuple <10 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J>
+struct tuple<A, B, C, D, E, F, G, H, I, J, nil_t, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+ nil_t // Unused
+>
+: public tuple_base<tuple<A, B, C, D, E, F, G, H, I, J> > {
+
+ BOOST_STATIC_CONSTANT(int, length = 10);
+ typedef A a_type; typedef B b_type;
+ typedef C c_type; typedef D d_type;
+ typedef E e_type; typedef F f_type;
+ typedef G g_type; typedef H h_type;
+ typedef I i_type; typedef J j_type;
+
+ tuple() {}
+
+ tuple(
+ typename call_traits<A>::param_type a_,
+ typename call_traits<B>::param_type b_,
+ typename call_traits<C>::param_type c_,
+ typename call_traits<D>::param_type d_,
+ typename call_traits<E>::param_type e_,
+ typename call_traits<F>::param_type f_,
+ typename call_traits<G>::param_type g_,
+ typename call_traits<H>::param_type h_,
+ typename call_traits<I>::param_type i_,
+ typename call_traits<J>::param_type j_
+ ): a(a_), b(b_), c(c_), d(d_), e(e_),
+ f(f_), g(g_), h(h_), i(i_), j(j_) {}
+
+ template <typename TupleT>
+ tuple(TupleT const& init)
+ : a(init[tuple_index<0>()]), b(init[tuple_index<1>()]),
+ c(init[tuple_index<2>()]), d(init[tuple_index<3>()]),
+ e(init[tuple_index<4>()]), f(init[tuple_index<5>()]),
+ g(init[tuple_index<6>()]), h(init[tuple_index<7>()]),
+ i(init[tuple_index<8>()]), j(init[tuple_index<9>()])
+ { BOOST_STATIC_ASSERT(TupleT::length == length); }
+
+ A a; B b; C c; D d; E e;
+ F f; G g; H h; I i; J j;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// tuple <11 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K>
+struct tuple<A, B, C, D, E, F, G, H, I, J, K, nil_t,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+ nil_t // Unused
+>
+: public tuple_base<tuple<A, B, C, D, E, F, G, H, I, J, K> > {
+
+ BOOST_STATIC_CONSTANT(int, length = 11);
+ typedef A a_type; typedef B b_type;
+ typedef C c_type; typedef D d_type;
+ typedef E e_type; typedef F f_type;
+ typedef G g_type; typedef H h_type;
+ typedef I i_type; typedef J j_type;
+ typedef K k_type;
+
+ tuple() {}
+
+ tuple(
+ typename call_traits<A>::param_type a_,
+ typename call_traits<B>::param_type b_,
+ typename call_traits<C>::param_type c_,
+ typename call_traits<D>::param_type d_,
+ typename call_traits<E>::param_type e_,
+ typename call_traits<F>::param_type f_,
+ typename call_traits<G>::param_type g_,
+ typename call_traits<H>::param_type h_,
+ typename call_traits<I>::param_type i_,
+ typename call_traits<J>::param_type j_,
+ typename call_traits<K>::param_type k_
+ ): a(a_), b(b_), c(c_), d(d_), e(e_),
+ f(f_), g(g_), h(h_), i(i_), j(j_),
+ k(k_) {}
+
+ template <typename TupleT>
+ tuple(TupleT const& init)
+ : a(init[tuple_index<0>()]), b(init[tuple_index<1>()]),
+ c(init[tuple_index<2>()]), d(init[tuple_index<3>()]),
+ e(init[tuple_index<4>()]), f(init[tuple_index<5>()]),
+ g(init[tuple_index<6>()]), h(init[tuple_index<7>()]),
+ i(init[tuple_index<8>()]), j(init[tuple_index<9>()]),
+ k(init[tuple_index<10>()])
+ { BOOST_STATIC_ASSERT(TupleT::length == length); }
+
+ A a; B b; C c; D d; E e;
+ F f; G g; H h; I i; J j;
+ K k;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// tuple <12 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L>
+struct tuple<A, B, C, D, E, F, G, H, I, J, K, L,
+#if PHOENIX_LIMIT > 12
+ nil_t, nil_t, nil_t,
+#endif
+ nil_t // Unused
+>
+: public tuple_base<tuple<A, B, C, D, E, F, G, H, I, J, K, L> > {
+
+ BOOST_STATIC_CONSTANT(int, length = 12);
+ typedef A a_type; typedef B b_type;
+ typedef C c_type; typedef D d_type;
+ typedef E e_type; typedef F f_type;
+ typedef G g_type; typedef H h_type;
+ typedef I i_type; typedef J j_type;
+ typedef K k_type; typedef L l_type;
+
+ tuple() {}
+
+ tuple(
+ typename call_traits<A>::param_type a_,
+ typename call_traits<B>::param_type b_,
+ typename call_traits<C>::param_type c_,
+ typename call_traits<D>::param_type d_,
+ typename call_traits<E>::param_type e_,
+ typename call_traits<F>::param_type f_,
+ typename call_traits<G>::param_type g_,
+ typename call_traits<H>::param_type h_,
+ typename call_traits<I>::param_type i_,
+ typename call_traits<J>::param_type j_,
+ typename call_traits<K>::param_type k_,
+ typename call_traits<L>::param_type l_
+ ): a(a_), b(b_), c(c_), d(d_), e(e_),
+ f(f_), g(g_), h(h_), i(i_), j(j_),
+ k(k_), l(l_) {}
+
+ template <typename TupleT>
+ tuple(TupleT const& init)
+ : a(init[tuple_index<0>()]), b(init[tuple_index<1>()]),
+ c(init[tuple_index<2>()]), d(init[tuple_index<3>()]),
+ e(init[tuple_index<4>()]), f(init[tuple_index<5>()]),
+ g(init[tuple_index<6>()]), h(init[tuple_index<7>()]),
+ i(init[tuple_index<8>()]), j(init[tuple_index<9>()]),
+ k(init[tuple_index<10>()]), l(init[tuple_index<11>()])
+ { BOOST_STATIC_ASSERT(TupleT::length == length); }
+
+ A a; B b; C c; D d; E e;
+ F f; G g; H h; I i; J j;
+ K k; L l;
+};
+
+#if PHOENIX_LIMIT > 12
+///////////////////////////////////////////////////////////////////////////////
+//
+// tuple <13 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L, typename M>
+struct tuple<A, B, C, D, E, F, G, H, I, J, K, L, M, nil_t, nil_t, nil_t>
+: public tuple_base<
+ tuple<A, B, C, D, E, F, G, H, I, J, K, L, M> > {
+
+ BOOST_STATIC_CONSTANT(int, length = 13);
+ typedef A a_type; typedef B b_type;
+ typedef C c_type; typedef D d_type;
+ typedef E e_type; typedef F f_type;
+ typedef G g_type; typedef H h_type;
+ typedef I i_type; typedef J j_type;
+ typedef K k_type; typedef L l_type;
+ typedef M m_type;
+
+ tuple() {}
+
+ tuple(
+ typename call_traits<A>::param_type a_,
+ typename call_traits<B>::param_type b_,
+ typename call_traits<C>::param_type c_,
+ typename call_traits<D>::param_type d_,
+ typename call_traits<E>::param_type e_,
+ typename call_traits<F>::param_type f_,
+ typename call_traits<G>::param_type g_,
+ typename call_traits<H>::param_type h_,
+ typename call_traits<I>::param_type i_,
+ typename call_traits<J>::param_type j_,
+ typename call_traits<K>::param_type k_,
+ typename call_traits<L>::param_type l_,
+ typename call_traits<M>::param_type m_
+ ): a(a_), b(b_), c(c_), d(d_), e(e_),
+ f(f_), g(g_), h(h_), i(i_), j(j_),
+ k(k_), l(l_), m(m_) {}
+
+ template <typename TupleT>
+ tuple(TupleT const& init)
+ : a(init[tuple_index<0>()]), b(init[tuple_index<1>()]),
+ c(init[tuple_index<2>()]), d(init[tuple_index<3>()]),
+ e(init[tuple_index<4>()]), f(init[tuple_index<5>()]),
+ g(init[tuple_index<6>()]), h(init[tuple_index<7>()]),
+ i(init[tuple_index<8>()]), j(init[tuple_index<9>()]),
+ k(init[tuple_index<10>()]), l(init[tuple_index<11>()]),
+ m(init[tuple_index<12>()])
+ { BOOST_STATIC_ASSERT(TupleT::length == length); }
+
+ A a; B b; C c; D d; E e;
+ F f; G g; H h; I i; J j;
+ K k; L l; M m;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// tuple <14 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L, typename M, typename N>
+struct tuple<A, B, C, D, E, F, G, H, I, J, K, L, M, N, nil_t, nil_t>
+: public tuple_base<
+ tuple<A, B, C, D, E, F, G, H, I, J, K, L, M, N> > {
+
+ BOOST_STATIC_CONSTANT(int, length = 14);
+ typedef A a_type; typedef B b_type;
+ typedef C c_type; typedef D d_type;
+ typedef E e_type; typedef F f_type;
+ typedef G g_type; typedef H h_type;
+ typedef I i_type; typedef J j_type;
+ typedef K k_type; typedef L l_type;
+ typedef M m_type; typedef N n_type;
+
+ tuple() {}
+
+ tuple(
+ typename call_traits<A>::param_type a_,
+ typename call_traits<B>::param_type b_,
+ typename call_traits<C>::param_type c_,
+ typename call_traits<D>::param_type d_,
+ typename call_traits<E>::param_type e_,
+ typename call_traits<F>::param_type f_,
+ typename call_traits<G>::param_type g_,
+ typename call_traits<H>::param_type h_,
+ typename call_traits<I>::param_type i_,
+ typename call_traits<J>::param_type j_,
+ typename call_traits<K>::param_type k_,
+ typename call_traits<L>::param_type l_,
+ typename call_traits<M>::param_type m_,
+ typename call_traits<N>::param_type n_
+ ): a(a_), b(b_), c(c_), d(d_), e(e_),
+ f(f_), g(g_), h(h_), i(i_), j(j_),
+ k(k_), l(l_), m(m_), n(n_) {}
+
+ template <typename TupleT>
+ tuple(TupleT const& init)
+ : a(init[tuple_index<0>()]), b(init[tuple_index<1>()]),
+ c(init[tuple_index<2>()]), d(init[tuple_index<3>()]),
+ e(init[tuple_index<4>()]), f(init[tuple_index<5>()]),
+ g(init[tuple_index<6>()]), h(init[tuple_index<7>()]),
+ i(init[tuple_index<8>()]), j(init[tuple_index<9>()]),
+ k(init[tuple_index<10>()]), l(init[tuple_index<11>()]),
+ m(init[tuple_index<12>()]), n(init[tuple_index<13>()])
+ { BOOST_STATIC_ASSERT(TupleT::length == length); }
+
+ A a; B b; C c; D d; E e;
+ F f; G g; H h; I i; J j;
+ K k; L l; M m; N n;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// tuple <15 member> class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+ typename A, typename B, typename C, typename D, typename E,
+ typename F, typename G, typename H, typename I, typename J,
+ typename K, typename L, typename M, typename N, typename O>
+struct tuple<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, nil_t>
+: public tuple_base<
+ tuple<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O> > {
+
+ BOOST_STATIC_CONSTANT(int, length = 15);
+ typedef A a_type; typedef B b_type;
+ typedef C c_type; typedef D d_type;
+ typedef E e_type; typedef F f_type;
+ typedef G g_type; typedef H h_type;
+ typedef I i_type; typedef J j_type;
+ typedef K k_type; typedef L l_type;
+ typedef M m_type; typedef N n_type;
+ typedef O o_type;
+
+ tuple() {}
+
+ tuple(
+ typename call_traits<A>::param_type a_,
+ typename call_traits<B>::param_type b_,
+ typename call_traits<C>::param_type c_,
+ typename call_traits<D>::param_type d_,
+ typename call_traits<E>::param_type e_,
+ typename call_traits<F>::param_type f_,
+ typename call_traits<G>::param_type g_,
+ typename call_traits<H>::param_type h_,
+ typename call_traits<I>::param_type i_,
+ typename call_traits<J>::param_type j_,
+ typename call_traits<K>::param_type k_,
+ typename call_traits<L>::param_type l_,
+ typename call_traits<M>::param_type m_,
+ typename call_traits<N>::param_type n_,
+ typename call_traits<O>::param_type o_
+ ): a(a_), b(b_), c(c_), d(d_), e(e_),
+ f(f_), g(g_), h(h_), i(i_), j(j_),
+ k(k_), l(l_), m(m_), n(n_), o(o_) {}
+
+ template <typename TupleT>
+ tuple(TupleT const& init)
+ : a(init[tuple_index<0>()]), b(init[tuple_index<1>()]),
+ c(init[tuple_index<2>()]), d(init[tuple_index<3>()]),
+ e(init[tuple_index<4>()]), f(init[tuple_index<5>()]),
+ g(init[tuple_index<6>()]), h(init[tuple_index<7>()]),
+ i(init[tuple_index<8>()]), j(init[tuple_index<9>()]),
+ k(init[tuple_index<10>()]), l(init[tuple_index<11>()]),
+ m(init[tuple_index<12>()]), n(init[tuple_index<13>()]),
+ o(init[tuple_index<14>()])
+ { BOOST_STATIC_ASSERT(TupleT::length == length); }
+
+ A a; B b; C c; D d; E e;
+ F f; G g; H h; I i; J j;
+ K k; L l; M m; N n; O o;
+};
+
+#endif
+#endif
+#endif
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace phoenix
+
+#endif
diff --git a/boost/boost/spirit/symbols.hpp b/boost/boost/spirit/symbols.hpp
new file mode 100644
index 00000000000..24d913acfff
--- /dev/null
+++ b/boost/boost/spirit/symbols.hpp
@@ -0,0 +1,22 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Joel de Guzman
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_SYMBOLS_MAIN_HPP)
+#define BOOST_SPIRIT_SYMBOLS_MAIN_HPP
+
+#include <boost/spirit/version.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Master header for Spirit.Symbols
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#include <boost/spirit/symbols/symbols.hpp>
+
+#endif // !defined(BOOST_SPIRIT_SYMBOLS_MAIN_HPP)
diff --git a/boost/boost/spirit/symbols/impl/symbols.ipp b/boost/boost/spirit/symbols/impl/symbols.ipp
new file mode 100644
index 00000000000..bc8c0e74cdd
--- /dev/null
+++ b/boost/boost/spirit/symbols/impl/symbols.ipp
@@ -0,0 +1,114 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Joel de Guzman
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_SYMBOLS_IPP
+#define BOOST_SPIRIT_SYMBOLS_IPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/symbols/impl/tst.ipp>
+#include <boost/detail/workaround.hpp>
+
+// MSVC: void warning about the use of 'this' pointer in constructors
+#if defined(BOOST_MSVC)
+#pragma warning(push)
+#pragma warning(disable : 4355)
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// symbols class implementation
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename T, typename CharT, typename SetT>
+inline symbols<T, CharT, SetT>::symbols()
+: SetT()
+, add(*this)
+{
+}
+
+//////////////////////////////////
+template <typename T, typename CharT, typename SetT>
+symbols<T, CharT, SetT>::symbols(symbols const& other)
+: SetT(other)
+// Tru64 CXX seems to be confused by the explicit call of the default
+// constructor and generates wrong code which invalidates the just contructed
+// first base class in the line above.
+#if !BOOST_WORKAROUND(__DECCXX_VER, BOOST_TESTED_AT(60590041))
+, parser<symbols<T, CharT, SetT> >()
+#endif
+, add(*this)
+{
+}
+
+//////////////////////////////////
+template <typename T, typename CharT, typename SetT>
+inline symbols<T, CharT, SetT>::~symbols()
+{}
+
+//////////////////////////////////
+template <typename T, typename CharT, typename SetT>
+inline symbols<T, CharT, SetT>&
+symbols<T, CharT, SetT>::operator=(symbols const& other)
+{
+ SetT::operator=(other);
+ return *this;
+}
+
+//////////////////////////////////
+template <typename T, typename CharT, typename SetT>
+inline symbol_inserter<T, SetT> const&
+symbols<T, CharT, SetT>::operator=(CharT const* str)
+{
+ return add, str;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Symbol table utilities
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename T, typename CharT, typename SetT>
+inline T*
+find(symbols<T, CharT, SetT> const& table, CharT const* sym)
+{
+ CharT const* last = sym;
+ while (*last)
+ last++;
+ scanner<CharT const *> scan(sym, last);
+ T* result = table.find(scan);
+ return scan.at_end()? result: 0;
+}
+
+//////////////////////////////////
+template <typename T, typename CharT, typename SetT>
+inline T*
+add(symbols<T, CharT, SetT>& table, CharT const* sym, T const& data)
+{
+ CharT const* first = sym;
+ CharT const* last = sym;
+ while (*last)
+ last++;
+ scanner<CharT const *> scan(first, last);
+ if (table.find(scan) && scan.at_end())
+ return 0; // symbol already contained in symbol table
+ table.add(sym, last, data);
+ first = sym;
+ return table.find(scan); // refind the inserted symbol
+}
+
+///////////////////////////////////////////////////////////////////////////////
+}} // namespace boost::spirit
+
+#if defined(BOOST_MSVC)
+#pragma warning(pop)
+#endif
+
+#endif
diff --git a/boost/boost/spirit/symbols/impl/tst.ipp b/boost/boost/spirit/symbols/impl/tst.ipp
new file mode 100644
index 00000000000..47169cf8770
--- /dev/null
+++ b/boost/boost/spirit/symbols/impl/tst.ipp
@@ -0,0 +1,277 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Joel de Guzman
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_TST_IPP
+#define BOOST_SPIRIT_TST_IPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <memory> // for std::auto_ptr
+#include <boost/spirit/core/assert.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+ namespace impl
+ {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// tst class
+//
+// Ternary Search Tree implementation. The data structure is faster than
+// hashing for many typical search problems especially when the search
+// interface is iterator based. Searching for a string of length k in a
+// ternary search tree with n strings will require at most O(log n+k)
+// character comparisons. TSTs are many times faster than hash tables
+// for unsuccessful searches since mismatches are discovered earlier
+// after examining only a few characters. Hash tables always examine an
+// entire key when searching.
+//
+// For details see http://www.cs.princeton.edu/~rs/strings/.
+//
+// *** This is a low level class and is
+// not meant for public consumption ***
+//
+///////////////////////////////////////////////////////////////////////////////
+ template <typename T, typename CharT>
+ struct tst_node
+ {
+ tst_node(CharT value_)
+ : value(value_)
+ , left(0)
+ , right(0)
+ { middle.link = 0; }
+
+ ~tst_node()
+ {
+ delete left;
+ delete right;
+ if (value)
+ delete middle.link;
+ else
+ delete middle.data;
+ }
+
+ tst_node*
+ clone() const
+ {
+ std::auto_ptr<tst_node> copy(new tst_node(value));
+
+ if (left)
+ copy->left = left->clone();
+ if (right)
+ copy->right = right->clone();
+
+ if (value && middle.link)
+ {
+ copy->middle.link = middle.link->clone();
+ }
+ else
+ {
+ std::auto_ptr<T> mid_data(new T(*middle.data));
+ copy->middle.data = mid_data.release();
+ }
+
+ return copy.release();
+ }
+
+ union center {
+
+ tst_node* link;
+ T* data;
+ };
+
+ CharT value;
+ tst_node* left;
+ center middle;
+ tst_node* right;
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename T, typename CharT>
+ class tst
+ {
+ public:
+
+ struct search_info
+ {
+ T* data;
+ std::size_t length;
+ };
+
+ tst()
+ : root(0) {}
+
+ tst(tst const& other)
+ : root(other.root ? other.root->clone() : 0) {}
+
+ ~tst()
+ { delete root; }
+
+ tst&
+ operator=(tst const& other)
+ {
+ if (this != &other)
+ {
+ node_t* new_root = other.root ? other.root->clone() : 0;
+ delete root;
+ root = new_root;
+ }
+ return *this;
+ }
+
+ template <typename IteratorT>
+ T* add(IteratorT first, IteratorT const& last, T const& data)
+ {
+ if (first == last)
+ return 0;
+
+ node_t** np = &root;
+ CharT ch = *first;
+
+ BOOST_SPIRIT_ASSERT(first == last || ch != 0
+ && "Won't add string containing null character");
+
+ for (;;)
+ {
+ if (*np == 0 || ch == 0)
+ {
+ node_t* right = 0;
+ if (np != 0)
+ right = *np;
+ *np = new node_t(ch);
+ if (right)
+ (**np).right = right;
+ }
+
+ if (ch < (**np).value)
+ {
+ np = &(**np).left;
+ }
+ else
+ {
+ if (ch == (**np).value)
+ {
+ if (ch == 0)
+ {
+ if ((**np).middle.data == 0)
+ {
+ (**np).middle.data = new T(data);
+ return (**np).middle.data;
+ }
+ else
+ {
+ // re-addition is disallowed
+ return 0;
+ }
+ }
+ ++first;
+ ch = (first == last) ? CharT(0) : *first;
+ BOOST_SPIRIT_ASSERT(first == last || ch != 0
+ && "Won't add string containing null character");
+ np = &(**np).middle.link;
+ }
+ else
+ {
+ np = &(**np).right;
+ }
+ }
+ }
+ }
+
+ template <typename ScannerT>
+ search_info find(ScannerT const& scan) const
+ {
+ search_info result = { 0, 0 };
+ if (scan.at_end()) {
+ return result;
+ }
+
+ typedef typename ScannerT::iterator_t iterator_t;
+ node_t* np = root;
+ CharT ch = *scan;
+ iterator_t save = scan.first;
+ iterator_t latest = scan.first;
+ std::size_t latest_len = 0;
+
+ while (np)
+ {
+
+ if (ch < np->value) // => go left!
+ {
+ if (np->value == 0)
+ {
+ result.data = np->middle.data;
+ if (result.data)
+ {
+ latest = scan.first;
+ latest_len = result.length;
+ }
+ }
+
+ np = np->left;
+ }
+ else if (ch == np->value) // => go middle!
+ {
+ // Matching the null character is not allowed.
+ if (np->value == 0)
+ {
+ result.data = np->middle.data;
+ if (result.data)
+ {
+ latest = scan.first;
+ latest_len = result.length;
+ }
+ break;
+ }
+
+ ++scan;
+ ch = scan.at_end() ? CharT(0) : *scan;
+ np = np->middle.link;
+ ++result.length;
+ }
+ else // (ch > np->value) => go right!
+ {
+ if (np->value == 0)
+ {
+ result.data = np->middle.data;
+ if (result.data)
+ {
+ latest = scan.first;
+ latest_len = result.length;
+ }
+ }
+
+ np = np->right;
+ }
+ }
+
+ if (result.data == 0)
+ {
+ scan.first = save;
+ }
+ else
+ {
+ scan.first = latest;
+ result.length = latest_len;
+ }
+ return result;
+ }
+
+ private:
+
+ typedef tst_node<T, CharT> node_t;
+ node_t* root;
+ };
+
+///////////////////////////////////////////////////////////////////////////////
+ } // namespace impl
+
+}} // namespace boost::spirit
+
+#endif
diff --git a/boost/boost/spirit/symbols/symbols.hpp b/boost/boost/spirit/symbols/symbols.hpp
new file mode 100644
index 00000000000..4f6d2ab1a84
--- /dev/null
+++ b/boost/boost/spirit/symbols/symbols.hpp
@@ -0,0 +1,225 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Joel de Guzman
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_SYMBOLS_HPP
+#define BOOST_SPIRIT_SYMBOLS_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <string>
+
+#include <boost/ref.hpp>
+
+#include <boost/spirit/core/parser.hpp>
+#include <boost/spirit/core/composite/directives.hpp>
+
+#include <boost/spirit/symbols/symbols_fwd.hpp>
+
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// symbols class
+//
+// This class implements a symbol table. The symbol table holds a
+// dictionary of symbols where each symbol is a sequence of CharTs.
+// The template class can work efficiently with 8, 16 and 32 bit
+// characters. Mutable data of type T is associated with each
+// symbol.
+//
+// The class is a parser. The parse member function returns
+// additional information in the symbol_match class (see below).
+// The additional data is a pointer to some data associated with
+// the matching symbol.
+//
+// The actual set implementation is supplied by the SetT template
+// parameter. By default, this uses the tst class (see tst.ipp).
+//
+// Symbols are added into the symbol table statically using the
+// construct:
+//
+// sym = a, b, c, d ...;
+//
+// where sym is a symbol table and a..d are strings. Example:
+//
+// sym = "pineapple", "orange", "banana", "apple";
+//
+// Alternatively, symbols may be added dynamically through the
+// member functor 'add' (see symbol_inserter below). The member
+// functor 'add' may be attached to a parser as a semantic action
+// taking in a begin/end pair:
+//
+// p[sym.add]
+//
+// where p is a parser (and sym is a symbol table). On success,
+// the matching portion of the input is added to the symbol table.
+//
+// 'add' may also be used to directly initialize data. Examples:
+//
+// sym.add("hello", 1)("crazy", 2)("world", 3);
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename T, typename CharT, typename SetT>
+class symbols
+: private SetT
+, public parser<symbols<T, CharT, SetT> >
+{
+public:
+
+ typedef parser<symbols<T, CharT, SetT> > parser_base_t;
+ typedef symbols<T, CharT, SetT> self_t;
+ typedef self_t const& embed_t;
+ typedef T symbol_data_t;
+ typedef boost::reference_wrapper<T> symbol_ref_t;
+
+ symbols();
+ symbols(symbols const& other);
+ ~symbols();
+
+ symbols&
+ operator=(symbols const& other);
+
+ symbol_inserter<T, SetT> const&
+ operator=(CharT const* str);
+
+ template <typename ScannerT>
+ struct result
+ {
+ typedef typename match_result<ScannerT, symbol_ref_t>::type type;
+ };
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse_main(ScannerT const& scan) const
+ {
+ typedef typename ScannerT::iterator_t iterator_t;
+ iterator_t first = scan.first;
+ typename SetT::search_info result = SetT::find(scan);
+
+ if (result.data)
+ return scan.
+ create_match(
+ result.length,
+ symbol_ref_t(*result.data),
+ first,
+ scan.first);
+ else
+ return scan.no_match();
+ }
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ typedef typename parser_result<self_t, ScannerT>::type result_t;
+ return impl::implicit_lexeme_parse<result_t>
+ (*this, scan, scan);
+ }
+
+ template < typename ScannerT >
+ T* find(ScannerT const& scan) const
+ { return SetT::find(scan).data; }
+
+ symbol_inserter<T, SetT> const add;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Symbol table utilities
+//
+// add
+//
+// adds a symbol 'sym' (string) to a symbol table 'table' plus an
+// optional data 'data' associated with the symbol. Returns a pointer to
+// the data associated with the symbol or NULL if add failed (e.g. when
+// the symbol is already added before).
+//
+// find
+//
+// finds a symbol 'sym' (string) from a symbol table 'table'. Returns a
+// pointer to the data associated with the symbol or NULL if not found
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename T, typename CharT, typename SetT>
+T* add(symbols<T, CharT, SetT>& table, CharT const* sym, T const& data = T());
+
+template <typename T, typename CharT, typename SetT>
+T* find(symbols<T, CharT, SetT> const& table, CharT const* sym);
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// symbol_inserter class
+//
+// The symbols class holds an instance of this class named 'add'.
+// This can be called directly just like a member function,
+// passing in a first/last iterator and optional data:
+//
+// sym.add(first, last, data);
+//
+// Or, passing in a C string and optional data:
+//
+// sym.add(c_string, data);
+//
+// where sym is a symbol table. The 'data' argument is optional.
+// This may also be used as a semantic action since it conforms
+// to the action interface (see action.hpp):
+//
+// p[sym.add]
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename T, typename SetT>
+class symbol_inserter
+{
+public:
+
+ symbol_inserter(SetT& set_)
+ : set(set_) {}
+
+ typedef symbol_inserter const & result_type;
+
+ template <typename IteratorT>
+ symbol_inserter const&
+ operator()(IteratorT first, IteratorT const& last, T const& data = T()) const
+ {
+ set.add(first, last, data);
+ return *this;
+ }
+
+ template <typename CharT>
+ symbol_inserter const&
+ operator()(CharT const* str, T const& data = T()) const
+ {
+ CharT const* last = str;
+ while (*last)
+ last++;
+ set.add(str, last, data);
+ return *this;
+ }
+
+ template <typename CharT>
+ symbol_inserter const&
+ operator,(CharT const* str) const
+ {
+ CharT const* last = str;
+ while (*last)
+ last++;
+ set.add(str, last, T());
+ return *this;
+ }
+
+private:
+
+ SetT& set;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+}} // namespace boost::spirit
+
+#include <boost/spirit/symbols/impl/symbols.ipp>
+#endif
diff --git a/boost/boost/spirit/symbols/symbols_fwd.hpp b/boost/boost/spirit/symbols/symbols_fwd.hpp
new file mode 100644
index 00000000000..bfb604cded0
--- /dev/null
+++ b/boost/boost/spirit/symbols/symbols_fwd.hpp
@@ -0,0 +1,34 @@
+/*=============================================================================
+ Copyright (c) 2006 Tobias Schwinger
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_SYMBOLS_FWD_HPP)
+#define BOOST_SPIRIT_SYMBOLS_FWD_HPP
+
+namespace boost { namespace spirit {
+
+ namespace impl
+ {
+ template <typename CharT, typename T>
+ class tst;
+ }
+
+ template
+ <
+ typename T = int,
+ typename CharT = char,
+ typename SetT = impl::tst<T, CharT>
+ >
+ class symbols;
+
+ template <typename T, typename SetT>
+ class symbol_inserter;
+
+}} // namespace boost::spirit
+
+#endif
+
diff --git a/boost/boost/spirit/symbols/typeof.hpp b/boost/boost/spirit/symbols/typeof.hpp
new file mode 100644
index 00000000000..35652462931
--- /dev/null
+++ b/boost/boost/spirit/symbols/typeof.hpp
@@ -0,0 +1,26 @@
+/*=============================================================================
+ Copyright (c) 2006 Tobias Schwinger
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_SYMBOLS_TYPEOF_HPP)
+#define BOOST_SPIRIT_SYMBOLS_TYPEOF_HPP
+
+#include <boost/typeof/typeof.hpp>
+
+#include <boost/spirit/symbols/symbols_fwd.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::symbols,3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::symbol_inserter,2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::impl::tst,2)
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::symbols,2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::symbols,1)
+
+#endif
+
diff --git a/boost/boost/spirit/tree/ast.hpp b/boost/boost/spirit/tree/ast.hpp
new file mode 100644
index 00000000000..98631e04d21
--- /dev/null
+++ b/boost/boost/spirit/tree/ast.hpp
@@ -0,0 +1,378 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Daniel Nuffer
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_TREE_AST_HPP
+#define BOOST_SPIRIT_TREE_AST_HPP
+
+#include <boost/spirit/tree/common.hpp>
+#include <boost/spirit/core/scanner/scanner.hpp>
+
+#include <boost/spirit/tree/ast_fwd.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+
+//////////////////////////////////
+// ast_match_policy is simply an id so the correct specialization of
+// tree_policy can be found.
+template <
+ typename IteratorT,
+ typename NodeFactoryT
+>
+struct ast_match_policy :
+ public common_tree_match_policy<
+ ast_match_policy<IteratorT, NodeFactoryT>,
+ IteratorT,
+ NodeFactoryT,
+ ast_tree_policy<
+ ast_match_policy<IteratorT, NodeFactoryT>,
+ NodeFactoryT
+ >
+ >
+{
+ typedef
+ common_tree_match_policy<
+ ast_match_policy<IteratorT, NodeFactoryT>,
+ IteratorT,
+ NodeFactoryT,
+ ast_tree_policy<
+ ast_match_policy<IteratorT, NodeFactoryT>,
+ NodeFactoryT
+ >
+ >
+ common_tree_match_policy_;
+
+ ast_match_policy()
+ {
+ }
+
+ template <typename PolicyT>
+ ast_match_policy(PolicyT const & policies)
+ : common_tree_match_policy_(policies)
+ {
+ }
+};
+
+//////////////////////////////////
+template <typename MatchPolicyT, typename NodeFactoryT>
+struct ast_tree_policy :
+ public common_tree_tree_policy<MatchPolicyT, NodeFactoryT>
+{
+ typedef
+ typename common_tree_tree_policy<MatchPolicyT, NodeFactoryT>::match_t
+ match_t;
+ typedef typename MatchPolicyT::iterator_t iterator_t;
+
+ static void concat(match_t& a, match_t const& b)
+ {
+ BOOST_SPIRIT_ASSERT(a && b);
+
+#if defined(BOOST_SPIRIT_DEBUG) && \
+ (BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_NODES)
+ BOOST_SPIRIT_DEBUG_OUT << "\n>>>AST concat. a = " << a <<
+ "\n\tb = " << b << "<<<\n";
+#endif
+ typedef typename tree_match<iterator_t, NodeFactoryT>::container_t
+ container_t;
+
+ // test for size() is nessecary, because no_tree_gen_node leaves a.trees
+ // and/or b.trees empty
+ if (0 != b.trees.size() && b.trees.begin()->value.is_root())
+ {
+ BOOST_SPIRIT_ASSERT(b.trees.size() == 1);
+
+ container_t tmp;
+ std::swap(a.trees, tmp); // save a into tmp
+ std::swap(b.trees, a.trees); // make b.trees[0] be new root (a.trees[0])
+ container_t* pnon_root_trees = &a.trees;
+ while (pnon_root_trees->size() > 0 &&
+ pnon_root_trees->begin()->value.is_root())
+ {
+ pnon_root_trees = & pnon_root_trees->begin()->children;
+ }
+ pnon_root_trees->insert(pnon_root_trees->begin(),
+ tmp.begin(), tmp.end());
+ }
+ else if (0 != a.trees.size() && a.trees.begin()->value.is_root())
+ {
+ BOOST_SPIRIT_ASSERT(a.trees.size() == 1);
+
+#if !defined(BOOST_SPIRIT_USE_LIST_FOR_TREES)
+ a.trees.begin()->children.reserve(a.trees.begin()->children.size() + b.trees.size());
+#endif
+ std::copy(b.trees.begin(),
+ b.trees.end(),
+ std::back_insert_iterator<container_t>(
+ a.trees.begin()->children));
+ }
+ else
+ {
+#if !defined(BOOST_SPIRIT_USE_LIST_FOR_TREES)
+ a.trees.reserve(a.trees.size() + b.trees.size());
+#endif
+ std::copy(b.trees.begin(),
+ b.trees.end(),
+ std::back_insert_iterator<container_t>(a.trees));
+ }
+
+#if defined(BOOST_SPIRIT_DEBUG) && \
+ (BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_NODES)
+ BOOST_SPIRIT_DEBUG_OUT << ">>>after AST concat. a = " << a << "<<<\n\n";
+#endif
+
+ return;
+ }
+
+ template <typename MatchT, typename Iterator1T, typename Iterator2T>
+ static void group_match(MatchT& m, parser_id const& id,
+ Iterator1T const& first, Iterator2T const& last)
+ {
+ if (!m)
+ return;
+
+ typedef typename tree_match<iterator_t, NodeFactoryT>::container_t
+ container_t;
+ typedef typename container_t::iterator cont_iterator_t;
+ typedef typename NodeFactoryT::template factory<iterator_t> factory_t;
+
+ if (m.trees.size() == 1
+#ifdef BOOST_SPIRIT_NO_TREE_NODE_COLLAPSING
+ && !(id.to_long() && m.trees.begin()->value.id().to_long())
+#endif
+ )
+ {
+ // set rule_id's. There may have been multiple nodes created.
+ // Because of root_node[] they may be left-most children of the top
+ // node.
+ container_t* punset_id = &m.trees;
+ while (punset_id->size() > 0 &&
+ punset_id->begin()->value.id() == 0)
+ {
+ punset_id->begin()->value.id(id);
+ punset_id = &punset_id->begin()->children;
+ }
+
+ m.trees.begin()->value.is_root(false);
+ }
+ else
+ {
+ match_t newmatch(m.length(),
+ m.trees.empty() ?
+ factory_t::empty_node() :
+ factory_t::create_node(first, last, false));
+
+ std::swap(newmatch.trees.begin()->children, m.trees);
+ // set this node and all it's unset children's rule_id
+ newmatch.trees.begin()->value.id(id);
+ for (cont_iterator_t i = newmatch.trees.begin();
+ i != newmatch.trees.end();
+ ++i)
+ {
+ if (i->value.id() == 0)
+ i->value.id(id);
+ }
+ m = newmatch;
+ }
+ }
+
+ template <typename FunctorT>
+ static void apply_op_to_match(FunctorT const& op, match_t& m)
+ {
+ op(m);
+ }
+};
+
+namespace impl {
+
+ template <typename IteratorT, typename NodeFactoryT>
+ struct tree_policy_selector<ast_match_policy<IteratorT, NodeFactoryT> >
+ {
+ typedef ast_tree_policy<
+ ast_match_policy<IteratorT, NodeFactoryT>, NodeFactoryT> type;
+ };
+
+} // namespace impl
+
+
+//////////////////////////////////
+struct gen_ast_node_parser_gen;
+
+template <typename T>
+struct gen_ast_node_parser
+: public unary<T, parser<gen_ast_node_parser<T> > >
+{
+ typedef gen_ast_node_parser<T> self_t;
+ typedef gen_ast_node_parser_gen parser_generator_t;
+ typedef unary_parser_category parser_category_t;
+// typedef gen_ast_node_parser<T> const &embed_t;
+
+ gen_ast_node_parser(T const& a)
+ : unary<T, parser<gen_ast_node_parser<T> > >(a) {}
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ typedef typename ScannerT::iteration_policy_t iteration_policy_t;
+ typedef typename ScannerT::match_policy_t::iterator_t iterator_t;
+ typedef typename ScannerT::match_policy_t::factory_t factory_t;
+ typedef ast_match_policy<iterator_t, factory_t> match_policy_t;
+ typedef typename ScannerT::action_policy_t action_policy_t;
+ typedef scanner_policies<
+ iteration_policy_t,
+ match_policy_t,
+ action_policy_t
+ > policies_t;
+
+ return this->subject().parse(scan.change_policies(policies_t(scan)));
+ }
+};
+
+//////////////////////////////////
+struct gen_ast_node_parser_gen
+{
+ template <typename T>
+ struct result {
+
+ typedef gen_ast_node_parser<T> type;
+ };
+
+ template <typename T>
+ static gen_ast_node_parser<T>
+ generate(parser<T> const& s)
+ {
+ return gen_ast_node_parser<T>(s.derived());
+ }
+
+ template <typename T>
+ gen_ast_node_parser<T>
+ operator[](parser<T> const& s) const
+ {
+ return gen_ast_node_parser<T>(s.derived());
+ }
+};
+
+//////////////////////////////////
+const gen_ast_node_parser_gen gen_ast_node_d = gen_ast_node_parser_gen();
+
+
+//////////////////////////////////
+struct root_node_op
+{
+ template <typename MatchT>
+ void operator()(MatchT& m) const
+ {
+ BOOST_SPIRIT_ASSERT(m.trees.size() > 0);
+ m.trees.begin()->value.is_root(true);
+ }
+};
+
+const node_parser_gen<root_node_op> root_node_d =
+ node_parser_gen<root_node_op>();
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Parse functions for ASTs
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+ typename AstFactoryT, typename IteratorT, typename ParserT,
+ typename SkipT
+>
+inline tree_parse_info<IteratorT, AstFactoryT>
+ast_parse(
+ IteratorT const& first_,
+ IteratorT const& last_,
+ parser<ParserT> const& parser,
+ SkipT const& skip_,
+ AstFactoryT const & /*dummy_*/ = AstFactoryT())
+{
+ typedef skip_parser_iteration_policy<SkipT> iter_policy_t;
+ typedef ast_match_policy<IteratorT, AstFactoryT> ast_match_policy_t;
+ typedef
+ scanner_policies<iter_policy_t, ast_match_policy_t>
+ scanner_policies_t;
+ typedef scanner<IteratorT, scanner_policies_t> scanner_t;
+
+ iter_policy_t iter_policy(skip_);
+ scanner_policies_t policies(iter_policy);
+ IteratorT first = first_;
+ scanner_t scan(first, last_, policies);
+ tree_match<IteratorT, AstFactoryT> hit = parser.derived().parse(scan);
+ scan.skip(scan);
+ return tree_parse_info<IteratorT, AstFactoryT>(
+ first, hit, hit && (first == last_), hit.length(), hit.trees);
+}
+
+//////////////////////////////////
+template <typename IteratorT, typename ParserT, typename SkipT>
+inline tree_parse_info<IteratorT>
+ast_parse(
+ IteratorT const& first_,
+ IteratorT const& last_,
+ parser<ParserT> const& parser,
+ SkipT const& skip_)
+{
+ typedef node_val_data_factory<nil_t> default_factory_t;
+ return ast_parse(first_, last_, parser, skip_, default_factory_t());
+}
+
+//////////////////////////////////
+template <typename IteratorT, typename ParserT>
+inline tree_parse_info<IteratorT>
+ast_parse(
+ IteratorT const& first_,
+ IteratorT const& last,
+ parser<ParserT> const& parser)
+{
+ typedef ast_match_policy<IteratorT> ast_match_policy_t;
+ IteratorT first = first_;
+ scanner<
+ IteratorT,
+ scanner_policies<iteration_policy, ast_match_policy_t>
+ > scan(first, last);
+ tree_match<IteratorT> hit = parser.derived().parse(scan);
+ return tree_parse_info<IteratorT>(
+ first, hit, hit && (first == last), hit.length(), hit.trees);
+}
+
+//////////////////////////////////
+template <typename CharT, typename ParserT, typename SkipT>
+inline tree_parse_info<CharT const*>
+ast_parse(
+ CharT const* str,
+ parser<ParserT> const& parser,
+ SkipT const& skip)
+{
+ CharT const* last = str;
+ while (*last)
+ last++;
+ return ast_parse(str, last, parser, skip);
+}
+
+//////////////////////////////////
+template <typename CharT, typename ParserT>
+inline tree_parse_info<CharT const*>
+ast_parse(
+ CharT const* str,
+ parser<ParserT> const& parser)
+{
+ CharT const* last = str;
+ while (*last)
+ {
+ last++;
+ }
+ return ast_parse(str, last, parser);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+}} // namespace boost::spirit
+
+#endif
+
diff --git a/boost/boost/spirit/tree/ast_fwd.hpp b/boost/boost/spirit/tree/ast_fwd.hpp
new file mode 100644
index 00000000000..9ef5baa6f9e
--- /dev/null
+++ b/boost/boost/spirit/tree/ast_fwd.hpp
@@ -0,0 +1,33 @@
+/*=============================================================================
+ Copyright (c) 2006 Tobias Schwinger
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_TREE_AST_FWD_HPP)
+#define BOOST_SPIRIT_TREE_AST_FWD_HPP
+
+#include <boost/spirit/core/nil.hpp>
+
+namespace boost { namespace spirit {
+
+ template <typename MatchPolicyT, typename NodeFactoryT>
+ struct ast_tree_policy;
+
+ template <
+ typename IteratorT,
+ typename NodeFactoryT = node_val_data_factory<nil_t>
+ >
+ struct ast_match_policy;
+
+ template <typename T>
+ struct gen_ast_node_parser;
+
+ struct root_node_op;
+
+}} // namespace boost::spirit
+
+#endif
+
diff --git a/boost/boost/spirit/tree/common.hpp b/boost/boost/spirit/tree/common.hpp
new file mode 100644
index 00000000000..d899f120538
--- /dev/null
+++ b/boost/boost/spirit/tree/common.hpp
@@ -0,0 +1,1504 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Daniel Nuffer
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_TREE_COMMON_HPP
+#define BOOST_SPIRIT_TREE_COMMON_HPP
+
+#if !defined(BOOST_SPIRIT_USE_LIST_FOR_TREES)
+#include <vector>
+#else
+#include <list>
+#endif
+
+#if defined(BOOST_SPIRIT_USE_BOOST_ALLOCATOR_FOR_TREES)
+#include <boost/pool/pool_alloc.hpp>
+#endif
+
+#include <algorithm>
+
+#include <boost/ref.hpp>
+#include <boost/call_traits.hpp>
+#include <boost/spirit/core.hpp>
+#include <boost/detail/iterator.hpp> // for boost::detail::iterator_traits
+
+#if defined(BOOST_SPIRIT_DEBUG) && \
+ (BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_NODES)
+#include <iostream>
+#include <boost/spirit/debug/debug_node.hpp>
+#endif
+
+#include <boost/spirit/tree/common_fwd.hpp>
+
+namespace boost { namespace spirit {
+
+template <typename T>
+void swap(tree_node<T>& a, tree_node<T>& b);
+
+template <typename T, typename V>
+void swap(node_iter_data<T, V>& a, node_iter_data<T, V>& b);
+
+namespace impl {
+ template <typename T>
+ inline void cp_swap(T& t1, T& t2);
+}
+
+template <typename T>
+struct tree_node
+{
+ typedef T parse_node_t;
+
+#if !defined(BOOST_SPIRIT_USE_BOOST_ALLOCATOR_FOR_TREES)
+ typedef std::allocator<tree_node<T> > allocator_type;
+#elif !defined(BOOST_SPIRIT_USE_LIST_FOR_TREES)
+ typedef boost::pool_allocator<tree_node<T> > allocator_type;
+#else
+ typedef boost::fast_pool_allocator<tree_node<T> > allocator_type;
+#endif
+
+#if !defined(BOOST_SPIRIT_USE_LIST_FOR_TREES)
+ typedef std::vector<tree_node<T>, allocator_type> children_t;
+#else
+ typedef std::list<tree_node<T>, allocator_type> children_t;
+#endif // BOOST_SPIRIT_USE_LIST_FOR_TREES
+
+ typedef typename children_t::iterator tree_iterator;
+ typedef typename children_t::const_iterator const_tree_iterator;
+
+ T value;
+ children_t children;
+
+ tree_node()
+ : value()
+ , children()
+ {}
+
+ explicit tree_node(T const& v)
+ : value(v)
+ , children()
+ {}
+
+ tree_node(T const& v, children_t const& c)
+ : value(v)
+ , children(c)
+ {}
+
+ void swap(tree_node<T>& x)
+ {
+ impl::cp_swap(value, x.value);
+ impl::cp_swap(children, x.children);
+ }
+
+// Intel V5.0.1 has a problem without this explicit operator=
+ tree_node &operator= (tree_node const &rhs)
+ {
+ tree_node(rhs).swap(*this);
+ return *this;
+ }
+};
+
+#if defined(BOOST_SPIRIT_DEBUG) && \
+ (BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_NODES)
+template <typename T>
+inline std::ostream&
+operator<<(std::ostream& o, tree_node<T> const& n)
+{
+ static int depth = 0;
+ o << "\n";
+ for (int i = 0; i <= depth; ++i)
+ {
+ o << "\t";
+ }
+ o << "(depth = " << depth++ << " value = " << n.value;
+ int c = 0;
+ for (typename tree_node<T>::children_t::const_iterator it = n.children.begin();
+ it != n.children.end(); ++it)
+ {
+ o << " children[" << c++ << "] = " << *it;
+ }
+ o << ")";
+ --depth;
+ return o;
+}
+#endif
+
+//////////////////////////////////
+template <typename IteratorT, typename ValueT>
+struct node_iter_data
+{
+ typedef IteratorT iterator_t;
+ typedef IteratorT /*const*/ const_iterator_t;
+
+ node_iter_data()
+ : first(), last(), is_root_(false), parser_id_(), value_()
+ {}
+
+ node_iter_data(IteratorT const& _first, IteratorT const& _last)
+ : first(_first), last(_last), is_root_(false), parser_id_(), value_()
+ {}
+
+ void swap(node_iter_data& x)
+ {
+ impl::cp_swap(first, x.first);
+ impl::cp_swap(last, x.last);
+ impl::cp_swap(parser_id_, x.parser_id_);
+ impl::cp_swap(is_root_, x.is_root_);
+ impl::cp_swap(value_, x.value_);
+ }
+
+ IteratorT begin()
+ {
+ return first;
+ }
+
+ IteratorT const& begin() const
+ {
+ return first;
+ }
+
+ IteratorT end()
+ {
+ return last;
+ }
+
+ IteratorT const& end() const
+ {
+ return last;
+ }
+
+ bool is_root() const
+ {
+ return is_root_;
+ }
+
+ void is_root(bool b)
+ {
+ is_root_ = b;
+ }
+
+ parser_id id() const
+ {
+ return parser_id_;
+ }
+
+ void id(parser_id r)
+ {
+ parser_id_ = r;
+ }
+
+ ValueT const& value() const
+ {
+ return value_;
+ }
+
+ void value(ValueT const& v)
+ {
+ value_ = v;
+ }
+private:
+ IteratorT first, last;
+ bool is_root_;
+ parser_id parser_id_;
+ ValueT value_;
+
+public:
+};
+
+#if defined(BOOST_SPIRIT_DEBUG) && \
+ (BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_NODES)
+// value is default nil_t, so provide an operator<< for nil_t
+inline std::ostream&
+operator<<(std::ostream& o, nil_t const&)
+{
+ return o;
+}
+
+template <typename IteratorT, typename ValueT>
+inline std::ostream&
+operator<<(std::ostream& o, node_iter_data<IteratorT, ValueT> const& n)
+{
+ o << "(id = " << n.id() << " text = \"";
+ typedef typename node_iter_data<IteratorT, ValueT>::const_iterator_t
+ iterator_t;
+ for (iterator_t it = n.begin(); it != n.end(); ++it)
+ impl::token_printer(o, *it);
+ o << "\" is_root = " << n.is_root()
+ << /*" value = " << n.value() << */")";
+ return o;
+}
+#endif
+
+//////////////////////////////////
+template <typename IteratorT = char const*, typename ValueT = nil_t>
+struct node_val_data
+{
+ typedef
+ typename boost::detail::iterator_traits<IteratorT>::value_type
+ value_type;
+
+#if !defined(BOOST_SPIRIT_USE_BOOST_ALLOCATOR_FOR_TREES)
+ typedef std::allocator<value_type> allocator_type;
+#elif !defined(BOOST_SPIRIT_USE_LIST_FOR_TREES)
+ typedef boost::pool_allocator<value_type> allocator_type;
+#else
+ typedef boost::fast_pool_allocator<value_type> allocator_type;
+#endif
+
+#if !defined(BOOST_SPIRIT_USE_LIST_FOR_TREES)
+ typedef std::vector<value_type, allocator_type> container_t;
+#else
+ typedef std::list<value_type, allocator_type> container_t;
+#endif
+
+ typedef typename container_t::iterator iterator_t;
+ typedef typename container_t::const_iterator const_iterator_t;
+
+ node_val_data()
+ : text(), is_root_(false), parser_id_(), value_()
+ {}
+
+#if defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS)
+ node_val_data(IteratorT const& _first, IteratorT const& _last)
+ : text(), is_root_(false), parser_id_(), value_()
+ {
+ std::copy(_first, _last, std::inserter(text, text.end()));
+ }
+
+ // This constructor is for building text out of iterators
+ template <typename IteratorT2>
+ node_val_data(IteratorT2 const& _first, IteratorT2 const& _last)
+ : text(), is_root_(false), parser_id_(), value_()
+ {
+ std::copy(_first, _last, std::inserter(text, text.end()));
+ }
+#else
+ node_val_data(IteratorT const& _first, IteratorT const& _last)
+ : text(_first, _last), is_root_(false), parser_id_(), value_()
+ {}
+
+ // This constructor is for building text out of iterators
+ template <typename IteratorT2>
+ node_val_data(IteratorT2 const& _first, IteratorT2 const& _last)
+ : text(_first, _last), is_root_(false), parser_id_(), value_()
+ {}
+#endif
+
+ void swap(node_val_data& x)
+ {
+ impl::cp_swap(text, x.text);
+ impl::cp_swap(is_root_, x.is_root_);
+ impl::cp_swap(parser_id_, x.parser_id_);
+ impl::cp_swap(value_, x.value_);
+ }
+
+ typename container_t::iterator begin()
+ {
+ return text.begin();
+ }
+
+ typename container_t::const_iterator begin() const
+ {
+ return text.begin();
+ }
+
+ typename container_t::iterator end()
+ {
+ return text.end();
+ }
+
+ typename container_t::const_iterator end() const
+ {
+ return text.end();
+ }
+
+ bool is_root() const
+ {
+ return is_root_;
+ }
+
+ void is_root(bool b)
+ {
+ is_root_ = b;
+ }
+
+ parser_id id() const
+ {
+ return parser_id_;
+ }
+
+ void id(parser_id r)
+ {
+ parser_id_ = r;
+ }
+
+ ValueT const& value() const
+ {
+ return value_;
+ }
+
+ void value(ValueT const& v)
+ {
+ value_ = v;
+ }
+
+private:
+ container_t text;
+ bool is_root_;
+ parser_id parser_id_;
+ ValueT value_;
+};
+
+#if defined(BOOST_SPIRIT_DEBUG) && \
+ (BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_NODES)
+template <typename IteratorT, typename ValueT>
+inline std::ostream&
+operator<<(std::ostream& o, node_val_data<IteratorT, ValueT> const& n)
+{
+ o << "(id = " << n.id() << " text = \"";
+ typedef typename node_val_data<IteratorT, ValueT>::const_iterator_t
+ iterator_t;
+ for (iterator_t it = n.begin(); it != n.end(); ++it)
+ impl::token_printer(o, *it);
+ o << "\" is_root = " << n.is_root()
+ << " value = " << n.value() << ")";
+ return o;
+}
+#endif
+
+template <typename T>
+inline void
+swap(tree_node<T>& a, tree_node<T>& b)
+{
+ a.swap(b);
+}
+
+template <typename T, typename V>
+inline void
+swap(node_iter_data<T, V>& a, node_iter_data<T, V>& b)
+{
+ a.swap(b);
+}
+
+//////////////////////////////////
+template <typename ValueT>
+class node_iter_data_factory
+{
+public:
+ // This inner class is so that node_iter_data_factory can simulate
+ // a template template parameter
+ template <typename IteratorT>
+ class factory
+ {
+ public:
+ typedef IteratorT iterator_t;
+ typedef node_iter_data<iterator_t, ValueT> node_t;
+
+ static node_t create_node(iterator_t const& first, iterator_t const& last,
+ bool /*is_leaf_node*/)
+ {
+ return node_t(first, last);
+ }
+
+ static node_t empty_node()
+ {
+ return node_t();
+ }
+
+ // precondition: ContainerT contains a tree_node<node_t>. And all
+ // iterators in the container point to the same sequence.
+ template <typename ContainerT>
+ static node_t group_nodes(ContainerT const& nodes)
+ {
+ return node_t(nodes.begin()->value.begin(),
+ nodes.back().value.end());
+ }
+ };
+};
+
+//////////////////////////////////
+template <typename ValueT>
+class node_val_data_factory
+{
+public:
+ // This inner class is so that node_val_data_factory can simulate
+ // a template template parameter
+ template <typename IteratorT>
+ class factory
+ {
+ public:
+ typedef IteratorT iterator_t;
+ typedef node_val_data<iterator_t, ValueT> node_t;
+
+ static node_t create_node(iterator_t const& first, iterator_t const& last,
+ bool is_leaf_node)
+ {
+ if (is_leaf_node)
+ return node_t(first, last);
+ else
+ return node_t();
+ }
+
+ static node_t empty_node()
+ {
+ return node_t();
+ }
+
+ template <typename ContainerT>
+ static node_t group_nodes(ContainerT const& nodes)
+ {
+ typename node_t::container_t c;
+ typename ContainerT::const_iterator i_end = nodes.end();
+ // copy all the nodes text into a new one
+ for (typename ContainerT::const_iterator i = nodes.begin();
+ i != i_end; ++i)
+ {
+ // See docs: token_node_d or leaf_node_d cannot be used with a
+ // rule inside the [].
+ assert(i->children.size() == 0);
+ c.insert(c.end(), i->value.begin(), i->value.end());
+ }
+ return node_t(c.begin(), c.end());
+ }
+ };
+};
+
+//////////////////////////////////
+template <typename ValueT>
+class node_all_val_data_factory
+{
+public:
+ // This inner class is so that node_all_val_data_factory can simulate
+ // a template template parameter
+ template <typename IteratorT>
+ class factory
+ {
+ public:
+ typedef IteratorT iterator_t;
+ typedef node_val_data<iterator_t, ValueT> node_t;
+
+ static node_t create_node(iterator_t const& first, iterator_t const& last,
+ bool /*is_leaf_node*/)
+ {
+ return node_t(first, last);
+ }
+
+ static node_t empty_node()
+ {
+ return node_t();
+ }
+
+ template <typename ContainerT>
+ static node_t group_nodes(ContainerT const& nodes)
+ {
+ typename node_t::container_t c;
+ typename ContainerT::const_iterator i_end = nodes.end();
+ // copy all the nodes text into a new one
+ for (typename ContainerT::const_iterator i = nodes.begin();
+ i != i_end; ++i)
+ {
+ // See docs: token_node_d or leaf_node_d cannot be used with a
+ // rule inside the [].
+ assert(i->children.size() == 0);
+ c.insert(c.end(), i->value.begin(), i->value.end());
+ }
+ return node_t(c.begin(), c.end());
+ }
+ };
+};
+
+namespace impl {
+
+ ///////////////////////////////////////////////////////////////////////////
+ // can't call unqualified swap from within classname::swap
+ // as Koenig lookup rules will find only the classname::swap
+ // member function not the global declaration, so use cp_swap
+ // as a forwarding function (JM):
+#if __GNUC__ == 2
+ using ::std::swap;
+#endif
+ template <typename T>
+ inline void cp_swap(T& t1, T& t2)
+ {
+ using std::swap;
+ using boost::spirit::swap;
+ using boost::swap;
+ swap(t1, t2);
+ }
+}
+
+//////////////////////////////////
+template <typename IteratorT, typename NodeFactoryT, typename T>
+class tree_match : public match<T>
+{
+public:
+
+ typedef typename NodeFactoryT::template factory<IteratorT> node_factory_t;
+ typedef typename node_factory_t::node_t parse_node_t;
+ typedef tree_node<parse_node_t> node_t;
+ typedef typename node_t::children_t container_t;
+ typedef typename container_t::iterator tree_iterator;
+ typedef typename container_t::const_iterator const_tree_iterator;
+
+ typedef T attr_t;
+ typedef typename boost::call_traits<T>::param_type param_type;
+ typedef typename boost::call_traits<T>::reference reference;
+ typedef typename boost::call_traits<T>::const_reference const_reference;
+
+ tree_match()
+ : match<T>(), trees()
+ {}
+
+ explicit
+ tree_match(std::size_t length)
+ : match<T>(length), trees()
+ {}
+
+ tree_match(std::size_t length, parse_node_t const& n)
+ : match<T>(length), trees()
+ {
+#if !defined(BOOST_SPIRIT_USE_LIST_FOR_TREES)
+ trees.reserve(10); // this is more or less an arbitrary number...
+#endif
+ trees.push_back(node_t(n));
+ }
+
+ tree_match(std::size_t length, param_type val, parse_node_t const& n)
+ : match<T>(length, val), trees()
+ {
+#if !defined(BOOST_SPIRIT_USE_LIST_FOR_TREES)
+ trees.reserve(10); // this is more or less an arbitrary number...
+#endif
+ trees.push_back(node_t(n));
+ }
+
+ // attention, these constructors will change the second parameter!
+ tree_match(std::size_t length, container_t& c)
+ : match<T>(length), trees()
+ {
+ impl::cp_swap(trees, c);
+ }
+
+ tree_match(std::size_t length, param_type val, container_t& c)
+ : match<T>(length, val), trees()
+ {
+ impl::cp_swap(trees, c);
+ }
+
+ template <typename T2>
+ tree_match(match<T2> const& other)
+ : match<T>(other), trees()
+ {}
+
+ template <typename T2, typename T3, typename T4>
+ tree_match(tree_match<T2, T3, T4> const& other)
+ : match<T>(other), trees()
+ { impl::cp_swap(trees, other.trees); }
+
+ template <typename T2>
+ tree_match&
+ operator=(match<T2> const& other)
+ {
+ match<T>::operator=(other);
+ return *this;
+ }
+
+ template <typename T2, typename T3, typename T4>
+ tree_match&
+ operator=(tree_match<T2, T3, T4> const& other)
+ {
+ match<T>::operator=(other);
+ impl::cp_swap(trees, other.trees);
+ return *this;
+ }
+
+ tree_match(tree_match const& x)
+ : match<T>(x), trees()
+ {
+ // use auto_ptr like ownership for the trees data member
+ impl::cp_swap(trees, x.trees);
+ }
+
+ tree_match& operator=(tree_match const& x)
+ {
+ tree_match tmp(x);
+ this->swap(tmp);
+ return *this;
+ }
+
+ void swap(tree_match& x)
+ {
+ match<T>::swap(x);
+ impl::cp_swap(trees, x.trees);
+ }
+
+ mutable container_t trees;
+};
+
+#if defined(BOOST_SPIRIT_DEBUG) && \
+ (BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_NODES)
+template <typename IteratorT, typename NodeFactoryT, typename T>
+inline std::ostream&
+operator<<(std::ostream& o, tree_match<IteratorT, NodeFactoryT, T> const& m)
+{
+ typedef
+ typename tree_match<IteratorT, NodeFactoryT, T>::container_t::iterator
+ iterator;
+
+ o << "(length = " << (int)m.length();
+ int c = 0;
+ for (iterator i = m.trees.begin(); i != m.trees.end(); ++i)
+ {
+ o << " trees[" << c++ << "] = " << *i;
+ }
+ o << "\n)";
+ return o;
+}
+#endif
+
+//////////////////////////////////
+struct tree_policy
+{
+ template <typename FunctorT, typename MatchT>
+ static void apply_op_to_match(FunctorT const& /*op*/, MatchT& /*m*/)
+ {}
+
+ template <typename MatchT, typename Iterator1T, typename Iterator2T>
+ static void group_match(MatchT& /*m*/, parser_id const& /*id*/,
+ Iterator1T const& /*first*/, Iterator2T const& /*last*/)
+ {}
+
+ template <typename MatchT>
+ static void concat(MatchT& /*a*/, MatchT const& /*b*/)
+ {}
+};
+
+//////////////////////////////////
+template <
+ typename MatchPolicyT,
+ typename IteratorT,
+ typename NodeFactoryT,
+ typename TreePolicyT
+>
+struct common_tree_match_policy : public match_policy
+{
+ common_tree_match_policy()
+ {
+ }
+
+ template <typename PolicyT>
+ common_tree_match_policy(PolicyT const & policies)
+ : match_policy(policies)
+ {
+ }
+
+ template <typename T>
+ struct result { typedef tree_match<IteratorT, NodeFactoryT, T> type; };
+
+ typedef tree_match<IteratorT, NodeFactoryT> match_t;
+ typedef IteratorT iterator_t;
+ typedef TreePolicyT tree_policy_t;
+ typedef NodeFactoryT factory_t;
+
+ static const match_t no_match() { return match_t(); }
+ static const match_t empty_match()
+ { return match_t(0, tree_policy_t::empty_node()); }
+
+ template <typename AttrT, typename Iterator1T, typename Iterator2T>
+ static tree_match<IteratorT, NodeFactoryT, AttrT> create_match(
+ std::size_t length,
+ AttrT const& val,
+ Iterator1T const& first,
+ Iterator2T const& last)
+ {
+#if defined(BOOST_SPIRIT_DEBUG) && \
+ (BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_NODES)
+
+ BOOST_SPIRIT_DEBUG_OUT << "\n>>> create_node(begin) <<<\n"
+ "creating node text: \"";
+ for (Iterator1T it = first; it != last; ++it)
+ impl::token_printer(BOOST_SPIRIT_DEBUG_OUT, *it);
+ BOOST_SPIRIT_DEBUG_OUT << "\"\n";
+ BOOST_SPIRIT_DEBUG_OUT << ">>> create_node(end) <<<\n\n";
+#endif
+ return tree_match<IteratorT, NodeFactoryT, AttrT>(length, val,
+ tree_policy_t::create_node(length, first, last, true));
+ }
+
+ template <typename Match1T, typename Match2T>
+ static void concat_match(Match1T& a, Match2T const& b)
+ {
+#if defined(BOOST_SPIRIT_DEBUG) && \
+ (BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_NODES)
+
+ BOOST_SPIRIT_DEBUG_OUT << "\n>>> concat_match(begin) <<<\n";
+ BOOST_SPIRIT_DEBUG_OUT << "tree a:\n" << a << "\n";
+ BOOST_SPIRIT_DEBUG_OUT << "tree b:\n" << b << "\n";
+ BOOST_SPIRIT_DEBUG_OUT << ">>> concat_match(end) <<<\n\n";
+#endif
+ BOOST_SPIRIT_ASSERT(a && b);
+ if (a.length() == 0)
+ {
+ a = b;
+ return;
+ }
+ else if (b.length() == 0
+#ifdef BOOST_SPIRIT_NO_TREE_NODE_COLLAPSING
+ && !b.trees.begin()->value.id().to_long()
+#endif
+ )
+ {
+ return;
+ }
+ a.concat(b);
+ tree_policy_t::concat(a, b);
+ }
+
+ template <typename MatchT, typename IteratorT2>
+ void
+ group_match(
+ MatchT& m,
+ parser_id const& id,
+ IteratorT2 const& first,
+ IteratorT2 const& last) const
+ {
+ if (!m) return;
+
+#if defined(BOOST_SPIRIT_DEBUG) && \
+ (BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_TREES)
+
+ BOOST_SPIRIT_DEBUG_OUT << "\n>>> group_match(begin) <<<\n"
+ "new node(" << id << ") \"";
+ for (IteratorT2 it = first; it != last; ++it)
+ impl::token_printer(BOOST_SPIRIT_DEBUG_OUT, *it);
+ BOOST_SPIRIT_DEBUG_OUT << "\"\n";
+ BOOST_SPIRIT_DEBUG_OUT << "new child tree (before grouping):\n" << m << "\n";
+
+ tree_policy_t::group_match(m, id, first, last);
+
+ BOOST_SPIRIT_DEBUG_OUT << "new child tree (after grouping):\n" << m << "\n";
+ BOOST_SPIRIT_DEBUG_OUT << ">>> group_match(end) <<<\n\n";
+#else
+ tree_policy_t::group_match(m, id, first, last);
+#endif
+ }
+};
+
+//////////////////////////////////
+template <typename MatchPolicyT, typename NodeFactoryT>
+struct common_tree_tree_policy
+{
+ typedef typename MatchPolicyT::iterator_t iterator_t;
+ typedef typename MatchPolicyT::match_t match_t;
+ typedef typename NodeFactoryT::template factory<iterator_t> factory_t;
+ typedef typename factory_t::node_t node_t;
+
+ template <typename Iterator1T, typename Iterator2T>
+ static node_t
+ create_node(std::size_t /*length*/, Iterator1T const& first,
+ Iterator2T const& last, bool leaf_node)
+ {
+ return factory_t::create_node(first, last, leaf_node);
+ }
+
+ static node_t
+ empty_node()
+ {
+ return factory_t::empty_node();
+ }
+
+ template <typename FunctorT>
+ static void apply_op_to_match(FunctorT const& op, match_t& m)
+ {
+ op(m);
+ }
+};
+
+//////////////////////////////////
+// directives to modify how the parse tree is generated
+
+struct no_tree_gen_node_parser_gen;
+
+template <typename T>
+struct no_tree_gen_node_parser
+: public unary<T, parser<no_tree_gen_node_parser<T> > >
+{
+ typedef no_tree_gen_node_parser<T> self_t;
+ typedef no_tree_gen_node_parser_gen parser_generator_t;
+ typedef unary_parser_category parser_category_t;
+// typedef no_tree_gen_node_parser<T> const &embed_t;
+
+ no_tree_gen_node_parser(T const& a)
+ : unary<T, parser<no_tree_gen_node_parser<T> > >(a) {}
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scanner) const
+ {
+ typedef typename ScannerT::iteration_policy_t iteration_policy_t;
+ typedef match_policy match_policy_t;
+ typedef typename ScannerT::action_policy_t action_policy_t;
+ typedef scanner_policies<
+ iteration_policy_t,
+ match_policy_t,
+ action_policy_t
+ > policies_t;
+
+ return this->subject().parse(scanner.change_policies(policies_t(scanner)));
+ }
+};
+
+//////////////////////////////////
+struct no_tree_gen_node_parser_gen
+{
+ template <typename T>
+ struct result {
+
+ typedef no_tree_gen_node_parser<T> type;
+ };
+
+ template <typename T>
+ static no_tree_gen_node_parser<T>
+ generate(parser<T> const& s)
+ {
+ return no_tree_gen_node_parser<T>(s.derived());
+ }
+
+ template <typename T>
+ no_tree_gen_node_parser<T>
+ operator[](parser<T> const& s) const
+ {
+ return no_tree_gen_node_parser<T>(s.derived());
+ }
+};
+
+//////////////////////////////////
+const no_tree_gen_node_parser_gen no_node_d = no_tree_gen_node_parser_gen();
+
+
+//////////////////////////////////
+namespace impl {
+
+ template <typename MatchPolicyT>
+ struct tree_policy_selector
+ {
+ typedef tree_policy type;
+ };
+
+} // namespace impl
+
+//////////////////////////////////
+template <typename NodeParserT>
+struct node_parser_gen;
+
+template <typename T, typename NodeParserT>
+struct node_parser
+: public unary<T, parser<node_parser<T, NodeParserT> > >
+{
+ typedef node_parser<T, NodeParserT> self_t;
+ typedef node_parser_gen<NodeParserT> parser_generator_t;
+ typedef unary_parser_category parser_category_t;
+// typedef node_parser<T, NodeParserT> const &embed_t;
+
+ node_parser(T const& a)
+ : unary<T, parser<node_parser<T, NodeParserT> > >(a) {}
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scanner) const
+ {
+ typename parser_result<self_t, ScannerT>::type hit = this->subject().parse(scanner);
+ if (hit)
+ {
+ impl::tree_policy_selector<typename ScannerT::match_policy_t>::type::apply_op_to_match(NodeParserT(), hit);
+ }
+ return hit;
+ }
+};
+
+//////////////////////////////////
+template <typename NodeParserT>
+struct node_parser_gen
+{
+ template <typename T>
+ struct result {
+
+ typedef node_parser<T, NodeParserT> type;
+ };
+
+ template <typename T>
+ static node_parser<T, NodeParserT>
+ generate(parser<T> const& s)
+ {
+ return node_parser<T, NodeParserT>(s.derived());
+ }
+
+ template <typename T>
+ node_parser<T, NodeParserT>
+ operator[](parser<T> const& s) const
+ {
+ return node_parser<T, NodeParserT>(s.derived());
+ }
+};
+
+struct discard_node_op
+{
+ template <typename MatchT>
+ void operator()(MatchT& m) const
+ {
+ m.trees.clear();
+ }
+};
+
+const node_parser_gen<discard_node_op> discard_node_d =
+ node_parser_gen<discard_node_op>();
+
+struct leaf_node_op
+{
+ template <typename MatchT>
+ void operator()(MatchT& m) const
+ {
+ if (m.trees.size() == 1)
+ {
+ m.trees.begin()->children.clear();
+ }
+ else if (m.trees.size() > 1)
+ {
+ typedef typename MatchT::node_factory_t node_factory_t;
+ m = MatchT(m.length(), node_factory_t::group_nodes(m.trees));
+ }
+ }
+};
+
+const node_parser_gen<leaf_node_op> leaf_node_d =
+ node_parser_gen<leaf_node_op>();
+const node_parser_gen<leaf_node_op> token_node_d =
+ node_parser_gen<leaf_node_op>();
+
+struct infix_node_op
+{
+ template <typename MatchT>
+ void operator()(MatchT& m) const
+ {
+ typedef typename MatchT::container_t container_t;
+ typedef typename MatchT::container_t::iterator iter_t;
+ typedef typename MatchT::container_t::value_type value_t;
+
+ using std::swap;
+ using boost::swap;
+ using boost::spirit::swap;
+
+ // copying the tree nodes is expensive, since it may copy a whole
+ // tree. swapping them is cheap, so swap the nodes we want into
+ // a new container of children.
+ container_t new_children;
+ std::size_t length = 0;
+ std::size_t tree_size = m.trees.size();
+
+ // the infix_node_d[] make no sense for nodes with no subnodes
+ BOOST_SPIRIT_ASSERT(tree_size >= 1);
+
+ bool keep = true;
+#if !defined(BOOST_SPIRIT_USE_LIST_FOR_TREES)
+ new_children.reserve((tree_size+1)/2);
+#endif
+ iter_t i_end = m.trees.end();
+ for (iter_t i = m.trees.begin(); i != i_end; ++i)
+ {
+ if (keep) {
+ // adjust the length
+ length += std::distance((*i).value.begin(), (*i).value.end());
+
+ // move the child node
+ new_children.push_back(value_t());
+ swap(new_children.back(), *i);
+ keep = false;
+ }
+ else {
+ // ignore this child node
+ keep = true;
+ }
+ }
+
+ m = MatchT(length, new_children);
+ }
+};
+
+const node_parser_gen<infix_node_op> infix_node_d =
+ node_parser_gen<infix_node_op>();
+
+struct discard_first_node_op
+{
+ template <typename MatchT>
+ void operator()(MatchT& m) const
+ {
+ typedef typename MatchT::container_t container_t;
+ typedef typename MatchT::container_t::iterator iter_t;
+ typedef typename MatchT::container_t::value_type value_t;
+
+ using std::swap;
+ using boost::swap;
+ using boost::spirit::swap;
+
+ // copying the tree nodes is expensive, since it may copy a whole
+ // tree. swapping them is cheap, so swap the nodes we want into
+ // a new container of children, instead of saying
+ // m.trees.erase(m.trees.begin()) because, on a container_t that will
+ // cause all the nodes afterwards to be copied into the previous
+ // position.
+ container_t new_children;
+ std::size_t length = 0;
+ std::size_t tree_size = m.trees.size();
+
+ // the discard_first_node_d[] make no sense for nodes with no subnodes
+ BOOST_SPIRIT_ASSERT(tree_size >= 1);
+
+ if (tree_size > 1) {
+#if !defined(BOOST_SPIRIT_USE_LIST_FOR_TREES)
+ new_children.reserve(tree_size - 1);
+#endif
+ iter_t i = m.trees.begin(), i_end = m.trees.end();
+ for (++i; i != i_end; ++i)
+ {
+ // adjust the length
+ length += std::distance((*i).value.begin(), (*i).value.end());
+
+ // move the child node
+ new_children.push_back(value_t());
+ swap(new_children.back(), *i);
+ }
+ }
+ else {
+ // if there was a tree and now there isn't any, insert an empty node
+ iter_t i = m.trees.begin();
+
+ // This isn't entirely correct, since the empty node will reference
+ // the end of the discarded node, but I currently don't see any way to
+ // get at the begin of the node following this subnode.
+ // This should be safe anyway because the it shouldn't get dereferenced
+ // under any circumstances.
+ typedef typename value_t::parse_node_t::iterator_t iterator_type;
+ iterator_type it = (*i).value.end();
+
+ new_children.push_back(
+ value_t(typename value_t::parse_node_t(it, it)));
+ }
+
+ m = MatchT(length, new_children);
+ }
+};
+
+const node_parser_gen<discard_first_node_op> discard_first_node_d =
+ node_parser_gen<discard_first_node_op>();
+
+struct discard_last_node_op
+{
+ template <typename MatchT>
+ void operator()(MatchT& m) const
+ {
+ typedef typename MatchT::container_t container_t;
+ typedef typename MatchT::container_t::iterator iter_t;
+ typedef typename MatchT::container_t::value_type value_t;
+
+ using std::swap;
+ using boost::swap;
+ using boost::spirit::swap;
+
+ // copying the tree nodes is expensive, since it may copy a whole
+ // tree. swapping them is cheap, so swap the nodes we want into
+ // a new container of children, instead of saying
+ // m.trees.erase(m.trees.begin()) because, on a container_t that will
+ // cause all the nodes afterwards to be copied into the previous
+ // position.
+ container_t new_children;
+ std::size_t length = 0;
+ std::size_t tree_size = m.trees.size();
+
+ // the discard_last_node_d[] make no sense for nodes with no subnodes
+ BOOST_SPIRIT_ASSERT(tree_size >= 1);
+
+ if (tree_size > 1) {
+ m.trees.pop_back();
+#if !defined(BOOST_SPIRIT_USE_LIST_FOR_TREES)
+ new_children.reserve(tree_size - 1);
+#endif
+ iter_t i_end = m.trees.end();
+ for (iter_t i = m.trees.begin(); i != i_end; ++i)
+ {
+ // adjust the length
+ length += std::distance((*i).value.begin(), (*i).value.end());
+
+ // move the child node
+ new_children.push_back(value_t());
+ swap(new_children.back(), *i);
+ }
+ }
+ else {
+ // if there was a tree and now there isn't any, insert an empty node
+ iter_t i = m.trees.begin();
+
+ typedef typename value_t::parse_node_t::iterator_t iterator_type;
+ iterator_type it = (*i).value.begin();
+
+ new_children.push_back(
+ value_t(typename value_t::parse_node_t(it, it)));
+ }
+
+ m = MatchT(length, new_children);
+ }
+};
+
+const node_parser_gen<discard_last_node_op> discard_last_node_d =
+ node_parser_gen<discard_last_node_op>();
+
+struct inner_node_op
+{
+ template <typename MatchT>
+ void operator()(MatchT& m) const
+ {
+ typedef typename MatchT::container_t container_t;
+ typedef typename MatchT::container_t::iterator iter_t;
+ typedef typename MatchT::container_t::value_type value_t;
+
+ using std::swap;
+ using boost::swap;
+ using boost::spirit::swap;
+
+ // copying the tree nodes is expensive, since it may copy a whole
+ // tree. swapping them is cheap, so swap the nodes we want into
+ // a new container of children, instead of saying
+ // m.trees.erase(m.trees.begin()) because, on a container_t that will
+ // cause all the nodes afterwards to be copied into the previous
+ // position.
+ container_t new_children;
+ std::size_t length = 0;
+ std::size_t tree_size = m.trees.size();
+
+ // the inner_node_d[] make no sense for nodes with less then 2 subnodes
+ BOOST_SPIRIT_ASSERT(tree_size >= 2);
+
+ if (tree_size > 2) {
+ m.trees.pop_back(); // erase the last element
+#if !defined(BOOST_SPIRIT_USE_LIST_FOR_TREES)
+ new_children.reserve(tree_size - 1);
+#endif
+ iter_t i = m.trees.begin(); // skip over the first element
+ iter_t i_end = m.trees.end();
+ for (++i; i != i_end; ++i)
+ {
+ // adjust the length
+ length += std::distance((*i).value.begin(), (*i).value.end());
+
+ // move the child node
+ new_children.push_back(value_t());
+ swap(new_children.back(), *i);
+ }
+ }
+ else {
+ // if there was a tree and now there isn't any, insert an empty node
+ iter_t i = m.trees.begin(); // skip over the first element
+
+ typedef typename value_t::parse_node_t::iterator_t iterator_type;
+ iterator_type it = (*++i).value.begin();
+
+ new_children.push_back(
+ value_t(typename value_t::parse_node_t(it, it)));
+ }
+
+ m = MatchT(length, new_children);
+ }
+};
+
+const node_parser_gen<inner_node_op> inner_node_d =
+ node_parser_gen<inner_node_op>();
+
+
+//////////////////////////////////
+// action_directive_parser and action_directive_parser_gen
+// are meant to be used as a template to create directives that
+// generate action classes. For example access_match and
+// access_node. The ActionParserT template parameter must be
+// a class that has an innter class called action that is templated
+// on the parser type and the action type.
+template <typename ActionParserT>
+struct action_directive_parser_gen;
+
+template <typename T, typename ActionParserT>
+struct action_directive_parser
+: public unary<T, parser<action_directive_parser<T, ActionParserT> > >
+{
+ typedef action_directive_parser<T, ActionParserT> self_t;
+ typedef action_directive_parser_gen<ActionParserT> parser_generator_t;
+ typedef unary_parser_category parser_category_t;
+// typedef action_directive_parser<T, ActionParserT> const &embed_t;
+
+ action_directive_parser(T const& a)
+ : unary<T, parser<action_directive_parser<T, ActionParserT> > >(a) {}
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scanner) const
+ {
+ return this->subject().parse(scanner);
+ }
+
+ template <typename ActionT>
+ typename ActionParserT::template action<action_directive_parser<T, ActionParserT>, ActionT>
+ operator[](ActionT const& actor) const
+ {
+ typedef typename
+ ActionParserT::template action<action_directive_parser, ActionT>
+ action_t;
+ return action_t(*this, actor);
+ }
+};
+
+//////////////////////////////////
+template <typename ActionParserT>
+struct action_directive_parser_gen
+{
+ template <typename T>
+ struct result {
+
+ typedef action_directive_parser<T, ActionParserT> type;
+ };
+
+ template <typename T>
+ static action_directive_parser<T, ActionParserT>
+ generate(parser<T> const& s)
+ {
+ return action_directive_parser<T, ActionParserT>(s.derived());
+ }
+
+ template <typename T>
+ action_directive_parser<T, ActionParserT>
+ operator[](parser<T> const& s) const
+ {
+ return action_directive_parser<T, ActionParserT>(s.derived());
+ }
+};
+
+//////////////////////////////////
+// Calls the attached action passing it the match from the parser
+// and the first and last iterators.
+// The inner template class is used to simulate template-template parameters
+// (declared in common_fwd.hpp).
+template <typename ParserT, typename ActionT>
+struct access_match_action::action
+: public unary<ParserT, parser<access_match_action::action<ParserT, ActionT> > >
+{
+ typedef action_parser_category parser_category;
+ typedef action<ParserT, ActionT> self_t;
+
+ action( ParserT const& subject,
+ ActionT const& actor_);
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scanner) const;
+
+ ActionT const &predicate() const;
+
+ private:
+ ActionT actor;
+};
+
+//////////////////////////////////
+template <typename ParserT, typename ActionT>
+access_match_action::action<ParserT, ActionT>::action(
+ ParserT const& subject,
+ ActionT const& actor_)
+: unary<ParserT, parser<access_match_action::action<ParserT, ActionT> > >(subject)
+, actor(actor_)
+{}
+
+//////////////////////////////////
+template <typename ParserT, typename ActionT>
+template <typename ScannerT>
+typename parser_result<access_match_action::action<ParserT, ActionT>, ScannerT>::type
+access_match_action::action<ParserT, ActionT>::
+parse(ScannerT const& scan) const
+{
+ typedef typename ScannerT::iterator_t iterator_t;
+ typedef typename parser_result<self_t, ScannerT>::type result_t;
+ if (!scan.at_end())
+ {
+ iterator_t save = scan.first;
+ result_t hit = this->subject().parse(scan);
+ actor(hit, save, scan.first);
+ return hit;
+ }
+ return scan.no_match();
+}
+
+//////////////////////////////////
+template <typename ParserT, typename ActionT>
+ActionT const &access_match_action::action<ParserT, ActionT>::predicate() const
+{
+ return actor;
+}
+
+//////////////////////////////////
+const action_directive_parser_gen<access_match_action> access_match_d
+ = action_directive_parser_gen<access_match_action>();
+
+
+
+//////////////////////////////////
+// Calls the attached action passing it the node from the parser
+// and the first and last iterators
+// The inner template class is used to simulate template-template parameters
+// (declared in common_fwd.hpp).
+template <typename ParserT, typename ActionT>
+struct access_node_action::action
+: public unary<ParserT, parser<access_node_action::action<ParserT, ActionT> > >
+{
+ typedef action_parser_category parser_category;
+ typedef action<ParserT, ActionT> self_t;
+
+ action( ParserT const& subject,
+ ActionT const& actor_);
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scanner) const;
+
+ ActionT const &predicate() const;
+
+ private:
+ ActionT actor;
+};
+
+//////////////////////////////////
+template <typename ParserT, typename ActionT>
+access_node_action::action<ParserT, ActionT>::action(
+ ParserT const& subject,
+ ActionT const& actor_)
+: unary<ParserT, parser<access_node_action::action<ParserT, ActionT> > >(subject)
+, actor(actor_)
+{}
+
+//////////////////////////////////
+template <typename ParserT, typename ActionT>
+template <typename ScannerT>
+typename parser_result<access_node_action::action<ParserT, ActionT>, ScannerT>::type
+access_node_action::action<ParserT, ActionT>::
+parse(ScannerT const& scan) const
+{
+ typedef typename ScannerT::iterator_t iterator_t;
+ typedef typename parser_result<self_t, ScannerT>::type result_t;
+ if (!scan.at_end())
+ {
+ iterator_t save = scan.first;
+ result_t hit = this->subject().parse(scan);
+ if (hit && hit.trees.size() > 0)
+ actor(*hit.trees.begin(), save, scan.first);
+ return hit;
+ }
+ return scan.no_match();
+}
+
+//////////////////////////////////
+template <typename ParserT, typename ActionT>
+ActionT const &access_node_action::action<ParserT, ActionT>::predicate() const
+{
+ return actor;
+}
+
+//////////////////////////////////
+const action_directive_parser_gen<access_node_action> access_node_d
+ = action_directive_parser_gen<access_node_action>();
+
+
+
+//////////////////////////////////
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// tree_parse_info
+//
+// Results returned by the tree parse functions:
+//
+// stop: points to the final parse position (i.e parsing
+// processed the input up to this point).
+//
+// match: true if parsing is successful. This may be full:
+// the parser consumed all the input, or partial:
+// the parser consumed only a portion of the input.
+//
+// full: true when we have a full match (i.e the parser
+// consumed all the input.
+//
+// length: The number of characters consumed by the parser.
+// This is valid only if we have a successful match
+// (either partial or full). A negative value means
+// that the match is unsucessful.
+//
+// trees: Contains the root node(s) of the tree.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+ typename IteratorT,
+ typename NodeFactoryT,
+ typename T
+>
+struct tree_parse_info
+{
+ IteratorT stop;
+ bool match;
+ bool full;
+ std::size_t length;
+ typename tree_match<IteratorT, NodeFactoryT, T>::container_t trees;
+
+ tree_parse_info()
+ : stop()
+ , match(false)
+ , full(false)
+ , length(0)
+ , trees()
+ {}
+
+ template <typename IteratorT2>
+ tree_parse_info(tree_parse_info<IteratorT2> const& pi)
+ : stop(pi.stop)
+ , match(pi.match)
+ , full(pi.full)
+ , length(pi.length)
+ , trees()
+ {
+ using std::swap;
+ using boost::swap;
+ using boost::spirit::swap;
+
+ // use auto_ptr like ownership for the trees data member
+ swap(trees, pi.trees);
+ }
+
+ tree_parse_info(
+ IteratorT stop_,
+ bool match_,
+ bool full_,
+ std::size_t length_,
+ typename tree_match<IteratorT, NodeFactoryT, T>::container_t trees_)
+ : stop(stop_)
+ , match(match_)
+ , full(full_)
+ , length(length_)
+ , trees()
+ {
+ using std::swap;
+ using boost::swap;
+ using boost::spirit::swap;
+
+ // use auto_ptr like ownership for the trees data member
+ swap(trees, trees_);
+ }
+};
+
+}} // namespace boost::spirit
+
+#endif
+
diff --git a/boost/boost/spirit/tree/common_fwd.hpp b/boost/boost/spirit/tree/common_fwd.hpp
new file mode 100644
index 00000000000..fc0dc32b53d
--- /dev/null
+++ b/boost/boost/spirit/tree/common_fwd.hpp
@@ -0,0 +1,88 @@
+/*=============================================================================
+ Copyright (c) 2006 Tobias Schwinger
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_TREE_COMMON_FWD_HPP)
+#define BOOST_SPIRIT_TREE_COMMON_FWD_HPP
+
+#include <boost/spirit/core/nil.hpp>
+
+namespace boost { namespace spirit {
+
+ template <typename T>
+ struct tree_node;
+
+ template <typename IteratorT = char const*, typename ValueT = nil_t>
+ struct node_iter_data;
+
+ template <typename ValueT = nil_t>
+ class node_iter_data_factory;
+
+ template <typename ValueT = nil_t>
+ class node_val_data_factory;
+
+ template <typename ValueT = nil_t>
+ class node_all_val_data_factory;
+
+ template <
+ typename IteratorT,
+ typename NodeFactoryT = node_val_data_factory<nil_t>,
+ typename T = nil_t
+ >
+ class tree_match;
+
+ struct tree_policy;
+
+ template <
+ typename MatchPolicyT,
+ typename IteratorT,
+ typename NodeFactoryT,
+ typename TreePolicyT
+ >
+ struct common_tree_match_policy;
+
+ template <typename MatchPolicyT, typename NodeFactoryT>
+ struct common_tree_tree_policy;
+
+ template <typename T>
+ struct no_tree_gen_node_parser;
+
+ template <typename T, typename NodeParserT>
+ struct node_parser;
+
+ struct discard_node_op;
+ struct leaf_node_op;
+ struct infix_node_op;
+ struct discard_first_node_op;
+ struct discard_last_node_op;
+ struct inner_node_op;
+
+ template <typename T, typename ActionParserT>
+ struct action_directive_parser;
+
+ struct access_match_action
+ {
+ template <typename ParserT, typename ActionT>
+ struct action;
+ };
+
+ struct access_node_action
+ {
+ template <typename ParserT, typename ActionT>
+ struct action;
+ };
+
+ template <
+ typename IteratorT = char const *,
+ typename NodeFactoryT = node_val_data_factory<nil_t>,
+ typename T = nil_t
+ >
+ struct tree_parse_info;
+
+}} // namespace boost::spirit
+
+#endif
diff --git a/boost/boost/spirit/tree/impl/parse_tree_utils.ipp b/boost/boost/spirit/tree/impl/parse_tree_utils.ipp
new file mode 100644
index 00000000000..0d988eea129
--- /dev/null
+++ b/boost/boost/spirit/tree/impl/parse_tree_utils.ipp
@@ -0,0 +1,131 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Daniel Nuffer
+ Copyright (c) 2001-2003 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+
+#if !defined(PARSE_TREE_UTILS_IPP)
+#define PARSE_TREE_UTILS_IPP
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace spirit {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Returnes the first leaf node of the given parsetree.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename T>
+inline tree_node<T> const &
+get_first_leaf (tree_node<T> const &node)
+{
+ if (node.children.size() > 0)
+ return get_first_leaf(*node.children.begin());
+ return node;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Find a specified node through recursive search.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename T>
+inline bool
+find_node (tree_node<T> const &node, parser_id node_to_search,
+ tree_node<T> const **found_node)
+{
+ if (node.value.id() == node_to_search) {
+ *found_node = &node;
+ return true;
+ }
+ if (node.children.size() > 0) {
+ typedef typename tree_node<T>::const_tree_iterator const_tree_iterator;
+
+ const_tree_iterator end = node.children.end();
+ for (const_tree_iterator it = node.children.begin(); it != end; ++it)
+ {
+ if (find_node (*it, node_to_search, found_node))
+ return true;
+ }
+ }
+ return false; // not found here
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// The functions 'get_node_range' return a pair of iterators pointing at the
+// range, which containes the elements of a specified node.
+//
+///////////////////////////////////////////////////////////////////////////////
+namespace impl {
+
+template <typename T>
+inline bool
+get_node_range (typename tree_node<T>::const_tree_iterator const &start,
+ parser_id node_to_search,
+ std::pair<typename tree_node<T>::const_tree_iterator,
+ typename tree_node<T>::const_tree_iterator> &nodes)
+{
+// look at this node first
+tree_node<T> const &node = *start;
+
+ if (node.value.id() == node_to_search) {
+ if (node.children.size() > 0) {
+ // full subrange
+ nodes.first = node.children.begin();
+ nodes.second = node.children.end();
+ }
+ else {
+ // only this node
+ nodes.first = start;
+ nodes.second = start;
+ std::advance(nodes.second, 1);
+ }
+ return true;
+ }
+
+// look at subnodes now
+ if (node.children.size() > 0) {
+ typedef typename tree_node<T>::const_tree_iterator const_tree_iterator;
+
+ const_tree_iterator end = node.children.end();
+ for (const_tree_iterator it = node.children.begin(); it != end; ++it)
+ {
+ if (impl::get_node_range<T>(it, node_to_search, nodes))
+ return true;
+ }
+ }
+ return false;
+}
+
+} // end of namespace impl
+
+template <typename T>
+inline bool
+get_node_range (tree_node<T> const &node, parser_id node_to_search,
+ std::pair<typename tree_node<T>::const_tree_iterator,
+ typename tree_node<T>::const_tree_iterator> &nodes)
+{
+ if (node.children.size() > 0) {
+ typedef typename tree_node<T>::const_tree_iterator const_tree_iterator;
+
+ const_tree_iterator end = node.children.end();
+ for (const_tree_iterator it = node.children.begin(); it != end; ++it)
+ {
+ if (impl::get_node_range<T>(it, node_to_search, nodes))
+ return true;
+ }
+ }
+ return false;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace spirit
+} // namespace boost
+
+#endif // !defined(PARSE_TREE_UTILS_IPP)
diff --git a/boost/boost/spirit/tree/impl/tree_to_xml.ipp b/boost/boost/spirit/tree/impl/tree_to_xml.ipp
new file mode 100644
index 00000000000..2891debf943
--- /dev/null
+++ b/boost/boost/spirit/tree/impl/tree_to_xml.ipp
@@ -0,0 +1,514 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Hartmut Kaiser
+ Copyright (c) 2001-2003 Daniel Nuffer
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+
+#if !defined(TREE_TO_XML_IPP)
+#define TREE_TO_XML_IPP
+
+#include <cstdio>
+#include <cstdarg>
+#include <locale>
+
+#include <map>
+#include <iostream>
+#include <boost/config.hpp>
+#ifdef BOOST_NO_STRINGSTREAM
+#include <strstream>
+#define BOOST_SPIRIT_OSSTREAM std::ostrstream
+inline
+std::string BOOST_SPIRIT_GETSTRING(std::ostrstream& ss)
+{
+ ss << ends;
+ std::string rval = ss.str();
+ ss.freeze(false);
+ return rval;
+}
+#else
+#include <sstream>
+#define BOOST_SPIRIT_GETSTRING(ss) ss.str()
+#define BOOST_SPIRIT_OSSTREAM std::basic_ostringstream<CharT>
+#endif
+
+namespace boost { namespace spirit {
+
+namespace impl {
+
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename CharT>
+ struct string_lit;
+
+ template <>
+ struct string_lit<char>
+ {
+ static char get(char c) { return c; }
+ static char const* get(char const* str = "") { return str; }
+ };
+
+ template <>
+ struct string_lit<wchar_t>
+ {
+ static wchar_t const *to_wchar_t(char const* source)
+ {
+ typedef std::ctype<wchar_t> ctype_t;
+ static wchar_t result[64];
+
+ using namespace std; // some systems have size_t in ns std
+ size_t len = strlen(source);
+ BOOST_ASSERT(len < sizeof(result)/sizeof(result[0]));
+
+ std::use_facet<ctype_t>(std::locale())
+ .widen(source, source + len, result);
+
+ return result;
+ }
+
+ static wchar_t get(char c)
+ {
+ typedef std::ctype<wchar_t> ctype_t;
+ return std::use_facet<ctype_t>(std::locale()).widen(c);
+ }
+ static wchar_t const* get(char const* str = "")
+ {
+ return to_wchar_t(str);
+ }
+ };
+}
+
+// xml formatting helper classes
+namespace xml {
+
+ template <typename CharT>
+ inline void
+ encode (std::basic_string<CharT> &str, char s, char const *r, int len)
+ {
+ typedef typename std::basic_string<CharT>::size_type size_type;
+
+ size_type pos = 0;
+ while ((pos = str.find_first_of (impl::string_lit<CharT>::get(s), pos)) !=
+ size_type(std::basic_string<CharT>::npos))
+ {
+ str.replace (pos, 1, impl::string_lit<CharT>::get(r));
+ pos += len;
+ }
+ }
+
+ template <typename CharT>
+ inline std::basic_string<CharT>
+ encode (std::basic_string<CharT> str)
+ {
+ encode(str, '&', "&amp;", 3);
+ encode(str, '<', "&lt;", 2);
+ encode(str, '>', "&gt;", 2);
+ encode(str, '\r', "\\r", 1);
+ encode(str, '\n', "\\n", 1);
+ return str;
+ }
+
+ template <typename CharT>
+ inline std::basic_string<CharT>
+ encode (CharT const *text)
+ {
+ return encode (std::basic_string<CharT>(text));
+ }
+
+ // format a xml attribute
+ template <typename CharT>
+ struct attribute
+ {
+ attribute()
+ {
+ }
+
+ attribute (CharT const *key_, CharT const *value_) :
+ key (key_), value(value_)
+ {
+ }
+
+ bool has_value()
+ {
+ return value.size() > 0;
+ }
+
+ std::basic_string<CharT> key;
+ std::basic_string<CharT> value;
+ };
+
+ template <typename CharT>
+ inline std::basic_ostream<CharT>&
+ operator<< (std::basic_ostream<CharT> &ostrm, attribute<CharT> const &attr)
+ {
+ if (0 == attr.key.size())
+ return ostrm;
+ ostrm << impl::string_lit<CharT>::get(" ") << encode(attr.key)
+ << impl::string_lit<CharT>::get("=\"") << encode(attr.value)
+ << impl::string_lit<CharT>::get("\"");
+ return ostrm;
+ }
+
+ // output a xml element (base class, not used directly)
+ template <typename CharT>
+ class element
+ {
+ protected:
+ element(std::basic_ostream<CharT> &ostrm_, bool incr_indent_ = true)
+ : ostrm(ostrm_), incr_indent(incr_indent_)
+ {
+ if (incr_indent) ++get_indent();
+ }
+ ~element()
+ {
+ if (incr_indent) --get_indent();
+ }
+
+ public:
+ void output_space ()
+ {
+ for (int i = 0; i < get_indent(); i++)
+ ostrm << impl::string_lit<CharT>::get(" ");
+ }
+
+ protected:
+ int &get_indent()
+ {
+ static int indent;
+
+ return indent;
+ }
+
+ std::basic_ostream<CharT> &ostrm;
+ bool incr_indent;
+ };
+
+ // a xml node
+ template <typename CharT>
+ class node : public element<CharT>
+ {
+ public:
+ node (std::basic_ostream<CharT> &ostrm_, CharT const *tag_,
+ attribute<CharT> &attr)
+ : element<CharT>(ostrm_), tag(tag_)
+ {
+ this->output_space();
+ this->ostrm
+ << impl::string_lit<CharT>::get("<") << tag_ << attr
+ << impl::string_lit<CharT>::get(">\n");
+ }
+ node (std::basic_ostream<CharT> &ostrm_, CharT const *tag_)
+ : element<CharT>(ostrm_), tag(tag_)
+ {
+ this->output_space();
+ this->ostrm
+ << impl::string_lit<CharT>::get("<") << tag_
+ << impl::string_lit<CharT>::get(">\n");
+ }
+ ~node()
+ {
+ this->output_space();
+ this->ostrm
+ << impl::string_lit<CharT>::get("</") << tag
+ << impl::string_lit<CharT>::get(">\n");
+ }
+
+ private:
+ std::basic_string<CharT> tag;
+ };
+
+ template <typename CharT>
+ class text : public element<CharT>
+ {
+ public:
+ text (std::basic_ostream<CharT> &ostrm_, CharT const *tag,
+ CharT const *textlit)
+ : element<CharT>(ostrm_)
+ {
+ this->output_space();
+ this->ostrm
+ << impl::string_lit<CharT>::get("<") << tag
+ << impl::string_lit<CharT>::get(">") << encode(textlit)
+ << impl::string_lit<CharT>::get("</") << tag
+ << impl::string_lit<CharT>::get(">\n");
+ }
+
+ text (std::basic_ostream<CharT> &ostrm_, CharT const *tag,
+ CharT const *textlit, attribute<CharT> &attr)
+ : element<CharT>(ostrm_)
+ {
+ this->output_space();
+ this->ostrm
+ << impl::string_lit<CharT>::get("<") << tag << attr
+ << impl::string_lit<CharT>::get(">") << encode(textlit)
+ << impl::string_lit<CharT>::get("</") << tag
+ << impl::string_lit<CharT>::get(">\n");
+ }
+
+ text (std::basic_ostream<CharT> &ostrm_, CharT const *tag,
+ CharT const *textlit, attribute<CharT> &attr1,
+ attribute<CharT> &attr2)
+ : element<CharT>(ostrm_)
+ {
+ this->output_space();
+ this->ostrm
+ << impl::string_lit<CharT>::get("<") << tag << attr1 << attr2
+ << impl::string_lit<CharT>::get(">") << encode(textlit)
+ << impl::string_lit<CharT>::get("</") << tag
+ << impl::string_lit<CharT>::get(">\n");
+ }
+ };
+
+ // a xml comment
+ template <typename CharT>
+ class comment : public element<CharT>
+ {
+ public:
+ comment (std::basic_ostream<CharT> &ostrm_, CharT const *commentlit)
+ : element<CharT>(ostrm_, false)
+ {
+ if ('\0' != commentlit[0])
+ {
+ this->output_space();
+ this->ostrm << impl::string_lit<CharT>::get("<!-- ")
+ << encode(commentlit)
+ << impl::string_lit<CharT>::get(" -->\n");
+ }
+ }
+ };
+
+ // a xml document
+ template <typename CharT>
+ class document : public element<CharT>
+ {
+ public:
+ document (std::basic_ostream<CharT> &ostrm_)
+ : element<CharT>(ostrm_)
+ {
+ this->get_indent() = -1;
+ this->ostrm << impl::string_lit<CharT>::get(
+ "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n");
+ }
+
+ document (std::basic_ostream<CharT> &ostrm_, CharT const *mainnode,
+ CharT const *dtd)
+ : element<CharT>(ostrm_)
+ {
+ this->get_indent() = -1;
+ this->ostrm << impl::string_lit<CharT>::get(
+ "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n");
+
+ this->output_space();
+ this->ostrm << impl::string_lit<CharT>::get("<!DOCTYPE ") << mainnode
+ << impl::string_lit<CharT>::get(" SYSTEM \"") << dtd
+ << impl::string_lit<CharT>::get("\">\n");
+ }
+ ~document()
+ {
+ BOOST_SPIRIT_ASSERT(-1 == this->get_indent());
+ }
+ };
+
+} // end of namespace xml
+
+namespace impl {
+
+ ///////////////////////////////////////////////////////////////////////////
+ // look up the rule name from the given parser_id
+ template <typename AssocContainerT>
+ inline typename AssocContainerT::value_type::second_type
+ get_rulename (AssocContainerT const &id_to_name_map,
+ boost::spirit::parser_id const &id)
+ {
+ typename AssocContainerT::const_iterator it = id_to_name_map.find(id);
+ if (it != id_to_name_map.end())
+ return (*it).second;
+ typedef typename AssocContainerT::value_type::second_type second_t;
+ return second_t();
+ }
+
+ // dump a parse tree as xml
+ template <
+ typename CharT, typename IteratorT, typename GetIdT, typename GetValueT
+ >
+ inline void
+ token_to_xml (std::basic_ostream<CharT> &ostrm, IteratorT const &it,
+ bool is_root, GetIdT const &get_token_id, GetValueT const &get_token_value)
+ {
+ BOOST_SPIRIT_OSSTREAM stream;
+
+ stream << get_token_id(*it) << std::ends;
+ xml::attribute<CharT> token_id (
+ impl::string_lit<CharT>::get("id"),
+ BOOST_SPIRIT_GETSTRING(stream).c_str());
+ xml::attribute<CharT> is_root_attr (
+ impl::string_lit<CharT>::get("is_root"),
+ impl::string_lit<CharT>::get(is_root ? "1" : ""));
+ xml::attribute<CharT> nil;
+ xml::text<CharT>(ostrm,
+ impl::string_lit<CharT>::get("token"),
+ get_token_value(*it).c_str(),
+ token_id,
+ is_root_attr.has_value() ? is_root_attr : nil);
+ }
+
+ template <
+ typename CharT, typename TreeNodeT, typename AssocContainerT,
+ typename GetIdT, typename GetValueT
+ >
+ inline void
+ tree_node_to_xml (std::basic_ostream<CharT> &ostrm, TreeNodeT const &node,
+ AssocContainerT const& id_to_name_map, GetIdT const &get_token_id,
+ GetValueT const &get_token_value)
+ {
+ typedef typename TreeNodeT::const_iterator node_iter_t;
+ typedef
+ typename TreeNodeT::value_type::parse_node_t::const_iterator_t
+ value_iter_t;
+
+ xml::attribute<CharT> nil;
+ node_iter_t end = node.end();
+ for (node_iter_t it = node.begin(); it != end; ++it)
+ {
+ // output a node
+ xml::attribute<CharT> id (
+ impl::string_lit<CharT>::get("rule"),
+ get_rulename(id_to_name_map, (*it).value.id()).c_str());
+ xml::node<CharT> currnode (ostrm,
+ impl::string_lit<CharT>::get("parsenode"),
+ (*it).value.id() != 0 && id.has_value() ? id : nil);
+
+ // first dump the value
+ std::size_t cnt = std::distance((*it).value.begin(), (*it).value.end());
+
+ if (1 == cnt)
+ {
+ token_to_xml (ostrm, (*it).value.begin(),
+ (*it).value.is_root(), get_token_id, get_token_value);
+ }
+ else if (cnt > 1)
+ {
+ xml::node<CharT> value (ostrm,
+ impl::string_lit<CharT>::get("value"));
+ bool is_root = (*it).value.is_root();
+
+ value_iter_t val_end = (*it).value.end();
+ for (value_iter_t val_it = (*it).value.begin();
+ val_it != val_end; ++val_it)
+ {
+ token_to_xml (ostrm, val_it, is_root, get_token_id,
+ get_token_value);
+ }
+ }
+ tree_node_to_xml(ostrm, (*it).children, id_to_name_map,
+ get_token_id, get_token_value); // dump all subnodes
+ }
+ }
+
+ template <typename CharT, typename TreeNodeT, typename AssocContainerT>
+ inline void
+ tree_node_to_xml (std::basic_ostream<CharT> &ostrm, TreeNodeT const &node,
+ AssocContainerT const& id_to_name_map)
+ {
+ typedef typename TreeNodeT::const_iterator node_iter_t;
+
+ xml::attribute<CharT> nil;
+ node_iter_t end = node.end();
+ for (node_iter_t it = node.begin(); it != end; ++it)
+ {
+ // output a node
+ xml::attribute<CharT> id (
+ impl::string_lit<CharT>::get("rule"),
+ get_rulename(id_to_name_map, (*it).value.id()).c_str());
+ xml::node<CharT> currnode (ostrm,
+ impl::string_lit<CharT>::get("parsenode"),
+ (*it).value.id() != parser_id() && id.has_value() ? id : nil);
+
+ // first dump the value
+ if ((*it).value.begin() != (*it).value.end())
+ {
+ std::basic_string<CharT> tokens ((*it).value.begin(), (*it).value.end());
+
+ if (tokens.size() > 0)
+ {
+ // output all subtokens as one string (for better readability)
+ xml::attribute<CharT> is_root (
+ impl::string_lit<CharT>::get("is_root"),
+ impl::string_lit<CharT>::get((*it).value.is_root() ? "1" : ""));
+ xml::text<CharT>(ostrm,
+ impl::string_lit<CharT>::get("value"), tokens.c_str(),
+ is_root.has_value() ? is_root : nil);
+ }
+
+ }
+ // dump all subnodes
+ tree_node_to_xml(ostrm, (*it).children, id_to_name_map);
+ }
+ }
+
+} // namespace impl
+
+///////////////////////////////////////////////////////////////////////////////
+// dump a parse tree as a xml stream (generic variant)
+template <
+ typename CharT, typename TreeNodeT, typename AssocContainerT,
+ typename GetIdT, typename GetValueT
+>
+inline void
+basic_tree_to_xml (std::basic_ostream<CharT> &ostrm, TreeNodeT const &tree,
+std::basic_string<CharT> const &input_line, AssocContainerT const& id_to_name,
+ GetIdT const &get_token_id, GetValueT const &get_token_value)
+{
+ // generate xml dump
+ xml::document<CharT> doc (ostrm,
+ impl::string_lit<CharT>::get("parsetree"),
+ impl::string_lit<CharT>::get("parsetree.dtd"));
+ xml::comment<CharT> input (ostrm, input_line.c_str());
+ xml::attribute<CharT> ver (
+ impl::string_lit<CharT>::get("version"),
+ impl::string_lit<CharT>::get("1.0"));
+ xml::node<CharT> mainnode (ostrm,
+ impl::string_lit<CharT>::get("parsetree"), ver);
+
+ impl::tree_node_to_xml (ostrm, tree, id_to_name, get_token_id,
+ get_token_value);
+}
+
+// dump a parse tree as a xml steam (for character based parsers)
+template <typename CharT, typename TreeNodeT, typename AssocContainerT>
+inline void
+basic_tree_to_xml (std::basic_ostream<CharT> &ostrm, TreeNodeT const &tree,
+ std::basic_string<CharT> const &input_line,
+ AssocContainerT const& id_to_name)
+{
+ // generate xml dump
+ xml::document<CharT> doc (ostrm,
+ impl::string_lit<CharT>::get("parsetree"),
+ impl::string_lit<CharT>::get("parsetree.dtd"));
+ xml::comment<CharT> input (ostrm, input_line.c_str());
+ xml::attribute<CharT> ver (
+ impl::string_lit<CharT>::get("version"),
+ impl::string_lit<CharT>::get("1.0"));
+ xml::node<CharT> mainnode (ostrm,
+ impl::string_lit<CharT>::get("parsetree"), ver);
+
+ impl::tree_node_to_xml(ostrm, tree, id_to_name);
+}
+
+template <typename CharT, typename TreeNodeT>
+inline void
+basic_tree_to_xml (std::basic_ostream<CharT> &ostrm, TreeNodeT const &tree,
+ std::basic_string<CharT> const &input_line)
+{
+ return basic_tree_to_xml<CharT>(ostrm, tree, input_line,
+ std::map<boost::spirit::parser_id, std::basic_string<CharT> >());
+}
+
+}} // namespace boost::spirit
+
+#undef BOOST_SPIRIT_OSSTREAM
+#undef BOOST_SPIRIT_GETSTRING
+
+#endif // !defined(PARSE_TREE_XML_HPP)
diff --git a/boost/boost/spirit/tree/parse_tree.hpp b/boost/boost/spirit/tree/parse_tree.hpp
new file mode 100644
index 00000000000..c2bcda679e1
--- /dev/null
+++ b/boost/boost/spirit/tree/parse_tree.hpp
@@ -0,0 +1,286 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Daniel Nuffer
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_TREE_PARSE_TREE_HPP
+#define BOOST_SPIRIT_TREE_PARSE_TREE_HPP
+
+#include <boost/spirit/tree/common.hpp>
+#include <boost/spirit/core/scanner/scanner.hpp>
+
+#include <boost/spirit/tree/parse_tree_fwd.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+
+//////////////////////////////////
+// pt_match_policy is simply an id so the correct specialization of tree_policy can be found.
+template <
+ typename IteratorT,
+ typename NodeFactoryT
+>
+struct pt_match_policy :
+ public common_tree_match_policy<
+ pt_match_policy<IteratorT, NodeFactoryT>,
+ IteratorT,
+ NodeFactoryT,
+ pt_tree_policy<
+ pt_match_policy<IteratorT, NodeFactoryT>,
+ NodeFactoryT
+ >
+ >
+{
+ typedef
+ common_tree_match_policy<
+ pt_match_policy<IteratorT, NodeFactoryT>,
+ IteratorT,
+ NodeFactoryT,
+ pt_tree_policy<
+ pt_match_policy<IteratorT, NodeFactoryT>,
+ NodeFactoryT
+ >
+ >
+ common_tree_match_policy_;
+
+ pt_match_policy()
+ {
+ }
+
+ template <typename PolicyT>
+ pt_match_policy(PolicyT const & policies)
+ : common_tree_match_policy_(policies)
+ {
+ }
+};
+
+//////////////////////////////////
+template <typename MatchPolicyT, typename NodeFactoryT>
+struct pt_tree_policy :
+ public common_tree_tree_policy<MatchPolicyT, NodeFactoryT>
+{
+ typedef
+ typename common_tree_tree_policy<MatchPolicyT, NodeFactoryT>::match_t
+ match_t;
+ typedef typename MatchPolicyT::iterator_t iterator_t;
+
+ static void concat(match_t& a, match_t const& b)
+ {
+ typedef typename match_t::attr_t attr_t;
+ BOOST_SPIRIT_ASSERT(a && b);
+
+ std::copy(b.trees.begin(), b.trees.end(),
+ std::back_insert_iterator<typename match_t::container_t>(a.trees));
+ }
+
+ template <typename MatchT, typename Iterator1T, typename Iterator2T>
+ static void group_match(MatchT& m, parser_id const& id,
+ Iterator1T const& first, Iterator2T const& last)
+ {
+ if (!m)
+ return;
+
+ typedef typename NodeFactoryT::template factory<iterator_t> factory_t;
+ typedef typename tree_match<iterator_t, NodeFactoryT>::container_t
+ container_t;
+ typedef typename container_t::iterator cont_iterator_t;
+
+ match_t newmatch(m.length(),
+ factory_t::create_node(first, last, false));
+
+ std::swap(newmatch.trees.begin()->children, m.trees);
+ // set this node and all it's unset children's rule_id
+ newmatch.trees.begin()->value.id(id);
+ for (cont_iterator_t i = newmatch.trees.begin()->children.begin();
+ i != newmatch.trees.begin()->children.end();
+ ++i)
+ {
+ if (i->value.id() == 0)
+ i->value.id(id);
+ }
+ m = newmatch;
+ }
+
+ template <typename FunctorT>
+ static void apply_op_to_match(FunctorT const& op, match_t& m)
+ {
+ op(m);
+ }
+};
+
+namespace impl {
+
+ template <typename IteratorT, typename NodeFactoryT>
+ struct tree_policy_selector<pt_match_policy<IteratorT, NodeFactoryT> >
+ {
+ typedef pt_tree_policy<
+ pt_match_policy<IteratorT, NodeFactoryT>, NodeFactoryT> type;
+ };
+
+} // namespace impl
+
+
+//////////////////////////////////
+struct gen_pt_node_parser_gen;
+
+template <typename T>
+struct gen_pt_node_parser
+: public unary<T, parser<gen_pt_node_parser<T> > >
+{
+ typedef gen_pt_node_parser<T> self_t;
+ typedef gen_pt_node_parser_gen parser_generator_t;
+ typedef unary_parser_category parser_category_t;
+// typedef gen_pt_node_parser<T> const &embed_t;
+
+ gen_pt_node_parser(T const& a)
+ : unary<T, parser<gen_pt_node_parser<T> > >(a) {}
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ typedef typename ScannerT::iteration_policy_t iteration_policy_t;
+ typedef typename ScannerT::match_policy_t::iterator_t iterator_t;
+ typedef typename ScannerT::match_policy_t::factory_t factory_t;
+ typedef pt_match_policy<iterator_t, factory_t> match_policy_t;
+ typedef typename ScannerT::action_policy_t action_policy_t;
+ typedef scanner_policies<
+ iteration_policy_t,
+ match_policy_t,
+ action_policy_t
+ > policies_t;
+
+ return this->subject().parse(scan.change_policies(policies_t(scan)));
+ }
+};
+
+//////////////////////////////////
+struct gen_pt_node_parser_gen
+{
+ template <typename T>
+ struct result {
+
+ typedef gen_pt_node_parser<T> type;
+ };
+
+ template <typename T>
+ static gen_pt_node_parser<T>
+ generate(parser<T> const& s)
+ {
+ return gen_pt_node_parser<T>(s.derived());
+ }
+
+ template <typename T>
+ gen_pt_node_parser<T>
+ operator[](parser<T> const& s) const
+ {
+ return gen_pt_node_parser<T>(s.derived());
+ }
+};
+
+//////////////////////////////////
+const gen_pt_node_parser_gen gen_pt_node_d = gen_pt_node_parser_gen();
+
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Parse functions for parse trees
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+ typename NodeFactoryT, typename IteratorT, typename ParserT,
+ typename SkipT
+>
+inline tree_parse_info<IteratorT, NodeFactoryT>
+pt_parse(
+ IteratorT const& first_,
+ IteratorT const& last,
+ parser<ParserT> const& p,
+ SkipT const& skip,
+ NodeFactoryT const& /*dummy_*/ = NodeFactoryT())
+{
+ typedef skip_parser_iteration_policy<SkipT> iter_policy_t;
+ typedef pt_match_policy<IteratorT, NodeFactoryT> pt_match_policy_t;
+ typedef
+ scanner_policies<iter_policy_t, pt_match_policy_t>
+ scanner_policies_t;
+ typedef scanner<IteratorT, scanner_policies_t> scanner_t;
+
+ iter_policy_t iter_policy(skip);
+ scanner_policies_t policies(iter_policy);
+ IteratorT first = first_;
+ scanner_t scan(first, last, policies);
+ tree_match<IteratorT, NodeFactoryT> hit = p.derived().parse(scan);
+ return tree_parse_info<IteratorT, NodeFactoryT>(
+ first, hit, hit && (first == last), hit.length(), hit.trees);
+}
+
+template <typename IteratorT, typename ParserT, typename SkipT>
+inline tree_parse_info<IteratorT>
+pt_parse(
+ IteratorT const& first,
+ IteratorT const& last,
+ parser<ParserT> const& p,
+ SkipT const& skip)
+{
+ typedef node_val_data_factory<nil_t> default_node_factory_t;
+ return pt_parse(first, last, p, skip, default_node_factory_t());
+}
+
+//////////////////////////////////
+template <typename IteratorT, typename ParserT>
+inline tree_parse_info<IteratorT>
+pt_parse(
+ IteratorT const& first_,
+ IteratorT const& last,
+ parser<ParserT> const& parser)
+{
+ typedef pt_match_policy<IteratorT> pt_match_policy_t;
+ IteratorT first = first_;
+ scanner<
+ IteratorT,
+ scanner_policies<iteration_policy, pt_match_policy_t>
+ > scan(first, last);
+ tree_match<IteratorT> hit = parser.derived().parse(scan);
+ return tree_parse_info<IteratorT>(
+ first, hit, hit && (first == last), hit.length(), hit.trees);
+}
+
+//////////////////////////////////
+template <typename CharT, typename ParserT, typename SkipT>
+inline tree_parse_info<CharT const*>
+pt_parse(
+ CharT const* str,
+ parser<ParserT> const& p,
+ SkipT const& skip)
+{
+ CharT const* last = str;
+ while (*last)
+ last++;
+ return pt_parse(str, last, p, skip);
+}
+
+//////////////////////////////////
+template <typename CharT, typename ParserT>
+inline tree_parse_info<CharT const*>
+pt_parse(
+ CharT const* str,
+ parser<ParserT> const& parser)
+{
+ CharT const* last = str;
+ while (*last)
+ {
+ last++;
+ }
+ return pt_parse(str, last, parser);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+}} // namespace boost::spirit
+
+#endif
+
diff --git a/boost/boost/spirit/tree/parse_tree_fwd.hpp b/boost/boost/spirit/tree/parse_tree_fwd.hpp
new file mode 100644
index 00000000000..1504883e04e
--- /dev/null
+++ b/boost/boost/spirit/tree/parse_tree_fwd.hpp
@@ -0,0 +1,29 @@
+/*=============================================================================
+ Copyright (c) 2006 Tobias Schwinger
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_TREE_PARSE_TREE_FWD_HPP)
+#define BOOST_SPIRIT_TREE_PARSE_TREE_FWD_HPP
+
+namespace boost { namespace spirit {
+
+ template <typename MatchPolicyT, typename NodeFactoryT>
+ struct pt_tree_policy;
+
+ template <
+ typename IteratorT,
+ typename NodeFactoryT = node_val_data_factory<nil_t>
+ >
+ struct pt_match_policy;
+
+ template <typename T>
+ struct gen_pt_node_parser;
+
+}} // namespace boost::spirit
+
+#endif
+
diff --git a/boost/boost/spirit/tree/parse_tree_utils.hpp b/boost/boost/spirit/tree/parse_tree_utils.hpp
new file mode 100644
index 00000000000..36cff3d5983
--- /dev/null
+++ b/boost/boost/spirit/tree/parse_tree_utils.hpp
@@ -0,0 +1,63 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Daniel Nuffer
+ Copyright (c) 2001-2003 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+
+#if !defined(PARSE_TREE_UTILS_HPP)
+#define PARSE_TREE_UTILS_HPP
+
+#include <utility> // for std::pair
+
+#include <boost/spirit/tree/parse_tree.hpp> // needed for parse tree generation
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace spirit {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// The function 'get_first_leaf' returnes a reference to the first leaf node
+// of the given parsetree.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename T>
+tree_node<T> const &
+get_first_leaf (tree_node<T> const &node);
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// The function 'find_node' finds a specified node through recursive search.
+// If the return value is true, the variable to which points the parameter
+// 'found_node' will contain the address of the node with the given rule_id.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename T>
+bool
+find_node (tree_node<T> const &node, parser_id node_to_search,
+ tree_node<T> const **found_node);
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// The function 'get_node_range' return a pair of iterators pointing at the
+// range, which containes the elements of a specified node. It's very useful
+// for locating all information related with a specified node.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename T>
+bool
+get_node_range (tree_node<T> const &node, parser_id node_to_search,
+ std::pair<typename tree_node<T>::const_tree_iterator,
+ typename tree_node<T>::const_tree_iterator> &nodes);
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace spirit
+} // namespace boost
+
+#include "boost/spirit/tree/impl/parse_tree_utils.ipp"
+
+#endif // !defined(PARSE_TREE_UTILS_HPP)
diff --git a/boost/boost/spirit/tree/parsetree.dtd b/boost/boost/spirit/tree/parsetree.dtd
new file mode 100644
index 00000000000..9f4728285cb
--- /dev/null
+++ b/boost/boost/spirit/tree/parsetree.dtd
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!-- This DTD is used for the output of Spirit parse tree's through -->
+<!-- the boost::spirit::tree_to_xml functions. -->
+<!ELEMENT parsetree (parsenode)>
+<!ATTLIST parsetree
+ version CDATA "1.0"
+>
+<!ELEMENT parsenode ((value | token)?, parsenode*)>
+<!ATTLIST parsenode
+ rule CDATA #IMPLIED
+>
+<!ELEMENT value (#PCDATA | token)*>
+<!ELEMENT token (#PCDATA)>
+<!ATTLIST token
+ id CDATA #REQUIRED
+ is_root CDATA "0"
+>
diff --git a/boost/boost/spirit/tree/tree_to_xml.hpp b/boost/boost/spirit/tree/tree_to_xml.hpp
new file mode 100644
index 00000000000..7bb4c0e9e11
--- /dev/null
+++ b/boost/boost/spirit/tree/tree_to_xml.hpp
@@ -0,0 +1,111 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Daniel Nuffer
+ Copyright (c) 2001-2003 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+
+#if !defined(TREE_TO_XML_HPP)
+#define TREE_TO_XML_HPP
+
+namespace boost { namespace spirit {
+
+ namespace impl {
+ template <typename CharT> struct default_string;
+ }
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Dump a parse tree as a xml stream
+//
+// The functions 'tree_to_xml' can be used to output a parse tree as a xml
+// stream into the given ostream. The parameters have the following
+// meaning:
+//
+// mandatory parameters:
+// ostrm The output stream used for streaming the parse tree.
+// tree The parse tree to output.
+//
+// optional parameters:
+// input_line The input line from which the parse tree was
+// generated (if given, it is used to output a comment
+// containing this line).
+// id_to_name A map, which is used for converting the rule id's contained
+// in the parse tree to readable strings. Here a auxiliary
+// associative container can be used, which maps a rule_id to
+// a std::string (i.e. a std::map<rule_id, std::string>).
+// get_token_id
+// A function or functor, which takes an instance of a token
+// and which should return a token id (i.e. something like
+// 'int f(char const c)').
+// get_token_value
+// A function or functor, which takes an instance of a token
+// and which should return a readable representation of this
+// token (i.e. something like 'std::string f(char const c)').
+//
+// The structure of the generated xml stream conforms to the DTD given in the
+// file 'parsetree.dtd'. This file is located in the spirit/tree directory.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+ template <
+ typename CharT, typename TreeNodeT, typename AssocContainerT,
+ typename GetIdT, typename GetValueT
+ >
+ inline void
+ basic_tree_to_xml (std::basic_ostream<CharT> &ostrm, TreeNodeT const &tree,
+ std::basic_string<CharT> const &input_line,
+ AssocContainerT const& id_to_name, GetIdT const &get_token_id,
+ GetValueT const &get_token_value);
+
+ template <typename CharT, typename TreeNodeT, typename AssocContainerT>
+ inline void
+ basic_tree_to_xml (std::basic_ostream<CharT> &ostrm, TreeNodeT const &tree,
+ std::basic_string<CharT> const &input_line,
+ AssocContainerT const& id_to_name);
+
+ template <typename CharT, typename TreeNodeT>
+ inline void
+ basic_tree_to_xml (std::basic_ostream<CharT> &ostrm, TreeNodeT const &tree,
+ std::basic_string<CharT> const &input_line =
+ impl::default_string<CharT>::get());
+
+ ///////////////////////////////////////////////////////////////////////////
+ template <
+ typename TreeNodeT, typename AssocContainerT,
+ typename GetIdT, typename GetValueT
+ >
+ inline void
+ tree_to_xml (std::ostream &ostrm, TreeNodeT const &tree,
+ std::string const &input_line, AssocContainerT const& id_to_name,
+ GetIdT const &get_token_id, GetValueT const &get_token_value)
+ {
+ basic_tree_to_xml<char>(ostrm, tree, input_line, id_to_name,
+ get_token_id, get_token_value);
+ }
+
+ template <typename TreeNodeT, typename AssocContainerT>
+ inline void
+ tree_to_xml (std::ostream &ostrm, TreeNodeT const &tree,
+ std::string const &input_line, AssocContainerT const& id_to_name)
+ {
+ basic_tree_to_xml<char>(ostrm, tree, input_line, id_to_name);
+ }
+
+ template <typename TreeNodeT>
+ inline void
+ tree_to_xml (std::ostream &ostrm, TreeNodeT const &tree,
+ std::string const &input_line = "")
+ {
+ basic_tree_to_xml<char>(ostrm, tree, input_line);
+ }
+
+}} // namespace boost::spirit
+
+#include <boost/spirit/tree/impl/tree_to_xml.ipp>
+
+#endif // !defined(TREE_TO_XML_HPP)
+
diff --git a/boost/boost/spirit/tree/typeof.hpp b/boost/boost/spirit/tree/typeof.hpp
new file mode 100644
index 00000000000..812ee052370
--- /dev/null
+++ b/boost/boost/spirit/tree/typeof.hpp
@@ -0,0 +1,80 @@
+/*=============================================================================
+ Copyright (c) 2006 Tobias Schwinger
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_TREE_TYPEOF_HPP)
+#define BOOST_SPIRIT_TREE_TYPEOF_HPP
+
+#include <boost/typeof/typeof.hpp>
+
+#include <boost/spirit/core/typeof.hpp>
+
+#include <boost/spirit/tree/common_fwd.hpp>
+#include <boost/spirit/tree/parse_tree_fwd.hpp>
+#include <boost/spirit/tree/ast_fwd.hpp>
+
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+
+// common.hpp (has forward header)
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::tree_node,1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::node_iter_data,2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::node_iter_data_factory,1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::node_val_data_factory,1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::node_all_val_data_factory,1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::tree_match,3)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::tree_policy)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::common_tree_match_policy,4)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::common_tree_tree_policy,2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::no_tree_gen_node_parser,1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::node_parser,2)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::discard_node_op)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::leaf_node_op)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::infix_node_op)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::discard_first_node_op)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::discard_last_node_op)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::inner_node_op)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::action_directive_parser,2)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::access_match_action)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::access_match_action::action,2)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::access_node_action)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::access_node_action::action,2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::tree_parse_info,3)
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::node_iter_data,1)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::node_iter_data_factory<boost::spirit::nil_t>)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::node_val_data_factory<boost::spirit::nil_t>)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::node_all_val_data_factory<boost::spirit::nil_t>)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::tree_match,2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::tree_match,1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::tree_parse_info,2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::tree_parse_info,1)
+
+
+// parse_tree.hpp (has forward header)
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::pt_tree_policy,2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::pt_match_policy,2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::gen_pt_node_parser,1)
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::pt_match_policy,1)
+
+
+// ast.hpp (has forward header)
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::ast_tree_policy,2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::ast_match_policy,2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::gen_ast_node_parser,1)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::root_node_op)
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::ast_match_policy,1)
+
+
+#endif
+
diff --git a/boost/boost/spirit/utility.hpp b/boost/boost/spirit/utility.hpp
new file mode 100644
index 00000000000..6fdf7ba8350
--- /dev/null
+++ b/boost/boost/spirit/utility.hpp
@@ -0,0 +1,41 @@
+/*=============================================================================
+ Copyright (c) 1998-2003 Joel de Guzman
+ Copyright (c) 2001-2003 Daniel Nuffer
+ Copyright (c) 2001-2003 Hartmut Kaiser
+ Copyright (c) 2002-2003 Martin Wille
+ Copyright (c) 2002 Juan Carlos Arevalo-Baeza
+ Copyright (c) 2002 Raghavendra Satish
+ Copyright (c) 2002 Jeff Westfahl
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_UTILITY_MAIN_HPP)
+#define BOOST_SPIRIT_UTILITY_MAIN_HPP
+
+#include <boost/spirit/version.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Master header for Spirit.Utilities
+//
+///////////////////////////////////////////////////////////////////////////////
+
+// Utility.Parsers
+#include <boost/spirit/utility/chset.hpp>
+#include <boost/spirit/utility/chset_operators.hpp>
+#include <boost/spirit/utility/escape_char.hpp>
+#include <boost/spirit/utility/functor_parser.hpp>
+#include <boost/spirit/utility/loops.hpp>
+#include <boost/spirit/utility/confix.hpp>
+#include <boost/spirit/utility/lists.hpp>
+#include <boost/spirit/utility/distinct.hpp>
+
+// Utility.Support
+#include <boost/spirit/utility/flush_multi_pass.hpp>
+#include <boost/spirit/utility/scoped_lock.hpp>
+
+
+#endif // !defined(BOOST_SPIRIT_UTILITY_MAIN_HPP)
diff --git a/boost/boost/spirit/utility/chset.hpp b/boost/boost/spirit/utility/chset.hpp
new file mode 100644
index 00000000000..4273d1ce24e
--- /dev/null
+++ b/boost/boost/spirit/utility/chset.hpp
@@ -0,0 +1,183 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Joel de Guzman
+ Copyright (c) 2001-2003 Daniel Nuffer
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_CHSET_HPP
+#define BOOST_SPIRIT_CHSET_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/shared_ptr.hpp>
+#include <boost/spirit/core/primitives/primitives.hpp>
+#include <boost/spirit/utility/impl/chset/basic_chset.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+namespace utility { namespace impl {
+
+ // This is here because some compilers choke on out-of-line member
+ // template functions. And we don't want to put the whole algorithm
+ // in the chset constructor in the class definition.
+ template <typename CharT, typename CharT2>
+ void construct_chset(boost::shared_ptr<basic_chset<CharT> >& ptr,
+ CharT2 const* definition);
+
+}} // namespace utility::impl
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// chset class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename CharT = char>
+class chset: public char_parser<chset<CharT> > {
+
+public:
+ chset();
+ chset(chset const& arg_);
+ explicit chset(CharT arg_);
+ explicit chset(anychar_parser arg_);
+ explicit chset(nothing_parser arg_);
+ explicit chset(chlit<CharT> const& arg_);
+ explicit chset(range<CharT> const& arg_);
+ explicit chset(negated_char_parser<chlit<CharT> > const& arg_);
+ explicit chset(negated_char_parser<range<CharT> > const& arg_);
+
+ template <typename CharT2>
+ explicit chset(CharT2 const* definition)
+ : ptr(new basic_chset<CharT>())
+ {
+ utility::impl::construct_chset(ptr, definition);
+ }
+ ~chset();
+
+ chset& operator=(chset const& rhs);
+ chset& operator=(CharT rhs);
+ chset& operator=(anychar_parser rhs);
+ chset& operator=(nothing_parser rhs);
+ chset& operator=(chlit<CharT> const& rhs);
+ chset& operator=(range<CharT> const& rhs);
+ chset& operator=(negated_char_parser<chlit<CharT> > const& rhs);
+ chset& operator=(negated_char_parser<range<CharT> > const& rhs);
+
+ void set(range<CharT> const& arg_);
+ void set(negated_char_parser<chlit<CharT> > const& arg_);
+ void set(negated_char_parser<range<CharT> > const& arg_);
+
+ void clear(range<CharT> const& arg_);
+ void clear(negated_char_parser<range<CharT> > const& arg_);
+ bool test(CharT ch) const;
+ chset& inverse();
+ void swap(chset& x);
+
+ chset& operator|=(chset const& x);
+ chset& operator&=(chset const& x);
+ chset& operator-=(chset const& x);
+ chset& operator^=(chset const& x);
+
+private:
+
+ boost::shared_ptr<basic_chset<CharT> > ptr;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Generator functions
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+chset_p(chlit<CharT> const& arg_)
+{ return chset<CharT>(arg_); }
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+chset_p(range<CharT> const& arg_)
+{ return chset<CharT>(arg_); }
+
+template <typename CharT>
+inline chset<CharT>
+chset_p(negated_char_parser<chlit<CharT> > const& arg_)
+{ return chset<CharT>(arg_); }
+
+template <typename CharT>
+inline chset<CharT>
+chset_p(negated_char_parser<range<CharT> > const& arg_)
+{ return chset<CharT>(arg_); }
+
+//////////////////////////////////
+inline chset<char>
+chset_p(char const* init)
+{ return chset<char>(init); }
+
+//////////////////////////////////
+inline chset<wchar_t>
+chset_p(wchar_t const* init)
+{ return chset<wchar_t>(init); }
+
+//////////////////////////////////
+inline chset<char>
+chset_p(char ch)
+{ return chset<char>(ch); }
+
+//////////////////////////////////
+inline chset<wchar_t>
+chset_p(wchar_t ch)
+{ return chset<wchar_t>(ch); }
+
+//////////////////////////////////
+inline chset<int>
+chset_p(int ch)
+{ return chset<int>(ch); }
+
+//////////////////////////////////
+inline chset<unsigned int>
+chset_p(unsigned int ch)
+{ return chset<unsigned int>(ch); }
+
+//////////////////////////////////
+inline chset<short>
+chset_p(short ch)
+{ return chset<short>(ch); }
+
+#if !defined(BOOST_NO_INTRINSIC_WCHAR_T)
+//////////////////////////////////
+inline chset<unsigned short>
+chset_p(unsigned short ch)
+{ return chset<unsigned short>(ch); }
+#endif
+//////////////////////////////////
+inline chset<long>
+chset_p(long ch)
+{ return chset<long>(ch); }
+
+//////////////////////////////////
+inline chset<unsigned long>
+chset_p(unsigned long ch)
+{ return chset<unsigned long>(ch); }
+
+#ifdef BOOST_HAS_LONG_LONG
+//////////////////////////////////
+inline chset< ::boost::long_long_type>
+chset_p( ::boost::long_long_type ch)
+{ return chset< ::boost::long_long_type>(ch); }
+
+//////////////////////////////////
+inline chset< ::boost::ulong_long_type>
+chset_p( ::boost::ulong_long_type ch)
+{ return chset< ::boost::ulong_long_type>(ch); }
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+}} // namespace boost::spirit
+
+#endif
+
+#include <boost/spirit/utility/impl/chset.ipp>
+#include <boost/spirit/utility/chset_operators.hpp>
diff --git a/boost/boost/spirit/utility/chset_operators.hpp b/boost/boost/spirit/utility/chset_operators.hpp
new file mode 100644
index 00000000000..e1446ff5f7e
--- /dev/null
+++ b/boost/boost/spirit/utility/chset_operators.hpp
@@ -0,0 +1,398 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Joel de Guzman
+ Copyright (c) 2001-2003 Daniel Nuffer
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_CHSET_OPERATORS_HPP
+#define BOOST_SPIRIT_CHSET_OPERATORS_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/utility/chset.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// chset free operators
+//
+// Where a and b are both chsets, implements:
+//
+// a | b, a & b, a - b, a ^ b
+//
+// Where a is a chset, implements:
+//
+// ~a
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator~(chset<CharT> const& a);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator|(chset<CharT> const& a, chset<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator&(chset<CharT> const& a, chset<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator-(chset<CharT> const& a, chset<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator^(chset<CharT> const& a, chset<CharT> const& b);
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// range <--> chset free operators
+//
+// Where a is a chset and b is a range, and vice-versa, implements:
+//
+// a | b, a & b, a - b, a ^ b
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator|(chset<CharT> const& a, range<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator&(chset<CharT> const& a, range<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator-(chset<CharT> const& a, range<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator^(chset<CharT> const& a, range<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator|(range<CharT> const& a, chset<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator&(range<CharT> const& a, chset<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator-(range<CharT> const& a, chset<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator^(range<CharT> const& a, chset<CharT> const& b);
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// chlit <--> chset free operators
+//
+// Where a is a chset and b is a chlit, and vice-versa, implements:
+//
+// a | b, a & b, a - b, a ^ b
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator|(chset<CharT> const& a, chlit<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator&(chset<CharT> const& a, chlit<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator-(chset<CharT> const& a, chlit<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator^(chset<CharT> const& a, chlit<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator|(chlit<CharT> const& a, chset<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator&(chlit<CharT> const& a, chset<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator-(chlit<CharT> const& a, chset<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator^(chlit<CharT> const& a, chset<CharT> const& b);
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// negated_char_parser<range> <--> chset free operators
+//
+// Where a is a chset and b is a range, and vice-versa, implements:
+//
+// a | b, a & b, a - b, a ^ b
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator|(chset<CharT> const& a, negated_char_parser<range<CharT> > const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator&(chset<CharT> const& a, negated_char_parser<range<CharT> > const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator-(chset<CharT> const& a, negated_char_parser<range<CharT> > const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator^(chset<CharT> const& a, negated_char_parser<range<CharT> > const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator|(negated_char_parser<range<CharT> > const& a, chset<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator&(negated_char_parser<range<CharT> > const& a, chset<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator-(negated_char_parser<range<CharT> > const& a, chset<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator^(negated_char_parser<range<CharT> > const& a, chset<CharT> const& b);
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// negated_char_parser<chlit> <--> chset free operators
+//
+// Where a is a chset and b is a chlit, and vice-versa, implements:
+//
+// a | b, a & b, a - b, a ^ b
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator|(chset<CharT> const& a, negated_char_parser<chlit<CharT> > const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator&(chset<CharT> const& a, negated_char_parser<chlit<CharT> > const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator-(chset<CharT> const& a, negated_char_parser<chlit<CharT> > const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator^(chset<CharT> const& a, negated_char_parser<chlit<CharT> > const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator|(negated_char_parser<chlit<CharT> > const& a, chset<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator&(negated_char_parser<chlit<CharT> > const& a, chset<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator-(negated_char_parser<chlit<CharT> > const& a, chset<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator^(negated_char_parser<chlit<CharT> > const& a, chset<CharT> const& b);
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// literal primitives <--> chset free operators
+//
+// Where a is a chset and b is a literal primitive,
+// and vice-versa, implements:
+//
+// a | b, a & b, a - b, a ^ b
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator|(chset<CharT> const& a, CharT b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator&(chset<CharT> const& a, CharT b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator-(chset<CharT> const& a, CharT b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator^(chset<CharT> const& a, CharT b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator|(CharT a, chset<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator&(CharT a, chset<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator-(CharT a, chset<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator^(CharT a, chset<CharT> const& b);
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// anychar_parser <--> chset free operators
+//
+// Where a is chset and b is a anychar_parser, and vice-versa, implements:
+//
+// a | b, a & b, a - b, a ^ b
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator|(chset<CharT> const& a, anychar_parser b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator&(chset<CharT> const& a, anychar_parser b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator-(chset<CharT> const& a, anychar_parser b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator^(chset<CharT> const& a, anychar_parser b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator|(anychar_parser a, chset<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator&(anychar_parser a, chset<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator-(anychar_parser a, chset<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator^(anychar_parser a, chset<CharT> const& b);
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// nothing_parser <--> chset free operators
+//
+// Where a is chset and b is nothing_parser, and vice-versa, implements:
+//
+// a | b, a & b, a - b, a ^ b
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator|(chset<CharT> const& a, nothing_parser b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator&(chset<CharT> const& a, nothing_parser b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator-(chset<CharT> const& a, nothing_parser b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator^(chset<CharT> const& a, nothing_parser b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator|(nothing_parser a, chset<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator&(nothing_parser a, chset<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator-(nothing_parser a, chset<CharT> const& b);
+
+//////////////////////////////////
+template <typename CharT>
+chset<CharT>
+operator^(nothing_parser a, chset<CharT> const& b);
+
+///////////////////////////////////////////////////////////////////////////////
+}} // namespace boost::spirit
+
+#endif
+
+#include <boost/spirit/utility/impl/chset_operators.ipp>
diff --git a/boost/boost/spirit/utility/confix.hpp b/boost/boost/spirit/utility/confix.hpp
new file mode 100644
index 00000000000..b15f88f1801
--- /dev/null
+++ b/boost/boost/spirit/utility/confix.hpp
@@ -0,0 +1,392 @@
+/*=============================================================================
+ Copyright (c) 2002-2003 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_CONFIX_HPP
+#define BOOST_SPIRIT_CONFIX_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/config.hpp>
+#include <boost/spirit/meta/as_parser.hpp>
+#include <boost/spirit/core/composite/operators.hpp>
+
+#include <boost/spirit/utility/confix_fwd.hpp>
+#include <boost/spirit/utility/impl/confix.ipp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// confix_parser class
+//
+// Parses a sequence of 3 sub-matches. This class may
+// be used to parse structures, where the opening part is possibly
+// contained in the expression part and the whole sequence is only
+// parsed after seeing the closing part matching the first opening
+// subsequence. Example: C-comments:
+//
+// /* This is a C-comment */
+//
+///////////////////////////////////////////////////////////////////////////////
+
+template<typename NestedT = non_nested, typename LexemeT = non_lexeme>
+struct confix_parser_gen;
+
+template <
+ typename OpenT, typename ExprT, typename CloseT, typename CategoryT,
+ typename NestedT, typename LexemeT
+>
+struct confix_parser :
+ public parser<
+ confix_parser<OpenT, ExprT, CloseT, CategoryT, NestedT, LexemeT>
+ >
+{
+ typedef
+ confix_parser<OpenT, ExprT, CloseT, CategoryT, NestedT, LexemeT>
+ self_t;
+
+ confix_parser(OpenT const &open_, ExprT const &expr_, CloseT const &close_)
+ : open(open_), expr(expr_), close(close_)
+ {}
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ return impl::confix_parser_type<CategoryT>::
+ parse(NestedT(), LexemeT(), *this, scan, open, expr, close);
+ }
+
+private:
+
+ typename as_parser<OpenT>::type::embed_t open;
+ typename as_parser<ExprT>::type::embed_t expr;
+ typename as_parser<CloseT>::type::embed_t close;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Confix parser generator template
+//
+// This is a helper for generating a correct confix_parser<> from
+// auxiliary parameters. There are the following types supported as
+// parameters yet: parsers, single characters and strings (see
+// as_parser).
+//
+// If the body parser is an action_parser_category type parser (a parser
+// with an attached semantic action) we have to do something special. This
+// happens, if the user wrote something like:
+//
+// confix_p(open, body[f], close)
+//
+// where 'body' is the parser matching the body of the confix sequence
+// and 'f' is a functor to be called after matching the body. If we would
+// do nothing, the resulting code would parse the sequence as follows:
+//
+// start >> (body[f] - close) >> close
+//
+// what in most cases is not what the user expects.
+// (If this _is_ what you've expected, then please use the confix_p
+// generator function 'direct()', which will inhibit
+// re-attaching the actor to the body parser).
+//
+// To make the confix parser behave as expected:
+//
+// start >> (body - close)[f] >> close
+//
+// the actor attached to the 'body' parser has to be re-attached to the
+// (body - close) parser construct, which will make the resulting confix
+// parser 'do the right thing'. This refactoring is done by the help of
+// the refactoring parsers (see the files refactoring.[hi]pp).
+//
+// Additionally special care must be taken, if the body parser is a
+// unary_parser_category type parser as
+//
+// confix_p(open, *anychar_p, close)
+//
+// which without any refactoring would result in
+//
+// start >> (*anychar_p - close) >> close
+//
+// and will not give the expected result (*anychar_p will eat up all the
+// input up to the end of the input stream). So we have to refactor this
+// into:
+//
+// start >> *(anychar_p - close) >> close
+//
+// what will give the correct result.
+//
+// The case, where the body parser is a combination of the two mentioned
+// problems (i.e. the body parser is a unary parser with an attached
+// action), is handled accordingly too:
+//
+// confix_p(start, (*anychar_p)[f], end)
+//
+// will be parsed as expected:
+//
+// start >> (*(anychar_p - end))[f] >> end.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+template<typename NestedT, typename LexemeT>
+struct confix_parser_gen
+{
+ // Generic generator function for creation of concrete confix parsers
+
+ template<typename StartT, typename ExprT, typename EndT>
+ struct paren_op_result_type
+ {
+ typedef confix_parser<
+ typename as_parser<StartT>::type,
+ typename as_parser<ExprT>::type,
+ typename as_parser<EndT>::type,
+ typename as_parser<ExprT>::type::parser_category_t,
+ NestedT,
+ LexemeT
+ > type;
+ };
+
+ template<typename StartT, typename ExprT, typename EndT>
+ typename paren_op_result_type<StartT, ExprT, EndT>::type
+ operator()(StartT const &start_, ExprT const &expr_, EndT const &end_) const
+ {
+ typedef typename paren_op_result_type<StartT,ExprT,EndT>::type
+ return_t;
+
+ return return_t(
+ as_parser<StartT>::convert(start_),
+ as_parser<ExprT>::convert(expr_),
+ as_parser<EndT>::convert(end_)
+ );
+ }
+
+ // Generic generator function for creation of concrete confix parsers
+ // which have an action directly attached to the ExprT part of the
+ // parser (see comment above, no automatic refactoring)
+
+ template<typename StartT, typename ExprT, typename EndT>
+ struct direct_result_type
+ {
+ typedef confix_parser<
+ typename as_parser<StartT>::type,
+ typename as_parser<ExprT>::type,
+ typename as_parser<EndT>::type,
+ plain_parser_category, // do not re-attach action
+ NestedT,
+ LexemeT
+ > type;
+ };
+
+ template<typename StartT, typename ExprT, typename EndT>
+ typename direct_result_type<StartT,ExprT,EndT>::type
+ direct(StartT const &start_, ExprT const &expr_, EndT const &end_) const
+ {
+ typedef typename direct_result_type<StartT,ExprT,EndT>::type
+ return_t;
+
+ return return_t(
+ as_parser<StartT>::convert(start_),
+ as_parser<ExprT>::convert(expr_),
+ as_parser<EndT>::convert(end_)
+ );
+ }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Predefined non_nested confix parser generators
+//
+///////////////////////////////////////////////////////////////////////////////
+
+const confix_parser_gen<non_nested, non_lexeme> confix_p =
+ confix_parser_gen<non_nested, non_lexeme>();
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Comments are special types of confix parsers
+//
+// Comment parser generator template. This is a helper for generating a
+// correct confix_parser<> from auxiliary parameters, which is able to
+// parse comment constructs: (StartToken >> Comment text >> EndToken).
+//
+// There are the following types supported as parameters yet: parsers,
+// single characters and strings (see as_parser).
+//
+// There are two diffenerent predefined comment parser generators
+// (comment_p and comment_nest_p, see below), which may be used for
+// creating special comment parsers in two different ways.
+//
+// If these are used with one parameter, a comment starting with the given
+// first parser parameter up to the end of the line is matched. So for
+// instance the following parser matches C++ style comments:
+//
+// comment_p("//").
+//
+// If these are used with two parameters, a comment starting with the
+// first parser parameter up to the second parser parameter is matched.
+// For instance a C style comment parser should be constrcuted as:
+//
+// comment_p("/*", "*/").
+//
+// Please note, that a comment is parsed implicitly as if the whole
+// comment_p(...) statement were embedded into a lexeme_d[] directive.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+template<typename NestedT>
+struct comment_parser_gen
+{
+ // Generic generator function for creation of concrete comment parsers
+ // from an open token. The newline parser eol_p is used as the
+ // closing token.
+
+ template<typename StartT>
+ struct paren_op1_result_type
+ {
+ typedef confix_parser<
+ typename as_parser<StartT>::type,
+ kleene_star<anychar_parser>,
+ alternative<eol_parser, end_parser>,
+ unary_parser_category, // there is no action to re-attach
+ NestedT,
+ is_lexeme // insert implicit lexeme_d[]
+ >
+ type;
+ };
+
+ template<typename StartT>
+ typename paren_op1_result_type<StartT>::type
+ operator() (StartT const &start_) const
+ {
+ typedef typename paren_op1_result_type<StartT>::type
+ return_t;
+
+ return return_t(
+ as_parser<StartT>::convert(start_),
+ *anychar_p,
+ eol_p | end_p
+ );
+ }
+
+ // Generic generator function for creation of concrete comment parsers
+ // from an open and a close tokens.
+
+ template<typename StartT, typename EndT>
+ struct paren_op2_result_type
+ {
+ typedef confix_parser<
+ typename as_parser<StartT>::type,
+ kleene_star<anychar_parser>,
+ typename as_parser<EndT>::type,
+ unary_parser_category, // there is no action to re-attach
+ NestedT,
+ is_lexeme // insert implicit lexeme_d[]
+ > type;
+ };
+
+ template<typename StartT, typename EndT>
+ typename paren_op2_result_type<StartT,EndT>::type
+ operator() (StartT const &start_, EndT const &end_) const
+ {
+ typedef typename paren_op2_result_type<StartT,EndT>::type
+ return_t;
+
+ return return_t(
+ as_parser<StartT>::convert(start_),
+ *anychar_p,
+ as_parser<EndT>::convert(end_)
+ );
+ }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Predefined non_nested comment parser generator
+//
+///////////////////////////////////////////////////////////////////////////////
+
+const comment_parser_gen<non_nested> comment_p =
+ comment_parser_gen<non_nested>();
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// comment_nest_parser class
+//
+// Parses a nested comments.
+// Example: nested PASCAL-comments:
+//
+// { This is a { nested } PASCAL-comment }
+//
+///////////////////////////////////////////////////////////////////////////////
+
+template<typename OpenT, typename CloseT>
+struct comment_nest_parser:
+ public parser<comment_nest_parser<OpenT, CloseT> >
+{
+ typedef comment_nest_parser<OpenT, CloseT> self_t;
+
+ comment_nest_parser(OpenT const &open_, CloseT const &close_):
+ open(open_), close(close_)
+ {}
+
+ template<typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const &scan) const
+ {
+ return do_parse(
+ open >> *(*this | (anychar_p - close)) >> close,
+ scan);
+ }
+
+private:
+ template<typename ParserT, typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ do_parse(ParserT const &p, ScannerT const &scan) const
+ {
+ return
+ impl::contiguous_parser_parse<
+ typename parser_result<ParserT, ScannerT>::type
+ >(p, scan, scan);
+ }
+
+ typename as_parser<OpenT>::type::embed_t open;
+ typename as_parser<CloseT>::type::embed_t close;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Predefined nested comment parser generator
+//
+///////////////////////////////////////////////////////////////////////////////
+
+template<typename OpenT, typename CloseT>
+struct comment_nest_p_result
+{
+ typedef comment_nest_parser<
+ typename as_parser<OpenT>::type,
+ typename as_parser<CloseT>::type
+ > type;
+};
+
+template<typename OpenT, typename CloseT>
+inline typename comment_nest_p_result<OpenT,CloseT>::type
+comment_nest_p(OpenT const &open, CloseT const &close)
+{
+ typedef typename comment_nest_p_result<OpenT,CloseT>::type
+ result_t;
+
+ return result_t(
+ as_parser<OpenT>::convert(open),
+ as_parser<CloseT>::convert(close)
+ );
+}
+
+///////////////////////////////////////////////////////////////////////////////
+}} // namespace boost::spirit
+
+#endif
diff --git a/boost/boost/spirit/utility/confix_fwd.hpp b/boost/boost/spirit/utility/confix_fwd.hpp
new file mode 100644
index 00000000000..f805935e35b
--- /dev/null
+++ b/boost/boost/spirit/utility/confix_fwd.hpp
@@ -0,0 +1,35 @@
+/*=============================================================================
+ Copyright (c) 2006 Tobias Schwinger
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_CONFIX_FWD_HPP)
+#define BOOST_SPIRIT_CONFIX_FWD_HPP
+
+#include <boost/spirit/core/parser.hpp>
+
+namespace boost { namespace spirit {
+
+ struct is_nested;
+ struct non_nested;
+ struct is_lexeme;
+ struct non_lexeme;
+
+ template <
+ typename OpenT, typename ExprT, typename CloseT,
+ typename CategoryT = plain_parser_category,
+ typename NestedT = non_nested, typename LexemeT = non_lexeme
+ >
+ struct confix_parser;
+
+ template<typename OpenT, typename CloseT>
+ struct comment_nest_parser;
+
+}} // namespace boost::spirit
+
+#endif
+
+
diff --git a/boost/boost/spirit/utility/distinct.hpp b/boost/boost/spirit/utility/distinct.hpp
new file mode 100644
index 00000000000..9d90d0ab6d4
--- /dev/null
+++ b/boost/boost/spirit/utility/distinct.hpp
@@ -0,0 +1,227 @@
+/*=============================================================================
+ Copyright (c) 1998-2003 Joel de Guzman
+ Copyright (c) 2003 Vaclav Vesely
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_DISTINCT_HPP)
+#define BOOST_SPIRIT_DISTINCT_HPP
+
+#include <boost/spirit/core/parser.hpp>
+#include <boost/spirit/core/primitives/primitives.hpp>
+#include <boost/spirit/core/composite/operators.hpp>
+#include <boost/spirit/core/composite/directives.hpp>
+#include <boost/spirit/core/composite/epsilon.hpp>
+#include <boost/spirit/core/non_terminal/rule.hpp>
+#include <boost/spirit/utility/chset.hpp>
+
+#include <boost/spirit/utility/distinct_fwd.hpp>
+
+namespace boost {
+ namespace spirit {
+//-----------------------------------------------------------------------------
+// distinct_parser class
+
+template <typename CharT, typename TailT>
+class distinct_parser
+{
+public:
+ typedef
+ contiguous<
+ sequence<
+ chseq<CharT const*>,
+ negated_empty_match_parser<
+ TailT
+ >
+ >
+ >
+ result_t;
+
+ distinct_parser()
+ : tail(chset<CharT>())
+ {
+ }
+
+ explicit distinct_parser(parser<TailT> const & tail_)
+ : tail(tail_.derived())
+ {
+ }
+
+ explicit distinct_parser(CharT const* letters)
+ : tail(chset_p(letters))
+ {
+ }
+
+ result_t operator()(CharT const* str) const
+ {
+ return lexeme_d[chseq_p(str) >> ~epsilon_p(tail)];
+ }
+
+ TailT tail;
+};
+
+//-----------------------------------------------------------------------------
+// distinct_directive class
+
+template <typename CharT, typename TailT>
+class distinct_directive
+{
+public:
+ template<typename ParserT>
+ struct result {
+ typedef
+ contiguous<
+ sequence<
+ ParserT,
+ negated_empty_match_parser<
+ TailT
+ >
+ >
+ >
+ type;
+ };
+
+ distinct_directive()
+ : tail(chset<CharT>())
+ {
+ }
+
+ explicit distinct_directive(CharT const* letters)
+ : tail(chset_p(letters))
+ {
+ }
+
+ explicit distinct_directive(parser<TailT> const & tail_)
+ : tail(tail_.derived())
+ {
+ }
+
+ template<typename ParserT>
+ typename result<typename as_parser<ParserT>::type>::type
+ operator[](ParserT const &subject) const
+ {
+ return
+ lexeme_d[as_parser<ParserT>::convert(subject) >> ~epsilon_p(tail)];
+ }
+
+ TailT tail;
+};
+
+//-----------------------------------------------------------------------------
+// dynamic_distinct_parser class
+
+template <typename ScannerT>
+class dynamic_distinct_parser
+{
+public:
+ typedef typename ScannerT::value_t char_t;
+
+ typedef
+ rule<
+ typename no_actions_scanner<
+ typename lexeme_scanner<ScannerT>::type
+ >::type
+ >
+ tail_t;
+
+ typedef
+ contiguous<
+ sequence<
+ chseq<char_t const*>,
+ negated_empty_match_parser<
+ tail_t
+ >
+ >
+ >
+ result_t;
+
+ dynamic_distinct_parser()
+ : tail(nothing_p)
+ {
+ }
+
+ template<typename ParserT>
+ explicit dynamic_distinct_parser(parser<ParserT> const & tail_)
+ : tail(tail_.derived())
+ {
+ }
+
+ explicit dynamic_distinct_parser(char_t const* letters)
+ : tail(chset_p(letters))
+ {
+ }
+
+ result_t operator()(char_t const* str) const
+ {
+ return lexeme_d[chseq_p(str) >> ~epsilon_p(tail)];
+ }
+
+ tail_t tail;
+};
+
+//-----------------------------------------------------------------------------
+// dynamic_distinct_directive class
+
+template <typename ScannerT>
+class dynamic_distinct_directive
+{
+public:
+ typedef typename ScannerT::value_t char_t;
+
+ typedef
+ rule<
+ typename no_actions_scanner<
+ typename lexeme_scanner<ScannerT>::type
+ >::type
+ >
+ tail_t;
+
+ template<typename ParserT>
+ struct result {
+ typedef
+ contiguous<
+ sequence<
+ ParserT,
+ negated_empty_match_parser<
+ tail_t
+ >
+ >
+ >
+ type;
+ };
+
+ dynamic_distinct_directive()
+ : tail(nothing_p)
+ {
+ }
+
+ template<typename ParserT>
+ explicit dynamic_distinct_directive(parser<ParserT> const & tail_)
+ : tail(tail_.derived())
+ {
+ }
+
+ explicit dynamic_distinct_directive(char_t const* letters)
+ : tail(chset_p(letters))
+ {
+ }
+
+ template<typename ParserT>
+ typename result<typename as_parser<ParserT>::type>::type
+ operator[](ParserT const &subject) const
+ {
+ return
+ lexeme_d[as_parser<ParserT>::convert(subject) >> ~epsilon_p(tail)];
+ }
+
+ tail_t tail;
+};
+
+//-----------------------------------------------------------------------------
+ } // namespace spirit
+} // namespace boost
+
+#endif // !defined(BOOST_SPIRIT_DISTINCT_HPP)
diff --git a/boost/boost/spirit/utility/distinct_fwd.hpp b/boost/boost/spirit/utility/distinct_fwd.hpp
new file mode 100644
index 00000000000..732a4aaa130
--- /dev/null
+++ b/boost/boost/spirit/utility/distinct_fwd.hpp
@@ -0,0 +1,32 @@
+/*=============================================================================
+ Copyright (c) 2006 Tobias Schwinger
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_DISTINCT_FWD_HPP)
+#define BOOST_SPIRIT_DISTINCT_FWD_HPP
+
+namespace boost { namespace spirit {
+
+ template<typename CharT> class chset;
+
+ template <typename CharT = char, typename TailT = chset<CharT> >
+ class distinct_parser;
+
+ template <typename CharT = char, typename TailT = chset<CharT> >
+ class distinct_directive;
+
+ template <typename ScannerT = scanner<> >
+ class dynamic_distinct_parser;
+
+ template <typename ScannerT = scanner<> >
+ class dynamic_distinct_directive;
+
+}} // namespace boost::spirit
+
+#endif
+
+
diff --git a/boost/boost/spirit/utility/escape_char.hpp b/boost/boost/spirit/utility/escape_char.hpp
new file mode 100644
index 00000000000..6fc1524d7eb
--- /dev/null
+++ b/boost/boost/spirit/utility/escape_char.hpp
@@ -0,0 +1,180 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Daniel Nuffer
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_ESCAPE_CHAR_HPP
+#define BOOST_SPIRIT_ESCAPE_CHAR_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <string>
+#include <iterator>
+#include <cctype>
+#include <boost/limits.hpp>
+
+#include <boost/spirit/debug.hpp>
+
+#include <boost/spirit/utility/escape_char_fwd.hpp>
+#include <boost/spirit/utility/impl/escape_char.ipp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// escape_char_action class
+//
+// Links an escape char parser with a user defined semantic action.
+// The semantic action may be a function or a functor. A function
+// should be compatible with the interface:
+//
+// void f(CharT ch);
+//
+// A functor should have a member operator() with a compatible signature
+// as above. The matching character is passed into the function/functor.
+// This is the default class that character parsers use when dealing with
+// the construct:
+//
+// p[f]
+//
+// where p is a parser and f is a function or functor.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+ typename ParserT, typename ActionT,
+ unsigned long Flags, typename CharT
+>
+struct escape_char_action
+: public unary<ParserT,
+ parser<escape_char_action<ParserT, ActionT, Flags, CharT> > >
+{
+ typedef escape_char_action
+ <ParserT, ActionT, Flags, CharT> self_t;
+ typedef action_parser_category parser_category_t;
+ typedef unary<ParserT, parser<self_t> > base_t;
+
+ template <typename ScannerT>
+ struct result
+ {
+ typedef typename match_result<ScannerT, CharT>::type type;
+ };
+
+ escape_char_action(ParserT const& p, ActionT const& a)
+ : base_t(p), actor(a) {}
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ return impl::escape_char_action_parse<Flags, CharT>::
+ parse(scan, *this);
+ }
+
+ ActionT const& predicate() const { return actor; }
+
+private:
+
+ ActionT actor;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// escape_char_parser class
+//
+// The escape_char_parser helps in conjunction with the escape_char_action
+// template class (see above) in parsing escaped characters. There are two
+// different variants of this parser: one for parsing C style escaped
+// characters and one for parsing LEX style escaped characters.
+//
+// The C style escaped character parser is generated, when the template
+// parameter 'Flags' is equal to 'c_escapes' (a constant defined in the
+// file impl/escape_char.ipp). This parser recognizes all valid C escape
+// character sequences: '\t', '\b', '\f', '\n', '\r', '\"', '\'', '\\'
+// and the numeric style escapes '\120' (octal) and '\x2f' (hexadecimal)
+// and converts these to their character equivalent, for instance the
+// sequence of a backslash and a 'b' is parsed as the character '\b'.
+// All other escaped characters are rejected by this parser.
+//
+// The LEX style escaped character parser is generated, when the template
+// parameter 'Flags' is equal to 'lex_escapes' (a constant defined in the
+// file impl/escape_char.ipp). This parser recognizes all the C style
+// escaped character sequences (as described above) and additionally
+// does not reject all other escape sequences. All not mentioned escape
+// sequences are converted by the parser to the plain character, for
+// instance '\a' will be parsed as 'a'.
+//
+// All not escaped characters are parsed without modification.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+template <unsigned long Flags, typename CharT>
+struct escape_char_action_parser_gen;
+
+template <unsigned long Flags, typename CharT>
+struct escape_char_parser :
+ public parser<escape_char_parser<Flags, CharT> > {
+
+ // only the values c_escapes and lex_escapes are valid for Flags
+ BOOST_STATIC_ASSERT(Flags == c_escapes || Flags == lex_escapes);
+
+ typedef escape_char_parser<Flags, CharT> self_t;
+ typedef
+ escape_char_action_parser_gen<Flags, CharT>
+ action_parser_generator_t;
+
+ template <typename ScannerT>
+ struct result {
+
+ typedef typename match_result<ScannerT, CharT>::type type;
+ };
+
+ template <typename ActionT>
+ escape_char_action<self_t, ActionT, Flags, CharT>
+ operator[](ActionT const& actor) const
+ {
+ return escape_char_action<self_t, ActionT, Flags, CharT>(*this, actor);
+ }
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const &scan) const
+ {
+ return impl::escape_char_parse<CharT>::parse(scan, *this);
+ }
+};
+
+template <unsigned long Flags, typename CharT>
+struct escape_char_action_parser_gen {
+
+ template <typename ParserT, typename ActionT>
+ static escape_char_action<ParserT, ActionT, Flags, CharT>
+ generate (ParserT const &p, ActionT const &actor)
+ {
+ typedef
+ escape_char_action<ParserT, ActionT, Flags, CharT>
+ action_parser_t;
+ return action_parser_t(p, actor);
+ }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// predefined escape_char_parser objects
+//
+// These objects should be used for generating correct escaped character
+// parsers.
+//
+///////////////////////////////////////////////////////////////////////////////
+const escape_char_parser<lex_escapes> lex_escape_ch_p =
+ escape_char_parser<lex_escapes>();
+
+const escape_char_parser<c_escapes> c_escape_ch_p =
+ escape_char_parser<c_escapes>();
+
+///////////////////////////////////////////////////////////////////////////////
+}} // namespace boost::spirit
+
+#endif
diff --git a/boost/boost/spirit/utility/escape_char_fwd.hpp b/boost/boost/spirit/utility/escape_char_fwd.hpp
new file mode 100644
index 00000000000..8923fd3abf9
--- /dev/null
+++ b/boost/boost/spirit/utility/escape_char_fwd.hpp
@@ -0,0 +1,25 @@
+/*=============================================================================
+ Copyright (c) 2006 Tobias Schwinger
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_ESCAPE_CHAR_FWD_HPP)
+#define BOOST_SPIRIT_ESCAPE_CHAR_FWD_HPP
+
+namespace boost { namespace spirit {
+
+ template <unsigned long Flags, typename CharT = char>
+ struct escape_char_parser;
+
+ template <
+ class ParserT, typename ActionT,
+ unsigned long Flags, typename CharT = char>
+ struct escape_char_action;
+
+}} // namespace boost::spirit
+
+#endif
+
diff --git a/boost/boost/spirit/utility/flush_multi_pass.hpp b/boost/boost/spirit/utility/flush_multi_pass.hpp
new file mode 100644
index 00000000000..c33ea0a4468
--- /dev/null
+++ b/boost/boost/spirit/utility/flush_multi_pass.hpp
@@ -0,0 +1,73 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Daniel Nuffer
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_FLUSH_MULTI_PASS_HPP
+#define BOOST_SPIRIT_FLUSH_MULTI_PASS_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/core.hpp>
+#include <boost/spirit/iterator/multi_pass.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+ namespace impl {
+
+ template <typename T>
+ void flush_iterator(T &) {}
+
+ template <typename T1, typename T2, typename T3, typename T4>
+ void flush_iterator(boost::spirit::multi_pass<
+ T1, T2, T3, T4, boost::spirit::multi_pass_policies::std_deque> &i)
+ {
+ i.clear_queue();
+ }
+
+ } // namespace impl
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // flush_multi_pass_parser
+ //
+ // The flush_multi_pass_parser flushes an underlying
+ // multi_pass_iterator during the normal parsing process. This may
+ // be used at certain points during the parsing process, when it is
+ // clear, that no backtracking is needed anymore and the input
+ // gathered so far may be discarded.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ class flush_multi_pass_parser
+ : public parser<flush_multi_pass_parser>
+ {
+ public:
+ typedef flush_multi_pass_parser this_t;
+
+ template <typename ScannerT>
+ typename parser_result<this_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ impl::flush_iterator(scan.first);
+ return scan.empty_match();
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // predefined flush_multi_pass_p object
+ //
+ // This object should may used to flush a multi_pass_iterator along
+ // the way during the normal parsing process.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+
+ flush_multi_pass_parser const
+ flush_multi_pass_p = flush_multi_pass_parser();
+
+}} // namespace boost::spirit
+
+#endif // BOOST_SPIRIT_FLUSH_MULTI_PASS_HPP
diff --git a/boost/boost/spirit/utility/functor_parser.hpp b/boost/boost/spirit/utility/functor_parser.hpp
new file mode 100644
index 00000000000..fe72d4e3139
--- /dev/null
+++ b/boost/boost/spirit/utility/functor_parser.hpp
@@ -0,0 +1,67 @@
+/*=============================================================================
+ Copyright (c) 2002-2003 Joel de Guzman
+ Copyright (c) 2002-2003 Juan Carlos Arevalo-Baeza
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_FUNCTOR_PARSER_HPP
+#define BOOST_SPIRIT_FUNCTOR_PARSER_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/core/parser.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // functor_parser class
+ //
+ // Once a functor parser has been defined, you can build a real
+ // parser from it by passing it to this class as the template
+ // parameter.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template < class FunctorT >
+ struct functor_parser : public parser<functor_parser<FunctorT> >
+ {
+ FunctorT functor;
+
+ functor_parser(): functor() {}
+ functor_parser(FunctorT const& functor_): functor(functor_) {}
+
+ typedef typename FunctorT::result_t functor_result_t;
+ typedef functor_parser<FunctorT> self_t;
+
+ template <typename ScannerT>
+ struct result
+ {
+ typedef typename match_result<ScannerT, functor_result_t>::type
+ type;
+ };
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ typedef typename parser_result<self_t, ScannerT>::type result_t;
+ typedef typename ScannerT::value_t value_t;
+ typedef typename ScannerT::iterator_t iterator_t;
+
+ iterator_t const s(scan.first);
+ functor_result_t result;
+ std::ptrdiff_t len = functor(scan, result);
+
+ if (len < 0)
+ return scan.no_match();
+ else
+ return scan.create_match(std::size_t(len), result, s, scan.first);
+ }
+ };
+
+}} // namespace boost::spirit
+
+#endif
diff --git a/boost/boost/spirit/utility/grammar_def.hpp b/boost/boost/spirit/utility/grammar_def.hpp
new file mode 100644
index 00000000000..c69517707c4
--- /dev/null
+++ b/boost/boost/spirit/utility/grammar_def.hpp
@@ -0,0 +1,303 @@
+/*=============================================================================
+ Copyright (c) 2003 Hartmut Kaiser
+ Copyright (c) 2003 Joel de Guzman
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_GRAMMAR_DEF_HPP)
+#define BOOST_SPIRIT_GRAMMAR_DEF_HPP
+
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/preprocessor/arithmetic/inc.hpp>
+#include <boost/preprocessor/arithmetic/dec.hpp>
+#include <boost/preprocessor/enum.hpp>
+#include <boost/preprocessor/enum_params.hpp>
+#include <boost/preprocessor/repeat.hpp>
+#include <boost/preprocessor/repeat_from_to.hpp>
+#include <boost/spirit/phoenix/tuples.hpp>
+#include <boost/spirit/core/assert.hpp>
+#include <boost/spirit/utility/grammar_def_fwd.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Spirit predefined maximum grammar start parser limit. This limit defines
+// the maximum number of of possible different parsers exposed from a
+// particular grammar. This number defaults to 3.
+// The actual maximum is rounded up in multiples of 3. Thus, if this value
+// is 4, the actual limit is 6. The ultimate maximum limit in this
+// implementation is 15.
+//
+// It should NOT be greater than PHOENIX_LIMIT!
+//
+///////////////////////////////////////////////////////////////////////////////
+#if !defined(BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT)
+#define BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT PHOENIX_LIMIT
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// ensure BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT <= PHOENIX_LIMIT and
+// BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT <= 15 and
+// BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT > 0
+//
+///////////////////////////////////////////////////////////////////////////////
+BOOST_STATIC_ASSERT(BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT <= PHOENIX_LIMIT);
+BOOST_STATIC_ASSERT(BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT <= 15);
+BOOST_STATIC_ASSERT(BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT > 0);
+
+//////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+struct same {};
+
+///////////////////////////////////////////////////////////////////////////////
+namespace impl {
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // The make_const_pointer meta function allows to generate a T const*
+ // needed to store the pointer to a given start parser from a grammar.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename T0, typename T = T0>
+ struct make_const_pointer {
+
+ private:
+ // T0 shouldn't be of type 'same'
+ BOOST_STATIC_ASSERT((!boost::is_same<T0, same>::value));
+
+ typedef typename boost::mpl::if_c<
+ boost::is_same<T, same>::value,
+ T0 const *,
+ T const *
+ >::type
+ ptr_type;
+
+ public:
+ // If the type in question is phoenix::nil_t, then the returned type
+ // is still phoenix::nil_t, otherwise a constant pointer type to the
+ // inspected type is returned.
+ typedef typename boost::mpl::if_c<
+ boost::is_same<T, phoenix::nil_t>::value,
+ phoenix::nil_t,
+ ptr_type
+ >::type
+ type;
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ template <int N, typename ElementT>
+ struct assign_zero_to_tuple_member {
+
+ template <typename TupleT>
+ static void do_(TupleT &t) { t[phoenix::tuple_index<N>()] = 0; }
+ };
+
+ template <int N>
+ struct assign_zero_to_tuple_member<N, phoenix::nil_t> {
+
+ template <typename TupleT>
+ static void do_(TupleT& /*t*/) {}
+ };
+
+ struct phoenix_nil_type {
+
+ typedef phoenix::nil_t type;
+ };
+
+ template <int N>
+ struct init_tuple_member {
+
+ template <typename TupleT>
+ static void
+ do_(TupleT &t)
+ {
+ typedef typename boost::mpl::eval_if_c<
+ (N < TupleT::length),
+ phoenix::tuple_element<N, TupleT>,
+ phoenix_nil_type
+ >::type
+ element_type;
+
+ assign_zero_to_tuple_member<N, element_type>::do_(t);
+ }
+ };
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace impl
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// grammar_def class
+//
+// This class may be used as a base class for the embedded definition
+// class inside the grammar<> derived user grammar.
+// It exposes the two functions needed for start rule access:
+//
+// rule<> const &start() const;
+//
+// and
+//
+// template <int N>
+// rule<> const *get_start_parser() const;
+//
+// Additionally it exposes a set o 'start_parsers' functions, which are to
+// be called by the user to define the parsers to use as start parsers
+// of the given grammar.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+ typename T,
+ BOOST_PP_ENUM_PARAMS(
+ BOOST_PP_DEC(BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT_A), typename T)
+>
+class grammar_def {
+
+private:
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // This generates the full tuple type from the given template parameters
+ // T, T0, ...
+ //
+ // typedef phoenix::tuple<
+ // typename impl::make_const_pointer<T>::type,
+ // typename impl::make_const_pointer<T, T0>::type,
+ // ...
+ // > tuple_t;
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ #define BOOST_SPIRIT_GRAMMARDEF_TUPLE_PARAM(z, N, _) \
+ typename impl::make_const_pointer<T, BOOST_PP_CAT(T, N)>::type \
+ /**/
+
+ typedef phoenix::tuple<
+ typename impl::make_const_pointer<T>::type,
+ BOOST_PP_ENUM(
+ BOOST_PP_DEC(BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT_A),
+ BOOST_SPIRIT_GRAMMARDEF_TUPLE_PARAM,
+ _
+ )
+ > tuple_t;
+
+ #undef BOOST_SPIRIT_GRAMMARDEF_TUPLE_PARAM
+ ///////////////////////////////////////////////////////////////////////////
+
+protected:
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // This generates a sequence of 'start_parsers' functions with increasing
+ // number of arguments, which allow to initialize the tuple members with
+ // the pointers to the start parsers of the grammar:
+ //
+ // template <typename TC0, ...>
+ // void start_parsers (TC0 const &t0, ...)
+ // {
+ // using phoenix::tuple_index_names::_1;
+ // t[_1] = &t0;
+ // ...
+ // }
+ //
+ // where a TC0 const* must be convertible to a T0 const*
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ #define BOOST_SPIRIT_GRAMMARDEF_ENUM_PARAMS(z, N, _) \
+ BOOST_PP_CAT(TC, N) const &BOOST_PP_CAT(t, N) \
+ /**/
+ #define BOOST_SPIRIT_GRAMMARDEF_ENUM_ASSIGN(z, N, _) \
+ using phoenix::tuple_index_names::BOOST_PP_CAT(_, BOOST_PP_INC(N)); \
+ t[BOOST_PP_CAT(_, BOOST_PP_INC(N))] = &BOOST_PP_CAT(t, N); \
+ /**/
+ #define BOOST_SPIRIT_GRAMMARDEF_ENUM_START(z, N, _) \
+ template <BOOST_PP_ENUM_PARAMS_Z(z, BOOST_PP_INC(N), typename TC)> \
+ void \
+ start_parsers(BOOST_PP_ENUM_ ## z(BOOST_PP_INC(N), \
+ BOOST_SPIRIT_GRAMMARDEF_ENUM_PARAMS, _) ) \
+ { \
+ BOOST_PP_REPEAT_ ## z(BOOST_PP_INC(N), \
+ BOOST_SPIRIT_GRAMMARDEF_ENUM_ASSIGN, _) \
+ } \
+ /**/
+
+ BOOST_PP_REPEAT(
+ BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT_A,
+ BOOST_SPIRIT_GRAMMARDEF_ENUM_START, _)
+
+ #undef BOOST_SPIRIT_GRAMMARDEF_ENUM_START
+ #undef BOOST_SPIRIT_GRAMMARDEF_ENUM_ASSIGN
+ #undef BOOST_SPIRIT_GRAMMARDEF_ENUM_PARAMS
+ ///////////////////////////////////////////////////////////////////////////
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // This generates some initialization code, which allows to initialize all
+ // used tuple members to 0 (zero):
+ //
+ // t[_1] = 0;
+ // impl::init_tuple_member<1>::do_(t);
+ // ...
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ #define BOOST_SPIRIT_GRAMMARDEF_ENUM_INIT(z, N, _) \
+ impl::init_tuple_member<N>::do_(t); \
+ /**/
+
+ grammar_def()
+ {
+ using phoenix::tuple_index_names::_1;
+ t[_1] = 0;
+ BOOST_PP_REPEAT_FROM_TO(
+ 1, BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT_A,
+ BOOST_SPIRIT_GRAMMARDEF_ENUM_INIT, _)
+ }
+
+ #undef BOOST_SPIRIT_GRAMMARDEF_ENUM_INIT
+ ///////////////////////////////////////////////////////////////////////////
+
+public:
+ T const &
+ start() const
+ {
+ // If the following assertion is fired, you have probably forgot to call
+ // the start_parser() function from inside the constructor of your
+ // embedded definition class to initialize the start parsers to be exposed
+ // from your grammar.
+ using phoenix::tuple_index_names::_1;
+ BOOST_SPIRIT_ASSERT(0 != t[_1]);
+ return *t[_1];
+ }
+
+ template <int N>
+ typename phoenix::tuple_element<N, tuple_t>::crtype
+ get_start_parser() const
+ {
+ // If the following expression yields a compiler error, you have probably
+ // tried to access a start rule, which isn't exposed as such from your
+ // grammar.
+ BOOST_STATIC_ASSERT(N > 0 && N < tuple_t::length);
+
+ // If the following assertion is fired, you have probably forgot to call
+ // the start_parser() function from inside the constructor of your
+ // embedded definition class to initialize the start parsers to be exposed
+ // from your grammar.
+ // Another reason may be, that there is a count mismatch between
+ // the number of template parameters to the grammar_def<> class and the
+ // number of parameters used while calling start_parsers().
+ BOOST_SPIRIT_ASSERT(0 != t[phoenix::tuple_index<N>()]);
+
+ return t[phoenix::tuple_index<N>()];
+ }
+
+private:
+ tuple_t t;
+};
+
+#undef BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT_A
+
+}} // namespace boost::spirit
+
+#endif // BOOST_SPIRIT_GRAMMAR_DEF_HPP
diff --git a/boost/boost/spirit/utility/grammar_def_fwd.hpp b/boost/boost/spirit/utility/grammar_def_fwd.hpp
new file mode 100644
index 00000000000..3cb4c6a5df8
--- /dev/null
+++ b/boost/boost/spirit/utility/grammar_def_fwd.hpp
@@ -0,0 +1,48 @@
+/*=============================================================================
+ Copyright (c) 2006 Tobias Schwinger
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_GRAMMAR_DEF_FWD_HPP)
+#define BOOST_SPIRIT_GRAMMAR_DEF_FWD_HPP
+
+#include <boost/spirit/phoenix/tuples.hpp>
+
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/facilities/intercept.hpp>
+
+#if !defined(BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT)
+#define BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT PHOENIX_LIMIT
+#endif
+
+// Calculate an integer rounded up to the nearest integer dividable by 3
+#if BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT > 12
+#define BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT_A 15
+#elif BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT > 9
+#define BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT_A 12
+#elif BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT > 6
+#define BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT_A 9
+#elif BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT > 3
+#define BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT_A 6
+#else
+#define BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT_A 3
+#endif
+
+namespace boost { namespace spirit {
+
+ template <
+ typename T,
+ BOOST_PP_ENUM_BINARY_PARAMS(
+ BOOST_PP_DEC(BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT_A),
+ typename T, = phoenix::nil_t BOOST_PP_INTERCEPT
+ )
+ >
+ class grammar_def;
+
+}} // namespace boost::spirit
+
+#endif
+
diff --git a/boost/boost/spirit/utility/impl/chset.ipp b/boost/boost/spirit/utility/impl/chset.ipp
new file mode 100644
index 00000000000..91d11a4dcb0
--- /dev/null
+++ b/boost/boost/spirit/utility/impl/chset.ipp
@@ -0,0 +1,362 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Joel de Guzman
+ Copyright (c) 2001-2003 Daniel Nuffer
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_CHSET_IPP
+#define BOOST_SPIRIT_CHSET_IPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/limits.hpp>
+#include <boost/spirit/utility/chset.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// chset class
+//
+///////////////////////////////////////////////////////////////////////////////
+namespace utility { namespace impl {
+ template <typename CharT>
+ inline void
+ detach(boost::shared_ptr<basic_chset<CharT> >& ptr)
+ {
+ if (!ptr.unique())
+ ptr = boost::shared_ptr<basic_chset<CharT> >
+ (new basic_chset<CharT>(*ptr));
+ }
+
+ template <typename CharT>
+ inline void
+ detach_clear(boost::shared_ptr<basic_chset<CharT> >& ptr)
+ {
+ if (ptr.unique())
+ ptr->clear();
+ else
+ ptr.reset(new basic_chset<CharT>());
+ }
+
+ template <typename CharT, typename CharT2>
+ void construct_chset(boost::shared_ptr<basic_chset<CharT> >& ptr,
+ CharT2 const* definition)
+ {
+ CharT2 ch = *definition++;
+ while (ch)
+ {
+ CharT2 next = *definition++;
+ if (next == '-')
+ {
+ next = *definition++;
+ if (next == 0)
+ {
+ ptr->set(ch);
+ ptr->set('-');
+ break;
+ }
+ ptr->set(ch, next);
+ }
+ else
+ {
+ ptr->set(ch);
+ }
+ ch = next;
+ }
+ }
+
+ //////////////////////////////////
+
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+
+ template <typename CharT, typename FakeT>
+ void chset_negated_set(boost::shared_ptr<basic_chset<CharT> > &ptr, chlit<CharT> const &ch,
+ FakeT)
+ {
+ if(ch.ch != (std::numeric_limits<CharT>::min)()) {
+ ptr->set((std::numeric_limits<CharT>::min)(), ch.ch - 1);
+ }
+ if(ch.ch != (std::numeric_limits<CharT>::max)()) {
+ ptr->set(ch.ch + 1, (std::numeric_limits<CharT>::max)());
+ }
+ }
+
+ template <typename CharT, typename FakeT>
+ void chset_negated_set(boost::shared_ptr<basic_chset<CharT> > &ptr,
+ spirit::range<CharT> const &rng, FakeT)
+ {
+ if(rng.first != (std::numeric_limits<CharT>::min)()) {
+ ptr->set((std::numeric_limits<CharT>::min)(), rng.first - 1);
+ }
+ if(rng.last != (std::numeric_limits<CharT>::max)()) {
+ ptr->set(rng.last + 1, (std::numeric_limits<CharT>::max)());
+ }
+ }
+
+#endif // BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+
+//////////////////////////////////
+
+}} // namespace utility::impl
+
+template <typename CharT>
+inline chset<CharT>::chset()
+: ptr(new basic_chset<CharT>()) {}
+
+template <typename CharT>
+inline chset<CharT>::chset(chset const& arg_)
+: ptr(new basic_chset<CharT>(*arg_.ptr)) {}
+
+template <typename CharT>
+inline chset<CharT>::chset(CharT arg_)
+: ptr(new basic_chset<CharT>())
+{ ptr->set(arg_); }
+
+template <typename CharT>
+inline chset<CharT>::chset(anychar_parser /*arg*/)
+: ptr(new basic_chset<CharT>())
+{
+ ptr->set(
+ (std::numeric_limits<CharT>::min)(),
+ (std::numeric_limits<CharT>::max)()
+ );
+}
+
+template <typename CharT>
+inline chset<CharT>::chset(nothing_parser arg_)
+: ptr(new basic_chset<CharT>()) {}
+
+template <typename CharT>
+inline chset<CharT>::chset(chlit<CharT> const& arg_)
+: ptr(new basic_chset<CharT>())
+{ ptr->set(arg_.ch); }
+
+template <typename CharT>
+inline chset<CharT>::chset(range<CharT> const& arg_)
+: ptr(new basic_chset<CharT>())
+{ ptr->set(arg_.first, arg_.last); }
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+
+template <typename CharT>
+inline chset<CharT>::chset(negated_char_parser<chlit<CharT> > const& arg_)
+: ptr(new basic_chset<CharT>())
+{
+ set(arg_);
+}
+
+template <typename CharT>
+inline chset<CharT>::chset(negated_char_parser<range<CharT> > const& arg_)
+: ptr(new basic_chset<CharT>())
+{
+ set(arg_);
+}
+
+#endif // !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+
+template <typename CharT>
+inline chset<CharT>::~chset() {}
+
+template <typename CharT>
+inline chset<CharT>&
+chset<CharT>::operator=(chset const& rhs)
+{
+ ptr = rhs.ptr;
+ return *this;
+}
+
+template <typename CharT>
+inline chset<CharT>&
+chset<CharT>::operator=(CharT rhs)
+{
+ utility::impl::detach_clear(ptr);
+ ptr->set(rhs);
+ return *this;
+}
+
+template <typename CharT>
+inline chset<CharT>&
+chset<CharT>::operator=(anychar_parser rhs)
+{
+ utility::impl::detach_clear(ptr);
+ ptr->set(
+ (std::numeric_limits<CharT>::min)(),
+ (std::numeric_limits<CharT>::max)()
+ );
+ return *this;
+}
+
+template <typename CharT>
+inline chset<CharT>&
+chset<CharT>::operator=(nothing_parser rhs)
+{
+ utility::impl::detach_clear(ptr);
+ return *this;
+}
+
+template <typename CharT>
+inline chset<CharT>&
+chset<CharT>::operator=(chlit<CharT> const& rhs)
+{
+ utility::impl::detach_clear(ptr);
+ ptr->set(rhs.ch);
+ return *this;
+}
+
+template <typename CharT>
+inline chset<CharT>&
+chset<CharT>::operator=(range<CharT> const& rhs)
+{
+ utility::impl::detach_clear(ptr);
+ ptr->set(rhs.first, rhs.last);
+ return *this;
+}
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+
+template <typename CharT>
+inline chset<CharT>&
+chset<CharT>::operator=(negated_char_parser<chlit<CharT> > const& rhs)
+{
+ utility::impl::detach_clear(ptr);
+ set(rhs);
+ return *this;
+}
+
+template <typename CharT>
+inline chset<CharT>&
+chset<CharT>::operator=(negated_char_parser<range<CharT> > const& rhs)
+{
+ utility::impl::detach_clear(ptr);
+ set(rhs);
+ return *this;
+}
+
+#endif // !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+
+template <typename CharT>
+inline void
+chset<CharT>::set(range<CharT> const& arg_)
+{
+ utility::impl::detach(ptr);
+ ptr->set(arg_.first, arg_.last);
+}
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+
+template <typename CharT>
+inline void
+chset<CharT>::set(negated_char_parser<chlit<CharT> > const& arg_)
+{
+ utility::impl::detach(ptr);
+
+ if(arg_.positive.ch != (std::numeric_limits<CharT>::min)()) {
+ ptr->set((std::numeric_limits<CharT>::min)(), arg_.positive.ch - 1);
+ }
+ if(arg_.positive.ch != (std::numeric_limits<CharT>::max)()) {
+ ptr->set(arg_.positive.ch + 1, (std::numeric_limits<CharT>::max)());
+ }
+}
+
+template <typename CharT>
+inline void
+chset<CharT>::set(negated_char_parser<range<CharT> > const& arg_)
+{
+ utility::impl::detach(ptr);
+
+ if(arg_.positive.first != (std::numeric_limits<CharT>::min)()) {
+ ptr->set((std::numeric_limits<CharT>::min)(), arg_.positive.first - 1);
+ }
+ if(arg_.positive.last != (std::numeric_limits<CharT>::max)()) {
+ ptr->set(arg_.positive.last + 1, (std::numeric_limits<CharT>::max)());
+ }
+}
+
+#endif // !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+
+template <typename CharT>
+inline void
+chset<CharT>::clear(range<CharT> const& arg_)
+{
+ utility::impl::detach(ptr);
+ ptr->clear(arg_.first, arg_.last);
+}
+
+template <typename CharT>
+inline void
+chset<CharT>::clear(negated_char_parser<range<CharT> > const& arg_)
+{
+ utility::impl::detach(ptr);
+
+ if(arg_.positive.first != (std::numeric_limits<CharT>::min)()) {
+ ptr->clear((std::numeric_limits<CharT>::min)(), arg_.positive.first - 1);
+ }
+ if(arg_.positive.last != (std::numeric_limits<CharT>::max)()) {
+ ptr->clear(arg_.positive.last + 1, (std::numeric_limits<CharT>::max)());
+ }
+}
+
+template <typename CharT>
+inline bool
+chset<CharT>::test(CharT ch) const
+{ return ptr->test(ch); }
+
+template <typename CharT>
+inline chset<CharT>&
+chset<CharT>::inverse()
+{
+ utility::impl::detach(ptr);
+ ptr->inverse();
+ return *this;
+}
+
+template <typename CharT>
+inline void
+chset<CharT>::swap(chset& x)
+{ ptr.swap(x.ptr); }
+
+template <typename CharT>
+inline chset<CharT>&
+chset<CharT>::operator|=(chset const& x)
+{
+ utility::impl::detach(ptr);
+ *ptr |= *x.ptr;
+ return *this;
+}
+
+template <typename CharT>
+inline chset<CharT>&
+chset<CharT>::operator&=(chset const& x)
+{
+ utility::impl::detach(ptr);
+ *ptr &= *x.ptr;
+ return *this;
+}
+
+template <typename CharT>
+inline chset<CharT>&
+chset<CharT>::operator-=(chset const& x)
+{
+ utility::impl::detach(ptr);
+ *ptr -= *x.ptr;
+ return *this;
+}
+
+template <typename CharT>
+inline chset<CharT>&
+chset<CharT>::operator^=(chset const& x)
+{
+ utility::impl::detach(ptr);
+ *ptr ^= *x.ptr;
+ return *this;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+}} // namespace boost::spirit
+
+#endif
+
diff --git a/boost/boost/spirit/utility/impl/chset/basic_chset.hpp b/boost/boost/spirit/utility/impl/chset/basic_chset.hpp
new file mode 100644
index 00000000000..57413dc6ca1
--- /dev/null
+++ b/boost/boost/spirit/utility/impl/chset/basic_chset.hpp
@@ -0,0 +1,102 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Joel de Guzman
+ Copyright (c) 2001-2003 Daniel Nuffer
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_BASIC_CHSET_HPP
+#define BOOST_SPIRIT_BASIC_CHSET_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <bitset>
+#include <boost/spirit/utility/impl/chset/range_run.hpp>
+
+namespace boost { namespace spirit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // basic_chset: basic character set implementation using range_run
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename CharT>
+ class basic_chset
+ {
+ public:
+ basic_chset();
+ basic_chset(basic_chset const& arg_);
+
+ bool test(CharT v) const;
+ void set(CharT from, CharT to);
+ void set(CharT c);
+ void clear(CharT from, CharT to);
+ void clear(CharT c);
+ void clear();
+
+ void inverse();
+ void swap(basic_chset& x);
+
+ basic_chset& operator|=(basic_chset const& x);
+ basic_chset& operator&=(basic_chset const& x);
+ basic_chset& operator-=(basic_chset const& x);
+ basic_chset& operator^=(basic_chset const& x);
+
+ private: utility::impl::range_run<CharT> rr;
+ };
+
+ #if (CHAR_BIT == 8)
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // basic_chset: specializations for 8 bit chars using std::bitset
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename CharT>
+ class basic_chset_8bit {
+
+ public:
+ basic_chset_8bit();
+ basic_chset_8bit(basic_chset_8bit const& arg_);
+
+ bool test(CharT v) const;
+ void set(CharT from, CharT to);
+ void set(CharT c);
+ void clear(CharT from, CharT to);
+ void clear(CharT c);
+ void clear();
+
+ void inverse();
+ void swap(basic_chset_8bit& x);
+
+ basic_chset_8bit& operator|=(basic_chset_8bit const& x);
+ basic_chset_8bit& operator&=(basic_chset_8bit const& x);
+ basic_chset_8bit& operator-=(basic_chset_8bit const& x);
+ basic_chset_8bit& operator^=(basic_chset_8bit const& x);
+
+ private: std::bitset<256> bset;
+ };
+
+ /////////////////////////////////
+ template <>
+ class basic_chset<char>
+ : public basic_chset_8bit<char> {};
+
+ /////////////////////////////////
+ template <>
+ class basic_chset<signed char>
+ : public basic_chset_8bit<signed char> {};
+
+ /////////////////////////////////
+ template <>
+ class basic_chset<unsigned char>
+ : public basic_chset_8bit<unsigned char> {};
+
+#endif
+
+}} // namespace boost::spirit
+
+#endif
+
+#include <boost/spirit/utility/impl/chset/basic_chset.ipp>
diff --git a/boost/boost/spirit/utility/impl/chset/basic_chset.ipp b/boost/boost/spirit/utility/impl/chset/basic_chset.ipp
new file mode 100644
index 00000000000..9370e3f8ad5
--- /dev/null
+++ b/boost/boost/spirit/utility/impl/chset/basic_chset.ipp
@@ -0,0 +1,241 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Joel de Guzman
+ Copyright (c) 2001-2003 Daniel Nuffer
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_BASIC_CHSET_IPP
+#define BOOST_SPIRIT_BASIC_CHSET_IPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <bitset>
+#include <boost/spirit/utility/impl/chset/basic_chset.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// basic_chset: character set implementation
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename CharT>
+inline basic_chset<CharT>::basic_chset() {}
+
+//////////////////////////////////
+template <typename CharT>
+inline basic_chset<CharT>::basic_chset(basic_chset const& arg_)
+: rr(arg_.rr) {}
+
+//////////////////////////////////
+template <typename CharT>
+inline bool
+basic_chset<CharT>::test(CharT v) const
+{ return rr.test(v); }
+
+//////////////////////////////////
+template <typename CharT>
+inline void
+basic_chset<CharT>::set(CharT from, CharT to)
+{ rr.set(utility::impl::range<CharT>(from, to)); }
+
+//////////////////////////////////
+template <typename CharT>
+inline void
+basic_chset<CharT>::set(CharT c)
+{ rr.set(utility::impl::range<CharT>(c, c)); }
+
+//////////////////////////////////
+template <typename CharT>
+inline void
+basic_chset<CharT>::clear(CharT from, CharT to)
+{ rr.clear(utility::impl::range<CharT>(from, to)); }
+
+//////////////////////////////////
+template <typename CharT>
+inline void
+basic_chset<CharT>::clear()
+{ rr.clear(); }
+
+/////////////////////////////////
+template <typename CharT>
+inline void
+basic_chset<CharT>::inverse()
+{
+ basic_chset inv;
+ inv.set(
+ (std::numeric_limits<CharT>::min)(),
+ (std::numeric_limits<CharT>::max)()
+ );
+ inv -= *this;
+ swap(inv);
+}
+
+/////////////////////////////////
+template <typename CharT>
+inline void
+basic_chset<CharT>::swap(basic_chset& x)
+{ rr.swap(x.rr); }
+
+/////////////////////////////////
+template <typename CharT>
+inline basic_chset<CharT>&
+basic_chset<CharT>::operator|=(basic_chset<CharT> const& x)
+{
+ typedef typename utility::impl::range_run<CharT>::const_iterator const_iterator;
+ for (const_iterator iter = x.rr.begin(); iter != x.rr.end(); ++iter)
+ rr.set(*iter);
+ return *this;
+}
+
+/////////////////////////////////
+template <typename CharT>
+inline basic_chset<CharT>&
+basic_chset<CharT>::operator&=(basic_chset<CharT> const& x)
+{
+ basic_chset inv;
+ inv.set(
+ (std::numeric_limits<CharT>::min)(),
+ (std::numeric_limits<CharT>::max)()
+ );
+ inv -= x;
+ *this -= inv;
+ return *this;
+}
+
+/////////////////////////////////
+template <typename CharT>
+inline basic_chset<CharT>&
+basic_chset<CharT>::operator-=(basic_chset<CharT> const& x)
+{
+ typedef typename utility::impl::range_run<CharT>::const_iterator const_iterator;
+ for (const_iterator iter = x.rr.begin(); iter != x.rr.end(); ++iter)
+ rr.clear(*iter);
+ return *this;
+}
+
+/////////////////////////////////
+template <typename CharT>
+inline basic_chset<CharT>&
+basic_chset<CharT>::operator^=(basic_chset<CharT> const& x)
+{
+ basic_chset bma = x;
+ bma -= *this;
+ *this -= x;
+ *this |= bma;
+ return *this;
+}
+
+#if (CHAR_BIT == 8)
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// basic_chset: specializations for 8 bit chars using std::bitset
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename CharT>
+inline basic_chset_8bit<CharT>::basic_chset_8bit() {}
+
+/////////////////////////////////
+template <typename CharT>
+inline basic_chset_8bit<CharT>::basic_chset_8bit(basic_chset_8bit const& arg_)
+: bset(arg_.bset) {}
+
+/////////////////////////////////
+template <typename CharT>
+inline bool
+basic_chset_8bit<CharT>::test(CharT v) const
+{ return bset.test((unsigned char)v); }
+
+/////////////////////////////////
+template <typename CharT>
+inline void
+basic_chset_8bit<CharT>::set(CharT from, CharT to)
+{
+ for (int i = from; i <= to; ++i)
+ bset.set((unsigned char)i);
+}
+
+/////////////////////////////////
+template <typename CharT>
+inline void
+basic_chset_8bit<CharT>::set(CharT c)
+{ bset.set((unsigned char)c); }
+
+/////////////////////////////////
+template <typename CharT>
+inline void
+basic_chset_8bit<CharT>::clear(CharT from, CharT to)
+{
+ for (int i = from; i <= to; ++i)
+ bset.reset((unsigned char)i);
+}
+
+/////////////////////////////////
+template <typename CharT>
+inline void
+basic_chset_8bit<CharT>::clear(CharT c)
+{ bset.reset((unsigned char)c); }
+
+/////////////////////////////////
+template <typename CharT>
+inline void
+basic_chset_8bit<CharT>::clear()
+{ bset.reset(); }
+
+/////////////////////////////////
+template <typename CharT>
+inline void
+basic_chset_8bit<CharT>::inverse()
+{ bset.flip(); }
+
+/////////////////////////////////
+template <typename CharT>
+inline void
+basic_chset_8bit<CharT>::swap(basic_chset_8bit& x)
+{ std::swap(bset, x.bset); }
+
+/////////////////////////////////
+template <typename CharT>
+inline basic_chset_8bit<CharT>&
+basic_chset_8bit<CharT>::operator|=(basic_chset_8bit const& x)
+{
+ bset |= x.bset;
+ return *this;
+}
+
+/////////////////////////////////
+template <typename CharT>
+inline basic_chset_8bit<CharT>&
+basic_chset_8bit<CharT>::operator&=(basic_chset_8bit const& x)
+{
+ bset &= x.bset;
+ return *this;
+}
+
+/////////////////////////////////
+template <typename CharT>
+inline basic_chset_8bit<CharT>&
+basic_chset_8bit<CharT>::operator-=(basic_chset_8bit const& x)
+{
+ bset &= ~x.bset;
+ return *this;
+}
+
+/////////////////////////////////
+template <typename CharT>
+inline basic_chset_8bit<CharT>&
+basic_chset_8bit<CharT>::operator^=(basic_chset_8bit const& x)
+{
+ bset ^= x.bset;
+ return *this;
+}
+
+#endif
+}} // namespace boost::spirit
+
+#endif
+
diff --git a/boost/boost/spirit/utility/impl/chset/range_run.hpp b/boost/boost/spirit/utility/impl/chset/range_run.hpp
new file mode 100644
index 00000000000..320e949e1ff
--- /dev/null
+++ b/boost/boost/spirit/utility/impl/chset/range_run.hpp
@@ -0,0 +1,118 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Joel de Guzman
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_RANGE_RUN_HPP
+#define BOOST_SPIRIT_RANGE_RUN_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <vector>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace utility { namespace impl {
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // range class
+ //
+ // Implements a closed range of values. This class is used in
+ // the implementation of the range_run class.
+ //
+ // { Low level implementation detail }
+ // { Not to be confused with boost::spirit::range }
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename CharT>
+ struct range {
+
+ range(CharT first, CharT last);
+
+ bool is_valid() const;
+ bool includes(CharT v) const;
+ bool includes(range const& r) const;
+ bool overlaps(range const& r) const;
+ void merge(range const& r);
+
+ CharT first;
+ CharT last;
+ };
+
+ //////////////////////////////////
+ template <typename CharT>
+ struct range_char_compare {
+
+ bool operator()(range<CharT> const& x, const CharT y) const
+ { return x.first < y; }
+
+ bool operator()(const CharT x, range<CharT> const& y) const
+ { return x < y.first; }
+
+ // This additional operator is required for the checked STL shipped
+ // with VC8 testing the ordering of the iterators passed to the
+ // std::lower_bound algo this range_char_compare<> predicate is passed
+ // to.
+ bool operator()(range<CharT> const& x, range<CharT> const& y) const
+ { return x.first < y.first; }
+ };
+
+ //////////////////////////////////
+ template <typename CharT>
+ struct range_compare {
+
+ bool operator()(range<CharT> const& x, range<CharT> const& y) const
+ { return x.first < y.first; }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // range_run
+ //
+ // An implementation of a sparse bit (boolean) set. The set uses
+ // a sorted vector of disjoint ranges. This class implements the
+ // bare minimum essentials from which the full range of set
+ // operators can be implemented. The set is constructed from
+ // ranges. Internally, adjacent or overlapping ranges are
+ // coalesced.
+ //
+ // range_runs are very space-economical in situations where there
+ // are lots of ranges and a few individual disjoint values.
+ // Searching is O(log n) where n is the number of ranges.
+ //
+ // { Low level implementation detail }
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename CharT>
+ class range_run {
+
+ public:
+
+ typedef range<CharT> range_t;
+ typedef std::vector<range_t> run_t;
+ typedef typename run_t::iterator iterator;
+ typedef typename run_t::const_iterator const_iterator;
+
+ void swap(range_run& rr);
+ bool test(CharT v) const;
+ void set(range_t const& r);
+ void clear(range_t const& r);
+ void clear();
+
+ const_iterator begin() const;
+ const_iterator end() const;
+
+ private:
+
+ void merge(iterator iter, range_t const& r);
+
+ run_t run;
+ };
+
+}}}} // namespace boost::spirit::utility::impl
+
+#endif
+
+#include <boost/spirit/utility/impl/chset/range_run.ipp>
diff --git a/boost/boost/spirit/utility/impl/chset/range_run.ipp b/boost/boost/spirit/utility/impl/chset/range_run.ipp
new file mode 100644
index 00000000000..45491bc3fb3
--- /dev/null
+++ b/boost/boost/spirit/utility/impl/chset/range_run.ipp
@@ -0,0 +1,212 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Joel de Guzman
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_RANGE_RUN_IPP
+#define BOOST_SPIRIT_RANGE_RUN_IPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <algorithm> // for std::lower_bound
+#include <boost/spirit/core/assert.hpp> // for BOOST_SPIRIT_ASSERT
+#include <boost/spirit/utility/impl/chset/range_run.hpp>
+#include <boost/spirit/debug.hpp>
+#include <boost/limits.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+ namespace utility { namespace impl {
+
+ ///////////////////////////////////////////////////////////////////////
+ //
+ // range class implementation
+ //
+ ///////////////////////////////////////////////////////////////////////
+ template <typename CharT>
+ inline range<CharT>::range(CharT first_, CharT last_)
+ : first(first_), last(last_) {}
+
+ //////////////////////////////////
+ template <typename CharT>
+ inline bool
+ range<CharT>::is_valid() const
+ { return first <= last; }
+
+ //////////////////////////////////
+ template <typename CharT>
+ inline bool
+ range<CharT>::includes(range const& r) const
+ { return (first <= r.first) && (last >= r.last); }
+
+ //////////////////////////////////
+ template <typename CharT>
+ inline bool
+ range<CharT>::includes(CharT v) const
+ { return (first <= v) && (last >= v); }
+
+ //////////////////////////////////
+ template <typename CharT>
+ inline bool
+ range<CharT>::overlaps(range const& r) const
+ {
+ CharT decr_first =
+ first == (std::numeric_limits<CharT>::min)() ? first : first-1;
+ CharT incr_last =
+ last == (std::numeric_limits<CharT>::max)() ? last : last+1;
+
+ return (decr_first <= r.last) && (incr_last >= r.first);
+ }
+
+ //////////////////////////////////
+ template <typename CharT>
+ inline void
+ range<CharT>::merge(range const& r)
+ {
+ first = (std::min)(first, r.first);
+ last = (std::max)(last, r.last);
+ }
+
+ ///////////////////////////////////////////////////////////////////////
+ //
+ // range_run class implementation
+ //
+ ///////////////////////////////////////////////////////////////////////
+ template <typename CharT>
+ inline bool
+ range_run<CharT>::test(CharT v) const
+ {
+ if (!run.empty())
+ {
+ const_iterator iter =
+ std::lower_bound(
+ run.begin(), run.end(), v,
+ range_char_compare<CharT>()
+ );
+
+ if (iter != run.end() && iter->includes(v))
+ return true;
+ if (iter != run.begin())
+ return (--iter)->includes(v);
+ }
+ return false;
+ }
+
+ //////////////////////////////////
+ template <typename CharT>
+ inline void
+ range_run<CharT>::swap(range_run& rr)
+ { run.swap(rr.run); }
+
+ //////////////////////////////////
+ template <typename CharT>
+ void
+ range_run<CharT>::merge(iterator iter, range<CharT> const& r)
+ {
+ iter->merge(r);
+ iterator i = iter + 1;
+
+ while (i != run.end() && iter->overlaps(*i))
+ iter->merge(*i++);
+
+ run.erase(iter+1, i);
+ }
+
+ //////////////////////////////////
+ template <typename CharT>
+ void
+ range_run<CharT>::set(range<CharT> const& r)
+ {
+ BOOST_SPIRIT_ASSERT(r.is_valid());
+ if (!run.empty())
+ {
+ iterator iter =
+ std::lower_bound(
+ run.begin(), run.end(), r,
+ range_compare<CharT>()
+ );
+
+ if (iter != run.end() && iter->includes(r) ||
+ ((iter != run.begin()) && (iter - 1)->includes(r)))
+ return;
+
+ if (iter != run.begin() && (iter - 1)->overlaps(r))
+ merge(--iter, r);
+
+ else if (iter != run.end() && iter->overlaps(r))
+ merge(iter, r);
+
+ else
+ run.insert(iter, r);
+ }
+ else
+ {
+ run.push_back(r);
+ }
+ }
+
+ //////////////////////////////////
+ template <typename CharT>
+ void
+ range_run<CharT>::clear(range<CharT> const& r)
+ {
+ BOOST_SPIRIT_ASSERT(r.is_valid());
+ if (!run.empty())
+ {
+ iterator iter =
+ std::lower_bound(
+ run.begin(), run.end(), r,
+ range_compare<CharT>()
+ );
+
+ iterator left_iter;
+
+ if ((iter != run.begin()) &&
+ (left_iter = (iter - 1))->includes(r.first))
+ if (left_iter->last > r.last)
+ {
+ CharT save_last = left_iter->last;
+ left_iter->last = r.first-1;
+ run.insert(iter, range<CharT>(r.last+1, save_last));
+ return;
+ }
+ else
+ {
+ left_iter->last = r.first-1;
+ }
+
+ iterator i = iter;
+ while (i != run.end() && r.includes(*i))
+ i++;
+ if (i != run.end() && i->includes(r.last))
+ i->first = r.last+1;
+ run.erase(iter, i);
+ }
+ }
+
+ //////////////////////////////////
+ template <typename CharT>
+ inline void
+ range_run<CharT>::clear()
+ { run.clear(); }
+
+ //////////////////////////////////
+ template <typename CharT>
+ inline typename range_run<CharT>::const_iterator
+ range_run<CharT>::begin() const
+ { return run.begin(); }
+
+ //////////////////////////////////
+ template <typename CharT>
+ inline typename range_run<CharT>::const_iterator
+ range_run<CharT>::end() const
+ { return run.end(); }
+
+ }} // namespace utility::impl
+
+}} // namespace boost::spirit
+
+#endif
diff --git a/boost/boost/spirit/utility/impl/chset_operators.ipp b/boost/boost/spirit/utility/impl/chset_operators.ipp
new file mode 100644
index 00000000000..dddbcea07a3
--- /dev/null
+++ b/boost/boost/spirit/utility/impl/chset_operators.ipp
@@ -0,0 +1,662 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Joel de Guzman
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_CHSET_OPERATORS_IPP
+#define BOOST_SPIRIT_CHSET_OPERATORS_IPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/limits.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// chset free operators implementation
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator|(chset<CharT> const& a, chset<CharT> const& b)
+{
+ return chset<CharT>(a) |= b;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator-(chset<CharT> const& a, chset<CharT> const& b)
+{
+ return chset<CharT>(a) -= b;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator~(chset<CharT> const& a)
+{
+ return chset<CharT>(a).inverse();
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator&(chset<CharT> const& a, chset<CharT> const& b)
+{
+ return chset<CharT>(a) &= b;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator^(chset<CharT> const& a, chset<CharT> const& b)
+{
+ return chset<CharT>(a) ^= b;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// range <--> chset free operators implementation
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator|(chset<CharT> const& a, range<CharT> const& b)
+{
+ chset<CharT> a_(a);
+ a_.set(b);
+ return a_;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator&(chset<CharT> const& a, range<CharT> const& b)
+{
+ chset<CharT> a_(a);
+ if(b.first != (std::numeric_limits<CharT>::min)()) {
+ a_.clear(range<CharT>((std::numeric_limits<CharT>::min)(), b.first - 1));
+ }
+ if(b.last != (std::numeric_limits<CharT>::max)()) {
+ a_.clear(range<CharT>(b.last + 1, (std::numeric_limits<CharT>::max)()));
+ }
+ return a_;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator-(chset<CharT> const& a, range<CharT> const& b)
+{
+ chset<CharT> a_(a);
+ a_.clear(b);
+ return a_;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator^(chset<CharT> const& a, range<CharT> const& b)
+{
+ return a ^ chset<CharT>(b);
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator|(range<CharT> const& a, chset<CharT> const& b)
+{
+ chset<CharT> b_(b);
+ b_.set(a);
+ return b_;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator&(range<CharT> const& a, chset<CharT> const& b)
+{
+ chset<CharT> b_(b);
+ if(a.first != (std::numeric_limits<CharT>::min)()) {
+ b_.clear(range<CharT>((std::numeric_limits<CharT>::min)(), a.first - 1));
+ }
+ if(a.last != (std::numeric_limits<CharT>::max)()) {
+ b_.clear(range<CharT>(a.last + 1, (std::numeric_limits<CharT>::max)()));
+ }
+ return b_;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator-(range<CharT> const& a, chset<CharT> const& b)
+{
+ return chset<CharT>(a) - b;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator^(range<CharT> const& a, chset<CharT> const& b)
+{
+ return chset<CharT>(a) ^ b;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// literal primitives <--> chset free operators implementation
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator|(chset<CharT> const& a, CharT b)
+{
+ return a | chset<CharT>(b);
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator&(chset<CharT> const& a, CharT b)
+{
+ return a & chset<CharT>(b);
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator-(chset<CharT> const& a, CharT b)
+{
+ return a - chset<CharT>(b);
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator^(chset<CharT> const& a, CharT b)
+{
+ return a ^ chset<CharT>(b);
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator|(CharT a, chset<CharT> const& b)
+{
+ return chset<CharT>(a) | b;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator&(CharT a, chset<CharT> const& b)
+{
+ return chset<CharT>(a) & b;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator-(CharT a, chset<CharT> const& b)
+{
+ return chset<CharT>(a) - b;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator^(CharT a, chset<CharT> const& b)
+{
+ return chset<CharT>(a) ^ b;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// chlit <--> chset free operators implementation
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator|(chset<CharT> const& a, chlit<CharT> const& b)
+{
+ return a | chset<CharT>(b.ch);
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator&(chset<CharT> const& a, chlit<CharT> const& b)
+{
+ return a & chset<CharT>(b.ch);
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator-(chset<CharT> const& a, chlit<CharT> const& b)
+{
+ return a - chset<CharT>(b.ch);
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator^(chset<CharT> const& a, chlit<CharT> const& b)
+{
+ return a ^ chset<CharT>(b.ch);
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator|(chlit<CharT> const& a, chset<CharT> const& b)
+{
+ return chset<CharT>(a.ch) | b;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator&(chlit<CharT> const& a, chset<CharT> const& b)
+{
+ return chset<CharT>(a.ch) & b;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator-(chlit<CharT> const& a, chset<CharT> const& b)
+{
+ return chset<CharT>(a.ch) - b;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator^(chlit<CharT> const& a, chset<CharT> const& b)
+{
+ return chset<CharT>(a.ch) ^ b;
+}
+
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// negated_char_parser <--> chset free operators implementation
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename CharT, typename ParserT>
+inline chset<CharT>
+operator|(chset<CharT> const& a, negated_char_parser<ParserT> const& b)
+{
+ return a | chset<CharT>(b);
+}
+
+//////////////////////////////////
+template <typename CharT, typename ParserT>
+inline chset<CharT>
+operator&(chset<CharT> const& a, negated_char_parser<ParserT> const& b)
+{
+ return a & chset<CharT>(b);
+}
+
+//////////////////////////////////
+template <typename CharT, typename ParserT>
+inline chset<CharT>
+operator-(chset<CharT> const& a, negated_char_parser<ParserT> const& b)
+{
+ return a - chset<CharT>(b);
+}
+
+//////////////////////////////////
+template <typename CharT, typename ParserT>
+inline chset<CharT>
+operator^(chset<CharT> const& a, negated_char_parser<ParserT> const& b)
+{
+ return a ^ chset<CharT>(b);
+}
+
+//////////////////////////////////
+template <typename CharT, typename ParserT>
+inline chset<CharT>
+operator|(negated_char_parser<ParserT> const& a, chset<CharT> const& b)
+{
+ return chset<CharT>(a) | b;
+}
+
+//////////////////////////////////
+template <typename CharT, typename ParserT>
+inline chset<CharT>
+operator&(negated_char_parser<ParserT> const& a, chset<CharT> const& b)
+{
+ return chset<CharT>(a) & b;
+}
+
+//////////////////////////////////
+template <typename CharT, typename ParserT>
+inline chset<CharT>
+operator-(negated_char_parser<ParserT> const& a, chset<CharT> const& b)
+{
+ return chset<CharT>(a) - b;
+}
+
+//////////////////////////////////
+template <typename CharT, typename ParserT>
+inline chset<CharT>
+operator^(negated_char_parser<ParserT> const& a, chset<CharT> const& b)
+{
+ return chset<CharT>(a) ^ b;
+}
+
+#else // BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// negated_char_parser<range> <--> chset free operators implementation
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator|(chset<CharT> const& a, negated_char_parser<range<CharT> > const& b)
+{
+ return a | chset<CharT>(b);
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator&(chset<CharT> const& a, negated_char_parser<range<CharT> > const& b)
+{
+ return a & chset<CharT>(b);
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator-(chset<CharT> const& a, negated_char_parser<range<CharT> > const& b)
+{
+ return a - chset<CharT>(b);
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator^(chset<CharT> const& a, negated_char_parser<range<CharT> > const& b)
+{
+ return a ^ chset<CharT>(b);
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator|(negated_char_parser<range<CharT> > const& a, chset<CharT> const& b)
+{
+ return chset<CharT>(a) | b;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator&(negated_char_parser<range<CharT> > const& a, chset<CharT> const& b)
+{
+ return chset<CharT>(a) & b;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator-(negated_char_parser<range<CharT> > const& a, chset<CharT> const& b)
+{
+ return chset<CharT>(a) - b;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator^(negated_char_parser<range<CharT> > const& a, chset<CharT> const& b)
+{
+ return chset<CharT>(a) ^ b;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// negated_char_parser<chlit> <--> chset free operators implementation
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator|(chset<CharT> const& a, negated_char_parser<chlit<CharT> > const& b)
+{
+ return a | chset<CharT>(b);
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator&(chset<CharT> const& a, negated_char_parser<chlit<CharT> > const& b)
+{
+ return a & chset<CharT>(b);
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator-(chset<CharT> const& a, negated_char_parser<chlit<CharT> > const& b)
+{
+ return a - chset<CharT>(b);
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator^(chset<CharT> const& a, negated_char_parser<chlit<CharT> > const& b)
+{
+ return a ^ chset<CharT>(b);
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator|(negated_char_parser<chlit<CharT> > const& a, chset<CharT> const& b)
+{
+ return chset<CharT>(a) | b;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator&(negated_char_parser<chlit<CharT> > const& a, chset<CharT> const& b)
+{
+ return chset<CharT>(a) & b;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator-(negated_char_parser<chlit<CharT> > const& a, chset<CharT> const& b)
+{
+ return chset<CharT>(a) - b;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator^(negated_char_parser<chlit<CharT> > const& a, chset<CharT> const& b)
+{
+ return chset<CharT>(a) ^ b;
+}
+
+#endif // BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// anychar_parser <--> chset free operators
+//
+// Where a is chset and b is a anychar_parser, and vice-versa, implements:
+//
+// a | b, a & b, a - b, a ^ b
+//
+///////////////////////////////////////////////////////////////////////////////
+namespace impl {
+
+ template <typename CharT>
+ inline boost::spirit::range<CharT> const&
+ full()
+ {
+ static boost::spirit::range<CharT> full_(
+ (std::numeric_limits<CharT>::min)(),
+ (std::numeric_limits<CharT>::max)());
+ return full_;
+ }
+
+ template <typename CharT>
+ inline boost::spirit::range<CharT> const&
+ empty()
+ {
+ static boost::spirit::range<CharT> empty_;
+ return empty_;
+ }
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator|(chset<CharT> const&, anychar_parser)
+{
+ return chset<CharT>(impl::full<CharT>());
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator&(chset<CharT> const& a, anychar_parser)
+{
+ return a;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator-(chset<CharT> const&, anychar_parser)
+{
+ return chset<CharT>();
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator^(chset<CharT> const& a, anychar_parser)
+{
+ return ~a;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator|(anychar_parser, chset<CharT> const& /*b*/)
+{
+ return chset<CharT>(impl::full<CharT>());
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator&(anychar_parser, chset<CharT> const& b)
+{
+ return b;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator-(anychar_parser, chset<CharT> const& b)
+{
+ return ~b;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator^(anychar_parser, chset<CharT> const& b)
+{
+ return ~b;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// nothing_parser <--> chset free operators implementation
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator|(chset<CharT> const& a, nothing_parser)
+{
+ return a;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator&(chset<CharT> const& /*a*/, nothing_parser)
+{
+ return impl::empty<CharT>();
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator-(chset<CharT> const& a, nothing_parser)
+{
+ return a;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator^(chset<CharT> const& a, nothing_parser)
+{
+ return a;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator|(nothing_parser, chset<CharT> const& b)
+{
+ return b;
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator&(nothing_parser, chset<CharT> const& /*b*/)
+{
+ return impl::empty<CharT>();
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator-(nothing_parser, chset<CharT> const& /*b*/)
+{
+ return impl::empty<CharT>();
+}
+
+//////////////////////////////////
+template <typename CharT>
+inline chset<CharT>
+operator^(nothing_parser, chset<CharT> const& b)
+{
+ return b;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+}} // namespace boost::spirit
+
+#endif
+
diff --git a/boost/boost/spirit/utility/impl/confix.ipp b/boost/boost/spirit/utility/impl/confix.ipp
new file mode 100644
index 00000000000..1b1b5dc21fa
--- /dev/null
+++ b/boost/boost/spirit/utility/impl/confix.ipp
@@ -0,0 +1,217 @@
+/*=============================================================================
+ Copyright (c) 2002-2003 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_CONFIX_IPP
+#define BOOST_SPIRIT_CONFIX_IPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/meta/refactoring.hpp>
+#include <boost/spirit/core/composite/impl/directives.ipp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Types to distinguish nested and non-nested confix parsers
+//
+///////////////////////////////////////////////////////////////////////////////
+struct is_nested {};
+struct non_nested {};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Types to distinguish between confix parsers, which are implicitly lexems
+// and without this behaviour
+//
+///////////////////////////////////////////////////////////////////////////////
+struct is_lexeme {};
+struct non_lexeme {};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// confix_parser_type class implementation
+//
+///////////////////////////////////////////////////////////////////////////////
+namespace impl {
+
+ ///////////////////////////////////////////////////////////////////////////
+ // implicitly insert a lexeme_d into the parsing process
+
+ template <typename LexemeT>
+ struct select_confix_parse_lexeme;
+
+ template <>
+ struct select_confix_parse_lexeme<is_lexeme> {
+
+ template <typename ParserT, typename ScannerT>
+ static typename parser_result<ParserT, ScannerT>::type
+ parse(ParserT const& p, ScannerT const& scan)
+ {
+ typedef typename parser_result<ParserT, ScannerT>::type result_t;
+ return contiguous_parser_parse<result_t>(p, scan, scan);
+ }
+ };
+
+ template <>
+ struct select_confix_parse_lexeme<non_lexeme> {
+
+ template <typename ParserT, typename ScannerT>
+ static typename parser_result<ParserT, ScannerT>::type
+ parse(ParserT const& p, ScannerT const& scan)
+ {
+ return p.parse(scan);
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ // parse confix sequences with refactoring
+
+ template <typename NestedT>
+ struct select_confix_parse_refactor;
+
+ template <>
+ struct select_confix_parse_refactor<is_nested> {
+
+ template <
+ typename LexemeT, typename ParserT, typename ScannerT,
+ typename OpenT, typename ExprT, typename CloseT
+ >
+ static typename parser_result<ParserT, ScannerT>::type
+ parse(
+ LexemeT const &, ParserT const& this_, ScannerT const& scan,
+ OpenT const& open, ExprT const& expr, CloseT const& close)
+ {
+ typedef refactor_action_gen<refactor_unary_gen<> > refactor_t;
+ const refactor_t refactor_body_d = refactor_t(refactor_unary_d);
+
+ return select_confix_parse_lexeme<LexemeT>::parse((
+ open
+ >> (this_ | refactor_body_d[expr - close])
+ >> close
+ ), scan);
+ }
+ };
+
+ template <>
+ struct select_confix_parse_refactor<non_nested> {
+
+ template <
+ typename LexemeT, typename ParserT, typename ScannerT,
+ typename OpenT, typename ExprT, typename CloseT
+ >
+ static typename parser_result<ParserT, ScannerT>::type
+ parse(
+ LexemeT const &, ParserT const& /*this_*/, ScannerT const& scan,
+ OpenT const& open, ExprT const& expr, CloseT const& close)
+ {
+ typedef refactor_action_gen<refactor_unary_gen<> > refactor_t;
+ const refactor_t refactor_body_d = refactor_t(refactor_unary_d);
+
+ return select_confix_parse_lexeme<LexemeT>::parse((
+ open
+ >> refactor_body_d[expr - close]
+ >> close
+ ), scan);
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ // parse confix sequences without refactoring
+
+ template <typename NestedT>
+ struct select_confix_parse_no_refactor;
+
+ template <>
+ struct select_confix_parse_no_refactor<is_nested> {
+
+ template <
+ typename LexemeT, typename ParserT, typename ScannerT,
+ typename OpenT, typename ExprT, typename CloseT
+ >
+ static typename parser_result<ParserT, ScannerT>::type
+ parse(
+ LexemeT const &, ParserT const& this_, ScannerT const& scan,
+ OpenT const& open, ExprT const& expr, CloseT const& close)
+ {
+ return select_confix_parse_lexeme<LexemeT>::parse((
+ open
+ >> (this_ | (expr - close))
+ >> close
+ ), scan);
+ }
+ };
+
+ template <>
+ struct select_confix_parse_no_refactor<non_nested> {
+
+ template <
+ typename LexemeT, typename ParserT, typename ScannerT,
+ typename OpenT, typename ExprT, typename CloseT
+ >
+ static typename parser_result<ParserT, ScannerT>::type
+ parse(
+ LexemeT const &, ParserT const & /*this_*/, ScannerT const& scan,
+ OpenT const& open, ExprT const& expr, CloseT const& close)
+ {
+ return select_confix_parse_lexeme<LexemeT>::parse((
+ open
+ >> (expr - close)
+ >> close
+ ), scan);
+ }
+ };
+
+ // the refactoring is handled by the refactoring parsers, so here there
+ // is no need to pay attention to these issues.
+
+ template <typename CategoryT>
+ struct confix_parser_type {
+
+ template <
+ typename NestedT, typename LexemeT,
+ typename ParserT, typename ScannerT,
+ typename OpenT, typename ExprT, typename CloseT
+ >
+ static typename parser_result<ParserT, ScannerT>::type
+ parse(
+ NestedT const &, LexemeT const &lexeme,
+ ParserT const& this_, ScannerT const& scan,
+ OpenT const& open, ExprT const& expr, CloseT const& close)
+ {
+ return select_confix_parse_refactor<NestedT>::
+ parse(lexeme, this_, scan, open, expr, close);
+ }
+ };
+
+ template <>
+ struct confix_parser_type<plain_parser_category> {
+
+ template <
+ typename NestedT, typename LexemeT,
+ typename ParserT, typename ScannerT,
+ typename OpenT, typename ExprT, typename CloseT
+ >
+ static typename parser_result<ParserT, ScannerT>::type
+ parse(
+ NestedT const &, LexemeT const &lexeme,
+ ParserT const& this_, ScannerT const& scan,
+ OpenT const& open, ExprT const& expr, CloseT const& close)
+ {
+ return select_confix_parse_no_refactor<NestedT>::
+ parse(lexeme, this_, scan, open, expr, close);
+ }
+ };
+
+} // namespace impl
+
+///////////////////////////////////////////////////////////////////////////////
+}} // namespace boost::spirit
+
+#endif
+
diff --git a/boost/boost/spirit/utility/impl/escape_char.ipp b/boost/boost/spirit/utility/impl/escape_char.ipp
new file mode 100644
index 00000000000..85f27daba79
--- /dev/null
+++ b/boost/boost/spirit/utility/impl/escape_char.ipp
@@ -0,0 +1,220 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Daniel Nuffer
+ Copyright (c) 2002-2003 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_ESCAPE_CHAR_IPP
+#define BOOST_SPIRIT_ESCAPE_CHAR_IPP
+
+#include <boost/spirit/core/parser.hpp>
+#include <boost/spirit/core/primitives/numerics.hpp>
+#include <boost/spirit/core/composite/difference.hpp>
+#include <boost/spirit/core/composite/sequence.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// escape_char_parser class
+//
+///////////////////////////////////////////////////////////////////////////////
+
+const unsigned long c_escapes = 1;
+const unsigned long lex_escapes = c_escapes << 1;
+
+//////////////////////////////////
+namespace impl {
+
+ //////////////////////////////////
+#if (defined(BOOST_MSVC) && (BOOST_MSVC <= 1310))
+#pragma warning(push)
+#pragma warning(disable:4127)
+#endif
+ template <unsigned long Flags, typename CharT>
+ struct escape_char_action_parse {
+
+ template <typename ParserT, typename ScannerT>
+ static typename parser_result<ParserT, ScannerT>::type
+ parse(ScannerT const& scan, ParserT const &p)
+ {
+ // Actually decode the escape char.
+ typedef CharT char_t;
+ typedef typename ScannerT::iterator_t iterator_t;
+ typedef typename parser_result<ParserT, ScannerT>::type result_t;
+
+ if (scan.first != scan.last) {
+
+ iterator_t save = scan.first;
+ if (result_t hit = p.subject().parse(scan)) {
+
+ char_t unescaped;
+
+ scan.first = save;
+ if (*scan.first == '\\') {
+
+ ++scan.first;
+ switch (*scan.first) {
+ case 'b': unescaped = '\b'; ++scan.first; break;
+ case 't': unescaped = '\t'; ++scan.first; break;
+ case 'n': unescaped = '\n'; ++scan.first; break;
+ case 'f': unescaped = '\f'; ++scan.first; break;
+ case 'r': unescaped = '\r'; ++scan.first; break;
+ case '"': unescaped = '"'; ++scan.first; break;
+ case '\'': unescaped = '\''; ++scan.first; break;
+ case '\\': unescaped = '\\'; ++scan.first; break;
+
+ case 'x': case 'X':
+ {
+ char_t hex = 0;
+ char_t const lim =
+ (std::numeric_limits<char_t>::max)() >> 4;
+
+ ++scan.first;
+ while (scan.first != scan.last)
+ {
+ char_t c = *scan.first;
+ if (hex > lim && impl::isxdigit_(c))
+ {
+ // overflow detected
+ scan.first = save;
+ return scan.no_match();
+ }
+ if (impl::isdigit_(c))
+ {
+ hex <<= 4;
+ hex |= c - '0';
+ ++scan.first;
+ }
+ else if (impl::isxdigit_(c))
+ {
+ hex <<= 4;
+ c = impl::toupper_(c);
+ hex |= c - 'A' + 0xA;
+ ++scan.first;
+ }
+ else
+ {
+ break; // reached the end of the number
+ }
+ }
+ unescaped = hex;
+ }
+ break;
+
+ case '0': case '1': case '2': case '3':
+ case '4': case '5': case '6': case '7':
+ {
+ char_t oct = 0;
+ char_t const lim =
+ (std::numeric_limits<char_t>::max)() >> 3;
+ while (scan.first != scan.last)
+ {
+ char_t c = *scan.first;
+ if (oct > lim && (c >= '0' && c <= '7'))
+ {
+ // overflow detected
+ scan.first = save;
+ return scan.no_match();
+ }
+
+ if (c >= '0' && c <= '7')
+ {
+ oct <<= 3;
+ oct |= c - '0';
+ ++scan.first;
+ }
+ else
+ {
+ break; // reached end of digits
+ }
+ }
+ unescaped = oct;
+ }
+ break;
+
+ default:
+ if (Flags & c_escapes)
+ {
+ // illegal C escape sequence
+ scan.first = save;
+ return scan.no_match();
+ }
+ else
+ {
+ unescaped = *scan.first;
+ ++scan.first;
+ }
+ break;
+ }
+ }
+ else {
+ unescaped = *scan.first;
+ ++scan.first;
+ }
+
+ scan.do_action(p.predicate(), unescaped, save, scan.first);
+ return hit;
+ }
+ }
+ return scan.no_match(); // overflow detected
+ }
+ };
+#if (defined(BOOST_MSVC) && (BOOST_MSVC <= 1310))
+#pragma warning(pop)
+#endif
+
+ //////////////////////////////////
+ template <typename CharT>
+ struct escape_char_parse {
+
+ template <typename ScannerT, typename ParserT>
+ static typename parser_result<ParserT, ScannerT>::type
+ parse(ScannerT const &scan, ParserT const &/*p*/)
+ {
+ typedef
+ uint_parser<CharT, 8, 1,
+ std::numeric_limits<CharT>::digits / 3 + 1
+ >
+ oct_parser_t;
+ typedef
+ uint_parser<CharT, 16, 1,
+ std::numeric_limits<CharT>::digits / 4 + 1
+ >
+ hex_parser_t;
+
+ typedef alternative<difference<anychar_parser, chlit<CharT> >,
+ sequence<chlit<CharT>, alternative<alternative<oct_parser_t,
+ sequence<inhibit_case<chlit<CharT> >, hex_parser_t > >,
+ difference<difference<anychar_parser,
+ inhibit_case<chlit<CharT> > >, oct_parser_t > > > >
+ parser_t;
+
+ static parser_t p =
+ ( (anychar_p - chlit<CharT>(CharT('\\')))
+ | (chlit<CharT>(CharT('\\')) >>
+ ( oct_parser_t()
+ | as_lower_d[chlit<CharT>(CharT('x'))] >> hex_parser_t()
+ | (anychar_p - as_lower_d[chlit<CharT>(CharT('x'))] - oct_parser_t())
+ )
+ ));
+
+ BOOST_SPIRIT_DEBUG_TRACE_NODE(p,
+ (BOOST_SPIRIT_DEBUG_FLAGS & BOOST_SPIRIT_DEBUG_FLAGS_ESCAPE_CHAR) != 0);
+
+ return p.parse(scan);
+ }
+ };
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace impl
+
+///////////////////////////////////////////////////////////////////////////////
+}} // namespace boost::spirit
+
+#endif
+
diff --git a/boost/boost/spirit/utility/impl/lists.ipp b/boost/boost/spirit/utility/impl/lists.ipp
new file mode 100644
index 00000000000..43662fb15d8
--- /dev/null
+++ b/boost/boost/spirit/utility/impl/lists.ipp
@@ -0,0 +1,164 @@
+/*=============================================================================
+ Copyright (c) 2002-2003 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_LISTS_IPP
+#define BOOST_SPIRIT_LISTS_IPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/meta/refactoring.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// list_parser_type class implementation
+//
+///////////////////////////////////////////////////////////////////////////////
+struct no_list_endtoken { typedef no_list_endtoken embed_t; };
+
+namespace impl {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Refactor the original list item parser
+//
+///////////////////////////////////////////////////////////////////////////////
+
+ // match list with 'extended' syntax
+ template <typename EndT>
+ struct select_list_parse_refactor {
+
+ template <
+ typename ParserT, typename ScannerT,
+ typename ItemT, typename DelimT
+ >
+ static typename parser_result<ParserT, ScannerT>::type
+ parse(ScannerT const& scan, ParserT const& /*p*/,
+ ItemT const &item, DelimT const &delim, EndT const &end)
+ {
+ typedef refactor_action_gen<refactor_unary_gen<> > refactor_t;
+ const refactor_t refactor_item_d = refactor_t(refactor_unary_d);
+
+ return (
+ refactor_item_d[item - (end | delim)]
+ >> *(delim >> refactor_item_d[item - (end | delim)])
+ >> !(delim >> end)
+ ).parse(scan);
+ }
+ };
+
+ // match list with 'normal' syntax (without an 'end' parser)
+ template <>
+ struct select_list_parse_refactor<no_list_endtoken> {
+
+ template <
+ typename ParserT, typename ScannerT,
+ typename ItemT, typename DelimT
+ >
+ static typename parser_result<ParserT, ScannerT>::type
+ parse(ScannerT const& scan, ParserT const& /*p*/,
+ ItemT const &item, DelimT const &delim, no_list_endtoken const&)
+ {
+ typedef refactor_action_gen<refactor_unary_gen<> > refactor_t;
+ const refactor_t refactor_item_d = refactor_t(refactor_unary_d);
+
+ return (
+ refactor_item_d[item - delim]
+ >> *(delim >> refactor_item_d[item - delim])
+ ).parse(scan);
+ }
+ };
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Do not refactor the original list item parser.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+ // match list with 'extended' syntax
+ template <typename EndT>
+ struct select_list_parse_no_refactor {
+
+ template <
+ typename ParserT, typename ScannerT,
+ typename ItemT, typename DelimT
+ >
+ static typename parser_result<ParserT, ScannerT>::type
+ parse(ScannerT const& scan, ParserT const& /*p*/,
+ ItemT const &item, DelimT const &delim, EndT const &end)
+ {
+ return (
+ (item - (end | delim))
+ >> *(delim >> (item - (end | delim)))
+ >> !(delim >> end)
+ ).parse(scan);
+ }
+ };
+
+ // match list with 'normal' syntax (without an 'end' parser)
+ template <>
+ struct select_list_parse_no_refactor<no_list_endtoken> {
+
+ template <
+ typename ParserT, typename ScannerT,
+ typename ItemT, typename DelimT
+ >
+ static typename parser_result<ParserT, ScannerT>::type
+ parse(ScannerT const& scan, ParserT const& /*p*/,
+ ItemT const &item, DelimT const &delim, no_list_endtoken const&)
+ {
+ return (
+ (item - delim)
+ >> *(delim >> (item - delim))
+ ).parse(scan);
+ }
+ };
+
+ // the refactoring is handled by the refactoring parsers, so here there
+ // is no need to pay attention to these issues.
+
+ template <typename CategoryT>
+ struct list_parser_type {
+
+ template <
+ typename ParserT, typename ScannerT,
+ typename ItemT, typename DelimT, typename EndT
+ >
+ static typename parser_result<ParserT, ScannerT>::type
+ parse(ScannerT const& scan, ParserT const& p,
+ ItemT const &item, DelimT const &delim, EndT const &end)
+ {
+ return select_list_parse_refactor<EndT>::
+ parse(scan, p, item, delim, end);
+ }
+ };
+
+ template <>
+ struct list_parser_type<plain_parser_category> {
+
+ template <
+ typename ParserT, typename ScannerT,
+ typename ItemT, typename DelimT, typename EndT
+ >
+ static typename parser_result<ParserT, ScannerT>::type
+ parse(ScannerT const& scan, ParserT const& p,
+ ItemT const &item, DelimT const &delim, EndT const &end)
+ {
+ return select_list_parse_no_refactor<EndT>::
+ parse(scan, p, item, delim, end);
+ }
+ };
+
+} // namespace impl
+
+///////////////////////////////////////////////////////////////////////////////
+}} // namespace boost::spirit
+
+#endif
+
diff --git a/boost/boost/spirit/utility/impl/regex.ipp b/boost/boost/spirit/utility/impl/regex.ipp
new file mode 100644
index 00000000000..bb054808f1d
--- /dev/null
+++ b/boost/boost/spirit/utility/impl/regex.ipp
@@ -0,0 +1,77 @@
+/*=============================================================================
+ Copyright (c) 2002-2003 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_REGEX_IPP
+#define BOOST_SPIRIT_REGEX_IPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/core/primitives/impl/primitives.ipp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+namespace impl {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+inline const char* rx_prefix(char) { return "\\A"; }
+inline const wchar_t* rx_prefix(wchar_t) { return L"\\A"; }
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// rx_parser class
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename CharT = char>
+class rx_parser : public parser<rx_parser<CharT> > {
+
+public:
+ typedef std::basic_string<CharT> string_t;
+ typedef rx_parser<CharT> self_t;
+
+ rx_parser(CharT const *first, CharT const *last)
+ {
+ rxstr = string_t(rx_prefix(CharT())) + string_t(first, last);
+ }
+
+ rx_parser(CharT const *first)
+ {
+ rxstr = string_t(rx_prefix(CharT())) +
+ string_t(first, impl::get_last(first));
+ }
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ boost::match_results<typename ScannerT::iterator_t> what;
+ boost::regex_search(scan.first, scan.last, what, rxstr,
+ boost::match_default);
+
+ if (!what[0].matched)
+ return scan.no_match();
+
+ scan.first = what[0].second;
+ return scan.create_match(what[0].length(), nil_t(),
+ what[0].first, scan.first);
+ }
+
+private:
+#if BOOST_VERSION >= 013300
+ boost::basic_regex<CharT> rxstr; // regular expression to match
+#else
+ boost::reg_expression<CharT> rxstr; // regular expression to match
+#endif
+};
+
+} // namespace impl
+
+///////////////////////////////////////////////////////////////////////////////
+}} // namespace boost::spirit
+
+#endif // BOOST_SPIRIT_REGEX_IPP
diff --git a/boost/boost/spirit/utility/lists.hpp b/boost/boost/spirit/utility/lists.hpp
new file mode 100644
index 00000000000..7ac8f49d30a
--- /dev/null
+++ b/boost/boost/spirit/utility/lists.hpp
@@ -0,0 +1,336 @@
+/*=============================================================================
+ Copyright (c) 2002-2003 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_LISTS_HPP
+#define BOOST_SPIRIT_LISTS_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/config.hpp>
+#include <boost/spirit/meta/as_parser.hpp>
+#include <boost/spirit/core/parser.hpp>
+#include <boost/spirit/core/composite/composite.hpp>
+
+#include <boost/spirit/utility/lists_fwd.hpp>
+#include <boost/spirit/utility/impl/lists.ipp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// list_parser class
+//
+// List parsers allow to parse constructs like
+//
+// item >> *(delim >> item)
+//
+// where 'item' is an auxiliary expression to parse and 'delim' is an
+// auxiliary delimiter to parse.
+//
+// The list_parser class also can match an optional closing delimiter
+// represented by the 'end' parser at the end of the list:
+//
+// item >> *(delim >> item) >> !end.
+//
+// If ItemT is an action_parser_category type (parser with an attached
+// semantic action) we have to do something special. This happens, if the
+// user wrote something like:
+//
+// list_p(item[f], delim)
+//
+// where 'item' is the parser matching one item of the list sequence and
+// 'f' is a functor to be called after matching one item. If we would do
+// nothing, the resulting code would parse the sequence as follows:
+//
+// (item[f] - delim) >> *(delim >> (item[f] - delim))
+//
+// what in most cases is not what the user expects.
+// (If this _is_ what you've expected, then please use one of the list_p
+// generator functions 'direct()', which will inhibit re-attaching
+// the actor to the item parser).
+//
+// To make the list parser behave as expected:
+//
+// (item - delim)[f] >> *(delim >> (item - delim)[f])
+//
+// the actor attached to the 'item' parser has to be re-attached to the
+// *(item - delim) parser construct, which will make the resulting list
+// parser 'do the right thing'.
+//
+// Additionally special care must be taken, if the item parser is a
+// unary_parser_category type parser as
+//
+// list_p(*anychar_p, ',')
+//
+// which without any refactoring would result in
+//
+// (*anychar_p - ch_p(','))
+// >> *( ch_p(',') >> (*anychar_p - ch_p(',')) )
+//
+// and will not give the expected result (the first *anychar_p will eat up
+// all the input up to the end of the input stream). So we have to
+// refactor this into:
+//
+// *(anychar_p - ch_p(','))
+// >> *( ch_p(',') >> *(anychar_p - ch_p(',')) )
+//
+// what will give the correct result.
+//
+// The case, where the item parser is a combination of the two mentioned
+// problems (i.e. the item parser is a unary parser with an attached
+// action), is handled accordingly too:
+//
+// list_p((*anychar_p)[f], ',')
+//
+// will be parsed as expected:
+//
+// (*(anychar_p - ch_p(',')))[f]
+// >> *( ch_p(',') >> (*(anychar_p - ch_p(',')))[f] ).
+//
+///////////////////////////////////////////////////////////////////////////////
+template <
+ typename ItemT, typename DelimT, typename EndT, typename CategoryT
+>
+struct list_parser :
+ public parser<list_parser<ItemT, DelimT, EndT, CategoryT> > {
+
+ typedef list_parser<ItemT, DelimT, EndT, CategoryT> self_t;
+ typedef CategoryT parser_category_t;
+
+ list_parser(ItemT const &item_, DelimT const &delim_,
+ EndT const& end_ = no_list_endtoken())
+ : item(item_), delim(delim_), end(end_)
+ {}
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ return impl::list_parser_type<CategoryT>
+ ::parse(scan, *this, item, delim, end);
+ }
+
+private:
+ typename as_parser<ItemT>::type::embed_t item;
+ typename as_parser<DelimT>::type::embed_t delim;
+ typename as_parser<EndT>::type::embed_t end;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// List parser generator template
+//
+// This is a helper for generating a correct list_parser<> from
+// auxiliary parameters. There are the following types supported as
+// parameters yet: parsers, single characters and strings (see
+// as_parser<> in meta/as_parser.hpp).
+//
+// The list_parser_gen by itself can be used for parsing comma separated
+// lists without item formatting:
+//
+// list_p.parse(...)
+// matches any comma separated list.
+//
+// If list_p is used with one parameter, this parameter is used to match
+// the delimiter:
+//
+// list_p(';').parse(...)
+// matches any semicolon separated list.
+//
+// If list_p is used with two parameters, the first parameter is used to
+// match the items and the second parameter matches the delimiters:
+//
+// list_p(uint_p, ',').parse(...)
+// matches comma separated unsigned integers.
+//
+// If list_p is used with three parameters, the first parameter is used
+// to match the items, the second one is used to match the delimiters and
+// the third one is used to match an optional ending token sequence:
+//
+// list_p(real_p, ';', eol_p).parse(...)
+// matches a semicolon separated list of real numbers optionally
+// followed by an end of line.
+//
+// The list_p in the previous examples denotes the predefined parser
+// generator, which should be used to define list parsers (see below).
+//
+///////////////////////////////////////////////////////////////////////////////
+
+template <typename CharT = char>
+struct list_parser_gen :
+ public list_parser<kleene_star<anychar_parser>, chlit<CharT> >
+{
+ typedef list_parser_gen<CharT> self_t;
+
+// construct the list_parser_gen object as an list parser for comma separated
+// lists without item formatting.
+ list_parser_gen()
+ : list_parser<kleene_star<anychar_parser>, chlit<CharT> >
+ (*anychar_p, chlit<CharT>(','))
+ {}
+
+// The following generator functions should be used under normal circumstances.
+// (the operator()(...) functions)
+
+ // Generic generator functions for creation of concrete list parsers, which
+ // support 'normal' syntax:
+ //
+ // item >> *(delim >> item)
+ //
+ // If item isn't given, everything between two delimiters is matched.
+
+ template<typename DelimT>
+ list_parser<
+ kleene_star<anychar_parser>,
+ typename as_parser<DelimT>::type,
+ no_list_endtoken,
+ unary_parser_category // there is no action to re-attach
+ >
+ operator()(DelimT const &delim_) const
+ {
+ typedef kleene_star<anychar_parser> item_t;
+ typedef typename as_parser<DelimT>::type delim_t;
+
+ typedef
+ list_parser<item_t, delim_t, no_list_endtoken, unary_parser_category>
+ return_t;
+
+ return return_t(*anychar_p, as_parser<DelimT>::convert(delim_));
+ }
+
+ template<typename ItemT, typename DelimT>
+ list_parser<
+ typename as_parser<ItemT>::type,
+ typename as_parser<DelimT>::type,
+ no_list_endtoken,
+ typename as_parser<ItemT>::type::parser_category_t
+ >
+ operator()(ItemT const &item_, DelimT const &delim_) const
+ {
+ typedef typename as_parser<ItemT>::type item_t;
+ typedef typename as_parser<DelimT>::type delim_t;
+ typedef list_parser<item_t, delim_t, no_list_endtoken,
+ BOOST_DEDUCED_TYPENAME item_t::parser_category_t>
+ return_t;
+
+ return return_t(
+ as_parser<ItemT>::convert(item_),
+ as_parser<DelimT>::convert(delim_)
+ );
+ }
+
+ // Generic generator function for creation of concrete list parsers, which
+ // support 'extended' syntax:
+ //
+ // item >> *(delim >> item) >> !end
+
+ template<typename ItemT, typename DelimT, typename EndT>
+ list_parser<
+ typename as_parser<ItemT>::type,
+ typename as_parser<DelimT>::type,
+ typename as_parser<EndT>::type,
+ typename as_parser<ItemT>::type::parser_category_t
+ >
+ operator()(
+ ItemT const &item_, DelimT const &delim_, EndT const &end_) const
+ {
+ typedef typename as_parser<ItemT>::type item_t;
+ typedef typename as_parser<DelimT>::type delim_t;
+ typedef typename as_parser<EndT>::type end_t;
+
+ typedef list_parser<item_t, delim_t, end_t,
+ BOOST_DEDUCED_TYPENAME item_t::parser_category_t>
+ return_t;
+
+ return return_t(
+ as_parser<ItemT>::convert(item_),
+ as_parser<DelimT>::convert(delim_),
+ as_parser<EndT>::convert(end_)
+ );
+ }
+
+// The following functions should be used, if the 'item' parser has an attached
+// semantic action or is a unary_parser_category type parser and the structure
+// of the resulting list parser should _not_ be refactored during parser
+// construction (see comment above).
+
+ // Generic generator function for creation of concrete list parsers, which
+ // support 'normal' syntax:
+ //
+ // item >> *(delim >> item)
+
+ template<typename ItemT, typename DelimT>
+ list_parser<
+ typename as_parser<ItemT>::type,
+ typename as_parser<DelimT>::type,
+ no_list_endtoken,
+ plain_parser_category // inhibit action re-attachment
+ >
+ direct(ItemT const &item_, DelimT const &delim_) const
+ {
+ typedef typename as_parser<ItemT>::type item_t;
+ typedef typename as_parser<DelimT>::type delim_t;
+ typedef list_parser<item_t, delim_t, no_list_endtoken,
+ plain_parser_category>
+ return_t;
+
+ return return_t(
+ as_parser<ItemT>::convert(item_),
+ as_parser<DelimT>::convert(delim_)
+ );
+ }
+
+ // Generic generator function for creation of concrete list parsers, which
+ // support 'extended' syntax:
+ //
+ // item >> *(delim >> item) >> !end
+
+ template<typename ItemT, typename DelimT, typename EndT>
+ list_parser<
+ typename as_parser<ItemT>::type,
+ typename as_parser<DelimT>::type,
+ typename as_parser<EndT>::type,
+ plain_parser_category // inhibit action re-attachment
+ >
+ direct(
+ ItemT const &item_, DelimT const &delim_, EndT const &end_) const
+ {
+ typedef typename as_parser<ItemT>::type item_t;
+ typedef typename as_parser<DelimT>::type delim_t;
+ typedef typename as_parser<EndT>::type end_t;
+
+ typedef
+ list_parser<item_t, delim_t, end_t, plain_parser_category>
+ return_t;
+
+ return return_t(
+ as_parser<ItemT>::convert(item_),
+ as_parser<DelimT>::convert(delim_),
+ as_parser<EndT>::convert(end_)
+ );
+ }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Predefined list parser generator
+//
+// The list_p parser generator can be used
+// - by itself for parsing comma separated lists without item formatting
+// or
+// - for generating list parsers with auxiliary parser parameters
+// for the 'item', 'delim' and 'end' subsequences.
+// (see comment above)
+//
+///////////////////////////////////////////////////////////////////////////////
+const list_parser_gen<> list_p = list_parser_gen<>();
+
+///////////////////////////////////////////////////////////////////////////////
+}} // namespace boost::spirit
+
+#endif
diff --git a/boost/boost/spirit/utility/lists_fwd.hpp b/boost/boost/spirit/utility/lists_fwd.hpp
new file mode 100644
index 00000000000..63b5927f74b
--- /dev/null
+++ b/boost/boost/spirit/utility/lists_fwd.hpp
@@ -0,0 +1,27 @@
+/*=============================================================================
+ Copyright (c) 2006 Tobias Schwinger
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_LISTS_FWD_HPP)
+#define BOOST_SPIRIT_LISTS_FWD_HPP
+
+#include <boost/spirit/core/parser.hpp>
+
+namespace boost { namespace spirit {
+
+ struct no_list_endtoken;
+
+ template <
+ typename ItemT, typename DelimT, typename EndT = no_list_endtoken,
+ typename CategoryT = plain_parser_category
+ >
+ struct list_parser;
+
+}} // namespace boost::spirit
+
+#endif
+
diff --git a/boost/boost/spirit/utility/loops.hpp b/boost/boost/spirit/utility/loops.hpp
new file mode 100644
index 00000000000..f42776a029f
--- /dev/null
+++ b/boost/boost/spirit/utility/loops.hpp
@@ -0,0 +1,313 @@
+/*=============================================================================
+ Copyright (c) 1998-2003 Joel de Guzman
+ Copyright (c) 2002 Raghavendra Satish
+ Copyright (c) 2002 Jeff Westfahl
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_LOOPS_HPP)
+#define BOOST_SPIRIT_LOOPS_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/core/parser.hpp>
+#include <boost/spirit/core/composite/composite.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // fixed_loop class
+ //
+ // This class takes care of the construct:
+ //
+ // repeat_p (exact) [p]
+ //
+ // where 'p' is a parser and 'exact' is the number of times to
+ // repeat. The parser iterates over the input exactly 'exact' times.
+ // The parse function fails if the parser does not match the input
+ // exactly 'exact' times.
+ //
+ // This class is parametizable and can accept constant arguments
+ // (e.g. repeat_p (5) [p]) as well as references to variables (e.g.
+ // repeat_p (ref (n)) [p]).
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename ParserT, typename ExactT>
+ class fixed_loop
+ : public unary<ParserT, parser <fixed_loop <ParserT, ExactT> > >
+ {
+ public:
+
+ typedef fixed_loop<ParserT, ExactT> self_t;
+ typedef unary<ParserT, parser<self_t> > base_t;
+
+ fixed_loop (ParserT const & subject, ExactT const & exact)
+ : base_t(subject), m_exact(exact) {}
+
+ template <typename ScannerT>
+ typename parser_result <self_t, ScannerT>::type
+ parse (ScannerT const & scan) const
+ {
+ typedef typename parser_result<self_t, ScannerT>::type result_t;
+ result_t hit = scan.empty_match();
+ std::size_t n = m_exact;
+
+ for (std::size_t i = 0; i < n; ++i)
+ {
+ if (result_t next = this->subject().parse(scan))
+ {
+ scan.concat_match(hit, next);
+ }
+ else
+ {
+ return scan.no_match();
+ }
+ }
+
+ return hit;
+ }
+
+ template <typename ScannerT>
+ struct result
+ {
+ typedef typename match_result<ScannerT, nil_t>::type type;
+ };
+
+ private:
+
+ ExactT m_exact;
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ // finite_loop class
+ //
+ // This class takes care of the construct:
+ //
+ // repeat_p (min, max) [p]
+ //
+ // where 'p' is a parser, 'min' and 'max' specifies the minimum and
+ // maximum iterations over 'p'. The parser iterates over the input
+ // at least 'min' times and at most 'max' times. The parse function
+ // fails if the parser does not match the input at least 'min' times
+ // and at most 'max' times.
+ //
+ // This class is parametizable and can accept constant arguments
+ // (e.g. repeat_p (5, 10) [p]) as well as references to variables
+ // (e.g. repeat_p (ref (n1), ref (n2)) [p]).
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ template <typename ParserT, typename MinT, typename MaxT>
+ class finite_loop
+ : public unary<ParserT, parser<finite_loop<ParserT, MinT, MaxT> > >
+ {
+ public:
+
+ typedef finite_loop <ParserT, MinT, MaxT> self_t;
+ typedef unary<ParserT, parser<self_t> > base_t;
+
+ finite_loop (ParserT const & subject, MinT const & min, MaxT const & max)
+ : base_t(subject), m_min(min), m_max(max) {}
+
+ template <typename ScannerT>
+ typename parser_result <self_t, ScannerT>::type
+ parse(ScannerT const & scan) const
+ {
+ BOOST_SPIRIT_ASSERT(m_min <= m_max);
+ typedef typename parser_result<self_t, ScannerT>::type result_t;
+ result_t hit = scan.empty_match();
+
+ std::size_t n1 = m_min;
+ std::size_t n2 = m_max;
+
+ for (std::size_t i = 0; i < n2; ++i)
+ {
+ typename ScannerT::iterator_t save = scan.first;
+ result_t next = this->subject().parse(scan);
+
+ if (!next)
+ {
+ if (i >= n1)
+ {
+ scan.first = save;
+ break;
+ }
+ else
+ {
+ return scan.no_match();
+ }
+ }
+
+ scan.concat_match(hit, next);
+ }
+
+ return hit;
+ }
+
+ template <typename ScannerT>
+ struct result
+ {
+ typedef typename match_result<ScannerT, nil_t>::type type;
+ };
+
+ private:
+
+ MinT m_min;
+ MaxT m_max;
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ // infinite_loop class
+ //
+ // This class takes care of the construct:
+ //
+ // repeat_p (min, more) [p]
+ //
+ // where 'p' is a parser, 'min' is the minimum iteration over 'p'
+ // and more specifies that the iteration should proceed
+ // indefinitely. The parser iterates over the input at least 'min'
+ // times and continues indefinitely until 'p' fails or all of the
+ // input is parsed. The parse function fails if the parser does not
+ // match the input at least 'min' times.
+ //
+ // This class is parametizable and can accept constant arguments
+ // (e.g. repeat_p (5, more) [p]) as well as references to variables
+ // (e.g. repeat_p (ref (n), more) [p]).
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+
+ struct more_t {};
+ more_t const more = more_t ();
+
+ template <typename ParserT, typename MinT>
+ class infinite_loop
+ : public unary<ParserT, parser<infinite_loop<ParserT, MinT> > >
+ {
+ public:
+
+ typedef infinite_loop <ParserT, MinT> self_t;
+ typedef unary<ParserT, parser<self_t> > base_t;
+
+ infinite_loop (
+ ParserT const& subject,
+ MinT const& min,
+ more_t const&
+ )
+ : base_t(subject), m_min(min) {}
+
+ template <typename ScannerT>
+ typename parser_result <self_t, ScannerT>::type
+ parse(ScannerT const & scan) const
+ {
+ typedef typename parser_result<self_t, ScannerT>::type result_t;
+ result_t hit = scan.empty_match();
+ std::size_t n = m_min;
+
+ for (std::size_t i = 0; ; ++i)
+ {
+ typename ScannerT::iterator_t save = scan.first;
+ result_t next = this->subject().parse(scan);
+
+ if (!next)
+ {
+ if (i >= n)
+ {
+ scan.first = save;
+ break;
+ }
+ else
+ {
+ return scan.no_match();
+ }
+ }
+
+ scan.concat_match(hit, next);
+ }
+
+ return hit;
+ }
+
+ template <typename ScannerT>
+ struct result
+ {
+ typedef typename match_result<ScannerT, nil_t>::type type;
+ };
+
+ private:
+
+ MinT m_min;
+ };
+
+ template <typename ExactT>
+ struct fixed_loop_gen
+ {
+ fixed_loop_gen (ExactT const & exact)
+ : m_exact (exact) {}
+
+ template <typename ParserT>
+ fixed_loop <ParserT, ExactT>
+ operator[](parser <ParserT> const & subject) const
+ {
+ return fixed_loop <ParserT, ExactT> (subject.derived (), m_exact);
+ }
+
+ ExactT m_exact;
+ };
+
+ namespace impl {
+
+ template <typename ParserT, typename MinT, typename MaxT>
+ struct loop_traits
+ {
+ typedef typename mpl::if_<
+ boost::is_same<MaxT, more_t>,
+ infinite_loop<ParserT, MinT>,
+ finite_loop<ParserT, MinT, MaxT>
+ >::type type;
+ };
+
+ } // namespace impl
+
+ template <typename MinT, typename MaxT>
+ struct nonfixed_loop_gen
+ {
+ nonfixed_loop_gen (MinT min, MaxT max)
+ : m_min (min), m_max (max) {}
+
+ template <typename ParserT>
+ typename impl::loop_traits<ParserT, MinT, MaxT>::type
+ operator[](parser <ParserT> const & subject) const
+ {
+ typedef typename impl::loop_traits<ParserT, MinT, MaxT>::type ret_t;
+ return ret_t(
+ subject.derived(),
+ m_min,
+ m_max);
+ }
+
+ MinT m_min;
+ MaxT m_max;
+ };
+
+ template <typename ExactT>
+ fixed_loop_gen <ExactT>
+ repeat_p(ExactT const & exact)
+ {
+ return fixed_loop_gen <ExactT> (exact);
+ }
+
+ template <typename MinT, typename MaxT>
+ nonfixed_loop_gen <MinT, MaxT>
+ repeat_p(MinT const & min, MaxT const & max)
+ {
+ return nonfixed_loop_gen <MinT, MaxT> (min, max);
+ }
+
+}} // namespace boost::spirit
+
+#endif // #if !defined(BOOST_SPIRIT_LOOPS_HPP)
diff --git a/boost/boost/spirit/utility/regex.hpp b/boost/boost/spirit/utility/regex.hpp
new file mode 100644
index 00000000000..ace254322c7
--- /dev/null
+++ b/boost/boost/spirit/utility/regex.hpp
@@ -0,0 +1,108 @@
+/*=============================================================================
+ Copyright (c) 2002-2003 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_SPIRIT_REGEX_HPP
+#define BOOST_SPIRIT_REGEX_HPP
+
+#include <boost/version.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Include the regular expression library of boost (Boost.Regex)
+//
+// Note though, that this library is not distributed with Spirit. You have to
+// obtain a separate copy from http://www.boost.org.
+//
+///////////////////////////////////////////////////////////////////////////////
+#if defined(BOOST_SPIRIT_NO_REGEX_LIB) && BOOST_VERSION < 103300
+//
+// Include all the Boost.regex library. Please note that this will not work,
+// if you are using the boost/spirit/regex.hpp header from more than one
+// translation units.
+//
+#define BOOST_REGEX_NO_LIB
+#define BOOST_REGEX_STATIC_LINK
+#define BOOST_REGEX_NO_EXTERNAL_TEMPLATES
+#include <boost/regex.hpp>
+#include <boost/regex/src.cpp>
+
+#else
+//
+// Include the Boost.Regex headers only. Note, that you will have to link your
+// application against the Boost.Regex library as described in the related
+// documentation.
+// This is the only way for Boost newer than V1.32.0
+//
+#include <boost/regex.hpp>
+#endif // defined(BOOST_SPIRIT_NO_REGEX_LIB)
+
+#include <boost/static_assert.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/spirit/meta/as_parser.hpp>
+#include <boost/spirit/core/parser.hpp>
+#include <boost/spirit/utility/impl/regex.ipp>
+#include <boost/detail/iterator.hpp> // for boost::detail::iterator_traits
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+///////////////////////////////////////////////////////////////////////////////
+// rxstrlit class
+template <typename CharT = char>
+struct rxstrlit : public parser<rxstrlit<CharT> > {
+
+ typedef rxstrlit self_t;
+
+ rxstrlit(CharT const *first, CharT const *last)
+ : rx(first, last) {}
+ rxstrlit(CharT const *first)
+ : rx(first) {}
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ // Due to limitations in the boost::regex library the iterators wrapped in
+ // the ScannerT object should be at least bidirectional iterators. Plain
+ // forward iterators do not work here.
+ typedef typename ScannerT::iterator_t iterator_t;
+ typedef
+ typename boost::detail::iterator_traits<iterator_t>::iterator_category
+ iterator_category;
+
+ BOOST_STATIC_ASSERT((
+ boost::is_convertible<iterator_category,
+ std::bidirectional_iterator_tag>::value
+ ));
+
+ typedef typename parser_result<self_t, ScannerT>::type result_t;
+ return impl::contiguous_parser_parse<result_t>(rx, scan, scan);
+ }
+
+private:
+ impl::rx_parser<CharT> rx; // contains the boost regular expression parser
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// Generator functions
+template <typename CharT>
+inline rxstrlit<CharT>
+regex_p(CharT const *first)
+{ return rxstrlit<CharT>(first); }
+
+//////////////////////////////////
+template <typename CharT>
+inline rxstrlit<CharT>
+regex_p(CharT const *first, CharT const *last)
+{ return rxstrlit<CharT>(first, last); }
+
+///////////////////////////////////////////////////////////////////////////////
+}} // namespace boost::spirit
+
+#endif // BOOST_SPIRIT_REGEX_HPP
diff --git a/boost/boost/spirit/utility/rule_parser.hpp b/boost/boost/spirit/utility/rule_parser.hpp
new file mode 100644
index 00000000000..e5ad80716e4
--- /dev/null
+++ b/boost/boost/spirit/utility/rule_parser.hpp
@@ -0,0 +1,1118 @@
+/*==============================================================================
+ Copyright (c) 2006 Tobias Schwinger
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+==============================================================================*/
+// The comment below contains a unnamed 'namespace {', which is flagged by the
+// Boost inspect tool as a violation of common C++ programming rules. Since it's
+// in a comment, well, we switch it off :-P
+// boostinspect:nounnamed
+
+//
+// About:
+// =====
+//
+// Using a typeof operator or Boost.Typeof to automatically set the type of
+// variables (as done in the Spirit example demonstrating typeof) is by far not
+// all we can do to tighten up our grammars as there are some significant
+// drawbacks of this approach:
+// - the types complexity scales with the complexity of the grammar (sooner or
+// later hitting the limits of the compiler),
+// - recursive grammars are not possible, and
+// - all parser objects are embedded by value.
+//
+// The Spirit documentation therefore recommends creating custom parser classes
+// (derived from the a sub_grammar template):
+//
+// http://www.boost.org/libs/spirit/doc/techniques.html#no_rules
+// http://www.boost.org/libs/spirit/doc/techniques.html#typeof
+//
+// In practice manually applying this technique leads to rather lengthy code and
+// overthis requires the user to have a solid understanding of Spirit details.
+//
+// Here is a generalized, macro-based approach to easily create typeof-based
+// grammars that can be recursive and arbitrarily complex.
+//
+//
+// Quick manual:
+// ============
+//
+// 1. Setup
+//
+// Before the rule parser macro (the protagonist of the facility) can be used
+// the the user must define the macro BOOST_SPIRIT__NAMESPACE (note the double
+// underscore characeter) and setup a registration group for Boost.Typeof.
+//
+// Examples:
+//
+// // should come after regular #includeS
+// #include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+//
+// // [...]
+//
+// #define BOOST_SPIRIT__NAMESPACE (2,(my_project, my_module))
+// // | | +- outer +- inner
+// // ! space ! -+ | namespace namespace
+// // |
+// // +--- number of nested namespaces
+//
+// namespace my_project { namespace my_module {
+//
+// // [...]
+//
+// ---
+//
+// // should come after regular #includeS
+// #include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+//
+// // [...]
+//
+// #define BOOST_SPIRIT__NAMESPACE (2,(my_project, (anonymous) ))
+//
+// namespace my_project { namespace {
+//
+// // [...]
+//
+// ---
+//
+// // should come after regular #includeS
+// #include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+//
+// // [...]
+//
+//
+// #define BOOST_SPIRIT__NAMESPACE -
+// // we're working at root namespace
+//
+//
+// Why do I have to do this?
+//
+// Boost.Typeof needs to assign a unique ID for each registration. This ID is
+// created composed of the line number and the registration group. The
+// facility performs Typeof registration and thus requires the source file to
+// have its own registration group. Further Boost.Typeof requires registration
+// to happen at root namespace so we have to close and reopen the namespace
+// we're in.
+//
+//
+// 2. The rule parser macro
+//
+// A simple rule parser definition looks like that:
+//
+// // we're at namespace scope here
+//
+// // Skip parser for C/C++ comments and whitespace
+// BOOST_SPIRIT_RULE_PARSER(skipper,
+// -,-,-,
+//
+// +( confix_p("//",*anychar_p,eol_p)
+// | confix_p("/*",*anychar_p,"*/")
+// | space_p
+// )
+// )
+//
+// Now we can use 'skipper' in other Spirit expressions.
+//
+// The code above creates a parser (template) class 'skpper_t' and (in this
+// case, because there are no parameters) a static const instance 'skipper' of
+// that class. The class is automatically registered with Boost.Typeof. The type
+// name our parser is skipper_t here.
+//
+//
+// 2.1. Parametrized rule parsers
+//
+// Rule parser definitions can have parameters.
+//
+// Parameters are passed to the BOOST_SPIRIT_RULE_PARSER macro as its second
+// argument (just pass '-' if there are no parameters) with the following
+// format:
+//
+// (N,( param1,param2, / ... / paramN ))
+// +-- number of parameters
+//
+// Example of a whole rule parser:
+//
+// BOOST_SPIRIT_RULE_PARSER(new_name,
+// (1,( symbol_table )),-,-,
+//
+// lexeme_d[ (alpha_p >> *alnum_p)[ symbol_table.add ] ]
+// )
+//
+// The expression 'new_name(my_symbols)' parses a string literal and adds it to
+// the symbol table 'my_symbols'.
+//
+// The rule parser macro creates a function template as called 'new_name' that
+// takes one parameter of deduced reference type and returns a specialization of
+// 'new_name_t' in this case.
+//
+// Since parsers that require to be fast and lightweight often also require to
+// be reentrant, it's quite common to pass in some semantic controller (the
+// symbol table in the example above).
+// However, parameters are templated so they can be anything (including parsers
+// of course) so refactoring tasks can be abstracted with rule parsers as well.
+//
+// BOOST_SPIRIT_RULE_PARSER(enumeration_parser,
+// (2,( element_parser, delimiter_parser )),-,-,
+//
+// element_parser >> *(delimiter_parser >> element_parser)
+// )
+//
+// The expression 'enumeration_parser(int_p[ some_action ], ',')' creates a
+// parser for a comma-separated list of integers.
+//
+//
+// 2.2. Rule parsrs and semantic actions
+//
+// While semantic actions can be globally attached to a rule parser or passed
+// to a parametrized rule parser as (part of) an argument, even more control is
+// possible by using action placeholders. E.g:
+//
+// BOOST_SPIRIT_ACTION_PLACEHOLDER(int_action)
+//
+// BOOST_SPIRIT_RULE_PARSER(int_list,
+// -,(1,( int_action )),-,
+//
+// int_p[ int_action ] >> *(',' >> int_p[ int_action ])
+// )
+//
+// The expression 'int_list[ my_action ]' parses a comma separated list of
+// integers and calls 'my_action' for every integer parsed therein.
+//
+// Of course multiple actions can be attached to one placeholder as usual (in
+// this case 'int_list[ my_action1 ][ my_action2 ] would call two actions).
+//
+// Further there can be multiple action placeholders for a single rule parser:
+//
+// BOOST_SPIRIT_ACTION_PLACEHOLDER(feed_int)
+// BOOST_SPIRIT_ACTION_PLACEHOLDER(next_int)
+//
+// BOOST_SPIRIT_RULE_PARSER(int_list,
+// -,(2,( feed_int, next_int )),-,
+//
+// int_p[ feed_int ] >> *(',' >> int_p[ next_int ][ feed_int ])
+// )
+//
+// The expression 'int_list[ (feed_int = my_action1), (next_int = my_action2) ]'
+// creates a parser for a comma separated list of integers with the actions
+// attached appropriately.
+//
+// int_list[ feed_int = my_action1,my_action2, next_int = my_action3 ]
+//
+// works too (in this case the action placeholder 'feed_int' has two actions
+// attached to it).
+//
+// You can both override and append actions associated with an action
+// placeholder:
+//
+// var = int_list[ feed_int = my_action1, next_int = my_action2 ]
+//
+// // [...]
+//
+// ... var[ feed_int = another_action ]
+// // 'another_action' overrides the actions previously attached to 'feed_int'
+//
+// ... var[ next_int += another_action ]
+// // 'another_action' is appended to the list of actions attached to
+// // 'next_int'
+//
+// Action placeholders are not entirely for free -- they add to the size and the
+// initialization time of the rule parser. However, the impact on an already
+// initialized rule parser instance should be quite small.
+//
+//
+// 2.3. Member variables
+//
+// You can add member variables to the rule parser class using the third
+// parameter of the rule parser macro:
+//
+// BOOST_SPIRIT_RULE_PARSER( calc,
+// -,
+// -,
+// (3,( ((subrule<0>),expression,()),
+// ((subrule<1>),term,()),
+// ((subrule<2>),factor,() )) ),
+//
+// // [...]
+//
+// adds three subrules to the rule parser.
+// Each parameter must have the following type to allow commas to be handled
+// safely from within the preprocessing code:
+//
+// ((type)),name,(constructor argument(s)))
+//
+//
+// 2.4. The opaque rule parser
+//
+// Rule parsers usually are templates. Building large grammars pushes the
+// compiler really hard (and eventually to its limits) because of the
+// metafunction complexity involved.
+// If a rule parser without parameters and action placeholders is defined, a
+// non-template class is created. Non-templated rule parsers can also be created
+// explicitly by using BOOST_SPIRIT_OPAQUE_RULE_PARSER.
+// Opaque rule parsers can have parameters and member variables (note: no action
+// placeholders are possible). The parameters of an opaque rule parsers are
+// strictly typed, e.g:
+//
+// BOOST_SPIRIT_OPAQUE_RULE_PARSER(new_identifier,
+// (1,( ((my_symbol_table_t &),symbol_table) ))
+// ,-,
+// (alpha_p >> *alnum_p) [ symbol_table.add ]
+// )
+//
+// Note it's also possible to have opaque rule parsers accept parameters of
+// non-const reference types which is not possible with regular rule parsers.
+//
+//
+// 3. Utilities for by-reference embedding
+//
+// When using parsers mutiple times or recursively it can be helpful to embed
+// them by-reference into the final parser expression.
+// For this purpose the library provides a wrapper template 'parser_reference'.
+// There is also a function template to create a wrapped parser which can deduce
+// the parser's type from its argument.
+//
+// --- --- - - --- - - --- - - - - --- - - - - - - - - - - - - - - - - - - - - -
+#if !defined(BOOST_SPIRIT_UTILITY_RULE_PARSER_HPP_INCLUDED)
+# define BOOST_SPIRIT_UTILITY_RULE_PARSER_HPP_INCLUDED
+//==============================================================================
+// Dependencies
+//==============================================================================
+# include <boost/config.hpp>
+# include <boost/detail/workaround.hpp>
+# include <boost/call_traits.hpp>
+# include <boost/typeof/typeof.hpp>
+# include <boost/spirit/core/parser.hpp>
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/seq/seq.hpp>
+# include <boost/preprocessor/seq/for_each_i.hpp>
+# include <boost/preprocessor/tuple/eat.hpp>
+# include <boost/preprocessor/tuple/to_seq.hpp>
+# include <boost/preprocessor/array/size.hpp>
+# include <boost/preprocessor/control/if.hpp>
+# include <boost/preprocessor/control/iif.hpp>
+# include <boost/preprocessor/control/expr_iif.hpp>
+# include <boost/preprocessor/logical/or.hpp>
+# include <boost/preprocessor/logical/nor.hpp>
+# include <boost/preprocessor/logical/not.hpp>
+# include <boost/preprocessor/logical/compl.hpp>
+# include <boost/preprocessor/arithmetic/inc.hpp>
+# include <boost/preprocessor/arithmetic/dec.hpp>
+# include <boost/preprocessor/arithmetic/add.hpp>
+# include <boost/preprocessor/detail/is_unary.hpp>
+# include <boost/preprocessor/detail/is_binary.hpp>
+# include <boost/preprocessor/repetition/repeat.hpp>
+# include <boost/preprocessor/repetition/enum_params.hpp>
+# include <boost/preprocessor/repetition/enum_binary_params.hpp>
+# include <boost/preprocessor/repetition/enum_shifted_params.hpp>
+# include <boost/preprocessor/repetition/enum_trailing_params.hpp>
+# include <boost/preprocessor/punctuation/comma.hpp>
+# include <boost/preprocessor/punctuation/comma_if.hpp>
+# include <boost/preprocessor/facilities/empty.hpp>
+# include <boost/preprocessor/facilities/identity.hpp>
+# include <boost/preprocessor/facilities/intercept.hpp>
+//==============================================================================
+// Interface
+//==============================================================================
+// Creates a rule parser. Use at namespace scope.
+# define BOOST_SPIRIT_RULE_PARSER(name,params,actions,members,rule) \
+ BOOST_SPIRIT_RP_IMPL_I(name,params,actions,members,rule)
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+// Creates a non-templated rule parser. Use at namespace scope.
+# define BOOST_SPIRIT_OPAQUE_RULE_PARSER(name,params,members,rule) \
+ BOOST_SPIRIT_RP_OPAQUE_IMPL_I(name,params,members,rule)
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+// Defines an action placeholder. Use at namespace scope.
+# define BOOST_SPIRIT_ACTION_PLACEHOLDER(name) \
+ BOOST_SPIRIT_RP_AP_IMPL(name,::boost::spirit::type_of)
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+// Utilities to embed parsers by reference.
+namespace boost
+{
+ namespace spirit
+ {
+ template<class P> class parser_reference;
+ template<class P> parser_reference<P> embed_by_reference(parser<P> const &);
+ }
+}
+//==============================================================================
+// Implementation
+//==============================================================================
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+// RP_REGISTER_TEMPLATE
+//
+// Boost.Typeof registration from within BOOST_SPIRIT__NAMESPACE
+# define BOOST_SPIRIT_RP_REGISTER_TEMPLATE(name,params) \
+ BOOST_SPIRIT_RP_EMIT(NS_CLOSE,BOOST_SPIRIT__NAMESPACE,-) \
+ BOOST_TYPEOF_REGISTER_TEMPLATE( \
+ BOOST_SPIRIT_RP_EMIT(NS_QUALIFY,BOOST_SPIRIT__NAMESPACE,-) name, \
+ params) \
+ BOOST_SPIRIT_RP_EMIT(NS_OPEN,BOOST_SPIRIT__NAMESPACE,-)
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+// RP_REGISTER_TYPE
+//
+// Boost.Typeof registration from within BOOST_SPIRIT__NAMESPACE
+# define BOOST_SPIRIT_RP_REGISTER_TYPE(name) \
+ BOOST_SPIRIT_RP_EMIT(NS_CLOSE,BOOST_SPIRIT__NAMESPACE,-) \
+ BOOST_TYPEOF_REGISTER_TYPE( \
+ BOOST_SPIRIT_RP_EMIT(NS_QUALIFY,BOOST_SPIRIT__NAMESPACE,-) name ) \
+ BOOST_SPIRIT_RP_EMIT(NS_OPEN,BOOST_SPIRIT__NAMESPACE,-)
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+// RP_AP_IMPL
+//
+// The action placeholder definition
+# define BOOST_SPIRIT_RP_AP_IMPL(name,ns) \
+ namespace __action_placeholder \
+ { \
+ struct name \
+ { \
+ template<typename Action> \
+ ns :: action_chain< name, ns :: replace, Action> \
+ operator=(Action const & __a) const \
+ { return ns :: action_chain< name, ns :: replace, Action>(__a); } \
+ \
+ template<typename Action> \
+ ns :: action_chain< name, ns :: append, Action> \
+ operator+=(Action const & __a) const \
+ { return ns :: action_chain< name, ns :: append, Action> (__a); } \
+ }; \
+ } \
+ __action_placeholder:: name const name = __action_placeholder:: name ();
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+// RP_IMPL_I
+//
+// Does some precalculation so RP_IMPL_II can look cleaner
+# define BOOST_SPIRIT_RP_IMPL_I(name,pars,acts,mbrs,expr) \
+ BOOST_SPIRIT_RP_IMPL_II(name, name ## _t , \
+ pars, BOOST_SPIRIT_RP_ARRAY_SIZE(pars), \
+ acts, BOOST_SPIRIT_RP_ARRAY_SIZE(acts), \
+ mbrs, BOOST_SPIRIT_RP_ARRAY_SIZE(mbrs), expr)
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+// RP_IMPL_II
+# define BOOST_SPIRIT_RP_IMPL_II(name,name_t,pars,np,acts,na,mbrs,nm,x) \
+ BOOST_PP_IIF(BOOST_PP_OR(np,na),BOOST_SPIRIT_RP_IMPL_III, \
+ BOOST_SPIRIT_RP_OPAQUE_IMPL_II) \
+ (name,name_t,pars,np,acts,na,mbrs,nm,x)
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+// RP_IMPL_III
+//
+// The rule parser definition
+# define BOOST_SPIRIT_RP_IMPL_III(name,name_t,pars,np,acts,na,mbrs,nm,x) \
+ \
+ template< BOOST_SPIRIT_RP_TPL_PARAMS(pars,acts,typename __,1) > \
+ class name_t \
+ : public ::boost::spirit::parser< name_t \
+ < BOOST_SPIRIT_RP_TPL_PARAMS(pars,acts,__,0) > > \
+ { \
+ class __rule \
+ { \
+ BOOST_SPIRIT_RP_EMIT(PM_STATIC,pars,__T) \
+ BOOST_SPIRIT_RP_EMIT(AP_STATIC,acts,-) \
+ BOOST_SPIRIT_RP_EMIT(MV_STATIC,mbrs,BOOST_PP_IDENTITY(typename)) \
+ public: \
+ BOOST_TYPEOF_NESTED_TYPEDEF_TPL(__expr, \
+ ::boost::spirit::type_of::depend_on_type<__Dummy>(x) ); \
+ }; \
+ \
+ public: \
+ \
+ typedef name_t self_t; \
+ typedef typename __rule::__expr::type::parser_category_t \
+ parser_category_t; \
+ \
+ BOOST_PP_EXPR_IIF(BOOST_PP_NOR(np,na),typedef self_t const & embed_t;) \
+ \
+ protected: \
+ \
+ BOOST_SPIRIT_RP_EMIT(MV_NONSTATIC,mbrs,BOOST_PP_IDENTITY(typename)) \
+ BOOST_SPIRIT_RP_IF(na,SPIRIT_RP_AP_EXTRA_MBRS,2)(np,na) \
+ \
+ typename __rule::__expr::type::embed_t __parser; \
+ \
+ public: \
+ \
+ explicit name_t ( BOOST_SPIRIT_RP_CTOR(PARAMS,pars,np,acts) ) \
+ : BOOST_SPIRIT_RP_EMIT(MV_CTOR_INIT_LIST,mbrs,-) \
+ BOOST_PP_COMMA_IF(nm) \
+ BOOST_SPIRIT_RP_IF(na,SPIRIT_RP_CTOR_COMMA,4)(INIT_LIST,pars,np,acts)\
+ __parser(x) \
+ { } \
+ \
+ name_t( name_t const & that) \
+ : BOOST_SPIRIT_RP_EMIT(MV_CTOR_COPY_INIT_LIST,mbrs,that) \
+ BOOST_PP_COMMA_IF(nm) \
+ BOOST_SPIRIT_RP_IF(na,SPIRIT_RP_CTOR_COMMA,4) \
+ (COPY_INIT_LIST,pars,np,acts) \
+ __parser(that.__parser) \
+ { } \
+ \
+ template<typename Scanner> struct result \
+ { \
+ typedef typename ::boost::spirit::parser_result< \
+ typename __rule::__expr::type, Scanner>::type type; \
+ }; \
+ \
+ template<typename Scanner> \
+ typename ::boost::spirit::parser_result<self_t, Scanner>::type \
+ parse(Scanner const & s) const { return __parser.parse(s); } \
+ \
+ BOOST_SPIRIT_RP_IF(na,SPIRIT_RP_AP_HANDLER,5) \
+ (name_t,np,acts,na,::boost::spirit::type_of) \
+ }; \
+ \
+ BOOST_PP_IF(np,BOOST_SPIRIT_RP_GEN_FUNC,BOOST_SPIRIT_RP_GLOB_VAR) \
+ (name,name_t,np,na) \
+ BOOST_SPIRIT_RP_REGISTER_TEMPLATE \
+ (name_t,BOOST_PP_INC(BOOST_PP_ADD(np,na)))
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+// RP_OPAQUE_IMPL_I
+//
+# define BOOST_SPIRIT_RP_OPAQUE_IMPL_I(name,pars,mbrs,expr) \
+ BOOST_SPIRIT_RP_OPAQUE_IMPL_II(name, name ## _t, \
+ pars,BOOST_SPIRIT_RP_ARRAY_SIZE(pars),-,-,\
+ mbrs,BOOST_SPIRIT_RP_ARRAY_SIZE(mbrs),expr)
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+// RP_OPAQUE_IMPL_II
+//
+# define BOOST_SPIRIT_RP_OPAQUE_IMPL_II(name,name_t,pars,np,_1,_2,mbrs,nm,x) \
+ class name_t; \
+ \
+ BOOST_SPIRIT_RP_REGISTER_TYPE(name_t) \
+ \
+ class name_t \
+ : public ::boost::spirit::parser< name_t > \
+ { \
+ class __rule \
+ { \
+ BOOST_SPIRIT_RP_EMIT(PM_OPAQUE_STATIC,pars,-) \
+ BOOST_SPIRIT_RP_EMIT(MV_STATIC,mbrs,BOOST_PP_EMPTY) \
+ public: \
+ BOOST_TYPEOF_NESTED_TYPEDEF(__expr,x) ; \
+ }; \
+ \
+ public: \
+ \
+ typedef name_t self_t; \
+ typedef __rule::__expr::type::parser_category_t parser_category_t; \
+ BOOST_PP_EXPR_IIF(BOOST_PP_NOT(np),typedef self_t const & embed_t;) \
+ \
+ protected: \
+ \
+ BOOST_SPIRIT_RP_EMIT(MV_NONSTATIC,mbrs,BOOST_PP_EMPTY) \
+ \
+ __rule::__expr::type::embed_t __parser; \
+ \
+ public: \
+ \
+ explicit name_t (BOOST_SPIRIT_RP_EMIT(PM_OPAQUE_CTOR_PARAMS,pars,-)) \
+ : BOOST_SPIRIT_RP_EMIT(MV_CTOR_INIT_LIST,mbrs,-) \
+ BOOST_PP_COMMA_IF(nm) __parser(x) \
+ { } \
+ \
+ name_t(name_t const & that) \
+ : BOOST_SPIRIT_RP_EMIT(MV_CTOR_COPY_INIT_LIST,mbrs,that) \
+ BOOST_PP_COMMA_IF(nm) __parser(that.__parser) \
+ { } \
+ \
+ template<typename Scanner> struct result \
+ { \
+ typedef typename ::boost::spirit::parser_result< \
+ __rule::__expr::type, Scanner>::type type; \
+ }; \
+ \
+ template<typename Scanner> \
+ typename ::boost::spirit::parser_result<self_t, Scanner>::type \
+ parse(Scanner const & s) const { return __parser.parse(s); } \
+ }; \
+ \
+ BOOST_PP_IF(np,BOOST_SPIRIT_RP_GEN_OPAQUE,BOOST_SPIRIT_RP_GLOB_OPAQUE) \
+ (name,name_t,np,pars)
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+// RP_AP_HANDLER
+//
+// Part of the rule parser definition for handling action placeholders
+# define BOOST_SPIRIT_RP_AP_HANDLER(name_t,np,acts,na,ns) \
+ private: \
+ template<typename A> struct __rebound_1st \
+ { \
+ typedef name_t < void BOOST_PP_ENUM_TRAILING_PARAMS(np,__T) , \
+ typename ns ::action_concatenator<__A0,A>::type \
+ BOOST_PP_COMMA_IF(BOOST_PP_DEC(na)) \
+ BOOST_PP_ENUM_SHIFTED_PARAMS(na,__A) \
+ > type; \
+ }; \
+ \
+ template<typename X> struct __rebound \
+ { \
+ typedef name_t < \
+ void BOOST_PP_ENUM_TRAILING_PARAMS(np,__T) \
+ BOOST_SPIRIT_RP_EMIT(AP_REBOUND_TPL_ARGS,acts,X) \
+ > type; \
+ }; \
+ public: \
+ template<typename A> \
+ typename __rebound_1st<A>::type const operator[](A const & a) const \
+ { \
+ return typename __rebound_1st<A>::type ( \
+ BOOST_PP_ENUM_PARAMS(np,__p) BOOST_PP_COMMA_IF(np) \
+ ns ::concatenate_actions(__a0,a) \
+ BOOST_PP_COMMA_IF(BOOST_PP_DEC(na)) \
+ BOOST_PP_ENUM_SHIFTED_PARAMS(na,__a) ); \
+ } \
+ template<class PH, ns ::action_chain_mode M, typename A> \
+ typename __rebound< ns ::action_chain<PH,M,A> >::type const \
+ operator[]( ns ::action_chain<PH,M,A> const & x) const \
+ { \
+ return typename __rebound< ns ::action_chain<PH,M,A> >::type ( \
+ BOOST_PP_ENUM_PARAMS(np,__p) BOOST_PP_COMMA_IF(np) \
+ BOOST_SPIRIT_RP_EMIT(AP_REBOUND_ARGS,acts,x) ); \
+ } \
+ template<class Head, class Tail> \
+ typename __rebound< ns ::action_chains<Head,Tail> >::type const \
+ operator[]( ns ::action_chains<Head,Tail> const & x) const \
+ { \
+ return typename __rebound< ns ::action_chains<Head,Tail> >::type ( \
+ BOOST_PP_ENUM_PARAMS(np,__p) BOOST_PP_COMMA_IF(np) \
+ BOOST_SPIRIT_RP_EMIT(AP_REBOUND_ARGS,acts,x) ); \
+ }
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+// RP_AP_EXTRA_MBRS
+//
+// Extra members we need for rebinding if there are action placeholders
+# define BOOST_SPIRIT_RP_AP_EXTRA_MBRS(np,na) \
+ private: \
+ BOOST_PP_REPEAT(np,BOOST_SPIRIT_RP_PM_MBRS,-) \
+ BOOST_PP_REPEAT(na,BOOST_SPIRIT_RP_AP_MBRS,-)
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+// RP_PM_MBRS
+//
+// Member variables to remember parameters if there are action placeholder
+# define BOOST_SPIRIT_RP_PM_MBRS(z,i,d) __T ## i __p ## i ;
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+// RP_AP_MBRS
+//
+// Member variables to remember action placeholder substitutes
+# define BOOST_SPIRIT_RP_AP_MBRS(z,i,d) __A ## i __a ## i ;
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+// RP_CTOR
+//
+// Expands to a fragment of a constructor (parameters or init-list)
+# define BOOST_SPIRIT_RP_CTOR(what,pars,np,acts) \
+ BOOST_SPIRIT_RP_EMIT(PM_CTOR_ ## what,pars,__T) \
+ BOOST_SPIRIT_RP_EMIT(AP_CTOR_ ## what,acts,np)
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+// RP_CTOR_COMMA
+//
+// RP_CTOR with a trailing comma
+# define BOOST_SPIRIT_RP_CTOR_COMMA(what,pars,np,acts) \
+ BOOST_SPIRIT_RP_CTOR(what,pars,np,acts) ,
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+// RP_TPL_PARAMS
+//
+// Expands to the template parameters or arguments of the rule parser template
+# define BOOST_SPIRIT_RP_TPL_PARAMS(pars,acts,prefix,defaults) \
+ prefix ## Dummy \
+ BOOST_SPIRIT_RP_EMIT(PM_TEMPLATE_PARAMS,pars,prefix ## T) \
+ BOOST_SPIRIT_RP_EMIT(AP_TEMPLATE_PARAMS,acts,(prefix ## A,defaults))
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+// RP_GEN_FUNC
+//
+// Generator function
+# define BOOST_SPIRIT_RP_GEN_FUNC(name,name_t,np,na) \
+ template< BOOST_PP_ENUM_PARAMS(np,typename T) > \
+ inline name_t < void BOOST_PP_ENUM_TRAILING_PARAMS(np,T) > \
+ name( BOOST_PP_ENUM_BINARY_PARAMS(np,T, const & p) ) \
+ { return name_t < void BOOST_PP_ENUM_TRAILING_PARAMS(np,T) > \
+ (BOOST_PP_ENUM_PARAMS(np,p) BOOST_PP_ENUM_TRAILING_PARAMS(na, \
+ ::boost::spirit::type_of::nop_functor() BOOST_PP_INTERCEPT) ); \
+ }
+// RP_GEN_OPAQUE
+//
+// non-templated version for opaque rule parsers.
+# define BOOST_SPIRIT_RP_GEN_OPAQUE(name,name_t,np,pars) \
+ inline name_t name( BOOST_SPIRIT_RP_EMIT(PM_OPAQUE_GEN_PARAMS,pars,p)) \
+ { return name_t (BOOST_PP_ENUM_PARAMS(np,p)); }
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+// RP_GLOB_VAR
+//
+// Global variable -- used instead of the generator function if there are no
+// parameters
+# define BOOST_SPIRIT_RP_GLOB_VAR(name,name_t,np,na) \
+ static name_t <void> const name = name_t <void>(BOOST_PP_ENUM_PARAMS(na, \
+ ::boost::spirit::type_of::nop_functor() BOOST_PP_INTERCEPT) );
+
+// RP_GLOB_OPAQUE
+//
+// non-templated version for opaque rule parsers.
+# define BOOST_SPIRIT_RP_GLOB_OPAQUE(name,name_t,np,pars) \
+ static name_t const name = name_t () ;
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+// PP_EMIT operations (fragment emittion based on array input)
+
+// - - Namespace handling
+
+// NS_OPEN
+# define BOOST_SPIRIT_RP__NS_OPEN(r,data,i,elem) \
+ namespace BOOST_SPIRIT_RP_OPTIONAL(elem) {
+
+// NS_QUALIFY
+# define BOOST_SPIRIT_RP__NS_QUALIFY(r,data,i,elem) \
+ BOOST_SPIRIT_RP_OPTIONAL(elem ::)
+
+// NS_CLOSE
+# define BOOST_SPIRIT_RP__NS_CLOSE(r,data,i,elem) }
+
+// - - Parameter handling
+
+// PM_STATIC
+# define BOOST_SPIRIT_RP__PM_STATIC(r,data,i,elem) \
+ static typename ::boost::call_traits< data ## i >::reference elem ;
+
+// PM_CTOR_PARAMS
+# define BOOST_SPIRIT_RP__PM_CTOR_PARAMS(r,data,i,elem) \
+ BOOST_PP_COMMA_IF(i) \
+ typename ::boost::call_traits< data ## i >::param_type elem
+
+// PM_CTOR_ARGS
+# define BOOST_SPIRIT_RP__PM_CTOR_ARGS(r,data,i,elem) \
+ BOOST_PP_COMMA_IF(i) elem
+
+// PM_CTOR_INIT_LIST
+# define BOOST_SPIRIT_RP__PM_CTOR_INIT_LIST(r,data,i,elem) \
+ BOOST_PP_COMMA_IF(i) __p ## i ( elem )
+
+// PM_CTOR_COPY_INIT_LIST
+# define BOOST_SPIRIT_RP__PM_CTOR_COPY_INIT_LIST(r,data,i,elem) \
+ BOOST_PP_COMMA_IF(i) __p ## i ( that. __p ## i )
+
+
+// PM_TEMPLATE_PARAMS
+# define BOOST_SPIRIT_RP__PM_TEMPLATE_PARAMS(r,data,i,elem) , data ## i
+
+// - strictly typed parameters of the opaque rule_parser
+
+// PM_OPAQUE_STATIC
+# define BOOST_SPIRIT_RP__PM_OPAQUE_STATIC(r,data,i,elem) \
+ static ::boost::call_traits< \
+ BOOST_SPIRIT_RP_TYPE(BOOST_PP_TUPLE_ELEM(2,0,elem)) \
+ >::reference BOOST_PP_TUPLE_ELEM(2,1,elem) ;
+
+// PM_OPAQUE_CTOR_PARAMS
+# define BOOST_SPIRIT_RP__PM_OPAQUE_CTOR_PARAMS(r,data,i,elem) \
+ BOOST_PP_COMMA_IF(i) ::boost::call_traits< \
+ BOOST_SPIRIT_RP_TYPE(BOOST_PP_TUPLE_ELEM(2,0,elem)) \
+ >::param_type BOOST_PP_TUPLE_ELEM(2,1,elem)
+
+// PM_OPAQUE_GEN_PARAMS
+# define BOOST_SPIRIT_RP__PM_OPAQUE_GEN_PARAMS(r,data,i,elem) \
+ BOOST_PP_COMMA_IF(i) ::boost::call_traits< \
+ BOOST_SPIRIT_RP_TYPE(BOOST_PP_TUPLE_ELEM(2,0,elem)) \
+ >::param_type data ## i
+
+// - - Member variable handling
+
+// MV_NONSTATIC
+# define BOOST_SPIRIT_RP__MV_NONSTATIC(r,data,i,elem) \
+ data() BOOST_SPIRIT_RP_TYPE(BOOST_PP_TUPLE_ELEM(3,0,elem)) \
+ BOOST_PP_TUPLE_ELEM(3,1,elem) ;
+
+// MV_STATIC
+# define BOOST_SPIRIT_RP__MV_STATIC(r,data,i,elem) \
+ static data() ::boost::call_traits< \
+ data() BOOST_SPIRIT_RP_TYPE(BOOST_PP_TUPLE_ELEM(3,0,elem)) \
+ >::reference BOOST_PP_TUPLE_ELEM(3,1,elem) ;
+
+// MV_CTOR_INIT_LIST
+# define BOOST_SPIRIT_RP__MV_CTOR_INIT_LIST(r,data,i,elem) \
+ BOOST_PP_COMMA_IF(i) \
+ BOOST_PP_TUPLE_ELEM(3,1,elem) BOOST_PP_TUPLE_ELEM(3,2,elem)
+
+// MV_CTOR_COPY_INIT_LIST
+# define BOOST_SPIRIT_RP__MV_CTOR_COPY_INIT_LIST(r,data,i,elem) \
+ BOOST_PP_COMMA_IF(i) \
+ BOOST_PP_TUPLE_ELEM(3,1,elem) (data . BOOST_PP_TUPLE_ELEM(3,1,elem))
+
+// - - Action placeholder handling
+
+// AP_STATIC
+# define BOOST_SPIRIT_RP__AP_STATIC(r,data,i,elem) static __A ## i & elem ;
+
+// AP_CTOR_PARAMS
+# define BOOST_SPIRIT_RP__AP_CTOR_PARAMS(r,data,i,elem) \
+ BOOST_SPIRIT_RP_COMMA_IF_OR(data,i) \
+ typename ::boost::call_traits< __A ## i >::param_type elem
+
+// AP_CTOR_ARGS
+# define BOOST_SPIRIT_RP__AP_CTOR_ARGS(r,data,i,elem) \
+ BOOST_SPIRIT_RP_COMMA_IF_OR(data,i) elem
+
+// AP_CTOR_INIT_LIST
+# define BOOST_SPIRIT_RP__AP_CTOR_INIT_LIST(r,data,i,elem) \
+ BOOST_SPIRIT_RP_COMMA_IF_OR(data,i) __a ## i ( elem )
+
+// AP_CTOR_COPY_INIT_LIST
+# define BOOST_SPIRIT_RP__AP_CTOR_COPY_INIT_LIST(r,data,i,elem) \
+ BOOST_SPIRIT_RP_COMMA_IF_OR(data,i) __a ## i ( that. __a ## i )
+
+// AP_TEMPLATE_PARAMS
+# define BOOST_SPIRIT_RP__AP_TEMPLATE_PARAMS(r,data,i,elem) \
+ , BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(2,0,data),i) \
+ BOOST_PP_EXPR_IIF(BOOST_PP_TUPLE_ELEM(2,1,data), \
+ = ::boost::spirit::type_of::nop_functor)
+
+// AP_REBOUND_ARGS
+# define BOOST_SPIRIT_RP__AP_REBOUND_ARGS(r,data,i,elem) \
+ BOOST_PP_COMMA_IF(i) \
+ ::boost::spirit::type_of::get_placeholdee< __action_placeholder:: elem > \
+ ( __a ## i , data )
+
+// AP_REBOUND_TPL_ARGS
+# define BOOST_SPIRIT_RP__AP_REBOUND_TPL_ARGS(r,data,i,elem) \
+ , typename ::boost::spirit::type_of::placeholdee< \
+ __action_placeholder:: elem , __A ## i, data >::type
+
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+// PP_EMIT
+//
+// Performs one of the operations in the above section on an optional array.
+//
+# define BOOST_SPIRIT_RP_EMIT(op, array, data) \
+ BOOST_SPIRIT_RP_ARRAY_FOR_EACH_I(BOOST_SPIRIT_RP__ ## op,data,array)
+// --- --- - - --- - - --- - - - - --- - - - - - - - - - - - - - - - - - - - - -
+// RP_ARRAY_FOR_EACH_I
+//
+// Iterates an optional array. That is you can pass e.g.'-' or 'none' to denote
+// emptiness.
+# define BOOST_SPIRIT_RP_ARRAY_FOR_EACH_I(macro,data,optional_array) \
+ BOOST_PP_IIF(BOOST_PP_IS_BINARY(optional_array), \
+ BOOST_SPIRIT_RP_ARRAY_FOR_EACH_I_IMPL, \
+ BOOST_PP_TUPLE_EAT(3))(macro,data,optional_array)
+
+// RP_ARRAY_FOR_EACH_I_IMPL
+# define BOOST_SPIRIT_RP_ARRAY_FOR_EACH_I_IMPL(macro,data,array) \
+ BOOST_SPIRIT_RP_IF(BOOST_PP_ARRAY_SIZE(array),PP_SEQ_FOR_EACH_I,3) \
+ (macro,data, BOOST_SPIRIT_RP_IF(BOOST_PP_ARRAY_SIZE(array), \
+ PP_TUPLE_TO_SEQ,2) array)
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+// RP_ARRAY_SIZE
+//
+// Expands to the size of an "optional array".
+//
+// Examples:
+//
+// BOOST_SPIRIT_RP_ARRAY_SIZE( (2,(a,b)) ) // 2
+// BOOST_SPIRIT_RP_ARRAY_SIZE( (0,()) ) // 0
+// BOOST_SPIRIT_RP_ARRAY_SIZE( none ) // 0
+// BOOST_SPIRIT_RP_ARRAY_SIZE( - ) // 0
+//
+# define BOOST_SPIRIT_RP_ARRAY_SIZE(optional_array) \
+ BOOST_PP_IIF(BOOST_PP_IS_BINARY(optional_array), \
+ BOOST_PP_ARRAY_SIZE, 0 BOOST_PP_TUPLE_EAT(1))(optional_array)
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+// RP_OPTIONAL
+//
+// Expands to nothing if the argument is parenthesized.
+//
+// Examples:
+//
+// BOOST_SPIRIT_RP_OPTIONAL( foobar ) // foobar
+// BOOST_SPIRIT_RP_OPTIONAL( (none) ) // evaluates to nothing
+//
+# define BOOST_SPIRIT_RP_OPTIONAL(elem) \
+ BOOST_PP_EXPR_IIF(BOOST_PP_COMPL(BOOST_PP_IS_UNARY(elem)),elem)
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+// RP_COMMA_IF_OR
+//
+// Expands to nothing if both arguments are zero, otherwise expands to a comma.
+//
+# define BOOST_SPIRIT_RP_COMMA_IF_OR(a,b) \
+ BOOST_PP_IIF(BOOST_PP_OR(a,b),BOOST_PP_COMMA,BOOST_PP_EMPTY)()
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+// RP_IF
+//
+// BOOST_SPIRIT_RP_IF(cond,name,arity)
+//
+// is equivalent to:
+//
+// BOOST_PP_IF(cond,BOOST_name,BOOST_PP_TUPLE_EAT(arity))
+//
+# define BOOST_SPIRIT_RP_IF(cond,name,arity) \
+ BOOST_PP_IF(cond,BOOST_ ## name,BOOST_PP_TUPLE_EAT(arity))
+
+//------------------------------------------------------------------------------
+// Wrapper and gernator function to embed a parser by reference
+//------------------------------------------------------------------------------
+
+namespace boost { namespace spirit {
+
+ // Wrapper to embed a parser by reference
+
+ template<class P> class parser_reference
+ : public parser< parser_reference<P> >
+ {
+ P const & ref_that;
+ public:
+ parser_reference(P & that)
+ // we allow implicit conversion but forbid temporaries.
+ : ref_that(that)
+ { }
+
+ typedef parser_reference<P> self_t;
+ typedef self_t const & embed_t;
+ typedef typename P::parser_category_t parser_category_t;
+
+ template<typename ScannerT> struct result
+ { typedef typename P::BOOST_NESTED_TEMPLATE result<ScannerT>::type type; };
+
+ template<typename ScannerT>
+ typename result<ScannerT>::type
+ parse(ScannerT const & scan) const
+ { return this->ref_that.parse(scan); }
+ };
+
+ template<class P> parser_reference<P>
+ embed_by_reference(::boost::spirit::parser<P> & p)
+ { return p; }
+
+} } // namespace ::boost::spirit
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::parser_reference, 1)
+
+//------------------------------------------------------------------------------
+// Expression templates for action placeholders.
+//------------------------------------------------------------------------------
+
+namespace boost { namespace spirit { namespace type_of {
+
+ // No-operation functor
+
+ struct nop_functor
+ {
+ template<typename T>
+ bool operator()(T const &) const
+ { return false; }
+ template<typename T, typename U>
+ bool operator()(T const &, U const &) const
+ { return false; }
+
+ typedef bool result_type;
+ };
+
+ // Composite action
+
+ template<typename Action1, typename Action2>
+ class composite_action
+ {
+ Action1 fnc_a1;
+ Action2 fnc_a2;
+ public:
+ composite_action(Action1 const & a1, Action2 const & a2)
+ : fnc_a1(a1), fnc_a2(a2)
+ { }
+
+ template<typename T>
+ void operator()(T const & inp) const
+ { fnc_a1(inp); fnc_a2(inp); }
+
+ template<typename T, typename U>
+ void operator()(T const & inp1, U const inp2) const
+ { fnc_a1(inp1, inp2); fnc_a2(inp1, inp2); }
+ };
+
+ // Action concatenation (and optimize away nop_functorS)
+
+ template<typename Action1, typename Action2>
+ struct action_concatenator
+ {
+ typedef composite_action<Action1,Action2> type;
+
+ static type concatenate(Action1 const & a1, Action2 const & a2)
+ { return composite_action<Action1,Action2>(a1,a2); }
+ };
+ template<typename Action> struct action_concatenator<nop_functor, Action>
+ {
+ typedef Action type;
+
+ static type concatenate(nop_functor const &, Action const & a)
+ { return a; }
+ };
+ template<typename Action> struct action_concatenator<Action, nop_functor>
+ {
+ typedef Action type;
+
+ static type concatenate(Action const & a, nop_functor const &)
+ { return a; }
+ };
+ template<> struct action_concatenator<nop_functor, nop_functor>
+ {
+ typedef nop_functor type;
+
+ static type concatenate(nop_functor const &, nop_functor const &)
+ { return nop_functor(); }
+ };
+
+ template<typename Action1, typename Action2>
+ typename action_concatenator<Action1,Action2>::type
+ concatenate_actions(Action1 const & a1, Action2 const & a2)
+ {
+ return action_concatenator<Action1,Action2>::concatenate(a1,a2);
+ }
+
+ // Action chains
+
+ enum action_chain_mode { replace, append };
+
+ template<class Placeholder, action_chain_mode Mode, typename Action>
+ class action_chain
+ {
+ Action fnc_action;
+ public:
+ action_chain(Action const & a)
+ : fnc_action(a)
+ { }
+
+ typedef Action action_type;
+
+ Action const & action() const { return fnc_action; }
+ };
+
+ // This operator adds actions to an action chain definition
+ template<class PH, action_chain_mode M, typename A1, typename A2>
+ action_chain<PH, M, typename action_concatenator<A1,A2>::type>
+ operator, (action_chain<PH,M,A1> const & chain, A2 const & a)
+ {
+ return action_chain<PH,M,typename action_concatenator<A1,A2>::type>
+ ( concatenate_actions(chain.action(), a) );
+ }
+
+ // Expression template for mutiple action chain assignments
+ template<class ChainOrChains, class LastChain>
+ class action_chains
+ {
+ ChainOrChains obj_head;
+ LastChain obj_tail;
+ public:
+ action_chains(ChainOrChains const & head, LastChain const & tail)
+ : obj_head(head), obj_tail(tail)
+ { }
+
+ typedef ChainOrChains head_type;
+ typedef LastChain tail_type;
+
+ head_type const & head() const { return obj_head; }
+ tail_type const & tail() const { return obj_tail; }
+ };
+
+ // Action chain concatenation
+ template<class Head, class Tail>
+ action_chains<Head,Tail> make_chain(Head const & h, Tail const & t)
+ { return action_chains<Head,Tail>(h,t); }
+
+ template<class PH1, action_chain_mode M1, typename A1,
+ class PH2, action_chain_mode M2, typename A2>
+ action_chains< action_chain<PH1,M1,A1>, action_chain<PH2,M2,A2> >
+ operator, (action_chain<PH1,M1,A1> const & h,
+ action_chain<PH2,M2,A2> const & t)
+ { return make_chain(h,t); }
+
+ template<class Head, class Tail,class PH, action_chain_mode M, typename A>
+ action_chains< action_chains<Head,Tail>, action_chain<PH,M,A> >
+ operator, (action_chains<Head,Tail> const & h, action_chain<PH,M,A> const & t)
+ { return make_chain(h,t); }
+
+
+ // Extract the (maybe composite) action associated with an action
+ // placeholders from the chains with a fold algorithm.
+ template<class Placeholder, typename StartAction, class NewChainOrChains>
+ struct placeholdee
+ {
+ typedef StartAction type;
+
+ static type get(StartAction const & a, NewChainOrChains const &)
+ { return a; }
+ };
+
+ template<class Placeholder, // <-- non-deduced
+ typename StartAction, class NewChainOrChains>
+ typename placeholdee<Placeholder,StartAction,NewChainOrChains>::type
+ get_placeholdee(StartAction const & a, NewChainOrChains const & c)
+ { return placeholdee<Placeholder,StartAction,NewChainOrChains>::get(a,c); }
+
+ template<class Placeholder, typename StartAction, class Head, class Tail>
+ struct placeholdee
+ < Placeholder, StartAction, action_chains<Head,Tail> >
+ {
+ typedef typename placeholdee<Placeholder,
+ typename placeholdee<Placeholder,StartAction,Head>::type, Tail >::type
+ type;
+
+ static type get(StartAction const & a, action_chains<Head,Tail> const & c)
+ {
+ return get_placeholdee<Placeholder>(
+ get_placeholdee<Placeholder>(a,c.head()), c.tail() );
+ }
+ };
+
+ template<class Placeholder, typename StartAction, typename A>
+ struct placeholdee
+ < Placeholder, StartAction, action_chain<Placeholder,replace,A> >
+ {
+ typedef A type;
+
+ static type get(StartAction const &,
+ action_chain<Placeholder,replace,A> const & c)
+ { return c.action(); }
+ };
+
+ template<class Placeholder, typename StartAction, typename A>
+ struct placeholdee
+ < Placeholder, StartAction, action_chain<Placeholder,append,A> >
+ {
+ typedef typename action_concatenator<StartAction,A>::type type;
+
+ static type get(StartAction const & a,
+ action_chain<Placeholder,append,A> const & c)
+ { return concatenate_actions(a,c.action()); }
+ };
+
+} } } // namespace ::boost::spirit::type_of
+
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::type_of::nop_functor)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::type_of::composite_action,2)
+
+//------------------------------------------------------------------------------
+// Misc.utilities
+//------------------------------------------------------------------------------
+
+namespace boost { namespace spirit { namespace type_of {
+
+ // Utility function to create a dependency to a template argument.
+
+ template<typename T, typename X>
+ X const & depend_on_type(X const & x)
+ { return x; }
+
+ // Utility to allow use parenthesized type expressions with commas inside
+ // as a type within macros. Thanks to Dave Abrahams for telling me this nice
+ // trick.
+
+ #define BOOST_SPIRIT_RP_TYPE(x) \
+ ::boost::spirit::type_of::remove_special_fptr \
+ < ::boost::spirit::type_of::special_result & (*) x >::type
+
+ struct special_result;
+
+ template<typename T> struct remove_special_fptr { };
+ template<typename T> struct remove_special_fptr< special_result & (*)(T) >
+ { typedef T type; };
+
+} } } // namespace ::boost::spirit::type_of
+
+//------------------------------------------------------------------------------
+#endif
+//------------------------------------------------------------------------------
+
diff --git a/boost/boost/spirit/utility/scoped_lock.hpp b/boost/boost/spirit/utility/scoped_lock.hpp
new file mode 100644
index 00000000000..a22dd20a068
--- /dev/null
+++ b/boost/boost/spirit/utility/scoped_lock.hpp
@@ -0,0 +1,108 @@
+/*=============================================================================
+ Copyright (c) 2003 Martin Wille
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+ =============================================================================*/
+#ifndef BOOST_SPIRIT_UTILITY_SCOPED_LOCK_HPP
+#define BOOST_SPIRIT_UTILITY_SCOPED_LOCK_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+#if !defined(BOOST_SPIRIT_COMPOSITE_HPP)
+#include <boost/spirit/core/composite.hpp>
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // scoped_lock_parser class
+ //
+ // implements locking of a mutex during execution of
+ // the parse method of an embedded parser
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename MutexT, typename ParserT>
+ struct scoped_lock_parser
+ : public unary< ParserT, parser< scoped_lock_parser<MutexT, ParserT> > >
+ {
+ typedef scoped_lock_parser<MutexT, ParserT> self_t;
+ typedef MutexT mutex_t;
+ typedef ParserT parser_t;
+
+ template <typename ScannerT>
+ struct result
+ {
+ typedef typename parser_result<parser_t, ScannerT>::type type;
+ };
+
+ scoped_lock_parser(mutex_t &m, parser_t const &p)
+ : unary< ParserT, parser< scoped_lock_parser<MutexT, ParserT> > >(p)
+ , mutex(m)
+ {}
+
+
+ template <typename ScannerT>
+ typename parser_result<self_t, ScannerT>::type
+ parse(ScannerT const &scan) const
+ {
+ typedef typename mutex_t::scoped_lock scoped_lock_t;
+ scoped_lock_t lock(mutex);
+ return this->subject().parse(scan);
+ }
+
+ mutex_t &mutex;
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // scoped_lock_parser_gen
+ //
+ // generator for scoped_lock_parser objects
+ // operator[] returns scoped_lock_parser according to its argument
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename MutexT>
+ struct scoped_lock_parser_gen
+ {
+ typedef MutexT mutex_t;
+ explicit scoped_lock_parser_gen(mutex_t &m) : mutex(m) {}
+
+ template<typename ParserT>
+ scoped_lock_parser
+ <
+ MutexT,
+ typename as_parser<ParserT>::type
+ >
+ operator[](ParserT const &p) const
+ {
+ typedef ::boost::spirit::as_parser<ParserT> as_parser_t;
+ typedef typename as_parser_t::type parser_t;
+
+ return scoped_lock_parser<mutex_t, parser_t>
+ (mutex, as_parser_t::convert(p));
+ }
+
+ mutex_t &mutex;
+ };
+
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // scoped_lock_d parser directive
+ //
+ // constructs a scoped_lock_parser generator from its argument
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename MutexT>
+ scoped_lock_parser_gen<MutexT>
+ scoped_lock_d(MutexT &mutex)
+ {
+ return scoped_lock_parser_gen<MutexT>(mutex);
+ }
+
+}} // namespace boost::spirit
+#endif // BOOST_SPIRIT_UTILITY_SCOPED_LOCK_HPP
diff --git a/boost/boost/spirit/utility/typeof.hpp b/boost/boost/spirit/utility/typeof.hpp
new file mode 100644
index 00000000000..96019541d87
--- /dev/null
+++ b/boost/boost/spirit/utility/typeof.hpp
@@ -0,0 +1,146 @@
+/*=============================================================================
+ Copyright (c) 2006 Tobias Schwinger
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(BOOST_SPIRIT_UTILITY_TYPEOF_HPP)
+#define BOOST_SPIRIT_UTILITY_TYPEOF_HPP
+
+#include <boost/typeof/typeof.hpp>
+
+#include <boost/spirit/core/typeof.hpp>
+
+#include <boost/spirit/utility/escape_char_fwd.hpp>
+#include <boost/spirit/utility/confix_fwd.hpp>
+#include <boost/spirit/utility/lists_fwd.hpp>
+#include <boost/spirit/utility/distinct_fwd.hpp>
+#include <boost/spirit/utility/grammar_def_fwd.hpp>
+
+namespace boost { namespace spirit {
+
+ // chset.hpp
+ template<typename CharT> class chset;
+
+ // functor_parser.hpp
+ template<typename FunctorT> struct functor_parser;
+
+ // loops.hpp
+ template<class ParserT, typename ExactT> class fixed_loop;
+ template<class ParserT, typename MinT, typename MaxT> class finite_loop;
+ template<class ParserT, typename MinT> class infinite_loop;
+
+ // regex.hpp
+ template<typename CharT> struct rxstrlit;
+
+ // flush_multi_pass.hpp
+ class flush_multi_pass_parser;
+
+ // scoped_lock.hpp
+ template<class MutexT, class ParserT> struct scoped_lock_parser;
+
+}} // namespace boost::spirit
+
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+
+// chset.hpp
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::chset,1)
+
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::chset<char>)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::chset<wchar_t>)
+
+
+// escape_char.hpp (has forward header)
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::escape_char_parser,(BOOST_TYPEOF_INTEGRAL(unsigned long))(typename))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::escape_char_action,(class)(typename)(BOOST_TYPEOF_INTEGRAL(unsigned long))(typename))
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::escape_char_parser,(BOOST_TYPEOF_INTEGRAL(unsigned long)))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::escape_char_action,(class)(typename)(BOOST_TYPEOF_INTEGRAL(unsigned long)))
+
+
+// functor_parser.hpp
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::functor_parser,1)
+
+
+// loops.hpp
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::fixed_loop,2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::finite_loop,3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::infinite_loop,2)
+
+
+// regex.hpp
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::rxstrlit,1)
+
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::rxstrlit<char>)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::rxstrlit<wchar_t>)
+
+
+// confix.hpp (has forward header)
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::confix_parser, 6)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::confix_parser, 5)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::confix_parser, 4)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::confix_parser, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::comment_nest_parser, 2)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::is_nested)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::non_nested)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::is_lexeme)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::non_lexeme)
+
+
+// lists.hpp (has forward header)
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::list_parser,4)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::list_parser,3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::list_parser,2)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::no_list_endtoken)
+
+
+// distinct.hpp (has forward header)
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::distinct_parser,2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::distinct_parser,1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::dynamic_distinct_parser,1)
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::distinct_parser<>)
+
+
+// flush_multi_pass.hpp
+
+BOOST_TYPEOF_REGISTER_TYPE(boost::spirit::flush_multi_pass_parser)
+
+
+// scoped_lock.hpp
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::scoped_lock_parser,2)
+
+
+// grammar_gen.hpp (has forward header)
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::grammar_def,BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT)
+
+#if BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT > 12
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::grammar_def,12)
+#endif
+#if BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT > 9
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::grammar_def, 9)
+#endif
+#if BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT > 6
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::grammar_def, 6)
+#endif
+#if BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT > 3
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::spirit::grammar_def, 3)
+#endif
+
+
+#endif
+
+
diff --git a/boost/boost/spirit/version.hpp b/boost/boost/spirit/version.hpp
new file mode 100644
index 00000000000..48c1f86b9ea
--- /dev/null
+++ b/boost/boost/spirit/version.hpp
@@ -0,0 +1,31 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#if !defined(SPIRIT_VERSION_HPP)
+#define SPIRIT_VERSION_HPP
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This checks, whether the used Boost library is at least V1.32.0
+//
+///////////////////////////////////////////////////////////////////////////////
+#include <boost/version.hpp>
+
+#if BOOST_VERSION < 103200
+#error "Spirit v1.8.x needs at least Boost V1.32.0 to compile successfully."
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This is the version of the current Spirit distribution
+//
+///////////////////////////////////////////////////////////////////////////////
+#define SPIRIT_VERSION 0x1804
+#define SPIRIT_PIZZA_VERSION SPIRIT_DOUBLE_CHEESE // :-)
+
+#endif // defined(SPIRIT_VERSION_HPP)
diff --git a/boost/boost/state_saver.hpp b/boost/boost/state_saver.hpp
new file mode 100644
index 00000000000..aa15feafa80
--- /dev/null
+++ b/boost/boost/state_saver.hpp
@@ -0,0 +1,94 @@
+#ifndef BOOST_STATE_SAVER_HPP
+#define BOOST_STATE_SAVER_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// state_saver.hpp:
+
+// (C) Copyright 2003-4 Pavel Vozenilek and Robert Ramey - http://www.rrsd.com.
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+// Inspired by Daryle Walker's iostate_saver concept. This saves the original
+// value of a variable when a state_saver is constructed and restores
+// upon destruction. Useful for being sure that state is restored to
+// variables upon exit from scope.
+
+
+#include <boost/config.hpp>
+#ifndef BOOST_NO_EXCEPTIONS
+ #include <exception>
+#endif
+
+#include <boost/call_traits.hpp>
+#include <boost/noncopyable.hpp>
+#include <boost/type_traits/has_nothrow_copy.hpp>
+#include <boost/detail/no_exceptions_support.hpp>
+
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+
+namespace boost {
+
+template<class T>
+// T requirements:
+// - POD or object semantic (cannot be reference, function, ...)
+// - copy constructor
+// - operator = (no-throw one preferred)
+class state_saver : private boost::noncopyable
+{
+private:
+ const T previous_value;
+ T & previous_ref;
+
+ struct restore {
+ static void invoke(T & previous_ref, const T & previous_value){
+ previous_ref = previous_value; // won't throw
+ }
+ };
+
+ struct restore_with_exception {
+ static void invoke(T & previous_ref, const T & previous_value){
+ BOOST_TRY{
+ previous_ref = previous_value;
+ }
+ BOOST_CATCH(::std::exception &) {
+ // we must ignore it - we are in destructor
+ }
+ BOOST_CATCH_END
+ }
+ };
+
+public:
+ state_saver(
+ T & object
+ ) :
+ previous_value(object),
+ previous_ref(object)
+ {}
+
+ ~state_saver() {
+ #ifndef BOOST_NO_EXCEPTIONS
+ typedef BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ has_nothrow_copy<T>,
+ mpl::identity<restore>,
+ mpl::identity<restore_with_exception>
+ >::type typex;
+ typex::invoke(previous_ref, previous_value);
+ #else
+ previous_ref = previous_value;
+ #endif
+ }
+
+}; // state_saver<>
+
+} // boost
+
+#endif //BOOST_STATE_SAVER_HPP
diff --git a/boost/boost/statechart/asynchronous_state_machine.hpp b/boost/boost/statechart/asynchronous_state_machine.hpp
new file mode 100644
index 00000000000..4870457e76f
--- /dev/null
+++ b/boost/boost/statechart/asynchronous_state_machine.hpp
@@ -0,0 +1,89 @@
+#ifndef BOOST_STATECHART_ASYNCHRONOUS_STATE_MACHINE_HPP_INCLUDED
+#define BOOST_STATECHART_ASYNCHRONOUS_STATE_MACHINE_HPP_INCLUDED
+//////////////////////////////////////////////////////////////////////////////
+// Copyright 2002-2006 Andreas Huber Doenni
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+#include <boost/statechart/state_machine.hpp>
+#include <boost/statechart/fifo_scheduler.hpp>
+#include <boost/statechart/null_exception_translator.hpp>
+#include <boost/statechart/event_processor.hpp>
+
+#include <memory> // std::allocator
+
+
+namespace boost
+{
+namespace statechart
+{
+
+
+
+class event_base;
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+template< class MostDerived,
+ class InitialState,
+ class Scheduler = fifo_scheduler<>,
+ class Allocator = std::allocator< void >,
+ class ExceptionTranslator = null_exception_translator >
+class asynchronous_state_machine : public state_machine<
+ MostDerived, InitialState, Allocator, ExceptionTranslator >,
+ public event_processor< Scheduler >
+{
+ typedef state_machine< MostDerived,
+ InitialState, Allocator, ExceptionTranslator > machine_base;
+ typedef event_processor< Scheduler > processor_base;
+ protected:
+ //////////////////////////////////////////////////////////////////////////
+ typedef asynchronous_state_machine my_base;
+
+ asynchronous_state_machine( typename processor_base::my_context ctx ) :
+ processor_base( ctx )
+ {
+ }
+
+ virtual ~asynchronous_state_machine() {}
+
+ public:
+ //////////////////////////////////////////////////////////////////////////
+ // The following declarations should be private.
+ // They are only public because many compilers lack template friends.
+ //////////////////////////////////////////////////////////////////////////
+ void terminate()
+ {
+ processor_base::terminate();
+ }
+
+ private:
+ //////////////////////////////////////////////////////////////////////////
+ virtual void initiate_impl()
+ {
+ machine_base::initiate();
+ }
+
+ virtual void process_event_impl( const event_base & evt )
+ {
+ machine_base::process_event( evt );
+ }
+
+ virtual void terminate_impl()
+ {
+ machine_base::terminate();
+ }
+};
+
+
+
+} // namespace statechart
+} // namespace boost
+
+
+
+#endif
diff --git a/boost/boost/statechart/custom_reaction.hpp b/boost/boost/statechart/custom_reaction.hpp
new file mode 100644
index 00000000000..61767a95240
--- /dev/null
+++ b/boost/boost/statechart/custom_reaction.hpp
@@ -0,0 +1,74 @@
+#ifndef BOOST_STATECHART_CUSTOM_REACTION_HPP_INCLUDED
+#define BOOST_STATECHART_CUSTOM_REACTION_HPP_INCLUDED
+//////////////////////////////////////////////////////////////////////////////
+// Copyright 2002-2006 Andreas Huber Doenni
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+#include <boost/statechart/result.hpp>
+
+#include <boost/cast.hpp> // boost::polymorphic_downcast
+
+
+
+namespace boost
+{
+namespace statechart
+{
+
+
+
+class event_base;
+
+//////////////////////////////////////////////////////////////////////////////
+template< class Event >
+class custom_reaction
+{
+ public:
+ //////////////////////////////////////////////////////////////////////////
+ // The following declarations should be private.
+ // They are only public because many compilers lack template friends.
+ //////////////////////////////////////////////////////////////////////////
+ template< class State, class EventBase, class IdType >
+ static detail::reaction_result react(
+ State & stt, const EventBase & evt, const IdType & eventType )
+ {
+ if ( eventType == Event::static_type() )
+ {
+ return detail::result_utility::get_result(
+ stt.react( *polymorphic_downcast< const Event * >( &evt ) ) );
+ }
+ else
+ {
+ return detail::no_reaction;
+ }
+ }
+};
+
+template<>
+class custom_reaction< event_base >
+{
+ public:
+ //////////////////////////////////////////////////////////////////////////
+ // The following declarations should be private.
+ // They are only public because many compilers lack template friends.
+ //////////////////////////////////////////////////////////////////////////
+ template< class State, class EventBase, class IdType >
+ static detail::reaction_result react(
+ State & stt, const EventBase & evt, const IdType & )
+ {
+ return detail::result_utility::get_result( stt.react( evt ) );
+ }
+};
+
+
+
+} // namespace statechart
+} // namespace boost
+
+
+
+#endif
diff --git a/boost/boost/statechart/deep_history.hpp b/boost/boost/statechart/deep_history.hpp
new file mode 100644
index 00000000000..4a108d047d4
--- /dev/null
+++ b/boost/boost/statechart/deep_history.hpp
@@ -0,0 +1,63 @@
+#ifndef BOOST_STATECHART_DEEP_HISTORY_HPP_INCLUDED
+#define BOOST_STATECHART_DEEP_HISTORY_HPP_INCLUDED
+//////////////////////////////////////////////////////////////////////////////
+// Copyright 2002-2006 Andreas Huber Doenni
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+#include <boost/mpl/bool.hpp>
+#include <boost/static_assert.hpp>
+
+
+
+namespace boost
+{
+namespace statechart
+{
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+template< class DefaultState >
+class deep_history
+{
+ public:
+ //////////////////////////////////////////////////////////////////////////
+ // If you receive a
+ // "use of undefined type 'boost::STATIC_ASSERTION_FAILURE<x>'" or similar
+ // compiler error here then you forgot to pass either
+ // statechart::has_deep_history or statechart::has_full_history as the
+ // last parameter of DefaultState's context.
+ BOOST_STATIC_ASSERT( DefaultState::context_type::deep_history::value );
+
+ //////////////////////////////////////////////////////////////////////////
+ // The following declarations should be private.
+ // They are only public because many compilers lack template friends.
+ //////////////////////////////////////////////////////////////////////////
+ typedef typename DefaultState::outermost_context_base_type
+ outermost_context_base_type;
+ typedef typename DefaultState::context_type context_type;
+ typedef typename DefaultState::context_ptr_type context_ptr_type;
+ typedef typename DefaultState::context_type_list context_type_list;
+ typedef typename DefaultState::orthogonal_position orthogonal_position;
+
+ static void deep_construct(
+ const context_ptr_type & pContext,
+ outermost_context_base_type & outermostContextBase )
+ {
+ outermostContextBase.template construct_with_deep_history<
+ DefaultState >( pContext );
+ }
+};
+
+
+
+} // namespace statechart
+} // namespace boost
+
+
+
+#endif
diff --git a/boost/boost/statechart/deferral.hpp b/boost/boost/statechart/deferral.hpp
new file mode 100644
index 00000000000..8bb6f7259d4
--- /dev/null
+++ b/boost/boost/statechart/deferral.hpp
@@ -0,0 +1,71 @@
+#ifndef BOOST_STATECHART_DEFERRAL_HPP_INCLUDED
+#define BOOST_STATECHART_DEFERRAL_HPP_INCLUDED
+//////////////////////////////////////////////////////////////////////////////
+// Copyright 2002-2006 Andreas Huber Doenni
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+#include <boost/statechart/result.hpp>
+
+
+
+namespace boost
+{
+namespace statechart
+{
+
+
+
+class event_base;
+
+//////////////////////////////////////////////////////////////////////////////
+template< class Event >
+class deferral
+{
+ public:
+ //////////////////////////////////////////////////////////////////////////
+ // The following declarations should be private.
+ // They are only public because many compilers lack template friends.
+ //////////////////////////////////////////////////////////////////////////
+ template< class State, class EventBase, class IdType >
+ static detail::reaction_result react(
+ State & stt, const EventBase &, const IdType & eventType )
+ {
+ if ( eventType == Event::static_type() )
+ {
+ return detail::result_utility::get_result( stt.defer_event() );
+ }
+ else
+ {
+ return detail::no_reaction;
+ }
+ }
+};
+
+template<>
+class deferral< event_base >
+{
+ public:
+ //////////////////////////////////////////////////////////////////////////
+ // The following declarations should be private.
+ // They are only public because many compilers lack template friends.
+ //////////////////////////////////////////////////////////////////////////
+ template< class State, class EventBase, class IdType >
+ static detail::reaction_result react(
+ State & stt, const EventBase &, const IdType & )
+ {
+ return detail::result_utility::get_result( stt.defer_event() );
+ }
+};
+
+
+
+} // namespace statechart
+} // namespace boost
+
+
+
+#endif
diff --git a/boost/boost/statechart/detail/avoid_unused_warning.hpp b/boost/boost/statechart/detail/avoid_unused_warning.hpp
new file mode 100644
index 00000000000..1c002a46b14
--- /dev/null
+++ b/boost/boost/statechart/detail/avoid_unused_warning.hpp
@@ -0,0 +1,31 @@
+#ifndef BOOST_STATECHART_DETAIL_AVOID_UNUSED_WARNING_HPP_INCLUDED
+#define BOOST_STATECHART_DETAIL_AVOID_UNUSED_WARNING_HPP_INCLUDED
+//////////////////////////////////////////////////////////////////////////////
+// Copyright 2002-2006 Andreas Huber Doenni
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+namespace boost
+{
+namespace statechart
+{
+namespace detail
+{
+
+
+
+template< typename T >
+inline void avoid_unused_warning( const T & ) {}
+
+
+
+} // namespace detail
+} // namespace statechart
+} // namespace boost
+
+
+
+#endif
diff --git a/boost/boost/statechart/detail/constructor.hpp b/boost/boost/statechart/detail/constructor.hpp
new file mode 100644
index 00000000000..0cc317af2dd
--- /dev/null
+++ b/boost/boost/statechart/detail/constructor.hpp
@@ -0,0 +1,139 @@
+#ifndef BOOST_STATECHART_DETAIL_CONSTRUCTOR_HPP_INCLUDED
+#define BOOST_STATECHART_DETAIL_CONSTRUCTOR_HPP_INCLUDED
+//////////////////////////////////////////////////////////////////////////////
+// Copyright 2002-2006 Andreas Huber Doenni
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/equal_to.hpp>
+#include <boost/mpl/size.hpp>
+#include <boost/mpl/front.hpp>
+#include <boost/mpl/advance.hpp>
+#include <boost/mpl/find.hpp>
+#include <boost/mpl/push_front.hpp>
+#include <boost/mpl/pop_front.hpp>
+#include <boost/mpl/erase.hpp>
+#include <boost/mpl/reverse.hpp>
+#include <boost/mpl/long.hpp>
+
+
+
+namespace boost
+{
+namespace statechart
+{
+namespace detail
+{
+
+
+
+template< class ContextList, class OutermostContextBase >
+struct constructor;
+
+//////////////////////////////////////////////////////////////////////////////
+template< class ContextList, class OutermostContextBase >
+struct outer_constructor
+{
+ typedef typename mpl::front< ContextList >::type to_construct;
+ typedef typename to_construct::context_ptr_type context_ptr_type;
+ typedef typename to_construct::inner_context_ptr_type
+ inner_context_ptr_type;
+
+ typedef typename to_construct::inner_initial_list inner_initial_list;
+ typedef typename mpl::pop_front< ContextList >::type inner_context_list;
+ typedef typename mpl::front< inner_context_list >::type::orthogonal_position
+ inner_orthogonal_position;
+ typedef typename mpl::advance<
+ typename mpl::begin< inner_initial_list >::type,
+ inner_orthogonal_position >::type to_construct_iter;
+
+ typedef typename mpl::erase<
+ inner_initial_list,
+ to_construct_iter,
+ typename mpl::end< inner_initial_list >::type
+ >::type first_inner_initial_list;
+
+ typedef typename mpl::erase<
+ inner_initial_list,
+ typename mpl::begin< inner_initial_list >::type,
+ typename mpl::next< to_construct_iter >::type
+ >::type last_inner_initial_list;
+
+ static void construct(
+ const context_ptr_type & pContext,
+ OutermostContextBase & outermostContextBase )
+ {
+ const inner_context_ptr_type pInnerContext =
+ to_construct::shallow_construct( pContext, outermostContextBase );
+ to_construct::template deep_construct_inner<
+ first_inner_initial_list >( pInnerContext, outermostContextBase );
+ constructor< inner_context_list, OutermostContextBase >::construct(
+ pInnerContext, outermostContextBase );
+ to_construct::template deep_construct_inner<
+ last_inner_initial_list >( pInnerContext, outermostContextBase );
+ }
+};
+
+//////////////////////////////////////////////////////////////////////////////
+template< class ContextList, class OutermostContextBase >
+struct inner_constructor
+{
+ typedef typename mpl::front< ContextList >::type to_construct;
+ typedef typename to_construct::context_ptr_type context_ptr_type;
+
+ static void construct(
+ const context_ptr_type & pContext,
+ OutermostContextBase & outermostContextBase )
+ {
+ to_construct::deep_construct( pContext, outermostContextBase );
+ }
+};
+
+//////////////////////////////////////////////////////////////////////////////
+template< class ContextList, class OutermostContextBase >
+struct constructor_impl : public mpl::eval_if<
+ mpl::equal_to< mpl::size< ContextList >, mpl::long_< 1 > >,
+ mpl::identity< inner_constructor< ContextList, OutermostContextBase > >,
+ mpl::identity< outer_constructor< ContextList, OutermostContextBase > > >
+{
+};
+
+
+//////////////////////////////////////////////////////////////////////////////
+template< class ContextList, class OutermostContextBase >
+struct constructor :
+ constructor_impl< ContextList, OutermostContextBase >::type {};
+
+//////////////////////////////////////////////////////////////////////////////
+template< class CommonContext, class DestinationState >
+struct make_context_list
+{
+ typedef typename mpl::reverse< typename mpl::push_front<
+ typename mpl::erase<
+ typename DestinationState::context_type_list,
+ typename mpl::find<
+ typename DestinationState::context_type_list,
+ CommonContext
+ >::type,
+ typename mpl::end<
+ typename DestinationState::context_type_list
+ >::type
+ >::type,
+ DestinationState
+ >::type >::type type;
+};
+
+
+
+} // namespace detail
+} // namespace statechart
+} // namespace boost
+
+
+
+#endif
diff --git a/boost/boost/statechart/detail/counted_base.hpp b/boost/boost/statechart/detail/counted_base.hpp
new file mode 100644
index 00000000000..7b2a4af8f83
--- /dev/null
+++ b/boost/boost/statechart/detail/counted_base.hpp
@@ -0,0 +1,92 @@
+#ifndef BOOST_STATECHART_DETAIL_COUNTED_BASE_HPP_INCLUDED
+#define BOOST_STATECHART_DETAIL_COUNTED_BASE_HPP_INCLUDED
+//////////////////////////////////////////////////////////////////////////////
+// Copyright 2002-2006 Andreas Huber Doenni
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+#include <boost/detail/atomic_count.hpp>
+#include <boost/config.hpp> // BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
+
+
+
+namespace boost
+{
+namespace statechart
+{
+namespace detail
+{
+
+
+
+template< bool NeedsLocking >
+struct count_base
+{
+ count_base() : count_( 0 ) {}
+ mutable boost::detail::atomic_count count_;
+};
+
+template<>
+struct count_base< false >
+{
+ count_base() : count_( 0 ) {}
+ mutable long count_;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+template< bool NeedsLocking = true >
+class counted_base : private count_base< NeedsLocking >
+{
+ typedef count_base< NeedsLocking > base_type;
+ public:
+ //////////////////////////////////////////////////////////////////////////
+ bool ref_counted() const
+ {
+ return base_type::count_ != 0;
+ }
+
+ long ref_count() const
+ {
+ return base_type::count_;
+ }
+
+ protected:
+ //////////////////////////////////////////////////////////////////////////
+ counted_base() {}
+ ~counted_base() {}
+
+ // do nothing copy implementation is intentional (the number of
+ // referencing pointers of the source and the destination is not changed
+ // through the copy operation)
+ counted_base( const counted_base & ) {}
+ counted_base & operator=( const counted_base & ) { return *this; }
+
+ public:
+ //////////////////////////////////////////////////////////////////////////
+ // The following declarations should be private.
+ // They are only public because many compilers lack template friends.
+ //////////////////////////////////////////////////////////////////////////
+ void add_ref() const
+ {
+ ++base_type::count_;
+ }
+
+ bool release() const
+ {
+ BOOST_ASSERT( base_type::count_ > 0 );
+ return --base_type::count_ == 0;
+ }
+};
+
+
+
+} // namespace detail
+} // namespace statechart
+} // namespace boost
+
+
+
+#endif
diff --git a/boost/boost/statechart/detail/leaf_state.hpp b/boost/boost/statechart/detail/leaf_state.hpp
new file mode 100644
index 00000000000..adbcb2f33f3
--- /dev/null
+++ b/boost/boost/statechart/detail/leaf_state.hpp
@@ -0,0 +1,84 @@
+#ifndef BOOST_STATECHART_DETAIL_LEAF_STATE_HPP_INCLUDED
+#define BOOST_STATECHART_DETAIL_LEAF_STATE_HPP_INCLUDED
+//////////////////////////////////////////////////////////////////////////////
+// Copyright 2002-2006 Andreas Huber Doenni
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+#include <boost/statechart/detail/state_base.hpp>
+
+
+
+namespace boost
+{
+namespace statechart
+{
+namespace detail
+{
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+template< class Allocator, class RttiPolicy >
+class leaf_state : public state_base< Allocator, RttiPolicy >
+{
+ typedef state_base< Allocator, RttiPolicy > base_type;
+ protected:
+ //////////////////////////////////////////////////////////////////////////
+ leaf_state( typename RttiPolicy::id_provider_type idProvider ) :
+ base_type( idProvider )
+ {
+ }
+
+ ~leaf_state() {}
+
+ public:
+ //////////////////////////////////////////////////////////////////////////
+ // The following declarations should be private.
+ // They are only public because many compilers lack template friends.
+ //////////////////////////////////////////////////////////////////////////
+ void set_list_position(
+ typename base_type::state_list_type::iterator listPosition )
+ {
+ listPosition_ = listPosition;
+ }
+
+ typedef typename base_type::leaf_state_ptr_type
+ direct_state_base_ptr_type;
+
+ virtual void remove_from_state_list(
+ typename base_type::state_list_type::iterator & statesEnd,
+ typename base_type::node_state_base_ptr_type & pOutermostUnstableState,
+ bool performFullExit )
+ {
+ --statesEnd;
+ swap( *listPosition_, *statesEnd );
+ ( *listPosition_ )->set_list_position( listPosition_ );
+ direct_state_base_ptr_type & pState = *statesEnd;
+ // Because the list owns the leaf_state, this leads to the immediate
+ // termination of this state.
+ pState->exit_impl( pState, pOutermostUnstableState, performFullExit );
+ }
+
+ virtual void exit_impl(
+ direct_state_base_ptr_type & pSelf,
+ typename base_type::node_state_base_ptr_type & pOutermostUnstableState,
+ bool performFullExit ) = 0;
+
+ private:
+ //////////////////////////////////////////////////////////////////////////
+ typename base_type::state_list_type::iterator listPosition_;
+};
+
+
+
+} // namespace detail
+} // namespace statechart
+} // namespace boost
+
+
+
+#endif
diff --git a/boost/boost/statechart/detail/memory.hpp b/boost/boost/statechart/detail/memory.hpp
new file mode 100644
index 00000000000..69d75183a22
--- /dev/null
+++ b/boost/boost/statechart/detail/memory.hpp
@@ -0,0 +1,72 @@
+#ifndef BOOST_STATECHART_DETAIL_MEMORY_HPP_INCLUDED
+#define BOOST_STATECHART_DETAIL_MEMORY_HPP_INCLUDED
+//////////////////////////////////////////////////////////////////////////////
+// Copyright 2005-2006 Andreas Huber Doenni
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+#include <boost/statechart/detail/avoid_unused_warning.hpp>
+
+#include <boost/assert.hpp>
+#include <boost/detail/allocator_utilities.hpp>
+
+#include <cstddef> // std::size_t
+
+
+
+namespace boost
+{
+namespace statechart
+{
+namespace detail
+{
+
+
+
+template< class MostDerived, class Allocator >
+void * allocate( std::size_t size )
+{
+ avoid_unused_warning( size );
+ // The assert below fails when memory is allocated for an event<>,
+ // simple_state<> or state<> subtype object, *and* the first template
+ // parameter passed to one of these templates is not equal to the most-
+ // derived object being constructed.
+ // The following examples apply to all these subtypes:
+ // // Example 1
+ // struct A {};
+ // struct B : sc::simple_state< A, /* ... */ >
+ // // Above, the first template parameter must be equal to the most-
+ // // derived type
+ //
+ // // Example 2
+ // struct A : sc::event< A >
+ // struct B : A { /* ... */ };
+ // void f() { delete new B(); }
+ // // Above the most-derived type being constructed is B, but A was passed
+ // // as the most-derived type to event<>.
+ BOOST_ASSERT( size == sizeof( MostDerived ) );
+ return typename boost::detail::allocator::rebind_to<
+ Allocator, MostDerived
+ >::type().allocate( 1, static_cast< MostDerived * >( 0 ) );
+}
+
+template< class MostDerived, class Allocator >
+void deallocate( void * pObject )
+{
+ return typename boost::detail::allocator::rebind_to<
+ Allocator, MostDerived
+ >::type().deallocate( static_cast< MostDerived * >( pObject ), 1 );
+}
+
+
+
+} // namespace detail
+} // namespace statechart
+} // namespace boost
+
+
+
+#endif
diff --git a/boost/boost/statechart/detail/node_state.hpp b/boost/boost/statechart/detail/node_state.hpp
new file mode 100644
index 00000000000..a7208322502
--- /dev/null
+++ b/boost/boost/statechart/detail/node_state.hpp
@@ -0,0 +1,156 @@
+#ifndef BOOST_STATECHART_DETAIL_NODE_STATE_HPP_INCLUDED
+#define BOOST_STATECHART_DETAIL_NODE_STATE_HPP_INCLUDED
+//////////////////////////////////////////////////////////////////////////////
+// Copyright 2002-2006 Andreas Huber Doenni
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+#include <boost/statechart/detail/state_base.hpp>
+
+#include <boost/intrusive_ptr.hpp>
+#include <boost/assert.hpp> // BOOST_ASSERT
+
+#include <algorithm> // std::find_if
+
+
+
+namespace boost
+{
+namespace statechart
+{
+namespace detail
+{
+
+
+
+template< class Allocator, class RttiPolicy >
+class node_state_base : public state_base< Allocator, RttiPolicy >
+{
+ typedef state_base< Allocator, RttiPolicy > base_type;
+ protected:
+ //////////////////////////////////////////////////////////////////////////
+ node_state_base( typename RttiPolicy::id_provider_type idProvider ) :
+ base_type( idProvider )
+ {
+ }
+
+ ~node_state_base() {}
+
+ public:
+ //////////////////////////////////////////////////////////////////////////
+ // The following declarations should be private.
+ // They are only public because many compilers lack template friends.
+ //////////////////////////////////////////////////////////////////////////
+ typedef base_type state_base_type;
+ typedef intrusive_ptr< node_state_base > direct_state_base_ptr_type;
+ virtual void exit_impl(
+ direct_state_base_ptr_type & pSelf,
+ typename base_type::node_state_base_ptr_type & pOutermostUnstableState,
+ bool performFullExit ) = 0;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+template< class OrthogonalRegionCount, class Allocator, class RttiPolicy >
+class node_state : public node_state_base< Allocator, RttiPolicy >
+{
+ typedef node_state_base< Allocator, RttiPolicy > base_type;
+ protected:
+ //////////////////////////////////////////////////////////////////////////
+ node_state( typename RttiPolicy::id_provider_type idProvider ) :
+ base_type( idProvider )
+ {
+ for ( orthogonal_position_type pos = 0;
+ pos < OrthogonalRegionCount::value; ++pos )
+ {
+ pInnerStates[ pos ] = 0;
+ }
+ }
+
+ ~node_state() {}
+
+ public:
+ //////////////////////////////////////////////////////////////////////////
+ // The following declarations should be private.
+ // They are only public because many compilers lack template friends.
+ //////////////////////////////////////////////////////////////////////////
+ typedef typename base_type::state_base_type state_base_type;
+
+ void add_inner_state( orthogonal_position_type position,
+ state_base_type * pInnerState )
+ {
+ BOOST_ASSERT( ( position < OrthogonalRegionCount::value ) &&
+ ( pInnerStates[ position ] == 0 ) );
+ pInnerStates[ position ] = pInnerState;
+ }
+
+ void remove_inner_state( orthogonal_position_type position )
+ {
+ BOOST_ASSERT( position < OrthogonalRegionCount::value );
+ pInnerStates[ position ] = 0;
+ }
+
+ virtual void remove_from_state_list(
+ typename state_base_type::state_list_type::iterator & statesEnd,
+ typename state_base_type::node_state_base_ptr_type &
+ pOutermostUnstableState,
+ bool performFullExit )
+ {
+ state_base_type ** const pPastEnd =
+ &pInnerStates[ OrthogonalRegionCount::value ];
+ // We must not iterate past the last inner state because *this* state
+ // will no longer exist when the last inner state has been removed
+ state_base_type ** const pFirstNonNull = std::find_if(
+ &pInnerStates[ 0 ], pPastEnd, &node_state::is_not_null );
+
+ if ( pFirstNonNull == pPastEnd )
+ {
+ // The state does not have inner states but is still alive, this must
+ // be the outermost unstable state then.
+ BOOST_ASSERT( get_pointer( pOutermostUnstableState ) == this );
+ typename state_base_type::node_state_base_ptr_type pSelf =
+ pOutermostUnstableState;
+ pSelf->exit_impl( pSelf, pOutermostUnstableState, performFullExit );
+ }
+ else
+ {
+ // Destroy inner states in the reverse order of construction
+ for ( state_base_type ** pState = pPastEnd; pState != pFirstNonNull; )
+ {
+ --pState;
+
+ // An inner orthogonal state might have been terminated long before,
+ // that's why we have to check for 0 pointers
+ if ( *pState != 0 )
+ {
+ ( *pState )->remove_from_state_list(
+ statesEnd, pOutermostUnstableState, performFullExit );
+ }
+ }
+ }
+ }
+
+ typedef typename base_type::direct_state_base_ptr_type
+ direct_state_base_ptr_type;
+
+ private:
+ //////////////////////////////////////////////////////////////////////////
+ static bool is_not_null( const state_base_type * pInner )
+ {
+ return pInner != 0;
+ }
+
+ state_base_type * pInnerStates[ OrthogonalRegionCount::value ];
+};
+
+
+
+} // namespace detail
+} // namespace statechart
+} // namespace boost
+
+
+
+#endif
diff --git a/boost/boost/statechart/detail/rtti_policy.hpp b/boost/boost/statechart/detail/rtti_policy.hpp
new file mode 100644
index 00000000000..dcd5c9274a3
--- /dev/null
+++ b/boost/boost/statechart/detail/rtti_policy.hpp
@@ -0,0 +1,217 @@
+#ifndef BOOST_STATECHART_DETAIL_RTTI_POLICY_HPP_INCLUDED
+#define BOOST_STATECHART_DETAIL_RTTI_POLICY_HPP_INCLUDED
+//////////////////////////////////////////////////////////////////////////////
+// Copyright 2002-2006 Andreas Huber Doenni
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+#include <boost/assert.hpp>
+#include <boost/config.hpp> // BOOST_MSVC
+#include <boost/detail/workaround.hpp>
+
+#include <typeinfo> // std::type_info
+
+
+
+#ifdef BOOST_MSVC
+// We permanently turn off the following level 4 warnings because users will
+// have to do so themselves anyway if we turn them back on
+# pragma warning( disable: 4511 ) // copy constructor could not be generated
+# pragma warning( disable: 4512 ) // assignment operator could not be generated
+#endif
+
+
+
+namespace boost
+{
+namespace statechart
+{
+namespace detail
+{
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+struct id_provider
+{
+ const void * pCustomId_;
+ #if defined( BOOST_ENABLE_ASSERT_HANDLER ) || !defined( NDEBUG )
+ const std::type_info * pCustomIdType_;
+ #endif
+};
+
+template< class MostDerived >
+struct id_holder
+{
+ static id_provider idProvider_;
+};
+
+template< class MostDerived >
+id_provider id_holder< MostDerived >::idProvider_;
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+struct rtti_policy
+{
+ #ifdef BOOST_STATECHART_USE_NATIVE_RTTI
+ class id_type
+ {
+ public:
+ ////////////////////////////////////////////////////////////////////////
+ explicit id_type( const std::type_info & id ) : id_( id ) {}
+
+ bool operator==( id_type right ) const
+ {
+ return id_ == right.id_ != 0;
+ }
+ bool operator!=( id_type right ) const { return !( *this == right ); }
+
+ bool operator<( id_type right ) const
+ {
+ return id_.before( right.id_ ) != 0;
+ }
+ bool operator>( id_type right ) const { return right < *this; }
+ bool operator>=( id_type right ) const { return !( *this < right ); }
+ bool operator<=( id_type right ) const { return !( right < *this ); }
+
+ private:
+ ////////////////////////////////////////////////////////////////////////
+ const std::type_info & id_;
+ };
+
+ typedef bool id_provider_type; // dummy
+ #else
+ typedef const void * id_type;
+ typedef const id_provider & id_provider_type;
+ #endif
+
+ ////////////////////////////////////////////////////////////////////////////
+ template< class Base >
+ class rtti_base_type : public Base
+ {
+ public:
+ ////////////////////////////////////////////////////////////////////////
+ typedef rtti_policy::id_type id_type;
+
+ id_type dynamic_type() const
+ {
+ #ifdef BOOST_STATECHART_USE_NATIVE_RTTI
+ return id_type( typeid( *this ) );
+ #else
+ return &idProvider_;
+ #endif
+ }
+
+ #ifndef BOOST_STATECHART_USE_NATIVE_RTTI
+ template< typename CustomId >
+ const CustomId * custom_dynamic_type_ptr() const
+ {
+ BOOST_ASSERT(
+ ( idProvider_.pCustomId_ == 0 ) ||
+ ( *idProvider_.pCustomIdType_ == typeid( CustomId ) ) );
+ return static_cast< const CustomId * >( idProvider_.pCustomId_ );
+ }
+ #endif
+
+ protected:
+ #ifdef BOOST_STATECHART_USE_NATIVE_RTTI
+ rtti_base_type( id_provider_type ) {}
+
+ ////////////////////////////////////////////////////////////////////////
+ #if BOOST_WORKAROUND( __GNUC__, BOOST_TESTED_AT( 4 ) )
+ // We make the destructor virtual for GCC because with this compiler
+ // there is currently no way to disable the "has virtual functions but
+ // non-virtual destructor" warning on a class by class basis. Although
+ // it can be done on the compiler command line with
+ // -Wno-non-virtual-dtor, this is undesirable as this would also
+ // suppress legitimate warnings for types that are not states.
+ virtual ~rtti_base_type() {}
+ #else
+ ~rtti_base_type() {}
+ #endif
+
+ private:
+ ////////////////////////////////////////////////////////////////////////
+ // For typeid( *this ) to return a value that corresponds to the most-
+ // derived type, we need to have a vptr. Since this type does not
+ // contain any virtual functions we need to artificially declare one so.
+ virtual void dummy() {}
+ #else
+ rtti_base_type(
+ id_provider_type idProvider
+ ) :
+ idProvider_( idProvider )
+ {
+ }
+
+ ~rtti_base_type() {}
+
+ private:
+ ////////////////////////////////////////////////////////////////////////
+ id_provider_type idProvider_;
+ #endif
+ };
+
+ ////////////////////////////////////////////////////////////////////////////
+ template< class MostDerived, class Base >
+ class rtti_derived_type : public Base
+ {
+ public:
+ ////////////////////////////////////////////////////////////////////////
+ static id_type static_type()
+ {
+ #ifdef BOOST_STATECHART_USE_NATIVE_RTTI
+ return id_type( typeid( const MostDerived ) );
+ #else
+ return &id_holder< MostDerived >::idProvider_;
+ #endif
+ }
+
+ #ifndef BOOST_STATECHART_USE_NATIVE_RTTI
+ template< class CustomId >
+ static const CustomId * custom_static_type_ptr()
+ {
+ BOOST_ASSERT(
+ ( id_holder< MostDerived >::idProvider_.pCustomId_ == 0 ) ||
+ ( *id_holder< MostDerived >::idProvider_.pCustomIdType_ ==
+ typeid( CustomId ) ) );
+ return static_cast< const CustomId * >(
+ id_holder< MostDerived >::idProvider_.pCustomId_ );
+ }
+
+ template< class CustomId >
+ static void custom_static_type_ptr( const CustomId * pCustomId )
+ {
+ #if defined( BOOST_ENABLE_ASSERT_HANDLER ) || !defined( NDEBUG )
+ id_holder< MostDerived >::idProvider_.pCustomIdType_ =
+ &typeid( CustomId );
+ #endif
+ id_holder< MostDerived >::idProvider_.pCustomId_ = pCustomId;
+ }
+ #endif
+
+ protected:
+ ////////////////////////////////////////////////////////////////////////
+ ~rtti_derived_type() {}
+
+ #ifdef BOOST_STATECHART_USE_NATIVE_RTTI
+ rtti_derived_type() : Base( false ) {}
+ #else
+ rtti_derived_type() : Base( id_holder< MostDerived >::idProvider_ ) {}
+ #endif
+ };
+};
+
+
+
+} // namespace detail
+} // namespace statechart
+} // namespace boost
+
+
+
+#endif
diff --git a/boost/boost/statechart/detail/state_base.hpp b/boost/boost/statechart/detail/state_base.hpp
new file mode 100644
index 00000000000..b1f1fbceed6
--- /dev/null
+++ b/boost/boost/statechart/detail/state_base.hpp
@@ -0,0 +1,200 @@
+#ifndef BOOST_STATECHART_DETAIL_STATE_BASE_HPP_INCLUDED
+#define BOOST_STATECHART_DETAIL_STATE_BASE_HPP_INCLUDED
+//////////////////////////////////////////////////////////////////////////////
+// Copyright 2002-2006 Andreas Huber Doenni
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+#include <boost/statechart/result.hpp>
+#include <boost/statechart/event.hpp>
+
+#include <boost/statechart/detail/counted_base.hpp>
+
+#include <boost/intrusive_ptr.hpp>
+#include <boost/noncopyable.hpp>
+#include <boost/assert.hpp>
+#include <boost/config.hpp> // BOOST_MSVC
+
+#include <boost/detail/workaround.hpp>
+#include <boost/detail/allocator_utilities.hpp>
+
+#ifdef BOOST_MSVC
+# pragma warning( push )
+# pragma warning( disable: 4702 ) // unreachable code (in release mode only)
+#endif
+
+#include <list>
+
+#ifdef BOOST_MSVC
+# pragma warning( pop )
+#endif
+
+
+
+#ifdef BOOST_MSVC
+// We permanently turn off the following level 4 warnings because users will
+// have to do so themselves anyway if we turn them back on
+# pragma warning( disable: 4511 ) // copy constructor could not be generated
+# pragma warning( disable: 4512 ) // assignment operator could not be generated
+#endif
+
+
+
+namespace boost
+{
+namespace statechart
+{
+namespace detail
+{
+
+
+
+template< class Allocator, class RttiPolicy >
+class leaf_state;
+template< class Allocator, class RttiPolicy >
+class node_state_base;
+
+typedef unsigned char orthogonal_position_type;
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+template< class Allocator, class RttiPolicy >
+class state_base :
+ #ifndef NDEBUG
+ noncopyable,
+ #endif
+ public RttiPolicy::template rtti_base_type<
+ // Derived class objects will be created, handled and destroyed by exactly
+ // one thread --> locking is not necessary
+ counted_base< false > >
+{
+ typedef typename RttiPolicy::template rtti_base_type<
+ counted_base< false > > base_type;
+
+ public:
+ //////////////////////////////////////////////////////////////////////////
+ void exit() {}
+
+ virtual const state_base * outer_state_ptr() const = 0;
+
+ protected:
+ //////////////////////////////////////////////////////////////////////////
+ state_base( typename RttiPolicy::id_provider_type idProvider ) :
+ base_type( idProvider ),
+ deferredEvents_( false )
+ {
+ }
+
+ #if BOOST_WORKAROUND( __GNUC__, BOOST_TESTED_AT( 4 ) )
+ // We make the destructor virtual for GCC because with this compiler there
+ // is currently no way to disable the "has virtual functions but
+ // non-virtual destructor" warning on a class by class basis. Although it
+ // can be done on the compiler command line with -Wno-non-virtual-dtor,
+ // this is undesirable as this would also suppress legitimate warnings for
+ // types that are not states.
+ virtual ~state_base() {}
+ #else
+ // This destructor is not virtual for performance reasons. The library
+ // ensures that a state object is never deleted through a state_base
+ // pointer but only through a pointer to the most-derived type.
+ ~state_base() {}
+ #endif
+
+ protected:
+ //////////////////////////////////////////////////////////////////////////
+ // The following declarations should be private.
+ // They are only protected because many compilers lack template friends.
+ //////////////////////////////////////////////////////////////////////////
+ void defer_event()
+ {
+ deferredEvents_ = true;
+ }
+
+ bool deferred_events() const
+ {
+ return deferredEvents_;
+ }
+
+ template< class Context >
+ void set_context( orthogonal_position_type position, Context * pContext )
+ {
+ pContext->add_inner_state( position, this );
+ }
+
+ public:
+ //////////////////////////////////////////////////////////////////////////
+ // The following declarations should be private.
+ // They are only public because many compilers lack template friends.
+ //////////////////////////////////////////////////////////////////////////
+ virtual detail::reaction_result react_impl(
+ const event_base & evt,
+ typename RttiPolicy::id_type eventType ) = 0;
+
+ typedef intrusive_ptr< node_state_base< Allocator, RttiPolicy > >
+ node_state_base_ptr_type;
+ typedef intrusive_ptr< leaf_state< Allocator, RttiPolicy > >
+ leaf_state_ptr_type;
+ typedef std::list<
+ leaf_state_ptr_type,
+ typename boost::detail::allocator::rebind_to<
+ Allocator, leaf_state_ptr_type >::type
+ > state_list_type;
+
+ virtual void remove_from_state_list(
+ typename state_list_type::iterator & statesEnd,
+ node_state_base_ptr_type & pOutermostUnstableState,
+ bool performFullExit ) = 0;
+
+ private:
+ //////////////////////////////////////////////////////////////////////////
+ bool deferredEvents_;
+};
+
+
+
+#ifdef BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
+} // namespace detail
+} // namespace statechart
+#endif
+
+
+
+template< class Allocator, class RttiPolicy >
+inline void intrusive_ptr_add_ref(
+ const ::boost::statechart::detail::state_base< Allocator, RttiPolicy > * pBase )
+{
+ pBase->add_ref();
+}
+
+template< class Allocator, class RttiPolicy >
+inline void intrusive_ptr_release(
+ const ::boost::statechart::detail::state_base< Allocator, RttiPolicy > * pBase )
+{
+ if ( pBase->release() )
+ {
+ // The state_base destructor is *not* virtual for performance reasons
+ // but intrusive_ptr< state_base > objects are nevertheless used to point
+ // to states. This assert ensures that such a pointer is never the last
+ // one referencing a state object.
+ BOOST_ASSERT( false );
+ }
+}
+
+
+
+#ifndef BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
+} // namespace detail
+} // namespace statechart
+#endif
+
+
+
+} // namespace boost
+
+
+
+#endif
diff --git a/boost/boost/statechart/event.hpp b/boost/boost/statechart/event.hpp
new file mode 100644
index 00000000000..8744a896490
--- /dev/null
+++ b/boost/boost/statechart/event.hpp
@@ -0,0 +1,69 @@
+#ifndef BOOST_STATECHART_EVENT_HPP_INCLUDED
+#define BOOST_STATECHART_EVENT_HPP_INCLUDED
+//////////////////////////////////////////////////////////////////////////////
+// Copyright 2002-2006 Andreas Huber Doenni
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+#include <boost/statechart/event_base.hpp>
+#include <boost/statechart/detail/rtti_policy.hpp>
+#include <boost/statechart/detail/memory.hpp>
+
+#include <boost/cast.hpp> // boost::polymorphic_downcast
+
+#include <memory> // std::allocator
+
+
+
+namespace boost
+{
+namespace statechart
+{
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+template< class MostDerived, class Allocator = std::allocator< void > >
+class event : public detail::rtti_policy::rtti_derived_type<
+ MostDerived, event_base >
+{
+ public:
+ //////////////////////////////////////////////////////////////////////////
+ // Compiler-generated copy constructor and copy assignment operator are
+ // fine
+
+ void * operator new( std::size_t size )
+ {
+ return detail::allocate< MostDerived, Allocator >( size );
+ }
+
+ void operator delete( void * pEvent )
+ {
+ detail::deallocate< MostDerived, Allocator >( pEvent );
+ }
+
+ protected:
+ //////////////////////////////////////////////////////////////////////////
+ event() {}
+ virtual ~event() {}
+
+ private:
+ //////////////////////////////////////////////////////////////////////////
+ virtual intrusive_ptr< const event_base > clone() const
+ {
+ return intrusive_ptr< const event_base >( new MostDerived(
+ *polymorphic_downcast< const MostDerived * >( this ) ) );
+ }
+};
+
+
+
+} // namespace statechart
+} // namespace boost
+
+
+
+#endif
diff --git a/boost/boost/statechart/event_base.hpp b/boost/boost/statechart/event_base.hpp
new file mode 100644
index 00000000000..1e1711a8a1e
--- /dev/null
+++ b/boost/boost/statechart/event_base.hpp
@@ -0,0 +1,127 @@
+#ifndef BOOST_STATECHART_EVENT_BASE_HPP_INCLUDED
+#define BOOST_STATECHART_EVENT_BASE_HPP_INCLUDED
+//////////////////////////////////////////////////////////////////////////////
+// Copyright 2002-2006 Andreas Huber Doenni
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+#include <boost/statechart/detail/rtti_policy.hpp>
+#include <boost/statechart/detail/counted_base.hpp>
+
+#include <boost/assert.hpp>
+#include <boost/intrusive_ptr.hpp>
+#include <boost/config.hpp>
+
+
+
+namespace boost
+{
+namespace statechart
+{
+namespace detail
+{
+
+
+
+// This helper is necessary because there doesn't seem to be consensus among
+// compilers on how a friend declaration for a function in another namespace
+// has to look like.
+class delete_helper
+{
+ public:
+ template< class T >
+ static void delete_object( const T * pObject )
+ {
+ delete pObject;
+ }
+};
+
+
+
+} // namespace detail
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+class event_base : public detail::rtti_policy::rtti_base_type<
+ detail::counted_base<> >
+{
+ typedef detail::rtti_policy::rtti_base_type<
+ detail::counted_base<> > base_type;
+ public:
+ //////////////////////////////////////////////////////////////////////////
+ intrusive_ptr< const event_base > intrusive_from_this() const;
+
+ protected:
+ //////////////////////////////////////////////////////////////////////////
+ event_base( detail::rtti_policy::id_provider_type idProvider ) :
+ base_type( idProvider )
+ {
+ }
+
+ virtual ~event_base() {}
+
+ private:
+ //////////////////////////////////////////////////////////////////////////
+ virtual intrusive_ptr< const event_base > clone() const = 0;
+
+ friend class detail::delete_helper;
+};
+
+
+
+#ifdef BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
+} // namespace statechart
+#endif
+
+
+
+inline void intrusive_ptr_add_ref( const ::boost::statechart::event_base * pBase )
+{
+ pBase->add_ref();
+}
+
+inline void intrusive_ptr_release( const ::boost::statechart::event_base * pBase )
+{
+ if ( pBase->release() )
+ {
+ ::boost::statechart::detail::delete_helper::delete_object( pBase );
+ }
+}
+
+
+
+#ifndef BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
+} // namespace statechart
+#endif
+namespace statechart
+{
+
+
+
+// We're implementing this here so that GCC3.4.2 can find
+// intrusive_ptr_add_ref, which is indirectly called from the intrusive_ptr
+// ctor.
+inline intrusive_ptr< const event_base > event_base::intrusive_from_this() const
+{
+ if ( base_type::ref_counted() )
+ {
+ return intrusive_ptr< const event_base >( this );
+ }
+ else
+ {
+ return clone();
+ }
+}
+
+
+
+} // namespace statechart
+} // namespace boost
+
+
+
+#endif
diff --git a/boost/boost/statechart/event_processor.hpp b/boost/boost/statechart/event_processor.hpp
new file mode 100644
index 00000000000..d6f23f044b0
--- /dev/null
+++ b/boost/boost/statechart/event_processor.hpp
@@ -0,0 +1,84 @@
+#ifndef BOOST_STATECHART_EVENT_PROCESSOR_INCLUDED
+#define BOOST_STATECHART_EVENT_PROCESSOR_INCLUDED
+//////////////////////////////////////////////////////////////////////////////
+// Copyright 2002-2006 Andreas Huber Doenni
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+namespace boost
+{
+namespace statechart
+{
+
+
+
+class event_base;
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+template< class Scheduler >
+class event_processor
+{
+ public:
+ //////////////////////////////////////////////////////////////////////////
+ virtual ~event_processor() {}
+
+ Scheduler & my_scheduler() const
+ {
+ return myScheduler_;
+ }
+
+ typedef typename Scheduler::processor_handle processor_handle;
+
+ processor_handle my_handle() const
+ {
+ return myHandle_;
+ }
+
+ void initiate()
+ {
+ initiate_impl();
+ }
+
+ void process_event( const event_base & evt )
+ {
+ process_event_impl( evt );
+ }
+
+ void terminate()
+ {
+ terminate_impl();
+ }
+
+ protected:
+ //////////////////////////////////////////////////////////////////////////
+ typedef const typename Scheduler::processor_context & my_context;
+
+ event_processor( my_context ctx ) :
+ myScheduler_( ctx.my_scheduler() ),
+ myHandle_( ctx.my_handle() )
+ {
+ }
+
+ private:
+ //////////////////////////////////////////////////////////////////////////
+ virtual void initiate_impl() = 0;
+ virtual void process_event_impl( const event_base & evt ) = 0;
+ virtual void terminate_impl() = 0;
+
+ Scheduler & myScheduler_;
+ const processor_handle myHandle_;
+};
+
+
+
+} // namespace statechart
+} // namespace boost
+
+
+
+#endif
diff --git a/boost/boost/statechart/exception_translator.hpp b/boost/boost/statechart/exception_translator.hpp
new file mode 100644
index 00000000000..a030468e03c
--- /dev/null
+++ b/boost/boost/statechart/exception_translator.hpp
@@ -0,0 +1,58 @@
+#ifndef BOOST_STATECHART_EXCEPTION_TRANSLATOR_HPP_INCLUDED
+#define BOOST_STATECHART_EXCEPTION_TRANSLATOR_HPP_INCLUDED
+//////////////////////////////////////////////////////////////////////////////
+// Copyright 2002-2006 Andreas Huber Doenni
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+#include <boost/statechart/event.hpp>
+#include <boost/statechart/result.hpp>
+
+
+
+namespace boost
+{
+namespace statechart
+{
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+class exception_thrown : public event< exception_thrown > {};
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+template< class ExceptionEvent = exception_thrown >
+class exception_translator
+{
+ public:
+ //////////////////////////////////////////////////////////////////////////
+ // The following declarations should be private.
+ // They are only public because many compilers lack template friends.
+ //////////////////////////////////////////////////////////////////////////
+ template< class Action, class ExceptionEventHandler >
+ result operator()( Action action, ExceptionEventHandler eventHandler )
+ {
+ try
+ {
+ return action();
+ }
+ catch ( ... )
+ {
+ return eventHandler( ExceptionEvent() );
+ }
+ }
+};
+
+
+
+} // namespace statechart
+} // namespace boost
+
+
+
+#endif
diff --git a/boost/boost/statechart/fifo_scheduler.hpp b/boost/boost/statechart/fifo_scheduler.hpp
new file mode 100644
index 00000000000..c645d862bb3
--- /dev/null
+++ b/boost/boost/statechart/fifo_scheduler.hpp
@@ -0,0 +1,203 @@
+#ifndef BOOST_STATECHART_FIFO_SCHEDULER_HPP_INCLUDED
+#define BOOST_STATECHART_FIFO_SCHEDULER_HPP_INCLUDED
+//////////////////////////////////////////////////////////////////////////////
+// Copyright 2002-2006 Andreas Huber Doenni
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+#include <boost/statechart/event_base.hpp>
+#include <boost/statechart/fifo_worker.hpp>
+#include <boost/statechart/processor_container.hpp>
+
+#include <boost/intrusive_ptr.hpp>
+#include <boost/noncopyable.hpp>
+#include <boost/config.hpp> // BOOST_HAS_THREADS
+
+
+
+namespace boost
+{
+namespace statechart
+{
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+template<
+ class FifoWorker = fifo_worker<>,
+ class Allocator = std::allocator< void > >
+class fifo_scheduler : noncopyable
+{
+ typedef processor_container<
+ fifo_scheduler, typename FifoWorker::work_item, Allocator > container;
+ public:
+ //////////////////////////////////////////////////////////////////////////
+ #ifdef BOOST_HAS_THREADS
+ fifo_scheduler( bool waitOnEmptyQueue = false ) :
+ worker_( waitOnEmptyQueue )
+ {
+ }
+ #endif
+
+ typedef typename container::processor_handle processor_handle;
+ typedef typename container::processor_context processor_context;
+
+ template< class Processor >
+ processor_handle create_processor()
+ {
+ processor_handle result;
+ work_item item =
+ container_.template create_processor< Processor >( result, *this );
+ worker_.queue_work_item( item );
+ return result;
+ }
+
+ template< class Processor, typename Arg1 >
+ processor_handle create_processor( Arg1 arg1 )
+ {
+ processor_handle result;
+ work_item item = container_.template create_processor< Processor >(
+ result, *this, arg1 );
+ worker_.queue_work_item( item );
+ return result;
+ }
+
+ template< class Processor, typename Arg1, typename Arg2 >
+ processor_handle create_processor( Arg1 arg1, Arg2 arg2 )
+ {
+ processor_handle result;
+ work_item item = container_.template create_processor< Processor >(
+ result, *this, arg1, arg2 );
+ worker_.queue_work_item( item );
+ return result;
+ }
+
+ template< class Processor, typename Arg1, typename Arg2, typename Arg3 >
+ processor_handle create_processor( Arg1 arg1, Arg2 arg2, Arg3 arg3 )
+ {
+ processor_handle result;
+ work_item item = container_.template create_processor< Processor >(
+ result, *this, arg1, arg2, arg3 );
+ worker_.queue_work_item( item );
+ return result;
+ }
+
+ template<
+ class Processor, typename Arg1, typename Arg2,
+ typename Arg3, typename Arg4 >
+ processor_handle create_processor(
+ Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4 )
+ {
+ processor_handle result;
+ work_item item = container_.template create_processor< Processor >(
+ result, *this, arg1, arg2, arg3, arg4 );
+ worker_.queue_work_item( item );
+ return result;
+ }
+
+ template<
+ class Processor, typename Arg1, typename Arg2,
+ typename Arg3, typename Arg4, typename Arg5 >
+ processor_handle create_processor(
+ Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5 )
+ {
+ processor_handle result;
+ work_item item = container_.template create_processor< Processor >(
+ result, *this, arg1, arg2, arg3, arg4, arg5 );
+ worker_.queue_work_item( item );
+ return result;
+ }
+
+ template<
+ class Processor, typename Arg1, typename Arg2,
+ typename Arg3, typename Arg4, typename Arg5, typename Arg6 >
+ processor_handle create_processor(
+ Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6 )
+ {
+ processor_handle result;
+ work_item item = container_.template create_processor< Processor >(
+ result, *this, arg1, arg2, arg3, arg4, arg5, arg6 );
+ worker_.queue_work_item( item );
+ return result;
+ }
+
+ void destroy_processor( const processor_handle & processor )
+ {
+ work_item item = container_.destroy_processor( processor );
+ worker_.queue_work_item( item );
+ }
+
+ void initiate_processor( const processor_handle & processor )
+ {
+ work_item item = container_.initiate_processor( processor );
+ worker_.queue_work_item( item );
+ }
+
+ void terminate_processor( const processor_handle & processor )
+ {
+ work_item item = container_.terminate_processor( processor );
+ worker_.queue_work_item( item );
+ }
+
+ typedef intrusive_ptr< const event_base > event_ptr_type;
+
+ void queue_event(
+ const processor_handle & processor, const event_ptr_type & pEvent )
+ {
+ work_item item = container_.queue_event( processor, pEvent );
+ worker_.queue_work_item( item );
+ }
+
+ typedef typename FifoWorker::work_item work_item;
+
+ // We take a non-const reference so that we can move (i.e. swap) the item
+ // into the queue, what avoids copying the (possibly heap-allocated)
+ // implementation object inside work_item.
+ void queue_work_item( work_item & item )
+ {
+ worker_.queue_work_item( item );
+ }
+
+ // Convenience overload so that temporary objects can be passed directly
+ // instead of having to create a work_item object first. Under most
+ // circumstances, this will lead to one unnecessary copy of the
+ // function implementation object.
+ void queue_work_item( const work_item & item )
+ {
+ worker_.queue_work_item( item );
+ }
+
+ void terminate()
+ {
+ worker_.terminate();
+ }
+
+ // Is not mutex-protected! Must only be called from the thread that also
+ // calls operator().
+ bool terminated() const
+ {
+ return worker_.terminated();
+ }
+
+ unsigned long operator()( unsigned long maxEventCount = 0 )
+ {
+ return worker_( maxEventCount );
+ }
+
+ private:
+ //////////////////////////////////////////////////////////////////////////
+ container container_;
+ FifoWorker worker_;
+};
+
+
+
+} // namespace statechart
+} // namespace boost
+
+
+
+#endif
diff --git a/boost/boost/statechart/fifo_worker.hpp b/boost/boost/statechart/fifo_worker.hpp
new file mode 100644
index 00000000000..986237d4d97
--- /dev/null
+++ b/boost/boost/statechart/fifo_worker.hpp
@@ -0,0 +1,198 @@
+#ifndef BOOST_STATECHART_FIFO_WORKER_HPP_INCLUDED
+#define BOOST_STATECHART_FIFO_WORKER_HPP_INCLUDED
+//////////////////////////////////////////////////////////////////////////////
+// Copyright 2002-2006 Andreas Huber Doenni
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+#include <boost/assert.hpp>
+#include <boost/noncopyable.hpp>
+#include <boost/function/function0.hpp>
+#include <boost/bind.hpp>
+// BOOST_HAS_THREADS, BOOST_MSVC
+#include <boost/config.hpp>
+
+#include <boost/detail/allocator_utilities.hpp>
+
+#ifdef BOOST_HAS_THREADS
+# ifdef BOOST_MSVC
+# pragma warning( push )
+# pragma warning( disable: 4275 ) // non-dll class used as base for dll class
+# endif
+
+# include <boost/thread/mutex.hpp>
+# include <boost/thread/condition.hpp>
+
+# ifdef BOOST_MSVC
+# pragma warning( pop )
+# endif
+#endif
+
+#include <list>
+#include <memory> // std::allocator
+
+
+namespace boost
+{
+namespace statechart
+{
+
+
+
+template< class Allocator = std::allocator< void > >
+class fifo_worker : noncopyable
+{
+ public:
+ //////////////////////////////////////////////////////////////////////////
+ #ifdef BOOST_HAS_THREADS
+ fifo_worker( bool waitOnEmptyQueue = false ) :
+ waitOnEmptyQueue_( waitOnEmptyQueue ),
+ #else
+ fifo_worker() :
+ #endif
+ terminated_( false )
+ {
+ }
+
+ typedef function0< void, Allocator > work_item;
+
+ // We take a non-const reference so that we can move (i.e. swap) the item
+ // into the queue, what avoids copying the (possibly heap-allocated)
+ // implementation object inside work_item.
+ void queue_work_item( work_item & item )
+ {
+ if ( item.empty() )
+ {
+ return;
+ }
+
+ #ifdef BOOST_HAS_THREADS
+ mutex::scoped_lock lock( mutex_ );
+ #endif
+
+ workQueue_.push_back( work_item() );
+ workQueue_.back().swap( item );
+
+ #ifdef BOOST_HAS_THREADS
+ queueNotEmpty_.notify_one();
+ #endif
+ }
+
+ // Convenience overload so that temporary objects can be passed directly
+ // instead of having to create a work_item object first. Under most
+ // circumstances, this will lead to one unnecessary copy of the
+ // function implementation object.
+ void queue_work_item( const work_item & item )
+ {
+ work_item copy = item;
+ queue_work_item( copy );
+ }
+
+ void terminate()
+ {
+ work_item item = bind( &fifo_worker::terminate_impl, this );
+ queue_work_item( item );
+ }
+
+ // Is not mutex-protected! Must only be called from the thread that also
+ // calls operator().
+ bool terminated() const
+ {
+ return terminated_;
+ }
+
+ unsigned long operator()( unsigned long maxItemCount = 0 )
+ {
+ unsigned long itemCount = 0;
+
+ while ( !terminated() &&
+ ( ( maxItemCount == 0 ) || ( itemCount < maxItemCount ) ) )
+ {
+ work_item item = dequeue_item();
+
+ if ( item.empty() )
+ {
+ // item can only be empty when the queue is empty, which only
+ // happens in ST builds or when users pass false to the fifo_worker
+ // constructor
+ return itemCount;
+ }
+
+ item();
+ ++itemCount;
+ }
+
+ return itemCount;
+ }
+
+ private:
+ //////////////////////////////////////////////////////////////////////////
+ work_item dequeue_item()
+ {
+ #ifdef BOOST_HAS_THREADS
+ mutex::scoped_lock lock( mutex_ );
+
+ if ( !waitOnEmptyQueue_ && workQueue_.empty() )
+ {
+ return work_item();
+ }
+
+ while ( workQueue_.empty() )
+ {
+ queueNotEmpty_.wait( lock );
+ }
+ #else
+ // If the queue happens to run empty in a single-threaded system,
+ // waiting for new work items (which means to loop indefinitely!) is
+ // pointless as there is no way that new work items could find their way
+ // into the queue. The only sensible thing is to exit the loop and
+ // return to the caller in this case.
+ // Users can then queue new work items before calling operator() again.
+ if ( workQueue_.empty() )
+ {
+ return work_item();
+ }
+ #endif
+
+ // Optimization: Swap rather than assign to avoid the copy of the
+ // implementation object inside function
+ work_item result;
+ result.swap( workQueue_.front() );
+ workQueue_.pop_front();
+ return result;
+ }
+
+ void terminate_impl()
+ {
+ terminated_ = true;
+ }
+
+
+ typedef std::list<
+ work_item,
+ typename boost::detail::allocator::rebind_to<
+ Allocator, work_item >::type
+ > work_queue_type;
+
+ work_queue_type workQueue_;
+
+ #ifdef BOOST_HAS_THREADS
+ mutex mutex_;
+ condition queueNotEmpty_;
+ const bool waitOnEmptyQueue_;
+ #endif
+
+ bool terminated_;
+};
+
+
+
+} // namespace statechart
+} // namespace boost
+
+
+
+#endif
diff --git a/boost/boost/statechart/history.hpp b/boost/boost/statechart/history.hpp
new file mode 100644
index 00000000000..7365c632f22
--- /dev/null
+++ b/boost/boost/statechart/history.hpp
@@ -0,0 +1,16 @@
+#ifndef BOOST_STATECHART_HISTORY_HPP_INCLUDED
+#define BOOST_STATECHART_HISTORY_HPP_INCLUDED
+//////////////////////////////////////////////////////////////////////////////
+// Copyright 2002-2006 Andreas Huber Doenni
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+#include <boost/statechart/shallow_history.hpp>
+#include <boost/statechart/deep_history.hpp>
+
+
+
+#endif
diff --git a/boost/boost/statechart/in_state_reaction.hpp b/boost/boost/statechart/in_state_reaction.hpp
new file mode 100644
index 00000000000..8eb0c2b82e3
--- /dev/null
+++ b/boost/boost/statechart/in_state_reaction.hpp
@@ -0,0 +1,91 @@
+#ifndef BOOST_STATECHART_IN_STATE_REACTION_HPP_INCLUDED
+#define BOOST_STATECHART_IN_STATE_REACTION_HPP_INCLUDED
+//////////////////////////////////////////////////////////////////////////////
+// Copyright 2005-2006 Andreas Huber Doenni
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+#include <boost/statechart/result.hpp>
+
+#include <boost/mpl/if.hpp>
+
+#include <boost/cast.hpp> // boost::polymorphic_downcast
+#include <boost/type_traits/is_same.hpp>
+
+
+
+namespace boost
+{
+namespace statechart
+{
+
+
+
+class event_base;
+
+//////////////////////////////////////////////////////////////////////////////
+template< class Event,
+ class ReactionContext,
+ void ( ReactionContext::*pAction )( const Event & ) >
+class in_state_reaction
+{
+ private:
+ //////////////////////////////////////////////////////////////////////////
+ struct react_base
+ {
+ template< class State, class EventBase, class IdType >
+ static detail::reaction_result react(
+ State & stt, const EventBase & evt, const IdType & )
+ {
+ ( stt.template context< ReactionContext >().*pAction )( evt );
+ return detail::do_discard_event;
+ }
+ };
+
+ struct react_derived
+ {
+ template< class State, class EventBase, class IdType >
+ static detail::reaction_result react(
+ State & stt, const EventBase & evt, const IdType & eventType )
+ {
+ if ( eventType == Event::static_type() )
+ {
+ ( stt.template context< ReactionContext >().*pAction )(
+ *polymorphic_downcast< const Event * >( &evt ) );
+ return detail::do_discard_event;
+ }
+ else
+ {
+ return detail::no_reaction;
+ }
+ }
+ };
+
+ public:
+ //////////////////////////////////////////////////////////////////////////
+ // The following declarations should be private.
+ // They are only public because many compilers lack template friends.
+ //////////////////////////////////////////////////////////////////////////
+ template< class State, class EventBase, class IdType >
+ static detail::reaction_result react(
+ State & stt, const EventBase & evt, const IdType & eventType )
+ {
+ typedef typename mpl::if_<
+ is_same< Event, event_base >, react_base, react_derived
+ >::type impl;
+
+ return impl::react( stt, evt, eventType );
+ }
+};
+
+
+
+} // namespace statechart
+} // namespace boost
+
+
+
+#endif
diff --git a/boost/boost/statechart/null_exception_translator.hpp b/boost/boost/statechart/null_exception_translator.hpp
new file mode 100644
index 00000000000..f44accfefe6
--- /dev/null
+++ b/boost/boost/statechart/null_exception_translator.hpp
@@ -0,0 +1,44 @@
+#ifndef BOOST_STATECHART_NULL_EXCEPTION_TRANSLATOR_HPP_INCLUDED
+#define BOOST_STATECHART_NULL_EXCEPTION_TRANSLATOR_HPP_INCLUDED
+//////////////////////////////////////////////////////////////////////////////
+// Copyright 2002-2006 Andreas Huber Doenni
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+#include <boost/statechart/result.hpp>
+
+
+
+namespace boost
+{
+namespace statechart
+{
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+class null_exception_translator
+{
+ public:
+ //////////////////////////////////////////////////////////////////////////
+ // The following declarations should be private.
+ // They are only public because many compilers lack template friends.
+ //////////////////////////////////////////////////////////////////////////
+ template< class Action, class ExceptionEventHandler >
+ result operator()( Action action, ExceptionEventHandler )
+ {
+ return action();
+ }
+};
+
+
+
+} // namespace statechart
+} // namespace boost
+
+
+
+#endif
diff --git a/boost/boost/statechart/processor_container.hpp b/boost/boost/statechart/processor_container.hpp
new file mode 100644
index 00000000000..b24530d4fa6
--- /dev/null
+++ b/boost/boost/statechart/processor_container.hpp
@@ -0,0 +1,384 @@
+#ifndef BOOST_STATECHART_PROCESSOR_CONTAINER_HPP_INCLUDED
+#define BOOST_STATECHART_PROCESSOR_CONTAINER_HPP_INCLUDED
+//////////////////////////////////////////////////////////////////////////////
+// Copyright 2002-2006 Andreas Huber Doenni
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+#include <boost/statechart/event_base.hpp>
+#include <boost/statechart/event_processor.hpp>
+
+#include <boost/assert.hpp>
+#include <boost/noncopyable.hpp>
+#include <boost/intrusive_ptr.hpp>
+#include <boost/shared_ptr.hpp>
+#include <boost/weak_ptr.hpp>
+#include <boost/bind.hpp>
+#include <boost/config.hpp> // BOOST_INTEL
+
+#include <boost/detail/workaround.hpp>
+#include <boost/detail/allocator_utilities.hpp>
+
+#include <set>
+#include <memory> // std::allocator, std::auto_ptr
+
+
+
+namespace boost
+{
+namespace statechart
+{
+
+
+
+template<
+ class Scheduler,
+ class WorkItem,
+ class Allocator = std::allocator< void > >
+class processor_container : noncopyable
+{
+ typedef event_processor< Scheduler > processor_base_type;
+ typedef std::auto_ptr< processor_base_type > processor_holder_type;
+ typedef shared_ptr< processor_holder_type > processor_holder_ptr_type;
+ public:
+ //////////////////////////////////////////////////////////////////////////
+ typedef weak_ptr< processor_holder_type > processor_handle;
+
+ class processor_context
+ {
+ processor_context(
+ Scheduler & scheduler, const processor_handle & handle
+ ) :
+ scheduler_( scheduler ),
+ handle_( handle )
+ {
+ }
+
+ #if BOOST_WORKAROUND( BOOST_INTEL, BOOST_TESTED_AT( 800 ) )
+ public:
+ // for some reason Intel 8.0 seems to think that the following functions
+ // are inaccessible from event_processor<>::event_processor
+ #endif
+
+ Scheduler & my_scheduler() const { return scheduler_; }
+ const processor_handle & my_handle() const { return handle_; }
+
+ #if BOOST_WORKAROUND( BOOST_INTEL, BOOST_TESTED_AT( 800 ) )
+ private:
+ #endif
+
+ Scheduler & scheduler_;
+ const processor_handle handle_;
+
+ friend class processor_container;
+ friend class event_processor< Scheduler >;
+ };
+
+ template< class Processor >
+ WorkItem create_processor( processor_handle & handle, Scheduler & scheduler )
+ {
+ processor_holder_ptr_type pProcessor = make_processor_holder();
+ handle = pProcessor;
+ typedef void ( processor_container::*impl_fun_ptr )(
+ const processor_holder_ptr_type &, const processor_context & );
+ impl_fun_ptr pImpl =
+ &processor_container::template create_processor_impl0< Processor >;
+ return bind(
+ pImpl, this, pProcessor, processor_context( scheduler, handle ) );
+ }
+
+ template< class Processor, typename Arg1 >
+ WorkItem create_processor(
+ processor_handle & handle, Scheduler & scheduler, Arg1 arg1 )
+ {
+ processor_holder_ptr_type pProcessor = make_processor_holder();
+ handle = pProcessor;
+ typedef void ( processor_container::*impl_fun_ptr )(
+ const processor_holder_ptr_type &, const processor_context &, Arg1 );
+ impl_fun_ptr pImpl =
+ &processor_container::template create_processor_impl1<
+ Processor, Arg1 >;
+ return bind(
+ pImpl, this, pProcessor, processor_context( scheduler, handle ), arg1 );
+ }
+
+ template< class Processor, typename Arg1, typename Arg2 >
+ WorkItem create_processor(
+ processor_handle & handle, Scheduler & scheduler, Arg1 arg1, Arg2 arg2 )
+ {
+ processor_holder_ptr_type pProcessor = make_processor_holder();
+ handle = pProcessor;
+ typedef void ( processor_container::*impl_fun_ptr )(
+ const processor_holder_ptr_type &,
+ const processor_context &, Arg1, Arg2 );
+ impl_fun_ptr pImpl =
+ &processor_container::template create_processor_impl2<
+ Processor, Arg1, Arg2 >;
+ return bind(
+ pImpl, this, pProcessor, processor_context( scheduler, handle ),
+ arg1, arg2 );
+ }
+
+ template< class Processor, typename Arg1, typename Arg2, typename Arg3 >
+ WorkItem create_processor(
+ processor_handle & handle, Scheduler & scheduler,
+ Arg1 arg1, Arg2 arg2, Arg3 arg3 )
+ {
+ processor_holder_ptr_type pProcessor = make_processor_holder();
+ handle = pProcessor;
+ typedef void ( processor_container::*impl_fun_ptr )(
+ const processor_holder_ptr_type &,
+ const processor_context &,
+ Arg1, Arg2, Arg3 );
+ impl_fun_ptr pImpl =
+ &processor_container::template create_processor_impl3<
+ Processor, Arg1, Arg2, Arg3 >;
+ return bind(
+ pImpl, this, pProcessor, processor_context( scheduler, handle ),
+ arg1, arg2, arg3 );
+ }
+
+ template<
+ class Processor, typename Arg1, typename Arg2,
+ typename Arg3, typename Arg4 >
+ WorkItem create_processor(
+ processor_handle & handle, Scheduler & scheduler,
+ Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4 )
+ {
+ processor_holder_ptr_type pProcessor = make_processor_holder();
+ handle = pProcessor;
+ typedef void ( processor_container::*impl_fun_ptr )(
+ const processor_holder_ptr_type &,
+ const processor_context &,
+ Arg1, Arg2, Arg3, Arg4 );
+ impl_fun_ptr pImpl =
+ &processor_container::template create_processor_impl4<
+ Processor, Arg1, Arg2, Arg3, Arg4 >;
+ return bind(
+ pImpl, this, pProcessor, processor_context( scheduler, handle ),
+ arg1, arg2, arg3, arg4 );
+ }
+
+ template<
+ class Processor, typename Arg1, typename Arg2,
+ typename Arg3, typename Arg4, typename Arg5 >
+ WorkItem create_processor(
+ processor_handle & handle, Scheduler & scheduler,
+ Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5 )
+ {
+ processor_holder_ptr_type pProcessor = make_processor_holder();
+ handle = pProcessor;
+ typedef void ( processor_container::*impl_fun_ptr )(
+ const processor_holder_ptr_type &,
+ const processor_context &,
+ Arg1, Arg2, Arg3, Arg4, Arg5 );
+ impl_fun_ptr pImpl =
+ &processor_container::template create_processor_impl5<
+ Processor, Arg1, Arg2, Arg3, Arg4, Arg5 >;
+ return bind(
+ pImpl, this, pProcessor, processor_context( scheduler, handle ),
+ arg1, arg2, arg3, arg4, arg5 );
+ }
+
+ template<
+ class Processor, typename Arg1, typename Arg2,
+ typename Arg3, typename Arg4, typename Arg5, typename Arg6 >
+ WorkItem create_processor(
+ processor_handle & handle, Scheduler & scheduler,
+ Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6 )
+ {
+ processor_holder_ptr_type pProcessor = make_processor_holder();
+ handle = pProcessor;
+ typedef void ( processor_container::*impl_fun_ptr )(
+ const processor_holder_ptr_type &,
+ const processor_context &,
+ Arg1, Arg2, Arg3, Arg4, Arg5, Arg6 );
+ impl_fun_ptr pImpl =
+ &processor_container::template create_processor_impl6<
+ Processor, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6 >;
+ return bind(
+ pImpl, this, pProcessor, processor_context( scheduler, handle ),
+ arg1, arg2, arg3, arg4, arg5, arg6 );
+ }
+
+ WorkItem destroy_processor( const processor_handle & processor )
+ {
+ return bind(
+ &processor_container::destroy_processor_impl, this, processor );
+ }
+
+ WorkItem initiate_processor( const processor_handle & processor )
+ {
+ return bind(
+ &processor_container::initiate_processor_impl, this, processor );
+ }
+
+ WorkItem terminate_processor( const processor_handle & processor )
+ {
+ return bind(
+ &processor_container::terminate_processor_impl, this, processor );
+ }
+
+ typedef intrusive_ptr< const event_base > event_ptr_type;
+
+ WorkItem queue_event(
+ const processor_handle & processor, const event_ptr_type & pEvent )
+ {
+ BOOST_ASSERT( pEvent.get() != 0 );
+
+ return bind(
+ &processor_container::queue_event_impl, this, processor, pEvent );
+ }
+
+ private:
+ //////////////////////////////////////////////////////////////////////////
+ processor_holder_ptr_type make_processor_holder()
+ {
+ return processor_holder_ptr_type( new processor_holder_type() );
+ }
+
+ template< class Processor >
+ void create_processor_impl0(
+ const processor_holder_ptr_type & pProcessor,
+ const processor_context & context )
+ {
+ processorSet_.insert( pProcessor );
+ processor_holder_type holder( new Processor( context ) );
+ *pProcessor = holder;
+ }
+
+ template< class Processor, typename Arg1 >
+ void create_processor_impl1(
+ const processor_holder_ptr_type & pProcessor,
+ const processor_context & context, Arg1 arg1 )
+ {
+ processorSet_.insert( pProcessor );
+ processor_holder_type holder( new Processor( context, arg1 ) );
+ *pProcessor = holder;
+ }
+
+ template< class Processor, typename Arg1, typename Arg2 >
+ void create_processor_impl2(
+ const processor_holder_ptr_type & pProcessor,
+ const processor_context & context, Arg1 arg1, Arg2 arg2 )
+ {
+ processorSet_.insert( pProcessor );
+ processor_holder_type holder( new Processor( context, arg1, arg2 ) );
+ *pProcessor = holder;
+ }
+
+ template< class Processor, typename Arg1, typename Arg2, typename Arg3 >
+ void create_processor_impl3(
+ const processor_holder_ptr_type & pProcessor,
+ const processor_context & context, Arg1 arg1, Arg2 arg2, Arg3 arg3 )
+ {
+ processorSet_.insert( pProcessor );
+ processor_holder_type holder(
+ new Processor( context, arg1, arg2, arg3 ) );
+ *pProcessor = holder;
+ }
+
+ template<
+ class Processor, typename Arg1, typename Arg2,
+ typename Arg3, typename Arg4 >
+ void create_processor_impl4(
+ const processor_holder_ptr_type & pProcessor,
+ const processor_context & context,
+ Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4 )
+ {
+ processorSet_.insert( pProcessor );
+ processor_holder_type holder(
+ new Processor( context, arg1, arg2, arg3, arg4 ) );
+ *pProcessor = holder;
+ }
+
+ template<
+ class Processor, typename Arg1, typename Arg2,
+ typename Arg3, typename Arg4, typename Arg5 >
+ void create_processor_impl5(
+ const processor_holder_ptr_type & pProcessor,
+ const processor_context & context,
+ Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5 )
+ {
+ processorSet_.insert( pProcessor );
+ processor_holder_type holder(
+ new Processor( context, arg1, arg2, arg3, arg4, arg5 ) );
+ *pProcessor = holder;
+ }
+
+ template<
+ class Processor, typename Arg1, typename Arg2,
+ typename Arg3, typename Arg4, typename Arg5, typename Arg6 >
+ void create_processor_impl6(
+ const processor_holder_ptr_type & pProcessor,
+ const processor_context & context,
+ Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6 )
+ {
+ processorSet_.insert( pProcessor );
+ processor_holder_type holder(
+ new Processor( context, arg1, arg2, arg3, arg4, arg5, arg6 ) );
+ *pProcessor = holder;
+ }
+
+ void destroy_processor_impl( const processor_handle & processor )
+ {
+ const processor_holder_ptr_type pProcessor = processor.lock();
+
+ if ( pProcessor != 0 )
+ {
+ processorSet_.erase( pProcessor );
+ }
+ }
+
+ void initiate_processor_impl( const processor_handle & processor )
+ {
+ const processor_holder_ptr_type pProcessor = processor.lock();
+
+ if ( pProcessor != 0 )
+ {
+ ( *pProcessor )->initiate();
+ }
+ }
+
+ void terminate_processor_impl( const processor_handle & processor )
+ {
+ const processor_holder_ptr_type pProcessor = processor.lock();
+
+ if ( pProcessor != 0 )
+ {
+ ( *pProcessor )->terminate();
+ }
+ }
+
+ void queue_event_impl(
+ const processor_handle & processor, const event_ptr_type & pEvent )
+ {
+ const processor_holder_ptr_type pProcessor = processor.lock();
+
+ if ( pProcessor != 0 )
+ {
+ ( *pProcessor )->process_event( *pEvent );
+ }
+ }
+
+ typedef std::set<
+ processor_holder_ptr_type,
+ std::less< processor_holder_ptr_type >,
+ typename boost::detail::allocator::rebind_to<
+ Allocator, processor_holder_ptr_type >::type
+ > event_processor_set_type;
+
+ event_processor_set_type processorSet_;
+};
+
+
+
+} // namespace statechart
+} // namespace boost
+
+
+
+#endif
diff --git a/boost/boost/statechart/result.hpp b/boost/boost/statechart/result.hpp
new file mode 100644
index 00000000000..35dd023de29
--- /dev/null
+++ b/boost/boost/statechart/result.hpp
@@ -0,0 +1,122 @@
+#ifndef BOOST_STATECHART_RESULT_HPP_INCLUDED
+#define BOOST_STATECHART_RESULT_HPP_INCLUDED
+//////////////////////////////////////////////////////////////////////////////
+// Copyright 2002-2006 Andreas Huber Doenni
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+#include <boost/assert.hpp>
+
+
+
+namespace boost
+{
+namespace statechart
+{
+namespace detail
+{
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+enum reaction_result
+{
+ no_reaction,
+ do_forward_event,
+ do_discard_event,
+ do_defer_event,
+ consumed
+};
+
+struct result_utility;
+
+//////////////////////////////////////////////////////////////////////////////
+class safe_reaction_result
+{
+ public:
+ //////////////////////////////////////////////////////////////////////////
+ safe_reaction_result( const safe_reaction_result & other ) :
+ reactionResult( other.reactionResult )
+ {
+ // This assert fails when an attempt is made to make multiple copies of
+ // a result value. This makes little sense, given the requirement that
+ // an obtained result value must be returned out of the react function.
+ BOOST_ASSERT( reactionResult != consumed );
+ other.reactionResult = consumed;
+ }
+
+ ~safe_reaction_result()
+ {
+ // This assert fails when an obtained result value is not returned out
+ // of the react() function. This can happen if the user accidentally
+ // makes more than one call to reaction functions inside react() or
+ // accidentally makes one or more calls to reaction functions outside
+ // react()
+ BOOST_ASSERT( reactionResult == consumed );
+ }
+
+ private:
+ //////////////////////////////////////////////////////////////////////////
+ safe_reaction_result( reaction_result reactionResult ) :
+ reactionResult( reactionResult )
+ {
+ }
+
+ operator reaction_result() const
+ {
+ const reaction_result val = reactionResult;
+ reactionResult = consumed;
+ return val;
+ }
+
+ safe_reaction_result & operator=( const safe_reaction_result & );
+
+ mutable reaction_result reactionResult;
+
+ friend struct result_utility;
+};
+
+
+
+} // namespace detail
+
+
+
+#ifdef NDEBUG
+ typedef detail::reaction_result result;
+#else
+ typedef detail::safe_reaction_result result;
+#endif
+
+
+namespace detail
+{
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+struct result_utility
+{
+ static ::boost::statechart::result make_result( reaction_result value )
+ {
+ return value;
+ }
+
+ static reaction_result get_result( ::boost::statechart::result value )
+ {
+ return value;
+ }
+};
+
+
+
+} // namespace detail
+} // namespace statechart
+} // namespace boost
+
+
+
+#endif
diff --git a/boost/boost/statechart/shallow_history.hpp b/boost/boost/statechart/shallow_history.hpp
new file mode 100644
index 00000000000..fabc423a219
--- /dev/null
+++ b/boost/boost/statechart/shallow_history.hpp
@@ -0,0 +1,63 @@
+#ifndef BOOST_STATECHART_SHALLOW_HISTORY_HPP_INCLUDED
+#define BOOST_STATECHART_SHALLOW_HISTORY_HPP_INCLUDED
+//////////////////////////////////////////////////////////////////////////////
+// Copyright 2002-2006 Andreas Huber Doenni
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+#include <boost/mpl/bool.hpp>
+#include <boost/static_assert.hpp>
+
+
+
+namespace boost
+{
+namespace statechart
+{
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+template< class DefaultState >
+class shallow_history
+{
+ public:
+ //////////////////////////////////////////////////////////////////////////
+ // If you receive a
+ // "use of undefined type 'boost::STATIC_ASSERTION_FAILURE<x>'" or similar
+ // compiler error here then you forgot to pass either
+ // statechart::has_deep_history or statechart::has_full_history as the
+ // last parameter of DefaultState's context.
+ BOOST_STATIC_ASSERT( DefaultState::context_type::shallow_history::value );
+
+ //////////////////////////////////////////////////////////////////////////
+ // The following declarations should be private.
+ // They are only public because many compilers lack template friends.
+ //////////////////////////////////////////////////////////////////////////
+ typedef typename DefaultState::outermost_context_base_type
+ outermost_context_base_type;
+ typedef typename DefaultState::context_type context_type;
+ typedef typename DefaultState::context_ptr_type context_ptr_type;
+ typedef typename DefaultState::context_type_list context_type_list;
+ typedef typename DefaultState::orthogonal_position orthogonal_position;
+
+ static void deep_construct(
+ const context_ptr_type & pContext,
+ outermost_context_base_type & outermostContextBase )
+ {
+ outermostContextBase.template construct_with_shallow_history<
+ DefaultState >( pContext );
+ }
+};
+
+
+
+} // namespace statechart
+} // namespace boost
+
+
+
+#endif
diff --git a/boost/boost/statechart/simple_state.hpp b/boost/boost/statechart/simple_state.hpp
new file mode 100644
index 00000000000..8a3eb06b024
--- /dev/null
+++ b/boost/boost/statechart/simple_state.hpp
@@ -0,0 +1,996 @@
+#ifndef BOOST_STATECHART_SIMPLE_STATE_HPP_INCLUDED
+#define BOOST_STATECHART_SIMPLE_STATE_HPP_INCLUDED
+//////////////////////////////////////////////////////////////////////////////
+// Copyright 2002-2006 Andreas Huber Doenni
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+#include <boost/statechart/event.hpp>
+
+#include <boost/statechart/detail/leaf_state.hpp>
+#include <boost/statechart/detail/node_state.hpp>
+#include <boost/statechart/detail/constructor.hpp>
+#include <boost/statechart/detail/memory.hpp>
+
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/is_sequence.hpp>
+#include <boost/mpl/list.hpp>
+#include <boost/mpl/empty.hpp>
+#include <boost/mpl/size.hpp>
+#include <boost/mpl/front.hpp>
+#include <boost/mpl/at.hpp>
+#include <boost/mpl/find.hpp>
+#include <boost/mpl/find_if.hpp>
+#include <boost/mpl/contains.hpp>
+#include <boost/mpl/distance.hpp>
+#include <boost/mpl/deref.hpp>
+#include <boost/mpl/pop_front.hpp>
+#include <boost/mpl/push_front.hpp>
+#include <boost/mpl/clear.hpp>
+#include <boost/mpl/placeholders.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/integral_c.hpp>
+#include <boost/mpl/less.hpp>
+#include <boost/mpl/equal_to.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/or.hpp>
+
+#include <boost/mpl/plus.hpp>
+#include <boost/mpl/max_element.hpp>
+#include <boost/mpl/greater.hpp>
+
+#include <boost/get_pointer.hpp>
+#include <boost/intrusive_ptr.hpp>
+#include <boost/assert.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/cast.hpp> // boost::polymorphic_downcast
+
+#include <cstddef> // std::size_t
+
+
+
+namespace boost
+{
+namespace statechart
+{
+namespace detail
+{
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+template< class T >
+struct make_list : public mpl::eval_if<
+ mpl::is_sequence< T >,
+ mpl::identity< T >,
+ mpl::identity< mpl::list< T > > > {};
+
+//////////////////////////////////////////////////////////////////////////////
+template< class MostDerived, class Context, class InnerInitial >
+struct simple_state_base_type
+{
+ private:
+ typedef typename Context::outermost_context_base_type::allocator_type
+ allocator_type;
+ typedef typename Context::outermost_context_base_type::rtti_policy_type
+ rtti_policy_type;
+ typedef typename detail::make_list< InnerInitial >::type
+ inner_initial_list;
+ typedef typename mpl::size< inner_initial_list >::type
+ inner_initial_list_size;
+
+ public:
+ typedef typename mpl::eval_if<
+ mpl::empty< inner_initial_list >,
+ mpl::identity< typename rtti_policy_type::
+ template rtti_derived_type< MostDerived, leaf_state<
+ allocator_type,
+ rtti_policy_type > > >,
+ mpl::identity< typename rtti_policy_type::
+ template rtti_derived_type< MostDerived, node_state<
+ inner_initial_list_size,
+ allocator_type,
+ rtti_policy_type > > > >::type type;
+};
+
+
+//////////////////////////////////////////////////////////////////////////////
+struct no_transition_function
+{
+ template< class CommonContext >
+ void operator()( CommonContext & ) const {}
+};
+
+template< class TransitionContext, class Event >
+class transition_function
+{
+ public:
+ transition_function(
+ void ( TransitionContext::*pTransitionAction )( const Event & ),
+ const Event & evt
+ ) :
+ pTransitionAction_( pTransitionAction ),
+ evt_( evt )
+ {
+ }
+
+ template< class CommonContext >
+ void operator()( CommonContext & commonContext ) const
+ {
+ ( commonContext.template context< TransitionContext >()
+ .*pTransitionAction_ )( evt_ );
+ }
+
+ private:
+ void ( TransitionContext::*pTransitionAction_ )( const Event & );
+ const Event & evt_;
+};
+
+
+template< bool contextHasInheritedDeepHistory, bool contextHasDeepHistory >
+struct deep_history_storer
+{
+ template< class HistorizedState, class LeafState, class Context >
+ static void store_deep_history( Context & ) {}
+};
+
+template<>
+struct deep_history_storer< true, false >
+{
+ template< class HistorizedState, class LeafState, class Context >
+ static void store_deep_history( Context & ctx )
+ {
+ ctx.template store_deep_history_impl< LeafState >();
+ }
+};
+
+template<>
+struct deep_history_storer< true, true >
+{
+ template< class HistorizedState, class LeafState, class Context >
+ static void store_deep_history( Context & ctx )
+ {
+ ctx.outermost_context_base().template store_deep_history<
+ HistorizedState, LeafState >();
+ ctx.template store_deep_history_impl< LeafState >();
+ }
+};
+
+
+
+} // namespace detail
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+enum history_mode
+{
+ has_no_history,
+ has_shallow_history,
+ has_deep_history,
+ has_full_history // shallow & deep
+};
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+template< class MostDerived,
+ class Context,
+ class InnerInitial = mpl::list<>,
+ history_mode historyMode = has_no_history >
+class simple_state : public detail::simple_state_base_type< MostDerived,
+ typename Context::inner_context_type, InnerInitial >::type
+{
+ typedef typename detail::simple_state_base_type<
+ MostDerived, typename Context::inner_context_type,
+ InnerInitial >::type base_type;
+
+ public:
+ //////////////////////////////////////////////////////////////////////////
+ typedef mpl::list<> reactions;
+
+ typedef typename Context::inner_context_type context_type;
+
+ template< detail::orthogonal_position_type innerOrthogonalPosition >
+ struct orthogonal
+ {
+ typedef mpl::integral_c<
+ detail::orthogonal_position_type,
+ innerOrthogonalPosition > inner_orthogonal_position;
+ typedef MostDerived inner_context_type;
+ };
+
+ typedef typename context_type::outermost_context_type
+ outermost_context_type;
+
+ outermost_context_type & outermost_context()
+ {
+ // This assert fails when an attempt is made to access the state machine
+ // from a constructor of a state that is *not* a subtype of state<>.
+ // To correct this, derive from state<> instead of simple_state<>.
+ BOOST_ASSERT( get_pointer( pContext_ ) != 0 );
+ return pContext_->outermost_context();
+ }
+
+ const outermost_context_type & outermost_context() const
+ {
+ // This assert fails when an attempt is made to access the state machine
+ // from a constructor of a state that is *not* a subtype of state<>.
+ // To correct this, derive from state<> instead of simple_state<>.
+ BOOST_ASSERT( get_pointer( pContext_ ) != 0 );
+ return pContext_->outermost_context();
+ }
+
+ template< class OtherContext >
+ OtherContext & context()
+ {
+ typedef typename mpl::if_<
+ is_same< OtherContext, MostDerived >,
+ context_impl_this_context,
+ context_impl_other_context
+ >::type impl;
+ return impl::template context_impl< OtherContext >( *this );
+ }
+
+ template< class OtherContext >
+ const OtherContext & context() const
+ {
+ typedef typename mpl::if_<
+ is_same< OtherContext, MostDerived >,
+ context_impl_this_context,
+ context_impl_other_context
+ >::type impl;
+ return impl::template context_impl< OtherContext >( *this );
+ }
+
+ template< class Target >
+ Target state_cast() const
+ {
+ return outermost_context_base().template state_cast< Target >();
+ }
+
+ template< class Target >
+ Target state_downcast() const
+ {
+ return outermost_context_base().template state_downcast< Target >();
+ }
+
+ typedef typename context_type::state_base_type state_base_type;
+ typedef typename context_type::state_iterator state_iterator;
+
+ state_iterator state_begin() const
+ {
+ return outermost_context_base().state_begin();
+ }
+
+ state_iterator state_end() const
+ {
+ return outermost_context_base().state_end();
+ }
+
+
+ typedef typename context_type::event_base_ptr_type event_base_ptr_type;
+
+ void post_event( const event_base_ptr_type & pEvent )
+ {
+ outermost_context_base().post_event( pEvent );
+ }
+
+ void post_event( const event_base & evt )
+ {
+ outermost_context_base().post_event( evt );
+ }
+
+ result discard_event()
+ {
+ return detail::result_utility::make_result( detail::do_discard_event );
+ }
+
+ result forward_event()
+ {
+ return detail::result_utility::make_result( detail::do_forward_event );
+ }
+
+ result defer_event()
+ {
+ this->state_base_type::defer_event();
+ return detail::result_utility::make_result( detail::do_defer_event );
+ }
+
+ template< class DestinationState >
+ result transit()
+ {
+ return transit_impl< DestinationState, outermost_context_type >(
+ detail::no_transition_function() );
+ }
+
+ template< class DestinationState, class TransitionContext, class Event >
+ result transit(
+ void ( TransitionContext::*pTransitionAction )( const Event & ),
+ const Event & evt )
+ {
+ return transit_impl< DestinationState, TransitionContext >(
+ detail::transition_function< TransitionContext, Event >(
+ pTransitionAction, evt ) );
+ }
+
+ result terminate()
+ {
+ outermost_context_base().terminate_as_reaction( *this );
+ return detail::result_utility::make_result( detail::do_discard_event );
+ }
+
+ template<
+ class HistoryContext,
+ detail::orthogonal_position_type orthogonalPosition >
+ void clear_shallow_history()
+ {
+ outermost_context_base().template clear_shallow_history<
+ HistoryContext, orthogonalPosition >();
+ }
+
+ template<
+ class HistoryContext,
+ detail::orthogonal_position_type orthogonalPosition >
+ void clear_deep_history()
+ {
+ outermost_context_base().template clear_deep_history<
+ HistoryContext, orthogonalPosition >();
+ }
+
+ protected:
+ //////////////////////////////////////////////////////////////////////////
+ simple_state() : pContext_( 0 ) {}
+
+ ~simple_state()
+ {
+ // As a result of a throwing derived class constructor, this destructor
+ // can be called before the context is set.
+ if ( get_pointer( pContext_ ) != 0 )
+ {
+ if ( this->deferred_events() )
+ {
+ outermost_context_base().release_events( this );
+ }
+
+ pContext_->remove_inner_state( orthogonal_position::value );
+ }
+ }
+
+ public:
+ //////////////////////////////////////////////////////////////////////////
+ // The following declarations should be private.
+ // They are only public because many compilers lack template friends.
+ //////////////////////////////////////////////////////////////////////////
+ typedef typename Context::inner_orthogonal_position orthogonal_position;
+
+ // If you receive a
+ // "use of undefined type 'boost::STATIC_ASSERTION_FAILURE<x>'" or similar
+ // compiler error here then either this state resides in a non-existent
+ // orthogonal region of the outer state or the outer state does not have
+ // inner states.
+ BOOST_STATIC_ASSERT( ( mpl::less<
+ orthogonal_position,
+ typename context_type::no_of_orthogonal_regions >::value ) );
+
+ typedef MostDerived inner_context_type;
+ typedef mpl::integral_c< detail::orthogonal_position_type, 0 >
+ inner_orthogonal_position;
+
+ typedef typename context_type::event_base_type event_base_type;
+ typedef typename context_type::rtti_policy_type rtti_policy_type;
+
+ typedef typename context_type::outermost_context_base_type
+ outermost_context_base_type;
+ typedef typename context_type::inner_context_ptr_type context_ptr_type;
+ typedef typename context_type::state_list_type state_list_type;
+ typedef intrusive_ptr< inner_context_type > inner_context_ptr_type;
+ typedef typename detail::make_list< InnerInitial >::type
+ inner_initial_list;
+ typedef typename mpl::size< inner_initial_list >::type
+ inner_initial_list_size;
+ typedef mpl::integral_c<
+ detail::orthogonal_position_type,
+ inner_initial_list_size::value > no_of_orthogonal_regions;
+ typedef typename mpl::push_front<
+ typename context_type::context_type_list,
+ context_type >::type context_type_list;
+
+ // If you receive a
+ // "use of undefined type 'boost::STATIC_ASSERTION_FAILURE<x>'" or similar
+ // compiler error here then the direct or indirect context of this state
+ // has deep history _and_ this state has two or more orthogonal regions.
+ // Boost.Statechart does not currently support deep history in a state whose
+ // direct or indirect inner states have two or more orthogonal regions.
+ // Please consult the documentation on how to work around this limitation.
+ BOOST_STATIC_ASSERT( ( mpl::or_<
+ mpl::less<
+ no_of_orthogonal_regions,
+ mpl::integral_c< detail::orthogonal_position_type, 2 > >,
+ mpl::not_<
+ typename context_type::inherited_deep_history > >::value ) );
+
+ typedef mpl::bool_< ( historyMode & has_shallow_history ) != 0 >
+ shallow_history;
+ typedef typename context_type::shallow_history stores_shallow_history;
+
+ typedef mpl::bool_< ( historyMode & has_deep_history ) != 0 >
+ deep_history;
+ typedef typename mpl::or_<
+ deep_history,
+ typename context_type::inherited_deep_history
+ >::type inherited_deep_history;
+ typedef typename mpl::and_<
+ inherited_deep_history,
+ mpl::empty< inner_initial_list > >::type stores_deep_history;
+
+ void * operator new( std::size_t size )
+ {
+ return detail::allocate< MostDerived,
+ typename outermost_context_type::allocator_type >( size );
+ }
+
+ void operator delete( void * pState )
+ {
+ detail::deallocate< MostDerived,
+ typename outermost_context_type::allocator_type >( pState );
+ }
+
+ outermost_context_base_type & outermost_context_base()
+ {
+ // This assert fails when an attempt is made to access the state machine
+ // from a constructor of a state that is *not* a subtype of state<>.
+ // To correct this, derive from state<> instead of simple_state<>.
+ BOOST_ASSERT( get_pointer( pContext_ ) != 0 );
+ return pContext_->outermost_context_base();
+ }
+
+ const outermost_context_base_type & outermost_context_base() const
+ {
+ // This assert fails when an attempt is made to access the state machine
+ // from a constructor of a state that is *not* a subtype of state<>.
+ // To correct this, derive from state<> instead of simple_state<>.
+ BOOST_ASSERT( get_pointer( pContext_ ) != 0 );
+ return pContext_->outermost_context_base();
+ }
+
+ virtual const state_base_type * outer_state_ptr() const
+ {
+ typedef typename mpl::if_<
+ is_same< outermost_context_type, context_type >,
+ outer_state_ptr_impl_outermost,
+ outer_state_ptr_impl_non_outermost
+ >::type impl;
+ return impl::outer_state_ptr_impl( *this );
+ }
+
+ virtual detail::reaction_result react_impl(
+ const event_base_type & evt,
+ typename rtti_policy_type::id_type eventType )
+ {
+ typedef typename detail::make_list<
+ typename MostDerived::reactions >::type reaction_list;
+ detail::reaction_result reactionResult =
+ local_react< reaction_list >( evt, eventType );
+
+ // At this point we can only safely access pContext_ if the handler did
+ // not return do_discard_event!
+ switch ( reactionResult )
+ {
+ case detail::do_forward_event:
+ // TODO: The following call to react_impl of our outer state should
+ // be made with a context_type:: prefix to call directly instead of
+ // virtually. For some reason the compiler complains...
+ reactionResult = pContext_->react_impl( evt, eventType );
+ break;
+ case detail::do_defer_event:
+ outermost_context_base().defer_event( evt, this );
+ break;
+ default:
+ break;
+ }
+
+ return reactionResult;
+ }
+
+ virtual void exit_impl(
+ typename base_type::direct_state_base_ptr_type & pSelf,
+ typename state_base_type::node_state_base_ptr_type &
+ pOutermostUnstableState,
+ bool performFullExit )
+ {
+ inner_context_ptr_type pMostDerivedSelf =
+ polymorphic_downcast< MostDerived * >( this );
+ pSelf = 0;
+ exit_impl( pMostDerivedSelf, pOutermostUnstableState, performFullExit );
+ }
+
+ void exit_impl(
+ inner_context_ptr_type & pSelf,
+ typename state_base_type::node_state_base_ptr_type &
+ pOutermostUnstableState,
+ bool performFullExit )
+ {
+ switch ( this->ref_count() )
+ {
+ case 2:
+ if ( get_pointer( pOutermostUnstableState ) ==
+ static_cast< state_base_type * >( this ) )
+ {
+ pContext_->set_outermost_unstable_state(
+ pOutermostUnstableState );
+ // fall through to next case intended
+ }
+ else
+ {
+ break;
+ }
+ case 1:
+ {
+ if ( get_pointer( pOutermostUnstableState ) == 0 )
+ {
+ pContext_->set_outermost_unstable_state(
+ pOutermostUnstableState );
+ }
+
+ if ( performFullExit )
+ {
+ pSelf->exit();
+ check_store_shallow_history< stores_shallow_history >();
+ check_store_deep_history< stores_deep_history >();
+ }
+
+ context_ptr_type pContext = pContext_;
+ pSelf = 0;
+ pContext->exit_impl(
+ pContext, pOutermostUnstableState, performFullExit );
+ break;
+ }
+ default:
+ break;
+ }
+ }
+
+ void set_outermost_unstable_state(
+ typename state_base_type::node_state_base_ptr_type &
+ pOutermostUnstableState )
+ {
+ pOutermostUnstableState = this;
+ }
+
+ template< class OtherContext >
+ const typename OtherContext::inner_context_ptr_type & context_ptr() const
+ {
+ typedef typename mpl::if_<
+ is_same< OtherContext, context_type >,
+ context_ptr_impl_my_context,
+ context_ptr_impl_other_context
+ >::type impl;
+
+ return impl::template context_ptr_impl< OtherContext >( *this );
+ }
+
+ static void initial_deep_construct(
+ outermost_context_base_type & outermostContextBase )
+ {
+ deep_construct( &outermostContextBase, outermostContextBase );
+ }
+
+ static void deep_construct(
+ const context_ptr_type & pContext,
+ outermost_context_base_type & outermostContextBase )
+ {
+ const inner_context_ptr_type pInnerContext(
+ shallow_construct( pContext, outermostContextBase ) );
+ deep_construct_inner< inner_initial_list >(
+ pInnerContext, outermostContextBase );
+ }
+
+ static inner_context_ptr_type shallow_construct(
+ const context_ptr_type & pContext,
+ outermost_context_base_type & outermostContextBase )
+ {
+ const inner_context_ptr_type pInnerContext( new MostDerived );
+ pInnerContext->set_context( pContext );
+ outermostContextBase.add( pInnerContext );
+ return pInnerContext;
+ }
+
+ void set_context( const context_ptr_type & pContext )
+ {
+ BOOST_ASSERT( get_pointer( pContext ) != 0 );
+ pContext_ = pContext;
+ base_type::set_context(
+ orthogonal_position::value, get_pointer( pContext ) );
+ }
+
+ template< class InnerList >
+ static void deep_construct_inner(
+ const inner_context_ptr_type & pInnerContext,
+ outermost_context_base_type & outermostContextBase )
+ {
+ typedef typename mpl::if_<
+ mpl::empty< InnerList >,
+ deep_construct_inner_impl_empty,
+ deep_construct_inner_impl_non_empty
+ >::type impl;
+ impl::template deep_construct_inner_impl< InnerList >(
+ pInnerContext, outermostContextBase );
+ }
+
+ template< class LeafState >
+ void store_deep_history_impl()
+ {
+ detail::deep_history_storer<
+ context_type::inherited_deep_history::value,
+ context_type::deep_history::value
+ >::template store_deep_history< MostDerived, LeafState >(
+ *pContext_ );
+ }
+
+ private:
+ //////////////////////////////////////////////////////////////////////////
+ struct context_ptr_impl_other_context
+ {
+ template< class OtherContext, class State >
+ static const typename OtherContext::inner_context_ptr_type &
+ context_ptr_impl( const State & stt )
+ {
+ // This assert fails when an attempt is made to access an outer
+ // context from a constructor of a state that is *not* a subtype of
+ // state<>. To correct this, derive from state<> instead of
+ // simple_state<>.
+ BOOST_ASSERT( get_pointer( stt.pContext_ ) != 0 );
+ return stt.pContext_->template context_ptr< OtherContext >();
+ }
+ };
+ friend struct context_ptr_impl_other_context;
+
+ struct context_ptr_impl_my_context
+ {
+ template< class OtherContext, class State >
+ static const typename OtherContext::inner_context_ptr_type &
+ context_ptr_impl( const State & stt )
+ {
+ // This assert fails when an attempt is made to access an outer
+ // context from a constructor of a state that is *not* a subtype of
+ // state<>. To correct this, derive from state<> instead of
+ // simple_state<>.
+ BOOST_ASSERT( get_pointer( stt.pContext_ ) != 0 );
+ return stt.pContext_;
+ }
+ };
+ friend struct context_ptr_impl_my_context;
+
+ struct context_impl_other_context
+ {
+ template< class OtherContext, class State >
+ static OtherContext & context_impl( State & stt )
+ {
+ // This assert fails when an attempt is made to access an outer
+ // context from a constructor of a state that is *not* a subtype of
+ // state<>. To correct this, derive from state<> instead of
+ // simple_state<>.
+ BOOST_ASSERT( get_pointer( stt.pContext_ ) != 0 );
+ return stt.pContext_->template context< OtherContext >();
+ }
+ };
+ friend struct context_impl_other_context;
+
+ struct context_impl_this_context
+ {
+ template< class OtherContext, class State >
+ static OtherContext & context_impl( State & stt )
+ {
+ return *polymorphic_downcast< MostDerived * >( &stt );
+ }
+ };
+ friend struct context_impl_this_context;
+
+ template< class DestinationState,
+ class TransitionContext,
+ class TransitionAction >
+ result transit_impl( const TransitionAction & transitionAction )
+ {
+ typedef typename mpl::find_if<
+ context_type_list,
+ mpl::contains<
+ typename DestinationState::context_type_list,
+ mpl::placeholders::_ > >::type common_context_iter;
+ typedef typename mpl::deref< common_context_iter >::type
+ common_context_type;
+ typedef typename mpl::distance<
+ typename mpl::begin< context_type_list >::type,
+ common_context_iter >::type termination_state_position;
+ typedef typename mpl::push_front< context_type_list, MostDerived >::type
+ possible_transition_contexts;
+ typedef typename mpl::at<
+ possible_transition_contexts,
+ termination_state_position >::type termination_state_type;
+
+ termination_state_type & terminationState(
+ context< termination_state_type >() );
+ const typename
+ common_context_type::inner_context_ptr_type pCommonContext(
+ terminationState.context_ptr< common_context_type >() );
+ outermost_context_base_type & outermostContextBase(
+ pCommonContext->outermost_context_base() );
+
+ #ifdef BOOST_STATECHART_RELAX_TRANSITION_CONTEXT
+ typedef typename mpl::distance<
+ typename mpl::begin< possible_transition_contexts >::type,
+ typename mpl::find<
+ possible_transition_contexts, TransitionContext >::type
+ >::type proposed_transition_context_position;
+
+ typedef typename mpl::plus<
+ termination_state_position,
+ mpl::long_< 1 >
+ >::type uml_transition_context_position;
+
+ typedef typename mpl::deref< typename mpl::max_element<
+ mpl::list<
+ proposed_transition_context_position,
+ uml_transition_context_position >,
+ mpl::greater< mpl::placeholders::_, mpl::placeholders::_ >
+ >::type >::type real_transition_context_position;
+
+ typedef typename mpl::at<
+ possible_transition_contexts,
+ real_transition_context_position >::type real_transition_context_type;
+
+ #ifdef BOOST_MSVC
+ # pragma warning( push )
+ # pragma warning( disable: 4127 ) // conditional expression is constant
+ #endif
+ if ( ( proposed_transition_context_position::value == 0 ) &&
+ ( inner_initial_list_size::value == 0 ) )
+ {
+ transitionAction( *polymorphic_downcast< MostDerived * >( this ) );
+ outermostContextBase.terminate_as_part_of_transit( terminationState );
+ }
+ else if ( proposed_transition_context_position::value >=
+ uml_transition_context_position::value )
+ {
+ real_transition_context_type & transitionContext =
+ context< real_transition_context_type >();
+ outermostContextBase.terminate_as_part_of_transit( terminationState );
+ transitionAction( transitionContext );
+ }
+ else
+ {
+ typename real_transition_context_type::inner_context_ptr_type
+ pTransitionContext = context_ptr< real_transition_context_type >();
+ outermostContextBase.terminate_as_part_of_transit(
+ *pTransitionContext );
+ transitionAction( *pTransitionContext );
+ pTransitionContext = 0;
+ outermostContextBase.terminate_as_part_of_transit( terminationState );
+ }
+ #ifdef BOOST_MSVC
+ # pragma warning( pop )
+ #endif
+ #else
+ outermostContextBase.terminate_as_part_of_transit( terminationState );
+ transitionAction( *pCommonContext );
+ #endif
+
+ typedef typename detail::make_context_list<
+ common_context_type, DestinationState >::type context_list_type;
+
+ // If you receive a
+ // "use of undefined type 'boost::STATIC_ASSERTION_FAILURE<x>'" or
+ // similar compiler error here then you tried to make an invalid
+ // transition between different orthogonal regions.
+ BOOST_STATIC_ASSERT( ( mpl::equal_to<
+ typename termination_state_type::orthogonal_position,
+ typename mpl::front< context_list_type >::type::orthogonal_position
+ >::value ) );
+
+ detail::constructor<
+ context_list_type, outermost_context_base_type >::construct(
+ pCommonContext, outermostContextBase );
+
+ return detail::result_utility::make_result( detail::do_discard_event );
+ }
+
+ struct local_react_impl_non_empty
+ {
+ template< class ReactionList, class State >
+ static detail::reaction_result local_react_impl(
+ State & stt,
+ const event_base_type & evt,
+ typename rtti_policy_type::id_type eventType )
+ {
+ detail::reaction_result reactionResult =
+ mpl::front< ReactionList >::type::react(
+ *polymorphic_downcast< MostDerived * >( &stt ),
+ evt, eventType );
+
+ if ( reactionResult == detail::no_reaction )
+ {
+ reactionResult = stt.template local_react<
+ typename mpl::pop_front< ReactionList >::type >(
+ evt, eventType );
+ }
+
+ return reactionResult;
+ }
+ };
+ friend struct local_react_impl_non_empty;
+
+ struct local_react_impl_empty
+ {
+ template< class ReactionList, class State >
+ static detail::reaction_result local_react_impl(
+ State &, const event_base_type &, typename rtti_policy_type::id_type )
+ {
+ return detail::do_forward_event;
+ }
+ };
+
+ template< class ReactionList >
+ detail::reaction_result local_react(
+ const event_base_type & evt,
+ typename rtti_policy_type::id_type eventType )
+ {
+ typedef typename mpl::if_<
+ mpl::empty< ReactionList >,
+ local_react_impl_empty,
+ local_react_impl_non_empty
+ >::type impl;
+ return impl::template local_react_impl< ReactionList >(
+ *this, evt, eventType );
+ }
+
+ struct outer_state_ptr_impl_non_outermost
+ {
+ template< class State >
+ static const state_base_type * outer_state_ptr_impl( const State & stt )
+ {
+ return get_pointer( stt.pContext_ );
+ }
+ };
+ friend struct outer_state_ptr_impl_non_outermost;
+
+ struct outer_state_ptr_impl_outermost
+ {
+ template< class State >
+ static const state_base_type * outer_state_ptr_impl( const State & )
+ {
+ return 0;
+ }
+ };
+
+ struct deep_construct_inner_impl_non_empty
+ {
+ template< class InnerList >
+ static void deep_construct_inner_impl(
+ const inner_context_ptr_type & pInnerContext,
+ outermost_context_base_type & outermostContextBase )
+ {
+ typedef typename mpl::front< InnerList >::type current_inner;
+
+ // If you receive a
+ // "use of undefined type 'boost::STATIC_ASSERTION_FAILURE<x>'" or
+ // similar compiler error here then there is a mismatch between the
+ // orthogonal position of a state and its position in the inner
+ // initial list of its outer state.
+ BOOST_STATIC_ASSERT( ( is_same<
+ current_inner,
+ typename mpl::at<
+ typename current_inner::context_type::inner_initial_list,
+ typename current_inner::orthogonal_position >::type >::value ) );
+
+ current_inner::deep_construct( pInnerContext, outermostContextBase );
+ deep_construct_inner< typename mpl::pop_front< InnerList >::type >(
+ pInnerContext, outermostContextBase );
+ }
+ };
+
+ struct deep_construct_inner_impl_empty
+ {
+ template< class InnerList >
+ static void deep_construct_inner_impl(
+ const inner_context_ptr_type &, outermost_context_base_type & ) {}
+ };
+
+ struct check_store_shallow_history_impl_no
+ {
+ template< class State >
+ static void check_store_shallow_history_impl( State & ) {}
+ };
+
+ struct check_store_shallow_history_impl_yes
+ {
+ template< class State >
+ static void check_store_shallow_history_impl( State & stt )
+ {
+ stt.outermost_context_base().template store_shallow_history<
+ MostDerived >();
+ }
+ };
+ friend struct check_store_shallow_history_impl_yes;
+
+ template< class StoreShallowHistory >
+ void check_store_shallow_history()
+ {
+ typedef typename mpl::if_<
+ StoreShallowHistory,
+ check_store_shallow_history_impl_yes,
+ check_store_shallow_history_impl_no
+ >::type impl;
+ impl::check_store_shallow_history_impl( *this );
+ }
+
+ struct check_store_deep_history_impl_no
+ {
+ template< class State >
+ static void check_store_deep_history_impl( State & ) {}
+ };
+
+ struct check_store_deep_history_impl_yes
+ {
+ template< class State >
+ static void check_store_deep_history_impl( State & stt )
+ {
+ stt.store_deep_history_impl< MostDerived >();
+ }
+ };
+ friend struct check_store_deep_history_impl_yes;
+
+ template< class StoreDeepHistory >
+ void check_store_deep_history()
+ {
+ typedef typename mpl::if_<
+ StoreDeepHistory,
+ check_store_deep_history_impl_yes,
+ check_store_deep_history_impl_no
+ >::type impl;
+ impl::check_store_deep_history_impl( *this );
+ }
+
+
+ context_ptr_type pContext_;
+};
+
+
+
+#ifdef BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
+} // namespace statechart
+#endif
+
+
+
+template< class MostDerived, class Context,
+ class InnerInitial, history_mode historyMode >
+inline void intrusive_ptr_release( const ::boost::statechart::simple_state<
+ MostDerived, Context, InnerInitial, historyMode > * pBase )
+{
+ if ( pBase->release() )
+ {
+ // The cast is necessary because the simple_state destructor is non-
+ // virtual (and inaccessible from this context)
+ delete polymorphic_downcast< const MostDerived * >( pBase );
+ }
+}
+
+
+
+#ifndef BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
+} // namespace statechart
+#endif
+
+
+
+} // namespace boost
+
+
+
+#endif
diff --git a/boost/boost/statechart/state.hpp b/boost/boost/statechart/state.hpp
new file mode 100644
index 00000000000..ab9ea0aa1a9
--- /dev/null
+++ b/boost/boost/statechart/state.hpp
@@ -0,0 +1,102 @@
+#ifndef BOOST_STATECHART_STATE_HPP_INCLUDED
+#define BOOST_STATECHART_STATE_HPP_INCLUDED
+//////////////////////////////////////////////////////////////////////////////
+// Copyright 2002-2006 Andreas Huber Doenni
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+#include <boost/statechart/simple_state.hpp>
+
+#include <boost/mpl/list.hpp>
+
+
+
+namespace boost
+{
+namespace statechart
+{
+
+
+
+template< class MostDerived,
+ class Context,
+ class InnerInitial = mpl::list<>,
+ history_mode historyMode = has_no_history >
+class state : public simple_state<
+ MostDerived, Context, InnerInitial, historyMode >
+{
+ typedef simple_state< MostDerived, Context, InnerInitial, historyMode >
+ base_type;
+
+ protected:
+ //////////////////////////////////////////////////////////////////////////
+ struct my_context
+ {
+ my_context( typename base_type::context_ptr_type pContext ) :
+ pContext_( pContext )
+ {
+ }
+
+ typename base_type::context_ptr_type pContext_;
+ };
+
+ typedef state my_base;
+
+ state( my_context ctx )
+ {
+ this->set_context( ctx.pContext_ );
+ }
+
+ ~state() {}
+
+ public:
+ //////////////////////////////////////////////////////////////////////////
+ // The following declarations should be private.
+ // They are only public because many compilers lack template friends.
+ //////////////////////////////////////////////////////////////////////////
+ // See base class for documentation
+ typedef typename base_type::outermost_context_base_type
+ outermost_context_base_type;
+ typedef typename base_type::inner_context_ptr_type inner_context_ptr_type;
+ typedef typename base_type::context_ptr_type context_ptr_type;
+ typedef typename base_type::inner_initial_list inner_initial_list;
+
+ static void initial_deep_construct(
+ outermost_context_base_type & outermostContextBase )
+ {
+ deep_construct( &outermostContextBase, outermostContextBase );
+ }
+
+ // See base class for documentation
+ static void deep_construct(
+ const context_ptr_type & pContext,
+ outermost_context_base_type & outermostContextBase )
+ {
+ const inner_context_ptr_type pInnerContext(
+ shallow_construct( pContext, outermostContextBase ) );
+ base_type::template deep_construct_inner< inner_initial_list >(
+ pInnerContext, outermostContextBase );
+ }
+
+ static inner_context_ptr_type shallow_construct(
+ const context_ptr_type & pContext,
+ outermost_context_base_type & outermostContextBase )
+ {
+ const inner_context_ptr_type pInnerContext(
+ new MostDerived( my_context( pContext ) ) );
+ outermostContextBase.add( pInnerContext );
+ return pInnerContext;
+ }
+};
+
+
+
+} // namespace statechart
+} // namespace boost
+
+
+
+#endif
diff --git a/boost/boost/statechart/state_machine.hpp b/boost/boost/statechart/state_machine.hpp
new file mode 100644
index 00000000000..31596a1855c
--- /dev/null
+++ b/boost/boost/statechart/state_machine.hpp
@@ -0,0 +1,1054 @@
+#ifndef BOOST_STATECHART_STATE_MACHINE_HPP_INCLUDED
+#define BOOST_STATECHART_STATE_MACHINE_HPP_INCLUDED
+//////////////////////////////////////////////////////////////////////////////
+// Copyright 2002-2006 Andreas Huber Doenni
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+#include <boost/statechart/event.hpp>
+#include <boost/statechart/null_exception_translator.hpp>
+#include <boost/statechart/result.hpp>
+
+#include <boost/statechart/detail/rtti_policy.hpp>
+#include <boost/statechart/detail/state_base.hpp>
+#include <boost/statechart/detail/leaf_state.hpp>
+#include <boost/statechart/detail/node_state.hpp>
+#include <boost/statechart/detail/constructor.hpp>
+#include <boost/statechart/detail/avoid_unused_warning.hpp>
+
+#include <boost/mpl/list.hpp>
+#include <boost/mpl/clear.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/at.hpp>
+#include <boost/mpl/integral_c.hpp>
+#include <boost/mpl/minus.hpp>
+#include <boost/mpl/equal_to.hpp>
+
+#include <boost/intrusive_ptr.hpp>
+#include <boost/type_traits/is_pointer.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/noncopyable.hpp>
+#include <boost/assert.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/cast.hpp> // boost::polymorphic_downcast
+// BOOST_NO_EXCEPTIONS, BOOST_MSVC, BOOST_MSVC_STD_ITERATOR
+#include <boost/config.hpp>
+
+#include <boost/detail/allocator_utilities.hpp>
+
+#ifdef BOOST_MSVC
+# pragma warning( push )
+# pragma warning( disable: 4702 ) // unreachable code (in release mode only)
+#endif
+
+#include <map>
+
+#ifdef BOOST_MSVC
+# pragma warning( pop )
+#endif
+
+#include <memory> // std::allocator
+#include <typeinfo> // std::bad_cast
+#include <functional> // std::less
+#include <iterator>
+
+
+
+#ifdef BOOST_MSVC
+// We permanently turn off the following level 4 warnings because users will
+// have to do so themselves anyway if we turn them back on
+# pragma warning( disable: 4511 ) // copy constructor could not be generated
+# pragma warning( disable: 4512 ) // assignment op could not be generated
+#endif
+
+
+
+namespace boost
+{
+namespace statechart
+{
+namespace detail
+{
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+template< class StateBaseType, class EventBaseType, class IdType >
+class send_function
+{
+ public:
+ //////////////////////////////////////////////////////////////////////////
+ send_function(
+ StateBaseType & toState,
+ const EventBaseType & evt,
+ IdType eventType
+ ) :
+ toState_( toState ), evt_( evt ), eventType_( eventType )
+ {
+ }
+
+ result operator()()
+ {
+ return detail::result_utility::make_result(
+ toState_.react_impl( evt_, eventType_ ) );
+ }
+
+ private:
+ //////////////////////////////////////////////////////////////////////////
+ StateBaseType & toState_;
+ const EventBaseType & evt_;
+ IdType eventType_;
+};
+
+
+//////////////////////////////////////////////////////////////////////////////
+struct state_cast_impl_pointer_target
+{
+ public:
+ //////////////////////////////////////////////////////////////////////////
+ template< class StateBaseType >
+ static const StateBaseType * deref_if_necessary(
+ const StateBaseType * pState )
+ {
+ return pState;
+ }
+
+ template< class Target, class IdType >
+ static IdType type_id()
+ {
+ Target p = 0;
+ return type_id_impl< IdType >( p );
+ }
+
+ static bool found( const void * pFound )
+ {
+ return pFound != 0;
+ }
+
+ template< class Target >
+ static Target not_found()
+ {
+ return 0;
+ }
+
+ private:
+ //////////////////////////////////////////////////////////////////////////
+ template< class IdType, class Type >
+ static IdType type_id_impl( const Type * )
+ {
+ return Type::static_type();
+ }
+};
+
+struct state_cast_impl_reference_target
+{
+ template< class StateBaseType >
+ static const StateBaseType & deref_if_necessary(
+ const StateBaseType * pState )
+ {
+ return *pState;
+ }
+
+ template< class Target, class IdType >
+ static IdType type_id()
+ {
+ return remove_reference< Target >::type::static_type();
+ }
+
+ template< class Dummy >
+ static bool found( const Dummy & )
+ {
+ return true;
+ }
+
+ template< class Target >
+ static Target not_found()
+ {
+ throw std::bad_cast();
+ }
+};
+
+template< class Target >
+struct state_cast_impl : public mpl::if_<
+ is_pointer< Target >,
+ state_cast_impl_pointer_target,
+ state_cast_impl_reference_target
+>::type {};
+
+
+//////////////////////////////////////////////////////////////////////////////
+template< class RttiPolicy >
+class history_key
+{
+ public:
+ //////////////////////////////////////////////////////////////////////////
+ template< class HistorizedState >
+ static history_key make_history_key()
+ {
+ return history_key(
+ HistorizedState::context_type::static_type(),
+ HistorizedState::orthogonal_position::value );
+ }
+
+ typename RttiPolicy::id_type history_context_type() const
+ {
+ return historyContextType_;
+ }
+
+ friend bool operator<(
+ const history_key & left, const history_key & right )
+ {
+ return
+ std::less< typename RttiPolicy::id_type >()(
+ left.historyContextType_, right.historyContextType_ ) ||
+ ( ( left.historyContextType_ == right.historyContextType_ ) &&
+ ( left.historizedOrthogonalRegion_ <
+ right.historizedOrthogonalRegion_ ) );
+ }
+
+ private:
+ //////////////////////////////////////////////////////////////////////////
+ history_key(
+ typename RttiPolicy::id_type historyContextType,
+ orthogonal_position_type historizedOrthogonalRegion
+ ) :
+ historyContextType_( historyContextType ),
+ historizedOrthogonalRegion_( historizedOrthogonalRegion )
+ {
+ }
+
+ const typename RttiPolicy::id_type historyContextType_;
+ const orthogonal_position_type historizedOrthogonalRegion_;
+};
+
+
+
+} // namespace detail
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+template< class MostDerived,
+ class InitialState,
+ class Allocator = std::allocator< void >,
+ class ExceptionTranslator = null_exception_translator >
+class state_machine : noncopyable
+{
+ public:
+ //////////////////////////////////////////////////////////////////////////
+ typedef Allocator allocator_type;
+ typedef detail::rtti_policy rtti_policy_type;
+ typedef event_base event_base_type;
+ typedef intrusive_ptr< const event_base_type > event_base_ptr_type;
+
+ void initiate()
+ {
+ terminate();
+
+ {
+ terminator guard( *this );
+ detail::result_utility::get_result( translator_(
+ initial_construct_function( *this ),
+ exception_event_handler( *this ) ) );
+ guard.dismiss();
+ }
+
+ process_queued_events();
+ }
+
+ void terminate()
+ {
+ terminator guard( *this );
+ detail::result_utility::get_result( translator_(
+ terminate_function( *this ),
+ exception_event_handler( *this ) ) );
+ guard.dismiss();
+ }
+
+ bool terminated() const
+ {
+ return pOutermostState_ == 0;
+ }
+
+ void process_event( const event_base_type & evt )
+ {
+ send_event( evt );
+ process_queued_events();
+ }
+
+ template< class Target >
+ Target state_cast() const
+ {
+ typedef detail::state_cast_impl< Target > impl;
+
+ for ( typename state_list_type::const_iterator pCurrentLeafState =
+ currentStates_.begin();
+ pCurrentLeafState != currentStatesEnd_;
+ ++pCurrentLeafState )
+ {
+ const state_base_type * pCurrentState(
+ get_pointer( *pCurrentLeafState ) );
+
+ while ( pCurrentState != 0 )
+ {
+ // The unnecessary try/catch overhead for pointer targets is
+ // typically small compared to the cycles dynamic_cast needs
+ #ifndef BOOST_NO_EXCEPTIONS
+ try
+ #endif
+ {
+ Target result = dynamic_cast< Target >(
+ impl::deref_if_necessary( pCurrentState ) );
+
+ if ( impl::found( result ) )
+ {
+ return result;
+ }
+ }
+ #ifndef BOOST_NO_EXCEPTIONS
+ // Intentionally swallow std::bad_cast exceptions. We'll throw one
+ // ourselves when we fail to find a state that can be cast to Target
+ catch ( const std::bad_cast & ) {}
+ #endif
+
+ pCurrentState = pCurrentState->outer_state_ptr();
+ }
+ }
+
+ return impl::template not_found< Target >();
+ }
+
+ template< class Target >
+ Target state_downcast() const
+ {
+ typedef detail::state_cast_impl< Target > impl;
+
+ typename rtti_policy_type::id_type targetType =
+ impl::template type_id< Target, rtti_policy_type::id_type >();
+
+ for ( typename state_list_type::const_iterator pCurrentLeafState =
+ currentStates_.begin();
+ pCurrentLeafState != currentStatesEnd_;
+ ++pCurrentLeafState )
+ {
+ const state_base_type * pCurrentState(
+ get_pointer( *pCurrentLeafState ) );
+
+ while ( pCurrentState != 0 )
+ {
+ if ( pCurrentState->dynamic_type() == targetType )
+ {
+ return static_cast< Target >(
+ impl::deref_if_necessary( pCurrentState ) );
+ }
+
+ pCurrentState = pCurrentState->outer_state_ptr();
+ }
+ }
+
+ return impl::template not_found< Target >();
+ }
+
+ typedef detail::state_base< allocator_type, rtti_policy_type >
+ state_base_type;
+
+ class state_iterator : public std::iterator<
+ std::forward_iterator_tag,
+ state_base_type, std::ptrdiff_t
+ #ifndef BOOST_MSVC_STD_ITERATOR
+ , const state_base_type *, const state_base_type &
+ #endif
+ >
+ {
+ public:
+ //////////////////////////////////////////////////////////////////////
+ explicit state_iterator(
+ typename state_base_type::state_list_type::const_iterator
+ baseIterator
+ ) : baseIterator_( baseIterator ) {}
+
+ const state_base_type & operator*() const { return **baseIterator_; }
+ const state_base_type * operator->() const
+ {
+ return &**baseIterator_;
+ }
+
+ state_iterator & operator++() { ++baseIterator_; return *this; }
+ state_iterator operator++( int )
+ {
+ return state_iterator( baseIterator_++ );
+ }
+
+ bool operator==( const state_iterator & right ) const
+ {
+ return baseIterator_ == right.baseIterator_;
+ }
+ bool operator!=( const state_iterator & right ) const
+ {
+ return !( *this == right );
+ }
+
+ private:
+ typename state_base_type::state_list_type::const_iterator
+ baseIterator_;
+ };
+
+ state_iterator state_begin() const
+ {
+ return state_iterator( currentStates_.begin() );
+ }
+
+ state_iterator state_end() const
+ {
+ return state_iterator( currentStatesEnd_ );
+ }
+
+ void unconsumed_event( const event_base & ) {}
+
+ protected:
+ //////////////////////////////////////////////////////////////////////////
+ state_machine() :
+ currentStatesEnd_( currentStates_.end() ),
+ pOutermostState_( 0 ),
+ isInnermostCommonOuter_( false ),
+ performFullExit_( true )
+ {
+ }
+
+ // This destructor was only made virtual so that that
+ // polymorphic_downcast can be used to cast to MostDerived.
+ virtual ~state_machine()
+ {
+ terminate_impl( false );
+ }
+
+ public:
+ //////////////////////////////////////////////////////////////////////////
+ // The following declarations should be protected.
+ // They are only public because many compilers lack template friends.
+ //////////////////////////////////////////////////////////////////////////
+ void post_event( const event_base_ptr_type & pEvent )
+ {
+ BOOST_ASSERT( get_pointer( pEvent ) != 0 );
+ eventQueue_.push_back( pEvent );
+ }
+
+ void post_event( const event_base & evt )
+ {
+ post_event( evt.intrusive_from_this() );
+ }
+
+ public:
+ //////////////////////////////////////////////////////////////////////////
+ // The following declarations should be private.
+ // They are only public because many compilers lack template friends.
+ //////////////////////////////////////////////////////////////////////////
+ typedef MostDerived inner_context_type;
+ typedef mpl::integral_c< detail::orthogonal_position_type, 0 >
+ inner_orthogonal_position;
+ typedef mpl::integral_c< detail::orthogonal_position_type, 1 >
+ no_of_orthogonal_regions;
+
+ typedef MostDerived outermost_context_type;
+ typedef state_machine outermost_context_base_type;
+ typedef state_machine * inner_context_ptr_type;
+ typedef typename state_base_type::node_state_base_ptr_type
+ node_state_base_ptr_type;
+ typedef typename state_base_type::leaf_state_ptr_type leaf_state_ptr_type;
+ typedef typename state_base_type::state_list_type state_list_type;
+
+ typedef mpl::clear< mpl::list<> >::type context_type_list;
+
+ typedef mpl::bool_< false > shallow_history;
+ typedef mpl::bool_< false > deep_history;
+ typedef mpl::bool_< false > inherited_deep_history;
+
+ detail::reaction_result react_impl(
+ const event_base_type &,
+ typename rtti_policy_type::id_type )
+ {
+ return detail::do_forward_event;
+ }
+
+ void exit_impl(
+ inner_context_ptr_type &,
+ typename state_base_type::node_state_base_ptr_type &,
+ bool ) {}
+
+ void set_outermost_unstable_state(
+ typename state_base_type::node_state_base_ptr_type &
+ pOutermostUnstableState )
+ {
+ pOutermostUnstableState = 0;
+ }
+
+ // Returns a reference to the context identified by the template
+ // parameter. This can either be _this_ object or one of its direct or
+ // indirect contexts.
+ template< class Context >
+ Context & context()
+ {
+ // As we are in the outermost context here, only this object can be
+ // returned.
+ return *polymorphic_downcast< MostDerived * >( this );
+ }
+
+ template< class Context >
+ const Context & context() const
+ {
+ // As we are in the outermost context here, only this object can be
+ // returned.
+ return *polymorphic_downcast< const MostDerived * >( this );
+ }
+
+ outermost_context_type & outermost_context()
+ {
+ return *polymorphic_downcast< MostDerived * >( this );
+ }
+
+ const outermost_context_type & outermost_context() const
+ {
+ return *polymorphic_downcast< const MostDerived * >( this );
+ }
+
+ outermost_context_base_type & outermost_context_base()
+ {
+ return *this;
+ }
+
+ const outermost_context_base_type & outermost_context_base() const
+ {
+ return *this;
+ }
+
+ void terminate_as_reaction( state_base_type & theState )
+ {
+ terminate_impl( theState, performFullExit_ );
+ pOutermostUnstableState_ = 0;
+ }
+
+ void terminate_as_part_of_transit( state_base_type & theState )
+ {
+ terminate_impl( theState, performFullExit_ );
+ isInnermostCommonOuter_ = true;
+ }
+
+ void terminate_as_part_of_transit( state_machine & )
+ {
+ terminate_impl( *pOutermostState_, performFullExit_ );
+ isInnermostCommonOuter_ = true;
+ }
+
+
+ template< class State >
+ void add( const intrusive_ptr< State > & pState )
+ {
+ // The second dummy argument is necessary because the call to the
+ // overloaded function add_impl would otherwise be ambiguous.
+ node_state_base_ptr_type pNewOutermostUnstableStateCandidate =
+ add_impl( pState, *pState );
+
+ if ( isInnermostCommonOuter_ ||
+ is_in_highest_orthogonal_region< State >() &&
+ ( get_pointer( pOutermostUnstableState_ ) ==
+ pState->State::outer_state_ptr() ) )
+ {
+ isInnermostCommonOuter_ = false;
+ pOutermostUnstableState_ = pNewOutermostUnstableStateCandidate;
+ }
+ }
+
+
+ void add_inner_state(
+ detail::orthogonal_position_type position,
+ state_base_type * pOutermostState )
+ {
+ BOOST_ASSERT( position == 0 );
+ detail::avoid_unused_warning( position );
+ pOutermostState_ = pOutermostState;
+ }
+
+ void remove_inner_state( detail::orthogonal_position_type position )
+ {
+ BOOST_ASSERT( position == 0 );
+ detail::avoid_unused_warning( position );
+ pOutermostState_ = 0;
+ }
+
+
+ void defer_event(
+ const event_base_type & evt,
+ const state_base_type * pForState )
+ {
+ deferredMap_[ pForState ].push_back( evt.intrusive_from_this() );
+ }
+
+ void release_events( const state_base_type * pForState )
+ {
+ const typename deferred_map_type::iterator pFound =
+ deferredMap_.find( pForState );
+
+ // We are not guaranteed to find an entry because a state is marked for
+ // having deferred events _before_ the event is actually deferred. An
+ // exception might be thrown during deferral.
+ if ( pFound != deferredMap_.end() )
+ {
+ eventQueue_.splice( eventQueue_.end(), pFound->second );
+ deferredMap_.erase( pFound );
+ }
+ }
+
+
+ template< class HistorizedState >
+ void store_shallow_history()
+ {
+ // 5.2.10.6 declares that reinterpret_casting a function pointer to a
+ // different function pointer and back must yield the same value. The
+ // following reinterpret_cast is the first half of such a sequence.
+ store_history_impl(
+ shallowHistoryMap_,
+ history_key_type::make_history_key< HistorizedState >(),
+ reinterpret_cast< void (*)() >( &HistorizedState::deep_construct ) );
+ }
+
+ template<
+ class HistoryContext,
+ detail::orthogonal_position_type orthogonalPosition >
+ void clear_shallow_history()
+ {
+ // If you receive a
+ // "use of undefined type 'boost::STATIC_ASSERTION_FAILURE<x>'" or
+ // similar compiler error here then you tried to clear shallow history
+ // for a state that does not have shallow history. That is, the state
+ // does not pass either statechart::has_shallow_history or
+ // statechart::has_full_history to its base class template.
+ BOOST_STATIC_ASSERT( HistoryContext::shallow_history::value );
+
+ typedef typename mpl::at_c<
+ typename HistoryContext::inner_initial_list,
+ orthogonalPosition >::type historized_state;
+
+ store_history_impl(
+ shallowHistoryMap_,
+ history_key_type::make_history_key< historized_state >(),
+ 0 );
+ }
+
+ template< class DefaultState >
+ void construct_with_shallow_history(
+ const typename DefaultState::context_ptr_type & pContext )
+ {
+ construct_with_history_impl< DefaultState >(
+ shallowHistoryMap_, pContext );
+ }
+
+
+ template< class HistorizedState, class LeafState >
+ void store_deep_history()
+ {
+ typedef typename detail::make_context_list<
+ typename HistorizedState::context_type,
+ LeafState >::type history_context_list;
+ typedef detail::constructor<
+ history_context_list, outermost_context_base_type > constructor_type;
+ // 5.2.10.6 declares that reinterpret_casting a function pointer to a
+ // different function pointer and back must yield the same value. The
+ // following reinterpret_cast is the first half of such a sequence.
+ store_history_impl(
+ deepHistoryMap_,
+ history_key_type::make_history_key< HistorizedState >(),
+ reinterpret_cast< void (*)() >( &constructor_type::construct ) );
+ }
+
+ template<
+ class HistoryContext,
+ detail::orthogonal_position_type orthogonalPosition >
+ void clear_deep_history()
+ {
+ // If you receive a
+ // "use of undefined type 'boost::STATIC_ASSERTION_FAILURE<x>'" or
+ // similar compiler error here then you tried to clear deep history for
+ // a state that does not have deep history. That is, the state does not
+ // pass either statechart::has_deep_history or
+ // statechart::has_full_history to its base class template
+ BOOST_STATIC_ASSERT( HistoryContext::deep_history::value );
+
+ typedef typename mpl::at_c<
+ typename HistoryContext::inner_initial_list,
+ orthogonalPosition >::type historized_state;
+
+ store_history_impl(
+ deepHistoryMap_,
+ history_key_type::make_history_key< historized_state >(),
+ 0 );
+ }
+
+ template< class DefaultState >
+ void construct_with_deep_history(
+ const typename DefaultState::context_ptr_type & pContext )
+ {
+ construct_with_history_impl< DefaultState >(
+ deepHistoryMap_, pContext );
+ }
+
+ private: // implementation
+ //////////////////////////////////////////////////////////////////////////
+ void initial_construct()
+ {
+ InitialState::initial_deep_construct(
+ *polymorphic_downcast< MostDerived * >( this ) );
+ }
+
+ class initial_construct_function
+ {
+ public:
+ //////////////////////////////////////////////////////////////////////
+ initial_construct_function( state_machine & machine ) :
+ machine_( machine )
+ {
+ }
+
+ result operator()()
+ {
+ machine_.initial_construct();
+ return detail::result_utility::make_result(
+ detail::do_discard_event ); // there is nothing to be consumed
+ }
+
+ private:
+ //////////////////////////////////////////////////////////////////////
+ state_machine & machine_;
+ };
+ friend class initial_construct_function;
+
+ class terminate_function
+ {
+ public:
+ //////////////////////////////////////////////////////////////////////
+ terminate_function( state_machine & machine ) : machine_( machine ) {}
+
+ result operator()()
+ {
+ machine_.terminate_impl( true );
+ return detail::result_utility::make_result(
+ detail::do_discard_event ); // there is nothing to be consumed
+ }
+
+ private:
+ //////////////////////////////////////////////////////////////////////
+ state_machine & machine_;
+ };
+ friend class terminate_function;
+
+ template< class ExceptionEvent >
+ detail::reaction_result handle_exception_event(
+ const ExceptionEvent & exceptionEvent,
+ state_base_type * pCurrentState )
+ {
+ if ( terminated() )
+ {
+ // there is no state that could handle the exception -> bail out
+ throw;
+ }
+
+ // If we are stable, an event handler has thrown.
+ // Otherwise, either a state constructor, a transition action or an exit
+ // function has thrown and the state machine is now in an invalid state.
+ // This situation can be resolved by the exception event handler
+ // function by orderly transiting to another state or terminating.
+ // As a result of this, the machine must not be unstable when this
+ // function is left.
+ state_base_type * const pOutermostUnstableState =
+ get_pointer( pOutermostUnstableState_ );
+ state_base_type * const pHandlingState = pOutermostUnstableState == 0 ?
+ pCurrentState : pOutermostUnstableState;
+
+ BOOST_ASSERT( pHandlingState != 0 );
+
+ // Setting a member variable to a special value for the duration of a
+ // call surely looks like a kludge (normally it should be a parameter of
+ // the call). However, in this case it is unavoidable because the call
+ // below could result in a call to user code where passing through an
+ // additional bool parameter is not acceptable.
+ performFullExit_ = false;
+ const detail::reaction_result reactionResult = pHandlingState->react_impl(
+ exceptionEvent, exceptionEvent.dynamic_type() );
+ // If the above call throws then performFullExit_ will obviously not be
+ // set back to true. In this case the termination triggered by the
+ // scope guard further up in the call stack will take care of this.
+ performFullExit_ = true;
+
+ if ( ( reactionResult != detail::do_discard_event ) ||
+ ( get_pointer( pOutermostUnstableState_ ) != 0 ) )
+ {
+ throw;
+ }
+
+ return detail::do_discard_event;
+ }
+
+ class exception_event_handler
+ {
+ public:
+ //////////////////////////////////////////////////////////////////////
+ exception_event_handler(
+ state_machine & machine,
+ state_base_type * pCurrentState = 0
+ ) :
+ machine_( machine ),
+ pCurrentState_( pCurrentState )
+ {
+ }
+
+ template< class ExceptionEvent >
+ result operator()(
+ const ExceptionEvent & exceptionEvent )
+ {
+ return detail::result_utility::make_result(
+ machine_.handle_exception_event(
+ exceptionEvent, pCurrentState_ ) );
+ }
+
+ private:
+ //////////////////////////////////////////////////////////////////////
+ state_machine & machine_;
+ state_base_type * pCurrentState_;
+ };
+ friend class exception_event_handler;
+
+ class terminator
+ {
+ public:
+ terminator( state_machine & machine ) :
+ machine_( machine ), dismissed_( false ) {}
+ ~terminator()
+ {
+ if ( !dismissed_ ) { machine_.terminate_impl( false ); }
+ }
+ void dismiss() { dismissed_ = true; }
+
+ private:
+ state_machine & machine_;
+ bool dismissed_;
+ };
+ friend class terminator;
+
+
+ void send_event( const event_base_type & evt )
+ {
+ terminator guard( *this );
+ BOOST_ASSERT( get_pointer( pOutermostUnstableState_ ) == 0 );
+ const typename rtti_policy_type::id_type eventType = evt.dynamic_type();
+ detail::reaction_result reactionResult = detail::do_forward_event;
+
+ for (
+ typename state_list_type::iterator pState = currentStates_.begin();
+ ( reactionResult == detail::do_forward_event ) &&
+ ( pState != currentStatesEnd_ );
+ ++pState )
+ {
+ // CAUTION: The following statement could modify our state list!
+ // We must not continue iterating if the event was consumed
+ reactionResult = detail::result_utility::get_result( translator_(
+ detail::send_function<
+ state_base_type, event_base_type, rtti_policy_type::id_type >(
+ **pState, evt, eventType ),
+ exception_event_handler( *this, get_pointer( *pState ) ) ) );
+ }
+
+ guard.dismiss();
+
+ if ( reactionResult == detail::do_forward_event )
+ {
+ polymorphic_downcast< MostDerived * >( this )->unconsumed_event( evt );
+ }
+ }
+
+
+ void process_queued_events()
+ {
+ while ( !eventQueue_.empty() )
+ {
+ const event_base_ptr_type pCurrentEvent( eventQueue_.front() );
+ eventQueue_.pop_front();
+ send_event( *pCurrentEvent );
+ }
+ }
+
+
+ void terminate_impl( bool performFullExit )
+ {
+ performFullExit_ = true;
+
+ if ( !terminated() )
+ {
+ // this also empties deferredMap_
+ terminate_impl( *pOutermostState_, performFullExit );
+ }
+
+ eventQueue_.clear();
+ shallowHistoryMap_.clear();
+ deepHistoryMap_.clear();
+ }
+
+ void terminate_impl( state_base_type & theState, bool performFullExit )
+ {
+ isInnermostCommonOuter_ = false;
+
+ // If pOutermostUnstableState_ == 0, we know for sure that
+ // currentStates_.size() > 0, otherwise theState couldn't be alive any
+ // more
+ if ( get_pointer( pOutermostUnstableState_ ) != 0 )
+ {
+ theState.remove_from_state_list(
+ currentStatesEnd_, pOutermostUnstableState_, performFullExit );
+ }
+ // Optimization: We want to find out whether currentStates_ has size 1
+ // and if yes use the optimized implementation below. Since
+ // list<>::size() is implemented quite inefficiently in some std libs
+ // it is best to just decrement the currentStatesEnd_ here and
+ // increment it again, if the test failed.
+ else if ( currentStates_.begin() == --currentStatesEnd_ )
+ {
+ // The machine is stable and there is exactly one innermost state.
+ // The following optimization is only correct for a stable machine
+ // without orthogonal regions.
+ leaf_state_ptr_type & pState = *currentStatesEnd_;
+ pState->exit_impl(
+ pState, pOutermostUnstableState_, performFullExit );
+ }
+ else
+ {
+ BOOST_ASSERT( currentStates_.size() > 1 );
+ // The machine is stable and there are multiple innermost states
+ theState.remove_from_state_list(
+ ++currentStatesEnd_, pOutermostUnstableState_, performFullExit );
+ }
+ }
+
+
+ node_state_base_ptr_type add_impl(
+ const leaf_state_ptr_type & pState,
+ detail::leaf_state< allocator_type, rtti_policy_type > & )
+ {
+ if ( currentStatesEnd_ == currentStates_.end() )
+ {
+ pState->set_list_position(
+ currentStates_.insert( currentStatesEnd_, pState ) );
+ }
+ else
+ {
+ *currentStatesEnd_ = pState;
+ pState->set_list_position( currentStatesEnd_ );
+ ++currentStatesEnd_;
+ }
+
+ return 0;
+ }
+
+ node_state_base_ptr_type add_impl(
+ const node_state_base_ptr_type & pState,
+ state_base_type & )
+ {
+ return pState;
+ }
+
+ template< class State >
+ static bool is_in_highest_orthogonal_region()
+ {
+ return mpl::equal_to<
+ typename State::orthogonal_position,
+ mpl::minus<
+ typename State::context_type::no_of_orthogonal_regions,
+ mpl::integral_c< detail::orthogonal_position_type, 1 > >
+ >::value;
+ }
+
+
+ typedef detail::history_key< rtti_policy_type > history_key_type;
+
+ typedef std::map<
+ history_key_type, void (*)(),
+ std::less< history_key_type >,
+ typename boost::detail::allocator::rebind_to<
+ allocator_type, std::pair< const history_key_type, void (*)() >
+ >::type
+ > history_map_type;
+
+ void store_history_impl(
+ history_map_type & historyMap,
+ const history_key_type & historyId,
+ void (*pConstructFunction)() )
+ {
+ historyMap[ historyId ] = pConstructFunction;
+ }
+
+ template< class DefaultState >
+ void construct_with_history_impl(
+ history_map_type & historyMap,
+ const typename DefaultState::context_ptr_type & pContext )
+ {
+ typename history_map_type::iterator pFoundSlot = historyMap.find(
+ history_key_type::make_history_key< DefaultState >() );
+
+ if ( ( pFoundSlot == historyMap.end() ) || ( pFoundSlot->second == 0 ) )
+ {
+ // We have never entered this state before or history was cleared
+ DefaultState::deep_construct(
+ pContext, *polymorphic_downcast< MostDerived * >( this ) );
+ }
+ else
+ {
+ typedef void construct_function(
+ const typename DefaultState::context_ptr_type &,
+ typename DefaultState::outermost_context_base_type & );
+ // 5.2.10.6 declares that reinterpret_casting a function pointer to a
+ // different function pointer and back must yield the same value. The
+ // following reinterpret_cast is the second half of such a sequence.
+ construct_function * const pConstructFunction =
+ reinterpret_cast< construct_function * >( pFoundSlot->second );
+ (*pConstructFunction)(
+ pContext, *polymorphic_downcast< MostDerived * >( this ) );
+ }
+ }
+
+ typedef std::list<
+ event_base_ptr_type,
+ typename boost::detail::allocator::rebind_to<
+ allocator_type, event_base_ptr_type >::type
+ > event_queue_type;
+
+ typedef std::map<
+ const state_base_type *, event_queue_type,
+ std::less< const state_base_type * >,
+ typename boost::detail::allocator::rebind_to<
+ allocator_type,
+ std::pair< const state_base_type * const, event_queue_type >
+ >::type
+ > deferred_map_type;
+
+
+ event_queue_type eventQueue_;
+ deferred_map_type deferredMap_;
+ state_list_type currentStates_;
+ typename state_list_type::iterator currentStatesEnd_;
+ state_base_type * pOutermostState_;
+ bool isInnermostCommonOuter_;
+ node_state_base_ptr_type pOutermostUnstableState_;
+ ExceptionTranslator translator_;
+ bool performFullExit_;
+ history_map_type shallowHistoryMap_;
+ history_map_type deepHistoryMap_;
+};
+
+
+
+} // namespace statechart
+} // namespace boost
+
+
+
+#endif
diff --git a/boost/boost/statechart/termination.hpp b/boost/boost/statechart/termination.hpp
new file mode 100644
index 00000000000..f740e9235b8
--- /dev/null
+++ b/boost/boost/statechart/termination.hpp
@@ -0,0 +1,71 @@
+#ifndef BOOST_STATECHART_TERMINATION_HPP_INCLUDED
+#define BOOST_STATECHART_TERMINATION_HPP_INCLUDED
+//////////////////////////////////////////////////////////////////////////////
+// Copyright 2002-2006 Andreas Huber Doenni
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+#include <boost/statechart/result.hpp>
+
+
+
+namespace boost
+{
+namespace statechart
+{
+
+
+
+class event_base;
+
+//////////////////////////////////////////////////////////////////////////////
+template< class Event >
+class termination
+{
+ public:
+ //////////////////////////////////////////////////////////////////////////
+ // The following declarations should be private.
+ // They are only public because many compilers lack template friends.
+ //////////////////////////////////////////////////////////////////////////
+ template< class State, class EventBase, class IdType >
+ static detail::reaction_result react(
+ State & stt, const EventBase &, const IdType & eventType )
+ {
+ if ( eventType == Event::static_type() )
+ {
+ return detail::result_utility::get_result( stt.terminate() );
+ }
+ else
+ {
+ return detail::no_reaction;
+ }
+ }
+};
+
+template<>
+class termination< event_base >
+{
+ public:
+ //////////////////////////////////////////////////////////////////////////
+ // The following declarations should be private.
+ // They are only public because many compilers lack template friends.
+ //////////////////////////////////////////////////////////////////////////
+ template< class State, class EventBase, class IdType >
+ static detail::reaction_result react(
+ State & stt, const EventBase &, const IdType & )
+ {
+ return detail::result_utility::get_result( stt.terminate() );
+ }
+};
+
+
+
+} // namespace statechart
+} // namespace boost
+
+
+
+#endif
diff --git a/boost/boost/statechart/transition.hpp b/boost/boost/statechart/transition.hpp
new file mode 100644
index 00000000000..0cad99d027d
--- /dev/null
+++ b/boost/boost/statechart/transition.hpp
@@ -0,0 +1,148 @@
+#ifndef BOOST_STATECHART_TRANSITION_HPP_INCLUDED
+#define BOOST_STATECHART_TRANSITION_HPP_INCLUDED
+//////////////////////////////////////////////////////////////////////////////
+// Copyright 2002-2006 Andreas Huber Doenni
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+#include <boost/statechart/result.hpp>
+
+#include <boost/mpl/if.hpp>
+
+#include <boost/cast.hpp> // boost::polymorphic_downcast
+#include <boost/type_traits/is_same.hpp>
+
+
+
+namespace boost
+{
+namespace statechart
+{
+namespace detail
+{
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+template< class Event >
+struct no_context
+{
+ void no_function( const Event & );
+};
+
+
+
+} // namespace detail
+
+
+
+class event_base;
+
+//////////////////////////////////////////////////////////////////////////////
+template< class Event, class Destination,
+ class TransitionContext = detail::no_context< Event >,
+ void ( TransitionContext::*pTransitionAction )( const Event & ) =
+ &detail::no_context< Event >::no_function >
+class transition
+{
+ private:
+ //////////////////////////////////////////////////////////////////////////
+ struct react_without_transition_action_impl
+ {
+ template< class State, class EventBase >
+ static detail::reaction_result react( State & stt, const EventBase & )
+ {
+ return detail::result_utility::get_result(
+ stt.template transit< Destination >() );
+ }
+ };
+
+ struct react_base_with_transition_action_impl
+ {
+ template< class State, class EventBase >
+ static detail::reaction_result react(
+ State & stt, const EventBase & toEvent )
+ {
+ return detail::result_utility::get_result(
+ stt.template transit< Destination >( pTransitionAction, toEvent ) );
+ }
+ };
+
+ struct react_base
+ {
+ template< class State, class EventBase, class IdType >
+ static detail::reaction_result react(
+ State & stt, const EventBase & evt, const IdType & )
+ {
+ typedef typename mpl::if_<
+ is_same< TransitionContext, detail::no_context< Event > >,
+ react_without_transition_action_impl,
+ react_base_with_transition_action_impl
+ >::type impl;
+ return impl::react( stt, evt );
+ }
+ };
+
+ struct react_derived_with_transition_action_impl
+ {
+ template< class State, class EventBase >
+ static detail::reaction_result react(
+ State & stt, const EventBase & toEvent )
+ {
+ return detail::result_utility::get_result(
+ stt.template transit< Destination >(
+ pTransitionAction,
+ *polymorphic_downcast< const Event * >( &toEvent ) ) );
+ }
+ };
+
+ struct react_derived
+ {
+ template< class State, class EventBase, class IdType >
+ static detail::reaction_result react(
+ State & stt, const EventBase & evt, const IdType & eventType )
+ {
+ if ( eventType == Event::static_type() )
+ {
+ typedef typename mpl::if_<
+ is_same< TransitionContext, detail::no_context< Event > >,
+ react_without_transition_action_impl,
+ react_derived_with_transition_action_impl
+ >::type impl;
+ return impl::react( stt, evt );
+ }
+ else
+ {
+ return detail::no_reaction;
+ }
+ }
+ };
+
+ public:
+ //////////////////////////////////////////////////////////////////////////
+ // The following declarations should be private.
+ // They are only public because many compilers lack template friends.
+ //////////////////////////////////////////////////////////////////////////
+ template< class State, class EventBase, class IdType >
+ static detail::reaction_result react(
+ State & stt, const EventBase & evt, const IdType & eventType )
+ {
+ typedef typename mpl::if_<
+ is_same< Event, event_base >, react_base, react_derived
+ >::type impl;
+
+ return impl::react( stt, evt, eventType );
+ }
+};
+
+
+
+} // namespace statechart
+} // namespace boost
+
+
+
+#endif
diff --git a/boost/boost/static_assert.hpp b/boost/boost/static_assert.hpp
new file mode 100644
index 00000000000..9d24c056478
--- /dev/null
+++ b/boost/boost/static_assert.hpp
@@ -0,0 +1,118 @@
+// (C) Copyright John Maddock 2000.
+// 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)
+
+// See http://www.boost.org/libs/static_assert for documentation.
+
+/*
+ Revision history:
+ 02 August 2000
+ Initial version.
+*/
+
+#ifndef BOOST_STATIC_ASSERT_HPP
+#define BOOST_STATIC_ASSERT_HPP
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+#ifdef __BORLANDC__
+//
+// workaround for buggy integral-constant expression support:
+#define BOOST_BUGGY_INTEGRAL_CONSTANT_EXPRESSIONS
+#endif
+
+#if defined(__GNUC__) && (__GNUC__ == 3) && ((__GNUC_MINOR__ == 3) || (__GNUC_MINOR__ == 4))
+// gcc 3.3 and 3.4 don't produce good error messages with the default version:
+# define BOOST_SA_GCC_WORKAROUND
+#endif
+
+namespace boost{
+
+// HP aCC cannot deal with missing names for template value parameters
+template <bool x> struct STATIC_ASSERTION_FAILURE;
+
+template <> struct STATIC_ASSERTION_FAILURE<true> { enum { value = 1 }; };
+
+// HP aCC cannot deal with missing names for template value parameters
+template<int x> struct static_assert_test{};
+
+}
+
+//
+// Implicit instantiation requires that all member declarations be
+// instantiated, but that the definitions are *not* instantiated.
+//
+// It's not particularly clear how this applies to enum's or typedefs;
+// both are described as declarations [7.1.3] and [7.2] in the standard,
+// however some compilers use "delayed evaluation" of one or more of
+// these when implicitly instantiating templates. We use typedef declarations
+// by default, but try defining BOOST_USE_ENUM_STATIC_ASSERT if the enum
+// version gets better results from your compiler...
+//
+// Implementation:
+// Both of these versions rely on sizeof(incomplete_type) generating an error
+// message containing the name of the incomplete type. We use
+// "STATIC_ASSERTION_FAILURE" as the type name here to generate
+// an eye catching error message. The result of the sizeof expression is either
+// used as an enum initialiser, or as a template argument depending which version
+// is in use...
+// Note that the argument to the assert is explicitly cast to bool using old-
+// style casts: too many compilers currently have problems with static_cast
+// when used inside integral constant expressions.
+//
+#if !defined(BOOST_BUGGY_INTEGRAL_CONSTANT_EXPRESSIONS)
+
+#if defined(BOOST_MSVC) && (BOOST_MSVC < 1300)
+// __LINE__ macro broken when -ZI is used see Q199057
+// fortunately MSVC ignores duplicate typedef's.
+#define BOOST_STATIC_ASSERT( B ) \
+ typedef ::boost::static_assert_test<\
+ sizeof(::boost::STATIC_ASSERTION_FAILURE< (bool)( B ) >)\
+ > boost_static_assert_typedef_
+#elif defined(BOOST_MSVC)
+#define BOOST_STATIC_ASSERT( B ) \
+ typedef ::boost::static_assert_test<\
+ sizeof(::boost::STATIC_ASSERTION_FAILURE< (bool)( B ) >)>\
+ BOOST_JOIN(boost_static_assert_typedef_, __COUNTER__)
+#elif defined(BOOST_INTEL_CXX_VERSION) || defined(BOOST_SA_GCC_WORKAROUND)
+// agurt 15/sep/02: a special care is needed to force Intel C++ issue an error
+// instead of warning in case of failure
+# define BOOST_STATIC_ASSERT( B ) \
+ typedef char BOOST_JOIN(boost_static_assert_typedef_, __LINE__) \
+ [ ::boost::STATIC_ASSERTION_FAILURE< (bool)( B ) >::value ]
+#elif defined(__sgi)
+// special version for SGI MIPSpro compiler
+#define BOOST_STATIC_ASSERT( B ) \
+ BOOST_STATIC_CONSTANT(bool, \
+ BOOST_JOIN(boost_static_assert_test_, __LINE__) = ( B )); \
+ typedef ::boost::static_assert_test<\
+ sizeof(::boost::STATIC_ASSERTION_FAILURE< \
+ BOOST_JOIN(boost_static_assert_test_, __LINE__) >)>\
+ BOOST_JOIN(boost_static_assert_typedef_, __LINE__)
+#elif BOOST_WORKAROUND(__MWERKS__, <= 0x3003)
+// special version for CodeWarrior <= 8.x
+#define BOOST_STATIC_ASSERT( B ) \
+ BOOST_STATIC_CONSTANT(int, \
+ BOOST_JOIN(boost_static_assert_test_, __LINE__) = \
+ sizeof(::boost::STATIC_ASSERTION_FAILURE< (bool)( B ) >) )
+#else
+// generic version
+#define BOOST_STATIC_ASSERT( B ) \
+ typedef ::boost::static_assert_test<\
+ sizeof(::boost::STATIC_ASSERTION_FAILURE< (bool)( B ) >)>\
+ BOOST_JOIN(boost_static_assert_typedef_, __LINE__)
+#endif
+
+#else
+// alternative enum based implementation:
+#define BOOST_STATIC_ASSERT( B ) \
+ enum { BOOST_JOIN(boost_static_assert_enum_, __LINE__) \
+ = sizeof(::boost::STATIC_ASSERTION_FAILURE< (bool)( B ) >) }
+#endif
+
+
+#endif // BOOST_STATIC_ASSERT_HPP
+
+
diff --git a/boost/boost/static_warning.hpp b/boost/boost/static_warning.hpp
new file mode 100644
index 00000000000..24a662a6438
--- /dev/null
+++ b/boost/boost/static_warning.hpp
@@ -0,0 +1,180 @@
+#ifndef BOOST_STATIC_WARNING_HPP
+#define BOOST_STATIC_WARNING_HPP
+
+// (C) Copyright Robert Ramey 2003. Jonathan Turkanis 2004.
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// See http://www.boost.org/libs/static_assert for documentation.
+
+/*
+ Revision history:
+ 15 June 2003 - Initial version.
+ 31 March 2004 - improved diagnostic messages and portability
+ (Jonathan Turkanis)
+ 03 April 2004 - works on VC6 at class and namespace scope
+ - ported to DigitalMars
+ - static warnings disabled by default; when enabled,
+ uses pragmas to enable required compiler warnings
+ on MSVC, Intel, Metrowerks and Borland 5.x.
+ (Jonathan Turkanis)
+ 30 May 2004 - tweaked for msvc 7.1 and gcc 3.3
+ - static warnings ENabled by default; when enabled,
+ (Robert Ramey)
+*/
+
+#include <boost/config.hpp>
+
+//
+// Implementation
+// Makes use of the following warnings:
+// 1. GCC prior to 3.3: division by zero.
+// 2. BCC 6.0 preview: unreferenced local variable.
+// 3. DigitalMars: returning address of local automatic variable.
+// 4. VC6: class previously seen as struct (as in 'boost/mpl/print.hpp')
+// 5. All others: deletion of pointer to incomplete type.
+//
+// The trick is to find code which produces warnings containing the name of
+// a structure or variable. Details, with same numbering as above:
+// 1. static_warning_impl<B>::value is zero iff B is false, so diving an int
+// by this value generates a warning iff B is false.
+// 2. static_warning_impl<B>::type has a constructor iff B is true, so an
+// unreferenced variable of this type generates a warning iff B is false.
+// 3. static_warning_impl<B>::type overloads operator& to return a dynamically
+// allocated int pointer only is B is true, so returning the address of an
+// automatic variable of this type generates a warning iff B is fasle.
+// 4. static_warning_impl<B>::STATIC_WARNING is decalred as a struct iff B is
+// false.
+// 5. static_warning_impl<B>::type is incomplete iff B is false, so deleting a
+// pointer to this type generates a warning iff B is false.
+//
+
+//------------------Enable selected warnings----------------------------------//
+
+// Enable the warnings relied on by BOOST_STATIC_WARNING, where possible. The
+// only pragma which is absolutely necessary here is for Borland 5.x, since
+// W8073 is disabled by default. If enabling selected warnings is considered
+// unacceptable, this section can be replaced with:
+// #if defined(__BORLANDC__) && (__BORLANDC__ <= 0x600)
+// pragma warn +stu
+// #endif
+
+# if defined(BOOST_MSVC)
+# pragma warning(2:4150) // C4150: deletion of pointer to incomplete type 'type'.
+# elif defined(BOOST_INTEL) && (defined(__WIN32__) || defined(WIN32))
+# pragma warning(2:457) // #457: delete of pointer to incomplete class.
+# elif defined(__BORLANDC__) && (__BORLANDC__ <= 0x600)
+# pragma warn +stu // W8073: Undefined structure 'structure'.
+# elif defined(__MWERKS__)
+# pragma extended_errorcheck on // Enable 'extended error checking'.
+# endif
+
+//------------------Configure-------------------------------------------------//
+
+# if defined(__BORLANDC__) && (__BORLANDC__ >= 0x600)
+# define BOOST_HAS_DESCRIPTIVE_UNREFERENCED_VARIABLE_WARNING
+# elif defined(__GNUC__) && !defined(BOOST_INTEL) // && (__GNUC__ * 100 + __GNUC_MINOR__ <= 302)
+# define BOOST_HAS_DESCRIPTIVE_DIVIDE_BY_ZERO_WARNING
+# elif defined(__DMC__)
+# define BOOST_HAS_DESCRIPTIVE_RETURNING_ADDRESS_OF_TEMPORARY_WARNING
+# elif defined(BOOST_MSVC) // && (BOOST_MSVC < 1300)
+# define BOOST_NO_PREDEFINED_LINE_MACRO
+# pragma warning(disable:4094) // C4094: untagged 'stuct' declared no symbols
+#endif
+
+//------------------Helper templates------------------------------------------//
+
+namespace boost {
+
+struct STATIC_WARNING;
+
+template<bool>
+struct static_warning_impl;
+
+template<>
+struct static_warning_impl<false> {
+ enum { value = 0 };
+ #if !defined(BOOST_HAS_DESCRIPTIVE_UNREFERENCED_VARIABLE_WARNING) && \
+ !defined(BOOST_HAS_DESCRIPTIVE_RETURNING_ADDRESS_OF_TEMPORARY_WARNING)
+ typedef boost::STATIC_WARNING type;
+ #else
+ typedef int type;
+ #endif
+ #if defined(BOOST_NO_PREDEFINED_LINE_MACRO)
+ struct STATIC_WARNING { };
+ #endif
+};
+
+template<>
+struct static_warning_impl<true> {
+ enum { value = 1 };
+ struct type { type() { } int* operator&() { return new int; } };
+ #if defined(BOOST_NO_PREDEFINED_LINE_MACRO)
+ class STATIC_WARNING { };
+ #endif
+};
+
+} // namespace boost
+
+//------------------Definition of BOOST_STATIC_WARNING------------------------//
+
+#if defined(BOOST_HAS_DESCRIPTIVE_UNREFERENCED_VARIABLE_WARNING)
+# define BOOST_STATIC_WARNING_IMPL(B) \
+ struct BOOST_JOIN(STATIC_WARNING, __LINE__) { \
+ void f() { \
+ ::boost::static_warning_impl<(bool)( B )>::type \
+ STATIC_WARNING; \
+ } \
+ } \
+ /**/
+#elif defined(BOOST_HAS_DESCRIPTIVE_RETURNING_ADDRESS_OF_TEMPORARY_WARNING)
+# define BOOST_STATIC_WARNING_IMPL(B) \
+ struct BOOST_JOIN(STATIC_WARNING, __LINE__) { \
+ int* f() { \
+ ::boost::static_warning_impl<(bool)( B )>::type \
+ STATIC_WARNING; \
+ return &STATIC_WARNING; \
+ } \
+ } \
+ /**/
+#elif defined(BOOST_HAS_DESCRIPTIVE_DIVIDE_BY_ZERO_WARNING)
+# define BOOST_STATIC_WARNING_IMPL(B) \
+ struct BOOST_JOIN(STATIC_WARNING, __LINE__) { \
+ int f() { int STATIC_WARNING = 1; \
+ return STATIC_WARNING / \
+ boost::static_warning_impl<(bool)( B )>::value; } \
+ } \
+ /**/
+#elif defined(BOOST_NO_PREDEFINED_LINE_MACRO)
+ // VC6; __LINE__ macro broken when -ZI is used see Q199057, so
+ // non-conforming workaround is used.
+# define BOOST_STATIC_WARNING_IMPL(B) \
+ struct { \
+ struct S { \
+ typedef boost::static_warning_impl<(bool)( B )> f; \
+ friend class f::STATIC_WARNING; \
+ }; \
+ } \
+ /**/
+#else // Deletion of pointer to incomplete type.
+# define BOOST_STATIC_WARNING_IMPL(B) \
+ struct BOOST_JOIN(STATIC_WARNING, __LINE__) { \
+ ::boost::static_warning_impl<(bool)( B )>::type* p; \
+ void f() { delete p; } \
+ } \
+ /**/
+#endif
+
+#ifndef BOOST_DISABLE_STATIC_WARNINGS
+# define BOOST_STATIC_WARNING(B) BOOST_STATIC_WARNING_IMPL(B)
+#else // #ifdef BOOST_ENABLE_STATIC_WARNINGS //-------------------------------//
+# define BOOST_STATIC_WARNING(B) BOOST_STATIC_WARNING_IMPL(true)
+#endif
+
+#endif // BOOST_STATIC_WARNING_HPP
diff --git a/boost/boost/strong_typedef.hpp b/boost/boost/strong_typedef.hpp
new file mode 100644
index 00000000000..e1f351671d4
--- /dev/null
+++ b/boost/boost/strong_typedef.hpp
@@ -0,0 +1,45 @@
+#ifndef BOOST_STRONG_TYPEDEF_HPP
+#define BOOST_STRONG_TYPEDEF_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// strong_typedef.hpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is 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)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+// macro used to implement a strong typedef. strong typedef
+// guarentees that two types are distinguised even though the
+// share the same underlying implementation. typedef does not create
+// a new type. BOOST_STRONG_TYPEDEF(T, D) creates a new type named D
+// that operates as a type T.
+
+#include <boost/operators.hpp>
+
+#define BOOST_STRONG_TYPEDEF(T, D) \
+struct D \
+ : boost::totally_ordered1< D \
+ , boost::totally_ordered2< D, T \
+ > > \
+{ \
+ T t; \
+ explicit D(const T t_) : t(t_) {}; \
+ D(){}; \
+ D(const D & t_) : t(t_.t){} \
+ D & operator=(const D & rhs) { t = rhs.t; return *this;} \
+ D & operator=(const T & rhs) { t = rhs; return *this;} \
+ operator const T & () const {return t; } \
+ operator T & () { return t; } \
+ bool operator==(const D & rhs) const { return t == rhs.t; } \
+ bool operator<(const D & rhs) const { return t < rhs.t; } \
+};
+
+#endif // BOOST_STRONG_TYPEDEF_HPP
diff --git a/boost/boost/test/auto_unit_test.hpp b/boost/boost/test/auto_unit_test.hpp
new file mode 100644
index 00000000000..e41e074a1c3
--- /dev/null
+++ b/boost/boost/test/auto_unit_test.hpp
@@ -0,0 +1,30 @@
+// (C) Copyright Gennadiy Rozental 2001-2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: auto_unit_test.hpp,v $
+//
+// Version : $Revision: 1.18 $
+//
+// Description : deprecated
+// ***************************************************************************
+
+#ifndef BOOST_TEST_AUTO_UNIT_TEST_HPP_071894GER
+#define BOOST_TEST_AUTO_UNIT_TEST_HPP_071894GER
+
+#include <boost/test/unit_test.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: auto_unit_test.hpp,v $
+// Revision 1.18 2005/12/14 05:03:11 rogeeff
+// depreicated
+//
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_AUTO_UNIT_TEST_HPP_071894GER
diff --git a/boost/boost/test/detail/config.hpp b/boost/boost/test/detail/config.hpp
new file mode 100644
index 00000000000..87b698283c4
--- /dev/null
+++ b/boost/boost/test/detail/config.hpp
@@ -0,0 +1,146 @@
+// (C) Copyright Gennadiy Rozental 2001-2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: config.hpp,v $
+//
+// Version : $Revision: 1.5 $
+//
+// Description : as a central place for global configuration switches
+// ***************************************************************************
+
+#ifndef BOOST_TEST_CONFIG_HPP_071894GER
+#define BOOST_TEST_CONFIG_HPP_071894GER
+
+// Boost
+#include <boost/config.hpp> // compilers workarounds
+#include <boost/detail/workaround.hpp>
+
+#if BOOST_WORKAROUND(__GNUC__, < 3) && !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION)
+# define BOOST_CLASSIC_IOSTREAMS
+#else
+# define BOOST_STANDARD_IOSTREAMS
+#endif
+
+//____________________________________________________________________________//
+
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x570)) || \
+ BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600)) || \
+ (defined __sgi && BOOST_WORKAROUND(_COMPILER_VERSION, BOOST_TESTED_AT(730)))
+# define BOOST_TEST_SHIFTED_LINE
+#endif
+
+//____________________________________________________________________________//
+
+#if defined(BOOST_MSVC) || (defined(__BORLANDC__) && !defined(BOOST_DISABLE_WIN32))
+# define BOOST_TEST_CALL_DECL __cdecl
+#else
+# define BOOST_TEST_CALL_DECL /**/
+#endif
+
+//____________________________________________________________________________//
+
+#if defined(BOOST_HAS_SIGACTION)
+# define BOOST_TEST_SUPPORT_TIMEOUT
+#endif
+
+//____________________________________________________________________________//
+
+#if BOOST_WORKAROUND(__BORLANDC__, <= 0x570) || \
+ BOOST_WORKAROUND( __COMO__, <= 0x433 ) || \
+ BOOST_WORKAROUND( __INTEL_COMPILER, <= 800 ) || \
+ BOOST_WORKAROUND(__GNUC__, < 3) || \
+ defined(__sgi) && _COMPILER_VERSION <= 730 || \
+ BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600)) || \
+ defined(__DECCXX) || \
+ defined(__DMC__)
+# define BOOST_TEST_NO_PROTECTED_USING
+#endif
+
+//____________________________________________________________________________//
+
+#ifdef __GNUC__
+#define BOOST_TEST_PROTECTED_VIRTUAL virtual
+#else
+#define BOOST_TEST_PROTECTED_VIRTUAL
+#endif
+
+//____________________________________________________________________________//
+
+#if defined(BOOST_ALL_DYN_LINK) && !defined(BOOST_TEST_DYN_LINK)
+# define BOOST_TEST_DYN_LINK
+#endif
+
+#if defined(BOOST_TEST_INCLUDED)
+# undef BOOST_TEST_DYN_LINK
+#endif
+
+#if defined(BOOST_TEST_DYN_LINK)
+# define BOOST_TEST_ALTERNATIVE_INIT_API
+
+# if defined(BOOST_HAS_DECLSPEC) && defined(BOOST_TEST_DYN_LINK)
+# ifdef BOOST_TEST_SOURCE
+# define BOOST_TEST_DECL __declspec(dllexport)
+# else
+# define BOOST_TEST_DECL __declspec(dllimport)
+# endif // BOOST_TEST_SOURCE
+# endif // BOOST_HAS_DECLSPEC
+#endif // BOOST_TEST_DYN_LINK
+
+
+#ifndef BOOST_TEST_DECL
+# define BOOST_TEST_DECL
+#endif
+
+#if !defined(BOOST_TEST_MAIN) && defined(BOOST_AUTO_TEST_MAIN)
+#define BOOST_TEST_MAIN BOOST_AUTO_TEST_MAIN
+#endif
+
+#if !defined(BOOST_TEST_MAIN) && defined(BOOST_TEST_MODULE)
+#define BOOST_TEST_MAIN BOOST_TEST_MODULE
+#endif
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: config.hpp,v $
+// Revision 1.5 2006/02/06 10:03:54 rogeeff
+// BOOST_TEST_MODULE - master test suite name
+//
+// Revision 1.4 2006/01/15 06:17:18 rogeeff
+// make config working properly for non-windows dll
+//
+// Revision 1.3 2005/12/14 04:56:31 rogeeff
+// dll support introduced
+//
+// Revision 1.2 2005/07/13 21:49:46 danieljames
+// Boost.Test workarounds for Digital Mars bugs.
+//
+// Revision 1.1 2005/02/20 08:27:06 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// Revision 1.28 2005/02/01 06:40:07 rogeeff
+// copyright update
+// old log entries removed
+// minor stilistic changes
+// depricated tools removed
+//
+// Revision 1.27 2005/01/31 07:50:06 rogeeff
+// cdecl portability fix
+//
+// Revision 1.26 2005/01/30 01:48:24 rogeeff
+// BOOST_TEST_STRINGIZE introduced
+// counter type renamed
+//
+// Revision 1.25 2005/01/22 19:22:12 rogeeff
+// implementation moved into headers section to eliminate dependency of included/minimal component on src directory
+//
+// Revision 1.24 2005/01/21 07:33:20 rogeeff
+// BOOST_TEST_SUPPORT_TIMEOUT flag introduced to be used by used to switch code by timeout support
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_CONFIG_HPP_071894GER
diff --git a/boost/boost/test/detail/enable_warnings.hpp b/boost/boost/test/detail/enable_warnings.hpp
new file mode 100644
index 00000000000..bc4e199ec8e
--- /dev/null
+++ b/boost/boost/test/detail/enable_warnings.hpp
@@ -0,0 +1,51 @@
+// (C) Copyright Gennadiy Rozental 2004-2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: enable_warnings.hpp,v $
+//
+// Version : $Revision: 1.6 $
+//
+// Description : enable previosly suppressed warnings
+// ***************************************************************************
+
+#ifdef BOOST_MSVC
+# pragma warning(default: 4511) // copy constructor could not be generated
+# pragma warning(default: 4512) // assignment operator could not be generated
+# pragma warning(default: 4100) // unreferenced formal parameter
+# pragma warning(default: 4996) // <symbol> was declared deprecated
+# pragma warning(default: 4355) // 'this' : used in base member initializer list
+# pragma warning(default: 4706) // assignment within conditional expression
+# pragma warning(default: 4251) // class 'A<T>' needs to have dll-interface to be used by clients of class 'B'
+# pragma warning(default: 4127) // conditional expression is constant
+# pragma warning(default: 4290) // C++ exception specification ignored except to ...
+# pragma warning(default: 4180) // qualifier applied to function type has no meaning; ignored
+# pragma warning(pop)
+#endif
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: enable_warnings.hpp,v $
+// Revision 1.6 2006/01/28 07:09:08 rogeeff
+// 4180 suppressed
+//
+// Revision 1.5 2005/12/14 04:57:50 rogeeff
+// extra warnings suppressed
+//
+// Revision 1.4 2005/02/20 08:27:06 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// Revision 1.3 2005/02/01 06:40:07 rogeeff
+// copyright update
+// old log entries removed
+// minor stilistic changes
+// depricated tools removed
+//
+// Revision 1.2 2005/01/31 06:00:37 rogeeff
+// deprecated std symbols warning suppressed
+//
+// ***************************************************************************
diff --git a/boost/boost/test/detail/fwd_decl.hpp b/boost/boost/test/detail/fwd_decl.hpp
new file mode 100644
index 00000000000..94151b3e2f4
--- /dev/null
+++ b/boost/boost/test/detail/fwd_decl.hpp
@@ -0,0 +1,59 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: fwd_decl.hpp,v $
+//
+// Version : $Revision: 1.2 $
+//
+// Description : contains forward eclarations for Boost.Test data types
+// ***************************************************************************
+
+#ifndef BOOST_TEST_FWD_DECL_HPP_011605GER
+#define BOOST_TEST_FWD_DECL_HPP_011605GER
+
+namespace boost {
+
+class execution_monitor;
+class execution_exception;
+
+namespace unit_test {
+
+class test_unit;
+class test_case;
+class test_suite;
+class master_test_suite_t;
+
+class test_tree_visitor;
+class test_observer;
+
+// singletons
+class unit_test_monitor_t;
+class unit_test_log_t;
+
+class unit_test_log_formatter;
+struct log_entry_data;
+struct log_checkpoint_data;
+
+
+} // namespace unit_test
+
+} // namespace boost
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: fwd_decl.hpp,v $
+// Revision 1.2 2005/12/14 04:59:11 rogeeff
+// *** empty log message ***
+//
+// Revision 1.1 2005/02/20 08:27:06 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_FWD_DECL_HPP_011605GER
+
diff --git a/boost/boost/test/detail/global_typedef.hpp b/boost/boost/test/detail/global_typedef.hpp
new file mode 100644
index 00000000000..4b540f16c39
--- /dev/null
+++ b/boost/boost/test/detail/global_typedef.hpp
@@ -0,0 +1,84 @@
+// (C) Copyright Gennadiy Rozental 2001-2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: global_typedef.hpp,v $
+//
+// Version : $Revision: 1.2 $
+//
+// Description : some trivial global typedefs
+// ***************************************************************************
+
+#ifndef BOOST_TEST_GLOBAL_TYPEDEF_HPP_021005GER
+#define BOOST_TEST_GLOBAL_TYPEDEF_HPP_021005GER
+
+#include <boost/test/utils/basic_cstring/basic_cstring.hpp>
+#define BOOST_TEST_L( s ) boost::unit_test::const_string( s, sizeof( s ) - 1 )
+#define BOOST_TEST_STRINGIZE( s ) BOOST_TEST_L( BOOST_STRINGIZE( s ) )
+#define BOOST_TEST_EMPTY_STRING BOOST_TEST_L( "" )
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace boost {
+
+namespace unit_test {
+
+typedef unsigned long counter_t;
+
+//____________________________________________________________________________//
+
+enum report_level { CONFIRMATION_REPORT, SHORT_REPORT, DETAILED_REPORT, NO_REPORT, INV_REPORT_LEVEL };
+
+//____________________________________________________________________________//
+
+enum output_format { CLF /* compiler log format */, XML /* XML */ };
+
+//____________________________________________________________________________//
+
+enum test_unit_type { tut_case = 0x01, tut_suite = 0x10, tut_any = 0x11 };
+
+//____________________________________________________________________________//
+
+typedef unsigned long test_unit_id;
+const test_unit_id INV_TEST_UNIT_ID = 0xFFFFFFFF;
+const test_unit_id MAX_TEST_CASE_ID = 0xFFFFFFFE;
+const test_unit_id MIN_TEST_CASE_ID = 0x00010000;
+const test_unit_id MAX_TEST_SUITE_ID = 0x0000FF00;
+const test_unit_id MIN_TEST_SUITE_ID = 0x00000001;
+
+//____________________________________________________________________________//
+
+inline test_unit_type
+test_id_2_unit_type( test_unit_id id )
+{
+ return (id & 0xFFFF0000) != 0 ? tut_case : tut_suite;
+}
+
+//____________________________________________________________________________//
+
+} // namespace unit_test
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: global_typedef.hpp,v $
+// Revision 1.2 2006/03/15 03:18:29 rogeeff
+// made literal resizable
+//
+// Revision 1.1 2005/02/20 08:27:06 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_GLOBAL_TYPEDEF_HPP_021005GER
diff --git a/boost/boost/test/detail/log_level.hpp b/boost/boost/test/detail/log_level.hpp
new file mode 100644
index 00000000000..02d11db235b
--- /dev/null
+++ b/boost/boost/test/detail/log_level.hpp
@@ -0,0 +1,60 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: log_level.hpp,v $
+//
+// Version : $Revision: 1.2 $
+//
+// Description : shared definition for unit test log levels
+// ***************************************************************************
+
+#ifndef BOOST_TEST_LOG_LEVEL_HPP_011605GER
+#define BOOST_TEST_LOG_LEVEL_HPP_011605GER
+
+namespace boost {
+namespace unit_test {
+
+// ************************************************************************** //
+// ************** log levels ************** //
+// ************************************************************************** //
+
+// each log level includes all subsequent higher loging levels
+enum log_level {
+ invalid_log_level = -1,
+ log_successful_tests = 0,
+ log_test_suites = 1,
+ log_messages = 2,
+ log_warnings = 3,
+ log_all_errors = 4, // reported by unit test macros
+ log_cpp_exception_errors = 5, // uncaught C++ exceptions
+ log_system_errors = 6, // including timeouts, signals, traps
+ log_fatal_errors = 7, // including unit test macros or
+ // fatal system errors
+ log_nothing = 8
+};
+
+} // namespace unit_test
+} // namespace boost
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: log_level.hpp,v $
+// Revision 1.2 2005/02/20 08:27:06 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// Revision 1.1 2005/01/18 08:27:30 rogeeff
+// unit_test_log rework:
+// eliminated need for ::instance()
+// eliminated need for << end and ...END macro
+// straitend interface between log and formatters
+// change compiler like formatter name
+// minimized unit_test_log interface and reworked to use explicit calls
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_LOG_LEVEL_HPP_011605GER
diff --git a/boost/boost/test/detail/suppress_warnings.hpp b/boost/boost/test/detail/suppress_warnings.hpp
new file mode 100644
index 00000000000..4103a673c4c
--- /dev/null
+++ b/boost/boost/test/detail/suppress_warnings.hpp
@@ -0,0 +1,51 @@
+// (C) Copyright Gennadiy Rozental 2004-2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: suppress_warnings.hpp,v $
+//
+// Version : $Revision: 1.6 $
+//
+// Description : suppress some warnings
+// ***************************************************************************
+
+#ifdef BOOST_MSVC
+# pragma warning(push)
+# pragma warning(disable: 4511) // copy constructor could not be generated
+# pragma warning(disable: 4512) // assignment operator could not be generated
+# pragma warning(disable: 4100) // unreferenced formal parameter
+# pragma warning(disable: 4996) // <symbol> was declared deprecated
+# pragma warning(disable: 4355) // 'this' : used in base member initializer list
+# pragma warning(disable: 4706) // assignment within conditional expression
+# pragma warning(disable: 4251) // class 'A<T>' needs to have dll-interface to be used by clients of class 'B'
+# pragma warning(disable: 4127) // conditional expression is constant
+# pragma warning(disable: 4290) // C++ exception specification ignored except to ...
+# pragma warning(disable: 4180) // qualifier applied to function type has no meaning; ignored
+#endif
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: suppress_warnings.hpp,v $
+// Revision 1.6 2006/01/28 07:09:08 rogeeff
+// 4180 suppressed
+//
+// Revision 1.5 2005/12/14 04:57:50 rogeeff
+// extra warnings suppressed
+//
+// Revision 1.4 2005/02/20 08:27:06 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// Revision 1.3 2005/02/01 06:40:07 rogeeff
+// copyright update
+// old log entries removed
+// minor stilistic changes
+// depricated tools removed
+//
+// Revision 1.2 2005/01/31 06:00:37 rogeeff
+// deprecated std symbols warning suppressed
+//
+// ***************************************************************************
diff --git a/boost/boost/test/detail/unit_test_parameters.hpp b/boost/boost/test/detail/unit_test_parameters.hpp
new file mode 100644
index 00000000000..df1c3a01fe7
--- /dev/null
+++ b/boost/boost/test/detail/unit_test_parameters.hpp
@@ -0,0 +1,86 @@
+// (C) Copyright Gennadiy Rozental 2001-2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: unit_test_parameters.hpp,v $
+//
+// Version : $Revision: 1.23.2.1 $
+//
+// Description : storage for unit test framework parameters information
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UNIT_TEST_PARAMETERS_HPP_071894GER
+#define BOOST_TEST_UNIT_TEST_PARAMETERS_HPP_071894GER
+
+#include <boost/test/detail/global_typedef.hpp>
+#include <boost/test/detail/log_level.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace boost {
+
+namespace unit_test {
+
+// ************************************************************************** //
+// ************** runtime_config ************** //
+// ************************************************************************** //
+
+namespace runtime_config {
+
+void BOOST_TEST_DECL init( int* argc, char** argv );
+
+unit_test::log_level BOOST_TEST_DECL log_level();
+bool BOOST_TEST_DECL no_result_code();
+unit_test::report_level BOOST_TEST_DECL report_level();
+const_string BOOST_TEST_DECL test_to_run();
+const_string BOOST_TEST_DECL break_exec_path();
+bool BOOST_TEST_DECL save_pattern();
+bool BOOST_TEST_DECL show_build_info();
+bool BOOST_TEST_DECL show_progress();
+bool BOOST_TEST_DECL catch_sys_errors();
+output_format BOOST_TEST_DECL report_format();
+output_format BOOST_TEST_DECL log_format();
+long BOOST_TEST_DECL detect_memory_leaks();
+int BOOST_TEST_DECL random_seed();
+
+} // namespace runtime_config
+
+} // namespace unit_test
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: unit_test_parameters.hpp,v $
+// Revision 1.23.2.1 2006/11/13 20:06:57 jhunold
+// Merge from HEAD:
+// Added missing export declarations.
+//
+// Revision 1.23 2006/01/30 07:29:49 rogeeff
+// split memory leaks detection API in two to get more functions with better defined roles
+//
+// Revision 1.22 2005/12/14 04:58:30 rogeeff
+// new parameter --break_exec_path introduced
+//
+// Revision 1.21 2005/04/05 06:11:37 rogeeff
+// memory leak allocation point detection\nextra help with _WIN32_WINNT
+//
+// Revision 1.20 2005/02/21 10:18:30 rogeeff
+// random cla support
+//
+// Revision 1.19 2005/02/20 08:27:06 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_UNIT_TEST_PARAMETERS_HPP_071894GER
diff --git a/boost/boost/test/detail/workaround.hpp b/boost/boost/test/detail/workaround.hpp
new file mode 100644
index 00000000000..cc89b9bdeec
--- /dev/null
+++ b/boost/boost/test/detail/workaround.hpp
@@ -0,0 +1,74 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: workaround.hpp,v $
+//
+// Version : $Revision: 1.2 $
+//
+// Description : contains mics. workarounds
+// ***************************************************************************
+
+#ifndef BOOST_TEST_WORKAROUND_HPP_021005GER
+#define BOOST_TEST_WORKAROUND_HPP_021005GER
+
+// Boost
+#include <boost/config.hpp> // compilers workarounds and std::ptrdiff_t
+
+// STL
+#include <iterator> // for std::distance
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace boost {
+
+namespace unit_test {
+
+namespace ut_detail {
+
+#ifdef BOOST_NO_STD_DISTANCE
+template <class T>
+std::ptrdiff_t distance( T const& x_, T const& y_ )
+{
+ std::ptrdiff_t res = 0;
+
+ std::distance( x_, y_, res );
+
+ return res;
+}
+#else
+using std::distance;
+#endif
+
+template <class T> inline void ignore_unused_variable_warning(const T&) {}
+
+} // namespace ut_detail
+
+} // namespace unit_test
+
+namespace unit_test_framework = unit_test;
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: workaround.hpp,v $
+// Revision 1.2 2005/02/21 10:20:04 rogeeff
+// ignore unused vars helper
+//
+// Revision 1.1 2005/02/20 08:27:06 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_WORKAROUND_HPP_021005GER
diff --git a/boost/boost/test/detail/wrap_io_saver.hpp b/boost/boost/test/detail/wrap_io_saver.hpp
new file mode 100644
index 00000000000..05c39869f83
--- /dev/null
+++ b/boost/boost/test/detail/wrap_io_saver.hpp
@@ -0,0 +1,63 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: wrap_io_saver.hpp,v $
+//
+// Version : $Revision: 1.2 $
+//
+// Description : wraps io savers staff to be provide workaround for classic iostreams
+// ***************************************************************************
+
+#ifndef BOOST_WRAP_IO_SAVER_HPP_011605GER
+#define BOOST_WRAP_IO_SAVER_HPP_011605GER
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+#if defined(BOOST_STANDARD_IOSTREAMS)
+#include <boost/io/ios_state.hpp>
+#endif
+
+namespace boost {
+
+namespace unit_test {
+
+#if defined(BOOST_STANDARD_IOSTREAMS)
+
+typedef ::boost::io::ios_base_all_saver io_saver_type;
+
+#else
+
+struct io_saver_type {
+ explicit io_saver_type( std::ostream& ) {}
+ void restore() {}
+};
+
+#endif
+
+} // namespace unit_test
+
+} // namespace boost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: wrap_io_saver.hpp,v $
+// Revision 1.2 2005/12/14 04:59:11 rogeeff
+// *** empty log message ***
+//
+// Revision 1.1 2005/04/30 16:48:21 rogeeff
+// io saver warkaround for classic io is shared
+//
+// Revision 1.1 2005/02/20 08:27:06 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// ***************************************************************************
+
+#endif // BOOST_WRAP_IO_SAVER_HPP_011605GER
+
diff --git a/boost/boost/test/exception_safety.hpp b/boost/boost/test/exception_safety.hpp
new file mode 100644
index 00000000000..1335cc6d65e
--- /dev/null
+++ b/boost/boost/test/exception_safety.hpp
@@ -0,0 +1,207 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: exception_safety.hpp,v $
+//
+// Version : $Revision: 1.4 $
+//
+// Description : Facilities to perform exception safety tests
+// ***************************************************************************
+
+#ifndef BOOST_TEST_EXCEPTION_SAFETY_HPP_111705GER
+#define BOOST_TEST_EXCEPTION_SAFETY_HPP_111705GER
+
+// Boost.Test
+#include <boost/test/detail/config.hpp>
+
+#include <boost/test/utils/callback.hpp>
+
+// STL
+#include <memory>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// ************** BOOST_TEST_EXCEPTION_SAFETY ************** //
+// ************************************************************************** //
+
+#define BOOST_TEST_EXCEPTION_SAFETY( test_name ) \
+struct test_name : public BOOST_AUTO_TEST_CASE_FIXTURE \
+{ void test_method(); }; \
+ \
+static void BOOST_AUTO_TC_INVOKER( test_name )() \
+{ \
+ test_name t; \
+ ::boost::itest::exception_safety( \
+ boost::bind( &test_name::test_method, t ), \
+ BOOST_STRINGIZE(test_name) ); \
+} \
+ \
+struct BOOST_AUTO_TC_UNIQUE_ID( test_name ) {}; \
+ \
+BOOST_AUTO_TC_REGISTRAR( test_name )( \
+ boost::unit_test::make_test_case( \
+ &BOOST_AUTO_TC_INVOKER( test_name ), #test_name ), \
+ boost::unit_test::ut_detail::auto_tc_exp_fail< \
+ BOOST_AUTO_TC_UNIQUE_ID( test_name )>::value ); \
+ \
+void test_name::test_method() \
+/**/
+
+namespace boost {
+
+namespace itest {
+
+// ************************************************************************** //
+// ************** exception safety test ************** //
+// ************************************************************************** //
+
+void BOOST_TEST_DECL exception_safety( unit_test::callback0<> const& F,
+ unit_test::const_string test_name = "" );
+
+} // namespace itest
+
+} // namespace boost
+
+// ************************************************************************** //
+// ************** global operator new/delete overloads ************** //
+// ************************************************************************** //
+
+#ifndef BOOST_ITEST_NO_NEW_OVERLOADS
+
+#include <boost/test/interaction_based.hpp>
+
+# ifdef BOOST_NO_STDC_NAMESPACE
+namespace std { using ::isprint; using ::malloc; using ::free; }
+# endif
+
+inline void*
+operator new( std::size_t s ) throw(std::bad_alloc)
+{
+ void* res = std::malloc(s ? s : 1);
+
+ if( res )
+ ::boost::itest::manager::instance().allocated( 0, 0, res, s );
+ else
+ throw std::bad_alloc();
+
+ return res;
+}
+
+//____________________________________________________________________________//
+
+inline void*
+operator new( std::size_t s, std::nothrow_t const& ) throw()
+{
+ void* res = std::malloc(s ? s : 1);
+
+ if( res )
+ ::boost::itest::manager::instance().allocated( 0, 0, res, s );
+
+ return res;
+}
+
+//____________________________________________________________________________//
+
+inline void*
+operator new[]( std::size_t s ) throw(std::bad_alloc)
+{
+ void* res = std::malloc(s ? s : 1);
+
+ if( res )
+ ::boost::itest::manager::instance().allocated( 0, 0, res, s );
+ else
+ throw std::bad_alloc();
+
+ return res;
+}
+
+//____________________________________________________________________________//
+
+inline void*
+operator new[]( std::size_t s, std::nothrow_t const& ) throw()
+{
+ void* res = std::malloc(s ? s : 1);
+
+ if( res )
+ ::boost::itest::manager::instance().allocated( 0, 0, res, s );
+
+ return res;
+}
+
+//____________________________________________________________________________//
+
+inline void
+operator delete( void* p ) throw()
+{
+ ::boost::itest::manager::instance().freed( p );
+
+ std::free( p );
+}
+
+//____________________________________________________________________________//
+
+inline void
+operator delete( void* p, std::nothrow_t const& ) throw()
+{
+ ::boost::itest::manager::instance().freed( p );
+
+ std::free( p );
+}
+
+//____________________________________________________________________________//
+
+inline void
+operator delete[]( void* p ) throw()
+{
+ ::boost::itest::manager::instance().freed( p );
+
+ std::free( p );
+}
+
+//____________________________________________________________________________//
+
+inline void
+operator delete[]( void* p, std::nothrow_t const& ) throw()
+{
+ ::boost::itest::manager::instance().freed( p );
+
+ std::free( p );
+}
+
+//____________________________________________________________________________//
+
+#endif // BOOST_ITEST_NO_NEW_OVERLOADS
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: exception_safety.hpp,v $
+// Revision 1.4 2006/01/28 08:52:35 rogeeff
+// operator new overloads made inline to:
+// 1. prevent issues with export them from DLL
+// 2. release link issue fixed
+//
+// Revision 1.3 2006/01/15 11:14:38 rogeeff
+// simpl_mock -> mock_object<>::prototype()
+// operator new need to be rethinked
+//
+// Revision 1.2 2005/12/20 23:50:13 rogeeff
+// unit_test.hpp removed
+//
+// Revision 1.1 2005/12/14 05:03:46 rogeeff
+// exception safety automatic testing facilties
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_EXCEPTION_SAFETY_HPP_111705GER
diff --git a/boost/boost/test/execution_monitor.hpp b/boost/boost/test/execution_monitor.hpp
new file mode 100644
index 00000000000..bbb37558bb4
--- /dev/null
+++ b/boost/boost/test/execution_monitor.hpp
@@ -0,0 +1,254 @@
+// (C) Copyright Gennadiy Rozental 2001-2005.
+// (C) Copyright Beman Dawes 2001.
+// 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/test for the library home page.
+//
+// File : $RCSfile: execution_monitor.hpp,v $
+//
+// Version : $Revision: 1.25 $
+//
+// Description : defines abstract monitor interfaces and implements execution exception
+// The original Boost Test Library included an implementation detail function
+// named catch_exceptions() which caught otherwise uncaught C++ exceptions.
+// It was derived from an existing test framework by Beman Dawes. The
+// intent was to expand later to catch other detectable but platform dependent
+// error events like Unix signals or Windows structured C exceptions.
+//
+// Requests from early adopters of the Boost Test Library included
+// configurable levels of error message detail, elimination of templates,
+// separation of error reporting, and making the catch_exceptions() facilities
+// available as a public interface. Support for unit testing also stretched
+// the function based design. Implementation within the header became less
+// attractive due to the need to include many huge system dependent headers,
+// although still preferable in certain cases.
+//
+// All those issues have been addressed by introducing the class-based
+// design presented here.
+// ***************************************************************************
+
+#ifndef BOOST_TEST_EXECUTION_MONITOR_HPP_071894GER
+#define BOOST_TEST_EXECUTION_MONITOR_HPP_071894GER
+
+// Boost.Test
+#include <boost/test/detail/global_typedef.hpp>
+#include <boost/test/detail/fwd_decl.hpp>
+#include <boost/test/utils/callback.hpp>
+
+// Boost
+#include <boost/scoped_ptr.hpp>
+#include <boost/type.hpp>
+#include <boost/cstdlib.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace boost {
+
+namespace detail {
+
+// ************************************************************************** //
+// ************** detail::translate_exception_base ************** //
+// ************************************************************************** //
+
+class BOOST_TEST_DECL translate_exception_base {
+public:
+ // Constructor
+ explicit translate_exception_base( boost::scoped_ptr<translate_exception_base>& next )
+ {
+ next.swap( m_next );
+ }
+
+ // Destructor
+ virtual ~translate_exception_base() {}
+
+ virtual int operator()( unit_test::callback0<int> const& F ) = 0;
+
+protected:
+ // Data members
+ boost::scoped_ptr<translate_exception_base> m_next;
+};
+
+} // namespace detail
+
+// ************************************************************************** //
+// ************** execution_exception ************** //
+// ************************************************************************** //
+
+// design rationale: fear of being out (or nearly out) of memory.
+
+class BOOST_TEST_DECL execution_exception {
+ typedef boost::unit_test::const_string const_string;
+public:
+ enum error_code {
+ // These values are sometimes used as program return codes.
+ // The particular values have been chosen to avoid conflicts with
+ // commonly used program return codes: values < 100 are often user
+ // assigned, values > 255 are sometimes used to report system errors.
+ // Gaps in values allow for orderly expansion.
+
+ no_error = 0, // for completeness only; never returned
+ user_error = 200, // user reported non-fatal error
+ cpp_exception_error = 205, // see note (1) below
+ system_error = 210, // see note (2) below
+ timeout_error = 215, // only detectable on certain platforms
+ user_fatal_error = 220, // user reported fatal error
+ system_fatal_error = 225 // see note (2) below
+
+ // Note 1: Only uncaught C++ exceptions are treated as errors.
+ // If the application catches a C++ exception, it will never reach
+ // the execution_monitor.
+
+ // Note 2: These errors include Unix signals and Windows structured
+ // exceptions. They are often initiated by hardware traps.
+ //
+ // The implementation decides what is a fatal_system_exception and what is
+ // just a system_exception. Fatal errors are so likely to have corrupted
+ // machine state (like a stack overflow or addressing exception) that it
+ // is unreasonable to continue execution.
+ };
+
+ // Constructor
+ execution_exception( error_code ec_, const_string what_msg_ ) // max length 256 inc '\0'
+ : m_error_code( ec_ ), m_what( what_msg_ ) {}
+
+ // access methods
+ error_code code() const { return m_error_code; }
+ const_string what() const { return m_what; }
+
+private:
+ // Data members
+ error_code m_error_code;
+ const_string m_what;
+}; // execution_exception
+
+// ************************************************************************** //
+// ************** execution_monitor ************** //
+// ************************************************************************** //
+
+class BOOST_TEST_DECL execution_monitor {
+public:
+ int execute( unit_test::callback0<int> const& F, bool catch_system_errors = true, int timeout = 0 );
+ // The catch_system_errors parameter specifies whether the monitor should
+ // try to catch system errors/exceptions that would cause program to crash
+ // in regular case
+ // The timeout argument specifies the seconds that elapse before
+ // a timer_error occurs. May be ignored on some platforms.
+ //
+ // Returns: Value returned by function().
+ //
+ // Effects: Calls executes supplied function F inside a try/catch block which also may
+ // include other unspecified platform dependent error detection code.
+ //
+ // Throws: execution_exception on an uncaught C++ exception,
+ // a hardware or software signal, trap, or other exception.
+ //
+ // Note: execute() doesn't consider it an error for F to return a non-zero value.
+
+ // register custom (user supplied) exception translator
+ template<typename Exception, typename ExceptionTranslator>
+ void register_exception_translator( ExceptionTranslator const& tr, boost::type<Exception>* = 0 );
+
+private:
+ // implementation helpers
+ int catch_signals( unit_test::callback0<int> const& F, bool catch_system_errors, int timeout );
+
+ // Data members
+ boost::scoped_ptr<detail::translate_exception_base> m_custom_translators;
+}; // execution_monitor
+
+namespace detail {
+
+// ************************************************************************** //
+// ************** detail::translate_exception ************** //
+// ************************************************************************** //
+
+template<typename Exception, typename ExceptionTranslator>
+class translate_exception : public translate_exception_base
+{
+ typedef boost::scoped_ptr<translate_exception_base> base_ptr;
+public:
+ explicit translate_exception( ExceptionTranslator const& tr, base_ptr& next )
+ : translate_exception_base( next ), m_translator( tr ) {}
+
+ int operator()( unit_test::callback0<int> const& F )
+ {
+ try {
+ return m_next ? (*m_next)( F ) : F();
+ } catch( Exception const& e ) {
+ m_translator( e );
+ return boost::exit_exception_failure;
+ }
+ }
+
+private:
+ // Data members
+ ExceptionTranslator m_translator;
+};
+
+} // namespace detail
+
+template<typename Exception, typename ExceptionTranslator>
+void
+execution_monitor::register_exception_translator( ExceptionTranslator const& tr, boost::type<Exception>* )
+{
+ m_custom_translators.reset(
+ new detail::translate_exception<Exception,ExceptionTranslator>( tr,m_custom_translators ) );
+}
+
+// ************************************************************************** //
+// ************** detect_memory_leaks ************** //
+// ************************************************************************** //
+
+// turn on system memory leak detection
+void BOOST_TEST_DECL detect_memory_leaks( bool on_off );
+// break program execution on mem_alloc_order_num's allocation
+void BOOST_TEST_DECL break_memory_alloc( long mem_alloc_order_num );
+
+// ************************************************************************** //
+// ************** execution_aborted ************** //
+// ************************************************************************** //
+
+struct BOOST_TEST_DECL execution_aborted {};
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: execution_monitor.hpp,v $
+// Revision 1.25 2006/01/30 07:29:49 rogeeff
+// split memory leaks detection API in two to get more functions with better defined roles
+//
+// Revision 1.24 2005/12/14 05:05:58 rogeeff
+// dll support introduced
+//
+// Revision 1.23 2005/04/05 06:11:37 rogeeff
+// memory leak allocation point detection\nextra help with _WIN32_WINNT
+//
+// Revision 1.22 2005/02/20 08:27:05 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// Revision 1.21 2005/02/01 08:59:28 rogeeff
+// supplied_log_formatters split
+// change formatters interface to simplify result interface
+//
+// Revision 1.20 2005/02/01 06:40:06 rogeeff
+// copyright update
+// old log entries removed
+// minor stilistic changes
+// depricated tools removed
+//
+// Revision 1.19 2005/01/31 05:59:18 rogeeff
+// detect_memory_leak feature added
+//
+// ***************************************************************************
+
+#endif
diff --git a/boost/boost/test/floating_point_comparison.hpp b/boost/boost/test/floating_point_comparison.hpp
new file mode 100644
index 00000000000..11b3393a5af
--- /dev/null
+++ b/boost/boost/test/floating_point_comparison.hpp
@@ -0,0 +1,283 @@
+// (C) Copyright Gennadiy Rozental 2001-2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: floating_point_comparison.hpp,v $
+//
+// Version : $Revision: 1.26.2.2 $
+//
+// Description : defines algoirthms for comparing 2 floating point values
+// ***************************************************************************
+
+#ifndef BOOST_TEST_FLOATING_POINT_COMPARISON_HPP_071894GER
+#define BOOST_TEST_FLOATING_POINT_COMPARISON_HPP_071894GER
+
+#include <boost/limits.hpp> // for std::numeric_limits
+
+#include <boost/test/utils/class_properties.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace boost {
+
+namespace test_tools {
+
+using unit_test::readonly_property;
+
+// ************************************************************************** //
+// ************** floating_point_comparison_type ************** //
+// ************************************************************************** //
+
+enum floating_point_comparison_type {
+ FPC_STRONG, // "Very close" - equation 1' in docs, the default
+ FPC_WEAK // "Close enough" - equation 2' in docs.
+
+};
+
+// ************************************************************************** //
+// ************** details ************** //
+// ************************************************************************** //
+
+namespace tt_detail {
+
+// FPT is Floating-Point type, float, double, long double or User-Defined.
+
+template<typename FPT>
+inline FPT
+fpt_abs( FPT arg )
+{
+ return arg < static_cast<FPT>(0) ? -arg : arg;
+}
+
+//____________________________________________________________________________//
+
+// both f1 and f2 are unsigned here
+template<typename FPT>
+inline FPT
+safe_fpt_division( FPT f1, FPT f2 )
+{
+ // Avoid overflow.
+ if( f2 < static_cast<FPT>(1) && f1 > f2 * (std::numeric_limits<FPT>::max)() )
+ return (std::numeric_limits<FPT>::max)();
+
+ // Avoid underflow.
+ if( f1 == static_cast<FPT>(0) ||
+ f2 > static_cast<FPT>(1) && f1 < f2 * (std::numeric_limits<FPT>::min)() )
+ return static_cast<FPT>(0);
+
+ return f1/f2;
+}
+
+//____________________________________________________________________________//
+
+} // namespace tt_detail
+
+// ************************************************************************** //
+// ************** tolerance presentation types ************** //
+// ************************************************************************** //
+
+template<typename FPT>
+struct percent_tolerance_t {
+ explicit percent_tolerance_t( FPT v ) : m_value( v ) {}
+
+ FPT m_value;
+};
+
+//____________________________________________________________________________//
+
+template<typename Out,typename FPT>
+Out& operator<<( Out& out, percent_tolerance_t<FPT> t )
+{
+ return out << t.m_value;
+}
+
+//____________________________________________________________________________//
+
+template<typename FPT>
+inline percent_tolerance_t<FPT>
+percent_tolerance( FPT v )
+{
+ return percent_tolerance_t<FPT>( v );
+}
+
+//____________________________________________________________________________//
+
+template<typename FPT>
+struct fraction_tolerance_t {
+ explicit fraction_tolerance_t( FPT v ) : m_value( v ) {}
+
+ FPT m_value;
+};
+
+//____________________________________________________________________________//
+
+template<typename Out,typename FPT>
+Out& operator<<( Out& out, fraction_tolerance_t<FPT> t )
+{
+ return out << t.m_value;
+}
+
+//____________________________________________________________________________//
+
+template<typename FPT>
+inline fraction_tolerance_t<FPT>
+fraction_tolerance( FPT v )
+{
+ return fraction_tolerance_t<FPT>( v );
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// ************** close_at_tolerance ************** //
+// ************************************************************************** //
+
+template<typename FPT>
+class close_at_tolerance {
+public:
+ // Public typedefs
+ typedef bool result_type;
+
+ // Constructor
+ template<typename ToleranceBaseType>
+ explicit close_at_tolerance( percent_tolerance_t<ToleranceBaseType> tolerance,
+ floating_point_comparison_type fpc_type = FPC_STRONG )
+ : p_fraction_tolerance( tt_detail::fpt_abs( static_cast<FPT>(0.01)*tolerance.m_value ) )
+ , p_strong_or_weak( fpc_type == FPC_STRONG )
+ {}
+ template<typename ToleranceBaseType>
+ explicit close_at_tolerance( fraction_tolerance_t<ToleranceBaseType> tolerance,
+ floating_point_comparison_type fpc_type = FPC_STRONG )
+ : p_fraction_tolerance( tt_detail::fpt_abs( tolerance.m_value ) )
+ , p_strong_or_weak( fpc_type == FPC_STRONG )
+ {}
+
+ bool operator()( FPT left, FPT right ) const
+ {
+ FPT diff = tt_detail::fpt_abs( left - right );
+ FPT d1 = tt_detail::safe_fpt_division( diff, tt_detail::fpt_abs( right ) );
+ FPT d2 = tt_detail::safe_fpt_division( diff, tt_detail::fpt_abs( left ) );
+
+ return p_strong_or_weak
+ ? (d1 <= p_fraction_tolerance && d2 <= p_fraction_tolerance)
+ : (d1 <= p_fraction_tolerance || d2 <= p_fraction_tolerance);
+ }
+
+ // Public properties
+ readonly_property<FPT> p_fraction_tolerance;
+ readonly_property<bool> p_strong_or_weak;
+};
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// ************** check_is_close ************** //
+// ************************************************************************** //
+
+struct BOOST_TEST_DECL check_is_close_t {
+ // Public typedefs
+ typedef bool result_type;
+
+ template<typename FPT, typename ToleranceBaseType>
+ bool
+ operator()( FPT left, FPT right, percent_tolerance_t<ToleranceBaseType> tolerance,
+ floating_point_comparison_type fpc_type = FPC_STRONG )
+ {
+ close_at_tolerance<FPT> pred( tolerance, fpc_type );
+
+ return pred( left, right );
+ }
+ template<typename FPT, typename ToleranceBaseType>
+ bool
+ operator()( FPT left, FPT right, fraction_tolerance_t<ToleranceBaseType> tolerance,
+ floating_point_comparison_type fpc_type = FPC_STRONG )
+ {
+ close_at_tolerance<FPT> pred( tolerance, fpc_type );
+
+ return pred( left, right );
+ }
+};
+
+namespace {
+check_is_close_t check_is_close;
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// ************** check_is_small ************** //
+// ************************************************************************** //
+
+struct BOOST_TEST_DECL check_is_small_t {
+ // Public typedefs
+ typedef bool result_type;
+
+ template<typename FPT>
+ bool
+ operator()( FPT fpv, FPT tolerance )
+ {
+ return tt_detail::fpt_abs( fpv ) < tt_detail::fpt_abs( tolerance );
+ }
+};
+
+namespace {
+check_is_small_t check_is_small;
+}
+
+//____________________________________________________________________________//
+
+} // namespace test_tools
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: floating_point_comparison.hpp,v $
+// Revision 1.26.2.2 2006/11/30 14:41:21 jhunold
+// Merge from HEAD: Remove unnecessary export makro.
+//
+// Revision 1.26.2.1 2006/05/22 17:39:12 johnmaddock
+// Fix min/max guidelines violation.
+//
+// Revision 1.26 2006/03/16 07:31:06 vladimir_prus
+// Fix compile error on MSVC due to max and min being defined as macros.
+//
+// Revision 1.25 2006/03/13 18:28:25 rogeeff
+// warnings eliminated
+//
+// Revision 1.24 2005/12/14 05:07:28 rogeeff
+// introduced an ability to test on closeness based on either percentage dirven tolerance or fraction driven one
+//
+// Revision 1.23 2005/05/29 08:54:57 rogeeff
+// allow bind usage
+//
+// Revision 1.22 2005/02/21 10:21:40 rogeeff
+// check_is_small implemented
+// check functions implemented as function objects
+//
+// Revision 1.21 2005/02/20 08:27:05 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// Revision 1.20 2005/02/01 06:40:06 rogeeff
+// copyright update
+// old log entries removed
+// minor stilistic changes
+// depricated tools removed
+//
+// Revision 1.19 2005/01/22 19:22:12 rogeeff
+// implementation moved into headers section to eliminate dependency of included/minimal component on src directory
+//
+// ***************************************************************************
+
+#endif // BOOST_FLOATING_POINT_COMAPARISON_HPP_071894GER
+
diff --git a/boost/boost/test/framework.hpp b/boost/boost/test/framework.hpp
new file mode 100644
index 00000000000..6476303f891
--- /dev/null
+++ b/boost/boost/test/framework.hpp
@@ -0,0 +1,124 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: framework.hpp,v $
+//
+// Version : $Revision: 1.5 $
+//
+// Description : defines framework interface
+// ***************************************************************************
+
+#ifndef BOOST_TEST_FRAMEWORK_HPP_020805GER
+#define BOOST_TEST_FRAMEWORK_HPP_020805GER
+
+// Boost.Test
+#include <boost/test/detail/global_typedef.hpp>
+#include <boost/test/detail/fwd_decl.hpp>
+#include <boost/test/utils/trivial_singleton.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+// STL
+#include <stdexcept>
+
+//____________________________________________________________________________//
+
+namespace boost {
+
+namespace unit_test {
+
+// ************************************************************************** //
+// ************** framework ************** //
+// ************************************************************************** //
+
+namespace framework {
+
+// initialization
+BOOST_TEST_DECL void init( int argc, char* argv[] );
+
+// mutation access methods
+BOOST_TEST_DECL void register_test_unit( test_case* tc );
+BOOST_TEST_DECL void register_test_unit( test_suite* ts );
+
+BOOST_TEST_DECL void register_observer( test_observer& );
+BOOST_TEST_DECL void deregister_observer( test_observer& );
+BOOST_TEST_DECL void reset_observers();
+
+BOOST_TEST_DECL master_test_suite_t& master_test_suite();
+
+// constant access methods
+BOOST_TEST_DECL test_case const& current_test_case();
+#if BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x530) )
+template<typename UnitType>
+UnitType const& get( test_unit_id id )
+{
+ return static_cast<UnitType const&>( get( id, (test_unit_type)UnitType::type ) );
+}
+test_unit const& get( test_unit_id, test_unit_type );
+#else
+test_unit const& get( test_unit_id, test_unit_type );
+template<typename UnitType>
+UnitType const& get( test_unit_id id )
+{
+ return static_cast<UnitType const&>( get( id, (test_unit_type)UnitType::type ) );
+}
+#endif
+
+// test initiation
+BOOST_TEST_DECL void run( test_unit_id = INV_TEST_UNIT_ID, bool continue_test = true );
+BOOST_TEST_DECL void run( test_unit const*, bool continue_test = true );
+
+// public test events dispatchers
+BOOST_TEST_DECL void assertion_result( bool passed );
+BOOST_TEST_DECL void exception_caught( execution_exception const& );
+BOOST_TEST_DECL void test_unit_aborted( test_unit const& );
+
+// ************************************************************************** //
+// ************** framework errors ************** //
+// ************************************************************************** //
+
+struct internal_error : std::runtime_error {
+ internal_error( const_string m ) : std::runtime_error( std::string( m.begin(), m.size() ) ) {}
+};
+
+struct setup_error : std::runtime_error {
+ setup_error( const_string m ) : std::runtime_error( std::string( m.begin(), m.size() ) ) {}
+};
+
+} // namespace framework
+
+} // unit_test
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: framework.hpp,v $
+// Revision 1.5 2006/03/19 07:27:52 rogeeff
+// streamline test setup error message
+//
+// Revision 1.4 2005/12/14 05:08:44 rogeeff
+// dll support introduced
+//
+// Revision 1.3 2005/03/24 04:02:32 rogeeff
+// portability fixes
+//
+// Revision 1.2 2005/03/23 21:02:10 rogeeff
+// Sunpro CC 5.3 fixes
+//
+// Revision 1.1 2005/02/20 08:27:05 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_FRAMEWORK_HPP_020805GER
+
diff --git a/boost/boost/test/impl/compiler_log_formatter.ipp b/boost/boost/test/impl/compiler_log_formatter.ipp
new file mode 100644
index 00000000000..57384b7ac22
--- /dev/null
+++ b/boost/boost/test/impl/compiler_log_formatter.ipp
@@ -0,0 +1,214 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: compiler_log_formatter.ipp,v $
+//
+// Version : $Revision: 1.4 $
+//
+// Description : implements compiler like Log formatter
+// ***************************************************************************
+
+#ifndef BOOST_TEST_COMPILER_LOG_FORMATTER_IPP_020105GER
+#define BOOST_TEST_COMPILER_LOG_FORMATTER_IPP_020105GER
+
+// Boost.Test
+#include <boost/test/output/compiler_log_formatter.hpp>
+#include <boost/test/unit_test_suite_impl.hpp>
+#include <boost/test/framework.hpp>
+#include <boost/test/utils/basic_cstring/io.hpp>
+
+// Boost
+#include <boost/version.hpp>
+
+// STL
+#include <iostream>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace boost {
+
+namespace unit_test {
+
+namespace output {
+
+// ************************************************************************** //
+// ************** compiler_log_formatter ************** //
+// ************************************************************************** //
+
+void
+compiler_log_formatter::log_start( std::ostream& output, counter_t test_cases_amount )
+{
+ if( test_cases_amount > 0 )
+ output << "Running " << test_cases_amount << " test "
+ << (test_cases_amount > 1 ? "cases" : "case") << "...\n";
+}
+
+//____________________________________________________________________________//
+
+void
+compiler_log_formatter::log_finish( std::ostream& )
+{
+ // do nothing
+}
+
+//____________________________________________________________________________//
+
+void
+compiler_log_formatter::log_build_info( std::ostream& output )
+{
+ output << "Platform: " << BOOST_PLATFORM << '\n'
+ << "Compiler: " << BOOST_COMPILER << '\n'
+ << "STL : " << BOOST_STDLIB << '\n'
+ << "Boost : " << BOOST_VERSION/100000 << "."
+ << BOOST_VERSION/100 % 1000 << "."
+ << BOOST_VERSION % 100 << std::endl;
+}
+
+//____________________________________________________________________________//
+
+void
+compiler_log_formatter::test_unit_start( std::ostream& output, test_unit const& tu )
+{
+ output << "Entering test " << tu.p_type_name << " \"" << tu.p_name << "\"" << std::endl;
+}
+
+//____________________________________________________________________________//
+
+void
+compiler_log_formatter::test_unit_finish( std::ostream& output, test_unit const& tu, unsigned long elapsed )
+{
+ output << "Leaving test " << tu.p_type_name << " \"" << tu.p_name << "\"";
+
+ if( elapsed > 0 ) {
+ output << "; testing time: ";
+ if( elapsed % 1000 == 0 )
+ output << elapsed/1000 << "ms";
+ else
+ output << elapsed << "mks";
+ }
+
+ output << std::endl;
+}
+
+//____________________________________________________________________________//
+
+void
+compiler_log_formatter::test_unit_skipped( std::ostream& output, test_unit const& tu )
+{
+ output << "Test " << tu.p_type_name << " \"" << tu.p_name << "\"" << "is skipped" << std::endl;
+}
+
+//____________________________________________________________________________//
+
+void
+compiler_log_formatter::log_exception( std::ostream& output, log_checkpoint_data const& checkpoint_data, const_string explanation )
+{
+ print_prefix( output, BOOST_TEST_L( "unknown location" ), 0 );
+ output << "fatal error in \"" << framework::current_test_case().p_name << "\": ";
+
+ if( !explanation.is_empty() )
+ output << explanation;
+ else
+ output << "uncaught exception, system error or abort requested";
+
+
+ if( !checkpoint_data.m_file_name.is_empty() ) {
+ output << '\n';
+ print_prefix( output, checkpoint_data.m_file_name, checkpoint_data.m_line_num );
+ output << "last checkpoint";
+ if( !checkpoint_data.m_message.empty() )
+ output << ": " << checkpoint_data.m_message;
+ }
+
+ output << std::endl;
+}
+
+//____________________________________________________________________________//
+
+void
+compiler_log_formatter::log_entry_start( std::ostream& output, log_entry_data const& entry_data, log_entry_types let )
+{
+ switch( let ) {
+ case BOOST_UTL_ET_INFO:
+ print_prefix( output, entry_data.m_file_name, entry_data.m_line_num );
+ output << "info: ";
+ break;
+ case BOOST_UTL_ET_MESSAGE:
+ break;
+ case BOOST_UTL_ET_WARNING:
+ print_prefix( output, entry_data.m_file_name, entry_data.m_line_num );
+ output << "warning in \"" << framework::current_test_case().p_name << "\": ";
+ break;
+ case BOOST_UTL_ET_ERROR:
+ print_prefix( output, entry_data.m_file_name, entry_data.m_line_num );
+ output << "error in \"" << framework::current_test_case().p_name << "\": ";
+ break;
+ case BOOST_UTL_ET_FATAL_ERROR:
+ print_prefix( output, entry_data.m_file_name, entry_data.m_line_num );
+ output << "fatal error in \"" << framework::current_test_case().p_name << "\": ";
+ break;
+ }
+}
+
+//____________________________________________________________________________//
+
+void
+compiler_log_formatter::log_entry_value( std::ostream& output, const_string value )
+{
+ output << value;
+}
+
+//____________________________________________________________________________//
+
+void
+compiler_log_formatter::log_entry_finish( std::ostream& output )
+{
+ output << std::endl;
+}
+
+//____________________________________________________________________________//
+
+void
+compiler_log_formatter::print_prefix( std::ostream& output, const_string file, std::size_t line )
+{
+ output << file << '(' << line << "): ";
+}
+
+//____________________________________________________________________________//
+
+} // namespace ouptut
+
+} // namespace unit_test
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: compiler_log_formatter.ipp,v $
+// Revision 1.4 2005/12/14 05:26:32 rogeeff
+// report aborted test units
+//
+// Revision 1.3 2005/02/21 10:09:26 rogeeff
+// exception logging changes so that it produce a string recognizable by compiler as an error
+//
+// Revision 1.2 2005/02/20 08:27:06 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// Revision 1.1 2005/02/01 08:59:38 rogeeff
+// supplied_log_formatters split
+// change formatters interface to simplify result interface
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_COMPILER_LOG_FORMATTER_IPP_020105GER
diff --git a/boost/boost/test/impl/cpp_main.ipp b/boost/boost/test/impl/cpp_main.ipp
new file mode 100644
index 00000000000..00a5949dd6d
--- /dev/null
+++ b/boost/boost/test/impl/cpp_main.ipp
@@ -0,0 +1,145 @@
+// (C) Copyright Gennadiy Rozental 2001-2005.
+// (C) Copyright Beman Dawes 1995-2001.
+// 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/test for the library home page.
+//
+// File : $RCSfile: cpp_main.ipp,v $
+//
+// Version : $Revision: 1.7 $
+//
+// Description : main function implementation for Program Executon Monitor
+// ***************************************************************************
+
+#ifndef BOOST_TEST_CPP_MAIN_IPP_012205GER
+#define BOOST_TEST_CPP_MAIN_IPP_012205GER
+
+// Boost.Test
+#include <boost/test/execution_monitor.hpp>
+#include <boost/test/detail/config.hpp>
+#include <boost/test/utils/basic_cstring/io.hpp>
+
+// Boost
+#include <boost/cstdlib.hpp> // for exit codes
+#include <boost/config.hpp> // for workarounds
+
+// STL
+#include <iostream>
+#include <cstdlib> // std::getenv
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+#ifdef BOOST_NO_STDC_NAMESPACE
+namespace std { using ::getenv; }
+#endif
+
+namespace {
+
+struct cpp_main_caller {
+ cpp_main_caller( int (*cpp_main_func)( int argc, char* argv[] ), int argc, char** argv )
+ : m_cpp_main_func( cpp_main_func )
+ , m_argc( argc )
+ , m_argv( argv ) {}
+
+ int operator()() { return (*m_cpp_main_func)( m_argc, m_argv ); }
+
+private:
+ // Data members
+ int (*m_cpp_main_func)( int argc, char* argv[] );
+ int m_argc;
+ char** m_argv;
+};
+
+} // local namespace
+
+// ************************************************************************** //
+// ************** prg_exec_monitor_main ************** //
+// ************************************************************************** //
+
+namespace boost {
+
+int BOOST_TEST_DECL
+prg_exec_monitor_main( int (*cpp_main)( int argc, char* argv[] ), int argc, char* argv[] )
+{
+ int result;
+
+ boost::unit_test::const_string p( std::getenv( "BOOST_TEST_CATCH_SYSTEM_ERRORS" ) );
+ bool catch_system_errors = p != "no";
+
+ try {
+ ::boost::execution_monitor ex_mon;
+ result = ex_mon.execute(
+ ::boost::unit_test::callback0<int>( cpp_main_caller( cpp_main, argc, argv ) ), catch_system_errors );
+
+ if( result == 0 )
+ result = ::boost::exit_success;
+ else if( result != ::boost::exit_success ) {
+ std::cout << "\n**** error return code: " << result << std::endl;
+ result = ::boost::exit_failure;
+ }
+ }
+ catch( ::boost::execution_exception const& exex ) {
+ std::cout << "\n**** exception(" << exex.code() << "): " << exex.what() << std::endl;
+ result = ::boost::exit_exception_failure;
+ }
+
+ if( result != ::boost::exit_success ) {
+ std::cerr << "******** errors detected; see standard output for details ********" << std::endl;
+ }
+ else {
+ // Some prefer a confirming message when all is well, while others don't
+ // like the clutter. Use an environment variable to avoid command
+ // line argument modifications; for use in production programs
+ // that's a no-no in some organizations.
+ ::boost::unit_test::const_string p( std::getenv( "BOOST_PRG_MON_CONFIRM" ) );
+ if( p != "no" ) {
+ std::cerr << std::flush << "no errors detected" << std::endl;
+ }
+ }
+
+ return result;
+}
+
+} // namespace boost
+
+#if !defined(BOOST_TEST_DYN_LINK) && !defined(BOOST_TEST_NO_MAIN)
+
+// ************************************************************************** //
+// ************** main function for tests using lib ************** //
+// ************************************************************************** //
+
+int cpp_main( int argc, char* argv[] ); // prototype for user's cpp_main()
+
+int BOOST_TEST_CALL_DECL
+main( int argc, char* argv[] )
+{
+ return ::boost::prg_exec_monitor_main( &cpp_main, argc, argv );
+}
+
+//____________________________________________________________________________//
+
+#endif // !BOOST_TEST_DYN_LINK && !BOOST_TEST_NO_MAIN
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: cpp_main.ipp,v $
+// Revision 1.7 2006/03/19 11:45:26 rogeeff
+// main function renamed for consistancy
+//
+// Revision 1.6 2005/12/14 05:27:21 rogeeff
+// cpp_main API modified for DLL
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_CPP_MAIN_IPP_012205GER
diff --git a/boost/boost/test/impl/exception_safety.ipp b/boost/boost/test/impl/exception_safety.ipp
new file mode 100644
index 00000000000..d97efb622a1
--- /dev/null
+++ b/boost/boost/test/impl/exception_safety.ipp
@@ -0,0 +1,573 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// Use, modification, and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// See http://www.boost.org/libs/test for the library home page.
+//
+// File : $RCSfile: exception_safety.ipp,v $
+//
+// Version : $Revision: 1.7.2.1 $
+//
+// Description : Facilities to perform exception safety tests
+// ***************************************************************************
+
+#ifndef BOOST_TEST_EXECUTION_SAFETY_IPP_112005GER
+#define BOOST_TEST_EXECUTION_SAFETY_IPP_112005GER
+
+// Boost.Test
+#include <boost/test/detail/config.hpp>
+
+#if !BOOST_WORKAROUND(__GNUC__, < 3) && \
+ !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \
+ !BOOST_WORKAROUND(BOOST_MSVC, <1310) && \
+ !BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x530))
+
+#include <boost/test/detail/global_typedef.hpp>
+#include <boost/test/detail/unit_test_parameters.hpp>
+
+#include <boost/test/utils/callback.hpp>
+#include <boost/test/utils/wrap_stringstream.hpp>
+#include <boost/test/utils/iterator/token_iterator.hpp>
+
+#include <boost/test/interaction_based.hpp>
+#include <boost/test/test_tools.hpp>
+#include <boost/test/unit_test_log.hpp>
+#include <boost/test/framework.hpp>
+#include <boost/test/test_observer.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+// Boost
+#include <boost/lexical_cast.hpp>
+
+// STL
+#include <vector>
+#include <cstdlib>
+#include <map>
+#include <iomanip>
+#include <cctype>
+#include <boost/limits.hpp>
+
+//____________________________________________________________________________//
+
+namespace boost {
+
+using namespace ::boost::unit_test;
+
+namespace itest {
+
+// ************************************************************************** //
+// ************** execution_path_point ************** //
+// ************************************************************************** //
+
+enum exec_path_point_type { EPP_SCOPE, EPP_EXCEPT, EPP_DECISION, EPP_ALLOC };
+
+struct execution_path_point {
+ execution_path_point( exec_path_point_type t, const_string file, std::size_t line_num )
+ : m_type( t )
+ , m_file_name( file )
+ , m_line_num( line_num )
+ {}
+
+ exec_path_point_type m_type;
+ const_string m_file_name;
+ std::size_t m_line_num;
+
+ // Execution path point specific
+ struct decision_data {
+ bool value;
+ unsigned forced_exception_point;
+ };
+ struct scope_data {
+ unsigned size;
+ char const* name;
+ };
+ struct except_data {
+ char const* description;
+ };
+ struct alloc_data {
+ void* ptr;
+ std::size_t size;
+ };
+
+ union {
+ struct decision_data m_decision;
+ struct scope_data m_scope;
+ struct except_data m_except;
+ struct alloc_data m_alloc;
+ };
+};
+
+// ************************************************************************** //
+// ************** exception safety test implementation ************** //
+// ************************************************************************** //
+
+struct exception_safety_tester : itest::manager, test_observer {
+ // helpers types
+ struct unique_exception {};
+
+ // Constructor
+ explicit exception_safety_tester( const_string test_name );
+ ~exception_safety_tester();
+
+ // check last run and prepare for next
+ bool next_execution_path();
+
+ // memory tracking
+
+ // manager interface implementation
+ virtual void exception_point( const_string file, std::size_t line_num, const_string description );
+ virtual bool decision_point( const_string file, std::size_t line_num );
+ virtual unsigned enter_scope( const_string file, std::size_t line_num, const_string scope_name );
+ virtual void leave_scope( unsigned enter_scope_point );
+ virtual void allocated( const_string file, std::size_t line_num, void* p, std::size_t s );
+ virtual void freed( void* p );
+
+ // test observer interface
+ virtual void assertion_result( bool passed );
+ virtual int priority() { return (std::numeric_limits<int>::max)(); } // we want this observer to run the last
+
+private:
+ void failure_point();
+ void report_error();
+
+ typedef std::vector<execution_path_point> exec_path;
+ typedef std::map<void*,unsigned> registry;
+
+ // Data members
+ bool m_internal_activity;
+
+ unsigned m_exception_point_counter;
+ unsigned m_forced_exception_point;
+
+ unsigned m_exec_path_point;
+ exec_path m_execution_path;
+
+ unsigned m_exec_path_counter;
+ unsigned m_break_exec_path;
+
+ bool m_invairant_failed;
+ registry m_memory_in_use;
+};
+
+//____________________________________________________________________________//
+
+struct activity_guard {
+ bool& m_v;
+
+ activity_guard( bool& v ) : m_v( v ) { m_v = true; }
+ ~activity_guard() { m_v = false; }
+};
+
+//____________________________________________________________________________//
+
+exception_safety_tester::exception_safety_tester( const_string test_name )
+: m_internal_activity( true )
+, m_exception_point_counter( 0 )
+, m_forced_exception_point( 1 )
+, m_exec_path_point( 0 )
+, m_exec_path_counter( 1 )
+, m_break_exec_path( (unsigned)-1 )
+, m_invairant_failed( false )
+{
+ framework::register_observer( *this );
+
+ if( !runtime_config::break_exec_path().is_empty() ) {
+ using namespace unit_test;
+
+ string_token_iterator tit( runtime_config::break_exec_path(),
+ (dropped_delimeters = ":",kept_delimeters = " ") );
+
+ const_string test_to_break = *tit;
+
+ if( test_to_break == test_name ) {
+ ++tit;
+
+ m_break_exec_path = lexical_cast<unsigned>( *tit );
+ }
+ }
+
+ m_internal_activity = false;
+}
+
+//____________________________________________________________________________//
+
+exception_safety_tester::~exception_safety_tester()
+{
+ m_internal_activity = true;
+
+ framework::deregister_observer( *this );
+}
+
+//____________________________________________________________________________//
+
+bool
+exception_safety_tester::next_execution_path()
+{
+ activity_guard ag( m_internal_activity );
+
+ // check memory usage
+ if( m_execution_path.size() > 0 ) {
+ bool errors_detected = m_invairant_failed || (m_memory_in_use.size() != 0);
+ framework::assertion_result( !errors_detected );
+
+ if( errors_detected )
+ report_error();
+
+ m_memory_in_use.clear();
+ }
+
+ m_exec_path_point = 0;
+ m_exception_point_counter = 0;
+ m_invairant_failed = false;
+ ++m_exec_path_counter;
+
+ while( m_execution_path.size() > 0 ) {
+ switch( m_execution_path.back().m_type ) {
+ case EPP_SCOPE:
+ case EPP_ALLOC:
+ m_execution_path.pop_back();
+ break;
+
+ case EPP_DECISION:
+ if( !m_execution_path.back().m_decision.value ) {
+ m_execution_path.pop_back();
+ break;
+ }
+
+ m_execution_path.back().m_decision.value = false;
+ m_forced_exception_point = m_execution_path.back().m_decision.forced_exception_point;
+ return true;
+
+ case EPP_EXCEPT:
+ m_execution_path.pop_back();
+ ++m_forced_exception_point;
+ return true;
+ }
+ }
+
+ BOOST_TEST_MESSAGE( "Total tested " << --m_exec_path_counter << " execution path" );
+
+ return false;
+}
+
+//____________________________________________________________________________//
+
+void
+exception_safety_tester::exception_point( const_string file, std::size_t line_num, const_string description )
+{
+ activity_guard ag( m_internal_activity );
+
+ if( ++m_exception_point_counter == m_forced_exception_point ) {
+ m_execution_path.push_back(
+ execution_path_point( EPP_EXCEPT, file, line_num ) );
+
+ m_execution_path.back().m_except.description = description.begin();
+
+ ++m_exec_path_point;
+
+ failure_point();
+ }
+}
+
+//____________________________________________________________________________//
+
+bool
+exception_safety_tester::decision_point( const_string file, std::size_t line_num )
+{
+ activity_guard ag( m_internal_activity );
+
+ if( m_exec_path_point < m_execution_path.size() ) {
+ BOOST_REQUIRE_MESSAGE( m_execution_path[m_exec_path_point].m_type == EPP_DECISION &&
+ m_execution_path[m_exec_path_point].m_file_name == file &&
+ m_execution_path[m_exec_path_point].m_line_num == line_num,
+ "Function under test exibit non-deterministic behavior" );
+ }
+ else {
+ m_execution_path.push_back(
+ execution_path_point( EPP_DECISION, file, line_num ) );
+
+ m_execution_path.back().m_decision.value = true;
+ m_execution_path.back().m_decision.forced_exception_point = m_forced_exception_point;
+ }
+
+ return m_execution_path[m_exec_path_point++].m_decision.value;
+}
+
+//____________________________________________________________________________//
+
+unsigned
+exception_safety_tester::enter_scope( const_string file, std::size_t line_num, const_string scope_name )
+{
+ activity_guard ag( m_internal_activity );
+
+ if( m_exec_path_point < m_execution_path.size() ) {
+ BOOST_REQUIRE_MESSAGE( m_execution_path[m_exec_path_point].m_type == EPP_SCOPE &&
+ m_execution_path[m_exec_path_point].m_file_name == file &&
+ m_execution_path[m_exec_path_point].m_line_num == line_num,
+ "Function under test exibit non-deterministic behavior" );
+ }
+ else {
+ m_execution_path.push_back(
+ execution_path_point( EPP_SCOPE, file, line_num ) );
+ }
+
+ m_execution_path[m_exec_path_point].m_scope.size = 0;
+ m_execution_path[m_exec_path_point].m_scope.name = scope_name.begin();
+
+ return m_exec_path_point++;
+}
+
+//____________________________________________________________________________//
+
+void
+exception_safety_tester::leave_scope( unsigned enter_scope_point )
+{
+ activity_guard ag( m_internal_activity );
+
+ BOOST_REQUIRE_MESSAGE( m_execution_path[enter_scope_point].m_type == EPP_SCOPE,
+ "Function under test exibit non-deterministic behavior" );
+
+ m_execution_path[enter_scope_point].m_scope.size = m_exec_path_point - enter_scope_point;
+}
+
+//____________________________________________________________________________//
+
+void
+exception_safety_tester::allocated( const_string file, std::size_t line_num, void* p, std::size_t s )
+{
+ if( m_internal_activity )
+ return;
+
+ activity_guard ag( m_internal_activity );
+
+ if( m_exec_path_point < m_execution_path.size() )
+ BOOST_REQUIRE_MESSAGE( m_execution_path[m_exec_path_point].m_type == EPP_ALLOC,
+ "Function under test exibit non-deterministic behavior" );
+ else
+ m_execution_path.push_back(
+ execution_path_point( EPP_ALLOC, file, line_num ) );
+
+ m_execution_path[m_exec_path_point].m_alloc.ptr = p;
+ m_execution_path[m_exec_path_point].m_alloc.size = s;
+
+ m_memory_in_use.insert( std::make_pair( p, m_exec_path_point++ ) );
+}
+
+//____________________________________________________________________________//
+
+void
+exception_safety_tester::freed( void* p )
+{
+ if( m_internal_activity )
+ return;
+
+ activity_guard ag( m_internal_activity );
+
+ registry::iterator it = m_memory_in_use.find( p );
+ if( it != m_memory_in_use.end() ) {
+ m_execution_path[it->second].m_alloc.ptr = 0;
+ m_memory_in_use.erase( it );
+ }
+}
+
+//____________________________________________________________________________//
+
+void
+exception_safety_tester::assertion_result( bool passed )
+{
+ if( !m_internal_activity && !passed ) {
+ m_invairant_failed = true;
+
+ failure_point();
+ }
+}
+
+//____________________________________________________________________________//
+
+void
+exception_safety_tester::failure_point()
+{
+ if( m_exec_path_counter == m_break_exec_path )
+ BOOST_ASSERT( false );
+
+ throw unique_exception();
+}
+
+//____________________________________________________________________________//
+
+namespace {
+
+inline void
+format_location( wrap_stringstream& formatter, execution_path_point const& p, unsigned indent )
+{
+ if( indent )
+ formatter << std::left << std::setw( indent ) << "";
+
+// !! ?? optional if( p.m_file_name )
+// formatter << p.m_file_name << '(' << p.m_line_num << "): ";
+}
+
+//____________________________________________________________________________//
+
+template<typename ExecPathIt>
+inline void
+format_execution_path( wrap_stringstream& formatter, ExecPathIt it, ExecPathIt end, unsigned indent = 0 )
+{
+ while( it != end ) {
+ switch( it->m_type ) {
+ case EPP_SCOPE:
+ format_location( formatter, *it, indent );
+ formatter << "> \"" << it->m_scope.name << "\"\n";
+ format_execution_path( formatter, it+1, it + it->m_scope.size, indent + 2 );
+ format_location( formatter, *it, indent );
+ formatter << "< \"" << it->m_scope.name << "\"\n";
+ it += it->m_scope.size;
+ break;
+
+ case EPP_DECISION:
+ format_location( formatter, *it, indent );
+ formatter << "Decision made as " << std::boolalpha << it->m_decision.value << '\n';
+ ++it;
+ break;
+
+ case EPP_EXCEPT:
+ format_location( formatter, *it, indent );
+ formatter << "Forced failure";
+ if( it->m_except.description )
+ formatter << ": " << it->m_except.description;
+ formatter << "\n";
+ ++it;
+ break;
+
+ case EPP_ALLOC:
+ if( it->m_alloc.ptr ) {
+ format_location( formatter, *it, indent );
+ formatter << "Allocated memory block 0x" << std::uppercase << it->m_alloc.ptr
+ << ", " << it->m_alloc.size << " bytes long: <";
+
+ unsigned i;
+ for( i = 0; i < std::min<std::size_t>( it->m_alloc.size, 8 ); i++ ) {
+ unsigned char c = ((unsigned char*)it->m_alloc.ptr)[i];
+ if( std::isprint( c ) )
+ formatter << c;
+ else
+ formatter << '.';
+ }
+
+ formatter << "> ";
+
+ for( i = 0; i < std::min<std::size_t>( it->m_alloc.size, 8 ); i++ ) {
+ unsigned c = ((unsigned char*)it->m_alloc.ptr)[i];
+ formatter << std::hex << std::uppercase << c << ' ';
+ }
+
+ formatter << "\n";
+ }
+ ++it;
+ break;
+ }
+ }
+}
+
+//____________________________________________________________________________//
+
+} // local namespace
+
+void
+exception_safety_tester::report_error()
+{
+ activity_guard ag( m_internal_activity );
+
+ unit_test_log << unit_test::log::begin( m_execution_path.back().m_file_name,
+ m_execution_path.back().m_line_num )
+ << log_all_errors;
+
+ wrap_stringstream formatter;
+
+ if( m_invairant_failed )
+ formatter << "Failed invariant";
+
+ if( m_memory_in_use.size() != 0 ) {
+ if( m_invairant_failed )
+ formatter << " and ";
+
+ formatter << m_memory_in_use.size() << " memory leak";
+ if( m_memory_in_use.size() > 1 )
+ formatter << 's';
+ }
+ formatter << " detected in the execution path " << m_exec_path_counter << ":\n";
+
+ format_execution_path( formatter, m_execution_path.begin(), m_execution_path.end() );
+
+ unit_test_log << const_string( formatter.str() ) << unit_test::log::end();
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// ************** exception safety test ************** //
+// ************************************************************************** //
+
+void BOOST_TEST_DECL
+exception_safety( callback0<> const& F, const_string test_name )
+{
+ exception_safety_tester est( test_name );
+
+ do {
+ try {
+ F();
+ }
+ catch( exception_safety_tester::unique_exception const& ) {}
+
+ } while( est.next_execution_path() );
+}
+
+//____________________________________________________________________________//
+
+} // namespace itest
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // non-ancient compiler
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: exception_safety.ipp,v $
+// Revision 1.7.2.1 2006/07/27 11:48:49 gennaro_prota
+// boost guidelines (mainly from inspect tool: tabs, license reference text, etc.); more to do...
+//
+// Revision 1.7 2006/02/23 15:10:00 rogeeff
+// vc70 out
+//
+// Revision 1.6 2006/02/06 10:06:56 rogeeff
+// MSVC restored for now
+//
+// Revision 1.5 2006/01/28 08:52:35 rogeeff
+// operator new overloads made inline to:
+// 1. prevent issues with export them from DLL
+// 2. release link issue fixed
+//
+// Revision 1.4 2006/01/15 11:14:39 rogeeff
+// simpl_mock -> mock_object<>::prototype()
+// operator new need to be rethinked
+//
+// Revision 1.3 2005/12/22 15:49:32 rogeeff
+// sunpro port
+// made operator new conformant
+//
+// Revision 1.2 2005/12/16 02:33:17 rogeeff
+// portability fix
+//
+// Revision 1.1 2005/12/14 05:56:09 rogeeff
+// exception safety testing introduced
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_EXECUTION_SAFETY_IPP_112005GER
diff --git a/boost/boost/test/impl/execution_monitor.ipp b/boost/boost/test/impl/execution_monitor.ipp
new file mode 100644
index 00000000000..f4ebadcf36d
--- /dev/null
+++ b/boost/boost/test/impl/execution_monitor.ipp
@@ -0,0 +1,711 @@
+// (C) Copyright Gennadiy Rozental 2001-2005.
+// (C) Copyright Beman Dawes and Ullrich Koethe 1995-2001.
+// Use, modification, and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// See http://www.boost.org/libs/test for the library home page.
+//
+// File : $RCSfile: execution_monitor.ipp,v $
+//
+// Version : $Revision: 1.13 $
+//
+// Description : provides execution monitor implementation for all supported
+// configurations, including Microsoft structured exception based, unix signals
+// based and special workarounds for borland
+//
+// Note that when testing requirements or user wishes preclude use of this
+// file as a separate compilation unit, it may be included as a header file.
+//
+// Header dependencies are deliberately restricted to reduce coupling to other
+// boost libraries.
+// ***************************************************************************
+
+#ifndef BOOST_TEST_EXECUTION_MONITOR_IPP_012205GER
+#define BOOST_TEST_EXECUTION_MONITOR_IPP_012205GER
+
+// Boost.Test
+#include <boost/test/detail/config.hpp>
+#include <boost/test/detail/workaround.hpp>
+#include <boost/test/execution_monitor.hpp>
+
+// Boost
+#include <boost/cstdlib.hpp> // for exit codes
+#include <boost/config.hpp> // for workarounds
+
+// STL
+#include <string> // for std::string
+#include <new> // for std::bad_alloc
+#include <typeinfo> // for std::bad_cast, std::bad_typeid
+#include <exception> // for std::exception, std::bad_exception
+#include <stdexcept> // for std exception hierarchy
+#include <cstring> // for C string API
+#include <cassert> // for assert
+#include <cstddef> // for NULL
+
+#ifdef BOOST_NO_STDC_NAMESPACE
+namespace std { using ::strlen; using ::strncat; }
+#endif
+
+// Microsoft + other compatible compilers such as Intel
+#if !defined(BOOST_DISABLE_WIN32) && \
+ !defined(__BORLANDC__) && \
+ (defined(_MSC_VER) && !defined(__COMO__)) || \
+ (BOOST_WORKAROUND(__MWERKS__, >= 0x3000) && defined(__INTEL__))
+
+# define BOOST_MS_STRUCTURED_EXCEPTION_HANDLING
+
+# ifndef _WIN32_WINNT
+# ifdef _WINBASE_
+# warning Debugger check disabled. Either define _WIN32_WINNT or include Boost.Test header in front of winbase.h
+# else
+# define BOOST_TEST_DEBUGGER_CHECK
+# define _WIN32_WINNT 0x0400
+# endif
+# endif
+
+# include <wtypes.h>
+# include <winbase.h>
+# include <excpt.h>
+# include <eh.h>
+
+# if !defined(NDEBUG) && !defined(__MWERKS__) // __MWERKS__ does not seem to supply implementation of C runtime debug hooks, causing linking errors
+# define BOOST_MS_CRT_DEBUG_HOOKS
+# include <crtdbg.h>
+# endif
+
+#elif (defined(__BORLANDC__) && defined(_Windows) && !defined(BOOST_DISABLE_WIN32))
+
+# define BOOST_MS_STRUCTURED_EXCEPTION_HANDLING
+# include <windows.h> // Borland 5.5.1 has its own way of doing things.
+
+#elif defined(BOOST_HAS_SIGACTION)
+
+# define BOOST_SIGACTION_BASED_SIGNAL_HANDLING
+
+# include <unistd.h>
+# include <signal.h>
+# include <setjmp.h>
+
+#else
+
+# define BOOST_NO_SIGNAL_HANDLING
+
+#endif
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace boost {
+
+namespace detail {
+
+using unit_test::const_string;
+
+// boost::execution_monitor::execute() calls boost::detail::report_error(...) to
+// report any caught exception and throw execution_exception
+
+const std::size_t REPORT_ERROR_BUFFER_SIZE = 512;
+
+static void report_error(
+ execution_exception::error_code ec,
+ const_string msg1, // first part of the message
+ const_string msg2 = "" ); // second part of the message; sum length msg1 + msg2 should not
+ // exceed REPORT_ERROR_BUFFER_SIZE; never concatenate messages
+ // manually, cause it should work even in case of memory lack
+
+//____________________________________________________________________________//
+
+// Declaration for Microsoft structured exception handling (unix alternative - signal)
+#ifdef BOOST_MS_STRUCTURED_EXCEPTION_HANDLING
+
+// this class defined per the Microsoft structured exception documentation
+class ms_se_exception {
+public:
+ // Constructor
+ explicit ms_se_exception( unsigned int n )
+ : m_se_id( n ) {}
+
+ // Destructor
+ ~ms_se_exception() {}
+
+ // access methods
+ unsigned int id() const { return m_se_id; }
+
+private:
+ // Data members
+ unsigned int m_se_id;
+};
+
+//____________________________________________________________________________//
+
+void BOOST_TEST_CALL_DECL ms_se_trans_func( unsigned int id, _EXCEPTION_POINTERS* exps );
+void BOOST_TEST_CALL_DECL ms_se_forward_func( unsigned int id, _EXCEPTION_POINTERS* exps );
+static void report_ms_se_error( unsigned int id );
+
+//____________________________________________________________________________//
+
+// Declarations for unix-style signal handling
+#elif defined(BOOST_SIGACTION_BASED_SIGNAL_HANDLING)
+
+class unix_signal_exception {
+ typedef execution_exception::error_code error_code_type;
+public:
+ // Constructor
+ unix_signal_exception( execution_exception::error_code ec, const_string em )
+ : m_error_code( ec ), m_error_message( em ) {}
+
+ // Destructor
+ ~unix_signal_exception() {}
+
+ // access methods
+ error_code_type error_code() const { return m_error_code; }
+ const_string error_message() const { return m_error_message; }
+private:
+ // Data members
+ error_code_type m_error_code;
+ const_string m_error_message;
+};
+
+#endif
+
+//____________________________________________________________________________//
+
+#if defined(BOOST_MS_CRT_DEBUG_HOOKS)
+
+int BOOST_TEST_CALL_DECL
+assert_reporting_function( int reportType, char* userMessage, int* retVal )
+{
+ switch( reportType ) {
+ case _CRT_ASSERT:
+ detail::report_error( execution_exception::user_error, userMessage );
+
+ return 1; // return value and retVal are not important since we never reach this line
+ case _CRT_ERROR:
+ detail::report_error( execution_exception::system_error, userMessage );
+
+ return 1; // return value and retVal are not important since we never reach this line
+ default:
+ return 0; // use usual reporting method
+ }
+}
+
+#endif
+
+} // namespace detail
+
+// ************************************************************************** //
+// ************** execution_monitor ************** //
+// ************************************************************************** //
+
+int
+execution_monitor::execute( unit_test::callback0<int> const& F, bool catch_system_errors, int timeout )
+{
+ using unit_test::const_string;
+
+# ifdef BOOST_TEST_DEBUGGER_CHECK
+ if( IsDebuggerPresent() )
+ catch_system_errors = false;
+#endif
+
+#if defined(BOOST_MS_STRUCTURED_EXCEPTION_HANDLING) && !defined(__BORLANDC__)
+ if( catch_system_errors )
+ _set_se_translator( detail::ms_se_trans_func );
+ else
+ _set_se_translator( detail::ms_se_forward_func );
+#endif
+
+#ifdef BOOST_MS_CRT_DEBUG_HOOKS
+ if( catch_system_errors )
+ _CrtSetReportHook( &detail::assert_reporting_function );
+#endif
+
+ try {
+ return catch_signals( F, catch_system_errors, timeout );
+ }
+
+ // Catch-clause reference arguments are a bit different from function
+ // arguments (ISO 15.3 paragraphs 18 & 19). Apparently const isn't
+ // required. Programmers ask for const anyhow, so we supply it. That's
+ // easier than answering questions about non-const usage.
+
+ catch( char const* ex )
+ { detail::report_error( execution_exception::cpp_exception_error, "C string: ", ex ); }
+ catch( std::string const& ex )
+ { detail::report_error( execution_exception::cpp_exception_error, "std::string: ", ex.c_str() ); }
+
+ // std:: exceptions
+
+ catch( std::bad_alloc const& ex )
+ { detail::report_error( execution_exception::cpp_exception_error, "std::bad_alloc: ", ex.what() ); }
+
+#if BOOST_WORKAROUND(__BORLANDC__, <= 0x0551)
+ catch( std::bad_cast const& ex )
+ { detail::report_error( execution_exception::cpp_exception_error, "std::bad_cast" ); }
+ catch( std::bad_typeid const& ex )
+ { detail::report_error( execution_exception::cpp_exception_error, "std::bad_typeid" ); }
+#else
+ catch( std::bad_cast const& ex )
+ { detail::report_error( execution_exception::cpp_exception_error, "std::bad_cast: ", ex.what() ); }
+ catch( std::bad_typeid const& ex )
+ { detail::report_error( execution_exception::cpp_exception_error, "std::bad_typeid: ", ex.what() ); }
+#endif
+
+ catch( std::bad_exception const& ex )
+ { detail::report_error( execution_exception::cpp_exception_error, "std::bad_exception: ", ex.what() ); }
+ catch( std::domain_error const& ex )
+ { detail::report_error( execution_exception::cpp_exception_error, "std::domain_error: ", ex.what() ); }
+ catch( std::invalid_argument const& ex )
+ { detail::report_error( execution_exception::cpp_exception_error, "std::invalid_argument: ", ex.what() ); }
+ catch( std::length_error const& ex )
+ { detail::report_error( execution_exception::cpp_exception_error, "std::length_error: ", ex.what() ); }
+ catch( std::out_of_range const& ex )
+ { detail::report_error( execution_exception::cpp_exception_error, "std::out_of_range: ", ex.what() ); }
+ catch( std::range_error const& ex )
+ { detail::report_error( execution_exception::cpp_exception_error, "std::range_error: ", ex.what() ); }
+ catch( std::overflow_error const& ex )
+ { detail::report_error( execution_exception::cpp_exception_error, "std::overflow_error: ", ex.what() ); }
+ catch( std::underflow_error const& ex )
+ { detail::report_error( execution_exception::cpp_exception_error, "std::underflow_error: ", ex.what() ); }
+ catch( std::logic_error const& ex )
+ { detail::report_error( execution_exception::cpp_exception_error, "std::logic_error: ", ex.what() ); }
+ catch( std::runtime_error const& ex )
+ { detail::report_error( execution_exception::cpp_exception_error, "std::runtime_error: ", ex.what() ); }
+ catch( std::exception const& ex )
+ { detail::report_error( execution_exception::cpp_exception_error, "std::exception: ", ex.what() ); }
+
+#if defined(BOOST_MS_STRUCTURED_EXCEPTION_HANDLING)
+ catch( detail::ms_se_exception const& ex )
+ { detail::report_ms_se_error( ex.id() ); }
+#elif defined(BOOST_SIGACTION_BASED_SIGNAL_HANDLING)
+ catch( detail::unix_signal_exception const& ex )
+ { detail::report_error( ex.error_code(), ex.error_message() ); }
+#endif // BOOST_SIGACTION_BASED_SIGNAL_HANDLING
+
+ catch( execution_aborted const& )
+ { return 0; }
+
+ catch( execution_exception const& )
+ { throw; }
+
+ catch( ... )
+ { detail::report_error( execution_exception::cpp_exception_error, "unknown type" ); }
+
+ return 0; // never reached; supplied to quiet compiler warnings
+} // execute
+
+//____________________________________________________________________________//
+
+#if defined(BOOST_SIGACTION_BASED_SIGNAL_HANDLING)
+
+// ************************************************************************** //
+// ************** boost::detail::signal_handler ************** //
+// ************************************************************************** //
+
+namespace detail {
+
+class signal_handler {
+public:
+ // Constructor
+ explicit signal_handler( bool catch_system_errors, int timeout );
+
+ // Destructor
+ ~signal_handler();
+
+ // access methods
+ static sigjmp_buf& jump_buffer()
+ {
+ assert( !!s_active_handler );
+
+ return s_active_handler->m_sigjmp_buf;
+ }
+
+private:
+ // Data members
+ struct sigaction m_same_action_for_all_signals;
+ struct sigaction m_old_SIGFPE_action;
+ struct sigaction m_old_SIGTRAP_action;
+ struct sigaction m_old_SIGSEGV_action;
+ struct sigaction m_old_SIGBUS_action;
+ struct sigaction m_old_SIGABRT_action;
+ struct sigaction m_old_SIGALRM_action;
+
+ sigjmp_buf m_sigjmp_buf;
+
+ signal_handler* m_prev_handler;
+ static signal_handler* s_active_handler;
+
+ bool m_catch_system_errors;
+ bool m_set_timeout;
+};
+
+signal_handler* signal_handler::s_active_handler = NULL; // !! need to be placed in thread specific storage
+
+//____________________________________________________________________________//
+
+extern "C" {
+
+static void execution_monitor_signal_handler( int sig )
+{
+ siglongjmp( signal_handler::jump_buffer(), sig );
+}
+
+}
+
+//____________________________________________________________________________//
+
+signal_handler::signal_handler( bool catch_system_errors, int timeout )
+: m_prev_handler( s_active_handler )
+, m_catch_system_errors( catch_system_errors )
+, m_set_timeout( timeout > 0 )
+{
+ s_active_handler = this;
+
+ if( m_catch_system_errors || m_set_timeout ) {
+ m_same_action_for_all_signals.sa_flags = 0;
+ m_same_action_for_all_signals.sa_handler = &execution_monitor_signal_handler;
+ sigemptyset( &m_same_action_for_all_signals.sa_mask );
+ }
+
+ if( m_catch_system_errors ) {
+ sigaction( SIGFPE , &m_same_action_for_all_signals, &m_old_SIGFPE_action );
+ sigaction( SIGTRAP, &m_same_action_for_all_signals, &m_old_SIGTRAP_action );
+ sigaction( SIGSEGV, &m_same_action_for_all_signals, &m_old_SIGSEGV_action );
+ sigaction( SIGBUS , &m_same_action_for_all_signals, &m_old_SIGBUS_action );
+ sigaction( SIGABRT, &m_same_action_for_all_signals, &m_old_SIGABRT_action );
+ }
+
+ if( m_set_timeout ) {
+ sigaction( SIGALRM , &m_same_action_for_all_signals, &m_old_SIGALRM_action );
+ alarm( timeout );
+ }
+}
+
+//____________________________________________________________________________//
+
+signal_handler::~signal_handler()
+{
+ typedef struct sigaction* sigaction_ptr;
+
+ assert( s_active_handler == this );
+
+ if( m_set_timeout ) {
+ alarm( 0 );
+ sigaction( SIGALRM, &m_old_SIGALRM_action, sigaction_ptr() );
+ }
+
+ if( m_catch_system_errors ) {
+ sigaction( SIGFPE , &m_old_SIGFPE_action , sigaction_ptr() );
+ sigaction( SIGTRAP, &m_old_SIGTRAP_action, sigaction_ptr() );
+ sigaction( SIGSEGV, &m_old_SIGSEGV_action, sigaction_ptr() );
+ sigaction( SIGBUS , &m_old_SIGBUS_action , sigaction_ptr() );
+ sigaction( SIGABRT, &m_old_SIGABRT_action, sigaction_ptr() );
+ }
+
+ s_active_handler = m_prev_handler;
+}
+
+//____________________________________________________________________________//
+
+} // namespace detail
+
+// ************************************************************************** //
+// ************** execution_monitor::catch_signals ************** //
+// ************************************************************************** //
+
+int
+execution_monitor::catch_signals( unit_test::callback0<int> const& F, bool catch_system_errors, int timeout )
+{
+ using namespace detail;
+
+ signal_handler local_signal_handler( catch_system_errors, timeout );
+
+ volatile int sigtype = sigsetjmp( signal_handler::jump_buffer(), 1 );
+
+ typedef execution_exception::error_code ec_type;
+ int result = 0;
+ ec_type ec = execution_exception::no_error;
+ const_string em;
+
+ if( sigtype == 0 ) {
+ result = m_custom_translators ? (*m_custom_translators)( F ) : F();
+ }
+ else {
+ switch(sigtype) {
+ case SIGALRM:
+ ec = execution_exception::timeout_error;
+ em = BOOST_TEST_L( "signal: SIGALRM (timeout while executing function)" );
+ break;
+ case SIGTRAP:
+ ec = execution_exception::system_error;
+ em = BOOST_TEST_L( "signal: SIGTRAP (perhaps integer divide by zero)" );
+ break;
+ case SIGFPE:
+ ec = execution_exception::system_error;
+ em = BOOST_TEST_L( "signal: SIGFPE (arithmetic exception)" );
+ break;
+ case SIGABRT:
+ ec = execution_exception::system_error;
+ em = BOOST_TEST_L( "signal: SIGABRT (application abort requested)" );
+ break;
+ case SIGSEGV:
+ case SIGBUS:
+ ec = execution_exception::system_fatal_error;
+ em = BOOST_TEST_L( "memory access violation" );
+ break;
+ default:
+ ec = execution_exception::system_error;
+ em = BOOST_TEST_L( "unrecognized signal" );
+ }
+ }
+
+ if( ec != execution_exception::no_error )
+ throw unix_signal_exception( ec, em );
+
+ return result;
+} // unix catch_signals
+
+//____________________________________________________________________________//
+
+#elif (defined(__BORLANDC__) && defined(_Windows) && !defined(BOOST_DISABLE_WIN32))
+
+// this works for Borland but not other Win32 compilers (which trap too many cases)
+int
+execution_monitor::catch_signals( unit_test::callback0<int> const& F, bool catch_system_errors, int )
+{
+ int result;
+
+ if( catch_system_errors ) {
+ __try { result = m_custom_translators ? (*m_custom_translators)( F ) : F(); }
+
+ __except (1) {
+ throw detail::ms_se_exception( GetExceptionCode() );
+ }
+ }
+ else
+ result = m_custom_translators ? (*m_custom_translators)( F ) : F();
+
+ return result;
+}
+
+#else // default signal handler
+
+int
+execution_monitor::catch_signals( unit_test::callback0<int> const& F, bool, int )
+{
+ return m_custom_translators ? (*m_custom_translators)( F ) : F();
+}
+
+#endif // choose signal handler
+
+// ************************************************************************** //
+// ************** Microsoft structured exception handling ************** //
+// ************************************************************************** //
+
+#if defined(BOOST_MS_STRUCTURED_EXCEPTION_HANDLING)
+
+namespace detail {
+
+void BOOST_TEST_CALL_DECL
+ms_se_trans_func( unsigned int id, _EXCEPTION_POINTERS* /* exps */ )
+{
+ throw ms_se_exception( id );
+}
+
+//____________________________________________________________________________//
+
+void BOOST_TEST_CALL_DECL
+ms_se_forward_func( unsigned int /* id */, _EXCEPTION_POINTERS* /* exps */ )
+{
+ throw;
+}
+
+//____________________________________________________________________________//
+
+void
+report_ms_se_error( unsigned int id )
+{
+ switch( id ) {
+ // cases classified as fatal_system_error
+ case EXCEPTION_ACCESS_VIOLATION:
+ detail::report_error( execution_exception::system_fatal_error, "memory access violation" );
+ break;
+
+ case EXCEPTION_ILLEGAL_INSTRUCTION:
+ detail::report_error( execution_exception::system_fatal_error, "illegal instruction" );
+ break;
+
+ case EXCEPTION_PRIV_INSTRUCTION:
+ detail::report_error( execution_exception::system_fatal_error, "privileged instruction" );
+ break;
+
+ case EXCEPTION_IN_PAGE_ERROR:
+ detail::report_error( execution_exception::system_fatal_error, "memory page error" );
+ break;
+
+ case EXCEPTION_STACK_OVERFLOW:
+ detail::report_error( execution_exception::system_fatal_error, "stack overflow" );
+ break;
+
+ // cases classified as (non-fatal) system_trap
+ case EXCEPTION_DATATYPE_MISALIGNMENT:
+ detail::report_error( execution_exception::system_error, "data misalignment" );
+ break;
+
+ case EXCEPTION_INT_DIVIDE_BY_ZERO:
+ detail::report_error( execution_exception::system_error, "integer divide by zero" );
+ break;
+
+ case EXCEPTION_INT_OVERFLOW:
+ detail::report_error( execution_exception::system_error, "integer overflow" );
+ break;
+
+ case EXCEPTION_ARRAY_BOUNDS_EXCEEDED:
+ detail::report_error( execution_exception::system_error, "array bounds exceeded" );
+ break;
+
+ case EXCEPTION_FLT_DIVIDE_BY_ZERO:
+ detail::report_error( execution_exception::system_error, "floating point divide by zero" );
+ break;
+
+ case EXCEPTION_FLT_STACK_CHECK:
+ detail::report_error( execution_exception::system_error, "floating point stack check" );
+ break;
+
+ case EXCEPTION_FLT_DENORMAL_OPERAND:
+ case EXCEPTION_FLT_INEXACT_RESULT:
+ case EXCEPTION_FLT_INVALID_OPERATION:
+ case EXCEPTION_FLT_OVERFLOW:
+ case EXCEPTION_FLT_UNDERFLOW:
+ detail::report_error( execution_exception::system_error, "floating point error" );
+ break;
+
+ default:
+ detail::report_error( execution_exception::system_error, "unrecognized exception or signal" );
+ break;
+ } // switch
+} // report_ms_se_error
+
+//____________________________________________________________________________//
+
+} // namespace detail
+
+#endif // Microsoft structured exception handling
+
+// ************************************************************************** //
+// ************** report_error ************** //
+// ************************************************************************** //
+
+namespace detail {
+
+static void report_error( execution_exception::error_code ec, const_string msg1, const_string msg2 )
+{
+ static char buf[REPORT_ERROR_BUFFER_SIZE];
+
+ buf[0] = '\0';
+
+ std::strncat( buf, msg1.begin(), sizeof(buf)-1 );
+ std::strncat( buf, msg2.begin(), sizeof(buf) - msg1.size() - 1 );
+
+ throw execution_exception( ec, buf );
+}
+
+//____________________________________________________________________________//
+
+} // namespace detail
+
+// ************************************************************************** //
+// ************** detect_memory_leaks ************** //
+// ************************************************************************** //
+
+void
+detect_memory_leaks( bool on_off )
+{
+ unit_test::ut_detail::ignore_unused_variable_warning( on_off );
+
+#ifdef BOOST_MS_CRT_DEBUG_HOOKS
+ int flags = _CrtSetDbgFlag( _CRTDBG_REPORT_FLAG );
+
+ if( !on_off )
+ flags &= ~_CRTDBG_LEAK_CHECK_DF;
+ else {
+ flags |= _CRTDBG_LEAK_CHECK_DF;
+ _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE);
+ _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDOUT);
+ }
+
+ _CrtSetDbgFlag ( flags );
+#endif // BOOST_MS_CRT_DEBUG_HOOKS
+}
+
+//____________________________________________________________________________//
+
+void
+break_memory_alloc( long mem_alloc_order_num )
+{
+ unit_test::ut_detail::ignore_unused_variable_warning( mem_alloc_order_num );
+
+#ifdef BOOST_MS_CRT_DEBUG_HOOKS
+ _CrtSetBreakAlloc( mem_alloc_order_num );
+#endif // BOOST_MS_CRT_DEBUG_HOOKS
+}
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: execution_monitor.ipp,v $
+// Revision 1.13 2006/02/22 16:14:45 rogeeff
+// reagance to eliminate warning
+//
+// Revision 1.12 2006/01/30 07:29:49 rogeeff
+// split memory leaks detection API in two to get more functions with better defined roles
+//
+// Revision 1.11 2006/01/15 09:47:43 rogeeff
+// make common message
+//
+// Revision 1.10 2005/12/14 05:52:49 rogeeff
+// *** empty log message ***
+//
+// Revision 1.9 2005/04/30 17:07:22 rogeeff
+// ignore_warning included
+//
+// Revision 1.8 2005/04/30 16:46:50 rogeeff
+// warning suppressed
+//
+// Revision 1.7 2005/04/13 05:32:03 rogeeff
+// typo fix
+//
+// Revision 1.6 2005/04/05 06:11:37 rogeeff
+// memory leak allocation point detection\nextra help with _WIN32_WINNT
+//
+// Revision 1.5 2005/02/20 08:27:07 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// Revision 1.4 2005/02/01 06:40:07 rogeeff
+// copyright update
+// old log entries removed
+// minor stilistic changes
+// depricated tools removed
+//
+// Revision 1.3 2005/01/31 07:50:06 rogeeff
+// cdecl portability fix
+//
+// Revision 1.2 2005/01/31 05:58:03 rogeeff
+// detect_memory_leak feature added
+//
+// Revision 1.1 2005/01/22 19:22:12 rogeeff
+// implementation moved into headers section to eliminate dependency of included/minimal component on src directory
+//
+// Revision 1.36 2005/01/21 07:21:38 rogeeff
+// detect presence of debugger under VC and automatically prevent catching system errors
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_EXECUTION_MONITOR_IPP_012205GER
diff --git a/boost/boost/test/impl/framework.ipp b/boost/boost/test/impl/framework.ipp
new file mode 100644
index 00000000000..dcbb2db4e08
--- /dev/null
+++ b/boost/boost/test/impl/framework.ipp
@@ -0,0 +1,494 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: framework.ipp,v $
+//
+// Version : $Revision: 1.10 $
+//
+// Description : implements framework API - main driver for the test
+// ***************************************************************************
+
+#ifndef BOOST_TEST_FRAMEWORK_IPP_021005GER
+#define BOOST_TEST_FRAMEWORK_IPP_021005GER
+
+// Boost.Test
+#include <boost/test/framework.hpp>
+#include <boost/test/execution_monitor.hpp>
+#include <boost/test/unit_test_suite_impl.hpp>
+#include <boost/test/unit_test_log.hpp>
+#include <boost/test/unit_test_monitor.hpp>
+#include <boost/test/test_observer.hpp>
+#include <boost/test/results_collector.hpp>
+#include <boost/test/progress_monitor.hpp>
+#include <boost/test/results_reporter.hpp>
+#include <boost/test/test_tools.hpp>
+
+#include <boost/test/detail/unit_test_parameters.hpp>
+#include <boost/test/detail/global_typedef.hpp>
+
+#include <boost/test/utils/foreach.hpp>
+
+// Boost
+#include <boost/timer.hpp>
+
+// STL
+#include <map>
+#include <set>
+#include <cstdlib>
+#include <ctime>
+
+#ifdef BOOST_NO_STDC_NAMESPACE
+namespace std { using ::time; using ::srand; }
+#endif
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+#ifndef BOOST_TEST_DYN_LINK
+
+// prototype for user's unit test init function
+#ifdef BOOST_TEST_ALTERNATIVE_INIT_API
+extern bool init_unit_test();
+#else
+extern boost::unit_test::test_suite* init_unit_test_suite( int argc, char* argv[] );
+#endif
+
+#endif
+
+namespace boost {
+
+namespace unit_test {
+
+// ************************************************************************** //
+// ************** test_start calls wrapper ************** //
+// ************************************************************************** //
+
+namespace ut_detail {
+
+struct test_start_caller {
+ test_start_caller( test_observer* to, counter_t tc_amount )
+ : m_to( to )
+ , m_tc_amount( tc_amount )
+ {}
+
+ int operator()()
+ {
+ m_to->test_start( m_tc_amount );
+ return 0;
+ }
+
+private:
+ // Data members
+ test_observer* m_to;
+ counter_t m_tc_amount;
+};
+
+}
+
+// ************************************************************************** //
+// ************** framework ************** //
+// ************************************************************************** //
+
+class framework_impl : public test_tree_visitor {
+public:
+ framework_impl()
+ : m_master_test_suite( 0 )
+ , m_curr_test_case( INV_TEST_UNIT_ID )
+ , m_next_test_case_id( MIN_TEST_CASE_ID )
+ , m_next_test_suite_id( MIN_TEST_SUITE_ID )
+ , m_test_in_progress( false )
+ {}
+
+ ~framework_impl()
+ {
+ BOOST_TEST_FOREACH( test_unit_store::value_type const&, tu, m_test_units ) {
+ if( test_id_2_unit_type( tu.second->p_id ) == tut_suite )
+ delete (test_suite const*)tu.second;
+ else
+ delete (test_case const*)tu.second;
+ }
+ }
+
+ void set_tu_id( test_unit& tu, test_unit_id id ) { tu.p_id.value = id; }
+
+ // test_tree_visitor interface implementation
+ void visit( test_case const& tc )
+ {
+ if( !tc.check_dependencies() ) {
+ BOOST_TEST_FOREACH( test_observer*, to, m_observers )
+ to->test_unit_skipped( tc );
+
+ return;
+ }
+
+ BOOST_TEST_FOREACH( test_observer*, to, m_observers )
+ to->test_unit_start( tc );
+
+ boost::timer tc_timer;
+ test_unit_id bkup = m_curr_test_case;
+ m_curr_test_case = tc.p_id;
+ unit_test_monitor_t::error_level run_result = unit_test_monitor.execute_and_translate( tc );
+
+ unsigned long elapsed = static_cast<unsigned long>( tc_timer.elapsed() * 1e6 );
+
+ if( unit_test_monitor.is_critical_error( run_result ) ) {
+ BOOST_TEST_FOREACH( test_observer*, to, m_observers )
+ to->test_aborted();
+ }
+
+ BOOST_TEST_FOREACH( test_observer*, to, m_observers )
+ to->test_unit_finish( tc, elapsed );
+
+ m_curr_test_case = bkup;
+
+ if( unit_test_monitor.is_critical_error( run_result ) )
+ throw test_being_aborted();
+ }
+
+ bool test_suite_start( test_suite const& ts )
+ {
+ if( !ts.check_dependencies() ) {
+ BOOST_TEST_FOREACH( test_observer*, to, m_observers )
+ to->test_unit_skipped( ts );
+
+ return false;
+ }
+
+ BOOST_TEST_FOREACH( test_observer*, to, m_observers )
+ to->test_unit_start( ts );
+
+ return true;
+ }
+
+ void test_suite_finish( test_suite const& ts )
+ {
+ BOOST_TEST_FOREACH( test_observer*, to, m_observers )
+ to->test_unit_finish( ts, 0 );
+ }
+
+ //////////////////////////////////////////////////////////////////
+ struct priority_order {
+ bool operator()( test_observer* lhs, test_observer* rhs ) const
+ {
+ return (lhs->priority() < rhs->priority()) || (lhs->priority() == rhs->priority()) && (lhs < rhs);
+ }
+ };
+
+ typedef std::map<test_unit_id,test_unit const*> test_unit_store;
+ typedef std::set<test_observer*,priority_order> observer_store;
+
+ master_test_suite_t* m_master_test_suite;
+ test_unit_id m_curr_test_case;
+ test_unit_store m_test_units;
+
+ test_unit_id m_next_test_case_id;
+ test_unit_id m_next_test_suite_id;
+
+ bool m_test_in_progress;
+
+ observer_store m_observers;
+};
+
+//____________________________________________________________________________//
+
+namespace {
+
+framework_impl& s_frk_impl() { static framework_impl the_inst; return the_inst; }
+
+} // local namespace
+
+//____________________________________________________________________________//
+
+namespace framework {
+
+void
+init( int argc, char* argv[] )
+{
+ runtime_config::init( &argc, argv );
+
+ // set the log level nad format
+ unit_test_log.set_threshold_level( runtime_config::log_level() );
+ unit_test_log.set_format( runtime_config::log_format() );
+
+ // set the report level nad format
+ results_reporter::set_level( runtime_config::report_level() );
+ results_reporter::set_format( runtime_config::report_format() );
+
+ register_observer( results_collector );
+ register_observer( unit_test_log );
+
+ if( runtime_config::show_progress() )
+ register_observer( progress_monitor );
+
+ if( runtime_config::detect_memory_leaks() > 0 ) {
+ detect_memory_leaks( true );
+ break_memory_alloc( runtime_config::detect_memory_leaks() );
+ }
+
+ // init master unit test suite
+ master_test_suite().argc = argc;
+ master_test_suite().argv = argv;
+
+#ifndef BOOST_TEST_DYN_LINK
+
+#ifdef BOOST_TEST_ALTERNATIVE_INIT_API
+ if( !init_unit_test() )
+ throw setup_error( BOOST_TEST_L("test tree initialization error" ) );
+#else
+ test_suite* s = init_unit_test_suite( argc, argv );
+ if( s )
+ master_test_suite().add( s );
+#endif
+
+#endif
+
+}
+
+//____________________________________________________________________________//
+
+void
+register_test_unit( test_case* tc )
+{
+ if( tc->p_id != INV_TEST_UNIT_ID )
+ throw setup_error( BOOST_TEST_L( "test case already registered" ) );
+
+ test_unit_id new_id = s_frk_impl().m_next_test_case_id;
+
+ if( new_id == MAX_TEST_CASE_ID )
+ throw setup_error( BOOST_TEST_L( "too many test cases" ) );
+
+ typedef framework_impl::test_unit_store::value_type map_value_type;
+
+ s_frk_impl().m_test_units.insert( map_value_type( new_id, tc ) );
+ s_frk_impl().m_next_test_case_id++;
+
+ s_frk_impl().set_tu_id( *tc, new_id );
+}
+
+//____________________________________________________________________________//
+
+void
+register_test_unit( test_suite* ts )
+{
+ if( ts->p_id != INV_TEST_UNIT_ID )
+ throw setup_error( BOOST_TEST_L( "test suite already registered" ) );
+
+ test_unit_id new_id = s_frk_impl().m_next_test_suite_id;
+
+ if( new_id == MAX_TEST_SUITE_ID )
+ throw setup_error( BOOST_TEST_L( "too many test suites" ) );
+
+ typedef framework_impl::test_unit_store::value_type map_value_type;
+ s_frk_impl().m_test_units.insert( map_value_type( new_id, ts ) );
+ s_frk_impl().m_next_test_suite_id++;
+
+ s_frk_impl().set_tu_id( *ts, new_id );
+}
+
+//____________________________________________________________________________//
+
+void
+register_observer( test_observer& to )
+{
+ s_frk_impl().m_observers.insert( &to );
+}
+
+//____________________________________________________________________________//
+
+void
+deregister_observer( test_observer& to )
+{
+ s_frk_impl().m_observers.erase( &to );
+}
+
+//____________________________________________________________________________//
+
+void
+reset_observers()
+{
+ s_frk_impl().m_observers.clear();
+}
+
+//____________________________________________________________________________//
+
+master_test_suite_t&
+master_test_suite()
+{
+ if( !s_frk_impl().m_master_test_suite )
+ s_frk_impl().m_master_test_suite = new master_test_suite_t;
+
+ return *s_frk_impl().m_master_test_suite;
+}
+
+//____________________________________________________________________________//
+
+test_case const&
+current_test_case()
+{
+ return get<test_case>( s_frk_impl().m_curr_test_case );
+}
+
+//____________________________________________________________________________//
+
+test_unit const&
+get( test_unit_id id, test_unit_type t )
+{
+ test_unit const* res = s_frk_impl().m_test_units[id];
+
+ if( (res->p_type & t) == 0 )
+ throw internal_error( "Invalid test unit type" );
+
+ return *res;
+}
+
+//____________________________________________________________________________//
+
+void
+run( test_unit_id id, bool continue_test )
+{
+ if( id == INV_TEST_UNIT_ID )
+ id = master_test_suite().p_id;
+
+ test_case_counter tcc;
+ traverse_test_tree( id, tcc );
+
+ if( tcc.m_count == 0 )
+ throw setup_error( BOOST_TEST_L( "test tree is empty" ) );
+
+ bool call_start_finish = !continue_test || !s_frk_impl().m_test_in_progress;
+ bool was_in_progress = s_frk_impl().m_test_in_progress;
+
+ s_frk_impl().m_test_in_progress = true;
+
+ if( call_start_finish ) {
+ BOOST_TEST_FOREACH( test_observer*, to, s_frk_impl().m_observers ) {
+ boost::execution_monitor em;
+
+ try {
+ em.execute( ut_detail::test_start_caller( to, tcc.m_count ) );
+ }
+ catch( execution_exception const& ex ) {
+ throw setup_error( ex.what() );
+ }
+ }
+ }
+
+ switch( runtime_config::random_seed() ) {
+ case 0:
+ break;
+ case 1: {
+ unsigned int seed = (unsigned int)std::time( 0 );
+ BOOST_TEST_MESSAGE( "Test cases order is shuffled using seed: " << seed );
+ std::srand( seed );
+ break;
+ }
+ default:
+ BOOST_TEST_MESSAGE( "Test cases order is shuffled using seed: " << runtime_config::random_seed() );
+ std::srand( runtime_config::random_seed() );
+ }
+
+ try {
+ traverse_test_tree( id, s_frk_impl() );
+ }
+ catch( test_being_aborted const& ) {
+ // abort already reported
+ }
+
+ if( call_start_finish ) {
+ BOOST_TEST_FOREACH( test_observer*, to, s_frk_impl().m_observers )
+ to->test_finish();
+ }
+
+ s_frk_impl().m_test_in_progress = was_in_progress;
+}
+
+//____________________________________________________________________________//
+
+void
+run( test_unit const* tu, bool continue_test )
+{
+ run( tu->p_id, continue_test );
+}
+
+//____________________________________________________________________________//
+
+void
+assertion_result( bool passed )
+{
+ BOOST_TEST_FOREACH( test_observer*, to, s_frk_impl().m_observers )
+ to->assertion_result( passed );
+}
+
+//____________________________________________________________________________//
+
+void
+exception_caught( execution_exception const& ex )
+{
+ BOOST_TEST_FOREACH( test_observer*, to, s_frk_impl().m_observers )
+ to->exception_caught( ex );
+}
+
+//____________________________________________________________________________//
+
+void
+test_unit_aborted( test_unit const& tu )
+{
+ BOOST_TEST_FOREACH( test_observer*, to, s_frk_impl().m_observers )
+ to->test_unit_aborted( tu );
+}
+
+//____________________________________________________________________________//
+
+} // namespace framework
+
+} // namespace unit_test
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: framework.ipp,v $
+// Revision 1.10 2006/03/19 07:27:52 rogeeff
+// streamline test setup error message
+//
+// Revision 1.9 2006/01/30 07:29:49 rogeeff
+// split memory leaks detection API in two to get more functions with better defined roles
+//
+// Revision 1.8 2005/12/17 02:34:11 rogeeff
+// *** empty log message ***
+//
+// Revision 1.7 2005/12/14 05:35:57 rogeeff
+// DLL support implemented
+// Alternative init API introduced
+//
+// Revision 1.6 2005/05/08 08:55:09 rogeeff
+// typos and missing descriptions fixed
+//
+// Revision 1.5 2005/04/05 07:23:20 rogeeff
+// restore default
+//
+// Revision 1.4 2005/04/05 06:11:37 rogeeff
+// memory leak allocation point detection\nextra help with _WIN32_WINNT
+//
+// Revision 1.3 2005/03/23 21:02:19 rogeeff
+// Sunpro CC 5.3 fixes
+//
+// Revision 1.2 2005/02/21 10:12:18 rogeeff
+// Support for random order of test cases implemented
+//
+// Revision 1.1 2005/02/20 08:27:07 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_FRAMEWORK_IPP_021005GER
diff --git a/boost/boost/test/impl/interaction_based.ipp b/boost/boost/test/impl/interaction_based.ipp
new file mode 100644
index 00000000000..a6b62c2dd8d
--- /dev/null
+++ b/boost/boost/test/impl/interaction_based.ipp
@@ -0,0 +1,125 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// Use, modification, and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// See http://www.boost.org/libs/test for the library home page.
+//
+// File : $RCSfile: interaction_based.ipp,v $
+//
+// Version : $Revision: 1.7 $
+//
+// Description : Facilities to perform interaction-based testing
+// ***************************************************************************
+
+#ifndef BOOST_TEST_INTERACTION_BASED_IPP_112105GER
+#define BOOST_TEST_INTERACTION_BASED_IPP_112105GER
+
+// Boost.Test
+#include <boost/test/detail/config.hpp>
+
+#if !BOOST_WORKAROUND(__GNUC__, < 3) && \
+ !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \
+ !BOOST_WORKAROUND(BOOST_MSVC, <1310) && \
+ !BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x530))
+
+// Boost.Test
+#include <boost/test/detail/config.hpp>
+#include <boost/test/utils/callback.hpp>
+#include <boost/test/interaction_based.hpp>
+#include <boost/test/mock_object.hpp>
+#include <boost/test/framework.hpp> // for setup_error
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+// STL
+#include <stdexcept>
+#include <string>
+
+//____________________________________________________________________________//
+
+namespace boost {
+
+namespace itest { // interaction-based testing
+
+// ************************************************************************** //
+// ************** manager ************** //
+// ************************************************************************** //
+
+manager::manager()
+{
+ instance_ptr( true, this );
+}
+
+//____________________________________________________________________________//
+
+manager::~manager()
+{
+ instance_ptr( true );
+}
+
+//____________________________________________________________________________//
+
+manager*
+manager::instance_ptr( bool reset, manager* new_ptr )
+{
+ static manager dummy( 0 );
+
+ static manager* ptr = &dummy;
+
+ if( reset ) {
+ if( new_ptr ) {
+ if( ptr != &dummy )
+ throw unit_test::framework::setup_error( BOOST_TEST_L( "Couldn't run two interation based test the same time" ) );
+
+ ptr = new_ptr;
+ }
+ else
+ ptr = &dummy;
+ }
+
+ return ptr;
+}
+
+} // namespace itest
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // not ancient compiler
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: interaction_based.ipp,v $
+// Revision 1.7 2006/03/19 07:27:52 rogeeff
+// streamline test setup error message
+//
+// Revision 1.6 2006/02/23 15:10:00 rogeeff
+// vc70 out
+//
+// Revision 1.5 2006/02/22 16:13:34 rogeeff
+// ifdef out for non supported compilers
+//
+// Revision 1.4 2006/01/28 08:52:35 rogeeff
+// operator new overloads made inline to:
+// 1. prevent issues with export them from DLL
+// 2. release link issue fixed
+//
+// Revision 1.3 2006/01/15 11:14:39 rogeeff
+// simpl_mock -> mock_object<>::prototype()
+// operator new need to be rethinked
+//
+// Revision 1.2 2005/12/22 15:49:32 rogeeff
+// sunpro port
+// made operator new conformant
+//
+// Revision 1.1 2005/12/14 05:56:56 rogeeff
+// Interraction based / logged expectation testing is introduced
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_INTERACTION_BASED_IPP_112105GER
diff --git a/boost/boost/test/impl/logged_expectations.ipp b/boost/boost/test/impl/logged_expectations.ipp
new file mode 100644
index 00000000000..5e9f1883b1e
--- /dev/null
+++ b/boost/boost/test/impl/logged_expectations.ipp
@@ -0,0 +1,274 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// Use, modification, and distribution are subject to the
+// Boost Software License, ELOG_VER 1.0. (See accompanying file
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// See http://www.boost.org/libs/test for the library home page.
+//
+// File : $RCSfile: logged_expectations.ipp,v $
+//
+// ELOG_VER : $Revision: 1.6 $
+//
+// Description : Facilities to perform interaction based testng of logged expectations
+// ***************************************************************************
+
+#ifndef BOOST_TEST_LOGGED_EXPECTATIONS_IPP_120905GER
+#define BOOST_TEST_LOGGED_EXPECTATIONS_IPP_120905GER
+
+// Boost.Test
+#include <boost/test/detail/config.hpp>
+
+#if !BOOST_WORKAROUND(__GNUC__, < 3) && \
+ !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \
+ !BOOST_WORKAROUND(BOOST_MSVC, <1310) && \
+ !BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x530))
+
+#include <boost/test/detail/global_typedef.hpp>
+
+#include <boost/test/utils/callback.hpp>
+#include <boost/test/utils/iterator/token_iterator.hpp>
+
+#include <boost/test/interaction_based.hpp>
+#include <boost/test/test_tools.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+// Boost
+#include <boost/lexical_cast.hpp>
+
+// STL
+#include <fstream>
+
+//____________________________________________________________________________//
+
+namespace boost {
+
+using namespace ::boost::unit_test;
+
+namespace itest {
+
+// ************************************************************************** //
+// ************** logged expectation test implementation ************** //
+// ************************************************************************** //
+
+struct expectations_logger : itest::manager {
+ // Constructor
+ expectations_logger( const_string log_file_name, bool test_or_log );
+
+ virtual bool decision_point( const_string, std::size_t );
+ virtual unsigned enter_scope( const_string, std::size_t, const_string scope_name );
+ virtual void allocated( const_string, std::size_t, void*, std::size_t s );
+ virtual void data_flow( const_string d );
+ virtual std::string return_value( const_string default_value );
+
+private:
+ // Data members
+ bool m_test_or_log;
+ std::fstream m_log_file;
+};
+
+literal_string ELOG_VER = "1.0";
+literal_string CLMN_SEP = "|";
+static const char LINE_SEP = '\n';
+
+literal_string FILE_SIG = "ELOG";
+literal_string SCOPE_SIG = "SCOPE";
+literal_string ALLOC_SIG = "ALLOC";
+literal_string DP_SIG = "SWITCH";
+literal_string DATA_SIG = "DATA";
+literal_string RETURN_SIG = "RETURN";
+
+//____________________________________________________________________________//
+
+expectations_logger::expectations_logger( const_string log_file_name, bool test_or_log )
+: m_test_or_log( test_or_log )
+{
+ BOOST_REQUIRE_MESSAGE( !log_file_name.is_empty(), "Empty expectations log file name" );
+
+ m_log_file.open( log_file_name.begin(), test_or_log ? std::ios::in : std::ios::out );
+
+ BOOST_REQUIRE_MESSAGE( m_log_file.is_open(),
+ "Couldn't open expectations log file " << log_file_name
+ << " for " << ( m_test_or_log ? "reading" : "writing") );
+
+ if( m_test_or_log ) {
+ std::string line;
+
+ std::getline( m_log_file, line, LINE_SEP );
+
+ const_string cline( line );
+ string_token_iterator tit( cline, (dropped_delimeters = CLMN_SEP, kept_delimeters = dt_none));
+
+ BOOST_CHECK_EQUAL( *tit, FILE_SIG );
+ ++tit;
+ BOOST_CHECK_EQUAL( *tit, ELOG_VER );
+ }
+ else {
+ m_log_file << FILE_SIG << CLMN_SEP << ELOG_VER << LINE_SEP;
+ }
+}
+
+//____________________________________________________________________________//
+
+bool
+expectations_logger::decision_point( const_string, std::size_t )
+{
+ if( m_test_or_log ) {
+ std::string line;
+
+ std::getline( m_log_file, line, LINE_SEP );
+
+ const_string cline( line );
+ string_token_iterator tit( cline, (dropped_delimeters = CLMN_SEP, kept_delimeters = dt_none));
+
+ BOOST_CHECK_EQUAL( *tit, DP_SIG ); ++tit;
+ return lexical_cast<bool>( *tit );
+ }
+ else {
+ m_log_file << DP_SIG << CLMN_SEP << std::boolalpha << true << LINE_SEP;
+
+ return true;
+ }
+}
+
+//____________________________________________________________________________//
+
+unsigned
+expectations_logger::enter_scope( const_string, std::size_t, const_string scope_name )
+{
+ if( m_test_or_log ) {
+ std::string line;
+
+ std::getline( m_log_file, line, LINE_SEP );
+
+ const_string cline( line );
+ string_token_iterator tit( cline, (dropped_delimeters = CLMN_SEP, kept_delimeters = dt_none));
+
+ BOOST_CHECK_EQUAL( *tit, SCOPE_SIG ); ++tit;
+ BOOST_CHECK_EQUAL( *tit, scope_name );
+ }
+ else {
+ m_log_file << SCOPE_SIG << CLMN_SEP << scope_name << LINE_SEP;
+ }
+
+ return 0;
+}
+
+//____________________________________________________________________________//
+
+void
+expectations_logger::allocated( const_string, std::size_t, void*, std::size_t s )
+{
+ if( m_test_or_log ) {
+ std::string line;
+
+ std::getline( m_log_file, line, LINE_SEP );
+
+ const_string cline( line );
+ string_token_iterator tit( cline, (dropped_delimeters = CLMN_SEP, kept_delimeters = dt_none));
+
+ BOOST_CHECK_EQUAL( *tit, ALLOC_SIG ); ++tit;
+ BOOST_CHECK_EQUAL( lexical_cast<std::size_t>( *tit ), s );
+ }
+ else {
+ m_log_file << ALLOC_SIG << CLMN_SEP << s << LINE_SEP;
+ }
+}
+
+//____________________________________________________________________________//
+
+void
+expectations_logger::data_flow( const_string d )
+{
+ if( m_test_or_log ) {
+ std::string line;
+
+ std::getline( m_log_file, line, LINE_SEP );
+
+ const_string cline( line );
+ string_token_iterator tit( cline, (dropped_delimeters = CLMN_SEP, kept_delimeters = dt_none));
+
+ BOOST_CHECK_EQUAL( *tit, DATA_SIG ); ++tit;
+ BOOST_CHECK_EQUAL( *tit, d );
+ }
+ else {
+ m_log_file << DATA_SIG << CLMN_SEP << d << LINE_SEP;
+ }
+}
+
+//____________________________________________________________________________//
+
+std::string
+expectations_logger::return_value( const_string default_value )
+{
+ if( m_test_or_log ) {
+ std::string line;
+
+ std::getline( m_log_file, line, LINE_SEP );
+
+ const_string cline( line );
+ string_token_iterator tit( cline, (dropped_delimeters = CLMN_SEP, kept_delimeters = dt_none));
+
+ BOOST_CHECK_EQUAL( *tit, RETURN_SIG ); ++tit;
+
+ return std::string( tit->begin(), tit->size() );
+ }
+ else {
+ m_log_file << RETURN_SIG << CLMN_SEP << default_value << LINE_SEP;
+
+ return std::string();
+ }
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// ************** logged expectations test ************** //
+// ************************************************************************** //
+
+void BOOST_TEST_DECL
+logged_expectations( callback0<> const& F, const_string log_file_name, bool test_or_log )
+{
+ expectations_logger el( log_file_name, test_or_log );
+
+ F();
+}
+
+//____________________________________________________________________________//
+
+} // namespace itest
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // not ancient compiler
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: logged_expectations.ipp,v $
+// Revision 1.6 2006/02/23 15:10:00 rogeeff
+// vc70 out
+//
+// Revision 1.5 2006/02/06 10:06:56 rogeeff
+// MSVC restored for now
+//
+// Revision 1.4 2006/01/28 08:55:31 rogeeff
+// VC6.0 workaround removed
+//
+// Revision 1.3 2005/12/22 15:49:32 rogeeff
+// sunpro port
+// made operator new conformant
+//
+// Revision 1.2 2005/12/19 00:08:34 rogeeff
+// gcc port
+//
+// Revision 1.1 2005/12/14 05:56:56 rogeeff
+// Interraction based / logged expectation testing is introduced
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_LOGGED_EXPECTATIONS_IPP_120905GER
diff --git a/boost/boost/test/impl/plain_report_formatter.ipp b/boost/boost/test/impl/plain_report_formatter.ipp
new file mode 100644
index 00000000000..3091ebc5f89
--- /dev/null
+++ b/boost/boost/test/impl/plain_report_formatter.ipp
@@ -0,0 +1,222 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: plain_report_formatter.ipp,v $
+//
+// Version : $Revision: 1.4 $
+//
+// Description : plain report formatter definition
+// ***************************************************************************
+
+#ifndef BOOST_TEST_PLAIN_REPORT_FORMATTER_IPP_020105GER
+#define BOOST_TEST_PLAIN_REPORT_FORMATTER_IPP_020105GER
+
+// Boost.Test
+#include <boost/test/output/plain_report_formatter.hpp>
+#include <boost/test/utils/custom_manip.hpp>
+#include <boost/test/results_collector.hpp>
+#include <boost/test/unit_test_suite_impl.hpp>
+
+#include <boost/test/utils/basic_cstring/io.hpp>
+
+// STL
+#include <iomanip>
+#include <cmath>
+#include <iostream>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+# ifdef BOOST_NO_STDC_NAMESPACE
+namespace std { using ::log10; }
+# endif
+
+//____________________________________________________________________________//
+
+namespace boost {
+
+namespace unit_test {
+
+namespace output {
+
+namespace {
+
+typedef custom_manip<struct quote_t> quote;
+
+template<typename T>
+inline std::ostream&
+operator<<( custom_printer<quote> const& p, T const& value )
+{
+ *p << '"' << value << '"';
+
+ return *p;
+}
+
+//____________________________________________________________________________//
+
+void
+print_stat_value( std::ostream& ostr, counter_t v, counter_t indent, counter_t total,
+ const_string name, const_string res )
+{
+ if( v > 0 ) {
+ ostr << std::setw( indent ) << ""
+ << v << ' ' << name << ( v != 1 ? "s" : "" );
+ if( total > 0 )
+ ostr << " out of " << total;
+
+ ostr << ' ' << res << '\n';
+ }
+}
+
+//____________________________________________________________________________//
+
+} // local namespace
+
+// ************************************************************************** //
+// ************** plain_report_formatter ************** //
+// ************************************************************************** //
+
+void
+plain_report_formatter::results_report_start( std::ostream& ostr )
+{
+ m_indent = 0;
+ ostr << '\n';
+}
+
+//____________________________________________________________________________//
+
+void
+plain_report_formatter::results_report_finish( std::ostream& ostr )
+{
+ ostr.flush();
+}
+
+//____________________________________________________________________________//
+
+void
+plain_report_formatter::test_unit_report_start( test_unit const& tu, std::ostream& ostr )
+{
+ test_results const& tr = results_collector.results( tu.p_id );
+
+ const_string descr;
+
+ if( tr.passed() )
+ descr = "passed";
+ else if( tr.p_skipped )
+ descr = "skipped";
+ else if( tr.p_aborted )
+ descr = "aborted";
+ else
+ descr = "failed";
+
+ ostr << std::setw( m_indent ) << ""
+ << "Test " << (tu.p_type == tut_case ? "case " : "suite " ) << quote() << tu.p_name << ' ' << descr;
+
+ if( tr.p_skipped ) {
+ ostr << " due to " << (tu.check_dependencies() ? "test aborting\n" : "failed dependancy\n" );
+ m_indent += 2;
+ return;
+ }
+
+ counter_t total_assertions = tr.p_assertions_passed + tr.p_assertions_failed;
+ counter_t total_tc = tr.p_test_cases_passed + tr.p_test_cases_failed + tr.p_test_cases_skipped;
+
+ if( total_assertions > 0 || total_tc > 0 )
+ ostr << " with:";
+
+ ostr << '\n';
+ m_indent += 2;
+
+ print_stat_value( ostr, tr.p_assertions_passed, m_indent, total_assertions, "assertion", "passed" );
+ print_stat_value( ostr, tr.p_assertions_failed, m_indent, total_assertions, "assertion", "failed" );
+ print_stat_value( ostr, tr.p_expected_failures, m_indent, 0 , "failure" , "expected" );
+ print_stat_value( ostr, tr.p_test_cases_passed, m_indent, total_tc , "test case", "passed" );
+ print_stat_value( ostr, tr.p_test_cases_failed, m_indent, total_tc , "test case", "failed" );
+ print_stat_value( ostr, tr.p_test_cases_skipped, m_indent, total_tc , "test case", "skipped" );
+ print_stat_value( ostr, tr.p_test_cases_aborted, m_indent, total_tc , "test case", "aborted" );
+
+ ostr << '\n';
+}
+
+//____________________________________________________________________________//
+
+void
+plain_report_formatter::test_unit_report_finish( test_unit const&, std::ostream& )
+{
+ m_indent -= 2;
+}
+
+//____________________________________________________________________________//
+
+void
+plain_report_formatter::do_confirmation_report( test_unit const& tu, std::ostream& ostr )
+{
+ test_results const& tr = results_collector.results( tu.p_id );
+
+ if( tr.passed() ) {
+ ostr << "*** No errors detected\n";
+ return;
+ }
+
+ if( tr.p_skipped ) {
+ ostr << "*** Test " << tu.p_type_name << " skipped due to "
+ << (tu.check_dependencies() ? "test aborting\n" : "failed dependancy\n" );
+ return;
+ }
+
+ if( tr.p_assertions_failed == 0 ) {
+ ostr << "*** errors detected in test " << tu.p_type_name << " " << quote() << tu.p_name
+ << "; see standard output for details\n";
+ return;
+ }
+
+ counter_t num_failures = tr.p_assertions_failed;
+
+ ostr << "*** " << num_failures << " failure" << ( num_failures != 1 ? "s" : "" ) << " detected";
+
+ if( tr.p_expected_failures > 0 )
+ ostr << " (" << tr.p_expected_failures << " failure" << ( tr.p_expected_failures != 1 ? "s" : "" ) << " expected)";
+
+ ostr << " in test " << tu.p_type_name << " " << quote() << tu.p_name << "\n";
+}
+
+//____________________________________________________________________________//
+
+} // namespace output
+
+} // namespace unit_test
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: plain_report_formatter.ipp,v $
+// Revision 1.4 2006/01/28 08:55:52 rogeeff
+// results collection bug fixed
+//
+// Revision 1.3 2005/12/14 05:31:06 rogeeff
+// report all aborted test units
+//
+// Revision 1.2 2005/12/08 03:19:01 dgregor
+// Merged from Version_1_33_1
+//
+// Revision 1.1.2.2 2005/11/28 11:57:07 dgregor
+// Make that.... iostream
+//
+// Revision 1.1.2.1 2005/11/28 00:02:36 dgregor
+// Include ostream
+//
+// Revision 1.1 2005/02/20 08:27:07 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_PLAIN_REPORT_FORMATTER_IPP_020105GER
diff --git a/boost/boost/test/impl/progress_monitor.ipp b/boost/boost/test/impl/progress_monitor.ipp
new file mode 100644
index 00000000000..2b3db75c275
--- /dev/null
+++ b/boost/boost/test/impl/progress_monitor.ipp
@@ -0,0 +1,120 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: progress_monitor.ipp,v $
+//
+// Version : $Revision: 1.2 $
+//
+// Description : implements simple text based progress monitor
+// ***************************************************************************
+
+#ifndef BOOST_TEST_PROGRESS_MONITOR_IPP_020105GER
+#define BOOST_TEST_PROGRESS_MONITOR_IPP_020105GER
+
+// Boost.Test
+#include <boost/test/progress_monitor.hpp>
+#include <boost/test/unit_test_suite_impl.hpp>
+
+// Boost
+#include <boost/progress.hpp>
+#include <boost/scoped_ptr.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace boost {
+
+namespace unit_test {
+
+// ************************************************************************** //
+// ************** progress_monitor ************** //
+// ************************************************************************** //
+
+namespace {
+
+struct progress_monitor_impl {
+ // Constructor
+ progress_monitor_impl()
+ : m_stream( &std::cout )
+ {}
+
+ std::ostream* m_stream;
+ scoped_ptr<progress_display> m_progress_display;
+};
+
+progress_monitor_impl& s_pm_impl() { static progress_monitor_impl the_inst; return the_inst; }
+
+} // local namespace
+
+//____________________________________________________________________________//
+
+void
+progress_monitor_t::test_start( counter_t test_cases_amount )
+{
+ s_pm_impl().m_progress_display.reset( new progress_display( test_cases_amount, *s_pm_impl().m_stream ) );
+}
+
+//____________________________________________________________________________//
+
+void
+progress_monitor_t::test_aborted()
+{
+ (*s_pm_impl().m_progress_display) += s_pm_impl().m_progress_display->count();
+}
+
+//____________________________________________________________________________//
+
+void
+progress_monitor_t::test_unit_finish( test_unit const& tu, unsigned long )
+{
+ if( tu.p_type == tut_case )
+ ++(*s_pm_impl().m_progress_display);
+}
+
+//____________________________________________________________________________//
+
+void
+progress_monitor_t::test_unit_skipped( test_unit const& tu )
+{
+ test_case_counter tcc;
+ traverse_test_tree( tu, tcc );
+
+ (*s_pm_impl().m_progress_display) += tcc.m_count;
+}
+
+//____________________________________________________________________________//
+
+void
+progress_monitor_t::set_stream( std::ostream& ostr )
+{
+ s_pm_impl().m_stream = &ostr;
+}
+
+//____________________________________________________________________________//
+
+} // namespace unit_test
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: progress_monitor.ipp,v $
+// Revision 1.2 2005/12/14 05:52:49 rogeeff
+// *** empty log message ***
+//
+// Revision 1.1 2005/02/20 08:27:07 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_PROGRESS_MONITOR_IPP_020105GER
diff --git a/boost/boost/test/impl/results_collector.ipp b/boost/boost/test/impl/results_collector.ipp
new file mode 100644
index 00000000000..3b90c027515
--- /dev/null
+++ b/boost/boost/test/impl/results_collector.ipp
@@ -0,0 +1,311 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: results_collector.ipp,v $
+//
+// Version : $Revision: 1.5 $
+//
+// Description : implements Unit Test results collecting facility.
+// ***************************************************************************
+
+#ifndef BOOST_TEST_RESULTS_COLLECTOR_IPP_021105GER
+#define BOOST_TEST_RESULTS_COLLECTOR_IPP_021105GER
+
+// Boost.Test
+#include <boost/test/unit_test_suite_impl.hpp>
+#include <boost/test/unit_test_log.hpp>
+#include <boost/test/results_collector.hpp>
+#include <boost/test/framework.hpp>
+
+// Boost
+#include <boost/cstdlib.hpp>
+
+// STL
+#include <map>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace boost {
+
+namespace unit_test {
+
+// ************************************************************************** //
+// ************** test_results ************** //
+// ************************************************************************** //
+
+test_results::test_results()
+{
+ clear();
+}
+
+//____________________________________________________________________________//
+
+bool
+test_results::passed() const
+{
+ return !p_skipped &&
+ p_test_cases_failed == 0 &&
+ p_assertions_failed <= p_expected_failures &&
+ !p_aborted;
+}
+
+//____________________________________________________________________________//
+
+int
+test_results::result_code() const
+{
+ return passed() ? exit_success
+ : ( (p_assertions_failed > p_expected_failures || p_skipped )
+ ? exit_test_failure
+ : exit_exception_failure );
+}
+
+//____________________________________________________________________________//
+
+void
+test_results::operator+=( test_results const& tr )
+{
+ p_assertions_passed.value += tr.p_assertions_passed;
+ p_assertions_failed.value += tr.p_assertions_failed;
+ p_test_cases_passed.value += tr.p_test_cases_passed;
+ p_test_cases_failed.value += tr.p_test_cases_failed;
+ p_test_cases_skipped.value += tr.p_test_cases_skipped;
+ p_test_cases_aborted.value += tr.p_test_cases_aborted;
+}
+
+//____________________________________________________________________________//
+
+void
+test_results::clear()
+{
+ p_assertions_passed.value = 0;
+ p_assertions_failed.value = 0;
+ p_expected_failures.value = 0;
+ p_test_cases_passed.value = 0;
+ p_test_cases_failed.value = 0;
+ p_test_cases_skipped.value = 0;
+ p_test_cases_aborted.value = 0;
+ p_aborted.value = false;
+ p_skipped.value = true;
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// ************** results_collector ************** //
+// ************************************************************************** //
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, <1300)
+
+namespace {
+
+struct results_collector_impl {
+ std::map<test_unit_id,test_results> m_results_store;
+};
+
+results_collector_impl& s_rc_impl() { static results_collector_impl the_inst; return the_inst; }
+
+} // local namespace
+
+#else
+
+struct results_collector_impl {
+ std::map<test_unit_id,test_results> m_results_store;
+};
+
+static results_collector_impl& s_rc_impl() { static results_collector_impl the_inst; return the_inst; }
+
+#endif
+
+//____________________________________________________________________________//
+
+void
+results_collector_t::test_start( counter_t )
+{
+ s_rc_impl().m_results_store.clear();
+}
+
+//____________________________________________________________________________//
+
+void
+results_collector_t::test_finish()
+{
+ // do nothing
+}
+
+//____________________________________________________________________________//
+
+void
+results_collector_t::test_aborted()
+{
+ // do nothing
+}
+
+//____________________________________________________________________________//
+
+void
+results_collector_t::test_unit_start( test_unit const& tu )
+{
+ // init test_results entry
+ test_results& tr = s_rc_impl().m_results_store[tu.p_id];
+
+ tr.clear();
+
+ tr.p_expected_failures.value = tu.p_expected_failures;
+ tr.p_skipped.value = false;
+}
+
+//____________________________________________________________________________//
+
+class results_collect_helper : public test_tree_visitor {
+public:
+ explicit results_collect_helper( test_results& tr, test_unit const& ts ) : m_tr( tr ), m_ts( ts ) {}
+
+ void visit( test_case const& tc )
+ {
+ test_results const& tr = results_collector.results( tc.p_id );
+ m_tr += tr;
+
+ if( tr.passed() )
+ m_tr.p_test_cases_passed.value++;
+ else if( tr.p_skipped )
+ m_tr.p_test_cases_skipped.value++;
+ else {
+ if( tr.p_aborted )
+ m_tr.p_test_cases_aborted.value++;
+ m_tr.p_test_cases_failed.value++;
+ }
+ }
+ bool test_suite_start( test_suite const& ts )
+ {
+ if( m_ts.p_id == ts.p_id )
+ return true;
+ else {
+ m_tr += results_collector.results( ts.p_id );
+ return false;
+ }
+ }
+
+private:
+ // Data members
+ test_results& m_tr;
+ test_unit const& m_ts;
+};
+
+//____________________________________________________________________________//
+
+void
+results_collector_t::test_unit_finish( test_unit const& tu, unsigned long )
+{
+ if( tu.p_type == tut_suite ) {
+ results_collect_helper ch( s_rc_impl().m_results_store[tu.p_id], tu );
+
+ traverse_test_tree( tu, ch );
+ }
+ else {
+ test_results const& tr = s_rc_impl().m_results_store[tu.p_id];
+
+ bool num_failures_match = tr.p_aborted || tr.p_assertions_failed >= tr.p_expected_failures;
+ if( !num_failures_match )
+ BOOST_TEST_MESSAGE( "Test case has less failures then expected" );
+ }
+}
+
+//____________________________________________________________________________//
+
+void
+results_collector_t::test_unit_skipped( test_unit const& tu )
+{
+ if( tu.p_type == tut_suite ) {
+ test_case_counter tcc;
+ traverse_test_tree( tu, tcc );
+
+ test_results& tr = s_rc_impl().m_results_store[tu.p_id];
+
+ tr.clear();
+
+ tr.p_skipped.value = true;
+ tr.p_test_cases_skipped.value = tcc.m_count;
+ }
+}
+
+//____________________________________________________________________________//
+
+void
+results_collector_t::assertion_result( bool passed )
+{
+ test_results& tr = s_rc_impl().m_results_store[framework::current_test_case().p_id];
+
+ if( passed )
+ tr.p_assertions_passed.value++;
+ else
+ tr.p_assertions_failed.value++;
+
+ if( tr.p_assertions_failed == 1 )
+ first_failed_assertion();
+}
+
+//____________________________________________________________________________//
+
+void
+results_collector_t::exception_caught( execution_exception const& )
+{
+ test_results& tr = s_rc_impl().m_results_store[framework::current_test_case().p_id];
+
+ tr.p_assertions_failed.value++;
+}
+
+//____________________________________________________________________________//
+
+void
+results_collector_t::test_unit_aborted( test_unit const& tu )
+{
+ s_rc_impl().m_results_store[tu.p_id].p_aborted.value = true;
+}
+
+//____________________________________________________________________________//
+
+test_results const&
+results_collector_t::results( test_unit_id id ) const
+{
+ return s_rc_impl().m_results_store[id];
+}
+
+//____________________________________________________________________________//
+
+} // namespace unit_test
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: results_collector.ipp,v $
+// Revision 1.5 2006/02/26 15:24:00 rogeeff
+// vc65 workaround
+//
+// Revision 1.4 2006/01/28 08:55:52 rogeeff
+// results collection bug fixed
+//
+// Revision 1.3 2005/12/14 05:53:22 rogeeff
+// collect amount of aborted test cases
+//
+// Revision 1.2 2005/03/24 04:02:33 rogeeff
+// portability fixes
+//
+// Revision 1.1 2005/02/20 08:27:07 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_RESULTS_COLLECTOR_IPP_021105GER
diff --git a/boost/boost/test/impl/results_reporter.ipp b/boost/boost/test/impl/results_reporter.ipp
new file mode 100644
index 00000000000..6532ea77188
--- /dev/null
+++ b/boost/boost/test/impl/results_reporter.ipp
@@ -0,0 +1,213 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: results_reporter.ipp,v $
+//
+// Version : $Revision: 1.5 $
+//
+// Description : result reporting facilties
+// ***************************************************************************
+
+#ifndef BOOST_TEST_RESULTS_REPORTER_IPP_020105GER
+#define BOOST_TEST_RESULTS_REPORTER_IPP_020105GER
+
+// Boost.Test
+#include <boost/test/results_reporter.hpp>
+#include <boost/test/unit_test_suite_impl.hpp>
+#include <boost/test/results_collector.hpp>
+#include <boost/test/framework.hpp>
+#include <boost/test/output/plain_report_formatter.hpp>
+#include <boost/test/output/xml_report_formatter.hpp>
+
+#include <boost/test/detail/wrap_io_saver.hpp>
+
+// Boost
+#include <boost/scoped_ptr.hpp>
+
+// STL
+#include <iostream>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace boost {
+
+namespace unit_test {
+
+namespace results_reporter {
+
+// ************************************************************************** //
+// ************** result reporter implementation ************** //
+// ************************************************************************** //
+
+namespace {
+
+struct results_reporter_impl : test_tree_visitor {
+ // Constructor
+ results_reporter_impl()
+ : m_output( &std::cerr )
+ , m_stream_state_saver( new io_saver_type( std::cerr ) )
+ , m_report_level( CONFIRMATION_REPORT )
+ , m_formatter( new output::plain_report_formatter )
+ {}
+
+ // test tree visitor interface implementation
+ void visit( test_case const& tc )
+ {
+ m_formatter->test_unit_report_start( tc, *m_output );
+ m_formatter->test_unit_report_finish( tc, *m_output );
+ }
+ bool test_suite_start( test_suite const& ts )
+ {
+ m_formatter->test_unit_report_start( ts, *m_output );
+
+ if( m_report_level == DETAILED_REPORT && !results_collector.results( ts.p_id ).p_skipped )
+ return true;
+
+ m_formatter->test_unit_report_finish( ts, *m_output );
+ return false;
+ }
+ void test_suite_finish( test_suite const& ts )
+ {
+ m_formatter->test_unit_report_finish( ts, *m_output );
+ }
+
+ typedef scoped_ptr<io_saver_type> saver_ptr;
+
+ // Data members
+ std::ostream* m_output;
+ saver_ptr m_stream_state_saver;
+ report_level m_report_level;
+ scoped_ptr<format> m_formatter;
+};
+
+results_reporter_impl& s_rr_impl() { static results_reporter_impl the_inst; return the_inst; }
+
+} // local namespace
+
+// ************************************************************************** //
+// ************** report configuration ************** //
+// ************************************************************************** //
+
+void
+set_level( report_level l )
+{
+ if( l != INV_REPORT_LEVEL )
+ s_rr_impl().m_report_level = l;
+}
+
+//____________________________________________________________________________//
+
+void
+set_stream( std::ostream& ostr )
+{
+ s_rr_impl().m_output = &ostr;
+ s_rr_impl().m_stream_state_saver.reset( new io_saver_type( ostr ) );
+}
+
+//____________________________________________________________________________//
+
+void
+set_format( output_format rf )
+{
+ switch( rf ) {
+ case CLF:
+ set_format( new output::plain_report_formatter );
+ break;
+ case XML:
+ set_format( new output::xml_report_formatter );
+ break;
+ }
+}
+
+//____________________________________________________________________________//
+
+void
+set_format( results_reporter::format* f )
+{
+ if( f )
+ s_rr_impl().m_formatter.reset( f );
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// ************** report initiation ************** //
+// ************************************************************************** //
+
+void
+make_report( report_level l, test_unit_id id )
+{
+ if( l == INV_REPORT_LEVEL )
+ l = s_rr_impl().m_report_level;
+
+ if( l == NO_REPORT )
+ return;
+
+ if( id == INV_TEST_UNIT_ID )
+ id = framework::master_test_suite().p_id;
+
+ s_rr_impl().m_stream_state_saver->restore();
+
+ report_level bkup = s_rr_impl().m_report_level;
+ s_rr_impl().m_report_level = l;
+
+ s_rr_impl().m_formatter->results_report_start( *s_rr_impl().m_output );
+
+ switch( l ) {
+ case CONFIRMATION_REPORT:
+ s_rr_impl().m_formatter->do_confirmation_report( framework::get<test_unit>( id ), *s_rr_impl().m_output );
+ break;
+ case SHORT_REPORT:
+ case DETAILED_REPORT:
+ traverse_test_tree( id, s_rr_impl() );
+ break;
+ default:
+ break;
+ }
+
+ s_rr_impl().m_formatter->results_report_finish( *s_rr_impl().m_output );
+ s_rr_impl().m_report_level = bkup;
+}
+
+//____________________________________________________________________________//
+
+} // namespace results_reporter
+
+} // namespace unit_test
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: results_reporter.ipp,v $
+// Revision 1.5 2005/12/14 05:57:32 rogeeff
+// *** empty log message ***
+//
+// Revision 1.4 2005/04/30 16:48:51 rogeeff
+// io saver warkaround for classic io is shared
+//
+// Revision 1.3 2005/04/29 06:27:45 rogeeff
+// bug fix for manipulator nandling
+// bug fix for invalid output stream
+// bug fix for set_format function implementation
+//
+// Revision 1.2 2005/02/21 10:12:20 rogeeff
+// Support for random order of test cases implemented
+//
+// Revision 1.1 2005/02/20 08:27:07 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_RESULTS_REPORTER_IPP_020105GER
diff --git a/boost/boost/test/impl/test_main.ipp b/boost/boost/test/impl/test_main.ipp
new file mode 100644
index 00000000000..b9e7eee4aa1
--- /dev/null
+++ b/boost/boost/test/impl/test_main.ipp
@@ -0,0 +1,83 @@
+// (C) Copyright Gennadiy Rozental 2001-2005.
+// (C) Copyright Beman Dawes 1995-2001.
+// 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/test for the library home page.
+//
+// File : $RCSfile: test_main.ipp,v $
+//
+// Version : $$Revision: 1.8 $
+//
+// Description : implements main function for Test Execution Monitor.
+// ***************************************************************************
+
+#ifndef BOOST_TEST_TEST_MAIN_IPP_012205GER
+#define BOOST_TEST_TEST_MAIN_IPP_012205GER
+
+// Boost.Test
+#include <boost/test/framework.hpp>
+#include <boost/test/test_tools.hpp>
+#include <boost/test/unit_test_suite.hpp>
+
+// Boost
+#include <boost/cstdlib.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+extern int test_main( int argc, char* argv[] ); // prototype for user's test_main()
+
+struct test_main_caller {
+ test_main_caller( int argc, char** argv ) : m_argc( argc ), m_argv( argv ) {}
+
+ void operator()() {
+ int test_main_result = test_main( m_argc, m_argv );
+
+ // translate a test_main non-success return into a test error
+ BOOST_CHECK( test_main_result == 0 || test_main_result == boost::exit_success );
+ }
+
+private:
+ // Data members
+ int m_argc;
+ char** m_argv;
+};
+
+// ************************************************************************** //
+// ************** test main ************** //
+// ************************************************************************** //
+
+::boost::unit_test::test_suite*
+init_unit_test_suite( int argc, char* argv[] ) {
+ using namespace ::boost::unit_test;
+
+ framework::master_test_suite().p_name.value = "Test Program";
+
+ framework::master_test_suite().add( BOOST_TEST_CASE( test_main_caller( argc, argv ) ) );
+
+ return 0;
+}
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: test_main.ipp,v $
+// Revision 1.8 2005/12/20 23:50:13 rogeeff
+// unit_test.hpp removed
+//
+// Revision 1.7 2005/12/14 05:54:17 rogeeff
+// change existent init API usage
+//
+// Revision 1.6 2005/02/20 08:27:07 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_TEST_MAIN_IPP_012205GER
diff --git a/boost/boost/test/impl/test_tools.ipp b/boost/boost/test/impl/test_tools.ipp
new file mode 100644
index 00000000000..1bf705082a8
--- /dev/null
+++ b/boost/boost/test/impl/test_tools.ipp
@@ -0,0 +1,677 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: test_tools.ipp,v $
+//
+// Version : $Revision: 1.12 $
+//
+// Description : supplies offline implementation for the Test Tools
+// ***************************************************************************
+
+#ifndef BOOST_TEST_TEST_TOOLS_IPP_012205GER
+#define BOOST_TEST_TEST_TOOLS_IPP_012205GER
+
+// Boost.Test
+#include <boost/test/test_tools.hpp>
+#include <boost/test/unit_test_log.hpp>
+#include <boost/test/output_test_stream.hpp>
+#include <boost/test/framework.hpp>
+#include <boost/test/execution_monitor.hpp> // execution_aborted
+#include <boost/test/unit_test_suite_impl.hpp>
+
+// Boost
+#include <boost/config.hpp>
+
+// STL
+#include <fstream>
+#include <string>
+#include <cstring>
+#include <cctype>
+#include <cwchar>
+#ifdef BOOST_STANDARD_IOSTREAMS
+#include <ios>
+#endif
+
+// !! should we use #include <cstdarg>
+#include <stdarg.h>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+# ifdef BOOST_NO_STDC_NAMESPACE
+namespace std { using ::strcmp; using ::strlen; using ::isprint; }
+#if !defined( BOOST_NO_CWCHAR )
+namespace std { using ::wcscmp; }
+#endif
+# endif
+
+namespace boost {
+
+namespace test_tools {
+
+namespace tt_detail {
+
+// ************************************************************************** //
+// ************** TOOL BOX Implementation ************** //
+// ************************************************************************** //
+
+void
+check_impl( predicate_result const& pr, wrap_stringstream& check_descr,
+ const_string file_name, std::size_t line_num,
+ tool_level tl, check_type ct,
+ std::size_t num_of_args, ... )
+{
+ using namespace unit_test;
+
+ if( !!pr )
+ tl = PASS;
+
+ log_level ll;
+ char const* prefix;
+ char const* suffix;
+
+ switch( tl ) {
+ case PASS:
+ ll = log_successful_tests;
+ prefix = "check ";
+ suffix = " passed";
+ break;
+ case WARN:
+ ll = log_warnings;
+ prefix = "condition ";
+ suffix = " is not satisfied";
+ break;
+ case CHECK:
+ ll = log_all_errors;
+ prefix = "check ";
+ suffix = " failed";
+ break;
+ case REQUIRE:
+ ll = log_fatal_errors;
+ prefix = "critical check ";
+ suffix = " failed";
+ break;
+ default:
+ return;
+ }
+
+ switch( ct ) {
+ case CHECK_PRED:
+ unit_test_log << unit_test::log::begin( file_name, line_num )
+ << ll << prefix << check_descr.str() << suffix;
+
+ if( !pr.has_empty_message() )
+ unit_test_log << ". " << pr.message();
+
+ unit_test_log << unit_test::log::end();
+ break;
+
+ case CHECK_MSG:
+ unit_test_log << unit_test::log::begin( file_name, line_num ) << ll;
+
+ if( tl == PASS )
+ unit_test_log << prefix << "'" << check_descr.str() << "'" << suffix;
+ else
+ unit_test_log << check_descr.str();
+
+ if( !pr.has_empty_message() )
+ unit_test_log << ". " << pr.message();
+
+ unit_test_log << unit_test::log::end();
+ break;
+
+ case CHECK_EQUAL: {
+ va_list args;
+
+ va_start( args, num_of_args );
+ char const* arg1_descr = va_arg( args, char const* );
+ char const* arg1_val = va_arg( args, char const* );
+ char const* arg2_descr = va_arg( args, char const* );
+ char const* arg2_val = va_arg( args, char const* );
+
+ unit_test_log << unit_test::log::begin( file_name, line_num )
+ << ll << prefix << arg1_descr << " == " << arg2_descr << suffix;
+
+ if( tl != PASS )
+ unit_test_log << " [" << arg1_val << " != " << arg2_val << "]" ;
+
+ va_end( args );
+
+ if( !pr.has_empty_message() )
+ unit_test_log << ". " << pr.message();
+
+ unit_test_log << unit_test::log::end();
+ break;
+ }
+
+ case CHECK_CLOSE:
+ case CHECK_CLOSE_FRACTION: {
+ va_list args;
+
+ va_start( args, num_of_args );
+ char const* arg1_descr = va_arg( args, char const* );
+ char const* arg1_val = va_arg( args, char const* );
+ char const* arg2_descr = va_arg( args, char const* );
+ char const* arg2_val = va_arg( args, char const* );
+ /* toler_descr = */ va_arg( args, char const* );
+ char const* toler_val = va_arg( args, char const* );
+
+ unit_test_log << unit_test::log::begin( file_name, line_num ) << ll;
+
+ unit_test_log << "difference between " << arg1_descr << "{" << arg1_val << "}"
+ << " and " << arg2_descr << "{" << arg2_val << "}"
+ << ( tl == PASS ? " doesn't exceed " : " exceeds " )
+ << toler_val;
+ if( ct == CHECK_CLOSE )
+ unit_test_log << "%";
+
+ va_end( args );
+
+ if( !pr.has_empty_message() )
+ unit_test_log << ". " << pr.message();
+
+ unit_test_log << unit_test::log::end();
+ break;
+ }
+ case CHECK_SMALL: {
+ va_list args;
+
+ va_start( args, num_of_args );
+ char const* arg1_descr = va_arg( args, char const* );
+ char const* arg1_val = va_arg( args, char const* );
+ /* toler_descr = */ va_arg( args, char const* );
+ char const* toler_val = va_arg( args, char const* );
+
+ unit_test_log << unit_test::log::begin( file_name, line_num ) << ll;
+
+ unit_test_log << "absolute value of " << arg1_descr << "{" << arg1_val << "}"
+ << ( tl == PASS ? " doesn't exceed " : " exceeds " )
+ << toler_val;
+
+ va_end( args );
+
+ if( !pr.has_empty_message() )
+ unit_test_log << ". " << pr.message();
+
+ unit_test_log << unit_test::log::end();
+ break;
+ }
+
+ case CHECK_PRED_WITH_ARGS: {
+ unit_test_log << unit_test::log::begin( file_name, line_num )
+ << ll << prefix << check_descr.str();
+
+ // print predicate call description
+ {
+ va_list args;
+ va_start( args, num_of_args );
+
+ unit_test_log << "( ";
+ for( std::size_t i = 0; i < num_of_args; ++i ) {
+ unit_test_log << va_arg( args, char const* );
+ va_arg( args, char const* ); // skip argument value;
+
+ if( i != num_of_args-1 )
+ unit_test_log << ", ";
+ }
+ unit_test_log << " )" << suffix;
+ va_end( args );
+ }
+
+ if( tl != PASS ) {
+ va_list args;
+ va_start( args, num_of_args );
+
+ unit_test_log << " for ( ";
+ for( std::size_t i = 0; i < num_of_args; ++i ) {
+ va_arg( args, char const* ); // skip argument description;
+ unit_test_log << va_arg( args, char const* );
+
+ if( i != num_of_args-1 )
+ unit_test_log << ", ";
+ }
+ unit_test_log << " )";
+ va_end( args );
+ }
+
+ if( !pr.has_empty_message() )
+ unit_test_log << ". " << pr.message();
+
+ unit_test_log << unit_test::log::end();
+ break;
+ }
+
+ case CHECK_EQUAL_COLL: {
+ va_list args;
+
+ va_start( args, num_of_args );
+ char const* left_begin_descr = va_arg( args, char const* );
+ char const* left_end_descr = va_arg( args, char const* );
+ char const* right_begin_descr = va_arg( args, char const* );
+ char const* right_end_descr = va_arg( args, char const* );
+
+ unit_test_log << unit_test::log::begin( file_name, line_num )
+ << ll << prefix
+ << "{ " << left_begin_descr << ", " << left_end_descr << " } == { "
+ << right_begin_descr << ", " << right_end_descr << " }"
+ << suffix;
+
+ va_end( args );
+
+ if( !pr.has_empty_message() )
+ unit_test_log << ". " << pr.message();
+
+ unit_test_log << unit_test::log::end();
+ break;
+ }
+
+ case CHECK_BITWISE_EQUAL: {
+ va_list args;
+
+ va_start( args, num_of_args );
+ char const* left_descr = va_arg( args, char const* );
+ char const* right_descr = va_arg( args, char const* );
+
+ unit_test_log << unit_test::log::begin( file_name, line_num )
+ << ll << prefix << left_descr << " =.= " << right_descr << suffix;
+
+ va_end( args );
+
+ if( !pr.has_empty_message() )
+ unit_test_log << ". " << pr.message();
+
+ unit_test_log << unit_test::log::end();
+ break;
+ }
+ }
+
+ switch( tl ) {
+ case PASS:
+ framework::assertion_result( true );
+ break;
+
+ case WARN:
+ break;
+
+ case CHECK:
+ framework::assertion_result( false );
+ break;
+
+ case REQUIRE:
+ framework::assertion_result( false );
+
+ framework::test_unit_aborted( framework::current_test_case() );
+
+ throw execution_aborted();
+ }
+}
+
+//____________________________________________________________________________//
+
+predicate_result
+equal_impl( char const* left, char const* right )
+{
+ return (left && right) ? std::strcmp( left, right ) == 0 : (left == right);
+}
+
+//____________________________________________________________________________//
+
+#if !defined( BOOST_NO_CWCHAR )
+
+predicate_result
+equal_impl( wchar_t const* left, wchar_t const* right )
+{
+ return (left && right) ? std::wcscmp( left, right ) == 0 : (left == right);
+}
+
+#endif // !defined( BOOST_NO_CWCHAR )
+
+//____________________________________________________________________________//
+
+bool
+is_defined_impl( const_string symbol_name, const_string symbol_value )
+{
+ symbol_value.trim_left( 2 );
+ return symbol_name != symbol_value;
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// ************** log print helper ************** //
+// ************************************************************************** //
+
+void
+print_log_value<char>::operator()( std::ostream& ostr, char t )
+{
+ if( (std::isprint)( t ) )
+ ostr << '\'' << t << '\'';
+ else
+ ostr << std::hex
+ // showbase is only available for new style streams:
+#ifndef BOOST_NO_STD_LOCALE
+ << std::showbase
+#else
+ << "0x"
+#endif
+ << (int)t;
+}
+
+//____________________________________________________________________________//
+
+void
+print_log_value<unsigned char>::operator()( std::ostream& ostr, unsigned char t )
+{
+ ostr << std::hex
+ // showbase is only available for new style streams:
+#ifndef BOOST_NO_STD_LOCALE
+ << std::showbase
+#else
+ << "0x"
+#endif
+ << (int)t;
+}
+
+//____________________________________________________________________________//
+
+void
+print_log_value<char const*>::operator()( std::ostream& ostr, char const* t )
+{
+ ostr << ( t ? t : "null string" );
+}
+
+//____________________________________________________________________________//
+
+void
+print_log_value<wchar_t const*>::operator()( std::ostream& ostr, wchar_t const* t )
+{
+ ostr << ( t ? t : L"null string" );
+}
+
+//____________________________________________________________________________//
+
+} // namespace tt_detail
+
+// ************************************************************************** //
+// ************** output_test_stream ************** //
+// ************************************************************************** //
+
+struct output_test_stream::Impl
+{
+ std::fstream m_pattern;
+ bool m_match_or_save;
+ bool m_text_or_binary;
+ std::string m_synced_string;
+
+ char get_char()
+ {
+ char res;
+ do {
+ m_pattern.get( res );
+ } while( m_text_or_binary && res == '\r' && !m_pattern.fail() && !m_pattern.eof() );
+
+ return res;
+ }
+
+ void check_and_fill( predicate_result& res )
+ {
+ if( !res.p_predicate_value )
+ res.message() << "Output content: \"" << m_synced_string << '\"';
+ }
+};
+
+//____________________________________________________________________________//
+
+output_test_stream::output_test_stream( const_string pattern_file_name, bool match_or_save, bool text_or_binary )
+: m_pimpl( new Impl )
+{
+ if( !pattern_file_name.is_empty() ) {
+ std::ios::openmode m = match_or_save ? std::ios::in : std::ios::out;
+ if( !text_or_binary )
+ m |= std::ios::binary;
+
+ m_pimpl->m_pattern.open( pattern_file_name.begin(), m );
+
+ BOOST_WARN_MESSAGE( m_pimpl->m_pattern.is_open(),
+ "Couldn't open pattern file " << pattern_file_name
+ << " for " << (m_pimpl->m_match_or_save ? "reading" : "writing") );
+ }
+
+ m_pimpl->m_match_or_save = match_or_save;
+ m_pimpl->m_text_or_binary = text_or_binary;
+}
+
+//____________________________________________________________________________//
+
+output_test_stream::~output_test_stream()
+{
+ delete m_pimpl;
+}
+
+//____________________________________________________________________________//
+
+predicate_result
+output_test_stream::is_empty( bool flush_stream )
+{
+ sync();
+
+ result_type res( m_pimpl->m_synced_string.empty() );
+
+ m_pimpl->check_and_fill( res );
+
+ if( flush_stream )
+ flush();
+
+ return res;
+}
+
+//____________________________________________________________________________//
+
+predicate_result
+output_test_stream::check_length( std::size_t length_, bool flush_stream )
+{
+ sync();
+
+ result_type res( m_pimpl->m_synced_string.length() == length_ );
+
+ m_pimpl->check_and_fill( res );
+
+ if( flush_stream )
+ flush();
+
+ return res;
+}
+
+//____________________________________________________________________________//
+
+predicate_result
+output_test_stream::is_equal( const_string arg, bool flush_stream )
+{
+ sync();
+
+ result_type res( const_string( m_pimpl->m_synced_string ) == arg );
+
+ m_pimpl->check_and_fill( res );
+
+ if( flush_stream )
+ flush();
+
+ return res;
+}
+
+//____________________________________________________________________________//
+
+predicate_result
+output_test_stream::match_pattern( bool flush_stream )
+{
+ sync();
+
+ result_type result( true );
+
+ if( !m_pimpl->m_pattern.is_open() ) {
+ result = false;
+ result.message() << "Pattern file could not be open!";
+ }
+ else {
+ if( m_pimpl->m_match_or_save ) {
+ for ( std::string::size_type i = 0; i < m_pimpl->m_synced_string.length(); ++i ) {
+ char c = m_pimpl->get_char();
+
+ result = !m_pimpl->m_pattern.fail() &&
+ !m_pimpl->m_pattern.eof() &&
+ (m_pimpl->m_synced_string[i] == c);
+
+ if( !result ) {
+ std::string::size_type suffix_size = (std::min)( m_pimpl->m_synced_string.length() - i,
+ static_cast<std::string::size_type>(5) );
+
+ // try to log area around the mismatch
+ result.message() << "Mismatch at position " << i << '\n'
+ << "..." << m_pimpl->m_synced_string.substr( i, suffix_size ) << "..." << '\n'
+ << "..." << c;
+
+ std::string::size_type counter = suffix_size;
+ while( --counter ) {
+ char c = m_pimpl->get_char();
+
+ if( m_pimpl->m_pattern.fail() || m_pimpl->m_pattern.eof() )
+ break;
+
+ result.message() << c;
+ }
+
+ result.message() << "...";
+
+ // skip rest of the bytes. May help for further matching
+ m_pimpl->m_pattern.ignore(
+ static_cast<std::streamsize>( m_pimpl->m_synced_string.length() - i - suffix_size) );
+ break;
+ }
+ }
+ }
+ else {
+ m_pimpl->m_pattern.write( m_pimpl->m_synced_string.c_str(),
+ static_cast<std::streamsize>( m_pimpl->m_synced_string.length() ) );
+ m_pimpl->m_pattern.flush();
+ }
+ }
+
+ if( flush_stream )
+ flush();
+
+ return result;
+}
+
+//____________________________________________________________________________//
+
+void
+output_test_stream::flush()
+{
+ m_pimpl->m_synced_string.erase();
+
+#ifndef BOOST_NO_STRINGSTREAM
+ str( std::string() );
+#else
+ seekp( 0, std::ios::beg );
+#endif
+}
+
+//____________________________________________________________________________//
+
+std::size_t
+output_test_stream::length()
+{
+ sync();
+
+ return m_pimpl->m_synced_string.length();
+}
+
+//____________________________________________________________________________//
+
+void
+output_test_stream::sync()
+{
+#ifdef BOOST_NO_STRINGSTREAM
+ m_pimpl->m_synced_string.assign( str(), pcount() );
+ freeze( false );
+#elif BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x530) )
+ m_pimpl->m_synced_string.assign( str().c_str(), tellp() );
+#else
+ m_pimpl->m_synced_string = str();
+#endif
+}
+
+//____________________________________________________________________________//
+
+} // namespace test_tools
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: test_tools.ipp,v $
+// Revision 1.12 2006/02/01 07:58:25 rogeeff
+// critical message made more consistent with rest
+//
+// Revision 1.11 2006/01/28 07:01:25 rogeeff
+// message error fixed
+//
+// Revision 1.10 2005/12/14 05:33:47 rogeeff
+// use simplified log API
+// assertion_result call moved pass log statement
+// Binary output test stream support implemented
+//
+// Revision 1.9 2005/06/22 22:03:05 dgregor
+// More explicit scoping needed for GCC 2.95.3
+//
+// Revision 1.8 2005/04/30 17:56:31 rogeeff
+// switch to stdarg.h to workarround como issues
+//
+// Revision 1.7 2005/03/23 21:02:23 rogeeff
+// Sunpro CC 5.3 fixes
+//
+// Revision 1.6 2005/02/21 10:14:04 rogeeff
+// CHECK_SMALL tool implemented
+//
+// Revision 1.5 2005/02/20 08:27:07 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// Revision 1.4 2005/02/02 12:08:14 rogeeff
+// namespace log added for log manipulators
+//
+// Revision 1.3 2005/02/01 06:40:07 rogeeff
+// copyright update
+// old log entries removed
+// minor stilistic changes
+// depricated tools removed
+//
+// Revision 1.2 2005/01/30 03:18:27 rogeeff
+// test tools implementation completely reworked. All tools inplemented through single vararg function
+//
+// Revision 1.1 2005/01/22 19:22:12 rogeeff
+// implementation moved into headers section to eliminate dependency of included/minimal component on src directory
+//
+// Revision 1.43 2005/01/19 06:40:05 vawjr
+// deleted redundant \r in many \r\r\n sequences of the source. VC8.0 doesn't like them
+//
+// Revision 1.42 2005/01/18 08:30:08 rogeeff
+// unit_test_log rework:
+// eliminated need for ::instance()
+// eliminated need for << end and ...END macro
+// straitend interface between log and formatters
+// change compiler like formatter name
+// minimized unit_test_log interface and reworked to use explicit calls
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_TEST_TOOLS_IPP_012205GER
diff --git a/boost/boost/test/impl/unit_test_log.ipp b/boost/boost/test/impl/unit_test_log.ipp
new file mode 100644
index 00000000000..860ea3fb7e4
--- /dev/null
+++ b/boost/boost/test/impl/unit_test_log.ipp
@@ -0,0 +1,425 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: unit_test_log.ipp,v $
+//
+// Version : $Revision: 1.11 $
+//
+// Description : implemets Unit Test Log
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UNIT_TEST_LOG_IPP_012205GER
+#define BOOST_TEST_UNIT_TEST_LOG_IPP_012205GER
+
+// Boost.Test
+#include <boost/test/unit_test_log.hpp>
+#include <boost/test/unit_test_log_formatter.hpp>
+#include <boost/test/unit_test_suite_impl.hpp>
+#include <boost/test/execution_monitor.hpp>
+
+#include <boost/test/detail/unit_test_parameters.hpp>
+#include <boost/test/detail/wrap_io_saver.hpp>
+
+#include <boost/test/utils/basic_cstring/compare.hpp>
+
+#include <boost/test/output/compiler_log_formatter.hpp>
+#include <boost/test/output/xml_log_formatter.hpp>
+
+// Boost
+#include <boost/scoped_ptr.hpp>
+
+// STL
+#include <iostream>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace boost {
+
+namespace unit_test {
+
+// ************************************************************************** //
+// ************** entry_value_collector ************** //
+// ************************************************************************** //
+
+namespace ut_detail {
+
+entry_value_collector
+entry_value_collector::operator<<( const_string v )
+{
+ unit_test_log << v;
+
+ m_last = false;
+
+ entry_value_collector res;
+ return res;
+}
+
+//____________________________________________________________________________//
+
+entry_value_collector::~entry_value_collector()
+{
+ if( m_last )
+ unit_test_log << log::end();
+}
+
+//____________________________________________________________________________//
+
+} // namespace ut_detail
+
+// ************************************************************************** //
+// ************** unit_test_log ************** //
+// ************************************************************************** //
+
+namespace {
+
+struct unit_test_log_impl {
+ // Constructor
+ unit_test_log_impl()
+ : m_stream( &std::cout )
+ , m_stream_state_saver( new io_saver_type( std::cout ) )
+ , m_threshold_level( log_all_errors )
+ , m_log_formatter( new output::compiler_log_formatter )
+ {
+ }
+
+ // log data
+ typedef scoped_ptr<unit_test_log_formatter> formatter_ptr;
+ typedef scoped_ptr<io_saver_type> saver_ptr;
+
+ std::ostream* m_stream;
+ saver_ptr m_stream_state_saver;
+ log_level m_threshold_level;
+ formatter_ptr m_log_formatter;
+
+ // entry data
+ bool m_entry_in_progress;
+ bool m_entry_started;
+ log_entry_data m_entry_data;
+
+ // check point data
+ log_checkpoint_data m_checkpoint_data;
+
+ // helper functions
+ std::ostream& stream() { return *m_stream; }
+ void set_checkpoint( const_string file, std::size_t line_num, const_string msg )
+ {
+ assign_op( m_checkpoint_data.m_message, msg, 0 );
+ m_checkpoint_data.m_file_name = file;
+ m_checkpoint_data.m_line_num = line_num;
+ }
+};
+
+unit_test_log_impl& s_log_impl() { static unit_test_log_impl the_inst; return the_inst; }
+
+} // local namespace
+
+//____________________________________________________________________________//
+
+void
+unit_test_log_t::test_start( counter_t test_cases_amount )
+{
+ s_log_impl().m_log_formatter->log_start( s_log_impl().stream(), test_cases_amount );
+
+ if( runtime_config::show_build_info() )
+ s_log_impl().m_log_formatter->log_build_info( s_log_impl().stream() );
+
+ s_log_impl().m_entry_in_progress = false;
+}
+
+//____________________________________________________________________________//
+
+void
+unit_test_log_t::test_finish()
+{
+ s_log_impl().m_log_formatter->log_finish( s_log_impl().stream() );
+}
+
+//____________________________________________________________________________//
+
+void
+unit_test_log_t::test_aborted()
+{
+ BOOST_TEST_LOG_ENTRY( log_messages ) << "Test is aborted";
+}
+
+//____________________________________________________________________________//
+
+void
+unit_test_log_t::test_unit_start( test_unit const& tu )
+{
+ if( s_log_impl().m_threshold_level > log_test_suites )
+ return;
+
+ if( s_log_impl().m_entry_in_progress )
+ *this << log::end();
+
+ s_log_impl().m_log_formatter->test_unit_start( s_log_impl().stream(), tu );
+}
+
+//____________________________________________________________________________//
+
+void
+unit_test_log_t::test_unit_finish( test_unit const& tu, unsigned long elapsed )
+{
+ if( s_log_impl().m_threshold_level > log_test_suites )
+ return;
+
+ s_log_impl().m_checkpoint_data.clear();
+
+ if( s_log_impl().m_entry_in_progress )
+ *this << log::end();
+
+ s_log_impl().m_log_formatter->test_unit_finish( s_log_impl().stream(), tu, elapsed );
+}
+
+//____________________________________________________________________________//
+
+void
+unit_test_log_t::test_unit_skipped( test_unit const& tu )
+{
+ if( s_log_impl().m_threshold_level > log_test_suites )
+ return;
+
+ if( s_log_impl().m_entry_in_progress )
+ *this << log::end();
+
+ s_log_impl().m_log_formatter->test_unit_skipped( s_log_impl().stream(), tu );
+}
+
+//____________________________________________________________________________//
+
+void
+unit_test_log_t::test_unit_aborted( test_unit const& )
+{
+ // do nothing
+}
+
+//____________________________________________________________________________//
+
+void
+unit_test_log_t::assertion_result( bool )
+{
+ // do nothing
+}
+
+//____________________________________________________________________________//
+
+void
+unit_test_log_t::exception_caught( execution_exception const& ex )
+{
+ log_level l =
+ ex.code() <= execution_exception::cpp_exception_error ? log_cpp_exception_errors :
+ (ex.code() <= execution_exception::timeout_error ? log_system_errors
+ : log_fatal_errors );
+
+ if( l >= s_log_impl().m_threshold_level ) {
+ if( s_log_impl().m_entry_in_progress )
+ *this << log::end();
+
+ s_log_impl().m_log_formatter->log_exception( s_log_impl().stream(), s_log_impl().m_checkpoint_data, ex.what() );
+ }
+}
+
+//____________________________________________________________________________//
+
+void
+unit_test_log_t::set_checkpoint( const_string file, std::size_t line_num, const_string msg )
+{
+ s_log_impl().set_checkpoint( file, line_num, msg );
+}
+
+//____________________________________________________________________________//
+
+char
+set_unix_slash( char in )
+{
+ return in == '\\' ? '/' : in;
+}
+
+unit_test_log_t&
+unit_test_log_t::operator<<( log::begin const& b )
+{
+ if( s_log_impl().m_entry_in_progress )
+ *this << log::end();
+
+ s_log_impl().m_stream_state_saver->restore();
+
+ s_log_impl().m_entry_data.clear();
+
+ assign_op( s_log_impl().m_entry_data.m_file_name, b.m_file_name, 0 );
+
+ // normalize file name
+ std::transform( s_log_impl().m_entry_data.m_file_name.begin(), s_log_impl().m_entry_data.m_file_name.end(),
+ s_log_impl().m_entry_data.m_file_name.begin(),
+ &set_unix_slash );
+
+ s_log_impl().m_entry_data.m_line_num = b.m_line_num;
+
+ return *this;
+}
+
+//____________________________________________________________________________//
+
+unit_test_log_t&
+unit_test_log_t::operator<<( log::end const& )
+{
+ if( s_log_impl().m_entry_in_progress )
+ s_log_impl().m_log_formatter->log_entry_finish( s_log_impl().stream() );
+
+ s_log_impl().m_entry_in_progress = false;
+
+ return *this;
+}
+
+//____________________________________________________________________________//
+
+unit_test_log_t&
+unit_test_log_t::operator<<( log_level l )
+{
+ s_log_impl().m_entry_data.m_level = l;
+
+ return *this;
+}
+
+//____________________________________________________________________________//
+
+ut_detail::entry_value_collector
+unit_test_log_t::operator()( log_level l )
+{
+ *this << l;
+
+ ut_detail::entry_value_collector res;
+ return res;
+}
+
+//____________________________________________________________________________//
+
+unit_test_log_t&
+unit_test_log_t::operator<<( const_string value )
+{
+ if( s_log_impl().m_entry_data.m_level >= s_log_impl().m_threshold_level && !value.empty() ) {
+ if( !s_log_impl().m_entry_in_progress ) {
+ s_log_impl().m_entry_in_progress = true;
+
+ switch( s_log_impl().m_entry_data.m_level ) {
+ case log_successful_tests:
+ s_log_impl().m_log_formatter->log_entry_start( s_log_impl().stream(), s_log_impl().m_entry_data,
+ unit_test_log_formatter::BOOST_UTL_ET_INFO );
+ break;
+ case log_messages:
+ s_log_impl().m_log_formatter->log_entry_start( s_log_impl().stream(), s_log_impl().m_entry_data,
+ unit_test_log_formatter::BOOST_UTL_ET_MESSAGE );
+ break;
+ case log_warnings:
+ s_log_impl().m_log_formatter->log_entry_start( s_log_impl().stream(), s_log_impl().m_entry_data,
+ unit_test_log_formatter::BOOST_UTL_ET_WARNING );
+ break;
+ case log_all_errors:
+ case log_cpp_exception_errors:
+ case log_system_errors:
+ s_log_impl().m_log_formatter->log_entry_start( s_log_impl().stream(), s_log_impl().m_entry_data,
+ unit_test_log_formatter::BOOST_UTL_ET_ERROR );
+ break;
+ case log_fatal_errors:
+ s_log_impl().m_log_formatter->log_entry_start( s_log_impl().stream(), s_log_impl().m_entry_data,
+ unit_test_log_formatter::BOOST_UTL_ET_FATAL_ERROR );
+ break;
+ case log_nothing:
+ case log_test_suites:
+ case invalid_log_level:
+ return *this;
+ }
+ }
+
+ s_log_impl().m_log_formatter->log_entry_value( s_log_impl().stream(), value );
+ }
+
+ return *this;
+}
+
+//____________________________________________________________________________//
+
+void
+unit_test_log_t::set_stream( std::ostream& str )
+{
+ if( s_log_impl().m_entry_in_progress )
+ return;
+
+ s_log_impl().m_stream = &str;
+ s_log_impl().m_stream_state_saver.reset( new io_saver_type( str ) );
+}
+
+//____________________________________________________________________________//
+
+void
+unit_test_log_t::set_threshold_level( log_level lev )
+{
+ if( s_log_impl().m_entry_in_progress || lev == invalid_log_level )
+ return;
+
+ s_log_impl().m_threshold_level = lev;
+}
+
+//____________________________________________________________________________//
+
+void
+unit_test_log_t::set_format( output_format log_format )
+{
+ if( s_log_impl().m_entry_in_progress )
+ return;
+
+ if( log_format == CLF )
+ set_formatter( new output::compiler_log_formatter );
+ else
+ set_formatter( new output::xml_log_formatter );
+}
+
+//____________________________________________________________________________//
+
+void
+unit_test_log_t::set_formatter( unit_test_log_formatter* the_formatter )
+{
+ s_log_impl().m_log_formatter.reset( the_formatter );
+}
+
+//____________________________________________________________________________//
+
+} // namespace unit_test
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: unit_test_log.ipp,v $
+// Revision 1.11 2005/12/14 05:34:21 rogeeff
+// log API simplified
+//
+// Revision 1.10 2005/04/30 16:48:51 rogeeff
+// io saver warkaround for classic io is shared
+//
+// Revision 1.9 2005/04/29 06:28:35 rogeeff
+// bug fix for manipulator handling
+//
+// Revision 1.8 2005/04/12 06:50:46 rogeeff
+// assign_to -> assign_op
+//
+// Revision 1.7 2005/03/22 07:06:58 rogeeff
+// assign_to made free function
+//
+// Revision 1.6 2005/02/20 08:27:07 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_UNIT_TEST_LOG_IPP_012205GER
diff --git a/boost/boost/test/impl/unit_test_main.ipp b/boost/boost/test/impl/unit_test_main.ipp
new file mode 100644
index 00000000000..41ec0403add
--- /dev/null
+++ b/boost/boost/test/impl/unit_test_main.ipp
@@ -0,0 +1,127 @@
+// (C) Copyright Gennadiy Rozental 2001-2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: unit_test_main.ipp,v $
+//
+// Version : $Revision: 1.9 $
+//
+// Description : main function implementation for Unit Test Framework
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UNIT_TEST_MAIN_IPP_012205GER
+#define BOOST_TEST_UNIT_TEST_MAIN_IPP_012205GER
+
+// Boost.Test
+#include <boost/test/framework.hpp>
+#include <boost/test/results_collector.hpp>
+#include <boost/test/unit_test_suite_impl.hpp>
+#include <boost/test/results_reporter.hpp>
+
+#include <boost/test/detail/unit_test_parameters.hpp>
+
+// Boost
+#include <boost/cstdlib.hpp>
+
+// STL
+#include <stdexcept>
+#include <iostream>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// ************** unit_test_main ************** //
+// ************************************************************************** //
+
+namespace boost {
+
+namespace unit_test {
+
+int BOOST_TEST_DECL
+
+#if defined(BOOST_TEST_DYN_LINK)
+unit_test_main( bool (*init_unit_test_func)(), int argc, char* argv[] )
+#else
+unit_test_main( int argc, char* argv[] )
+#endif
+{
+ try {
+ framework::init( argc, argv );
+
+#ifdef BOOST_TEST_DYN_LINK
+ if( !(*init_unit_test_func)() )
+ throw framework::setup_error( BOOST_TEST_L( "test tree initialization error" ) );
+#endif
+
+ framework::run();
+
+ results_reporter::make_report();
+
+ return runtime_config::no_result_code()
+ ? boost::exit_success
+ : results_collector.results( framework::master_test_suite().p_id ).result_code();
+ }
+ catch( framework::internal_error const& ex ) {
+ std::cerr << "Boost.Test framework internal error: " << ex.what() << std::endl;
+
+ return boost::exit_exception_failure;
+ }
+ catch( framework::setup_error const& ex ) {
+ std::cerr << "Test setup error: " << ex.what() << std::endl;
+
+ return boost::exit_exception_failure;
+ }
+ catch( ... ) {
+ std::cerr << "Boost.Test framework internal error: unknown reason" << std::endl;
+
+ return boost::exit_exception_failure;
+ }
+}
+
+} // namespace unit_test
+
+} // namespace boost
+
+#if !defined(BOOST_TEST_DYN_LINK) && !defined(BOOST_TEST_NO_MAIN)
+
+// ************************************************************************** //
+// ************** main function for tests using lib ************** //
+// ************************************************************************** //
+
+int BOOST_TEST_CALL_DECL
+main( int argc, char* argv[] )
+{
+ return ::boost::unit_test::unit_test_main( argc, argv );
+}
+
+#endif // !BOOST_TEST_DYN_LINK && !BOOST_TEST_NO_MAIN
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: unit_test_main.ipp,v $
+// Revision 1.9 2006/03/19 11:45:26 rogeeff
+// main function renamed for consistancy
+//
+// Revision 1.8 2006/03/19 07:27:52 rogeeff
+// streamline test setup error message
+//
+// Revision 1.7 2005/12/14 05:35:57 rogeeff
+// DLL support implemented
+// Alternative init API introduced
+//
+// Revision 1.6 2005/02/20 08:27:07 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_UNIT_TEST_MAIN_IPP_012205GER
diff --git a/boost/boost/test/impl/unit_test_monitor.ipp b/boost/boost/test/impl/unit_test_monitor.ipp
new file mode 100644
index 00000000000..6104d924d74
--- /dev/null
+++ b/boost/boost/test/impl/unit_test_monitor.ipp
@@ -0,0 +1,133 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: unit_test_monitor.ipp,v $
+//
+// Version : $Revision: 1.4 $
+//
+// Description : implements specific subclass of Executon Monitor used by Unit
+// Test Framework to monitor test cases run.
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UNIT_TEST_MONITOR_IPP_012205GER
+#define BOOST_TEST_UNIT_TEST_MONITOR_IPP_012205GER
+
+// Boost.Test
+#include <boost/test/unit_test_monitor.hpp>
+#include <boost/test/unit_test_suite_impl.hpp>
+#include <boost/test/test_tools.hpp>
+#include <boost/test/framework.hpp>
+
+#include <boost/test/detail/unit_test_parameters.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace boost {
+
+namespace unit_test {
+
+namespace {
+
+template<typename F>
+struct zero_return_wrapper_t {
+ explicit zero_return_wrapper_t( F const& f ) : m_f( f ) {}
+
+ int operator()() { m_f(); return 0; }
+
+ F const& m_f;
+};
+
+template<typename F>
+zero_return_wrapper_t<F>
+zero_return_wrapper( F const& f )
+{
+ return zero_return_wrapper_t<F>( f );
+}
+
+}
+
+// ************************************************************************** //
+// ************** unit_test_monitor ************** //
+// ************************************************************************** //
+
+unit_test_monitor_t::error_level
+unit_test_monitor_t::execute_and_translate( test_case const& tc )
+{
+ try {
+ execute( callback0<int>( zero_return_wrapper( tc.test_func() ) ),
+ runtime_config::catch_sys_errors(),
+ tc.p_timeout );
+ }
+ catch( execution_exception const& ex ) {
+ framework::exception_caught( ex );
+ framework::test_unit_aborted( framework::current_test_case() );
+
+ // translate execution_exception::error_code to error_level
+ switch( ex.code() ) {
+ case execution_exception::no_error: return test_ok;
+ case execution_exception::user_error: return unexpected_exception;
+ case execution_exception::cpp_exception_error: return unexpected_exception;
+ case execution_exception::system_error: return os_exception;
+ case execution_exception::timeout_error: return os_timeout;
+ case execution_exception::user_fatal_error:
+ case execution_exception::system_fatal_error: return fatal_error;
+ default: return unexpected_exception;
+ }
+ }
+
+ return test_ok;
+}
+
+//____________________________________________________________________________//
+
+} // namespace unit_test
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: unit_test_monitor.ipp,v $
+// Revision 1.4 2005/12/14 05:37:52 rogeeff
+// zero_return_wrapper made to template
+// comply to test_unit_aborted() modification
+//
+// Revision 1.3 2005/02/20 08:27:07 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// Revision 1.2 2005/02/01 06:40:07 rogeeff
+// copyright update
+// old log entries removed
+// minor stilistic changes
+// depricated tools removed
+//
+// Revision 1.1 2005/01/22 19:22:13 rogeeff
+// implementation moved into headers section to eliminate dependency of included/minimal component on src directory
+//
+// Revision 1.17 2005/01/19 16:34:07 vawjr
+// Changed the \r\r\n back to \r\n on windows so we don't get errors when compiling
+// on VC++8.0. I don't know why Microsoft thinks it's a good idea to call this an error,
+// but they do. I also don't know why people insist on checking out files on Windows and
+// copying them to a unix system to check them in (which will cause exactly this problem)
+//
+// Revision 1.16 2005/01/18 08:30:08 rogeeff
+// unit_test_log rework:
+// eliminated need for ::instance()
+// eliminated need for << end and ...END macro
+// straitend interface between log and formatters
+// change compiler like formatter name
+// minimized unit_test_log interface and reworked to use explicit calls
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_UNIT_TEST_MONITOR_IPP_012205GER
diff --git a/boost/boost/test/impl/unit_test_parameters.ipp b/boost/boost/test/impl/unit_test_parameters.ipp
new file mode 100644
index 00000000000..a862fc384d6
--- /dev/null
+++ b/boost/boost/test/impl/unit_test_parameters.ipp
@@ -0,0 +1,366 @@
+// (C) Copyright Gennadiy Rozental 2001-2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: unit_test_parameters.ipp,v $
+//
+// Version : $Revision: 1.10 $
+//
+// Description : simple implementation for Unit Test Framework parameter
+// handling routines. May be rewritten in future to use some kind of
+// command-line arguments parsing facility and environment variable handling
+// facility
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UNIT_TEST_PARAMETERS_IPP_012205GER
+#define BOOST_TEST_UNIT_TEST_PARAMETERS_IPP_012205GER
+
+// Boost.Test
+#include <boost/test/detail/unit_test_parameters.hpp>
+#include <boost/test/utils/basic_cstring/basic_cstring.hpp>
+#include <boost/test/utils/basic_cstring/compare.hpp>
+#include <boost/test/utils/basic_cstring/io.hpp>
+#include <boost/test/utils/fixed_mapping.hpp>
+
+// Boost
+#include <boost/config.hpp>
+#include <boost/test/detail/suppress_warnings.hpp>
+#include <boost/lexical_cast.hpp>
+#include <boost/test/detail/enable_warnings.hpp>
+
+// STL
+#include <map>
+#include <cstdlib>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+# ifdef BOOST_NO_STDC_NAMESPACE
+namespace std { using ::getenv; using ::strncmp; using ::strcmp; }
+# endif
+
+namespace boost {
+
+namespace unit_test {
+
+namespace {
+
+// framework parameters and there corresponding command-line arguments
+literal_string LOG_LEVEL = "BOOST_TEST_LOG_LEVEL";
+literal_string NO_RESULT_CODE = "BOOST_TEST_RESULT_CODE";
+literal_string REPORT_LEVEL = "BOOST_TEST_REPORT_LEVEL";
+literal_string TESTS_TO_RUN = "BOOST_TESTS_TO_RUN";
+literal_string SAVE_TEST_PATTERN = "BOOST_TEST_SAVE_PATTERN";
+literal_string BUILD_INFO = "BOOST_TEST_BUILD_INFO";
+literal_string SHOW_PROGRESS = "BOOST_TEST_SHOW_PROGRESS";
+literal_string CATCH_SYS_ERRORS = "BOOST_TEST_CATCH_SYSTEM_ERRORS";
+literal_string REPORT_FORMAT = "BOOST_TEST_REPORT_FORMAT";
+literal_string LOG_FORMAT = "BOOST_TEST_LOG_FORMAT";
+literal_string OUTPUT_FORMAT = "BOOST_TEST_OUTPUT_FORMAT";
+literal_string DETECT_MEM_LEAK = "BOOST_TEST_DETECT_MEMORY_LEAK";
+literal_string RANDOM_SEED = "BOOST_TEST_RANDOM";
+literal_string BREAK_EXEC_PATH = "BOOST_TEST_BREAK_EXEC_PATH";
+
+unit_test::log_level s_log_level;
+bool s_no_result_code;
+unit_test::report_level s_report_level;
+const_string s_tests_to_run;
+const_string s_exec_path_to_break;
+bool s_save_pattern;
+bool s_show_build_info;
+bool s_show_progress;
+bool s_catch_sys_errors;
+output_format s_report_format;
+output_format s_log_format;
+long s_detect_mem_leaks;
+unsigned int s_random_seed;
+
+// ************************************************************************** //
+// ************** runtime_config ************** //
+// ************************************************************************** //
+
+const_string
+retrieve_framework_parameter( const_string parameter_name, int* argc, char** argv )
+{
+ static fixed_mapping<const_string,const_string> parameter_2_cla_name_map(
+ LOG_LEVEL , "--log_level",
+ NO_RESULT_CODE , "--result_code",
+ REPORT_LEVEL , "--report_level",
+ TESTS_TO_RUN , "--run_test",
+ SAVE_TEST_PATTERN , "--save_pattern",
+ BUILD_INFO , "--build_info",
+ SHOW_PROGRESS , "--show_progress",
+ CATCH_SYS_ERRORS , "--catch_system_errors",
+ REPORT_FORMAT , "--report_format",
+ LOG_FORMAT , "--log_format",
+ OUTPUT_FORMAT , "--output_format",
+ DETECT_MEM_LEAK , "--detect_memory_leaks",
+ RANDOM_SEED , "--random",
+ BREAK_EXEC_PATH , "--break_exec_path",
+
+ ""
+ );
+
+ // first try to find parameter among command line arguments if present
+ if( argc ) {
+ // locate corresponding cla name
+ const_string cla_name = parameter_2_cla_name_map[parameter_name];
+
+ if( !cla_name.is_empty() ) {
+ for( int i = 1; i < *argc; ++i ) {
+ if( cla_name == const_string( argv[i], cla_name.size() ) && argv[i][cla_name.size()] == '=' ) {
+ const_string result = argv[i] + cla_name.size() + 1;
+
+ for( int j = i; j < *argc; ++j ) {
+ argv[j] = argv[j+1];
+ }
+ --(*argc);
+
+ return result;
+ }
+ }
+ }
+ }
+
+ return std::getenv( parameter_name.begin() );
+}
+
+long interpret_long( const_string from )
+{
+ bool negative = false;
+ long res = 0;
+
+ if( first_char( from ) == '-' ) {
+ negative = true;
+ from.trim_left( 1 );
+ }
+
+ const_string::iterator it = from.begin();
+ for( ;it != from.end(); ++it ) {
+ int d = *it - '0';
+
+ res = 10 * res + d;
+ }
+
+ if( negative )
+ res = -res;
+
+ return res;
+}
+
+} // local namespace
+
+//____________________________________________________________________________//
+
+namespace runtime_config {
+
+void
+init( int* argc, char** argv )
+{
+ fixed_mapping<const_string,unit_test::log_level,case_ins_less<char const> > log_level_name(
+ "all" , log_successful_tests,
+ "success" , log_successful_tests,
+ "test_suite" , log_test_suites,
+ "message" , log_messages,
+ "warning" , log_warnings,
+ "error" , log_all_errors,
+ "cpp_exception" , log_cpp_exception_errors,
+ "system_error" , log_system_errors,
+ "fatal_error" , log_fatal_errors,
+ "nothing" , log_nothing,
+
+ invalid_log_level
+ );
+
+ fixed_mapping<const_string,unit_test::report_level,case_ins_less<char const> > report_level_name (
+ "confirm", CONFIRMATION_REPORT,
+ "short", SHORT_REPORT,
+ "detailed", DETAILED_REPORT,
+ "no", NO_REPORT,
+
+ INV_REPORT_LEVEL
+ );
+
+ fixed_mapping<const_string,output_format,case_ins_less<char const> > output_format_name (
+ "HRF", CLF,
+ "CLF", CLF,
+ "XML", XML,
+
+ CLF
+ );
+
+ s_no_result_code = retrieve_framework_parameter( NO_RESULT_CODE, argc, argv ) == "no";
+ s_save_pattern = retrieve_framework_parameter( SAVE_TEST_PATTERN, argc, argv ) == "yes";
+ s_show_build_info = retrieve_framework_parameter( BUILD_INFO, argc, argv ) == "yes";
+ s_show_progress = retrieve_framework_parameter( SHOW_PROGRESS, argc, argv ) == "yes";
+ s_catch_sys_errors = retrieve_framework_parameter( CATCH_SYS_ERRORS, argc, argv ) != "no";
+ s_tests_to_run = retrieve_framework_parameter( TESTS_TO_RUN, argc, argv );
+ s_exec_path_to_break= retrieve_framework_parameter( BREAK_EXEC_PATH, argc, argv );
+
+ const_string rs_str = retrieve_framework_parameter( RANDOM_SEED, argc, argv );
+ s_random_seed = rs_str.is_empty() ? 0 : lexical_cast<unsigned int>( rs_str );
+
+ s_log_level = log_level_name[retrieve_framework_parameter( LOG_LEVEL, argc, argv )];
+ s_report_level = report_level_name[retrieve_framework_parameter( REPORT_LEVEL, argc, argv )];
+
+ s_report_format = output_format_name[retrieve_framework_parameter( REPORT_FORMAT, argc, argv )];
+ s_log_format = output_format_name[retrieve_framework_parameter( LOG_FORMAT, argc, argv )];
+
+ const_string output_format = retrieve_framework_parameter( OUTPUT_FORMAT, argc, argv );
+ if( !output_format.is_empty() ) {
+ s_report_format = output_format_name[output_format];
+ s_log_format = output_format_name[output_format];
+ }
+
+ const_string ml_str = retrieve_framework_parameter( DETECT_MEM_LEAK, argc, argv );
+ s_detect_mem_leaks = ml_str.is_empty() ? 1 : interpret_long( ml_str );
+}
+
+//____________________________________________________________________________//
+
+unit_test::log_level
+log_level()
+{
+ return s_log_level;
+}
+
+//____________________________________________________________________________//
+
+bool
+no_result_code()
+{
+ return s_no_result_code;
+}
+
+//____________________________________________________________________________//
+
+unit_test::report_level
+report_level()
+{
+ return s_report_level;
+}
+
+//____________________________________________________________________________//
+
+const_string
+test_to_run()
+{
+ return s_tests_to_run;
+}
+
+//____________________________________________________________________________//
+
+const_string
+break_exec_path()
+{
+ return s_exec_path_to_break;
+}
+
+//____________________________________________________________________________//
+
+bool
+save_pattern()
+{
+ return s_save_pattern;
+}
+
+//____________________________________________________________________________//
+
+bool
+show_progress()
+{
+ return s_show_progress;
+}
+
+//____________________________________________________________________________//
+
+bool
+show_build_info()
+{
+ return s_show_build_info;
+}
+
+//____________________________________________________________________________//
+
+bool
+catch_sys_errors()
+{
+ return s_catch_sys_errors;
+}
+
+//____________________________________________________________________________//
+
+output_format
+report_format()
+{
+ return s_report_format;
+}
+
+//____________________________________________________________________________//
+
+output_format
+log_format()
+{
+ return s_log_format;
+}
+
+//____________________________________________________________________________//
+
+long
+detect_memory_leaks()
+{
+ return s_detect_mem_leaks;
+}
+
+//____________________________________________________________________________//
+
+int
+random_seed()
+{
+ return s_random_seed;
+}
+
+//____________________________________________________________________________//
+
+} // namespace runtime_config
+
+} // namespace unit_test
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: unit_test_parameters.ipp,v $
+// Revision 1.10 2006/01/30 07:29:49 rogeeff
+// split memory leaks detection API in two to get more functions with better defined roles
+//
+// Revision 1.9 2005/12/14 05:38:47 rogeeff
+// new parameter break_exec_path() is introduced
+//
+// Revision 1.8 2005/05/08 08:55:09 rogeeff
+// typos and missing descriptions fixed
+//
+// Revision 1.7 2005/04/05 07:23:21 rogeeff
+// restore default
+//
+// Revision 1.6 2005/04/05 06:11:37 rogeeff
+// memory leak allocation point detection\nextra help with _WIN32_WINNT
+//
+// Revision 1.5 2005/02/21 10:12:22 rogeeff
+// Support for random order of test cases implemented
+//
+// Revision 1.4 2005/02/20 08:27:07 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_UNIT_TEST_PARAMETERS_IPP_012205GER
diff --git a/boost/boost/test/impl/unit_test_suite.ipp b/boost/boost/test/impl/unit_test_suite.ipp
new file mode 100644
index 00000000000..7afbeafc689
--- /dev/null
+++ b/boost/boost/test/impl/unit_test_suite.ipp
@@ -0,0 +1,259 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: unit_test_suite.ipp,v $
+//
+// Version : $Revision: 1.13 $
+//
+// Description : privide core implementation for Unit Test Framework.
+// Extensions could be provided in separate files
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UNIT_TEST_SUITE_IPP_012205GER
+#define BOOST_TEST_UNIT_TEST_SUITE_IPP_012205GER
+
+// Boost.Test
+#include <boost/detail/workaround.hpp>
+#include <boost/test/unit_test_suite_impl.hpp>
+#include <boost/test/framework.hpp>
+#include <boost/test/utils/foreach.hpp>
+#include <boost/test/results_collector.hpp>
+#include <boost/test/detail/unit_test_parameters.hpp>
+
+// Boost
+#include <boost/timer.hpp>
+
+// STL
+#include <algorithm>
+#include <vector>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+#if BOOST_WORKAROUND(__BORLANDC__, < 0x600) && \
+ BOOST_WORKAROUND(_STLPORT_VERSION, <= 0x450) \
+ /**/
+ using std::rand; // rand is in std and random_shuffle is in _STL
+#endif
+
+//____________________________________________________________________________//
+
+namespace boost {
+
+namespace unit_test {
+
+// ************************************************************************** //
+// ************** test_unit ************** //
+// ************************************************************************** //
+
+test_unit::test_unit( const_string name, test_unit_type t )
+: p_type( t )
+, p_type_name( t == tut_case ? "case" : "suite" )
+, p_id( INV_TEST_UNIT_ID )
+, p_name( std::string( name.begin(), name.size() ) )
+{
+}
+
+//____________________________________________________________________________//
+
+void
+test_unit::depends_on( test_unit* tu )
+{
+ m_dependencies.push_back( tu->p_id );
+}
+
+//____________________________________________________________________________//
+
+bool
+test_unit::check_dependencies() const
+{
+#if BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x530) )
+ BOOST_TEST_FOREACH( test_unit_id, tu_id, const_cast<test_unit*>(this)->m_dependencies ) {
+#else
+ BOOST_TEST_FOREACH( test_unit_id, tu_id, m_dependencies ) {
+#endif
+ if( !unit_test::results_collector.results( tu_id ).passed() )
+ return false;
+ }
+
+ return true;
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// ************** test_case ************** //
+// ************************************************************************** //
+
+test_case::test_case( const_string name, callback0<> const& test_func )
+: test_unit( name, (test_unit_type)type )
+, m_test_func( test_func )
+{
+ // !! weirdest MSVC BUG; try to remove this statement; looks like it eats first token of next statement
+#if BOOST_WORKAROUND(BOOST_MSVC,<1300)
+ 0;
+#endif
+ framework::register_test_unit( this );
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// ************** test_suite ************** //
+// ************************************************************************** //
+
+//____________________________________________________________________________//
+
+test_suite::test_suite( const_string name )
+: test_unit( name, (test_unit_type)type )
+{
+ framework::register_test_unit( this );
+}
+
+//____________________________________________________________________________//
+
+// !! need to prevent modifing test unit once it is added to tree
+
+void
+test_suite::add( test_unit* tu, counter_t expected_failures, unsigned timeout )
+{
+ if( expected_failures != 0 )
+ tu->p_expected_failures.value = expected_failures;
+
+ p_expected_failures.value += tu->p_expected_failures;
+
+ if( timeout != 0 )
+ tu->p_timeout.value = timeout;
+
+ m_members.push_back( tu->p_id );
+ tu->p_parent_id.value = p_id;
+}
+
+//____________________________________________________________________________//
+
+void
+test_suite::add( test_unit_generator const& gen, unsigned timeout )
+{
+ test_unit* tu;
+ while((tu = gen.next(), tu))
+ add( tu, 0, timeout );
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// ************** traverse_test_tree ************** //
+// ************************************************************************** //
+
+void
+traverse_test_tree( test_case const& tc, test_tree_visitor& V )
+{
+ V.visit( tc );
+}
+
+//____________________________________________________________________________//
+
+void
+traverse_test_tree( test_suite const& suite, test_tree_visitor& V )
+{
+ if( !V.test_suite_start( suite ) )
+ return;
+
+ try {
+ if( runtime_config::random_seed() == 0 ) {
+ BOOST_TEST_FOREACH( test_unit_id, id, suite.m_members )
+ traverse_test_tree( id, V );
+ }
+ else {
+ std::vector<test_unit_id> members( suite.m_members );
+ std::random_shuffle( members.begin(), members.end() );
+ BOOST_TEST_FOREACH( test_unit_id, id, members )
+ traverse_test_tree( id, V );
+ }
+
+ } catch( test_being_aborted const& ) {
+ V.test_suite_finish( suite );
+ framework::test_unit_aborted( suite );
+
+ throw;
+ }
+
+ V.test_suite_finish( suite );
+}
+
+//____________________________________________________________________________//
+
+void
+traverse_test_tree( test_unit_id id, test_tree_visitor& V )
+{
+ if( test_id_2_unit_type( id ) == tut_case )
+ traverse_test_tree( framework::get<test_case>( id ), V );
+ else
+ traverse_test_tree( framework::get<test_suite>( id ), V );
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// ************** object generators ************** //
+// ************************************************************************** //
+
+namespace ut_detail {
+
+std::string
+normalize_test_case_name( const_string name )
+{
+ return ( name[0] == '&'
+ ? std::string( name.begin()+1, name.size()-1 )
+ : std::string( name.begin(), name.size() ) );
+}
+
+//____________________________________________________________________________//
+
+} // namespace ut_detail
+
+} // namespace unit_test
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: unit_test_suite.ipp,v $
+// Revision 1.13 2006/02/23 15:33:15 rogeeff
+// workaround restored
+//
+// Revision 1.12 2006/01/28 08:53:57 rogeeff
+// VC6.0 workaround removed
+//
+// Revision 1.11 2005/12/14 05:54:41 rogeeff
+// *** empty log message ***
+//
+// Revision 1.10 2005/04/18 04:55:36 rogeeff
+// test unit name made read/write
+//
+// Revision 1.9 2005/03/23 21:02:25 rogeeff
+// Sunpro CC 5.3 fixes
+//
+// Revision 1.8 2005/03/21 15:33:15 rogeeff
+// check reworked
+//
+// Revision 1.7 2005/02/25 21:27:44 turkanis
+// fix for random_shuffle on Borland 5.x w/ STLPort
+//
+// Revision 1.6 2005/02/21 10:12:24 rogeeff
+// Support for random order of test cases implemented
+//
+// Revision 1.5 2005/02/20 08:27:07 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_UNIT_TEST_SUITE_IPP_012205GER
diff --git a/boost/boost/test/impl/xml_log_formatter.ipp b/boost/boost/test/impl/xml_log_formatter.ipp
new file mode 100644
index 00000000000..f9e0687a55e
--- /dev/null
+++ b/boost/boost/test/impl/xml_log_formatter.ipp
@@ -0,0 +1,195 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: xml_log_formatter.ipp,v $
+//
+// Version : $Revision: 1.5 $
+//
+// Description : implements XML Log formatter
+// ***************************************************************************
+
+#ifndef BOOST_TEST_XML_LOG_FORMATTER_IPP_020105GER
+#define BOOST_TEST_XML_LOG_FORMATTER_IPP_020105GER
+
+// Boost.Test
+#include <boost/test/output/xml_log_formatter.hpp>
+#include <boost/test/unit_test_suite_impl.hpp>
+#include <boost/test/framework.hpp>
+#include <boost/test/utils/basic_cstring/io.hpp>
+
+#include <boost/test/utils/xml_printer.hpp>
+
+// Boost
+#include <boost/version.hpp>
+
+// STL
+#include <iostream>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace boost {
+
+namespace unit_test {
+
+namespace output {
+
+static const_string tu_type_name( test_unit const& tu )
+{
+ return tu.p_type == tut_case ? "TestCase" : "TestSuite";
+}
+
+// ************************************************************************** //
+// ************** xml_log_formatter ************** //
+// ************************************************************************** //
+
+void
+xml_log_formatter::log_start( std::ostream& ostr, counter_t )
+{
+ ostr << "<TestLog>";
+}
+
+//____________________________________________________________________________//
+
+void
+xml_log_formatter::log_finish( std::ostream& ostr )
+{
+ ostr << "</TestLog>";
+}
+
+//____________________________________________________________________________//
+
+void
+xml_log_formatter::log_build_info( std::ostream& ostr )
+{
+ ostr << "<BuildInfo"
+ << " platform" << attr_value() << BOOST_PLATFORM
+ << " compiler" << attr_value() << BOOST_COMPILER
+ << " stl" << attr_value() << BOOST_STDLIB
+ << " boost=\"" << BOOST_VERSION/100000 << "."
+ << BOOST_VERSION/100 % 1000 << "."
+ << BOOST_VERSION % 100 << '\"'
+ << "/>";
+}
+
+//____________________________________________________________________________//
+
+void
+xml_log_formatter::test_unit_start( std::ostream& ostr, test_unit const& tu )
+{
+ ostr << "<" << tu_type_name( tu ) << " name" << attr_value() << tu.p_name.get() << ">";
+}
+
+//____________________________________________________________________________//
+
+void
+xml_log_formatter::test_unit_finish( std::ostream& ostr, test_unit const& tu, unsigned long elapsed )
+{
+ if( tu.p_type == tut_case )
+ ostr << "<TestingTime>" << elapsed << "</TestingTime>";
+
+ ostr << "</" << tu_type_name( tu ) << ">";
+}
+
+//____________________________________________________________________________//
+
+void
+xml_log_formatter::test_unit_skipped( std::ostream& ostr, test_unit const& tu )
+{
+ ostr << "<" << tu_type_name( tu )
+ << " name" << attr_value() << tu.p_name.get()
+ << " skipped" << attr_value() << "yes"
+ << "/>";
+}
+
+//____________________________________________________________________________//
+
+void
+xml_log_formatter::log_exception( std::ostream& ostr, log_checkpoint_data const& checkpoint_data, const_string explanation )
+{
+ ostr << "<Exception name" << attr_value() << framework::current_test_case().p_name.get() << ">"
+ << pcdata() << explanation;
+
+ if( !checkpoint_data.m_file_name.is_empty() ) {
+ ostr << "<LastCheckpoint file" << attr_value() << checkpoint_data.m_file_name
+ << " line" << attr_value() << checkpoint_data.m_line_num
+ << ">"
+ << pcdata() << checkpoint_data.m_message
+ << "</LastCheckpoint>";
+ }
+
+ ostr << "</Exception>";
+}
+
+//____________________________________________________________________________//
+
+void
+xml_log_formatter::log_entry_start( std::ostream& ostr, log_entry_data const& entry_data, log_entry_types let )
+{
+ static literal_string xml_tags[] = { "Info", "Message", "Warning", "Error", "FatalError" };
+
+ m_curr_tag = xml_tags[let];
+ ostr << '<' << m_curr_tag
+ << " file" << attr_value() << entry_data.m_file_name
+ << " line" << attr_value() << entry_data.m_line_num
+ << ">";
+}
+
+//____________________________________________________________________________//
+
+void
+xml_log_formatter::log_entry_value( std::ostream& ostr, const_string value )
+{
+ ostr << pcdata() << value;
+}
+
+//____________________________________________________________________________//
+
+void
+xml_log_formatter::log_entry_finish( std::ostream& ostr )
+{
+ ostr << "</" << m_curr_tag << ">";
+
+ m_curr_tag.clear();
+}
+
+//____________________________________________________________________________//
+
+} // namespace output
+
+} // namespace unit_test
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: xml_log_formatter.ipp,v $
+// Revision 1.5 2005/12/14 05:39:43 rogeeff
+// *** empty log message ***
+//
+// Revision 1.4 2005/04/30 16:47:14 rogeeff
+// warning supressed
+//
+// Revision 1.3 2005/04/29 06:29:35 rogeeff
+// bug fix for incorect XML output
+//
+// Revision 1.2 2005/02/20 08:27:07 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// Revision 1.1 2005/02/01 08:59:38 rogeeff
+// supplied_log_formatters split
+// change formatters interface to simplify result interface
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_XML_LOG_FORMATTER_IPP_020105GER
diff --git a/boost/boost/test/impl/xml_report_formatter.ipp b/boost/boost/test/impl/xml_report_formatter.ipp
new file mode 100644
index 00000000000..1f589b7c851
--- /dev/null
+++ b/boost/boost/test/impl/xml_report_formatter.ipp
@@ -0,0 +1,130 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: xml_report_formatter.ipp,v $
+//
+// Version : $Revision: 1.3 $
+//
+// Description : XML report formatter
+// ***************************************************************************
+
+#ifndef BOOST_TEST_XML_REPORT_FORMATTER_IPP_020105GER
+#define BOOST_TEST_XML_REPORT_FORMATTER_IPP_020105GER
+
+// Boost.Test
+#include <boost/test/results_collector.hpp>
+#include <boost/test/unit_test_suite_impl.hpp>
+#include <boost/test/output/xml_report_formatter.hpp>
+
+#include <boost/test/utils/xml_printer.hpp>
+#include <boost/test/utils/basic_cstring/io.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace boost {
+
+namespace unit_test {
+
+namespace output {
+
+void
+xml_report_formatter::results_report_start( std::ostream& ostr )
+{
+ ostr << "<TestResult>";
+}
+
+//____________________________________________________________________________//
+
+void
+xml_report_formatter::results_report_finish( std::ostream& ostr )
+{
+ ostr << "</TestResult>";
+}
+
+
+//____________________________________________________________________________//
+
+void
+xml_report_formatter::test_unit_report_start( test_unit const& tu, std::ostream& ostr )
+{
+ test_results const& tr = results_collector.results( tu.p_id );
+
+ const_string descr;
+
+ if( tr.passed() )
+ descr = "passed";
+ else if( tr.p_skipped )
+ descr = "skipped";
+ else if( tr.p_aborted )
+ descr = "aborted";
+ else
+ descr = "failed";
+
+ ostr << '<' << ( tu.p_type == tut_case ? "TestCase" : "TestSuite" )
+ << " name" << attr_value() << tu.p_name.get()
+ << " result" << attr_value() << descr
+ << " assertions_passed" << attr_value() << tr.p_assertions_passed
+ << " assertions_failed" << attr_value() << tr.p_assertions_failed
+ << " expected_failures" << attr_value() << tr.p_expected_failures;
+
+ if( tu.p_type == tut_suite )
+ ostr << " test_cases_passed" << attr_value() << tr.p_test_cases_passed
+ << " test_cases_failed" << attr_value() << tr.p_test_cases_failed
+ << " test_cases_skipped" << attr_value() << tr.p_test_cases_skipped
+ << " test_cases_aborted" << attr_value() << tr.p_test_cases_aborted;
+
+
+ ostr << '>';
+}
+
+//____________________________________________________________________________//
+
+void
+xml_report_formatter::test_unit_report_finish( test_unit const& tu, std::ostream& ostr )
+{
+ ostr << "</" << ( tu.p_type == tut_case ? "TestCase" : "TestSuite" ) << '>';
+}
+
+//____________________________________________________________________________//
+
+void
+xml_report_formatter::do_confirmation_report( test_unit const& tu, std::ostream& ostr )
+{
+ test_unit_report_start( tu, ostr );
+ test_unit_report_finish( tu, ostr );
+}
+
+//____________________________________________________________________________//
+
+} // namespace output
+
+} // namespace unit_test
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: xml_report_formatter.ipp,v $
+// Revision 1.3 2005/12/14 05:39:43 rogeeff
+// *** empty log message ***
+//
+// Revision 1.2 2005/04/29 06:30:07 rogeeff
+// bug fix for incorect XML output
+//
+// Revision 1.1 2005/02/20 08:27:07 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_XML_REPORT_FORMATTER_IPP_020105GER
diff --git a/boost/boost/test/included/prg_exec_monitor.hpp b/boost/boost/test/included/prg_exec_monitor.hpp
new file mode 100644
index 00000000000..4632a00df99
--- /dev/null
+++ b/boost/boost/test/included/prg_exec_monitor.hpp
@@ -0,0 +1,42 @@
+// (C) Copyright Gennadiy Rozental 2001-2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: prg_exec_monitor.hpp,v $
+//
+// Version : $Revision: 1.10 $
+//
+// Description : included (vs. linked ) version of Program Execution Monitor
+// ***************************************************************************
+
+#ifndef BOOST_INCLUDED_PRG_EXEC_MONITOR_HPP_071894GER
+#define BOOST_INCLUDED_PRG_EXEC_MONITOR_HPP_071894GER
+
+#include <boost/test/impl/execution_monitor.ipp>
+#include <boost/test/impl/cpp_main.ipp>
+
+#define BOOST_TEST_INCLUDED
+#include <boost/test/prg_exec_monitor.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: prg_exec_monitor.hpp,v $
+// Revision 1.10 2006/02/06 10:01:55 rogeeff
+// m,ake name similar to the primary header name
+//
+// Revision 1.9 2005/02/01 06:40:07 rogeeff
+// copyright update
+// old log entries removed
+// minor stilistic changes
+// depricated tools removed
+//
+// Revision 1.8 2005/01/22 19:22:13 rogeeff
+// implementation moved into headers section to eliminate dependency of included/minimal component on src directory
+//
+// ***************************************************************************
+
+#endif // BOOST_INCLUDED_PRG_EXEC_MONITOR_HPP_071894GER
diff --git a/boost/boost/test/included/test_exec_monitor.hpp b/boost/boost/test/included/test_exec_monitor.hpp
new file mode 100644
index 00000000000..ff5b710eb22
--- /dev/null
+++ b/boost/boost/test/included/test_exec_monitor.hpp
@@ -0,0 +1,66 @@
+// (C) Copyright Gennadiy Rozental 2001-2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: test_exec_monitor.hpp,v $
+//
+// Version : $Revision: 1.15 $
+//
+// Description : included (vs. linked) version of Test Execution Monitor
+// ***************************************************************************
+
+#ifndef BOOST_INCLUDED_TEST_EXEC_MONITOR_HPP_071894GER
+#define BOOST_INCLUDED_TEST_EXEC_MONITOR_HPP_071894GER
+
+#include <boost/test/impl/compiler_log_formatter.ipp>
+#include <boost/test/impl/execution_monitor.ipp>
+#include <boost/test/impl/framework.ipp>
+#include <boost/test/impl/plain_report_formatter.ipp>
+#include <boost/test/impl/progress_monitor.ipp>
+#include <boost/test/impl/results_collector.ipp>
+#include <boost/test/impl/results_reporter.ipp>
+#include <boost/test/impl/test_main.ipp>
+#include <boost/test/impl/test_tools.ipp>
+#include <boost/test/impl/unit_test_log.ipp>
+#include <boost/test/impl/unit_test_main.ipp>
+#include <boost/test/impl/unit_test_monitor.ipp>
+#include <boost/test/impl/unit_test_parameters.ipp>
+#include <boost/test/impl/unit_test_suite.ipp>
+#include <boost/test/impl/xml_log_formatter.ipp>
+#include <boost/test/impl/xml_report_formatter.ipp>
+
+#define BOOST_TEST_INCLUDED
+#include <boost/test/test_exec_monitor.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: test_exec_monitor.hpp,v $
+// Revision 1.15 2006/02/06 10:01:55 rogeeff
+// m,ake name similar to the primary header name
+//
+// Revision 1.14 2006/02/01 07:57:49 rogeeff
+// included components entry points
+//
+// Revision 1.13 2005/02/20 08:27:08 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// Revision 1.12 2005/02/01 08:59:38 rogeeff
+// supplied_log_formatters split
+// change formatters interface to simplify result interface
+//
+// Revision 1.11 2005/02/01 06:40:07 rogeeff
+// copyright update
+// old log entries removed
+// minor stilistic changes
+// depricated tools removed
+//
+// Revision 1.10 2005/01/22 19:22:13 rogeeff
+// implementation moved into headers section to eliminate dependency of included/minimal component on src directory
+//
+// ***************************************************************************
+
+#endif // BOOST_INCLUDED_TEST_EXEC_MONITOR_HPP_071894GER
diff --git a/boost/boost/test/included/unit_test.hpp b/boost/boost/test/included/unit_test.hpp
new file mode 100644
index 00000000000..ef4923ca248
--- /dev/null
+++ b/boost/boost/test/included/unit_test.hpp
@@ -0,0 +1,65 @@
+// (C) Copyright Gennadiy Rozental 2001-2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: unit_test.hpp,v $
+//
+// Version : $Revision: 1.1 $
+//
+// Description : included (vs. linked) version of Unit Test Framework
+// ***************************************************************************
+
+#ifndef BOOST_INCLUDED_UNIT_TEST_FRAMEWORK_HPP_071894GER
+#define BOOST_INCLUDED_UNIT_TEST_FRAMEWORK_HPP_071894GER
+
+#include <boost/test/impl/compiler_log_formatter.ipp>
+#include <boost/test/impl/execution_monitor.ipp>
+#include <boost/test/impl/framework.ipp>
+#include <boost/test/impl/plain_report_formatter.ipp>
+#include <boost/test/impl/progress_monitor.ipp>
+#include <boost/test/impl/results_collector.ipp>
+#include <boost/test/impl/results_reporter.ipp>
+#include <boost/test/impl/test_tools.ipp>
+#include <boost/test/impl/unit_test_log.ipp>
+#include <boost/test/impl/unit_test_main.ipp>
+#include <boost/test/impl/unit_test_monitor.ipp>
+#include <boost/test/impl/unit_test_parameters.ipp>
+#include <boost/test/impl/unit_test_suite.ipp>
+#include <boost/test/impl/xml_log_formatter.ipp>
+#include <boost/test/impl/xml_report_formatter.ipp>
+
+#define BOOST_TEST_INCLUDED
+#include <boost/test/unit_test.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: unit_test.hpp,v $
+// Revision 1.1 2006/02/06 10:02:52 rogeeff
+// make the name similar to the primary header name
+//
+// Revision 1.14 2006/02/01 07:57:50 rogeeff
+// included components entry points
+//
+// Revision 1.13 2005/02/20 08:27:08 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// Revision 1.12 2005/02/01 08:59:38 rogeeff
+// supplied_log_formatters split
+// change formatters interface to simplify result interface
+//
+// Revision 1.11 2005/02/01 06:40:07 rogeeff
+// copyright update
+// old log entries removed
+// minor stilistic changes
+// depricated tools removed
+//
+// Revision 1.10 2005/01/22 19:22:13 rogeeff
+// implementation moved into headers section to eliminate dependency of included/minimal component on src directory
+//
+// ***************************************************************************
+
+#endif // BOOST_INCLUDED_UNIT_TEST_FRAMEWORK_HPP_071894GER
diff --git a/boost/boost/test/included/unit_test_framework.hpp b/boost/boost/test/included/unit_test_framework.hpp
new file mode 100644
index 00000000000..705883dd82b
--- /dev/null
+++ b/boost/boost/test/included/unit_test_framework.hpp
@@ -0,0 +1,11 @@
+// (C) Copyright Gennadiy Rozental 2001-2005.
+// 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/test/ for the library home page.
+
+
+
+// ******* deprecated *******
+#include <boost/test/included/unit_test.hpp>
diff --git a/boost/boost/test/interaction_based.hpp b/boost/boost/test/interaction_based.hpp
new file mode 100644
index 00000000000..bf9ec95da80
--- /dev/null
+++ b/boost/boost/test/interaction_based.hpp
@@ -0,0 +1,277 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: interaction_based.hpp,v $
+//
+// Version : $Revision: 1.3 $
+//
+// Description : Facilities to perform interaction-based testing
+// ***************************************************************************
+
+#ifndef BOOST_TEST_INTERACTION_BASED_HPP_112105GER
+#define BOOST_TEST_INTERACTION_BASED_HPP_112105GER
+
+// Boost.Test
+#include <boost/test/detail/config.hpp>
+#include <boost/test/detail/global_typedef.hpp>
+
+#include <boost/test/utils/wrap_stringstream.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+// Boost
+#include <boost/lexical_cast.hpp>
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// ************** BOOST_ITEST_EPOINT ************** //
+// ************************************************************************** //
+
+#define BOOST_ITEST_EPOINT( description ) \
+ ::boost::itest::manager::instance().exception_point( BOOST_TEST_L(__FILE__), __LINE__, description )
+/**/
+
+// ************************************************************************** //
+// ************** BOOST_ITEST_DPOINT ************** //
+// ************************************************************************** //
+
+#define BOOST_ITEST_DPOINT() \
+ ::boost::itest::manager::instance().decision_point( BOOST_TEST_L(__FILE__), __LINE__ )
+/**/
+
+// ************************************************************************** //
+// ************** BOOST_ITEST_SCOPE ************** //
+// ************************************************************************** //
+
+#define BOOST_ITEST_SCOPE( scope_name ) \
+ ::boost::itest::scope_guard itest_scope_guard ## __LINE__( BOOST_TEST_L(__FILE__), __LINE__, BOOST_STRINGIZE(scope_name) )
+/**/
+
+// ************************************************************************** //
+// ************** BOOST_ITEST_NEW ************** //
+// ************************************************************************** //
+
+#define BOOST_ITEST_NEW( type_name ) \
+ new ( ::boost::itest::location( BOOST_TEST_L(__FILE__), __LINE__ ) ) type_name
+/**/
+
+// ************************************************************************** //
+// ************** BOOST_ITEST_DATA_FLOW ************** //
+// ************************************************************************** //
+
+#define BOOST_ITEST_DATA_FLOW( v ) \
+ ::boost::itest::manager::instance().generic_data_flow( v )
+/**/
+
+// ************************************************************************** //
+// ************** BOOST_ITEST_RETURN ************** //
+// ************************************************************************** //
+
+#define BOOST_ITEST_RETURN( type, default_value ) \
+ ::boost::itest::manager::instance().generic_return<type>( default_value )
+/**/
+
+// ************************************************************************** //
+// ************** BOOST_ITEST_MOCK_FUNC ************** //
+// ************************************************************************** //
+
+#define BOOST_ITEST_MOCK_FUNC( function_name ) \
+ BOOST_ITEST_SCOPE( function_name ); \
+ BOOST_ITEST_EPOINT( 0 ); \
+ return ::boost::itest::mock_object<>::prototype(); \
+/**/
+
+namespace boost {
+
+namespace itest { // interaction-based testing
+
+using unit_test::const_string;
+
+// ************************************************************************** //
+// ************** manager ************** //
+// ************************************************************************** //
+
+class BOOST_TEST_DECL manager {
+public:
+ // instance access
+ static manager& instance() { return *instance_ptr(); }
+
+ // Mock objects interface hooks
+ virtual void exception_point( const_string /*file*/,
+ std::size_t /*line_num*/,
+ const_string /*descr*/ ){}
+ virtual bool decision_point( const_string /*file*/,
+ std::size_t /*line_num*/ ) { return true; }
+ virtual unsigned enter_scope( const_string /*file*/,
+ std::size_t /*line_num*/,
+ const_string /*scope_name*/){ return 0; }
+ virtual void leave_scope( unsigned ) {}
+ virtual void allocated( const_string /*file*/,
+ std::size_t /*line_num*/,
+ void* /*p*/, std::size_t /*s*/ ) {}
+ virtual void freed( void* /*p*/ ) {}
+ virtual void data_flow( const_string d ) {}
+ virtual std::string return_value( const_string default_value ) { return ""; }
+
+ template<typename T>
+ void generic_data_flow( T const& t )
+ {
+ wrap_stringstream ws;
+
+ data_flow( (ws << t).str() );
+ }
+ template<typename T, typename DefaultValueType>
+ T generic_return( DefaultValueType const& dv )
+ {
+ wrap_stringstream ws;
+
+ std::string const& res = return_value( (ws << dv).str() );
+
+ if( res.empty() )
+ return dv;
+
+ return lexical_cast<T>( res );
+ }
+
+protected:
+ manager();
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+public:
+#endif
+ BOOST_TEST_PROTECTED_VIRTUAL ~manager();
+
+private:
+ struct dummy_constr{};
+ explicit manager( dummy_constr* ) {}
+
+ static manager* instance_ptr( bool reset = false, manager* ptr = 0 );
+}; // manager
+
+// ************************************************************************** //
+// ************** scope_guard ************** //
+// ************************************************************************** //
+
+class scope_guard {
+public:
+ // Constructor
+ scope_guard( const_string file, std::size_t line_num, const_string scope_name )
+ {
+ m_scope_index = manager::instance().enter_scope( file, line_num, scope_name );
+ }
+ ~scope_guard()
+ {
+ manager::instance().leave_scope( m_scope_index );
+ }
+
+ unsigned m_scope_index;
+};
+
+// ************************************************************************** //
+// ************** location ************** //
+// ************************************************************************** //
+
+struct location {
+ location( const_string file, std::size_t line )
+ : m_file_name( file )
+ , m_line_num( line )
+ {}
+
+ const_string m_file_name;
+ std::size_t m_line_num;
+};
+
+} // namespace itest
+
+} // namespace boost
+
+// ************************************************************************** //
+// ************** operator new overload ************** //
+// ************************************************************************** //
+
+#if !defined(BOOST_ITEST_NO_NEW_OVERLOADS)
+
+// STL
+#include <cstdlib>
+
+# ifdef BOOST_NO_STDC_NAMESPACE
+namespace std { using ::malloc; using ::free; }
+# endif
+
+inline void*
+operator new( std::size_t s, ::boost::itest::location const& l )
+{
+ void* res = std::malloc(s ? s : 1);
+
+ if( res )
+ ::boost::itest::manager::instance().allocated( l.m_file_name, l.m_line_num, res, s );
+ else
+ throw std::bad_alloc();
+
+ return res;
+}
+
+//____________________________________________________________________________//
+
+inline void*
+operator new[]( std::size_t s, ::boost::itest::location const& l )
+{
+ void* res = std::malloc(s ? s : 1);
+
+ if( res )
+ ::boost::itest::manager::instance().allocated( l.m_file_name, l.m_line_num, res, s );
+ else
+ throw std::bad_alloc();
+
+ return res;
+}
+
+//____________________________________________________________________________//
+
+inline void
+operator delete( void* p, ::boost::itest::location const& )
+{
+ ::boost::itest::manager::instance().freed( p );
+
+ std::free( p );
+}
+
+//____________________________________________________________________________//
+
+inline void
+operator delete[]( void* p, ::boost::itest::location const& )
+{
+ ::boost::itest::manager::instance().freed( p );
+
+ std::free( p );
+}
+
+//____________________________________________________________________________//
+
+#endif
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: interaction_based.hpp,v $
+// Revision 1.3 2006/01/28 08:52:35 rogeeff
+// operator new overloads made inline to:
+// 1. prevent issues with export them from DLL
+// 2. release link issue fixed
+//
+// Revision 1.2 2006/01/15 11:14:38 rogeeff
+// simpl_mock -> mock_object<>::prototype()
+// operator new need to be rethinked
+//
+// Revision 1.1 2005/12/14 05:09:21 rogeeff
+// interraction based testing is introdused
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_INTERACTION_BASED_HPP_112105GER
diff --git a/boost/boost/test/logged_expectations.hpp b/boost/boost/test/logged_expectations.hpp
new file mode 100644
index 00000000000..28fbe758471
--- /dev/null
+++ b/boost/boost/test/logged_expectations.hpp
@@ -0,0 +1,86 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: logged_expectations.hpp,v $
+//
+// Version : $Revision: 1.2 $
+//
+// Description : Facilities to perform interaction based testng of logged expectations
+// ***************************************************************************
+
+#ifndef BOOST_TEST_LOGGED_EXPECTATIONS_HPP_120905GER
+#define BOOST_TEST_LOGGED_EXPECTATIONS_HPP_120905GER
+
+// Boost.Test
+#include <boost/test/detail/config.hpp>
+#include <boost/test/detail/unit_test_parameters.hpp>
+#include <boost/test/utils/callback.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// ************** BOOST_TEST_LOGGED_EXPECTATIONS ************** //
+// ************************************************************************** //
+
+#define BOOST_TEST_LOGGED_EXPECTATIONS( test_name ) \
+struct test_name : public BOOST_AUTO_TEST_CASE_FIXTURE \
+{ void test_method(); }; \
+ \
+static void BOOST_AUTO_TC_INVOKER( test_name )() \
+{ \
+ test_name t; \
+ ::boost::itest::logged_expectations( \
+ boost::bind( &test_name::test_method, t ), \
+ BOOST_STRINGIZE(test_name) ".elog", \
+ !::boost::unit_test::runtime_config::save_pattern() ); \
+} \
+ \
+struct BOOST_AUTO_TC_UNIQUE_ID( test_name ) {}; \
+ \
+BOOST_AUTO_TC_REGISTRAR( test_name )( \
+ boost::unit_test::make_test_case( \
+ &BOOST_AUTO_TC_INVOKER( test_name ), #test_name ), \
+ boost::unit_test::ut_detail::auto_tc_exp_fail< \
+ BOOST_AUTO_TC_UNIQUE_ID( test_name )>::value ); \
+ \
+void test_name::test_method() \
+/**/
+
+namespace boost {
+
+namespace itest {
+
+// ************************************************************************** //
+// ************** logged expectations test ************** //
+// ************************************************************************** //
+
+void BOOST_TEST_DECL
+logged_expectations( unit_test::callback0<> const& F,
+ unit_test::const_string log_file_name,
+ bool test_or_log = true );
+
+} // namespace itest
+
+} // namespace boost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: logged_expectations.hpp,v $
+// Revision 1.2 2005/12/20 23:50:13 rogeeff
+// unit_test.hpp removed
+//
+// Revision 1.1 2005/12/14 05:09:21 rogeeff
+// interraction based testing is introdused
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_LOGGED_EXPECTATIONS_HPP_120905GER
diff --git a/boost/boost/test/minimal.hpp b/boost/boost/test/minimal.hpp
new file mode 100644
index 00000000000..8ad2ab91e71
--- /dev/null
+++ b/boost/boost/test/minimal.hpp
@@ -0,0 +1,167 @@
+// (C) Copyright Gennadiy Rozental 2002-2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: minimal.hpp,v $
+//
+// Version : $Revision: 1.19 $
+//
+// Description : simple minimal testing definitions and implementation
+// ***************************************************************************
+
+#ifndef BOOST_TEST_MINIMAL_HPP_071894GER
+#define BOOST_TEST_MINIMAL_HPP_071894GER
+
+#define BOOST_CHECK(exp) \
+ ( (exp) \
+ ? static_cast<void>(0) \
+ : boost::minimal_test::report_error(#exp,__FILE__,__LINE__, BOOST_CURRENT_FUNCTION) )
+
+#define BOOST_REQUIRE(exp) \
+ ( (exp) \
+ ? static_cast<void>(0) \
+ : boost::minimal_test::report_critical_error(#exp,__FILE__,__LINE__,BOOST_CURRENT_FUNCTION))
+
+#define BOOST_ERROR( msg_ ) \
+ boost::minimal_test::report_error( (msg_),__FILE__,__LINE__, BOOST_CURRENT_FUNCTION, true )
+#define BOOST_FAIL( msg_ ) \
+ boost::minimal_test::report_critical_error( (msg_),__FILE__,__LINE__, BOOST_CURRENT_FUNCTION, true )
+
+//____________________________________________________________________________//
+
+// Boost.Test
+#include <boost/test/detail/global_typedef.hpp>
+#include <boost/test/impl/execution_monitor.ipp>
+#include <boost/test/utils/class_properties.hpp>
+#include <boost/test/utils/basic_cstring/io.hpp>
+
+// Boost
+#include <boost/cstdlib.hpp> // for exit codes#include <boost/cstdlib.hpp> // for exit codes
+#include <boost/current_function.hpp> // for BOOST_CURRENT_FUNCTION
+
+// STL
+#include <iostream> // std::cerr, std::endl
+#include <string> // std::string
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+int test_main( int argc, char* argv[] ); // prototype for users test_main()
+
+namespace boost {
+namespace minimal_test {
+
+typedef boost::unit_test::const_string const_string;
+
+inline unit_test::counter_t& errors_counter() { static unit_test::counter_t ec = 0; return ec; }
+
+inline void
+report_error( const char* msg, const char* file, int line, const_string func_name, bool is_msg = false )
+{
+ ++errors_counter();
+ std::cerr << file << "(" << line << "): ";
+
+ if( is_msg )
+ std::cerr << msg;
+ else
+ std::cerr << "test " << msg << " failed";
+
+ if( func_name != "(unknown)" )
+ std::cerr << " in function: '" << func_name << "'";
+
+ std::cerr << std::endl;
+}
+
+inline void
+report_critical_error( const char* msg, const char* file, int line, const_string func_name, bool is_msg = false )
+{
+ report_error( msg, file, line, func_name, is_msg );
+
+ throw boost::execution_aborted();
+}
+
+class caller {
+public:
+ // constructor
+ caller( int argc, char** argv )
+ : m_argc( argc ), m_argv( argv ) {}
+
+ // execution monitor hook implementation
+ int operator()() { return test_main( m_argc, m_argv ); }
+
+private:
+ // Data members
+ int m_argc;
+ char** m_argv;
+}; // monitor
+
+} // namespace minimal_test
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+int BOOST_TEST_CALL_DECL main( int argc, char* argv[] )
+{
+ using namespace boost::minimal_test;
+
+ try {
+ ::boost::execution_monitor ex_mon;
+ int run_result = ex_mon.execute( caller( argc, argv ) );
+
+ BOOST_CHECK( run_result == 0 || run_result == boost::exit_success );
+ }
+ catch( boost::execution_exception const& exex ) {
+ if( exex.code() != boost::execution_exception::no_error )
+ BOOST_ERROR( (std::string( "exception \"" ).
+ append( exex.what().begin(), exex.what().end() ).
+ append( "\" caught" ) ).c_str() );
+ std::cerr << "\n**** Testing aborted.";
+ }
+
+ if( boost::minimal_test::errors_counter() != 0 ) {
+ std::cerr << "\n**** " << errors_counter()
+ << " error" << (errors_counter() > 1 ? "s" : "" ) << " detected\n";
+
+ return boost::exit_test_failure;
+ }
+
+ std::cout << "\n**** no errors detected\n";
+
+ return boost::exit_success;
+}
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: minimal.hpp,v $
+// Revision 1.19 2005/02/20 08:27:06 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// Revision 1.18 2005/02/01 06:40:06 rogeeff
+// copyright update
+// old log entries removed
+// minor stilistic changes
+// depricated tools removed
+//
+// Revision 1.17 2005/01/31 07:50:05 rogeeff
+// cdecl portability fix
+//
+// Revision 1.16 2005/01/31 06:01:27 rogeeff
+// BOOST_TEST_CALL_DECL correctness fixes
+//
+// Revision 1.15 2005/01/22 19:22:12 rogeeff
+// implementation moved into headers section to eliminate dependency of included/minimal component on src directory
+//
+// ***************************************************************************
+
+
+#endif // BOOST_TEST_MINIMAL_HPP_071894GER
diff --git a/boost/boost/test/mock_object.hpp b/boost/boost/test/mock_object.hpp
new file mode 100644
index 00000000000..1c9c8b2a0bb
--- /dev/null
+++ b/boost/boost/test/mock_object.hpp
@@ -0,0 +1,344 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: mock_object.hpp,v $
+//
+// Version : $Revision: 1.3 $
+//
+// Description : Facilities to perform exception safety_tests
+// ***************************************************************************
+
+#ifndef BOOST_TEST_MOCK_OBJECT_HPP_112205GER
+#define BOOST_TEST_MOCK_OBJECT_HPP_112205GER
+
+// Boost.Test
+#include <boost/test/detail/config.hpp>
+#include <boost/test/interaction_based.hpp>
+
+// Boost
+#include <boost/preprocessor/punctuation/comma.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace boost {
+
+namespace itest {
+
+// ************************************************************************** //
+// ************** mock_object_base ************** //
+// ************************************************************************** //
+
+class mock_object_base {
+public:
+ mock_object_base() {}
+
+ template<typename T1>
+ mock_object_base( T1 const& ) {}
+
+ template<typename T1, typename T2>
+ mock_object_base( T1 const&, T2 const& ) {}
+
+ template<typename T1, typename T2, typename T3>
+ mock_object_base( T1 const&, T2 const&, T3 const& ) {}
+
+ template<typename T1, typename T2, typename T3, typename T4>
+ mock_object_base( T1 const&, T2 const&, T3 const&, T4 const& ) {}
+
+ template<typename T1, typename T2, typename T3, typename T4, typename T5>
+ mock_object_base( T1 const&, T2 const&, T3 const&, T4 const&, T5 const& ) {}
+};
+
+// ************************************************************************** //
+// ************** mock_object implementation helpers ************** //
+// ************************************************************************** //
+
+#define MO_OP_IMPL( op, descr, ret ) \
+ BOOST_ITEST_SCOPE( mock_object::operator op ); \
+ BOOST_ITEST_EPOINT( descr ); \
+ return ret \
+/**/
+
+#define MO_UNARY_OP( op, descr ) \
+self_type const& operator op() const \
+{ \
+ MO_OP_IMPL( op, descr, prototype() ); \
+} \
+/**/
+
+#define MO_UNARY_BOOL_OP( op, descr ) \
+bool operator op() const \
+{ \
+ MO_OP_IMPL( op, descr, (!!BOOST_ITEST_DPOINT()) ); \
+} \
+/**/
+
+#define MO_BINARY_OP( op, descr ) \
+template<int i1, typename Base1,int i2, typename Base2> \
+inline mock_object<i1,Base1> const& \
+operator op( mock_object<i1,Base1> const& mo, \
+ mock_object<i2,Base2> const& ) \
+{ \
+ MO_OP_IMPL( op, descr, mo ); \
+} \
+ \
+template<int i, typename Base, typename T> \
+inline mock_object<i,Base> const& \
+operator op( mock_object<i,Base> const& mo, T const& ) \
+{ \
+ MO_OP_IMPL( op, descr, mo ); \
+} \
+ \
+template<int i, typename Base, typename T> \
+inline mock_object<i,Base> const& \
+operator op( T const&, mock_object<i,Base> const& mo ) \
+{ \
+ MO_OP_IMPL( op, descr, mo ); \
+} \
+/**/
+
+#define MO_BINARY_BOOL_OP( op, descr ) \
+template<int i1, typename Base1,int i2, typename Base2> \
+inline bool \
+operator op( mock_object<i1,Base1> const&, \
+ mock_object<i2,Base2> const& ) \
+{ \
+ MO_OP_IMPL( op, descr, BOOST_ITEST_DPOINT() ); \
+} \
+ \
+template<int i, typename Base, typename T> \
+inline bool \
+operator op( mock_object<i,Base> const&, T const& ) \
+{ \
+ MO_OP_IMPL( op, descr, BOOST_ITEST_DPOINT() ); \
+} \
+ \
+template<int i, typename Base, typename T> \
+inline bool \
+operator op( T const&, mock_object<i,Base> const& ) \
+{ \
+ MO_OP_IMPL( op, descr, BOOST_ITEST_DPOINT() ); \
+} \
+/**/
+
+// ************************************************************************** //
+// ************** mock_object ************** //
+// ************************************************************************** //
+
+template<int i = 0, typename Base=mock_object_base>
+class mock_object;
+
+template<int i, typename Base>
+class mock_object : public Base {
+ // Private typeefs
+ typedef mock_object<i,Base> self_type;
+ struct dummy { void nonnull() {}; };
+ typedef void (dummy::*safe_bool)();
+
+ // prototype constructor
+ mock_object( dummy* ) {}
+
+public:
+ static mock_object& prototype()
+ {
+ static mock_object p( (dummy*)0 );
+ return p;
+ }
+
+ // Constructors
+ mock_object()
+ {
+ BOOST_ITEST_SCOPE( mock_object::mock_object );
+ BOOST_ITEST_EPOINT( "Mock object default constructor" );
+ }
+
+ template<typename T1>
+ mock_object( T1 const& arg1 )
+ : mock_object_base( arg1 )
+ {
+ BOOST_ITEST_SCOPE( mock_object::mock_object );
+ BOOST_ITEST_EPOINT( "Mock object constructor" );
+ }
+
+ template<typename T1, typename T2>
+ mock_object( T1 const& arg1, T2 const& arg2 )
+ : mock_object_base( arg1, arg2 )
+ {
+ BOOST_ITEST_SCOPE( mock_object::mock_object );
+ BOOST_ITEST_EPOINT( "Mock object constructor" );
+ }
+
+ template<typename T1, typename T2, typename T3>
+ mock_object( T1 const& arg1, T2 const& arg2, T3 const& arg3 )
+ : mock_object_base( arg1, arg2, arg3 )
+ {
+ BOOST_ITEST_SCOPE( mock_object::mock_object );
+ BOOST_ITEST_EPOINT( "Mock object constructor" );
+ }
+
+ template<typename T1, typename T2, typename T3, typename T4>
+ mock_object( T1 const& arg1, T2 const& arg2, T3 const& arg3, T4 const& arg4 )
+ : mock_object_base( arg1, arg2, arg3, arg4 )
+ {
+ BOOST_ITEST_SCOPE( mock_object::mock_object );
+ BOOST_ITEST_EPOINT( "Mock object constructor" );
+ }
+
+ template<typename T1, typename T2, typename T3, typename T4, typename T5>
+ mock_object( T1 const& arg1, T2 const& arg2, T3 const& arg3, T4 const& arg4, T5 const& arg5 )
+ : mock_object_base( arg1, arg2, arg3, arg4, arg5 )
+ {
+ BOOST_ITEST_SCOPE( mock_object::mock_object );
+ BOOST_ITEST_EPOINT( "Mock object constructor" );
+ }
+
+ mock_object( mock_object const& )
+ {
+ BOOST_ITEST_SCOPE( mock_object::mock_object );
+ BOOST_ITEST_EPOINT( "Mock object copy constructor" );
+ }
+
+ // assignment
+ self_type const& operator =( mock_object const& ) const
+ {
+ MO_OP_IMPL( =, "Copy assignment", prototype() );
+ }
+
+ template <typename T>
+ self_type const& operator =( T const& ) const
+ {
+ MO_OP_IMPL( =, "Copy assignment", prototype() );
+ }
+
+ // Unary operators
+ MO_UNARY_BOOL_OP( !, "Logical NOT operator" )
+ MO_UNARY_OP( &, "Address-of operator" )
+ MO_UNARY_OP( ~, "One's complement operator" )
+ MO_UNARY_OP( *, "Pointer dereference" )
+ MO_UNARY_OP( +, "Unary plus" )
+
+ // Increment and Decrement
+ MO_UNARY_OP( ++, "Prefix increment" )
+ MO_UNARY_OP( --, "Prefix decrement" )
+ self_type const& operator ++(int) const
+ {
+ MO_OP_IMPL( ++, "Postfix increment", prototype() );
+ }
+ self_type const& operator --(int) const
+ {
+ MO_OP_IMPL( --, "Postfix decrement", prototype() );
+ }
+
+ // Bool context convertion
+ operator safe_bool() const
+ {
+ MO_OP_IMPL( safe_bool, "Bool context conversion",
+ (BOOST_ITEST_DPOINT() ? 0 : &dummy::nonnull) );
+ }
+
+ // Function-call operators
+ self_type const& operator ()() const
+ {
+ MO_OP_IMPL( (), "0-arity function-call", prototype() );
+ }
+ template<typename T1>
+ self_type const& operator ()( T1 const& arg1 ) const
+ {
+ MO_OP_IMPL( (), "1-arity function-call", prototype() );
+ }
+ template<typename T1, typename T2>
+ self_type const& operator ()( T1 const&, T2 const& ) const
+ {
+ MO_OP_IMPL( (), "2-arity function-call", prototype() );
+ }
+ template<typename T1, typename T2, typename T3>
+ self_type const& operator ()( T1 const&, T2 const&, T3 const& ) const
+ {
+ MO_OP_IMPL( (), "3-arity function-call", prototype() );
+ }
+ template<typename T1, typename T2, typename T3, typename T4>
+ self_type const& operator ()( T1 const&, T2 const&, T3 const&, T4 const& ) const
+ {
+ MO_OP_IMPL( (), "4-arity function-call", prototype() );
+ }
+ template<typename T1, typename T2, typename T3, typename T4, typename T5>
+ self_type const& operator ()( T1 const&, T2 const&, T3 const&, T4 const&, T5 const& ) const
+ {
+ MO_OP_IMPL( (), "5-arity function-call", prototype() );
+ }
+
+ // Substripting
+ template<typename T>
+ self_type const& operator []( T const& ) const
+ {
+ MO_OP_IMPL( [], "Substripting", prototype() );
+ }
+
+ // Class member access
+ self_type const* operator->() const
+ {
+ MO_OP_IMPL( ->, "Class member access", this );
+ }
+};
+
+// !! MO_BINARY_OP( BOOST_PP_COMMA(), "Comma operator" )
+
+MO_BINARY_BOOL_OP( !=, "Inequality" )
+MO_BINARY_OP( %, "Modulus" )
+MO_BINARY_OP( %=, "Modulus/assignment" )
+MO_BINARY_OP( &, "Bitwise AND" )
+MO_BINARY_BOOL_OP( &&, "Logical AND" )
+MO_BINARY_OP( &=, "Bitwise AND/assignment" )
+MO_BINARY_OP( *, "Multiplication" )
+MO_BINARY_OP( *=, "Multiplication/assignment" )
+MO_BINARY_OP( +, "Addition" )
+MO_BINARY_OP( +=, "Addition/assignment" )
+//MO_BINARY_OP( -, "Subtraction" )
+MO_BINARY_OP( -=, "Subtraction/assignment" )
+MO_BINARY_OP( ->*, "Pointer-to-member selection" )
+MO_BINARY_OP( /, "Division" )
+MO_BINARY_OP( /=, "Division/assignment" )
+MO_BINARY_BOOL_OP( <, "Less than" )
+MO_BINARY_OP( <<=, "Left shift/assignment" )
+MO_BINARY_BOOL_OP( <=, "Less than or equal to" )
+MO_BINARY_BOOL_OP( ==, "Equality" )
+MO_BINARY_BOOL_OP( >, "Greater than" )
+MO_BINARY_BOOL_OP( >=, "Greater than or equal to" )
+MO_BINARY_OP( >>=, "Right shift/assignment" )
+MO_BINARY_OP( ^, "Exclusive OR" )
+MO_BINARY_OP( ^=, "Exclusive OR/assignment" )
+MO_BINARY_OP( |, "Bitwise inclusive OR" )
+MO_BINARY_OP( |=, "Bitwise inclusive OR/assignment" )
+MO_BINARY_BOOL_OP( ||, "Logical OR" )
+
+MO_BINARY_OP( <<, "Left shift" )
+MO_BINARY_OP( >>, "Right shift" )
+
+} // namespace itest
+
+} // namespace boost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: mock_object.hpp,v $
+// Revision 1.3 2006/03/19 07:27:52 rogeeff
+// streamline test setup error message
+//
+// Revision 1.2 2006/01/15 11:14:39 rogeeff
+// simpl_mock -> mock_object<>::prototype()
+// operator new need to be rethinked
+//
+// Revision 1.1 2005/12/14 05:09:21 rogeeff
+// interraction based testing is introdused
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_MOCK_OBJECT_HPP_112205GER
diff --git a/boost/boost/test/output/compiler_log_formatter.hpp b/boost/boost/test/output/compiler_log_formatter.hpp
new file mode 100644
index 00000000000..84a8594cfe5
--- /dev/null
+++ b/boost/boost/test/output/compiler_log_formatter.hpp
@@ -0,0 +1,84 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: compiler_log_formatter.hpp,v $
+//
+// Version : $Revision: 1.2.6.1 $
+//
+// Description : contains compiler like Log formatter definition
+// ***************************************************************************
+
+#ifndef BOOST_TEST_COMPILER_LOG_FORMATTER_HPP_020105GER
+#define BOOST_TEST_COMPILER_LOG_FORMATTER_HPP_020105GER
+
+// Boost.Test
+#include <boost/test/detail/global_typedef.hpp>
+#include <boost/test/unit_test_log_formatter.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace boost {
+
+namespace unit_test {
+
+namespace output {
+
+// ************************************************************************** //
+// ************** compiler_log_formatter ************** //
+// ************************************************************************** //
+
+class BOOST_TEST_DECL compiler_log_formatter : public unit_test_log_formatter {
+public:
+ // Formatter interface
+ void log_start( std::ostream&, counter_t test_cases_amount );
+ void log_finish( std::ostream& );
+ void log_build_info( std::ostream& );
+
+ void test_unit_start( std::ostream&, test_unit const& tu );
+ void test_unit_finish( std::ostream&, test_unit const& tu, unsigned long elapsed );
+ void test_unit_skipped( std::ostream&, test_unit const& tu );
+
+ void log_exception( std::ostream&, log_checkpoint_data const&, const_string explanation );
+
+ void log_entry_start( std::ostream&, log_entry_data const&, log_entry_types let );
+ void log_entry_value( std::ostream&, const_string value );
+ void log_entry_finish( std::ostream& );
+
+protected:
+ virtual void print_prefix( std::ostream&, const_string file, std::size_t line );
+};
+
+} // namespace output
+
+} // namespace unit_test
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: compiler_log_formatter.hpp,v $
+// Revision 1.2.6.1 2006/11/13 20:06:57 jhunold
+// Merge from HEAD:
+// Added missing export declarations.
+//
+// Revision 1.2 2005/02/20 08:27:08 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// Revision 1.1 2005/02/01 08:59:39 rogeeff
+// supplied_log_formatters split
+// change formatters interface to simplify result interface
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_COMPILER_LOG_FORMATTER_HPP_020105GER
diff --git a/boost/boost/test/output/plain_report_formatter.hpp b/boost/boost/test/output/plain_report_formatter.hpp
new file mode 100644
index 00000000000..270cefc4b1a
--- /dev/null
+++ b/boost/boost/test/output/plain_report_formatter.hpp
@@ -0,0 +1,71 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: plain_report_formatter.hpp,v $
+//
+// Version : $Revision: 1.1 $
+//
+// Description : plain report formatter implementation
+// ***************************************************************************
+
+#ifndef BOOST_TEST_PLAIN_REPORT_FORMATTER_HPP_020105GER
+#define BOOST_TEST_PLAIN_REPORT_FORMATTER_HPP_020105GER
+
+// Boost.Test
+#include <boost/test/detail/global_typedef.hpp>
+#include <boost/test/results_reporter.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace boost {
+
+namespace unit_test {
+
+namespace output {
+
+// ************************************************************************** //
+// ************** plain_report_formatter ************** //
+// ************************************************************************** //
+
+class plain_report_formatter : public results_reporter::format {
+public:
+ // Formatter interface
+ void results_report_start( std::ostream& ostr );
+ void results_report_finish( std::ostream& ostr );
+
+ void test_unit_report_start( test_unit const&, std::ostream& ostr );
+ void test_unit_report_finish( test_unit const&, std::ostream& ostr );
+
+ void do_confirmation_report( test_unit const&, std::ostream& ostr );
+
+private:
+ // Data members
+ counter_t m_indent;
+};
+
+} // namespace output
+
+} // namespace unit_test
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: plain_report_formatter.hpp,v $
+// Revision 1.1 2005/02/20 08:27:08 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_PLAIN_REPORT_FORMATTER_HPP_020105GER
diff --git a/boost/boost/test/output/xml_log_formatter.hpp b/boost/boost/test/output/xml_log_formatter.hpp
new file mode 100644
index 00000000000..9fbeb22e6b7
--- /dev/null
+++ b/boost/boost/test/output/xml_log_formatter.hpp
@@ -0,0 +1,84 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: xml_log_formatter.hpp,v $
+//
+// Version : $Revision: 1.2 $
+//
+// Description : contains XML Log formatter definition
+// ***************************************************************************
+
+#ifndef BOOST_TEST_XML_LOG_FORMATTER_020105GER
+#define BOOST_TEST_XML_LOG_FORMATTER_020105GER
+
+// Boost.Test
+#include <boost/test/detail/global_typedef.hpp>
+#include <boost/test/unit_test_log_formatter.hpp>
+
+// STL
+#include <cstddef> // std::size_t
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace boost {
+
+namespace unit_test {
+
+namespace output {
+
+// ************************************************************************** //
+// ************** xml_log_formatter ************** //
+// ************************************************************************** //
+
+class xml_log_formatter : public unit_test_log_formatter {
+public:
+ // Formatter interface
+ void log_start( std::ostream&, counter_t test_cases_amount );
+ void log_finish( std::ostream& );
+ void log_build_info( std::ostream& );
+
+ void test_unit_start( std::ostream&, test_unit const& tu );
+ void test_unit_finish( std::ostream&, test_unit const& tu, unsigned long elapsed );
+ void test_unit_skipped( std::ostream&, test_unit const& tu );
+
+ void log_exception( std::ostream&, log_checkpoint_data const&, const_string explanation );
+
+ void log_entry_start( std::ostream&, log_entry_data const&, log_entry_types let );
+ void log_entry_value( std::ostream&, const_string value );
+ void log_entry_finish( std::ostream& );
+
+private:
+ // Data members
+ const_string m_curr_tag;
+};
+
+} // namespace output
+
+} // namespace unit_test
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: xml_log_formatter.hpp,v $
+// Revision 1.2 2005/02/20 08:27:08 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// Revision 1.1 2005/02/01 08:59:39 rogeeff
+// supplied_log_formatters split
+// change formatters interface to simplify result interface
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_XML_LOG_FORMATTER_020105GER
diff --git a/boost/boost/test/output/xml_report_formatter.hpp b/boost/boost/test/output/xml_report_formatter.hpp
new file mode 100644
index 00000000000..74e1435249e
--- /dev/null
+++ b/boost/boost/test/output/xml_report_formatter.hpp
@@ -0,0 +1,67 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: xml_report_formatter.hpp,v $
+//
+// Version : $Revision: 1.1 $
+//
+// Description : XML report formatter implementation
+// ***************************************************************************
+
+#ifndef BOOST_TEST_XML_REPORT_FORMATTER_HPP_020105GER
+#define BOOST_TEST_XML_REPORT_FORMATTER_HPP_020105GER
+
+// Boost.Test
+#include <boost/test/detail/global_typedef.hpp>
+#include <boost/test/results_reporter.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace boost {
+
+namespace unit_test {
+
+namespace output {
+
+// ************************************************************************** //
+// ************** xml_report_formatter ************** //
+// ************************************************************************** //
+
+class xml_report_formatter : public results_reporter::format {
+public:
+ // Formatter interface
+ void results_report_start( std::ostream& ostr );
+ void results_report_finish( std::ostream& ostr );
+
+ void test_unit_report_start( test_unit const&, std::ostream& ostr );
+ void test_unit_report_finish( test_unit const&, std::ostream& ostr );
+
+ void do_confirmation_report( test_unit const&, std::ostream& ostr );
+};
+
+} // namespace output
+
+} // namespace unit_test
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: xml_report_formatter.hpp,v $
+// Revision 1.1 2005/02/20 08:27:08 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_XML_REPORT_FORMATTER_HPP_020105GER
diff --git a/boost/boost/test/output_test_stream.hpp b/boost/boost/test/output_test_stream.hpp
new file mode 100644
index 00000000000..5c07469569e
--- /dev/null
+++ b/boost/boost/test/output_test_stream.hpp
@@ -0,0 +1,103 @@
+// (C) Copyright Gennadiy Rozental 2001-2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: output_test_stream.hpp,v $
+//
+// Version : $Revision: 1.5 $
+//
+// Description : output_test_stream class definition
+// ***************************************************************************
+
+#ifndef BOOST_TEST_OUTPUT_TEST_STREAM_HPP_012705GER
+#define BOOST_TEST_OUTPUT_TEST_STREAM_HPP_012705GER
+
+// Boost.Test
+#include <boost/test/detail/global_typedef.hpp>
+#include <boost/test/utils/wrap_stringstream.hpp>
+#include <boost/test/predicate_result.hpp>
+
+// STL
+#include <cstddef> // for std::size_t
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// ************** output_test_stream ************** //
+// ************************************************************************** //
+
+// class to be used to simplify testing of ostream-based output operations
+
+namespace boost {
+
+namespace test_tools {
+
+class BOOST_TEST_DECL output_test_stream : public wrap_stringstream::wrapped_stream {
+ typedef unit_test::const_string const_string;
+ typedef predicate_result result_type;
+public:
+ // Constructor
+ explicit output_test_stream( const_string pattern_file_name = const_string(),
+ bool match_or_save = true,
+ bool text_or_binary = true );
+
+ // Destructor
+ ~output_test_stream();
+
+ // checking function
+ result_type is_empty( bool flush_stream = true );
+ result_type check_length( std::size_t length, bool flush_stream = true );
+ result_type is_equal( const_string arg_, bool flush_stream = true );
+ result_type match_pattern( bool flush_stream = true );
+
+ // explicit flush
+ void flush();
+
+private:
+ // helper functions
+ std::size_t length();
+ void sync();
+
+ struct Impl;
+ Impl* m_pimpl;
+};
+
+} // namespace test_tools
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: output_test_stream.hpp,v $
+// Revision 1.5 2005/12/14 05:10:34 rogeeff
+// dll support introduced
+// introduced an ability to match agains binary openned file
+//
+// Revision 1.4 2005/03/23 21:02:15 rogeeff
+// Sunpro CC 5.3 fixes
+//
+// Revision 1.3 2005/02/20 08:27:06 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// Revision 1.2 2005/02/01 06:40:06 rogeeff
+// copyright update
+// old log entries removed
+// minor stilistic changes
+// depricated tools removed
+//
+// Revision 1.1 2005/01/30 03:25:24 rogeeff
+// output_test_stream moved into separate file
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_OUTPUT_TEST_STREAM_HPP_012705GER
diff --git a/boost/boost/test/parameterized_test.hpp b/boost/boost/test/parameterized_test.hpp
new file mode 100644
index 00000000000..c317e7cab53
--- /dev/null
+++ b/boost/boost/test/parameterized_test.hpp
@@ -0,0 +1,211 @@
+// (C) Copyright Gennadiy Rozental 2001-2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: parameterized_test.hpp,v $
+//
+// Version : $Revision: 1.7.2.1 $
+//
+// Description : generators and helper macros for parameterized tests
+// ***************************************************************************
+
+#ifndef BOOST_TEST_PARAMETERIZED_TEST_HPP_021102GER
+#define BOOST_TEST_PARAMETERIZED_TEST_HPP_021102GER
+
+// Boost.Test
+#include <boost/test/unit_test_suite.hpp>
+#include <boost/test/utils/callback.hpp>
+
+// Boost
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/type_traits/remove_const.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+#define BOOST_PARAM_TEST_CASE( function, begin, end ) \
+boost::unit_test::make_test_case( function, \
+ BOOST_TEST_STRINGIZE( function ), \
+ (begin), (end) ) \
+/**/
+
+#define BOOST_PARAM_CLASS_TEST_CASE( function, tc_instance, begin, end ) \
+boost::unit_test::make_test_case( function, \
+ BOOST_TEST_STRINGIZE( function ), \
+ (tc_instance), \
+ (begin), (end) ) \
+/**/
+
+namespace boost {
+
+namespace unit_test {
+
+// ************************************************************************** //
+// ************** test_func_with_bound_param ************** //
+// ************************************************************************** //
+
+namespace ut_detail {
+
+template<typename ParamType>
+struct test_func_with_bound_param {
+ template<typename T>
+ test_func_with_bound_param( callback1<ParamType> test_func, T const& param )
+ : m_test_func( test_func )
+ , m_param( param )
+ {}
+
+ void operator()() { m_test_func( m_param ); }
+
+private:
+ callback1<ParamType> m_test_func;
+ ParamType m_param;
+};
+
+// ************************************************************************** //
+// ************** param_test_case_generator ************** //
+// ************************************************************************** //
+
+template<typename ParamType, typename ParamIter>
+class param_test_case_generator : public test_unit_generator {
+public:
+ param_test_case_generator( callback1<ParamType> const& test_func,
+ const_string tc_name,
+ ParamIter par_begin,
+ ParamIter par_end )
+ : m_test_func( test_func )
+ , m_tc_name( ut_detail::normalize_test_case_name( tc_name ) )
+ , m_par_begin( par_begin )
+ , m_par_end( par_end )
+ {}
+
+ test_unit* next() const
+ {
+ if( m_par_begin == m_par_end )
+ return (test_unit*)0;
+
+ test_func_with_bound_param<ParamType> bound_test_func( m_test_func, *m_par_begin );
+ ::boost::unit_test::test_unit* res = new test_case( m_tc_name, bound_test_func );
+
+ ++m_par_begin;
+
+ return res;
+ }
+
+private:
+ // Data members
+ callback1<ParamType> m_test_func;
+ std::string m_tc_name;
+ mutable ParamIter m_par_begin;
+ ParamIter m_par_end;
+};
+
+//____________________________________________________________________________//
+
+template<typename UserTestCase,typename ParamType>
+struct user_param_tc_method_invoker {
+ typedef void (UserTestCase::*test_method)( ParamType );
+
+ // Constructor
+ user_param_tc_method_invoker( shared_ptr<UserTestCase> inst, test_method test_method )
+ : m_inst( inst ), m_test_method( test_method ) {}
+
+ void operator()( ParamType p ) { ((*m_inst).*m_test_method)( p ); }
+
+ // Data members
+ shared_ptr<UserTestCase> m_inst;
+ test_method m_test_method;
+};
+
+//____________________________________________________________________________//
+
+} // namespace ut_detail
+
+template<typename ParamType, typename ParamIter>
+inline ut_detail::param_test_case_generator<ParamType,ParamIter>
+make_test_case( callback1<ParamType> const& test_func,
+ const_string tc_name,
+ ParamIter par_begin,
+ ParamIter par_end )
+{
+ return ut_detail::param_test_case_generator<ParamType,ParamIter>( test_func, tc_name, par_begin, par_end );
+}
+
+//____________________________________________________________________________//
+
+template<typename ParamType, typename ParamIter>
+inline ut_detail::param_test_case_generator<
+ BOOST_DEDUCED_TYPENAME remove_const<BOOST_DEDUCED_TYPENAME remove_reference<ParamType>::type>::type,ParamIter>
+make_test_case( void (*test_func)( ParamType ),
+ const_string tc_name,
+ ParamIter par_begin,
+ ParamIter par_end )
+{
+ typedef BOOST_DEDUCED_TYPENAME remove_const<BOOST_DEDUCED_TYPENAME remove_reference<ParamType>::type>::type param_value_type;
+ return ut_detail::param_test_case_generator<param_value_type,ParamIter>( test_func, tc_name, par_begin, par_end );
+}
+
+//____________________________________________________________________________//
+
+template<typename UserTestCase,typename ParamType, typename ParamIter>
+inline ut_detail::param_test_case_generator<
+ BOOST_DEDUCED_TYPENAME remove_const<BOOST_DEDUCED_TYPENAME remove_reference<ParamType>::type>::type,ParamIter>
+make_test_case( void (UserTestCase::*test_method )( ParamType ),
+ const_string tc_name,
+ boost::shared_ptr<UserTestCase> const& user_test_case,
+ ParamIter par_begin,
+ ParamIter par_end )
+{
+ typedef BOOST_DEDUCED_TYPENAME remove_const<BOOST_DEDUCED_TYPENAME remove_reference<ParamType>::type>::type param_value_type;
+ return ut_detail::param_test_case_generator<param_value_type,ParamIter>(
+ ut_detail::user_param_tc_method_invoker<UserTestCase,ParamType>( user_test_case, test_method ),
+ tc_name,
+ par_begin,
+ par_end );
+}
+
+//____________________________________________________________________________//
+
+} // unit_test
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: parameterized_test.hpp,v $
+// Revision 1.7.2.1 2006/10/19 09:23:04 johnmaddock
+// Fix for VC6.
+//
+// Revision 1.7 2006/01/28 08:57:02 rogeeff
+// VC6.0 workaround removed
+//
+// Revision 1.6 2006/01/28 07:10:20 rogeeff
+// tm->test_method
+//
+// Revision 1.5 2005/12/14 05:16:49 rogeeff
+// dll support introduced
+//
+// Revision 1.4 2005/05/02 06:00:10 rogeeff
+// restore a parameterized user case method based testing
+//
+// Revision 1.3 2005/03/21 15:32:31 rogeeff
+// check reworked
+//
+// Revision 1.2 2005/02/21 10:25:04 rogeeff
+// remove const during ParamType deduction
+//
+// Revision 1.1 2005/02/20 08:27:06 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_PARAMETERIZED_TEST_HPP_021102GER
+
diff --git a/boost/boost/test/predicate_result.hpp b/boost/boost/test/predicate_result.hpp
new file mode 100644
index 00000000000..681e944fff4
--- /dev/null
+++ b/boost/boost/test/predicate_result.hpp
@@ -0,0 +1,113 @@
+// (C) Copyright Gennadiy Rozental 2001-2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: predicate_result.hpp,v $
+//
+// Version : $Revision: 1.7 $
+//
+// Description : enhanced result for test predicate that include message explaining failure
+// ***************************************************************************
+
+#ifndef BOOST_TEST_PREDICATE_RESULT_HPP_012705GER
+#define BOOST_TEST_PREDICATE_RESULT_HPP_012705GER
+
+// Boost.Test
+#include <boost/test/utils/class_properties.hpp>
+#include <boost/test/utils/wrap_stringstream.hpp>
+#include <boost/test/utils/basic_cstring/basic_cstring.hpp>
+
+// Boost
+#include <boost/shared_ptr.hpp>
+#include <boost/detail/workaround.hpp>
+
+// STL
+#include <cstddef> // for std::size_t
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace boost {
+
+namespace test_tools {
+
+// ************************************************************************** //
+// ************** predicate_result ************** //
+// ************************************************************************** //
+
+class BOOST_TEST_DECL predicate_result {
+ typedef unit_test::const_string const_string;
+public:
+ // Constructor
+ predicate_result( bool pv_ )
+ : p_predicate_value( pv_ )
+ {}
+
+ template<typename BoolConvertable>
+ predicate_result( BoolConvertable const& pv_ ) : p_predicate_value( !!pv_ ) {}
+
+ bool operator!() const { return !p_predicate_value; }
+ void operator=( bool pv_ ) { p_predicate_value.value = pv_; }
+
+ // Public properties
+ BOOST_READONLY_PROPERTY( bool, (predicate_result) ) p_predicate_value;
+
+ // Access methods
+ bool has_empty_message() const { return !m_message; }
+ wrap_stringstream& message()
+ {
+ if( !m_message )
+ m_message.reset( new wrap_stringstream );
+
+ return *m_message;
+ }
+ const_string message() const { return !m_message ? const_string() : const_string( m_message->str() ); }
+
+private:
+ // Data members
+ shared_ptr<wrap_stringstream> m_message;
+};
+
+} // namespace test_tools
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: predicate_result.hpp,v $
+// Revision 1.7 2005/12/14 05:16:49 rogeeff
+// dll support introduced
+//
+// Revision 1.6 2005/03/23 21:02:17 rogeeff
+// Sunpro CC 5.3 fixes
+//
+// Revision 1.5 2005/02/20 08:27:06 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// Revision 1.4 2005/02/03 20:39:12 rogeeff
+// m_message zero init for sunpro
+//
+// Revision 1.3 2005/02/01 06:40:06 rogeeff
+// copyright update
+// old log entries removed
+// minor stilistic changes
+// depricated tools removed
+//
+// Revision 1.2 2005/01/31 20:07:19 rogeeff
+// Sunpro CC 5.3 workarounds
+//
+// Revision 1.1 2005/01/30 03:24:51 rogeeff
+// extended_predicate_result renamed ot predicate_result and moved into separate file
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_PREDICATE_RESULT_HPP_012705GER
diff --git a/boost/boost/test/prg_exec_monitor.hpp b/boost/boost/test/prg_exec_monitor.hpp
new file mode 100644
index 00000000000..21b8aabb636
--- /dev/null
+++ b/boost/boost/test/prg_exec_monitor.hpp
@@ -0,0 +1,83 @@
+// (C) Copyright Gennadiy Rozental 2001-2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: prg_exec_monitor.hpp,v $
+//
+// Version : $Revision: 1.3 $
+//
+// Description : Entry point for the end user into the Program Execution Monitor.
+// ***************************************************************************
+
+#ifndef BOOST_PRG_EXEC_MONITOR_HPP_071894GER
+#define BOOST_PRG_EXEC_MONITOR_HPP_071894GER
+
+#include <boost/test/detail/config.hpp>
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// ************** Auto Linking ************** //
+// ************************************************************************** //
+
+// Automatically link to the correct build variant where possible.
+#if !defined(BOOST_ALL_NO_LIB) && !defined(BOOST_TEST_NO_LIB) && \
+ !defined(BOOST_TEST_SOURCE) && !defined(BOOST_TEST_INCLUDED)
+# define BOOST_LIB_NAME boost_prg_exec_monitor
+
+// If we're importing code from a dll, then tell auto_link.hpp about it:
+# if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_TEST_DYN_LINK)
+# define BOOST_DYN_LINK
+# endif
+
+# include <boost/config/auto_link.hpp>
+
+#endif // auto-linking disabled
+
+// ************************************************************************** //
+// ************** prg_exec_monitor_main ************** //
+// ************************************************************************** //
+
+namespace boost {
+
+int BOOST_TEST_DECL prg_exec_monitor_main( int (*cpp_main)( int argc, char* argv[] ), int argc, char* argv[] );
+
+}
+
+#if defined(BOOST_TEST_DYN_LINK) && !defined(BOOST_TEST_NO_MAIN)
+
+// ************************************************************************** //
+// ************** main function for tests using dll ************** //
+// ************************************************************************** //
+
+int cpp_main( int argc, char* argv[] ); // prototype for user's cpp_main()
+
+int BOOST_TEST_CALL_DECL
+main( int argc, char* argv[] )
+{
+ return ::boost::prg_exec_monitor_main( &cpp_main, argc, argv );
+}
+
+//____________________________________________________________________________//
+
+#endif // BOOST_TEST_DYN_LINK && !BOOST_TEST_NO_MAIN
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: prg_exec_monitor.hpp,v $
+// Revision 1.3 2006/03/19 11:45:26 rogeeff
+// main function renamed for consistancy
+//
+// Revision 1.2 2006/02/07 16:15:20 rogeeff
+// BOOST_TEST_INCLUDED guard were missing
+//
+// Revision 1.1 2005/12/14 05:42:08 rogeeff
+// components primary headers
+//
+// ***************************************************************************
+
+#endif // BOOST_PRG_EXEC_MONITOR_HPP_071894GER
diff --git a/boost/boost/test/progress_monitor.hpp b/boost/boost/test/progress_monitor.hpp
new file mode 100644
index 00000000000..03311be03f5
--- /dev/null
+++ b/boost/boost/test/progress_monitor.hpp
@@ -0,0 +1,88 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: progress_monitor.hpp,v $
+//
+// Version : $Revision: 1.4 $
+//
+// Description : defines simple text based progress monitor
+// ***************************************************************************
+
+#ifndef BOOST_TEST_PROGRESS_MONITOR_HPP_020105GER
+#define BOOST_TEST_PROGRESS_MONITOR_HPP_020105GER
+
+// Boost.Test
+#include <boost/test/test_observer.hpp>
+#include <boost/test/utils/trivial_singleton.hpp>
+
+// STL
+#include <iosfwd> // for std::ostream&
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace boost {
+
+namespace unit_test {
+
+// ************************************************************************** //
+// ************** progress_monitor ************** //
+// ************************************************************************** //
+
+class BOOST_TEST_DECL progress_monitor_t : public test_observer, public singleton<progress_monitor_t> {
+public:
+ // test observer interface
+ void test_start( counter_t test_cases_amount );
+ void test_finish() {}
+ void test_aborted();
+
+ void test_unit_start( test_unit const& ) {}
+ void test_unit_finish( test_unit const&, unsigned long );
+ void test_unit_skipped( test_unit const& );
+ void test_unit_aborted( test_unit const& ) {}
+
+ void assertion_result( bool ) {}
+ void exception_caught( execution_exception const& ) {}
+
+ // configuration
+ void set_stream( std::ostream& );
+
+private:
+ BOOST_TEST_SINGLETON_CONS( progress_monitor_t );
+}; // progress_monitor_t
+
+BOOST_TEST_SINGLETON_INST( progress_monitor )
+
+} // namespace unit_test
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: progress_monitor.hpp,v $
+// Revision 1.4 2006/02/22 16:22:37 rogeeff
+// eliminate warning
+//
+// Revision 1.3 2005/12/14 05:11:07 rogeeff
+// dll support introduced
+//
+// Revision 1.2 2005/06/24 04:09:34 rogeeff
+// added missing iosfwd
+//
+// Revision 1.1 2005/02/20 08:27:06 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_PROGRESS_MONITOR_HPP_020105GER
+
diff --git a/boost/boost/test/results_collector.hpp b/boost/boost/test/results_collector.hpp
new file mode 100644
index 00000000000..bb341b2ed3c
--- /dev/null
+++ b/boost/boost/test/results_collector.hpp
@@ -0,0 +1,140 @@
+// (C) Copyright Gennadiy Rozental 2001-2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: results_collector.hpp,v $
+//
+// Version : $Revision: 1.2 $
+//
+// Description : defines class unit_test_result that is responsible for
+// gathering test results and presenting this information to end-user
+// ***************************************************************************
+
+#ifndef BOOST_TEST_RESULTS_COLLECTOR_HPP_071894GER
+#define BOOST_TEST_RESULTS_COLLECTOR_HPP_071894GER
+
+// Boost.Test
+#include <boost/test/test_observer.hpp>
+
+#include <boost/test/detail/global_typedef.hpp>
+#include <boost/test/detail/fwd_decl.hpp>
+
+#include <boost/test/utils/trivial_singleton.hpp>
+#include <boost/test/utils/class_properties.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace boost {
+
+namespace unit_test {
+
+// ************************************************************************** //
+// ************** first failed assertion debugger hook ************** //
+// ************************************************************************** //
+
+namespace {
+inline void first_failed_assertion() {}
+}
+
+// ************************************************************************** //
+// ************** test_results ************** //
+// ************************************************************************** //
+
+class BOOST_TEST_DECL test_results {
+public:
+ test_results();
+
+ typedef BOOST_READONLY_PROPERTY( counter_t, (results_collector_t)(test_results)(results_collect_helper) ) counter_prop;
+ typedef BOOST_READONLY_PROPERTY( bool, (results_collector_t)(test_results)(results_collect_helper) ) bool_prop;
+
+ counter_prop p_assertions_passed;
+ counter_prop p_assertions_failed;
+ counter_prop p_expected_failures;
+ counter_prop p_test_cases_passed;
+ counter_prop p_test_cases_failed;
+ counter_prop p_test_cases_skipped;
+ counter_prop p_test_cases_aborted;
+ bool_prop p_aborted;
+ bool_prop p_skipped;
+
+ // "conclusion" methods
+ bool passed() const;
+ int result_code() const;
+
+ // collection helper
+ void operator+=( test_results const& );
+
+ void clear();
+};
+
+// ************************************************************************** //
+// ************** results_collector ************** //
+// ************************************************************************** //
+
+class BOOST_TEST_DECL results_collector_t : public test_observer, public singleton<results_collector_t> {
+public:
+ // test_observer interface implementation
+ void test_start( counter_t test_cases_amount );
+ void test_finish();
+ void test_aborted();
+
+ void test_unit_start( test_unit const& );
+ void test_unit_finish( test_unit const&, unsigned long elapsed );
+ void test_unit_skipped( test_unit const& );
+ void test_unit_aborted( test_unit const& );
+
+ void assertion_result( bool passed );
+ void exception_caught( execution_exception const& );
+
+ // results access
+ test_results const& results( test_unit_id ) const;
+
+private:
+ BOOST_TEST_SINGLETON_CONS( results_collector_t );
+};
+
+BOOST_TEST_SINGLETON_INST( results_collector )
+
+} // namespace unit_test
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: results_collector.hpp,v $
+// Revision 1.2 2005/12/14 05:12:24 rogeeff
+// dll support introduced
+// amount of aborted test cases in now computed. If test case is aborted - the whole
+// test subtree is marked as aborted
+//
+// Revision 1.1 2005/02/20 08:27:06 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// Revision 1.25 2005/02/01 08:59:29 rogeeff
+// supplied_log_formatters split
+// change formatters interface to simplify result interface
+//
+// Revision 1.24 2005/02/01 06:40:06 rogeeff
+// copyright update
+// old log entries removed
+// minor stilistic changes
+// depricated tools removed
+//
+// Revision 1.23 2005/01/30 03:23:06 rogeeff
+// result_tracker class removed
+// counter type renamed
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_RESULTS_COLLECTOR_HPP_071894GER
+
diff --git a/boost/boost/test/results_reporter.hpp b/boost/boost/test/results_reporter.hpp
new file mode 100644
index 00000000000..c4a53ce1028
--- /dev/null
+++ b/boost/boost/test/results_reporter.hpp
@@ -0,0 +1,98 @@
+// (C) Copyright Gennadiy Rozental 2001-2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: results_reporter.hpp,v $
+//
+// Version : $Revision: 1.2 $
+//
+// Description : defines class unit_test_result that is responsible for
+// gathering test results and presenting this information to end-user
+// ***************************************************************************
+
+#ifndef BOOST_TEST_RESULTS_REPORTER_HPP_021205GER
+#define BOOST_TEST_RESULTS_REPORTER_HPP_021205GER
+
+// Boost.Test
+#include <boost/test/detail/global_typedef.hpp>
+#include <boost/test/detail/fwd_decl.hpp>
+
+// STL
+#include <iosfwd> // for std::ostream&
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace boost {
+
+namespace unit_test {
+
+namespace results_reporter {
+
+// ************************************************************************** //
+// ************** formatter interface ************** //
+// ************************************************************************** //
+
+class BOOST_TEST_DECL format {
+public:
+ // Destructor
+ virtual ~format() {}
+
+ virtual void results_report_start( std::ostream& ostr ) = 0;
+ virtual void results_report_finish( std::ostream& ostr ) = 0;
+
+ virtual void test_unit_report_start( test_unit const&, std::ostream& ostr ) = 0;
+ virtual void test_unit_report_finish( test_unit const&, std::ostream& ostr ) = 0;
+
+ virtual void do_confirmation_report( test_unit const&, std::ostream& ostr ) = 0;
+};
+
+// ************************************************************************** //
+// ************** report configuration ************** //
+// ************************************************************************** //
+
+BOOST_TEST_DECL void set_level( report_level );
+BOOST_TEST_DECL void set_stream( std::ostream& );
+BOOST_TEST_DECL void set_format( output_format );
+BOOST_TEST_DECL void set_format( results_reporter::format* );
+
+// ************************************************************************** //
+// ************** report initiation ************** //
+// ************************************************************************** //
+
+BOOST_TEST_DECL void make_report( report_level l = INV_REPORT_LEVEL, test_unit_id = INV_TEST_UNIT_ID );
+inline void confirmation_report( test_unit_id id = INV_TEST_UNIT_ID )
+{ make_report( CONFIRMATION_REPORT, id ); }
+inline void short_report( test_unit_id id = INV_TEST_UNIT_ID )
+{ make_report( SHORT_REPORT, id ); }
+inline void detailed_report( test_unit_id id = INV_TEST_UNIT_ID )
+{ make_report( DETAILED_REPORT, id ); }
+
+} // namespace results_reporter
+
+} // namespace unit_test
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: results_reporter.hpp,v $
+// Revision 1.2 2005/12/14 05:13:18 rogeeff
+// dll support introduced
+//
+// Revision 1.1 2005/02/20 08:27:06 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_RESULTS_REPORTER_HPP_021205GER
+
diff --git a/boost/boost/test/test_case_template.hpp b/boost/boost/test/test_case_template.hpp
new file mode 100644
index 00000000000..379a5337cba
--- /dev/null
+++ b/boost/boost/test/test_case_template.hpp
@@ -0,0 +1,184 @@
+// (C) Copyright Gennadiy Rozental 2003-2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: test_case_template.hpp,v $
+//
+// Version : $Revision: 1.15 $
+//
+// Description : implements support for test cases templates instantiated with
+// sequence of test types
+// ***************************************************************************
+
+#ifndef BOOST_TEST_TEST_CASE_TEMPLATE_HPP_071894GER
+#define BOOST_TEST_TEST_CASE_TEMPLATE_HPP_071894GER
+
+// Boost.Test
+#include <boost/test/unit_test_suite.hpp>
+
+// Boost
+#include <boost/mpl/for_each.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/type.hpp>
+#include <boost/type_traits/is_const.hpp>
+
+// STL
+#include <typeinfo>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+#define BOOST_TEST_CASE_TEMPLATE( name, typelist ) \
+ boost::unit_test::ut_detail::template_test_case_gen<name,typelist >( \
+ BOOST_TEST_STRINGIZE( name ) ) \
+/**/
+
+//____________________________________________________________________________//
+
+#define BOOST_TEST_CASE_TEMPLATE_FUNCTION( name, type_name ) \
+template<typename type_name> \
+void BOOST_JOIN( name, _impl )( boost::type<type_name>* ); \
+ \
+struct name { \
+ template<typename TestType> \
+ static void run( boost::type<TestType>* frwrd = 0 ) \
+ { \
+ BOOST_JOIN( name, _impl )( frwrd ); \
+ } \
+}; \
+ \
+template<typename type_name> \
+void BOOST_JOIN( name, _impl )( boost::type<type_name>* ) \
+/**/
+
+//____________________________________________________________________________//
+
+namespace boost {
+
+namespace unit_test {
+
+namespace ut_detail {
+
+// ************************************************************************** //
+// ************** test_case_template_invoker ************** //
+// ************************************************************************** //
+
+template<typename TestCaseTemplate,typename TestType>
+class test_case_template_invoker {
+public:
+ void operator()() { TestCaseTemplate::run( (boost::type<TestType>*)0 ); }
+};
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// ************** generate_test_case_4_type ************** //
+// ************************************************************************** //
+
+template<typename Generator,typename TestCaseTemplate>
+struct generate_test_case_4_type {
+ explicit generate_test_case_4_type( const_string tc_name, Generator& G )
+ : m_test_case_name( tc_name )
+ , m_holder( G )
+ {}
+
+ template<typename TestType>
+ void operator()( mpl::identity<TestType> )
+ {
+ std::string full_name;
+ assign_op( full_name, m_test_case_name, 0 );
+ full_name += '<';
+ full_name += typeid(TestType).name();
+ if( boost::is_const<TestType>::value )
+ full_name += " const";
+ full_name += '>';
+
+ m_holder.m_test_cases.push_back(
+ new test_case( full_name, test_case_template_invoker<TestCaseTemplate,TestType>() ) );
+ }
+
+private:
+ // Data members
+ const_string m_test_case_name;
+ Generator& m_holder;
+};
+
+// ************************************************************************** //
+// ************** test_case_template ************** //
+// ************************************************************************** //
+
+template<typename TestCaseTemplate,typename TestTypesList>
+class template_test_case_gen : public test_unit_generator {
+public:
+ // Constructor
+ template_test_case_gen( const_string tc_name )
+ {
+ typedef generate_test_case_4_type<template_test_case_gen<TestCaseTemplate,TestTypesList>,
+ TestCaseTemplate
+ > single_test_gen;
+ mpl::for_each<TestTypesList,mpl::make_identity<mpl::_> >( single_test_gen( tc_name, *this ) );
+ }
+
+ test_unit* next() const
+ {
+ if( m_test_cases.empty() )
+ return 0;
+
+ test_unit* res = m_test_cases.front();
+ m_test_cases.pop_front();
+
+ return res;
+ }
+
+ // Data members
+ mutable std::list<test_unit*> m_test_cases;
+};
+
+//____________________________________________________________________________//
+
+} // namespace ut_detail
+
+} // unit_test
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: test_case_template.hpp,v $
+// Revision 1.15 2005/04/17 15:50:37 rogeeff
+// portability fixes
+//
+// Revision 1.14 2005/04/13 04:35:18 rogeeff
+// forgot zero
+//
+// Revision 1.13 2005/04/12 06:50:46 rogeeff
+// assign_to -> assign_op
+//
+// Revision 1.12 2005/03/22 06:58:47 rogeeff
+// assign_to made free function
+//
+// Revision 1.11 2005/02/20 08:27:06 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// Revision 1.10 2005/02/01 06:40:06 rogeeff
+// copyright update
+// old log entries removed
+// minor stilistic changes
+// depricated tools removed
+//
+// Revision 1.9 2005/01/30 03:20:38 rogeeff
+// use BOOST_JOIN and BOOST_TEST_STRINGIZE
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_TEST_CASE_TEMPLATE_HPP_071894GER
+
diff --git a/boost/boost/test/test_exec_monitor.hpp b/boost/boost/test/test_exec_monitor.hpp
new file mode 100644
index 00000000000..a18e656098c
--- /dev/null
+++ b/boost/boost/test/test_exec_monitor.hpp
@@ -0,0 +1,51 @@
+// (C) Copyright Gennadiy Rozental 2001-2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: test_exec_monitor.hpp,v $
+//
+// Version : $Revision: 1.3 $
+//
+// Description : Entry point for the end user into the Test Execution Monitor.
+// ***************************************************************************
+
+#ifndef BOOST_TEST_EXEC_MONITOR_HPP_071894GER
+#define BOOST_TEST_EXEC_MONITOR_HPP_071894GER
+
+// Boost.Test
+#include <boost/test/test_tools.hpp>
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// ************** Auto Linking ************** //
+// ************************************************************************** //
+
+// Automatically link to the correct build variant where possible.
+#if !defined(BOOST_ALL_NO_LIB) && !defined(BOOST_TEST_NO_LIB) && \
+ !defined(BOOST_TEST_SOURCE) && !defined(BOOST_TEST_INCLUDED)
+
+# define BOOST_LIB_NAME boost_test_exec_monitor
+# include <boost/config/auto_link.hpp>
+
+#endif // auto-linking disabled
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: test_exec_monitor.hpp,v $
+// Revision 1.3 2006/03/19 11:45:26 rogeeff
+// main function renamed for consistancy
+//
+// Revision 1.2 2006/02/07 16:15:20 rogeeff
+// BOOST_TEST_INCLUDED guard were missing
+//
+// Revision 1.1 2005/12/14 05:42:08 rogeeff
+// components primary headers
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_EXEC_MONITOR_HPP_071894GER
diff --git a/boost/boost/test/test_observer.hpp b/boost/boost/test/test_observer.hpp
new file mode 100644
index 00000000000..70193a12edd
--- /dev/null
+++ b/boost/boost/test/test_observer.hpp
@@ -0,0 +1,82 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: test_observer.hpp,v $
+//
+// Version : $Revision: 1.3 $
+//
+// Description : defines abstract interface for test observer
+// ***************************************************************************
+
+#ifndef BOOST_TEST_TEST_OBSERVER_HPP_021005GER
+#define BOOST_TEST_TEST_OBSERVER_HPP_021005GER
+
+// Boost.Test
+#include <boost/test/detail/fwd_decl.hpp>
+#include <boost/test/detail/global_typedef.hpp>
+#include <boost/test/detail/config.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace boost {
+
+namespace unit_test {
+
+// ************************************************************************** //
+// ************** test_observer ************** //
+// ************************************************************************** //
+
+class BOOST_TEST_DECL test_observer {
+public:
+ // test observer interface
+ virtual void test_start( counter_t /* test_cases_amount */ ) {}
+ virtual void test_finish() {}
+ virtual void test_aborted() {}
+
+ virtual void test_unit_start( test_unit const& ) {}
+ virtual void test_unit_finish( test_unit const&, unsigned long /* elapsed */ ) {}
+ virtual void test_unit_skipped( test_unit const& ) {}
+ virtual void test_unit_aborted( test_unit const& ) {}
+
+ virtual void assertion_result( bool /* passed */ ) {}
+ virtual void exception_caught( execution_exception const& ) {}
+
+ virtual int priority() { return 0; }
+
+protected:
+ BOOST_TEST_PROTECTED_VIRTUAL ~test_observer() {}
+};
+
+} // unit_test
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: test_observer.hpp,v $
+// Revision 1.3 2006/03/13 18:28:26 rogeeff
+// warnings eliminated
+//
+// Revision 1.2 2005/12/14 05:15:34 rogeeff
+// dll support introduced
+// priority interface added
+// provide default implementation for interface function
+//
+// Revision 1.1 2005/02/20 08:27:06 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_TEST_OBSERVER_HPP_021005GER
+
diff --git a/boost/boost/test/test_tools.hpp b/boost/boost/test/test_tools.hpp
new file mode 100644
index 00000000000..6da88a3ef5a
--- /dev/null
+++ b/boost/boost/test/test_tools.hpp
@@ -0,0 +1,692 @@
+// (C) Copyright Gennadiy Rozental 2001-2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: test_tools.hpp,v $
+//
+// Version : $Revision: 1.60.2.7 $
+//
+// Description : contains definition for all test tools in test toolbox
+// ***************************************************************************
+
+#ifndef BOOST_TEST_TEST_TOOLS_HPP_012705GER
+#define BOOST_TEST_TEST_TOOLS_HPP_012705GER
+
+// Boost.Test
+#include <boost/test/predicate_result.hpp>
+#include <boost/test/unit_test_log.hpp>
+
+#include <boost/test/detail/config.hpp>
+#include <boost/test/detail/global_typedef.hpp>
+#include <boost/test/detail/workaround.hpp>
+
+#include <boost/test/utils/wrap_stringstream.hpp>
+#include <boost/test/utils/basic_cstring/io.hpp>
+
+// Boost
+#include <boost/preprocessor/seq/for_each.hpp>
+#include <boost/preprocessor/seq/size.hpp>
+#include <boost/preprocessor/seq/enum.hpp>
+#include <boost/preprocessor/repetition/repeat.hpp>
+#include <boost/preprocessor/punctuation/comma_if.hpp>
+#include <boost/preprocessor/arithmetic/add.hpp>
+#include <boost/limits.hpp>
+
+#include <boost/type_traits/is_array.hpp>
+#include <boost/type_traits/is_function.hpp>
+#include <boost/type_traits/is_abstract.hpp>
+
+#include <boost/mpl/or.hpp>
+
+// STL
+#include <cstddef> // for std::size_t
+#include <iosfwd>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// ************** TOOL BOX ************** //
+// ************************************************************************** //
+
+// In macros below following argument abbreviations are used:
+// P - predicate
+// M - message
+// S - statement
+// E - exception
+// L - left argument
+// R - right argument
+// TL - tool level
+// CT - check type
+// ARGS - arguments list
+
+#define BOOST_TEST_TOOL_IMPL( func, P, check_descr, TL, CT ) \
+ ::boost::test_tools::tt_detail::func( \
+ P, \
+ ::boost::wrap_stringstream().ref() << check_descr, \
+ BOOST_TEST_L(__FILE__), \
+ (std::size_t)__LINE__, \
+ ::boost::test_tools::tt_detail::TL, \
+ ::boost::test_tools::tt_detail::CT \
+/**/
+
+//____________________________________________________________________________//
+
+#define BOOST_CHECK_IMPL( P, check_descr, TL, CT ) \
+do { \
+ BOOST_TEST_PASSPOINT(); \
+ BOOST_TEST_TOOL_IMPL( check_impl, P, check_descr, TL, CT ), 0 );\
+} while( ::boost::test_tools::dummy_cond ) \
+/**/
+
+//____________________________________________________________________________//
+
+#define BOOST_TEST_PASS_ARG_INFO( r, data, arg ) , arg, BOOST_STRINGIZE( arg )
+
+#define BOOST_CHECK_WITH_ARGS_IMPL( P, check_descr, TL, CT, ARGS ) \
+do { \
+ BOOST_TEST_PASSPOINT(); \
+ BOOST_TEST_TOOL_IMPL( check_frwd, P, check_descr, TL, CT ) \
+ BOOST_PP_SEQ_FOR_EACH( BOOST_TEST_PASS_ARG_INFO, '_', ARGS ) ); \
+} while( ::boost::test_tools::dummy_cond ) \
+/**/
+
+//____________________________________________________________________________//
+
+#define BOOST_WARN( P ) BOOST_CHECK_IMPL( (P), BOOST_TEST_STRINGIZE( P ), WARN, CHECK_PRED )
+#define BOOST_CHECK( P ) BOOST_CHECK_IMPL( (P), BOOST_TEST_STRINGIZE( P ), CHECK, CHECK_PRED )
+#define BOOST_REQUIRE( P ) BOOST_CHECK_IMPL( (P), BOOST_TEST_STRINGIZE( P ), REQUIRE, CHECK_PRED )
+
+//____________________________________________________________________________//
+
+#define BOOST_WARN_MESSAGE( P, M ) BOOST_CHECK_IMPL( (P), M, WARN, CHECK_MSG )
+#define BOOST_CHECK_MESSAGE( P, M ) BOOST_CHECK_IMPL( (P), M, CHECK, CHECK_MSG )
+#define BOOST_REQUIRE_MESSAGE( P, M ) BOOST_CHECK_IMPL( (P), M, REQUIRE, CHECK_MSG )
+
+//____________________________________________________________________________//
+
+#define BOOST_ERROR( M ) BOOST_CHECK_MESSAGE( false, M )
+#define BOOST_FAIL( M ) BOOST_REQUIRE_MESSAGE( false, M )
+
+//____________________________________________________________________________//
+
+#define BOOST_CHECK_THROW_IMPL( S, E, P, prefix, TL ) \
+ try { \
+ BOOST_TEST_PASSPOINT(); \
+ S; \
+ BOOST_CHECK_IMPL( false, "exception " BOOST_STRINGIZE( E ) " is expected", TL, CHECK_MSG ); } \
+ catch( E const& ex ) { \
+ ::boost::unit_test::ut_detail::ignore_unused_variable_warning( ex ); \
+ BOOST_CHECK_IMPL( P, prefix BOOST_STRINGIZE( E ) " is caught", TL, CHECK_MSG ); \
+ } \
+/**/
+
+//____________________________________________________________________________//
+
+#define BOOST_WARN_THROW( S, E ) BOOST_CHECK_THROW_IMPL( S, E, true, "exception ", WARN )
+#define BOOST_CHECK_THROW( S, E ) BOOST_CHECK_THROW_IMPL( S, E, true, "exception ", CHECK )
+#define BOOST_REQUIRE_THROW( S, E ) BOOST_CHECK_THROW_IMPL( S, E, true, "exception ", REQUIRE )
+
+//____________________________________________________________________________//
+
+#define BOOST_WARN_EXCEPTION( S, E, P ) BOOST_CHECK_THROW_IMPL( S, E, P( ex ), "incorrect exception ", WARN )
+#define BOOST_CHECK_EXCEPTION( S, E, P ) BOOST_CHECK_THROW_IMPL( S, E, P( ex ), "incorrect exception ", CHECK )
+#define BOOST_REQUIRE_EXCEPTION( S, E, P ) BOOST_CHECK_THROW_IMPL( S, E, P( ex ), "incorrect exception ", REQUIRE )
+
+//____________________________________________________________________________//
+
+#define BOOST_CHECK_NO_THROW_IMPL( S, TL ) \
+ try { \
+ S; \
+ BOOST_CHECK_IMPL( true, "no exceptions thrown by " BOOST_STRINGIZE( S ), TL, CHECK_MSG ); } \
+ catch( ... ) { \
+ BOOST_CHECK_IMPL( false, "exception thrown by " BOOST_STRINGIZE( S ), TL, CHECK_MSG ); \
+ } \
+/**/
+
+#define BOOST_WARN_NO_THROW( S ) BOOST_CHECK_NO_THROW_IMPL( S, WARN )
+#define BOOST_CHECK_NO_THROW( S ) BOOST_CHECK_NO_THROW_IMPL( S, CHECK )
+#define BOOST_REQUIRE_NO_THROW( S ) BOOST_CHECK_NO_THROW_IMPL( S, REQUIRE )
+
+//____________________________________________________________________________//
+
+// The argument version of the following macros are causing "Internal Compiler Errors"
+// on MSVC 6.5 when inlining is turned on (i.e. usually in release builds)
+#if BOOST_WORKAROUND(BOOST_MSVC, <=1200) && defined(NDEBUG)
+#define BOOST_WARN_EQUAL( L, R ) BOOST_WARN( (L) == (R) )
+#define BOOST_CHECK_EQUAL( L, R ) BOOST_CHECK( (L) == (R) )
+#define BOOST_REQUIRE_EQUAL( L, R ) BOOST_REQUIRE( (L) == (R) )
+#else
+#define BOOST_WARN_EQUAL( L, R ) \
+ BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::tt_detail::equal_impl_frwd(), "", WARN, CHECK_EQUAL, (L)(R) )
+#define BOOST_CHECK_EQUAL( L, R ) \
+ BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::tt_detail::equal_impl_frwd(), "", CHECK, CHECK_EQUAL, (L)(R) )
+#define BOOST_REQUIRE_EQUAL( L, R ) \
+ BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::tt_detail::equal_impl_frwd(), "", REQUIRE, CHECK_EQUAL, (L)(R) )
+#endif
+//____________________________________________________________________________//
+
+#define BOOST_WARN_CLOSE( L, R, T ) \
+ BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::check_is_close, "", WARN, CHECK_CLOSE, \
+ (L)(R)(::boost::test_tools::percent_tolerance(T)) )
+#define BOOST_CHECK_CLOSE( L, R, T ) \
+ BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::check_is_close, "", CHECK, CHECK_CLOSE, \
+ (L)(R)(::boost::test_tools::percent_tolerance(T)) )
+#define BOOST_REQUIRE_CLOSE( L, R, T ) \
+ BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::check_is_close, "", REQUIRE, CHECK_CLOSE, \
+ (L)(R)(::boost::test_tools::percent_tolerance(T)) )
+
+//____________________________________________________________________________//
+
+#define BOOST_WARN_CLOSE_FRACTION( L, R, T ) \
+ BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::check_is_close, "", WARN, CHECK_CLOSE_FRACTION, \
+ (L)(R)(::boost::test_tools::fraction_tolerance(T)) )
+#define BOOST_CHECK_CLOSE_FRACTION( L, R, T ) \
+ BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::check_is_close, "", CHECK, CHECK_CLOSE_FRACTION, \
+ (L)(R)(::boost::test_tools::fraction_tolerance(T)) )
+#define BOOST_REQUIRE_CLOSE_FRACTION( L, R, T ) \
+ BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::check_is_close, "", REQUIRE, CHECK_CLOSE_FRACTION, \
+ (L)(R)(::boost::test_tools::fraction_tolerance(T)) )
+
+//____________________________________________________________________________//
+
+#define BOOST_WARN_SMALL( FPV, T ) \
+ BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::check_is_small, "", WARN, CHECK_SMALL, (FPV)(T) )
+#define BOOST_CHECK_SMALL( FPV, T ) \
+ BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::check_is_small, "", CHECK, CHECK_SMALL, (FPV)(T) )
+#define BOOST_REQUIRE_SMALL( FPV, T ) \
+ BOOST_CHECK_WITH_ARGS_IMPL( ::boost::test_tools::check_is_small, "", REQUIRE, CHECK_SMALL, (FPV)(T) )
+
+//____________________________________________________________________________//
+
+#define BOOST_WARN_PREDICATE( P, ARGS ) \
+ BOOST_CHECK_WITH_ARGS_IMPL( P, BOOST_TEST_STRINGIZE( P ), WARN, CHECK_PRED_WITH_ARGS, ARGS )
+#define BOOST_CHECK_PREDICATE( P, ARGS ) \
+ BOOST_CHECK_WITH_ARGS_IMPL( P, BOOST_TEST_STRINGIZE( P ), CHECK, CHECK_PRED_WITH_ARGS, ARGS )
+#define BOOST_REQUIRE_PREDICATE( P, ARGS ) \
+ BOOST_CHECK_WITH_ARGS_IMPL( P, BOOST_TEST_STRINGIZE( P ), REQUIRE, CHECK_PRED_WITH_ARGS, ARGS )
+
+//____________________________________________________________________________//
+
+#define BOOST_EQUAL_COLLECTIONS_IMPL( L_begin, L_end, R_begin, R_end, TL ) \
+ BOOST_TEST_TOOL_IMPL( check_impl, ::boost::test_tools::tt_detail::equal_coll_impl( \
+ (L_begin), (L_end), (R_begin), (R_end) ), "", TL, CHECK_EQUAL_COLL ), \
+ 4, \
+ BOOST_STRINGIZE( L_begin ), BOOST_STRINGIZE( L_end ), \
+ BOOST_STRINGIZE( R_begin ), BOOST_STRINGIZE( R_end ) ) \
+/**/
+
+#define BOOST_WARN_EQUAL_COLLECTIONS( L_begin, L_end, R_begin, R_end ) \
+ BOOST_EQUAL_COLLECTIONS_IMPL( L_begin, L_end, R_begin, R_end, WARN )
+#define BOOST_CHECK_EQUAL_COLLECTIONS( L_begin, L_end, R_begin, R_end ) \
+ BOOST_EQUAL_COLLECTIONS_IMPL( L_begin, L_end, R_begin, R_end, CHECK )
+#define BOOST_REQUIRE_EQUAL_COLLECTIONS( L_begin, L_end, R_begin, R_end ) \
+ BOOST_EQUAL_COLLECTIONS_IMPL( L_begin, L_end, R_begin, R_end, REQUIRE )
+
+//____________________________________________________________________________//
+
+#define BOOST_BITWISE_EQUAL_IMPL( L, R, TL ) \
+ BOOST_TEST_TOOL_IMPL( check_impl, \
+ ::boost::test_tools::tt_detail::bitwise_equal_impl( (L), (R) ), \
+ "", TL, CHECK_BITWISE_EQUAL ), \
+ 2, BOOST_STRINGIZE( L ), BOOST_STRINGIZE( R ) ) \
+/**/
+
+#define BOOST_WARN_BITWISE_EQUAL( L, R ) BOOST_BITWISE_EQUAL_IMPL( L, R, WARN )
+#define BOOST_CHECK_BITWISE_EQUAL( L, R ) BOOST_BITWISE_EQUAL_IMPL( L, R, CHECK )
+#define BOOST_REQUIRE_BITWISE_EQUAL( L, R ) BOOST_BITWISE_EQUAL_IMPL( L, R, REQUIRE )
+
+//____________________________________________________________________________//
+
+#define BOOST_IS_DEFINED( symb ) ::boost::test_tools::tt_detail::is_defined_impl( #symb, BOOST_STRINGIZE(= symb) )
+
+//____________________________________________________________________________//
+
+// ***************************** //
+// deprecated interface
+
+#define BOOST_BITWISE_EQUAL( L, R ) BOOST_CHECK_BITWISE_EQUAL( L, R )
+#define BOOST_MESSAGE( M ) BOOST_TEST_MESSAGE( M )
+#define BOOST_CHECKPOINT( M ) BOOST_TEST_CHECKPOINT( M )
+
+namespace boost {
+
+namespace test_tools {
+
+typedef unit_test::const_string const_string;
+
+namespace { bool dummy_cond = false; }
+
+namespace tt_detail {
+
+// ************************************************************************** //
+// ************** tools classification ************** //
+// ************************************************************************** //
+
+enum check_type {
+ CHECK_PRED,
+ CHECK_MSG,
+ CHECK_EQUAL,
+ CHECK_CLOSE,
+ CHECK_CLOSE_FRACTION,
+ CHECK_SMALL,
+ CHECK_BITWISE_EQUAL,
+ CHECK_PRED_WITH_ARGS,
+ CHECK_EQUAL_COLL
+};
+
+enum tool_level {
+ WARN, CHECK, REQUIRE, PASS
+};
+
+// ************************************************************************** //
+// ************** log print helper ************** //
+// ************************************************************************** //
+
+template<typename T>
+struct print_log_value {
+ void operator()( std::ostream& ostr, T const& t )
+ {
+ typedef typename mpl::or_<is_array<T>,is_function<T>,is_abstract<T> >::type couldnt_use_nl;
+
+ set_precision( ostr, couldnt_use_nl() );
+
+ ostr << t; // by default print the value
+ }
+
+ void set_precision( std::ostream& ostr, mpl::false_ )
+ {
+ if( std::numeric_limits<T>::is_specialized && std::numeric_limits<T>::radix == 2 )
+ ostr.precision( 2 + std::numeric_limits<T>::digits * 301/1000 );
+ }
+
+ void set_precision( std::ostream&, mpl::true_ ) {}
+};
+
+//____________________________________________________________________________//
+
+#define BOOST_TEST_DONT_PRINT_LOG_VALUE( the_type ) \
+namespace boost { namespace test_tools { namespace tt_detail { \
+template<> \
+struct print_log_value<the_type > { \
+ void operator()( std::ostream& ostr, the_type const& t ) {} \
+}; \
+}}} \
+/**/
+
+//____________________________________________________________________________//
+
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+template<typename T, std::size_t N >
+struct print_log_value< T[N] > {
+ void operator()( std::ostream& ostr, T const* t )
+ {
+ ostr << t;
+ }
+};
+#endif
+
+//____________________________________________________________________________//
+
+template<>
+struct BOOST_TEST_DECL print_log_value<char> {
+ void operator()( std::ostream& ostr, char t );
+};
+
+//____________________________________________________________________________//
+
+template<>
+struct BOOST_TEST_DECL print_log_value<unsigned char> {
+ void operator()( std::ostream& ostr, unsigned char t );
+};
+
+//____________________________________________________________________________//
+
+template<>
+struct BOOST_TEST_DECL print_log_value<char const*> {
+ void operator()( std::ostream& ostr, char const* t );
+};
+
+//____________________________________________________________________________//
+
+template<>
+struct BOOST_TEST_DECL print_log_value<wchar_t const*> {
+ void operator()( std::ostream& ostr, wchar_t const* t );
+};
+
+//____________________________________________________________________________//
+
+template<typename T>
+struct print_helper_t {
+ explicit print_helper_t( T const& t ) : m_t( t ) {}
+
+ T const& m_t;
+};
+
+//____________________________________________________________________________//
+
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+// Borland suffers premature pointer decay passing arrays by reference
+template<typename T, std::size_t N >
+struct print_helper_t< T[N] > {
+ explicit print_helper_t( T const * t ) : m_t( t ) {}
+
+ T const * m_t;
+};
+#endif
+
+//____________________________________________________________________________//
+
+template<typename T>
+inline print_helper_t<T> print_helper( T const& t )
+{
+ return print_helper_t<T>( t );
+}
+
+#if BOOST_WORKAROUND(__SUNPRO_CC, < 0x580)
+template<typename T, std::size_t N>
+inline print_helper_t<T*> print_helper( T (&t)[N] )
+{
+ return print_helper_t<T*>( &t[0] );
+}
+#endif
+
+//____________________________________________________________________________//
+
+template<typename T>
+inline std::ostream&
+operator<<( std::ostream& ostr, print_helper_t<T> const& ph )
+{
+ print_log_value<T>()( ostr, ph.m_t );
+
+ return ostr;
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// ************** TOOL BOX Implementation ************** //
+// ************************************************************************** //
+
+BOOST_TEST_DECL
+void check_impl( predicate_result const& pr, wrap_stringstream& check_descr,
+ const_string file_name, std::size_t line_num,
+ tool_level tl, check_type ct,
+ std::size_t num_args, ... );
+
+//____________________________________________________________________________//
+
+#define TEMPL_PARAMS( z, m, dummy ) , typename BOOST_JOIN( Arg, m )
+#define FUNC_PARAMS( z, m, dummy ) \
+ , BOOST_JOIN( Arg, m ) const& BOOST_JOIN( arg, m ) \
+ , char const* BOOST_JOIN( BOOST_JOIN( arg, m ), _descr ) \
+/**/
+
+#define PRED_PARAMS( z, m, dummy ) BOOST_PP_COMMA_IF( m ) BOOST_JOIN( arg, m )
+
+#define ARG_INFO( z, m, dummy ) \
+ , BOOST_JOIN( BOOST_JOIN( arg, m ), _descr ) \
+ , (boost::wrap_stringstream().ref() \
+ << ::boost::test_tools::tt_detail:: \
+ print_helper( BOOST_JOIN( arg, m ) )).str().c_str() \
+/**/
+
+#define IMPL_FRWD( z, n, dummy ) \
+template<typename Pred \
+ BOOST_PP_REPEAT_ ## z( BOOST_PP_ADD( n, 1 ), TEMPL_PARAMS, _ )> \
+inline void \
+check_frwd( Pred P, wrap_stringstream& check_descr, \
+ const_string file_name, std::size_t line_num, \
+ tool_level tl, check_type ct \
+ BOOST_PP_REPEAT_ ## z( BOOST_PP_ADD( n, 1 ), FUNC_PARAMS, _ ) \
+) \
+{ \
+ check_impl( P( BOOST_PP_REPEAT_ ## z( BOOST_PP_ADD( n, 1 ), PRED_PARAMS, _ ) ), \
+ check_descr, file_name, line_num, tl, ct, \
+ BOOST_PP_ADD( n, 1 ) \
+ BOOST_PP_REPEAT_ ## z( BOOST_PP_ADD( n, 1 ), ARG_INFO, _ ) \
+ ); \
+} \
+/**/
+
+#ifndef BOOST_TEST_MAX_PREDICATE_ARITY
+#define BOOST_TEST_MAX_PREDICATE_ARITY 5
+#endif
+
+BOOST_PP_REPEAT( BOOST_TEST_MAX_PREDICATE_ARITY, IMPL_FRWD, _ )
+
+#undef TEMPL_PARAMS
+#undef FUNC_PARAMS
+#undef PRED_INFO
+#undef ARG_INFO
+#undef IMPL_FRWD
+
+//____________________________________________________________________________//
+
+template <class Left, class Right>
+predicate_result equal_impl( Left const& left, Right const& right )
+{
+ return left == right;
+}
+
+//____________________________________________________________________________//
+
+predicate_result BOOST_TEST_DECL equal_impl( char const* left, char const* right );
+inline predicate_result BOOST_TEST_DECL equal_impl( char* left, char const* right ) { return equal_impl( (char const*)left, (char const*)right ); }
+inline predicate_result BOOST_TEST_DECL equal_impl( char const* left, char* right ) { return equal_impl( (char const*)left, (char const*)right ); }
+inline predicate_result BOOST_TEST_DECL equal_impl( char* left, char* right ) { return equal_impl( (char const*)left, (char const*)right ); }
+
+#if !defined( BOOST_NO_CWCHAR )
+predicate_result equal_impl( wchar_t const* left, wchar_t const* right );
+inline predicate_result equal_impl( wchar_t* left, wchar_t const* right ) { return equal_impl( (wchar_t const*)left, (wchar_t const*)right ); }
+inline predicate_result equal_impl( wchar_t const* left, wchar_t* right ) { return equal_impl( (wchar_t const*)left, (wchar_t const*)right ); }
+inline predicate_result equal_impl( wchar_t* left, wchar_t* right ) { return equal_impl( (wchar_t const*)left, (wchar_t const*)right ); }
+#endif
+
+//____________________________________________________________________________//
+//
+// Declaring this class as exported causes linker errors when building
+// the serialisation tests with VC6, disable this for now. (JM 2006/10/30)
+struct /*BOOST_TEST_DECL*/ equal_impl_frwd {
+ template <typename Left, typename Right>
+ inline predicate_result
+ call_impl( Left const& left, Right const& right, mpl::false_ ) const
+ {
+ return equal_impl( left, right );
+ }
+
+ template <typename Left, typename Right>
+ inline predicate_result
+ call_impl( Left const& left, Right const& right, mpl::true_ ) const
+ {
+ return (*this)( right, &left[0] );
+ }
+
+ template <typename Left, typename Right>
+ inline predicate_result
+ operator()( Left const& left, Right const& right ) const
+ {
+ typedef typename is_array<Left>::type left_is_array;
+ return call_impl( left, right, left_is_array() );
+ }
+};
+
+//____________________________________________________________________________//
+
+template <typename Left, typename Right>
+inline predicate_result
+equal_coll_impl( Left left_begin, Left left_end, Right right_begin, Right right_end )
+{
+ predicate_result res( true );
+ std::size_t pos = 0;
+
+ for( ; left_begin != left_end && right_begin != right_end; ++left_begin, ++right_begin, ++pos ) {
+ if( *left_begin != *right_begin ) {
+ res = false;
+ res.message() << "\nMismatch in a position " << pos << ": " << *left_begin << " != " << *right_begin;
+ }
+ }
+
+ if( left_begin != left_end ) {
+ std::size_t r_size = pos;
+ while( left_begin != left_end ) {
+ ++pos;
+ ++left_begin;
+ }
+
+ res = false;
+ res.message() << "\nCollections size mismatch: " << pos << " != " << r_size;
+ }
+
+ if( right_begin != right_end ) {
+ std::size_t l_size = pos;
+ while( right_begin != right_end ) {
+ ++pos;
+ ++right_begin;
+ }
+
+ res = false;
+ res.message() << "\nCollections size mismatch: " << l_size << " != " << pos;
+ }
+
+ return res;
+}
+
+//____________________________________________________________________________//
+
+template <class Left, class Right>
+inline predicate_result
+bitwise_equal_impl( Left const& left, Right const& right )
+{
+ predicate_result res( true );
+
+ std::size_t left_bit_size = sizeof(Left)*CHAR_BIT;
+ std::size_t right_bit_size = sizeof(Right)*CHAR_BIT;
+
+ static Left const L1( 1 );
+ static Right const R1( 1 );
+
+ std::size_t total_bits = left_bit_size < right_bit_size ? left_bit_size : right_bit_size;
+
+ for( std::size_t counter = 0; counter < total_bits; ++counter ) {
+ if( ( left & ( L1 << counter ) ) != ( right & ( R1 << counter ) ) ) {
+ res = false;
+ res.message() << "\nMismatch in a position " << counter;
+ }
+ }
+
+ if( left_bit_size != right_bit_size ) {
+ res = false;
+ res.message() << "\nOperands bit sizes mismatch: " << left_bit_size << " != " << right_bit_size;
+ }
+
+ return res;
+}
+
+//____________________________________________________________________________//
+
+bool BOOST_TEST_DECL is_defined_impl( const_string symbol_name, const_string symbol_value );
+
+//____________________________________________________________________________//
+
+} // namespace tt_detail
+
+} // namespace test_tools
+
+namespace test_toolbox = test_tools;
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: test_tools.hpp,v $
+// Revision 1.60.2.7 2007/02/22 17:57:29 speedsnail
+// Make the msvc-6.5 hack even more specific, i.e. apply only in release builds.
+//
+// Revision 1.60.2.6 2006/12/16 15:02:16 speedsnail
+// Merged from HEAD
+//
+// Revision 1.60.2.5 2006/11/14 21:33:26 jhunold
+// Merge from HEAD: Add missing export macros for print_log_value<>
+//
+// Revision 1.60.2.4 2006/11/14 07:35:43 jhunold
+// Merge from HEAD: Removed wrong export declarations.
+//
+// Revision 1.60.2.3 2006/11/13 20:06:57 jhunold
+// Merge from HEAD:
+// Added missing export declarations.
+//
+// Revision 1.60.2.2 2006/10/30 18:37:36 johnmaddock
+// Patch for serialisation test failures.
+//
+// Revision 1.60.2.1 2006/07/24 00:43:17 gennaro_prota
+// Tentative fix for Sun C++ 5.8 (don't add more specialized print_helper function template)
+//
+// Revision 1.60 2006/03/19 07:27:11 rogeeff
+// avoid warning
+//
+// Revision 1.59 2006/03/03 17:39:46 rogeeff
+// paaspoint added to check throw
+//
+// Revision 1.58 2006/02/06 10:04:55 rogeeff
+// BOOST_TEST_MODULE - master test suite name
+//
+// Revision 1.57 2006/01/28 07:00:47 rogeeff
+// sunpro port
+//
+// Revision 1.56 2005/12/19 03:08:30 rogeeff
+// added is_abstract to guard numeric_limits instantiation
+//
+// Revision 1.55 2005/12/14 05:20:41 rogeeff
+// dll support introduced
+// BOOST_TEST_PASSPOINT() introduced
+// BOOST_MESSAGE depricated. Use BOOST_TEST_MESSAGE instead
+// BOOST_CHECKPOINT is depricated. Use BOOST_TEST_CHECKPOINT intead
+//
+// Revision 1.54 2005/06/07 04:38:20 rogeeff
+// borland fix
+//
+// Revision 1.53 2005/05/11 04:51:14 rogeeff
+// borlard portability fix
+//
+// Revision 1.52 2005/03/22 07:08:47 rogeeff
+// string comparisons streamlined
+// precision settings made portable
+//
+// Revision 1.51 2005/02/21 10:23:54 rogeeff
+// major issue with TT redesign causing TT to reevaluate it's arguments fixed
+// FP precision extended
+//
+// Revision 1.50 2005/02/20 08:27:06 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// Revision 1.49 2005/02/01 06:40:06 rogeeff
+// copyright update
+// old log entries removed
+// minor stylistic changes
+// deprecated tools removed
+//
+// Revision 1.48 2005/01/30 03:32:57 rogeeff
+// Test Tools completely reworked:
+// interfaces streamlined to provide 3 version for each tool
+// implementation reworked to use single vararg formatter function
+// CHECK_COLLECTION now expect 4 arguments
+// BITWISE_EQUAL renamed to CHECK_BITWISE_EQUAL but still provided as deprecated
+// CHECK_COLLECTION interface changed to use PP_SEQ and as a result support arbitrary number of predicate arguments
+// most of templates eliminated
+// deprecated tools removed
+// print_helper object generator added
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_TEST_TOOLS_HPP_012705GER
+
diff --git a/boost/boost/test/unit_test.hpp b/boost/boost/test/unit_test.hpp
new file mode 100644
index 00000000000..6aaedaf1b0d
--- /dev/null
+++ b/boost/boost/test/unit_test.hpp
@@ -0,0 +1,102 @@
+// (C) Copyright Gennadiy Rozental 2001-2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: unit_test.hpp,v $
+//
+// Version : $Revision: 1.19 $
+//
+// Description : Entry point for the end user into the Unit Test Framework.
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UNIT_TEST_HPP_071894GER
+#define BOOST_TEST_UNIT_TEST_HPP_071894GER
+
+// Boost.Test
+#include <boost/test/test_tools.hpp>
+#include <boost/test/unit_test_suite.hpp>
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// ************** Auto Linking ************** //
+// ************************************************************************** //
+
+#if !defined(BOOST_ALL_NO_LIB) && !defined(BOOST_TEST_NO_LIB) && \
+ !defined(BOOST_TEST_SOURCE) && !defined(BOOST_TEST_INCLUDED)
+# define BOOST_LIB_NAME boost_unit_test_framework
+
+# if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_TEST_DYN_LINK)
+# define BOOST_DYN_LINK
+# endif
+
+# include <boost/config/auto_link.hpp>
+
+#endif // auto-linking disabled
+
+// ************************************************************************** //
+// ************** unit_test_main ************** //
+// ************************************************************************** //
+
+namespace boost { namespace unit_test {
+
+#if defined(BOOST_TEST_DYN_LINK)
+
+int BOOST_TEST_DECL unit_test_main( bool (*init_unit_test_func)(), int argc, char* argv[] );
+
+#else
+
+int BOOST_TEST_DECL unit_test_main( int argc, char* argv[] );
+
+#endif
+
+}}
+
+#if defined(BOOST_TEST_DYN_LINK) && defined(BOOST_TEST_MAIN) && !defined(BOOST_TEST_NO_MAIN)
+
+// ************************************************************************** //
+// ************** main function for tests using dll ************** //
+// ************************************************************************** //
+
+int BOOST_TEST_CALL_DECL
+main( int argc, char* argv[] )
+{
+ return ::boost::unit_test::unit_test_main( &init_unit_test, argc, argv );
+}
+
+//____________________________________________________________________________//
+
+#endif // BOOST_TEST_DYN_LINK && BOOST_TEST_MAIN && !BOOST_TEST_NO_MAIN
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: unit_test.hpp,v $
+// Revision 1.19 2006/03/19 11:45:26 rogeeff
+// main function renamed for consistancy
+//
+// Revision 1.18 2006/02/07 16:15:20 rogeeff
+// BOOST_TEST_INCLUDED guard were missing
+//
+// Revision 1.17 2006/02/06 10:04:55 rogeeff
+// BOOST_TEST_MODULE - master test suite name
+//
+// Revision 1.16 2005/12/14 05:21:36 rogeeff
+// dll support introduced
+// auto linking support introduced
+//
+// Revision 1.15 2005/02/20 08:27:06 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// Revision 1.14 2005/02/01 06:40:06 rogeeff
+// copyright update
+// old log entries removed
+// minor stilistic changes
+// depricated tools removed
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_UNIT_TEST_HPP_071894GER
diff --git a/boost/boost/test/unit_test_log.hpp b/boost/boost/test/unit_test_log.hpp
new file mode 100644
index 00000000000..a45927d3ef8
--- /dev/null
+++ b/boost/boost/test/unit_test_log.hpp
@@ -0,0 +1,213 @@
+// (C) Copyright Gennadiy Rozental 2001-2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: unit_test_log.hpp,v $
+//
+// Version : $Revision: 1.32 $
+//
+// Description : defines singleton class unit_test_log and all manipulators.
+// unit_test_log has output stream like interface. It's implementation is
+// completely hidden with pimple idiom
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UNIT_TEST_LOG_HPP_071894GER
+#define BOOST_TEST_UNIT_TEST_LOG_HPP_071894GER
+
+// Boost.Test
+#include <boost/test/test_observer.hpp>
+
+#include <boost/test/detail/global_typedef.hpp>
+#include <boost/test/detail/log_level.hpp>
+#include <boost/test/detail/fwd_decl.hpp>
+
+#include <boost/test/utils/wrap_stringstream.hpp>
+#include <boost/test/utils/trivial_singleton.hpp>
+
+// Boost
+#include <boost/utility.hpp>
+
+// STL
+#include <iosfwd> // for std::ostream&
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace boost {
+
+namespace unit_test {
+
+// ************************************************************************** //
+// ************** log manipulators ************** //
+// ************************************************************************** //
+
+namespace log {
+
+struct BOOST_TEST_DECL begin {
+ begin( const_string fn, std::size_t ln )
+ : m_file_name( fn )
+ , m_line_num( ln )
+ {}
+
+ const_string m_file_name;
+ std::size_t m_line_num;
+};
+
+struct end {};
+
+} // namespace log
+
+// ************************************************************************** //
+// ************** entry_value_collector ************** //
+// ************************************************************************** //
+
+namespace ut_detail {
+
+class BOOST_TEST_DECL entry_value_collector {
+public:
+ // Constructors
+ entry_value_collector() : m_last( true ) {}
+ entry_value_collector( entry_value_collector& rhs ) : m_last( true ) { rhs.m_last = false; }
+ ~entry_value_collector();
+
+ // collection interface
+ entry_value_collector operator<<( const_string );
+
+private:
+ // Data members
+ bool m_last;
+};
+
+} // namespace ut_detail
+
+// ************************************************************************** //
+// ************** unit_test_log ************** //
+// ************************************************************************** //
+
+class BOOST_TEST_DECL unit_test_log_t : public test_observer, public singleton<unit_test_log_t> {
+public:
+ // test_observer interface implementation
+ void test_start( counter_t test_cases_amount );
+ void test_finish();
+ void test_aborted();
+
+ void test_unit_start( test_unit const& );
+ void test_unit_finish( test_unit const&, unsigned long elapsed );
+ void test_unit_skipped( test_unit const& );
+ void test_unit_aborted( test_unit const& );
+
+ void assertion_result( bool passed );
+ void exception_caught( execution_exception const& );
+
+ virtual int priority() { return 1; }
+
+ // log configuration methods
+ void set_stream( std::ostream& );
+ void set_threshold_level( log_level );
+ void set_format( output_format );
+ void set_formatter( unit_test_log_formatter* );
+
+ // test progress logging
+ void set_checkpoint( const_string file, std::size_t line_num, const_string msg = const_string() );
+
+ // entry logging
+ unit_test_log_t& operator<<( log::begin const& ); // begin entry
+ unit_test_log_t& operator<<( log::end const& ); // end entry
+ unit_test_log_t& operator<<( log_level ); // set entry level
+ unit_test_log_t& operator<<( const_string ); // log entry value
+
+ ut_detail::entry_value_collector operator()( log_level ); // initiate entry collection
+
+private:
+ BOOST_TEST_SINGLETON_CONS( unit_test_log_t );
+}; // unit_test_log_t
+
+BOOST_TEST_SINGLETON_INST( unit_test_log )
+
+// helper macros
+#define BOOST_TEST_LOG_ENTRY( ll ) \
+ (::boost::unit_test::unit_test_log \
+ << ::boost::unit_test::log::begin( BOOST_TEST_L(__FILE__), __LINE__ ))(ll) \
+/**/
+
+} // namespace unit_test
+
+} // namespace boost
+
+// ************************************************************************** //
+// ************** Unit test log interface helpers ************** //
+// ************************************************************************** //
+
+#define BOOST_TEST_MESSAGE( M ) \
+ BOOST_TEST_LOG_ENTRY( ::boost::unit_test::log_messages ) \
+ << (boost::wrap_stringstream().ref() << M).str() \
+/**/
+
+//____________________________________________________________________________//
+
+#define BOOST_TEST_PASSPOINT() \
+ ::boost::unit_test::unit_test_log.set_checkpoint( \
+ BOOST_TEST_L(__FILE__), \
+ (std::size_t)__LINE__ ) \
+/**/
+
+//____________________________________________________________________________//
+
+#define BOOST_TEST_CHECKPOINT( M ) \
+ ::boost::unit_test::unit_test_log.set_checkpoint( \
+ BOOST_TEST_L(__FILE__), \
+ (std::size_t)__LINE__, \
+ (boost::wrap_stringstream().ref() << M).str() ) \
+/**/
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: unit_test_log.hpp,v $
+// Revision 1.32 2006/01/28 08:57:02 rogeeff
+// VC6.0 workaround removed
+//
+// Revision 1.31 2005/12/14 05:23:21 rogeeff
+// dll support introduced
+// Minor interface simplifications
+// BOOST_TEST_MESSAGE and BOOST_TEST_CHECKPOINT moved into log realm
+// BOOST_TEST_PASSPOINT is introduced
+//
+// Revision 1.30 2005/02/20 08:27:06 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// Revision 1.29 2005/02/02 12:08:14 rogeeff
+// namespace log added for log manipulators
+//
+// Revision 1.28 2005/02/01 06:40:06 rogeeff
+// copyright update
+// old log entries removed
+// minor stilistic changes
+// depricated tools removed
+//
+// Revision 1.27 2005/01/30 03:26:29 rogeeff
+// return an ability for explicit end()
+//
+// Revision 1.26 2005/01/21 07:30:24 rogeeff
+// to log testing time log formatter interfaces changed
+//
+// Revision 1.25 2005/01/18 08:26:12 rogeeff
+// unit_test_log rework:
+// eliminated need for ::instance()
+// eliminated need for << end and ...END macro
+// straitend interface between log and formatters
+// change compiler like formatter name
+// minimized unit_test_log interface and reworked to use explicit calls
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_UNIT_TEST_LOG_HPP_071894GER
+
diff --git a/boost/boost/test/unit_test_log_formatter.hpp b/boost/boost/test/unit_test_log_formatter.hpp
new file mode 100644
index 00000000000..08c5e5dd92c
--- /dev/null
+++ b/boost/boost/test/unit_test_log_formatter.hpp
@@ -0,0 +1,152 @@
+// (C) Copyright Gennadiy Rozental 2003-2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: unit_test_log_formatter.hpp,v $
+//
+// Version : $Revision: 1.14 $
+//
+// Description :
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UNIT_TEST_LOG_FORMATTER_HPP_071894GER
+#define BOOST_TEST_UNIT_TEST_LOG_FORMATTER_HPP_071894GER
+
+// Boost.Test
+#include <boost/test/detail/global_typedef.hpp>
+#include <boost/test/detail/log_level.hpp>
+#include <boost/test/detail/fwd_decl.hpp>
+
+// STL
+#include <iosfwd>
+#include <string> // for std::string
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace boost {
+
+namespace unit_test {
+
+// ************************************************************************** //
+// ************** log_entry_data ************** //
+// ************************************************************************** //
+
+struct BOOST_TEST_DECL log_entry_data {
+ log_entry_data()
+ {
+ m_file_name.reserve( 200 );
+ }
+
+ std::string m_file_name;
+ std::size_t m_line_num;
+ log_level m_level;
+
+ void clear()
+ {
+ m_file_name.erase();
+ m_line_num = 0;
+ m_level = log_nothing;
+ }
+};
+
+// ************************************************************************** //
+// ************** checkpoint_data ************** //
+// ************************************************************************** //
+
+struct BOOST_TEST_DECL log_checkpoint_data
+{
+ const_string m_file_name;
+ std::size_t m_line_num;
+ std::string m_message;
+
+ void clear()
+ {
+ m_file_name.clear();
+ m_line_num = 0;
+ m_message = std::string();
+ }
+};
+
+// ************************************************************************** //
+// ************** unit_test_log_formatter ************** //
+// ************************************************************************** //
+
+class BOOST_TEST_DECL unit_test_log_formatter {
+public:
+ enum log_entry_types { BOOST_UTL_ET_INFO,
+ BOOST_UTL_ET_MESSAGE,
+ BOOST_UTL_ET_WARNING,
+ BOOST_UTL_ET_ERROR,
+ BOOST_UTL_ET_FATAL_ERROR };
+
+ // Destructor
+ virtual ~unit_test_log_formatter() {}
+
+ // Formatter interface
+ virtual void log_start( std::ostream&, counter_t test_cases_amount ) = 0;
+ virtual void log_finish( std::ostream& ) = 0;
+ virtual void log_build_info( std::ostream& ) = 0;
+
+ virtual void test_unit_start( std::ostream&, test_unit const& tu ) = 0;
+ virtual void test_unit_finish( std::ostream&, test_unit const& tu, unsigned long elapsed ) = 0;
+ virtual void test_unit_skipped( std::ostream&, test_unit const& ) = 0;
+
+ virtual void log_exception( std::ostream&, log_checkpoint_data const&, const_string explanation ) = 0;
+
+ virtual void log_entry_start( std::ostream&, log_entry_data const&, log_entry_types let ) = 0;
+ virtual void log_entry_value( std::ostream&, const_string value ) = 0;
+ virtual void log_entry_finish( std::ostream& ) = 0;
+};
+
+} // namespace unit_test
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: unit_test_log_formatter.hpp,v $
+// Revision 1.14 2005/12/14 05:52:16 rogeeff
+// log API simplified
+//
+// Revision 1.13 2005/02/20 08:27:06 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// Revision 1.12 2005/02/01 08:59:28 rogeeff
+// supplied_log_formatters split
+// change formatters interface to simplify result interface
+//
+// Revision 1.11 2005/02/01 06:40:06 rogeeff
+// copyright update
+// old log entries removed
+// minor stilistic changes
+// depricated tools removed
+//
+// Revision 1.10 2005/01/30 03:23:58 rogeeff
+// counter type renamed
+// log interface slightly shortened
+//
+// Revision 1.9 2005/01/21 07:30:24 rogeeff
+// to log testing time log formatter interfaces changed
+//
+// Revision 1.8 2005/01/18 08:26:12 rogeeff
+// unit_test_log rework:
+// eliminated need for ::instance()
+// eliminated need for << end and ...END macro
+// straitend interface between log and formatters
+// change compiler like formatter name
+// minimized unit_test_log interface and reworked to use explicit calls
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_UNIT_TEST_LOG_FORMATTER_HPP_071894GER
+
diff --git a/boost/boost/test/unit_test_monitor.hpp b/boost/boost/test/unit_test_monitor.hpp
new file mode 100644
index 00000000000..585577439e6
--- /dev/null
+++ b/boost/boost/test/unit_test_monitor.hpp
@@ -0,0 +1,81 @@
+// (C) Copyright Gennadiy Rozental 2001-2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: unit_test_monitor.hpp,v $
+//
+// Version : $Revision: 1.2 $
+//
+// Description : defines specific version of execution monitor used to managed
+// run unit of test cases. Translates execution exception into error level
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UNIT_TEST_MONITOR_HPP_020905GER
+#define BOOST_TEST_UNIT_TEST_MONITOR_HPP_020905GER
+
+// Boost.Test
+#include <boost/test/execution_monitor.hpp>
+#include <boost/test/detail/fwd_decl.hpp>
+#include <boost/test/utils/trivial_singleton.hpp>
+#include <boost/test/utils/callback.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace boost {
+
+namespace unit_test {
+
+// ************************************************************************** //
+// ************** unit_test_monitor ************** //
+// ************************************************************************** //
+
+class BOOST_TEST_DECL unit_test_monitor_t : public singleton<unit_test_monitor_t>, public execution_monitor {
+public:
+ enum error_level {
+ test_fail = 1,
+ test_ok = 0,
+ constructor_error = -1,
+ unexpected_exception = -2,
+ os_exception = -3,
+ os_timeout = -4,
+ fatal_error = -5, // includes both system and user
+ destructor_error = -6
+ };
+
+ static bool is_critical_error( error_level e ) { return e <= fatal_error; }
+
+ // monitor method
+ error_level execute_and_translate( test_case const& );
+
+private:
+ BOOST_TEST_SINGLETON_CONS( unit_test_monitor_t );
+};
+
+BOOST_TEST_SINGLETON_INST( unit_test_monitor )
+
+} // namespace unit_test
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: unit_test_monitor.hpp,v $
+// Revision 1.2 2005/12/14 05:55:35 rogeeff
+// dll support introduced
+//
+// Revision 1.1 2005/02/20 08:27:06 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_UNIT_TEST_MONITOR_HPP_020905GER
diff --git a/boost/boost/test/unit_test_suite.hpp b/boost/boost/test/unit_test_suite.hpp
new file mode 100644
index 00000000000..a09469acde2
--- /dev/null
+++ b/boost/boost/test/unit_test_suite.hpp
@@ -0,0 +1,225 @@
+// (C) Copyright Gennadiy Rozental 2001-2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: unit_test_suite.hpp,v $
+//
+// Version : $Revision: 1.36 $
+//
+// Description : defines Unit Test Framework public API
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UNIT_TEST_SUITE_HPP_071894GER
+#define BOOST_TEST_UNIT_TEST_SUITE_HPP_071894GER
+
+// Boost.Test
+#include <boost/test/unit_test_suite_impl.hpp>
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// ************** Non-auto (explicit) test case interface ************** //
+// ************************************************************************** //
+
+#define BOOST_TEST_CASE( function ) \
+boost::unit_test::make_test_case( boost::unit_test::callback0<>(function), BOOST_TEST_STRINGIZE( function ) )
+#define BOOST_CLASS_TEST_CASE( function, tc_instance ) \
+boost::unit_test::make_test_case((function), BOOST_TEST_STRINGIZE( function ), tc_instance )
+
+// ************************************************************************** //
+// ************** BOOST_TEST_SUITE ************** //
+// ************************************************************************** //
+
+#define BOOST_TEST_SUITE( testsuite_name ) \
+( new boost::unit_test::test_suite( testsuite_name ) )
+
+// ************************************************************************** //
+// ************** BOOST_AUTO_TEST_SUITE ************** //
+// ************************************************************************** //
+
+#define BOOST_AUTO_TEST_SUITE( suite_name ) \
+namespace suite_name { \
+BOOST_AUTO_TC_REGISTRAR( suite_name )( BOOST_TEST_SUITE( \
+ BOOST_STRINGIZE( suite_name ) ) ); \
+/**/
+
+// ************************************************************************** //
+// ************** BOOST_FIXTURE_TEST_SUITE ************** //
+// ************************************************************************** //
+
+#define BOOST_FIXTURE_TEST_SUITE( suite_name, F ) \
+BOOST_AUTO_TEST_SUITE( suite_name ) \
+typedef F BOOST_AUTO_TEST_CASE_FIXTURE; \
+/**/
+
+// ************************************************************************** //
+// ************** BOOST_AUTO_TEST_SUITE_END ************** //
+// ************************************************************************** //
+
+#define BOOST_AUTO_TEST_SUITE_END() \
+BOOST_AUTO_TC_REGISTRAR( BOOST_JOIN( end_suite, __LINE__ ) )( 1 ); \
+} \
+/**/
+
+// ************************************************************************** //
+// ************** BOOST_AUTO_TEST_CASE_EXPECTED_FAILURES ************** //
+// ************************************************************************** //
+
+#define BOOST_AUTO_TEST_CASE_EXPECTED_FAILURES( test_name, n ) \
+struct BOOST_AUTO_TC_UNIQUE_ID( test_name ); \
+namespace boost { namespace unit_test { namespace ut_detail { \
+ \
+template<> \
+struct auto_tc_exp_fail<BOOST_AUTO_TC_UNIQUE_ID( test_name ) > { \
+ enum { value = n }; \
+}; \
+ \
+}}} \
+/**/
+
+// ************************************************************************** //
+// ************** BOOST_FIXTURE_TEST_CASE ************** //
+// ************************************************************************** //
+
+#define BOOST_FIXTURE_TEST_CASE( test_name, F ) \
+struct test_name : public F { void test_method(); }; \
+ \
+static void BOOST_AUTO_TC_INVOKER( test_name )() \
+{ \
+ test_name t; \
+ t.test_method(); \
+} \
+ \
+struct BOOST_AUTO_TC_UNIQUE_ID( test_name ) {}; \
+ \
+BOOST_AUTO_TC_REGISTRAR( test_name )( \
+ boost::unit_test::make_test_case( \
+ &BOOST_AUTO_TC_INVOKER( test_name ), #test_name ), \
+ boost::unit_test::ut_detail::auto_tc_exp_fail< \
+ BOOST_AUTO_TC_UNIQUE_ID( test_name )>::value ); \
+ \
+void test_name::test_method() \
+/**/
+
+// ************************************************************************** //
+// ************** BOOST_AUTO_TEST_CASE ************** //
+// ************************************************************************** //
+
+#define BOOST_AUTO_TEST_CASE( test_name ) \
+BOOST_FIXTURE_TEST_CASE( test_name, BOOST_AUTO_TEST_CASE_FIXTURE )
+/**/
+
+// ************************************************************************** //
+// ************** BOOST_AUTO_TEST_CASE_TEMPLATE ************** //
+// ************************************************************************** //
+
+#define BOOST_AUTO_TEST_CASE_TEMPLATE( test_name, type_name, TL ) \
+template<typename type_name> \
+struct test_name : public BOOST_AUTO_TEST_CASE_FIXTURE \
+{ void test_method(); }; \
+ \
+struct BOOST_AUTO_TC_INVOKER( test_name ) { \
+ template<typename TestType> \
+ static void run( boost::type<TestType>* = 0 ) \
+ { \
+ test_name<TestType> t; \
+ t.test_method(); \
+ } \
+}; \
+ \
+BOOST_AUTO_TC_REGISTRAR( test_name )( \
+ boost::unit_test::ut_detail::template_test_case_gen< \
+ BOOST_AUTO_TC_INVOKER( test_name ),TL >( \
+ BOOST_STRINGIZE( test_name ) ) ); \
+ \
+template<typename type_name> \
+void test_name<type_name>::test_method() \
+/**/
+
+// ************************************************************************** //
+// ************** BOOST_GLOBAL_FIXURE ************** //
+// ************************************************************************** //
+
+#define BOOST_GLOBAL_FIXTURE( F ) \
+static boost::unit_test::ut_detail::global_fixture_impl<F> BOOST_JOIN( gf_, F ) ; \
+/**/
+
+// ************************************************************************** //
+// ************** BOOST_AUTO_TEST_CASE_FIXTURE ************** //
+// ************************************************************************** //
+
+namespace boost { namespace unit_test { namespace ut_detail {
+
+struct nil_t {};
+
+} // namespace ut_detail
+} // unit_test
+} // namespace boost
+
+// Intentionally is in global namespace, so that FIXURE_TEST_SUITE could reset it in user code.
+typedef ::boost::unit_test::ut_detail::nil_t BOOST_AUTO_TEST_CASE_FIXTURE;
+
+// ************************************************************************** //
+// ************** Auto registration facility helper macros ************** //
+// ************************************************************************** //
+
+#define BOOST_AUTO_TC_REGISTRAR( test_name ) \
+static boost::unit_test::ut_detail::auto_test_unit_registrar BOOST_JOIN( test_name, _registrar )
+#define BOOST_AUTO_TC_INVOKER( test_name ) BOOST_JOIN( test_name, _invoker )
+#define BOOST_AUTO_TC_UNIQUE_ID( test_name ) BOOST_JOIN( test_name, _id )
+
+// ************************************************************************** //
+// ************** BOOST_TEST_MAIN ************** //
+// ************************************************************************** //
+
+#if defined(BOOST_TEST_MAIN)
+
+#ifdef BOOST_TEST_ALTERNATIVE_INIT_API
+bool init_unit_test() {
+#else
+::boost::unit_test::test_suite*
+init_unit_test_suite( int, char* [] ) {
+#endif
+
+#ifdef BOOST_TEST_MODULE
+ using namespace ::boost::unit_test;
+ assign_op( framework::master_test_suite().p_name.value, BOOST_TEST_STRINGIZE( BOOST_TEST_MODULE ).trim( "\"" ), 0 );
+
+#endif
+
+#ifdef BOOST_TEST_ALTERNATIVE_INIT_API
+ return true;
+}
+#else
+ return 0;
+}
+#endif
+
+#endif
+
+//____________________________________________________________________________//
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: unit_test_suite.hpp,v $
+// Revision 1.36 2006/03/19 12:23:21 rogeeff
+// eliminate warning
+//
+// Revision 1.35 2006/02/06 10:04:55 rogeeff
+// BOOST_TEST_MODULE - master test suite name
+//
+// Revision 1.34 2006/01/28 07:02:57 rogeeff
+// allow multiple global fixtures
+//
+// Revision 1.33 2005/12/14 05:24:55 rogeeff
+// dll support introduced
+// split into 2 files
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_UNIT_TEST_SUITE_HPP_071894GER
+
diff --git a/boost/boost/test/unit_test_suite_impl.hpp b/boost/boost/test/unit_test_suite_impl.hpp
new file mode 100644
index 00000000000..1755f862ec4
--- /dev/null
+++ b/boost/boost/test/unit_test_suite_impl.hpp
@@ -0,0 +1,353 @@
+// (C) Copyright Gennadiy Rozental 2001-2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: unit_test_suite_impl.hpp,v $
+//
+// Version : $Revision: 1.2 $
+//
+// Description : defines test_unit, test_case, test_case_results, test_suite and test_tree_visitor
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UNIT_TEST_SUITE_IMPL_HPP_071894GER
+#define BOOST_TEST_UNIT_TEST_SUITE_IMPL_HPP_071894GER
+
+// Boost.Test
+#include <boost/test/detail/config.hpp>
+#include <boost/test/detail/global_typedef.hpp>
+#include <boost/test/utils/class_properties.hpp>
+#include <boost/test/utils/callback.hpp>
+#include <boost/test/detail/fwd_decl.hpp>
+#include <boost/test/detail/workaround.hpp>
+#include <boost/test/test_observer.hpp>
+#include <boost/test/framework.hpp>
+
+// Boost
+#include <boost/shared_ptr.hpp>
+
+// STL
+#include <string> // for std::string
+#include <list> // for std::list
+#include <vector> // for std::vector
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace boost {
+
+namespace unit_test {
+
+// ************************************************************************** //
+// ************** test_unit ************** //
+// ************************************************************************** //
+
+class BOOST_TEST_DECL test_unit {
+public:
+ enum { type = tut_any };
+
+ // Constructor
+ test_unit( const_string tu_name, test_unit_type t );
+
+ // dependencies management
+ void depends_on( test_unit* tu );
+ bool check_dependencies() const;
+
+ // Public r/o properties
+ typedef BOOST_READONLY_PROPERTY(test_unit_id,(framework_impl)) id_t;
+ typedef BOOST_READONLY_PROPERTY(test_unit_id,(test_suite)) parent_id_t;
+ readonly_property<test_unit_type> p_type; // type for this test unit
+ readonly_property<const_string> p_type_name; // "case"/"suite"
+ id_t p_id; // unique id for this test unit
+ parent_id_t p_parent_id; // parent test suite id
+
+ // Public r/w properties
+ readwrite_property<std::string> p_name; // name for this test unit
+ readwrite_property<unsigned> p_timeout; // timeout for the test unit execution
+ readwrite_property<counter_t> p_expected_failures; // number of expected failured in this test unit
+
+private:
+ // Data members
+ std::list<test_unit_id> m_dependencies;
+};
+
+// ************************************************************************** //
+// ************** test_case_generator ************** //
+// ************************************************************************** //
+
+class BOOST_TEST_DECL test_unit_generator {
+public:
+ virtual test_unit* next() const = 0;
+
+protected:
+ BOOST_TEST_PROTECTED_VIRTUAL ~test_unit_generator() {}
+};
+
+// ************************************************************************** //
+// ************** test_case ************** //
+// ************************************************************************** //
+
+class BOOST_TEST_DECL test_case : public test_unit {
+public:
+ enum { type = tut_case };
+
+ // Constructor
+ test_case( const_string tc_name, callback0<> const& test_func );
+
+ // Access methods
+ callback0<> const& test_func() const { return m_test_func; }
+
+private:
+ friend class framework_impl;
+ ~test_case() {}
+
+ // BOOST_MSVC <= 1200 have problems with callback as property
+ // Data members
+ callback0<> m_test_func;
+};
+
+// ************************************************************************** //
+// ************** test_suite ************** //
+// ************************************************************************** //
+
+class BOOST_TEST_DECL test_suite : public test_unit {
+public:
+ enum { type = tut_suite };
+
+ // Constructor
+ explicit test_suite( const_string ts_name );
+
+ // test case list management
+ void add( test_unit* tu, counter_t expected_failures = 0, unsigned timeout = 0 );
+ void add( test_unit_generator const& gen, unsigned timeout = 0 );
+
+protected:
+ friend BOOST_TEST_DECL void traverse_test_tree( test_suite const&, test_tree_visitor& );
+ friend class framework_impl;
+ virtual ~test_suite() {}
+
+private:
+ // Data members
+ std::vector<test_unit_id> m_members;
+};
+
+// ************************************************************************** //
+// ************** master_test_suite ************** //
+// ************************************************************************** //
+
+class BOOST_TEST_DECL master_test_suite_t : public test_suite {
+public:
+ master_test_suite_t() : test_suite( "Master Test Suite" )
+ , argc( 0 )
+ , argv( 0 )
+ {}
+
+ // Data members
+ int argc;
+ char** argv;
+};
+
+
+// ************************************************************************** //
+// ************** test_tree_visitor ************** //
+// ************************************************************************** //
+
+class BOOST_TEST_DECL test_tree_visitor {
+public:
+ // test tree visitor interface
+ virtual void visit( test_case const& ) {}
+ virtual bool test_suite_start( test_suite const& ) { return true; }
+ virtual void test_suite_finish( test_suite const& ) {}
+
+protected:
+ BOOST_TEST_PROTECTED_VIRTUAL ~test_tree_visitor() {}
+};
+
+// ************************************************************************** //
+// ************** traverse_test_tree ************** //
+// ************************************************************************** //
+
+BOOST_TEST_DECL void traverse_test_tree( test_case const&, test_tree_visitor& );
+BOOST_TEST_DECL void traverse_test_tree( test_suite const&, test_tree_visitor& );
+BOOST_TEST_DECL void traverse_test_tree( test_unit_id id, test_tree_visitor& );
+
+//____________________________________________________________________________//
+
+inline void
+traverse_test_tree( test_unit const& tu, test_tree_visitor& V )
+{
+ if( tu.p_type == tut_case )
+ traverse_test_tree( static_cast<test_case const&>( tu ), V );
+ else
+ traverse_test_tree( static_cast<test_suite const&>( tu ), V );
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// ************** test_case_counter ************** //
+// ************************************************************************** //
+
+struct test_case_counter : test_tree_visitor {
+ test_case_counter() : m_count( 0 ) {}
+
+ void visit( test_case const& ) { m_count++; }
+
+ counter_t m_count;
+};
+
+// ************************************************************************** //
+// ************** test_being_aborted ************** //
+// ************************************************************************** //
+
+struct BOOST_TEST_DECL test_being_aborted {};
+
+// ************************************************************************** //
+// ************** object generators ************** //
+// ************************************************************************** //
+
+namespace ut_detail {
+
+BOOST_TEST_DECL std::string normalize_test_case_name( const_string tu_name );
+
+template<typename UserTestCase>
+struct user_tc_method_invoker {
+ typedef void (UserTestCase::*test_method )();
+
+ user_tc_method_invoker( shared_ptr<UserTestCase> inst, test_method test_method )
+ : m_inst( inst ), m_test_method( test_method ) {}
+
+ void operator()() { ((*m_inst).*m_test_method)(); }
+
+ shared_ptr<UserTestCase> m_inst;
+ test_method m_test_method;
+};
+
+} // namespace ut_detail
+
+//____________________________________________________________________________//
+
+inline test_case*
+make_test_case( callback0<> const& test_func, const_string tc_name )
+{
+ return new test_case( ut_detail::normalize_test_case_name( tc_name ), test_func );
+}
+
+//____________________________________________________________________________//
+
+template<typename UserTestCase>
+inline test_case*
+make_test_case( void (UserTestCase::*test_method )(),
+ const_string tc_name,
+ boost::shared_ptr<UserTestCase> const& user_test_case )
+{
+ return new test_case( ut_detail::normalize_test_case_name( tc_name ),
+ ut_detail::user_tc_method_invoker<UserTestCase>( user_test_case, test_method ) );
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// ************** auto_test_unit_registrar ************** //
+// ************************************************************************** //
+
+namespace ut_detail {
+
+struct BOOST_TEST_DECL auto_test_unit_registrar
+{
+ // Constructor
+ explicit auto_test_unit_registrar( test_case* tc, counter_t exp_fail )
+ {
+ curr_ts_store().back()->add( tc, exp_fail );
+ }
+ explicit auto_test_unit_registrar( test_suite* ts )
+ {
+ curr_ts_store().back()->add( ts );
+
+ curr_ts_store().push_back( ts );
+ }
+ explicit auto_test_unit_registrar( test_unit_generator const& tc_gen )
+ {
+ curr_ts_store().back()->add( tc_gen );
+ }
+ explicit auto_test_unit_registrar( int )
+ {
+ if( curr_ts_store().size() > 1 )
+ curr_ts_store().pop_back();
+ // else report error
+ }
+
+private:
+ static std::list<test_suite*>& curr_ts_store()
+ {
+ static std::list<test_suite*> inst( 1, &framework::master_test_suite() );
+ return inst;
+ }
+};
+
+//____________________________________________________________________________//
+
+template<typename T>
+struct auto_tc_exp_fail {
+ enum { value = 0 };
+};
+
+//____________________________________________________________________________//
+
+} // namespace ut_detail
+
+// ************************************************************************** //
+// ************** global_fixture ************** //
+// ************************************************************************** //
+
+class BOOST_TEST_DECL global_fixture : public test_observer {
+public:
+ // Constructor
+ global_fixture() { framework::register_observer( *this ); }
+};
+
+//____________________________________________________________________________//
+
+namespace ut_detail {
+
+template<typename F>
+struct global_fixture_impl : public global_fixture {
+ // Constructor
+ global_fixture_impl(): m_fixure( 0 ) {}
+
+ // test observer interface
+ virtual void test_start( counter_t ) { m_fixure = new F; }
+ virtual void test_finish() { delete m_fixure; m_fixure = 0; }
+ virtual void test_aborted() { delete m_fixure; m_fixure = 0; }
+
+private:
+ // Data members
+ F* m_fixure;
+};
+
+} // namespace ut_detail
+
+} // unit_test
+
+} // namespace boost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: unit_test_suite_impl.hpp,v $
+// Revision 1.2 2006/01/28 07:09:34 rogeeff
+// tm->test_method
+//
+// Revision 1.1 2005/12/14 05:24:55 rogeeff
+// dll support introduced
+// split into 2 files
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_UNIT_TEST_SUITE_IMPL_HPP_071894GER
+
diff --git a/boost/boost/test/utils/algorithm.hpp b/boost/boost/test/utils/algorithm.hpp
new file mode 100644
index 00000000000..d3e5d1391ff
--- /dev/null
+++ b/boost/boost/test/utils/algorithm.hpp
@@ -0,0 +1,250 @@
+// (C) Copyright Gennadiy Rozental 2004-2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: algorithm.hpp,v $
+//
+// Version : $Revision: 1.5 $
+//
+// Description : addition to STL algorithms
+// ***************************************************************************
+
+#ifndef BOOST_ALGORITHM_HPP_062304GER
+#define BOOST_ALGORITHM_HPP_062304GER
+
+#include <utility>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace boost {
+
+namespace unit_test {
+
+/// @brief this algorithm search through two collections for first mismatch position that get returned as a pair
+/// of iterators, first pointing to the mismatch position in first collection, second iterator in second one
+
+/// @param first1 - first collection begin iterator
+/// @param last1 - first collection end iterator
+/// @param first2 - second collection begin iterator
+/// @param last2 - second collection end iterator
+template <class InputIter1, class InputIter2>
+inline std::pair<InputIter1, InputIter2>
+mismatch( InputIter1 first1, InputIter1 last1,
+ InputIter2 first2, InputIter2 last2 )
+{
+ while( first1 != last1 && first2 != last2 && *first1 == *first2 ) {
+ ++first1;
+ ++first2;
+ }
+
+ return std::pair<InputIter1, InputIter2>(first1, first2);
+}
+
+//____________________________________________________________________________//
+
+/// @brief this algorithm search through two collections for first mismatch position that get returned as a pair
+/// of iterators, first pointing to the mismatch position in first collection, second iterator in second one. This algorithms
+/// uses supplied predicate for collection elements comparison
+
+/// @param first1 - first collection begin iterator
+/// @param last1 - first collection end iterator
+/// @param first2 - second collection begin iterator
+/// @param last2 - second collection end iterator
+/// @param pred - predicate to be used for search
+template <class InputIter1, class InputIter2, class Predicate>
+inline std::pair<InputIter1, InputIter2>
+mismatch( InputIter1 first1, InputIter1 last1,
+ InputIter2 first2, InputIter2 last2,
+ Predicate pred )
+{
+ while( first1 != last1 && first2 != last2 && pred( *first1, *first2 ) ) {
+ ++first1;
+ ++first2;
+ }
+
+ return std::pair<InputIter1, InputIter2>(first1, first2);
+}
+
+//____________________________________________________________________________//
+
+/// @brief this algorithm search through first collection for first element that does not belong a second one
+
+/// @param first1 - first collection begin iterator
+/// @param last1 - first collection end iterator
+/// @param first2 - second collection begin iterator
+/// @param last2 - second collection end iterator
+template<class ForwardIterator1, class ForwardIterator2>
+inline ForwardIterator1
+find_first_not_of( ForwardIterator1 first1, ForwardIterator1 last1,
+ ForwardIterator2 first2, ForwardIterator2 last2 )
+{
+ while( first1 != last1 ) {
+ if( std::find( first2, last2, *first1 ) == last2 )
+ break;
+ ++first1;
+ }
+
+ return first1;
+}
+
+//____________________________________________________________________________//
+
+/// @brief this algorithm search through first collection for first element that does not satisfy binary
+/// predicate in conjunction will any element in second collection
+
+/// @param first1 - first collection begin iterator
+/// @param last1 - first collection end iterator
+/// @param first2 - second collection begin iterator
+/// @param last2 - second collection end iterator
+/// @param pred - predicate to be used for search
+template<class ForwardIterator1, class ForwardIterator2, class Predicate>
+inline ForwardIterator1
+find_first_not_of( ForwardIterator1 first1, ForwardIterator1 last1,
+ ForwardIterator2 first2, ForwardIterator2 last2,
+ Predicate pred )
+{
+ while( first1 != last1 ) {
+ if( std::find_if( first2, last2, std::bind1st( pred, *first1 ) ) == last2 )
+ break;
+ ++first1;
+ }
+
+ return first1;
+}
+
+//____________________________________________________________________________//
+
+/// @brief this algorithm search through first collection for last element that belongs to a second one
+
+/// @param first1 - first collection begin iterator
+/// @param last1 - first collection end iterator
+/// @param first2 - second collection begin iterator
+/// @param last2 - second collection end iterator
+template<class BidirectionalIterator1, class ForwardIterator2>
+inline BidirectionalIterator1
+find_last_of( BidirectionalIterator1 first1, BidirectionalIterator1 last1,
+ ForwardIterator2 first2, ForwardIterator2 last2 )
+{
+ if( first1 == last1 || first2 == last2 )
+ return last1;
+
+ BidirectionalIterator1 it1 = last1;
+ while( --it1 != first1 && std::find( first2, last2, *it1 ) == last2 ) {}
+
+ return it1 == first1 && std::find( first2, last2, *it1 ) == last2 ? last1 : it1;
+}
+
+//____________________________________________________________________________//
+
+/// @brief this algorithm search through first collection for last element that satisfy binary
+/// predicate in conjunction will at least one element in second collection
+
+/// @param first1 - first collection begin iterator
+/// @param last1 - first collection end iterator
+/// @param first2 - second collection begin iterator
+/// @param last2 - second collection end iterator
+/// @param pred - predicate to be used for search
+template<class BidirectionalIterator1, class ForwardIterator2, class Predicate>
+inline BidirectionalIterator1
+find_last_of( BidirectionalIterator1 first1, BidirectionalIterator1 last1,
+ ForwardIterator2 first2, ForwardIterator2 last2,
+ Predicate pred )
+{
+ if( first1 == last1 || first2 == last2 )
+ return last1;
+
+ BidirectionalIterator1 it1 = last1;
+ while( --it1 != first1 && std::find_if( first2, last2, std::bind1st( pred, *it1 ) ) == last2 ) {}
+
+ return it1 == first1 && std::find_if( first2, last2, std::bind1st( pred, *it1 ) ) == last2 ? last1 : it1;
+}
+
+//____________________________________________________________________________//
+
+/// @brief this algorithm search through first collection for last element that does not belong to a second one
+
+/// @param first1 - first collection begin iterator
+/// @param last1 - first collection end iterator
+/// @param first2 - second collection begin iterator
+/// @param last2 - second collection end iterator
+template<class BidirectionalIterator1, class ForwardIterator2>
+inline BidirectionalIterator1
+find_last_not_of( BidirectionalIterator1 first1, BidirectionalIterator1 last1,
+ ForwardIterator2 first2, ForwardIterator2 last2 )
+{
+ if( first1 == last1 || first2 == last2 )
+ return last1;
+
+ BidirectionalIterator1 it1 = last1;
+ while( --it1 != first1 && std::find( first2, last2, *it1 ) != last2 ) {}
+
+ return it1 == first1 && std::find( first2, last2, *it1 ) != last2 ? last1 : it1;
+}
+
+//____________________________________________________________________________//
+
+/// @brief this algorithm search through first collection for last element that does not satisfy binary
+/// predicate in conjunction will any element in second collection
+
+/// @param first1 - first collection begin iterator
+/// @param last1 - first collection end iterator
+/// @param first2 - second collection begin iterator
+/// @param last2 - second collection end iterator
+/// @param pred - predicate to be used for search
+template<class BidirectionalIterator1, class ForwardIterator2, class Predicate>
+inline BidirectionalIterator1
+find_last_not_of( BidirectionalIterator1 first1, BidirectionalIterator1 last1,
+ ForwardIterator2 first2, ForwardIterator2 last2,
+ Predicate pred )
+{
+ if( first1 == last1 || first2 == last2 )
+ return last1;
+
+ BidirectionalIterator1 it1 = last1;
+ while( --it1 != first1 && std::find_if( first2, last2, std::bind1st( pred, *it1 ) ) != last2 ) {}
+
+ return it1 == first1 && std::find_if( first2, last2, std::bind1st( pred, *it1 ) ) == last2 ? last1 : it1;
+}
+
+//____________________________________________________________________________//
+
+} // namespace unit_test
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: algorithm.hpp,v $
+// Revision 1.5 2005/04/12 06:50:06 rogeeff
+// suppress warnings
+//
+// Revision 1.4 2005/02/20 08:27:08 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// Revision 1.3 2005/02/01 08:59:39 rogeeff
+// supplied_log_formatters split
+// change formatters interface to simplify result interface
+//
+// Revision 1.2 2005/02/01 06:40:07 rogeeff
+// copyright update
+// old log entries removed
+// minor stilistic changes
+// depricated tools removed
+//
+// Revision 1.1 2005/01/22 18:21:39 rogeeff
+// moved sharable staff into utils
+//
+// ***************************************************************************
+
+#endif // BOOST_ALGORITHM_HPP_062304GER
+
diff --git a/boost/boost/test/utils/assign_op.hpp b/boost/boost/test/utils/assign_op.hpp
new file mode 100644
index 00000000000..4002aaedb7e
--- /dev/null
+++ b/boost/boost/test/utils/assign_op.hpp
@@ -0,0 +1,50 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: assign_op.hpp,v $
+//
+// Version : $Revision: 1.1 $
+//
+// Description : overloadable assignment
+// ***************************************************************************
+
+#ifndef BOOST_TEST_ASSIGN_OP_033005GER
+#define BOOST_TEST_ASSIGN_OP_033005GER
+
+namespace boost {
+
+namespace unit_test {
+
+// ************************************************************************** //
+// ************** generic assign operator ************** //
+// ************************************************************************** //
+
+// generic
+template<typename T,typename S>
+inline void
+assign_op( T& t, S const& s, long )
+{
+ t = s;
+}
+
+//____________________________________________________________________________//
+
+} // namespace unit_test
+
+} // namespace boost
+
+// ***************************************************************************
+// Revision History:
+//
+// $Log: assign_op.hpp,v $
+// Revision 1.1 2005/04/12 06:48:12 rogeeff
+// Runtime.Param library initial commit
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_ASSIGN_OP_033005GER
+
diff --git a/boost/boost/test/utils/basic_cstring/basic_cstring.hpp b/boost/boost/test/utils/basic_cstring/basic_cstring.hpp
new file mode 100644
index 00000000000..bfe918bcf7a
--- /dev/null
+++ b/boost/boost/test/utils/basic_cstring/basic_cstring.hpp
@@ -0,0 +1,777 @@
+// (C) Copyright Gennadiy Rozental 2004-2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: basic_cstring.hpp,v $
+//
+// Version : $Revision: 1.10 $
+//
+// Description : class basic_cstring wraps C string and provide std_string like
+// interface
+// ***************************************************************************
+
+#ifndef BOOST_TEST_BASIC_CSTRING_HPP_071894GER
+#define BOOST_TEST_BASIC_CSTRING_HPP_071894GER
+
+// Boost.Test
+#include <boost/test/utils/basic_cstring/basic_cstring_fwd.hpp>
+#include <boost/test/utils/basic_cstring/bcs_char_traits.hpp>
+
+// STL
+#include <string>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace boost {
+
+namespace unit_test {
+
+// ************************************************************************** //
+// ************** basic_cstring ************** //
+// ************************************************************************** //
+
+template<typename CharT>
+class basic_cstring {
+ typedef basic_cstring<CharT> self_type;
+public:
+ // Subtypes
+ typedef ut_detail::bcs_char_traits<CharT> traits_type;
+ typedef typename ut_detail::bcs_char_traits<CharT>::std_string std_string;
+
+ typedef CharT value_type;
+ typedef value_type* pointer;
+ typedef value_type const* const_pointer;
+ typedef value_type& reference;
+ typedef const value_type& const_reference;
+ typedef std::size_t size_type;
+ typedef std::ptrdiff_t difference_type;
+
+ typedef value_type const* const_iterator;
+ typedef value_type* iterator;
+
+ // !! should also present reverse_iterator, const_reverse_iterator
+
+#if !BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600))
+ enum npos_type { npos = (size_type)-1 };
+#else
+ // IBM/VisualAge version 6 is not able to handle enums larger than 4 bytes.
+ // But size_type is 8 bytes in 64bit mode.
+ static const size_type npos = -1 ;
+#endif
+
+ static pointer null_str();
+
+ // Constructors; default copy constructor is generated by compiler
+ basic_cstring();
+ basic_cstring( std_string const& s );
+ basic_cstring( pointer s );
+ basic_cstring( pointer s, size_type arg_size );
+ basic_cstring( pointer first, pointer last );
+
+ // data access methods
+ value_type operator[]( size_type index ) const;
+ value_type at( size_type index ) const;
+
+ // size operators
+ size_type size() const;
+ bool is_empty() const;
+ void clear();
+ void resize( size_type new_len );
+
+ // !! only for STL container conformance use is_empty instead
+ bool empty() const;
+
+ // Trimming
+ self_type& trim_right( size_type trim_size );
+ self_type& trim_left( size_type trim_size );
+ self_type& trim_right( iterator it );
+ self_type& trim_left( iterator it );
+#ifndef __IBMCPP__
+ self_type& trim_left( self_type exclusions = self_type() ) ;
+ self_type& trim_right( self_type exclusions = self_type() ) ;
+ self_type& trim( self_type exclusions = self_type() ) ;
+#else
+ // VisualAge version 6 has in this case a problem with the default arguments.
+ self_type& trim_left( self_type exclusions ) ;
+ self_type& trim_right( self_type exclusions ) ;
+ self_type& trim( self_type exclusions ) ;
+ self_type& trim_left() { trim_left( self_type() ) ; }
+ self_type& trim_right() { trim_right( self_type() ) ; }
+ self_type& trim() { trim( self_type() ) ; }
+#endif
+
+ // Assignment operators
+ basic_cstring& operator=( self_type const& s );
+ basic_cstring& operator=( std_string const& s );
+ basic_cstring& operator=( pointer s );
+
+ template<typename CharT2>
+ basic_cstring& assign( basic_cstring<CharT2> const& s ) { *this = basic_cstring<CharT>( s.begin(), s.end() ); return *this; }
+ basic_cstring& assign( self_type const& s, size_type pos, size_type len );
+ basic_cstring& assign( std_string const& s );
+ basic_cstring& assign( std_string const& s, size_type pos, size_type len );
+ basic_cstring& assign( pointer s );
+ basic_cstring& assign( pointer s, size_type len );
+ basic_cstring& assign( pointer f, pointer l );
+
+ // swapping
+ void swap( self_type& s );
+
+ // Iterators
+ iterator begin();
+ const_iterator begin() const;
+ iterator end();
+ const_iterator end() const;
+
+ // !! should have rbegin, rend
+
+ // substring search operation
+ size_type find( basic_cstring ) const;
+ size_type rfind( basic_cstring ) const;
+ self_type substr( size_type beg_index, size_type end_index = npos ) const;
+
+private:
+ static self_type default_trim_ex();
+
+ // Data members
+ iterator m_begin;
+ iterator m_end;
+};
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline typename basic_cstring<CharT>::pointer
+basic_cstring<CharT>::null_str()
+{
+ static CharT null = 0;
+ return &null;
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline
+basic_cstring<CharT>::basic_cstring()
+: m_begin( null_str() )
+, m_end( m_begin )
+{
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline
+basic_cstring<CharT>::basic_cstring( std_string const& s )
+: m_begin( s.c_str() )
+, m_end( m_begin + s.size() )
+{
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline
+basic_cstring<CharT>::basic_cstring( pointer s )
+: m_begin( s ? s : null_str() )
+, m_end ( m_begin + (s ? traits_type::length( s ) : 0 ) )
+{
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline
+basic_cstring<CharT>::basic_cstring( pointer s, size_type arg_size )
+: m_begin( s ), m_end( m_begin + arg_size )
+{
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline
+basic_cstring<CharT>::basic_cstring( pointer first, pointer last )
+: m_begin( first )
+, m_end( last )
+{
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline typename basic_cstring<CharT>::value_type
+basic_cstring<CharT>::operator[]( size_type index ) const
+{
+ return m_begin[index];
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline typename basic_cstring<CharT>::value_type
+basic_cstring<CharT>::at( size_type index ) const
+{
+ if( m_begin + index >= m_end )
+ return (value_type)0;
+
+ return m_begin[index];
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline typename basic_cstring<CharT>::size_type
+basic_cstring<CharT>::size() const
+{
+ return m_end - m_begin;
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline bool
+basic_cstring<CharT>::is_empty() const
+{
+ return m_end == m_begin;
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline bool
+basic_cstring<CharT>::empty() const
+{
+ return is_empty();
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline void
+basic_cstring<CharT>::clear()
+{
+ m_begin = m_end;
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline void
+basic_cstring<CharT>::resize( size_type new_len )
+{
+ if( m_begin + new_len < m_end )
+ m_end = m_begin + new_len;
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline basic_cstring<CharT>&
+basic_cstring<CharT>::trim_left( size_type trim_size )
+{
+ m_begin += trim_size;
+ if( m_end <= m_begin )
+ clear();
+
+ return *this;
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline basic_cstring<CharT>&
+basic_cstring<CharT>::trim_left( iterator it )
+{
+ m_begin = it;
+ if( m_end <= m_begin )
+ clear();
+
+ return *this;
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline basic_cstring<CharT>&
+basic_cstring<CharT>::trim_left( basic_cstring exclusions )
+{
+ if( exclusions.is_empty() )
+ exclusions = default_trim_ex();
+
+ iterator it;
+ for( it = begin(); it != end(); ++it ) {
+ if( traits_type::find( exclusions.begin(), exclusions.size(), *it ) == (pointer)0 )
+ break;
+ }
+
+ return trim_left( it );
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline basic_cstring<CharT>&
+basic_cstring<CharT>::trim_right( size_type trim_size )
+{
+ m_end -= trim_size;
+ if( m_end <= m_begin )
+ clear();
+
+ return *this;
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline basic_cstring<CharT>&
+basic_cstring<CharT>::trim_right( iterator it )
+{
+ m_end = it;
+ if( m_end <= m_begin )
+ clear();
+
+ return *this;
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline basic_cstring<CharT>&
+basic_cstring<CharT>::trim_right( basic_cstring exclusions )
+{
+ if( exclusions.is_empty() )
+ exclusions = default_trim_ex();
+
+ iterator it;
+
+ for( it = end()-1; it != begin()-1; --it ) {
+ if( self_type::traits_type::find( exclusions.begin(), exclusions.size(), *it ) == (pointer)0 )
+ break;
+ }
+
+ return trim_right( it+1 );
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline basic_cstring<CharT>&
+basic_cstring<CharT>::trim( basic_cstring exclusions )
+{
+ trim_left( exclusions );
+ trim_right( exclusions );
+
+ return *this;
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline basic_cstring<CharT>&
+basic_cstring<CharT>::operator=( basic_cstring<CharT> const& s )
+{
+ m_begin = s.m_begin;
+ m_end = s.m_end;
+
+ return *this;
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline basic_cstring<CharT>&
+basic_cstring<CharT>::operator=( std_string const& s )
+{
+ return *this = self_type( s );
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline basic_cstring<CharT>&
+basic_cstring<CharT>::operator=( pointer s )
+{
+ return *this = self_type( s );
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline basic_cstring<CharT>&
+basic_cstring<CharT>::assign( basic_cstring<CharT> const& s, size_type pos, size_type len )
+{
+ return *this = self_type( s.m_begin + pos, len );
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline basic_cstring<CharT>&
+basic_cstring<CharT>::assign( std_string const& s )
+{
+ return *this = self_type( s );
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline basic_cstring<CharT>&
+basic_cstring<CharT>::assign( std_string const& s, size_type pos, size_type len )
+{
+ return *this = self_type( s.c_str() + pos, len );
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline basic_cstring<CharT>&
+basic_cstring<CharT>::assign( pointer s )
+{
+ return *this = self_type( s );
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline basic_cstring<CharT>&
+basic_cstring<CharT>::assign( pointer s, size_type len )
+{
+ return *this = self_type( s, len );
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline basic_cstring<CharT>&
+basic_cstring<CharT>::assign( pointer f, pointer l )
+{
+ return *this = self_type( f, l );
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline void
+basic_cstring<CharT>::swap( basic_cstring<CharT>& s )
+{
+ // do not want to include alogrithm
+ pointer tmp1 = m_begin;
+ pointer tmp2 = m_end;
+
+ m_begin = s.m_begin;
+ m_end = s.m_end;
+
+ s.m_begin = tmp1;
+ s.m_end = tmp2;
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline typename basic_cstring<CharT>::iterator
+basic_cstring<CharT>::begin()
+{
+ return m_begin;
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline typename basic_cstring<CharT>::const_iterator
+basic_cstring<CharT>::begin() const
+{
+ return m_begin;
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline typename basic_cstring<CharT>::iterator
+basic_cstring<CharT>::end()
+{
+ return m_end;
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline typename basic_cstring<CharT>::const_iterator
+basic_cstring<CharT>::end() const
+{
+ return m_end;
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline typename basic_cstring<CharT>::size_type
+basic_cstring<CharT>::find( basic_cstring<CharT> substr ) const
+{
+ if( substr.is_empty() || substr.size() > size() )
+ return (size_type)npos;
+
+ const_iterator it = begin();
+ const_iterator last = end() - substr.size() + 1;
+
+ while( it != last ) {
+ if( traits_type::compare( it, substr.begin(), substr.size() ) == 0 )
+ break;
+
+ ++it;
+ }
+
+ return it == last ? (size_type)npos : it - begin();
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline typename basic_cstring<CharT>::size_type
+basic_cstring<CharT>::rfind( basic_cstring<CharT> substr ) const
+{
+ if( substr.is_empty() || substr.size() > size() )
+ return (size_type)npos;
+
+ const_iterator it = end() - substr.size();
+ const_iterator last = begin()-1;
+
+ while( it != last ) {
+ if( traits_type::compare( it, substr.begin(), substr.size() ) == 0 )
+ break;
+
+ --it;
+ }
+
+ return it == last ? npos : it - begin();
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline basic_cstring<CharT>
+basic_cstring<CharT>::substr( size_type beg_index, size_type end_index ) const
+{
+ return beg_index > size()
+ ? self_type()
+ : end_index > size()
+ ? self_type( m_begin + beg_index, m_end )
+ : self_type( m_begin + beg_index, m_begin + end_index );
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline basic_cstring<CharT>
+basic_cstring<CharT>::default_trim_ex()
+{
+ static CharT ws[3] = { CharT(' '), CharT('\t'), CharT('\n') }; // !! wide case
+
+ return self_type( ws, 3 );
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// ************** comparison operators ************** //
+// ************************************************************************** //
+
+template<typename CharT1,typename CharT2>
+inline bool
+operator==( basic_cstring<CharT1> const& s1, basic_cstring<CharT2> const& s2 )
+{
+ typedef typename basic_cstring<CharT1>::traits_type traits_type;
+ return s1.size() == s2.size() &&
+ traits_type::compare( s1.begin(), s2.begin(), s1.size() ) == 0;
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT1,typename CharT2>
+inline bool
+operator==( basic_cstring<CharT1> const& s1, CharT2* s2 )
+{
+#if !defined(__DMC__)
+ return s1 == basic_cstring<CharT2>( s2 );
+#else
+ return s1 == basic_cstring<CharT2 const>( s2 );
+#endif
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline bool
+operator==( basic_cstring<CharT> const& s1, typename basic_cstring<CharT>::std_string const& s2 )
+{
+ return s1 == basic_cstring<CharT>( s2 );
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT1,typename CharT2>
+inline bool
+operator==( CharT1* s2, basic_cstring<CharT2> const& s1 )
+{
+ return s1 == s2;
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline bool
+operator==( typename basic_cstring<CharT>::std_string const& s2, basic_cstring<CharT> const& s1 )
+{
+ return s1 == s2;
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline bool
+operator!=( basic_cstring<CharT> const& s1, CharT* s2 )
+{
+ return !(s1 == s2);
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline bool
+operator!=( CharT* s2, basic_cstring<CharT> const& s1 )
+{
+ return !(s1 == s2);
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline bool
+operator!=( basic_cstring<CharT> const& s1, basic_cstring<CharT> const& s2 )
+{
+ return !(s1 == s2);
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline bool
+operator!=( basic_cstring<CharT> const& s1, typename basic_cstring<CharT>::std_string const& s2 )
+{
+ return !(s1 == s2);
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline bool
+operator!=( typename basic_cstring<CharT>::std_string const& s2, basic_cstring<CharT> const& s1 )
+{
+ return !(s1 == s2);
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// ************** first_char ************** //
+// ************************************************************************** //
+
+template<typename CharT>
+inline typename basic_cstring<CharT>::value_type
+first_char( basic_cstring<CharT> source )
+{
+ typedef typename basic_cstring<CharT>::value_type string_value_type;
+
+ return source.is_empty() ? (string_value_type)0 : *source.begin();
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// ************** last_char ************** //
+// ************************************************************************** //
+
+template<typename CharT>
+inline typename basic_cstring<CharT>::value_type
+last_char( basic_cstring<CharT> source )
+{
+ typedef typename basic_cstring<CharT>::value_type string_value_type;
+
+ return source.is_empty() ? (string_value_type)0 : *(source.end()-1);
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// ************** assign_op ************** //
+// ************************************************************************** //
+
+template<typename CharT1, typename CharT2>
+inline void
+#if BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x530) )
+assign_op( std::basic_string<CharT1>& target, basic_cstring<CharT2> const& src, int )
+#else
+assign_op( std::basic_string<CharT1>& target, basic_cstring<CharT2> src, int )
+#endif
+{
+ target.assign( src.begin(), src.size() );
+}
+
+//____________________________________________________________________________//
+
+} // namespace unit_test
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: basic_cstring.hpp,v $
+// Revision 1.10 2005/12/14 05:01:13 rogeeff
+// *** empty log message ***
+//
+// Revision 1.9 2005/07/13 21:49:46 danieljames
+// Boost.Test workarounds for Digital Mars bugs.
+//
+// Revision 1.8 2005/04/12 06:49:05 rogeeff
+// assign_to -> assign_op
+//
+// Revision 1.7 2005/03/23 21:02:37 rogeeff
+// Sunpro CC 5.3 fixes
+//
+// Revision 1.6 2005/03/22 07:02:57 rogeeff
+// assign_to made free function
+//
+// Revision 1.5 2005/03/22 07:00:56 rogeeff
+// assign_to made free function
+//
+// Revision 1.4 2005/02/20 08:27:08 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// Revision 1.3 2005/02/01 06:40:08 rogeeff
+// copyright update
+// old log entries removed
+// minor stilistic changes
+// depricated tools removed
+//
+// Revision 1.2 2005/01/22 19:22:13 rogeeff
+// implementation moved into headers section to eliminate dependency of included/minimal component on src directory
+//
+// Revision 1.1 2005/01/22 18:21:40 rogeeff
+// moved sharable staff into utils
+//
+// Revision 1.12 2005/01/21 07:33:51 rogeeff
+// small aCC fix
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_BASIC_CSTRING_HPP_071894GER
diff --git a/boost/boost/test/utils/basic_cstring/basic_cstring_fwd.hpp b/boost/boost/test/utils/basic_cstring/basic_cstring_fwd.hpp
new file mode 100644
index 00000000000..16e8575a408
--- /dev/null
+++ b/boost/boost/test/utils/basic_cstring/basic_cstring_fwd.hpp
@@ -0,0 +1,61 @@
+// (C) Copyright Gennadiy Rozental 2004-2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: basic_cstring_fwd.hpp,v $
+//
+// Version : $Revision: 1.4 $
+//
+// Description : basic_cstring class wrap C string and provide std_string like
+// interface
+// ***************************************************************************
+
+#ifndef BOOST_TEST_BASIC_CSTRING_FWD_HPP_071894GER
+#define BOOST_TEST_BASIC_CSTRING_FWD_HPP_071894GER
+
+#include <boost/detail/workaround.hpp>
+
+namespace boost {
+
+namespace unit_test {
+
+template<typename CharT> class basic_cstring;
+typedef basic_cstring<char const> const_string;
+#if BOOST_WORKAROUND(__DECCXX_VER, BOOST_TESTED_AT(60590041))
+typedef const_string literal_string;
+#else
+typedef const_string const literal_string;
+#endif
+
+typedef char const* const c_literal_string;
+
+} // namespace unit_test
+
+} // namespace boost
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: basic_cstring_fwd.hpp,v $
+// Revision 1.4 2005/04/12 06:49:05 rogeeff
+// assign_to -> assign_op
+//
+// Revision 1.3 2005/02/20 08:27:09 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// Revision 1.2 2005/02/01 06:40:08 rogeeff
+// copyright update
+// old log entries removed
+// minor stilistic changes
+// depricated tools removed
+//
+// Revision 1.1 2005/01/22 18:21:40 rogeeff
+// moved sharable staff into utils
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_BASIC_CSTRING_FWD_HPP_071894GER
+
diff --git a/boost/boost/test/utils/basic_cstring/bcs_char_traits.hpp b/boost/boost/test/utils/basic_cstring/bcs_char_traits.hpp
new file mode 100644
index 00000000000..1d50420d00f
--- /dev/null
+++ b/boost/boost/test/utils/basic_cstring/bcs_char_traits.hpp
@@ -0,0 +1,168 @@
+// (C) Copyright Gennadiy Rozental 2004-2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: bcs_char_traits.hpp,v $
+//
+// Version : $Revision: 1.3 $
+//
+// Description : generic char traits class; wraps std::char_traits
+// ***************************************************************************
+
+#ifndef BOOST_TEST_BCS_CHAR_TRAITS_HPP_071894GER
+#define BOOST_TEST_BCS_CHAR_TRAITS_HPP_071894GER
+
+// Boost
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/test/detail/config.hpp>
+#include <boost/type_traits/add_const.hpp>
+
+// STL
+#include <string> // std::char_traits
+#include <cstddef> // std::size_t
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace boost {
+
+namespace unit_test {
+
+namespace ut_detail {
+
+template<typename CharT> struct bcs_base_char { typedef CharT type; };
+
+template<> struct bcs_base_char<char const> { typedef char type; };
+template<> struct bcs_base_char<unsigned char> { typedef char type; };
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))
+template<> struct bcs_base_char<unsigned char const> { typedef char type; };
+#endif
+
+template<> struct bcs_base_char<wchar_t const> { typedef wchar_t type; };
+
+// ************************************************************************** //
+// ************** bcs_char_traits ************** //
+// ************************************************************************** //
+
+template<typename CharT>
+struct bcs_char_traits_impl
+{
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+ typedef CharT const const_char;
+#else
+ typedef typename boost::add_const<CharT>::type const_char;
+#endif
+ static bool eq( CharT c1, CharT c2 )
+ {
+ return c1 == c2;
+ }
+ static bool lt( CharT c1, CharT c2 )
+ {
+ return c1 < c2;
+ }
+
+ static int compare( const_char* cstr1, const_char* cstr2, std::size_t n )
+ {
+ while( n > 0 ) {
+ if( !eq( *cstr1, *cstr2 ) )
+ return lt( *cstr1, *cstr2 ) ? -1 : 1;
+ ++cstr1;
+ ++cstr2;
+ --n;
+ }
+
+ return 0;
+ }
+
+ static std::size_t length( const_char* cstr )
+ {
+ const_char null_char = CharT();
+
+ const_char* ptr = cstr;
+ while( !eq( *ptr, null_char ) )
+ ++ptr;
+
+ return ptr - cstr;
+ }
+
+ static const_char* find( const_char* s, std::size_t n, CharT c )
+ {
+ while( n > 0 ) {
+ if( eq( *s, c ) )
+ return s;
+
+ ++s;
+ --n;
+ }
+ return 0;
+ }
+};
+
+#ifdef BOOST_CLASSIC_IOSTREAMS
+template<typename CharT>
+struct char_traits_with_find : std::string_char_traits<CharT> {
+ static CharT const* find( CharT const* s, std::size_t n, CharT c )
+ {
+ while( n > 0 ) {
+ if( eq( *s, c ) )
+ return s;
+
+ ++s;
+ --n;
+ }
+ return 0;
+ }
+};
+
+template<> struct bcs_char_traits_impl<char> : char_traits_with_find<char> {};
+template<> struct bcs_char_traits_impl<wchar_t> : char_traits_with_find<wchar_t> {};
+#else
+template<> struct bcs_char_traits_impl<char> : std::char_traits<char> {};
+template<> struct bcs_char_traits_impl<wchar_t> : std::char_traits<wchar_t> {};
+#endif
+
+template<typename CharT>
+class bcs_char_traits : public bcs_char_traits_impl<CharT> {
+ typedef typename ut_detail::bcs_base_char<CharT>::type the_base_char;
+public:
+#ifdef BOOST_CLASSIC_IOSTREAMS
+ typedef std::basic_string<the_base_char, std::string_char_traits<the_base_char> > std_string;
+#else
+ typedef std::basic_string<the_base_char, std::char_traits<the_base_char> > std_string;
+#endif
+};
+
+} // namespace ut_detail
+
+} // namespace unit_test
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: bcs_char_traits.hpp,v $
+// Revision 1.3 2005/02/20 08:27:09 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// Revision 1.2 2005/02/01 06:40:08 rogeeff
+// copyright update
+// old log entries removed
+// minor stilistic changes
+// depricated tools removed
+//
+// Revision 1.1 2005/01/22 18:21:40 rogeeff
+// moved sharable staff into utils
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_BCS_CHAR_TRAITS_HPP_071894GER
diff --git a/boost/boost/test/utils/basic_cstring/compare.hpp b/boost/boost/test/utils/basic_cstring/compare.hpp
new file mode 100644
index 00000000000..05ff387ee7b
--- /dev/null
+++ b/boost/boost/test/utils/basic_cstring/compare.hpp
@@ -0,0 +1,139 @@
+// (C) Copyright Gennadiy Rozental 2004-2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: compare.hpp,v $
+//
+// Version : $Revision: 1.5 $
+//
+// Description : class basic_cstring comparisons implementation
+// ***************************************************************************
+
+#ifndef BOOST_TEST_BASIC_CSTRING_COMPARE_HPP_071894GER
+#define BOOST_TEST_BASIC_CSTRING_COMPARE_HPP_071894GER
+
+// Boost.Test
+#include <boost/test/utils/basic_cstring/basic_cstring.hpp>
+
+// STL
+#include <functional>
+#include <cctype>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+# if defined(BOOST_NO_STDC_NAMESPACE) && !BOOST_WORKAROUND(__BORLANDC__, <= 0x570) && !BOOST_WORKAROUND(__GNUC__, < 3)
+namespace std { using ::toupper; }
+# endif
+
+namespace boost {
+
+namespace unit_test {
+
+// ************************************************************************** //
+// ************** case_ins_compare ************** //
+// ************************************************************************** //
+
+namespace ut_detail {
+
+template<class CharT>
+struct case_ins
+{
+ static bool eq( CharT c1, CharT c2 ) { return (std::toupper)( c1 ) == (std::toupper)( c2 ); }
+ static bool lt( CharT c1, CharT c2 ) { return (std::toupper)( c1 ) < (std::toupper)( c2 ); }
+
+ static int compare( CharT const* s1, CharT const* s2, std::size_t n )
+ {
+ for( std::size_t i = 0; i < n; ++i ) {
+ if( !eq( s1[i], s2[i] ) )
+ return lt( s1[i], s2[i] ) ? -1 : 1;
+ }
+ return 0;
+ }
+};
+
+} // namespace ut_detail
+
+// ************************************************************************** //
+// ************** case_ins_eq ************** //
+// ************************************************************************** //
+
+template<class CharT>
+inline bool
+case_ins_eq( basic_cstring<CharT> x, basic_cstring<CharT> y )
+{
+ return x.size() == y.size() && ut_detail::case_ins<CharT>::compare( x.begin(), y.begin(), x.size() ) == 0;
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// ************** case_ins_less ************** //
+// ************************************************************************** //
+
+template<class CharT>
+class case_ins_less : public std::binary_function<basic_cstring<CharT>,basic_cstring<CharT>,bool>
+{
+public:
+ bool operator()( basic_cstring<CharT> x, basic_cstring<CharT> y ) const
+ {
+ return x.size() != y.size()
+ ? x.size() < y.size()
+ : ut_detail::case_ins<CharT>::compare( x.begin(), y.begin(), x.size() ) < 0;
+ }
+};
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// ************** operator < ************** //
+// ************************************************************************** //
+
+template<class CharT>
+inline bool
+operator <( boost::unit_test::basic_cstring<CharT> const& x,
+ boost::unit_test::basic_cstring<CharT> const& y )
+{
+ typedef typename boost::unit_test::basic_cstring<CharT>::traits_type traits_type;
+ return x.size() != y.size()
+ ? x.size() < y.size()
+ : traits_type::compare( x.begin(), y.begin(), x.size() ) < 0;
+}
+
+} // namespace unit_test
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: compare.hpp,v $
+// Revision 1.5 2005/02/20 08:27:09 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// Revision 1.4 2005/02/01 06:40:08 rogeeff
+// copyright update
+// old log entries removed
+// minor stilistic changes
+// depricated tools removed
+//
+// Revision 1.3 2005/01/31 20:07:21 rogeeff
+// Sunpro CC 5.3 workarounds
+//
+// Revision 1.2 2005/01/22 19:22:13 rogeeff
+// implementation moved into headers section to eliminate dependency of included/minimal component on src directory
+//
+// Revision 1.1 2005/01/22 18:21:40 rogeeff
+// moved sharable staff into utils
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_BASIC_CSTRING_COMPARE_HPP_071894GER
diff --git a/boost/boost/test/utils/basic_cstring/io.hpp b/boost/boost/test/utils/basic_cstring/io.hpp
new file mode 100644
index 00000000000..2e194ec34be
--- /dev/null
+++ b/boost/boost/test/utils/basic_cstring/io.hpp
@@ -0,0 +1,97 @@
+// (C) Copyright Gennadiy Rozental 2004-2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: io.hpp,v $
+//
+// Version : $Revision: 1.5 $
+//
+// Description : basic_cstring i/o implementation
+// ***************************************************************************
+
+#ifndef BOOST_TEST_BASIC_CSTRING_IO_HPP_071894GER
+#define BOOST_TEST_BASIC_CSTRING_IO_HPP_071894GER
+
+// Boost.Test
+#include <boost/test/utils/basic_cstring/basic_cstring.hpp>
+
+// STL
+#include <iosfwd>
+#include <string>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace boost {
+
+namespace unit_test {
+
+#ifdef BOOST_CLASSIC_IOSTREAMS
+
+template<typename CharT>
+inline std::ostream&
+operator<<( std::ostream& os, basic_cstring<CharT> const& str )
+{
+ typedef typename ut_detail::bcs_base_char<CharT>::type char_type;
+ char_type const* const beg = reinterpret_cast<char_type const* const>( str.begin() );
+ char_type const* const end = reinterpret_cast<char_type const* const>( str.end() );
+ os << std::basic_string<char_type>( beg, end - beg );
+
+ return os;
+}
+
+#else
+
+template<typename CharT1, typename Tr,typename CharT2>
+inline std::basic_ostream<CharT1,Tr>&
+operator<<( std::basic_ostream<CharT1,Tr>& os, basic_cstring<CharT2> const& str )
+{
+ CharT1 const* const beg = reinterpret_cast<CharT1 const*>( str.begin() ); // !!
+ CharT1 const* const end = reinterpret_cast<CharT1 const*>( str.end() );
+ os << std::basic_string<CharT1,Tr>( beg, end - beg );
+
+ return os;
+}
+
+#endif
+
+//____________________________________________________________________________//
+
+
+} // namespace unit_test
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: io.hpp,v $
+// Revision 1.5 2005/12/14 05:01:13 rogeeff
+// *** empty log message ***
+//
+// Revision 1.4 2005/02/20 08:27:09 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// Revision 1.3 2005/02/01 06:40:08 rogeeff
+// copyright update
+// old log entries removed
+// minor stilistic changes
+// depricated tools removed
+//
+// Revision 1.2 2005/01/22 19:22:13 rogeeff
+// implementation moved into headers section to eliminate dependency of included/minimal component on src directory
+//
+// Revision 1.1 2005/01/22 18:21:40 rogeeff
+// moved sharable staff into utils
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_BASIC_CSTRING_IO_HPP_071894GER
diff --git a/boost/boost/test/utils/callback.hpp b/boost/boost/test/utils/callback.hpp
new file mode 100644
index 00000000000..8ff182e88ac
--- /dev/null
+++ b/boost/boost/test/utils/callback.hpp
@@ -0,0 +1,337 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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)
+
+// See http://www.boost.org/libs/test for the library home page.
+//
+// File : $RCSfile: callback.hpp,v $
+//
+// Version : $Revision: 1.7 $
+//
+// Description :
+// ***************************************************************************
+
+#ifndef BOOST_TEST_CALLBACK_020505GER
+#define BOOST_TEST_CALLBACK_020505GER
+
+// Boost
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/shared_ptr.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) || BOOST_WORKAROUND(BOOST_INTEL, <= 700)
+# define BOOST_CALLBACK_EXPLICIT_COPY_CONSTRUCTOR
+#endif
+
+//____________________________________________________________________________//
+
+namespace boost {
+
+namespace unit_test {
+
+namespace ut_detail {
+
+struct unused {};
+
+template<typename R>
+struct invoker {
+ template<typename Functor>
+ R invoke( Functor& f ) { return f(); }
+ template<typename Functor, typename T1>
+ R invoke( Functor& f, T1 t1 ) { return f( t1 ); }
+ template<typename Functor, typename T1, typename T2>
+ R invoke( Functor& f, T1 t1, T2 t2 ) { return f( t1, t2 ); }
+ template<typename Functor, typename T1, typename T2, typename T3>
+ R invoke( Functor& f, T1 t1, T2 t2, T3 t3 ) { return f( t1, t2, t3 ); }
+};
+
+//____________________________________________________________________________//
+
+template<>
+struct invoker<unused> {
+ template<typename Functor>
+ unused invoke( Functor& f ) { f(); return unused(); }
+ template<typename Functor, typename T1>
+ unused invoke( Functor& f, T1 t1 ) { f( t1 ); return unused(); }
+ template<typename Functor, typename T1, typename T2>
+ unused invoke( Functor& f, T1 t1, T2 t2 ) { f( t1, t2 ); return unused(); }
+ template<typename Functor, typename T1, typename T2, typename T3>
+ unused invoke( Functor& f, T1 t1, T2 t2, T3 t3 ) { f( t1, t2, t3 ); return unused(); }
+};
+
+//____________________________________________________________________________//
+
+} // namespace ut_detail
+
+// ************************************************************************** //
+// ************** unit_test::callback0 ************** //
+// ************************************************************************** //
+
+namespace ut_detail {
+
+template<typename R>
+struct callback0_impl {
+ virtual ~callback0_impl() {}
+
+ virtual R invoke() = 0;
+};
+
+//____________________________________________________________________________//
+
+template<typename R, typename Functor>
+struct callback0_impl_t : callback0_impl<R> {
+ // Constructor
+ explicit callback0_impl_t( Functor f ) : m_f( f ) {}
+
+ virtual R invoke() { return invoker<R>().invoke( m_f ); }
+
+private:
+ // Data members
+ Functor m_f;
+};
+
+//____________________________________________________________________________//
+
+} // namespace ut_detail
+
+template<typename R = ut_detail::unused>
+class callback0 {
+public:
+ // Constructors
+ callback0() {}
+#ifdef BOOST_CALLBACK_EXPLICIT_COPY_CONSTRUCTOR
+ callback0( callback0 const& rhs ) : m_impl( rhs.m_impl ) {}
+#endif
+
+ template<typename Functor>
+ callback0( Functor f )
+ : m_impl( new ut_detail::callback0_impl_t<R,Functor>( f ) ) {}
+
+ void operator=( callback0 const& rhs ) { m_impl = rhs.m_impl; }
+
+ template<typename Functor>
+ void operator=( Functor f ) { m_impl.reset( new ut_detail::callback0_impl_t<R,Functor>( f ) ); }
+
+ R operator()() const { return m_impl->invoke(); }
+
+ bool operator!() const { return !m_impl; }
+
+private:
+ // Data members
+ boost::shared_ptr<ut_detail::callback0_impl<R> > m_impl;
+};
+
+// ************************************************************************** //
+// ************** unit_test::callback1 ************** //
+// ************************************************************************** //
+
+namespace ut_detail {
+
+template<typename R, typename T1>
+struct callback1_impl {
+ virtual ~callback1_impl() {}
+
+ virtual R invoke( T1 t1 ) = 0;
+};
+
+//____________________________________________________________________________//
+
+template<typename R, typename T1,typename Functor>
+struct callback1_impl_t : callback1_impl<R,T1> {
+ // Constructor
+ explicit callback1_impl_t( Functor f ) : m_f( f ) {}
+
+ virtual R invoke( T1 t1 ) { return invoker<R>().invoke( m_f, t1 ); }
+
+private:
+ // Data members
+ Functor m_f;
+};
+
+//____________________________________________________________________________//
+
+} // namespace ut_detail
+
+template<typename T1,typename R = ut_detail::unused>
+class callback1 {
+public:
+ // Constructors
+ callback1() {}
+#ifdef BOOST_CALLBACK_EXPLICIT_COPY_CONSTRUCTOR
+ callback1( callback1 const& rhs ) : m_impl( rhs.m_impl ) {}
+#endif
+
+ template<typename Functor>
+ callback1( Functor f )
+ : m_impl( new ut_detail::callback1_impl_t<R,T1,Functor>( f ) ) {}
+
+ void operator=( callback1 const& rhs ) { m_impl = rhs.m_impl; }
+
+ template<typename Functor>
+ void operator=( Functor f ) { m_impl.reset( new ut_detail::callback1_impl_t<R,T1,Functor>( f ) ); }
+
+ R operator()( T1 t1 ) const { return m_impl->invoke( t1 ); }
+
+ bool operator!() const { return !m_impl; }
+
+private:
+ // Data members
+ boost::shared_ptr<ut_detail::callback1_impl<R,T1> > m_impl;
+};
+
+// ************************************************************************** //
+// ************** unit_test::callback2 ************** //
+// ************************************************************************** //
+
+namespace ut_detail {
+
+template<typename R, typename T1,typename T2>
+struct callback2_impl {
+ virtual ~callback2_impl() {}
+
+ virtual R invoke( T1 t1, T2 t2 ) = 0;
+};
+
+//____________________________________________________________________________//
+
+template<typename R, typename T1, typename T2, typename Functor>
+struct callback2_impl_t : callback2_impl<R,T1,T2> {
+ // Constructor
+ explicit callback2_impl_t( Functor f ) : m_f( f ) {}
+
+ virtual R invoke( T1 t1, T2 t2 ) { return invoker<R>().template invoke<Functor,T1,T2>( m_f, t1, t2 ); }
+
+private:
+ // Data members
+ Functor m_f;
+};
+
+//____________________________________________________________________________//
+
+} // namespace ut_detail
+
+template<typename T1,typename T2, typename R = ut_detail::unused>
+class callback2 {
+public:
+ // Constructors
+ callback2() {}
+#ifdef BOOST_CALLBACK_EXPLICIT_COPY_CONSTRUCTOR
+ callback2( callback2 const& rhs ) : m_impl( rhs.m_impl ) {}
+#endif
+
+ template<typename Functor>
+ callback2( Functor f ) : m_impl( new ut_detail::callback2_impl_t<R,T1,T2,Functor>( f ) ) {}
+
+ void operator=( callback2 const& rhs ) { m_impl = rhs.m_impl; }
+
+ template<typename Functor>
+ void operator=( Functor f ) { m_impl.reset( new ut_detail::callback2_impl_t<R,T1,T2,Functor>( f ) ); }
+
+ R operator()( T1 t1, T2 t2 ) const { return m_impl->invoke( t1, t2 ); }
+
+ bool operator!() const { return !m_impl; }
+
+private:
+ // Data members
+ boost::shared_ptr<ut_detail::callback2_impl<R,T1,T2> > m_impl;
+};
+
+// ************************************************************************** //
+// ************** unit_test::callback3 ************** //
+// ************************************************************************** //
+
+namespace ut_detail {
+
+template<typename R, typename T1, typename T2, typename T3>
+struct callback3_impl {
+ virtual ~callback3_impl() {}
+
+ virtual R invoke( T1 t1, T2 t2, T3 t3 ) = 0;
+};
+
+//____________________________________________________________________________//
+
+template<typename R, typename T1, typename T2, typename T3, typename Functor>
+struct callback3_impl_t : callback3_impl<R,T1,T2,T3> {
+ // Constructor
+ explicit callback3_impl_t( Functor f ) : m_f( f ) {}
+
+ virtual R invoke( T1 t1, T2 t2, T3 t3 ) { return invoker<R>().invoke( m_f, t1, t2, t3 ); }
+
+private:
+ // Data members
+ Functor m_f;
+};
+
+//____________________________________________________________________________//
+
+} // namespace ut_detail
+
+template<typename T1,typename T2, typename T3, typename R = ut_detail::unused>
+class callback3 {
+public:
+ // Constructors
+ callback3() {}
+#ifdef BOOST_CALLBACK_EXPLICIT_COPY_CONSTRUCTOR
+ callback3( callback3 const& rhs ) : m_impl( rhs.m_impl ) {}
+#endif
+
+ template<typename Functor>
+ callback3( Functor f )
+ : m_impl( new ut_detail::callback3_impl_t<R,T1,T2,T3,Functor>( f ) ) {}
+
+ void operator=( callback3 const& rhs ) { m_impl = rhs.m_impl; }
+
+ template<typename Functor>
+ void operator=( Functor f ) { m_impl.reset( new ut_detail::callback3_impl_t<R,T1,T2,T3,Functor>( f ) ); }
+
+ R operator()( T1 t1, T2 t2, T3 t3 ) const { return m_impl->invoke( t1, t2, t3 ); }
+
+ bool operator!() const { return !m_impl; }
+
+private:
+ // Data members
+ boost::shared_ptr<ut_detail::callback3_impl<R,T1,T2,T3> > m_impl;
+};
+
+} // namespace unit_test
+
+} // namespace boost
+
+#undef BOOST_CALLBACK_EXPLICIT_COPY_CONSTRUCTOR
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ************************************************************************** //
+// Revision History:
+//
+// $Log: callback.hpp,v $
+// Revision 1.7 2006/02/21 04:27:16 rogeeff
+// rev back
+//
+// Revision 1.6 2006/01/28 08:57:03 rogeeff
+// VC6.0 workaround removed
+//
+// Revision 1.5 2005/04/13 05:09:00 rogeeff
+// Intel 7.1 bug fix
+//
+// Revision 1.4 2005/04/12 06:50:06 rogeeff
+// suppress warnings
+//
+// Revision 1.3 2005/03/22 07:05:18 rogeeff
+// minor vc7.1 workaround
+//
+// Revision 1.2 2005/02/24 19:28:17 turkanis
+// removed redundant copy ctors, except for VC6
+//
+// Revision 1.1 2005/02/20 08:27:08 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// ************************************************************************** //
+
+#endif // BOOST_TEST_CALLBACK_020505GER
diff --git a/boost/boost/test/utils/class_properties.hpp b/boost/boost/test/utils/class_properties.hpp
new file mode 100644
index 00000000000..a1bb1ec8637
--- /dev/null
+++ b/boost/boost/test/utils/class_properties.hpp
@@ -0,0 +1,264 @@
+// (C) Copyright Gennadiy Rozental 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/test for the library home page.
+//
+// File : $RCSfile: class_properties.hpp,v $
+//
+// Version : $Revision: 1.10 $
+//
+// Description : simple facility that mimmic notion of read-only read-write
+// properties in C++ classes. Original idea by Henrik Ravn.
+// ***************************************************************************
+
+#ifndef BOOST_TEST_CLASS_PROPERTIES_HPP_071894GER
+#define BOOST_TEST_CLASS_PROPERTIES_HPP_071894GER
+
+// Boost.Test
+#include <boost/test/detail/config.hpp>
+
+// Boost
+#if !BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600))
+#include <boost/preprocessor/seq/for_each.hpp>
+#endif
+#include <boost/call_traits.hpp>
+#include <boost/type_traits/add_pointer.hpp>
+#include <boost/type_traits/add_const.hpp>
+#include <boost/utility/addressof.hpp>
+
+// STL
+#include <iosfwd>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace boost {
+
+namespace unit_test {
+
+// ************************************************************************** //
+// ************** class_property ************** //
+// ************************************************************************** //
+
+template<class PropertyType>
+class class_property {
+protected:
+ typedef typename call_traits<PropertyType>::const_reference read_access_t;
+ typedef typename call_traits<PropertyType>::param_type write_param_t;
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x570))
+ typedef typename add_pointer<PropertyType const>::type address_res_t;
+#else
+ typedef typename add_pointer<typename add_const<PropertyType>::type>::type address_res_t;
+#endif
+public:
+ // Constructor
+ class_property() : value( PropertyType() ) {}
+ explicit class_property( write_param_t init_value )
+ : value( init_value ) {}
+
+ // Access methods
+ operator read_access_t() const { return value; }
+ read_access_t get() const { return value; }
+ bool operator!() const { return !value; }
+ address_res_t operator&() const { return &value; }
+
+ // Data members
+#ifndef BOOST_TEST_NO_PROTECTED_USING
+protected:
+#endif
+ PropertyType value;
+};
+
+//____________________________________________________________________________//
+
+#ifdef BOOST_CLASSIC_IOSTREAMS
+
+template<class PropertyType>
+inline std::ostream&
+operator<<( std::ostream& os, class_property<PropertyType> const& p )
+
+#else
+
+template<typename CharT1, typename Tr,class PropertyType>
+inline std::basic_ostream<CharT1,Tr>&
+operator<<( std::basic_ostream<CharT1,Tr>& os, class_property<PropertyType> const& p )
+
+#endif
+{
+ return os << p.get();
+}
+
+//____________________________________________________________________________//
+
+#define DEFINE_PROPERTY_FREE_BINARY_OPERATOR( op ) \
+template<class PropertyType> \
+inline bool \
+operator op( PropertyType const& lhs, class_property<PropertyType> const& rhs ) \
+{ \
+ return lhs op rhs.get(); \
+} \
+template<class PropertyType> \
+inline bool \
+operator op( class_property<PropertyType> const& lhs, PropertyType const& rhs ) \
+{ \
+ return lhs.get() op rhs; \
+} \
+template<class PropertyType> \
+inline bool \
+operator op( class_property<PropertyType> const& lhs, \
+ class_property<PropertyType> const& rhs ) \
+{ \
+ return lhs.get() op rhs.get(); \
+} \
+/**/
+
+DEFINE_PROPERTY_FREE_BINARY_OPERATOR( == )
+DEFINE_PROPERTY_FREE_BINARY_OPERATOR( != )
+
+#undef DEFINE_PROPERTY_FREE_BINARY_OPERATOR
+
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+
+#define DEFINE_PROPERTY_LOGICAL_OPERATOR( op ) \
+template<class PropertyType> \
+inline bool \
+operator op( bool b, class_property<PropertyType> const& p ) \
+{ \
+ return b op p.get(); \
+} \
+template<class PropertyType> \
+inline bool \
+operator op( class_property<PropertyType> const& p, bool b ) \
+{ \
+ return b op p.get(); \
+} \
+/**/
+
+DEFINE_PROPERTY_LOGICAL_OPERATOR( && )
+DEFINE_PROPERTY_LOGICAL_OPERATOR( || )
+
+#endif
+
+// ************************************************************************** //
+// ************** readonly_property ************** //
+// ************************************************************************** //
+
+template<class PropertyType>
+class readonly_property : public class_property<PropertyType> {
+ typedef class_property<PropertyType> base_prop;
+ typedef typename base_prop::address_res_t arrow_res_t;
+protected:
+ typedef typename base_prop::write_param_t write_param_t;
+public:
+ // Constructor
+ readonly_property() {}
+ explicit readonly_property( write_param_t init_value ) : base_prop( init_value ) {}
+
+ // access methods
+ arrow_res_t operator->() const { return boost::addressof( base_prop::value ); }
+};
+
+//____________________________________________________________________________//
+
+#if BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600))
+
+#define BOOST_READONLY_PROPERTY( property_type, friends ) boost::unit_test::readwrite_property<property_type >
+
+#else
+
+#define BOOST_READONLY_PROPERTY_DECLARE_FRIEND(r, data, elem) friend class elem;
+
+#define BOOST_READONLY_PROPERTY( property_type, friends ) \
+class BOOST_JOIN( readonly_property, __LINE__ ) \
+: public boost::unit_test::readonly_property<property_type > { \
+ typedef boost::unit_test::readonly_property<property_type > base_prop; \
+ BOOST_PP_SEQ_FOR_EACH( BOOST_READONLY_PROPERTY_DECLARE_FRIEND, ' ', friends ) \
+ typedef base_prop::write_param_t write_param_t; \
+public: \
+ BOOST_JOIN( readonly_property, __LINE__ )() {} \
+ explicit BOOST_JOIN( readonly_property, __LINE__ )( write_param_t init_v ) \
+ : base_prop( init_v ) {} \
+} \
+/**/
+
+#endif
+
+// ************************************************************************** //
+// ************** readwrite_property ************** //
+// ************************************************************************** //
+
+template<class PropertyType>
+class readwrite_property : public class_property<PropertyType> {
+ typedef class_property<PropertyType> base_prop;
+ typedef typename add_pointer<PropertyType>::type arrow_res_t;
+ typedef typename base_prop::address_res_t const_arrow_res_t;
+ typedef typename base_prop::write_param_t write_param_t;
+public:
+ readwrite_property() : base_prop() {}
+ explicit readwrite_property( write_param_t init_value ) : base_prop( init_value ) {}
+
+ // access methods
+ void set( write_param_t v ) { base_prop::value = v; }
+ arrow_res_t operator->() { return boost::addressof( base_prop::value ); }
+ const_arrow_res_t operator->() const { return boost::addressof( base_prop::value ); }
+
+#ifndef BOOST_TEST_NO_PROTECTED_USING
+ using base_prop::value;
+#endif
+};
+
+//____________________________________________________________________________//
+
+} // unit_test
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#undef BOOST_TEST_NO_PROTECTED_USING
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: class_properties.hpp,v $
+// Revision 1.10 2006/02/21 04:24:46 rogeeff
+// rev back
+//
+// Revision 1.9 2006/01/28 08:57:05 rogeeff
+// VC6.0 workaround removed
+//
+// Revision 1.8 2005/08/25 16:27:26 johnmaddock
+// Large patch from Ulrich Eckhardt to fix support for EVC++ 4.
+//
+// Revision 1.7 2005/05/11 05:04:58 rogeeff
+// borland portability fix
+//
+// Revision 1.6 2005/04/12 06:46:17 rogeeff
+// use add_const
+//
+// Revision 1.5 2005/02/21 10:17:27 rogeeff
+// base reference renamed (borland bug fix)
+//
+// Revision 1.4 2005/02/20 08:27:08 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// Revision 1.3 2005/02/01 06:40:07 rogeeff
+// copyright update
+// old log entries removed
+// minor stilistic changes
+// depricated tools removed
+//
+// Revision 1.2 2005/01/22 19:22:13 rogeeff
+// implementation moved into headers section to eliminate dependency of included/minimal component on src directory
+//
+// Revision 1.1 2005/01/22 18:21:39 rogeeff
+// moved sharable staff into utils
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_CLASS_PROPERTIES_HPP_071894GER
diff --git a/boost/boost/test/utils/custom_manip.hpp b/boost/boost/test/utils/custom_manip.hpp
new file mode 100644
index 00000000000..0a4f5b8521b
--- /dev/null
+++ b/boost/boost/test/utils/custom_manip.hpp
@@ -0,0 +1,78 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: custom_manip.hpp,v $
+//
+// Version : $Revision: 1.2 $
+//
+// Description : simple helpers for creating cusom output manipulators
+// ***************************************************************************
+
+#ifndef BOOST_TEST_CUSTOM_MANIP_HPP_071894GER
+#define BOOST_TEST_CUSTOM_MANIP_HPP_071894GER
+
+// STL
+#include <iosfwd>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace boost {
+
+namespace unit_test {
+
+// ************************************************************************** //
+// ************** custom manipulators helpers ************** //
+// ************************************************************************** //
+
+template<typename Manip>
+struct custom_printer {
+ explicit custom_printer( std::ostream& ostr ) : m_ostr( &ostr ) {}
+
+ std::ostream& operator*() const { return *m_ostr; }
+
+private:
+ std::ostream* const m_ostr;
+};
+
+//____________________________________________________________________________//
+
+template<typename Uniq> struct custom_manip {};
+
+//____________________________________________________________________________//
+
+template<typename Uniq>
+inline custom_printer<custom_manip<Uniq> >
+operator<<( std::ostream& ostr, custom_manip<Uniq> const& ) { return custom_printer<custom_manip<Uniq> >( ostr ); }
+
+//____________________________________________________________________________//
+
+} // namespace unit_test
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: custom_manip.hpp,v $
+// Revision 1.2 2005/02/20 08:27:08 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// Revision 1.1 2005/01/22 18:21:39 rogeeff
+// moved sharable staff into utils
+//
+// Revision 1.1 2005/01/21 07:31:44 rogeeff
+// xml helper facilities reworked to present manipulator interfaces
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_CUSTOM_MANIP_HPP_071894GER
diff --git a/boost/boost/test/utils/fixed_mapping.hpp b/boost/boost/test/utils/fixed_mapping.hpp
new file mode 100644
index 00000000000..7b74873d6e7
--- /dev/null
+++ b/boost/boost/test/utils/fixed_mapping.hpp
@@ -0,0 +1,155 @@
+// (C) Copyright Gennadiy Rozental 2001-2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: fixed_mapping.hpp,v $
+//
+// Version : $Revision: 1.6 $
+//
+// Description : fixed sized mapping with specified invalid value
+// ***************************************************************************
+
+#ifndef BOOST_TEST_FIXED_MAPPING_HPP_071894GER
+#define BOOST_TEST_FIXED_MAPPING_HPP_071894GER
+
+// Boost
+#include <boost/preprocessor/repetition/repeat.hpp>
+#include <boost/preprocessor/arithmetic/add.hpp>
+#include <boost/call_traits.hpp>
+#include <boost/detail/binary_search.hpp>
+
+// STL
+#include <vector>
+#include <functional>
+#include <algorithm>
+#include <utility>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace boost {
+
+namespace unit_test {
+
+// configurable maximum fixed sized mapping size supported by this header.
+// You could redefine it before inclusion of this file.
+#ifndef MAX_MAP_SIZE
+#define MAX_MAP_SIZE 15
+#endif
+
+#define CONSTR_DECL_MID( z, i, dummy1 ) key_param_type key##i, value_param_type v##i,
+#define CONSTR_BODY_MID( z, i, dummy1 ) add_pair( key##i, v##i );
+
+#define CONSTR_DECL( z, n, dummy1 ) \
+ fixed_mapping( BOOST_PP_REPEAT_ ## z( n, CONSTR_DECL_MID, "" ) \
+ value_param_type invalid_value ) \
+ : m_invalid_value( invalid_value ) \
+ { \
+ BOOST_PP_REPEAT_ ## z( n, CONSTR_BODY_MID, "" ) \
+ init(); \
+ } \
+/**/
+
+#define CONTRUCTORS( n ) BOOST_PP_REPEAT( n, CONSTR_DECL, "" )
+
+template<typename Key, typename Value, typename Compare = std::less<Key> >
+class fixed_mapping
+{
+ typedef std::pair<Key,Value> elem_type;
+ typedef std::vector<elem_type> map_type;
+ typedef typename std::vector<elem_type>::const_iterator iterator;
+
+ typedef typename call_traits<Key>::param_type key_param_type;
+ typedef typename call_traits<Value>::param_type value_param_type;
+ typedef typename call_traits<Value>::const_reference value_ref_type;
+
+#if BOOST_WORKAROUND(__DECCXX_VER, BOOST_TESTED_AT(60590042))
+ struct p1; friend struct p1;
+ struct p2; friend struct p2;
+#endif
+
+ // bind( Compare(), bind(select1st<elem_type>(), _1), bind(identity<Key>(), _2) )
+ struct p1 : public std::binary_function<elem_type,Key,bool>
+ {
+ bool operator()( elem_type const& x, Key const& y ) const { return Compare()( x.first, y ); }
+ };
+
+ // bind( Compare(), bind(select1st<elem_type>(), _1), bind(select1st<elem_type>(), _2) )
+ struct p2 : public std::binary_function<elem_type,elem_type,bool>
+ {
+ bool operator()( elem_type const& x, elem_type const& y ) const { return Compare()( x.first, y.first ); }
+ };
+
+public:
+ // Constructors
+ CONTRUCTORS( BOOST_PP_ADD( MAX_MAP_SIZE, 1 ) )
+
+ // key -> value access
+ value_ref_type operator[]( key_param_type key ) const
+ {
+#if BOOST_WORKAROUND(__SUNPRO_CC,BOOST_TESTED_AT(0x530))
+ iterator it = std::lower_bound( m_map.begin(), m_map.end(), key, p1() );
+#else
+ iterator it = boost::detail::lower_bound( m_map.begin(), m_map.end(), key, p1() );
+#endif
+ return (it == m_map.end() || Compare()( key, it->first ) ) ? m_invalid_value : it->second;
+ }
+
+private:
+ // Implementation
+ void init() { std::sort( m_map.begin(), m_map.end(), p2() ); }
+ void add_pair( key_param_type key, value_param_type value ) { m_map.push_back( elem_type( key, value ) ); }
+
+ // Data members
+ Value m_invalid_value;
+ map_type m_map;
+};
+
+} // namespace unit_test
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#undef MAX_MAP_SIZE
+#undef CONSTR_DECL_MID
+#undef CONSTR_BODY_MID
+#undef CONSTR_DECL
+#undef CONTRUCTORS
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: fixed_mapping.hpp,v $
+// Revision 1.6 2005/06/16 14:33:42 schoepflin
+// Added workaround for Tru64/CXX which enables boost.test to compile in strict
+// ansi mode on that compiler.
+//
+// Revision 1.5 2005/05/08 08:55:09 rogeeff
+// typos and missing descriptions fixed
+//
+// Revision 1.4 2005/02/20 08:27:08 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// Revision 1.3 2005/02/01 06:40:07 rogeeff
+// copyright update
+// old log entries removed
+// minor stilistic changes
+// depricated tools removed
+//
+// Revision 1.2 2005/01/31 20:07:19 rogeeff
+// Sunpro CC 5.3 workarounds
+//
+// Revision 1.1 2005/01/22 18:21:39 rogeeff
+// moved sharable staff into utils
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_FIXED_MAPPING_HPP_071894GER
+
diff --git a/boost/boost/test/utils/foreach.hpp b/boost/boost/test/utils/foreach.hpp
new file mode 100644
index 00000000000..0b31b784a58
--- /dev/null
+++ b/boost/boost/test/utils/foreach.hpp
@@ -0,0 +1,379 @@
+// (C) Copyright Eric Niebler 2004-2005
+// (C) Copyright Gennadiy Rozental 2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: foreach.hpp,v $
+//
+// Version : $Revision: 1.4 $
+//
+// Description : this is an abridged version of an excelent BOOST_FOREACH facility
+// presented by Eric Niebler. I am so fond of it so I couldn't wait till it
+// going to be accepted into Boost. Also I need version with less number of dependencies
+// and more portable. This version doesn't support rvalues and will reeveluate it's
+// parameters, but should be good enough for my purposes.
+// ***************************************************************************
+
+#ifndef BOOST_TEST_FOREACH_HPP_021005GER
+#define BOOST_TEST_FOREACH_HPP_021005GER
+
+// Boost.Test
+#include <boost/test/detail/config.hpp>
+
+// Boost
+#include <boost/type.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/test/detail/workaround.hpp>
+
+#if !BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x530) )
+#include <boost/type_traits/is_const.hpp>
+#endif
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace boost {
+
+namespace unit_test {
+
+namespace for_each {
+
+// ************************************************************************** //
+// ************** static_any ************** //
+// ************************************************************************** //
+
+struct static_any_base
+{
+ operator bool() const { return false; }
+};
+
+//____________________________________________________________________________//
+
+template<typename Iter>
+struct static_any : static_any_base
+{
+ static_any( Iter const& t ) : m_it( t ) {}
+
+ mutable Iter m_it;
+};
+
+//____________________________________________________________________________//
+
+typedef static_any_base const& static_any_t;
+
+//____________________________________________________________________________//
+
+template<typename Iter>
+inline Iter&
+static_any_cast( static_any_t a, Iter* = 0 )
+{
+ return static_cast<Iter&>( static_cast<static_any<Iter> const&>( a ).m_it );
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// ************** is_const ************** //
+// ************************************************************************** //
+
+#if BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x530) )
+
+template<typename C>
+inline mpl::false_
+is_const_coll( C& )
+{
+ return mpl::false_();
+}
+
+//____________________________________________________________________________//
+
+template<typename C>
+inline mpl::true_
+is_const_coll( C const& )
+{
+ return mpl::true_();
+}
+
+//____________________________________________________________________________//
+
+#else
+
+template<typename C>
+inline is_const<C>
+is_const_coll( C& )
+{
+ return is_const<C>();
+}
+
+//____________________________________________________________________________//
+
+#endif
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// ************** begin ************** //
+// ************************************************************************** //
+
+template<typename C>
+inline static_any<BOOST_DEDUCED_TYPENAME C::iterator>
+begin( C& t, mpl::false_ )
+{
+ return static_any<BOOST_DEDUCED_TYPENAME C::iterator>( t.begin() );
+}
+
+//____________________________________________________________________________//
+
+#if BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x530) )
+
+template<typename C>
+inline static_any<BOOST_DEDUCED_TYPENAME C::iterator>
+begin( C const& t, mpl::true_ )
+{
+ typedef typename C::iterator it;
+ return static_any<it>( const_cast<it>( t.begin() ) );
+}
+
+#else
+
+template<typename C>
+inline static_any<BOOST_DEDUCED_TYPENAME C::const_iterator>
+begin( C const& t, mpl::true_ )
+{
+ return static_any<BOOST_DEDUCED_TYPENAME C::const_iterator>( t.begin() );
+}
+
+#endif
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// ************** end ************** //
+// ************************************************************************** //
+
+template<typename C>
+inline static_any<BOOST_DEDUCED_TYPENAME C::iterator>
+end( C& t, mpl::false_ )
+{
+ return static_any<BOOST_DEDUCED_TYPENAME C::iterator>( t.end() );
+}
+
+//____________________________________________________________________________//
+
+#if BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x530) )
+
+template<typename C>
+inline static_any<BOOST_DEDUCED_TYPENAME C::iterator>
+end( C const& t, mpl::true_ )
+{
+ typedef typename C::iterator it;
+ return static_any<it>( const_cast<it>( t.end() ) );
+}
+
+#else
+
+template<typename C>
+inline static_any<BOOST_DEDUCED_TYPENAME C::const_iterator>
+end( C const& t, mpl::true_ )
+{
+ return static_any<BOOST_DEDUCED_TYPENAME C::const_iterator>( t.end() );
+}
+
+#endif
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// ************** done ************** //
+// ************************************************************************** //
+
+template<typename C>
+inline bool
+done( static_any_t cur, static_any_t end, C&, mpl::false_ )
+{
+ return static_any_cast<BOOST_DEDUCED_TYPENAME C::iterator>( cur ) ==
+ static_any_cast<BOOST_DEDUCED_TYPENAME C::iterator>( end );
+}
+
+//____________________________________________________________________________//
+
+template<typename C>
+inline bool
+done( static_any_t cur, static_any_t end, C const&, mpl::true_ )
+{
+ return static_any_cast<BOOST_DEDUCED_TYPENAME C::const_iterator>( cur ) ==
+ static_any_cast<BOOST_DEDUCED_TYPENAME C::const_iterator>( end );
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// ************** next ************** //
+// ************************************************************************** //
+
+template<typename C>
+inline void
+next( static_any_t cur, C&, mpl::false_ )
+{
+ ++static_any_cast<BOOST_DEDUCED_TYPENAME C::iterator>( cur );
+}
+
+//____________________________________________________________________________//
+
+template<typename C>
+inline void
+next( static_any_t cur, C const&, mpl::true_ )
+{
+ ++static_any_cast<BOOST_DEDUCED_TYPENAME C::const_iterator>( cur );
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// ************** deref ************** //
+// ************************************************************************** //
+
+template<class RefType,typename C>
+inline RefType
+deref( static_any_t cur, C&, ::boost::type<RefType>, mpl::false_ )
+{
+ return *static_any_cast<BOOST_DEDUCED_TYPENAME C::iterator>( cur );
+}
+
+//____________________________________________________________________________//
+
+template<class RefType,typename C>
+inline RefType
+deref( static_any_t cur, C const&, ::boost::type<RefType>, mpl::true_ )
+{
+ return *static_any_cast<BOOST_DEDUCED_TYPENAME C::const_iterator>( cur );
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// ************** BOOST_TEST_FOREACH ************** //
+// ************************************************************************** //
+
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+#define BOOST_TEST_FE_MULTISTATEMENT
+#endif
+
+#define BOOST_TEST_FE_ANY ::boost::unit_test::for_each::static_any_t
+#define BOOST_TEST_FE_IS_CONST( COL ) ::boost::unit_test::for_each::is_const_coll( COL )
+
+#define BOOST_TEST_FE_BEG( COL ) \
+ ::boost::unit_test::for_each::begin( \
+ COL, \
+ BOOST_TEST_FE_IS_CONST( COL ) ) \
+/**/
+
+#define BOOST_TEST_FE_END( COL ) \
+ ::boost::unit_test::for_each::end( \
+ COL, \
+ BOOST_TEST_FE_IS_CONST( COL ) ) \
+/**/
+
+#define BOOST_TEST_FE_DONE( COL ) \
+ ::boost::unit_test::for_each::done( \
+ BOOST_TEST_FE_CUR_VAR, \
+ BOOST_TEST_FE_END_VAR, \
+ COL, \
+ BOOST_TEST_FE_IS_CONST( COL ) ) \
+/**/
+
+#define BOOST_TEST_FE_NEXT( COL ) \
+ ::boost::unit_test::for_each::next( \
+ BOOST_TEST_FE_CUR_VAR, \
+ COL, \
+ BOOST_TEST_FE_IS_CONST( COL ) ) \
+/**/
+
+#define BOOST_FOREACH_NOOP(COL) \
+ ((void)&(COL))
+
+#define BOOST_TEST_FE_DEREF( COL, RefType ) \
+ ::boost::unit_test::for_each::deref( \
+ BOOST_TEST_FE_CUR_VAR, \
+ COL, \
+ ::boost::type<RefType >(), \
+ BOOST_TEST_FE_IS_CONST( COL ) ) \
+/**/
+
+#if BOOST_WORKAROUND( BOOST_MSVC, == 1310 )
+#define BOOST_TEST_LINE_NUM
+#else
+#define BOOST_TEST_LINE_NUM __LINE__
+#endif
+
+#define BOOST_TEST_FE_CUR_VAR BOOST_JOIN( _fe_cur_, BOOST_TEST_LINE_NUM )
+#define BOOST_TEST_FE_END_VAR BOOST_JOIN( _fe_end_, BOOST_TEST_LINE_NUM )
+#define BOOST_TEST_FE_CON_VAR BOOST_JOIN( _fe_con_, BOOST_TEST_LINE_NUM )
+
+#ifndef BOOST_TEST_FE_MULTISTATEMENT
+
+#define BOOST_TEST_FOREACH( RefType, var, COL ) \
+if( BOOST_TEST_FE_ANY BOOST_TEST_FE_CUR_VAR = BOOST_TEST_FE_BEG( COL ) ) {} else \
+if( BOOST_TEST_FE_ANY BOOST_TEST_FE_END_VAR = BOOST_TEST_FE_END( COL ) ) {} else \
+for( bool BOOST_TEST_FE_CON_VAR = true; \
+ BOOST_TEST_FE_CON_VAR && !BOOST_TEST_FE_DONE( COL ); \
+ BOOST_TEST_FE_CON_VAR ? BOOST_TEST_FE_NEXT( COL ) : BOOST_FOREACH_NOOP( COL )) \
+ \
+ if( (BOOST_TEST_FE_CON_VAR = false, false) ) {} else \
+ for( RefType var = BOOST_TEST_FE_DEREF( COL, RefType ); \
+ !BOOST_TEST_FE_CON_VAR; BOOST_TEST_FE_CON_VAR = true ) \
+/**/
+
+#else
+
+#define BOOST_TEST_FOREACH( RefType, var, COL ) \
+BOOST_TEST_FE_ANY BOOST_TEST_FE_CUR_VAR = BOOST_TEST_FE_BEG( COL ), \
+ BOOST_TEST_FE_END_VAR = BOOST_TEST_FE_END( COL ); \
+ \
+for( bool BOOST_TEST_FE_CON_VAR = true; BOOST_TEST_FE_CON_VAR; ) \
+for( ; \
+ BOOST_TEST_FE_CON_VAR && (BOOST_TEST_FE_CON_VAR = !BOOST_TEST_FE_DONE( COL )); \
+ BOOST_TEST_FE_CON_VAR ? BOOST_TEST_FE_NEXT( COL ) : BOOST_FOREACH_NOOP( COL )) \
+ \
+ if( (BOOST_TEST_FE_CON_VAR = false, false) ) {} else \
+ for( RefType var = BOOST_TEST_FE_DEREF( COL, RefType ); \
+ !BOOST_TEST_FE_CON_VAR; BOOST_TEST_FE_CON_VAR = true ) \
+/**/
+
+#endif
+
+//____________________________________________________________________________//
+
+} // namespace for_each
+
+} // namespace unit_test
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: foreach.hpp,v $
+// Revision 1.4 2005/03/24 04:02:33 rogeeff
+// portability fixes
+//
+// Revision 1.3 2005/03/23 21:02:26 rogeeff
+// Sunpro CC 5.3 fixes
+//
+// Revision 1.2 2005/02/21 10:15:45 rogeeff
+// vc 7.1 workaround
+//
+// Revision 1.1 2005/02/20 08:27:08 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_FOREACH_HPP_021005GER
diff --git a/boost/boost/test/utils/iterator/ifstream_line_iterator.hpp b/boost/boost/test/utils/iterator/ifstream_line_iterator.hpp
new file mode 100644
index 00000000000..4e7a533e95d
--- /dev/null
+++ b/boost/boost/test/utils/iterator/ifstream_line_iterator.hpp
@@ -0,0 +1,134 @@
+// (C) Copyright Gennadiy Rozental 2004-2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: ifstream_line_iterator.hpp,v $
+//
+// Version : $Revision: 1.7 $
+//
+// Description :
+// ***************************************************************************
+
+#ifndef BOOST_IFSTREAM_LINE_ITERATOR_HPP_071894GER
+#define BOOST_IFSTREAM_LINE_ITERATOR_HPP_071894GER
+
+// Boost
+#include <boost/test/utils/iterator/istream_line_iterator.hpp>
+
+// STL
+#include <fstream>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace boost {
+
+namespace unit_test {
+
+namespace ut_detail {
+
+// ************************************************************************** //
+// ************** ifstream_holder ************** //
+// ************************************************************************** //
+
+template<typename CharT>
+class ifstream_holder {
+public:
+ // Constructor
+ explicit ifstream_holder( basic_cstring<CharT const> file_name )
+ {
+ if( file_name.is_empty() )
+ return;
+
+ m_stream.open( file_name.begin(), std::ios::in );
+ }
+
+ bool is_valid()
+ {
+ return m_stream.is_open();
+ }
+
+protected:
+#ifdef BOOST_CLASSIC_IOSTREAMS
+ typedef std::ifstream stream_t;
+#else
+ typedef std::basic_ifstream<CharT,std::char_traits<CharT> > stream_t;
+#endif
+
+ // Data members
+ stream_t m_stream;
+};
+
+} // namespace ut_detail
+
+// ************************************************************************** //
+// ************** basic_ifstream_line_iterator ************** //
+// ************************************************************************** //
+
+#ifdef BOOST_MSVC
+# pragma warning(push)
+# pragma warning(disable: 4355) // 'this' : used in base member initializer list
+#endif
+
+template<typename CharT>
+class basic_ifstream_line_iterator : ut_detail::ifstream_holder<CharT>, public basic_istream_line_iterator<CharT>
+{
+public:
+ basic_ifstream_line_iterator( basic_cstring<CharT const> file_name, CharT delimeter )
+ : ut_detail::ifstream_holder<CharT>( file_name ), basic_istream_line_iterator<CharT>( this->m_stream, delimeter ) {}
+
+ explicit basic_ifstream_line_iterator( basic_cstring<CharT const> file_name = basic_cstring<CharT const>() )
+ : ut_detail::ifstream_holder<CharT>( file_name ), basic_istream_line_iterator<CharT>( this->m_stream ) {}
+};
+
+#ifdef BOOST_MSVC
+# pragma warning(default: 4355)
+#endif
+
+typedef basic_ifstream_line_iterator<char> ifstream_line_iterator;
+typedef basic_ifstream_line_iterator<wchar_t> wifstream_line_iterator;
+
+} // namespace unit_test
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: ifstream_line_iterator.hpp,v $
+// Revision 1.7 2005/06/11 07:21:23 rogeeff
+// reverse prev fix
+//
+// Revision 1.6 2005/06/07 05:08:03 rogeeff
+// gcc fix
+//
+// Revision 1.5 2005/02/20 08:27:09 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// Revision 1.4 2005/02/01 06:40:08 rogeeff
+// copyright update
+// old log entries removed
+// minor stilistic changes
+// depricated tools removed
+//
+// Revision 1.3 2005/01/30 01:44:14 rogeeff
+// warnings suppressed
+//
+// Revision 1.2 2005/01/22 19:22:13 rogeeff
+// implementation moved into headers section to eliminate dependency of included/minimal component on src directory
+//
+// Revision 1.1 2005/01/22 18:21:40 rogeeff
+// moved sharable staff into utils
+//
+// ***************************************************************************
+
+#endif // BOOST_IFSTREAM_LINE_ITERATOR_HPP_071894GER
+
diff --git a/boost/boost/test/utils/iterator/input_iterator_facade.hpp b/boost/boost/test/utils/iterator/input_iterator_facade.hpp
new file mode 100644
index 00000000000..6c2cd067371
--- /dev/null
+++ b/boost/boost/test/utils/iterator/input_iterator_facade.hpp
@@ -0,0 +1,133 @@
+// (C) Copyright Gennadiy Rozental 2004-2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: input_iterator_facade.hpp,v $
+//
+// Version : $Revision: 1.5 $
+//
+// Description : Input iterator facade
+// ***************************************************************************
+
+#ifndef BOOST_INPUT_ITERATOR_FACADE_HPP_071894GER
+#define BOOST_INPUT_ITERATOR_FACADE_HPP_071894GER
+
+// Boost
+#include <boost/iterator/iterator_facade.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace boost {
+
+namespace unit_test {
+
+// ************************************************************************** //
+// ************** input_iterator_core_access ************** //
+// ************************************************************************** //
+
+class input_iterator_core_access
+{
+#if defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))
+public:
+#else
+ template <class I, class V, class R, class TC> friend class input_iterator_facade;
+#endif
+
+ template <class Facade>
+ static bool get( Facade& f )
+ {
+ return f.get();
+ }
+
+private:
+ // objects of this class are useless
+ input_iterator_core_access(); //undefined
+};
+
+// ************************************************************************** //
+// ************** input_iterator_facade ************** //
+// ************************************************************************** //
+
+template<typename Derived,
+ typename ValueType,
+ typename Reference = ValueType const&,
+ typename Traversal = single_pass_traversal_tag>
+class input_iterator_facade : public iterator_facade<Derived,ValueType,Traversal,Reference>
+{
+public:
+ // Constructor
+ input_iterator_facade() : m_valid( false ), m_value() {}
+
+protected: // provide access to the Derived
+ void init()
+ {
+ m_valid = true;
+ increment();
+ }
+
+ // Data members
+ mutable bool m_valid;
+ ValueType m_value;
+
+private:
+ friend class boost::iterator_core_access;
+
+ // iterator facade interface implementation
+ void increment()
+ {
+ // we make post-end incrementation indefinetly safe
+ if( m_valid )
+ m_valid = input_iterator_core_access::get( *static_cast<Derived*>(this) );
+ }
+ Reference dereference() const
+ {
+ return m_value;
+ }
+
+ // iterator facade interface implementation
+ bool equal( input_iterator_facade const& rhs ) const
+ {
+ // two invalid iterator equals, inequal otherwise
+ return !m_valid && !rhs.m_valid;
+ }
+};
+
+} // namespace unit_test
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: input_iterator_facade.hpp,v $
+// Revision 1.5 2005/05/08 08:55:09 rogeeff
+// typos and missing descriptions fixed
+//
+// Revision 1.4 2005/04/12 06:47:46 rogeeff
+// help iterator copying
+//
+// Revision 1.3 2005/02/20 08:27:09 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// Revision 1.2 2005/02/01 06:40:08 rogeeff
+// copyright update
+// old log entries removed
+// minor stilistic changes
+// depricated tools removed
+//
+// Revision 1.1 2005/01/22 18:21:40 rogeeff
+// moved sharable staff into utils
+//
+// ***************************************************************************
+
+#endif // BOOST_INPUT_ITERATOR_FACADE_HPP_071894GER
+
diff --git a/boost/boost/test/utils/iterator/istream_line_iterator.hpp b/boost/boost/test/utils/iterator/istream_line_iterator.hpp
new file mode 100644
index 00000000000..e819a826f1e
--- /dev/null
+++ b/boost/boost/test/utils/iterator/istream_line_iterator.hpp
@@ -0,0 +1,121 @@
+// (C) Copyright Gennadiy Rozental 2004-2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: istream_line_iterator.hpp,v $
+//
+// Version : $Revision: 1.5 $
+//
+// Description :
+// ***************************************************************************
+
+#ifndef BOOST_ISTREAM_LINE_ITERATOR_HPP_071894GER
+#define BOOST_ISTREAM_LINE_ITERATOR_HPP_071894GER
+
+// Boost
+#include <boost/test/utils/basic_cstring/basic_cstring.hpp>
+#include <boost/test/utils/iterator/input_iterator_facade.hpp>
+
+// STL
+#include <iosfwd>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace boost {
+
+namespace unit_test {
+
+// ************************************************************************** //
+// ************** basic_istream_line_iterator ************** //
+// ************************************************************************** //
+
+// !! Should we support policy based delimitation
+
+template<typename CharT>
+class basic_istream_line_iterator
+: public input_iterator_facade<basic_istream_line_iterator<CharT>,
+ std::basic_string<CharT>,
+ basic_cstring<CharT const> > {
+ typedef input_iterator_facade<basic_istream_line_iterator<CharT>,
+ std::basic_string<CharT>,
+ basic_cstring<CharT const> > base;
+#ifdef BOOST_CLASSIC_IOSTREAMS
+ typedef std::istream istream_type;
+#else
+ typedef std::basic_istream<CharT> istream_type;
+#endif
+public:
+ // Constructors
+ basic_istream_line_iterator() {}
+ basic_istream_line_iterator( istream_type& input, CharT delimeter )
+ : m_input_stream( &input ), m_delimeter( delimeter )
+ {
+ this->init();
+ }
+ explicit basic_istream_line_iterator( istream_type& input )
+ : m_input_stream( &input )
+#if BOOST_WORKAROUND(__GNUC__, < 3) && !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION)
+ , m_delimeter( '\n' )
+#else
+ , m_delimeter( input.widen( '\n' ) )
+#endif
+ {
+ this->init();
+ }
+
+private:
+ friend class input_iterator_core_access;
+
+ // increment implementation
+ bool get()
+ {
+ return std::getline( *m_input_stream, this->m_value, m_delimeter );
+ }
+
+ // Data members
+ istream_type* m_input_stream;
+ CharT m_delimeter;
+};
+
+typedef basic_istream_line_iterator<char> istream_line_iterator;
+typedef basic_istream_line_iterator<wchar_t> wistream_line_iterator;
+
+} // namespace unit_test
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: istream_line_iterator.hpp,v $
+// Revision 1.5 2005/12/14 05:01:13 rogeeff
+// *** empty log message ***
+//
+// Revision 1.4 2005/02/20 08:27:09 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// Revision 1.3 2005/02/01 06:40:08 rogeeff
+// copyright update
+// old log entries removed
+// minor stilistic changes
+// depricated tools removed
+//
+// Revision 1.2 2005/01/22 19:22:14 rogeeff
+// implementation moved into headers section to eliminate dependency of included/minimal component on src directory
+//
+// Revision 1.1 2005/01/22 18:21:40 rogeeff
+// moved sharable staff into utils
+//
+// ***************************************************************************
+
+#endif // BOOST_ISTREAM_LINE_ITERATOR_HPP_071894GER
+
diff --git a/boost/boost/test/utils/iterator/token_iterator.hpp b/boost/boost/test/utils/iterator/token_iterator.hpp
new file mode 100644
index 00000000000..4d3b658b2b6
--- /dev/null
+++ b/boost/boost/test/utils/iterator/token_iterator.hpp
@@ -0,0 +1,456 @@
+// (C) Copyright Gennadiy Rozental 2004-2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: token_iterator.hpp,v $
+//
+// Version : $Revision: 1.9 $
+//
+// Description : token iterator for string and range tokenization
+// ***************************************************************************
+
+#ifndef BOOST_TOKEN_ITERATOR_HPP_071894GER
+#define BOOST_TOKEN_ITERATOR_HPP_071894GER
+
+// Boost
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+#include <boost/iterator/iterator_categories.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+
+#include <boost/test/utils/iterator/input_iterator_facade.hpp>
+#include <boost/test/utils/basic_cstring/basic_cstring.hpp>
+#include <boost/test/utils/named_params.hpp>
+#include <boost/test/utils/foreach.hpp>
+
+// STL
+#include <iosfwd>
+#include <cctype>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+#ifdef BOOST_NO_STDC_NAMESPACE
+namespace std{ using ::ispunct; using ::isspace; }
+#endif
+
+namespace boost {
+
+namespace unit_test {
+
+// ************************************************************************** //
+// ************** ti_delimeter_type ************** //
+// ************************************************************************** //
+
+enum ti_delimeter_type {
+ dt_char, // character is delimeter if it among explicit list of some characters
+ dt_ispunct, // character is delimeter if it satisfies ispunct functor
+ dt_isspace, // character is delimeter if it satisfies isspace functor
+ dt_none // no character is delimeter
+};
+
+namespace ut_detail {
+
+// ************************************************************************** //
+// ************** default_char_compare ************** //
+// ************************************************************************** //
+
+template<typename CharT>
+class default_char_compare {
+public:
+ bool operator()( CharT c1, CharT c2 )
+ {
+#ifdef BOOST_CLASSIC_IOSTREAMS
+ return std::string_char_traits<CharT>::eq( c1, c2 );
+#else
+ return std::char_traits<CharT>::eq( c1, c2 );
+#endif
+ }
+};
+
+// ************************************************************************** //
+// ************** delim_policy ************** //
+// ************************************************************************** //
+
+template<typename CharT,typename CharCompare>
+class delim_policy {
+ typedef basic_cstring<CharT const> cstring;
+public:
+ // Constructor
+ explicit delim_policy( ti_delimeter_type t = dt_char, cstring d = cstring() )
+ : m_type( t )
+ {
+ set_delimeters( d );
+ }
+
+ void set_delimeters( ti_delimeter_type t ) { m_type = t; }
+ template<typename Src>
+ void set_delimeters( Src d )
+ {
+ nfp::optionally_assign( m_delimeters, d );
+
+ if( !m_delimeters.is_empty() )
+ m_type = dt_char;
+ }
+
+ bool operator()( CharT c )
+ {
+ switch( m_type ) {
+ case dt_char: {
+ BOOST_TEST_FOREACH( CharT, delim, m_delimeters )
+ if( CharCompare()( delim, c ) )
+ return true;
+
+ return false;
+ }
+ case dt_ispunct:
+ return (std::ispunct)( c ) != 0;
+ case dt_isspace:
+ return (std::isspace)( c ) != 0;
+ case dt_none:
+ return false;
+ }
+
+ return false;
+ }
+
+private:
+ // Data members
+ cstring m_delimeters;
+ ti_delimeter_type m_type;
+};
+
+// ************************************************************************** //
+// ************** token_assigner ************** //
+// ************************************************************************** //
+
+template<typename TraversalTag>
+struct token_assigner {
+#if BOOST_WORKAROUND( BOOST_DINKUMWARE_STDLIB, < 306 )
+ template<typename Iterator, typename C, typename T>
+ static void assign( Iterator b, Iterator e, std::basic_string<C,T>& t )
+ { for( ; b != e; ++b ) t += *b; }
+
+ template<typename Iterator, typename C>
+ static void assign( Iterator b, Iterator e, basic_cstring<C>& t ) { t.assign( b, e ); }
+#else
+ template<typename Iterator, typename Token>
+ static void assign( Iterator b, Iterator e, Token& t ) { t.assign( b, e ); }
+#endif
+ template<typename Iterator, typename Token>
+ static void append_move( Iterator& b, Token& ) { ++b; }
+};
+
+//____________________________________________________________________________//
+
+template<>
+struct token_assigner<single_pass_traversal_tag> {
+ template<typename Iterator, typename Token>
+ static void assign( Iterator b, Iterator e, Token& t ) {}
+
+ template<typename Iterator, typename Token>
+ static void append_move( Iterator& b, Token& t ) { t += *b; ++b; }
+};
+
+} // namespace ut_detail
+
+// ************************************************************************** //
+// ************** modifiers ************** //
+// ************************************************************************** //
+
+namespace {
+nfp::keyword<struct dropped_delimeters_t > dropped_delimeters;
+nfp::keyword<struct kept_delimeters_t > kept_delimeters;
+nfp::typed_keyword<bool,struct keep_empty_tokens_t > keep_empty_tokens;
+nfp::typed_keyword<std::size_t,struct max_tokens_t > max_tokens;
+}
+
+// ************************************************************************** //
+// ************** token_iterator_base ************** //
+// ************************************************************************** //
+
+template<typename Derived,
+ typename CharT,
+ typename CharCompare = ut_detail::default_char_compare<CharT>,
+ typename ValueType = basic_cstring<CharT const>,
+ typename Reference = basic_cstring<CharT const>,
+ typename Traversal = forward_traversal_tag>
+class token_iterator_base
+: public input_iterator_facade<Derived,ValueType,Reference,Traversal> {
+ typedef basic_cstring<CharT const> cstring;
+ typedef ut_detail::delim_policy<CharT,CharCompare> delim_policy;
+ typedef input_iterator_facade<Derived,ValueType,Reference,Traversal> base;
+
+protected:
+ // Constructor
+ explicit token_iterator_base()
+ : m_is_dropped( dt_isspace )
+ , m_is_kept( dt_ispunct )
+ , m_keep_empty_tokens( false )
+ , m_tokens_left( (std::size_t)-1 )
+ , m_token_produced( false )
+ {
+ }
+
+ template<typename Modifier>
+ void
+ apply_modifier( Modifier const& m )
+ {
+ if( m.has( dropped_delimeters ) )
+ m_is_dropped.set_delimeters( m[dropped_delimeters] );
+
+ if( m.has( kept_delimeters ) )
+ m_is_kept.set_delimeters( m[kept_delimeters] );
+
+ if( m.has( keep_empty_tokens ) )
+ m_keep_empty_tokens = true;
+
+ nfp::optionally_assign( m_tokens_left, m, max_tokens );
+ }
+
+ template<typename Iter>
+ bool get( Iter& begin, Iter end )
+ {
+ typedef ut_detail::token_assigner<BOOST_DEDUCED_TYPENAME iterator_traversal<Iter>::type> Assigner;
+ Iter check_point;
+
+ this->m_value.clear();
+
+ if( !m_keep_empty_tokens ) {
+ while( begin != end && m_is_dropped( *begin ) )
+ ++begin;
+
+ if( begin == end )
+ return false;
+
+ check_point = begin;
+
+ if( m_tokens_left == 1 )
+ while( begin != end )
+ Assigner::append_move( begin, this->m_value );
+ else if( m_is_kept( *begin ) )
+ Assigner::append_move( begin, this->m_value );
+ else
+ while( begin != end && !m_is_dropped( *begin ) && !m_is_kept( *begin ) )
+ Assigner::append_move( begin, this->m_value );
+
+ --m_tokens_left;
+ }
+ else { // m_keep_empty_tokens is true
+ check_point = begin;
+
+ if( begin == end ) {
+ if( m_token_produced )
+ return false;
+
+ m_token_produced = true;
+ }
+ if( m_is_kept( *begin ) ) {
+ if( m_token_produced )
+ Assigner::append_move( begin, this->m_value );
+
+ m_token_produced = !m_token_produced;
+ }
+ else if( !m_token_produced && m_is_dropped( *begin ) )
+ m_token_produced = true;
+ else {
+ if( m_is_dropped( *begin ) )
+ check_point = ++begin;
+
+ while( begin != end && !m_is_dropped( *begin ) && !m_is_kept( *begin ) )
+ Assigner::append_move( begin, this->m_value );
+
+ m_token_produced = true;
+ }
+ }
+
+ Assigner::assign( check_point, begin, this->m_value );
+
+ return true;
+ }
+
+private:
+ // Data members
+ delim_policy m_is_dropped;
+ delim_policy m_is_kept;
+ bool m_keep_empty_tokens;
+ std::size_t m_tokens_left;
+ bool m_token_produced;
+};
+
+// ************************************************************************** //
+// ************** basic_string_token_iterator ************** //
+// ************************************************************************** //
+
+template<typename CharT,
+ typename CharCompare = ut_detail::default_char_compare<CharT> >
+class basic_string_token_iterator
+: public token_iterator_base<basic_string_token_iterator<CharT,CharCompare>,CharT,CharCompare> {
+ typedef basic_cstring<CharT const> cstring;
+ typedef token_iterator_base<basic_string_token_iterator<CharT,CharCompare>,CharT,CharCompare> base;
+public:
+ explicit basic_string_token_iterator() {}
+ explicit basic_string_token_iterator( cstring src )
+ : m_src( src )
+ {
+ this->init();
+ }
+
+ template<typename Src, typename Modifier>
+ basic_string_token_iterator( Src src, Modifier const& m )
+ : m_src( src )
+ {
+ this->apply_modifier( m );
+
+ this->init();
+ }
+
+private:
+ friend class input_iterator_core_access;
+
+ // input iterator implementation
+ bool get()
+ {
+ typename cstring::iterator begin = m_src.begin();
+ bool res = base::get( begin, m_src.end() );
+
+ m_src.assign( begin, m_src.end() );
+
+ return res;
+ }
+
+ // Data members
+ cstring m_src;
+};
+
+typedef basic_string_token_iterator<char> string_token_iterator;
+typedef basic_string_token_iterator<wchar_t> wstring_token_iterator;
+
+// ************************************************************************** //
+// ************** range_token_iterator ************** //
+// ************************************************************************** //
+
+template<typename Iter,
+ typename CharCompare = ut_detail::default_char_compare<BOOST_DEDUCED_TYPENAME iterator_value<Iter>::type>,
+ typename ValueType = std::basic_string<BOOST_DEDUCED_TYPENAME iterator_value<Iter>::type>,
+ typename Reference = ValueType const&>
+class range_token_iterator
+: public token_iterator_base<range_token_iterator<Iter,CharCompare,ValueType,Reference>,
+ typename iterator_value<Iter>::type,CharCompare,ValueType,Reference> {
+ typedef basic_cstring<typename ValueType::value_type> cstring;
+ typedef token_iterator_base<range_token_iterator<Iter,CharCompare,ValueType,Reference>,
+ typename iterator_value<Iter>::type,CharCompare,ValueType,Reference> base;
+public:
+ explicit range_token_iterator() {}
+ explicit range_token_iterator( Iter begin, Iter end = Iter() )
+ : m_begin( begin ), m_end( end )
+ {
+ this->init();
+ }
+ range_token_iterator( range_token_iterator const& rhs )
+ : base( rhs )
+ {
+ if( this->m_valid ) {
+ m_begin = rhs.m_begin;
+ m_end = rhs.m_end;
+ }
+ }
+
+ template<typename Modifier>
+ range_token_iterator( Iter begin, Iter end, Modifier const& m )
+ : m_begin( begin ), m_end( end )
+ {
+ this->apply_modifier( m );
+
+ this->init();
+ }
+
+private:
+ friend class input_iterator_core_access;
+
+ // input iterator implementation
+ bool get()
+ {
+ return base::get( m_begin, m_end );
+ }
+
+ // Data members
+ Iter m_begin;
+ Iter m_end;
+};
+
+// ************************************************************************** //
+// ************** make_range_token_iterator ************** //
+// ************************************************************************** //
+
+template<typename Iter>
+inline range_token_iterator<Iter>
+make_range_token_iterator( Iter begin, Iter end = Iter() )
+{
+ return range_token_iterator<Iter>( begin, end );
+}
+
+//____________________________________________________________________________//
+
+template<typename Iter,typename Modifier>
+inline range_token_iterator<Iter>
+make_range_token_iterator( Iter begin, Iter end, Modifier const& m )
+{
+ return range_token_iterator<Iter>( begin, end, m );
+}
+
+//____________________________________________________________________________//
+
+} // namespace unit_test
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: token_iterator.hpp,v $
+// Revision 1.9 2005/12/14 05:01:13 rogeeff
+// *** empty log message ***
+//
+// Revision 1.8 2005/06/16 05:58:26 rogeeff
+// make default constructed range token iterator copyable according ot standard
+//
+// Revision 1.7 2005/06/11 19:23:28 rogeeff
+// 1. Always use clear
+// reorder field in constructor to eliminate warning
+// remove cw workaround - doesn't seems to be needed
+//
+// Revision 1.6 2005/06/05 16:07:51 grafik
+// Work around CW-8 problem parsing the switch statement.
+//
+// Revision 1.5 2005/04/12 06:46:42 rogeeff
+// use named_param facilites
+//
+// Revision 1.4 2005/02/20 08:27:09 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// Revision 1.3 2005/02/01 06:40:08 rogeeff
+// copyright update
+// old log entries removed
+// minor stylitic changes
+// deprecated tools removed
+//
+// Revision 1.2 2005/01/22 19:22:14 rogeeff
+// implementation moved into headers section to eliminate dependency of included/minimal component on src directory
+//
+// Revision 1.1 2005/01/22 18:21:40 rogeeff
+// moved sharable staff into utils
+//
+// ***************************************************************************
+
+#endif // BOOST_TOKEN_ITERATOR_HPP_071894GER
+
diff --git a/boost/boost/test/utils/named_params.hpp b/boost/boost/test/utils/named_params.hpp
new file mode 100644
index 00000000000..955d5173b61
--- /dev/null
+++ b/boost/boost/test/utils/named_params.hpp
@@ -0,0 +1,341 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: named_params.hpp,v $
+//
+// Version : $Revision: 1.5 $
+//
+// Description : facilities for named function parameters support
+// ***************************************************************************
+
+#ifndef BOOST_TEST_NAMED_PARAM_022505GER
+#define BOOST_TEST_NAMED_PARAM_022505GER
+
+// Boost
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+// Boost.Test
+#include <boost/test/utils/rtti.hpp>
+#include <boost/test/utils/assign_op.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace boost {
+
+namespace nfp { // named function parameters
+
+// ************************************************************************** //
+// ************** forward declarations ************** //
+// ************************************************************************** //
+
+template<typename T, typename unique_id,typename RefType> struct named_parameter;
+template<typename unique_id,bool required> struct keyword;
+
+namespace nfp_detail {
+
+template<typename NP1,typename NP2> struct named_parameter_combine;
+
+// ************************************************************************** //
+// ************** access_to_invalid_parameter ************** //
+// ************************************************************************** //
+
+struct access_to_invalid_parameter {};
+
+//____________________________________________________________________________//
+
+inline void
+report_access_to_invalid_parameter()
+{
+ throw access_to_invalid_parameter();
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// ************** nil ************** //
+// ************************************************************************** //
+
+struct nil {
+ template<typename T>
+ operator T() const
+ { report_access_to_invalid_parameter(); static T* v = 0; return *v; }
+
+ template<typename Arg1>
+ nil operator()( Arg1 const& )
+ { report_access_to_invalid_parameter(); return nil(); }
+
+ template<typename Arg1,typename Arg2>
+ nil operator()( Arg1 const&, Arg2 const& )
+ { report_access_to_invalid_parameter(); return nil(); }
+
+ template<typename Arg1,typename Arg2,typename Arg3>
+ nil operator()( Arg1 const&, Arg2 const&, Arg3 const& )
+ { report_access_to_invalid_parameter(); return nil(); }
+
+ // Visitation support
+ template<typename Visitor>
+ void apply_to( Visitor& V ) const {}
+};
+
+// ************************************************************************** //
+// ************** named_parameter_base ************** //
+// ************************************************************************** //
+
+template<typename Derived>
+struct named_parameter_base {
+ template<typename NP>
+ named_parameter_combine<NP,Derived>
+ operator,( NP const& np ) const { return named_parameter_combine<NP,Derived>( np, *static_cast<Derived const*>(this) ); }
+};
+
+//____________________________________________________________________________//
+
+#if BOOST_WORKAROUND( __SUNPRO_CC, == 0x530 )
+
+struct unknown_id_helper {
+ template<typename UnknownId>
+ nil operator[]( keyword<UnknownId,false> kw ) const { return nil(); }
+
+ template<typename UnknownId>
+ bool has( keyword<UnknownId,false> ) const { return false; }
+};
+
+#endif
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// ************** named_parameter_combine ************** //
+// ************************************************************************** //
+
+template<typename NP, typename Rest = nil>
+struct named_parameter_combine : Rest, named_parameter_base<named_parameter_combine<NP,Rest> > {
+ typedef typename NP::ref_type res_type;
+ typedef named_parameter_combine<NP,Rest> self_type;
+
+ // Constructor
+ named_parameter_combine( NP const& np, Rest const& r )
+ : Rest( r ), m_param( np ) {}
+
+ // Access methods
+ res_type operator[]( keyword<typename NP::id,true> kw ) const { return m_param[kw]; }
+ res_type operator[]( keyword<typename NP::id,false> kw ) const { return m_param[kw]; }
+ using Rest::operator[];
+
+ bool has( keyword<typename NP::id,false> ) const { return true; }
+ using Rest::has;
+
+#if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3206))
+ template<typename NP>
+ named_parameter_combine<NP,self_type> operator,( NP const& np ) const
+ { return named_parameter_combine<NP,self_type>( np, *this ); }
+#else
+ using named_parameter_base<named_parameter_combine<NP,Rest> >::operator,;
+#endif
+
+ // Visitation support
+ template<typename Visitor>
+ void apply_to( Visitor& V ) const
+ {
+ m_param.apply_to( V );
+
+ Rest::apply_to( V );
+ }
+private:
+ // Data members
+ NP m_param;
+};
+
+} // namespace nfp_detail
+
+// ************************************************************************** //
+// ************** named_parameter_combine ************** //
+// ************************************************************************** //
+
+template<typename T, typename unique_id,typename ReferenceType=T&>
+struct named_parameter
+: nfp_detail::named_parameter_base<named_parameter<T, unique_id,ReferenceType> >
+#if BOOST_WORKAROUND( __SUNPRO_CC, == 0x530 )
+, nfp_detail::unknown_id_helper
+#endif
+{
+ typedef T data_type;
+ typedef ReferenceType ref_type;
+ typedef unique_id id;
+
+ // Constructor
+ explicit named_parameter( ref_type v ) : m_value( v ) {}
+
+ // Access methods
+ ref_type operator[]( keyword<unique_id,true> ) const { return m_value; }
+ ref_type operator[]( keyword<unique_id,false> ) const { return m_value; }
+#if BOOST_WORKAROUND( __SUNPRO_CC, == 0x530 )
+ using nfp_detail::unknown_id_helper::operator[];
+#else
+ template<typename UnknownId>
+ nfp_detail::nil operator[]( keyword<UnknownId,false> ) const { return nfp_detail::nil(); }
+#endif
+
+ bool has( keyword<unique_id,false> ) const { return true; }
+#if BOOST_WORKAROUND( __SUNPRO_CC, == 0x530 )
+ using nfp_detail::unknown_id_helper::has;
+#else
+ template<typename UnknownId>
+ bool has( keyword<UnknownId,false> ) const { return false; }
+#endif
+
+ // Visitation support
+ template<typename Visitor>
+ void apply_to( Visitor& V ) const
+ {
+ V.set_parameter( rtti::type_id<unique_id>(), m_value );
+ }
+
+private:
+ // Data members
+ ref_type m_value;
+};
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// ************** no_params ************** //
+// ************************************************************************** //
+
+namespace nfp_detail {
+typedef named_parameter<char, struct no_params_type_t,char> no_params_type;
+}
+
+namespace {
+nfp_detail::no_params_type no_params( '\0' );
+} // local namespace
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// ************** keyword ************** //
+// ************************************************************************** //
+
+template<typename unique_id, bool required = false>
+struct keyword {
+ typedef unique_id id;
+
+ template<typename T>
+ named_parameter<T const,unique_id>
+ operator=( T const& t ) const { return named_parameter<T const,unique_id>( t ); }
+
+ template<typename T>
+ named_parameter<T,unique_id>
+ operator=( T& t ) const { return named_parameter<T,unique_id>( t ); }
+
+ named_parameter<char const*,unique_id,char const*>
+ operator=( char const* t ) const { return named_parameter<char const*,unique_id,char const*>( t ); }
+};
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// ************** typed_keyword ************** //
+// ************************************************************************** //
+
+template<typename T, typename unique_id, bool required = false>
+struct typed_keyword : keyword<unique_id,required> {
+ named_parameter<T const,unique_id>
+ operator=( T const& t ) const { return named_parameter<T const,unique_id>( t ); }
+
+ named_parameter<T,unique_id>
+ operator=( T& t ) const { return named_parameter<T,unique_id>( t ); }
+};
+
+//____________________________________________________________________________//
+
+template<typename unique_id>
+struct typed_keyword<bool,unique_id,false>
+: keyword<unique_id,false>
+, named_parameter<bool,unique_id,bool> {
+ typedef unique_id id;
+
+ typed_keyword() : named_parameter<bool,unique_id,bool>( true ) {}
+
+ named_parameter<bool,unique_id,bool>
+ operator!() const { return named_parameter<bool,unique_id,bool>( false ); }
+};
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// ************** optionally_assign ************** //
+// ************************************************************************** //
+
+template<typename T>
+inline void
+optionally_assign( T&, nfp_detail::nil )
+{
+ nfp_detail::report_access_to_invalid_parameter();
+}
+
+//____________________________________________________________________________//
+
+template<typename T, typename Source>
+inline void
+#if BOOST_WORKAROUND( __MWERKS__, BOOST_TESTED_AT( 0x3003 ) ) \
+ || BOOST_WORKAROUND( __DECCXX_VER, BOOST_TESTED_AT(60590042) )
+optionally_assign( T& target, Source src )
+#else
+optionally_assign( T& target, Source const& src )
+#endif
+{
+ using namespace unit_test;
+
+ assign_op( target, src, 0 );
+}
+
+//____________________________________________________________________________//
+
+template<typename T, typename Params, typename Keyword>
+inline void
+optionally_assign( T& target, Params const& p, Keyword k )
+{
+ if( p.has(k) )
+ optionally_assign( target, p[k] );
+}
+
+//____________________________________________________________________________//
+
+} // namespace nfp
+
+} // namespace boost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History:
+//
+// $Log: named_params.hpp,v $
+// Revision 1.5 2005/12/14 05:01:13 rogeeff
+// *** empty log message ***
+//
+// Revision 1.4 2005/06/13 10:35:08 schoepflin
+// Enable optionally_assign() overload workaround for Tru64/CXX-6.5 as well.
+//
+// Revision 1.3 2005/06/05 18:10:59 grafik
+// named_param.hpp; Work around CW not handling operator, using declaration, by using a real operator,().
+// token_iterator_test.cpp; Work around CW-8 confused with array initialization.
+//
+// Revision 1.2 2005/05/03 05:02:49 rogeeff
+// como fixes
+//
+// Revision 1.1 2005/04/12 06:48:12 rogeeff
+// Runtime.Param library initial commit
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_NAMED_PARAM_022505GER
+
diff --git a/boost/boost/test/utils/nullstream.hpp b/boost/boost/test/utils/nullstream.hpp
new file mode 100644
index 00000000000..8e69ff99909
--- /dev/null
+++ b/boost/boost/test/utils/nullstream.hpp
@@ -0,0 +1,121 @@
+// (C) Copyright Gennadiy Rozental 2002-2005.
+// (C) Copyright Daryle Walker 2000-2001.
+// 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/test for the library home page.
+//
+// File : $RCSfile: nullstream.hpp,v $
+//
+// Version : $Revision: 1.4 $
+//
+// Description : simulate /dev/null stream
+// ***************************************************************************
+
+#ifndef BOOST_NULLSTREAM_HPP_071894GER
+#define BOOST_NULLSTREAM_HPP_071894GER
+
+#include <ostream> // for std::basic_ostream
+#include <streambuf> // for std::basic_streambuf
+#include <string> // for std::char_traits
+
+#include <boost/utility/base_from_member.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace boost {
+
+// ************************************************************************** //
+// ************** basic_nullbuf ************** //
+// ************************************************************************** //
+// Class for a buffer that reads nothing and writes to nothing.
+// Idea from an Usenet post by Tom <the_wid@my-deja.com> at
+// 27 Oct 2000 14:06:21 GMT on comp.lang.c++.
+
+template<typename CharType, class CharTraits = ::std::char_traits<CharType> >
+class basic_nullbuf : public ::std::basic_streambuf<CharType, CharTraits> {
+ typedef ::std::basic_streambuf<CharType, CharTraits> base_type;
+public:
+ // Types
+ typedef typename base_type::char_type char_type;
+ typedef typename base_type::traits_type traits_type;
+ typedef typename base_type::int_type int_type;
+ typedef typename base_type::pos_type pos_type;
+ typedef typename base_type::off_type off_type;
+
+ // Use automatic default constructor and destructor
+
+protected:
+ // The default implementations of the miscellaneous virtual
+ // member functions are sufficient.
+
+ // The default implementations of the input & putback virtual
+ // member functions, being nowhere but EOF, are sufficient.
+
+ // The output virtual member functions need to be changed to
+ // accept anything without any problems, instead of being at EOF.
+ virtual ::std::streamsize xsputn( char_type const* /*s*/, ::std::streamsize n ) { return n; } // "s" is unused
+ virtual int_type overflow( int_type c = traits_type::eof() ) { return traits_type::not_eof( c ); }
+};
+
+typedef basic_nullbuf<char> nullbuf;
+typedef basic_nullbuf<wchar_t> wnullbuf;
+
+// ************************************************************************** //
+// ************** basic_onullstream ************** //
+// ************************************************************************** //
+// Output streams based on basic_nullbuf.
+
+#ifdef BOOST_MSVC
+# pragma warning(push)
+# pragma warning(disable: 4355) // 'this' : used in base member initializer list
+#endif
+
+template< typename CharType, class CharTraits = ::std::char_traits<CharType> >
+class basic_onullstream : private boost::base_from_member<basic_nullbuf<CharType, CharTraits> >
+ , public ::std::basic_ostream<CharType, CharTraits> {
+ typedef boost::base_from_member<basic_nullbuf<CharType, CharTraits> > pbase_type;
+ typedef ::std::basic_ostream<CharType, CharTraits> base_type;
+public:
+ // Constructor
+ basic_onullstream() : pbase_type(), base_type( &this->pbase_type::member ) {}
+};
+
+#ifdef BOOST_MSVC
+# pragma warning(default: 4355)
+#endif
+
+typedef basic_onullstream<char> onullstream;
+typedef basic_onullstream<wchar_t> wonullstream;
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: nullstream.hpp,v $
+// Revision 1.4 2005/02/20 08:27:08 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// Revision 1.3 2005/02/01 06:40:07 rogeeff
+// copyright update
+// old log entries removed
+// minor stilistic changes
+// depricated tools removed
+//
+// Revision 1.2 2005/01/30 01:42:49 rogeeff
+// warnings suppressed
+//
+// Revision 1.1 2005/01/22 18:21:40 rogeeff
+// moved sharable staff into utils
+//
+// ***************************************************************************
+
+#endif // BOOST_NULLSTREAM_HPP_071894GER
diff --git a/boost/boost/test/utils/rtti.hpp b/boost/boost/test/utils/rtti.hpp
new file mode 100644
index 00000000000..7976bc64d01
--- /dev/null
+++ b/boost/boost/test/utils/rtti.hpp
@@ -0,0 +1,76 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: rtti.hpp,v $
+//
+// Version : $Revision: 1.2 $
+//
+// Description : simple facilities for accessing type information at runtime
+// ***************************************************************************
+
+#ifndef BOOST_TEST_RTTI_HPP_062604GER
+#define BOOST_TEST_RTTI_HPP_062604GER
+
+#include <cstddef>
+
+namespace boost {
+
+namespace rtti {
+
+// ************************************************************************** //
+// ************** rtti::type_id ************** //
+// ************************************************************************** //
+
+typedef std::ptrdiff_t id_t;
+
+namespace rtti_detail {
+
+template<typename T>
+struct rttid_holder {
+ static id_t id() { return reinterpret_cast<id_t>( &inst() ); }
+
+private:
+ struct rttid {};
+
+ static rttid const& inst() { static rttid s_inst; return s_inst; }
+};
+
+} // namespace rtti_detail
+
+//____________________________________________________________________________//
+
+template<typename T>
+inline id_t
+type_id()
+{
+ return rtti_detail::rttid_holder<T>::id();
+}
+
+//____________________________________________________________________________//
+
+#define BOOST_RTTI_SWITCH( type_id_ ) if( ::boost::rtti::id_t switch_by_id = type_id_ )
+#define BOOST_RTTI_CASE( type ) if( switch_by_id == ::boost::rtti::type_id<type>() )
+
+//____________________________________________________________________________//
+
+} // namespace rtti
+
+} // namespace boost
+
+// ************************************************************************** //
+// Revision History:
+//
+// $Log: rtti.hpp,v $
+// Revision 1.2 2005/05/15 06:45:32 rogeeff
+// *** empty log message ***
+//
+// Revision 1.1 2005/04/12 06:48:12 rogeeff
+// Runtime.Param library initial commit
+//
+// ************************************************************************** //
+
+#endif // BOOST_RT_RTTI_HPP_062604GER
diff --git a/boost/boost/test/utils/runtime/argument.hpp b/boost/boost/test/utils/runtime/argument.hpp
new file mode 100644
index 00000000000..c5b8509c913
--- /dev/null
+++ b/boost/boost/test/utils/runtime/argument.hpp
@@ -0,0 +1,115 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: argument.hpp,v $
+//
+// Version : $Revision: 1.2 $
+//
+// Description : model of actual argument (both typed and abstract interface)
+// ***************************************************************************
+
+#ifndef BOOST_RT_ARGUMENT_HPP_062604GER
+#define BOOST_RT_ARGUMENT_HPP_062604GER
+
+// Boost.Runtime.Parameter
+#include <boost/test/utils/runtime/config.hpp>
+#include <boost/test/utils/runtime/fwd.hpp>
+#include <boost/test/utils/runtime/validation.hpp>
+
+// Boost.Test
+#include <boost/test/utils/class_properties.hpp>
+#include <boost/test/utils/rtti.hpp>
+
+// STL
+#include <cassert>
+
+namespace boost {
+
+namespace BOOST_RT_PARAM_NAMESPACE {
+
+// ************************************************************************** //
+// ************** runtime::argument ************** //
+// ************************************************************************** //
+
+class argument {
+public:
+ // Constructor
+ argument( parameter const& p, rtti::id_t value_type )
+ : p_formal_parameter( p )
+ , p_value_type( value_type )
+ {}
+
+ // Destructor
+ virtual ~argument() {}
+
+ // Public properties
+ unit_test::readonly_property<parameter const&> p_formal_parameter;
+ unit_test::readonly_property<rtti::id_t> p_value_type;
+};
+
+// ************************************************************************** //
+// ************** runtime::typed_argument ************** //
+// ************************************************************************** //
+
+template<typename T>
+class typed_argument : public argument {
+public:
+ // Constructor
+ explicit typed_argument( parameter const& p )
+ : argument( p, rtti::type_id<T>() )
+ {}
+ typed_argument( parameter const& p, T const& t )
+ : argument( p, rtti::type_id<T>() )
+ , p_value( t )
+ {}
+
+ unit_test::readwrite_property<T> p_value;
+};
+
+// ************************************************************************** //
+// ************** runtime::arg_value ************** //
+// ************************************************************************** //
+
+template<typename T>
+inline T const&
+arg_value( argument const& arg )
+{
+ assert( arg.p_value_type == rtti::type_id<T>() ); // detect logic error
+
+ return static_cast<typed_argument<T> const&>( arg ).p_value.value;
+}
+
+//____________________________________________________________________________//
+
+template<typename T>
+inline T&
+arg_value( argument& arg )
+{
+ assert( arg.p_value_type == rtti::type_id<T>() ); // detect logic error
+
+ return static_cast<typed_argument<T>&>( arg ).p_value.value;
+}
+
+//____________________________________________________________________________//
+
+} // namespace BOOST_RT_PARAM_NAMESPACE
+
+} // namespace boost
+
+// ************************************************************************** //
+// Revision History:
+//
+// $Log: argument.hpp,v $
+// Revision 1.2 2005/04/12 07:01:35 rogeeff
+// exclude polymorphic_downcast
+//
+// Revision 1.1 2005/04/12 06:42:42 rogeeff
+// Runtime.Param library initial commit
+//
+// ************************************************************************** //
+
+#endif // BOOST_RT_ARGUMENT_HPP_062604GER
diff --git a/boost/boost/test/utils/runtime/cla/argument_factory.hpp b/boost/boost/test/utils/runtime/cla/argument_factory.hpp
new file mode 100644
index 00000000000..826b65b2ddb
--- /dev/null
+++ b/boost/boost/test/utils/runtime/cla/argument_factory.hpp
@@ -0,0 +1,227 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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)
+
+// See http://www.boost.org/libs/test for the library home page.
+//
+// File : $RCSfile: argument_factory.hpp,v $
+//
+// Version : $Revision: 1.1 $
+//
+// Description : generic typed_argument_factory implementation
+// ***************************************************************************
+
+#ifndef BOOST_RT_CLA_ARGUMENT_FACTORY_HPP_062604GER
+#define BOOST_RT_CLA_ARGUMENT_FACTORY_HPP_062604GER
+
+// Boost.Runtime.Parameter
+#include <boost/test/utils/runtime/config.hpp>
+
+#include <boost/test/utils/runtime/fwd.hpp>
+#include <boost/test/utils/runtime/validation.hpp>
+#include <boost/test/utils/runtime/argument.hpp>
+#include <boost/test/utils/runtime/trace.hpp>
+#include <boost/test/utils/runtime/interpret_argument_value.hpp>
+
+#include <boost/test/utils/runtime/cla/fwd.hpp>
+#include <boost/test/utils/runtime/cla/value_generator.hpp>
+#include <boost/test/utils/runtime/cla/value_handler.hpp>
+#include <boost/test/utils/runtime/cla/validation.hpp>
+#include <boost/test/utils/runtime/cla/argv_traverser.hpp>
+#include <boost/test/utils/runtime/cla/detail/argument_value_usage.hpp>
+
+#include <boost/test/utils/runtime/cla/iface/argument_factory.hpp>
+
+// Boost.Test
+#include <boost/test/utils/callback.hpp>
+
+// Boost
+#include <boost/optional.hpp>
+
+namespace boost {
+
+namespace BOOST_RT_PARAM_NAMESPACE {
+
+namespace cla {
+
+// ************************************************************************** //
+// ************** default_value_interpreter ************** //
+// ************************************************************************** //
+
+namespace rt_cla_detail {
+
+struct default_value_interpreter {
+ template<typename T>
+ void operator()( argv_traverser& tr, boost::optional<T>& value )
+ {
+ if( interpret_argument_value( tr.token(), value, 0 ) )
+ tr.next_token();
+ }
+};
+
+} // namespace rt_cla_detail
+
+// ************************************************************************** //
+// ************** typed_argument_factory ************** //
+// ************************************************************************** //
+
+template<typename T>
+struct typed_argument_factory : public argument_factory {
+ // Constructor
+ typed_argument_factory()
+ : m_value_interpreter( rt_cla_detail::default_value_interpreter() )
+ {}
+ BOOST_RT_PARAM_UNNEEDED_VIRTUAL ~typed_argument_factory() {}
+
+ // properties modification
+ template<typename Modifier>
+ void accept_modifier( Modifier const& m )
+ {
+ optionally_assign( m_value_handler, m, handler );
+ optionally_assign( m_value_interpreter, m, interpreter );
+
+ if( m.has( default_value ) ) {
+ BOOST_RT_PARAM_VALIDATE_LOGIC( !m_value_generator,
+ BOOST_RT_PARAM_LITERAL( "multiple value generators for parameter" ) );
+
+ T const& dv_ref = m[default_value];
+ m_value_generator = rt_cla_detail::const_generator<T>( dv_ref );
+ }
+
+ if( m.has( default_refer_to ) ) {
+ BOOST_RT_PARAM_VALIDATE_LOGIC( !m_value_generator,
+ BOOST_RT_PARAM_LITERAL( "multiple value generators for parameter" ) );
+
+ cstring ref_id = m[default_refer_to];
+ m_value_generator = rt_cla_detail::ref_generator<T>( ref_id );
+ }
+
+ if( m.has( assign_to ) ) {
+ BOOST_RT_PARAM_VALIDATE_LOGIC( !m_value_handler,
+ BOOST_RT_PARAM_LITERAL( "multiple value handlers for parameter" ) );
+
+ m_value_handler = rt_cla_detail::assigner<T>( m[assign_to] );
+ }
+ }
+
+ // Argument factory implementation
+ virtual argument_ptr produce_using( parameter& p, argv_traverser& tr );
+ virtual argument_ptr produce_using( parameter& p, parser const& );
+ virtual void argument_usage_info( format_stream& fs );
+
+// !! private?
+ // Data members
+ unit_test::callback2<parameter const&,T&> m_value_handler;
+ unit_test::callback2<parser const&,boost::optional<T>&> m_value_generator;
+ unit_test::callback2<argv_traverser&,boost::optional<T>&> m_value_interpreter;
+};
+
+//____________________________________________________________________________//
+
+template<typename T>
+inline argument_ptr
+typed_argument_factory<T>::produce_using( parameter& p, argv_traverser& tr )
+{
+ boost::optional<T> value;
+
+ try {
+ m_value_interpreter( tr, value );
+ }
+ catch( ... ) { // !! should we do that?
+ BOOST_RT_PARAM_TRACE( "Fail to parse argument value" );
+
+ if( !p.p_optional_value )
+ throw;
+ }
+
+ argument_ptr arg = p.actual_argument();
+
+ BOOST_RT_CLA_VALIDATE_INPUT( !!value || p.p_optional_value, tr,
+ BOOST_RT_PARAM_LITERAL( "Argument value missing for parameter " ) << p.id_2_report() );
+
+ BOOST_RT_CLA_VALIDATE_INPUT( !arg || p.p_multiplicable, tr,
+ BOOST_RT_PARAM_LITERAL( "Unexpected repetition of the parameter " ) << p.id_2_report() );
+
+ if( !!value && !!m_value_handler )
+ m_value_handler( p, *value );
+
+ if( !p.p_multiplicable )
+ arg.reset( p.p_optional_value
+ ? (argument*)new typed_argument<boost::optional<T> >( p, value )
+ : (argument*)new typed_argument<T>( p, *value ) );
+ else {
+ typedef std::list<boost::optional<T> > optional_list;
+
+ if( !arg )
+ arg.reset( p.p_optional_value
+ ? (argument*)new typed_argument<optional_list>( p )
+ : (argument*)new typed_argument<std::list<T> >( p ) );
+
+ if( p.p_optional_value ) {
+ optional_list& values = arg_value<optional_list>( *arg );
+
+ values.push_back( value );
+ }
+ else {
+ std::list<T>& values = arg_value<std::list<T> >( *arg );
+
+ values.push_back( *value );
+ }
+ }
+
+ return arg;
+}
+
+//____________________________________________________________________________//
+
+template<typename T>
+inline argument_ptr
+typed_argument_factory<T>::produce_using( parameter& p, parser const& pa )
+{
+ argument_ptr arg;
+
+ if( !m_value_generator )
+ return arg;
+
+ boost::optional<T> value;
+ m_value_generator( pa, value );
+
+ if( !value )
+ return arg;
+
+ if( !!m_value_handler )
+ m_value_handler( p, *value );
+
+ arg.reset( new typed_argument<T>( p, *value ) );
+
+ return arg;
+}
+
+//____________________________________________________________________________//
+
+template<typename T>
+inline void
+typed_argument_factory<T>::argument_usage_info( format_stream& fs )
+{
+ rt_cla_detail::argument_value_usage( fs, 0, (T*)0 );
+}
+
+//____________________________________________________________________________//
+
+} // namespace boost
+
+} // namespace BOOST_RT_PARAM_NAMESPACE
+
+} // namespace cla
+
+// ************************************************************************** //
+// Revision History:
+//
+// $Log: argument_factory.hpp,v $
+// Revision 1.1 2005/04/12 06:42:42 rogeeff
+// Runtime.Param library initial commit
+//
+// ************************************************************************** //
+
+#endif // BOOST_RT_CLA_ARGUMENT_FACTORY_HPP_062604GER
diff --git a/boost/boost/test/utils/runtime/cla/argv_traverser.cpp b/boost/boost/test/utils/runtime/cla/argv_traverser.cpp
new file mode 100644
index 00000000000..6d37e87d266
--- /dev/null
+++ b/boost/boost/test/utils/runtime/cla/argv_traverser.cpp
@@ -0,0 +1,25 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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)
+
+// See http://www.boost.org/libs/test for the library home page.
+//
+// File : $RCSfile: argv_traverser.cpp,v $
+//
+// Version : $Revision: 1.1 $
+//
+// Description : offline implementation for argc/argv traverser
+// ***************************************************************************
+
+#define BOOST_RT_PARAM_INLINE
+#include <boost/test/utils/runtime/cla/argv_traverser.ipp>
+
+// ************************************************************************** //
+// Revision History:
+//
+// $Log: argv_traverser.cpp,v $
+// Revision 1.1 2005/04/12 06:42:42 rogeeff
+// Runtime.Param library initial commit
+//
+// ************************************************************************** //
diff --git a/boost/boost/test/utils/runtime/cla/argv_traverser.hpp b/boost/boost/test/utils/runtime/cla/argv_traverser.hpp
new file mode 100644
index 00000000000..fb6839387af
--- /dev/null
+++ b/boost/boost/test/utils/runtime/cla/argv_traverser.hpp
@@ -0,0 +1,107 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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)
+
+// See http://www.boost.org/libs/test for the library home page.
+//
+// File : $RCSfile: argv_traverser.hpp,v $
+//
+// Version : $Revision: 1.1 $
+//
+// Description : defines facility to hide input traversing details
+// ***************************************************************************
+
+#ifndef BOOST_RT_CLA_ARGV_TRAVERSER_HPP_062604GER
+#define BOOST_RT_CLA_ARGV_TRAVERSER_HPP_062604GER
+
+// Boost.Runtime.Parameter
+#include <boost/test/utils/runtime/config.hpp>
+
+// Boost.Test
+#include <boost/test/utils/class_properties.hpp>
+
+// Boost
+#include <boost/noncopyable.hpp>
+#include <boost/shared_array.hpp>
+
+namespace boost {
+
+namespace BOOST_RT_PARAM_NAMESPACE {
+
+namespace cla {
+
+// ************************************************************************** //
+// ************** runtime::cla::argv_traverser ************** //
+// ************************************************************************** //
+
+class argv_traverser : noncopyable {
+ class parser;
+public:
+ // Constructor
+ argv_traverser();
+
+ // public_properties
+ unit_test::readwrite_property<bool> p_ignore_mismatch;
+ unit_test::readwrite_property<char_type> p_separator;
+
+ // argc+argv <-> internal buffer exchange
+ void init( int argc, char_type** argv );
+ void remainder( int& argc, char_type** argv );
+
+ // token based parsing
+ cstring token() const;
+ void next_token();
+
+ // whole input parsing
+ cstring input() const;
+ void trim( std::size_t size );
+ bool match_front( cstring );
+ bool match_front( char_type c );
+ bool eoi() const;
+
+ // transaction logic support
+ void commit();
+ void rollback();
+
+ // current position access; used to save some reference points in input
+ std::size_t input_pos() const;
+
+ // returns true if mismatch detected during input parsing handled successfully
+ bool handle_mismatch();
+
+private:
+ // Data members
+ dstring m_buffer;
+ cstring m_work_buffer;
+
+ cstring m_token;
+ cstring::iterator m_commited_end;
+
+ shared_array<char_type> m_remainder;
+ std::size_t m_remainder_size;
+};
+
+} // namespace cla
+
+} // namespace BOOST_RT_PARAM_NAMESPACE
+
+} // namespace boost
+
+#ifndef BOOST_RT_PARAM_OFFLINE
+
+# define BOOST_RT_PARAM_INLINE inline
+# include <boost/test/utils/runtime/cla/argv_traverser.ipp>
+
+#endif
+
+// ************************************************************************** //
+// Revision History:
+//
+// $Log: argv_traverser.hpp,v $
+// Revision 1.1 2005/04/12 06:42:43 rogeeff
+// Runtime.Param library initial commit
+//
+// ************************************************************************** //
+
+#endif // BOOST_RT_CLA_ARGV_TRAVERSER_HPP_062604GER
diff --git a/boost/boost/test/utils/runtime/cla/argv_traverser.ipp b/boost/boost/test/utils/runtime/cla/argv_traverser.ipp
new file mode 100644
index 00000000000..199bddbff19
--- /dev/null
+++ b/boost/boost/test/utils/runtime/cla/argv_traverser.ipp
@@ -0,0 +1,224 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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)
+
+// See http://www.boost.org/libs/test for the library home page.
+//
+// File : $RCSfile: argv_traverser.ipp,v $
+//
+// Version : $Revision: 1.3 $
+//
+// Description : implements facility to hide input traversing details
+// ***************************************************************************
+
+#ifndef BOOST_RT_CLA_ARGV_TRAVERSER_IPP_070604GER
+#define BOOST_RT_CLA_ARGV_TRAVERSER_IPP_070604GER
+
+// Boost.Runtime.Parameter
+#include <boost/test/utils/runtime/trace.hpp>
+
+#include <boost/test/utils/runtime/cla/argv_traverser.hpp>
+
+// STL
+#include <memory>
+#include <cstring>
+
+#ifdef BOOST_NO_STDC_NAMESPACE
+namespace std { using ::memcpy; }
+#endif
+
+namespace boost {
+
+namespace BOOST_RT_PARAM_NAMESPACE {
+
+namespace cla {
+
+// ************************************************************************** //
+// ************** runtime::cla::argv_traverser ************** //
+// ************************************************************************** //
+
+BOOST_RT_PARAM_INLINE
+argv_traverser::argv_traverser()
+: p_ignore_mismatch( false ), p_separator( BOOST_RT_PARAM_LITERAL( ' ' ) )
+{
+}
+
+//____________________________________________________________________________//
+
+BOOST_RT_PARAM_INLINE void
+argv_traverser::init( int argc, char_type** argv )
+{
+ for( int index = 1; index < argc; ++index ) {
+ m_buffer += argv[index];
+ if( index != argc-1 )
+ m_buffer += BOOST_RT_PARAM_LITERAL( ' ' );
+ }
+
+ m_remainder.reset( new char_type[m_buffer.size()+1] );
+ m_remainder_size = 0;
+ m_work_buffer = m_buffer;
+ m_commited_end = m_work_buffer.begin();
+
+ BOOST_RT_PARAM_TRACE( "Input buffer: " << m_buffer );
+
+ next_token();
+}
+
+//____________________________________________________________________________//
+
+BOOST_RT_PARAM_INLINE void
+argv_traverser::remainder( int& argc, char_type** argv )
+{
+ argc = 1;
+ std::size_t pos = 0;
+ while(pos < m_remainder_size ) {
+ argv[argc++] = m_remainder.get() + pos;
+
+ pos = std::find( m_remainder.get() + pos, m_remainder.get() + m_remainder_size,
+ BOOST_RT_PARAM_LITERAL( ' ' ) ) - m_remainder.get();
+ m_remainder[pos++] = BOOST_RT_PARAM_LITERAL( '\0' );
+ }
+}
+
+//____________________________________________________________________________//
+
+BOOST_RT_PARAM_INLINE cstring
+argv_traverser::token() const
+{
+ return m_token;
+}
+
+//____________________________________________________________________________//
+
+BOOST_RT_PARAM_INLINE void
+argv_traverser::next_token()
+{
+ if( m_work_buffer.is_empty() )
+ return;
+
+ m_work_buffer.trim_left( m_token.size() ); // skip remainder of current token
+
+ if( m_work_buffer.size() != m_buffer.size() ) // !! is there a better way to identify first token
+ m_work_buffer.trim_left( 1 ); // skip separator if not first token;
+
+ m_token.assign( m_work_buffer.begin(),
+ std::find( m_work_buffer.begin(), m_work_buffer.end(), p_separator ) );
+}
+
+//____________________________________________________________________________//
+
+BOOST_RT_PARAM_INLINE cstring
+argv_traverser::input() const
+{
+ return m_work_buffer;
+}
+
+//____________________________________________________________________________//
+
+BOOST_RT_PARAM_INLINE void
+argv_traverser::trim( std::size_t size )
+{
+ m_work_buffer.trim_left( size );
+
+ if( size <= m_token.size() )
+ m_token.trim_left( size );
+ else {
+ m_token.assign( m_work_buffer.begin(),
+ std::find( m_work_buffer.begin(), m_work_buffer.end(), p_separator ) );
+ }
+}
+
+//____________________________________________________________________________//
+
+BOOST_RT_PARAM_INLINE bool
+argv_traverser::match_front( cstring str )
+{
+ return m_work_buffer.size() < str.size() ? false : m_work_buffer.substr( 0, str.size() ) == str;
+}
+
+//____________________________________________________________________________//
+
+BOOST_RT_PARAM_INLINE bool
+argv_traverser::match_front( char_type c )
+{
+ return first_char( m_work_buffer ) == c;
+}
+
+//____________________________________________________________________________//
+
+BOOST_RT_PARAM_INLINE bool
+argv_traverser::eoi() const
+{
+ return m_work_buffer.is_empty();
+}
+
+//____________________________________________________________________________//
+
+BOOST_RT_PARAM_INLINE void
+argv_traverser::commit()
+{
+ m_commited_end = m_work_buffer.begin();
+}
+
+//____________________________________________________________________________//
+
+BOOST_RT_PARAM_INLINE void
+argv_traverser::rollback()
+{
+ m_work_buffer.assign( m_commited_end, m_work_buffer.end() );
+ m_token.assign( m_work_buffer.begin(),
+ std::find( m_work_buffer.begin(), m_work_buffer.end(), p_separator ) );
+
+}
+
+//____________________________________________________________________________//
+
+BOOST_RT_PARAM_INLINE std::size_t
+argv_traverser::input_pos() const
+{
+ return m_work_buffer.begin() - m_commited_end;
+}
+
+//____________________________________________________________________________//
+
+BOOST_RT_PARAM_INLINE bool
+argv_traverser::handle_mismatch()
+{
+ if( !p_ignore_mismatch )
+ return false;
+
+ std::memcpy( m_remainder.get() + m_remainder_size, token().begin(), token().size() );
+ m_remainder_size += token().size();
+ m_remainder[m_remainder_size++] = p_separator;
+
+ next_token();
+ commit();
+
+ return true;
+}
+
+//____________________________________________________________________________//
+
+} // namespace cla
+
+} // namespace BOOST_RT_PARAM_NAMESPACE
+
+} // namespace boost
+
+// ************************************************************************** //
+// Revision History:
+//
+// $Log: argv_traverser.ipp,v $
+// Revision 1.3 2005/05/05 05:55:45 rogeeff
+// portability fixes
+//
+// Revision 1.2 2005/05/03 05:02:49 rogeeff
+// como fixes
+//
+// Revision 1.1 2005/04/12 06:42:43 rogeeff
+// Runtime.Param library initial commit
+//
+// ************************************************************************** //
+
+#endif // BOOST_RT_CLA_ARGV_TRAVERSER_IPP_070604GER
diff --git a/boost/boost/test/utils/runtime/cla/basic_parameter.hpp b/boost/boost/test/utils/runtime/cla/basic_parameter.hpp
new file mode 100644
index 00000000000..8a4e73bd6f7
--- /dev/null
+++ b/boost/boost/test/utils/runtime/cla/basic_parameter.hpp
@@ -0,0 +1,93 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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)
+
+// See http://www.boost.org/libs/test for the library home page.
+//
+// File : $RCSfile: basic_parameter.hpp,v $
+//
+// Version : $Revision: 1.1 $
+//
+// Description : generic custom parameter generator
+// ***************************************************************************
+
+#ifndef BOOST_RT_CLA_BASIC_PARAMETER_HPP_062604GER
+#define BOOST_RT_CLA_BASIC_PARAMETER_HPP_062604GER
+
+// Boost.Runtime.Parameter
+#include <boost/test/utils/runtime/config.hpp>
+
+#include <boost/test/utils/runtime/cla/typed_parameter.hpp>
+
+// Boost.Test
+#include <boost/test/utils/rtti.hpp>
+
+namespace boost {
+
+namespace BOOST_RT_PARAM_NAMESPACE {
+
+namespace cla {
+
+// ************************************************************************** //
+// ************** runtime::cla::basic_parameter ************** //
+// ************************************************************************** //
+
+template<typename T, typename IdPolicy>
+class basic_parameter : public typed_parameter<T> {
+public:
+ // Constructors
+ explicit basic_parameter( cstring n )
+ : typed_parameter<T>( m_id_policy )
+ {
+ this->accept_modifier( name = n );
+ }
+
+ // parameter properties modification
+ template<typename Modifier>
+ void accept_modifier( Modifier const& m )
+ {
+ typed_parameter<T>::accept_modifier( m );
+
+ m_id_policy.accept_modifier( m );
+ }
+
+private:
+ IdPolicy m_id_policy;
+};
+
+//____________________________________________________________________________//
+
+#define BOOST_RT_CLA_NAMED_PARAM_GENERATORS( param_type ) \
+template<typename T> \
+inline shared_ptr<param_type ## _t<T> > \
+param_type( cstring name = cstring() ) \
+{ \
+ return shared_ptr<param_type ## _t<T> >( new param_type ## _t<T>( name ) ); \
+} \
+ \
+inline shared_ptr<param_type ## _t<cstring> > \
+param_type( cstring name = cstring() ) \
+{ \
+ return shared_ptr<param_type ## _t<cstring> >( new param_type ## _t<cstring>( name ) ); \
+} \
+/**/
+
+//____________________________________________________________________________//
+
+} // namespace cla
+
+} // namespace BOOST_RT_PARAM_NAMESPACE
+
+} // namespace boost
+
+// ************************************************************************** //
+// Revision History:
+//
+// $Log: basic_parameter.hpp,v $
+// Revision 1.1 2005/04/12 06:42:43 rogeeff
+// Runtime.Param library initial commit
+//
+// ************************************************************************** //
+
+#endif // BOOST_RT_CLA_BASIC_PARAMETER_HPP_062604GER
diff --git a/boost/boost/test/utils/runtime/cla/char_parameter.cpp b/boost/boost/test/utils/runtime/cla/char_parameter.cpp
new file mode 100644
index 00000000000..6dbd7131a47
--- /dev/null
+++ b/boost/boost/test/utils/runtime/cla/char_parameter.cpp
@@ -0,0 +1,25 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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)
+
+// See http://www.boost.org/libs/test for the library home page.
+//
+// File : $RCSfile: char_parameter.cpp,v $
+//
+// Version : $Revision: 1.1 $
+//
+// Description : offline implementation of char parameter
+// ***************************************************************************
+
+#define BOOST_RT_PARAM_INLINE
+#include <boost/test/utils/runtime/cla/char_parameter.ipp>
+
+// ************************************************************************** //
+// Revision History:
+//
+// $Log: char_parameter.cpp,v $
+// Revision 1.1 2005/04/12 06:42:43 rogeeff
+// Runtime.Param library initial commit
+//
+// ************************************************************************** //
diff --git a/boost/boost/test/utils/runtime/cla/char_parameter.hpp b/boost/boost/test/utils/runtime/cla/char_parameter.hpp
new file mode 100644
index 00000000000..50b0a24b6bf
--- /dev/null
+++ b/boost/boost/test/utils/runtime/cla/char_parameter.hpp
@@ -0,0 +1,107 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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)
+
+// See http://www.boost.org/libs/test for the library home page.
+//
+// File : $RCSfile: char_parameter.hpp,v $
+//
+// Version : $Revision: 1.1 $
+//
+// Description : defines model of parameter with single char name
+// ***************************************************************************
+
+#ifndef BOOST_RT_CLA_CHAR_PARAMETER_HPP_062604GER
+#define BOOST_RT_CLA_CHAR_PARAMETER_HPP_062604GER
+
+// Boost.Runtime.Parameter
+#include <boost/test/utils/runtime/config.hpp>
+#include <boost/test/utils/runtime/validation.hpp>
+
+#include <boost/test/utils/runtime/cla/basic_parameter.hpp>
+#include <boost/test/utils/runtime/cla/id_policy.hpp>
+
+namespace boost {
+
+namespace BOOST_RT_PARAM_NAMESPACE {
+
+namespace cla {
+
+// ************************************************************************** //
+// ************** char_name_policy ************** //
+// ************************************************************************** //
+
+class char_name_policy : public basic_naming_policy {
+public:
+ // Constructor
+ char_name_policy();
+ BOOST_RT_PARAM_UNNEEDED_VIRTUAL ~char_name_policy() {}
+
+ // policy interface
+ virtual bool conflict_with( identification_policy const& ) const;
+
+ // Accept modifier
+ template<typename Modifier>
+ void accept_modifier( Modifier const& m )
+ {
+ basic_naming_policy::accept_modifier( m );
+
+ BOOST_RT_PARAM_VALIDATE_LOGIC( m_name.size() <= 1, "Invalid parameter name " << m_name );
+ }
+};
+
+// ************************************************************************** //
+// ************** runtime::cla::char_parameter ************** //
+// ************************************************************************** //
+
+template<typename T>
+class char_parameter_t : public basic_parameter<T,char_name_policy> {
+ typedef basic_parameter<T,char_name_policy> base;
+public:
+ // Constructors
+ explicit char_parameter_t( char_type name ) : base( cstring( &name, 1 ) ) {}
+};
+
+//____________________________________________________________________________//
+
+template<typename T>
+inline shared_ptr<char_parameter_t<T> >
+char_parameter( char_type name )
+{
+ return shared_ptr<char_parameter_t<T> >( new char_parameter_t<T>( name ) );
+}
+
+//____________________________________________________________________________//
+
+inline shared_ptr<char_parameter_t<cstring> >
+char_parameter( char_type name )
+{
+ return shared_ptr<char_parameter_t<cstring> >( new char_parameter_t<cstring>( name ) );
+}
+
+//____________________________________________________________________________//
+
+} // namespace cla
+
+} // namespace BOOST_RT_PARAM_NAMESPACE
+
+} // namespace boost
+
+#ifndef BOOST_RT_PARAM_OFFLINE
+
+# define BOOST_RT_PARAM_INLINE inline
+# include <boost/test/utils/runtime/cla/char_parameter.ipp>
+
+#endif
+
+// ************************************************************************** //
+// Revision History:
+//
+// $Log: char_parameter.hpp,v $
+// Revision 1.1 2005/04/12 06:42:43 rogeeff
+// Runtime.Param library initial commit
+//
+// ************************************************************************** //
+
+#endif // BOOST_RT_CLA_CHAR_PARAMETER_HPP_062604GER
diff --git a/boost/boost/test/utils/runtime/cla/char_parameter.ipp b/boost/boost/test/utils/runtime/cla/char_parameter.ipp
new file mode 100644
index 00000000000..3ee7c6ca0ad
--- /dev/null
+++ b/boost/boost/test/utils/runtime/cla/char_parameter.ipp
@@ -0,0 +1,69 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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)
+
+// See http://www.boost.org/libs/test for the library home page.
+//
+// File : $RCSfile: char_parameter.ipp,v $
+//
+// Version : $Revision: 1.2 $
+//
+// Description : implements model of parameter with single char name
+// ***************************************************************************
+
+#ifndef BOOST_RT_CLA_CHAR_PARAMETER_IPP_062904GER
+#define BOOST_RT_CLA_CHAR_PARAMETER_IPP_062904GER
+
+// Boost.Runtime.Parameter
+#include <boost/test/utils/runtime/config.hpp>
+
+#include <boost/test/utils/runtime/cla/char_parameter.hpp>
+
+namespace boost {
+
+namespace BOOST_RT_PARAM_NAMESPACE {
+
+namespace cla {
+
+// ************************************************************************** //
+// ************** char_name_policy ************** //
+// ************************************************************************** //
+
+BOOST_RT_PARAM_INLINE
+char_name_policy::char_name_policy()
+: basic_naming_policy( rtti::type_id<char_name_policy>() )
+{
+ assign_op( m_prefix, BOOST_RT_PARAM_CSTRING_LITERAL( "-" ), 0 );
+}
+
+//____________________________________________________________________________//
+
+BOOST_RT_PARAM_INLINE bool
+char_name_policy::conflict_with( identification_policy const& id ) const
+{
+ return id.p_type_id == p_type_id &&
+ m_name == static_cast<char_name_policy const&>( id ).m_name;
+}
+
+//____________________________________________________________________________//
+
+} // namespace cla
+
+} // namespace BOOST_RT_PARAM_NAMESPACE
+
+} // namespace boost
+
+// ************************************************************************** //
+// Revision History:
+//
+// $Log: char_parameter.ipp,v $
+// Revision 1.2 2005/04/12 07:01:36 rogeeff
+// exclude polymorphic_downcast
+//
+// Revision 1.1 2005/04/12 06:42:43 rogeeff
+// Runtime.Param library initial commit
+//
+// ************************************************************************** //
+
+#endif // BOOST_RT_CLA_CHAR_PARAMETER_IPP_062904GER
diff --git a/boost/boost/test/utils/runtime/cla/detail/argument_value_usage.hpp b/boost/boost/test/utils/runtime/cla/detail/argument_value_usage.hpp
new file mode 100644
index 00000000000..719c28bd44d
--- /dev/null
+++ b/boost/boost/test/utils/runtime/cla/detail/argument_value_usage.hpp
@@ -0,0 +1,91 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied warranty,
+// and with no claim as to its suitability for any purpose.
+
+// See http://www.boost.org for updates, documentation, and revision history.
+//
+// File : $RCSfile: argument_value_usage.hpp,v $
+//
+// Version : $Revision: 1.1 $
+//
+// Description : argument usage printing helpers
+// ***************************************************************************
+
+#ifndef BOOST_RT_CLA_ARGUMENT_VALUE_USAGE_HPP_062604GER
+#define BOOST_RT_CLA_ARGUMENT_VALUE_USAGE_HPP_062604GER
+
+// Boost.Runtime.Parameter
+#include <boost/test/utils/runtime/config.hpp>
+#include <boost/test/utils/runtime/cla/argv_traverser.hpp>
+
+// Boost.Test
+#include <boost/test/utils/basic_cstring/io.hpp>
+#include <boost/test/utils/basic_cstring/compare.hpp>
+
+#include <boost/lexical_cast.hpp>
+
+// STL
+// !! could we eliminate these includes?
+#include <list>
+
+namespace boost {
+
+namespace BOOST_RT_PARAM_NAMESPACE {
+
+namespace cla {
+
+namespace rt_cla_detail {
+
+// ************************************************************************** //
+// ************** argument_value_usage ************** //
+// ************************************************************************** //
+
+// generic case
+template<typename T>
+inline void
+argument_value_usage( format_stream& fs, long, T* = 0 )
+{
+ fs << BOOST_RT_PARAM_CSTRING_LITERAL( "<value>" );
+}
+
+//____________________________________________________________________________//
+
+// specialization for list of values
+template<typename T>
+inline void
+argument_value_usage( format_stream& fs, int, std::list<T>* = 0 )
+{
+ fs << BOOST_RT_PARAM_CSTRING_LITERAL( "(<value1>, ..., <valueN>)" );
+}
+
+//____________________________________________________________________________//
+
+// specialization for type bool
+inline void
+argument_value_usage( format_stream& fs, int, bool* = 0 )
+{
+ fs << BOOST_RT_PARAM_CSTRING_LITERAL( "[yes|y|no|n]" );
+}
+
+//____________________________________________________________________________//
+
+} // namespace rt_cla_detail
+
+} // namespace cla
+
+} // namespace BOOST_RT_PARAM_NAMESPACE
+
+} // namespace boost
+
+// ************************************************************************** //
+// Revision History:
+//
+// $Log: argument_value_usage.hpp,v $
+// Revision 1.1 2005/04/12 06:42:43 rogeeff
+// Runtime.Param library initial commit
+//
+// ************************************************************************** //
+
+#endif // BOOST_RT_CLA_ARGUMENT_VALUE_USAGE_HPP_062604GER
diff --git a/boost/boost/test/utils/runtime/cla/dual_name_parameter.cpp b/boost/boost/test/utils/runtime/cla/dual_name_parameter.cpp
new file mode 100644
index 00000000000..5ea1d3ba983
--- /dev/null
+++ b/boost/boost/test/utils/runtime/cla/dual_name_parameter.cpp
@@ -0,0 +1,25 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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)
+
+// See http://www.boost.org/libs/test for the library home page.
+//
+// File : $RCSfile: dual_name_parameter.cpp,v $
+//
+// Version : $Revision: 1.1 $
+//
+// Description : offline implementation of generic parameter with dual naming
+// ***************************************************************************
+
+#define BOOST_RT_PARAM_INLINE
+#include <boost/test/utils/runtime/cla/dual_name_parameter.ipp>
+
+// ************************************************************************** //
+// Revision History:
+//
+// $Log: dual_name_parameter.cpp,v $
+// Revision 1.1 2005/04/12 06:42:43 rogeeff
+// Runtime.Param library initial commit
+//
+// ************************************************************************** //
diff --git a/boost/boost/test/utils/runtime/cla/dual_name_parameter.hpp b/boost/boost/test/utils/runtime/cla/dual_name_parameter.hpp
new file mode 100644
index 00000000000..d9094222ac0
--- /dev/null
+++ b/boost/boost/test/utils/runtime/cla/dual_name_parameter.hpp
@@ -0,0 +1,97 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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)
+
+// See http://www.boost.org/libs/test for the library home page.
+//
+// File : $RCSfile: dual_name_parameter.hpp,v $
+//
+// Version : $Revision: 1.1 $
+//
+// Description : defines model of generic parameter with dual naming
+// ***************************************************************************
+
+#ifndef BOOST_RT_CLA_DUAL_NAME_PARAMETER_HPP_062604GER
+#define BOOST_RT_CLA_DUAL_NAME_PARAMETER_HPP_062604GER
+
+// Boost.Runtime.Parameter
+#include <boost/test/utils/runtime/config.hpp>
+
+#include <boost/test/utils/runtime/cla/named_parameter.hpp>
+#include <boost/test/utils/runtime/cla/char_parameter.hpp>
+
+namespace boost {
+
+namespace BOOST_RT_PARAM_NAMESPACE {
+
+namespace cla {
+
+// ************************************************************************** //
+// ************** dual_name_policy ************** //
+// ************************************************************************** //
+
+class dual_name_policy : public dual_id_policy<dual_name_policy,string_name_policy,char_name_policy> {
+public:
+ dual_name_policy();
+
+ // Accept modifer
+ template<typename Modifier>
+ void accept_modifier( Modifier const& m )
+ {
+ if( m.has( prefix ) )
+ set_prefix( m[prefix] );
+
+ if( m.has( name ) )
+ set_name( m[name] );
+
+ if( m.has( separator ) )
+ set_separator( m[separator] );
+ }
+private:
+ void set_prefix( cstring );
+ void set_name( cstring );
+ void set_separator( cstring );
+};
+
+// ************************************************************************** //
+// ************** runtime::cla::dual_name_parameter ************** //
+// ************************************************************************** //
+
+template<typename T>
+class dual_name_parameter_t : public basic_parameter<T,dual_name_policy> {
+ typedef basic_parameter<T,dual_name_policy> base;
+public:
+ // Constructors
+ explicit dual_name_parameter_t( cstring name ) : base( name ) {}
+};
+
+//____________________________________________________________________________//
+
+BOOST_RT_CLA_NAMED_PARAM_GENERATORS( dual_name_parameter )
+
+//____________________________________________________________________________//
+
+} // namespace cla
+
+} // namespace BOOST_RT_PARAM_NAMESPACE
+
+} // namespace boost
+
+#ifndef BOOST_RT_PARAM_OFFLINE
+
+# define BOOST_RT_PARAM_INLINE inline
+# include <boost/test/utils/runtime/cla/dual_name_parameter.ipp>
+
+#endif
+
+// ************************************************************************** //
+// Revision History:
+//
+// $Log: dual_name_parameter.hpp,v $
+// Revision 1.1 2005/04/12 06:42:43 rogeeff
+// Runtime.Param library initial commit
+//
+// ************************************************************************** //
+
+#endif // BOOST_RT_CLA_DUAL_NAME_PARAMETER_HPP_062604GER
diff --git a/boost/boost/test/utils/runtime/cla/dual_name_parameter.ipp b/boost/boost/test/utils/runtime/cla/dual_name_parameter.ipp
new file mode 100644
index 00000000000..8540ef6b828
--- /dev/null
+++ b/boost/boost/test/utils/runtime/cla/dual_name_parameter.ipp
@@ -0,0 +1,99 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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)
+
+// See http://www.boost.org/libs/test for the library home page.
+//
+// File : $RCSfile: dual_name_parameter.ipp,v $
+//
+// Version : $Revision: 1.1 $
+//
+// Description : implements model of generic parameter with dual naming
+// ***************************************************************************
+
+#ifndef BOOST_RT_CLA_DUAL_NAME_PARAMETER_IPP_062904GER
+#define BOOST_RT_CLA_DUAL_NAME_PARAMETER_IPP_062904GER
+
+// Boost.Runtime.Parameter
+#include <boost/test/utils/runtime/config.hpp>
+#include <boost/test/utils/runtime/validation.hpp>
+
+#include <boost/test/utils/runtime/cla/dual_name_parameter.hpp>
+
+namespace boost {
+
+namespace BOOST_RT_PARAM_NAMESPACE {
+
+namespace cla {
+
+// ************************************************************************** //
+// ************** dual_name_policy ************** //
+// ************************************************************************** //
+
+BOOST_RT_PARAM_INLINE
+dual_name_policy::dual_name_policy()
+{
+ m_primary.accept_modifier( prefix = BOOST_RT_PARAM_CSTRING_LITERAL( "--" ) );
+ m_secondary.accept_modifier( prefix = BOOST_RT_PARAM_CSTRING_LITERAL( "-" ) );
+}
+
+//____________________________________________________________________________//
+
+namespace {
+
+template<typename K>
+inline void
+split( string_name_policy& snp, char_name_policy& cnp, cstring src, K const& k )
+{
+ cstring::iterator sep = std::find( src.begin(), src.end(), BOOST_RT_PARAM_LITERAL( '|' ) );
+
+ if( sep != src.begin() )
+ snp.accept_modifier( k = cstring( src.begin(), sep ) );
+
+ if( sep != src.end() )
+ cnp.accept_modifier( k = cstring( sep+1, src.end() ) );
+}
+
+} // local namespace
+
+BOOST_RT_PARAM_INLINE void
+dual_name_policy::set_prefix( cstring src )
+{
+ split( m_primary, m_secondary, src, prefix );
+}
+
+//____________________________________________________________________________//
+
+BOOST_RT_PARAM_INLINE void
+dual_name_policy::set_name( cstring src )
+{
+ split( m_primary, m_secondary, src, name );
+}
+
+//____________________________________________________________________________//
+
+BOOST_RT_PARAM_INLINE void
+dual_name_policy::set_separator( cstring src )
+{
+ split( m_primary, m_secondary, src, separator );
+}
+
+//____________________________________________________________________________//
+
+} // namespace cla
+
+} // namespace BOOST_RT_PARAM_NAMESPACE
+
+} // namespace boost
+
+// ************************************************************************** //
+// Revision History:
+//
+// $Log: dual_name_parameter.ipp,v $
+// Revision 1.1 2005/04/12 06:42:43 rogeeff
+// Runtime.Param library initial commit
+//
+// ************************************************************************** //
+
+#endif // BOOST_RT_CLA_DUAL_NAME_PARAMETER_IPP_062904GER
diff --git a/boost/boost/test/utils/runtime/cla/fwd.hpp b/boost/boost/test/utils/runtime/cla/fwd.hpp
new file mode 100644
index 00000000000..7d203eaed62
--- /dev/null
+++ b/boost/boost/test/utils/runtime/cla/fwd.hpp
@@ -0,0 +1,64 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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)
+
+// See http://www.boost.org/libs/test for the library home page.
+//
+// File : $RCSfile: fwd.hpp,v $
+//
+// Version : $Revision: 1.1 $
+//
+// Description : cla subsystem forward declarations
+// ***************************************************************************
+
+#ifndef BOOST_RT_CLA_FWD_HPP_062604GER
+#define BOOST_RT_CLA_FWD_HPP_062604GER
+
+// Boost.Runtime.Parameter
+#include <boost/test/utils/runtime/config.hpp>
+
+// Boost
+#include <boost/shared_ptr.hpp>
+
+namespace boost {
+
+namespace BOOST_RT_PARAM_NAMESPACE {
+
+namespace cla {
+
+class parser;
+class parameter;
+typedef shared_ptr<parameter> parameter_ptr;
+class naming_policy;
+typedef shared_ptr<naming_policy> naming_policy_ptr;
+class argv_traverser;
+
+namespace rt_cla_detail {
+
+template<typename T> class const_generator;
+template<typename T> class ref_generator;
+
+template<typename T> class assigner;
+
+class named_parameter_base;
+class positional_parameter_base;
+
+} // namespace rt_cla_detail
+
+} // namespace cla
+
+} // namespace BOOST_RT_PARAM_NAMESPACE
+
+} // namespace boost
+
+// ************************************************************************** //
+// Revision History:
+//
+// $Log: fwd.hpp,v $
+// Revision 1.1 2005/04/12 06:42:43 rogeeff
+// Runtime.Param library initial commit
+//
+// ************************************************************************** //
+
+#endif // BOOST_RT_CLA_FWD_HPP_062604GER
diff --git a/boost/boost/test/utils/runtime/cla/id_policy.cpp b/boost/boost/test/utils/runtime/cla/id_policy.cpp
new file mode 100644
index 00000000000..c229fa86194
--- /dev/null
+++ b/boost/boost/test/utils/runtime/cla/id_policy.cpp
@@ -0,0 +1,25 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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)
+
+// See http://www.boost.org/libs/test for the library home page.
+//
+// File : $RCSfile: id_policy.cpp,v $
+//
+// Version : $Revision: 1.1 $
+//
+// Description : some generic identification policies offline implementation
+// ***************************************************************************
+
+#define BOOST_RT_PARAM_INLINE
+#include <boost/test/utils/runtime/cla/id_policy.ipp>
+
+// ************************************************************************** //
+// Revision History:
+//
+// $Log: id_policy.cpp,v $
+// Revision 1.1 2005/04/12 06:42:43 rogeeff
+// Runtime.Param library initial commit
+//
+// ************************************************************************** //
diff --git a/boost/boost/test/utils/runtime/cla/id_policy.hpp b/boost/boost/test/utils/runtime/cla/id_policy.hpp
new file mode 100644
index 00000000000..9d134b03e21
--- /dev/null
+++ b/boost/boost/test/utils/runtime/cla/id_policy.hpp
@@ -0,0 +1,146 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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)
+
+// See http://www.boost.org/libs/test for the library home page.
+//
+// File : $RCSfile: id_policy.hpp,v $
+//
+// Version : $Revision: 1.1 $
+//
+// Description : some generic identification policies definition
+// ***************************************************************************
+
+#ifndef BOOST_RT_CLA_ID_POLICY_HPP_062604GER
+#define BOOST_RT_CLA_ID_POLICY_HPP_062604GER
+
+// Boost.Runtime.Parameter
+#include <boost/test/utils/runtime/config.hpp>
+
+#include <boost/test/utils/runtime/cla/fwd.hpp>
+#include <boost/test/utils/runtime/cla/modifier.hpp>
+#include <boost/test/utils/runtime/cla/argv_traverser.hpp>
+
+#include <boost/test/utils/runtime/cla/iface/id_policy.hpp>
+
+// Boost.Test
+#include <boost/test/utils/class_properties.hpp>
+#include <boost/test/utils/rtti.hpp>
+
+namespace boost {
+
+namespace BOOST_RT_PARAM_NAMESPACE {
+
+namespace cla {
+
+// ************************************************************************** //
+// ************** naming_policy_base ************** //
+// ************************************************************************** //
+// model: <prefix> <name> <separtor>
+
+class basic_naming_policy : public identification_policy {
+public:
+ // Policy interface
+ virtual bool responds_to( cstring name ) const { return m_name == name; }
+ virtual cstring id_2_report() const { return m_name; }
+ virtual void usage_info( format_stream& fs ) const;
+ virtual bool matching( parameter const& p, argv_traverser& tr, bool primary ) const;
+
+ // Accept modifer
+ template<typename Modifier>
+ void accept_modifier( Modifier const& m )
+ {
+ nfp::optionally_assign( m_prefix, m, prefix );
+ nfp::optionally_assign( m_name, m, name );
+ nfp::optionally_assign( m_separator, m, separator );
+ }
+
+protected:
+ explicit basic_naming_policy( rtti::id_t const& dyn_type )
+ : identification_policy( dyn_type )
+ {}
+ BOOST_RT_PARAM_UNNEEDED_VIRTUAL ~basic_naming_policy() {}
+
+ // Naming policy interface
+ virtual bool match_prefix( argv_traverser& tr ) const;
+ virtual bool match_name( argv_traverser& tr ) const;
+ virtual bool match_separator( argv_traverser& tr ) const;
+
+ // Data members
+ dstring m_prefix;
+ dstring m_name;
+ dstring m_separator;
+};
+
+// ************************************************************************** //
+// ************** dual_id_policy ************** //
+// ************************************************************************** //
+
+template<typename MostDerived,typename PrimaryId,typename SecondId>
+class dual_id_policy : public identification_policy {
+public:
+ // Constructor
+ dual_id_policy()
+ : identification_policy( rtti::type_id<MostDerived>() )
+ , m_primary()
+ , m_secondary()
+ {}
+
+ // Policy interface
+ virtual bool responds_to( cstring name ) const
+ {
+ return m_primary.responds_to( name ) || m_secondary.responds_to( name );
+ }
+ virtual bool conflict_with( identification_policy const& id_p ) const
+ {
+ return m_primary.conflict_with( id_p ) || m_secondary.conflict_with( id_p );
+ }
+ virtual cstring id_2_report() const
+ {
+ return m_primary.id_2_report();
+ }
+ virtual void usage_info( format_stream& fs ) const
+ {
+ fs << BOOST_RT_PARAM_LITERAL( '{' );
+ m_primary.usage_info( fs );
+ fs << BOOST_RT_PARAM_LITERAL( '|' );
+ m_secondary.usage_info( fs );
+ fs << BOOST_RT_PARAM_LITERAL( '}' );
+ }
+ virtual bool matching( parameter const& p, argv_traverser& tr, bool primary ) const
+ {
+ return m_primary.matching( p, tr, primary ) || m_secondary.matching( p, tr, primary );
+ }
+
+protected:
+ BOOST_RT_PARAM_UNNEEDED_VIRTUAL ~dual_id_policy() {}
+
+ // Data members
+ PrimaryId m_primary;
+ SecondId m_secondary;
+};
+
+} // namespace cla
+
+} // namespace BOOST_RT_PARAM_NAMESPACE
+
+} // namespace boost
+
+#ifndef BOOST_RT_PARAM_OFFLINE
+
+# define BOOST_RT_PARAM_INLINE inline
+# include <boost/test/utils/runtime/cla/id_policy.ipp>
+
+#endif
+
+// ************************************************************************** //
+// Revision History:
+//
+// $Log: id_policy.hpp,v $
+// Revision 1.1 2005/04/12 06:42:43 rogeeff
+// Runtime.Param library initial commit
+//
+// ************************************************************************** //
+
+#endif // BOOST_RT_CLA_ID_POLICY_HPP_062604GER
diff --git a/boost/boost/test/utils/runtime/cla/id_policy.ipp b/boost/boost/test/utils/runtime/cla/id_policy.ipp
new file mode 100644
index 00000000000..2b35d5e7c2e
--- /dev/null
+++ b/boost/boost/test/utils/runtime/cla/id_policy.ipp
@@ -0,0 +1,121 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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)
+
+// See http://www.boost.org/libs/test for the library home page.
+//
+// File : $RCSfile: id_policy.ipp,v $
+//
+// Version : $Revision: 1.1 $
+//
+// Description : some generic identification policies implementation
+// ***************************************************************************
+
+#ifndef BOOST_RT_CLA_ID_POLICY_IPP_062904GER
+#define BOOST_RT_CLA_ID_POLICY_IPP_062904GER
+
+// Boost.Runtime.Parameter
+#include <boost/test/utils/runtime/config.hpp>
+
+#include <boost/test/utils/runtime/cla/id_policy.hpp>
+
+namespace boost {
+
+namespace BOOST_RT_PARAM_NAMESPACE {
+
+namespace cla {
+
+// ************************************************************************** //
+// ************** basic_naming_policy ************** //
+// ************************************************************************** //
+
+BOOST_RT_PARAM_INLINE void
+basic_naming_policy::usage_info( format_stream& fs ) const
+{
+ fs << m_prefix << m_name << m_separator;
+
+ if( m_separator.empty() )
+ fs << BOOST_RT_PARAM_LITERAL( ' ' );
+}
+
+//____________________________________________________________________________//
+
+BOOST_RT_PARAM_INLINE bool
+basic_naming_policy::match_prefix( argv_traverser& tr ) const
+{
+ if( !tr.match_front( m_prefix ) )
+ return false;
+
+ tr.trim( m_prefix.size() );
+ return true;
+}
+
+//____________________________________________________________________________//
+
+BOOST_RT_PARAM_INLINE bool
+basic_naming_policy::match_name( argv_traverser& tr ) const
+{
+ if( !tr.match_front( m_name ) )
+ return false;
+
+ tr.trim( m_name.size() );
+ return true;
+}
+
+//____________________________________________________________________________//
+
+BOOST_RT_PARAM_INLINE bool
+basic_naming_policy::match_separator( argv_traverser& tr ) const
+{
+ if( m_separator.empty() ) {
+ if( !tr.token().is_empty() )
+ return false;
+
+ tr.trim( 1 );
+ }
+ else {
+ if( !tr.match_front( m_separator ) )
+ return false;
+
+ tr.trim( m_separator.size() );
+ }
+
+ return true;
+}
+
+//____________________________________________________________________________//
+
+BOOST_RT_PARAM_INLINE bool
+basic_naming_policy::matching( parameter const&, argv_traverser& tr, bool ) const
+{
+ if( !match_prefix( tr ) )
+ return false;
+
+ if( !match_name( tr ) )
+ return false;
+
+ if( !match_separator( tr ) )
+ return false;
+
+ return true;
+}
+
+//____________________________________________________________________________//
+
+} // namespace cla
+
+} // namespace BOOST_RT_PARAM_NAMESPACE
+
+} // namespace boost
+
+// ************************************************************************** //
+// Revision History:
+//
+// $Log: id_policy.ipp,v $
+// Revision 1.1 2005/04/12 06:42:43 rogeeff
+// Runtime.Param library initial commit
+//
+// ************************************************************************** //
+
+#endif // BOOST_RT_CLA_ID_POLICY_IPP_062904GER
diff --git a/boost/boost/test/utils/runtime/cla/iface/argument_factory.hpp b/boost/boost/test/utils/runtime/cla/iface/argument_factory.hpp
new file mode 100644
index 00000000000..a381a7c2afd
--- /dev/null
+++ b/boost/boost/test/utils/runtime/cla/iface/argument_factory.hpp
@@ -0,0 +1,58 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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)
+
+// See http://www.boost.org/libs/test for the library home page.
+//
+// File : $RCSfile: argument_factory.hpp,v $
+//
+// Version : $Revision: 1.1 $
+//
+// Description : defines interface for argument_factory
+// ***************************************************************************
+
+#ifndef BOOST_RT_CLA_IFACE_ARGUMENT_FACTORY_HPP_062604GER
+#define BOOST_RT_CLA_IFACE_ARGUMENT_FACTORY_HPP_062604GER
+
+// Boost.Runtime.Parameter
+#include <boost/test/utils/runtime/config.hpp>
+#include <boost/test/utils/runtime/fwd.hpp>
+
+#include <boost/test/utils/runtime/cla/fwd.hpp>
+
+namespace boost {
+
+namespace BOOST_RT_PARAM_NAMESPACE {
+
+namespace cla {
+
+// ************************************************************************** //
+// ************** argument_factory ************** //
+// ************************************************************************** //
+// another name could be argument production policy
+
+class argument_factory {
+public:
+ // Argument factory interface
+ virtual argument_ptr produce_using( parameter& p, argv_traverser& tr ) = 0; /// produce argument based on input
+ virtual argument_ptr produce_using( parameter& p, parser const& ) = 0; /// produce argument based on internal generator and/or values of other parameters
+ virtual void argument_usage_info( format_stream& fs ) = 0; /// argument value format information
+};
+
+} // namespace boost
+
+} // namespace BOOST_RT_PARAM_NAMESPACE
+
+} // namespace cla
+
+// ************************************************************************** //
+// Revision History:
+//
+// $Log: argument_factory.hpp,v $
+// Revision 1.1 2005/04/12 06:42:43 rogeeff
+// Runtime.Param library initial commit
+//
+// ************************************************************************** //
+
+#endif // BOOST_RT_CLA_IFACE_ARGUMENT_FACTORY_HPP_062604GER
diff --git a/boost/boost/test/utils/runtime/cla/iface/id_policy.hpp b/boost/boost/test/utils/runtime/cla/iface/id_policy.hpp
new file mode 100644
index 00000000000..57c3904b804
--- /dev/null
+++ b/boost/boost/test/utils/runtime/cla/iface/id_policy.hpp
@@ -0,0 +1,72 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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)
+
+// See http://www.boost.org/libs/test for the library home page.
+//
+// File : $RCSfile: id_policy.hpp,v $
+//
+// Version : $Revision: 1.1 $
+//
+// Description : defines interface for identification_policy
+// ***************************************************************************
+
+#ifndef BOOST_RT_CLA_IFACE_ID_POLICY_HPP_062604GER
+#define BOOST_RT_CLA_IFACE_ID_POLICY_HPP_062604GER
+
+// Boost.Runtime.Parameter
+#include <boost/test/utils/runtime/config.hpp>
+
+#include <boost/test/utils/runtime/cla/fwd.hpp>
+
+// Boost.Test
+#include <boost/test/utils/class_properties.hpp>
+#include <boost/test/utils/rtti.hpp>
+
+namespace boost {
+
+namespace BOOST_RT_PARAM_NAMESPACE {
+
+namespace cla {
+
+// ************************************************************************** //
+// ************** identification_policy ************** //
+// ************************************************************************** //
+
+class identification_policy {
+public:
+ // Public properties
+ unit_test::readwrite_property<rtti::id_t> p_type_id;
+
+ // Policy interface
+ virtual bool responds_to( cstring name ) const = 0;
+ virtual cstring id_2_report() const = 0;
+ virtual void usage_info( format_stream& fs ) const = 0;
+ virtual bool matching( parameter const& p, argv_traverser& tr, bool primary ) const = 0;
+
+ virtual bool conflict_with( identification_policy const& ) const = 0;
+
+protected:
+ // Constructor
+ explicit identification_policy( rtti::id_t const& dyn_type )
+ : p_type_id( dyn_type )
+ {}
+};
+
+} // namespace cla
+
+} // namespace BOOST_RT_PARAM_NAMESPACE
+
+} // namespace boost
+
+// ************************************************************************** //
+// Revision History:
+//
+// $Log: id_policy.hpp,v $
+// Revision 1.1 2005/04/12 06:42:43 rogeeff
+// Runtime.Param library initial commit
+//
+// ************************************************************************** //
+
+#endif // BOOST_RT_CLA_IFACE_ID_POLICY_HPP_062604GER
diff --git a/boost/boost/test/utils/runtime/cla/modifier.hpp b/boost/boost/test/utils/runtime/cla/modifier.hpp
new file mode 100644
index 00000000000..4ef8ee588f8
--- /dev/null
+++ b/boost/boost/test/utils/runtime/cla/modifier.hpp
@@ -0,0 +1,78 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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)
+
+// See http://www.boost.org/libs/test for the library home page.
+//
+// File : $RCSfile: modifier.hpp,v $
+//
+// Version : $Revision: 1.1 $
+//
+// Description : parameter modifiers
+// ***************************************************************************
+
+#ifndef BOOST_RT_CLA_MODIFIER_HPP_062604GER
+#define BOOST_RT_CLA_MODIFIER_HPP_062604GER
+
+// Boost.Runtime.Parameter
+#include <boost/test/utils/runtime/config.hpp>
+
+// Boost.Test
+#include <boost/test/utils/named_params.hpp>
+
+namespace boost {
+
+namespace BOOST_RT_PARAM_NAMESPACE {
+
+namespace cla {
+
+// ************************************************************************** //
+// ************** environment variable modifiers ************** //
+// ************************************************************************** //
+
+namespace {
+
+nfp::typed_keyword<bool,struct optional_t> optional_m;
+nfp::named_parameter<bool const,optional_t> optional( true );
+nfp::typed_keyword<bool,struct required_t> required_m;
+nfp::named_parameter<bool const,required_t> required( true );
+nfp::typed_keyword<bool,struct multiplicable_t> multiplicable_m;
+nfp::named_parameter<bool const,multiplicable_t> multiplicable( true );
+nfp::typed_keyword<bool,struct guess_name_t> guess_name_m;
+nfp::named_parameter<bool const,guess_name_t> guess_name( true );
+nfp::typed_keyword<bool,struct ignore_mismatch_t> ignore_mismatch_m;
+nfp::named_parameter<bool const,ignore_mismatch_t> ignore_mismatch( true );
+nfp::typed_keyword<bool,struct optional_value_t> optional_value_m;
+nfp::named_parameter<bool const,optional_value_t> optional_value( true );
+
+nfp::typed_keyword<char_type,struct input_separator_t> input_separator;
+nfp::typed_keyword<cstring,struct prefix_t> prefix;
+nfp::typed_keyword<cstring,struct name_t> name;
+nfp::typed_keyword<cstring,struct separator_t> separator;
+nfp::typed_keyword<cstring,struct description_t> description;
+nfp::typed_keyword<cstring,struct refer_to_t> default_refer_to;
+
+nfp::keyword<struct default_value_t> default_value;
+nfp::keyword<struct handler_t> handler;
+nfp::keyword<struct interpreter_t> interpreter;
+nfp::keyword<struct assign_to_t> assign_to;
+
+} // local namespace
+
+} // namespace cla
+
+} // namespace BOOST_RT_PARAM_NAMESPACE
+
+} // namespace boost
+
+// ************************************************************************** //
+// Revision History:
+//
+// $Log: modifier.hpp,v $
+// Revision 1.1 2005/04/12 06:42:43 rogeeff
+// Runtime.Param library initial commit
+//
+// ************************************************************************** //
+
+#endif // BOOST_RT_CLA_MODIFIER_HPP_062604GER
diff --git a/boost/boost/test/utils/runtime/cla/named_parameter.cpp b/boost/boost/test/utils/runtime/cla/named_parameter.cpp
new file mode 100644
index 00000000000..ab3c1aa600a
--- /dev/null
+++ b/boost/boost/test/utils/runtime/cla/named_parameter.cpp
@@ -0,0 +1,25 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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)
+
+// See http://www.boost.org/libs/test for the library home page.
+//
+// File : $RCSfile: named_parameter.cpp,v $
+//
+// Version : $Revision: 1.1 $
+//
+// Description : offline implementation of named parameter
+// ***************************************************************************
+
+#define BOOST_RT_PARAM_INLINE
+#include <boost/test/utils/runtime/cla/named_parameter.ipp>
+
+// ************************************************************************** //
+// Revision History:
+//
+// $Log: named_parameter.cpp,v $
+// Revision 1.1 2005/04/12 06:42:43 rogeeff
+// Runtime.Param library initial commit
+//
+// ************************************************************************** //
diff --git a/boost/boost/test/utils/runtime/cla/named_parameter.hpp b/boost/boost/test/utils/runtime/cla/named_parameter.hpp
new file mode 100644
index 00000000000..495c4963ddb
--- /dev/null
+++ b/boost/boost/test/utils/runtime/cla/named_parameter.hpp
@@ -0,0 +1,102 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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)
+
+// See http://www.boost.org/libs/test for the library home page.
+//
+// File : $RCSfile: named_parameter.hpp,v $
+//
+// Version : $Revision: 1.1 $
+//
+// Description : defines model of named parameter
+// ***************************************************************************
+
+#ifndef BOOST_RT_CLA_NAMED_PARAMETER_HPP_062604GER
+#define BOOST_RT_CLA_NAMED_PARAMETER_HPP_062604GER
+
+// Boost.Runtime.Parameter
+#include <boost/test/utils/runtime/config.hpp>
+
+#include <boost/test/utils/runtime/cla/basic_parameter.hpp>
+#include <boost/test/utils/runtime/cla/id_policy.hpp>
+
+namespace boost {
+
+namespace BOOST_RT_PARAM_NAMESPACE {
+
+namespace cla {
+
+// ************************************************************************** //
+// ************** string_name_policy ************** //
+// ************************************************************************** //
+
+class string_name_policy : public basic_naming_policy {
+public:
+ // Constructor
+ string_name_policy();
+ BOOST_RT_PARAM_UNNEEDED_VIRTUAL ~string_name_policy() {}
+
+ // policy interface
+ virtual bool responds_to( cstring name ) const;
+ virtual bool conflict_with( identification_policy const& ) const;
+
+ // Accept modifier
+ template<typename Modifier>
+ void accept_modifier( Modifier const& m )
+ {
+ basic_naming_policy::accept_modifier( m );
+
+ if( m.has( guess_name_m ) )
+ m_guess_name = true;
+ }
+
+private:
+ // Naming policy interface
+ virtual bool match_name( argv_traverser& tr ) const;
+
+ // Data members
+ bool m_guess_name;
+};
+
+// ************************************************************************** //
+// ************** runtime::cla::named_parameter ************** //
+// ************************************************************************** //
+
+template<typename T>
+class named_parameter_t : public basic_parameter<T,string_name_policy> {
+ typedef basic_parameter<T,string_name_policy> base;
+public:
+ // Constructors
+ explicit named_parameter_t( cstring name ) : base( name ) {}
+};
+
+//____________________________________________________________________________//
+
+BOOST_RT_CLA_NAMED_PARAM_GENERATORS( named_parameter )
+
+//____________________________________________________________________________//
+
+} // namespace cla
+
+} // namespace BOOST_RT_PARAM_NAMESPACE
+
+} // namespace boost
+
+#ifndef BOOST_RT_PARAM_OFFLINE
+
+# define BOOST_RT_PARAM_INLINE inline
+# include <boost/test/utils/runtime/cla/named_parameter.ipp>
+
+#endif
+
+// ************************************************************************** //
+// Revision History:
+//
+// $Log: named_parameter.hpp,v $
+// Revision 1.1 2005/04/12 06:42:43 rogeeff
+// Runtime.Param library initial commit
+//
+// ************************************************************************** //
+
+#endif // BOOST_RT_CLA_NAMED_PARAMETER_HPP_062604GER
diff --git a/boost/boost/test/utils/runtime/cla/named_parameter.ipp b/boost/boost/test/utils/runtime/cla/named_parameter.ipp
new file mode 100644
index 00000000000..6bc43c78131
--- /dev/null
+++ b/boost/boost/test/utils/runtime/cla/named_parameter.ipp
@@ -0,0 +1,128 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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)
+
+// See http://www.boost.org/libs/test for the library home page.
+//
+// File : $RCSfile: named_parameter.ipp,v $
+//
+// Version : $Revision: 1.2 $
+//
+// Description : implements model of named parameter
+// ***************************************************************************
+
+#ifndef BOOST_RT_CLA_NAMED_PARAMETER_IPP_062904GER
+#define BOOST_RT_CLA_NAMED_PARAMETER_IPP_062904GER
+
+// Boost.Runtime.Parameter
+#include <boost/test/utils/runtime/config.hpp>
+
+#include <boost/test/utils/runtime/cla/named_parameter.hpp>
+#include <boost/test/utils/runtime/cla/char_parameter.hpp>
+
+// Boost.Test
+#include <boost/test/utils/algorithm.hpp>
+
+namespace boost {
+
+namespace BOOST_RT_PARAM_NAMESPACE {
+
+namespace cla {
+
+// ************************************************************************** //
+// ************** string_name_policy ************** //
+// ************************************************************************** //
+
+BOOST_RT_PARAM_INLINE
+string_name_policy::string_name_policy()
+: basic_naming_policy( rtti::type_id<string_name_policy>() )
+, m_guess_name( false )
+{
+ assign_op( m_prefix, BOOST_RT_PARAM_CSTRING_LITERAL( "-" ), 0 );
+}
+
+//____________________________________________________________________________//
+
+BOOST_RT_PARAM_INLINE bool
+string_name_policy::responds_to( cstring name ) const
+{
+ std::pair<cstring::iterator,dstring::const_iterator> mm_pos;
+
+ mm_pos = unit_test::mismatch( name.begin(), name.end(), m_name.begin(), m_name.end() );
+
+ return mm_pos.first == name.end() && (m_guess_name || (mm_pos.second == m_name.end()) );
+}
+
+//____________________________________________________________________________//
+
+BOOST_RT_PARAM_INLINE bool
+string_name_policy::conflict_with( identification_policy const& id ) const
+{
+ if( id.p_type_id == p_type_id ) {
+ string_name_policy const& snp = static_cast<string_name_policy const&>( id );
+
+ if( m_name.empty() || snp.m_name.empty() )
+ return false;
+
+ std::pair<dstring::const_iterator,dstring::const_iterator> mm_pos =
+ unit_test::mismatch( m_name.begin(), m_name.end(), snp.m_name.begin(), snp.m_name.end() );
+
+ return mm_pos.first != m_name.begin() && // there is common substring
+ (m_guess_name || (mm_pos.first == m_name.end()) ) && // that match me
+ (snp.m_guess_name || (mm_pos.second == snp.m_name.end()) ); // and snp
+ }
+
+ if( id.p_type_id == rtti::type_id<char_name_policy>() ) {
+ char_name_policy const& cnp = static_cast<char_name_policy const&>( id );
+
+ return m_guess_name && unit_test::first_char( cstring( m_name ) ) == unit_test::first_char( cnp.id_2_report() );
+ }
+
+ return false;
+}
+
+//____________________________________________________________________________//
+
+BOOST_RT_PARAM_INLINE bool
+string_name_policy::match_name( argv_traverser& tr ) const
+{
+ if( !m_guess_name )
+ return basic_naming_policy::match_name( tr );
+ else {
+ cstring in = tr.input();
+
+ std::pair<cstring::iterator,dstring::const_iterator> mm_pos;
+
+ mm_pos = unit_test::mismatch( in.begin(), in.end(), m_name.begin(), m_name.end() );
+
+ if( mm_pos.first == in.begin() )
+ return false;
+
+ tr.trim( mm_pos.first - in.begin() );
+ }
+
+ return true;
+}
+
+//____________________________________________________________________________//
+
+} // namespace cla
+
+} // namespace BOOST_RT_PARAM_NAMESPACE
+
+} // namespace boost
+
+// ************************************************************************** //
+// Revision History:
+//
+// $Log: named_parameter.ipp,v $
+// Revision 1.2 2005/04/12 07:01:36 rogeeff
+// exclude polymorphic_downcast
+//
+// Revision 1.1 2005/04/12 06:42:43 rogeeff
+// Runtime.Param library initial commit
+//
+// ************************************************************************** //
+
+#endif // BOOST_RT_CLA_NAMED_PARAMETER_IPP_062904GER
diff --git a/boost/boost/test/utils/runtime/cla/parameter.hpp b/boost/boost/test/utils/runtime/cla/parameter.hpp
new file mode 100644
index 00000000000..a05d25449bc
--- /dev/null
+++ b/boost/boost/test/utils/runtime/cla/parameter.hpp
@@ -0,0 +1,159 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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)
+
+// See http://www.boost.org/libs/test for the library home page.
+//
+// File : $RCSfile: parameter.hpp,v $
+//
+// Version : $Revision: 1.1 $
+//
+// Description : defines model of formal parameter
+// ***************************************************************************
+
+#ifndef BOOST_RT_CLA_PARAMETER_HPP_062604GER
+#define BOOST_RT_CLA_PARAMETER_HPP_062604GER
+
+// Boost.Runtime.Parameter
+#include <boost/test/utils/runtime/config.hpp>
+
+#include <boost/test/utils/runtime/fwd.hpp>
+#include <boost/test/utils/runtime/parameter.hpp>
+#include <boost/test/utils/runtime/validation.hpp>
+
+#include <boost/test/utils/runtime/cla/fwd.hpp>
+#include <boost/test/utils/runtime/cla/modifier.hpp>
+#include <boost/test/utils/runtime/cla/iface/argument_factory.hpp>
+#include <boost/test/utils/runtime/cla/iface/id_policy.hpp>
+
+// Boost.Test
+#include <boost/test/utils/rtti.hpp>
+
+namespace boost {
+
+namespace BOOST_RT_PARAM_NAMESPACE {
+
+namespace cla {
+
+// ************************************************************************** //
+// ************** runtime::cla::parameter ************** //
+// ************************************************************************** //
+
+class parameter : public BOOST_RT_PARAM_NAMESPACE::parameter {
+public:
+ parameter( identification_policy& ID, argument_factory& F )
+ : p_optional( false )
+ , p_multiplicable( false )
+ , p_optional_value( false )
+ , m_id_policy( ID )
+ , m_arg_factory( F )
+ {}
+
+ // Destructor
+ virtual ~parameter() {}
+
+ unit_test::readwrite_property<bool> p_optional;
+ unit_test::readwrite_property<bool> p_multiplicable;
+ unit_test::readwrite_property<bool> p_optional_value;
+ unit_test::readwrite_property<dstring> p_description;
+
+ // parameter properties modification
+ template<typename Modifier>
+ void accept_modifier( Modifier const& m )
+ {
+ if( m.has( optional_m ) )
+ p_optional.value = true;
+
+ if( m.has( required_m ) )
+ p_optional.value = false;
+
+ if( m.has( multiplicable_m ) )
+ p_multiplicable.value = true;
+
+ if( m.has( optional_value_m ) )
+ p_optional_value.value = true;
+
+ nfp::optionally_assign( p_description.value, m, description );
+ }
+
+ // access methods
+ bool has_argument() const { return m_actual_argument; }
+ argument const& actual_argument() const { return *m_actual_argument; }
+ argument_ptr actual_argument() { return m_actual_argument; }
+
+
+ // identification interface
+ bool responds_to( cstring name ) const { return m_id_policy.responds_to( name ); }
+ bool conflict_with( parameter const& p ) const
+ {
+ return id_2_report() == p.id_2_report() && !id_2_report().is_empty() ||
+ m_id_policy.conflict_with( p.m_id_policy ) ||
+ p.m_id_policy.conflict_with( m_id_policy );
+ }
+ cstring id_2_report() const { return m_id_policy.id_2_report(); }
+ void usage_info( format_stream& fs ) const
+ {
+ m_id_policy.usage_info( fs );
+ if( p_optional_value )
+ fs << BOOST_RT_PARAM_LITERAL( '[' );
+
+ m_arg_factory.argument_usage_info( fs );
+
+ if( p_optional_value )
+ fs << BOOST_RT_PARAM_LITERAL( ']' );
+ }
+
+ // argument match/produce based on input
+ bool matching( argv_traverser& tr, bool primary ) const
+ {
+ return m_id_policy.matching( *this, tr, primary );
+ }
+
+ // argument production based on different source
+ void produce_argument( argv_traverser& tr )
+ {
+ m_id_policy.matching( *this, tr, true ); // !! could we save this position somehow
+ m_actual_argument = m_arg_factory.produce_using( *this, tr );
+ }
+ void produce_argument( parser const& p )
+ {
+ m_actual_argument = m_arg_factory.produce_using( *this, p );
+ }
+
+private:
+ //Data members
+ identification_policy& m_id_policy;
+ argument_factory& m_arg_factory;
+ argument_ptr m_actual_argument;
+};
+
+//____________________________________________________________________________//
+
+template<typename Parameter,typename Modifier>
+inline shared_ptr<Parameter>
+operator-( shared_ptr<Parameter> p, Modifier const& m )
+{
+ p->accept_modifier( m );
+
+ return p;
+}
+
+//____________________________________________________________________________//
+
+} // namespace cla
+
+} // namespace BOOST_RT_PARAM_NAMESPACE
+
+} // namespace boost
+
+// ************************************************************************** //
+// Revision History:
+//
+// $Log: parameter.hpp,v $
+// Revision 1.1 2005/04/12 06:42:43 rogeeff
+// Runtime.Param library initial commit
+//
+// ************************************************************************** //
+
+#endif // BOOST_RT_CLA_PARAMETER_HPP_062604GER
diff --git a/boost/boost/test/utils/runtime/cla/parser.cpp b/boost/boost/test/utils/runtime/cla/parser.cpp
new file mode 100644
index 00000000000..57f98ae09b7
--- /dev/null
+++ b/boost/boost/test/utils/runtime/cla/parser.cpp
@@ -0,0 +1,27 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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)
+
+// See http://www.boost.org/libs/test for the library home page.
+//
+// File : $RCSfile: parser.cpp,v $
+//
+// Version : $Revision: 1.1 $
+//
+// Description : offline implementation for parser
+// ***************************************************************************
+
+#include <boost/test/utils/runtime/config.hpp>
+
+#define BOOST_RT_PARAM_INLINE
+#include <boost/test/utils/runtime/cla/parser.ipp>
+
+// ************************************************************************** //
+// Revision History:
+//
+// $Log: parser.cpp,v $
+// Revision 1.1 2005/04/12 06:42:43 rogeeff
+// Runtime.Param library initial commit
+//
+// ************************************************************************** //
diff --git a/boost/boost/test/utils/runtime/cla/parser.hpp b/boost/boost/test/utils/runtime/cla/parser.hpp
new file mode 100644
index 00000000000..ffc2849ff56
--- /dev/null
+++ b/boost/boost/test/utils/runtime/cla/parser.hpp
@@ -0,0 +1,165 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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)
+
+// See http://www.boost.org/libs/test for the library home page.
+//
+// File : $RCSfile: parser.hpp,v $
+//
+// Version : $Revision: 1.2 $
+//
+// Description : defines parser - public interface for CLA parsing and accessing
+// ***************************************************************************
+
+#ifndef BOOST_RT_CLA_PARSER_HPP_062604GER
+#define BOOST_RT_CLA_PARSER_HPP_062604GER
+
+// Boost.Runtime.Parameter
+#include <boost/test/utils/runtime/config.hpp>
+#include <boost/test/utils/runtime/fwd.hpp>
+#include <boost/test/utils/runtime/argument.hpp>
+
+#include <boost/test/utils/runtime/cla/fwd.hpp>
+#include <boost/test/utils/runtime/cla/modifier.hpp>
+#include <boost/test/utils/runtime/cla/argv_traverser.hpp>
+
+// Boost
+#include <boost/optional.hpp>
+
+// STL
+#include <list>
+
+namespace boost {
+
+namespace BOOST_RT_PARAM_NAMESPACE {
+
+namespace cla {
+
+// ************************************************************************** //
+// ************** runtime::cla::parser ************** //
+// ************************************************************************** //
+
+namespace cla_detail {
+
+template<typename Modifier>
+class global_mod_parser {
+public:
+ global_mod_parser( parser& p, Modifier const& m )
+ : m_parser( p )
+ , m_modifiers( m )
+ {}
+
+ template<typename Param>
+ global_mod_parser const&
+ operator<<( shared_ptr<Param> param ) const
+ {
+ param->accept_modifier( m_modifiers );
+
+ m_parser << param;
+
+ return *this;
+ }
+
+private:
+ // Data members;
+ parser& m_parser;
+ Modifier const& m_modifiers;
+};
+
+}
+
+// ************************************************************************** //
+// ************** runtime::cla::parser ************** //
+// ************************************************************************** //
+
+class parser {
+public:
+ typedef std::list<parameter_ptr>::const_iterator param_iterator;
+
+ // Constructor
+ explicit parser( cstring program_name = cstring() );
+
+ // parameter list construction interface
+ parser& operator<<( parameter_ptr param );
+
+ // parser and global parameters modifiers
+ template<typename Modifier>
+ cla_detail::global_mod_parser<Modifier>
+ operator-( Modifier const& m )
+ {
+ nfp::optionally_assign( m_traverser.p_separator.value, m, input_separator );
+ nfp::optionally_assign( m_traverser.p_ignore_mismatch.value, m, ignore_mismatch_m );
+
+ return cla_detail::global_mod_parser<Modifier>( *this, m );
+ }
+
+ // input processing method
+ void parse( int& argc, char_type** argv );
+
+ // parameters access
+ param_iterator first_param() const;
+ param_iterator last_param() const;
+
+ // arguments access
+ const_argument_ptr operator[]( cstring string_id ) const;
+ cstring get( cstring string_id ) const;
+
+ template<typename T>
+ T const& get( cstring string_id ) const
+ {
+ return arg_value<T>( valid_argument( string_id ) );
+ }
+
+ template<typename T>
+ void get( cstring string_id, boost::optional<T>& res ) const
+ {
+ const_argument_ptr arg = (*this)[string_id];
+
+ if( arg )
+ res = arg_value<T>( *arg );
+ else
+ res.reset();
+ }
+
+ // help/usage
+ void usage( out_stream& ostr );
+ void help( out_stream& ostr );
+
+private:
+ argument const& valid_argument( cstring string_id ) const;
+
+ // Data members
+ argv_traverser m_traverser;
+ std::list<parameter_ptr> m_parameters;
+ dstring m_program_name;
+};
+
+//____________________________________________________________________________//
+
+} // namespace cla
+
+} // namespace BOOST_RT_PARAM_NAMESPACE
+
+} // namespace boost
+
+#ifndef BOOST_RT_PARAM_OFFLINE
+
+# define BOOST_RT_PARAM_INLINE inline
+# include <boost/test/utils/runtime/cla/parser.ipp>
+
+#endif
+
+// ************************************************************************** //
+// Revision History:
+//
+// $Log: parser.hpp,v $
+// Revision 1.2 2005/12/14 05:01:14 rogeeff
+// *** empty log message ***
+//
+// Revision 1.1 2005/04/12 06:42:43 rogeeff
+// Runtime.Param library initial commit
+//
+// ************************************************************************** //
+
+#endif // BOOST_RT_CLA_PARSER_HPP_062604GER
diff --git a/boost/boost/test/utils/runtime/cla/parser.ipp b/boost/boost/test/utils/runtime/cla/parser.ipp
new file mode 100644
index 00000000000..865b683022c
--- /dev/null
+++ b/boost/boost/test/utils/runtime/cla/parser.ipp
@@ -0,0 +1,270 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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)
+
+// See http://www.boost.org/libs/test for the library home page.
+//
+// File : $RCSfile: parser.ipp,v $
+//
+// Version : $Revision: 1.1 $
+//
+// Description : implements parser - public interface for CLA parsing and accessing
+// ***************************************************************************
+
+#ifndef BOOST_RT_CLA_PARSER_IPP_062904GER
+#define BOOST_RT_CLA_PARSER_IPP_062904GER
+
+// Boost.Runtime.Parameter
+#include <boost/test/utils/runtime/config.hpp>
+#include <boost/test/utils/runtime/trace.hpp>
+#include <boost/test/utils/runtime/argument.hpp>
+
+#include <boost/test/utils/runtime/cla/argv_traverser.hpp>
+#include <boost/test/utils/runtime/cla/parameter.hpp>
+#include <boost/test/utils/runtime/cla/modifier.hpp>
+#include <boost/test/utils/runtime/cla/validation.hpp>
+#include <boost/test/utils/runtime/cla/parser.hpp>
+
+// Boost.Test
+#include <boost/test/utils/basic_cstring/io.hpp>
+#include <boost/test/utils/foreach.hpp>
+
+// Boost
+#include <boost/lexical_cast.hpp>
+
+namespace boost {
+
+namespace BOOST_RT_PARAM_NAMESPACE {
+
+namespace cla {
+
+// ************************************************************************** //
+// ************** runtime::cla::parser ************** //
+// ************************************************************************** //
+
+BOOST_RT_PARAM_INLINE
+parser::parser( cstring program_name )
+{
+ assign_op( m_program_name, program_name, 0 );
+}
+
+//____________________________________________________________________________//
+
+BOOST_RT_PARAM_INLINE parser::param_iterator
+parser::first_param() const
+{
+ return m_parameters.begin();
+}
+
+//____________________________________________________________________________//
+
+BOOST_RT_PARAM_INLINE parser::param_iterator
+parser::last_param() const
+{
+ return m_parameters.end();
+}
+
+//____________________________________________________________________________//
+
+BOOST_RT_PARAM_INLINE argument const&
+parser::valid_argument( cstring string_id ) const
+{
+ const_argument_ptr arg = (*this)[string_id];
+
+ BOOST_RT_PARAM_VALIDATE_LOGIC( !!arg, "Actual argument for parameter " << string_id << " is not present" );
+
+ return *arg;
+}
+
+//____________________________________________________________________________//
+
+BOOST_RT_PARAM_INLINE parser&
+parser::operator<<( parameter_ptr new_param )
+{
+ BOOST_TEST_FOREACH( parameter_ptr, old_param, m_parameters ) {
+ BOOST_RT_PARAM_VALIDATE_LOGIC( !old_param->conflict_with( *new_param ) &&
+ !new_param->conflict_with( *old_param ),
+ BOOST_RT_PARAM_LITERAL( "Definition of parameter " ) << new_param->id_2_report() <<
+ BOOST_RT_PARAM_LITERAL( " conflicts with defintion of parameter " ) << old_param->id_2_report() );
+ }
+
+ m_parameters.push_back( new_param );
+
+ return *this;
+}
+
+//____________________________________________________________________________//
+
+BOOST_RT_PARAM_INLINE void
+parser::parse( int& argc, char_type** argv )
+{
+ if( m_program_name.empty() ) {
+ m_program_name.assign( argv[0] );
+ dstring::size_type pos = m_program_name.find_last_of( BOOST_RT_PARAM_LITERAL( "/\\" ) );
+
+ if( pos != cstring::npos )
+ m_program_name.erase( 0, pos+1 );
+ }
+
+ m_traverser.init( argc, argv );
+
+ try {
+ while( !m_traverser.eoi() ) {
+ parameter_ptr found_param;
+
+ BOOST_RT_PARAM_TRACE( "Total " << m_parameters.size() << " parameters registered" );
+
+ BOOST_TEST_FOREACH( parameter_ptr const&, curr_param, m_parameters ) {
+ BOOST_RT_PARAM_TRACE( "Try parameter " << curr_param->id_2_report() );
+
+ if( curr_param->matching( m_traverser, !found_param ) ) {
+ BOOST_RT_PARAM_TRACE( "Match found" );
+ BOOST_RT_CLA_VALIDATE_INPUT( !found_param, (m_traverser.rollback(),m_traverser), "Ambiguous input" );
+
+ found_param = curr_param;
+ }
+
+ m_traverser.rollback();
+ }
+
+ if( !found_param ) {
+ BOOST_RT_PARAM_TRACE( "No match found" );
+ BOOST_RT_CLA_VALIDATE_INPUT( m_traverser.handle_mismatch(), m_traverser,
+ BOOST_RT_PARAM_LITERAL( "Unexpected input" ) );
+
+ continue;
+ }
+
+ BOOST_RT_PARAM_TRACE( "Parse argument value" );
+ found_param->produce_argument( m_traverser );
+
+ m_traverser.commit();
+ }
+
+ BOOST_TEST_FOREACH( parameter_ptr const&, curr_param, m_parameters ) {
+ if( !curr_param->p_optional && !curr_param->actual_argument() ) {
+ curr_param->produce_argument( *this );
+
+ BOOST_RT_PARAM_VALIDATE_LOGIC( curr_param->actual_argument(),
+ BOOST_RT_PARAM_LITERAL( "Required argument for parameter " ) << curr_param->id_2_report()
+ << BOOST_RT_PARAM_LITERAL( " is missing" ) );
+ }
+ }
+ }
+ catch( bad_lexical_cast const& ) {
+ BOOST_RT_PARAM_REPORT_LOGIC_ERROR(
+ BOOST_RT_PARAM_LITERAL( "String to value convertion error during input parsing" ) );
+ }
+
+ m_traverser.remainder( argc, argv );
+}
+
+//____________________________________________________________________________//
+
+BOOST_RT_PARAM_INLINE const_argument_ptr
+parser::operator[]( cstring string_id ) const
+{
+ parameter_ptr found_param;
+
+ BOOST_TEST_FOREACH( parameter_ptr const&, curr_param, m_parameters ) {
+ if( curr_param->responds_to( string_id ) ) {
+ BOOST_RT_PARAM_VALIDATE_LOGIC( !found_param,
+ BOOST_RT_PARAM_LITERAL( "Ambiguous parameter string id: " ) << string_id );
+
+ found_param = curr_param;
+ }
+ }
+
+ BOOST_RT_PARAM_VALIDATE_LOGIC( found_param, BOOST_RT_PARAM_LITERAL( "Unknown parameter: " ) << string_id );
+
+ return found_param->actual_argument();
+}
+
+//____________________________________________________________________________//
+
+BOOST_RT_PARAM_INLINE cstring
+parser::get( cstring string_id ) const
+{
+ return get<cstring>( string_id );
+}
+
+//____________________________________________________________________________//
+
+BOOST_RT_PARAM_INLINE void
+parser::usage( out_stream& ostr )
+{
+ if( m_program_name.empty() )
+ assign_op( m_program_name, BOOST_RT_PARAM_CSTRING_LITERAL( "<program>" ), 0 );
+
+ format_stream fs;
+
+ fs << m_program_name;
+
+ BOOST_TEST_FOREACH( parameter_ptr const&, curr_param, m_parameters ) {
+ fs << BOOST_RT_PARAM_LITERAL( ' ' );
+
+ if( curr_param->p_optional )
+ fs << BOOST_RT_PARAM_LITERAL( '[' );
+
+ curr_param->usage_info( fs );
+
+ if( curr_param->p_optional )
+ fs << BOOST_RT_PARAM_LITERAL( ']' );
+
+ if( curr_param->p_multiplicable ) {
+ fs << BOOST_RT_PARAM_CSTRING_LITERAL( " ... " );
+
+ if( curr_param->p_optional )
+ fs << BOOST_RT_PARAM_LITERAL( '[' );
+
+ curr_param->usage_info( fs );
+
+ if( curr_param->p_optional )
+ fs << BOOST_RT_PARAM_LITERAL( ']' );
+ }
+ }
+
+ ostr << BOOST_RT_PARAM_CSTRING_LITERAL( "Usage:\n" ) << fs.str() << std::endl;
+}
+
+//____________________________________________________________________________//
+
+BOOST_RT_PARAM_INLINE void
+parser::help( out_stream& ostr )
+{
+ usage( ostr );
+
+ bool need_where = true;
+
+ BOOST_TEST_FOREACH( parameter_ptr const&, curr_param, m_parameters ) {
+ if( curr_param->p_description->empty() )
+ continue;
+
+ if( need_where ) {
+ ostr << BOOST_RT_PARAM_CSTRING_LITERAL( "where:\n" );
+ need_where = false;
+ }
+
+ ostr << curr_param->id_2_report() << BOOST_RT_PARAM_CSTRING_LITERAL( " - " ) << curr_param->p_description << std::endl;
+ }
+}
+
+//____________________________________________________________________________//
+
+} // namespace cla
+
+} // namespace BOOST_RT_PARAM_NAMESPACE
+
+} // namespace boost
+
+// ************************************************************************** //
+// Revision History:
+//
+// $Log: parser.ipp,v $
+// Revision 1.1 2005/04/12 06:42:43 rogeeff
+// Runtime.Param library initial commit
+//
+// ************************************************************************** //
+
+#endif // BOOST_RT_CLA_PARSER_IPP_062904GER
diff --git a/boost/boost/test/utils/runtime/cla/positional_parameter.hpp b/boost/boost/test/utils/runtime/cla/positional_parameter.hpp
new file mode 100644
index 00000000000..73c0214ee00
--- /dev/null
+++ b/boost/boost/test/utils/runtime/cla/positional_parameter.hpp
@@ -0,0 +1,100 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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)
+
+// See http://www.boost.org/libs/test for the library home page.
+//
+// File : $RCSfile: positional_parameter.hpp,v $
+//
+// Version : $Revision: 1.1 $
+//
+// Description : positional parameter model
+// ***************************************************************************
+
+#ifndef BOOST_RT_CLA_POSITIONAL_PARAMETER_HPP_062604GER
+#define BOOST_RT_CLA_POSITIONAL_PARAMETER_HPP_062604GER
+
+// Boost.Runtime.Parameter
+#include <boost/test/utils/runtime/config.hpp>
+
+#include <boost/test/utils/runtime/cla/basic_parameter.hpp>
+
+namespace boost {
+
+namespace BOOST_RT_PARAM_NAMESPACE {
+
+namespace cla {
+
+// ************************************************************************** //
+// ************** single_name_policy ************** //
+// ************************************************************************** //
+
+class trivial_id_policy : public identification_policy {
+public:
+ trivial_id_policy()
+ : identification_policy( rtti::type_id<trivial_id_policy>() )
+ {}
+ BOOST_RT_PARAM_UNNEEDED_VIRTUAL ~trivial_id_policy() {}
+
+ virtual bool responds_to( cstring name ) const { return m_name == name; }
+ virtual bool conflict_with( identification_policy const& id ) const { return false; }
+ virtual cstring id_2_report() const { return m_name; }
+ virtual void usage_info( format_stream& fs ) const
+ {
+ if( !m_name.empty() )
+ fs << BOOST_RT_PARAM_LITERAL( '<' ) << m_name << BOOST_RT_PARAM_LITERAL( '>' );
+ else
+ fs << BOOST_RT_PARAM_CSTRING_LITERAL( "<value>" );;
+ }
+
+ virtual bool matching( parameter const& p, argv_traverser& tr, bool primary ) const
+ {
+ return primary && ( !p.has_argument() || p.p_multiplicable );
+ }
+
+ template<typename Modifier>
+ void accept_modifier( Modifier const& m )
+ {
+ nfp::optionally_assign( m_name, m, name );
+ }
+
+private:
+ // Data members
+ dstring m_name;
+};
+
+// ************************************************************************** //
+// ************** runtime::cla::positional_parameter ************** //
+// ************************************************************************** //
+
+template<typename T>
+class positional_parameter_t : public basic_parameter<T,trivial_id_policy> {
+ typedef basic_parameter<T,trivial_id_policy> base;
+public:
+ // Constructors
+ explicit positional_parameter_t( cstring name )
+ : base( name )
+ {}
+};
+
+//____________________________________________________________________________//
+
+BOOST_RT_CLA_NAMED_PARAM_GENERATORS( positional_parameter )
+
+} // namespace cla
+
+} // namespace BOOST_RT_PARAM_NAMESPACE
+
+} // namespace boost
+
+// ************************************************************************** //
+// Revision History:
+//
+// $Log: positional_parameter.hpp,v $
+// Revision 1.1 2005/04/12 06:42:43 rogeeff
+// Runtime.Param library initial commit
+//
+// ************************************************************************** //
+
+#endif // BOOST_RT_CLA_POSITIONAL_PARAMETER_HPP_062604GER
diff --git a/boost/boost/test/utils/runtime/cla/typed_parameter.hpp b/boost/boost/test/utils/runtime/cla/typed_parameter.hpp
new file mode 100644
index 00000000000..0c0a7f88fe4
--- /dev/null
+++ b/boost/boost/test/utils/runtime/cla/typed_parameter.hpp
@@ -0,0 +1,77 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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)
+
+// See http://www.boost.org/libs/test for the library home page.
+//
+// File : $RCSfile: typed_parameter.hpp,v $
+//
+// Version : $Revision: 1.1 $
+//
+// Description : generic typed parameter model
+// ***************************************************************************
+
+#ifndef BOOST_RT_CLA_TYPED_PARAMETER_HPP_062604GER
+#define BOOST_RT_CLA_TYPED_PARAMETER_HPP_062604GER
+
+// Boost.Runtime.Parameter
+#include <boost/test/utils/runtime/config.hpp>
+
+#include <boost/test/utils/runtime/fwd.hpp>
+#include <boost/test/utils/runtime/validation.hpp>
+
+#include <boost/test/utils/runtime/cla/parameter.hpp>
+#include <boost/test/utils/runtime/cla/argument_factory.hpp>
+
+// Boost.Test
+#include <boost/test/utils/rtti.hpp>
+
+namespace boost {
+
+namespace BOOST_RT_PARAM_NAMESPACE {
+
+namespace cla {
+
+// ************************************************************************** //
+// ************** runtime::cla::typed_parameter ************** //
+// ************************************************************************** //
+
+template<typename T>
+class typed_parameter : public cla::parameter {
+public:
+ explicit typed_parameter( identification_policy& ID ) : cla::parameter( ID, m_arg_factory ) {}
+
+ // parameter properties modification
+ template<typename Modifier>
+ void accept_modifier( Modifier const& m )
+ {
+ cla::parameter::accept_modifier( m );
+
+ m_arg_factory.accept_modifier( m );
+
+ BOOST_RT_PARAM_VALIDATE_LOGIC( !p_optional || !m_arg_factory.m_value_generator,
+ BOOST_RT_PARAM_LITERAL( "couldn't define a value generator for optional parameter " ) << id_2_report() );
+ }
+
+private:
+ // Data members
+ typed_argument_factory<T> m_arg_factory;
+};
+
+} // namespace cla
+
+} // namespace BOOST_RT_PARAM_NAMESPACE
+
+} // namespace boost
+
+// ************************************************************************** //
+// Revision History:
+//
+// $Log: typed_parameter.hpp,v $
+// Revision 1.1 2005/04/12 06:42:43 rogeeff
+// Runtime.Param library initial commit
+//
+// ************************************************************************** //
+
+#endif // BOOST_RT_CLA_TYPED_PARAMETER_HPP_062604GER
diff --git a/boost/boost/test/utils/runtime/cla/validation.cpp b/boost/boost/test/utils/runtime/cla/validation.cpp
new file mode 100644
index 00000000000..c72d3a00b6d
--- /dev/null
+++ b/boost/boost/test/utils/runtime/cla/validation.cpp
@@ -0,0 +1,25 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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)
+
+// See http://www.boost.org/libs/test for the library home page.
+//
+// File : $RCSfile: validation.cpp,v $
+//
+// Version : $Revision: 1.1 $
+//
+// Description : input validation helpers offline implementation
+// ***************************************************************************
+
+#define BOOST_RT_PARAM_INLINE
+#include <boost/test/utils/runtime/cla/validation.ipp>
+
+// ************************************************************************** //
+// Revision History:
+//
+// $Log: validation.cpp,v $
+// Revision 1.1 2005/04/12 06:42:43 rogeeff
+// Runtime.Param library initial commit
+//
+// ************************************************************************** //
diff --git a/boost/boost/test/utils/runtime/cla/validation.hpp b/boost/boost/test/utils/runtime/cla/validation.hpp
new file mode 100644
index 00000000000..bf20ec67d1e
--- /dev/null
+++ b/boost/boost/test/utils/runtime/cla/validation.hpp
@@ -0,0 +1,64 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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)
+
+// See http://www.boost.org/libs/test for the library home page.
+//
+// File : $RCSfile: validation.hpp,v $
+//
+// Version : $Revision: 1.1 $
+//
+// Description : input validation helpers definition
+// ***************************************************************************
+
+#ifndef BOOST_RT_CLA_VALIDATION_HPP_062604GER
+#define BOOST_RT_CLA_VALIDATION_HPP_062604GER
+
+// Boost.Runtime.Parameter
+#include <boost/test/utils/runtime/config.hpp>
+
+#include <boost/test/utils/runtime/cla/fwd.hpp>
+
+namespace boost {
+
+namespace BOOST_RT_PARAM_NAMESPACE {
+
+namespace cla {
+
+// ************************************************************************** //
+// ************** runtime::cla::report_input_error ************** //
+// ************************************************************************** //
+
+void report_input_error( argv_traverser const& tr, format_stream& msg );
+
+//____________________________________________________________________________//
+
+#define BOOST_RT_CLA_VALIDATE_INPUT( b, tr, msg ) \
+ if( b ) ; else ::boost::BOOST_RT_PARAM_NAMESPACE::cla::report_input_error( tr, format_stream().ref() << msg )
+
+//____________________________________________________________________________//
+
+} // namespace cla
+
+} // namespace BOOST_RT_PARAM_NAMESPACE
+
+} // namespace boost
+
+#ifndef BOOST_RT_PARAM_OFFLINE
+
+# define BOOST_RT_PARAM_INLINE inline
+# include <boost/test/utils/runtime/cla/validation.ipp>
+
+#endif
+
+// ************************************************************************** //
+// Revision History:
+//
+// $Log: validation.hpp,v $
+// Revision 1.1 2005/04/12 06:42:43 rogeeff
+// Runtime.Param library initial commit
+//
+// ************************************************************************** //
+
+#endif // BOOST_RT_CLA_VALIDATION_HPP_062604GER
diff --git a/boost/boost/test/utils/runtime/cla/validation.ipp b/boost/boost/test/utils/runtime/cla/validation.ipp
new file mode 100644
index 00000000000..c02b3f1d991
--- /dev/null
+++ b/boost/boost/test/utils/runtime/cla/validation.ipp
@@ -0,0 +1,73 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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)
+
+// See http://www.boost.org/libs/test for the library home page.
+//
+// File : $RCSfile: validation.ipp,v $
+//
+// Version : $Revision: 1.1 $
+//
+// Description : input validation helpers implementation
+// ***************************************************************************
+
+#ifndef BOOST_RT_CLA_VALIDATION_IPP_070604GER
+#define BOOST_RT_CLA_VALIDATION_IPP_070604GER
+
+// Boost.Runtime.Parameter
+#include <boost/test/utils/runtime/config.hpp>
+
+#include <boost/test/utils/runtime/cla/argv_traverser.hpp>
+#include <boost/test/utils/runtime/cla/validation.hpp>
+
+// Boost
+#include <boost/test/utils/basic_cstring/io.hpp>
+
+// STL
+
+namespace boost {
+
+namespace BOOST_RT_PARAM_NAMESPACE {
+
+namespace cla {
+
+// ************************************************************************** //
+// ************** runtime::cla::validation ************** //
+// ************************************************************************** //
+
+BOOST_RT_PARAM_INLINE void
+report_input_error( argv_traverser const& tr, format_stream& msg )
+{
+ if( tr.eoi() )
+ msg << BOOST_RT_PARAM_LITERAL( " at the end of input" );
+ else {
+ msg << BOOST_RT_PARAM_LITERAL( " in the following position: " );
+
+ if( tr.input().size() > 5 )
+ msg << tr.input().substr( 0, 5 ) << BOOST_RT_PARAM_LITERAL( "..." );
+ else
+ msg << tr.input();
+ }
+
+ throw BOOST_RT_PARAM_NAMESPACE::logic_error( msg.str() );
+}
+
+//____________________________________________________________________________//
+
+} // namespace cla
+
+} // namespace BOOST_RT_PARAM_NAMESPACE
+
+} // namespace boost
+
+// ************************************************************************** //
+// Revision History:
+//
+// $Log: validation.ipp,v $
+// Revision 1.1 2005/04/12 06:42:43 rogeeff
+// Runtime.Param library initial commit
+//
+// ************************************************************************** //
+
+#endif // BOOST_RT_CLA_VALIDATION_IPP_070604GER
diff --git a/boost/boost/test/utils/runtime/cla/value_generator.hpp b/boost/boost/test/utils/runtime/cla/value_generator.hpp
new file mode 100644
index 00000000000..44d02d7d3d5
--- /dev/null
+++ b/boost/boost/test/utils/runtime/cla/value_generator.hpp
@@ -0,0 +1,90 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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)
+
+// See http://www.boost.org/libs/test for the library home page.
+//
+// File : $RCSfile: value_generator.hpp,v $
+//
+// Version : $Revision: 1.1 $
+//
+// Description : specific value generators
+// ***************************************************************************
+
+#ifndef BOOST_RT_CLA_VALUE_GENERATOR_HPP_062604GER
+#define BOOST_RT_CLA_VALUE_GENERATOR_HPP_062604GER
+
+// Boost.Runtime.Parameter
+#include <boost/test/utils/runtime/config.hpp>
+
+#include <boost/test/utils/runtime/cla/fwd.hpp>
+#include <boost/test/utils/runtime/cla/parser.hpp>
+
+namespace boost {
+
+namespace BOOST_RT_PARAM_NAMESPACE {
+
+namespace cla {
+
+namespace rt_cla_detail {
+
+// ************************************************************************** //
+// ************** runtime::cla::const_generator ************** //
+// ************************************************************************** //
+
+template<typename T>
+class const_generator {
+public:
+ // Constructor
+ explicit const_generator( T const& t ) : m_const_value( t ) {}
+
+ // generator interface
+ void operator()( parser const&, boost::optional<T>& t ) const { t = m_const_value; }
+
+private:
+ // Data members
+ T m_const_value;
+};
+
+// ************************************************************************** //
+// ************** runtime::cla::ref_generator ************** //
+// ************************************************************************** //
+
+template<typename T>
+class ref_generator {
+public:
+ // Constructor
+ explicit ref_generator( cstring ref_id ) : m_ref_id( ref_id ) {}
+
+ // generator interface
+ void operator()( parser const& p, boost::optional<T>& t ) const
+ {
+ p.get( m_ref_id, t );
+ }
+
+private:
+ // Data members
+ cstring m_ref_id;
+};
+
+//____________________________________________________________________________//
+
+} // namespace rt_cla_detail
+
+} // namespace cla
+
+} // namespace BOOST_RT_PARAM_NAMESPACE
+
+} // namespace boost
+
+// ************************************************************************** //
+// Revision History:
+//
+// $Log: value_generator.hpp,v $
+// Revision 1.1 2005/04/12 06:42:43 rogeeff
+// Runtime.Param library initial commit
+//
+// ************************************************************************** //
+
+#endif // BOOST_RT_CLA_VALUE_GENERATOR_HPP_062604GER
diff --git a/boost/boost/test/utils/runtime/cla/value_handler.hpp b/boost/boost/test/utils/runtime/cla/value_handler.hpp
new file mode 100644
index 00000000000..146e5fb2564
--- /dev/null
+++ b/boost/boost/test/utils/runtime/cla/value_handler.hpp
@@ -0,0 +1,66 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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)
+
+// See http://www.boost.org/libs/test for the library home page.
+//
+// File : $RCSfile: value_handler.hpp,v $
+//
+// Version : $Revision: 1.1 $
+//
+// Description : specific value handlers
+// ***************************************************************************
+
+#ifndef BOOST_RT_CLA_VALUE_HANDLER_HPP_062604GER
+#define BOOST_RT_CLA_VALUE_HANDLER_HPP_062604GER
+
+// Boost.Runtime.Parameter
+#include <boost/test/utils/runtime/config.hpp>
+
+#include <boost/test/utils/runtime/cla/fwd.hpp>
+
+namespace boost {
+
+namespace BOOST_RT_PARAM_NAMESPACE {
+
+namespace cla {
+
+namespace rt_cla_detail {
+
+// ************************************************************************** //
+// ************** runtime::cla::assigner ************** //
+// ************************************************************************** //
+
+template<typename T>
+class assigner {
+public:
+ // Constructor
+ explicit assigner( T& loc ) : m_target( loc ) {}
+
+ // value handler implementation
+ void operator()( parameter const&, T& t ) { m_target = t; }
+
+private:
+ // Data members
+ T& m_target;
+};
+
+} // namespace rt_cla_detail
+
+} // namespace cla
+
+} // namespace BOOST_RT_PARAM_NAMESPACE
+
+} // namespace boost
+
+// ************************************************************************** //
+// Revision History:
+//
+// $Log: value_handler.hpp,v $
+// Revision 1.1 2005/04/12 06:42:43 rogeeff
+// Runtime.Param library initial commit
+//
+// ************************************************************************** //
+
+#endif // BOOST_RT_CLA_VALUE_HANDLER_HPP_062604GER
diff --git a/boost/boost/test/utils/runtime/config.hpp b/boost/boost/test/utils/runtime/config.hpp
new file mode 100644
index 00000000000..557f9c829df
--- /dev/null
+++ b/boost/boost/test/utils/runtime/config.hpp
@@ -0,0 +1,153 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: config.hpp,v $
+//
+// Version : $Revision: 1.3 $
+//
+// Description : Runtime.Param library configuration
+// ***************************************************************************
+
+#ifndef BOOST_RT_CONFIG_HPP_062604GER
+#define BOOST_RT_CONFIG_HPP_062604GER
+
+// Boost
+#include <boost/config.hpp>
+#ifdef BOOST_MSVC
+# pragma warning(disable: 4511) // copy constructor could not be generated
+# pragma warning(disable: 4512) // assignment operator could not be generated
+# pragma warning(disable: 4181) // qualifier applied to reference type; ignored
+# pragma warning(disable: 4675) // resolved overload was found by argument-dependent lookup
+#endif
+
+// Boost.Test
+#include <boost/test/detail/config.hpp>
+#include <boost/test/utils/basic_cstring/basic_cstring.hpp>
+#include <boost/test/utils/wrap_stringstream.hpp>
+
+// STL
+#include <string>
+#include <cstdlib>
+
+//____________________________________________________________________________//
+
+#ifndef BOOST_RT_PARAM_CUSTOM_STRING
+# ifndef BOOST_RT_PARAM_WIDE_STRING
+# define BOOST_RT_PARAM_NAMESPACE runtime
+# else
+# define BOOST_RT_PARAM_NAMESPACE wide_runtime
+# endif
+#endif
+
+namespace boost {
+
+namespace BOOST_RT_PARAM_NAMESPACE {
+
+#ifndef BOOST_RT_PARAM_CUSTOM_STRING
+# ifndef BOOST_RT_PARAM_WIDE_STRING
+
+typedef char char_type;
+typedef std::string dstring;
+typedef unit_test::const_string cstring;
+typedef unit_test::literal_string literal_cstring;
+typedef wrap_stringstream format_stream;
+
+#ifdef BOOST_CLASSIC_IOSTREAMS
+typedef std::ostream out_stream;
+#else
+typedef std::basic_ostream<char_type> out_stream;
+#endif
+
+#if defined(__COMO__)
+inline void
+putenv_impl( cstring name, cstring value )
+{
+ using namespace std;
+ // !! this may actually fail. What should we do?
+ setenv( name.begin(), value.begin(), 1 );
+}
+#else
+inline void
+putenv_impl( cstring name, cstring value )
+{
+ format_stream fs;
+
+ fs << name << '=' << value;
+
+ // !! this may actually fail. What should we do?
+ // const_cast is used to satisfy putenv interface
+ using namespace std;
+ putenv( const_cast<char*>( fs.str().c_str() ) );
+}
+#endif
+
+#define BOOST_RT_PARAM_LITERAL( l ) l
+#define BOOST_RT_PARAM_CSTRING_LITERAL( l ) cstring( l, sizeof( l ) - 1 )
+#define BOOST_RT_PARAM_GETENV getenv
+#define BOOST_RT_PARAM_PUTENV putenv_impl
+#define BOOST_RT_PARAM_EXCEPTION_INHERIT_STD
+
+//____________________________________________________________________________//
+
+# else
+
+typedef wchar_t char_type;
+typedef std::basic_string<char_type> dstring;
+typedef unit_test::basic_cstring<wchar_t const> cstring;
+typedef const unit_test::basic_cstring<wchar_t const> literal_cstring;
+typedef wrap_wstringstream format_stream;
+typedef std::wostream out_stream;
+
+inline void
+putenv_impl( cstring name, cstring value )
+{
+ format_stream fs;
+
+ fs << name << '=' << value;
+
+ // !! this may actually fail. What should we do?
+ // const_cast is used to satisfy putenv interface
+ using namespace std;
+ wputenv( const_cast<wchar_t*>( fs.str().c_str() ) );
+}
+
+#define BOOST_RT_PARAM_LITERAL( l ) L ## l
+#define BOOST_RT_PARAM_CSTRING_LITERAL( l ) cstring( L ## l, sizeof( L ## l )/sizeof(wchar_t) - 1 )
+#define BOOST_RT_PARAM_GETENV wgetenv
+#define BOOST_RT_PARAM_PUTENV putenv_impl
+
+# endif
+#endif
+
+#ifdef __GNUC__
+#define BOOST_RT_PARAM_UNNEEDED_VIRTUAL virtual
+#else
+#define BOOST_RT_PARAM_UNNEEDED_VIRTUAL
+#endif
+
+//____________________________________________________________________________//
+
+} // namespace BOOST_RT_PARAM_NAMESPACE
+
+} // namespace boost
+
+// ************************************************************************** //
+// Revision History:
+//
+// $Log: config.hpp,v $
+// Revision 1.3 2005/05/06 04:02:52 rogeeff
+// include ctdlib for setenv
+//
+// Revision 1.2 2005/05/05 05:55:31 rogeeff
+// portability fixes
+//
+// Revision 1.1 2005/04/12 06:42:42 rogeeff
+// Runtime.Param library initial commit
+//
+// ************************************************************************** //
+
+#endif // BOOST_RT_CONFIG_HPP_062604GER
diff --git a/boost/boost/test/utils/runtime/configuration.hpp b/boost/boost/test/utils/runtime/configuration.hpp
new file mode 100644
index 00000000000..b4cc8c4eb22
--- /dev/null
+++ b/boost/boost/test/utils/runtime/configuration.hpp
@@ -0,0 +1,70 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: configuration.hpp,v $
+//
+// Version : $Revision: 1.1 $
+//
+// Description : abstract interface for the formal parameter
+// ***************************************************************************
+
+#ifndef BOOST_RT_CONFIGURATION_HPP_062604GER
+#define BOOST_RT_CONFIGURATION_HPP_062604GER
+
+// Boost.Runtime.Parameter
+#include <boost/test/utils/runtime/config.hpp>
+#include <boost/test/utils/runtime/parameter.hpp>
+#include <boost/test/utils/runtime/argument.hpp>
+
+namespace boost {
+
+namespace BOOST_RT_PARAM_NAMESPACE {
+
+// ************************************************************************** //
+// ************** runtime::configuration ************** //
+// ************************************************************************** //
+
+class config_source {
+ virtual parameter const& config_param_begin() const = 0;
+ virtual parameter const& config_param_end() const = 0;
+
+protected:
+ config_source() {}
+ ~config_source() {}
+};
+
+// ************************************************************************** //
+// ************** runtime::configuration ************** //
+// ************************************************************************** //
+
+template<typename StoragePolicy,typename IdentificationPlicy,typename ConflictResolutionPolicy>
+class configuration : public StoragePolicy, public IdentificationPlicy, public ConflictResolutionPolicy {
+public:
+ // Constructor
+ configuration();
+
+ void use( config_source const& )
+ {
+
+ }
+private:
+};
+
+} // namespace BOOST_RT_PARAM_NAMESPACE
+
+} // namespace boost
+
+// ************************************************************************** //
+// Revision History:
+//
+// $Log: configuration.hpp,v $
+// Revision 1.1 2005/04/12 06:42:42 rogeeff
+// Runtime.Param library initial commit
+//
+// ************************************************************************** //
+
+#endif // BOOST_RT_CONFIGURATION_HPP_062604GER
diff --git a/boost/boost/test/utils/runtime/env/environment.cpp b/boost/boost/test/utils/runtime/env/environment.cpp
new file mode 100644
index 00000000000..9b70c7152fe
--- /dev/null
+++ b/boost/boost/test/utils/runtime/env/environment.cpp
@@ -0,0 +1,32 @@
+// (C) Copyright Gennadiy Rozental 2004.
+// 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)
+
+// See http://www.boost.org/libs/test for the library home page.
+//
+// File : $RCSfile: environment.cpp,v $
+//
+// Version : $Revision: 1.1 $
+//
+// Description : implements offline model of program environment
+// ***************************************************************************
+
+#include <boost/test/utils/runtime/config.hpp>
+
+#ifdef BOOST_MSVC
+# pragma warning(disable: 4127) // conditional expression is constant
+# pragma warning(disable: 4701) // local environment 'result' may be used without having been initialized
+#endif
+
+#define BOOST_RT_PARAM_INLINE
+#include <boost/test/utils/runtime/env/environment.ipp>
+
+// ************************************************************************** //
+// Revision History:
+//
+// $Log: environment.cpp,v $
+// Revision 1.1 2005/04/12 06:42:43 rogeeff
+// Runtime.Param library initial commit
+//
+// ************************************************************************** //
diff --git a/boost/boost/test/utils/runtime/env/environment.hpp b/boost/boost/test/utils/runtime/env/environment.hpp
new file mode 100644
index 00000000000..b0e0e043eff
--- /dev/null
+++ b/boost/boost/test/utils/runtime/env/environment.hpp
@@ -0,0 +1,183 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: environment.hpp,v $
+//
+// Version : $Revision: 1.3 $
+//
+// Description : defines and implements inline model of program environment
+// ***************************************************************************
+
+#ifndef BOOST_RT_ENV_ENVIRONMENT_HPP_062604GER
+#define BOOST_RT_ENV_ENVIRONMENT_HPP_062604GER
+
+// Boost.Runtime.Parameter
+#include <boost/test/utils/runtime/config.hpp>
+#include <boost/test/utils/runtime/fwd.hpp>
+#include <boost/test/utils/runtime/argument.hpp>
+#include <boost/test/utils/runtime/interpret_argument_value.hpp>
+
+#include <boost/test/utils/runtime/env/fwd.hpp>
+#include <boost/test/utils/runtime/env/modifier.hpp>
+#include <boost/test/utils/runtime/env/variable.hpp>
+
+// Boost.Test
+#include <boost/test/utils/callback.hpp>
+
+// Boost
+#include <boost/optional.hpp>
+
+namespace boost {
+
+namespace BOOST_RT_PARAM_NAMESPACE {
+
+// ************************************************************************** //
+// ************** runtime::environment implementation ************** //
+// ************************************************************************** //
+
+namespace environment {
+
+namespace rt_env_detail {
+
+template<typename T, typename Modifiers>
+variable_data&
+init_new_var( cstring var_name, Modifiers m = nfp::no_params )
+{
+ rt_env_detail::variable_data& new_vd = new_var_record( var_name );
+
+ cstring str_value = sys_read_var( new_vd.m_var_name );
+
+ if( !str_value.is_empty() ) {
+ try {
+ boost::optional<T> value;
+
+ if( m.has( interpreter ) )
+ m[interpreter]( str_value, value );
+ else
+ interpret_argument_value( str_value, value, 0 );
+
+ if( !!value ) {
+ new_vd.m_value.reset( new typed_argument<T>( new_vd ) );
+
+ arg_value<T>( *new_vd.m_value ) = *value;
+ }
+ }
+ catch( ... ) { // !! could we do that
+ // !! should we report an error?
+ }
+ }
+
+ if( !new_vd.m_value && m.has( default_value ) ) {
+ new_vd.m_value.reset( new typed_argument<T>( new_vd ) );
+
+ nfp::optionally_assign( arg_value<T>( *new_vd.m_value ), m[default_value] );
+ }
+
+ nfp::optionally_assign( new_vd.m_global_id, m, global_id );
+
+ return new_vd;
+}
+
+//____________________________________________________________________________//
+
+} // namespace rt_env_detail
+
+} // namespace environment
+
+// ************************************************************************** //
+// ************** runtime::environment ************** //
+// ************************************************************************** //
+
+namespace environment {
+
+ // variable access
+ variable_base
+ var( cstring var_name );
+
+ //________________________________________________________________________//
+
+ template<typename T>
+ inline variable<T>
+ var( cstring var_name )
+ {
+ rt_env_detail::variable_data* vd = rt_env_detail::find_var_record( var_name );
+
+ return environment::variable<T>( !vd ? rt_env_detail::init_new_var<T>( var_name, nfp::no_params ) : *vd );
+ }
+
+ //________________________________________________________________________//
+
+ template<typename T, typename Modifiers>
+ inline variable<T>
+ var( cstring var_name, Modifiers const& m )
+ {
+ rt_env_detail::variable_data* vd = rt_env_detail::find_var_record( var_name );
+
+ return environment::variable<T>( !vd ? rt_env_detail::init_new_var<T>( var_name, m ) : *vd );
+ }
+
+ //________________________________________________________________________//
+
+ // direct variable value access
+ inline cstring
+ get( cstring var_name )
+ {
+ return environment::var<cstring>( var_name ).value();
+ }
+
+ //________________________________________________________________________//
+
+ template<typename T>
+ inline T const&
+ get( cstring var_name )
+ {
+ return environment::var<T>( var_name ).value();
+ }
+
+ //________________________________________________________________________//
+
+ template<typename T>
+ inline void
+ get( cstring var_name, boost::optional<T>& res )
+ {
+ variable<T> const& v = environment::var<T>( var_name );
+ v.value( res );
+ }
+
+ //________________________________________________________________________//
+
+} // namespace environment
+
+namespace env = environment;
+
+} // namespace BOOST_RT_PARAM_NAMESPACE
+
+} // namespace boost
+
+#ifndef BOOST_RT_PARAM_OFFLINE
+
+#define BOOST_RT_PARAM_INLINE inline
+#include <boost/test/utils/runtime/env/environment.ipp>
+
+#endif
+
+// ************************************************************************** //
+// Revision History:
+//
+// $Log: environment.hpp,v $
+// Revision 1.3 2005/05/14 05:41:10 rogeeff
+// *** empty log message ***
+//
+// Revision 1.2 2005/05/14 05:34:57 rogeeff
+// *** empty log message ***
+//
+// Revision 1.1 2005/04/12 06:42:43 rogeeff
+// Runtime.Param library initial commit
+//
+// ************************************************************************** //
+
+#endif // BOOST_RT_ENV_ENVIRONMENT_HPP_062604GER
diff --git a/boost/boost/test/utils/runtime/env/environment.ipp b/boost/boost/test/utils/runtime/env/environment.ipp
new file mode 100644
index 00000000000..53d9e972140
--- /dev/null
+++ b/boost/boost/test/utils/runtime/env/environment.ipp
@@ -0,0 +1,138 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: environment.ipp,v $
+//
+// Version : $Revision: 1.5 $
+//
+// Description : implements model of program environment
+// ***************************************************************************
+
+#ifndef BOOST_RT_ENV_ENVIRONMENT_IPP_062904GER
+#define BOOST_RT_ENV_ENVIRONMENT_IPP_062904GER
+
+// Boost.Runtime.Parameter
+#include <boost/test/utils/runtime/config.hpp>
+#include <boost/test/utils/runtime/validation.hpp>
+
+#include <boost/test/utils/runtime/env/variable.hpp>
+
+// Boost.Test
+#include <boost/test/utils/basic_cstring/compare.hpp>
+#include <boost/test/utils/basic_cstring/io.hpp>
+
+// STL
+#include <map>
+#include <list>
+
+namespace boost {
+
+namespace BOOST_RT_PARAM_NAMESPACE {
+
+namespace environment {
+
+// ************************************************************************** //
+// ************** runtime::environment ************** //
+// ************************************************************************** //
+
+namespace rt_env_detail {
+
+typedef std::map<cstring,rt_env_detail::variable_data> registry;
+typedef std::list<dstring> keys;
+
+BOOST_RT_PARAM_INLINE registry& s_registry() { static registry instance; return instance; }
+BOOST_RT_PARAM_INLINE keys& s_keys() { static keys instance; return instance; }
+
+BOOST_RT_PARAM_INLINE variable_data&
+new_var_record( cstring var_name )
+{
+ // save the name in list of keys
+ s_keys().push_back( dstring() );
+ dstring& key = s_keys().back();
+ assign_op( key, var_name, 0 );
+
+ // create and return new record
+ variable_data& new_var_data = s_registry()[key];
+
+ new_var_data.m_var_name = key;
+
+ return new_var_data;
+}
+
+//____________________________________________________________________________//
+
+BOOST_RT_PARAM_INLINE variable_data*
+find_var_record( cstring var_name )
+{
+ registry::iterator it = s_registry().find( var_name );
+
+ return it == s_registry().end() ? 0 : &(it->second);
+}
+
+//____________________________________________________________________________//
+
+BOOST_RT_PARAM_INLINE cstring
+sys_read_var( cstring var_name )
+{
+ using namespace std;
+ return BOOST_RT_PARAM_GETENV( var_name.begin() );
+}
+
+//____________________________________________________________________________//
+
+BOOST_RT_PARAM_INLINE void
+sys_write_var( cstring var_name, format_stream& var_value )
+{
+ BOOST_RT_PARAM_PUTENV( var_name, cstring( var_value.str() ) );
+}
+
+//____________________________________________________________________________//
+
+} // namespace rt_env_detail
+
+BOOST_RT_PARAM_INLINE variable_base
+var( cstring var_name )
+{
+ rt_env_detail::variable_data* vd = rt_env_detail::find_var_record( var_name );
+
+ BOOST_RT_PARAM_VALIDATE_LOGIC( !!vd,
+ BOOST_RT_PARAM_LITERAL( "First access to the environment variable " )
+ << var_name << BOOST_RT_PARAM_LITERAL( " should be typed" ) );
+
+ return variable_base( *vd );
+}
+
+//____________________________________________________________________________//
+
+} // namespace environment
+
+} // namespace BOOST_RT_PARAM_NAMESPACE
+
+} // namespace boost
+
+// ************************************************************************** //
+// Revision History:
+//
+// $Log: environment.ipp,v $
+// Revision 1.5 2005/05/14 05:41:10 rogeeff
+// *** empty log message ***
+//
+// Revision 1.4 2005/05/05 05:55:45 rogeeff
+// portability fixes
+//
+// Revision 1.3 2005/05/03 05:02:50 rogeeff
+// como fixes
+//
+// Revision 1.2 2005/04/27 03:29:52 rogeeff
+// portability fix
+//
+// Revision 1.1 2005/04/12 06:42:43 rogeeff
+// Runtime.Param library initial commit
+//
+// ************************************************************************** //
+
+#endif // BOOST_RT_ENV_ENVIRONMENT_IPP_062904GER
diff --git a/boost/boost/test/utils/runtime/env/fwd.hpp b/boost/boost/test/utils/runtime/env/fwd.hpp
new file mode 100644
index 00000000000..c3ded7d66af
--- /dev/null
+++ b/boost/boost/test/utils/runtime/env/fwd.hpp
@@ -0,0 +1,57 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: fwd.hpp,v $
+//
+// Version : $Revision: 1.1 $
+//
+// Description : environment subsystem forward declarations
+// ***************************************************************************
+
+#ifndef BOOST_RT_ENV_FWD_HPP_062604GER
+#define BOOST_RT_ENV_FWD_HPP_062604GER
+
+// Boost.Runtime.Parameter
+#include <boost/test/utils/runtime/config.hpp>
+
+namespace boost {
+
+namespace BOOST_RT_PARAM_NAMESPACE {
+
+namespace environment {
+
+namespace rt_env_detail {
+
+struct variable_data;
+
+variable_data& new_var_record( cstring var_name );
+variable_data* find_var_record( cstring var_name );
+
+cstring sys_read_var( cstring var_name );
+void sys_write_var( cstring var_name, format_stream& var_value );
+
+}
+
+class variable_base;
+template <typename T> class variable;
+
+} // namespace environment
+
+} // namespace BOOST_RT_PARAM_NAMESPACE
+
+} // namespace boost
+
+// ************************************************************************** //
+// Revision History:
+//
+// $Log: fwd.hpp,v $
+// Revision 1.1 2005/04/12 06:42:43 rogeeff
+// Runtime.Param library initial commit
+//
+// ************************************************************************** //
+
+#endif // BOOST_RT_ENV_FWD_HPP_062604GER
diff --git a/boost/boost/test/utils/runtime/env/modifier.hpp b/boost/boost/test/utils/runtime/env/modifier.hpp
new file mode 100644
index 00000000000..feb0bfb85fe
--- /dev/null
+++ b/boost/boost/test/utils/runtime/env/modifier.hpp
@@ -0,0 +1,56 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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)
+
+// See http://www.boost.org/libs/test for the library home page.
+//
+// File : $RCSfile: modifier.hpp,v $
+//
+// Version : $Revision: 1.1 $
+//
+// Description : defines variable modifiers
+// ***************************************************************************
+
+#ifndef BOOST_RT_ENV_MODIFIER_HPP_062604GER
+#define BOOST_RT_ENV_MODIFIER_HPP_062604GER
+
+// Boost.Runtime.Parameter
+#include <boost/test/utils/runtime/config.hpp>
+
+// Boost.Test
+#include <boost/test/utils/named_params.hpp>
+
+namespace boost {
+
+namespace BOOST_RT_PARAM_NAMESPACE {
+
+namespace environment {
+
+// ************************************************************************** //
+// ************** environment variable modifiers ************** //
+// ************************************************************************** //
+
+namespace {
+
+nfp::typed_keyword<cstring,struct global_id_t> global_id;
+nfp::keyword<struct default_value_t> default_value;
+nfp::keyword<struct interpreter_t> interpreter;
+
+} // local namespace
+} // namespace environment
+
+} // namespace BOOST_RT_PARAM_NAMESPACE
+
+} // namespace boost
+
+// ************************************************************************** //
+// Revision History:
+//
+// $Log: modifier.hpp,v $
+// Revision 1.1 2005/04/12 06:42:43 rogeeff
+// Runtime.Param library initial commit
+//
+// ************************************************************************** //
+
+#endif // BOOST_RT_ENV_MODIFIER_HPP_062604GER
diff --git a/boost/boost/test/utils/runtime/env/variable.hpp b/boost/boost/test/utils/runtime/env/variable.hpp
new file mode 100644
index 00000000000..67506aefaea
--- /dev/null
+++ b/boost/boost/test/utils/runtime/env/variable.hpp
@@ -0,0 +1,225 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: variable.hpp,v $
+//
+// Version : $Revision: 1.2 $
+//
+// Description : defines model of program environment variable
+// ***************************************************************************
+
+#ifndef BOOST_RT_ENV_VARIABLE_HPP_062604GER
+#define BOOST_RT_ENV_VARIABLE_HPP_062604GER
+
+// Boost.Runtime.Parameter
+#include <boost/test/utils/runtime/config.hpp>
+#include <boost/test/utils/runtime/fwd.hpp>
+#include <boost/test/utils/runtime/parameter.hpp>
+#include <boost/test/utils/runtime/argument.hpp>
+
+#include <boost/test/utils/runtime/env/fwd.hpp>
+
+// Boost
+#include <boost/optional.hpp>
+
+namespace boost {
+
+namespace BOOST_RT_PARAM_NAMESPACE {
+
+namespace environment {
+
+// ************************************************************************** //
+// ************** runtime::environment::variable_data ************** //
+// ************************************************************************** //
+
+namespace rt_env_detail {
+
+struct variable_data : public runtime::parameter {
+ cstring m_var_name;
+ dstring m_global_id;
+ argument_ptr m_value;
+};
+
+} // namespace rt_env_detail
+
+// ************************************************************************** //
+// ************** runtime::environment::variable_base ************** //
+// ************************************************************************** //
+
+class variable_base {
+public:
+ explicit variable_base( rt_env_detail::variable_data& data ) : m_data( &data ) {}
+
+ // arguments access
+ template<typename T>
+ T const& value() const
+ {
+ return arg_value<T>( *m_data->m_value );
+ }
+
+ template<typename T>
+ void value( boost::optional<T>& res ) const
+ {
+ if( has_value() )
+ res = arg_value<T>( *m_data->m_value );
+ else
+ res.reset();
+ }
+
+ bool has_value() const { return m_data->m_value; }
+ cstring name() const { return m_data->m_var_name; }
+
+protected:
+ // Data members
+ rt_env_detail::variable_data* m_data;
+} ;
+
+// ************************************************************************** //
+// ************** runtime::environment::variable ************** //
+// ************************************************************************** //
+
+template<typename T = cstring>
+class variable : public variable_base {
+public:
+ // Constructors
+ explicit variable( cstring var_name );
+
+ template<typename Modifiers>
+ explicit variable( cstring var_name, Modifiers const& m );
+
+ explicit variable( rt_env_detail::variable_data& data )
+ : variable_base( data ) {}
+
+ // other variable assignment
+ void operator=( variable const& v ) { m_data = v.m_data; }
+
+ // access methods
+ T const& value() const { return variable_base::value<T>(); }
+
+ using variable_base::value;
+
+ // Value assignment
+ template<typename V>
+ void operator=( V const& v )
+ {
+ if( !has_value() )
+ m_data->m_value.reset( new typed_argument<T>( *m_data ) );
+
+ arg_value<T>( *m_data->m_value ) = v;
+
+ rt_env_detail::sys_write_var( m_data->m_var_name, format_stream().ref() << value() );
+ }
+}; // class variable
+
+//____________________________________________________________________________//
+
+template<typename CharT, typename Tr,typename T>
+inline std::basic_ostream<CharT,Tr>&
+operator<<( std::basic_ostream<CharT,Tr>& os, variable<T> const& v )
+{
+ os << v.name() << '=';
+
+ if( v.has_value() )
+ os << v.value();
+
+ return os;
+}
+
+//____________________________________________________________________________//
+
+template<typename T, typename V>
+inline bool
+operator==( variable<T> ev, V const& v )
+{
+ return ev.has_value() && ev.value() == v;
+}
+
+//____________________________________________________________________________//
+
+template<typename T, typename V>
+inline bool
+operator==( V const& v, variable<T> ev )
+{
+ return ev.has_value() && ev.value() == v;
+}
+
+//____________________________________________________________________________//
+
+template<typename T, typename V>
+inline bool
+operator!=( variable<T> ev, V const& v )
+{
+ return !ev.has_value() || ev.value() != v;
+}
+
+//____________________________________________________________________________//
+
+template<typename T, typename V>
+inline bool
+operator!=( V const& v, variable<T> ev )
+{
+ return !ev.has_value() || ev.value() != v;
+}
+
+//____________________________________________________________________________//
+
+} // namespace environment
+
+} // namespace BOOST_RT_PARAM_NAMESPACE
+
+} // namespace boost
+
+// ************************************************************************** //
+// ************************************************************************** //
+// Implementation
+
+#include <boost/test/utils/runtime/env/environment.hpp>
+
+// ************************************************************************** //
+// ************** runtime::environment::variable ************** //
+// ************************************************************************** //
+
+namespace boost {
+
+namespace BOOST_RT_PARAM_NAMESPACE {
+
+namespace environment {
+
+template<typename T>
+variable<T>::variable( cstring var_name )
+: variable_base( environment::var<T>( var_name ) )
+{}
+
+//____________________________________________________________________________//
+
+template<typename T>
+template<typename Modifiers>
+variable<T>::variable( cstring var_name, Modifiers const& m )
+: variable_base( environment::var<T>( var_name, m ) )
+{}
+
+//____________________________________________________________________________//
+
+} // namespace environment
+
+} // namespace BOOST_RT_PARAM_NAMESPACE
+
+} // namespace boost
+
+// ************************************************************************** //
+// Revision History:
+//
+// $Log: variable.hpp,v $
+// Revision 1.2 2005/05/05 05:55:45 rogeeff
+// portability fixes
+//
+// Revision 1.1 2005/04/12 06:42:43 rogeeff
+// Runtime.Param library initial commit
+//
+// ************************************************************************** //
+
+#endif // BOOST_RT_ENV_VARIABLE_HPP_062604GER
diff --git a/boost/boost/test/utils/runtime/file/config_file.cpp b/boost/boost/test/utils/runtime/file/config_file.cpp
new file mode 100644
index 00000000000..c4804a92779
--- /dev/null
+++ b/boost/boost/test/utils/runtime/file/config_file.cpp
@@ -0,0 +1,256 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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)
+
+// See http://www.boost.org/libs/test for the library home page.
+//
+// File : $RCSfile: config_file.cpp,v $
+//
+// Version : $Revision: 1.1 $
+//
+// Description : implements models configuration file, it's parameter and parameter namespaces
+// ***************************************************************************
+
+// Boost.Runtime.Parameter
+#include <boost/test/utils/runtime/config.hpp>
+
+#include <boost/test/utils/runtime/file/config_file.hpp>
+#include <boost/test/utils/runtime/validation.hpp>
+
+// Boost.Test
+#include <boost/test/utils/foreach.hpp>
+#include <boost/test/utils/basic_cstring/basic_cstring.hpp>
+#include <boost/test/utils/basic_cstring/io.hpp>
+#include <boost/test/utils/iterator/token_iterator.hpp>
+
+namespace boost {
+
+namespace BOOST_RT_PARAM_NAMESPACE {
+
+namespace file {
+
+// ************************************************************************** //
+// ************** runtime::file::parameter ************** //
+// ************************************************************************** //
+
+parameter::parameter( cstring name, cstring value, param_namespace const& parent )
+: m_parent( parent )
+{
+ assign_op( p_name.value, name, 0 );
+ assign_op( p_value.value, value, 0 );
+}
+
+//____________________________________________________________________________//
+
+std::ostream&
+operator<<( std::ostream& os, parameter const& p )
+{
+ p.m_parent.print_full_name( os );
+
+ return os << p.p_name << " = \"" << p.p_value << "\"";
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// ************** runtime::file::param_namespace ************** //
+// ************************************************************************** //
+
+param_namespace::param_namespace( cstring name, param_namespace const* parent )
+: p_parent( parent )
+{
+ assign_op( p_name.value, name );
+}
+
+//____________________________________________________________________________//
+
+void
+param_namespace::insert_param( cstring param_name, cstring param_value )
+{
+ BOOST_TEST_FOREACH( parameter const&, p, m_parameters )
+ BOOST_RT_PARAM_VALIDATE_LOGIC( p.p_name != param_name,
+ BOOST_RT_PARAM_LITERAL( "Duplicate parameter " ) << param_name );
+
+ m_parameters.push_back( parameter( param_name, param_value, *this ) );
+}
+
+//____________________________________________________________________________//
+
+param_namespace&
+param_namespace::subnamespace( cstring namespace_name )
+{
+ BOOST_TEST_FOREACH( param_namespace&, subns, m_subnamespaces )
+ if( subns.p_name == namespace_name )
+ return subns;
+
+ m_subnamespaces.push_back( param_namespace( namespace_name, this ) );
+
+ return m_subnamespaces.back();
+}
+
+//____________________________________________________________________________//
+
+void
+param_namespace::clear()
+{
+ m_parameters.clear();
+ m_subnamespaces.clear();
+}
+
+//____________________________________________________________________________//
+
+void
+param_namespace::print_full_name( std::ostream& os ) const
+{
+ if( !p_parent )
+ return;
+
+ p_parent.get()->print_full_name( os );
+
+ os << p_name << "::";
+}
+
+//____________________________________________________________________________//
+
+boost::optional<cstring>
+get_param_value( param_namespace const& where_from,
+ cstring name_part1,
+ cstring name_part2,
+ cstring name_part3,
+ cstring name_part4,
+ cstring name_part5 )
+{
+ if( name_part2.is_empty() ) {
+ boost::optional<cstring> res;
+
+ BOOST_TEST_FOREACH( parameter const&, p, where_from ) {
+ if( p.p_name == name_part1 ) {
+ res = cstring( p.p_value );
+ break;
+ }
+ }
+
+ return res;
+ }
+
+ param_namespace const* sns = get_param_subns( where_from, name_part1 );
+
+ return sns ? get_param_value( *sns, name_part2, name_part3, name_part4, name_part5 )
+ : boost::optional<cstring>();
+}
+
+//____________________________________________________________________________//
+
+cstring
+get_requ_param_value( param_namespace const& where_from,
+ cstring name_part1,
+ cstring name_part2,
+ cstring name_part3,
+ cstring name_part4,
+ cstring name_part5 )
+{
+ boost::optional<cstring> v = get_param_value( where_from, name_part1, name_part2, name_part3, name_part4, name_part5 );
+
+#define APPEND_PART( part ) (part.is_empty() ? "" : "::") << (part.is_empty() ? cstring() : part)
+ BOOST_RT_PARAM_VALIDATE_LOGIC( !!v, BOOST_RT_PARAM_LITERAL( "Required parameter " )
+ << name_part1
+ << APPEND_PART( name_part2 )
+ << APPEND_PART( name_part3 )
+ << APPEND_PART( name_part4 )
+ << APPEND_PART( name_part5 )
+ << BOOST_RT_PARAM_LITERAL( " value is missing" ) );
+#undef APPEND_PART
+
+ return *v;
+}
+
+//____________________________________________________________________________//
+
+param_namespace const*
+get_param_subns( param_namespace const& where_from, cstring namespace_name )
+{
+ param_namespace::sub_ns_const_iterator it = where_from.sub_ns_begin();
+ param_namespace::sub_ns_const_iterator end = where_from.sub_ns_end();
+
+ while( it != end ) {
+ if( it->p_name == namespace_name )
+ return &*it;
+
+ ++it;
+ }
+
+ return 0;
+}
+
+//____________________________________________________________________________//
+
+void
+param_namespace::load_impl( config_file_iterator cf_it,
+ cstring value_marker, cstring value_delimeter, cstring namespace_delimeter )
+{
+ using namespace unit_test;
+
+ while( cf_it != config_file_iterator() ) {
+ string_token_iterator ti( *cf_it, (max_tokens = 2,kept_delimeters = dt_none, dropped_delimeters = value_delimeter) );
+
+ cstring param_name = *ti;
+ cstring param_value = *(++ti);
+
+ param_value.trim( value_marker );
+
+ param_namespace* targ_ns = this;
+
+ while( !param_name.is_empty() ) {
+ cstring::size_type pos = param_name.find( namespace_delimeter );
+ cstring subname( param_name.begin(), pos == cstring::npos ? param_name.size() : pos );
+
+ if( subname.size() == param_name.size() ) {
+ targ_ns->insert_param( param_name, param_value );
+ break;
+ }
+ else {
+ targ_ns = &targ_ns->subnamespace( subname );
+
+ param_name.trim_left( subname.size() + namespace_delimeter.size() );
+ }
+ }
+ ++cf_it;
+ }
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// ************** runtime::file::config_file ************** //
+// ************************************************************************** //
+
+config_file::config_file()
+: param_namespace( cstring() )
+{
+}
+
+//____________________________________________________________________________//
+
+config_file::config_file( cstring file_name )
+: param_namespace( cstring() )
+{
+ load( file_name );
+}
+
+//____________________________________________________________________________//
+
+} // namespace file
+
+} // namespace BOOST_RT_PARAM_NAMESPACE
+
+} // namespace boost
+
+// ************************************************************************** //
+// Revision History:
+//
+// $Log: config_file.cpp,v $
+// Revision 1.1 2005/04/12 06:42:43 rogeeff
+// Runtime.Param library initial commit
+//
+// ************************************************************************** //
diff --git a/boost/boost/test/utils/runtime/file/config_file.hpp b/boost/boost/test/utils/runtime/file/config_file.hpp
new file mode 100644
index 00000000000..5c49e684788
--- /dev/null
+++ b/boost/boost/test/utils/runtime/file/config_file.hpp
@@ -0,0 +1,191 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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)
+
+// See http://www.boost.org/libs/test for the library home page.
+//
+// File : $RCSfile: config_file.hpp,v $
+//
+// Version : $Revision: 1.1 $
+//
+// Description : defines models configuration file, it's parameter and parameter namespaces
+// ***************************************************************************
+
+#ifndef BOOST_RT_FILE_CONFIG_FILE_HPP_010105GER
+#define BOOST_RT_FILE_CONFIG_FILE_HPP_010105GER
+
+// Boost.Runtime.Parameter
+#include <boost/test/utils/runtime/config.hpp>
+
+#include <boost/test/utils/runtime/file/config_file_iterator.hpp>
+
+// Boost.Test
+#include <boost/test/utils/class_properties.hpp>
+#include <boost/test/utils/named_params.hpp>
+
+// Boost
+#include <boost/optional.hpp>
+
+// STL
+#include <list>
+
+namespace boost {
+
+namespace BOOST_RT_PARAM_NAMESPACE {
+
+namespace file {
+
+// ************************************************************************** //
+// ************** runtime::file::parameter ************** //
+// ************************************************************************** //
+
+class param_namespace;
+
+class parameter {
+public:
+ // Constructor
+ parameter( cstring name, cstring value, param_namespace const& parent );
+
+ BOOST_READONLY_PROPERTY( dstring, (parameter)) p_name;
+ BOOST_READONLY_PROPERTY( dstring, (parameter)) p_value;
+
+ friend std::ostream& operator<<( std::ostream& os, parameter const& );
+
+private:
+ // Data members
+ param_namespace const& m_parent;
+};
+
+// ************************************************************************** //
+// ************** runtime::file::modifiers ************** //
+// ************************************************************************** //
+
+namespace {
+nfp::typed_keyword<cstring, struct value_marker_t> value_marker;
+nfp::typed_keyword<cstring, struct value_delimeter_t> value_delimeter;
+nfp::typed_keyword<cstring, struct namespace_delimeter_t> namespace_delimeter;
+} // local namespace
+
+// ************************************************************************** //
+// ************** runtime::file::param_namespace ************** //
+// ************************************************************************** //
+
+class param_namespace {
+public:
+ typedef std::list<parameter>::iterator iterator;
+ typedef std::list<parameter>::const_iterator const_iterator;
+ typedef std::list<param_namespace>::iterator sub_ns_iterator;
+ typedef std::list<param_namespace>::const_iterator sub_ns_const_iterator;
+
+ // Public properties
+ BOOST_READONLY_PROPERTY( dstring, (param_namespace)) p_name;
+ unit_test::readonly_property<param_namespace const*> p_parent;
+
+ void load( config_file_iterator cf_it ) { load( cf_it, nfp::no_params ); }
+ template<typename Modifier>
+ void load( config_file_iterator cf_it, Modifier const& m )
+ {
+ cstring vm = m.has( value_marker ) ? m[value_marker] : BOOST_RT_PARAM_CSTRING_LITERAL( "\"" );
+ cstring vd = m.has( value_delimeter ) ? m[value_delimeter] : BOOST_RT_PARAM_CSTRING_LITERAL( "= \t\n\r" );
+ cstring nd = m.has( namespace_delimeter ) ? m[namespace_delimeter] : BOOST_RT_PARAM_CSTRING_LITERAL( "::" );
+
+ load_impl( cf_it, vm, vd, nd );
+ }
+ void load( cstring file_name )
+ {
+ load( file_name, nfp::no_params );
+ }
+ template<typename Modifier>
+ void load( cstring file_name, Modifier const& m )
+ {
+ config_file_iterator cfi( file_name, m );
+
+ load( cfi, m );
+ }
+
+ void insert_param( cstring param_name, cstring param_value );
+ param_namespace& subnamespace( cstring namespace_name ); // find and insert if not present
+ void clear();
+
+ iterator begin() { return m_parameters.begin(); }
+ const_iterator begin() const { return m_parameters.begin(); }
+
+ iterator end() { return m_parameters.end(); }
+ const_iterator end() const { return m_parameters.end(); }
+
+ sub_ns_iterator sub_ns_begin() { return m_subnamespaces.begin(); }
+ sub_ns_const_iterator sub_ns_begin() const { return m_subnamespaces.begin(); }
+
+ sub_ns_iterator sub_ns_end() { return m_subnamespaces.end(); }
+ sub_ns_const_iterator sub_ns_end() const { return m_subnamespaces.end(); }
+
+ void print_full_name( std::ostream& os ) const;
+
+protected:
+ explicit param_namespace( cstring name, param_namespace const* parent = 0 );
+
+private:
+ void load_impl( config_file_iterator cf_it,
+ cstring value_marker_, cstring value_delimeter_, cstring namespace_delimeter_ );
+
+ // Data members
+ std::list<parameter> m_parameters;
+ std::list<param_namespace> m_subnamespaces;
+};
+
+//____________________________________________________________________________//
+
+boost::optional<cstring>
+get_param_value( param_namespace const& where_from,
+ cstring name_part1,
+ cstring name_part2 = cstring(),
+ cstring name_part3 = cstring(),
+ cstring name_part4 = cstring(),
+ cstring name_part5 = cstring() );
+
+//____________________________________________________________________________//
+
+cstring
+get_requ_param_value( param_namespace const& where_from,
+ cstring name_part1,
+ cstring name_part2 = cstring(),
+ cstring name_part3 = cstring(),
+ cstring name_part4 = cstring(),
+ cstring name_part5 = cstring() );
+
+//____________________________________________________________________________//
+
+param_namespace const*
+get_param_subns( param_namespace const& where_from,
+ cstring namespace_name );
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// ************** runtime::file::config_file ************** //
+// ************************************************************************** //
+
+class config_file : public param_namespace {
+public:
+ // Constructor
+ config_file();
+ config_file( cstring file_name );
+};
+
+} // namespace file
+
+} // namespace BOOST_RT_PARAM_NAMESPACE
+
+} // namespace boost
+
+// ************************************************************************** //
+// Revision History:
+//
+// $Log: config_file.hpp,v $
+// Revision 1.1 2005/04/12 06:42:44 rogeeff
+// Runtime.Param library initial commit
+//
+// ************************************************************************** //
+
+#endif // BOOST_RT_FILE_CONFIG_FILE_HPP_010105GER
diff --git a/boost/boost/test/utils/runtime/file/config_file_iterator.cpp b/boost/boost/test/utils/runtime/file/config_file_iterator.cpp
new file mode 100644
index 00000000000..7d6faa4e9a3
--- /dev/null
+++ b/boost/boost/test/utils/runtime/file/config_file_iterator.cpp
@@ -0,0 +1,687 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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)
+
+// See http://www.boost.org/libs/test for the library home page.
+//
+// File : $RCSfile: config_file_iterator.cpp,v $
+//
+// Version : $Revision: 1.1 $
+//
+// Description : flexible configuration file iterator implementation
+// ***************************************************************************
+
+// Boost.Runtime.Parameter
+#include <boost/test/utils/runtime/config.hpp>
+
+#include <boost/test/utils/runtime/file/config_file_iterator.hpp>
+#include <boost/test/utils/runtime/validation.hpp>
+
+#include <boost/test/utils/runtime/env/environment.hpp>
+
+// Boost
+#include <boost/utility.hpp>
+#include <boost/scoped_array.hpp>
+#include <boost/bind.hpp>
+
+// Boost.Test
+#include <boost/test/utils/basic_cstring/compare.hpp>
+#include <boost/test/utils/algorithm.hpp>
+#include <boost/test/utils/iterator/token_iterator.hpp>
+#include <boost/test/utils/assign_op.hpp>
+
+// STL
+#include <memory>
+#include <map>
+#include <list>
+#include <vector>
+#include <fstream>
+#include <cctype>
+#include <iostream>
+
+namespace boost {
+
+namespace BOOST_RT_PARAM_NAMESPACE {
+
+namespace file {
+
+// ************************************************************************** //
+// ************** symbol_to_value_map ************** //
+// ************************************************************************** //
+
+template<typename ValueType>
+struct symbol_to_value_map : std::map<cstring, ValueType> {
+ template<typename ParamType>
+ void add( cstring name, ParamType const& value )
+ {
+ using namespace unit_test;
+
+ m_name_store.push_back( dstring() );
+
+ assign_op( m_name_store.back(), name, 0 );
+ assign_op( (*this)[m_name_store.back()], value, 0 );
+ }
+ void remove( cstring name )
+ {
+ std::list<dstring>::iterator it = std::find( m_name_store.begin(), m_name_store.end(), name );
+
+ m_name_store.erase( it );
+
+ erase( name );
+ }
+
+private:
+ std::list<dstring> m_name_store;
+};
+
+// ************************************************************************** //
+// ************** symbol_table_t ************** //
+// ************************************************************************** //
+
+typedef symbol_to_value_map<dstring> symbol_table_t;
+
+// ************************************************************************** //
+// ************** command_handler_map ************** //
+// ************************************************************************** //
+
+typedef symbol_to_value_map<config_file_iterator::command_handler> command_handler_map;
+
+// ************************************************************************** //
+// ************** is_valid_identifier ************** //
+// ************************************************************************** //
+
+static bool
+is_valid_identifier( cstring const& source )
+{
+ if( source.is_empty() )
+ return false;
+
+ cstring::const_iterator it = source.begin();
+
+ if( !std::isalpha( *it ) )
+ return false;
+
+ while( ++it < source.end() ) {
+ if( !std::isalnum( *it ) && *it != BOOST_RT_PARAM_LITERAL( '_' ) && *it != BOOST_RT_PARAM_LITERAL( '-' ) )
+ return false;
+ }
+
+ return true;
+}
+
+// ************************************************************************** //
+// ************** include_level ************** //
+// ************************************************************************** //
+
+struct include_level;
+typedef std::auto_ptr<include_level> include_level_ptr;
+
+struct include_level : noncopyable
+{
+ // Constructor
+ explicit include_level( cstring file_name, cstring path_separators, include_level* parent = 0 );
+
+ // Data members
+ std::ifstream m_stream;
+ location m_curr_location;
+ include_level_ptr m_parent;
+};
+
+//____________________________________________________________________________//
+
+include_level::include_level( cstring file_name, cstring path_separators, include_level* parent_ )
+: m_parent( parent_ )
+{
+ if( file_name.is_empty() )
+ return;
+
+ assign_op( m_curr_location.first, file_name, 0 );
+ m_curr_location.second = 0;
+
+ m_stream.open( m_curr_location.first.c_str() );
+
+ if( !m_stream.is_open() && !!m_parent.get() ) {
+ cstring parent_path = m_parent->m_curr_location.first;
+ cstring::iterator it = unit_test::find_last_of( parent_path.begin(), parent_path.end(),
+ path_separators.begin(),
+ path_separators.end() );
+
+ if( it != parent_path.end() ) {
+ assign_op( m_curr_location.first, cstring( parent_path.begin(), it+1 ), 0 );
+ m_curr_location.first.append( file_name.begin(), file_name.end() );
+ m_stream.clear();
+ m_stream.open( m_curr_location.first.c_str() );
+ }
+ }
+
+ BOOST_RT_PARAM_VALIDATE_LOGIC( m_stream.is_open(), BOOST_RT_PARAM_LITERAL( "couldn't open file " ) << file_name );
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// ************** config_file_iterator::Impl ************** //
+// ************************************************************************** //
+
+struct config_file_iterator::Impl : noncopyable {
+ // Constructor
+ Impl();
+
+ bool get_next_line( cstring& next_line );
+
+ void process_command_line( cstring line );
+ void process_include( cstring line );
+ void process_define( cstring line );
+ void process_undef( cstring line );
+ void process_ifdef( cstring line );
+ void process_ifndef( cstring line );
+ void process_else( cstring line );
+ void process_endif( cstring line );
+
+ boost::optional<cstring>
+ get_macro_value( cstring macro_name, bool ignore_missing = true );
+ void substitute_macros( cstring& where );
+
+ bool is_active_line() { return m_inactive_ifdef_level == 0; }
+
+ static bool match_front( cstring str, cstring pattern )
+ {
+ return str.size() >= pattern.size() && str.substr( 0, pattern.size() ) == pattern;
+ }
+ static bool match_back( cstring str, cstring pattern )
+ {
+ return str.size() >= pattern.size() && str.substr( str.size() - pattern.size() ) == pattern;
+ }
+
+ // Configurable parameters
+ dstring m_path_separators;
+ char_type m_line_delimeter;
+ dstring m_sl_comment_delimeter;
+ dstring m_command_delimeter;
+ dstring m_line_beak;
+ dstring m_macro_ref_begin;
+ dstring m_macro_ref_end;
+
+ dstring m_include_kw;
+ dstring m_define_kw;
+ dstring m_undef_kw;
+ dstring m_ifdef_kw;
+ dstring m_ifndef_kw;
+ dstring m_else_kw;
+ dstring m_endif_kw;
+
+ std::size_t m_buffer_size;
+
+ bool m_trim_trailing_spaces;
+ bool m_trim_leading_spaces;
+ bool m_skip_empty_lines;
+ bool m_detect_missing_macro;
+
+ // Data members
+ dstring m_post_subst_line;
+ scoped_array<char> m_buffer;
+ include_level_ptr m_curr_level;
+ symbol_table_t m_symbols_table;
+ std::vector<bool> m_conditional_states;
+ std::size_t m_inactive_ifdef_level;
+ command_handler_map m_command_handler_map;
+};
+
+//____________________________________________________________________________//
+
+config_file_iterator::Impl::Impl()
+: m_path_separators( BOOST_RT_PARAM_LITERAL( "/\\" ) )
+, m_line_delimeter( BOOST_RT_PARAM_LITERAL( '\n' ) )
+, m_sl_comment_delimeter( BOOST_RT_PARAM_LITERAL( "#" ) )
+, m_command_delimeter( BOOST_RT_PARAM_LITERAL( "$" ) )
+, m_line_beak( BOOST_RT_PARAM_LITERAL( "\\" ) )
+, m_macro_ref_begin( BOOST_RT_PARAM_LITERAL( "$" ) )
+, m_macro_ref_end( BOOST_RT_PARAM_LITERAL( "$" ) )
+
+, m_include_kw( BOOST_RT_PARAM_LITERAL( "include" ) )
+, m_define_kw( BOOST_RT_PARAM_LITERAL( "define" ) )
+, m_undef_kw( BOOST_RT_PARAM_LITERAL( "undef" ) )
+, m_ifdef_kw( BOOST_RT_PARAM_LITERAL( "ifdef" ) )
+, m_ifndef_kw( BOOST_RT_PARAM_LITERAL( "ifndef" ) )
+, m_else_kw( BOOST_RT_PARAM_LITERAL( "else" ) )
+, m_endif_kw( BOOST_RT_PARAM_LITERAL( "endif" ) )
+
+, m_buffer_size( 8192 )
+
+, m_trim_trailing_spaces( true )
+, m_trim_leading_spaces( false )
+, m_skip_empty_lines( true )
+, m_detect_missing_macro( true )
+
+, m_inactive_ifdef_level( 0 )
+{}
+
+//____________________________________________________________________________//
+
+bool
+config_file_iterator::Impl::get_next_line( cstring& line )
+{
+ bool broken_line = false;
+
+ line.clear();
+
+ while( !m_curr_level->m_stream.eof() || !!m_curr_level->m_parent.get() ) {
+ // 10. Switch to upper include level if current one is finished
+ // 20. Read/append next file line
+ // 30. Increment line number
+ // 40. Remove comments
+ // 50. Remove trailing and leading spaces
+ // 60. Skip empty string
+ // 70. Concatenate broken lines if needed. Put the result into line
+ // 80. If line is not completed, try to finish it by reading the next line
+ // 90. Process command line
+ // 100. Substitute macros references with their definitions
+ // 110. Next line found.
+
+ if( m_curr_level->m_stream.eof() ) { // 10 //
+ m_curr_level = m_curr_level->m_parent;
+ continue;
+ }
+
+ std::ifstream& input = m_curr_level->m_stream;
+ char_type* buffer_insert_pos = broken_line ? m_buffer.get() + line.size() : m_buffer.get();
+
+ input.getline( buffer_insert_pos, (std::streamsize)(m_buffer_size - line.size()), // 20 //
+ m_line_delimeter );
+
+ cstring next_line( buffer_insert_pos,
+ input.gcount() > 0
+ ? buffer_insert_pos + (input.eof() ? input.gcount() : (input.gcount()-1))
+ : buffer_insert_pos );
+
+
+ m_curr_level->m_curr_location.second++; // 30 //
+
+ cstring::size_type comment_pos = next_line.find( m_sl_comment_delimeter );
+ if( comment_pos != cstring::npos )
+ next_line.trim_right( next_line.begin()+comment_pos ); // 40 //
+
+ if( m_trim_trailing_spaces ) // 50 //
+ next_line.trim_right();
+ if( m_trim_leading_spaces && !broken_line )
+ next_line.trim_left();
+
+ if( next_line.is_empty() ) { // 60 //
+ if( m_skip_empty_lines )
+ continue;
+ else
+ next_line.assign( buffer_insert_pos, buffer_insert_pos );
+ }
+
+ line = broken_line ? cstring( line.begin(), next_line.end() ) : next_line; // 70 //
+
+ broken_line = match_back( line, m_line_beak );
+ if( broken_line ) { // 80 //
+ line.trim_right( 1 );
+ continue;
+ }
+
+ if( match_front( line, m_command_delimeter ) ) { // 90 //
+ process_command_line( line );
+ continue;
+ }
+
+ if( !is_active_line() )
+ continue;
+
+ substitute_macros( line ); // 100 //
+
+ return true; // 110 //
+ }
+
+ BOOST_RT_PARAM_VALIDATE_LOGIC( !broken_line, BOOST_RT_PARAM_LITERAL( "broken line is not completed" ) );
+ BOOST_RT_PARAM_VALIDATE_LOGIC( m_conditional_states.size() == 0,
+ BOOST_RT_PARAM_LITERAL( "matching endif command is missing" ) );
+
+ return false;
+}
+
+//____________________________________________________________________________//
+
+boost::optional<cstring>
+config_file_iterator::Impl::get_macro_value( cstring macro_name, bool ignore_missing )
+{
+ symbol_table_t::const_iterator it = m_symbols_table.find( macro_name );
+
+ if( it == m_symbols_table.end() ) {
+ boost::optional<cstring> macro_value; // !! variable actually may have different type
+
+ env::get( macro_name, macro_value );
+
+ BOOST_RT_PARAM_VALIDATE_LOGIC( macro_value || ignore_missing || !m_detect_missing_macro,
+ BOOST_RT_PARAM_LITERAL( "Unknown macro \"" ) << macro_name << BOOST_RT_PARAM_LITERAL( "\"" ) );
+
+ if( !macro_value ) {
+ if( !ignore_missing )
+ macro_value = cstring();
+ }
+ else
+ m_symbols_table.add( macro_name, *macro_value );
+
+ return macro_value;
+ }
+
+ return boost::optional<cstring>( cstring( it->second ) );
+}
+
+//____________________________________________________________________________//
+
+void
+config_file_iterator::Impl::process_command_line( cstring line )
+{
+ line.trim_left( m_command_delimeter.size() );
+
+ unit_test::string_token_iterator tit( line, unit_test::max_tokens = 2 );
+
+ command_handler_map::const_iterator it = m_command_handler_map.find( *tit );
+
+ BOOST_RT_PARAM_VALIDATE_LOGIC( it != m_command_handler_map.end(), BOOST_RT_PARAM_LITERAL( "Invalid command " ) << *tit );
+
+ ++tit;
+
+ (it->second)( *tit );
+}
+
+//____________________________________________________________________________//
+
+void
+config_file_iterator::Impl::process_include( cstring line )
+{
+ using namespace unit_test;
+
+ if( !is_active_line() )
+ return;
+
+ string_token_iterator tit( line, kept_delimeters = dt_none );
+
+ BOOST_RT_PARAM_VALIDATE_LOGIC( tit != string_token_iterator(),
+ BOOST_RT_PARAM_LITERAL( "include file name missing" ) );
+
+ cstring include_file_name = *tit;
+
+ BOOST_RT_PARAM_VALIDATE_LOGIC( ++tit == string_token_iterator(),
+ BOOST_RT_PARAM_LITERAL( "unexpected tokens at the end of include command" ) );
+
+ substitute_macros( include_file_name );
+
+ m_curr_level.reset( new include_level( include_file_name, m_path_separators, m_curr_level.release() ) );
+}
+
+//____________________________________________________________________________//
+
+void
+config_file_iterator::Impl::process_define( cstring line )
+{
+ using namespace unit_test;
+
+ if( !is_active_line() )
+ return;
+
+ string_token_iterator tit( line, (kept_delimeters = dt_none, max_tokens = 2 ));
+
+ cstring macro_name = *tit;
+ BOOST_RT_PARAM_VALIDATE_LOGIC( is_valid_identifier( macro_name ),
+ BOOST_RT_PARAM_LITERAL( "invalid macro name" ) );
+
+ cstring macro_value = *(++tit);
+ substitute_macros( macro_value );
+
+ m_symbols_table.add( macro_name, macro_value );
+}
+
+//____________________________________________________________________________//
+
+void
+config_file_iterator::Impl::process_undef( cstring line )
+{
+ if( !is_active_line() )
+ return;
+
+ cstring macro_name = line;
+ BOOST_RT_PARAM_VALIDATE_LOGIC( is_valid_identifier( macro_name ),
+ BOOST_RT_PARAM_LITERAL( "invalid macro name" ) );
+
+ m_symbols_table.remove( macro_name );
+}
+
+//____________________________________________________________________________//
+
+void
+config_file_iterator::Impl::process_ifdef( cstring line )
+{
+ m_conditional_states.push_back( true );
+ if( !is_active_line() )
+ return;
+
+ cstring macro_name = line;
+ BOOST_RT_PARAM_VALIDATE_LOGIC( is_valid_identifier( macro_name ),
+ BOOST_RT_PARAM_LITERAL( "invalid macro name" ) );
+
+ if( !get_macro_value( macro_name ) )
+ m_inactive_ifdef_level = m_conditional_states.size();
+}
+
+//____________________________________________________________________________//
+
+void
+config_file_iterator::Impl::process_ifndef( cstring line )
+{
+ m_conditional_states.push_back( true );
+ if( !is_active_line() )
+ return;
+
+ cstring macro_name = line;
+ BOOST_RT_PARAM_VALIDATE_LOGIC( is_valid_identifier( macro_name ),
+ BOOST_RT_PARAM_LITERAL( "invalid macro name" ) );
+
+ if( get_macro_value( macro_name ) )
+ m_inactive_ifdef_level = m_conditional_states.size();
+}
+
+//____________________________________________________________________________//
+
+void
+config_file_iterator::Impl::process_else( cstring line )
+{
+ BOOST_RT_PARAM_VALIDATE_LOGIC( m_conditional_states.size() > 0 && m_conditional_states.back(),
+ BOOST_RT_PARAM_LITERAL( "else without matching if" ) );
+
+ m_inactive_ifdef_level = m_conditional_states.size() == m_inactive_ifdef_level ? 0 : m_conditional_states.size();
+
+ BOOST_RT_PARAM_VALIDATE_LOGIC( line.is_empty(), BOOST_RT_PARAM_LITERAL( "unexpected tokens at the end of else command" ) );
+}
+
+//____________________________________________________________________________//
+
+void
+config_file_iterator::Impl::process_endif( cstring line )
+{
+ BOOST_RT_PARAM_VALIDATE_LOGIC( m_conditional_states.size() > 0, BOOST_RT_PARAM_LITERAL( "endif without matching if" ) );
+
+ if( m_conditional_states.size() == m_inactive_ifdef_level )
+ m_inactive_ifdef_level = 0;
+
+ m_conditional_states.pop_back();
+ BOOST_RT_PARAM_VALIDATE_LOGIC( line.is_empty(), BOOST_RT_PARAM_LITERAL( "unexpected tokens at the end of endif command" ) );
+}
+
+//____________________________________________________________________________//
+
+void
+config_file_iterator::Impl::substitute_macros( cstring& where )
+{
+ m_post_subst_line.clear();
+ cstring::size_type pos;
+
+ while( (pos = where.find( m_macro_ref_begin )) != cstring::npos ) {
+ m_post_subst_line.append( where.begin(), pos );
+
+ where.trim_left( where.begin() + pos + m_macro_ref_begin.size() );
+
+ pos = where.find( m_macro_ref_end );
+
+ BOOST_RT_PARAM_VALIDATE_LOGIC( pos != cstring::npos, BOOST_RT_PARAM_LITERAL( "incomplete macro reference" ) );
+
+ cstring value = *get_macro_value( where.substr( 0, pos ), false );
+ m_post_subst_line.append( value.begin(), value.size() );
+
+ where.trim_left( where.begin() + pos + m_macro_ref_end.size() );
+ }
+
+ if( !m_post_subst_line.empty() ) {
+ m_post_subst_line.append( where.begin(), where.size() );
+ where = m_post_subst_line;
+ }
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// ************** runtime::file::config_file_iterator ************** //
+// ************************************************************************** //
+
+void
+config_file_iterator::construct()
+{
+ m_pimpl.reset( new Impl );
+}
+
+//____________________________________________________________________________//
+
+void
+config_file_iterator::load( cstring file_name )
+{
+ m_pimpl->m_curr_level.reset( new include_level( file_name, m_pimpl->m_path_separators ) );
+ m_pimpl->m_buffer.reset( new char[m_pimpl->m_buffer_size] );
+
+ register_command_handler( m_pimpl->m_include_kw, bind( &Impl::process_include, m_pimpl.get(), _1 ) );
+ register_command_handler( m_pimpl->m_define_kw, bind( &Impl::process_define, m_pimpl.get(), _1 ) );
+ register_command_handler( m_pimpl->m_undef_kw, bind( &Impl::process_undef, m_pimpl.get(), _1 ) );
+ register_command_handler( m_pimpl->m_ifdef_kw, bind( &Impl::process_ifdef, m_pimpl.get(), _1 ) );
+ register_command_handler( m_pimpl->m_ifndef_kw, bind( &Impl::process_ifndef, m_pimpl.get(), _1 ) );
+ register_command_handler( m_pimpl->m_else_kw, bind( &Impl::process_else, m_pimpl.get(), _1 ) );
+ register_command_handler( m_pimpl->m_endif_kw, bind( &Impl::process_endif, m_pimpl.get(), _1 ) );
+
+ init();
+}
+
+//____________________________________________________________________________//
+
+location const&
+config_file_iterator::curr_location()
+{
+ return m_pimpl->m_curr_level->m_curr_location;
+}
+
+//____________________________________________________________________________//
+
+void
+config_file_iterator::register_command_handler( cstring command_kw, command_handler const& ch )
+{
+ m_pimpl->m_command_handler_map.add( command_kw, ch );
+}
+
+//____________________________________________________________________________//
+
+bool
+config_file_iterator::get()
+{
+ return m_pimpl->get_next_line( m_value );
+}
+
+//____________________________________________________________________________//
+
+void
+config_file_iterator::set_parameter( rtti::id_t id, cstring value )
+{
+ BOOST_RTTI_SWITCH( id ) {
+ BOOST_RTTI_CASE( cfg_detail::path_separators_t )
+ assign_op( m_pimpl->m_path_separators , value, 0 );
+ BOOST_RTTI_CASE( cfg_detail::sl_comment_delimeter_t )
+ assign_op( m_pimpl->m_sl_comment_delimeter , value, 0 );
+ BOOST_RTTI_CASE( cfg_detail::command_delimeter_t )
+ assign_op( m_pimpl->m_command_delimeter , value, 0 );
+ BOOST_RTTI_CASE( cfg_detail::line_beak_t )
+ assign_op( m_pimpl->m_line_beak , value, 0 );
+ BOOST_RTTI_CASE( cfg_detail::macro_ref_begin_t )
+ assign_op( m_pimpl->m_macro_ref_begin , value, 0 );
+ BOOST_RTTI_CASE( cfg_detail::macro_ref_end_t )
+ assign_op( m_pimpl->m_macro_ref_end , value, 0 );
+ BOOST_RTTI_CASE( cfg_detail::include_kw_t )
+ assign_op( m_pimpl->m_include_kw , value, 0 );
+ BOOST_RTTI_CASE( cfg_detail::define_kw_t )
+ assign_op( m_pimpl->m_define_kw , value, 0 );
+ BOOST_RTTI_CASE( cfg_detail::undef_kw_t )
+ assign_op( m_pimpl->m_undef_kw , value, 0 );
+ BOOST_RTTI_CASE( cfg_detail::ifdef_kw_t )
+ assign_op( m_pimpl->m_ifdef_kw , value, 0 );
+ BOOST_RTTI_CASE( cfg_detail::ifndef_kw_t )
+ assign_op( m_pimpl->m_ifndef_kw , value, 0 );
+ BOOST_RTTI_CASE( cfg_detail::else_kw_t )
+ assign_op( m_pimpl->m_else_kw , value, 0 );
+ BOOST_RTTI_CASE( cfg_detail::endif_kw_t )
+ assign_op( m_pimpl->m_endif_kw , value, 0 );
+ }
+}
+
+//____________________________________________________________________________//
+
+void
+config_file_iterator::set_parameter( rtti::id_t id, bool value )
+{
+ BOOST_RTTI_SWITCH( id ) {
+ BOOST_RTTI_CASE( cfg_detail::trim_leading_spaces_t )
+ m_pimpl->m_trim_leading_spaces = value;
+ BOOST_RTTI_CASE( cfg_detail::trim_trailing_spaces_t )
+ m_pimpl->m_trim_trailing_spaces = value;
+ BOOST_RTTI_CASE( cfg_detail::skip_empty_lines_t )
+ m_pimpl->m_skip_empty_lines = value;
+ BOOST_RTTI_CASE( cfg_detail::detect_missing_macro_t )
+ m_pimpl->m_detect_missing_macro = value;
+ }
+}
+
+//____________________________________________________________________________//
+
+void
+config_file_iterator::set_parameter( rtti::id_t id, char_type value )
+{
+ BOOST_RTTI_SWITCH( id ) {
+ BOOST_RTTI_CASE( cfg_detail::line_delimeter_t )
+ m_pimpl->m_line_delimeter = value;
+ }
+}
+
+//____________________________________________________________________________//
+
+void
+config_file_iterator::set_parameter( rtti::id_t id, std::size_t value )
+{
+ BOOST_RTTI_SWITCH( id ) {
+ BOOST_RTTI_CASE( cfg_detail::buffer_size_t )
+ m_pimpl->m_buffer_size = value;
+ }
+}
+
+//____________________________________________________________________________//
+
+} // namespace file
+
+} // namespace BOOST_RT_PARAM_NAMESPACE
+
+} // namespace boost
+
+// ************************************************************************** //
+// Revision History:
+//
+// $Log: config_file_iterator.cpp,v $
+// Revision 1.1 2005/04/12 06:42:44 rogeeff
+// Runtime.Param library initial commit
+//
+// ************************************************************************** //
diff --git a/boost/boost/test/utils/runtime/file/config_file_iterator.hpp b/boost/boost/test/utils/runtime/file/config_file_iterator.hpp
new file mode 100644
index 00000000000..2bbc4a65cf9
--- /dev/null
+++ b/boost/boost/test/utils/runtime/file/config_file_iterator.hpp
@@ -0,0 +1,178 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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)
+
+// See http://www.boost.org/libs/test for the library home page.
+//
+// File : $RCSfile: config_file_iterator.hpp,v $
+//
+// Version : $Revision: 1.2 $
+//
+// Description : flexible configuration file iterator definition
+// ***************************************************************************
+
+#ifndef BOOST_RT_FILE_CONFIG_FILE_ITERATOR_HPP_062604GER
+#define BOOST_RT_FILE_CONFIG_FILE_ITERATOR_HPP_062604GER
+
+// Boost.Runtime.Parameter
+#include <boost/test/utils/runtime/config.hpp>
+
+#include <boost/test/utils/runtime/fwd.hpp>
+
+// Boost.Test
+#include <boost/test/utils/iterator/input_iterator_facade.hpp>
+#include <boost/test/utils/callback.hpp>
+#include <boost/test/utils/named_params.hpp>
+
+// Boost
+#include <boost/shared_ptr.hpp>
+
+namespace boost {
+
+namespace BOOST_RT_PARAM_NAMESPACE {
+
+namespace file {
+
+// Public typedef
+typedef std::pair<dstring,long> location;
+
+// ************************************************************************** //
+// ************** modifiers ************** //
+// ************************************************************************** //
+
+namespace cfg_detail {
+ struct path_separators_t;
+ struct line_delimeter_t;
+ struct sl_comment_delimeter_t;
+ struct command_delimeter_t;
+ struct line_beak_t;
+ struct macro_ref_begin_t;
+ struct macro_ref_end_t;
+ struct include_kw_t;
+ struct define_kw_t;
+ struct undef_kw_t;
+ struct ifdef_kw_t;
+ struct ifndef_kw_t;
+ struct else_kw_t;
+ struct endif_kw_t;
+
+ struct buffer_size_t;
+
+ struct trim_leading_spaces_t;
+ struct trim_trailing_spaces_t;
+ struct skip_empty_lines_t;
+ struct detect_missing_macro_t;
+} // namespace cfg_detail
+
+namespace {
+
+nfp::typed_keyword<cstring,cfg_detail::path_separators_t> path_separators;
+nfp::typed_keyword<char_type ,cfg_detail::line_delimeter_t> line_delimeter;
+nfp::typed_keyword<cstring,cfg_detail::sl_comment_delimeter_t> single_line_comment_delimeter;
+nfp::typed_keyword<cstring,cfg_detail::command_delimeter_t> command_delimeter;
+nfp::typed_keyword<cstring,cfg_detail::line_beak_t> line_beak;
+nfp::typed_keyword<cstring,cfg_detail::macro_ref_begin_t> macro_ref_begin;
+nfp::typed_keyword<cstring,cfg_detail::macro_ref_end_t> macro_ref_end;
+nfp::typed_keyword<cstring,cfg_detail::include_kw_t> include_kw;
+nfp::typed_keyword<cstring,cfg_detail::define_kw_t> define_kw;
+nfp::typed_keyword<cstring,cfg_detail::undef_kw_t> undef_kw;
+nfp::typed_keyword<cstring,cfg_detail::ifdef_kw_t> ifdef_kw;
+nfp::typed_keyword<cstring,cfg_detail::ifndef_kw_t> ifndef_kw;
+nfp::typed_keyword<cstring,cfg_detail::else_kw_t> else_kw;
+nfp::typed_keyword<cstring,cfg_detail::endif_kw_t> endif_kw;
+
+nfp::typed_keyword<std::size_t,cfg_detail::buffer_size_t> buffer_size;
+
+nfp::typed_keyword<bool,cfg_detail::trim_leading_spaces_t> trim_leading_spaces;
+nfp::typed_keyword<bool,cfg_detail::trim_trailing_spaces_t> trim_trailing_spaces;
+nfp::typed_keyword<bool,cfg_detail::skip_empty_lines_t> skip_empty_lines;
+nfp::typed_keyword<bool,cfg_detail::detect_missing_macro_t> detect_missing_macro;
+
+} // local namespace
+
+// ************************************************************************** //
+// ************** runtime::file::config_file_iterator ************** //
+// ************************************************************************** //
+
+class config_file_iterator : public unit_test::input_iterator_facade<config_file_iterator,cstring,cstring> {
+ typedef unit_test::input_iterator_facade<config_file_iterator,cstring,cstring> base;
+public:
+ // Public typedefs
+ typedef unit_test::callback1<cstring> command_handler;
+
+ // Constructors
+ config_file_iterator() {}
+ explicit config_file_iterator( cstring file_name )
+ {
+ construct();
+ load( file_name );
+ }
+ template<typename Modifiers>
+ config_file_iterator( cstring file_name, Modifiers const& m )
+ {
+ construct();
+ m.apply_to( *this );
+ load( file_name );
+ }
+ config_file_iterator( config_file_iterator const& rhs )
+ : base( rhs )
+ , m_pimpl( rhs.m_pimpl )
+ {
+ rhs.m_valid = false;
+ }
+
+ void operator=( config_file_iterator const& rhs )
+ {
+ if( this == &rhs )
+ return;
+
+ (base&)(*this) = rhs;
+ m_pimpl = rhs.m_pimpl;
+ rhs.m_valid = false;
+ } // Assignment
+
+
+ // Access methods
+ location const& curr_location();
+ void register_command_handler( cstring command_kw, command_handler const& );
+
+ // Parameters setters
+ void set_parameter( rtti::id_t, cstring );
+ void set_parameter( rtti::id_t, bool );
+ void set_parameter( rtti::id_t, char_type );
+ void set_parameter( rtti::id_t, std::size_t );
+
+private:
+ friend class unit_test::input_iterator_core_access;
+
+ void construct();
+ void load( cstring file_name );
+
+ // increment implementation
+ bool get();
+
+ // Data members
+ struct Impl;
+ shared_ptr<Impl> m_pimpl;
+};
+
+} // namespace file
+
+} // namespace BOOST_RT_PARAM_NAMESPACE
+
+} // namespace boost
+
+// ************************************************************************** //
+// Revision History:
+//
+// $Log: config_file_iterator.hpp,v $
+// Revision 1.2 2005/04/17 15:50:38 rogeeff
+// portability fixes
+//
+// Revision 1.1 2005/04/12 06:42:44 rogeeff
+// Runtime.Param library initial commit
+//
+// ************************************************************************** //
+
+#endif // BOOST_RT_FILE_CONFIG_FILE_ITERATOR_HPP_062604GER
diff --git a/boost/boost/test/utils/runtime/fwd.hpp b/boost/boost/test/utils/runtime/fwd.hpp
new file mode 100644
index 00000000000..b02e5946e58
--- /dev/null
+++ b/boost/boost/test/utils/runtime/fwd.hpp
@@ -0,0 +1,50 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: fwd.hpp,v $
+//
+// Version : $Revision: 1.1 $
+//
+// Description : global framework level forward declaration
+// ***************************************************************************
+
+#ifndef BOOST_RT_FWD_HPP_062604GER
+#define BOOST_RT_FWD_HPP_062604GER
+
+// Boost.Runtime.Parameter
+#include <boost/test/utils/runtime/config.hpp>
+
+// Boost
+#include <boost/shared_ptr.hpp>
+
+namespace boost {
+
+namespace BOOST_RT_PARAM_NAMESPACE {
+
+class parameter;
+
+class argument;
+typedef shared_ptr<argument> argument_ptr;
+typedef shared_ptr<argument const> const_argument_ptr;
+
+template<typename T> class value_interpreter;
+template<typename T> class typed_argument;
+
+} // namespace BOOST_RT_PARAM_NAMESPACE
+
+} // namespace boost
+
+// ************************************************************************** //
+// Revision History:
+//
+// $Log: fwd.hpp,v $
+// Revision 1.1 2005/04/12 06:42:42 rogeeff
+// Runtime.Param library initial commit
+//
+// ************************************************************************** //
+
+#endif // BOOST_RT_FWD_HPP_062604GER
diff --git a/boost/boost/test/utils/runtime/interpret_argument_value.hpp b/boost/boost/test/utils/runtime/interpret_argument_value.hpp
new file mode 100644
index 00000000000..1dd9afde6b6
--- /dev/null
+++ b/boost/boost/test/utils/runtime/interpret_argument_value.hpp
@@ -0,0 +1,172 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: interpret_argument_value.hpp,v $
+//
+// Version : $Revision: 1.1 $
+//
+// Description : default algorithms for string to specific type convertions
+// ***************************************************************************
+
+#ifndef BOOST_RT_INTERPRET_ARGUMENT_VALUE_HPP_062604GER
+#define BOOST_RT_INTERPRET_ARGUMENT_VALUE_HPP_062604GER
+
+// Boost.Runtime.Parameter
+#include <boost/test/utils/runtime/config.hpp>
+#include <boost/test/utils/runtime/trace.hpp>
+
+// Boost.Test
+#include <boost/test/utils/basic_cstring/io.hpp>
+#include <boost/test/utils/basic_cstring/compare.hpp>
+
+// Boost
+#include <boost/optional.hpp>
+#include <boost/lexical_cast.hpp>
+
+// STL
+// !! could we eliminate these includes?
+#include <list>
+
+namespace boost {
+
+namespace BOOST_RT_PARAM_NAMESPACE {
+
+// ************************************************************************** //
+// ************** runtime::interpret_argument_value ************** //
+// ************************************************************************** //
+// returns true if source is used false otherwise
+
+// generic case
+template<typename T>
+struct interpret_argument_value_impl {
+ static bool _( cstring source, boost::optional<T>& res )
+ {
+ BOOST_RT_PARAM_TRACE( "In interpret_argument_value_impl<" << typeid(T).name() << ">" );
+
+ res = lexical_cast<T>( source );
+
+ BOOST_RT_PARAM_TRACE( "String " << source << " is interpreted as " << *res );
+ return true;
+ }
+};
+
+
+//____________________________________________________________________________//
+
+// dstring case
+template<>
+struct interpret_argument_value_impl<dstring> {
+ static bool _( cstring source, boost::optional<dstring>& res )
+ {
+ BOOST_RT_PARAM_TRACE( "In interpret_argument_value_impl<dstring>" );
+
+ res = dstring();
+ assign_op( *res, source, 0 );
+
+ return true;
+ }
+};
+
+//____________________________________________________________________________//
+
+// cstring case
+template<>
+struct interpret_argument_value_impl<cstring> {
+ static bool _( cstring source, boost::optional<cstring>& res )
+ {
+ BOOST_RT_PARAM_TRACE( "In interpret_argument_value_impl<cstring>" );
+
+ res = source;
+
+ return true;
+ }
+};
+
+//____________________________________________________________________________//
+
+// specialization for type bool
+template<>
+struct interpret_argument_value_impl<bool> {
+ static bool _( cstring source, boost::optional<bool>& res )
+ {
+ BOOST_RT_PARAM_TRACE( "In interpret_argument_value_impl<bool>" );
+
+ static literal_cstring YES( BOOST_RT_PARAM_CSTRING_LITERAL( "YES" ) );
+ static literal_cstring Y( BOOST_RT_PARAM_CSTRING_LITERAL( "Y" ) );
+ static literal_cstring NO( BOOST_RT_PARAM_CSTRING_LITERAL( "NO" ) );
+ static literal_cstring N( BOOST_RT_PARAM_CSTRING_LITERAL( "N" ) );
+ static literal_cstring one( BOOST_RT_PARAM_CSTRING_LITERAL( "1" ) );
+ static literal_cstring zero( BOOST_RT_PARAM_CSTRING_LITERAL( "0" ) );
+
+ source.trim();
+
+ if( case_ins_eq( source, YES ) || case_ins_eq( source, Y ) || case_ins_eq( source, one ) ) {
+ res = true;
+ return true;
+ }
+ else if( case_ins_eq( source, NO ) || case_ins_eq( source, N ) || case_ins_eq( source, zero ) ) {
+ res = false;
+ return true;
+ }
+ else {
+ res = true;
+ return false;
+ }
+ }
+};
+
+//____________________________________________________________________________//
+
+template<typename T>
+inline bool
+interpret_argument_value( cstring source, boost::optional<T>& res, long )
+{
+ return interpret_argument_value_impl<T>::_( source, res );
+}
+
+//____________________________________________________________________________//
+
+// specialization for list of values
+template<typename T>
+inline bool
+interpret_argument_value( cstring source, boost::optional<std::list<T> >& res, int )
+{
+ BOOST_RT_PARAM_TRACE( "In interpret_argument_value<std::list<T>>" );
+
+ res = std::list<T>();
+
+ while( !source.is_empty() ) {
+ // !! should we use token_iterator
+ cstring::iterator single_value_end = std::find( source.begin(), source.end(), BOOST_RT_PARAM_LITERAL( ',' ) );
+
+ boost::optional<T> value;
+ interpret_argument_value( cstring( source.begin(), single_value_end ), value, 0 );
+
+ res->push_back( *value );
+
+ source.trim_left( single_value_end + 1 );
+ }
+
+ return true;
+}
+
+//____________________________________________________________________________//
+
+} // namespace BOOST_RT_PARAM_NAMESPACE
+
+} // namespace boost
+
+// ************************************************************************** //
+// Revision History:
+//
+// $Log: interpret_argument_value.hpp,v $
+// Revision 1.1 2005/04/12 06:42:42 rogeeff
+// Runtime.Param library initial commit
+//
+// ************************************************************************** //
+
+#endif // BOOST_RT_INTERPRET_ARGUMENT_VALUE_HPP_062604GER
diff --git a/boost/boost/test/utils/runtime/parameter.hpp b/boost/boost/test/utils/runtime/parameter.hpp
new file mode 100644
index 00000000000..8a02e5e806c
--- /dev/null
+++ b/boost/boost/test/utils/runtime/parameter.hpp
@@ -0,0 +1,47 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: parameter.hpp,v $
+//
+// Version : $Revision: 1.1 $
+//
+// Description : abstract interface for the formal parameter
+// ***************************************************************************
+
+#ifndef BOOST_RT_PARAMETER_HPP_062604GER
+#define BOOST_RT_PARAMETER_HPP_062604GER
+
+// Boost.Runtime.Parameter
+#include <boost/test/utils/runtime/config.hpp>
+
+namespace boost {
+
+namespace BOOST_RT_PARAM_NAMESPACE {
+
+// ************************************************************************** //
+// ************** runtime::parameter ************** //
+// ************************************************************************** //
+
+class parameter {
+public:
+ virtual ~parameter() {}
+};
+
+} // namespace BOOST_RT_PARAM_NAMESPACE
+
+} // namespace boost
+
+// ************************************************************************** //
+// Revision History:
+//
+// $Log: parameter.hpp,v $
+// Revision 1.1 2005/04/12 06:42:42 rogeeff
+// Runtime.Param library initial commit
+//
+// ************************************************************************** //
+
+#endif // BOOST_RT_PARAMETER_HPP_062604GER
diff --git a/boost/boost/test/utils/runtime/trace.hpp b/boost/boost/test/utils/runtime/trace.hpp
new file mode 100644
index 00000000000..ee92a3953aa
--- /dev/null
+++ b/boost/boost/test/utils/runtime/trace.hpp
@@ -0,0 +1,39 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: trace.hpp,v $
+//
+// Version : $Revision: 1.1 $
+//
+// Description : optional internal tracing
+// ***************************************************************************
+
+#ifndef BOOST_RT_TRACE_HPP_062604GER
+#define BOOST_RT_TRACE_HPP_062604GER
+
+// Boost.Runtime.Parameter
+#include <boost/test/utils/runtime/config.hpp>
+
+#ifdef BOOST_RT_PARAM_DEBUG
+
+#include <iostream>
+
+# define BOOST_RT_PARAM_TRACE( str ) std::cerr << str << std::endl
+#else
+# define BOOST_RT_PARAM_TRACE( str )
+#endif
+
+// ************************************************************************** //
+// Revision History:
+//
+// $Log: trace.hpp,v $
+// Revision 1.1 2005/04/12 06:42:42 rogeeff
+// Runtime.Param library initial commit
+//
+// ************************************************************************** //
+
+#endif // BOOST_RT_TRACE_HPP_062604GER
diff --git a/boost/boost/test/utils/runtime/validation.hpp b/boost/boost/test/utils/runtime/validation.hpp
new file mode 100644
index 00000000000..2616a6f4921
--- /dev/null
+++ b/boost/boost/test/utils/runtime/validation.hpp
@@ -0,0 +1,91 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: validation.hpp,v $
+//
+// Version : $Revision: 1.1 $
+//
+// Description : defines exceptions and validation tools
+// ***************************************************************************
+
+#ifndef BOOST_RT_VALIDATION_HPP_062604GER
+#define BOOST_RT_VALIDATION_HPP_062604GER
+
+// Boost.Runtime.Parameter
+#include <boost/test/utils/runtime/config.hpp>
+
+// Boost.Test
+#include <boost/test/utils/class_properties.hpp>
+
+// Boost
+#include <boost/shared_ptr.hpp>
+
+// STL
+#ifdef BOOST_RT_PARAM_EXCEPTION_INHERIT_STD
+#include <stdexcept>
+#endif
+
+namespace boost {
+
+namespace BOOST_RT_PARAM_NAMESPACE {
+
+// ************************************************************************** //
+// ************** runtime::logic_error ************** //
+// ************************************************************************** //
+
+class logic_error
+#ifdef BOOST_RT_PARAM_EXCEPTION_INHERIT_STD
+: public std::exception
+#endif
+{
+ typedef shared_ptr<dstring> dstring_ptr;
+public:
+ // Constructor // !! could we eliminate shared_ptr
+ explicit logic_error( cstring msg ) : m_msg( new dstring( msg.begin(), msg.size() ) ) {}
+ ~logic_error() throw() {}
+
+ dstring const& msg() const { return *m_msg; }
+ virtual char_type const* what() const throw() { return m_msg->c_str(); }
+
+private:
+ dstring_ptr m_msg;
+};
+
+// ************************************************************************** //
+// ************** runtime::report_logic_error ************** //
+// ************************************************************************** //
+
+inline void
+report_logic_error( format_stream& msg )
+{
+ throw BOOST_RT_PARAM_NAMESPACE::logic_error( msg.str() );
+}
+
+//____________________________________________________________________________//
+
+#define BOOST_RT_PARAM_REPORT_LOGIC_ERROR( msg ) \
+ boost::BOOST_RT_PARAM_NAMESPACE::report_logic_error( format_stream().ref() << msg )
+
+#define BOOST_RT_PARAM_VALIDATE_LOGIC( b, msg ) \
+ if( b ) {} else BOOST_RT_PARAM_REPORT_LOGIC_ERROR( msg )
+
+//____________________________________________________________________________//
+
+} // namespace BOOST_RT_PARAM_NAMESPACE
+
+} // namespace boost
+
+// ************************************************************************** //
+// Revision History:
+//
+// $Log: validation.hpp,v $
+// Revision 1.1 2005/04/12 06:42:42 rogeeff
+// Runtime.Param library initial commit
+//
+// ************************************************************************** //
+
+#endif // BOOST_RT_VALIDATION_HPP_062604GER
diff --git a/boost/boost/test/utils/trivial_singleton.hpp b/boost/boost/test/utils/trivial_singleton.hpp
new file mode 100644
index 00000000000..27f685167dd
--- /dev/null
+++ b/boost/boost/test/utils/trivial_singleton.hpp
@@ -0,0 +1,87 @@
+// (C) Copyright Gennadiy Rozental 2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: trivial_singleton.hpp,v $
+//
+// Version : $Revision: 1.3 $
+//
+// Description : simple helpers for creating cusom output manipulators
+// ***************************************************************************
+
+#ifndef BOOST_TEST_TRIVIAL_SIGNLETON_HPP_020505GER
+#define BOOST_TEST_TRIVIAL_SIGNLETON_HPP_020505GER
+
+#include <boost/noncopyable.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace boost {
+
+namespace unit_test {
+
+// ************************************************************************** //
+// ************** singleton ************** //
+// ************************************************************************** //
+
+template<typename Derived>
+class singleton : private boost::noncopyable {
+public:
+ static Derived& instance() { static Derived the_inst; return the_inst; }
+protected:
+ singleton() {}
+ ~singleton() {}
+};
+
+} // namespace unit_test
+
+#define BOOST_TEST_SINGLETON_CONS( type ) \
+friend class boost::unit_test::singleton<type>; \
+type() {} \
+/**/
+
+#if BOOST_WORKAROUND(__DECCXX_VER, BOOST_TESTED_AT(60590042))
+
+#define BOOST_TEST_SINGLETON_INST( inst ) \
+template class unit_test::singleton< BOOST_JOIN( inst, _t ) > ; \
+namespace { BOOST_JOIN( inst, _t)& inst = BOOST_JOIN( inst, _t)::instance(); }
+
+#elif defined(__APPLE_CC__) && defined(__GNUC__) && __GNUC__ < 4
+#define BOOST_TEST_SINGLETON_INST( inst ) \
+static BOOST_JOIN( inst, _t)& inst = BOOST_JOIN (inst, _t)::instance();
+
+#else
+
+#define BOOST_TEST_SINGLETON_INST( inst ) \
+namespace { BOOST_JOIN( inst, _t)& inst = BOOST_JOIN( inst, _t)::instance(); }
+
+#endif
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: trivial_singleton.hpp,v $
+// Revision 1.3 2006/01/01 17:29:38 dgregor
+// Work around anonymous namespace bug in Apple GCC 3.3
+//
+// Revision 1.2 2005/06/15 07:21:51 schoepflin
+// Tru64 needs an explicit instantiation of the singleton template. Otherwise we
+// end up with multiple singleton instances.
+//
+// Revision 1.1 2005/02/20 08:27:08 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_TRIVIAL_SIGNLETON_HPP_020505GER
diff --git a/boost/boost/test/utils/wrap_stringstream.hpp b/boost/boost/test/utils/wrap_stringstream.hpp
new file mode 100644
index 00000000000..9cd532c335e
--- /dev/null
+++ b/boost/boost/test/utils/wrap_stringstream.hpp
@@ -0,0 +1,202 @@
+// (C) Copyright Gennadiy Rozental 2002-2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: wrap_stringstream.hpp,v $
+//
+// Version : $Revision: 1.9 $
+//
+// Description : wraps strstream and stringstream (depends with one is present)
+// to provide the unified interface
+// ***************************************************************************
+
+#ifndef BOOST_WRAP_STRINGSTREAM_HPP_071894GER
+#define BOOST_WRAP_STRINGSTREAM_HPP_071894GER
+
+// Boost.Test
+#include <boost/test/detail/config.hpp>
+
+// STL
+#ifdef BOOST_NO_STRINGSTREAM
+#include <strstream> // for std::ostrstream
+#else
+#include <sstream> // for std::ostringstream
+#endif // BOOST_NO_STRINGSTREAM
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace boost {
+
+// ************************************************************************** //
+// ************** basic_wrap_stringstream ************** //
+// ************************************************************************** //
+
+template<typename CharT>
+class basic_wrap_stringstream {
+public:
+#if defined(BOOST_CLASSIC_IOSTREAMS)
+ typedef std::ostringstream wrapped_stream;
+#elif defined(BOOST_NO_STRINGSTREAM)
+ typedef std::basic_ostrstream<CharT> wrapped_stream;
+#else
+ typedef std::basic_ostringstream<CharT> wrapped_stream;
+#endif // BOOST_NO_STRINGSTREAM
+ // Access methods
+ basic_wrap_stringstream& ref();
+ wrapped_stream& stream();
+ std::basic_string<CharT> const& str();
+
+private:
+ // Data members
+ wrapped_stream m_stream;
+ std::basic_string<CharT> m_str;
+};
+
+//____________________________________________________________________________//
+
+template <typename CharT, typename T>
+inline basic_wrap_stringstream<CharT>&
+operator<<( basic_wrap_stringstream<CharT>& targ, T const& t )
+{
+ targ.stream() << t;
+ return targ;
+}
+
+//____________________________________________________________________________//
+
+template <typename CharT>
+inline typename basic_wrap_stringstream<CharT>::wrapped_stream&
+basic_wrap_stringstream<CharT>::stream()
+{
+ return m_stream;
+}
+
+//____________________________________________________________________________//
+
+template <typename CharT>
+inline basic_wrap_stringstream<CharT>&
+basic_wrap_stringstream<CharT>::ref()
+{
+ return *this;
+}
+
+//____________________________________________________________________________//
+
+template <typename CharT>
+inline std::basic_string<CharT> const&
+basic_wrap_stringstream<CharT>::str()
+{
+
+#ifdef BOOST_NO_STRINGSTREAM
+ m_str.assign( m_stream.str(), m_stream.pcount() );
+ m_stream.freeze( false );
+#else
+ m_str = m_stream.str();
+#endif
+
+ return m_str;
+}
+
+//____________________________________________________________________________//
+
+template <typename CharT>
+inline basic_wrap_stringstream<CharT>&
+operator<<( basic_wrap_stringstream<CharT>& targ, basic_wrap_stringstream<CharT>& src )
+{
+ targ << src.str();
+ return targ;
+}
+
+//____________________________________________________________________________//
+
+#if !defined(BOOST_NO_STD_LOCALE) && \
+ (!defined(BOOST_MSVC) || BOOST_WORKAROUND(BOOST_MSVC, >= 1310)) && \
+ !defined(__MWERKS__) && !BOOST_WORKAROUND(__GNUC__, < 3)
+
+template <typename CharT>
+inline basic_wrap_stringstream<CharT>&
+operator<<( basic_wrap_stringstream<CharT>& targ, std::ios_base& (BOOST_TEST_CALL_DECL *man)(std::ios_base&) )
+{
+ targ.stream() << man;
+ return targ;
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT,typename Elem,typename Tr>
+inline basic_wrap_stringstream<CharT>&
+operator<<( basic_wrap_stringstream<CharT>& targ, std::basic_ostream<Elem,Tr>& (BOOST_TEST_CALL_DECL *man)(std::basic_ostream<Elem, Tr>&) )
+{
+ targ.stream() << man;
+ return targ;
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT,typename Elem,typename Tr>
+inline basic_wrap_stringstream<CharT>&
+operator<<( basic_wrap_stringstream<CharT>& targ, std::basic_ios<Elem, Tr>& (BOOST_TEST_CALL_DECL *man)(std::basic_ios<Elem, Tr>&) )
+{
+ targ.stream() << man;
+ return targ;
+}
+
+//____________________________________________________________________________//
+
+#endif
+
+// ************************************************************************** //
+// ************** wrap_stringstream ************** //
+// ************************************************************************** //
+
+typedef basic_wrap_stringstream<char> wrap_stringstream;
+typedef basic_wrap_stringstream<wchar_t> wrap_wstringstream;
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: wrap_stringstream.hpp,v $
+// Revision 1.9 2005/05/13 05:55:46 rogeeff
+// gcc 2.95 fix
+//
+// Revision 1.8 2005/05/08 08:55:09 rogeeff
+// typos and missing descriptions fixed
+//
+// Revision 1.7 2005/04/30 17:55:15 rogeeff
+// disable manipulator output for cw
+//
+// Revision 1.6 2005/02/20 08:27:08 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// Revision 1.5 2005/02/01 06:40:07 rogeeff
+// copyright update
+// old log entries removed
+// minor stilistic changes
+// depricated tools removed
+//
+// Revision 1.4 2005/01/31 07:50:06 rogeeff
+// cdecl portability fix
+//
+// Revision 1.3 2005/01/31 06:02:15 rogeeff
+// BOOST_TEST_CALL_DECL correctness fixes
+//
+// Revision 1.2 2005/01/30 01:43:57 rogeeff
+// warnings suppressed
+//
+// Revision 1.1 2005/01/22 18:21:40 rogeeff
+// moved sharable staff into utils
+//
+// ***************************************************************************
+
+#endif // BOOST_WRAP_STRINGSTREAM_HPP_071894GER
diff --git a/boost/boost/test/utils/xml_printer.hpp b/boost/boost/test/utils/xml_printer.hpp
new file mode 100644
index 00000000000..e163d1bbd85
--- /dev/null
+++ b/boost/boost/test/utils/xml_printer.hpp
@@ -0,0 +1,153 @@
+// (C) Copyright Gennadiy Rozental 2004-2005.
+// 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/test for the library home page.
+//
+// File : $RCSfile: xml_printer.hpp,v $
+//
+// Version : $Revision: 1.7 $
+//
+// Description : common code used by any agent serving as XML printer
+// ***************************************************************************
+
+#ifndef BOOST_TEST_XML_PRINTER_HPP_071894GER
+#define BOOST_TEST_XML_PRINTER_HPP_071894GER
+
+// Boost.Test
+#include <boost/test/utils/basic_cstring/basic_cstring.hpp>
+#include <boost/test/utils/fixed_mapping.hpp>
+#include <boost/test/utils/custom_manip.hpp>
+#include <boost/test/utils/foreach.hpp>
+
+// Boost
+#include <boost/config.hpp>
+
+// STL
+#include <iostream>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace boost {
+
+namespace unit_test {
+
+// ************************************************************************** //
+// ************** xml print helpers ************** //
+// ************************************************************************** //
+
+inline void
+print_escaped( std::ostream& where_to, const_string value )
+{
+ static fixed_mapping<char,char const*> char_type(
+ '<' , "lt",
+ '>' , "gt",
+ '&' , "amp",
+ '\'', "apos" ,
+ '"' , "quot",
+
+ 0
+ );
+
+ BOOST_TEST_FOREACH( char, c, value ) {
+ char const* ref = char_type[c];
+
+ if( ref )
+ where_to << '&' << ref << ';';
+ else
+ where_to << c;
+ }
+}
+
+//____________________________________________________________________________//
+
+inline void
+print_escaped( std::ostream& where_to, std::string const& value )
+{
+ print_escaped( where_to, const_string( value ) );
+}
+
+//____________________________________________________________________________//
+
+template<typename T>
+inline void
+print_escaped( std::ostream& where_to, T const& value )
+{
+ where_to << value;
+}
+
+//____________________________________________________________________________//
+
+typedef custom_manip<struct attr_value_t> attr_value;
+
+template<typename T>
+inline std::ostream&
+operator<<( custom_printer<attr_value> const& p, T const& value )
+{
+ *p << "=\"";
+ print_escaped( *p, value );
+ *p << '"';
+
+ return *p;
+}
+
+//____________________________________________________________________________//
+
+typedef custom_manip<struct pcdata_t> pcdata;
+
+inline std::ostream&
+operator<<( custom_printer<pcdata> const& p, const_string value )
+{
+ print_escaped( *p, value );
+
+ return *p;
+}
+
+//____________________________________________________________________________//
+
+} // namespace unit_test
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+// ***************************************************************************
+// Revision History :
+//
+// $Log: xml_printer.hpp,v $
+// Revision 1.7 2005/07/14 15:50:28 dgregor
+// Untabify
+//
+// Revision 1.6 2005/04/29 06:31:18 rogeeff
+// bug fix for incorrect XML output
+//
+// Revision 1.5 2005/02/20 08:27:08 rogeeff
+// This a major update for Boost.Test framework. See release docs for complete list of fixes/updates
+//
+// Revision 1.4 2005/02/01 06:40:08 rogeeff
+// copyright update
+// old log entries removed
+// minor stilistic changes
+// depricated tools removed
+//
+// Revision 1.3 2005/01/23 09:59:34 vawjr
+// Changed - all the \r\r\n to \r\n in the windows flavor of the file
+// because VC++ 8.0 complains and refuses to compile
+//
+// Revision 1.2 2005/01/22 19:22:13 rogeeff
+// implementation moved into headers section to eliminate dependency of included/minimal component on src directory
+//
+// Revision 1.1 2005/01/22 18:21:40 rogeeff
+// moved sharable staff into utils
+//
+// Revision 1.3 2005/01/21 07:31:44 rogeeff
+// xml helper facilities reworked to present manipulator interfaces
+//
+// ***************************************************************************
+
+#endif // BOOST_TEST_XML_PRINTER_HPP_071894GER
diff --git a/boost/boost/thread.hpp b/boost/boost/thread.hpp
new file mode 100644
index 00000000000..b9a9ed68eb5
--- /dev/null
+++ b/boost/boost/thread.hpp
@@ -0,0 +1,19 @@
+// Copyright (C) 2001-2003
+// William E. Kempf
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_THREAD_WEK01082003_HPP)
+#define BOOST_THREAD_WEK01082003_HPP
+
+#include <boost/thread/thread.hpp>
+#include <boost/thread/condition.hpp>
+#include <boost/thread/exceptions.hpp>
+#include <boost/thread/mutex.hpp>
+#include <boost/thread/once.hpp>
+#include <boost/thread/recursive_mutex.hpp>
+#include <boost/thread/tss.hpp>
+#include <boost/thread/xtime.hpp>
+
+#endif
diff --git a/boost/boost/thread/barrier.hpp b/boost/boost/thread/barrier.hpp
new file mode 100644
index 00000000000..8048784cbc6
--- /dev/null
+++ b/boost/boost/thread/barrier.hpp
@@ -0,0 +1,44 @@
+// Copyright (C) 2002-2003
+// David Moore, William E. Kempf
+//
+// 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_BARRIER_JDM030602_HPP
+#define BOOST_BARRIER_JDM030602_HPP
+
+#include <boost/thread/detail/config.hpp>
+
+#include <boost/thread/mutex.hpp>
+#include <boost/thread/condition.hpp>
+
+namespace boost {
+
+class BOOST_THREAD_DECL barrier
+{
+public:
+ barrier(unsigned int count);
+ ~barrier();
+
+ bool wait();
+
+private:
+ mutex m_mutex;
+// disable warnings about non dll import
+// see: http://www.boost.org/more/separate_compilation.html#dlls
+#ifdef BOOST_MSVC
+# pragma warning(push)
+# pragma warning(disable: 4251 4231 4660 4275)
+#endif
+ condition m_cond;
+#ifdef BOOST_MSVC
+# pragma warning(pop)
+#endif
+ unsigned int m_threshold;
+ unsigned int m_count;
+ unsigned int m_generation;
+};
+
+} // namespace boost
+
+#endif
diff --git a/boost/boost/thread/condition.hpp b/boost/boost/thread/condition.hpp
new file mode 100644
index 00000000000..e5a1c317c6b
--- /dev/null
+++ b/boost/boost/thread/condition.hpp
@@ -0,0 +1,201 @@
+// Copyright (C) 2001-2003
+// William E. Kempf
+//
+// 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_CONDITION_WEK070601_HPP
+#define BOOST_CONDITION_WEK070601_HPP
+
+#include <boost/thread/detail/config.hpp>
+
+#include <boost/thread/exceptions.hpp>
+#include <boost/utility.hpp>
+#include <boost/thread/detail/lock.hpp>
+
+#if defined(BOOST_HAS_PTHREADS)
+# include <pthread.h>
+#elif defined(BOOST_HAS_MPTASKS)
+# include "scoped_critical_region.hpp"
+#endif
+
+namespace boost {
+
+struct xtime;
+// disable warnings about non dll import
+// see: http://www.boost.org/more/separate_compilation.html#dlls
+#ifdef BOOST_MSVC
+# pragma warning(push)
+# pragma warning(disable: 4251 4231 4660 4275)
+#endif
+
+namespace detail {
+
+class BOOST_THREAD_DECL condition_impl : private noncopyable
+{
+ friend class condition;
+
+public:
+ condition_impl();
+ ~condition_impl();
+
+ void notify_one();
+ void notify_all();
+
+#if (defined(BOOST_HAS_WINTHREADS) || defined(BOOST_HAS_MPTASKS))
+ void enter_wait();
+ void do_wait();
+ bool do_timed_wait(const xtime& xt);
+#elif defined(BOOST_HAS_PTHREADS)
+ void do_wait(pthread_mutex_t* pmutex);
+ bool do_timed_wait(const xtime& xt, pthread_mutex_t* pmutex);
+#endif
+
+#if defined(BOOST_HAS_WINTHREADS)
+ void* m_gate;
+ void* m_queue;
+ void* m_mutex;
+ unsigned m_gone; // # threads that timed out and never made it to m_queue
+ unsigned long m_blocked; // # threads blocked on the condition
+ unsigned m_waiting; // # threads no longer waiting for the condition but
+ // still waiting to be removed from m_queue
+#elif defined(BOOST_HAS_PTHREADS)
+ pthread_cond_t m_condition;
+#elif defined(BOOST_HAS_MPTASKS)
+ MPSemaphoreID m_gate;
+ MPSemaphoreID m_queue;
+ threads::mac::detail::scoped_critical_region m_mutex;
+ threads::mac::detail::scoped_critical_region m_mutex_mutex;
+ unsigned m_gone; // # threads that timed out and never made it to m_queue
+ unsigned long m_blocked; // # threads blocked on the condition
+ unsigned m_waiting; // # threads no longer waiting for the condition but
+ // still waiting to be removed from m_queue
+#endif
+};
+
+} // namespace detail
+
+class condition : private noncopyable
+{
+public:
+ condition() { }
+ ~condition() { }
+
+ void notify_one() { m_impl.notify_one(); }
+ void notify_all() { m_impl.notify_all(); }
+
+ template <typename L>
+ void wait(L& lock)
+ {
+ if (!lock)
+ throw lock_error();
+
+ do_wait(lock.m_mutex);
+ }
+
+ template <typename L, typename Pr>
+ void wait(L& lock, Pr pred)
+ {
+ if (!lock)
+ throw lock_error();
+
+ while (!pred())
+ do_wait(lock.m_mutex);
+ }
+
+ template <typename L>
+ bool timed_wait(L& lock, const xtime& xt)
+ {
+ if (!lock)
+ throw lock_error();
+
+ return do_timed_wait(lock.m_mutex, xt);
+ }
+
+ template <typename L, typename Pr>
+ bool timed_wait(L& lock, const xtime& xt, Pr pred)
+ {
+ if (!lock)
+ throw lock_error();
+
+ while (!pred())
+ {
+ if (!do_timed_wait(lock.m_mutex, xt))
+ return false;
+ }
+
+ return true;
+ }
+
+private:
+ detail::condition_impl m_impl;
+
+ template <typename M>
+ void do_wait(M& mutex)
+ {
+#if (defined(BOOST_HAS_WINTHREADS) || defined(BOOST_HAS_MPTASKS))
+ m_impl.enter_wait();
+#endif
+
+ typedef detail::thread::lock_ops<M>
+#if defined(__HP_aCC) && __HP_aCC <= 33900 && !defined(BOOST_STRICT_CONFIG)
+# define lock_ops lock_ops_ // HP confuses lock_ops witht the template
+#endif
+ lock_ops;
+
+ typename lock_ops::lock_state state;
+ lock_ops::unlock(mutex, state);
+
+#if defined(BOOST_HAS_PTHREADS)
+ m_impl.do_wait(state.pmutex);
+#elif (defined(BOOST_HAS_WINTHREADS) || defined(BOOST_HAS_MPTASKS))
+ m_impl.do_wait();
+#endif
+
+ lock_ops::lock(mutex, state);
+#undef lock_ops
+ }
+
+ template <typename M>
+ bool do_timed_wait(M& mutex, const xtime& xt)
+ {
+#if (defined(BOOST_HAS_WINTHREADS) || defined(BOOST_HAS_MPTASKS))
+ m_impl.enter_wait();
+#endif
+
+ typedef detail::thread::lock_ops<M>
+#if defined(__HP_aCC) && __HP_aCC <= 33900 && !defined(BOOST_STRICT_CONFIG)
+# define lock_ops lock_ops_ // HP confuses lock_ops witht the template
+#endif
+ lock_ops;
+
+ typename lock_ops::lock_state state;
+ lock_ops::unlock(mutex, state);
+
+ bool ret = false;
+
+#if defined(BOOST_HAS_PTHREADS)
+ ret = m_impl.do_timed_wait(xt, state.pmutex);
+#elif (defined(BOOST_HAS_WINTHREADS) || defined(BOOST_HAS_MPTASKS))
+ ret = m_impl.do_timed_wait(xt);
+#endif
+
+ lock_ops::lock(mutex, state);
+#undef lock_ops
+
+ return ret;
+ }
+};
+#ifdef BOOST_MSVC
+# pragma warning(pop)
+#endif
+} // namespace boost
+
+// Change Log:
+// 8 Feb 01 WEKEMPF Initial version.
+// 22 May 01 WEKEMPF Modified to use xtime for time outs.
+// 23 May 01 WEKEMPF Removed "duration" timed_waits, as they are too
+// difficult to use with spurious wakeups.
+// 3 Jan 03 WEKEMPF Modified for DLL implementation.
+
+#endif // BOOST_CONDITION_WEK070601_HPP
diff --git a/boost/boost/thread/detail/config.hpp b/boost/boost/thread/detail/config.hpp
new file mode 100644
index 00000000000..94fb6b88f80
--- /dev/null
+++ b/boost/boost/thread/detail/config.hpp
@@ -0,0 +1,95 @@
+// Copyright (C) 2001-2003
+// William E. Kempf
+//
+// 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_THREAD_CONFIG_WEK01032003_HPP
+#define BOOST_THREAD_CONFIG_WEK01032003_HPP
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+#if BOOST_WORKAROUND(__BORLANDC__, < 0x600)
+# pragma warn -8008 // Condition always true/false
+# pragma warn -8080 // Identifier declared but never used
+# pragma warn -8057 // Parameter never used
+# pragma warn -8066 // Unreachable code
+#endif
+
+// insist on threading support being available:
+#include <boost/config/requires_threads.hpp>
+
+// compatibility with the rest of Boost's auto-linking code:
+#if defined(BOOST_THREAD_DYN_DLL) || defined(BOOST_ALL_DYN_LINK)
+# undef BOOST_THREAD_USE_LIB
+# define BOOST_THREAD_USE_DLL
+#endif
+
+#if defined(BOOST_THREAD_BUILD_DLL) //Build dll
+#elif defined(BOOST_THREAD_BUILD_LIB) //Build lib
+#elif defined(BOOST_THREAD_USE_DLL) //Use dll
+#elif defined(BOOST_THREAD_USE_LIB) //Use lib
+#else //Use default
+# if defined(BOOST_HAS_WINTHREADS)
+# if defined(BOOST_MSVC) || defined(BOOST_INTEL_WIN)
+ //For compilers supporting auto-tss cleanup
+ //with Boost.Threads lib, use Boost.Threads lib
+# define BOOST_THREAD_USE_LIB
+# else
+ //For compilers not yet supporting auto-tss cleanup
+ //with Boost.Threads lib, use Boost.Threads dll
+# define BOOST_THREAD_USE_DLL
+# endif
+# else
+# define BOOST_THREAD_USE_LIB
+# endif
+#endif
+
+#if defined(BOOST_HAS_DECLSPEC)
+# if defined(BOOST_THREAD_BUILD_DLL) //Build dll
+# define BOOST_THREAD_DECL __declspec(dllexport)
+# elif defined(BOOST_THREAD_USE_DLL) //Use dll
+# define BOOST_THREAD_DECL __declspec(dllimport)
+# else
+# define BOOST_THREAD_DECL
+# endif
+#else
+# define BOOST_THREAD_DECL
+#endif // BOOST_HAS_DECLSPEC
+
+//
+// Automatically link to the correct build variant where possible.
+//
+#if !defined(BOOST_ALL_NO_LIB) && !defined(BOOST_THREAD_NO_LIB) && !defined(BOOST_THREAD_BUILD_DLL) && !defined(BOOST_THREAD_BUILD_LIB)
+//
+// Tell the autolink to link dynamically, this will get undef'ed by auto_link.hpp
+// once it's done with it:
+//
+#if defined(BOOST_THREAD_USE_DLL)
+# define BOOST_DYN_LINK
+#endif
+//
+// Set the name of our library, this will get undef'ed by auto_link.hpp
+// once it's done with it:
+//
+#if defined(BOOST_THREAD_LIB_NAME)
+# define BOOST_LIB_NAME BOOST_THREAD_LIB_NAME
+#else
+# define BOOST_LIB_NAME boost_thread
+#endif
+//
+// If we're importing code from a dll, then tell auto_link.hpp about it:
+//
+// And include the header that does the work:
+//
+#include <boost/config/auto_link.hpp>
+#endif // auto-linking disabled
+
+#endif // BOOST_THREAD_CONFIG_WEK1032003_HPP
+
+// Change Log:
+// 22 Jan 05 Roland Schwarz (speedsnail)
+// Usage of BOOST_HAS_DECLSPEC macro.
+// Default again is static lib usage.
+// BOOST_DYN_LINK only defined when autolink included.
diff --git a/boost/boost/thread/detail/force_cast.hpp b/boost/boost/thread/detail/force_cast.hpp
new file mode 100644
index 00000000000..d5d15adc1a7
--- /dev/null
+++ b/boost/boost/thread/detail/force_cast.hpp
@@ -0,0 +1,39 @@
+// Copyright (C) 2001-2003
+// Mac Murrett
+//
+// 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_FORCE_CAST_MJM012402_HPP
+#define BOOST_FORCE_CAST_MJM012402_HPP
+
+#include <boost/thread/detail/config.hpp>
+
+namespace boost {
+namespace detail {
+namespace thread {
+
+// force_cast will convert anything to anything.
+
+// general case
+template<class Return_Type, class Argument_Type>
+inline Return_Type &force_cast(Argument_Type &rSrc)
+{
+ return(*reinterpret_cast<Return_Type *>(&rSrc));
+}
+
+// specialization for const
+template<class Return_Type, class Argument_Type>
+inline const Return_Type &force_cast(const Argument_Type &rSrc)
+{
+ return(*reinterpret_cast<const Return_Type *>(&rSrc));
+}
+
+} // namespace thread
+} // namespace detail
+} // namespace boost
+
+#endif // BOOST_FORCE_CAST_MJM012402_HPP
diff --git a/boost/boost/thread/detail/lock.hpp b/boost/boost/thread/detail/lock.hpp
new file mode 100644
index 00000000000..d2974ea0de2
--- /dev/null
+++ b/boost/boost/thread/detail/lock.hpp
@@ -0,0 +1,209 @@
+// Copyright (C) 2001-2003
+// William E. Kempf
+//
+// 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_XLOCK_WEK070601_HPP
+#define BOOST_XLOCK_WEK070601_HPP
+
+#include <boost/thread/detail/config.hpp>
+
+#include <boost/utility.hpp>
+#include <boost/thread/exceptions.hpp>
+
+namespace boost {
+
+class condition;
+struct xtime;
+
+namespace detail { namespace thread {
+
+template <typename Mutex>
+class lock_ops : private noncopyable
+{
+private:
+ lock_ops() { }
+
+public:
+ typedef typename Mutex::cv_state lock_state;
+
+ static void lock(Mutex& m)
+ {
+ m.do_lock();
+ }
+ static bool trylock(Mutex& m)
+ {
+ return m.do_trylock();
+ }
+ static bool timedlock(Mutex& m, const xtime& xt)
+ {
+ return m.do_timedlock(xt);
+ }
+ static void unlock(Mutex& m)
+ {
+ m.do_unlock();
+ }
+ static void lock(Mutex& m, lock_state& state)
+ {
+ m.do_lock(state);
+ }
+ static void unlock(Mutex& m, lock_state& state)
+ {
+ m.do_unlock(state);
+ }
+};
+
+template <typename Mutex>
+class scoped_lock : private noncopyable
+{
+public:
+ typedef Mutex mutex_type;
+
+ explicit scoped_lock(Mutex& mx, bool initially_locked=true)
+ : m_mutex(mx), m_locked(false)
+ {
+ if (initially_locked) lock();
+ }
+ ~scoped_lock()
+ {
+ if (m_locked) unlock();
+ }
+
+ void lock()
+ {
+ if (m_locked) throw lock_error();
+ lock_ops<Mutex>::lock(m_mutex);
+ m_locked = true;
+ }
+ void unlock()
+ {
+ if (!m_locked) throw lock_error();
+ lock_ops<Mutex>::unlock(m_mutex);
+ m_locked = false;
+ }
+
+ bool locked() const { return m_locked; }
+ operator const void*() const { return m_locked ? this : 0; }
+
+private:
+ friend class boost::condition;
+
+ Mutex& m_mutex;
+ bool m_locked;
+};
+
+template <typename TryMutex>
+class scoped_try_lock : private noncopyable
+{
+public:
+ typedef TryMutex mutex_type;
+
+ explicit scoped_try_lock(TryMutex& mx)
+ : m_mutex(mx), m_locked(false)
+ {
+ try_lock();
+ }
+ scoped_try_lock(TryMutex& mx, bool initially_locked)
+ : m_mutex(mx), m_locked(false)
+ {
+ if (initially_locked) lock();
+ }
+ ~scoped_try_lock()
+ {
+ if (m_locked) unlock();
+ }
+
+ void lock()
+ {
+ if (m_locked) throw lock_error();
+ lock_ops<TryMutex>::lock(m_mutex);
+ m_locked = true;
+ }
+ bool try_lock()
+ {
+ if (m_locked) throw lock_error();
+ return (m_locked = lock_ops<TryMutex>::trylock(m_mutex));
+ }
+ void unlock()
+ {
+ if (!m_locked) throw lock_error();
+ lock_ops<TryMutex>::unlock(m_mutex);
+ m_locked = false;
+ }
+
+ bool locked() const { return m_locked; }
+ operator const void*() const { return m_locked ? this : 0; }
+
+private:
+ friend class boost::condition;
+
+ TryMutex& m_mutex;
+ bool m_locked;
+};
+
+template <typename TimedMutex>
+class scoped_timed_lock : private noncopyable
+{
+public:
+ typedef TimedMutex mutex_type;
+
+ scoped_timed_lock(TimedMutex& mx, const xtime& xt)
+ : m_mutex(mx), m_locked(false)
+ {
+ timed_lock(xt);
+ }
+ scoped_timed_lock(TimedMutex& mx, bool initially_locked)
+ : m_mutex(mx), m_locked(false)
+ {
+ if (initially_locked) lock();
+ }
+ ~scoped_timed_lock()
+ {
+ if (m_locked) unlock();
+ }
+
+ void lock()
+ {
+ if (m_locked) throw lock_error();
+ lock_ops<TimedMutex>::lock(m_mutex);
+ m_locked = true;
+ }
+ bool try_lock()
+ {
+ if (m_locked) throw lock_error();
+ return (m_locked = lock_ops<TimedMutex>::trylock(m_mutex));
+ }
+ bool timed_lock(const xtime& xt)
+ {
+ if (m_locked) throw lock_error();
+ return (m_locked = lock_ops<TimedMutex>::timedlock(m_mutex, xt));
+ }
+ void unlock()
+ {
+ if (!m_locked) throw lock_error();
+ lock_ops<TimedMutex>::unlock(m_mutex);
+ m_locked = false;
+ }
+
+ bool locked() const { return m_locked; }
+ operator const void*() const { return m_locked ? this : 0; }
+
+private:
+ friend class boost::condition;
+
+ TimedMutex& m_mutex;
+ bool m_locked;
+};
+
+} // namespace thread
+} // namespace detail
+} // namespace boost
+
+#endif // BOOST_XLOCK_WEK070601_HPP
+
+// Change Log:
+// 8 Feb 01 WEKEMPF Initial version.
+// 22 May 01 WEKEMPF Modified to use xtime for time outs.
+// 30 Jul 01 WEKEMPF Moved lock types into boost::detail::thread. Renamed
+// some types. Added locked() methods.
diff --git a/boost/boost/thread/detail/read_write_lock.hpp b/boost/boost/thread/detail/read_write_lock.hpp
new file mode 100644
index 00000000000..c596df78415
--- /dev/null
+++ b/boost/boost/thread/detail/read_write_lock.hpp
@@ -0,0 +1,1106 @@
+// Copyright (C) 2002-2003
+// David Moore, Michael Glassford
+//
+// Original scoped_lock implementation
+// Copyright (C) 2001
+// William E. Kempf
+//
+// 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_READ_WRITE_LOCK_JDM031002_HPP
+#define BOOST_READ_WRITE_LOCK_JDM031002_HPP
+
+#include <boost/thread/detail/config.hpp>
+
+#include <boost/utility.hpp>
+#include <boost/thread/exceptions.hpp>
+#include <boost/thread/detail/lock.hpp>
+
+namespace boost {
+
+struct xtime;
+
+namespace read_write_lock_state {
+ enum read_write_lock_state_enum
+ {
+ unlocked=0,
+ read_locked=1,
+ write_locked=2
+ };
+} //namespace read_write_lock_state
+
+namespace detail {
+namespace thread {
+
+template <typename Mutex>
+class read_write_lock_ops : private noncopyable
+{
+private:
+
+ read_write_lock_ops() { }
+ ~read_write_lock_ops() { }
+
+public:
+
+ typedef Mutex mutex_type;
+
+ static void write_lock(Mutex& m)
+ {
+ m.do_write_lock();
+ }
+ static void read_lock(Mutex& m)
+ {
+ m.do_read_lock();
+ }
+ static void write_unlock(Mutex& m)
+ {
+ m.do_write_unlock();
+ }
+ static void read_unlock(Mutex &m)
+ {
+ m.do_read_unlock();
+ }
+ static bool try_write_lock(Mutex &m)
+ {
+ return m.do_try_write_lock();
+ }
+ static bool try_read_lock(Mutex &m)
+ {
+ return m.do_try_read_lock();
+ }
+
+ static bool timed_write_lock(Mutex &m,const xtime &xt)
+ {
+ return m.do_timed_write_lock(xt);
+ }
+ static bool timed_read_lock(Mutex &m,const xtime &xt)
+ {
+ return m.do_timed_read_lock(xt);
+ }
+
+ static void demote(Mutex & m)
+ {
+ m.do_demote_to_read_lock();
+ }
+ static bool try_demote(Mutex & m)
+ {
+ return m.do_try_demote_to_read_lock();
+ }
+ static bool timed_demote(Mutex & m,const xtime &xt)
+ {
+ return m.do_timed_demote_to_read_lock(xt);
+ }
+
+ static void promote(Mutex & m)
+ {
+ m.do_promote_to_write_lock();
+ }
+ static bool try_promote(Mutex & m)
+ {
+ return m.do_try_promote_to_write_lock();
+ }
+ static bool timed_promote(Mutex & m,const xtime &xt)
+ {
+ return m.do_timed_promote_to_write_lock(xt);
+ }
+};
+
+template <typename ReadWriteMutex>
+class scoped_read_write_lock : private noncopyable
+{
+public:
+
+ typedef ReadWriteMutex mutex_type;
+
+ scoped_read_write_lock(
+ ReadWriteMutex& mx,
+ read_write_lock_state::read_write_lock_state_enum initial_state)
+ : m_mutex(mx), m_state(read_write_lock_state::unlocked)
+ {
+ if (initial_state == read_write_lock_state::read_locked)
+ read_lock();
+ else if (initial_state == read_write_lock_state::write_locked)
+ write_lock();
+ }
+
+ ~scoped_read_write_lock()
+ {
+ if (m_state != read_write_lock_state::unlocked)
+ unlock();
+ }
+
+ void read_lock()
+ {
+ if (m_state != read_write_lock_state::unlocked) throw lock_error();
+ read_write_lock_ops<ReadWriteMutex>::read_lock(m_mutex);
+ m_state = read_write_lock_state::read_locked;
+ }
+
+ void write_lock()
+ {
+ if (m_state != read_write_lock_state::unlocked) throw lock_error();
+ read_write_lock_ops<ReadWriteMutex>::write_lock(m_mutex);
+ m_state = read_write_lock_state::write_locked;
+ }
+
+ void unlock()
+ {
+ if (m_state == read_write_lock_state::unlocked) throw lock_error();
+ if (m_state == read_write_lock_state::read_locked)
+ read_write_lock_ops<ReadWriteMutex>::read_unlock(m_mutex);
+ else //(m_state == read_write_lock_state::write_locked)
+ read_write_lock_ops<ReadWriteMutex>::write_unlock(m_mutex);
+
+ m_state = read_write_lock_state::unlocked;
+ }
+
+ void demote(void)
+ {
+ if (m_state != read_write_lock_state::write_locked) throw lock_error();
+ read_write_lock_ops<ReadWriteMutex>::demote(m_mutex);
+ m_state = read_write_lock_state::read_locked;
+ }
+
+ void promote(void)
+ {
+ if (m_state != read_write_lock_state::read_locked) throw lock_error();
+ read_write_lock_ops<ReadWriteMutex>::promote(m_mutex);
+ m_state = read_write_lock_state::write_locked;
+ }
+
+ //If allow_unlock = true, set_lock always succeeds and
+ //the function result indicates whether an unlock was required.
+ //If allow_unlock = false, set_lock may fail;
+ //the function result indicates whether it succeeded.
+ bool set_lock(read_write_lock_state::read_write_lock_state_enum ls, bool allow_unlock = true)
+ {
+ bool result = !allow_unlock;
+
+ if (m_state != ls)
+ {
+ if (m_state == read_write_lock_state::unlocked)
+ {
+ if (ls == read_write_lock_state::read_locked)
+ read_lock();
+ else //(ls == read_write_lock_state::write_locked)
+ write_lock();
+ }
+ else //(m_state == read_write_lock_state::read_locked || m_state == read_write_lock_state::write_locked)
+ {
+ if (ls == read_write_lock_state::read_locked)
+ demote();
+ else if (ls == read_write_lock_state::write_locked)
+ {
+ if (allow_unlock)
+ {
+ result = true;
+ unlock();
+ write_lock();
+ }
+ else
+ result = false;
+ }
+ else //(ls == read_write_lock_state::unlocked)
+ unlock();
+ }
+ }
+
+ return result;
+ }
+
+ bool locked() const
+ {
+ return m_state != read_write_lock_state::unlocked;
+ }
+
+ bool read_locked() const
+ {
+ return m_state == read_write_lock_state::read_locked;
+ }
+
+ bool write_locked() const
+ {
+ return m_state != read_write_lock_state::write_locked;
+ }
+
+ operator const void*() const
+ {
+ return (m_state != read_write_lock_state::unlocked) ? this : 0;
+ }
+
+ read_write_lock_state::read_write_lock_state_enum state() const
+ {
+ return m_state;
+ }
+
+private:
+
+ ReadWriteMutex& m_mutex;
+ read_write_lock_state::read_write_lock_state_enum m_state;
+};
+
+template <typename ReadWriteMutex>
+class scoped_read_lock : private noncopyable
+{
+public:
+
+ typedef ReadWriteMutex mutex_type;
+
+ explicit scoped_read_lock(
+ ReadWriteMutex& mx,
+ bool initially_locked = true)
+ : m_mutex(mx), m_state(read_write_lock_state::unlocked)
+ {
+ if (initially_locked)
+ lock();
+ }
+
+ ~scoped_read_lock()
+ {
+ if (m_state != read_write_lock_state::unlocked)
+ unlock();
+ }
+
+ void lock()
+ {
+ if (m_state != read_write_lock_state::unlocked) throw lock_error();
+ read_write_lock_ops<ReadWriteMutex>::read_lock(m_mutex);
+ m_state = read_write_lock_state::read_locked;
+ }
+
+ void unlock()
+ {
+ if (m_state != read_write_lock_state::read_locked) throw lock_error();
+ read_write_lock_ops<ReadWriteMutex>::read_unlock(m_mutex);
+
+ m_state = read_write_lock_state::unlocked;
+ }
+
+ bool locked() const
+ {
+ return m_state != read_write_lock_state::unlocked;
+ }
+
+ operator const void*() const
+ {
+ return (m_state != read_write_lock_state::unlocked) ? this : 0;
+ }
+
+private:
+
+ ReadWriteMutex& m_mutex;
+ read_write_lock_state::read_write_lock_state_enum m_state;
+};
+
+template <typename ReadWriteMutex>
+class scoped_write_lock : private noncopyable
+{
+public:
+
+ typedef ReadWriteMutex mutex_type;
+
+ explicit scoped_write_lock(
+ ReadWriteMutex& mx,
+ bool initially_locked = true)
+ : m_mutex(mx), m_state(read_write_lock_state::unlocked)
+ {
+ if (initially_locked)
+ lock();
+ }
+
+ ~scoped_write_lock()
+ {
+ if (m_state != read_write_lock_state::unlocked)
+ unlock();
+ }
+
+ void lock()
+ {
+ if (m_state != read_write_lock_state::unlocked) throw lock_error();
+ read_write_lock_ops<ReadWriteMutex>::write_lock(m_mutex);
+ m_state = read_write_lock_state::write_locked;
+ }
+
+ void unlock()
+ {
+ if (m_state != read_write_lock_state::write_locked) throw lock_error();
+ read_write_lock_ops<ReadWriteMutex>::write_unlock(m_mutex);
+
+ m_state = read_write_lock_state::unlocked;
+ }
+
+ bool locked() const
+ {
+ return m_state != read_write_lock_state::unlocked;
+ }
+
+ operator const void*() const
+ {
+ return (m_state != read_write_lock_state::unlocked) ? this : 0;
+ }
+
+private:
+
+ ReadWriteMutex& m_mutex;
+ read_write_lock_state::read_write_lock_state_enum m_state;
+};
+
+template <typename TryReadWriteMutex>
+class scoped_try_read_write_lock : private noncopyable
+{
+public:
+
+ typedef TryReadWriteMutex mutex_type;
+
+ scoped_try_read_write_lock(
+ TryReadWriteMutex& mx,
+ read_write_lock_state::read_write_lock_state_enum initial_state)
+ : m_mutex(mx), m_state(read_write_lock_state::unlocked)
+ {
+ if (initial_state == read_write_lock_state::read_locked)
+ read_lock();
+ else if (initial_state == read_write_lock_state::write_locked)
+ write_lock();
+ }
+
+ ~scoped_try_read_write_lock()
+ {
+ if (m_state != read_write_lock_state::unlocked)
+ unlock();
+ }
+
+ void read_lock()
+ {
+ if (m_state != read_write_lock_state::unlocked) throw lock_error();
+ read_write_lock_ops<TryReadWriteMutex>::read_lock(m_mutex);
+ m_state = read_write_lock_state::read_locked;
+ }
+
+ bool try_read_lock()
+ {
+ if (m_state != read_write_lock_state::unlocked) throw lock_error();
+ if(read_write_lock_ops<TryReadWriteMutex>::try_read_lock(m_mutex))
+ {
+ m_state = read_write_lock_state::read_locked;
+ return true;
+ }
+ return false;
+ }
+
+ void write_lock()
+ {
+ if (m_state != read_write_lock_state::unlocked) throw lock_error();
+ read_write_lock_ops<TryReadWriteMutex>::write_lock(m_mutex);
+ m_state = read_write_lock_state::write_locked;
+ }
+
+ bool try_write_lock()
+ {
+ if (m_state != read_write_lock_state::unlocked) throw lock_error();
+ if(read_write_lock_ops<TryReadWriteMutex>::try_write_lock(m_mutex))
+ {
+ m_state = read_write_lock_state::write_locked;
+ return true;
+ }
+ return false;
+ }
+
+ void unlock()
+ {
+ if (m_state == read_write_lock_state::unlocked) throw lock_error();
+ if (m_state == read_write_lock_state::read_locked)
+ read_write_lock_ops<TryReadWriteMutex>::read_unlock(m_mutex);
+ else //(m_state == read_write_lock_state::write_locked)
+ read_write_lock_ops<TryReadWriteMutex>::write_unlock(m_mutex);
+
+ m_state = read_write_lock_state::unlocked;
+ }
+
+ void demote(void)
+ {
+ if (m_state != read_write_lock_state::write_locked) throw lock_error();
+ read_write_lock_ops<TryReadWriteMutex>::demote(m_mutex);
+ m_state = read_write_lock_state::read_locked;
+ }
+
+ bool try_demote(void)
+ {
+ if (m_state != read_write_lock_state::write_locked) throw lock_error();
+ return read_write_lock_ops<TryReadWriteMutex>::try_demote(m_mutex) ? (m_state = read_write_lock_state::read_locked, true) : false;
+ }
+
+ void promote(void)
+ {
+ if (m_state != read_write_lock_state::read_locked) throw lock_error();
+ read_write_lock_ops<TryReadWriteMutex>::promote(m_mutex);
+ m_state = read_write_lock_state::write_locked;
+ }
+
+ bool try_promote(void)
+ {
+ if (m_state != read_write_lock_state::read_locked) throw lock_error();
+ return read_write_lock_ops<TryReadWriteMutex>::try_promote(m_mutex) ? (m_state = read_write_lock_state::write_locked, true) : false;
+ }
+
+ //If allow_unlock = true, set_lock always succeeds and
+ //the function result indicates whether an unlock was required.
+ //If allow_unlock = false, set_lock may fail;
+ //the function result indicates whether it succeeded.
+ bool set_lock(read_write_lock_state::read_write_lock_state_enum ls, bool allow_unlock = true)
+ {
+ bool result = !allow_unlock;
+
+ if (m_state != ls)
+ {
+ if (m_state == read_write_lock_state::unlocked)
+ {
+ if (ls == read_write_lock_state::read_locked)
+ read_lock();
+ else //(ls == read_write_lock_state::write_locked)
+ write_lock();
+ }
+ else //(m_state == read_write_lock_state::read_locked || m_state == read_write_lock_state::write_locked)
+ {
+ if (ls == read_write_lock_state::read_locked)
+ demote();
+ else if (ls == read_write_lock_state::write_locked)
+ {
+ if (!try_promote())
+ {
+ if (allow_unlock)
+ {
+ result = true;
+ unlock();
+ write_lock();
+ }
+ else
+ result = false;
+ }
+ }
+ else //(ls == read_write_lock_state::unlocked)
+ unlock();
+ }
+ }
+
+ return result;
+ }
+
+ bool try_set_lock(read_write_lock_state::read_write_lock_state_enum ls)
+ {
+ if (m_state != ls)
+ {
+ if (m_state == read_write_lock_state::unlocked)
+ {
+ if (ls == read_write_lock_state::read_locked)
+ return try_read_lock();
+ else // (ls == read_write_lock_state::write_locked)
+ return try_write_lock();
+ }
+ else //(m_state == read_write_lock_state::read_locked || m_state == read_write_lock_state::write_locked)
+ {
+ if (ls == read_write_lock_state::read_locked)
+ return try_demote();
+ else if (ls == read_write_lock_state::write_locked)
+ return try_promote();
+ else //(ls == read_write_lock_state::unlocked)
+ return unlock(), true;
+ }
+ }
+ else //(m_state == ls)
+ return true;
+ }
+
+ bool locked() const
+ {
+ return m_state != read_write_lock_state::unlocked;
+ }
+
+ bool read_locked() const
+ {
+ return m_state == read_write_lock_state::read_locked;
+ }
+
+ bool write_locked() const
+ {
+ return m_state != read_write_lock_state::write_locked;
+ }
+
+ operator const void*() const
+ {
+ return (m_state != read_write_lock_state::unlocked) ? this : 0;
+ }
+
+ read_write_lock_state::read_write_lock_state_enum state() const
+ {
+ return m_state;
+ }
+
+private:
+
+ TryReadWriteMutex& m_mutex;
+ read_write_lock_state::read_write_lock_state_enum m_state;
+};
+
+template <typename TryReadWriteMutex>
+class scoped_try_read_lock : private noncopyable
+{
+public:
+
+ typedef TryReadWriteMutex mutex_type;
+
+ explicit scoped_try_read_lock(
+ TryReadWriteMutex& mx,
+ bool initially_locked = true)
+ : m_mutex(mx), m_state(read_write_lock_state::unlocked)
+ {
+ if (initially_locked)
+ lock();
+ }
+
+ ~scoped_try_read_lock()
+ {
+ if (m_state != read_write_lock_state::unlocked)
+ unlock();
+ }
+
+ void lock()
+ {
+ if (m_state != read_write_lock_state::unlocked) throw lock_error();
+ read_write_lock_ops<TryReadWriteMutex>::read_lock(m_mutex);
+ m_state = read_write_lock_state::read_locked;
+ }
+
+ bool try_lock()
+ {
+ if (m_state != read_write_lock_state::unlocked) throw lock_error();
+ if(read_write_lock_ops<TryReadWriteMutex>::try_read_lock(m_mutex))
+ {
+ m_state = read_write_lock_state::read_locked;
+ return true;
+ }
+ return false;
+ }
+
+ void unlock()
+ {
+ if (m_state != read_write_lock_state::read_locked) throw lock_error();
+ read_write_lock_ops<TryReadWriteMutex>::read_unlock(m_mutex);
+
+ m_state = read_write_lock_state::unlocked;
+ }
+
+ bool locked() const
+ {
+ return m_state != read_write_lock_state::unlocked;
+ }
+
+ operator const void*() const
+ {
+ return (m_state != read_write_lock_state::unlocked) ? this : 0;
+ }
+
+private:
+
+ TryReadWriteMutex& m_mutex;
+ read_write_lock_state::read_write_lock_state_enum m_state;
+};
+
+template <typename TryReadWriteMutex>
+class scoped_try_write_lock : private noncopyable
+{
+public:
+
+ typedef TryReadWriteMutex mutex_type;
+
+ explicit scoped_try_write_lock(
+ TryReadWriteMutex& mx,
+ bool initially_locked = true)
+ : m_mutex(mx), m_state(read_write_lock_state::unlocked)
+ {
+ if (initially_locked)
+ lock();
+ }
+
+ ~scoped_try_write_lock()
+ {
+ if (m_state != read_write_lock_state::unlocked)
+ unlock();
+ }
+
+ void lock()
+ {
+ if (m_state != read_write_lock_state::unlocked) throw lock_error();
+ read_write_lock_ops<TryReadWriteMutex>::write_lock(m_mutex);
+ m_state = read_write_lock_state::write_locked;
+ }
+
+ bool try_lock()
+ {
+ if (m_state != read_write_lock_state::unlocked) throw lock_error();
+ if(read_write_lock_ops<TryReadWriteMutex>::try_write_lock(m_mutex))
+ {
+ m_state = read_write_lock_state::write_locked;
+ return true;
+ }
+ return false;
+ }
+
+ void unlock()
+ {
+ if (m_state != read_write_lock_state::write_locked) throw lock_error();
+ read_write_lock_ops<TryReadWriteMutex>::write_unlock(m_mutex);
+
+ m_state = read_write_lock_state::unlocked;
+ }
+
+ bool locked() const
+ {
+ return m_state != read_write_lock_state::unlocked;
+ }
+
+ operator const void*() const
+ {
+ return (m_state != read_write_lock_state::unlocked) ? this : 0;
+ }
+
+private:
+
+ TryReadWriteMutex& m_mutex;
+ read_write_lock_state::read_write_lock_state_enum m_state;
+};
+
+template <typename TimedReadWriteMutex>
+class scoped_timed_read_write_lock : private noncopyable
+{
+public:
+
+ typedef TimedReadWriteMutex mutex_type;
+
+ scoped_timed_read_write_lock(
+ TimedReadWriteMutex& mx,
+ read_write_lock_state::read_write_lock_state_enum initial_state)
+ : m_mutex(mx), m_state(read_write_lock_state::unlocked)
+ {
+ if (initial_state == read_write_lock_state::read_locked)
+ read_lock();
+ else if (initial_state == read_write_lock_state::write_locked)
+ write_lock();
+ }
+
+ ~scoped_timed_read_write_lock()
+ {
+ if (m_state != read_write_lock_state::unlocked)
+ unlock();
+ }
+
+ void read_lock()
+ {
+ if (m_state != read_write_lock_state::unlocked) throw lock_error();
+ read_write_lock_ops<TimedReadWriteMutex>::read_lock(m_mutex);
+ m_state = read_write_lock_state::read_locked;
+ }
+
+ bool try_read_lock()
+ {
+ if (m_state != read_write_lock_state::unlocked) throw lock_error();
+ if(read_write_lock_ops<TimedReadWriteMutex>::try_read_lock(m_mutex))
+ {
+ m_state = read_write_lock_state::read_locked;
+ return true;
+ }
+ return false;
+ }
+
+ bool timed_read_lock(const xtime &xt)
+ {
+ if (m_state != read_write_lock_state::unlocked) throw lock_error();
+ if(read_write_lock_ops<TimedReadWriteMutex>::timed_read_lock(m_mutex,xt))
+ {
+ m_state = read_write_lock_state::read_locked;
+ return true;
+ }
+ return false;
+ }
+
+ void write_lock()
+ {
+ if (m_state != read_write_lock_state::unlocked) throw lock_error();
+ read_write_lock_ops<TimedReadWriteMutex>::write_lock(m_mutex);
+ m_state = read_write_lock_state::write_locked;
+ }
+
+ bool try_write_lock()
+ {
+ if (m_state != read_write_lock_state::unlocked) throw lock_error();
+ if(read_write_lock_ops<TimedReadWriteMutex>::try_write_lock(m_mutex))
+ {
+ m_state = read_write_lock_state::write_locked;
+ return true;
+ }
+ return false;
+ }
+
+ bool timed_write_lock(const xtime &xt)
+ {
+ if (m_state != read_write_lock_state::unlocked) throw lock_error();
+ if(read_write_lock_ops<TimedReadWriteMutex>::timed_write_lock(m_mutex,xt))
+ {
+ m_state = read_write_lock_state::write_locked;
+ return true;
+ }
+ return false;
+ }
+
+ void unlock()
+ {
+ if (m_state == read_write_lock_state::unlocked) throw lock_error();
+ if (m_state == read_write_lock_state::read_locked)
+ read_write_lock_ops<TimedReadWriteMutex>::read_unlock(m_mutex);
+ else //(m_state == read_write_lock_state::write_locked)
+ read_write_lock_ops<TimedReadWriteMutex>::write_unlock(m_mutex);
+
+ m_state = read_write_lock_state::unlocked;
+ }
+
+ void demote(void)
+ {
+ if (m_state != read_write_lock_state::write_locked) throw lock_error();
+ read_write_lock_ops<TimedReadWriteMutex>::demote(m_mutex);
+ m_state = read_write_lock_state::read_locked;
+ }
+
+ bool try_demote(void)
+ {
+ if (m_state != read_write_lock_state::write_locked) throw lock_error();
+ return read_write_lock_ops<TimedReadWriteMutex>::try_demote(m_mutex) ? (m_state = read_write_lock_state::read_locked, true) : false;
+ }
+
+ bool timed_demote(const xtime &xt)
+ {
+ if (m_state != read_write_lock_state::write_locked) throw lock_error();
+ return read_write_lock_ops<TimedReadWriteMutex>::timed_demote(m_mutex, xt) ? (m_state = read_write_lock_state::read_locked, true) : false;
+ }
+
+ void promote(void)
+ {
+ if (m_state != read_write_lock_state::read_locked) throw lock_error();
+ read_write_lock_ops<TimedReadWriteMutex>::promote(m_mutex);
+ m_state = read_write_lock_state::write_locked;
+ }
+
+ bool try_promote(void)
+ {
+ if (m_state != read_write_lock_state::read_locked) throw lock_error();
+ return read_write_lock_ops<TimedReadWriteMutex>::try_promote(m_mutex) ? (m_state = read_write_lock_state::write_locked, true) : false;
+ }
+
+ bool timed_promote(const xtime &xt)
+ {
+ if (m_state != read_write_lock_state::read_locked) throw lock_error();
+ return read_write_lock_ops<TimedReadWriteMutex>::timed_promote(m_mutex, xt) ? (m_state = read_write_lock_state::write_locked, true) : false;
+ }
+
+ //If allow_unlock = true, set_lock always succeeds and
+ //the function result indicates whether an unlock was required.
+ //If allow_unlock = false, set_lock may fail;
+ //the function result indicates whether it succeeded.
+ bool set_lock(read_write_lock_state::read_write_lock_state_enum ls, bool allow_unlock = true)
+ {
+ bool result = !allow_unlock;
+
+ if (m_state != ls)
+ {
+ if (m_state == read_write_lock_state::unlocked)
+ {
+ if (ls == read_write_lock_state::read_locked)
+ read_lock();
+ else //(ls == read_write_lock_state::write_locked)
+ write_lock();
+ }
+ else //(m_state == read_write_lock_state::read_locked || m_state == read_write_lock_state::write_locked)
+ {
+ if (ls == read_write_lock_state::read_locked)
+ demote();
+ else if (ls == read_write_lock_state::write_locked)
+ {
+ if (!try_promote())
+ {
+ if (allow_unlock)
+ {
+ result = true;
+ unlock();
+ write_lock();
+ }
+ else
+ result = false;
+ }
+ }
+ else //(ls == read_write_lock_state::unlocked)
+ unlock();
+ }
+ }
+
+ return result;
+ }
+
+ bool try_set_lock(read_write_lock_state::read_write_lock_state_enum ls)
+ {
+ if (m_state != ls)
+ {
+ if (m_state == read_write_lock_state::unlocked)
+ {
+ if (ls == read_write_lock_state::read_locked)
+ return try_read_lock();
+ else // (ls == read_write_lock_state::write_locked)
+ return try_write_lock();
+ }
+ else //(m_state == read_write_lock_state::read_locked || m_state == read_write_lock_state::write_locked)
+ {
+ if (ls == read_write_lock_state::read_locked)
+ return try_demote();
+ else if (ls == read_write_lock_state::write_locked)
+ return try_promote();
+ else //(ls == read_write_lock_state::unlocked)
+ return unlock(), true;
+ }
+ }
+ else //(m_state == ls)
+ return true;
+ }
+
+ bool timed_set_lock(read_write_lock_state::read_write_lock_state_enum ls, const xtime &xt)
+ {
+ if (m_state != ls)
+ {
+ if (m_state == read_write_lock_state::unlocked)
+ {
+ if (ls == read_write_lock_state::read_locked)
+ return timed_read_lock(xt);
+ else // (ls == read_write_lock_state::write_locked)
+ return timed_write_lock(xt);
+ }
+ else //(m_state == read_write_lock_state::read_locked || m_state == read_write_lock_state::write_locked)
+ {
+ if (ls == read_write_lock_state::read_locked)
+ return timed_demote(xt);
+ else if (ls == read_write_lock_state::write_locked)
+ return timed_promote(xt);
+ else //(ls == read_write_lock_state::unlocked)
+ return unlock(), true;
+ }
+ }
+ else //(m_state == ls)
+ return true;
+ }
+
+ bool locked() const
+ {
+ return m_state != read_write_lock_state::unlocked;
+ }
+
+ bool read_locked() const
+ {
+ return m_state == read_write_lock_state::read_locked;
+ }
+
+ bool write_locked() const
+ {
+ return m_state != read_write_lock_state::write_locked;
+ }
+
+ operator const void*() const
+ {
+ return (m_state != read_write_lock_state::unlocked) ? this : 0;
+ }
+
+ read_write_lock_state::read_write_lock_state_enum state() const
+ {
+ return m_state;
+ }
+
+private:
+
+ TimedReadWriteMutex& m_mutex;
+ read_write_lock_state::read_write_lock_state_enum m_state;
+};
+
+template <typename TimedReadWriteMutex>
+class scoped_timed_read_lock : private noncopyable
+{
+public:
+
+ typedef TimedReadWriteMutex mutex_type;
+
+ explicit scoped_timed_read_lock(
+ TimedReadWriteMutex& mx,
+ bool initially_locked = true)
+ : m_mutex(mx), m_state(read_write_lock_state::unlocked)
+ {
+ if (initially_locked)
+ lock();
+ }
+
+ ~scoped_timed_read_lock()
+ {
+ if (m_state != read_write_lock_state::unlocked)
+ unlock();
+ }
+
+ void lock()
+ {
+ if (m_state != read_write_lock_state::unlocked) throw lock_error();
+ read_write_lock_ops<TimedReadWriteMutex>::read_lock(m_mutex);
+ m_state = read_write_lock_state::read_locked;
+ }
+
+ bool try_lock()
+ {
+ if (m_state != read_write_lock_state::unlocked) throw lock_error();
+ if(read_write_lock_ops<TimedReadWriteMutex>::try_read_lock(m_mutex))
+ {
+ m_state = read_write_lock_state::read_locked;
+ return true;
+ }
+ return false;
+ }
+
+ bool timed_lock(const xtime &xt)
+ {
+ if (m_state != read_write_lock_state::unlocked) throw lock_error();
+ if(read_write_lock_ops<TimedReadWriteMutex>::timed_read_lock(m_mutex,xt))
+ {
+ m_state = read_write_lock_state::read_locked;
+ return true;
+ }
+ return false;
+ }
+
+ void unlock()
+ {
+ if (m_state != read_write_lock_state::read_locked) throw lock_error();
+ read_write_lock_ops<TimedReadWriteMutex>::read_unlock(m_mutex);
+
+ m_state = read_write_lock_state::unlocked;
+ }
+
+ bool locked() const
+ {
+ return m_state != read_write_lock_state::unlocked;
+ }
+
+ operator const void*() const
+ {
+ return (m_state != read_write_lock_state::unlocked) ? this : 0;
+ }
+
+ read_write_lock_state::read_write_lock_state_enum state() const
+ {
+ return m_state;
+ }
+
+private:
+
+ TimedReadWriteMutex& m_mutex;
+ read_write_lock_state::read_write_lock_state_enum m_state;
+};
+
+template <typename TimedReadWriteMutex>
+class scoped_timed_write_lock : private noncopyable
+{
+public:
+
+ typedef TimedReadWriteMutex mutex_type;
+
+ explicit scoped_timed_write_lock(
+ TimedReadWriteMutex& mx,
+ bool initially_locked = true)
+ : m_mutex(mx), m_state(read_write_lock_state::unlocked)
+ {
+ if (initially_locked)
+ lock();
+ }
+
+ ~scoped_timed_write_lock()
+ {
+ if (m_state != read_write_lock_state::unlocked)
+ unlock();
+ }
+
+ void lock()
+ {
+ if (m_state != read_write_lock_state::unlocked) throw lock_error();
+ read_write_lock_ops<TimedReadWriteMutex>::write_lock(m_mutex);
+ m_state = read_write_lock_state::write_locked;
+ }
+
+ bool try_lock()
+ {
+ if (m_state != read_write_lock_state::unlocked) throw lock_error();
+ if(read_write_lock_ops<TimedReadWriteMutex>::try_write_lock(m_mutex))
+ {
+ m_state = read_write_lock_state::write_locked;
+ return true;
+ }
+ return false;
+ }
+
+ bool timed_lock(const xtime &xt)
+ {
+ if (m_state != read_write_lock_state::unlocked) throw lock_error();
+ if(read_write_lock_ops<TimedReadWriteMutex>::timed_write_lock(m_mutex,xt))
+ {
+ m_state = read_write_lock_state::write_locked;
+ return true;
+ }
+ return false;
+ }
+
+ void unlock()
+ {
+ if (m_state != read_write_lock_state::write_locked) throw lock_error();
+ read_write_lock_ops<TimedReadWriteMutex>::write_unlock(m_mutex);
+
+ m_state = read_write_lock_state::unlocked;
+ }
+
+ bool locked() const
+ {
+ return m_state != read_write_lock_state::unlocked;
+ }
+
+ operator const void*() const
+ {
+ return (m_state != read_write_lock_state::unlocked) ? this : 0;
+ }
+
+ read_write_lock_state::read_write_lock_state_enum state() const
+ {
+ return m_state;
+ }
+
+private:
+
+ TimedReadWriteMutex& m_mutex;
+ read_write_lock_state::read_write_lock_state_enum m_state;
+};
+
+} // namespace thread
+} // namespace detail
+} // namespace boost
+
+#endif
+
+// Change Log:
+// 10 Mar 02
+// Original version.
+// 4 May 04 GlassfordM
+// Implement lock promotion and demotion (add member functions demote(),
+// try_demote(), timed_demote(), try_promote(), timed_promote(); note
+// that there is intentionally no promote() member function).
+// Add set_lock() member function.
+// Change try lock & timed lock constructor parameters for consistency.
+// Rename to improve consistency and eliminate abbreviations:
+// Use "read" and "write" instead of "shared" and "exclusive".
+// Change "rd" to "read", "wr" to "write", "rw" to "read_write".
+// Add mutex_type typdef.
diff --git a/boost/boost/thread/detail/singleton.hpp b/boost/boost/thread/detail/singleton.hpp
new file mode 100644
index 00000000000..a20a42908d2
--- /dev/null
+++ b/boost/boost/thread/detail/singleton.hpp
@@ -0,0 +1,59 @@
+// Copyright (C) 2001-2003
+// Mac Murrett
+//
+// 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_SINGLETON_MJM012402_HPP
+#define BOOST_SINGLETON_MJM012402_HPP
+
+#include <boost/thread/detail/config.hpp>
+
+namespace boost {
+namespace detail {
+namespace thread {
+
+// class singleton has the same goal as all singletons: create one instance of
+// a class on demand, then dish it out as requested.
+
+template <class T>
+class singleton : private T
+{
+private:
+ singleton();
+ ~singleton();
+
+public:
+ static T &instance();
+};
+
+
+template <class T>
+inline singleton<T>::singleton()
+{
+ /* no-op */
+}
+
+template <class T>
+inline singleton<T>::~singleton()
+{
+ /* no-op */
+}
+
+template <class T>
+/*static*/ T &singleton<T>::instance()
+{
+ // function-local static to force this to work correctly at static
+ // initialization time.
+ static singleton<T> s_oT;
+ return(s_oT);
+}
+
+} // namespace thread
+} // namespace detail
+} // namespace boost
+
+#endif // BOOST_SINGLETON_MJM012402_HPP
diff --git a/boost/boost/thread/detail/tss_hooks.hpp b/boost/boost/thread/detail/tss_hooks.hpp
new file mode 100644
index 00000000000..a1c1aa3b496
--- /dev/null
+++ b/boost/boost/thread/detail/tss_hooks.hpp
@@ -0,0 +1,78 @@
+// (C) Copyright Michael Glassford 2004.
+// 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)
+
+#if !defined(BOOST_TLS_HOOKS_HPP)
+#define BOOST_TLS_HOOKS_HPP
+
+#include <boost/thread/detail/config.hpp>
+
+#if defined(BOOST_HAS_WINTHREADS)
+
+ typedef void (__cdecl *thread_exit_handler)(void);
+
+ extern "C" BOOST_THREAD_DECL int at_thread_exit(
+ thread_exit_handler exit_handler
+ );
+ //Add a function to the list of functions that will
+ //be called when a thread is about to exit.
+ //Currently only implemented for Win32, but should
+ //later be implemented for all platforms.
+ //Used by Win32 implementation of Boost.Threads
+ //tss to perform cleanup.
+ //Like the C runtime library atexit() function,
+ //which it mimics, at_thread_exit() returns
+ //zero if successful and a nonzero
+ //value if an error occurs.
+
+#endif //defined(BOOST_HAS_WINTHREADS)
+
+#if defined(BOOST_HAS_WINTHREADS)
+
+ extern "C" BOOST_THREAD_DECL void on_process_enter(void);
+ //Function to be called when the exe or dll
+ //that uses Boost.Threads first starts
+ //or is first loaded.
+ //Should be called only before the first call to
+ //on_thread_enter().
+ //Called automatically by Boost.Threads when
+ //a method for doing so has been discovered.
+ //May be omitted; may be called multiple times.
+
+ extern "C" BOOST_THREAD_DECL void on_process_exit(void);
+ //Function to be called when the exe or dll
+ //that uses Boost.Threads first starts
+ //or is first loaded.
+ //Should be called only after the last call to
+ //on_exit_thread().
+ //Called automatically by Boost.Threads when
+ //a method for doing so has been discovered.
+ //Must not be omitted; may be called multiple times.
+
+ extern "C" BOOST_THREAD_DECL void on_thread_enter(void);
+ //Function to be called just after a thread starts
+ //in an exe or dll that uses Boost.Threads.
+ //Must be called in the context of the thread
+ //that is starting.
+ //Called automatically by Boost.Threads when
+ //a method for doing so has been discovered.
+ //May be omitted; may be called multiple times.
+
+ extern "C" BOOST_THREAD_DECL void on_thread_exit(void);
+ //Function to be called just be fore a thread ends
+ //in an exe or dll that uses Boost.Threads.
+ //Must be called in the context of the thread
+ //that is ending.
+ //Called automatically by Boost.Threads when
+ //a method for doing so has been discovered.
+ //Must not be omitted; may be called multiple times.
+
+ extern "C" void tss_cleanup_implemented(void);
+ //Dummy function used both to detect whether tss cleanup
+ //cleanup has been implemented and to force
+ //it to be linked into the Boost.Threads library.
+
+#endif //defined(BOOST_HAS_WINTHREADS)
+
+#endif //!defined(BOOST_TLS_HOOKS_HPP)
diff --git a/boost/boost/thread/exceptions.hpp b/boost/boost/thread/exceptions.hpp
new file mode 100644
index 00000000000..9b27d31234a
--- /dev/null
+++ b/boost/boost/thread/exceptions.hpp
@@ -0,0 +1,94 @@
+// Copyright (C) 2001-2003
+// William E. Kempf
+//
+// 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_THREAD_EXCEPTIONS_PDM070801_H
+#define BOOST_THREAD_EXCEPTIONS_PDM070801_H
+
+#include <boost/thread/detail/config.hpp>
+
+// pdm: Sorry, but this class is used all over the place & I end up
+// with recursive headers if I don't separate it
+// wek: Not sure why recursive headers would cause compilation problems
+// given the include guards, but regardless it makes sense to
+// seperate this out any way.
+
+#include <string>
+#include <stdexcept>
+
+namespace boost {
+
+class BOOST_THREAD_DECL thread_exception : public std::exception
+{
+protected:
+ thread_exception();
+ thread_exception(int sys_err_code);
+
+public:
+ ~thread_exception() throw();
+
+ int native_error() const;
+
+private:
+ int m_sys_err;
+};
+
+class BOOST_THREAD_DECL lock_error : public thread_exception
+{
+public:
+ lock_error();
+ lock_error(int sys_err_code);
+ ~lock_error() throw();
+
+ virtual const char* what() const throw();
+};
+
+class BOOST_THREAD_DECL thread_resource_error : public thread_exception
+{
+public:
+ thread_resource_error();
+ thread_resource_error(int sys_err_code);
+ ~thread_resource_error() throw();
+
+ virtual const char* what() const throw();
+};
+
+class BOOST_THREAD_DECL unsupported_thread_option : public thread_exception
+{
+public:
+ unsupported_thread_option();
+ unsupported_thread_option(int sys_err_code);
+ ~unsupported_thread_option() throw();
+
+ virtual const char* what() const throw();
+};
+
+class BOOST_THREAD_DECL invalid_thread_argument : public thread_exception
+{
+public:
+ invalid_thread_argument();
+ invalid_thread_argument(int sys_err_code);
+ ~invalid_thread_argument() throw();
+
+ virtual const char* what() const throw();
+};
+
+class BOOST_THREAD_DECL thread_permission_error : public thread_exception
+{
+public:
+ thread_permission_error();
+ thread_permission_error(int sys_err_code);
+ ~thread_permission_error() throw();
+
+ virtual const char* what() const throw();
+};
+
+} // namespace boost
+
+#endif // BOOST_THREAD_CONFIG_PDM070801_H
+
+// Change log:
+// 3 Jan 03 WEKEMPF Modified for DLL implementation.
+
diff --git a/boost/boost/thread/mutex.hpp b/boost/boost/thread/mutex.hpp
new file mode 100644
index 00000000000..1b74da55202
--- /dev/null
+++ b/boost/boost/thread/mutex.hpp
@@ -0,0 +1,170 @@
+// Copyright (C) 2001-2003
+// William E. Kempf
+//
+// 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_MUTEX_WEK070601_HPP
+#define BOOST_MUTEX_WEK070601_HPP
+
+#include <boost/thread/detail/config.hpp>
+
+#include <boost/utility.hpp>
+#include <boost/thread/detail/lock.hpp>
+
+#if defined(BOOST_HAS_PTHREADS)
+# include <pthread.h>
+#endif
+
+#if defined(BOOST_HAS_MPTASKS)
+# include "scoped_critical_region.hpp"
+#endif
+
+namespace boost {
+
+struct xtime;
+// disable warnings about non dll import
+// see: http://www.boost.org/more/separate_compilation.html#dlls
+#ifdef BOOST_MSVC
+# pragma warning(push)
+# pragma warning(disable: 4251 4231 4660 4275)
+#endif
+
+class BOOST_THREAD_DECL mutex
+ : private noncopyable
+{
+public:
+ friend class detail::thread::lock_ops<mutex>;
+
+ typedef detail::thread::scoped_lock<mutex> scoped_lock;
+
+ mutex();
+ ~mutex();
+
+private:
+#if defined(BOOST_HAS_WINTHREADS)
+ typedef void* cv_state;
+#elif defined(BOOST_HAS_PTHREADS)
+ struct cv_state
+ {
+ pthread_mutex_t* pmutex;
+ };
+#elif defined(BOOST_HAS_MPTASKS)
+ struct cv_state
+ {
+ };
+#endif
+ void do_lock();
+ void do_unlock();
+ void do_lock(cv_state& state);
+ void do_unlock(cv_state& state);
+
+#if defined(BOOST_HAS_WINTHREADS)
+ void* m_mutex;
+ bool m_critical_section;
+#elif defined(BOOST_HAS_PTHREADS)
+ pthread_mutex_t m_mutex;
+#elif defined(BOOST_HAS_MPTASKS)
+ threads::mac::detail::scoped_critical_region m_mutex;
+ threads::mac::detail::scoped_critical_region m_mutex_mutex;
+#endif
+};
+
+class BOOST_THREAD_DECL try_mutex
+ : private noncopyable
+{
+public:
+ friend class detail::thread::lock_ops<try_mutex>;
+
+ typedef detail::thread::scoped_lock<try_mutex> scoped_lock;
+ typedef detail::thread::scoped_try_lock<try_mutex> scoped_try_lock;
+
+ try_mutex();
+ ~try_mutex();
+
+private:
+#if defined(BOOST_HAS_WINTHREADS)
+ typedef void* cv_state;
+#elif defined(BOOST_HAS_PTHREADS)
+ struct cv_state
+ {
+ pthread_mutex_t* pmutex;
+ };
+#elif defined(BOOST_HAS_MPTASKS)
+ struct cv_state
+ {
+ };
+#endif
+ void do_lock();
+ bool do_trylock();
+ void do_unlock();
+ void do_lock(cv_state& state);
+ void do_unlock(cv_state& state);
+
+#if defined(BOOST_HAS_WINTHREADS)
+ void* m_mutex;
+ bool m_critical_section;
+#elif defined(BOOST_HAS_PTHREADS)
+ pthread_mutex_t m_mutex;
+#elif defined(BOOST_HAS_MPTASKS)
+ threads::mac::detail::scoped_critical_region m_mutex;
+ threads::mac::detail::scoped_critical_region m_mutex_mutex;
+#endif
+};
+
+class BOOST_THREAD_DECL timed_mutex
+ : private noncopyable
+{
+public:
+ friend class detail::thread::lock_ops<timed_mutex>;
+
+ typedef detail::thread::scoped_lock<timed_mutex> scoped_lock;
+ typedef detail::thread::scoped_try_lock<timed_mutex> scoped_try_lock;
+ typedef detail::thread::scoped_timed_lock<timed_mutex> scoped_timed_lock;
+
+ timed_mutex();
+ ~timed_mutex();
+
+private:
+#if defined(BOOST_HAS_WINTHREADS)
+ typedef void* cv_state;
+#elif defined(BOOST_HAS_PTHREADS)
+ struct cv_state
+ {
+ pthread_mutex_t* pmutex;
+ };
+#elif defined(BOOST_HAS_MPTASKS)
+ struct cv_state
+ {
+ };
+#endif
+ void do_lock();
+ bool do_trylock();
+ bool do_timedlock(const xtime& xt);
+ void do_unlock();
+ void do_lock(cv_state& state);
+ void do_unlock(cv_state& state);
+
+#if defined(BOOST_HAS_WINTHREADS)
+ void* m_mutex;
+#elif defined(BOOST_HAS_PTHREADS)
+ pthread_mutex_t m_mutex;
+ pthread_cond_t m_condition;
+ bool m_locked;
+#elif defined(BOOST_HAS_MPTASKS)
+ threads::mac::detail::scoped_critical_region m_mutex;
+ threads::mac::detail::scoped_critical_region m_mutex_mutex;
+#endif
+};
+#ifdef BOOST_MSVC
+# pragma warning(pop)
+#endif
+} // namespace boost
+
+// Change Log:
+// 8 Feb 01 WEKEMPF Initial version.
+// 22 May 01 WEKEMPF Modified to use xtime for time outs. Factored out
+// to three classes, mutex, try_mutex and timed_mutex.
+// 3 Jan 03 WEKEMPF Modified for DLL implementation.
+
+#endif // BOOST_MUTEX_WEK070601_HPP
diff --git a/boost/boost/thread/once.hpp b/boost/boost/thread/once.hpp
new file mode 100644
index 00000000000..286465c6633
--- /dev/null
+++ b/boost/boost/thread/once.hpp
@@ -0,0 +1,37 @@
+// Copyright (C) 2001-2003
+// William E. Kempf
+//
+// 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_ONCE_WEK080101_HPP
+#define BOOST_ONCE_WEK080101_HPP
+
+#include <boost/thread/detail/config.hpp>
+
+#if defined(BOOST_HAS_PTHREADS)
+# include <pthread.h>
+#endif
+
+namespace boost {
+
+#if defined(BOOST_HAS_PTHREADS)
+
+typedef pthread_once_t once_flag;
+#define BOOST_ONCE_INIT PTHREAD_ONCE_INIT
+
+#elif (defined(BOOST_HAS_WINTHREADS) || defined(BOOST_HAS_MPTASKS))
+
+typedef long once_flag;
+#define BOOST_ONCE_INIT 0
+
+#endif
+
+void BOOST_THREAD_DECL call_once(void (*func)(), once_flag& flag);
+
+} // namespace boost
+
+// Change Log:
+// 1 Aug 01 WEKEMPF Initial version.
+
+#endif // BOOST_ONCE_WEK080101_HPP
diff --git a/boost/boost/thread/recursive_mutex.hpp b/boost/boost/thread/recursive_mutex.hpp
new file mode 100644
index 00000000000..a7efa48fd38
--- /dev/null
+++ b/boost/boost/thread/recursive_mutex.hpp
@@ -0,0 +1,184 @@
+// Copyright (C) 2001-2003
+// William E. Kempf
+//
+// 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_RECURSIVE_MUTEX_WEK070601_HPP
+#define BOOST_RECURSIVE_MUTEX_WEK070601_HPP
+
+#include <boost/thread/detail/config.hpp>
+
+#include <boost/utility.hpp>
+#include <boost/thread/detail/lock.hpp>
+
+#if defined(BOOST_HAS_PTHREADS)
+# include <pthread.h>
+#endif
+
+#if defined(BOOST_HAS_MPTASKS)
+# include "scoped_critical_region.hpp"
+#endif
+
+namespace boost {
+
+struct xtime;
+// disable warnings about non dll import
+// see: http://www.boost.org/more/separate_compilation.html#dlls
+#ifdef BOOST_MSVC
+# pragma warning(push)
+# pragma warning(disable: 4251 4231 4660 4275)
+#endif
+class BOOST_THREAD_DECL recursive_mutex
+ : private noncopyable
+{
+public:
+ friend class detail::thread::lock_ops<recursive_mutex>;
+
+ typedef detail::thread::scoped_lock<recursive_mutex> scoped_lock;
+
+ recursive_mutex();
+ ~recursive_mutex();
+
+private:
+#if (defined(BOOST_HAS_WINTHREADS) || defined(BOOST_HAS_MPTASKS))
+ typedef std::size_t cv_state;
+#elif defined(BOOST_HAS_PTHREADS)
+ struct cv_state
+ {
+ long count;
+ pthread_mutex_t* pmutex;
+ };
+#endif
+ void do_lock();
+ void do_unlock();
+ void do_lock(cv_state& state);
+ void do_unlock(cv_state& state);
+
+#if defined(BOOST_HAS_WINTHREADS)
+ void* m_mutex;
+ bool m_critical_section;
+ unsigned long m_count;
+#elif defined(BOOST_HAS_PTHREADS)
+ pthread_mutex_t m_mutex;
+ unsigned m_count;
+# if !defined(BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE)
+ pthread_cond_t m_unlocked;
+ pthread_t m_thread_id;
+ bool m_valid_id;
+# endif
+#elif defined(BOOST_HAS_MPTASKS)
+ threads::mac::detail::scoped_critical_region m_mutex;
+ threads::mac::detail::scoped_critical_region m_mutex_mutex;
+ std::size_t m_count;
+#endif
+};
+
+class BOOST_THREAD_DECL recursive_try_mutex
+ : private noncopyable
+{
+public:
+ friend class detail::thread::lock_ops<recursive_try_mutex>;
+
+ typedef detail::thread::scoped_lock<recursive_try_mutex> scoped_lock;
+ typedef detail::thread::scoped_try_lock<
+ recursive_try_mutex> scoped_try_lock;
+
+ recursive_try_mutex();
+ ~recursive_try_mutex();
+
+private:
+#if (defined(BOOST_HAS_WINTHREADS) || defined(BOOST_HAS_MPTASKS))
+ typedef std::size_t cv_state;
+#elif defined(BOOST_HAS_PTHREADS)
+ struct cv_state
+ {
+ long count;
+ pthread_mutex_t* pmutex;
+ };
+#endif
+ void do_lock();
+ bool do_trylock();
+ void do_unlock();
+ void do_lock(cv_state& state);
+ void do_unlock(cv_state& state);
+
+#if defined(BOOST_HAS_WINTHREADS)
+ void* m_mutex;
+ bool m_critical_section;
+ unsigned long m_count;
+#elif defined(BOOST_HAS_PTHREADS)
+ pthread_mutex_t m_mutex;
+ unsigned m_count;
+# if !defined(BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE)
+ pthread_cond_t m_unlocked;
+ pthread_t m_thread_id;
+ bool m_valid_id;
+# endif
+#elif defined(BOOST_HAS_MPTASKS)
+ threads::mac::detail::scoped_critical_region m_mutex;
+ threads::mac::detail::scoped_critical_region m_mutex_mutex;
+ std::size_t m_count;
+#endif
+};
+
+class BOOST_THREAD_DECL recursive_timed_mutex
+ : private noncopyable
+{
+public:
+ friend class detail::thread::lock_ops<recursive_timed_mutex>;
+
+ typedef detail::thread::scoped_lock<recursive_timed_mutex> scoped_lock;
+ typedef detail::thread::scoped_try_lock<
+ recursive_timed_mutex> scoped_try_lock;
+ typedef detail::thread::scoped_timed_lock<
+ recursive_timed_mutex> scoped_timed_lock;
+
+ recursive_timed_mutex();
+ ~recursive_timed_mutex();
+
+private:
+#if (defined(BOOST_HAS_WINTHREADS) || defined(BOOST_HAS_MPTASKS))
+ typedef std::size_t cv_state;
+#elif defined(BOOST_HAS_PTHREADS)
+ struct cv_state
+ {
+ long count;
+ pthread_mutex_t* pmutex;
+ };
+#endif
+ void do_lock();
+ bool do_trylock();
+ bool do_timedlock(const xtime& xt);
+ void do_unlock();
+ void do_lock(cv_state& state);
+ void do_unlock(cv_state& state);
+
+#if defined(BOOST_HAS_WINTHREADS)
+ void* m_mutex;
+ unsigned long m_count;
+#elif defined(BOOST_HAS_PTHREADS)
+ pthread_mutex_t m_mutex;
+ pthread_cond_t m_unlocked;
+ pthread_t m_thread_id;
+ bool m_valid_id;
+ unsigned m_count;
+#elif defined(BOOST_HAS_MPTASKS)
+ threads::mac::detail::scoped_critical_region m_mutex;
+ threads::mac::detail::scoped_critical_region m_mutex_mutex;
+ std::size_t m_count;
+#endif
+};
+#ifdef BOOST_MSVC
+# pragma warning(pop)
+#endif
+} // namespace boost
+
+#endif // BOOST_RECURSIVE_MUTEX_WEK070601_HPP
+
+// Change Log:
+// 8 Feb 01 WEKEMPF Initial version.
+// 1 Jun 01 WEKEMPF Modified to use xtime for time outs. Factored out
+// to three classes, mutex, try_mutex and timed_mutex.
+// 11 Jun 01 WEKEMPF Modified to use PTHREAD_MUTEX_RECURSIVE if available.
+// 3 Jan 03 WEKEMPF Modified for DLL implementation.
diff --git a/boost/boost/thread/thread.hpp b/boost/boost/thread/thread.hpp
new file mode 100644
index 00000000000..6ab1cfc28de
--- /dev/null
+++ b/boost/boost/thread/thread.hpp
@@ -0,0 +1,89 @@
+// Copyright (C) 2001-2003
+// William E. Kempf
+//
+// 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_THREAD_WEK070601_HPP
+#define BOOST_THREAD_WEK070601_HPP
+
+#include <boost/thread/detail/config.hpp>
+
+#include <boost/utility.hpp>
+#include <boost/function.hpp>
+#include <boost/thread/mutex.hpp>
+#include <list>
+#include <memory>
+
+#if defined(BOOST_HAS_PTHREADS)
+# include <pthread.h>
+# include <boost/thread/condition.hpp>
+#elif defined(BOOST_HAS_MPTASKS)
+# include <Multiprocessing.h>
+#endif
+
+namespace boost {
+
+struct xtime;
+// disable warnings about non dll import
+// see: http://www.boost.org/more/separate_compilation.html#dlls
+#ifdef BOOST_MSVC
+# pragma warning(push)
+# pragma warning(disable: 4251 4231 4660 4275)
+#endif
+class BOOST_THREAD_DECL thread : private noncopyable
+{
+public:
+ thread();
+ explicit thread(const function0<void>& threadfunc);
+ ~thread();
+
+ bool operator==(const thread& other) const;
+ bool operator!=(const thread& other) const;
+
+ void join();
+
+ static void sleep(const xtime& xt);
+ static void yield();
+
+private:
+#if defined(BOOST_HAS_WINTHREADS)
+ void* m_thread;
+ unsigned int m_id;
+#elif defined(BOOST_HAS_PTHREADS)
+private:
+ pthread_t m_thread;
+#elif defined(BOOST_HAS_MPTASKS)
+ MPQueueID m_pJoinQueueID;
+ MPTaskID m_pTaskID;
+#endif
+ bool m_joinable;
+};
+
+class BOOST_THREAD_DECL thread_group : private noncopyable
+{
+public:
+ thread_group();
+ ~thread_group();
+
+ thread* create_thread(const function0<void>& threadfunc);
+ void add_thread(thread* thrd);
+ void remove_thread(thread* thrd);
+ void join_all();
+ int size();
+
+private:
+ std::list<thread*> m_threads;
+ mutex m_mutex;
+};
+#ifdef BOOST_MSVC
+# pragma warning(pop)
+#endif
+} // namespace boost
+
+// Change Log:
+// 8 Feb 01 WEKEMPF Initial version.
+// 1 Jun 01 WEKEMPF Added boost::thread initial implementation.
+// 3 Jul 01 WEKEMPF Redesigned boost::thread to be noncopyable.
+
+#endif // BOOST_THREAD_WEK070601_HPP
diff --git a/boost/boost/thread/tss.hpp b/boost/boost/thread/tss.hpp
new file mode 100644
index 00000000000..0b33bda4b5a
--- /dev/null
+++ b/boost/boost/thread/tss.hpp
@@ -0,0 +1,128 @@
+// Copyright (C) 2001-2003 William E. Kempf
+// Copyright (C) 2006 Roland Schwarz
+//
+// 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_TSS_WEK070601_HPP
+#define BOOST_TSS_WEK070601_HPP
+
+#include <boost/thread/detail/config.hpp>
+
+#include <boost/utility.hpp>
+#include <boost/function.hpp>
+#include <boost/thread/exceptions.hpp>
+
+#if defined(BOOST_HAS_PTHREADS)
+# include <pthread.h>
+#elif defined(BOOST_HAS_MPTASKS)
+# include <Multiprocessing.h>
+#endif
+
+namespace boost {
+
+// disable warnings about non dll import
+// see: http://www.boost.org/more/separate_compilation.html#dlls
+#ifdef BOOST_MSVC
+# pragma warning(push)
+# pragma warning(disable: 4251 4231 4660 4275)
+#endif
+
+namespace detail {
+
+class BOOST_THREAD_DECL tss : private noncopyable
+{
+public:
+ tss(boost::function1<void, void*>* pcleanup) {
+ if (pcleanup == 0) throw boost::thread_resource_error();
+ try
+ {
+ init(pcleanup);
+ }
+ catch (...)
+ {
+ delete pcleanup;
+ throw boost::thread_resource_error();
+ }
+ }
+
+ ~tss();
+ void* get() const;
+ void set(void* value);
+ void cleanup(void* p);
+
+private:
+ unsigned int m_slot; //This is a "pseudo-slot", not a native slot
+
+ void init(boost::function1<void, void*>* pcleanup);
+};
+
+#if defined(BOOST_HAS_MPTASKS)
+void thread_cleanup();
+#endif
+
+template <typename T>
+struct tss_adapter
+{
+ template <typename F>
+ tss_adapter(const F& cleanup) : m_cleanup(cleanup) { }
+ void operator()(void* p) { m_cleanup(static_cast<T*>(p)); }
+ boost::function1<void, T*> m_cleanup;
+};
+
+} // namespace detail
+
+template <typename T>
+class thread_specific_ptr : private noncopyable
+{
+public:
+ thread_specific_ptr()
+ : m_tss(new boost::function1<void, void*>(
+ boost::detail::tss_adapter<T>(
+ &thread_specific_ptr<T>::cleanup)))
+ {
+ }
+ thread_specific_ptr(void (*clean)(T*))
+ : m_tss(new boost::function1<void, void*>(
+ boost::detail::tss_adapter<T>(clean)))
+ {
+ }
+ ~thread_specific_ptr() { reset(); }
+
+ T* get() const { return static_cast<T*>(m_tss.get()); }
+ T* operator->() const { return get(); }
+ T& operator*() const { return *get(); }
+ T* release() { T* temp = get(); if (temp) m_tss.set(0); return temp; }
+ void reset(T* p=0)
+ {
+ T* cur = get();
+ if (cur == p) return;
+ m_tss.set(p);
+ if (cur) m_tss.cleanup(cur);
+ }
+
+private:
+ static void cleanup(T* p) { delete p; }
+ detail::tss m_tss;
+};
+
+#ifdef BOOST_MSVC
+# pragma warning(pop)
+#endif
+
+} // namespace boost
+
+#endif //BOOST_TSS_WEK070601_HPP
+
+// Change Log:
+// 6 Jun 01
+// WEKEMPF Initial version.
+// 30 May 02 WEKEMPF
+// Added interface to set specific cleanup handlers.
+// Removed TLS slot limits from most implementations.
+// 22 Mar 04 GlassfordM for WEKEMPF
+// Fixed: thread_specific_ptr::reset() doesn't check error returned
+// by tss::set(); tss::set() now throws if it fails.
+// Fixed: calling thread_specific_ptr::reset() or
+// thread_specific_ptr::release() causes double-delete: once on
+// reset()/release() and once on ~thread_specific_ptr().
diff --git a/boost/boost/thread/xtime.hpp b/boost/boost/thread/xtime.hpp
new file mode 100644
index 00000000000..5f66c6292df
--- /dev/null
+++ b/boost/boost/thread/xtime.hpp
@@ -0,0 +1,54 @@
+// Copyright (C) 2001-2003
+// William E. Kempf
+//
+// 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_XTIME_WEK070601_HPP
+#define BOOST_XTIME_WEK070601_HPP
+
+#include <boost/thread/detail/config.hpp>
+
+#include <boost/cstdint.hpp>
+
+namespace boost {
+
+enum xtime_clock_types
+{
+ TIME_UTC=1
+// TIME_TAI,
+// TIME_MONOTONIC,
+// TIME_PROCESS,
+// TIME_THREAD,
+// TIME_LOCAL,
+// TIME_SYNC,
+// TIME_RESOLUTION
+};
+
+struct xtime
+{
+#if defined(BOOST_NO_INT64_T)
+ typedef int_fast32_t xtime_sec_t; //INT_FAST32_MIN <= sec <= INT_FAST32_MAX
+#else
+ typedef int_fast64_t xtime_sec_t; //INT_FAST64_MIN <= sec <= INT_FAST64_MAX
+#endif
+
+ typedef int_fast32_t xtime_nsec_t; //0 <= xtime.nsec < NANOSECONDS_PER_SECOND
+
+ xtime_sec_t sec;
+ xtime_nsec_t nsec;
+};
+
+int BOOST_THREAD_DECL xtime_get(struct xtime* xtp, int clock_type);
+
+inline int xtime_cmp(const xtime& xt1, const xtime& xt2)
+{
+ if (xt1.sec == xt2.sec)
+ return (int)(xt1.nsec - xt2.nsec);
+ else
+ return (xt1.sec > xt2.sec) ? 1 : -1;
+}
+
+} // namespace boost
+
+#endif //BOOST_XTIME_WEK070601_HPP
diff --git a/boost/boost/throw_exception.hpp b/boost/boost/throw_exception.hpp
new file mode 100644
index 00000000000..bb79a37d8af
--- /dev/null
+++ b/boost/boost/throw_exception.hpp
@@ -0,0 +1,46 @@
+#ifndef BOOST_THROW_EXCEPTION_HPP_INCLUDED
+#define BOOST_THROW_EXCEPTION_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+// boost/throw_exception.hpp
+//
+// Copyright (c) 2002 Peter Dimov and Multi Media Ltd.
+//
+// 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)
+//
+// http://www.boost.org/libs/utility/throw_exception.html
+//
+
+#include <boost/config.hpp>
+
+#ifdef BOOST_NO_EXCEPTIONS
+# include <exception>
+#endif
+
+namespace boost
+{
+
+#ifdef BOOST_NO_EXCEPTIONS
+
+void throw_exception(std::exception const & e); // user defined
+
+#else
+
+template<class E> inline void throw_exception(E const & e)
+{
+ throw e;
+}
+
+#endif
+
+} // namespace boost
+
+#endif // #ifndef BOOST_THROW_EXCEPTION_HPP_INCLUDED
diff --git a/boost/boost/timer.hpp b/boost/boost/timer.hpp
new file mode 100644
index 00000000000..1e3571e4177
--- /dev/null
+++ b/boost/boost/timer.hpp
@@ -0,0 +1,72 @@
+// boost timer.hpp header file ---------------------------------------------//
+
+// Copyright Beman Dawes 1994-99. 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/timer for documentation.
+
+// Revision History
+// 01 Apr 01 Modified to use new <boost/limits.hpp> header. (JMaddock)
+// 12 Jan 01 Change to inline implementation to allow use without library
+// builds. See docs for more rationale. (Beman Dawes)
+// 25 Sep 99 elapsed_max() and elapsed_min() added (John Maddock)
+// 16 Jul 99 Second beta
+// 6 Jul 99 Initial boost version
+
+#ifndef BOOST_TIMER_HPP
+#define BOOST_TIMER_HPP
+
+#include <boost/config.hpp>
+#include <ctime>
+#include <boost/limits.hpp>
+
+# ifdef BOOST_NO_STDC_NAMESPACE
+ namespace std { using ::clock_t; using ::clock; }
+# endif
+
+
+namespace boost {
+
+// timer -------------------------------------------------------------------//
+
+// A timer object measures elapsed time.
+
+// It is recommended that implementations measure wall clock rather than CPU
+// time since the intended use is performance measurement on systems where
+// total elapsed time is more important than just process or CPU time.
+
+// Warnings: The maximum measurable elapsed time may well be only 596.5+ hours
+// due to implementation limitations. The accuracy of timings depends on the
+// accuracy of timing information provided by the underlying platform, and
+// this varies a great deal from platform to platform.
+
+class timer
+{
+ public:
+ timer() { _start_time = std::clock(); } // postcondition: elapsed()==0
+// timer( const timer& src ); // post: elapsed()==src.elapsed()
+// ~timer(){}
+// timer& operator=( const timer& src ); // post: elapsed()==src.elapsed()
+ void restart() { _start_time = std::clock(); } // post: elapsed()==0
+ double elapsed() const // return elapsed time in seconds
+ { return double(std::clock() - _start_time) / CLOCKS_PER_SEC; }
+
+ double elapsed_max() const // return estimated maximum value for elapsed()
+ // Portability warning: elapsed_max() may return too high a value on systems
+ // where std::clock_t overflows or resets at surprising values.
+ {
+ return (double((std::numeric_limits<std::clock_t>::max)())
+ - double(_start_time)) / double(CLOCKS_PER_SEC);
+ }
+
+ double elapsed_min() const // return minimum value for elapsed()
+ { return double(1)/double(CLOCKS_PER_SEC); }
+
+ private:
+ std::clock_t _start_time;
+}; // timer
+
+} // namespace boost
+
+#endif // BOOST_TIMER_HPP
diff --git a/boost/boost/token_functions.hpp b/boost/boost/token_functions.hpp
new file mode 100644
index 00000000000..ecf44cb9c56
--- /dev/null
+++ b/boost/boost/token_functions.hpp
@@ -0,0 +1,615 @@
+// Boost token_functions.hpp ------------------------------------------------//
+
+// Copyright John R. Bandela 2001.
+
+// 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/tokenizer/ for documentation.
+
+// Revision History:
+// 01 Oct 2004 Joaquín M López Muñoz
+// Workaround for a problem with string::assign in msvc-stlport
+// 06 Apr 2004 John Bandela
+// Fixed a bug involving using char_delimiter with a true input iterator
+// 28 Nov 2003 Robert Zeh and John Bandela
+// Converted into "fast" functions that avoid using += when
+// the supplied iterator isn't an input_iterator; based on
+// some work done at Archelon and a version that was checked into
+// the boost CVS for a short period of time.
+// 20 Feb 2002 John Maddock
+// Removed using namespace std declarations and added
+// workaround for BOOST_NO_STDC_NAMESPACE (the library
+// can be safely mixed with regex).
+// 06 Feb 2002 Jeremy Siek
+// Added char_separator.
+// 02 Feb 2002 Jeremy Siek
+// Removed tabs and a little cleanup.
+
+
+#ifndef BOOST_TOKEN_FUNCTIONS_JRB120303_HPP_
+#define BOOST_TOKEN_FUNCTIONS_JRB120303_HPP_
+
+#include <vector>
+#include <stdexcept>
+#include <string>
+#include <cctype>
+#include <algorithm> // for find_if
+#include <boost/config.hpp>
+#include <boost/assert.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/mpl/if.hpp>
+
+//
+// the following must not be macros if we are to prefix them
+// with std:: (they shouldn't be macros anyway...)
+//
+#ifdef ispunct
+# undef ispunct
+#endif
+#ifdef isspace
+# undef isspace
+#endif
+//
+// fix namespace problems:
+//
+#ifdef BOOST_NO_STDC_NAMESPACE
+namespace std{
+ using ::ispunct;
+ using ::isspace;
+}
+#endif
+
+namespace boost{
+
+ //===========================================================================
+ // The escaped_list_separator class. Which is a model of TokenizerFunction
+ // An escaped list is a super-set of what is commonly known as a comma
+ // separated value (csv) list.It is separated into fields by a comma or
+ // other character. If the delimiting character is inside quotes, then it is
+ // counted as a regular character.To allow for embedded quotes in a field,
+ // there can be escape sequences using the \ much like C.
+ // The role of the comma, the quotation mark, and the escape
+ // character (backslash \), can be assigned to other characters.
+
+ struct escaped_list_error : public std::runtime_error{
+ escaped_list_error(const std::string& what_arg):std::runtime_error(what_arg) { }
+ };
+
+
+// The out of the box GCC 2.95 on cygwin does not have a char_traits class.
+// MSVC does not like the following typename
+#if !defined(BOOST_MSVC) || BOOST_MSVC > 1300
+ template <class Char,
+ class Traits = typename std::basic_string<Char>::traits_type >
+#else
+ template <class Char,
+ class Traits = std::basic_string<Char>::traits_type >
+#endif
+ class escaped_list_separator {
+
+ private:
+ typedef std::basic_string<Char,Traits> string_type;
+ struct char_eq {
+ Char e_;
+ char_eq(Char e):e_(e) { }
+ bool operator()(Char c) {
+ return Traits::eq(e_,c);
+ }
+ };
+ string_type escape_;
+ string_type c_;
+ string_type quote_;
+ bool last_;
+
+ bool is_escape(Char e) {
+ char_eq f(e);
+ return std::find_if(escape_.begin(),escape_.end(),f)!=escape_.end();
+ }
+ bool is_c(Char e) {
+ char_eq f(e);
+ return std::find_if(c_.begin(),c_.end(),f)!=c_.end();
+ }
+ bool is_quote(Char e) {
+ char_eq f(e);
+ return std::find_if(quote_.begin(),quote_.end(),f)!=quote_.end();
+ }
+ template <typename iterator, typename Token>
+ void do_escape(iterator& next,iterator end,Token& tok) {
+ if (++next == end)
+ throw escaped_list_error(std::string("cannot end with escape"));
+ if (Traits::eq(*next,'n')) {
+ tok+='\n';
+ return;
+ }
+ else if (is_quote(*next)) {
+ tok+=*next;
+ return;
+ }
+ else if (is_c(*next)) {
+ tok+=*next;
+ return;
+ }
+ else if (is_escape(*next)) {
+ tok+=*next;
+ return;
+ }
+ else
+ throw escaped_list_error(std::string("unknown escape sequence"));
+ }
+
+ public:
+
+ explicit escaped_list_separator(Char e = '\\',
+ Char c = ',',Char q = '\"')
+ : escape_(1,e), c_(1,c), quote_(1,q), last_(false) { }
+
+ escaped_list_separator(string_type e, string_type c, string_type q)
+ : escape_(e), c_(c), quote_(q), last_(false) { }
+
+ void reset() {last_=false;}
+
+ template <typename InputIterator, typename Token>
+ bool operator()(InputIterator& next,InputIterator end,Token& tok) {
+ bool bInQuote = false;
+ tok = Token();
+
+ if (next == end) {
+ if (last_) {
+ last_ = false;
+ return true;
+ }
+ else
+ return false;
+ }
+ last_ = false;
+ for (;next != end;++next) {
+ if (is_escape(*next)) {
+ do_escape(next,end,tok);
+ }
+ else if (is_c(*next)) {
+ if (!bInQuote) {
+ // If we are not in quote, then we are done
+ ++next;
+ // The last character was a c, that means there is
+ // 1 more blank field
+ last_ = true;
+ return true;
+ }
+ else tok+=*next;
+ }
+ else if (is_quote(*next)) {
+ bInQuote=!bInQuote;
+ }
+ else {
+ tok += *next;
+ }
+ }
+ return true;
+ }
+ };
+
+ //===========================================================================
+ // The classes here are used by offset_separator and char_separator to implement
+ // faster assigning of tokens using assign instead of +=
+
+ namespace tokenizer_detail {
+
+ // The assign_or_plus_equal struct contains functions that implement
+ // assign, +=, and clearing based on the iterator type. The
+ // generic case does nothing for plus_equal and clearing, while
+ // passing through the call for assign.
+ //
+ // When an input iterator is being used, the situation is reversed.
+ // The assign method does nothing, plus_equal invokes operator +=,
+ // and the clearing method sets the supplied token to the default
+ // token constructor's result.
+ //
+
+ template<class IteratorTag>
+ struct assign_or_plus_equal {
+ template<class Iterator, class Token>
+ static void assign(Iterator b, Iterator e, Token &t) {
+
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) &&\
+ BOOST_WORKAROUND(__SGI_STL_PORT, < 0x500) &&\
+ defined(_STLP_DEBUG) &&\
+ (defined(_STLP_USE_DYNAMIC_LIB) || defined(_DLL))
+ // Problem with string::assign for msvc-stlport in debug mode: the
+ // linker tries to import the templatized version of this memfun,
+ // which is obviously not exported.
+ // See http://www.stlport.com/dcforum/DCForumID6/1763.html for details.
+
+ t = Token();
+ while(b != e) t += *b++;
+#else
+ t.assign(b, e);
+#endif
+
+ }
+
+ template<class Token, class Value>
+ static void plus_equal(Token &, const Value &) {
+
+ }
+
+ // If we are doing an assign, there is no need for the
+ // the clear.
+ //
+ template<class Token>
+ static void clear(Token &) {
+
+ }
+ };
+
+ template <>
+ struct assign_or_plus_equal<std::input_iterator_tag> {
+ template<class Iterator, class Token>
+ static void assign(Iterator b, Iterator e, Token &t) {
+
+ }
+ template<class Token, class Value>
+ static void plus_equal(Token &t, const Value &v) {
+ t += v;
+ }
+ template<class Token>
+ static void clear(Token &t) {
+ t = Token();
+ }
+ };
+
+
+ template<class Iterator>
+ struct pointer_iterator_category{
+ typedef std::random_access_iterator_tag type;
+ };
+
+
+ template<class Iterator>
+ struct class_iterator_category{
+ typedef typename Iterator::iterator_category type;
+ };
+
+
+
+ // This portably gets the iterator_tag without partial template specialization
+ template<class Iterator>
+ struct get_iterator_category{
+ typedef typename mpl::if_<is_pointer<Iterator>,
+ pointer_iterator_category<Iterator>,
+ class_iterator_category<Iterator>
+ >::type cat;
+
+ typedef typename cat::type iterator_category;
+ };
+
+
+}
+
+
+ //===========================================================================
+ // The offset_separator class, which is a model of TokenizerFunction.
+ // Offset breaks a string into tokens based on a range of offsets
+
+ class offset_separator {
+ private:
+
+ std::vector<int> offsets_;
+ unsigned int current_offset_;
+ bool wrap_offsets_;
+ bool return_partial_last_;
+
+ public:
+ template <typename Iter>
+ offset_separator(Iter begin, Iter end, bool wrap_offsets = true,
+ bool return_partial_last = true)
+ : offsets_(begin,end), current_offset_(0),
+ wrap_offsets_(wrap_offsets),
+ return_partial_last_(return_partial_last) { }
+
+ offset_separator()
+ : offsets_(1,1), current_offset_(),
+ wrap_offsets_(true), return_partial_last_(true) { }
+
+ void reset() {
+ current_offset_ = 0;
+ }
+
+ template <typename InputIterator, typename Token>
+ bool operator()(InputIterator& next, InputIterator end, Token& tok)
+ {
+ typedef tokenizer_detail::assign_or_plus_equal<
+#if !defined(BOOST_MSVC) || BOOST_MSVC > 1300
+ typename
+#endif
+ tokenizer_detail::get_iterator_category<
+ InputIterator>::iterator_category> assigner;
+
+
+ BOOST_ASSERT(!offsets_.empty());
+
+ assigner::clear(tok);
+ InputIterator start(next);
+
+ if (next == end)
+ return false;
+
+ if (current_offset_ == offsets_.size())
+ if (wrap_offsets_)
+ current_offset_=0;
+ else
+ return false;
+
+ int c = offsets_[current_offset_];
+ int i = 0;
+ for (; i < c; ++i) {
+ if (next == end)break;
+ assigner::plus_equal(tok,*next++);
+ }
+ assigner::assign(start,next,tok);
+
+ if (!return_partial_last_)
+ if (i < (c-1) )
+ return false;
+
+ ++current_offset_;
+ return true;
+ }
+ };
+
+
+ //===========================================================================
+ // The char_separator class breaks a sequence of characters into
+ // tokens based on the character delimiters (very much like bad old
+ // strtok). A delimiter character can either be kept or dropped. A
+ // kept delimiter shows up as an output token, whereas a dropped
+ // delimiter does not.
+
+ // This class replaces the char_delimiters_separator class. The
+ // constructor for the char_delimiters_separator class was too
+ // confusing and needed to be deprecated. However, because of the
+ // default arguments to the constructor, adding the new constructor
+ // would cause ambiguity, so instead I deprecated the whole class.
+ // The implementation of the class was also simplified considerably.
+
+ enum empty_token_policy { drop_empty_tokens, keep_empty_tokens };
+
+ // The out of the box GCC 2.95 on cygwin does not have a char_traits class.
+#if !defined(BOOST_MSVC) || BOOST_MSVC > 1300
+ template <typename Char,
+ typename Traits = typename std::basic_string<Char>::traits_type >
+#else
+ template <typename Char,
+ typename Traits = std::basic_string<Char>::traits_type >
+#endif
+ class char_separator
+ {
+ typedef std::basic_string<Char,Traits> string_type;
+ public:
+ explicit
+ char_separator(const Char* dropped_delims,
+ const Char* kept_delims = 0,
+ empty_token_policy empty_tokens = drop_empty_tokens)
+ : m_dropped_delims(dropped_delims),
+ m_use_ispunct(false),
+ m_use_isspace(false),
+ m_empty_tokens(empty_tokens),
+ m_output_done(false)
+ {
+ // Borland workaround
+ if (kept_delims)
+ m_kept_delims = kept_delims;
+ }
+
+ // use ispunct() for kept delimiters and isspace for dropped.
+ explicit
+ char_separator()
+ : m_use_ispunct(true),
+ m_use_isspace(true),
+ m_empty_tokens(drop_empty_tokens) { }
+
+ void reset() { }
+
+ template <typename InputIterator, typename Token>
+ bool operator()(InputIterator& next, InputIterator end, Token& tok)
+ {
+ typedef tokenizer_detail::assign_or_plus_equal<
+#if !defined(BOOST_MSVC) || BOOST_MSVC > 1300
+ typename
+#endif
+ tokenizer_detail::get_iterator_category<
+ InputIterator>::iterator_category> assigner;
+
+ assigner::clear(tok);
+
+ // skip past all dropped_delims
+ if (m_empty_tokens == drop_empty_tokens)
+ for (; next != end && is_dropped(*next); ++next)
+ { }
+
+ InputIterator start(next);
+
+ if (m_empty_tokens == drop_empty_tokens) {
+
+ if (next == end)
+ return false;
+
+
+ // if we are on a kept_delims move past it and stop
+ if (is_kept(*next)) {
+ assigner::plus_equal(tok,*next);
+ ++next;
+ } else
+ // append all the non delim characters
+ for (; next != end && !is_dropped(*next) && !is_kept(*next); ++next)
+ assigner::plus_equal(tok,*next);
+ }
+ else { // m_empty_tokens == keep_empty_tokens
+
+ // Handle empty token at the end
+ if (next == end)
+ if (m_output_done == false) {
+ m_output_done = true;
+ assigner::assign(start,next,tok);
+ return true;
+ } else
+ return false;
+
+ if (is_kept(*next)) {
+ if (m_output_done == false)
+ m_output_done = true;
+ else {
+ assigner::plus_equal(tok,*next);
+ ++next;
+ m_output_done = false;
+ }
+ }
+ else if (m_output_done == false && is_dropped(*next)) {
+ m_output_done = true;
+ }
+ else {
+ if (is_dropped(*next))
+ start=++next;
+ for (; next != end && !is_dropped(*next) && !is_kept(*next); ++next)
+ assigner::plus_equal(tok,*next);
+ m_output_done = true;
+ }
+ }
+ assigner::assign(start,next,tok);
+ return true;
+ }
+
+ private:
+ string_type m_kept_delims;
+ string_type m_dropped_delims;
+ bool m_use_ispunct;
+ bool m_use_isspace;
+ empty_token_policy m_empty_tokens;
+ bool m_output_done;
+
+ bool is_kept(Char E) const
+ {
+ if (m_kept_delims.length())
+ return m_kept_delims.find(E) != string_type::npos;
+ else if (m_use_ispunct) {
+ return std::ispunct(E) != 0;
+ } else
+ return false;
+ }
+ bool is_dropped(Char E) const
+ {
+ if (m_dropped_delims.length())
+ return m_dropped_delims.find(E) != string_type::npos;
+ else if (m_use_isspace) {
+ return std::isspace(E) != 0;
+ } else
+ return false;
+ }
+ };
+
+ //===========================================================================
+ // The following class is DEPRECATED, use class char_separators instead.
+ //
+ // The char_delimiters_separator class, which is a model of
+ // TokenizerFunction. char_delimiters_separator breaks a string
+ // into tokens based on character delimiters. There are 2 types of
+ // delimiters. returnable delimiters can be returned as
+ // tokens. These are often punctuation. nonreturnable delimiters
+ // cannot be returned as tokens. These are often whitespace
+
+ // The out of the box GCC 2.95 on cygwin does not have a char_traits class.
+#if !defined(BOOST_MSVC) || BOOST_MSVC > 1300
+ template <class Char,
+ class Traits = typename std::basic_string<Char>::traits_type >
+#else
+ template <class Char,
+ class Traits = std::basic_string<Char>::traits_type >
+#endif
+ class char_delimiters_separator {
+ private:
+
+ typedef std::basic_string<Char,Traits> string_type;
+ string_type returnable_;
+ string_type nonreturnable_;
+ bool return_delims_;
+ bool no_ispunct_;
+ bool no_isspace_;
+
+ bool is_ret(Char E)const
+ {
+ if (returnable_.length())
+ return returnable_.find(E) != string_type::npos;
+ else{
+ if (no_ispunct_) {return false;}
+ else{
+ int r = std::ispunct(E);
+ return r != 0;
+ }
+ }
+ }
+ bool is_nonret(Char E)const
+ {
+ if (nonreturnable_.length())
+ return nonreturnable_.find(E) != string_type::npos;
+ else{
+ if (no_isspace_) {return false;}
+ else{
+ int r = std::isspace(E);
+ return r != 0;
+ }
+ }
+ }
+
+ public:
+ explicit char_delimiters_separator(bool return_delims = false,
+ const Char* returnable = 0,
+ const Char* nonreturnable = 0)
+ : returnable_(returnable ? returnable : string_type().c_str()),
+ nonreturnable_(nonreturnable ? nonreturnable:string_type().c_str()),
+ return_delims_(return_delims), no_ispunct_(returnable!=0),
+ no_isspace_(nonreturnable!=0) { }
+
+ void reset() { }
+
+ public:
+
+ template <typename InputIterator, typename Token>
+ bool operator()(InputIterator& next, InputIterator end,Token& tok) {
+ tok = Token();
+
+ // skip past all nonreturnable delims
+ // skip past the returnable only if we are not returning delims
+ for (;next!=end && ( is_nonret(*next) || (is_ret(*next)
+ && !return_delims_ ) );++next) { }
+
+ if (next == end) {
+ return false;
+ }
+
+ // if we are to return delims and we are one a returnable one
+ // move past it and stop
+ if (is_ret(*next) && return_delims_) {
+ tok+=*next;
+ ++next;
+ }
+ else
+ // append all the non delim characters
+ for (;next!=end && !is_nonret(*next) && !is_ret(*next);++next)
+ tok+=*next;
+
+
+ return true;
+ }
+ };
+
+
+} //namespace boost
+
+
+#endif
+
+
+
+
+
diff --git a/boost/boost/token_iterator.hpp b/boost/boost/token_iterator.hpp
new file mode 100644
index 00000000000..f7aa1a3e337
--- /dev/null
+++ b/boost/boost/token_iterator.hpp
@@ -0,0 +1,128 @@
+// Boost token_iterator.hpp -------------------------------------------------//
+
+// Copyright John R. Bandela 2001
+// 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/tokenizer for documentation.
+
+// Revision History:
+// 16 Jul 2003 John Bandela
+// Allowed conversions from convertible base iterators
+// 03 Jul 2003 John Bandela
+// Converted to new iterator adapter
+
+
+
+#ifndef BOOST_TOKENIZER_POLICY_JRB070303_HPP_
+#define BOOST_TOKENIZER_POLICY_JRB070303_HPP_
+
+#include<boost/assert.hpp>
+#include<boost/iterator/iterator_adaptor.hpp>
+#include<boost/iterator/detail/minimum_category.hpp>
+#include<boost/token_functions.hpp>
+#include<utility>
+
+namespace boost
+{
+ template <class TokenizerFunc, class Iterator, class Type>
+ class token_iterator
+ : public iterator_facade<
+ token_iterator<TokenizerFunc, Iterator, Type>
+ , Type
+ , typename detail::minimum_category<
+ forward_traversal_tag
+ , typename iterator_traversal<Iterator>::type
+ >::type
+ , const Type&
+ >
+ {
+
+ friend class iterator_core_access;
+
+ TokenizerFunc f_;
+ Iterator begin_;
+ Iterator end_;
+ bool valid_;
+ Type tok_;
+
+ void increment(){
+ BOOST_ASSERT(valid_);
+ valid_ = f_(begin_,end_,tok_);
+ }
+
+ const Type& dereference() const {
+ BOOST_ASSERT(valid_);
+ return tok_;
+ }
+ template<class Other>
+ bool equal(const Other& a) const{
+ return (a.valid_ && valid_)
+ ?( (a.begin_==begin_) && (a.end_ == end_) )
+ :(a.valid_==valid_);
+
+ }
+
+ void initialize(){
+ if(valid_) return;
+ f_.reset();
+ valid_ = (begin_ != end_)?
+ f_(begin_,end_,tok_):false;
+ }
+ public:
+ token_iterator():begin_(),end_(),valid_(false),tok_() { }
+
+ token_iterator(TokenizerFunc f, Iterator begin, Iterator e = Iterator())
+ : f_(f),begin_(begin),end_(e),valid_(false),tok_(){ initialize(); }
+
+ token_iterator(Iterator begin, Iterator e = Iterator())
+ : f_(),begin_(begin),end_(e),valid_(false),tok_() {initialize();}
+
+ template<class OtherIter>
+ token_iterator(
+ token_iterator<TokenizerFunc, OtherIter,Type> const& t
+ , typename enable_if_convertible<OtherIter, Iterator>::type* = 0)
+ : f_(t.tokenizer_function()),begin_(t.base())
+ ,end_(t.end()),valid_(t.at_end()),tok_(t.current_token()) {}
+
+ Iterator base()const{return begin_;}
+
+ Iterator end()const{return end_;};
+
+ TokenizerFunc tokenizer_function()const{return f_;}
+
+ Type current_token()const{return tok_;}
+
+ bool at_end()const{return valid_;}
+
+
+
+
+ };
+ template <
+ class TokenizerFunc = char_delimiters_separator<char>,
+ class Iterator = std::string::const_iterator,
+ class Type = std::string
+ >
+ class token_iterator_generator {
+
+ private:
+ public:
+ typedef token_iterator<TokenizerFunc,Iterator,Type> type;
+ };
+
+
+ // Type has to be first because it needs to be explicitly specified
+ // because there is no way the function can deduce it.
+ template<class Type, class Iterator, class TokenizerFunc>
+ typename token_iterator_generator<TokenizerFunc,Iterator,Type>::type
+ make_token_iterator(Iterator begin, Iterator end,const TokenizerFunc& fun){
+ typedef typename
+ token_iterator_generator<TokenizerFunc,Iterator,Type>::type ret_type;
+ return ret_type(fun,begin,end);
+ }
+
+} // namespace boost
+
+#endif
diff --git a/boost/boost/tokenizer.hpp b/boost/boost/tokenizer.hpp
new file mode 100644
index 00000000000..d236ec4e99f
--- /dev/null
+++ b/boost/boost/tokenizer.hpp
@@ -0,0 +1,98 @@
+// Boost tokenizer.hpp -----------------------------------------------------//
+
+// © Copyright Jeremy Siek and John R. Bandela 2001.
+
+// 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/tokenizer for documenation
+
+// Revision History:
+// 03 Jul 2003 John Bandela
+// Converted to new iterator adapter
+// 02 Feb 2002 Jeremy Siek
+// Removed tabs and a little cleanup.
+
+#ifndef BOOST_TOKENIZER_JRB070303_HPP_
+#define BOOST_TOKENIZER_JRB070303_HPP_
+
+#include <boost/token_iterator.hpp>
+
+namespace boost {
+
+
+ //===========================================================================
+ // A container-view of a tokenized "sequence"
+ template <
+ typename TokenizerFunc = char_delimiters_separator<char>,
+ typename Iterator = std::string::const_iterator,
+ typename Type = std::string
+ >
+ class tokenizer {
+ private:
+ typedef token_iterator_generator<TokenizerFunc,Iterator,Type> TGen;
+
+ // It seems that MSVC does not like the unqualified use of iterator,
+ // Thus we use iter internally when it is used unqualified and
+ // the users of this class will always qualify iterator.
+ typedef typename TGen::type iter;
+
+ public:
+
+ typedef iter iterator;
+ typedef iter const_iterator;
+ typedef Type value_type;
+ typedef value_type& reference;
+ typedef const value_type& const_reference;
+ typedef value_type* pointer;
+ typedef const pointer const_pointer;
+ typedef void size_type;
+ typedef void difference_type;
+
+ tokenizer(Iterator first, Iterator last,
+ const TokenizerFunc& f = TokenizerFunc())
+ : first_(first), last_(last), f_(f) { }
+
+ template <typename Container>
+ tokenizer(const Container& c)
+ : first_(c.begin()), last_(c.end()), f_() { }
+
+ template <typename Container>
+ tokenizer(const Container& c,const TokenizerFunc& f)
+ : first_(c.begin()), last_(c.end()), f_(f) { }
+
+ void assign(Iterator first, Iterator last){
+ first_ = first;
+ last_ = last;
+ }
+
+ void assign(Iterator first, Iterator last, const TokenizerFunc& f){
+ assign(first,last);
+ f_ = f;
+ }
+
+ template <typename Container>
+ void assign(const Container& c){
+ assign(c.begin(),c.end());
+ }
+
+
+ template <typename Container>
+ void assign(const Container& c, const TokenizerFunc& f){
+ assign(c.begin(),c.end(),f);
+ }
+
+ iter begin() const { return iter(f_,first_,last_); }
+ iter end() const { return iter(f_,last_,last_); }
+
+ private:
+ Iterator first_;
+ Iterator last_;
+ TokenizerFunc f_;
+ };
+
+
+} // namespace boost
+
+#endif
diff --git a/boost/boost/tr1/array.hpp b/boost/boost/tr1/array.hpp
new file mode 100644
index 00000000000..ab494b437d0
--- /dev/null
+++ b/boost/boost/tr1/array.hpp
@@ -0,0 +1,83 @@
+// (C) Copyright John Maddock 2005.
+// 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)
+
+#ifndef BOOST_TR1_ARRAY_HPP_INCLUDED
+# define BOOST_TR1_ARRAY_HPP_INCLUDED
+# include <boost/tr1/detail/config.hpp>
+
+#ifdef BOOST_HAS_TR1_ARRAY
+
+# include BOOST_TR1_HEADER(array)
+
+#else
+
+#include <boost/array.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/integral_constant.hpp>
+#include <boost/detail/workaround.hpp>
+
+namespace std{ namespace tr1{
+
+using ::boost::array;
+
+#if !BOOST_WORKAROUND(__BORLANDC__, < 0x0582)
+// [6.1.3.2] Tuple creation functions
+using ::boost::swap;
+#endif
+
+#if !defined(BOOST_TR1_USE_OLD_TUPLE)
+}} namespace boost{ namespace fusion{
+#endif
+
+// [6.2.2.5] Tuple interface to class template array
+template <class T> struct tuple_size; // forward declaration
+template <int I, class T> struct tuple_element; // forward declaration
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+template <class T, size_t N>
+struct tuple_size< ::boost::array<T, N> >
+ : public ::boost::integral_constant< ::std::size_t, N>{};
+
+
+template <int I, class T, size_t N>
+struct tuple_element<I, ::boost::array<T, N> >
+{
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x570))
+ BOOST_STATIC_ASSERT(I < (int)N);
+ BOOST_STATIC_ASSERT(I >= 0);
+#endif
+ typedef T type;
+};
+#endif
+template <int I, class T, size_t N>
+T& get( ::boost::array<T, N>& a)
+{
+ BOOST_STATIC_ASSERT(I < N);
+ BOOST_STATIC_ASSERT(I >= 0);
+ return a[I];
+}
+
+template <int I, class T, size_t N>
+const T& get(const array<T, N>& a)
+{
+ BOOST_STATIC_ASSERT(I < N);
+ BOOST_STATIC_ASSERT(I >= 0);
+ return a[I];
+}
+
+#if !defined(BOOST_TR1_USE_OLD_TUPLE)
+}} namespace std{ namespace tr1{
+
+ using ::boost::fusion::tuple_size;
+ using ::boost::fusion::tuple_element;
+ using ::boost::fusion::get;
+
+#endif
+
+
+} } // namespaces
+
+#endif
+
+#endif
diff --git a/boost/boost/tr1/complex.hpp b/boost/boost/tr1/complex.hpp
new file mode 100644
index 00000000000..f2899ef0ee0
--- /dev/null
+++ b/boost/boost/tr1/complex.hpp
@@ -0,0 +1,243 @@
+// (C) Copyright John Maddock 2005.
+// 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)
+
+#ifndef BOOST_TR1_COMPLEX_HPP_INCLUDED
+# define BOOST_TR1_COMPLEX_HPP_INCLUDED
+# include <boost/tr1/detail/config.hpp>
+# include <complex>
+
+#ifndef BOOST_HAS_TR1_COMPLEX_OVERLOADS
+
+#include <boost/tr1/detail/math_overloads.hpp>
+#include <boost/assert.hpp>
+#include <boost/detail/workaround.hpp>
+#include <cmath>
+
+namespace std{
+
+#ifdef BOOST_NO_STDC_NAMESPACE
+ using :: atan2;
+#endif
+
+#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+template <class T>
+inline BOOST_TR1_MATH_RETURN(double) arg(const T& t)
+{
+ return ::std::atan2(0.0, static_cast<double>(t));
+}
+#else
+inline double arg(const double& t)
+{
+ return ::std::atan2(0.0, t);
+}
+#endif
+inline long double arg(const long double& t)
+{
+ return ::std::atan2(0.0L, static_cast<long double>(t));
+}
+inline float arg(const float& t)
+{
+ return ::std::atan2(0.0F, static_cast<float>(t));
+}
+
+#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+template <class T>
+inline BOOST_TR1_MATH_RETURN(double) norm(const T& t)
+{
+ double r = static_cast<double>(t);
+ return r*r;
+}
+#else
+inline double norm(const double& t)
+{
+ return t*t;
+}
+#endif
+inline long double norm(const long double& t)
+{
+ long double l = t;
+ return l*l;
+}
+inline float norm(const float& t)
+{
+ float f = t;
+ return f*f;
+}
+
+#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+template <class T>
+inline BOOST_TR1_MATH_RETURN(std::complex<double>) conj(const T& t)
+{
+ return ::std::conj(std::complex<double>(static_cast<double>(t)));
+}
+#else
+inline std::complex<double> conj(const double& t)
+{
+ return ::std::conj(std::complex<double>(t));
+}
+#endif
+inline std::complex<long double> conj(const long double& t)
+{
+ return ::std::conj(std::complex<long double>(t));
+}
+inline std::complex<float> conj(const float& t)
+{
+ std::complex<float> ct(t);
+ ct = ::std::conj(ct);
+ return ct;
+}
+
+#if !BOOST_WORKAROUND(__BORLANDC__, <=0x570) && !BOOST_WORKAROUND(BOOST_MSVC, < 1310)
+inline complex<double> polar(const char& rho, const char& theta = 0)
+{ return ::std::polar(static_cast<double>(rho), static_cast<double>(theta)); }
+inline complex<double> polar(const unsigned char& rho, const unsigned char& theta = 0)
+{ return ::std::polar(static_cast<double>(rho), static_cast<double>(theta)); }
+inline complex<double> polar(const signed char& rho, const signed char& theta = 0)
+{ return ::std::polar(static_cast<double>(rho), static_cast<double>(theta)); }
+inline complex<double> polar(const short& rho, const short& theta = 0)
+{ return ::std::polar(static_cast<double>(rho), static_cast<double>(theta)); }
+inline complex<double> polar(const unsigned short& rho, const unsigned short& theta = 0)
+{ return ::std::polar(static_cast<double>(rho), static_cast<double>(theta)); }
+inline complex<double> polar(const int& rho, const int& theta = 0)
+{ return ::std::polar(static_cast<double>(rho), static_cast<double>(theta)); }
+inline complex<double> polar(const unsigned int& rho, const unsigned int& theta = 0)
+{ return ::std::polar(static_cast<double>(rho), static_cast<double>(theta)); }
+inline complex<double> polar(const long& rho, const long& theta = 0)
+{ return ::std::polar(static_cast<double>(rho), static_cast<double>(theta)); }
+inline complex<double> polar(const unsigned long& rho, const unsigned long& theta = 0)
+{ return ::std::polar(static_cast<double>(rho), static_cast<double>(theta)); }
+#ifdef BOOST_HAS_LONG_LONG
+inline complex<double> polar(const long long& rho, const long long& theta = 0)
+{ return ::std::polar(static_cast<double>(rho), static_cast<double>(theta)); }
+inline complex<double> polar(const unsigned long long& rho, const unsigned long long& theta = 0)
+{ return ::std::polar(static_cast<double>(rho), static_cast<double>(theta)); }
+#elif defined(BOOST_HAS_MS_INT64)
+inline complex<double> polar(const __int64& rho, const __int64& theta = 0)
+{ return ::std::polar(static_cast<double>(rho), static_cast<double>(theta)); }
+inline complex<double> polar(const unsigned __int64& rho, const unsigned __int64& theta = 0)
+{ return ::std::polar(static_cast<double>(rho), static_cast<double>(theta)); }
+#endif
+
+template<class T, class U>
+inline complex<typename boost::tr1_detail::promote_to_real<T, U>::type>
+ polar(const T& rho, const U& theta)
+{
+ typedef typename boost::tr1_detail::promote_to_real<T, U>::type real_type;
+ return std::polar(static_cast<real_type>(rho), static_cast<real_type>(theta));
+}
+#endif
+
+#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+template <class T>
+inline BOOST_TR1_MATH_RETURN(double) imag(const T& )
+{
+ return 0;
+}
+#else
+inline double imag(const double& )
+{
+ return 0;
+}
+#endif
+inline long double imag(const long double& )
+{
+ return 0;
+}
+inline float imag(const float& )
+{
+ return 0;
+}
+
+#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+template <class T>
+inline BOOST_TR1_MATH_RETURN(double) real(const T& t)
+{
+ return static_cast<double>(t);
+}
+#else
+inline double real(const double& t)
+{
+ return t;
+}
+#endif
+inline long double real(const long double& t)
+{
+ return t;
+}
+inline float real(const float& t)
+{
+ return t;
+}
+
+template<class T, class U>
+inline complex<typename boost::tr1_detail::largest_real<T, U>::type>
+ pow(const complex<T>& x, const complex<U>& y)
+{
+ typedef complex<typename boost::tr1_detail::largest_real<T, U>::type> result_type;
+ typedef typename boost::mpl::if_<boost::is_same<result_type, complex<T> >, result_type const&, result_type>::type cast1_type;
+ typedef typename boost::mpl::if_<boost::is_same<result_type, complex<U> >, result_type const&, result_type>::type cast2_type;
+ cast1_type x1(x);
+ cast2_type y1(y);
+ return std::pow(x1, y1);
+}
+template<class T, class U>
+inline complex<typename boost::tr1_detail::promote_to_real<T, U>::type>
+ pow (const complex<T>& x, const U& y)
+{
+ typedef typename boost::tr1_detail::promote_to_real<T, U>::type real_type;
+ typedef complex<typename boost::tr1_detail::promote_to_real<T, U>::type> result_type;
+ typedef typename boost::mpl::if_<boost::is_same<result_type, complex<T> >, result_type const&, result_type>::type cast1_type;
+ real_type r = y;
+ cast1_type x1(x);
+ std::complex<real_type> y1(r);
+ return std::pow(x1, y1);
+}
+
+template<class T, class U>
+inline complex<typename boost::tr1_detail::promote_to_real<T, U>::type>
+ pow (const T& x, const complex<U>& y)
+{
+ typedef typename boost::tr1_detail::promote_to_real<T, U>::type real_type;
+ typedef complex<typename boost::tr1_detail::promote_to_real<T, U>::type> result_type;
+ typedef typename boost::mpl::if_<boost::is_same<result_type, complex<U> >, result_type const&, result_type>::type cast_type;
+ real_type r = x;
+ std::complex<real_type> x1(r);
+ cast_type y1(y);
+ return std::pow(x1, y1);
+}
+
+}
+
+#endif
+
+#ifndef BOOST_HAS_TR1_COMPLEX_INVERSE_TRIG
+
+#include <boost/math/complex.hpp>
+
+namespace std {
+namespace tr1 {
+
+using boost::math::acos;
+using boost::math::asin;
+using boost::math::atan;
+using boost::math::acosh;
+using boost::math::asinh;
+using boost::math::atanh;
+using boost::math::fabs;
+
+} }
+
+#else
+
+# ifdef BOOST_HAS_INCLUDE_NEXT
+# include_next BOOST_TR1_HEADER(complex)
+# else
+# include BOOST_TR1_STD_HEADER(BOOST_TR1_PATH(complex))
+# endif
+
+#endif
+
+#endif
+
diff --git a/boost/boost/tr1/detail/config.hpp b/boost/boost/tr1/detail/config.hpp
new file mode 100644
index 00000000000..40edd581db2
--- /dev/null
+++ b/boost/boost/tr1/detail/config.hpp
@@ -0,0 +1,140 @@
+// (C) Copyright John Maddock 2005.
+// 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)
+
+
+#ifndef BOOST_TR1_DETAIL_CONFIG_HPP_INCLUDED
+# define BOOST_TR1_DETAIL_CONFIG_HPP_INCLUDED
+
+//
+// IMPORTANT: we must figure out the basics, such as how to
+// forward to the real std lib headers *without* including
+// boost/config.hpp or any of the std lib headers. A classic
+// chicken and the egg problem....
+//
+// Including <cstddef> at least lets us detect STLport:
+//
+#include <cstddef>
+
+# if (defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)) && !defined(__BORLANDC__)
+# ifdef __SUNPRO_CC
+ // can't use <../stlport/name> since some compilers put stlport in a different directory:
+# define BOOST_TR1_STD_HEADER(name) <../stlport4/name>
+# else
+# define BOOST_TR1_STD_HEADER(name) <../stlport/name>
+# endif
+# elif defined(__HP_aCC)
+# define BOOST_TR1_STD_HEADER(name) <../include_std/name>
+# elif defined(__DECCXX)
+# define BOOST_TR1_STD_HEADER(name) <../cxx/name>
+# elif defined(__BORLANDC__) && __BORLANDC__ >= 0x570
+# define BOOST_TR1_STD_HEADER(name) <../include/dinkumware/name>
+# else
+# define BOOST_TR1_STD_HEADER(name) <../include/name>
+# endif
+
+#if defined(__GNUC__) || (!defined(_AIX) && defined(__IBMCPP__) && __IBMCPP__ >= 800)
+# ifndef BOOST_HAS_INCLUDE_NEXT
+# define BOOST_HAS_INCLUDE_NEXT
+# endif
+#endif
+
+// Can't use BOOST_WORKAROUND here, it leads to recursive includes:
+#if (defined(__BORLANDC__) && (__BORLANDC__ <= 0x600)) || (defined(_MSC_VER) && (_MSC_VER < 1310))
+# define BOOST_TR1_USE_OLD_TUPLE
+#endif
+
+//
+// We may be in the middle of parsing boost/config.hpp
+// when this header is included, so don't rely on config
+// stuff in the rest of this header...
+//
+// Find our actual std lib:
+//
+#ifdef BOOST_HAS_INCLUDE_NEXT
+# ifndef BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_CONFIG_RECURSION
+# endif
+# include_next <utility>
+# if (__GNUC__ < 3)
+# include_next <algorithm>
+# include_next <iterator>
+# endif
+# ifdef BOOST_TR1_NO_CONFIG_RECURSION
+# undef BOOST_TR1_NO_CONFIG_RECURSION
+# undef BOOST_TR1_NO_RECURSION
+# endif
+#else
+# include BOOST_TR1_STD_HEADER(utility)
+#endif
+
+#if defined(__GLIBCXX__) && !defined(BOOST_TR1_PATH)
+# define BOOST_TR1_PATH(name) tr1/name
+#endif
+#if !defined(BOOST_TR1_PATH)
+# define BOOST_TR1_PATH(name) name
+#endif
+
+#define BOOST_TR1_HEADER(name) <BOOST_TR1_PATH(name)>
+
+#ifdef BOOST_HAS_TR1
+ // turn on support for everything:
+# define BOOST_HAS_TR1_ARRAY
+# define BOOST_HAS_TR1_COMPLEX_OVERLOADS
+# define BOOST_HAS_TR1_COMPLEX_INVERSE_TRIG
+# define BOOST_HAS_TR1_REFERENCE_WRAPPER
+# define BOOST_HAS_TR1_RESULT_OF
+# define BOOST_HAS_TR1_MEM_FN
+# define BOOST_HAS_TR1_BIND
+# define BOOST_HAS_TR1_FUNCTION
+# define BOOST_HAS_TR1_HASH
+# define BOOST_HAS_TR1_SHARED_PTR
+# define BOOST_HAS_TR1_RANDOM
+# define BOOST_HAS_TR1_REGEX
+# define BOOST_HAS_TR1_TUPLE
+# define BOOST_HAS_TR1_TYPE_TRAITS
+# define BOOST_HAS_TR1_UTILITY
+# define BOOST_HAS_TR1_UNORDERED_MAP
+# define BOOST_HAS_TR1_UNORDERED_SET
+
+#endif
+
+#if defined(__MWERKS__) && (__MWERKS__ >= 0x3205)
+//
+// Very preliminary MWCW support, may not be right:
+//
+# define BOOST_HAS_TR1_SHARED_PTR
+# define BOOST_HAS_TR1_REFERENCE_WRAPPER
+# define BOOST_HAS_TR1_FUNCTION
+# define BOOST_HAS_TR1_TUPLE
+# define BOOST_HAS_TR1_RESULT_OF
+#endif
+
+#ifdef BOOST_HAS_GCC_TR1
+ // turn on support for everything in gcc 4.0.x:
+# define BOOST_HAS_TR1_ARRAY
+//# define BOOST_HAS_TR1_COMPLEX_OVERLOADS
+//# define BOOST_HAS_TR1_COMPLEX_INVERSE_TRIG
+# define BOOST_HAS_TR1_REFERENCE_WRAPPER
+# define BOOST_HAS_TR1_RESULT_OF
+# define BOOST_HAS_TR1_MEM_FN
+# define BOOST_HAS_TR1_BIND
+# define BOOST_HAS_TR1_FUNCTION
+# define BOOST_HAS_TR1_HASH
+# define BOOST_HAS_TR1_SHARED_PTR
+//# define BOOST_HAS_TR1_RANDOM
+//# define BOOST_HAS_TR1_REGEX
+# define BOOST_HAS_TR1_TUPLE
+# define BOOST_HAS_TR1_TYPE_TRAITS
+# define BOOST_HAS_TR1_UTILITY
+# define BOOST_HAS_TR1_UNORDERED_MAP
+# define BOOST_HAS_TR1_UNORDERED_SET
+
+#endif
+
+#include <boost/config.hpp>
+
+#endif
+
diff --git a/boost/boost/tr1/detail/functor2iterator.hpp b/boost/boost/tr1/detail/functor2iterator.hpp
new file mode 100644
index 00000000000..8911a531379
--- /dev/null
+++ b/boost/boost/tr1/detail/functor2iterator.hpp
@@ -0,0 +1,34 @@
+// (C) Copyright John Maddock 2005.
+// 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)
+
+#ifndef BOOST_TR1_FUNCTOR_IT_HPP_INCLUDED
+# define BOOST_TR1_FUNCTOR_IT_HPP_INCLUDED
+
+# include <boost/iterator/iterator_facade.hpp>
+
+namespace boost{ namespace tr1_details{
+
+template <class Func, class R>
+struct functor2iterator : boost::iterator_facade<functor2iterator<Func,R>, const R, std::input_iterator_tag>
+{
+ functor2iterator() : m_func(0){}
+ functor2iterator(Func& f)
+ : m_func(&f)
+ {
+ m_val = (*m_func)();
+ }
+ const R& dereference()const
+ { return m_val; }
+ void increment(){ m_val = (*m_func)(); }
+ bool equal(const functor2iterator&)const
+ { return false; }
+private:
+ Func* m_func;
+ R m_val;
+};
+
+} }
+
+#endif
diff --git a/boost/boost/tr1/detail/math_overloads.hpp b/boost/boost/tr1/detail/math_overloads.hpp
new file mode 100644
index 00000000000..c1a69a443da
--- /dev/null
+++ b/boost/boost/tr1/detail/math_overloads.hpp
@@ -0,0 +1,58 @@
+// (C) Copyright John Maddock 2005.
+// 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)
+
+#ifndef BOOST_TR1_MATH_OVERLOADS_HPP_INCLUDED
+# define BOOST_TR1_MATH_OVERLOADS_HPP_INCLUDED
+# include <boost/config.hpp>
+
+# ifndef BOOST_NO_SFINAE
+# include <boost/utility/enable_if.hpp>
+# include <boost/type_traits/is_convertible.hpp>
+# define BOOST_TR1_MATH_RETURN(RET) typename ::boost::enable_if< ::boost::is_convertible<T,double>, RET >::type
+# else
+# define BOOST_TR1_MATH_RETURN(RET) RET
+# endif
+
+# include <boost/type_traits/is_floating_point.hpp>
+# include <boost/type_traits/is_same.hpp>
+# include <boost/mpl/if.hpp>
+
+namespace boost{ namespace tr1_detail{
+
+template <class T, class U>
+struct largest_real
+{
+ typedef typename boost::mpl::if_<
+ boost::is_same<long double, T>,
+ long double,
+ typename boost::mpl::if_<
+ boost::is_same<long double, U>,
+ long double,
+ typename boost::mpl::if_<
+ boost::is_same<double, T>,
+ double,
+ typename boost::mpl::if_<
+ boost::is_same<double, U>,
+ double,
+ float
+ >::type
+ >::type
+ >::type
+ >::type type;
+};
+
+template <class T, class U>
+struct promote_to_real
+{
+ typedef typename largest_real<
+ typename boost::mpl::if_< boost::is_floating_point<T>, T, double>::type,
+ typename boost::mpl::if_< boost::is_floating_point<U>, U, double>::type
+ >::type type;
+};
+
+} }
+
+#endif
+
diff --git a/boost/boost/tr1/functional.hpp b/boost/boost/tr1/functional.hpp
new file mode 100644
index 00000000000..c0083f24807
--- /dev/null
+++ b/boost/boost/tr1/functional.hpp
@@ -0,0 +1,137 @@
+// (C) Copyright John Maddock 2005.
+// 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)
+
+#ifndef BOOST_TR1_FUNCTIONAL_HPP_INCLUDED
+# define BOOST_TR1_FUNCTIONAL_HPP_INCLUDED
+# include <boost/tr1/detail/config.hpp>
+# include <functional>
+
+#if defined(BOOST_HAS_TR1_REFERENCE_WRAPPER) \
+ || defined(BOOST_HAS_TR1_RESULT_OF)\
+ || defined(BOOST_HAS_TR1_MEM_FN)\
+ || defined(BOOST_HAS_TR1_BIND)\
+ || defined(BOOST_HAS_TR1_FUNCTION)\
+ || defined(BOOST_HAS_TR1_HASH)
+# ifdef BOOST_HAS_INCLUDE_NEXT
+# include_next BOOST_TR1_HEADER(functional)
+# else
+# include BOOST_TR1_STD_HEADER(BOOST_TR1_PATH(functional))
+# endif
+#endif
+
+#ifndef BOOST_HAS_TR1_REFERENCE_WRAPPER
+
+#include <boost/ref.hpp>
+
+namespace std{ namespace tr1{
+
+ using ::boost::reference_wrapper;
+ using ::boost::ref;
+ using ::boost::cref;
+
+} }
+
+#endif // BOOST_HAS_TR1_REFERENCE_WRAPPER
+
+#if !defined(BOOST_HAS_TR1_RESULT_OF)\
+ && !defined(BOOST_NO_SFINAE) && \
+ !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+//
+// we can only actually include result_of.hpp if the compiler
+// really does support it, otherwise we just get endless errors...
+//
+#include <boost/utility/result_of.hpp>
+
+namespace std{ namespace tr1{
+
+ using ::boost::result_of;
+
+} }
+
+#endif // BOOST_HAS_TR1_RESULT_OF
+
+#ifndef BOOST_HAS_TR1_MEM_FN
+// mem_fn:
+#include <boost/mem_fn.hpp>
+
+namespace std{ namespace tr1{
+
+using boost::mem_fn;
+
+} }
+
+#endif // BOOST_HAS_TR1_MEM_FN
+
+
+#ifndef BOOST_HAS_TR1_BIND
+// Bind:
+#include <boost/bind.hpp>
+
+namespace std{ namespace tr1{
+
+ // These aren't supported in this release but are in mainline cvs:
+ // using ::boost::is_bind_expression;
+ // using ::boost::is_placeholder;
+ using ::boost::bind;
+ namespace placeholders {
+#ifndef BOOST_BIND_NO_PLACEHOLDERS
+ using ::_1;
+ using ::_2;
+ using ::_3;
+ using ::_4;
+ using ::_5;
+ using ::_6;
+ using ::_7;
+ using ::_8;
+ using ::_9;
+#endif
+ } // placeholders
+
+} }
+
+#endif
+
+#ifndef BOOST_HAS_TR1_FUNCTION
+// polymorphic function object wrappers:
+#include <boost/function.hpp>
+#include <boost/detail/workaround.hpp>
+
+#if !BOOST_WORKAROUND(__BORLANDC__, < 0x582) \
+ && !BOOST_WORKAROUND(BOOST_MSVC, < 1310) \
+ && !defined(BOOST_FUNCTION_NO_FUNCTION_TYPE_SYNTAX)
+namespace std{ namespace tr1{
+
+ using ::boost::bad_function_call;
+ using ::boost::function;
+ using ::boost::swap;
+
+}}
+#endif
+
+#endif // BOOST_HAS_TR1_FUNCTION
+
+#ifndef BOOST_HAS_TR1_HASH
+//
+// This header can get included by boost/hash.hpp
+// leading to cyclic dependencies. As a workaround
+// we forward declare boost::hash and include
+// the actual header later.
+//
+namespace boost{
+template <class T> struct hash;
+}
+
+namespace std{ namespace tr1{
+ using ::boost::hash;
+
+}}
+
+#include <boost/functional/hash.hpp>
+
+#endif
+
+#endif
+
diff --git a/boost/boost/tr1/memory.hpp b/boost/boost/tr1/memory.hpp
new file mode 100644
index 00000000000..32703352c7c
--- /dev/null
+++ b/boost/boost/tr1/memory.hpp
@@ -0,0 +1,71 @@
+// (C) Copyright John Maddock 2005.
+// 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)
+
+#ifndef BOOST_TR1_MEMORY_HPP_INCLUDED
+# define BOOST_TR1_MEMORY_HPP_INCLUDED
+# include <boost/tr1/detail/config.hpp>
+# include <boost/detail/workaround.hpp>
+# include <memory>
+
+#ifndef BOOST_HAS_TR1_SHARED_PTR
+
+//
+// This header can get included by boost/shared_ptr.hpp which leads
+// to cyclic dependencies, the workaround is to forward declare all
+// the boost components, and then include the actual headers afterwards.
+// This is fragile, but seems to work, and doesn't require modification
+// of boost/shared_ptr.hpp.
+//
+namespace boost{
+
+class bad_weak_ptr;
+template<class T> class weak_ptr;
+template<class T> class shared_ptr;
+template<class T> void swap(weak_ptr<T> & a, weak_ptr<T> & b);
+template<class T> void swap(shared_ptr<T> & a, shared_ptr<T> & b);
+template<class T, class U> shared_ptr<T> static_pointer_cast(shared_ptr<U> const & r);
+template<class T, class U> shared_ptr<T> dynamic_pointer_cast(shared_ptr<U> const & r);
+template<class T, class U> shared_ptr<T> const_pointer_cast(shared_ptr<U> const & r);
+template<class D, class T> D * get_deleter(shared_ptr<T> const & p);
+template<class T> class enable_shared_from_this;
+
+namespace detail{
+class shared_count;
+class weak_count;
+}
+
+}
+
+namespace std{ namespace tr1{
+
+ using ::boost::bad_weak_ptr;
+ using ::boost::shared_ptr;
+#if !BOOST_WORKAROUND(__BORLANDC__, < 0x0582)
+ using ::boost::swap;
+#endif
+ using ::boost::static_pointer_cast;
+ using ::boost::dynamic_pointer_cast;
+ using ::boost::const_pointer_cast;
+ using ::boost::get_deleter;
+ using ::boost::weak_ptr;
+ using ::boost::enable_shared_from_this;
+
+} }
+#include <boost/shared_ptr.hpp>
+#include <boost/weak_ptr.hpp>
+#include <boost/enable_shared_from_this.hpp>
+
+#else
+
+# ifdef BOOST_HAS_INCLUDE_NEXT
+# include_next BOOST_TR1_HEADER(memory)
+# else
+# include BOOST_TR1_STD_HEADER(BOOST_TR1_PATH(memory))
+# endif
+
+#endif
+
+#endif
+
diff --git a/boost/boost/tr1/random.hpp b/boost/boost/tr1/random.hpp
new file mode 100644
index 00000000000..3f61e8e3dd0
--- /dev/null
+++ b/boost/boost/tr1/random.hpp
@@ -0,0 +1,581 @@
+// (C) Copyright John Maddock 2005.
+// (C) Copyright Henry S. Warren 2005.
+// 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)
+
+#ifndef BOOST_TR1_RANDOM_HPP_INCLUDED
+# define BOOST_TR1_RANDOM_HPP_INCLUDED
+# include <boost/tr1/detail/config.hpp>
+
+#ifdef BOOST_HAS_TR1_RANDOM
+# include BOOST_TR1_HEADER(random)
+#else
+// Boost.Random:
+#include <boost/random.hpp>
+#ifndef __SUNPRO_CC
+ // Sunpros linker complains if we so much as include this...
+# include <boost/nondet_random.hpp>
+#endif
+#include <boost/tr1/detail/functor2iterator.hpp>
+#include <boost/type_traits/is_fundamental.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace std { namespace tr1{
+
+using ::boost::variate_generator;
+
+template<class UIntType, UIntType a, UIntType c, UIntType m>
+class linear_congruential
+{
+private:
+ typedef ::boost::random::linear_congruential<UIntType, a, c, m, 0> impl_type;
+public:
+ // types
+ typedef UIntType result_type;
+ // parameter values
+ BOOST_STATIC_CONSTANT(UIntType, multiplier = a);
+ BOOST_STATIC_CONSTANT(UIntType, increment = c);
+ BOOST_STATIC_CONSTANT(UIntType, modulus = m);
+ // constructors and member function
+ explicit linear_congruential(unsigned long x0 = 1)
+ : m_gen(x0){}
+ linear_congruential(const linear_congruential& that)
+ : m_gen(that.m_gen){}
+ template<class Gen> linear_congruential(Gen& g)
+ {
+ init1(g, ::boost::is_same<Gen,linear_congruential>());
+ }
+ void seed(unsigned long x0 = 1)
+ { m_gen.seed(x0); }
+ template<class Gen> void seed(Gen& g)
+ {
+ init2(g, ::boost::is_fundamental<Gen>());
+ }
+ result_type min BOOST_PREVENT_MACRO_SUBSTITUTION() const
+ { return (m_gen.min)(); }
+ result_type max BOOST_PREVENT_MACRO_SUBSTITUTION() const
+ { return (m_gen.max)(); }
+ result_type operator()()
+ {
+ return m_gen();
+ }
+ bool operator==(const linear_congruential& that)const
+ { return m_gen == that.m_gen; }
+ bool operator!=(const linear_congruential& that)const
+ { return m_gen != that.m_gen; }
+
+#if !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) && !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))
+ template<class CharT, class Traits>
+ friend std::basic_ostream<CharT,Traits>&
+ operator<<(std::basic_ostream<CharT,Traits>& os,
+ const linear_congruential& lcg)
+ {
+ return os << lcg.m_gen;
+ }
+
+ template<class CharT, class Traits>
+ friend std::basic_istream<CharT,Traits>&
+ operator>>(std::basic_istream<CharT,Traits>& is,
+ linear_congruential& lcg)
+ {
+ return is >> lcg.m_gen;
+ }
+#endif
+
+private:
+ template <class Gen>
+ void init1(Gen& g, const ::boost::true_type&)
+ {
+ m_gen = g.m_gen;
+ }
+ template <class Gen>
+ void init1(Gen& g, const ::boost::false_type&)
+ {
+ init2(g, ::boost::is_fundamental<Gen>());
+ }
+ template <class Gen>
+ void init2(Gen& g, const ::boost::true_type&)
+ {
+ m_gen.seed(static_cast<unsigned long>(g));
+ }
+ template <class Gen>
+ void init2(Gen& g, const ::boost::false_type&)
+ {
+ //typedef typename Gen::result_type gen_rt;
+ boost::tr1_details::functor2iterator<Gen, unsigned long> f1(g), f2;
+ m_gen.seed(f1, f2);
+ }
+ impl_type m_gen;
+};
+
+template<class UIntType, int w, int n, int m, int r,
+UIntType a, int u, int s, UIntType b, int t, UIntType c, int l>
+class mersenne_twister
+{
+ typedef ::boost::random::mersenne_twister
+ <UIntType, w, n, m, r, a, u, s, b, t, c, l, 0> imp_type;
+public:
+ // types
+ typedef UIntType result_type;
+ // parameter values
+ BOOST_STATIC_CONSTANT(int, word_size = w);
+ BOOST_STATIC_CONSTANT(int, state_size = n);
+ BOOST_STATIC_CONSTANT(int, shift_size = m);
+ BOOST_STATIC_CONSTANT(int, mask_bits = r);
+ BOOST_STATIC_CONSTANT(UIntType, parameter_a = a);
+ BOOST_STATIC_CONSTANT(int, output_u = u);
+ BOOST_STATIC_CONSTANT(int, output_s = s);
+ BOOST_STATIC_CONSTANT(UIntType, output_b = b);
+ BOOST_STATIC_CONSTANT(int, output_t = t);
+ BOOST_STATIC_CONSTANT(UIntType, output_c = c);
+ BOOST_STATIC_CONSTANT(int, output_l = l);
+ // constructors and member function
+ mersenne_twister(){}
+ explicit mersenne_twister(unsigned long value)
+ : m_gen(value == 0 ? 4357UL : value){}
+ template<class Gen> mersenne_twister(Gen& g)
+ {
+ init1(g, ::boost::is_same<mersenne_twister,Gen>());
+ }
+ void seed()
+ { m_gen.seed(); }
+ void seed(unsigned long value)
+ { m_gen.seed(value == 0 ? 5489UL : value); }
+ template<class Gen> void seed(Gen& g)
+ { init2(g, ::boost::is_fundamental<Gen>()); }
+ result_type min BOOST_PREVENT_MACRO_SUBSTITUTION() const
+ { return (m_gen.min)(); }
+ result_type max BOOST_PREVENT_MACRO_SUBSTITUTION() const
+ { return (m_gen.max)(); }
+ result_type operator()()
+ { return m_gen(); }
+ bool operator==(const mersenne_twister& that)const
+ { return m_gen == that.m_gen; }
+ bool operator!=(const mersenne_twister& that)const
+ { return m_gen != that.m_gen; }
+
+#if !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) && !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))
+ template<class CharT, class Traits>
+ friend std::basic_ostream<CharT,Traits>&
+ operator<<(std::basic_ostream<CharT,Traits>& os,
+ const mersenne_twister& lcg)
+ {
+ return os << lcg.m_gen;
+ }
+
+ template<class CharT, class Traits>
+ friend std::basic_istream<CharT,Traits>&
+ operator>>(std::basic_istream<CharT,Traits>& is,
+ mersenne_twister& lcg)
+ {
+ return is >> lcg.m_gen;
+ }
+#endif
+private:
+ template <class Gen>
+ void init1(Gen& g, const ::boost::true_type&)
+ {
+ m_gen = g.m_gen;
+ }
+ template <class Gen>
+ void init1(Gen& g, const ::boost::false_type&)
+ {
+ init2(g, ::boost::is_fundamental<Gen>());
+ }
+ template <class Gen>
+ void init2(Gen& g, const ::boost::true_type&)
+ {
+ m_gen.seed(static_cast<unsigned long>(g == 0 ? 4357UL : g));
+ }
+ template <class Gen>
+ void init2(Gen& g, const ::boost::false_type&)
+ {
+ m_gen.seed(g);
+ }
+ imp_type m_gen;
+};
+
+template<class IntType, IntType m, int s, int r>
+class subtract_with_carry
+{
+public:
+ // types
+ typedef IntType result_type;
+ // parameter values
+ BOOST_STATIC_CONSTANT(IntType, modulus = m);
+ BOOST_STATIC_CONSTANT(int, long_lag = r);
+ BOOST_STATIC_CONSTANT(int, short_lag = s);
+
+ // constructors and member function
+ subtract_with_carry(){}
+ explicit subtract_with_carry(unsigned long value)
+ : m_gen(value == 0 ? 19780503UL : value){}
+ template<class Gen> subtract_with_carry(Gen& g)
+ { init1(g, ::boost::is_same<Gen, subtract_with_carry<IntType, m, s, r> >()); }
+ void seed(unsigned long value = 19780503ul)
+ { m_gen.seed(value == 0 ? 19780503UL : value); }
+ template<class Gen> void seed(Gen& g)
+ { init2(g, ::boost::is_fundamental<Gen>()); }
+ result_type min BOOST_PREVENT_MACRO_SUBSTITUTION() const
+ { return (m_gen.min)(); }
+ result_type max BOOST_PREVENT_MACRO_SUBSTITUTION() const
+ { return (m_gen.max)(); }
+ result_type operator()()
+ { return m_gen(); }
+ bool operator==(const subtract_with_carry& that)const
+ { return m_gen == that.m_gen; }
+ bool operator!=(const subtract_with_carry& that)const
+ { return m_gen != that.m_gen; }
+
+#if !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) && !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))
+ template<class CharT, class Traits>
+ friend std::basic_ostream<CharT,Traits>&
+ operator<<(std::basic_ostream<CharT,Traits>& os,
+ const subtract_with_carry& lcg)
+ {
+ return os << lcg.m_gen;
+ }
+
+ template<class CharT, class Traits>
+ friend std::basic_istream<CharT,Traits>&
+ operator>>(std::basic_istream<CharT,Traits>& is,
+ subtract_with_carry& lcg)
+ {
+ return is >> lcg.m_gen;
+ }
+#endif
+private:
+ template <class Gen>
+ void init1(Gen& g, const ::boost::true_type&)
+ {
+ m_gen = g.m_gen;
+ }
+ template <class Gen>
+ void init1(Gen& g, const ::boost::false_type&)
+ {
+ init2(g, ::boost::is_fundamental<Gen>());
+ }
+ template <class Gen>
+ void init2(Gen& g, const ::boost::true_type&)
+ {
+ m_gen.seed(static_cast<unsigned long>(g == 0 ? 19780503UL : g));
+ }
+ template <class Gen>
+ void init2(Gen& g, const ::boost::false_type&)
+ {
+ m_gen.seed(g);
+ }
+ ::boost::random::subtract_with_carry<IntType, m, s, r, 0> m_gen;
+};
+
+template<class RealType, int w, int s, int r>
+class subtract_with_carry_01
+{
+public:
+ // types
+ typedef RealType result_type;
+ // parameter values
+ BOOST_STATIC_CONSTANT(int, word_size = w);
+ BOOST_STATIC_CONSTANT(int, long_lag = r);
+ BOOST_STATIC_CONSTANT(int, short_lag = s);
+
+ // constructors and member function
+ subtract_with_carry_01(){}
+ explicit subtract_with_carry_01(unsigned long value)
+ : m_gen(value == 0 ? 19780503UL : value){}
+ template<class Gen> subtract_with_carry_01(Gen& g)
+ { init1(g, ::boost::is_same<Gen, subtract_with_carry_01<RealType, w, s, r> >()); }
+ void seed(unsigned long value = 19780503UL)
+ { m_gen.seed(value == 0 ? 19780503UL : value); }
+ template<class Gen> void seed(Gen& g)
+ { init2(g, ::boost::is_fundamental<Gen>()); }
+ result_type min BOOST_PREVENT_MACRO_SUBSTITUTION() const
+ { return (m_gen.min)(); }
+ result_type max BOOST_PREVENT_MACRO_SUBSTITUTION() const
+ { return (m_gen.max)(); }
+ result_type operator()()
+ { return m_gen(); }
+ bool operator==(const subtract_with_carry_01& that)const
+ { return m_gen == that.m_gen; }
+ bool operator!=(const subtract_with_carry_01& that)const
+ { return m_gen != that.m_gen; }
+
+#if !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) && !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))
+ template<class CharT, class Traits>
+ friend std::basic_ostream<CharT,Traits>&
+ operator<<(std::basic_ostream<CharT,Traits>& os,
+ const subtract_with_carry_01& lcg)
+ {
+ return os << lcg.m_gen;
+ }
+
+ template<class CharT, class Traits>
+ friend std::basic_istream<CharT,Traits>&
+ operator>>(std::basic_istream<CharT,Traits>& is,
+ subtract_with_carry_01& lcg)
+ {
+ return is >> lcg.m_gen;
+ }
+#endif
+private:
+ template <class Gen>
+ void init1(Gen& g, const ::boost::true_type&)
+ {
+ m_gen = g.m_gen;
+ }
+ template <class Gen>
+ void init1(Gen& g, const ::boost::false_type&)
+ {
+ init2(g, ::boost::is_fundamental<Gen>());
+ }
+ template <class Gen>
+ void init2(Gen& g, const ::boost::true_type&)
+ {
+ m_gen.seed(static_cast<unsigned long>(g == 0 ? 19780503UL : g));
+ }
+ template <class Gen>
+ void init2(Gen& g, const ::boost::false_type&)
+ {
+ //typedef typename Gen::result_type gen_rt;
+ boost::tr1_details::functor2iterator<Gen, unsigned long> f1(g), f2;
+ m_gen.seed(f1, f2);
+ }
+ ::boost::random::subtract_with_carry_01<RealType, w, s, r, 0> m_gen;
+};
+
+using ::boost::random::discard_block;
+
+template<class UniformRandomNumberGenerator1, int s1, class UniformRandomNumberGenerator2, int s2>
+class xor_combine
+{
+public:
+ // types
+ typedef UniformRandomNumberGenerator1 base1_type;
+ typedef UniformRandomNumberGenerator2 base2_type;
+ typedef unsigned long result_type;
+ // parameter values
+ BOOST_STATIC_CONSTANT(int, shift1 = s1);
+ BOOST_STATIC_CONSTANT(int, shift2 = s2);
+ // constructors and member function
+ xor_combine(){ init_minmax(); }
+ xor_combine(const base1_type & rng1, const base2_type & rng2)
+ : m_b1(rng1), m_b2(rng2) { init_minmax(); }
+ xor_combine(unsigned long s)
+ : m_b1(s), m_b2(s+1) { init_minmax(); }
+ template<class Gen> xor_combine(Gen& g)
+ {
+ init_minmax();
+ init1(g, ::boost::is_same<Gen, xor_combine<UniformRandomNumberGenerator1, s1, UniformRandomNumberGenerator2, s2> >());
+ }
+ void seed()
+ {
+ m_b1.seed();
+ m_b2.seed();
+ }
+ void seed(unsigned long s)
+ {
+ m_b1.seed(s);
+ m_b2.seed(s+1);
+ }
+ template<class Gen> void seed(Gen& g)
+ {
+ init2(g, ::boost::is_fundamental<Gen>());
+ }
+
+ const base1_type& base1() const
+ { return m_b1; }
+ const base2_type& base2() const
+ { return m_b2; }
+ result_type min BOOST_PREVENT_MACRO_SUBSTITUTION() const
+ { return m_min; }
+ result_type max BOOST_PREVENT_MACRO_SUBSTITUTION() const
+ { return m_max; }
+ result_type operator()()
+ { return (m_b1() << s1) ^ (m_b2() << s2); }
+
+ bool operator == (const xor_combine& that)const
+ { return (m_b1 == that.m_b1) && (m_b2 == that.m_b2); }
+ bool operator != (const xor_combine& that)const
+ { return !(*this == that); }
+
+#if !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) && !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))
+ template<class CharT, class Traits>
+ friend std::basic_ostream<CharT,Traits>&
+ operator<<(std::basic_ostream<CharT,Traits>& os,
+ const xor_combine& lcg)
+ {
+ return os << lcg.m_b1 << " " << lcg.m_b2;
+ }
+
+ template<class CharT, class Traits>
+ friend std::basic_istream<CharT,Traits>&
+ operator>>(std::basic_istream<CharT,Traits>& is,
+ xor_combine& lcg)
+ {
+ return is >> lcg.m_b1 >> lcg.m_b2;
+ }
+#endif
+
+private:
+ void init_minmax();
+ base1_type m_b1;
+ base2_type m_b2;
+ result_type m_min;
+ result_type m_max;
+
+ template <class Gen>
+ void init1(Gen& g, const ::boost::true_type&)
+ {
+ m_b1 = g.m_b1;
+ m_b2 = g.m_b2;
+ }
+ template <class Gen>
+ void init1(Gen& g, const ::boost::false_type&)
+ {
+ init2(g, ::boost::is_fundamental<Gen>());
+ }
+ template <class Gen>
+ void init2(Gen& g, const ::boost::true_type&)
+ {
+ m_b1.seed(static_cast<unsigned long>(g));
+ m_b2.seed(static_cast<unsigned long>(g));
+ }
+ template <class Gen>
+ void init2(Gen& g, const ::boost::false_type&)
+ {
+ m_b1.seed(g);
+ m_b2.seed(g);
+ }
+};
+
+template<class UniformRandomNumberGenerator1, int s1, class UniformRandomNumberGenerator2, int s2>
+void xor_combine<UniformRandomNumberGenerator1, s1, UniformRandomNumberGenerator2, s2>::init_minmax()
+{
+ //
+ // The following code is based on that given in "Hacker's Delight"
+ // by Henry S. Warren, (Addison-Wesley, 2003), and at
+ // http://www.hackersdelight.org/index.htm.
+ // Used here by permission.
+ //
+ // calculation of minimum value:
+ //
+ result_type a = (m_b1.min)() << s1;
+ result_type b = (m_b1.max)() << s1;
+ result_type c = (m_b2.min)() << s2;
+ result_type d = (m_b2.max)() << s2;
+ result_type m, temp;
+
+ m = 0x1uL << ((sizeof(result_type) * CHAR_BIT) - 1);
+ while (m != 0) {
+ if (~a & c & m) {
+ temp = (a | m) & (static_cast<result_type>(0u) - m);
+ if (temp <= b) a = temp;
+ }
+ else if (a & ~c & m) {
+ temp = (c | m) & (static_cast<result_type>(0u) - m);
+ if (temp <= d) c = temp;
+ }
+ m >>= 1;
+ }
+ m_min = a ^ c;
+
+ //
+ // calculation of maximum value:
+ //
+ if((((std::numeric_limits<result_type>::max)() >> s1) < (m_b1.max)())
+ || ((((std::numeric_limits<result_type>::max)()) >> s2) < (m_b2.max)()))
+ {
+ m_max = (std::numeric_limits<result_type>::max)();
+ return;
+ }
+ a = (m_b1.min)() << s1;
+ b = (m_b1.max)() << s1;
+ c = (m_b2.min)() << s2;
+ d = (m_b2.max)() << s2;
+
+ m = 0x1uL << ((sizeof(result_type) * CHAR_BIT) - 1);
+
+ while (m != 0) {
+ if (b & d & m) {
+ temp = (b - m) | (m - 1);
+ if (temp >= a) b = temp;
+ else {
+ temp = (d - m) | (m - 1);
+ if (temp >= c) d = temp;
+ }
+ }
+ m = m >> 1;
+ }
+ m_max = b ^ d;
+}
+
+typedef linear_congruential< ::boost::int32_t, 16807, 0, 2147483647> minstd_rand0;
+typedef linear_congruential< ::boost::int32_t, 48271, 0, 2147483647> minstd_rand;
+typedef mersenne_twister< ::boost::uint32_t, 32,624,397,31,0x9908b0df,11,7,0x9d2c5680,15,0xefc60000,18> mt19937;
+typedef subtract_with_carry_01<float, 24, 10, 24> ranlux_base_01;
+typedef subtract_with_carry_01<double, 48, 10, 24> ranlux64_base_01;
+typedef discard_block<subtract_with_carry< ::boost::int32_t, (1<<24), 10, 24>, 223, 24> ranlux3;
+typedef discard_block<subtract_with_carry< ::boost::int32_t, (1<<24), 10, 24>, 389, 24> ranlux4;
+typedef discard_block<subtract_with_carry_01<float, 24, 10, 24>, 223, 24> ranlux3_01;
+typedef discard_block<subtract_with_carry_01<float, 24, 10, 24>, 389, 24> ranlux4_01;
+
+#ifndef __SUNPRO_CC
+using ::boost::random_device;
+#endif
+using ::boost::uniform_int;
+
+class bernoulli_distribution
+{
+public:
+ // types
+ typedef int input_type;
+ typedef bool result_type;
+ // constructors and member function
+ explicit bernoulli_distribution(double p = 0.5)
+ : m_dist(p){}
+ double p() const
+ { return m_dist.p(); }
+ void reset()
+ { m_dist.reset(); }
+ template<class UniformRandomNumberGenerator>
+ result_type operator()(UniformRandomNumberGenerator& urng)
+ {
+ return m_dist(urng);
+ }
+#if !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) && !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))
+ template<class CharT, class Traits>
+ friend std::basic_ostream<CharT,Traits>&
+ operator<<(std::basic_ostream<CharT,Traits>& os,
+ const bernoulli_distribution& lcg)
+ {
+ return os << lcg.m_dist;
+ }
+
+ template<class CharT, class Traits>
+ friend std::basic_istream<CharT,Traits>&
+ operator>>(std::basic_istream<CharT,Traits>& is,
+ bernoulli_distribution& lcg)
+ {
+ return is >> lcg.m_dist;
+ }
+#endif
+
+private:
+ ::boost::bernoulli_distribution<double> m_dist;
+};
+//using ::boost::bernoulli_distribution;
+using ::boost::geometric_distribution;
+using ::boost::poisson_distribution;
+using ::boost::binomial_distribution;
+using ::boost::uniform_real;
+using ::boost::exponential_distribution;
+using ::boost::normal_distribution;
+using ::boost::gamma_distribution;
+
+} }
+
+#endif
+
+#endif
+
diff --git a/boost/boost/tr1/regex.hpp b/boost/boost/tr1/regex.hpp
new file mode 100644
index 00000000000..8bd39aced9c
--- /dev/null
+++ b/boost/boost/tr1/regex.hpp
@@ -0,0 +1,142 @@
+// (C) Copyright John Maddock 2005.
+// 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)
+
+#ifndef BOOST_TR1_REGEX_HPP_INCLUDED
+# define BOOST_TR1_REGEX_HPP_INCLUDED
+# include <boost/tr1/detail/config.hpp>
+
+#ifdef BOOST_HAS_TR1_REGEX
+
+# include BOOST_TR1_HEADER(regex)
+
+#else
+
+#include <boost/regex.hpp>
+
+namespace std{ namespace tr1{
+
+// [7.5] Regex constants
+namespace regex_constants {
+
+using ::boost::regex_constants::syntax_option_type;
+using ::boost::regex_constants::icase;
+using ::boost::regex_constants::nosubs;
+using ::boost::regex_constants::optimize;
+using ::boost::regex_constants::collate;
+using ::boost::regex_constants::ECMAScript;
+using ::boost::regex_constants::basic;
+using ::boost::regex_constants::extended;
+using ::boost::regex_constants::awk;
+using ::boost::regex_constants::grep;
+using ::boost::regex_constants::egrep;
+
+using ::boost::regex_constants::match_flag_type;
+using ::boost::regex_constants::match_default;
+using ::boost::regex_constants::match_not_bol;
+using ::boost::regex_constants::match_not_eol;
+using ::boost::regex_constants::match_not_bow;
+using ::boost::regex_constants::match_not_eow;
+using ::boost::regex_constants::match_any;
+using ::boost::regex_constants::match_not_null;
+using ::boost::regex_constants::match_continuous;
+using ::boost::regex_constants::match_prev_avail;
+using ::boost::regex_constants::format_default;
+using ::boost::regex_constants::format_sed;
+using ::boost::regex_constants::format_no_copy;
+using ::boost::regex_constants::format_first_only;
+
+using ::boost::regex_constants::error_type;
+using ::boost::regex_constants::error_collate;
+using ::boost::regex_constants::error_ctype;
+using ::boost::regex_constants::error_escape;
+using ::boost::regex_constants::error_backref;
+using ::boost::regex_constants::error_brack;
+using ::boost::regex_constants::error_paren;
+using ::boost::regex_constants::error_brace;
+using ::boost::regex_constants::error_badbrace;
+using ::boost::regex_constants::error_range;
+using ::boost::regex_constants::error_space;
+using ::boost::regex_constants::error_badrepeat;
+using ::boost::regex_constants::error_complexity;
+using ::boost::regex_constants::error_stack;
+
+} // namespace regex_constants
+
+// [7.6] Class regex_error
+using ::boost::regex_error;
+
+// [7.7] Class template regex_traits
+using ::boost::regex_traits;
+
+// [7.8] Class template basic_regex
+using ::boost::basic_regex;
+using ::boost::regex;
+#ifndef BOOST_NO_WREGEX
+using ::boost::wregex;
+#endif
+
+#if !BOOST_WORKAROUND(__BORLANDC__, < 0x0582)
+// [7.8.6] basic_regex swap
+using ::boost::swap;
+#endif
+
+// [7.9] Class template sub_match
+using ::boost::sub_match;
+
+using ::boost::csub_match;
+#ifndef BOOST_NO_WREGEX
+using ::boost::wcsub_match;
+#endif
+using ::boost::ssub_match;
+#ifndef BOOST_NO_WREGEX
+using ::boost::wssub_match;
+#endif
+
+// [7.10] Class template match_results
+using ::boost::match_results;
+using ::boost::cmatch;
+#ifndef BOOST_NO_WREGEX
+using ::boost::wcmatch;
+#endif
+using ::boost::smatch;
+#ifndef BOOST_NO_WREGEX
+using ::boost::wsmatch;
+#endif
+
+using ::boost::regex_match;
+
+// [7.11.3] Function template regex_search
+using ::boost::regex_search;
+
+// [7.11.4] Function template regex_replace
+using ::boost::regex_replace;
+
+// [7.12.1] Class template regex_iterator
+using ::boost::regex_iterator;
+using ::boost::cregex_iterator;
+#ifndef BOOST_NO_WREGEX
+using ::boost::wcregex_iterator;
+#endif
+using ::boost::sregex_iterator;
+#ifndef BOOST_NO_WREGEX
+using ::boost::wsregex_iterator;
+#endif
+
+// [7.12.2] Class template regex_token_iterator
+using ::boost::regex_token_iterator;
+using ::boost::cregex_token_iterator;
+#ifndef BOOST_NO_WREGEX
+using ::boost::wcregex_token_iterator;
+#endif
+using ::boost::sregex_token_iterator;
+#ifndef BOOST_NO_WREGEX
+using ::boost::wsregex_token_iterator;
+#endif
+
+} } // namespaces
+
+#endif
+
+#endif
diff --git a/boost/boost/tr1/tr1/algorithm b/boost/boost/tr1/tr1/algorithm
new file mode 100644
index 00000000000..9909eb21f9b
--- /dev/null
+++ b/boost/boost/tr1/tr1/algorithm
@@ -0,0 +1,27 @@
+// (C) Copyright John Maddock 2005.
+// 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 exists to prevent std lib headers from accidentally
+// including a TR1 extention header; we must suppress this otherwise
+// we can end up with cyclic dependencies with some std lib implementations.
+//
+#ifndef BOOST_TR1_algorithm_INCLUDED
+# define BOOST_TR1_algorithm_INCLUDED
+# ifndef BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_algorithm_RECURSION
+# endif
+# include <boost/tr1/detail/config.hpp>
+# ifdef BOOST_HAS_INCLUDE_NEXT
+# include_next <algorithm>
+# else
+# include BOOST_TR1_STD_HEADER(algorithm)
+# endif
+# ifdef BOOST_TR1_NO_algorithm_RECURSION
+# undef BOOST_TR1_NO_algorithm_RECURSION
+# undef BOOST_TR1_NO_RECURSION
+# endif
+#endif
+
diff --git a/boost/boost/tr1/tr1/array b/boost/boost/tr1/tr1/array
new file mode 100644
index 00000000000..2fc867d46ad
--- /dev/null
+++ b/boost/boost/tr1/tr1/array
@@ -0,0 +1,22 @@
+// (C) Copyright John Maddock 2005.
+// 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)
+
+
+#if !defined(BOOST_TR1_ARRAY_INCLUDED)
+# define BOOST_TR1_ARRAY_INCLUDED
+# define BOOST_TR1_NO_RECURSION
+# include <boost/tr1/detail/config.hpp>
+# ifdef BOOST_HAS_TR1_ARRAY
+# ifdef BOOST_HAS_INCLUDE_NEXT
+# include_next BOOST_TR1_HEADER(array)
+# else
+# include BOOST_TR1_STD_HEADER(BOOST_TR1_PATH(array))
+# endif
+# else
+# include <boost/tr1/array.hpp>
+# endif
+# undef BOOST_TR1_NO_RECURSION
+#endif
+
diff --git a/boost/boost/tr1/tr1/bcc32/array.h b/boost/boost/tr1/tr1/bcc32/array.h
new file mode 100644
index 00000000000..8897c7147e3
--- /dev/null
+++ b/boost/boost/tr1/tr1/bcc32/array.h
@@ -0,0 +1,13 @@
+// (C) Copyright John Maddock 2005.
+// 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)
+
+//
+// Forwarding header for Borland C++:
+//
+#if !defined(BOOST_TR1_ARRAY_H_INCLUDED)
+# define BOOST_TR1_ARRAY_H_INCLUDED
+# include <array.>
+#endif
+
diff --git a/boost/boost/tr1/tr1/bcc32/random.h b/boost/boost/tr1/tr1/bcc32/random.h
new file mode 100644
index 00000000000..dd17f6fbc8c
--- /dev/null
+++ b/boost/boost/tr1/tr1/bcc32/random.h
@@ -0,0 +1,13 @@
+// (C) Copyright John Maddock 2005.
+// 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)
+
+//
+// Forwarding header for Borland C++:
+//
+#if !defined(BOOST_TR1_RANDOM_H_INCLUDED)
+# define BOOST_TR1_RANDOM_H_INCLUDED
+# include <random.>
+#endif
+
diff --git a/boost/boost/tr1/tr1/bcc32/regex.h b/boost/boost/tr1/tr1/bcc32/regex.h
new file mode 100644
index 00000000000..e3f15a5aa29
--- /dev/null
+++ b/boost/boost/tr1/tr1/bcc32/regex.h
@@ -0,0 +1,13 @@
+// (C) Copyright John Maddock 2005.
+// 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)
+
+//
+// Forwarding header for Borland C++:
+//
+#if !defined(BOOST_TR1_REGEX_H_INCLUDED)
+# define BOOST_TR1_REGEX_H_INCLUDED
+# include <regex.>
+#endif
+
diff --git a/boost/boost/tr1/tr1/bcc32/tuple.h b/boost/boost/tr1/tr1/bcc32/tuple.h
new file mode 100644
index 00000000000..eac88089b6b
--- /dev/null
+++ b/boost/boost/tr1/tr1/bcc32/tuple.h
@@ -0,0 +1,13 @@
+// (C) Copyright John Maddock 2005.
+// 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)
+
+//
+// Forwarding header for Borland C++:
+//
+#if !defined(BOOST_TR1_TUPLE_H_INCLUDED)
+# define BOOST_TR1_TUPLE_H_INCLUDED
+# include <tuple.>
+#endif
+
diff --git a/boost/boost/tr1/tr1/bcc32/type_tra.h b/boost/boost/tr1/tr1/bcc32/type_tra.h
new file mode 100644
index 00000000000..d6fcc2ecf7d
--- /dev/null
+++ b/boost/boost/tr1/tr1/bcc32/type_tra.h
@@ -0,0 +1,13 @@
+// (C) Copyright John Maddock 2005.
+// 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)
+
+//
+// Forwarding header for Borland C++:
+//
+#if !defined(BOOST_TR1_TYPE_TRAITS_H_INCLUDED)
+# define BOOST_TR1_TYPE_TRAITS_H_INCLUDED
+# include <type_traits.>
+#endif
+
diff --git a/boost/boost/tr1/tr1/bitset b/boost/boost/tr1/tr1/bitset
new file mode 100644
index 00000000000..0cfa7077e29
--- /dev/null
+++ b/boost/boost/tr1/tr1/bitset
@@ -0,0 +1,27 @@
+// (C) Copyright John Maddock 2005.
+// 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 exists to prevent std lib headers from accidentally
+// including a TR1 extention header; we must suppress this otherwise
+// we can end up with cyclic dependencies with some std lib implementations.
+//
+#ifndef BOOST_TR1_bitset_INCLUDED
+# define BOOST_TR1_bitset_INCLUDED
+# ifndef BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_bitset_RECURSION
+# endif
+# include <boost/tr1/detail/config.hpp>
+# ifdef BOOST_HAS_INCLUDE_NEXT
+# include_next <bitset>
+# else
+# include BOOST_TR1_STD_HEADER(bitset)
+# endif
+# ifdef BOOST_TR1_NO_bitset_RECURSION
+# undef BOOST_TR1_NO_bitset_RECURSION
+# undef BOOST_TR1_NO_RECURSION
+# endif
+#endif
+
diff --git a/boost/boost/tr1/tr1/complex b/boost/boost/tr1/tr1/complex
new file mode 100644
index 00000000000..882d0069ccb
--- /dev/null
+++ b/boost/boost/tr1/tr1/complex
@@ -0,0 +1,31 @@
+// (C) Copyright John Maddock 2005.
+// 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)
+
+
+#ifndef BOOST_TR1_COMPLEX_INCLUDED
+# define BOOST_TR1_COMPLEX_INCLUDED
+# ifndef BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_COMPLEX_RECURSION
+# endif
+# include <boost/tr1/detail/config.hpp>
+# ifdef BOOST_HAS_INCLUDE_NEXT
+# include_next <complex>
+# else
+# include BOOST_TR1_STD_HEADER(complex)
+# endif
+# ifdef BOOST_TR1_NO_COMPLEX_RECURSION
+# undef BOOST_TR1_NO_COMPLEX_RECURSION
+# undef BOOST_TR1_NO_RECURSION
+# endif
+#endif
+
+#if !defined(BOOST_TR1_FULL_COMPLEX_INCLUDED) && !defined(BOOST_TR1_NO_RECURSION)
+# define BOOST_TR1_FULL_COMPLEX_INCLUDED
+# define BOOST_TR1_NO_RECURSION
+# include <boost/tr1/complex.hpp>
+# undef BOOST_TR1_NO_RECURSION
+#endif
+
diff --git a/boost/boost/tr1/tr1/deque b/boost/boost/tr1/tr1/deque
new file mode 100644
index 00000000000..7c2e006f8a6
--- /dev/null
+++ b/boost/boost/tr1/tr1/deque
@@ -0,0 +1,27 @@
+// (C) Copyright John Maddock 2005.
+// 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 exists to prevent std lib headers from accidentally
+// including a TR1 extention header; we must suppress this otherwise
+// we can end up with cyclic dependencies with some std lib implementations.
+//
+#ifndef BOOST_TR1_deque_INCLUDED
+# define BOOST_TR1_deque_INCLUDED
+# ifndef BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_deque_RECURSION
+# endif
+# include <boost/tr1/detail/config.hpp>
+# ifdef BOOST_HAS_INCLUDE_NEXT
+# include_next <deque>
+# else
+# include BOOST_TR1_STD_HEADER(deque)
+# endif
+# ifdef BOOST_TR1_NO_deque_RECURSION
+# undef BOOST_TR1_NO_deque_RECURSION
+# undef BOOST_TR1_NO_RECURSION
+# endif
+#endif
+
diff --git a/boost/boost/tr1/tr1/exception b/boost/boost/tr1/tr1/exception
new file mode 100644
index 00000000000..8b2b641cf5e
--- /dev/null
+++ b/boost/boost/tr1/tr1/exception
@@ -0,0 +1,39 @@
+// (C) Copyright John Maddock 2005.
+// 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 exists to prevent std lib headers from accidentally
+// including a TR1 extention header; we must suppress this otherwise
+// we can end up with cyclic dependencies with some std lib implementations.
+//
+// Important: there are no include guards on this header for Borland C++
+// The Borland version of <exception> has some peculiar circular dependencies
+// that requires multiple inclusion. Likewise for gcc (gcc-2.95.3 fix).
+//
+#ifdef BOOST_TR1_NO_exception_RECURSION2
+# define BOOST_TR1_NO_exception_RECURSION3
+#elif defined(BOOST_TR1_NO_exception_RECURSION)
+# define BOOST_TR1_NO_exception_RECURSION2
+#elif !defined(BOOST_TR1_NO_RECURSION)
+# define BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_exception_RECURSION
+#endif
+
+# include <boost/tr1/detail/config.hpp>
+# ifdef BOOST_HAS_INCLUDE_NEXT
+# include_next <exception>
+# else
+# include BOOST_TR1_STD_HEADER(exception)
+# endif
+
+#ifdef BOOST_TR1_NO_exception_RECURSION3
+# undef BOOST_TR1_NO_exception_RECURSION3
+#elif defined(BOOST_TR1_NO_exception_RECURSION2)
+# undef BOOST_TR1_NO_exception_RECURSION2
+#elif defined(BOOST_TR1_NO_exception_RECURSION)
+# undef BOOST_TR1_NO_exception_RECURSION
+# undef BOOST_TR1_NO_RECURSION
+#endif
+
+
diff --git a/boost/boost/tr1/tr1/fstream b/boost/boost/tr1/tr1/fstream
new file mode 100644
index 00000000000..73466843850
--- /dev/null
+++ b/boost/boost/tr1/tr1/fstream
@@ -0,0 +1,27 @@
+// (C) Copyright John Maddock 2005.
+// 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 exists to prevent std lib headers from accidentally
+// including a TR1 extention header; we must suppress this otherwise
+// we can end up with cyclic dependencies with some std lib implementations.
+//
+#ifndef BOOST_TR1_fstream_INCLUDED
+# define BOOST_TR1_fstream_INCLUDED
+# ifndef BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_fstream_RECURSION
+# endif
+# include <boost/tr1/detail/config.hpp>
+# ifdef BOOST_HAS_INCLUDE_NEXT
+# include_next <fstream>
+# else
+# include BOOST_TR1_STD_HEADER(fstream)
+# endif
+# ifdef BOOST_TR1_NO_fstream_RECURSION
+# undef BOOST_TR1_NO_fstream_RECURSION
+# undef BOOST_TR1_NO_RECURSION
+# endif
+#endif
+
diff --git a/boost/boost/tr1/tr1/functional b/boost/boost/tr1/tr1/functional
new file mode 100644
index 00000000000..3816976c11e
--- /dev/null
+++ b/boost/boost/tr1/tr1/functional
@@ -0,0 +1,30 @@
+// (C) Copyright John Maddock 2005.
+// 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)
+
+#if !defined(BOOST_TR1_FUNCTIONAL_INCLUDED)
+# define BOOST_TR1_FUNCTIONAL_INCLUDED
+# ifndef BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_FUNCTIONAL_RECURSION
+# endif
+# include <boost/tr1/detail/config.hpp>
+# ifdef BOOST_HAS_INCLUDE_NEXT
+# include_next <functional>
+# else
+# include BOOST_TR1_STD_HEADER(functional)
+# endif
+# ifdef BOOST_TR1_NO_FUNCTIONAL_RECURSION
+# undef BOOST_TR1_NO_FUNCTIONAL_RECURSION
+# undef BOOST_TR1_NO_RECURSION
+# endif
+#endif
+
+#if !defined(BOOST_TR1_FULL_FUNCTIONAL_INCLUDED) && !defined(BOOST_TR1_NO_RECURSION)
+# define BOOST_TR1_FULL_FUNCTIONAL_INCLUDED
+# define BOOST_TR1_NO_RECURSION
+# include <boost/tr1/functional.hpp>
+# undef BOOST_TR1_NO_RECURSION
+#endif
+
diff --git a/boost/boost/tr1/tr1/iomanip b/boost/boost/tr1/tr1/iomanip
new file mode 100644
index 00000000000..613ae290baf
--- /dev/null
+++ b/boost/boost/tr1/tr1/iomanip
@@ -0,0 +1,27 @@
+// (C) Copyright John Maddock 2005.
+// 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 exists to prevent std lib headers from accidentally
+// including a TR1 extention header; we must suppress this otherwise
+// we can end up with cyclic dependencies with some std lib implementations.
+//
+#ifndef BOOST_TR1_iomanip_INCLUDED
+# define BOOST_TR1_iomanip_INCLUDED
+# ifndef BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_iomanip_RECURSION
+# endif
+# include <boost/tr1/detail/config.hpp>
+# ifdef BOOST_HAS_INCLUDE_NEXT
+# include_next <iomanip>
+# else
+# include BOOST_TR1_STD_HEADER(iomanip)
+# endif
+# ifdef BOOST_TR1_NO_iomanip_RECURSION
+# undef BOOST_TR1_NO_iomanip_RECURSION
+# undef BOOST_TR1_NO_RECURSION
+# endif
+#endif
+
diff --git a/boost/boost/tr1/tr1/ios b/boost/boost/tr1/tr1/ios
new file mode 100644
index 00000000000..41359c4ad14
--- /dev/null
+++ b/boost/boost/tr1/tr1/ios
@@ -0,0 +1,27 @@
+// (C) Copyright John Maddock 2005.
+// 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 exists to prevent std lib headers from accidentally
+// including a TR1 extention header; we must suppress this otherwise
+// we can end up with cyclic dependencies with some std lib implementations.
+//
+#ifndef BOOST_TR1_ios_INCLUDED
+# define BOOST_TR1_ios_INCLUDED
+# ifndef BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_ios_RECURSION
+# endif
+# include <boost/tr1/detail/config.hpp>
+# ifdef BOOST_HAS_INCLUDE_NEXT
+# include_next <ios>
+# else
+# include BOOST_TR1_STD_HEADER(ios)
+# endif
+# ifdef BOOST_TR1_NO_ios_RECURSION
+# undef BOOST_TR1_NO_ios_RECURSION
+# undef BOOST_TR1_NO_RECURSION
+# endif
+#endif
+
diff --git a/boost/boost/tr1/tr1/iostream b/boost/boost/tr1/tr1/iostream
new file mode 100644
index 00000000000..8fa7af52edb
--- /dev/null
+++ b/boost/boost/tr1/tr1/iostream
@@ -0,0 +1,27 @@
+// (C) Copyright John Maddock 2005.
+// 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 exists to prevent std lib headers from accidentally
+// including a TR1 extention header; we must suppress this otherwise
+// we can end up with cyclic dependencies with some std lib implementations.
+//
+#ifndef BOOST_TR1_iostream_INCLUDED
+# define BOOST_TR1_iostream_INCLUDED
+# ifndef BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_iostream_RECURSION
+# endif
+# include <boost/tr1/detail/config.hpp>
+# ifdef BOOST_HAS_INCLUDE_NEXT
+# include_next <iostream>
+# else
+# include BOOST_TR1_STD_HEADER(iostream)
+# endif
+# ifdef BOOST_TR1_NO_iostream_RECURSION
+# undef BOOST_TR1_NO_iostream_RECURSION
+# undef BOOST_TR1_NO_RECURSION
+# endif
+#endif
+
diff --git a/boost/boost/tr1/tr1/istream b/boost/boost/tr1/tr1/istream
new file mode 100644
index 00000000000..2035f96ca5e
--- /dev/null
+++ b/boost/boost/tr1/tr1/istream
@@ -0,0 +1,27 @@
+// (C) Copyright John Maddock 2005.
+// 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 exists to prevent std lib headers from accidentally
+// including a TR1 extention header; we must suppress this otherwise
+// we can end up with cyclic dependencies with some std lib implementations.
+//
+#ifndef BOOST_TR1_istream_INCLUDED
+# define BOOST_TR1_istream_INCLUDED
+# ifndef BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_istream_RECURSION
+# endif
+# include <boost/tr1/detail/config.hpp>
+# ifdef BOOST_HAS_INCLUDE_NEXT
+# include_next <istream>
+# else
+# include BOOST_TR1_STD_HEADER(istream)
+# endif
+# ifdef BOOST_TR1_NO_istream_RECURSION
+# undef BOOST_TR1_NO_istream_RECURSION
+# undef BOOST_TR1_NO_RECURSION
+# endif
+#endif
+
diff --git a/boost/boost/tr1/tr1/iterator b/boost/boost/tr1/tr1/iterator
new file mode 100644
index 00000000000..a03235f6409
--- /dev/null
+++ b/boost/boost/tr1/tr1/iterator
@@ -0,0 +1,27 @@
+// (C) Copyright John Maddock 2005.
+// 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 exists to prevent std lib headers from accidentally
+// including a TR1 extention header; we must suppress this otherwise
+// we can end up with cyclic dependencies with some std lib implementations.
+//
+#ifndef BOOST_TR1_iterator_INCLUDED
+# define BOOST_TR1_iterator_INCLUDED
+# ifndef BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_iterator_RECURSION
+# endif
+# include <boost/tr1/detail/config.hpp>
+# ifdef BOOST_HAS_INCLUDE_NEXT
+# include_next <iterator>
+# else
+# include BOOST_TR1_STD_HEADER(iterator)
+# endif
+# ifdef BOOST_TR1_NO_iterator_RECURSION
+# undef BOOST_TR1_NO_iterator_RECURSION
+# undef BOOST_TR1_NO_RECURSION
+# endif
+#endif
+
diff --git a/boost/boost/tr1/tr1/limits b/boost/boost/tr1/tr1/limits
new file mode 100644
index 00000000000..b23b36ca215
--- /dev/null
+++ b/boost/boost/tr1/tr1/limits
@@ -0,0 +1,27 @@
+// (C) Copyright John Maddock 2005.
+// 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 exists to prevent std lib headers from accidentally
+// including a TR1 extention header; we must suppress this otherwise
+// we can end up with cyclic dependencies with some std lib implementations.
+//
+#ifndef BOOST_TR1_limits_INCLUDED
+# define BOOST_TR1_limits_INCLUDED
+# ifndef BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_limits_RECURSION
+# endif
+# include <boost/tr1/detail/config.hpp>
+# ifdef BOOST_HAS_INCLUDE_NEXT
+# include_next <limits>
+# else
+# include BOOST_TR1_STD_HEADER(limits)
+# endif
+# ifdef BOOST_TR1_NO_limits_RECURSION
+# undef BOOST_TR1_NO_limits_RECURSION
+# undef BOOST_TR1_NO_RECURSION
+# endif
+#endif
+
diff --git a/boost/boost/tr1/tr1/list b/boost/boost/tr1/tr1/list
new file mode 100644
index 00000000000..95bbb06c77c
--- /dev/null
+++ b/boost/boost/tr1/tr1/list
@@ -0,0 +1,27 @@
+// (C) Copyright John Maddock 2005.
+// 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 exists to prevent std lib headers from accidentally
+// including a TR1 extention header; we must suppress this otherwise
+// we can end up with cyclic dependencies with some std lib implementations.
+//
+#ifndef BOOST_TR1_list_INCLUDED
+# define BOOST_TR1_list_INCLUDED
+# ifndef BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_list_RECURSION
+# endif
+# include <boost/tr1/detail/config.hpp>
+# ifdef BOOST_HAS_INCLUDE_NEXT
+# include_next <list>
+# else
+# include BOOST_TR1_STD_HEADER(list)
+# endif
+# ifdef BOOST_TR1_NO_list_RECURSION
+# undef BOOST_TR1_NO_list_RECURSION
+# undef BOOST_TR1_NO_RECURSION
+# endif
+#endif
+
diff --git a/boost/boost/tr1/tr1/locale b/boost/boost/tr1/tr1/locale
new file mode 100644
index 00000000000..6a77243946c
--- /dev/null
+++ b/boost/boost/tr1/tr1/locale
@@ -0,0 +1,27 @@
+// (C) Copyright John Maddock 2005.
+// 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 exists to prevent std lib headers from accidentally
+// including a TR1 extention header; we must suppress this otherwise
+// we can end up with cyclic dependencies with some std lib implementations.
+//
+#ifndef BOOST_TR1_locale_INCLUDED
+# define BOOST_TR1_locale_INCLUDED
+# ifndef BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_locale_RECURSION
+# endif
+# include <boost/tr1/detail/config.hpp>
+# ifdef BOOST_HAS_INCLUDE_NEXT
+# include_next <locale>
+# else
+# include BOOST_TR1_STD_HEADER(locale)
+# endif
+# ifdef BOOST_TR1_NO_locale_RECURSION
+# undef BOOST_TR1_NO_locale_RECURSION
+# undef BOOST_TR1_NO_RECURSION
+# endif
+#endif
+
diff --git a/boost/boost/tr1/tr1/map b/boost/boost/tr1/tr1/map
new file mode 100644
index 00000000000..cb5a850307c
--- /dev/null
+++ b/boost/boost/tr1/tr1/map
@@ -0,0 +1,27 @@
+// (C) Copyright John Maddock 2005.
+// 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 exists to prevent std lib headers from accidentally
+// including a TR1 extention header; we must suppress this otherwise
+// we can end up with cyclic dependencies with some std lib implementations.
+//
+#ifndef BOOST_TR1_map_INCLUDED
+# define BOOST_TR1_map_INCLUDED
+# ifndef BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_map_RECURSION
+# endif
+# include <boost/tr1/detail/config.hpp>
+# ifdef BOOST_HAS_INCLUDE_NEXT
+# include_next <map>
+# else
+# include BOOST_TR1_STD_HEADER(map)
+# endif
+# ifdef BOOST_TR1_NO_map_RECURSION
+# undef BOOST_TR1_NO_map_RECURSION
+# undef BOOST_TR1_NO_RECURSION
+# endif
+#endif
+
diff --git a/boost/boost/tr1/tr1/memory b/boost/boost/tr1/tr1/memory
new file mode 100644
index 00000000000..151a0d7128f
--- /dev/null
+++ b/boost/boost/tr1/tr1/memory
@@ -0,0 +1,31 @@
+// (C) Copyright John Maddock 2005.
+// 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)
+
+
+#ifndef BOOST_TR1_MEMORY_INCLUDED
+# define BOOST_TR1_MEMORY_INCLUDED
+# ifndef BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_MEMORY_RECURSION
+# endif
+# include <boost/tr1/detail/config.hpp>
+# ifdef BOOST_HAS_INCLUDE_NEXT
+# include_next <memory>
+# else
+# include BOOST_TR1_STD_HEADER(memory)
+# endif
+# ifdef BOOST_TR1_NO_MEMORY_RECURSION
+# undef BOOST_TR1_NO_MEMORY_RECURSION
+# undef BOOST_TR1_NO_RECURSION
+# endif
+#endif
+
+#if !defined(BOOST_TR1_FULL_MEMORY_INCLUDED) && !defined(BOOST_TR1_NO_RECURSION)
+# define BOOST_TR1_FULL_MEMORY_INCLUDED
+# define BOOST_TR1_NO_RECURSION
+# include <boost/tr1/memory.hpp>
+# undef BOOST_TR1_NO_RECURSION
+#endif
+
diff --git a/boost/boost/tr1/tr1/new b/boost/boost/tr1/tr1/new
new file mode 100644
index 00000000000..9f829e048ff
--- /dev/null
+++ b/boost/boost/tr1/tr1/new
@@ -0,0 +1,35 @@
+// (C) Copyright John Maddock 2005.
+// 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 exists to prevent std lib headers from accidentally
+// including a TR1 extention header; we must suppress this otherwise
+// we can end up with cyclic dependencies with some std lib implementations.
+//
+#ifdef BOOST_TR1_NO_new_RECURSION2
+# define BOOST_TR1_NO_new_RECURSION3
+#elif defined(BOOST_TR1_NO_new_RECURSION)
+# define BOOST_TR1_NO_new_RECURSION2
+#elif !defined(BOOST_TR1_NO_RECURSION)
+# define BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_new_RECURSION
+#endif
+
+# include <boost/tr1/detail/config.hpp>
+# ifdef BOOST_HAS_INCLUDE_NEXT
+# include_next <new>
+# else
+# include BOOST_TR1_STD_HEADER(new)
+# endif
+
+#ifdef BOOST_TR1_NO_new_RECURSION3
+# undef BOOST_TR1_NO_new_RECURSION2
+#elif defined(BOOST_TR1_NO_new_RECURSION2)
+# undef BOOST_TR1_NO_new_RECURSION2
+#elif defined(BOOST_TR1_NO_new_RECURSION)
+# undef BOOST_TR1_NO_new_RECURSION
+# undef BOOST_TR1_NO_RECURSION
+#endif
+
+
diff --git a/boost/boost/tr1/tr1/numeric b/boost/boost/tr1/tr1/numeric
new file mode 100644
index 00000000000..ec9ca1179f4
--- /dev/null
+++ b/boost/boost/tr1/tr1/numeric
@@ -0,0 +1,27 @@
+// (C) Copyright John Maddock 2005.
+// 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 exists to prevent std lib headers from accidentally
+// including a TR1 extention header; we must suppress this otherwise
+// we can end up with cyclic dependencies with some std lib implementations.
+//
+#ifndef BOOST_TR1_numeric_INCLUDED
+# define BOOST_TR1_numeric_INCLUDED
+# ifndef BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_numeric_RECURSION
+# endif
+# include <boost/tr1/detail/config.hpp>
+# ifdef BOOST_HAS_INCLUDE_NEXT
+# include_next <numeric>
+# else
+# include BOOST_TR1_STD_HEADER(numeric)
+# endif
+# ifdef BOOST_TR1_NO_numeric_RECURSION
+# undef BOOST_TR1_NO_numeric_RECURSION
+# undef BOOST_TR1_NO_RECURSION
+# endif
+#endif
+
diff --git a/boost/boost/tr1/tr1/ostream b/boost/boost/tr1/tr1/ostream
new file mode 100644
index 00000000000..7f7b5d31651
--- /dev/null
+++ b/boost/boost/tr1/tr1/ostream
@@ -0,0 +1,27 @@
+// (C) Copyright John Maddock 2005.
+// 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 exists to prevent std lib headers from accidentally
+// including a TR1 extention header; we must suppress this otherwise
+// we can end up with cyclic dependencies with some std lib implementations.
+//
+#ifndef BOOST_TR1_ostream_INCLUDED
+# define BOOST_TR1_ostream_INCLUDED
+# ifndef BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_ostream_RECURSION
+# endif
+# include <boost/tr1/detail/config.hpp>
+# ifdef BOOST_HAS_INCLUDE_NEXT
+# include_next <ostream>
+# else
+# include BOOST_TR1_STD_HEADER(ostream)
+# endif
+# ifdef BOOST_TR1_NO_ostream_RECURSION
+# undef BOOST_TR1_NO_ostream_RECURSION
+# undef BOOST_TR1_NO_RECURSION
+# endif
+#endif
+
diff --git a/boost/boost/tr1/tr1/queue b/boost/boost/tr1/tr1/queue
new file mode 100644
index 00000000000..c70642525b0
--- /dev/null
+++ b/boost/boost/tr1/tr1/queue
@@ -0,0 +1,27 @@
+// (C) Copyright John Maddock 2005.
+// 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 exists to prevent std lib headers from accidentally
+// including a TR1 extention header; we must suppress this otherwise
+// we can end up with cyclic dependencies with some std lib implementations.
+//
+#ifndef BOOST_TR1_queue_INCLUDED
+# define BOOST_TR1_queue_INCLUDED
+# ifndef BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_queue_RECURSION
+# endif
+# include <boost/tr1/detail/config.hpp>
+# ifdef BOOST_HAS_INCLUDE_NEXT
+# include_next <queue>
+# else
+# include BOOST_TR1_STD_HEADER(queue)
+# endif
+# ifdef BOOST_TR1_NO_queue_RECURSION
+# undef BOOST_TR1_NO_queue_RECURSION
+# undef BOOST_TR1_NO_RECURSION
+# endif
+#endif
+
diff --git a/boost/boost/tr1/tr1/random b/boost/boost/tr1/tr1/random
new file mode 100644
index 00000000000..093379901c8
--- /dev/null
+++ b/boost/boost/tr1/tr1/random
@@ -0,0 +1,22 @@
+// (C) Copyright John Maddock 2005.
+// 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)
+
+
+#ifndef BOOST_TR1_RANDOM_INCLUDED
+# define BOOST_TR1_RANDOM_INCLUDED
+# define BOOST_TR1_NO_RECURSION
+# include <boost/tr1/detail/config.hpp>
+# ifdef BOOST_HAS_TR1_RANDOM
+# ifdef BOOST_HAS_INCLUDE_NEXT
+# include_next BOOST_TR1_HEADER(random)
+# else
+# include BOOST_TR1_STD_HEADER(BOOST_TR1_PATH(random))
+# endif
+# else
+# include <boost/tr1/random.hpp>
+# endif
+# undef BOOST_TR1_NO_RECURSION
+#endif
+
diff --git a/boost/boost/tr1/tr1/regex b/boost/boost/tr1/tr1/regex
new file mode 100644
index 00000000000..a9c4625e403
--- /dev/null
+++ b/boost/boost/tr1/tr1/regex
@@ -0,0 +1,22 @@
+// (C) Copyright John Maddock 2005.
+// 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)
+
+
+#ifndef BOOST_TR1_REGEX_INCLUDED
+# define BOOST_TR1_REGEX_INCLUDED
+# define BOOST_TR1_NO_RECURSION
+# include <boost/tr1/detail/config.hpp>
+# ifdef BOOST_HAS_TR1_REGEX
+# ifdef BOOST_HAS_INCLUDE_NEXT
+# include_next BOOST_TR1_HEADER(regex)
+# else
+# include BOOST_TR1_STD_HEADER(BOOST_TR1_PATH(regex))
+# endif
+# else
+# include <boost/tr1/regex.hpp>
+# endif
+# undef BOOST_TR1_NO_RECURSION
+#endif
+
diff --git a/boost/boost/tr1/tr1/set b/boost/boost/tr1/tr1/set
new file mode 100644
index 00000000000..f93960e01a6
--- /dev/null
+++ b/boost/boost/tr1/tr1/set
@@ -0,0 +1,27 @@
+// (C) Copyright John Maddock 2005.
+// 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 exists to prevent std lib headers from accidentally
+// including a TR1 extention header; we must suppress this otherwise
+// we can end up with cyclic dependencies with some std lib implementations.
+//
+#ifndef BOOST_TR1_set_INCLUDED
+# define BOOST_TR1_set_INCLUDED
+# ifndef BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_set_RECURSION
+# endif
+# include <boost/tr1/detail/config.hpp>
+# ifdef BOOST_HAS_INCLUDE_NEXT
+# include_next <set>
+# else
+# include BOOST_TR1_STD_HEADER(set)
+# endif
+# ifdef BOOST_TR1_NO_set_RECURSION
+# undef BOOST_TR1_NO_set_RECURSION
+# undef BOOST_TR1_NO_RECURSION
+# endif
+#endif
+
diff --git a/boost/boost/tr1/tr1/sstream b/boost/boost/tr1/tr1/sstream
new file mode 100644
index 00000000000..68c857074a0
--- /dev/null
+++ b/boost/boost/tr1/tr1/sstream
@@ -0,0 +1,27 @@
+// (C) Copyright John Maddock 2005.
+// 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 exists to prevent std lib headers from accidentally
+// including a TR1 extention header; we must suppress this otherwise
+// we can end up with cyclic dependencies with some std lib implementations.
+//
+#ifndef BOOST_TR1_sstream_INCLUDED
+# define BOOST_TR1_sstream_INCLUDED
+# ifndef BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_sstream_RECURSION
+# endif
+# include <boost/tr1/detail/config.hpp>
+# ifdef BOOST_HAS_INCLUDE_NEXT
+# include_next <sstream>
+# else
+# include BOOST_TR1_STD_HEADER(sstream)
+# endif
+# ifdef BOOST_TR1_NO_sstream_RECURSION
+# undef BOOST_TR1_NO_sstream_RECURSION
+# undef BOOST_TR1_NO_RECURSION
+# endif
+#endif
+
diff --git a/boost/boost/tr1/tr1/stack b/boost/boost/tr1/tr1/stack
new file mode 100644
index 00000000000..ff78ef98110
--- /dev/null
+++ b/boost/boost/tr1/tr1/stack
@@ -0,0 +1,27 @@
+// (C) Copyright John Maddock 2005.
+// 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 exists to prevent std lib headers from accidentally
+// including a TR1 extention header; we must suppress this otherwise
+// we can end up with cyclic dependencies with some std lib implementations.
+//
+#ifndef BOOST_TR1_stack_INCLUDED
+# define BOOST_TR1_stack_INCLUDED
+# ifndef BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_stack_RECURSION
+# endif
+# include <boost/tr1/detail/config.hpp>
+# ifdef BOOST_HAS_INCLUDE_NEXT
+# include_next <stack>
+# else
+# include BOOST_TR1_STD_HEADER(stack)
+# endif
+# ifdef BOOST_TR1_NO_stack_RECURSION
+# undef BOOST_TR1_NO_stack_RECURSION
+# undef BOOST_TR1_NO_RECURSION
+# endif
+#endif
+
diff --git a/boost/boost/tr1/tr1/stdexcept b/boost/boost/tr1/tr1/stdexcept
new file mode 100644
index 00000000000..150ca804f42
--- /dev/null
+++ b/boost/boost/tr1/tr1/stdexcept
@@ -0,0 +1,34 @@
+// (C) Copyright John Maddock 2005.
+// 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 exists to prevent std lib headers from accidentally
+// including a TR1 extention header; we must suppress this otherwise
+// we can end up with cyclic dependencies with some std lib implementations.
+//
+#ifdef BOOST_TR1_NO_stdexcept_RECURSION2
+# define BOOST_TR1_NO_stdexcept_RECURSION3
+#elif defined(BOOST_TR1_NO_stdexcept_RECURSION)
+# define BOOST_TR1_NO_stdexcept_RECURSION2
+#elif !defined(BOOST_TR1_NO_RECURSION)
+# define BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_stdexcept_RECURSION
+#endif
+
+# include <boost/tr1/detail/config.hpp>
+# ifdef BOOST_HAS_INCLUDE_NEXT
+# include_next <stdexcept>
+# else
+# include BOOST_TR1_STD_HEADER(stdexcept)
+# endif
+
+#ifdef BOOST_TR1_NO_stdexcept_RECURSION3
+# undef BOOST_TR1_NO_stdexcept_RECURSION3
+#elif defined(BOOST_TR1_NO_stdexcept_RECURSION2)
+# undef BOOST_TR1_NO_stdexcept_RECURSION2
+#elif defined(BOOST_TR1_NO_stdexcept_RECURSION)
+# undef BOOST_TR1_NO_stdexcept_RECURSION
+# undef BOOST_TR1_NO_RECURSION
+#endif
+
diff --git a/boost/boost/tr1/tr1/streambuf b/boost/boost/tr1/tr1/streambuf
new file mode 100644
index 00000000000..75b7e463fdb
--- /dev/null
+++ b/boost/boost/tr1/tr1/streambuf
@@ -0,0 +1,27 @@
+// (C) Copyright John Maddock 2005.
+// 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 exists to prevent std lib headers from accidentally
+// including a TR1 extention header; we must suppress this otherwise
+// we can end up with cyclic dependencies with some std lib implementations.
+//
+#ifndef BOOST_TR1_streambuf_INCLUDED
+# define BOOST_TR1_streambuf_INCLUDED
+# ifndef BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_streambuf_RECURSION
+# endif
+# include <boost/tr1/detail/config.hpp>
+# ifdef BOOST_HAS_INCLUDE_NEXT
+# include_next <streambuf>
+# else
+# include BOOST_TR1_STD_HEADER(streambuf)
+# endif
+# ifdef BOOST_TR1_NO_streambuf_RECURSION
+# undef BOOST_TR1_NO_streambuf_RECURSION
+# undef BOOST_TR1_NO_RECURSION
+# endif
+#endif
+
diff --git a/boost/boost/tr1/tr1/string b/boost/boost/tr1/tr1/string
new file mode 100644
index 00000000000..7fe989d729a
--- /dev/null
+++ b/boost/boost/tr1/tr1/string
@@ -0,0 +1,27 @@
+// (C) Copyright John Maddock 2005.
+// 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 exists to prevent std lib headers from accidentally
+// including a TR1 extention header; we must suppress this otherwise
+// we can end up with cyclic dependencies with some std lib implementations.
+//
+#ifndef BOOST_TR1_string_INCLUDED
+# define BOOST_TR1_string_INCLUDED
+# ifndef BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_string_RECURSION
+# endif
+# include <boost/tr1/detail/config.hpp>
+# ifdef BOOST_HAS_INCLUDE_NEXT
+# include_next <string>
+# else
+# include BOOST_TR1_STD_HEADER(string)
+# endif
+# ifdef BOOST_TR1_NO_string_RECURSION
+# undef BOOST_TR1_NO_string_RECURSION
+# undef BOOST_TR1_NO_RECURSION
+# endif
+#endif
+
diff --git a/boost/boost/tr1/tr1/strstream b/boost/boost/tr1/tr1/strstream
new file mode 100644
index 00000000000..12969ad6e9a
--- /dev/null
+++ b/boost/boost/tr1/tr1/strstream
@@ -0,0 +1,27 @@
+// (C) Copyright John Maddock 2005.
+// 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 exists to prevent std lib headers from accidentally
+// including a TR1 extention header; we must suppress this otherwise
+// we can end up with cyclic dependencies with some std lib implementations.
+//
+#ifndef BOOST_TR1_strstream_INCLUDED
+# define BOOST_TR1_strstream_INCLUDED
+# ifndef BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_strstream_RECURSION
+# endif
+# include <boost/tr1/detail/config.hpp>
+# ifdef BOOST_HAS_INCLUDE_NEXT
+# include_next <strstream>
+# else
+# include BOOST_TR1_STD_HEADER(strstream)
+# endif
+# ifdef BOOST_TR1_NO_strstream_RECURSION
+# undef BOOST_TR1_NO_strstream_RECURSION
+# undef BOOST_TR1_NO_RECURSION
+# endif
+#endif
+
diff --git a/boost/boost/tr1/tr1/sun/algorithm.SUNWCCh b/boost/boost/tr1/tr1/sun/algorithm.SUNWCCh
new file mode 100644
index 00000000000..d4e9be54764
--- /dev/null
+++ b/boost/boost/tr1/tr1/sun/algorithm.SUNWCCh
@@ -0,0 +1,6 @@
+// (C) Copyright John Maddock 2006.
+// 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)
+#include "../algorithm"
+
diff --git a/boost/boost/tr1/tr1/sun/array.SUNWCCh b/boost/boost/tr1/tr1/sun/array.SUNWCCh
new file mode 100644
index 00000000000..580fc874d0d
--- /dev/null
+++ b/boost/boost/tr1/tr1/sun/array.SUNWCCh
@@ -0,0 +1,6 @@
+// (C) Copyright John Maddock 2006.
+// 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)
+#include "../array"
+
diff --git a/boost/boost/tr1/tr1/sun/bcc32.SUNWCCh b/boost/boost/tr1/tr1/sun/bcc32.SUNWCCh
new file mode 100644
index 00000000000..1df698ecc64
--- /dev/null
+++ b/boost/boost/tr1/tr1/sun/bcc32.SUNWCCh
@@ -0,0 +1,6 @@
+// (C) Copyright John Maddock 2006.
+// 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)
+#include "../bcc32"
+
diff --git a/boost/boost/tr1/tr1/sun/bitset.SUNWCCh b/boost/boost/tr1/tr1/sun/bitset.SUNWCCh
new file mode 100644
index 00000000000..9768a406759
--- /dev/null
+++ b/boost/boost/tr1/tr1/sun/bitset.SUNWCCh
@@ -0,0 +1,6 @@
+// (C) Copyright John Maddock 2006.
+// 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)
+#include "../bitset"
+
diff --git a/boost/boost/tr1/tr1/sun/complex.SUNWCCh b/boost/boost/tr1/tr1/sun/complex.SUNWCCh
new file mode 100644
index 00000000000..7694f6255c4
--- /dev/null
+++ b/boost/boost/tr1/tr1/sun/complex.SUNWCCh
@@ -0,0 +1,6 @@
+// (C) Copyright John Maddock 2006.
+// 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)
+#include "../complex"
+
diff --git a/boost/boost/tr1/tr1/sun/deque.SUNWCCh b/boost/boost/tr1/tr1/sun/deque.SUNWCCh
new file mode 100644
index 00000000000..55b8ba03f0f
--- /dev/null
+++ b/boost/boost/tr1/tr1/sun/deque.SUNWCCh
@@ -0,0 +1,6 @@
+// (C) Copyright John Maddock 2006.
+// 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)
+#include "../deque"
+
diff --git a/boost/boost/tr1/tr1/sun/exception.SUNWCCh b/boost/boost/tr1/tr1/sun/exception.SUNWCCh
new file mode 100644
index 00000000000..32bd2aac003
--- /dev/null
+++ b/boost/boost/tr1/tr1/sun/exception.SUNWCCh
@@ -0,0 +1,6 @@
+// (C) Copyright John Maddock 2006.
+// 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)
+#include "../exception"
+
diff --git a/boost/boost/tr1/tr1/sun/fstream.SUNWCCh b/boost/boost/tr1/tr1/sun/fstream.SUNWCCh
new file mode 100644
index 00000000000..5838672b063
--- /dev/null
+++ b/boost/boost/tr1/tr1/sun/fstream.SUNWCCh
@@ -0,0 +1,6 @@
+// (C) Copyright John Maddock 2006.
+// 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)
+#include "../fstream"
+
diff --git a/boost/boost/tr1/tr1/sun/functional.SUNWCCh b/boost/boost/tr1/tr1/sun/functional.SUNWCCh
new file mode 100644
index 00000000000..ff409421387
--- /dev/null
+++ b/boost/boost/tr1/tr1/sun/functional.SUNWCCh
@@ -0,0 +1,6 @@
+// (C) Copyright John Maddock 2006.
+// 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)
+#include "../functional"
+
diff --git a/boost/boost/tr1/tr1/sun/iomanip.SUNWCCh b/boost/boost/tr1/tr1/sun/iomanip.SUNWCCh
new file mode 100644
index 00000000000..fb7d563d1da
--- /dev/null
+++ b/boost/boost/tr1/tr1/sun/iomanip.SUNWCCh
@@ -0,0 +1,6 @@
+// (C) Copyright John Maddock 2006.
+// 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)
+#include "../iomanip"
+
diff --git a/boost/boost/tr1/tr1/sun/ios.SUNWCCh b/boost/boost/tr1/tr1/sun/ios.SUNWCCh
new file mode 100644
index 00000000000..a41a90039dc
--- /dev/null
+++ b/boost/boost/tr1/tr1/sun/ios.SUNWCCh
@@ -0,0 +1,6 @@
+// (C) Copyright John Maddock 2006.
+// 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)
+#include "../ios"
+
diff --git a/boost/boost/tr1/tr1/sun/iostream.SUNWCCh b/boost/boost/tr1/tr1/sun/iostream.SUNWCCh
new file mode 100644
index 00000000000..0b121dd9427
--- /dev/null
+++ b/boost/boost/tr1/tr1/sun/iostream.SUNWCCh
@@ -0,0 +1,6 @@
+// (C) Copyright John Maddock 2006.
+// 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)
+#include "../iostream"
+
diff --git a/boost/boost/tr1/tr1/sun/istream.SUNWCCh b/boost/boost/tr1/tr1/sun/istream.SUNWCCh
new file mode 100644
index 00000000000..75bf29109d1
--- /dev/null
+++ b/boost/boost/tr1/tr1/sun/istream.SUNWCCh
@@ -0,0 +1,6 @@
+// (C) Copyright John Maddock 2006.
+// 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)
+#include "../istream"
+
diff --git a/boost/boost/tr1/tr1/sun/iterator.SUNWCCh b/boost/boost/tr1/tr1/sun/iterator.SUNWCCh
new file mode 100644
index 00000000000..1f253ab7d83
--- /dev/null
+++ b/boost/boost/tr1/tr1/sun/iterator.SUNWCCh
@@ -0,0 +1,6 @@
+// (C) Copyright John Maddock 2006.
+// 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)
+#include "../iterator"
+
diff --git a/boost/boost/tr1/tr1/sun/limits.SUNWCCh b/boost/boost/tr1/tr1/sun/limits.SUNWCCh
new file mode 100644
index 00000000000..47017e78ac6
--- /dev/null
+++ b/boost/boost/tr1/tr1/sun/limits.SUNWCCh
@@ -0,0 +1,6 @@
+// (C) Copyright John Maddock 2006.
+// 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)
+#include "../limits"
+
diff --git a/boost/boost/tr1/tr1/sun/list.SUNWCCh b/boost/boost/tr1/tr1/sun/list.SUNWCCh
new file mode 100644
index 00000000000..14b862dffa9
--- /dev/null
+++ b/boost/boost/tr1/tr1/sun/list.SUNWCCh
@@ -0,0 +1,6 @@
+// (C) Copyright John Maddock 2006.
+// 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)
+#include "../list"
+
diff --git a/boost/boost/tr1/tr1/sun/locale.SUNWCCh b/boost/boost/tr1/tr1/sun/locale.SUNWCCh
new file mode 100644
index 00000000000..30b19a9c73f
--- /dev/null
+++ b/boost/boost/tr1/tr1/sun/locale.SUNWCCh
@@ -0,0 +1,6 @@
+// (C) Copyright John Maddock 2006.
+// 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)
+#include "../locale"
+
diff --git a/boost/boost/tr1/tr1/sun/map.SUNWCCh b/boost/boost/tr1/tr1/sun/map.SUNWCCh
new file mode 100644
index 00000000000..b9d954fd3f8
--- /dev/null
+++ b/boost/boost/tr1/tr1/sun/map.SUNWCCh
@@ -0,0 +1,6 @@
+// (C) Copyright John Maddock 2006.
+// 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)
+#include "../map"
+
diff --git a/boost/boost/tr1/tr1/sun/memory.SUNWCCh b/boost/boost/tr1/tr1/sun/memory.SUNWCCh
new file mode 100644
index 00000000000..fdde926994e
--- /dev/null
+++ b/boost/boost/tr1/tr1/sun/memory.SUNWCCh
@@ -0,0 +1,6 @@
+// (C) Copyright John Maddock 2006.
+// 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)
+#include "../memory"
+
diff --git a/boost/boost/tr1/tr1/sun/new.SUNWCCh b/boost/boost/tr1/tr1/sun/new.SUNWCCh
new file mode 100644
index 00000000000..e90b0ab74ee
--- /dev/null
+++ b/boost/boost/tr1/tr1/sun/new.SUNWCCh
@@ -0,0 +1,6 @@
+// (C) Copyright John Maddock 2006.
+// 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)
+#include "../new"
+
diff --git a/boost/boost/tr1/tr1/sun/numeric.SUNWCCh b/boost/boost/tr1/tr1/sun/numeric.SUNWCCh
new file mode 100644
index 00000000000..ad91add454d
--- /dev/null
+++ b/boost/boost/tr1/tr1/sun/numeric.SUNWCCh
@@ -0,0 +1,6 @@
+// (C) Copyright John Maddock 2006.
+// 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)
+#include "../numeric"
+
diff --git a/boost/boost/tr1/tr1/sun/ostream.SUNWCCh b/boost/boost/tr1/tr1/sun/ostream.SUNWCCh
new file mode 100644
index 00000000000..f579d6eaf17
--- /dev/null
+++ b/boost/boost/tr1/tr1/sun/ostream.SUNWCCh
@@ -0,0 +1,6 @@
+// (C) Copyright John Maddock 2006.
+// 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)
+#include "../ostream"
+
diff --git a/boost/boost/tr1/tr1/sun/queue.SUNWCCh b/boost/boost/tr1/tr1/sun/queue.SUNWCCh
new file mode 100644
index 00000000000..ace29241821
--- /dev/null
+++ b/boost/boost/tr1/tr1/sun/queue.SUNWCCh
@@ -0,0 +1,6 @@
+// (C) Copyright John Maddock 2006.
+// 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)
+#include "../queue"
+
diff --git a/boost/boost/tr1/tr1/sun/random.SUNWCCh b/boost/boost/tr1/tr1/sun/random.SUNWCCh
new file mode 100644
index 00000000000..1a9460d5d77
--- /dev/null
+++ b/boost/boost/tr1/tr1/sun/random.SUNWCCh
@@ -0,0 +1,6 @@
+// (C) Copyright John Maddock 2006.
+// 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)
+#include "../random"
+
diff --git a/boost/boost/tr1/tr1/sun/regex.SUNWCCh b/boost/boost/tr1/tr1/sun/regex.SUNWCCh
new file mode 100644
index 00000000000..8a5ee4bc029
--- /dev/null
+++ b/boost/boost/tr1/tr1/sun/regex.SUNWCCh
@@ -0,0 +1,6 @@
+// (C) Copyright John Maddock 2006.
+// 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)
+#include "../regex"
+
diff --git a/boost/boost/tr1/tr1/sun/set.SUNWCCh b/boost/boost/tr1/tr1/sun/set.SUNWCCh
new file mode 100644
index 00000000000..0daa5578726
--- /dev/null
+++ b/boost/boost/tr1/tr1/sun/set.SUNWCCh
@@ -0,0 +1,6 @@
+// (C) Copyright John Maddock 2006.
+// 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)
+#include "../set"
+
diff --git a/boost/boost/tr1/tr1/sun/sstream.SUNWCCh b/boost/boost/tr1/tr1/sun/sstream.SUNWCCh
new file mode 100644
index 00000000000..37e3d097569
--- /dev/null
+++ b/boost/boost/tr1/tr1/sun/sstream.SUNWCCh
@@ -0,0 +1,6 @@
+// (C) Copyright John Maddock 2006.
+// 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)
+#include "../sstream"
+
diff --git a/boost/boost/tr1/tr1/sun/stack.SUNWCCh b/boost/boost/tr1/tr1/sun/stack.SUNWCCh
new file mode 100644
index 00000000000..d05ce63c56a
--- /dev/null
+++ b/boost/boost/tr1/tr1/sun/stack.SUNWCCh
@@ -0,0 +1,6 @@
+// (C) Copyright John Maddock 2006.
+// 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)
+#include "../stack"
+
diff --git a/boost/boost/tr1/tr1/sun/stdexcept.SUNWCCh b/boost/boost/tr1/tr1/sun/stdexcept.SUNWCCh
new file mode 100644
index 00000000000..9405ab8d1cd
--- /dev/null
+++ b/boost/boost/tr1/tr1/sun/stdexcept.SUNWCCh
@@ -0,0 +1,6 @@
+// (C) Copyright John Maddock 2006.
+// 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)
+#include "../stdexcept"
+
diff --git a/boost/boost/tr1/tr1/sun/streambuf.SUNWCCh b/boost/boost/tr1/tr1/sun/streambuf.SUNWCCh
new file mode 100644
index 00000000000..23120869fc8
--- /dev/null
+++ b/boost/boost/tr1/tr1/sun/streambuf.SUNWCCh
@@ -0,0 +1,6 @@
+// (C) Copyright John Maddock 2006.
+// 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)
+#include "../streambuf"
+
diff --git a/boost/boost/tr1/tr1/sun/string.SUNWCCh b/boost/boost/tr1/tr1/sun/string.SUNWCCh
new file mode 100644
index 00000000000..7fcb2a1ab62
--- /dev/null
+++ b/boost/boost/tr1/tr1/sun/string.SUNWCCh
@@ -0,0 +1,6 @@
+// (C) Copyright John Maddock 2006.
+// 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)
+#include "../string"
+
diff --git a/boost/boost/tr1/tr1/sun/strstream.SUNWCCh b/boost/boost/tr1/tr1/sun/strstream.SUNWCCh
new file mode 100644
index 00000000000..8e0b0e53ee7
--- /dev/null
+++ b/boost/boost/tr1/tr1/sun/strstream.SUNWCCh
@@ -0,0 +1,6 @@
+// (C) Copyright John Maddock 2006.
+// 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)
+#include "../strstream"
+
diff --git a/boost/boost/tr1/tr1/sun/sun.SUNWCCh b/boost/boost/tr1/tr1/sun/sun.SUNWCCh
new file mode 100644
index 00000000000..5fc9b461aa1
--- /dev/null
+++ b/boost/boost/tr1/tr1/sun/sun.SUNWCCh
@@ -0,0 +1,6 @@
+// (C) Copyright John Maddock 2006.
+// 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)
+#include "../sun"
+
diff --git a/boost/boost/tr1/tr1/sun/tuple.SUNWCCh b/boost/boost/tr1/tr1/sun/tuple.SUNWCCh
new file mode 100644
index 00000000000..f20bff85d49
--- /dev/null
+++ b/boost/boost/tr1/tr1/sun/tuple.SUNWCCh
@@ -0,0 +1,6 @@
+// (C) Copyright John Maddock 2006.
+// 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)
+#include "../tuple"
+
diff --git a/boost/boost/tr1/tr1/sun/type_traits.SUNWCCh b/boost/boost/tr1/tr1/sun/type_traits.SUNWCCh
new file mode 100644
index 00000000000..0c93c9bf90c
--- /dev/null
+++ b/boost/boost/tr1/tr1/sun/type_traits.SUNWCCh
@@ -0,0 +1,6 @@
+// (C) Copyright John Maddock 2006.
+// 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)
+#include "../type_traits"
+
diff --git a/boost/boost/tr1/tr1/sun/typeinfo.SUNWCCh b/boost/boost/tr1/tr1/sun/typeinfo.SUNWCCh
new file mode 100644
index 00000000000..a583b1106fd
--- /dev/null
+++ b/boost/boost/tr1/tr1/sun/typeinfo.SUNWCCh
@@ -0,0 +1,6 @@
+// (C) Copyright John Maddock 2006.
+// 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)
+#include "../typeinfo"
+
diff --git a/boost/boost/tr1/tr1/sun/utility.SUNWCCh b/boost/boost/tr1/tr1/sun/utility.SUNWCCh
new file mode 100644
index 00000000000..7cbc6e25a5c
--- /dev/null
+++ b/boost/boost/tr1/tr1/sun/utility.SUNWCCh
@@ -0,0 +1,6 @@
+// (C) Copyright John Maddock 2006.
+// 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)
+#include "../utility"
+
diff --git a/boost/boost/tr1/tr1/sun/valarray.SUNWCCh b/boost/boost/tr1/tr1/sun/valarray.SUNWCCh
new file mode 100644
index 00000000000..266caf2d736
--- /dev/null
+++ b/boost/boost/tr1/tr1/sun/valarray.SUNWCCh
@@ -0,0 +1,6 @@
+// (C) Copyright John Maddock 2006.
+// 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)
+#include "../valarray"
+
diff --git a/boost/boost/tr1/tr1/sun/vector.SUNWCCh b/boost/boost/tr1/tr1/sun/vector.SUNWCCh
new file mode 100644
index 00000000000..0e2fc7ffcd2
--- /dev/null
+++ b/boost/boost/tr1/tr1/sun/vector.SUNWCCh
@@ -0,0 +1,6 @@
+// (C) Copyright John Maddock 2006.
+// 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)
+#include "../vector"
+
diff --git a/boost/boost/tr1/tr1/tuple b/boost/boost/tr1/tr1/tuple
new file mode 100644
index 00000000000..43c8d166bb5
--- /dev/null
+++ b/boost/boost/tr1/tr1/tuple
@@ -0,0 +1,22 @@
+// (C) Copyright John Maddock 2005.
+// 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)
+
+
+#ifndef BOOST_TR1_TUPLE_INCLUDED
+# define BOOST_TR1_TUPLE_INCLUDED
+# define BOOST_TR1_NO_RECURSION
+# include <boost/tr1/detail/config.hpp>
+# ifdef BOOST_HAS_TR1_TUPLE
+# ifdef BOOST_HAS_INCLUDE_NEXT
+# include_next BOOST_TR1_HEADER(tuple)
+# else
+# include BOOST_TR1_STD_HEADER(BOOST_TR1_PATH(tuple))
+# endif
+# else
+# include <boost/tr1/tuple.hpp>
+# endif
+# undef BOOST_TR1_NO_RECURSION
+#endif
+
diff --git a/boost/boost/tr1/tr1/type_traits b/boost/boost/tr1/tr1/type_traits
new file mode 100644
index 00000000000..dbf92741521
--- /dev/null
+++ b/boost/boost/tr1/tr1/type_traits
@@ -0,0 +1,20 @@
+// (C) Copyright John Maddock 2005.
+// 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)
+
+
+#ifndef BOOST_TR1_TYPE_TRAITS_INCLUDED
+# define BOOST_TR1_TYPE_TRAITS_INCLUDED
+# include <boost/tr1/detail/config.hpp>
+# ifdef BOOST_HAS_TR1_TYPE_TRAITS
+# ifdef BOOST_HAS_INCLUDE_NEXT
+# include_next BOOST_TR1_HEADER(type_traits)
+# else
+# include BOOST_TR1_STD_HEADER(BOOST_TR1_PATH(type_traits))
+# endif
+# else
+# include <boost/tr1/type_traits.hpp>
+# endif
+#endif
+
diff --git a/boost/boost/tr1/tr1/typeinfo b/boost/boost/tr1/tr1/typeinfo
new file mode 100644
index 00000000000..ad660e1ffec
--- /dev/null
+++ b/boost/boost/tr1/tr1/typeinfo
@@ -0,0 +1,27 @@
+// (C) Copyright John Maddock 2005.
+// 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 exists to prevent std lib headers from accidentally
+// including a TR1 extention header; we must suppress this otherwise
+// we can end up with cyclic dependencies with some std lib implementations.
+//
+#ifndef BOOST_TR1_typeinfo_INCLUDED
+# define BOOST_TR1_typeinfo_INCLUDED
+# ifndef BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_typeinfo_RECURSION
+# endif
+# include <boost/tr1/detail/config.hpp>
+# ifdef BOOST_HAS_INCLUDE_NEXT
+# include_next <typeinfo>
+# else
+# include BOOST_TR1_STD_HEADER(typeinfo)
+# endif
+# ifdef BOOST_TR1_NO_typeinfo_RECURSION
+# undef BOOST_TR1_NO_typeinfo_RECURSION
+# undef BOOST_TR1_NO_RECURSION
+# endif
+#endif
+
diff --git a/boost/boost/tr1/tr1/utility b/boost/boost/tr1/tr1/utility
new file mode 100644
index 00000000000..f2a2e9b66d0
--- /dev/null
+++ b/boost/boost/tr1/tr1/utility
@@ -0,0 +1,31 @@
+// (C) Copyright John Maddock 2005.
+// 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)
+
+
+#if !defined(BOOST_TR1_UTILITY_INCLUDED)
+# define BOOST_TR1_UTILITY_INCLUDED
+# ifndef BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_UTILITY_RECURSION
+# endif
+# include <boost/tr1/detail/config.hpp>
+# ifdef BOOST_HAS_INCLUDE_NEXT
+# include_next <utility>
+# else
+# include BOOST_TR1_STD_HEADER(utility)
+# endif
+# ifdef BOOST_TR1_NO_UTILITY_RECURSION
+# undef BOOST_TR1_NO_RECURSION
+# undef BOOST_TR1_NO_UTILITY_RECURSION
+# endif
+#endif
+
+#if !defined(BOOST_TR1_FULL_UTILITY_INCLUDED) && !defined(BOOST_TR1_NO_RECURSION)
+# define BOOST_TR1_FULL_UTILITY_INCLUDED
+# define BOOST_TR1_NO_RECURSION
+# include <boost/tr1/utility.hpp>
+# undef BOOST_TR1_NO_RECURSION
+#endif
+
diff --git a/boost/boost/tr1/tr1/valarray b/boost/boost/tr1/tr1/valarray
new file mode 100644
index 00000000000..d3c0f80aed5
--- /dev/null
+++ b/boost/boost/tr1/tr1/valarray
@@ -0,0 +1,27 @@
+// (C) Copyright John Maddock 2005.
+// 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 exists to prevent std lib headers from accidentally
+// including a TR1 extention header; we must suppress this otherwise
+// we can end up with cyclic dependencies with some std lib implementations.
+//
+#ifndef BOOST_TR1_valarray_INCLUDED
+# define BOOST_TR1_valarray_INCLUDED
+# ifndef BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_valarray_RECURSION
+# endif
+# include <boost/tr1/detail/config.hpp>
+# ifdef BOOST_HAS_INCLUDE_NEXT
+# include_next <valarray>
+# else
+# include BOOST_TR1_STD_HEADER(valarray)
+# endif
+# ifdef BOOST_TR1_NO_valarray_RECURSION
+# undef BOOST_TR1_NO_valarray_RECURSION
+# undef BOOST_TR1_NO_RECURSION
+# endif
+#endif
+
diff --git a/boost/boost/tr1/tr1/vector b/boost/boost/tr1/tr1/vector
new file mode 100644
index 00000000000..bc9fd312ce1
--- /dev/null
+++ b/boost/boost/tr1/tr1/vector
@@ -0,0 +1,27 @@
+// (C) Copyright John Maddock 2005.
+// 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 exists to prevent std lib headers from accidentally
+// including a TR1 extention header; we must suppress this otherwise
+// we can end up with cyclic dependencies with some std lib implementations.
+//
+#ifndef BOOST_TR1_vector_INCLUDED
+# define BOOST_TR1_vector_INCLUDED
+# ifndef BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_RECURSION
+# define BOOST_TR1_NO_vector_RECURSION
+# endif
+# include <boost/tr1/detail/config.hpp>
+# ifdef BOOST_HAS_INCLUDE_NEXT
+# include_next <vector>
+# else
+# include BOOST_TR1_STD_HEADER(vector)
+# endif
+# ifdef BOOST_TR1_NO_vector_RECURSION
+# undef BOOST_TR1_NO_vector_RECURSION
+# undef BOOST_TR1_NO_RECURSION
+# endif
+#endif
+
diff --git a/boost/boost/tr1/tuple.hpp b/boost/boost/tr1/tuple.hpp
new file mode 100644
index 00000000000..a7e007f32ab
--- /dev/null
+++ b/boost/boost/tr1/tuple.hpp
@@ -0,0 +1,83 @@
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TR1_TUPLE_HPP_INCLUDED
+# define BOOST_TR1_TUPLE_HPP_INCLUDED
+# include <boost/tr1/detail/config.hpp>
+
+#ifdef BOOST_HAS_TR1_TUPLE
+
+# include BOOST_TR1_HEADER(tuple)
+
+#else
+
+#if defined(BOOST_TR1_USE_OLD_TUPLE)
+
+#include <boost/tuple/tuple.hpp>
+#include <boost/tuple/tuple_comparison.hpp>
+#include <boost/type_traits/integral_constant.hpp>
+
+namespace std{ namespace tr1{
+
+using ::boost::tuple;
+
+// [6.1.3.2] Tuple creation functions
+using ::boost::tuples::ignore;
+using ::boost::make_tuple;
+using ::boost::tie;
+
+// [6.1.3.3] Tuple helper classes
+template <class T>
+struct tuple_size
+ : public ::boost::integral_constant
+ < ::std::size_t, ::boost::tuples::length<T>::value>
+{};
+
+template < int I, class T>
+struct tuple_element
+{
+ typedef typename boost::tuples::element<I,T>::type type;
+};
+
+#if !BOOST_WORKAROUND(__BORLANDC__, < 0x0582)
+// [6.1.3.4] Element access
+using ::boost::get;
+#endif
+
+} } // namespaces
+
+#else
+
+#include <boost/spirit/fusion/sequence/tuple.hpp>
+#include <boost/spirit/fusion/sequence/tuple_element.hpp>
+#include <boost/spirit/fusion/sequence/tuple_size.hpp>
+#include <boost/spirit/fusion/sequence/make_tuple.hpp>
+#include <boost/spirit/fusion/sequence/tie.hpp>
+#include <boost/spirit/fusion/sequence/get.hpp>
+#include <boost/spirit/fusion/sequence/equal_to.hpp>
+#include <boost/spirit/fusion/sequence/not_equal_to.hpp>
+#include <boost/spirit/fusion/sequence/less.hpp>
+#include <boost/spirit/fusion/sequence/less_equal.hpp>
+#include <boost/spirit/fusion/sequence/greater.hpp>
+#include <boost/spirit/fusion/sequence/greater_equal.hpp>
+
+namespace std{ namespace tr1{
+
+using ::boost::fusion::tuple;
+
+// [6.1.3.2] Tuple creation functions
+using ::boost::fusion::ignore;
+using ::boost::fusion::make_tuple;
+using ::boost::fusion::tie;
+using ::boost::fusion::get;
+
+// [6.1.3.3] Tuple helper classes
+using ::boost::fusion::tuple_size;
+using ::boost::fusion::tuple_element;
+
+}}
+
+#endif
+
+#endif
+
+#endif
diff --git a/boost/boost/tr1/type_traits.hpp b/boost/boost/tr1/type_traits.hpp
new file mode 100644
index 00000000000..d290c19e3c2
--- /dev/null
+++ b/boost/boost/tr1/type_traits.hpp
@@ -0,0 +1,79 @@
+// (C) Copyright John Maddock 2005.
+// 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)
+
+#ifndef BOOST_TR1_TYPE_TRAITS_HPP_INCLUDED
+# define BOOST_TR1_TYPE_TRAITS_HPP_INCLUDED
+# include <boost/tr1/detail/config.hpp>
+
+#ifdef BOOST_HAS_TR1_TYPE_TRAITS
+# include BOOST_TR1_HEADER(type_traits)
+#else
+// Boost Type Traits:
+#include <boost/type_traits.hpp>
+
+namespace std { namespace tr1{
+
+ using ::boost::integral_constant;
+ using ::boost::true_type;
+ using ::boost::false_type;
+ using ::boost::is_void;
+ using ::boost::is_integral;
+ using ::boost::is_floating_point;
+ using ::boost::is_array;
+ using ::boost::is_pointer;
+ using ::boost::is_reference;
+ using ::boost::is_member_object_pointer;
+ using ::boost::is_member_function_pointer;
+ using ::boost::is_enum;
+ using ::boost::is_union;
+ using ::boost::is_class;
+ using ::boost::is_function;
+ using ::boost::is_arithmetic;
+ using ::boost::is_fundamental;
+ using ::boost::is_object;
+ using ::boost::is_scalar;
+ using ::boost::is_compound;
+ using ::boost::is_member_pointer;
+ using ::boost::is_const;
+ using ::boost::is_volatile;
+ using ::boost::is_pod;
+ using ::boost::is_empty;
+ using ::boost::is_polymorphic;
+ using ::boost::is_abstract;
+ using ::boost::has_trivial_constructor;
+ using ::boost::has_trivial_copy;
+ using ::boost::has_trivial_assign;
+ using ::boost::has_trivial_destructor;
+ using ::boost::has_nothrow_constructor;
+ using ::boost::has_nothrow_copy;
+ using ::boost::has_nothrow_assign;
+ using ::boost::has_virtual_destructor;
+ using ::boost::is_signed;
+ using ::boost::is_unsigned;
+ using ::boost::alignment_of;
+ using ::boost::rank;
+ using ::boost::extent;
+ using ::boost::is_same;
+ using ::boost::is_base_of;
+ using ::boost::is_convertible;
+ using ::boost::remove_const;
+ using ::boost::remove_volatile;
+ using ::boost::remove_cv;
+ using ::boost::add_const;
+ using ::boost::add_volatile;
+ using ::boost::add_cv;
+ using ::boost::remove_reference;
+ using ::boost::add_reference;
+ using ::boost::remove_extent;
+ using ::boost::remove_all_extents;
+ using ::boost::remove_pointer;
+ using ::boost::add_pointer;
+ using ::boost::aligned_storage;
+
+} }
+
+#endif
+
+#endif
diff --git a/boost/boost/tr1/utility.hpp b/boost/boost/tr1/utility.hpp
new file mode 100644
index 00000000000..5097dbae2d9
--- /dev/null
+++ b/boost/boost/tr1/utility.hpp
@@ -0,0 +1,122 @@
+// (C) Copyright John Maddock 2005.
+// 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)
+
+#ifndef BOOST_TR1_UTILITY_HPP_INCLUDED
+# define BOOST_TR1_UTILITY_HPP_INCLUDED
+# include <boost/tr1/detail/config.hpp>
+
+#ifdef BOOST_HAS_TR1_UTILITY
+
+# ifdef BOOST_HAS_INCLUDE_NEXT
+# include_next BOOST_TR1_HEADER(utility)
+# else
+# include BOOST_TR1_STD_HEADER(BOOST_TR1_PATH(utility))
+# endif
+
+#else
+
+#if defined(BOOST_TR1_USE_OLD_TUPLE)
+
+#include <boost/type_traits/integral_constant.hpp>
+#include <boost/type_traits/add_const.hpp>
+#include <boost/type_traits/add_reference.hpp>
+#include <boost/mpl/if.hpp>
+
+
+namespace std{ namespace tr1{
+
+template <class T> struct tuple_size; // forward declaration
+template < int I, class T> struct tuple_element; // forward declaration
+
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+template <class T1, class T2>
+struct tuple_size< ::std::pair<T1, T2> >
+ : public ::boost::integral_constant< ::std::size_t, 2>
+{
+};
+
+template <class T1, class T2>
+struct tuple_element<0, ::std::pair<T1, T2> >
+{
+ typedef typename std::pair<T1, T2>::first_type type;
+};
+
+template <class T1, class T2>
+struct tuple_element<1, std::pair<T1, T2> >
+{
+ typedef typename std::pair<T1, T2>::second_type type;
+};
+#endif
+
+namespace tuple_detail{
+ template <int I, class T1, class T2>
+ struct tuple_get_result
+ {
+ typedef typename boost::mpl::if_c<I==0, T1, T2>::type t1;
+ typedef typename boost::add_reference<t1>::type type;
+ };
+ template <int I, class T1, class T2>
+ struct const_tuple_get_result
+ {
+ typedef typename boost::mpl::if_c<I==0, T1, T2>::type t1;
+# if BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT( 0x582))
+ // I have absolutely no idea why add_const is not working here for Borland!
+ // It passes all other free-standing tests, some strange interaction going on
+ typedef typename boost::add_reference< const t1 >::type type;
+# else
+ typedef typename boost::add_const<t1>::type t2;
+ typedef typename boost::add_reference<t2>::type type;
+# endif
+ };
+
+template<int I, class T1, class T2>
+inline typename tuple_detail::tuple_get_result<I,T1,T2>::type get(std::pair<T1, T2>& p, const ::boost::true_type&)
+{
+ return p.first;
+}
+
+template<int I, class T1, class T2>
+inline typename tuple_detail::const_tuple_get_result<I,T1,T2>::type get(const std::pair<T1, T2>& p, const ::boost::true_type&)
+{
+ return p.first;
+}
+
+template<int I, class T1, class T2>
+inline typename tuple_detail::tuple_get_result<I,T1,T2>::type get(std::pair<T1, T2>& p, const ::boost::false_type&)
+{
+ return p.second;
+}
+
+template<int I, class T1, class T2>
+inline typename tuple_detail::const_tuple_get_result<I,T1,T2>::type get(const std::pair<T1, T2>& p, const ::boost::false_type&)
+{
+ return p.second;
+}
+
+}
+
+template<int I, class T1, class T2>
+inline typename tuple_detail::tuple_get_result<I,T1,T2>::type get(std::pair<T1, T2>& p)
+{
+ return tuple_detail::get<I>(p, boost::integral_constant<bool, I==0>());
+}
+
+template<int I, class T1, class T2>
+inline typename tuple_detail::const_tuple_get_result<I,T1,T2>::type get(const std::pair<T1, T2>& p)
+{
+ return tuple_detail::get<I>(p, boost::integral_constant<bool, I==0>());
+}
+
+} } // namespaces
+
+#else
+
+#include <boost/tr1/tuple.hpp>
+
+#endif
+
+#endif
+
+#endif
diff --git a/boost/boost/tuple/detail/tuple_basic.hpp b/boost/boost/tuple/detail/tuple_basic.hpp
new file mode 100644
index 00000000000..9341fbcc569
--- /dev/null
+++ b/boost/boost/tuple/detail/tuple_basic.hpp
@@ -0,0 +1,944 @@
+// tuple_basic.hpp -----------------------------------------------------
+
+// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi@cs.utu.fi)
+//
+// 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)
+
+// For more information, see http://www.boost.org
+
+// Outside help:
+// This and that, Gary Powell.
+// Fixed return types for get_head/get_tail
+// ( and other bugs ) per suggestion of Jens Maurer
+// simplified element type accessors + bug fix (Jeremy Siek)
+// Several changes/additions according to suggestions by Douglas Gregor,
+// William Kempf, Vesa Karvonen, John Max Skaller, Ed Brey, Beman Dawes,
+// David Abrahams.
+
+// Revision history:
+// 2002 05 01 Hugo Duncan: Fix for Borland after Jaakko's previous changes
+// 2002 04 18 Jaakko: tuple element types can be void or plain function
+// types, as long as no object is created.
+// Tuple objects can no hold even noncopyable types
+// such as arrays.
+// 2001 10 22 John Maddock
+// Fixes for Borland C++
+// 2001 08 30 David Abrahams
+// Added default constructor for cons<>.
+// -----------------------------------------------------------------
+
+#ifndef BOOST_TUPLE_BASIC_HPP
+#define BOOST_TUPLE_BASIC_HPP
+
+
+#include <utility> // needed for the assignment from pair to tuple
+
+#include "boost/type_traits/cv_traits.hpp"
+#include "boost/type_traits/function_traits.hpp"
+
+#include "boost/detail/workaround.hpp" // needed for BOOST_WORKAROUND
+
+namespace boost {
+namespace tuples {
+
+// -- null_type --------------------------------------------------------
+struct null_type {};
+
+// a helper function to provide a const null_type type temporary
+namespace detail {
+ inline const null_type cnull() { return null_type(); }
+
+
+// -- if construct ------------------------------------------------
+// Proposed by Krzysztof Czarnecki and Ulrich Eisenecker
+
+template <bool If, class Then, class Else> struct IF { typedef Then RET; };
+
+template <class Then, class Else> struct IF<false, Then, Else> {
+ typedef Else RET;
+};
+
+} // end detail
+
+// - cons forward declaration -----------------------------------------------
+template <class HT, class TT> struct cons;
+
+
+// - tuple forward declaration -----------------------------------------------
+template <
+ class T0 = null_type, class T1 = null_type, class T2 = null_type,
+ class T3 = null_type, class T4 = null_type, class T5 = null_type,
+ class T6 = null_type, class T7 = null_type, class T8 = null_type,
+ class T9 = null_type>
+class tuple;
+
+// tuple_length forward declaration
+template<class T> struct length;
+
+
+
+namespace detail {
+
+// -- generate error template, referencing to non-existing members of this
+// template is used to produce compilation errors intentionally
+template<class T>
+class generate_error;
+
+// - cons getters --------------------------------------------------------
+// called: get_class<N>::get<RETURN_TYPE>(aTuple)
+
+template< int N >
+struct get_class {
+ template<class RET, class HT, class TT >
+ inline static RET get(const cons<HT, TT>& t)
+ {
+#if BOOST_WORKAROUND(__IBMCPP__,==600)
+ // vacpp 6.0 is not very consistent regarding the member template keyword
+ // Here it generates an error when the template keyword is used.
+ return get_class<N-1>::get<RET>(t.tail);
+#else
+ return get_class<N-1>::BOOST_NESTED_TEMPLATE get<RET>(t.tail);
+#endif
+ }
+ template<class RET, class HT, class TT >
+ inline static RET get(cons<HT, TT>& t)
+ {
+#if BOOST_WORKAROUND(__IBMCPP__,==600)
+ return get_class<N-1>::get<RET>(t.tail);
+#else
+ return get_class<N-1>::BOOST_NESTED_TEMPLATE get<RET>(t.tail);
+#endif
+ }
+};
+
+template<>
+struct get_class<0> {
+ template<class RET, class HT, class TT>
+ inline static RET get(const cons<HT, TT>& t)
+ {
+ return t.head;
+ }
+ template<class RET, class HT, class TT>
+ inline static RET get(cons<HT, TT>& t)
+ {
+ return t.head;
+ }
+};
+
+} // end of namespace detail
+
+
+// -cons type accessors ----------------------------------------
+// typename tuples::element<N,T>::type gets the type of the
+// Nth element ot T, first element is at index 0
+// -------------------------------------------------------
+
+#ifndef BOOST_NO_CV_SPECIALIZATIONS
+
+template<int N, class T>
+struct element
+{
+private:
+ typedef typename T::tail_type Next;
+public:
+ typedef typename element<N-1, Next>::type type;
+};
+template<class T>
+struct element<0,T>
+{
+ typedef typename T::head_type type;
+};
+
+template<int N, class T>
+struct element<N, const T>
+{
+private:
+ typedef typename T::tail_type Next;
+ typedef typename element<N-1, Next>::type unqualified_type;
+public:
+#if BOOST_WORKAROUND(__BORLANDC__,<0x600)
+ typedef const unqualified_type type;
+#else
+ typedef typename boost::add_const<unqualified_type>::type type;
+#endif
+
+};
+template<class T>
+struct element<0,const T>
+{
+#if BOOST_WORKAROUND(__BORLANDC__,<0x600)
+ typedef const typename T::head_type type;
+#else
+ typedef typename boost::add_const<typename T::head_type>::type type;
+#endif
+};
+
+#else // def BOOST_NO_CV_SPECIALIZATIONS
+
+namespace detail {
+
+template<int N, class T, bool IsConst>
+struct element_impl
+{
+private:
+ typedef typename T::tail_type Next;
+public:
+ typedef typename element_impl<N-1, Next, IsConst>::type type;
+};
+
+template<int N, class T>
+struct element_impl<N, T, true /* IsConst */>
+{
+private:
+ typedef typename T::tail_type Next;
+public:
+ typedef const typename element_impl<N-1, Next, true>::type type;
+};
+
+template<class T>
+struct element_impl<0, T, false /* IsConst */>
+{
+ typedef typename T::head_type type;
+};
+
+template<class T>
+struct element_impl<0, T, true /* IsConst */>
+{
+ typedef const typename T::head_type type;
+};
+
+} // end of namespace detail
+
+
+template<int N, class T>
+struct element:
+ public detail::element_impl<N, T, ::boost::is_const<T>::value>
+{
+};
+
+#endif
+
+
+// -get function templates -----------------------------------------------
+// Usage: get<N>(aTuple)
+
+// -- some traits classes for get functions
+
+// access traits lifted from detail namespace to be part of the interface,
+// (Joel de Guzman's suggestion). Rationale: get functions are part of the
+// interface, so should the way to express their return types be.
+
+template <class T> struct access_traits {
+ typedef const T& const_type;
+ typedef T& non_const_type;
+
+ typedef const typename boost::remove_cv<T>::type& parameter_type;
+
+// used as the tuple constructors parameter types
+// Rationale: non-reference tuple element types can be cv-qualified.
+// It should be possible to initialize such types with temporaries,
+// and when binding temporaries to references, the reference must
+// be non-volatile and const. 8.5.3. (5)
+};
+
+template <class T> struct access_traits<T&> {
+
+ typedef T& const_type;
+ typedef T& non_const_type;
+
+ typedef T& parameter_type;
+};
+
+// get function for non-const cons-lists, returns a reference to the element
+
+template<int N, class HT, class TT>
+inline typename access_traits<
+ typename element<N, cons<HT, TT> >::type
+ >::non_const_type
+get(cons<HT, TT>& c BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(int, N)) {
+#if BOOST_WORKAROUND(__IBMCPP__,==600 )
+ return detail::get_class<N>::
+#else
+ return detail::get_class<N>::BOOST_NESTED_TEMPLATE
+#endif
+ get<
+ typename access_traits<
+ typename element<N, cons<HT, TT> >::type
+ >::non_const_type,
+ HT,TT
+ >(c);
+}
+
+// get function for const cons-lists, returns a const reference to
+// the element. If the element is a reference, returns the reference
+// as such (that is, can return a non-const reference)
+template<int N, class HT, class TT>
+inline typename access_traits<
+ typename element<N, cons<HT, TT> >::type
+ >::const_type
+get(const cons<HT, TT>& c BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(int, N)) {
+#if BOOST_WORKAROUND(__IBMCPP__,==600)
+ return detail::get_class<N>::
+#else
+ return detail::get_class<N>::BOOST_NESTED_TEMPLATE
+#endif
+ get<
+ typename access_traits<
+ typename element<N, cons<HT, TT> >::type
+ >::const_type,
+ HT,TT
+ >(c);
+}
+
+// -- the cons template --------------------------------------------------
+namespace detail {
+
+// These helper templates wrap void types and plain function types.
+// The reationale is to allow one to write tuple types with those types
+// as elements, even though it is not possible to instantiate such object.
+// E.g: typedef tuple<void> some_type; // ok
+// but: some_type x; // fails
+
+template <class T> class non_storeable_type {
+ non_storeable_type();
+};
+
+template <class T> struct wrap_non_storeable_type {
+ typedef typename IF<
+ ::boost::is_function<T>::value, non_storeable_type<T>, T
+ >::RET type;
+};
+template <> struct wrap_non_storeable_type<void> {
+ typedef non_storeable_type<void> type;
+};
+
+} // detail
+
+template <class HT, class TT>
+struct cons {
+
+ typedef HT head_type;
+ typedef TT tail_type;
+
+ typedef typename
+ detail::wrap_non_storeable_type<head_type>::type stored_head_type;
+
+ stored_head_type head;
+ tail_type tail;
+
+ typename access_traits<stored_head_type>::non_const_type
+ get_head() { return head; }
+
+ typename access_traits<tail_type>::non_const_type
+ get_tail() { return tail; }
+
+ typename access_traits<stored_head_type>::const_type
+ get_head() const { return head; }
+
+ typename access_traits<tail_type>::const_type
+ get_tail() const { return tail; }
+
+ cons() : head(), tail() {}
+ // cons() : head(detail::default_arg<HT>::f()), tail() {}
+
+ // the argument for head is not strictly needed, but it prevents
+ // array type elements. This is good, since array type elements
+ // cannot be supported properly in any case (no assignment,
+ // copy works only if the tails are exactly the same type, ...)
+
+ cons(typename access_traits<stored_head_type>::parameter_type h,
+ const tail_type& t)
+ : head (h), tail(t) {}
+
+ template <class T1, class T2, class T3, class T4, class T5,
+ class T6, class T7, class T8, class T9, class T10>
+ cons( T1& t1, T2& t2, T3& t3, T4& t4, T5& t5,
+ T6& t6, T7& t7, T8& t8, T9& t9, T10& t10 )
+ : head (t1),
+ tail (t2, t3, t4, t5, t6, t7, t8, t9, t10, detail::cnull())
+ {}
+
+ template <class T2, class T3, class T4, class T5,
+ class T6, class T7, class T8, class T9, class T10>
+ cons( const null_type& /*t1*/, T2& t2, T3& t3, T4& t4, T5& t5,
+ T6& t6, T7& t7, T8& t8, T9& t9, T10& t10 )
+ : head (),
+ tail (t2, t3, t4, t5, t6, t7, t8, t9, t10, detail::cnull())
+ {}
+
+
+ template <class HT2, class TT2>
+ cons( const cons<HT2, TT2>& u ) : head(u.head), tail(u.tail) {}
+
+ template <class HT2, class TT2>
+ cons& operator=( const cons<HT2, TT2>& u ) {
+ head=u.head; tail=u.tail; return *this;
+ }
+
+ // must define assignment operator explicitly, implicit version is
+ // illformed if HT is a reference (12.8. (12))
+ cons& operator=(const cons& u) {
+ head = u.head; tail = u.tail; return *this;
+ }
+
+ template <class T1, class T2>
+ cons& operator=( const std::pair<T1, T2>& u ) {
+ BOOST_STATIC_ASSERT(length<cons>::value == 2); // check length = 2
+ head = u.first; tail.head = u.second; return *this;
+ }
+
+ // get member functions (non-const and const)
+ template <int N>
+ typename access_traits<
+ typename element<N, cons<HT, TT> >::type
+ >::non_const_type
+ get() {
+ return boost::tuples::get<N>(*this); // delegate to non-member get
+ }
+
+ template <int N>
+ typename access_traits<
+ typename element<N, cons<HT, TT> >::type
+ >::const_type
+ get() const {
+ return boost::tuples::get<N>(*this); // delegate to non-member get
+ }
+};
+
+template <class HT>
+struct cons<HT, null_type> {
+
+ typedef HT head_type;
+ typedef null_type tail_type;
+ typedef cons<HT, null_type> self_type;
+
+ typedef typename
+ detail::wrap_non_storeable_type<head_type>::type stored_head_type;
+ stored_head_type head;
+
+ typename access_traits<stored_head_type>::non_const_type
+ get_head() { return head; }
+
+ null_type get_tail() { return null_type(); }
+
+ typename access_traits<stored_head_type>::const_type
+ get_head() const { return head; }
+
+ const null_type get_tail() const { return null_type(); }
+
+ // cons() : head(detail::default_arg<HT>::f()) {}
+ cons() : head() {}
+
+ cons(typename access_traits<stored_head_type>::parameter_type h,
+ const null_type& = null_type())
+ : head (h) {}
+
+ template<class T1>
+ cons(T1& t1, const null_type&, const null_type&, const null_type&,
+ const null_type&, const null_type&, const null_type&,
+ const null_type&, const null_type&, const null_type&)
+ : head (t1) {}
+
+ cons(const null_type&,
+ const null_type&, const null_type&, const null_type&,
+ const null_type&, const null_type&, const null_type&,
+ const null_type&, const null_type&, const null_type&)
+ : head () {}
+
+ template <class HT2>
+ cons( const cons<HT2, null_type>& u ) : head(u.head) {}
+
+ template <class HT2>
+ cons& operator=(const cons<HT2, null_type>& u )
+ { head = u.head; return *this; }
+
+ // must define assignment operator explicitely, implicit version
+ // is illformed if HT is a reference
+ cons& operator=(const cons& u) { head = u.head; return *this; }
+
+ template <int N>
+ typename access_traits<
+ typename element<N, self_type>::type
+ >::non_const_type
+ get(BOOST_EXPLICIT_TEMPLATE_NON_TYPE(int, N)) {
+ return boost::tuples::get<N>(*this);
+ }
+
+ template <int N>
+ typename access_traits<
+ typename element<N, self_type>::type
+ >::const_type
+ get(BOOST_EXPLICIT_TEMPLATE_NON_TYPE(int, N)) const {
+ return boost::tuples::get<N>(*this);
+ }
+
+};
+
+// templates for finding out the length of the tuple -------------------
+
+template<class T>
+struct length {
+ BOOST_STATIC_CONSTANT(int, value = 1 + length<typename T::tail_type>::value);
+};
+
+template<>
+struct length<tuple<> > {
+ BOOST_STATIC_CONSTANT(int, value = 0);
+};
+
+template<>
+struct length<null_type> {
+ BOOST_STATIC_CONSTANT(int, value = 0);
+};
+
+
+namespace detail {
+
+// Tuple to cons mapper --------------------------------------------------
+template <class T0, class T1, class T2, class T3, class T4,
+ class T5, class T6, class T7, class T8, class T9>
+struct map_tuple_to_cons
+{
+ typedef cons<T0,
+ typename map_tuple_to_cons<T1, T2, T3, T4, T5,
+ T6, T7, T8, T9, null_type>::type
+ > type;
+};
+
+// The empty tuple is a null_type
+template <>
+struct map_tuple_to_cons<null_type, null_type, null_type, null_type, null_type, null_type, null_type, null_type, null_type, null_type>
+{
+ typedef null_type type;
+};
+
+} // end detail
+
+// -------------------------------------------------------------------
+// -- tuple ------------------------------------------------------
+template <class T0, class T1, class T2, class T3, class T4,
+ class T5, class T6, class T7, class T8, class T9>
+
+class tuple :
+ public detail::map_tuple_to_cons<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>::type
+{
+public:
+ typedef typename
+ detail::map_tuple_to_cons<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>::type inherited;
+ typedef typename inherited::head_type head_type;
+ typedef typename inherited::tail_type tail_type;
+
+
+// access_traits<T>::parameter_type takes non-reference types as const T&
+ tuple() {}
+
+ tuple(typename access_traits<T0>::parameter_type t0)
+ : inherited(t0, detail::cnull(), detail::cnull(), detail::cnull(),
+ detail::cnull(), detail::cnull(), detail::cnull(),
+ detail::cnull(), detail::cnull(), detail::cnull()) {}
+
+ tuple(typename access_traits<T0>::parameter_type t0,
+ typename access_traits<T1>::parameter_type t1)
+ : inherited(t0, t1, detail::cnull(), detail::cnull(),
+ detail::cnull(), detail::cnull(), detail::cnull(),
+ detail::cnull(), detail::cnull(), detail::cnull()) {}
+
+ tuple(typename access_traits<T0>::parameter_type t0,
+ typename access_traits<T1>::parameter_type t1,
+ typename access_traits<T2>::parameter_type t2)
+ : inherited(t0, t1, t2, detail::cnull(), detail::cnull(),
+ detail::cnull(), detail::cnull(), detail::cnull(),
+ detail::cnull(), detail::cnull()) {}
+
+ tuple(typename access_traits<T0>::parameter_type t0,
+ typename access_traits<T1>::parameter_type t1,
+ typename access_traits<T2>::parameter_type t2,
+ typename access_traits<T3>::parameter_type t3)
+ : inherited(t0, t1, t2, t3, detail::cnull(), detail::cnull(),
+ detail::cnull(), detail::cnull(), detail::cnull(),
+ detail::cnull()) {}
+
+ tuple(typename access_traits<T0>::parameter_type t0,
+ typename access_traits<T1>::parameter_type t1,
+ typename access_traits<T2>::parameter_type t2,
+ typename access_traits<T3>::parameter_type t3,
+ typename access_traits<T4>::parameter_type t4)
+ : inherited(t0, t1, t2, t3, t4, detail::cnull(), detail::cnull(),
+ detail::cnull(), detail::cnull(), detail::cnull()) {}
+
+ tuple(typename access_traits<T0>::parameter_type t0,
+ typename access_traits<T1>::parameter_type t1,
+ typename access_traits<T2>::parameter_type t2,
+ typename access_traits<T3>::parameter_type t3,
+ typename access_traits<T4>::parameter_type t4,
+ typename access_traits<T5>::parameter_type t5)
+ : inherited(t0, t1, t2, t3, t4, t5, detail::cnull(), detail::cnull(),
+ detail::cnull(), detail::cnull()) {}
+
+ tuple(typename access_traits<T0>::parameter_type t0,
+ typename access_traits<T1>::parameter_type t1,
+ typename access_traits<T2>::parameter_type t2,
+ typename access_traits<T3>::parameter_type t3,
+ typename access_traits<T4>::parameter_type t4,
+ typename access_traits<T5>::parameter_type t5,
+ typename access_traits<T6>::parameter_type t6)
+ : inherited(t0, t1, t2, t3, t4, t5, t6, detail::cnull(),
+ detail::cnull(), detail::cnull()) {}
+
+ tuple(typename access_traits<T0>::parameter_type t0,
+ typename access_traits<T1>::parameter_type t1,
+ typename access_traits<T2>::parameter_type t2,
+ typename access_traits<T3>::parameter_type t3,
+ typename access_traits<T4>::parameter_type t4,
+ typename access_traits<T5>::parameter_type t5,
+ typename access_traits<T6>::parameter_type t6,
+ typename access_traits<T7>::parameter_type t7)
+ : inherited(t0, t1, t2, t3, t4, t5, t6, t7, detail::cnull(),
+ detail::cnull()) {}
+
+ tuple(typename access_traits<T0>::parameter_type t0,
+ typename access_traits<T1>::parameter_type t1,
+ typename access_traits<T2>::parameter_type t2,
+ typename access_traits<T3>::parameter_type t3,
+ typename access_traits<T4>::parameter_type t4,
+ typename access_traits<T5>::parameter_type t5,
+ typename access_traits<T6>::parameter_type t6,
+ typename access_traits<T7>::parameter_type t7,
+ typename access_traits<T8>::parameter_type t8)
+ : inherited(t0, t1, t2, t3, t4, t5, t6, t7, t8, detail::cnull()) {}
+
+ tuple(typename access_traits<T0>::parameter_type t0,
+ typename access_traits<T1>::parameter_type t1,
+ typename access_traits<T2>::parameter_type t2,
+ typename access_traits<T3>::parameter_type t3,
+ typename access_traits<T4>::parameter_type t4,
+ typename access_traits<T5>::parameter_type t5,
+ typename access_traits<T6>::parameter_type t6,
+ typename access_traits<T7>::parameter_type t7,
+ typename access_traits<T8>::parameter_type t8,
+ typename access_traits<T9>::parameter_type t9)
+ : inherited(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9) {}
+
+
+ template<class U1, class U2>
+ tuple(const cons<U1, U2>& p) : inherited(p) {}
+
+ template <class U1, class U2>
+ tuple& operator=(const cons<U1, U2>& k) {
+ inherited::operator=(k);
+ return *this;
+ }
+
+ template <class U1, class U2>
+ tuple& operator=(const std::pair<U1, U2>& k) {
+ BOOST_STATIC_ASSERT(length<tuple>::value == 2);// check_length = 2
+ this->head = k.first;
+ this->tail.head = k.second;
+ return *this;
+ }
+
+};
+
+// The empty tuple
+template <>
+class tuple<null_type, null_type, null_type, null_type, null_type, null_type, null_type, null_type, null_type, null_type> :
+ public null_type
+{
+public:
+ typedef null_type inherited;
+};
+
+
+// Swallows any assignment (by Doug Gregor)
+namespace detail {
+
+struct swallow_assign {
+
+ template<typename T>
+ swallow_assign const& operator=(const T&) const {
+ return *this;
+ }
+};
+
+} // namespace detail
+
+// "ignore" allows tuple positions to be ignored when using "tie".
+detail::swallow_assign const ignore = detail::swallow_assign();
+
+// ---------------------------------------------------------------------------
+// The call_traits for make_tuple
+// Honours the reference_wrapper class.
+
+// Must be instantiated with plain or const plain types (not with references)
+
+// from template<class T> foo(const T& t) : make_tuple_traits<const T>::type
+// from template<class T> foo(T& t) : make_tuple_traits<T>::type
+
+// Conversions:
+// T -> T,
+// references -> compile_time_error
+// reference_wrapper<T> -> T&
+// const reference_wrapper<T> -> T&
+// array -> const ref array
+
+
+template<class T>
+struct make_tuple_traits {
+ typedef T type;
+
+ // commented away, see below (JJ)
+ // typedef typename IF<
+ // boost::is_function<T>::value,
+ // T&,
+ // T>::RET type;
+
+};
+
+// The is_function test was there originally for plain function types,
+// which can't be stored as such (we must either store them as references or
+// pointers). Such a type could be formed if make_tuple was called with a
+// reference to a function.
+// But this would mean that a const qualified function type was formed in
+// the make_tuple function and hence make_tuple can't take a function
+// reference as a parameter, and thus T can't be a function type.
+// So is_function test was removed.
+// (14.8.3. says that type deduction fails if a cv-qualified function type
+// is created. (It only applies for the case of explicitly specifying template
+// args, though?)) (JJ)
+
+template<class T>
+struct make_tuple_traits<T&> {
+ typedef typename
+ detail::generate_error<T&>::
+ do_not_use_with_reference_type error;
+};
+
+// Arrays can't be stored as plain types; convert them to references.
+// All arrays are converted to const. This is because make_tuple takes its
+// parameters as const T& and thus the knowledge of the potential
+// non-constness of actual argument is lost.
+template<class T, int n> struct make_tuple_traits <T[n]> {
+ typedef const T (&type)[n];
+};
+
+template<class T, int n>
+struct make_tuple_traits<const T[n]> {
+ typedef const T (&type)[n];
+};
+
+template<class T, int n> struct make_tuple_traits<volatile T[n]> {
+ typedef const volatile T (&type)[n];
+};
+
+template<class T, int n>
+struct make_tuple_traits<const volatile T[n]> {
+ typedef const volatile T (&type)[n];
+};
+
+template<class T>
+struct make_tuple_traits<reference_wrapper<T> >{
+ typedef T& type;
+};
+
+template<class T>
+struct make_tuple_traits<const reference_wrapper<T> >{
+ typedef T& type;
+};
+
+
+
+
+namespace detail {
+
+// a helper traits to make the make_tuple functions shorter (Vesa Karvonen's
+// suggestion)
+template <
+ class T0 = null_type, class T1 = null_type, class T2 = null_type,
+ class T3 = null_type, class T4 = null_type, class T5 = null_type,
+ class T6 = null_type, class T7 = null_type, class T8 = null_type,
+ class T9 = null_type
+>
+struct make_tuple_mapper {
+ typedef
+ tuple<typename make_tuple_traits<T0>::type,
+ typename make_tuple_traits<T1>::type,
+ typename make_tuple_traits<T2>::type,
+ typename make_tuple_traits<T3>::type,
+ typename make_tuple_traits<T4>::type,
+ typename make_tuple_traits<T5>::type,
+ typename make_tuple_traits<T6>::type,
+ typename make_tuple_traits<T7>::type,
+ typename make_tuple_traits<T8>::type,
+ typename make_tuple_traits<T9>::type> type;
+};
+
+} // end detail
+
+// -make_tuple function templates -----------------------------------
+inline tuple<> make_tuple() {
+ return tuple<>();
+}
+
+template<class T0>
+inline typename detail::make_tuple_mapper<T0>::type
+make_tuple(const T0& t0) {
+ typedef typename detail::make_tuple_mapper<T0>::type t;
+ return t(t0);
+}
+
+template<class T0, class T1>
+inline typename detail::make_tuple_mapper<T0, T1>::type
+make_tuple(const T0& t0, const T1& t1) {
+ typedef typename detail::make_tuple_mapper<T0, T1>::type t;
+ return t(t0, t1);
+}
+
+template<class T0, class T1, class T2>
+inline typename detail::make_tuple_mapper<T0, T1, T2>::type
+make_tuple(const T0& t0, const T1& t1, const T2& t2) {
+ typedef typename detail::make_tuple_mapper<T0, T1, T2>::type t;
+ return t(t0, t1, t2);
+}
+
+template<class T0, class T1, class T2, class T3>
+inline typename detail::make_tuple_mapper<T0, T1, T2, T3>::type
+make_tuple(const T0& t0, const T1& t1, const T2& t2, const T3& t3) {
+ typedef typename detail::make_tuple_mapper<T0, T1, T2, T3>::type t;
+ return t(t0, t1, t2, t3);
+}
+
+template<class T0, class T1, class T2, class T3, class T4>
+inline typename detail::make_tuple_mapper<T0, T1, T2, T3, T4>::type
+make_tuple(const T0& t0, const T1& t1, const T2& t2, const T3& t3,
+ const T4& t4) {
+ typedef typename detail::make_tuple_mapper<T0, T1, T2, T3, T4>::type t;
+ return t(t0, t1, t2, t3, t4);
+}
+
+template<class T0, class T1, class T2, class T3, class T4, class T5>
+inline typename detail::make_tuple_mapper<T0, T1, T2, T3, T4, T5>::type
+make_tuple(const T0& t0, const T1& t1, const T2& t2, const T3& t3,
+ const T4& t4, const T5& t5) {
+ typedef typename detail::make_tuple_mapper<T0, T1, T2, T3, T4, T5>::type t;
+ return t(t0, t1, t2, t3, t4, t5);
+}
+
+template<class T0, class T1, class T2, class T3, class T4, class T5, class T6>
+inline typename detail::make_tuple_mapper<T0, T1, T2, T3, T4, T5, T6>::type
+make_tuple(const T0& t0, const T1& t1, const T2& t2, const T3& t3,
+ const T4& t4, const T5& t5, const T6& t6) {
+ typedef typename detail::make_tuple_mapper
+ <T0, T1, T2, T3, T4, T5, T6>::type t;
+ return t(t0, t1, t2, t3, t4, t5, t6);
+}
+
+template<class T0, class T1, class T2, class T3, class T4, class T5, class T6,
+ class T7>
+inline typename detail::make_tuple_mapper<T0, T1, T2, T3, T4, T5, T6, T7>::type
+make_tuple(const T0& t0, const T1& t1, const T2& t2, const T3& t3,
+ const T4& t4, const T5& t5, const T6& t6, const T7& t7) {
+ typedef typename detail::make_tuple_mapper
+ <T0, T1, T2, T3, T4, T5, T6, T7>::type t;
+ return t(t0, t1, t2, t3, t4, t5, t6, t7);
+}
+
+template<class T0, class T1, class T2, class T3, class T4, class T5, class T6,
+ class T7, class T8>
+inline typename detail::make_tuple_mapper
+ <T0, T1, T2, T3, T4, T5, T6, T7, T8>::type
+make_tuple(const T0& t0, const T1& t1, const T2& t2, const T3& t3,
+ const T4& t4, const T5& t5, const T6& t6, const T7& t7,
+ const T8& t8) {
+ typedef typename detail::make_tuple_mapper
+ <T0, T1, T2, T3, T4, T5, T6, T7, T8>::type t;
+ return t(t0, t1, t2, t3, t4, t5, t6, t7, t8);
+}
+
+template<class T0, class T1, class T2, class T3, class T4, class T5, class T6,
+ class T7, class T8, class T9>
+inline typename detail::make_tuple_mapper
+ <T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>::type
+make_tuple(const T0& t0, const T1& t1, const T2& t2, const T3& t3,
+ const T4& t4, const T5& t5, const T6& t6, const T7& t7,
+ const T8& t8, const T9& t9) {
+ typedef typename detail::make_tuple_mapper
+ <T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>::type t;
+ return t(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9);
+}
+
+
+
+// Tie function templates -------------------------------------------------
+template<class T1>
+inline tuple<T1&> tie(T1& t1) {
+ return tuple<T1&> (t1);
+}
+
+template<class T1, class T2>
+inline tuple<T1&, T2&> tie(T1& t1, T2& t2) {
+ return tuple<T1&, T2&> (t1, t2);
+}
+
+template<class T1, class T2, class T3>
+inline tuple<T1&, T2&, T3&> tie(T1& t1, T2& t2, T3& t3) {
+ return tuple<T1&, T2&, T3&> (t1, t2, t3);
+}
+
+template<class T1, class T2, class T3, class T4>
+inline tuple<T1&, T2&, T3&, T4&> tie(T1& t1, T2& t2, T3& t3, T4& t4) {
+ return tuple<T1&, T2&, T3&, T4&> (t1, t2, t3, t4);
+}
+
+template<class T1, class T2, class T3, class T4, class T5>
+inline tuple<T1&, T2&, T3&, T4&, T5&>
+tie(T1& t1, T2& t2, T3& t3, T4& t4, T5& t5) {
+ return tuple<T1&, T2&, T3&, T4&, T5&> (t1, t2, t3, t4, t5);
+}
+
+template<class T1, class T2, class T3, class T4, class T5, class T6>
+inline tuple<T1&, T2&, T3&, T4&, T5&, T6&>
+tie(T1& t1, T2& t2, T3& t3, T4& t4, T5& t5, T6& t6) {
+ return tuple<T1&, T2&, T3&, T4&, T5&, T6&> (t1, t2, t3, t4, t5, t6);
+}
+
+template<class T1, class T2, class T3, class T4, class T5, class T6, class T7>
+inline tuple<T1&, T2&, T3&, T4&, T5&, T6&, T7&>
+tie(T1& t1, T2& t2, T3& t3, T4& t4, T5& t5, T6& t6, T7& t7) {
+ return tuple<T1&, T2&, T3&, T4&, T5&, T6&, T7&> (t1, t2, t3, t4, t5, t6, t7);
+}
+
+template<class T1, class T2, class T3, class T4, class T5, class T6, class T7,
+ class T8>
+inline tuple<T1&, T2&, T3&, T4&, T5&, T6&, T7&, T8&>
+tie(T1& t1, T2& t2, T3& t3, T4& t4, T5& t5, T6& t6, T7& t7, T8& t8) {
+ return tuple<T1&, T2&, T3&, T4&, T5&, T6&, T7&, T8&>
+ (t1, t2, t3, t4, t5, t6, t7, t8);
+}
+
+template<class T1, class T2, class T3, class T4, class T5, class T6, class T7,
+ class T8, class T9>
+inline tuple<T1&, T2&, T3&, T4&, T5&, T6&, T7&, T8&, T9&>
+tie(T1& t1, T2& t2, T3& t3, T4& t4, T5& t5, T6& t6, T7& t7, T8& t8,
+ T9& t9) {
+ return tuple<T1&, T2&, T3&, T4&, T5&, T6&, T7&, T8&, T9&>
+ (t1, t2, t3, t4, t5, t6, t7, t8, t9);
+}
+
+template<class T1, class T2, class T3, class T4, class T5, class T6, class T7,
+ class T8, class T9, class T10>
+inline tuple<T1&, T2&, T3&, T4&, T5&, T6&, T7&, T8&, T9&, T10&>
+tie(T1& t1, T2& t2, T3& t3, T4& t4, T5& t5, T6& t6, T7& t7, T8& t8,
+ T9& t9, T10& t10) {
+ return tuple<T1&, T2&, T3&, T4&, T5&, T6&, T7&, T8&, T9&, T10&>
+ (t1, t2, t3, t4, t5, t6, t7, t8, t9, t10);
+}
+
+} // end of namespace tuples
+} // end of namespace boost
+
+
+#endif // BOOST_TUPLE_BASIC_HPP
+
+
diff --git a/boost/boost/tuple/detail/tuple_basic_no_partial_spec.hpp b/boost/boost/tuple/detail/tuple_basic_no_partial_spec.hpp
new file mode 100644
index 00000000000..d0275d4bf8b
--- /dev/null
+++ b/boost/boost/tuple/detail/tuple_basic_no_partial_spec.hpp
@@ -0,0 +1,841 @@
+// - tuple_basic_no_partial_spec.hpp -----------------------------------------
+
+// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi@cs.utu.fi)
+// Copyright (C) 2001 Douglas Gregor (gregod@rpi.edu)
+// Copyright (C) 2001 Gary Powell (gary.powell@sierra.com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// For more information, see http://www.boost.org or http://lambda.cs.utu.fi
+
+// Revision History
+// 14 02 01 Remove extra ';'. Also, fixed 10-parameter to make_tuple. (DG)
+// 10 02 01 Fixed "null_type" constructors.
+// Implemented comparison operators globally.
+// Hide element_type_ref and element_type_const_ref.
+// (DG).
+// 09 02 01 Extended to tuples of length 10. Changed comparison for
+// operator<()
+// to the same used by std::pair<>, added cnull_type() (GP)
+// 03 02 01 Initial Version from original tuple.hpp code by JJ. (DG)
+
+// -----------------------------------------------------------------
+
+#ifndef BOOST_TUPLE_BASIC_NO_PARTIAL_SPEC_HPP
+#define BOOST_TUPLE_BASIC_NO_PARTIAL_SPEC_HPP
+
+#include "boost/type_traits.hpp"
+#include <utility>
+
+#if defined BOOST_MSVC
+#pragma warning(disable:4518) // storage-class or type specifier(s) unexpected here; ignored
+#pragma warning(disable:4181) // qualifier applied to reference type ignored
+#pragma warning(disable:4227) // qualifier applied to reference type ignored
+#endif
+
+namespace boost {
+namespace tuples {
+
+ // null_type denotes the end of a list built with "cons"
+ struct null_type
+ {
+ null_type() {}
+ null_type(const null_type&, const null_type&) {}
+ };
+
+ // a helper function to provide a const null_type type temporary
+ inline const null_type cnull_type() { return null_type(); }
+
+// forward declaration of tuple
+ template<
+ typename T1 = null_type,
+ typename T2 = null_type,
+ typename T3 = null_type,
+ typename T4 = null_type,
+ typename T5 = null_type,
+ typename T6 = null_type,
+ typename T7 = null_type,
+ typename T8 = null_type,
+ typename T9 = null_type,
+ typename T10 = null_type
+ >
+ class tuple;
+
+// forward declaration of cons
+ template<typename Head, typename Tail = null_type>
+ struct cons;
+
+ namespace detail {
+
+ // Takes a pointer and routes all assignments to whatever it points to
+ template<typename T>
+ struct assign_to_pointee
+ {
+ public:
+ explicit assign_to_pointee(T* p) : ptr(p) {}
+
+ template<typename Other>
+ assign_to_pointee& operator=(const Other& other)
+ {
+ *ptr = other;
+ return *this;
+ }
+
+ private:
+ T* ptr;
+ };
+
+ // Swallows any assignment
+ struct swallow_assign
+ {
+ template<typename T>
+ swallow_assign const& operator=(const T&) const
+ {
+ return *this;
+ }
+ };
+
+ template <typename T> struct add_const_reference : add_reference<typename add_const<T>::type> {};
+
+ template <class MyTail>
+ struct init_tail
+ {
+ // Each of vc6 and vc7 seem to require a different formulation
+ // of this return type
+ template <class H, class T>
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ static typename add_reference<typename add_const<T>::type>::type
+#else
+ static typename add_const_reference<T>::type
+#endif
+ execute( cons<H,T> const& u, long )
+ {
+ return u.get_tail();
+ }
+ };
+
+ template <>
+ struct init_tail<null_type>
+ {
+ template <class H>
+ static null_type execute( cons<H,null_type> const& u, long )
+ {
+ return null_type();
+ }
+
+ template <class U>
+ static null_type execute(U const&, ...)
+ {
+ return null_type();
+ }
+ private:
+ template <class H, class T>
+ void execute( cons<H,T> const&, int);
+ };
+
+ template <class Other>
+ Other const&
+ init_head( Other const& u, ... )
+ {
+ return u;
+ }
+
+ template <class H, class T>
+ typename add_reference<typename add_const<H>::type>::type
+ init_head( cons<H,T> const& u, int )
+ {
+ return u.get_head();
+ }
+
+ inline char**** init_head(null_type const&, int);
+
+ } // end of namespace detail
+
+ // cons builds a heterogenous list of types
+ template<typename Head, typename Tail>
+ struct cons
+ {
+ typedef cons self_type;
+ typedef Head head_type;
+ typedef Tail tail_type;
+
+ private:
+ typedef typename boost::add_reference<head_type>::type head_ref;
+ typedef typename boost::add_reference<tail_type>::type tail_ref;
+ typedef typename detail::add_const_reference<head_type>::type head_cref;
+ typedef typename detail::add_const_reference<tail_type>::type tail_cref;
+ public:
+ head_type head;
+ tail_type tail;
+
+ head_ref get_head() { return head; }
+ tail_ref get_tail() { return tail; }
+
+ head_cref get_head() const { return head; }
+ tail_cref get_tail() const { return tail; }
+
+ cons() : head(), tail() {}
+
+#if defined BOOST_MSVC
+ template<typename Tail>
+ cons(head_cref h /* = head_type() */, // causes MSVC 6.5 to barf.
+ const Tail& t) : head(h), tail(t.head, t.tail)
+ {
+ }
+
+ cons(head_cref h /* = head_type() */, // causes MSVC 6.5 to barf.
+ const null_type& t) : head(h), tail(t)
+ {
+ }
+
+#else
+ template<typename T>
+ explicit cons(head_cref h, const T& t) :
+ head(h), tail(t.head, t.tail)
+ {
+ }
+
+ explicit cons(head_cref h = head_type(),
+ tail_cref t = tail_type()) :
+ head(h), tail(t)
+ {
+ }
+#endif
+
+ template <class U>
+ cons( const U& u )
+ : head(detail::init_head(u, 0))
+ , tail(detail::init_tail<Tail>::execute(u, 0L))
+ {
+ }
+
+ template<typename Other>
+ cons& operator=(const Other& other)
+ {
+ head = other.head;
+ tail = other.tail;
+ return *this;
+ }
+ };
+
+ namespace detail {
+
+ // Determines if the parameter is null_type
+ template<typename T> struct is_null_type { enum { RET = 0 }; };
+ template<> struct is_null_type<null_type> { enum { RET = 1 }; };
+
+ /* Build a cons structure from the given Head and Tail. If both are null_type,
+ return null_type. */
+ template<typename Head, typename Tail>
+ struct build_cons
+ {
+ private:
+ enum { tail_is_null_type = is_null_type<Tail>::RET };
+ public:
+ typedef cons<Head, Tail> RET;
+ };
+
+ template<>
+ struct build_cons<null_type, null_type>
+ {
+ typedef null_type RET;
+ };
+
+ // Map the N elements of a tuple into a cons list
+ template<
+ typename T1,
+ typename T2 = null_type,
+ typename T3 = null_type,
+ typename T4 = null_type,
+ typename T5 = null_type,
+ typename T6 = null_type,
+ typename T7 = null_type,
+ typename T8 = null_type,
+ typename T9 = null_type,
+ typename T10 = null_type
+ >
+ struct map_tuple_to_cons
+ {
+ typedef typename detail::build_cons<T10, null_type >::RET cons10;
+ typedef typename detail::build_cons<T9, cons10>::RET cons9;
+ typedef typename detail::build_cons<T8, cons9>::RET cons8;
+ typedef typename detail::build_cons<T7, cons8>::RET cons7;
+ typedef typename detail::build_cons<T6, cons7>::RET cons6;
+ typedef typename detail::build_cons<T5, cons6>::RET cons5;
+ typedef typename detail::build_cons<T4, cons5>::RET cons4;
+ typedef typename detail::build_cons<T3, cons4>::RET cons3;
+ typedef typename detail::build_cons<T2, cons3>::RET cons2;
+ typedef typename detail::build_cons<T1, cons2>::RET cons1;
+ };
+
+ // Workaround the lack of partial specialization in some compilers
+ template<int N>
+ struct _element_type
+ {
+ template<typename Tuple>
+ struct inner
+ {
+ private:
+ typedef typename Tuple::tail_type tail_type;
+ typedef _element_type<N-1> next_elt_type;
+
+ public:
+ typedef typename _element_type<N-1>::template inner<tail_type>::RET RET;
+ };
+ };
+
+ template<>
+ struct _element_type<0>
+ {
+ template<typename Tuple>
+ struct inner
+ {
+ typedef typename Tuple::head_type RET;
+ };
+ };
+
+ } // namespace detail
+
+
+ // Return the Nth type of the given Tuple
+ template<int N, typename Tuple>
+ struct element
+ {
+ private:
+ typedef detail::_element_type<N> nth_type;
+
+ public:
+ typedef typename nth_type::template inner<Tuple>::RET RET;
+ typedef RET type;
+ };
+
+ namespace detail {
+
+#if defined(BOOST_MSVC) && (BOOST_MSVC == 1300)
+ // special workaround for vc7:
+
+ template <bool x>
+ struct reference_adder
+ {
+ template <class T>
+ struct rebind
+ {
+ typedef T& type;
+ };
+ };
+
+ template <>
+ struct reference_adder<true>
+ {
+ template <class T>
+ struct rebind
+ {
+ typedef T type;
+ };
+ };
+
+
+ // Return a reference to the Nth type of the given Tuple
+ template<int N, typename Tuple>
+ struct element_ref
+ {
+ private:
+ typedef typename element<N, Tuple>::RET elt_type;
+ enum { is_ref = is_reference<elt_type>::value };
+
+ public:
+ typedef reference_adder<is_ref>::rebind<elt_type>::type RET;
+ typedef RET type;
+ };
+
+ // Return a const reference to the Nth type of the given Tuple
+ template<int N, typename Tuple>
+ struct element_const_ref
+ {
+ private:
+ typedef typename element<N, Tuple>::RET elt_type;
+ enum { is_ref = is_reference<elt_type>::value };
+
+ public:
+ typedef reference_adder<is_ref>::rebind<const elt_type>::type RET;
+ typedef RET type;
+ };
+
+#else // vc7
+
+ // Return a reference to the Nth type of the given Tuple
+ template<int N, typename Tuple>
+ struct element_ref
+ {
+ private:
+ typedef typename element<N, Tuple>::RET elt_type;
+
+ public:
+ typedef typename add_reference<elt_type>::type RET;
+ typedef RET type;
+ };
+
+ // Return a const reference to the Nth type of the given Tuple
+ template<int N, typename Tuple>
+ struct element_const_ref
+ {
+ private:
+ typedef typename element<N, Tuple>::RET elt_type;
+
+ public:
+ typedef typename add_reference<const elt_type>::type RET;
+ typedef RET type;
+ };
+#endif // vc7
+
+ } // namespace detail
+
+ // Get length of this tuple
+ template<typename Tuple>
+ struct length
+ {
+ BOOST_STATIC_CONSTANT(int, value = 1 + length<typename Tuple::tail_type>::value);
+ };
+
+ template<> struct length<tuple<> > {
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+
+ template<>
+ struct length<null_type>
+ {
+ BOOST_STATIC_CONSTANT(int, value = 0);
+ };
+
+ namespace detail {
+
+ // Reference the Nth element in a tuple and retrieve it with "get"
+ template<int N>
+ struct get_class
+ {
+ template<typename Head, typename Tail>
+ static inline
+ typename detail::element_ref<N, cons<Head, Tail> >::RET
+ get(cons<Head, Tail>& t)
+ {
+ return get_class<N-1>::get(t.tail);
+ }
+
+ template<typename Head, typename Tail>
+ static inline
+ typename detail::element_const_ref<N, cons<Head, Tail> >::RET
+ get(const cons<Head, Tail>& t)
+ {
+ return get_class<N-1>::get(t.tail);
+ }
+ };
+
+ template<>
+ struct get_class<0>
+ {
+ template<typename Head, typename Tail>
+ static inline
+ typename add_reference<Head>::type
+ get(cons<Head, Tail>& t)
+ {
+ return t.head;
+ }
+
+ template<typename Head, typename Tail>
+ static inline
+ typename add_reference<const Head>::type
+ get(const cons<Head, Tail>& t)
+ {
+ return t.head;
+ }
+ };
+
+ } // namespace detail
+
+ // tuple class
+ template<
+ typename T1,
+ typename T2,
+ typename T3,
+ typename T4,
+ typename T5,
+ typename T6,
+ typename T7,
+ typename T8,
+ typename T9,
+ typename T10
+ >
+ class tuple :
+ public detail::map_tuple_to_cons<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>::cons1
+ {
+ private:
+ typedef detail::map_tuple_to_cons<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> mapped_tuple;
+ typedef typename mapped_tuple::cons10 cons10;
+ typedef typename mapped_tuple::cons9 cons9;
+ typedef typename mapped_tuple::cons8 cons8;
+ typedef typename mapped_tuple::cons7 cons7;
+ typedef typename mapped_tuple::cons6 cons6;
+ typedef typename mapped_tuple::cons5 cons5;
+ typedef typename mapped_tuple::cons4 cons4;
+ typedef typename mapped_tuple::cons3 cons3;
+ typedef typename mapped_tuple::cons2 cons2;
+ typedef typename mapped_tuple::cons1 cons1;
+
+ typedef typename detail::add_const_reference<T1>::type t1_cref;
+ typedef typename detail::add_const_reference<T2>::type t2_cref;
+ typedef typename detail::add_const_reference<T3>::type t3_cref;
+ typedef typename detail::add_const_reference<T4>::type t4_cref;
+ typedef typename detail::add_const_reference<T5>::type t5_cref;
+ typedef typename detail::add_const_reference<T6>::type t6_cref;
+ typedef typename detail::add_const_reference<T7>::type t7_cref;
+ typedef typename detail::add_const_reference<T8>::type t8_cref;
+ typedef typename detail::add_const_reference<T9>::type t9_cref;
+ typedef typename detail::add_const_reference<T10>::type t10_cref;
+ public:
+ typedef cons1 inherited;
+ typedef tuple self_type;
+
+ tuple() : cons1(T1(), cons2(T2(), cons3(T3(), cons4(T4(), cons5(T5(), cons6(T6(),cons7(T7(),cons8(T8(),cons9(T9(),cons10(T10()))))))))))
+ {}
+
+ tuple(
+ t1_cref t1,
+ t2_cref t2,
+ t3_cref t3 = T3(),
+ t4_cref t4 = T4(),
+ t5_cref t5 = T5(),
+ t6_cref t6 = T6(),
+ t7_cref t7 = T7(),
+ t8_cref t8 = T8(),
+ t9_cref t9 = T9(),
+ t10_cref t10 = T10()
+ ) :
+ cons1(t1, cons2(t2, cons3(t3, cons4(t4, cons5(t5, cons6(t6,cons7(t7,cons8(t8,cons9(t9,cons10(t10))))))))))
+ {
+ }
+
+ explicit tuple(t1_cref t1)
+ : cons1(t1, cons2(T2(), cons3(T3(), cons4(T4(), cons5(T5(), cons6(T6(),cons7(T7(),cons8(T8(),cons9(T9(),cons10(T10()))))))))))
+ {}
+
+ template<typename Head, typename Tail>
+ tuple(const cons<Head, Tail>& other) :
+ cons1(other.head, other.tail)
+ {
+ }
+
+ template<typename First, typename Second>
+ self_type& operator=(const std::pair<First, Second>& other)
+ {
+ this->head = other.first;
+ this->tail.head = other.second;
+ return *this;
+ }
+
+ template<typename Head, typename Tail>
+ self_type& operator=(const cons<Head, Tail>& other)
+ {
+ this->head = other.head;
+ this->tail = other.tail;
+
+ return *this;
+ }
+ };
+
+ namespace detail {
+
+ template<int N> struct workaround_holder {};
+
+ } // namespace detail
+
+ template<int N, typename Head, typename Tail>
+ typename detail::element_ref<N, cons<Head, Tail> >::RET
+ get(cons<Head, Tail>& t, detail::workaround_holder<N>* = 0)
+ {
+ return detail::get_class<N>::get(t);
+ }
+
+ template<int N, typename Head, typename Tail>
+ typename detail::element_const_ref<N, cons<Head, Tail> >::RET
+ get(const cons<Head, Tail>& t, detail::workaround_holder<N>* = 0)
+ {
+ return detail::get_class<N>::get(t);
+ }
+
+ // Make a tuple
+ template<typename T1>
+ inline
+ tuple<T1>
+ make_tuple(const T1& t1)
+ {
+ return tuple<T1>(t1);
+ }
+
+ // Make a tuple
+ template<typename T1, typename T2>
+ inline
+ tuple<T1, T2>
+ make_tuple(const T1& t1, const T2& t2)
+ {
+ return tuple<T1, T2>(t1, t2);
+ }
+
+ // Make a tuple
+ template<typename T1, typename T2, typename T3>
+ inline
+ tuple<T1, T2, T3>
+ make_tuple(const T1& t1, const T2& t2, const T3& t3)
+ {
+ return tuple<T1, T2, T3>(t1, t2, t3);
+ }
+
+ // Make a tuple
+ template<typename T1, typename T2, typename T3, typename T4>
+ inline
+ tuple<T1, T2, T3, T4>
+ make_tuple(const T1& t1, const T2& t2, const T3& t3, const T4& t4)
+ {
+ return tuple<T1, T2, T3, T4>(t1, t2, t3, t4);
+ }
+
+ // Make a tuple
+ template<typename T1, typename T2, typename T3, typename T4, typename T5>
+ inline
+ tuple<T1, T2, T3, T4, T5>
+ make_tuple(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5)
+ {
+ return tuple<T1, T2, T3, T4, T5>(t1, t2, t3, t4, t5);
+ }
+
+ // Make a tuple
+ template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
+ inline
+ tuple<T1, T2, T3, T4, T5, T6>
+ make_tuple(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6)
+ {
+ return tuple<T1, T2, T3, T4, T5, T6>(t1, t2, t3, t4, t5, t6);
+ }
+
+ // Make a tuple
+ template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
+ inline
+ tuple<T1, T2, T3, T4, T5, T6, T7>
+ make_tuple(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7)
+ {
+ return tuple<T1, T2, T3, T4, T5, T6, T7>(t1, t2, t3, t4, t5, t6, t7);
+ }
+
+ // Make a tuple
+ template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
+ inline
+ tuple<T1, T2, T3, T4, T5, T6, T7, T8>
+ make_tuple(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8)
+ {
+ return tuple<T1, T2, T3, T4, T5, T6, T7, T8>(t1, t2, t3, t4, t5, t6, t7, t8);
+ }
+
+ // Make a tuple
+ template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
+ inline
+ tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9>
+ make_tuple(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9)
+ {
+ return tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9>(t1, t2, t3, t4, t5, t6, t7, t8, t9);
+ }
+
+ // Make a tuple
+ template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10>
+ inline
+ tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>
+ make_tuple(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10)
+ {
+ return tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10);
+ }
+
+ // Tie variables into a tuple
+ template<typename T1>
+ inline
+ tuple<detail::assign_to_pointee<T1> >
+ tie(T1& t1)
+ {
+ return make_tuple(detail::assign_to_pointee<T1>(&t1));
+ }
+
+ // Tie variables into a tuple
+ template<typename T1, typename T2>
+ inline
+ tuple<detail::assign_to_pointee<T1>,
+ detail::assign_to_pointee<T2> >
+ tie(T1& t1, T2& t2)
+ {
+ return make_tuple(detail::assign_to_pointee<T1>(&t1),
+ detail::assign_to_pointee<T2>(&t2));
+ }
+
+ // Tie variables into a tuple
+ template<typename T1, typename T2, typename T3>
+ inline
+ tuple<detail::assign_to_pointee<T1>,
+ detail::assign_to_pointee<T2>,
+ detail::assign_to_pointee<T3> >
+ tie(T1& t1, T2& t2, T3& t3)
+ {
+ return make_tuple(detail::assign_to_pointee<T1>(&t1),
+ detail::assign_to_pointee<T2>(&t2),
+ detail::assign_to_pointee<T3>(&t3));
+ }
+
+ // Tie variables into a tuple
+ template<typename T1, typename T2, typename T3, typename T4>
+ inline
+ tuple<detail::assign_to_pointee<T1>,
+ detail::assign_to_pointee<T2>,
+ detail::assign_to_pointee<T3>,
+ detail::assign_to_pointee<T4> >
+ tie(T1& t1, T2& t2, T3& t3, T4& t4)
+ {
+ return make_tuple(detail::assign_to_pointee<T1>(&t1),
+ detail::assign_to_pointee<T2>(&t2),
+ detail::assign_to_pointee<T3>(&t3),
+ detail::assign_to_pointee<T4>(&t4));
+ }
+
+ // Tie variables into a tuple
+ template<typename T1, typename T2, typename T3, typename T4, typename T5>
+ inline
+ tuple<detail::assign_to_pointee<T1>,
+ detail::assign_to_pointee<T2>,
+ detail::assign_to_pointee<T3>,
+ detail::assign_to_pointee<T4>,
+ detail::assign_to_pointee<T5> >
+ tie(T1& t1, T2& t2, T3& t3, T4& t4, T5 &t5)
+ {
+ return make_tuple(detail::assign_to_pointee<T1>(&t1),
+ detail::assign_to_pointee<T2>(&t2),
+ detail::assign_to_pointee<T3>(&t3),
+ detail::assign_to_pointee<T4>(&t4),
+ detail::assign_to_pointee<T5>(&t5));
+ }
+
+ // Tie variables into a tuple
+ template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
+ inline
+ tuple<detail::assign_to_pointee<T1>,
+ detail::assign_to_pointee<T2>,
+ detail::assign_to_pointee<T3>,
+ detail::assign_to_pointee<T4>,
+ detail::assign_to_pointee<T5>,
+ detail::assign_to_pointee<T6> >
+ tie(T1& t1, T2& t2, T3& t3, T4& t4, T5 &t5, T6 &t6)
+ {
+ return make_tuple(detail::assign_to_pointee<T1>(&t1),
+ detail::assign_to_pointee<T2>(&t2),
+ detail::assign_to_pointee<T3>(&t3),
+ detail::assign_to_pointee<T4>(&t4),
+ detail::assign_to_pointee<T5>(&t5),
+ detail::assign_to_pointee<T6>(&t6));
+ }
+
+ // Tie variables into a tuple
+ template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
+ inline
+ tuple<detail::assign_to_pointee<T1>,
+ detail::assign_to_pointee<T2>,
+ detail::assign_to_pointee<T3>,
+ detail::assign_to_pointee<T4>,
+ detail::assign_to_pointee<T5>,
+ detail::assign_to_pointee<T6>,
+ detail::assign_to_pointee<T7> >
+ tie(T1& t1, T2& t2, T3& t3, T4& t4, T5 &t5, T6 &t6, T7 &t7)
+ {
+ return make_tuple(detail::assign_to_pointee<T1>(&t1),
+ detail::assign_to_pointee<T2>(&t2),
+ detail::assign_to_pointee<T3>(&t3),
+ detail::assign_to_pointee<T4>(&t4),
+ detail::assign_to_pointee<T5>(&t5),
+ detail::assign_to_pointee<T6>(&t6),
+ detail::assign_to_pointee<T7>(&t7));
+ }
+
+ // Tie variables into a tuple
+ template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
+ inline
+ tuple<detail::assign_to_pointee<T1>,
+ detail::assign_to_pointee<T2>,
+ detail::assign_to_pointee<T3>,
+ detail::assign_to_pointee<T4>,
+ detail::assign_to_pointee<T5>,
+ detail::assign_to_pointee<T6>,
+ detail::assign_to_pointee<T7>,
+ detail::assign_to_pointee<T8> >
+ tie(T1& t1, T2& t2, T3& t3, T4& t4, T5 &t5, T6 &t6, T7 &t7, T8 &t8)
+ {
+ return make_tuple(detail::assign_to_pointee<T1>(&t1),
+ detail::assign_to_pointee<T2>(&t2),
+ detail::assign_to_pointee<T3>(&t3),
+ detail::assign_to_pointee<T4>(&t4),
+ detail::assign_to_pointee<T5>(&t5),
+ detail::assign_to_pointee<T6>(&t6),
+ detail::assign_to_pointee<T7>(&t7),
+ detail::assign_to_pointee<T8>(&t8));
+ }
+
+ // Tie variables into a tuple
+ template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
+ inline
+ tuple<detail::assign_to_pointee<T1>,
+ detail::assign_to_pointee<T2>,
+ detail::assign_to_pointee<T3>,
+ detail::assign_to_pointee<T4>,
+ detail::assign_to_pointee<T5>,
+ detail::assign_to_pointee<T6>,
+ detail::assign_to_pointee<T7>,
+ detail::assign_to_pointee<T8>,
+ detail::assign_to_pointee<T9> >
+ tie(T1& t1, T2& t2, T3& t3, T4& t4, T5 &t5, T6 &t6, T7 &t7, T8 &t8, T9 &t9)
+ {
+ return make_tuple(detail::assign_to_pointee<T1>(&t1),
+ detail::assign_to_pointee<T2>(&t2),
+ detail::assign_to_pointee<T3>(&t3),
+ detail::assign_to_pointee<T4>(&t4),
+ detail::assign_to_pointee<T5>(&t5),
+ detail::assign_to_pointee<T6>(&t6),
+ detail::assign_to_pointee<T7>(&t7),
+ detail::assign_to_pointee<T8>(&t8),
+ detail::assign_to_pointee<T9>(&t9));
+ }
+ // Tie variables into a tuple
+ template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10>
+ inline
+ tuple<detail::assign_to_pointee<T1>,
+ detail::assign_to_pointee<T2>,
+ detail::assign_to_pointee<T3>,
+ detail::assign_to_pointee<T4>,
+ detail::assign_to_pointee<T5>,
+ detail::assign_to_pointee<T6>,
+ detail::assign_to_pointee<T7>,
+ detail::assign_to_pointee<T8>,
+ detail::assign_to_pointee<T9>,
+ detail::assign_to_pointee<T10> >
+ tie(T1& t1, T2& t2, T3& t3, T4& t4, T5 &t5, T6 &t6, T7 &t7, T8 &t8, T9 &t9, T10 &t10)
+ {
+ return make_tuple(detail::assign_to_pointee<T1>(&t1),
+ detail::assign_to_pointee<T2>(&t2),
+ detail::assign_to_pointee<T3>(&t3),
+ detail::assign_to_pointee<T4>(&t4),
+ detail::assign_to_pointee<T5>(&t5),
+ detail::assign_to_pointee<T6>(&t6),
+ detail::assign_to_pointee<T7>(&t7),
+ detail::assign_to_pointee<T8>(&t8),
+ detail::assign_to_pointee<T9>(&t9),
+ detail::assign_to_pointee<T10>(&t10));
+ }
+ // "ignore" allows tuple positions to be ignored when using "tie".
+
+detail::swallow_assign const ignore = detail::swallow_assign();
+
+} // namespace tuples
+} // namespace boost
+#endif // BOOST_TUPLE_BASIC_NO_PARTIAL_SPEC_HPP
diff --git a/boost/boost/tuple/tuple.hpp b/boost/boost/tuple/tuple.hpp
new file mode 100644
index 00000000000..ee7fbc47cac
--- /dev/null
+++ b/boost/boost/tuple/tuple.hpp
@@ -0,0 +1,90 @@
+// tuple.hpp - Boost Tuple Library --------------------------------------
+
+// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi@cs.utu.fi)
+//
+// 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)
+
+// For more information, see http://www.boost.org
+
+// -----------------------------------------------------------------
+
+#ifndef BOOST_TUPLE_HPP
+#define BOOST_TUPLE_HPP
+
+#if defined(__sgi) && defined(_COMPILER_VERSION) && _COMPILER_VERSION <= 730
+// Work around a compiler bug.
+// boost::python::tuple has to be seen by the compiler before the
+// boost::tuple class template.
+namespace boost { namespace python { class tuple; }}
+#endif
+
+#include "boost/config.hpp"
+#include "boost/static_assert.hpp"
+
+#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+// The MSVC version
+#include "boost/tuple/detail/tuple_basic_no_partial_spec.hpp"
+
+#else
+// other compilers
+#include "boost/ref.hpp"
+#include "boost/tuple/detail/tuple_basic.hpp"
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace boost {
+
+using tuples::tuple;
+using tuples::make_tuple;
+using tuples::tie;
+#if !defined(BOOST_NO_USING_TEMPLATE)
+using tuples::get;
+#elif !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+//
+// The "using tuples::get" statement causes the
+// Borland compiler to ICE, use forwarding
+// functions instead:
+//
+template<int N, class HT, class TT>
+inline typename tuples::access_traits<
+ typename tuples::element<N, tuples::cons<HT, TT> >::type
+ >::non_const_type
+get(tuples::cons<HT, TT>& c) {
+ return tuples::get<N,HT,TT>(c);
+}
+// get function for const cons-lists, returns a const reference to
+// the element. If the element is a reference, returns the reference
+// as such (that is, can return a non-const reference)
+template<int N, class HT, class TT>
+inline typename tuples::access_traits<
+ typename tuples::element<N, tuples::cons<HT, TT> >::type
+ >::const_type
+get(const tuples::cons<HT, TT>& c) {
+ return tuples::get<N,HT,TT>(c);
+}
+#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+//
+// MSVC, using declarations don't mix with templates well,
+// so use forwarding functions instead:
+//
+template<int N, typename Head, typename Tail>
+typename tuples::detail::element_ref<N, tuples::cons<Head, Tail> >::RET
+get(tuples::cons<Head, Tail>& t, tuples::detail::workaround_holder<N>* = 0)
+{
+ return tuples::detail::get_class<N>::get(t);
+}
+
+template<int N, typename Head, typename Tail>
+typename tuples::detail::element_const_ref<N, tuples::cons<Head, Tail> >::RET
+get(const tuples::cons<Head, Tail>& t, tuples::detail::workaround_holder<N>* = 0)
+{
+ return tuples::detail::get_class<N>::get(t);
+}
+#endif // BOOST_NO_USING_TEMPLATE
+
+} // end namespace boost
+
+
+#endif // BOOST_TUPLE_HPP
diff --git a/boost/boost/tuple/tuple_comparison.hpp b/boost/boost/tuple/tuple_comparison.hpp
new file mode 100644
index 00000000000..00ddd14d6c2
--- /dev/null
+++ b/boost/boost/tuple/tuple_comparison.hpp
@@ -0,0 +1,175 @@
+// tuple_comparison.hpp -----------------------------------------------------
+//
+// Copyright (C) 2001 Jaakko Järvi (jaakko.jarvi@cs.utu.fi)
+// Copyright (C) 2001 Gary Powell (gary.powell@sierra.com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org
+//
+// (The idea and first impl. of comparison operators was from Doug Gregor)
+
+// -----------------------------------------------------------------
+
+#ifndef BOOST_TUPLE_COMPARISON_HPP
+#define BOOST_TUPLE_COMPARISON_HPP
+
+#include "boost/tuple/tuple.hpp"
+
+// -------------------------------------------------------------
+// equality and comparison operators
+//
+// == and != compare tuples elementwise
+// <, >, <= and >= use lexicographical ordering
+//
+// Any operator between tuples of different length fails at compile time
+// No dependencies between operators are assumed
+// (i.e. !(a<b) does not imply a>=b, a!=b does not imply a==b etc.
+// so any weirdnesses of elementary operators are respected).
+//
+// -------------------------------------------------------------
+
+
+namespace boost {
+namespace tuples {
+
+inline bool operator==(const null_type&, const null_type&) { return true; }
+inline bool operator>=(const null_type&, const null_type&) { return true; }
+inline bool operator<=(const null_type&, const null_type&) { return true; }
+inline bool operator!=(const null_type&, const null_type&) { return false; }
+inline bool operator<(const null_type&, const null_type&) { return false; }
+inline bool operator>(const null_type&, const null_type&) { return false; }
+
+
+namespace detail {
+ // comparison operators check statically the length of its operands and
+ // delegate the comparing task to the following functions. Hence
+ // the static check is only made once (should help the compiler).
+ // These functions assume tuples to be of the same length.
+
+
+template<class T1, class T2>
+inline bool eq(const T1& lhs, const T2& rhs) {
+ return lhs.get_head() == rhs.get_head() &&
+ eq(lhs.get_tail(), rhs.get_tail());
+}
+template<>
+inline bool eq<null_type,null_type>(const null_type&, const null_type&) { return true; }
+
+template<class T1, class T2>
+inline bool neq(const T1& lhs, const T2& rhs) {
+ return lhs.get_head() != rhs.get_head() ||
+ neq(lhs.get_tail(), rhs.get_tail());
+}
+template<>
+inline bool neq<null_type,null_type>(const null_type&, const null_type&) { return false; }
+
+template<class T1, class T2>
+inline bool lt(const T1& lhs, const T2& rhs) {
+ return lhs.get_head() < rhs.get_head() ||
+ !(rhs.get_head() < lhs.get_head()) &&
+ lt(lhs.get_tail(), rhs.get_tail());
+}
+template<>
+inline bool lt<null_type,null_type>(const null_type&, const null_type&) { return false; }
+
+template<class T1, class T2>
+inline bool gt(const T1& lhs, const T2& rhs) {
+ return lhs.get_head() > rhs.get_head() ||
+ !(rhs.get_head() > lhs.get_head()) &&
+ gt(lhs.get_tail(), rhs.get_tail());
+}
+template<>
+inline bool gt<null_type,null_type>(const null_type&, const null_type&) { return false; }
+
+template<class T1, class T2>
+inline bool lte(const T1& lhs, const T2& rhs) {
+ return lhs.get_head() <= rhs.get_head() &&
+ ( !(rhs.get_head() <= lhs.get_head()) ||
+ lte(lhs.get_tail(), rhs.get_tail()));
+}
+template<>
+inline bool lte<null_type,null_type>(const null_type&, const null_type&) { return true; }
+
+template<class T1, class T2>
+inline bool gte(const T1& lhs, const T2& rhs) {
+ return lhs.get_head() >= rhs.get_head() &&
+ ( !(rhs.get_head() >= lhs.get_head()) ||
+ gte(lhs.get_tail(), rhs.get_tail()));
+}
+template<>
+inline bool gte<null_type,null_type>(const null_type&, const null_type&) { return true; }
+
+} // end of namespace detail
+
+
+// equal ----
+
+template<class T1, class T2, class S1, class S2>
+inline bool operator==(const cons<T1, T2>& lhs, const cons<S1, S2>& rhs)
+{
+ // check that tuple lengths are equal
+ BOOST_STATIC_ASSERT(length<T2>::value == length<S2>::value);
+
+ return detail::eq(lhs, rhs);
+}
+
+// not equal -----
+
+template<class T1, class T2, class S1, class S2>
+inline bool operator!=(const cons<T1, T2>& lhs, const cons<S1, S2>& rhs)
+{
+
+ // check that tuple lengths are equal
+ BOOST_STATIC_ASSERT(length<T2>::value == length<S2>::value);
+
+ return detail::neq(lhs, rhs);
+}
+
+// <
+template<class T1, class T2, class S1, class S2>
+inline bool operator<(const cons<T1, T2>& lhs, const cons<S1, S2>& rhs)
+{
+ // check that tuple lengths are equal
+ BOOST_STATIC_ASSERT(length<T2>::value == length<S2>::value);
+
+ return detail::lt(lhs, rhs);
+}
+
+// >
+template<class T1, class T2, class S1, class S2>
+inline bool operator>(const cons<T1, T2>& lhs, const cons<S1, S2>& rhs)
+{
+ // check that tuple lengths are equal
+ BOOST_STATIC_ASSERT(length<T2>::value == length<S2>::value);
+
+ return detail::gt(lhs, rhs);
+}
+
+// <=
+template<class T1, class T2, class S1, class S2>
+inline bool operator<=(const cons<T1, T2>& lhs, const cons<S1, S2>& rhs)
+{
+ // check that tuple lengths are equal
+ BOOST_STATIC_ASSERT(length<T2>::value == length<S2>::value);
+
+ return detail::lte(lhs, rhs);
+}
+
+// >=
+template<class T1, class T2, class S1, class S2>
+inline bool operator>=(const cons<T1, T2>& lhs, const cons<S1, S2>& rhs)
+{
+ // check that tuple lengths are equal
+ BOOST_STATIC_ASSERT(length<T2>::value == length<S2>::value);
+
+ return detail::gte(lhs, rhs);
+}
+
+} // end of namespace tuples
+} // end of namespace boost
+
+
+#endif // BOOST_TUPLE_COMPARISON_HPP
diff --git a/boost/boost/tuple/tuple_io.hpp b/boost/boost/tuple/tuple_io.hpp
new file mode 100644
index 00000000000..40c2599c5af
--- /dev/null
+++ b/boost/boost/tuple/tuple_io.hpp
@@ -0,0 +1,525 @@
+// tuple_io.hpp --------------------------------------------------------------
+
+// Copyright (C) 2001 Jaakko Järvi (jaakko.jarvi@cs.utu.fi)
+// 2001 Gary Powell (gary.powell@sierra.com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+// For more information, see http://www.boost.org
+
+// ----------------------------------------------------------------------------
+
+#ifndef BOOST_TUPLE_IO_HPP
+#define BOOST_TUPLE_IO_HPP
+
+
+// add to boost/config.hpp
+// for now
+# if defined __GNUC__
+# if (__GNUC__ == 2 && __GNUC_MINOR__ <= 97)
+#define BOOST_NO_TEMPLATED_STREAMS
+#endif
+#endif // __GNUC__
+
+#if defined BOOST_NO_TEMPLATED_STREAMS
+#include <iostream>
+#else
+#include <istream>
+#include <ostream>
+#endif
+
+#include "boost/tuple/tuple.hpp"
+
+// This is ugly: one should be using twoargument isspace since whitspace can
+// be locale dependent, in theory at least.
+// not all libraries implement have the two-arg version, so we need to
+// use the one-arg one, which one should get with <cctype> but there seem
+// to be exceptions to this.
+
+#if !defined (BOOST_NO_STD_LOCALE)
+
+#include <locale> // for two-arg isspace
+
+#else
+
+#include <cctype> // for one-arg (old) isspace
+#include <ctype.h> // Metrowerks does not find one-arg isspace from cctype
+
+#endif
+
+namespace boost {
+namespace tuples {
+
+namespace detail {
+
+class format_info {
+public:
+
+ enum manipulator_type { open, close, delimiter };
+ BOOST_STATIC_CONSTANT(int, number_of_manipulators = delimiter + 1);
+private:
+
+ static int get_stream_index (int m)
+ {
+ static const int stream_index[number_of_manipulators]
+ = { std::ios::xalloc(), std::ios::xalloc(), std::ios::xalloc() };
+
+ return stream_index[m];
+ }
+
+ format_info(const format_info&);
+ format_info();
+
+
+public:
+
+#if defined (BOOST_NO_TEMPLATED_STREAMS)
+ static char get_manipulator(std::ios& i, manipulator_type m) {
+ char c = static_cast<char>(i.iword(get_stream_index(m)));
+
+ // parentheses and space are the default manipulators
+ if (!c) {
+ switch(m) {
+ case detail::format_info::open : c = '('; break;
+ case detail::format_info::close : c = ')'; break;
+ case detail::format_info::delimiter : c = ' '; break;
+ }
+ }
+ return c;
+ }
+
+ static void set_manipulator(std::ios& i, manipulator_type m, char c) {
+ i.iword(get_stream_index(m)) = static_cast<long>(c);
+ }
+#else
+ template<class CharType, class CharTrait>
+ static CharType get_manipulator(std::basic_ios<CharType, CharTrait>& i,
+ manipulator_type m) {
+ // The manipulators are stored as long.
+ // A valid instanitation of basic_stream allows CharType to be any POD,
+ // hence, the static_cast may fail (it fails if long is not convertible
+ // to CharType
+ CharType c = static_cast<CharType>(i.iword(get_stream_index(m)) );
+ // parentheses and space are the default manipulators
+ if (!c) {
+ switch(m) {
+ case detail::format_info::open : c = i.widen('('); break;
+ case detail::format_info::close : c = i.widen(')'); break;
+ case detail::format_info::delimiter : c = i.widen(' '); break;
+ }
+ }
+ return c;
+ }
+
+
+ template<class CharType, class CharTrait>
+ static void set_manipulator(std::basic_ios<CharType, CharTrait>& i,
+ manipulator_type m, CharType c) {
+ // The manipulators are stored as long.
+ // A valid instanitation of basic_stream allows CharType to be any POD,
+ // hence, the static_cast may fail (it fails if CharType is not
+ // convertible long.
+ i.iword(get_stream_index(m)) = static_cast<long>(c);
+ }
+#endif // BOOST_NO_TEMPLATED_STREAMS
+};
+
+} // end of namespace detail
+
+template<class CharType>
+class tuple_manipulator {
+ const detail::format_info::manipulator_type mt;
+ CharType f_c;
+public:
+ explicit tuple_manipulator(detail::format_info::manipulator_type m,
+ const char c = 0)
+ : mt(m), f_c(c) {}
+
+#if defined (BOOST_NO_TEMPLATED_STREAMS)
+ void set(std::ios &io) const {
+ detail::format_info::set_manipulator(io, mt, f_c);
+ }
+#else
+#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+ template<class CharType2, class CharTrait>
+ void set(std::basic_ios<CharType2, CharTrait> &io) const {
+ detail::format_info::set_manipulator(io, mt, f_c);
+ }
+#else
+ template<class CharTrait>
+ void set(std::basic_ios<CharType, CharTrait> &io) const {
+ detail::format_info::set_manipulator(io, mt, f_c);
+ }
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#endif // BOOST_NO_TEMPLATED_STREAMS
+};
+
+#if defined (BOOST_NO_TEMPLATED_STREAMS)
+inline std::ostream&
+operator<<(std::ostream& o, const tuple_manipulator<char>& m) {
+ m.set(o);
+ return o;
+}
+
+inline std::istream&
+operator>>(std::istream& i, const tuple_manipulator<char>& m) {
+ m.set(i);
+ return i;
+}
+
+#else
+
+template<class CharType, class CharTrait>
+inline std::basic_ostream<CharType, CharTrait>&
+operator<<(std::basic_ostream<CharType, CharTrait>& o, const tuple_manipulator<CharType>& m) {
+ m.set(o);
+ return o;
+}
+
+template<class CharType, class CharTrait>
+inline std::basic_istream<CharType, CharTrait>&
+operator>>(std::basic_istream<CharType, CharTrait>& i, const tuple_manipulator<CharType>& m) {
+ m.set(i);
+ return i;
+}
+
+#endif // BOOST_NO_TEMPLATED_STREAMS
+
+template<class CharType>
+inline tuple_manipulator<CharType> set_open(const CharType c) {
+ return tuple_manipulator<CharType>(detail::format_info::open, c);
+}
+
+template<class CharType>
+inline tuple_manipulator<CharType> set_close(const CharType c) {
+ return tuple_manipulator<CharType>(detail::format_info::close, c);
+}
+
+template<class CharType>
+inline tuple_manipulator<CharType> set_delimiter(const CharType c) {
+ return tuple_manipulator<CharType>(detail::format_info::delimiter, c);
+}
+
+
+
+
+
+// -------------------------------------------------------------
+// printing tuples to ostream in format (a b c)
+// parentheses and space are defaults, but can be overriden with manipulators
+// set_open, set_close and set_delimiter
+
+namespace detail {
+
+// Note: The order of the print functions is critical
+// to let a conforming compiler find and select the correct one.
+
+#if defined (BOOST_NO_TEMPLATED_STREAMS)
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+template<class T1>
+inline std::ostream& print(std::ostream& o, const cons<T1, null_type>& t) {
+ return o << t.head;
+}
+#endif // BOOST_NO_TEMPLATED_STREAMS
+
+inline std::ostream& print(std::ostream& o, const null_type&) { return o; }
+
+template<class T1, class T2>
+inline std::ostream&
+print(std::ostream& o, const cons<T1, T2>& t) {
+
+ const char d = format_info::get_manipulator(o, format_info::delimiter);
+
+ o << t.head;
+
+#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+ if (tuples::length<T2>::value == 0)
+ return o;
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ o << d;
+
+ return print(o, t.tail );
+
+}
+
+
+
+#else
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+template<class CharType, class CharTrait, class T1>
+inline std::basic_ostream<CharType, CharTrait>&
+print(std::basic_ostream<CharType, CharTrait>& o, const cons<T1, null_type>& t) {
+ return o << t.head;
+}
+#endif // !BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+
+template<class CharType, class CharTrait>
+inline std::basic_ostream<CharType, CharTrait>&
+print(std::basic_ostream<CharType, CharTrait>& o, const null_type&) {
+ return o;
+}
+
+template<class CharType, class CharTrait, class T1, class T2>
+inline std::basic_ostream<CharType, CharTrait>&
+print(std::basic_ostream<CharType, CharTrait>& o, const cons<T1, T2>& t) {
+
+ const CharType d = format_info::get_manipulator(o, format_info::delimiter);
+
+ o << t.head;
+
+#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+ if (tuples::length<T2>::value == 0)
+ return o;
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ o << d;
+
+ return print(o, t.tail);
+}
+
+#endif // BOOST_NO_TEMPLATED_STREAMS
+
+} // namespace detail
+
+#if defined (BOOST_NO_TEMPLATED_STREAMS)
+template<class T1, class T2>
+inline std::ostream& operator<<(std::ostream& o, const cons<T1, T2>& t) {
+ if (!o.good() ) return o;
+
+ const char l =
+ detail::format_info::get_manipulator(o, detail::format_info::open);
+ const char r =
+ detail::format_info::get_manipulator(o, detail::format_info::close);
+
+ o << l;
+
+ detail::print(o, t);
+
+ o << r;
+
+ return o;
+}
+
+#else
+
+template<class CharType, class CharTrait, class T1, class T2>
+inline std::basic_ostream<CharType, CharTrait>&
+operator<<(std::basic_ostream<CharType, CharTrait>& o,
+ const cons<T1, T2>& t) {
+ if (!o.good() ) return o;
+
+ const CharType l =
+ detail::format_info::get_manipulator(o, detail::format_info::open);
+ const CharType r =
+ detail::format_info::get_manipulator(o, detail::format_info::close);
+
+ o << l;
+
+ detail::print(o, t);
+
+ o << r;
+
+ return o;
+}
+#endif // BOOST_NO_TEMPLATED_STREAMS
+
+
+// -------------------------------------------------------------
+// input stream operators
+
+namespace detail {
+
+#if defined (BOOST_NO_TEMPLATED_STREAMS)
+
+inline std::istream&
+extract_and_check_delimiter(
+ std::istream& is, format_info::manipulator_type del)
+{
+ const char d = format_info::get_manipulator(is, del);
+
+#if defined (BOOST_NO_STD_LOCALE)
+ const bool is_delimiter = !isspace(d);
+#else
+ const bool is_delimiter = (!std::isspace(d, is.getloc()) );
+#endif
+
+ char c;
+ if (is_delimiter) {
+ is >> c;
+ if (is.good() && c!=d) {
+ is.setstate(std::ios::failbit);
+ }
+ }
+ return is;
+}
+
+
+// Note: The order of the read functions is critical to let a
+// (conforming?) compiler find and select the correct one.
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+template<class T1>
+inline std::istream &
+read (std::istream &is, cons<T1, null_type>& t1) {
+
+ if (!is.good()) return is;
+
+ return is >> t1.head ;
+}
+#else
+inline std::istream& read(std::istream& i, const null_type&) { return i; }
+#endif // !BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+template<class T1, class T2>
+inline std::istream&
+read(std::istream &is, cons<T1, T2>& t1) {
+
+ if (!is.good()) return is;
+
+ is >> t1.head;
+
+#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+ if (tuples::length<T2>::value == 0)
+ return is;
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+ extract_and_check_delimiter(is, format_info::delimiter);
+
+ return read(is, t1.tail);
+}
+
+} // end namespace detail
+
+inline std::istream&
+operator>>(std::istream &is, null_type&) {
+
+ if (!is.good() ) return is;
+
+ detail::extract_and_check_delimiter(is, detail::format_info::open);
+ detail::extract_and_check_delimiter(is, detail::format_info::close);
+
+ return is;
+}
+
+
+template<class T1, class T2>
+inline std::istream&
+operator>>(std::istream& is, cons<T1, T2>& t1) {
+
+ if (!is.good() ) return is;
+
+ detail::extract_and_check_delimiter(is, detail::format_info::open);
+
+ detail::read(is, t1);
+
+ detail::extract_and_check_delimiter(is, detail::format_info::close);
+
+ return is;
+}
+
+
+
+#else
+
+template<class CharType, class CharTrait>
+inline std::basic_istream<CharType, CharTrait>&
+extract_and_check_delimiter(
+ std::basic_istream<CharType, CharTrait> &is, format_info::manipulator_type del)
+{
+ const CharType d = format_info::get_manipulator(is, del);
+
+#if defined (BOOST_NO_STD_LOCALE)
+ const bool is_delimiter = !isspace(d);
+#elif defined ( __BORLANDC__ )
+ const bool is_delimiter = !std::use_facet< std::ctype< CharType > >
+ (is.getloc() ).is( std::ctype_base::space, d);
+#else
+ const bool is_delimiter = (!std::isspace(d, is.getloc()) );
+#endif
+
+ CharType c;
+ if (is_delimiter) {
+ is >> c;
+ if (is.good() && c!=d) {
+ is.setstate(std::ios::failbit);
+ }
+ }
+ return is;
+}
+
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+template<class CharType, class CharTrait, class T1>
+inline std::basic_istream<CharType, CharTrait> &
+read (std::basic_istream<CharType, CharTrait> &is, cons<T1, null_type>& t1) {
+
+ if (!is.good()) return is;
+
+ return is >> t1.head;
+}
+#else
+template<class CharType, class CharTrait>
+inline std::basic_istream<CharType, CharTrait>&
+read(std::basic_istream<CharType, CharTrait>& i, const null_type&) { return i; }
+
+#endif // !BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+template<class CharType, class CharTrait, class T1, class T2>
+inline std::basic_istream<CharType, CharTrait>&
+read(std::basic_istream<CharType, CharTrait> &is, cons<T1, T2>& t1) {
+
+ if (!is.good()) return is;
+
+ is >> t1.head;
+
+#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+ if (tuples::length<T2>::value == 0)
+ return is;
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+ extract_and_check_delimiter(is, format_info::delimiter);
+
+ return read(is, t1.tail);
+}
+
+} // end namespace detail
+
+
+template<class CharType, class CharTrait>
+inline std::basic_istream<CharType, CharTrait>&
+operator>>(std::basic_istream<CharType, CharTrait> &is, null_type&) {
+
+ if (!is.good() ) return is;
+
+ detail::extract_and_check_delimiter(is, detail::format_info::open);
+ detail::extract_and_check_delimiter(is, detail::format_info::close);
+
+ return is;
+}
+
+template<class CharType, class CharTrait, class T1, class T2>
+inline std::basic_istream<CharType, CharTrait>&
+operator>>(std::basic_istream<CharType, CharTrait>& is, cons<T1, T2>& t1) {
+
+ if (!is.good() ) return is;
+
+ detail::extract_and_check_delimiter(is, detail::format_info::open);
+
+ detail::read(is, t1);
+
+ detail::extract_and_check_delimiter(is, detail::format_info::close);
+
+ return is;
+}
+
+#endif // BOOST_NO_TEMPLATED_STREAMS
+
+} // end of namespace tuples
+} // end of namespace boost
+
+#endif // BOOST_TUPLE_IO_HPP
+
+
diff --git a/boost/boost/type.hpp b/boost/boost/type.hpp
new file mode 100644
index 00000000000..ab81c916d77
--- /dev/null
+++ b/boost/boost/type.hpp
@@ -0,0 +1,18 @@
+// (C) Copyright David Abrahams 2001.
+// 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_TYPE_DWA20010120_HPP
+# define BOOST_TYPE_DWA20010120_HPP
+
+namespace boost {
+
+ // Just a simple "type envelope". Useful in various contexts, mostly to work
+ // around some MSVC deficiencies.
+ template <class T>
+ struct type {};
+
+}
+
+#endif // BOOST_TYPE_DWA20010120_HPP
diff --git a/boost/boost/type_traits.hpp b/boost/boost/type_traits.hpp
new file mode 100644
index 00000000000..08bb5a1e01d
--- /dev/null
+++ b/boost/boost/type_traits.hpp
@@ -0,0 +1,80 @@
+// (C) Copyright John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+// See boost/type_traits/*.hpp for full copyright notices.
+
+#ifndef BOOST_TYPE_TRAITS_HPP
+#define BOOST_TYPE_TRAITS_HPP
+
+#include "boost/type_traits/add_const.hpp"
+#include "boost/type_traits/add_cv.hpp"
+#include "boost/type_traits/add_pointer.hpp"
+#include "boost/type_traits/add_reference.hpp"
+#include "boost/type_traits/add_volatile.hpp"
+#include "boost/type_traits/alignment_of.hpp"
+#include "boost/type_traits/has_nothrow_assign.hpp"
+#include "boost/type_traits/has_nothrow_constructor.hpp"
+#include "boost/type_traits/has_nothrow_copy.hpp"
+#include "boost/type_traits/has_nothrow_destructor.hpp"
+#include "boost/type_traits/has_trivial_assign.hpp"
+#include "boost/type_traits/has_trivial_constructor.hpp"
+#include "boost/type_traits/has_trivial_copy.hpp"
+#include "boost/type_traits/has_trivial_destructor.hpp"
+#include "boost/type_traits/has_virtual_destructor.hpp"
+#include "boost/type_traits/is_signed.hpp"
+#include "boost/type_traits/is_unsigned.hpp"
+#include "boost/type_traits/is_abstract.hpp"
+#include "boost/type_traits/is_arithmetic.hpp"
+#include "boost/type_traits/is_array.hpp"
+#include "boost/type_traits/is_base_and_derived.hpp"
+#include "boost/type_traits/is_base_of.hpp"
+#include "boost/type_traits/is_class.hpp"
+#include "boost/type_traits/is_compound.hpp"
+#include "boost/type_traits/is_const.hpp"
+#include "boost/type_traits/is_convertible.hpp"
+#include "boost/type_traits/is_empty.hpp"
+#include "boost/type_traits/is_enum.hpp"
+#include "boost/type_traits/is_float.hpp"
+#include "boost/type_traits/is_floating_point.hpp"
+#include "boost/type_traits/is_function.hpp"
+#include "boost/type_traits/is_fundamental.hpp"
+#include "boost/type_traits/is_integral.hpp"
+#include "boost/type_traits/is_member_function_pointer.hpp"
+#include "boost/type_traits/is_member_object_pointer.hpp"
+#include "boost/type_traits/is_member_pointer.hpp"
+#include "boost/type_traits/is_object.hpp"
+#include "boost/type_traits/is_pod.hpp"
+#include "boost/type_traits/is_polymorphic.hpp"
+#include "boost/type_traits/is_pointer.hpp"
+#include "boost/type_traits/is_reference.hpp"
+#include "boost/type_traits/is_same.hpp"
+#include "boost/type_traits/is_scalar.hpp"
+#include "boost/type_traits/is_stateless.hpp"
+#include "boost/type_traits/is_union.hpp"
+#include "boost/type_traits/is_void.hpp"
+#include "boost/type_traits/is_volatile.hpp"
+#include "boost/type_traits/rank.hpp"
+#include "boost/type_traits/extent.hpp"
+#include "boost/type_traits/remove_bounds.hpp"
+#include "boost/type_traits/remove_extent.hpp"
+#include "boost/type_traits/remove_all_extents.hpp"
+#include "boost/type_traits/remove_const.hpp"
+#include "boost/type_traits/remove_cv.hpp"
+#include "boost/type_traits/remove_pointer.hpp"
+#include "boost/type_traits/remove_reference.hpp"
+#include "boost/type_traits/remove_volatile.hpp"
+#include "boost/type_traits/type_with_alignment.hpp"
+#include "boost/type_traits/function_traits.hpp"
+#include "boost/type_traits/aligned_storage.hpp"
+
+#include "boost/type_traits/ice.hpp"
+
+#endif // BOOST_TYPE_TRAITS_HPP
+
+
+
+
diff --git a/boost/boost/type_traits/add_const.hpp b/boost/boost/type_traits/add_const.hpp
new file mode 100644
index 00000000000..29f0bd95bc8
--- /dev/null
+++ b/boost/boost/type_traits/add_const.hpp
@@ -0,0 +1,47 @@
+
+// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard
+// Hinnant & John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_ADD_CONST_HPP_INCLUDED
+#define BOOST_TT_ADD_CONST_HPP_INCLUDED
+
+#include <boost/config.hpp>
+
+// should be the last #include
+#include <boost/type_traits/detail/type_trait_def.hpp>
+
+namespace boost {
+
+// * convert a type T to const type - add_const<T>
+// this is not required since the result is always
+// the same as "T const", but it does suppress warnings
+// from some compilers:
+
+#if defined(BOOST_MSVC)
+// This bogus warning will appear when add_const is applied to a
+// const volatile reference because we can't detect const volatile
+// references with MSVC6.
+# pragma warning(push)
+# pragma warning(disable:4181) // warning C4181: qualifier applied to reference type ignored
+#endif
+
+BOOST_TT_AUX_TYPE_TRAIT_DEF1(add_const,T,T const)
+
+#if defined(BOOST_MSVC)
+# pragma warning(pop)
+#endif
+
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,add_const,T&,T&)
+#endif
+
+} // namespace boost
+
+#include <boost/type_traits/detail/type_trait_undef.hpp>
+
+#endif // BOOST_TT_ADD_CONST_HPP_INCLUDED
diff --git a/boost/boost/type_traits/add_cv.hpp b/boost/boost/type_traits/add_cv.hpp
new file mode 100644
index 00000000000..bfde76a623f
--- /dev/null
+++ b/boost/boost/type_traits/add_cv.hpp
@@ -0,0 +1,48 @@
+
+// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard
+// Hinnant & John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+
+#ifndef BOOST_TT_ADD_CV_HPP_INCLUDED
+#define BOOST_TT_ADD_CV_HPP_INCLUDED
+
+#include <boost/config.hpp>
+
+// should be the last #include
+#include <boost/type_traits/detail/type_trait_def.hpp>
+
+namespace boost {
+
+// * convert a type T to a const volatile type - add_cv<T>
+// this is not required since the result is always
+// the same as "T const volatile", but it does suppress warnings
+// from some compilers:
+
+#if defined(BOOST_MSVC)
+// This bogus warning will appear when add_volatile is applied to a
+// const volatile reference because we can't detect const volatile
+// references with MSVC6.
+# pragma warning(push)
+# pragma warning(disable:4181) // warning C4181: qualifier applied to reference type ignored
+#endif
+
+BOOST_TT_AUX_TYPE_TRAIT_DEF1(add_cv,T,T const volatile)
+
+#if defined(BOOST_MSVC)
+# pragma warning(pop)
+#endif
+
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,add_cv,T&,T&)
+#endif
+
+} // namespace boost
+
+#include <boost/type_traits/detail/type_trait_undef.hpp>
+
+#endif // BOOST_TT_ADD_CV_HPP_INCLUDED
diff --git a/boost/boost/type_traits/add_pointer.hpp b/boost/boost/type_traits/add_pointer.hpp
new file mode 100644
index 00000000000..308baf0fb71
--- /dev/null
+++ b/boost/boost/type_traits/add_pointer.hpp
@@ -0,0 +1,72 @@
+
+// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_ADD_POINTER_HPP_INCLUDED
+#define BOOST_TT_ADD_POINTER_HPP_INCLUDED
+
+#include <boost/type_traits/remove_reference.hpp>
+
+// should be the last #include
+#include <boost/type_traits/detail/type_trait_def.hpp>
+
+namespace boost {
+
+namespace detail {
+
+#if defined(__BORLANDC__) && (__BORLANDC__ < 0x600)
+//
+// For some reason this implementation stops Borlands compiler
+// from dropping cv-qualifiers, it still fails with references
+// to arrays for some reason though (shrug...) (JM 20021104)
+//
+template <typename T>
+struct add_pointer_impl
+{
+ typedef T* type;
+};
+template <typename T>
+struct add_pointer_impl<T&>
+{
+ typedef T* type;
+};
+template <typename T>
+struct add_pointer_impl<T&const>
+{
+ typedef T* type;
+};
+template <typename T>
+struct add_pointer_impl<T&volatile>
+{
+ typedef T* type;
+};
+template <typename T>
+struct add_pointer_impl<T&const volatile>
+{
+ typedef T* type;
+};
+
+#else
+
+template <typename T>
+struct add_pointer_impl
+{
+ typedef typename remove_reference<T>::type no_ref_type;
+ typedef no_ref_type* type;
+};
+
+#endif
+
+} // namespace detail
+
+BOOST_TT_AUX_TYPE_TRAIT_DEF1(add_pointer,T,typename boost::detail::add_pointer_impl<T>::type)
+
+} // namespace boost
+
+#include <boost/type_traits/detail/type_trait_undef.hpp>
+
+#endif // BOOST_TT_ADD_POINTER_HPP_INCLUDED
diff --git a/boost/boost/type_traits/add_reference.hpp b/boost/boost/type_traits/add_reference.hpp
new file mode 100644
index 00000000000..7dfb4bed89e
--- /dev/null
+++ b/boost/boost/type_traits/add_reference.hpp
@@ -0,0 +1,89 @@
+
+// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_ADD_REFERENCE_HPP_INCLUDED
+#define BOOST_TT_ADD_REFERENCE_HPP_INCLUDED
+
+#include <boost/type_traits/is_reference.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/config.hpp>
+
+// should be the last #include
+#include <boost/type_traits/detail/type_trait_def.hpp>
+
+namespace boost {
+
+namespace detail {
+
+#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && defined(BOOST_MSVC6_MEMBER_TEMPLATES)
+
+template <bool x>
+struct reference_adder
+{
+ template <typename T> struct result_
+ {
+ typedef T& type;
+ };
+};
+
+template <>
+struct reference_adder<true>
+{
+ template <typename T> struct result_
+ {
+ typedef T type;
+ };
+};
+
+template <typename T>
+struct add_reference_impl
+{
+ typedef typename reference_adder<
+ ::boost::is_reference<T>::value
+ >::template result_<T> result;
+
+ typedef typename result::type type;
+};
+
+#else
+
+template <typename T>
+struct add_reference_impl
+{
+ typedef T& type;
+};
+
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+BOOST_TT_AUX_TYPE_TRAIT_IMPL_PARTIAL_SPEC1_1(typename T,add_reference,T&,T&)
+#endif
+
+#endif
+
+// these full specialisations are always required:
+BOOST_TT_AUX_TYPE_TRAIT_IMPL_SPEC1(add_reference,void,void)
+#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
+BOOST_TT_AUX_TYPE_TRAIT_IMPL_SPEC1(add_reference,void const,void const)
+BOOST_TT_AUX_TYPE_TRAIT_IMPL_SPEC1(add_reference,void volatile,void volatile)
+BOOST_TT_AUX_TYPE_TRAIT_IMPL_SPEC1(add_reference,void const volatile,void const volatile)
+#endif
+
+} // namespace detail
+
+BOOST_TT_AUX_TYPE_TRAIT_DEF1(add_reference,T,typename boost::detail::add_reference_impl<T>::type)
+
+// agurt, 07/mar/03: workaround Borland's ill-formed sensitivity to an additional
+// level of indirection, here
+#if BOOST_WORKAROUND(__BORLANDC__, < 0x600)
+BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,add_reference,T&,T&)
+#endif
+
+} // namespace boost
+
+#include <boost/type_traits/detail/type_trait_undef.hpp>
+
+#endif // BOOST_TT_ADD_REFERENCE_HPP_INCLUDED
diff --git a/boost/boost/type_traits/add_volatile.hpp b/boost/boost/type_traits/add_volatile.hpp
new file mode 100644
index 00000000000..491f1c2dd38
--- /dev/null
+++ b/boost/boost/type_traits/add_volatile.hpp
@@ -0,0 +1,47 @@
+
+// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard
+// Hinnant & John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_ADD_VOLATILE_HPP_INCLUDED
+#define BOOST_TT_ADD_VOLATILE_HPP_INCLUDED
+
+#include <boost/config.hpp>
+
+// should be the last #include
+#include <boost/type_traits/detail/type_trait_def.hpp>
+
+namespace boost {
+
+// * convert a type T to volatile type - add_volatile<T>
+// this is not required since the result is always
+// the same as "T volatile", but it does suppress warnings
+// from some compilers:
+
+#if defined(BOOST_MSVC)
+// This bogus warning will appear when add_volatile is applied to a
+// const volatile reference because we can't detect const volatile
+// references with MSVC6.
+# pragma warning(push)
+# pragma warning(disable:4181) // warning C4181: qualifier applied to reference type ignored
+#endif
+
+BOOST_TT_AUX_TYPE_TRAIT_DEF1(add_volatile,T,T volatile)
+
+#if defined(BOOST_MSVC)
+# pragma warning(pop)
+#endif
+
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,add_volatile,T&,T&)
+#endif
+
+} // namespace boost
+
+#include <boost/type_traits/detail/type_trait_undef.hpp>
+
+#endif // BOOST_TT_ADD_VOLATILE_HPP_INCLUDED
diff --git a/boost/boost/type_traits/aligned_storage.hpp b/boost/boost/type_traits/aligned_storage.hpp
new file mode 100644
index 00000000000..5420f26738d
--- /dev/null
+++ b/boost/boost/type_traits/aligned_storage.hpp
@@ -0,0 +1,13 @@
+
+// Copyright (C) John Maddock 2005.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_ALIGNED_STORAGE_HPP_INCLUDED
+# define BOOST_TT_ALIGNED_STORAGE_HPP_INCLUDED
+# include <boost/aligned_storage.hpp>
+#endif // BOOST_TT_ALIGNED_STORAGE_HPP_INCLUDED
+
diff --git a/boost/boost/type_traits/alignment_of.hpp b/boost/boost/type_traits/alignment_of.hpp
new file mode 100644
index 00000000000..f18d4226fb8
--- /dev/null
+++ b/boost/boost/type_traits/alignment_of.hpp
@@ -0,0 +1,100 @@
+
+// (C) Copyright John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_ALIGNMENT_OF_HPP_INCLUDED
+#define BOOST_TT_ALIGNMENT_OF_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <cstddef>
+
+// should be the last #include
+#include <boost/type_traits/detail/size_t_trait_def.hpp>
+
+#ifdef BOOST_MSVC
+# pragma warning(push)
+# pragma warning(disable: 4121) // alignment is sensitive to packing
+#endif
+#if defined(__BORLANDC__) && (__BORLANDC__ < 0x600)
+#pragma option push -Vx- -Ve-
+#endif
+
+namespace boost {
+
+template <typename T> struct alignment_of;
+
+// get the alignment of some arbitrary type:
+namespace detail {
+
+template <typename T>
+struct alignment_of_hack
+{
+ char c;
+ T t;
+ alignment_of_hack();
+};
+
+
+template <unsigned A, unsigned S>
+struct alignment_logic
+{
+ BOOST_STATIC_CONSTANT(std::size_t, value = A < S ? A : S);
+};
+
+
+template< typename T >
+struct alignment_of_impl
+{
+ BOOST_STATIC_CONSTANT(std::size_t, value =
+ (::boost::detail::alignment_logic<
+ sizeof(::boost::detail::alignment_of_hack<T>) - sizeof(T),
+ sizeof(T)
+ >::value));
+};
+
+} // namespace detail
+
+BOOST_TT_AUX_SIZE_T_TRAIT_DEF1(alignment_of,T,::boost::detail::alignment_of_impl<T>::value)
+
+// references have to be treated specially, assume
+// that a reference is just a special pointer:
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+template <typename T>
+struct alignment_of<T&>
+ : alignment_of<T*>
+{
+};
+#endif
+#ifdef __BORLANDC__
+// long double gives an incorrect value of 10 (!)
+// unless we do this...
+struct long_double_wrapper{ long double ld; };
+template<> struct alignment_of<long double>
+ : public alignment_of<long_double_wrapper>{};
+#endif
+
+// void has to be treated specially:
+BOOST_TT_AUX_SIZE_T_TRAIT_SPEC1(alignment_of,void,0)
+#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
+BOOST_TT_AUX_SIZE_T_TRAIT_SPEC1(alignment_of,void const,0)
+BOOST_TT_AUX_SIZE_T_TRAIT_SPEC1(alignment_of,void volatile,0)
+BOOST_TT_AUX_SIZE_T_TRAIT_SPEC1(alignment_of,void const volatile,0)
+#endif
+
+} // namespace boost
+
+#if defined(__BORLANDC__) && (__BORLANDC__ < 0x600)
+#pragma option pop
+#endif
+#ifdef BOOST_MSVC
+# pragma warning(pop)
+#endif
+
+#include <boost/type_traits/detail/size_t_trait_undef.hpp>
+
+#endif // BOOST_TT_ALIGNMENT_OF_HPP_INCLUDED
+
diff --git a/boost/boost/type_traits/alignment_traits.hpp b/boost/boost/type_traits/alignment_traits.hpp
new file mode 100644
index 00000000000..2ed6934dad4
--- /dev/null
+++ b/boost/boost/type_traits/alignment_traits.hpp
@@ -0,0 +1,15 @@
+
+// (C) Copyright John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_ALIGNMENT_TRAITS_HPP_INCLUDED
+#define BOOST_TT_ALIGNMENT_TRAITS_HPP_INCLUDED
+
+#include <boost/type_traits/alignment_of.hpp>
+#include <boost/type_traits/type_with_alignment.hpp>
+
+#endif // BOOST_TT_ALIGNMENT_TRAITS_HPP_INCLUDED
diff --git a/boost/boost/type_traits/arithmetic_traits.hpp b/boost/boost/type_traits/arithmetic_traits.hpp
new file mode 100644
index 00000000000..e4670e6b38d
--- /dev/null
+++ b/boost/boost/type_traits/arithmetic_traits.hpp
@@ -0,0 +1,20 @@
+// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+//
+// defines traits classes for arithmetic types:
+// is_void, is_integral, is_float, is_arithmetic, is_fundamental.
+
+#ifndef BOOST_TT_ARITHMETIC_TRAITS_HPP_INCLUDED
+#define BOOST_TT_ARITHMETIC_TRAITS_HPP_INCLUDED
+
+#include <boost/type_traits/is_arithmetic.hpp>
+#include <boost/type_traits/is_float.hpp>
+#include <boost/type_traits/is_fundamental.hpp>
+#include <boost/type_traits/is_integral.hpp>
+#include <boost/type_traits/is_void.hpp>
+
+#endif // BOOST_TT_ARITHMETIC_TRAITS_HPP_INCLUDED
diff --git a/boost/boost/type_traits/array_traits.hpp b/boost/boost/type_traits/array_traits.hpp
new file mode 100644
index 00000000000..a68ae731767
--- /dev/null
+++ b/boost/boost/type_traits/array_traits.hpp
@@ -0,0 +1,15 @@
+// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard
+// Hinnant & John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+
+#ifndef BOOST_TT_ARRAY_TRAITS_HPP_INCLUDED
+#define BOOST_TT_ARRAY_TRAITS_HPP_INCLUDED
+
+#include <boost/type_traits/is_array.hpp>
+
+#endif // BOOST_TT_ARRAY_TRAITS_HPP_INCLUDED
diff --git a/boost/boost/type_traits/broken_compiler_spec.hpp b/boost/boost/type_traits/broken_compiler_spec.hpp
new file mode 100644
index 00000000000..fb51769d9d4
--- /dev/null
+++ b/boost/boost/type_traits/broken_compiler_spec.hpp
@@ -0,0 +1,117 @@
+
+// Copyright 2001-2003 Aleksey Gurtovoy.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_BROKEN_COMPILER_SPEC_HPP_INCLUDED
+#define BOOST_TT_BROKEN_COMPILER_SPEC_HPP_INCLUDED
+
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/config.hpp>
+
+// these are needed regardless of BOOST_TT_NO_BROKEN_COMPILER_SPEC
+#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+namespace boost { namespace detail {
+template< typename T > struct remove_const_impl { typedef T type; };
+template< typename T > struct remove_volatile_impl { typedef T type; };
+template< typename T > struct remove_pointer_impl { typedef T type; };
+template< typename T > struct remove_reference_impl { typedef T type; };
+typedef int invoke_BOOST_TT_BROKEN_COMPILER_SPEC_outside_all_namespaces;
+}}
+#endif
+
+// agurt, 27/jun/03: disable the workaround if user defined
+// BOOST_TT_NO_BROKEN_COMPILER_SPEC
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
+ || defined(BOOST_TT_NO_BROKEN_COMPILER_SPEC)
+
+# define BOOST_TT_BROKEN_COMPILER_SPEC(T) /**/
+
+#else
+
+// same as BOOST_TT_AUX_TYPE_TRAIT_IMPL_SPEC1 macro, except that it
+// never gets #undef-ined
+# define BOOST_TT_AUX_BROKEN_TYPE_TRAIT_SPEC1(trait,spec,result) \
+template<> struct trait##_impl<spec> \
+{ \
+ typedef result type; \
+}; \
+/**/
+
+# define BOOST_TT_AUX_REMOVE_CONST_VOLATILE_RANK1_SPEC(T) \
+ BOOST_TT_AUX_BROKEN_TYPE_TRAIT_SPEC1(remove_const,T const,T) \
+ BOOST_TT_AUX_BROKEN_TYPE_TRAIT_SPEC1(remove_const,T const volatile,T volatile) \
+ BOOST_TT_AUX_BROKEN_TYPE_TRAIT_SPEC1(remove_volatile,T volatile,T) \
+ BOOST_TT_AUX_BROKEN_TYPE_TRAIT_SPEC1(remove_volatile,T const volatile,T const) \
+ /**/
+
+# define BOOST_TT_AUX_REMOVE_PTR_REF_RANK_1_SPEC(T) \
+ BOOST_TT_AUX_BROKEN_TYPE_TRAIT_SPEC1(remove_pointer,T*,T) \
+ BOOST_TT_AUX_BROKEN_TYPE_TRAIT_SPEC1(remove_pointer,T*const,T) \
+ BOOST_TT_AUX_BROKEN_TYPE_TRAIT_SPEC1(remove_pointer,T*volatile,T) \
+ BOOST_TT_AUX_BROKEN_TYPE_TRAIT_SPEC1(remove_pointer,T*const volatile,T) \
+ BOOST_TT_AUX_BROKEN_TYPE_TRAIT_SPEC1(remove_reference,T&,T) \
+ /**/
+
+# define BOOST_TT_AUX_REMOVE_PTR_REF_RANK_2_SPEC(T) \
+ BOOST_TT_AUX_REMOVE_PTR_REF_RANK_1_SPEC(T) \
+ BOOST_TT_AUX_REMOVE_PTR_REF_RANK_1_SPEC(T const) \
+ BOOST_TT_AUX_REMOVE_PTR_REF_RANK_1_SPEC(T volatile) \
+ BOOST_TT_AUX_REMOVE_PTR_REF_RANK_1_SPEC(T const volatile) \
+ /**/
+
+# define BOOST_TT_AUX_REMOVE_ALL_RANK_1_SPEC(T) \
+ BOOST_TT_AUX_REMOVE_PTR_REF_RANK_2_SPEC(T) \
+ BOOST_TT_AUX_REMOVE_CONST_VOLATILE_RANK1_SPEC(T) \
+ /**/
+
+# define BOOST_TT_AUX_REMOVE_ALL_RANK_2_SPEC(T) \
+ BOOST_TT_AUX_REMOVE_ALL_RANK_1_SPEC(T*) \
+ BOOST_TT_AUX_REMOVE_ALL_RANK_1_SPEC(T const*) \
+ BOOST_TT_AUX_REMOVE_ALL_RANK_1_SPEC(T volatile*) \
+ BOOST_TT_AUX_REMOVE_ALL_RANK_1_SPEC(T const volatile*) \
+ /**/
+
+# define BOOST_TT_BROKEN_COMPILER_SPEC(T) \
+ namespace boost { namespace detail { \
+ typedef invoke_BOOST_TT_BROKEN_COMPILER_SPEC_outside_all_namespaces \
+ please_invoke_BOOST_TT_BROKEN_COMPILER_SPEC_outside_all_namespaces; \
+ BOOST_TT_AUX_REMOVE_ALL_RANK_1_SPEC(T) \
+ BOOST_TT_AUX_REMOVE_ALL_RANK_2_SPEC(T) \
+ BOOST_TT_AUX_REMOVE_ALL_RANK_2_SPEC(T*) \
+ BOOST_TT_AUX_REMOVE_ALL_RANK_2_SPEC(T const*) \
+ BOOST_TT_AUX_REMOVE_ALL_RANK_2_SPEC(T volatile*) \
+ BOOST_TT_AUX_REMOVE_ALL_RANK_2_SPEC(T const volatile*) \
+ }} \
+ /**/
+
+# include <boost/type_traits/detail/type_trait_undef.hpp>
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+BOOST_TT_BROKEN_COMPILER_SPEC(bool)
+BOOST_TT_BROKEN_COMPILER_SPEC(char)
+#ifndef BOOST_NO_INTRINSIC_WCHAR_T
+BOOST_TT_BROKEN_COMPILER_SPEC(wchar_t)
+#endif
+BOOST_TT_BROKEN_COMPILER_SPEC(signed char)
+BOOST_TT_BROKEN_COMPILER_SPEC(unsigned char)
+BOOST_TT_BROKEN_COMPILER_SPEC(signed short)
+BOOST_TT_BROKEN_COMPILER_SPEC(unsigned short)
+BOOST_TT_BROKEN_COMPILER_SPEC(signed int)
+BOOST_TT_BROKEN_COMPILER_SPEC(unsigned int)
+BOOST_TT_BROKEN_COMPILER_SPEC(signed long)
+BOOST_TT_BROKEN_COMPILER_SPEC(unsigned long)
+BOOST_TT_BROKEN_COMPILER_SPEC(float)
+BOOST_TT_BROKEN_COMPILER_SPEC(double)
+//BOOST_TT_BROKEN_COMPILER_SPEC(long double)
+
+// for backward compatibility
+#define BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(T) \
+ BOOST_TT_BROKEN_COMPILER_SPEC(T) \
+/**/
+
+#endif // BOOST_TT_BROKEN_COMPILER_SPEC_HPP_INCLUDED
diff --git a/boost/boost/type_traits/composite_traits.hpp b/boost/boost/type_traits/composite_traits.hpp
new file mode 100644
index 00000000000..985a4c51d32
--- /dev/null
+++ b/boost/boost/type_traits/composite_traits.hpp
@@ -0,0 +1,29 @@
+// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard
+// Hinnant & John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+//
+// defines traits classes for composite types:
+// is_array, is_pointer, is_reference, is_member_pointer, is_enum, is_union.
+//
+
+#ifndef BOOST_TT_COMPOSITE_TRAITS_HPP_INCLUDED
+#define BOOST_TT_COMPOSITE_TRAITS_HPP_INCLUDED
+
+#include <boost/type_traits/is_array.hpp>
+#include <boost/type_traits/is_enum.hpp>
+#include <boost/type_traits/is_member_pointer.hpp>
+#include <boost/type_traits/is_member_function_pointer.hpp>
+#include <boost/type_traits/is_pointer.hpp>
+#include <boost/type_traits/is_reference.hpp>
+#include <boost/type_traits/is_union.hpp>
+
+#endif // BOOST_TT_COMPOSITE_TRAITS_HPP_INCLUDED
+
+
+
+
+
diff --git a/boost/boost/type_traits/config.hpp b/boost/boost/type_traits/config.hpp
new file mode 100644
index 00000000000..98945d7e40e
--- /dev/null
+++ b/boost/boost/type_traits/config.hpp
@@ -0,0 +1,76 @@
+
+// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_CONFIG_HPP_INCLUDED
+#define BOOST_TT_CONFIG_HPP_INCLUDED
+
+#ifndef BOOST_CONFIG_HPP
+#include <boost/config.hpp>
+#endif
+
+#include <boost/detail/workaround.hpp>
+
+//
+// whenever we have a conversion function with elipses
+// it needs to be declared __cdecl to suppress compiler
+// warnings from MS and Borland compilers (this *must*
+// appear before we include is_same.hpp below):
+#if defined(BOOST_MSVC) || (defined(__BORLANDC__) && !defined(BOOST_DISABLE_WIN32))
+# define BOOST_TT_DECL __cdecl
+#else
+# define BOOST_TT_DECL /**/
+#endif
+
+# if (BOOST_WORKAROUND(__MWERKS__, < 0x3000) \
+ || BOOST_WORKAROUND(BOOST_MSVC, <= 1301) \
+ || !defined(__EDG_VERSION__) && BOOST_WORKAROUND(__GNUC__, < 3) \
+ || BOOST_WORKAROUND(__IBMCPP__, < 600 ) \
+ || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) \
+ || defined(__ghs) \
+ || BOOST_WORKAROUND(__HP_aCC, BOOST_TESTED_AT(53800)) \
+ || BOOST_WORKAROUND(MPW_CPLUS, BOOST_TESTED_AT(0x890)) \
+ || BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x580)) ) \
+ && defined(BOOST_NO_IS_ABSTRACT)
+
+# define BOOST_TT_NO_CONFORMING_IS_CLASS_IMPLEMENTATION 1
+
+#endif
+
+#ifndef BOOST_TT_NO_CONFORMING_IS_CLASS_IMPLEMENTATION
+# define BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION 1
+#endif
+
+//
+// Define BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+// when we can't test for function types with elipsis:
+//
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+# define BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+#endif
+
+//
+// define BOOST_TT_TEST_MS_FUNC_SIGS
+// when we want to test __stdcall etc function types with is_function etc
+// (Note, does not work with Borland, even though it does support __stdcall etc):
+//
+#if defined(_MSC_EXTENSIONS) && !defined(__BORLANDC__)
+# define BOOST_TT_TEST_MS_FUNC_SIGS
+#endif
+
+//
+// define BOOST_TT_NO_CV_FUNC_TEST
+// if tests for cv-qualified member functions don't
+// work in is_member_function_pointer
+//
+#if BOOST_WORKAROUND(__MWERKS__, < 0x3000) || BOOST_WORKAROUND(__IBMCPP__, <= 600)
+# define BOOST_TT_NO_CV_FUNC_TEST
+#endif
+
+#endif // BOOST_TT_CONFIG_HPP_INCLUDED
+
+
diff --git a/boost/boost/type_traits/conversion_traits.hpp b/boost/boost/type_traits/conversion_traits.hpp
new file mode 100644
index 00000000000..01edfa690e0
--- /dev/null
+++ b/boost/boost/type_traits/conversion_traits.hpp
@@ -0,0 +1,17 @@
+
+// Copyright 2000 John Maddock (john@johnmaddock.co.uk)
+// Copyright 2000 Jeremy Siek (jsiek@lsc.nd.edu)
+// Copyright 1999, 2000 Jaakko J„rvi (jaakko.jarvi@cs.utu.fi)
+//
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_CONVERSION_TRAITS_HPP_INCLUDED
+#define BOOST_TT_CONVERSION_TRAITS_HPP_INCLUDED
+
+#include <boost/type_traits/is_convertible.hpp>
+
+#endif // BOOST_TT_CONVERSION_TRAITS_HPP_INCLUDED
diff --git a/boost/boost/type_traits/cv_traits.hpp b/boost/boost/type_traits/cv_traits.hpp
new file mode 100644
index 00000000000..5bd6c4f0666
--- /dev/null
+++ b/boost/boost/type_traits/cv_traits.hpp
@@ -0,0 +1,24 @@
+// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard
+// Hinnant & John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+//
+// defines traits classes for cv-qualified types:
+// is_const, is_volatile, remove_const, remove_volatile, remove_cv.
+
+#ifndef BOOST_TT_CV_TRAITS_HPP_INCLUDED
+#define BOOST_TT_CV_TRAITS_HPP_INCLUDED
+
+#include <boost/type_traits/add_const.hpp>
+#include <boost/type_traits/add_volatile.hpp>
+#include <boost/type_traits/add_cv.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/is_volatile.hpp>
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/type_traits/remove_volatile.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+
+#endif // BOOST_TT_CV_TRAITS_HPP_INCLUDED
diff --git a/boost/boost/type_traits/decay.hpp b/boost/boost/type_traits/decay.hpp
new file mode 100644
index 00000000000..c23a9b0f15a
--- /dev/null
+++ b/boost/boost/type_traits/decay.hpp
@@ -0,0 +1,44 @@
+// (C) Copyright John Maddock & Thorsten Ottosen 2005.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+
+#ifndef BOOST_TT_DECAY_HPP_INCLUDED
+#define BOOST_TT_DECAY_HPP_INCLUDED
+
+#include <boost/type_traits/config.hpp>
+#include <boost/type_traits/is_array.hpp>
+#include <boost/type_traits/is_function.hpp>
+#include <boost/type_traits/remove_bounds.hpp>
+#include <boost/type_traits/add_pointer.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+
+namespace boost
+{
+
+ template< class T >
+ struct decay
+ {
+ private:
+ typedef BOOST_DEDUCED_TYPENAME remove_reference<T>::type Ty;
+ public:
+ typedef BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ is_array<Ty>,
+ mpl::identity<BOOST_DEDUCED_TYPENAME remove_bounds<Ty>::type*>,
+ BOOST_DEDUCED_TYPENAME mpl::eval_if<
+ is_function<Ty>,
+ add_pointer<Ty>,
+ mpl::identity<Ty>
+ >
+ >::type type;
+ };
+
+} // namespace boost
+
+
+#endif // BOOST_TT_DECAY_HPP_INCLUDED
diff --git a/boost/boost/type_traits/detail/bool_trait_def.hpp b/boost/boost/type_traits/detail/bool_trait_def.hpp
new file mode 100644
index 00000000000..54994d87be3
--- /dev/null
+++ b/boost/boost/type_traits/detail/bool_trait_def.hpp
@@ -0,0 +1,173 @@
+
+// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION
+
+// 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)
+
+// $Source: /cvsroot/boost/boost/boost/type_traits/detail/bool_trait_def.hpp,v $
+// $Date: 2006/07/12 11:10:22 $
+// $Revision: 1.19.4.1 $
+
+#include <boost/type_traits/detail/template_arity_spec.hpp>
+#include <boost/type_traits/integral_constant.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/config.hpp>
+
+//
+// Unfortunately some libraries have started using this header without
+// cleaning up afterwards: so we'd better undef the macros just in case
+// they've been defined already....
+//
+#ifdef BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL
+#undef BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL
+#undef BOOST_TT_AUX_BOOL_C_BASE
+#undef BOOST_TT_AUX_BOOL_TRAIT_DEF1
+#undef BOOST_TT_AUX_BOOL_TRAIT_DEF2
+#undef BOOST_TT_AUX_BOOL_TRAIT_SPEC1
+#undef BOOST_TT_AUX_BOOL_TRAIT_SPEC2
+#undef BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1
+#undef BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC2
+#undef BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1
+#undef BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2
+#undef BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_1
+#undef BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_2
+#undef BOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1
+#undef BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1
+#endif
+
+#if defined(__SUNPRO_CC) && (__SUNPRO_CC < 0x570)
+# define BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \
+ typedef ::boost::integral_constant<bool,C> type; \
+ enum { value = type::value }; \
+ /**/
+# define BOOST_TT_AUX_BOOL_C_BASE(C)
+
+#elif defined(BOOST_MSVC) && BOOST_MSVC < 1300
+
+# define BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \
+ typedef ::boost::integral_constant<bool,C> base_; \
+ using base_::value; \
+ /**/
+
+#endif
+
+#ifndef BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL
+# define BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) /**/
+#endif
+
+#ifndef BOOST_TT_AUX_BOOL_C_BASE
+# define BOOST_TT_AUX_BOOL_C_BASE(C) : ::boost::integral_constant<bool,C>
+#endif
+
+
+#define BOOST_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)) \
+}; \
+\
+BOOST_TT_AUX_TEMPLATE_ARITY_SPEC(1,trait) \
+/**/
+
+
+#define BOOST_TT_AUX_BOOL_TRAIT_DEF2(trait,T1,T2,C) \
+template< typename T1, typename T2 > struct trait \
+ BOOST_TT_AUX_BOOL_C_BASE(C) \
+{ \
+ BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2,trait,(T1,T2)) \
+}; \
+\
+BOOST_TT_AUX_TEMPLATE_ARITY_SPEC(2,trait) \
+/**/
+
+#define BOOST_TT_AUX_BOOL_TRAIT_SPEC1(trait,sp,C) \
+template<> struct trait< sp > \
+ BOOST_TT_AUX_BOOL_C_BASE(C) \
+{ \
+ BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(1,trait,(sp)) \
+}; \
+/**/
+
+#define BOOST_TT_AUX_BOOL_TRAIT_SPEC2(trait,sp1,sp2,C) \
+template<> struct trait< sp1,sp2 > \
+ BOOST_TT_AUX_BOOL_C_BASE(C) \
+{ \
+ BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2,trait,(sp1,sp2)) \
+}; \
+/**/
+
+#define BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(trait,sp,C) \
+template<> struct trait##_impl< sp > \
+{ \
+ BOOST_STATIC_CONSTANT(bool, value = (C)); \
+}; \
+/**/
+
+#define BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC2(trait,sp1,sp2,C) \
+template<> struct trait##_impl< sp1,sp2 > \
+{ \
+ BOOST_STATIC_CONSTANT(bool, value = (C)); \
+}; \
+/**/
+
+#define BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(param,trait,sp,C) \
+template< param > struct trait< sp > \
+ BOOST_TT_AUX_BOOL_C_BASE(C) \
+{ \
+ BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \
+}; \
+/**/
+
+#define BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(param1,param2,trait,sp,C) \
+template< param1, param2 > struct trait< sp > \
+ BOOST_TT_AUX_BOOL_C_BASE(C) \
+{ \
+ BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \
+}; \
+/**/
+
+#define BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_1(param,trait,sp1,sp2,C) \
+template< param > struct trait< sp1,sp2 > \
+ BOOST_TT_AUX_BOOL_C_BASE(C) \
+{ \
+ BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2,trait,(sp1,sp2)) \
+}; \
+/**/
+
+#define BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_2(param1,param2,trait,sp1,sp2,C) \
+template< param1, param2 > struct trait< sp1,sp2 > \
+ BOOST_TT_AUX_BOOL_C_BASE(C) \
+{ \
+ BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \
+}; \
+/**/
+
+#define BOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1(param,trait,sp1,sp2,C) \
+template< param > struct trait##_impl< sp1,sp2 > \
+{ \
+ BOOST_STATIC_CONSTANT(bool, value = (C)); \
+}; \
+/**/
+
+#ifndef BOOST_NO_CV_SPECIALIZATIONS
+# define BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(trait,sp,value) \
+ BOOST_TT_AUX_BOOL_TRAIT_SPEC1(trait,sp,value) \
+ BOOST_TT_AUX_BOOL_TRAIT_SPEC1(trait,sp const,value) \
+ BOOST_TT_AUX_BOOL_TRAIT_SPEC1(trait,sp volatile,value) \
+ BOOST_TT_AUX_BOOL_TRAIT_SPEC1(trait,sp const volatile,value) \
+ /**/
+#else
+# define BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(trait,sp,value) \
+ BOOST_TT_AUX_BOOL_TRAIT_SPEC1(trait,sp,value) \
+ /**/
+#endif
diff --git a/boost/boost/type_traits/detail/bool_trait_undef.hpp b/boost/boost/type_traits/detail/bool_trait_undef.hpp
new file mode 100644
index 00000000000..84a8a7b8cdd
--- /dev/null
+++ b/boost/boost/type_traits/detail/bool_trait_undef.hpp
@@ -0,0 +1,27 @@
+
+// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION
+
+// 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)
+
+// $Source: /cvsroot/boost/boost/boost/type_traits/detail/bool_trait_undef.hpp,v $
+// $Date: 2004/09/02 15:41:27 $
+// $Revision: 1.6 $
+
+#undef BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL
+#undef BOOST_TT_AUX_BOOL_C_BASE
+#undef BOOST_TT_AUX_BOOL_TRAIT_DEF1
+#undef BOOST_TT_AUX_BOOL_TRAIT_DEF2
+#undef BOOST_TT_AUX_BOOL_TRAIT_SPEC1
+#undef BOOST_TT_AUX_BOOL_TRAIT_SPEC2
+#undef BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1
+#undef BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC2
+#undef BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1
+#undef BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2
+#undef BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_1
+#undef BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_2
+#undef BOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1
+#undef BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1
diff --git a/boost/boost/type_traits/detail/cv_traits_impl.hpp b/boost/boost/type_traits/detail/cv_traits_impl.hpp
new file mode 100644
index 00000000000..b3fa59505e5
--- /dev/null
+++ b/boost/boost/type_traits/detail/cv_traits_impl.hpp
@@ -0,0 +1,97 @@
+
+// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard
+// Hinnant & John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+
+#ifndef BOOST_TT_DETAIL_CV_TRAITS_IMPL_HPP_INCLUDED
+#define BOOST_TT_DETAIL_CV_TRAITS_IMPL_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+// implementation helper:
+
+
+#if !(BOOST_WORKAROUND(__GNUC__,== 3) && BOOST_WORKAROUND(__GNUC_MINOR__, <= 2))
+namespace boost {
+namespace detail {
+#else
+#include <boost/type_traits/detail/yes_no_type.hpp>
+namespace boost {
+namespace type_traits {
+namespace gcc8503 {
+#endif
+
+template <typename T> struct cv_traits_imp {};
+
+template <typename T>
+struct cv_traits_imp<T*>
+{
+ BOOST_STATIC_CONSTANT(bool, is_const = false);
+ BOOST_STATIC_CONSTANT(bool, is_volatile = false);
+ typedef T unqualified_type;
+};
+
+template <typename T>
+struct cv_traits_imp<const T*>
+{
+ BOOST_STATIC_CONSTANT(bool, is_const = true);
+ BOOST_STATIC_CONSTANT(bool, is_volatile = false);
+ typedef T unqualified_type;
+};
+
+template <typename T>
+struct cv_traits_imp<volatile T*>
+{
+ BOOST_STATIC_CONSTANT(bool, is_const = false);
+ BOOST_STATIC_CONSTANT(bool, is_volatile = true);
+ typedef T unqualified_type;
+};
+
+template <typename T>
+struct cv_traits_imp<const volatile T*>
+{
+ BOOST_STATIC_CONSTANT(bool, is_const = true);
+ BOOST_STATIC_CONSTANT(bool, is_volatile = true);
+ typedef T unqualified_type;
+};
+
+#if BOOST_WORKAROUND(__GNUC__,== 3) && BOOST_WORKAROUND(__GNUC_MINOR__, <= 2)
+// We have to exclude function pointers
+// (see http://gcc.gnu.org/bugzilla/show_bug.cgi?8503)
+yes_type mini_funcptr_tester(...);
+no_type mini_funcptr_tester(const volatile void*);
+
+} // namespace gcc8503
+} // namespace type_traits
+
+namespace detail {
+
+// Use the implementation above for non function pointers
+template <typename T, unsigned Select
+ = (unsigned)sizeof(::boost::type_traits::gcc8503::mini_funcptr_tester((T)0)) >
+struct cv_traits_imp : ::boost::type_traits::gcc8503::cv_traits_imp<T> { };
+
+// Functions are never cv-qualified
+template <typename T> struct cv_traits_imp<T*,1>
+{
+ BOOST_STATIC_CONSTANT(bool, is_const = false);
+ BOOST_STATIC_CONSTANT(bool, is_volatile = false);
+ typedef T unqualified_type;
+};
+
+#endif
+
+} // namespace detail
+} // namespace boost
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#endif // BOOST_TT_DETAIL_CV_TRAITS_IMPL_HPP_INCLUDED
diff --git a/boost/boost/type_traits/detail/false_result.hpp b/boost/boost/type_traits/detail/false_result.hpp
new file mode 100644
index 00000000000..e65e8bc257c
--- /dev/null
+++ b/boost/boost/type_traits/detail/false_result.hpp
@@ -0,0 +1,28 @@
+// Copyright David Abrahams 2002.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+
+#ifndef BOOST_TT_DETAIL_FALSE_RESULT_HPP_INCLUDED
+#define BOOST_TT_DETAIL_FALSE_RESULT_HPP_INCLUDED
+
+#include <boost/config.hpp>
+
+namespace boost {
+namespace type_traits {
+
+// Utility class which always "returns" false
+struct false_result
+{
+ template <typename T> struct result_
+ {
+ BOOST_STATIC_CONSTANT(bool, value = false);
+ };
+};
+
+}} // namespace boost::type_traits
+
+#endif // BOOST_TT_DETAIL_FALSE_RESULT_HPP_INCLUDED
diff --git a/boost/boost/type_traits/detail/ice_and.hpp b/boost/boost/type_traits/detail/ice_and.hpp
new file mode 100644
index 00000000000..8b461b9fffb
--- /dev/null
+++ b/boost/boost/type_traits/detail/ice_and.hpp
@@ -0,0 +1,35 @@
+// (C) Copyright John Maddock and Steve Cleary 2000.
+//
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_DETAIL_ICE_AND_HPP_INCLUDED
+#define BOOST_TT_DETAIL_ICE_AND_HPP_INCLUDED
+
+#include <boost/config.hpp>
+
+namespace boost {
+namespace type_traits {
+
+template <bool b1, bool b2, bool b3 = true, bool b4 = true, bool b5 = true, bool b6 = true, bool b7 = true>
+struct ice_and;
+
+template <bool b1, bool b2, bool b3, bool b4, bool b5, bool b6, bool b7>
+struct ice_and
+{
+ BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+template <>
+struct ice_and<true, true, true, true, true, true, true>
+{
+ BOOST_STATIC_CONSTANT(bool, value = true);
+};
+
+} // namespace type_traits
+} // namespace boost
+
+#endif // BOOST_TT_DETAIL_ICE_AND_HPP_INCLUDED
diff --git a/boost/boost/type_traits/detail/ice_eq.hpp b/boost/boost/type_traits/detail/ice_eq.hpp
new file mode 100644
index 00000000000..ea42a60b66f
--- /dev/null
+++ b/boost/boost/type_traits/detail/ice_eq.hpp
@@ -0,0 +1,36 @@
+// (C) Copyright John Maddock and Steve Cleary 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_DETAIL_ICE_EQ_HPP_INCLUDED
+#define BOOST_TT_DETAIL_ICE_EQ_HPP_INCLUDED
+
+#include <boost/config.hpp>
+
+namespace boost {
+namespace type_traits {
+
+template <int b1, int b2>
+struct ice_eq
+{
+ BOOST_STATIC_CONSTANT(bool, value = (b1 == b2));
+};
+
+template <int b1, int b2>
+struct ice_ne
+{
+ BOOST_STATIC_CONSTANT(bool, value = (b1 != b2));
+};
+
+#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION
+template <int b1, int b2> bool const ice_eq<b1,b2>::value;
+template <int b1, int b2> bool const ice_ne<b1,b2>::value;
+#endif
+
+} // namespace type_traits
+} // namespace boost
+
+#endif // BOOST_TT_DETAIL_ICE_EQ_HPP_INCLUDED
diff --git a/boost/boost/type_traits/detail/ice_not.hpp b/boost/boost/type_traits/detail/ice_not.hpp
new file mode 100644
index 00000000000..ee1dca0ecd5
--- /dev/null
+++ b/boost/boost/type_traits/detail/ice_not.hpp
@@ -0,0 +1,31 @@
+// (C) Copyright John Maddock and Steve Cleary 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_DETAIL_ICE_NOT_HPP_INCLUDED
+#define BOOST_TT_DETAIL_ICE_NOT_HPP_INCLUDED
+
+#include <boost/config.hpp>
+
+namespace boost {
+namespace type_traits {
+
+template <bool b>
+struct ice_not
+{
+ BOOST_STATIC_CONSTANT(bool, value = true);
+};
+
+template <>
+struct ice_not<true>
+{
+ BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+} // namespace type_traits
+} // namespace boost
+
+#endif // BOOST_TT_DETAIL_ICE_NOT_HPP_INCLUDED
diff --git a/boost/boost/type_traits/detail/ice_or.hpp b/boost/boost/type_traits/detail/ice_or.hpp
new file mode 100644
index 00000000000..f88d9f6aec0
--- /dev/null
+++ b/boost/boost/type_traits/detail/ice_or.hpp
@@ -0,0 +1,34 @@
+// (C) Copyright John Maddock and Steve Cleary 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_DETAIL_ICE_OR_HPP_INCLUDED
+#define BOOST_TT_DETAIL_ICE_OR_HPP_INCLUDED
+
+#include <boost/config.hpp>
+
+namespace boost {
+namespace type_traits {
+
+template <bool b1, bool b2, bool b3 = false, bool b4 = false, bool b5 = false, bool b6 = false, bool b7 = false>
+struct ice_or;
+
+template <bool b1, bool b2, bool b3, bool b4, bool b5, bool b6, bool b7>
+struct ice_or
+{
+ BOOST_STATIC_CONSTANT(bool, value = true);
+};
+
+template <>
+struct ice_or<false, false, false, false, false, false, false>
+{
+ BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+} // namespace type_traits
+} // namespace boost
+
+#endif // BOOST_TT_DETAIL_ICE_OR_HPP_INCLUDED
diff --git a/boost/boost/type_traits/detail/is_function_ptr_helper.hpp b/boost/boost/type_traits/detail/is_function_ptr_helper.hpp
new file mode 100644
index 00000000000..605d0bc2ef2
--- /dev/null
+++ b/boost/boost/type_traits/detail/is_function_ptr_helper.hpp
@@ -0,0 +1,220 @@
+
+// Copyright 2000 John Maddock (john@johnmaddock.co.uk)
+// Copyright 2002 Aleksey Gurtovoy (agurtovoy@meta-comm.com)
+//
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#if !defined(BOOST_PP_IS_ITERATING)
+
+///// header body
+
+#ifndef BOOST_TT_DETAIL_IS_FUNCTION_PTR_HELPER_HPP_INCLUDED
+#define BOOST_TT_DETAIL_IS_FUNCTION_PTR_HELPER_HPP_INCLUDED
+
+#include <boost/type_traits/config.hpp>
+
+#if defined(BOOST_TT_PREPROCESSING_MODE)
+# include <boost/preprocessor/iterate.hpp>
+# include <boost/preprocessor/enum_params.hpp>
+# include <boost/preprocessor/comma_if.hpp>
+#endif
+
+namespace boost {
+namespace type_traits {
+
+template <class R>
+struct is_function_ptr_helper
+{
+ BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+#if !defined(BOOST_TT_PREPROCESSING_MODE)
+// preprocessor-generated part, don't edit by hand!
+
+template <class R >
+struct is_function_ptr_helper<R (*)()> { BOOST_STATIC_CONSTANT(bool, value = true); };
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R >
+struct is_function_ptr_helper<R (*)( ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+template <class R , class T0>
+struct is_function_ptr_helper<R (*)( T0)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R , class T0>
+struct is_function_ptr_helper<R (*)( T0 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+template <class R , class T0 , class T1>
+struct is_function_ptr_helper<R (*)( T0 , T1)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R , class T0 , class T1>
+struct is_function_ptr_helper<R (*)( T0 , T1 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+template <class R , class T0 , class T1 , class T2>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R , class T0 , class T1 , class T2>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R , class T0 , class T1 , class T2 , class T3>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+#else
+
+#undef BOOST_STATIC_CONSTANT
+#define BOOST_PP_ITERATION_PARAMS_1 \
+ (3, (0, 25, "boost/type_traits/detail/is_function_ptr_helper.hpp"))
+#include BOOST_PP_ITERATE()
+
+#endif // BOOST_TT_PREPROCESSING_MODE
+
+} // namespace type_traits
+} // namespace boost
+
+#endif // BOOST_TT_DETAIL_IS_FUNCTION_PTR_HELPER_HPP_INCLUDED
+
+///// iteration
+
+#else
+#define BOOST_PP_COUNTER BOOST_PP_FRAME_ITERATION(1)
+
+template <class R BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T)>
+struct is_function_ptr_helper<R (*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T))> { BOOST_STATIC_CONSTANT(bool, value = true); };
+@#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T)>
+struct is_function_ptr_helper<R (*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+@#endif
+#undef BOOST_PP_COUNTER
+#endif // BOOST_PP_IS_ITERATING
diff --git a/boost/boost/type_traits/detail/is_function_ptr_tester.hpp b/boost/boost/type_traits/detail/is_function_ptr_tester.hpp
new file mode 100644
index 00000000000..c1a3c6a5f83
--- /dev/null
+++ b/boost/boost/type_traits/detail/is_function_ptr_tester.hpp
@@ -0,0 +1,654 @@
+
+// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes,
+// Aleksey Gurtovoy, Howard Hinnant & John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#if !defined(BOOST_PP_IS_ITERATING)
+
+///// header body
+
+#ifndef BOOST_TT_DETAIL_IS_FUNCTION_PTR_TESTER_HPP_INCLUDED
+#define BOOST_TT_DETAIL_IS_FUNCTION_PTR_TESTER_HPP_INCLUDED
+
+#include <boost/type_traits/detail/yes_no_type.hpp>
+#include <boost/type_traits/config.hpp>
+
+#if defined(BOOST_TT_PREPROCESSING_MODE)
+# include <boost/preprocessor/iterate.hpp>
+# include <boost/preprocessor/enum_params.hpp>
+# include <boost/preprocessor/comma_if.hpp>
+#endif
+
+namespace boost {
+namespace type_traits {
+
+// Note it is acceptible to use ellipsis here, since the argument will
+// always be a pointer type of some sort (JM 2005/06/04):
+no_type BOOST_TT_DECL is_function_ptr_tester(...);
+
+#if !defined(BOOST_TT_PREPROCESSING_MODE)
+// pre-processed code, don't edit, try GNU cpp with
+// cpp -I../../../ -DBOOST_TT_PREPROCESSING_MODE -x c++ -P filename
+
+template <class R >
+yes_type is_function_ptr_tester(R (*)());
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R >
+yes_type is_function_ptr_tester(R (*)( ...));
+#endif
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R >
+yes_type is_function_ptr_tester(R (__stdcall*)());
+template <class R >
+yes_type is_function_ptr_tester(R (__stdcall*)( ...));
+#ifndef _MANAGED
+template <class R >
+yes_type is_function_ptr_tester(R (__fastcall*)());
+template <class R >
+yes_type is_function_ptr_tester(R (__fastcall*)( ...));
+#endif
+template <class R >
+yes_type is_function_ptr_tester(R (__cdecl*)());
+template <class R >
+yes_type is_function_ptr_tester(R (__cdecl*)( ...));
+#endif
+template <class R , class T0 >
+yes_type is_function_ptr_tester(R (*)( T0));
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R , class T0 >
+yes_type is_function_ptr_tester(R (*)( T0 ...));
+#endif
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R , class T0 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0));
+template <class R , class T0 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 ...));
+#ifndef _MANAGED
+template <class R , class T0 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0));
+template <class R , class T0 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 ...));
+#endif
+template <class R , class T0 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0));
+template <class R , class T0 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 ...));
+#endif
+template <class R , class T0 , class T1 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1));
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R , class T0 , class T1 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 ...));
+#endif
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R , class T0 , class T1 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1));
+template <class R , class T0 , class T1 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 ...));
+#ifndef _MANAGED
+template <class R , class T0 , class T1 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1));
+template <class R , class T0 , class T1 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 ...));
+#endif
+template <class R , class T0 , class T1 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1));
+template <class R , class T0 , class T1 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 ...));
+#endif
+template <class R , class T0 , class T1 , class T2 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2));
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R , class T0 , class T1 , class T2 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 ...));
+#endif
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R , class T0 , class T1 , class T2 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2));
+template <class R , class T0 , class T1 , class T2 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 ...));
+#ifndef _MANAGED
+template <class R , class T0 , class T1 , class T2 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2));
+template <class R , class T0 , class T1 , class T2 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 ...));
+#endif
+template <class R , class T0 , class T1 , class T2 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2));
+template <class R , class T0 , class T1 , class T2 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 ...));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3));
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R , class T0 , class T1 , class T2 , class T3 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 ...));
+#endif
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R , class T0 , class T1 , class T2 , class T3 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3));
+template <class R , class T0 , class T1 , class T2 , class T3 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 ...));
+#ifndef _MANAGED
+template <class R , class T0 , class T1 , class T2 , class T3 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3));
+template <class R , class T0 , class T1 , class T2 , class T3 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 ...));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3));
+template <class R , class T0 , class T1 , class T2 , class T3 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 ...));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4));
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 ...));
+#endif
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 ...));
+#ifndef _MANAGED
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 ...));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 ...));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5));
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 ...));
+#endif
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 ...));
+#ifndef _MANAGED
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 ...));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 ...));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6));
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...));
+#endif
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...));
+#ifndef _MANAGED
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7));
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...));
+#endif
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...));
+#ifndef _MANAGED
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8));
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...));
+#endif
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...));
+#ifndef _MANAGED
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9));
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...));
+#endif
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...));
+#ifndef _MANAGED
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10));
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...));
+#endif
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...));
+#ifndef _MANAGED
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11));
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...));
+#endif
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...));
+#ifndef _MANAGED
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12));
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...));
+#endif
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...));
+#ifndef _MANAGED
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13));
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...));
+#endif
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...));
+#ifndef _MANAGED
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14));
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...));
+#endif
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...));
+#ifndef _MANAGED
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15));
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...));
+#endif
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...));
+#ifndef _MANAGED
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16));
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...));
+#endif
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...));
+#ifndef _MANAGED
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17));
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...));
+#endif
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...));
+#ifndef _MANAGED
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18));
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...));
+#endif
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...));
+#ifndef _MANAGED
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19));
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...));
+#endif
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...));
+#ifndef _MANAGED
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20));
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...));
+#endif
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...));
+#ifndef _MANAGED
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21));
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...));
+#endif
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...));
+#ifndef _MANAGED
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22));
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...));
+#endif
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...));
+#ifndef _MANAGED
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23));
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...));
+#endif
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...));
+#ifndef _MANAGED
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24));
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...));
+#endif
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...));
+#ifndef _MANAGED
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...));
+#endif
+#else
+
+#define BOOST_PP_ITERATION_PARAMS_1 \
+ (3, (0, 25, "boost/type_traits/detail/is_function_ptr_tester.hpp"))
+#include BOOST_PP_ITERATE()
+
+#endif // BOOST_TT_PREPROCESSING_MODE
+
+} // namespace type_traits
+} // namespace boost
+
+#endif // BOOST_TT_DETAIL_IS_FUNCTION_PTR_TESTER_HPP_INCLUDED
+
+///// iteration
+
+#else
+#define BOOST_PP_COUNTER BOOST_PP_FRAME_ITERATION(1)
+#undef __stdcall
+#undef __fastcall
+#undef __cdecl
+
+template <class R BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_function_ptr_tester(R (*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)));
+@#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_function_ptr_tester(R (*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...));
+@#endif
+@#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_function_ptr_tester(R (__stdcall*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)));
+template <class R BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_function_ptr_tester(R (__stdcall*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...));
+@#ifndef _MANAGED
+template <class R BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_function_ptr_tester(R (__fastcall*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)));
+template <class R BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_function_ptr_tester(R (__fastcall*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...));
+@#endif
+template <class R BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_function_ptr_tester(R (__cdecl*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)));
+template <class R BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_function_ptr_tester(R (__cdecl*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...));
+@#endif
+
+#undef BOOST_PP_COUNTER
+#endif // BOOST_PP_IS_ITERATING
diff --git a/boost/boost/type_traits/detail/is_mem_fun_pointer_impl.hpp b/boost/boost/type_traits/detail/is_mem_fun_pointer_impl.hpp
new file mode 100644
index 00000000000..4f75f14d0a4
--- /dev/null
+++ b/boost/boost/type_traits/detail/is_mem_fun_pointer_impl.hpp
@@ -0,0 +1,817 @@
+
+// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes,
+// Aleksey Gurtovoy, Howard Hinnant & John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#if !defined(BOOST_PP_IS_ITERATING)
+
+///// header body
+
+#ifndef BOOST_TT_DETAIL_IS_MEM_FUN_POINTER_IMPL_HPP_INCLUDED
+#define BOOST_TT_DETAIL_IS_MEM_FUN_POINTER_IMPL_HPP_INCLUDED
+
+#include <boost/config.hpp>
+
+#if defined(BOOST_TT_PREPROCESSING_MODE)
+# include <boost/preprocessor/iterate.hpp>
+# include <boost/preprocessor/enum_params.hpp>
+# include <boost/preprocessor/comma_if.hpp>
+#endif
+
+namespace boost {
+namespace type_traits {
+
+template <typename T>
+struct is_mem_fun_pointer_impl
+{
+ BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+#if !defined(BOOST_TT_PREPROCESSING_MODE)
+// pre-processed code, don't edit, try GNU cpp with
+// cpp -I../../../ -DBOOST_TT_PREPROCESSING_MODE -x c++ -P filename
+
+template <class R, class T >
+struct is_mem_fun_pointer_impl<R (T::*)() > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T >
+struct is_mem_fun_pointer_impl<R (T::*)( ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+
+#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
+template <class R, class T >
+struct is_mem_fun_pointer_impl<R (T::*)() const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T >
+struct is_mem_fun_pointer_impl<R (T::*)() volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T >
+struct is_mem_fun_pointer_impl<R (T::*)() const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T >
+struct is_mem_fun_pointer_impl<R (T::*)( ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T >
+struct is_mem_fun_pointer_impl<R (T::*)( ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T >
+struct is_mem_fun_pointer_impl<R (T::*)( ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+#endif
+template <class R, class T , class T0>
+struct is_mem_fun_pointer_impl<R (T::*)( T0) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+
+#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
+template <class R, class T , class T0>
+struct is_mem_fun_pointer_impl<R (T::*)( T0) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0>
+struct is_mem_fun_pointer_impl<R (T::*)( T0) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0>
+struct is_mem_fun_pointer_impl<R (T::*)( T0) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+#endif
+template <class R, class T , class T0 , class T1>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+
+#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
+template <class R, class T , class T0 , class T1>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+#endif
+template <class R, class T , class T0 , class T1 , class T2>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+
+#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
+template <class R, class T , class T0 , class T1 , class T2>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+
+#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
+template <class R, class T , class T0 , class T1 , class T2 , class T3>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+
+#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+
+#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+
+#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+
+#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+
+#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+
+#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+
+#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+
+#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+
+#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+
+#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+
+#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+
+#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+
+#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+
+#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+
+#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+
+#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+
+#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+
+#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+
+#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+
+#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+
+#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+#endif
+
+#else
+
+#undef BOOST_STATIC_CONSTANT
+#define BOOST_PP_ITERATION_PARAMS_1 \
+ (3, (0, 25, "boost/type_traits/detail/is_mem_fun_pointer_impl.hpp"))
+#include BOOST_PP_ITERATE()
+
+#endif // BOOST_TT_PREPROCESSING_MODE
+
+} // namespace type_traits
+} // namespace boost
+
+#endif // BOOST_TT_DETAIL_IS_MEM_FUN_POINTER_IMPL_HPP_INCLUDED
+
+///// iteration
+
+#else
+#define BOOST_PP_COUNTER BOOST_PP_FRAME_ITERATION(1)
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T)>
+struct is_mem_fun_pointer_impl<R (T::*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+@#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T)>
+struct is_mem_fun_pointer_impl<R (T::*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+@#endif
+
+@#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T)>
+struct is_mem_fun_pointer_impl<R (T::*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T)>
+struct is_mem_fun_pointer_impl<R (T::*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T)>
+struct is_mem_fun_pointer_impl<R (T::*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+@#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T)>
+struct is_mem_fun_pointer_impl<R (T::*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T)>
+struct is_mem_fun_pointer_impl<R (T::*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T)>
+struct is_mem_fun_pointer_impl<R (T::*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+@#endif
+@#endif
+
+#undef BOOST_PP_COUNTER
+#endif // BOOST_PP_IS_ITERATING
+
diff --git a/boost/boost/type_traits/detail/is_mem_fun_pointer_tester.hpp b/boost/boost/type_traits/detail/is_mem_fun_pointer_tester.hpp
new file mode 100644
index 00000000000..e6532d39db9
--- /dev/null
+++ b/boost/boost/type_traits/detail/is_mem_fun_pointer_tester.hpp
@@ -0,0 +1,2759 @@
+
+// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes,
+// Aleksey Gurtovoy, Howard Hinnant & John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#if !defined(BOOST_PP_IS_ITERATING)
+
+///// header body
+
+#ifndef BOOST_TT_DETAIL_IS_MEM_FUN_POINTER_TESTER_HPP_INCLUDED
+#define BOOST_TT_DETAIL_IS_MEM_FUN_POINTER_TESTER_HPP_INCLUDED
+
+#include <boost/type_traits/detail/yes_no_type.hpp>
+#include <boost/type_traits/config.hpp>
+
+#if defined(BOOST_TT_PREPROCESSING_MODE)
+# include <boost/preprocessor/iterate.hpp>
+# include <boost/preprocessor/enum_params.hpp>
+# include <boost/preprocessor/comma_if.hpp>
+#endif
+
+namespace boost {
+namespace type_traits {
+
+no_type BOOST_TT_DECL is_mem_fun_pointer_tester(...);
+
+#if !defined(BOOST_TT_PREPROCESSING_MODE)
+// pre-processed code, don't edit, try GNU cpp with
+// cpp -I../../../ -DBOOST_TT_PREPROCESSING_MODE -x c++ -P filename
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)());
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)() const);
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)() volatile);
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)() const volatile);
+
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( ...));
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( ...) const);
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( ...) volatile);
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( ...) const volatile);
+#endif
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)());
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)() const);
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)() volatile);
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)() const volatile);
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( ...));
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( ...) const);
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( ...) volatile);
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( ...) const volatile);
+
+#ifndef _MANAGED
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)());
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)() const);
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)() volatile);
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)() const volatile);
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( ...));
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( ...) const);
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( ...) volatile);
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( ...) const volatile);
+#endif
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)());
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)() const);
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)() volatile);
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)() const volatile);
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( ...));
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( ...) const);
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( ...) volatile);
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( ...) const volatile);
+#endif
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0));
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0) const);
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0) volatile);
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0) const volatile);
+
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 ...));
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 ...) const);
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 ...) volatile);
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 ...) const volatile);
+#endif
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0));
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0) const);
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0) volatile);
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0) const volatile);
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 ...));
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 ...) const);
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 ...) volatile);
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 ...) const volatile);
+
+#ifndef _MANAGED
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0));
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0) const);
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0) volatile);
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0) const volatile);
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 ...));
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 ...) const);
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 ...) volatile);
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 ...) const volatile);
+#endif
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0));
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0) const);
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0) volatile);
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0) const volatile);
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 ...));
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 ...) const);
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 ...) volatile);
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 ...) const volatile);
+#endif
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1));
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1) const);
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1) volatile);
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1) const volatile);
+
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 ...));
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 ...) const);
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 ...) volatile);
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 ...) const volatile);
+#endif
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1));
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1) const);
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1) volatile);
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1) const volatile);
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 ...));
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 ...) const);
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 ...) volatile);
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 ...) const volatile);
+
+#ifndef _MANAGED
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1));
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1) const);
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1) volatile);
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1) const volatile);
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 ...));
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 ...) const);
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 ...) volatile);
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 ...) const volatile);
+#endif
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1));
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1) const);
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1) volatile);
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1) const volatile);
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 ...));
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 ...) const);
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 ...) volatile);
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 ...) const volatile);
+#endif
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2));
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2) const);
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2) const volatile);
+
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 ...) const volatile);
+#endif
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2));
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2) const);
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 ...) const volatile);
+
+#ifndef _MANAGED
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2));
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2) const);
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 ...) const volatile);
+#endif
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2));
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2) const);
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 ...) const volatile);
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3) const volatile);
+
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ...) const volatile);
+#endif
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 ...) const volatile);
+
+#ifndef _MANAGED
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 ...) const volatile);
+#endif
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 ...) const volatile);
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4) const volatile);
+
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) const volatile);
+#endif
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) const volatile);
+
+#ifndef _MANAGED
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) const volatile);
+#endif
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) const volatile);
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) const volatile);
+
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) const volatile);
+#endif
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) const volatile);
+
+#ifndef _MANAGED
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) const volatile);
+#endif
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) const volatile);
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const volatile);
+
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) const volatile);
+#endif
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) const volatile);
+
+#ifndef _MANAGED
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) const volatile);
+#endif
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) const volatile);
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const volatile);
+
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) const volatile);
+#endif
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) const volatile);
+
+#ifndef _MANAGED
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) const volatile);
+#endif
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) const volatile);
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const volatile);
+
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) const volatile);
+#endif
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) const volatile);
+
+#ifndef _MANAGED
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) const volatile);
+#endif
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) const volatile);
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const volatile);
+
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) const volatile);
+#endif
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) const volatile);
+
+#ifndef _MANAGED
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) const volatile);
+#endif
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) const volatile);
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const volatile);
+
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) const volatile);
+#endif
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) const volatile);
+
+#ifndef _MANAGED
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) const volatile);
+#endif
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) const volatile);
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const volatile);
+
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) const volatile);
+#endif
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) const volatile);
+
+#ifndef _MANAGED
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) const volatile);
+#endif
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) const volatile);
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const volatile);
+
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) const volatile);
+#endif
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) const volatile);
+
+#ifndef _MANAGED
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) const volatile);
+#endif
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) const volatile);
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const volatile);
+
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) const volatile);
+#endif
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) const volatile);
+
+#ifndef _MANAGED
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) const volatile);
+#endif
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) const volatile);
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const volatile);
+
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) const volatile);
+#endif
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) const volatile);
+
+#ifndef _MANAGED
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) const volatile);
+#endif
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) const volatile);
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const volatile);
+
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) const volatile);
+#endif
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) const volatile);
+
+#ifndef _MANAGED
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) const volatile);
+#endif
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) const volatile);
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const volatile);
+
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) const volatile);
+#endif
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) const volatile);
+
+#ifndef _MANAGED
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) const volatile);
+#endif
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) const volatile);
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const volatile);
+
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) const volatile);
+#endif
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) const volatile);
+
+#ifndef _MANAGED
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) const volatile);
+#endif
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) const volatile);
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const volatile);
+
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) const volatile);
+#endif
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) const volatile);
+
+#ifndef _MANAGED
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) const volatile);
+#endif
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) const volatile);
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const volatile);
+
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) const volatile);
+#endif
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) const volatile);
+
+#ifndef _MANAGED
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) const volatile);
+#endif
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) const volatile);
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const volatile);
+
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) const volatile);
+#endif
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) const volatile);
+
+#ifndef _MANAGED
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) const volatile);
+#endif
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) const volatile);
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const volatile);
+
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) const volatile);
+#endif
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) const volatile);
+
+#ifndef _MANAGED
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) const volatile);
+#endif
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) const volatile);
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const volatile);
+
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) const volatile);
+#endif
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) const volatile);
+
+#ifndef _MANAGED
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) const volatile);
+#endif
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) const volatile);
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const volatile);
+
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) const volatile);
+#endif
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) const volatile);
+
+#ifndef _MANAGED
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) const volatile);
+#endif
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) const volatile);
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const volatile);
+
+#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) const volatile);
+#endif
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) const volatile);
+
+#ifndef _MANAGED
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) const volatile);
+#endif
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) const volatile);
+#endif
+
+#else
+
+#define BOOST_PP_ITERATION_PARAMS_1 \
+ (3, (0, 25, "boost/type_traits/detail/is_mem_fun_pointer_tester.hpp"))
+#include BOOST_PP_ITERATE()
+
+#endif // BOOST_TT_PREPROCESSING_MODE
+
+} // namespace type_traits
+} // namespace boost
+
+#endif // BOOST_TT_DETAIL_IS_MEM_FUN_POINTER_TESTER_HPP_INCLUDED
+
+///// iteration
+
+#else
+#define BOOST_PP_COUNTER BOOST_PP_FRAME_ITERATION(1)
+#undef __stdcall
+#undef __fastcall
+#undef __cdecl
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)));
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) const);
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) volatile);
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) const volatile);
+
+@#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...));
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) const);
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) volatile);
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) const volatile);
+@#endif
+@#ifdef BOOST_TT_TEST_MS_FUNC_SIGS // Other calling conventions used by MS compatible compilers:
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)));
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) const);
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) volatile);
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) const volatile);
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...));
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) const);
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) volatile);
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) const volatile);
+
+@#ifndef _MANAGED
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)));
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) const);
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) volatile);
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) const volatile);
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...));
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) const);
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) volatile);
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) const volatile);
+@#endif
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)));
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) const);
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) volatile);
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) const volatile);
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...));
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) const);
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) volatile);
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) const volatile);
+@#endif
+
+#undef BOOST_PP_COUNTER
+#endif // BOOST_PP_IS_ITERATING
diff --git a/boost/boost/type_traits/detail/size_t_trait_def.hpp b/boost/boost/type_traits/detail/size_t_trait_def.hpp
new file mode 100644
index 00000000000..628c4a44f7e
--- /dev/null
+++ b/boost/boost/type_traits/detail/size_t_trait_def.hpp
@@ -0,0 +1,58 @@
+
+// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION
+
+// 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)
+
+// $Source: /cvsroot/boost/boost/boost/type_traits/detail/size_t_trait_def.hpp,v $
+// $Date: 2005/08/25 16:27:26 $
+// $Revision: 1.9 $
+
+#include <boost/type_traits/detail/template_arity_spec.hpp>
+#include <boost/type_traits/integral_constant.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/mpl/size_t.hpp>
+
+#include <cstddef>
+
+#if !defined(BOOST_MSVC) || BOOST_MSVC >= 1300
+# define BOOST_TT_AUX_SIZE_T_BASE(C) ::boost::integral_constant<std::size_t,C>
+# define BOOST_TT_AUX_SIZE_T_TRAIT_VALUE_DECL(C) /**/
+#else
+# define BOOST_TT_AUX_SIZE_T_BASE(C) ::boost::mpl::size_t<C>
+# define BOOST_TT_AUX_SIZE_T_TRAIT_VALUE_DECL(C) \
+ typedef ::boost::mpl::size_t<C> base_; \
+ using base_::value; \
+ /**/
+#endif
+
+
+#define BOOST_TT_AUX_SIZE_T_TRAIT_DEF1(trait,T,C) \
+template< typename T > struct trait \
+ : BOOST_TT_AUX_SIZE_T_BASE(C) \
+{ \
+ BOOST_TT_AUX_SIZE_T_TRAIT_VALUE_DECL(C) \
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,trait,(T)) \
+}; \
+\
+BOOST_TT_AUX_TEMPLATE_ARITY_SPEC(1,trait) \
+/**/
+
+#define BOOST_TT_AUX_SIZE_T_TRAIT_SPEC1(trait,spec,C) \
+template<> struct trait<spec> \
+ : BOOST_TT_AUX_SIZE_T_BASE(C) \
+{ \
+ BOOST_TT_AUX_SIZE_T_TRAIT_VALUE_DECL(C) \
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(1,trait,(spec)) \
+}; \
+/**/
+
+#define BOOST_TT_AUX_SIZE_T_TRAIT_PARTIAL_SPEC1_1(param,trait,spec,C) \
+template< param > struct trait<spec> \
+ : BOOST_TT_AUX_SIZE_T_BASE(C) \
+{ \
+}; \
+/**/
diff --git a/boost/boost/type_traits/detail/size_t_trait_undef.hpp b/boost/boost/type_traits/detail/size_t_trait_undef.hpp
new file mode 100644
index 00000000000..027927e84e0
--- /dev/null
+++ b/boost/boost/type_traits/detail/size_t_trait_undef.hpp
@@ -0,0 +1,16 @@
+
+// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION
+
+// 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)
+
+// $Source: /cvsroot/boost/boost/boost/type_traits/detail/size_t_trait_undef.hpp,v $
+// $Date: 2004/09/02 15:41:27 $
+// $Revision: 1.4 $
+
+#undef BOOST_TT_AUX_SIZE_T_TRAIT_DEF1
+#undef BOOST_TT_AUX_SIZE_T_TRAIT_SPEC1
+#undef BOOST_TT_AUX_SIZE_T_TRAIT_PARTIAL_SPEC1_1
diff --git a/boost/boost/type_traits/detail/template_arity_spec.hpp b/boost/boost/type_traits/detail/template_arity_spec.hpp
new file mode 100644
index 00000000000..fe9b422e830
--- /dev/null
+++ b/boost/boost/type_traits/detail/template_arity_spec.hpp
@@ -0,0 +1,31 @@
+
+// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION
+
+// 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)
+
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/aux_/template_arity_fwd.hpp>
+#include <boost/mpl/aux_/preprocessor/params.hpp>
+#include <boost/mpl/aux_/config/lambda.hpp>
+#include <boost/mpl/aux_/config/overload_resolution.hpp>
+
+#if defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT) \
+ && defined(BOOST_MPL_CFG_BROKEN_OVERLOAD_RESOLUTION)
+# define BOOST_TT_AUX_TEMPLATE_ARITY_SPEC(i, name) \
+namespace mpl { namespace aux { \
+template< BOOST_MPL_PP_PARAMS(i, typename T) > \
+struct template_arity< \
+ name< BOOST_MPL_PP_PARAMS(i, T) > \
+ > \
+ : int_<i> \
+{ \
+}; \
+}} \
+/**/
+#else
+# define BOOST_TT_AUX_TEMPLATE_ARITY_SPEC(i, name) /**/
+#endif
diff --git a/boost/boost/type_traits/detail/type_trait_def.hpp b/boost/boost/type_traits/detail/type_trait_def.hpp
new file mode 100644
index 00000000000..32e17464909
--- /dev/null
+++ b/boost/boost/type_traits/detail/type_trait_def.hpp
@@ -0,0 +1,61 @@
+
+// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION
+
+// 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)
+
+// $Source: /cvsroot/boost/boost/boost/type_traits/detail/type_trait_def.hpp,v $
+// $Date: 2004/09/02 15:41:27 $
+// $Revision: 1.7 $
+
+#include <boost/type_traits/detail/template_arity_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+#define BOOST_TT_AUX_TYPE_TRAIT_DEF1(trait,T,result) \
+template< typename T > struct trait \
+{ \
+ typedef result type; \
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,trait,(T)) \
+}; \
+\
+BOOST_TT_AUX_TEMPLATE_ARITY_SPEC(1,trait) \
+/**/
+
+#define BOOST_TT_AUX_TYPE_TRAIT_SPEC1(trait,spec,result) \
+template<> struct trait<spec> \
+{ \
+ typedef result type; \
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(1,trait,(spec)) \
+}; \
+/**/
+
+#define BOOST_TT_AUX_TYPE_TRAIT_IMPL_SPEC1(trait,spec,result) \
+template<> struct trait##_impl<spec> \
+{ \
+ typedef result type; \
+}; \
+/**/
+
+#define BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(param,trait,spec,result) \
+template< param > struct trait<spec> \
+{ \
+ typedef result type; \
+}; \
+/**/
+
+#define BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(param1,param2,trait,spec,result) \
+template< param1, param2 > struct trait<spec> \
+{ \
+ typedef result; \
+}; \
+/**/
+
+#define BOOST_TT_AUX_TYPE_TRAIT_IMPL_PARTIAL_SPEC1_1(param,trait,spec,result) \
+template< param > struct trait##_impl<spec> \
+{ \
+ typedef result type; \
+}; \
+/**/
diff --git a/boost/boost/type_traits/detail/type_trait_undef.hpp b/boost/boost/type_traits/detail/type_trait_undef.hpp
new file mode 100644
index 00000000000..c12e659ebdb
--- /dev/null
+++ b/boost/boost/type_traits/detail/type_trait_undef.hpp
@@ -0,0 +1,19 @@
+
+// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION
+
+// 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)
+
+// $Source: /cvsroot/boost/boost/boost/type_traits/detail/type_trait_undef.hpp,v $
+// $Date: 2004/09/02 15:41:27 $
+// $Revision: 1.6 $
+
+#undef BOOST_TT_AUX_TYPE_TRAIT_DEF1
+#undef BOOST_TT_AUX_TYPE_TRAIT_SPEC1
+#undef BOOST_TT_AUX_TYPE_TRAIT_IMPL_SPEC1
+#undef BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1
+#undef BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2
+#undef BOOST_TT_AUX_TYPE_TRAIT_IMPL_PARTIAL_SPEC1_1
diff --git a/boost/boost/type_traits/detail/wrap.hpp b/boost/boost/type_traits/detail/wrap.hpp
new file mode 100644
index 00000000000..d0a75d06cb7
--- /dev/null
+++ b/boost/boost/type_traits/detail/wrap.hpp
@@ -0,0 +1,18 @@
+// (C) Copyright David Abrahams 2002.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_DETAIL_WRAP_HPP_INCLUDED
+#define BOOST_TT_DETAIL_WRAP_HPP_INCLUDED
+
+namespace boost {
+namespace type_traits {
+
+template <class T> struct wrap {};
+
+}} // namespace boost::type_traits
+
+#endif // BOOST_TT_DETAIL_WRAP_HPP_INCLUDED
diff --git a/boost/boost/type_traits/detail/yes_no_type.hpp b/boost/boost/type_traits/detail/yes_no_type.hpp
new file mode 100644
index 00000000000..f583730220e
--- /dev/null
+++ b/boost/boost/type_traits/detail/yes_no_type.hpp
@@ -0,0 +1,26 @@
+
+// (C) Copyright John Maddock and Steve Cleary 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+//
+// macros and helpers for working with integral-constant-expressions.
+
+#ifndef BOOST_TT_DETAIL_YES_NO_TYPE_HPP_INCLUDED
+#define BOOST_TT_DETAIL_YES_NO_TYPE_HPP_INCLUDED
+
+namespace boost {
+namespace type_traits {
+
+typedef char yes_type;
+struct no_type
+{
+ char padding[8];
+};
+
+} // namespace type_traits
+} // namespace boost
+
+#endif // BOOST_TT_DETAIL_YES_NO_TYPE_HPP_INCLUDED
diff --git a/boost/boost/type_traits/extent.hpp b/boost/boost/type_traits/extent.hpp
new file mode 100644
index 00000000000..196d826eb85
--- /dev/null
+++ b/boost/boost/type_traits/extent.hpp
@@ -0,0 +1,134 @@
+
+// (C) Copyright John Maddock 2005.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+
+#ifndef BOOST_TT_EXTENT_HPP_INCLUDED
+#define BOOST_TT_EXTENT_HPP_INCLUDED
+
+// should be the last #include
+#include <boost/type_traits/detail/size_t_trait_def.hpp>
+
+namespace boost {
+
+namespace detail{
+
+template <class T, std::size_t N>
+struct extent_imp
+{
+ BOOST_STATIC_CONSTANT(std::size_t, value = 0);
+};
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)
+template <class T, std::size_t R, std::size_t N>
+struct extent_imp<T[R], N>
+{
+ BOOST_STATIC_CONSTANT(std::size_t, value = (::boost::detail::extent_imp<T, N-1>::value));
+};
+
+template <class T, std::size_t R, std::size_t N>
+struct extent_imp<T const[R], N>
+{
+ BOOST_STATIC_CONSTANT(std::size_t, value = (::boost::detail::extent_imp<T, N-1>::value));
+};
+
+template <class T, std::size_t R, std::size_t N>
+struct extent_imp<T volatile[R], N>
+{
+ BOOST_STATIC_CONSTANT(std::size_t, value = (::boost::detail::extent_imp<T, N-1>::value));
+};
+
+template <class T, std::size_t R, std::size_t N>
+struct extent_imp<T const volatile[R], N>
+{
+ BOOST_STATIC_CONSTANT(std::size_t, value = (::boost::detail::extent_imp<T, N-1>::value));
+};
+
+template <class T, std::size_t R>
+struct extent_imp<T[R],0>
+{
+ BOOST_STATIC_CONSTANT(std::size_t, value = R);
+};
+
+template <class T, std::size_t R>
+struct extent_imp<T const[R], 0>
+{
+ BOOST_STATIC_CONSTANT(std::size_t, value = R);
+};
+
+template <class T, std::size_t R>
+struct extent_imp<T volatile[R], 0>
+{
+ BOOST_STATIC_CONSTANT(std::size_t, value = R);
+};
+
+template <class T, std::size_t R>
+struct extent_imp<T const volatile[R], 0>
+{
+ BOOST_STATIC_CONSTANT(std::size_t, value = R);
+};
+
+#if !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && !defined(__IBMCPP__) && !BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840)) && !defined(__MWERKS__)
+template <class T, std::size_t N>
+struct extent_imp<T[], N>
+{
+ BOOST_STATIC_CONSTANT(std::size_t, value = (::boost::detail::extent_imp<T, N-1>::value));
+};
+template <class T, std::size_t N>
+struct extent_imp<T const[], N>
+{
+ BOOST_STATIC_CONSTANT(std::size_t, value = (::boost::detail::extent_imp<T, N-1>::value));
+};
+template <class T, std::size_t N>
+struct extent_imp<T volatile[], N>
+{
+ BOOST_STATIC_CONSTANT(std::size_t, value = (::boost::detail::extent_imp<T, N-1>::value));
+};
+template <class T, std::size_t N>
+struct extent_imp<T const volatile[], N>
+{
+ BOOST_STATIC_CONSTANT(std::size_t, value = (::boost::detail::extent_imp<T, N-1>::value));
+};
+template <class T>
+struct extent_imp<T[], 0>
+{
+ BOOST_STATIC_CONSTANT(std::size_t, value = 0);
+};
+template <class T>
+struct extent_imp<T const[], 0>
+{
+ BOOST_STATIC_CONSTANT(std::size_t, value = 0);
+};
+template <class T>
+struct extent_imp<T volatile[], 0>
+{
+ BOOST_STATIC_CONSTANT(std::size_t, value = 0);
+};
+template <class T>
+struct extent_imp<T const volatile[], 0>
+{
+ BOOST_STATIC_CONSTANT(std::size_t, value = 0);
+};
+#endif
+#endif
+}
+
+template <class T, std::size_t N = 0>
+struct extent
+ : public ::boost::integral_constant<std::size_t, ::boost::detail::extent_imp<T,N>::value>
+{
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ typedef ::boost::integral_constant<std::size_t, ::boost::detail::extent_imp<T,N>::value> base_;
+ using base_::value;
+#endif
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,extent,(T))
+};
+
+} // namespace boost
+
+#include <boost/type_traits/detail/size_t_trait_undef.hpp>
+
+#endif // BOOST_TT_IS_MEMBER_FUNCTION_POINTER_HPP_INCLUDED
diff --git a/boost/boost/type_traits/function_traits.hpp b/boost/boost/type_traits/function_traits.hpp
new file mode 100644
index 00000000000..1554cfbf947
--- /dev/null
+++ b/boost/boost/type_traits/function_traits.hpp
@@ -0,0 +1,236 @@
+
+// Copyright 2000 John Maddock (john@johnmaddock.co.uk)
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_FUNCTION_TRAITS_HPP_INCLUDED
+#define BOOST_TT_FUNCTION_TRAITS_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/type_traits/is_function.hpp>
+#include <boost/type_traits/add_pointer.hpp>
+
+namespace boost {
+
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+namespace detail {
+
+template<typename Function> struct function_traits_helper;
+
+template<typename R>
+struct function_traits_helper<R (*)(void)>
+{
+ BOOST_STATIC_CONSTANT(int, arity = 0);
+ typedef R result_type;
+};
+
+template<typename R, typename T1>
+struct function_traits_helper<R (*)(T1)>
+{
+ BOOST_STATIC_CONSTANT(int, arity = 1);
+ typedef R result_type;
+ typedef T1 arg1_type;
+ typedef T1 argument_type;
+};
+
+template<typename R, typename T1, typename T2>
+struct function_traits_helper<R (*)(T1, T2)>
+{
+ BOOST_STATIC_CONSTANT(int, arity = 2);
+ typedef R result_type;
+ typedef T1 arg1_type;
+ typedef T2 arg2_type;
+ typedef T1 first_argument_type;
+ typedef T2 second_argument_type;
+};
+
+template<typename R, typename T1, typename T2, typename T3>
+struct function_traits_helper<R (*)(T1, T2, T3)>
+{
+ BOOST_STATIC_CONSTANT(int, arity = 3);
+ typedef R result_type;
+ typedef T1 arg1_type;
+ typedef T2 arg2_type;
+ typedef T3 arg3_type;
+};
+
+template<typename R, typename T1, typename T2, typename T3, typename T4>
+struct function_traits_helper<R (*)(T1, T2, T3, T4)>
+{
+ BOOST_STATIC_CONSTANT(int, arity = 4);
+ typedef R result_type;
+ typedef T1 arg1_type;
+ typedef T2 arg2_type;
+ typedef T3 arg3_type;
+ typedef T4 arg4_type;
+};
+
+template<typename R, typename T1, typename T2, typename T3, typename T4,
+ typename T5>
+struct function_traits_helper<R (*)(T1, T2, T3, T4, T5)>
+{
+ BOOST_STATIC_CONSTANT(int, arity = 5);
+ typedef R result_type;
+ typedef T1 arg1_type;
+ typedef T2 arg2_type;
+ typedef T3 arg3_type;
+ typedef T4 arg4_type;
+ typedef T5 arg5_type;
+};
+
+template<typename R, typename T1, typename T2, typename T3, typename T4,
+ typename T5, typename T6>
+struct function_traits_helper<R (*)(T1, T2, T3, T4, T5, T6)>
+{
+ BOOST_STATIC_CONSTANT(int, arity = 6);
+ typedef R result_type;
+ typedef T1 arg1_type;
+ typedef T2 arg2_type;
+ typedef T3 arg3_type;
+ typedef T4 arg4_type;
+ typedef T5 arg5_type;
+ typedef T6 arg6_type;
+};
+
+template<typename R, typename T1, typename T2, typename T3, typename T4,
+ typename T5, typename T6, typename T7>
+struct function_traits_helper<R (*)(T1, T2, T3, T4, T5, T6, T7)>
+{
+ BOOST_STATIC_CONSTANT(int, arity = 7);
+ typedef R result_type;
+ typedef T1 arg1_type;
+ typedef T2 arg2_type;
+ typedef T3 arg3_type;
+ typedef T4 arg4_type;
+ typedef T5 arg5_type;
+ typedef T6 arg6_type;
+ typedef T7 arg7_type;
+};
+
+template<typename R, typename T1, typename T2, typename T3, typename T4,
+ typename T5, typename T6, typename T7, typename T8>
+struct function_traits_helper<R (*)(T1, T2, T3, T4, T5, T6, T7, T8)>
+{
+ BOOST_STATIC_CONSTANT(int, arity = 8);
+ typedef R result_type;
+ typedef T1 arg1_type;
+ typedef T2 arg2_type;
+ typedef T3 arg3_type;
+ typedef T4 arg4_type;
+ typedef T5 arg5_type;
+ typedef T6 arg6_type;
+ typedef T7 arg7_type;
+ typedef T8 arg8_type;
+};
+
+template<typename R, typename T1, typename T2, typename T3, typename T4,
+ typename T5, typename T6, typename T7, typename T8, typename T9>
+struct function_traits_helper<R (*)(T1, T2, T3, T4, T5, T6, T7, T8, T9)>
+{
+ BOOST_STATIC_CONSTANT(int, arity = 9);
+ typedef R result_type;
+ typedef T1 arg1_type;
+ typedef T2 arg2_type;
+ typedef T3 arg3_type;
+ typedef T4 arg4_type;
+ typedef T5 arg5_type;
+ typedef T6 arg6_type;
+ typedef T7 arg7_type;
+ typedef T8 arg8_type;
+ typedef T9 arg9_type;
+};
+
+template<typename R, typename T1, typename T2, typename T3, typename T4,
+ typename T5, typename T6, typename T7, typename T8, typename T9,
+ typename T10>
+struct function_traits_helper<R (*)(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)>
+{
+ BOOST_STATIC_CONSTANT(int, arity = 10);
+ typedef R result_type;
+ typedef T1 arg1_type;
+ typedef T2 arg2_type;
+ typedef T3 arg3_type;
+ typedef T4 arg4_type;
+ typedef T5 arg5_type;
+ typedef T6 arg6_type;
+ typedef T7 arg7_type;
+ typedef T8 arg8_type;
+ typedef T9 arg9_type;
+ typedef T10 arg10_type;
+};
+
+} // end namespace detail
+
+template<typename Function>
+struct function_traits :
+ public detail::function_traits_helper<typename boost::add_pointer<Function>::type>
+{
+};
+
+#else
+
+namespace detail {
+
+template<int N>
+struct type_of_size
+{
+ char elements[N];
+};
+
+template<typename R>
+type_of_size<1> function_arity_helper(R (*f)());
+
+template<typename R, typename T1>
+type_of_size<2> function_arity_helper(R (*f)(T1));
+
+template<typename R, typename T1, typename T2>
+type_of_size<3> function_arity_helper(R (*f)(T1, T2));
+
+template<typename R, typename T1, typename T2, typename T3>
+type_of_size<4> function_arity_helper(R (*f)(T1, T2, T3));
+
+template<typename R, typename T1, typename T2, typename T3, typename T4>
+type_of_size<5> function_arity_helper(R (*f)(T1, T2, T3, T4));
+
+template<typename R, typename T1, typename T2, typename T3, typename T4,
+ typename T5>
+type_of_size<6> function_arity_helper(R (*f)(T1, T2, T3, T4, T5));
+
+template<typename R, typename T1, typename T2, typename T3, typename T4,
+ typename T5, typename T6>
+type_of_size<7> function_arity_helper(R (*f)(T1, T2, T3, T4, T5, T6));
+
+template<typename R, typename T1, typename T2, typename T3, typename T4,
+ typename T5, typename T6, typename T7>
+type_of_size<8> function_arity_helper(R (*f)(T1, T2, T3, T4, T5, T6, T7));
+
+template<typename R, typename T1, typename T2, typename T3, typename T4,
+ typename T5, typename T6, typename T7, typename T8>
+type_of_size<9> function_arity_helper(R (*f)(T1, T2, T3, T4, T5, T6, T7, T8));
+
+template<typename R, typename T1, typename T2, typename T3, typename T4,
+ typename T5, typename T6, typename T7, typename T8, typename T9>
+type_of_size<10> function_arity_helper(R (*f)(T1, T2, T3, T4, T5, T6, T7, T8,
+ T9));
+
+template<typename R, typename T1, typename T2, typename T3, typename T4,
+ typename T5, typename T6, typename T7, typename T8, typename T9,
+ typename T10>
+type_of_size<11> function_arity_helper(R (*f)(T1, T2, T3, T4, T5, T6, T7, T8,
+ T9, T10));
+} // end namespace detail
+
+// Won't work with references
+template<typename Function>
+struct function_traits
+{
+ BOOST_STATIC_CONSTANT(int, arity = (sizeof(detail::function_arity_helper((Function*)0))-1));
+};
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+}
+
+#endif // BOOST_TT_FUNCTION_TRAITS_HPP_INCLUDED
diff --git a/boost/boost/type_traits/has_nothrow_assign.hpp b/boost/boost/type_traits/has_nothrow_assign.hpp
new file mode 100644
index 00000000000..3cef7357d59
--- /dev/null
+++ b/boost/boost/type_traits/has_nothrow_assign.hpp
@@ -0,0 +1,38 @@
+
+// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_HAS_NOTHROW_ASSIGN_HPP_INCLUDED
+#define BOOST_TT_HAS_NOTHROW_ASSIGN_HPP_INCLUDED
+
+#include <boost/type_traits/has_trivial_assign.hpp>
+
+// should be the last #include
+#include <boost/type_traits/detail/bool_trait_def.hpp>
+
+namespace boost {
+
+namespace detail{
+
+template <class T>
+struct has_nothrow_assign_imp{
+ BOOST_STATIC_CONSTANT(bool, value =
+ (::boost::type_traits::ice_or<
+ ::boost::has_trivial_assign<T>::value,
+ BOOST_HAS_NOTHROW_ASSIGN(T)
+ >::value));
+};
+
+}
+
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(has_nothrow_assign,T,::boost::detail::has_nothrow_assign_imp<T>::value)
+
+} // namespace boost
+
+#include <boost/type_traits/detail/bool_trait_undef.hpp>
+
+#endif // BOOST_TT_HAS_NOTHROW_ASSIGN_HPP_INCLUDED
diff --git a/boost/boost/type_traits/has_nothrow_constructor.hpp b/boost/boost/type_traits/has_nothrow_constructor.hpp
new file mode 100644
index 00000000000..4f2cb364219
--- /dev/null
+++ b/boost/boost/type_traits/has_nothrow_constructor.hpp
@@ -0,0 +1,38 @@
+
+// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_HAS_NOTHROW_CONSTRUCTOR_HPP_INCLUDED
+#define BOOST_TT_HAS_NOTHROW_CONSTRUCTOR_HPP_INCLUDED
+
+#include <boost/type_traits/has_trivial_constructor.hpp>
+
+// should be the last #include
+#include <boost/type_traits/detail/bool_trait_def.hpp>
+
+namespace boost {
+
+namespace detail{
+
+template <class T>
+struct has_nothrow_constructor_imp{
+ BOOST_STATIC_CONSTANT(bool, value =
+ (::boost::type_traits::ice_or<
+ ::boost::has_trivial_constructor<T>::value,
+ BOOST_HAS_NOTHROW_CONSTRUCTOR(T)
+ >::value));
+};
+
+}
+
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(has_nothrow_constructor,T,::boost::detail::has_nothrow_constructor_imp<T>::value)
+
+} // namespace boost
+
+#include <boost/type_traits/detail/bool_trait_undef.hpp>
+
+#endif // BOOST_TT_HAS_NOTHROW_CONSTRUCTOR_HPP_INCLUDED
diff --git a/boost/boost/type_traits/has_nothrow_copy.hpp b/boost/boost/type_traits/has_nothrow_copy.hpp
new file mode 100644
index 00000000000..6a66c8bf0bc
--- /dev/null
+++ b/boost/boost/type_traits/has_nothrow_copy.hpp
@@ -0,0 +1,38 @@
+
+// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_HAS_NOTHROW_COPY_HPP_INCLUDED
+#define BOOST_TT_HAS_NOTHROW_COPY_HPP_INCLUDED
+
+#include <boost/type_traits/has_trivial_copy.hpp>
+
+// should be the last #include
+#include <boost/type_traits/detail/bool_trait_def.hpp>
+
+namespace boost {
+
+namespace detail{
+
+template <class T>
+struct has_nothrow_copy_imp{
+ BOOST_STATIC_CONSTANT(bool, value =
+ (::boost::type_traits::ice_or<
+ ::boost::has_trivial_copy<T>::value,
+ BOOST_HAS_NOTHROW_COPY(T)
+ >::value));
+};
+
+}
+
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(has_nothrow_copy,T,::boost::detail::has_nothrow_copy_imp<T>::value)
+
+} // namespace boost
+
+#include <boost/type_traits/detail/bool_trait_undef.hpp>
+
+#endif // BOOST_TT_HAS_NOTHROW_COPY_HPP_INCLUDED
diff --git a/boost/boost/type_traits/has_nothrow_destructor.hpp b/boost/boost/type_traits/has_nothrow_destructor.hpp
new file mode 100644
index 00000000000..4f5882afc00
--- /dev/null
+++ b/boost/boost/type_traits/has_nothrow_destructor.hpp
@@ -0,0 +1,25 @@
+
+// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_HAS_NOTHROW_DESTRUCTOR_HPP_INCLUDED
+#define BOOST_TT_HAS_NOTHROW_DESTRUCTOR_HPP_INCLUDED
+
+#include <boost/type_traits/has_trivial_destructor.hpp>
+
+// should be the last #include
+#include <boost/type_traits/detail/bool_trait_def.hpp>
+
+namespace boost {
+
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(has_nothrow_destructor,T,::boost::has_trivial_destructor<T>::value)
+
+} // namespace boost
+
+#include <boost/type_traits/detail/bool_trait_undef.hpp>
+
+#endif // BOOST_TT_HAS_NOTHROW_DESTRUCTOR_HPP_INCLUDED
diff --git a/boost/boost/type_traits/has_trivial_assign.hpp b/boost/boost/type_traits/has_trivial_assign.hpp
new file mode 100644
index 00000000000..4179e8d7473
--- /dev/null
+++ b/boost/boost/type_traits/has_trivial_assign.hpp
@@ -0,0 +1,50 @@
+
+// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_HAS_TRIVIAL_ASSIGN_HPP_INCLUDED
+#define BOOST_TT_HAS_TRIVIAL_ASSIGN_HPP_INCLUDED
+
+#include <boost/type_traits/config.hpp>
+#include <boost/type_traits/intrinsics.hpp>
+#include <boost/type_traits/is_pod.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/is_volatile.hpp>
+#include <boost/type_traits/detail/ice_and.hpp>
+#include <boost/type_traits/detail/ice_or.hpp>
+#include <boost/type_traits/detail/ice_not.hpp>
+
+// should be the last #include
+#include <boost/type_traits/detail/bool_trait_def.hpp>
+
+namespace boost {
+
+namespace detail {
+
+template <typename T>
+struct has_trivial_assign_impl
+{
+ BOOST_STATIC_CONSTANT(bool, value =
+ (::boost::type_traits::ice_and<
+ ::boost::type_traits::ice_or<
+ ::boost::is_pod<T>::value,
+ BOOST_HAS_TRIVIAL_ASSIGN(T)
+ >::value,
+ ::boost::type_traits::ice_not< ::boost::is_const<T>::value >::value,
+ ::boost::type_traits::ice_not< ::boost::is_volatile<T>::value >::value
+ >::value));
+};
+
+} // namespace detail
+
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(has_trivial_assign,T,::boost::detail::has_trivial_assign_impl<T>::value)
+
+} // namespace boost
+
+#include <boost/type_traits/detail/bool_trait_undef.hpp>
+
+#endif // BOOST_TT_HAS_TRIVIAL_ASSIGN_HPP_INCLUDED
diff --git a/boost/boost/type_traits/has_trivial_constructor.hpp b/boost/boost/type_traits/has_trivial_constructor.hpp
new file mode 100644
index 00000000000..5f9616d3c10
--- /dev/null
+++ b/boost/boost/type_traits/has_trivial_constructor.hpp
@@ -0,0 +1,42 @@
+
+// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_HAS_TRIVIAL_CONSTRUCTOR_HPP_INCLUDED
+#define BOOST_TT_HAS_TRIVIAL_CONSTRUCTOR_HPP_INCLUDED
+
+#include <boost/type_traits/config.hpp>
+#include <boost/type_traits/intrinsics.hpp>
+#include <boost/type_traits/is_pod.hpp>
+#include <boost/type_traits/detail/ice_or.hpp>
+
+// should be the last #include
+#include <boost/type_traits/detail/bool_trait_def.hpp>
+
+namespace boost {
+
+namespace detail {
+
+template <typename T>
+struct has_trivial_ctor_impl
+{
+ BOOST_STATIC_CONSTANT(bool, value =
+ (::boost::type_traits::ice_or<
+ ::boost::is_pod<T>::value,
+ BOOST_HAS_TRIVIAL_CONSTRUCTOR(T)
+ >::value));
+};
+
+} // namespace detail
+
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(has_trivial_constructor,T,::boost::detail::has_trivial_ctor_impl<T>::value)
+
+} // namespace boost
+
+#include <boost/type_traits/detail/bool_trait_undef.hpp>
+
+#endif // BOOST_TT_HAS_TRIVIAL_CONSTRUCTOR_HPP_INCLUDED
diff --git a/boost/boost/type_traits/has_trivial_copy.hpp b/boost/boost/type_traits/has_trivial_copy.hpp
new file mode 100644
index 00000000000..96b214892c7
--- /dev/null
+++ b/boost/boost/type_traits/has_trivial_copy.hpp
@@ -0,0 +1,48 @@
+
+// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_HAS_TRIVIAL_COPY_HPP_INCLUDED
+#define BOOST_TT_HAS_TRIVIAL_COPY_HPP_INCLUDED
+
+#include <boost/type_traits/config.hpp>
+#include <boost/type_traits/intrinsics.hpp>
+#include <boost/type_traits/is_volatile.hpp>
+#include <boost/type_traits/is_pod.hpp>
+#include <boost/type_traits/detail/ice_and.hpp>
+#include <boost/type_traits/detail/ice_or.hpp>
+#include <boost/type_traits/detail/ice_not.hpp>
+
+// should be the last #include
+#include <boost/type_traits/detail/bool_trait_def.hpp>
+
+namespace boost {
+
+namespace detail {
+
+template <typename T>
+struct has_trivial_copy_impl
+{
+ BOOST_STATIC_CONSTANT(bool, value =
+ (::boost::type_traits::ice_and<
+ ::boost::type_traits::ice_or<
+ ::boost::is_pod<T>::value,
+ BOOST_HAS_TRIVIAL_COPY(T)
+ >::value,
+ ::boost::type_traits::ice_not< ::boost::is_volatile<T>::value >::value
+ >::value));
+};
+
+} // namespace detail
+
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(has_trivial_copy,T,::boost::detail::has_trivial_copy_impl<T>::value)
+
+} // namespace boost
+
+#include <boost/type_traits/detail/bool_trait_undef.hpp>
+
+#endif // BOOST_TT_HAS_TRIVIAL_COPY_HPP_INCLUDED
diff --git a/boost/boost/type_traits/has_trivial_destructor.hpp b/boost/boost/type_traits/has_trivial_destructor.hpp
new file mode 100644
index 00000000000..f2a8ce681b1
--- /dev/null
+++ b/boost/boost/type_traits/has_trivial_destructor.hpp
@@ -0,0 +1,42 @@
+
+// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_HAS_TRIVIAL_DESTRUCTOR_HPP_INCLUDED
+#define BOOST_TT_HAS_TRIVIAL_DESTRUCTOR_HPP_INCLUDED
+
+#include <boost/type_traits/config.hpp>
+#include <boost/type_traits/intrinsics.hpp>
+#include <boost/type_traits/is_pod.hpp>
+#include <boost/type_traits/detail/ice_or.hpp>
+
+// should be the last #include
+#include <boost/type_traits/detail/bool_trait_def.hpp>
+
+namespace boost {
+
+namespace detail {
+
+template <typename T>
+struct has_trivial_dtor_impl
+{
+ BOOST_STATIC_CONSTANT(bool, value =
+ (::boost::type_traits::ice_or<
+ ::boost::is_pod<T>::value,
+ BOOST_HAS_TRIVIAL_DESTRUCTOR(T)
+ >::value));
+};
+
+} // namespace detail
+
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(has_trivial_destructor,T,::boost::detail::has_trivial_dtor_impl<T>::value)
+
+} // namespace boost
+
+#include <boost/type_traits/detail/bool_trait_undef.hpp>
+
+#endif // BOOST_TT_HAS_TRIVIAL_DESTRUCTOR_HPP_INCLUDED
diff --git a/boost/boost/type_traits/has_virtual_destructor.hpp b/boost/boost/type_traits/has_virtual_destructor.hpp
new file mode 100644
index 00000000000..8f99ff420f3
--- /dev/null
+++ b/boost/boost/type_traits/has_virtual_destructor.hpp
@@ -0,0 +1,25 @@
+
+// (C) Copyright John Maddock 2005.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+
+#ifndef BOOST_TT_HAS_VIRTUAL_DESTRUCTOR_HPP_INCLUDED
+#define BOOST_TT_HAS_VIRTUAL_DESTRUCTOR_HPP_INCLUDED
+
+#include <boost/type_traits/intrinsics.hpp>
+// should be the last #include
+#include <boost/type_traits/detail/bool_trait_def.hpp>
+
+namespace boost {
+
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(has_virtual_destructor,T,BOOST_HAS_VIRTUAL_DESTRUCTOR(T))
+
+} // namespace boost
+
+#include <boost/type_traits/detail/bool_trait_undef.hpp>
+
+#endif // BOOST_TT_IS_MEMBER_FUNCTION_POINTER_HPP_INCLUDED
diff --git a/boost/boost/type_traits/ice.hpp b/boost/boost/type_traits/ice.hpp
new file mode 100644
index 00000000000..134bc4bb764
--- /dev/null
+++ b/boost/boost/type_traits/ice.hpp
@@ -0,0 +1,20 @@
+
+// (C) Copyright John Maddock and Steve Cleary 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+//
+// macros and helpers for working with integral-constant-expressions.
+
+#ifndef BOOST_TT_ICE_HPP_INCLUDED
+#define BOOST_TT_ICE_HPP_INCLUDED
+
+#include <boost/type_traits/detail/yes_no_type.hpp>
+#include <boost/type_traits/detail/ice_or.hpp>
+#include <boost/type_traits/detail/ice_and.hpp>
+#include <boost/type_traits/detail/ice_not.hpp>
+#include <boost/type_traits/detail/ice_eq.hpp>
+
+#endif // BOOST_TT_ICE_HPP_INCLUDED
diff --git a/boost/boost/type_traits/integral_constant.hpp b/boost/boost/type_traits/integral_constant.hpp
new file mode 100644
index 00000000000..4ed1bb058fc
--- /dev/null
+++ b/boost/boost/type_traits/integral_constant.hpp
@@ -0,0 +1,53 @@
+// (C) Copyright John Maddock 2005.
+// 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)
+
+#ifndef BOOST_TYPE_TRAITS_INTEGRAL_CONSTANT_HPP
+#define BOOST_TYPE_TRAITS_INTEGRAL_CONSTANT_HPP
+
+#include <boost/config.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/integral_c.hpp>
+
+namespace boost{
+
+#if defined(BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS) || defined(__BORLANDC__)
+template <class T, int val>
+#else
+template <class T, T val>
+#endif
+struct integral_constant : public mpl::integral_c<T, val>
+{
+ typedef integral_constant<T,val> type;
+};
+
+template<> struct integral_constant<bool,true> : public mpl::true_
+{
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+# pragma warning(push)
+# pragma warning(disable:4097)
+ typedef mpl::true_ base_;
+ using base_::value;
+# pragma warning(pop)
+#endif
+ typedef integral_constant<bool,true> type;
+};
+template<> struct integral_constant<bool,false> : public mpl::false_
+{
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+# pragma warning(push)
+# pragma warning(disable:4097)
+ typedef mpl::false_ base_;
+ using base_::value;
+# pragma warning(pop)
+#endif
+ typedef integral_constant<bool,false> type;
+};
+
+typedef integral_constant<bool,true> true_type;
+typedef integral_constant<bool,false> false_type;
+
+}
+
+#endif
diff --git a/boost/boost/type_traits/intrinsics.hpp b/boost/boost/type_traits/intrinsics.hpp
new file mode 100644
index 00000000000..48c34402d0c
--- /dev/null
+++ b/boost/boost/type_traits/intrinsics.hpp
@@ -0,0 +1,137 @@
+
+// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_INTRINSICS_HPP_INCLUDED
+#define BOOST_TT_INTRINSICS_HPP_INCLUDED
+
+#ifndef BOOST_TT_CONFIG_HPP_INCLUDED
+#include <boost/type_traits/config.hpp>
+#endif
+
+//
+// Helper macros for builtin compiler support.
+// If your compiler has builtin support for any of the following
+// traits concepts, then redefine the appropriate macros to pick
+// up on the compiler support:
+//
+// (these should largely ignore cv-qualifiers)
+// BOOST_IS_UNION(T) should evaluate to true if T is a union type
+// BOOST_IS_POD(T) should evaluate to true if T is a POD type
+// BOOST_IS_EMPTY(T) should evaluate to true if T is an empty struct or union
+// BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) should evaluate to true if "T x;" has no effect
+// BOOST_HAS_TRIVIAL_COPY(T) should evaluate to true if T(t) <==> memcpy
+// BOOST_HAS_TRIVIAL_ASSIGN(T) should evaluate to true if t = u <==> memcpy
+// BOOST_HAS_TRIVIAL_DESTRUCTOR(T) should evaluate to true if ~T() has no effect
+// BOOST_HAS_NOTHROW_CONSTRUCTOR(T) should evaluate to true if "T x;" can not throw
+// BOOST_HAS_NOTHROW_COPY(T) should evaluate to true if T(t) can not throw
+// BOOST_HAS_NOTHROW_ASSIGN(T) should evaluate to true if t = u can not throw
+// BOOST_HAS_VIRTUAL_DESTRUCTOR(T) should evaluate to true T has a virtual destructor
+
+#ifdef BOOST_HAS_SGI_TYPE_TRAITS
+ // Hook into SGI's __type_traits class, this will pick up user supplied
+ // specializations as well as SGI - compiler supplied specializations.
+# include <boost/type_traits/is_same.hpp>
+# ifdef __NetBSD__
+ // There are two different versions of type_traits.h on NetBSD on Spark
+ // use an implicit include via algorithm instead, to make sure we get
+ // the same version as the std lib:
+# include <algorithm>
+# else
+# include <type_traits.h>
+# endif
+# define BOOST_IS_POD(T) ::boost::is_same< typename ::__type_traits<T>::is_POD_type, ::__true_type>::value
+# define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) ::boost::is_same< typename ::__type_traits<T>::has_trivial_default_constructor, ::__true_type>::value
+# define BOOST_HAS_TRIVIAL_COPY(T) ::boost::is_same< typename ::__type_traits<T>::has_trivial_copy_constructor, ::__true_type>::value
+# define BOOST_HAS_TRIVIAL_ASSIGN(T) ::boost::is_same< typename ::__type_traits<T>::has_trivial_assignment_operator, ::__true_type>::value
+# define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) ::boost::is_same< typename ::__type_traits<T>::has_trivial_destructor, ::__true_type>::value
+
+# ifdef __sgi
+# define BOOST_HAS_TYPE_TRAITS_INTRINSICS
+# endif
+#endif
+
+#if defined(__MSL_CPP__) && (__MSL_CPP__ >= 0x8000)
+ // Metrowerks compiler is acquiring intrinsic type traits support
+ // post version 8. We hook into the published interface to pick up
+ // user defined specializations as well as compiler intrinsics as
+ // and when they become available:
+# include <msl_utility>
+# define BOOST_IS_UNION(T) BOOST_STD_EXTENSION_NAMESPACE::is_union<T>::value
+# define BOOST_IS_POD(T) BOOST_STD_EXTENSION_NAMESPACE::is_POD<T>::value
+# define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) BOOST_STD_EXTENSION_NAMESPACE::has_trivial_default_ctor<T>::value
+# define BOOST_HAS_TRIVIAL_COPY(T) BOOST_STD_EXTENSION_NAMESPACE::has_trivial_copy_ctor<T>::value
+# define BOOST_HAS_TRIVIAL_ASSIGN(T) BOOST_STD_EXTENSION_NAMESPACE::has_trivial_assignment<T>::value
+# define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) BOOST_STD_EXTENSION_NAMESPACE::has_trivial_dtor<T>::value
+# define BOOST_HAS_TYPE_TRAITS_INTRINSICS
+#endif
+
+#if defined(BOOST_MSVC) && defined(_MSC_FULL_VER) && (_MSC_FULL_VER >=140050215)
+# define BOOST_IS_UNION(T) __is_union(T)
+# define BOOST_IS_POD(T) (__is_pod(T) && __has_trivial_constructor(T))
+# define BOOST_IS_EMPTY(T) __is_empty(T)
+# define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) __has_trivial_constructor(T)
+# define BOOST_HAS_TRIVIAL_COPY(T) __has_trivial_copy(T)
+# define BOOST_HAS_TRIVIAL_ASSIGN(T) __has_trivial_assign(T)
+# define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) __has_trivial_destructor(T)
+# define BOOST_HAS_NOTHROW_CONSTRUCTOR(T) __has_nothrow_constructor(T)
+# define BOOST_HAS_NOTHROW_COPY(T) __has_nothrow_copy(T)
+# define BOOST_HAS_NOTHROW_ASSIGN(T) __has_nothrow_assign(T)
+# define BOOST_HAS_VIRTUAL_DESTRUCTOR(T) __has_virtual_destructor(T)
+# define BOOST_HAS_TYPE_TRAITS_INTRINSICS
+#endif
+
+
+#ifndef BOOST_IS_UNION
+# define BOOST_IS_UNION(T) false
+#endif
+
+#ifndef BOOST_IS_POD
+# define BOOST_IS_POD(T) false
+#endif
+
+#ifndef BOOST_IS_EMPTY
+# define BOOST_IS_EMPTY(T) false
+#endif
+
+#ifndef BOOST_HAS_TRIVIAL_CONSTRUCTOR
+# define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) false
+#endif
+
+#ifndef BOOST_HAS_TRIVIAL_COPY
+# define BOOST_HAS_TRIVIAL_COPY(T) false
+#endif
+
+#ifndef BOOST_HAS_TRIVIAL_ASSIGN
+# define BOOST_HAS_TRIVIAL_ASSIGN(T) false
+#endif
+
+#ifndef BOOST_HAS_TRIVIAL_DESTRUCTOR
+# define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) false
+#endif
+
+#ifndef BOOST_HAS_NOTHROW_CONSTRUCTOR
+# define BOOST_HAS_NOTHROW_CONSTRUCTOR(T) false
+#endif
+
+#ifndef BOOST_HAS_NOTHROW_COPY
+# define BOOST_HAS_NOTHROW_COPY(T) false
+#endif
+
+#ifndef BOOST_HAS_NOTHROW_ASSIGN
+# define BOOST_HAS_NOTHROW_ASSIGN(T) false
+#endif
+
+#ifndef BOOST_HAS_VIRTUAL_DESTRUCTOR
+# define BOOST_HAS_VIRTUAL_DESTRUCTOR(T) false
+#endif
+
+#endif // BOOST_TT_INTRINSICS_HPP_INCLUDED
+
+
+
+
diff --git a/boost/boost/type_traits/is_abstract.hpp b/boost/boost/type_traits/is_abstract.hpp
new file mode 100644
index 00000000000..b6d640c78b1
--- /dev/null
+++ b/boost/boost/type_traits/is_abstract.hpp
@@ -0,0 +1,137 @@
+#ifndef BOOST_TT_IS_ABSTRACT_CLASS_HPP
+#define BOOST_TT_IS_ABSTRACT_CLASS_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// is_abstract_class.hpp:
+//
+// (C) Copyright 2002 Rani Sharoni (rani_sharoni@hotmail.com) and Robert Ramey
+// Use, modification and distribution is 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)
+//
+// See http://www.boost.org for updates, documentation, and revision history.
+//
+
+// Compile type discovery whether given type is abstract class or not.
+//
+// Requires DR 337 to be supported by compiler
+// (http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/cwg_active.html#337).
+//
+//
+// Believed (Jan 2004) to work on:
+// - GCC 3.4
+// - VC++ 7.1
+// - compilers with new EDG frontend (Intel C++ 7, Comeau 4.3.2)
+//
+// Doesn't work on:
+// - VC++6, VC++7.0 and less
+// - GCC 3.3.X and less
+// - Borland C++ 6 and less
+//
+//
+// History:
+// - Originally written by Rani Sharoni, see
+// http://groups.google.com/groups?selm=df893da6.0207110613.75b2fe90%40posting.google.com
+// At this time supported by EDG (Intel C++ 7, Comeau 4.3.2) and VC7.1.
+// - Adapted and added into Boost.Serialization library by Robert Ramey
+// (starting with submission #10).
+// - Jan 2004: GCC 3.4 fixed to suport DR337 (Giovanni Bajo).
+// - Jan 2004: modified to be part of Boost.TypeTraits (Pavel Vozenilek).
+// - Nov 2004: Christoph Ludwig found that the implementation did not work with
+// template types and gcc-3.4 or VC7.1, fix due to Christoph Ludwig
+// and John Maddock.
+// - Dec 2004: Added new config macro BOOST_NO_IS_ABSTRACT which causes the template
+// to degrade gracefully, rather than trash the compiler (John Maddock).
+//
+
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/detail/yes_no_type.hpp>
+#include <boost/type_traits/is_class.hpp>
+#include <boost/type_traits/detail/ice_and.hpp>
+#ifdef BOOST_NO_IS_ABSTRACT
+#include <boost/type_traits/is_polymorphic.hpp>
+#endif
+// should be the last #include
+#include <boost/type_traits/detail/bool_trait_def.hpp>
+
+
+namespace boost {
+namespace detail{
+
+#ifndef BOOST_NO_IS_ABSTRACT
+template<class T>
+struct is_abstract_imp2
+{
+ // Deduction fails if T is void, function type,
+ // reference type (14.8.2/2)or an abstract class type
+ // according to review status issue #337
+ //
+ template<class U>
+ static type_traits::no_type check_sig(U (*)[1]);
+ template<class U>
+ static type_traits::yes_type check_sig(...);
+ //
+ // T must be a complete type, further if T is a template then
+ // it must be instantiated in order for us to get the right answer:
+ //
+ BOOST_STATIC_ASSERT(sizeof(T) != 0);
+
+ // GCC2 won't even parse this template if we embed the computation
+ // of s1 in the computation of value.
+#ifdef __GNUC__
+ BOOST_STATIC_CONSTANT(unsigned, s1 = sizeof(is_abstract_imp2<T>::template check_sig<T>(0)));
+#else
+ BOOST_STATIC_CONSTANT(unsigned, s1 = sizeof(check_sig<T>(0)));
+#endif
+
+ BOOST_STATIC_CONSTANT(bool, value =
+ (s1 == sizeof(type_traits::yes_type)));
+};
+
+template <bool v>
+struct is_abstract_select
+{
+ template <class T>
+ struct rebind
+ {
+ typedef is_abstract_imp2<T> type;
+ };
+};
+template <>
+struct is_abstract_select<false>
+{
+ template <class T>
+ struct rebind
+ {
+ typedef false_type type;
+ };
+};
+
+template <class T>
+struct is_abstract_imp
+{
+ typedef is_abstract_select< ::boost::is_class<T>::value> selector;
+ typedef typename selector::template rebind<T> binder;
+ typedef typename binder::type type;
+
+ BOOST_STATIC_CONSTANT(bool, value = type::value);
+};
+
+#endif
+}
+
+#ifndef BOOST_NO_IS_ABSTRACT
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_abstract,T,::boost::detail::is_abstract_imp<T>::value)
+#else
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_abstract,T,::boost::detail::is_polymorphic_imp<T>::value)
+#endif
+
+} // namespace boost
+
+#include <boost/type_traits/detail/bool_trait_undef.hpp>
+
+#endif //BOOST_TT_IS_ABSTRACT_CLASS_HPP
diff --git a/boost/boost/type_traits/is_arithmetic.hpp b/boost/boost/type_traits/is_arithmetic.hpp
new file mode 100644
index 00000000000..be881c5fbe2
--- /dev/null
+++ b/boost/boost/type_traits/is_arithmetic.hpp
@@ -0,0 +1,43 @@
+
+// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_IS_ARITHMETIC_HPP_INCLUDED
+#define BOOST_TT_IS_ARITHMETIC_HPP_INCLUDED
+
+#include <boost/type_traits/is_integral.hpp>
+#include <boost/type_traits/is_float.hpp>
+#include <boost/type_traits/detail/ice_or.hpp>
+#include <boost/config.hpp>
+
+// should be the last #include
+#include <boost/type_traits/detail/bool_trait_def.hpp>
+
+namespace boost {
+
+namespace detail {
+
+template< typename T >
+struct is_arithmetic_impl
+{
+ BOOST_STATIC_CONSTANT(bool, value =
+ (::boost::type_traits::ice_or<
+ ::boost::is_integral<T>::value,
+ ::boost::is_float<T>::value
+ >::value));
+};
+
+} // namespace detail
+
+//* is a type T an arithmetic type described in the standard (3.9.1p8)
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_arithmetic,T,::boost::detail::is_arithmetic_impl<T>::value)
+
+} // namespace boost
+
+#include <boost/type_traits/detail/bool_trait_undef.hpp>
+
+#endif // BOOST_TT_IS_ARITHMETIC_HPP_INCLUDED
diff --git a/boost/boost/type_traits/is_array.hpp b/boost/boost/type_traits/is_array.hpp
new file mode 100644
index 00000000000..24a2a90fd32
--- /dev/null
+++ b/boost/boost/type_traits/is_array.hpp
@@ -0,0 +1,90 @@
+
+// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard
+// Hinnant & John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+
+// Some fixes for is_array are based on a newgroup posting by Jonathan Lundquist.
+
+
+#ifndef BOOST_TT_IS_ARRAY_HPP_INCLUDED
+#define BOOST_TT_IS_ARRAY_HPP_INCLUDED
+
+#include <boost/type_traits/config.hpp>
+
+#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+# include <boost/type_traits/detail/yes_no_type.hpp>
+# include <boost/type_traits/detail/wrap.hpp>
+#endif
+
+#include <cstddef>
+
+// should be the last #include
+#include <boost/type_traits/detail/bool_trait_def.hpp>
+
+namespace boost {
+
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_array,T,false)
+#if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)
+BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,is_array,T[N],true)
+BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,is_array,T const[N],true)
+BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,is_array,T volatile[N],true)
+BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,is_array,T const volatile[N],true)
+#if !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && !defined(__IBMCPP__) && !BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))
+BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_array,T[],true)
+BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_array,T const[],true)
+BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_array,T volatile[],true)
+BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_array,T const volatile[],true)
+#endif
+#endif
+
+#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace detail {
+
+using ::boost::type_traits::yes_type;
+using ::boost::type_traits::no_type;
+using ::boost::type_traits::wrap;
+
+template< typename T > T(* is_array_tester1(wrap<T>) )(wrap<T>);
+char BOOST_TT_DECL is_array_tester1(...);
+
+template< typename T> no_type is_array_tester2(T(*)(wrap<T>));
+yes_type BOOST_TT_DECL is_array_tester2(...);
+
+template< typename T >
+struct is_array_impl
+{
+ BOOST_STATIC_CONSTANT(bool, value =
+ sizeof(::boost::detail::is_array_tester2(
+ ::boost::detail::is_array_tester1(
+ ::boost::type_traits::wrap<T>()
+ )
+ )) == 1
+ );
+};
+
+#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_array,void,false)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_array,void const,false)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_array,void volatile,false)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_array,void const volatile,false)
+#endif
+
+} // namespace detail
+
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_array,T,::boost::detail::is_array_impl<T>::value)
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+} // namespace boost
+
+#include <boost/type_traits/detail/bool_trait_undef.hpp>
+
+#endif // BOOST_TT_IS_ARRAY_HPP_INCLUDED
diff --git a/boost/boost/type_traits/is_base_and_derived.hpp b/boost/boost/type_traits/is_base_and_derived.hpp
new file mode 100644
index 00000000000..48d10280522
--- /dev/null
+++ b/boost/boost/type_traits/is_base_and_derived.hpp
@@ -0,0 +1,223 @@
+
+// (C) Copyright Rani Sharoni 2003.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_IS_BASE_AND_DERIVED_HPP_INCLUDED
+#define BOOST_TT_IS_BASE_AND_DERIVED_HPP_INCLUDED
+
+#include <boost/type_traits/is_class.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/type_traits/detail/ice_and.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/config.hpp>
+
+// should be the last #include
+#include <boost/type_traits/detail/bool_trait_def.hpp>
+
+namespace boost {
+
+namespace detail {
+
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x581)) \
+ && !BOOST_WORKAROUND(__SUNPRO_CC , <= 0x540) \
+ && !BOOST_WORKAROUND(__EDG_VERSION__, <= 243) \
+ && !BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))
+
+ // The EDG version number is a lower estimate.
+ // It is not currently known which EDG version
+ // exactly fixes the problem.
+
+/*************************************************************************
+
+This version detects ambiguous base classes and private base classes
+correctly, and was devised by Rani Sharoni.
+
+Explanation by Terje Slettebo and Rani Sharoni.
+
+Let's take the multiple base class below as an example, and the following
+will also show why there's not a problem with private or ambiguous base
+class:
+
+struct B {};
+struct B1 : B {};
+struct B2 : B {};
+struct D : private B1, private B2 {};
+
+is_base_and_derived<B, D>::value;
+
+First, some terminology:
+
+SC - Standard conversion
+UDC - User-defined conversion
+
+A user-defined conversion sequence consists of an SC, followed by an UDC,
+followed by another SC. Either SC may be the identity conversion.
+
+When passing the default-constructed Host object to the overloaded check_sig()
+functions (initialization 8.5/14/4/3), we have several viable implicit
+conversion sequences:
+
+For "static no_type check_sig(B const volatile *, int)" we have the conversion
+sequences:
+
+C -> C const (SC - Qualification Adjustment) -> B const volatile* (UDC)
+C -> D const volatile* (UDC) -> B1 const volatile* / B2 const volatile* ->
+ B const volatile* (SC - Conversion)
+
+For "static yes_type check_sig(D const volatile *, T)" we have the conversion
+sequence:
+
+C -> D const volatile* (UDC)
+
+According to 13.3.3.1/4, in context of user-defined conversion only the
+standard conversion sequence is considered when selecting the best viable
+function, so it only considers up to the user-defined conversion. For the
+first function this means choosing between C -> C const and C -> C, and it
+chooses the latter, because it's a proper subset (13.3.3.2/3/2) of the
+former. Therefore, we have:
+
+C -> D const volatile* (UDC) -> B1 const volatile* / B2 const volatile* ->
+ B const volatile* (SC - Conversion)
+C -> D const volatile* (UDC)
+
+Here, the principle of the "shortest subsequence" applies again, and it
+chooses C -> D const volatile*. This shows that it doesn't even need to
+consider the multiple paths to B, or accessibility, as that possibility is
+eliminated before it could possibly cause ambiguity or access violation.
+
+If D is not derived from B, it has to choose between C -> C const -> B const
+volatile* for the first function, and C -> D const volatile* for the second
+function, which are just as good (both requires a UDC, 13.3.3.2), had it not
+been for the fact that "static no_type check_sig(B const volatile *, int)" is
+not templated, which makes C -> C const -> B const volatile* the best choice
+(13.3.3/1/4), resulting in "no".
+
+Also, if Host::operator B const volatile* hadn't been const, the two
+conversion sequences for "static no_type check_sig(B const volatile *, int)", in
+the case where D is derived from B, would have been ambiguous.
+
+See also
+http://groups.google.com/groups?selm=df893da6.0301280859.522081f7%40posting.
+google.com and links therein.
+
+*************************************************************************/
+
+template <typename B, typename D>
+struct bd_helper
+{
+ //
+ // This VC7.1 specific workaround stops the compiler from generating
+ // an internal compiler error when compiling with /vmg (thanks to
+ // Aleksey Gurtovoy for figuring out the workaround).
+ //
+#if !BOOST_WORKAROUND(BOOST_MSVC, == 1310)
+ template <typename T>
+ static type_traits::yes_type check_sig(D const volatile *, T);
+ static type_traits::no_type check_sig(B const volatile *, int);
+#else
+ static type_traits::yes_type check_sig(D const volatile *, long);
+ static type_traits::no_type check_sig(B const volatile * const&, int);
+#endif
+};
+
+template<typename B, typename D>
+struct is_base_and_derived_impl2
+{
+ struct Host
+ {
+#if !BOOST_WORKAROUND(BOOST_MSVC, == 1310)
+ operator B const volatile *() const;
+#else
+ operator B const volatile * const&() const;
+#endif
+ operator D const volatile *();
+ };
+
+ BOOST_STATIC_CONSTANT(bool, value =
+ sizeof(bd_helper<B,D>::check_sig(Host(), 0)) == sizeof(type_traits::yes_type));
+};
+
+#else
+
+//
+// broken version:
+//
+template<typename B, typename D>
+struct is_base_and_derived_impl2
+{
+ BOOST_STATIC_CONSTANT(bool, value =
+ (::boost::is_convertible<D*,B*>::value));
+};
+
+#define BOOST_BROKEN_IS_BASE_AND_DERIVED
+
+#endif
+
+template <typename B, typename D>
+struct is_base_and_derived_impl3
+{
+ BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+template <bool ic1, bool ic2, bool iss>
+struct is_base_and_derived_select
+{
+ template <class T, class U>
+ struct rebind
+ {
+ typedef is_base_and_derived_impl3<T,U> type;
+ };
+};
+
+template <>
+struct is_base_and_derived_select<true,true,false>
+{
+ template <class T, class U>
+ struct rebind
+ {
+ typedef is_base_and_derived_impl2<T,U> type;
+ };
+};
+
+template <typename B, typename D>
+struct is_base_and_derived_impl
+{
+ typedef typename remove_cv<B>::type ncvB;
+ typedef typename remove_cv<D>::type ncvD;
+
+ typedef is_base_and_derived_select<
+ ::boost::is_class<B>::value,
+ ::boost::is_class<D>::value,
+ ::boost::is_same<B,D>::value> selector;
+ typedef typename selector::template rebind<ncvB,ncvD> binder;
+ typedef typename binder::type bound_type;
+
+ BOOST_STATIC_CONSTANT(bool, value = bound_type::value);
+};
+
+} // namespace detail
+
+BOOST_TT_AUX_BOOL_TRAIT_DEF2(
+ is_base_and_derived
+ , Base
+ , Derived
+ , (::boost::detail::is_base_and_derived_impl<Base,Derived>::value)
+ )
+
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_2(typename Base,typename Derived,is_base_and_derived,Base&,Derived,false)
+BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_2(typename Base,typename Derived,is_base_and_derived,Base,Derived&,false)
+BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_2(typename Base,typename Derived,is_base_and_derived,Base&,Derived&,false)
+#endif
+
+} // namespace boost
+
+#include <boost/type_traits/detail/bool_trait_undef.hpp>
+
+#endif // BOOST_TT_IS_BASE_AND_DERIVED_HPP_INCLUDED
+
diff --git a/boost/boost/type_traits/is_base_of.hpp b/boost/boost/type_traits/is_base_of.hpp
new file mode 100644
index 00000000000..bf46da38e38
--- /dev/null
+++ b/boost/boost/type_traits/is_base_of.hpp
@@ -0,0 +1,40 @@
+
+// (C) Copyright Rani Sharoni 2003-2005.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_IS_BASE_OF_HPP_INCLUDED
+#define BOOST_TT_IS_BASE_OF_HPP_INCLUDED
+
+#include <boost/type_traits/is_base_and_derived.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/detail/ice_or.hpp>
+
+// should be the last #include
+#include <boost/type_traits/detail/bool_trait_def.hpp>
+
+namespace boost {
+
+BOOST_TT_AUX_BOOL_TRAIT_DEF2(
+ is_base_of
+ , Base
+ , Derived
+ , (::boost::type_traits::ice_or<
+ (::boost::detail::is_base_and_derived_impl<Base,Derived>::value),
+ (::boost::is_same<Base,Derived>::value)>::value)
+ )
+
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_2(typename Base,typename Derived,is_base_of,Base&,Derived,false)
+BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_2(typename Base,typename Derived,is_base_of,Base,Derived&,false)
+BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_2(typename Base,typename Derived,is_base_of,Base&,Derived&,false)
+#endif
+
+} // namespace boost
+
+#include <boost/type_traits/detail/bool_trait_undef.hpp>
+
+#endif // BOOST_TT_IS_BASE_AND_DERIVED_HPP_INCLUDED
diff --git a/boost/boost/type_traits/is_class.hpp b/boost/boost/type_traits/is_class.hpp
new file mode 100644
index 00000000000..c361580507f
--- /dev/null
+++ b/boost/boost/type_traits/is_class.hpp
@@ -0,0 +1,128 @@
+// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard
+// Hinnant & John Maddock 2000-2003.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+
+#ifndef BOOST_TT_IS_CLASS_HPP_INCLUDED
+#define BOOST_TT_IS_CLASS_HPP_INCLUDED
+
+#include <boost/type_traits/config.hpp>
+# include <boost/type_traits/is_union.hpp>
+# include <boost/type_traits/detail/ice_and.hpp>
+# include <boost/type_traits/detail/ice_not.hpp>
+
+#ifdef BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION
+# include <boost/type_traits/detail/yes_no_type.hpp>
+#else
+# include <boost/type_traits/is_scalar.hpp>
+# include <boost/type_traits/is_array.hpp>
+# include <boost/type_traits/is_reference.hpp>
+# include <boost/type_traits/is_void.hpp>
+# include <boost/type_traits/is_function.hpp>
+#endif
+
+#ifdef __EDG_VERSION__
+# include <boost/type_traits/remove_cv.hpp>
+#endif
+
+// should be the last #include
+#include <boost/type_traits/detail/bool_trait_def.hpp>
+
+namespace boost {
+
+namespace detail {
+
+#ifdef BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION
+
+// This is actually the conforming implementation which works with
+// abstract classes. However, enough compilers have trouble with
+// it that most will use the one in
+// boost/type_traits/object_traits.hpp. This implementation
+// actually works with VC7.0, but other interactions seem to fail
+// when we use it.
+
+// is_class<> metafunction due to Paul Mensonides
+// (leavings@attbi.com). For more details:
+// http://groups.google.com/groups?hl=en&selm=000001c1cc83%24e154d5e0%247772e50c%40c161550a&rnum=1
+#if defined(__GNUC__) && !defined(__EDG_VERSION__)
+
+template <class U> ::boost::type_traits::yes_type is_class_tester(void(U::*)(void));
+template <class U> ::boost::type_traits::no_type is_class_tester(...);
+
+template <typename T>
+struct is_class_impl
+{
+
+ BOOST_STATIC_CONSTANT(bool, value =
+ (::boost::type_traits::ice_and<
+ sizeof(is_class_tester<T>(0)) == sizeof(::boost::type_traits::yes_type),
+ ::boost::type_traits::ice_not< ::boost::is_union<T>::value >::value
+ >::value)
+ );
+};
+
+#else
+
+template <typename T>
+struct is_class_impl
+{
+ template <class U> static ::boost::type_traits::yes_type is_class_tester(void(U::*)(void));
+ template <class U> static ::boost::type_traits::no_type is_class_tester(...);
+
+ BOOST_STATIC_CONSTANT(bool, value =
+ (::boost::type_traits::ice_and<
+ sizeof(is_class_tester<T>(0)) == sizeof(::boost::type_traits::yes_type),
+ ::boost::type_traits::ice_not< ::boost::is_union<T>::value >::value
+ >::value)
+ );
+};
+
+#endif
+
+#else
+
+template <typename T>
+struct is_class_impl
+{
+# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ BOOST_STATIC_CONSTANT(bool, value =
+ (::boost::type_traits::ice_and<
+ ::boost::type_traits::ice_not< ::boost::is_union<T>::value >::value,
+ ::boost::type_traits::ice_not< ::boost::is_scalar<T>::value >::value,
+ ::boost::type_traits::ice_not< ::boost::is_array<T>::value >::value,
+ ::boost::type_traits::ice_not< ::boost::is_reference<T>::value>::value,
+ ::boost::type_traits::ice_not< ::boost::is_void<T>::value >::value,
+ ::boost::type_traits::ice_not< ::boost::is_function<T>::value >::value
+ >::value));
+# else
+ BOOST_STATIC_CONSTANT(bool, value =
+ (::boost::type_traits::ice_and<
+ ::boost::type_traits::ice_not< ::boost::is_union<T>::value >::value,
+ ::boost::type_traits::ice_not< ::boost::is_scalar<T>::value >::value,
+ ::boost::type_traits::ice_not< ::boost::is_array<T>::value >::value,
+ ::boost::type_traits::ice_not< ::boost::is_reference<T>::value>::value,
+ ::boost::type_traits::ice_not< ::boost::is_void<T>::value >::value
+ >::value));
+# endif
+};
+
+# endif // BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION
+
+} // namespace detail
+
+# ifdef __EDG_VERSION__
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(
+ is_class,T, detail::is_class_impl<typename boost::remove_cv<T>::type>::value)
+# else
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_class,T,::boost::detail::is_class_impl<T>::value)
+# endif
+
+} // namespace boost
+
+#include <boost/type_traits/detail/bool_trait_undef.hpp>
+
+#endif // BOOST_TT_IS_CLASS_HPP_INCLUDED
diff --git a/boost/boost/type_traits/is_compound.hpp b/boost/boost/type_traits/is_compound.hpp
new file mode 100644
index 00000000000..01c38a7269f
--- /dev/null
+++ b/boost/boost/type_traits/is_compound.hpp
@@ -0,0 +1,40 @@
+
+// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_IS_COMPOUND_HPP_INCLUDED
+#define BOOST_TT_IS_COMPOUND_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/type_traits/is_fundamental.hpp>
+#include <boost/type_traits/detail/ice_not.hpp>
+
+// should be the last #include
+#include <boost/type_traits/detail/bool_trait_def.hpp>
+
+namespace boost {
+
+namespace detail {
+
+template <typename T>
+struct is_compound_impl
+{
+ BOOST_STATIC_CONSTANT(bool, value =
+ (::boost::type_traits::ice_not<
+ ::boost::is_fundamental<T>::value
+ >::value));
+};
+
+} // namespace detail
+
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_compound,T,::boost::detail::is_compound_impl<T>::value)
+
+} // namespace boost
+
+#include <boost/type_traits/detail/bool_trait_undef.hpp>
+
+#endif // BOOST_TT_IS_COMPOUND_HPP_INCLUDED
diff --git a/boost/boost/type_traits/is_const.hpp b/boost/boost/type_traits/is_const.hpp
new file mode 100644
index 00000000000..18b13f0103b
--- /dev/null
+++ b/boost/boost/type_traits/is_const.hpp
@@ -0,0 +1,142 @@
+
+// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes,
+// Howard Hinnant and John Maddock 2000.
+// (C) Copyright Mat Marcus, Jesse Jones and Adobe Systems Inc 2001
+
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+// Fixed is_pointer, is_reference, is_const, is_volatile, is_same,
+// is_member_pointer based on the Simulated Partial Specialization work
+// of Mat Marcus and Jesse Jones. See http://opensource.adobe.com or
+// http://groups.yahoo.com/group/boost/message/5441
+// Some workarounds in here use ideas suggested from "Generic<Programming>:
+// Mappings between Types and Values"
+// by Andrei Alexandrescu (see http://www.cuj.com/experts/1810/alexandr.html).
+
+
+#ifndef BOOST_TT_IS_CONST_HPP_INCLUDED
+#define BOOST_TT_IS_CONST_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+# include <boost/type_traits/detail/cv_traits_impl.hpp>
+# ifdef __GNUC__
+# include <boost/type_traits/is_reference.hpp>
+# endif
+# if BOOST_WORKAROUND(BOOST_MSVC, < 1400)
+# include <boost/type_traits/remove_bounds.hpp>
+# endif
+#else
+# include <boost/type_traits/is_reference.hpp>
+# include <boost/type_traits/is_array.hpp>
+# include <boost/type_traits/detail/yes_no_type.hpp>
+# include <boost/type_traits/detail/false_result.hpp>
+#endif
+
+// should be the last #include
+#include <boost/type_traits/detail/bool_trait_def.hpp>
+
+namespace boost {
+
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+//* is a type T declared const - is_const<T>
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1400)
+ BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_const,T,::boost::detail::cv_traits_imp<typename remove_bounds<T>::type*>::is_const)
+#else
+ BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_const,T,::boost::detail::cv_traits_imp<T*>::is_const)
+#endif
+BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_const,T&,false)
+
+#if defined(__BORLANDC__) && (__BORLANDC__ < 0x600)
+// these are illegal specialisations; cv-qualifies applied to
+// references have no effect according to [8.3.2p1],
+// C++ Builder requires them though as it treats cv-qualified
+// references as distinct types...
+BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_const,T& const,false)
+BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_const,T& volatile,false)
+BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_const,T& const volatile,false)
+#endif
+
+#if defined(__GNUC__) && (__GNUC__ < 3)
+// special case for gcc where illegally cv-qualified reference types can be
+// generated in some corner cases:
+BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_const,T const,!(::boost::is_reference<T>::value))
+BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_const,T volatile const,!(::boost::is_reference<T>::value))
+#endif
+
+#else
+
+namespace detail {
+
+using ::boost::type_traits::yes_type;
+using ::boost::type_traits::no_type;
+
+yes_type is_const_tester(const volatile void*);
+no_type is_const_tester(volatile void *);
+
+template <bool is_ref, bool array>
+struct is_const_helper
+ : ::boost::type_traits::false_result
+{
+};
+
+template <>
+struct is_const_helper<false,false>
+{
+ template <typename T> struct result_
+ {
+ static T* t;
+ BOOST_STATIC_CONSTANT(bool, value = (
+ sizeof(detail::yes_type) == sizeof(detail::is_const_tester(t))
+ ));
+ };
+};
+
+template <>
+struct is_const_helper<false,true>
+{
+ template <typename T> struct result_
+ {
+ static T t;
+ BOOST_STATIC_CONSTANT(bool, value = (
+ sizeof(detail::yes_type) == sizeof(detail::is_const_tester(&t))
+ ));
+ };
+};
+
+template <typename T>
+struct is_const_impl
+ : is_const_helper<
+ is_reference<T>::value
+ , is_array<T>::value
+ >::template result_<T>
+{
+};
+
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_const,void,false)
+#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_const,void const,true)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_const,void volatile,false)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_const,void const volatile,true)
+#endif
+
+} // namespace detail
+
+//* is a type T declared const - is_const<T>
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_const,T,::boost::detail::is_const_impl<T>::value)
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+} // namespace boost
+
+#include <boost/type_traits/detail/bool_trait_undef.hpp>
+
+#endif // BOOST_TT_IS_CONST_HPP_INCLUDED
+
diff --git a/boost/boost/type_traits/is_convertible.hpp b/boost/boost/type_traits/is_convertible.hpp
new file mode 100644
index 00000000000..54a11a14afc
--- /dev/null
+++ b/boost/boost/type_traits/is_convertible.hpp
@@ -0,0 +1,416 @@
+
+// Copyright 2000 John Maddock (john@johnmaddock.co.uk)
+// Copyright 2000 Jeremy Siek (jsiek@lsc.nd.edu)
+// Copyright 1999, 2000 Jaakko J„rvi (jaakko.jarvi@cs.utu.fi)
+//
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_IS_CONVERTIBLE_HPP_INCLUDED
+#define BOOST_TT_IS_CONVERTIBLE_HPP_INCLUDED
+
+#include <boost/type_traits/detail/yes_no_type.hpp>
+#include <boost/type_traits/config.hpp>
+#include <boost/type_traits/is_array.hpp>
+#include <boost/type_traits/add_reference.hpp>
+#include <boost/type_traits/ice.hpp>
+#include <boost/type_traits/is_arithmetic.hpp>
+#include <boost/type_traits/is_void.hpp>
+#ifndef BOOST_NO_IS_ABSTRACT
+#include <boost/type_traits/is_abstract.hpp>
+#endif
+
+#if defined(__MWERKS__)
+#include <boost/type_traits/is_function.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#endif
+
+// should be always the last #include directive
+#include <boost/type_traits/detail/bool_trait_def.hpp>
+
+namespace boost {
+
+// is one type convertable to another?
+//
+// there are multiple versions of the is_convertible
+// template, almost every compiler seems to require its
+// own version.
+//
+// Thanks to Andrei Alexandrescu for the original version of the
+// conversion detection technique!
+//
+
+namespace detail {
+
+// MS specific version:
+
+#if defined(BOOST_MSVC) && (BOOST_MSVC <= 1300)
+
+// This workaround is necessary to handle when From is void
+// which is normally taken care of by the partial specialization
+// of the is_convertible typename.
+using ::boost::type_traits::yes_type;
+using ::boost::type_traits::no_type;
+
+template< typename From >
+struct does_conversion_exist
+{
+ template< typename To > struct result_
+ {
+ static no_type BOOST_TT_DECL _m_check(...);
+ static yes_type BOOST_TT_DECL _m_check(To);
+ static From _m_from;
+ enum { value = sizeof( _m_check(_m_from) ) == sizeof(yes_type) };
+ };
+};
+
+template<>
+struct does_conversion_exist<void>
+{
+ template< typename To > struct result_
+ {
+ enum { value = ::boost::is_void<To>::value };
+ };
+};
+
+template <typename From, typename To>
+struct is_convertible_basic_impl
+ : does_conversion_exist<From>::template result_<To>
+{
+};
+
+#elif defined(__BORLANDC__) && (__BORLANDC__ < 0x560)
+//
+// special version for Borland compilers
+// this version breaks when used for some
+// UDT conversions:
+//
+template <typename From, typename To>
+struct is_convertible_impl
+{
+#pragma option push -w-8074
+ // This workaround for Borland breaks the EDG C++ frontend,
+ // so we only use it for Borland.
+ template <typename T> struct checker
+ {
+ static ::boost::type_traits::no_type BOOST_TT_DECL _m_check(...);
+ static ::boost::type_traits::yes_type BOOST_TT_DECL _m_check(T);
+ };
+
+ static From _m_from;
+ static bool const value = sizeof( checker<To>::_m_check(_m_from) )
+ == sizeof(::boost::type_traits::yes_type);
+#pragma option pop
+};
+
+#elif defined(__GNUC__) || defined(__BORLANDC__) && (__BORLANDC__ < 0x600)
+// special version for gcc compiler + recent Borland versions
+// note that this does not pass UDT's through (...)
+
+struct any_conversion
+{
+ template <typename T> any_conversion(const volatile T&);
+ template <typename T> any_conversion(T&);
+};
+
+template <typename T> struct checker
+{
+ static boost::type_traits::no_type _m_check(any_conversion ...);
+ static boost::type_traits::yes_type _m_check(T, int);
+};
+
+template <typename From, typename To>
+struct is_convertible_basic_impl
+{
+ static From _m_from;
+ static bool const value = sizeof( detail::checker<To>::_m_check(_m_from, 0) )
+ == sizeof(::boost::type_traits::yes_type);
+};
+
+#elif (defined(__EDG_VERSION__) && (__EDG_VERSION__ >= 245) && !defined(__ICL)) \
+ || defined(__IBMCPP__) || defined(__HP_aCC)
+//
+// This is *almost* an ideal world implementation as it doesn't rely
+// on undefined behaviour by passing UDT's through (...).
+// Unfortunately it doesn't quite pass all the tests for most compilers (sigh...)
+// Enable this for your compiler if is_convertible_test.cpp will compile it...
+//
+// Note we do not enable this for VC7.1, because even though it passes all the
+// type_traits tests it is known to cause problems when instantiation occurs
+// deep within the instantiation tree :-(
+//
+struct any_conversion
+{
+ template <typename T> any_conversion(const volatile T&);
+ // we need this constructor to catch references to functions
+ // (which can not be cv-qualified):
+ template <typename T> any_conversion(T&);
+};
+
+template <typename From, typename To>
+struct is_convertible_basic_impl
+{
+ static ::boost::type_traits::no_type BOOST_TT_DECL _m_check(any_conversion ...);
+ static ::boost::type_traits::yes_type BOOST_TT_DECL _m_check(To, int);
+ static From _m_from;
+
+ BOOST_STATIC_CONSTANT(bool, value =
+ sizeof( _m_check(_m_from, 0) ) == sizeof(::boost::type_traits::yes_type)
+ );
+};
+
+#elif defined(__DMC__)
+
+struct any_conversion
+{
+ template <typename T> any_conversion(const volatile T&);
+ // we need this constructor to catch references to functions
+ // (which can not be cv-qualified):
+ template <typename T> any_conversion(T&);
+};
+
+template <typename From, typename To>
+struct is_convertible_basic_impl
+{
+ // Using '...' doesn't always work on Digital Mars. This version seems to.
+ template <class T>
+ static ::boost::type_traits::no_type BOOST_TT_DECL _m_check(any_conversion, float, T);
+ static ::boost::type_traits::yes_type BOOST_TT_DECL _m_check(To, int, int);
+ static From _m_from;
+
+ // Static constants sometime cause the conversion of _m_from to To to be
+ // called. This doesn't happen with an enum.
+ enum { value =
+ sizeof( _m_check(_m_from, 0, 0) ) == sizeof(::boost::type_traits::yes_type)
+ };
+};
+
+#elif defined(__MWERKS__)
+//
+// CW works with the technique implemented above for EDG, except when From
+// is a function type (or a reference to such a type), in which case
+// any_conversion won't be accepted as a valid conversion. We detect this
+// exceptional situation and channel it through an alternative algorithm.
+//
+
+template <typename From, typename To,bool FromIsFunctionRef>
+struct is_convertible_basic_impl_aux;
+
+struct any_conversion
+{
+ template <typename T> any_conversion(const volatile T&);
+};
+
+template <typename From, typename To>
+struct is_convertible_basic_impl_aux<From,To,false /*FromIsFunctionRef*/>
+{
+ static ::boost::type_traits::no_type BOOST_TT_DECL _m_check(any_conversion ...);
+ static ::boost::type_traits::yes_type BOOST_TT_DECL _m_check(To, int);
+ static From _m_from;
+
+ BOOST_STATIC_CONSTANT(bool, value =
+ sizeof( _m_check(_m_from, 0) ) == sizeof(::boost::type_traits::yes_type)
+ );
+};
+
+template <typename From, typename To>
+struct is_convertible_basic_impl_aux<From,To,true /*FromIsFunctionRef*/>
+{
+ static ::boost::type_traits::no_type BOOST_TT_DECL _m_check(...);
+ static ::boost::type_traits::yes_type BOOST_TT_DECL _m_check(To);
+ static From _m_from;
+ BOOST_STATIC_CONSTANT(bool, value =
+ sizeof( _m_check(_m_from) ) == sizeof(::boost::type_traits::yes_type)
+ );
+};
+
+template <typename From, typename To>
+struct is_convertible_basic_impl:
+ is_convertible_basic_impl_aux<
+ From,To,
+ ::boost::is_function<typename ::boost::remove_reference<From>::type>::value
+ >
+{};
+
+#else
+
+//
+// This version seems to work pretty well for a wide spectrum of compilers,
+// however it does rely on undefined behaviour by passing UDT's through (...).
+//
+template <typename From, typename To>
+struct is_convertible_basic_impl
+{
+ static ::boost::type_traits::no_type BOOST_TT_DECL _m_check(...);
+ static ::boost::type_traits::yes_type BOOST_TT_DECL _m_check(To);
+ static From _m_from;
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable:4244)
+#endif
+ BOOST_STATIC_CONSTANT(bool, value =
+ sizeof( _m_check(_m_from) ) == sizeof(::boost::type_traits::yes_type)
+ );
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+};
+
+#endif // is_convertible_impl
+
+#if defined(__DMC__)
+// As before, a static constant sometimes causes errors on Digital Mars.
+template <typename From, typename To>
+struct is_convertible_impl
+{
+ typedef typename add_reference<From>::type ref_type;
+ enum { value =
+ (::boost::type_traits::ice_and<
+ ::boost::type_traits::ice_or<
+ ::boost::detail::is_convertible_basic_impl<ref_type,To>::value,
+ ::boost::is_void<To>::value
+ >::value,
+ ::boost::type_traits::ice_not<
+ ::boost::is_array<To>::value
+ >::value
+ >::value) };
+};
+#elif !defined(__BORLANDC__) || __BORLANDC__ > 0x551
+template <typename From, typename To>
+struct is_convertible_impl
+{
+ typedef typename add_reference<From>::type ref_type;
+ BOOST_STATIC_CONSTANT(bool, value =
+ (::boost::type_traits::ice_and<
+ ::boost::type_traits::ice_or<
+ ::boost::detail::is_convertible_basic_impl<ref_type,To>::value,
+ ::boost::is_void<To>::value
+ >::value,
+ ::boost::type_traits::ice_not<
+ ::boost::is_array<To>::value
+ >::value
+ >::value)
+ );
+};
+#endif
+
+template <bool trivial1, bool trivial2, bool abstract_target>
+struct is_convertible_impl_select
+{
+ template <class From, class To>
+ struct rebind
+ {
+ typedef is_convertible_impl<From, To> type;
+ };
+};
+
+template <>
+struct is_convertible_impl_select<true, true, false>
+{
+ template <class From, class To>
+ struct rebind
+ {
+ typedef true_type type;
+ };
+};
+
+template <>
+struct is_convertible_impl_select<false, false, true>
+{
+ template <class From, class To>
+ struct rebind
+ {
+ typedef false_type type;
+ };
+};
+
+template <>
+struct is_convertible_impl_select<true, false, true>
+{
+ template <class From, class To>
+ struct rebind
+ {
+ typedef false_type type;
+ };
+};
+
+template <typename From, typename To>
+struct is_convertible_impl_dispatch_base
+{
+#if !BOOST_WORKAROUND(__HP_aCC, < 60700)
+ typedef is_convertible_impl_select<
+ ::boost::is_arithmetic<From>::value,
+ ::boost::is_arithmetic<To>::value,
+#ifndef BOOST_NO_IS_ABSTRACT
+ ::boost::is_abstract<To>::value
+#else
+ false
+#endif
+ > selector;
+#else
+ typedef is_convertible_impl_select<false, false, false> selector;
+#endif
+ typedef typename selector::template rebind<From, To> isc_binder;
+ typedef typename isc_binder::type type;
+};
+
+template <typename From, typename To>
+struct is_convertible_impl_dispatch
+ : public is_convertible_impl_dispatch_base<From, To>::type
+{};
+
+//
+// Now add the full and partial specialisations
+// for void types, these are common to all the
+// implementation above:
+//
+#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
+# define TT_AUX_BOOL_CV_VOID_TRAIT_SPEC2_PART1(trait,spec1,spec2,value) \
+ BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC2(trait,spec1,spec2,value) \
+ BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC2(trait,spec1,spec2 const,value) \
+ BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC2(trait,spec1,spec2 volatile,value) \
+ BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC2(trait,spec1,spec2 const volatile,value) \
+ /**/
+
+# define TT_AUX_BOOL_CV_VOID_TRAIT_SPEC2(trait,spec1,spec2,value) \
+ TT_AUX_BOOL_CV_VOID_TRAIT_SPEC2_PART1(trait,spec1,spec2,value) \
+ TT_AUX_BOOL_CV_VOID_TRAIT_SPEC2_PART1(trait,spec1 const,spec2,value) \
+ TT_AUX_BOOL_CV_VOID_TRAIT_SPEC2_PART1(trait,spec1 volatile,spec2,value) \
+ TT_AUX_BOOL_CV_VOID_TRAIT_SPEC2_PART1(trait,spec1 const volatile,spec2,value) \
+ /**/
+
+ TT_AUX_BOOL_CV_VOID_TRAIT_SPEC2(is_convertible,void,void,true)
+
+# undef TT_AUX_BOOL_CV_VOID_TRAIT_SPEC2
+# undef TT_AUX_BOOL_CV_VOID_TRAIT_SPEC2_PART1
+
+#else
+ BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC2(is_convertible,void,void,true)
+#endif // BOOST_NO_CV_VOID_SPECIALIZATIONS
+
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1(typename To,is_convertible,void,To,false)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1(typename From,is_convertible,From,void,true)
+#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1(typename To,is_convertible,void const,To,false)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1(typename To,is_convertible,void volatile,To,false)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1(typename To,is_convertible,void const volatile,To,false)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1(typename From,is_convertible,From,void const,true)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1(typename From,is_convertible,From,void volatile,true)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1(typename From,is_convertible,From,void const volatile,true)
+#endif
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+} // namespace detail
+
+BOOST_TT_AUX_BOOL_TRAIT_DEF2(is_convertible,From,To,(::boost::detail::is_convertible_impl_dispatch<From,To>::value))
+
+} // namespace boost
+
+#include <boost/type_traits/detail/bool_trait_undef.hpp>
+
+#endif // BOOST_TT_IS_CONVERTIBLE_HPP_INCLUDED
+
diff --git a/boost/boost/type_traits/is_empty.hpp b/boost/boost/type_traits/is_empty.hpp
new file mode 100644
index 00000000000..c8eb7912da0
--- /dev/null
+++ b/boost/boost/type_traits/is_empty.hpp
@@ -0,0 +1,211 @@
+
+// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_IS_EMPTY_HPP_INCLUDED
+#define BOOST_TT_IS_EMPTY_HPP_INCLUDED
+
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/type_traits/detail/ice_or.hpp>
+#include <boost/type_traits/config.hpp>
+#include <boost/type_traits/intrinsics.hpp>
+
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+# include <boost/type_traits/remove_cv.hpp>
+# include <boost/type_traits/is_class.hpp>
+# include <boost/type_traits/add_reference.hpp>
+#else
+# include <boost/type_traits/is_reference.hpp>
+# include <boost/type_traits/is_pointer.hpp>
+# include <boost/type_traits/is_member_pointer.hpp>
+# include <boost/type_traits/is_array.hpp>
+# include <boost/type_traits/is_void.hpp>
+# include <boost/type_traits/detail/ice_and.hpp>
+# include <boost/type_traits/detail/ice_not.hpp>
+#endif
+
+// should be always the last #include directive
+#include <boost/type_traits/detail/bool_trait_def.hpp>
+
+namespace boost {
+
+namespace detail {
+
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+template <typename T>
+struct empty_helper_t1 : public T
+{
+ empty_helper_t1(); // hh compiler bug workaround
+ int i[256];
+private:
+ // suppress compiler warnings:
+ empty_helper_t1(const empty_helper_t1&);
+ empty_helper_t1& operator=(const empty_helper_t1&);
+};
+
+struct empty_helper_t2 { int i[256]; };
+
+#if !BOOST_WORKAROUND(__BORLANDC__, < 0x600)
+
+template <typename T, bool is_a_class = false>
+struct empty_helper
+{
+ BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+template <typename T>
+struct empty_helper<T, true>
+{
+ BOOST_STATIC_CONSTANT(
+ bool, value = (sizeof(empty_helper_t1<T>) == sizeof(empty_helper_t2))
+ );
+};
+
+template <typename T>
+struct is_empty_impl
+{
+ typedef typename remove_cv<T>::type cvt;
+ BOOST_STATIC_CONSTANT(
+ bool, value = (
+ ::boost::type_traits::ice_or<
+ ::boost::detail::empty_helper<cvt,::boost::is_class<T>::value>::value
+ , BOOST_IS_EMPTY(cvt)
+ >::value
+ ));
+};
+
+#else // __BORLANDC__
+
+template <typename T, bool is_a_class, bool convertible_to_int>
+struct empty_helper
+{
+ BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+template <typename T>
+struct empty_helper<T, true, false>
+{
+ BOOST_STATIC_CONSTANT(bool, value = (
+ sizeof(empty_helper_t1<T>) == sizeof(empty_helper_t2)
+ ));
+};
+
+template <typename T>
+struct is_empty_impl
+{
+ typedef typename remove_cv<T>::type cvt;
+ typedef typename add_reference<T>::type r_type;
+
+ BOOST_STATIC_CONSTANT(
+ bool, value = (
+ ::boost::type_traits::ice_or<
+ ::boost::detail::empty_helper<
+ cvt
+ , ::boost::is_class<T>::value
+ , ::boost::is_convertible< r_type,int>::value
+ >::value
+ , BOOST_IS_EMPTY(cvt)
+ >::value));
+};
+
+#endif // __BORLANDC__
+
+#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#ifdef BOOST_MSVC6_MEMBER_TEMPLATES
+
+template <typename T>
+struct empty_helper_t1 : public T
+{
+ empty_helper_t1();
+ int i[256];
+};
+
+struct empty_helper_t2 { int i[256]; };
+
+template <typename T>
+struct empty_helper_base
+{
+ enum { value = (sizeof(empty_helper_t1<T>) == sizeof(empty_helper_t2)) };
+};
+
+template <typename T>
+struct empty_helper_nonbase
+{
+ enum { value = false };
+};
+
+template <bool base>
+struct empty_helper_chooser
+{
+ template <typename T> struct result_
+ {
+ typedef empty_helper_nonbase<T> type;
+ };
+};
+
+template <>
+struct empty_helper_chooser<true>
+{
+ template <typename T> struct result_
+ {
+ typedef empty_helper_base<T> type;
+ };
+};
+
+template <typename T>
+struct is_empty_impl
+{
+ typedef ::boost::detail::empty_helper_chooser<
+ ::boost::type_traits::ice_and<
+ ::boost::type_traits::ice_not< ::boost::is_reference<T>::value >::value,
+ ::boost::type_traits::ice_not< ::boost::is_convertible<T,double>::value >::value,
+ ::boost::type_traits::ice_not< ::boost::is_pointer<T>::value >::value,
+ ::boost::type_traits::ice_not< ::boost::is_member_pointer<T>::value >::value,
+ ::boost::type_traits::ice_not< ::boost::is_array<T>::value >::value,
+ ::boost::type_traits::ice_not< ::boost::is_void<T>::value >::value,
+ ::boost::type_traits::ice_not<
+ ::boost::is_convertible<T,void const volatile*>::value
+ >::value
+ >::value > chooser;
+
+ typedef typename chooser::template result_<T> result;
+ typedef typename result::type eh_type;
+
+ BOOST_STATIC_CONSTANT(bool, value =
+ (::boost::type_traits::ice_or<eh_type::value, BOOST_IS_EMPTY(T)>::value));
+};
+
+#else
+
+template <typename T> struct is_empty_impl
+{
+ BOOST_STATIC_CONSTANT(bool, value = BOOST_IS_EMPTY(T));
+};
+
+#endif // BOOST_MSVC6_MEMBER_TEMPLATES
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+// these help when the compiler has no partial specialization support:
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_empty,void,false)
+#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_empty,void const,false)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_empty,void volatile,false)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_empty,void const volatile,false)
+#endif
+
+} // namespace detail
+
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_empty,T,::boost::detail::is_empty_impl<T>::value)
+
+} // namespace boost
+
+#include <boost/type_traits/detail/bool_trait_undef.hpp>
+
+#endif // BOOST_TT_IS_EMPTY_HPP_INCLUDED
+
diff --git a/boost/boost/type_traits/is_enum.hpp b/boost/boost/type_traits/is_enum.hpp
new file mode 100644
index 00000000000..c913975aa99
--- /dev/null
+++ b/boost/boost/type_traits/is_enum.hpp
@@ -0,0 +1,180 @@
+
+// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard
+// Hinnant & John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+
+#ifndef BOOST_TT_IS_ENUM_HPP_INCLUDED
+#define BOOST_TT_IS_ENUM_HPP_INCLUDED
+
+#include <boost/type_traits/add_reference.hpp>
+#include <boost/type_traits/is_arithmetic.hpp>
+#include <boost/type_traits/is_reference.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/type_traits/is_array.hpp>
+#ifdef __GNUC__
+#include <boost/type_traits/is_function.hpp>
+#endif
+#include <boost/type_traits/config.hpp>
+#if defined(BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION)
+# include <boost/type_traits/is_class.hpp>
+# include <boost/type_traits/is_union.hpp>
+#endif
+
+
+// should be the last #include
+#include <boost/type_traits/detail/bool_trait_def.hpp>
+
+namespace boost {
+
+#if !(defined(__BORLANDC__) && (__BORLANDC__ <= 0x551))
+
+namespace detail {
+
+#if defined(BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION)
+
+template <typename T>
+struct is_class_or_union
+{
+ BOOST_STATIC_CONSTANT(bool, value =
+ (::boost::type_traits::ice_or<
+ ::boost::is_class<T>::value
+ , ::boost::is_union<T>::value
+ >::value));
+};
+
+#else
+
+template <typename T>
+struct is_class_or_union
+{
+# if BOOST_WORKAROUND(BOOST_MSVC, < 1300) || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x581))// we simply can't detect it this way.
+ BOOST_STATIC_CONSTANT(bool, value = false);
+# else
+ template <class U> static ::boost::type_traits::yes_type is_class_or_union_tester(void(U::*)(void));
+
+# if BOOST_WORKAROUND(BOOST_MSVC, == 1300) \
+ || BOOST_WORKAROUND(__MWERKS__, <= 0x3000) // no SFINAE
+ static ::boost::type_traits::no_type is_class_or_union_tester(...);
+ BOOST_STATIC_CONSTANT(
+ bool, value = sizeof(is_class_or_union_tester(0)) == sizeof(::boost::type_traits::yes_type));
+# else
+ template <class U>
+ static ::boost::type_traits::no_type is_class_or_union_tester(...);
+ BOOST_STATIC_CONSTANT(
+ bool, value = sizeof(is_class_or_union_tester<T>(0)) == sizeof(::boost::type_traits::yes_type));
+# endif
+# endif
+};
+#endif
+
+struct int_convertible
+{
+ int_convertible(int);
+};
+
+// Don't evaluate convertibility to int_convertible unless the type
+// is non-arithmetic. This suppresses warnings with GCC.
+template <bool is_typename_arithmetic_or_reference = true>
+struct is_enum_helper
+{
+ template <typename T> struct type
+ {
+ BOOST_STATIC_CONSTANT(bool, value = false);
+ };
+};
+
+template <>
+struct is_enum_helper<false>
+{
+ template <typename T> struct type
+ : ::boost::is_convertible<typename boost::add_reference<T>::type,::boost::detail::int_convertible>
+ {
+ };
+};
+
+template <typename T> struct is_enum_impl
+{
+ //typedef ::boost::add_reference<T> ar_t;
+ //typedef typename ar_t::type r_type;
+
+#if defined(__GNUC__)
+
+#ifdef BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION
+
+ // We MUST check for is_class_or_union on conforming compilers in
+ // order to correctly deduce that noncopyable types are not enums
+ // (dwa 2002/04/15)...
+ BOOST_STATIC_CONSTANT(bool, selector =
+ (::boost::type_traits::ice_or<
+ ::boost::is_arithmetic<T>::value
+ , ::boost::is_reference<T>::value
+ , ::boost::is_function<T>::value
+ , is_class_or_union<T>::value
+ , is_array<T>::value
+ >::value));
+#else
+ // ...however, not checking is_class_or_union on non-conforming
+ // compilers prevents a dependency recursion.
+ BOOST_STATIC_CONSTANT(bool, selector =
+ (::boost::type_traits::ice_or<
+ ::boost::is_arithmetic<T>::value
+ , ::boost::is_reference<T>::value
+ , ::boost::is_function<T>::value
+ , is_array<T>::value
+ >::value));
+#endif // BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION
+
+#else // !defined(__GNUC__):
+
+ BOOST_STATIC_CONSTANT(bool, selector =
+ (::boost::type_traits::ice_or<
+ ::boost::is_arithmetic<T>::value
+ , ::boost::is_reference<T>::value
+ , is_class_or_union<T>::value
+ , is_array<T>::value
+ >::value));
+
+#endif
+
+#if BOOST_WORKAROUND(__BORLANDC__, < 0x600)
+ typedef ::boost::detail::is_enum_helper<
+ ::boost::detail::is_enum_impl<T>::selector
+ > se_t;
+#else
+ typedef ::boost::detail::is_enum_helper<selector> se_t;
+#endif
+
+ typedef typename se_t::template type<T> helper;
+ BOOST_STATIC_CONSTANT(bool, value = helper::value);
+};
+
+// these help on compilers with no partial specialization support:
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_enum,void,false)
+#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_enum,void const,false)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_enum,void volatile,false)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_enum,void const volatile,false)
+#endif
+
+} // namespace detail
+
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_enum,T,::boost::detail::is_enum_impl<T>::value)
+
+#else // __BORLANDC__
+//
+// buggy is_convertible prevents working
+// implementation of is_enum:
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_enum,T,false)
+
+#endif
+
+} // namespace boost
+
+#include <boost/type_traits/detail/bool_trait_undef.hpp>
+
+#endif // BOOST_TT_IS_ENUM_HPP_INCLUDED
diff --git a/boost/boost/type_traits/is_float.hpp b/boost/boost/type_traits/is_float.hpp
new file mode 100644
index 00000000000..25d16f18003
--- /dev/null
+++ b/boost/boost/type_traits/is_float.hpp
@@ -0,0 +1,27 @@
+
+// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TYPE_TRAITS_IS_FLOAT_HPP_INCLUDED
+#define BOOST_TYPE_TRAITS_IS_FLOAT_HPP_INCLUDED
+
+// should be the last #include
+#include <boost/type_traits/detail/bool_trait_def.hpp>
+
+namespace boost {
+
+//* is a type T a floating-point type described in the standard (3.9.1p8)
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_float,T,false)
+BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_float,float,true)
+BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_float,double,true)
+BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_float,long double,true)
+
+} // namespace boost
+
+#include <boost/type_traits/detail/bool_trait_undef.hpp>
+
+#endif // BOOST_TYPE_TRAITS_IS_FLOAT_HPP_INCLUDED
diff --git a/boost/boost/type_traits/is_floating_point.hpp b/boost/boost/type_traits/is_floating_point.hpp
new file mode 100644
index 00000000000..2224453054f
--- /dev/null
+++ b/boost/boost/type_traits/is_floating_point.hpp
@@ -0,0 +1,27 @@
+
+// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000-2005.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TYPE_TRAITS_IS_FLOATING_HPP_INCLUDED
+#define BOOST_TYPE_TRAITS_IS_FLOATING_HPP_INCLUDED
+
+// should be the last #include
+#include <boost/type_traits/detail/bool_trait_def.hpp>
+
+namespace boost {
+
+//* is a type T a floating-point type described in the standard (3.9.1p8)
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_floating_point,T,false)
+BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_floating_point,float,true)
+BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_floating_point,double,true)
+BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_floating_point,long double,true)
+
+} // namespace boost
+
+#include <boost/type_traits/detail/bool_trait_undef.hpp>
+
+#endif // BOOST_TYPE_TRAITS_IS_FLOAT_HPP_INCLUDED
diff --git a/boost/boost/type_traits/is_function.hpp b/boost/boost/type_traits/is_function.hpp
new file mode 100644
index 00000000000..8fd2c9eead4
--- /dev/null
+++ b/boost/boost/type_traits/is_function.hpp
@@ -0,0 +1,88 @@
+
+// Copyright 2000 John Maddock (john@johnmaddock.co.uk)
+// Copyright 2002 Aleksey Gurtovoy (agurtovoy@meta-comm.com)
+//
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_IS_FUNCTION_HPP_INCLUDED
+#define BOOST_TT_IS_FUNCTION_HPP_INCLUDED
+
+#include <boost/type_traits/is_reference.hpp>
+#include <boost/type_traits/detail/false_result.hpp>
+#include <boost/config.hpp>
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_TT_TEST_MS_FUNC_SIGS)
+# include <boost/type_traits/detail/is_function_ptr_helper.hpp>
+#else
+# include <boost/type_traits/detail/is_function_ptr_tester.hpp>
+# include <boost/type_traits/detail/yes_no_type.hpp>
+#endif
+
+// should be the last #include
+#include <boost/type_traits/detail/bool_trait_def.hpp>
+
+// is a type a function?
+// Please note that this implementation is unnecessarily complex:
+// we could just use !is_convertible<T*, const volatile void*>::value,
+// except that some compilers erroneously allow conversions from
+// function pointers to void*.
+
+namespace boost {
+namespace detail {
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_TT_TEST_MS_FUNC_SIGS)
+template<bool is_ref = true>
+struct is_function_chooser
+ : ::boost::type_traits::false_result
+{
+};
+
+template <>
+struct is_function_chooser<false>
+{
+ template< typename T > struct result_
+ : ::boost::type_traits::is_function_ptr_helper<T*>
+ {
+ };
+};
+
+template <typename T>
+struct is_function_impl
+ : is_function_chooser< ::boost::is_reference<T>::value >
+ ::BOOST_NESTED_TEMPLATE result_<T>
+{
+};
+
+#else
+
+template <typename T>
+struct is_function_impl
+{
+ static T* t;
+ BOOST_STATIC_CONSTANT(
+ bool, value = sizeof(::boost::type_traits::is_function_ptr_tester(t))
+ == sizeof(::boost::type_traits::yes_type)
+ );
+};
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+template <typename T>
+struct is_function_impl<T&> : public false_type
+{};
+#endif
+
+#endif
+
+} // namespace detail
+
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_function,T,::boost::detail::is_function_impl<T>::value)
+
+} // namespace boost
+
+#include <boost/type_traits/detail/bool_trait_undef.hpp>
+
+#endif // BOOST_TT_IS_FUNCTION_HPP_INCLUDED
diff --git a/boost/boost/type_traits/is_fundamental.hpp b/boost/boost/type_traits/is_fundamental.hpp
new file mode 100644
index 00000000000..e163ba973c9
--- /dev/null
+++ b/boost/boost/type_traits/is_fundamental.hpp
@@ -0,0 +1,41 @@
+
+// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_IS_FUNDAMENTAL_HPP_INCLUDED
+#define BOOST_TT_IS_FUNDAMENTAL_HPP_INCLUDED
+
+#include <boost/type_traits/is_arithmetic.hpp>
+#include <boost/type_traits/is_void.hpp>
+#include <boost/type_traits/detail/ice_or.hpp>
+
+// should be the last #include
+#include <boost/type_traits/detail/bool_trait_def.hpp>
+
+namespace boost {
+
+namespace detail {
+
+template <typename T>
+struct is_fundamental_impl
+ : ::boost::type_traits::ice_or<
+ ::boost::is_arithmetic<T>::value
+ , ::boost::is_void<T>::value
+ >
+{
+};
+
+} // namespace detail
+
+//* is a type T a fundamental type described in the standard (3.9.1)
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_fundamental,T,::boost::detail::is_fundamental_impl<T>::value)
+
+} // namespace boost
+
+#include <boost/type_traits/detail/bool_trait_undef.hpp>
+
+#endif // BOOST_TT_IS_FUNDAMENTAL_HPP_INCLUDED
diff --git a/boost/boost/type_traits/is_integral.hpp b/boost/boost/type_traits/is_integral.hpp
new file mode 100644
index 00000000000..b6ca6c73c8b
--- /dev/null
+++ b/boost/boost/type_traits/is_integral.hpp
@@ -0,0 +1,71 @@
+
+// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_IS_INTEGRAL_HPP_INCLUDED
+#define BOOST_TT_IS_INTEGRAL_HPP_INCLUDED
+
+#include <boost/config.hpp>
+
+// should be the last #include
+#include <boost/type_traits/detail/bool_trait_def.hpp>
+
+namespace boost {
+
+//* is a type T an [cv-qualified-] integral type described in the standard (3.9.1p3)
+// as an extention we include long long, as this is likely to be added to the
+// standard at a later date
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_integral,T,false)
+
+BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,unsigned char,true)
+BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,unsigned short,true)
+BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,unsigned int,true)
+BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,unsigned long,true)
+
+BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,signed char,true)
+BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,signed short,true)
+BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,signed int,true)
+BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,signed long,true)
+
+BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,bool,true)
+BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,char,true)
+
+#ifndef BOOST_NO_INTRINSIC_WCHAR_T
+// If the following line fails to compile and you're using the Intel
+// compiler, see http://lists.boost.org/MailArchives/boost-users/msg06567.php,
+// and define BOOST_NO_INTRINSIC_WCHAR_T on the command line.
+BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,wchar_t,true)
+#endif
+
+#if (defined(BOOST_MSVC) && (BOOST_MSVC < 1300)) \
+ || (defined(BOOST_INTEL_CXX_VERSION) && defined(_MSC_VER) && (BOOST_INTEL_CXX_VERSION <= 600)) \
+ || (defined(__BORLANDC__) && (__BORLANDC__ == 0x600) && (_MSC_VER < 1300))
+BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,unsigned __int8,true)
+BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,__int8,true)
+BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,unsigned __int16,true)
+BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,__int16,true)
+BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,unsigned __int32,true)
+BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,__int32,true)
+#ifdef __BORLANDC__
+BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,unsigned __int64,true)
+BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,__int64,true)
+#endif
+#endif
+
+# if defined(BOOST_HAS_LONG_LONG)
+BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral, ::boost::ulong_long_type,true)
+BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral, ::boost::long_long_type,true)
+#elif defined(BOOST_HAS_MS_INT64)
+BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,unsigned __int64,true)
+BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,__int64,true)
+#endif
+
+} // namespace boost
+
+#include <boost/type_traits/detail/bool_trait_undef.hpp>
+
+#endif // BOOST_TT_IS_INTEGRAL_HPP_INCLUDED
diff --git a/boost/boost/type_traits/is_member_function_pointer.hpp b/boost/boost/type_traits/is_member_function_pointer.hpp
new file mode 100644
index 00000000000..edfc5ad5424
--- /dev/null
+++ b/boost/boost/type_traits/is_member_function_pointer.hpp
@@ -0,0 +1,126 @@
+
+// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard
+// Hinnant & John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+
+#ifndef BOOST_TT_IS_MEMBER_FUNCTION_POINTER_HPP_INCLUDED
+#define BOOST_TT_IS_MEMBER_FUNCTION_POINTER_HPP_INCLUDED
+
+#include <boost/type_traits/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
+ && !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && !defined(BOOST_TT_TEST_MS_FUNC_SIGS)
+ //
+ // Note: we use the "workaround" version for MSVC because it works for
+ // __stdcall etc function types, where as the partial specialisation
+ // version does not do so.
+ //
+# include <boost/type_traits/detail/is_mem_fun_pointer_impl.hpp>
+#else
+# include <boost/type_traits/is_reference.hpp>
+# include <boost/type_traits/is_array.hpp>
+# include <boost/type_traits/detail/yes_no_type.hpp>
+# include <boost/type_traits/detail/false_result.hpp>
+# include <boost/type_traits/detail/ice_or.hpp>
+# include <boost/type_traits/detail/is_mem_fun_pointer_tester.hpp>
+#endif
+
+// should be the last #include
+#include <boost/type_traits/detail/bool_trait_def.hpp>
+
+namespace boost {
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && !defined(BOOST_TT_TEST_MS_FUNC_SIGS)
+
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(
+ is_member_function_pointer
+ , T
+ , ::boost::type_traits::is_mem_fun_pointer_impl<T>::value
+ )
+
+#else
+
+namespace detail {
+
+#ifndef __BORLANDC__
+
+template <bool>
+struct is_mem_fun_pointer_select
+ : ::boost::type_traits::false_result
+{
+};
+
+template <>
+struct is_mem_fun_pointer_select<false>
+{
+ template <typename T> struct result_
+ {
+ static T* make_t;
+ typedef result_<T> self_type;
+
+ BOOST_STATIC_CONSTANT(
+ bool, value = (
+ 1 == sizeof(::boost::type_traits::is_mem_fun_pointer_tester(self_type::make_t))
+ ));
+ };
+};
+
+template <typename T>
+struct is_member_function_pointer_impl
+ : is_mem_fun_pointer_select<
+ ::boost::type_traits::ice_or<
+ ::boost::is_reference<T>::value
+ , ::boost::is_array<T>::value
+ >::value
+ >::template result_<T>
+{
+};
+
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+template <typename T>
+struct is_member_function_pointer_impl<T&> : public false_type{};
+#endif
+
+#else // Borland C++
+
+template <typename T>
+struct is_member_function_pointer_impl
+{
+ static T* m_t;
+ BOOST_STATIC_CONSTANT(
+ bool, value =
+ (1 == sizeof(type_traits::is_mem_fun_pointer_tester(m_t))) );
+};
+
+template <typename T>
+struct is_member_function_pointer_impl<T&>
+{
+ BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+#endif
+
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_member_function_pointer,void,false)
+#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_member_function_pointer,void const,false)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_member_function_pointer,void volatile,false)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_member_function_pointer,void const volatile,false)
+#endif
+
+} // namespace detail
+
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_member_function_pointer,T,::boost::detail::is_member_function_pointer_impl<T>::value)
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+} // namespace boost
+
+#include <boost/type_traits/detail/bool_trait_undef.hpp>
+
+#endif // BOOST_TT_IS_MEMBER_FUNCTION_POINTER_HPP_INCLUDED
diff --git a/boost/boost/type_traits/is_member_object_pointer.hpp b/boost/boost/type_traits/is_member_object_pointer.hpp
new file mode 100644
index 00000000000..66b76c90b37
--- /dev/null
+++ b/boost/boost/type_traits/is_member_object_pointer.hpp
@@ -0,0 +1,46 @@
+
+// (C) Copyright John Maddock 2005.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+
+#ifndef BOOST_TT_IS_MEMBER_OBJECT_POINTER_HPP_INCLUDED
+#define BOOST_TT_IS_MEMBER_OBJECT_POINTER_HPP_INCLUDED
+
+#include <boost/type_traits/config.hpp>
+#include <boost/type_traits/is_member_pointer.hpp>
+#include <boost/type_traits/is_member_function_pointer.hpp>
+#include <boost/type_traits/detail/ice_and.hpp>
+#include <boost/type_traits/detail/ice_not.hpp>
+
+// should be the last #include
+#include <boost/type_traits/detail/bool_trait_def.hpp>
+
+namespace boost {
+
+namespace detail{
+
+template <typename T>
+struct is_member_object_pointer_impl
+{
+ BOOST_STATIC_CONSTANT(
+ bool, value = (::boost::type_traits::ice_and<
+ ::boost::is_member_pointer<T>::value,
+ ::boost::type_traits::ice_not<
+ ::boost::is_member_function_pointer<T>::value
+ >::value
+ >::value ));
+};
+
+} // namespace detail
+
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_member_object_pointer,T,::boost::detail::is_member_object_pointer_impl<T>::value)
+
+} // namespace boost
+
+#include <boost/type_traits/detail/bool_trait_undef.hpp>
+
+#endif // BOOST_TT_IS_MEMBER_FUNCTION_POINTER_HPP_INCLUDED
diff --git a/boost/boost/type_traits/is_member_pointer.hpp b/boost/boost/type_traits/is_member_pointer.hpp
new file mode 100644
index 00000000000..73300d31515
--- /dev/null
+++ b/boost/boost/type_traits/is_member_pointer.hpp
@@ -0,0 +1,108 @@
+
+// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes,
+// Howard Hinnant and John Maddock 2000.
+// (C) Copyright Mat Marcus, Jesse Jones and Adobe Systems Inc 2001
+
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+// Fixed is_pointer, is_reference, is_const, is_volatile, is_same,
+// is_member_pointer based on the Simulated Partial Specialization work
+// of Mat Marcus and Jesse Jones. See http://opensource.adobe.com or
+// http://groups.yahoo.com/group/boost/message/5441
+// Some workarounds in here use ideas suggested from "Generic<Programming>:
+// Mappings between Types and Values"
+// by Andrei Alexandrescu (see http://www.cuj.com/experts/1810/alexandr.html).
+
+
+#ifndef BOOST_TT_IS_MEMBER_POINTER_HPP_INCLUDED
+#define BOOST_TT_IS_MEMBER_POINTER_HPP_INCLUDED
+
+#include <boost/type_traits/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !BOOST_WORKAROUND(__BORLANDC__, < 0x600)
+# include <boost/type_traits/is_member_function_pointer.hpp>
+#else
+# include <boost/type_traits/is_reference.hpp>
+# include <boost/type_traits/is_array.hpp>
+# include <boost/type_traits/detail/is_mem_fun_pointer_tester.hpp>
+# include <boost/type_traits/detail/yes_no_type.hpp>
+# include <boost/type_traits/detail/false_result.hpp>
+# include <boost/type_traits/detail/ice_or.hpp>
+#endif
+
+// should be the last #include
+#include <boost/type_traits/detail/bool_trait_def.hpp>
+
+namespace boost {
+
+#if BOOST_WORKAROUND(__BORLANDC__, < 0x600)
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_member_pointer,T,false)
+BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,typename U,is_member_pointer,U T::*,true)
+
+#elif !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_member_pointer,T,::boost::is_member_function_pointer<T>::value)
+BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,typename U,is_member_pointer,U T::*,true)
+
+#else // no partial template specialization
+
+namespace detail {
+
+template <typename R, typename T>
+::boost::type_traits::yes_type BOOST_TT_DECL is_member_pointer_tester(R T::*const volatile*);
+::boost::type_traits::no_type BOOST_TT_DECL is_member_pointer_tester(...);
+
+template <bool>
+struct is_member_pointer_select
+ : ::boost::type_traits::false_result
+{
+};
+
+template <>
+struct is_member_pointer_select<false>
+{
+ template <typename T> struct result_
+ {
+ static T* make_t();
+ BOOST_STATIC_CONSTANT(
+ bool, value =
+ (::boost::type_traits::ice_or<
+ (1 == sizeof(::boost::type_traits::is_mem_fun_pointer_tester(make_t()))),
+ (1 == sizeof(is_member_pointer_tester(make_t())))
+ >::value) );
+ };
+};
+
+template <typename T>
+struct is_member_pointer_impl
+ : is_member_pointer_select<
+ ::boost::type_traits::ice_or<
+ ::boost::is_reference<T>::value
+ , ::boost::is_array<T>::value
+ >::value
+ >::template result_<T>
+{
+};
+
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_member_pointer,void,false)
+#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_member_pointer,void const,false)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_member_pointer,void volatile,false)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_member_pointer,void const volatile,false)
+#endif
+
+} // namespace detail
+
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_member_pointer,T,::boost::detail::is_member_pointer_impl<T>::value)
+
+#endif // __BORLANDC__
+
+} // namespace boost
+
+#include <boost/type_traits/detail/bool_trait_undef.hpp>
+
+#endif // BOOST_TT_IS_MEMBER_POINTER_HPP_INCLUDED
diff --git a/boost/boost/type_traits/is_object.hpp b/boost/boost/type_traits/is_object.hpp
new file mode 100644
index 00000000000..3decbf8d199
--- /dev/null
+++ b/boost/boost/type_traits/is_object.hpp
@@ -0,0 +1,53 @@
+
+// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_IS_OBJECT_HPP_INCLUDED
+#define BOOST_TT_IS_OBJECT_HPP_INCLUDED
+
+#include <boost/type_traits/is_reference.hpp>
+#include <boost/type_traits/is_void.hpp>
+#include <boost/type_traits/is_function.hpp>
+#include <boost/type_traits/detail/ice_and.hpp>
+#include <boost/type_traits/detail/ice_not.hpp>
+#include <boost/config.hpp>
+
+// should be the last #include
+#include <boost/type_traits/detail/bool_trait_def.hpp>
+
+namespace boost {
+
+namespace detail {
+
+template <typename T>
+struct is_object_impl
+{
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ BOOST_STATIC_CONSTANT(bool, value =
+ (::boost::type_traits::ice_and<
+ ::boost::type_traits::ice_not< ::boost::is_reference<T>::value>::value,
+ ::boost::type_traits::ice_not< ::boost::is_void<T>::value>::value,
+ ::boost::type_traits::ice_not< ::boost::is_function<T>::value>::value
+ >::value));
+#else
+ BOOST_STATIC_CONSTANT(bool, value =
+ (::boost::type_traits::ice_and<
+ ::boost::type_traits::ice_not< ::boost::is_reference<T>::value>::value,
+ ::boost::type_traits::ice_not< ::boost::is_void<T>::value>::value
+ >::value));
+#endif
+};
+
+} // namespace detail
+
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_object,T,::boost::detail::is_object_impl<T>::value)
+
+} // namespace boost
+
+#include <boost/type_traits/detail/bool_trait_undef.hpp>
+
+#endif // BOOST_TT_IS_OBJECT_HPP_INCLUDED
diff --git a/boost/boost/type_traits/is_pod.hpp b/boost/boost/type_traits/is_pod.hpp
new file mode 100644
index 00000000000..af2c3c4aeb0
--- /dev/null
+++ b/boost/boost/type_traits/is_pod.hpp
@@ -0,0 +1,135 @@
+
+// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_IS_POD_HPP_INCLUDED
+#define BOOST_TT_IS_POD_HPP_INCLUDED
+
+#include <boost/type_traits/config.hpp>
+#include <boost/type_traits/is_void.hpp>
+#include <boost/type_traits/is_scalar.hpp>
+#include <boost/type_traits/detail/ice_or.hpp>
+#include <boost/type_traits/intrinsics.hpp>
+
+#include <cstddef>
+
+// should be the last #include
+#include <boost/type_traits/detail/bool_trait_def.hpp>
+
+namespace boost {
+
+// forward declaration, needed by 'is_pod_array_helper' template below
+template< typename T > struct is_POD;
+
+namespace detail {
+
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+template <typename T> struct is_pod_impl
+{
+ BOOST_STATIC_CONSTANT(
+ bool, value =
+ (::boost::type_traits::ice_or<
+ ::boost::is_scalar<T>::value,
+ ::boost::is_void<T>::value,
+ BOOST_IS_POD(T)
+ >::value));
+};
+
+#if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)
+template <typename T, std::size_t sz>
+struct is_pod_impl<T[sz]>
+ : is_pod_impl<T>
+{
+};
+#endif
+
+#else
+
+template <bool is_array = false>
+struct is_pod_helper
+{
+ template <typename T> struct result_
+ {
+ BOOST_STATIC_CONSTANT(
+ bool, value =
+ (::boost::type_traits::ice_or<
+ ::boost::is_scalar<T>::value,
+ ::boost::is_void<T>::value,
+ BOOST_IS_POD(T)
+ >::value));
+ };
+};
+
+template <bool b>
+struct bool_to_yes_no_type
+{
+ typedef ::boost::type_traits::no_type type;
+};
+
+template <>
+struct bool_to_yes_no_type<true>
+{
+ typedef ::boost::type_traits::yes_type type;
+};
+
+template <typename ArrayType>
+struct is_pod_array_helper
+{
+ enum { is_pod = ::boost::is_POD<ArrayType>::value }; // MSVC workaround
+ typedef typename bool_to_yes_no_type<is_pod>::type type;
+ type instance() const;
+};
+
+template <typename T>
+is_pod_array_helper<T> is_POD_array(T*);
+
+template <>
+struct is_pod_helper<true>
+{
+ template <typename T> struct result_
+ {
+ static T& help();
+ BOOST_STATIC_CONSTANT(bool, value =
+ sizeof(is_POD_array(help()).instance()) == sizeof(::boost::type_traits::yes_type)
+ );
+ };
+};
+
+
+template <typename T> struct is_pod_impl
+{
+ BOOST_STATIC_CONSTANT(
+ bool, value = (
+ ::boost::detail::is_pod_helper<
+ ::boost::is_array<T>::value
+ >::template result_<T>::value
+ )
+ );
+};
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+// the following help compilers without partial specialization support:
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,void,true)
+
+#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,void const,true)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,void volatile,true)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,void const volatile,true)
+#endif
+
+} // namespace detail
+
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_POD,T,::boost::detail::is_pod_impl<T>::value)
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_pod,T,::boost::detail::is_pod_impl<T>::value)
+
+} // namespace boost
+
+#include <boost/type_traits/detail/bool_trait_undef.hpp>
+
+#endif // BOOST_TT_IS_POD_HPP_INCLUDED
diff --git a/boost/boost/type_traits/is_pointer.hpp b/boost/boost/type_traits/is_pointer.hpp
new file mode 100644
index 00000000000..8c155450bc8
--- /dev/null
+++ b/boost/boost/type_traits/is_pointer.hpp
@@ -0,0 +1,149 @@
+
+// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes,
+// Howard Hinnant and John Maddock 2000.
+// (C) Copyright Mat Marcus, Jesse Jones and Adobe Systems Inc 2001
+
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+// Fixed is_pointer, is_reference, is_const, is_volatile, is_same,
+// is_member_pointer based on the Simulated Partial Specialization work
+// of Mat Marcus and Jesse Jones. See http://opensource.adobe.com or
+// http://groups.yahoo.com/group/boost/message/5441
+// Some workarounds in here use ideas suggested from "Generic<Programming>:
+// Mappings between Types and Values"
+// by Andrei Alexandrescu (see http://www.cuj.com/experts/1810/alexandr.html).
+
+
+#ifndef BOOST_TT_IS_POINTER_HPP_INCLUDED
+#define BOOST_TT_IS_POINTER_HPP_INCLUDED
+
+#include <boost/type_traits/is_member_pointer.hpp>
+#include <boost/type_traits/detail/ice_and.hpp>
+#include <boost/type_traits/detail/ice_not.hpp>
+#include <boost/type_traits/config.hpp>
+
+#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+# include <boost/type_traits/is_reference.hpp>
+# include <boost/type_traits/is_array.hpp>
+# include <boost/type_traits/detail/is_function_ptr_tester.hpp>
+# include <boost/type_traits/detail/false_result.hpp>
+# include <boost/type_traits/detail/ice_or.hpp>
+#endif
+
+// should be the last #include
+#include <boost/type_traits/detail/bool_trait_def.hpp>
+
+namespace boost {
+
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace detail {
+
+template< typename T > struct is_pointer_helper
+{
+ BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+# define TT_AUX_BOOL_TRAIT_HELPER_PARTIAL_SPEC(helper,sp,result) \
+template< typename T > struct helper<sp> \
+{ \
+ BOOST_STATIC_CONSTANT(bool, value = result); \
+}; \
+/**/
+
+TT_AUX_BOOL_TRAIT_HELPER_PARTIAL_SPEC(is_pointer_helper,T*,true)
+TT_AUX_BOOL_TRAIT_HELPER_PARTIAL_SPEC(is_pointer_helper,T* const,true)
+TT_AUX_BOOL_TRAIT_HELPER_PARTIAL_SPEC(is_pointer_helper,T* volatile,true)
+TT_AUX_BOOL_TRAIT_HELPER_PARTIAL_SPEC(is_pointer_helper,T* const volatile,true)
+
+# undef TT_AUX_BOOL_TRAIT_HELPER_PARTIAL_SPEC
+
+template< typename T >
+struct is_pointer_impl
+{
+ BOOST_STATIC_CONSTANT(bool, value =
+ (::boost::type_traits::ice_and<
+ ::boost::detail::is_pointer_helper<T>::value
+ , ::boost::type_traits::ice_not<
+ ::boost::is_member_pointer<T>::value
+ >::value
+ >::value)
+ );
+};
+
+} // namespace detail
+
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_pointer,T,::boost::detail::is_pointer_impl<T>::value)
+
+#if defined(__BORLANDC__) && !defined(__COMO__) && (__BORLANDC__ < 0x600)
+BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_pointer,T&,false)
+BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_pointer,T& const,false)
+BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_pointer,T& volatile,false)
+BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_pointer,T& const volatile,false)
+#endif
+
+#else // no partial template specialization
+
+namespace detail {
+
+struct pointer_helper
+{
+ pointer_helper(const volatile void*);
+};
+
+yes_type BOOST_TT_DECL is_pointer_tester(pointer_helper);
+no_type BOOST_TT_DECL is_pointer_tester(...);
+
+template <bool>
+struct is_pointer_select
+ : ::boost::type_traits::false_result
+{
+};
+
+template <>
+struct is_pointer_select<false>
+{
+ template <typename T> struct result_
+ {
+ static T& make_t();
+ BOOST_STATIC_CONSTANT(bool, value =
+ (::boost::type_traits::ice_or<
+ (1 == sizeof(is_pointer_tester(make_t()))),
+ (1 == sizeof(type_traits::is_function_ptr_tester(make_t())))
+ >::value));
+ };
+};
+
+template <typename T>
+struct is_pointer_impl
+ : is_pointer_select<
+ ::boost::type_traits::ice_or<
+ ::boost::is_reference<T>::value
+ , ::boost::is_array<T>::value
+ >::value
+ >::template result_<T>
+{
+};
+
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pointer,void,false)
+#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pointer,void const,false)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pointer,void volatile,false)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pointer,void const volatile,false)
+#endif
+
+} // namespace detail
+
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_pointer,T,::boost::detail::is_pointer_impl<T>::value)
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+} // namespace boost
+
+#include <boost/type_traits/detail/bool_trait_undef.hpp>
+
+#endif // BOOST_TT_IS_POINTER_HPP_INCLUDED
diff --git a/boost/boost/type_traits/is_polymorphic.hpp b/boost/boost/type_traits/is_polymorphic.hpp
new file mode 100644
index 00000000000..c3126224b59
--- /dev/null
+++ b/boost/boost/type_traits/is_polymorphic.hpp
@@ -0,0 +1,102 @@
+// (C) Copyright John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_IS_POLYMORPHIC_HPP
+#define BOOST_TT_IS_POLYMORPHIC_HPP
+
+#include <boost/type_traits/is_class.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+// should be the last #include
+#include <boost/type_traits/detail/bool_trait_def.hpp>
+#include <boost/detail/workaround.hpp>
+
+namespace boost{
+namespace detail{
+
+template <class T>
+struct is_polymorphic_imp1
+{
+# if BOOST_WORKAROUND(__MWERKS__, <= 0x2407) // CWPro7 should return false always.
+ typedef char d1, (&d2)[2];
+# else
+ typedef typename remove_cv<T>::type ncvT;
+ struct d1 : public ncvT
+ {
+ d1();
+# if !defined(__GNUC__) // this raises warnings with some classes, and buys nothing with GCC
+ ~d1()throw();
+# endif
+ char padding[256];
+ private:
+ // keep some picky compilers happy:
+ d1(const d1&);
+ d1& operator=(const d1&);
+ };
+ struct d2 : public ncvT
+ {
+ d2();
+ virtual ~d2()throw();
+# if !defined(BOOST_MSVC) && !defined(__ICL)
+ // for some reason this messes up VC++ when T has virtual bases,
+ // probably likewise for compilers that use the same ABI:
+ struct unique{};
+ virtual void unique_name_to_boost5487629(unique*);
+# endif
+ char padding[256];
+ private:
+ // keep some picky compilers happy:
+ d2(const d2&);
+ d2& operator=(const d2&);
+ };
+# endif
+ BOOST_STATIC_CONSTANT(bool, value = (sizeof(d2) == sizeof(d1)));
+};
+
+template <class T>
+struct is_polymorphic_imp2
+{
+ BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+template <bool is_class>
+struct is_polymorphic_selector
+{
+ template <class T>
+ struct rebind
+ {
+ typedef is_polymorphic_imp2<T> type;
+ };
+};
+
+template <>
+struct is_polymorphic_selector<true>
+{
+ template <class T>
+ struct rebind
+ {
+ typedef is_polymorphic_imp1<T> type;
+ };
+};
+
+template <class T>
+struct is_polymorphic_imp
+{
+ typedef is_polymorphic_selector< ::boost::is_class<T>::value> selector;
+ typedef typename selector::template rebind<T> binder;
+ typedef typename binder::type imp_type;
+ BOOST_STATIC_CONSTANT(bool, value = imp_type::value);
+};
+
+} // namespace detail
+
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_polymorphic,T,::boost::detail::is_polymorphic_imp<T>::value)
+
+} // namespace boost
+
+#include <boost/type_traits/detail/bool_trait_undef.hpp>
+
+#endif
diff --git a/boost/boost/type_traits/is_reference.hpp b/boost/boost/type_traits/is_reference.hpp
new file mode 100644
index 00000000000..0eb0d4f7140
--- /dev/null
+++ b/boost/boost/type_traits/is_reference.hpp
@@ -0,0 +1,116 @@
+
+// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes,
+// Howard Hinnant and John Maddock 2000.
+// (C) Copyright Mat Marcus, Jesse Jones and Adobe Systems Inc 2001
+
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+// Fixed is_pointer, is_reference, is_const, is_volatile, is_same,
+// is_member_pointer based on the Simulated Partial Specialization work
+// of Mat Marcus and Jesse Jones. See http://opensource.adobe.com or
+// http://groups.yahoo.com/group/boost/message/5441
+// Some workarounds in here use ideas suggested from "Generic<Programming>:
+// Mappings between Types and Values"
+// by Andrei Alexandrescu (see http://www.cuj.com/experts/1810/alexandr.html).
+
+
+#ifndef BOOST_TT_IS_REFERENCE_HPP_INCLUDED
+#define BOOST_TT_IS_REFERENCE_HPP_INCLUDED
+
+#include <boost/type_traits/config.hpp>
+
+#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+# include <boost/type_traits/detail/yes_no_type.hpp>
+# include <boost/type_traits/detail/wrap.hpp>
+#endif
+
+// should be the last #include
+#include <boost/type_traits/detail/bool_trait_def.hpp>
+
+namespace boost {
+
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_reference,T,false)
+BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_reference,T&,true)
+
+#if defined(__BORLANDC__) && !defined(__COMO__) && (__BORLANDC__ < 0x600)
+// these are illegal specialisations; cv-qualifies applied to
+// references have no effect according to [8.3.2p1],
+// C++ Builder requires them though as it treats cv-qualified
+// references as distinct types...
+BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_reference,T& const,true)
+BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_reference,T& volatile,true)
+BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_reference,T& const volatile,true)
+#endif
+
+#if defined(__GNUC__) && (__GNUC__ < 3)
+// these allow us to work around illegally cv-qualified reference
+// types.
+BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_reference,T const ,::boost::is_reference<T>::value)
+BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_reference,T volatile ,::boost::is_reference<T>::value)
+BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_reference,T const volatile ,::boost::is_reference<T>::value)
+// However, the above specializations confuse gcc 2.96 unless we also
+// supply these specializations for array types
+BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,unsigned long N,is_reference,T[N],false)
+BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,unsigned long N,is_reference,const T[N],false)
+BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,unsigned long N,is_reference,volatile T[N],false)
+BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(typename T,unsigned long N,is_reference,const volatile T[N],false)
+#endif
+
+#else
+
+#ifdef BOOST_MSVC
+# pragma warning(push)
+# pragma warning(disable: 4181 4097)
+#endif
+
+namespace detail {
+
+using ::boost::type_traits::yes_type;
+using ::boost::type_traits::no_type;
+using ::boost::type_traits::wrap;
+
+template <class T> T&(* is_reference_helper1(wrap<T>) )(wrap<T>);
+char is_reference_helper1(...);
+
+template <class T> no_type is_reference_helper2(T&(*)(wrap<T>));
+yes_type is_reference_helper2(...);
+
+template <typename T>
+struct is_reference_impl
+{
+ BOOST_STATIC_CONSTANT(
+ bool, value = sizeof(
+ ::boost::detail::is_reference_helper2(
+ ::boost::detail::is_reference_helper1(::boost::type_traits::wrap<T>()))) == 1
+ );
+};
+
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_reference,void,false)
+#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_reference,void const,false)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_reference,void volatile,false)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_reference,void const volatile,false)
+#endif
+
+} // namespace detail
+
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_reference,T,::boost::detail::is_reference_impl<T>::value)
+
+#ifdef BOOST_MSVC
+# pragma warning(pop)
+#endif
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+} // namespace boost
+
+#include <boost/type_traits/detail/bool_trait_undef.hpp>
+
+#endif // BOOST_TT_IS_REFERENCE_HPP_INCLUDED
+
diff --git a/boost/boost/type_traits/is_same.hpp b/boost/boost/type_traits/is_same.hpp
new file mode 100644
index 00000000000..e0d1808b4d1
--- /dev/null
+++ b/boost/boost/type_traits/is_same.hpp
@@ -0,0 +1,103 @@
+
+// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes,
+// Howard Hinnant and John Maddock 2000.
+// (C) Copyright Mat Marcus, Jesse Jones and Adobe Systems Inc 2001
+
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+// Fixed is_pointer, is_reference, is_const, is_volatile, is_same,
+// is_member_pointer based on the Simulated Partial Specialization work
+// of Mat Marcus and Jesse Jones. See http://opensource.adobe.com or
+// http://groups.yahoo.com/group/boost/message/5441
+// Some workarounds in here use ideas suggested from "Generic<Programming>:
+// Mappings between Types and Values"
+// by Andrei Alexandrescu (see http://www.cuj.com/experts/1810/alexandr.html).
+
+
+#ifndef BOOST_TT_IS_SAME_HPP_INCLUDED
+#define BOOST_TT_IS_SAME_HPP_INCLUDED
+
+#include <boost/type_traits/config.hpp>
+#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#include <boost/type_traits/detail/yes_no_type.hpp>
+#include <boost/type_traits/detail/ice_and.hpp>
+#include <boost/type_traits/is_reference.hpp>
+#endif
+// should be the last #include
+#include <boost/type_traits/detail/bool_trait_def.hpp>
+
+namespace boost {
+
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+BOOST_TT_AUX_BOOL_TRAIT_DEF2(is_same,T,U,false)
+BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_1(typename T,is_same,T,T,true)
+#if BOOST_WORKAROUND(__BORLANDC__, < 0x600)
+// without this, Borland's compiler gives the wrong answer for
+// references to arrays:
+BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_1(typename T,is_same,T&,T&,true)
+#endif
+
+#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace detail {
+
+#ifdef BOOST_MSVC
+// the following VC6 specific implementation is *NOT* legal
+// C++, but has the advantage that it works for incomplete
+// types.
+
+template< typename T1 >
+struct is_same_part_1
+{
+ template<typename T2> struct part_2 { enum { value = false }; };
+ template<> struct part_2<T1> { enum { value = true }; };
+};
+
+template< typename T1, typename T2 >
+struct is_same_impl
+{
+ enum { value = detail::is_same_part_1<T1>::template part_2<T2>::value };
+};
+
+#else // generic "no-partial-specialization" version
+
+template <typename T>
+::boost::type_traits::yes_type
+BOOST_TT_DECL is_same_tester(T*, T*);
+
+::boost::type_traits::no_type
+BOOST_TT_DECL is_same_tester(...);
+
+template <typename T, typename U>
+struct is_same_impl
+{
+ static T t;
+ static U u;
+
+ BOOST_STATIC_CONSTANT(bool, value =
+ (::boost::type_traits::ice_and<
+ (sizeof(type_traits::yes_type) == sizeof(detail::is_same_tester(&t,&u))),
+ (::boost::is_reference<T>::value == ::boost::is_reference<U>::value),
+ (sizeof(T) == sizeof(U))
+ >::value));
+};
+
+#endif // BOOST_MSVC
+
+} // namespace detail
+
+BOOST_TT_AUX_BOOL_TRAIT_DEF2(is_same,T,U,(::boost::detail::is_same_impl<T,U>::value))
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+} // namespace boost
+
+#include <boost/type_traits/detail/bool_trait_undef.hpp>
+
+#endif // BOOST_TT_IS_SAME_HPP_INCLUDED
+
diff --git a/boost/boost/type_traits/is_scalar.hpp b/boost/boost/type_traits/is_scalar.hpp
new file mode 100644
index 00000000000..4af3def14c7
--- /dev/null
+++ b/boost/boost/type_traits/is_scalar.hpp
@@ -0,0 +1,55 @@
+
+// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_IS_SCALAR_HPP_INCLUDED
+#define BOOST_TT_IS_SCALAR_HPP_INCLUDED
+
+#include <boost/type_traits/is_arithmetic.hpp>
+#include <boost/type_traits/is_enum.hpp>
+#include <boost/type_traits/is_pointer.hpp>
+#include <boost/type_traits/is_member_pointer.hpp>
+#include <boost/type_traits/detail/ice_or.hpp>
+#include <boost/config.hpp>
+
+// should be the last #include
+#include <boost/type_traits/detail/bool_trait_def.hpp>
+
+namespace boost {
+
+namespace detail {
+
+template <typename T>
+struct is_scalar_impl
+{
+ BOOST_STATIC_CONSTANT(bool, value =
+ (::boost::type_traits::ice_or<
+ ::boost::is_arithmetic<T>::value,
+ ::boost::is_enum<T>::value,
+ ::boost::is_pointer<T>::value,
+ ::boost::is_member_pointer<T>::value
+ >::value));
+};
+
+// these specializations are only really needed for compilers
+// without partial specialization support:
+template <> struct is_scalar_impl<void>{ BOOST_STATIC_CONSTANT(bool, value = false ); };
+#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
+template <> struct is_scalar_impl<void const>{ BOOST_STATIC_CONSTANT(bool, value = false ); };
+template <> struct is_scalar_impl<void volatile>{ BOOST_STATIC_CONSTANT(bool, value = false ); };
+template <> struct is_scalar_impl<void const volatile>{ BOOST_STATIC_CONSTANT(bool, value = false ); };
+#endif
+
+} // namespace detail
+
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_scalar,T,::boost::detail::is_scalar_impl<T>::value)
+
+} // namespace boost
+
+#include <boost/type_traits/detail/bool_trait_undef.hpp>
+
+#endif // BOOST_TT_IS_SCALAR_HPP_INCLUDED
diff --git a/boost/boost/type_traits/is_signed.hpp b/boost/boost/type_traits/is_signed.hpp
new file mode 100644
index 00000000000..9c780b57181
--- /dev/null
+++ b/boost/boost/type_traits/is_signed.hpp
@@ -0,0 +1,117 @@
+
+// (C) Copyright John Maddock 2005.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+
+#ifndef BOOST_TT_IS_SIGNED_HPP_INCLUDED
+#define BOOST_TT_IS_SIGNED_HPP_INCLUDED
+
+#include <boost/type_traits/is_integral.hpp>
+#include <boost/type_traits/is_enum.hpp>
+#include <boost/type_traits/detail/ice_or.hpp>
+
+// should be the last #include
+#include <boost/type_traits/detail/bool_trait_def.hpp>
+
+namespace boost {
+
+namespace detail{
+
+#if !(defined(__EDG_VERSION__) && __EDG_VERSION__ <= 238)
+
+template <class T>
+struct is_signed_helper
+{
+ BOOST_STATIC_CONSTANT(bool, value = (static_cast<T>(-1) < 0));
+};
+
+template <bool integral_type>
+struct is_signed_select_helper
+{
+ template <class T>
+ struct rebind
+ {
+ typedef is_signed_helper<T> type;
+ };
+};
+
+template <>
+struct is_signed_select_helper<false>
+{
+ template <class T>
+ struct rebind
+ {
+ typedef false_type type;
+ };
+};
+
+template <class T>
+struct is_signed_imp
+{
+ typedef is_signed_select_helper<
+ ::boost::type_traits::ice_or<
+ ::boost::is_integral<T>::value,
+ ::boost::is_enum<T>::value>::value
+ > selector;
+ typedef typename selector::template rebind<T> binder;
+ typedef typename binder::type type;
+#if defined(BOOST_MSVC) && (BOOST_MSVC < 1300)
+ BOOST_STATIC_CONSTANT(bool, value = is_signed_imp<T>::type::value);
+#else
+ BOOST_STATIC_CONSTANT(bool, value = type::value);
+#endif
+};
+
+#else
+
+template <class T> struct is_signed_imp : public false_type{};
+template <> struct is_signed_imp<signed char> : public true_type{};
+template <> struct is_signed_imp<const signed char> : public true_type{};
+template <> struct is_signed_imp<volatile signed char> : public true_type{};
+template <> struct is_signed_imp<const volatile signed char> : public true_type{};
+template <> struct is_signed_imp<short> : public true_type{};
+template <> struct is_signed_imp<const short> : public true_type{};
+template <> struct is_signed_imp<volatile short> : public true_type{};
+template <> struct is_signed_imp<const volatile short> : public true_type{};
+template <> struct is_signed_imp<int> : public true_type{};
+template <> struct is_signed_imp<const int> : public true_type{};
+template <> struct is_signed_imp<volatile int> : public true_type{};
+template <> struct is_signed_imp<const volatile int> : public true_type{};
+template <> struct is_signed_imp<long> : public true_type{};
+template <> struct is_signed_imp<const long> : public true_type{};
+template <> struct is_signed_imp<volatile long> : public true_type{};
+template <> struct is_signed_imp<const volatile long> : public true_type{};
+#ifdef BOOST_HAS_LONG_LONG
+template <> struct is_signed_imp<long long> : public true_type{};
+template <> struct is_signed_imp<const long long> : public true_type{};
+template <> struct is_signed_imp<volatile long long> : public true_type{};
+template <> struct is_signed_imp<const volatile long long> : public true_type{};
+#endif
+#if defined(CHAR_MIN) && (CHAR_MIN != 0)
+template <> struct is_signed_imp<char> : public true_type{};
+template <> struct is_signed_imp<const char> : public true_type{};
+template <> struct is_signed_imp<volatile char> : public true_type{};
+template <> struct is_signed_imp<const volatile char> : public true_type{};
+#endif
+#if defined(WCHAR_MIN) && (WCHAR_MIN != 0)
+template <> struct is_signed_imp<wchar_t> : public true_type{};
+template <> struct is_signed_imp<const wchar_t> : public true_type{};
+template <> struct is_signed_imp<volatile wchar_t> : public true_type{};
+template <> struct is_signed_imp<const volatile wchar_t> : public true_type{};
+#endif
+
+#endif
+
+}
+
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_signed,T,::boost::detail::is_signed_imp<T>::value)
+
+} // namespace boost
+
+#include <boost/type_traits/detail/bool_trait_undef.hpp>
+
+#endif // BOOST_TT_IS_MEMBER_FUNCTION_POINTER_HPP_INCLUDED
diff --git a/boost/boost/type_traits/is_stateless.hpp b/boost/boost/type_traits/is_stateless.hpp
new file mode 100644
index 00000000000..d8d40635fe2
--- /dev/null
+++ b/boost/boost/type_traits/is_stateless.hpp
@@ -0,0 +1,48 @@
+
+// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_IS_STATELESS_HPP_INCLUDED
+#define BOOST_TT_IS_STATELESS_HPP_INCLUDED
+
+#include <boost/type_traits/has_trivial_constructor.hpp>
+#include <boost/type_traits/has_trivial_copy.hpp>
+#include <boost/type_traits/has_trivial_destructor.hpp>
+#include <boost/type_traits/is_class.hpp>
+#include <boost/type_traits/is_empty.hpp>
+#include <boost/type_traits/detail/ice_and.hpp>
+#include <boost/config.hpp>
+
+// should be the last #include
+#include <boost/type_traits/detail/bool_trait_def.hpp>
+
+namespace boost {
+
+namespace detail {
+
+template <typename T>
+struct is_stateless_impl
+{
+ BOOST_STATIC_CONSTANT(bool, value =
+ (::boost::type_traits::ice_and<
+ ::boost::has_trivial_constructor<T>::value,
+ ::boost::has_trivial_copy<T>::value,
+ ::boost::has_trivial_destructor<T>::value,
+ ::boost::is_class<T>::value,
+ ::boost::is_empty<T>::value
+ >::value));
+};
+
+} // namespace detail
+
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_stateless,T,::boost::detail::is_stateless_impl<T>::value)
+
+} // namespace boost
+
+#include <boost/type_traits/detail/bool_trait_undef.hpp>
+
+#endif // BOOST_TT_IS_STATELESS_HPP_INCLUDED
diff --git a/boost/boost/type_traits/is_union.hpp b/boost/boost/type_traits/is_union.hpp
new file mode 100644
index 00000000000..25bddccfe1a
--- /dev/null
+++ b/boost/boost/type_traits/is_union.hpp
@@ -0,0 +1,49 @@
+
+// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard
+// Hinnant & John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+
+#ifndef BOOST_TT_IS_UNION_HPP_INCLUDED
+#define BOOST_TT_IS_UNION_HPP_INCLUDED
+
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/config.hpp>
+#include <boost/type_traits/intrinsics.hpp>
+
+// should be the last #include
+#include <boost/type_traits/detail/bool_trait_def.hpp>
+
+namespace boost {
+
+namespace detail {
+#ifndef __GNUC__
+template <typename T> struct is_union_impl
+{
+ typedef typename remove_cv<T>::type cvt;
+ BOOST_STATIC_CONSTANT(bool, value = BOOST_IS_UNION(cvt));
+};
+#else
+//
+// using remove_cv here generates a whole load of needless
+// warnings with gcc, since it doesn't do any good with gcc
+// in any case (at least at present), just remove it:
+//
+template <typename T> struct is_union_impl
+{
+ BOOST_STATIC_CONSTANT(bool, value = BOOST_IS_UNION(T));
+};
+#endif
+} // namespace detail
+
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_union,T,::boost::detail::is_union_impl<T>::value)
+
+} // namespace boost
+
+#include <boost/type_traits/detail/bool_trait_undef.hpp>
+
+#endif // BOOST_TT_IS_UNION_HPP_INCLUDED
diff --git a/boost/boost/type_traits/is_unsigned.hpp b/boost/boost/type_traits/is_unsigned.hpp
new file mode 100644
index 00000000000..7a9f8916f66
--- /dev/null
+++ b/boost/boost/type_traits/is_unsigned.hpp
@@ -0,0 +1,114 @@
+
+// (C) Copyright John Maddock 2005.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+
+#ifndef BOOST_TT_IS_UNSIGNED_HPP_INCLUDED
+#define BOOST_TT_IS_UNSIGNED_HPP_INCLUDED
+
+#include <boost/type_traits/is_integral.hpp>
+#include <boost/type_traits/is_enum.hpp>
+#include <boost/type_traits/detail/ice_or.hpp>
+
+// should be the last #include
+#include <boost/type_traits/detail/bool_trait_def.hpp>
+
+namespace boost {
+
+namespace detail{
+
+#if !(defined(__EDG_VERSION__) && __EDG_VERSION__ <= 238)
+
+template <class T>
+struct is_ununsigned_helper
+{
+ BOOST_STATIC_CONSTANT(bool, value = (static_cast<T>(-1) > 0));
+};
+
+template <bool integral_type>
+struct is_ununsigned_select_helper
+{
+ template <class T>
+ struct rebind
+ {
+ typedef is_ununsigned_helper<T> type;
+ };
+};
+
+template <>
+struct is_ununsigned_select_helper<false>
+{
+ template <class T>
+ struct rebind
+ {
+ typedef false_type type;
+ };
+};
+
+template <class T>
+struct is_unsigned_imp
+{
+ typedef is_ununsigned_select_helper<
+ ::boost::type_traits::ice_or<
+ ::boost::is_integral<T>::value,
+ ::boost::is_enum<T>::value>::value
+ > selector;
+ typedef typename selector::template rebind<T> binder;
+ typedef typename binder::type type;
+ BOOST_STATIC_CONSTANT(bool, value = type::value);
+};
+
+#else
+
+template <class T> struct is_unsigned_imp : public false_type{};
+template <> struct is_unsigned_imp<unsigned char> : public true_type{};
+template <> struct is_unsigned_imp<const unsigned char> : public true_type{};
+template <> struct is_unsigned_imp<volatile unsigned char> : public true_type{};
+template <> struct is_unsigned_imp<const volatile unsigned char> : public true_type{};
+template <> struct is_unsigned_imp<unsigned short> : public true_type{};
+template <> struct is_unsigned_imp<const unsigned short> : public true_type{};
+template <> struct is_unsigned_imp<volatile unsigned short> : public true_type{};
+template <> struct is_unsigned_imp<const volatile unsigned short> : public true_type{};
+template <> struct is_unsigned_imp<unsigned int> : public true_type{};
+template <> struct is_unsigned_imp<const unsigned int> : public true_type{};
+template <> struct is_unsigned_imp<volatile unsigned int> : public true_type{};
+template <> struct is_unsigned_imp<const volatile unsigned int> : public true_type{};
+template <> struct is_unsigned_imp<unsigned long> : public true_type{};
+template <> struct is_unsigned_imp<const unsigned long> : public true_type{};
+template <> struct is_unsigned_imp<volatile unsigned long> : public true_type{};
+template <> struct is_unsigned_imp<const volatile unsigned long> : public true_type{};
+#ifdef BOOST_HAS_LONG_LONG
+template <> struct is_unsigned_imp<unsigned long long> : public true_type{};
+template <> struct is_unsigned_imp<const unsigned long long> : public true_type{};
+template <> struct is_unsigned_imp<volatile unsigned long long> : public true_type{};
+template <> struct is_unsigned_imp<const volatile unsigned long long> : public true_type{};
+#endif
+#if defined(CHAR_MIN) && (CHAR_MIN == 0)
+template <> struct is_unsigned_imp<char> : public true_type{};
+template <> struct is_unsigned_imp<const char> : public true_type{};
+template <> struct is_unsigned_imp<volatile char> : public true_type{};
+template <> struct is_unsigned_imp<const volatile char> : public true_type{};
+#endif
+#if defined(WCHAR_MIN) && (WCHAR_MIN == 0)
+template <> struct is_unsigned_imp<wchar_t> : public true_type{};
+template <> struct is_unsigned_imp<const wchar_t> : public true_type{};
+template <> struct is_unsigned_imp<volatile wchar_t> : public true_type{};
+template <> struct is_unsigned_imp<const volatile wchar_t> : public true_type{};
+#endif
+
+#endif
+
+
+}
+
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_unsigned,T,::boost::detail::is_unsigned_imp<T>::value)
+
+} // namespace boost
+
+#include <boost/type_traits/detail/bool_trait_undef.hpp>
+
+#endif // BOOST_TT_IS_MEMBER_FUNCTION_POINTER_HPP_INCLUDED
diff --git a/boost/boost/type_traits/is_void.hpp b/boost/boost/type_traits/is_void.hpp
new file mode 100644
index 00000000000..ca51b54870e
--- /dev/null
+++ b/boost/boost/type_traits/is_void.hpp
@@ -0,0 +1,33 @@
+
+// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_IS_VOID_HPP_INCLUDED
+#define BOOST_TT_IS_VOID_HPP_INCLUDED
+
+#include <boost/config.hpp>
+
+// should be the last #include
+#include <boost/type_traits/detail/bool_trait_def.hpp>
+
+namespace boost {
+
+//* is a type T void - is_void<T>
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_void,T,false)
+BOOST_TT_AUX_BOOL_TRAIT_SPEC1(is_void,void,true)
+
+#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
+BOOST_TT_AUX_BOOL_TRAIT_SPEC1(is_void,void const,true)
+BOOST_TT_AUX_BOOL_TRAIT_SPEC1(is_void,void volatile,true)
+BOOST_TT_AUX_BOOL_TRAIT_SPEC1(is_void,void const volatile,true)
+#endif
+
+} // namespace boost
+
+#include <boost/type_traits/detail/bool_trait_undef.hpp>
+
+#endif // BOOST_TT_IS_VOID_HPP_INCLUDED
diff --git a/boost/boost/type_traits/is_volatile.hpp b/boost/boost/type_traits/is_volatile.hpp
new file mode 100644
index 00000000000..db473b55447
--- /dev/null
+++ b/boost/boost/type_traits/is_volatile.hpp
@@ -0,0 +1,131 @@
+
+// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes,
+// Howard Hinnant and John Maddock 2000.
+// (C) Copyright Mat Marcus, Jesse Jones and Adobe Systems Inc 2001
+
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+// Fixed is_pointer, is_reference, is_const, is_volatile, is_same,
+// is_member_pointer based on the Simulated Partial Specialization work
+// of Mat Marcus and Jesse Jones. See http://opensource.adobe.com or
+// http://groups.yahoo.com/group/boost/message/5441
+// Some workarounds in here use ideas suggested from "Generic<Programming>:
+// Mappings between Types and Values"
+// by Andrei Alexandrescu (see http://www.cuj.com/experts/1810/alexandr.html).
+
+
+#ifndef BOOST_TT_IS_VOLATILE_HPP_INCLUDED
+#define BOOST_TT_IS_VOLATILE_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+# include <boost/type_traits/detail/cv_traits_impl.hpp>
+# if BOOST_WORKAROUND(BOOST_MSVC, < 1400)
+# include <boost/type_traits/remove_bounds.hpp>
+# endif
+#else
+# include <boost/type_traits/is_reference.hpp>
+# include <boost/type_traits/is_array.hpp>
+# include <boost/type_traits/detail/yes_no_type.hpp>
+# include <boost/type_traits/detail/false_result.hpp>
+#endif
+
+// should be the last #include
+#include <boost/type_traits/detail/bool_trait_def.hpp>
+
+namespace boost {
+
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+//* is a type T declared volatile - is_volatile<T>
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1400)
+ BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_volatile,T,::boost::detail::cv_traits_imp<typename boost::remove_bounds<T>::type*>::is_volatile)
+#else
+ BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_volatile,T,::boost::detail::cv_traits_imp<T*>::is_volatile)
+#endif
+BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_volatile,T&,false)
+
+#if defined(__BORLANDC__) && (__BORLANDC__ < 0x600)
+// these are illegal specialisations; cv-qualifies applied to
+// references have no effect according to [8.3.2p1],
+// C++ Builder requires them though as it treats cv-qualified
+// references as distinct types...
+BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_volatile,T& const,false)
+BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_volatile,T& volatile,false)
+BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_volatile,T& const volatile,false)
+#endif
+
+#else
+
+namespace detail {
+
+using ::boost::type_traits::yes_type;
+using ::boost::type_traits::no_type;
+
+yes_type is_volatile_tester(void const volatile*);
+no_type is_volatile_tester(void const*);
+
+template <bool is_ref, bool array>
+struct is_volatile_helper
+ : ::boost::type_traits::false_result
+{
+};
+
+template <>
+struct is_volatile_helper<false,false>
+{
+ template <typename T> struct result_
+ {
+ static T* t;
+ BOOST_STATIC_CONSTANT(bool, value = (
+ sizeof(detail::yes_type) == sizeof(detail::is_volatile_tester(t))
+ ));
+ };
+};
+
+template <>
+struct is_volatile_helper<false,true>
+{
+ template <typename T> struct result_
+ {
+ static T t;
+ BOOST_STATIC_CONSTANT(bool, value = (
+ sizeof(detail::yes_type) == sizeof(detail::is_volatile_tester(&t))
+ ));
+ };
+};
+
+template <typename T>
+struct is_volatile_impl
+ : is_volatile_helper<
+ is_reference<T>::value
+ , is_array<T>::value
+ >::template result_<T>
+{
+};
+
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_volatile,void,false)
+#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_volatile,void const,false)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_volatile,void volatile,true)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_volatile,void const volatile,true)
+#endif
+
+} // namespace detail
+
+//* is a type T declared volatile - is_volatile<T>
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_volatile,T,::boost::detail::is_volatile_impl<T>::value)
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+} // namespace boost
+
+#include <boost/type_traits/detail/bool_trait_undef.hpp>
+
+#endif // BOOST_TT_IS_VOLATILE_HPP_INCLUDED
diff --git a/boost/boost/type_traits/msvc/remove_all_extents.hpp b/boost/boost/type_traits/msvc/remove_all_extents.hpp
new file mode 100644
index 00000000000..35171322328
--- /dev/null
+++ b/boost/boost/type_traits/msvc/remove_all_extents.hpp
@@ -0,0 +1,47 @@
+// Copyright (C) 2004 Peder Holt
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPE_TRAITS_MSVC_REMOVE_ALL_EXTENT_HOLT_2004_0827
+#define BOOST_TYPE_TRAITS_MSVC_REMOVE_ALL_EXTENT_HOLT_2004_0827
+
+#include <boost/type_traits/msvc/typeof.hpp>
+#include <boost/type_traits/is_array.hpp>
+
+namespace boost {
+ template<typename T>
+ struct remove_all_extents;
+
+ namespace detail {
+ template<bool IsArray>
+ struct remove_all_extents_impl_typeof {
+ template<typename T,typename ID>
+ struct inner {
+ typedef T type;
+ };
+ };
+ template<>
+ struct remove_all_extents_impl_typeof<true> {
+ template<typename T,typename ID>
+ struct inner {
+ template<typename U>
+ static msvc_register_type<U,ID> test(U[]);
+ static msvc_register_type<T,ID> test(...);
+ BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( *((T*)NULL) ) ));
+ typedef typename msvc_extract_type<ID>::id2type::type reduced_type;
+ typedef typename remove_all_extents<reduced_type>::type type;
+ };
+ };
+ } //namespace detail
+
+ template<typename T>
+ struct remove_all_extents {
+ typedef typename detail::remove_all_extents_impl_typeof<
+ boost::is_array<T>::value
+ >::template inner<T,remove_all_extents<T> >::type type;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,remove_all_extents,T)
+ };
+} //namespace boost
+
+#endif //BOOST_TYPE_TRAITS_MSVC_REMOVE_BOUNDS_HOLT_2004_0827
+
diff --git a/boost/boost/type_traits/msvc/remove_bounds.hpp b/boost/boost/type_traits/msvc/remove_bounds.hpp
new file mode 100644
index 00000000000..12a9b053356
--- /dev/null
+++ b/boost/boost/type_traits/msvc/remove_bounds.hpp
@@ -0,0 +1,43 @@
+// Copyright (C) 2004 Peder Holt
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPE_TRAITS_MSVC_REMOVE_BOUNDS_HOLT_2004_0827
+#define BOOST_TYPE_TRAITS_MSVC_REMOVE_BOUNDS_HOLT_2004_0827
+
+#include <boost/type_traits/msvc/typeof.hpp>
+#include <boost/type_traits/is_array.hpp>
+
+namespace boost {
+ namespace detail {
+ template<bool IsArray>
+ struct remove_bounds_impl_typeof {
+ template<typename T,typename ID>
+ struct inner {
+ typedef T type;
+ };
+ };
+ template<>
+ struct remove_bounds_impl_typeof<true> {
+ template<typename T,typename ID>
+ struct inner {
+ template<typename U>
+ static msvc_register_type<U,ID> test(U[]);
+ static msvc_register_type<T,ID> test(...);
+ BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( *((T*)NULL) ) ));
+ typedef typename msvc_extract_type<ID>::id2type::type type;
+ };
+ };
+ } //namespace detail
+
+ template<typename T>
+ struct remove_bounds {
+ typedef typename detail::remove_bounds_impl_typeof<
+ boost::is_array<T>::value
+ >::template inner<T,remove_bounds<T> >::type type;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,remove_bounds,T)
+ };
+} //namespace boost
+
+#endif //BOOST_TYPE_TRAITS_MSVC_REMOVE_BOUNDS_HOLT_2004_0827
+
diff --git a/boost/boost/type_traits/msvc/remove_const.hpp b/boost/boost/type_traits/msvc/remove_const.hpp
new file mode 100644
index 00000000000..5395e80022c
--- /dev/null
+++ b/boost/boost/type_traits/msvc/remove_const.hpp
@@ -0,0 +1,143 @@
+// Copyright (C) 2004 Peder Holt
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPE_TRAITS_MSVC_REMOVE_CONST_HOLT_2004_0828
+#define BOOST_TYPE_TRAITS_MSVC_REMOVE_CONST_HOLT_2004_0828
+
+#include <boost/type_traits/msvc/typeof.hpp>
+#include <boost/type_traits/is_volatile.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/is_pointer.hpp>
+#include <boost/type_traits/is_array.hpp>
+
+namespace boost {
+ namespace detail {
+ template<bool IsPointer,bool IsArray,bool IsConst,bool IsVolatile>
+ struct remove_const_impl_typeof {
+ template<typename T,typename ID>
+ struct inner {
+ typedef T type;
+ };
+ template<typename T>
+ struct transform_type {
+ typedef T type;
+ };
+ };
+ template<> //Const
+ struct remove_const_impl_typeof<false,false,true,false> {
+ template<typename T,typename ID>
+ struct inner {
+ template<typename U>
+ static msvc_register_type<U,ID> test(U const&(*)());
+ static msvc_register_type<T,ID> test(...);
+ BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (T(*)())(NULL) ) ));
+ typedef typename msvc_extract_type<ID>::id2type::type type;
+ };
+ template<typename T>
+ struct transform_type {
+ typedef T& type;
+ };
+ };
+ template<> //CV
+ struct remove_const_impl_typeof<false,false,true,true> {
+ template<typename T,typename ID>
+ struct inner {
+ template<typename U>
+ static msvc_register_type<U volatile,ID> test(U const volatile&(*)());
+ static msvc_register_type<T,ID> test(...);
+ BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (T(*)())(NULL) ) ));
+ typedef typename msvc_extract_type<ID>::id2type::type type;
+ };
+ template<typename T>
+ struct transform_type {
+ typedef T& type;
+ };
+ };
+ template<> //Const Pointer
+ struct remove_const_impl_typeof<true,false,true,false> {
+ template<typename T,typename ID>
+ struct inner {
+ template<typename U>
+ static msvc_register_type<U,ID> test(void(*)(U const[]));
+ static msvc_register_type<T,ID> test(...);
+ BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (void(*)(T))(NULL) ) ));
+ typedef typename msvc_extract_type<ID>::id2type::type type;
+ };
+ template<typename T>
+ struct transform_type {
+ typedef T type[];
+ };
+ };
+ template<> //CV Pointer
+ struct remove_const_impl_typeof<true,false,true,true> {
+ template<typename T,typename ID>
+ struct inner {
+ template<typename U>
+ static msvc_register_type<U volatile,ID> test(void(*)(U const volatile[]));
+ static msvc_register_type<T,ID> test(...);
+ BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (void(*)(T))(NULL) ) ));
+ typedef typename msvc_extract_type<ID>::id2type::type type;
+ };
+ template<typename T>
+ struct transform_type {
+ typedef T type[];
+ };
+ };
+ template<> //Const Array
+ struct remove_const_impl_typeof<false,true,true,false> {
+ template<typename T,typename ID>
+ struct inner {
+ BOOST_STATIC_CONSTANT(unsigned,value=(sizeof(T)/sizeof((*((T*)NULL))[0])));
+
+ template<typename U>
+ static msvc_register_type<U[value],ID> test(void(*)(U const[]));
+ static msvc_register_type<T,ID> test(...);
+ BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (void(*)(T))(NULL) ) ));
+ typedef typename msvc_extract_type<ID>::id2type::type type;
+ };
+ template<typename T>
+ struct transform_type {
+ typedef T type;
+ };
+ };
+
+ template<> //CV Array
+ struct remove_const_impl_typeof<false,true,true,true> {
+ template<typename T,typename ID>
+ struct inner {
+ BOOST_STATIC_CONSTANT(unsigned,value=(sizeof(T)/sizeof((*((T*)NULL))[0])));
+
+ template<typename U>
+ static msvc_register_type<U volatile[value],ID> test(void(*)(U const volatile[]));
+ static msvc_register_type<T,ID> test(...);
+ BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (void(*)(T))(NULL) ) ));
+ typedef typename msvc_extract_type<ID>::id2type::type type;
+ };
+ template<typename T>
+ struct transform_type {
+ typedef T type;
+ };
+ };
+
+ } //namespace detail
+
+ template<typename T>
+ struct remove_const {
+ typedef detail::remove_const_impl_typeof<
+ boost::is_pointer<T>::value,
+ boost::is_array<T>::value,
+ boost::is_const<T>::value,
+ boost::is_volatile<T>::value
+ > remove_const_type;
+ typedef typename
+ remove_const_type::template inner<
+ typename remove_const_type::template transform_type<T>::type,
+ remove_const<T>
+ >::type
+ type;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,remove_const,T)
+ };
+}//namespace boost
+
+#endif //BOOST_TYPE_TRAITS_MSVC_REMOVE_CONST_HOLT_2004_0828
diff --git a/boost/boost/type_traits/msvc/remove_cv.hpp b/boost/boost/type_traits/msvc/remove_cv.hpp
new file mode 100644
index 00000000000..c7b0379c432
--- /dev/null
+++ b/boost/boost/type_traits/msvc/remove_cv.hpp
@@ -0,0 +1,190 @@
+// Copyright (C) 2004 Peder Holt
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPE_TRAITS_MSVC_REMOVE_CV_HOLT_2004_0901
+#define BOOST_TYPE_TRAITS_MSVC_REMOVE_CV_HOLT_2004_0901
+
+#include <boost/type_traits/msvc/typeof.hpp>
+#include <boost/type_traits/is_volatile.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/is_pointer.hpp>
+#include <boost/type_traits/is_array.hpp>
+
+namespace boost {
+ namespace detail {
+ template<bool IsPointer,bool IsArray,bool IsConst,bool IsVolatile>
+ struct remove_cv_impl_typeof {
+ template<typename T,typename ID>
+ struct inner {
+ typedef T type;
+ };
+ template<typename T>
+ struct transform_type {
+ typedef T type;
+ };
+ };
+ template<> //Volatile
+ struct remove_cv_impl_typeof<false,false,false,true> {
+ template<typename T,typename ID>
+ struct inner {
+ template<typename U>
+ static msvc_register_type<U,ID> test(U volatile&(*)());
+ static msvc_register_type<T,ID> test(...);
+ BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (T(*)())(NULL) ) ));
+ typedef typename msvc_extract_type<ID>::id2type::type type;
+ };
+ template<typename T>
+ struct transform_type {
+ typedef T& type;
+ };
+ };
+ template<> //Const
+ struct remove_cv_impl_typeof<false,false,true,false> {
+ template<typename T,typename ID>
+ struct inner {
+ template<typename U>
+ static msvc_register_type<U,ID> test(U const&(*)());
+ static msvc_register_type<T,ID> test(...);
+ BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (T(*)())(NULL) ) ));
+ typedef typename msvc_extract_type<ID>::id2type::type type;
+ };
+ template<typename T>
+ struct transform_type {
+ typedef T& type;
+ };
+ };
+ template<> //CV
+ struct remove_cv_impl_typeof<false,false,true,true> {
+ template<typename T,typename ID>
+ struct inner {
+ template<typename U>
+ static msvc_register_type<U,ID> test(U const volatile&(*)());
+ static msvc_register_type<T,ID> test(...);
+ BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (T(*)())(NULL) ) ));
+ typedef typename msvc_extract_type<ID>::id2type::type type;
+ };
+ template<typename T>
+ struct transform_type {
+ typedef T& type;
+ };
+ };
+ template<> //Volatile Pointer
+ struct remove_cv_impl_typeof<true,false,false,true> {
+ template<typename T,typename ID>
+ struct inner {
+ template<typename U>
+ static msvc_register_type<U,ID> test(void(*)(U volatile[]));
+ static msvc_register_type<T,ID> test(...);
+ BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (void(*)(T))(NULL) ) ));
+ typedef typename msvc_extract_type<ID>::id2type::type type;
+ };
+ template<typename T>
+ struct transform_type {
+ typedef T type[];
+ };
+ };
+ template<> //Const Pointer
+ struct remove_cv_impl_typeof<true,false,true,false> {
+ template<typename T,typename ID>
+ struct inner {
+ template<typename U>
+ static msvc_register_type<U,ID> test(void(*)(U const[]));
+ static msvc_register_type<T,ID> test(...);
+ BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (void(*)(T))(NULL) ) ));
+ typedef typename msvc_extract_type<ID>::id2type::type type;
+ };
+ template<typename T>
+ struct transform_type {
+ typedef T type[];
+ };
+ };
+ template<> //CV Pointer
+ struct remove_cv_impl_typeof<true,false,true,true> {
+ template<typename T,typename ID>
+ struct inner {
+ template<typename U>
+ static msvc_register_type<U,ID> test(void(*)(U const volatile[]));
+ static msvc_register_type<T,ID> test(...);
+ BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (void(*)(T))(NULL) ) ));
+ typedef typename msvc_extract_type<ID>::id2type::type type;
+ };
+ template<typename T>
+ struct transform_type {
+ typedef T type[];
+ };
+ };
+ template<> //Volatile Array
+ struct remove_cv_impl_typeof<false,true,false,true> {
+ template<typename T,typename ID>
+ struct inner {
+ BOOST_STATIC_CONSTANT(unsigned,value=(sizeof(T)/sizeof((*((T*)NULL))[0])));
+
+ template<typename U>
+ static msvc_register_type<U[value],ID> test(void(*)(U volatile[]));
+ static msvc_register_type<T,ID> test(...);
+ BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (void(*)(T))(NULL) ) ));
+ typedef typename msvc_extract_type<ID>::id2type::type type;
+ };
+ template<typename T>
+ struct transform_type {
+ typedef T type;
+ };
+ };
+ template<> //Const Array
+ struct remove_cv_impl_typeof<false,true,true,false> {
+ template<typename T,typename ID>
+ struct inner {
+ BOOST_STATIC_CONSTANT(unsigned,value=(sizeof(T)/sizeof((*((T*)NULL))[0])));
+
+ template<typename U>
+ static msvc_register_type<U[value],ID> test(void(*)(U const[]));
+ static msvc_register_type<T,ID> test(...);
+ BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (void(*)(T))(NULL) ) ));
+ typedef typename msvc_extract_type<ID>::id2type::type type;
+ };
+ template<typename T>
+ struct transform_type {
+ typedef T type;
+ };
+ };
+
+ template<> //CV Array
+ struct remove_cv_impl_typeof<false,true,true,true> {
+ template<typename T,typename ID>
+ struct inner {
+ BOOST_STATIC_CONSTANT(unsigned,value=(sizeof(T)/sizeof((*((T*)NULL))[0])));
+
+ template<typename U>
+ static msvc_register_type<U[value],ID> test(void(*)(U const volatile[]));
+ static msvc_register_type<T,ID> test(...);
+ BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (void(*)(T))(NULL) ) ));
+ typedef typename msvc_extract_type<ID>::id2type::type type;
+ };
+ template<typename T>
+ struct transform_type {
+ typedef T type;
+ };
+ };
+
+ } //namespace detail
+
+ template<typename T>
+ struct remove_cv {
+ typedef detail::remove_cv_impl_typeof<
+ boost::is_pointer<T>::value,
+ boost::is_array<T>::value,
+ boost::is_const<T>::value,
+ boost::is_volatile<T>::value
+ > remove_cv_type;
+ typedef typename
+ remove_cv_type::template inner<
+ typename remove_cv_type::template transform_type<T>::type,
+ remove_cv<T>
+ >::type
+ type;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,remove_cv,T)
+ };
+}//namespace boost
+
+#endif //BOOST_TYPE_TRAITS_MSVC_REMOVE_CV_HOLT_2004_0901
diff --git a/boost/boost/type_traits/msvc/remove_extent.hpp b/boost/boost/type_traits/msvc/remove_extent.hpp
new file mode 100644
index 00000000000..f87ec416da1
--- /dev/null
+++ b/boost/boost/type_traits/msvc/remove_extent.hpp
@@ -0,0 +1,43 @@
+// Copyright (C) 2004 Peder Holt
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPE_TRAITS_MSVC_REMOVE_EXTENT_HOLT_2004_0827
+#define BOOST_TYPE_TRAITS_MSVC_REMOVE_EXTENT_HOLT_2004_0827
+
+#include <boost/type_traits/msvc/typeof.hpp>
+#include <boost/type_traits/is_array.hpp>
+
+namespace boost {
+ namespace detail {
+ template<bool IsArray>
+ struct remove_extent_impl_typeof {
+ template<typename T,typename ID>
+ struct inner {
+ typedef T type;
+ };
+ };
+ template<>
+ struct remove_extent_impl_typeof<true> {
+ template<typename T,typename ID>
+ struct inner {
+ template<typename U>
+ static msvc_register_type<U,ID> test(U[]);
+ static msvc_register_type<T,ID> test(...);
+ BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( *((T*)NULL) ) ));
+ typedef typename msvc_extract_type<ID>::id2type::type type;
+ };
+ };
+ } //namespace detail
+
+ template<typename T>
+ struct remove_extent {
+ typedef typename detail::remove_extent_impl_typeof<
+ boost::is_array<T>::value
+ >::template inner<T,remove_extent<T> >::type type;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,remove_extent,T)
+ };
+} //namespace boost
+
+#endif //BOOST_TYPE_TRAITS_MSVC_REMOVE_BOUNDS_HOLT_2004_0827
+
diff --git a/boost/boost/type_traits/msvc/remove_pointer.hpp b/boost/boost/type_traits/msvc/remove_pointer.hpp
new file mode 100644
index 00000000000..8b9b0d4e112
--- /dev/null
+++ b/boost/boost/type_traits/msvc/remove_pointer.hpp
@@ -0,0 +1,42 @@
+// Copyright (C) 2004 Peder Holt
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPE_TRAITS_MSVC_REMOVE_POINTER_HOLT_2004_0827
+#define BOOST_TYPE_TRAITS_MSVC_REMOVE_POINTER_HOLT_2004_0827
+
+#include <boost/type_traits/msvc/typeof.hpp>
+#include <boost/type_traits/is_pointer.hpp>
+
+namespace boost {
+ namespace detail {
+ template<int IsPointer>
+ struct remove_pointer_impl_typeof {
+ template<typename T,typename ID>
+ struct inner {
+ typedef T type;
+ };
+ };
+ template<>
+ struct remove_pointer_impl_typeof<true> {
+ template<typename T,typename ID>
+ struct inner {
+ template<typename U>
+ static msvc_register_type<U,ID> test(U*);
+ static msvc_register_type<T,ID> test(...);
+ BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( *((T*)NULL) ) ));
+ typedef typename msvc_extract_type<ID>::id2type::type type;
+ };
+ };
+ } //namespace detail
+
+ template<typename T>
+ struct remove_pointer {
+ typedef typename detail::remove_pointer_impl_typeof<
+ boost::is_pointer<T>::value
+ >::template inner<T,remove_pointer<T> >::type type;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,remove_pointer,T)
+ };
+} //namespace boost
+
+#endif //BOOST_TYPE_TRAITS_REMOVE_POINTER_HOLT_2004_0827
diff --git a/boost/boost/type_traits/msvc/remove_reference.hpp b/boost/boost/type_traits/msvc/remove_reference.hpp
new file mode 100644
index 00000000000..367d352eddc
--- /dev/null
+++ b/boost/boost/type_traits/msvc/remove_reference.hpp
@@ -0,0 +1,42 @@
+// Copyright (C) 2004 Peder Holt
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPE_TRAITS_MSVC_REMOVE_REFERENCE_HOLT_2004_0827
+#define BOOST_TYPE_TRAITS_MSVC_REMOVE_REFERENCE_HOLT_2004_0827
+
+#include <boost/type_traits/msvc/typeof.hpp>
+#include <boost/type_traits/is_reference.hpp>
+
+namespace boost {
+ namespace detail {
+ template<bool IsReference>
+ struct remove_reference_impl_typeof {
+ template<typename T,typename ID>
+ struct inner {
+ typedef T type;
+ };
+ };
+ template<>
+ struct remove_reference_impl_typeof<true> {
+ template<typename T,typename ID>
+ struct inner {
+ template<typename U>
+ static msvc_register_type<U,ID> test(U&(*)());
+ static msvc_register_type<T,ID> test(...);
+ BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (T(*)())(NULL) ) ));
+ typedef typename msvc_extract_type<ID>::id2type::type type;
+ };
+ };
+ } //namespace detail
+
+ template<typename T>
+ struct remove_reference {
+ typedef typename detail::remove_reference_impl_typeof<
+ boost::is_reference<T>::value
+ >::template inner<T,remove_reference<T> >::type type;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,remove_reference,T)
+ };
+} //namespace boost
+
+#endif //BOOST_TYPE_TRAITS_MSVC_REMOVE_REFERENCE_HOLT_2004_0827
diff --git a/boost/boost/type_traits/msvc/remove_volatile.hpp b/boost/boost/type_traits/msvc/remove_volatile.hpp
new file mode 100644
index 00000000000..3759f2a3788
--- /dev/null
+++ b/boost/boost/type_traits/msvc/remove_volatile.hpp
@@ -0,0 +1,143 @@
+// Copyright (C) 2004 Peder Holt
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPE_TRAITS_MSVC_REMOVE_VOLATILE_HOLT_2004_0828
+#define BOOST_TYPE_TRAITS_MSVC_REMOVE_VOLATILE_HOLT_2004_0828
+
+#include <boost/type_traits/msvc/typeof.hpp>
+#include <boost/type_traits/is_volatile.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/is_pointer.hpp>
+#include <boost/type_traits/is_array.hpp>
+
+namespace boost {
+ namespace detail {
+ template<bool IsPointer,bool IsArray,bool IsConst,bool IsVolatile>
+ struct remove_volatile_impl_typeof {
+ template<typename T,typename ID>
+ struct inner {
+ typedef T type;
+ };
+ template<typename T>
+ struct transform_type {
+ typedef T type;
+ };
+ };
+ template<> //Volatile
+ struct remove_volatile_impl_typeof<false,false,false,true> {
+ template<typename T,typename ID>
+ struct inner {
+ template<typename U>
+ static msvc_register_type<U,ID> test(U volatile&(*)());
+ static msvc_register_type<T,ID> test(...);
+ BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (T(*)())(NULL) ) ));
+ typedef typename msvc_extract_type<ID>::id2type::type type;
+ };
+ template<typename T>
+ struct transform_type {
+ typedef T& type;
+ };
+ };
+ template<> //CV
+ struct remove_volatile_impl_typeof<false,false,true,true> {
+ template<typename T,typename ID>
+ struct inner {
+ template<typename U>
+ static msvc_register_type<U const,ID> test(U const volatile&(*)());
+ static msvc_register_type<T,ID> test(...);
+ BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (T(*)())(NULL) ) ));
+ typedef typename msvc_extract_type<ID>::id2type::type type;
+ };
+ template<typename T>
+ struct transform_type {
+ typedef T& type;
+ };
+ };
+ template<> //Volatile Pointer
+ struct remove_volatile_impl_typeof<true,false,false,true> {
+ template<typename T,typename ID>
+ struct inner {
+ template<typename U>
+ static msvc_register_type<U,ID> test(void(*)(U volatile[]));
+ static msvc_register_type<T,ID> test(...);
+ BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (void(*)(T))(NULL) ) ));
+ typedef typename msvc_extract_type<ID>::id2type::type type;
+ };
+ template<typename T>
+ struct transform_type {
+ typedef T type[];
+ };
+ };
+ template<> //CV Pointer
+ struct remove_volatile_impl_typeof<true,false,true,true> {
+ template<typename T,typename ID>
+ struct inner {
+ template<typename U>
+ static msvc_register_type<U const,ID> test(void(*)(U const volatile[]));
+ static msvc_register_type<T,ID> test(...);
+ BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (void(*)(T))(NULL) ) ));
+ typedef typename msvc_extract_type<ID>::id2type::type type;
+ };
+ template<typename T>
+ struct transform_type {
+ typedef T type[];
+ };
+ };
+ template<> //Volatile Array
+ struct remove_volatile_impl_typeof<false,true,false,true> {
+ template<typename T,typename ID>
+ struct inner {
+ BOOST_STATIC_CONSTANT(unsigned,value=(sizeof(T)/sizeof((*((T*)NULL))[0])));
+
+ template<typename U>
+ static msvc_register_type<U[value],ID> test(void(*)(U volatile[]));
+ static msvc_register_type<T,ID> test(...);
+ BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (void(*)(T))(NULL) ) ));
+ typedef typename msvc_extract_type<ID>::id2type::type type;
+ };
+ template<typename T>
+ struct transform_type {
+ typedef T type;
+ };
+ };
+
+ template<> //CV Array
+ struct remove_volatile_impl_typeof<false,true,true,true> {
+ template<typename T,typename ID>
+ struct inner {
+ BOOST_STATIC_CONSTANT(unsigned,value=(sizeof(T)/sizeof((*((T*)NULL))[0])));
+
+ template<typename U>
+ static msvc_register_type<U const[value],ID> test(void(*)(U const volatile[]));
+ static msvc_register_type<T,ID> test(...);
+ BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (void(*)(T))(NULL) ) ));
+ typedef typename msvc_extract_type<ID>::id2type::type type;
+ };
+ template<typename T>
+ struct transform_type {
+ typedef T type;
+ };
+ };
+
+ } //namespace detail
+
+ template<typename T>
+ struct remove_volatile {
+ typedef detail::remove_volatile_impl_typeof<
+ boost::is_pointer<T>::value,
+ boost::is_array<T>::value,
+ boost::is_const<T>::value,
+ boost::is_volatile<T>::value
+ > remove_volatile_type;
+ typedef typename
+ remove_volatile_type::template inner<
+ typename remove_volatile_type::template transform_type<T>::type,
+ remove_volatile<T>
+ >::type
+ type;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,remove_volatile,T)
+ };
+}//namespace boost
+
+#endif //BOOST_TYPE_TRAITS_MSVC_REMOVE_VOLATILE_HOLT_2004_0828
diff --git a/boost/boost/type_traits/msvc/typeof.hpp b/boost/boost/type_traits/msvc/typeof.hpp
new file mode 100644
index 00000000000..ebb0e803f60
--- /dev/null
+++ b/boost/boost/type_traits/msvc/typeof.hpp
@@ -0,0 +1,50 @@
+// Copyright (C) 2004 Peder Holt
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPETRAITS_MSVC_TYPEOF_HPP
+#define BOOST_TYPETRAITS_MSVC_TYPEOF_HPP
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+namespace boost { namespace detail {
+# if BOOST_WORKAROUND(BOOST_MSVC,==1300)
+ template<typename ID>
+ struct msvc_extract_type
+ {
+ template<bool>
+ struct id2type_impl;
+
+ typedef id2type_impl<true> id2type;
+ };
+
+ template<typename T, typename ID>
+ struct msvc_register_type : msvc_extract_type<ID>
+ {
+ template<>
+ struct id2type_impl<true> //VC7.0 specific bugfeature
+ {
+ typedef T type;
+ };
+ };
+# else
+ template<typename ID>
+ struct msvc_extract_type
+ {
+ struct id2type;
+ };
+
+ template<typename T, typename ID>
+ struct msvc_register_type : msvc_extract_type<ID>
+ {
+ typedef msvc_extract_type<ID> base_type;
+ struct base_type::id2type // This uses nice VC6.5 and VC7.1 bugfeature
+ {
+ typedef T type;
+ };
+ };
+# endif
+}}
+
+#endif //BOOST_TYPETRAITS_MSVC_TYPEOF_IMPL_HPP
diff --git a/boost/boost/type_traits/object_traits.hpp b/boost/boost/type_traits/object_traits.hpp
new file mode 100644
index 00000000000..c812a62e25b
--- /dev/null
+++ b/boost/boost/type_traits/object_traits.hpp
@@ -0,0 +1,33 @@
+// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+//
+// defines object traits classes:
+// is_object, is_scalar, is_class, is_compound, is_pod,
+// has_trivial_constructor, has_trivial_copy, has_trivial_assign,
+// has_trivial_destructor, is_empty.
+//
+
+#ifndef BOOST_TT_OBJECT_TRAITS_HPP_INLCUDED
+#define BOOST_TT_OBJECT_TRAITS_HPP_INLCUDED
+
+#include <boost/type_traits/has_trivial_assign.hpp>
+#include <boost/type_traits/has_trivial_constructor.hpp>
+#include <boost/type_traits/has_trivial_copy.hpp>
+#include <boost/type_traits/has_trivial_destructor.hpp>
+#include <boost/type_traits/has_nothrow_constructor.hpp>
+#include <boost/type_traits/has_nothrow_copy.hpp>
+#include <boost/type_traits/has_nothrow_assign.hpp>
+#include <boost/type_traits/is_base_and_derived.hpp>
+#include <boost/type_traits/is_class.hpp>
+#include <boost/type_traits/is_compound.hpp>
+#include <boost/type_traits/is_empty.hpp>
+#include <boost/type_traits/is_object.hpp>
+#include <boost/type_traits/is_pod.hpp>
+#include <boost/type_traits/is_scalar.hpp>
+#include <boost/type_traits/is_stateless.hpp>
+
+#endif // BOOST_TT_OBJECT_TRAITS_HPP_INLCUDED
diff --git a/boost/boost/type_traits/rank.hpp b/boost/boost/type_traits/rank.hpp
new file mode 100644
index 00000000000..4209d2d4668
--- /dev/null
+++ b/boost/boost/type_traits/rank.hpp
@@ -0,0 +1,81 @@
+
+// (C) Copyright John Maddock 2005.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+
+#ifndef BOOST_TT_RANK_HPP_INCLUDED
+#define BOOST_TT_RANK_HPP_INCLUDED
+
+// should be the last #include
+#include <boost/type_traits/detail/size_t_trait_def.hpp>
+
+namespace boost {
+
+namespace detail{
+
+template <class T, std::size_t N>
+struct rank_imp
+{
+ BOOST_STATIC_CONSTANT(std::size_t, value = N);
+};
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)
+template <class T, std::size_t R, std::size_t N>
+struct rank_imp<T[R], N>
+{
+ BOOST_STATIC_CONSTANT(std::size_t, value = (::boost::detail::rank_imp<T, N+1>::value));
+};
+
+template <class T, std::size_t R, std::size_t N>
+struct rank_imp<T const[R], N>
+{
+ BOOST_STATIC_CONSTANT(std::size_t, value = (::boost::detail::rank_imp<T, N+1>::value));
+};
+
+template <class T, std::size_t R, std::size_t N>
+struct rank_imp<T volatile[R], N>
+{
+ BOOST_STATIC_CONSTANT(std::size_t, value = (::boost::detail::rank_imp<T, N+1>::value));
+};
+
+template <class T, std::size_t R, std::size_t N>
+struct rank_imp<T const volatile[R], N>
+{
+ BOOST_STATIC_CONSTANT(std::size_t, value = (::boost::detail::rank_imp<T, N+1>::value));
+};
+
+#if !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && !defined(__IBMCPP__) && !BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))
+template <class T, std::size_t N>
+struct rank_imp<T[], N>
+{
+ BOOST_STATIC_CONSTANT(std::size_t, value = (::boost::detail::rank_imp<T, N+1>::value));
+};
+template <class T, std::size_t N>
+struct rank_imp<T const[], N>
+{
+ BOOST_STATIC_CONSTANT(std::size_t, value = (::boost::detail::rank_imp<T, N+1>::value));
+};
+template <class T, std::size_t N>
+struct rank_imp<T volatile[], N>
+{
+ BOOST_STATIC_CONSTANT(std::size_t, value = (::boost::detail::rank_imp<T, N+1>::value));
+};
+template <class T, std::size_t N>
+struct rank_imp<T const volatile[], N>
+{
+ BOOST_STATIC_CONSTANT(std::size_t, value = (::boost::detail::rank_imp<T, N+1>::value));
+};
+#endif
+#endif
+}
+
+BOOST_TT_AUX_SIZE_T_TRAIT_DEF1(rank,T,(::boost::detail::rank_imp<T,0>::value))
+
+} // namespace boost
+
+#include <boost/type_traits/detail/size_t_trait_undef.hpp>
+
+#endif // BOOST_TT_IS_MEMBER_FUNCTION_POINTER_HPP_INCLUDED
diff --git a/boost/boost/type_traits/reference_traits.hpp b/boost/boost/type_traits/reference_traits.hpp
new file mode 100644
index 00000000000..1607b3d0dbf
--- /dev/null
+++ b/boost/boost/type_traits/reference_traits.hpp
@@ -0,0 +1,15 @@
+// (C) Copyright David Abrahams Steve Cleary, Beman Dawes, Howard
+// Hinnant & John Maddock 2000-2002.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+
+#ifndef BOOST_TT_REFERENCE_TRAITS_HPP_INCLUDED
+#define BOOST_TT_REFERENCE_TRAITS_HPP_INCLUDED
+
+#include <boost/type_traits/is_reference.hpp>
+
+#endif // BOOST_TT_REFERENCE_TRAITS_HPP_INCLUDED
diff --git a/boost/boost/type_traits/remove_all_extents.hpp b/boost/boost/type_traits/remove_all_extents.hpp
new file mode 100644
index 00000000000..8ae18eeff64
--- /dev/null
+++ b/boost/boost/type_traits/remove_all_extents.hpp
@@ -0,0 +1,48 @@
+
+// (C) Copyright John Maddock 2005.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_REMOVE_ALL_EXTENTS_HPP_INCLUDED
+#define BOOST_TT_REMOVE_ALL_EXTENTS_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <cstddef>
+#include <boost/detail/workaround.hpp>
+
+#if BOOST_WORKAROUND(BOOST_MSVC,<=1300)
+#include <boost/type_traits/msvc/remove_all_extents.hpp>
+#endif
+
+// should be the last #include
+#include <boost/type_traits/detail/type_trait_def.hpp>
+
+#if !BOOST_WORKAROUND(BOOST_MSVC,<=1300)
+
+namespace boost {
+
+BOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_all_extents,T,T)
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)
+BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_all_extents,T[N],typename boost::remove_all_extents<T>::type type)
+BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_all_extents,T const[N],typename boost::remove_all_extents<T const>::type type)
+BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_all_extents,T volatile[N],typename boost::remove_all_extents<T volatile>::type type)
+BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_all_extents,T const volatile[N],typename boost::remove_all_extents<T const volatile>::type type)
+#if !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && !defined(__IBMCPP__) && !BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))
+BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_all_extents,T[],typename boost::remove_all_extents<T>::type)
+BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_all_extents,T const[],typename boost::remove_all_extents<T const>::type)
+BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_all_extents,T volatile[],typename boost::remove_all_extents<T volatile>::type)
+BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_all_extents,T const volatile[],typename boost::remove_all_extents<T const volatile>::type)
+#endif
+#endif
+
+} // namespace boost
+
+#endif
+
+#include <boost/type_traits/detail/type_trait_undef.hpp>
+
+#endif // BOOST_TT_REMOVE_BOUNDS_HPP_INCLUDED
diff --git a/boost/boost/type_traits/remove_bounds.hpp b/boost/boost/type_traits/remove_bounds.hpp
new file mode 100644
index 00000000000..1d7b4365511
--- /dev/null
+++ b/boost/boost/type_traits/remove_bounds.hpp
@@ -0,0 +1,48 @@
+
+// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_REMOVE_BOUNDS_HPP_INCLUDED
+#define BOOST_TT_REMOVE_BOUNDS_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <cstddef>
+#include <boost/detail/workaround.hpp>
+
+#if BOOST_WORKAROUND(BOOST_MSVC,<=1300)
+#include <boost/type_traits/msvc/remove_bounds.hpp>
+#endif
+
+// should be the last #include
+#include <boost/type_traits/detail/type_trait_def.hpp>
+
+#if !BOOST_WORKAROUND(BOOST_MSVC,<=1300)
+
+namespace boost {
+
+BOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_bounds,T,T)
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)
+BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_bounds,T[N],T type)
+BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_bounds,T const[N],T const type)
+BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_bounds,T volatile[N],T volatile type)
+BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_bounds,T const volatile[N],T const volatile type)
+#if !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && !defined(__IBMCPP__) && !BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))
+BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_bounds,T[],T)
+BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_bounds,T const[],T const)
+BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_bounds,T volatile[],T volatile)
+BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_bounds,T const volatile[],T const volatile)
+#endif
+#endif
+
+} // namespace boost
+
+#endif
+
+#include <boost/type_traits/detail/type_trait_undef.hpp>
+
+#endif // BOOST_TT_REMOVE_BOUNDS_HPP_INCLUDED
diff --git a/boost/boost/type_traits/remove_const.hpp b/boost/boost/type_traits/remove_const.hpp
new file mode 100644
index 00000000000..7e18d88b1a0
--- /dev/null
+++ b/boost/boost/type_traits/remove_const.hpp
@@ -0,0 +1,78 @@
+
+// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard
+// Hinnant & John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+
+#ifndef BOOST_TT_REMOVE_CONST_HPP_INCLUDED
+#define BOOST_TT_REMOVE_CONST_HPP_INCLUDED
+
+#include <boost/type_traits/is_volatile.hpp>
+#include <boost/type_traits/broken_compiler_spec.hpp>
+#include <boost/type_traits/detail/cv_traits_impl.hpp>
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+#include <cstddef>
+
+#if BOOST_WORKAROUND(BOOST_MSVC,<=1300)
+#include <boost/type_traits/msvc/remove_const.hpp>
+#endif
+
+// should be the last #include
+#include <boost/type_traits/detail/type_trait_def.hpp>
+
+namespace boost {
+
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace detail {
+
+template <typename T, bool is_vol>
+struct remove_const_helper
+{
+ typedef T type;
+};
+
+template <typename T>
+struct remove_const_helper<T, true>
+{
+ typedef T volatile type;
+};
+
+
+template <typename T>
+struct remove_const_impl
+{
+ typedef typename remove_const_helper<
+ typename cv_traits_imp<T*>::unqualified_type
+ , ::boost::is_volatile<T>::value
+ >::type type;
+};
+
+} // namespace detail
+
+// * convert a type T to non-const type - remove_const<T>
+
+BOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_const,T,typename boost::detail::remove_const_impl<T>::type)
+BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_const,T&,T&)
+#if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)
+BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_const,T const[N],T type[N])
+BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_const,T const volatile[N],T volatile type[N])
+#endif
+
+#elif !BOOST_WORKAROUND(BOOST_MSVC,<=1300)
+
+BOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_const,T,typename boost::detail::remove_const_impl<T>::type)
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+} // namespace boost
+
+#include <boost/type_traits/detail/type_trait_undef.hpp>
+
+#endif // BOOST_TT_REMOVE_CONST_HPP_INCLUDED
diff --git a/boost/boost/type_traits/remove_cv.hpp b/boost/boost/type_traits/remove_cv.hpp
new file mode 100644
index 00000000000..09f8ff103ce
--- /dev/null
+++ b/boost/boost/type_traits/remove_cv.hpp
@@ -0,0 +1,61 @@
+
+// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard
+// Hinnant & John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+
+#ifndef BOOST_TT_REMOVE_CV_HPP_INCLUDED
+#define BOOST_TT_REMOVE_CV_HPP_INCLUDED
+
+#include <boost/type_traits/broken_compiler_spec.hpp>
+#include <boost/type_traits/detail/cv_traits_impl.hpp>
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+#include <cstddef>
+
+#if BOOST_WORKAROUND(BOOST_MSVC,<=1300)
+#include <boost/type_traits/msvc/remove_cv.hpp>
+#endif
+
+// should be the last #include
+#include <boost/type_traits/detail/type_trait_def.hpp>
+
+namespace boost {
+
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+// convert a type T to a non-cv-qualified type - remove_cv<T>
+BOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_cv,T,typename boost::detail::cv_traits_imp<T*>::unqualified_type)
+BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_cv,T&,T&)
+#if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)
+BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_cv,T const[N],T type[N])
+BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_cv,T volatile[N],T type[N])
+BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_cv,T const volatile[N],T type[N])
+#endif
+
+#elif !BOOST_WORKAROUND(BOOST_MSVC,<=1300)
+
+namespace detail {
+template <typename T>
+struct remove_cv_impl
+{
+ typedef typename remove_volatile_impl<
+ typename remove_const_impl<T>::type
+ >::type type;
+};
+}
+
+BOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_cv,T,typename boost::detail::remove_cv_impl<T>::type)
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+} // namespace boost
+
+#include <boost/type_traits/detail/type_trait_undef.hpp>
+
+#endif // BOOST_TT_REMOVE_CV_HPP_INCLUDED
diff --git a/boost/boost/type_traits/remove_extent.hpp b/boost/boost/type_traits/remove_extent.hpp
new file mode 100644
index 00000000000..32dee6fe14f
--- /dev/null
+++ b/boost/boost/type_traits/remove_extent.hpp
@@ -0,0 +1,48 @@
+
+// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000-2005.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_REMOVE_EXTENT_HPP_INCLUDED
+#define BOOST_TT_REMOVE_EXTENT_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+#include <cstddef>
+
+#if BOOST_WORKAROUND(BOOST_MSVC,<=1300)
+#include <boost/type_traits/msvc/remove_extent.hpp>
+#endif
+
+// should be the last #include
+#include <boost/type_traits/detail/type_trait_def.hpp>
+
+#if !BOOST_WORKAROUND(BOOST_MSVC,<=1300)
+
+namespace boost {
+
+BOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_extent,T,T)
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)
+BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_extent,T[N],T type)
+BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_extent,T const[N],T const type)
+BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_extent,T volatile[N],T volatile type)
+BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_extent,T const volatile[N],T const volatile type)
+#if !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && !defined(__IBMCPP__) && !BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))
+BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_extent,T[],T)
+BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_extent,T const[],T const)
+BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_extent,T volatile[],T volatile)
+BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_extent,T const volatile[],T const volatile)
+#endif
+#endif
+
+} // namespace boost
+
+#endif
+
+#include <boost/type_traits/detail/type_trait_undef.hpp>
+
+#endif // BOOST_TT_REMOVE_BOUNDS_HPP_INCLUDED
diff --git a/boost/boost/type_traits/remove_pointer.hpp b/boost/boost/type_traits/remove_pointer.hpp
new file mode 100644
index 00000000000..53599928c10
--- /dev/null
+++ b/boost/boost/type_traits/remove_pointer.hpp
@@ -0,0 +1,43 @@
+
+// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_REMOVE_POINTER_HPP_INCLUDED
+#define BOOST_TT_REMOVE_POINTER_HPP_INCLUDED
+
+#include <boost/type_traits/broken_compiler_spec.hpp>
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+#if BOOST_WORKAROUND(BOOST_MSVC,<=1300)
+#include <boost/type_traits/msvc/remove_pointer.hpp>
+#endif
+
+// should be the last #include
+#include <boost/type_traits/detail/type_trait_def.hpp>
+
+namespace boost {
+
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+BOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_pointer,T,T)
+BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_pointer,T*,T)
+BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_pointer,T* const,T)
+BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_pointer,T* volatile,T)
+BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_pointer,T* const volatile,T)
+
+#elif !BOOST_WORKAROUND(BOOST_MSVC,<=1300)
+
+BOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_pointer,T,typename boost::detail::remove_pointer_impl<T>::type)
+
+#endif
+
+} // namespace boost
+
+#include <boost/type_traits/detail/type_trait_undef.hpp>
+
+#endif // BOOST_TT_REMOVE_POINTER_HPP_INCLUDED
diff --git a/boost/boost/type_traits/remove_reference.hpp b/boost/boost/type_traits/remove_reference.hpp
new file mode 100644
index 00000000000..3d0b7075ef1
--- /dev/null
+++ b/boost/boost/type_traits/remove_reference.hpp
@@ -0,0 +1,50 @@
+
+// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_REMOVE_REFERENCE_HPP_INCLUDED
+#define BOOST_TT_REMOVE_REFERENCE_HPP_INCLUDED
+
+#include <boost/type_traits/broken_compiler_spec.hpp>
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+#if BOOST_WORKAROUND(BOOST_MSVC,<=1300)
+#include <boost/type_traits/msvc/remove_reference.hpp>
+#endif
+
+// should be the last #include
+#include <boost/type_traits/detail/type_trait_def.hpp>
+
+namespace boost {
+
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+BOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_reference,T,T)
+BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_reference,T&,T)
+
+#if defined(__BORLANDC__) && (__BORLANDC__ < 0x600)
+// these are illegal specialisations; cv-qualifies applied to
+// references have no effect according to [8.3.2p1],
+// C++ Builder requires them though as it treats cv-qualified
+// references as distinct types...
+BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_reference,T& const,T)
+BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_reference,T& volatile,T)
+BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_reference,T& const volatile,T)
+#endif
+
+#elif !BOOST_WORKAROUND(BOOST_MSVC,<=1300)
+
+BOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_reference,T,typename boost::detail::remove_reference_impl<T>::type)
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+} // namespace boost
+
+#include <boost/type_traits/detail/type_trait_undef.hpp>
+
+#endif // BOOST_TT_REMOVE_REFERENCE_HPP_INCLUDED
diff --git a/boost/boost/type_traits/remove_volatile.hpp b/boost/boost/type_traits/remove_volatile.hpp
new file mode 100644
index 00000000000..723ebe35af4
--- /dev/null
+++ b/boost/boost/type_traits/remove_volatile.hpp
@@ -0,0 +1,77 @@
+
+// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard
+// Hinnant & John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+
+#ifndef BOOST_TT_REMOVE_VOLATILE_HPP_INCLUDED
+#define BOOST_TT_REMOVE_VOLATILE_HPP_INCLUDED
+
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/broken_compiler_spec.hpp>
+#include <boost/type_traits/detail/cv_traits_impl.hpp>
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+#include <cstddef>
+
+#if BOOST_WORKAROUND(BOOST_MSVC,<=1300)
+#include <boost/type_traits/msvc/remove_volatile.hpp>
+#endif
+
+// should be the last #include
+#include <boost/type_traits/detail/type_trait_def.hpp>
+
+namespace boost {
+
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace detail {
+
+template <typename T, bool is_const>
+struct remove_volatile_helper
+{
+ typedef T type;
+};
+
+template <typename T>
+struct remove_volatile_helper<T,true>
+{
+ typedef T const type;
+};
+
+template <typename T>
+struct remove_volatile_impl
+{
+ typedef typename remove_volatile_helper<
+ typename cv_traits_imp<T*>::unqualified_type
+ , ::boost::is_const<T>::value
+ >::type type;
+};
+
+} // namespace detail
+
+// * convert a type T to a non-volatile type - remove_volatile<T>
+
+BOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_volatile,T,typename boost::detail::remove_volatile_impl<T>::type)
+BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_volatile,T&,T&)
+#if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)
+BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_volatile,T volatile[N],T type[N])
+BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_2(typename T,std::size_t N,remove_volatile,T const volatile[N],T const type[N])
+#endif
+
+#elif !BOOST_WORKAROUND(BOOST_MSVC,<=1300)
+
+BOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_volatile,T,typename boost::detail::remove_volatile_impl<T>::type)
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+} // namespace boost
+
+#include <boost/type_traits/detail/type_trait_undef.hpp>
+
+#endif // BOOST_TT_REMOVE_VOLATILE_HPP_INCLUDED
diff --git a/boost/boost/type_traits/same_traits.hpp b/boost/boost/type_traits/same_traits.hpp
new file mode 100644
index 00000000000..dab7dac7830
--- /dev/null
+++ b/boost/boost/type_traits/same_traits.hpp
@@ -0,0 +1,15 @@
+// (C) Copyright Steve Cleary, Beman Dawes, Aleksey Gurtovoy, Howard Hinnant & John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+//
+// defines is_same:
+
+#ifndef BOOST_TT_SAME_TRAITS_HPP_INCLUDED
+#define BOOST_TT_SAME_TRAITS_HPP_INCLUDED
+
+#include <boost/type_traits/is_same.hpp>
+
+#endif // BOOST_TT_SAME_TRAITS_HPP_INCLUDED
diff --git a/boost/boost/type_traits/transform_traits.hpp b/boost/boost/type_traits/transform_traits.hpp
new file mode 100644
index 00000000000..7a82f1ca919
--- /dev/null
+++ b/boost/boost/type_traits/transform_traits.hpp
@@ -0,0 +1,21 @@
+// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+//
+// defines traits classes for transforming one type to another:
+// remove_reference, add_reference, remove_bounds, remove_pointer.
+//
+
+#ifndef BOOST_TT_TRANSFORM_TRAITS_HPP_INCLUDED
+#define BOOST_TT_TRANSFORM_TRAITS_HPP_INCLUDED
+
+#include <boost/type_traits/add_pointer.hpp>
+#include <boost/type_traits/add_reference.hpp>
+#include <boost/type_traits/remove_bounds.hpp>
+#include <boost/type_traits/remove_pointer.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+
+#endif // BOOST_TT_TRANSFORM_TRAITS_HPP_INCLUDED
diff --git a/boost/boost/type_traits/transform_traits_spec.hpp b/boost/boost/type_traits/transform_traits_spec.hpp
new file mode 100644
index 00000000000..851af3d39f1
--- /dev/null
+++ b/boost/boost/type_traits/transform_traits_spec.hpp
@@ -0,0 +1,14 @@
+
+// Copyright 2001 Aleksey Gurtovoy.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_TRANSFORM_TRAITS_SPEC_HPP_INCLUDED
+#define BOOST_TT_TRANSFORM_TRAITS_SPEC_HPP_INCLUDED
+
+#include <boost/type_traits/broken_compiler_spec.hpp>
+
+#endif // BOOST_TT_TRANSFORM_TRAITS_SPEC_HPP_INCLUDED
diff --git a/boost/boost/type_traits/type_with_alignment.hpp b/boost/boost/type_traits/type_with_alignment.hpp
new file mode 100644
index 00000000000..49816d28019
--- /dev/null
+++ b/boost/boost/type_traits/type_with_alignment.hpp
@@ -0,0 +1,288 @@
+// (C) Copyright John Maddock 2000.
+// 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).
+//
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_TYPE_WITH_ALIGNMENT_INCLUDED
+#define BOOST_TT_TYPE_WITH_ALIGNMENT_INCLUDED
+
+#include <boost/mpl/if.hpp>
+#include <boost/preprocessor/list/for_each_i.hpp>
+#include <boost/preprocessor/tuple/to_list.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/list/transform.hpp>
+#include <boost/preprocessor/list/append.hpp>
+#include <boost/type_traits/alignment_of.hpp>
+#include <boost/type_traits/is_pod.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/config.hpp>
+
+// should be the last #include
+#include <boost/type_traits/detail/bool_trait_def.hpp>
+
+#include <cstddef>
+
+#ifdef BOOST_MSVC
+# pragma warning(push)
+# pragma warning(disable: 4121) // alignment is sensitive to packing
+#endif
+
+namespace boost {
+
+#ifndef __BORLANDC__
+
+namespace detail {
+
+class alignment_dummy;
+typedef void (*function_ptr)();
+typedef int (alignment_dummy::*member_ptr);
+typedef int (alignment_dummy::*member_function_ptr)();
+
+#ifdef BOOST_HAS_LONG_LONG
+#define BOOST_TT_ALIGNMENT_BASE_TYPES BOOST_PP_TUPLE_TO_LIST( \
+ 12, ( \
+ char, short, int, long, ::boost::long_long_type, float, double, long double \
+ , void*, function_ptr, member_ptr, member_function_ptr))
+#else
+#define BOOST_TT_ALIGNMENT_BASE_TYPES BOOST_PP_TUPLE_TO_LIST( \
+ 11, ( \
+ char, short, int, long, float, double, long double \
+ , void*, function_ptr, member_ptr, member_function_ptr))
+#endif
+
+#define BOOST_TT_HAS_ONE_T(D,Data,T) boost::detail::has_one_T< T >
+
+#define BOOST_TT_ALIGNMENT_STRUCT_TYPES \
+ BOOST_PP_LIST_TRANSFORM(BOOST_TT_HAS_ONE_T, \
+ X, \
+ BOOST_TT_ALIGNMENT_BASE_TYPES)
+
+#define BOOST_TT_ALIGNMENT_TYPES \
+ BOOST_PP_LIST_APPEND(BOOST_TT_ALIGNMENT_BASE_TYPES, \
+ BOOST_TT_ALIGNMENT_STRUCT_TYPES)
+
+//
+// lower_alignment_helper --
+//
+// This template gets instantiated a lot, so use partial
+// specialization when available to reduce the compiler burden.
+//
+#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+template <bool found = true>
+struct lower_alignment_helper_impl
+{
+ template <std::size_t, class>
+ struct apply
+ {
+ typedef char type;
+ enum { value = true };
+ };
+};
+
+template <>
+struct lower_alignment_helper_impl<false>
+{
+ template <std::size_t target, class TestType>
+ struct apply
+ : mpl::if_c<(alignment_of<TestType>::value == target), TestType, char>
+ {
+ enum { value = (alignment_of<TestType>::value == target) };
+ };
+};
+
+template <bool found, std::size_t target, class TestType>
+struct lower_alignment_helper
+ : lower_alignment_helper_impl<found>::template apply<target,TestType>
+{
+};
+#else
+template <bool found, std::size_t target, class TestType>
+struct lower_alignment_helper
+{
+ typedef char type;
+ enum { value = true };
+};
+
+template <std::size_t target, class TestType>
+struct lower_alignment_helper<false,target,TestType>
+{
+ enum { value = (alignment_of<TestType>::value == target) };
+ typedef typename mpl::if_c<value, TestType, char>::type type;
+};
+#endif
+
+#define BOOST_TT_CHOOSE_MIN_ALIGNMENT(R,P,I,T) \
+ typename lower_alignment_helper< \
+ BOOST_PP_CAT(found,I),target,T \
+ >::type BOOST_PP_CAT(t,I); \
+ enum { \
+ BOOST_PP_CAT(found,BOOST_PP_INC(I)) \
+ = lower_alignment_helper<BOOST_PP_CAT(found,I),target,T >::value \
+ };
+
+#define BOOST_TT_CHOOSE_T(R,P,I,T) T BOOST_PP_CAT(t,I);
+
+template <typename T>
+struct has_one_T
+{
+ T data;
+};
+
+template <std::size_t target>
+union lower_alignment
+{
+ enum { found0 = false };
+
+ BOOST_PP_LIST_FOR_EACH_I(
+ BOOST_TT_CHOOSE_MIN_ALIGNMENT
+ , ignored
+ , BOOST_TT_ALIGNMENT_TYPES
+ )
+};
+
+union max_align
+{
+ BOOST_PP_LIST_FOR_EACH_I(
+ BOOST_TT_CHOOSE_T
+ , ignored
+ , BOOST_TT_ALIGNMENT_TYPES
+ )
+};
+
+#undef BOOST_TT_ALIGNMENT_BASE_TYPES
+#undef BOOST_TT_HAS_ONE_T
+#undef BOOST_TT_ALIGNMENT_STRUCT_TYPES
+#undef BOOST_TT_ALIGNMENT_TYPES
+#undef BOOST_TT_CHOOSE_MIN_ALIGNMENT
+#undef BOOST_TT_CHOOSE_T
+
+template<std::size_t TAlign, std::size_t Align>
+struct is_aligned
+{
+ BOOST_STATIC_CONSTANT(bool,
+ value = (TAlign >= Align) & (TAlign % Align == 0)
+ );
+};
+
+#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::detail::max_align,true)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::detail::lower_alignment<1> ,true)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::detail::lower_alignment<2> ,true)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::detail::lower_alignment<4> ,true)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::detail::lower_alignment<8> ,true)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::detail::lower_alignment<10> ,true)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::detail::lower_alignment<16> ,true)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::detail::lower_alignment<32> ,true)
+#endif
+
+} // namespace detail
+
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+template<std::size_t Align>
+struct is_pod< ::boost::detail::lower_alignment<Align> >
+{
+ BOOST_STATIC_CONSTANT(std::size_t, value = true);
+};
+#endif
+
+// This alignment method originally due to Brian Parker, implemented by David
+// Abrahams, and then ported here by Doug Gregor.
+template <std::size_t Align>
+class type_with_alignment
+{
+ typedef ::boost::detail::lower_alignment<Align> t1;
+ typedef typename mpl::if_c<
+ ::boost::detail::is_aligned< ::boost::alignment_of<t1>::value,Align >::value
+ , t1
+ , ::boost::detail::max_align
+ >::type align_t;
+
+ BOOST_STATIC_CONSTANT(std::size_t, found = alignment_of<align_t>::value);
+
+ BOOST_STATIC_ASSERT(found >= Align);
+ BOOST_STATIC_ASSERT(found % Align == 0);
+
+ public:
+ typedef align_t type;
+};
+
+#if defined(__GNUC__)
+namespace align {
+struct __attribute__((__aligned__(2))) a2 {};
+struct __attribute__((__aligned__(4))) a4 {};
+struct __attribute__((__aligned__(8))) a8 {};
+struct __attribute__((__aligned__(16))) a16 {};
+struct __attribute__((__aligned__(32))) a32 {};
+}
+
+template<> class type_with_alignment<1> { public: typedef char type; };
+template<> class type_with_alignment<2> { public: typedef align::a2 type; };
+template<> class type_with_alignment<4> { public: typedef align::a4 type; };
+template<> class type_with_alignment<8> { public: typedef align::a8 type; };
+template<> class type_with_alignment<16> { public: typedef align::a16 type; };
+template<> class type_with_alignment<32> { public: typedef align::a32 type; };
+
+namespace detail {
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a2,true)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a4,true)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a8,true)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a16,true)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a32,true)
+}
+#endif
+
+#else
+
+//
+// Borland specific version, we have this for two reasons:
+// 1) The version above doesn't always compile (with the new test cases for example)
+// 2) Because of Borlands #pragma option we can create types with alignments that are
+// greater that the largest aligned builtin type.
+
+namespace align{
+#pragma option push -a16
+struct a2{ short s; };
+struct a4{ int s; };
+struct a8{ double s; };
+struct a16{ long double s; };
+#pragma option pop
+}
+
+namespace detail {
+
+typedef ::boost::align::a16 max_align;
+
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a2,true)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a4,true)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a8,true)
+BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(is_pod,::boost::align::a16,true)
+}
+
+template <std::size_t N> struct type_with_alignment
+{
+ // We should never get to here, but if we do use the maximally
+ // aligned type:
+ // BOOST_STATIC_ASSERT(0);
+ typedef align::a16 type;
+};
+template <> struct type_with_alignment<1>{ typedef char type; };
+template <> struct type_with_alignment<2>{ typedef align::a2 type; };
+template <> struct type_with_alignment<4>{ typedef align::a4 type; };
+template <> struct type_with_alignment<8>{ typedef align::a8 type; };
+template <> struct type_with_alignment<16>{ typedef align::a16 type; };
+
+#endif
+
+} // namespace boost
+
+#ifdef BOOST_MSVC
+# pragma warning(pop)
+#endif
+
+#include <boost/type_traits/detail/bool_trait_undef.hpp>
+
+#endif // BOOST_TT_TYPE_WITH_ALIGNMENT_INCLUDED
+
+
diff --git a/boost/boost/typeof/encode_decode.hpp b/boost/boost/typeof/encode_decode.hpp
new file mode 100644
index 00000000000..e5d1be9f3b3
--- /dev/null
+++ b/boost/boost/typeof/encode_decode.hpp
@@ -0,0 +1,57 @@
+// Copyright (C) 2004 Arkadiy Vertleyb
+// 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)
+
+// boostinspect:nounnamed
+
+#ifndef BOOST_TYPEOF_ENCODE_DECODE_HPP_INCLUDED
+#define BOOST_TYPEOF_ENCODE_DECODE_HPP_INCLUDED
+
+#include <boost/mpl/deref.hpp>
+#include <boost/mpl/next.hpp>
+
+#ifndef BOOST_TYPEOF_SUPPRESS_UNNAMED_NAMESPACE
+
+# define BOOST_TYPEOF_BEGIN_ENCODE_NS namespace { namespace boost_typeof {
+# define BOOST_TYPEOF_END_ENCODE_NS }}
+# define BOOST_TYPEOF_ENCODE_NS_QUALIFIER boost_typeof
+
+#else
+
+# define BOOST_TYPEOF_BEGIN_ENCODE_NS namespace boost { namespace type_of {
+# define BOOST_TYPEOF_END_ENCODE_NS }}
+# define BOOST_TYPEOF_ENCODE_NS_QUALIFIER boost::type_of
+
+# define BOOST_TYPEOF_TEXT "unnamed namespace is off"
+# include <boost/typeof/message.hpp>
+
+#endif
+
+BOOST_TYPEOF_BEGIN_ENCODE_NS
+
+template<class V, class Type_Not_Registered_With_Typeof_System>
+struct encode_type_impl;
+
+template<class T, class Iter>
+struct decode_type_impl
+{
+ typedef int type; // MSVC ETI workaround
+};
+
+BOOST_TYPEOF_END_ENCODE_NS
+
+namespace boost { namespace type_of {
+
+ template<class V, class T>
+ struct encode_type : BOOST_TYPEOF_ENCODE_NS_QUALIFIER::encode_type_impl<V, T>
+ {};
+
+ template<class Iter>
+ struct decode_type : BOOST_TYPEOF_ENCODE_NS_QUALIFIER::decode_type_impl<
+ typename Iter::type,
+ typename Iter::next
+ >
+ {};
+}}
+
+#endif//BOOST_TYPEOF_ENCODE_DECODE_HPP_INCLUDED
diff --git a/boost/boost/typeof/encode_decode_params.hpp b/boost/boost/typeof/encode_decode_params.hpp
new file mode 100644
index 00000000000..640bfdc2a65
--- /dev/null
+++ b/boost/boost/typeof/encode_decode_params.hpp
@@ -0,0 +1,34 @@
+// Copyright (C) 2005 Arkadiy Vertleyb
+// 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_TYPEOF_ENCODE_DECODE_PARAMS_HPP_INCLUDED
+#define BOOST_TYPEOF_ENCODE_DECODE_PARAMS_HPP_INCLUDED
+
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/repetition/repeat.hpp>
+
+// Assumes iter0 contains initial iterator
+
+#define BOOST_TYPEOF_DECODE_PARAM(z, n, text) \
+ typedef boost::type_of::decode_type<iter##n> decode##n; \
+ typedef typename decode##n::type p##n; \
+ typedef typename decode##n::iter BOOST_PP_CAT(iter, BOOST_PP_INC(n));
+
+#define BOOST_TYPEOF_DECODE_PARAMS(n)\
+ BOOST_PP_REPEAT(n, BOOST_TYPEOF_DECODE_PARAM, ~)
+
+// The P0, P1, ... PN are encoded and added to V
+
+#define BOOST_TYPEOF_ENCODE_PARAMS_BEGIN(z, n, text)\
+ typename boost::type_of::encode_type<
+
+#define BOOST_TYPEOF_ENCODE_PARAMS_END(z, n, text)\
+ , BOOST_PP_CAT(P, n)>::type
+
+#define BOOST_TYPEOF_ENCODE_PARAMS(n, ID) \
+ BOOST_PP_REPEAT(n, BOOST_TYPEOF_ENCODE_PARAMS_BEGIN, ~) \
+ typename boost::type_of::push_back<V, boost::mpl::size_t<ID> >::type \
+ BOOST_PP_REPEAT(n, BOOST_TYPEOF_ENCODE_PARAMS_END, ~)
+
+#endif//BOOST_TYPEOF_ENCODE_DECODE_PARAMS_HPP_INCLUDED
diff --git a/boost/boost/typeof/incr_registration_group.hpp b/boost/boost/typeof/incr_registration_group.hpp
new file mode 100644
index 00000000000..6f4803aab55
--- /dev/null
+++ b/boost/boost/typeof/incr_registration_group.hpp
@@ -0,0 +1,14 @@
+// Copyright (C) 2004, 2005 Arkadiy Vertleyb
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
+
+// Inclusion of this file increments BOOST_TYPEOF_REGISTRATION_GROUP
+// This method was suggested by Paul Mensonides
+
+#ifdef BOOST_TYPEOF_EMULATION
+# undef BOOST_TYPEOF_REGISTRATION_GROUP
+
+# include <boost/preprocessor/slot/counter.hpp>
+# include BOOST_PP_UPDATE_COUNTER()
+# define BOOST_TYPEOF_REGISTRATION_GROUP BOOST_PP_COUNTER
+#endif
diff --git a/boost/boost/typeof/int_encoding.hpp b/boost/boost/typeof/int_encoding.hpp
new file mode 100644
index 00000000000..552c250471a
--- /dev/null
+++ b/boost/boost/typeof/int_encoding.hpp
@@ -0,0 +1,116 @@
+// Copyright (C) 2004 Arkadiy Vertleyb
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_INT_ENCODING_HPP_INCLUDED
+#define BOOST_TYPEOF_INT_ENCODING_HPP_INCLUDED
+
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/size_t.hpp>
+
+namespace boost { namespace type_of {
+
+ template<class T> struct get_unsigned
+ {
+ typedef T type;
+ };
+ template<> struct get_unsigned<signed char>
+ {
+ typedef unsigned char type;
+ };
+ template<> struct get_unsigned<char>
+ {
+ typedef unsigned char type;
+ };
+ template<> struct get_unsigned<short>
+ {
+ typedef unsigned short type;
+ };
+ template<> struct get_unsigned<int>
+ {
+ typedef unsigned int type;
+ };
+ template<> struct get_unsigned<long>
+ {
+ typedef unsigned long type;
+ };
+
+ //////////////////////////
+
+ template<std::size_t n, bool Overflow>
+ struct pack
+ {
+ enum {value = (n + 1) * 2 + (Overflow ? 1 : 0)};
+ };
+
+ template<std::size_t m>
+ struct unpack
+ {
+ enum {value = (m / 2) - 1};
+ enum {overflow = (m % 2 == 1)};
+ };
+
+ ////////////////////////////////
+
+ template<class V, std::size_t n, bool overflow = (n >= 0x3fffffff)>
+ struct encode_size_t : push_back<
+ V,
+ boost::mpl::size_t<pack<n, false>::value>
+ >
+ {};
+
+ template<class V, std::size_t n>
+ struct encode_size_t<V, n, true> : push_back<typename push_back<
+ V,
+ boost::mpl::size_t<pack<n % 0x3ffffffe, true>::value> >::type,
+ boost::mpl::size_t<n / 0x3ffffffe>
+ >
+ {};
+
+ template<class V, class T, T n>
+ struct encode_integral : encode_size_t< V, (typename get_unsigned<T>::type)n,(((typename get_unsigned<T>::type)n)>=0x3fffffff) >
+ {};
+
+ template<class V, bool b>
+ struct encode_integral<V, bool, b> : encode_size_t< V, b?1:0, false>
+ {};
+ ///////////////////////////
+
+ template<std::size_t n, class Iter, bool overflow>
+ struct decode_size_t;
+
+ template<std::size_t n, class Iter>
+ struct decode_size_t<n, Iter, false>
+ {
+ enum {value = n};
+ typedef Iter iter;
+ };
+
+ template<std::size_t n, class Iter>
+ struct decode_size_t<n, Iter, true>
+ {
+ enum {m = Iter::type::value};
+
+ enum {value = (std::size_t)m * 0x3ffffffe + n};
+ typedef typename Iter::next iter;
+ };
+
+ template<class T, class Iter>
+ struct decode_integral
+ {
+ enum {m = Iter::type::value};
+
+ enum {n = unpack<m>::value};
+
+ enum {overflow = unpack<m>::overflow};
+
+ typedef typename Iter::next nextpos;
+
+ static const T value = (T)(std::size_t)decode_size_t<n, nextpos, overflow>::value;
+
+ typedef typename decode_size_t<n, nextpos, overflow>::iter iter;
+ };
+
+}}//namespace
+
+#endif//BOOST_TYPEOF_INT_ENCODING_HPP_INCLUDED
diff --git a/boost/boost/typeof/integral_template_param.hpp b/boost/boost/typeof/integral_template_param.hpp
new file mode 100644
index 00000000000..8543be7f080
--- /dev/null
+++ b/boost/boost/typeof/integral_template_param.hpp
@@ -0,0 +1,80 @@
+// Copyright (C) 2005 Arkadiy Vertleyb
+// 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_TYPEOF_INTEGRAL_TEMPLATE_PARAM_HPP_INCLUDED
+#define BOOST_TYPEOF_INTEGRAL_TEMPLATE_PARAM_HPP_INCLUDED
+
+#define BOOST_TYPEOF_unsigned (unsigned)
+#define BOOST_TYPEOF_signed (signed)
+
+#define char_BOOST_TYPEOF (char)
+#define short_BOOST_TYPEOF (short)
+#define int_BOOST_TYPEOF (int)
+#define long_BOOST_TYPEOF (long)
+
+#define BOOST_TYPEOF_char_BOOST_TYPEOF (char)
+#define BOOST_TYPEOF_short_BOOST_TYPEOF (short)
+#define BOOST_TYPEOF_int_BOOST_TYPEOF (int)
+#define BOOST_TYPEOF_long_BOOST_TYPEOF (long)
+#define BOOST_TYPEOF_bool_BOOST_TYPEOF (bool)
+#define BOOST_TYPEOF_unsigned_BOOST_TYPEOF (unsigned)
+#define BOOST_TYPEOF_size_t_BOOST_TYPEOF (size_t)
+
+#define BOOST_TYPEOF_MAKE_OBJ_char BOOST_TYPEOF_INTEGRAL_PARAM(char)
+#define BOOST_TYPEOF_MAKE_OBJ_short BOOST_TYPEOF_INTEGRAL_PARAM(short)
+#define BOOST_TYPEOF_MAKE_OBJ_int BOOST_TYPEOF_INTEGRAL_PARAM(int)
+#define BOOST_TYPEOF_MAKE_OBJ_long BOOST_TYPEOF_INTEGRAL_PARAM(long)
+#define BOOST_TYPEOF_MAKE_OBJ_bool BOOST_TYPEOF_INTEGRAL_PARAM(bool)
+#define BOOST_TYPEOF_MAKE_OBJ_unsigned BOOST_TYPEOF_INTEGRAL_PARAM(unsigned)
+#define BOOST_TYPEOF_MAKE_OBJ_size_t BOOST_TYPEOF_INTEGRAL_PARAM(size_t)
+#define BOOST_TYPEOF_MAKE_OBJ_unsignedchar BOOST_TYPEOF_INTEGRAL_PARAM(unsigned char)
+#define BOOST_TYPEOF_MAKE_OBJ_unsignedshort BOOST_TYPEOF_INTEGRAL_PARAM(unsigned short)
+#define BOOST_TYPEOF_MAKE_OBJ_unsignedint BOOST_TYPEOF_INTEGRAL_PARAM(unsigned int)
+#define BOOST_TYPEOF_MAKE_OBJ_unsignedlong BOOST_TYPEOF_INTEGRAL_PARAM(unsigned long)
+#define BOOST_TYPEOF_MAKE_OBJ_signedchar BOOST_TYPEOF_INTEGRAL_PARAM(signed char)
+#define BOOST_TYPEOF_MAKE_OBJ_signedshort BOOST_TYPEOF_INTEGRAL_PARAM(signed short)
+#define BOOST_TYPEOF_MAKE_OBJ_signedint BOOST_TYPEOF_INTEGRAL_PARAM(signed int)
+#define BOOST_TYPEOF_MAKE_OBJ_signedlong BOOST_TYPEOF_INTEGRAL_PARAM(signed long)
+#define BOOST_TYPEOF_MAKE_OBJ_integral(x) BOOST_TYPEOF_INTEGRAL_PARAM(x)
+
+#define BOOST_TYPEOF_INTEGRAL(X) integral(X) BOOST_TYPEOF_EAT
+#define BOOST_TYPEOF_EAT_BOOST_TYPEOF
+#define BOOST_TYPEOF_integral(X) (integral(X))
+
+#define BOOST_TYPEOF_INTEGRAL_PARAM(Type)\
+ (INTEGRAL_PARAM)\
+ (Type)
+
+#define BOOST_TYPEOF_INTEGRAL_PARAM_GETTYPE(Param)\
+ BOOST_PP_SEQ_ELEM(1, Param)
+
+#define BOOST_TYPEOF_INTEGRAL_PARAM_EXPANDTYPE(Param)\
+ BOOST_TYPEOF_INTEGRAL_PARAM_GETTYPE(Param)
+
+// INTEGRAL_PARAM "virtual functions" implementation
+
+#define BOOST_TYPEOF_INTEGRAL_PARAM_ENCODE(This, n)\
+ typedef typename boost::type_of::encode_integral<\
+ BOOST_PP_CAT(V, n),\
+ BOOST_TYPEOF_INTEGRAL_PARAM_GETTYPE(This),\
+ BOOST_PP_CAT(P, n)\
+ >::type BOOST_PP_CAT(V, BOOST_PP_INC(n));
+
+#define BOOST_TYPEOF_INTEGRAL_PARAM_DECODE(This, n)\
+ typedef boost::type_of::decode_integral<BOOST_TYPEOF_INTEGRAL_PARAM_GETTYPE(This), BOOST_PP_CAT(iter, n)> BOOST_PP_CAT(d, n);\
+ static const BOOST_TYPEOF_INTEGRAL_PARAM_GETTYPE(This) BOOST_PP_CAT(P, n) = BOOST_PP_CAT(d, n)::value;\
+ typedef typename BOOST_PP_CAT(d, n)::iter BOOST_PP_CAT(iter, BOOST_PP_INC(n));
+
+#define BOOST_TYPEOF_INTEGRAL_PARAM_PLACEHOLDER(Param)\
+ (BOOST_TYPEOF_INTEGRAL_PARAM_GETTYPE(Param))0
+
+#define BOOST_TYPEOF_INTEGRAL_PARAM_DECLARATION_TYPE(Param)\
+ BOOST_TYPEOF_INTEGRAL_PARAM_GETTYPE(Param)
+
+#define BOOST_TYPEOF_INTEGRAL_PARAM_PLACEHOLDER_TYPES(Param, n)\
+ BOOST_PP_CAT(T,n)
+
+#define BOOST_TYPEOF_INTEGRAL_PARAM_ISTEMPLATE 0
+
+#endif//BOOST_TYPEOF_INTEGRAL_TEMPLATE_PARAM_HPP_INCLUDED
diff --git a/boost/boost/typeof/message.hpp b/boost/boost/typeof/message.hpp
new file mode 100644
index 00000000000..1471ef38e38
--- /dev/null
+++ b/boost/boost/typeof/message.hpp
@@ -0,0 +1,8 @@
+// Copyright (C) 2005 Arkadiy Vertleyb
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
+
+#if defined(_MSC_VER) && !defined BOOST_TYPEOF_SILENT
+# pragma message(BOOST_TYPEOF_TEXT)
+#endif
+#undef BOOST_TYPEOF_TEXT
diff --git a/boost/boost/typeof/modifiers.hpp b/boost/boost/typeof/modifiers.hpp
new file mode 100644
index 00000000000..cfb276bcc2a
--- /dev/null
+++ b/boost/boost/typeof/modifiers.hpp
@@ -0,0 +1,92 @@
+// Copyright (C) 2004 Arkadiy Vertleyb
+// 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_TYPEOF_MODIFIERS_HPP_INCLUDED
+#define BOOST_TYPEOF_MODIFIERS_HPP_INCLUDED
+
+#include <boost/typeof/encode_decode.hpp>
+#include <boost/preprocessor/facilities/identity.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+// modifiers
+
+#define BOOST_TYPEOF_modifier_support(ID, Fun)\
+ template<class V, class T> struct encode_type_impl<V, Fun(T)>\
+ {\
+ typedef\
+ typename boost::type_of::encode_type<\
+ typename boost::type_of::push_back<\
+ V\
+ , boost::mpl::size_t<ID> >::type\
+ , T>::type\
+ type;\
+ };\
+ template<class Iter> struct decode_type_impl<boost::mpl::size_t<ID>, Iter>\
+ {\
+ typedef boost::type_of::decode_type<Iter> d1;\
+ typedef Fun(typename d1::type) type;\
+ typedef typename d1::iter iter;\
+ }
+
+#define BOOST_TYPEOF_const_fun(T) const T
+#define BOOST_TYPEOF_volatile_fun(T) volatile T
+#define BOOST_TYPEOF_volatile_const_fun(T) volatile const T
+#define BOOST_TYPEOF_pointer_fun(T) T*
+#define BOOST_TYPEOF_reference_fun(T) T&
+
+BOOST_TYPEOF_BEGIN_ENCODE_NS
+
+BOOST_TYPEOF_modifier_support(BOOST_TYPEOF_UNIQUE_ID(), BOOST_TYPEOF_const_fun);
+BOOST_TYPEOF_modifier_support(BOOST_TYPEOF_UNIQUE_ID(), BOOST_TYPEOF_volatile_fun);
+BOOST_TYPEOF_modifier_support(BOOST_TYPEOF_UNIQUE_ID(), BOOST_TYPEOF_volatile_const_fun);
+BOOST_TYPEOF_modifier_support(BOOST_TYPEOF_UNIQUE_ID(), BOOST_TYPEOF_pointer_fun);
+BOOST_TYPEOF_modifier_support(BOOST_TYPEOF_UNIQUE_ID(), BOOST_TYPEOF_reference_fun);
+
+BOOST_TYPEOF_END_ENCODE_NS
+
+#undef BOOST_TYPEOF_modifier_support
+#undef BOOST_TYPEOF_const_fun
+#undef BOOST_TYPEOF_volatile_fun
+#undef BOOST_TYPEOF_volatile_const_fun
+#undef BOOST_TYPEOF_pointer_fun
+#undef BOOST_TYPEOF_reference_fun
+
+// arrays
+
+#define BOOST_TYPEOF_array_support(ID, Qualifier)\
+ template<class V, class T, int N>\
+ struct encode_type_impl<V, Qualifier() T[N]>\
+ {\
+ typedef\
+ typename boost::type_of::encode_type<\
+ typename boost::type_of::push_back<\
+ typename boost::type_of::push_back<\
+ V\
+ , boost::mpl::size_t<ID> >::type\
+ , boost::mpl::size_t<N> >::type\
+ , T>::type\
+ type;\
+ };\
+ template<class Iter>\
+ struct decode_type_impl<boost::mpl::size_t<ID>, Iter>\
+ {\
+ enum{n = Iter::type::value};\
+ typedef boost::type_of::decode_type<typename Iter::next> d;\
+ typedef typename d::type Qualifier() type[n];\
+ typedef typename d::iter iter;\
+ }
+
+BOOST_TYPEOF_BEGIN_ENCODE_NS
+
+BOOST_TYPEOF_array_support(BOOST_TYPEOF_UNIQUE_ID(), BOOST_PP_EMPTY);
+BOOST_TYPEOF_array_support(BOOST_TYPEOF_UNIQUE_ID(), BOOST_PP_IDENTITY(const));
+BOOST_TYPEOF_array_support(BOOST_TYPEOF_UNIQUE_ID(), BOOST_PP_IDENTITY(volatile));
+BOOST_TYPEOF_array_support(BOOST_TYPEOF_UNIQUE_ID(), BOOST_PP_IDENTITY(volatile const));
+
+BOOST_TYPEOF_END_ENCODE_NS
+
+#undef BOOST_TYPEOF_array_support
+
+#endif//BOOST_TYPEOF_MODIFIERS_HPP_INCLUDED
diff --git a/boost/boost/typeof/msvc/typeof_impl.hpp b/boost/boost/typeof/msvc/typeof_impl.hpp
new file mode 100644
index 00000000000..3ce354442f5
--- /dev/null
+++ b/boost/boost/typeof/msvc/typeof_impl.hpp
@@ -0,0 +1,198 @@
+
+// Copyright (C) 2005 Igor Chesnokov, mailto:ichesnokov@gmail.com
+// Copyright (C) 2005 Peder Holt
+
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_MSVC_TYPEOF_IMPL_HPP_INCLUDED
+# define BOOST_TYPEOF_MSVC_TYPEOF_IMPL_HPP_INCLUDED
+
+# include <boost/config.hpp>
+# include <boost/detail/workaround.hpp>
+# include <boost/mpl/int.hpp>
+# include <boost/type_traits/is_function.hpp>
+# include <boost/utility/enable_if.hpp>
+
+namespace boost
+{
+ namespace type_of
+ {
+
+ //Compile time constant code
+# if BOOST_WORKAROUND(BOOST_MSVC,>=1300) && defined(_MSC_EXTENSIONS)
+ template<int N> struct the_counter;
+
+ template<typename T,int N = 5/*for similarity*/>
+ struct encode_counter
+ {
+ __if_exists(the_counter<N + 256>)
+ {
+ BOOST_STATIC_CONSTANT(unsigned,count=(encode_counter<T,N + 257>::count));
+ }
+ __if_not_exists(the_counter<N + 256>)
+ {
+ __if_exists(the_counter<N + 64>)
+ {
+ BOOST_STATIC_CONSTANT(unsigned,count=(encode_counter<T,N + 65>::count));
+ }
+ __if_not_exists(the_counter<N + 64>)
+ {
+ __if_exists(the_counter<N + 16>)
+ {
+ BOOST_STATIC_CONSTANT(unsigned,count=(encode_counter<T,N + 17>::count));
+ }
+ __if_not_exists(the_counter<N + 16>)
+ {
+ __if_exists(the_counter<N + 4>)
+ {
+ BOOST_STATIC_CONSTANT(unsigned,count=(encode_counter<T,N + 5>::count));
+ }
+ __if_not_exists(the_counter<N + 4>)
+ {
+ __if_exists(the_counter<N>)
+ {
+ BOOST_STATIC_CONSTANT(unsigned,count=(encode_counter<T,N + 1>::count));
+ }
+ __if_not_exists(the_counter<N>)
+ {
+ BOOST_STATIC_CONSTANT(unsigned,count=N);
+ typedef the_counter<N> type;
+ }
+ }
+ }
+ }
+ }
+ };
+
+# define BOOST_TYPEOF_INDEX(T) (encode_counter<T>::count)
+# define BOOST_TYPEOF_NEXT_INDEX(next)
+# else
+ template<int N> struct encode_counter : encode_counter<N - 1> {};
+ template<> struct encode_counter<0> {};
+
+ //Need to default to a larger value than 4, as due to MSVC's ETI errors. (sizeof(int)==4)
+ char (*encode_index(...))[5];
+
+# define BOOST_TYPEOF_INDEX(T) (sizeof(*boost::type_of::encode_index((boost::type_of::encode_counter<1005>*)0)))
+# define BOOST_TYPEOF_NEXT_INDEX(next) friend char (*encode_index(encode_counter<next>*))[next];
+# endif
+
+ //Typeof code
+
+# if BOOST_WORKAROUND(BOOST_MSVC,==1300)
+ template<typename ID>
+ struct msvc_extract_type
+ {
+ template<bool>
+ struct id2type_impl;
+
+ typedef id2type_impl<true> id2type;
+ };
+
+ template<typename T, typename ID>
+ struct msvc_register_type : msvc_extract_type<ID>
+ {
+ template<>
+ struct id2type_impl<true> //VC7.0 specific bugfeature
+ {
+ typedef T type;
+ };
+ };
+# else
+ template<typename ID>
+ struct msvc_extract_type
+ {
+ struct id2type;
+ };
+
+ template<typename T, typename ID>
+ struct msvc_register_type : msvc_extract_type<ID>
+ {
+ typedef msvc_extract_type<ID> base_type;
+ struct base_type::id2type // This uses nice VC6.5 and VC7.1 bugfeature
+ {
+ typedef T type;
+ };
+ };
+# endif
+
+ template<int ID>
+ struct msvc_typeid_wrapper {
+ typedef typename msvc_extract_type<mpl::int_<ID> >::id2type id2type;
+ typedef typename id2type::type type;
+ };
+ //Workaround for ETI-bug for VC6 and VC7
+ template<>
+ struct msvc_typeid_wrapper<1> {
+ typedef msvc_typeid_wrapper<1> type;
+ };
+ //Workaround for ETI-bug for VC7.1
+ template<>
+ struct msvc_typeid_wrapper<4> {
+ typedef msvc_typeid_wrapper<4> type;
+ };
+
+ //Tie it all together
+ template<typename T>
+ struct encode_type
+ {
+ //Get the next available compile time constants index
+ BOOST_STATIC_CONSTANT(unsigned,value=BOOST_TYPEOF_INDEX(T));
+ //Instantiate the template
+ typedef typename msvc_register_type<T,mpl::int_<value> >::id2type type;
+ //Set the next compile time constants index
+ BOOST_STATIC_CONSTANT(unsigned,next=value+1);
+ //Increment the compile time constant (only needed when extensions are not active
+ BOOST_TYPEOF_NEXT_INDEX(next);
+ };
+
+ template<class T>
+ struct sizer
+ {
+ typedef char(*type)[encode_type<T>::value];
+ };
+
+# ifdef BOOST_NO_SFINAE
+
+ template<typename T>
+ typename sizer<T>::type encode_start(T const&);
+
+# else
+
+ template<typename T> typename disable_if<
+ typename is_function<T>::type,
+ typename sizer<T>::type>::type encode_start(T const&);
+
+ template<typename T> typename enable_if<
+ typename is_function<T>::type,
+ typename sizer<T>::type>::type encode_start(T&);
+
+# endif
+ }
+}
+
+# define BOOST_TYPEOF(expr) \
+ boost::type_of::msvc_typeid_wrapper<sizeof(*boost::type_of::encode_start(expr))>::type
+
+# define BOOST_TYPEOF_TPL(expr) typename BOOST_TYPEOF(expr)
+
+# define BOOST_TYPEOF_NESTED_TYPEDEF_TPL(name,expr) \
+ struct name {\
+ template<typename T>\
+ static boost::type_of::msvc_register_type<T,name> _typeof_register_function(const T&);\
+ BOOST_STATIC_CONSTANT(int,_typeof_register_value=sizeof(_typeof_register_function(expr)));\
+ typedef typename boost::type_of::msvc_extract_type<name>::id2type id2type;\
+ typedef typename id2type::type type;\
+ };
+
+# define BOOST_TYPEOF_NESTED_TYPEDEF(name,expr) \
+ struct name {\
+ template<typename T>\
+ static boost::type_of::msvc_register_type<T,name> _typeof_register_function(const T&);\
+ BOOST_STATIC_CONSTANT(int,_typeof_register_value=sizeof(_typeof_register_function(expr)));\
+ typedef boost::type_of::msvc_extract_type<name>::id2type id2type;\
+ typedef id2type::type type;\
+ };
+
+#endif//BOOST_TYPEOF_MSVC_TYPEOF_IMPL_HPP_INCLUDED
diff --git a/boost/boost/typeof/native.hpp b/boost/boost/typeof/native.hpp
new file mode 100644
index 00000000000..8197e28669d
--- /dev/null
+++ b/boost/boost/typeof/native.hpp
@@ -0,0 +1,60 @@
+// Copyright (C) 2006 Arkadiy Vertleyb
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_NATIVE_HPP_INCLUDED
+#define BOOST_TYPEOF_NATIVE_HPP_INCLUDED
+
+#ifndef MSVC_TYPEOF_HACK
+
+#ifdef BOOST_NO_SFINAE
+
+namespace boost { namespace type_of {
+
+ template<class T>
+ T& ensure_obj(const T&);
+
+}}
+
+#else
+
+#include <boost/type_traits/is_function.hpp>
+#include <boost/utility/enable_if.hpp>
+
+namespace boost { namespace type_of {
+# ifdef BOOST_NO_SFINAE
+ template<class T>
+ T& ensure_obj(const T&);
+# else
+ template<typename T>
+ typename enable_if<is_function<T>, T&>::type
+ ensure_obj(T&);
+
+ template<typename T>
+ typename disable_if<is_function<T>, T&>::type
+ ensure_obj(const T&);
+# endif
+}}
+
+#endif//BOOST_NO_SFINAE
+
+#define BOOST_TYPEOF(expr) BOOST_TYPEOF_KEYWORD(boost::type_of::ensure_obj(expr))
+#define BOOST_TYPEOF_TPL BOOST_TYPEOF
+
+#define BOOST_TYPEOF_NESTED_TYPEDEF_TPL(name,expr) \
+ struct name {\
+ typedef BOOST_TYPEOF_TPL(expr) type;\
+ };
+
+#define BOOST_TYPEOF_NESTED_TYPEDEF(name,expr) \
+ struct name {\
+ typedef BOOST_TYPEOF(expr) type;\
+ };
+
+#endif//MSVC_TYPEOF_HACK
+
+#define BOOST_TYPEOF_REGISTER_TYPE(x)
+#define BOOST_TYPEOF_REGISTER_TEMPLATE(x, params)
+
+#endif//BOOST_TYPEOF_NATIVE_HPP_INCLUDED
+
diff --git a/boost/boost/typeof/pointers_data_members.hpp b/boost/boost/typeof/pointers_data_members.hpp
new file mode 100644
index 00000000000..69415b68986
--- /dev/null
+++ b/boost/boost/typeof/pointers_data_members.hpp
@@ -0,0 +1,39 @@
+// Copyright (C) 2004 Arkadiy Vertleyb
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_POINTERS_DATA_MEMBERS_HPP_INCLUDED
+#define BOOST_TYPEOF_POINTERS_DATA_MEMBERS_HPP_INCLUDED
+
+#include <boost/typeof/encode_decode_params.hpp>
+#include <boost/typeof/encode_decode.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_BEGIN_ENCODE_NS
+
+enum {PTR_DATA_MEM_ID = BOOST_TYPEOF_UNIQUE_ID()};
+
+template<class V, class P0, class P1>
+struct encode_type_impl<V, P0 P1::*>
+{
+ typedef BOOST_TYPEOF_ENCODE_PARAMS(2, PTR_DATA_MEM_ID) type;
+};
+
+template<class Iter>
+struct decode_type_impl<boost::mpl::size_t<PTR_DATA_MEM_ID>, Iter>
+{
+ typedef Iter iter0;
+ BOOST_TYPEOF_DECODE_PARAMS(2)
+
+ template<class T> struct workaround{
+ typedef p0 T::* type;
+ };
+
+ typedef typename workaround<p1>::type type;
+ typedef iter2 iter;
+};
+
+BOOST_TYPEOF_END_ENCODE_NS
+
+#endif//BOOST_TYPEOF_POINTERS_DATA_MEMBERS_HPP_INCLUDED
diff --git a/boost/boost/typeof/register_functions.hpp b/boost/boost/typeof/register_functions.hpp
new file mode 100644
index 00000000000..2af7cecb715
--- /dev/null
+++ b/boost/boost/typeof/register_functions.hpp
@@ -0,0 +1,43 @@
+// Copyright (C) 2004 Arkadiy Vertleyb
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_REGISTER_FUNCTIONS_HPP_INCLUDED
+#define BOOST_TYPEOF_REGISTER_FUNCTIONS_HPP_INCLUDED
+
+#include <boost/preprocessor/repetition/enum.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_trailing_params.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/inc.hpp>
+#include <boost/preprocessor/dec.hpp>
+#include <boost/preprocessor/if.hpp>
+#include <boost/preprocessor/arithmetic/add.hpp>
+#include <boost/preprocessor/iteration/iterate.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+#ifndef BOOST_TYPEOF_LIMIT_FUNCTION_ARITY
+#define BOOST_TYPEOF_LIMIT_FUNCTION_ARITY 10
+#endif
+
+enum
+{
+ FUN_ID = BOOST_TYPEOF_UNIQUE_ID(),
+ FUN_PTR_ID = FUN_ID + 1 * BOOST_PP_INC(BOOST_TYPEOF_LIMIT_FUNCTION_ARITY),
+ FUN_REF_ID = FUN_ID + 2 * BOOST_PP_INC(BOOST_TYPEOF_LIMIT_FUNCTION_ARITY),
+ MEM_FUN_ID = FUN_ID + 3 * BOOST_PP_INC(BOOST_TYPEOF_LIMIT_FUNCTION_ARITY),
+ CONST_MEM_FUN_ID = FUN_ID + 4 * BOOST_PP_INC(BOOST_TYPEOF_LIMIT_FUNCTION_ARITY),
+ VOLATILE_MEM_FUN_ID = FUN_ID + 5 * BOOST_PP_INC(BOOST_TYPEOF_LIMIT_FUNCTION_ARITY),
+ VOLATILE_CONST_MEM_FUN_ID = FUN_ID + 6 * BOOST_PP_INC(BOOST_TYPEOF_LIMIT_FUNCTION_ARITY)
+};
+
+BOOST_TYPEOF_BEGIN_ENCODE_NS
+
+# define BOOST_PP_ITERATION_LIMITS (0, BOOST_TYPEOF_LIMIT_FUNCTION_ARITY)
+# define BOOST_PP_FILENAME_1 <boost/typeof/register_functions_iterate.hpp>
+# include BOOST_PP_ITERATE()
+
+BOOST_TYPEOF_END_ENCODE_NS
+
+#endif//BOOST_TYPEOF_REGISTER_FUNCTIONS_HPP_INCLUDED
diff --git a/boost/boost/typeof/register_functions_iterate.hpp b/boost/boost/typeof/register_functions_iterate.hpp
new file mode 100644
index 00000000000..643dc9851e8
--- /dev/null
+++ b/boost/boost/typeof/register_functions_iterate.hpp
@@ -0,0 +1,85 @@
+// Copyright (C) 2004 Arkadiy Vertleyb
+// 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)
+
+#include <boost/typeof/encode_decode_params.hpp>
+
+#define n BOOST_PP_ITERATION()
+
+// function pointers
+
+template<class V, class R BOOST_PP_ENUM_TRAILING_PARAMS(n, class P)>
+struct encode_type_impl<V, R(*)(BOOST_PP_ENUM_PARAMS(n, P))>
+{
+ typedef R BOOST_PP_CAT(P, n);
+ typedef BOOST_TYPEOF_ENCODE_PARAMS(BOOST_PP_INC(n), FUN_PTR_ID + n) type;
+};
+
+template<class Iter>
+struct decode_type_impl<boost::mpl::size_t<FUN_PTR_ID + n>, Iter>
+{
+ typedef Iter iter0;
+ BOOST_TYPEOF_DECODE_PARAMS(BOOST_PP_INC(n))
+ typedef BOOST_PP_CAT(p, n)(*type)(BOOST_PP_ENUM_PARAMS(n, p));
+ typedef BOOST_PP_CAT(iter, BOOST_PP_INC(n)) iter;
+};
+
+#ifndef BOOST_TYPEOF_NO_FUNCTION_TYPES
+
+ // function references
+
+ template<class V, class R BOOST_PP_ENUM_TRAILING_PARAMS(n, class P)>
+ struct encode_type_impl<V, R(&)(BOOST_PP_ENUM_PARAMS(n, P))>
+ {
+ typedef R BOOST_PP_CAT(P, n);
+ typedef BOOST_TYPEOF_ENCODE_PARAMS(BOOST_PP_INC(n), FUN_REF_ID + n) type;
+ };
+
+ template<class Iter>
+ struct decode_type_impl<boost::mpl::size_t<FUN_REF_ID + n>, Iter>
+ {
+ typedef Iter iter0;
+ BOOST_TYPEOF_DECODE_PARAMS(BOOST_PP_INC(n))
+ typedef BOOST_PP_CAT(p, n)(&type)(BOOST_PP_ENUM_PARAMS(n, p));
+ typedef BOOST_PP_CAT(iter, BOOST_PP_INC(n)) iter;
+ };
+
+ // functions
+
+ template<class V, class R BOOST_PP_ENUM_TRAILING_PARAMS(n, class P)>
+ struct encode_type_impl<V, R(BOOST_PP_ENUM_PARAMS(n, P))>
+ {
+ typedef R BOOST_PP_CAT(P, n);
+ typedef BOOST_TYPEOF_ENCODE_PARAMS(BOOST_PP_INC(n), FUN_ID + n) type;
+ };
+
+ template<class Iter>
+ struct decode_type_impl<boost::mpl::size_t<FUN_ID + n>, Iter>
+ {
+ typedef Iter iter0;
+ BOOST_TYPEOF_DECODE_PARAMS(BOOST_PP_INC(n))
+ typedef BOOST_PP_CAT(p, n)(type)(BOOST_PP_ENUM_PARAMS(n, p));
+ typedef BOOST_PP_CAT(iter, BOOST_PP_INC(n)) iter;
+ };
+
+#endif//BOOST_TYPEOF_NO_FUNCTION_TYPES
+
+// member functions
+
+#define BOOST_TYPEOF_qualifier
+#define BOOST_TYPEOF_id MEM_FUN_ID
+#include <boost/typeof/register_mem_functions.hpp>
+
+#define BOOST_TYPEOF_qualifier const
+#define BOOST_TYPEOF_id CONST_MEM_FUN_ID
+#include <boost/typeof/register_mem_functions.hpp>
+
+#define BOOST_TYPEOF_qualifier volatile
+#define BOOST_TYPEOF_id VOLATILE_MEM_FUN_ID
+#include <boost/typeof/register_mem_functions.hpp>
+
+#define BOOST_TYPEOF_qualifier volatile const
+#define BOOST_TYPEOF_id VOLATILE_CONST_MEM_FUN_ID
+#include <boost/typeof/register_mem_functions.hpp>
+
+#undef n
diff --git a/boost/boost/typeof/register_fundamental.hpp b/boost/boost/typeof/register_fundamental.hpp
new file mode 100644
index 00000000000..3a15888d085
--- /dev/null
+++ b/boost/boost/typeof/register_fundamental.hpp
@@ -0,0 +1,62 @@
+// Copyright (C) 2004 Arkadiy Vertleyb
+// Copyright (C) 2004 Peder Holt
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_REGISTER_FUNDAMENTAL_HPP_INCLUDED
+#define BOOST_TYPEOF_REGISTER_FUNDAMENTAL_HPP_INCLUDED
+
+#include <boost/typeof/typeof.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TYPE(unsigned char)
+BOOST_TYPEOF_REGISTER_TYPE(unsigned short)
+BOOST_TYPEOF_REGISTER_TYPE(unsigned int)
+BOOST_TYPEOF_REGISTER_TYPE(unsigned long)
+
+BOOST_TYPEOF_REGISTER_TYPE(signed char)
+BOOST_TYPEOF_REGISTER_TYPE(signed short)
+BOOST_TYPEOF_REGISTER_TYPE(signed int)
+BOOST_TYPEOF_REGISTER_TYPE(signed long)
+
+BOOST_TYPEOF_REGISTER_TYPE(bool)
+BOOST_TYPEOF_REGISTER_TYPE(char)
+
+BOOST_TYPEOF_REGISTER_TYPE(float)
+BOOST_TYPEOF_REGISTER_TYPE(double)
+BOOST_TYPEOF_REGISTER_TYPE(long double)
+
+#ifndef BOOST_NO_INTRINSIC_WCHAR_T
+// If the following line fails to compile and you're using the Intel
+// compiler, see http://lists.boost.org/MailArchives/boost-users/msg06567.php,
+// and define BOOST_NO_INTRINSIC_WCHAR_T on the command line.
+BOOST_TYPEOF_REGISTER_TYPE(wchar_t)
+#endif
+
+#if (defined(BOOST_MSVC) && (BOOST_MSVC == 1200)) \
+ || (defined(BOOST_INTEL_CXX_VERSION) && defined(_MSC_VER) && (BOOST_INTEL_CXX_VERSION <= 600)) \
+ || (defined(__BORLANDC__) && (__BORLANDC__ == 0x600) && (_MSC_VER == 1200))
+BOOST_TYPEOF_REGISTER_TYPE(unsigned __int8)
+BOOST_TYPEOF_REGISTER_TYPE(__int8)
+BOOST_TYPEOF_REGISTER_TYPE(unsigned __int16)
+BOOST_TYPEOF_REGISTER_TYPE(__int16)
+BOOST_TYPEOF_REGISTER_TYPE(unsigned __int32)
+BOOST_TYPEOF_REGISTER_TYPE(__int32)
+#ifdef __BORLANDC__
+BOOST_TYPEOF_REGISTER_TYPE(unsigned __int64)
+BOOST_TYPEOF_REGISTER_TYPE(__int64)
+#endif
+#endif
+
+# if defined(BOOST_HAS_LONG_LONG)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::ulong_long_type)
+BOOST_TYPEOF_REGISTER_TYPE(::boost::long_long_type)
+#elif defined(BOOST_HAS_MS_INT64)
+BOOST_TYPEOF_REGISTER_TYPE(unsigned __int64)
+BOOST_TYPEOF_REGISTER_TYPE(__int64)
+#endif
+
+BOOST_TYPEOF_REGISTER_TYPE(void)
+
+#endif//BOOST_TYPEOF_REGISTER_FUNDAMENTAL_HPP_INCLUDED
diff --git a/boost/boost/typeof/register_mem_functions.hpp b/boost/boost/typeof/register_mem_functions.hpp
new file mode 100644
index 00000000000..9cf9720b798
--- /dev/null
+++ b/boost/boost/typeof/register_mem_functions.hpp
@@ -0,0 +1,32 @@
+// Copyright (C) 2004 Arkadiy Vertleyb
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/typeof/encode_decode_params.hpp>
+
+// member functions
+
+template<class V, class T, class R BOOST_PP_ENUM_TRAILING_PARAMS(n, class P)>
+struct encode_type_impl<V, R(T::*)(BOOST_PP_ENUM_PARAMS(n, P)) BOOST_TYPEOF_qualifier>
+{
+ typedef R BOOST_PP_CAT(P, n);
+ typedef T BOOST_PP_CAT(P, BOOST_PP_INC(n));
+ typedef BOOST_TYPEOF_ENCODE_PARAMS(BOOST_PP_ADD(n, 2), BOOST_TYPEOF_id + n) type;
+};
+
+template<class Iter>
+struct decode_type_impl<boost::mpl::size_t<BOOST_TYPEOF_id + n>, Iter>
+{
+ typedef Iter iter0;
+ BOOST_TYPEOF_DECODE_PARAMS(BOOST_PP_ADD(n, 2))
+ template<class T> struct workaround{
+ typedef BOOST_PP_CAT(p, n)(T::*type)(BOOST_PP_ENUM_PARAMS(n, p)) BOOST_TYPEOF_qualifier;
+ };
+ typedef typename workaround<BOOST_PP_CAT(p, BOOST_PP_INC(n))>::type type;
+ typedef BOOST_PP_CAT(iter, BOOST_PP_ADD(n, 2)) iter;
+};
+
+// undef parameters
+
+#undef BOOST_TYPEOF_id
+#undef BOOST_TYPEOF_qualifier
diff --git a/boost/boost/typeof/std/bitset.hpp b/boost/boost/typeof/std/bitset.hpp
new file mode 100644
index 00000000000..bdc6ae9d0e9
--- /dev/null
+++ b/boost/boost/typeof/std/bitset.hpp
@@ -0,0 +1,15 @@
+// Copyright (C) 2005 Arkadiy Vertleyb, Peder Holt.
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_STD_bitset_hpp_INCLUDED
+#define BOOST_TYPEOF_STD_bitset_hpp_INCLUDED
+
+#include <bitset>
+#include <boost/typeof/typeof.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::bitset, (BOOST_TYPEOF_INTEGRAL(std::size_t)))
+
+#endif//BOOST_TYPEOF_STD_bitset_hpp_INCLUDED
diff --git a/boost/boost/typeof/std/complex.hpp b/boost/boost/typeof/std/complex.hpp
new file mode 100644
index 00000000000..12652949a95
--- /dev/null
+++ b/boost/boost/typeof/std/complex.hpp
@@ -0,0 +1,15 @@
+// Copyright (C) 2005 Arkadiy Vertleyb, Peder Holt.
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_STD_complex_hpp_INCLUDED
+#define BOOST_TYPEOF_STD_complex_hpp_INCLUDED
+
+#include <complex>
+#include <boost/typeof/typeof.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::complex, 1)
+
+#endif//BOOST_TYPEOF_STD_complex_hpp_INCLUDED
diff --git a/boost/boost/typeof/std/deque.hpp b/boost/boost/typeof/std/deque.hpp
new file mode 100644
index 00000000000..643e1b27838
--- /dev/null
+++ b/boost/boost/typeof/std/deque.hpp
@@ -0,0 +1,17 @@
+// Copyright (C) 2005 Arkadiy Vertleyb, Peder Holt.
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_STD_deque_hpp_INCLUDED
+#define BOOST_TYPEOF_STD_deque_hpp_INCLUDED
+
+#include <deque>
+#include <boost/typeof/typeof.hpp>
+#include <boost/typeof/std/memory.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::deque, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::deque, 2)
+
+#endif//BOOST_TYPEOF_STD_deque_hpp_INCLUDED
diff --git a/boost/boost/typeof/std/fstream.hpp b/boost/boost/typeof/std/fstream.hpp
new file mode 100644
index 00000000000..4ce8cbf2424
--- /dev/null
+++ b/boost/boost/typeof/std/fstream.hpp
@@ -0,0 +1,27 @@
+// Copyright (C) 2005 Arkadiy Vertleyb, Peder Holt.
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_STD_fstream_hpp_INCLUDED
+#define BOOST_TYPEOF_STD_fstream_hpp_INCLUDED
+
+#include <fstream>
+#include <boost/typeof/typeof.hpp>
+#include <boost/typeof/std/string.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_filebuf, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_filebuf, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_ifstream, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_ifstream, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_ofstream, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_ofstream, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_fstream, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_fstream, 2)
+BOOST_TYPEOF_REGISTER_TYPE(std::filebuf)
+BOOST_TYPEOF_REGISTER_TYPE(std::ifstream)
+BOOST_TYPEOF_REGISTER_TYPE(std::ofstream)
+BOOST_TYPEOF_REGISTER_TYPE(std::fstream)
+
+#endif//BOOST_TYPEOF_STD_fstream_hpp_INCLUDED
diff --git a/boost/boost/typeof/std/functional.hpp b/boost/boost/typeof/std/functional.hpp
new file mode 100644
index 00000000000..f1b157764e4
--- /dev/null
+++ b/boost/boost/typeof/std/functional.hpp
@@ -0,0 +1,55 @@
+// Copyright (C) 2005 Arkadiy Vertleyb, Peder Holt.
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_STD_functional_hpp_INCLUDED
+#define BOOST_TYPEOF_STD_functional_hpp_INCLUDED
+
+#include <functional>
+#include <boost/typeof/typeof.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::unary_function, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::binary_function, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::plus, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::minus, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::multiplies, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::divides, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::modulus, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::negate, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::equal_to, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::not_equal_to, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::greater, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::less, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::greater_equal, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::less_equal, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::logical_and, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::logical_or, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::logical_not, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::unary_negate, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::binary_negate, 1)
+
+#if defined(__MWERKS__) && defined(_MSL_EXTENDED_BINDERS)
+ BOOST_TYPEOF_REGISTER_TEMPLATE(std::binder1st, 2)
+ BOOST_TYPEOF_REGISTER_TEMPLATE(std::binder2nd, 2)
+#else
+ BOOST_TYPEOF_REGISTER_TEMPLATE(std::binder1st, 1)
+ BOOST_TYPEOF_REGISTER_TEMPLATE(std::binder2nd, 1)
+#endif
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::pointer_to_unary_function, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::pointer_to_binary_function, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::mem_fun_t, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::mem_fun1_t, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::mem_fun_ref_t, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::mem_fun1_ref_t, 3)
+
+#if !BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1)
+ BOOST_TYPEOF_REGISTER_TEMPLATE(std::const_mem_fun_t, 2)
+ BOOST_TYPEOF_REGISTER_TEMPLATE(std::const_mem_fun1_t, 3)
+ BOOST_TYPEOF_REGISTER_TEMPLATE(std::const_mem_fun_ref_t, 2)
+ BOOST_TYPEOF_REGISTER_TEMPLATE(std::const_mem_fun1_ref_t, 3)
+#endif//BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1)
+
+#endif//BOOST_TYPEOF_STD_functional_hpp_INCLUDED
diff --git a/boost/boost/typeof/std/iostream.hpp b/boost/boost/typeof/std/iostream.hpp
new file mode 100644
index 00000000000..559a0ce8dff
--- /dev/null
+++ b/boost/boost/typeof/std/iostream.hpp
@@ -0,0 +1,18 @@
+// Copyright (C) 2005 Arkadiy Vertleyb, Peder Holt.
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_STD_iostream_hpp_INCLUDED
+#define BOOST_TYPEOF_STD_iostream_hpp_INCLUDED
+
+#include <iostream>
+#include <boost/typeof/typeof.hpp>
+#include <boost/typeof/std/string.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::fpos, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_ios, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_ios, 2)
+
+#endif//BOOST_TYPEOF_STD_iostream_hpp_INCLUDED
diff --git a/boost/boost/typeof/std/istream.hpp b/boost/boost/typeof/std/istream.hpp
new file mode 100644
index 00000000000..c2457f16c7d
--- /dev/null
+++ b/boost/boost/typeof/std/istream.hpp
@@ -0,0 +1,21 @@
+// Copyright (C) 2005 Arkadiy Vertleyb, Peder Holt.
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_STD_istream_hpp_INCLUDED
+#define BOOST_TYPEOF_STD_istream_hpp_INCLUDED
+
+#include <istream>
+#include <boost/typeof/typeof.hpp>
+#include <boost/typeof/std/string.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_istream, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_istream, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_iostream, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_iostream, 2)
+BOOST_TYPEOF_REGISTER_TYPE(std::istream)
+BOOST_TYPEOF_REGISTER_TYPE(std::iostream)
+
+#endif//BOOST_TYPEOF_STD_istream_hpp_INCLUDED
diff --git a/boost/boost/typeof/std/iterator.hpp b/boost/boost/typeof/std/iterator.hpp
new file mode 100644
index 00000000000..ac7bcbc7559
--- /dev/null
+++ b/boost/boost/typeof/std/iterator.hpp
@@ -0,0 +1,58 @@
+// Copyright (C) 2005 Arkadiy Vertleyb, Peder Holt.
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_STD_iterator_hpp_INCLUDED
+#define BOOST_TYPEOF_STD_iterator_hpp_INCLUDED
+
+#include <iterator>
+#include <boost/typeof/typeof.hpp>
+#include <boost/typeof/std/string.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::iterator_traits, 1)
+#if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::iterator, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::iterator, 3)
+#else
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::iterator, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::iterator, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::iterator, 4)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::iterator, 5)
+#endif//BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1)
+BOOST_TYPEOF_REGISTER_TYPE(std::input_iterator_tag)
+BOOST_TYPEOF_REGISTER_TYPE(std::output_iterator_tag)
+BOOST_TYPEOF_REGISTER_TYPE(std::forward_iterator_tag)
+BOOST_TYPEOF_REGISTER_TYPE(std::bidirectional_iterator_tag)
+BOOST_TYPEOF_REGISTER_TYPE(std::random_access_iterator_tag)
+#if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::reverse_iterator, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::reverse_iterator, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::reverse_iterator, 4)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::reverse_iterator, 5)
+#else
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::reverse_iterator, 1)
+#endif//BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::back_insert_iterator, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::front_insert_iterator, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::insert_iterator, 1)
+#if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::istream_iterator, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::istream_iterator, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::istream_iterator, 3)
+#else
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::istream_iterator, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::istream_iterator, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::istream_iterator, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::istream_iterator, 4)
+#endif//BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::ostream_iterator, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::ostream_iterator, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::ostream_iterator, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::istreambuf_iterator, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::istreambuf_iterator, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::ostreambuf_iterator, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::ostreambuf_iterator, 2)
+
+#endif//BOOST_TYPEOF_STD_iterator_hpp_INCLUDED
diff --git a/boost/boost/typeof/std/list.hpp b/boost/boost/typeof/std/list.hpp
new file mode 100644
index 00000000000..7557d5e31ed
--- /dev/null
+++ b/boost/boost/typeof/std/list.hpp
@@ -0,0 +1,17 @@
+// Copyright (C) 2005 Arkadiy Vertleyb, Peder Holt.
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_STD_list_hpp_INCLUDED
+#define BOOST_TYPEOF_STD_list_hpp_INCLUDED
+
+#include <list>
+#include <boost/typeof/typeof.hpp>
+#include <boost/typeof/std/memory.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::list, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::list, 2)
+
+#endif//BOOST_TYPEOF_STD_list_hpp_INCLUDED
diff --git a/boost/boost/typeof/std/locale.hpp b/boost/boost/typeof/std/locale.hpp
new file mode 100644
index 00000000000..9a21c22cad4
--- /dev/null
+++ b/boost/boost/typeof/std/locale.hpp
@@ -0,0 +1,40 @@
+// Copyright (C) 2005 Arkadiy Vertleyb, Peder Holt.
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_STD_locale_hpp_INCLUDED
+#define BOOST_TYPEOF_STD_locale_hpp_INCLUDED
+
+#include <locale>
+#include <boost/typeof/typeof.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TYPE(std::locale)
+BOOST_TYPEOF_REGISTER_TYPE(std::ctype_base)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::ctype, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::ctype_byname, 1)
+BOOST_TYPEOF_REGISTER_TYPE(std::codecvt_base)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::codecvt, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::codecvt_byname, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::num_get, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::num_put, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::numpunct, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::numpunct_byname, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::collate, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::collate_byname, 1)
+BOOST_TYPEOF_REGISTER_TYPE(std::time_base)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::time_get, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::time_get_byname, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::time_put, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::time_put_byname, 2)
+BOOST_TYPEOF_REGISTER_TYPE(std::money_base)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::money_get, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::money_put, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::moneypunct, (class)(bool))
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::moneypunct_byname, (class)(bool))
+BOOST_TYPEOF_REGISTER_TYPE(std::messages_base)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::messages, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::messages_byname, 1)
+
+#endif//BOOST_TYPEOF_STD_locale_hpp_INCLUDED
diff --git a/boost/boost/typeof/std/map.hpp b/boost/boost/typeof/std/map.hpp
new file mode 100644
index 00000000000..77839e38705
--- /dev/null
+++ b/boost/boost/typeof/std/map.hpp
@@ -0,0 +1,23 @@
+// Copyright (C) 2005 Arkadiy Vertleyb, Peder Holt.
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_STD_map_hpp_INCLUDED
+#define BOOST_TYPEOF_STD_map_hpp_INCLUDED
+
+#include <map>
+#include <boost/typeof/typeof.hpp>
+#include <boost/typeof/std/memory.hpp>
+#include <boost/typeof/std/functional.hpp>
+#include <boost/typeof/std/utility.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::map, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::map, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::map, 4)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::multimap, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::multimap, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::multimap, 4)
+
+#endif//BOOST_TYPEOF_STD_map_hpp_INCLUDED
diff --git a/boost/boost/typeof/std/memory.hpp b/boost/boost/typeof/std/memory.hpp
new file mode 100644
index 00000000000..fa3ae1da4da
--- /dev/null
+++ b/boost/boost/typeof/std/memory.hpp
@@ -0,0 +1,17 @@
+// Copyright (C) 2005 Arkadiy Vertleyb, Peder Holt.
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_STD_memory_hpp_INCLUDED
+#define BOOST_TYPEOF_STD_memory_hpp_INCLUDED
+
+#include <memory>
+#include <boost/typeof/typeof.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::allocator, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::raw_storage_iterator, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::auto_ptr, 1)
+
+#endif//BOOST_TYPEOF_STD_memory_hpp_INCLUDED
diff --git a/boost/boost/typeof/std/ostream.hpp b/boost/boost/typeof/std/ostream.hpp
new file mode 100644
index 00000000000..a7924461aa7
--- /dev/null
+++ b/boost/boost/typeof/std/ostream.hpp
@@ -0,0 +1,18 @@
+// Copyright (C) 2005 Arkadiy Vertleyb, Peder Holt.
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_STD_ostream_hpp_INCLUDED
+#define BOOST_TYPEOF_STD_ostream_hpp_INCLUDED
+
+#include <ostream>
+#include <boost/typeof/typeof.hpp>
+#include <boost/typeof/std/string.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_ostream, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_ostream, 2)
+BOOST_TYPEOF_REGISTER_TYPE(std::ostream)
+
+#endif//BOOST_TYPEOF_STD_ostream_hpp_INCLUDED
diff --git a/boost/boost/typeof/std/queue.hpp b/boost/boost/typeof/std/queue.hpp
new file mode 100644
index 00000000000..d44e24e7f85
--- /dev/null
+++ b/boost/boost/typeof/std/queue.hpp
@@ -0,0 +1,17 @@
+// Copyright (C) 2005 Arkadiy Vertleyb, Peder Holt.
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_STD_queue_hpp_INCLUDED
+#define BOOST_TYPEOF_STD_queue_hpp_INCLUDED
+
+#include <queue>
+#include <boost/typeof/typeof.hpp>
+#include <boost/typeof/std/memory.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::queue, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::queue, 2)
+
+#endif//BOOST_TYPEOF_STD_queue_hpp_INCLUDED
diff --git a/boost/boost/typeof/std/set.hpp b/boost/boost/typeof/std/set.hpp
new file mode 100644
index 00000000000..6ff6311f611
--- /dev/null
+++ b/boost/boost/typeof/std/set.hpp
@@ -0,0 +1,22 @@
+// Copyright (C) 2005 Arkadiy Vertleyb, Peder Holt.
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_STD_set_hpp_INCLUDED
+#define BOOST_TYPEOF_STD_set_hpp_INCLUDED
+
+#include <set>
+#include <boost/typeof/typeof.hpp>
+#include <boost/typeof/std/memory.hpp>
+#include <boost/typeof/std/functional.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::set, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::set, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::set, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::multiset, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::multiset, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::multiset, 3)
+
+#endif//BOOST_TYPEOF_STD_set_hpp_INCLUDED
diff --git a/boost/boost/typeof/std/sstream.hpp b/boost/boost/typeof/std/sstream.hpp
new file mode 100644
index 00000000000..cb92dae3a77
--- /dev/null
+++ b/boost/boost/typeof/std/sstream.hpp
@@ -0,0 +1,32 @@
+// Copyright (C) 2005 Arkadiy Vertleyb, Peder Holt.
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_STD_sstream_hpp_INCLUDED
+#define BOOST_TYPEOF_STD_sstream_hpp_INCLUDED
+
+#include <sstream>
+#include <boost/typeof/typeof.hpp>
+#include <boost/typeof/std/string.hpp>
+#include <boost/typeof/std/memory.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_stringbuf, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_stringbuf, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_stringbuf, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_istringstream, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_istringstream, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_istringstream, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_ostringstream, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_ostringstream, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_ostringstream, 3)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_stringstream, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_stringstream, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_stringstream, 3)
+BOOST_TYPEOF_REGISTER_TYPE(std::stringbuf)
+BOOST_TYPEOF_REGISTER_TYPE(std::istringstream)
+BOOST_TYPEOF_REGISTER_TYPE(std::ostringstream)
+BOOST_TYPEOF_REGISTER_TYPE(std::stringstream)
+
+#endif//BOOST_TYPEOF_STD_sstream_hpp_INCLUDED
diff --git a/boost/boost/typeof/std/stack.hpp b/boost/boost/typeof/std/stack.hpp
new file mode 100644
index 00000000000..02826786d59
--- /dev/null
+++ b/boost/boost/typeof/std/stack.hpp
@@ -0,0 +1,17 @@
+// Copyright (C) 2005 Arkadiy Vertleyb, Peder Holt.
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_STD_stack_hpp_INCLUDED
+#define BOOST_TYPEOF_STD_stack_hpp_INCLUDED
+
+#include <stack>
+#include <boost/typeof/typeof.hpp>
+#include <boost/typeof/std/memory.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::stack, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::stack, 2)
+
+#endif//BOOST_TYPEOF_STD_stack_hpp_INCLUDED
diff --git a/boost/boost/typeof/std/streambuf.hpp b/boost/boost/typeof/std/streambuf.hpp
new file mode 100644
index 00000000000..dd89b88aea9
--- /dev/null
+++ b/boost/boost/typeof/std/streambuf.hpp
@@ -0,0 +1,17 @@
+// Copyright (C) 2005 Arkadiy Vertleyb, Peder Holt.
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_STD_streambuf_hpp_INCLUDED
+#define BOOST_TYPEOF_STD_streambuf_hpp_INCLUDED
+
+#include <streambuf>
+#include <boost/typeof/typeof.hpp>
+#include <boost/typeof/std/string.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_streambuf, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_streambuf, 2)
+
+#endif//BOOST_TYPEOF_STD_streambuf_hpp_INCLUDED
diff --git a/boost/boost/typeof/std/string.hpp b/boost/boost/typeof/std/string.hpp
new file mode 100644
index 00000000000..3dc6ef4e095
--- /dev/null
+++ b/boost/boost/typeof/std/string.hpp
@@ -0,0 +1,20 @@
+// Copyright (C) 2005 Arkadiy Vertleyb, Peder Holt.
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_STD_string_hpp_INCLUDED
+#define BOOST_TYPEOF_STD_string_hpp_INCLUDED
+
+#include <string>
+#include <boost/typeof/typeof.hpp>
+#include <boost/typeof/std/memory.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::char_traits, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_string, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_string, 2)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::basic_string, 3)
+BOOST_TYPEOF_REGISTER_TYPE(std::string)
+
+#endif//BOOST_TYPEOF_STD_string_hpp_INCLUDED
diff --git a/boost/boost/typeof/std/utility.hpp b/boost/boost/typeof/std/utility.hpp
new file mode 100644
index 00000000000..2647fb6ba58
--- /dev/null
+++ b/boost/boost/typeof/std/utility.hpp
@@ -0,0 +1,15 @@
+// Copyright (C) 2005 Arkadiy Vertleyb, Peder Holt.
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_STD_utility_hpp_INCLUDED
+#define BOOST_TYPEOF_STD_utility_hpp_INCLUDED
+
+#include <utility>
+#include <boost/typeof/typeof.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::pair, 2)
+
+#endif//BOOST_TYPEOF_STD_utility_hpp_INCLUDED
diff --git a/boost/boost/typeof/std/valarray.hpp b/boost/boost/typeof/std/valarray.hpp
new file mode 100644
index 00000000000..99d4eed1fce
--- /dev/null
+++ b/boost/boost/typeof/std/valarray.hpp
@@ -0,0 +1,21 @@
+// Copyright (C) 2005 Arkadiy Vertleyb, Peder Holt.
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_STD_valarray_hpp_INCLUDED
+#define BOOST_TYPEOF_STD_valarray_hpp_INCLUDED
+
+#include <valarray>
+#include <boost/typeof/typeof.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::valarray, 1)
+BOOST_TYPEOF_REGISTER_TYPE(std::slice)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::slice_array, 1)
+BOOST_TYPEOF_REGISTER_TYPE(std::gslice)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::gslice_array, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::mask_array, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::indirect_array, 1)
+
+#endif//BOOST_TYPEOF_STD_valarray_hpp_INCLUDED
diff --git a/boost/boost/typeof/std/vector.hpp b/boost/boost/typeof/std/vector.hpp
new file mode 100644
index 00000000000..4a5be5f8c89
--- /dev/null
+++ b/boost/boost/typeof/std/vector.hpp
@@ -0,0 +1,17 @@
+// Copyright (C) 2005 Arkadiy Vertleyb, Peder Holt.
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_STD_vector_hpp_INCLUDED
+#define BOOST_TYPEOF_STD_vector_hpp_INCLUDED
+
+#include <vector>
+#include <boost/typeof/typeof.hpp>
+#include <boost/typeof/std/memory.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::vector, 1)
+BOOST_TYPEOF_REGISTER_TEMPLATE(std::vector, 2)
+
+#endif//BOOST_TYPEOF_STD_vector_hpp_INCLUDED
diff --git a/boost/boost/typeof/template_encoding.hpp b/boost/boost/typeof/template_encoding.hpp
new file mode 100644
index 00000000000..1a638ed1998
--- /dev/null
+++ b/boost/boost/typeof/template_encoding.hpp
@@ -0,0 +1,152 @@
+// Copyright (C) 2004 Arkadiy Vertleyb
+// Copyright (C) 2005 Peder Holt
+// 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_TYPEOF_TEMPLATE_ENCODING_HPP_INCLUDED
+#define BOOST_TYPEOF_TEMPLATE_ENCODING_HPP_INCLUDED
+
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/repetition/enum_trailing.hpp>
+#include <boost/preprocessor/control/iif.hpp>
+#include <boost/preprocessor/detail/is_unary.hpp>
+#include <boost/preprocessor/repetition/repeat.hpp>
+#include <boost/preprocessor/tuple/eat.hpp>
+#include <boost/preprocessor/seq/transform.hpp>
+#include <boost/preprocessor/seq/for_each_i.hpp>
+#include <boost/preprocessor/seq/cat.hpp>
+
+#include <boost/typeof/encode_decode.hpp>
+#include <boost/typeof/int_encoding.hpp>
+
+#include <boost/typeof/type_template_param.hpp>
+#include <boost/typeof/integral_template_param.hpp>
+#include <boost/typeof/template_template_param.hpp>
+
+// The template parameter description, entered by the user,
+// is converted into a polymorphic "object"
+// that is used to generate the code responsible for
+// encoding/decoding the parameter, etc.
+
+// make sure to cat the sequence first, and only then add the prefix.
+#define BOOST_TYPEOF_MAKE_OBJ(elem) BOOST_PP_CAT(\
+ BOOST_TYPEOF_MAKE_OBJ,\
+ BOOST_PP_SEQ_CAT((_) BOOST_TYPEOF_TO_SEQ(elem))\
+ )
+
+#define BOOST_TYPEOF_TO_SEQ(tokens) BOOST_TYPEOF_ ## tokens ## _BOOST_TYPEOF
+
+// BOOST_TYPEOF_REGISTER_TEMPLATE
+
+#define BOOST_TYPEOF_REGISTER_TEMPLATE_EXPLICIT_ID(Name, Params, Id)\
+ BOOST_TYPEOF_REGISTER_TEMPLATE_IMPL(\
+ Name,\
+ BOOST_TYPEOF_MAKE_OBJS(BOOST_TYPEOF_TOSEQ(Params)),\
+ BOOST_PP_SEQ_SIZE(BOOST_TYPEOF_TOSEQ(Params)),\
+ Id)
+
+#define BOOST_TYPEOF_REGISTER_TEMPLATE(Name, Params)\
+ BOOST_TYPEOF_REGISTER_TEMPLATE_EXPLICIT_ID(Name, Params, BOOST_TYPEOF_UNIQUE_ID())
+
+#define BOOST_TYPEOF_OBJECT_MAKER(s, data, elem)\
+ BOOST_TYPEOF_MAKE_OBJ(elem)
+
+#define BOOST_TYPEOF_MAKE_OBJS(Params)\
+ BOOST_PP_SEQ_TRANSFORM(BOOST_TYPEOF_OBJECT_MAKER, ~, Params)
+
+// As suggested by Paul Mensonides:
+
+#define BOOST_TYPEOF_TOSEQ(x)\
+ BOOST_PP_IIF(\
+ BOOST_PP_IS_UNARY(x),\
+ x BOOST_PP_TUPLE_EAT(3), BOOST_PP_REPEAT\
+ )(x, BOOST_TYPEOF_TOSEQ_2, ~)
+
+#define BOOST_TYPEOF_TOSEQ_2(z, n, _) (class)
+
+// BOOST_TYPEOF_VIRTUAL
+
+#define BOOST_TYPEOF_CAT_4(a, b, c, d) BOOST_TYPEOF_CAT_4_I(a, b, c, d)
+#define BOOST_TYPEOF_CAT_4_I(a, b, c, d) a ## b ## c ## d
+
+#define BOOST_TYPEOF_VIRTUAL(Fun, Obj)\
+ BOOST_TYPEOF_CAT_4(BOOST_TYPEOF_, BOOST_PP_SEQ_HEAD(Obj), _, Fun)
+
+// BOOST_TYPEOF_SEQ_ENUM[_TRAILING][_1]
+// Two versions provided due to reentrancy issue
+
+#define BOOST_TYPEOF_SEQ_EXPAND_ELEMENT(z,n,seq)\
+ BOOST_PP_SEQ_ELEM(0,seq) (z,n,BOOST_PP_SEQ_ELEM(n,BOOST_PP_SEQ_ELEM(1,seq)))
+
+#define BOOST_TYPEOF_SEQ_ENUM(seq,macro)\
+ BOOST_PP_ENUM(BOOST_PP_SEQ_SIZE(seq),BOOST_TYPEOF_SEQ_EXPAND_ELEMENT,(macro)(seq))
+
+#define BOOST_TYPEOF_SEQ_ENUM_TRAILING(seq,macro)\
+ BOOST_PP_ENUM_TRAILING(BOOST_PP_SEQ_SIZE(seq),BOOST_TYPEOF_SEQ_EXPAND_ELEMENT,(macro)(seq))
+
+#define BOOST_TYPEOF_SEQ_EXPAND_ELEMENT_1(z,n,seq)\
+ BOOST_PP_SEQ_ELEM(0,seq) (z,n,BOOST_PP_SEQ_ELEM(n,BOOST_PP_SEQ_ELEM(1,seq)))
+
+#define BOOST_TYPEOF_SEQ_ENUM_1(seq,macro)\
+ BOOST_PP_ENUM(BOOST_PP_SEQ_SIZE(seq),BOOST_TYPEOF_SEQ_EXPAND_ELEMENT_1,(macro)(seq))
+
+#define BOOST_TYPEOF_SEQ_ENUM_TRAILING_1(seq,macro)\
+ BOOST_PP_ENUM_TRAILING(BOOST_PP_SEQ_SIZE(seq),BOOST_TYPEOF_SEQ_EXPAND_ELEMENT_1,(macro)(seq))
+
+//
+
+#define BOOST_TYPEOF_PLACEHOLDER(z, n, elem)\
+ BOOST_TYPEOF_VIRTUAL(PLACEHOLDER, elem)(elem)
+
+#define BOOST_TYPEOF_PLACEHOLDER_TYPES(z, n, elem)\
+ BOOST_TYPEOF_VIRTUAL(PLACEHOLDER_TYPES, elem)(elem, n)
+
+#define BOOST_TYPEOF_REGISTER_TEMPLATE_ENCODE_PARAM(r, data, n, elem)\
+ BOOST_TYPEOF_VIRTUAL(ENCODE, elem)(elem, n)
+
+#define BOOST_TYPEOF_REGISTER_TEMPLATE_DECODE_PARAM(r, data, n, elem)\
+ BOOST_TYPEOF_VIRTUAL(DECODE, elem)(elem, n)
+
+#define BOOST_TYPEOF_REGISTER_TEMPLATE_PARAM_PAIR(z, n, elem) \
+ BOOST_TYPEOF_VIRTUAL(EXPANDTYPE, elem)(elem) BOOST_PP_CAT(P, n)
+
+#define BOOST_TYPEOF_REGISTER_DEFAULT_TEMPLATE_TYPE(Name,Params,ID)\
+ Name< BOOST_PP_ENUM_PARAMS(BOOST_PP_SEQ_SIZE(Params), P) >
+
+//Since we are creating an internal decode struct, we need to use different template names, T instead of P.
+#define BOOST_TYPEOF_REGISTER_DECODER_TYPE_PARAM_PAIR(z,n,elem) \
+ BOOST_TYPEOF_VIRTUAL(EXPANDTYPE, elem)(elem) BOOST_PP_CAT(T, n)
+
+//Default template param decoding
+#define BOOST_TYPEOF_TYPEDEF_DECODED_TEMPLATE_TYPE(Name,Params)\
+ typedef Name<BOOST_PP_ENUM_PARAMS(BOOST_PP_SEQ_SIZE(Params),P)> type;
+
+//Branch the decoding
+#define BOOST_TYPEOF_TYPEDEF_DECODED_TYPE(Name,Params)\
+ BOOST_PP_IF(BOOST_TYPEOF_HAS_TEMPLATES(Params),\
+ BOOST_TYPEOF_TYPEDEF_DECODED_TEMPLATE_TEMPLATE_TYPE,\
+ BOOST_TYPEOF_TYPEDEF_DECODED_TEMPLATE_TYPE)(Name,Params)
+
+#define BOOST_TYPEOF_REGISTER_TEMPLATE_IMPL(Name, Params, Size, ID)\
+ BOOST_TYPEOF_BEGIN_ENCODE_NS\
+ BOOST_TYPEOF_REGISTER_TEMPLATE_TEMPLATE_IMPL(Name, Params, ID)\
+ template<class V\
+ BOOST_TYPEOF_SEQ_ENUM_TRAILING(Params, BOOST_TYPEOF_REGISTER_TEMPLATE_PARAM_PAIR)\
+ >\
+ struct encode_type_impl<V, Name<BOOST_PP_ENUM_PARAMS(Size, P)> >\
+ {\
+ typedef typename boost::type_of::push_back<V, boost::mpl::size_t<ID> >::type V0;\
+ BOOST_PP_SEQ_FOR_EACH_I(BOOST_TYPEOF_REGISTER_TEMPLATE_ENCODE_PARAM, ~, Params)\
+ typedef BOOST_PP_CAT(V, Size) type;\
+ };\
+ template<class Iter>\
+ struct decode_type_impl<boost::mpl::size_t<ID>, Iter>\
+ {\
+ typedef Iter iter0;\
+ BOOST_PP_SEQ_FOR_EACH_I(BOOST_TYPEOF_REGISTER_TEMPLATE_DECODE_PARAM, ~, Params)\
+ BOOST_TYPEOF_TYPEDEF_DECODED_TYPE(Name, Params)\
+ typedef BOOST_PP_CAT(iter, Size) iter;\
+ };\
+ BOOST_TYPEOF_END_ENCODE_NS
+
+#endif//BOOST_TYPEOF_TEMPLATE_ENCODING_HPP_INCLUDED
diff --git a/boost/boost/typeof/template_template_param.hpp b/boost/boost/typeof/template_template_param.hpp
new file mode 100644
index 00000000000..3a26639ee2d
--- /dev/null
+++ b/boost/boost/typeof/template_template_param.hpp
@@ -0,0 +1,125 @@
+// Copyright (C) 2005 Peder Holt
+// Copyright (C) 2005 Arkadiy Vertleyb
+// 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_TYPEOF_TEMPLATE_TEMPLATE_PARAM_HPP_INCLUDED
+#define BOOST_TYPEOF_TEMPLATE_TEMPLATE_PARAM_HPP_INCLUDED
+
+#include <boost/preprocessor/logical/or.hpp>
+#include <boost/preprocessor/seq/fold_left.hpp>
+#include <boost/preprocessor/seq/enum.hpp>
+
+#define BOOST_TYPEOF_MAKE_OBJ_template(x) BOOST_TYPEOF_TEMPLATE_PARAM(x)
+#define BOOST_TYPEOF_TEMPLATE(X) template(X) BOOST_TYPEOF_EAT
+#define BOOST_TYPEOF_template(X) (template(X))
+
+#define BOOST_TYPEOF_TEMPLATE_PARAM(Params)\
+ (TEMPLATE_PARAM)\
+ (Params)
+
+#define BOOST_TYPEOF_TEMPLATE_PARAM_GETPARAMS(This)\
+ BOOST_TYPEOF_TOSEQ(BOOST_PP_SEQ_ELEM(1, This))
+
+//Encode / decode this
+#define BOOST_TYPEOF_TEMPLATE_PARAM_ENCODE(This, n)\
+ typedef typename boost::type_of::encode_template<BOOST_PP_CAT(V, n),\
+ BOOST_PP_CAT(P, n)<BOOST_TYPEOF_SEQ_ENUM(BOOST_TYPEOF_MAKE_OBJS(BOOST_TYPEOF_TEMPLATE_PARAM_GETPARAMS(This)),BOOST_TYPEOF_PLACEHOLDER) >\
+ >::type BOOST_PP_CAT(V, BOOST_PP_INC(n));
+
+#define BOOST_TYPEOF_TEMPLATE_PARAM_DECODE(This, n)\
+ typedef boost::type_of::decode_template< BOOST_PP_CAT(iter, n) > BOOST_PP_CAT(d, n);\
+ typedef typename BOOST_PP_CAT(d, n)::type BOOST_PP_CAT(P, n);\
+ typedef typename BOOST_PP_CAT(d, n)::iter BOOST_PP_CAT(iter,BOOST_PP_INC(n));
+
+// template<class, unsigned int, ...> class
+#define BOOST_TYPEOF_TEMPLATE_PARAM_EXPANDTYPE(This) \
+ template <BOOST_PP_SEQ_ENUM(BOOST_TYPEOF_TEMPLATE_PARAM_GETPARAMS(This)) > class
+
+#define BOOST_TYPEOF_TEMPLATE_PARAM_PLACEHOLDER(Param)\
+ Nested_Template_Template_Arguments_Not_Supported
+
+//'template<class,int> class' is reduced to 'class'
+#define BOOST_TYPEOF_TEMPLATE_PARAM_DECLARATION_TYPE(Param) class
+
+// T3<int, (unsigned int)0, ...>
+#define BOOST_TYPEOF_TEMPLATE_PARAM_PLACEHOLDER_TYPES(Param, n)\
+ BOOST_PP_CAT(T,n)<BOOST_TYPEOF_SEQ_ENUM_1(BOOST_TYPEOF_MAKE_OBJS(BOOST_TYPEOF_TEMPLATE_PARAM_GETPARAMS(Param)),BOOST_TYPEOF_PLACEHOLDER) >
+
+#define BOOST_TYPEOF_TEMPLATE_PARAM_ISTEMPLATE 1
+
+////////////////////////////
+// move to encode_decode?
+
+BOOST_TYPEOF_BEGIN_ENCODE_NS
+
+template<class V, class Type_Not_Registered_With_Typeof_System> struct encode_template_impl;
+template<class T, class Iter> struct decode_template_impl;
+
+BOOST_TYPEOF_END_ENCODE_NS
+
+namespace boost { namespace type_of {
+
+ template<class V, class T> struct encode_template
+ : BOOST_TYPEOF_ENCODE_NS_QUALIFIER::encode_template_impl<V, T>
+ {};
+
+ template<class Iter> struct decode_template
+ : BOOST_TYPEOF_ENCODE_NS_QUALIFIER::decode_template_impl<typename Iter::type, typename Iter::next>
+ {};
+}}
+
+////////////////////////////
+// move to template_encoding.hpp?
+
+//Template template registration
+#define BOOST_TYPEOF_REGISTER_TYPE_FOR_TEMPLATE_TEMPLATE(Name,Params,ID)\
+ template<class V\
+ BOOST_TYPEOF_SEQ_ENUM_TRAILING(Params,BOOST_TYPEOF_REGISTER_TEMPLATE_PARAM_PAIR)\
+ >\
+ struct encode_template_impl<V,Name<\
+ BOOST_PP_ENUM_PARAMS(\
+ BOOST_PP_SEQ_SIZE(Params),\
+ P)> >\
+ : boost::type_of::push_back<V, boost::mpl::size_t<ID> >\
+ {\
+ };\
+ template<class Iter> struct decode_template_impl<boost::mpl::size_t<ID>, Iter>\
+ {\
+ BOOST_PP_REPEAT(BOOST_PP_SEQ_SIZE(Params),BOOST_TYPEOF_TYPEDEF_INT_PN,_)\
+ typedef Name<BOOST_TYPEOF_SEQ_ENUM(Params,BOOST_TYPEOF_PLACEHOLDER) > type;\
+ typedef Iter iter;\
+ };
+
+#define BOOST_TYPEOF_TYPEDEF_INT_PN(z,n,Params) typedef int BOOST_PP_CAT(P,n);
+
+#define BOOST_TYPEOF_REGISTER_NOTHING(Name,Params,ID)
+
+//Template template param decoding
+#define BOOST_TYPEOF_TYPEDEF_DECODED_TEMPLATE_TEMPLATE_TYPE(Name,Params)\
+ template<BOOST_TYPEOF_SEQ_ENUM(Params,BOOST_TYPEOF_REGISTER_DECLARE_DECODER_TYPE_PARAM_PAIR) >\
+ struct decode_params;\
+ template<BOOST_TYPEOF_SEQ_ENUM(Params,BOOST_TYPEOF_REGISTER_DECODER_TYPE_PARAM_PAIR) >\
+ struct decode_params<BOOST_TYPEOF_SEQ_ENUM(Params,BOOST_TYPEOF_PLACEHOLDER_TYPES) >\
+ {\
+ typedef Name<BOOST_PP_ENUM_PARAMS(BOOST_PP_SEQ_SIZE(Params),T)> type;\
+ };\
+ typedef typename decode_params<BOOST_PP_ENUM_PARAMS(BOOST_PP_SEQ_SIZE(Params),P)>::type type;
+
+#define BOOST_TYPEOF_REGISTER_DECLARE_DECODER_TYPE_PARAM_PAIR(z,n,elem) \
+ BOOST_TYPEOF_VIRTUAL(DECLARATION_TYPE, elem)(elem) BOOST_PP_CAT(T, n)
+
+// BOOST_TYPEOF_HAS_TEMPLATES
+#define BOOST_TYPEOF_HAS_TEMPLATES(Params)\
+ BOOST_PP_SEQ_FOLD_LEFT(BOOST_TYPEOF_HAS_TEMPLATES_OP, 0, Params)
+
+#define BOOST_TYPEOF_HAS_TEMPLATES_OP(s, state, elem)\
+ BOOST_PP_OR(state, BOOST_TYPEOF_VIRTUAL(ISTEMPLATE, elem))
+
+//Define template template arguments
+#define BOOST_TYPEOF_REGISTER_TEMPLATE_TEMPLATE_IMPL(Name,Params,ID)\
+ BOOST_PP_IF(BOOST_TYPEOF_HAS_TEMPLATES(Params),\
+ BOOST_TYPEOF_REGISTER_NOTHING,\
+ BOOST_TYPEOF_REGISTER_TYPE_FOR_TEMPLATE_TEMPLATE)(Name,Params,ID)
+
+#endif //BOOST_TYPEOF_TEMPLATE_TEMPLATE_PARAM_HPP_INCLUDED
diff --git a/boost/boost/typeof/type_encoding.hpp b/boost/boost/typeof/type_encoding.hpp
new file mode 100644
index 00000000000..e0378c23350
--- /dev/null
+++ b/boost/boost/typeof/type_encoding.hpp
@@ -0,0 +1,27 @@
+// Copyright (C) 2004 Arkadiy Vertleyb
+// 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_TYPEOF_TYPE_ENCODING_HPP_INCLUDED
+#define BOOST_TYPEOF_TYPE_ENCODING_HPP_INCLUDED
+
+#define BOOST_TYPEOF_REGISTER_TYPE_IMPL(T, Id) \
+ \
+ template<class V> struct encode_type_impl<V, T > \
+ : boost::type_of::push_back<V, boost::mpl::size_t<Id> > \
+ {}; \
+ template<class Iter> struct decode_type_impl<boost::mpl::size_t<Id>, Iter> \
+ { \
+ typedef T type; \
+ typedef Iter iter; \
+ };
+
+#define BOOST_TYPEOF_REGISTER_TYPE_EXPLICIT_ID(Type, Id) \
+ BOOST_TYPEOF_BEGIN_ENCODE_NS \
+ BOOST_TYPEOF_REGISTER_TYPE_IMPL(Type, Id) \
+ BOOST_TYPEOF_END_ENCODE_NS
+
+#define BOOST_TYPEOF_REGISTER_TYPE(Type) \
+ BOOST_TYPEOF_REGISTER_TYPE_EXPLICIT_ID(Type, BOOST_TYPEOF_UNIQUE_ID())
+
+#endif//BOOST_TYPEOF_TYPE_ENCODING_HPP_INCLUDED
diff --git a/boost/boost/typeof/type_template_param.hpp b/boost/boost/typeof/type_template_param.hpp
new file mode 100644
index 00000000000..28a860c9fa5
--- /dev/null
+++ b/boost/boost/typeof/type_template_param.hpp
@@ -0,0 +1,37 @@
+// Copyright (C) 2005 Arkadiy Vertleyb
+// 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_TYPEOF_TYPE_TEMPLATE_PARAM_HPP_INCLUDED
+#define BOOST_TYPEOF_TYPE_TEMPLATE_PARAM_HPP_INCLUDED
+
+#define BOOST_TYPEOF_class_BOOST_TYPEOF (class)
+#define BOOST_TYPEOF_typename_BOOST_TYPEOF (typename)
+
+#define BOOST_TYPEOF_MAKE_OBJ_class BOOST_TYPEOF_TYPE_PARAM
+#define BOOST_TYPEOF_MAKE_OBJ_typename BOOST_TYPEOF_TYPE_PARAM
+
+#define BOOST_TYPEOF_TYPE_PARAM\
+ (TYPE_PARAM)
+
+#define BOOST_TYPEOF_TYPE_PARAM_EXPANDTYPE(Param) class
+
+// TYPE_PARAM "virtual functions" implementation
+
+#define BOOST_TYPEOF_TYPE_PARAM_ENCODE(This, n)\
+ typedef typename boost::type_of::encode_type<\
+ BOOST_PP_CAT(V, n),\
+ BOOST_PP_CAT(P, n)\
+ >::type BOOST_PP_CAT(V, BOOST_PP_INC(n));
+
+#define BOOST_TYPEOF_TYPE_PARAM_DECODE(This, n)\
+ typedef boost::type_of::decode_type< BOOST_PP_CAT(iter, n) > BOOST_PP_CAT(d, n);\
+ typedef typename BOOST_PP_CAT(d, n)::type BOOST_PP_CAT(P, n);\
+ typedef typename BOOST_PP_CAT(d, n)::iter BOOST_PP_CAT(iter, BOOST_PP_INC(n));
+
+#define BOOST_TYPEOF_TYPE_PARAM_PLACEHOLDER(Param) int
+#define BOOST_TYPEOF_TYPE_PARAM_DECLARATION_TYPE(Param) class
+#define BOOST_TYPEOF_TYPE_PARAM_PLACEHOLDER_TYPES(Param, n) BOOST_PP_CAT(T,n)
+#define BOOST_TYPEOF_TYPE_PARAM_ISTEMPLATE 0
+
+#endif//BOOST_TYPEOF_TYPE_TEMPLATE_PARAM_HPP_INCLUDED
diff --git a/boost/boost/typeof/typeof.hpp b/boost/boost/typeof/typeof.hpp
new file mode 100644
index 00000000000..7228b5c5fd7
--- /dev/null
+++ b/boost/boost/typeof/typeof.hpp
@@ -0,0 +1,150 @@
+// Copyright (C) 2004 Arkadiy Vertleyb
+// 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_TYPEOF_TYPEOF_HPP_INCLUDED
+#define BOOST_TYPEOF_TYPEOF_HPP_INCLUDED
+
+#if defined(BOOST_TYPEOF_COMPLIANT)
+# define BOOST_TYPEOF_EMULATION
+#endif
+
+#if defined(BOOST_TYPEOF_EMULATION) && defined(BOOST_TYPEOF_NATIVE)
+# error both typeof emulation and native mode requested
+#endif
+
+#if defined(__COMO__)
+# ifdef __GNUG__
+# ifndef(BOOST_TYPEOF_EMULATION)
+# ifndef BOOST_TYPEOF_NATIVE
+# define BOOST_TYPEOF_NATIVE
+# endif
+# define BOOST_TYPEOF_KEYWORD typeof
+# endif
+# else
+# ifndef BOOST_TYPEOF_NATIVE
+# ifndef BOOST_TYPEOF_EMULATION
+# define BOOST_TYPEOF_EMULATION
+# endif
+# else
+# error native typeof is not supported
+# endif
+# endif
+
+#elif defined(__INTEL_COMPILER) || defined(__ICL) || defined(__ICC) || defined(__ECC)
+# ifdef __GNUC__
+# ifndef BOOST_TYPEOF_EMULATION
+# ifndef BOOST_TYPEOF_NATIVE
+# define BOOST_TYPEOF_NATIVE
+# endif
+# define BOOST_TYPEOF_KEYWORD __typeof__
+# endif
+# else
+# ifndef BOOST_TYPEOF_NATIVE
+# ifndef BOOST_TYPEOF_EMULATION
+# define BOOST_TYPEOF_EMULATION
+# endif
+# else
+# error native typeof is not supported
+# endif
+# endif
+
+#elif defined(__GNUC__)
+# ifndef BOOST_TYPEOF_EMULATION
+# ifndef BOOST_TYPEOF_NATIVE
+# define BOOST_TYPEOF_NATIVE
+# endif
+# define BOOST_TYPEOF_KEYWORD __typeof__
+# endif
+
+#elif defined(__MWERKS__)
+# if(__MWERKS__ <= 0x3003) // 8.x
+# ifndef BOOST_TYPEOF_EMULATION
+# ifndef BOOST_TYPEOF_NATIVE
+# define BOOST_TYPEOF_NATIVE
+# endif
+# define BOOST_TYPEOF_KEYWORD __typeof__
+# else
+# error typeof emulation is not supported
+# endif
+# else // 9.x
+# ifndef BOOST_TYPEOF_EMULATION
+# ifndef BOOST_TYPEOF_NATIVE
+# define BOOST_TYPEOF_NATIVE
+# endif
+# define BOOST_TYPEOF_KEYWORD __typeof__
+# endif
+# endif
+
+#elif defined(_MSC_VER)
+# if (_MSC_VER <= 1300) // 6.5, 7.0
+# ifndef BOOST_TYPEOF_EMULATION
+# ifndef BOOST_TYPEOF_NATIVE
+# define BOOST_TYPEOF_NATIVE
+# endif
+# include <boost/typeof/msvc/typeof_impl.hpp>
+# define MSVC_TYPEOF_HACK
+# else
+# error typeof emulation is not supported
+# endif
+# elif (_MSC_VER == 1310) // 7.1
+# ifndef BOOST_TYPEOF_EMULATION
+# ifndef BOOST_TYPEOF_NATIVE
+# define BOOST_TYPEOF_NATIVE
+# endif
+# include <boost/typeof/msvc/typeof_impl.hpp>
+# define MSVC_TYPEOF_HACK
+# endif
+# else // 8.0
+# ifndef BOOST_TYPEOF_NATIVE
+# ifndef BOOST_TYPEOF_EMULATION
+# define BOOST_TYPEOF_EMULATION
+# endif
+# else
+# error native typeof is not supported
+# endif
+# endif
+
+#else //unknown compiler
+# ifndef BOOST_TYPEOF_NATIVE
+# ifndef BOOST_TYPEOF_EMULATION
+# define BOOST_TYPEOF_EMULATION
+# endif
+# else
+# ifndef BOOST_TYPEOF_KEYWORD
+# define BOOST_TYPEOF_KEYWORD typeof
+# endif
+# endif
+
+#endif
+
+#define BOOST_TYPEOF_UNIQUE_ID()\
+ BOOST_TYPEOF_REGISTRATION_GROUP * 0x10000 + __LINE__
+
+#define BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()\
+ <boost/typeof/incr_registration_group.hpp>
+
+#ifdef BOOST_TYPEOF_EMULATION
+# define BOOST_TYPEOF_TEXT "using typeof emulation"
+# include <boost/typeof/message.hpp>
+# include <boost/typeof/typeof_impl.hpp>
+# include <boost/typeof/type_encoding.hpp>
+# include <boost/typeof/template_encoding.hpp>
+# include <boost/typeof/modifiers.hpp>
+# include <boost/typeof/pointers_data_members.hpp>
+# include <boost/typeof/register_functions.hpp>
+# include <boost/typeof/register_fundamental.hpp>
+
+#elif defined(BOOST_TYPEOF_NATIVE)
+# define BOOST_TYPEOF_TEXT "using native typeof"
+# include <boost/typeof/message.hpp>
+# include <boost/typeof/native.hpp>
+#else
+# error typeof configuration error
+#endif
+
+// auto
+#define BOOST_AUTO(Var, Expr) BOOST_TYPEOF(Expr) Var = Expr
+#define BOOST_AUTO_TPL(Var, Expr) BOOST_TYPEOF_TPL(Expr) Var = Expr
+
+#endif//BOOST_TYPEOF_TYPEOF_HPP_INCLUDED
diff --git a/boost/boost/typeof/typeof_impl.hpp b/boost/boost/typeof/typeof_impl.hpp
new file mode 100644
index 00000000000..080219966d2
--- /dev/null
+++ b/boost/boost/typeof/typeof_impl.hpp
@@ -0,0 +1,152 @@
+// Copyright (C) 2004, 2005 Arkadiy Vertleyb
+// Copyright (C) 2005 Peder Holt
+// 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_TYPEOF_TYPEOF_IMPL_HPP_INCLUDED
+#define BOOST_TYPEOF_TYPEOF_IMPL_HPP_INCLUDED
+
+#include <boost/mpl/size_t.hpp>
+#include <boost/preprocessor/repetition/enum.hpp>
+#include <boost/typeof/encode_decode.hpp>
+#include <boost/typeof/vector.hpp>
+#include <boost/type_traits/is_function.hpp>
+#include <boost/utility/enable_if.hpp>
+
+#define BOOST_TYPEOF_VECTOR(n) BOOST_PP_CAT(boost::type_of::vector, n)
+
+#define BOOST_TYPEOF_sizer_item(z, n, _)\
+ char item ## n[V::item ## n ::value];
+
+namespace boost { namespace type_of {
+ template<class V>
+ struct sizer
+ {
+ // char item0[V::item0::value];
+ // char item1[V::item1::value];
+ // ...
+
+ BOOST_PP_REPEAT(BOOST_TYPEOF_LIMIT_SIZE, BOOST_TYPEOF_sizer_item, ~)
+ };
+}}
+
+#undef BOOST_TYPEOF_sizer_item
+
+//
+namespace boost { namespace type_of {
+# ifdef BOOST_NO_SFINAE
+ template<class V, class T>
+ sizer<typename encode_type<V, T>::type> encode(const T&);
+# else
+ template<class V, class T>
+ typename enable_if<
+ typename is_function<T>::type,
+ sizer<typename encode_type<V, T>::type> >::type encode(T&);
+
+ template<class V, class T>
+ typename disable_if<
+ typename is_function<T>::type,
+ sizer<typename encode_type<V, T>::type> >::type encode(const T&);
+# endif
+}}
+//
+namespace boost { namespace type_of {
+
+ template<class V>
+ struct decode_begin
+ {
+ typedef typename decode_type<typename V::begin>::type type;
+ };
+}}
+
+#define BOOST_TYPEOF_TYPEITEM(z, n, expr)\
+ boost::mpl::size_t<sizeof(boost::type_of::encode<BOOST_TYPEOF_VECTOR(0)<> >(expr).item ## n)>
+
+#define BOOST_TYPEOF_ENCODED_VECTOR(Expr) \
+ BOOST_TYPEOF_VECTOR(BOOST_TYPEOF_LIMIT_SIZE)< \
+ BOOST_PP_ENUM(BOOST_TYPEOF_LIMIT_SIZE, BOOST_TYPEOF_TYPEITEM, Expr) \
+ >
+
+#define BOOST_TYPEOF(Expr)\
+ boost::type_of::decode_begin<BOOST_TYPEOF_ENCODED_VECTOR(Expr) >::type
+
+#define BOOST_TYPEOF_TPL typename BOOST_TYPEOF
+
+//offset_vector is used to delay the insertion of data into the vector in order to allow
+//encoding to be done in many steps
+namespace boost { namespace type_of {
+ template<typename V,typename Offset>
+ struct offset_vector {
+ };
+
+ template<class V,class Offset,class T>
+ struct push_back<boost::type_of::offset_vector<V,Offset>,T> {
+ typedef offset_vector<V,typename Offset::prior> type;
+ };
+
+ template<class V,class T>
+ struct push_back<boost::type_of::offset_vector<V,mpl::size_t<0> >,T> {
+ typedef typename push_back<V,T>::type type;
+ };
+}}
+
+#define BOOST_TYPEOF_NESTED_TYPEITEM(z, n, expr)\
+ BOOST_STATIC_CONSTANT(int,BOOST_PP_CAT(value,n) = sizeof(boost::type_of::encode<_typeof_start_vector>(expr).item ## n));\
+ typedef boost::mpl::size_t<BOOST_PP_CAT(value,n)> BOOST_PP_CAT(item,n);
+
+#ifdef __DMC__
+#define BOOST_TYPEOF_NESTED_TYPEITEM_2(z,n,expr)\
+ typedef typename _typeof_encode_fraction<iteration>::BOOST_PP_CAT(item,n) BOOST_PP_CAT(item,n);
+
+#define BOOST_TYPEOF_FRACTIONTYPE()\
+ BOOST_PP_REPEAT(BOOST_TYPEOF_LIMIT_SIZE,BOOST_TYPEOF_NESTED_TYPEITEM_2,_)\
+ typedef _typeof_fraction_iter<Pos> fraction_type;
+#else
+#define BOOST_TYPEOF_FRACTIONTYPE()\
+ typedef _typeof_encode_fraction<iteration> fraction_type;
+#endif
+
+#define BOOST_TYPEOF_NESTED_TYPEDEF_IMPL(expr) \
+ template<int _Typeof_Iteration>\
+ struct _typeof_encode_fraction {\
+ BOOST_STATIC_CONSTANT(int,_typeof_encode_offset = (_Typeof_Iteration*BOOST_TYPEOF_LIMIT_SIZE));\
+ typedef boost::type_of::offset_vector<BOOST_TYPEOF_VECTOR(0)<>,boost::mpl::size_t<_typeof_encode_offset> > _typeof_start_vector;\
+ BOOST_PP_REPEAT(BOOST_TYPEOF_LIMIT_SIZE,BOOST_TYPEOF_NESTED_TYPEITEM,expr)\
+ };\
+ template<typename Pos>\
+ struct _typeof_fraction_iter {\
+ BOOST_STATIC_CONSTANT(int,pos=(Pos::value));\
+ BOOST_STATIC_CONSTANT(int,iteration=(pos/BOOST_TYPEOF_LIMIT_SIZE));\
+ BOOST_STATIC_CONSTANT(int,where=pos%BOOST_TYPEOF_LIMIT_SIZE);\
+ BOOST_TYPEOF_FRACTIONTYPE();\
+ typedef typename boost::type_of::v_iter<fraction_type,boost::mpl::int_<where> >::type type;\
+ typedef _typeof_fraction_iter<typename Pos::next> next;\
+ };
+
+#ifdef __MWERKS__
+
+# define BOOST_TYPEOF_NESTED_TYPEDEF(name,expr) \
+template<typename T>\
+struct BOOST_PP_CAT(_typeof_template_,name) {\
+ BOOST_TYPEOF_NESTED_TYPEDEF_IMPL(expr)\
+ typedef typename boost::type_of::decode_type<_typeof_fraction_iter<boost::mpl::size_t<0> > >::type type;\
+};\
+typedef BOOST_PP_CAT(_typeof_template_,name)<int> name;
+
+# define BOOST_TYPEOF_NESTED_TYPEDEF_TPL(name,expr) BOOST_TYPEOF_NESTED_TYPEDEF(name,expr);
+
+#else
+# define BOOST_TYPEOF_NESTED_TYPEDEF_TPL(name,expr) \
+ struct name {\
+ BOOST_TYPEOF_NESTED_TYPEDEF_IMPL(expr)\
+ typedef typename boost::type_of::decode_type<_typeof_fraction_iter<boost::mpl::size_t<0> > >::type type;\
+ };
+
+# define BOOST_TYPEOF_NESTED_TYPEDEF(name,expr) \
+ struct name {\
+ BOOST_TYPEOF_NESTED_TYPEDEF_IMPL(expr)\
+ typedef boost::type_of::decode_type<_typeof_fraction_iter<boost::mpl::size_t<0> > >::type type;\
+ };
+#endif
+
+#endif//BOOST_TYPEOF_COMPLIANT_TYPEOF_IMPL_HPP_INCLUDED
diff --git a/boost/boost/typeof/vector.hpp b/boost/boost/typeof/vector.hpp
new file mode 100644
index 00000000000..a9859142170
--- /dev/null
+++ b/boost/boost/typeof/vector.hpp
@@ -0,0 +1,163 @@
+// Copyright (C) 2005 Arkadiy Vertleyb
+// Copyright (C) 2005 Peder Holt
+//
+// Copyright (C) 2006 Tobias Schwinger
+//
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPEOF_VECTOR_HPP_INCLUDED
+
+#include <boost/mpl/int.hpp>
+#include <boost/preprocessor/iteration/self.hpp>
+
+#ifndef BOOST_TYPEOF_LIMIT_SIZE
+# define BOOST_TYPEOF_LIMIT_SIZE 50
+#endif
+
+//
+// To recreate the preprocessed versions of this file preprocess and run
+//
+// $(BOOST_ROOT)/libs/typeof/tools/preprocess.pl
+//
+
+#if defined(BOOST_TYPEOF_PP_INCLUDE_EXTERNAL)
+
+# undef BOOST_TYPEOF_PP_INCLUDE_EXTERNAL
+
+#elif !defined(BOOST_TYPEOF_PREPROCESSING_MODE) && !BOOST_PP_IS_SELFISH
+
+# define BOOST_PP_INDIRECT_SELF <boost/typeof/vector.hpp>
+# if BOOST_TYPEOF_LIMIT_SIZE < 50
+# include BOOST_PP_INCLUDE_SELF()
+# elif BOOST_TYPEOF_LIMIT_SIZE < 100
+# include <boost/typeof/vector50.hpp>
+# define BOOST_TYPEOF_PP_START_SIZE 51
+# include BOOST_PP_INCLUDE_SELF()
+# elif BOOST_TYPEOF_LIMIT_SIZE < 150
+# include <boost/typeof/vector100.hpp>
+# define BOOST_TYPEOF_PP_START_SIZE 101
+# include BOOST_PP_INCLUDE_SELF()
+# elif BOOST_TYPEOF_LIMIT_SIZE < 200
+# include <boost/typeof/vector150.hpp>
+# define BOOST_TYPEOF_PP_START_SIZE 151
+# include BOOST_PP_INCLUDE_SELF()
+# elif BOOST_TYPEOF_LIMIT_SIZE <= 250
+# include <boost/typeof/vector200.hpp>
+# define BOOST_TYPEOF_PP_START_SIZE 201
+# include BOOST_PP_INCLUDE_SELF()
+# else
+# error "BOOST_TYPEOF_LIMIT_SIZE too high"
+# endif
+
+#else// defined(BOOST_TYPEOF_PREPROCESSING_MODE) || BOOST_PP_IS_SELFISH
+
+# ifndef BOOST_TYPEOF_PP_NEXT_SIZE
+# define BOOST_TYPEOF_PP_NEXT_SIZE BOOST_TYPEOF_LIMIT_SIZE
+# endif
+# ifndef BOOST_TYPEOF_PP_START_SIZE
+# define BOOST_TYPEOF_PP_START_SIZE 0
+# endif
+
+# if BOOST_TYPEOF_PP_START_SIZE <= BOOST_TYPEOF_LIMIT_SIZE
+
+# include <boost/preprocessor/enum_params.hpp>
+# include <boost/preprocessor/repeat.hpp>
+# include <boost/preprocessor/repeat_from_to.hpp>
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/inc.hpp>
+# include <boost/preprocessor/dec.hpp>
+# include <boost/preprocessor/comma_if.hpp>
+# include <boost/preprocessor/iteration/local.hpp>
+# include <boost/preprocessor/control/expr_iif.hpp>
+# include <boost/preprocessor/logical/not.hpp>
+
+// iterator
+
+# define BOOST_TYPEOF_spec_iter(n)\
+ template<class V>\
+ struct v_iter<V, mpl::int_<n> >\
+ {\
+ typedef typename V::item ## n type;\
+ typedef v_iter<V, mpl::int_<n + 1> > next;\
+ };
+
+namespace boost { namespace type_of {
+
+ template<class V, class Increase_BOOST_TYPEOF_LIMIT_SIZE> struct v_iter; // not defined
+# define BOOST_PP_LOCAL_MACRO BOOST_TYPEOF_spec_iter
+# define BOOST_PP_LOCAL_LIMITS \
+ (BOOST_PP_DEC(BOOST_TYPEOF_PP_START_SIZE), \
+ BOOST_PP_DEC(BOOST_TYPEOF_LIMIT_SIZE))
+# include BOOST_PP_LOCAL_ITERATE()
+
+}}
+
+# undef BOOST_TYPEOF_spec_iter
+
+// vector
+
+# define BOOST_TYPEOF_typedef_item(z, n, _)\
+ typedef P ## n item ## n;
+
+# define BOOST_TYPEOF_typedef_fake_item(z, n, _)\
+ typedef mpl::int_<1> item ## n;
+
+# define BOOST_TYPEOF_define_vector(n)\
+ template<BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IIF(BOOST_PP_NOT(n), class T = void)>\
+ struct vector ## n\
+ {\
+ typedef v_iter<vector ## n, boost::mpl::int_<0> > begin;\
+ BOOST_PP_REPEAT(n, BOOST_TYPEOF_typedef_item, ~)\
+ BOOST_PP_REPEAT_FROM_TO(n, BOOST_TYPEOF_PP_NEXT_SIZE, BOOST_TYPEOF_typedef_fake_item, ~)\
+ };
+
+namespace boost { namespace type_of {
+
+# define BOOST_PP_LOCAL_MACRO BOOST_TYPEOF_define_vector
+# define BOOST_PP_LOCAL_LIMITS \
+ (BOOST_TYPEOF_PP_START_SIZE,BOOST_TYPEOF_LIMIT_SIZE)
+# include BOOST_PP_LOCAL_ITERATE()
+
+}}
+
+# undef BOOST_TYPEOF_typedef_item
+# undef BOOST_TYPEOF_typedef_fake_item
+# undef BOOST_TYPEOF_define_vector
+
+// push_back
+
+# define BOOST_TYPEOF_spec_push_back(n)\
+ template<BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_COMMA_IF(n) class T>\
+ struct push_back<BOOST_PP_CAT(boost::type_of::vector, n)<BOOST_PP_ENUM_PARAMS(n, P)>, T>\
+ {\
+ typedef BOOST_PP_CAT(boost::type_of::vector, BOOST_PP_INC(n))<\
+ BOOST_PP_ENUM_PARAMS(n, P) BOOST_PP_COMMA_IF(n) T\
+ > type;\
+ };
+
+namespace boost { namespace type_of {
+
+ template<class V, class T> struct push_back {
+ typedef V type;
+ }; //default behaviour is to let push_back ignore T, and return the input vector.
+ //This is to let BOOST_TYPEOF_NESTED_TYPEDEF work properly with the default vector.
+# define BOOST_PP_LOCAL_MACRO BOOST_TYPEOF_spec_push_back
+# define BOOST_PP_LOCAL_LIMITS \
+ (BOOST_PP_DEC(BOOST_TYPEOF_PP_START_SIZE), \
+ BOOST_PP_DEC(BOOST_TYPEOF_LIMIT_SIZE))
+# include BOOST_PP_LOCAL_ITERATE()
+
+}}
+
+# undef BOOST_TYPEOF_spec_push_back
+
+# endif//BOOST_TYPEOF_PP_START_SIZE<=BOOST_TYPEOF_LIMIT_SIZE
+# undef BOOST_TYPEOF_PP_START_SIZE
+# undef BOOST_TYPEOF_PP_NEXT_SIZE
+
+#endif//BOOST_TYPEOF_PREPROCESSING_MODE || BOOST_PP_IS_SELFISH
+
+#define BOOST_TYPEOF_VECTOR_HPP_INCLUDED
+#endif//BOOST_TYPEOF_VECTOR_HPP_INCLUDED
+
diff --git a/boost/boost/typeof/vector100.hpp b/boost/boost/typeof/vector100.hpp
new file mode 100644
index 00000000000..7bbbd1168b2
--- /dev/null
+++ b/boost/boost/typeof/vector100.hpp
@@ -0,0 +1,321 @@
+
+// Copyright (C) 2005 Arkadiy Vertleyb
+// Copyright (C) 2005 Peder Holt
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+// Preprocessed code, do not edit manually !
+
+
+namespace boost { namespace type_of {
+ template<class V, class Increase_BOOST_TYPEOF_LIMIT_SIZE> struct v_iter; // not defined
+ template<class V> struct v_iter<V, mpl::int_<0> > { typedef typename V::item0 type; typedef v_iter<V, mpl::int_<0 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<1> > { typedef typename V::item1 type; typedef v_iter<V, mpl::int_<1 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<2> > { typedef typename V::item2 type; typedef v_iter<V, mpl::int_<2 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<3> > { typedef typename V::item3 type; typedef v_iter<V, mpl::int_<3 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<4> > { typedef typename V::item4 type; typedef v_iter<V, mpl::int_<4 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<5> > { typedef typename V::item5 type; typedef v_iter<V, mpl::int_<5 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<6> > { typedef typename V::item6 type; typedef v_iter<V, mpl::int_<6 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<7> > { typedef typename V::item7 type; typedef v_iter<V, mpl::int_<7 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<8> > { typedef typename V::item8 type; typedef v_iter<V, mpl::int_<8 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<9> > { typedef typename V::item9 type; typedef v_iter<V, mpl::int_<9 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<10> > { typedef typename V::item10 type; typedef v_iter<V, mpl::int_<10 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<11> > { typedef typename V::item11 type; typedef v_iter<V, mpl::int_<11 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<12> > { typedef typename V::item12 type; typedef v_iter<V, mpl::int_<12 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<13> > { typedef typename V::item13 type; typedef v_iter<V, mpl::int_<13 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<14> > { typedef typename V::item14 type; typedef v_iter<V, mpl::int_<14 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<15> > { typedef typename V::item15 type; typedef v_iter<V, mpl::int_<15 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<16> > { typedef typename V::item16 type; typedef v_iter<V, mpl::int_<16 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<17> > { typedef typename V::item17 type; typedef v_iter<V, mpl::int_<17 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<18> > { typedef typename V::item18 type; typedef v_iter<V, mpl::int_<18 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<19> > { typedef typename V::item19 type; typedef v_iter<V, mpl::int_<19 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<20> > { typedef typename V::item20 type; typedef v_iter<V, mpl::int_<20 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<21> > { typedef typename V::item21 type; typedef v_iter<V, mpl::int_<21 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<22> > { typedef typename V::item22 type; typedef v_iter<V, mpl::int_<22 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<23> > { typedef typename V::item23 type; typedef v_iter<V, mpl::int_<23 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<24> > { typedef typename V::item24 type; typedef v_iter<V, mpl::int_<24 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<25> > { typedef typename V::item25 type; typedef v_iter<V, mpl::int_<25 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<26> > { typedef typename V::item26 type; typedef v_iter<V, mpl::int_<26 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<27> > { typedef typename V::item27 type; typedef v_iter<V, mpl::int_<27 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<28> > { typedef typename V::item28 type; typedef v_iter<V, mpl::int_<28 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<29> > { typedef typename V::item29 type; typedef v_iter<V, mpl::int_<29 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<30> > { typedef typename V::item30 type; typedef v_iter<V, mpl::int_<30 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<31> > { typedef typename V::item31 type; typedef v_iter<V, mpl::int_<31 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<32> > { typedef typename V::item32 type; typedef v_iter<V, mpl::int_<32 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<33> > { typedef typename V::item33 type; typedef v_iter<V, mpl::int_<33 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<34> > { typedef typename V::item34 type; typedef v_iter<V, mpl::int_<34 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<35> > { typedef typename V::item35 type; typedef v_iter<V, mpl::int_<35 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<36> > { typedef typename V::item36 type; typedef v_iter<V, mpl::int_<36 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<37> > { typedef typename V::item37 type; typedef v_iter<V, mpl::int_<37 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<38> > { typedef typename V::item38 type; typedef v_iter<V, mpl::int_<38 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<39> > { typedef typename V::item39 type; typedef v_iter<V, mpl::int_<39 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<40> > { typedef typename V::item40 type; typedef v_iter<V, mpl::int_<40 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<41> > { typedef typename V::item41 type; typedef v_iter<V, mpl::int_<41 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<42> > { typedef typename V::item42 type; typedef v_iter<V, mpl::int_<42 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<43> > { typedef typename V::item43 type; typedef v_iter<V, mpl::int_<43 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<44> > { typedef typename V::item44 type; typedef v_iter<V, mpl::int_<44 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<45> > { typedef typename V::item45 type; typedef v_iter<V, mpl::int_<45 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<46> > { typedef typename V::item46 type; typedef v_iter<V, mpl::int_<46 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<47> > { typedef typename V::item47 type; typedef v_iter<V, mpl::int_<47 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<48> > { typedef typename V::item48 type; typedef v_iter<V, mpl::int_<48 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<49> > { typedef typename V::item49 type; typedef v_iter<V, mpl::int_<49 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<50> > { typedef typename V::item50 type; typedef v_iter<V, mpl::int_<50 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<51> > { typedef typename V::item51 type; typedef v_iter<V, mpl::int_<51 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<52> > { typedef typename V::item52 type; typedef v_iter<V, mpl::int_<52 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<53> > { typedef typename V::item53 type; typedef v_iter<V, mpl::int_<53 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<54> > { typedef typename V::item54 type; typedef v_iter<V, mpl::int_<54 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<55> > { typedef typename V::item55 type; typedef v_iter<V, mpl::int_<55 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<56> > { typedef typename V::item56 type; typedef v_iter<V, mpl::int_<56 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<57> > { typedef typename V::item57 type; typedef v_iter<V, mpl::int_<57 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<58> > { typedef typename V::item58 type; typedef v_iter<V, mpl::int_<58 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<59> > { typedef typename V::item59 type; typedef v_iter<V, mpl::int_<59 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<60> > { typedef typename V::item60 type; typedef v_iter<V, mpl::int_<60 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<61> > { typedef typename V::item61 type; typedef v_iter<V, mpl::int_<61 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<62> > { typedef typename V::item62 type; typedef v_iter<V, mpl::int_<62 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<63> > { typedef typename V::item63 type; typedef v_iter<V, mpl::int_<63 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<64> > { typedef typename V::item64 type; typedef v_iter<V, mpl::int_<64 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<65> > { typedef typename V::item65 type; typedef v_iter<V, mpl::int_<65 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<66> > { typedef typename V::item66 type; typedef v_iter<V, mpl::int_<66 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<67> > { typedef typename V::item67 type; typedef v_iter<V, mpl::int_<67 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<68> > { typedef typename V::item68 type; typedef v_iter<V, mpl::int_<68 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<69> > { typedef typename V::item69 type; typedef v_iter<V, mpl::int_<69 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<70> > { typedef typename V::item70 type; typedef v_iter<V, mpl::int_<70 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<71> > { typedef typename V::item71 type; typedef v_iter<V, mpl::int_<71 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<72> > { typedef typename V::item72 type; typedef v_iter<V, mpl::int_<72 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<73> > { typedef typename V::item73 type; typedef v_iter<V, mpl::int_<73 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<74> > { typedef typename V::item74 type; typedef v_iter<V, mpl::int_<74 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<75> > { typedef typename V::item75 type; typedef v_iter<V, mpl::int_<75 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<76> > { typedef typename V::item76 type; typedef v_iter<V, mpl::int_<76 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<77> > { typedef typename V::item77 type; typedef v_iter<V, mpl::int_<77 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<78> > { typedef typename V::item78 type; typedef v_iter<V, mpl::int_<78 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<79> > { typedef typename V::item79 type; typedef v_iter<V, mpl::int_<79 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<80> > { typedef typename V::item80 type; typedef v_iter<V, mpl::int_<80 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<81> > { typedef typename V::item81 type; typedef v_iter<V, mpl::int_<81 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<82> > { typedef typename V::item82 type; typedef v_iter<V, mpl::int_<82 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<83> > { typedef typename V::item83 type; typedef v_iter<V, mpl::int_<83 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<84> > { typedef typename V::item84 type; typedef v_iter<V, mpl::int_<84 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<85> > { typedef typename V::item85 type; typedef v_iter<V, mpl::int_<85 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<86> > { typedef typename V::item86 type; typedef v_iter<V, mpl::int_<86 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<87> > { typedef typename V::item87 type; typedef v_iter<V, mpl::int_<87 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<88> > { typedef typename V::item88 type; typedef v_iter<V, mpl::int_<88 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<89> > { typedef typename V::item89 type; typedef v_iter<V, mpl::int_<89 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<90> > { typedef typename V::item90 type; typedef v_iter<V, mpl::int_<90 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<91> > { typedef typename V::item91 type; typedef v_iter<V, mpl::int_<91 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<92> > { typedef typename V::item92 type; typedef v_iter<V, mpl::int_<92 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<93> > { typedef typename V::item93 type; typedef v_iter<V, mpl::int_<93 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<94> > { typedef typename V::item94 type; typedef v_iter<V, mpl::int_<94 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<95> > { typedef typename V::item95 type; typedef v_iter<V, mpl::int_<95 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<96> > { typedef typename V::item96 type; typedef v_iter<V, mpl::int_<96 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<97> > { typedef typename V::item97 type; typedef v_iter<V, mpl::int_<97 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<98> > { typedef typename V::item98 type; typedef v_iter<V, mpl::int_<98 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<99> > { typedef typename V::item99 type; typedef v_iter<V, mpl::int_<99 + 1> > next; };
+}}
+namespace boost { namespace type_of {
+ template< class T = void> struct vector0 { typedef v_iter<vector0, boost::mpl::int_<0> > begin; typedef mpl::int_<1> item0; typedef mpl::int_<1> item1; typedef mpl::int_<1> item2; typedef mpl::int_<1> item3; typedef mpl::int_<1> item4; typedef mpl::int_<1> item5; typedef mpl::int_<1> item6; typedef mpl::int_<1> item7; typedef mpl::int_<1> item8; typedef mpl::int_<1> item9; typedef mpl::int_<1> item10; typedef mpl::int_<1> item11; typedef mpl::int_<1> item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 > struct vector1 { typedef v_iter<vector1, boost::mpl::int_<0> > begin; typedef P0 item0; typedef mpl::int_<1> item1; typedef mpl::int_<1> item2; typedef mpl::int_<1> item3; typedef mpl::int_<1> item4; typedef mpl::int_<1> item5; typedef mpl::int_<1> item6; typedef mpl::int_<1> item7; typedef mpl::int_<1> item8; typedef mpl::int_<1> item9; typedef mpl::int_<1> item10; typedef mpl::int_<1> item11; typedef mpl::int_<1> item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 > struct vector2 { typedef v_iter<vector2, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef mpl::int_<1> item2; typedef mpl::int_<1> item3; typedef mpl::int_<1> item4; typedef mpl::int_<1> item5; typedef mpl::int_<1> item6; typedef mpl::int_<1> item7; typedef mpl::int_<1> item8; typedef mpl::int_<1> item9; typedef mpl::int_<1> item10; typedef mpl::int_<1> item11; typedef mpl::int_<1> item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 > struct vector3 { typedef v_iter<vector3, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef mpl::int_<1> item3; typedef mpl::int_<1> item4; typedef mpl::int_<1> item5; typedef mpl::int_<1> item6; typedef mpl::int_<1> item7; typedef mpl::int_<1> item8; typedef mpl::int_<1> item9; typedef mpl::int_<1> item10; typedef mpl::int_<1> item11; typedef mpl::int_<1> item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 > struct vector4 { typedef v_iter<vector4, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef mpl::int_<1> item4; typedef mpl::int_<1> item5; typedef mpl::int_<1> item6; typedef mpl::int_<1> item7; typedef mpl::int_<1> item8; typedef mpl::int_<1> item9; typedef mpl::int_<1> item10; typedef mpl::int_<1> item11; typedef mpl::int_<1> item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 > struct vector5 { typedef v_iter<vector5, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef mpl::int_<1> item5; typedef mpl::int_<1> item6; typedef mpl::int_<1> item7; typedef mpl::int_<1> item8; typedef mpl::int_<1> item9; typedef mpl::int_<1> item10; typedef mpl::int_<1> item11; typedef mpl::int_<1> item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 > struct vector6 { typedef v_iter<vector6, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef mpl::int_<1> item6; typedef mpl::int_<1> item7; typedef mpl::int_<1> item8; typedef mpl::int_<1> item9; typedef mpl::int_<1> item10; typedef mpl::int_<1> item11; typedef mpl::int_<1> item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 > struct vector7 { typedef v_iter<vector7, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef mpl::int_<1> item7; typedef mpl::int_<1> item8; typedef mpl::int_<1> item9; typedef mpl::int_<1> item10; typedef mpl::int_<1> item11; typedef mpl::int_<1> item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 > struct vector8 { typedef v_iter<vector8, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef mpl::int_<1> item8; typedef mpl::int_<1> item9; typedef mpl::int_<1> item10; typedef mpl::int_<1> item11; typedef mpl::int_<1> item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 > struct vector9 { typedef v_iter<vector9, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef mpl::int_<1> item9; typedef mpl::int_<1> item10; typedef mpl::int_<1> item11; typedef mpl::int_<1> item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 > struct vector10 { typedef v_iter<vector10, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef mpl::int_<1> item10; typedef mpl::int_<1> item11; typedef mpl::int_<1> item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 > struct vector11 { typedef v_iter<vector11, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef mpl::int_<1> item11; typedef mpl::int_<1> item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 > struct vector12 { typedef v_iter<vector12, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef mpl::int_<1> item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 > struct vector13 { typedef v_iter<vector13, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 > struct vector14 { typedef v_iter<vector14, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 > struct vector15 { typedef v_iter<vector15, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 > struct vector16 { typedef v_iter<vector16, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 > struct vector17 { typedef v_iter<vector17, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 > struct vector18 { typedef v_iter<vector18, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 > struct vector19 { typedef v_iter<vector19, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 > struct vector20 { typedef v_iter<vector20, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 > struct vector21 { typedef v_iter<vector21, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 > struct vector22 { typedef v_iter<vector22, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 > struct vector23 { typedef v_iter<vector23, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 > struct vector24 { typedef v_iter<vector24, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 > struct vector25 { typedef v_iter<vector25, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 > struct vector26 { typedef v_iter<vector26, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 > struct vector27 { typedef v_iter<vector27, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 > struct vector28 { typedef v_iter<vector28, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 > struct vector29 { typedef v_iter<vector29, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 > struct vector30 { typedef v_iter<vector30, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 > struct vector31 { typedef v_iter<vector31, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 > struct vector32 { typedef v_iter<vector32, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 > struct vector33 { typedef v_iter<vector33, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 > struct vector34 { typedef v_iter<vector34, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 > struct vector35 { typedef v_iter<vector35, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 > struct vector36 { typedef v_iter<vector36, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 > struct vector37 { typedef v_iter<vector37, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 > struct vector38 { typedef v_iter<vector38, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 > struct vector39 { typedef v_iter<vector39, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 > struct vector40 { typedef v_iter<vector40, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 > struct vector41 { typedef v_iter<vector41, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 > struct vector42 { typedef v_iter<vector42, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 > struct vector43 { typedef v_iter<vector43, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 > struct vector44 { typedef v_iter<vector44, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 > struct vector45 { typedef v_iter<vector45, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 > struct vector46 { typedef v_iter<vector46, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 > struct vector47 { typedef v_iter<vector47, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 > struct vector48 { typedef v_iter<vector48, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 > struct vector49 { typedef v_iter<vector49, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 > struct vector50 { typedef v_iter<vector50, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 > struct vector51 { typedef v_iter<vector51, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 > struct vector52 { typedef v_iter<vector52, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 > struct vector53 { typedef v_iter<vector53, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 > struct vector54 { typedef v_iter<vector54, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 > struct vector55 { typedef v_iter<vector55, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 > struct vector56 { typedef v_iter<vector56, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 > struct vector57 { typedef v_iter<vector57, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 > struct vector58 { typedef v_iter<vector58, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 > struct vector59 { typedef v_iter<vector59, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 > struct vector60 { typedef v_iter<vector60, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 > struct vector61 { typedef v_iter<vector61, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 > struct vector62 { typedef v_iter<vector62, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 > struct vector63 { typedef v_iter<vector63, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 > struct vector64 { typedef v_iter<vector64, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 > struct vector65 { typedef v_iter<vector65, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 > struct vector66 { typedef v_iter<vector66, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 > struct vector67 { typedef v_iter<vector67, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 > struct vector68 { typedef v_iter<vector68, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 > struct vector69 { typedef v_iter<vector69, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 > struct vector70 { typedef v_iter<vector70, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 > struct vector71 { typedef v_iter<vector71, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 > struct vector72 { typedef v_iter<vector72, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 > struct vector73 { typedef v_iter<vector73, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 > struct vector74 { typedef v_iter<vector74, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 > struct vector75 { typedef v_iter<vector75, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 > struct vector76 { typedef v_iter<vector76, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 > struct vector77 { typedef v_iter<vector77, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 > struct vector78 { typedef v_iter<vector78, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 > struct vector79 { typedef v_iter<vector79, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 > struct vector80 { typedef v_iter<vector80, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 > struct vector81 { typedef v_iter<vector81, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 > struct vector82 { typedef v_iter<vector82, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 > struct vector83 { typedef v_iter<vector83, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 > struct vector84 { typedef v_iter<vector84, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 > struct vector85 { typedef v_iter<vector85, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 > struct vector86 { typedef v_iter<vector86, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 > struct vector87 { typedef v_iter<vector87, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 > struct vector88 { typedef v_iter<vector88, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 > struct vector89 { typedef v_iter<vector89, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 > struct vector90 { typedef v_iter<vector90, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 > struct vector91 { typedef v_iter<vector91, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 > struct vector92 { typedef v_iter<vector92, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 > struct vector93 { typedef v_iter<vector93, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 > struct vector94 { typedef v_iter<vector94, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 > struct vector95 { typedef v_iter<vector95, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 > struct vector96 { typedef v_iter<vector96, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 > struct vector97 { typedef v_iter<vector97, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 > struct vector98 { typedef v_iter<vector98, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 > struct vector99 { typedef v_iter<vector99, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 > struct vector100 { typedef v_iter<vector100, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; };
+}}
+namespace boost { namespace type_of {
+ template<class V, class T> struct push_back {
+ typedef V type;
+ };
+ template< class T> struct push_back<boost::type_of::vector0<>, T> { typedef boost::type_of::vector1< T > type; };
+ template< class P0 , class T> struct push_back<boost::type_of::vector1< P0>, T> { typedef boost::type_of::vector2< P0 , T > type; };
+ template< class P0 , class P1 , class T> struct push_back<boost::type_of::vector2< P0 , P1>, T> { typedef boost::type_of::vector3< P0 , P1 , T > type; };
+ template< class P0 , class P1 , class P2 , class T> struct push_back<boost::type_of::vector3< P0 , P1 , P2>, T> { typedef boost::type_of::vector4< P0 , P1 , P2 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class T> struct push_back<boost::type_of::vector4< P0 , P1 , P2 , P3>, T> { typedef boost::type_of::vector5< P0 , P1 , P2 , P3 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class T> struct push_back<boost::type_of::vector5< P0 , P1 , P2 , P3 , P4>, T> { typedef boost::type_of::vector6< P0 , P1 , P2 , P3 , P4 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class T> struct push_back<boost::type_of::vector6< P0 , P1 , P2 , P3 , P4 , P5>, T> { typedef boost::type_of::vector7< P0 , P1 , P2 , P3 , P4 , P5 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class T> struct push_back<boost::type_of::vector7< P0 , P1 , P2 , P3 , P4 , P5 , P6>, T> { typedef boost::type_of::vector8< P0 , P1 , P2 , P3 , P4 , P5 , P6 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class T> struct push_back<boost::type_of::vector8< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7>, T> { typedef boost::type_of::vector9< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class T> struct push_back<boost::type_of::vector9< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8>, T> { typedef boost::type_of::vector10< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class T> struct push_back<boost::type_of::vector10< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9>, T> { typedef boost::type_of::vector11< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class T> struct push_back<boost::type_of::vector11< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10>, T> { typedef boost::type_of::vector12< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class T> struct push_back<boost::type_of::vector12< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11>, T> { typedef boost::type_of::vector13< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class T> struct push_back<boost::type_of::vector13< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12>, T> { typedef boost::type_of::vector14< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class T> struct push_back<boost::type_of::vector14< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13>, T> { typedef boost::type_of::vector15< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class T> struct push_back<boost::type_of::vector15< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14>, T> { typedef boost::type_of::vector16< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class T> struct push_back<boost::type_of::vector16< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15>, T> { typedef boost::type_of::vector17< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class T> struct push_back<boost::type_of::vector17< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16>, T> { typedef boost::type_of::vector18< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class T> struct push_back<boost::type_of::vector18< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17>, T> { typedef boost::type_of::vector19< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class T> struct push_back<boost::type_of::vector19< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18>, T> { typedef boost::type_of::vector20< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class T> struct push_back<boost::type_of::vector20< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19>, T> { typedef boost::type_of::vector21< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class T> struct push_back<boost::type_of::vector21< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20>, T> { typedef boost::type_of::vector22< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class T> struct push_back<boost::type_of::vector22< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21>, T> { typedef boost::type_of::vector23< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class T> struct push_back<boost::type_of::vector23< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22>, T> { typedef boost::type_of::vector24< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class T> struct push_back<boost::type_of::vector24< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23>, T> { typedef boost::type_of::vector25< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class T> struct push_back<boost::type_of::vector25< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24>, T> { typedef boost::type_of::vector26< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class T> struct push_back<boost::type_of::vector26< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25>, T> { typedef boost::type_of::vector27< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class T> struct push_back<boost::type_of::vector27< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26>, T> { typedef boost::type_of::vector28< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class T> struct push_back<boost::type_of::vector28< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27>, T> { typedef boost::type_of::vector29< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class T> struct push_back<boost::type_of::vector29< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28>, T> { typedef boost::type_of::vector30< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class T> struct push_back<boost::type_of::vector30< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29>, T> { typedef boost::type_of::vector31< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class T> struct push_back<boost::type_of::vector31< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30>, T> { typedef boost::type_of::vector32< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class T> struct push_back<boost::type_of::vector32< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31>, T> { typedef boost::type_of::vector33< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class T> struct push_back<boost::type_of::vector33< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32>, T> { typedef boost::type_of::vector34< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class T> struct push_back<boost::type_of::vector34< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33>, T> { typedef boost::type_of::vector35< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class T> struct push_back<boost::type_of::vector35< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34>, T> { typedef boost::type_of::vector36< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class T> struct push_back<boost::type_of::vector36< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35>, T> { typedef boost::type_of::vector37< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class T> struct push_back<boost::type_of::vector37< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36>, T> { typedef boost::type_of::vector38< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class T> struct push_back<boost::type_of::vector38< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37>, T> { typedef boost::type_of::vector39< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class T> struct push_back<boost::type_of::vector39< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38>, T> { typedef boost::type_of::vector40< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class T> struct push_back<boost::type_of::vector40< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39>, T> { typedef boost::type_of::vector41< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class T> struct push_back<boost::type_of::vector41< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40>, T> { typedef boost::type_of::vector42< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class T> struct push_back<boost::type_of::vector42< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41>, T> { typedef boost::type_of::vector43< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class T> struct push_back<boost::type_of::vector43< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42>, T> { typedef boost::type_of::vector44< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class T> struct push_back<boost::type_of::vector44< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43>, T> { typedef boost::type_of::vector45< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class T> struct push_back<boost::type_of::vector45< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44>, T> { typedef boost::type_of::vector46< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class T> struct push_back<boost::type_of::vector46< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45>, T> { typedef boost::type_of::vector47< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class T> struct push_back<boost::type_of::vector47< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46>, T> { typedef boost::type_of::vector48< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class T> struct push_back<boost::type_of::vector48< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47>, T> { typedef boost::type_of::vector49< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class T> struct push_back<boost::type_of::vector49< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48>, T> { typedef boost::type_of::vector50< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class T> struct push_back<boost::type_of::vector50< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49>, T> { typedef boost::type_of::vector51< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class T> struct push_back<boost::type_of::vector51< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50>, T> { typedef boost::type_of::vector52< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class T> struct push_back<boost::type_of::vector52< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51>, T> { typedef boost::type_of::vector53< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class T> struct push_back<boost::type_of::vector53< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52>, T> { typedef boost::type_of::vector54< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class T> struct push_back<boost::type_of::vector54< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53>, T> { typedef boost::type_of::vector55< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class T> struct push_back<boost::type_of::vector55< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54>, T> { typedef boost::type_of::vector56< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class T> struct push_back<boost::type_of::vector56< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55>, T> { typedef boost::type_of::vector57< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class T> struct push_back<boost::type_of::vector57< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56>, T> { typedef boost::type_of::vector58< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class T> struct push_back<boost::type_of::vector58< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57>, T> { typedef boost::type_of::vector59< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class T> struct push_back<boost::type_of::vector59< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58>, T> { typedef boost::type_of::vector60< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class T> struct push_back<boost::type_of::vector60< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59>, T> { typedef boost::type_of::vector61< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class T> struct push_back<boost::type_of::vector61< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60>, T> { typedef boost::type_of::vector62< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class T> struct push_back<boost::type_of::vector62< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61>, T> { typedef boost::type_of::vector63< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class T> struct push_back<boost::type_of::vector63< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62>, T> { typedef boost::type_of::vector64< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class T> struct push_back<boost::type_of::vector64< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63>, T> { typedef boost::type_of::vector65< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class T> struct push_back<boost::type_of::vector65< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64>, T> { typedef boost::type_of::vector66< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class T> struct push_back<boost::type_of::vector66< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65>, T> { typedef boost::type_of::vector67< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class T> struct push_back<boost::type_of::vector67< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66>, T> { typedef boost::type_of::vector68< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class T> struct push_back<boost::type_of::vector68< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67>, T> { typedef boost::type_of::vector69< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class T> struct push_back<boost::type_of::vector69< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68>, T> { typedef boost::type_of::vector70< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class T> struct push_back<boost::type_of::vector70< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69>, T> { typedef boost::type_of::vector71< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class T> struct push_back<boost::type_of::vector71< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70>, T> { typedef boost::type_of::vector72< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class T> struct push_back<boost::type_of::vector72< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71>, T> { typedef boost::type_of::vector73< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class T> struct push_back<boost::type_of::vector73< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72>, T> { typedef boost::type_of::vector74< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class T> struct push_back<boost::type_of::vector74< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73>, T> { typedef boost::type_of::vector75< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class T> struct push_back<boost::type_of::vector75< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74>, T> { typedef boost::type_of::vector76< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class T> struct push_back<boost::type_of::vector76< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75>, T> { typedef boost::type_of::vector77< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class T> struct push_back<boost::type_of::vector77< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76>, T> { typedef boost::type_of::vector78< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class T> struct push_back<boost::type_of::vector78< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77>, T> { typedef boost::type_of::vector79< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class T> struct push_back<boost::type_of::vector79< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78>, T> { typedef boost::type_of::vector80< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class T> struct push_back<boost::type_of::vector80< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79>, T> { typedef boost::type_of::vector81< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class T> struct push_back<boost::type_of::vector81< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80>, T> { typedef boost::type_of::vector82< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class T> struct push_back<boost::type_of::vector82< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81>, T> { typedef boost::type_of::vector83< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class T> struct push_back<boost::type_of::vector83< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82>, T> { typedef boost::type_of::vector84< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class T> struct push_back<boost::type_of::vector84< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83>, T> { typedef boost::type_of::vector85< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class T> struct push_back<boost::type_of::vector85< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84>, T> { typedef boost::type_of::vector86< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class T> struct push_back<boost::type_of::vector86< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85>, T> { typedef boost::type_of::vector87< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class T> struct push_back<boost::type_of::vector87< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86>, T> { typedef boost::type_of::vector88< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class T> struct push_back<boost::type_of::vector88< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87>, T> { typedef boost::type_of::vector89< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class T> struct push_back<boost::type_of::vector89< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88>, T> { typedef boost::type_of::vector90< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class T> struct push_back<boost::type_of::vector90< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89>, T> { typedef boost::type_of::vector91< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class T> struct push_back<boost::type_of::vector91< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90>, T> { typedef boost::type_of::vector92< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class T> struct push_back<boost::type_of::vector92< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91>, T> { typedef boost::type_of::vector93< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class T> struct push_back<boost::type_of::vector93< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92>, T> { typedef boost::type_of::vector94< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class T> struct push_back<boost::type_of::vector94< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93>, T> { typedef boost::type_of::vector95< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class T> struct push_back<boost::type_of::vector95< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94>, T> { typedef boost::type_of::vector96< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class T> struct push_back<boost::type_of::vector96< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95>, T> { typedef boost::type_of::vector97< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class T> struct push_back<boost::type_of::vector97< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96>, T> { typedef boost::type_of::vector98< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class T> struct push_back<boost::type_of::vector98< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97>, T> { typedef boost::type_of::vector99< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class T> struct push_back<boost::type_of::vector99< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98>, T> { typedef boost::type_of::vector100< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , T > type; };
+}}
diff --git a/boost/boost/typeof/vector150.hpp b/boost/boost/typeof/vector150.hpp
new file mode 100644
index 00000000000..81ccad7b92d
--- /dev/null
+++ b/boost/boost/typeof/vector150.hpp
@@ -0,0 +1,471 @@
+
+// Copyright (C) 2005 Arkadiy Vertleyb
+// Copyright (C) 2005 Peder Holt
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+// Preprocessed code, do not edit manually !
+
+
+namespace boost { namespace type_of {
+ template<class V, class Increase_BOOST_TYPEOF_LIMIT_SIZE> struct v_iter;
+ template<class V> struct v_iter<V, mpl::int_<0> > { typedef typename V::item0 type; typedef v_iter<V, mpl::int_<0 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<1> > { typedef typename V::item1 type; typedef v_iter<V, mpl::int_<1 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<2> > { typedef typename V::item2 type; typedef v_iter<V, mpl::int_<2 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<3> > { typedef typename V::item3 type; typedef v_iter<V, mpl::int_<3 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<4> > { typedef typename V::item4 type; typedef v_iter<V, mpl::int_<4 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<5> > { typedef typename V::item5 type; typedef v_iter<V, mpl::int_<5 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<6> > { typedef typename V::item6 type; typedef v_iter<V, mpl::int_<6 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<7> > { typedef typename V::item7 type; typedef v_iter<V, mpl::int_<7 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<8> > { typedef typename V::item8 type; typedef v_iter<V, mpl::int_<8 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<9> > { typedef typename V::item9 type; typedef v_iter<V, mpl::int_<9 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<10> > { typedef typename V::item10 type; typedef v_iter<V, mpl::int_<10 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<11> > { typedef typename V::item11 type; typedef v_iter<V, mpl::int_<11 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<12> > { typedef typename V::item12 type; typedef v_iter<V, mpl::int_<12 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<13> > { typedef typename V::item13 type; typedef v_iter<V, mpl::int_<13 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<14> > { typedef typename V::item14 type; typedef v_iter<V, mpl::int_<14 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<15> > { typedef typename V::item15 type; typedef v_iter<V, mpl::int_<15 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<16> > { typedef typename V::item16 type; typedef v_iter<V, mpl::int_<16 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<17> > { typedef typename V::item17 type; typedef v_iter<V, mpl::int_<17 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<18> > { typedef typename V::item18 type; typedef v_iter<V, mpl::int_<18 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<19> > { typedef typename V::item19 type; typedef v_iter<V, mpl::int_<19 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<20> > { typedef typename V::item20 type; typedef v_iter<V, mpl::int_<20 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<21> > { typedef typename V::item21 type; typedef v_iter<V, mpl::int_<21 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<22> > { typedef typename V::item22 type; typedef v_iter<V, mpl::int_<22 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<23> > { typedef typename V::item23 type; typedef v_iter<V, mpl::int_<23 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<24> > { typedef typename V::item24 type; typedef v_iter<V, mpl::int_<24 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<25> > { typedef typename V::item25 type; typedef v_iter<V, mpl::int_<25 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<26> > { typedef typename V::item26 type; typedef v_iter<V, mpl::int_<26 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<27> > { typedef typename V::item27 type; typedef v_iter<V, mpl::int_<27 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<28> > { typedef typename V::item28 type; typedef v_iter<V, mpl::int_<28 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<29> > { typedef typename V::item29 type; typedef v_iter<V, mpl::int_<29 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<30> > { typedef typename V::item30 type; typedef v_iter<V, mpl::int_<30 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<31> > { typedef typename V::item31 type; typedef v_iter<V, mpl::int_<31 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<32> > { typedef typename V::item32 type; typedef v_iter<V, mpl::int_<32 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<33> > { typedef typename V::item33 type; typedef v_iter<V, mpl::int_<33 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<34> > { typedef typename V::item34 type; typedef v_iter<V, mpl::int_<34 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<35> > { typedef typename V::item35 type; typedef v_iter<V, mpl::int_<35 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<36> > { typedef typename V::item36 type; typedef v_iter<V, mpl::int_<36 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<37> > { typedef typename V::item37 type; typedef v_iter<V, mpl::int_<37 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<38> > { typedef typename V::item38 type; typedef v_iter<V, mpl::int_<38 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<39> > { typedef typename V::item39 type; typedef v_iter<V, mpl::int_<39 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<40> > { typedef typename V::item40 type; typedef v_iter<V, mpl::int_<40 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<41> > { typedef typename V::item41 type; typedef v_iter<V, mpl::int_<41 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<42> > { typedef typename V::item42 type; typedef v_iter<V, mpl::int_<42 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<43> > { typedef typename V::item43 type; typedef v_iter<V, mpl::int_<43 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<44> > { typedef typename V::item44 type; typedef v_iter<V, mpl::int_<44 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<45> > { typedef typename V::item45 type; typedef v_iter<V, mpl::int_<45 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<46> > { typedef typename V::item46 type; typedef v_iter<V, mpl::int_<46 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<47> > { typedef typename V::item47 type; typedef v_iter<V, mpl::int_<47 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<48> > { typedef typename V::item48 type; typedef v_iter<V, mpl::int_<48 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<49> > { typedef typename V::item49 type; typedef v_iter<V, mpl::int_<49 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<50> > { typedef typename V::item50 type; typedef v_iter<V, mpl::int_<50 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<51> > { typedef typename V::item51 type; typedef v_iter<V, mpl::int_<51 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<52> > { typedef typename V::item52 type; typedef v_iter<V, mpl::int_<52 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<53> > { typedef typename V::item53 type; typedef v_iter<V, mpl::int_<53 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<54> > { typedef typename V::item54 type; typedef v_iter<V, mpl::int_<54 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<55> > { typedef typename V::item55 type; typedef v_iter<V, mpl::int_<55 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<56> > { typedef typename V::item56 type; typedef v_iter<V, mpl::int_<56 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<57> > { typedef typename V::item57 type; typedef v_iter<V, mpl::int_<57 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<58> > { typedef typename V::item58 type; typedef v_iter<V, mpl::int_<58 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<59> > { typedef typename V::item59 type; typedef v_iter<V, mpl::int_<59 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<60> > { typedef typename V::item60 type; typedef v_iter<V, mpl::int_<60 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<61> > { typedef typename V::item61 type; typedef v_iter<V, mpl::int_<61 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<62> > { typedef typename V::item62 type; typedef v_iter<V, mpl::int_<62 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<63> > { typedef typename V::item63 type; typedef v_iter<V, mpl::int_<63 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<64> > { typedef typename V::item64 type; typedef v_iter<V, mpl::int_<64 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<65> > { typedef typename V::item65 type; typedef v_iter<V, mpl::int_<65 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<66> > { typedef typename V::item66 type; typedef v_iter<V, mpl::int_<66 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<67> > { typedef typename V::item67 type; typedef v_iter<V, mpl::int_<67 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<68> > { typedef typename V::item68 type; typedef v_iter<V, mpl::int_<68 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<69> > { typedef typename V::item69 type; typedef v_iter<V, mpl::int_<69 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<70> > { typedef typename V::item70 type; typedef v_iter<V, mpl::int_<70 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<71> > { typedef typename V::item71 type; typedef v_iter<V, mpl::int_<71 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<72> > { typedef typename V::item72 type; typedef v_iter<V, mpl::int_<72 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<73> > { typedef typename V::item73 type; typedef v_iter<V, mpl::int_<73 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<74> > { typedef typename V::item74 type; typedef v_iter<V, mpl::int_<74 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<75> > { typedef typename V::item75 type; typedef v_iter<V, mpl::int_<75 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<76> > { typedef typename V::item76 type; typedef v_iter<V, mpl::int_<76 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<77> > { typedef typename V::item77 type; typedef v_iter<V, mpl::int_<77 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<78> > { typedef typename V::item78 type; typedef v_iter<V, mpl::int_<78 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<79> > { typedef typename V::item79 type; typedef v_iter<V, mpl::int_<79 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<80> > { typedef typename V::item80 type; typedef v_iter<V, mpl::int_<80 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<81> > { typedef typename V::item81 type; typedef v_iter<V, mpl::int_<81 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<82> > { typedef typename V::item82 type; typedef v_iter<V, mpl::int_<82 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<83> > { typedef typename V::item83 type; typedef v_iter<V, mpl::int_<83 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<84> > { typedef typename V::item84 type; typedef v_iter<V, mpl::int_<84 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<85> > { typedef typename V::item85 type; typedef v_iter<V, mpl::int_<85 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<86> > { typedef typename V::item86 type; typedef v_iter<V, mpl::int_<86 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<87> > { typedef typename V::item87 type; typedef v_iter<V, mpl::int_<87 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<88> > { typedef typename V::item88 type; typedef v_iter<V, mpl::int_<88 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<89> > { typedef typename V::item89 type; typedef v_iter<V, mpl::int_<89 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<90> > { typedef typename V::item90 type; typedef v_iter<V, mpl::int_<90 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<91> > { typedef typename V::item91 type; typedef v_iter<V, mpl::int_<91 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<92> > { typedef typename V::item92 type; typedef v_iter<V, mpl::int_<92 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<93> > { typedef typename V::item93 type; typedef v_iter<V, mpl::int_<93 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<94> > { typedef typename V::item94 type; typedef v_iter<V, mpl::int_<94 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<95> > { typedef typename V::item95 type; typedef v_iter<V, mpl::int_<95 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<96> > { typedef typename V::item96 type; typedef v_iter<V, mpl::int_<96 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<97> > { typedef typename V::item97 type; typedef v_iter<V, mpl::int_<97 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<98> > { typedef typename V::item98 type; typedef v_iter<V, mpl::int_<98 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<99> > { typedef typename V::item99 type; typedef v_iter<V, mpl::int_<99 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<100> > { typedef typename V::item100 type; typedef v_iter<V, mpl::int_<100 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<101> > { typedef typename V::item101 type; typedef v_iter<V, mpl::int_<101 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<102> > { typedef typename V::item102 type; typedef v_iter<V, mpl::int_<102 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<103> > { typedef typename V::item103 type; typedef v_iter<V, mpl::int_<103 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<104> > { typedef typename V::item104 type; typedef v_iter<V, mpl::int_<104 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<105> > { typedef typename V::item105 type; typedef v_iter<V, mpl::int_<105 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<106> > { typedef typename V::item106 type; typedef v_iter<V, mpl::int_<106 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<107> > { typedef typename V::item107 type; typedef v_iter<V, mpl::int_<107 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<108> > { typedef typename V::item108 type; typedef v_iter<V, mpl::int_<108 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<109> > { typedef typename V::item109 type; typedef v_iter<V, mpl::int_<109 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<110> > { typedef typename V::item110 type; typedef v_iter<V, mpl::int_<110 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<111> > { typedef typename V::item111 type; typedef v_iter<V, mpl::int_<111 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<112> > { typedef typename V::item112 type; typedef v_iter<V, mpl::int_<112 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<113> > { typedef typename V::item113 type; typedef v_iter<V, mpl::int_<113 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<114> > { typedef typename V::item114 type; typedef v_iter<V, mpl::int_<114 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<115> > { typedef typename V::item115 type; typedef v_iter<V, mpl::int_<115 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<116> > { typedef typename V::item116 type; typedef v_iter<V, mpl::int_<116 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<117> > { typedef typename V::item117 type; typedef v_iter<V, mpl::int_<117 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<118> > { typedef typename V::item118 type; typedef v_iter<V, mpl::int_<118 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<119> > { typedef typename V::item119 type; typedef v_iter<V, mpl::int_<119 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<120> > { typedef typename V::item120 type; typedef v_iter<V, mpl::int_<120 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<121> > { typedef typename V::item121 type; typedef v_iter<V, mpl::int_<121 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<122> > { typedef typename V::item122 type; typedef v_iter<V, mpl::int_<122 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<123> > { typedef typename V::item123 type; typedef v_iter<V, mpl::int_<123 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<124> > { typedef typename V::item124 type; typedef v_iter<V, mpl::int_<124 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<125> > { typedef typename V::item125 type; typedef v_iter<V, mpl::int_<125 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<126> > { typedef typename V::item126 type; typedef v_iter<V, mpl::int_<126 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<127> > { typedef typename V::item127 type; typedef v_iter<V, mpl::int_<127 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<128> > { typedef typename V::item128 type; typedef v_iter<V, mpl::int_<128 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<129> > { typedef typename V::item129 type; typedef v_iter<V, mpl::int_<129 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<130> > { typedef typename V::item130 type; typedef v_iter<V, mpl::int_<130 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<131> > { typedef typename V::item131 type; typedef v_iter<V, mpl::int_<131 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<132> > { typedef typename V::item132 type; typedef v_iter<V, mpl::int_<132 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<133> > { typedef typename V::item133 type; typedef v_iter<V, mpl::int_<133 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<134> > { typedef typename V::item134 type; typedef v_iter<V, mpl::int_<134 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<135> > { typedef typename V::item135 type; typedef v_iter<V, mpl::int_<135 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<136> > { typedef typename V::item136 type; typedef v_iter<V, mpl::int_<136 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<137> > { typedef typename V::item137 type; typedef v_iter<V, mpl::int_<137 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<138> > { typedef typename V::item138 type; typedef v_iter<V, mpl::int_<138 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<139> > { typedef typename V::item139 type; typedef v_iter<V, mpl::int_<139 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<140> > { typedef typename V::item140 type; typedef v_iter<V, mpl::int_<140 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<141> > { typedef typename V::item141 type; typedef v_iter<V, mpl::int_<141 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<142> > { typedef typename V::item142 type; typedef v_iter<V, mpl::int_<142 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<143> > { typedef typename V::item143 type; typedef v_iter<V, mpl::int_<143 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<144> > { typedef typename V::item144 type; typedef v_iter<V, mpl::int_<144 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<145> > { typedef typename V::item145 type; typedef v_iter<V, mpl::int_<145 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<146> > { typedef typename V::item146 type; typedef v_iter<V, mpl::int_<146 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<147> > { typedef typename V::item147 type; typedef v_iter<V, mpl::int_<147 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<148> > { typedef typename V::item148 type; typedef v_iter<V, mpl::int_<148 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<149> > { typedef typename V::item149 type; typedef v_iter<V, mpl::int_<149 + 1> > next; };
+}}
+namespace boost { namespace type_of {
+ template< class T = void> struct vector0 { typedef v_iter<vector0, boost::mpl::int_<0> > begin; typedef mpl::int_<1> item0; typedef mpl::int_<1> item1; typedef mpl::int_<1> item2; typedef mpl::int_<1> item3; typedef mpl::int_<1> item4; typedef mpl::int_<1> item5; typedef mpl::int_<1> item6; typedef mpl::int_<1> item7; typedef mpl::int_<1> item8; typedef mpl::int_<1> item9; typedef mpl::int_<1> item10; typedef mpl::int_<1> item11; typedef mpl::int_<1> item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 > struct vector1 { typedef v_iter<vector1, boost::mpl::int_<0> > begin; typedef P0 item0; typedef mpl::int_<1> item1; typedef mpl::int_<1> item2; typedef mpl::int_<1> item3; typedef mpl::int_<1> item4; typedef mpl::int_<1> item5; typedef mpl::int_<1> item6; typedef mpl::int_<1> item7; typedef mpl::int_<1> item8; typedef mpl::int_<1> item9; typedef mpl::int_<1> item10; typedef mpl::int_<1> item11; typedef mpl::int_<1> item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 > struct vector2 { typedef v_iter<vector2, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef mpl::int_<1> item2; typedef mpl::int_<1> item3; typedef mpl::int_<1> item4; typedef mpl::int_<1> item5; typedef mpl::int_<1> item6; typedef mpl::int_<1> item7; typedef mpl::int_<1> item8; typedef mpl::int_<1> item9; typedef mpl::int_<1> item10; typedef mpl::int_<1> item11; typedef mpl::int_<1> item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 > struct vector3 { typedef v_iter<vector3, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef mpl::int_<1> item3; typedef mpl::int_<1> item4; typedef mpl::int_<1> item5; typedef mpl::int_<1> item6; typedef mpl::int_<1> item7; typedef mpl::int_<1> item8; typedef mpl::int_<1> item9; typedef mpl::int_<1> item10; typedef mpl::int_<1> item11; typedef mpl::int_<1> item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 > struct vector4 { typedef v_iter<vector4, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef mpl::int_<1> item4; typedef mpl::int_<1> item5; typedef mpl::int_<1> item6; typedef mpl::int_<1> item7; typedef mpl::int_<1> item8; typedef mpl::int_<1> item9; typedef mpl::int_<1> item10; typedef mpl::int_<1> item11; typedef mpl::int_<1> item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 > struct vector5 { typedef v_iter<vector5, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef mpl::int_<1> item5; typedef mpl::int_<1> item6; typedef mpl::int_<1> item7; typedef mpl::int_<1> item8; typedef mpl::int_<1> item9; typedef mpl::int_<1> item10; typedef mpl::int_<1> item11; typedef mpl::int_<1> item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 > struct vector6 { typedef v_iter<vector6, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef mpl::int_<1> item6; typedef mpl::int_<1> item7; typedef mpl::int_<1> item8; typedef mpl::int_<1> item9; typedef mpl::int_<1> item10; typedef mpl::int_<1> item11; typedef mpl::int_<1> item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 > struct vector7 { typedef v_iter<vector7, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef mpl::int_<1> item7; typedef mpl::int_<1> item8; typedef mpl::int_<1> item9; typedef mpl::int_<1> item10; typedef mpl::int_<1> item11; typedef mpl::int_<1> item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 > struct vector8 { typedef v_iter<vector8, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef mpl::int_<1> item8; typedef mpl::int_<1> item9; typedef mpl::int_<1> item10; typedef mpl::int_<1> item11; typedef mpl::int_<1> item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 > struct vector9 { typedef v_iter<vector9, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef mpl::int_<1> item9; typedef mpl::int_<1> item10; typedef mpl::int_<1> item11; typedef mpl::int_<1> item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 > struct vector10 { typedef v_iter<vector10, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef mpl::int_<1> item10; typedef mpl::int_<1> item11; typedef mpl::int_<1> item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 > struct vector11 { typedef v_iter<vector11, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef mpl::int_<1> item11; typedef mpl::int_<1> item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 > struct vector12 { typedef v_iter<vector12, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef mpl::int_<1> item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 > struct vector13 { typedef v_iter<vector13, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 > struct vector14 { typedef v_iter<vector14, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 > struct vector15 { typedef v_iter<vector15, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 > struct vector16 { typedef v_iter<vector16, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 > struct vector17 { typedef v_iter<vector17, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 > struct vector18 { typedef v_iter<vector18, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 > struct vector19 { typedef v_iter<vector19, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 > struct vector20 { typedef v_iter<vector20, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 > struct vector21 { typedef v_iter<vector21, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 > struct vector22 { typedef v_iter<vector22, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 > struct vector23 { typedef v_iter<vector23, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 > struct vector24 { typedef v_iter<vector24, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 > struct vector25 { typedef v_iter<vector25, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 > struct vector26 { typedef v_iter<vector26, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 > struct vector27 { typedef v_iter<vector27, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 > struct vector28 { typedef v_iter<vector28, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 > struct vector29 { typedef v_iter<vector29, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 > struct vector30 { typedef v_iter<vector30, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 > struct vector31 { typedef v_iter<vector31, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 > struct vector32 { typedef v_iter<vector32, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 > struct vector33 { typedef v_iter<vector33, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 > struct vector34 { typedef v_iter<vector34, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 > struct vector35 { typedef v_iter<vector35, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 > struct vector36 { typedef v_iter<vector36, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 > struct vector37 { typedef v_iter<vector37, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 > struct vector38 { typedef v_iter<vector38, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 > struct vector39 { typedef v_iter<vector39, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 > struct vector40 { typedef v_iter<vector40, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 > struct vector41 { typedef v_iter<vector41, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 > struct vector42 { typedef v_iter<vector42, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 > struct vector43 { typedef v_iter<vector43, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 > struct vector44 { typedef v_iter<vector44, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 > struct vector45 { typedef v_iter<vector45, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 > struct vector46 { typedef v_iter<vector46, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 > struct vector47 { typedef v_iter<vector47, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 > struct vector48 { typedef v_iter<vector48, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 > struct vector49 { typedef v_iter<vector49, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 > struct vector50 { typedef v_iter<vector50, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 > struct vector51 { typedef v_iter<vector51, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 > struct vector52 { typedef v_iter<vector52, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 > struct vector53 { typedef v_iter<vector53, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 > struct vector54 { typedef v_iter<vector54, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 > struct vector55 { typedef v_iter<vector55, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 > struct vector56 { typedef v_iter<vector56, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 > struct vector57 { typedef v_iter<vector57, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 > struct vector58 { typedef v_iter<vector58, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 > struct vector59 { typedef v_iter<vector59, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 > struct vector60 { typedef v_iter<vector60, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 > struct vector61 { typedef v_iter<vector61, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 > struct vector62 { typedef v_iter<vector62, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 > struct vector63 { typedef v_iter<vector63, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 > struct vector64 { typedef v_iter<vector64, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 > struct vector65 { typedef v_iter<vector65, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 > struct vector66 { typedef v_iter<vector66, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 > struct vector67 { typedef v_iter<vector67, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 > struct vector68 { typedef v_iter<vector68, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 > struct vector69 { typedef v_iter<vector69, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 > struct vector70 { typedef v_iter<vector70, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 > struct vector71 { typedef v_iter<vector71, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 > struct vector72 { typedef v_iter<vector72, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 > struct vector73 { typedef v_iter<vector73, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 > struct vector74 { typedef v_iter<vector74, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 > struct vector75 { typedef v_iter<vector75, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 > struct vector76 { typedef v_iter<vector76, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 > struct vector77 { typedef v_iter<vector77, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 > struct vector78 { typedef v_iter<vector78, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 > struct vector79 { typedef v_iter<vector79, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 > struct vector80 { typedef v_iter<vector80, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 > struct vector81 { typedef v_iter<vector81, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 > struct vector82 { typedef v_iter<vector82, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 > struct vector83 { typedef v_iter<vector83, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 > struct vector84 { typedef v_iter<vector84, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 > struct vector85 { typedef v_iter<vector85, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 > struct vector86 { typedef v_iter<vector86, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 > struct vector87 { typedef v_iter<vector87, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 > struct vector88 { typedef v_iter<vector88, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 > struct vector89 { typedef v_iter<vector89, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 > struct vector90 { typedef v_iter<vector90, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 > struct vector91 { typedef v_iter<vector91, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 > struct vector92 { typedef v_iter<vector92, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 > struct vector93 { typedef v_iter<vector93, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 > struct vector94 { typedef v_iter<vector94, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 > struct vector95 { typedef v_iter<vector95, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 > struct vector96 { typedef v_iter<vector96, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 > struct vector97 { typedef v_iter<vector97, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 > struct vector98 { typedef v_iter<vector98, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 > struct vector99 { typedef v_iter<vector99, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 > struct vector100 { typedef v_iter<vector100, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 > struct vector101 { typedef v_iter<vector101, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 > struct vector102 { typedef v_iter<vector102, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 > struct vector103 { typedef v_iter<vector103, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 > struct vector104 { typedef v_iter<vector104, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 > struct vector105 { typedef v_iter<vector105, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 > struct vector106 { typedef v_iter<vector106, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 > struct vector107 { typedef v_iter<vector107, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 > struct vector108 { typedef v_iter<vector108, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 > struct vector109 { typedef v_iter<vector109, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 > struct vector110 { typedef v_iter<vector110, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 > struct vector111 { typedef v_iter<vector111, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 > struct vector112 { typedef v_iter<vector112, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 > struct vector113 { typedef v_iter<vector113, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 > struct vector114 { typedef v_iter<vector114, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 > struct vector115 { typedef v_iter<vector115, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 > struct vector116 { typedef v_iter<vector116, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 > struct vector117 { typedef v_iter<vector117, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 > struct vector118 { typedef v_iter<vector118, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 > struct vector119 { typedef v_iter<vector119, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 > struct vector120 { typedef v_iter<vector120, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 > struct vector121 { typedef v_iter<vector121, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 > struct vector122 { typedef v_iter<vector122, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 > struct vector123 { typedef v_iter<vector123, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 > struct vector124 { typedef v_iter<vector124, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 > struct vector125 { typedef v_iter<vector125, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 > struct vector126 { typedef v_iter<vector126, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 > struct vector127 { typedef v_iter<vector127, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 > struct vector128 { typedef v_iter<vector128, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 > struct vector129 { typedef v_iter<vector129, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 > struct vector130 { typedef v_iter<vector130, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 > struct vector131 { typedef v_iter<vector131, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 > struct vector132 { typedef v_iter<vector132, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 > struct vector133 { typedef v_iter<vector133, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 > struct vector134 { typedef v_iter<vector134, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 > struct vector135 { typedef v_iter<vector135, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 > struct vector136 { typedef v_iter<vector136, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 > struct vector137 { typedef v_iter<vector137, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 > struct vector138 { typedef v_iter<vector138, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 > struct vector139 { typedef v_iter<vector139, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 > struct vector140 { typedef v_iter<vector140, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 > struct vector141 { typedef v_iter<vector141, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 > struct vector142 { typedef v_iter<vector142, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 > struct vector143 { typedef v_iter<vector143, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 > struct vector144 { typedef v_iter<vector144, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 > struct vector145 { typedef v_iter<vector145, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 > struct vector146 { typedef v_iter<vector146, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 > struct vector147 { typedef v_iter<vector147, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 > struct vector148 { typedef v_iter<vector148, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 > struct vector149 { typedef v_iter<vector149, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef P148 item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 > struct vector150 { typedef v_iter<vector150, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef P148 item148; typedef P149 item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; };
+}}
+namespace boost { namespace type_of {
+ template<class V, class T> struct push_back {
+ typedef V type;
+ };
+ template< class T> struct push_back<boost::type_of::vector0<>, T> { typedef boost::type_of::vector1< T > type; };
+ template< class P0 , class T> struct push_back<boost::type_of::vector1< P0>, T> { typedef boost::type_of::vector2< P0 , T > type; };
+ template< class P0 , class P1 , class T> struct push_back<boost::type_of::vector2< P0 , P1>, T> { typedef boost::type_of::vector3< P0 , P1 , T > type; };
+ template< class P0 , class P1 , class P2 , class T> struct push_back<boost::type_of::vector3< P0 , P1 , P2>, T> { typedef boost::type_of::vector4< P0 , P1 , P2 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class T> struct push_back<boost::type_of::vector4< P0 , P1 , P2 , P3>, T> { typedef boost::type_of::vector5< P0 , P1 , P2 , P3 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class T> struct push_back<boost::type_of::vector5< P0 , P1 , P2 , P3 , P4>, T> { typedef boost::type_of::vector6< P0 , P1 , P2 , P3 , P4 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class T> struct push_back<boost::type_of::vector6< P0 , P1 , P2 , P3 , P4 , P5>, T> { typedef boost::type_of::vector7< P0 , P1 , P2 , P3 , P4 , P5 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class T> struct push_back<boost::type_of::vector7< P0 , P1 , P2 , P3 , P4 , P5 , P6>, T> { typedef boost::type_of::vector8< P0 , P1 , P2 , P3 , P4 , P5 , P6 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class T> struct push_back<boost::type_of::vector8< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7>, T> { typedef boost::type_of::vector9< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class T> struct push_back<boost::type_of::vector9< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8>, T> { typedef boost::type_of::vector10< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class T> struct push_back<boost::type_of::vector10< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9>, T> { typedef boost::type_of::vector11< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class T> struct push_back<boost::type_of::vector11< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10>, T> { typedef boost::type_of::vector12< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class T> struct push_back<boost::type_of::vector12< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11>, T> { typedef boost::type_of::vector13< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class T> struct push_back<boost::type_of::vector13< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12>, T> { typedef boost::type_of::vector14< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class T> struct push_back<boost::type_of::vector14< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13>, T> { typedef boost::type_of::vector15< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class T> struct push_back<boost::type_of::vector15< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14>, T> { typedef boost::type_of::vector16< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class T> struct push_back<boost::type_of::vector16< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15>, T> { typedef boost::type_of::vector17< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class T> struct push_back<boost::type_of::vector17< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16>, T> { typedef boost::type_of::vector18< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class T> struct push_back<boost::type_of::vector18< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17>, T> { typedef boost::type_of::vector19< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class T> struct push_back<boost::type_of::vector19< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18>, T> { typedef boost::type_of::vector20< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class T> struct push_back<boost::type_of::vector20< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19>, T> { typedef boost::type_of::vector21< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class T> struct push_back<boost::type_of::vector21< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20>, T> { typedef boost::type_of::vector22< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class T> struct push_back<boost::type_of::vector22< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21>, T> { typedef boost::type_of::vector23< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class T> struct push_back<boost::type_of::vector23< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22>, T> { typedef boost::type_of::vector24< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class T> struct push_back<boost::type_of::vector24< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23>, T> { typedef boost::type_of::vector25< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class T> struct push_back<boost::type_of::vector25< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24>, T> { typedef boost::type_of::vector26< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class T> struct push_back<boost::type_of::vector26< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25>, T> { typedef boost::type_of::vector27< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class T> struct push_back<boost::type_of::vector27< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26>, T> { typedef boost::type_of::vector28< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class T> struct push_back<boost::type_of::vector28< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27>, T> { typedef boost::type_of::vector29< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class T> struct push_back<boost::type_of::vector29< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28>, T> { typedef boost::type_of::vector30< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class T> struct push_back<boost::type_of::vector30< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29>, T> { typedef boost::type_of::vector31< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class T> struct push_back<boost::type_of::vector31< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30>, T> { typedef boost::type_of::vector32< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class T> struct push_back<boost::type_of::vector32< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31>, T> { typedef boost::type_of::vector33< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class T> struct push_back<boost::type_of::vector33< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32>, T> { typedef boost::type_of::vector34< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class T> struct push_back<boost::type_of::vector34< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33>, T> { typedef boost::type_of::vector35< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class T> struct push_back<boost::type_of::vector35< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34>, T> { typedef boost::type_of::vector36< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class T> struct push_back<boost::type_of::vector36< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35>, T> { typedef boost::type_of::vector37< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class T> struct push_back<boost::type_of::vector37< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36>, T> { typedef boost::type_of::vector38< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class T> struct push_back<boost::type_of::vector38< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37>, T> { typedef boost::type_of::vector39< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class T> struct push_back<boost::type_of::vector39< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38>, T> { typedef boost::type_of::vector40< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class T> struct push_back<boost::type_of::vector40< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39>, T> { typedef boost::type_of::vector41< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class T> struct push_back<boost::type_of::vector41< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40>, T> { typedef boost::type_of::vector42< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class T> struct push_back<boost::type_of::vector42< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41>, T> { typedef boost::type_of::vector43< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class T> struct push_back<boost::type_of::vector43< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42>, T> { typedef boost::type_of::vector44< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class T> struct push_back<boost::type_of::vector44< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43>, T> { typedef boost::type_of::vector45< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class T> struct push_back<boost::type_of::vector45< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44>, T> { typedef boost::type_of::vector46< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class T> struct push_back<boost::type_of::vector46< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45>, T> { typedef boost::type_of::vector47< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class T> struct push_back<boost::type_of::vector47< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46>, T> { typedef boost::type_of::vector48< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class T> struct push_back<boost::type_of::vector48< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47>, T> { typedef boost::type_of::vector49< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class T> struct push_back<boost::type_of::vector49< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48>, T> { typedef boost::type_of::vector50< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class T> struct push_back<boost::type_of::vector50< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49>, T> { typedef boost::type_of::vector51< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class T> struct push_back<boost::type_of::vector51< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50>, T> { typedef boost::type_of::vector52< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class T> struct push_back<boost::type_of::vector52< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51>, T> { typedef boost::type_of::vector53< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class T> struct push_back<boost::type_of::vector53< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52>, T> { typedef boost::type_of::vector54< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class T> struct push_back<boost::type_of::vector54< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53>, T> { typedef boost::type_of::vector55< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class T> struct push_back<boost::type_of::vector55< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54>, T> { typedef boost::type_of::vector56< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class T> struct push_back<boost::type_of::vector56< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55>, T> { typedef boost::type_of::vector57< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class T> struct push_back<boost::type_of::vector57< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56>, T> { typedef boost::type_of::vector58< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class T> struct push_back<boost::type_of::vector58< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57>, T> { typedef boost::type_of::vector59< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class T> struct push_back<boost::type_of::vector59< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58>, T> { typedef boost::type_of::vector60< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class T> struct push_back<boost::type_of::vector60< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59>, T> { typedef boost::type_of::vector61< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class T> struct push_back<boost::type_of::vector61< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60>, T> { typedef boost::type_of::vector62< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class T> struct push_back<boost::type_of::vector62< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61>, T> { typedef boost::type_of::vector63< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class T> struct push_back<boost::type_of::vector63< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62>, T> { typedef boost::type_of::vector64< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class T> struct push_back<boost::type_of::vector64< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63>, T> { typedef boost::type_of::vector65< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class T> struct push_back<boost::type_of::vector65< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64>, T> { typedef boost::type_of::vector66< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class T> struct push_back<boost::type_of::vector66< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65>, T> { typedef boost::type_of::vector67< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class T> struct push_back<boost::type_of::vector67< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66>, T> { typedef boost::type_of::vector68< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class T> struct push_back<boost::type_of::vector68< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67>, T> { typedef boost::type_of::vector69< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class T> struct push_back<boost::type_of::vector69< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68>, T> { typedef boost::type_of::vector70< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class T> struct push_back<boost::type_of::vector70< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69>, T> { typedef boost::type_of::vector71< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class T> struct push_back<boost::type_of::vector71< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70>, T> { typedef boost::type_of::vector72< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class T> struct push_back<boost::type_of::vector72< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71>, T> { typedef boost::type_of::vector73< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class T> struct push_back<boost::type_of::vector73< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72>, T> { typedef boost::type_of::vector74< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class T> struct push_back<boost::type_of::vector74< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73>, T> { typedef boost::type_of::vector75< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class T> struct push_back<boost::type_of::vector75< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74>, T> { typedef boost::type_of::vector76< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class T> struct push_back<boost::type_of::vector76< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75>, T> { typedef boost::type_of::vector77< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class T> struct push_back<boost::type_of::vector77< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76>, T> { typedef boost::type_of::vector78< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class T> struct push_back<boost::type_of::vector78< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77>, T> { typedef boost::type_of::vector79< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class T> struct push_back<boost::type_of::vector79< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78>, T> { typedef boost::type_of::vector80< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class T> struct push_back<boost::type_of::vector80< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79>, T> { typedef boost::type_of::vector81< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class T> struct push_back<boost::type_of::vector81< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80>, T> { typedef boost::type_of::vector82< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class T> struct push_back<boost::type_of::vector82< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81>, T> { typedef boost::type_of::vector83< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class T> struct push_back<boost::type_of::vector83< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82>, T> { typedef boost::type_of::vector84< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class T> struct push_back<boost::type_of::vector84< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83>, T> { typedef boost::type_of::vector85< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class T> struct push_back<boost::type_of::vector85< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84>, T> { typedef boost::type_of::vector86< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class T> struct push_back<boost::type_of::vector86< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85>, T> { typedef boost::type_of::vector87< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class T> struct push_back<boost::type_of::vector87< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86>, T> { typedef boost::type_of::vector88< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class T> struct push_back<boost::type_of::vector88< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87>, T> { typedef boost::type_of::vector89< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class T> struct push_back<boost::type_of::vector89< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88>, T> { typedef boost::type_of::vector90< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class T> struct push_back<boost::type_of::vector90< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89>, T> { typedef boost::type_of::vector91< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class T> struct push_back<boost::type_of::vector91< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90>, T> { typedef boost::type_of::vector92< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class T> struct push_back<boost::type_of::vector92< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91>, T> { typedef boost::type_of::vector93< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class T> struct push_back<boost::type_of::vector93< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92>, T> { typedef boost::type_of::vector94< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class T> struct push_back<boost::type_of::vector94< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93>, T> { typedef boost::type_of::vector95< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class T> struct push_back<boost::type_of::vector95< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94>, T> { typedef boost::type_of::vector96< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class T> struct push_back<boost::type_of::vector96< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95>, T> { typedef boost::type_of::vector97< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class T> struct push_back<boost::type_of::vector97< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96>, T> { typedef boost::type_of::vector98< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class T> struct push_back<boost::type_of::vector98< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97>, T> { typedef boost::type_of::vector99< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class T> struct push_back<boost::type_of::vector99< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98>, T> { typedef boost::type_of::vector100< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class T> struct push_back<boost::type_of::vector100< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99>, T> { typedef boost::type_of::vector101< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class T> struct push_back<boost::type_of::vector101< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100>, T> { typedef boost::type_of::vector102< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class T> struct push_back<boost::type_of::vector102< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101>, T> { typedef boost::type_of::vector103< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class T> struct push_back<boost::type_of::vector103< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102>, T> { typedef boost::type_of::vector104< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class T> struct push_back<boost::type_of::vector104< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103>, T> { typedef boost::type_of::vector105< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class T> struct push_back<boost::type_of::vector105< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104>, T> { typedef boost::type_of::vector106< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class T> struct push_back<boost::type_of::vector106< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105>, T> { typedef boost::type_of::vector107< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class T> struct push_back<boost::type_of::vector107< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106>, T> { typedef boost::type_of::vector108< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class T> struct push_back<boost::type_of::vector108< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107>, T> { typedef boost::type_of::vector109< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class T> struct push_back<boost::type_of::vector109< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108>, T> { typedef boost::type_of::vector110< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class T> struct push_back<boost::type_of::vector110< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109>, T> { typedef boost::type_of::vector111< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class T> struct push_back<boost::type_of::vector111< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110>, T> { typedef boost::type_of::vector112< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class T> struct push_back<boost::type_of::vector112< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111>, T> { typedef boost::type_of::vector113< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class T> struct push_back<boost::type_of::vector113< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112>, T> { typedef boost::type_of::vector114< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class T> struct push_back<boost::type_of::vector114< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113>, T> { typedef boost::type_of::vector115< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class T> struct push_back<boost::type_of::vector115< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114>, T> { typedef boost::type_of::vector116< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class T> struct push_back<boost::type_of::vector116< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115>, T> { typedef boost::type_of::vector117< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class T> struct push_back<boost::type_of::vector117< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116>, T> { typedef boost::type_of::vector118< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class T> struct push_back<boost::type_of::vector118< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117>, T> { typedef boost::type_of::vector119< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class T> struct push_back<boost::type_of::vector119< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118>, T> { typedef boost::type_of::vector120< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class T> struct push_back<boost::type_of::vector120< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119>, T> { typedef boost::type_of::vector121< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class T> struct push_back<boost::type_of::vector121< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120>, T> { typedef boost::type_of::vector122< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class T> struct push_back<boost::type_of::vector122< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121>, T> { typedef boost::type_of::vector123< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class T> struct push_back<boost::type_of::vector123< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122>, T> { typedef boost::type_of::vector124< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class T> struct push_back<boost::type_of::vector124< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123>, T> { typedef boost::type_of::vector125< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class T> struct push_back<boost::type_of::vector125< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124>, T> { typedef boost::type_of::vector126< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class T> struct push_back<boost::type_of::vector126< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125>, T> { typedef boost::type_of::vector127< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class T> struct push_back<boost::type_of::vector127< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126>, T> { typedef boost::type_of::vector128< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class T> struct push_back<boost::type_of::vector128< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127>, T> { typedef boost::type_of::vector129< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class T> struct push_back<boost::type_of::vector129< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128>, T> { typedef boost::type_of::vector130< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class T> struct push_back<boost::type_of::vector130< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129>, T> { typedef boost::type_of::vector131< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class T> struct push_back<boost::type_of::vector131< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130>, T> { typedef boost::type_of::vector132< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class T> struct push_back<boost::type_of::vector132< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131>, T> { typedef boost::type_of::vector133< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class T> struct push_back<boost::type_of::vector133< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132>, T> { typedef boost::type_of::vector134< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class T> struct push_back<boost::type_of::vector134< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133>, T> { typedef boost::type_of::vector135< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class T> struct push_back<boost::type_of::vector135< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134>, T> { typedef boost::type_of::vector136< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class T> struct push_back<boost::type_of::vector136< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135>, T> { typedef boost::type_of::vector137< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class T> struct push_back<boost::type_of::vector137< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136>, T> { typedef boost::type_of::vector138< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class T> struct push_back<boost::type_of::vector138< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137>, T> { typedef boost::type_of::vector139< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class T> struct push_back<boost::type_of::vector139< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138>, T> { typedef boost::type_of::vector140< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class T> struct push_back<boost::type_of::vector140< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139>, T> { typedef boost::type_of::vector141< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class T> struct push_back<boost::type_of::vector141< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140>, T> { typedef boost::type_of::vector142< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class T> struct push_back<boost::type_of::vector142< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141>, T> { typedef boost::type_of::vector143< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class T> struct push_back<boost::type_of::vector143< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142>, T> { typedef boost::type_of::vector144< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class T> struct push_back<boost::type_of::vector144< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143>, T> { typedef boost::type_of::vector145< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class T> struct push_back<boost::type_of::vector145< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144>, T> { typedef boost::type_of::vector146< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class T> struct push_back<boost::type_of::vector146< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145>, T> { typedef boost::type_of::vector147< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class T> struct push_back<boost::type_of::vector147< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146>, T> { typedef boost::type_of::vector148< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class T> struct push_back<boost::type_of::vector148< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147>, T> { typedef boost::type_of::vector149< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class T> struct push_back<boost::type_of::vector149< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148>, T> { typedef boost::type_of::vector150< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , T > type; };
+}}
diff --git a/boost/boost/typeof/vector200.hpp b/boost/boost/typeof/vector200.hpp
new file mode 100644
index 00000000000..dfa3a48edd3
--- /dev/null
+++ b/boost/boost/typeof/vector200.hpp
@@ -0,0 +1,621 @@
+
+// Copyright (C) 2005 Arkadiy Vertleyb
+// Copyright (C) 2005 Peder Holt
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+// Preprocessed code, do not edit manually !
+
+
+namespace boost { namespace type_of {
+ template<class V, class Increase_BOOST_TYPEOF_LIMIT_SIZE> struct v_iter;
+ template<class V> struct v_iter<V, mpl::int_<0> > { typedef typename V::item0 type; typedef v_iter<V, mpl::int_<0 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<1> > { typedef typename V::item1 type; typedef v_iter<V, mpl::int_<1 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<2> > { typedef typename V::item2 type; typedef v_iter<V, mpl::int_<2 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<3> > { typedef typename V::item3 type; typedef v_iter<V, mpl::int_<3 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<4> > { typedef typename V::item4 type; typedef v_iter<V, mpl::int_<4 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<5> > { typedef typename V::item5 type; typedef v_iter<V, mpl::int_<5 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<6> > { typedef typename V::item6 type; typedef v_iter<V, mpl::int_<6 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<7> > { typedef typename V::item7 type; typedef v_iter<V, mpl::int_<7 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<8> > { typedef typename V::item8 type; typedef v_iter<V, mpl::int_<8 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<9> > { typedef typename V::item9 type; typedef v_iter<V, mpl::int_<9 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<10> > { typedef typename V::item10 type; typedef v_iter<V, mpl::int_<10 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<11> > { typedef typename V::item11 type; typedef v_iter<V, mpl::int_<11 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<12> > { typedef typename V::item12 type; typedef v_iter<V, mpl::int_<12 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<13> > { typedef typename V::item13 type; typedef v_iter<V, mpl::int_<13 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<14> > { typedef typename V::item14 type; typedef v_iter<V, mpl::int_<14 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<15> > { typedef typename V::item15 type; typedef v_iter<V, mpl::int_<15 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<16> > { typedef typename V::item16 type; typedef v_iter<V, mpl::int_<16 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<17> > { typedef typename V::item17 type; typedef v_iter<V, mpl::int_<17 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<18> > { typedef typename V::item18 type; typedef v_iter<V, mpl::int_<18 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<19> > { typedef typename V::item19 type; typedef v_iter<V, mpl::int_<19 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<20> > { typedef typename V::item20 type; typedef v_iter<V, mpl::int_<20 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<21> > { typedef typename V::item21 type; typedef v_iter<V, mpl::int_<21 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<22> > { typedef typename V::item22 type; typedef v_iter<V, mpl::int_<22 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<23> > { typedef typename V::item23 type; typedef v_iter<V, mpl::int_<23 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<24> > { typedef typename V::item24 type; typedef v_iter<V, mpl::int_<24 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<25> > { typedef typename V::item25 type; typedef v_iter<V, mpl::int_<25 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<26> > { typedef typename V::item26 type; typedef v_iter<V, mpl::int_<26 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<27> > { typedef typename V::item27 type; typedef v_iter<V, mpl::int_<27 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<28> > { typedef typename V::item28 type; typedef v_iter<V, mpl::int_<28 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<29> > { typedef typename V::item29 type; typedef v_iter<V, mpl::int_<29 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<30> > { typedef typename V::item30 type; typedef v_iter<V, mpl::int_<30 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<31> > { typedef typename V::item31 type; typedef v_iter<V, mpl::int_<31 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<32> > { typedef typename V::item32 type; typedef v_iter<V, mpl::int_<32 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<33> > { typedef typename V::item33 type; typedef v_iter<V, mpl::int_<33 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<34> > { typedef typename V::item34 type; typedef v_iter<V, mpl::int_<34 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<35> > { typedef typename V::item35 type; typedef v_iter<V, mpl::int_<35 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<36> > { typedef typename V::item36 type; typedef v_iter<V, mpl::int_<36 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<37> > { typedef typename V::item37 type; typedef v_iter<V, mpl::int_<37 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<38> > { typedef typename V::item38 type; typedef v_iter<V, mpl::int_<38 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<39> > { typedef typename V::item39 type; typedef v_iter<V, mpl::int_<39 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<40> > { typedef typename V::item40 type; typedef v_iter<V, mpl::int_<40 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<41> > { typedef typename V::item41 type; typedef v_iter<V, mpl::int_<41 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<42> > { typedef typename V::item42 type; typedef v_iter<V, mpl::int_<42 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<43> > { typedef typename V::item43 type; typedef v_iter<V, mpl::int_<43 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<44> > { typedef typename V::item44 type; typedef v_iter<V, mpl::int_<44 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<45> > { typedef typename V::item45 type; typedef v_iter<V, mpl::int_<45 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<46> > { typedef typename V::item46 type; typedef v_iter<V, mpl::int_<46 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<47> > { typedef typename V::item47 type; typedef v_iter<V, mpl::int_<47 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<48> > { typedef typename V::item48 type; typedef v_iter<V, mpl::int_<48 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<49> > { typedef typename V::item49 type; typedef v_iter<V, mpl::int_<49 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<50> > { typedef typename V::item50 type; typedef v_iter<V, mpl::int_<50 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<51> > { typedef typename V::item51 type; typedef v_iter<V, mpl::int_<51 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<52> > { typedef typename V::item52 type; typedef v_iter<V, mpl::int_<52 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<53> > { typedef typename V::item53 type; typedef v_iter<V, mpl::int_<53 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<54> > { typedef typename V::item54 type; typedef v_iter<V, mpl::int_<54 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<55> > { typedef typename V::item55 type; typedef v_iter<V, mpl::int_<55 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<56> > { typedef typename V::item56 type; typedef v_iter<V, mpl::int_<56 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<57> > { typedef typename V::item57 type; typedef v_iter<V, mpl::int_<57 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<58> > { typedef typename V::item58 type; typedef v_iter<V, mpl::int_<58 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<59> > { typedef typename V::item59 type; typedef v_iter<V, mpl::int_<59 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<60> > { typedef typename V::item60 type; typedef v_iter<V, mpl::int_<60 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<61> > { typedef typename V::item61 type; typedef v_iter<V, mpl::int_<61 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<62> > { typedef typename V::item62 type; typedef v_iter<V, mpl::int_<62 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<63> > { typedef typename V::item63 type; typedef v_iter<V, mpl::int_<63 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<64> > { typedef typename V::item64 type; typedef v_iter<V, mpl::int_<64 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<65> > { typedef typename V::item65 type; typedef v_iter<V, mpl::int_<65 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<66> > { typedef typename V::item66 type; typedef v_iter<V, mpl::int_<66 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<67> > { typedef typename V::item67 type; typedef v_iter<V, mpl::int_<67 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<68> > { typedef typename V::item68 type; typedef v_iter<V, mpl::int_<68 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<69> > { typedef typename V::item69 type; typedef v_iter<V, mpl::int_<69 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<70> > { typedef typename V::item70 type; typedef v_iter<V, mpl::int_<70 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<71> > { typedef typename V::item71 type; typedef v_iter<V, mpl::int_<71 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<72> > { typedef typename V::item72 type; typedef v_iter<V, mpl::int_<72 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<73> > { typedef typename V::item73 type; typedef v_iter<V, mpl::int_<73 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<74> > { typedef typename V::item74 type; typedef v_iter<V, mpl::int_<74 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<75> > { typedef typename V::item75 type; typedef v_iter<V, mpl::int_<75 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<76> > { typedef typename V::item76 type; typedef v_iter<V, mpl::int_<76 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<77> > { typedef typename V::item77 type; typedef v_iter<V, mpl::int_<77 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<78> > { typedef typename V::item78 type; typedef v_iter<V, mpl::int_<78 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<79> > { typedef typename V::item79 type; typedef v_iter<V, mpl::int_<79 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<80> > { typedef typename V::item80 type; typedef v_iter<V, mpl::int_<80 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<81> > { typedef typename V::item81 type; typedef v_iter<V, mpl::int_<81 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<82> > { typedef typename V::item82 type; typedef v_iter<V, mpl::int_<82 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<83> > { typedef typename V::item83 type; typedef v_iter<V, mpl::int_<83 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<84> > { typedef typename V::item84 type; typedef v_iter<V, mpl::int_<84 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<85> > { typedef typename V::item85 type; typedef v_iter<V, mpl::int_<85 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<86> > { typedef typename V::item86 type; typedef v_iter<V, mpl::int_<86 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<87> > { typedef typename V::item87 type; typedef v_iter<V, mpl::int_<87 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<88> > { typedef typename V::item88 type; typedef v_iter<V, mpl::int_<88 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<89> > { typedef typename V::item89 type; typedef v_iter<V, mpl::int_<89 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<90> > { typedef typename V::item90 type; typedef v_iter<V, mpl::int_<90 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<91> > { typedef typename V::item91 type; typedef v_iter<V, mpl::int_<91 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<92> > { typedef typename V::item92 type; typedef v_iter<V, mpl::int_<92 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<93> > { typedef typename V::item93 type; typedef v_iter<V, mpl::int_<93 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<94> > { typedef typename V::item94 type; typedef v_iter<V, mpl::int_<94 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<95> > { typedef typename V::item95 type; typedef v_iter<V, mpl::int_<95 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<96> > { typedef typename V::item96 type; typedef v_iter<V, mpl::int_<96 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<97> > { typedef typename V::item97 type; typedef v_iter<V, mpl::int_<97 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<98> > { typedef typename V::item98 type; typedef v_iter<V, mpl::int_<98 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<99> > { typedef typename V::item99 type; typedef v_iter<V, mpl::int_<99 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<100> > { typedef typename V::item100 type; typedef v_iter<V, mpl::int_<100 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<101> > { typedef typename V::item101 type; typedef v_iter<V, mpl::int_<101 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<102> > { typedef typename V::item102 type; typedef v_iter<V, mpl::int_<102 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<103> > { typedef typename V::item103 type; typedef v_iter<V, mpl::int_<103 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<104> > { typedef typename V::item104 type; typedef v_iter<V, mpl::int_<104 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<105> > { typedef typename V::item105 type; typedef v_iter<V, mpl::int_<105 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<106> > { typedef typename V::item106 type; typedef v_iter<V, mpl::int_<106 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<107> > { typedef typename V::item107 type; typedef v_iter<V, mpl::int_<107 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<108> > { typedef typename V::item108 type; typedef v_iter<V, mpl::int_<108 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<109> > { typedef typename V::item109 type; typedef v_iter<V, mpl::int_<109 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<110> > { typedef typename V::item110 type; typedef v_iter<V, mpl::int_<110 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<111> > { typedef typename V::item111 type; typedef v_iter<V, mpl::int_<111 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<112> > { typedef typename V::item112 type; typedef v_iter<V, mpl::int_<112 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<113> > { typedef typename V::item113 type; typedef v_iter<V, mpl::int_<113 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<114> > { typedef typename V::item114 type; typedef v_iter<V, mpl::int_<114 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<115> > { typedef typename V::item115 type; typedef v_iter<V, mpl::int_<115 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<116> > { typedef typename V::item116 type; typedef v_iter<V, mpl::int_<116 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<117> > { typedef typename V::item117 type; typedef v_iter<V, mpl::int_<117 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<118> > { typedef typename V::item118 type; typedef v_iter<V, mpl::int_<118 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<119> > { typedef typename V::item119 type; typedef v_iter<V, mpl::int_<119 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<120> > { typedef typename V::item120 type; typedef v_iter<V, mpl::int_<120 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<121> > { typedef typename V::item121 type; typedef v_iter<V, mpl::int_<121 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<122> > { typedef typename V::item122 type; typedef v_iter<V, mpl::int_<122 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<123> > { typedef typename V::item123 type; typedef v_iter<V, mpl::int_<123 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<124> > { typedef typename V::item124 type; typedef v_iter<V, mpl::int_<124 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<125> > { typedef typename V::item125 type; typedef v_iter<V, mpl::int_<125 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<126> > { typedef typename V::item126 type; typedef v_iter<V, mpl::int_<126 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<127> > { typedef typename V::item127 type; typedef v_iter<V, mpl::int_<127 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<128> > { typedef typename V::item128 type; typedef v_iter<V, mpl::int_<128 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<129> > { typedef typename V::item129 type; typedef v_iter<V, mpl::int_<129 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<130> > { typedef typename V::item130 type; typedef v_iter<V, mpl::int_<130 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<131> > { typedef typename V::item131 type; typedef v_iter<V, mpl::int_<131 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<132> > { typedef typename V::item132 type; typedef v_iter<V, mpl::int_<132 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<133> > { typedef typename V::item133 type; typedef v_iter<V, mpl::int_<133 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<134> > { typedef typename V::item134 type; typedef v_iter<V, mpl::int_<134 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<135> > { typedef typename V::item135 type; typedef v_iter<V, mpl::int_<135 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<136> > { typedef typename V::item136 type; typedef v_iter<V, mpl::int_<136 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<137> > { typedef typename V::item137 type; typedef v_iter<V, mpl::int_<137 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<138> > { typedef typename V::item138 type; typedef v_iter<V, mpl::int_<138 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<139> > { typedef typename V::item139 type; typedef v_iter<V, mpl::int_<139 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<140> > { typedef typename V::item140 type; typedef v_iter<V, mpl::int_<140 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<141> > { typedef typename V::item141 type; typedef v_iter<V, mpl::int_<141 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<142> > { typedef typename V::item142 type; typedef v_iter<V, mpl::int_<142 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<143> > { typedef typename V::item143 type; typedef v_iter<V, mpl::int_<143 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<144> > { typedef typename V::item144 type; typedef v_iter<V, mpl::int_<144 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<145> > { typedef typename V::item145 type; typedef v_iter<V, mpl::int_<145 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<146> > { typedef typename V::item146 type; typedef v_iter<V, mpl::int_<146 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<147> > { typedef typename V::item147 type; typedef v_iter<V, mpl::int_<147 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<148> > { typedef typename V::item148 type; typedef v_iter<V, mpl::int_<148 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<149> > { typedef typename V::item149 type; typedef v_iter<V, mpl::int_<149 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<150> > { typedef typename V::item150 type; typedef v_iter<V, mpl::int_<150 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<151> > { typedef typename V::item151 type; typedef v_iter<V, mpl::int_<151 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<152> > { typedef typename V::item152 type; typedef v_iter<V, mpl::int_<152 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<153> > { typedef typename V::item153 type; typedef v_iter<V, mpl::int_<153 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<154> > { typedef typename V::item154 type; typedef v_iter<V, mpl::int_<154 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<155> > { typedef typename V::item155 type; typedef v_iter<V, mpl::int_<155 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<156> > { typedef typename V::item156 type; typedef v_iter<V, mpl::int_<156 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<157> > { typedef typename V::item157 type; typedef v_iter<V, mpl::int_<157 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<158> > { typedef typename V::item158 type; typedef v_iter<V, mpl::int_<158 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<159> > { typedef typename V::item159 type; typedef v_iter<V, mpl::int_<159 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<160> > { typedef typename V::item160 type; typedef v_iter<V, mpl::int_<160 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<161> > { typedef typename V::item161 type; typedef v_iter<V, mpl::int_<161 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<162> > { typedef typename V::item162 type; typedef v_iter<V, mpl::int_<162 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<163> > { typedef typename V::item163 type; typedef v_iter<V, mpl::int_<163 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<164> > { typedef typename V::item164 type; typedef v_iter<V, mpl::int_<164 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<165> > { typedef typename V::item165 type; typedef v_iter<V, mpl::int_<165 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<166> > { typedef typename V::item166 type; typedef v_iter<V, mpl::int_<166 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<167> > { typedef typename V::item167 type; typedef v_iter<V, mpl::int_<167 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<168> > { typedef typename V::item168 type; typedef v_iter<V, mpl::int_<168 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<169> > { typedef typename V::item169 type; typedef v_iter<V, mpl::int_<169 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<170> > { typedef typename V::item170 type; typedef v_iter<V, mpl::int_<170 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<171> > { typedef typename V::item171 type; typedef v_iter<V, mpl::int_<171 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<172> > { typedef typename V::item172 type; typedef v_iter<V, mpl::int_<172 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<173> > { typedef typename V::item173 type; typedef v_iter<V, mpl::int_<173 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<174> > { typedef typename V::item174 type; typedef v_iter<V, mpl::int_<174 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<175> > { typedef typename V::item175 type; typedef v_iter<V, mpl::int_<175 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<176> > { typedef typename V::item176 type; typedef v_iter<V, mpl::int_<176 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<177> > { typedef typename V::item177 type; typedef v_iter<V, mpl::int_<177 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<178> > { typedef typename V::item178 type; typedef v_iter<V, mpl::int_<178 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<179> > { typedef typename V::item179 type; typedef v_iter<V, mpl::int_<179 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<180> > { typedef typename V::item180 type; typedef v_iter<V, mpl::int_<180 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<181> > { typedef typename V::item181 type; typedef v_iter<V, mpl::int_<181 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<182> > { typedef typename V::item182 type; typedef v_iter<V, mpl::int_<182 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<183> > { typedef typename V::item183 type; typedef v_iter<V, mpl::int_<183 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<184> > { typedef typename V::item184 type; typedef v_iter<V, mpl::int_<184 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<185> > { typedef typename V::item185 type; typedef v_iter<V, mpl::int_<185 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<186> > { typedef typename V::item186 type; typedef v_iter<V, mpl::int_<186 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<187> > { typedef typename V::item187 type; typedef v_iter<V, mpl::int_<187 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<188> > { typedef typename V::item188 type; typedef v_iter<V, mpl::int_<188 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<189> > { typedef typename V::item189 type; typedef v_iter<V, mpl::int_<189 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<190> > { typedef typename V::item190 type; typedef v_iter<V, mpl::int_<190 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<191> > { typedef typename V::item191 type; typedef v_iter<V, mpl::int_<191 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<192> > { typedef typename V::item192 type; typedef v_iter<V, mpl::int_<192 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<193> > { typedef typename V::item193 type; typedef v_iter<V, mpl::int_<193 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<194> > { typedef typename V::item194 type; typedef v_iter<V, mpl::int_<194 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<195> > { typedef typename V::item195 type; typedef v_iter<V, mpl::int_<195 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<196> > { typedef typename V::item196 type; typedef v_iter<V, mpl::int_<196 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<197> > { typedef typename V::item197 type; typedef v_iter<V, mpl::int_<197 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<198> > { typedef typename V::item198 type; typedef v_iter<V, mpl::int_<198 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<199> > { typedef typename V::item199 type; typedef v_iter<V, mpl::int_<199 + 1> > next; };
+}}
+namespace boost { namespace type_of {
+ template< class T = void> struct vector0 { typedef v_iter<vector0, boost::mpl::int_<0> > begin; typedef mpl::int_<1> item0; typedef mpl::int_<1> item1; typedef mpl::int_<1> item2; typedef mpl::int_<1> item3; typedef mpl::int_<1> item4; typedef mpl::int_<1> item5; typedef mpl::int_<1> item6; typedef mpl::int_<1> item7; typedef mpl::int_<1> item8; typedef mpl::int_<1> item9; typedef mpl::int_<1> item10; typedef mpl::int_<1> item11; typedef mpl::int_<1> item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 > struct vector1 { typedef v_iter<vector1, boost::mpl::int_<0> > begin; typedef P0 item0; typedef mpl::int_<1> item1; typedef mpl::int_<1> item2; typedef mpl::int_<1> item3; typedef mpl::int_<1> item4; typedef mpl::int_<1> item5; typedef mpl::int_<1> item6; typedef mpl::int_<1> item7; typedef mpl::int_<1> item8; typedef mpl::int_<1> item9; typedef mpl::int_<1> item10; typedef mpl::int_<1> item11; typedef mpl::int_<1> item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 > struct vector2 { typedef v_iter<vector2, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef mpl::int_<1> item2; typedef mpl::int_<1> item3; typedef mpl::int_<1> item4; typedef mpl::int_<1> item5; typedef mpl::int_<1> item6; typedef mpl::int_<1> item7; typedef mpl::int_<1> item8; typedef mpl::int_<1> item9; typedef mpl::int_<1> item10; typedef mpl::int_<1> item11; typedef mpl::int_<1> item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 > struct vector3 { typedef v_iter<vector3, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef mpl::int_<1> item3; typedef mpl::int_<1> item4; typedef mpl::int_<1> item5; typedef mpl::int_<1> item6; typedef mpl::int_<1> item7; typedef mpl::int_<1> item8; typedef mpl::int_<1> item9; typedef mpl::int_<1> item10; typedef mpl::int_<1> item11; typedef mpl::int_<1> item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 > struct vector4 { typedef v_iter<vector4, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef mpl::int_<1> item4; typedef mpl::int_<1> item5; typedef mpl::int_<1> item6; typedef mpl::int_<1> item7; typedef mpl::int_<1> item8; typedef mpl::int_<1> item9; typedef mpl::int_<1> item10; typedef mpl::int_<1> item11; typedef mpl::int_<1> item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 > struct vector5 { typedef v_iter<vector5, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef mpl::int_<1> item5; typedef mpl::int_<1> item6; typedef mpl::int_<1> item7; typedef mpl::int_<1> item8; typedef mpl::int_<1> item9; typedef mpl::int_<1> item10; typedef mpl::int_<1> item11; typedef mpl::int_<1> item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 > struct vector6 { typedef v_iter<vector6, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef mpl::int_<1> item6; typedef mpl::int_<1> item7; typedef mpl::int_<1> item8; typedef mpl::int_<1> item9; typedef mpl::int_<1> item10; typedef mpl::int_<1> item11; typedef mpl::int_<1> item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 > struct vector7 { typedef v_iter<vector7, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef mpl::int_<1> item7; typedef mpl::int_<1> item8; typedef mpl::int_<1> item9; typedef mpl::int_<1> item10; typedef mpl::int_<1> item11; typedef mpl::int_<1> item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 > struct vector8 { typedef v_iter<vector8, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef mpl::int_<1> item8; typedef mpl::int_<1> item9; typedef mpl::int_<1> item10; typedef mpl::int_<1> item11; typedef mpl::int_<1> item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 > struct vector9 { typedef v_iter<vector9, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef mpl::int_<1> item9; typedef mpl::int_<1> item10; typedef mpl::int_<1> item11; typedef mpl::int_<1> item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 > struct vector10 { typedef v_iter<vector10, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef mpl::int_<1> item10; typedef mpl::int_<1> item11; typedef mpl::int_<1> item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 > struct vector11 { typedef v_iter<vector11, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef mpl::int_<1> item11; typedef mpl::int_<1> item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 > struct vector12 { typedef v_iter<vector12, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef mpl::int_<1> item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 > struct vector13 { typedef v_iter<vector13, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 > struct vector14 { typedef v_iter<vector14, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 > struct vector15 { typedef v_iter<vector15, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 > struct vector16 { typedef v_iter<vector16, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 > struct vector17 { typedef v_iter<vector17, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 > struct vector18 { typedef v_iter<vector18, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 > struct vector19 { typedef v_iter<vector19, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 > struct vector20 { typedef v_iter<vector20, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 > struct vector21 { typedef v_iter<vector21, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 > struct vector22 { typedef v_iter<vector22, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 > struct vector23 { typedef v_iter<vector23, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 > struct vector24 { typedef v_iter<vector24, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 > struct vector25 { typedef v_iter<vector25, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 > struct vector26 { typedef v_iter<vector26, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 > struct vector27 { typedef v_iter<vector27, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 > struct vector28 { typedef v_iter<vector28, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 > struct vector29 { typedef v_iter<vector29, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 > struct vector30 { typedef v_iter<vector30, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 > struct vector31 { typedef v_iter<vector31, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 > struct vector32 { typedef v_iter<vector32, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 > struct vector33 { typedef v_iter<vector33, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 > struct vector34 { typedef v_iter<vector34, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 > struct vector35 { typedef v_iter<vector35, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 > struct vector36 { typedef v_iter<vector36, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 > struct vector37 { typedef v_iter<vector37, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 > struct vector38 { typedef v_iter<vector38, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 > struct vector39 { typedef v_iter<vector39, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 > struct vector40 { typedef v_iter<vector40, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 > struct vector41 { typedef v_iter<vector41, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 > struct vector42 { typedef v_iter<vector42, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 > struct vector43 { typedef v_iter<vector43, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 > struct vector44 { typedef v_iter<vector44, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 > struct vector45 { typedef v_iter<vector45, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 > struct vector46 { typedef v_iter<vector46, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 > struct vector47 { typedef v_iter<vector47, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 > struct vector48 { typedef v_iter<vector48, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 > struct vector49 { typedef v_iter<vector49, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 > struct vector50 { typedef v_iter<vector50, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 > struct vector51 { typedef v_iter<vector51, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 > struct vector52 { typedef v_iter<vector52, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 > struct vector53 { typedef v_iter<vector53, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 > struct vector54 { typedef v_iter<vector54, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 > struct vector55 { typedef v_iter<vector55, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 > struct vector56 { typedef v_iter<vector56, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 > struct vector57 { typedef v_iter<vector57, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 > struct vector58 { typedef v_iter<vector58, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 > struct vector59 { typedef v_iter<vector59, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 > struct vector60 { typedef v_iter<vector60, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 > struct vector61 { typedef v_iter<vector61, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 > struct vector62 { typedef v_iter<vector62, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 > struct vector63 { typedef v_iter<vector63, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 > struct vector64 { typedef v_iter<vector64, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 > struct vector65 { typedef v_iter<vector65, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 > struct vector66 { typedef v_iter<vector66, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 > struct vector67 { typedef v_iter<vector67, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 > struct vector68 { typedef v_iter<vector68, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 > struct vector69 { typedef v_iter<vector69, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 > struct vector70 { typedef v_iter<vector70, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 > struct vector71 { typedef v_iter<vector71, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 > struct vector72 { typedef v_iter<vector72, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 > struct vector73 { typedef v_iter<vector73, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 > struct vector74 { typedef v_iter<vector74, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 > struct vector75 { typedef v_iter<vector75, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 > struct vector76 { typedef v_iter<vector76, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 > struct vector77 { typedef v_iter<vector77, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 > struct vector78 { typedef v_iter<vector78, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 > struct vector79 { typedef v_iter<vector79, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 > struct vector80 { typedef v_iter<vector80, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 > struct vector81 { typedef v_iter<vector81, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 > struct vector82 { typedef v_iter<vector82, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 > struct vector83 { typedef v_iter<vector83, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 > struct vector84 { typedef v_iter<vector84, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 > struct vector85 { typedef v_iter<vector85, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 > struct vector86 { typedef v_iter<vector86, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 > struct vector87 { typedef v_iter<vector87, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 > struct vector88 { typedef v_iter<vector88, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 > struct vector89 { typedef v_iter<vector89, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 > struct vector90 { typedef v_iter<vector90, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 > struct vector91 { typedef v_iter<vector91, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 > struct vector92 { typedef v_iter<vector92, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 > struct vector93 { typedef v_iter<vector93, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 > struct vector94 { typedef v_iter<vector94, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 > struct vector95 { typedef v_iter<vector95, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 > struct vector96 { typedef v_iter<vector96, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 > struct vector97 { typedef v_iter<vector97, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 > struct vector98 { typedef v_iter<vector98, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 > struct vector99 { typedef v_iter<vector99, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef mpl::int_<1> item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 > struct vector100 { typedef v_iter<vector100, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef mpl::int_<1> item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 > struct vector101 { typedef v_iter<vector101, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef mpl::int_<1> item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 > struct vector102 { typedef v_iter<vector102, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef mpl::int_<1> item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 > struct vector103 { typedef v_iter<vector103, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef mpl::int_<1> item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 > struct vector104 { typedef v_iter<vector104, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef mpl::int_<1> item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 > struct vector105 { typedef v_iter<vector105, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef mpl::int_<1> item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 > struct vector106 { typedef v_iter<vector106, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef mpl::int_<1> item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 > struct vector107 { typedef v_iter<vector107, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef mpl::int_<1> item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 > struct vector108 { typedef v_iter<vector108, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef mpl::int_<1> item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 > struct vector109 { typedef v_iter<vector109, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef mpl::int_<1> item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 > struct vector110 { typedef v_iter<vector110, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef mpl::int_<1> item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 > struct vector111 { typedef v_iter<vector111, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef mpl::int_<1> item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 > struct vector112 { typedef v_iter<vector112, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef mpl::int_<1> item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 > struct vector113 { typedef v_iter<vector113, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef mpl::int_<1> item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 > struct vector114 { typedef v_iter<vector114, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef mpl::int_<1> item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 > struct vector115 { typedef v_iter<vector115, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef mpl::int_<1> item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 > struct vector116 { typedef v_iter<vector116, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef mpl::int_<1> item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 > struct vector117 { typedef v_iter<vector117, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef mpl::int_<1> item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 > struct vector118 { typedef v_iter<vector118, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef mpl::int_<1> item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 > struct vector119 { typedef v_iter<vector119, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef mpl::int_<1> item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 > struct vector120 { typedef v_iter<vector120, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef mpl::int_<1> item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 > struct vector121 { typedef v_iter<vector121, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef mpl::int_<1> item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 > struct vector122 { typedef v_iter<vector122, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef mpl::int_<1> item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 > struct vector123 { typedef v_iter<vector123, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef mpl::int_<1> item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 > struct vector124 { typedef v_iter<vector124, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef mpl::int_<1> item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 > struct vector125 { typedef v_iter<vector125, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef mpl::int_<1> item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 > struct vector126 { typedef v_iter<vector126, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef mpl::int_<1> item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 > struct vector127 { typedef v_iter<vector127, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef mpl::int_<1> item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 > struct vector128 { typedef v_iter<vector128, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef mpl::int_<1> item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 > struct vector129 { typedef v_iter<vector129, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef mpl::int_<1> item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 > struct vector130 { typedef v_iter<vector130, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef mpl::int_<1> item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 > struct vector131 { typedef v_iter<vector131, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef mpl::int_<1> item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 > struct vector132 { typedef v_iter<vector132, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef mpl::int_<1> item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 > struct vector133 { typedef v_iter<vector133, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef mpl::int_<1> item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 > struct vector134 { typedef v_iter<vector134, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef mpl::int_<1> item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 > struct vector135 { typedef v_iter<vector135, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef mpl::int_<1> item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 > struct vector136 { typedef v_iter<vector136, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef mpl::int_<1> item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 > struct vector137 { typedef v_iter<vector137, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef mpl::int_<1> item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 > struct vector138 { typedef v_iter<vector138, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef mpl::int_<1> item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 > struct vector139 { typedef v_iter<vector139, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef mpl::int_<1> item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 > struct vector140 { typedef v_iter<vector140, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef mpl::int_<1> item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 > struct vector141 { typedef v_iter<vector141, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef mpl::int_<1> item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 > struct vector142 { typedef v_iter<vector142, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef mpl::int_<1> item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 > struct vector143 { typedef v_iter<vector143, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef mpl::int_<1> item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 > struct vector144 { typedef v_iter<vector144, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef mpl::int_<1> item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 > struct vector145 { typedef v_iter<vector145, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef mpl::int_<1> item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 > struct vector146 { typedef v_iter<vector146, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef mpl::int_<1> item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 > struct vector147 { typedef v_iter<vector147, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef mpl::int_<1> item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 > struct vector148 { typedef v_iter<vector148, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef mpl::int_<1> item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 > struct vector149 { typedef v_iter<vector149, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef P148 item148; typedef mpl::int_<1> item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 > struct vector150 { typedef v_iter<vector150, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef P148 item148; typedef P149 item149; typedef mpl::int_<1> item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 > struct vector151 { typedef v_iter<vector151, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef P148 item148; typedef P149 item149; typedef P150 item150; typedef mpl::int_<1> item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 > struct vector152 { typedef v_iter<vector152, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef P148 item148; typedef P149 item149; typedef P150 item150; typedef P151 item151; typedef mpl::int_<1> item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 > struct vector153 { typedef v_iter<vector153, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef P148 item148; typedef P149 item149; typedef P150 item150; typedef P151 item151; typedef P152 item152; typedef mpl::int_<1> item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 > struct vector154 { typedef v_iter<vector154, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef P148 item148; typedef P149 item149; typedef P150 item150; typedef P151 item151; typedef P152 item152; typedef P153 item153; typedef mpl::int_<1> item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 > struct vector155 { typedef v_iter<vector155, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef P148 item148; typedef P149 item149; typedef P150 item150; typedef P151 item151; typedef P152 item152; typedef P153 item153; typedef P154 item154; typedef mpl::int_<1> item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 > struct vector156 { typedef v_iter<vector156, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef P148 item148; typedef P149 item149; typedef P150 item150; typedef P151 item151; typedef P152 item152; typedef P153 item153; typedef P154 item154; typedef P155 item155; typedef mpl::int_<1> item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 > struct vector157 { typedef v_iter<vector157, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef P148 item148; typedef P149 item149; typedef P150 item150; typedef P151 item151; typedef P152 item152; typedef P153 item153; typedef P154 item154; typedef P155 item155; typedef P156 item156; typedef mpl::int_<1> item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 > struct vector158 { typedef v_iter<vector158, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef P148 item148; typedef P149 item149; typedef P150 item150; typedef P151 item151; typedef P152 item152; typedef P153 item153; typedef P154 item154; typedef P155 item155; typedef P156 item156; typedef P157 item157; typedef mpl::int_<1> item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 > struct vector159 { typedef v_iter<vector159, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef P148 item148; typedef P149 item149; typedef P150 item150; typedef P151 item151; typedef P152 item152; typedef P153 item153; typedef P154 item154; typedef P155 item155; typedef P156 item156; typedef P157 item157; typedef P158 item158; typedef mpl::int_<1> item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 > struct vector160 { typedef v_iter<vector160, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef P148 item148; typedef P149 item149; typedef P150 item150; typedef P151 item151; typedef P152 item152; typedef P153 item153; typedef P154 item154; typedef P155 item155; typedef P156 item156; typedef P157 item157; typedef P158 item158; typedef P159 item159; typedef mpl::int_<1> item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 > struct vector161 { typedef v_iter<vector161, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef P148 item148; typedef P149 item149; typedef P150 item150; typedef P151 item151; typedef P152 item152; typedef P153 item153; typedef P154 item154; typedef P155 item155; typedef P156 item156; typedef P157 item157; typedef P158 item158; typedef P159 item159; typedef P160 item160; typedef mpl::int_<1> item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 > struct vector162 { typedef v_iter<vector162, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef P148 item148; typedef P149 item149; typedef P150 item150; typedef P151 item151; typedef P152 item152; typedef P153 item153; typedef P154 item154; typedef P155 item155; typedef P156 item156; typedef P157 item157; typedef P158 item158; typedef P159 item159; typedef P160 item160; typedef P161 item161; typedef mpl::int_<1> item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 > struct vector163 { typedef v_iter<vector163, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef P148 item148; typedef P149 item149; typedef P150 item150; typedef P151 item151; typedef P152 item152; typedef P153 item153; typedef P154 item154; typedef P155 item155; typedef P156 item156; typedef P157 item157; typedef P158 item158; typedef P159 item159; typedef P160 item160; typedef P161 item161; typedef P162 item162; typedef mpl::int_<1> item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 > struct vector164 { typedef v_iter<vector164, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef P148 item148; typedef P149 item149; typedef P150 item150; typedef P151 item151; typedef P152 item152; typedef P153 item153; typedef P154 item154; typedef P155 item155; typedef P156 item156; typedef P157 item157; typedef P158 item158; typedef P159 item159; typedef P160 item160; typedef P161 item161; typedef P162 item162; typedef P163 item163; typedef mpl::int_<1> item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 > struct vector165 { typedef v_iter<vector165, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef P148 item148; typedef P149 item149; typedef P150 item150; typedef P151 item151; typedef P152 item152; typedef P153 item153; typedef P154 item154; typedef P155 item155; typedef P156 item156; typedef P157 item157; typedef P158 item158; typedef P159 item159; typedef P160 item160; typedef P161 item161; typedef P162 item162; typedef P163 item163; typedef P164 item164; typedef mpl::int_<1> item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 > struct vector166 { typedef v_iter<vector166, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef P148 item148; typedef P149 item149; typedef P150 item150; typedef P151 item151; typedef P152 item152; typedef P153 item153; typedef P154 item154; typedef P155 item155; typedef P156 item156; typedef P157 item157; typedef P158 item158; typedef P159 item159; typedef P160 item160; typedef P161 item161; typedef P162 item162; typedef P163 item163; typedef P164 item164; typedef P165 item165; typedef mpl::int_<1> item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 > struct vector167 { typedef v_iter<vector167, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef P148 item148; typedef P149 item149; typedef P150 item150; typedef P151 item151; typedef P152 item152; typedef P153 item153; typedef P154 item154; typedef P155 item155; typedef P156 item156; typedef P157 item157; typedef P158 item158; typedef P159 item159; typedef P160 item160; typedef P161 item161; typedef P162 item162; typedef P163 item163; typedef P164 item164; typedef P165 item165; typedef P166 item166; typedef mpl::int_<1> item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 > struct vector168 { typedef v_iter<vector168, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef P148 item148; typedef P149 item149; typedef P150 item150; typedef P151 item151; typedef P152 item152; typedef P153 item153; typedef P154 item154; typedef P155 item155; typedef P156 item156; typedef P157 item157; typedef P158 item158; typedef P159 item159; typedef P160 item160; typedef P161 item161; typedef P162 item162; typedef P163 item163; typedef P164 item164; typedef P165 item165; typedef P166 item166; typedef P167 item167; typedef mpl::int_<1> item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 > struct vector169 { typedef v_iter<vector169, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef P148 item148; typedef P149 item149; typedef P150 item150; typedef P151 item151; typedef P152 item152; typedef P153 item153; typedef P154 item154; typedef P155 item155; typedef P156 item156; typedef P157 item157; typedef P158 item158; typedef P159 item159; typedef P160 item160; typedef P161 item161; typedef P162 item162; typedef P163 item163; typedef P164 item164; typedef P165 item165; typedef P166 item166; typedef P167 item167; typedef P168 item168; typedef mpl::int_<1> item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 > struct vector170 { typedef v_iter<vector170, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef P148 item148; typedef P149 item149; typedef P150 item150; typedef P151 item151; typedef P152 item152; typedef P153 item153; typedef P154 item154; typedef P155 item155; typedef P156 item156; typedef P157 item157; typedef P158 item158; typedef P159 item159; typedef P160 item160; typedef P161 item161; typedef P162 item162; typedef P163 item163; typedef P164 item164; typedef P165 item165; typedef P166 item166; typedef P167 item167; typedef P168 item168; typedef P169 item169; typedef mpl::int_<1> item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 > struct vector171 { typedef v_iter<vector171, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef P148 item148; typedef P149 item149; typedef P150 item150; typedef P151 item151; typedef P152 item152; typedef P153 item153; typedef P154 item154; typedef P155 item155; typedef P156 item156; typedef P157 item157; typedef P158 item158; typedef P159 item159; typedef P160 item160; typedef P161 item161; typedef P162 item162; typedef P163 item163; typedef P164 item164; typedef P165 item165; typedef P166 item166; typedef P167 item167; typedef P168 item168; typedef P169 item169; typedef P170 item170; typedef mpl::int_<1> item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 > struct vector172 { typedef v_iter<vector172, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef P148 item148; typedef P149 item149; typedef P150 item150; typedef P151 item151; typedef P152 item152; typedef P153 item153; typedef P154 item154; typedef P155 item155; typedef P156 item156; typedef P157 item157; typedef P158 item158; typedef P159 item159; typedef P160 item160; typedef P161 item161; typedef P162 item162; typedef P163 item163; typedef P164 item164; typedef P165 item165; typedef P166 item166; typedef P167 item167; typedef P168 item168; typedef P169 item169; typedef P170 item170; typedef P171 item171; typedef mpl::int_<1> item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 > struct vector173 { typedef v_iter<vector173, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef P148 item148; typedef P149 item149; typedef P150 item150; typedef P151 item151; typedef P152 item152; typedef P153 item153; typedef P154 item154; typedef P155 item155; typedef P156 item156; typedef P157 item157; typedef P158 item158; typedef P159 item159; typedef P160 item160; typedef P161 item161; typedef P162 item162; typedef P163 item163; typedef P164 item164; typedef P165 item165; typedef P166 item166; typedef P167 item167; typedef P168 item168; typedef P169 item169; typedef P170 item170; typedef P171 item171; typedef P172 item172; typedef mpl::int_<1> item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 , class P173 > struct vector174 { typedef v_iter<vector174, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef P148 item148; typedef P149 item149; typedef P150 item150; typedef P151 item151; typedef P152 item152; typedef P153 item153; typedef P154 item154; typedef P155 item155; typedef P156 item156; typedef P157 item157; typedef P158 item158; typedef P159 item159; typedef P160 item160; typedef P161 item161; typedef P162 item162; typedef P163 item163; typedef P164 item164; typedef P165 item165; typedef P166 item166; typedef P167 item167; typedef P168 item168; typedef P169 item169; typedef P170 item170; typedef P171 item171; typedef P172 item172; typedef P173 item173; typedef mpl::int_<1> item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 , class P173 , class P174 > struct vector175 { typedef v_iter<vector175, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef P148 item148; typedef P149 item149; typedef P150 item150; typedef P151 item151; typedef P152 item152; typedef P153 item153; typedef P154 item154; typedef P155 item155; typedef P156 item156; typedef P157 item157; typedef P158 item158; typedef P159 item159; typedef P160 item160; typedef P161 item161; typedef P162 item162; typedef P163 item163; typedef P164 item164; typedef P165 item165; typedef P166 item166; typedef P167 item167; typedef P168 item168; typedef P169 item169; typedef P170 item170; typedef P171 item171; typedef P172 item172; typedef P173 item173; typedef P174 item174; typedef mpl::int_<1> item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 , class P173 , class P174 , class P175 > struct vector176 { typedef v_iter<vector176, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef P148 item148; typedef P149 item149; typedef P150 item150; typedef P151 item151; typedef P152 item152; typedef P153 item153; typedef P154 item154; typedef P155 item155; typedef P156 item156; typedef P157 item157; typedef P158 item158; typedef P159 item159; typedef P160 item160; typedef P161 item161; typedef P162 item162; typedef P163 item163; typedef P164 item164; typedef P165 item165; typedef P166 item166; typedef P167 item167; typedef P168 item168; typedef P169 item169; typedef P170 item170; typedef P171 item171; typedef P172 item172; typedef P173 item173; typedef P174 item174; typedef P175 item175; typedef mpl::int_<1> item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 , class P173 , class P174 , class P175 , class P176 > struct vector177 { typedef v_iter<vector177, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef P148 item148; typedef P149 item149; typedef P150 item150; typedef P151 item151; typedef P152 item152; typedef P153 item153; typedef P154 item154; typedef P155 item155; typedef P156 item156; typedef P157 item157; typedef P158 item158; typedef P159 item159; typedef P160 item160; typedef P161 item161; typedef P162 item162; typedef P163 item163; typedef P164 item164; typedef P165 item165; typedef P166 item166; typedef P167 item167; typedef P168 item168; typedef P169 item169; typedef P170 item170; typedef P171 item171; typedef P172 item172; typedef P173 item173; typedef P174 item174; typedef P175 item175; typedef P176 item176; typedef mpl::int_<1> item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 , class P173 , class P174 , class P175 , class P176 , class P177 > struct vector178 { typedef v_iter<vector178, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef P148 item148; typedef P149 item149; typedef P150 item150; typedef P151 item151; typedef P152 item152; typedef P153 item153; typedef P154 item154; typedef P155 item155; typedef P156 item156; typedef P157 item157; typedef P158 item158; typedef P159 item159; typedef P160 item160; typedef P161 item161; typedef P162 item162; typedef P163 item163; typedef P164 item164; typedef P165 item165; typedef P166 item166; typedef P167 item167; typedef P168 item168; typedef P169 item169; typedef P170 item170; typedef P171 item171; typedef P172 item172; typedef P173 item173; typedef P174 item174; typedef P175 item175; typedef P176 item176; typedef P177 item177; typedef mpl::int_<1> item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 , class P173 , class P174 , class P175 , class P176 , class P177 , class P178 > struct vector179 { typedef v_iter<vector179, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef P148 item148; typedef P149 item149; typedef P150 item150; typedef P151 item151; typedef P152 item152; typedef P153 item153; typedef P154 item154; typedef P155 item155; typedef P156 item156; typedef P157 item157; typedef P158 item158; typedef P159 item159; typedef P160 item160; typedef P161 item161; typedef P162 item162; typedef P163 item163; typedef P164 item164; typedef P165 item165; typedef P166 item166; typedef P167 item167; typedef P168 item168; typedef P169 item169; typedef P170 item170; typedef P171 item171; typedef P172 item172; typedef P173 item173; typedef P174 item174; typedef P175 item175; typedef P176 item176; typedef P177 item177; typedef P178 item178; typedef mpl::int_<1> item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 , class P173 , class P174 , class P175 , class P176 , class P177 , class P178 , class P179 > struct vector180 { typedef v_iter<vector180, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef P148 item148; typedef P149 item149; typedef P150 item150; typedef P151 item151; typedef P152 item152; typedef P153 item153; typedef P154 item154; typedef P155 item155; typedef P156 item156; typedef P157 item157; typedef P158 item158; typedef P159 item159; typedef P160 item160; typedef P161 item161; typedef P162 item162; typedef P163 item163; typedef P164 item164; typedef P165 item165; typedef P166 item166; typedef P167 item167; typedef P168 item168; typedef P169 item169; typedef P170 item170; typedef P171 item171; typedef P172 item172; typedef P173 item173; typedef P174 item174; typedef P175 item175; typedef P176 item176; typedef P177 item177; typedef P178 item178; typedef P179 item179; typedef mpl::int_<1> item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 , class P173 , class P174 , class P175 , class P176 , class P177 , class P178 , class P179 , class P180 > struct vector181 { typedef v_iter<vector181, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef P148 item148; typedef P149 item149; typedef P150 item150; typedef P151 item151; typedef P152 item152; typedef P153 item153; typedef P154 item154; typedef P155 item155; typedef P156 item156; typedef P157 item157; typedef P158 item158; typedef P159 item159; typedef P160 item160; typedef P161 item161; typedef P162 item162; typedef P163 item163; typedef P164 item164; typedef P165 item165; typedef P166 item166; typedef P167 item167; typedef P168 item168; typedef P169 item169; typedef P170 item170; typedef P171 item171; typedef P172 item172; typedef P173 item173; typedef P174 item174; typedef P175 item175; typedef P176 item176; typedef P177 item177; typedef P178 item178; typedef P179 item179; typedef P180 item180; typedef mpl::int_<1> item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 , class P173 , class P174 , class P175 , class P176 , class P177 , class P178 , class P179 , class P180 , class P181 > struct vector182 { typedef v_iter<vector182, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef P148 item148; typedef P149 item149; typedef P150 item150; typedef P151 item151; typedef P152 item152; typedef P153 item153; typedef P154 item154; typedef P155 item155; typedef P156 item156; typedef P157 item157; typedef P158 item158; typedef P159 item159; typedef P160 item160; typedef P161 item161; typedef P162 item162; typedef P163 item163; typedef P164 item164; typedef P165 item165; typedef P166 item166; typedef P167 item167; typedef P168 item168; typedef P169 item169; typedef P170 item170; typedef P171 item171; typedef P172 item172; typedef P173 item173; typedef P174 item174; typedef P175 item175; typedef P176 item176; typedef P177 item177; typedef P178 item178; typedef P179 item179; typedef P180 item180; typedef P181 item181; typedef mpl::int_<1> item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 , class P173 , class P174 , class P175 , class P176 , class P177 , class P178 , class P179 , class P180 , class P181 , class P182 > struct vector183 { typedef v_iter<vector183, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef P148 item148; typedef P149 item149; typedef P150 item150; typedef P151 item151; typedef P152 item152; typedef P153 item153; typedef P154 item154; typedef P155 item155; typedef P156 item156; typedef P157 item157; typedef P158 item158; typedef P159 item159; typedef P160 item160; typedef P161 item161; typedef P162 item162; typedef P163 item163; typedef P164 item164; typedef P165 item165; typedef P166 item166; typedef P167 item167; typedef P168 item168; typedef P169 item169; typedef P170 item170; typedef P171 item171; typedef P172 item172; typedef P173 item173; typedef P174 item174; typedef P175 item175; typedef P176 item176; typedef P177 item177; typedef P178 item178; typedef P179 item179; typedef P180 item180; typedef P181 item181; typedef P182 item182; typedef mpl::int_<1> item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 , class P173 , class P174 , class P175 , class P176 , class P177 , class P178 , class P179 , class P180 , class P181 , class P182 , class P183 > struct vector184 { typedef v_iter<vector184, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef P148 item148; typedef P149 item149; typedef P150 item150; typedef P151 item151; typedef P152 item152; typedef P153 item153; typedef P154 item154; typedef P155 item155; typedef P156 item156; typedef P157 item157; typedef P158 item158; typedef P159 item159; typedef P160 item160; typedef P161 item161; typedef P162 item162; typedef P163 item163; typedef P164 item164; typedef P165 item165; typedef P166 item166; typedef P167 item167; typedef P168 item168; typedef P169 item169; typedef P170 item170; typedef P171 item171; typedef P172 item172; typedef P173 item173; typedef P174 item174; typedef P175 item175; typedef P176 item176; typedef P177 item177; typedef P178 item178; typedef P179 item179; typedef P180 item180; typedef P181 item181; typedef P182 item182; typedef P183 item183; typedef mpl::int_<1> item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 , class P173 , class P174 , class P175 , class P176 , class P177 , class P178 , class P179 , class P180 , class P181 , class P182 , class P183 , class P184 > struct vector185 { typedef v_iter<vector185, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef P148 item148; typedef P149 item149; typedef P150 item150; typedef P151 item151; typedef P152 item152; typedef P153 item153; typedef P154 item154; typedef P155 item155; typedef P156 item156; typedef P157 item157; typedef P158 item158; typedef P159 item159; typedef P160 item160; typedef P161 item161; typedef P162 item162; typedef P163 item163; typedef P164 item164; typedef P165 item165; typedef P166 item166; typedef P167 item167; typedef P168 item168; typedef P169 item169; typedef P170 item170; typedef P171 item171; typedef P172 item172; typedef P173 item173; typedef P174 item174; typedef P175 item175; typedef P176 item176; typedef P177 item177; typedef P178 item178; typedef P179 item179; typedef P180 item180; typedef P181 item181; typedef P182 item182; typedef P183 item183; typedef P184 item184; typedef mpl::int_<1> item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 , class P173 , class P174 , class P175 , class P176 , class P177 , class P178 , class P179 , class P180 , class P181 , class P182 , class P183 , class P184 , class P185 > struct vector186 { typedef v_iter<vector186, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef P148 item148; typedef P149 item149; typedef P150 item150; typedef P151 item151; typedef P152 item152; typedef P153 item153; typedef P154 item154; typedef P155 item155; typedef P156 item156; typedef P157 item157; typedef P158 item158; typedef P159 item159; typedef P160 item160; typedef P161 item161; typedef P162 item162; typedef P163 item163; typedef P164 item164; typedef P165 item165; typedef P166 item166; typedef P167 item167; typedef P168 item168; typedef P169 item169; typedef P170 item170; typedef P171 item171; typedef P172 item172; typedef P173 item173; typedef P174 item174; typedef P175 item175; typedef P176 item176; typedef P177 item177; typedef P178 item178; typedef P179 item179; typedef P180 item180; typedef P181 item181; typedef P182 item182; typedef P183 item183; typedef P184 item184; typedef P185 item185; typedef mpl::int_<1> item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 , class P173 , class P174 , class P175 , class P176 , class P177 , class P178 , class P179 , class P180 , class P181 , class P182 , class P183 , class P184 , class P185 , class P186 > struct vector187 { typedef v_iter<vector187, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef P148 item148; typedef P149 item149; typedef P150 item150; typedef P151 item151; typedef P152 item152; typedef P153 item153; typedef P154 item154; typedef P155 item155; typedef P156 item156; typedef P157 item157; typedef P158 item158; typedef P159 item159; typedef P160 item160; typedef P161 item161; typedef P162 item162; typedef P163 item163; typedef P164 item164; typedef P165 item165; typedef P166 item166; typedef P167 item167; typedef P168 item168; typedef P169 item169; typedef P170 item170; typedef P171 item171; typedef P172 item172; typedef P173 item173; typedef P174 item174; typedef P175 item175; typedef P176 item176; typedef P177 item177; typedef P178 item178; typedef P179 item179; typedef P180 item180; typedef P181 item181; typedef P182 item182; typedef P183 item183; typedef P184 item184; typedef P185 item185; typedef P186 item186; typedef mpl::int_<1> item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 , class P173 , class P174 , class P175 , class P176 , class P177 , class P178 , class P179 , class P180 , class P181 , class P182 , class P183 , class P184 , class P185 , class P186 , class P187 > struct vector188 { typedef v_iter<vector188, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef P148 item148; typedef P149 item149; typedef P150 item150; typedef P151 item151; typedef P152 item152; typedef P153 item153; typedef P154 item154; typedef P155 item155; typedef P156 item156; typedef P157 item157; typedef P158 item158; typedef P159 item159; typedef P160 item160; typedef P161 item161; typedef P162 item162; typedef P163 item163; typedef P164 item164; typedef P165 item165; typedef P166 item166; typedef P167 item167; typedef P168 item168; typedef P169 item169; typedef P170 item170; typedef P171 item171; typedef P172 item172; typedef P173 item173; typedef P174 item174; typedef P175 item175; typedef P176 item176; typedef P177 item177; typedef P178 item178; typedef P179 item179; typedef P180 item180; typedef P181 item181; typedef P182 item182; typedef P183 item183; typedef P184 item184; typedef P185 item185; typedef P186 item186; typedef P187 item187; typedef mpl::int_<1> item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 , class P173 , class P174 , class P175 , class P176 , class P177 , class P178 , class P179 , class P180 , class P181 , class P182 , class P183 , class P184 , class P185 , class P186 , class P187 , class P188 > struct vector189 { typedef v_iter<vector189, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef P148 item148; typedef P149 item149; typedef P150 item150; typedef P151 item151; typedef P152 item152; typedef P153 item153; typedef P154 item154; typedef P155 item155; typedef P156 item156; typedef P157 item157; typedef P158 item158; typedef P159 item159; typedef P160 item160; typedef P161 item161; typedef P162 item162; typedef P163 item163; typedef P164 item164; typedef P165 item165; typedef P166 item166; typedef P167 item167; typedef P168 item168; typedef P169 item169; typedef P170 item170; typedef P171 item171; typedef P172 item172; typedef P173 item173; typedef P174 item174; typedef P175 item175; typedef P176 item176; typedef P177 item177; typedef P178 item178; typedef P179 item179; typedef P180 item180; typedef P181 item181; typedef P182 item182; typedef P183 item183; typedef P184 item184; typedef P185 item185; typedef P186 item186; typedef P187 item187; typedef P188 item188; typedef mpl::int_<1> item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 , class P173 , class P174 , class P175 , class P176 , class P177 , class P178 , class P179 , class P180 , class P181 , class P182 , class P183 , class P184 , class P185 , class P186 , class P187 , class P188 , class P189 > struct vector190 { typedef v_iter<vector190, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef P148 item148; typedef P149 item149; typedef P150 item150; typedef P151 item151; typedef P152 item152; typedef P153 item153; typedef P154 item154; typedef P155 item155; typedef P156 item156; typedef P157 item157; typedef P158 item158; typedef P159 item159; typedef P160 item160; typedef P161 item161; typedef P162 item162; typedef P163 item163; typedef P164 item164; typedef P165 item165; typedef P166 item166; typedef P167 item167; typedef P168 item168; typedef P169 item169; typedef P170 item170; typedef P171 item171; typedef P172 item172; typedef P173 item173; typedef P174 item174; typedef P175 item175; typedef P176 item176; typedef P177 item177; typedef P178 item178; typedef P179 item179; typedef P180 item180; typedef P181 item181; typedef P182 item182; typedef P183 item183; typedef P184 item184; typedef P185 item185; typedef P186 item186; typedef P187 item187; typedef P188 item188; typedef P189 item189; typedef mpl::int_<1> item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 , class P173 , class P174 , class P175 , class P176 , class P177 , class P178 , class P179 , class P180 , class P181 , class P182 , class P183 , class P184 , class P185 , class P186 , class P187 , class P188 , class P189 , class P190 > struct vector191 { typedef v_iter<vector191, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef P148 item148; typedef P149 item149; typedef P150 item150; typedef P151 item151; typedef P152 item152; typedef P153 item153; typedef P154 item154; typedef P155 item155; typedef P156 item156; typedef P157 item157; typedef P158 item158; typedef P159 item159; typedef P160 item160; typedef P161 item161; typedef P162 item162; typedef P163 item163; typedef P164 item164; typedef P165 item165; typedef P166 item166; typedef P167 item167; typedef P168 item168; typedef P169 item169; typedef P170 item170; typedef P171 item171; typedef P172 item172; typedef P173 item173; typedef P174 item174; typedef P175 item175; typedef P176 item176; typedef P177 item177; typedef P178 item178; typedef P179 item179; typedef P180 item180; typedef P181 item181; typedef P182 item182; typedef P183 item183; typedef P184 item184; typedef P185 item185; typedef P186 item186; typedef P187 item187; typedef P188 item188; typedef P189 item189; typedef P190 item190; typedef mpl::int_<1> item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 , class P173 , class P174 , class P175 , class P176 , class P177 , class P178 , class P179 , class P180 , class P181 , class P182 , class P183 , class P184 , class P185 , class P186 , class P187 , class P188 , class P189 , class P190 , class P191 > struct vector192 { typedef v_iter<vector192, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef P148 item148; typedef P149 item149; typedef P150 item150; typedef P151 item151; typedef P152 item152; typedef P153 item153; typedef P154 item154; typedef P155 item155; typedef P156 item156; typedef P157 item157; typedef P158 item158; typedef P159 item159; typedef P160 item160; typedef P161 item161; typedef P162 item162; typedef P163 item163; typedef P164 item164; typedef P165 item165; typedef P166 item166; typedef P167 item167; typedef P168 item168; typedef P169 item169; typedef P170 item170; typedef P171 item171; typedef P172 item172; typedef P173 item173; typedef P174 item174; typedef P175 item175; typedef P176 item176; typedef P177 item177; typedef P178 item178; typedef P179 item179; typedef P180 item180; typedef P181 item181; typedef P182 item182; typedef P183 item183; typedef P184 item184; typedef P185 item185; typedef P186 item186; typedef P187 item187; typedef P188 item188; typedef P189 item189; typedef P190 item190; typedef P191 item191; typedef mpl::int_<1> item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 , class P173 , class P174 , class P175 , class P176 , class P177 , class P178 , class P179 , class P180 , class P181 , class P182 , class P183 , class P184 , class P185 , class P186 , class P187 , class P188 , class P189 , class P190 , class P191 , class P192 > struct vector193 { typedef v_iter<vector193, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef P148 item148; typedef P149 item149; typedef P150 item150; typedef P151 item151; typedef P152 item152; typedef P153 item153; typedef P154 item154; typedef P155 item155; typedef P156 item156; typedef P157 item157; typedef P158 item158; typedef P159 item159; typedef P160 item160; typedef P161 item161; typedef P162 item162; typedef P163 item163; typedef P164 item164; typedef P165 item165; typedef P166 item166; typedef P167 item167; typedef P168 item168; typedef P169 item169; typedef P170 item170; typedef P171 item171; typedef P172 item172; typedef P173 item173; typedef P174 item174; typedef P175 item175; typedef P176 item176; typedef P177 item177; typedef P178 item178; typedef P179 item179; typedef P180 item180; typedef P181 item181; typedef P182 item182; typedef P183 item183; typedef P184 item184; typedef P185 item185; typedef P186 item186; typedef P187 item187; typedef P188 item188; typedef P189 item189; typedef P190 item190; typedef P191 item191; typedef P192 item192; typedef mpl::int_<1> item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 , class P173 , class P174 , class P175 , class P176 , class P177 , class P178 , class P179 , class P180 , class P181 , class P182 , class P183 , class P184 , class P185 , class P186 , class P187 , class P188 , class P189 , class P190 , class P191 , class P192 , class P193 > struct vector194 { typedef v_iter<vector194, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef P148 item148; typedef P149 item149; typedef P150 item150; typedef P151 item151; typedef P152 item152; typedef P153 item153; typedef P154 item154; typedef P155 item155; typedef P156 item156; typedef P157 item157; typedef P158 item158; typedef P159 item159; typedef P160 item160; typedef P161 item161; typedef P162 item162; typedef P163 item163; typedef P164 item164; typedef P165 item165; typedef P166 item166; typedef P167 item167; typedef P168 item168; typedef P169 item169; typedef P170 item170; typedef P171 item171; typedef P172 item172; typedef P173 item173; typedef P174 item174; typedef P175 item175; typedef P176 item176; typedef P177 item177; typedef P178 item178; typedef P179 item179; typedef P180 item180; typedef P181 item181; typedef P182 item182; typedef P183 item183; typedef P184 item184; typedef P185 item185; typedef P186 item186; typedef P187 item187; typedef P188 item188; typedef P189 item189; typedef P190 item190; typedef P191 item191; typedef P192 item192; typedef P193 item193; typedef mpl::int_<1> item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 , class P173 , class P174 , class P175 , class P176 , class P177 , class P178 , class P179 , class P180 , class P181 , class P182 , class P183 , class P184 , class P185 , class P186 , class P187 , class P188 , class P189 , class P190 , class P191 , class P192 , class P193 , class P194 > struct vector195 { typedef v_iter<vector195, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef P148 item148; typedef P149 item149; typedef P150 item150; typedef P151 item151; typedef P152 item152; typedef P153 item153; typedef P154 item154; typedef P155 item155; typedef P156 item156; typedef P157 item157; typedef P158 item158; typedef P159 item159; typedef P160 item160; typedef P161 item161; typedef P162 item162; typedef P163 item163; typedef P164 item164; typedef P165 item165; typedef P166 item166; typedef P167 item167; typedef P168 item168; typedef P169 item169; typedef P170 item170; typedef P171 item171; typedef P172 item172; typedef P173 item173; typedef P174 item174; typedef P175 item175; typedef P176 item176; typedef P177 item177; typedef P178 item178; typedef P179 item179; typedef P180 item180; typedef P181 item181; typedef P182 item182; typedef P183 item183; typedef P184 item184; typedef P185 item185; typedef P186 item186; typedef P187 item187; typedef P188 item188; typedef P189 item189; typedef P190 item190; typedef P191 item191; typedef P192 item192; typedef P193 item193; typedef P194 item194; typedef mpl::int_<1> item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 , class P173 , class P174 , class P175 , class P176 , class P177 , class P178 , class P179 , class P180 , class P181 , class P182 , class P183 , class P184 , class P185 , class P186 , class P187 , class P188 , class P189 , class P190 , class P191 , class P192 , class P193 , class P194 , class P195 > struct vector196 { typedef v_iter<vector196, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef P148 item148; typedef P149 item149; typedef P150 item150; typedef P151 item151; typedef P152 item152; typedef P153 item153; typedef P154 item154; typedef P155 item155; typedef P156 item156; typedef P157 item157; typedef P158 item158; typedef P159 item159; typedef P160 item160; typedef P161 item161; typedef P162 item162; typedef P163 item163; typedef P164 item164; typedef P165 item165; typedef P166 item166; typedef P167 item167; typedef P168 item168; typedef P169 item169; typedef P170 item170; typedef P171 item171; typedef P172 item172; typedef P173 item173; typedef P174 item174; typedef P175 item175; typedef P176 item176; typedef P177 item177; typedef P178 item178; typedef P179 item179; typedef P180 item180; typedef P181 item181; typedef P182 item182; typedef P183 item183; typedef P184 item184; typedef P185 item185; typedef P186 item186; typedef P187 item187; typedef P188 item188; typedef P189 item189; typedef P190 item190; typedef P191 item191; typedef P192 item192; typedef P193 item193; typedef P194 item194; typedef P195 item195; typedef mpl::int_<1> item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 , class P173 , class P174 , class P175 , class P176 , class P177 , class P178 , class P179 , class P180 , class P181 , class P182 , class P183 , class P184 , class P185 , class P186 , class P187 , class P188 , class P189 , class P190 , class P191 , class P192 , class P193 , class P194 , class P195 , class P196 > struct vector197 { typedef v_iter<vector197, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef P148 item148; typedef P149 item149; typedef P150 item150; typedef P151 item151; typedef P152 item152; typedef P153 item153; typedef P154 item154; typedef P155 item155; typedef P156 item156; typedef P157 item157; typedef P158 item158; typedef P159 item159; typedef P160 item160; typedef P161 item161; typedef P162 item162; typedef P163 item163; typedef P164 item164; typedef P165 item165; typedef P166 item166; typedef P167 item167; typedef P168 item168; typedef P169 item169; typedef P170 item170; typedef P171 item171; typedef P172 item172; typedef P173 item173; typedef P174 item174; typedef P175 item175; typedef P176 item176; typedef P177 item177; typedef P178 item178; typedef P179 item179; typedef P180 item180; typedef P181 item181; typedef P182 item182; typedef P183 item183; typedef P184 item184; typedef P185 item185; typedef P186 item186; typedef P187 item187; typedef P188 item188; typedef P189 item189; typedef P190 item190; typedef P191 item191; typedef P192 item192; typedef P193 item193; typedef P194 item194; typedef P195 item195; typedef P196 item196; typedef mpl::int_<1> item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 , class P173 , class P174 , class P175 , class P176 , class P177 , class P178 , class P179 , class P180 , class P181 , class P182 , class P183 , class P184 , class P185 , class P186 , class P187 , class P188 , class P189 , class P190 , class P191 , class P192 , class P193 , class P194 , class P195 , class P196 , class P197 > struct vector198 { typedef v_iter<vector198, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef P148 item148; typedef P149 item149; typedef P150 item150; typedef P151 item151; typedef P152 item152; typedef P153 item153; typedef P154 item154; typedef P155 item155; typedef P156 item156; typedef P157 item157; typedef P158 item158; typedef P159 item159; typedef P160 item160; typedef P161 item161; typedef P162 item162; typedef P163 item163; typedef P164 item164; typedef P165 item165; typedef P166 item166; typedef P167 item167; typedef P168 item168; typedef P169 item169; typedef P170 item170; typedef P171 item171; typedef P172 item172; typedef P173 item173; typedef P174 item174; typedef P175 item175; typedef P176 item176; typedef P177 item177; typedef P178 item178; typedef P179 item179; typedef P180 item180; typedef P181 item181; typedef P182 item182; typedef P183 item183; typedef P184 item184; typedef P185 item185; typedef P186 item186; typedef P187 item187; typedef P188 item188; typedef P189 item189; typedef P190 item190; typedef P191 item191; typedef P192 item192; typedef P193 item193; typedef P194 item194; typedef P195 item195; typedef P196 item196; typedef P197 item197; typedef mpl::int_<1> item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 , class P173 , class P174 , class P175 , class P176 , class P177 , class P178 , class P179 , class P180 , class P181 , class P182 , class P183 , class P184 , class P185 , class P186 , class P187 , class P188 , class P189 , class P190 , class P191 , class P192 , class P193 , class P194 , class P195 , class P196 , class P197 , class P198 > struct vector199 { typedef v_iter<vector199, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef P148 item148; typedef P149 item149; typedef P150 item150; typedef P151 item151; typedef P152 item152; typedef P153 item153; typedef P154 item154; typedef P155 item155; typedef P156 item156; typedef P157 item157; typedef P158 item158; typedef P159 item159; typedef P160 item160; typedef P161 item161; typedef P162 item162; typedef P163 item163; typedef P164 item164; typedef P165 item165; typedef P166 item166; typedef P167 item167; typedef P168 item168; typedef P169 item169; typedef P170 item170; typedef P171 item171; typedef P172 item172; typedef P173 item173; typedef P174 item174; typedef P175 item175; typedef P176 item176; typedef P177 item177; typedef P178 item178; typedef P179 item179; typedef P180 item180; typedef P181 item181; typedef P182 item182; typedef P183 item183; typedef P184 item184; typedef P185 item185; typedef P186 item186; typedef P187 item187; typedef P188 item188; typedef P189 item189; typedef P190 item190; typedef P191 item191; typedef P192 item192; typedef P193 item193; typedef P194 item194; typedef P195 item195; typedef P196 item196; typedef P197 item197; typedef P198 item198; typedef mpl::int_<1> item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 , class P173 , class P174 , class P175 , class P176 , class P177 , class P178 , class P179 , class P180 , class P181 , class P182 , class P183 , class P184 , class P185 , class P186 , class P187 , class P188 , class P189 , class P190 , class P191 , class P192 , class P193 , class P194 , class P195 , class P196 , class P197 , class P198 , class P199 > struct vector200 { typedef v_iter<vector200, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef P50 item50; typedef P51 item51; typedef P52 item52; typedef P53 item53; typedef P54 item54; typedef P55 item55; typedef P56 item56; typedef P57 item57; typedef P58 item58; typedef P59 item59; typedef P60 item60; typedef P61 item61; typedef P62 item62; typedef P63 item63; typedef P64 item64; typedef P65 item65; typedef P66 item66; typedef P67 item67; typedef P68 item68; typedef P69 item69; typedef P70 item70; typedef P71 item71; typedef P72 item72; typedef P73 item73; typedef P74 item74; typedef P75 item75; typedef P76 item76; typedef P77 item77; typedef P78 item78; typedef P79 item79; typedef P80 item80; typedef P81 item81; typedef P82 item82; typedef P83 item83; typedef P84 item84; typedef P85 item85; typedef P86 item86; typedef P87 item87; typedef P88 item88; typedef P89 item89; typedef P90 item90; typedef P91 item91; typedef P92 item92; typedef P93 item93; typedef P94 item94; typedef P95 item95; typedef P96 item96; typedef P97 item97; typedef P98 item98; typedef P99 item99; typedef P100 item100; typedef P101 item101; typedef P102 item102; typedef P103 item103; typedef P104 item104; typedef P105 item105; typedef P106 item106; typedef P107 item107; typedef P108 item108; typedef P109 item109; typedef P110 item110; typedef P111 item111; typedef P112 item112; typedef P113 item113; typedef P114 item114; typedef P115 item115; typedef P116 item116; typedef P117 item117; typedef P118 item118; typedef P119 item119; typedef P120 item120; typedef P121 item121; typedef P122 item122; typedef P123 item123; typedef P124 item124; typedef P125 item125; typedef P126 item126; typedef P127 item127; typedef P128 item128; typedef P129 item129; typedef P130 item130; typedef P131 item131; typedef P132 item132; typedef P133 item133; typedef P134 item134; typedef P135 item135; typedef P136 item136; typedef P137 item137; typedef P138 item138; typedef P139 item139; typedef P140 item140; typedef P141 item141; typedef P142 item142; typedef P143 item143; typedef P144 item144; typedef P145 item145; typedef P146 item146; typedef P147 item147; typedef P148 item148; typedef P149 item149; typedef P150 item150; typedef P151 item151; typedef P152 item152; typedef P153 item153; typedef P154 item154; typedef P155 item155; typedef P156 item156; typedef P157 item157; typedef P158 item158; typedef P159 item159; typedef P160 item160; typedef P161 item161; typedef P162 item162; typedef P163 item163; typedef P164 item164; typedef P165 item165; typedef P166 item166; typedef P167 item167; typedef P168 item168; typedef P169 item169; typedef P170 item170; typedef P171 item171; typedef P172 item172; typedef P173 item173; typedef P174 item174; typedef P175 item175; typedef P176 item176; typedef P177 item177; typedef P178 item178; typedef P179 item179; typedef P180 item180; typedef P181 item181; typedef P182 item182; typedef P183 item183; typedef P184 item184; typedef P185 item185; typedef P186 item186; typedef P187 item187; typedef P188 item188; typedef P189 item189; typedef P190 item190; typedef P191 item191; typedef P192 item192; typedef P193 item193; typedef P194 item194; typedef P195 item195; typedef P196 item196; typedef P197 item197; typedef P198 item198; typedef P199 item199; typedef mpl::int_<1> item200; typedef mpl::int_<1> item201; typedef mpl::int_<1> item202; typedef mpl::int_<1> item203; typedef mpl::int_<1> item204; typedef mpl::int_<1> item205; typedef mpl::int_<1> item206; typedef mpl::int_<1> item207; typedef mpl::int_<1> item208; typedef mpl::int_<1> item209; typedef mpl::int_<1> item210; typedef mpl::int_<1> item211; typedef mpl::int_<1> item212; typedef mpl::int_<1> item213; typedef mpl::int_<1> item214; typedef mpl::int_<1> item215; typedef mpl::int_<1> item216; typedef mpl::int_<1> item217; typedef mpl::int_<1> item218; typedef mpl::int_<1> item219; typedef mpl::int_<1> item220; typedef mpl::int_<1> item221; typedef mpl::int_<1> item222; typedef mpl::int_<1> item223; typedef mpl::int_<1> item224; typedef mpl::int_<1> item225; typedef mpl::int_<1> item226; typedef mpl::int_<1> item227; typedef mpl::int_<1> item228; typedef mpl::int_<1> item229; typedef mpl::int_<1> item230; typedef mpl::int_<1> item231; typedef mpl::int_<1> item232; typedef mpl::int_<1> item233; typedef mpl::int_<1> item234; typedef mpl::int_<1> item235; typedef mpl::int_<1> item236; typedef mpl::int_<1> item237; typedef mpl::int_<1> item238; typedef mpl::int_<1> item239; typedef mpl::int_<1> item240; typedef mpl::int_<1> item241; typedef mpl::int_<1> item242; typedef mpl::int_<1> item243; typedef mpl::int_<1> item244; typedef mpl::int_<1> item245; typedef mpl::int_<1> item246; typedef mpl::int_<1> item247; typedef mpl::int_<1> item248; typedef mpl::int_<1> item249; };
+}}
+namespace boost { namespace type_of {
+ template<class V, class T> struct push_back {
+ typedef V type;
+ };
+ template< class T> struct push_back<boost::type_of::vector0<>, T> { typedef boost::type_of::vector1< T > type; };
+ template< class P0 , class T> struct push_back<boost::type_of::vector1< P0>, T> { typedef boost::type_of::vector2< P0 , T > type; };
+ template< class P0 , class P1 , class T> struct push_back<boost::type_of::vector2< P0 , P1>, T> { typedef boost::type_of::vector3< P0 , P1 , T > type; };
+ template< class P0 , class P1 , class P2 , class T> struct push_back<boost::type_of::vector3< P0 , P1 , P2>, T> { typedef boost::type_of::vector4< P0 , P1 , P2 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class T> struct push_back<boost::type_of::vector4< P0 , P1 , P2 , P3>, T> { typedef boost::type_of::vector5< P0 , P1 , P2 , P3 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class T> struct push_back<boost::type_of::vector5< P0 , P1 , P2 , P3 , P4>, T> { typedef boost::type_of::vector6< P0 , P1 , P2 , P3 , P4 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class T> struct push_back<boost::type_of::vector6< P0 , P1 , P2 , P3 , P4 , P5>, T> { typedef boost::type_of::vector7< P0 , P1 , P2 , P3 , P4 , P5 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class T> struct push_back<boost::type_of::vector7< P0 , P1 , P2 , P3 , P4 , P5 , P6>, T> { typedef boost::type_of::vector8< P0 , P1 , P2 , P3 , P4 , P5 , P6 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class T> struct push_back<boost::type_of::vector8< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7>, T> { typedef boost::type_of::vector9< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class T> struct push_back<boost::type_of::vector9< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8>, T> { typedef boost::type_of::vector10< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class T> struct push_back<boost::type_of::vector10< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9>, T> { typedef boost::type_of::vector11< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class T> struct push_back<boost::type_of::vector11< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10>, T> { typedef boost::type_of::vector12< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class T> struct push_back<boost::type_of::vector12< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11>, T> { typedef boost::type_of::vector13< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class T> struct push_back<boost::type_of::vector13< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12>, T> { typedef boost::type_of::vector14< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class T> struct push_back<boost::type_of::vector14< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13>, T> { typedef boost::type_of::vector15< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class T> struct push_back<boost::type_of::vector15< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14>, T> { typedef boost::type_of::vector16< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class T> struct push_back<boost::type_of::vector16< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15>, T> { typedef boost::type_of::vector17< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class T> struct push_back<boost::type_of::vector17< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16>, T> { typedef boost::type_of::vector18< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class T> struct push_back<boost::type_of::vector18< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17>, T> { typedef boost::type_of::vector19< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class T> struct push_back<boost::type_of::vector19< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18>, T> { typedef boost::type_of::vector20< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class T> struct push_back<boost::type_of::vector20< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19>, T> { typedef boost::type_of::vector21< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class T> struct push_back<boost::type_of::vector21< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20>, T> { typedef boost::type_of::vector22< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class T> struct push_back<boost::type_of::vector22< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21>, T> { typedef boost::type_of::vector23< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class T> struct push_back<boost::type_of::vector23< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22>, T> { typedef boost::type_of::vector24< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class T> struct push_back<boost::type_of::vector24< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23>, T> { typedef boost::type_of::vector25< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class T> struct push_back<boost::type_of::vector25< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24>, T> { typedef boost::type_of::vector26< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class T> struct push_back<boost::type_of::vector26< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25>, T> { typedef boost::type_of::vector27< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class T> struct push_back<boost::type_of::vector27< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26>, T> { typedef boost::type_of::vector28< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class T> struct push_back<boost::type_of::vector28< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27>, T> { typedef boost::type_of::vector29< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class T> struct push_back<boost::type_of::vector29< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28>, T> { typedef boost::type_of::vector30< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class T> struct push_back<boost::type_of::vector30< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29>, T> { typedef boost::type_of::vector31< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class T> struct push_back<boost::type_of::vector31< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30>, T> { typedef boost::type_of::vector32< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class T> struct push_back<boost::type_of::vector32< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31>, T> { typedef boost::type_of::vector33< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class T> struct push_back<boost::type_of::vector33< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32>, T> { typedef boost::type_of::vector34< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class T> struct push_back<boost::type_of::vector34< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33>, T> { typedef boost::type_of::vector35< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class T> struct push_back<boost::type_of::vector35< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34>, T> { typedef boost::type_of::vector36< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class T> struct push_back<boost::type_of::vector36< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35>, T> { typedef boost::type_of::vector37< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class T> struct push_back<boost::type_of::vector37< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36>, T> { typedef boost::type_of::vector38< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class T> struct push_back<boost::type_of::vector38< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37>, T> { typedef boost::type_of::vector39< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class T> struct push_back<boost::type_of::vector39< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38>, T> { typedef boost::type_of::vector40< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class T> struct push_back<boost::type_of::vector40< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39>, T> { typedef boost::type_of::vector41< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class T> struct push_back<boost::type_of::vector41< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40>, T> { typedef boost::type_of::vector42< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class T> struct push_back<boost::type_of::vector42< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41>, T> { typedef boost::type_of::vector43< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class T> struct push_back<boost::type_of::vector43< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42>, T> { typedef boost::type_of::vector44< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class T> struct push_back<boost::type_of::vector44< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43>, T> { typedef boost::type_of::vector45< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class T> struct push_back<boost::type_of::vector45< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44>, T> { typedef boost::type_of::vector46< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class T> struct push_back<boost::type_of::vector46< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45>, T> { typedef boost::type_of::vector47< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class T> struct push_back<boost::type_of::vector47< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46>, T> { typedef boost::type_of::vector48< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class T> struct push_back<boost::type_of::vector48< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47>, T> { typedef boost::type_of::vector49< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class T> struct push_back<boost::type_of::vector49< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48>, T> { typedef boost::type_of::vector50< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class T> struct push_back<boost::type_of::vector50< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49>, T> { typedef boost::type_of::vector51< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class T> struct push_back<boost::type_of::vector51< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50>, T> { typedef boost::type_of::vector52< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class T> struct push_back<boost::type_of::vector52< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51>, T> { typedef boost::type_of::vector53< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class T> struct push_back<boost::type_of::vector53< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52>, T> { typedef boost::type_of::vector54< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class T> struct push_back<boost::type_of::vector54< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53>, T> { typedef boost::type_of::vector55< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class T> struct push_back<boost::type_of::vector55< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54>, T> { typedef boost::type_of::vector56< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class T> struct push_back<boost::type_of::vector56< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55>, T> { typedef boost::type_of::vector57< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class T> struct push_back<boost::type_of::vector57< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56>, T> { typedef boost::type_of::vector58< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class T> struct push_back<boost::type_of::vector58< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57>, T> { typedef boost::type_of::vector59< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class T> struct push_back<boost::type_of::vector59< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58>, T> { typedef boost::type_of::vector60< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class T> struct push_back<boost::type_of::vector60< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59>, T> { typedef boost::type_of::vector61< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class T> struct push_back<boost::type_of::vector61< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60>, T> { typedef boost::type_of::vector62< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class T> struct push_back<boost::type_of::vector62< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61>, T> { typedef boost::type_of::vector63< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class T> struct push_back<boost::type_of::vector63< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62>, T> { typedef boost::type_of::vector64< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class T> struct push_back<boost::type_of::vector64< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63>, T> { typedef boost::type_of::vector65< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class T> struct push_back<boost::type_of::vector65< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64>, T> { typedef boost::type_of::vector66< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class T> struct push_back<boost::type_of::vector66< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65>, T> { typedef boost::type_of::vector67< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class T> struct push_back<boost::type_of::vector67< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66>, T> { typedef boost::type_of::vector68< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class T> struct push_back<boost::type_of::vector68< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67>, T> { typedef boost::type_of::vector69< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class T> struct push_back<boost::type_of::vector69< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68>, T> { typedef boost::type_of::vector70< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class T> struct push_back<boost::type_of::vector70< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69>, T> { typedef boost::type_of::vector71< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class T> struct push_back<boost::type_of::vector71< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70>, T> { typedef boost::type_of::vector72< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class T> struct push_back<boost::type_of::vector72< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71>, T> { typedef boost::type_of::vector73< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class T> struct push_back<boost::type_of::vector73< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72>, T> { typedef boost::type_of::vector74< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class T> struct push_back<boost::type_of::vector74< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73>, T> { typedef boost::type_of::vector75< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class T> struct push_back<boost::type_of::vector75< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74>, T> { typedef boost::type_of::vector76< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class T> struct push_back<boost::type_of::vector76< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75>, T> { typedef boost::type_of::vector77< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class T> struct push_back<boost::type_of::vector77< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76>, T> { typedef boost::type_of::vector78< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class T> struct push_back<boost::type_of::vector78< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77>, T> { typedef boost::type_of::vector79< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class T> struct push_back<boost::type_of::vector79< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78>, T> { typedef boost::type_of::vector80< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class T> struct push_back<boost::type_of::vector80< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79>, T> { typedef boost::type_of::vector81< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class T> struct push_back<boost::type_of::vector81< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80>, T> { typedef boost::type_of::vector82< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class T> struct push_back<boost::type_of::vector82< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81>, T> { typedef boost::type_of::vector83< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class T> struct push_back<boost::type_of::vector83< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82>, T> { typedef boost::type_of::vector84< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class T> struct push_back<boost::type_of::vector84< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83>, T> { typedef boost::type_of::vector85< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class T> struct push_back<boost::type_of::vector85< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84>, T> { typedef boost::type_of::vector86< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class T> struct push_back<boost::type_of::vector86< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85>, T> { typedef boost::type_of::vector87< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class T> struct push_back<boost::type_of::vector87< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86>, T> { typedef boost::type_of::vector88< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class T> struct push_back<boost::type_of::vector88< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87>, T> { typedef boost::type_of::vector89< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class T> struct push_back<boost::type_of::vector89< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88>, T> { typedef boost::type_of::vector90< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class T> struct push_back<boost::type_of::vector90< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89>, T> { typedef boost::type_of::vector91< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class T> struct push_back<boost::type_of::vector91< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90>, T> { typedef boost::type_of::vector92< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class T> struct push_back<boost::type_of::vector92< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91>, T> { typedef boost::type_of::vector93< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class T> struct push_back<boost::type_of::vector93< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92>, T> { typedef boost::type_of::vector94< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class T> struct push_back<boost::type_of::vector94< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93>, T> { typedef boost::type_of::vector95< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class T> struct push_back<boost::type_of::vector95< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94>, T> { typedef boost::type_of::vector96< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class T> struct push_back<boost::type_of::vector96< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95>, T> { typedef boost::type_of::vector97< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class T> struct push_back<boost::type_of::vector97< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96>, T> { typedef boost::type_of::vector98< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class T> struct push_back<boost::type_of::vector98< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97>, T> { typedef boost::type_of::vector99< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class T> struct push_back<boost::type_of::vector99< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98>, T> { typedef boost::type_of::vector100< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class T> struct push_back<boost::type_of::vector100< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99>, T> { typedef boost::type_of::vector101< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class T> struct push_back<boost::type_of::vector101< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100>, T> { typedef boost::type_of::vector102< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class T> struct push_back<boost::type_of::vector102< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101>, T> { typedef boost::type_of::vector103< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class T> struct push_back<boost::type_of::vector103< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102>, T> { typedef boost::type_of::vector104< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class T> struct push_back<boost::type_of::vector104< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103>, T> { typedef boost::type_of::vector105< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class T> struct push_back<boost::type_of::vector105< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104>, T> { typedef boost::type_of::vector106< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class T> struct push_back<boost::type_of::vector106< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105>, T> { typedef boost::type_of::vector107< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class T> struct push_back<boost::type_of::vector107< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106>, T> { typedef boost::type_of::vector108< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class T> struct push_back<boost::type_of::vector108< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107>, T> { typedef boost::type_of::vector109< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class T> struct push_back<boost::type_of::vector109< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108>, T> { typedef boost::type_of::vector110< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class T> struct push_back<boost::type_of::vector110< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109>, T> { typedef boost::type_of::vector111< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class T> struct push_back<boost::type_of::vector111< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110>, T> { typedef boost::type_of::vector112< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class T> struct push_back<boost::type_of::vector112< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111>, T> { typedef boost::type_of::vector113< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class T> struct push_back<boost::type_of::vector113< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112>, T> { typedef boost::type_of::vector114< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class T> struct push_back<boost::type_of::vector114< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113>, T> { typedef boost::type_of::vector115< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class T> struct push_back<boost::type_of::vector115< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114>, T> { typedef boost::type_of::vector116< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class T> struct push_back<boost::type_of::vector116< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115>, T> { typedef boost::type_of::vector117< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class T> struct push_back<boost::type_of::vector117< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116>, T> { typedef boost::type_of::vector118< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class T> struct push_back<boost::type_of::vector118< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117>, T> { typedef boost::type_of::vector119< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class T> struct push_back<boost::type_of::vector119< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118>, T> { typedef boost::type_of::vector120< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class T> struct push_back<boost::type_of::vector120< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119>, T> { typedef boost::type_of::vector121< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class T> struct push_back<boost::type_of::vector121< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120>, T> { typedef boost::type_of::vector122< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class T> struct push_back<boost::type_of::vector122< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121>, T> { typedef boost::type_of::vector123< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class T> struct push_back<boost::type_of::vector123< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122>, T> { typedef boost::type_of::vector124< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class T> struct push_back<boost::type_of::vector124< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123>, T> { typedef boost::type_of::vector125< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class T> struct push_back<boost::type_of::vector125< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124>, T> { typedef boost::type_of::vector126< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class T> struct push_back<boost::type_of::vector126< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125>, T> { typedef boost::type_of::vector127< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class T> struct push_back<boost::type_of::vector127< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126>, T> { typedef boost::type_of::vector128< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class T> struct push_back<boost::type_of::vector128< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127>, T> { typedef boost::type_of::vector129< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class T> struct push_back<boost::type_of::vector129< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128>, T> { typedef boost::type_of::vector130< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class T> struct push_back<boost::type_of::vector130< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129>, T> { typedef boost::type_of::vector131< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class T> struct push_back<boost::type_of::vector131< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130>, T> { typedef boost::type_of::vector132< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class T> struct push_back<boost::type_of::vector132< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131>, T> { typedef boost::type_of::vector133< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class T> struct push_back<boost::type_of::vector133< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132>, T> { typedef boost::type_of::vector134< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class T> struct push_back<boost::type_of::vector134< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133>, T> { typedef boost::type_of::vector135< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class T> struct push_back<boost::type_of::vector135< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134>, T> { typedef boost::type_of::vector136< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class T> struct push_back<boost::type_of::vector136< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135>, T> { typedef boost::type_of::vector137< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class T> struct push_back<boost::type_of::vector137< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136>, T> { typedef boost::type_of::vector138< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class T> struct push_back<boost::type_of::vector138< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137>, T> { typedef boost::type_of::vector139< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class T> struct push_back<boost::type_of::vector139< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138>, T> { typedef boost::type_of::vector140< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class T> struct push_back<boost::type_of::vector140< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139>, T> { typedef boost::type_of::vector141< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class T> struct push_back<boost::type_of::vector141< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140>, T> { typedef boost::type_of::vector142< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class T> struct push_back<boost::type_of::vector142< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141>, T> { typedef boost::type_of::vector143< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class T> struct push_back<boost::type_of::vector143< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142>, T> { typedef boost::type_of::vector144< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class T> struct push_back<boost::type_of::vector144< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143>, T> { typedef boost::type_of::vector145< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class T> struct push_back<boost::type_of::vector145< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144>, T> { typedef boost::type_of::vector146< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class T> struct push_back<boost::type_of::vector146< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145>, T> { typedef boost::type_of::vector147< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class T> struct push_back<boost::type_of::vector147< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146>, T> { typedef boost::type_of::vector148< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class T> struct push_back<boost::type_of::vector148< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147>, T> { typedef boost::type_of::vector149< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class T> struct push_back<boost::type_of::vector149< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148>, T> { typedef boost::type_of::vector150< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class T> struct push_back<boost::type_of::vector150< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149>, T> { typedef boost::type_of::vector151< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class T> struct push_back<boost::type_of::vector151< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150>, T> { typedef boost::type_of::vector152< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class T> struct push_back<boost::type_of::vector152< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151>, T> { typedef boost::type_of::vector153< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class T> struct push_back<boost::type_of::vector153< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152>, T> { typedef boost::type_of::vector154< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class T> struct push_back<boost::type_of::vector154< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153>, T> { typedef boost::type_of::vector155< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class T> struct push_back<boost::type_of::vector155< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154>, T> { typedef boost::type_of::vector156< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class T> struct push_back<boost::type_of::vector156< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155>, T> { typedef boost::type_of::vector157< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class T> struct push_back<boost::type_of::vector157< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156>, T> { typedef boost::type_of::vector158< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class T> struct push_back<boost::type_of::vector158< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157>, T> { typedef boost::type_of::vector159< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class T> struct push_back<boost::type_of::vector159< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158>, T> { typedef boost::type_of::vector160< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class T> struct push_back<boost::type_of::vector160< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159>, T> { typedef boost::type_of::vector161< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class T> struct push_back<boost::type_of::vector161< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160>, T> { typedef boost::type_of::vector162< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class T> struct push_back<boost::type_of::vector162< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161>, T> { typedef boost::type_of::vector163< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class T> struct push_back<boost::type_of::vector163< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162>, T> { typedef boost::type_of::vector164< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class T> struct push_back<boost::type_of::vector164< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163>, T> { typedef boost::type_of::vector165< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class T> struct push_back<boost::type_of::vector165< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164>, T> { typedef boost::type_of::vector166< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class T> struct push_back<boost::type_of::vector166< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165>, T> { typedef boost::type_of::vector167< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class T> struct push_back<boost::type_of::vector167< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166>, T> { typedef boost::type_of::vector168< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class T> struct push_back<boost::type_of::vector168< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167>, T> { typedef boost::type_of::vector169< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class T> struct push_back<boost::type_of::vector169< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168>, T> { typedef boost::type_of::vector170< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class T> struct push_back<boost::type_of::vector170< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169>, T> { typedef boost::type_of::vector171< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class T> struct push_back<boost::type_of::vector171< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170>, T> { typedef boost::type_of::vector172< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class T> struct push_back<boost::type_of::vector172< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171>, T> { typedef boost::type_of::vector173< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 , class T> struct push_back<boost::type_of::vector173< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , P172>, T> { typedef boost::type_of::vector174< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , P172 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 , class P173 , class T> struct push_back<boost::type_of::vector174< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , P172 , P173>, T> { typedef boost::type_of::vector175< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , P172 , P173 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 , class P173 , class P174 , class T> struct push_back<boost::type_of::vector175< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , P172 , P173 , P174>, T> { typedef boost::type_of::vector176< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , P172 , P173 , P174 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 , class P173 , class P174 , class P175 , class T> struct push_back<boost::type_of::vector176< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , P172 , P173 , P174 , P175>, T> { typedef boost::type_of::vector177< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , P172 , P173 , P174 , P175 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 , class P173 , class P174 , class P175 , class P176 , class T> struct push_back<boost::type_of::vector177< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , P172 , P173 , P174 , P175 , P176>, T> { typedef boost::type_of::vector178< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , P172 , P173 , P174 , P175 , P176 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 , class P173 , class P174 , class P175 , class P176 , class P177 , class T> struct push_back<boost::type_of::vector178< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , P172 , P173 , P174 , P175 , P176 , P177>, T> { typedef boost::type_of::vector179< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , P172 , P173 , P174 , P175 , P176 , P177 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 , class P173 , class P174 , class P175 , class P176 , class P177 , class P178 , class T> struct push_back<boost::type_of::vector179< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , P172 , P173 , P174 , P175 , P176 , P177 , P178>, T> { typedef boost::type_of::vector180< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , P172 , P173 , P174 , P175 , P176 , P177 , P178 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 , class P173 , class P174 , class P175 , class P176 , class P177 , class P178 , class P179 , class T> struct push_back<boost::type_of::vector180< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , P172 , P173 , P174 , P175 , P176 , P177 , P178 , P179>, T> { typedef boost::type_of::vector181< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , P172 , P173 , P174 , P175 , P176 , P177 , P178 , P179 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 , class P173 , class P174 , class P175 , class P176 , class P177 , class P178 , class P179 , class P180 , class T> struct push_back<boost::type_of::vector181< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , P172 , P173 , P174 , P175 , P176 , P177 , P178 , P179 , P180>, T> { typedef boost::type_of::vector182< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , P172 , P173 , P174 , P175 , P176 , P177 , P178 , P179 , P180 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 , class P173 , class P174 , class P175 , class P176 , class P177 , class P178 , class P179 , class P180 , class P181 , class T> struct push_back<boost::type_of::vector182< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , P172 , P173 , P174 , P175 , P176 , P177 , P178 , P179 , P180 , P181>, T> { typedef boost::type_of::vector183< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , P172 , P173 , P174 , P175 , P176 , P177 , P178 , P179 , P180 , P181 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 , class P173 , class P174 , class P175 , class P176 , class P177 , class P178 , class P179 , class P180 , class P181 , class P182 , class T> struct push_back<boost::type_of::vector183< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , P172 , P173 , P174 , P175 , P176 , P177 , P178 , P179 , P180 , P181 , P182>, T> { typedef boost::type_of::vector184< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , P172 , P173 , P174 , P175 , P176 , P177 , P178 , P179 , P180 , P181 , P182 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 , class P173 , class P174 , class P175 , class P176 , class P177 , class P178 , class P179 , class P180 , class P181 , class P182 , class P183 , class T> struct push_back<boost::type_of::vector184< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , P172 , P173 , P174 , P175 , P176 , P177 , P178 , P179 , P180 , P181 , P182 , P183>, T> { typedef boost::type_of::vector185< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , P172 , P173 , P174 , P175 , P176 , P177 , P178 , P179 , P180 , P181 , P182 , P183 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 , class P173 , class P174 , class P175 , class P176 , class P177 , class P178 , class P179 , class P180 , class P181 , class P182 , class P183 , class P184 , class T> struct push_back<boost::type_of::vector185< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , P172 , P173 , P174 , P175 , P176 , P177 , P178 , P179 , P180 , P181 , P182 , P183 , P184>, T> { typedef boost::type_of::vector186< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , P172 , P173 , P174 , P175 , P176 , P177 , P178 , P179 , P180 , P181 , P182 , P183 , P184 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 , class P173 , class P174 , class P175 , class P176 , class P177 , class P178 , class P179 , class P180 , class P181 , class P182 , class P183 , class P184 , class P185 , class T> struct push_back<boost::type_of::vector186< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , P172 , P173 , P174 , P175 , P176 , P177 , P178 , P179 , P180 , P181 , P182 , P183 , P184 , P185>, T> { typedef boost::type_of::vector187< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , P172 , P173 , P174 , P175 , P176 , P177 , P178 , P179 , P180 , P181 , P182 , P183 , P184 , P185 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 , class P173 , class P174 , class P175 , class P176 , class P177 , class P178 , class P179 , class P180 , class P181 , class P182 , class P183 , class P184 , class P185 , class P186 , class T> struct push_back<boost::type_of::vector187< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , P172 , P173 , P174 , P175 , P176 , P177 , P178 , P179 , P180 , P181 , P182 , P183 , P184 , P185 , P186>, T> { typedef boost::type_of::vector188< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , P172 , P173 , P174 , P175 , P176 , P177 , P178 , P179 , P180 , P181 , P182 , P183 , P184 , P185 , P186 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 , class P173 , class P174 , class P175 , class P176 , class P177 , class P178 , class P179 , class P180 , class P181 , class P182 , class P183 , class P184 , class P185 , class P186 , class P187 , class T> struct push_back<boost::type_of::vector188< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , P172 , P173 , P174 , P175 , P176 , P177 , P178 , P179 , P180 , P181 , P182 , P183 , P184 , P185 , P186 , P187>, T> { typedef boost::type_of::vector189< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , P172 , P173 , P174 , P175 , P176 , P177 , P178 , P179 , P180 , P181 , P182 , P183 , P184 , P185 , P186 , P187 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 , class P173 , class P174 , class P175 , class P176 , class P177 , class P178 , class P179 , class P180 , class P181 , class P182 , class P183 , class P184 , class P185 , class P186 , class P187 , class P188 , class T> struct push_back<boost::type_of::vector189< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , P172 , P173 , P174 , P175 , P176 , P177 , P178 , P179 , P180 , P181 , P182 , P183 , P184 , P185 , P186 , P187 , P188>, T> { typedef boost::type_of::vector190< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , P172 , P173 , P174 , P175 , P176 , P177 , P178 , P179 , P180 , P181 , P182 , P183 , P184 , P185 , P186 , P187 , P188 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 , class P173 , class P174 , class P175 , class P176 , class P177 , class P178 , class P179 , class P180 , class P181 , class P182 , class P183 , class P184 , class P185 , class P186 , class P187 , class P188 , class P189 , class T> struct push_back<boost::type_of::vector190< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , P172 , P173 , P174 , P175 , P176 , P177 , P178 , P179 , P180 , P181 , P182 , P183 , P184 , P185 , P186 , P187 , P188 , P189>, T> { typedef boost::type_of::vector191< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , P172 , P173 , P174 , P175 , P176 , P177 , P178 , P179 , P180 , P181 , P182 , P183 , P184 , P185 , P186 , P187 , P188 , P189 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 , class P173 , class P174 , class P175 , class P176 , class P177 , class P178 , class P179 , class P180 , class P181 , class P182 , class P183 , class P184 , class P185 , class P186 , class P187 , class P188 , class P189 , class P190 , class T> struct push_back<boost::type_of::vector191< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , P172 , P173 , P174 , P175 , P176 , P177 , P178 , P179 , P180 , P181 , P182 , P183 , P184 , P185 , P186 , P187 , P188 , P189 , P190>, T> { typedef boost::type_of::vector192< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , P172 , P173 , P174 , P175 , P176 , P177 , P178 , P179 , P180 , P181 , P182 , P183 , P184 , P185 , P186 , P187 , P188 , P189 , P190 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 , class P173 , class P174 , class P175 , class P176 , class P177 , class P178 , class P179 , class P180 , class P181 , class P182 , class P183 , class P184 , class P185 , class P186 , class P187 , class P188 , class P189 , class P190 , class P191 , class T> struct push_back<boost::type_of::vector192< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , P172 , P173 , P174 , P175 , P176 , P177 , P178 , P179 , P180 , P181 , P182 , P183 , P184 , P185 , P186 , P187 , P188 , P189 , P190 , P191>, T> { typedef boost::type_of::vector193< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , P172 , P173 , P174 , P175 , P176 , P177 , P178 , P179 , P180 , P181 , P182 , P183 , P184 , P185 , P186 , P187 , P188 , P189 , P190 , P191 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 , class P173 , class P174 , class P175 , class P176 , class P177 , class P178 , class P179 , class P180 , class P181 , class P182 , class P183 , class P184 , class P185 , class P186 , class P187 , class P188 , class P189 , class P190 , class P191 , class P192 , class T> struct push_back<boost::type_of::vector193< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , P172 , P173 , P174 , P175 , P176 , P177 , P178 , P179 , P180 , P181 , P182 , P183 , P184 , P185 , P186 , P187 , P188 , P189 , P190 , P191 , P192>, T> { typedef boost::type_of::vector194< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , P172 , P173 , P174 , P175 , P176 , P177 , P178 , P179 , P180 , P181 , P182 , P183 , P184 , P185 , P186 , P187 , P188 , P189 , P190 , P191 , P192 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 , class P173 , class P174 , class P175 , class P176 , class P177 , class P178 , class P179 , class P180 , class P181 , class P182 , class P183 , class P184 , class P185 , class P186 , class P187 , class P188 , class P189 , class P190 , class P191 , class P192 , class P193 , class T> struct push_back<boost::type_of::vector194< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , P172 , P173 , P174 , P175 , P176 , P177 , P178 , P179 , P180 , P181 , P182 , P183 , P184 , P185 , P186 , P187 , P188 , P189 , P190 , P191 , P192 , P193>, T> { typedef boost::type_of::vector195< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , P172 , P173 , P174 , P175 , P176 , P177 , P178 , P179 , P180 , P181 , P182 , P183 , P184 , P185 , P186 , P187 , P188 , P189 , P190 , P191 , P192 , P193 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 , class P173 , class P174 , class P175 , class P176 , class P177 , class P178 , class P179 , class P180 , class P181 , class P182 , class P183 , class P184 , class P185 , class P186 , class P187 , class P188 , class P189 , class P190 , class P191 , class P192 , class P193 , class P194 , class T> struct push_back<boost::type_of::vector195< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , P172 , P173 , P174 , P175 , P176 , P177 , P178 , P179 , P180 , P181 , P182 , P183 , P184 , P185 , P186 , P187 , P188 , P189 , P190 , P191 , P192 , P193 , P194>, T> { typedef boost::type_of::vector196< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , P172 , P173 , P174 , P175 , P176 , P177 , P178 , P179 , P180 , P181 , P182 , P183 , P184 , P185 , P186 , P187 , P188 , P189 , P190 , P191 , P192 , P193 , P194 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 , class P173 , class P174 , class P175 , class P176 , class P177 , class P178 , class P179 , class P180 , class P181 , class P182 , class P183 , class P184 , class P185 , class P186 , class P187 , class P188 , class P189 , class P190 , class P191 , class P192 , class P193 , class P194 , class P195 , class T> struct push_back<boost::type_of::vector196< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , P172 , P173 , P174 , P175 , P176 , P177 , P178 , P179 , P180 , P181 , P182 , P183 , P184 , P185 , P186 , P187 , P188 , P189 , P190 , P191 , P192 , P193 , P194 , P195>, T> { typedef boost::type_of::vector197< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , P172 , P173 , P174 , P175 , P176 , P177 , P178 , P179 , P180 , P181 , P182 , P183 , P184 , P185 , P186 , P187 , P188 , P189 , P190 , P191 , P192 , P193 , P194 , P195 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 , class P173 , class P174 , class P175 , class P176 , class P177 , class P178 , class P179 , class P180 , class P181 , class P182 , class P183 , class P184 , class P185 , class P186 , class P187 , class P188 , class P189 , class P190 , class P191 , class P192 , class P193 , class P194 , class P195 , class P196 , class T> struct push_back<boost::type_of::vector197< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , P172 , P173 , P174 , P175 , P176 , P177 , P178 , P179 , P180 , P181 , P182 , P183 , P184 , P185 , P186 , P187 , P188 , P189 , P190 , P191 , P192 , P193 , P194 , P195 , P196>, T> { typedef boost::type_of::vector198< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , P172 , P173 , P174 , P175 , P176 , P177 , P178 , P179 , P180 , P181 , P182 , P183 , P184 , P185 , P186 , P187 , P188 , P189 , P190 , P191 , P192 , P193 , P194 , P195 , P196 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 , class P173 , class P174 , class P175 , class P176 , class P177 , class P178 , class P179 , class P180 , class P181 , class P182 , class P183 , class P184 , class P185 , class P186 , class P187 , class P188 , class P189 , class P190 , class P191 , class P192 , class P193 , class P194 , class P195 , class P196 , class P197 , class T> struct push_back<boost::type_of::vector198< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , P172 , P173 , P174 , P175 , P176 , P177 , P178 , P179 , P180 , P181 , P182 , P183 , P184 , P185 , P186 , P187 , P188 , P189 , P190 , P191 , P192 , P193 , P194 , P195 , P196 , P197>, T> { typedef boost::type_of::vector199< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , P172 , P173 , P174 , P175 , P176 , P177 , P178 , P179 , P180 , P181 , P182 , P183 , P184 , P185 , P186 , P187 , P188 , P189 , P190 , P191 , P192 , P193 , P194 , P195 , P196 , P197 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 , class P50 , class P51 , class P52 , class P53 , class P54 , class P55 , class P56 , class P57 , class P58 , class P59 , class P60 , class P61 , class P62 , class P63 , class P64 , class P65 , class P66 , class P67 , class P68 , class P69 , class P70 , class P71 , class P72 , class P73 , class P74 , class P75 , class P76 , class P77 , class P78 , class P79 , class P80 , class P81 , class P82 , class P83 , class P84 , class P85 , class P86 , class P87 , class P88 , class P89 , class P90 , class P91 , class P92 , class P93 , class P94 , class P95 , class P96 , class P97 , class P98 , class P99 , class P100 , class P101 , class P102 , class P103 , class P104 , class P105 , class P106 , class P107 , class P108 , class P109 , class P110 , class P111 , class P112 , class P113 , class P114 , class P115 , class P116 , class P117 , class P118 , class P119 , class P120 , class P121 , class P122 , class P123 , class P124 , class P125 , class P126 , class P127 , class P128 , class P129 , class P130 , class P131 , class P132 , class P133 , class P134 , class P135 , class P136 , class P137 , class P138 , class P139 , class P140 , class P141 , class P142 , class P143 , class P144 , class P145 , class P146 , class P147 , class P148 , class P149 , class P150 , class P151 , class P152 , class P153 , class P154 , class P155 , class P156 , class P157 , class P158 , class P159 , class P160 , class P161 , class P162 , class P163 , class P164 , class P165 , class P166 , class P167 , class P168 , class P169 , class P170 , class P171 , class P172 , class P173 , class P174 , class P175 , class P176 , class P177 , class P178 , class P179 , class P180 , class P181 , class P182 , class P183 , class P184 , class P185 , class P186 , class P187 , class P188 , class P189 , class P190 , class P191 , class P192 , class P193 , class P194 , class P195 , class P196 , class P197 , class P198 , class T> struct push_back<boost::type_of::vector199< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , P172 , P173 , P174 , P175 , P176 , P177 , P178 , P179 , P180 , P181 , P182 , P183 , P184 , P185 , P186 , P187 , P188 , P189 , P190 , P191 , P192 , P193 , P194 , P195 , P196 , P197 , P198>, T> { typedef boost::type_of::vector200< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , P49 , P50 , P51 , P52 , P53 , P54 , P55 , P56 , P57 , P58 , P59 , P60 , P61 , P62 , P63 , P64 , P65 , P66 , P67 , P68 , P69 , P70 , P71 , P72 , P73 , P74 , P75 , P76 , P77 , P78 , P79 , P80 , P81 , P82 , P83 , P84 , P85 , P86 , P87 , P88 , P89 , P90 , P91 , P92 , P93 , P94 , P95 , P96 , P97 , P98 , P99 , P100 , P101 , P102 , P103 , P104 , P105 , P106 , P107 , P108 , P109 , P110 , P111 , P112 , P113 , P114 , P115 , P116 , P117 , P118 , P119 , P120 , P121 , P122 , P123 , P124 , P125 , P126 , P127 , P128 , P129 , P130 , P131 , P132 , P133 , P134 , P135 , P136 , P137 , P138 , P139 , P140 , P141 , P142 , P143 , P144 , P145 , P146 , P147 , P148 , P149 , P150 , P151 , P152 , P153 , P154 , P155 , P156 , P157 , P158 , P159 , P160 , P161 , P162 , P163 , P164 , P165 , P166 , P167 , P168 , P169 , P170 , P171 , P172 , P173 , P174 , P175 , P176 , P177 , P178 , P179 , P180 , P181 , P182 , P183 , P184 , P185 , P186 , P187 , P188 , P189 , P190 , P191 , P192 , P193 , P194 , P195 , P196 , P197 , P198 , T > type; };
+}}
diff --git a/boost/boost/typeof/vector50.hpp b/boost/boost/typeof/vector50.hpp
new file mode 100644
index 00000000000..3b265d413ba
--- /dev/null
+++ b/boost/boost/typeof/vector50.hpp
@@ -0,0 +1,171 @@
+
+// Copyright (C) 2005 Arkadiy Vertleyb
+// Copyright (C) 2005 Peder Holt
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+// Preprocessed code, do not edit manually !
+
+
+namespace boost { namespace type_of {
+ template<class V, class Increase_BOOST_TYPEOF_LIMIT_SIZE> struct v_iter; // not defined
+ template<class V> struct v_iter<V, mpl::int_<0> > { typedef typename V::item0 type; typedef v_iter<V, mpl::int_<0 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<1> > { typedef typename V::item1 type; typedef v_iter<V, mpl::int_<1 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<2> > { typedef typename V::item2 type; typedef v_iter<V, mpl::int_<2 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<3> > { typedef typename V::item3 type; typedef v_iter<V, mpl::int_<3 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<4> > { typedef typename V::item4 type; typedef v_iter<V, mpl::int_<4 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<5> > { typedef typename V::item5 type; typedef v_iter<V, mpl::int_<5 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<6> > { typedef typename V::item6 type; typedef v_iter<V, mpl::int_<6 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<7> > { typedef typename V::item7 type; typedef v_iter<V, mpl::int_<7 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<8> > { typedef typename V::item8 type; typedef v_iter<V, mpl::int_<8 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<9> > { typedef typename V::item9 type; typedef v_iter<V, mpl::int_<9 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<10> > { typedef typename V::item10 type; typedef v_iter<V, mpl::int_<10 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<11> > { typedef typename V::item11 type; typedef v_iter<V, mpl::int_<11 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<12> > { typedef typename V::item12 type; typedef v_iter<V, mpl::int_<12 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<13> > { typedef typename V::item13 type; typedef v_iter<V, mpl::int_<13 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<14> > { typedef typename V::item14 type; typedef v_iter<V, mpl::int_<14 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<15> > { typedef typename V::item15 type; typedef v_iter<V, mpl::int_<15 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<16> > { typedef typename V::item16 type; typedef v_iter<V, mpl::int_<16 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<17> > { typedef typename V::item17 type; typedef v_iter<V, mpl::int_<17 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<18> > { typedef typename V::item18 type; typedef v_iter<V, mpl::int_<18 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<19> > { typedef typename V::item19 type; typedef v_iter<V, mpl::int_<19 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<20> > { typedef typename V::item20 type; typedef v_iter<V, mpl::int_<20 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<21> > { typedef typename V::item21 type; typedef v_iter<V, mpl::int_<21 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<22> > { typedef typename V::item22 type; typedef v_iter<V, mpl::int_<22 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<23> > { typedef typename V::item23 type; typedef v_iter<V, mpl::int_<23 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<24> > { typedef typename V::item24 type; typedef v_iter<V, mpl::int_<24 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<25> > { typedef typename V::item25 type; typedef v_iter<V, mpl::int_<25 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<26> > { typedef typename V::item26 type; typedef v_iter<V, mpl::int_<26 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<27> > { typedef typename V::item27 type; typedef v_iter<V, mpl::int_<27 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<28> > { typedef typename V::item28 type; typedef v_iter<V, mpl::int_<28 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<29> > { typedef typename V::item29 type; typedef v_iter<V, mpl::int_<29 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<30> > { typedef typename V::item30 type; typedef v_iter<V, mpl::int_<30 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<31> > { typedef typename V::item31 type; typedef v_iter<V, mpl::int_<31 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<32> > { typedef typename V::item32 type; typedef v_iter<V, mpl::int_<32 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<33> > { typedef typename V::item33 type; typedef v_iter<V, mpl::int_<33 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<34> > { typedef typename V::item34 type; typedef v_iter<V, mpl::int_<34 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<35> > { typedef typename V::item35 type; typedef v_iter<V, mpl::int_<35 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<36> > { typedef typename V::item36 type; typedef v_iter<V, mpl::int_<36 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<37> > { typedef typename V::item37 type; typedef v_iter<V, mpl::int_<37 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<38> > { typedef typename V::item38 type; typedef v_iter<V, mpl::int_<38 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<39> > { typedef typename V::item39 type; typedef v_iter<V, mpl::int_<39 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<40> > { typedef typename V::item40 type; typedef v_iter<V, mpl::int_<40 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<41> > { typedef typename V::item41 type; typedef v_iter<V, mpl::int_<41 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<42> > { typedef typename V::item42 type; typedef v_iter<V, mpl::int_<42 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<43> > { typedef typename V::item43 type; typedef v_iter<V, mpl::int_<43 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<44> > { typedef typename V::item44 type; typedef v_iter<V, mpl::int_<44 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<45> > { typedef typename V::item45 type; typedef v_iter<V, mpl::int_<45 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<46> > { typedef typename V::item46 type; typedef v_iter<V, mpl::int_<46 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<47> > { typedef typename V::item47 type; typedef v_iter<V, mpl::int_<47 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<48> > { typedef typename V::item48 type; typedef v_iter<V, mpl::int_<48 + 1> > next; };
+ template<class V> struct v_iter<V, mpl::int_<49> > { typedef typename V::item49 type; typedef v_iter<V, mpl::int_<49 + 1> > next; };
+}}
+namespace boost { namespace type_of {
+ template< class T = void> struct vector0 { typedef v_iter<vector0, boost::mpl::int_<0> > begin; typedef mpl::int_<1> item0; typedef mpl::int_<1> item1; typedef mpl::int_<1> item2; typedef mpl::int_<1> item3; typedef mpl::int_<1> item4; typedef mpl::int_<1> item5; typedef mpl::int_<1> item6; typedef mpl::int_<1> item7; typedef mpl::int_<1> item8; typedef mpl::int_<1> item9; typedef mpl::int_<1> item10; typedef mpl::int_<1> item11; typedef mpl::int_<1> item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; };
+ template< class P0 > struct vector1 { typedef v_iter<vector1, boost::mpl::int_<0> > begin; typedef P0 item0; typedef mpl::int_<1> item1; typedef mpl::int_<1> item2; typedef mpl::int_<1> item3; typedef mpl::int_<1> item4; typedef mpl::int_<1> item5; typedef mpl::int_<1> item6; typedef mpl::int_<1> item7; typedef mpl::int_<1> item8; typedef mpl::int_<1> item9; typedef mpl::int_<1> item10; typedef mpl::int_<1> item11; typedef mpl::int_<1> item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; };
+ template< class P0 , class P1 > struct vector2 { typedef v_iter<vector2, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef mpl::int_<1> item2; typedef mpl::int_<1> item3; typedef mpl::int_<1> item4; typedef mpl::int_<1> item5; typedef mpl::int_<1> item6; typedef mpl::int_<1> item7; typedef mpl::int_<1> item8; typedef mpl::int_<1> item9; typedef mpl::int_<1> item10; typedef mpl::int_<1> item11; typedef mpl::int_<1> item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; };
+ template< class P0 , class P1 , class P2 > struct vector3 { typedef v_iter<vector3, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef mpl::int_<1> item3; typedef mpl::int_<1> item4; typedef mpl::int_<1> item5; typedef mpl::int_<1> item6; typedef mpl::int_<1> item7; typedef mpl::int_<1> item8; typedef mpl::int_<1> item9; typedef mpl::int_<1> item10; typedef mpl::int_<1> item11; typedef mpl::int_<1> item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; };
+ template< class P0 , class P1 , class P2 , class P3 > struct vector4 { typedef v_iter<vector4, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef mpl::int_<1> item4; typedef mpl::int_<1> item5; typedef mpl::int_<1> item6; typedef mpl::int_<1> item7; typedef mpl::int_<1> item8; typedef mpl::int_<1> item9; typedef mpl::int_<1> item10; typedef mpl::int_<1> item11; typedef mpl::int_<1> item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 > struct vector5 { typedef v_iter<vector5, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef mpl::int_<1> item5; typedef mpl::int_<1> item6; typedef mpl::int_<1> item7; typedef mpl::int_<1> item8; typedef mpl::int_<1> item9; typedef mpl::int_<1> item10; typedef mpl::int_<1> item11; typedef mpl::int_<1> item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 > struct vector6 { typedef v_iter<vector6, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef mpl::int_<1> item6; typedef mpl::int_<1> item7; typedef mpl::int_<1> item8; typedef mpl::int_<1> item9; typedef mpl::int_<1> item10; typedef mpl::int_<1> item11; typedef mpl::int_<1> item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 > struct vector7 { typedef v_iter<vector7, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef mpl::int_<1> item7; typedef mpl::int_<1> item8; typedef mpl::int_<1> item9; typedef mpl::int_<1> item10; typedef mpl::int_<1> item11; typedef mpl::int_<1> item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 > struct vector8 { typedef v_iter<vector8, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef mpl::int_<1> item8; typedef mpl::int_<1> item9; typedef mpl::int_<1> item10; typedef mpl::int_<1> item11; typedef mpl::int_<1> item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 > struct vector9 { typedef v_iter<vector9, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef mpl::int_<1> item9; typedef mpl::int_<1> item10; typedef mpl::int_<1> item11; typedef mpl::int_<1> item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 > struct vector10 { typedef v_iter<vector10, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef mpl::int_<1> item10; typedef mpl::int_<1> item11; typedef mpl::int_<1> item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 > struct vector11 { typedef v_iter<vector11, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef mpl::int_<1> item11; typedef mpl::int_<1> item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 > struct vector12 { typedef v_iter<vector12, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef mpl::int_<1> item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 > struct vector13 { typedef v_iter<vector13, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef mpl::int_<1> item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 > struct vector14 { typedef v_iter<vector14, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef mpl::int_<1> item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 > struct vector15 { typedef v_iter<vector15, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef mpl::int_<1> item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 > struct vector16 { typedef v_iter<vector16, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef mpl::int_<1> item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 > struct vector17 { typedef v_iter<vector17, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef mpl::int_<1> item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 > struct vector18 { typedef v_iter<vector18, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef mpl::int_<1> item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 > struct vector19 { typedef v_iter<vector19, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef mpl::int_<1> item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 > struct vector20 { typedef v_iter<vector20, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef mpl::int_<1> item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 > struct vector21 { typedef v_iter<vector21, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef mpl::int_<1> item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 > struct vector22 { typedef v_iter<vector22, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef mpl::int_<1> item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 > struct vector23 { typedef v_iter<vector23, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef mpl::int_<1> item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 > struct vector24 { typedef v_iter<vector24, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef mpl::int_<1> item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 > struct vector25 { typedef v_iter<vector25, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef mpl::int_<1> item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 > struct vector26 { typedef v_iter<vector26, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef mpl::int_<1> item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 > struct vector27 { typedef v_iter<vector27, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef mpl::int_<1> item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 > struct vector28 { typedef v_iter<vector28, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef mpl::int_<1> item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 > struct vector29 { typedef v_iter<vector29, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef mpl::int_<1> item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 > struct vector30 { typedef v_iter<vector30, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef mpl::int_<1> item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 > struct vector31 { typedef v_iter<vector31, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef mpl::int_<1> item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 > struct vector32 { typedef v_iter<vector32, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef mpl::int_<1> item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 > struct vector33 { typedef v_iter<vector33, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef mpl::int_<1> item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 > struct vector34 { typedef v_iter<vector34, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef mpl::int_<1> item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 > struct vector35 { typedef v_iter<vector35, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef mpl::int_<1> item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 > struct vector36 { typedef v_iter<vector36, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef mpl::int_<1> item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 > struct vector37 { typedef v_iter<vector37, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef mpl::int_<1> item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 > struct vector38 { typedef v_iter<vector38, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef mpl::int_<1> item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 > struct vector39 { typedef v_iter<vector39, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef mpl::int_<1> item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 > struct vector40 { typedef v_iter<vector40, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef mpl::int_<1> item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 > struct vector41 { typedef v_iter<vector41, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef mpl::int_<1> item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 > struct vector42 { typedef v_iter<vector42, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef mpl::int_<1> item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 > struct vector43 { typedef v_iter<vector43, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef mpl::int_<1> item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 > struct vector44 { typedef v_iter<vector44, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef mpl::int_<1> item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 > struct vector45 { typedef v_iter<vector45, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef mpl::int_<1> item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 > struct vector46 { typedef v_iter<vector46, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef mpl::int_<1> item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 > struct vector47 { typedef v_iter<vector47, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef mpl::int_<1> item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 > struct vector48 { typedef v_iter<vector48, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef mpl::int_<1> item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 > struct vector49 { typedef v_iter<vector49, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef mpl::int_<1> item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class P49 > struct vector50 { typedef v_iter<vector50, boost::mpl::int_<0> > begin; typedef P0 item0; typedef P1 item1; typedef P2 item2; typedef P3 item3; typedef P4 item4; typedef P5 item5; typedef P6 item6; typedef P7 item7; typedef P8 item8; typedef P9 item9; typedef P10 item10; typedef P11 item11; typedef P12 item12; typedef P13 item13; typedef P14 item14; typedef P15 item15; typedef P16 item16; typedef P17 item17; typedef P18 item18; typedef P19 item19; typedef P20 item20; typedef P21 item21; typedef P22 item22; typedef P23 item23; typedef P24 item24; typedef P25 item25; typedef P26 item26; typedef P27 item27; typedef P28 item28; typedef P29 item29; typedef P30 item30; typedef P31 item31; typedef P32 item32; typedef P33 item33; typedef P34 item34; typedef P35 item35; typedef P36 item36; typedef P37 item37; typedef P38 item38; typedef P39 item39; typedef P40 item40; typedef P41 item41; typedef P42 item42; typedef P43 item43; typedef P44 item44; typedef P45 item45; typedef P46 item46; typedef P47 item47; typedef P48 item48; typedef P49 item49; typedef mpl::int_<1> item50; typedef mpl::int_<1> item51; typedef mpl::int_<1> item52; typedef mpl::int_<1> item53; typedef mpl::int_<1> item54; typedef mpl::int_<1> item55; typedef mpl::int_<1> item56; typedef mpl::int_<1> item57; typedef mpl::int_<1> item58; typedef mpl::int_<1> item59; typedef mpl::int_<1> item60; typedef mpl::int_<1> item61; typedef mpl::int_<1> item62; typedef mpl::int_<1> item63; typedef mpl::int_<1> item64; typedef mpl::int_<1> item65; typedef mpl::int_<1> item66; typedef mpl::int_<1> item67; typedef mpl::int_<1> item68; typedef mpl::int_<1> item69; typedef mpl::int_<1> item70; typedef mpl::int_<1> item71; typedef mpl::int_<1> item72; typedef mpl::int_<1> item73; typedef mpl::int_<1> item74; typedef mpl::int_<1> item75; typedef mpl::int_<1> item76; typedef mpl::int_<1> item77; typedef mpl::int_<1> item78; typedef mpl::int_<1> item79; typedef mpl::int_<1> item80; typedef mpl::int_<1> item81; typedef mpl::int_<1> item82; typedef mpl::int_<1> item83; typedef mpl::int_<1> item84; typedef mpl::int_<1> item85; typedef mpl::int_<1> item86; typedef mpl::int_<1> item87; typedef mpl::int_<1> item88; typedef mpl::int_<1> item89; typedef mpl::int_<1> item90; typedef mpl::int_<1> item91; typedef mpl::int_<1> item92; typedef mpl::int_<1> item93; typedef mpl::int_<1> item94; typedef mpl::int_<1> item95; typedef mpl::int_<1> item96; typedef mpl::int_<1> item97; typedef mpl::int_<1> item98; typedef mpl::int_<1> item99; };
+}}
+namespace boost { namespace type_of {
+ template<class V, class T> struct push_back {
+ typedef V type;
+ };
+ template< class T> struct push_back<boost::type_of::vector0<>, T> { typedef boost::type_of::vector1< T > type; };
+ template< class P0 , class T> struct push_back<boost::type_of::vector1< P0>, T> { typedef boost::type_of::vector2< P0 , T > type; };
+ template< class P0 , class P1 , class T> struct push_back<boost::type_of::vector2< P0 , P1>, T> { typedef boost::type_of::vector3< P0 , P1 , T > type; };
+ template< class P0 , class P1 , class P2 , class T> struct push_back<boost::type_of::vector3< P0 , P1 , P2>, T> { typedef boost::type_of::vector4< P0 , P1 , P2 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class T> struct push_back<boost::type_of::vector4< P0 , P1 , P2 , P3>, T> { typedef boost::type_of::vector5< P0 , P1 , P2 , P3 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class T> struct push_back<boost::type_of::vector5< P0 , P1 , P2 , P3 , P4>, T> { typedef boost::type_of::vector6< P0 , P1 , P2 , P3 , P4 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class T> struct push_back<boost::type_of::vector6< P0 , P1 , P2 , P3 , P4 , P5>, T> { typedef boost::type_of::vector7< P0 , P1 , P2 , P3 , P4 , P5 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class T> struct push_back<boost::type_of::vector7< P0 , P1 , P2 , P3 , P4 , P5 , P6>, T> { typedef boost::type_of::vector8< P0 , P1 , P2 , P3 , P4 , P5 , P6 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class T> struct push_back<boost::type_of::vector8< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7>, T> { typedef boost::type_of::vector9< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class T> struct push_back<boost::type_of::vector9< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8>, T> { typedef boost::type_of::vector10< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class T> struct push_back<boost::type_of::vector10< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9>, T> { typedef boost::type_of::vector11< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class T> struct push_back<boost::type_of::vector11< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10>, T> { typedef boost::type_of::vector12< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class T> struct push_back<boost::type_of::vector12< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11>, T> { typedef boost::type_of::vector13< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class T> struct push_back<boost::type_of::vector13< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12>, T> { typedef boost::type_of::vector14< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class T> struct push_back<boost::type_of::vector14< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13>, T> { typedef boost::type_of::vector15< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class T> struct push_back<boost::type_of::vector15< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14>, T> { typedef boost::type_of::vector16< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class T> struct push_back<boost::type_of::vector16< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15>, T> { typedef boost::type_of::vector17< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class T> struct push_back<boost::type_of::vector17< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16>, T> { typedef boost::type_of::vector18< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class T> struct push_back<boost::type_of::vector18< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17>, T> { typedef boost::type_of::vector19< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class T> struct push_back<boost::type_of::vector19< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18>, T> { typedef boost::type_of::vector20< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class T> struct push_back<boost::type_of::vector20< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19>, T> { typedef boost::type_of::vector21< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class T> struct push_back<boost::type_of::vector21< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20>, T> { typedef boost::type_of::vector22< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class T> struct push_back<boost::type_of::vector22< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21>, T> { typedef boost::type_of::vector23< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class T> struct push_back<boost::type_of::vector23< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22>, T> { typedef boost::type_of::vector24< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class T> struct push_back<boost::type_of::vector24< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23>, T> { typedef boost::type_of::vector25< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class T> struct push_back<boost::type_of::vector25< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24>, T> { typedef boost::type_of::vector26< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class T> struct push_back<boost::type_of::vector26< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25>, T> { typedef boost::type_of::vector27< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class T> struct push_back<boost::type_of::vector27< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26>, T> { typedef boost::type_of::vector28< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class T> struct push_back<boost::type_of::vector28< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27>, T> { typedef boost::type_of::vector29< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class T> struct push_back<boost::type_of::vector29< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28>, T> { typedef boost::type_of::vector30< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class T> struct push_back<boost::type_of::vector30< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29>, T> { typedef boost::type_of::vector31< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class T> struct push_back<boost::type_of::vector31< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30>, T> { typedef boost::type_of::vector32< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class T> struct push_back<boost::type_of::vector32< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31>, T> { typedef boost::type_of::vector33< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class T> struct push_back<boost::type_of::vector33< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32>, T> { typedef boost::type_of::vector34< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class T> struct push_back<boost::type_of::vector34< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33>, T> { typedef boost::type_of::vector35< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class T> struct push_back<boost::type_of::vector35< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34>, T> { typedef boost::type_of::vector36< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class T> struct push_back<boost::type_of::vector36< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35>, T> { typedef boost::type_of::vector37< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class T> struct push_back<boost::type_of::vector37< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36>, T> { typedef boost::type_of::vector38< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class T> struct push_back<boost::type_of::vector38< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37>, T> { typedef boost::type_of::vector39< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class T> struct push_back<boost::type_of::vector39< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38>, T> { typedef boost::type_of::vector40< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class T> struct push_back<boost::type_of::vector40< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39>, T> { typedef boost::type_of::vector41< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class T> struct push_back<boost::type_of::vector41< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40>, T> { typedef boost::type_of::vector42< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class T> struct push_back<boost::type_of::vector42< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41>, T> { typedef boost::type_of::vector43< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class T> struct push_back<boost::type_of::vector43< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42>, T> { typedef boost::type_of::vector44< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class T> struct push_back<boost::type_of::vector44< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43>, T> { typedef boost::type_of::vector45< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class T> struct push_back<boost::type_of::vector45< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44>, T> { typedef boost::type_of::vector46< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class T> struct push_back<boost::type_of::vector46< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45>, T> { typedef boost::type_of::vector47< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class T> struct push_back<boost::type_of::vector47< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46>, T> { typedef boost::type_of::vector48< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class T> struct push_back<boost::type_of::vector48< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47>, T> { typedef boost::type_of::vector49< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , T > type; };
+ template< class P0 , class P1 , class P2 , class P3 , class P4 , class P5 , class P6 , class P7 , class P8 , class P9 , class P10 , class P11 , class P12 , class P13 , class P14 , class P15 , class P16 , class P17 , class P18 , class P19 , class P20 , class P21 , class P22 , class P23 , class P24 , class P25 , class P26 , class P27 , class P28 , class P29 , class P30 , class P31 , class P32 , class P33 , class P34 , class P35 , class P36 , class P37 , class P38 , class P39 , class P40 , class P41 , class P42 , class P43 , class P44 , class P45 , class P46 , class P47 , class P48 , class T> struct push_back<boost::type_of::vector49< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48>, T> { typedef boost::type_of::vector50< P0 , P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 , P9 , P10 , P11 , P12 , P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21 , P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31 , P32 , P33 , P34 , P35 , P36 , P37 , P38 , P39 , P40 , P41 , P42 , P43 , P44 , P45 , P46 , P47 , P48 , T > type; };
+}}
diff --git a/boost/boost/utility.hpp b/boost/boost/utility.hpp
new file mode 100644
index 00000000000..211d89d67ef
--- /dev/null
+++ b/boost/boost/utility.hpp
@@ -0,0 +1,19 @@
+// Boost utility.hpp header file -------------------------------------------//
+
+// Copyright 1999-2003 Aleksey Gurtovoy. Use, modification, and distribution are
+// subject to the Boost Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or a copy at <http://www.boost.org/LICENSE_1_0.txt>.)
+
+// See <http://www.boost.org/libs/utility/> for the library's home page.
+
+#ifndef BOOST_UTILITY_HPP
+#define BOOST_UTILITY_HPP
+
+#include <boost/utility/addressof.hpp>
+#include <boost/utility/base_from_member.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/checked_delete.hpp>
+#include <boost/next_prior.hpp>
+#include <boost/noncopyable.hpp>
+
+#endif // BOOST_UTILITY_HPP
diff --git a/boost/boost/utility/addressof.hpp b/boost/boost/utility/addressof.hpp
new file mode 100644
index 00000000000..76294886ad5
--- /dev/null
+++ b/boost/boost/utility/addressof.hpp
@@ -0,0 +1,58 @@
+// Copyright (C) 2002 Brad King (brad.king@kitware.com)
+// Douglas Gregor (gregod@cs.rpi.edu)
+// Peter Dimov
+//
+// 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)
+
+// For more information, see http://www.boost.org
+
+#ifndef BOOST_UTILITY_ADDRESSOF_HPP
+# define BOOST_UTILITY_ADDRESSOF_HPP
+
+# include <boost/config.hpp>
+# include <boost/detail/workaround.hpp>
+
+namespace boost {
+
+// Do not make addressof() inline. Breaks MSVC 7. (Peter Dimov)
+
+// VC7 strips const from nested classes unless we add indirection here
+# if BOOST_WORKAROUND(BOOST_MSVC, == 1300)
+
+template<class T> struct _addp
+{
+ typedef T * type;
+};
+
+template <typename T> typename _addp<T>::type
+
+# else
+template <typename T> T*
+# endif
+addressof(T& v)
+{
+ return reinterpret_cast<T*>(
+ &const_cast<char&>(reinterpret_cast<const volatile char &>(v)));
+}
+
+// Borland doesn't like casting an array reference to a char reference
+// but these overloads work around the problem.
+# if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+template<typename T,std::size_t N>
+T (*addressof(T (&t)[N]))[N]
+{
+ return reinterpret_cast<T(*)[N]>(&t);
+}
+
+template<typename T,std::size_t N>
+const T (*addressof(const T (&t)[N]))[N]
+{
+ return reinterpret_cast<const T(*)[N]>(&t);
+}
+# endif
+
+}
+
+#endif // BOOST_UTILITY_ADDRESSOF_HPP
diff --git a/boost/boost/utility/base_from_member.hpp b/boost/boost/utility/base_from_member.hpp
new file mode 100644
index 00000000000..04aabb59e26
--- /dev/null
+++ b/boost/boost/utility/base_from_member.hpp
@@ -0,0 +1,87 @@
+// boost utility/base_from_member.hpp header file --------------------------//
+
+// Copyright 2001, 2003, 2004 Daryle Walker. Use, modification, and
+// distribution are subject to the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or a copy at
+// <http://www.boost.org/LICENSE_1_0.txt>.)
+
+// See <http://www.boost.org/libs/utility/> for the library's home page.
+
+#ifndef BOOST_UTILITY_BASE_FROM_MEMBER_HPP
+#define BOOST_UTILITY_BASE_FROM_MEMBER_HPP
+
+#include <boost/preprocessor/arithmetic/inc.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+
+
+// Base-from-member arity configuration macro ------------------------------//
+
+// The following macro determines how many arguments will be in the largest
+// constructor template of base_from_member. Constructor templates will be
+// generated from one argument to this maximum. Code from other files can read
+// this number if they need to always match the exact maximum base_from_member
+// uses. The maximum constructor length can be changed by overriding the
+// #defined constant. Make sure to apply the override, if any, for all source
+// files during project compiling for consistency.
+
+// Contributed by Jonathan Turkanis
+
+#ifndef BOOST_BASE_FROM_MEMBER_MAX_ARITY
+#define BOOST_BASE_FROM_MEMBER_MAX_ARITY 10
+#endif
+
+
+// An iteration of a constructor template for base_from_member -------------//
+
+// A macro that should expand to:
+// template < typename T1, ..., typename Tn >
+// base_from_member( T1 x1, ..., Tn xn )
+// : member( x1, ..., xn )
+// {}
+// This macro should only persist within this file.
+
+#define BOOST_PRIVATE_CTR_DEF( z, n, data ) \
+ template < BOOST_PP_ENUM_PARAMS(n, typename T) > \
+ explicit base_from_member( BOOST_PP_ENUM_BINARY_PARAMS(n, T, x) ) \
+ : member( BOOST_PP_ENUM_PARAMS(n, x) ) \
+ {} \
+ /**/
+
+
+namespace boost
+{
+
+// Base-from-member class template -----------------------------------------//
+
+// Helper to initialize a base object so a derived class can use this
+// object in the initialization of another base class. Used by
+// Dietmar Kuehl from ideas by Ron Klatcho to solve the problem of a
+// base class needing to be initialized by a member.
+
+// Contributed by Daryle Walker
+
+template < typename MemberType, int UniqueID = 0 >
+class base_from_member
+{
+protected:
+ MemberType member;
+
+ base_from_member()
+ : member()
+ {}
+
+ BOOST_PP_REPEAT_FROM_TO( 1, BOOST_PP_INC(BOOST_BASE_FROM_MEMBER_MAX_ARITY),
+ BOOST_PRIVATE_CTR_DEF, _ )
+
+}; // boost::base_from_member
+
+} // namespace boost
+
+
+// Undo any private macros
+#undef BOOST_PRIVATE_CTR_DEF
+
+
+#endif // BOOST_UTILITY_BASE_FROM_MEMBER_HPP
diff --git a/boost/boost/utility/compare_pointees.hpp b/boost/boost/utility/compare_pointees.hpp
new file mode 100644
index 00000000000..e6888a6efa3
--- /dev/null
+++ b/boost/boost/utility/compare_pointees.hpp
@@ -0,0 +1,68 @@
+// Copyright (C) 2003, Fernando Luis Cacciola Carballal.
+//
+// Use, modification, and distribution is 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)
+//
+// See http://www.boost.org/lib/optional for documentation.
+//
+// You are welcome to contact the author at:
+// fernando_cacciola@hotmail.com
+//
+#ifndef BOOST_UTILITY_COMPARE_POINTEES_25AGO2003_HPP
+#define BOOST_UTILITY_COMPARE_POINTEES_25AGO2003_HPP
+
+#include<functional>
+
+namespace boost {
+
+// template<class OP> bool equal_pointees(OP const& x, OP const& y);
+// template<class OP> struct equal_pointees_t;
+//
+// Being OP a model of OptionalPointee (either a pointer or an optional):
+//
+// If both x and y have valid pointees, returns the result of (*x == *y)
+// If only one has a valid pointee, returns false.
+// If none have valid pointees, returns true.
+// No-throw
+template<class OptionalPointee>
+inline
+bool equal_pointees ( OptionalPointee const& x, OptionalPointee const& y )
+{
+ return (!x) != (!y) ? false : ( !x ? true : (*x) == (*y) ) ;
+}
+
+template<class OptionalPointee>
+struct equal_pointees_t : std::binary_function<OptionalPointee,OptionalPointee,bool>
+{
+ bool operator() ( OptionalPointee const& x, OptionalPointee const& y ) const
+ { return equal_pointees(x,y) ; }
+} ;
+
+// template<class OP> bool less_pointees(OP const& x, OP const& y);
+// template<class OP> struct less_pointees_t;
+//
+// Being OP a model of OptionalPointee (either a pointer or an optional):
+//
+// If y has not a valid pointee, returns false.
+// ElseIf x has not a valid pointee, returns true.
+// ElseIf both x and y have valid pointees, returns the result of (*x < *y)
+// No-throw
+template<class OptionalPointee>
+inline
+bool less_pointees ( OptionalPointee const& x, OptionalPointee const& y )
+{
+ return !y ? false : ( !x ? true : (*x) < (*y) ) ;
+}
+
+template<class OptionalPointee>
+struct less_pointees_t : std::binary_function<OptionalPointee,OptionalPointee,bool>
+{
+ bool operator() ( OptionalPointee const& x, OptionalPointee const& y ) const
+ { return less_pointees(x,y) ; }
+} ;
+
+} // namespace boost
+
+#endif
+
diff --git a/boost/boost/utility/detail/in_place_factory_prefix.hpp b/boost/boost/utility/detail/in_place_factory_prefix.hpp
new file mode 100644
index 00000000000..092083e8f84
--- /dev/null
+++ b/boost/boost/utility/detail/in_place_factory_prefix.hpp
@@ -0,0 +1,33 @@
+// Copyright (C) 2003, Fernando Luis Cacciola Carballal.
+//
+// Use, modification, and distribution is 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)
+//
+// See http://www.boost.org/lib/optional for documentation.
+//
+// You are welcome to contact the author at:
+// fernando_cacciola@hotmail.com
+//
+#ifndef BOOST_UTILITY_DETAIL_INPLACE_FACTORY_PREFIX_25AGO2003_HPP
+#define BOOST_UTILITY_DETAIL_INPLACE_FACTORY_PREFIX_25AGO2003_HPP
+
+#include <boost/config.hpp>
+#include <boost/preprocessor/repetition/enum.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/arithmetic/inc.hpp>
+#include <boost/preprocessor/punctuation/paren.hpp>
+#include <boost/preprocessor/facilities/empty.hpp>
+
+#define BOOST_DEFINE_INPLACE_FACTORY_CLASS_MEMBER_INIT(z,n,_) BOOST_PP_CAT(m_a,n) BOOST_PP_LPAREN() BOOST_PP_CAT(a,n) BOOST_PP_RPAREN()
+#define BOOST_DEFINE_INPLACE_FACTORY_CLASS_MEMBER_DECL(z,n,_) BOOST_PP_CAT(A,n) const& BOOST_PP_CAT(m_a,n);
+#define BOOST_DEFINE_INPLACE_FACTORY_CLASS_MEMBER_ARG(z,n,_) BOOST_PP_CAT(m_a,n)
+
+#define BOOST_MAX_INPLACE_FACTORY_ARITY 10
+
+#undef BOOST_UTILITY_DETAIL_INPLACE_FACTORY_SUFFIX_25AGO2003_HPP
+
+#endif
+
diff --git a/boost/boost/utility/detail/in_place_factory_suffix.hpp b/boost/boost/utility/detail/in_place_factory_suffix.hpp
new file mode 100644
index 00000000000..3efe221e74a
--- /dev/null
+++ b/boost/boost/utility/detail/in_place_factory_suffix.hpp
@@ -0,0 +1,23 @@
+// Copyright (C) 2003, Fernando Luis Cacciola Carballal.
+//
+// Use, modification, and distribution is 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)
+//
+// See http://www.boost.org/lib/optional for documentation.
+//
+// You are welcome to contact the author at:
+// fernando_cacciola@hotmail.com
+//
+#ifndef BOOST_UTILITY_DETAIL_INPLACE_FACTORY_SUFFIX_25AGO2003_HPP
+#define BOOST_UTILITY_DETAIL_INPLACE_FACTORY_SUFFIX_25AGO2003_HPP
+
+#undef BOOST_DEFINE_INPLACE_FACTORY_CLASS_MEMBER_INIT
+#undef BOOST_DEFINE_INPLACE_FACTORY_CLASS_MEMBER_DECL
+#undef BOOST_DEFINE_INPLACE_FACTORY_CLASS_MEMBER_ARG
+#undef BOOST_MAX_INPLACE_FACTORY_ARITY
+
+#undef BOOST_UTILITY_DETAIL_INPLACE_FACTORY_PREFIX_25AGO2003_HPP
+
+#endif
+
diff --git a/boost/boost/utility/detail/result_of_iterate.hpp b/boost/boost/utility/detail/result_of_iterate.hpp
new file mode 100644
index 00000000000..5aa3a5ccda4
--- /dev/null
+++ b/boost/boost/utility/detail/result_of_iterate.hpp
@@ -0,0 +1,86 @@
+// Boost result_of library
+
+// Copyright Douglas Gregor 2004. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org/libs/utility
+#if !defined(BOOST_PP_IS_ITERATING)
+# error Boost result_of - do not include this file!
+#endif
+
+// CWPro8 requires an argument in a function type specialization
+#if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3002)) && BOOST_PP_ITERATION() == 0
+# define BOOST_RESULT_OF_ARGS void
+#else
+# define BOOST_RESULT_OF_ARGS BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),T)
+#endif
+
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))
+template<typename F BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
+ BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),typename T)>
+struct result_of<F(BOOST_RESULT_OF_ARGS)>
+ : detail::result_of<F, F(BOOST_RESULT_OF_ARGS)> {};
+#endif
+
+namespace detail {
+
+template<typename R, typename FArgs BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
+ BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),typename T)>
+struct result_of<R (*)(BOOST_RESULT_OF_ARGS), FArgs>
+{
+ typedef R type;
+};
+
+template<typename R, typename FArgs BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
+ BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),typename T)>
+struct result_of<R (&)(BOOST_RESULT_OF_ARGS), FArgs>
+{
+ typedef R type;
+};
+
+#undef BOOST_RESULT_OF_ARGS
+
+#if BOOST_PP_ITERATION() > 1 && !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))
+template<typename R, typename FArgs BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
+ BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),typename T)>
+struct result_of<R (T0::*)
+ (BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_PP_ITERATION(),T)),
+ FArgs>
+{
+ typedef R type;
+};
+
+template<typename R, typename FArgs BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
+ BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),typename T)>
+struct result_of<R (T0::*)
+ (BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_PP_ITERATION(),T))
+ const,
+ FArgs>
+{
+ typedef R type;
+};
+
+template<typename R, typename FArgs BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
+ BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),typename T)>
+struct result_of<R (T0::*)
+ (BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_PP_ITERATION(),T))
+ volatile,
+ FArgs>
+{
+ typedef R type;
+};
+
+template<typename R, typename FArgs BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
+ BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),typename T)>
+struct result_of<R (T0::*)
+ (BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_PP_ITERATION(),T))
+ const volatile,
+ FArgs>
+{
+ typedef R type;
+};
+#endif
+
+}
diff --git a/boost/boost/utility/enable_if.hpp b/boost/boost/utility/enable_if.hpp
new file mode 100644
index 00000000000..c8b54c4cffd
--- /dev/null
+++ b/boost/boost/utility/enable_if.hpp
@@ -0,0 +1,119 @@
+// Boost enable_if library
+
+// Copyright 2003 © The Trustees of Indiana University.
+
+// Use, modification, and distribution is 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)
+
+// Authors: Jaakko Järvi (jajarvi at osl.iu.edu)
+// Jeremiah Willcock (jewillco at osl.iu.edu)
+// Andrew Lumsdaine (lums at osl.iu.edu)
+
+
+#ifndef BOOST_UTILITY_ENABLE_IF_HPP
+#define BOOST_UTILITY_ENABLE_IF_HPP
+
+#include "boost/config.hpp"
+
+// Even the definition of enable_if causes problems on some compilers,
+// so it's macroed out for all compilers that do not support SFINAE
+
+#ifndef BOOST_NO_SFINAE
+
+namespace boost
+{
+
+ template <bool B, class T = void>
+ struct enable_if_c {
+ typedef T type;
+ };
+
+ template <class T>
+ struct enable_if_c<false, T> {};
+
+ template <class Cond, class T = void>
+ struct enable_if : public enable_if_c<Cond::value, T> {};
+
+ template <bool B, class T>
+ struct lazy_enable_if_c {
+ typedef typename T::type type;
+ };
+
+ template <class T>
+ struct lazy_enable_if_c<false, T> {};
+
+ template <class Cond, class T>
+ struct lazy_enable_if : public lazy_enable_if_c<Cond::value, T> {};
+
+
+ template <bool B, class T = void>
+ struct disable_if_c {
+ typedef T type;
+ };
+
+ template <class T>
+ struct disable_if_c<true, T> {};
+
+ template <class Cond, class T = void>
+ struct disable_if : public disable_if_c<Cond::value, T> {};
+
+ template <bool B, class T>
+ struct lazy_disable_if_c {
+ typedef typename T::type type;
+ };
+
+ template <class T>
+ struct lazy_disable_if_c<true, T> {};
+
+ template <class Cond, class T>
+ struct lazy_disable_if : public lazy_disable_if_c<Cond::value, T> {};
+
+} // namespace boost
+
+#else
+
+namespace boost {
+
+ namespace detail { typedef void enable_if_default_T; }
+
+ template <typename T>
+ struct enable_if_does_not_work_on_this_compiler;
+
+ template <bool B, class T = detail::enable_if_default_T>
+ struct enable_if_c : enable_if_does_not_work_on_this_compiler<T>
+ { };
+
+ template <bool B, class T = detail::enable_if_default_T>
+ struct disable_if_c : enable_if_does_not_work_on_this_compiler<T>
+ { };
+
+ template <bool B, class T = detail::enable_if_default_T>
+ struct lazy_enable_if_c : enable_if_does_not_work_on_this_compiler<T>
+ { };
+
+ template <bool B, class T = detail::enable_if_default_T>
+ struct lazy_disable_if_c : enable_if_does_not_work_on_this_compiler<T>
+ { };
+
+ template <class Cond, class T = detail::enable_if_default_T>
+ struct enable_if : enable_if_does_not_work_on_this_compiler<T>
+ { };
+
+ template <class Cond, class T = detail::enable_if_default_T>
+ struct disable_if : enable_if_does_not_work_on_this_compiler<T>
+ { };
+
+ template <class Cond, class T = detail::enable_if_default_T>
+ struct lazy_enable_if : enable_if_does_not_work_on_this_compiler<T>
+ { };
+
+ template <class Cond, class T = detail::enable_if_default_T>
+ struct lazy_disable_if : enable_if_does_not_work_on_this_compiler<T>
+ { };
+
+} // namespace boost
+
+#endif // BOOST_NO_SFINAE
+
+#endif
diff --git a/boost/boost/utility/in_place_factory.hpp b/boost/boost/utility/in_place_factory.hpp
new file mode 100644
index 00000000000..612c9a3af61
--- /dev/null
+++ b/boost/boost/utility/in_place_factory.hpp
@@ -0,0 +1,58 @@
+// Copyright (C) 2003, Fernando Luis Cacciola Carballal.
+//
+// Use, modification, and distribution is 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)
+//
+// See http://www.boost.org/lib/optional for documentation.
+//
+// You are welcome to contact the author at:
+// fernando_cacciola@hotmail.com
+//
+#ifndef BOOST_UTILITY_INPLACE_FACTORY_25AGO2003_HPP
+#define BOOST_UTILITY_INPLACE_FACTORY_25AGO2003_HPP
+
+#include <boost/utility/detail/in_place_factory_prefix.hpp>
+
+#include <boost/type.hpp>
+
+namespace boost {
+
+class in_place_factory_base {} ;
+
+#define BOOST_DEFINE_INPLACE_FACTORY_CLASS(z,n,_) \
+template< BOOST_PP_ENUM_PARAMS(BOOST_PP_INC(n),class A) > \
+class BOOST_PP_CAT(in_place_factory, BOOST_PP_INC(n) ) : public in_place_factory_base \
+{ \
+public: \
+\
+ BOOST_PP_CAT(in_place_factory, BOOST_PP_INC(n) ) ( BOOST_PP_ENUM_BINARY_PARAMS(BOOST_PP_INC(n),A,const& a) ) \
+ : \
+ BOOST_PP_ENUM( BOOST_PP_INC(n), BOOST_DEFINE_INPLACE_FACTORY_CLASS_MEMBER_INIT, _ ) \
+ {} \
+\
+ template<class T> \
+ void apply ( void* address BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(T) ) const \
+ { \
+ new ( address ) T ( BOOST_PP_ENUM_PARAMS( BOOST_PP_INC(n), m_a ) ) ; \
+ } \
+\
+ BOOST_PP_REPEAT( BOOST_PP_INC(n), BOOST_DEFINE_INPLACE_FACTORY_CLASS_MEMBER_DECL, _) \
+} ; \
+\
+template< BOOST_PP_ENUM_PARAMS(BOOST_PP_INC(n),class A) > \
+BOOST_PP_CAT(in_place_factory, BOOST_PP_INC(n) ) < BOOST_PP_ENUM_PARAMS( BOOST_PP_INC(n), A ) > \
+in_place ( BOOST_PP_ENUM_BINARY_PARAMS(BOOST_PP_INC(n),A, const& a) ) \
+{ \
+ return BOOST_PP_CAT(in_place_factory, BOOST_PP_INC(n) ) < BOOST_PP_ENUM_PARAMS( BOOST_PP_INC(n), A ) > \
+ ( BOOST_PP_ENUM_PARAMS( BOOST_PP_INC(n), a ) ) ; \
+} ; \
+
+BOOST_PP_REPEAT( BOOST_MAX_INPLACE_FACTORY_ARITY, BOOST_DEFINE_INPLACE_FACTORY_CLASS, BOOST_PP_EMPTY() )
+
+} // namespace boost
+
+#include <boost/utility/detail/in_place_factory_suffix.hpp>
+
+#endif
+
diff --git a/boost/boost/utility/result_of.hpp b/boost/boost/utility/result_of.hpp
new file mode 100644
index 00000000000..668cb696cb3
--- /dev/null
+++ b/boost/boost/utility/result_of.hpp
@@ -0,0 +1,66 @@
+// Boost result_of library
+
+// Copyright Douglas Gregor 2004. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org/libs/utility
+#ifndef BOOST_RESULT_OF_HPP
+#define BOOST_RESULT_OF_HPP
+
+#include <boost/config.hpp>
+#include <boost/type_traits/ice.hpp>
+#include <boost/type.hpp>
+#include <boost/preprocessor.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/mpl/has_xxx.hpp>
+
+#ifndef BOOST_RESULT_OF_NUM_ARGS
+# define BOOST_RESULT_OF_NUM_ARGS 10
+#endif
+
+namespace boost {
+
+template<typename F> struct result_of;
+
+#if !defined(BOOST_NO_SFINAE) && !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+namespace detail {
+
+BOOST_MPL_HAS_XXX_TRAIT_DEF(result_type)
+
+template<typename F, typename FArgs, bool HasResultType> struct get_result_of;
+
+template<typename F, typename FArgs>
+struct get_result_of<F, FArgs, true>
+{
+ typedef typename F::result_type type;
+};
+
+template<typename F, typename FArgs>
+struct get_result_of<F, FArgs, false>
+{
+ typedef typename F::template result<FArgs>::type type;
+};
+
+template<typename F>
+struct get_result_of<F, F(void), false>
+{
+ typedef void type;
+};
+
+template<typename F, typename FArgs>
+struct result_of : get_result_of<F, FArgs, (has_result_type<F>::value)> {};
+
+} // end namespace detail
+
+#define BOOST_PP_ITERATION_PARAMS_1 (3,(0,BOOST_RESULT_OF_NUM_ARGS,<boost/utility/detail/result_of_iterate.hpp>))
+#include BOOST_PP_ITERATE()
+
+#else
+# define BOOST_NO_RESULT_OF 1
+#endif
+
+}
+
+#endif // BOOST_RESULT_OF_HPP
diff --git a/boost/boost/utility/typed_in_place_factory.hpp b/boost/boost/utility/typed_in_place_factory.hpp
new file mode 100644
index 00000000000..e19fb75df97
--- /dev/null
+++ b/boost/boost/utility/typed_in_place_factory.hpp
@@ -0,0 +1,57 @@
+// Copyright (C) 2003, Fernando Luis Cacciola Carballal.
+//
+// Use, modification, and distribution is 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)
+//
+// See http://www.boost.org/lib/optional for documentation.
+//
+// You are welcome to contact the author at:
+// fernando_cacciola@hotmail.com
+//
+#ifndef BOOST_UTILITY_TYPED_INPLACE_FACTORY_25AGO2003_HPP
+#define BOOST_UTILITY_TYPED_INPLACE_FACTORY_25AGO2003_HPP
+
+#include <boost/utility/detail/in_place_factory_prefix.hpp>
+
+namespace boost {
+
+class typed_in_place_factory_base {} ;
+
+#define BOOST_DEFINE_TYPED_INPLACE_FACTORY_CLASS(z,n,_) \
+template< class T, BOOST_PP_ENUM_PARAMS(BOOST_PP_INC(n),class A) > \
+class BOOST_PP_CAT(typed_in_place_factory, BOOST_PP_INC(n) ) : public typed_in_place_factory_base \
+{ \
+public: \
+\
+ typedef T value_type ; \
+\
+ BOOST_PP_CAT(typed_in_place_factory, BOOST_PP_INC(n) ) ( BOOST_PP_ENUM_BINARY_PARAMS(BOOST_PP_INC(n),A,const& a) ) \
+ : \
+ BOOST_PP_ENUM( BOOST_PP_INC(n), BOOST_DEFINE_INPLACE_FACTORY_CLASS_MEMBER_INIT, _ ) \
+ {} \
+\
+ void apply ( void* address ) const \
+ { \
+ new ( address ) T ( BOOST_PP_ENUM_PARAMS( BOOST_PP_INC(n), m_a ) ) ; \
+ } \
+\
+ BOOST_PP_REPEAT( BOOST_PP_INC(n), BOOST_DEFINE_INPLACE_FACTORY_CLASS_MEMBER_DECL, _) \
+} ; \
+\
+template< class T, BOOST_PP_ENUM_PARAMS(BOOST_PP_INC(n),class A) > \
+BOOST_PP_CAT(typed_in_place_factory, BOOST_PP_INC(n) ) < T , BOOST_PP_ENUM_PARAMS( BOOST_PP_INC(n), A ) > \
+in_place ( BOOST_PP_ENUM_BINARY_PARAMS(BOOST_PP_INC(n),A, const& a) ) \
+{ \
+ return BOOST_PP_CAT(typed_in_place_factory, BOOST_PP_INC(n) ) < T, BOOST_PP_ENUM_PARAMS( BOOST_PP_INC(n), A ) > \
+ ( BOOST_PP_ENUM_PARAMS( BOOST_PP_INC(n), a ) ) ; \
+} ; \
+
+BOOST_PP_REPEAT( BOOST_MAX_INPLACE_FACTORY_ARITY, BOOST_DEFINE_TYPED_INPLACE_FACTORY_CLASS, BOOST_PP_EMPTY() )
+
+} // namespace boost
+
+#include <boost/utility/detail/in_place_factory_suffix.hpp>
+
+#endif
+
diff --git a/boost/boost/utility/value_init.hpp b/boost/boost/utility/value_init.hpp
new file mode 100644
index 00000000000..d24908cacc3
--- /dev/null
+++ b/boost/boost/utility/value_init.hpp
@@ -0,0 +1,77 @@
+// Copyright 2002, Fernando Luis Cacciola Carballal.
+//
+// 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)
+//
+// 21 Ago 2002 (Created) Fernando Cacciola
+//
+#ifndef BOOST_UTILITY_VALUE_INIT_21AGO2002_HPP
+#define BOOST_UTILITY_VALUE_INIT_21AGO2002_HPP
+
+#include "boost/detail/select_type.hpp"
+#include "boost/type_traits/cv_traits.hpp"
+
+namespace boost {
+
+namespace vinit_detail {
+
+template<class T>
+class const_T_base
+{
+ protected :
+
+ const_T_base() : x() {}
+
+ T x ;
+} ;
+
+template<class T>
+struct non_const_T_base
+{
+ protected :
+
+ non_const_T_base() : x() {}
+
+ mutable T x ;
+} ;
+
+template<class T>
+struct select_base
+{
+ typedef typename
+ boost::detail::if_true< ::boost::is_const<T>::value >
+ ::template then< const_T_base<T>, non_const_T_base<T> >::type type ;
+} ;
+
+} // namespace vinit_detail
+
+template<class T>
+class value_initialized : private vinit_detail::select_base<T>::type
+{
+ public :
+
+ value_initialized() {}
+
+ operator T&() const { return this->x ; }
+
+ T& data() const { return this->x ; }
+
+} ;
+
+template<class T>
+T const& get ( value_initialized<T> const& x )
+{
+ return x.data() ;
+}
+template<class T>
+T& get ( value_initialized<T>& x )
+{
+ return x.data() ;
+}
+
+} // namespace boost
+
+
+#endif
+
diff --git a/boost/boost/variant.hpp b/boost/boost/variant.hpp
new file mode 100644
index 00000000000..ef51639afc2
--- /dev/null
+++ b/boost/boost/variant.hpp
@@ -0,0 +1,27 @@
+//-----------------------------------------------------------------------------
+// boost variant.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_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/boost/boost/variant/apply_visitor.hpp b/boost/boost/variant/apply_visitor.hpp
new file mode 100644
index 00000000000..53bada09e95
--- /dev/null
+++ b/boost/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/boost/boost/variant/bad_visit.hpp b/boost/boost/variant/bad_visit.hpp
new file mode 100644
index 00000000000..ca53940e4d4
--- /dev/null
+++ b/boost/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/boost/boost/variant/detail/apply_visitor_binary.hpp b/boost/boost/variant/detail/apply_visitor_binary.hpp
new file mode 100644
index 00000000000..92cdb42328e
--- /dev/null
+++ b/boost/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/boost/boost/variant/detail/apply_visitor_delayed.hpp b/boost/boost/variant/detail/apply_visitor_delayed.hpp
new file mode 100644
index 00000000000..31c79a26b02
--- /dev/null
+++ b/boost/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/boost/boost/variant/detail/apply_visitor_unary.hpp b/boost/boost/variant/detail/apply_visitor_unary.hpp
new file mode 100644
index 00000000000..10b361a0bc6
--- /dev/null
+++ b/boost/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/boost/boost/variant/detail/backup_holder.hpp b/boost/boost/variant/detail/backup_holder.hpp
new file mode 100644
index 00000000000..ed112b8732c
--- /dev/null
+++ b/boost/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/boost/boost/variant/detail/bool_trait_def.hpp b/boost/boost/variant/detail/bool_trait_def.hpp
new file mode 100644
index 00000000000..823a79a1221
--- /dev/null
+++ b/boost/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/boost/boost/variant/detail/bool_trait_undef.hpp b/boost/boost/variant/detail/bool_trait_undef.hpp
new file mode 100644
index 00000000000..9b8fb541c16
--- /dev/null
+++ b/boost/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/boost/boost/variant/detail/cast_storage.hpp b/boost/boost/variant/detail/cast_storage.hpp
new file mode 100644
index 00000000000..f23f1741634
--- /dev/null
+++ b/boost/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/boost/boost/variant/detail/config.hpp b/boost/boost/variant/detail/config.hpp
new file mode 100644
index 00000000000..eb18201fb64
--- /dev/null
+++ b/boost/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/boost/boost/variant/detail/enable_recursive.hpp b/boost/boost/variant/detail/enable_recursive.hpp
new file mode 100644
index 00000000000..76bd7c70654
--- /dev/null
+++ b/boost/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/boost/boost/variant/detail/enable_recursive_fwd.hpp b/boost/boost/variant/detail/enable_recursive_fwd.hpp
new file mode 100644
index 00000000000..3336c1f76a4
--- /dev/null
+++ b/boost/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/boost/boost/variant/detail/forced_return.hpp b/boost/boost/variant/detail/forced_return.hpp
new file mode 100644
index 00000000000..cc1f25b59f3
--- /dev/null
+++ b/boost/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/boost/boost/variant/detail/generic_result_type.hpp b/boost/boost/variant/detail/generic_result_type.hpp
new file mode 100644
index 00000000000..b3fbb19eeb2
--- /dev/null
+++ b/boost/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/boost/boost/variant/detail/has_nothrow_move.hpp b/boost/boost/variant/detail/has_nothrow_move.hpp
new file mode 100644
index 00000000000..51ca095f594
--- /dev/null
+++ b/boost/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/boost/boost/variant/detail/has_trivial_move.hpp b/boost/boost/variant/detail/has_trivial_move.hpp
new file mode 100644
index 00000000000..5293366b671
--- /dev/null
+++ b/boost/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/boost/boost/variant/detail/initializer.hpp b/boost/boost/variant/detail/initializer.hpp
new file mode 100644
index 00000000000..b14d6c8f8bc
--- /dev/null
+++ b/boost/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/boost/boost/variant/detail/make_variant_list.hpp b/boost/boost/variant/detail/make_variant_list.hpp
new file mode 100644
index 00000000000..b2c74ad24df
--- /dev/null
+++ b/boost/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/boost/boost/variant/detail/move.hpp b/boost/boost/variant/detail/move.hpp
new file mode 100644
index 00000000000..572cfbb0f3b
--- /dev/null
+++ b/boost/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/boost/boost/variant/detail/over_sequence.hpp b/boost/boost/variant/detail/over_sequence.hpp
new file mode 100644
index 00000000000..bdd69ada61f
--- /dev/null
+++ b/boost/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/boost/boost/variant/detail/substitute.hpp b/boost/boost/variant/detail/substitute.hpp
new file mode 100644
index 00000000000..97fe2054bcf
--- /dev/null
+++ b/boost/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/boost/boost/variant/detail/substitute_fwd.hpp b/boost/boost/variant/detail/substitute_fwd.hpp
new file mode 100644
index 00000000000..1723847255a
--- /dev/null
+++ b/boost/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/boost/boost/variant/detail/variant_io.hpp b/boost/boost/variant/detail/variant_io.hpp
new file mode 100644
index 00000000000..c72491a4b78
--- /dev/null
+++ b/boost/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/boost/boost/variant/detail/visitation_impl.hpp b/boost/boost/variant/detail/visitation_impl.hpp
new file mode 100644
index 00000000000..36ab906b326
--- /dev/null
+++ b/boost/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/boost/boost/variant/get.hpp b/boost/boost/variant/get.hpp
new file mode 100644
index 00000000000..99a65f6b6df
--- /dev/null
+++ b/boost/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/boost/boost/variant/recursive_variant.hpp b/boost/boost/variant/recursive_variant.hpp
new file mode 100644
index 00000000000..c4cd3b01f94
--- /dev/null
+++ b/boost/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/boost/boost/variant/recursive_wrapper.hpp b/boost/boost/variant/recursive_wrapper.hpp
new file mode 100644
index 00000000000..ddc70024d06
--- /dev/null
+++ b/boost/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/boost/boost/variant/recursive_wrapper_fwd.hpp b/boost/boost/variant/recursive_wrapper_fwd.hpp
new file mode 100644
index 00000000000..69a0ec701de
--- /dev/null
+++ b/boost/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/boost/boost/variant/static_visitor.hpp b/boost/boost/variant/static_visitor.hpp
new file mode 100644
index 00000000000..b59b6f5a6a2
--- /dev/null
+++ b/boost/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/boost/boost/variant/variant.hpp b/boost/boost/variant/variant.hpp
new file mode 100644
index 00000000000..a9af0d399b4
--- /dev/null
+++ b/boost/boost/variant/variant.hpp
@@ -0,0 +1,1828 @@
+//-----------------------------------------------------------------------------
+// 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
+#include <typeinfo> // for typeid, std::type_info
+
+#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))
+ 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
+
+ T& rhs_;
+
+public: // structors
+
+ explicit direct_assigner(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
+
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// (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;
+ }
+
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// (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.
+//
+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);
+ }
+
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// (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 );
+ }
+
+};
+
+}} // 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;
+ }
+
+ };
+
+ 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<const 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;
+ }
+
+ const std::type_info& type() const
+ {
+ detail::variant::reflect visitor;
+ return this->apply_visitor(visitor);
+ }
+
+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
+#include "boost/variant/detail/variant_io.hpp"
+
+#endif // BOOST_VARIANT_VARIANT_HPP
diff --git a/boost/boost/variant/variant_fwd.hpp b/boost/boost/variant/variant_fwd.hpp
new file mode 100644
index 00000000000..7482ad4cc7f
--- /dev/null
+++ b/boost/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/boost/boost/variant/visitor_ptr.hpp b/boost/boost/variant/visitor_ptr.hpp
new file mode 100644
index 00000000000..b49a97290ae
--- /dev/null
+++ b/boost/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/boost/boost/vector_property_map.hpp b/boost/boost/vector_property_map.hpp
new file mode 100644
index 00000000000..ab619ded4d1
--- /dev/null
+++ b/boost/boost/vector_property_map.hpp
@@ -0,0 +1,92 @@
+// Copyright (C) Vladimir Prus 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/graph/vector_property_map.html for
+// documentation.
+//
+
+#ifndef VECTOR_PROPERTY_MAP_HPP_VP_2003_03_04
+#define VECTOR_PROPERTY_MAP_HPP_VP_2003_03_04
+
+#include <boost/property_map.hpp>
+#include <boost/shared_ptr.hpp>
+#include <vector>
+
+namespace boost {
+ template<typename T, typename IndexMap = identity_property_map>
+ class vector_property_map
+ : public boost::put_get_helper<
+ typename std::iterator_traits<
+ typename std::vector<T>::iterator >::reference,
+ vector_property_map<T, IndexMap> >
+ {
+ public:
+ typedef typename property_traits<IndexMap>::key_type key_type;
+ typedef T value_type;
+ typedef typename std::iterator_traits<
+ typename std::vector<T>::iterator >::reference reference;
+ typedef boost::lvalue_property_map_tag category;
+
+ vector_property_map(const IndexMap& index = IndexMap())
+ : store(new std::vector<T>()), index(index)
+ {}
+
+ vector_property_map(unsigned initial_size,
+ const IndexMap& index = IndexMap())
+ : store(new std::vector<T>(initial_size)), index(index)
+ {}
+
+ typename std::vector<T>::iterator storage_begin()
+ {
+ return store->begin();
+ }
+
+ typename std::vector<T>::iterator storage_end()
+ {
+ return store->end();
+ }
+
+ typename std::vector<T>::const_iterator storage_begin() const
+ {
+ return store->begin();
+ }
+
+ typename std::vector<T>::const_iterator storage_end() const
+ {
+ return store->end();
+ }
+
+ public:
+ // Copy ctor absent, default semantics is OK.
+ // Assignment operator absent, default semantics is OK.
+ // CONSIDER: not sure that assignment to 'index' is correct.
+
+ reference operator[](const key_type& v) const {
+ typename property_traits<IndexMap>::value_type i = get(index, v);
+ if (static_cast<unsigned>(i) >= store->size()) {
+ store->resize(i + 1, T());
+ }
+ return (*store)[i];
+ }
+ private:
+ // Conceptually, we have a vector of infinite size. For practical
+ // purposes, we start with an empty vector and grow it as needed.
+ // Note that we cannot store pointer to vector here -- we cannot
+ // store pointer to data, because if copy of property map resizes
+ // the vector, the pointer to data will be invalidated.
+ // I wonder if class 'pmap_ref' is simply needed.
+ shared_ptr< std::vector<T> > store;
+ IndexMap index;
+ };
+
+ template<typename T, typename IndexMap>
+ vector_property_map<T, IndexMap>
+ make_vector_property_map(IndexMap index)
+ {
+ return vector_property_map<T, IndexMap>(index);
+ }
+}
+
+#endif
diff --git a/boost/boost/version.hpp b/boost/boost/version.hpp
new file mode 100644
index 00000000000..6c18adc388f
--- /dev/null
+++ b/boost/boost/version.hpp
@@ -0,0 +1,37 @@
+// Boost version.hpp configuration header file ------------------------------//
+
+// (C) Copyright John maddock 1999. 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/config for documentation
+
+#ifndef BOOST_VERSION_HPP
+#define BOOST_VERSION_HPP
+
+//
+// Caution, this is the only boost header that is guarenteed
+// to change with every boost release, including this header
+// will cause a recompile every time a new boost version is
+// released.
+//
+// BOOST_VERSION % 100 is the sub-minor version
+// BOOST_VERSION / 100 % 1000 is the minor version
+// BOOST_VERSION / 100000 is the major version
+
+#define BOOST_VERSION 103401
+
+//
+// BOOST_LIB_VERSION must be defined to be the same as BOOST_VERSION
+// but as a *string* in the form "x_y" where x is the major version
+// number and y is the minor version number, or in the form "x_y_z"
+// where z is the patch version number when the patch version number
+// is not zero (z > 0). This is used by <config/auto_link.hpp> to
+// select which library version to link to.
+
+#define BOOST_LIB_VERSION "1_34_1"
+
+#endif
+
+
+
diff --git a/boost/boost/visit_each.hpp b/boost/boost/visit_each.hpp
new file mode 100644
index 00000000000..1fc8a50088b
--- /dev/null
+++ b/boost/boost/visit_each.hpp
@@ -0,0 +1,29 @@
+// Boost.Signals library
+
+// Copyright Douglas Gregor 2001-2003. Use, modification and
+// distribution is 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)
+
+// For more information, see http://www.boost.org/libs/signals
+
+#ifndef BOOST_VISIT_EACH_HPP
+#define BOOST_VISIT_EACH_HPP
+
+#include <boost/config.hpp>
+
+namespace boost {
+ template<typename Visitor, typename T>
+ inline void visit_each(Visitor& visitor, const T& t, long)
+ {
+ visitor(t);
+ }
+
+ template<typename Visitor, typename T>
+ inline void visit_each(Visitor& visitor, const T& t)
+ {
+ visit_each(visitor, t, 0);
+ }
+}
+
+#endif // BOOST_VISIT_EACH_HPP
diff --git a/boost/boost/wave.hpp b/boost/boost/wave.hpp
new file mode 100644
index 00000000000..beee5b9558f
--- /dev/null
+++ b/boost/boost/wave.hpp
@@ -0,0 +1,21 @@
+/*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+
+ http://www.boost.org/
+
+ Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(WAVE_HPP_DCA0EA51_EF5B_4BF1_88A8_461DBC5F292B_INCLUDED)
+#define WAVE_HPP_DCA0EA51_EF5B_4BF1_88A8_461DBC5F292B_INCLUDED
+
+#include <boost/wave/wave_config.hpp>
+#include <boost/wave/cpp_exceptions.hpp>
+#include <boost/wave/cpplexer/cpplexer_exceptions.hpp>
+
+#include <boost/wave/token_ids.hpp>
+#include <boost/wave/cpp_context.hpp>
+
+#endif // !defined(WAVE_HPP_DCA0EA51_EF5B_4BF1_88A8_461DBC5F292B_INCLUDED)
diff --git a/boost/boost/wave/cpp_context.hpp b/boost/boost/wave/cpp_context.hpp
new file mode 100644
index 00000000000..f8c6c6065a7
--- /dev/null
+++ b/boost/boost/wave/cpp_context.hpp
@@ -0,0 +1,460 @@
+/*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+ Definition of the preprocessor context
+
+ http://www.boost.org/
+
+ Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(CPP_CONTEXT_HPP_907485E2_6649_4A87_911B_7F7225F3E5B8_INCLUDED)
+#define CPP_CONTEXT_HPP_907485E2_6649_4A87_911B_7F7225F3E5B8_INCLUDED
+
+#include <string>
+#include <vector>
+#include <stack>
+
+#include <boost/concept_check.hpp>
+#include <boost/noncopyable.hpp>
+#include <boost/filesystem/path.hpp>
+
+#include <boost/wave/wave_config.hpp>
+#if BOOST_WAVE_SERIALIZATION != 0
+#include <boost/serialization/serialization.hpp>
+#include <boost/wave/wave_config_constant.hpp>
+#endif
+#include <boost/wave/token_ids.hpp>
+
+#include <boost/wave/util/unput_queue_iterator.hpp>
+#include <boost/wave/util/cpp_ifblock.hpp>
+#include <boost/wave/util/cpp_include_paths.hpp>
+#include <boost/wave/util/iteration_context.hpp>
+#include <boost/wave/util/cpp_iterator.hpp>
+#include <boost/wave/util/cpp_macromap.hpp>
+
+#include <boost/wave/preprocessing_hooks.hpp>
+#include <boost/wave/whitespace_handling.hpp>
+#include <boost/wave/cpp_iteration_context.hpp>
+#include <boost/wave/language_support.hpp>
+
+// this must occur after all of the includes and before any code appears
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_PREFIX
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace wave {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// The C preprocessor context template class
+//
+// The boost::wave::context template is the main interface class to
+// control the behaviour of the preprocessing engine.
+//
+// The following template parameters has to be supplied:
+//
+// IteratorT The iterator type of the underlying input stream
+// LexIteratorT The lexer iterator type to use as the token factory
+// InputPolicyT The input policy type to use for loading the files
+// to be included. This template parameter is optional and
+// defaults to the
+// iteration_context_policies::load_file_to_string
+// type.
+// HooksT The hooks policy to use for different notification
+// callbacks. This template parameter is optional and
+// defaults to the
+// context_policies::default_preprocessing_hooks
+// type.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+template <
+ typename IteratorT,
+ typename LexIteratorT,
+ typename InputPolicyT = iteration_context_policies::load_file_to_string,
+ typename HooksT = context_policies::eat_whitespace<typename LexIteratorT::token_type>
+>
+class context : private boost::noncopyable
+{
+public:
+
+// concept checks
+// the given iterator shall be at least a forward iterator type
+ BOOST_CLASS_REQUIRE(IteratorT, boost, ForwardIteratorConcept);
+
+// public typedefs
+ typedef typename LexIteratorT::token_type token_type;
+ typedef context<IteratorT, LexIteratorT, InputPolicyT, HooksT>
+ self_type;
+
+ typedef IteratorT target_iterator_type;
+ typedef LexIteratorT lexer_type;
+ typedef pp_iterator<self_type> iterator_type;
+
+ typedef InputPolicyT input_policy_type;
+ typedef typename token_type::position_type position_type;
+
+
+// type of a token sequence
+ typedef std::list<token_type, boost::fast_pool_allocator<token_type> >
+ token_sequence_type;
+// types of the policies
+ typedef HooksT hook_policy_type;
+
+private:
+// stack of shared_ptr's to the pending iteration contexts
+ typedef boost::shared_ptr<base_iteration_context<lexer_type> >
+ iteration_ptr_type;
+ typedef boost::wave::util::iteration_context_stack<iteration_ptr_type>
+ iteration_context_stack_type;
+ typedef typename iteration_context_stack_type::size_type iter_size_type;
+
+ context *this_() { return this; } // avoid warning in constructor
+
+public:
+ context(target_iterator_type const &first_, target_iterator_type const &last_,
+ char const *fname = "<Unknown>", HooksT const &hooks_ = HooksT())
+ : first(first_), last(last_), filename(fname)
+#if BOOST_WAVE_SUPPORT_PRAGMA_ONCE != 0
+ , current_filename(fname)
+#endif
+ , macros(*this_())
+ , language(language_support(
+ support_cpp
+ | support_option_convert_trigraphs
+ | support_option_emit_line_directives
+#if BOOST_WAVE_SUPPORT_PRAGMA_ONCE != 0
+ | support_option_include_guard_detection
+#endif
+ ))
+ , hooks(hooks_)
+ {
+ macros.init_predefined_macros(fname);
+ includes.init_initial_path();
+ }
+
+// default copy constructor
+// default assignment operator
+// default destructor
+
+// iterator interface
+ iterator_type begin()
+ {
+ std::string fname(filename);
+ if (filename != "<Unknown>" && filename != "<stdin>") {
+ using namespace boost::filesystem;
+ path fpath(complete(path(filename)));
+ fname = fpath.string();
+ includes.set_current_directory(fname.c_str());
+ }
+ return iterator_type(*this, first, last, position_type(fname.c_str()));
+ }
+ iterator_type begin(
+ target_iterator_type const &first_,
+ target_iterator_type const &last_)
+ {
+ std::string fname(filename);
+ if (filename != "<Unknown>" && filename != "<stdin>") {
+ using namespace boost::filesystem;
+ path fpath(complete(path(filename)));
+ fname = fpath.string();
+ includes.set_current_directory(fname.c_str());
+ }
+ return iterator_type(*this, first_, last_, position_type(fname.c_str()));
+ }
+ iterator_type end() const
+ { return iterator_type(); }
+
+// maintain include paths
+ bool add_include_path(char const *path_)
+ { return includes.add_include_path(path_, false);}
+ bool add_sysinclude_path(char const *path_)
+ { return includes.add_include_path(path_, true);}
+ void set_sysinclude_delimiter() { includes.set_sys_include_delimiter(); }
+ typename iteration_context_stack_type::size_type get_iteration_depth() const
+ { return iter_ctxs.size(); }
+
+// maintain defined macros
+#if BOOST_WAVE_ENABLE_COMMANDLINE_MACROS != 0
+ bool add_macro_definition(std::string macrostring,
+ bool is_predefined = false)
+ { return boost::wave::util::add_macro_definition(*this, macrostring,
+ is_predefined, get_language()); }
+#endif
+ bool add_macro_definition(token_type const &name, bool has_params,
+ std::vector<token_type> &parameters, token_sequence_type &definition,
+ bool is_predefined = false)
+ { return macros.add_macro(name, has_params, parameters, definition,
+ is_predefined); }
+ template <typename IteratorT2>
+ bool is_defined_macro(IteratorT2 const &begin, IteratorT2 const &end)
+ { return macros.is_defined(begin, end); }
+ bool get_macro_definition(typename token_type::string_type const &name,
+ bool &has_params, bool &is_predefined, position_type &pos,
+ std::vector<token_type> &parameters, token_sequence_type &definition)
+ {
+ return macros.get_macro(name, has_params, is_predefined, pos,
+ parameters, definition);
+ }
+ bool remove_macro_definition(typename token_type::string_type const &name,
+ bool even_predefined = false)
+ {
+#if BOOST_WAVE_SUPPORT_PRAGMA_ONCE != 0
+ // ensure this gets remove from the list of include guards as well
+ includes.remove_pragma_once_header(std::string(name.c_str()));
+#endif
+ return macros.remove_macro(
+ token_type(T_IDENTIFIER, name, macros.get_main_pos()),
+ even_predefined);
+ }
+ void reset_macro_definitions()
+ { macros.reset_macromap(); macros.init_predefined_macros(); }
+
+// get the Wave version information
+ static std::string get_version()
+ { return boost::wave::util::predefined_macros::get_fullversion(false); }
+ static std::string get_version_string()
+ { return boost::wave::util::predefined_macros::get_versionstr(false); }
+
+// access current language options
+ void set_language(boost::wave::language_support language_,
+ bool reset_macros = true)
+ {
+ language = language_;
+ if (reset_macros)
+ reset_macro_definitions();
+ }
+ boost::wave::language_support get_language() const { return language; }
+
+// change and ask for maximal possible include nesting depth
+ void set_max_include_nesting_depth(iter_size_type new_depth)
+ { iter_ctxs.set_max_include_nesting_depth(new_depth); }
+ iter_size_type get_max_include_nesting_depth() const
+ { return iter_ctxs.get_max_include_nesting_depth(); }
+
+// access the policies
+ hook_policy_type &get_hooks() { return hooks; }
+
+// return the directory of the currently preprocessed file
+ boost::filesystem::path get_current_directory() const
+ { return includes.get_current_directory(); }
+
+#if !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS)
+protected:
+ friend class boost::wave::pp_iterator<
+ boost::wave::context<IteratorT, lexer_type, InputPolicyT, HooksT> >;
+ friend class boost::wave::impl::pp_iterator_functor<
+ boost::wave::context<IteratorT, lexer_type, InputPolicyT, HooksT> >;
+#endif
+
+// maintain include paths (helper functions)
+ bool find_include_file (std::string &s, std::string &d, bool is_system,
+ char const *current_file) const
+ { return includes.find_include_file(s, d, is_system, current_file); }
+ void set_current_directory(char const *path_)
+ { includes.set_current_directory(path_); }
+
+// conditional compilation contexts
+ bool get_if_block_status() const { return ifblocks.get_status(); }
+ bool get_if_block_some_part_status() const
+ { return ifblocks.get_some_part_status(); }
+ bool get_enclosing_if_block_status() const
+ { return ifblocks.get_enclosing_status(); }
+ void enter_if_block(bool new_status)
+ { ifblocks.enter_if_block(new_status); }
+ bool enter_elif_block(bool new_status)
+ { return ifblocks.enter_elif_block(new_status); }
+ bool enter_else_block() { return ifblocks.enter_else_block(); }
+ bool exit_if_block() { return ifblocks.exit_if_block(); }
+ typename boost::wave::util::if_block_stack::size_type get_if_block_depth() const
+ { return ifblocks.get_if_block_depth(); }
+
+// stack of iteration contexts
+ iteration_ptr_type pop_iteration_context()
+ { iteration_ptr_type top = iter_ctxs.top(); iter_ctxs.pop(); return top; }
+ void push_iteration_context(position_type const &act_pos, iteration_ptr_type iter_ctx)
+ { iter_ctxs.push(act_pos, iter_ctx); }
+
+ position_type &get_main_pos() { return macros.get_main_pos(); }
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// expand_tokensequence():
+// expands all macros contained in a given token sequence, handles '##'
+// and '#' pp operators and re-scans the resulting sequence
+// (essentially pre-processes the token sequence).
+//
+// The expand_undefined parameter is true during macro expansion inside
+// a C++ expression given for a #if or #elif statement.
+//
+///////////////////////////////////////////////////////////////////////////////
+ template <typename IteratorT2>
+ token_type expand_tokensequence(IteratorT2 &first_, IteratorT2 const &last_,
+ token_sequence_type &pending, token_sequence_type &expanded,
+ bool expand_undefined = false)
+ {
+ return macros.expand_tokensequence(first_, last_, pending, expanded,
+ expand_undefined);
+ }
+
+ template <typename IteratorT2>
+ void expand_whole_tokensequence(IteratorT2 &first_, IteratorT2 const &last_,
+ token_sequence_type &expanded, bool expand_undefined = true)
+ {
+ macros.expand_whole_tokensequence(expanded, first_, last_,
+ expand_undefined);
+
+ // remove any contained placeholder
+ boost::wave::util::impl::remove_placeholders(expanded);
+ }
+
+public:
+#if BOOST_WAVE_SUPPORT_PRAGMA_ONCE != 0
+// support for #pragma once
+// maintain the real name of the current preprocessed file
+ void set_current_filename(char const *real_name)
+ { current_filename = real_name; }
+ std::string const &get_current_filename() const
+ { return current_filename; }
+
+// maintain the list of known headers containing #pragma once
+ bool has_pragma_once(std::string const &filename_)
+ { return includes.has_pragma_once(filename_); }
+ bool add_pragma_once_header(std::string const &filename_,
+ std::string const& guard_name = "__BOOST_WAVE_PRAGMA_ONCE__")
+ { return includes.add_pragma_once_header(filename_, guard_name); }
+#endif
+
+// forwarding functions for the context policy hooks
+ template <typename ContainerT>
+ bool interpret_pragma(ContainerT &pending, token_type const &option,
+ ContainerT const &values, token_type const &act_token)
+ {
+ return hooks.interpret_pragma(*this, pending, option, values, act_token);
+ }
+
+#if BOOST_WAVE_SERIALIZATION != 0
+public:
+ BOOST_STATIC_CONSTANT(unsigned int, version = 0x10);
+ BOOST_STATIC_CONSTANT(unsigned int, version_mask = 0x0f);
+
+private:
+ friend class boost::serialization::access;
+ template<class Archive>
+ void save(Archive & ar, const unsigned int version) const
+ {
+ typedef typename token_type::string_type string_type;
+
+ string_type cfg(BOOST_PP_STRINGIZE(BOOST_WAVE_CONFIG));
+ string_type kwd(BOOST_WAVE_PRAGMA_KEYWORD);
+ string_type strtype(BOOST_PP_STRINGIZE((BOOST_WAVE_STRINGTYPE)));
+ ar & cfg;
+ ar & kwd;
+ ar & strtype;
+
+ ar & language;
+ ar & macros;
+ ar & includes;
+ }
+ template<class Archive>
+ void load(Archive & ar, const unsigned int loaded_version)
+ {
+ if (version != (loaded_version & ~version_mask)) {
+ BOOST_WAVE_THROW(preprocess_exception, incompatible_config,
+ "cpp_context state version", get_main_pos());
+ }
+
+ // check compatibility of the stored information
+ typedef typename token_type::string_type string_type;
+ string_type config, pragma_keyword, string_type_str;
+
+ ar & config; // BOOST_WAVE_CONFIG
+ if (config != BOOST_PP_STRINGIZE(BOOST_WAVE_CONFIG)) {
+ BOOST_WAVE_THROW(preprocess_exception, incompatible_config,
+ "BOOST_WAVE_CONFIG", get_main_pos());
+ }
+
+ ar & pragma_keyword; // BOOST_WAVE_PRAGMA_KEYWORD
+ if (pragma_keyword != BOOST_WAVE_PRAGMA_KEYWORD) {
+ BOOST_WAVE_THROW(preprocess_exception, incompatible_config,
+ "BOOST_WAVE_PRAGMA_KEYWORD", get_main_pos());
+ }
+
+ ar & string_type_str; // BOOST_PP_STRINGIZE((BOOST_WAVE_STRINGTYPE))
+ if (string_type_str != BOOST_PP_STRINGIZE((BOOST_WAVE_STRINGTYPE))) {
+ BOOST_WAVE_THROW(preprocess_exception, incompatible_config,
+ "BOOST_WAVE_STRINGTYPE", get_main_pos());
+ }
+
+ // read in the useful bits
+ ar & language;
+ ar & macros;
+ ar & includes;
+ }
+ BOOST_SERIALIZATION_SPLIT_MEMBER()
+#endif
+
+private:
+// the main input stream
+ target_iterator_type first; // underlying input stream
+ target_iterator_type last;
+ std::string filename; // associated main filename
+#if BOOST_WAVE_SUPPORT_PRAGMA_ONCE != 0
+ std::string current_filename; // real name of current preprocessed file
+#endif
+
+ boost::wave::util::if_block_stack ifblocks; // conditional compilation contexts
+ boost::wave::util::include_paths includes; // lists of include directories to search
+ iteration_context_stack_type iter_ctxs; // iteration contexts
+ boost::wave::util::macromap<self_type> macros; // map of defined macros
+ boost::wave::language_support language; // supported language/extensions
+ hook_policy_type hooks; // hook policy instance
+};
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace wave
+} // namespace boost
+
+#if BOOST_WAVE_SERIALIZATION != 0
+namespace boost { namespace serialization {
+
+template<
+ typename Iterator, typename LexIterator,
+ typename InputPolicy, typename Hooks
+>
+struct tracking_level<boost::wave::context<Iterator, LexIterator, InputPolicy, Hooks> >
+{
+ typedef mpl::integral_c_tag tag;
+ typedef mpl::int_<track_never> type;
+ BOOST_STATIC_CONSTANT(
+ int,
+ value = tracking_level::type::value
+ );
+};
+
+template<
+ typename Iterator, typename LexIterator,
+ typename InputPolicy, typename Hooks
+>
+struct version<boost::wave::context<Iterator, LexIterator, InputPolicy, Hooks> >
+{
+ typedef boost::wave::context<Iterator, LexIterator, InputPolicy, Hooks>
+ target_type;
+ typedef mpl::int_<target_type::version> type;
+ typedef mpl::integral_c_tag tag;
+ BOOST_STATIC_CONSTANT(unsigned int, value = version::type::value);
+};
+
+}} // namespace boost::serialization
+#endif
+
+// the suffix header occurs after all of the code
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_SUFFIX
+#endif
+
+#endif // !defined(CPP_CONTEXT_HPP_907485E2_6649_4A87_911B_7F7225F3E5B8_INCLUDED)
diff --git a/boost/boost/wave/cpp_exceptions.hpp b/boost/boost/wave/cpp_exceptions.hpp
new file mode 100644
index 00000000000..57d6c98bd6f
--- /dev/null
+++ b/boost/boost/wave/cpp_exceptions.hpp
@@ -0,0 +1,421 @@
+/*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+
+ http://www.boost.org/
+
+ Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(CPP_EXCEPTIONS_HPP_5190E447_A781_4521_A275_5134FF9917D7_INCLUDED)
+#define CPP_EXCEPTIONS_HPP_5190E447_A781_4521_A275_5134FF9917D7_INCLUDED
+
+#include <exception>
+#include <string>
+#include <limits>
+
+#include <boost/assert.hpp>
+#include <boost/config.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/wave/wave_config.hpp>
+#include <boost/wave/cpp_throw.hpp>
+
+// this must occur after all of the includes and before any code appears
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_PREFIX
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace wave {
+
+///////////////////////////////////////////////////////////////////////////////
+// exception severity
+namespace util {
+
+ enum severity {
+ severity_remark = 0,
+ severity_warning,
+ severity_error,
+ severity_fatal,
+ severity_commandline_error,
+ last_severity_code = severity_commandline_error
+ };
+
+ inline char const *
+ get_severity(int level)
+ {
+ static char const *severity_text[] =
+ {
+ "remark", // severity_remark
+ "warning", // severity_warning
+ "error", // severity_error
+ "fatal error", // severity_fatal
+ "command line error" // severity_commandline_error
+ };
+ BOOST_ASSERT(severity_remark <= level &&
+ level <= last_severity_code);
+ return severity_text[level];
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// cpp_exception, the base class for all specific C preprocessor exceptions
+class cpp_exception
+: public std::exception
+{
+public:
+ cpp_exception(int line_, int column_, char const *filename_) throw()
+ : line(line_), column(column_)
+ {
+ unsigned int off = 0;
+ while (off < sizeof(filename)-1 && *filename_)
+ filename[off++] = *filename_++;
+ filename[off] = 0;
+ }
+ ~cpp_exception() throw() {}
+
+ virtual char const *what() const throw() = 0; // to be overloaded
+ virtual char const *description() const throw() = 0;
+ virtual int get_errorcode() const throw() = 0;
+ virtual int get_severity() const throw() = 0;
+ virtual char const* get_related_name() const throw() = 0;
+ virtual bool is_recoverable() const throw() = 0;
+
+ int line_no() const throw() { return line; }
+ int column_no() const throw() { return column; }
+ char const *file_name() const throw() { return filename; }
+
+protected:
+ char filename[512];
+ int line;
+ int column;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// preprocessor error
+class preprocess_exception :
+ public cpp_exception
+{
+public:
+ enum error_code {
+ no_error = 0,
+ unexpected_error,
+ macro_redefinition,
+ macro_insertion_error,
+ bad_include_file,
+ bad_include_statement,
+ ill_formed_directive,
+ error_directive,
+ warning_directive,
+ ill_formed_expression,
+ missing_matching_if,
+ missing_matching_endif,
+ ill_formed_operator,
+ bad_define_statement,
+ bad_define_statement_va_args,
+ too_few_macroarguments,
+ too_many_macroarguments,
+ empty_macroarguments,
+ improperly_terminated_macro,
+ bad_line_statement,
+ bad_line_number,
+ bad_line_filename,
+ bad_undefine_statement,
+ bad_macro_definition,
+ illegal_redefinition,
+ duplicate_parameter_name,
+ invalid_concat,
+ last_line_not_terminated,
+ ill_formed_pragma_option,
+ include_nesting_too_deep,
+ misplaced_operator,
+ alreadydefined_name,
+ undefined_macroname,
+ invalid_macroname,
+ unexpected_qualified_name,
+ division_by_zero,
+ integer_overflow,
+ illegal_operator_redefinition,
+ ill_formed_integer_literal,
+ ill_formed_character_literal,
+ unbalanced_if_endif,
+ character_literal_out_of_range,
+ could_not_open_output_file,
+ incompatible_config,
+ ill_formed_pragma_message,
+ pragma_message_directive,
+ last_error_number = pragma_message_directive
+ };
+
+ preprocess_exception(char const *what_, error_code code, int line_,
+ int column_, char const *filename_) throw()
+ : cpp_exception(line_, column_, filename_),
+ code(code)
+ {
+ unsigned int off = 0;
+ while (off < sizeof(buffer) && *what_)
+ buffer[off++] = *what_++;
+ buffer[off] = 0;
+ }
+ ~preprocess_exception() throw() {}
+
+ virtual char const *what() const throw()
+ {
+ return "boost::wave::preprocess_exception";
+ }
+ virtual char const *description() const throw()
+ {
+ return buffer;
+ }
+ virtual int get_severity() const throw()
+ {
+ return severity_level(code);
+ }
+ virtual int get_errorcode() const throw()
+ {
+ return code;
+ }
+ virtual char const* get_related_name() const throw()
+ {
+ return "<unknown>";
+ }
+ virtual bool is_recoverable() const throw()
+ {
+ switch (get_errorcode()) {
+ // these are the exceptions thrown during processing not supposed to
+ // produce any tokens on the context::iterator level
+ case preprocess_exception::no_error: // just a placeholder
+ case preprocess_exception::macro_redefinition:
+ case preprocess_exception::macro_insertion_error:
+ case preprocess_exception::bad_macro_definition:
+ case preprocess_exception::illegal_redefinition:
+ case preprocess_exception::duplicate_parameter_name:
+ case preprocess_exception::invalid_macroname:
+ case preprocess_exception::bad_include_file:
+ case preprocess_exception::bad_include_statement:
+ case preprocess_exception::ill_formed_directive:
+ case preprocess_exception::error_directive:
+ case preprocess_exception::warning_directive:
+ case preprocess_exception::ill_formed_expression:
+ case preprocess_exception::missing_matching_if:
+ case preprocess_exception::missing_matching_endif:
+ case preprocess_exception::unbalanced_if_endif:
+ case preprocess_exception::bad_define_statement:
+ case preprocess_exception::bad_define_statement_va_args:
+ case preprocess_exception::bad_line_statement:
+ case preprocess_exception::bad_line_number:
+ case preprocess_exception::bad_line_filename:
+ case preprocess_exception::bad_undefine_statement:
+ case preprocess_exception::division_by_zero:
+ case preprocess_exception::integer_overflow:
+ case preprocess_exception::ill_formed_integer_literal:
+ case preprocess_exception::ill_formed_character_literal:
+ case preprocess_exception::character_literal_out_of_range:
+ case preprocess_exception::last_line_not_terminated:
+ case preprocess_exception::include_nesting_too_deep:
+ case preprocess_exception::illegal_operator_redefinition:
+ case preprocess_exception::incompatible_config:
+ case preprocess_exception::ill_formed_pragma_option:
+ case preprocess_exception::ill_formed_pragma_message:
+ case preprocess_exception::pragma_message_directive:
+ return true;
+
+ case preprocess_exception::unexpected_error:
+ case preprocess_exception::ill_formed_operator:
+ case preprocess_exception::too_few_macroarguments:
+ case preprocess_exception::too_many_macroarguments:
+ case preprocess_exception::empty_macroarguments:
+ case preprocess_exception::improperly_terminated_macro:
+ case preprocess_exception::invalid_concat:
+ case preprocess_exception::could_not_open_output_file:
+ break;
+ }
+ return false;
+ }
+
+ static char const *error_text(int code)
+ {
+ // error texts in this array must appear in the same order as the items in
+ // the error enum above
+ static char const *preprocess_exception_errors[] = {
+ "no error", // no_error
+ "unexpected error (should not happen)", // unexpected_error
+ "illegal macro redefinition", // macro_redefinition
+ "macro definition failed (out of memory?)", // macro_insertion_error
+ "could not find include file", // bad_include_file
+ "ill formed #include directive", // bad_include_statement
+ "ill formed preprocessor directive", // ill_formed_directive
+ "encountered #error directive or #pragma wave stop()", // error_directive
+ "encountered #warning directive", // warning_directive
+ "ill formed preprocessor expression", // ill_formed_expression
+ "the #if for this directive is missing", // missing_matching_if
+ "detected at least one missing #endif directive", // missing_matching_endif
+ "ill formed preprocessing operator", // ill_formed_operator
+ "ill formed #define directive", // bad_define_statement
+ "__VA_ARGS__ can only appear in the "
+ "expansion of a C99 variadic macro", // bad_define_statement_va_args
+ "too few macro arguments", // too_few_macroarguments
+ "too many macro arguments", // too_many_macroarguments
+ "empty macro arguments are not supported in pure C++ mode, "
+ "use variadics mode to allow these", // empty_macroarguments
+ "improperly terminated macro invocation "
+ "or replacement-list terminates in partial "
+ "macro expansion (not supported yet)", // improperly_terminated_macro
+ "ill formed #line directive", // bad_line_statement
+ "line number argument of #line directive "
+ "should consist out of decimal digits "
+ "only and must be in range of [1..INT_MAX]", // bad_line_number
+ "filename argument of #line directive should "
+ "be a narrow string literal", // bad_line_filename
+ "#undef may not be used on this predefined name", // bad_undefine_statement
+ "invalid macro definition", // bad_macro_definition
+ "this predefined name may not be redefined", // illegal_redefinition
+ "duplicate macro parameter name", // duplicate_parameter_name
+ "pasting the following two tokens does not "
+ "give a valid preprocessing token", // invalid_concat
+ "last line of file ends without a newline", // last_line_not_terminated
+ "unknown or illformed pragma option", // ill_formed_pragma_option
+ "include files nested too deep", // include_nesting_too_deep
+ "misplaced operator defined()", // misplaced_operator
+ "the name is already used in this scope as "
+ "a macro or scope name", // alreadydefined_name
+ "undefined macro or scope name may not be imported", // undefined_macroname
+ "ill formed macro name", // invalid_macroname
+ "qualified names are supported in C++0x mode only", // unexpected_qualified_name
+ "division by zero in preprocessor expression", // division_by_zero
+ "integer overflow in preprocessor expression", // integer_overflow
+ "this cannot be used as a macro name as it is "
+ "an operator in C++", // illegal_operator_redefinition
+ "ill formed integer literal or integer constant too large", // ill_formed_integer_literal
+ "ill formed character literal", // ill_formed_character_literal
+ "unbalanced #if/#endif in include file", // unbalanced_if_endif
+ "expression contains out of range character literal", // character_literal_out_of_range
+ "could not open output file", // could_not_open_output_file
+ "incompatible state information", // incompatible_config
+ "illformed pragma message", // ill_formed_pragma_message
+ "encountered #pragma message directive" // pragma_message_directive
+ };
+ BOOST_ASSERT(no_error <= code && code <= last_error_number);
+ return preprocess_exception_errors[code];
+ }
+
+ static util::severity severity_level(int code)
+ {
+ static util::severity preprocess_exception_severity[] = {
+ util::severity_remark, // no_error
+ util::severity_fatal, // unexpected_error
+ util::severity_warning, // macro_redefinition
+ util::severity_fatal, // macro_insertion_error
+ util::severity_error, // bad_include_file
+ util::severity_error, // bad_include_statement
+ util::severity_error, // ill_formed_directive
+ util::severity_fatal, // error_directive
+ util::severity_warning, // warning_directive
+ util::severity_error, // ill_formed_expression
+ util::severity_error, // missing_matching_if
+ util::severity_error, // missing_matching_endif
+ util::severity_error, // ill_formed_operator
+ util::severity_error, // bad_define_statement
+ util::severity_error, // bad_define_statement_va_args
+ util::severity_warning, // too_few_macroarguments
+ util::severity_warning, // too_many_macroarguments
+ util::severity_warning, // empty_macroarguments
+ util::severity_error, // improperly_terminated_macro
+ util::severity_warning, // bad_line_statement
+ util::severity_warning, // bad_line_number
+ util::severity_warning, // bad_line_filename
+ util::severity_warning, // bad_undefine_statement
+ util::severity_commandline_error, // bad_macro_definition
+ util::severity_warning, // illegal_redefinition
+ util::severity_error, // duplicate_parameter_name
+ util::severity_error, // invalid_concat
+ util::severity_warning, // last_line_not_terminated
+ util::severity_warning, // ill_formed_pragma_option
+ util::severity_fatal, // include_nesting_too_deep
+ util::severity_error, // misplaced_operator
+ util::severity_error, // alreadydefined_name
+ util::severity_error, // undefined_macroname
+ util::severity_error, // invalid_macroname
+ util::severity_error, // unexpected_qualified_name
+ util::severity_fatal, // division_by_zero
+ util::severity_error, // integer_overflow
+ util::severity_error, // illegal_operator_redefinition
+ util::severity_error, // ill_formed_integer_literal
+ util::severity_error, // ill_formed_character_literal
+ util::severity_warning, // unbalanced_if_endif
+ util::severity_warning, // character_literal_out_of_range
+ util::severity_error, // could_not_open_output_file
+ util::severity_remark, // incompatible_config
+ util::severity_warning, // ill_formed_pragma_message
+ util::severity_remark, // pragma_message_directive
+ };
+ BOOST_ASSERT(no_error <= code && code <= last_error_number);
+ return preprocess_exception_severity[code];
+ }
+ static char const *severity_text(int code)
+ {
+ return util::get_severity(severity_level(code));
+ }
+
+private:
+ char buffer[512];
+ error_code code;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// Error during macro handling, this exception contains the related macro name
+class macro_handling_exception :
+ public preprocess_exception
+{
+public:
+ macro_handling_exception(char const *what_, error_code code, int line_,
+ int column_, char const *filename_, char const *macroname) throw()
+ : preprocess_exception(what_, code, line_, column_, filename_)
+ {
+ unsigned int off = 0;
+ while (off < sizeof(name) && *macroname)
+ name[off++] = *macroname++;
+ name[off] = 0;
+ }
+ ~macro_handling_exception() throw() {}
+
+ virtual char const *what() const throw()
+ {
+ return "boost::wave::macro_handling_exception";
+ }
+ char const* get_related_name() const throw()
+ {
+ return name;
+ }
+
+private:
+ char name[512];
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// The is_recoverable() function allows to decide, whether it is possible
+// simply to continue after a given exception was thrown by Wave.
+//
+// This is kind of a hack to allow to recover from certain errors as long as
+// Wave doesn't provide better means of error recovery.
+//
+///////////////////////////////////////////////////////////////////////////////
+inline bool
+is_recoverable(cpp_exception const& e)
+{
+ return e.is_recoverable();
+}
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace wave
+} // namespace boost
+
+// the suffix header occurs after all of the code
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_SUFFIX
+#endif
+
+#endif // !defined(CPP_EXCEPTIONS_HPP_5190E447_A781_4521_A275_5134FF9917D7_INCLUDED)
diff --git a/boost/boost/wave/cpp_iteration_context.hpp b/boost/boost/wave/cpp_iteration_context.hpp
new file mode 100644
index 00000000000..a6562b03091
--- /dev/null
+++ b/boost/boost/wave/cpp_iteration_context.hpp
@@ -0,0 +1,205 @@
+/*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+ Definition of the preprocessor context
+
+ http://www.boost.org/
+
+ Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(CPP_ITERATION_CONTEXT_HPP_00312288_9DDB_4668_AFE5_25D3994FD095_INCLUDED)
+#define CPP_ITERATION_CONTEXT_HPP_00312288_9DDB_4668_AFE5_25D3994FD095_INCLUDED
+
+#include <iterator>
+#include <fstream>
+#if defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS)
+#include <sstream>
+#endif
+
+#include <boost/wave/wave_config.hpp>
+#include <boost/wave/cpp_exceptions.hpp>
+#include <boost/wave/language_support.hpp>
+#include <boost/wave/util/file_position.hpp>
+
+// this must occur after all of the includes and before any code appears
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_PREFIX
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace wave {
+namespace iteration_context_policies {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// The iteration_context_policies templates are policies for the
+// boost::wave::iteration_context which allows to control, how a given input file
+// is to be represented by a pair of iterators pointing to the begin and
+// the end of the resulting input sequence.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // load_file_to_string
+ //
+ // Loads a file into a string and returns the iterators pointing to
+ // the beginning and the end of the loaded string.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ struct load_file_to_string
+ {
+ template <typename IterContextT>
+ class inner
+ {
+ public:
+ template <typename PositionT>
+ static
+ void init_iterators(IterContextT &iter_ctx,
+ PositionT const &act_pos)
+ {
+ typedef typename IterContextT::iterator_type iterator_type;
+
+ std::ifstream instream(iter_ctx.filename.c_str());
+ if (!instream.is_open()) {
+ BOOST_WAVE_THROW(preprocess_exception, bad_include_file,
+ iter_ctx.filename.c_str(), act_pos);
+ }
+ instream.unsetf(std::ios::skipws);
+
+#if defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS)
+ // this is known to be very slow for large files on some systems
+ std::copy (istream_iterator<char>(instream),
+ istream_iterator<char>(),
+ std::inserter(iter_ctx.instring, iter_ctx.instring.end()));
+#else
+ iter_ctx.instring = std::string(
+ std::istreambuf_iterator<char>(instream.rdbuf()),
+ std::istreambuf_iterator<char>());
+#endif // defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS)
+
+ iter_ctx.first = iterator_type(iter_ctx.instring.begin(),
+ iter_ctx.instring.end(), PositionT(iter_ctx.filename),
+ iter_ctx.language);
+ iter_ctx.last = iterator_type();
+ }
+
+ private:
+ std::string instring;
+ };
+ };
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// load_file
+//
+// The load_file policy opens a given file and returns the wrapped
+// istreambuf_iterators.
+//
+///////////////////////////////////////////////////////////////////////////////
+ struct load_file
+ {
+ template <typename IterContextT>
+ class inner {
+
+ public:
+ ~inner() { if (instream.is_open()) instream.close(); }
+
+ template <typename PositionT>
+ static
+ void init_iterators(IterContextT &iter_ctx,
+ PositionT const &act_pos)
+ {
+ typedef typename IterContextT::iterator_type iterator_type;
+
+ iter_ctx.instream.open(iter_ctx.filename.c_str());
+ if (!iter_ctx.instream.is_open()) {
+ BOOST_WAVE_THROW(preprocess_exception, bad_include_file,
+ iter_ctx.filename.c_str(), act_pos);
+ }
+ iter_ctx.instream.unsetf(std::ios::skipws);
+
+ using boost::spirit::make_multi_pass;
+ iter_ctx.first = iterator_type(
+ make_multi_pass(std::istreambuf_iterator<char>(
+ iter_ctx.instream.rdbuf())),
+ make_multi_pass(std::istreambuf_iterator<char>()),
+ PositionT(iter_ctx.filename), iter_ctx.language);
+ iter_ctx.last = iterator_type();
+ }
+
+ private:
+ std::ifstream instream;
+ };
+ };
+
+} // namespace iteration_context_policies
+
+///////////////////////////////////////////////////////////////////////////////
+//
+template <typename IteratorT>
+struct base_iteration_context
+{
+public:
+ base_iteration_context(
+ BOOST_WAVE_STRINGTYPE const &fname, std::size_t if_block_depth = 0)
+ : real_filename(fname), filename(fname), line(1), emitted_lines(1),
+ if_block_depth(if_block_depth)
+ {}
+ base_iteration_context(IteratorT const &first_, IteratorT const &last_,
+ BOOST_WAVE_STRINGTYPE const &fname, std::size_t if_block_depth = 0)
+ : first(first_), last(last_), real_filename(fname), filename(fname),
+ line(1), emitted_lines(1), if_block_depth(if_block_depth)
+ {}
+
+// the actual input stream
+ IteratorT first; // actual input stream position
+ IteratorT last; // end of input stream
+ BOOST_WAVE_STRINGTYPE real_filename; // real name of the current file
+ BOOST_WAVE_STRINGTYPE filename; // actual processed file
+ unsigned int line; // line counter of underlying stream
+ unsigned int emitted_lines; // count of emitted newlines
+ std::size_t if_block_depth; // depth of #if block recursion
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+template <
+ typename IteratorT,
+ typename InputPolicyT = iteration_context_policies::load_file_to_string
+>
+struct iteration_context
+: public base_iteration_context<IteratorT>,
+ public InputPolicyT::template
+ inner<iteration_context<IteratorT, InputPolicyT> >
+{
+ typedef IteratorT iterator_type;
+ typedef typename IteratorT::token_type::position_type position_type;
+
+ typedef iteration_context<IteratorT, InputPolicyT> self_type;
+
+ iteration_context(BOOST_WAVE_STRINGTYPE const &fname,
+ position_type const &act_pos,
+ boost::wave::language_support language_)
+ : base_iteration_context<IteratorT>(fname),
+ language(language_)
+ {
+ InputPolicyT::template inner<self_type>::init_iterators(*this, act_pos);
+ }
+
+ boost::wave::language_support language;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace wave
+} // namespace boost
+
+// the suffix header occurs after all of the code
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_SUFFIX
+#endif
+
+#endif // !defined(CPP_ITERATION_CONTEXT_HPP_00312288_9DDB_4668_AFE5_25D3994FD095_INCLUDED)
diff --git a/boost/boost/wave/cpp_throw.hpp b/boost/boost/wave/cpp_throw.hpp
new file mode 100644
index 00000000000..7caacbd1574
--- /dev/null
+++ b/boost/boost/wave/cpp_throw.hpp
@@ -0,0 +1,128 @@
+/*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+
+ http://www.boost.org/
+
+ Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(BOOST_WAVE_CPP_THROW_HPP_INCLUDED)
+#define BOOST_WAVE_CPP_THROW_HPP_INCLUDED
+
+#include <string>
+#include <boost/throw_exception.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+// helper macro for throwing exceptions
+#if !defined(BOOST_WAVE_THROW)
+#ifdef BOOST_NO_STRINGSTREAM
+#include <strstream>
+#define BOOST_WAVE_THROW(cls, code, msg, act_pos) \
+ { \
+ using namespace boost::wave; \
+ std::strstream stream; \
+ stream << cls::severity_text(cls::code) << ": " \
+ << cls::error_text(cls::code); \
+ if ((msg)[0] != 0) stream << ": " << (msg); \
+ stream << std::ends; \
+ std::string throwmsg = stream.str(); stream.freeze(false); \
+ boost::throw_exception(cls(throwmsg.c_str(), cls::code, \
+ (act_pos).get_line(), (act_pos).get_column(), \
+ (act_pos).get_file().c_str())); \
+ } \
+ /**/
+#else
+#include <sstream>
+#define BOOST_WAVE_THROW(cls, code, msg, act_pos) \
+ { \
+ using namespace boost::wave; \
+ std::stringstream stream; \
+ stream << cls::severity_text(cls::code) << ": " \
+ << cls::error_text(cls::code); \
+ if ((msg)[0] != 0) stream << ": " << (msg); \
+ stream << std::ends; \
+ boost::throw_exception(cls(stream.str().c_str(), cls::code, \
+ (act_pos).get_line(), (act_pos).get_column(), \
+ (act_pos).get_file().c_str())); \
+ } \
+ /**/
+#endif // BOOST_NO_STRINGSTREAM
+#endif // BOOST_WAVE_THROW
+
+///////////////////////////////////////////////////////////////////////////////
+// helper macro for throwing exceptions with additional parameter
+#if !defined(BOOST_WAVE_THROW_NAME)
+#ifdef BOOST_NO_STRINGSTREAM
+#include <strstream>
+#define BOOST_WAVE_THROW_NAME(cls, code, msg, act_pos, name) \
+ { \
+ using namespace boost::wave; \
+ std::strstream stream; \
+ stream << cls::severity_text(cls::code) << ": " \
+ << cls::error_text(cls::code); \
+ if ((msg)[0] != 0) stream << ": " << (msg); \
+ stream << std::ends; \
+ std::string throwmsg = stream.str(); stream.freeze(false); \
+ boost::throw_exception(cls(throwmsg.c_str(), cls::code, \
+ (act_pos).get_line(), (act_pos).get_column(), \
+ (act_pos).get_file().c_str(), (name))); \
+ } \
+ /**/
+#else
+#include <sstream>
+#define BOOST_WAVE_THROW_NAME(cls, code, msg, act_pos, name) \
+ { \
+ using namespace boost::wave; \
+ std::stringstream stream; \
+ stream << cls::severity_text(cls::code) << ": " \
+ << cls::error_text(cls::code); \
+ if ((msg)[0] != 0) stream << ": " << (msg); \
+ stream << std::ends; \
+ boost::throw_exception(cls(stream.str().c_str(), cls::code, \
+ (act_pos).get_line(), (act_pos).get_column(), \
+ (act_pos).get_file().c_str(), (name))); \
+ } \
+ /**/
+#endif // BOOST_NO_STRINGSTREAM
+#endif // BOOST_WAVE_THROW_NAME
+
+///////////////////////////////////////////////////////////////////////////////
+// helper macro for throwing exceptions with additional parameter
+#if !defined(BOOST_WAVE_THROW_VAR)
+#ifdef BOOST_NO_STRINGSTREAM
+#include <strstream>
+#define BOOST_WAVE_THROW_VAR(cls, code, msg, act_pos) \
+ { \
+ using namespace boost::wave; \
+ std::strstream stream; \
+ stream << cls::severity_text(code) << ": " \
+ << cls::error_text(code); \
+ if ((msg)[0] != 0) stream << ": " << (msg); \
+ stream << std::ends; \
+ std::string throwmsg = stream.str(); stream.freeze(false); \
+ boost::throw_exception(cls(throwmsg.c_str(), code, \
+ (act_pos).get_line(), (act_pos).get_column(), \
+ (act_pos).get_file().c_str())); \
+ } \
+ /**/
+#else
+#include <sstream>
+#define BOOST_WAVE_THROW_VAR(cls, code, msg, act_pos) \
+ { \
+ using namespace boost::wave; \
+ std::stringstream stream; \
+ stream << cls::severity_text(code) << ": " \
+ << cls::error_text(code); \
+ if ((msg)[0] != 0) stream << ": " << (msg); \
+ stream << std::ends; \
+ boost::throw_exception(cls(stream.str().c_str(), code, \
+ (act_pos).get_line(), (act_pos).get_column(), \
+ (act_pos).get_file().c_str())); \
+ } \
+ /**/
+#endif // BOOST_NO_STRINGSTREAM
+#endif // BOOST_WAVE_THROW_VAR
+
+#endif // !defined(BOOST_WAVE_CPP_THROW_HPP_INCLUDED)
diff --git a/boost/boost/wave/cpplexer/convert_trigraphs.hpp b/boost/boost/wave/cpplexer/convert_trigraphs.hpp
new file mode 100644
index 00000000000..2500e3b9a12
--- /dev/null
+++ b/boost/boost/wave/cpplexer/convert_trigraphs.hpp
@@ -0,0 +1,139 @@
+/*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+
+ Grammar for universal character validation (see C++ standard: Annex E)
+
+ http://www.boost.org/
+
+ Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(CONVERT_TRIGRAPHS_HK050403_INCLUDED)
+#define CONVERT_TRIGRAPHS_HK050403_INCLUDED
+
+#include <boost/wave/wave_config.hpp>
+#include <boost/wave/cpplexer/cpplexer_exceptions.hpp>
+
+// this must occur after all of the includes and before any code appears
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_PREFIX
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace wave {
+namespace cpplexer {
+namespace impl {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Test, whether the given string represents a valid trigraph sequence
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename StringT>
+inline bool
+is_trigraph(StringT const& trigraph)
+{
+ if (trigraph.size() < 3 || '?' != trigraph[0] || '?' != trigraph[1])
+ return false;
+
+ switch (trigraph[2]) {
+ case '\'': case '=': case '/': case '(':
+ case ')': case '<': case '>': case '!':
+ case '-':
+ break;
+
+ default:
+ return false;
+ }
+
+ return true;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// convert_trigraph
+//
+// The function convert_trigraph() converts a single trigraph character
+// sequence into the corresponding character.
+//
+// If the given character sequence doesn't form a valid trigraph sequence
+// no conversion is performed.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename StringT>
+inline StringT
+convert_trigraph(StringT const &trigraph)
+{
+StringT result (trigraph);
+
+ if (is_trigraph(trigraph)) {
+ switch (trigraph[2]) {
+ case '\'': result = "^"; break;
+ case '=': result = "#"; break;
+ case '/': result = "\\"; break;
+ case '(': result = "["; break;
+ case ')': result = "]"; break;
+ case '<': result = "{"; break;
+ case '>': result = "}"; break;
+ case '!': result = "|"; break;
+ case '-': result = "~"; break;
+ }
+ }
+ return result;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// convert_trigraphs
+//
+// The function convert_trigraph() converts all trigraphs in the given
+// string into the corresponding characters.
+//
+// If one of the given character sequences doesn't form a valid trigraph
+// sequence no conversion is performed.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename StringT>
+inline StringT
+convert_trigraphs(StringT const &value)
+{
+ StringT result;
+ typename StringT::size_type pos = 0;
+ typename StringT::size_type pos1 = value.find_first_of ("?", 0);
+ if (StringT::npos != pos1) {
+ do {
+ result += value.substr(pos, pos1-pos);
+ StringT trigraph (value.substr(pos1));
+ if (is_trigraph(trigraph)) {
+ result += convert_trigraph(trigraph);
+ pos1 = value.find_first_of ("?", pos = pos1+3);
+ }
+ else {
+ result += value[pos1];
+ pos1 = value.find_first_of ("?", pos = pos1+1);
+ }
+ } while (StringT::npos != pos1);
+ result += value.substr(pos);
+ }
+ else {
+ result = value;
+ }
+ return result;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace impl
+} // namespace cpplexer
+} // namespace wave
+} // namespace boost
+
+// the suffix header occurs after all of the code
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_SUFFIX
+#endif
+
+#endif // !defined(CONVERT_TRIGRAPHS_HK050403_INCLUDED)
+
+
diff --git a/boost/boost/wave/cpplexer/cpp_lex_interface.hpp b/boost/boost/wave/cpplexer/cpp_lex_interface.hpp
new file mode 100644
index 00000000000..b6f4b089e10
--- /dev/null
+++ b/boost/boost/wave/cpplexer/cpp_lex_interface.hpp
@@ -0,0 +1,113 @@
+/*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+
+ Definition of the abstract lexer interface
+
+ http://www.boost.org/
+
+ Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(CPP_LEX_INTERFACE_HPP_E83F52A4_90AC_4FBE_A9A7_B65F7F94C497_INCLUDED)
+#define CPP_LEX_INTERFACE_HPP_E83F52A4_90AC_4FBE_A9A7_B65F7F94C497_INCLUDED
+
+#include <boost/wave/wave_config.hpp>
+#include <boost/wave/util/file_position.hpp>
+#include <boost/wave/language_support.hpp>
+
+// this must occur after all of the includes and before any code appears
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_PREFIX
+#endif
+
+// suppress warnings about dependent classes not being exported from the dll
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable : 4251 4231 4660)
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace wave {
+namespace cpplexer {
+
+#if BOOST_WAVE_SEPARATE_LEXER_INSTANTIATION != 0
+#define BOOST_WAVE_NEW_LEXER_DECL BOOST_WAVE_DECL
+#else
+#define BOOST_WAVE_NEW_LEXER_DECL
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// new_lexer_gen: generates a new instance of the required C++ lexer
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename TokenT> struct lex_input_interface;
+
+template <
+ typename IteratorT,
+ typename PositionT = boost::wave::util::file_position_type
+>
+struct BOOST_WAVE_NEW_LEXER_DECL new_lexer_gen
+{
+// The NewLexer function allows the opaque generation of a new lexer object.
+// It is coupled to the token type to allow to decouple the lexer/token
+// configurations at compile time.
+ static lex_input_interface<lex_token<PositionT> > *
+ new_lexer(IteratorT const &first, IteratorT const &last,
+ PositionT const &pos, boost::wave::language_support language);
+};
+
+#undef BOOST_WAVE_NEW_LEXER_DECL
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// The lex_input_interface decouples the lex_iterator_shim from the actual
+// lexer. This is done to allow compile time reduction.
+// Thanks to JCAB for having this idea.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+template <typename TokenT>
+struct lex_input_interface
+{
+ typedef typename TokenT::position_type position_type;
+
+ virtual TokenT get() = 0;
+ virtual void set_position(position_type const &pos) = 0;
+ virtual ~lex_input_interface() {}
+
+#if BOOST_WAVE_SUPPORT_PRAGMA_ONCE != 0
+ virtual bool has_include_guards(std::string& guard_name) const = 0;
+#endif
+
+// The new_lexer function allows the opaque generation of a new lexer object.
+// It is coupled to the token type to allow to distinguish different
+// lexer/token configurations at compile time.
+ template <typename IteratorT>
+ static lex_input_interface *
+ new_lexer(IteratorT const &first, IteratorT const &last,
+ position_type const &pos, boost::wave::language_support language)
+ {
+ return new_lexer_gen<IteratorT, position_type>::new_lexer (first, last,
+ pos, language);
+ }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace cpplexer
+} // namespace wave
+} // namespace boost
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+// the suffix header occurs after all of the code
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_SUFFIX
+#endif
+
+#endif // !defined(CPP_LEX_INTERFACE_HPP_E83F52A4_90AC_4FBE_A9A7_B65F7F94C497_INCLUDED)
diff --git a/boost/boost/wave/cpplexer/cpp_lex_iterator.hpp b/boost/boost/wave/cpplexer/cpp_lex_iterator.hpp
new file mode 100644
index 00000000000..a62c6311cb0
--- /dev/null
+++ b/boost/boost/wave/cpplexer/cpp_lex_iterator.hpp
@@ -0,0 +1,200 @@
+/*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+
+ Definition of the lexer iterator
+
+ http://www.boost.org/
+
+ Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(CPP_LEX_ITERATOR_HPP_AF0C37E3_CBD8_4F33_A225_51CF576FA61F_INCLUDED)
+#define CPP_LEX_ITERATOR_HPP_AF0C37E3_CBD8_4F33_A225_51CF576FA61F_INCLUDED
+
+#include <string>
+#include <iostream>
+
+#include <boost/assert.hpp>
+#include <boost/shared_ptr.hpp>
+#include <boost/spirit/iterator/multi_pass.hpp>
+
+#include <boost/wave/wave_config.hpp>
+#include <boost/wave/util/file_position.hpp>
+#include <boost/wave/util/functor_input.hpp>
+#include <boost/wave/cpplexer/cpp_lex_interface.hpp>
+
+#include <boost/wave/language_support.hpp>
+
+// this must occur after all of the includes and before any code appears
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_PREFIX
+#endif
+
+#if 0 != __COMO_VERSION__
+#define BOOST_WAVE_EOF_PREFIX static
+#else
+#define BOOST_WAVE_EOF_PREFIX
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace wave {
+namespace cpplexer {
+namespace impl {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// lex_iterator_functor_shim
+//
+///////////////////////////////////////////////////////////////////////////////
+
+template <typename TokenT>
+class lex_iterator_functor_shim
+{
+ typedef typename TokenT::position_type position_type;
+
+public:
+ template <typename IteratorT>
+ lex_iterator_functor_shim(IteratorT const &first, IteratorT const &last,
+ position_type const &pos, boost::wave::language_support language)
+ : functor_ptr(lex_input_interface<TokenT>
+ ::new_lexer(first, last, pos, language))
+#if 0 != __DECCXX_VER || BOOST_INTEL_CXX_VERSION >= 900
+ , eof()
+#endif // 0 != __DECCXX_VER
+ {}
+
+// interface to the boost::spirit::multi_pass_policies::functor_input policy
+ typedef TokenT result_type;
+
+ BOOST_WAVE_EOF_PREFIX result_type const eof;
+
+ result_type operator()()
+ {
+ BOOST_ASSERT(0 != functor_ptr.get());
+ return functor_ptr->get();
+ }
+ void set_position(position_type const &pos)
+ {
+ BOOST_ASSERT(0 != functor_ptr.get());
+ functor_ptr->set_position(pos);
+ }
+#if BOOST_WAVE_SUPPORT_PRAGMA_ONCE != 0
+ bool has_include_guards(std::string& guard_name) const
+ {
+ return functor_ptr->has_include_guards(guard_name);
+ }
+#endif
+
+private:
+ boost::shared_ptr<lex_input_interface<TokenT> > functor_ptr;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// eof token
+#if 0 != __COMO_VERSION__
+template <typename TokenT>
+typename lex_iterator_functor_shim<TokenT>::result_type const
+ lex_iterator_functor_shim<TokenT>::eof;
+#endif // 0 != __COMO_VERSION__
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace impl
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// lex_iterator
+//
+// A generic C++ lexer interface class, which allows to plug in different
+// lexer implementations. The interface between the lexer type used and
+// the preprocessor component depends on the token type only (template
+// parameter TokenT).
+// Additionally, the following requirements apply:
+//
+// - the lexer type should have a function implemented, which returnes
+// the next lexed token from the input stream:
+// typename TokenT get();
+// - at the end of the input stream this function should return the
+// eof token equivalent
+// - the lexer should implement a constructor taking two iterators
+// pointing to the beginning and the end of the input stream,
+// a third parameter containing the name of the parsed input file
+// and a 4th parameter of the type boost::wave::language_support
+// which specifies, which language subset should be supported (C++,
+// C99, C++0x etc.).
+//
+///////////////////////////////////////////////////////////////////////////////
+
+template <typename TokenT>
+class lex_iterator
+: public boost::spirit::multi_pass<
+ impl::lex_iterator_functor_shim<TokenT>,
+ boost::wave::util::functor_input
+ >
+{
+ typedef impl::lex_iterator_functor_shim<TokenT> input_policy_type;
+ typedef
+ boost::spirit::multi_pass<input_policy_type,
+ boost::wave::util::functor_input>
+ base_type;
+
+public:
+ typedef TokenT token_type;
+
+ lex_iterator()
+ {}
+
+ template <typename IteratorT>
+ lex_iterator(IteratorT const &first, IteratorT const &last,
+ typename TokenT::position_type const &pos,
+ boost::wave::language_support language)
+ : base_type(input_policy_type(first, last, pos, language))
+ {}
+
+ void set_position(typename TokenT::position_type const &pos)
+ {
+ typedef typename TokenT::position_type position_type;
+
+ // set the new position in the current token
+ token_type& currtoken = base_type::get_input();
+ position_type currpos = currtoken.get_position();
+
+ currpos.set_file(pos.get_file());
+ currpos.set_line(pos.get_line());
+ currtoken.set_position(currpos);
+
+ // set the new position for future tokens as well
+ if (token_type::string_type::npos !=
+ currtoken.get_value().find_first_of('\n'))
+ {
+ currpos.set_line(pos.get_line() + 1);
+ }
+ base_type::get_functor().set_position(currpos);
+ }
+
+#if BOOST_WAVE_SUPPORT_PRAGMA_ONCE != 0
+ // return, whether the current file has include guards
+ // this function returns meaningful results only if the file was scanned
+ // completely
+ bool has_include_guards(std::string& guard_name) const
+ {
+ return base_type::get_functor().has_include_guards(guard_name);
+ }
+#endif
+};
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace cpplexer
+} // namespace wave
+} // namespace boost
+
+// the suffix header occurs after all of the code
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_SUFFIX
+#endif
+
+#undef BOOST_WAVE_EOF_PREFIX
+
+#endif // !defined(CPP_LEX_ITERATOR_HPP_AF0C37E3_CBD8_4F33_A225_51CF576FA61F_INCLUDED)
diff --git a/boost/boost/wave/cpplexer/cpp_lex_token.hpp b/boost/boost/wave/cpplexer/cpp_lex_token.hpp
new file mode 100644
index 00000000000..64c22bbe717
--- /dev/null
+++ b/boost/boost/wave/cpplexer/cpp_lex_token.hpp
@@ -0,0 +1,281 @@
+/*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+
+ A generic C++ lexer token definition
+
+ http://www.boost.org/
+
+ Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(CPP_TOKEN_HPP_53A13BD2_FBAA_444B_9B8B_FCB225C2BBA8_INCLUDED)
+#define CPP_TOKEN_HPP_53A13BD2_FBAA_444B_9B8B_FCB225C2BBA8_INCLUDED
+
+#include <boost/wave/wave_config.hpp>
+#if BOOST_WAVE_SERIALIZATION != 0
+#include <boost/serialization/serialization.hpp>
+#endif
+#include <boost/wave/util/file_position.hpp>
+#include <boost/wave/token_ids.hpp>
+#include <boost/wave/language_support.hpp>
+
+#include <boost/pool/singleton_pool.hpp>
+
+// this must occur after all of the includes and before any code appears
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_PREFIX
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace wave {
+namespace cpplexer {
+
+namespace impl {
+
+template <typename StringTypeT, typename PositionT>
+class token_data
+{
+public:
+ typedef StringTypeT string_type;
+ typedef PositionT position_type;
+
+ token_data()
+ : id(T_EOI), refcnt(1)
+ {}
+
+ token_data(token_id id_, string_type const &value_, position_type const &pos_)
+ : id(id_), value(value_), pos(pos_), refcnt(1)
+ {}
+
+ token_data(token_data const& rhs)
+ : id(rhs.id), value(rhs.value), pos(rhs.pos), refcnt(1)
+ {}
+
+ ~token_data()
+ {}
+
+ std::size_t addref() { return ++refcnt; }
+ std::size_t release() { return --refcnt; }
+ std::size_t get_refcnt() const { return refcnt; }
+
+// accessors
+ operator token_id() const { return id; }
+ string_type const &get_value() const { return value; }
+ position_type const &get_position() const { return pos; }
+
+ void set_token_id (token_id id_) { id = id_; }
+ void set_value (string_type const &value_) { value = value_; }
+ void set_position (position_type const &pos_) { pos = pos_; }
+
+ friend bool operator== (token_data const& lhs, token_data const& rhs)
+ {
+ // two tokens are considered equal even if they refer to different
+ // positions
+ return (lhs.id == rhs.id && lhs.value == rhs.value) ? true : false;
+ }
+
+ static void *operator new(std::size_t size);
+ static void operator delete(void *p, std::size_t size);
+
+#if defined(BOOST_SPIRIT_DEBUG)
+// debug support
+ void print (std::ostream &stream) const
+ {
+ stream << get_token_name(id) << "(";
+ for (std::size_t i = 0; i < value.size(); ++i) {
+ switch (value[i]) {
+ case '\r': stream << "\\r"; break;
+ case '\n': stream << "\\n"; break;
+ default:
+ stream << value[i];
+ break;
+ }
+ }
+ stream << ")";
+ }
+#endif // defined(BOOST_SPIRIT_DEBUG)
+
+#if BOOST_WAVE_SERIALIZATION != 0
+ friend class boost::serialization::access;
+ template<typename Archive>
+ void serialize(Archive &ar, const unsigned int version)
+ {
+ ar & id;
+ ar & value;
+ ar & pos;
+ }
+#endif
+
+private:
+ token_id id; // the token id
+ string_type value; // the text, which was parsed into this token
+ position_type pos; // the original file position
+ std::size_t refcnt;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+struct token_data_tag {};
+
+template <typename StringTypeT, typename PositionT>
+inline void *
+token_data<StringTypeT, PositionT>::operator new(std::size_t size)
+{
+ BOOST_ASSERT(sizeof(token_data<StringTypeT, PositionT>) == size);
+ typedef boost::singleton_pool<
+ token_data_tag, sizeof(token_data<StringTypeT, PositionT>)
+ > pool_type;
+
+ void *ret = pool_type::malloc();
+ if (0 == ret)
+ throw std::bad_alloc();
+ return ret;
+}
+
+template <typename StringTypeT, typename PositionT>
+inline void
+token_data<StringTypeT, PositionT>::operator delete(void *p, std::size_t size)
+{
+ BOOST_ASSERT(sizeof(token_data<StringTypeT, PositionT>) == size);
+ typedef boost::singleton_pool<
+ token_data_tag, sizeof(token_data<StringTypeT, PositionT>)
+ > pool_type;
+
+ if (0 != p)
+ pool_type::free(p);
+}
+
+} // namespace impl
+
+///////////////////////////////////////////////////////////////////////////////
+// forward declaration of the token type
+template <typename PositionT = boost::wave::util::file_position_type>
+class lex_token;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// lex_token
+//
+///////////////////////////////////////////////////////////////////////////////
+
+template <typename PositionT>
+class lex_token
+{
+public:
+ typedef BOOST_WAVE_STRINGTYPE string_type;
+ typedef PositionT position_type;
+
+ lex_token()
+ : data(new impl::token_data<string_type, position_type>())
+ {}
+
+ lex_token(lex_token const& rhs)
+ : data(rhs.data)
+ {
+ data->addref();
+ }
+
+ lex_token(token_id id_, string_type const &value_, PositionT const &pos_)
+ : data(new impl::token_data<string_type, position_type>(id_, value_, pos_))
+ {}
+
+ ~lex_token()
+ {
+ if (0 == data->release())
+ delete data;
+ data = 0;
+ }
+
+ lex_token& operator=(lex_token const& rhs)
+ {
+ if (&rhs != this) {
+ if (0 == data->release())
+ delete data;
+
+ data = rhs.data;
+ data->addref();
+ }
+ return *this;
+ }
+
+// accessors
+ operator token_id() const { return token_id(*data); }
+ string_type const &get_value() const { return data->get_value(); }
+ position_type const &get_position() const { return data->get_position(); }
+
+ void set_token_id (token_id id_) { make_unique(); data->set_token_id(id_); }
+ void set_value (string_type const &value_) { make_unique(); data->set_value(value_); }
+ void set_position (position_type const &pos_) { make_unique(); data->set_position(pos_); }
+
+ friend bool operator== (lex_token const& lhs, lex_token const& rhs)
+ {
+ return *(lhs.data) == *(rhs.data);
+ }
+
+// debug support
+#if BOOST_WAVE_DUMP_PARSE_TREE != 0
+// access functions for the tree_to_xml functionality
+ static int get_token_id(lex_token const &t)
+ { return token_id(t); }
+ static string_type get_token_value(lex_token const &t)
+ { return t.get_value(); }
+#endif
+
+#if defined(BOOST_SPIRIT_DEBUG)
+// debug support
+ void print (std::ostream &stream) const
+ {
+ data->print(stream);
+ }
+#endif // defined(BOOST_SPIRIT_DEBUG)
+
+private:
+#if BOOST_WAVE_SERIALIZATION != 0
+ friend class boost::serialization::access;
+ template<typename Archive>
+ void serialize(Archive &ar, const unsigned int version)
+ {
+ data->serialize(ar, version);
+ }
+#endif
+
+ // make a unique copy of the current object
+ void make_unique()
+ {
+ if (1 == data->get_refcnt())
+ return;
+
+ impl::token_data<string_type, position_type> *newdata =
+ new impl::token_data<string_type, position_type>(*data);
+
+ data->release(); // release this reference, can't get zero
+ data = newdata;
+ }
+
+ impl::token_data<string_type, position_type> *data;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+#if defined(BOOST_SPIRIT_DEBUG)
+template <typename PositionT>
+inline std::ostream &
+operator<< (std::ostream &stream, lex_token<PositionT> const &object)
+{
+ object.print(stream);
+ return stream;
+}
+#endif // defined(BOOST_SPIRIT_DEBUG)
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace cpplexer
+} // namespace wave
+} // namespace boost
+
+// the suffix header occurs after all of the code
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_SUFFIX
+#endif
+
+#endif // !defined(CPP_TOKEN_HPP_53A13BD2_FBAA_444B_9B8B_FCB225C2BBA8_INCLUDED)
diff --git a/boost/boost/wave/cpplexer/cpplexer_exceptions.hpp b/boost/boost/wave/cpplexer/cpplexer_exceptions.hpp
new file mode 100644
index 00000000000..1366be361c0
--- /dev/null
+++ b/boost/boost/wave/cpplexer/cpplexer_exceptions.hpp
@@ -0,0 +1,250 @@
+/*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+
+ http://www.boost.org/
+
+ Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(CPPLEXER_EXCEPTIONS_HPP_1A09DE1A_6D1F_4091_AF7F_5F13AB0D31AB_INCLUDED)
+#define CPPLEXER_EXCEPTIONS_HPP_1A09DE1A_6D1F_4091_AF7F_5F13AB0D31AB_INCLUDED
+
+#include <exception>
+#include <string>
+
+#include <boost/assert.hpp>
+#include <boost/config.hpp>
+#include <boost/throw_exception.hpp>
+
+#include <boost/wave/wave_config.hpp>
+
+// this must occur after all of the includes and before any code appears
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_PREFIX
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// helper macro for throwing exceptions
+#if !defined(BOOST_WAVE_LEXER_THROW)
+#ifdef BOOST_NO_STRINGSTREAM
+#include <strstream>
+#define BOOST_WAVE_LEXER_THROW(cls, code, msg, line, column, name) \
+ { \
+ using namespace boost::wave; \
+ std::strstream stream; \
+ stream << cls::severity_text(cls::code) << ": " \
+ << cls::error_text(cls::code); \
+ if ((msg)[0] != 0) stream << ": " << (msg); \
+ stream << std::ends; \
+ std::string throwmsg = stream.str(); stream.freeze(false); \
+ boost::throw_exception(cls(throwmsg.c_str(), cls::code, line, column, \
+ name)); \
+ } \
+ /**/
+#else
+#include <sstream>
+#define BOOST_WAVE_LEXER_THROW(cls, code, msg, line, column, name) \
+ { \
+ using namespace boost::wave; \
+ std::stringstream stream; \
+ stream << cls::severity_text(cls::code) << ": " \
+ << cls::error_text(cls::code); \
+ if ((msg)[0] != 0) stream << ": " << (msg); \
+ stream << std::ends; \
+ boost::throw_exception(cls(stream.str().c_str(), cls::code, line, column, \
+ name)); \
+ } \
+ /**/
+#endif // BOOST_NO_STRINGSTREAM
+#endif // BOOST_WAVE_LEXER_THROW
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace wave {
+namespace cpplexer {
+
+///////////////////////////////////////////////////////////////////////////////
+// exception severity
+namespace util {
+
+ enum severity {
+ severity_remark = 0,
+ severity_warning,
+ severity_error,
+ severity_fatal
+ };
+
+ inline char const *
+ get_severity(severity level)
+ {
+ static char const *severity_text[] =
+ {
+ "remark", // severity_remark
+ "warning", // severity_warning
+ "error", // severity_error
+ "fatal error" // severity_fatal
+ };
+ BOOST_ASSERT(severity_remark <= level && level <= severity_fatal);
+ return severity_text[level];
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// cpplexer_exception, the base class for all specific C++ lexer exceptions
+class cpplexer_exception
+: public std::exception
+{
+public:
+ cpplexer_exception(int line_, int column_, char const *filename_) throw()
+ : line(line_), column(column_)
+ {
+ unsigned int off = 0;
+ while (off < sizeof(filename)-1 && *filename_)
+ filename[off++] = *filename_++;
+ filename[off] = 0;
+ }
+ ~cpplexer_exception() throw() {}
+
+ virtual char const *what() const throw() = 0; // to be overloaded
+ virtual char const *description() const throw() = 0;
+ virtual int get_errorcode() const throw() = 0;
+ virtual int get_severity() const throw() = 0;
+ virtual bool is_recoverable() const throw() = 0;
+
+ int line_no() const throw() { return line; }
+ int column_no() const throw() { return column; }
+ char const *file_name() const throw() { return filename; }
+
+protected:
+ char filename[512];
+ int line;
+ int column;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// lexing_exception error
+class lexing_exception :
+ public cpplexer_exception
+{
+public:
+ enum error_code {
+ unexpected_error = 0,
+ universal_char_invalid = 1,
+ universal_char_base_charset = 2,
+ universal_char_not_allowed = 3,
+ invalid_long_long_literal = 4,
+ generic_lexing_error = 5
+ };
+
+ lexing_exception(char const *what_, error_code code, int line_,
+ int column_, char const *filename_) throw()
+ : cpplexer_exception(line_, column_, filename_),
+ level(severity_level(code)), code(code)
+ {
+ unsigned int off = 0;
+ while (off < sizeof(buffer) && *what_)
+ buffer[off++] = *what_++;
+ buffer[off] = 0;
+ }
+ ~lexing_exception() throw() {}
+
+ virtual char const *what() const throw()
+ {
+ return "boost::wave::lexing_exception";
+ }
+ virtual char const *description() const throw()
+ {
+ return buffer;
+ }
+ virtual int get_severity() const throw()
+ {
+ return level;
+ }
+ virtual int get_errorcode() const throw()
+ {
+ return code;
+ }
+ virtual bool is_recoverable() const throw()
+ {
+ switch (get_errorcode()) {
+ case lexing_exception::universal_char_invalid:
+ case lexing_exception::universal_char_base_charset:
+ case lexing_exception::universal_char_not_allowed:
+ case lexing_exception::invalid_long_long_literal:
+ return true; // for now allow all exceptions to be recoverable
+
+ case lexing_exception::unexpected_error:
+ default:
+ break;
+ }
+ return false;
+ }
+
+ static char const *error_text(int code)
+ {
+ // error texts in this array must appear in the same order as the items in
+ // the error enum above
+ static char const *preprocess_exception_errors[] = {
+ "unexpected error (should not happen)", // unexpected_error
+ "universal character name specifies an invalid character", // universal_char_invalid
+ "a universal character name cannot designate a character in the "
+ "basic character set", // universal_char_base_charset
+ "this universal character is not allowed in an identifier", // universal_char_not_allowed
+ "long long suffixes are not allowed in pure C++ mode, "
+ "enable long_long mode to allow these", // invalid_long_long_literal
+ "generic lexing error" // generic_lexing_error
+ };
+ return preprocess_exception_errors[code];
+ }
+
+ static util::severity severity_level(int code)
+ {
+ static util::severity preprocess_exception_severity[] = {
+ util::severity_fatal, // unexpected_error
+ util::severity_error, // universal_char_invalid
+ util::severity_error, // universal_char_base_charset
+ util::severity_error, // universal_char_not_allowed
+ util::severity_warning, // invalid_long_long_literal
+ util::severity_error // generic_lexing_error
+ };
+ return preprocess_exception_severity[code];
+ }
+ static char const *severity_text(int code)
+ {
+ return util::get_severity(severity_level(code));
+ }
+
+private:
+ char buffer[512];
+ util::severity level;
+ error_code code;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// The is_recoverable() function allows to decide, whether it is possible
+// simply to continue after a given exception was thrown by Wave.
+//
+// This is kind of a hack to allow to recover from certain errors as long as
+// Wave doesn't provide better means of error recovery.
+//
+///////////////////////////////////////////////////////////////////////////////
+inline bool
+is_recoverable(lexing_exception const& e)
+{
+ return e.is_recoverable();
+}
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace cpplexer
+} // namespace wave
+} // namespace boost
+
+// the suffix header occurs after all of the code
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_SUFFIX
+#endif
+
+#endif // !defined(CPPLEXER_EXCEPTIONS_HPP_1A09DE1A_6D1F_4091_AF7F_5F13AB0D31AB_INCLUDED)
diff --git a/boost/boost/wave/cpplexer/detect_include_guards.hpp b/boost/boost/wave/cpplexer/detect_include_guards.hpp
new file mode 100644
index 00000000000..fcb5cf6a6b7
--- /dev/null
+++ b/boost/boost/wave/cpplexer/detect_include_guards.hpp
@@ -0,0 +1,263 @@
+/*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+
+ http://www.boost.org/
+
+ State machine detecting include guards in an included file.
+ This detects two forms of include guards:
+
+ #ifndef INCLUDE_GUARD_MACRO
+ #define INCLUDE_GUARD_MACRO
+ ...
+ #endif
+
+ or
+
+ if !defined(INCLUDE_GUARD_MACRO)
+ #define INCLUDE_GUARD_MACRO
+ ...
+ #endif
+
+ note, that the parenthesis are optional (i.e. !defined INCLUDE_GUARD_MACRO
+ will work as well). The code allows for any whitespace, newline and single
+ '#' tokens before the #if/#ifndef and after the final #endif.
+
+ Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(DETECT_INCLUDE_GUARDS_HK060304_INCLUDED)
+#define DETECT_INCLUDE_GUARDS_HK060304_INCLUDED
+
+#include <boost/wave/wave_config.hpp>
+#include <boost/wave/token_ids.hpp>
+
+// this must occur after all of the includes and before any code appears
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_PREFIX
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace wave {
+namespace cpplexer {
+
+template <typename Token>
+class include_guards
+{
+public:
+ include_guards()
+ : state(&include_guards::state_0), detected_guards(false),
+ current_state(true), if_depth(0)
+ {}
+
+ Token const& detect_guard(Token const& t)
+ { return current_state ? (this->*state)(t) : t; }
+ bool detected(std::string& guard_name_) const
+ {
+ if (detected_guards) {
+ guard_name_ = guard_name.c_str();
+ return true;
+ }
+ return false;
+ }
+
+private:
+ typedef Token const& state_type(Token const& t);
+ state_type include_guards::* state;
+
+ bool detected_guards;
+ bool current_state;
+ typename Token::string_type guard_name;
+ int if_depth;
+
+ state_type state_0, state_1, state_2, state_3, state_4, state_5;
+ state_type state_1a, state_1b, state_1c, state_1d, state_1e;
+
+ bool is_skippable(token_id id) const
+ {
+ return (T_POUND == BASE_TOKEN(id) ||
+ IS_CATEGORY(id, WhiteSpaceTokenType) ||
+ IS_CATEGORY(id, EOLTokenType));
+ }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// state 0: beginning of a file, tries to recognize #ifndef or #if tokens
+template <typename Token>
+inline Token const&
+include_guards<Token>::state_0(Token const& t)
+{
+ token_id id = token_id(t);
+ if (T_PP_IFNDEF == id)
+ state = &include_guards::state_1;
+ else if (T_PP_IF == id)
+ state = &include_guards::state_1a;
+ else if (!is_skippable(id))
+ current_state = false;
+ return t;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// state 1: found #ifndef, looking for T_IDENTIFIER
+template <typename Token>
+inline Token const&
+include_guards<Token>::state_1(Token const& t)
+{
+ token_id id = token_id(t);
+ if (T_IDENTIFIER == id) {
+ guard_name = t.get_value();
+ state = &include_guards::state_2;
+ }
+ else if (!is_skippable(id))
+ current_state = false;
+ return t;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// state 1a: found T_PP_IF, looking for T_NOT ("!")
+template <typename Token>
+inline Token const&
+include_guards<Token>::state_1a(Token const& t)
+{
+ token_id id = token_id(t);
+ if (T_NOT == BASE_TOKEN(id))
+ state = &include_guards::state_1b;
+ else if (!is_skippable(id))
+ current_state = false;
+ return t;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// state 1b: found T_NOT, looking for 'defined'
+template <typename Token>
+inline Token const&
+include_guards<Token>::state_1b(Token const& t)
+{
+ token_id id = token_id(t);
+ if (T_IDENTIFIER == id && t.get_value() == "defined")
+ state = &include_guards::state_1c;
+ else if (!is_skippable(id))
+ current_state = false;
+ return t;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// state 1c: found 'defined', looking for (optional) T_LEFTPAREN
+template <typename Token>
+inline Token const&
+include_guards<Token>::state_1c(Token const& t)
+{
+ token_id id = token_id(t);
+ if (T_LEFTPAREN == id)
+ state = &include_guards::state_1d;
+ else if (T_IDENTIFIER == id) {
+ guard_name = t.get_value();
+ state = &include_guards::state_2;
+ }
+ else if (!is_skippable(id))
+ current_state = false;
+ return t;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// state 1d: found T_LEFTPAREN, looking for T_IDENTIFIER guard
+template <typename Token>
+inline Token const&
+include_guards<Token>::state_1d(Token const& t)
+{
+ token_id id = token_id(t);
+ if (T_IDENTIFIER == id) {
+ guard_name = t.get_value();
+ state = &include_guards::state_1e;
+ }
+ else if (!is_skippable(id))
+ current_state = false;
+ return t;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// state 1e: found T_IDENTIFIER guard, looking for T_RIGHTPAREN
+template <typename Token>
+inline Token const&
+include_guards<Token>::state_1e(Token const& t)
+{
+ token_id id = token_id(t);
+ if (T_RIGHTPAREN == id)
+ state = &include_guards::state_2;
+ else if (!is_skippable(id))
+ current_state = false;
+ return t;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// state 2: found T_IDENTIFIER, looking for #define
+template <typename Token>
+inline Token const&
+include_guards<Token>::state_2(Token const& t)
+{
+ token_id id = token_id(t);
+ if (T_PP_DEFINE == id)
+ state = &include_guards::state_3;
+ else if (!is_skippable(id))
+ current_state = false;
+ return t;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// state 3: found #define, looking for T_IDENTIFIER as recognized by state 1
+template <typename Token>
+inline Token const&
+include_guards<Token>::state_3(Token const& t)
+{
+ token_id id = token_id(t);
+ if (T_IDENTIFIER == id && t.get_value() == guard_name)
+ state = &include_guards::state_4;
+ else if (!is_skippable(id))
+ current_state = false;
+ return t;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// state 4: found guard T_IDENTIFIER, looking for #endif
+template <typename Token>
+inline Token const&
+include_guards<Token>::state_4(Token const& t)
+{
+ token_id id = token_id(t);
+ if (T_PP_IF == id || T_PP_IFDEF == id || T_PP_IFNDEF == id)
+ ++if_depth;
+ else if (T_PP_ENDIF == id) {
+ if (if_depth > 0)
+ --if_depth;
+ else
+ state = &include_guards::state_5;
+ }
+ return t;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// state 5: found final #endif, looking for T_EOF
+template <typename Token>
+inline Token const&
+include_guards<Token>::state_5(Token const& t)
+{
+ token_id id = token_id(t);
+ if (T_EOF == id)
+ detected_guards = current_state;
+ else if (!is_skippable(id))
+ current_state = false;
+ return t;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace cpplexer
+} // namespace wave
+} // namespace boost
+
+// the suffix header occurs after all of the code
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_SUFFIX
+#endif
+
+#endif // !DETECT_INCLUDE_GUARDS_HK060304_INCLUDED
diff --git a/boost/boost/wave/cpplexer/re2clex/aq.hpp b/boost/boost/wave/cpplexer/re2clex/aq.hpp
new file mode 100644
index 00000000000..9732c16024e
--- /dev/null
+++ b/boost/boost/wave/cpplexer/re2clex/aq.hpp
@@ -0,0 +1,64 @@
+/*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+
+ http://www.boost.org/
+
+ Copyright (c) 2001 Daniel C. Nuffer.
+ Copyright (c) 2001-2007 Hartmut Kaiser.
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(AQ_HPP_A21D9145_B643_44C0_81E7_DB346DD67EE1_INCLUDED)
+#define AQ_HPP_A21D9145_B643_44C0_81E7_DB346DD67EE1_INCLUDED
+
+#include <boost/wave/wave_config.hpp>
+#include <cstdlib>
+
+// this must occur after all of the includes and before any code appears
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_PREFIX
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace wave {
+namespace cpplexer {
+namespace re2clex {
+
+typedef std::size_t aq_stdelement;
+
+typedef struct tag_aq_queuetype
+{
+ std::size_t head;
+ std::size_t tail;
+ std::size_t size;
+ std::size_t max_size;
+ aq_stdelement* queue;
+} aq_queuetype;
+
+typedef aq_queuetype* aq_queue;
+
+int aq_enqueue(aq_queue q, aq_stdelement e);
+int aq_enqueue_front(aq_queue q, aq_stdelement e);
+int aq_serve(aq_queue q, aq_stdelement *e);
+int aq_pop(aq_queue q);
+#define AQ_EMPTY(q) (q->size == 0)
+#define AQ_FULL(q) (q->size == q->max_size)
+int aq_grow(aq_queue q);
+
+BOOST_WAVE_DECL aq_queue aq_create(void);
+BOOST_WAVE_DECL void aq_terminate(aq_queue q);
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace re2clex
+} // namespace cpplexer
+} // namespace wave
+} // namespace boost
+
+// the suffix header occurs after all of the code
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_SUFFIX
+#endif
+
+#endif // !defined(AQ_HPP_A21D9145_B643_44C0_81E7_DB346DD67EE1_INCLUDED)
diff --git a/boost/boost/wave/cpplexer/re2clex/cpp_re.hpp b/boost/boost/wave/cpplexer/re2clex/cpp_re.hpp
new file mode 100644
index 00000000000..86fc3de92eb
--- /dev/null
+++ b/boost/boost/wave/cpplexer/re2clex/cpp_re.hpp
@@ -0,0 +1,55 @@
+/*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+
+ Re2C based C++ lexer
+
+ http://www.boost.org/
+
+ Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(CPP_RE_HPP_B76C4F5E_63E9_4B8A_9975_EC32FA6BF027_INCLUDED)
+#define CPP_RE_HPP_B76C4F5E_63E9_4B8A_9975_EC32FA6BF027_INCLUDED
+
+#include <boost/wave/wave_config.hpp>
+#include <boost/wave/token_ids.hpp>
+
+// this must occur after all of the includes and before any code appears
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_PREFIX
+#endif
+
+// suppress warnings about dependent classes not being exported from the dll
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable : 4251 4231 4660)
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace wave {
+namespace cpplexer {
+namespace re2clex {
+
+///////////////////////////////////////////////////////////////////////////////
+// The scanner function to call whenever a new token is requested
+BOOST_WAVE_DECL boost::wave::token_id scan(Scanner *s);
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace re2clex
+} // namespace cpplexer
+} // namespace wave
+} // namespace boost
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+// the suffix header occurs after all of the code
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_SUFFIX
+#endif
+
+#endif // !defined(CPP_RE_HPP_B76C4F5E_63E9_4B8A_9975_EC32FA6BF027_INCLUDED)
diff --git a/boost/boost/wave/cpplexer/re2clex/cpp_re2c_lexer.hpp b/boost/boost/wave/cpplexer/re2clex/cpp_re2c_lexer.hpp
new file mode 100644
index 00000000000..fb137252a17
--- /dev/null
+++ b/boost/boost/wave/cpplexer/re2clex/cpp_re2c_lexer.hpp
@@ -0,0 +1,408 @@
+/*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+
+ Re2C based C++ lexer
+
+ http://www.boost.org/
+
+ Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(CPP_RE2C_LEXER_HPP_B81A2629_D5B1_4944_A97D_60254182B9A8_INCLUDED)
+#define CPP_RE2C_LEXER_HPP_B81A2629_D5B1_4944_A97D_60254182B9A8_INCLUDED
+
+#include <string>
+#include <cstdio>
+#include <cstdarg>
+#if defined(BOOST_SPIRIT_DEBUG)
+#include <iostream>
+#endif // defined(BOOST_SPIRIT_DEBUG)
+
+#include <boost/concept_check.hpp>
+#include <boost/assert.hpp>
+#include <boost/spirit/core.hpp>
+
+#include <boost/wave/wave_config.hpp>
+#include <boost/wave/language_support.hpp>
+#include <boost/wave/token_ids.hpp>
+#include <boost/wave/util/file_position.hpp>
+#include <boost/wave/cpplexer/validate_universal_char.hpp>
+#include <boost/wave/cpplexer/cpplexer_exceptions.hpp>
+#include <boost/wave/cpplexer/token_cache.hpp>
+#include <boost/wave/cpplexer/convert_trigraphs.hpp>
+
+#include <boost/wave/cpplexer/cpp_lex_token.hpp>
+#include <boost/wave/cpplexer/cpp_lex_interface.hpp>
+#include <boost/wave/cpplexer/re2clex/scanner.hpp>
+#include <boost/wave/cpplexer/re2clex/cpp_re.hpp>
+#if BOOST_WAVE_SUPPORT_PRAGMA_ONCE != 0
+#include <boost/wave/cpplexer/detect_include_guards.hpp>
+#endif
+
+// this must occur after all of the includes and before any code appears
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_PREFIX
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace wave {
+namespace cpplexer {
+namespace re2clex {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// encapsulation of the re2c based cpp lexer
+//
+///////////////////////////////////////////////////////////////////////////////
+
+template <typename IteratorT, typename PositionT = boost::wave::util::file_position_type>
+class lexer
+{
+public:
+ typedef lex_token<PositionT> token_type;
+ typedef typename token_type::string_type string_type;
+
+ lexer(IteratorT const &first, IteratorT const &last,
+ PositionT const &pos, boost::wave::language_support language);
+ ~lexer();
+
+ lex_token<PositionT> get();
+ void set_position(PositionT const &pos)
+ {
+ // set position has to change the file name and line number only
+ filename = pos.get_file();
+ scanner.line = pos.get_line();
+// scanner.column = scanner.curr_column = pos.get_column();
+ scanner.file_name = filename.c_str();
+ }
+#if BOOST_WAVE_SUPPORT_PRAGMA_ONCE != 0
+ bool has_include_guards(std::string& guard_name) const
+ {
+ return guards.detected(guard_name);
+ }
+#endif
+
+// error reporting from the re2c generated lexer
+ static int report_error(Scanner const* s, char const *, ...);
+
+private:
+ static char const *tok_names[];
+
+ Scanner scanner;
+ string_type filename;
+ string_type value;
+ bool at_eof;
+ boost::wave::language_support language;
+#if BOOST_WAVE_SUPPORT_PRAGMA_ONCE != 0
+ include_guards<token_type> guards;
+#endif
+
+ static token_cache<string_type> const cache;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// initialize cpp lexer
+template <typename IteratorT, typename PositionT>
+inline
+lexer<IteratorT, PositionT>::lexer(IteratorT const &first,
+ IteratorT const &last, PositionT const &pos,
+ boost::wave::language_support language_)
+: filename(pos.get_file()), at_eof(false), language(language_)
+{
+ using namespace std; // some systems have memset in std
+ memset(&scanner, '\0', sizeof(Scanner));
+ scanner.eol_offsets = aq_create();
+ if (first != last) {
+ scanner.first = scanner.act = (uchar *)&(*first);
+ scanner.last = scanner.first + std::distance(first, last);
+ }
+ scanner.line = pos.get_line();
+ scanner.column = scanner.curr_column = pos.get_column();
+ scanner.error_proc = report_error;
+ scanner.file_name = filename.c_str();
+
+#if BOOST_WAVE_SUPPORT_MS_EXTENSIONS != 0
+ scanner.enable_ms_extensions = true;
+#else
+ scanner.enable_ms_extensions = false;
+#endif
+
+#if BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS != 0
+ scanner.act_in_c99_mode = boost::wave::need_c99(language);
+#endif
+
+#if BOOST_WAVE_SUPPORT_IMPORT_KEYWORD != 0
+ scanner.enable_import_keyword = !boost::wave::need_c99(language);
+#else
+ scanner.enable_import_keyword = false;
+#endif
+
+ scanner.detect_pp_numbers = boost::wave::need_prefer_pp_numbers(language);
+ scanner.single_line_only = boost::wave::need_single_line(language);
+}
+
+template <typename IteratorT, typename PositionT>
+inline
+lexer<IteratorT, PositionT>::~lexer()
+{
+ using namespace std; // some systems have free in std
+ aq_terminate(scanner.eol_offsets);
+ free(scanner.bot);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// get the next token from the input stream
+template <typename IteratorT, typename PositionT>
+inline lex_token<PositionT>
+lexer<IteratorT, PositionT>::get()
+{
+ if (at_eof)
+ return lex_token<PositionT>(); // return T_EOI
+
+ unsigned int actline = scanner.line;
+ token_id id = token_id(scan(&scanner));
+
+ switch (static_cast<unsigned int>(id)) {
+ case T_IDENTIFIER:
+ // test identifier characters for validity (throws if invalid chars found)
+ value = string_type((char const *)scanner.tok,
+ scanner.cur-scanner.tok);
+ if (!(language & support_option_no_character_validation))
+ impl::validate_identifier_name(value, actline, scanner.column, filename);
+ break;
+
+ case T_STRINGLIT:
+ case T_CHARLIT:
+ // test literal characters for validity (throws if invalid chars found)
+ value = string_type((char const *)scanner.tok,
+ scanner.cur-scanner.tok);
+ if (language & support_option_convert_trigraphs)
+ value = impl::convert_trigraphs(value);
+ if (!(language & support_option_no_character_validation))
+ impl::validate_literal(value, actline, scanner.column, filename);
+ break;
+
+#if BOOST_WAVE_SUPPORT_INCLUDE_NEXT != 0
+ case T_PP_HHEADER:
+ case T_PP_QHEADER:
+ case T_PP_INCLUDE:
+ // convert to the corresponding ..._next token, if appropriate
+ {
+ value = string_type((char const *)scanner.tok,
+ scanner.cur-scanner.tok);
+
+ // Skip '#' and whitespace and see whether we find an 'include_next' here.
+ typename string_type::size_type start = value.find("include");
+ if (value.compare(start, 12, "include_next", 12) == 0)
+ id = token_id(id | AltTokenType);
+ break;
+ }
+#endif
+
+ case T_LONGINTLIT: // supported in C99 and long_long mode
+ value = string_type((char const *)scanner.tok,
+ scanner.cur-scanner.tok);
+ if (!boost::wave::need_long_long(language)) {
+ // syntax error: not allowed in C++ mode
+ BOOST_WAVE_LEXER_THROW(lexing_exception, invalid_long_long_literal,
+ value.c_str(), actline, scanner.column, filename.c_str());
+ }
+ break;
+
+ case T_OCTALINT:
+ case T_DECIMALINT:
+ case T_HEXAINT:
+ case T_INTLIT:
+ case T_FLOATLIT:
+ case T_FIXEDPOINTLIT:
+ case T_CCOMMENT:
+ case T_CPPCOMMENT:
+ case T_SPACE:
+ case T_SPACE2:
+ case T_ANY:
+ case T_PP_NUMBER:
+ value = string_type((char const *)scanner.tok,
+ scanner.cur-scanner.tok);
+ break;
+
+ case T_EOF:
+ // T_EOF is returned as a valid token, the next call will return T_EOI,
+ // i.e. the actual end of input
+ at_eof = true;
+ value.clear();
+ break;
+
+ case T_OR_TRIGRAPH:
+ case T_XOR_TRIGRAPH:
+ case T_LEFTBRACE_TRIGRAPH:
+ case T_RIGHTBRACE_TRIGRAPH:
+ case T_LEFTBRACKET_TRIGRAPH:
+ case T_RIGHTBRACKET_TRIGRAPH:
+ case T_COMPL_TRIGRAPH:
+ case T_POUND_TRIGRAPH:
+ if (language & support_option_convert_trigraphs) {
+ value = cache.get_token_value(BASEID_FROM_TOKEN(id));
+ }
+ else {
+ value = string_type((char const *)scanner.tok,
+ scanner.cur-scanner.tok);
+ }
+ break;
+
+ case T_ANY_TRIGRAPH:
+ if (language & support_option_convert_trigraphs) {
+ value = impl::convert_trigraph(
+ string_type((char const *)scanner.tok));
+ }
+ else {
+ value = string_type((char const *)scanner.tok,
+ scanner.cur-scanner.tok);
+ }
+ break;
+
+ default:
+ if (CATEGORY_FROM_TOKEN(id) != EXTCATEGORY_FROM_TOKEN(id) ||
+ IS_CATEGORY(id, UnknownTokenType))
+ {
+ value = string_type((char const *)scanner.tok,
+ scanner.cur-scanner.tok);
+ }
+ else {
+ value = cache.get_token_value(id);
+ }
+ break;
+ }
+
+// std::cerr << boost::wave::get_token_name(id) << ": " << value << std::endl;
+
+ // the re2c lexer reports the new line number for newline tokens
+#if BOOST_WAVE_SUPPORT_PRAGMA_ONCE != 0
+ return guards.detect_guard(lex_token<PositionT>(id, value,
+ PositionT(filename, actline, scanner.column)));
+#else
+ return lex_token<PositionT>(id, value,
+ PositionT(filename, actline, scanner.column));
+#endif
+}
+
+template <typename IteratorT, typename PositionT>
+inline int
+lexer<IteratorT, PositionT>::report_error(Scanner const *s, char const *msg, ...)
+{
+ BOOST_ASSERT(0 != s);
+ BOOST_ASSERT(0 != msg);
+
+ using namespace std; // some system have vsprintf in namespace std
+
+ char buffer[200]; // should be large enough
+ va_list params;
+ va_start(params, msg);
+ vsprintf(buffer, msg, params);
+ va_end(params);
+
+ BOOST_WAVE_LEXER_THROW(lexing_exception, generic_lexing_error, buffer,
+ s->line, s->column, s->file_name);
+// BOOST_UNREACHABLE_RETURN(0);
+ return 0;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// lex_functor
+//
+///////////////////////////////////////////////////////////////////////////////
+
+template <typename IteratorT, typename PositionT = boost::wave::util::file_position_type>
+class lex_functor
+: public lex_input_interface<typename lexer<IteratorT, PositionT>::token_type>
+{
+public:
+
+ typedef typename lexer<IteratorT, PositionT>::token_type token_type;
+
+ lex_functor(IteratorT const &first, IteratorT const &last,
+ PositionT const &pos, boost::wave::language_support language)
+ : re2c_lexer(first, last, pos, language)
+ {}
+ virtual ~lex_functor() {}
+
+// get the next token from the input stream
+ token_type get() { return re2c_lexer.get(); }
+ void set_position(PositionT const &pos) { re2c_lexer.set_position(pos); }
+#if BOOST_WAVE_SUPPORT_PRAGMA_ONCE != 0
+ bool has_include_guards(std::string& guard_name) const
+ { return re2c_lexer.has_include_guards(guard_name); }
+#endif
+
+private:
+ lexer<IteratorT, PositionT> re2c_lexer;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+template <typename IteratorT, typename PositionT>
+token_cache<typename lexer<IteratorT, PositionT>::string_type> const
+ lexer<IteratorT, PositionT>::cache =
+ token_cache<typename lexer<IteratorT, PositionT>::string_type>();
+
+} // namespace re2clex
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// The new_lexer_gen<>::new_lexer function (declared in cpp_lex_interface.hpp)
+// should be defined inline, if the lex_functor shouldn't be instantiated
+// separately from the lex_iterator.
+//
+// Separate (explicit) instantiation helps to reduce compilation time.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#if BOOST_WAVE_SEPARATE_LEXER_INSTANTIATION != 0
+#define BOOST_WAVE_RE2C_NEW_LEXER_INLINE
+#else
+#define BOOST_WAVE_RE2C_NEW_LEXER_INLINE inline
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// The 'new_lexer' function allows the opaque generation of a new lexer object.
+// It is coupled to the iterator type to allow to decouple the lexer/iterator
+// configurations at compile time.
+//
+// This function is declared inside the cpp_lex_token.hpp file, which is
+// referenced by the source file calling the lexer and the source file, which
+// instantiates the lex_functor. But is is defined here, so it will be
+// instantiated only while compiling the source file, which instantiates the
+// lex_functor. While the cpp_re2c_token.hpp file may be included everywhere,
+// this file (cpp_re2c_lexer.hpp) should be included only once. This allows
+// to decouple the lexer interface from the lexer implementation and reduces
+// compilation time.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+template <typename IteratorT, typename PositionT>
+BOOST_WAVE_RE2C_NEW_LEXER_INLINE
+lex_input_interface<lex_token<PositionT> > *
+new_lexer_gen<IteratorT, PositionT>::new_lexer(IteratorT const &first,
+ IteratorT const &last, PositionT const &pos,
+ boost::wave::language_support language)
+{
+ using re2clex::lex_functor;
+ return new lex_functor<IteratorT, PositionT>(first, last, pos, language);
+}
+
+#undef BOOST_WAVE_RE2C_NEW_LEXER_INLINE
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace cpplexer
+} // namespace wave
+} // namespace boost
+
+// the suffix header occurs after all of the code
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_SUFFIX
+#endif
+
+#endif // !defined(CPP_RE2C_LEXER_HPP_B81A2629_D5B1_4944_A97D_60254182B9A8_INCLUDED)
diff --git a/boost/boost/wave/cpplexer/re2clex/scanner.hpp b/boost/boost/wave/cpplexer/re2clex/scanner.hpp
new file mode 100644
index 00000000000..05fcaa80c0a
--- /dev/null
+++ b/boost/boost/wave/cpplexer/re2clex/scanner.hpp
@@ -0,0 +1,72 @@
+/*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+
+ http://www.boost.org/
+
+ Copyright (c) 2001 Daniel C. Nuffer.
+ Copyright (c) 2001-2007 Hartmut Kaiser.
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(SCANNER_HPP_F4FB01EB_E75C_4537_A146_D34B9895EF37_INCLUDED)
+#define SCANNER_HPP_F4FB01EB_E75C_4537_A146_D34B9895EF37_INCLUDED
+
+#include <boost/wave/wave_config.hpp>
+#include <boost/wave/cpplexer/re2clex/aq.hpp>
+
+// this must occur after all of the includes and before any code appears
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_PREFIX
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace wave {
+namespace cpplexer {
+namespace re2clex {
+
+struct Scanner;
+typedef unsigned char uchar;
+typedef int (* ReportErrorProc)(struct Scanner const *, char const *, ...);
+
+typedef struct Scanner {
+ uchar* first; /* start of input buffer */
+ uchar* act; /* act position of input buffer */
+ uchar* last; /* end (one past last char) of input buffer */
+ uchar* bot; /* beginning of the current buffer */
+ uchar* top; /* top of the current buffer */
+ uchar* eof; /* when we read in the last buffer, will point 1 past the
+ end of the file, otherwise 0 */
+ uchar* tok; /* points to the beginning of the current token */
+ uchar* ptr; /* used for YYMARKER - saves backtracking info */
+ uchar* cur; /* saves the cursor (maybe is redundant with tok?) */
+ uchar* lim; /* used for YYLIMIT - points to the end of the buffer */
+ /* (lim == top) except for the last buffer, it points to
+ the end of the input (lim == eof - 1) */
+ unsigned int line; /* current line being lex'ed */
+ unsigned int column; /* current token start column position */
+ unsigned int curr_column; /* current column position */
+ ReportErrorProc error_proc; /* must be != 0, this function is called to
+ report an error */
+ char const *file_name; /* name of the lex'ed file */
+ aq_queue eol_offsets;
+ bool enable_ms_extensions; /* enable MS extensions */
+ bool act_in_c99_mode; /* lexer works in C99 mode */
+ bool detect_pp_numbers; /* lexer should prefer to detect pp-numbers */
+ bool enable_import_keyword; /* recognize import as a keyword */
+ bool single_line_only; /* don't report missing eol's in C++ comments */
+} Scanner;
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace re2clex
+} // namespace cpplexer
+} // namespace wave
+} // namespace boost
+
+// the suffix header occurs after all of the code
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_SUFFIX
+#endif
+
+#endif // !defined(SCANNER_HPP_F4FB01EB_E75C_4537_A146_D34B9895EF37_INCLUDED)
diff --git a/boost/boost/wave/cpplexer/token_cache.hpp b/boost/boost/wave/cpplexer/token_cache.hpp
new file mode 100644
index 00000000000..b136aa180ef
--- /dev/null
+++ b/boost/boost/wave/cpplexer/token_cache.hpp
@@ -0,0 +1,72 @@
+/*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+
+ http://www.boost.org/
+
+ Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(TOKEN_CACHE_HPP_4D2320B7_1D56_4113_A114_397E70FA438C_INCLUDED)
+#define TOKEN_CACHE_HPP_4D2320B7_1D56_4113_A114_397E70FA438C_INCLUDED
+
+#include <vector>
+
+#include <boost/wave/wave_config.hpp>
+#include <boost/wave/token_ids.hpp>
+
+// this must occur after all of the includes and before any code appears
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_PREFIX
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace wave {
+namespace cpplexer {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// The token_cache template is used to cache the tokens corresponding to the
+// keywords, operators and other constant language elements.
+//
+// This avoids repeated construction of these tokens, which is especially
+// effective when used in conjunction with a copy on write string
+// implementation (COW string).
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename StringT>
+class token_cache
+{
+public:
+ token_cache()
+ : cache(T_LAST_TOKEN - T_FIRST_TOKEN)
+ {
+ typename std::vector<StringT>::iterator it = cache.begin();
+ for (unsigned int i = T_FIRST_TOKEN; i < T_LAST_TOKEN; ++i, ++it)
+ {
+ *it = StringT(boost::wave::get_token_value(token_id(i)));
+ }
+ }
+
+ StringT const &get_token_value(token_id id) const
+ {
+ return cache[BASEID_FROM_TOKEN(id) - T_FIRST_TOKEN];
+ }
+
+private:
+ std::vector<StringT> cache;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace cpplexer
+} // namespace wave
+} // namespace boost
+
+// the suffix header occurs after all of the code
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_SUFFIX
+#endif
+
+#endif // !defined(TOKEN_CACHE_HPP_4D2320B7_1D56_4113_A114_397E70FA438C_INCLUDED)
diff --git a/boost/boost/wave/cpplexer/validate_universal_char.hpp b/boost/boost/wave/cpplexer/validate_universal_char.hpp
new file mode 100644
index 00000000000..db6f8053cc0
--- /dev/null
+++ b/boost/boost/wave/cpplexer/validate_universal_char.hpp
@@ -0,0 +1,322 @@
+/*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+
+ Grammar for universal character validation (see C++ standard: Annex E)
+
+ http://www.boost.org/
+
+ Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(VALIDATE_UNIVERSAL_CHAR_HPP_55F1B811_CD76_4C72_8344_CBC69CF3B339_INCLUDED)
+#define VALIDATE_UNIVERSAL_CHAR_HPP_55F1B811_CD76_4C72_8344_CBC69CF3B339_INCLUDED
+
+#include <boost/assert.hpp>
+
+#include <boost/wave/wave_config.hpp>
+#include <boost/wave/util/file_position.hpp>
+#include <boost/wave/cpplexer/cpplexer_exceptions.hpp>
+
+// this must occur after all of the includes and before any code appears
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_PREFIX
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace wave {
+namespace cpplexer {
+namespace impl {
+
+enum universal_char_type {
+ universal_char_type_valid = 0,
+ universal_char_type_invalid = 1,
+ universal_char_type_base_charset = 2,
+ universal_char_type_not_allowed_for_identifiers = 3
+};
+
+///////////////////////////////////////////////////////////////////////////
+//
+// is_range is a helper function for the classification by brute force
+// below
+//
+///////////////////////////////////////////////////////////////////////////
+inline bool
+in_range(unsigned long ch, unsigned long l, unsigned long u)
+{
+ return (l <= ch && ch <= u);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// classify_universal_char
+//
+// This function classifies an universal character value into 4 subranges:
+// universal_char_type_valid
+// the universal character value is valid for identifiers
+// universal_char_type_invalid
+// the universal character value is not valid for its usage inside
+// identifiers (see C++ Standard: 2.2.2 [lex.charset])
+// universal_char_type_base_charset
+// the universal character value designates a character from the base
+// character set
+// universal_char_type_not_allowed_for_identifiers
+// the universal character value is not allowed in an identifier
+//
+// Implementation note:
+// This classification isn't implemented very effectively here. This
+// function should be rewritten with some range run matching algorithm.
+//
+///////////////////////////////////////////////////////////////////////////////
+inline universal_char_type
+classify_universal_char (unsigned long ch)
+{
+// test for invalid characters
+ if (ch <= 0x0020 || in_range(ch, 0x007f, 0x009f))
+ return universal_char_type_invalid;
+
+// test for characters in the range of the base character set
+ if (in_range(ch, 0x0021, 0x005f) || in_range(ch, 0x0061, 0x007e))
+ return universal_char_type_base_charset;
+
+// test for additional valid character values (see C++ Standard: Annex E)
+ if (in_range(ch, 0x00c0, 0x00d6) || in_range(ch, 0x00d8, 0x00f6) ||
+ in_range(ch, 0x00f8, 0x01f5) || in_range(ch, 0x01fa, 0x0217) ||
+ in_range(ch, 0x0250, 0x02a8) || in_range(ch, 0x1e00, 0x1e9a) ||
+ in_range(ch, 0x1ea0, 0x1ef9))
+ {
+ return universal_char_type_valid; // Latin
+ }
+
+ if (0x0384 == ch || in_range(ch, 0x0388, 0x038a) ||
+ 0x038c == ch || in_range(ch, 0x038e, 0x03a1) ||
+ in_range(ch, 0x03a3, 0x03ce) || in_range(ch, 0x03d0, 0x03d6) ||
+ 0x03da == ch || 0x03dc == ch || 0x03de == ch || 0x03e0 == ch ||
+ in_range(ch, 0x03e2, 0x03f3) || in_range(ch, 0x1f00, 0x1f15) ||
+ in_range(ch, 0x1f18, 0x1f1d) || in_range(ch, 0x1f20, 0x1f45) ||
+ in_range(ch, 0x1f48, 0x1f4d) || in_range(ch, 0x1f50, 0x1f57) ||
+ 0x1f59 == ch || 0x1f5b == ch || 0x1f5d == ch ||
+ in_range(ch, 0x1f5f, 0x1f7d) || in_range(ch, 0x1f80, 0x1fb4) ||
+ in_range(ch, 0x1fb6, 0x1fbc) || in_range(ch, 0x1fc2, 0x1fc4) ||
+ in_range(ch, 0x1fc6, 0x1fcc) || in_range(ch, 0x1fd0, 0x1fd3) ||
+ in_range(ch, 0x1fd6, 0x1fdb) || in_range(ch, 0x1fe0, 0x1fec) ||
+ in_range(ch, 0x1ff2, 0x1ff4) || in_range(ch, 0x1ff6, 0x1ffc))
+ {
+ return universal_char_type_valid; // Greek
+ }
+
+ if (in_range(ch, 0x0401, 0x040d) || in_range(ch, 0x040f, 0x044f) ||
+ in_range(ch, 0x0451, 0x045c) || in_range(ch, 0x045e, 0x0481) ||
+ in_range(ch, 0x0490, 0x04c4) || in_range(ch, 0x04c7, 0x04c8) ||
+ in_range(ch, 0x04cb, 0x04cc) || in_range(ch, 0x04d0, 0x04eb) ||
+ in_range(ch, 0x04ee, 0x04f5) || in_range(ch, 0x04f8, 0x04f9))
+ {
+ return universal_char_type_valid; // Cyrillic
+ }
+
+ if (in_range(ch, 0x0531, 0x0556) || in_range(ch, 0x0561, 0x0587))
+ return universal_char_type_valid; // Armenian
+
+ if (in_range(ch, 0x05d0, 0x05ea) || in_range(ch, 0x05f0, 0x05f4))
+ return universal_char_type_valid; // Hebrew
+
+ if (in_range(ch, 0x0621, 0x063a) || in_range(ch, 0x0640, 0x0652) ||
+ in_range(ch, 0x0670, 0x06b7) || in_range(ch, 0x06ba, 0x06be) ||
+ in_range(ch, 0x06c0, 0x06ce) || in_range(ch, 0x06e5, 0x06e7))
+ {
+ return universal_char_type_valid; // Arabic
+ }
+
+ if (in_range(ch, 0x0905, 0x0939) || in_range(ch, 0x0958, 0x0962))
+ return universal_char_type_valid; // Devanagari
+
+ if (in_range(ch, 0x0985, 0x098c) || in_range(ch, 0x098f, 0x0990) ||
+ in_range(ch, 0x0993, 0x09a8) || in_range(ch, 0x09aa, 0x09b0) ||
+ 0x09b2 == ch || in_range(ch, 0x09b6, 0x09b9) ||
+ in_range(ch, 0x09dc, 0x09dd) || in_range(ch, 0x09df, 0x09e1) ||
+ in_range(ch, 0x09f0, 0x09f1))
+ {
+ return universal_char_type_valid; // Bengali
+ }
+
+ if (in_range(ch, 0x0a05, 0x0a0a) || in_range(ch, 0x0a0f, 0x0a10) ||
+ in_range(ch, 0x0a13, 0x0a28) || in_range(ch, 0x0a2a, 0x0a30) ||
+ in_range(ch, 0x0a32, 0x0a33) || in_range(ch, 0x0a35, 0x0a36) ||
+ in_range(ch, 0x0a38, 0x0a39) || in_range(ch, 0x0a59, 0x0a5c) ||
+ 0x0a5e == ch)
+ {
+ return universal_char_type_valid; // Gurmukhi
+ }
+
+ if (in_range(ch, 0x0a85, 0x0a8b) || 0x0a8d == ch ||
+ in_range(ch, 0x0a8f, 0x0a91) || in_range(ch, 0x0a93, 0x0aa8) ||
+ in_range(ch, 0x0aaa, 0x0ab0) || in_range(ch, 0x0ab2, 0x0ab3) ||
+ in_range(ch, 0x0ab5, 0x0ab9) || 0x0ae0 == ch)
+ {
+ return universal_char_type_valid; // Gujarati
+ }
+
+ if (in_range(ch, 0x0b05, 0x0b0c) || in_range(ch, 0x0b0f, 0x0b10) ||
+ in_range(ch, 0x0b13, 0x0b28) || in_range(ch, 0x0b2a, 0x0b30) ||
+ in_range(ch, 0x0b32, 0x0b33) || in_range(ch, 0x0b36, 0x0b39) ||
+ in_range(ch, 0x0b5c, 0x0b5d) || in_range(ch, 0x0b5f, 0x0b61))
+ {
+ return universal_char_type_valid; // Oriya
+ }
+
+ if (in_range(ch, 0x0b85, 0x0b8a) || in_range(ch, 0x0b8e, 0x0b90) ||
+ in_range(ch, 0x0b92, 0x0b95) || in_range(ch, 0x0b99, 0x0b9a) ||
+ 0x0b9c == ch || in_range(ch, 0x0b9e, 0x0b9f) ||
+ in_range(ch, 0x0ba3, 0x0ba4) || in_range(ch, 0x0ba8, 0x0baa) ||
+ in_range(ch, 0x0bae, 0x0bb5) || in_range(ch, 0x0bb7, 0x0bb9))
+ {
+ return universal_char_type_valid; // Tamil
+ }
+
+ if (in_range(ch, 0x0c05, 0x0c0c) || in_range(ch, 0x0c0e, 0x0c10) ||
+ in_range(ch, 0x0c12, 0x0c28) || in_range(ch, 0x0c2a, 0x0c33) ||
+ in_range(ch, 0x0c35, 0x0c39) || in_range(ch, 0x0c60, 0x0c61))
+ {
+ return universal_char_type_valid; // Telugu
+ }
+
+ if (in_range(ch, 0x0c85, 0x0c8c) || in_range(ch, 0x0c8e, 0x0c90) ||
+ in_range(ch, 0x0c92, 0x0ca8) || in_range(ch, 0x0caa, 0x0cb3) ||
+ in_range(ch, 0x0cb5, 0x0cb9) || in_range(ch, 0x0ce0, 0x0ce1))
+ {
+ return universal_char_type_valid; // Kannada
+ }
+
+ if (in_range(ch, 0x0d05, 0x0d0c) || in_range(ch, 0x0d0e, 0x0d10) ||
+ in_range(ch, 0x0d12, 0x0d28) || in_range(ch, 0x0d2a, 0x0d39) ||
+ in_range(ch, 0x0d60, 0x0d61))
+ {
+ return universal_char_type_valid; // Malayalam
+ }
+
+ if (in_range(ch, 0x0e01, 0x0e30) || in_range(ch, 0x0e32, 0x0e33) ||
+ in_range(ch, 0x0e40, 0x0e46) || in_range(ch, 0x0e4f, 0x0e5b))
+ {
+ return universal_char_type_valid; // Thai
+ }
+
+ return universal_char_type_not_allowed_for_identifiers;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// validate_identifier_name
+//
+// The validate_identifier_name function tests a given identifier name for
+// its validity with regard to eventually contained universal characters.
+// These should be in valid ranges (see the function
+// classify_universal_char above).
+//
+// If the identifier name contains invalid or not allowed universal
+// characters a corresponding lexing_exception is thrown.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename StringT>
+inline void
+validate_identifier_name (StringT const &name, int line, int column,
+ StringT const &file_name)
+{
+ using namespace std; // some systems have strtoul in namespace std::
+
+typename StringT::size_type pos = name.find_first_of('\\');
+
+ while (StringT::npos != pos) {
+ // the identifier name contains a backslash (must be universal char)
+ BOOST_ASSERT('u' == name[pos+1] || 'U' == name[pos+1]);
+
+ StringT uchar_val(name.substr(pos+2, ('u' == name[pos+1]) ? 4 : 8));
+ universal_char_type type =
+ classify_universal_char(strtoul(uchar_val.c_str(), 0, 16));
+
+ if (universal_char_type_valid != type) {
+ // an invalid char was found, so throw an exception
+ StringT error_uchar(name.substr(pos, ('u' == name[pos+1]) ? 6 : 10));
+
+ if (universal_char_type_invalid == type) {
+ BOOST_WAVE_LEXER_THROW(lexing_exception, universal_char_invalid,
+ error_uchar, line, column, file_name.c_str());
+ }
+ else if (universal_char_type_base_charset == type) {
+ BOOST_WAVE_LEXER_THROW(lexing_exception, universal_char_base_charset,
+ error_uchar, line, column, file_name.c_str());
+ }
+ else {
+ BOOST_WAVE_LEXER_THROW(lexing_exception, universal_char_not_allowed,
+ error_uchar, line, column, file_name.c_str());
+ }
+ }
+
+ // find next universal char (if appropriate)
+ pos = name.find_first_of('\\', pos+2);
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// validate_literal
+//
+// The validate_literal function tests a given string or character literal
+// for its validity with regard to eventually contained universal
+// characters. These should be in valid ranges (see the function
+// classify_universal_char above).
+//
+// If the string or character literal contains invalid or not allowed
+// universal characters a corresponding lexing_exception is thrown.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename StringT>
+inline void
+validate_literal (StringT const &name, int line, int column,
+ StringT const &file_name)
+{
+ using namespace std; // some systems have strtoul in namespace std::
+
+typename StringT::size_type pos = name.find_first_of('\\');
+
+ while (StringT::npos != pos) {
+ // the literal contains a backslash (may be universal char)
+ if ('u' == name[pos+1] || 'U' == name[pos+1]) {
+ StringT uchar_val(name.substr(pos+2, ('u' == name[pos+1]) ? 4 : 8));
+ universal_char_type type =
+ classify_universal_char(strtoul(uchar_val.c_str(), 0, 16));
+
+ if (universal_char_type_valid != type &&
+ universal_char_type_not_allowed_for_identifiers != type)
+ {
+ // an invalid char was found, so throw an exception
+ StringT error_uchar(name.substr(pos, ('u' == name[pos+1]) ? 6 : 10));
+
+ if (universal_char_type_invalid == type) {
+ BOOST_WAVE_LEXER_THROW(lexing_exception, universal_char_invalid,
+ error_uchar, line, column, file_name.c_str());
+ }
+ else {
+ BOOST_WAVE_LEXER_THROW(lexing_exception, universal_char_base_charset,
+ error_uchar, line, column, file_name.c_str());
+ }
+ }
+ }
+
+ // find next universal char (if appropriate)
+ pos = name.find_first_of('\\', pos+2);
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace impl
+} // namespace cpplexer
+} // namespace wave
+} // namespace boost
+
+// the suffix header occurs after all of the code
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_SUFFIX
+#endif
+
+#endif // !defined(VALIDATE_UNIVERSAL_CHAR_HPP_55F1B811_CD76_4C72_8344_CBC69CF3B339_INCLUDED)
diff --git a/boost/boost/wave/grammars/cpp_chlit_grammar.hpp b/boost/boost/wave/grammars/cpp_chlit_grammar.hpp
new file mode 100644
index 00000000000..cbaa8aa72eb
--- /dev/null
+++ b/boost/boost/wave/grammars/cpp_chlit_grammar.hpp
@@ -0,0 +1,345 @@
+/*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+
+ http://www.boost.org/
+
+ Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(CPP_CHLIT_GRAMMAR_HPP_9527D349_6592_449A_A409_42A001E6C64C_INCLUDED)
+#define CPP_CHLIT_GRAMMAR_HPP_9527D349_6592_449A_A409_42A001E6C64C_INCLUDED
+
+#include <limits> // sid::numeric_limits
+
+#include <boost/static_assert.hpp>
+#include <boost/cstdint.hpp>
+
+#include <boost/spirit/core.hpp>
+#include <boost/spirit/attribute/closure.hpp>
+#include <boost/spirit/dynamic/if.hpp>
+
+#include <boost/spirit/phoenix/operators.hpp>
+#include <boost/spirit/phoenix/primitives.hpp>
+#include <boost/spirit/phoenix/statements.hpp>
+#include <boost/spirit/phoenix/functions.hpp>
+
+#include <boost/wave/wave_config.hpp>
+#include <boost/wave/cpp_exceptions.hpp>
+#include <boost/wave/grammars/cpp_literal_grammar_gen.hpp>
+
+// this must occur after all of the includes and before any code appears
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_PREFIX
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Reusable grammar to parse a C++ style character literal
+//
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace wave {
+namespace grammars {
+
+namespace closures {
+
+ struct chlit_closure
+ : boost::spirit::closure<chlit_closure, boost::uint32_t, bool>
+ {
+ member1 value;
+ member2 long_lit;
+ };
+}
+
+namespace impl {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// compose a multibyte character literal
+//
+///////////////////////////////////////////////////////////////////////////////
+ struct compose_character_literal {
+
+ template <typename ResultT, typename A1, typename A2, typename A3>
+ struct result {
+
+ typedef void type;
+ };
+
+ void
+ operator()(boost::uint32_t& value, bool long_lit, bool& overflow,
+ boost::uint32_t character) const
+ {
+ // The following assumes that wchar_t is max. 32 Bit
+ BOOST_STATIC_ASSERT(sizeof(wchar_t) <= 4);
+
+ static boost::uint32_t masks[] = {
+ 0x000000ff, 0x0000ffff, 0x00ffffff, 0xffffffff
+ };
+ static boost::uint32_t overflow_masks[] = {
+ 0xff000000, 0xffff0000, 0xffffff00, 0xffffffff
+ };
+
+ if (long_lit) {
+ // make sure no overflow will occur below
+ if ((value & overflow_masks[sizeof(wchar_t)-1]) != 0) {
+ overflow |= true;
+ }
+ else {
+ // calculate the new value (avoiding a warning regarding
+ // shifting count >= size of the type)
+ value <<= CHAR_BIT * (sizeof(wchar_t)-1);
+ value <<= CHAR_BIT;
+ value |= character & masks[sizeof(wchar_t)-1];
+ }
+ }
+ else {
+ // make sure no overflow will occur below
+ if ((value & overflow_masks[sizeof(char)-1]) != 0) {
+ overflow |= true;
+ }
+ else {
+ // calculate the new value
+ value <<= CHAR_BIT * sizeof(char);
+ value |= character & masks[sizeof(char)-1];
+ }
+ }
+ }
+ };
+ phoenix::function<compose_character_literal> const compose;
+
+} // namespace impl
+
+///////////////////////////////////////////////////////////////////////////////
+// define, whether the rule's should generate some debug output
+#define TRACE_CHLIT_GRAMMAR \
+ bool(BOOST_SPIRIT_DEBUG_FLAGS_CPP & BOOST_SPIRIT_DEBUG_FLAGS_CHLIT_GRAMMAR) \
+ /**/
+
+struct chlit_grammar :
+ public boost::spirit::grammar<chlit_grammar,
+ closures::chlit_closure::context_t>
+{
+ chlit_grammar()
+ : overflow(false)
+ {
+ BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR_NAME(*this, "chlit_grammar",
+ TRACE_CHLIT_GRAMMAR);
+ }
+
+ // no need for copy constructor/assignment operator
+ chlit_grammar(chlit_grammar const&);
+ chlit_grammar& operator=(chlit_grammar const&);
+
+ template <typename ScannerT>
+ struct definition
+ {
+ typedef
+ boost::spirit::rule<ScannerT, closures::chlit_closure::context_t>
+ rule_t;
+
+ rule_t ch_lit;
+
+ definition(chlit_grammar const &self)
+ {
+ using namespace boost::spirit;
+ using namespace phoenix;
+
+ // special parsers for '\x..' and L'\x....'
+ typedef uint_parser<
+ unsigned int, 16, 1, 2 * sizeof(char)
+ > hex_char_parser_type;
+ typedef uint_parser<
+ unsigned int, 16, 1, 2 * sizeof(wchar_t)
+ > hex_wchar_parser_type;
+
+ // the rule for a character literal
+ ch_lit
+ = eps_p[self.value = val(0), self.long_lit = val(false)]
+ >> !ch_p('L')[self.long_lit = val(true)]
+ >> ch_p('\'')
+ >> +( (
+ ch_p('\\')
+ >> ( ch_p('a') // BEL
+ [
+ impl::compose(self.value, self.long_lit,
+ var(self.overflow), val(0x07))
+ ]
+ | ch_p('b') // BS
+ [
+ impl::compose(self.value, self.long_lit,
+ var(self.overflow), val(0x08))
+ ]
+ | ch_p('t') // HT
+ [
+ impl::compose(self.value, self.long_lit,
+ var(self.overflow), val(0x09))
+ ]
+ | ch_p('n') // NL
+ [
+ impl::compose(self.value, self.long_lit,
+ var(self.overflow), val(0x0a))
+ ]
+ | ch_p('v') // VT
+ [
+ impl::compose(self.value, self.long_lit,
+ var(self.overflow), val(0x0b))
+ ]
+ | ch_p('f') // FF
+ [
+ impl::compose(self.value, self.long_lit,
+ var(self.overflow), val(0x0c))
+ ]
+ | ch_p('r') // CR
+ [
+ impl::compose(self.value, self.long_lit,
+ var(self.overflow), val(0x0d))
+ ]
+ | ch_p('?')
+ [
+ impl::compose(self.value, self.long_lit,
+ var(self.overflow), val('?'))
+ ]
+ | ch_p('\'')
+ [
+ impl::compose(self.value, self.long_lit,
+ var(self.overflow), val('\''))
+ ]
+ | ch_p('\"')
+ [
+ impl::compose(self.value, self.long_lit,
+ var(self.overflow), val('\"'))
+ ]
+ | ch_p('\\')
+ [
+ impl::compose(self.value, self.long_lit,
+ var(self.overflow), val('\\'))
+ ]
+ | ch_p('x')
+ >> if_p(self.long_lit)
+ [
+ hex_wchar_parser_type()
+ [
+ impl::compose(self.value, self.long_lit,
+ var(self.overflow), arg1)
+ ]
+ ]
+ .else_p
+ [
+ hex_char_parser_type()
+ [
+ impl::compose(self.value, self.long_lit,
+ var(self.overflow), arg1)
+ ]
+ ]
+ | ch_p('u')
+ >> uint_parser<unsigned int, 16, 4, 4>()
+ [
+ impl::compose(self.value, self.long_lit,
+ var(self.overflow), arg1)
+ ]
+ | ch_p('U')
+ >> uint_parser<unsigned int, 16, 8, 8>()
+ [
+ impl::compose(self.value, self.long_lit,
+ var(self.overflow), arg1)
+ ]
+ | uint_parser<unsigned int, 8, 1, 3>()
+ [
+ impl::compose(self.value, self.long_lit,
+ var(self.overflow), arg1)
+ ]
+ )
+ )
+ | ~eps_p(ch_p('\'')) >> anychar_p
+ [
+ impl::compose(self.value, self.long_lit,
+ var(self.overflow), arg1)
+ ]
+ )
+ >> ch_p('\'')
+ ;
+
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(ch_lit, TRACE_CHLIT_GRAMMAR);
+ }
+
+ // start rule of this grammar
+ rule_t const& start() const
+ { return ch_lit; }
+ };
+
+ // flag signaling integer overflow during value composition
+ mutable bool overflow;
+};
+
+#undef TRACE_CHLIT_GRAMMAR
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// The following function is defined here, to allow the separation of
+// the compilation of the intlit_grammap from the function using it.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#if BOOST_WAVE_SEPARATE_GRAMMAR_INSTANTIATION != 0
+#define BOOST_WAVE_CHLITGRAMMAR_GEN_INLINE
+#else
+#define BOOST_WAVE_CHLITGRAMMAR_GEN_INLINE inline
+#endif
+
+template <typename TokenT>
+BOOST_WAVE_CHLITGRAMMAR_GEN_INLINE
+unsigned int
+chlit_grammar_gen<TokenT>::evaluate(TokenT const &token, value_error &status)
+{
+ using namespace boost::spirit;
+
+chlit_grammar g;
+boost::uint32_t result = 0;
+typename TokenT::string_type const &token_val = token.get_value();
+parse_info<typename TokenT::string_type::const_iterator> hit =
+ parse(token_val.begin(), token_val.end(), g[spirit_assign_actor(result)]);
+
+ if (!hit.hit) {
+ BOOST_WAVE_THROW(preprocess_exception, ill_formed_character_literal,
+ token_val.c_str(), token.get_position());
+ }
+ else {
+ // range check
+ if ('L' == token_val[0]) {
+ // recognized wide character
+ if (g.overflow ||
+ result > (unsigned long)(std::numeric_limits<wchar_t>::max)())
+ {
+ // out of range
+ status = error_character_overflow;
+ }
+ }
+ else {
+ // recognized narrow ('normal') character
+ if (g.overflow ||
+ result > (unsigned long)(std::numeric_limits<unsigned char>::max)())
+ {
+ // out of range
+ status = error_character_overflow;
+ }
+ }
+ }
+ return result;
+}
+
+#undef BOOST_WAVE_CHLITGRAMMAR_GEN_INLINE
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace grammars
+} // namespace wave
+} // namespace boost
+
+// the suffix header occurs after all of the code
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_SUFFIX
+#endif
+
+#endif // !defined(CPP_CHLIT_GRAMMAR_HPP_9527D349_6592_449A_A409_42A001E6C64C_INCLUDED)
diff --git a/boost/boost/wave/grammars/cpp_defined_grammar.hpp b/boost/boost/wave/grammars/cpp_defined_grammar.hpp
new file mode 100644
index 00000000000..f9822451919
--- /dev/null
+++ b/boost/boost/wave/grammars/cpp_defined_grammar.hpp
@@ -0,0 +1,190 @@
+/*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+
+ http://www.boost.org/
+
+ Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(CPP_DEFINED_GRAMMAR_HPP_F48287B2_DC67_40A8_B4A1_800EFBD67869_INCLUDED)
+#define CPP_DEFINED_GRAMMAR_HPP_F48287B2_DC67_40A8_B4A1_800EFBD67869_INCLUDED
+
+#include <boost/assert.hpp>
+#include <boost/spirit/core.hpp>
+#include <boost/spirit/attribute/closure.hpp>
+#if SPIRIT_VERSION >= 0x1700
+#include <boost/spirit/actor/assign_actor.hpp>
+#include <boost/spirit/actor/push_back_actor.hpp>
+#endif // SPIRIT_VERSION >= 0x1700
+
+#include <boost/wave/wave_config.hpp>
+#include <boost/wave/token_ids.hpp>
+#include <boost/wave/util/pattern_parser.hpp>
+#include <boost/wave/grammars/cpp_defined_grammar_gen.hpp>
+
+#if !defined(spirit_append_actor)
+#if SPIRIT_VERSION >= 0x1700
+#define spirit_append_actor(actor) boost::spirit::push_back_a(actor)
+#define spirit_assign_actor(actor) boost::spirit::assign_a(actor)
+#else
+#define spirit_append_actor(actor) boost::spirit::append(actor)
+#define spirit_assign_actor(actor) boost::spirit::assign(actor)
+#endif // SPIRIT_VERSION >= 0x1700
+#endif // !defined(spirit_append_actor)
+
+// this must occur after all of the includes and before any code appears
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_PREFIX
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace wave {
+namespace grammars {
+
+///////////////////////////////////////////////////////////////////////////////
+// define, whether the rule's should generate some debug output
+#define TRACE_CPP_DEFINED_GRAMMAR \
+ bool(BOOST_SPIRIT_DEBUG_FLAGS_CPP & BOOST_SPIRIT_DEBUG_FLAGS_DEFINED_GRAMMAR) \
+ /**/
+
+template <typename ContainerT>
+struct defined_grammar :
+ public boost::spirit::grammar<defined_grammar<ContainerT> >
+{
+ defined_grammar(ContainerT &result_seq_)
+ : result_seq(result_seq_)
+ {
+ BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR_NAME(*this, "defined_grammar",
+ TRACE_CPP_DEFINED_GRAMMAR);
+ }
+
+ template <typename ScannerT>
+ struct definition
+ {
+ typedef boost::spirit::rule<ScannerT> rule_t;
+
+ rule_t defined_op;
+ rule_t identifier;
+
+ definition(defined_grammar const &self)
+ {
+ using namespace boost::spirit;
+ using namespace boost::wave;
+ using namespace boost::wave::util;
+
+ defined_op // parens not required, see C++ standard 16.1.1
+ = ch_p(T_IDENTIFIER) // token contains 'defined'
+ >> (
+ ( ch_p(T_LEFTPAREN)
+ >> identifier
+ >> ch_p(T_RIGHTPAREN)
+ )
+ | identifier
+ )
+ ;
+
+ identifier
+ = ch_p(T_IDENTIFIER)
+ [
+ spirit_append_actor(self.result_seq)
+ ]
+ | pattern_p(KeywordTokenType, TokenTypeMask)
+ [
+ spirit_append_actor(self.result_seq)
+ ]
+ | pattern_p(OperatorTokenType|AltExtTokenType, ExtTokenTypeMask)
+ [
+ spirit_append_actor(self.result_seq)
+ ]
+ | pattern_p(BoolLiteralTokenType, TokenTypeMask)
+ [
+ spirit_append_actor(self.result_seq)
+ ]
+ ;
+
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(defined_op, TRACE_CPP_DEFINED_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(identifier, TRACE_CPP_DEFINED_GRAMMAR);
+ }
+
+ // start rule of this grammar
+ rule_t const& start() const
+ { return defined_op; }
+ };
+
+ ContainerT &result_seq;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+#undef TRACE_CPP_DEFINED_GRAMMAR
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// The following parse function is defined here, to allow the separation of
+// the compilation of the defined_grammar from the function
+// using it.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#if BOOST_WAVE_SEPARATE_GRAMMAR_INSTANTIATION != 0
+#define BOOST_WAVE_DEFINED_GRAMMAR_GEN_INLINE
+#else
+#define BOOST_WAVE_DEFINED_GRAMMAR_GEN_INLINE inline
+#endif
+
+// The parse_operator_define function is instantiated manually twice to
+// simplify the explicit specialization of this template. This way the user
+// has only to specify one template parameter (the lexer type) to correctly
+// formulate the required explicit specialization.
+// This results in no code overhead, because otherwise the function would be
+// generated by the compiler twice anyway.
+
+template <typename LexIteratorT>
+BOOST_WAVE_DEFINED_GRAMMAR_GEN_INLINE
+boost::spirit::parse_info<
+ typename defined_grammar_gen<LexIteratorT>::iterator1_t
+>
+defined_grammar_gen<LexIteratorT>::parse_operator_defined (
+ iterator1_t const &first, iterator1_t const &last,
+ token_sequence_type &found_qualified_name)
+{
+ using namespace boost::spirit;
+ using namespace boost::wave;
+
+ defined_grammar<token_sequence_type> g(found_qualified_name);
+ return boost::spirit::parse (
+ first, last, g, ch_p(T_SPACE) | ch_p(T_CCOMMENT));
+}
+
+template <typename LexIteratorT>
+BOOST_WAVE_DEFINED_GRAMMAR_GEN_INLINE
+boost::spirit::parse_info<
+ typename defined_grammar_gen<LexIteratorT>::iterator2_t
+>
+defined_grammar_gen<LexIteratorT>::parse_operator_defined (
+ iterator2_t const &first, iterator2_t const &last,
+ token_sequence_type &found_qualified_name)
+{
+ using namespace boost::spirit;
+ using namespace boost::wave;
+
+ defined_grammar<token_sequence_type> g(found_qualified_name);
+ return boost::spirit::parse (
+ first, last, g, ch_p(T_SPACE) | ch_p(T_CCOMMENT));
+}
+
+#undef BOOST_WAVE_DEFINED_GRAMMAR_GEN_INLINE
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace grammars
+} // namespace wave
+} // namespace boost
+
+// the suffix header occurs after all of the code
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_SUFFIX
+#endif
+
+#endif // !defined(CPP_DEFINED_GRAMMAR_HPP_F48287B2_DC67_40A8_B4A1_800EFBD67869_INCLUDED)
diff --git a/boost/boost/wave/grammars/cpp_defined_grammar_gen.hpp b/boost/boost/wave/grammars/cpp_defined_grammar_gen.hpp
new file mode 100644
index 00000000000..398ffdc17b8
--- /dev/null
+++ b/boost/boost/wave/grammars/cpp_defined_grammar_gen.hpp
@@ -0,0 +1,85 @@
+/*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+
+ http://www.boost.org/
+
+ Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(CPP_DEFINED_GRAMMAR_GEN_HPP_825BE9F5_98A3_400D_A97C_AD76B3B08632_INCLUDED)
+#define CPP_DEFINED_GRAMMAR_GEN_HPP_825BE9F5_98A3_400D_A97C_AD76B3B08632_INCLUDED
+
+#include <boost/wave/wave_config.hpp>
+
+#include <list>
+
+#include <boost/spirit/core/parser.hpp>
+#include <boost/pool/pool_alloc.hpp>
+
+#include <boost/wave/util/unput_queue_iterator.hpp>
+
+// this must occur after all of the includes and before any code appears
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_PREFIX
+#endif
+
+// suppress warnings about dependent classes not being exported from the dll
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable : 4251 4231 4660)
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace wave {
+namespace grammars {
+
+template <typename LexIteratorT>
+struct BOOST_WAVE_DECL defined_grammar_gen
+{
+ typedef typename LexIteratorT::token_type token_type;
+ typedef std::list<token_type, boost::fast_pool_allocator<token_type> >
+ token_sequence_type;
+
+// The parse_operator_defined function is instantiated manually twice to
+// simplify the explicit specialization of this template. This way the user
+// has only to specify one template parameter (the lexer iterator type) to
+// correctly formulate the required explicit specialization.
+// This results in no code overhead, because otherwise the function would be
+// generated by the compiler twice anyway.
+
+ typedef boost::wave::util::unput_queue_iterator<
+ typename token_sequence_type::iterator, token_type, token_sequence_type>
+ iterator1_t;
+
+ typedef boost::wave::util::unput_queue_iterator<
+ LexIteratorT, token_type, token_sequence_type>
+ iterator2_t;
+
+// parse the operator defined and return the found qualified name
+ static boost::spirit::parse_info<iterator1_t>
+ parse_operator_defined (iterator1_t const &first, iterator1_t const &last,
+ token_sequence_type &found_qualified_name);
+
+ static boost::spirit::parse_info<iterator2_t>
+ parse_operator_defined (iterator2_t const &first, iterator2_t const &last,
+ token_sequence_type &found_qualified_name);
+};
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace grammars
+} // namespace wave
+} // namespace boost
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+// the suffix header occurs after all of the code
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_SUFFIX
+#endif
+
+#endif // !defined(CPP_DEFINED_GRAMMAR_GEN_HPP_825BE9F5_98A3_400D_A97C_AD76B3B08632_INCLUDED)
diff --git a/boost/boost/wave/grammars/cpp_expression_grammar.hpp b/boost/boost/wave/grammars/cpp_expression_grammar.hpp
new file mode 100644
index 00000000000..68d23b6f9be
--- /dev/null
+++ b/boost/boost/wave/grammars/cpp_expression_grammar.hpp
@@ -0,0 +1,850 @@
+/*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+
+ http://www.boost.org/
+
+ Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(CPP_EXPRESSION_GRAMMAR_HPP_099CD1A4_A6C0_44BE_8F24_0B00F5BE5674_INCLUDED)
+#define CPP_EXPRESSION_GRAMMAR_HPP_099CD1A4_A6C0_44BE_8F24_0B00F5BE5674_INCLUDED
+
+#include <boost/assert.hpp>
+#include <boost/spirit/core.hpp>
+#include <boost/spirit/attribute/closure.hpp>
+#include <boost/spirit/dynamic/if.hpp>
+#if SPIRIT_VERSION >= 0x1700
+#include <boost/spirit/actor/assign_actor.hpp>
+#include <boost/spirit/actor/push_back_actor.hpp>
+#endif // SPIRIT_VERSION >= 0x1700
+
+#include <boost/spirit/phoenix/functions.hpp>
+#include <boost/spirit/phoenix/operators.hpp>
+#include <boost/spirit/phoenix/primitives.hpp>
+#include <boost/spirit/phoenix/statements.hpp>
+#include <boost/spirit/phoenix/casts.hpp>
+
+#include <boost/wave/wave_config.hpp>
+#include <boost/wave/token_ids.hpp>
+
+#include <boost/wave/cpp_exceptions.hpp>
+#include <boost/wave/grammars/cpp_expression_grammar_gen.hpp>
+#include <boost/wave/grammars/cpp_literal_grammar_gen.hpp>
+#include <boost/wave/grammars/cpp_expression_value.hpp>
+#include <boost/wave/util/pattern_parser.hpp>
+#include <boost/wave/util/macro_helpers.hpp>
+
+#if !defined(spirit_append_actor)
+#if SPIRIT_VERSION >= 0x1700
+#define spirit_append_actor(actor) boost::spirit::push_back_a(actor)
+#define spirit_assign_actor(actor) boost::spirit::assign_a(actor)
+#else
+#define spirit_append_actor(actor) boost::spirit::append(actor)
+#define spirit_assign_actor(actor) boost::spirit::assign(actor)
+#endif // SPIRIT_VERSION >= 0x1700
+#endif // !defined(spirit_append_actor)
+
+// this must occur after all of the includes and before any code appears
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_PREFIX
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Encapsulation of the grammar for evaluation of constant preprocessor
+// expressions
+//
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace wave {
+namespace grammars {
+namespace closures {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// define the closure type used throughout the C++ expression grammar
+//
+// Throughout this grammar all literal tokens are stored into a
+// closure_value variables, which converts the types appropriately, where
+// required.
+//
+///////////////////////////////////////////////////////////////////////////////
+ struct cpp_expr_closure
+ : boost::spirit::closure<cpp_expr_closure, closure_value>
+ {
+ member1 val;
+ };
+
+} // namespace closures
+
+namespace impl {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// convert the given token value (integer literal) to a unsigned long
+//
+///////////////////////////////////////////////////////////////////////////////
+ struct convert_intlit {
+
+ template <typename ArgT>
+ struct result {
+
+ typedef boost::wave::grammars::closures::closure_value type;
+ };
+
+ template <typename TokenT>
+ boost::wave::grammars::closures::closure_value
+ operator()(TokenT const &token) const
+ {
+ typedef boost::wave::grammars::closures::closure_value return_type;
+ bool is_unsigned = false;
+ unsigned long ul = intlit_grammar_gen<TokenT>::evaluate(token,
+ is_unsigned);
+
+ return is_unsigned ?
+ return_type(ul) : return_type(static_cast<long>(ul));
+ }
+ };
+ phoenix::function<convert_intlit> const as_intlit;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// convert the given token value (character literal) to a unsigned int
+//
+///////////////////////////////////////////////////////////////////////////////
+ struct convert_chlit {
+
+ template <typename ArgT>
+ struct result {
+
+ typedef boost::wave::grammars::closures::closure_value type;
+ };
+
+ template <typename TokenT>
+ boost::wave::grammars::closures::closure_value
+ operator()(TokenT const &token) const
+ {
+ typedef boost::wave::grammars::closures::closure_value return_type;
+ value_error status = error_noerror;
+ unsigned int value = chlit_grammar_gen<TokenT>::evaluate(token, status);
+ return return_type(value, status);
+ }
+ };
+ phoenix::function<convert_chlit> const as_chlit;
+
+////////////////////////////////////////////////////////////////////////////////
+//
+// Handle the ?: operator with correct type and error propagation
+//
+////////////////////////////////////////////////////////////////////////////////
+ struct operator_questionmark {
+
+ template <typename CondT, typename Arg1T, typename Arg2T>
+ struct result {
+
+ typedef boost::wave::grammars::closures::closure_value type;
+ };
+
+ template <typename CondT, typename Arg1T, typename Arg2T>
+ boost::wave::grammars::closures::closure_value
+ operator()(CondT const &cond, Arg1T &val1, Arg2T const &val2) const
+ {
+ return val1.handle_questionmark(cond, val2);
+ }
+ };
+ phoenix::function<operator_questionmark> const questionmark;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Handle type conversion conserving error conditions
+//
+///////////////////////////////////////////////////////////////////////////////
+ struct operator_to_bool {
+
+ template <typename ArgT>
+ struct result {
+
+ typedef boost::wave::grammars::closures::closure_value type;
+ };
+
+ template <typename ArgT>
+ boost::wave::grammars::closures::closure_value
+ operator()(ArgT &val) const
+ {
+ typedef boost::wave::grammars::closures::closure_value return_type;
+ return return_type(
+ boost::wave::grammars::closures::as_bool(val), val.is_valid());
+ }
+ };
+ phoenix::function<operator_to_bool> const to_bool;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Handle explicit type conversion
+//
+///////////////////////////////////////////////////////////////////////////////
+ struct operator_as_bool {
+
+ template <typename ArgT>
+ struct result {
+
+ typedef bool type;
+ };
+
+ template <typename ArgT>
+ bool
+ operator()(ArgT &val) const
+ {
+ return boost::wave::grammars::closures::as_bool(val);
+ }
+ };
+ phoenix::function<operator_as_bool> const as_bool;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Handle closure value operators with proper error propagation
+//
+///////////////////////////////////////////////////////////////////////////////
+#define BOOST_WAVE_BINARYOP(op, optok) \
+ struct operator_binary_ ## op { \
+ \
+ template <typename Arg1T, typename Arg2T> \
+ struct result { \
+ \
+ typedef boost::wave::grammars::closures::closure_value type; \
+ }; \
+ \
+ template <typename Arg1T, typename Arg2T> \
+ boost::wave::grammars::closures::closure_value \
+ operator()(Arg1T &val1, Arg2T &val2) const \
+ { \
+ return val1 optok val2; \
+ } \
+ }; \
+ phoenix::function<operator_binary_ ## op> const binary_ ## op \
+ /**/
+
+ BOOST_WAVE_BINARYOP(and, &&);
+ BOOST_WAVE_BINARYOP(or, ||);
+
+ BOOST_WAVE_BINARYOP(bitand, &);
+ BOOST_WAVE_BINARYOP(bitor, |);
+ BOOST_WAVE_BINARYOP(bitxor, ^);
+
+ BOOST_WAVE_BINARYOP(lesseq, <=);
+ BOOST_WAVE_BINARYOP(less, <);
+ BOOST_WAVE_BINARYOP(greater, >);
+ BOOST_WAVE_BINARYOP(greateq, >=);
+ BOOST_WAVE_BINARYOP(eq, ==);
+ BOOST_WAVE_BINARYOP(ne, !=);
+
+#undef BOOST_WAVE_BINARYOP
+
+///////////////////////////////////////////////////////////////////////////////
+#define BOOST_WAVE_UNARYOP(op, optok) \
+ struct operator_unary_ ## op { \
+ \
+ template <typename ArgT> \
+ struct result { \
+ \
+ typedef boost::wave::grammars::closures::closure_value type; \
+ }; \
+ \
+ template <typename ArgT> \
+ boost::wave::grammars::closures::closure_value \
+ operator()(ArgT &val) const \
+ { \
+ return optok val; \
+ } \
+ }; \
+ phoenix::function<operator_unary_ ## op> const unary_ ## op \
+ /**/
+
+ BOOST_WAVE_UNARYOP(neg, !);
+
+#undef BOOST_WAVE_UNARYOP
+
+} // namespace impl
+
+///////////////////////////////////////////////////////////////////////////////
+// define, whether the rule's should generate some debug output
+#define TRACE_CPP_EXPR_GRAMMAR \
+ bool(BOOST_SPIRIT_DEBUG_FLAGS_CPP & BOOST_SPIRIT_DEBUG_FLAGS_CPP_EXPR_GRAMMAR) \
+ /**/
+
+struct expression_grammar :
+ public boost::spirit::grammar<
+ expression_grammar,
+ closures::cpp_expr_closure::context_t
+ >
+{
+ expression_grammar()
+ {
+ BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR_NAME(*this, "expression_grammar",
+ TRACE_CPP_EXPR_GRAMMAR);
+ }
+
+ // no need for copy constructor/assignment operator
+ expression_grammar(expression_grammar const&);
+ expression_grammar& operator= (expression_grammar const&);
+
+ template <typename ScannerT>
+ struct definition
+ {
+ typedef closures::cpp_expr_closure closure_type;
+ typedef boost::spirit::rule<ScannerT, closure_type::context_t> rule_t;
+ typedef boost::spirit::rule<ScannerT> simple_rule_t;
+
+ simple_rule_t pp_expression;
+
+ rule_t const_exp;
+ rule_t logical_or_exp, logical_and_exp;
+ rule_t inclusive_or_exp, exclusive_or_exp, and_exp;
+ rule_t cmp_equality, cmp_relational;
+ rule_t shift_exp;
+ rule_t add_exp, multiply_exp;
+ rule_t unary_exp, primary_exp, constant;
+
+ rule_t const_exp_nocalc;
+ rule_t logical_or_exp_nocalc, logical_and_exp_nocalc;
+ rule_t inclusive_or_exp_nocalc, exclusive_or_exp_nocalc, and_exp_nocalc;
+ rule_t cmp_equality_nocalc, cmp_relational_nocalc;
+ rule_t shift_exp_nocalc;
+ rule_t add_exp_nocalc, multiply_exp_nocalc;
+ rule_t unary_exp_nocalc, primary_exp_nocalc, constant_nocalc;
+
+ boost::spirit::subrule<0, closure_type::context_t> const_exp_subrule;
+
+ definition(expression_grammar const &self)
+ {
+ using namespace boost::spirit;
+ using namespace phoenix;
+ using namespace boost::wave;
+ using boost::wave::util::pattern_p;
+
+ pp_expression
+ = const_exp[self.val = arg1]
+ ;
+
+ const_exp
+ = logical_or_exp[const_exp.val = arg1]
+ >> !(const_exp_subrule =
+ ch_p(T_QUESTION_MARK)
+ >> const_exp
+ [
+ const_exp_subrule.val = arg1
+ ]
+ >> ch_p(T_COLON)
+ >> const_exp
+ [
+ const_exp_subrule.val =
+ impl::questionmark(const_exp.val,
+ const_exp_subrule.val, arg1)
+ ]
+ )[const_exp.val = arg1]
+ ;
+
+ logical_or_exp
+ = logical_and_exp[logical_or_exp.val = arg1]
+ >> *( if_p(impl::as_bool(logical_or_exp.val))
+ [
+ // if one of the || operators is true, no more
+ // evaluation is required
+ pattern_p(T_OROR, MainTokenMask)
+ >> logical_and_exp_nocalc
+ [
+ logical_or_exp.val =
+ impl::to_bool(logical_or_exp.val)
+ ]
+ ]
+ .else_p
+ [
+ pattern_p(T_OROR, MainTokenMask)
+ >> logical_and_exp
+ [
+ logical_or_exp.val =
+ impl::binary_or(logical_or_exp.val, arg1)
+ ]
+ ]
+ )
+ ;
+
+ logical_and_exp
+ = inclusive_or_exp[logical_and_exp.val = arg1]
+ >> *( if_p(impl::as_bool(logical_and_exp.val))
+ [
+ pattern_p(T_ANDAND, MainTokenMask)
+ >> inclusive_or_exp
+ [
+ logical_and_exp.val =
+ impl::binary_and(logical_and_exp.val, arg1)
+ ]
+ ]
+ .else_p
+ [
+ // if one of the && operators is false, no more
+ // evaluation is required
+ pattern_p(T_ANDAND, MainTokenMask)
+ >> inclusive_or_exp_nocalc
+ [
+ logical_and_exp.val =
+ impl::to_bool(logical_and_exp.val)
+ ]
+ ]
+ )
+ ;
+
+ inclusive_or_exp
+ = exclusive_or_exp[inclusive_or_exp.val = arg1]
+ >> *( pattern_p(T_OR, MainTokenMask)
+ >> exclusive_or_exp
+ [
+ inclusive_or_exp.val =
+ impl::binary_bitor(inclusive_or_exp.val, arg1)
+ ]
+ )
+ ;
+
+ exclusive_or_exp
+ = and_exp[exclusive_or_exp.val = arg1]
+ >> *( pattern_p(T_XOR, MainTokenMask)
+ >> and_exp
+ [
+ exclusive_or_exp.val =
+ impl::binary_bitxor(exclusive_or_exp.val, arg1)
+ ]
+ )
+ ;
+
+ and_exp
+ = cmp_equality[and_exp.val = arg1]
+ >> *( pattern_p(T_AND, MainTokenMask)
+ >> cmp_equality
+ [
+ and_exp.val =
+ impl::binary_bitand(and_exp.val, arg1)
+ ]
+ )
+ ;
+
+ cmp_equality
+ = cmp_relational[cmp_equality.val = arg1]
+ >> *( ch_p(T_EQUAL)
+ >> cmp_relational
+ [
+ cmp_equality.val =
+ impl::binary_eq(cmp_equality.val, arg1)
+ ]
+ | pattern_p(T_NOTEQUAL, MainTokenMask)
+ >> cmp_relational
+ [
+ cmp_equality.val =
+ impl::binary_ne(cmp_equality.val, arg1)
+ ]
+ )
+ ;
+
+ cmp_relational
+ = shift_exp[cmp_relational.val = arg1]
+ >> *( ch_p(T_LESSEQUAL)
+ >> shift_exp
+ [
+ cmp_relational.val =
+ impl::binary_lesseq(cmp_relational.val, arg1)
+ ]
+ | ch_p(T_GREATEREQUAL)
+ >> shift_exp
+ [
+ cmp_relational.val =
+ impl::binary_greateq(cmp_relational.val, arg1)
+ ]
+ | ch_p(T_LESS)
+ >> shift_exp
+ [
+ cmp_relational.val =
+ impl::binary_less(cmp_relational.val, arg1)
+ ]
+ | ch_p(T_GREATER)
+ >> shift_exp
+ [
+ cmp_relational.val =
+ impl::binary_greater(cmp_relational.val, arg1)
+ ]
+ )
+ ;
+
+ shift_exp
+ = add_exp[shift_exp.val = arg1]
+ >> *( ch_p(T_SHIFTLEFT)
+ >> add_exp
+ [
+ shift_exp.val <<= arg1
+ ]
+ | ch_p(T_SHIFTRIGHT)
+ >> add_exp
+ [
+ shift_exp.val >>= arg1
+ ]
+ )
+ ;
+
+ add_exp
+ = multiply_exp[add_exp.val = arg1]
+ >> *( ch_p(T_PLUS)
+ >> multiply_exp
+ [
+ add_exp.val += arg1
+ ]
+ | ch_p(T_MINUS)
+ >> multiply_exp
+ [
+ add_exp.val -= arg1
+ ]
+ )
+ ;
+
+ multiply_exp
+ = unary_exp[multiply_exp.val = arg1]
+ >> *( ch_p(T_STAR)
+ >> unary_exp
+ [
+ multiply_exp.val *= arg1
+ ]
+ | ch_p(T_DIVIDE)
+ >> unary_exp
+ [
+ multiply_exp.val /= arg1
+ ]
+ | ch_p(T_PERCENT)
+ >> unary_exp
+ [
+ multiply_exp.val %= arg1
+ ]
+ )
+ ;
+
+ unary_exp
+ = primary_exp[unary_exp.val = arg1]
+ | ch_p(T_PLUS) >> unary_exp
+ [
+ unary_exp.val = arg1
+ ]
+ | ch_p(T_MINUS) >> unary_exp
+ [
+ unary_exp.val = -arg1
+ ]
+ | pattern_p(T_COMPL, MainTokenMask) >> unary_exp
+ [
+ unary_exp.val = ~arg1
+ ]
+ | pattern_p(T_NOT, MainTokenMask) >> unary_exp
+ [
+ unary_exp.val = impl::unary_neg(arg1)
+ ]
+ ;
+
+ primary_exp
+ = constant[primary_exp.val = arg1]
+ | ch_p(T_LEFTPAREN)
+ >> const_exp[primary_exp.val = arg1]
+ >> ch_p(T_RIGHTPAREN)
+ ;
+
+ constant
+ = ch_p(T_PP_NUMBER)
+ [
+ constant.val = impl::as_intlit(arg1)
+ ]
+ | ch_p(T_INTLIT)
+ [
+ constant.val = impl::as_intlit(arg1)
+ ]
+ | ch_p(T_CHARLIT)
+ [
+ constant.val = impl::as_chlit(arg1)
+ ]
+ ;
+
+ // here follows the same grammar, but without any embedded
+ // calculations
+ const_exp_nocalc
+ = logical_or_exp_nocalc
+ >> !( ch_p(T_QUESTION_MARK)
+ >> const_exp_nocalc
+ >> ch_p(T_COLON)
+ >> const_exp_nocalc
+ )
+ ;
+
+ logical_or_exp_nocalc
+ = logical_and_exp_nocalc
+ >> *( pattern_p(T_OROR, MainTokenMask)
+ >> logical_and_exp_nocalc
+ )
+ ;
+
+ logical_and_exp_nocalc
+ = inclusive_or_exp_nocalc
+ >> *( pattern_p(T_ANDAND, MainTokenMask)
+ >> inclusive_or_exp_nocalc
+ )
+ ;
+
+ inclusive_or_exp_nocalc
+ = exclusive_or_exp_nocalc
+ >> *( pattern_p(T_OR, MainTokenMask)
+ >> exclusive_or_exp_nocalc
+ )
+ ;
+
+ exclusive_or_exp_nocalc
+ = and_exp_nocalc
+ >> *( pattern_p(T_XOR, MainTokenMask)
+ >> and_exp_nocalc
+ )
+ ;
+
+ and_exp_nocalc
+ = cmp_equality_nocalc
+ >> *( pattern_p(T_AND, MainTokenMask)
+ >> cmp_equality_nocalc
+ )
+ ;
+
+ cmp_equality_nocalc
+ = cmp_relational_nocalc
+ >> *( ch_p(T_EQUAL)
+ >> cmp_relational_nocalc
+ | pattern_p(T_NOTEQUAL, MainTokenMask)
+ >> cmp_relational_nocalc
+ )
+ ;
+
+ cmp_relational_nocalc
+ = shift_exp_nocalc
+ >> *( ch_p(T_LESSEQUAL)
+ >> shift_exp_nocalc
+ | ch_p(T_GREATEREQUAL)
+ >> shift_exp_nocalc
+ | ch_p(T_LESS)
+ >> shift_exp_nocalc
+ | ch_p(T_GREATER)
+ >> shift_exp_nocalc
+ )
+ ;
+
+ shift_exp_nocalc
+ = add_exp_nocalc
+ >> *( ch_p(T_SHIFTLEFT)
+ >> add_exp_nocalc
+ | ch_p(T_SHIFTRIGHT)
+ >> add_exp_nocalc
+ )
+ ;
+
+ add_exp_nocalc
+ = multiply_exp_nocalc
+ >> *( ch_p(T_PLUS)
+ >> multiply_exp_nocalc
+ | ch_p(T_MINUS)
+ >> multiply_exp_nocalc
+ )
+ ;
+
+ multiply_exp_nocalc
+ = unary_exp_nocalc
+ >> *( ch_p(T_STAR)
+ >> unary_exp_nocalc
+ | ch_p(T_DIVIDE)
+ >> unary_exp_nocalc
+ | ch_p(T_PERCENT)
+ >> unary_exp_nocalc
+ )
+ ;
+
+ unary_exp_nocalc
+ = primary_exp_nocalc
+ | ch_p(T_PLUS) >> unary_exp_nocalc
+ | ch_p(T_MINUS) >> unary_exp_nocalc
+ | pattern_p(T_COMPL, MainTokenMask) >> unary_exp_nocalc
+ | pattern_p(T_NOT, MainTokenMask) >> unary_exp_nocalc
+ ;
+
+ primary_exp_nocalc
+ = constant_nocalc
+ | ch_p(T_LEFTPAREN)
+ >> const_exp_nocalc
+ >> ch_p(T_RIGHTPAREN)
+ ;
+
+ constant_nocalc
+ = ch_p(T_PP_NUMBER)
+ | ch_p(T_INTLIT)
+ | ch_p(T_CHARLIT)
+ ;
+
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(pp_expression, TRACE_CPP_EXPR_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(const_exp, TRACE_CPP_EXPR_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(logical_or_exp, TRACE_CPP_EXPR_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(logical_and_exp, TRACE_CPP_EXPR_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(inclusive_or_exp, TRACE_CPP_EXPR_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(exclusive_or_exp, TRACE_CPP_EXPR_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(and_exp, TRACE_CPP_EXPR_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(cmp_equality, TRACE_CPP_EXPR_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(cmp_relational, TRACE_CPP_EXPR_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(shift_exp, TRACE_CPP_EXPR_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(add_exp, TRACE_CPP_EXPR_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(multiply_exp, TRACE_CPP_EXPR_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(unary_exp, TRACE_CPP_EXPR_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(primary_exp, TRACE_CPP_EXPR_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(constant, TRACE_CPP_EXPR_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(const_exp_subrule, TRACE_CPP_EXPR_GRAMMAR);
+
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(const_exp_nocalc, TRACE_CPP_EXPR_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(logical_or_exp_nocalc, TRACE_CPP_EXPR_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(logical_and_exp_nocalc, TRACE_CPP_EXPR_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(inclusive_or_exp_nocalc, TRACE_CPP_EXPR_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(exclusive_or_exp_nocalc, TRACE_CPP_EXPR_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(and_exp_nocalc, TRACE_CPP_EXPR_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(cmp_equality_nocalc, TRACE_CPP_EXPR_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(cmp_relational_nocalc, TRACE_CPP_EXPR_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(shift_exp_nocalc, TRACE_CPP_EXPR_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(add_exp_nocalc, TRACE_CPP_EXPR_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(multiply_exp_nocalc, TRACE_CPP_EXPR_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(unary_exp_nocalc, TRACE_CPP_EXPR_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(primary_exp_nocalc, TRACE_CPP_EXPR_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(constant_nocalc, TRACE_CPP_EXPR_GRAMMAR);
+ }
+
+ // start rule of this grammar
+ simple_rule_t const& start() const
+ { return pp_expression; }
+ };
+};
+
+///////////////////////////////////////////////////////////////////////////////
+#undef TRACE_CPP_EXPR_GRAMMAR
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// The following function is defined here, to allow the separation of
+// the compilation of the expression_grammar from the function using it.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#if BOOST_WAVE_SEPARATE_GRAMMAR_INSTANTIATION != 0
+#define BOOST_WAVE_EXPRGRAMMAR_GEN_INLINE
+#else
+#define BOOST_WAVE_EXPRGRAMMAR_GEN_INLINE inline
+#endif
+
+template <typename TokenT>
+BOOST_WAVE_EXPRGRAMMAR_GEN_INLINE
+bool
+expression_grammar_gen<TokenT>::evaluate(
+ typename token_sequence_type::const_iterator const &first,
+ typename token_sequence_type::const_iterator const &last,
+ typename token_type::position_type const &act_pos,
+ bool if_block_status, value_error &status)
+{
+ using namespace boost::spirit;
+ using namespace boost::wave;
+ using namespace boost::wave::grammars::closures;
+
+ using boost::wave::util::impl::as_string;
+
+ typedef typename token_sequence_type::const_iterator iterator_type;
+ typedef typename token_sequence_type::value_type::string_type string_type;
+
+ parse_info<iterator_type> hit(first);
+ closure_value result; // expression result
+
+ try {
+ expression_grammar g; // expression grammar
+ hit = parse (first, last, g[spirit_assign_actor(result)],
+ ch_p(T_SPACE) | ch_p(T_CCOMMENT) | ch_p(T_CPPCOMMENT));
+
+ if (!hit.hit) {
+ // expression is illformed
+ if (if_block_status) {
+ string_type expression = as_string<string_type>(first, last);
+ if (0 == expression.size())
+ expression = "<empty expression>";
+ BOOST_WAVE_THROW(preprocess_exception, ill_formed_expression,
+ expression.c_str(), act_pos);
+ }
+ else {
+ // as the if_block_status is false no errors will be reported
+ return false;
+ }
+ }
+ }
+ catch (wave::preprocess_exception const& e) {
+ // expression is illformed
+ if (if_block_status) {
+ boost::throw_exception(e);
+ }
+ else {
+ // as the if_block_status is false no errors will be reported
+ return false;
+ }
+ }
+
+ if (!hit.full) {
+ // The token list starts with a valid expression, but there remains
+ // something. If the remainder consists out of whitespace only, the
+ // expression is still valid.
+ iterator_type next = hit.stop;
+
+ while (next != last) {
+ switch (static_cast<unsigned int>(token_id(*next))) {
+ case T_SPACE:
+ case T_SPACE2:
+ case T_CCOMMENT:
+ break; // ok continue
+
+ case T_NEWLINE:
+ case T_EOF:
+ case T_CPPCOMMENT: // contains newline
+ return as_bool(result); // expression is valid
+
+ default:
+ // expression is illformed
+ if (if_block_status) {
+ string_type expression = as_string<string_type>(first, last);
+ if (0 == expression.size())
+ expression = "<empty expression>";
+ BOOST_WAVE_THROW(preprocess_exception, ill_formed_expression,
+ expression.c_str(), act_pos);
+ }
+ else {
+ // as the if_block_status is false no errors will be reported
+ return false;
+ }
+ }
+ ++next;
+ }
+ }
+
+ if (error_noerror != result.is_valid()) // division or other error by zero occurred
+ status = result.is_valid();
+
+// token sequence is a valid expression
+ return as_bool(result);
+}
+
+#undef BOOST_WAVE_EXPRGRAMMAR_GEN_INLINE
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace grammars
+} // namespace wave
+} // namespace boost
+
+// the suffix header occurs after all of the code
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_SUFFIX
+#endif
+
+#endif // !defined(CPP_EXPRESSION_GRAMMAR_HPP_099CD1A4_A6C0_44BE_8F24_0B00F5BE5674_INCLUDED)
diff --git a/boost/boost/wave/grammars/cpp_expression_grammar_gen.hpp b/boost/boost/wave/grammars/cpp_expression_grammar_gen.hpp
new file mode 100644
index 00000000000..6749235c537
--- /dev/null
+++ b/boost/boost/wave/grammars/cpp_expression_grammar_gen.hpp
@@ -0,0 +1,75 @@
+/*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+
+ http://www.boost.org/
+
+ Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(CPP_EXPRESSION_GRAMMAR_GEN_HPP_42399258_6CDC_4101_863D_5C7D95B5A6CA_INCLUDED)
+#define CPP_EXPRESSION_GRAMMAR_GEN_HPP_42399258_6CDC_4101_863D_5C7D95B5A6CA_INCLUDED
+
+#include <boost/wave/wave_config.hpp>
+#include <boost/wave/cpp_iteration_context.hpp>
+#include <boost/wave/grammars/cpp_value_error.hpp>
+
+#include <list>
+#include <boost/pool/pool_alloc.hpp>
+
+// this must occur after all of the includes and before any code appears
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_PREFIX
+#endif
+
+// suppress warnings about dependent classes not being exported from the dll
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable : 4251 4231 4660)
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace wave {
+namespace grammars {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// expression_grammar_gen template class
+//
+// This template helps separating the compilation of the
+// expression_grammar class from the compilation of the main
+// pp_iterator. This is done to safe compilation time.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+template <typename TokenT>
+struct BOOST_WAVE_DECL expression_grammar_gen {
+
+ typedef TokenT token_type;
+ typedef std::list<token_type, boost::fast_pool_allocator<token_type> >
+ token_sequence_type;
+
+ static bool evaluate(
+ typename token_sequence_type::const_iterator const &first,
+ typename token_sequence_type::const_iterator const &last,
+ typename token_type::position_type const &tok,
+ bool if_block_status, value_error &status);
+};
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace grammars
+} // namespace wave
+} // namespace boost
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+// the suffix header occurs after all of the code
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_SUFFIX
+#endif
+
+#endif // !defined(CPP_EXPRESSION_GRAMMAR_GEN_HPP_42399258_6CDC_4101_863D_5C7D95B5A6CA_INCLUDED)
diff --git a/boost/boost/wave/grammars/cpp_expression_value.hpp b/boost/boost/wave/grammars/cpp_expression_value.hpp
new file mode 100644
index 00000000000..61af7042455
--- /dev/null
+++ b/boost/boost/wave/grammars/cpp_expression_value.hpp
@@ -0,0 +1,882 @@
+/*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+
+ http://www.boost.org/
+
+ Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(CPP_EXPRESSION_VALUE_HPP_452FE66D_8754_4107_AF1E_E42255A0C18A_INCLUDED)
+#define CPP_EXPRESSION_VALUE_HPP_452FE66D_8754_4107_AF1E_E42255A0C18A_INCLUDED
+
+#if defined (BOOST_SPIRIT_DEBUG)
+#include <iostream>
+#endif // defined(BOOST_SPIRIT_DEBUG)
+
+#include <boost/wave/wave_config.hpp>
+
+// this must occur after all of the includes and before any code appears
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_PREFIX
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace wave {
+namespace grammars {
+namespace closures {
+
+class closure_value;
+inline bool as_bool(closure_value const& v);
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// The closure_value class represents the closure type, which is used for the
+// expression grammar.
+//
+// This class was introduced to allow the expression grammar to respect
+// the numeric type of a numeric literal or expression result.
+//
+///////////////////////////////////////////////////////////////////////////////
+class closure_value {
+public:
+
+ enum value_type {
+ is_int = 1,
+ is_uint = 2,
+ is_bool = 3
+ };
+
+ closure_value(value_error valid_ = error_noerror)
+ : type(is_int), valid(valid_)
+ { value.i = 0; }
+ explicit closure_value(int i, value_error valid_ = error_noerror)
+ : type(is_int), valid(valid_)
+ { value.i = i; }
+ explicit closure_value(unsigned int ui, value_error valid_ = error_noerror)
+ : type(is_uint), valid(valid_)
+ { value.ui = ui; }
+ explicit closure_value(long i, value_error valid_ = error_noerror)
+ : type(is_int), valid(valid_)
+ { value.i = i; }
+ explicit closure_value(unsigned long ui, value_error valid_ = error_noerror)
+ : type(is_uint), valid(valid_)
+ { value.ui = ui; }
+ explicit closure_value(bool b, value_error valid_ = error_noerror)
+ : type(is_bool), valid(valid_)
+ { value.b = b; }
+
+ value_type get_type() const { return type; }
+ value_error is_valid() const { return valid; }
+
+// explicit conversion
+ friend int as_int(closure_value const& v)
+ {
+ switch (v.type) {
+ case is_uint: return v.value.ui;
+ case is_bool: return v.value.b ? 1 : 0;
+ case is_int: break;
+ }
+ return v.value.i;
+ }
+ friend unsigned int as_uint(closure_value const& v)
+ {
+ switch (v.type) {
+ case is_uint: return v.value.ui;
+ case is_bool: return v.value.b ? 1 : 0;
+ case is_int: break;
+ }
+ return v.value.i;
+ }
+ friend long as_long(closure_value const& v)
+ {
+ switch (v.type) {
+ case is_uint: return v.value.ui;
+ case is_bool: return v.value.b ? 1 : 0;
+ case is_int: break;
+ }
+ return v.value.i;
+ }
+ friend unsigned long as_ulong(closure_value const& v)
+ {
+ switch (v.type) {
+ case is_uint: return v.value.ui;
+ case is_bool: return v.value.b ? 1 : 0;
+ case is_int: break;
+ }
+ return v.value.i;
+ }
+ friend bool as_bool(closure_value const& v)
+ {
+ switch (v.type) {
+ case is_uint: return v.value.ui != 0;
+ case is_bool: return v.value.b;
+ case is_int: break;
+ }
+ return v.value.i != 0.0;
+ }
+
+// assignment
+ closure_value &operator= (closure_value const &rhs)
+ {
+ switch (rhs.get_type()) {
+ case is_int:
+ value.i = as_long(rhs);
+ type = is_int;
+ break;
+
+ case is_uint:
+ value.ui = as_ulong(rhs);
+ type = is_uint;
+ break;
+
+ case is_bool:
+ value.b = as_bool(rhs);
+ type = is_bool;
+ break;
+ }
+ valid = rhs.valid;
+ return *this;
+ }
+ closure_value &operator= (int rhs)
+ {
+ type = is_int;
+ value.i = rhs;
+ valid = error_noerror;
+ return *this;
+ }
+ closure_value &operator= (unsigned int rhs)
+ {
+ type = is_uint;
+ value.ui = rhs;
+ valid = error_noerror;
+ return *this;
+ }
+ closure_value &operator= (long rhs)
+ {
+ type = is_int;
+ value.i = rhs;
+ valid = error_noerror;
+ return *this;
+ }
+ closure_value &operator= (unsigned long rhs)
+ {
+ type = is_uint;
+ value.ui = rhs;
+ valid = error_noerror;
+ return *this;
+ }
+ closure_value &operator= (bool rhs)
+ {
+ type = is_bool;
+ value.b = rhs;
+ valid = error_noerror;
+ return *this;
+ }
+
+// arithmetics
+ closure_value &operator+= (closure_value const &rhs)
+ {
+ switch (type) {
+ case is_int:
+ switch(rhs.type) {
+ case is_bool:
+ {
+ long result = value.i + as_long(rhs);
+ if (rhs.value.i > 0L && value.i > result ||
+ rhs.value.i < 0L && value.i < result)
+ {
+ valid = error_integer_overflow;
+ }
+ else {
+ value.i = result;
+ }
+ }
+ break;
+
+ case is_int:
+ {
+ long result = value.i + rhs.value.i;
+ if (rhs.value.i > 0L && value.i > result ||
+ rhs.value.i < 0L && value.i < result)
+ {
+ valid = error_integer_overflow;
+ }
+ else {
+ value.i = result;
+ }
+ }
+ break;
+
+ case is_uint:
+ {
+ unsigned long result = value.ui + rhs.value.ui;
+ if (result < value.ui) {
+ valid = error_integer_overflow;
+ }
+ else {
+ value.ui = result;
+ type = is_uint;
+ }
+ }
+ break;
+ }
+ break;
+
+ case is_uint:
+ {
+ unsigned long result = value.ui + as_ulong(rhs);
+ if (result < value.ui) {
+ valid = error_integer_overflow;
+ }
+ else {
+ value.ui = result;
+ }
+ }
+ break;
+
+ case is_bool:
+ value.i = value.b + as_bool(rhs);
+ type = is_int;
+ }
+ valid = (value_error)(valid | rhs.valid);
+ return *this;
+ }
+ closure_value &operator-= (closure_value const &rhs)
+ {
+ switch (type) {
+ case is_int:
+ switch(rhs.type) {
+ case is_bool:
+ {
+ long result = value.i - as_long(rhs);
+ if (rhs.value.i > 0L && result > value.i ||
+ rhs.value.i < 0L && result < value.i)
+ {
+ valid = error_integer_overflow;
+ }
+ else {
+ value.i = result;
+ }
+ }
+ break;
+
+ case is_int:
+ {
+ long result = value.i - rhs.value.i;
+ if (rhs.value.i > 0L && result > value.i ||
+ rhs.value.i < 0L && result < value.i)
+ {
+ valid = error_integer_overflow;
+ }
+ else {
+ value.i = result;
+ }
+ }
+ break;
+
+ case is_uint:
+ {
+ unsigned long result = value.ui - rhs.value.ui;
+ if (result > value.ui) {
+ valid = error_integer_overflow;
+ }
+ else {
+ value.ui = result;
+ type = is_uint;
+ }
+ }
+ break;
+ }
+ break;
+
+ case is_uint:
+ switch(rhs.type) {
+ case is_bool:
+ {
+ unsigned long result = value.ui - as_ulong(rhs);
+ if (result > value.ui)
+ {
+ valid = error_integer_overflow;
+ }
+ else {
+ value.ui = result;
+ }
+ }
+ break;
+
+ case is_int:
+ {
+ unsigned long result = value.ui - rhs.value.i;
+ if (rhs.value.i > 0L && result > value.ui ||
+ rhs.value.i < 0L && result < value.ui)
+ {
+ valid = error_integer_overflow;
+ }
+ else {
+ value.ui = result;
+ }
+ }
+ break;
+
+ case is_uint:
+ {
+ unsigned long result = value.ui - rhs.value.ui;
+ if (result > value.ui) {
+ valid = error_integer_overflow;
+ }
+ else {
+ value.ui = result;
+ }
+ }
+ break;
+ }
+ break;
+
+ case is_bool:
+ value.i = value.b - as_bool(rhs);
+ type = is_int;
+ }
+ valid = (value_error)(valid | rhs.valid);
+ return *this;
+ }
+ closure_value &operator*= (closure_value const &rhs)
+ {
+ switch (type) {
+ case is_int:
+ switch(rhs.type) {
+ case is_bool: value.i *= as_long(rhs); break;
+ case is_int:
+ {
+ long result = value.i * rhs.value.i;
+ if (0 != value.i && 0 != rhs.value.i &&
+ (result / value.i != rhs.value.i ||
+ result / rhs.value.i != value.i)
+ )
+ {
+ valid = error_integer_overflow;
+ }
+ else {
+ value.i = result;
+ }
+ }
+ break;
+
+ case is_uint:
+ {
+ unsigned long result = value.ui * rhs.value.ui;
+ if (0 != value.ui && 0 != rhs.value.ui &&
+ (result / value.ui != rhs.value.ui ||
+ result / rhs.value.ui != value.ui)
+ )
+ {
+ valid = error_integer_overflow;
+ }
+ else {
+ value.ui = result;
+ type = is_uint;
+ }
+ }
+ break;
+ }
+ break;
+
+ case is_uint:
+ {
+ unsigned long rhs_val = as_ulong(rhs);
+ unsigned long result = value.ui * rhs_val;
+ if (0 != value.ui && 0 != rhs_val &&
+ (result / value.ui != rhs_val ||
+ result / rhs_val != value.ui)
+ )
+ {
+ valid = error_integer_overflow;
+ }
+ else {
+ value.ui = result;
+ type = is_uint;
+ }
+ }
+ break;
+
+ case is_bool:
+ switch (rhs.type) {
+ case is_int:
+ value.i = (value.b ? 1 : 0) * rhs.value.i;
+ type = is_int;
+ break;
+
+ case is_uint:
+ value.ui = (value.b ? 1 : 0) * rhs.value.ui;
+ type = is_uint;
+ break;
+
+ case is_bool:
+ value.b = 0 != ((value.b ? 1 : 0) * (rhs.value.b ? 1 : 0));
+ break;
+ }
+ }
+ valid = (value_error)(valid | rhs.valid);
+ return *this;
+ }
+ closure_value &operator/= (closure_value const &rhs)
+ {
+ switch (type) {
+ case is_int:
+ switch(rhs.type) {
+ case is_bool:
+ case is_int:
+ if (as_long(rhs) != 0) {
+ if (value.i == -value.i && -1 == rhs.value.i) {
+ // LONG_MIN / -1 on two's complement
+ valid = error_integer_overflow;
+ }
+ else {
+ value.i /= as_long(rhs);
+ }
+ }
+ else {
+ valid = error_division_by_zero; // division by zero
+ }
+ break;
+
+ case is_uint:
+ if (rhs.value.ui != 0) {
+ value.ui /= rhs.value.ui;
+ type = is_uint;
+ }
+ else {
+ valid = error_division_by_zero; // division by zero
+ }
+ break;
+ }
+ break;
+
+ case is_uint:
+ if (as_ulong(rhs) != 0)
+ value.ui /= as_ulong(rhs);
+ else
+ valid = error_division_by_zero; // division by zero
+ break;
+
+ case is_bool:
+ if (as_bool(rhs)) {
+ switch(rhs.type) {
+ case is_int:
+ value.i = (value.b ? 1 : 0) / rhs.value.i;
+ type = is_int;
+ break;
+
+ case is_uint:
+ value.i = (value.b ? 1 : 0) / rhs.value.ui;
+ type = is_int;
+ break;
+
+ case is_bool:
+ break;
+ }
+ }
+ else {
+ valid = error_division_by_zero; // division by zero
+ }
+ }
+ return *this;
+ }
+ closure_value &operator%= (closure_value const &rhs)
+ {
+ switch (type) {
+ case is_int:
+ switch(rhs.type) {
+ case is_bool:
+ case is_int:
+ if (as_long(rhs) != 0) {
+ if (value.i == -value.i && -1 == rhs.value.i) {
+ // LONG_MIN % -1 on two's complement
+ valid = error_integer_overflow;
+ }
+ else {
+ value.i %= as_long(rhs);
+ }
+ }
+ else {
+ valid = error_division_by_zero; // division by zero
+ }
+ break;
+
+ case is_uint:
+ if (rhs.value.ui != 0) {
+ value.ui %= rhs.value.ui;
+ type = is_uint;
+ }
+ else {
+ valid = error_division_by_zero; // division by zero
+ }
+ break;
+ }
+ break;
+
+ case is_uint:
+ if (as_ulong(rhs) != 0)
+ value.ui %= as_ulong(rhs);
+ else
+ valid = error_division_by_zero; // division by zero
+ break;
+
+ case is_bool:
+ if (as_bool(rhs)) {
+ switch(rhs.type) {
+ case is_int:
+ value.i = (value.b ? 1 : 0) % rhs.value.i;
+ type = is_int;
+ break;
+
+ case is_uint:
+ value.i = (value.b ? 1 : 0) % rhs.value.ui;
+ type = is_int;
+ break;
+
+ case is_bool:
+ break;
+ }
+ }
+ else {
+ valid = error_division_by_zero; // division by zero
+ }
+ }
+ return *this;
+ }
+
+ friend closure_value
+ operator- (closure_value const &rhs)
+ {
+ switch (rhs.type) {
+ case is_int:
+ {
+ long value = as_long(rhs);
+ if (value != 0 && value == -value)
+ return closure_value(-value, error_integer_overflow);
+ return closure_value(-value, rhs.valid);
+ }
+
+ case is_bool: return closure_value(-as_long(rhs), rhs.valid);
+ case is_uint: break;
+ }
+
+ long value = as_ulong(rhs);
+ if (value != 0 && value == -value)
+ return closure_value(-value, error_integer_overflow);
+ return closure_value(-value, rhs.valid);
+ }
+ friend closure_value
+ operator~ (closure_value const &rhs)
+ {
+ return closure_value(~as_ulong(rhs), rhs.valid);
+ }
+ friend closure_value
+ operator! (closure_value const &rhs)
+ {
+ switch (rhs.type) {
+ case is_int: return closure_value(!as_long(rhs), rhs.valid);
+ case is_bool: return closure_value(!as_bool(rhs), rhs.valid);
+ case is_uint: break;
+ }
+ return closure_value(!as_ulong(rhs), rhs.valid);
+ }
+
+// comparison
+ friend closure_value
+ operator== (closure_value const &lhs, closure_value const &rhs)
+ {
+ bool cmp = false;
+ switch (lhs.type) {
+ case is_int:
+ switch(rhs.type) {
+ case is_bool: cmp = as_bool(lhs) == rhs.value.b; break;
+ case is_int: cmp = lhs.value.i == rhs.value.i; break;
+ case is_uint: cmp = lhs.value.ui == rhs.value.ui; break;
+ }
+ break;
+
+ case is_uint: cmp = lhs.value.ui == as_ulong(rhs); break;
+ case is_bool: cmp = lhs.value.b == as_bool(rhs); break;
+ }
+ return closure_value(cmp, (value_error)(lhs.valid | rhs.valid));
+ }
+ friend closure_value
+ operator!= (closure_value const &lhs, closure_value const &rhs)
+ {
+ return closure_value(!as_bool(lhs == rhs), (value_error)(lhs.valid | rhs.valid));
+ }
+ friend closure_value
+ operator> (closure_value const &lhs, closure_value const &rhs)
+ {
+ bool cmp = false;
+ switch (lhs.type) {
+ case is_int:
+ switch(rhs.type) {
+ case is_bool: cmp = lhs.value.i > as_long(rhs); break;
+ case is_int: cmp = lhs.value.i > rhs.value.i; break;
+ case is_uint: cmp = lhs.value.ui > rhs.value.ui; break;
+ }
+ break;
+
+ case is_uint: cmp = lhs.value.ui > as_ulong(rhs); break;
+ case is_bool: cmp = lhs.value.b > as_bool(rhs); break;
+ }
+ return closure_value(cmp, (value_error)(lhs.valid | rhs.valid));
+ }
+ friend closure_value
+ operator< (closure_value const &lhs, closure_value const &rhs)
+ {
+ bool cmp = false;
+ switch (lhs.type) {
+ case is_int:
+ switch(rhs.type) {
+ case is_bool: cmp = lhs.value.i < as_long(rhs); break;
+ case is_int: cmp = lhs.value.i < rhs.value.i; break;
+ case is_uint: cmp = lhs.value.ui < rhs.value.ui; break;
+ }
+ break;
+
+ case is_uint: cmp = lhs.value.ui < as_ulong(rhs); break;
+ case is_bool: cmp = as_bool(lhs) < as_bool(rhs); break;
+ }
+ return closure_value(cmp, (value_error)(lhs.valid | rhs.valid));
+ }
+ friend closure_value
+ operator<= (closure_value const &lhs, closure_value const &rhs)
+ {
+ return closure_value(!as_bool(lhs > rhs), (value_error)(lhs.valid | rhs.valid));
+ }
+ friend closure_value
+ operator>= (closure_value const &lhs, closure_value const &rhs)
+ {
+ return closure_value(!as_bool(lhs < rhs), (value_error)(lhs.valid | rhs.valid));
+ }
+
+ closure_value &
+ operator<<= (closure_value const &rhs)
+ {
+ switch (type) {
+ case is_bool:
+ case is_int:
+ switch (rhs.type) {
+ case is_bool:
+ case is_int:
+ {
+ long shift_by = as_long(rhs);
+
+ if (shift_by > 64)
+ shift_by = 64;
+ else if (shift_by < -64)
+ shift_by = -64;
+ value.i <<= shift_by;
+ }
+ break;
+
+ case is_uint:
+ {
+ unsigned long shift_by = as_ulong(rhs);
+
+ if (shift_by > 64)
+ shift_by = 64;
+ value.ui <<= shift_by;
+
+ // Note: The usual arithmetic conversions are not performed on
+ // bit shift operations.
+ }
+ break;
+ }
+ break;
+
+ case is_uint:
+ switch (rhs.type) {
+ case is_bool:
+ case is_int:
+ {
+ long shift_by = as_long(rhs);
+
+ if (shift_by > 64)
+ shift_by = 64;
+ else if (shift_by < -64)
+ shift_by = -64;
+ value.ui <<= shift_by;
+ }
+ break;
+
+ case is_uint:
+ {
+ unsigned long shift_by = as_ulong(rhs);
+
+ if (shift_by > 64)
+ shift_by = 64;
+ value.ui <<= shift_by;
+ }
+ break;
+ }
+ }
+ valid = (value_error)(valid | rhs.valid);
+ return *this;
+ }
+
+ closure_value &
+ operator>>= (closure_value const &rhs)
+ {
+ switch (type) {
+ case is_bool:
+ case is_int:
+ switch (rhs.type) {
+ case is_bool:
+ case is_int:
+ {
+ long shift_by = as_long(rhs);
+
+ if (shift_by > 64)
+ shift_by = 64;
+ else if (shift_by < -64)
+ shift_by = -64;
+ value.i >>= shift_by;
+ }
+ break;
+
+ case is_uint:
+ {
+ unsigned long shift_by = as_ulong(rhs);
+
+ if (shift_by > 64)
+ shift_by = 64;
+ value.ui >>= shift_by;
+
+ // Note: The usual arithmetic conversions are not performed on
+ // bit shift operations.
+ }
+ break;
+ }
+ break;
+
+ case is_uint:
+ switch (rhs.type) {
+ case is_bool:
+ case is_int:
+ {
+ long shift_by = as_long(rhs);
+
+ if (shift_by > 64)
+ shift_by = 64;
+ else if (shift_by < -64)
+ shift_by = -64;
+ value.ui >>= shift_by;
+ }
+ break;
+
+ case is_uint:
+ {
+ unsigned long shift_by = as_ulong(rhs);
+
+ if (shift_by > 64)
+ shift_by = 64;
+ value.ui >>= shift_by;
+ }
+ break;
+ }
+ break;
+ }
+ valid = (value_error)(valid | rhs.valid);
+ return *this;
+ }
+
+ friend closure_value
+ operator|| (closure_value const &lhs, closure_value const &rhs)
+ {
+ bool result = as_bool(lhs) || as_bool(rhs);
+ return closure_value(result, (value_error)(lhs.valid | rhs.valid));
+ }
+
+ friend closure_value
+ operator&& (closure_value const &lhs, closure_value const &rhs)
+ {
+ bool result = as_bool(lhs) && as_bool(rhs);
+ return closure_value(result, (value_error)(lhs.valid | rhs.valid));
+ }
+
+ friend closure_value
+ operator| (closure_value const &lhs, closure_value const &rhs)
+ {
+ unsigned long result = as_ulong(lhs) | as_ulong(rhs);
+ return closure_value(result, (value_error)(lhs.valid | rhs.valid));
+ }
+
+ friend closure_value
+ operator& (closure_value const &lhs, closure_value const &rhs)
+ {
+ unsigned long result = as_ulong(lhs) & as_ulong(rhs);
+ return closure_value(result, (value_error)(lhs.valid | rhs.valid));
+ }
+
+ friend closure_value
+ operator^ (closure_value const &lhs, closure_value const &rhs)
+ {
+ unsigned long result = as_ulong(lhs) ^ as_ulong(rhs);
+ return closure_value(result, (value_error)(lhs.valid | rhs.valid));
+ }
+
+ // handle the ?: operator
+ closure_value &
+ handle_questionmark(closure_value const &cond, closure_value const &val2)
+ {
+ switch (type) {
+ case is_int:
+ switch (val2.type) {
+ case is_bool: value.b = as_bool(cond) ? value.b : as_bool(val2); break;
+ case is_int: value.i = as_bool(cond) ? value.i : as_long(val2); break;
+ case is_uint:
+ value.ui = as_bool(cond) ? value.ui : as_ulong(val2);
+ type = is_uint; // changing type!
+ break;
+ }
+ break;
+
+ case is_uint: value.ui = as_bool(cond) ? value.ui : as_ulong(val2); break;
+ case is_bool: value.b = as_bool(cond) ? value.b : as_bool(val2); break;
+ }
+ valid = as_bool(cond) ? valid : val2.valid;
+ return *this;
+ }
+
+#if defined (BOOST_SPIRIT_DEBUG)
+ friend std::ostream&
+ operator<< (std::ostream &o, closure_value const &val)
+ {
+ switch (val.type) {
+ case is_int: o << "int(" << as_long(val) << ")"; break;
+ case is_uint: o << "unsigned int(" << as_ulong(val) << ")"; break;
+ case is_bool: o << "bool(" << as_bool(val) << ")"; break;
+ }
+ return o;
+ }
+#endif // defined(BOOST_SPIRIT_DEBUG)
+
+private:
+ value_type type;
+ union {
+ long i;
+ unsigned long ui;
+ bool b;
+ } value;
+ value_error valid;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace closures
+} // namespace grammars
+} // namespace wave
+} // namespace boost
+
+// the suffix header occurs after all of the code
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_SUFFIX
+#endif
+
+#endif // !defined(CPP_EXPRESSION_VALUE_HPP_452FE66D_8754_4107_AF1E_E42255A0C18A_INCLUDED)
diff --git a/boost/boost/wave/grammars/cpp_grammar.hpp b/boost/boost/wave/grammars/cpp_grammar.hpp
new file mode 100644
index 00000000000..4c6035de636
--- /dev/null
+++ b/boost/boost/wave/grammars/cpp_grammar.hpp
@@ -0,0 +1,754 @@
+/*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+
+ http://www.boost.org/
+
+ Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(CPP_GRAMMAR_HPP_FEAEBC2E_2734_428B_A7CA_85E5A415E23E_INCLUDED)
+#define CPP_GRAMMAR_HPP_FEAEBC2E_2734_428B_A7CA_85E5A415E23E_INCLUDED
+
+#include <boost/spirit/core.hpp>
+#include <boost/spirit/tree/parse_tree.hpp>
+#include <boost/spirit/tree/parse_tree_utils.hpp>
+#include <boost/spirit/utility/confix.hpp>
+#include <boost/spirit/utility/lists.hpp>
+
+#include <boost/wave/wave_config.hpp>
+#include <boost/pool/pool_alloc.hpp>
+
+#if BOOST_WAVE_DUMP_PARSE_TREE != 0
+#include <map>
+#include <boost/spirit/tree/tree_to_xml.hpp>
+#endif
+
+#include <boost/wave/token_ids.hpp>
+#include <boost/wave/grammars/cpp_grammar_gen.hpp>
+#include <boost/wave/util/pattern_parser.hpp>
+
+#include <boost/wave/cpp_exceptions.hpp>
+
+// this must occur after all of the includes and before any code appears
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_PREFIX
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace wave {
+namespace grammars {
+
+namespace impl {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// store_found_eof
+//
+// The store_found_eof functor sets a given flag if the T_EOF token was
+// found during the parsing process
+//
+///////////////////////////////////////////////////////////////////////////////
+
+ struct store_found_eof {
+
+ store_found_eof(bool &found_eof_) : found_eof(found_eof_) {}
+
+ template <typename TokenT>
+ void operator()(TokenT const &/*token*/) const
+ {
+ found_eof = true;
+ }
+
+ bool &found_eof;
+ };
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// store_found_directive
+//
+// The store_found_directive functor stores the token_id of the recognized
+// pp directive
+//
+///////////////////////////////////////////////////////////////////////////////
+
+ template <typename TokenT>
+ struct store_found_directive {
+
+ store_found_directive(TokenT &found_directive_)
+ : found_directive(found_directive_) {}
+
+ void operator()(TokenT const &token) const
+ {
+ found_directive = token;
+ }
+
+ TokenT &found_directive;
+ };
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// store_found_eoltokens
+//
+// The store_found_eoltokens functor stores the token sequence of the
+// line ending for a particular pp directive
+//
+///////////////////////////////////////////////////////////////////////////////
+
+ template <typename ContainerT>
+ struct store_found_eoltokens {
+
+ store_found_eoltokens(ContainerT &found_eoltokens_)
+ : found_eoltokens(found_eoltokens_) {}
+
+ template <typename IteratorT>
+ void operator()(IteratorT const &first, IteratorT const& last) const
+ {
+ std::copy(first, last,
+ std::inserter(found_eoltokens, found_eoltokens.end()));
+ }
+
+ ContainerT &found_eoltokens;
+ };
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// flush_underlying_parser
+//
+// The flush_underlying_parser flushes the underlying
+// multi_pass_iterator during the normal parsing process. This is
+// used at certain points during the parsing process, when it is
+// clear, that no backtracking is needed anymore and the input
+// gathered so far may be discarded.
+//
+///////////////////////////////////////////////////////////////////////////////
+ struct flush_underlying_parser
+ : public boost::spirit::parser<flush_underlying_parser>
+ {
+ typedef flush_underlying_parser this_t;
+
+ template <typename ScannerT>
+ typename boost::spirit::parser_result<this_t, ScannerT>::type
+ parse(ScannerT const& scan) const
+ {
+ scan.first.clear_queue();
+ return scan.empty_match();
+ }
+ };
+
+ flush_underlying_parser const
+ flush_underlying_parser_p = flush_underlying_parser();
+
+} // anonymous namespace
+
+///////////////////////////////////////////////////////////////////////////////
+// define, whether the rule's should generate some debug output
+#define TRACE_CPP_GRAMMAR \
+ bool(BOOST_SPIRIT_DEBUG_FLAGS_CPP & BOOST_SPIRIT_DEBUG_FLAGS_CPP_GRAMMAR) \
+ /**/
+
+///////////////////////////////////////////////////////////////////////////////
+// Encapsulation of the C++ preprocessor grammar.
+template <typename TokenT, typename ContainerT>
+struct cpp_grammar :
+ public boost::spirit::grammar<cpp_grammar<TokenT, ContainerT> >
+{
+ typedef typename TokenT::position_type position_type;
+ typedef cpp_grammar<TokenT, ContainerT> grammar_type;
+ typedef impl::store_found_eof store_found_eof_type;
+ typedef impl::store_found_directive<TokenT> store_found_directive_type;
+ typedef impl::store_found_eoltokens<ContainerT> store_found_eoltokens_type;
+
+ template <typename ScannerT>
+ struct definition
+ {
+ // non-parse_tree generating rule type
+ typedef typename ScannerT::iteration_policy_t iteration_policy_t;
+ typedef boost::spirit::match_policy match_policy_t;
+ typedef typename ScannerT::action_policy_t action_policy_t;
+ typedef
+ boost::spirit::scanner_policies<
+ iteration_policy_t, match_policy_t, action_policy_t>
+ policies_t;
+ typedef
+ boost::spirit::scanner<typename ScannerT::iterator_t, policies_t>
+ non_tree_scanner_t;
+ typedef
+ boost::spirit::rule<non_tree_scanner_t, boost::spirit::dynamic_parser_tag>
+ no_tree_rule_type;
+
+ // 'normal' (parse_tree generating) rule type
+ typedef
+ boost::spirit::rule<ScannerT, boost::spirit::dynamic_parser_tag>
+ rule_type;
+
+ rule_type pp_statement;
+ rule_type include_file, system_include_file, macro_include_file;
+ rule_type plain_define, macro_definition, macro_parameters;
+ rule_type undefine;
+ rule_type ppifdef, ppifndef, ppif, ppelse, ppelif, ppendif;
+ rule_type ppline;
+ rule_type pperror;
+ rule_type ppwarning;
+ rule_type pppragma;
+ rule_type illformed;
+ rule_type ppqualifiedname;
+ rule_type eol_tokens;
+ no_tree_rule_type ppsp;
+#if BOOST_WAVE_SUPPORT_MS_EXTENSIONS != 0
+ rule_type ppregion;
+ rule_type ppendregion;
+#endif
+
+ definition(cpp_grammar const &self)
+ {
+ // import the spirit and cpplexer namespaces here
+ using namespace boost::spirit;
+ using namespace boost::wave;
+ using namespace boost::wave::util;
+
+ // set the rule id's for later use
+ pp_statement.set_id(BOOST_WAVE_PP_STATEMENT_ID);
+ include_file.set_id(BOOST_WAVE_INCLUDE_FILE_ID);
+ system_include_file.set_id(BOOST_WAVE_SYSINCLUDE_FILE_ID);
+ macro_include_file.set_id(BOOST_WAVE_MACROINCLUDE_FILE_ID);
+ plain_define.set_id(BOOST_WAVE_PLAIN_DEFINE_ID);
+ macro_parameters.set_id(BOOST_WAVE_MACRO_PARAMETERS_ID);
+ macro_definition.set_id(BOOST_WAVE_MACRO_DEFINITION_ID);
+ undefine.set_id(BOOST_WAVE_UNDEFINE_ID);
+ ppifdef.set_id(BOOST_WAVE_IFDEF_ID);
+ ppifndef.set_id(BOOST_WAVE_IFNDEF_ID);
+ ppif.set_id(BOOST_WAVE_IF_ID);
+ ppelif.set_id(BOOST_WAVE_ELIF_ID);
+ ppelse.set_id(BOOST_WAVE_ELSE_ID);
+ ppendif.set_id(BOOST_WAVE_ENDIF_ID);
+ ppline.set_id(BOOST_WAVE_LINE_ID);
+ pperror.set_id(BOOST_WAVE_ERROR_ID);
+ ppwarning.set_id(BOOST_WAVE_WARNING_ID);
+ pppragma.set_id(BOOST_WAVE_PRAGMA_ID);
+ illformed.set_id(BOOST_WAVE_ILLFORMED_ID);
+ ppsp.set_id(BOOST_WAVE_PPSPACE_ID);
+ ppqualifiedname.set_id(BOOST_WAVE_PPQUALIFIEDNAME_ID);
+#if BOOST_WAVE_SUPPORT_MS_EXTENSIONS != 0
+ ppregion.set_id(BOOST_WAVE_REGION_ID);
+ ppendregion.set_id(BOOST_WAVE_ENDREGION_ID);
+#endif
+
+#if BOOST_WAVE_DUMP_PARSE_TREE != 0
+ self.map_rule_id_to_name.init_rule_id_to_name_map(self);
+#endif
+
+ // recognizes preprocessor directives only
+
+ // C++ standard 16.1: A preprocessing directive consists of a sequence
+ // of preprocessing tokens. The first token in the sequence is #
+ // preprocessing token that is either the first character in the source
+ // file (optionally after white space containing no new-line
+ // characters) or that follows white space containing at least one
+ // new-line character. The last token in the sequence is the first
+ // new-line character that follows the first token in the sequence.
+
+ pp_statement
+ = ( plain_define
+ | include_file
+ | system_include_file
+ | ppif
+ | ppelif
+ | ppifndef
+ | ppifdef
+ | undefine
+ | ppelse
+ | macro_include_file
+ | ppline
+ | pppragma
+ | pperror
+ | ppwarning
+ | ppendif
+#if BOOST_WAVE_SUPPORT_MS_EXTENSIONS != 0
+ | ppregion
+ | ppendregion
+#endif
+ | illformed
+ )
+ >> eol_tokens
+ [ store_found_eoltokens_type(self.found_eoltokens) ]
+// In parser debug mode it is useful not to flush the underlying stream
+// to allow its investigation in the debugger and to see the correct
+// output in the printed debug log..
+// Note: this may break the parser, though.
+#if !(defined(BOOST_SPIRIT_DEBUG) && \
+ (BOOST_SPIRIT_DEBUG_FLAGS_CPP & BOOST_SPIRIT_DEBUG_FLAGS_CPP_GRAMMAR) \
+ )
+ >> impl::flush_underlying_parser_p
+#endif // !(defined(BOOST_SPIRIT_DEBUG) &&
+ ;
+
+ // #include ...
+ include_file // include "..."
+ = ch_p(T_PP_QHEADER)
+ [ store_found_directive_type(self.found_directive) ]
+#if BOOST_WAVE_SUPPORT_INCLUDE_NEXT != 0
+ | ch_p(T_PP_QHEADER_NEXT)
+ [ store_found_directive_type(self.found_directive) ]
+#endif
+ ;
+
+ system_include_file // include <...>
+ = ch_p(T_PP_HHEADER)
+ [ store_found_directive_type(self.found_directive) ]
+#if BOOST_WAVE_SUPPORT_INCLUDE_NEXT != 0
+ | ch_p(T_PP_HHEADER_NEXT)
+ [ store_found_directive_type(self.found_directive) ]
+#endif
+ ;
+
+ macro_include_file // include ...anything else...
+ = no_node_d
+ [
+ ch_p(T_PP_INCLUDE)
+ [ store_found_directive_type(self.found_directive) ]
+#if BOOST_WAVE_SUPPORT_INCLUDE_NEXT != 0
+ | ch_p(T_PP_INCLUDE_NEXT)
+ [ store_found_directive_type(self.found_directive) ]
+#endif
+ ]
+ >> *( anychar_p -
+ (ch_p(T_NEWLINE) | ch_p(T_CPPCOMMENT) | ch_p(T_EOF))
+ )
+ ;
+
+ // #define FOO foo (with optional parameters)
+ plain_define
+ = no_node_d
+ [
+ ch_p(T_PP_DEFINE)
+ [ store_found_directive_type(self.found_directive) ]
+ >> +ppsp
+ ]
+ >> ( ch_p(T_IDENTIFIER)
+ | pattern_p(KeywordTokenType, TokenTypeMask)
+ | pattern_p(OperatorTokenType|AltExtTokenType,
+ ExtTokenTypeMask) // and, bit_and etc.
+ | pattern_p(BoolLiteralTokenType, TokenTypeMask) // true/false
+ )
+ >> ( ( no_node_d[eps_p(ch_p(T_LEFTPAREN))]
+ >> macro_parameters
+ >> !macro_definition
+ )
+ | !( no_node_d[+ppsp]
+ >> macro_definition
+ )
+ )
+ ;
+
+ // parameter list
+ // normal C++ mode
+ macro_parameters
+ = confix_p(
+ no_node_d[ch_p(T_LEFTPAREN) >> *ppsp],
+ !list_p(
+ ( ch_p(T_IDENTIFIER)
+ | pattern_p(KeywordTokenType, TokenTypeMask)
+ | pattern_p(OperatorTokenType|AltExtTokenType,
+ ExtTokenTypeMask) // and, bit_and etc.
+ | pattern_p(BoolLiteralTokenType, TokenTypeMask) // true/false
+#if BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS != 0
+ | ch_p(T_ELLIPSIS)
+#endif
+ ),
+ no_node_d[*ppsp >> ch_p(T_COMMA) >> *ppsp]
+ ),
+ no_node_d[*ppsp >> ch_p(T_RIGHTPAREN)]
+ )
+ ;
+
+ // macro body (anything left until eol)
+ macro_definition
+ = no_node_d[*ppsp]
+ >> *( anychar_p -
+ (ch_p(T_NEWLINE) | ch_p(T_CPPCOMMENT) | ch_p(T_EOF))
+ )
+ ;
+
+ // #undef FOO
+ undefine
+ = no_node_d
+ [
+ ch_p(T_PP_UNDEF)
+ [ store_found_directive_type(self.found_directive) ]
+ >> +ppsp
+ ]
+ >> ( ch_p(T_IDENTIFIER)
+ | pattern_p(KeywordTokenType, TokenTypeMask)
+ | pattern_p(OperatorTokenType|AltExtTokenType,
+ ExtTokenTypeMask) // and, bit_and etc.
+ | pattern_p(BoolLiteralTokenType, TokenTypeMask) // true/false
+ )
+ ;
+
+ // #ifdef et.al.
+ ppifdef
+ = no_node_d
+ [
+ ch_p(T_PP_IFDEF)
+ [ store_found_directive_type(self.found_directive) ]
+ >> +ppsp
+ ]
+ >> ppqualifiedname
+ ;
+
+ ppifndef
+ = no_node_d
+ [
+ ch_p(T_PP_IFNDEF)
+ [ store_found_directive_type(self.found_directive) ]
+ >> +ppsp
+ ]
+ >> ppqualifiedname
+ ;
+
+ ppif
+ = no_node_d
+ [
+ ch_p(T_PP_IF)
+ [ store_found_directive_type(self.found_directive) ]
+ >> *ppsp
+ ]
+ >> +( anychar_p -
+ (ch_p(T_NEWLINE) | ch_p(T_CPPCOMMENT) | ch_p(T_EOF))
+ )
+ ;
+
+ ppelse
+ = no_node_d
+ [
+ ch_p(T_PP_ELSE)
+ [ store_found_directive_type(self.found_directive) ]
+ ]
+ ;
+
+ ppelif
+ = no_node_d
+ [
+ ch_p(T_PP_ELIF)
+ [ store_found_directive_type(self.found_directive) ]
+ >> *ppsp
+ ]
+ >> +( anychar_p -
+ (ch_p(T_NEWLINE) | ch_p(T_CPPCOMMENT) | ch_p(T_EOF))
+ )
+ ;
+
+ ppendif
+ = no_node_d
+ [
+ ch_p(T_PP_ENDIF)
+ [ store_found_directive_type(self.found_directive) ]
+ ]
+ ;
+
+ // #line ...
+ ppline
+ = no_node_d
+ [
+ ch_p(T_PP_LINE)
+ [ store_found_directive_type(self.found_directive) ]
+ >> *ppsp
+ ]
+ >> +( anychar_p -
+ (ch_p(T_NEWLINE) | ch_p(T_CPPCOMMENT) | ch_p(T_EOF))
+ )
+ ;
+
+#if BOOST_WAVE_SUPPORT_MS_EXTENSIONS != 0
+ // #region ...
+ ppregion
+ = no_node_d
+ [
+ ch_p(T_MSEXT_PP_REGION)
+ [ store_found_directive_type(self.found_directive) ]
+ >> +ppsp
+ ]
+ >> ppqualifiedname
+ ;
+
+ // #endregion
+ ppendregion
+ = no_node_d
+ [
+ ch_p(T_MSEXT_PP_ENDREGION)
+ [ store_found_directive_type(self.found_directive) ]
+ ]
+ ;
+#endif
+
+ // # something else (ill formed preprocessor directive)
+ illformed // for error reporting
+ = no_node_d
+ [
+ pattern_p(T_POUND, MainTokenMask)
+ >> *ppsp
+ ]
+ >> ( anychar_p -
+ (ch_p(T_NEWLINE) | ch_p(T_CPPCOMMENT) | ch_p(T_EOF))
+ )
+ >> no_node_d
+ [
+ *( anychar_p -
+ (ch_p(T_NEWLINE) | ch_p(T_CPPCOMMENT) | ch_p(T_EOF))
+ )
+ ]
+ ;
+
+ // #error
+ pperror
+ = no_node_d
+ [
+ ch_p(T_PP_ERROR)
+ [ store_found_directive_type(self.found_directive) ]
+ >> *ppsp
+ ]
+ >> *( anychar_p -
+ (ch_p(T_NEWLINE) | ch_p(T_CPPCOMMENT) | ch_p(T_EOF))
+ )
+ ;
+
+ // #warning
+ ppwarning
+ = no_node_d
+ [
+ ch_p(T_PP_WARNING)
+ [ store_found_directive_type(self.found_directive) ]
+ >> *ppsp
+ ]
+ >> *( anychar_p -
+ (ch_p(T_NEWLINE) | ch_p(T_CPPCOMMENT) | ch_p(T_EOF))
+ )
+ ;
+
+ // #pragma ...
+ pppragma
+ = no_node_d
+ [
+ ch_p(T_PP_PRAGMA)
+ [ store_found_directive_type(self.found_directive) ]
+ ]
+ >> *( anychar_p -
+ (ch_p(T_NEWLINE) | ch_p(T_CPPCOMMENT) | ch_p(T_EOF))
+ )
+ ;
+
+ ppqualifiedname
+ = no_node_d[*ppsp]
+ >> ( ch_p(T_IDENTIFIER)
+ | pattern_p(KeywordTokenType, TokenTypeMask)
+ | pattern_p(OperatorTokenType|AltExtTokenType,
+ ExtTokenTypeMask) // and, bit_and etc.
+ | pattern_p(BoolLiteralTokenType, TokenTypeMask) // true/false
+ )
+ ;
+
+ // auxiliary helper rules
+ ppsp // valid space in a line with a preprocessor directive
+ = ch_p(T_SPACE) | ch_p(T_CCOMMENT)
+ ;
+
+ // end of line tokens
+ eol_tokens
+ = no_node_d
+ [
+ *( ch_p(T_SPACE)
+ | ch_p(T_CCOMMENT)
+ )
+ >> ( ch_p(T_NEWLINE)
+ | ch_p(T_CPPCOMMENT)
+ | ch_p(T_EOF)
+ [ store_found_eof_type(self.found_eof) ]
+ )
+ ]
+ ;
+
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(pp_statement, TRACE_CPP_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(include_file, TRACE_CPP_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(system_include_file, TRACE_CPP_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(macro_include_file, TRACE_CPP_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(plain_define, TRACE_CPP_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(macro_definition, TRACE_CPP_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(macro_parameters, TRACE_CPP_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(undefine, TRACE_CPP_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(ppifdef, TRACE_CPP_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(ppifndef, TRACE_CPP_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(ppif, TRACE_CPP_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(ppelse, TRACE_CPP_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(ppelif, TRACE_CPP_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(ppendif, TRACE_CPP_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(ppline, TRACE_CPP_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(pperror, TRACE_CPP_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(ppwarning, TRACE_CPP_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(illformed, TRACE_CPP_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(ppsp, TRACE_CPP_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(ppqualifiedname, TRACE_CPP_GRAMMAR);
+#if BOOST_WAVE_SUPPORT_MS_EXTENSIONS != 0
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(ppregion, TRACE_CPP_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(ppendregion, TRACE_CPP_GRAMMAR);
+#endif
+ }
+
+ // start rule of this grammar
+ rule_type const& start() const
+ { return pp_statement; }
+ };
+
+ bool &found_eof;
+ TokenT &found_directive;
+ ContainerT &found_eoltokens;
+
+ cpp_grammar(bool &found_eof_, TokenT &found_directive_,
+ ContainerT &found_eoltokens_)
+ : found_eof(found_eof_),
+ found_directive(found_directive_),
+ found_eoltokens(found_eoltokens_)
+ {
+ BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR_NAME(*this, "cpp_grammar",
+ TRACE_CPP_GRAMMAR);
+ }
+
+#if BOOST_WAVE_DUMP_PARSE_TREE != 0
+// helper function and data to get readable names of the rules known to us
+ struct map_ruleid_to_name :
+ public std::map<boost::spirit::parser_id, std::string>
+ {
+ typedef std::map<boost::spirit::parser_id, std::string> base_type;
+
+ void init_rule_id_to_name_map(cpp_grammar const &self)
+ {
+ struct {
+ int parser_id;
+ char const *rule_name;
+ }
+ init_ruleid_name_map[] = {
+ { BOOST_WAVE_PP_STATEMENT_ID, "pp_statement" },
+ { BOOST_WAVE_INCLUDE_FILE_ID, "include_file" },
+ { BOOST_WAVE_SYSINCLUDE_FILE_ID, "system_include_file" },
+ { BOOST_WAVE_MACROINCLUDE_FILE_ID, "macro_include_file" },
+ { BOOST_WAVE_PLAIN_DEFINE_ID, "plain_define" },
+ { BOOST_WAVE_MACRO_PARAMETERS_ID, "macro_parameters" },
+ { BOOST_WAVE_MACRO_DEFINITION_ID, "macro_definition" },
+ { BOOST_WAVE_UNDEFINE_ID, "undefine" },
+ { BOOST_WAVE_IFDEF_ID, "ppifdef" },
+ { BOOST_WAVE_IFNDEF_ID, "ppifndef" },
+ { BOOST_WAVE_IF_ID, "ppif" },
+ { BOOST_WAVE_ELIF_ID, "ppelif" },
+ { BOOST_WAVE_ELSE_ID, "ppelse" },
+ { BOOST_WAVE_ENDIF_ID, "ppendif" },
+ { BOOST_WAVE_LINE_ID, "ppline" },
+ { BOOST_WAVE_ERROR_ID, "pperror" },
+ { BOOST_WAVE_WARNING_ID, "ppwarning" },
+ { BOOST_WAVE_PRAGMA_ID, "pppragma" },
+ { BOOST_WAVE_ILLFORMED_ID, "illformed" },
+ { BOOST_WAVE_PPSPACE_ID, "ppspace" },
+ { BOOST_WAVE_PPQUALIFIEDNAME_ID, "ppqualifiedname" },
+#if BOOST_WAVE_SUPPORT_MS_EXTENSIONS != 0
+ { BOOST_WAVE_REGION_ID, "ppregion" },
+ { BOOST_WAVE_ENDREGION_ID, "ppendregion" },
+#endif
+ { 0 }
+ };
+
+ // initialize parser_id to rule_name map
+ for (int i = 0; 0 != init_ruleid_name_map[i].parser_id; ++i)
+ base_type::insert(base_type::value_type(
+ boost::spirit::parser_id(init_ruleid_name_map[i].parser_id),
+ std::string(init_ruleid_name_map[i].rule_name))
+ );
+ }
+ };
+ mutable map_ruleid_to_name map_rule_id_to_name;
+#endif // WAVE_DUMP_PARSE_TREE != 0
+};
+
+///////////////////////////////////////////////////////////////////////////////
+#undef TRACE_CPP_GRAMMAR
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Special parse function generating a parse tree using a given node_factory.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename NodeFactoryT, typename IteratorT, typename ParserT>
+inline boost::spirit::tree_parse_info<IteratorT, NodeFactoryT>
+parsetree_parse(IteratorT const& first_, IteratorT const& last,
+ boost::spirit::parser<ParserT> const& p)
+{
+ using namespace boost::spirit;
+
+ typedef pt_match_policy<IteratorT, NodeFactoryT> pt_match_policy_type;
+ typedef scanner_policies<iteration_policy, pt_match_policy_type>
+ scanner_policies_type;
+ typedef scanner<IteratorT, scanner_policies_type> scanner_type;
+
+ scanner_policies_type policies;
+ IteratorT first = first_;
+ scanner_type scan(first, last, policies);
+ tree_match<IteratorT, NodeFactoryT> hit = p.derived().parse(scan);
+ return tree_parse_info<IteratorT, NodeFactoryT>(
+ first, hit, hit && (first == last), hit.length(), hit.trees);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// The following parse function is defined here, to allow the separation of
+// the compilation of the cpp_grammar from the function using it.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#if BOOST_WAVE_SEPARATE_GRAMMAR_INSTANTIATION != 0
+#define BOOST_WAVE_GRAMMAR_GEN_INLINE
+#else
+#define BOOST_WAVE_GRAMMAR_GEN_INLINE inline
+#endif
+
+template <typename LexIteratorT, typename TokenContainerT>
+BOOST_WAVE_GRAMMAR_GEN_INLINE
+boost::spirit::tree_parse_info<
+ LexIteratorT,
+ typename cpp_grammar_gen<LexIteratorT, TokenContainerT>::node_factory_type
+>
+cpp_grammar_gen<LexIteratorT, TokenContainerT>::parse_cpp_grammar (
+ LexIteratorT const &first, LexIteratorT const &last,
+ position_type const &act_pos, bool &found_eof,
+ token_type &found_directive, token_container_type &found_eoltokens)
+{
+ using namespace boost::spirit;
+ using namespace boost::wave;
+
+ cpp_grammar<token_type, TokenContainerT> g(found_eof, found_directive, found_eoltokens);
+ tree_parse_info<LexIteratorT, node_factory_type> hit =
+ parsetree_parse<node_factory_type>(first, last, g);
+
+#if BOOST_WAVE_DUMP_PARSE_TREE != 0
+ if (hit.match) {
+ tree_to_xml (BOOST_WAVE_DUMP_PARSE_TREE_OUT, hit.trees, "",
+ g.map_rule_id_to_name, &token_type::get_token_id,
+ &token_type::get_token_value);
+ }
+#endif
+
+ return hit;
+}
+
+#undef BOOST_WAVE_GRAMMAR_GEN_INLINE
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace grammars
+} // namespace wave
+} // namespace boost
+
+// the suffix header occurs after all of the code
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_SUFFIX
+#endif
+
+#endif // !defined(CPP_GRAMMAR_HPP_FEAEBC2E_2734_428B_A7CA_85E5A415E23E_INCLUDED)
diff --git a/boost/boost/wave/grammars/cpp_grammar_gen.hpp b/boost/boost/wave/grammars/cpp_grammar_gen.hpp
new file mode 100644
index 00000000000..3702971f9e1
--- /dev/null
+++ b/boost/boost/wave/grammars/cpp_grammar_gen.hpp
@@ -0,0 +1,110 @@
+/*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+
+ http://www.boost.org/
+
+ Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(CPP_GRAMMAR_GEN_HPP_80CB8A59_5411_4E45_B406_62531A12FB99_INCLUDED)
+#define CPP_GRAMMAR_GEN_HPP_80CB8A59_5411_4E45_B406_62531A12FB99_INCLUDED
+
+#include <boost/wave/wave_config.hpp>
+#include <boost/wave/language_support.hpp>
+
+#include <boost/spirit/core/nil.hpp>
+#include <boost/spirit/tree/parse_tree.hpp>
+
+#include <boost/pool/pool_alloc.hpp>
+
+// this must occur after all of the includes and before any code appears
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_PREFIX
+#endif
+
+// suppress warnings about dependent classes not being exported from the dll
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable : 4251 4231 4660)
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace wave {
+namespace grammars {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Here are the node id's of the different node of the cpp_grammar
+//
+///////////////////////////////////////////////////////////////////////////////
+#define BOOST_WAVE_PP_STATEMENT_ID 1
+#define BOOST_WAVE_INCLUDE_FILE_ID 2
+#define BOOST_WAVE_SYSINCLUDE_FILE_ID 3
+#define BOOST_WAVE_MACROINCLUDE_FILE_ID 4
+#define BOOST_WAVE_PLAIN_DEFINE_ID 5
+#define BOOST_WAVE_MACRO_PARAMETERS_ID 6
+#define BOOST_WAVE_MACRO_DEFINITION_ID 7
+#define BOOST_WAVE_UNDEFINE_ID 8
+#define BOOST_WAVE_IFDEF_ID 9
+#define BOOST_WAVE_IFNDEF_ID 10
+#define BOOST_WAVE_IF_ID 11
+#define BOOST_WAVE_ELIF_ID 12
+#define BOOST_WAVE_ELSE_ID 13
+#define BOOST_WAVE_ENDIF_ID 14
+#define BOOST_WAVE_LINE_ID 15
+#define BOOST_WAVE_ERROR_ID 16
+#define BOOST_WAVE_WARNING_ID 17
+#define BOOST_WAVE_PRAGMA_ID 18
+#define BOOST_WAVE_ILLFORMED_ID 19
+#define BOOST_WAVE_PPSPACE_ID 20
+#define BOOST_WAVE_PPQUALIFIEDNAME_ID 21
+#define BOOST_WAVE_REGION_ID 22
+#define BOOST_WAVE_ENDREGION_ID 23
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// cpp_grammar_gen template class
+//
+// This template helps separating the compilation of the cpp_grammar
+// class from the compilation of the main pp_iterator. This is done to
+// safe compilation time.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+template <typename LexIteratorT, typename TokenContainerT>
+struct BOOST_WAVE_DECL cpp_grammar_gen
+{
+ typedef LexIteratorT iterator_type;
+ typedef typename LexIteratorT::token_type token_type;
+ typedef TokenContainerT token_container_type;
+ typedef typename token_type::position_type position_type;
+ typedef boost::spirit::node_val_data_factory<
+// boost::spirit::nil_t,
+// boost::pool_allocator<boost::spirit::nil_t>
+ > node_factory_type;
+
+// parse the cpp_grammar and return the resulting parse tree
+ static boost::spirit::tree_parse_info<iterator_type, node_factory_type>
+ parse_cpp_grammar (iterator_type const &first, iterator_type const &last,
+ position_type const &act_pos, bool &found_eof,
+ token_type &found_directive, token_container_type &found_eoltokens);
+};
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace grammars
+} // namespace wave
+} // namespace boost
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+// the suffix header occurs after all of the code
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_SUFFIX
+#endif
+
+#endif // !defined(CPP_GRAMMAR_GEN_HPP_80CB8A59_5411_4E45_B406_62531A12FB99_INCLUDED)
diff --git a/boost/boost/wave/grammars/cpp_intlit_grammar.hpp b/boost/boost/wave/grammars/cpp_intlit_grammar.hpp
new file mode 100644
index 00000000000..07bbb7382df
--- /dev/null
+++ b/boost/boost/wave/grammars/cpp_intlit_grammar.hpp
@@ -0,0 +1,192 @@
+/*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+
+ http://www.boost.org/
+
+ Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(CPP_INTLIT_GRAMMAR_HPP_2E1E70B1_F15C_4132_8554_10A231B0D91C_INCLUDED)
+#define CPP_INTLIT_GRAMMAR_HPP_2E1E70B1_F15C_4132_8554_10A231B0D91C_INCLUDED
+
+#include <boost/spirit/core.hpp>
+#include <boost/spirit/attribute/closure.hpp>
+#if SPIRIT_VERSION >= 0x1700
+#include <boost/spirit/actor/assign_actor.hpp>
+#include <boost/spirit/actor/push_back_actor.hpp>
+#endif // SPIRIT_VERSION >= 0x1700
+
+#include <boost/spirit/phoenix/operators.hpp>
+#include <boost/spirit/phoenix/primitives.hpp>
+#include <boost/spirit/phoenix/statements.hpp>
+
+#include <boost/wave/wave_config.hpp>
+#include <boost/wave/cpp_exceptions.hpp>
+#include <boost/wave/grammars/cpp_literal_grammar_gen.hpp>
+
+#if !defined(spirit_append_actor)
+#if SPIRIT_VERSION >= 0x1700
+#define spirit_append_actor(actor) boost::spirit::push_back_a(actor)
+#define spirit_assign_actor(actor) boost::spirit::assign_a(actor)
+#else
+#define spirit_append_actor(actor) boost::spirit::append(actor)
+#define spirit_assign_actor(actor) boost::spirit::assign(actor)
+#endif // SPIRIT_VERSION >= 0x1700
+#endif // !defined(spirit_append_actor)
+
+// this must occur after all of the includes and before any code appears
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_PREFIX
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Reusable grammar for parsing of C++ style integer literals
+//
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace wave {
+namespace grammars {
+
+namespace closures {
+
+ struct intlit_closure
+ : boost::spirit::closure<intlit_closure, unsigned long>
+ {
+ member1 val;
+ };
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// define, whether the rule's should generate some debug output
+#define TRACE_INTLIT_GRAMMAR \
+ bool(BOOST_SPIRIT_DEBUG_FLAGS_CPP & BOOST_SPIRIT_DEBUG_FLAGS_INTLIT_GRAMMAR) \
+ /**/
+
+struct intlit_grammar :
+ boost::spirit::grammar<intlit_grammar, closures::intlit_closure::context_t>
+{
+ intlit_grammar(bool &is_unsigned_) : is_unsigned(is_unsigned_)
+ {
+ BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR_NAME(*this, "intlit_grammar",
+ TRACE_INTLIT_GRAMMAR);
+ }
+
+ template <typename ScannerT>
+ struct definition
+ {
+ typedef boost::spirit::rule<ScannerT> rule_t;
+
+ rule_t int_lit;
+ boost::spirit::subrule<0> sub_int_lit;
+ boost::spirit::subrule<1> oct_lit;
+ boost::spirit::subrule<2> hex_lit;
+ boost::spirit::subrule<3> dec_lit;
+
+ definition(intlit_grammar const &self)
+ {
+ using namespace boost::spirit;
+ using namespace phoenix;
+
+ int_lit = (
+ sub_int_lit =
+ ( ch_p('0')[self.val = 0] >> (hex_lit | oct_lit)
+ | dec_lit
+ )
+ >> !as_lower_d[
+ (ch_p('u')[var(self.is_unsigned) = true] || ch_p('l'))
+ | (ch_p('l') || ch_p('u')[var(self.is_unsigned) = true])
+ ]
+ ,
+
+ hex_lit =
+ (ch_p('X') | ch_p('x'))
+ >> uint_parser<unsigned long, 16>()
+ [
+ self.val = arg1,
+ var(self.is_unsigned) = true
+ ]
+ ,
+
+ oct_lit =
+ !uint_parser<unsigned long, 8>()
+ [
+ self.val = arg1,
+ var(self.is_unsigned) = true
+ ]
+ ,
+
+ dec_lit =
+ int_parser<long, 10>()
+ [
+ self.val = arg1
+ ]
+ )
+ ;
+
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(int_lit, TRACE_INTLIT_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(sub_int_lit, TRACE_INTLIT_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(hex_lit, TRACE_INTLIT_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(oct_lit, TRACE_INTLIT_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(dec_lit, TRACE_INTLIT_GRAMMAR);
+ }
+
+ // start rule of this grammar
+ rule_t const& start() const
+ { return int_lit; }
+ };
+
+ bool &is_unsigned;
+};
+
+#undef TRACE_INTLIT_GRAMMAR
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// The following function is defined here, to allow the separation of
+// the compilation of the intlit_grammar from the function using it.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#if BOOST_WAVE_SEPARATE_GRAMMAR_INSTANTIATION != 0
+#define BOOST_WAVE_INTLITGRAMMAR_GEN_INLINE
+#else
+#define BOOST_WAVE_INTLITGRAMMAR_GEN_INLINE inline
+#endif
+
+template <typename TokenT>
+BOOST_WAVE_INTLITGRAMMAR_GEN_INLINE
+unsigned long
+intlit_grammar_gen<TokenT>::evaluate(TokenT const &token,
+ bool &is_unsigned)
+{
+ using namespace boost::spirit;
+
+intlit_grammar g(is_unsigned);
+unsigned long result = 0;
+typename TokenT::string_type const &token_val = token.get_value();
+parse_info<typename TokenT::string_type::const_iterator> hit =
+ parse(token_val.begin(), token_val.end(), g[spirit_assign_actor(result)]);
+
+ if (!hit.hit) {
+ BOOST_WAVE_THROW(preprocess_exception, ill_formed_integer_literal,
+ token_val.c_str(), token.get_position());
+ }
+ return result;
+}
+
+#undef BOOST_WAVE_INTLITGRAMMAR_GEN_INLINE
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace grammars
+} // namespace wave
+} // namespace boost
+
+// the suffix header occurs after all of the code
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_SUFFIX
+#endif
+
+#endif // !defined(CPP_INTLIT_GRAMMAR_HPP_2E1E70B1_F15C_4132_8554_10A231B0D91C_INCLUDED)
diff --git a/boost/boost/wave/grammars/cpp_literal_grammar_gen.hpp b/boost/boost/wave/grammars/cpp_literal_grammar_gen.hpp
new file mode 100644
index 00000000000..d608ae84a06
--- /dev/null
+++ b/boost/boost/wave/grammars/cpp_literal_grammar_gen.hpp
@@ -0,0 +1,77 @@
+/*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+
+ http://www.boost.org/
+
+ Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(CPP_LITERAL_GRAMMAR_GEN_HPP_67794A6C_468A_4AAB_A757_DEDDB182F5A0_INCLUDED)
+#define CPP_LITERAL_GRAMMAR_GEN_HPP_67794A6C_468A_4AAB_A757_DEDDB182F5A0_INCLUDED
+
+#include <boost/wave/wave_config.hpp>
+#include <boost/wave/grammars/cpp_value_error.hpp>
+
+// this must occur after all of the includes and before any code appears
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_PREFIX
+#endif
+
+// suppress warnings about dependent classes not being exported from the dll
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable : 4251 4231 4660)
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace wave {
+namespace grammars {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// cpp_intlit_grammar_gen template class
+//
+// This template helps separating the compilation of the intlit_grammar
+// class from the compilation of the expression_grammar. This is done
+// to safe compilation time.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename TokenT>
+struct BOOST_WAVE_DECL intlit_grammar_gen {
+
+ static unsigned long evaluate(TokenT const &tok, bool &is_unsigned);
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// cpp_chlit_grammar_gen template class
+//
+// This template helps separating the compilation of the chlit_grammar
+// class from the compilation of the expression_grammar. This is done
+// to safe compilation time.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename TokenT>
+struct BOOST_WAVE_DECL chlit_grammar_gen {
+
+ static unsigned int evaluate(TokenT const &tok, value_error& status);
+};
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace grammars
+} // namespace wave
+} // namespace boost
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+// the suffix header occurs after all of the code
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_SUFFIX
+#endif
+
+#endif // !defined(CPP_LITERAL_GRAMMAR_GEN_HPP_67794A6C_468A_4AAB_A757_DEDDB182F5A0_INCLUDED)
diff --git a/boost/boost/wave/grammars/cpp_predef_macros_gen.hpp b/boost/boost/wave/grammars/cpp_predef_macros_gen.hpp
new file mode 100644
index 00000000000..c555f9b9fc5
--- /dev/null
+++ b/boost/boost/wave/grammars/cpp_predef_macros_gen.hpp
@@ -0,0 +1,80 @@
+/*=============================================================================
+ A Standard compliant C++ preprocessor
+
+ http://www.boost.org/
+
+ Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(CPP_PREDEF_MACROS_GEN_HPP_CADB6D2C_76A4_4988_83E1_EFFC6902B9A2_INCLUDED)
+#define CPP_PREDEF_MACROS_GEN_HPP_CADB6D2C_76A4_4988_83E1_EFFC6902B9A2_INCLUDED
+
+#include <boost/spirit/tree/parse_tree.hpp>
+
+#include <boost/wave/wave_config.hpp>
+
+// this must occur after all of the includes and before any code appears
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_PREFIX
+#endif
+
+// suppress warnings about dependent classes not being exported from the dll
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable : 4251 4231 4660)
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace wave {
+namespace grammars {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Here are the node id's of the different node of the cpp_grammar
+//
+///////////////////////////////////////////////////////////////////////////////
+#define BOOST_WAVE_PLAIN_DEFINE_ID 5
+#define BOOST_WAVE_MACRO_PARAMETERS_ID 6
+#define BOOST_WAVE_MACRO_DEFINITION_ID 7
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// predefined_macros_grammar_gen template class
+//
+// This template helps separating the compilation of the
+// predefined_macros_grammar class from the compilation of the
+// main pp_iterator. This is done to safe compilation time.
+//
+// This class helps parsing command line given macro definitions in a
+// similar way, as macros are parsed by the cpp_grammar class.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+template <typename LexIteratorT>
+struct BOOST_WAVE_DECL predefined_macros_grammar_gen
+{
+ typedef LexIteratorT iterator_type;
+
+// parse the cpp_grammar and return the resulting parse tree
+ static boost::spirit::tree_parse_info<iterator_type>
+ parse_predefined_macro (iterator_type const &first, iterator_type const &last);
+};
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace grammars
+} // namespace wave
+} // namespace boost
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+// the suffix header occurs after all of the code
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_SUFFIX
+#endif
+
+#endif // !defined(CPP_PREDEF_MACROS_GEN_HPP_CADB6D2C_76A4_4988_83E1_EFFC6902B9A2_INCLUDED)
diff --git a/boost/boost/wave/grammars/cpp_predef_macros_grammar.hpp b/boost/boost/wave/grammars/cpp_predef_macros_grammar.hpp
new file mode 100644
index 00000000000..a2deee485b6
--- /dev/null
+++ b/boost/boost/wave/grammars/cpp_predef_macros_grammar.hpp
@@ -0,0 +1,173 @@
+/*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+
+ http://www.boost.org/
+
+ Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(CPP_PREDEF_MACROS_GRAMMAR_HPP_53858C9A_C202_4D60_AD92_DC9CAE4DBB43_INCLUDED)
+#define CPP_PREDEF_MACROS_GRAMMAR_HPP_53858C9A_C202_4D60_AD92_DC9CAE4DBB43_INCLUDED
+
+#include <boost/spirit/core.hpp>
+#include <boost/spirit/tree/parse_tree.hpp>
+#include <boost/spirit/utility/confix.hpp>
+#include <boost/spirit/utility/lists.hpp>
+
+#include <boost/wave/wave_config.hpp>
+#include <boost/wave/token_ids.hpp>
+#include <boost/wave/grammars/cpp_predef_macros_gen.hpp>
+#include <boost/wave/util/pattern_parser.hpp>
+
+// this must occur after all of the includes and before any code appears
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_PREFIX
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace wave {
+namespace grammars {
+
+///////////////////////////////////////////////////////////////////////////////
+// define, whether the rule's should generate some debug output
+#define TRACE_PREDEF_MACROS_GRAMMAR \
+ bool(BOOST_SPIRIT_DEBUG_FLAGS_CPP & BOOST_SPIRIT_DEBUG_FLAGS_PREDEF_MACROS_GRAMMAR) \
+ /**/
+
+///////////////////////////////////////////////////////////////////////////////
+// Encapsulation of the grammar for command line driven predefined macros.
+struct predefined_macros_grammar :
+ public boost::spirit::grammar<predefined_macros_grammar>
+{
+ template <typename ScannerT>
+ struct definition
+ {
+ // 'normal' (parse_tree generating) rule type
+ typedef boost::spirit::rule<ScannerT, boost::spirit::dynamic_parser_tag>
+ rule_type;
+
+ rule_type plain_define, macro_definition, macro_parameters;
+
+ definition(predefined_macros_grammar const &/*self*/)
+ {
+ // import the spirit and cpplexer namespaces here
+ using namespace boost::spirit;
+ using namespace boost::wave;
+ using namespace boost::wave::util;
+
+ // set the rule id's for later use
+ plain_define.set_id(BOOST_WAVE_PLAIN_DEFINE_ID);
+ macro_parameters.set_id(BOOST_WAVE_MACRO_PARAMETERS_ID);
+ macro_definition.set_id(BOOST_WAVE_MACRO_DEFINITION_ID);
+
+ // recognizes command line defined macro syntax, i.e.
+ // -DMACRO
+ // -DMACRO=
+ // -DMACRO=value
+ // -DMACRO(x)
+ // -DMACRO(x)=
+ // -DMACRO(x)=value
+
+ // This grammar resembles the overall structure of the cpp_grammar to
+ // make it possible to reuse the parse tree traversal code
+ plain_define
+ = ( ch_p(T_IDENTIFIER)
+ | pattern_p(KeywordTokenType, TokenTypeMask)
+ | pattern_p(OperatorTokenType|AltExtTokenType,
+ ExtTokenTypeMask) // and, bit_and etc.
+ | pattern_p(BoolLiteralTokenType, TokenTypeMask) // true/false
+ )
+ >> !macro_parameters
+ >> !macro_definition
+ ;
+
+ // parameter list
+ macro_parameters
+ = confix_p(
+ no_node_d[ch_p(T_LEFTPAREN) >> *ch_p(T_SPACE)],
+ !list_p(
+ ( ch_p(T_IDENTIFIER)
+ | pattern_p(KeywordTokenType, TokenTypeMask)
+ | pattern_p(OperatorTokenType|AltExtTokenType,
+ ExtTokenTypeMask) // and, bit_and etc.
+ | pattern_p(BoolLiteralTokenType, TokenTypeMask) // true/false
+#if BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS != 0
+ | ch_p(T_ELLIPSIS)
+#endif
+ ),
+ no_node_d
+ [
+ *ch_p(T_SPACE) >> ch_p(T_COMMA) >> *ch_p(T_SPACE)
+ ]
+ ),
+ no_node_d[*ch_p(T_SPACE) >> ch_p(T_RIGHTPAREN)]
+ )
+ ;
+
+ // macro body (anything left until eol)
+ macro_definition
+ = no_node_d[ch_p(T_ASSIGN)]
+ >> *anychar_p
+ ;
+
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(plain_define, TRACE_PREDEF_MACROS_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(macro_definition, TRACE_PREDEF_MACROS_GRAMMAR);
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(macro_parameters, TRACE_PREDEF_MACROS_GRAMMAR);
+ }
+
+ // start rule of this grammar
+ rule_type const& start() const
+ { return plain_define; }
+ };
+
+ predefined_macros_grammar()
+ {
+ BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR_NAME(*this,
+ "predefined_macros_grammar", TRACE_PREDEF_MACROS_GRAMMAR);
+ }
+
+};
+
+///////////////////////////////////////////////////////////////////////////////
+#undef TRACE_PREDEF_MACROS_GRAMMAR
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// The following parse function is defined here, to allow the separation of
+// the compilation of the cpp_predefined_macros_grammar from the function
+// using it.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#if BOOST_WAVE_SEPARATE_GRAMMAR_INSTANTIATION != 0
+#define BOOST_WAVE_PREDEF_MACROS_GRAMMAR_GEN_INLINE
+#else
+#define BOOST_WAVE_PREDEF_MACROS_GRAMMAR_GEN_INLINE inline
+#endif
+
+template <typename LexIteratorT>
+BOOST_WAVE_PREDEF_MACROS_GRAMMAR_GEN_INLINE
+boost::spirit::tree_parse_info<LexIteratorT>
+predefined_macros_grammar_gen<LexIteratorT>::parse_predefined_macro (
+ LexIteratorT const &first, LexIteratorT const &last)
+{
+ predefined_macros_grammar g;
+ return boost::spirit::pt_parse (first, last, g);
+}
+
+#undef BOOST_WAVE_PREDEF_MACROS_GRAMMAR_GEN_INLINE
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace grammars
+} // namespace wave
+} // namespace boost
+
+// the suffix header occurs after all of the code
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_SUFFIX
+#endif
+
+#endif // !defined(CPP_PREDEF_MACROS_GRAMMAR_HPP_53858C9A_C202_4D60_AD92_DC9CAE4DBB43_INCLUDED)
diff --git a/boost/boost/wave/grammars/cpp_value_error.hpp b/boost/boost/wave/grammars/cpp_value_error.hpp
new file mode 100644
index 00000000000..5f9b1ea6d24
--- /dev/null
+++ b/boost/boost/wave/grammars/cpp_value_error.hpp
@@ -0,0 +1,51 @@
+/*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+
+ http://www.boost.org/
+
+ Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(BOOST_WAVE_CPP_VALUE_ERROR_INCLUDED)
+#define BOOST_WAVE_CPP_VALUE_ERROR_INCLUDED
+
+#include <boost/wave/wave_config.hpp>
+
+// this must occur after all of the includes and before any code appears
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_PREFIX
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace wave {
+namespace grammars {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// value_error enum type
+//
+// This is used to encode any error occurred during the evaluation of a
+// conditional preprocessor expression
+//
+///////////////////////////////////////////////////////////////////////////////
+enum value_error {
+ error_noerror = 0x0,
+ error_division_by_zero = 0x1,
+ error_integer_overflow = 0x2,
+ error_character_overflow = 0x4
+};
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace grammars
+} // namespace wave
+} // namespace boost
+
+// the suffix header occurs after all of the code
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_SUFFIX
+#endif
+
+#endif // !defined(BOOST_WAVE_CPP_VALUE_ERROR_INCLUDED)
diff --git a/boost/boost/wave/language_support.hpp b/boost/boost/wave/language_support.hpp
new file mode 100644
index 00000000000..ae66b8d4e56
--- /dev/null
+++ b/boost/boost/wave/language_support.hpp
@@ -0,0 +1,178 @@
+/*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+ Definition of the various language support constants
+
+ http://www.boost.org/
+
+ Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(LANGUAGE_SUPPORT_HPP_93EDD057_2DEF_44BC_BC9F_FDABB9F51AFA_INCLUDED)
+#define LANGUAGE_SUPPORT_HPP_93EDD057_2DEF_44BC_BC9F_FDABB9F51AFA_INCLUDED
+
+#include <boost/wave/wave_config.hpp>
+
+// this must occur after all of the includes and before any code appears
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_PREFIX
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace wave {
+
+enum language_support {
+// support flags for C++98
+ support_normal = 0x01,
+ support_cpp = support_normal,
+
+ support_option_long_long = 0x02,
+
+#if BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS != 0
+// support flags for C99
+ support_option_variadics = 0x04,
+ support_c99 = support_option_variadics | support_option_long_long | 0x08,
+#endif
+
+ support_option_mask = 0xFF00,
+ support_option_preserve_comments = 0x0100,
+ support_option_no_character_validation = 0x0200,
+ support_option_convert_trigraphs = 0x0400,
+ support_option_single_line = 0x0800,
+ support_option_prefer_pp_numbers = 0x1000,
+ support_option_emit_line_directives = 0x2000,
+ support_option_include_guard_detection = 0x4000
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// need_cpp
+//
+// Extract, if the language to support is C++98
+//
+///////////////////////////////////////////////////////////////////////////////
+inline bool
+need_cpp(language_support language)
+{
+ return (language & ~support_option_mask) == support_cpp;
+}
+
+#if BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS != 0
+///////////////////////////////////////////////////////////////////////////////
+//
+// need_c99
+//
+// Extract, if the language to support is C99
+//
+///////////////////////////////////////////////////////////////////////////////
+inline bool
+need_c99(language_support language)
+{
+ return (language & ~support_option_mask) == support_c99;
+}
+
+#else // BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS != 0
+
+///////////////////////////////////////////////////////////////////////////////
+inline bool
+need_variadics(language_support language)
+{
+ return false;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+inline language_support
+enable_variadics(language_support language, bool enable = true)
+{
+ return language;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+inline bool
+need_c99(language_support language)
+{
+ return false;
+}
+
+#endif // BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS != 0
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// get_support_options
+//
+// Set preserve comments support in the language to support
+//
+///////////////////////////////////////////////////////////////////////////////
+inline language_support
+get_support_options(language_support language)
+{
+ return static_cast<language_support>(language & support_option_mask);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// set_support_options
+//
+// Set language option (for fine tuning of lexer behavior)
+//
+///////////////////////////////////////////////////////////////////////////////
+inline language_support
+set_support_options(language_support language, language_support option)
+{
+ return static_cast<language_support>(
+ (language & ~support_option_mask) | (option & support_option_mask));
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// Get and set different language options
+#define BOOST_WAVE_NEED_OPTION(option) \
+ inline bool need_ ## option(language_support language) \
+ { \
+ return (language & support_option_ ## option) ? true : false; \
+ } \
+ /**/
+
+#define BOOST_WAVE_ENABLE_OPTION(option) \
+ inline language_support \
+ enable_ ## option(language_support language, bool enable = true) \
+ { \
+ if (enable) \
+ return static_cast<language_support>(language | support_option_ ## option); \
+ return static_cast<language_support>(language & ~support_option_ ## option); \
+ } \
+ /**/
+
+#define BOOST_WAVE_OPTION(option) \
+ BOOST_WAVE_NEED_OPTION(option) \
+ BOOST_WAVE_ENABLE_OPTION(option) \
+ /**/
+
+///////////////////////////////////////////////////////////////////////////////
+BOOST_WAVE_OPTION(long_long) // support_option_long_long
+BOOST_WAVE_OPTION(preserve_comments) // support_option_preserve_comments
+BOOST_WAVE_OPTION(prefer_pp_numbers) // support_option_prefer_pp_numbers
+BOOST_WAVE_OPTION(emit_line_directives) // support_option_emit_line_directives
+BOOST_WAVE_OPTION(single_line) // support_option_single_line
+BOOST_WAVE_OPTION(convert_trigraphs) // support_option_convert_trigraphs
+#if BOOST_WAVE_SUPPORT_PRAGMA_ONCE != 0
+BOOST_WAVE_OPTION(include_guard_detection) // support_option_include_guard_detection
+#endif
+#if BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS != 0
+BOOST_WAVE_OPTION(variadics) // support_option_variadics
+#endif
+
+#undef BOOST_WAVE_NEED_OPTION
+#undef BOOST_WAVE_ENABLE_OPTION
+#undef BOOST_WAVE_OPTION
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace wave
+} // namespace boost
+
+// the suffix header occurs after all of the code
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_SUFFIX
+#endif
+
+#endif // !defined(LANGUAGE_SUPPORT_HPP_93EDD057_2DEF_44BC_BC9F_FDABB9F51AFA_INCLUDED)
diff --git a/boost/boost/wave/preprocessing_hooks.hpp b/boost/boost/wave/preprocessing_hooks.hpp
new file mode 100644
index 00000000000..6aa7cd34539
--- /dev/null
+++ b/boost/boost/wave/preprocessing_hooks.hpp
@@ -0,0 +1,324 @@
+/*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+
+ http://www.boost.org/
+
+ Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(PREPROCESSING_HOOKS_HPP_338DE478_A13C_4B63_9BA9_041C917793B8_INCLUDED)
+#define PREPROCESSING_HOOKS_HPP_338DE478_A13C_4B63_9BA9_041C917793B8_INCLUDED
+
+#include <boost/wave/wave_config.hpp>
+#include <vector>
+
+// this must occur after all of the includes and before any code appears
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_PREFIX
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace wave {
+namespace context_policies {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// The default_preprocessing_hooks class is a placeholder for all
+// preprocessing hooks called from inside the preprocessing engine
+//
+///////////////////////////////////////////////////////////////////////////////
+struct default_preprocessing_hooks {
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // The function 'expanding_function_like_macro' is called, whenever a
+ // function-like macro is to be expanded.
+ //
+ // The macroname parameter marks the position, where the macro to expand
+ // is defined.
+ // The formal_args parameter holds the formal arguments used during the
+ // definition of the macro.
+ // The definition parameter holds the macro definition for the macro to
+ // trace.
+ //
+ // The macro call parameter marks the position, where this macro invoked.
+ // The arguments parameter holds the macro arguments used during the
+ // invocation of the macro
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename TokenT, typename ContainerT>
+ void expanding_function_like_macro(
+ TokenT const &macrodef, std::vector<TokenT> const &formal_args,
+ ContainerT const &definition,
+ TokenT const &macrocall, std::vector<ContainerT> const &arguments)
+ {}
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // The function 'expanding_object_like_macro' is called, whenever a
+ // object-like macro is to be expanded .
+ //
+ // The macroname parameter marks the position, where the macro to expand
+ // is defined.
+ // The definition parameter holds the macro definition for the macro to
+ // trace.
+ //
+ // The macro call parameter marks the position, where this macro invoked.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename TokenT, typename ContainerT>
+ void expanding_object_like_macro(TokenT const &macro,
+ ContainerT const &definition, TokenT const &macrocall)
+ {}
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // The function 'expanded_macro' is called, whenever the expansion of a
+ // macro is finished but before the rescanning process starts.
+ //
+ // The parameter 'result' contains the token sequence generated as the
+ // result of the macro expansion.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename ContainerT>
+ void expanded_macro(ContainerT const &result)
+ {}
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // The function 'rescanned_macro' is called, whenever the rescanning of a
+ // macro is finished.
+ //
+ // The parameter 'result' contains the token sequence generated as the
+ // result of the rescanning.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename ContainerT>
+ void rescanned_macro(ContainerT const &result)
+ {}
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // The function 'found_include_directive' is called, whenever a #include
+ // directive was located.
+ //
+ // The parameter 'filename' contains the (expanded) file name found after
+ // the #include directive. This has the format '<file>', '"file"' or
+ // 'file'.
+ // The formats '<file>' or '"file"' are used for #include directives found
+ // in the preprocessed token stream, the format 'file' is used for files
+ // specified through the --force_include command line argument.
+ //
+ // The parameter 'include_next' is set to true if the found directive was
+ // a #include_next directive and the BOOST_WAVE_SUPPORT_INCLUDE_NEXT
+ // preprocessing constant was defined to something != 0.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ void
+ found_include_directive(std::string const &filename, bool include_next)
+ {}
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // The function 'opened_include_file' is called, whenever a file referred
+ // by an #include directive was successfully located and opened.
+ //
+ // The parameter 'filename' contains the file system path of the
+ // opened file (this is relative to the directory of the currently
+ // processed file or a absolute path depending on the paths given as the
+ // include search paths).
+ //
+ // The include_depth parameter contains the current include file depth.
+ //
+ // The is_system_include parameter denotes, whether the given file was
+ // found as a result of a #include <...> directive.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ void
+ opened_include_file(std::string const &relname, std::string const &absname,
+ std::size_t include_depth, bool is_system_include)
+ {}
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // The function 'returning_from_include_file' is called, whenever an
+ // included file is about to be closed after it's processing is complete.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ void
+ returning_from_include_file()
+ {}
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // The function 'interpret_pragma' is called, whenever a #pragma command
+ // directive is found which isn't known to the core Wave library, where
+ // command is the value defined as the BOOST_WAVE_PRAGMA_KEYWORD constant
+ // which defaults to "wave".
+ //
+ // The parameter 'ctx' is a reference to the context object used for
+ // instantiating the preprocessing iterators by the user.
+ //
+ // The parameter 'pending' may be used to push tokens back into the input
+ // stream, which are to be used as the replacement text for the whole
+ // #pragma directive.
+ //
+ // The parameter 'option' contains the name of the interpreted pragma.
+ //
+ // The parameter 'values' holds the values of the parameter provided to
+ // the pragma operator.
+ //
+ // The parameter 'act_token' contains the actual #pragma token, which may
+ // be used for error output.
+ //
+ // If the return value is 'false', the whole #pragma directive is
+ // interpreted as unknown and a corresponding error message is issued. A
+ // return value of 'true' signs a successful interpretation of the given
+ // #pragma.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename ContextT, typename ContainerT>
+ bool
+ interpret_pragma(ContextT const &ctx, ContainerT &pending,
+ typename ContextT::token_type const &option, ContainerT const &values,
+ typename ContextT::token_type const &act_token)
+ {
+ return false;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // The function 'defined_macro' is called, whenever a macro was defined
+ // successfully.
+ //
+ // The parameter 'name' is a reference to the token holding the macro name.
+ //
+ // The parameter 'is_functionlike' is set to true, whenever the newly
+ // defined macro is defined as a function like macro.
+ //
+ // The parameter 'parameters' holds the parameter tokens for the macro
+ // definition. If the macro has no parameters or if it is a object like
+ // macro, then this container is empty.
+ //
+ // The parameter 'definition' contains the token sequence given as the
+ // replacement sequence (definition part) of the newly defined macro.
+ //
+ // The parameter 'is_predefined' is set to true for all macros predefined
+ // during the initialisation phase of the library.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename TokenT, typename ParametersT, typename DefinitionT>
+ void
+ defined_macro(TokenT const &macro_name, bool is_functionlike,
+ ParametersT const &parameters, DefinitionT const &definition,
+ bool is_predefined)
+ {}
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // The function 'undefined_macro' is called, whenever a macro definition
+ // was removed successfully.
+ //
+ // The parameter 'name' holds the name of the macro, which definition was
+ // removed.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename TokenT>
+ void
+ undefined_macro(TokenT const &macro_name)
+ {}
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // The function 'found_directive' is called, whenever a preprocessor
+ // directive was encountered, but before the corresponding action is
+ // executed.
+ //
+ // The parameter 'directive' is a reference to the token holding the
+ // preprocessing directive.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename TokenT>
+ void
+ found_directive(TokenT const& directive)
+ {}
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // The function 'evaluated_conditional_expression' is called, whenever a
+ // conditional preprocessing expression was evaluated (the expression
+ // given to a #if, #ifdef or #ifndef directive)
+ //
+ // The parameter 'expression' holds the non-expanded token sequence
+ // comprising the evaluated expression.
+ //
+ // The parameter expression_value contains the result of the evaluation of
+ // the expression in the current preprocessing context.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename ContainerT>
+ void
+ evaluated_conditional_expression(ContainerT const& expression,
+ bool expression_value)
+ {}
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // The function 'skipped_token' is called, whenever a token is about to be
+ // skipped due to a false preprocessor condition (code fragments to be
+ // skipped inside the not evaluated conditional #if/#else/#endif branches).
+ //
+ // The parameter 'token' refers to the token to be skipped.
+ //
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename TokenT>
+ void
+ skipped_token(TokenT const& token)
+ {}
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // The function 'may_skip_whitespace' is called, will be called by the
+ // library, whenever a token is about to be returned to the calling
+ // application.
+ //
+ // The parameter 'ctx' is a reference to the context object used for
+ // instantiating the preprocessing iterators by the user.
+ //
+ // The 'token' parameter holds a reference to the current token. The policy
+ // is free to change this token if needed.
+ //
+ // The 'skipped_newline' parameter holds a reference to a boolean value
+ // which should be set to true by the policy function whenever a newline
+ // is going to be skipped.
+ //
+ // If the return value is true, the given token is skipped and the
+ // preprocessing continues to the next token. If the return value is
+ // false, the given token is returned to the calling application.
+ //
+ // ATTENTION!
+ // Caution has to be used, because by returning true the policy function
+ // is able to force skipping even significant tokens, not only whitespace.
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename ContextT, typename TokenT>
+ bool
+ may_skip_whitespace(ContextT const& ctx, TokenT& token, bool& skipped_newline)
+ { return false; }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace context_policies
+} // namespace wave
+} // namespace boost
+
+// the suffix header occurs after all of the code
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_SUFFIX
+#endif
+
+#endif // !defined(PREPROCESSING_HOOKS_HPP_338DE478_A13C_4B63_9BA9_041C917793B8_INCLUDED)
diff --git a/boost/boost/wave/token_ids.hpp b/boost/boost/wave/token_ids.hpp
new file mode 100644
index 00000000000..48d4c693efc
--- /dev/null
+++ b/boost/boost/wave/token_ids.hpp
@@ -0,0 +1,345 @@
+/*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+ The definition of a default set of token identifiers and related
+ functions.
+
+ http://www.boost.org/
+
+ Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(TOKEN_IDS_HPP_414E9A58_F079_4789_8AFF_513815CE475B_INCLUDED)
+#define TOKEN_IDS_HPP_414E9A58_F079_4789_8AFF_513815CE475B_INCLUDED
+
+#include <string>
+
+#include <boost/wave/wave_config.hpp>
+
+// this must occur after all of the includes and before any code appears
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_PREFIX
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// Allow external redefinition of the token identifiers to use
+#if !defined(BOOST_WAVE_TOKEN_IDS_DEFINED)
+#define BOOST_WAVE_TOKEN_IDS_DEFINED
+
+#if defined (__FreeBSD__) && defined (T_DIVIDE)
+#undef T_DIVIDE
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace wave {
+
+///////////////////////////////////////////////////////////////////////////////
+// assemble tokenid's
+#define TOKEN_FROM_ID(id, cat) ((id) | (cat))
+#define ID_FROM_TOKEN(tok) ((tok) & ~TokenTypeMask)
+#define BASEID_FROM_TOKEN(tok) ((tok) & ~ExtTokenTypeMask)
+
+///////////////////////////////////////////////////////////////////////////////
+// the token_category helps to classify the different token types
+enum token_category {
+ IdentifierTokenType = 0x10000000,
+ ParameterTokenType = 0x11000000,
+ ExtParameterTokenType = 0x11100000,
+ KeywordTokenType = 0x20000000,
+ OperatorTokenType = 0x30000000,
+ LiteralTokenType = 0x40000000,
+ IntegerLiteralTokenType = 0x41000000,
+ FloatingLiteralTokenType = 0x42000000,
+ StringLiteralTokenType = 0x43000000,
+ CharacterLiteralTokenType = 0x44000000,
+ BoolLiteralTokenType = 0x45000000,
+ PPTokenType = 0x50000000,
+ PPConditionalTokenType = 0x50800000,
+
+ UnknownTokenType = 0xA0000000,
+ EOLTokenType = 0xB0000000,
+ EOFTokenType = 0xC0000000,
+ WhiteSpaceTokenType = 0xD0000000,
+ InternalTokenType = 0xE0000000,
+
+ TokenTypeMask = 0xFF000000,
+ AltTokenType = 0x00100000,
+ TriGraphTokenType = 0x00200000,
+ AltExtTokenType = 0x00500000, // and, bit_and etc.
+ ExtTokenTypeMask = 0xFFF00000,
+ ExtTokenOnlyMask = 0x00F00000,
+ TokenValueMask = 0x000FFFFF,
+ MainTokenMask = 0xFF0FFFFF // TokenTypeMask|TokenValueMask
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// the token_id assigns unique numbers to the different C++ lexemes
+enum token_id {
+ T_UNKNOWN = 0,
+ T_FIRST_TOKEN = 256,
+ T_AND = TOKEN_FROM_ID(T_FIRST_TOKEN, OperatorTokenType),
+ T_AND_ALT = TOKEN_FROM_ID(T_FIRST_TOKEN, OperatorTokenType|AltExtTokenType),
+ T_ANDAND = TOKEN_FROM_ID(257, OperatorTokenType),
+ T_ANDAND_ALT = TOKEN_FROM_ID(257, OperatorTokenType|AltExtTokenType),
+ T_ASSIGN = TOKEN_FROM_ID(258, OperatorTokenType),
+ T_ANDASSIGN = TOKEN_FROM_ID(259, OperatorTokenType),
+ T_ANDASSIGN_ALT = TOKEN_FROM_ID(259, OperatorTokenType|AltExtTokenType),
+ T_OR = TOKEN_FROM_ID(260, OperatorTokenType),
+ T_OR_ALT = TOKEN_FROM_ID(260, OperatorTokenType|AltExtTokenType),
+ T_OR_TRIGRAPH = TOKEN_FROM_ID(260, OperatorTokenType|TriGraphTokenType),
+ T_ORASSIGN = TOKEN_FROM_ID(261, OperatorTokenType),
+ T_ORASSIGN_ALT = TOKEN_FROM_ID(261, OperatorTokenType|AltExtTokenType),
+ T_ORASSIGN_TRIGRAPH = TOKEN_FROM_ID(261, OperatorTokenType|TriGraphTokenType),
+ T_XOR = TOKEN_FROM_ID(262, OperatorTokenType),
+ T_XOR_ALT = TOKEN_FROM_ID(262, OperatorTokenType|AltExtTokenType),
+ T_XOR_TRIGRAPH = TOKEN_FROM_ID(262, OperatorTokenType|TriGraphTokenType),
+ T_XORASSIGN = TOKEN_FROM_ID(263, OperatorTokenType),
+ T_XORASSIGN_ALT = TOKEN_FROM_ID(263, OperatorTokenType|AltExtTokenType),
+ T_XORASSIGN_TRIGRAPH = TOKEN_FROM_ID(263, OperatorTokenType|TriGraphTokenType),
+ T_COMMA = TOKEN_FROM_ID(264, OperatorTokenType),
+ T_COLON = TOKEN_FROM_ID(265, OperatorTokenType),
+ T_DIVIDE = TOKEN_FROM_ID(266, OperatorTokenType),
+ T_DIVIDEASSIGN = TOKEN_FROM_ID(267, OperatorTokenType),
+ T_DOT = TOKEN_FROM_ID(268, OperatorTokenType),
+ T_DOTSTAR = TOKEN_FROM_ID(269, OperatorTokenType),
+ T_ELLIPSIS = TOKEN_FROM_ID(270, OperatorTokenType),
+ T_EQUAL = TOKEN_FROM_ID(271, OperatorTokenType),
+ T_GREATER = TOKEN_FROM_ID(272, OperatorTokenType),
+ T_GREATEREQUAL = TOKEN_FROM_ID(273, OperatorTokenType),
+ T_LEFTBRACE = TOKEN_FROM_ID(274, OperatorTokenType),
+ T_LEFTBRACE_ALT = TOKEN_FROM_ID(274, OperatorTokenType|AltTokenType),
+ T_LEFTBRACE_TRIGRAPH = TOKEN_FROM_ID(274, OperatorTokenType|TriGraphTokenType),
+ T_LESS = TOKEN_FROM_ID(275, OperatorTokenType),
+ T_LESSEQUAL = TOKEN_FROM_ID(276, OperatorTokenType),
+ T_LEFTPAREN = TOKEN_FROM_ID(277, OperatorTokenType),
+ T_LEFTBRACKET = TOKEN_FROM_ID(278, OperatorTokenType),
+ T_LEFTBRACKET_ALT = TOKEN_FROM_ID(278, OperatorTokenType|AltTokenType),
+ T_LEFTBRACKET_TRIGRAPH = TOKEN_FROM_ID(278, OperatorTokenType|TriGraphTokenType),
+ T_MINUS = TOKEN_FROM_ID(279, OperatorTokenType),
+ T_MINUSASSIGN = TOKEN_FROM_ID(280, OperatorTokenType),
+ T_MINUSMINUS = TOKEN_FROM_ID(281, OperatorTokenType),
+ T_PERCENT = TOKEN_FROM_ID(282, OperatorTokenType),
+ T_PERCENTASSIGN = TOKEN_FROM_ID(283, OperatorTokenType),
+ T_NOT = TOKEN_FROM_ID(284, OperatorTokenType),
+ T_NOT_ALT = TOKEN_FROM_ID(284, OperatorTokenType|AltExtTokenType),
+ T_NOTEQUAL = TOKEN_FROM_ID(285, OperatorTokenType),
+ T_NOTEQUAL_ALT = TOKEN_FROM_ID(285, OperatorTokenType|AltExtTokenType),
+ T_OROR = TOKEN_FROM_ID(286, OperatorTokenType),
+ T_OROR_ALT = TOKEN_FROM_ID(286, OperatorTokenType|AltExtTokenType),
+ T_OROR_TRIGRAPH = TOKEN_FROM_ID(286, OperatorTokenType|TriGraphTokenType),
+ T_PLUS = TOKEN_FROM_ID(287, OperatorTokenType),
+ T_PLUSASSIGN = TOKEN_FROM_ID(288, OperatorTokenType),
+ T_PLUSPLUS = TOKEN_FROM_ID(289, OperatorTokenType),
+ T_ARROW = TOKEN_FROM_ID(290, OperatorTokenType),
+ T_ARROWSTAR = TOKEN_FROM_ID(291, OperatorTokenType),
+ T_QUESTION_MARK = TOKEN_FROM_ID(292, OperatorTokenType),
+ T_RIGHTBRACE = TOKEN_FROM_ID(293, OperatorTokenType),
+ T_RIGHTBRACE_ALT = TOKEN_FROM_ID(293, OperatorTokenType|AltTokenType),
+ T_RIGHTBRACE_TRIGRAPH = TOKEN_FROM_ID(293, OperatorTokenType|TriGraphTokenType),
+ T_RIGHTPAREN = TOKEN_FROM_ID(294, OperatorTokenType),
+ T_RIGHTBRACKET = TOKEN_FROM_ID(295, OperatorTokenType),
+ T_RIGHTBRACKET_ALT = TOKEN_FROM_ID(295, OperatorTokenType|AltTokenType),
+ T_RIGHTBRACKET_TRIGRAPH = TOKEN_FROM_ID(295, OperatorTokenType|TriGraphTokenType),
+ T_COLON_COLON = TOKEN_FROM_ID(296, OperatorTokenType),
+ T_SEMICOLON = TOKEN_FROM_ID(297, OperatorTokenType),
+ T_SHIFTLEFT = TOKEN_FROM_ID(298, OperatorTokenType),
+ T_SHIFTLEFTASSIGN = TOKEN_FROM_ID(299, OperatorTokenType),
+ T_SHIFTRIGHT = TOKEN_FROM_ID(300, OperatorTokenType),
+ T_SHIFTRIGHTASSIGN = TOKEN_FROM_ID(301, OperatorTokenType),
+ T_STAR = TOKEN_FROM_ID(302, OperatorTokenType),
+ T_COMPL = TOKEN_FROM_ID(303, OperatorTokenType),
+ T_COMPL_ALT = TOKEN_FROM_ID(303, OperatorTokenType|AltExtTokenType),
+ T_COMPL_TRIGRAPH = TOKEN_FROM_ID(303, OperatorTokenType|TriGraphTokenType),
+ T_STARASSIGN = TOKEN_FROM_ID(304, OperatorTokenType),
+ T_ASM = TOKEN_FROM_ID(305, KeywordTokenType),
+ T_AUTO = TOKEN_FROM_ID(306, KeywordTokenType),
+ T_BOOL = TOKEN_FROM_ID(307, KeywordTokenType),
+ T_FALSE = TOKEN_FROM_ID(308, BoolLiteralTokenType),
+ T_TRUE = TOKEN_FROM_ID(309, BoolLiteralTokenType),
+ T_BREAK = TOKEN_FROM_ID(310, KeywordTokenType),
+ T_CASE = TOKEN_FROM_ID(311, KeywordTokenType),
+ T_CATCH = TOKEN_FROM_ID(312, KeywordTokenType),
+ T_CHAR = TOKEN_FROM_ID(313, KeywordTokenType),
+ T_CLASS = TOKEN_FROM_ID(314, KeywordTokenType),
+ T_CONST = TOKEN_FROM_ID(315, KeywordTokenType),
+ T_CONSTCAST = TOKEN_FROM_ID(316, KeywordTokenType),
+ T_CONTINUE = TOKEN_FROM_ID(317, KeywordTokenType),
+ T_DEFAULT = TOKEN_FROM_ID(318, KeywordTokenType),
+ T_DEFINED = TOKEN_FROM_ID(319, KeywordTokenType),
+ T_DELETE = TOKEN_FROM_ID(320, KeywordTokenType),
+ T_DO = TOKEN_FROM_ID(321, KeywordTokenType),
+ T_DOUBLE = TOKEN_FROM_ID(322, KeywordTokenType),
+ T_DYNAMICCAST = TOKEN_FROM_ID(323, KeywordTokenType),
+ T_ELSE = TOKEN_FROM_ID(324, KeywordTokenType),
+ T_ENUM = TOKEN_FROM_ID(325, KeywordTokenType),
+ T_EXPLICIT = TOKEN_FROM_ID(326, KeywordTokenType),
+ T_EXPORT = TOKEN_FROM_ID(327, KeywordTokenType),
+ T_EXTERN = TOKEN_FROM_ID(328, KeywordTokenType),
+ T_FLOAT = TOKEN_FROM_ID(329, KeywordTokenType),
+ T_FOR = TOKEN_FROM_ID(330, KeywordTokenType),
+ T_FRIEND = TOKEN_FROM_ID(331, KeywordTokenType),
+ T_GOTO = TOKEN_FROM_ID(332, KeywordTokenType),
+ T_IF = TOKEN_FROM_ID(333, KeywordTokenType),
+ T_INLINE = TOKEN_FROM_ID(334, KeywordTokenType),
+ T_INT = TOKEN_FROM_ID(335, KeywordTokenType),
+ T_LONG = TOKEN_FROM_ID(336, KeywordTokenType),
+ T_MUTABLE = TOKEN_FROM_ID(337, KeywordTokenType),
+ T_NAMESPACE = TOKEN_FROM_ID(338, KeywordTokenType),
+ T_NEW = TOKEN_FROM_ID(339, KeywordTokenType),
+ T_OPERATOR = TOKEN_FROM_ID(340, KeywordTokenType),
+ T_PRIVATE = TOKEN_FROM_ID(341, KeywordTokenType),
+ T_PROTECTED = TOKEN_FROM_ID(342, KeywordTokenType),
+ T_PUBLIC = TOKEN_FROM_ID(343, KeywordTokenType),
+ T_REGISTER = TOKEN_FROM_ID(344, KeywordTokenType),
+ T_REINTERPRETCAST = TOKEN_FROM_ID(345, KeywordTokenType),
+ T_RETURN = TOKEN_FROM_ID(346, KeywordTokenType),
+ T_SHORT = TOKEN_FROM_ID(347, KeywordTokenType),
+ T_SIGNED = TOKEN_FROM_ID(348, KeywordTokenType),
+ T_SIZEOF = TOKEN_FROM_ID(349, KeywordTokenType),
+ T_STATIC = TOKEN_FROM_ID(350, KeywordTokenType),
+ T_STATICCAST = TOKEN_FROM_ID(351, KeywordTokenType),
+ T_STRUCT = TOKEN_FROM_ID(352, KeywordTokenType),
+ T_SWITCH = TOKEN_FROM_ID(353, KeywordTokenType),
+ T_TEMPLATE = TOKEN_FROM_ID(354, KeywordTokenType),
+ T_THIS = TOKEN_FROM_ID(355, KeywordTokenType),
+ T_THROW = TOKEN_FROM_ID(356, KeywordTokenType),
+ T_TRY = TOKEN_FROM_ID(357, KeywordTokenType),
+ T_TYPEDEF = TOKEN_FROM_ID(358, KeywordTokenType),
+ T_TYPEID = TOKEN_FROM_ID(359, KeywordTokenType),
+ T_TYPENAME = TOKEN_FROM_ID(360, KeywordTokenType),
+ T_UNION = TOKEN_FROM_ID(361, KeywordTokenType),
+ T_UNSIGNED = TOKEN_FROM_ID(362, KeywordTokenType),
+ T_USING = TOKEN_FROM_ID(363, KeywordTokenType),
+ T_VIRTUAL = TOKEN_FROM_ID(364, KeywordTokenType),
+ T_VOID = TOKEN_FROM_ID(365, KeywordTokenType),
+ T_VOLATILE = TOKEN_FROM_ID(366, KeywordTokenType),
+ T_WCHART = TOKEN_FROM_ID(367, KeywordTokenType),
+ T_WHILE = TOKEN_FROM_ID(368, KeywordTokenType),
+ T_PP_DEFINE = TOKEN_FROM_ID(369, PPTokenType),
+ T_PP_IF = TOKEN_FROM_ID(370, PPConditionalTokenType),
+ T_PP_IFDEF = TOKEN_FROM_ID(371, PPConditionalTokenType),
+ T_PP_IFNDEF = TOKEN_FROM_ID(372, PPConditionalTokenType),
+ T_PP_ELSE = TOKEN_FROM_ID(373, PPConditionalTokenType),
+ T_PP_ELIF = TOKEN_FROM_ID(374, PPConditionalTokenType),
+ T_PP_ENDIF = TOKEN_FROM_ID(375, PPConditionalTokenType),
+ T_PP_ERROR = TOKEN_FROM_ID(376, PPTokenType),
+ T_PP_LINE = TOKEN_FROM_ID(377, PPTokenType),
+ T_PP_PRAGMA = TOKEN_FROM_ID(378, PPTokenType),
+ T_PP_UNDEF = TOKEN_FROM_ID(379, PPTokenType),
+ T_PP_WARNING = TOKEN_FROM_ID(380, PPTokenType),
+ T_IDENTIFIER = TOKEN_FROM_ID(381, IdentifierTokenType),
+ T_OCTALINT = TOKEN_FROM_ID(382, IntegerLiteralTokenType),
+ T_DECIMALINT = TOKEN_FROM_ID(383, IntegerLiteralTokenType),
+ T_HEXAINT = TOKEN_FROM_ID(384, IntegerLiteralTokenType),
+ T_INTLIT = TOKEN_FROM_ID(385, IntegerLiteralTokenType),
+ T_LONGINTLIT = TOKEN_FROM_ID(386, IntegerLiteralTokenType),
+ T_FLOATLIT = TOKEN_FROM_ID(387, FloatingLiteralTokenType),
+ T_FIXEDPOINTLIT = TOKEN_FROM_ID(387, FloatingLiteralTokenType|AltTokenType), // IDL specific
+ T_CCOMMENT = TOKEN_FROM_ID(388, WhiteSpaceTokenType|AltTokenType),
+ T_CPPCOMMENT = TOKEN_FROM_ID(389, WhiteSpaceTokenType|AltTokenType),
+ T_CHARLIT = TOKEN_FROM_ID(390, CharacterLiteralTokenType),
+ T_STRINGLIT = TOKEN_FROM_ID(391, StringLiteralTokenType),
+ T_CONTLINE = TOKEN_FROM_ID(392, EOLTokenType),
+ T_SPACE = TOKEN_FROM_ID(393, WhiteSpaceTokenType),
+ T_SPACE2 = TOKEN_FROM_ID(394, WhiteSpaceTokenType),
+ T_NEWLINE = TOKEN_FROM_ID(395, EOLTokenType),
+ T_GENERATEDNEWLINE = TOKEN_FROM_ID(395, EOLTokenType|AltTokenType),
+ T_POUND_POUND = TOKEN_FROM_ID(396, OperatorTokenType),
+ T_POUND_POUND_ALT = TOKEN_FROM_ID(396, OperatorTokenType|AltTokenType),
+ T_POUND_POUND_TRIGRAPH = TOKEN_FROM_ID(396, OperatorTokenType|TriGraphTokenType),
+ T_POUND = TOKEN_FROM_ID(397, OperatorTokenType),
+ T_POUND_ALT = TOKEN_FROM_ID(397, OperatorTokenType|AltTokenType),
+ T_POUND_TRIGRAPH = TOKEN_FROM_ID(397, OperatorTokenType|TriGraphTokenType),
+ T_ANY = TOKEN_FROM_ID(398, UnknownTokenType),
+ T_ANY_TRIGRAPH = TOKEN_FROM_ID(398, UnknownTokenType|TriGraphTokenType),
+ T_PP_INCLUDE = TOKEN_FROM_ID(399, PPTokenType),
+ T_PP_QHEADER = TOKEN_FROM_ID(400, PPTokenType),
+ T_PP_HHEADER = TOKEN_FROM_ID(401, PPTokenType),
+ T_PP_INCLUDE_NEXT = TOKEN_FROM_ID(399, PPTokenType|AltTokenType),
+ T_PP_QHEADER_NEXT = TOKEN_FROM_ID(400, PPTokenType|AltTokenType),
+ T_PP_HHEADER_NEXT = TOKEN_FROM_ID(401, PPTokenType|AltTokenType),
+ T_EOF = TOKEN_FROM_ID(402, EOFTokenType), // end of file reached
+ T_EOI = TOKEN_FROM_ID(403, EOFTokenType), // end of input reached
+ T_PP_NUMBER = TOKEN_FROM_ID(404, InternalTokenType),
+
+// MS extensions
+ T_MSEXT_INT8 = TOKEN_FROM_ID(405, KeywordTokenType),
+ T_MSEXT_INT16 = TOKEN_FROM_ID(406, KeywordTokenType),
+ T_MSEXT_INT32 = TOKEN_FROM_ID(407, KeywordTokenType),
+ T_MSEXT_INT64 = TOKEN_FROM_ID(408, KeywordTokenType),
+ T_MSEXT_BASED = TOKEN_FROM_ID(409, KeywordTokenType),
+ T_MSEXT_DECLSPEC = TOKEN_FROM_ID(410, KeywordTokenType),
+ T_MSEXT_CDECL = TOKEN_FROM_ID(411, KeywordTokenType),
+ T_MSEXT_FASTCALL = TOKEN_FROM_ID(412, KeywordTokenType),
+ T_MSEXT_STDCALL = TOKEN_FROM_ID(413, KeywordTokenType),
+ T_MSEXT_TRY = TOKEN_FROM_ID(414, KeywordTokenType),
+ T_MSEXT_EXCEPT = TOKEN_FROM_ID(415, KeywordTokenType),
+ T_MSEXT_FINALLY = TOKEN_FROM_ID(416, KeywordTokenType),
+ T_MSEXT_LEAVE = TOKEN_FROM_ID(417, KeywordTokenType),
+ T_MSEXT_INLINE = TOKEN_FROM_ID(418, KeywordTokenType),
+ T_MSEXT_ASM = TOKEN_FROM_ID(419, KeywordTokenType),
+
+ T_MSEXT_PP_REGION = TOKEN_FROM_ID(420, PPTokenType),
+ T_MSEXT_PP_ENDREGION = TOKEN_FROM_ID(421, PPTokenType),
+
+ T_LAST_TOKEN_ID,
+ T_LAST_TOKEN = ID_FROM_TOKEN(T_LAST_TOKEN_ID),
+
+// pseudo tokens to help streamlining macro replacement, these should not
+// returned from the lexer nor should these be returned from the pp-iterator
+ T_NONREPLACABLE_IDENTIFIER = TOKEN_FROM_ID(T_LAST_TOKEN+1, IdentifierTokenType),
+ T_PLACEHOLDER = TOKEN_FROM_ID(T_LAST_TOKEN+2, WhiteSpaceTokenType),
+ T_PLACEMARKER = TOKEN_FROM_ID(T_LAST_TOKEN+3, InternalTokenType),
+ T_PARAMETERBASE = TOKEN_FROM_ID(T_LAST_TOKEN+4, ParameterTokenType),
+ T_EXTPARAMETERBASE = TOKEN_FROM_ID(T_LAST_TOKEN+5, ExtParameterTokenType)
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// redefine the TOKEN_FROM_ID macro to be more type safe
+#undef TOKEN_FROM_ID
+#define TOKEN_FROM_ID(id, cat) boost::wave::token_id((id) | (cat))
+
+#undef ID_FROM_TOKEN
+#define ID_FROM_TOKEN(tok) ((tok) & ~boost::wave::TokenTypeMask)
+
+#undef BASEID_FROM_TOKEN
+#define BASEID_FROM_TOKEN(tok) \
+ boost::wave::token_id(((tok) & ~boost::wave::ExtTokenTypeMask)) \
+ /**/
+#define BASE_TOKEN(tok) \
+ boost::wave::token_id((tok) & boost::wave::MainTokenMask) \
+ /**/
+#define CATEGORY_FROM_TOKEN(tok) ((tok) & boost::wave::TokenTypeMask)
+#define EXTCATEGORY_FROM_TOKEN(tok) ((tok) & boost::wave::ExtTokenTypeMask)
+#define IS_CATEGORY(tok, cat) \
+ ((CATEGORY_FROM_TOKEN(tok) == (cat)) ? true : false) \
+ /**/
+#define IS_EXTCATEGORY(tok, cat) \
+ ((EXTCATEGORY_FROM_TOKEN(tok) == (cat)) ? true : false) \
+ /**/
+
+///////////////////////////////////////////////////////////////////////////////
+// return a token name
+BOOST_WAVE_DECL
+BOOST_WAVE_STRINGTYPE get_token_name(token_id tokid);
+
+///////////////////////////////////////////////////////////////////////////////
+// return a token name
+BOOST_WAVE_DECL
+char const *get_token_value(token_id tokid);
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace wave
+} // namespace boost
+
+#endif // #if !defined(BOOST_WAVE_TOKEN_IDS_DEFINED)
+
+// the suffix header occurs after all of the code
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_SUFFIX
+#endif
+
+#endif // !defined(TOKEN_IDS_HPP_414E9A58_F079_4789_8AFF_513815CE475B_INCLUDED)
+
diff --git a/boost/boost/wave/util/cpp_ifblock.hpp b/boost/boost/wave/util/cpp_ifblock.hpp
new file mode 100644
index 00000000000..7355c8f7962
--- /dev/null
+++ b/boost/boost/wave/util/cpp_ifblock.hpp
@@ -0,0 +1,161 @@
+/*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+
+ http://www.boost.org/
+
+ Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(CPP_IFBLOCK_HPP_D4676B36_00C5_41F4_BC9F_9CBBAE3B8006_INCLUDED)
+#define CPP_IFBLOCK_HPP_D4676B36_00C5_41F4_BC9F_9CBBAE3B8006_INCLUDED
+
+#include <stack>
+#include <boost/wave/wave_config.hpp>
+
+// this must occur after all of the includes and before any code appears
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_PREFIX
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace wave {
+namespace util {
+
+///////////////////////////////////////////////////////////////////////////////
+// the class if_blocks handles recursive conditional compilation contexts
+class if_block
+{
+public:
+ if_block() :
+ status(true), some_part_status(true),
+ enclosing_status(true), is_in_else(false)
+ {
+ }
+ if_block(bool status_, bool enclosing_status_) :
+ status(status_),
+ some_part_status(status_),
+ enclosing_status(enclosing_status_),
+ is_in_else(false)
+ {
+ }
+
+ void set_status(bool status_)
+ {
+ status = status_;
+ if (status_)
+ some_part_status = true;
+ }
+ bool get_status() const { return status; }
+ bool get_some_part_status() const { return some_part_status; }
+ bool get_enclosing_status() const { return enclosing_status; }
+ bool get_in_else() const { return is_in_else; }
+ void set_in_else() { is_in_else = true; }
+
+private:
+ bool status; // Current block is true
+ bool some_part_status; // One of the preceding or current #if/#elif was true
+ bool enclosing_status; // Enclosing #if block is true
+ bool is_in_else; // Inside the #else part
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// stack of conditional compilation contexts
+class if_block_stack
+: private std::stack<if_block>
+{
+public:
+ typedef std::stack<if_block>::size_type size_type;
+
+ void enter_if_block(bool new_status)
+ {
+ // If enclosing block is false, then this block is also false
+ bool enclosing_status = get_status();
+ this->push (value_type (new_status && enclosing_status, enclosing_status));
+ }
+ bool enter_elif_block(bool new_status)
+ {
+ if (!is_inside_ifpart())
+ return false; // #elif without matching #if
+
+ if (get_enclosing_status()) {
+ if (get_status()) {
+ // entered a (false) #elif block from a true block
+ this->top().set_status(false);
+ }
+ else if (new_status && !this->top().get_some_part_status()) {
+ // Entered true #elif block and no previous block was true
+ this->top().set_status(new_status);
+ }
+ }
+ return true;
+ }
+ bool enter_else_block()
+ {
+ if (!is_inside_ifpart())
+ return false; // #else without matching #if
+
+ if (get_enclosing_status()) {
+ if (!this->top().get_some_part_status()) {
+ // Entered (true) #else block and no previous block was true
+ this->top().set_status(true);
+ }
+ else if (get_status()) {
+ // Entered (false) #else block from true block
+ this->top().set_status(false);
+ }
+
+ // Set else flag
+ this->top().set_in_else();
+ }
+ return true;
+ }
+ bool exit_if_block()
+ {
+ if (0 == this->size())
+ return false; // #endif without matching #if
+
+ this->pop();
+ return true;
+ }
+
+// return, whether the top (innermost) condition is true or false
+ bool get_status() const
+ {
+ return 0 == this->size() || this->top().get_status();
+ }
+ bool get_some_part_status() const
+ {
+ return 0 == this->size() || this->top().get_some_part_status();
+ }
+ bool get_enclosing_status() const
+ {
+ return 0 == this->size() || this->top().get_enclosing_status();
+ }
+
+ size_type get_if_block_depth() const { return this->size(); }
+
+protected:
+ bool is_inside_ifpart() const
+ {
+ return 0 != this->size() && !this->top().get_in_else();
+ }
+ bool is_inside_elsepart() const
+ {
+ return 0 != this->size() && this->top().get_in_else();
+ }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace util
+} // namespace wave
+} // namespace boost
+
+// the suffix header occurs after all of the code
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_SUFFIX
+#endif
+
+#endif // !defined(CPP_IFBLOCK_HPP_D4676B36_00C5_41F4_BC9F_9CBBAE3B8006_INCLUDED)
diff --git a/boost/boost/wave/util/cpp_include_paths.hpp b/boost/boost/wave/util/cpp_include_paths.hpp
new file mode 100644
index 00000000000..ca2e5d150fd
--- /dev/null
+++ b/boost/boost/wave/util/cpp_include_paths.hpp
@@ -0,0 +1,506 @@
+/*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+
+ http://www.boost.org/
+
+ Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(CPP_INCLUDE_PATHS_HPP_AF620DA4_B3D2_4221_AD91_8A1ABFFB6944_INCLUDED)
+#define CPP_INCLUDE_PATHS_HPP_AF620DA4_B3D2_4221_AD91_8A1ABFFB6944_INCLUDED
+
+#include <string>
+#include <list>
+#include <utility>
+
+#include <boost/wave/wave_config.hpp>
+
+#if BOOST_WAVE_SUPPORT_PRAGMA_ONCE != 0
+#include <boost/multi_index_container.hpp>
+#include <boost/multi_index/member.hpp>
+#include <boost/multi_index/ordered_index.hpp>
+#endif
+
+#if BOOST_WAVE_SERIALIZATION != 0
+#include <boost/serialization/serialization.hpp>
+#include <boost/serialization/utility.hpp>
+#include <boost/serialization/collections_save_imp.hpp>
+#include <boost/serialization/collections_load_imp.hpp>
+#include <boost/serialization/split_free.hpp>
+#endif
+
+#include <boost/filesystem/path.hpp>
+#include <boost/filesystem/operations.hpp>
+
+// this must occur after all of the includes and before any code appears
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_PREFIX
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace wave { namespace util {
+
+#if BOOST_WAVE_SUPPORT_PRAGMA_ONCE != 0
+///////////////////////////////////////////////////////////////////////////////
+// Tags for accessing both sides of a bidirectional map
+struct from {};
+struct to {};
+
+///////////////////////////////////////////////////////////////////////////////
+// The class template bidirectional_map wraps the specification
+// of a bidirectional map based on multi_index_container.
+template<typename FromType, typename ToType>
+struct bidirectional_map
+{
+ typedef std::pair<FromType, ToType> value_type;
+
+#if defined(BOOST_NO_POINTER_TO_MEMBER_TEMPLATE_PARAMETERS) ||\
+ defined(BOOST_MSVC)&&(BOOST_MSVC<1300) ||\
+ defined(BOOST_INTEL_CXX_VERSION)&&defined(_MSC_VER)&&\
+ (BOOST_INTEL_CXX_VERSION<=700)
+
+ BOOST_STATIC_CONSTANT(unsigned, from_offset = offsetof(value_type, first));
+ BOOST_STATIC_CONSTANT(unsigned, to_offset = offsetof(value_type, second));
+
+ typedef boost::multi_index::multi_index_container<
+ value_type,
+ boost::multi_index::indexed_by<
+ boost::multi_index::ordered_unique<
+ boost::multi_index::tag<from>,
+ boost::multi_index::member_offset<value_type, FromType, from_offset>
+ >,
+ boost::multi_index::ordered_non_unique<
+ boost::multi_index::tag<to>,
+ boost::multi_index::member_offset<value_type, ToType, to_offset>
+ >
+ >
+ > type;
+
+#else
+
+ typedef boost::multi_index::multi_index_container<
+ value_type,
+ boost::multi_index::indexed_by<
+ boost::multi_index::ordered_unique<
+ boost::multi_index::tag<from>,
+ boost::multi_index::member<value_type, FromType, &value_type::first>
+ >,
+ boost::multi_index::ordered_non_unique<
+ boost::multi_index::tag<to>,
+ boost::multi_index::member<value_type, ToType, &value_type::second>
+ >
+ >
+ > type;
+
+#endif
+};
+#endif // BOOST_WAVE_SUPPORT_PRAGMA_ONCE != 0
+
+#if BOOST_WAVE_SERIALIZATION != 0
+struct load_filepos
+{
+ static unsigned int get_line() { return 0; }
+ static unsigned int get_column() { return 0; }
+ static std::string get_file() { return "<loading-state>"; }
+};
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// include_paths - controlling the include path search order
+//
+// General notes:
+//
+// Any directories specified with the 'add_include_path()' function before
+// the function 'set_sys_include_delimiter()' is called are searched only
+// for the case of '#include "file"' directives, they are not searched for
+// '#include <file>' directives. If additional directories are specified
+// with the 'add_include_path()' function after a call to the function
+// 'set_sys_include_delimiter()', these directories are searched for all
+// '#include' directives.
+//
+// In addition, a call to the function 'set_sys_include_delimiter()'
+// inhibits the use of the current directory as the first search directory
+// for '#include "file"' directives. Therefore, the current directory is
+// searched only if it is requested explicitly with a call to the function
+// 'add_include_path(".")'.
+//
+// Calling both functions, the 'set_sys_include_delimiter()' and
+// 'add_include_path(".")' allows you to control precisely which
+// directories are searched before the current one and which are searched
+// after.
+//
+///////////////////////////////////////////////////////////////////////////////
+class include_paths
+{
+private:
+ typedef std::list<std::pair<boost::filesystem::path, std::string> >
+ include_list_type;
+ typedef include_list_type::value_type include_value_type;
+
+#if BOOST_WAVE_SUPPORT_PRAGMA_ONCE != 0
+ typedef bidirectional_map<std::string, std::string>::type
+ pragma_once_set_type;
+#endif
+
+public:
+ include_paths()
+ : was_sys_include_path(false),
+ current_dir(boost::filesystem::initial_path()),
+ current_rel_dir(boost::filesystem::initial_path())
+ {}
+
+ bool add_include_path(char const *path_, bool is_system = false)
+ {
+ return add_include_path(path_, (is_system || was_sys_include_path) ?
+ system_include_paths : user_include_paths);
+ }
+ void set_sys_include_delimiter() { was_sys_include_path = true; }
+ bool find_include_file (std::string &s, std::string &dir, bool is_system,
+ char const *current_file) const;
+ void set_current_directory(char const *path_);
+ boost::filesystem::path get_current_directory() const
+ { return current_dir; }
+
+ void init_initial_path() { boost::filesystem::initial_path(); }
+
+protected:
+ bool find_include_file (std::string &s, std::string &dir,
+ include_list_type const &pathes, char const *) const;
+ bool add_include_path(char const *path_, include_list_type &pathes_);
+
+private:
+ include_list_type user_include_paths;
+ include_list_type system_include_paths;
+ bool was_sys_include_path; // saw a set_sys_include_delimiter()
+ boost::filesystem::path current_dir;
+ boost::filesystem::path current_rel_dir;
+
+#if BOOST_WAVE_SUPPORT_PRAGMA_ONCE != 0
+public:
+ bool has_pragma_once(std::string const &filename)
+ {
+ using namespace boost::multi_index;
+ return get<from>(pragma_once_files).find(filename) != pragma_once_files.end();
+ }
+ bool add_pragma_once_header(std::string const &filename,
+ std::string const& guard_name)
+ {
+ typedef pragma_once_set_type::value_type value_type;
+ return pragma_once_files.insert(value_type(filename, guard_name)).second;
+ }
+ bool remove_pragma_once_header(std::string const& guard_name)
+ {
+ typedef pragma_once_set_type::index_iterator<to>::type to_iterator;
+ typedef std::pair<to_iterator, to_iterator> range_type;
+
+ range_type r = pragma_once_files.get<to>().equal_range(guard_name);
+ if (r.first != r.second) {
+ using namespace boost::multi_index;
+ get<to>(pragma_once_files).erase(r.first, r.second);
+ return true;
+ }
+ return false;
+ }
+
+private:
+ pragma_once_set_type pragma_once_files;
+#endif
+
+#if BOOST_WAVE_SERIALIZATION != 0
+public:
+ BOOST_STATIC_CONSTANT(unsigned int, version = 0x10);
+ BOOST_STATIC_CONSTANT(unsigned int, version_mask = 0x0f);
+
+private:
+ friend class boost::serialization::access;
+ template<typename Archive>
+ void save(Archive & ar, const unsigned int version) const
+ {
+#if BOOST_WAVE_SUPPORT_PRAGMA_ONCE != 0
+ ar & pragma_once_files;
+#endif
+ ar & user_include_paths;
+ ar & system_include_paths;
+ ar & was_sys_include_path;
+ }
+ template<typename Archive>
+ void load(Archive & ar, const unsigned int loaded_version)
+ {
+ if (version != (loaded_version & ~version_mask)) {
+ BOOST_WAVE_THROW(preprocess_exception, incompatible_config,
+ "cpp_include_path state version", load_filepos());
+ }
+
+#if BOOST_WAVE_SUPPORT_PRAGMA_ONCE != 0
+ ar & pragma_once_files;
+#endif
+ // verify that the old include paths match the current ones
+ include_list_type user_paths, system_paths;
+ ar & user_paths;
+ ar & system_paths;
+
+ if (user_paths != user_include_paths)
+ {
+ BOOST_WAVE_THROW(preprocess_exception, incompatible_config,
+ "user include paths", load_filepos());
+ }
+ if (system_paths != system_include_paths)
+ {
+ BOOST_WAVE_THROW(preprocess_exception, incompatible_config,
+ "system include paths", load_filepos());
+ }
+
+ ar & was_sys_include_path;
+ }
+ BOOST_SERIALIZATION_SPLIT_MEMBER()
+#endif
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// Add an include path to one of the search lists (user include path or system
+// include path).
+inline
+bool include_paths::add_include_path (
+ char const *path_, include_list_type &pathes_)
+{
+ namespace fs = boost::filesystem;
+ if (path_) {
+ fs::path newpath = fs::complete(fs::path(path_, fs::native), current_dir);
+
+ if (!fs::exists(newpath) || !fs::is_directory(newpath)) {
+ // the given path does not form a name of a valid file system directory
+ // item
+ return false;
+ }
+
+ pathes_.push_back (include_value_type(newpath, path_));
+ return true;
+ }
+ return false;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// Find an include file by traversing the list of include directories
+inline
+bool include_paths::find_include_file (std::string &s, std::string &dir,
+ include_list_type const &pathes, char const *current_file) const
+{
+ namespace fs = boost::filesystem;
+ typedef include_list_type::const_iterator const_include_list_iter_t;
+
+ const_include_list_iter_t it = pathes.begin();
+ const_include_list_iter_t include_paths_end = pathes.end();
+
+#if BOOST_WAVE_SUPPORT_INCLUDE_NEXT != 0
+ if (0 != current_file) {
+ // re-locate the directory of the current file (#include_next handling)
+
+ // #include_next does not distinguish between <file> and "file"
+ // inclusion, nor does it check that the file you specify has the same
+ // name as the current file. It simply looks for the file named, starting
+ // with the directory in the search path after the one where the current
+ // file was found.
+
+ fs::path file_path (current_file, fs::native);
+ for (/**/; it != include_paths_end; ++it) {
+ fs::path currpath ((*it).first.string(), fs::native);
+ if (std::equal(currpath.begin(), currpath.end(), file_path.begin()))
+ {
+ ++it; // start searching with the next directory
+ break;
+ }
+ }
+ }
+#endif
+
+ for (/**/; it != include_paths_end; ++it) {
+ fs::path currpath (s, fs::native);
+ if (!currpath.has_root_directory()) {
+ currpath = fs::path((*it).first.string(), fs::native);
+ currpath /= fs::path(s, fs::native); // append filename
+ }
+
+ if (fs::exists(currpath)) {
+ fs::path dirpath (s, fs::native);
+ if (!dirpath.has_root_name()) {
+ dirpath = fs::path((*it).second, fs::native);
+ dirpath /= fs::path(s, fs::native);
+ }
+
+ dir = dirpath.string();
+ s = currpath.normalize().string(); // found the required file
+ return true;
+ }
+ }
+ return false;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// Find an include file by searching the user and system includes in the
+// correct sequence (as it was configured by the user of the driver program)
+inline bool
+include_paths::find_include_file (std::string &s, std::string &dir,
+ bool is_system, char const *current_file) const
+{
+ namespace fs = boost::filesystem;
+
+// if not system include (<...>), then search current directory first
+ if (!is_system) {
+ if (!was_sys_include_path) { // set_sys_include_delimiter() not called
+ // first have a look at the current directory
+ fs::path currpath (s, fs::native);
+ if (!currpath.has_root_directory()) {
+ currpath = fs::path(current_dir.string(), fs::native);
+ currpath /= fs::path(s, fs::native);
+ }
+
+ if (fs::exists(currpath) && 0 == current_file) {
+ // if 0 != current_path (#include_next handling) it can't be
+ // the file in the current directory
+ fs::path dirpath (s, fs::native);
+ if (!dirpath.has_root_name()) {
+ dirpath = fs::path(current_rel_dir.string(), fs::native);
+ dirpath /= fs::path(s, fs::native);
+ }
+
+ dir = dirpath.string();
+ s = currpath.normalize().string(); // found in local directory
+ return true;
+ }
+
+ // iterate all user include file directories to find the file
+ if (find_include_file(s, dir, user_include_paths, current_file))
+ return true;
+
+ // ... fall through
+ }
+ else {
+ // if set_sys_include_delimiter() was called, then user include files
+ // are searched in the user search path only
+ return find_include_file(s, dir, user_include_paths, current_file);
+ }
+
+ // if nothing found, fall through
+ // ...
+ }
+
+// iterate all system include file directories to find the file
+ return find_include_file (s, dir, system_include_paths, current_file);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// Set current directory from a given file name
+
+inline
+void include_paths::set_current_directory(char const *path_)
+{
+ namespace fs = boost::filesystem;
+
+ fs::path filepath (path_, fs::native);
+ fs::path filename = fs::complete(filepath, current_dir);
+ if (fs::exists(filename) && fs::is_directory(filename)) {
+ current_dir = filename;
+ current_rel_dir = filepath;
+ }
+ else {
+ current_dir = filename.branch_path();
+ current_rel_dir = filepath.branch_path();
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+}}} // namespace boost::wave::util
+
+#if BOOST_WAVE_SERIALIZATION != 0
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace serialization {
+
+///////////////////////////////////////////////////////////////////////////////
+// Serialization support for boost::filesystem::path
+template<class Archive>
+inline void save (Archive & ar, boost::filesystem::path const& p,
+ const unsigned int /* file_version */)
+{
+ std::string path_str(p.native_file_string());
+ ar & path_str;
+}
+
+template<class Archive>
+inline void load (Archive & ar, boost::filesystem::path &p,
+ const unsigned int /* file_version */)
+{
+ std::string path_str;
+ ar & path_str;
+ p = boost::filesystem::path(path_str, boost::filesystem::native);
+}
+
+// split non-intrusive serialization function member into separate
+// non intrusive save/load member functions
+template<class Archive>
+inline void serialize (Archive & ar, boost::filesystem::path &p,
+ const unsigned int file_version)
+{
+ boost::serialization::split_free(ar, p, file_version);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// Serialization support for the used multi_index
+template<class Archive>
+inline void save (Archive & ar,
+ const typename boost::wave::util::bidirectional_map<
+ std::string, std::string
+ >::type &t,
+ const unsigned int /* file_version */)
+{
+ boost::serialization::stl::save_collection<
+ Archive,
+ typename boost::wave::util::bidirectional_map<
+ std::string, std::string
+ >::type
+ >(ar, t);
+}
+
+template<class Archive>
+inline void load (Archive & ar,
+ typename boost::wave::util::bidirectional_map<std::string, std::string>::type &t,
+ const unsigned int /* file_version */)
+{
+ typedef typename boost::wave::util::bidirectional_map<
+ std::string, std::string
+ >::type map_type;
+ boost::serialization::stl::load_collection<
+ Archive, map_type,
+ boost::serialization::stl::archive_input_unique<Archive, map_type>,
+ boost::serialization::stl::no_reserve_imp<map_type>
+ >(ar, t);
+}
+
+// split non-intrusive serialization function member into separate
+// non intrusive save/load member functions
+template<class Archive>
+inline void serialize (Archive & ar,
+ typename boost::wave::util::bidirectional_map<
+ std::string, std::string
+ >::type &t,
+ const unsigned int file_version)
+{
+ boost::serialization::split_free(ar, t, file_version);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+}} // namespace boost::serialization
+
+BOOST_CLASS_VERSION(boost::wave::util::include_paths,
+ boost::wave::util::include_paths::version);
+
+#endif // BOOST_WAVE_SERIALIZATION != 0
+
+// the suffix header occurs after all of the code
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_SUFFIX
+#endif
+
+#endif // !defined(CPP_INCLUDE_PATHS_HPP_AF620DA4_B3D2_4221_AD91_8A1ABFFB6944_INCLUDED)
diff --git a/boost/boost/wave/util/cpp_iterator.hpp b/boost/boost/wave/util/cpp_iterator.hpp
new file mode 100644
index 00000000000..00749ce11e6
--- /dev/null
+++ b/boost/boost/wave/util/cpp_iterator.hpp
@@ -0,0 +1,2111 @@
+/*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+
+ Definition of the preprocessor iterator
+
+ http://www.boost.org/
+
+ Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(CPP_ITERATOR_HPP_175CA88F_7273_43FA_9039_BCF7459E1F29_INCLUDED)
+#define CPP_ITERATOR_HPP_175CA88F_7273_43FA_9039_BCF7459E1F29_INCLUDED
+
+#include <string>
+#include <vector>
+#include <list>
+#include <cstdlib>
+#include <cctype>
+
+#include <boost/assert.hpp>
+#include <boost/shared_ptr.hpp>
+#include <boost/filesystem/path.hpp>
+#include <boost/filesystem/operations.hpp>
+#include <boost/spirit/iterator/multi_pass.hpp>
+#include <boost/spirit/tree/parse_tree_utils.hpp>
+
+#include <boost/wave/wave_config.hpp>
+#include <boost/pool/pool_alloc.hpp>
+
+#include <boost/wave/util/insert_whitespace_detection.hpp>
+#include <boost/wave/util/macro_helpers.hpp>
+#include <boost/wave/util/cpp_macromap_utils.hpp>
+#include <boost/wave/util/interpret_pragma.hpp>
+#include <boost/wave/util/transform_iterator.hpp>
+#include <boost/wave/util/functor_input.hpp>
+
+#include <boost/wave/grammars/cpp_grammar_gen.hpp>
+#include <boost/wave/grammars/cpp_expression_grammar_gen.hpp>
+#if BOOST_WAVE_ENABLE_COMMANDLINE_MACROS != 0
+#include <boost/wave/grammars/cpp_predef_macros_gen.hpp>
+#endif
+
+#include <boost/wave/whitespace_handling.hpp>
+#include <boost/wave/cpp_iteration_context.hpp>
+#include <boost/wave/cpp_exceptions.hpp>
+#include <boost/wave/language_support.hpp>
+
+// this must occur after all of the includes and before any code appears
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_PREFIX
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace wave {
+namespace util {
+
+///////////////////////////////////////////////////////////////////////////////
+// retrieve the macro name from the parse tree
+template <typename ParseNodeT, typename TokenT, typename PositionT>
+inline void
+retrieve_macroname(ParseNodeT const &node, boost::spirit::parser_id id,
+ TokenT &macroname, PositionT const &act_pos)
+{
+ParseNodeT const *name_node = 0;
+
+ using boost::spirit::find_node;
+ if (!find_node(node, id, &name_node))
+ {
+ // ill formed define statement (unexpected, should not happen)
+ BOOST_WAVE_THROW(preprocess_exception, bad_define_statement,
+ "bad parse tree (unexpected)", act_pos);
+ }
+
+typename ParseNodeT::children_t const &children = name_node->children;
+
+ if (0 == children.size() ||
+ children.front().value.begin() == children.front().value.end())
+ {
+ // ill formed define statement (unexpected, should not happen)
+ BOOST_WAVE_THROW(preprocess_exception, bad_define_statement,
+ "bad parse tree (unexpected)", act_pos);
+ }
+
+// retrieve the macro name
+ macroname = *children.front().value.begin();
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// retrieve the macro parameters or the macro definition from the parse tree
+template <typename ParseNodeT, typename TokenT, typename ContainerT>
+inline bool
+retrieve_macrodefinition(
+ ParseNodeT const &node, boost::spirit::parser_id id,
+ ContainerT &macrodefinition, TokenT const &/*t*/)
+{
+ using namespace boost::wave;
+ typedef typename ParseNodeT::const_tree_iterator const_tree_iterator;
+
+// find macro parameters/macro definition inside the parse tree
+std::pair<const_tree_iterator, const_tree_iterator> nodes;
+
+ using boost::spirit::get_node_range;
+ if (get_node_range(node, id, nodes)) {
+ // copy all parameters to the supplied container
+ typename ContainerT::iterator last_nonwhite = macrodefinition.end();
+ const_tree_iterator end = nodes.second;
+
+ for (const_tree_iterator cit = nodes.first; cit != end; ++cit) {
+ if ((*cit).value.begin() != (*cit).value.end()) {
+ typename ContainerT::iterator inserted = macrodefinition.insert(
+ macrodefinition.end(), *(*cit).value.begin());
+
+ if (!IS_CATEGORY(macrodefinition.back(), WhiteSpaceTokenType) &&
+ T_NEWLINE != token_id(macrodefinition.back()) &&
+ T_EOF != token_id(macrodefinition.back()))
+ {
+ last_nonwhite = inserted;
+ }
+ }
+ }
+
+ // trim trailing whitespace (leading whitespace is trimmed by the grammar)
+ if (last_nonwhite != macrodefinition.end()) {
+ macrodefinition.erase(++last_nonwhite, macrodefinition.end());
+ }
+ return true;
+ }
+ return false;
+}
+
+#if BOOST_WAVE_ENABLE_COMMANDLINE_MACROS != 0
+///////////////////////////////////////////////////////////////////////////////
+// add an additional predefined macro given by a string (MACRO(x)=definition)
+template <typename ContextT>
+bool add_macro_definition(ContextT &ctx, std::string macrostring,
+ bool is_predefined, boost::wave::language_support language)
+{
+ typedef typename ContextT::token_type token_type;
+ typedef typename ContextT::lexer_type lexer_type;
+ typedef typename token_type::position_type position_type;
+ typedef boost::wave::grammars::predefined_macros_grammar_gen<lexer_type>
+ predef_macros_type;
+
+ using namespace boost::wave;
+ using namespace std; // isspace is in std namespace for some systems
+
+// skip leading whitespace
+std::string::iterator begin = macrostring.begin();
+std::string::iterator end = macrostring.end();
+
+ while(begin != end && isspace(*begin))
+ ++begin;
+
+// parse the macro definition
+position_type act_pos("<command line>", 0);
+boost::spirit::tree_parse_info<lexer_type> hit =
+ predef_macros_type::parse_predefined_macro(
+ lexer_type(begin, end, position_type(), language), lexer_type());
+
+ if (!hit.match || (!hit.full && T_EOF != token_id(*hit.stop))) {
+ BOOST_WAVE_THROW(preprocess_exception, bad_macro_definition,
+ macrostring.c_str(), act_pos);
+ }
+
+// retrieve the macro definition from the parse tree
+token_type macroname;
+std::vector<token_type> macroparameters;
+typename ContextT::token_sequence_type macrodefinition;
+bool has_parameters = false;
+
+ boost::wave::util::retrieve_macroname(*hit.trees.begin(),
+ BOOST_WAVE_PLAIN_DEFINE_ID, macroname, act_pos);
+ has_parameters = boost::wave::util::retrieve_macrodefinition(*hit.trees.begin(),
+ BOOST_WAVE_MACRO_PARAMETERS_ID, macroparameters, token_type());
+ boost::wave::util::retrieve_macrodefinition(*hit.trees.begin(),
+ BOOST_WAVE_MACRO_DEFINITION_ID, macrodefinition, token_type());
+
+// If no macrodefinition is given, and the macro string does not end with a
+// '=', then the macro should be defined with the value '1'
+ if (0 == macrodefinition.size() &&
+ '=' != macrostring[macrostring.size()-1])
+ {
+ macrodefinition.push_back(token_type(T_INTLIT, "1", act_pos));
+ }
+
+// add the new macro to the macromap
+ return ctx.add_macro_definition(macroname, has_parameters, macroparameters,
+ macrodefinition, is_predefined);
+}
+#endif // BOOST_WAVE_ENABLE_COMMANDLINE_MACROS != 0
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace util
+
+///////////////////////////////////////////////////////////////////////////////
+// forward declaration
+template <typename ContextT> class pp_iterator;
+
+namespace impl {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// pp_iterator_functor
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ContextT>
+class pp_iterator_functor {
+
+public:
+// interface to the boost::spirit::multi_pass_policies::functor_input policy
+ typedef typename ContextT::token_type result_type;
+
+// eof token
+ static result_type const eof;
+
+private:
+// type of a token sequence
+ typedef typename ContextT::token_sequence_type token_sequence_type;
+
+ typedef typename ContextT::lexer_type lexer_type;
+ typedef typename result_type::string_type string_type;
+ typedef typename result_type::position_type position_type;
+ typedef boost::wave::grammars::cpp_grammar_gen<lexer_type, token_sequence_type>
+ cpp_grammar_type;
+
+// iteration context related types (an iteration context represents a current
+// position in an included file)
+ typedef base_iteration_context<lexer_type> base_iteration_context_type;
+ typedef
+ iteration_context<lexer_type, typename ContextT::input_policy_type>
+ iteration_context_type;
+
+// parse tree related types
+ typedef typename cpp_grammar_type::node_factory_type node_factory_type;
+ typedef boost::spirit::tree_parse_info<lexer_type, node_factory_type>
+ tree_parse_info_type;
+ typedef boost::spirit::tree_match<lexer_type, node_factory_type>
+ parse_tree_match_type;
+ typedef typename parse_tree_match_type::node_t parse_node_type; // tree_node<node_val_data<> >
+ typedef typename parse_tree_match_type::parse_node_t parse_node_value_type; // node_val_data<>
+ typedef typename parse_tree_match_type::container_t parse_tree_type; // parse_node_type::children_t
+
+public:
+ template <typename IteratorT>
+ pp_iterator_functor(ContextT &ctx_, IteratorT const &first_,
+ IteratorT const &last_, typename ContextT::position_type const &pos_)
+ : ctx(ctx_),
+ iter_ctx(new base_iteration_context_type(
+ lexer_type(first_, last_, pos_,
+ boost::wave::enable_prefer_pp_numbers(ctx.get_language())),
+ lexer_type(),
+ pos_.get_file().c_str()
+ )),
+ seen_newline(true), must_emit_line_directive(false),
+ act_pos(ctx_.get_main_pos())
+ {
+ act_pos.set_file(pos_.get_file());
+#if BOOST_WAVE_SUPPORT_PRAGMA_ONCE != 0
+ ctx_.set_current_filename(pos_.get_file().c_str());
+#endif
+ }
+
+// get the next preprocessed token
+ result_type const &operator()();
+
+// get the last recognized token (for error processing etc.)
+ result_type const &current_token() const { return act_token; }
+
+protected:
+ friend class pp_iterator<ContextT>;
+ void on_include_helper(char const *t, char const *s, bool is_system,
+ bool include_next);
+
+protected:
+ result_type const &get_next_token();
+ result_type const &pp_token(bool consider_emitting_line_directive = false);
+
+ bool pp_directive();
+ template <typename IteratorT>
+ bool can_ignore_pp_directive(IteratorT &it);
+ bool dispatch_directive(tree_parse_info_type const &hit,
+ result_type const& found_directive,
+ token_sequence_type const& found_eoltokens);
+
+ void on_include(string_type const &s, bool is_system, bool include_next);
+ void on_include(typename parse_tree_type::const_iterator const &begin,
+ typename parse_tree_type::const_iterator const &end, bool include_next);
+
+ void on_define(parse_node_type const &node);
+ void on_undefine(result_type const &t);
+
+ void on_ifdef(typename parse_tree_type::const_iterator const &begin,
+ typename parse_tree_type::const_iterator const &end);
+ void on_ifndef(typename parse_tree_type::const_iterator const &begin,
+ typename parse_tree_type::const_iterator const &end);
+ void on_else();
+ void on_endif();
+ void on_illformed(typename result_type::string_type s);
+
+ void on_line(typename parse_tree_type::const_iterator const &begin,
+ typename parse_tree_type::const_iterator const &end);
+ void on_if(typename parse_tree_type::const_iterator const &begin,
+ typename parse_tree_type::const_iterator const &end);
+ void on_elif(typename parse_tree_type::const_iterator const &begin,
+ typename parse_tree_type::const_iterator const &end,
+ token_sequence_type const& found_eoltokens);
+ void on_error(typename parse_tree_type::const_iterator const &begin,
+ typename parse_tree_type::const_iterator const &end);
+#if BOOST_WAVE_SUPPORT_WARNING_DIRECTIVE != 0
+ void on_warning(typename parse_tree_type::const_iterator const &begin,
+ typename parse_tree_type::const_iterator const &end);
+#endif
+ bool on_pragma(typename parse_tree_type::const_iterator const &begin,
+ typename parse_tree_type::const_iterator const &end);
+
+ bool emit_line_directive();
+ bool returned_from_include();
+
+ bool interpret_pragma(token_sequence_type const &pragma_body,
+ token_sequence_type &result);
+
+private:
+ ContextT &ctx; // context, this iterator is associated with
+ boost::shared_ptr<base_iteration_context_type> iter_ctx;
+
+ bool seen_newline; // needed for recognizing begin of line
+ bool must_emit_line_directive; // must emit a line directive
+ result_type act_token; // current token
+ typename result_type::position_type &act_pos; // current fileposition (references the macromap)
+
+ token_sequence_type unput_queue; // tokens to be preprocessed again
+ token_sequence_type pending_queue; // tokens already preprocessed
+
+ // detect whether to insert additional whitespace in between two adjacent
+ // tokens, which otherwise would form a different token type, if
+ // retokenized
+ boost::wave::util::insert_whitespace_detection whitespace;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// eof token
+template <typename ContextT>
+typename pp_iterator_functor<ContextT>::result_type const
+ pp_iterator_functor<ContextT>::eof;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// returned_from_include()
+//
+// Tests if it is necessary to pop the include file context (eof inside
+// a file was reached). If yes, it pops this context. Preprocessing will
+// continue with the next outer file scope.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ContextT>
+inline bool
+pp_iterator_functor<ContextT>::returned_from_include()
+{
+ if (iter_ctx->first == iter_ctx->last && ctx.get_iteration_depth() > 0) {
+ // call the include policy trace function
+ ctx.get_hooks().returning_from_include_file();
+
+ // restore the previous iteration context after finishing the preprocessing
+ // of the included file
+ BOOST_WAVE_STRINGTYPE oldfile = iter_ctx->real_filename;
+ position_type old_pos (act_pos);
+
+ // if this file has include guards handle it as if it had a #pragma once
+#if BOOST_WAVE_SUPPORT_PRAGMA_ONCE != 0
+ if (need_include_guard_detection(ctx.get_language())) {
+ std::string guard_name;
+ if (iter_ctx->first.has_include_guards(guard_name))
+ ctx.add_pragma_once_header(ctx.get_current_filename(), guard_name);
+ }
+#endif
+ iter_ctx = ctx.pop_iteration_context();
+
+ must_emit_line_directive = true;
+ seen_newline = true;
+
+ // restore current file position
+ act_pos.set_file(iter_ctx->filename);
+ act_pos.set_line(iter_ctx->line);
+ act_pos.set_column(0);
+
+ // restore the actual current file and directory
+#if BOOST_WAVE_SUPPORT_PRAGMA_ONCE != 0
+ ctx.set_current_filename(iter_ctx->real_filename.c_str());
+#endif
+ ctx.set_current_directory(iter_ctx->real_filename.c_str());
+
+ // ensure the integrity of the #if/#endif stack
+ // report unbalanced #if/#endif now to make it possible to recover properly
+ if (iter_ctx->if_block_depth != ctx.get_if_block_depth()) {
+ using boost::wave::util::impl::escape_lit;
+ BOOST_WAVE_THROW(preprocess_exception, unbalanced_if_endif,
+ escape_lit(oldfile).c_str(), old_pos);
+ }
+ return true;
+ }
+ return false;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// operator()(): get the next preprocessed token
+//
+// throws a preprocess_exception, if appropriate
+//
+///////////////////////////////////////////////////////////////////////////////
+namespace impl {
+
+ // It may be necessary to emit a #line directive either
+ // - when comments need to be preserved: if the current token is not a
+ // whitespace, except comments
+ // - when comments are to be skipped: if the current token is not a
+ // whitespace token.
+ template <typename ContextT>
+ bool consider_emitting_line_directive(ContextT const& ctx, token_id id)
+ {
+ if (need_preserve_comments(ctx.get_language())) {
+ if (!IS_CATEGORY(id, EOLTokenType) && !IS_CATEGORY(id, EOFTokenType))
+ {
+ return true;
+ }
+ }
+ if (!IS_CATEGORY(id, WhiteSpaceTokenType) &&
+ !IS_CATEGORY(id, EOLTokenType) && !IS_CATEGORY(id, EOFTokenType))
+ {
+ return true;
+ }
+ return false;
+ }
+}
+
+template <typename ContextT>
+inline typename pp_iterator_functor<ContextT>::result_type const &
+pp_iterator_functor<ContextT>::operator()()
+{
+ using namespace boost::wave;
+
+// loop over skip able whitespace until something significant is found
+bool skipped_newline = false;
+bool was_seen_newline = seen_newline;
+token_id id = T_UNKNOWN;
+
+ do {
+ // get_next_token assigns result to act_token member
+ if (!seen_newline && skipped_newline)
+ seen_newline = true;
+ get_next_token();
+
+ // if comments shouldn't be preserved replace them with newlines
+ id = token_id(act_token);
+ if (!need_preserve_comments(ctx.get_language()) &&
+ (T_CPPCOMMENT == id || context_policies::util::ccomment_has_newline(act_token)))
+ {
+ act_token.set_token_id(id = T_NEWLINE);
+ act_token.set_value("\n");
+ }
+
+ } while (ctx.get_hooks().may_skip_whitespace(ctx, act_token, skipped_newline));
+
+// if there were skipped any newlines, we must emit a #line directive
+ if ((must_emit_line_directive || (was_seen_newline && skipped_newline)) &&
+ impl::consider_emitting_line_directive(ctx, id))
+ {
+ // must emit a #line directive
+ if (need_emit_line_directives(ctx.get_language()) && emit_line_directive())
+ {
+ skipped_newline = false;
+ ctx.get_hooks().may_skip_whitespace(ctx, act_token, skipped_newline); // feed ws eater FSM
+ id = token_id(act_token);
+ }
+ }
+
+// cleanup of certain tokens required
+ seen_newline = false;
+ switch (static_cast<unsigned int>(id)) {
+ case T_NONREPLACABLE_IDENTIFIER:
+ act_token.set_token_id(T_IDENTIFIER);
+ id = T_IDENTIFIER;
+ break;
+
+ case T_GENERATEDNEWLINE: // was generated by emit_line_directive()
+ act_token.set_token_id(id = T_NEWLINE);
+ ++iter_ctx->emitted_lines;
+ seen_newline = true;
+ break;
+
+ case T_NEWLINE:
+ case T_CPPCOMMENT:
+ seen_newline = true;
+ ++iter_ctx->emitted_lines;
+ break;
+
+ case T_CCOMMENT: // will come here only if whitespace is preserved
+ iter_ctx->emitted_lines +=
+ context_policies::util::ccomment_count_newlines(act_token);
+ break;
+
+ case T_PP_NUMBER: // re-tokenize the pp-number
+ {
+ token_sequence_type rescanned;
+
+ std::string pp_number(act_token.get_value().c_str());
+ lexer_type it = lexer_type(pp_number.begin(),
+ pp_number.end(), act_token.get_position(),
+ ctx.get_language());
+ lexer_type end = lexer_type();
+ for (/**/; it != end && T_EOF != token_id(*it); ++it)
+ rescanned.push_back(*it);
+
+ pending_queue.splice(pending_queue.begin(), rescanned);
+ act_token = pending_queue.front();
+ id = token_id(act_token);
+ pending_queue.pop_front();
+ }
+ break;
+
+ case T_EOF:
+ seen_newline = true;
+ break;
+
+ default: // make sure whitespace at line begin keeps seen_newline status
+ if (IS_CATEGORY(id, WhiteSpaceTokenType))
+ seen_newline = skipped_newline;
+ break;
+ }
+
+ if (whitespace.must_insert(id, act_token.get_value())) {
+ // must insert some whitespace into the output stream to avoid adjacent
+ // tokens, which would form different (and wrong) tokens
+ whitespace.shift_tokens(T_SPACE);
+ pending_queue.push_front(act_token); // push this token back
+ return act_token = result_type(T_SPACE,
+ typename result_type::string_type(" "),
+ act_token.get_position());
+ }
+ whitespace.shift_tokens(id);
+ return act_token;
+}
+
+
+template <typename ContextT>
+inline typename pp_iterator_functor<ContextT>::result_type const &
+pp_iterator_functor<ContextT>::get_next_token()
+{
+ using namespace boost::wave;
+
+// if there is something in the unput_queue, then return the next token from
+// there (all tokens in the queue are preprocessed already)
+ if (!pending_queue.empty() || !unput_queue.empty())
+ return pp_token(); // return next token
+
+// test for EOF, if there is a pending input context, pop it back and continue
+// parsing with it
+bool returned_from_include_file = returned_from_include();
+
+// try to generate the next token
+ if (iter_ctx->first != iter_ctx->last) {
+ do {
+ // If there are pending tokens in the queue, we'll have to return
+ // these. This may happen from a #pragma directive, which got replaced
+ // by some token sequence.
+ if (!pending_queue.empty()) {
+ util::on_exit::pop_front<token_sequence_type>
+ pop_front_token(pending_queue);
+
+ whitespace.shift_tokens(act_token = pending_queue.front());
+ return act_token;
+ }
+
+ // fetch the current token
+ act_token = *iter_ctx->first;
+
+ // adjust the current position (line and column)
+ bool was_seen_newline = seen_newline || returned_from_include_file;
+
+ act_pos = act_token.get_position();
+
+ // act accordingly on the current token
+ token_id id = token_id(act_token);
+
+ if (T_EOF == id) {
+ // returned from an include file, continue with the next token
+ whitespace.shift_tokens(T_EOF);
+ ++iter_ctx->first;
+
+ // now make sure this line has a newline
+ if ((!seen_newline || act_pos.get_column() > 1) &&
+ !(support_option_single_line & get_support_options(ctx.get_language())))
+ {
+ // warn, if this file does not end with a newline
+ BOOST_WAVE_THROW(preprocess_exception,
+ last_line_not_terminated, "", act_pos);
+ }
+ continue; // if this is the main file, the while loop breaks
+ }
+ else if (T_NEWLINE == id || T_CPPCOMMENT == id) {
+ // a newline is to be returned ASAP, a C++ comment too
+ // (the C++ comment token includes the trailing newline)
+ seen_newline = true;
+ ++iter_ctx->first;
+ whitespace.shift_tokens(id); // whitespace controller
+
+ if (!ctx.get_if_block_status()) {
+ // skip this token because of the disabled #if block
+ ctx.get_hooks().skipped_token(act_token);
+ continue;
+ }
+ return act_token;
+ }
+ seen_newline = false;
+
+ if (was_seen_newline && pp_directive()) {
+ // a pp directive was found
+// seen_newline = true;
+// must_emit_line_directive = true;
+
+ // loop to the next token to analyze
+ // simply fall through, since the iterator was already adjusted
+ // correctly
+ }
+ else if (ctx.get_if_block_status()) {
+ // preprocess this token, eat up more, if appropriate, return
+ // the next preprocessed token
+ return pp_token(was_seen_newline);
+ }
+ else {
+ // compilation condition is false: if the current token is a
+ // newline, account for it, otherwise discard the actual token and
+ // try the next one
+ if (T_NEWLINE == act_token) {
+ seen_newline = true;
+ must_emit_line_directive = true;
+ }
+
+ // next token
+ ctx.get_hooks().skipped_token(act_token);
+ ++iter_ctx->first;
+ }
+
+ } while ((iter_ctx->first != iter_ctx->last) ||
+ (returned_from_include_file = returned_from_include()));
+
+ // overall eof reached
+ if (ctx.get_if_block_depth() > 0 &&
+ !(support_option_single_line & get_support_options(ctx.get_language())))
+ {
+ // missing endif directive(s)
+ BOOST_WAVE_THROW(preprocess_exception, missing_matching_endif, "",
+ act_pos);
+ }
+ }
+ else {
+ act_token = eof; // this is the last token
+ }
+
+ whitespace.shift_tokens(T_EOF); // whitespace controller
+ return act_token; // return eof token
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// emit_line_directive(): emits a line directive from the act_token data
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ContextT>
+inline bool
+pp_iterator_functor<ContextT>::emit_line_directive()
+{
+ using namespace boost::wave;
+
+typename ContextT::position_type pos = act_token.get_position();
+
+ if (must_emit_line_directive ||
+ iter_ctx->emitted_lines != act_pos.get_line())
+ {
+ // unput the current token
+ pending_queue.push_front(act_token);
+ pos.set_line(act_pos.get_line());
+
+ if (!must_emit_line_directive &&
+ iter_ctx->emitted_lines+1 == act_pos.get_line())
+ {
+ // prefer to output a single newline instead of the #line directive
+ whitespace.shift_tokens(T_NEWLINE);
+ act_token = result_type(T_NEWLINE, "\n", pos);
+ }
+ else {
+ // account for the newline emitted here
+ act_pos.set_line(act_pos.get_line()-1);
+ iter_ctx->emitted_lines = act_pos.get_line();
+
+ // the #line directive has to be pushed back into the pending queue in
+ // reverse order
+
+ // unput the complete #line directive in reverse order
+ std::string file("\"");
+ boost::filesystem::path filename(act_pos.get_file().c_str(),
+ boost::filesystem::native);
+
+ using boost::wave::util::impl::escape_lit;
+ file += escape_lit(filename.native_file_string()) + "\"";
+
+ // 21 is the max required size for a 64 bit integer represented as a
+ // string
+ char buffer[22];
+
+ using namespace std; // for some systems sprintf is in namespace std
+ sprintf (buffer, "%d", pos.get_line());
+
+ // adjust the generated column numbers accordingly
+ // #line<space>number<space>filename<newline>
+ unsigned int filenamelen = (unsigned int)file.size();
+ unsigned int column = 7 + (unsigned int)strlen(buffer) + filenamelen;
+
+ pos.set_line(pos.get_line() - 1); // adjust line number
+
+ pos.set_column(column);
+ pending_queue.push_front(result_type(T_GENERATEDNEWLINE, "\n", pos));
+ pos.set_column(column -= filenamelen); // account for filename
+ pending_queue.push_front(result_type(T_STRINGLIT, file.c_str(), pos));
+ pos.set_column(--column); // account for ' '
+ pending_queue.push_front(result_type(T_SPACE, " ", pos));
+ pos.set_column(column -= (unsigned int)strlen(buffer)); // account for <number>
+ pending_queue.push_front(result_type(T_INTLIT, buffer, pos));
+ pos.set_column(--column); // account for ' '
+ pending_queue.push_front(result_type(T_SPACE, " ", pos));
+
+ // return the #line token itself
+ whitespace.shift_tokens(T_PP_LINE);
+ pos.set_column(1);
+ act_token = result_type(T_PP_LINE, "#line", pos);
+ }
+
+ must_emit_line_directive = false; // we are now in sync
+ return true;
+ }
+
+ must_emit_line_directive = false; // we are now in sync
+ return false;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// pptoken(): return the next preprocessed token
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ContextT>
+inline typename pp_iterator_functor<ContextT>::result_type const &
+pp_iterator_functor<ContextT>::pp_token(bool consider_emitting_line_directive)
+{
+ using namespace boost::wave;
+
+token_id id = token_id(*iter_ctx->first);
+
+ // eat all T_PLACEHOLDER tokens, eventually slipped through out of the
+ // macro engine
+ do {
+ if (!pending_queue.empty()) {
+ // if there are pending tokens in the queue, return the first one
+ act_token = pending_queue.front();
+ pending_queue.pop_front();
+ act_pos = act_token.get_position();
+ }
+ else if (!unput_queue.empty()
+ || T_IDENTIFIER == id
+ || IS_CATEGORY(id, KeywordTokenType)
+ || IS_EXTCATEGORY(id, OperatorTokenType|AltExtTokenType)
+ || IS_CATEGORY(id, BoolLiteralTokenType))
+ {
+ // call the lexer, preprocess the required number of tokens, put them
+ // into the unput queue
+ act_token = ctx.expand_tokensequence(iter_ctx->first,
+ iter_ctx->last, pending_queue, unput_queue);
+ }
+ else {
+ // simply return the next token
+ act_token = *iter_ctx->first;
+ ++iter_ctx->first;
+ }
+ id = token_id(act_token);
+
+ } while (T_PLACEHOLDER == id);
+ return act_token;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// pp_directive(): recognize a preprocessor directive
+//
+///////////////////////////////////////////////////////////////////////////////
+namespace impl {
+
+ template <typename ContexT, typename IteratorT>
+ bool next_token_is_pp_directive(ContexT &ctx, IteratorT &it, IteratorT const &end)
+ {
+ using namespace boost::wave;
+
+ token_id id = T_UNKNOWN;
+ for (/**/; it != end; ++it) {
+ id = token_id(*it);
+ if (!IS_CATEGORY(id, WhiteSpaceTokenType))
+ break; // skip leading whitespace
+ if (IS_CATEGORY(id, EOLTokenType))
+ break; // do not enter a new line
+
+ ctx.get_hooks().skipped_token(*it); // this token get's skipped
+ }
+ BOOST_ASSERT(it == end || id != T_UNKNOWN);
+ return it != end && IS_CATEGORY(id, PPTokenType);
+ }
+
+ template <typename ContexT, typename IteratorT>
+ bool pp_is_last_on_line(ContexT &ctx, IteratorT &it, IteratorT const &end)
+ {
+ using namespace boost::wave;
+
+ ctx.get_hooks().skipped_token(*it); // this token get's skipped
+
+ for (++it; it != end; ++it) {
+ token_id id = token_id(*it);
+ if (T_CPPCOMMENT == id || T_NEWLINE == id ||
+ context_policies::util::ccomment_has_newline(*it))
+ {
+ ctx.get_hooks().skipped_token(*it);
+ ++it; // skip eol/C/C++ comment
+ return true; // no more significant tokens on this line
+ }
+
+ if (!IS_CATEGORY(id, WhiteSpaceTokenType))
+ break;
+
+ ctx.get_hooks().skipped_token(*it); // this token get's skipped
+ }
+ return false;
+ }
+
+ template <typename ContexT, typename IteratorT>
+ bool skip_to_eol(ContexT &ctx, IteratorT &it, IteratorT const &end)
+ {
+ using namespace boost::wave;
+
+ for (/**/; it != end; ++it) {
+ token_id id = token_id(*it);
+
+ ctx.get_hooks().skipped_token(*it);
+ if (T_CPPCOMMENT == id || T_NEWLINE == id ||
+ context_policies::util::ccomment_has_newline(*it))
+ {
+ ++it; // skip eol/C/C++ comment
+ return true; // found eol
+ }
+ }
+ return false;
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// can_ignore_pp_directive: handle certain pp_directives if if_block_status is
+// false
+template <typename ContextT>
+template <typename IteratorT>
+inline bool
+pp_iterator_functor<ContextT>::can_ignore_pp_directive(IteratorT &it)
+{
+ bool can_exit = true;
+ if (IS_EXTCATEGORY(*it, PPConditionalTokenType)) {
+ // simulate the if block hierarchy
+ switch (static_cast<unsigned int>(token_id(*it))) {
+ case T_PP_IFDEF: // #ifdef
+ case T_PP_IFNDEF: // #ifndef
+ case T_PP_IF: // #if
+ ctx.enter_if_block(false);
+ break;
+
+ case T_PP_ELIF: // #elif
+ if (!ctx.get_enclosing_if_block_status()) {
+ if (!ctx.enter_elif_block(false)) {
+ // #else without matching #if
+ BOOST_WAVE_THROW(preprocess_exception,
+ missing_matching_if, "#elif", act_pos);
+ }
+ }
+ else {
+ can_exit = false; // #elif is not always safe to skip
+ }
+ break;
+
+ case T_PP_ELSE: // #else
+ case T_PP_ENDIF: // #endif
+ {
+ // handle this directive
+ if (T_PP_ELSE == token_id(*it))
+ on_else();
+ else
+ on_endif();
+
+ // make sure, there are no (non-whitespace) tokens left on this line
+ string_type value ((*it).get_value());
+ if (!impl::pp_is_last_on_line(ctx, it, iter_ctx->last)) {
+ // enable error recovery (start over with the next line)
+ impl::skip_to_eol(ctx, it, iter_ctx->last);
+ seen_newline = true;
+ iter_ctx->first = it;
+
+ // report an invalid #else directive
+ on_illformed(value);
+ break;
+ }
+
+ // we skipped to the end of this line already
+ seen_newline = true;
+ iter_ctx->first = it;
+ }
+ return true;
+
+ default: // #something else
+ on_illformed((*it).get_value());
+ break;
+ }
+ }
+
+// start over with the next line, if only possible
+ if (can_exit) {
+ string_type value ((*it).get_value());
+ if (!impl::skip_to_eol(ctx, it, iter_ctx->last)) {
+ // The line doesn't end with an eol but eof token.
+ seen_newline = true; // allow to resume after warning
+ iter_ctx->first = it;
+
+ // Trigger a warning, that the last line was not terminated with a
+ // newline.
+ BOOST_WAVE_THROW(preprocess_exception, last_line_not_terminated,
+ "", act_pos);
+ }
+ return true; // may be safely ignored
+ }
+
+ return false; // do not ignore this pp directive
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// pp_directive(): recognize a preprocessor directive
+template <typename ContextT>
+inline bool
+pp_iterator_functor<ContextT>::pp_directive()
+{
+ using namespace cpplexer;
+
+// test, if the next non-whitespace token is a pp directive
+lexer_type it = iter_ctx->first;
+
+ if (!impl::next_token_is_pp_directive(ctx, it, iter_ctx->last)) {
+ // eventually skip null pp directive (no need to do it via the parser)
+ if (it != iter_ctx->last && T_POUND == BASE_TOKEN(token_id(*it))) {
+ if (impl::pp_is_last_on_line(ctx, it, iter_ctx->last)) {
+ // start over with the next line
+ seen_newline = true;
+ iter_ctx->first = it;
+ return true;
+ }
+ else if (ctx.get_if_block_status()) {
+ // report invalid pp directive
+ on_illformed((*it).get_value());
+ }
+ }
+
+ // this line does not contain a pp directive, so simply return
+ return false;
+ }
+
+// found eof
+ if (it == iter_ctx->last)
+ return false;
+
+// ignore/handle all pp directives not related to conditional compilation while
+// if block status is false
+ if (!ctx.get_if_block_status() && can_ignore_pp_directive(it)) {
+ // we may skip pp directives only, if the current if block status is false
+ seen_newline = true;
+ iter_ctx->first = it;
+ return true; // the pp directive was handled/skipped
+ }
+
+// found a pp directive, so try to identify it, start with the pp_token
+bool found_eof = false;
+result_type found_directive;
+token_sequence_type found_eoltokens;
+
+tree_parse_info_type hit = cpp_grammar_type::parse_cpp_grammar(
+ it, iter_ctx->last, act_pos, found_eof, found_directive, found_eoltokens);
+
+ if (hit.match) {
+ // position the iterator past the matched sequence to allow
+ // resynchronization, if an error occurs
+ iter_ctx->first = hit.stop;
+ seen_newline = true;
+ must_emit_line_directive = true;
+
+ // found a valid pp directive, dispatch to the correct function to handle
+ // the found pp directive
+ bool result = dispatch_directive (hit, found_directive, found_eoltokens);
+
+ if (found_eof) {
+ // The line was terminated with an end of file token.
+ // So trigger a warning, that the last line was not terminated with a
+ // newline.
+ BOOST_WAVE_THROW(preprocess_exception, last_line_not_terminated, "",
+ act_pos);
+ }
+ return result;
+ }
+ else if (token_id(found_directive) != T_EOF) {
+ // recognized invalid directive
+ impl::skip_to_eol(ctx, it, iter_ctx->last);
+ seen_newline = true;
+
+ string_type str(boost::wave::util::impl::as_string<string_type>(
+ iter_ctx->first, it));
+ iter_ctx->first = it;
+
+ // report the ill formed directive
+ on_illformed(str);
+ }
+ return false;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// dispatch_directive(): dispatch a recognized preprocessor directive
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ContextT>
+inline bool
+pp_iterator_functor<ContextT>::dispatch_directive(
+ tree_parse_info_type const &hit, result_type const& found_directive,
+ token_sequence_type const& found_eoltokens)
+{
+ using namespace cpplexer;
+ using namespace boost::spirit;
+
+ typedef typename parse_tree_type::const_iterator const_child_iterator_t;
+
+// this iterator points to the root node of the parse tree
+const_child_iterator_t begin = hit.trees.begin();
+
+// decide, which preprocessor directive was found
+parse_tree_type const &root = (*begin).children;
+parse_node_value_type const &nodeval = get_first_leaf(*root.begin()).value;
+//long node_id = nodeval.id().to_long();
+
+const_child_iterator_t begin_child_it = (*root.begin()).children.begin();
+const_child_iterator_t end_child_it = (*root.begin()).children.end();
+
+token_id id = token_id(found_directive);
+
+ // call preprocessing hook
+ ctx.get_hooks().found_directive(found_directive);
+
+ switch (static_cast<unsigned int>(id)) {
+ case T_PP_QHEADER: // #include "..."
+#if BOOST_WAVE_SUPPORT_INCLUDE_NEXT != 0
+ case T_PP_QHEADER_NEXT: // #include_next "..."
+#endif
+ on_include ((*nodeval.begin()).get_value(), false,
+ T_PP_QHEADER_NEXT == id);
+ break;
+
+ case T_PP_HHEADER: // #include <...>
+#if BOOST_WAVE_SUPPORT_INCLUDE_NEXT != 0
+ case T_PP_HHEADER_NEXT: // #include_next <...>
+#endif
+ on_include ((*nodeval.begin()).get_value(), true,
+ T_PP_HHEADER_NEXT == id);
+ break;
+
+ case T_PP_INCLUDE: // #include ...
+#if BOOST_WAVE_SUPPORT_INCLUDE_NEXT != 0
+ case T_PP_INCLUDE_NEXT: // #include_next ...
+#endif
+ on_include (begin_child_it, end_child_it, T_PP_INCLUDE_NEXT == id);
+ break;
+
+ case T_PP_DEFINE: // #define
+ on_define (*begin);
+ break;
+
+ case T_PP_UNDEF: // #undef
+ on_undefine(*nodeval.begin());
+ break;
+
+ case T_PP_IFDEF: // #ifdef
+ on_ifdef(begin_child_it, end_child_it);
+ break;
+
+ case T_PP_IFNDEF: // #ifndef
+ on_ifndef(begin_child_it, end_child_it);
+ break;
+
+ case T_PP_IF: // #if
+ on_if(begin_child_it, end_child_it);
+ break;
+
+ case T_PP_ELIF: // #elif
+ on_elif(begin_child_it, end_child_it, found_eoltokens);
+ break;
+
+ case T_PP_ELSE: // #else
+ on_else();
+ break;
+
+ case T_PP_ENDIF: // #endif
+ on_endif();
+ break;
+
+ case T_PP_LINE: // #line
+ on_line(begin_child_it, end_child_it);
+ break;
+
+ case T_PP_ERROR: // #error
+ on_error(begin_child_it, end_child_it);
+ break;
+
+#if BOOST_WAVE_SUPPORT_WARNING_DIRECTIVE != 0
+ case T_PP_WARNING: // #warning
+ on_warning(begin_child_it, end_child_it);
+ break;
+#endif
+
+ case T_PP_PRAGMA: // #pragma
+ return on_pragma(begin_child_it, end_child_it);
+
+#if BOOST_WAVE_SUPPORT_MS_EXTENSIONS != 0
+ case T_MSEXT_PP_REGION:
+ case T_MSEXT_PP_ENDREGION:
+ break; // ignore these
+#endif
+
+ default: // #something else
+ on_illformed((*nodeval.begin()).get_value());
+ break;
+ }
+ return true; // return newline only
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// on_include: handle #include <...> or #include "..." directives
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ContextT>
+inline void
+pp_iterator_functor<ContextT>::on_include (string_type const &s,
+ bool is_system, bool include_next)
+{
+ BOOST_ASSERT(ctx.get_if_block_status());
+
+// strip quotes first, extract filename
+typename string_type::size_type pos_end = s.find_last_of(is_system ? '>' : '\"');
+
+ if (string_type::npos == pos_end) {
+ BOOST_WAVE_THROW(preprocess_exception, bad_include_statement,
+ s.c_str(), act_pos);
+ }
+
+typename string_type::size_type pos_begin =
+ s.find_last_of(is_system ? '<' : '\"', pos_end-1);
+
+ if (string_type::npos == pos_begin) {
+ BOOST_WAVE_THROW(preprocess_exception, bad_include_statement,
+ s.c_str(), act_pos);
+ }
+
+std::string file_token(s.substr(pos_begin, pos_end-pos_begin+1).c_str());
+std::string file_path(s.substr(pos_begin+1, pos_end-pos_begin-1).c_str());
+
+// finally include the file
+ on_include_helper(file_token.c_str(), file_path.c_str(), is_system,
+ include_next);
+}
+
+template <typename ContextT>
+inline void
+pp_iterator_functor<ContextT>::on_include_helper (char const *f, char const *s,
+ bool is_system, bool include_next)
+{
+ namespace fs = boost::filesystem;
+
+// try to locate the given file, searching through the include path lists
+std::string file_path(s);
+std::string dir_path;
+#if BOOST_WAVE_SUPPORT_INCLUDE_NEXT != 0
+char const *current_name = include_next ? iter_ctx->real_filename.c_str() : 0;
+#else
+char const *current_name = 0; // never try to match current file name
+#endif
+
+// call the include policy trace function
+ ctx.get_hooks().found_include_directive(f, include_next);
+
+ file_path = util::impl::unescape_lit(file_path);
+ if (!ctx.find_include_file (file_path, dir_path, is_system, current_name)) {
+ BOOST_WAVE_THROW(preprocess_exception, bad_include_file,
+ file_path.c_str(), act_pos);
+ }
+
+fs::path native_path(file_path, fs::native);
+
+ if (!fs::exists(native_path)) {
+ BOOST_WAVE_THROW(preprocess_exception, bad_include_file,
+ file_path.c_str(), act_pos);
+ }
+
+// test, if this file is known through a #pragma once directive
+#if BOOST_WAVE_SUPPORT_PRAGMA_ONCE != 0
+ if (!ctx.has_pragma_once(native_path.native_file_string()))
+#endif
+ {
+ // the new include file determines the actual current directory
+ ctx.set_current_directory(native_path.native_file_string().c_str());
+
+ // preprocess the opened file
+ boost::shared_ptr<base_iteration_context_type> new_iter_ctx (
+ new iteration_context_type(native_path.native_file_string().c_str(),
+ act_pos, boost::wave::enable_prefer_pp_numbers(ctx.get_language())));
+
+ // call the include policy trace function
+ ctx.get_hooks().opened_include_file(dir_path, file_path,
+ ctx.get_iteration_depth(), is_system);
+
+ // store current file position
+ iter_ctx->filename = act_pos.get_file();
+ iter_ctx->line = act_pos.get_line();
+ iter_ctx->if_block_depth = ctx.get_if_block_depth();
+
+ // push the old iteration context onto the stack and continue with the new
+ ctx.push_iteration_context(act_pos, iter_ctx);
+ iter_ctx = new_iter_ctx;
+ seen_newline = true; // fake a newline to trigger pp_directive
+ must_emit_line_directive = true;
+
+ act_pos.set_file(iter_ctx->filename); // initialize file position
+#if BOOST_WAVE_SUPPORT_PRAGMA_ONCE != 0
+ ctx.set_current_filename(iter_ctx->real_filename.c_str());
+#endif
+
+ act_pos.set_line(iter_ctx->line);
+ act_pos.set_column(0);
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// on_include(): handle #include ... directives
+//
+///////////////////////////////////////////////////////////////////////////////
+
+namespace impl {
+
+ // trim all whitespace from the beginning and the end of the given string
+ template <typename StringT>
+ inline StringT
+ trim_whitespace(StringT const &s)
+ {
+ typedef typename StringT::size_type size_type;
+
+ size_type first = s.find_first_not_of(" \t\v\f");
+ if (StringT::npos == first)
+ return StringT();
+ size_type last = s.find_last_not_of(" \t\v\f");
+ return s.substr(first, last-first+1);
+ }
+}
+
+template <typename ContextT>
+inline void
+pp_iterator_functor<ContextT>::on_include(
+ typename parse_tree_type::const_iterator const &begin,
+ typename parse_tree_type::const_iterator const &end, bool include_next)
+{
+ BOOST_ASSERT(ctx.get_if_block_status());
+
+// preprocess the given token sequence (the body of the #include directive)
+get_token_value<result_type, parse_node_type> get_value;
+token_sequence_type expanded;
+token_sequence_type toexpand;
+
+ std::copy(make_ref_transform_iterator(begin, get_value),
+ make_ref_transform_iterator(end, get_value),
+ std::inserter(toexpand, toexpand.end()));
+
+ typename token_sequence_type::iterator begin2 = toexpand.begin();
+ ctx.expand_whole_tokensequence(begin2, toexpand.end(), expanded,
+ false);
+
+// now, include the file
+string_type s (impl::trim_whitespace(boost::wave::util::impl::as_string(expanded)));
+bool is_system = '<' == s[0] && '>' == s[s.size()-1];
+
+ if (!is_system && !('\"' == s[0] && '\"' == s[s.size()-1])) {
+ // should resolve into something like <...> or "..."
+ BOOST_WAVE_THROW(preprocess_exception, bad_include_statement,
+ s.c_str(), act_pos);
+ }
+ on_include(s, is_system, include_next);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// on_define(): handle #define directives
+//
+///////////////////////////////////////////////////////////////////////////////
+
+template <typename ContextT>
+inline void
+pp_iterator_functor<ContextT>::on_define (parse_node_type const &node)
+{
+ BOOST_ASSERT(ctx.get_if_block_status());
+
+// retrieve the macro definition from the parse tree
+result_type macroname;
+std::vector<result_type> macroparameters;
+token_sequence_type macrodefinition;
+bool has_parameters = false;
+
+ boost::wave::util::retrieve_macroname(node,
+ BOOST_WAVE_PLAIN_DEFINE_ID, macroname,
+ act_token.get_position());
+ has_parameters = boost::wave::util::retrieve_macrodefinition(node,
+ BOOST_WAVE_MACRO_PARAMETERS_ID, macroparameters, act_token);
+ boost::wave::util::retrieve_macrodefinition(node,
+ BOOST_WAVE_MACRO_DEFINITION_ID, macrodefinition, act_token);
+
+ if (has_parameters) {
+#if BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS != 0
+ if (boost::wave::need_variadics(ctx.get_language())) {
+ // test whether ellipsis are given, and if yes, if these are placed as the
+ // last argument, test if __VA_ARGS__ is used as a macro parameter name
+ using namespace cpplexer;
+ typedef typename std::vector<result_type>::iterator
+ parameter_iterator_t;
+
+ bool seen_ellipses = false;
+ parameter_iterator_t end = macroparameters.end();
+ for (parameter_iterator_t pit = macroparameters.begin();
+ pit != end; ++pit)
+ {
+ if (seen_ellipses) {
+ // ellipses are not the last given formal argument
+ BOOST_WAVE_THROW(preprocess_exception, bad_define_statement,
+ macroname.get_value().c_str(), (*pit).get_position());
+ }
+ if (T_ELLIPSIS == token_id(*pit))
+ seen_ellipses = true;
+
+ // can't use __VA_ARGS__ as a argument name
+ if ("__VA_ARGS__" == (*pit).get_value()) {
+ BOOST_WAVE_THROW(preprocess_exception, bad_define_statement_va_args,
+ macroname.get_value().c_str(), (*pit).get_position());
+ }
+ }
+
+ // if there wasn't an ellipsis, then there shouldn't be a __VA_ARGS__
+ // placeholder in the definition too [C99 Standard 6.10.3.5]
+ if (!seen_ellipses) {
+ typedef typename token_sequence_type::iterator definition_iterator_t;
+
+ bool seen_va_args = false;
+ definition_iterator_t pend = macrodefinition.end();
+ for (definition_iterator_t dit = macrodefinition.begin();
+ dit != pend; ++dit)
+ {
+ if (T_IDENTIFIER == token_id(*dit) &&
+ "__VA_ARGS__" == (*dit).get_value())
+ {
+ seen_va_args = true;
+ }
+ }
+ if (seen_va_args) {
+ // must not have seen __VA_ARGS__ placeholder
+ BOOST_WAVE_THROW(preprocess_exception, bad_define_statement_va_args,
+ macroname.get_value().c_str(), act_token.get_position());
+ }
+ }
+ }
+ else
+#endif // BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS != 0
+ {
+ // test, that there is no T_ELLIPSES given
+ using namespace cpplexer;
+ typedef typename std::vector<result_type>::iterator
+ parameter_iterator_t;
+
+ parameter_iterator_t end = macroparameters.end();
+ for (parameter_iterator_t pit = macroparameters.begin();
+ pit != end; ++pit)
+ {
+ if (T_ELLIPSIS == token_id(*pit)) {
+ // if variadics are disabled, no ellipses should be given
+ BOOST_WAVE_THROW(preprocess_exception, bad_define_statement,
+ macroname.get_value().c_str(), (*pit).get_position());
+ }
+ }
+ }
+ }
+
+// add the new macro to the macromap
+ ctx.add_macro_definition(macroname, has_parameters, macroparameters,
+ macrodefinition);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// on_undefine(): handle #undef directives
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ContextT>
+inline void
+pp_iterator_functor<ContextT>::on_undefine (result_type const &token)
+{
+ BOOST_ASSERT(ctx.get_if_block_status());
+
+// retrieve the macro name to undefine from the parse tree
+ ctx.remove_macro_definition(token.get_value()); // throws for predefined macros
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// on_ifdef(): handle #ifdef directives
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ContextT>
+inline void
+pp_iterator_functor<ContextT>::on_ifdef(
+ typename parse_tree_type::const_iterator const &begin,
+ typename parse_tree_type::const_iterator const &end)
+{
+get_token_value<result_type, parse_node_type> get_value;
+token_sequence_type toexpand;
+
+ std::copy(make_ref_transform_iterator((*begin).children.begin(), get_value),
+ make_ref_transform_iterator((*begin).children.end(), get_value),
+ std::inserter(toexpand, toexpand.end()));
+
+bool is_defined = ctx.is_defined_macro(toexpand.begin(), toexpand.end());
+
+ ctx.get_hooks().evaluated_conditional_expression(toexpand, is_defined);
+ ctx.enter_if_block(is_defined);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// on_ifndef(): handle #ifndef directives
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ContextT>
+inline void
+pp_iterator_functor<ContextT>::on_ifndef(
+ typename parse_tree_type::const_iterator const &begin,
+ typename parse_tree_type::const_iterator const &end)
+{
+get_token_value<result_type, parse_node_type> get_value;
+token_sequence_type toexpand;
+
+ std::copy(make_ref_transform_iterator((*begin).children.begin(), get_value),
+ make_ref_transform_iterator((*begin).children.end(), get_value),
+ std::inserter(toexpand, toexpand.end()));
+
+bool is_defined = ctx.is_defined_macro(toexpand.begin(), toexpand.end());
+
+ ctx.get_hooks().evaluated_conditional_expression(toexpand, is_defined);
+ ctx.enter_if_block(!is_defined);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// on_else(): handle #else directives
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ContextT>
+inline void
+pp_iterator_functor<ContextT>::on_else()
+{
+ if (!ctx.enter_else_block()) {
+ // #else without matching #if
+ BOOST_WAVE_THROW(preprocess_exception, missing_matching_if, "#else",
+ act_pos);
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// on_endif(): handle #endif directives
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ContextT>
+inline void
+pp_iterator_functor<ContextT>::on_endif()
+{
+ if (!ctx.exit_if_block()) {
+ // #endif without matching #if
+ BOOST_WAVE_THROW(preprocess_exception, missing_matching_if, "#endif",
+ act_pos);
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// on_if(): handle #if directives
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ContextT>
+inline void
+pp_iterator_functor<ContextT>::on_if(
+ typename parse_tree_type::const_iterator const &begin,
+ typename parse_tree_type::const_iterator const &end)
+{
+// preprocess the given sequence into the provided list
+get_token_value<result_type, parse_node_type> get_value;
+token_sequence_type expanded;
+token_sequence_type toexpand;
+
+ std::copy(make_ref_transform_iterator(begin, get_value),
+ make_ref_transform_iterator(end, get_value),
+ std::inserter(toexpand, toexpand.end()));
+
+ typename token_sequence_type::iterator begin2 = toexpand.begin();
+ ctx.expand_whole_tokensequence(begin2, toexpand.end(), expanded);
+
+// replace all remaining (== undefined) identifiers with an integer literal '0'
+ typename token_sequence_type::iterator exp_end = expanded.end();
+ for (typename token_sequence_type::iterator exp_it = expanded.begin();
+ exp_it != exp_end; ++exp_it)
+ {
+ using namespace boost::wave;
+
+ token_id id = token_id(*exp_it);
+ if (IS_CATEGORY(id, IdentifierTokenType) ||
+ IS_CATEGORY(id, KeywordTokenType))
+ {
+ (*exp_it).set_token_id(T_INTLIT);
+ (*exp_it).set_value("0");
+ }
+ }
+
+#if BOOST_WAVE_DUMP_CONDITIONAL_EXPRESSIONS != 0
+ {
+ string_type outstr(boost::wave::util::impl::as_string(toexpand));
+ outstr += "(" + boost::wave::util::impl::as_string(expanded) + ")";
+ BOOST_WAVE_DUMP_CONDITIONAL_EXPRESSIONS_OUT << "#if " << outstr
+ << std::endl;
+ }
+#endif
+
+// parse the expression and enter the #if block
+grammars::value_error status = grammars::error_noerror;
+bool if_status = grammars::expression_grammar_gen<result_type>::
+ evaluate(expanded.begin(), expanded.end(), act_pos,
+ ctx.get_if_block_status(), status);
+
+ ctx.get_hooks().evaluated_conditional_expression(toexpand, if_status);
+ if (grammars::error_noerror != status) {
+ // division or other error by zero occurred
+ string_type expression = util::impl::as_string(expanded);
+ if (0 == expression.size())
+ expression = "<empty expression>";
+
+ if (grammars::error_division_by_zero & status) {
+ BOOST_WAVE_THROW(preprocess_exception, division_by_zero,
+ expression.c_str(), act_pos);
+ }
+ if (grammars::error_integer_overflow & status) {
+ // we may validly continue
+ ctx.enter_if_block(if_status);
+ BOOST_WAVE_THROW(preprocess_exception, integer_overflow,
+ expression.c_str(), act_pos);
+ return;
+ }
+ if (grammars::error_character_overflow & status) {
+ // we may validly continue
+ ctx.enter_if_block(if_status);
+ BOOST_WAVE_THROW(preprocess_exception,
+ character_literal_out_of_range, expression.c_str(), act_pos);
+ return;
+ }
+ }
+
+ ctx.enter_if_block(if_status);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// on_elif(): handle #elif directives
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ContextT>
+inline void
+pp_iterator_functor<ContextT>::on_elif(
+ typename parse_tree_type::const_iterator const &begin,
+ typename parse_tree_type::const_iterator const &end,
+ token_sequence_type const& found_eoltokens)
+{
+// preprocess the given sequence into the provided list
+get_token_value<result_type, parse_node_type> get_value;
+token_sequence_type toexpand;
+
+ std::copy(make_ref_transform_iterator(begin, get_value),
+ make_ref_transform_iterator(end, get_value),
+ std::inserter(toexpand, toexpand.end()));
+
+// check current if block status
+ if (ctx.get_if_block_some_part_status()) {
+ if (!ctx.enter_elif_block(false)) {
+ // #else without matching #if
+ BOOST_WAVE_THROW(preprocess_exception, missing_matching_if, "#elif",
+ act_pos);
+ }
+
+ // skip all the expression and the trailing whitespace
+ typename token_sequence_type::iterator begin2 = toexpand.begin();
+ typename token_sequence_type::const_iterator begin3 = found_eoltokens.begin();
+
+ impl::skip_to_eol(ctx, begin2, toexpand.end());
+ impl::skip_to_eol(ctx, begin3, found_eoltokens.end());
+ return; // one of previous #if/#elif was true, so don't enter this #elif
+ }
+
+// preprocess the given sequence into the provided list
+token_sequence_type expanded;
+
+ typename token_sequence_type::iterator begin2 = toexpand.begin();
+ ctx.expand_whole_tokensequence(begin2, toexpand.end(), expanded);
+
+// replace all remaining (== undefined) identifiers with an integer literal '0'
+ typename token_sequence_type::iterator exp_end = expanded.end();
+ for (typename token_sequence_type::iterator exp_it = expanded.begin();
+ exp_it != exp_end; ++exp_it)
+ {
+ using namespace boost::wave;
+
+ token_id id = token_id(*exp_it);
+ if (IS_CATEGORY(id, IdentifierTokenType) ||
+ IS_CATEGORY(id, KeywordTokenType))
+ {
+ (*exp_it).set_token_id(T_INTLIT);
+ (*exp_it).set_value("0");
+ }
+ }
+
+#if BOOST_WAVE_DUMP_CONDITIONAL_EXPRESSIONS != 0
+ {
+ string_type outstr(boost::wave::util::impl::as_string(toexpand));
+ outstr += "(" + boost::wave::util::impl::as_string(expanded) + ")";
+ BOOST_WAVE_DUMP_CONDITIONAL_EXPRESSIONS_OUT << "#elif " << outstr << std::endl;
+ }
+#endif
+
+// parse the expression and enter the #elif block
+grammars::value_error status = grammars::error_noerror;
+bool if_status = grammars::expression_grammar_gen<result_type>::
+ evaluate(expanded.begin(), expanded.end(), act_pos,
+ ctx.get_if_block_status(), status);
+
+ ctx.get_hooks().evaluated_conditional_expression(toexpand, if_status);
+ if (grammars::error_noerror != status) {
+ // division or other error by zero occurred
+ string_type expression = util::impl::as_string(expanded);
+ if (0 == expression.size())
+ expression = "<empty expression>";
+
+ if (grammars::error_division_by_zero & status) {
+ BOOST_WAVE_THROW(preprocess_exception, division_by_zero,
+ expression.c_str(), act_pos);
+ }
+ if (grammars::error_integer_overflow & status) {
+ // we validly may continue
+ if (!ctx.enter_elif_block(if_status)) {
+ // #elif without matching #if
+ BOOST_WAVE_THROW(preprocess_exception, missing_matching_if,
+ "#elif", act_pos);
+ }
+ BOOST_WAVE_THROW(preprocess_exception, integer_overflow,
+ expression.c_str(), act_pos);
+ return;
+ }
+ if (grammars::error_character_overflow & status) {
+ // we validly may continue
+ if (!ctx.enter_elif_block(if_status)) {
+ // #elif without matching #if
+ BOOST_WAVE_THROW(preprocess_exception, missing_matching_if,
+ "#elif", act_pos);
+ }
+ BOOST_WAVE_THROW(preprocess_exception,
+ character_literal_out_of_range, expression.c_str(), act_pos);
+ return;
+ }
+ }
+
+ if (!ctx.enter_elif_block(if_status)) {
+ // #elif without matching #if
+ BOOST_WAVE_THROW(preprocess_exception, missing_matching_if, "#elif",
+ act_pos);
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// on_illformed(): handles the illegal directive
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ContextT>
+inline void
+pp_iterator_functor<ContextT>::on_illformed(
+ typename result_type::string_type s)
+{
+ BOOST_ASSERT(ctx.get_if_block_status());
+
+ // some messages have more than one newline at the end
+ typename string_type::size_type p = s.find_last_not_of('\n');
+ if (string_type::npos != p)
+ s = s.substr(0, p+1);
+
+ // throw the exception
+ BOOST_WAVE_THROW(preprocess_exception, ill_formed_directive, s.c_str(),
+ act_pos);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// on_line(): handle #line directives
+//
+///////////////////////////////////////////////////////////////////////////////
+
+namespace impl {
+
+ template <typename IteratorT, typename StringT>
+ bool retrieve_line_info (IteratorT first, IteratorT const &last,
+ int &line, StringT &file,
+ boost::wave::preprocess_exception::error_code& error)
+ {
+ using namespace boost::wave;
+ token_id id = token_id(*first);
+ if (T_PP_NUMBER == id || T_INTLIT == id) {
+ // extract line number
+ using namespace std; // some systems have atoi in namespace std
+ line = (unsigned int)atoi((*first).get_value().c_str());
+ if (0 == line)
+ error = preprocess_exception::bad_line_number;
+
+ // re-extract line number with spirit to diagnose overflow
+ using namespace boost::spirit;
+ if (!parse((*first).get_value().c_str(), int_p).full)
+ error = preprocess_exception::bad_line_number;
+
+ // extract file name (if it is given)
+ while (++first != last && IS_CATEGORY(*first, WhiteSpaceTokenType))
+ /**/; // skip whitespace
+
+ if (first != last) {
+ if (T_STRINGLIT != token_id(*first)) {
+ error = preprocess_exception::bad_line_filename;
+ return false;
+ }
+
+ StringT const &file_lit = (*first).get_value();
+
+ if ('L' == file_lit[0]) {
+ error = preprocess_exception::bad_line_filename;
+ return false; // shouldn't be a wide character string
+ }
+
+ file = file_lit.substr(1, file_lit.size()-2);
+
+ // test if there is other junk on this line
+ while (++first != last && IS_CATEGORY(*first, WhiteSpaceTokenType))
+ /**/; // skip whitespace
+ }
+ return first == last;
+ }
+ error = preprocess_exception::bad_line_statement;
+ return false;
+ }
+}
+
+template <typename ContextT>
+inline void
+pp_iterator_functor<ContextT>::on_line(
+ typename parse_tree_type::const_iterator const &begin,
+ typename parse_tree_type::const_iterator const &end)
+{
+ BOOST_ASSERT(ctx.get_if_block_status());
+
+// Try to extract the line number and file name from the given token list
+// directly. If that fails, preprocess the whole token sequence and try again
+// to extract this information.
+token_sequence_type expanded;
+get_token_value<result_type, parse_node_type> get_value;
+
+ typedef typename ref_transform_iterator_generator<
+ get_token_value<result_type, parse_node_type>,
+ typename parse_tree_type::const_iterator
+ >::type const_tree_iterator_t;
+
+const_tree_iterator_t first = make_ref_transform_iterator(begin, get_value);
+const_tree_iterator_t last = make_ref_transform_iterator(end, get_value);
+
+// try to interpret the #line body as a number followed by an optional
+// string literal
+int line = 0;
+preprocess_exception::error_code error = preprocess_exception::no_error;
+string_type file_name;
+
+ if (!impl::retrieve_line_info(first, last, line, file_name, error)) {
+ // preprocess the body of this #line message
+ token_sequence_type toexpand;
+
+ std::copy(first, make_ref_transform_iterator(end, get_value),
+ std::inserter(toexpand, toexpand.end()));
+
+ typename token_sequence_type::iterator begin2 = toexpand.begin();
+ ctx.expand_whole_tokensequence(begin2, toexpand.end(),
+ expanded, false);
+
+ error = preprocess_exception::no_error;
+ if (!impl::retrieve_line_info(expanded.begin(), expanded.end(),
+ line, file_name, error))
+ {
+ BOOST_WAVE_THROW_VAR(preprocess_exception, error,
+ boost::wave::util::impl::as_string(expanded).c_str(), act_pos)
+ }
+ }
+
+// the queues should be empty at this point
+ BOOST_ASSERT(unput_queue.empty());
+ BOOST_ASSERT(pending_queue.empty());
+
+// make sure error recovery starts on the next line
+ must_emit_line_directive = true;
+
+// diagnose possible error in detected line directive
+ if (error != preprocess_exception::no_error) {
+ BOOST_WAVE_THROW_VAR(preprocess_exception, error,
+ boost::wave::util::impl::as_string(expanded).c_str(), act_pos)
+ }
+
+// set new line number/filename only if ok
+ if (!file_name.empty()) { // reuse current file name
+ using boost::wave::util::impl::unescape_lit;
+ act_pos.set_file(unescape_lit(file_name).c_str());
+ }
+ act_pos.set_line(line);
+ iter_ctx->first.set_position(act_pos);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// on_error(): handle #error directives
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ContextT>
+inline void
+pp_iterator_functor<ContextT>::on_error(
+ typename parse_tree_type::const_iterator const &begin,
+ typename parse_tree_type::const_iterator const &end)
+{
+ BOOST_ASSERT(ctx.get_if_block_status());
+
+// preprocess the given sequence into the provided list
+token_sequence_type expanded;
+get_token_value<result_type, parse_node_type> get_value;
+
+typename ref_transform_iterator_generator<
+ get_token_value<result_type, parse_node_type>,
+ typename parse_tree_type::const_iterator
+ >::type first = make_ref_transform_iterator(begin, get_value);
+
+#if BOOST_WAVE_PREPROCESS_ERROR_MESSAGE_BODY != 0
+// preprocess the body of this #error message
+token_sequence_type toexpand;
+
+ std::copy(first, make_ref_transform_iterator(end, get_value),
+ std::inserter(toexpand, toexpand.end()));
+
+ typename token_sequence_type::iterator begin2 = toexpand.begin();
+ ctx.expand_whole_tokensequence(begin2, toexpand.end(), expanded,
+ false);
+#else
+// simply copy the body of this #error message to the issued diagnostic
+// message
+ std::copy(first, make_ref_transform_iterator(end, get_value),
+ std::inserter(expanded, expanded.end()));
+#endif
+
+// report the corresponding error
+ BOOST_WAVE_THROW(preprocess_exception, error_directive,
+ boost::wave::util::impl::as_string(expanded).c_str(), act_pos);
+}
+
+#if BOOST_WAVE_SUPPORT_WARNING_DIRECTIVE != 0
+///////////////////////////////////////////////////////////////////////////////
+//
+// on_warning(): handle #warning directives
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ContextT>
+inline void
+pp_iterator_functor<ContextT>::on_warning(
+ typename parse_tree_type::const_iterator const &begin,
+ typename parse_tree_type::const_iterator const &end)
+{
+ BOOST_ASSERT(ctx.get_if_block_status());
+
+// preprocess the given sequence into the provided list
+token_sequence_type expanded;
+get_token_value<result_type, parse_node_type> get_value;
+
+typename ref_transform_iterator_generator<
+ get_token_value<result_type, parse_node_type>,
+ typename parse_tree_type::const_iterator
+ >::type first = make_ref_transform_iterator(begin, get_value);
+
+#if BOOST_WAVE_PREPROCESS_ERROR_MESSAGE_BODY != 0
+// preprocess the body of this #warning message
+token_sequence_type toexpand;
+
+ std::copy(first, make_ref_transform_iterator(end, get_value),
+ std::inserter(toexpand, toexpand.end()));
+
+ typename token_sequence_type::iterator begin2 = toexpand.begin();
+ ctx.expand_whole_tokensequence(begin2, toexpand.end(), expanded,
+ false);
+#else
+// simply copy the body of this #warning message to the issued diagnostic
+// message
+ std::copy(first, make_ref_transform_iterator(end, get_value),
+ std::inserter(expanded, expanded.end()));
+#endif
+
+// report the corresponding error
+ BOOST_WAVE_THROW(preprocess_exception, warning_directive,
+ boost::wave::util::impl::as_string(expanded).c_str(), act_pos);
+}
+#endif // BOOST_WAVE_SUPPORT_WARNING_DIRECTIVE != 0
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// on_pragma(): handle #pragma directives
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ContextT>
+inline bool
+pp_iterator_functor<ContextT>::on_pragma(
+ typename parse_tree_type::const_iterator const &begin,
+ typename parse_tree_type::const_iterator const &end)
+{
+ using namespace boost::wave;
+
+ BOOST_ASSERT(ctx.get_if_block_status());
+
+// Look at the pragma token sequence and decide, if the first token is STDC
+// (see C99 standard [6.10.6.2]), if it is, the sequence must _not_ be
+// preprocessed.
+token_sequence_type expanded;
+get_token_value<result_type, parse_node_type> get_value;
+
+ typedef typename ref_transform_iterator_generator<
+ get_token_value<result_type, parse_node_type>,
+ typename parse_tree_type::const_iterator
+ >::type const_tree_iterator_t;
+
+const_tree_iterator_t first = make_ref_transform_iterator(begin, get_value);
+const_tree_iterator_t last = make_ref_transform_iterator(end, get_value);
+
+ expanded.push_back(result_type(T_PP_PRAGMA, "#pragma", act_token.get_position()));
+ expanded.push_back(result_type(T_SPACE, " ", act_token.get_position()));
+
+ while (++first != last && IS_CATEGORY(*first, WhiteSpaceTokenType))
+ expanded.push_back(*first); // skip whitespace
+
+ if (first != last) {
+ if (T_IDENTIFIER == token_id(*first) &&
+ boost::wave::need_c99(ctx.get_language()) &&
+ (*first).get_value() == "STDC")
+ {
+ // do _not_ preprocess the token sequence
+ std::copy(first, last, std::inserter(expanded, expanded.end()));
+ }
+ else {
+#if BOOST_WAVE_PREPROCESS_PRAGMA_BODY != 0
+ // preprocess the given tokensequence
+ token_sequence_type toexpand;
+
+ std::copy(first, last, std::inserter(toexpand, toexpand.end()));
+
+ typename token_sequence_type::iterator begin2 = toexpand.begin();
+ ctx.expand_whole_tokensequence(begin2, toexpand.end(),
+ expanded, false);
+#else
+ // do _not_ preprocess the token sequence
+ std::copy(first, last, std::inserter(expanded, expanded.end()));
+#endif
+ }
+ }
+ expanded.push_back(result_type(T_NEWLINE, "\n", act_token.get_position()));
+
+// the queues should be empty at this point
+ BOOST_ASSERT(unput_queue.empty());
+ BOOST_ASSERT(pending_queue.empty());
+
+// try to interpret the expanded #pragma body
+ token_sequence_type pending;
+ if (interpret_pragma(expanded, pending)) {
+ // if there is some replacement text, insert it into the pending queue
+ if (pending.size() > 0)
+ pending_queue.splice(pending_queue.begin(), pending);
+ return true; // this #pragma was successfully recognized
+ }
+
+#if BOOST_WAVE_EMIT_PRAGMA_DIRECTIVES != 0
+// Move the resulting token sequence into the pending_queue, so it will be
+// returned to the caller.
+ pending_queue.splice(pending_queue.begin(), expanded);
+ return false; // return the whole #pragma directive
+#else
+ return true; // skip the #pragma at all
+#endif
+}
+
+template <typename ContextT>
+inline bool
+pp_iterator_functor<ContextT>::interpret_pragma(
+ token_sequence_type const &pragma_body, token_sequence_type &result)
+{
+ using namespace cpplexer;
+
+ typename token_sequence_type::const_iterator end = pragma_body.end();
+ typename token_sequence_type::const_iterator it = pragma_body.begin();
+ for (++it; it != end && IS_CATEGORY(*it, WhiteSpaceTokenType); ++it)
+ /**/; // skip whitespace
+
+ if (it == end) // eof reached
+ return false;
+
+ return boost::wave::util::interpret_pragma(ctx, act_token, it, end, result);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace impl
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// pp_iterator
+//
+// The boost::wave::pp_iterator template is the iterator, through which
+// the resulting preprocessed input stream is accessible.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+template <typename ContextT>
+class pp_iterator
+: public boost::spirit::multi_pass<
+ boost::wave::impl::pp_iterator_functor<ContextT>,
+ boost::wave::util::functor_input
+ >
+{
+public:
+ typedef boost::wave::impl::pp_iterator_functor<ContextT> input_policy_type;
+
+private:
+ typedef
+ boost::spirit::multi_pass<input_policy_type, boost::wave::util::functor_input>
+ base_type;
+ typedef pp_iterator<ContextT> self_type;
+ typedef boost::wave::util::functor_input functor_input_type;
+
+public:
+ pp_iterator()
+ {}
+
+ template <typename IteratorT>
+ pp_iterator(ContextT &ctx, IteratorT const &first, IteratorT const &last,
+ typename ContextT::position_type const &pos)
+ : base_type(input_policy_type(ctx, first, last, pos))
+ {}
+
+ void force_include(char const *path_, bool is_last)
+ {
+ this->get_functor().on_include_helper(path_, path_, false, false);
+ if (is_last) {
+ this->functor_input_type::
+ template inner<input_policy_type>::advance_input();
+ }
+ }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace wave
+} // namespace boost
+
+// the suffix header occurs after all of the code
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_SUFFIX
+#endif
+
+#endif // !defined(CPP_ITERATOR_HPP_175CA88F_7273_43FA_9039_BCF7459E1F29_INCLUDED)
diff --git a/boost/boost/wave/util/cpp_macromap.hpp b/boost/boost/wave/util/cpp_macromap.hpp
new file mode 100644
index 00000000000..b8ca3159073
--- /dev/null
+++ b/boost/boost/wave/util/cpp_macromap.hpp
@@ -0,0 +1,1748 @@
+/*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+
+ Macro expansion engine
+
+ http://www.boost.org/
+
+ Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(CPP_MACROMAP_HPP_CB8F51B0_A3F0_411C_AEF4_6FF631B8B414_INCLUDED)
+#define CPP_MACROMAP_HPP_CB8F51B0_A3F0_411C_AEF4_6FF631B8B414_INCLUDED
+
+#include <cstdlib>
+#include <cstdio>
+#include <ctime>
+
+#include <list>
+#include <map>
+#include <set>
+#include <vector>
+#include <iterator>
+#include <algorithm>
+
+#include <boost/assert.hpp>
+#include <boost/wave/wave_config.hpp>
+#if BOOST_WAVE_SERIALIZATION != 0
+#include <boost/serialization/serialization.hpp>
+#include <boost/serialization/shared_ptr.hpp>
+#endif
+
+#include <boost/filesystem/path.hpp>
+
+#include <boost/wave/util/time_conversion_helper.hpp>
+#include <boost/wave/util/unput_queue_iterator.hpp>
+#include <boost/wave/util/macro_helpers.hpp>
+#include <boost/wave/util/macro_definition.hpp>
+#include <boost/wave/util/symbol_table.hpp>
+#include <boost/wave/util/cpp_macromap_utils.hpp>
+#include <boost/wave/util/cpp_macromap_predef.hpp>
+#include <boost/wave/grammars/cpp_defined_grammar_gen.hpp>
+
+#include <boost/wave/wave_version.hpp>
+#include <boost/wave/cpp_exceptions.hpp>
+#include <boost/wave/language_support.hpp>
+
+// this must occur after all of the includes and before any code appears
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_PREFIX
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace wave { namespace util {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// macromap
+//
+// This class holds all currently defined macros and on demand expands
+// those macro definitions
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ContextT>
+class macromap {
+
+ typedef macromap<ContextT> self_type;
+ typedef typename ContextT::token_type token_type;
+ typedef typename token_type::string_type string_type;
+ typedef typename token_type::position_type position_type;
+
+ typedef typename ContextT::token_sequence_type definition_container_type;
+ typedef std::vector<token_type> parameter_container_type;
+
+ typedef macro_definition<token_type, definition_container_type>
+ macro_definition_type;
+ typedef symbol_table<string_type, macro_definition_type>
+ defined_macros_type;
+ typedef typename defined_macros_type::value_type::second_type
+ macro_ref_type;
+
+public:
+ macromap(ContextT &ctx_)
+ : current_macros(0), defined_macros(new defined_macros_type(1)),
+ main_pos("", 0), ctx(ctx_), macro_uid(1)
+ {
+ current_macros = defined_macros.get();
+ }
+ ~macromap() {}
+
+// Add a new macro to the given macro scope
+ bool add_macro(token_type const &name, bool has_parameters,
+ parameter_container_type &parameters,
+ definition_container_type &definition, bool is_predefined = false,
+ defined_macros_type *scope = 0);
+
+// Tests, whether the given macro name is defined in the given macro scope
+ bool is_defined(string_type const &name,
+ typename defined_macros_type::iterator &it,
+ defined_macros_type *scope = 0) const;
+ template <typename IteratorT>
+ bool is_defined(IteratorT const &begin, IteratorT const &end);
+
+// Get the macro definition for the given macro scope
+ bool get_macro(string_type const &name, bool &has_parameters,
+ bool &is_predefined, position_type &pos, parameter_container_type &parameters,
+ definition_container_type &definition, defined_macros_type *scope = 0);
+
+// Remove a macro name from the given macro scope
+ bool remove_macro(token_type const &token, bool even_predefined = false);
+
+ template <typename IteratorT, typename ContainerT>
+ token_type const &expand_tokensequence(IteratorT &first,
+ IteratorT const &last, ContainerT &pending, ContainerT &expanded,
+ bool expand_operator_defined);
+
+// Expand all macros inside the given token sequence
+ template <typename IteratorT, typename ContainerT>
+ void expand_whole_tokensequence(ContainerT &expanded,
+ IteratorT &first, IteratorT const &last,
+ bool expand_operator_defined);
+
+// Init the predefined macros (add them to the given scope)
+ void init_predefined_macros(char const *fname = "<Unknown>",
+ defined_macros_type *scope = 0, bool at_global_scope = true);
+ void predefine_macro(defined_macros_type *scope, string_type const &name,
+ token_type const &t);
+
+// Init the internal macro symbol namespace
+ void reset_macromap();
+
+ position_type &get_main_pos() { return main_pos; }
+
+protected:
+// Helper functions for expanding all macros in token sequences
+ template <typename IteratorT, typename ContainerT>
+ token_type const &expand_tokensequence_worker(ContainerT &pending,
+ unput_queue_iterator<IteratorT, token_type, ContainerT> &first,
+ unput_queue_iterator<IteratorT, token_type, ContainerT> const &last,
+ bool expand_operator_defined);
+
+// Collect all arguments supplied to a macro invocation
+ template <typename IteratorT, typename ContainerT, typename SizeT>
+ typename std::vector<ContainerT>::size_type collect_arguments (
+ token_type const curr_token, std::vector<ContainerT> &arguments,
+ IteratorT &next, IteratorT const &end, SizeT const &parameter_count);
+
+// Expand a single macro name
+ template <typename IteratorT, typename ContainerT>
+ bool expand_macro(ContainerT &pending, token_type const &name,
+ typename defined_macros_type::iterator it,
+ IteratorT &first, IteratorT const &last, bool expand_operator_defined,
+ defined_macros_type *scope = 0, ContainerT *queue_symbol = 0);
+
+// Expand a predefined macro (__LINE__, __FILE__ and __INCLUDE_LEVEL__)
+ template <typename ContainerT>
+ bool expand_predefined_macro(token_type const &curr_token,
+ ContainerT &expanded);
+
+// Expand a single macro argument
+ template <typename ContainerT>
+ void expand_argument (typename std::vector<ContainerT>::size_type arg,
+ std::vector<ContainerT> &arguments,
+ std::vector<ContainerT> &expanded_args, bool expand_operator_defined,
+ std::vector<bool> &has_expanded_args);
+
+// Expand the replacement list (replaces parameters with arguments)
+ template <typename ContainerT>
+ void expand_replacement_list(
+ macro_definition_type const &macrodefinition,
+ std::vector<ContainerT> &arguments,
+ bool expand_operator_defined, ContainerT &expanded);
+
+// Rescans the replacement list for macro expansion
+ template <typename IteratorT, typename ContainerT>
+ void rescan_replacement_list(token_type const &curr_token,
+ macro_definition_type &macrodef, ContainerT &replacement_list,
+ ContainerT &expanded, bool expand_operator_defined,
+ IteratorT &nfirst, IteratorT const &nlast);
+
+// Resolves the operator defined() and replces the token with "0" or "1"
+ template <typename IteratorT, typename ContainerT>
+ token_type const &resolve_defined(IteratorT &first, IteratorT const &last,
+ ContainerT &expanded);
+
+// Resolve operator _Pragma or the #pragma directive
+ template <typename IteratorT, typename ContainerT>
+ bool resolve_operator_pragma(IteratorT &first,
+ IteratorT const &last, ContainerT &expanded);
+
+// Handle the concatenation operator '##'
+ template <typename ContainerT>
+ void concat_tokensequence(ContainerT &expanded);
+
+ template <typename ContainerT>
+ bool is_valid_concat(string_type new_value,
+ position_type const &pos, ContainerT &rescanned);
+
+#if BOOST_WAVE_SERIALIZATION != 0
+public:
+ BOOST_STATIC_CONSTANT(unsigned int, version = 0x10);
+ BOOST_STATIC_CONSTANT(unsigned int, version_mask = 0x0f);
+
+private:
+ friend class boost::serialization::access;
+ template<typename Archive>
+ void save(Archive &ar, const unsigned int version) const
+ {
+ ar & defined_macros;
+ }
+ template<typename Archive>
+ void load(Archive &ar, const unsigned int loaded_version)
+ {
+ if (version != (loaded_version & ~version_mask)) {
+ BOOST_WAVE_THROW(preprocess_exception, incompatible_config,
+ "cpp_context state version", get_main_pos());
+ }
+ ar & defined_macros;
+ current_macros = defined_macros.get();
+ }
+ BOOST_SERIALIZATION_SPLIT_MEMBER()
+#endif
+
+private:
+ defined_macros_type *current_macros; // current symbol table
+ boost::shared_ptr<defined_macros_type> defined_macros; // global symbol table
+
+ token_type act_token; // current token
+ position_type main_pos; // last token position in the pp_iterator
+ string_type base_name; // the name to be expanded by __BASE_FILE__
+ ContextT &ctx; // context object associated with the macromap
+ long macro_uid;
+};
+///////////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// add_macro(): adds a new macro to the macromap
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ContextT>
+inline bool
+macromap<ContextT>::add_macro(token_type const &name, bool has_parameters,
+ parameter_container_type &parameters, definition_container_type &definition,
+ bool is_predefined, defined_macros_type *scope)
+{
+ if (!is_predefined && impl::is_special_macroname (name.get_value())) {
+ // exclude special macro names
+ BOOST_WAVE_THROW_NAME(macro_handling_exception, illegal_redefinition,
+ name.get_value().c_str(), main_pos, name.get_value().c_str());
+ }
+ if (boost::wave::need_variadics(ctx.get_language()) &&
+ "__VA_ARGS__" == name.get_value())
+ {
+ // can't use __VA_ARGS__ as a macro name
+ BOOST_WAVE_THROW_NAME(macro_handling_exception, bad_define_statement_va_args,
+ name.get_value().c_str(), main_pos, name.get_value().c_str());
+ }
+ if (AltExtTokenType == (token_id(name) & ExtTokenOnlyMask)) {
+ // exclude special operator names
+ BOOST_WAVE_THROW_NAME(macro_handling_exception,
+ illegal_operator_redefinition, name.get_value().c_str(), main_pos,
+ name.get_value().c_str());
+ }
+
+// try to define the new macro
+defined_macros_type *current_scope = scope ? scope : current_macros;
+typename defined_macros_type::iterator it = current_scope->find(name.get_value());
+
+ if (it != current_scope->end()) {
+ // redefinition, should not be different
+ if ((*it).second->is_functionlike != has_parameters ||
+ !impl::parameters_equal((*it).second->macroparameters, parameters) ||
+ !impl::definition_equals((*it).second->macrodefinition, definition))
+ {
+ BOOST_WAVE_THROW_NAME(macro_handling_exception, macro_redefinition,
+ name.get_value().c_str(), main_pos, name.get_value().c_str());
+ }
+ return false;
+ }
+
+// test the validity of the parameter names
+ if (has_parameters) {
+ std::set<typename token_type::string_type> names;
+
+ typedef typename parameter_container_type::iterator
+ parameter_iterator_type;
+ typedef typename std::set<typename token_type::string_type>::iterator
+ name_iterator_type;
+
+ parameter_iterator_type end = parameters.end();
+ for (parameter_iterator_type itp = parameters.begin(); itp != end; ++itp)
+ {
+ name_iterator_type pit = names.find((*itp).get_value());
+
+ if (pit != names.end()) {
+ // duplicate parameter name
+ BOOST_WAVE_THROW_NAME(macro_handling_exception,
+ duplicate_parameter_name, (*pit).c_str(), main_pos,
+ name.get_value().c_str());
+ }
+ names.insert((*itp).get_value());
+ }
+ }
+
+// insert a new macro node
+ std::pair<typename defined_macros_type::iterator, bool> p =
+ current_scope->insert(
+ typename defined_macros_type::value_type(
+ name.get_value(),
+ macro_ref_type(new macro_definition_type(name,
+ has_parameters, is_predefined, ++macro_uid)
+ )
+ )
+ );
+
+ if (!p.second) {
+ BOOST_WAVE_THROW_NAME(macro_handling_exception, macro_insertion_error,
+ name.get_value().c_str(), main_pos, name.get_value().c_str());
+ }
+
+// add the parameters and the definition
+ std::swap((*p.first).second->macroparameters, parameters);
+ std::swap((*p.first).second->macrodefinition, definition);
+
+// call the context supplied preprocessing hook
+ ctx.get_hooks().defined_macro(name, has_parameters,
+ (*p.first).second->macroparameters,
+ (*p.first).second->macrodefinition, is_predefined);
+ return true;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// is_defined(): returns, whether a given macro is already defined
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ContextT>
+inline bool
+macromap<ContextT>::is_defined(typename token_type::string_type const &name,
+ typename defined_macros_type::iterator &it,
+ defined_macros_type *scope) const
+{
+ if (0 == scope) scope = current_macros;
+
+ if ((it = scope->find(name)) != scope->end())
+ return true; // found in symbol table
+
+// quick pre-check
+ if (name.size() < 8 || '_' != name[0] || '_' != name[1])
+ return false; // quick check failed
+
+ return name == "__LINE__" || name == "__FILE__" ||
+ name == "__INCLUDE_LEVEL__";
+}
+
+template <typename ContextT>
+template <typename IteratorT>
+inline bool
+macromap<ContextT>::is_defined(IteratorT const &begin,
+ IteratorT const &end)
+{
+// in normal mode the name under inspection should consist of an identifier
+// only
+token_id id = token_id(*begin);
+
+ if (T_IDENTIFIER != id &&
+ !IS_CATEGORY(id, KeywordTokenType) &&
+ !IS_EXTCATEGORY(id, OperatorTokenType|AltExtTokenType) &&
+ !IS_CATEGORY(id, BoolLiteralTokenType))
+ {
+ BOOST_WAVE_THROW(preprocess_exception, invalid_macroname,
+ impl::get_full_name(begin, end).c_str(), main_pos);
+ }
+
+IteratorT it = begin;
+string_type name ((*it).get_value());
+typename defined_macros_type::iterator cit(current_macros -> find(name));
+
+ if (++it != end) {
+ // there should be only one token as the inspected name
+ BOOST_WAVE_THROW(preprocess_exception, invalid_macroname,
+ impl::get_full_name(begin, end).c_str(), main_pos);
+ }
+ return cit != current_macros -> end();
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Get the macro definition for the given macro scope
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ContextT>
+inline bool
+macromap<ContextT>::get_macro(string_type const &name, bool &has_parameters,
+ bool &is_predefined, position_type &pos,
+ parameter_container_type &parameters,
+ definition_container_type &definition,
+ defined_macros_type *scope)
+{
+ typename defined_macros_type::iterator it;
+ if (!is_defined(name, it, scope))
+ return false;
+
+macro_definition_type &macro_def = *(*it).second.get();
+
+ has_parameters = macro_def.is_functionlike;
+ is_predefined = macro_def.is_predefined;
+ pos = macro_def.macroname.get_position();
+ parameters = macro_def.macroparameters;
+ definition = macro_def.macrodefinition;
+ return true;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// remove_macro(): remove a macro from the macromap
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ContextT>
+inline bool
+macromap<ContextT>::remove_macro(token_type const &token,
+ bool even_predefined)
+{
+ string_type name (token.get_value());
+ typename defined_macros_type::iterator it = current_macros->find(name);
+
+ if (it != current_macros->end()) {
+ if ((*it).second->is_predefined) {
+ if (!even_predefined || impl::is_special_macroname(name)) {
+ BOOST_WAVE_THROW(preprocess_exception, bad_undefine_statement,
+ name.c_str(), main_pos);
+ }
+ }
+ current_macros->erase(it);
+
+ // call the context supplied preprocessing hook function
+ ctx.get_hooks().undefined_macro(token);
+ return true;
+ }
+ else if (impl::is_special_macroname(name)) {
+ BOOST_WAVE_THROW(preprocess_exception, bad_undefine_statement,
+ name.c_str(), main_pos);
+ }
+ return false; // macro was not defined
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// expand_tokensequence
+//
+// This function is a helper function which wraps the given iterator
+// range into corresponding unput_iterator's and calls the main workhorse
+// of the macro expansion engine (the function expand_tokensequence_worker)
+//
+// This is the top level macro expansion function called from the
+// preprocessing iterator component only.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ContextT>
+template <typename IteratorT, typename ContainerT>
+inline typename ContextT::token_type const &
+macromap<ContextT>::expand_tokensequence(IteratorT &first,
+ IteratorT const &last, ContainerT &pending, ContainerT &expanded,
+ bool expand_operator_defined)
+{
+ typedef impl::gen_unput_queue_iterator<IteratorT, token_type, ContainerT>
+ gen_type;
+ typedef typename gen_type::return_type iterator_type;
+
+ iterator_type first_it = gen_type::generate(expanded, first);
+ iterator_type last_it = gen_type::generate(last);
+
+on_exit::assign<IteratorT, iterator_type> on_exit(first, first_it);
+
+ return expand_tokensequence_worker(pending, first_it, last_it,
+ expand_operator_defined);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// expand_tokensequence_worker
+//
+// This function is the main workhorse of the macro expansion engine. It
+// expands as much tokens as needed to identify the next preprocessed
+// token to return to the caller.
+// It returns the next preprocessed token.
+//
+// The iterator 'first' is adjusted accordingly.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ContextT>
+template <typename IteratorT, typename ContainerT>
+inline typename ContextT::token_type const &
+macromap<ContextT>::expand_tokensequence_worker(
+ ContainerT &pending,
+ unput_queue_iterator<IteratorT, token_type, ContainerT> &first,
+ unput_queue_iterator<IteratorT, token_type, ContainerT> const &last,
+ bool expand_operator_defined)
+{
+// if there exist pending tokens (tokens, which are already preprocessed), then
+// return the next one from there
+ if (!pending.empty()) {
+ on_exit::pop_front<definition_container_type> pop_front_token(pending);
+
+ return act_token = pending.front();
+ }
+
+// analyze the next element of the given sequence, if it is an
+// T_IDENTIFIER token, try to replace this as a macro etc.
+ using namespace boost::wave;
+ typedef unput_queue_iterator<IteratorT, token_type, ContainerT> iterator_type;
+
+ if (first != last) {
+ token_id id = token_id(*first);
+
+ // ignore placeholder tokens
+ if (T_PLACEHOLDER == id) {
+ token_type placeholder = *first;
+
+ ++first;
+ if (first == last)
+ return act_token = placeholder;
+ id = token_id(*first);
+ }
+
+ if (T_IDENTIFIER == id || IS_CATEGORY(id, KeywordTokenType) ||
+ IS_EXTCATEGORY(id, OperatorTokenType|AltExtTokenType) ||
+ IS_CATEGORY(id, BoolLiteralTokenType))
+ {
+ // try to replace this identifier as a macro
+ if (expand_operator_defined && (*first).get_value() == "defined") {
+ // resolve operator defined()
+ return resolve_defined(first, last, pending);
+ }
+ else if (boost::wave::need_variadics(ctx.get_language()) &&
+ (*first).get_value() == "_Pragma")
+ {
+ // in C99 mode only: resolve the operator _Pragma
+ token_type curr_token = *first;
+
+ if (!resolve_operator_pragma(first, last, pending) ||
+ pending.size() > 0)
+ {
+ // unknown to us pragma or supplied replacement, return the
+ // next token
+ on_exit::pop_front<definition_container_type> pop_token(pending);
+
+ return act_token = pending.front();
+ }
+
+ // the operator _Pragma() was eaten completely, continue
+ return act_token = token_type(T_PLACEHOLDER, "_",
+ curr_token.get_position());
+ }
+
+ token_type name_token (*first);
+ typename defined_macros_type::iterator it;
+
+ if (is_defined(name_token.get_value(), it)) {
+ // the current token contains an identifier, which is currently
+ // defined as a macro
+ if (expand_macro(pending, name_token, it, first, last,
+ expand_operator_defined))
+ {
+ // the tokens returned by expand_macro should be rescanned
+ // beginning at the last token of the returned replacement list
+ if (first != last) {
+ // splice the last token back into the input queue
+ typename ContainerT::reverse_iterator rit = pending.rbegin();
+
+ first.get_unput_queue().splice(
+ first.get_unput_queue().begin(), pending,
+ (++rit).base(), pending.end());
+ }
+
+ // fall through ...
+ }
+ else if (!pending.empty()) {
+ // return the first token from the pending queue
+ on_exit::pop_front<definition_container_type> pop_queue (pending);
+
+ return act_token = pending.front();
+ }
+ else {
+ // macro expansion reached the eoi
+ return act_token = token_type();
+ }
+
+ // return the next preprocessed token
+ return expand_tokensequence_worker(pending, first, last,
+ expand_operator_defined);
+ }
+// else if (expand_operator_defined) {
+// // in preprocessing conditionals undefined identifiers and keywords
+// // are to be replaced with '0' (see. C++ standard 16.1.4, [cpp.cond])
+// return act_token =
+// token_type(T_INTLIT, "0", (*first++).get_position());
+// }
+ else {
+ act_token = name_token;
+ ++first;
+ return act_token;
+ }
+ }
+ else if (expand_operator_defined && IS_CATEGORY(*first, BoolLiteralTokenType)) {
+ // expanding a constant expression inside #if/#elif, special handling
+ // of 'true' and 'false'
+
+ // all remaining identifiers and keywords, except for true and false,
+ // are replaced with the pp-number 0 (C++ standard 16.1.4, [cpp.cond])
+ return act_token = token_type(T_INTLIT, T_TRUE != id ? "0" : "1",
+ (*first++).get_position());
+ }
+ else {
+ act_token = *first;
+ ++first;
+ return act_token;
+ }
+ }
+ return act_token = token_type(); // eoi
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// collect_arguments(): collect the actual arguments of a macro invocation
+//
+// return the number of successfully detected non-empty arguments
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ContextT>
+template <typename IteratorT, typename ContainerT, typename SizeT>
+inline typename std::vector<ContainerT>::size_type
+macromap<ContextT>::collect_arguments (token_type const curr_token,
+ std::vector<ContainerT> &arguments, IteratorT &next, IteratorT const &end,
+ SizeT const &parameter_count)
+{
+ using namespace boost::wave;
+
+ arguments.push_back(ContainerT());
+
+// collect the actual arguments
+typename std::vector<ContainerT>::size_type count_arguments = 0;
+int nested_parenthesis_level = 1;
+ContainerT *argument = &arguments[0];
+bool was_whitespace = false;
+token_type startof_argument_list = *next;
+
+ while (++next != end && nested_parenthesis_level) {
+ token_id id = token_id(*next);
+
+ if (0 == parameter_count &&
+ !IS_CATEGORY((*next), WhiteSpaceTokenType) && id != T_NEWLINE &&
+ id != T_RIGHTPAREN && id != T_LEFTPAREN)
+ {
+ // there shouldn't be any arguments
+ BOOST_WAVE_THROW(preprocess_exception, too_many_macroarguments,
+ curr_token.get_value().c_str(), main_pos);
+ }
+
+ switch (static_cast<unsigned int>(id)) {
+ case T_LEFTPAREN:
+ ++nested_parenthesis_level;
+ argument->push_back(*next);
+ was_whitespace = false;
+ break;
+
+ case T_RIGHTPAREN:
+ {
+ if (--nested_parenthesis_level >= 1)
+ argument->push_back(*next);
+ else {
+ // found closing parenthesis
+// trim_sequence(argument);
+ if (parameter_count > 0) {
+ if (argument->empty() ||
+ impl::is_whitespace_only(*argument))
+ {
+#if BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS != 0
+ if (boost::wave::need_variadics(ctx.get_language())) {
+ // store a placemarker as the argument
+ argument->push_back(token_type(T_PLACEMARKER, "§",
+ (*next).get_position()));
+ ++count_arguments;
+ }
+#endif
+ }
+ else {
+ ++count_arguments;
+ }
+ }
+ }
+ was_whitespace = false;
+ }
+ break;
+
+ case T_COMMA:
+ if (1 == nested_parenthesis_level) {
+ // next parameter
+// trim_sequence(argument);
+ if (argument->empty() ||
+ impl::is_whitespace_only(*argument))
+ {
+#if BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS != 0
+ if (boost::wave::need_variadics(ctx.get_language())) {
+ // store a placemarker as the argument
+ argument->push_back(token_type(T_PLACEMARKER, "§",
+ (*next).get_position()));
+ ++count_arguments;
+ }
+#endif
+ }
+ else {
+ ++count_arguments;
+ }
+ arguments.push_back(ContainerT()); // add new arg
+ argument = &arguments[arguments.size()-1];
+ }
+ else {
+ // surrounded by parenthesises, so store to current argument
+ argument->push_back(*next);
+ }
+ was_whitespace = false;
+ break;
+
+ case T_SPACE:
+ case T_SPACE2:
+ case T_CCOMMENT:
+ case T_NEWLINE:
+ if (!was_whitespace)
+ argument->push_back(token_type(T_SPACE, " ", (*next).get_position()));
+ was_whitespace = true;
+ break; // skip whitespace
+
+ case T_PLACEHOLDER:
+ break; // ignore placeholder
+
+ default:
+ argument->push_back(*next);
+ was_whitespace = false;
+ break;
+ }
+ }
+
+ if (nested_parenthesis_level >= 1) {
+ // missing ')': improperly terminated macro invocation
+ BOOST_WAVE_THROW(preprocess_exception, improperly_terminated_macro,
+ "missing ')'", main_pos);
+ }
+
+// if there isn't expected any argument and there really wasn't found any,
+// than remove the empty element
+ if (0 == parameter_count && 0 == count_arguments) {
+ BOOST_ASSERT(1 == arguments.size());
+ arguments.clear();
+ }
+ return count_arguments;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// expand_whole_tokensequence
+//
+// fully expands a given token sequence
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ContextT>
+template <typename IteratorT, typename ContainerT>
+inline void
+macromap<ContextT>::expand_whole_tokensequence(ContainerT &expanded,
+ IteratorT &first, IteratorT const &last,
+ bool expand_operator_defined)
+{
+ typedef impl::gen_unput_queue_iterator<IteratorT, token_type, ContainerT>
+ gen_type;
+ typedef typename gen_type::return_type iterator_type;
+
+iterator_type first_it = gen_type::generate(first);
+iterator_type last_it = gen_type::generate(last);
+
+on_exit::assign<IteratorT, iterator_type> on_exit(first, first_it);
+ContainerT pending_queue;
+
+ while (!pending_queue.empty() || first_it != last_it) {
+ token_type t = expand_tokensequence_worker(pending_queue, first_it,
+ last_it, expand_operator_defined);
+
+ expanded.push_back(t);
+ }
+
+// should have returned all expanded tokens
+ BOOST_ASSERT(pending_queue.empty()/* && unput_queue.empty()*/);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// expand_argument
+//
+// fully expands the given argument of a macro call
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ContextT>
+template <typename ContainerT>
+inline void
+macromap<ContextT>::expand_argument (
+ typename std::vector<ContainerT>::size_type arg,
+ std::vector<ContainerT> &arguments, std::vector<ContainerT> &expanded_args,
+ bool expand_operator_defined, std::vector<bool> &has_expanded_args)
+{
+ if (!has_expanded_args[arg]) {
+ // expand the argument only once
+ typedef typename std::vector<ContainerT>::value_type::iterator
+ argument_iterator_type;
+
+ argument_iterator_type begin_it = arguments[arg].begin();
+ argument_iterator_type end_it = arguments[arg].end();
+
+ expand_whole_tokensequence(expanded_args[arg], begin_it, end_it,
+ expand_operator_defined);
+ impl::remove_placeholders(expanded_args[arg]);
+ has_expanded_args[arg] = true;
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// expand_replacement_list
+//
+// fully expands the replacement list of a given macro with the
+// actual arguments/expanded arguments
+// handles the '#' [cpp.stringize] and the '##' [cpp.concat] operator
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ContextT>
+template <typename ContainerT>
+inline void
+macromap<ContextT>::expand_replacement_list(
+ macro_definition_type const &macrodef,
+ std::vector<ContainerT> &arguments, bool expand_operator_defined,
+ ContainerT &expanded)
+{
+ using namespace boost::wave;
+ typedef typename macro_definition_type::const_definition_iterator_t
+ macro_definition_iter_t;
+
+std::vector<ContainerT> expanded_args(arguments.size());
+std::vector<bool> has_expanded_args(arguments.size());
+bool seen_concat = false;
+bool adjacent_concat = false;
+bool adjacent_stringize = false;
+
+ macro_definition_iter_t cend = macrodef.macrodefinition.end();
+ for (macro_definition_iter_t cit = macrodef.macrodefinition.begin();
+ cit != cend; ++cit)
+ {
+ bool use_replaced_arg = true;
+ token_id base_id = BASE_TOKEN(token_id(*cit));
+
+ if (T_POUND_POUND == base_id) {
+ // concatenation operator
+ adjacent_concat = true;
+ seen_concat = true;
+ }
+ else if (T_POUND == base_id) {
+ // stringize operator
+ adjacent_stringize = true;
+ }
+ else {
+ if (adjacent_stringize || adjacent_concat ||
+ T_POUND_POUND == impl::next_token<macro_definition_iter_t>
+ ::peek(cit, cend))
+ {
+ use_replaced_arg = false;
+ }
+ if (adjacent_concat) // spaces after '##' ?
+ adjacent_concat = IS_CATEGORY(*cit, WhiteSpaceTokenType);
+ }
+
+ if (IS_CATEGORY((*cit), ParameterTokenType)) {
+ // copy argument 'i' instead of the parameter token i
+ typename ContainerT::size_type i;
+#if BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS != 0
+ bool is_ellipsis = false;
+
+ if (IS_EXTCATEGORY((*cit), ExtParameterTokenType)) {
+ BOOST_ASSERT(boost::wave::need_variadics(ctx.get_language()));
+ i = token_id(*cit) - T_EXTPARAMETERBASE;
+ is_ellipsis = true;
+ }
+ else
+#endif
+ {
+ i = token_id(*cit) - T_PARAMETERBASE;
+ }
+
+ BOOST_ASSERT(i < arguments.size());
+ if (use_replaced_arg) {
+
+#if BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS != 0
+ if (is_ellipsis) {
+ position_type const &pos = (*cit).get_position();
+
+ BOOST_ASSERT(boost::wave::need_variadics(ctx.get_language()));
+
+ // ensure all variadic arguments to be expanded
+ for (typename vector<ContainerT>::size_type arg = i;
+ arg < expanded_args.size(); ++arg)
+ {
+ expand_argument(arg, arguments, expanded_args,
+ expand_operator_defined, has_expanded_args);
+ }
+ impl::replace_ellipsis(expanded_args, i, expanded, pos);
+ }
+ else
+#endif
+ {
+ // ensure argument i to be expanded
+ expand_argument(i, arguments, expanded_args,
+ expand_operator_defined, has_expanded_args);
+
+ // replace argument
+ ContainerT const &arg = expanded_args[i];
+
+ std::copy(arg.begin(), arg.end(),
+ std::inserter(expanded, expanded.end()));
+ }
+ }
+ else if (adjacent_stringize &&
+ !IS_CATEGORY(*cit, WhiteSpaceTokenType))
+ {
+ // stringize the current argument
+ BOOST_ASSERT(!arguments[i].empty());
+
+ // safe a copy of the first tokens position (not a reference!)
+ position_type pos ((*arguments[i].begin()).get_position());
+
+#if BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS != 0
+ if (is_ellipsis && boost::wave::need_variadics(ctx.get_language())) {
+ impl::trim_sequence_left(arguments[i]);
+ impl::trim_sequence_right(arguments.back());
+ expanded.push_back(token_type(T_STRINGLIT,
+ impl::as_stringlit(arguments, i, pos), pos));
+ }
+ else
+#endif
+ {
+ impl::trim_sequence(arguments[i]);
+ expanded.push_back(token_type(T_STRINGLIT,
+ impl::as_stringlit(arguments[i], pos), pos));
+ }
+ adjacent_stringize = false;
+ }
+ else {
+ // simply copy the original argument (adjacent '##' or '#')
+#if BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS != 0
+ if (is_ellipsis) {
+ position_type const &pos = (*cit).get_position();
+
+ impl::trim_sequence_left(arguments[i]);
+ impl::trim_sequence_right(arguments.back());
+ BOOST_ASSERT(boost::wave::need_variadics(ctx.get_language()));
+ impl::replace_ellipsis(arguments, i, expanded, pos);
+ }
+ else
+#endif
+ {
+ ContainerT &arg = arguments[i];
+
+ impl::trim_sequence(arg);
+ std::copy(arg.begin(), arg.end(),
+ std::inserter(expanded, expanded.end()));
+ }
+ }
+ }
+ else if (!adjacent_stringize || T_POUND != base_id) {
+ // insert the actual replacement token (if it is not the '#' operator)
+ expanded.push_back(*cit);
+ }
+ }
+
+ if (adjacent_stringize) {
+ // error, '#' should not be the last token
+ BOOST_WAVE_THROW(preprocess_exception, ill_formed_operator,
+ "stringize ('#')", main_pos);
+ }
+
+// handle the cpp.concat operator
+ if (seen_concat)
+ concat_tokensequence(expanded);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// rescan_replacement_list
+//
+// As the name implies, this function is used to rescan the replacement list
+// after the first macro substitution phase.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ContextT>
+template <typename IteratorT, typename ContainerT>
+inline void
+macromap<ContextT>::rescan_replacement_list(token_type const &curr_token,
+ macro_definition_type &macro_def, ContainerT &replacement_list,
+ ContainerT &expanded, bool expand_operator_defined,
+ IteratorT &nfirst, IteratorT const &nlast)
+{
+ if (!replacement_list.empty()) {
+#if BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS != 0
+ // remove the placemarkers
+ if (boost::wave::need_variadics(ctx.get_language())) {
+ typename ContainerT::iterator end = replacement_list.end();
+ typename ContainerT::iterator it = replacement_list.begin();
+
+ while (it != end) {
+ using namespace boost::wave;
+ if (T_PLACEMARKER == token_id(*it)) {
+ typename ContainerT::iterator placemarker = it;
+
+ ++it;
+ replacement_list.erase(placemarker);
+ }
+ else {
+ ++it;
+ }
+ }
+ }
+#endif
+
+ // rescan the replacement list, during this rescan the current macro under
+ // expansion isn't available as an expandable macro
+ on_exit::reset<bool> on_exit(macro_def.is_available_for_replacement, false);
+ typename ContainerT::iterator begin_it = replacement_list.begin();
+ typename ContainerT::iterator end_it = replacement_list.end();
+
+ expand_whole_tokensequence(expanded, begin_it, end_it,
+ expand_operator_defined);
+
+ // trim replacement list, leave placeholder tokens untouched
+ impl::trim_replacement_list(expanded);
+ }
+
+ if (expanded.empty()) {
+ // the resulting replacement list should contain at least a placeholder
+ // token
+ expanded.push_back(token_type(T_PLACEHOLDER, "_", curr_token.get_position()));
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// expand_macro(): expands a defined macro
+//
+// This functions tries to expand the macro, to which points the 'first'
+// iterator. The functions eats up more tokens, if the macro to expand is
+// a function-like macro.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ContextT>
+template <typename IteratorT, typename ContainerT>
+inline bool
+macromap<ContextT>::expand_macro(ContainerT &expanded,
+ token_type const &curr_token, typename defined_macros_type::iterator it,
+ IteratorT &first, IteratorT const &last,
+ bool expand_operator_defined, defined_macros_type *scope,
+ ContainerT *queue_symbol)
+{
+ using namespace boost::wave;
+
+ if (0 == scope) scope = current_macros;
+
+ BOOST_ASSERT(T_IDENTIFIER == token_id(curr_token) ||
+ IS_CATEGORY(token_id(curr_token), KeywordTokenType) ||
+ IS_EXTCATEGORY(token_id(curr_token), OperatorTokenType|AltExtTokenType) ||
+ IS_CATEGORY(token_id(curr_token), BoolLiteralTokenType));
+
+ if (it == scope->end()) {
+ ++first; // advance
+
+ // try to expand a predefined macro (__FILE__, __LINE__ or __INCLUDE_LEVEL__)
+ if (expand_predefined_macro(curr_token, expanded))
+ return false;
+
+ // not defined as a macro
+ if (0 != queue_symbol) {
+ expanded.splice(expanded.end(), *queue_symbol);
+ }
+ else {
+ expanded.push_back(curr_token);
+ }
+ return false;
+ }
+
+// ensure the parameters to be replaced with special parameter tokens
+macro_definition_type &macro_def = *(*it).second.get();
+
+ macro_def.replace_parameters();
+
+// test if this macro is currently available for replacement
+ if (!macro_def.is_available_for_replacement) {
+ // this macro is marked as non-replaceable
+ // copy the macro name itself
+ if (0 != queue_symbol) {
+ queue_symbol->push_back(token_type(T_NONREPLACABLE_IDENTIFIER,
+ curr_token.get_value(), curr_token.get_position()));
+ expanded.splice(expanded.end(), *queue_symbol);
+ }
+ else {
+ expanded.push_back(token_type(T_NONREPLACABLE_IDENTIFIER,
+ curr_token.get_value(), curr_token.get_position()));
+ }
+ ++first;
+ return false;
+ }
+
+// try to replace the current identifier as a function-like macro
+ContainerT replacement_list;
+
+ if (T_LEFTPAREN == impl::next_token<IteratorT>::peek(first, last)) {
+ // called as a function-like macro
+ impl::skip_to_token(first, last, T_LEFTPAREN);
+
+ if (macro_def.is_functionlike) {
+ // defined as a function-like macro
+
+ // collect the arguments
+ std::vector<ContainerT> arguments;
+ typename std::vector<ContainerT>::size_type count_args =
+ collect_arguments (curr_token, arguments, first, last,
+ macro_def.macroparameters.size());
+
+ // verify the parameter count
+ if (count_args < macro_def.macroparameters.size() ||
+ arguments.size() < macro_def.macroparameters.size())
+ {
+ if (count_args != arguments.size()) {
+ // must been at least one empty argument in C++ mode
+ BOOST_WAVE_THROW(preprocess_exception,
+ empty_macroarguments, curr_token.get_value().c_str(),
+ main_pos);
+ }
+ else {
+ // too few macro arguments
+ BOOST_WAVE_THROW(preprocess_exception,
+ too_few_macroarguments, curr_token.get_value().c_str(),
+ main_pos);
+ }
+ }
+
+ if (count_args > macro_def.macroparameters.size() ||
+ arguments.size() > macro_def.macroparameters.size())
+ {
+#if BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS != 0
+ if (!macro_def.has_ellipsis)
+#endif
+ {
+ // too many macro arguments
+ BOOST_WAVE_THROW(preprocess_exception, too_many_macroarguments,
+ curr_token.get_value().c_str(), main_pos);
+ }
+ }
+
+ // inject tracing support
+ ctx.get_hooks().expanding_function_like_macro(
+ macro_def.macroname, macro_def.macroparameters,
+ macro_def.macrodefinition, curr_token, arguments);
+
+ // expand the replacement list of this macro
+ expand_replacement_list(macro_def, arguments, expand_operator_defined,
+ replacement_list);
+ }
+ else {
+ // defined as an object-like macro
+ ctx.get_hooks().expanding_object_like_macro(
+ macro_def.macroname, macro_def.macrodefinition, curr_token);
+
+ bool found = false;
+ impl::find_concat_operator concat_tag(found);
+
+ std::remove_copy_if(macro_def.macrodefinition.begin(),
+ macro_def.macrodefinition.end(),
+ std::inserter(replacement_list, replacement_list.end()),
+ concat_tag);
+
+ // handle concatenation operators
+ if (found)
+ concat_tokensequence(replacement_list);
+ }
+ }
+ else {
+ // called as an object like macro
+ if ((*it).second->is_functionlike) {
+ // defined as a function-like macro
+ if (0 != queue_symbol) {
+ queue_symbol->push_back(curr_token);
+ expanded.splice(expanded.end(), *queue_symbol);
+ }
+ else {
+ expanded.push_back(curr_token);
+ }
+ ++first; // skip macro name
+ return false; // no further preprocessing required
+ }
+ else {
+ // defined as an object-like macro (expand it)
+ ctx.get_hooks().expanding_object_like_macro(
+ macro_def.macroname, macro_def.macrodefinition, curr_token);
+
+ bool found = false;
+ impl::find_concat_operator concat_tag(found);
+
+ std::remove_copy_if(macro_def.macrodefinition.begin(),
+ macro_def.macrodefinition.end(),
+ std::inserter(replacement_list, replacement_list.end()),
+ concat_tag);
+
+ // handle concatenation operators
+ if (found)
+ concat_tokensequence(replacement_list);
+
+ ++first; // skip macro name
+ }
+ }
+
+// rescan the replacement list
+ContainerT expanded_list;
+
+ ctx.get_hooks().expanded_macro(replacement_list);
+
+ rescan_replacement_list(curr_token, macro_def, replacement_list,
+ expanded_list, expand_operator_defined, first, last);
+
+ ctx.get_hooks().rescanned_macro(expanded_list);
+ expanded.splice(expanded.end(), expanded_list);
+ return true; // rescan is required
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// If the token under inspection points to a certain predefined macro it will
+// be expanded, otherwise false is returned.
+// (only __FILE__, __LINE__ and __INCLUDE_LEVEL__ macros are expaned here)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ContextT>
+template <typename ContainerT>
+inline bool
+macromap<ContextT>::expand_predefined_macro(token_type const &curr_token,
+ ContainerT &expanded)
+{
+ using namespace boost::wave;
+
+string_type const &value = curr_token.get_value();
+
+ if (value.size() < 8 || '_' != value[0] || '_' != value[1])
+ return false; // quick check failed
+
+ if (value == "__LINE__") {
+ // expand the __LINE__ macro
+ char buffer[22]; // 21 bytes holds all NUL-terminated unsigned 64-bit numbers
+
+ using namespace std; // for some systems sprintf is in namespace std
+ sprintf(buffer, "%d", main_pos.get_line());
+ expanded.push_back(token_type(T_INTLIT, buffer, curr_token.get_position()));
+ return true;
+ }
+ else if (value == "__FILE__") {
+ // expand the __FILE__ macro
+ namespace fs = boost::filesystem;
+
+ std::string file("\"");
+ fs::path filename(main_pos.get_file().c_str(), fs::native);
+
+ using boost::wave::util::impl::escape_lit;
+ file += escape_lit(filename.native_file_string()) + "\"";
+ expanded.push_back(token_type(T_STRINGLIT, file.c_str(),
+ curr_token.get_position()));
+ return true;
+ }
+ else if (value == "__INCLUDE_LEVEL__") {
+ // expand the __INCLUDE_LEVEL__ macro
+ char buffer[22]; // 21 bytes holds all NUL-terminated unsigned 64-bit numbers
+
+ using namespace std; // for some systems sprintf is in namespace std
+ sprintf(buffer, "%d", (int)ctx.get_iteration_depth());
+ expanded.push_back(token_type(T_INTLIT, buffer, curr_token.get_position()));
+ return true;
+ }
+ return false; // no predefined token
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// resolve_defined(): resolve the operator defined() and replace it with the
+// correct T_INTLIT token
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ContextT>
+template <typename IteratorT, typename ContainerT>
+inline typename ContextT::token_type const &
+macromap<ContextT>::resolve_defined(IteratorT &first,
+ IteratorT const &last, ContainerT &pending)
+{
+ using namespace boost::wave;
+ using namespace boost::wave::grammars;
+
+ContainerT result;
+IteratorT start = first;
+boost::spirit::parse_info<IteratorT> hit =
+ defined_grammar_gen<typename ContextT::lexer_type>::
+ parse_operator_defined(start, last, result);
+
+ if (!hit.hit) {
+ string_type msg ("defined(): ");
+ msg = msg + util::impl::as_string<string_type>(first, last);
+ BOOST_WAVE_THROW(preprocess_exception, ill_formed_expression,
+ msg.c_str(), main_pos);
+ }
+ impl::assign_iterator<IteratorT>::do_(first, hit.stop);
+
+// insert a token, which reflects the outcome
+ pending.push_back(token_type(T_INTLIT,
+ is_defined(result.begin(), result.end()) ? "1" : "0",
+ main_pos));
+
+on_exit::pop_front<definition_container_type> pop_front_token(pending);
+
+ return act_token = pending.front();
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// resolve_operator_pragma(): resolve the operator _Pragma() and dispatch to
+// the associated action
+//
+// This function returns true, if the pragma was correctly interpreted.
+// The iterator 'first' is positioned behind the closing ')'.
+// This function returns false, if the _Pragma was not known, the
+// preprocessed token sequence is pushed back to the 'pending' sequence.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ContextT>
+template <typename IteratorT, typename ContainerT>
+inline bool
+macromap<ContextT>::resolve_operator_pragma(IteratorT &first,
+ IteratorT const &last, ContainerT &pending)
+{
+// isolate the parameter of the operator _Pragma
+ token_type pragma_token = *first;
+
+ if (!impl::skip_to_token(first, last, T_LEFTPAREN)) {
+ // misformed operator _Pragma
+ BOOST_WAVE_THROW(preprocess_exception, ill_formed_expression,
+ "operator _Pragma()", pragma_token.get_position());
+ }
+
+ std::vector<ContainerT> arguments;
+ typename std::vector<ContainerT>::size_type count_args =
+ collect_arguments (pragma_token, arguments, first, last, 1);
+
+// verify the parameter count
+ if (pragma_token.get_position().get_file().empty())
+ pragma_token.set_position(act_token.get_position());
+
+ if (1 > count_args || 1 > arguments.size()) {
+ // too few macro arguments
+ BOOST_WAVE_THROW(preprocess_exception, too_few_macroarguments,
+ pragma_token.get_value().c_str(), pragma_token.get_position());
+ }
+ if (1 < count_args || 1 < arguments.size()) {
+ // too many macro arguments
+ BOOST_WAVE_THROW(preprocess_exception, too_many_macroarguments,
+ pragma_token.get_value().c_str(), pragma_token.get_position());
+ }
+
+// preprocess the pragma token body
+ typedef typename std::vector<ContainerT>::value_type::iterator
+ argument_iterator_type;
+
+ ContainerT expanded;
+ argument_iterator_type begin_it = arguments[0].begin();
+ argument_iterator_type end_it = arguments[0].end();
+ expand_whole_tokensequence(expanded, begin_it, end_it, false);
+
+// un-escape the parameter of the operator _Pragma
+ typedef typename token_type::string_type string_type;
+
+ string_type pragma_cmd;
+ typename ContainerT::const_iterator end_exp = expanded.end();
+ for (typename ContainerT::const_iterator it_exp = expanded.begin();
+ it_exp != end_exp; ++it_exp)
+ {
+ if (T_EOF == token_id(*it_exp))
+ break;
+ if (IS_CATEGORY(*it_exp, WhiteSpaceTokenType))
+ continue;
+
+ if (T_STRINGLIT != token_id(*it_exp)) {
+ // ill formed operator _Pragma
+ BOOST_WAVE_THROW(preprocess_exception, ill_formed_pragma_option,
+ "_Pragma", pragma_token.get_position());
+ }
+
+ if (pragma_cmd.size() > 0) {
+ // there should be exactly one string literal (string literals are to
+ // be concatenated at translation phase 6, but _Pragma operators are
+ // to be executed at translation phase 4)
+ BOOST_WAVE_THROW(preprocess_exception, ill_formed_pragma_option,
+ "_Pragma", pragma_token.get_position());
+ }
+
+ // remove the '\"' and concat all given string literal-values
+ string_type token_str = (*it_exp).get_value();
+ pragma_cmd += token_str.substr(1, token_str.size() - 2);
+ }
+ string_type pragma_cmd_unesc = impl::unescape_lit(pragma_cmd);
+
+// tokenize the pragma body
+ typedef typename ContextT::lexer_type lexer_type;
+
+ ContainerT pragma;
+ std::string pragma_cmd_str(pragma_cmd_unesc.c_str());
+ lexer_type it = lexer_type(pragma_cmd_str.begin(), pragma_cmd_str.end(),
+ pragma_token.get_position(), ctx.get_language());
+ lexer_type end = lexer_type();
+ for (/**/; it != end; ++it)
+ pragma.push_back(*it);
+
+// analyze the preprocessed token sequence and eventually dispatch to the
+// associated action
+ if (interpret_pragma(ctx, pragma_token, pragma.begin(), pragma.end(),
+ pending))
+ {
+ return true; // successfully recognized a wave specific pragma
+ }
+
+// unknown pragma token sequence, push it back and return to the caller
+ pending.push_front(token_type(T_SPACE, " ", pragma_token.get_position()));
+ pending.push_front(token_type(T_RIGHTPAREN, ")", pragma_token.get_position()));
+ pending.push_front(token_type(T_STRINGLIT, string_type("\"") + pragma_cmd + "\"",
+ pragma_token.get_position()));
+ pending.push_front(token_type(T_LEFTPAREN, "(", pragma_token.get_position()));
+ pending.push_front(pragma_token);
+ return false;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Test, whether the result of a concat operator is well formed or not.
+//
+// This is done by re-scanning (re-tokenizing) the resulting token sequence,
+// which should give back exactly one token.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ContextT>
+template <typename ContainerT>
+inline bool
+macromap<ContextT>::is_valid_concat(string_type new_value,
+ position_type const &pos, ContainerT &rescanned)
+{
+// re-tokenize the newly generated string
+ typedef typename ContextT::lexer_type lexer_type;
+
+ std::string value_to_test(new_value.c_str());
+
+ boost::wave::language_support lang =
+ boost::wave::enable_prefer_pp_numbers(ctx.get_language());
+ lang = boost::wave::enable_single_line(lang);
+
+ lexer_type it = lexer_type(value_to_test.begin(), value_to_test.end(), pos,
+ lang);
+ lexer_type end = lexer_type();
+ for (/**/; it != end && T_EOF != token_id(*it); ++it)
+ rescanned.push_back(*it);
+
+#if BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS != 0
+ if (boost::wave::need_variadics(ctx.get_language()))
+ return true; // in variadics mode token pasting is well defined
+#endif
+
+// test if the newly generated token sequence contains more than 1 token
+// the second one is the T_EOF token
+// BOOST_ASSERT(T_EOF == token_id(rescanned.back()));
+ return 1 == rescanned.size();
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Handle all occurrences of the concatenation operator '##' inside the given
+// token sequence.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ContextT>
+template <typename ContainerT>
+inline void
+macromap<ContextT>::concat_tokensequence(ContainerT &expanded)
+{
+ using namespace boost::wave;
+ typedef typename ContainerT::iterator iterator_type;
+
+ iterator_type end = expanded.end();
+ iterator_type prev = end;
+ for (iterator_type it = expanded.begin(); it != end; /**/)
+ {
+ if (T_POUND_POUND == BASE_TOKEN(token_id(*it))) {
+ iterator_type next = it;
+
+ ++next;
+ if (prev == end || next == end) {
+ // error, '##' should be in between two tokens
+ BOOST_WAVE_THROW(preprocess_exception, ill_formed_operator,
+ "concat ('##')", main_pos);
+ }
+
+ // replace prev##next with the concatenated value, skip whitespace
+ // before and after the '##' operator
+ while (IS_CATEGORY(*next, WhiteSpaceTokenType)) {
+ ++next;
+ if (next == end) {
+ // error, '##' should be in between two tokens
+ BOOST_WAVE_THROW(preprocess_exception, ill_formed_operator,
+ "concat ('##')", main_pos);
+ }
+ }
+
+#if BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS != 0
+ if (boost::wave::need_variadics(ctx.get_language())) {
+ if (T_PLACEMARKER == token_id(*next)) {
+ // remove the '##' and the next tokens from the sequence
+ iterator_type first_to_delete = prev;
+
+ expanded.erase(++first_to_delete, ++next);
+ it = next;
+ continue;
+ }
+ else if (T_PLACEMARKER == token_id(*prev)) {
+ // remove the '##' and the next tokens from the sequence
+ iterator_type first_to_delete = prev;
+
+ *prev = *next;
+ expanded.erase(++first_to_delete, ++next);
+ it = next;
+ continue;
+ }
+ }
+#endif // BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS != 0
+
+ // test if the concat operator has to concatenate two unrelated
+ // tokens i.e. the result yields more then one token
+ string_type concat_result;
+ ContainerT rescanned;
+
+ concat_result = ((*prev).get_value() + (*next).get_value());
+
+ // analyze the validity of the concatenation result
+ if (!is_valid_concat(concat_result, (*prev).get_position(),
+ rescanned) &&
+ !IS_CATEGORY(*prev, WhiteSpaceTokenType) &&
+ !IS_CATEGORY(*next, WhiteSpaceTokenType))
+ {
+ string_type error_string("\"");
+
+ error_string += (*prev).get_value();
+ error_string += "\" and \"";
+ error_string += (*next).get_value();
+ error_string += "\"";
+ BOOST_WAVE_THROW(preprocess_exception, invalid_concat,
+ error_string.c_str(), main_pos);
+ }
+
+#if BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS != 0
+ if (boost::wave::need_variadics(ctx.get_language())) {
+ // remove the prev, '##' and the next tokens from the sequence
+ expanded.erase(prev, ++next); // remove not needed tokens
+
+ // some stl implementations clear() the container if we erased all
+ // the elements, which orphans all iterators. we re-initialize these
+ // here
+ if (expanded.empty())
+ end = next = expanded.end();
+
+ // replace the old token (pointed to by *prev) with the re-tokenized
+ // sequence
+ expanded.splice(next, rescanned);
+
+ // the last token of the inserted sequence is the new previous
+ prev = next;
+ if (next != expanded.end())
+ --prev;
+ }
+ else
+#endif // BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS != 0
+ {
+ // we leave the token_id unchanged, but unmark the token as
+ // disabled, if appropriate
+ (*prev).set_value(concat_result);
+ if (T_NONREPLACABLE_IDENTIFIER == token_id(*prev))
+ (*prev).set_token_id(T_IDENTIFIER);
+
+ // remove the '##' and the next tokens from the sequence
+ iterator_type first_to_delete = prev;
+
+ expanded.erase(++first_to_delete, ++next);
+ }
+ it = next;
+ continue;
+ }
+
+ // save last non-whitespace token position
+ if (!IS_CATEGORY(*it, WhiteSpaceTokenType))
+ prev = it;
+
+ ++it; // next token, please
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// predefined_macro(): predefine a single macro
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ContextT>
+inline void
+macromap<ContextT>::predefine_macro(defined_macros_type *scope,
+ string_type const &name, token_type const &t)
+{
+definition_container_type macrodefinition;
+std::vector<token_type> param;
+
+ macrodefinition.push_back(t);
+ add_macro(token_type(T_IDENTIFIER, name, t.get_position()),
+ false, param, macrodefinition, true, scope);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// init_predefined_macros(): init the predefined macros
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ContextT>
+inline void
+macromap<ContextT>::init_predefined_macros(char const *fname,
+ defined_macros_type *scope, bool at_global_scope)
+{
+ using namespace predefined_macros;
+
+// if no scope is given, use the current one
+defined_macros_type *current_scope = scope ? scope : current_macros;
+
+// first, add the static macros
+position_type pos("<built-in>");
+
+#if BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS != 0
+ if (boost::wave::need_c99(ctx.get_language())) {
+ // define C99 specifics
+ for (int i = 0; 0 != static_data_c99(i).name; ++i) {
+ predefine_macro(current_scope, static_data_c99(i).name,
+ token_type(static_data_c99(i).token_id,
+ static_data_c99(i).value, pos));
+ }
+ }
+ else
+#endif
+ {
+ // define C++ specifics
+ for (int i = 0; 0 != static_data_cpp(i).name; ++i) {
+ predefine_macro(current_scope, static_data_cpp(i).name,
+ token_type(static_data_cpp(i).token_id,
+ static_data_cpp(i).value, pos));
+ }
+
+#if BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS != 0
+ // define __WAVE_HAS_VARIADICS__, if appropriate
+ if (boost::wave::need_variadics(ctx.get_language())) {
+ predefine_macro(current_scope, "__WAVE_HAS_VARIADICS__",
+ token_type(T_INTLIT, "1", pos));
+ }
+#endif
+ }
+
+// predefine the __BASE_FILE__ macro which contains the main file name
+ namespace fs = boost::filesystem;
+ if (string_type(fname) != "<Unknown>") {
+ fs::path filename(fname, fs::native);
+
+ using boost::wave::util::impl::escape_lit;
+ predefine_macro(current_scope, "__BASE_FILE__",
+ token_type(T_STRINGLIT, string_type("\"") +
+ escape_lit(filename.native_file_string()).c_str() + "\"", pos));
+ base_name = fname;
+ }
+ else if (!base_name.empty()) {
+ fs::path filename(base_name.c_str(), fs::native);
+
+ using boost::wave::util::impl::escape_lit;
+ predefine_macro(current_scope, "__BASE_FILE__",
+ token_type(T_STRINGLIT, string_type("\"") +
+ escape_lit(filename.native_file_string()).c_str() + "\"", pos));
+ }
+
+// now add the dynamic macros
+ for (int j = 0; 0 != dynamic_data(j).name; ++j) {
+ predefine_macro(current_scope, dynamic_data(j).name,
+ token_type(dynamic_data(j).token_id,
+ dynamic_data(j).generator(false), pos));
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// reset_macromap(): initialize the internal macro symbol namespace
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ContextT>
+inline void
+macromap<ContextT>::reset_macromap()
+{
+ current_macros->clear();
+ predefined_macros::get_time(true);
+ predefined_macros::get_date(true);
+ act_token = token_type();
+}
+
+///////////////////////////////////////////////////////////////////////////////
+}}} // namespace boost::wave::util
+
+#if BOOST_WAVE_SERIALIZATION != 0
+namespace boost { namespace serialization {
+
+template<typename ContextT>
+struct version<boost::wave::util::macromap<ContextT> >
+{
+ typedef boost::wave::util::macromap<ContextT> target_type;
+ typedef mpl::int_<target_type::version> type;
+ typedef mpl::integral_c_tag tag;
+ BOOST_STATIC_CONSTANT(unsigned int, value = version::type::value);
+};
+
+}} // namespace boost::serialization
+#endif
+
+// the suffix header occurs after all of the code
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_SUFFIX
+#endif
+
+#endif // !defined(CPP_MACROMAP_HPP_CB8F51B0_A3F0_411C_AEF4_6FF631B8B414_INCLUDED)
diff --git a/boost/boost/wave/util/cpp_macromap_predef.hpp b/boost/boost/wave/util/cpp_macromap_predef.hpp
new file mode 100644
index 00000000000..283c29954b2
--- /dev/null
+++ b/boost/boost/wave/util/cpp_macromap_predef.hpp
@@ -0,0 +1,283 @@
+/*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+
+ Definition of the predefined macros
+
+ http://www.boost.org/
+
+ Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(CPP_MACROMAP_PREDEF_HPP_HK041119)
+#define CPP_MACROMAP_PREDEF_HPP_HK041119
+
+#include <cstdio>
+#include <boost/assert.hpp>
+
+#include <boost/wave/wave_config.hpp>
+#include <boost/wave/wave_config_constant.hpp>
+#include <boost/wave/token_ids.hpp>
+
+// this must occur after all of the includes and before any code appears
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_PREFIX
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This file contains the definition of functions needed for the management
+// of static and dynamic predefined macros, such as __DATE__, __TIME__ etc.
+//
+// Note: __FILE__, __LINE__ and __INCLUDE_LEVEL__ are handled in the file
+// cpp_macromap.hpp.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace wave {
+namespace util {
+
+namespace predefined_macros {
+
+// list of static predefined macros
+ struct static_macros {
+ char const *name;
+ boost::wave::token_id token_id;
+ char const *value;
+ };
+
+// C++ mode
+ inline static_macros const &
+ static_data_cpp(std::size_t i)
+ {
+ static static_macros data[] = {
+ { "__STDC__", T_INTLIT, "1" },
+ { "__cplusplus", T_INTLIT, "199711L" },
+ { 0, T_EOF, 0 }
+ };
+ BOOST_ASSERT(i < sizeof(data)/sizeof(data[0]));
+ return data[i];
+ }
+
+#if BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS != 0
+// C99 mode
+ inline static_macros const &
+ static_data_c99(std::size_t i)
+ {
+ static static_macros data[] = {
+ { "__STDC__", T_INTLIT, "1" },
+ { "__STDC_VERSION__", T_INTLIT, "199901L" },
+ { "__STDC_HOSTED__", T_INTLIT, "0" },
+ { "__WAVE_HAS_VARIADICS__", T_INTLIT, "1" },
+ { 0, T_EOF, 0 }
+ };
+ BOOST_ASSERT(i < sizeof(data)/sizeof(data[0]));
+ return data[i];
+ }
+#endif
+
+// list of dynamic predefined macros
+ typedef char const * (* get_dynamic_value)(bool);
+
+// __DATE__
+ inline
+ char const *get_date(bool reset)
+ {
+ static std::string datestr;
+ static const char *const monthnames[] = {
+ "Jan", "Feb", "Mar", "Apr", "May", "Jun",
+ "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
+ };
+
+ if (reset) {
+ datestr.erase();
+ }
+ else {
+ // for some systems sprintf, time_t etc. is in namespace std
+ using namespace std;
+
+ time_t tt = time(0);
+ struct tm *tb = 0;
+
+ if (tt != (time_t)-1) {
+ char buffer[sizeof("\"Oct 11 1347\"")+1];
+
+ tb = localtime (&tt);
+ sprintf (buffer, "\"%s %2d %4d\"",
+ monthnames[tb->tm_mon], tb->tm_mday, tb->tm_year + 1900);
+ datestr = buffer;
+ }
+ else {
+ datestr = "\"??? ?? ????\"";
+ }
+ }
+ return datestr.c_str();
+ }
+
+// __TIME__
+ inline
+ char const *get_time(bool reset)
+ {
+ static std::string timestr;
+
+ if (reset) {
+ timestr.erase();
+ }
+ else {
+ // for some systems sprintf, time_t etc. is in namespace std
+ using namespace std;
+
+ time_t tt = time(0);
+ struct tm *tb = 0;
+
+ if (tt != (time_t)-1) {
+ char buffer[sizeof("\"12:34:56\"")+1];
+
+ tb = localtime (&tt);
+ sprintf (buffer, "\"%02d:%02d:%02d\"", tb->tm_hour,
+ tb->tm_min, tb->tm_sec);
+ timestr = buffer;
+ }
+ else {
+ timestr = "\"??:??:??\"";
+ }
+ }
+ return timestr.c_str();
+ }
+
+// __SPIRIT_PP__/__WAVE__
+ inline
+ char const *get_version(bool /*reset*/)
+ {
+ static std::string versionstr;
+ char buffer[sizeof("0x0000")+1];
+
+ using namespace std; // for some systems sprintf is in namespace std
+ sprintf(buffer, "0x%02d%1d%1d", BOOST_WAVE_VERSION_MAJOR,
+ BOOST_WAVE_VERSION_MINOR, BOOST_WAVE_VERSION_SUBMINOR);
+ versionstr = buffer;
+ return versionstr.c_str();
+ }
+
+// __SPIRIT_PP_VERSION__/__WAVE_VERSION__
+ boost::wave::util::time_conversion_helper const
+ compilation_time(__DATE__ " " __TIME__);
+
+ inline
+ char const *get_fullversion(bool /*reset*/)
+ {
+ static std::string versionstr;
+ char buffer[sizeof("0x00000000")+1];
+
+ // for some systems sprintf, time_t etc. is in namespace std
+ using namespace std;
+
+ // calculate the number of days since Dec 13 2001
+ // (the day the Wave project was started)
+ tm first_day;
+
+ using namespace std; // for some systems memset is in namespace std
+ memset (&first_day, 0, sizeof(tm));
+ first_day.tm_mon = 11; // Dec
+ first_day.tm_mday = 13; // 13
+ first_day.tm_year = 101; // 2001
+
+ long seconds = long(difftime(compilation_time.get_time(),
+ mktime(&first_day)));
+
+ sprintf(buffer, "0x%02d%1d%1d%04ld", BOOST_WAVE_VERSION_MAJOR,
+ BOOST_WAVE_VERSION_MINOR, BOOST_WAVE_VERSION_SUBMINOR,
+ seconds/(3600*24));
+ versionstr = buffer;
+ return versionstr.c_str();
+ }
+
+// __SPIRIT_PP_VERSION_STR__/__WAVE_VERSION_STR__
+ inline
+ char const *get_versionstr(bool /*reset*/)
+ {
+ using namespace std; // for some systems memset is in namespace std
+
+ static std::string versionstr;
+ char buffer[sizeof("\"00.00.00.0000 \"")+sizeof(BOOST_PLATFORM)+sizeof(BOOST_COMPILER)+4];
+
+ // for some systems sprintf, time_t etc. is in namespace std
+ using namespace std;
+
+ // calculate the number of days since Dec 13 2001
+ // (the day the Wave project was started)
+ tm first_day;
+
+ memset (&first_day, 0, sizeof(tm));
+ first_day.tm_mon = 11; // Dec
+ first_day.tm_mday = 13; // 13
+ first_day.tm_year = 101; // 2001
+
+ long seconds = long(difftime(compilation_time.get_time(),
+ mktime(&first_day)));
+
+ sprintf(buffer, "\"%d.%d.%d.%ld [%s/%s]\"", BOOST_WAVE_VERSION_MAJOR,
+ BOOST_WAVE_VERSION_MINOR, BOOST_WAVE_VERSION_SUBMINOR,
+ seconds/(3600*24), BOOST_PLATFORM, BOOST_COMPILER);
+ versionstr = buffer;
+ return versionstr.c_str();
+ }
+
+// __WAVE_CONFIG__
+ inline
+ char const *get_config(bool /*reset*/)
+ {
+ using namespace std; // for some systems memset is in namespace std
+
+ static std::string configstr;
+ char buffer[sizeof("0x00000000")+1];
+
+ // for some systems sprintf is in namespace std
+ using namespace std;
+
+ sprintf(buffer, "0x%08x", BOOST_WAVE_CONFIG);
+ configstr = buffer;
+ return configstr.c_str();
+ }
+
+ struct dynamic_macros {
+ char const *name;
+ boost::wave::token_id token_id;
+ get_dynamic_value generator;
+ };
+
+ inline dynamic_macros const &
+ dynamic_data(std::size_t i)
+ {
+ static dynamic_macros data[] = {
+ { "__DATE__", T_STRINGLIT, get_date },
+ { "__TIME__", T_STRINGLIT, get_time },
+ { "__SPIRIT_PP__", T_INTLIT, get_version },
+ { "__SPIRIT_PP_VERSION__", T_INTLIT, get_fullversion },
+ { "__SPIRIT_PP_VERSION_STR__", T_STRINGLIT, get_versionstr },
+ { "__WAVE__", T_INTLIT, get_version },
+ { "__WAVE_VERSION__", T_INTLIT, get_fullversion },
+ { "__WAVE_VERSION_STR__", T_STRINGLIT, get_versionstr },
+ { "__WAVE_CONFIG__", T_INTLIT, get_config },
+ { 0, T_EOF, 0 }
+ };
+ BOOST_ASSERT(i < sizeof(data)/sizeof(data[0]));
+ return data[i];
+ }
+
+} // namespace predefined_macros
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace util
+} // namespace wave
+} // namespace boost
+
+// the suffix header occurs after all of the code
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_SUFFIX
+#endif
+
+#endif // !defined(CPP_MACROMAP_PREDEF_HPP_HK041119)
diff --git a/boost/boost/wave/util/cpp_macromap_utils.hpp b/boost/boost/wave/util/cpp_macromap_utils.hpp
new file mode 100644
index 00000000000..aabe9d27a53
--- /dev/null
+++ b/boost/boost/wave/util/cpp_macromap_utils.hpp
@@ -0,0 +1,537 @@
+/*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+
+ Token sequence analysis and transformation helper functions
+
+ http://www.boost.org/
+
+ Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(CPP_MACROMAP_UTIL_HPP_HK041119)
+#define CPP_MACROMAP_UTIL_HPP_HK041119
+
+#include <boost/assert.hpp>
+
+#include <boost/wave/wave_config.hpp>
+#include <boost/wave/token_ids.hpp>
+
+// this must occur after all of the includes and before any code appears
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_PREFIX
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This file contains the definition of several token sequence analyse
+// and transformation utility functions needed during macro handling.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace wave {
+namespace util {
+
+///////////////////////////////////////////////////////////////////////////////
+namespace on_exit {
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // On destruction pop the first element of the list given as the argument
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename ContainerT>
+ class pop_front {
+ public:
+ pop_front(ContainerT &list_) : list(list_) {}
+ ~pop_front() { list.pop_front(); }
+
+ private:
+ ContainerT &list;
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // Append a given list to the list given as argument
+ // On destruction pop the first element of the list given as argument
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename ContainerT>
+ class splice_pop_front {
+ public:
+ splice_pop_front(ContainerT &list_, ContainerT &queue)
+ : list(list_)
+ {
+ list.splice(list.end(), queue);
+ }
+ ~splice_pop_front() { list.pop_front(); }
+
+ private:
+ ContainerT &list;
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // On destruction reset a referenced value to its initial state
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename TypeT>
+ class reset {
+ public:
+ reset(TypeT &target_value_, TypeT new_value)
+ : target_value(target_value_), old_value(target_value_)
+ {
+ target_value_ = new_value;
+ }
+ ~reset() { target_value = old_value; }
+
+ private:
+ TypeT &target_value;
+ TypeT old_value;
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // On destruction assign the given iterator back
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename IteratorT, typename UnputIteratorT>
+ class assign {
+ public:
+ assign(IteratorT &it_, UnputIteratorT const &uit_)
+ : it(it_), uit(uit_) {}
+ ~assign() { it = uit.base(); }
+
+ private:
+ IteratorT &it;
+ UnputIteratorT const &uit;
+ };
+
+ template <typename IteratorT>
+ class assign<IteratorT, IteratorT> {
+ public:
+ assign(IteratorT &it_, IteratorT const &uit_)
+ : it(it_), uit(uit_) {}
+ ~assign() { it = uit; }
+
+ private:
+ IteratorT &it;
+ IteratorT const &uit;
+ };
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace on_exit
+
+///////////////////////////////////////////////////////////////////////////////
+namespace impl {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Test, whether a given identifier resolves to a predefined name
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename StringT>
+inline bool
+is_special_macroname (StringT const &name)
+{
+ if (name.size() < 7)
+ return false;
+
+ if ("defined" == name)
+ return true;
+
+ if ('_' == name[0] && '_' == name[1]) {
+ StringT str = name.substr(2);
+
+ if (str == "cplusplus" || str == "STDC__" ||
+ str == "TIME__" || str == "DATE__" ||
+ str == "LINE__" || str == "FILE__" ||
+ str == "INCLUDE_LEVEL__")
+ {
+ return true;
+ }
+ }
+ return false;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Test, whether a given identifier resolves to a operator name
+//
+///////////////////////////////////////////////////////////////////////////////
+//template <typename StringT>
+//inline bool
+//is_operator_macroname (StringT const &name)
+//{
+// if (name.size() < 2 || name.size() > 6)
+// return false;
+//
+// if (str == "and" || str == "and_eq" ||
+// str == "bitand" || str == "bitor" ||
+// str == "compl" ||
+// str == "not" || str == "not_eq" ||
+// str == "or" || str == "or_eq" ||
+// str == "xor" || str == "xor_eq")
+// {
+// return true;
+// }
+// return false;
+//}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Test, whether two tokens are to be considered equal (different sequences
+// of whitespace are considered to be equal)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename TokenT>
+inline bool
+token_equals(TokenT const &left, TokenT const &right)
+{
+ using namespace boost::wave;
+
+#if BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS != 0
+ if (T_PARAMETERBASE == token_id(left) ||
+ T_EXTPARAMETERBASE == token_id(left))
+#else
+ if (T_PARAMETERBASE == token_id(left))
+#endif
+ {
+ // if the existing token is of type T_PARAMETERBASE, then the right token
+ // must be of type T_IDENTIFIER or a keyword
+ token_id id = token_id(right);
+
+ return (T_IDENTIFIER == id ||
+ IS_CATEGORY(id, KeywordTokenType) ||
+ IS_EXTCATEGORY(id, OperatorTokenType|AltExtTokenType) ||
+ IS_CATEGORY(id, BoolLiteralTokenType)) &&
+ left.get_value() == right.get_value();
+ }
+
+ // if the left token has whitespace, the value is irrelevant
+ return token_id(left) == token_id(right) && (
+ IS_CATEGORY(left, WhiteSpaceTokenType) ||
+ left.get_value() == right.get_value()
+ );
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Tests, whether two macro definitions are equal
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ContainerT>
+inline bool
+definition_equals(ContainerT const &definition,
+ ContainerT const &new_definition)
+{
+ typedef typename ContainerT::const_iterator const_iterator_type;
+
+const_iterator_type first1 = definition.begin();
+const_iterator_type last1 = definition.end();
+const_iterator_type first2 = new_definition.begin();
+const_iterator_type last2 = new_definition.end();
+
+ while (first1 != last1 && first2 != last2 && token_equals(*first1, *first2))
+ {
+ // skip whitespace, if both sequences have a whitespace next
+ token_id id1 = next_token<const_iterator_type>::peek(first1, last1, false);
+ token_id id2 = next_token<const_iterator_type>::peek(first2, last2, false);
+
+ if (IS_CATEGORY(id1, WhiteSpaceTokenType) &&
+ IS_CATEGORY(id2, WhiteSpaceTokenType))
+ {
+ // all consecutive whitespace tokens count as one whitespace
+ // adjust first1 and first2 accordingly
+ skip_whitespace(first1, last1);
+ skip_whitespace(first2, last2);
+ }
+ else if (!IS_CATEGORY(id1, WhiteSpaceTokenType) &&
+ !IS_CATEGORY(id2, WhiteSpaceTokenType))
+ {
+ ++first1;
+ ++first2;
+ }
+ else {
+ // the sequences differ
+ break;
+ }
+ }
+ return (first1 == last1 && first2 == last2) ? true : false;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Tests, whether two given sets of macro parameters are equal
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ContainerT>
+inline bool
+parameters_equal(ContainerT const &parameters, ContainerT const &new_parameters)
+{
+ if (parameters.size() != new_parameters.size())
+ return false; // different parameter count
+
+ typedef typename ContainerT::const_iterator const_iterator_type;
+
+const_iterator_type first1 = parameters.begin();
+const_iterator_type last1 = parameters.end();
+const_iterator_type first2 = new_parameters.begin();
+const_iterator_type last2 = new_parameters.end();
+
+ while (first1 != last1 && first2 != last2) {
+ // parameters are different, if the corresponding tokens are different
+ using namespace boost::wave;
+ if (token_id(*first1) != token_id(*first2) ||
+ (*first1).get_value() != (*first2).get_value())
+ {
+ break;
+ }
+ ++first1;
+ ++first2;
+ }
+ return (first1 == last1 && first2 == last2) ? true : false;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Strip leading and trailing whitespace from the given token sequence
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ContainerT>
+inline void
+trim_replacement_list (ContainerT &replacement_list)
+{
+ using namespace boost::wave;
+
+// strip leading whitespace
+ if (replacement_list.size() > 0) {
+ typename ContainerT::iterator end = replacement_list.end();
+ typename ContainerT::iterator it = replacement_list.begin();
+
+ while (it != end && IS_CATEGORY(*it, WhiteSpaceTokenType)) {
+ if (T_PLACEHOLDER != token_id(*it)) {
+ typename ContainerT::iterator next = it;
+ ++next;
+ replacement_list.erase(it);
+ it = next;
+ }
+ else {
+ ++it;
+ }
+ }
+ }
+
+// strip trailing whitespace
+ if (replacement_list.size() > 0) {
+ typename ContainerT::reverse_iterator rend = replacement_list.rend();
+ typename ContainerT::reverse_iterator rit = replacement_list.rbegin();
+
+ while (rit != rend && IS_CATEGORY(*rit, WhiteSpaceTokenType))
+ ++rit;
+
+ typename ContainerT::iterator end = replacement_list.end();
+ typename ContainerT::iterator it = rit.base();
+
+ while (it != end && IS_CATEGORY(*it, WhiteSpaceTokenType)) {
+ if (T_PLACEHOLDER != token_id(*it)) {
+ typename ContainerT::iterator next = it;
+ ++next;
+ replacement_list.erase(it);
+ it = next;
+ }
+ else {
+ ++it;
+ }
+ }
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Remove all placeholder tokens from the given token sequence
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ContainerT>
+inline void
+remove_placeholders (ContainerT &replacement_list)
+{
+ using namespace boost::wave;
+
+// strip leading whitespace
+ if (replacement_list.size() > 0) {
+ typename ContainerT::iterator end = replacement_list.end();
+ typename ContainerT::iterator it = replacement_list.begin();
+
+ while (it != end) {
+ if (T_PLACEHOLDER == token_id(*it)) {
+ typename ContainerT::iterator next = it;
+ ++next;
+ replacement_list.erase(it);
+ it = next;
+ }
+ else {
+ ++it;
+ }
+ }
+
+ // remove all 'new' leading and trailing whitespace
+ trim_replacement_list(replacement_list);
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Remove all whitespace tokens on the left side of the given token sequence
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ContainerT>
+inline void
+trim_sequence_left (ContainerT &argument)
+{
+ using namespace boost::wave;
+
+// strip leading whitespace (should be only one token)
+ if (argument.size() > 0 &&
+ IS_CATEGORY(argument.front(), WhiteSpaceTokenType))
+ {
+ argument.pop_front();
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Remove all whitespace tokens on the right side of the given token sequence
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ContainerT>
+inline void
+trim_sequence_right (ContainerT &argument)
+{
+ using namespace boost::wave;
+
+// strip trailing whitespace (should be only one token)
+ if (argument.size() > 0 &&
+ IS_CATEGORY(argument.back(), WhiteSpaceTokenType))
+ {
+ argument.pop_back();
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Remove all whitespace tokens on the left and right sides of the given token
+// sequence
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ContainerT>
+inline void
+trim_sequence (ContainerT &argument)
+{
+ trim_sequence_left(argument);
+ trim_sequence_right(argument);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Tests, whether the given token sequence consists out of whitespace only
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ContainerT>
+inline bool
+is_whitespace_only (ContainerT const &argument)
+{
+ using namespace cpplexer;
+
+ typename ContainerT::const_iterator end = argument.end();
+ for (typename ContainerT::const_iterator it = argument.begin();
+ it != end; ++it)
+ {
+ if (!IS_CATEGORY(*it, WhiteSpaceTokenType))
+ return false;
+ }
+ return true;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Skip forward to a given token
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename IteratorT>
+inline bool
+skip_to_token(IteratorT &it, IteratorT const &end, token_id id)
+{
+ using namespace boost::wave;
+ if (token_id(*it) == id)
+ return true;
+ if (++it == end)
+ return false;
+
+ while (IS_CATEGORY(*it, WhiteSpaceTokenType) ||
+ T_NEWLINE == token_id(*it))
+ {
+ if (++it == end)
+ return false;
+ }
+ return token_id(*it) == id;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Get the full name of a given macro name (concatenate the string
+// representations of the single tokens).
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename IteratorT>
+inline std::string
+get_full_name(IteratorT const &begin, IteratorT const &end)
+{
+ std::string full_name;
+ for (IteratorT err_it = begin; err_it != end; ++err_it)
+ full_name += (*err_it).get_value().c_str();
+
+ return full_name;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// The following predicate is used in conjunction with the remove_copy_if
+// algorithm to allow the detection of an eventually copied operator ##.
+// No removal is performed in any case.
+//
+///////////////////////////////////////////////////////////////////////////////
+class find_concat_operator {
+public:
+ find_concat_operator(bool &found_) : found_concat(found_) {}
+
+ template <typename TokenT>
+ bool operator()(TokenT const &tok)
+ {
+ using namespace boost::wave;
+ if (T_POUND_POUND == BASE_TOKEN(token_id(tok)))
+ found_concat = true;
+ return false;
+ }
+
+private:
+ bool &found_concat;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace impl
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace util
+} // namespace wave
+} // namespace boost
+
+// the suffix header occurs after all of the code
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_SUFFIX
+#endif
+
+#endif // !defined(CPP_MACROMAP_UTIL_HPP_HK041119)
diff --git a/boost/boost/wave/util/file_position.hpp b/boost/boost/wave/util/file_position.hpp
new file mode 100644
index 00000000000..a5ddf608724
--- /dev/null
+++ b/boost/boost/wave/util/file_position.hpp
@@ -0,0 +1,231 @@
+/*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+
+ Definition of the position_iterator and file_position templates
+
+ http://www.boost.org/
+
+ Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(FILE_POSITION_H_52BDEDF7_DAD3_4F24_802F_E66BB8098F68_INCLUDED)
+#define FILE_POSITION_H_52BDEDF7_DAD3_4F24_802F_E66BB8098F68_INCLUDED
+
+#include <string>
+#include <ostream>
+
+#include <boost/assert.hpp>
+#include <boost/spirit/version.hpp>
+#include <boost/spirit/iterator/position_iterator.hpp>
+#include <boost/wave/wave_config.hpp>
+#if BOOST_WAVE_SERIALIZATION != 0
+#include <boost/serialization/serialization.hpp>
+#endif
+
+// this must occur after all of the includes and before any code appears
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_PREFIX
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace wave {
+namespace util {
+
+///////////////////////////////////////////////////////////////////////////////
+namespace debug {
+
+ // Used only when BOOST_ASSERT expands to something
+ // make sure the string literal does not contain any escapes ('\\' just
+ // before '\\', '\"' or '?')
+ template <typename StringT>
+ inline bool
+ is_escaped_lit(StringT const &value)
+ {
+ typename StringT::size_type pos = value.find_first_of ("\\", 0);
+ if (StringT::npos != pos) {
+ do {
+ if ('\\' == value[pos+1] ||
+ '\"' == value[pos+1] ||
+ '?' == value[pos+1])
+ {
+ return true;
+ }
+ else {
+ pos = value.find_first_of ("\\", pos+1);
+ }
+ } while (pos != StringT::npos);
+ }
+ return false;
+ }
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace debug
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// file_position
+//
+// A structure to hold positional information. This includes the filename,
+// line number and column number of a current token position.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+template <typename StringT>
+struct file_position {
+
+public:
+ typedef StringT string_type;
+
+ file_position()
+ : file(), line(1), column(1)
+ {}
+ explicit file_position(string_type const& file_, int line_ = 1,
+ int column_ = 1)
+ : file(file_), line(line_), column(column_)
+ {
+ BOOST_ASSERT(!debug::is_escaped_lit(file));
+ }
+
+// accessors
+ string_type const &get_file() const { return file; }
+ unsigned int get_line() const { return line; }
+ unsigned int get_column() const { return column; }
+
+ void set_file(string_type const &file_)
+ {
+ file = file_;
+ BOOST_ASSERT(!debug::is_escaped_lit(file));
+ }
+ void set_line(unsigned int line_) { line = line_; }
+ void set_column(unsigned int column_) { column = column_; }
+
+private:
+#if BOOST_WAVE_SERIALIZATION != 0
+ friend class boost::serialization::access;
+ template<typename Archive>
+ void serialize(Archive &ar, const unsigned int version)
+ {
+ ar & file;
+ ar & line;
+ ar & column;
+ }
+#endif
+
+ string_type file;
+ unsigned int line;
+ unsigned int column;
+};
+
+template <typename StringT>
+bool operator== (file_position<StringT> const &lhs,
+ file_position<StringT> const &rhs)
+{
+ return lhs.get_column() == rhs.get_column() &&
+ lhs.get_line() == rhs.get_line() && lhs.get_file() == rhs.get_file();
+}
+
+template <typename StringT>
+inline std::ostream &
+operator<< (std::ostream &o, file_position<StringT> const &pos)
+{
+ o << pos.get_file() << ":" << pos.get_line() << ":" << pos.get_column();
+ return o;
+}
+
+typedef file_position<BOOST_WAVE_STRINGTYPE> file_position_type;
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// position_iterator
+//
+// The position_iterator used by Wave is now based on the corresponding Spirit
+// type. This type is used with our own file_position though. The needed
+// specialization of the boost::spirit::position_policy class is provided
+// below.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+template <typename IteratorT, typename PositionT>
+struct position_iterator
+: boost::spirit::position_iterator<IteratorT, PositionT>
+{
+ typedef boost::spirit::position_iterator<IteratorT, PositionT> base_type;
+
+ position_iterator()
+ {
+ }
+
+ position_iterator(IteratorT const &begin, IteratorT const &end,
+ PositionT const &pos)
+ : base_type(begin, end, pos)
+ {
+ }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace util
+} // namespace wave
+
+///////////////////////////////////////////////////////////////////////////////
+
+#if SPIRIT_VERSION >= 0x1700
+
+namespace spirit {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// The boost::spirit::position_policy has to be specialized for our
+// file_position class
+//
+///////////////////////////////////////////////////////////////////////////////
+
+ template <>
+ class position_policy<boost::wave::util::file_position_type> {
+
+ public:
+ position_policy()
+ : m_CharsPerTab(4)
+ {}
+
+ void next_line(boost::wave::util::file_position_type &pos)
+ {
+ pos.set_line(pos.get_line() + 1);
+ pos.set_column(1);
+ }
+
+ void set_tab_chars(unsigned int chars)
+ {
+ m_CharsPerTab = chars;
+ }
+
+ void next_char(boost::wave::util::file_position_type &pos)
+ {
+ pos.set_column(pos.get_column() + 1);
+ }
+
+ void tabulation(boost::wave::util::file_position_type &pos)
+ {
+ pos.set_column(pos.get_column() + m_CharsPerTab -
+ (pos.get_column() - 1) % m_CharsPerTab);
+ }
+
+ private:
+ unsigned int m_CharsPerTab;
+ };
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace spirit
+
+#endif // SPIRIT_VERSION >= 0x1700
+
+} // namespace boost
+
+// the suffix header occurs after all of the code
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_SUFFIX
+#endif
+
+#endif // !defined(FILE_POSITION_H_52BDEDF7_DAD3_4F24_802F_E66BB8098F68_INCLUDED)
diff --git a/boost/boost/wave/util/flex_string.hpp b/boost/boost/wave/util/flex_string.hpp
new file mode 100644
index 00000000000..3533c99cdf0
--- /dev/null
+++ b/boost/boost/wave/util/flex_string.hpp
@@ -0,0 +1,2428 @@
+/*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+ http://www.boost.org/
+
+ Copyright (c) 2001 by Andrei Alexandrescu. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+// This code is taken from:
+// Andrei Alexandrescu, Generic<Programming>: A Policy-Based basic_string
+// Implementation. http://www.cuj.com/documents/s=7994/cujcexp1906alexandr/
+//
+// #HK030306:
+// - Moved into the namespace boost::wave::util
+// - Added a bunch of missing typename(s)
+// - Integrated with boost config
+// - Added a missing header include
+// - Added special constructors and operator= to allow CowString to be
+// a real COW-string (removed unnecessary data copying)
+// - Fixed a string terminating bug in append
+//
+// #HK040109:
+// - Incorporated the changes from Andrei's latest version of this class
+
+#ifndef FLEX_STRING_INC_
+#define FLEX_STRING_INC_
+
+/*
+////////////////////////////////////////////////////////////////////////////////
+template <typename E, class A = @>
+class StoragePolicy
+{
+ typedef E value_type;
+ typedef @ iterator;
+ typedef @ const_iterator;
+ typedef A allocator_type;
+ typedef @ size_type;
+
+ StoragePolicy(const StoragePolicy& s);
+ StoragePolicy(const A&);
+ StoragePolicy(const E* s, size_type len, const A&);
+ StoragePolicy(size_type len, E c, const A&);
+ ~StoragePolicy();
+
+ iterator begin();
+ const_iterator begin() const;
+ iterator end();
+ const_iterator end() const;
+
+ size_type size() const;
+ size_type max_size() const;
+ size_type capacity() const;
+
+ void reserve(size_type res_arg);
+
+ void append(const E* s, size_type sz);
+
+ template <class InputIterator>
+ void append(InputIterator b, InputIterator e);
+
+ void resize(size_type newSize, E fill);
+
+ void swap(StoragePolicy& rhs);
+
+ const E* c_str() const;
+ const E* data() const;
+
+ A get_allocator() const;
+};
+////////////////////////////////////////////////////////////////////////////////
+*/
+
+#include <boost/config.hpp>
+#include <boost/assert.hpp>
+#include <boost/throw_exception.hpp>
+
+#include <boost/iterator/reverse_iterator.hpp>
+
+#include <boost/wave/wave_config.hpp>
+#if BOOST_WAVE_SERIALIZATION != 0
+#include <boost/serialization/serialization.hpp>
+#include <boost/serialization/split_free.hpp>
+#include <boost/serialization/collections_save_imp.hpp>
+#include <boost/serialization/collections_load_imp.hpp>
+#define BOOST_WAVE_FLEX_STRING_SERIALIZATION_HACK 1
+#endif
+
+#include <memory>
+#include <string>
+#include <vector>
+#include <algorithm>
+#include <functional>
+#include <limits>
+#include <stdexcept>
+#include <cstddef>
+
+// this must occur after all of the includes and before any code appears
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_PREFIX
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace wave {
+namespace util {
+
+namespace flex_string_details
+{
+ template <class Pod, class T>
+ inline void pod_fill(Pod* b, Pod* e, T c)
+ {
+ switch ((e - b) & 7)
+ {
+ case 0:
+ while (b != e)
+ {
+ *b = c; ++b;
+ case 7: *b = c; ++b;
+ case 6: *b = c; ++b;
+ case 5: *b = c; ++b;
+ case 4: *b = c; ++b;
+ case 3: *b = c; ++b;
+ case 2: *b = c; ++b;
+ case 1: *b = c; ++b;
+ }
+ }
+ }
+
+ template <class Pod>
+ inline void pod_move(const Pod* b, const Pod* e, Pod* d)
+ {
+ using namespace std;
+ memmove(d, b, (e - b) * sizeof(*b));
+ }
+
+ template <class Pod>
+ inline Pod* pod_copy(const Pod* b, const Pod* e, Pod* d)
+ {
+ const std::size_t s = e - b;
+ using namespace std;
+ memcpy(d, b, s * sizeof(*b));
+ return d + s;
+ }
+
+ template <typename T> struct get_unsigned
+ {
+ typedef T result;
+ };
+
+ template <> struct get_unsigned<char>
+ {
+ typedef unsigned char result;
+ };
+
+ template <> struct get_unsigned<signed char>
+ {
+ typedef unsigned char result;
+ };
+
+ template <> struct get_unsigned<short int>
+ {
+ typedef unsigned short int result;
+ };
+
+ template <> struct get_unsigned<int>
+ {
+ typedef unsigned int result;
+ };
+
+ template <> struct get_unsigned<long int>
+ {
+ typedef unsigned long int result;
+ };
+
+ enum Shallow {};
+}
+
+template <class T> class mallocator
+{
+public:
+ typedef T value_type;
+ typedef value_type* pointer;
+ typedef const value_type* const_pointer;
+ typedef value_type& reference;
+ typedef const value_type& const_reference;
+ typedef std::size_t size_type;
+ //typedef unsigned int size_type;
+ //typedef std::ptrdiff_t difference_type;
+ typedef int difference_type;
+
+ template <class U>
+ struct rebind { typedef mallocator<U> other; };
+
+ mallocator() {}
+ mallocator(const mallocator&) {}
+ //template <class U>
+ //mallocator(const mallocator<U>&) {}
+ ~mallocator() {}
+
+ pointer address(reference x) const { return &x; }
+ const_pointer address(const_reference x) const
+ {
+ return x;
+ }
+
+ pointer allocate(size_type n, const_pointer = 0)
+ {
+ using namespace std;
+ void* p = malloc(n * sizeof(T));
+ if (!p) boost::throw_exception(std::bad_alloc());
+ return static_cast<pointer>(p);
+ }
+
+ void deallocate(pointer p, size_type)
+ {
+ using namespace std;
+ free(p);
+ }
+
+ size_type max_size() const
+ {
+ return static_cast<size_type>(-1) / sizeof(T);
+ }
+
+ void construct(pointer p, const value_type& x)
+ {
+ new(p) value_type(x);
+ }
+
+ void destroy(pointer p)
+ {
+ p->~value_type();
+ }
+
+private:
+ void operator=(const mallocator&);
+};
+
+template<> class mallocator<void>
+{
+ typedef void value_type;
+ typedef void* pointer;
+ typedef const void* const_pointer;
+
+ template <class U>
+ struct rebind { typedef mallocator<U> other; };
+};
+
+template <class T>
+inline bool operator==(const mallocator<T>&,
+ const mallocator<T>&) {
+ return true;
+}
+
+template <class T>
+inline bool operator!=(const mallocator<T>&,
+ const mallocator<T>&) {
+ return false;
+}
+
+template <class Allocator>
+typename Allocator::pointer Reallocate(
+ Allocator& alloc,
+ typename Allocator::pointer p,
+ typename Allocator::size_type oldObjCount,
+ typename Allocator::size_type newObjCount,
+ void*)
+{
+ // @@@ not implemented
+ return NULL;
+}
+
+template <class Allocator>
+typename Allocator::pointer Reallocate(
+ Allocator& alloc,
+ typename Allocator::pointer p,
+ typename Allocator::size_type oldObjCount,
+ typename Allocator::size_type newObjCount,
+ mallocator<void>*)
+{
+ // @@@ not implemented
+ return NULL;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// class template SimpleStringStorage
+// Allocates memory with malloc
+////////////////////////////////////////////////////////////////////////////////
+
+template <typename E, class A = std::allocator<E> >
+class SimpleStringStorage
+{
+ // The "public" below exists because MSVC can't do template typedefs
+public:
+ struct Data
+ {
+ Data() : pEnd_(buffer_), pEndOfMem_(buffer_) { buffer_[0] = E(0); }
+
+ E* pEnd_;
+ E* pEndOfMem_;
+ E buffer_[1];
+ };
+ static const Data emptyString_;
+
+ typedef typename A::size_type size_type;
+
+private:
+ Data* pData_;
+
+ void Init(size_type size, size_type capacity)
+ {
+ BOOST_ASSERT(size <= capacity);
+ if (capacity == 0)
+ {
+ pData_ = const_cast<Data*>(&emptyString_);
+ }
+ else
+ {
+ // 11-17-2000: comment added:
+ // No need to allocate (capacity + 1) to
+ // accomodate the terminating 0, because Data already
+ // has one one character in there
+ pData_ = static_cast<Data*>(
+ malloc(sizeof(Data) + capacity * sizeof(E)));
+ if (!pData_) boost::throw_exception(std::bad_alloc());
+ pData_->pEnd_ = pData_->buffer_ + size;
+ pData_->pEndOfMem_ = pData_->buffer_ + capacity;
+ }
+ }
+
+private:
+ // Warning - this doesn't initialize pData_. Used in reserve()
+ SimpleStringStorage()
+ { }
+
+public:
+ typedef E value_type;
+ typedef E* iterator;
+ typedef const E* const_iterator;
+ typedef A allocator_type;
+
+ SimpleStringStorage(const SimpleStringStorage& rhs)
+ {
+ const size_type sz = rhs.size();
+ Init(sz, sz);
+ if (sz) flex_string_details::pod_copy(rhs.begin(), rhs.end(), begin());
+ }
+
+ SimpleStringStorage(const SimpleStringStorage& s,
+ flex_string_details::Shallow)
+ : pData_(s.pData_)
+ {
+ }
+
+ SimpleStringStorage(const A&)
+ { pData_ = const_cast<Data*>(&emptyString_); }
+
+ SimpleStringStorage(const E* s, size_type len, const A&)
+ {
+ Init(len, len);
+ flex_string_details::pod_copy(s, s + len, begin());
+ }
+
+ SimpleStringStorage(size_type len, E c, const A&)
+ {
+ Init(len, len);
+ flex_string_details::pod_fill(begin(), end(), c);
+ }
+
+ SimpleStringStorage& operator=(const SimpleStringStorage& rhs)
+ {
+ const size_type sz = rhs.size();
+ reserve(sz);
+ flex_string_details::pod_copy(&*rhs.begin(), &*rhs.end(), begin());
+ pData_->pEnd_ = &*begin() + sz;
+ return *this;
+ }
+
+ ~SimpleStringStorage()
+ {
+ BOOST_ASSERT(begin() <= end());
+ if (pData_ != &emptyString_) free(pData_);
+ }
+
+ iterator begin()
+ { return pData_->buffer_; }
+
+ const_iterator begin() const
+ { return pData_->buffer_; }
+
+ iterator end()
+ { return pData_->pEnd_; }
+
+ const_iterator end() const
+ { return pData_->pEnd_; }
+
+ size_type size() const
+ { return pData_->pEnd_ - pData_->buffer_; }
+
+ size_type max_size() const
+ { return std::size_t(-1) / sizeof(E) - sizeof(Data) - 1; }
+
+ size_type capacity() const
+ { return pData_->pEndOfMem_ - pData_->buffer_; }
+
+ void reserve(size_type res_arg)
+ {
+ if (res_arg <= capacity())
+ {
+ // @@@ insert shrinkage here if you wish
+ return;
+ }
+
+ if (pData_ == &emptyString_)
+ {
+ Init(0, res_arg);
+ }
+ else
+ {
+ const size_type sz = size();
+
+ void* p = realloc(pData_,
+ sizeof(Data) + res_arg * sizeof(E));
+ if (!p) boost::throw_exception(std::bad_alloc());
+
+ if (p != pData_)
+ {
+ pData_ = static_cast<Data*>(p);
+ pData_->pEnd_ = pData_->buffer_ + sz;
+ }
+ pData_->pEndOfMem_ = pData_->buffer_ + res_arg;
+ }
+ }
+
+ void append(const E* s, size_type sz)
+ {
+ const size_type neededCapacity = size() + sz;
+
+ if (capacity() < neededCapacity)
+ {
+ const iterator b = begin();
+ static std::less_equal<const E*> le;
+ if (le(b, s) && le(s, end()))
+ {
+ // aliased
+ const size_type offset = s - b;
+ reserve(neededCapacity);
+ s = begin() + offset;
+ }
+ else
+ {
+ reserve(neededCapacity);
+ }
+ }
+ flex_string_details::pod_copy(s, s + sz, end());
+ pData_->pEnd_ += sz;
+ }
+
+ template <class InputIterator>
+ void append(InputIterator b, InputIterator e)
+ {
+ // @@@ todo: optimize this depending on iterator type
+ for (; b != e; ++b)
+ {
+ *this += *b;
+ }
+ }
+
+ void resize(size_type newSize, E fill)
+ {
+ const int delta = int(newSize - size());
+ if (delta == 0) return;
+
+ if (delta > 0)
+ {
+ if (newSize > capacity())
+ {
+ reserve(newSize);
+ }
+ E* e = &*end();
+ flex_string_details::pod_fill(e, e + delta, fill);
+ }
+ pData_->pEnd_ = pData_->buffer_ + newSize;
+ }
+
+ void swap(SimpleStringStorage& rhs)
+ {
+ std::swap(pData_, rhs.pData_);
+ }
+
+ const E* c_str() const
+ {
+ if (pData_ != &emptyString_) *pData_->pEnd_ = E();
+ return pData_->buffer_;
+ }
+
+ const E* data() const
+ { return pData_->buffer_; }
+
+ A get_allocator() const
+ { return A(); }
+};
+
+template <typename E, class A>
+const typename SimpleStringStorage<E, A>::Data
+SimpleStringStorage<E, A>::emptyString_ = typename SimpleStringStorage<E, A>::Data();
+//{
+// const_cast<E*>(SimpleStringStorage<E, A>::emptyString_.buffer_),
+// const_cast<E*>(SimpleStringStorage<E, A>::emptyString_.buffer_),
+// { E() }
+//};
+
+////////////////////////////////////////////////////////////////////////////////
+// class template AllocatorStringStorage
+// Allocates with your allocator
+// Takes advantage of the Empty Base Optimization if available
+////////////////////////////////////////////////////////////////////////////////
+
+template <typename E, class A = std::allocator<E> >
+class AllocatorStringStorage : public A
+{
+ typedef typename A::size_type size_type;
+ typedef typename SimpleStringStorage<E, A>::Data Data;
+
+ void* Alloc(size_type sz, const void* p = 0)
+ {
+ return A::allocate(1 + (sz - 1) / sizeof(E),
+ static_cast<const char*>(p));
+ }
+
+ void* Realloc(void* p, size_type oldSz, size_type newSz)
+ {
+ void* r = Alloc(newSz);
+ flex_string_details::pod_copy(p, p + Min(oldSz, newSz), r);
+ Free(p, oldSz);
+ return r;
+ }
+
+ void Free(void* p, size_type sz)
+ {
+ A::deallocate(static_cast<E*>(p), sz);
+ }
+
+ Data* pData_;
+
+ void Init(size_type size, size_type cap)
+ {
+ BOOST_ASSERT(size <= cap);
+
+ if (cap == 0)
+ {
+ pData_ = const_cast<Data*>(
+ &SimpleStringStorage<E, A>::emptyString_);
+ }
+ else
+ {
+ pData_ = static_cast<Data*>(Alloc(
+ cap * sizeof(E) + sizeof(Data)));
+ pData_->pEnd_ = pData_->buffer_ + size;
+ pData_->pEndOfMem_ = pData_->buffer_ + cap;
+ }
+ }
+
+public:
+ typedef E value_type;
+ typedef A allocator_type;
+ typedef typename A::pointer iterator;
+ typedef typename A::const_pointer const_iterator;
+
+ AllocatorStringStorage(const AllocatorStringStorage& rhs)
+ : A(rhs.get_allocator())
+ {
+ const size_type sz = rhs.size();
+ Init(sz, sz);
+ if (sz) flex_string_details::pod_copy(rhs.begin(), rhs.end(), begin());
+ }
+
+ AllocatorStringStorage(const AllocatorStringStorage& s,
+ flex_string_details::Shallow)
+ : A(s.get_allocator())
+ {
+ pData_ = s.pData_;
+ }
+
+ AllocatorStringStorage(const A& a) : A(a)
+ {
+ pData_ = const_cast<Data*>(
+ &SimpleStringStorage<E, A>::emptyString_);
+ }
+
+ AllocatorStringStorage(const E* s, size_type len, const A& a)
+ : A(a)
+ {
+ Init(len, len);
+ flex_string_details::pod_copy(s, s + len, begin());
+ }
+
+ AllocatorStringStorage(size_type len, E c, const A& a)
+ : A(a)
+ {
+ Init(len, len);
+ flex_string_details::pod_fill(&*begin(), &*end(), c);
+ }
+
+ AllocatorStringStorage& operator=(const AllocatorStringStorage& rhs)
+ {
+ const size_type sz = rhs.size();
+ reserve(sz);
+ flex_string_details::pod_copy(&*rhs.begin(), &*rhs.end(), begin());
+ pData_->pEnd_ = &*begin() + rhs.size();
+ return *this;
+ }
+
+ ~AllocatorStringStorage()
+ {
+ if (capacity())
+ {
+ Free(pData_,
+ sizeof(Data) + capacity() * sizeof(E));
+ }
+ }
+
+ iterator begin()
+ { return pData_->buffer_; }
+
+ const_iterator begin() const
+ { return pData_->buffer_; }
+
+ iterator end()
+ { return pData_->pEnd_; }
+
+ const_iterator end() const
+ { return pData_->pEnd_; }
+
+ size_type size() const
+ { return size_type(end() - begin()); }
+
+ size_type max_size() const
+ { return A::max_size(); }
+
+ size_type capacity() const
+ { return size_type(pData_->pEndOfMem_ - pData_->buffer_); }
+
+ void resize(size_type n, E c)
+ {
+ reserve(n);
+ iterator newEnd = begin() + n;
+ iterator oldEnd = end();
+ if (newEnd > oldEnd)
+ {
+ // Copy the characters
+ flex_string_details::pod_fill(oldEnd, newEnd, c);
+ }
+ if (capacity()) pData_->pEnd_ = newEnd;
+ }
+
+ void reserve(size_type res_arg)
+ {
+ if (res_arg <= capacity())
+ {
+ // @@@ shrink to fit here
+ return;
+ }
+
+ A& myAlloc = *this;
+ AllocatorStringStorage newStr(myAlloc);
+ newStr.Init(size(), res_arg);
+
+ flex_string_details::pod_copy(begin(), end(), newStr.begin());
+
+ swap(newStr);
+ }
+
+ void append(const E* s, size_type sz)
+ {
+ const size_type neededCapacity = size() + sz;
+
+ if (capacity() < neededCapacity)
+ {
+ const iterator b = begin();
+ static std::less_equal<const E*> le;
+ if (le(b, s) && le(s, end()))
+ {
+ // aliased
+ const size_type offset = s - b;
+ reserve(neededCapacity);
+ s = begin() + offset;
+ }
+ else
+ {
+ reserve(neededCapacity);
+ }
+ }
+ flex_string_details::pod_copy(s, s + sz, end());
+ pData_->pEnd_ += sz;
+ }
+
+ void swap(AllocatorStringStorage& rhs)
+ {
+ // @@@ The following line is commented due to a bug in MSVC
+ //std::swap(lhsAlloc, rhsAlloc);
+ std::swap(pData_, rhs.pData_);
+ }
+
+ const E* c_str() const
+ {
+ if (pData_ != &SimpleStringStorage<E, A>::emptyString_)
+ {
+ *pData_->pEnd_ = E();
+ }
+ return &*begin();
+ }
+
+ const E* data() const
+ { return &*begin(); }
+
+ A get_allocator() const
+ { return *this; }
+};
+
+////////////////////////////////////////////////////////////////////////////////
+// class template VectorStringStorage
+// Uses std::vector
+// Takes advantage of the Empty Base Optimization if available
+////////////////////////////////////////////////////////////////////////////////
+
+template <typename E, class A = std::allocator<E> >
+class VectorStringStorage : protected std::vector<E, A>
+{
+ typedef std::vector<E, A> base;
+
+public: // protected:
+ typedef E value_type;
+ typedef typename base::iterator iterator;
+ typedef typename base::const_iterator const_iterator;
+ typedef A allocator_type;
+ typedef typename A::size_type size_type;
+
+ VectorStringStorage(const VectorStringStorage& s) : base(s)
+ { }
+
+ VectorStringStorage(const A& a) : base(1, E(), a)
+ { }
+
+ VectorStringStorage(const E* s, size_type len, const A& a)
+ : base(a)
+ {
+ base::reserve(len + 1);
+ base::insert(base::end(), s, s + len);
+ // Terminating zero
+ base::insert(base::end(), E());
+ }
+
+ VectorStringStorage(size_type len, E c, const A& a)
+ : base(len + 1, c, a)
+ {
+ // Terminating zero
+ base::back() = E();
+ }
+
+ VectorStringStorage& operator=(const VectorStringStorage& rhs)
+ {
+ base& v = *this;
+ v = rhs;
+ return *this;
+ }
+
+ iterator begin()
+ { return base::begin(); }
+
+ const_iterator begin() const
+ { return base::begin(); }
+
+ iterator end()
+ { return base::end() - 1; }
+
+ const_iterator end() const
+ { return base::end() - 1; }
+
+ size_type size() const
+ { return base::size() - 1; }
+
+ size_type max_size() const
+ { return base::max_size() - 1; }
+
+ size_type capacity() const
+ { return base::capacity() - 1; }
+
+ void reserve(size_type res_arg)
+ {
+ BOOST_ASSERT(res_arg < max_size());
+ base::reserve(res_arg + 1);
+ }
+
+ void append(const E* s, size_type sz)
+ {
+ // Check for aliasing because std::vector doesn't do it.
+ static std::less_equal<const E*> le;
+ if (!base::empty())
+ {
+ const E* start = &base::front();
+ if (le(start, s) && le(s, start + size()))
+ {
+ // aliased
+ const size_type offset = s - start;
+ reserve(size() + sz);
+ s = &base::front() + offset;
+ }
+ }
+ base::insert(end(), s, s + sz);
+ }
+
+ template <class InputIterator>
+ void append(InputIterator b, InputIterator e)
+ {
+ base::insert(end(), b, e);
+ }
+
+ void resize(size_type n, E c)
+ {
+ base::reserve(n + 1);
+ base::back() = c;
+ base::resize(n + 1, c);
+ base::back() = E();
+ }
+
+ void swap(VectorStringStorage& rhs)
+ { base::swap(rhs); }
+
+ const E* c_str() const
+ { return &*begin(); }
+
+ const E* data() const
+ { return &*begin(); }
+
+ A get_allocator() const
+ { return base::get_allocator(); }
+};
+
+////////////////////////////////////////////////////////////////////////////////
+// class template SmallStringOpt
+// Builds the small string optimization over any other storage
+////////////////////////////////////////////////////////////////////////////////
+
+template <class Storage, unsigned int threshold,
+ typename Align = typename Storage::value_type*>
+class SmallStringOpt
+{
+public:
+ typedef typename Storage::value_type value_type;
+ typedef value_type* iterator;
+ typedef const value_type* const_iterator;
+ typedef typename Storage::allocator_type allocator_type;
+ typedef typename allocator_type::size_type size_type;
+
+private:
+ enum { temp1 = threshold * sizeof(value_type) > sizeof(Storage)
+ ? threshold * sizeof(value_type)
+ : sizeof(Storage) };
+
+ enum { temp2 = temp1 > sizeof(Align) ? temp1 : sizeof(Align) };
+
+public:
+ enum { maxSmallString =
+ (temp2 + sizeof(value_type) - 1) / sizeof(value_type) };
+
+private:
+ enum { magic = maxSmallString + 1 };
+
+ union
+ {
+ mutable value_type buf_[maxSmallString + 1];
+ Align align_;
+ };
+
+ Storage& GetStorage()
+ {
+ BOOST_ASSERT(buf_[maxSmallString] == magic);
+ Storage* p = reinterpret_cast<Storage*>(&buf_[0]);
+ return *p;
+ }
+
+ const Storage& GetStorage() const
+ {
+ BOOST_ASSERT(buf_[maxSmallString] == magic);
+ const Storage *p = reinterpret_cast<const Storage*>(&buf_[0]);
+ return *p;
+ }
+
+ bool Small() const
+ {
+ return buf_[maxSmallString] != magic;
+ }
+
+public:
+ SmallStringOpt(const SmallStringOpt& s)
+ {
+ if (s.Small())
+ {
+ flex_string_details::pod_copy(
+ s.buf_,
+ s.buf_ + s.size(),
+ buf_);
+ }
+ else
+ {
+ new(buf_) Storage(s.GetStorage());
+ }
+ buf_[maxSmallString] = s.buf_[maxSmallString];
+ }
+
+ SmallStringOpt(const allocator_type&)
+ {
+ buf_[maxSmallString] = maxSmallString;
+ }
+
+ SmallStringOpt(const value_type* s, size_type len, const allocator_type& a)
+ {
+ if (len <= maxSmallString)
+ {
+ flex_string_details::pod_copy(s, s + len, buf_);
+ buf_[maxSmallString] = value_type(maxSmallString - len);
+ }
+ else
+ {
+ new(buf_) Storage(s, len, a);
+ buf_[maxSmallString] = magic;
+ }
+ }
+
+ SmallStringOpt(size_type len, value_type c, const allocator_type& a)
+ {
+ if (len <= maxSmallString)
+ {
+ flex_string_details::pod_fill(buf_, buf_ + len, c);
+ buf_[maxSmallString] = value_type(maxSmallString - len);
+ }
+ else
+ {
+ new(buf_) Storage(len, c, a);
+ buf_[maxSmallString] = magic;
+ }
+ }
+
+ SmallStringOpt& operator=(const SmallStringOpt& rhs)
+ {
+ reserve(rhs.size());
+ resize(0, 0);
+ append(rhs.data(), rhs.size());
+ return *this;
+ }
+
+ ~SmallStringOpt()
+ {
+ if (!Small()) GetStorage().~Storage();
+ }
+
+ iterator begin()
+ {
+ if (Small()) return buf_;
+ return &*GetStorage().begin();
+ }
+
+ const_iterator begin() const
+ {
+ if (Small()) return buf_;
+ return &*GetStorage().begin();
+ }
+
+ iterator end()
+ {
+ if (Small()) return buf_ + maxSmallString - buf_[maxSmallString];
+ return &*GetStorage().end();
+ }
+
+ const_iterator end() const
+ {
+ if (Small()) return buf_ + maxSmallString - buf_[maxSmallString];
+ return &*GetStorage().end();
+ }
+
+ size_type size() const
+ {
+ BOOST_ASSERT(!Small() || maxSmallString >= buf_[maxSmallString]);
+ return Small()
+ ? maxSmallString - buf_[maxSmallString]
+ : GetStorage().size();
+ }
+
+ size_type max_size() const
+ { return get_allocator().max_size(); }
+
+ size_type capacity() const
+ { return Small() ? maxSmallString : GetStorage().capacity(); }
+
+ void reserve(size_type res_arg)
+ {
+ if (Small())
+ {
+ if (res_arg <= maxSmallString) return;
+ SmallStringOpt temp(*this);
+ this->~SmallStringOpt();
+ new(buf_) Storage(temp.data(), temp.size(),
+ temp.get_allocator());
+ buf_[maxSmallString] = magic;
+ GetStorage().reserve(res_arg);
+ }
+ else
+ {
+ GetStorage().reserve(res_arg);
+ }
+ BOOST_ASSERT(capacity() >= res_arg);
+ }
+
+ void append(const value_type* s, size_type sz)
+ {
+ if (!Small())
+ {
+ GetStorage().append(s, sz);
+ }
+ else
+ {
+ // append to a small string
+ const size_type neededCapacity =
+ maxSmallString - buf_[maxSmallString] + sz;
+
+ if (maxSmallString < neededCapacity)
+ {
+ // need to change storage strategy
+ allocator_type alloc;
+ Storage temp(alloc);
+ temp.reserve(neededCapacity);
+ temp.append(buf_, maxSmallString - buf_[maxSmallString]);
+ temp.append(s, sz);
+ buf_[maxSmallString] = magic;
+ new(buf_) Storage(temp.get_allocator());
+ GetStorage().swap(temp);
+ }
+ else
+ {
+ flex_string_details::pod_move(s, s + sz,
+ buf_ + maxSmallString - buf_[maxSmallString]);
+ buf_[maxSmallString] -= value_type(sz);
+ }
+ }
+ }
+
+ template <class InputIterator>
+ void append(InputIterator b, InputIterator e)
+ {
+ // @@@ todo: optimize this depending on iterator type
+ for (; b != e; ++b)
+ {
+ *this += *b;
+ }
+ }
+
+ void resize(size_type n, value_type c)
+ {
+ if (Small())
+ {
+ if (n > maxSmallString)
+ {
+ // Small string resized to big string
+ SmallStringOpt temp(*this); // can't throw
+ // 11-17-2001: correct exception safety bug
+ Storage newString(temp.data(), temp.size(),
+ temp.get_allocator());
+ newString.resize(n, c);
+ // We make the reasonable assumption that an empty Storage
+ // constructor won't throw
+ this->~SmallStringOpt();
+ new(&buf_[0]) Storage(temp.get_allocator());
+ buf_[maxSmallString] = value_type(magic);
+ GetStorage().swap(newString);
+ }
+ else
+ {
+ // Small string resized to small string
+ // 11-17-2001: bug fix: terminating zero not copied
+ size_type toFill = n > size() ? n - size() : 0;
+ flex_string_details::pod_fill(end(), end() + toFill, c);
+ buf_[maxSmallString] = value_type(maxSmallString - n);
+ }
+ }
+ else
+ {
+ if (n > maxSmallString)
+ {
+ // Big string resized to big string
+ GetStorage().resize(n, c);
+ }
+ else
+ {
+ // Big string resized to small string
+ // 11-17=2001: bug fix in the BOOST_ASSERTion below
+ BOOST_ASSERT(capacity() > n);
+ SmallStringOpt newObj(data(), n, get_allocator());
+ newObj.swap(*this);
+ }
+ }
+ }
+
+ void swap(SmallStringOpt& rhs)
+ {
+ if (Small())
+ {
+ if (rhs.Small())
+ {
+ // Small swapped with small
+ std::swap_ranges(buf_, buf_ + maxSmallString + 1,
+ rhs.buf_);
+ }
+ else
+ {
+ // Small swapped with big
+ // Make a copy of myself - can't throw
+ SmallStringOpt temp(*this);
+ // Nuke myself
+ this->~SmallStringOpt();
+ // Make an empty storage for myself (likely won't throw)
+ new(buf_) Storage(0, value_type(), rhs.get_allocator());
+ buf_[maxSmallString] = magic;
+ // Recurse to this same function
+ swap(rhs);
+ // Nuke rhs
+ rhs.~SmallStringOpt();
+ // Build the new small string into rhs
+ new(&rhs) SmallStringOpt(temp);
+ }
+ }
+ else
+ {
+ if (rhs.Small())
+ {
+ // Big swapped with small
+ // Already implemented, recurse with reversed args
+ rhs.swap(*this);
+ }
+ else
+ {
+ // Big swapped with big
+ GetStorage().swap(rhs.GetStorage());
+ }
+ }
+ }
+
+ const value_type* c_str() const
+ {
+ if (!Small()) return GetStorage().c_str();
+ buf_[maxSmallString - buf_[maxSmallString]] = value_type();
+ return buf_;
+ }
+
+ const value_type* data() const
+ { return Small() ? buf_ : GetStorage().data(); }
+
+ allocator_type get_allocator() const
+ { return allocator_type(); }
+};
+
+////////////////////////////////////////////////////////////////////////////////
+// class template CowString
+// Implements Copy on Write over any storage
+////////////////////////////////////////////////////////////////////////////////
+
+template <
+ typename Storage,
+ typename Align = BOOST_DEDUCED_TYPENAME Storage::value_type*
+>
+class CowString
+{
+ typedef typename Storage::value_type E;
+ typedef typename flex_string_details::get_unsigned<E>::result RefCountType;
+
+public:
+ typedef E value_type;
+ typedef typename Storage::iterator iterator;
+ typedef typename Storage::const_iterator const_iterator;
+ typedef typename Storage::allocator_type allocator_type;
+ typedef typename allocator_type::size_type size_type;
+
+private:
+ union
+ {
+ mutable char buf_[sizeof(Storage)];
+ Align align_;
+ };
+
+ Storage& Data() const
+ { return *reinterpret_cast<Storage*>(buf_); }
+
+ RefCountType GetRefs() const
+ {
+ const Storage& d = Data();
+ BOOST_ASSERT(d.size() > 0);
+ BOOST_ASSERT(static_cast<RefCountType>(*d.begin()) != 0);
+ return *d.begin();
+ }
+
+ RefCountType& Refs()
+ {
+ Storage& d = Data();
+ BOOST_ASSERT(d.size() > 0);
+ return reinterpret_cast<RefCountType&>(*d.begin());
+ }
+
+ void MakeUnique() const
+ {
+ BOOST_ASSERT(GetRefs() >= 1);
+ if (GetRefs() == 1) return;
+
+ union
+ {
+ char buf_[sizeof(Storage)];
+ Align align_;
+ } temp;
+
+ --(*Data().begin()); // decrement the use count of the remaining object
+ new(buf_) Storage(
+ *new(temp.buf_) Storage(Data()),
+ flex_string_details::Shallow());
+ *Data().begin() = 1;
+ }
+
+public:
+ CowString(const CowString& s)
+ {
+ if (s.GetRefs() == (std::numeric_limits<RefCountType>::max)())
+ {
+ // must make a brand new copy
+ new(buf_) Storage(s.Data()); // non shallow
+ Refs() = 1;
+ }
+ else
+ {
+ new(buf_) Storage(s.Data(), flex_string_details::Shallow());
+ ++Refs();
+ }
+ BOOST_ASSERT(Data().size() > 0);
+ }
+
+ CowString(const allocator_type& a)
+ {
+ new(buf_) Storage(1, 1, a);
+ }
+
+ CowString(const E* s, size_type len, const allocator_type& a)
+ {
+ // Warning - MSVC's debugger has trouble tracing through the code below.
+ // It seems to be a const-correctness issue
+ //
+ new(buf_) Storage(a);
+ Data().reserve(len + 1);
+ Data().resize(1, 1);
+ Data().append(s, len);
+ }
+
+ CowString(size_type len, E c, const allocator_type& a)
+ {
+ new(buf_) Storage(len + 1, c, a);
+ Refs() = 1;
+ }
+
+ CowString& operator=(const CowString& rhs)
+ {
+// CowString(rhs).swap(*this);
+ if (--Refs() == 0)
+ Data().~Storage();
+ if (rhs.GetRefs() == (std::numeric_limits<RefCountType>::max)())
+ {
+ // must make a brand new copy
+ new(buf_) Storage(rhs.Data()); // non shallow
+ Refs() = 1;
+ }
+ else
+ {
+ new(buf_) Storage(rhs.Data(), flex_string_details::Shallow());
+ ++Refs();
+ }
+ BOOST_ASSERT(Data().size() > 0);
+ return *this;
+ }
+
+ ~CowString()
+ {
+ BOOST_ASSERT(Data().size() > 0);
+ if (--Refs() == 0)
+ Data().~Storage();
+ }
+
+ iterator begin()
+ {
+ BOOST_ASSERT(Data().size() > 0);
+ MakeUnique();
+ return Data().begin() + 1;
+ }
+
+ const_iterator begin() const
+ {
+ BOOST_ASSERT(Data().size() > 0);
+ return Data().begin() + 1;
+ }
+
+ iterator end()
+ {
+ MakeUnique();
+ return Data().end();
+ }
+
+ const_iterator end() const
+ {
+ return Data().end();
+ }
+
+ size_type size() const
+ {
+ BOOST_ASSERT(Data().size() > 0);
+ return Data().size() - 1;
+ }
+
+ size_type max_size() const
+ {
+ BOOST_ASSERT(Data().max_size() > 0);
+ return Data().max_size() - 1;
+ }
+
+ size_type capacity() const
+ {
+ BOOST_ASSERT(Data().capacity() > 0);
+ return Data().capacity() - 1;
+ }
+
+ void resize(size_type n, E c)
+ {
+ BOOST_ASSERT(Data().size() > 0);
+ MakeUnique();
+ Data().resize(n + 1, c);
+ }
+
+ void append(const E* s, size_type sz)
+ {
+ MakeUnique();
+ Data().append(s, sz);
+ }
+
+ template <class InputIterator>
+ void append(InputIterator b, InputIterator e)
+ {
+ MakeUnique();
+ // @@@ todo: optimize this depending on iterator type
+ for (; b != e; ++b)
+ {
+ *this += *b;
+ }
+ }
+
+ void reserve(size_type res_arg)
+ {
+ if (capacity() > res_arg) return;
+ MakeUnique();
+ Data().reserve(res_arg + 1);
+ }
+
+ void swap(CowString& rhs)
+ {
+ Data().swap(rhs.Data());
+ }
+
+ const E* c_str() const
+ {
+ BOOST_ASSERT(Data().size() > 0);
+ return Data().c_str() + 1;
+ }
+
+ const E* data() const
+ {
+ BOOST_ASSERT(Data().size() > 0);
+ return Data().data() + 1;
+ }
+
+ allocator_type get_allocator() const
+ {
+ return Data().get_allocator();
+ }
+};
+
+////////////////////////////////////////////////////////////////////////////////
+// class template flex_string
+// a std::basic_string compatible implementation
+// Uses a Storage policy
+////////////////////////////////////////////////////////////////////////////////
+
+template <typename E,
+ class T = std::char_traits<E>,
+ class A = std::allocator<E>,
+ class Storage = AllocatorStringStorage<E, A> >
+class flex_string : private Storage
+{
+#if defined(THROW_ON_ENFORCE)
+ template <typename Exception>
+ static void Enforce(bool condition, Exception*, const char* msg)
+ { if (!condition) boost::throw_exception(Exception(msg)); }
+#else
+ template <typename Exception>
+ static inline void Enforce(bool condition, Exception*, const char* msg)
+ { BOOST_ASSERT(condition && msg); }
+#endif // defined(THROW_ON_ENFORCE)
+
+ bool Sane() const
+ {
+ return
+ begin() <= end() &&
+ empty() == (size() == 0) &&
+ empty() == (begin() == end()) &&
+ size() <= max_size() &&
+ capacity() <= max_size() &&
+ size() <= capacity();
+ }
+
+ struct Invariant;
+ friend struct Invariant;
+ struct Invariant
+ {
+ Invariant(const flex_string& s) : s_(s)
+ {
+ BOOST_ASSERT(s_.Sane());
+ }
+ ~Invariant()
+ {
+ BOOST_ASSERT(s_.Sane());
+ }
+ private:
+ const flex_string& s_;
+ };
+
+public:
+ // types
+ typedef T traits_type;
+ typedef typename traits_type::char_type value_type;
+ typedef A allocator_type;
+ typedef typename A::size_type size_type;
+ typedef typename A::difference_type difference_type;
+
+ typedef typename A::reference reference;
+ typedef typename A::const_reference const_reference;
+ typedef typename A::pointer pointer;
+ typedef typename A::const_pointer const_pointer;
+
+ typedef typename Storage::iterator iterator;
+ typedef typename Storage::const_iterator const_iterator;
+
+ typedef boost::reverse_iterator<iterator> reverse_iterator;
+ typedef boost::reverse_iterator<const_iterator> const_reverse_iterator;
+
+ static const size_type npos; // = size_type(-1)
+
+private:
+ static size_type Min(size_type lhs, size_type rhs)
+ { return lhs < rhs ? lhs : rhs; }
+
+public:
+ // 21.3.1 construct/copy/destroy
+ explicit flex_string(const A& a = A())
+ : Storage(a)
+ {}
+
+ flex_string(const flex_string& str)
+ : Storage(str)
+ {
+ }
+
+ flex_string(const flex_string& str, size_type pos,
+ size_type n = npos, const A& a = A())
+ : Storage(a)
+ {
+ Enforce(pos <= str.size(), (std::out_of_range*)0, "");
+ assign(str, pos, n);
+ }
+
+ flex_string(const value_type* s, const A& a = A())
+ : Storage(s, traits_type::length(s), a)
+ {}
+
+ flex_string(const value_type* s, size_type n, const A& a = A())
+ : Storage(s, n, a)
+ {}
+
+ flex_string(size_type n, value_type c, const A& a = A())
+ : Storage(n, c, a)
+ {}
+
+ template <class InputIterator>
+ flex_string(InputIterator begin, InputIterator end, const A& a = A())
+ : Storage(a)
+ {
+ assign(begin, end);
+ }
+
+ ~flex_string()
+ {}
+
+ flex_string& operator=(const flex_string& str)
+ {
+ if (this != &str) {
+ Storage& s = *this;
+ s = str;
+ }
+ return *this;
+ }
+
+ flex_string& operator=(const value_type* s)
+ {
+ assign(s);
+ return *this;
+ }
+
+ flex_string& operator=(value_type c)
+ {
+ assign(1, c);
+ return *this;
+ }
+
+ // 21.3.2 iterators:
+ iterator begin()
+ { return Storage::begin(); }
+
+ const_iterator begin() const
+ { return Storage::begin(); }
+
+ iterator end()
+ { return Storage::end(); }
+
+ const_iterator end() const
+ { return Storage::end(); }
+
+ reverse_iterator rbegin()
+ { return reverse_iterator(end()); }
+
+ const_reverse_iterator rbegin() const
+ { return const_reverse_iterator(end()); }
+
+ reverse_iterator rend()
+ { return reverse_iterator(begin()); }
+
+ const_reverse_iterator rend() const
+ { return const_reverse_iterator(begin()); }
+
+#if BOOST_WAVE_FLEX_STRING_SERIALIZATION_HACK != 0
+ // temporary hack to make it easier to serialize flex_string's using
+ // the Boost.Serialization library
+ value_type & back() { return *(begin()+size()-1); }
+ value_type const& back() const { return *(begin()+size()-1); }
+#endif
+
+ // 21.3.3 capacity:
+ size_type size() const
+ { return Storage::size(); }
+
+ size_type length() const
+ { return size(); }
+
+ size_type max_size() const
+ { return Storage::max_size(); }
+
+ void resize(size_type n, value_type c)
+ { Storage::resize(n, c); }
+
+ void resize(size_type n)
+ { resize(n, value_type()); }
+
+ size_type capacity() const
+ { return Storage::capacity(); }
+
+ void reserve(size_type res_arg = 0)
+ {
+ Enforce(res_arg <= max_size(), (std::length_error*)0, "");
+ Storage::reserve(res_arg);
+ }
+
+ void clear()
+ { resize(0); }
+
+ bool empty() const
+ { return size() == 0; }
+
+ // 21.3.4 element access:
+ const_reference operator[](size_type pos) const
+ { return *(begin() + pos); }
+
+ reference operator[](size_type pos)
+ { return *(begin() + pos); }
+
+ const_reference at(size_type n) const
+ {
+ Enforce(n < size(), (std::out_of_range*)0, "");
+ return (*this)[n];
+ }
+
+ reference at(size_type n)
+ {
+ Enforce(n < size(), (std::out_of_range*)0, "");
+ return (*this)[n];
+ }
+
+ // 21.3.5 modifiers:
+ flex_string& operator+=(const flex_string& str)
+ { return append(str); }
+
+ flex_string& operator+=(const value_type* s)
+ { return append(s); }
+
+ flex_string& operator+=(value_type c)
+ {
+ const size_type cap = capacity();
+ if (size() == cap)
+ {
+ reserve(cap << 1u);
+ }
+ resize(size() + 1, c);
+ return *this;
+ }
+
+ flex_string& append(const flex_string& str)
+ { return append(str, 0, npos); }
+
+ flex_string& append(const flex_string& str, size_type pos,
+ size_type n)
+ {
+ const size_type sz = str.size();
+ Enforce(pos <= sz, (std::out_of_range*)0, "");
+ return append(str.c_str() + pos, Min(n, sz - pos));
+ }
+
+ flex_string& append(const value_type* s, size_type n)
+ {
+ Storage::append(s, n);
+ return *this;
+ }
+
+ flex_string& append(const value_type* s)
+ { return append(s, traits_type::length(s)); }
+
+ flex_string& append(size_type n, value_type c)
+ {
+ resize(size() + n, c);
+ return *this;
+ }
+/*
+ template<class InputIterator>
+ flex_string& append(InputIterator first, InputIterator last)
+ {
+ for (; first != last; ++first) *this += E(*first);
+ return *this;
+ }
+*/
+ void push_back(value_type c)
+ {
+ *this += c;
+ }
+
+ flex_string& assign(const flex_string& str)
+ {
+ if (&str == this) return *this;
+ replace(0, size(), &*str.begin(), str.size());
+ return *this;
+ }
+
+ flex_string& assign(const flex_string& str, size_type pos,
+ size_type n)
+ {
+ Enforce(pos <= str.size(), (std::out_of_range*)0, "");
+ return assign(str.data() + pos, Min(n, str.size() - pos));
+ }
+
+ flex_string& assign(const value_type* s, size_type n)
+ {
+ if (size() >= n)
+ {
+ flex_string_details::pod_move(s, s + n, &*begin());
+ resize(n, value_type());
+ }
+ else
+ {
+ flex_string_details::pod_move(s, s + size(), &*begin());
+ Storage::append(s + size(), n - size());
+ }
+ return *this;
+ }
+
+ flex_string& assign(const value_type* s)
+ { return assign(s, traits_type::length(s)); }
+
+ flex_string& assign(size_type n, value_type c)
+ { return replace(begin(), end(), n, c); }
+
+ template<class InputIterator>
+ flex_string& assign(InputIterator first, InputIterator last)
+ { return replace(begin(), end(), first, last); }
+
+ flex_string& insert(size_type pos1, const flex_string& str)
+ { return insert(pos1, str, 0, npos); }
+
+ flex_string& insert(size_type pos1, const flex_string& str,
+ size_type pos2, size_type n)
+ { return replace(pos1, 0, str, pos2, n); }
+
+ flex_string& insert(size_type pos, const value_type* s, size_type n)
+ { return replace(pos, 0, s, n); }
+
+ flex_string& insert(size_type pos, const value_type* s)
+ { return insert(pos, s, traits_type::length(s)); }
+
+ flex_string& insert(size_type pos, size_type n, value_type c)
+ { return replace(pos, 0, n, c); }
+
+ iterator insert(iterator p, value_type c = value_type())
+ {
+ const size_type pos = p - begin();
+ insert(pos, &c, 1);
+ return begin() + pos;
+ }
+
+ void insert(iterator p, size_type n, value_type c)
+ { insert(p - begin(), n, c); }
+
+ template<class InputIterator>
+ void insert(iterator p, InputIterator first, InputIterator last)
+ { replace(p, p, first, last); }
+
+ flex_string& erase(size_type pos = 0, size_type n = npos)
+ {
+ return replace(pos, Min(n, size() - pos), 0, value_type());
+ }
+
+ iterator erase(iterator position)
+ {
+ const size_type pos(position - begin());
+ erase(pos, 1);
+ return begin() + pos;
+ }
+
+ iterator erase(iterator first, iterator last)
+ {
+ const size_type pos(first - begin());
+ erase(pos, last - first);
+ return begin() + pos;
+ }
+
+ // @@@ replace
+
+ flex_string& replace(size_type pos1, size_type n1, const flex_string& str)
+ { return replace(pos1, n1, str, 0, npos); }
+
+ flex_string& replace(size_type pos1, size_type n1, const flex_string& str,
+ size_type pos2, size_type n2)
+ {
+ Enforce(pos1 <= length() && pos2 <= str.length(),
+ (std::out_of_range*)0, "");
+ return replace(pos1, n1, &*str.begin() + pos2,
+ Min(n2, str.length() - pos2));
+ }
+
+ flex_string& replace(const size_type d, size_type n1, const value_type* s1,
+ const size_type n2)
+ {
+ using namespace flex_string_details;
+ Enforce(d <= size(), (std::out_of_range*)0, "");
+ if (d + n1 > size()) n1 = size() - d;
+ const int delta = int(n2 - n1);
+ static const std::less_equal<const value_type*> le =
+ std::less_equal<const value_type*>();
+ const bool aliased = le(&*begin(), s1) && le(s1, &*end());
+
+ if (delta > 0)
+ {
+ if (capacity() < size() + delta)
+ {
+ // realloc the string
+ if (aliased)
+ {
+ const size_type offset = s1 - &*begin();
+ reserve(size() + delta);
+ s1 = &*begin() + offset;
+ }
+ else
+ {
+ reserve(size() + delta);
+ }
+ }
+
+ const value_type* s2 = s1 + n2;
+ value_type* d1 = &*begin() + d;
+ value_type* d2 = d1 + n1;
+
+ const int tailLen = int(&*end() - d2);
+
+ if (delta <= tailLen)
+ {
+ value_type* oldEnd = &*end();
+ // simple case
+ Storage::append(oldEnd - delta, delta);
+
+ pod_move(d2, d2 + (tailLen - delta), d2 + delta);
+ if (le(d2, s1))
+ {
+ if (aliased)
+ {
+ pod_copy(s1 + delta, s2 + delta, d1);
+ }
+ else
+ {
+ pod_copy(s1, s2, d1);
+ }
+ }
+ else
+ {
+ // d2 > s1
+ if (le(d2, s2))
+ {
+ BOOST_ASSERT(aliased);
+ pod_move(s1, d2, d1);
+ pod_move(d2 + delta, s2 + delta, d1 + (d2 - s1));
+ }
+ else
+ {
+ pod_move(s1, s2, d1);
+ }
+ }
+ }
+ else
+ {
+ const size_type sz = delta - tailLen;
+ Storage::append(s2 - sz, sz);
+ Storage::append(d2, tailLen);
+ pod_move(s1, s2 - (delta - tailLen), d1);
+ }
+ }
+ else
+ {
+ pod_move(s1, s1 + n2, &*begin() + d);
+ pod_move(&*begin() + d + n1, &*end(), &*begin() + d + n1 + delta);
+ resize(size() + delta);
+ }
+ return *this;
+ }
+
+ flex_string& replace(size_type pos, size_type n1, const value_type* s)
+ { return replace(pos, n1, s, traits_type::length(s)); }
+
+ flex_string& replace(size_type pos, size_type n1, size_type n2,
+ value_type c)
+ {
+ if (pos + n1 > size()) n1 = size() - pos;
+ const size_type oldSize = size();
+ if (pos + n2 > oldSize)
+ {
+ resize(pos + n2, c);
+ Storage::append(&*begin() + pos + n1, oldSize - pos - n1);
+ flex_string_details::pod_fill(&*begin() + pos,
+ &*begin() + oldSize, c);
+ }
+ else
+ {
+ if (n2 > n1)
+ {
+ const size_type delta = n2 - n1;
+ Storage::append(&*begin() + oldSize - delta, delta);
+ flex_string_details::pod_move(
+ &*begin() + pos + n1,
+ &*begin() + oldSize - delta,
+ &*begin() + pos + n2);
+ }
+ else
+ {
+ flex_string_details::pod_move(&*begin() + pos + n1, &*end(),
+ &*begin() + pos + n2);
+ resize(oldSize - (n1 - n2));
+ }
+ flex_string_details::pod_fill(&*begin() + pos,
+ &*begin() + pos + n2, c);
+ }
+ return *this;
+ }
+
+ flex_string& replace(iterator i1, iterator i2, const flex_string& str)
+ { return replace(i1, i2, str.c_str(), str.length()); }
+
+ flex_string& replace(iterator i1, iterator i2,
+ const value_type* s, size_type n)
+ { return replace(i1 - begin(), i2 - i1, s, n); }
+
+ flex_string& replace(iterator i1, iterator i2, const value_type* s)
+ { return replace(i1, i2, s, traits_type::length(s)); }
+
+ flex_string& replace(iterator i1, iterator i2,
+ size_type n, value_type c)
+ { return replace(i1 - begin(), i2 - i1, n, c); }
+
+private:
+ template <int i> class Selector {};
+
+// template <class U1, class U2> struct SameType
+// {
+// enum { result = false };
+// };
+//
+// template <class U> struct SameType<U, U>
+// {
+// enum { result = true };
+// };
+
+ template<class ReallyAnIntegral>
+ flex_string& ReplaceImpl(iterator i1, iterator i2,
+ ReallyAnIntegral n, ReallyAnIntegral c, Selector<1>)
+ {
+ return replace(i1, i2, static_cast<size_type>(n),
+ static_cast<value_type>(c));
+ }
+
+ template<class InputIterator>
+ flex_string& ReplaceImpl(iterator i1, iterator i2,
+ InputIterator b, InputIterator e, Selector<0>)
+ {
+ BOOST_ASSERT(false);
+ return *this;
+ }
+
+public:
+ template<class InputIterator>
+ flex_string& replace(iterator i1, iterator i2,
+ InputIterator j1, InputIterator j2)
+ {
+ return ReplaceImpl(i1, i2, j1, j2,
+ Selector<std::numeric_limits<InputIterator>::is_specialized>());
+ }
+
+ size_type copy(value_type* s, size_type n, size_type pos = 0) const
+ {
+ Enforce(pos <= size(), (std::out_of_range*)0, "");
+ n = Min(n, size() - pos);
+
+ flex_string_details::pod_copy(
+ &*begin() + pos,
+ &*begin() + pos + n,
+ s);
+ return n;
+ }
+
+ void swap(flex_string& rhs)
+ {
+ Storage& srhs = rhs;
+ this->Storage::swap(srhs);
+ }
+
+ // 21.3.6 string operations:
+ const value_type* c_str() const
+ { return Storage::c_str(); }
+
+ const value_type* data() const
+ { return Storage::data(); }
+
+ allocator_type get_allocator() const
+ { return Storage::get_allocator(); }
+
+ size_type find(const flex_string& str, size_type pos = 0) const
+ { return find(str.data(), pos, str.length()); }
+
+ size_type find (const value_type* s, size_type pos, size_type n) const
+ {
+ for (; pos <= size(); ++pos)
+ {
+ if (traits_type::compare(&*begin() + pos, s, n) == 0)
+ {
+ return pos;
+ }
+ }
+ return npos;
+ }
+
+ size_type find (const value_type* s, size_type pos = 0) const
+ { return find(s, pos, traits_type::length(s)); }
+
+ size_type find (value_type c, size_type pos = 0) const
+ { return find(&c, pos, 1); }
+
+ size_type rfind(const flex_string& str, size_type pos = npos) const
+ { return rfind(str.c_str(), pos, str.length()); }
+
+ size_type rfind(const value_type* s, size_type pos, size_type n) const
+ {
+ if (n > length()) return npos;
+ pos = Min(pos, length() - n);
+ if (n == 0) return pos;
+
+ const_iterator i(begin() + pos);
+ for (; ; --i)
+ {
+ if (traits_type::eq(*i, *s)
+ && traits_type::compare(&*i, s, n) == 0)
+ {
+ return i - begin();
+ }
+ if (i == begin()) break;
+ }
+ return npos;
+ }
+
+ size_type rfind(const value_type* s, size_type pos = npos) const
+ { return rfind(s, pos, traits_type::length(s)); }
+
+ size_type rfind(value_type c, size_type pos = npos) const
+ { return rfind(&c, pos, 1); }
+
+ size_type find_first_of(const flex_string& str, size_type pos = 0) const
+ { return find_first_of(str.c_str(), pos, str.length()); }
+
+ size_type find_first_of(const value_type* s,
+ size_type pos, size_type n) const
+ {
+ if (pos > length() || n == 0) return npos;
+ const_iterator i(begin() + pos),
+ finish(end());
+ for (; i != finish; ++i)
+ {
+ if (traits_type::find(s, n, *i) != 0)
+ {
+ return i - begin();
+ }
+ }
+ return npos;
+ }
+
+ size_type find_first_of(const value_type* s, size_type pos = 0) const
+ { return find_first_of(s, pos, traits_type::length(s)); }
+
+ size_type find_first_of(value_type c, size_type pos = 0) const
+ { return find_first_of(&c, pos, 1); }
+
+ size_type find_last_of (const flex_string& str,
+ size_type pos = npos) const
+ { return find_last_of(str.c_str(), pos, str.length()); }
+
+ size_type find_last_of (const value_type* s, size_type pos,
+ size_type n) const
+ {
+ if (!empty() && n > 0)
+ {
+ pos = Min(pos, length() - 1);
+ const_iterator i(begin() + pos);
+ for (;; --i)
+ {
+ if (traits_type::find(s, n, *i) != 0)
+ {
+ return i - begin();
+ }
+ if (i == begin()) break;
+ }
+ }
+ return npos;
+ }
+
+ size_type find_last_of (const value_type* s,
+ size_type pos = npos) const
+ { return find_last_of(s, pos, traits_type::length(s)); }
+
+ size_type find_last_of (value_type c, size_type pos = npos) const
+ { return find_last_of(&c, pos, 1); }
+
+ size_type find_first_not_of(const flex_string& str,
+ size_type pos = 0) const
+ { return find_first_not_of(str.data(), pos, str.size()); }
+
+ size_type find_first_not_of(const value_type* s, size_type pos,
+ size_type n) const
+ {
+ if (pos < length())
+ {
+ const_iterator
+ i(begin() + pos),
+ finish(end());
+ for (; i != finish; ++i)
+ {
+ if (traits_type::find(s, n, *i) == 0)
+ {
+ return i - begin();
+ }
+ }
+ }
+ return npos;
+ }
+
+ size_type find_first_not_of(const value_type* s,
+ size_type pos = 0) const
+ { return find_first_not_of(s, pos, traits_type::length(s)); }
+
+ size_type find_first_not_of(value_type c, size_type pos = 0) const
+ { return find_first_not_of(&c, pos, 1); }
+
+ size_type find_last_not_of(const flex_string& str,
+ size_type pos = npos) const
+ { return find_last_not_of(str.c_str(), pos, str.length()); }
+
+ size_type find_last_not_of(const value_type* s, size_type pos,
+ size_type n) const
+ {
+ if (!empty())
+ {
+ pos = Min(pos, size() - 1);
+ const_iterator i(begin() + pos);
+ for (;; --i)
+ {
+ if (traits_type::find(s, n, *i) == 0)
+ {
+ return i - begin();
+ }
+ if (i == begin()) break;
+ }
+ }
+ return npos;
+ }
+
+ size_type find_last_not_of(const value_type* s,
+ size_type pos = npos) const
+ { return find_last_not_of(s, pos, traits_type::length(s)); }
+
+ size_type find_last_not_of (value_type c, size_type pos = npos) const
+ { return find_last_not_of(&c, pos, 1); }
+
+ flex_string substr(size_type pos = 0, size_type n = npos) const
+ {
+ Enforce(pos <= size(), (std::out_of_range*)0, "");
+ return flex_string(data() + pos, Min(n, size() - pos));
+ }
+
+ std::ptrdiff_t compare(const flex_string& str) const
+ { return compare(0, size(), str.data(), str.length()); }
+
+ std::ptrdiff_t compare(size_type pos1, size_type n1,
+ const flex_string& str) const
+ { return compare(pos1, n1, str.data(), str.size()); }
+
+ std::ptrdiff_t compare(size_type pos1, size_type n1,
+ const value_type* s, size_type n2 = npos) const
+ {
+ Enforce(pos1 <= size(), (std::out_of_range*)0, "");
+
+ n1 = Min(size() - pos1, n1);
+ const std::ptrdiff_t result = traits_type::compare(data() + pos1, s, Min(n1, n2));
+ return (result != 0) ? result : int(n1 - n2);
+ }
+
+ std::ptrdiff_t compare(size_type pos1, size_type n1,
+ const flex_string& str,
+ size_type pos2, size_type n2) const
+ {
+ Enforce(pos2 <= str.size(), (std::out_of_range*)0, "");
+ return compare(pos1, n1, str.data() + pos2, Min(n2, str.size() - pos2));
+ }
+
+ std::ptrdiff_t compare(const value_type* s) const
+ { return compare(0, size(), s, traits_type::length(s)); }
+};
+
+// non-member functions
+template <typename E, class T, class A, class S>
+flex_string<E, T, A, S> operator+(const flex_string<E, T, A, S>& lhs,
+ const flex_string<E, T, A, S>& rhs)
+{
+ flex_string<E, T, A, S> result;
+ result.reserve(lhs.size() + rhs.size());
+ result.append(lhs);
+ result.append(rhs);
+ return result;
+}
+
+template <typename E, class T, class A, class S>
+flex_string<E, T, A, S> operator+(const typename flex_string<E, T, A, S>::value_type* lhs,
+ const flex_string<E, T, A, S>& rhs)
+{
+ flex_string<E, T, A, S> result;
+ const typename flex_string<E, T, A, S>::size_type len =
+ flex_string<E, T, A, S>::traits_type::length(lhs);
+ result.reserve(len + rhs.size());
+ result.append(lhs, len);
+ result.append(rhs);
+ return result;
+}
+
+template <typename E, class T, class A, class S>
+flex_string<E, T, A, S> operator+(
+ typename flex_string<E, T, A, S>::value_type lhs,
+ const flex_string<E, T, A, S>& rhs)
+{
+ flex_string<E, T, A, S> result;
+ result.reserve(1 + rhs.size());
+ result.push_back(lhs);
+ result.append(rhs);
+ return result;
+}
+
+template <typename E, class T, class A, class S>
+flex_string<E, T, A, S> operator+(const flex_string<E, T, A, S>& lhs,
+ const typename flex_string<E, T, A, S>::value_type* rhs)
+{
+ typedef typename flex_string<E, T, A, S>::size_type size_type;
+ typedef typename flex_string<E, T, A, S>::traits_type traits_type;
+
+ flex_string<E, T, A, S> result;
+ const size_type len = traits_type::length(rhs);
+ result.reserve(lhs.size() + len);
+ result.append(lhs);
+ result.append(rhs, len);
+ return result;
+}
+
+template <typename E, class T, class A, class S>
+flex_string<E, T, A, S> operator+(const flex_string<E, T, A, S>& lhs,
+ typename flex_string<E, T, A, S>::value_type rhs)
+{
+ flex_string<E, T, A, S> result;
+ result.reserve(lhs.size() + 1);
+ result.append(lhs);
+ result.push_back(rhs);
+ return result;
+}
+
+template <typename E, class T, class A, class S>
+inline bool operator==(const flex_string<E, T, A, S>& lhs,
+ const flex_string<E, T, A, S>& rhs)
+{ return lhs.compare(rhs) == 0; }
+
+template <typename E, class T, class A, class S>
+inline bool operator==(const typename flex_string<E, T, A, S>::value_type* lhs,
+ const flex_string<E, T, A, S>& rhs)
+{ return rhs == lhs; }
+
+template <typename E, class T, class A, class S>
+inline bool operator==(const flex_string<E, T, A, S>& lhs,
+ const typename flex_string<E, T, A, S>::value_type* rhs)
+{ return lhs.compare(rhs) == 0; }
+
+template <typename E, class T, class A, class S>
+inline bool operator!=(const flex_string<E, T, A, S>& lhs,
+ const flex_string<E, T, A, S>& rhs)
+{ return !(lhs == rhs); }
+
+template <typename E, class T, class A, class S>
+inline bool operator!=(const typename flex_string<E, T, A, S>::value_type* lhs,
+ const flex_string<E, T, A, S>& rhs)
+{ return !(lhs == rhs); }
+
+template <typename E, class T, class A, class S>
+inline bool operator!=(const flex_string<E, T, A, S>& lhs,
+ const typename flex_string<E, T, A, S>::value_type* rhs)
+{ return !(lhs == rhs); }
+
+template <typename E, class T, class A, class S>
+inline bool operator<(const flex_string<E, T, A, S>& lhs,
+ const flex_string<E, T, A, S>& rhs)
+{ return lhs.compare(rhs) < 0; }
+
+template <typename E, class T, class A, class S>
+inline bool operator<(const flex_string<E, T, A, S>& lhs,
+ const typename flex_string<E, T, A, S>::value_type* rhs)
+{ return lhs.compare(rhs) < 0; }
+
+template <typename E, class T, class A, class S>
+inline bool operator<(const typename flex_string<E, T, A, S>::value_type* lhs,
+ const flex_string<E, T, A, S>& rhs)
+{ return rhs.compare(lhs) > 0; }
+
+template <typename E, class T, class A, class S>
+inline bool operator>(const flex_string<E, T, A, S>& lhs,
+ const flex_string<E, T, A, S>& rhs)
+{ return rhs < lhs; }
+
+template <typename E, class T, class A, class S>
+inline bool operator>(const flex_string<E, T, A, S>& lhs,
+ const typename flex_string<E, T, A, S>::value_type* rhs)
+{ return rhs < lhs; }
+
+template <typename E, class T, class A, class S>
+bool operator>(const typename flex_string<E, T, A, S>::value_type* lhs,
+ const flex_string<E, T, A, S>& rhs)
+{ return rhs < lhs; }
+
+template <typename E, class T, class A, class S>
+inline bool operator<=(const flex_string<E, T, A, S>& lhs,
+ const flex_string<E, T, A, S>& rhs)
+{ return !(rhs < lhs); }
+
+template <typename E, class T, class A, class S>
+inline bool operator<=(const flex_string<E, T, A, S>& lhs,
+ const typename flex_string<E, T, A, S>::value_type* rhs)
+{ return !(rhs < lhs); }
+
+template <typename E, class T, class A, class S>
+bool operator<=(const typename flex_string<E, T, A, S>::value_type* lhs,
+ const flex_string<E, T, A, S>& rhs)
+{ return !(rhs < lhs); }
+
+template <typename E, class T, class A, class S>
+bool operator>=(const flex_string<E, T, A, S>& lhs,
+ const flex_string<E, T, A, S>& rhs)
+{ return !(lhs < rhs); }
+
+template <typename E, class T, class A, class S>
+bool operator>=(const flex_string<E, T, A, S>& lhs,
+ const typename flex_string<E, T, A, S>::value_type* rhs)
+{ return !(lhs < rhs); }
+
+template <typename E, class T, class A, class S>
+inline bool operator>=(const typename flex_string<E, T, A, S>::value_type* lhs,
+ const flex_string<E, T, A, S>& rhs)
+{ return !(lhs < rhs); }
+
+// subclause 21.3.7.8:
+//void swap(flex_string<E, T, A, S>& lhs, flex_string<E, T, A, S>& rhs); // to do
+
+template <typename E, class T, class A, class S>
+inline std::basic_istream<typename flex_string<E, T, A, S>::value_type,
+ typename flex_string<E, T, A, S>::traits_type>&
+operator>>(
+ std::basic_istream<typename flex_string<E, T, A, S>::value_type,
+ typename flex_string<E, T, A, S>::traits_type>& is,
+ flex_string<E, T, A, S>& str);
+
+template <typename E, class T, class A, class S>
+std::basic_ostream<typename flex_string<E, T, A, S>::value_type,
+ typename flex_string<E, T, A, S>::traits_type>&
+operator<<(
+ std::basic_ostream<typename flex_string<E, T, A, S>::value_type,
+ typename flex_string<E, T, A, S>::traits_type>& os,
+ const flex_string<E, T, A, S>& str)
+{ return os << str.c_str(); }
+
+template <typename E, class T, class A, class S>
+std::basic_istream<typename flex_string<E, T, A, S>::value_type,
+ typename flex_string<E, T, A, S>::traits_type>&
+getline(
+ std::basic_istream<typename flex_string<E, T, A, S>::value_type,
+ typename flex_string<E, T, A, S>::traits_type>& is,
+ flex_string<E, T, A, S>& str,
+ typename flex_string<E, T, A, S>::value_type delim);
+
+template <typename E, class T, class A, class S>
+std::basic_istream<typename flex_string<E, T, A, S>::value_type,
+ typename flex_string<E, T, A, S>::traits_type>&
+getline(
+ std::basic_istream<typename flex_string<E, T, A, S>::value_type,
+ typename flex_string<E, T, A, S>::traits_type>& is,
+ flex_string<E, T, A, S>& str);
+
+template <typename E1, class T, class A, class S>
+const typename flex_string<E1, T, A, S>::size_type
+flex_string<E1, T, A, S>::npos = (typename flex_string<E1, T, A, S>::size_type)(-1);
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace util
+} // namespace wave
+} // namespace boost
+
+#if BOOST_WAVE_SERIALIZATION != 0
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace serialization {
+
+#if !defined(BOOST_WAVE_FLEX_STRING_SERIALIZATION_HACK)
+
+// FIXME: This doesn't work because of the missing flex_string::operator>>()
+template <typename E, class T, class A, class S>
+struct implementation_level<boost::wave::util::flex_string<E, T, A, S> >
+{
+ typedef mpl::integral_c_tag tag;
+ typedef mpl::int_<boost::serialization::primitive_type> type;
+ BOOST_STATIC_CONSTANT(
+ int,
+ value = implementation_level::type::value
+ );
+};
+
+#else
+
+// We serialize flex_strings as vectors of char's for now
+template<class Archive, typename E, class T, class A, class S>
+inline void save(Archive & ar,
+ boost::wave::util::flex_string<E, T, A, S> const &t,
+ const unsigned int file_version)
+{
+ boost::serialization::stl::save_collection<
+ Archive, wave::util::flex_string<E, T, A, S> >(ar, t);
+}
+
+template<class Archive, typename E, class T, class A, class S>
+inline void load(Archive & ar, boost::wave::util::flex_string<E, T, A, S> &t,
+ const unsigned int file_version)
+{
+ boost::serialization::stl::load_collection<
+ Archive, boost::wave::util::flex_string<E, T, A, S>,
+ boost::serialization::stl::archive_input_seq<
+ Archive, boost::wave::util::flex_string<E, T, A, S> >,
+ boost::serialization::stl::reserve_imp<
+ boost::wave::util::flex_string<E, T, A, S> >
+ >(ar, t);
+}
+
+// split non-intrusive serialization function member into separate
+// non intrusive save/load member functions
+template<class Archive, typename E, class T, class A, class S>
+inline void serialize(Archive & ar, boost::wave::util::flex_string<E, T, A, S> &t,
+ const unsigned int file_version)
+{
+ boost::serialization::split_free(ar, t, file_version);
+}
+
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+}} // boost::serialization
+#endif
+
+// the suffix header occurs after all of the code
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_SUFFIX
+#endif
+
+#endif // FLEX_STRING_INC_
diff --git a/boost/boost/wave/util/functor_input.hpp b/boost/boost/wave/util/functor_input.hpp
new file mode 100644
index 00000000000..73b4be2c35a
--- /dev/null
+++ b/boost/boost/wave/util/functor_input.hpp
@@ -0,0 +1,155 @@
+/*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+
+ http://www.boost.org/
+
+ Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(FUNCTOR_INPUT_HPP_ED3A4C21_8F8A_453F_B438_08214FAC106A_INCLUDED)
+#define FUNCTOR_INPUT_HPP_ED3A4C21_8F8A_453F_B438_08214FAC106A_INCLUDED
+
+#include <boost/assert.hpp>
+#include <boost/spirit/iterator/multi_pass.hpp>
+#include <boost/wave/wave_config.hpp>
+
+// this must occur after all of the includes and before any code appears
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_PREFIX
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace wave {
+namespace util {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// class functor_input
+//
+// Implementation of the InputPolicy used by multi_pass
+// functor_input gets tokens from a functor
+// Note: the functor must have a typedef for result_type
+// It also must have a static variable of type result_type defined
+// to represent eof that is called eof.
+//
+// This functor input policy template is essentially the same as the
+// predefined multi_pass functor_input policy. The difference is,
+// that the first token is not read at initialization time, but only
+// just before returning the first token. Additionally it does not
+// call operator new() twice but only once.
+//
+///////////////////////////////////////////////////////////////////////////////
+struct functor_input {
+
+ template <typename FunctorT>
+ class inner {
+ private:
+ typedef typename FunctorT::result_type result_type;
+
+ public:
+ typedef result_type value_type;
+
+ private:
+ struct Data {
+ Data(FunctorT const &ftor_)
+ : ftor(ftor_), was_initialized(false)
+ {}
+
+ FunctorT ftor;
+ value_type curtok;
+ bool was_initialized;
+ };
+
+ // Needed by compilers not implementing the resolution to DR45. For
+ // reference, see
+ // http://www.open-std.org/JTC1/SC22/WG21/docs/cwg_defects.html#45.
+
+ friend struct Data;
+
+ public:
+ typedef std::ptrdiff_t difference_type;
+ typedef result_type *pointer;
+ typedef result_type &reference;
+
+ protected:
+ inner()
+ : data(0)
+ {}
+
+ inner(FunctorT const &x)
+ : data(new Data(x))
+ {}
+
+ inner(inner const &x)
+ : data(x.data)
+ {}
+
+ void destroy()
+ {
+ delete data;
+ data = 0;
+ }
+
+ bool same_input(inner const &x) const
+ {
+ return data == x.data;
+ }
+
+ void swap(inner &x)
+ {
+ boost::spirit::impl::mp_swap(data, x.data);
+ }
+
+ void ensure_initialized() const
+ {
+ if (data && !data->was_initialized) {
+ data->curtok = (data->ftor)(); // get the first token
+ data->was_initialized = true;
+ }
+ }
+
+ public:
+ reference get_input() const
+ {
+ ensure_initialized();
+ return data->curtok;
+ }
+
+ void advance_input()
+ {
+ BOOST_ASSERT(0 != data);
+ data->curtok = (data->ftor)();
+ data->was_initialized = true;
+ }
+
+ bool input_at_eof() const
+ {
+ ensure_initialized();
+ return !data || data->curtok == data->ftor.eof;
+ }
+
+ FunctorT& get_functor() const
+ {
+ BOOST_ASSERT(0 != data);
+ return data->ftor;
+ }
+
+ private:
+ mutable Data *data;
+ };
+};
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace util
+} // namespace wave
+} // namespace boost
+
+// the suffix header occurs after all of the code
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_SUFFIX
+#endif
+
+#endif // !defined(FUNCTOR_INPUT_HPP_ED3A4C21_8F8A_453F_B438_08214FAC106A_INCLUDED)
diff --git a/boost/boost/wave/util/insert_whitespace_detection.hpp b/boost/boost/wave/util/insert_whitespace_detection.hpp
new file mode 100644
index 00000000000..6c50ff6c8ce
--- /dev/null
+++ b/boost/boost/wave/util/insert_whitespace_detection.hpp
@@ -0,0 +1,352 @@
+/*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+
+ Detect the need to insert a whitespace token into the output stream
+
+ http://www.boost.org/
+
+ Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(INSERT_WHITESPACE_DETECTION_HPP_765EF77B_0513_4967_BDD6_6A38148C4C96_INCLUDED)
+#define INSERT_WHITESPACE_DETECTION_HPP_765EF77B_0513_4967_BDD6_6A38148C4C96_INCLUDED
+
+#include <boost/wave/wave_config.hpp>
+#include <boost/wave/token_ids.hpp>
+
+// this must occur after all of the includes and before any code appears
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_PREFIX
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace wave {
+namespace util {
+
+namespace impl {
+
+// T_IDENTIFIER
+ template <typename StringT>
+ inline bool
+ would_form_universal_char (StringT const &value)
+ {
+ if ('u' != value[0] && 'U' != value[0])
+ return false;
+ if ('u' == value[0] && value.size() < 5)
+ return false;
+ if ('U' == value[0] && value.size() < 9)
+ return false;
+
+ typename StringT::size_type pos =
+ value.find_first_not_of("0123456789abcdefABCDEF", 1);
+
+ if (StringT::npos == pos ||
+ ('u' == value[0] && pos > 5) ||
+ ('U' == value[0] && pos > 9))
+ {
+ return true; // would form an universal char
+ }
+ return false;
+ }
+ template <typename StringT>
+ inline bool
+ handle_identifier(boost::wave::token_id prev,
+ boost::wave::token_id before, StringT const &value)
+ {
+ using namespace boost::wave;
+ switch (static_cast<unsigned int>(prev)) {
+ case T_IDENTIFIER:
+ case T_NONREPLACABLE_IDENTIFIER:
+ case T_COMPL_ALT:
+ case T_OR_ALT:
+ case T_AND_ALT:
+ case T_NOT_ALT:
+ case T_XOR_ALT:
+ case T_ANDASSIGN_ALT:
+ case T_ORASSIGN_ALT:
+ case T_XORASSIGN_ALT:
+ case T_NOTEQUAL_ALT:
+ case T_FIXEDPOINTLIT:
+ return true;
+
+ case T_FLOATLIT:
+ case T_INTLIT:
+ case T_PP_NUMBER:
+ return (value.size() > 1 || (value[0] != 'e' && value[0] != 'E'));
+
+ // avoid constructing universal characters (\u1234)
+ case TOKEN_FROM_ID('\\', UnknownTokenType):
+ return would_form_universal_char(value);
+ }
+ return false;
+ }
+// T_INTLIT
+ inline bool
+ handle_intlit(boost::wave::token_id prev, boost::wave::token_id before)
+ {
+ using namespace boost::wave;
+ switch (static_cast<unsigned int>(prev)) {
+ case T_IDENTIFIER:
+ case T_NONREPLACABLE_IDENTIFIER:
+ case T_INTLIT:
+ case T_FLOATLIT:
+ case T_FIXEDPOINTLIT:
+ case T_PP_NUMBER:
+ return true;
+ }
+ return false;
+ }
+// T_FLOATLIT
+ inline bool
+ handle_floatlit(boost::wave::token_id prev,
+ boost::wave::token_id before)
+ {
+ using namespace boost::wave;
+ switch (static_cast<unsigned int>(prev)) {
+ case T_IDENTIFIER:
+ case T_NONREPLACABLE_IDENTIFIER:
+ case T_INTLIT:
+ case T_FLOATLIT:
+ case T_FIXEDPOINTLIT:
+ case T_PP_NUMBER:
+ return true;
+ }
+ return false;
+ }
+// <% T_LEFTBRACE
+ inline bool
+ handle_alt_leftbrace(boost::wave::token_id prev,
+ boost::wave::token_id before)
+ {
+ using namespace boost::wave;
+ switch (static_cast<unsigned int>(prev)) {
+ case T_LESS: // <<%
+ case T_SHIFTLEFT: // <<<%
+ return true;
+ }
+ return false;
+ }
+// <: T_LEFTBRACKET
+ inline bool
+ handle_alt_leftbracket(boost::wave::token_id prev,
+ boost::wave::token_id before)
+ {
+ using namespace boost::wave;
+ switch (static_cast<unsigned int>(prev)) {
+ case T_LESS: // <<:
+ case T_SHIFTLEFT: // <<<:
+ return true;
+ }
+ return false;
+ }
+// T_FIXEDPOINTLIT
+ inline bool
+ handle_fixedpointlit(boost::wave::token_id prev,
+ boost::wave::token_id before)
+ {
+ using namespace boost::wave;
+ switch (static_cast<unsigned int>(prev)) {
+ case T_IDENTIFIER:
+ case T_NONREPLACABLE_IDENTIFIER:
+ case T_INTLIT:
+ case T_FLOATLIT:
+ case T_FIXEDPOINTLIT:
+ case T_PP_NUMBER:
+ return true;
+ }
+ return false;
+ }
+// T_DOT
+ inline bool
+ handle_dot(boost::wave::token_id prev, boost::wave::token_id before)
+ {
+ using namespace boost::wave;
+ switch (static_cast<unsigned int>(prev)) {
+ case T_DOT:
+ if (T_DOT == before)
+ return true; // ...
+ break;
+ }
+ return false;
+ }
+// T_QUESTION_MARK
+ inline bool
+ handle_questionmark(boost::wave::token_id prev,
+ boost::wave::token_id before)
+ {
+ using namespace boost::wave;
+ switch(static_cast<unsigned int>(prev)) {
+ case TOKEN_FROM_ID('\\', UnknownTokenType): // \?
+ case T_QUESTION_MARK: // ??
+ return true;
+ }
+ return false;
+ }
+// T_NEWLINE
+ inline bool
+ handle_newline(boost::wave::token_id prev,
+ boost::wave::token_id before)
+ {
+ using namespace boost::wave;
+ switch(static_cast<unsigned int>(prev)) {
+ case TOKEN_FROM_ID('\\', UnknownTokenType): // \ \n
+ case T_DIVIDE:
+ if (T_QUESTION_MARK == before)
+ return true; // ?/\n // may be \\n
+ break;
+ }
+ return false;
+ }
+
+} // namespace impl
+
+class insert_whitespace_detection
+{
+public:
+ insert_whitespace_detection()
+ : prev(boost::wave::T_EOF), beforeprev(boost::wave::T_EOF)
+ {}
+
+ template <typename StringT>
+ bool must_insert(boost::wave::token_id current, StringT const &value)
+ {
+ using namespace boost::wave;
+ switch (static_cast<unsigned int>(current)) {
+ case T_NONREPLACABLE_IDENTIFIER:
+ case T_IDENTIFIER:
+ return impl::handle_identifier(prev, beforeprev, value);
+ case T_PP_NUMBER:
+ case T_INTLIT:
+ return impl::handle_intlit(prev, beforeprev);
+ case T_FLOATLIT:
+ return impl::handle_floatlit(prev, beforeprev);
+ case T_STRINGLIT:
+ if (TOKEN_FROM_ID('L', IdentifierTokenType) == prev) // 'L'
+ return true;
+ break;
+ case T_LEFTBRACE_ALT:
+ return impl::handle_alt_leftbrace(prev, beforeprev);
+ case T_LEFTBRACKET_ALT:
+ return impl::handle_alt_leftbracket(prev, beforeprev);
+ case T_FIXEDPOINTLIT:
+ return impl::handle_fixedpointlit(prev, beforeprev);
+ case T_DOT:
+ return impl::handle_dot(prev, beforeprev);
+ case T_QUESTION_MARK:
+ return impl::handle_questionmark(prev, beforeprev);
+ case T_NEWLINE:
+ return impl::handle_newline(prev, beforeprev);
+
+ case T_LEFTPAREN:
+ case T_RIGHTPAREN:
+ case T_LEFTBRACKET:
+ case T_RIGHTBRACKET:
+ case T_SEMICOLON:
+ case T_COMMA:
+ case T_COLON:
+ switch (static_cast<unsigned int>(prev)) {
+ case T_LEFTPAREN:
+ case T_RIGHTPAREN:
+ case T_LEFTBRACKET:
+ case T_RIGHTBRACKET:
+ case T_LEFTBRACE:
+ case T_RIGHTBRACE:
+ return false; // no insertion between parens/brackets/braces
+
+ default:
+ break;
+ }
+ break;
+
+ case T_LEFTBRACE:
+ case T_RIGHTBRACE:
+ switch (static_cast<unsigned int>(prev)) {
+ case T_LEFTPAREN:
+ case T_RIGHTPAREN:
+ case T_LEFTBRACKET:
+ case T_RIGHTBRACKET:
+ case T_LEFTBRACE:
+ case T_RIGHTBRACE:
+ case T_SEMICOLON:
+ case T_COMMA:
+ case T_COLON:
+ return false; // no insertion between parens/brackets/braces
+
+ case T_QUESTION_MARK:
+ if (T_QUESTION_MARK == beforeprev)
+ return true;
+ break;
+
+ default:
+ break;
+ }
+ break;
+
+ case T_MINUS:
+ case T_MINUSMINUS:
+ case T_LESS:
+ case T_EQUAL:
+ case T_ASSIGN:
+ case T_GREATER:
+ case T_DIVIDE:
+ case T_CHARLIT:
+ case T_NOT:
+ case T_NOTEQUAL:
+ case T_DIVIDEASSIGN:
+ case T_MINUSASSIGN:
+ if (T_QUESTION_MARK == prev && T_QUESTION_MARK == beforeprev)
+ return true; // ??{op}
+ break;
+
+ case T_COMPL_ALT:
+ case T_OR_ALT:
+ case T_AND_ALT:
+ case T_NOT_ALT:
+ case T_XOR_ALT:
+ case T_ANDASSIGN_ALT:
+ case T_ORASSIGN_ALT:
+ case T_XORASSIGN_ALT:
+ case T_NOTEQUAL_ALT:
+ if (T_IDENTIFIER == prev || T_NONREPLACABLE_IDENTIFIER == prev ||
+ IS_CATEGORY(prev, KeywordTokenType))
+ return true;
+ break;
+
+ case T_STAR:
+ if (T_STAR == prev)
+ return false; // '*****' do not need to be separated
+ break;
+ }
+
+ // else, handle operators separately
+ if (IS_CATEGORY(current, OperatorTokenType) &&
+ IS_CATEGORY(prev, OperatorTokenType))
+ {
+ return true; // operators must be delimited always
+ }
+ return false;
+ }
+ void shift_tokens (boost::wave::token_id next_id)
+ {
+ beforeprev = prev;
+ prev = next_id;
+ }
+
+private:
+ boost::wave::token_id prev; // the previous analyzed token
+ boost::wave::token_id beforeprev; // the token before the previous
+};
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace util
+} // namespace wave
+} // namespace boost
+
+// the suffix header occurs after all of the code
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_SUFFIX
+#endif
+
+#endif // !defined(INSERT_WHITESPACE_DETECTION_HPP_765EF77B_0513_4967_BDD6_6A38148C4C96_INCLUDED)
diff --git a/boost/boost/wave/util/interpret_pragma.hpp b/boost/boost/wave/util/interpret_pragma.hpp
new file mode 100644
index 00000000000..b826fd1879e
--- /dev/null
+++ b/boost/boost/wave/util/interpret_pragma.hpp
@@ -0,0 +1,202 @@
+/*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+
+ http://www.boost.org/
+
+ Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(INTERPRET_PRAGMA_HPP_B1F2315E_C5CE_4ED1_A343_0EF548B7942A_INCLUDED)
+#define INTERPRET_PRAGMA_HPP_B1F2315E_C5CE_4ED1_A343_0EF548B7942A_INCLUDED
+
+#include <string>
+#include <list>
+
+#include <boost/spirit/core.hpp>
+#if SPIRIT_VERSION >= 0x1700
+#include <boost/spirit/actor/assign_actor.hpp>
+#include <boost/spirit/actor/push_back_actor.hpp>
+#endif // SPIRIT_VERSION >= 0x1700
+
+#include <boost/wave/wave_config.hpp>
+
+#include <boost/wave/util/pattern_parser.hpp>
+#include <boost/wave/util/macro_helpers.hpp>
+
+#include <boost/wave/token_ids.hpp>
+#include <boost/wave/cpp_exceptions.hpp>
+#include <boost/wave/cpp_iteration_context.hpp>
+#include <boost/wave/language_support.hpp>
+
+#if !defined(spirit_append_actor)
+#if SPIRIT_VERSION >= 0x1700
+#define spirit_append_actor(actor) boost::spirit::push_back_a(actor)
+#define spirit_assign_actor(actor) boost::spirit::assign_a(actor)
+#else
+#define spirit_append_actor(actor) boost::spirit::append(actor)
+#define spirit_assign_actor(actor) boost::spirit::assign(actor)
+#endif // SPIRIT_VERSION >= 0x1700
+#endif // !defined(spirit_append_actor)
+
+// this must occur after all of the includes and before any code appears
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_PREFIX
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace wave {
+namespace util {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// The function interpret_pragma interprets the given token sequence as the
+// body of a #pragma directive (or parameter to the _Pragma operator) and
+// executes the actions associated with recognized Wave specific options.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename ContextT, typename IteratorT, typename ContainerT>
+inline bool
+interpret_pragma(ContextT &ctx, typename ContextT::token_type const &act_token,
+ IteratorT it, IteratorT const &end, ContainerT &pending)
+{
+ typedef typename ContextT::token_type token_type;
+ typedef typename token_type::string_type string_type;
+
+ using namespace cpplexer;
+ if (T_IDENTIFIER == token_id(*it)) {
+ // check for pragma wave ...
+ if ((*it).get_value() == BOOST_WAVE_PRAGMA_KEYWORD)
+ {
+ // this is a wave specific option, it should have the form:
+ //
+ // #pragma command option(value)
+ //
+ // where
+ // 'command' is the value of the preprocessor constant
+ // BOOST_WAVE_PRAGMA_KEYWORD (defaults to "wave") and
+ // '(value)' is required only for some pragma directives (this is
+ // optional)
+ //
+ // All recognized #pragma operators are forwarded to the supplied
+ // preprocessing hook.
+ using namespace boost::spirit;
+ token_type option;
+ ContainerT values;
+
+ if (!parse (++it, end,
+ ( ch_p(T_IDENTIFIER)
+ [
+ spirit_assign_actor(option)
+ ]
+ | pattern_p(KeywordTokenType, TokenTypeMask)
+ [
+ spirit_assign_actor(option)
+ ]
+ | pattern_p(OperatorTokenType|AltExtTokenType,
+ ExtTokenTypeMask) // and, bit_and etc.
+ [
+ spirit_assign_actor(option)
+ ]
+ | pattern_p(BoolLiteralTokenType, TokenTypeMask)
+ [
+ spirit_assign_actor(option)
+ ]
+ )
+ >> !( ch_p(T_LEFTPAREN)
+ >> lexeme_d[
+ *(anychar_p[spirit_append_actor(values)] - ch_p(T_RIGHTPAREN))
+ ]
+ >> ch_p(T_RIGHTPAREN)
+ ),
+ pattern_p(WhiteSpaceTokenType, TokenTypeMask)).hit)
+ {
+ BOOST_WAVE_THROW(preprocess_exception, ill_formed_pragma_option,
+ impl::as_string<string_type>(it, end).c_str(),
+ act_token.get_position());
+ }
+
+ // remove the falsely matched closing parenthesis
+ if (values.size() > 0) {
+ BOOST_ASSERT(T_RIGHTPAREN == values.back());
+ typename ContainerT::reverse_iterator rit = values.rbegin();
+ values.erase((++rit).base());
+ }
+
+ // decode the option (call the context_policy hook)
+ if (!ctx.interpret_pragma(pending, option, values, act_token)) {
+ // unknown #pragma option
+ string_type option_str ((*it).get_value());
+
+ option_str += option.get_value();
+ if (values.size() > 0) {
+ option_str += "(";
+ option_str += impl::as_string(values);
+ option_str += ")";
+ }
+ BOOST_WAVE_THROW(preprocess_exception, ill_formed_pragma_option,
+ option_str.c_str(), act_token.get_position());
+ }
+ return true;
+ }
+#if BOOST_WAVE_SUPPORT_PRAGMA_ONCE != 0
+ else if ((*it).get_value() == "once") {
+ // #pragma once
+ return ctx.add_pragma_once_header(ctx.get_current_filename());
+ }
+#endif
+#if BOOST_WAVE_SUPPORT_PRAGMA_MESSAGE != 0
+ else if ((*it).get_value() == "message") {
+ // #pragma message(...) or #pragma message ...
+ using namespace boost::spirit;
+ ContainerT values;
+
+ if (!parse (++it, end,
+ ( ( ch_p(T_LEFTPAREN)
+ >> lexeme_d[
+ *(anychar_p[spirit_append_actor(values)] - ch_p(T_RIGHTPAREN))
+ ]
+ >> ch_p(T_RIGHTPAREN)
+ )
+ | lexeme_d[
+ *(anychar_p[spirit_append_actor(values)] - ch_p(T_NEWLINE))
+ ]
+ ),
+ pattern_p(WhiteSpaceTokenType, TokenTypeMask)
+ ).hit
+ )
+ {
+ BOOST_WAVE_THROW(preprocess_exception, ill_formed_pragma_message,
+ impl::as_string<string_type>(it, end).c_str(),
+ act_token.get_position());
+ }
+
+ // remove the falsely matched closing parenthesis/newline
+ if (values.size() > 0) {
+ BOOST_ASSERT(T_RIGHTPAREN == values.back() || T_NEWLINE == values.back());
+ typename ContainerT::reverse_iterator rit = values.rbegin();
+ values.erase((++rit).base());
+ }
+
+ // output the message itself
+ BOOST_WAVE_THROW(preprocess_exception, pragma_message_directive,
+ impl::as_string(values).c_str(), act_token.get_position());
+ }
+#endif
+ }
+ return false;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace util
+} // namespace wave
+} // namespace boost
+
+// the suffix header occurs after all of the code
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_SUFFIX
+#endif
+
+#endif // !defined(INTERPRET_PRAGMA_HPP_B1F2315E_C5CE_4ED1_A343_0EF548B7942A_INCLUDED)
diff --git a/boost/boost/wave/util/iteration_context.hpp b/boost/boost/wave/util/iteration_context.hpp
new file mode 100644
index 00000000000..fa30307c2f4
--- /dev/null
+++ b/boost/boost/wave/util/iteration_context.hpp
@@ -0,0 +1,82 @@
+/*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+
+ http://www.boost.org/
+
+ Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(ITERATION_CONTEXT_HPP_9556CD16_F11E_4ADC_AC8B_FB9A174BE664_INCLUDED)
+#define ITERATION_CONTEXT_HPP_9556CD16_F11E_4ADC_AC8B_FB9A174BE664_INCLUDED
+
+#include <cstdlib>
+#include <cstdio>
+#include <stack>
+
+#include <boost/wave/wave_config.hpp>
+#include <boost/wave/cpp_exceptions.hpp>
+
+// this must occur after all of the includes and before any code appears
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_PREFIX
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace wave {
+namespace util {
+
+///////////////////////////////////////////////////////////////////////////////
+template <typename IterationContextT>
+class iteration_context_stack
+{
+ typedef std::stack<IterationContextT> base_type;
+
+public:
+ typedef typename base_type::size_type size_type;
+
+ iteration_context_stack()
+ : max_include_nesting_depth(BOOST_WAVE_MAX_INCLUDE_LEVEL_DEPTH)
+ {}
+
+ void set_max_include_nesting_depth(size_type new_depth)
+ { max_include_nesting_depth = new_depth; }
+ size_type get_max_include_nesting_depth() const
+ { return max_include_nesting_depth; }
+
+ typename base_type::size_type size() const { return iter_ctx.size(); }
+ typename base_type::value_type &top() { return iter_ctx.top(); }
+ void pop() { iter_ctx.pop(); }
+
+ template <typename PositionT>
+ void push(PositionT const &pos, typename base_type::value_type const &val)
+ {
+ if (iter_ctx.size() == max_include_nesting_depth) {
+ char buffer[22]; // 21 bytes holds all NUL-terminated unsigned 64-bit numbers
+
+ using namespace std; // for some systems ltoa is in namespace std
+ sprintf(buffer, "%d", (int)max_include_nesting_depth);
+ BOOST_WAVE_THROW(preprocess_exception, include_nesting_too_deep,
+ buffer, pos);
+ }
+ iter_ctx.push(val);
+ }
+
+private:
+ size_type max_include_nesting_depth;
+ base_type iter_ctx;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace util
+} // namespace wave
+} // namespace boost
+
+// the suffix header occurs after all of the code
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_SUFFIX
+#endif
+
+#endif // !defined(ITERATION_CONTEXT_HPP_9556CD16_F11E_4ADC_AC8B_FB9A174BE664_INCLUDED)
diff --git a/boost/boost/wave/util/macro_definition.hpp b/boost/boost/wave/util/macro_definition.hpp
new file mode 100644
index 00000000000..ffd389adc25
--- /dev/null
+++ b/boost/boost/wave/util/macro_definition.hpp
@@ -0,0 +1,175 @@
+/*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+
+ http://www.boost.org/
+
+ Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(MACRO_DEFINITION_HPP_D68A639E_2DA5_4E9C_8ACD_CFE6B903831E_INCLUDED)
+#define MACRO_DEFINITION_HPP_D68A639E_2DA5_4E9C_8ACD_CFE6B903831E_INCLUDED
+
+#include <vector>
+#include <list>
+
+#include <boost/wave/wave_config.hpp>
+#if BOOST_WAVE_SERIALIZATION != 0
+#include <boost/serialization/serialization.hpp>
+#include <boost/serialization/list.hpp>
+#include <boost/serialization/vector.hpp>
+#endif
+
+#include <boost/wave/token_ids.hpp>
+
+// this must occur after all of the includes and before any code appears
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_PREFIX
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace wave {
+namespace util {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// macro_definition
+//
+// This class containes all infos for a defined macro.
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename TokenT, typename ContainerT>
+struct macro_definition {
+
+ typedef std::vector<TokenT> parameter_container_type;
+ typedef ContainerT definition_container_type;
+
+ typedef typename parameter_container_type::const_iterator
+ const_parameter_iterator_t;
+ typedef typename definition_container_type::const_iterator
+ const_definition_iterator_t;
+
+ macro_definition(TokenT const &token_, bool has_parameters,
+ bool is_predefined_, long uid_)
+ : macroname(token_), uid(uid_), is_functionlike(has_parameters),
+ replaced_parameters(false), is_available_for_replacement(true),
+ is_predefined(is_predefined_)
+#if BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS != 0
+ , has_ellipsis(false)
+#endif
+ {
+ }
+ // generated copy constructor
+ // generated destructor
+ // generated assignment operator
+
+ // Replace all occurrences of the parameters throughout the macrodefinition
+ // with special parameter tokens to simplify later macro replacement.
+ // Additionally mark all occurrences of the macro name itself throughout
+ // the macro definition
+ void replace_parameters()
+ {
+ using namespace boost::wave;
+
+ if (!replaced_parameters) {
+ typename definition_container_type::iterator end = macrodefinition.end();
+ typename definition_container_type::iterator it = macrodefinition.begin();
+
+ for (/**/; it != end; ++it) {
+ token_id id = *it;
+
+ if (T_IDENTIFIER == id ||
+ IS_CATEGORY(id, KeywordTokenType) ||
+ IS_EXTCATEGORY(id, OperatorTokenType|AltExtTokenType) ||
+ IS_CATEGORY(id, OperatorTokenType))
+ {
+ // may be a parameter to replace
+ const_parameter_iterator_t cend = macroparameters.end();
+ const_parameter_iterator_t cit = macroparameters.begin();
+ for (typename parameter_container_type::size_type i = 0;
+ cit != cend; ++cit, ++i)
+ {
+ if ((*it).get_value() == (*cit).get_value()) {
+ (*it).set_token_id(token_id(T_PARAMETERBASE+i));
+ break;
+ }
+#if BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS != 0
+ else if (T_ELLIPSIS == token_id(*cit) &&
+ "__VA_ARGS__" == (*it).get_value())
+ {
+ // __VA_ARGS__ requires special handling
+ (*it).set_token_id(token_id(T_EXTPARAMETERBASE+i));
+ break;
+ }
+#endif
+ }
+ }
+ }
+
+#if BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS != 0
+ // we need to know, if the last of the formal arguments is an ellipsis
+ if (macroparameters.size() > 0 &&
+ T_ELLIPSIS == token_id(macroparameters.back()))
+ {
+ has_ellipsis = true;
+ }
+#endif
+ replaced_parameters = true; // do it only once
+ }
+ }
+
+ TokenT macroname; // macro name
+ parameter_container_type macroparameters; // formal parameters
+ definition_container_type macrodefinition; // macro definition token sequence
+ long uid; // unique id of this macro
+ bool is_functionlike;
+ bool replaced_parameters;
+ bool is_available_for_replacement;
+ bool is_predefined;
+#if BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS != 0
+ bool has_ellipsis;
+#endif
+
+#if BOOST_WAVE_SERIALIZATION != 0
+ // default constructor is needed for serialization only
+ macro_definition()
+ : uid(0), is_functionlike(false), replaced_parameters(false),
+ is_available_for_replacement(false), is_predefined(false)
+#if BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS != 0
+ , has_ellipsis(false)
+#endif
+ {}
+
+private:
+ friend class boost::serialization::access;
+ template<typename Archive>
+ void serialize(Archive &ar, const unsigned int version)
+ {
+ ar & macroname;
+ ar & macroparameters;
+ ar & macrodefinition;
+ ar & uid;
+ ar & is_functionlike;
+ ar & replaced_parameters;
+ ar & is_available_for_replacement;
+ ar & is_predefined;
+#if BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS != 0
+ ar & has_ellipsis;
+#endif
+ }
+#endif
+};
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace util
+} // namespace wave
+} // namespace boost
+
+// the suffix header occurs after all of the code
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_SUFFIX
+#endif
+
+#endif // !defined(MACRO_DEFINITION_HPP_D68A639E_2DA5_4E9C_8ACD_CFE6B903831E_INCLUDED)
diff --git a/boost/boost/wave/util/macro_helpers.hpp b/boost/boost/wave/util/macro_helpers.hpp
new file mode 100644
index 00000000000..5a7a1a952d4
--- /dev/null
+++ b/boost/boost/wave/util/macro_helpers.hpp
@@ -0,0 +1,260 @@
+/*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+
+ http://www.boost.org/
+
+ Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(MACRO_HELPERS_HPP_931BBC99_EBFA_4692_8FBE_B555998C2C39_INCLUDED)
+#define MACRO_HELPERS_HPP_931BBC99_EBFA_4692_8FBE_B555998C2C39_INCLUDED
+
+#include <vector>
+
+#include <boost/assert.hpp>
+#include <boost/wave/wave_config.hpp>
+#include <boost/wave/token_ids.hpp>
+#include <boost/wave/cpplexer/validate_universal_char.hpp>
+
+// this must occur after all of the includes and before any code appears
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_PREFIX
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace wave {
+namespace util {
+
+namespace impl {
+
+ // escape a string literal (insert '\\' before every '\"', '?' and '\\')
+ template <typename StringT>
+ inline StringT
+ escape_lit(StringT const &value)
+ {
+ StringT result;
+ typename StringT::size_type pos = 0;
+ typename StringT::size_type pos1 = value.find_first_of ("\"\\?", 0);
+ if (StringT::npos != pos1) {
+ do {
+ result += value.substr(pos, pos1-pos)
+ + StringT("\\")
+ + StringT(1, value[pos1]);
+ pos1 = value.find_first_of ("\"\\?", pos = pos1+1);
+ } while (StringT::npos != pos1);
+ result += value.substr(pos);
+ }
+ else {
+ result = value;
+ }
+ return result;
+ }
+
+ // un-escape a string literal (remove '\\' just before '\\', '\"' or '?')
+ template <typename StringT>
+ inline StringT
+ unescape_lit(StringT const &value)
+ {
+ StringT result;
+ typename StringT::size_type pos = 0;
+ typename StringT::size_type pos1 = value.find_first_of ("\\", 0);
+ if (StringT::npos != pos1) {
+ do {
+ if ('\\' == value[pos1+1] || '\"' == value[pos1+1] ||
+ '?' == value[pos1+1])
+ {
+ result = result + value.substr(pos, pos1-pos);
+ pos1 = value.find_first_of ("\\", (pos = pos1+1)+1);
+ }
+ else {
+ result = result + value.substr(pos, pos1-pos+1);
+ pos1 = value.find_first_of ("\\", pos = pos1+1);
+ }
+
+ } while (pos1 != StringT::npos);
+ result = result + value.substr(pos);
+ }
+ else {
+ // the string doesn't contain any escaped character sequences
+ result = value;
+ }
+ return result;
+ }
+
+ // return the string representation of a token sequence
+ template <typename ContainerT, typename PositionT>
+ inline typename ContainerT::value_type::string_type
+ as_stringlit (ContainerT const &token_sequence, PositionT const &pos)
+ {
+ using namespace boost::wave;
+ typedef typename ContainerT::value_type::string_type string_type;
+
+ string_type result("\"");
+ bool was_whitespace = false;
+ typename ContainerT::const_iterator end = token_sequence.end();
+ for (typename ContainerT::const_iterator it = token_sequence.begin();
+ it != end; ++it)
+ {
+ token_id id = token_id(*it);
+
+ if (IS_CATEGORY(*it, WhiteSpaceTokenType) || T_NEWLINE == id) {
+ if (!was_whitespace) {
+ // C++ standard 16.3.2.2 [cpp.stringize]
+ // Each occurrence of white space between the argument’s
+ // preprocessing tokens becomes a single space character in the
+ // character string literal.
+ result += " ";
+ was_whitespace = true;
+ }
+ }
+ else if (T_STRINGLIT == id || T_CHARLIT == id) {
+ // string literals and character literals have to be escaped
+ result += impl::escape_lit((*it).get_value());
+ was_whitespace = false;
+ }
+ else
+#if BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS != 0
+ if (T_PLACEMARKER != id)
+#endif
+ {
+ // now append this token to the string
+ result += (*it).get_value();
+ was_whitespace = false;
+ }
+ }
+ result += "\"";
+
+ // validate the resulting literal to contain no invalid universal character
+ // value (throws if invalid chars found)
+ boost::wave::cpplexer::impl::validate_literal(result, pos.get_line(),
+ pos.get_column(), pos.get_file());
+ return result;
+ }
+
+#if BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS != 0
+ // return the string representation of a token sequence
+ template <typename ContainerT, typename PositionT>
+ inline typename ContainerT::value_type::string_type
+ as_stringlit (std::vector<ContainerT> const &arguments,
+ typename std::vector<ContainerT>::size_type i, PositionT const &pos)
+ {
+ using namespace boost::wave;
+ typedef typename ContainerT::value_type::string_type string_type;
+
+ BOOST_ASSERT(i < arguments.size());
+
+ string_type result("\"");
+ bool was_whitespace = false;
+
+ for (/**/; i < arguments.size(); ++i) {
+ // stringize all remaining arguments
+ typename ContainerT::const_iterator end = arguments[i].end();
+ for (typename ContainerT::const_iterator it = arguments[i].begin();
+ it != end; ++it)
+ {
+ token_id id = token_id(*it);
+
+ if (IS_CATEGORY(*it, WhiteSpaceTokenType) || T_NEWLINE == id) {
+ if (!was_whitespace) {
+ // C++ standard 16.3.2.2 [cpp.stringize]
+ // Each occurrence of white space between the argument’s
+ // preprocessing tokens becomes a single space character in the
+ // character string literal.
+ result += " ";
+ was_whitespace = true;
+ }
+ }
+ else if (T_STRINGLIT == id || T_CHARLIT == id) {
+ // string literals and character literals have to be escaped
+ result += impl::escape_lit((*it).get_value());
+ was_whitespace = false;
+ }
+ else if (T_PLACEMARKER != id) {
+ // now append this token to the string
+ result += (*it).get_value();
+ was_whitespace = false;
+ }
+ }
+
+ // append comma, if not last argument
+ if (i < arguments.size()-1) {
+ result += ",";
+ was_whitespace = false;
+ }
+ }
+ result += "\"";
+
+ // validate the resulting literal to contain no invalid universal character
+ // value (throws if invalid chars found)
+ boost::wave::cpplexer::impl::validate_literal(result, pos.get_line(),
+ pos.get_column(), pos.get_file());
+ return result;
+ }
+#endif // BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS != 0
+
+ // return the string representation of a token sequence
+ template <typename StringT, typename IteratorT>
+ inline StringT
+ as_string(IteratorT it, IteratorT const& end)
+ {
+ StringT result;
+ for (/**/; it != end; ++it)
+ {
+ result += (*it).get_value();
+ }
+ return result;
+ }
+
+ // return the string representation of a token sequence
+ template <typename ContainerT>
+ inline typename ContainerT::value_type::string_type
+ as_string (ContainerT const &token_sequence)
+ {
+ typedef typename ContainerT::value_type::string_type string_type;
+ return as_string<string_type>(token_sequence.begin(),
+ token_sequence.end());
+ }
+
+#if BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS != 0
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // Copies all arguments beginning with the given index to the output
+ // sequence. The arguments are separated by commas.
+ //
+ template <typename ContainerT, typename PositionT>
+ void replace_ellipsis (std::vector<ContainerT> const &arguments,
+ typename ContainerT::size_type index,
+ ContainerT &expanded, PositionT const &pos)
+ {
+ using namespace cpplexer;
+ typedef typename ContainerT::value_type token_type;
+
+ token_type comma(T_COMMA, ",", pos);
+ for (/**/; index < arguments.size(); ++index) {
+ ContainerT const &arg = arguments[index];
+
+ std::copy(arg.begin(), arg.end(),
+ std::inserter(expanded, expanded.end()));
+
+ if (index < arguments.size()-1)
+ expanded.push_back(comma);
+ }
+ }
+#endif
+
+} // namespace impl
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace util
+} // namespace wave
+} // namespace boost
+
+// the suffix header occurs after all of the code
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_SUFFIX
+#endif
+
+#endif // !defined(MACRO_HELPERS_HPP_931BBC99_EBFA_4692_8FBE_B555998C2C39_INCLUDED)
diff --git a/boost/boost/wave/util/pattern_parser.hpp b/boost/boost/wave/util/pattern_parser.hpp
new file mode 100644
index 00000000000..59ecf104bb7
--- /dev/null
+++ b/boost/boost/wave/util/pattern_parser.hpp
@@ -0,0 +1,65 @@
+/*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+
+ Global application configuration
+
+ http://www.boost.org/
+
+ Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(BOOST_SPIRIT_PATTERN_PARSER_HPP)
+#define BOOST_SPIRIT_PATTERN_PARSER_HPP
+
+#include <boost/spirit/core/primitives/primitives.hpp>
+#include <boost/wave/wave_config.hpp>
+
+// this must occur after all of the includes and before any code appears
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_PREFIX
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace wave {
+namespace util {
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // pattern_and class
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename CharT = char>
+ struct pattern_and : public boost::spirit::char_parser<pattern_and<CharT> >
+ {
+ pattern_and(CharT pattern_, unsigned long pattern_mask_ = 0UL)
+ : pattern(pattern_),
+ pattern_mask((0UL != pattern_mask_) ? pattern_mask_ : pattern_)
+ {}
+
+ template <typename T>
+ bool test(T pattern_) const
+ { return ((unsigned long)pattern_ & pattern_mask) == (unsigned long)pattern; }
+
+ CharT pattern;
+ unsigned long pattern_mask;
+ };
+
+ template <typename CharT>
+ inline pattern_and<CharT>
+ pattern_p(CharT pattern, long pattern_mask = 0L)
+ { return pattern_and<CharT>(pattern, (unsigned long)pattern_mask); }
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace util
+} // namespace wave
+} // namespace boost
+
+// the suffix header occurs after all of the code
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_SUFFIX
+#endif
+
+#endif // defined(BOOST_SPIRIT_PATTERN_PARSER_HPP)
diff --git a/boost/boost/wave/util/symbol_table.hpp b/boost/boost/wave/util/symbol_table.hpp
new file mode 100644
index 00000000000..c4236a5695e
--- /dev/null
+++ b/boost/boost/wave/util/symbol_table.hpp
@@ -0,0 +1,68 @@
+/*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+
+ http://www.boost.org/
+
+ Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(SYMBOL_TABLE_HPP_32B0F7C6_3DD6_4113_95A5_E16516C6F45A_INCLUDED)
+#define SYMBOL_TABLE_HPP_32B0F7C6_3DD6_4113_95A5_E16516C6F45A_INCLUDED
+
+#include <map>
+
+#include <boost/wave/wave_config.hpp>
+#if BOOST_WAVE_SERIALIZATION != 0
+#include <boost/serialization/serialization.hpp>
+#include <boost/serialization/map.hpp>
+#endif
+
+// this must occur after all of the includes and before any code appears
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_PREFIX
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace wave {
+namespace util {
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// The symbol_table class is used for the storage of defined macros.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+template <typename StringT, typename MacroDefT>
+struct symbol_table
+: public std::map<StringT, boost::shared_ptr<MacroDefT> >
+{
+ typedef std::map<StringT, boost::shared_ptr<MacroDefT> > base_type;
+
+ symbol_table(long uid_ = 0)
+ {}
+
+#if BOOST_WAVE_SERIALIZATION != 0
+private:
+ friend class boost::serialization::access;
+ template<typename Archive>
+ void serialize(Archive &ar, const unsigned int version)
+ {
+ ar & boost::serialization::base_object<base_type>(*this);
+ }
+#endif
+};
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace util
+} // namespace wave
+} // namespace boost
+
+// the suffix header occurs after all of the code
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_SUFFIX
+#endif
+
+#endif // !defined(SYMBOL_TABLE_HPP_32B0F7C6_3DD6_4113_95A5_E16516C6F45A_INCLUDED)
diff --git a/boost/boost/wave/util/time_conversion_helper.hpp b/boost/boost/wave/util/time_conversion_helper.hpp
new file mode 100644
index 00000000000..6562237321d
--- /dev/null
+++ b/boost/boost/wave/util/time_conversion_helper.hpp
@@ -0,0 +1,159 @@
+ /*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+
+ http://www.boost.org/
+
+ Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(TIME_CONVERSION_HELPER_HPP_DA97E389_1797_43BA_82AE_B071064B3EF4_INCLUDED)
+#define TIME_CONVERSION_HELPER_HPP_DA97E389_1797_43BA_82AE_B071064B3EF4_INCLUDED
+
+#include <ctime>
+
+#include <boost/config.hpp>
+#include <boost/spirit/core.hpp>
+#include <boost/spirit/symbols.hpp>
+#if SPIRIT_VERSION >= 0x1700
+#include <boost/spirit/actor/assign_actor.hpp>
+#include <boost/spirit/actor/push_back_actor.hpp>
+#endif // SPIRIT_VERSION >= 0x1700
+
+#if !defined(spirit_append_actor)
+#if SPIRIT_VERSION >= 0x1700
+#define spirit_append_actor(actor) boost::spirit::push_back_a(actor)
+#define spirit_assign_actor(actor) boost::spirit::assign_a(actor)
+#else
+#define spirit_append_actor(actor) boost::spirit::append(actor)
+#define spirit_assign_actor(actor) boost::spirit::assign(actor)
+#endif // SPIRIT_VERSION >= 0x1700
+#endif // !defined(spirit_append_actor)
+
+// this must occur after all of the includes and before any code appears
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_PREFIX
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace wave {
+namespace util {
+
+namespace time_conversion {
+
+ using namespace std; // some systems have std::tm etc. in namespace std
+
+///////////////////////////////////////////////////////////////////////////////
+// define, whether the rule's should generate some debug output
+#define TRACE_CPP_TIME_CONVERSION \
+ (BOOST_SPIRIT_DEBUG_FLAGS_CPP & BOOST_SPIRIT_DEBUG_FLAGS_TIME_CONVERSION) \
+ /**/
+
+///////////////////////////////////////////////////////////////////////////////
+// Grammar for parsing a date/time string generated by the C++ compiler from
+// __DATE__ and __TIME__
+ class time_conversion_grammar :
+ public boost::spirit::grammar<time_conversion_grammar>
+ {
+ public:
+ time_conversion_grammar() : fYearIsCorrected(false)
+ {
+ using namespace std; // some systems have memset in std
+ memset (&time_stamp, 0, sizeof(tm));
+ BOOST_SPIRIT_DEBUG_TRACE_RULE_NAME(*this, "time_conversion_grammar",
+ TRACE_CPP_TIME_CONVERSION);
+ }
+
+ template <typename ScannerT>
+ struct definition {
+
+ definition(time_conversion_grammar const &self)
+ {
+ using boost::spirit::int_p;
+ using boost::spirit::add;
+
+ char const *m[] = {
+ "Jan", "Feb", "Mar", "Apr", "May", "Jun",
+ "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
+ };
+
+ for (int i = 0; i < 12; ++i)
+ add (month, m[i], i);
+
+ time_rule // expected format is 'Dec 29 2001 11:23:59'
+ = month[spirit_assign_actor(self.time_stamp.tm_mon)]
+ >> int_p[spirit_assign_actor(self.time_stamp.tm_mday)]
+ >> int_p[spirit_assign_actor(self.time_stamp.tm_year)]
+ >> int_p[spirit_assign_actor(self.time_stamp.tm_hour)] >> ':'
+ >> int_p[spirit_assign_actor(self.time_stamp.tm_min)] >> ':'
+ >> int_p[spirit_assign_actor(self.time_stamp.tm_sec)]
+ ;
+
+ BOOST_SPIRIT_DEBUG_TRACE_RULE(time_rule, TRACE_CPP_TIME_CONVERSION);
+ }
+
+ boost::spirit::rule<ScannerT> time_rule;
+ boost::spirit::symbols<> month;
+
+ boost::spirit::rule<ScannerT> const&
+ start() const { return time_rule; }
+ };
+
+ void correct_year()
+ {
+ if (!fYearIsCorrected) {
+ time_stamp.tm_year -= 1900;
+ fYearIsCorrected = true;
+ }
+ }
+
+ mutable tm time_stamp;
+ bool fYearIsCorrected;
+ };
+
+///////////////////////////////////////////////////////////////////////////////
+// calculate the time of the compilation as a std::time_t to ensure correctness
+// of the saved dfa table
+ class time_conversion_helper
+ {
+ public:
+ time_conversion_helper(char const *act_time) : compile_time(0)
+ {
+ using namespace boost::spirit;
+
+ time_conversion_grammar g;
+ parse_info<> pi = parse (act_time, g, space_p);
+
+ if (pi.hit) {
+ g.correct_year();
+ compile_time = mktime(&g.time_stamp);
+ }
+ BOOST_ASSERT(0 != compile_time);
+ }
+
+ time_t get_time() const { return compile_time; }
+
+ private:
+ time_t compile_time;
+ };
+
+///////////////////////////////////////////////////////////////////////////////
+#undef TRACE_CPP_TIME_CONVERSION
+} // namespace time_conversion
+
+// import time_conversion into the boost::wave::util namespace
+using namespace time_conversion;
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace util
+} // namespace wave
+} // namespace boost
+
+// the suffix header occurs after all of the code
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_SUFFIX
+#endif
+
+#endif // !defined(TIME_CONVERSION_HELPER_HPP_DA97E389_1797_43BA_82AE_B071064B3EF4_INCLUDED)
diff --git a/boost/boost/wave/util/transform_iterator.hpp b/boost/boost/wave/util/transform_iterator.hpp
new file mode 100644
index 00000000000..4a8dc5bfa95
--- /dev/null
+++ b/boost/boost/wave/util/transform_iterator.hpp
@@ -0,0 +1,169 @@
+/*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+
+ http://www.boost.org/
+
+ Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(TRANSFORM_ITERATOR_HPP_D492C659_88C7_4258_8C42_192F9AE80EC0_INCLUDED)
+#define TRANSFORM_ITERATOR_HPP_D492C659_88C7_4258_8C42_192F9AE80EC0_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/iterator_adaptors.hpp>
+#if BOOST_ITERATOR_ADAPTORS_VERSION >= 0x0200
+#include <boost/iterator/transform_iterator.hpp>
+#endif // BOOST_ITERATOR_ADAPTORS_VERSION >= 0x0200
+
+#include <boost/assert.hpp>
+
+// this must occur after all of the includes and before any code appears
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_PREFIX
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace wave {
+namespace impl {
+
+#if BOOST_ITERATOR_ADAPTORS_VERSION < 0x0200
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Transform Iterator Adaptor
+//
+// Upon deference, apply some unary function object and return the
+// result by reference.
+//
+// This class is adapted from the Boost.Iterator library, where a similar
+// class exists, which returns the next item by value
+//
+///////////////////////////////////////////////////////////////////////////////
+ template <class AdaptableUnaryFunctionT>
+ struct ref_transform_iterator_policies
+ : public boost::default_iterator_policies
+ {
+ ref_transform_iterator_policies()
+ {}
+ ref_transform_iterator_policies(const AdaptableUnaryFunctionT &f)
+ : m_f(f) {}
+
+ template <class IteratorAdaptorT>
+ typename IteratorAdaptorT::reference
+ dereference(const IteratorAdaptorT &iter) const
+ { return m_f(*iter.base()); }
+
+ AdaptableUnaryFunctionT m_f;
+ };
+
+ template <class AdaptableUnaryFunctionT, class IteratorT>
+ class ref_transform_iterator_generator
+ {
+ typedef typename AdaptableUnaryFunctionT::result_type value_type;
+
+ public:
+ typedef boost::iterator_adaptor<
+ IteratorT,
+ ref_transform_iterator_policies<AdaptableUnaryFunctionT>,
+ value_type, value_type const &, value_type const *,
+ std::input_iterator_tag>
+ type;
+ };
+
+ template <class AdaptableUnaryFunctionT, class IteratorT>
+ inline
+ typename ref_transform_iterator_generator<
+ AdaptableUnaryFunctionT, IteratorT>::type
+ make_ref_transform_iterator(
+ IteratorT base,
+ const AdaptableUnaryFunctionT &f = AdaptableUnaryFunctionT())
+ {
+ typedef typename ref_transform_iterator_generator<
+ AdaptableUnaryFunctionT, IteratorT>::type
+ result_t;
+ return result_t(base, f);
+ }
+
+ // Retrieve the token value given a parse node
+ // This is used in conjunction with the ref_transform_iterator above, to
+ // get the token values while iterating directly over the parse tree.
+ template <typename TokenT, typename ParseTreeNodeT>
+ struct get_token_value {
+
+ typedef TokenT result_type;
+
+ TokenT const &operator()(ParseTreeNodeT const &node) const
+ {
+ BOOST_ASSERT(1 == std::distance(node.value.begin(),
+ node.value.end()));
+ return *node.value.begin();
+ }
+ };
+
+#else // BOOST_ITERATOR_ADAPTORS_VERSION < 0x0200
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// The new Boost.Iterator library already conatins a transform_iterator usable
+// for our needs. The code below wraps this up.
+//
+///////////////////////////////////////////////////////////////////////////////
+ template <class AdaptableUnaryFunctionT, class IteratorT>
+ class ref_transform_iterator_generator
+ {
+ typedef typename AdaptableUnaryFunctionT::result_type return_type;
+ typedef typename AdaptableUnaryFunctionT::argument_type argument_type;
+
+ public:
+ typedef boost::transform_iterator<
+ return_type (*)(argument_type), IteratorT, return_type>
+ type;
+ };
+
+ template <class AdaptableUnaryFunctionT, class IteratorT>
+ inline
+ typename ref_transform_iterator_generator<
+ AdaptableUnaryFunctionT, IteratorT>::type
+ make_ref_transform_iterator(
+ IteratorT base, AdaptableUnaryFunctionT const &f)
+ {
+ typedef typename ref_transform_iterator_generator<
+ AdaptableUnaryFunctionT, IteratorT>::type
+ iterator_type;
+ return iterator_type(base, f.transform);
+ }
+
+ // Retrieve the token value given a parse node
+ // This is used in conjunction with the ref_transform_iterator above, to
+ // get the token values while iterating directly over the parse tree.
+ template <typename TokenT, typename ParseTreeNodeT>
+ struct get_token_value {
+
+ typedef TokenT const &result_type;
+ typedef ParseTreeNodeT const &argument_type;
+
+ static result_type
+ transform (argument_type node)
+ {
+ BOOST_ASSERT(1 == std::distance(node.value.begin(),
+ node.value.end()));
+ return *node.value.begin();
+ }
+ };
+
+#endif // BOOST_ITERATOR_ADAPTORS_VERSION < 0x0200
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace impl
+} // namespace wave
+} // namespace boost
+
+// the suffix header occurs after all of the code
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_SUFFIX
+#endif
+
+#endif // !defined(TRANSFORM_ITERATOR_HPP_D492C659_88C7_4258_8C42_192F9AE80EC0_INCLUDED)
diff --git a/boost/boost/wave/util/unput_queue_iterator.hpp b/boost/boost/wave/util/unput_queue_iterator.hpp
new file mode 100644
index 00000000000..ebdd7a00c4d
--- /dev/null
+++ b/boost/boost/wave/util/unput_queue_iterator.hpp
@@ -0,0 +1,465 @@
+/*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+
+ Definition of the unput queue iterator
+
+ http://www.boost.org/
+
+ Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+#if !defined(UNPUT_QUEUE_ITERATOR_HPP_76DA23D0_4893_4AD5_ABCC_6CED7CFB89BC_INCLUDED)
+#define UNPUT_QUEUE_ITERATOR_HPP_76DA23D0_4893_4AD5_ABCC_6CED7CFB89BC_INCLUDED
+
+#include <list>
+
+#include <boost/assert.hpp>
+#include <boost/iterator_adaptors.hpp>
+
+#include <boost/wave/wave_config.hpp>
+
+// this must occur after all of the includes and before any code appears
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_PREFIX
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace wave {
+namespace util {
+
+#if !defined(BOOST_ITERATOR_ADAPTORS_VERSION) || \
+ BOOST_ITERATOR_ADAPTORS_VERSION < 0x0200
+
+template <typename TokenT, typename ContainerT>
+class unput_queue_policies : public boost::default_iterator_policies
+{
+public:
+ unput_queue_policies(ContainerT &unput_queue_)
+ : unput_queue(unput_queue_)
+ {}
+
+ unput_queue_policies &operator= (unput_queue_policies const &rhs)
+ {
+ unput_queue = rhs.unput_queue;
+ return *this;
+ }
+
+ template <typename BaseT>
+ void initialize(BaseT &)
+ {}
+
+ template <typename IteratorAdaptorT>
+ typename IteratorAdaptorT::reference
+ dereference(const IteratorAdaptorT &x) const
+ {
+ if (x.policies().unput_queue.size() > 0)
+ return x.policies().unput_queue.front();
+ return *x.base();
+ }
+
+ template <typename IteratorAdaptorT>
+ void
+ increment(IteratorAdaptorT &x)
+ {
+ if (x.policies().unput_queue.size() > 0) {
+ // there exist pending tokens in the unput queue
+ x.policies().unput_queue.pop_front();
+ }
+ else {
+ // the unput_queue is empty, so advance the base iterator
+ ++x.base();
+ }
+ }
+
+ template <typename IteratorAdaptorT1, typename IteratorAdaptorT2>
+ bool
+ equal(const IteratorAdaptorT1 &x, const IteratorAdaptorT2 &y) const
+ {
+ // two iterators are equal, if both begin() iterators of the queue objects
+ // are equal and the base iterators are equal as well
+ return
+ (x.policies().unput_queue.begin() == y.policies().unput_queue.begin() ||
+ (0 == x.policies().queuesize() && 0 == y.policies().queuesize())) &&
+ x.base() == y.base();
+ }
+
+ typename ContainerT::size_type queuesize() const
+ { return unput_queue.size(); }
+
+ ContainerT &get_unput_queue() { return unput_queue; }
+ ContainerT const &get_unput_queue() const { return unput_queue; }
+
+private:
+ ContainerT &unput_queue;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// unput_queue_iterator
+//
+// The unput_queue_iterator templates encapsulates an unput_queue together
+// with the direct input to be read after the unput queue is emptied
+//
+// This version is for the old iterator_adaptors (Boost V1.30.x)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename IteratorT, typename TokenT, typename ContainerT>
+class unput_queue_iterator
+: public boost::iterator_adaptor<
+ IteratorT, unput_queue_policies<TokenT, ContainerT>, TokenT,
+ TokenT const &, TokenT const *>
+{
+ typedef
+ boost::iterator_adaptor<
+ IteratorT, unput_queue_policies<TokenT, ContainerT>, TokenT,
+ TokenT const &, TokenT const *
+ >
+ base_type;
+ typedef unput_queue_policies<TokenT, ContainerT> policies_type;
+
+public:
+ typedef ContainerT container_type;
+ typedef IteratorT iterator_type;
+
+ unput_queue_iterator(IteratorT const &it, ContainerT &queue)
+ : base_type(it, policies_type(queue))
+ {}
+
+ ContainerT &get_unput_queue()
+ { return policies().get_unput_queue(); }
+ ContainerT const &get_unput_queue() const
+ { return policies().get_unput_queue(); }
+ IteratorT &get_base_iterator()
+ { return base(); }
+ IteratorT const &get_base_iterator() const
+ { return base(); }
+};
+
+#else // BOOST_ITERATOR_ADAPTORS_VERSION < 0x0200
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// unput_queue_iterator
+//
+// The unput_queue_iterator templates encapsulates an unput_queue together
+// with the direct input to be read after the unput queue is emptied
+//
+// This version is for the new iterator_adaptors (was released with
+// Boost V1.31.0)
+//
+///////////////////////////////////////////////////////////////////////////////
+template <typename IteratorT, typename TokenT, typename ContainerT>
+class unput_queue_iterator
+: public boost::iterator_adaptor<
+ unput_queue_iterator<IteratorT, TokenT, ContainerT>,
+ IteratorT, TokenT const, std::forward_iterator_tag>
+{
+ typedef boost::iterator_adaptor<
+ unput_queue_iterator<IteratorT, TokenT, ContainerT>,
+ IteratorT, TokenT const, std::forward_iterator_tag>
+ base_type;
+
+public:
+ typedef ContainerT container_type;
+ typedef IteratorT iterator_type;
+
+ unput_queue_iterator(IteratorT const &it, ContainerT &queue)
+ : base_type(it), unput_queue(queue)
+ {}
+
+ ContainerT &get_unput_queue()
+ { return unput_queue; }
+ ContainerT const &get_unput_queue() const
+ { return unput_queue; }
+ IteratorT &get_base_iterator()
+ { return base_type::base_reference(); }
+ IteratorT const &get_base_iterator() const
+ { return base_type::base_reference(); }
+
+ unput_queue_iterator &operator= (unput_queue_iterator const &rhs)
+ {
+ if (this != &rhs) {
+ unput_queue = rhs.unput_queue;
+ base_type::operator=(rhs);
+ }
+ return *this;
+ }
+
+ typename base_type::reference dereference() const
+ {
+ if (!unput_queue.empty())
+ return unput_queue.front();
+ return *base_type::base_reference();
+ }
+
+ void increment()
+ {
+ if (!unput_queue.empty()) {
+ // there exist pending tokens in the unput queue
+ unput_queue.pop_front();
+ }
+ else {
+ // the unput_queue is empty, so advance the base iterator
+ ++base_type::base_reference();
+ }
+ }
+
+ template <
+ typename OtherDerivedT, typename OtherIteratorT,
+ typename V, typename C, typename R, typename D
+ >
+ bool equal(
+ boost::iterator_adaptor<OtherDerivedT, OtherIteratorT, V, C, R, D>
+ const &x) const
+ {
+ // two iterators are equal, if both begin() iterators of the queue
+ // objects are equal and the base iterators are equal as well
+ OtherDerivedT const &rhs = static_cast<OtherDerivedT const &>(x);
+ return
+ (unput_queue.empty() && rhs.unput_queue.empty() ||
+ (&unput_queue == &rhs.unput_queue &&
+ unput_queue.begin() == rhs.unput_queue.begin()
+ )
+ ) &&
+ get_base_iterator() == rhs.get_base_iterator();
+ }
+
+private:
+ ContainerT &unput_queue;
+};
+
+#endif // BOOST_ITERATOR_ADAPTORS_VERSION < 0x0200
+
+namespace impl {
+
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename IteratorT, typename TokenT, typename ContainerT>
+ struct gen_unput_queue_iterator
+ {
+ typedef ContainerT container_type;
+ typedef IteratorT iterator_type;
+ typedef unput_queue_iterator<IteratorT, TokenT, ContainerT>
+ return_type;
+
+ static container_type last;
+
+ static return_type
+ generate(iterator_type const &it)
+ {
+ return return_type(it, last);
+ }
+
+ static return_type
+ generate(ContainerT &queue, iterator_type const &it)
+ {
+ return return_type(it, queue);
+ }
+ };
+
+ template <typename IteratorT, typename TokenT, typename ContainerT>
+ typename gen_unput_queue_iterator<IteratorT, TokenT, ContainerT>::
+ container_type
+ gen_unput_queue_iterator<IteratorT, TokenT, ContainerT>::last =
+ typename gen_unput_queue_iterator<IteratorT, TokenT, ContainerT>::
+ container_type();
+
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename IteratorT, typename TokenT, typename ContainerT>
+ struct gen_unput_queue_iterator<
+ unput_queue_iterator<IteratorT, TokenT, ContainerT>,
+ TokenT, ContainerT>
+ {
+ typedef ContainerT container_type;
+ typedef unput_queue_iterator<IteratorT, TokenT, ContainerT>
+ iterator_type;
+ typedef unput_queue_iterator<IteratorT, TokenT, ContainerT>
+ return_type;
+
+ static container_type last;
+
+ static return_type
+ generate(iterator_type &it)
+ {
+ return return_t(it.base(), last);
+ }
+
+ static return_type
+ generate(ContainerT &queue, iterator_type &it)
+ {
+ return return_t(it.base(), queue);
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename IteratorT>
+ struct assign_iterator {
+
+ static void
+ do_ (IteratorT &dest, IteratorT const &src)
+ {
+ dest = src;
+ }
+ };
+
+#if !defined(BOOST_ITERATOR_ADAPTORS_VERSION) || \
+ BOOST_ITERATOR_ADAPTORS_VERSION < 0x0200
+
+ template <typename IteratorT, typename TokenT, typename ContainerT>
+ struct assign_iterator<
+ unput_queue_iterator<IteratorT, TokenT, ContainerT> >
+ {
+ typedef unput_queue_iterator<IteratorT, TokenT, ContainerT>
+ iterator_type;
+
+ static void
+ do_ (iterator_type &dest, iterator_type const &src)
+ {
+ dest.base() = src.base();
+ dest.policies() = src.policies();
+ }
+ };
+
+#endif // BOOST_ITERATOR_ADAPTORS_VERSION < 0x0200
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ // Look for the first non-whitespace token and return this token id.
+ // Note though, that the embedded unput_queues are not touched in any way!
+ //
+ template <typename IteratorT>
+ struct next_token {
+
+ static boost::wave::token_id
+ peek(IteratorT it, IteratorT end, bool skip_whitespace = true)
+ {
+ using namespace boost::wave;
+ if (skip_whitespace) {
+ for (++it; it != end; ++it) {
+ if (!IS_CATEGORY(*it, WhiteSpaceTokenType) &&
+ T_NEWLINE != token_id(*it))
+ {
+ break; // stop at the first non-whitespace token
+ }
+ }
+ }
+ else {
+ ++it; // we have at least to look ahead
+ }
+ if (it != end)
+ return token_id(*it);
+ return T_EOI;
+ }
+ };
+
+ template <typename IteratorT, typename TokenT, typename ContainerT>
+ struct next_token<
+ unput_queue_iterator<IteratorT, TokenT, ContainerT> > {
+
+ typedef unput_queue_iterator<IteratorT, TokenT, ContainerT> iterator_type;
+
+ static boost::wave::token_id
+ peek(iterator_type it, iterator_type end, bool skip_whitespace = true)
+ {
+ using namespace boost::wave;
+
+ typename iterator_type::container_type &queue = it.get_unput_queue();
+
+ // first try to find it in the unput_queue
+ if (0 != queue.size()) {
+ typename iterator_type::container_type::iterator cit = queue.begin();
+ typename iterator_type::container_type::iterator cend = queue.end();
+
+ if (skip_whitespace) {
+ for (++cit; cit != cend; ++cit) {
+ if (!IS_CATEGORY(*cit, WhiteSpaceTokenType) &&
+ T_NEWLINE != token_id(*cit))
+ {
+ break; // stop at the first non-whitespace token
+ }
+ }
+ }
+ else {
+ ++cit; // we have at least to look ahead
+ }
+ if (cit != cend)
+ return token_id(*cit);
+ }
+
+ // second try to move on into the base iterator stream
+ typename iterator_type::iterator_type base_it = it.get_base_iterator();
+ typename iterator_type::iterator_type base_end = end.get_base_iterator();
+
+ if (0 == queue.size())
+ ++base_it; // advance, if the unput queue is empty
+
+ if (skip_whitespace) {
+ for (/**/; base_it != base_end; ++base_it) {
+ if (!IS_CATEGORY(*base_it, WhiteSpaceTokenType) &&
+ T_NEWLINE != token_id(*base_it))
+ {
+ break; // stop at the first non-whitespace token
+ }
+ }
+ }
+ if (base_it == base_end)
+ return T_EOI;
+
+ return token_id(*base_it);
+ }
+ };
+
+ // Skip all whitespace characters and queue the skipped characters into the
+ // given container
+ template <typename IteratorT>
+ inline boost::wave::token_id
+ skip_whitespace(IteratorT &first, IteratorT const &last)
+ {
+ using namespace cpplexer;
+
+ token_id id = next_token<IteratorT>::peek(first, last, false);
+
+ if (IS_CATEGORY(id, WhiteSpaceTokenType)) {
+ do {
+ ++first;
+ id = next_token<IteratorT>::peek(first, last, false);
+ } while (IS_CATEGORY(id, WhiteSpaceTokenType));
+ }
+ ++first;
+ return id;
+ }
+
+ template <typename IteratorT, typename ContainerT>
+ inline boost::wave::token_id
+ skip_whitespace(IteratorT &first, IteratorT const &last, ContainerT &queue)
+ {
+ using namespace cpplexer;
+ queue.push_back (*first); // queue up the current token
+
+ token_id id = next_token<IteratorT>::peek(first, last, false);
+
+ if (IS_CATEGORY(id, WhiteSpaceTokenType)) {
+ do {
+ queue.push_back(*++first); // queue up the next whitespace
+ id = next_token<IteratorT>::peek(first, last, false);
+ } while (IS_CATEGORY(id, WhiteSpaceTokenType));
+ }
+ ++first;
+ return id;
+ }
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace impl
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace util
+} // namespace wave
+} // namespace boost
+
+// the suffix header occurs after all of the code
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_SUFFIX
+#endif
+
+#endif // !defined(UNPUT_QUEUE_ITERATOR_HPP_76DA23D0_4893_4AD5_ABCC_6CED7CFB89BC_INCLUDED)
diff --git a/boost/boost/wave/wave_config.hpp b/boost/boost/wave/wave_config.hpp
new file mode 100644
index 00000000000..ca0394033f3
--- /dev/null
+++ b/boost/boost/wave/wave_config.hpp
@@ -0,0 +1,403 @@
+/*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+
+ Global application configuration
+
+ http://www.boost.org/
+
+ Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(WAVE_CONFIG_HPP_F143F90A_A63F_4B27_AC41_9CA4F14F538D_INCLUDED)
+#define WAVE_CONFIG_HPP_F143F90A_A63F_4B27_AC41_9CA4F14F538D_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/version.hpp>
+#include <boost/spirit/version.hpp>
+#include <boost/wave/wave_version.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+// Define the maximal include nesting depth allowed. If this value isn't
+// defined it defaults to 1024
+//
+// To define a new initial include nesting define the following constant
+// before including this file.
+//
+#if !defined(BOOST_WAVE_MAX_INCLUDE_LEVEL_DEPTH)
+#define BOOST_WAVE_MAX_INCLUDE_LEVEL_DEPTH 1024
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// Decide, whether to support variadics and placemarkers
+//
+// To implement support variadics and placemarkers define the following to
+// something not equal to zero.
+//
+#if !defined(BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS)
+#define BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS 1
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// Decide, whether to implement a #warning directive as an extension to the
+// C++ Standard (same as #error, but emits a warning, not an error)
+//
+// To disable the implementation of #warning directives, define the following
+// constant as zero before including this file.
+//
+#if !defined(BOOST_WAVE_SUPPORT_WARNING_DIRECTIVE)
+#define BOOST_WAVE_SUPPORT_WARNING_DIRECTIVE 1
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// Decide, whether to implement #pragma once
+//
+// To disable the implementation of #pragma once, define the following
+// constant as zero before including this file.
+//
+#if !defined(BOOST_WAVE_SUPPORT_PRAGMA_ONCE)
+#define BOOST_WAVE_SUPPORT_PRAGMA_ONCE 1
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// Decide, whether to implement #pragma message("")
+//
+// To disable the implementation of #pragma message(""), define the following
+// constant as zero before including this file.
+//
+#if !defined(BOOST_WAVE_SUPPORT_PRAGMA_MESSAGE)
+#define BOOST_WAVE_SUPPORT_PRAGMA_MESSAGE 1
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// Decide, whether to implement #include_next
+// Please note, that this is an extension to the C++ Standard.
+//
+// To disable the implementation of #include_next, define the following
+// constant as zero before including this file.
+//
+#if !defined(BOOST_WAVE_SUPPORT_INCLUDE_NEXT)
+#define BOOST_WAVE_SUPPORT_INCLUDE_NEXT 1
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// Undefine the following, to enable some MS specific language extensions:
+// __int8, __int16, __int32, __int64, __based, __declspec, __cdecl,
+// __fastcall, __stdcall, __try, __except, __finally, __leave, __inline,
+// __asm, #region, #endregion
+//
+// Note: By default this is enabled for Windows based systems, otherwise it's
+// disabled.
+#if !defined(BOOST_WAVE_SUPPORT_MS_EXTENSIONS)
+#if defined(BOOST_WINDOWS)
+#define BOOST_WAVE_SUPPORT_MS_EXTENSIONS 1
+#else
+#define BOOST_WAVE_SUPPORT_MS_EXTENSIONS 0
+#endif
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// Allow the message body of the #error and #warning directives to be
+// preprocessed before the diagnostic is issued.
+//
+// To disable preprocessing of the body of #error and #warning directives,
+// define the following constant as zero before including this file.
+//
+#if !defined(BOOST_WAVE_PREPROCESS_ERROR_MESSAGE_BODY)
+#define BOOST_WAVE_PREPROCESS_ERROR_MESSAGE_BODY 1
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// Allow the #pragma directives to be returned to the caller (optionally after
+// preprocessing the body)
+//
+// To disable the library to emit unknown #pragma directives, define the
+// following constant as zero before including this file.
+//
+#if !defined(BOOST_WAVE_EMIT_PRAGMA_DIRECTIVES)
+#define BOOST_WAVE_EMIT_PRAGMA_DIRECTIVES 1
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// Allow the body of a #pragma directive to be preprocessed before the
+// directive is returned to the caller.
+//
+// To disable the preprocessing of the body of #pragma directives, define the
+// following constant as zero before including this file.
+//
+#if !defined(BOOST_WAVE_PREPROCESS_PRAGMA_BODY)
+#define BOOST_WAVE_PREPROCESS_PRAGMA_BODY 1
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// Allow to define macros with the command line syntax (-DMACRO(x)=definition)
+//
+// To disable the the possibility to define macros based on the command line
+// syntax, define the following constant as zero before including this file.
+//
+#if !defined(BOOST_WAVE_ENABLE_COMMANDLINE_MACROS)
+#define BOOST_WAVE_ENABLE_COMMANDLINE_MACROS 1
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// Define the pragma keyword to be used by the library to recognize its own
+// pragma's. If nothing else is defined, then 'wave' will be used as the
+// default keyword, i.e. the library recognizes all
+//
+// #pragma wave option [(argument)]
+//
+// and dispatches the handling to the interpret_pragma() preprocessing hook
+// function (see file: preprocessing_hooks.hpp). The arguments part of the
+// pragma is optional.
+// The BOOST_WAVE_PRAGMA_KEYWORD constant needs to be defined to
+// resolve as a string literal value.
+#if !defined(BOOST_WAVE_PRAGMA_KEYWORD)
+#define BOOST_WAVE_PRAGMA_KEYWORD "wave"
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// Define the string type to be used to store the token values and the file
+// names inside a file_position template class
+//
+#if !defined(BOOST_WAVE_STRINGTYPE)
+
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) || \
+ BOOST_WORKAROUND(__MWERKS__, < 0x3200) || \
+ (defined(__DECCXX) && defined(__alpha)) || \
+ defined(BOOST_WAVE_STRINGTYPE_USE_STDSTRING)
+
+// VC7 isn't able to compile the flex_string class, fall back to std::string
+// CW up to 8.3 chokes as well *sigh*
+// Tru64/CXX has linker problems when using flex_string
+#define BOOST_WAVE_STRINGTYPE std::string
+#if !defined(BOOST_WAVE_STRINGTYPE_USE_STDSTRING)
+#define BOOST_WAVE_STRINGTYPE_USE_STDSTRING 1
+#endif
+
+#else
+// use the following, if you have a fast std::allocator<char>
+#define BOOST_WAVE_STRINGTYPE boost::wave::util::flex_string< \
+ char, std::char_traits<char>, std::allocator<char>, \
+ boost::wave::util::CowString</*char, */\
+ boost::wave::util::AllocatorStringStorage<char> \
+ > \
+ > \
+ /**/
+
+/* #define BOOST_WAVE_STRINGTYPE boost::wave::util::flex_string< \
+ char, std::char_traits<char>, boost::fast_pool_allocator<char>, \
+ boost::wave::util::CowString<char, \
+ boost::wave::util::AllocatorStringStorage<char, \
+ boost::fast_pool_allocator<char> \
+ > \
+ > \
+ > \
+*/ /**/
+
+// This include is needed for the flex_string class used in the
+// BOOST_WAVE_STRINGTYPE above.
+#include <boost/wave/util/flex_string.hpp>
+
+// This include is needed for the boost::fast_allocator class used in the
+// BOOST_WAVE_STRINGTYPE above.
+// Configure Boost.Pool thread support (for now: no thread support at all)
+//#define BOOST_NO_MT
+//#include <boost/pool/pool_alloc.hpp>
+
+// Use the following, if you want to incorporate Maxim Yegorushkin's
+// const_string library (http://sourceforge.net/projects/conststring/), which
+// may be even faster, than using the flex_string class from above
+//#define BOOST_WAVE_STRINGTYPE boost::const_string<char>
+//
+//#include <boost/const_string/const_string.hpp>
+//#include <boost/const_string/io.hpp>
+//#include <boost/const_string/concatenation.hpp>
+
+#endif // BOOST_WORKAROUND(_MSC_VER, <= 1300)
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// The following definition forces the Spirit tree code to use list's instead
+// of vectors, which may be more efficient on some platforms
+// #define BOOST_SPIRIT_USE_LIST_FOR_TREES
+
+///////////////////////////////////////////////////////////////////////////////
+// The following definition forces the Spirit tree code to use boost pool
+// allocators in stead of the std::allocator for the vector/list's.
+// #define BOOST_SPIRIT_USE_BOOST_ALLOCATOR_FOR_TREES
+
+///////////////////////////////////////////////////////////////////////////////
+// Uncomment the following, if you need debug output, the
+// BOOST_SPIRIT_DEBUG_FLAGS_CPP constants below help to fine control the
+// amount of the generated debug output.
+//#define BOOST_SPIRIT_DEBUG
+
+///////////////////////////////////////////////////////////////////////////////
+// Debug flags for the Wave library, possible flags specified below.
+//
+// Note: These flags take effect only if the BOOST_SPIRIT_DEBUG constant
+// above is defined as well.
+#define BOOST_SPIRIT_DEBUG_FLAGS_CPP_GRAMMAR 0x0001
+#define BOOST_SPIRIT_DEBUG_FLAGS_TIME_CONVERSION 0x0002
+#define BOOST_SPIRIT_DEBUG_FLAGS_CPP_EXPR_GRAMMAR 0x0004
+#define BOOST_SPIRIT_DEBUG_FLAGS_INTLIT_GRAMMAR 0x0008
+#define BOOST_SPIRIT_DEBUG_FLAGS_CHLIT_GRAMMAR 0x0010
+#define BOOST_SPIRIT_DEBUG_FLAGS_DEFINED_GRAMMAR 0x0020
+#define BOOST_SPIRIT_DEBUG_FLAGS_PREDEF_MACROS_GRAMMAR 0x0040
+
+#if !defined(BOOST_SPIRIT_DEBUG_FLAGS_CPP)
+#define BOOST_SPIRIT_DEBUG_FLAGS_CPP 0 // default is no debugging
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// For all recognized preprocessor statements the output parse trees
+// formatted as xml are printed. The formatted parse trees are streamed to the
+// std::ostream defined by the WAVE_DUMP_PARSE_TREE_OUT constant.
+//
+// To enable the output of these parse trees, define the following constant
+// as zero something not equal to zero before including this file.
+//
+#if !defined(BOOST_WAVE_DUMP_PARSE_TREE)
+#define BOOST_WAVE_DUMP_PARSE_TREE 0
+#endif
+#if BOOST_WAVE_DUMP_PARSE_TREE != 0 && !defined(BOOST_WAVE_DUMP_PARSE_TREE_OUT)
+#define BOOST_WAVE_DUMP_PARSE_TREE_OUT std::cerr
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// For all #if and #elif directives the preprocessed expressions are printed.
+// These expressions are streamed to the std::ostream defined by the
+// BOOST_WAVE_DUMP_CONDITIONAL_EXPRESSIONS_OUT constant.
+//
+// To enable the output of the preprocessed expressions, define the following
+// constant as something not equal to zero before including this file.
+//
+#if !defined(BOOST_WAVE_DUMP_CONDITIONAL_EXPRESSIONS)
+#define BOOST_WAVE_DUMP_CONDITIONAL_EXPRESSIONS 0
+#endif
+#if BOOST_WAVE_DUMP_CONDITIONAL_EXPRESSIONS != 0 && \
+ !defined(BOOST_WAVE_DUMP_CONDITIONAL_EXPRESSIONS_OUT)
+#define BOOST_WAVE_DUMP_CONDITIONAL_EXPRESSIONS_OUT std::cerr
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// Decide, whether to use the separate compilation model for the instantiation
+// of the C++ lexer objects.
+//
+// If this is defined, you should explicitly instantiate the C++ lexer
+// template with the correct parameters in a separate compilation unit of
+// your program (see the file instantiate_re2c_lexer.cpp).
+//
+// To use the lexer inclusion model, define the following constant as
+// something not equal to zero before including this file.
+//
+#if !defined(BOOST_WAVE_SEPARATE_LEXER_INSTANTIATION)
+#define BOOST_WAVE_SEPARATE_LEXER_INSTANTIATION 1
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// Decide, whether to use the separate compilation model for the instantiation
+// of the grammar objects.
+//
+// If this is defined, you should explicitly instantiate the grammar
+// templates with the correct parameters in a separate compilation unit of
+// your program (see the files instantiate_cpp_grammar.cpp et.al.).
+//
+// To use the grammar inclusion model, define the following constant as
+// something not equal to zero before including this file.
+//
+#if !defined(BOOST_WAVE_SEPARATE_GRAMMAR_INSTANTIATION)
+#define BOOST_WAVE_SEPARATE_GRAMMAR_INSTANTIATION 1
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// Decide whether to use a strict C++ lexer.
+//
+// If this is defined to something != 0, then the C++ lexers recognize the
+// strict C99/C++ basic source character set. If it is not defined or defined
+// to zero, the C++ lexers recognize the '$' character as part of identifiers.
+//
+// The default is to recognize the '$' character as part of identifiers.
+//
+#if !defined(BOOST_WAVE_USE_STRICT_LEXER)
+#define BOOST_WAVE_USE_STRICT_LEXER 0
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// Decide, whether the serialization of the wave::context class should be
+// supported
+//
+// If this is defined to something not equal to zero the generated code will
+// expose routines allowing to store and reload the internal state of the
+// wave::context object.
+//
+// To enable the availability of the serialization functionality, define the
+// following constant as something not equal to zero before including this file.
+//
+#if !defined(BOOST_WAVE_SERIALIZATION)
+#define BOOST_WAVE_SERIALIZATION 0
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// configure Boost.Pool thread support (for now: no thread support at all)
+#if !defined(BOOST_NO_MT)
+#define BOOST_NO_MT
+#endif // !defined(BOOST_NO_MT)
+
+//#if !defined(BOOST_DISABLE_THREADS)
+//#define BOOST_DISABLE_THREADS
+//#endif // !defined(BOOST_DISABLE_THREADS)
+
+///////////////////////////////////////////////////////////////////////////////
+// Wave needs at least 4 parameters for phoenix actors
+#if !defined(PHOENIX_LIMIT)
+#define PHOENIX_LIMIT 6
+#endif
+#if PHOENIX_LIMIT < 6
+#error "Boost.Wave: the constant PHOENIX_LIMIT must be at least defined to 4" \
+ " to compile the library."
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// Set up dll import/export options
+#if defined(BOOST_HAS_DECLSPEC) && \
+ (defined(BOOST_WAVE_DYN_LINK) || defined(BOOST_ALL_DYN_LINK)) && \
+ !defined(BOOST_WAVE_STATIC_LINK)
+
+#if defined(BOOST_WAVE_SOURCE)
+#define BOOST_WAVE_DECL __declspec(dllexport)
+#define BOOST_WAVE_BUILD_DLL
+#else
+#define BOOST_WAVE_DECL __declspec(dllimport)
+#endif
+
+#endif // building a shared library
+
+#ifndef BOOST_WAVE_DECL
+#define BOOST_WAVE_DECL
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// Auto library naming
+#if BOOST_VERSION >= 103100
+// auto link features work beginning from Boost V1.31.0
+#if !defined(BOOST_WAVE_SOURCE) && !defined(BOOST_ALL_NO_LIB) && \
+ !defined(BOOST_WAVE_NO_LIB)
+
+#define BOOST_LIB_NAME boost_wave
+
+// tell the auto-link code to select a dll when required:
+#if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_WAVE_DYN_LINK)
+#define BOOST_DYN_LINK
+#endif
+
+#include <boost/config/auto_link.hpp>
+
+#endif // auto-linking disabled
+#endif // BOOST_VERSION
+
+#endif // !defined(WAVE_CONFIG_HPP_F143F90A_A63F_4B27_AC41_9CA4F14F538D_INCLUDED)
diff --git a/boost/boost/wave/wave_config_constant.hpp b/boost/boost/wave/wave_config_constant.hpp
new file mode 100644
index 00000000000..9060cc72f7b
--- /dev/null
+++ b/boost/boost/wave/wave_config_constant.hpp
@@ -0,0 +1,83 @@
+/*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+ Persistent application configuration
+
+ http://www.boost.org/
+
+ Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(BOOST_WAVE_CONFIG_CONSTANT_HPP)
+#define BOOST_WAVE_CONFIG_CONSTANT_HPP
+
+#include <boost/preprocessor/stringize.hpp>
+#include <boost/wave/wave_config.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+#if BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS != 0
+#define BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS_CONFIG 0x00000001
+#else
+#define BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS_CONFIG 0x00000000
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+#if BOOST_WAVE_SUPPORT_PRAGMA_ONCE != 0
+#define BOOST_WAVE_SUPPORT_PRAGMA_ONCE_CONFIG 0x00000002
+#else
+#define BOOST_WAVE_SUPPORT_PRAGMA_ONCE_CONFIG 0x00000000
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+#if BOOST_WAVE_SUPPORT_MS_EXTENSIONS != 0
+#define BOOST_WAVE_SUPPORT_MS_EXTENSIONS_CONFIG 0x00000004
+#else
+#define BOOST_WAVE_SUPPORT_MS_EXTENSIONS_CONFIG 0x00000000
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+#if BOOST_WAVE_PREPROCESS_PRAGMA_BODY != 0
+#define BOOST_WAVE_PREPROCESS_PRAGMA_BODY_CONFIG 0x00000008
+#else
+#define BOOST_WAVE_PREPROCESS_PRAGMA_BODY_CONFIG 0x00000000
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+#if BOOST_WAVE_USE_STRICT_LEXER != 0
+#define BOOST_WAVE_USE_STRICT_LEXER_CONFIG 0x00000010
+#else
+#define BOOST_WAVE_USE_STRICT_LEXER_CONFIG 0x00000000
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+#define BOOST_WAVE_CONFIG ( \
+ BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS_CONFIG | \
+ BOOST_WAVE_SUPPORT_PRAGMA_ONCE_CONFIG | \
+ BOOST_WAVE_SUPPORT_MS_EXTENSIONS_CONFIG | \
+ BOOST_WAVE_PREPROCESS_PRAGMA_BODY_CONFIG | \
+ BOOST_WAVE_USE_STRICT_LEXER_CONFIG \
+ ) \
+ /**/
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace wave {
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Call this function to test the configuration of the calling application
+ // against the configuration of the linked library.
+ BOOST_WAVE_DECL bool test_configuration(unsigned int config,
+ char const* pragma_keyword, char const* string_type);
+
+///////////////////////////////////////////////////////////////////////////////
+}} // namespace boost::wave
+
+#define BOOST_WAVE_TEST_CONFIGURATION() \
+ boost::wave::test_configuration( \
+ BOOST_WAVE_CONFIG, \
+ BOOST_WAVE_PRAGMA_KEYWORD, \
+ BOOST_PP_STRINGIZE((BOOST_WAVE_STRINGTYPE)) \
+ ) \
+ /**/
+
+#endif // !BOOST_WAVE_CONFIG_CONSTANT_HPP
diff --git a/boost/boost/wave/wave_version.hpp b/boost/boost/wave/wave_version.hpp
new file mode 100644
index 00000000000..d4deaf42aa4
--- /dev/null
+++ b/boost/boost/wave/wave_version.hpp
@@ -0,0 +1,26 @@
+/*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+
+ This is the current version of the Wave library
+
+ http://www.boost.org/
+
+ Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(WAVE_VERSION_H_9D79ABDB_AC54_4C0A_89B1_F70A2DCFE21E_INCLUDED)
+#define WAVE_VERSION_H_9D79ABDB_AC54_4C0A_89B1_F70A2DCFE21E_INCLUDED
+
+// BOOST_WAVE_VERSION & 0x0000FF is the sub-minor version
+// BOOST_WAVE_VERSION & 0x00FF00 is the minor version
+// BOOST_WAVE_VERSION & 0xFF0000 is the major version
+#define BOOST_WAVE_VERSION 0x010204
+
+// The following defines contain the same information as above
+#define BOOST_WAVE_VERSION_MAJOR 1
+#define BOOST_WAVE_VERSION_MINOR 2
+#define BOOST_WAVE_VERSION_SUBMINOR 4
+
+#endif // !defined(WAVE_VERSION_H_9D79ABDB_AC54_4C0A_89B1_F70A2DCFE21E_INCLUDED)
diff --git a/boost/boost/wave/whitespace_handling.hpp b/boost/boost/wave/whitespace_handling.hpp
new file mode 100644
index 00000000000..fb497bafe7b
--- /dev/null
+++ b/boost/boost/wave/whitespace_handling.hpp
@@ -0,0 +1,228 @@
+/*=============================================================================
+ Boost.Wave: A Standard compliant C++ preprocessor library
+ Whitespace eater
+
+ http://www.boost.org/
+
+ Copyright (c) 2003 Paul Mensonides
+ Copyright (c) 2001-2007 Hartmut Kaiser.
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(WHITESPACE_HANDLING_HPP_INCLUDED)
+#define WHITESPACE_HANDLING_HPP_INCLUDED
+
+#include <boost/wave/wave_config.hpp>
+#include <boost/wave/token_ids.hpp>
+#include <boost/wave/preprocessing_hooks.hpp>
+
+// this must occur after all of the includes and before any code appears
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_PREFIX
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace wave {
+namespace context_policies {
+
+namespace util {
+ ///////////////////////////////////////////////////////////////////////////
+ // This function returns true if the given C style comment contains at
+ // least one newline
+ template <typename TokenT>
+ bool ccomment_has_newline(TokenT const& token)
+ {
+ using namespace boost::wave;
+
+ if (T_CCOMMENT == token_id(token) &&
+ TokenT::string_type::npos != token.get_value().find_first_of("\n"))
+ {
+ return true;
+ }
+ return false;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // This function returns the number of newlines in the given C style
+ // comment
+ template <typename TokenT>
+ int ccomment_count_newlines(TokenT const& token)
+ {
+ using namespace boost::wave;
+ int newlines = 0;
+ if (T_CCOMMENT == token_id(token)) {
+ typename TokenT::string_type const& value = token.get_value();
+ typename TokenT::string_type::size_type p = value.find_first_of("\n");
+
+ while (TokenT::string_type::npos != p) {
+ ++newlines;
+ p = value.find_first_of("\n", p+1);
+ }
+ }
+ return newlines;
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+template <typename TokenT>
+class eat_whitespace
+: public default_preprocessing_hooks
+{
+public:
+ eat_whitespace();
+
+ template <typename ContextT>
+ bool may_skip_whitespace(ContextT const& ctx, TokenT &token,
+ bool &skipped_newline);
+
+protected:
+ bool skip_cppcomment(boost::wave::token_id id)
+ {
+ return !preserve_comments && T_CPPCOMMENT == id;
+ }
+
+private:
+ typedef bool state_t(TokenT &token, bool &skipped_newline);
+ state_t eat_whitespace::* state;
+ state_t general, newline, newline_2nd, whitespace;
+ bool preserve_comments;
+};
+
+template <typename TokenT>
+inline
+eat_whitespace<TokenT>::eat_whitespace()
+: state(&eat_whitespace::newline), preserve_comments(false)
+{
+}
+
+template <typename TokenT>
+template <typename ContextT>
+inline bool
+eat_whitespace<TokenT>::may_skip_whitespace(ContextT const& ctx, TokenT &token,
+ bool &skipped_newline)
+{
+ // re-initialize the preserve comments state
+ preserve_comments = boost::wave::need_preserve_comments(ctx.get_language());
+ return (this->*state)(token, skipped_newline);
+}
+
+template <typename TokenT>
+inline bool
+eat_whitespace<TokenT>::general(TokenT &token, bool &skipped_newline)
+{
+ using namespace boost::wave;
+
+ token_id id = token_id(token);
+ if (T_NEWLINE == id || T_CPPCOMMENT == id) {
+ state = &eat_whitespace::newline;
+ }
+ else if (T_SPACE == id || T_SPACE2 == id || T_CCOMMENT == id) {
+ state = &eat_whitespace::whitespace;
+
+ if (util::ccomment_has_newline(token))
+ skipped_newline = true;
+
+ if ((!preserve_comments || T_CCOMMENT != id) &&
+ token.get_value().size() > 1)
+ {
+ token.set_value(" "); // replace with a single space
+ }
+ }
+ else {
+ state = &eat_whitespace::general;
+ }
+ return false;
+}
+
+template <typename TokenT>
+inline bool
+eat_whitespace<TokenT>::newline(TokenT &token, bool &skipped_newline)
+{
+ using namespace boost::wave;
+
+ token_id id = token_id(token);
+ if (T_NEWLINE == id || T_CPPCOMMENT == id) {
+ skipped_newline = true;
+ state = &eat_whitespace::newline_2nd;
+ return T_NEWLINE == id || skip_cppcomment(id);
+ }
+ else if (T_SPACE != id && T_SPACE2 != id && T_CCOMMENT != id) {
+ return general(token, skipped_newline);
+ }
+
+ if (T_CCOMMENT == id) {
+ if (util::ccomment_has_newline(token)) {
+ skipped_newline = true;
+ state = &eat_whitespace::newline_2nd;
+ }
+ if (preserve_comments) {
+ state = &eat_whitespace::general;
+ return false;
+ }
+ // fall through...
+ }
+ return true;
+}
+
+template <typename TokenT>
+inline bool
+eat_whitespace<TokenT>::newline_2nd(TokenT &token, bool &skipped_newline)
+{
+ using namespace boost::wave;
+
+ token_id id = token_id(token);
+ if (T_SPACE == id || T_SPACE2 == id)
+ return true;
+ if (T_CCOMMENT == id) {
+ if (util::ccomment_has_newline(token))
+ skipped_newline = true;
+
+ if (preserve_comments) {
+ state = &eat_whitespace::general;
+ return false;
+ }
+ return true;
+ }
+ if (T_NEWLINE != id && T_CPPCOMMENT != id)
+ return general(token, skipped_newline);
+
+ skipped_newline = true;
+ return T_NEWLINE == id || skip_cppcomment(id);
+}
+
+template <typename TokenT>
+inline bool
+eat_whitespace<TokenT>::whitespace(TokenT &token, bool &skipped_newline)
+{
+ using namespace boost::wave;
+
+ token_id id = token_id(token);
+ if (T_SPACE != id && T_SPACE2 != id &&
+ T_CCOMMENT != id && T_CPPCOMMENT != id)
+ {
+ return general(token, skipped_newline);
+ }
+
+ if (T_CCOMMENT == id) {
+ if (util::ccomment_has_newline(token))
+ skipped_newline = true;
+ return !preserve_comments;
+ }
+
+ return T_SPACE == id || T_SPACE2 == id || skip_cppcomment(id);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+} // namespace context_policies
+} // namespace wave
+} // namespace boost
+
+// the suffix header occurs after all of the code
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_SUFFIX
+#endif
+
+#endif // !defined(WHITESPACE_HANDLING_HPP_INCLUDED)
+
diff --git a/boost/boost/weak_ptr.hpp b/boost/boost/weak_ptr.hpp
new file mode 100644
index 00000000000..8f4230fb02c
--- /dev/null
+++ b/boost/boost/weak_ptr.hpp
@@ -0,0 +1,194 @@
+#ifndef BOOST_WEAK_PTR_HPP_INCLUDED
+#define BOOST_WEAK_PTR_HPP_INCLUDED
+
+//
+// weak_ptr.hpp
+//
+// Copyright (c) 2001, 2002, 2003 Peter Dimov
+//
+// 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/smart_ptr/weak_ptr.htm for documentation.
+//
+
+#include <memory> // boost.TR1 include order fix
+#include <boost/detail/shared_count.hpp>
+#include <boost/shared_ptr.hpp>
+
+#ifdef BOOST_MSVC // moved here to work around VC++ compiler crash
+# pragma warning(push)
+# pragma warning(disable:4284) // odd return type for operator->
+#endif
+
+namespace boost
+{
+
+template<class T> class weak_ptr
+{
+private:
+
+ // Borland 5.5.1 specific workarounds
+ typedef weak_ptr<T> this_type;
+
+public:
+
+ typedef T element_type;
+
+ weak_ptr(): px(0), pn() // never throws in 1.30+
+ {
+ }
+
+// generated copy constructor, assignment, destructor are fine
+
+
+//
+// The "obvious" converting constructor implementation:
+//
+// template<class Y>
+// weak_ptr(weak_ptr<Y> const & r): px(r.px), pn(r.pn) // never throws
+// {
+// }
+//
+// has a serious problem.
+//
+// r.px may already have been invalidated. The px(r.px)
+// conversion may require access to *r.px (virtual inheritance).
+//
+// It is not possible to avoid spurious access violations since
+// in multithreaded programs r.px may be invalidated at any point.
+//
+
+ template<class Y>
+ weak_ptr(weak_ptr<Y> const & r): pn(r.pn) // never throws
+ {
+ px = r.lock().get();
+ }
+
+ template<class Y>
+ weak_ptr(shared_ptr<Y> const & r): px(r.px), pn(r.pn) // never throws
+ {
+ }
+
+#if !defined(BOOST_MSVC) || (BOOST_MSVC >= 1300)
+
+ template<class Y>
+ weak_ptr & operator=(weak_ptr<Y> const & r) // never throws
+ {
+ px = r.lock().get();
+ pn = r.pn;
+ return *this;
+ }
+
+ template<class Y>
+ weak_ptr & operator=(shared_ptr<Y> const & r) // never throws
+ {
+ px = r.px;
+ pn = r.pn;
+ return *this;
+ }
+
+#endif
+
+ shared_ptr<T> lock() const // never throws
+ {
+#if defined(BOOST_HAS_THREADS)
+
+ // optimization: avoid throw overhead
+ if(expired())
+ {
+ return shared_ptr<element_type>();
+ }
+
+ try
+ {
+ return shared_ptr<element_type>(*this);
+ }
+ catch(bad_weak_ptr const &)
+ {
+ // Q: how can we get here?
+ // A: another thread may have invalidated r after the use_count test above.
+ return shared_ptr<element_type>();
+ }
+
+#else
+
+ // optimization: avoid try/catch overhead when single threaded
+ return expired()? shared_ptr<element_type>(): shared_ptr<element_type>(*this);
+
+#endif
+ }
+
+ long use_count() const // never throws
+ {
+ return pn.use_count();
+ }
+
+ bool expired() const // never throws
+ {
+ return pn.use_count() == 0;
+ }
+
+ void reset() // never throws in 1.30+
+ {
+ this_type().swap(*this);
+ }
+
+ void swap(this_type & other) // never throws
+ {
+ std::swap(px, other.px);
+ pn.swap(other.pn);
+ }
+
+ void _internal_assign(T * px2, boost::detail::shared_count const & pn2)
+ {
+ px = px2;
+ pn = pn2;
+ }
+
+ template<class Y> bool _internal_less(weak_ptr<Y> const & rhs) const
+ {
+ return pn < rhs.pn;
+ }
+
+// Tasteless as this may seem, making all members public allows member templates
+// to work in the absence of member template friends. (Matthew Langston)
+
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+
+private:
+
+ template<class Y> friend class weak_ptr;
+ template<class Y> friend class shared_ptr;
+
+#endif
+
+ T * px; // contained pointer
+ boost::detail::weak_count pn; // reference counter
+
+}; // weak_ptr
+
+template<class T, class U> inline bool operator<(weak_ptr<T> const & a, weak_ptr<U> const & b)
+{
+ return a._internal_less(b);
+}
+
+template<class T> void swap(weak_ptr<T> & a, weak_ptr<T> & b)
+{
+ a.swap(b);
+}
+
+// deprecated, provided for backward compatibility
+template<class T> shared_ptr<T> make_shared(weak_ptr<T> const & r)
+{
+ return r.lock();
+}
+
+} // namespace boost
+
+#ifdef BOOST_MSVC
+# pragma warning(pop)
+#endif
+
+#endif // #ifndef BOOST_WEAK_PTR_HPP_INCLUDED
diff --git a/boost/boost/xpressive/basic_regex.hpp b/boost/boost/xpressive/basic_regex.hpp
new file mode 100644
index 00000000000..91c71b7af0f
--- /dev/null
+++ b/boost/boost/xpressive/basic_regex.hpp
@@ -0,0 +1,239 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file basic_regex.hpp
+/// Contains the definition of the basic_regex\<\> class template and its
+/// associated helper functions.
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_BASIC_REGEX_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_BASIC_REGEX_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#ifdef BOOST_XPRESSIVE_DEBUG_TRACKING_POINTER
+# include <iostream>
+#endif
+#include <boost/mpl/bool.hpp>
+#include <boost/xpressive/proto/proto_fwd.hpp>
+#include <boost/xpressive/regex_constants.hpp>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/core/regex_impl.hpp>
+
+namespace boost { namespace xpressive
+{
+
+///////////////////////////////////////////////////////////////////////////////
+// basic_regex
+//
+/// \brief Class template basic_regex\<\> is a class for holding a compiled regular expression.
+template<typename BidiIter>
+struct basic_regex
+{
+ typedef BidiIter iterator_type;
+ typedef typename iterator_value<BidiIter>::type char_type;
+ typedef std::basic_string<char_type> string_type;
+ typedef regex_constants::syntax_option_type flag_type;
+
+ /// \post regex_id() == 0
+ /// \post mark_count() == 0
+ basic_regex()
+ : impl_()
+ {
+ }
+
+ /// \param that The basic_regex object to copy.
+ /// \post regex_id() == that.regex_id()
+ /// \post mark_count() == that.mark_count()
+ basic_regex(basic_regex<BidiIter> const &that)
+ : impl_(that.impl_)
+ {
+ }
+
+ /// \param that The basic_regex object to copy.
+ /// \post regex_id() == that.regex_id()
+ /// \post mark_count() == that.mark_count()
+ /// \return *this
+ basic_regex<BidiIter> &operator =(basic_regex<BidiIter> const &that)
+ {
+ this->impl_ = that.impl_;
+ return *this;
+ }
+
+ /// Construct from a static regular expression.
+ ///
+ /// \param xpr The static regular expression
+ /// \pre Xpr is the type of a static regular expression.
+ /// \post regex_id() != 0
+ /// \post mark_count() \>= 0
+ template<typename Xpr>
+ basic_regex(Xpr const &xpr)
+ : impl_()
+ {
+ this->operator =(xpr);
+ }
+
+ /// Construct from a static regular expression.
+ ///
+ /// \param xpr The static regular expression.
+ /// \pre Xpr is the type of a static regular expression.
+ /// \post regex_id() != 0
+ /// \post mark_count() \>= 0
+ /// \throw std::bad_alloc on out of memory
+ /// \return *this
+ template<typename Xpr>
+ basic_regex<BidiIter> &operator =(Xpr const &xpr)
+ {
+ detail::static_compile(xpr, *this->impl_.get());
+ return *this;
+ }
+
+ /// Returns the count of capturing sub-expressions in this regular expression
+ ///
+ std::size_t mark_count() const
+ {
+ return this->impl_ ? this->impl_->mark_count_ : 0;
+ }
+
+ /// Returns a token which uniquely identifies this regular expression.
+ ///
+ regex_id_type regex_id() const
+ {
+ return this->impl_ ? this->impl_->xpr_.get() : 0;
+ }
+
+ /// Swaps the contents of this basic_regex object with another.
+ ///
+ /// \param that The other basic_regex object.
+ /// \attention This is a shallow swap that does not do reference tracking. If you embed
+ /// a basic_regex object by reference in another regular expression and then swap its
+ /// contents with another basic_regex object, the change will not be visible to the enclosing
+ /// regular expression. It is done this way to ensure that swap() cannot throw.
+ /// \throw nothrow
+ void swap(basic_regex<BidiIter> &that) // throw()
+ {
+ this->impl_.swap(that.impl_);
+ }
+
+ /// Factory method for building a regex object from a string.
+ /// Equivalent to regex_compiler\< BidiIter \>().compile(str, flags);
+ ///
+ /// \param str The std::basic_string containing the regular expression.
+ /// \param flags Optional bitmask of type syntax_option_type to control how str is interpreted.
+ static basic_regex<BidiIter> compile(string_type const &str, flag_type flags = regex_constants::ECMAScript)
+ {
+ return regex_compiler<BidiIter>().compile(str, flags);
+ }
+
+ // for binding actions to this regex when it is nested statically in another regex
+ /// INTERNAL ONLY
+ template<typename Action>
+ proto::binary_op
+ <
+ proto::unary_op<basic_regex<BidiIter>, proto::noop_tag>
+ , proto::unary_op<Action, proto::noop_tag>
+ , proto::right_shift_tag
+ > const
+ operator [](detail::action_matcher<Action> const &action) const
+ {
+ return proto::noop(*this) >> proto::noop(*static_cast<Action const *>(&action));
+ }
+
+ //{{AFX_DEBUG
+ #ifdef BOOST_XPRESSIVE_DEBUG_TRACKING_POINTER
+ // BUGBUG debug only
+ /// INTERNAL ONLY
+ friend std::ostream &operator <<(std::ostream &sout, basic_regex<BidiIter> const &rex)
+ {
+ rex.dump_(sout);
+ return sout;
+ }
+ #endif
+ //}}AFX_DEBUG
+
+private:
+ friend struct detail::core_access<BidiIter>;
+
+ // Avoid a common programming mistake. Construction from a string is ambiguous. It could mean
+ // sregex rx = sregex::compile(str); // compile the string into a regex
+ // or
+ // sregex rx = as_xpr(str); // treat the string as a literal
+ // Since there is no easy way to disambiguate, disallow it and force users to say what they mean
+ /// INTERNAL ONLY
+ basic_regex(char_type const *);
+ /// INTERNAL ONLY
+ basic_regex(string_type const &);
+
+ // used from parser, via core_access
+ /// INTERNAL ONLY
+ explicit basic_regex(detail::regex_impl<BidiIter> const &that)
+ : impl_()
+ {
+ this->impl_.tracking_copy(that);
+ }
+
+ /// INTERNAL ONLY
+ bool match_(detail::state_type<BidiIter> &state) const
+ {
+ return this->impl_->xpr_->match(state);
+ }
+
+ // Returns true if this basic_regex object does not contain a valid regular expression.
+ /// INTERNAL ONLY
+ bool invalid_() const
+ {
+ return !this->impl_ || !this->impl_->xpr_;
+ }
+
+ /// INTERNAL ONLY
+ void dump_(std::ostream &sout) const;
+
+ // the tracking_ptr manages lazy-init, COW, cycle-breaking, and
+ // reference/dependency tracking.
+ detail::tracking_ptr<detail::regex_impl<BidiIter> > impl_;
+};
+
+//{{AFX_DEBUG
+#ifdef BOOST_XPRESSIVE_DEBUG_TRACKING_POINTER
+///////////////////////////////////////////////////////////////////////////////
+// dump_
+/// INTERNAL ONLY
+template<typename BidiIter>
+inline void basic_regex<BidiIter>::dump_(std::ostream &sout) const
+{
+ if(!this->impl_)
+ {
+ sout << "<null> refs={} deps={}";
+ }
+ else
+ {
+ sout << *this->impl_;
+ }
+}
+#endif
+//}}AFX_DEBUG
+
+///////////////////////////////////////////////////////////////////////////////
+// swap
+/// \brief Swaps the contents of two basic_regex objects.
+/// \param left The first basic_regex object.
+/// \param right The second basic_regex object.
+/// \attention This is a shallow swap that does not do reference tracking.
+/// If you embed a basic_regex object by reference in another regular expression
+/// and then swap its contents with another basic_regex object, the change will
+/// not be visible to the enclosing regular expression. It is done this way to
+/// ensure that swap() cannot throw.
+/// \throw nothrow
+template<typename BidiIter>
+inline void swap(basic_regex<BidiIter> &left, basic_regex<BidiIter> &right) // throw()
+{
+ left.swap(right);
+}
+
+}} // namespace boost::xpressive
+
+#endif // BOOST_XPRESSIVE_REGEX_HPP_EAN_10_04_2005
diff --git a/boost/boost/xpressive/detail/core/access.hpp b/boost/boost/xpressive/detail/core/access.hpp
new file mode 100644
index 00000000000..c63f4bd0b34
--- /dev/null
+++ b/boost/boost/xpressive/detail/core/access.hpp
@@ -0,0 +1,131 @@
+///////////////////////////////////////////////////////////////////////////////
+// accesss.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_CORE_ACCESS_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_CORE_ACCESS_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <vector>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/dynamic/matchable.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+///////////////////////////////////////////////////////////////////////////////
+// core_access
+//
+template<typename BidiIter>
+struct core_access
+{
+ // BUGBUG give basic_regex move semantics!
+ static basic_regex<BidiIter> make_regex(regex_impl<BidiIter> const &impl)
+ {
+ return basic_regex<BidiIter>(impl);
+ }
+
+ static std::size_t get_hidden_mark_count(basic_regex<BidiIter> const &rex)
+ {
+ return rex.impl_->hidden_mark_count_;
+ }
+
+ static bool invalid(basic_regex<BidiIter> const &rex)
+ {
+ return rex.invalid_();
+ }
+
+ static bool match(basic_regex<BidiIter> const &rex, state_type<BidiIter> &state)
+ {
+ return rex.match_(state);
+ }
+
+ static shared_ptr<detail::regex_impl<BidiIter> > const &
+ get_regex_impl(basic_regex<BidiIter> const &rex)
+ {
+ return rex.impl_.get();
+ }
+
+ static void init_sub_match_vector
+ (
+ sub_match_vector<BidiIter> &subs_vect
+ , sub_match_impl<BidiIter> *subs_ptr
+ , std::size_t size
+ )
+ {
+ subs_vect.init_(subs_ptr, size);
+ }
+
+ static void init_sub_match_vector
+ (
+ sub_match_vector<BidiIter> &subs_vect
+ , sub_match_impl<BidiIter> *subs_ptr
+ , std::size_t size
+ , sub_match_vector<BidiIter> const &that
+ )
+ {
+ subs_vect.init_(subs_ptr, size, that);
+ }
+
+ static void init_match_results
+ (
+ match_results<BidiIter> &what
+ , regex_id_type regex_id
+ , sub_match_impl<BidiIter> *sub_matches
+ , std::size_t size
+ )
+ {
+ what.init_(regex_id, sub_matches, size);
+ }
+
+ static sub_match_vector<BidiIter> &get_sub_match_vector(match_results<BidiIter> &what)
+ {
+ return what.sub_matches_;
+ }
+
+ static sub_match_impl<BidiIter> *get_sub_matches(sub_match_vector<BidiIter> &subs)
+ {
+ return subs.sub_matches_;
+ }
+
+ static results_extras<BidiIter> &get_extras(match_results<BidiIter> &what)
+ {
+ return what.get_extras_();
+ }
+
+ static nested_results<BidiIter> &get_nested_results(match_results<BidiIter> &what)
+ {
+ return what.nested_results_;
+ }
+
+ static action_state &get_action_state(match_results<BidiIter> &what)
+ {
+ return what.action_state_;
+ }
+
+ static void set_prefix_suffix(match_results<BidiIter> &what, BidiIter begin, BidiIter end)
+ {
+ what.set_prefix_suffix_(begin, end);
+ }
+
+ static void reset(match_results<BidiIter> &what)
+ {
+ what.reset_();
+ }
+
+ static void set_base(match_results<BidiIter> &what, BidiIter base)
+ {
+ what.set_base_(base);
+ }
+};
+
+}}} // namespace boost::xpressive::detail
+
+#endif
diff --git a/boost/boost/xpressive/detail/core/action.hpp b/boost/boost/xpressive/detail/core/action.hpp
new file mode 100644
index 00000000000..3e7dbf00eff
--- /dev/null
+++ b/boost/boost/xpressive/detail/core/action.hpp
@@ -0,0 +1,69 @@
+///////////////////////////////////////////////////////////////////////////////
+// action.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_CORE_ACTION_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_CORE_ACTION_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <typeinfo>
+#include <stdexcept>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/core/quant_style.hpp>
+#include <boost/xpressive/detail/core/action_state.hpp>
+#include <boost/xpressive/detail/core/matcher/action_matcher.hpp>
+
+namespace boost { namespace xpressive
+{
+
+///////////////////////////////////////////////////////////////////////////////
+// action
+//
+template<typename Action, typename Saved>
+struct action
+ : detail::action_matcher<Action>
+{
+ typedef Action action_type;
+ typedef Saved saved_type;
+
+ Saved &save()
+ {
+ return *static_cast<Saved *>(this);
+ }
+
+ template<typename BidiIter>
+ bool operator ()(match_results<BidiIter> const &match, BidiIter cur)
+ {
+ return true;
+ }
+
+ void restore(Saved const &saved)
+ {
+ this->action_() = saved;
+ }
+};
+
+template<typename Action>
+struct action<Action, void>
+ : action<Action, int>
+{
+ int save()
+ {
+ return 0;
+ }
+
+ void restore(int)
+ {
+ }
+};
+
+}} // namespace boost::xpressive
+
+#endif
diff --git a/boost/boost/xpressive/detail/core/action_state.hpp b/boost/boost/xpressive/detail/core/action_state.hpp
new file mode 100644
index 00000000000..3696bc51ca6
--- /dev/null
+++ b/boost/boost/xpressive/detail/core/action_state.hpp
@@ -0,0 +1,72 @@
+///////////////////////////////////////////////////////////////////////////////
+// action_state.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_CORE_ACTION_STATE_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_CORE_ACTION_STATE_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <typeinfo>
+#include <stdexcept>
+#include <boost/assert.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // type_info_ex
+ //
+ template<typename T>
+ struct type_info_ex
+ {
+ static std::type_info const *const type_info_ptr_;
+ };
+
+ template<typename T>
+ std::type_info const *const type_info_ex<T>::type_info_ptr_ = &typeid(T);
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // action_state
+ //
+ struct action_state
+ {
+ action_state()
+ : type_ptr_(0)
+ , ptr_(0)
+ {
+ }
+
+ template<typename State>
+ void set(State &state)
+ {
+ this->type_ptr_ = &type_info_ex<State>::type_info_ptr_;
+ this->ptr_ = &state;
+ }
+
+ template<typename State>
+ State &get() const
+ {
+ if(&type_info_ex<State>::type_info_ptr_ != this->type_ptr_ &&
+ (0 == this->type_ptr_ || **this->type_ptr_ != typeid(State)))
+ {
+ throw std::invalid_argument(std::string("bad action_state_cast"));
+ }
+
+ BOOST_ASSERT(0 != this->ptr_);
+ return *static_cast<State *>(this->ptr_);
+ }
+
+ std::type_info const *const *type_ptr_;
+ void *ptr_;
+ };
+
+}}} // namespace boost::xpressive::detail
+
+#endif
diff --git a/boost/boost/xpressive/detail/core/adaptor.hpp b/boost/boost/xpressive/detail/core/adaptor.hpp
new file mode 100644
index 00000000000..713fcc37ff5
--- /dev/null
+++ b/boost/boost/xpressive/detail/core/adaptor.hpp
@@ -0,0 +1,78 @@
+///////////////////////////////////////////////////////////////////////////////
+// adaptor.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_CORE_ADAPTOR_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_CORE_ADAPTOR_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/shared_ptr.hpp>
+#include <boost/call_traits.hpp>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/dynamic/matchable.hpp>
+#include <boost/xpressive/detail/core/state.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+///////////////////////////////////////////////////////////////////////////////
+// xpression_adaptor
+//
+// wrap a static xpression in a matchable interface so it can be stored
+// in and invoked from a basic_regex object.
+template<typename Xpr, typename BidiIter>
+struct xpression_adaptor
+ : matchable<BidiIter>
+{
+ typedef typename iterator_value<BidiIter>::type char_type;
+
+ Xpr xpr_;
+
+ xpression_adaptor(typename call_traits<Xpr>::param_type xpr)
+ : xpr_(xpr)
+ {
+ }
+
+ bool match(state_type<BidiIter> &state) const
+ {
+ return this->xpr_.match(state);
+ }
+
+ std::size_t get_width(state_type<BidiIter> *state) const
+ {
+ return this->xpr_.get_width(state);
+ }
+
+ void link(xpression_linker<char_type> &linker) const
+ {
+ this->xpr_.link(linker);
+ }
+
+ void peek(xpression_peeker<char_type> &peeker) const
+ {
+ this->xpr_.peek(peeker);
+ }
+
+private:
+ xpression_adaptor &operator =(xpression_adaptor const &);
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// make_adaptor
+//
+template<typename BidiIter, typename Xpr>
+inline shared_ptr<matchable<BidiIter> const> make_adaptor(Xpr const &xpr)
+{
+ return shared_ptr<matchable<BidiIter> const>(new xpression_adaptor<Xpr, BidiIter>(xpr));
+}
+
+}}} // namespace boost::xpressive::detail
+
+#endif
diff --git a/boost/boost/xpressive/detail/core/finder.hpp b/boost/boost/xpressive/detail/core/finder.hpp
new file mode 100644
index 00000000000..e848ff3c568
--- /dev/null
+++ b/boost/boost/xpressive/detail/core/finder.hpp
@@ -0,0 +1,194 @@
+/// Contains the definition of the basic_regex\<\> class template and its associated helper functions.
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_CORE_FINDER_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_CORE_FINDER_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+# pragma warning(push)
+# pragma warning(disable : 4189) // local variable is initialized but not referenced
+#endif
+
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/core/regex_impl.hpp>
+#include <boost/xpressive/detail/utility/boyer_moore.hpp>
+#include <boost/xpressive/detail/utility/hash_peek_bitset.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+///////////////////////////////////////////////////////////////////////////////
+// boyer_moore_finder
+//
+template<typename BidiIter, typename Traits>
+struct boyer_moore_finder
+ : finder<BidiIter>
+{
+ typedef typename iterator_value<BidiIter>::type char_type;
+
+ boyer_moore_finder(char_type const *begin, char_type const *end, Traits const &tr, bool icase)
+ : bm_(begin, end, tr, icase)
+ {
+ }
+
+ bool operator ()(state_type<BidiIter> &state) const
+ {
+ Traits const &traits = traits_cast<Traits>(state);
+ state.cur_ = this->bm_.find(state.cur_, state.end_, traits);
+ return state.cur_ != state.end_;
+ }
+
+private:
+ boyer_moore_finder(boyer_moore_finder const &);
+ boyer_moore_finder &operator =(boyer_moore_finder const &);
+
+ boyer_moore<BidiIter, Traits> bm_;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// hash_peek_finder
+//
+template<typename BidiIter, typename Traits>
+struct hash_peek_finder
+ : finder<BidiIter>
+{
+ typedef typename iterator_value<BidiIter>::type char_type;
+
+ hash_peek_finder(hash_peek_bitset<char_type> const &bset)
+ : bset_(bset)
+ {
+ }
+
+ bool operator ()(state_type<BidiIter> &state) const
+ {
+ Traits const &traits = traits_cast<Traits>(state);
+ state.cur_ = (this->bset_.icase()
+ ? this->find_(state.cur_, state.end_, traits, mpl::true_())
+ : this->find_(state.cur_, state.end_, traits, mpl::false_()));
+ return state.cur_ != state.end_;
+ }
+
+private:
+ hash_peek_finder(hash_peek_finder const &);
+ hash_peek_finder &operator =(hash_peek_finder const &);
+
+ template<typename ICase>
+ BidiIter find_(BidiIter begin, BidiIter end, Traits const &traits, ICase) const
+ {
+ for(; begin != end && !this->bset_.test(*begin, traits, ICase()); ++begin)
+ ;
+ return begin;
+ }
+
+ hash_peek_bitset<char_type> bset_;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// line_start_finder
+//
+template<typename BidiIter, typename Traits, std::size_t Size = sizeof(typename iterator_value<BidiIter>::type)>
+struct line_start_finder
+ : finder<BidiIter>
+{
+ typedef typename iterator_value<BidiIter>::type char_type;
+ typedef typename iterator_difference<BidiIter>::type diff_type;
+ typedef typename Traits::char_class_type char_class_type;
+
+ line_start_finder(Traits const &traits)
+ : newline_(lookup_classname(traits, "newline"))
+ {
+ }
+
+ bool operator ()(state_type<BidiIter> &state) const
+ {
+ if(state.bos() && state.flags_.match_bol_)
+ {
+ return true;
+ }
+
+ Traits const &traits = traits_cast<Traits>(state);
+ BidiIter cur = state.cur_;
+ BidiIter const end = state.end_;
+ std::advance(cur, static_cast<diff_type>(-!state.bos()));
+
+ for(; cur != end; ++cur)
+ {
+ if(traits.isctype(*cur, this->newline_))
+ {
+ state.cur_ = ++cur;
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+private:
+ line_start_finder(line_start_finder const &);
+ line_start_finder &operator =(line_start_finder const &);
+
+ char_class_type newline_;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// line_start_finder
+//
+template<typename BidiIter, typename Traits>
+struct line_start_finder<BidiIter, Traits, 1u>
+ : finder<BidiIter>
+{
+ typedef typename iterator_value<BidiIter>::type char_type;
+ typedef typename iterator_difference<BidiIter>::type diff_type;
+ typedef typename Traits::char_class_type char_class_type;
+
+ line_start_finder(Traits const &traits)
+ {
+ char_class_type newline = lookup_classname(traits, "newline");
+ for(int j = 0; j < 256; ++j)
+ {
+ this->bits_[j] = traits.isctype(static_cast<char_type>(static_cast<unsigned char>(j)), newline);
+ }
+ }
+
+ bool operator ()(state_type<BidiIter> &state) const
+ {
+ if(state.bos() && state.flags_.match_bol_)
+ {
+ return true;
+ }
+
+ BidiIter cur = state.cur_;
+ BidiIter const end = state.end_;
+ std::advance(cur, static_cast<diff_type>(-!state.bos()));
+
+ for(; cur != end; ++cur)
+ {
+ if(this->bits_[static_cast<unsigned char>(*cur)])
+ {
+ state.cur_ = ++cur;
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+private:
+ line_start_finder(line_start_finder const &);
+ line_start_finder &operator =(line_start_finder const &);
+
+ bool bits_[256];
+};
+
+}}}
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma warning(pop)
+#endif
+
+#endif
diff --git a/boost/boost/xpressive/detail/core/flow_control.hpp b/boost/boost/xpressive/detail/core/flow_control.hpp
new file mode 100644
index 00000000000..ed316d6e644
--- /dev/null
+++ b/boost/boost/xpressive/detail/core/flow_control.hpp
@@ -0,0 +1,69 @@
+///////////////////////////////////////////////////////////////////////////////
+// flow_control.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_CORE_FLOW_CONTROL_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_CORE_FLOW_CONTROL_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/core/regex_impl.hpp>
+#include <boost/xpressive/detail/core/state.hpp>
+#include <boost/xpressive/detail/utility/ignore_unused.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+///////////////////////////////////////////////////////////////////////////////
+// push_context_match
+//
+template<typename BidiIter>
+inline bool push_context_match
+(
+ regex_impl<BidiIter> const &impl
+ , state_type<BidiIter> &state
+ , matchable<BidiIter> const &next
+)
+{
+ // save state
+ match_context<BidiIter> context = state.push_context(impl, next, context);
+ detail::ignore_unused(&context);
+
+ // match the nested regex
+ bool success = impl.xpr_->match(state);
+
+ // uninitialize the match context (reclaims the sub_match objects if necessary)
+ state.pop_context(impl, success);
+ return success;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// pop_context_match
+//
+template<typename BidiIter>
+inline bool pop_context_match(state_type<BidiIter> &state)
+{
+ // save state
+ // BUGBUG nested regex could have changed state.traits_
+ match_context<BidiIter> &context(*state.context_.prev_context_);
+ state.swap_context(context);
+
+ // Finished matching the nested regex; now match the rest of the enclosing regex
+ bool success = context.next_ptr_->match(state);
+
+ // restore state
+ state.swap_context(context);
+ return success;
+}
+
+}}} // namespace boost::xpressive::detail
+
+#endif
+
diff --git a/boost/boost/xpressive/detail/core/icase.hpp b/boost/boost/xpressive/detail/core/icase.hpp
new file mode 100644
index 00000000000..8d937b5771b
--- /dev/null
+++ b/boost/boost/xpressive/detail/core/icase.hpp
@@ -0,0 +1,33 @@
+///////////////////////////////////////////////////////////////////////////////
+// icase.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_CORE_ICASE_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_CORE_ICASE_HPP_EAN_10_04_2005
+
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/regex_constants.hpp>
+#include <boost/xpressive/detail/static/modifier.hpp>
+#include <boost/xpressive/detail/core/linker.hpp>
+
+namespace boost { namespace xpressive { namespace regex_constants
+{
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief Makes a sub-expression case-insensitive.
+///
+/// Use icase() to make a sub-expression case-insensitive. For instance,
+/// "foo" >> icase(set['b'] >> "ar") will match "foo" exactly followed by
+/// "bar" irrespective of case.
+detail::modifier_op<detail::icase_modifier> const icase = {{}, regex_constants::icase_};
+
+} // namespace regex_constants
+
+using regex_constants::icase;
+
+}} // namespace boost::xpressive
+
+#endif
diff --git a/boost/boost/xpressive/detail/core/linker.hpp b/boost/boost/xpressive/detail/core/linker.hpp
new file mode 100644
index 00000000000..0d0b27a1486
--- /dev/null
+++ b/boost/boost/xpressive/detail/core/linker.hpp
@@ -0,0 +1,275 @@
+///////////////////////////////////////////////////////////////////////////////
+// linker.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_CORE_LINKER_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_CORE_LINKER_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp>
+#ifndef BOOST_NO_STD_LOCALE
+# include <locale>
+#endif
+#include <stack>
+#include <limits>
+#include <typeinfo>
+#include <boost/shared_ptr.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/spirit/fusion/algorithm/for_each.hpp>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/dynamic/matchable.hpp>
+#include <boost/xpressive/detail/core/matchers.hpp>
+#include <boost/xpressive/detail/core/peeker.hpp>
+#include <boost/xpressive/detail/utility/never_true.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+///////////////////////////////////////////////////////////////////////////////
+// icase_modifier
+//
+// wrapped by the modifier<> template and inserted into the xpression
+// template with the icase() helper function. icase_modifier morphs
+// a case-sensitive visitor into a case-insensitive visitor, which
+// causes all matchers visited to become case-insensitive.
+//
+struct icase_modifier
+{
+ template<typename Visitor>
+ struct apply;
+
+ template<typename BidiIter, typename ICase, typename Traits>
+ struct apply<xpression_visitor<BidiIter, ICase, Traits> >
+ {
+ typedef xpression_visitor<BidiIter, mpl::true_, Traits> type;
+ };
+
+ template<typename Visitor>
+ static typename apply<Visitor>::type
+ call(Visitor &visitor)
+ {
+ return typename apply<Visitor>::type(visitor.traits(), visitor.self());
+ }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// regex_traits_type : wrap a locale in the appropriate regex_traits
+//
+template<typename Locale, typename BidiIter>
+struct regex_traits_type
+{
+#ifndef BOOST_NO_STD_LOCALE
+
+ typedef typename iterator_value<BidiIter>::type char_type;
+
+ // if Locale is std::locale, wrap it in a cpp_regex_traits<Char>
+ typedef typename mpl::if_
+ <
+ is_same<Locale, std::locale>
+ , cpp_regex_traits<char_type>
+ , Locale
+ >::type type;
+
+#else
+
+ typedef Locale type;
+
+#endif
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// locale_modifier
+//
+// wrapped by the modifier<> template and inserted into the xpression
+// template with the imbue() helper function. Causes a sub-xpression to
+// use the specified Locale
+//
+template<typename Locale>
+struct locale_modifier
+{
+ locale_modifier(Locale const &loc)
+ : loc_(loc)
+ {
+ }
+
+ template<typename Visitor>
+ struct apply;
+
+ template<typename BidiIter, typename ICase, typename OtherTraits>
+ struct apply<xpression_visitor<BidiIter, ICase, OtherTraits> >
+ {
+ typedef typename regex_traits_type<Locale, BidiIter>::type traits_type;
+ typedef xpression_visitor<BidiIter, ICase, traits_type> type;
+ };
+
+ template<typename Visitor>
+ typename apply<Visitor>::type
+ call(Visitor &) const
+ {
+ return typename apply<Visitor>::type(this->loc_);
+ }
+
+ Locale getloc() const
+ {
+ return this->loc_;
+ }
+
+private:
+ Locale loc_;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// xpression_linker
+//
+template<typename Char>
+struct xpression_linker
+{
+ template<typename Traits>
+ explicit xpression_linker(Traits const &traits)
+ : back_stack_()
+ , traits_(&traits)
+ , traits_type_(&typeid(Traits))
+ {
+ }
+
+ template<typename Matcher>
+ void link(Matcher const &, xpression_base const *)
+ {
+ // no-op
+ }
+
+ void link(repeat_begin_matcher const &, xpression_base const *next)
+ {
+ this->back_stack_.push(next);
+ }
+
+ template<bool Greedy>
+ void link(repeat_end_matcher<Greedy> const &matcher, xpression_base const *)
+ {
+ matcher.back_ = this->back_stack_.top();
+ this->back_stack_.pop();
+ }
+
+ template<typename Alternates, typename Traits>
+ void link(alternate_matcher<Alternates, Traits> const &matcher, xpression_base const *next)
+ {
+ xpression_peeker<Char> peeker(&matcher.bset_, this->get_traits<Traits>());
+ this->alt_link(matcher.alternates_, next, peeker);
+ }
+
+ void link(alternate_end_matcher const &matcher, xpression_base const *)
+ {
+ matcher.back_ = this->back_stack_.top();
+ this->back_stack_.pop();
+ }
+
+ template<typename Xpr>
+ void link(keeper_matcher<Xpr> const &matcher, xpression_base const *)
+ {
+ get_pointer(matcher.xpr_)->link(*this);
+ }
+
+ template<typename Xpr>
+ void link(lookahead_matcher<Xpr> const &matcher, xpression_base const *)
+ {
+ get_pointer(matcher.xpr_)->link(*this);
+ }
+
+ template<typename Xpr>
+ void link(lookbehind_matcher<Xpr> const &matcher, xpression_base const *)
+ {
+ get_pointer(matcher.xpr_)->link(*this);
+ }
+
+ template<typename Xpr, bool Greedy>
+ void link(simple_repeat_matcher<Xpr, Greedy> const &matcher, xpression_base const *)
+ {
+ matcher.xpr_.link(*this);
+ }
+
+ // for use by alt_link_pred below
+ template<typename Xpr>
+ void alt_branch_link(Xpr const &xpr, xpression_base const *next, xpression_peeker<Char> &peeker)
+ {
+ this->back_stack_.push(next);
+ get_pointer(xpr)->link(*this);
+ get_pointer(xpr)->peek(peeker);
+ }
+
+private:
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // alt_link_pred
+ //
+ struct alt_link_pred
+ {
+ xpression_linker<Char> &linker_;
+ xpression_peeker<Char> &peeker_;
+ xpression_base const *next_;
+
+ alt_link_pred
+ (
+ xpression_linker<Char> &linker
+ , xpression_peeker<Char> &peeker
+ , xpression_base const *next
+ )
+ : linker_(linker)
+ , peeker_(peeker)
+ , next_(next)
+ {
+ }
+
+ template<typename Xpr>
+ void operator ()(Xpr const &xpr) const
+ {
+ this->linker_.alt_branch_link(xpr, this->next_, this->peeker_);
+ }
+
+ private:
+ alt_link_pred &operator =(alt_link_pred const &);
+ };
+
+ template<typename BidiIter>
+ void alt_link
+ (
+ std::vector<shared_ptr<matchable<BidiIter> const> > const &alternates
+ , xpression_base const *next
+ , xpression_peeker<Char> &peeker
+ )
+ {
+ std::for_each(alternates.begin(), alternates.end(), alt_link_pred(*this, peeker, next));
+ }
+
+ template<typename Alternates>
+ void alt_link
+ (
+ fusion::sequence_base<Alternates> const &alternates
+ , xpression_base const *next
+ , xpression_peeker<Char> &peeker
+ )
+ {
+ fusion::for_each(alternates.cast(), alt_link_pred(*this, peeker, next));
+ }
+
+ template<typename Traits>
+ Traits const &get_traits() const
+ {
+ BOOST_ASSERT(*this->traits_type_ == typeid(Traits));
+ return *static_cast<Traits const *>(this->traits_);
+ }
+
+ std::stack<xpression_base const *> back_stack_;
+ void const *traits_;
+ std::type_info const *traits_type_;
+};
+
+}}} // namespace boost::xpressive::detail
+
+#endif
diff --git a/boost/boost/xpressive/detail/core/matcher/action_matcher.hpp b/boost/boost/xpressive/detail/core/matcher/action_matcher.hpp
new file mode 100644
index 00000000000..de9e6ea6e92
--- /dev/null
+++ b/boost/boost/xpressive/detail/core/matcher/action_matcher.hpp
@@ -0,0 +1,77 @@
+///////////////////////////////////////////////////////////////////////////////
+// action_matcher.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_CORE_MATCHER_ACTION_MATCHER_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_ACTION_MATCHER_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/core/access.hpp>
+#include <boost/xpressive/detail/core/quant_style.hpp>
+#include <boost/xpressive/detail/core/state.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // action_matcher
+ //
+ template<typename Action>
+ struct action_matcher
+ : quant_style<quant_none, mpl::size_t<0>, mpl::false_>
+ {
+ Action *action_ptr_;
+
+ action_matcher()
+ : action_ptr_(&action_())
+ {
+ }
+
+ action_matcher(action_matcher const &)
+ : action_ptr_(&action_())
+ {
+ }
+
+ action_matcher &operator =(action_matcher const &)
+ {
+ return *this; // no-op
+ }
+
+ template<typename BidiIter, typename Next>
+ bool match(state_type<BidiIter> &state, Next const &next) const
+ {
+ Action &action = *this->action_ptr_;
+ typename Action::saved_type saved(action.save());
+
+ // set the action state pointer, so that action_state_cast works correctly
+ core_access<BidiIter>::get_action_state(*state.context_.results_ptr_) = state.action_state_;
+
+ match_results<BidiIter> const &what = *state.context_.results_ptr_;
+ if(!action(what, state.cur_) || !next.match(state))
+ {
+ action.restore(saved);
+ return false;
+ }
+
+ return true;
+ }
+
+ protected:
+
+ Action &action_()
+ {
+ return *static_cast<Action *>(this);
+ }
+ };
+
+}}}
+
+#endif
diff --git a/boost/boost/xpressive/detail/core/matcher/alternate_end_matcher.hpp b/boost/boost/xpressive/detail/core/matcher/alternate_end_matcher.hpp
new file mode 100644
index 00000000000..f542daa4108
--- /dev/null
+++ b/boost/boost/xpressive/detail/core/matcher/alternate_end_matcher.hpp
@@ -0,0 +1,51 @@
+///////////////////////////////////////////////////////////////////////////////
+// alternate_end_matcher.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_CORE_MATCHER_ALTERNATE_END_MATCHER_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_ALTERNATE_END_MATCHER_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+# pragma warning(push)
+# pragma warning(disable : 4100) // unreferenced formal parameter
+#endif
+
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/core/quant_style.hpp>
+#include <boost/xpressive/detail/core/state.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // alternate_end_matcher
+ //
+ struct alternate_end_matcher
+ : quant_style_assertion
+ {
+ mutable xpression_base const *back_;
+
+ alternate_end_matcher()
+ : back_(0)
+ {
+ }
+
+ template<typename BidiIter, typename Next>
+ bool match(state_type<BidiIter> &state, Next const &next) const
+ {
+ return next.pop_match(state, this->back_);
+ }
+ };
+
+}}}
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma warning(pop)
+#endif
+
+#endif
diff --git a/boost/boost/xpressive/detail/core/matcher/alternate_matcher.hpp b/boost/boost/xpressive/detail/core/matcher/alternate_matcher.hpp
new file mode 100644
index 00000000000..38652b58db7
--- /dev/null
+++ b/boost/boost/xpressive/detail/core/matcher/alternate_matcher.hpp
@@ -0,0 +1,211 @@
+///////////////////////////////////////////////////////////////////////////////
+// alternate_matcher.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_CORE_MATCHER_ALTERNATE_MATCHER_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_ALTERNATE_MATCHER_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <vector>
+
+#include <boost/version.hpp>
+#if BOOST_VERSION <= 103200
+// WORKAROUND for Fusion bug in Boost 1.32
+namespace boost { namespace fusion
+{
+ namespace detail { struct iterator_root; }
+ using detail::iterator_root;
+}}
+#endif
+
+#include <boost/shared_ptr.hpp>
+#include <boost/spirit/fusion/sequence/range.hpp>
+#include <boost/spirit/fusion/algorithm/for_each.hpp>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/core/quant_style.hpp>
+#include <boost/xpressive/detail/core/state.hpp>
+#include <boost/xpressive/detail/static/width_of.hpp>
+#include <boost/xpressive/detail/static/is_pure.hpp>
+#include <boost/xpressive/detail/dynamic/matchable.hpp>
+#include <boost/xpressive/detail/utility/hash_peek_bitset.hpp>
+#include <boost/xpressive/detail/utility/algorithm.hpp>
+#include <boost/xpressive/detail/utility/any.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // alt_match_pred
+ //
+ template<typename BidiIter, typename Next>
+ struct alt_match_pred
+ {
+ state_type<BidiIter> &state_;
+
+ alt_match_pred(state_type<BidiIter> &state)
+ : state_(state)
+ {
+ }
+
+ template<typename Xpr>
+ bool operator ()(Xpr const &xpr) const
+ {
+ return get_pointer(xpr)->BOOST_NESTED_TEMPLATE push_match<Next>(this->state_);
+ }
+
+ private:
+ alt_match_pred &operator =(alt_match_pred const &);
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // alt_match
+ //
+ template<typename BidiIter>
+ inline bool alt_match
+ (
+ std::vector<shared_ptr<matchable<BidiIter> const> > const &alternates
+ , state_type<BidiIter> &state
+ , matchable<BidiIter> const &
+ )
+ {
+ typedef alt_match_pred<BidiIter, matchable<BidiIter> > alt_match_pred;
+ return detail::any(alternates.begin(), alternates.end(), alt_match_pred(state));
+ }
+
+ template<typename BidiIter, typename Next, typename Alternates>
+ inline bool alt_match
+ (
+ fusion::sequence_base<Alternates> const &alternates
+ , state_type<BidiIter> &state
+ , Next const &
+ )
+ {
+ typedef alt_match_pred<BidiIter, Next> alt_match_pred;
+ return fusion::any(alternates.cast(), alt_match_pred(state));
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // make_range
+ template<typename Begin, typename End>
+ inline fusion::range<Begin, End> make_range(Begin const &begin, End const &end)
+ {
+ return fusion::range<Begin, End>(begin, end);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // alt_get_width_pred
+ //
+ template<typename BidiIter>
+ struct alt_get_width_pred
+ {
+ state_type<BidiIter> *state_;
+ std::size_t *width_;
+
+ alt_get_width_pred(state_type<BidiIter> *state, std::size_t *width)
+ : state_(state)
+ , width_(width)
+ {
+ }
+
+ template<typename Xpr>
+ void operator ()(Xpr const &xpr) const
+ {
+ if(*this->width_ != unknown_width())
+ {
+ std::size_t that_width = get_pointer(xpr)->get_width(this->state_);
+ if(*this->width_ != that_width)
+ {
+ *this->width_ = unknown_width();
+ }
+ }
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // alt_get_width
+ //
+ template<typename BidiIter>
+ inline std::size_t alt_get_width
+ (
+ std::vector<shared_ptr<matchable<BidiIter> const> > const &alternates
+ , state_type<BidiIter> *state
+ )
+ {
+ typedef alt_get_width_pred<BidiIter> alt_get_width_pred;
+ std::size_t width = alternates.front()->get_width(state);
+ std::for_each(alternates.begin() + 1, alternates.end(), alt_get_width_pred(state, &width));
+ return width;
+ }
+
+ template<typename BidiIter, typename Alternates>
+ inline std::size_t alt_get_width
+ (
+ fusion::sequence_base<Alternates> const &alternates
+ , state_type<BidiIter> *state
+ )
+ {
+ typedef alt_get_width_pred<BidiIter> alt_get_width_pred;
+ std::size_t width = (*fusion::begin(alternates.cast())).get_width(state);
+ fusion::for_each
+ (
+ make_range(fusion::next(fusion::begin(alternates.cast())), fusion::end(alternates.cast()))
+ , alt_get_width_pred(state, &width)
+ );
+ return width;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // alternate_matcher
+ //
+ template<typename Alternates, typename Traits>
+ struct alternate_matcher
+ : quant_style_auto<width_of<Alternates>, is_pure<Alternates> >
+ {
+ typedef Alternates alternates_type;
+ typedef typename Traits::char_type char_type;
+
+ Alternates alternates_;
+ mutable hash_peek_bitset<char_type> bset_;
+
+ explicit alternate_matcher(Alternates const &alternates = Alternates())
+ : alternates_(alternates)
+ , bset_()
+ {
+ }
+
+ template<typename BidiIter, typename Next>
+ bool match(state_type<BidiIter> &state, Next const &next) const
+ {
+ if(!state.eos() && !this->can_match_(*state.cur_, traits_cast<Traits>(state)))
+ {
+ return false;
+ }
+
+ return detail::alt_match(this->alternates_, state, next);
+ }
+
+ template<typename BidiIter>
+ std::size_t get_width(state_type<BidiIter> *state) const
+ {
+ return detail::alt_get_width(this->alternates_, state);
+ }
+
+ private:
+ alternate_matcher &operator =(alternate_matcher const &);
+
+ bool can_match_(char_type ch, Traits const &traits) const
+ {
+ return this->bset_.test(ch, traits);
+ }
+ };
+
+}}}
+
+#endif
diff --git a/boost/boost/xpressive/detail/core/matcher/any_matcher.hpp b/boost/boost/xpressive/detail/core/matcher/any_matcher.hpp
new file mode 100644
index 00000000000..8de98d42833
--- /dev/null
+++ b/boost/boost/xpressive/detail/core/matcher/any_matcher.hpp
@@ -0,0 +1,50 @@
+///////////////////////////////////////////////////////////////////////////////
+// any_matcher.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_CORE_MATCHER_ANY_MATCHER_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_ANY_MATCHER_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/core/quant_style.hpp>
+#include <boost/xpressive/detail/core/state.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // any_matcher
+ //
+ struct any_matcher
+ : quant_style_fixed_width<1>
+ {
+ template<typename BidiIter, typename Next>
+ static bool match(state_type<BidiIter> &state, Next const &next)
+ {
+ if(state.eos())
+ {
+ return false;
+ }
+
+ ++state.cur_;
+ if(next.match(state))
+ {
+ return true;
+ }
+
+ --state.cur_;
+ return false;
+ }
+ };
+
+}}}
+
+#endif
diff --git a/boost/boost/xpressive/detail/core/matcher/assert_bol_matcher.hpp b/boost/boost/xpressive/detail/core/matcher/assert_bol_matcher.hpp
new file mode 100644
index 00000000000..1770c3af9f4
--- /dev/null
+++ b/boost/boost/xpressive/detail/core/matcher/assert_bol_matcher.hpp
@@ -0,0 +1,57 @@
+///////////////////////////////////////////////////////////////////////////////
+// assert_bol_matcher.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_CORE_MATCHER_ASSERT_BOL_MATCHER_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_ASSERT_BOL_MATCHER_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/core/quant_style.hpp>
+#include <boost/xpressive/detail/core/state.hpp>
+#include <boost/xpressive/detail/core/matcher/assert_line_base.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // assert_bol_matcher
+ //
+ template<typename Traits>
+ struct assert_bol_matcher
+ : assert_line_base<Traits>
+ {
+ assert_bol_matcher(Traits const &traits)
+ : assert_line_base<Traits>(traits)
+ {
+ }
+
+ template<typename BidiIter, typename Next>
+ bool match(state_type<BidiIter> &state, Next const &next) const
+ {
+ if(state.bos())
+ {
+ if(!state.flags_.match_bol_)
+ {
+ return false;
+ }
+ }
+ else if(!this->is_line_break(state))
+ {
+ return false;
+ }
+
+ return next.match(state);
+ }
+ };
+
+}}}
+
+#endif
diff --git a/boost/boost/xpressive/detail/core/matcher/assert_bos_matcher.hpp b/boost/boost/xpressive/detail/core/matcher/assert_bos_matcher.hpp
new file mode 100644
index 00000000000..67c4641d674
--- /dev/null
+++ b/boost/boost/xpressive/detail/core/matcher/assert_bos_matcher.hpp
@@ -0,0 +1,38 @@
+///////////////////////////////////////////////////////////////////////////////
+// assert_bos_matcher.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_CORE_MATCHER_ASSERT_BOS_MATCHER_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_ASSERT_BOS_MATCHER_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/core/quant_style.hpp>
+#include <boost/xpressive/detail/core/state.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // assert_bos_matcher
+ // match the beginning of the sequence (\A)
+ struct assert_bos_matcher
+ : quant_style_assertion
+ {
+ template<typename BidiIter, typename Next>
+ static bool match(state_type<BidiIter> &state, Next const &next)
+ {
+ return state.bos() && next.match(state);
+ }
+ };
+
+}}}
+
+#endif
diff --git a/boost/boost/xpressive/detail/core/matcher/assert_eol_matcher.hpp b/boost/boost/xpressive/detail/core/matcher/assert_eol_matcher.hpp
new file mode 100644
index 00000000000..69e4031aa74
--- /dev/null
+++ b/boost/boost/xpressive/detail/core/matcher/assert_eol_matcher.hpp
@@ -0,0 +1,57 @@
+///////////////////////////////////////////////////////////////////////////////
+// assert_eol_matcher.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_CORE_MATCHER_ASSERT_EOL_MATCHER_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_ASSERT_EOL_MATCHER_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/core/quant_style.hpp>
+#include <boost/xpressive/detail/core/state.hpp>
+#include <boost/xpressive/detail/core/matcher/assert_line_base.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // assert_eol_matcher
+ //
+ template<typename Traits>
+ struct assert_eol_matcher
+ : assert_line_base<Traits>
+ {
+ assert_eol_matcher(Traits const &traits)
+ : assert_line_base<Traits>(traits)
+ {
+ }
+
+ template<typename BidiIter, typename Next>
+ bool match(state_type<BidiIter> &state, Next const &next) const
+ {
+ if(state.eos())
+ {
+ if(!state.flags_.match_eol_)
+ {
+ return false;
+ }
+ }
+ else if((state.bos() && !state.flags_.match_prev_avail_) || !this->is_line_break(state))
+ {
+ return false;
+ }
+
+ return next.match(state);
+ }
+ };
+
+}}}
+
+#endif
diff --git a/boost/boost/xpressive/detail/core/matcher/assert_eos_matcher.hpp b/boost/boost/xpressive/detail/core/matcher/assert_eos_matcher.hpp
new file mode 100644
index 00000000000..b69f1299133
--- /dev/null
+++ b/boost/boost/xpressive/detail/core/matcher/assert_eos_matcher.hpp
@@ -0,0 +1,38 @@
+///////////////////////////////////////////////////////////////////////////////
+// assert_eos_matcher.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_CORE_MATCHER_ASSERT_EOS_MATCHER_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_ASSERT_EOS_MATCHER_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/core/quant_style.hpp>
+#include <boost/xpressive/detail/core/state.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // assert_eos_matcher
+ // match the end of the sequence (\Z)
+ struct assert_eos_matcher
+ : quant_style_assertion
+ {
+ template<typename BidiIter, typename Next>
+ static bool match(state_type<BidiIter> &state, Next const &next)
+ {
+ return state.eos() && next.match(state);
+ }
+ };
+
+}}}
+
+#endif
diff --git a/boost/boost/xpressive/detail/core/matcher/assert_line_base.hpp b/boost/boost/xpressive/detail/core/matcher/assert_line_base.hpp
new file mode 100644
index 00000000000..4daeb994acf
--- /dev/null
+++ b/boost/boost/xpressive/detail/core/matcher/assert_line_base.hpp
@@ -0,0 +1,67 @@
+///////////////////////////////////////////////////////////////////////////////
+// assert_line_base.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_CORE_MATCHER_DETAIL_ASSERT_LINE_BASE_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_DETAIL_ASSERT_LINE_BASE_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/core/quant_style.hpp>
+#include <boost/xpressive/detail/core/state.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // assert_line_base
+ //
+ template<typename Traits>
+ struct assert_line_base
+ : quant_style_assertion
+ {
+ typedef typename Traits::char_type char_type;
+ typedef typename Traits::char_class_type char_class_type;
+
+ protected:
+ assert_line_base(Traits const &traits)
+ : newline_(lookup_classname(traits, "newline"))
+ , nl_(traits.widen('\n'))
+ , cr_(traits.widen('\r'))
+ {
+ }
+
+ template<typename BidiIter>
+ bool is_line_break(state_type<BidiIter> &state) const
+ {
+ BOOST_ASSERT(!state.bos() || state.flags_.match_prev_avail_);
+ BidiIter tmp = state.cur_;
+ char_type ch = *--tmp;
+
+ if(traits_cast<Traits>(state).isctype(ch, this->newline_))
+ {
+ // there is no line-break between \r and \n
+ if(this->cr_ != ch || state.eos() || this->nl_ != *state.cur_)
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ private:
+ char_class_type newline_;
+ char_type nl_, cr_;
+ };
+
+}}}
+
+#endif
diff --git a/boost/boost/xpressive/detail/core/matcher/assert_word_matcher.hpp b/boost/boost/xpressive/detail/core/matcher/assert_word_matcher.hpp
new file mode 100644
index 00000000000..c08ecf99858
--- /dev/null
+++ b/boost/boost/xpressive/detail/core/matcher/assert_word_matcher.hpp
@@ -0,0 +1,112 @@
+///////////////////////////////////////////////////////////////////////////////
+// assert_word_matcher.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_CORE_MATCHER_ASSERT_WORD_MATCHER_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_ASSERT_WORD_MATCHER_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/assert.hpp>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/core/quant_style.hpp>
+#include <boost/xpressive/detail/core/state.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // word_boundary
+ //
+ template<bool IsBoundary>
+ struct word_boundary
+ {
+ template<typename BidiIter>
+ static bool eval(bool prevword, bool thisword, state_type<BidiIter> &state)
+ {
+ if((state.flags_.match_not_bow_ && state.bos()) || (state.flags_.match_not_eow_ && state.eos()))
+ {
+ return !IsBoundary;
+ }
+
+ return IsBoundary == (prevword != thisword);
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // word_begin
+ //
+ struct word_begin
+ {
+ template<typename BidiIter>
+ static bool eval(bool prevword, bool thisword, state_type<BidiIter> &state)
+ {
+ if(state.flags_.match_not_bow_ && state.bos())
+ {
+ return false;
+ }
+
+ return !prevword && thisword;
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // word_end
+ //
+ struct word_end
+ {
+ template<typename BidiIter>
+ static bool eval(bool prevword, bool thisword, state_type<BidiIter> &state)
+ {
+ if(state.flags_.match_not_eow_ && state.eos())
+ {
+ return false;
+ }
+
+ return prevword && !thisword;
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // assert_word_matcher
+ //
+ template<typename Cond, typename Traits>
+ struct assert_word_matcher
+ : quant_style_assertion
+ {
+ typedef typename Traits::char_type char_type;
+
+ assert_word_matcher(Traits const &traits)
+ : word_(lookup_classname(traits, "w"))
+ {
+ BOOST_ASSERT(0 != this->word_);
+ }
+
+ bool is_word(Traits const &traits, char_type ch) const
+ {
+ return traits.isctype(traits.translate(ch), this->word_);
+ }
+
+ template<typename BidiIter, typename Next>
+ bool match(state_type<BidiIter> &state, Next const &next) const
+ {
+ BidiIter cur = state.cur_;
+ bool const thisword = !state.eos() && this->is_word(traits_cast<Traits>(state), *cur);
+ bool const prevword = (!state.bos() || state.flags_.match_prev_avail_)
+ && this->is_word(traits_cast<Traits>(state), *--cur);
+
+ return Cond::eval(prevword, thisword, state) && next.match(state);
+ }
+
+ typename Traits::char_class_type word_;
+ };
+
+}}}
+
+#endif
diff --git a/boost/boost/xpressive/detail/core/matcher/charset_matcher.hpp b/boost/boost/xpressive/detail/core/matcher/charset_matcher.hpp
new file mode 100644
index 00000000000..8115cbac215
--- /dev/null
+++ b/boost/boost/xpressive/detail/core/matcher/charset_matcher.hpp
@@ -0,0 +1,62 @@
+///////////////////////////////////////////////////////////////////////////////
+// charset_matcher.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_CORE_MATCHER_CHARSET_MATCHER_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_CHARSET_MATCHER_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/core/quant_style.hpp>
+#include <boost/xpressive/detail/core/state.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // charset_matcher
+ //
+ template<typename Traits, bool ICase, typename CharSet>
+ struct charset_matcher
+ : quant_style_fixed_width<1>
+ {
+ typedef typename Traits::char_type char_type;
+ typedef Traits traits_type;
+ typedef mpl::bool_<ICase> icase_type;
+
+ charset_matcher(CharSet const &charset = CharSet())
+ : charset_(charset)
+ {
+ }
+
+ template<typename BidiIter, typename Next>
+ bool match(state_type<BidiIter> &state, Next const &next) const
+ {
+ if(state.eos() || !this->charset_.test(*state.cur_, traits_cast<Traits>(state), icase_type()))
+ {
+ return false;
+ }
+
+ ++state.cur_;
+ if(next.match(state))
+ {
+ return true;
+ }
+
+ --state.cur_;
+ return false;
+ }
+
+ CharSet charset_;
+ };
+
+}}}
+
+#endif
diff --git a/boost/boost/xpressive/detail/core/matcher/end_matcher.hpp b/boost/boost/xpressive/detail/core/matcher/end_matcher.hpp
new file mode 100644
index 00000000000..a4595bee792
--- /dev/null
+++ b/boost/boost/xpressive/detail/core/matcher/end_matcher.hpp
@@ -0,0 +1,66 @@
+///////////////////////////////////////////////////////////////////////////////
+// end_matcher.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_CORE_MATCHER_END_MATCHER_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_END_MATCHER_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/assert.hpp>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/core/quant_style.hpp>
+#include <boost/xpressive/detail/core/state.hpp>
+#include <boost/xpressive/detail/core/sub_match_impl.hpp>
+#include <boost/xpressive/detail/core/flow_control.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // end_matcher
+ //
+ struct end_matcher
+ : quant_style_assertion
+ {
+ template<typename BidiIter, typename Next>
+ static bool match(state_type<BidiIter> &state, Next const &)
+ {
+ BidiIter const tmp = state.cur_;
+ sub_match_impl<BidiIter> &s0 = state.sub_match(0);
+ BOOST_ASSERT(!s0.matched);
+
+ // SPECIAL: if there is a match context on the context stack, then
+ // this pattern has been nested within another. pop that context and
+ // continue executing.
+ if(state.context_.prev_context_)
+ {
+ if(!pop_context_match(state))
+ {
+ return false;
+ }
+ }
+ else if(state.flags_.match_all_ && !state.eos() ||
+ state.flags_.match_not_null_ && state.cur_ == s0.begin_)
+ {
+ return false;
+ }
+
+ // record the end of sub-match zero
+ s0.first = s0.begin_;
+ s0.second = tmp;
+ s0.matched = true;
+
+ return true;
+ }
+ };
+
+}}}
+
+#endif
diff --git a/boost/boost/xpressive/detail/core/matcher/epsilon_matcher.hpp b/boost/boost/xpressive/detail/core/matcher/epsilon_matcher.hpp
new file mode 100644
index 00000000000..4186905944f
--- /dev/null
+++ b/boost/boost/xpressive/detail/core/matcher/epsilon_matcher.hpp
@@ -0,0 +1,69 @@
+///////////////////////////////////////////////////////////////////////////////
+// epsilon_matcher.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_CORE_MATCHER_EPSILON_MATCHER_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_EPSILON_MATCHER_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/core/quant_style.hpp>
+#include <boost/xpressive/detail/core/state.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // epsilon_matcher
+ //
+ struct epsilon_matcher
+ : quant_style_assertion
+ {
+ template<typename BidiIter, typename Next>
+ static bool match(state_type<BidiIter> &state, Next const &next)
+ {
+ return next.match(state);
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // epsilon_mark_matcher
+ //
+ struct epsilon_mark_matcher
+ : quant_style<quant_none, mpl::size_t<0>, mpl::false_>
+ {
+ int mark_number_; // signed because it could be negative
+
+ epsilon_mark_matcher(int mark_number)
+ : mark_number_(mark_number)
+ {
+ }
+
+ template<typename BidiIter, typename Next>
+ bool match(state_type<BidiIter> &state, Next const &next) const
+ {
+ sub_match_impl<BidiIter> &br = state.sub_match(this->mark_number_);
+
+ bool old_matched = br.matched;
+ br.matched = false;
+
+ if(next.match(state))
+ {
+ return true;
+ }
+
+ br.matched = old_matched;
+ return false;
+ }
+ };
+
+}}}
+
+#endif
diff --git a/boost/boost/xpressive/detail/core/matcher/keeper_matcher.hpp b/boost/boost/xpressive/detail/core/matcher/keeper_matcher.hpp
new file mode 100644
index 00000000000..ca5a54d63ff
--- /dev/null
+++ b/boost/boost/xpressive/detail/core/matcher/keeper_matcher.hpp
@@ -0,0 +1,97 @@
+///////////////////////////////////////////////////////////////////////////////
+// keeper_matcher.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_CORE_MATCHER_KEEPER_MATCHER_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_KEEPER_MATCHER_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/mpl/bool.hpp>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/core/quant_style.hpp>
+#include <boost/xpressive/detail/core/state.hpp>
+#include <boost/xpressive/detail/static/is_pure.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // keeper_matcher
+ // Xpr can be either a static_xpression, or a shared_ptr<matchable>
+ template<typename Xpr>
+ struct keeper_matcher
+ : quant_style_auto<width_of<Xpr>, is_pure<Xpr> >
+ {
+ keeper_matcher(Xpr const &xpr, bool do_save = !is_pure<Xpr>::value)
+ : xpr_(xpr)
+ , do_save_(do_save)
+ {
+ }
+
+ template<typename BidiIter, typename Next>
+ bool match(state_type<BidiIter> &state, Next const &next) const
+ {
+ // Note that if is_pure<Xpr>::value is true, the compiler can tell which
+ // branch to take.
+ return is_pure<Xpr>::value || !this->do_save_
+ ? this->match_(state, next, mpl::true_())
+ : this->match_(state, next, mpl::false_());
+ }
+
+ template<typename BidiIter, typename Next>
+ bool match_(state_type<BidiIter> &state, Next const &next, mpl::true_) const
+ {
+ BidiIter const tmp = state.cur_;
+
+ // matching xpr is guaranteed to not produce side-effects, don't bother saving state
+ if(!get_pointer(this->xpr_)->match(state))
+ {
+ return false;
+ }
+ else if(next.match(state))
+ {
+ return true;
+ }
+
+ state.cur_ = tmp;
+ return false;
+ }
+
+ template<typename BidiIter, typename Next>
+ bool match_(state_type<BidiIter> &state, Next const &next, mpl::false_) const
+ {
+ BidiIter const tmp = state.cur_;
+
+ // matching xpr could produce side-effects, save state
+ memento<BidiIter> mem = save_sub_matches(state);
+
+ if(!get_pointer(this->xpr_)->match(state))
+ {
+ reclaim_sub_matches(mem, state);
+ return false;
+ }
+ else if(next.match(state))
+ {
+ reclaim_sub_matches(mem, state);
+ return true;
+ }
+
+ restore_sub_matches(mem, state);
+ state.cur_ = tmp;
+ return false;
+ }
+
+ Xpr xpr_;
+ bool do_save_; // true if matching xpr_ could modify the sub-matches
+ };
+
+}}}
+
+#endif
diff --git a/boost/boost/xpressive/detail/core/matcher/literal_matcher.hpp b/boost/boost/xpressive/detail/core/matcher/literal_matcher.hpp
new file mode 100644
index 00000000000..bf67a600d97
--- /dev/null
+++ b/boost/boost/xpressive/detail/core/matcher/literal_matcher.hpp
@@ -0,0 +1,63 @@
+///////////////////////////////////////////////////////////////////////////////
+// literal_matcher.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_CORE_MATCHER_LITERAL_MATCHER_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_LITERAL_MATCHER_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/core/quant_style.hpp>
+#include <boost/xpressive/detail/core/state.hpp>
+#include <boost/xpressive/detail/utility/traits_utils.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // literal_matcher
+ //
+ template<typename Traits, bool ICase, bool Not>
+ struct literal_matcher
+ : quant_style_fixed_width<1>
+ {
+ typedef typename Traits::char_type char_type;
+ typedef mpl::bool_<Not> not_type;
+ typedef mpl::bool_<ICase> icase_type;
+ char_type ch_;
+
+ literal_matcher(char_type ch, Traits const &traits)
+ : ch_(detail::translate(ch, traits, icase_type()))
+ {
+ }
+
+ template<typename BidiIter, typename Next>
+ bool match(state_type<BidiIter> &state, Next const &next) const
+ {
+ if(state.eos() || Not ==
+ (detail::translate(*state.cur_, traits_cast<Traits>(state), icase_type()) == this->ch_))
+ {
+ return false;
+ }
+
+ ++state.cur_;
+ if(next.match(state))
+ {
+ return true;
+ }
+
+ --state.cur_;
+ return false;
+ }
+ };
+
+}}}
+
+#endif
diff --git a/boost/boost/xpressive/detail/core/matcher/logical_newline_matcher.hpp b/boost/boost/xpressive/detail/core/matcher/logical_newline_matcher.hpp
new file mode 100644
index 00000000000..36d7e7acdb2
--- /dev/null
+++ b/boost/boost/xpressive/detail/core/matcher/logical_newline_matcher.hpp
@@ -0,0 +1,78 @@
+///////////////////////////////////////////////////////////////////////////////
+// logical_newline_matcher.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_CORE_MATCHER_LOGICAL_NEWLINE_MATCHER_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_LOGICAL_NEWLINE_MATCHER_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/core/quant_style.hpp>
+#include <boost/xpressive/detail/core/state.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+ //////////////////////////////////////////////////////////////////////////
+ // logical_newline_matcher
+ //
+ template<typename Traits>
+ struct logical_newline_matcher
+ : quant_style_variable_width
+ {
+ typedef typename Traits::char_type char_type;
+ typedef typename Traits::char_class_type char_class_type;
+
+ logical_newline_matcher(Traits const &traits)
+ : newline_(lookup_classname(traits, "newline"))
+ , nl_(traits.widen('\n'))
+ , cr_(traits.widen('\r'))
+ {
+ }
+
+ template<typename BidiIter, typename Next>
+ bool match(state_type<BidiIter> &state, Next const &next) const
+ {
+ if(state.eos())
+ {
+ return false;
+ }
+
+ char_type ch = *state.cur_;
+ if(traits_cast<Traits>(state).isctype(ch, this->newline_))
+ {
+ ++state.cur_;
+ if(this->cr_ == ch && !state.eos() && this->nl_ == *state.cur_)
+ {
+ ++state.cur_;
+ if(next.match(state))
+ {
+ return true;
+ }
+ --state.cur_;
+ }
+ else if(next.match(state))
+ {
+ return true;
+ }
+
+ --state.cur_;
+ }
+ return false;
+ }
+
+ private:
+ char_class_type newline_;
+ char_type nl_, cr_;
+ };
+
+}}}
+
+#endif
diff --git a/boost/boost/xpressive/detail/core/matcher/lookahead_matcher.hpp b/boost/boost/xpressive/detail/core/matcher/lookahead_matcher.hpp
new file mode 100644
index 00000000000..b3c6f307d1d
--- /dev/null
+++ b/boost/boost/xpressive/detail/core/matcher/lookahead_matcher.hpp
@@ -0,0 +1,144 @@
+///////////////////////////////////////////////////////////////////////////////
+// lookahead_matcher.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_CORE_MATCHER_LOOKAHEAD_MATCHER_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_LOOKAHEAD_MATCHER_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/assert.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/core/quant_style.hpp>
+#include <boost/xpressive/detail/core/state.hpp>
+#include <boost/xpressive/detail/static/is_pure.hpp>
+#include <boost/xpressive/detail/utility/save_restore.hpp>
+#include <boost/xpressive/detail/utility/ignore_unused.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // lookahead_matcher
+ // Xpr can be either a static_xpression, or a shared_ptr<matchable>
+ //
+ template<typename Xpr>
+ struct lookahead_matcher
+ : quant_style<quant_none, mpl::size_t<0>, is_pure<Xpr> >
+ {
+ lookahead_matcher(Xpr const &xpr, bool no = false, bool do_save = !is_pure<Xpr>::value)
+ : xpr_(xpr)
+ , not_(no)
+ , do_save_(do_save)
+ {
+ }
+
+ template<typename BidiIter, typename Next>
+ bool match(state_type<BidiIter> &state, Next const &next) const
+ {
+ // Note that if is_pure<Xpr>::value is true, the compiler can optimize this.
+ return is_pure<Xpr>::value || !this->do_save_
+ ? this->match_(state, next, mpl::true_())
+ : this->match_(state, next, mpl::false_());
+ }
+
+ template<typename BidiIter, typename Next>
+ bool match_(state_type<BidiIter> &state, Next const &next, mpl::true_) const
+ {
+ BidiIter const tmp = state.cur_;
+
+ if(this->not_)
+ {
+ // negative look-ahead assertions do not trigger partial matches.
+ save_restore<bool> partial_match(state.found_partial_match_);
+ detail::ignore_unused(&partial_match);
+
+ if(get_pointer(this->xpr_)->match(state))
+ {
+ state.cur_ = tmp;
+ return false;
+ }
+ else if(next.match(state))
+ {
+ return true;
+ }
+ }
+ else
+ {
+ if(!get_pointer(this->xpr_)->match(state))
+ {
+ return false;
+ }
+ state.cur_ = tmp;
+ if(next.match(state))
+ {
+ return true;
+ }
+ }
+
+ BOOST_ASSERT(state.cur_ == tmp);
+ return false;
+ }
+
+ template<typename BidiIter, typename Next>
+ bool match_(state_type<BidiIter> &state, Next const &next, mpl::false_) const
+ {
+ BidiIter const tmp = state.cur_;
+
+ // matching xpr could produce side-effects, save state
+ memento<BidiIter> mem = save_sub_matches(state);
+
+ if(this->not_)
+ {
+ // negative look-ahead assertions do not trigger partial matches.
+ save_restore<bool> partial_match(state.found_partial_match_);
+ detail::ignore_unused(&partial_match);
+
+ if(get_pointer(this->xpr_)->match(state))
+ {
+ restore_sub_matches(mem, state);
+ state.cur_ = tmp;
+ return false;
+ }
+ else if(next.match(state))
+ {
+ reclaim_sub_matches(mem, state);
+ return true;
+ }
+ reclaim_sub_matches(mem, state);
+ }
+ else
+ {
+ if(!get_pointer(this->xpr_)->match(state))
+ {
+ reclaim_sub_matches(mem, state);
+ return false;
+ }
+ state.cur_ = tmp;
+ if(next.match(state))
+ {
+ reclaim_sub_matches(mem, state);
+ return true;
+ }
+ restore_sub_matches(mem, state);
+ }
+
+ BOOST_ASSERT(state.cur_ == tmp);
+ return false;
+ }
+
+ Xpr xpr_;
+ bool not_;
+ bool do_save_; // true if matching xpr_ could modify the sub-matches
+ };
+
+}}}
+
+#endif
diff --git a/boost/boost/xpressive/detail/core/matcher/lookbehind_matcher.hpp b/boost/boost/xpressive/detail/core/matcher/lookbehind_matcher.hpp
new file mode 100644
index 00000000000..c64086161ac
--- /dev/null
+++ b/boost/boost/xpressive/detail/core/matcher/lookbehind_matcher.hpp
@@ -0,0 +1,175 @@
+///////////////////////////////////////////////////////////////////////////////
+// lookbehind_matcher.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_CORE_MATCHER_LOOKBEHIND_MATCHER_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_LOOKBEHIND_MATCHER_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/assert.hpp>
+#include <boost/xpressive/regex_error.hpp>
+#include <boost/xpressive/regex_constants.hpp>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/core/quant_style.hpp>
+#include <boost/xpressive/detail/core/state.hpp>
+#include <boost/xpressive/detail/utility/algorithm.hpp>
+#include <boost/xpressive/detail/utility/save_restore.hpp>
+#include <boost/xpressive/detail/utility/ignore_unused.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // get_width
+ //
+ template<typename Xpr>
+ inline std::size_t get_width(Xpr const &xpr)
+ {
+ return xpr.get_width(static_cast<state_type<char const *>*>(0));
+ }
+
+ template<typename BidiIter>
+ inline std::size_t get_width(shared_ptr<matchable<BidiIter> const> const &xpr)
+ {
+ return xpr->get_width(0);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // lookbehind_matcher
+ // Xpr can be either a static_xpression, or a shared_ptr<matchable>
+ template<typename Xpr>
+ struct lookbehind_matcher
+ : quant_style<quant_none, mpl::size_t<0>, is_pure<Xpr> >
+ {
+ lookbehind_matcher(Xpr const &xpr, bool no = false, bool do_save = !is_pure<Xpr>::value)
+ : xpr_(xpr)
+ , not_(no)
+ , do_save_(do_save)
+ , width_(detail::get_width(xpr))
+ {
+ detail::ensure(this->width_ != unknown_width(), regex_constants::error_badlookbehind,
+ "Variable-width look-behind assertions are not supported");
+ }
+
+ template<typename BidiIter, typename Next>
+ bool match(state_type<BidiIter> &state, Next const &next) const
+ {
+ // Note that if is_pure<Xpr>::value is true, the compiler can optimize this.
+ return is_pure<Xpr>::value || !this->do_save_
+ ? this->match_(state, next, mpl::true_())
+ : this->match_(state, next, mpl::false_());
+ }
+
+ template<typename BidiIter, typename Next>
+ bool match_(state_type<BidiIter> &state, Next const &next, mpl::true_) const
+ {
+ typedef typename iterator_difference<BidiIter>::type difference_type;
+ BidiIter const tmp = state.cur_;
+ if(!detail::advance_to(state.cur_, -static_cast<difference_type>(this->width_), state.begin_))
+ {
+ state.cur_ = tmp;
+ return this->not_ ? next.match(state) : false;
+ }
+
+ if(this->not_)
+ {
+ if(get_pointer(this->xpr_)->match(state))
+ {
+ BOOST_ASSERT(state.cur_ == tmp);
+ return false;
+ }
+ state.cur_ = tmp;
+ if(next.match(state))
+ {
+ return true;
+ }
+ }
+ else
+ {
+ if(!get_pointer(this->xpr_)->match(state))
+ {
+ state.cur_ = tmp;
+ return false;
+ }
+ BOOST_ASSERT(state.cur_ == tmp);
+ if(next.match(state))
+ {
+ return true;
+ }
+ }
+
+ BOOST_ASSERT(state.cur_ == tmp);
+ return false;
+ }
+
+ template<typename BidiIter, typename Next>
+ bool match_(state_type<BidiIter> &state, Next const &next, mpl::false_) const
+ {
+ typedef typename iterator_difference<BidiIter>::type difference_type;
+ BidiIter const tmp = state.cur_;
+ if(!detail::advance_to(state.cur_, -static_cast<difference_type>(this->width_), state.begin_))
+ {
+ state.cur_ = tmp;
+ return this->not_ ? next.match(state) : false;
+ }
+
+ // matching xpr could produce side-effects, save state
+ memento<BidiIter> mem = save_sub_matches(state);
+
+ if(this->not_)
+ {
+ // negative look-ahead assertions do not trigger partial matches.
+ save_restore<bool> partial_match(state.found_partial_match_);
+ detail::ignore_unused(&partial_match);
+
+ if(get_pointer(this->xpr_)->match(state))
+ {
+ restore_sub_matches(mem, state);
+ BOOST_ASSERT(state.cur_ == tmp);
+ return false;
+ }
+ state.cur_ = tmp;
+ if(next.match(state))
+ {
+ reclaim_sub_matches(mem, state);
+ return true;
+ }
+ reclaim_sub_matches(mem, state);
+ }
+ else
+ {
+ if(!get_pointer(this->xpr_)->match(state))
+ {
+ state.cur_ = tmp;
+ reclaim_sub_matches(mem, state);
+ return false;
+ }
+ BOOST_ASSERT(state.cur_ == tmp);
+ if(next.match(state))
+ {
+ reclaim_sub_matches(mem, state);
+ return true;
+ }
+ restore_sub_matches(mem, state);
+ }
+
+ BOOST_ASSERT(state.cur_ == tmp);
+ return false;
+ }
+
+ Xpr xpr_;
+ bool not_;
+ bool do_save_; // true if matching xpr_ could modify the sub-matches
+ std::size_t width_;
+ };
+
+}}}
+
+#endif
diff --git a/boost/boost/xpressive/detail/core/matcher/mark_begin_matcher.hpp b/boost/boost/xpressive/detail/core/matcher/mark_begin_matcher.hpp
new file mode 100644
index 00000000000..9ee6bc08d79
--- /dev/null
+++ b/boost/boost/xpressive/detail/core/matcher/mark_begin_matcher.hpp
@@ -0,0 +1,56 @@
+///////////////////////////////////////////////////////////////////////////////
+// mark_begin_matcher.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_CORE_MATCHER_MARK_BEGIN_MATCHER_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_MARK_BEGIN_MATCHER_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/core/quant_style.hpp>
+#include <boost/xpressive/detail/core/state.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // mark_begin_matcher
+ //
+ struct mark_begin_matcher
+ : quant_style<quant_fixed_width, mpl::size_t<0>, mpl::false_>
+ {
+ int mark_number_; // signed because it could be negative
+
+ mark_begin_matcher(int mark_number)
+ : mark_number_(mark_number)
+ {
+ }
+
+ template<typename BidiIter, typename Next>
+ bool match(state_type<BidiIter> &state, Next const &next) const
+ {
+ sub_match_impl<BidiIter> &br = state.sub_match(this->mark_number_);
+
+ BidiIter old_begin = br.begin_;
+ br.begin_ = state.cur_;
+
+ if(next.match(state))
+ {
+ return true;
+ }
+
+ br.begin_ = old_begin;
+ return false;
+ }
+ };
+
+}}}
+
+#endif
diff --git a/boost/boost/xpressive/detail/core/matcher/mark_end_matcher.hpp b/boost/boost/xpressive/detail/core/matcher/mark_end_matcher.hpp
new file mode 100644
index 00000000000..e3d188dc722
--- /dev/null
+++ b/boost/boost/xpressive/detail/core/matcher/mark_end_matcher.hpp
@@ -0,0 +1,64 @@
+///////////////////////////////////////////////////////////////////////////////
+// mark_end_matcher.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_CORE_MATCHER_MARK_END_MATCHER_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_MARK_END_MATCHER_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/core/quant_style.hpp>
+#include <boost/xpressive/detail/core/state.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // mark_end_matcher
+ //
+ struct mark_end_matcher
+ : quant_style<quant_none, mpl::size_t<0>, mpl::false_>
+ {
+ int mark_number_;
+
+ mark_end_matcher(int mark_number)
+ : mark_number_(mark_number)
+ {
+ }
+
+ template<typename BidiIter, typename Next>
+ bool match(state_type<BidiIter> &state, Next const &next) const
+ {
+ sub_match_impl<BidiIter> &br = state.sub_match(this->mark_number_);
+
+ BidiIter old_first = br.first;
+ BidiIter old_second = br.second;
+ bool old_matched = br.matched;
+
+ br.first = br.begin_;
+ br.second = state.cur_;
+ br.matched = true;
+
+ if(next.match(state))
+ {
+ return true;
+ }
+
+ br.first = old_first;
+ br.second = old_second;
+ br.matched = old_matched;
+
+ return false;
+ }
+ };
+
+}}}
+
+#endif
diff --git a/boost/boost/xpressive/detail/core/matcher/mark_matcher.hpp b/boost/boost/xpressive/detail/core/matcher/mark_matcher.hpp
new file mode 100644
index 00000000000..4bcbc34b871
--- /dev/null
+++ b/boost/boost/xpressive/detail/core/matcher/mark_matcher.hpp
@@ -0,0 +1,86 @@
+///////////////////////////////////////////////////////////////////////////////
+// mark_matcher.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_CORE_MATCHER_MARK_MATCHER_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_MARK_MATCHER_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/assert.hpp>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/core/quant_style.hpp>
+#include <boost/xpressive/detail/core/state.hpp>
+#include <boost/xpressive/detail/utility/traits_utils.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // mark_matcher
+ //
+ template<typename Traits, bool ICase>
+ struct mark_matcher
+ : quant_style_fixed_unknown_width
+ {
+ typedef mpl::bool_<ICase> icase_type;
+ int mark_number_;
+
+ mark_matcher(int mark_number, Traits const &)
+ : mark_number_(mark_number)
+ {
+ }
+
+ template<typename BidiIter, typename Next>
+ bool match(state_type<BidiIter> &state, Next const &next) const
+ {
+ BOOST_ASSERT(this->mark_number_ < static_cast<int>(state.mark_count_));
+ sub_match_impl<BidiIter> const &br = state.sub_match(this->mark_number_);
+
+ if(!br.matched)
+ {
+ return false;
+ }
+
+ BidiIter const tmp = state.cur_;
+ for(BidiIter begin = br.first, end = br.second; begin != end; ++begin, ++state.cur_)
+ {
+ if(state.eos()
+ || detail::translate(*state.cur_, traits_cast<Traits>(state), icase_type())
+ != detail::translate(*begin, traits_cast<Traits>(state), icase_type()))
+ {
+ state.cur_ = tmp;
+ return false;
+ }
+ }
+
+ if(next.match(state))
+ {
+ return true;
+ }
+
+ state.cur_ = tmp;
+ return false;
+ }
+
+ template<typename BidiIter>
+ std::size_t get_width(state_type<BidiIter> *state) const
+ {
+ if(0 == state)
+ {
+ return unknown_width();
+ }
+ sub_match_impl<BidiIter> &br = state->sub_match(this->mark_number_);
+ return br.matched ? static_cast<std::size_t>(std::distance(br.first, br.second)) : 1U;
+ }
+ };
+
+}}}
+
+#endif
diff --git a/boost/boost/xpressive/detail/core/matcher/posix_charset_matcher.hpp b/boost/boost/xpressive/detail/core/matcher/posix_charset_matcher.hpp
new file mode 100644
index 00000000000..abd85dadc1d
--- /dev/null
+++ b/boost/boost/xpressive/detail/core/matcher/posix_charset_matcher.hpp
@@ -0,0 +1,68 @@
+///////////////////////////////////////////////////////////////////////////////
+// posix_charset_matcher.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_CORE_MATCHER_POSIX_CHARSET_MATCHER_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_POSIX_CHARSET_MATCHER_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/assert.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/core/quant_style.hpp>
+#include <boost/xpressive/detail/core/state.hpp>
+#include <boost/xpressive/detail/utility/traits_utils.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // posix_charset_matcher
+ //
+ template<typename Traits>
+ struct posix_charset_matcher
+ : quant_style_fixed_width<1>
+ {
+ typedef Traits traits_type;
+ typedef typename Traits::char_class_type char_class_type;
+
+ posix_charset_matcher(char_class_type m, bool no)
+ : not_(no)
+ , mask_(m)
+ {
+ BOOST_ASSERT(0 != this->mask_);
+ }
+
+ template<typename BidiIter, typename Next>
+ bool match(state_type<BidiIter> &state, Next const &next) const
+ {
+ if(state.eos() || this->not_ == traits_cast<Traits>(state).isctype(
+ *state.cur_, this->mask_))
+ {
+ return false;
+ }
+
+ ++state.cur_;
+ if(next.match(state))
+ {
+ return true;
+ }
+
+ --state.cur_;
+ return false;
+ }
+
+ bool not_;
+ char_class_type mask_;
+ };
+
+}}}
+
+#endif
diff --git a/boost/boost/xpressive/detail/core/matcher/range_matcher.hpp b/boost/boost/xpressive/detail/core/matcher/range_matcher.hpp
new file mode 100644
index 00000000000..f9d33e1c582
--- /dev/null
+++ b/boost/boost/xpressive/detail/core/matcher/range_matcher.hpp
@@ -0,0 +1,82 @@
+///////////////////////////////////////////////////////////////////////////////
+// range_matcher.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_CORE_MATCHER_RANGE_MATCHER_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_RANGE_MATCHER_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+# pragma warning(push)
+# pragma warning(disable : 4100) // unreferenced formal parameter
+#endif
+
+#include <boost/mpl/bool.hpp>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/core/quant_style.hpp>
+#include <boost/xpressive/detail/core/state.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // range_matcher
+ //
+ template<typename Traits, bool ICase>
+ struct range_matcher
+ : quant_style_fixed_width<1>
+ {
+ typedef typename Traits::char_type char_type;
+ typedef mpl::bool_<ICase> icase_type;
+ char_type ch_min_;
+ char_type ch_max_;
+ bool not_;
+
+ range_matcher(char_type ch_min, char_type ch_max, bool no, Traits const &)
+ : ch_min_(ch_min)
+ , ch_max_(ch_max)
+ , not_(no)
+ {
+ }
+
+ bool in_range(Traits const &traits, char_type ch, mpl::false_) const // case-sensitive
+ {
+ return traits.in_range(this->ch_min_, this->ch_max_, ch);
+ }
+
+ bool in_range(Traits const &traits, char_type ch, mpl::true_) const // case-insensitive
+ {
+ return traits.in_range_nocase(this->ch_min_, this->ch_max_, ch);
+ }
+
+ template<typename BidiIter, typename Next>
+ bool match(state_type<BidiIter> &state, Next const &next) const
+ {
+ if(state.eos() || this->not_ ==
+ this->in_range(traits_cast<Traits>(state), *state.cur_, icase_type()))
+ {
+ return false;
+ }
+
+ ++state.cur_;
+ if(next.match(state))
+ {
+ return true;
+ }
+
+ --state.cur_;
+ return false;
+ }
+ };
+
+}}}
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma warning(pop)
+#endif
+
+#endif
diff --git a/boost/boost/xpressive/detail/core/matcher/regex_byref_matcher.hpp b/boost/boost/xpressive/detail/core/matcher/regex_byref_matcher.hpp
new file mode 100644
index 00000000000..f4d4d39cffa
--- /dev/null
+++ b/boost/boost/xpressive/detail/core/matcher/regex_byref_matcher.hpp
@@ -0,0 +1,69 @@
+///////////////////////////////////////////////////////////////////////////////
+// regex_byref_matcher.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_CORE_MATCHER_REGEX_BYREF_MATCHER_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_REGEX_BYREF_MATCHER_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/assert.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/shared_ptr.hpp>
+#include <boost/xpressive/regex_error.hpp>
+#include <boost/xpressive/regex_constants.hpp>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/core/quant_style.hpp>
+#include <boost/xpressive/detail/core/state.hpp>
+#include <boost/xpressive/detail/core/regex_impl.hpp>
+#include <boost/xpressive/detail/core/adaptor.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // regex_byref_matcher
+ //
+ template<typename BidiIter>
+ struct regex_byref_matcher
+ : quant_style<quant_variable_width, unknown_width, mpl::false_>
+ {
+ // avoid cyclic references by holding a weak_ptr to the
+ // regex_impl struct
+ weak_ptr<regex_impl<BidiIter> > wimpl_;
+
+ // the basic_regex object holds a ref-count to this regex_impl, so
+ // we don't have to worry about it going away.
+ regex_impl<BidiIter> const *pimpl_;
+
+ regex_byref_matcher(shared_ptr<regex_impl<BidiIter> > const &impl)
+ : wimpl_(impl)
+ , pimpl_(impl.get())
+ {
+ BOOST_ASSERT(this->pimpl_);
+ }
+
+ template<typename Next>
+ bool match(state_type<BidiIter> &state, Next const &next) const
+ {
+ // regex_matcher is used for embeding a dynamic regex in a static regex. As such,
+ // Next will always point to a static regex.
+ BOOST_MPL_ASSERT((is_static_xpression<Next>));
+ BOOST_ASSERT(this->pimpl_ == this->wimpl_.lock().get());
+ ensure(this->pimpl_->xpr_, regex_constants::error_badref, "bad regex reference");
+
+ // wrap the static xpression in a matchable interface
+ xpression_adaptor<Next const &, BidiIter> adaptor(next);
+ return push_context_match(*this->pimpl_, state, adaptor);
+ }
+ };
+
+}}}
+
+#endif
diff --git a/boost/boost/xpressive/detail/core/matcher/regex_matcher.hpp b/boost/boost/xpressive/detail/core/matcher/regex_matcher.hpp
new file mode 100644
index 00000000000..2f6273cabab
--- /dev/null
+++ b/boost/boost/xpressive/detail/core/matcher/regex_matcher.hpp
@@ -0,0 +1,63 @@
+///////////////////////////////////////////////////////////////////////////////
+// regex_matcher.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_CORE_MATCHER_REGEX_MATCHER_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_REGEX_MATCHER_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/mpl/assert.hpp>
+#include <boost/xpressive/regex_error.hpp>
+#include <boost/xpressive/regex_constants.hpp>
+#include <boost/xpressive/detail/core/regex_impl.hpp>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/core/quant_style.hpp>
+#include <boost/xpressive/detail/core/state.hpp>
+#include <boost/xpressive/detail/core/adaptor.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // regex_matcher
+ //
+ template<typename BidiIter>
+ struct regex_matcher
+ : quant_style<quant_variable_width, unknown_width, mpl::false_>
+ {
+ regex_impl<BidiIter> impl_;
+
+ regex_matcher(shared_ptr<regex_impl<BidiIter> > const &impl)
+ : impl_()
+ {
+ this->impl_.xpr_ = impl->xpr_;
+ this->impl_.traits_ = impl->traits_;
+ this->impl_.mark_count_ = impl->mark_count_;
+ this->impl_.hidden_mark_count_ = impl->hidden_mark_count_;
+
+ ensure(this->impl_.xpr_, regex_constants::error_badref, "bad regex reference");
+ }
+
+ template<typename Next>
+ bool match(state_type<BidiIter> &state, Next const &next) const
+ {
+ // regex_matcher is used for embeding a dynamic regex in a static regex. As such,
+ // Next will always point to a static regex.
+ BOOST_MPL_ASSERT((is_static_xpression<Next>));
+
+ // wrap the static xpression in a matchable interface
+ xpression_adaptor<Next const &, BidiIter> adaptor(next);
+ return push_context_match(this->impl_, state, adaptor);
+ }
+ };
+
+}}}
+
+#endif
diff --git a/boost/boost/xpressive/detail/core/matcher/repeat_begin_matcher.hpp b/boost/boost/xpressive/detail/core/matcher/repeat_begin_matcher.hpp
new file mode 100644
index 00000000000..135e4fec3f2
--- /dev/null
+++ b/boost/boost/xpressive/detail/core/matcher/repeat_begin_matcher.hpp
@@ -0,0 +1,69 @@
+///////////////////////////////////////////////////////////////////////////////
+// repeat_end_matcher.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_CORE_MATCHER_REPEAT_BEGIN_MATCHER_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_REPEAT_BEGIN_MATCHER_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/core/quant_style.hpp>
+#include <boost/xpressive/detail/core/state.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+ //
+ // Note: here is the variable-width xpression quantifier. It always
+ // matches at least once, so if the min is 0, it is the responsibility
+ // of the parser to make it alternate with an epsilon matcher.
+ //
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // repeat_begin_matcher
+ //
+ struct repeat_begin_matcher
+ : quant_style<quant_variable_width, unknown_width, mpl::false_>
+ {
+ int mark_number_;
+
+ repeat_begin_matcher(int mark_number)
+ : mark_number_(mark_number)
+ {
+ }
+
+ template<typename BidiIter, typename Next>
+ bool match(state_type<BidiIter> &state, Next const &next) const
+ {
+ sub_match_impl<BidiIter> &br = state.sub_match(this->mark_number_);
+
+ unsigned int old_repeat_count = br.repeat_count_;
+ bool old_zero_width = br.zero_width_;
+
+ br.repeat_count_ = 1;
+ br.zero_width_ = false;
+
+ // "push" next onto the stack, so it can be "popped" in
+ // repeat_end_matcher and used to loop back.
+ if(next.BOOST_NESTED_TEMPLATE push_match<Next>(state))
+ {
+ return true;
+ }
+
+ br.repeat_count_ = old_repeat_count;
+ br.zero_width_ = old_zero_width;
+
+ return false;
+ }
+ };
+
+}}}
+
+#endif
diff --git a/boost/boost/xpressive/detail/core/matcher/repeat_end_matcher.hpp b/boost/boost/xpressive/detail/core/matcher/repeat_end_matcher.hpp
new file mode 100644
index 00000000000..9a0ba5d416c
--- /dev/null
+++ b/boost/boost/xpressive/detail/core/matcher/repeat_end_matcher.hpp
@@ -0,0 +1,121 @@
+///////////////////////////////////////////////////////////////////////////////
+// repeat_end_matcher.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_CORE_MATCHER_REPEAT_END_MATCHER_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_REPEAT_END_MATCHER_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/mpl/bool.hpp>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/core/quant_style.hpp>
+#include <boost/xpressive/detail/core/state.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // repeat_end_matcher
+ //
+ template<bool Greedy>
+ struct repeat_end_matcher
+ : quant_style<quant_none, mpl::size_t<0>, mpl::false_>
+ {
+ typedef mpl::bool_<Greedy> greedy_type;
+ int mark_number_;
+ unsigned int min_, max_;
+ mutable xpression_base const *back_;
+
+ repeat_end_matcher(int mark_number, unsigned int min, unsigned int max)
+ : mark_number_(mark_number)
+ , min_(min)
+ , max_(max)
+ , back_(0)
+ {
+ }
+
+ template<typename BidiIter, typename Next>
+ bool match(state_type<BidiIter> &state, Next const &next) const
+ {
+ // prevent repeated zero-width sub-matches from causing infinite recursion
+ sub_match_impl<BidiIter> &br = state.sub_match(this->mark_number_);
+
+ if(br.zero_width_ && br.begin_ == state.cur_)
+ {
+ return next.skip_match(state);
+ }
+
+ bool old_zero_width = br.zero_width_;
+ br.zero_width_ = (br.begin_ == state.cur_);
+
+ if(this->match_(state, next, greedy_type()))
+ {
+ return true;
+ }
+
+ br.zero_width_ = old_zero_width;
+ return false;
+ }
+
+ // greedy, variable-width quantifier
+ template<typename BidiIter, typename Next>
+ bool match_(state_type<BidiIter> &state, Next const &next, mpl::true_) const
+ {
+ sub_match_impl<BidiIter> &br = state.sub_match(this->mark_number_);
+
+ if(this->max_ > br.repeat_count_)
+ {
+ ++br.repeat_count_;
+ // loop back to the expression "pushed" in repeat_begin_matcher::match
+ if(next.top_match(state, this->back_))
+ {
+ return true;
+ }
+ else if(--br.repeat_count_ < this->min_)
+ {
+ return false;
+ }
+ }
+
+ // looping finished, continue matching the rest of the pattern
+ return next.skip_match(state);
+ }
+
+ // non-greedy, variable-width quantifier
+ template<typename BidiIter, typename Next>
+ bool match_(state_type<BidiIter> &state, Next const &next, mpl::false_) const
+ {
+ sub_match_impl<BidiIter> &br = state.sub_match(this->mark_number_);
+
+ if(this->min_ <= br.repeat_count_)
+ {
+ if(next.skip_match(state))
+ {
+ return true;
+ }
+ }
+
+ if(this->max_ > br.repeat_count_)
+ {
+ ++br.repeat_count_;
+ if(next.top_match(state, this->back_))
+ {
+ return true;
+ }
+ --br.repeat_count_;
+ }
+
+ return false;
+ }
+ };
+
+}}}
+
+#endif
diff --git a/boost/boost/xpressive/detail/core/matcher/set_matcher.hpp b/boost/boost/xpressive/detail/core/matcher/set_matcher.hpp
new file mode 100644
index 00000000000..8d02e85c937
--- /dev/null
+++ b/boost/boost/xpressive/detail/core/matcher/set_matcher.hpp
@@ -0,0 +1,145 @@
+///////////////////////////////////////////////////////////////////////////////
+// set.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_SET_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_SET_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+# pragma warning(push)
+# pragma warning(disable : 4127) // conditional expression constant
+# pragma warning(disable : 4100) // unreferenced formal parameter
+# pragma warning(disable : 4351) // vc8 new behavior: elements of array 'foo' will be default initialized
+#endif
+
+#include <algorithm>
+#include <boost/mpl/assert.hpp>
+#include <boost/type_traits/same_traits.hpp>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/core/quant_style.hpp>
+#include <boost/xpressive/detail/core/state.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+///////////////////////////////////////////////////////////////////////////////
+// set_matcher
+//
+template<typename Traits, int Size>
+struct set_matcher
+ : quant_style_fixed_width<1>
+{
+ typedef typename Traits::char_type char_type;
+ char_type set_[ Size ? Size : 1 ];
+ bool not_;
+ bool icase_;
+
+ typedef set_matcher<Traits, Size + 1> next_type;
+ friend struct set_matcher<Traits, Size - 1>;
+
+ set_matcher(Traits const &)
+ : set_()
+ , not_(false)
+ , icase_(false)
+ {
+ }
+
+ set_matcher(char_type ch, Traits const &traits)
+ : set_()
+ , not_(false)
+ , icase_(false)
+ {
+ BOOST_MPL_ASSERT_RELATION(1, ==, Size);
+ this->set_[0] = traits.translate(ch);
+ }
+
+ void complement()
+ {
+ this->not_ = !this->not_;
+ }
+
+ void nocase(Traits const &traits)
+ {
+ this->icase_ = true;
+
+ for(int i = 0; i < Size; ++i)
+ {
+ this->set_[i] = traits.translate_nocase(this->set_[i]);
+ }
+ }
+
+ next_type push_back(char_type ch, Traits const &traits) const
+ {
+ return next_type(*this, ch, traits);
+ }
+
+ char_type const *begin() const
+ {
+ return this->set_;
+ }
+
+ char_type const *end() const
+ {
+ return this->set_ + Size;
+ }
+
+ bool in_set(Traits const &traits, char_type ch) const
+ {
+ ch = this->icase_ ? traits.translate_nocase(ch) : traits.translate(ch);
+
+ if(1 == Size)
+ {
+ return this->set_[0] == ch;
+ }
+ else
+ {
+ return this->end() != std::find(this->begin(), this->end(), ch);
+ }
+ }
+
+ template<typename BidiIter, typename Next>
+ bool match(state_type<BidiIter> &state, Next const &next) const
+ {
+ if(state.eos() || this->not_ == this->in_set(traits_cast<Traits>(state), *state.cur_))
+ {
+ return false;
+ }
+
+ if(++state.cur_, next.match(state))
+ {
+ return true;
+ }
+
+ return --state.cur_, false;
+ }
+
+private:
+
+ set_matcher(set_matcher<Traits, Size - 1> const &that, char_type ch, Traits const &traits)
+ : set_()
+ , not_(false)
+ , icase_(that.icase_)
+ {
+ std::copy(that.begin(), that.end(), this->set_);
+ this->set_[ Size - 1 ] = traits.translate(ch);
+ }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// set_initializer
+struct set_initializer
+{
+};
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma warning(pop)
+#endif
+
+}}} // namespace boost::xpressive::detail
+
+#endif
diff --git a/boost/boost/xpressive/detail/core/matcher/simple_repeat_matcher.hpp b/boost/boost/xpressive/detail/core/matcher/simple_repeat_matcher.hpp
new file mode 100644
index 00000000000..e0b6b5a1d2a
--- /dev/null
+++ b/boost/boost/xpressive/detail/core/matcher/simple_repeat_matcher.hpp
@@ -0,0 +1,217 @@
+///////////////////////////////////////////////////////////////////////////////
+// simple_repeat_matcher.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_CORE_MATCHER_SIMPLE_REPEAT_MATCHER_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_SIMPLE_REPEAT_MATCHER_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/assert.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/core/quant_style.hpp>
+#include <boost/xpressive/detail/core/state.hpp>
+#include <boost/xpressive/detail/static/type_traits.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // simple_repeat_traits
+ //
+ struct greedy_slow_tag {};
+ struct greedy_fast_tag {};
+ struct non_greedy_tag {};
+
+ typedef static_xpression<any_matcher, true_xpression> any_sxpr;
+ typedef matcher_wrapper<any_matcher> any_dxpr;
+
+ template<typename Xpr, typename Greedy, typename Random>
+ struct simple_repeat_traits
+ {
+ typedef typename mpl::if_<Greedy, greedy_slow_tag, non_greedy_tag>::type tag_type;
+ };
+
+ template<>
+ struct simple_repeat_traits<any_sxpr, mpl::true_, mpl::true_>
+ {
+ typedef greedy_fast_tag tag_type;
+ };
+
+ template<>
+ struct simple_repeat_traits<any_dxpr, mpl::true_, mpl::true_>
+ {
+ typedef greedy_fast_tag tag_type;
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // simple_repeat_matcher
+ //
+ template<typename Xpr, bool Greedy>
+ struct simple_repeat_matcher
+ : quant_style_variable_width
+ {
+ typedef Xpr xpr_type;
+ typedef mpl::bool_<Greedy> greedy_type;
+
+ Xpr xpr_;
+ unsigned int min_, max_;
+
+ simple_repeat_matcher(Xpr const &xpr, unsigned int min, unsigned int max)
+ : xpr_(xpr)
+ , min_(min)
+ , max_(max)
+ {
+ // it is the job of the parser to make sure this never happens
+ BOOST_ASSERT(min <= max);
+ BOOST_ASSERT(0 != max);
+ }
+
+ template<typename BidiIter, typename Next>
+ bool match(state_type<BidiIter> &state, Next const &next) const
+ {
+ typedef mpl::bool_<is_random<BidiIter>::value> is_rand;
+ typedef typename simple_repeat_traits<Xpr, greedy_type, is_rand>::tag_type tag_type;
+ return this->match_(state, next, tag_type());
+ }
+
+ // greedy, fixed-width quantifier
+ template<typename BidiIter, typename Next>
+ bool match_(state_type<BidiIter> &state, Next const &next, greedy_slow_tag) const
+ {
+ int const diff = -static_cast<int>(this->xpr_.get_width(&state));
+ BOOST_ASSERT(diff != -static_cast<int>(unknown_width()));
+ unsigned int matches = 0;
+ BidiIter const tmp = state.cur_;
+
+ if(0 == diff)
+ {
+ return this->xpr_.match(state) && next.match(state);
+ }
+
+ // greedily match as much as we can
+ while(matches < this->max_ && this->xpr_.match(state))
+ {
+ ++matches;
+ }
+
+ if(this->min_ > matches)
+ {
+ state.cur_ = tmp;
+ return false;
+ }
+
+ // try matching the rest of the pattern, and back off if necessary
+ for(; ; --matches, std::advance(state.cur_, diff))
+ {
+ if(next.match(state))
+ {
+ return true;
+ }
+ else if(this->min_ == matches)
+ {
+ state.cur_ = tmp;
+ return false;
+ }
+ }
+ }
+
+ // non-greedy fixed-width quantification
+ template<typename BidiIter, typename Next>
+ bool match_(state_type<BidiIter> &state, Next const &next, non_greedy_tag) const
+ {
+ BidiIter const tmp = state.cur_;
+ unsigned int matches = 0;
+
+ if(0 == this->xpr_.get_width(&state))
+ {
+ return this->xpr_.match(state) && next.match(state);
+ }
+
+ for(; matches < this->min_; ++matches)
+ {
+ if(!this->xpr_.match(state))
+ {
+ state.cur_ = tmp;
+ return false;
+ }
+ }
+
+ do
+ {
+ if(next.match(state))
+ {
+ return true;
+ }
+ }
+ while(matches++ < this->max_ && this->xpr_.match(state));
+
+ state.cur_ = tmp;
+ return false;
+ }
+
+ // when greedily matching any character, skip to the end instead of iterating there.
+ template<typename BidiIter, typename Next>
+ bool match_(state_type<BidiIter> &state, Next const &next, greedy_fast_tag) const
+ {
+ BidiIter const tmp = state.cur_;
+ std::size_t const diff_to_end = static_cast<std::size_t>(state.end_ - tmp);
+
+ // is there enough room?
+ if(this->min_ > diff_to_end)
+ {
+ return false;
+ }
+
+ BidiIter const min_iter = tmp + this->min_;
+ state.cur_ += (std::min)((std::size_t)this->max_, diff_to_end);
+
+ for(;; --state.cur_)
+ {
+ if(next.match(state))
+ {
+ return true;
+ }
+ else if(min_iter == state.cur_)
+ {
+ state.cur_ = tmp;
+ return false;
+ }
+ }
+ }
+
+ template<typename BidiIter>
+ std::size_t get_width(state_type<BidiIter> *state) const
+ {
+ if(this->min_ != this->max_)
+ {
+ return unknown_width();
+ }
+ return this->min_ * this->xpr_.get_width(state);
+ }
+
+ private:
+ simple_repeat_matcher &operator =(simple_repeat_matcher const &);
+ };
+
+ // BUGBUG can all non-greedy quantification be done with the fixed width quantifier?
+
+ // BUGBUG matchers are chained together using static_xpression so that matchers to
+ // the left can invoke matchers to the right. This is so that if the left matcher
+ // succeeds but the right matcher fails, the left matcher is given the opportunity
+ // to try something else. This is how backtracking works. However, if the left matcher
+ // can succeed only one way (as with any_matcher, for example), it does not need
+ // backtracking. In this case, leaving its stack frame active is a waste of stack
+ // space. Can something be done?
+
+}}}
+
+#endif
diff --git a/boost/boost/xpressive/detail/core/matcher/string_matcher.hpp b/boost/boost/xpressive/detail/core/matcher/string_matcher.hpp
new file mode 100644
index 00000000000..b3f176ff4a6
--- /dev/null
+++ b/boost/boost/xpressive/detail/core/matcher/string_matcher.hpp
@@ -0,0 +1,87 @@
+///////////////////////////////////////////////////////////////////////////////
+// string_matcher.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_CORE_MATCHER_STRING_MATCHER_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_STRING_MATCHER_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <string>
+#include <boost/mpl/bool.hpp>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/core/quant_style.hpp>
+#include <boost/xpressive/detail/core/state.hpp>
+#include <boost/xpressive/detail/utility/traits_utils.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // string_matcher
+ //
+ template<typename Traits, bool ICase>
+ struct string_matcher
+ : quant_style_fixed_unknown_width
+ {
+ typedef typename Traits::char_type char_type;
+ typedef mpl::bool_<ICase> icase_type;
+ std::basic_string<char_type> str_;
+ char_type const *end_;
+
+ string_matcher(std::basic_string<char_type> const &str, Traits const &traits)
+ : str_(str)
+ , end_(str_.data() + str_.size())
+ {
+ for(typename std::basic_string<char_type>::size_type i = 0; i < this->str_.size(); ++i)
+ {
+ this->str_[i] = detail::translate(this->str_[i], traits, icase_type());
+ }
+ }
+
+ string_matcher(string_matcher<Traits, ICase> const &that)
+ : str_(that.str_)
+ , end_(str_.data() + str_.size())
+ {
+ }
+
+ template<typename BidiIter, typename Next>
+ bool match(state_type<BidiIter> &state, Next const &next) const
+ {
+ BidiIter const tmp = state.cur_;
+ char_type const *begin = this->str_.data();
+ for(; begin != this->end_; ++begin, ++state.cur_)
+ {
+ if(state.eos() ||
+ (detail::translate(*state.cur_, traits_cast<Traits>(state), icase_type()) != *begin))
+ {
+ state.cur_ = tmp;
+ return false;
+ }
+ }
+
+ if(next.match(state))
+ {
+ return true;
+ }
+
+ state.cur_ = tmp;
+ return false;
+ }
+
+ template<typename BidiIter>
+ std::size_t get_width(state_type<BidiIter> *) const
+ {
+ return this->str_.size();
+ }
+ };
+
+}}}
+
+#endif
diff --git a/boost/boost/xpressive/detail/core/matcher/true_matcher.hpp b/boost/boost/xpressive/detail/core/matcher/true_matcher.hpp
new file mode 100644
index 00000000000..9d99062b69a
--- /dev/null
+++ b/boost/boost/xpressive/detail/core/matcher/true_matcher.hpp
@@ -0,0 +1,38 @@
+///////////////////////////////////////////////////////////////////////////////
+// true_matcher.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_CORE_MATCHER_TRUE_MATCHER_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHER_TRUE_MATCHER_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/core/quant_style.hpp>
+#include <boost/xpressive/detail/core/state.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // true_matcher
+ //
+ struct true_matcher
+ : quant_style_assertion
+ {
+ template<typename BidiIter, typename Next>
+ static bool match(state_type<BidiIter> &, Next const &)
+ {
+ return true;
+ }
+ };
+
+}}}
+
+#endif
diff --git a/boost/boost/xpressive/detail/core/matchers.hpp b/boost/boost/xpressive/detail/core/matchers.hpp
new file mode 100644
index 00000000000..21765f8518c
--- /dev/null
+++ b/boost/boost/xpressive/detail/core/matchers.hpp
@@ -0,0 +1,47 @@
+///////////////////////////////////////////////////////////////////////////////
+// matchers.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_CORE_MATCHERS_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_CORE_MATCHERS_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/xpressive/detail/core/matcher/action_matcher.hpp>
+#include <boost/xpressive/detail/core/matcher/alternate_end_matcher.hpp>
+#include <boost/xpressive/detail/core/matcher/alternate_matcher.hpp>
+#include <boost/xpressive/detail/core/matcher/any_matcher.hpp>
+#include <boost/xpressive/detail/core/matcher/assert_bol_matcher.hpp>
+#include <boost/xpressive/detail/core/matcher/assert_bos_matcher.hpp>
+#include <boost/xpressive/detail/core/matcher/assert_eol_matcher.hpp>
+#include <boost/xpressive/detail/core/matcher/assert_eos_matcher.hpp>
+#include <boost/xpressive/detail/core/matcher/assert_word_matcher.hpp>
+#include <boost/xpressive/detail/core/matcher/charset_matcher.hpp>
+#include <boost/xpressive/detail/core/matcher/end_matcher.hpp>
+#include <boost/xpressive/detail/core/matcher/epsilon_matcher.hpp>
+#include <boost/xpressive/detail/core/matcher/keeper_matcher.hpp>
+#include <boost/xpressive/detail/core/matcher/literal_matcher.hpp>
+#include <boost/xpressive/detail/core/matcher/logical_newline_matcher.hpp>
+#include <boost/xpressive/detail/core/matcher/lookahead_matcher.hpp>
+#include <boost/xpressive/detail/core/matcher/lookbehind_matcher.hpp>
+#include <boost/xpressive/detail/core/matcher/mark_begin_matcher.hpp>
+#include <boost/xpressive/detail/core/matcher/mark_end_matcher.hpp>
+#include <boost/xpressive/detail/core/matcher/mark_matcher.hpp>
+#include <boost/xpressive/detail/core/matcher/posix_charset_matcher.hpp>
+#include <boost/xpressive/detail/core/matcher/range_matcher.hpp>
+#include <boost/xpressive/detail/core/matcher/regex_byref_matcher.hpp>
+#include <boost/xpressive/detail/core/matcher/regex_matcher.hpp>
+#include <boost/xpressive/detail/core/matcher/repeat_begin_matcher.hpp>
+#include <boost/xpressive/detail/core/matcher/repeat_end_matcher.hpp>
+#include <boost/xpressive/detail/core/matcher/set_matcher.hpp>
+#include <boost/xpressive/detail/core/matcher/simple_repeat_matcher.hpp>
+#include <boost/xpressive/detail/core/matcher/string_matcher.hpp>
+#include <boost/xpressive/detail/core/matcher/true_matcher.hpp>
+
+#endif
diff --git a/boost/boost/xpressive/detail/core/optimize.hpp b/boost/boost/xpressive/detail/core/optimize.hpp
new file mode 100644
index 00000000000..ed181402a47
--- /dev/null
+++ b/boost/boost/xpressive/detail/core/optimize.hpp
@@ -0,0 +1,98 @@
+///////////////////////////////////////////////////////////////////////////////
+// optimize.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_CORE_OPTIMIZE_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_CORE_OPTIMIZE_HPP_EAN_10_04_2005
+
+#include <string>
+#include <utility>
+#include <boost/mpl/bool.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+#include <boost/xpressive/detail/core/finder.hpp>
+#include <boost/xpressive/detail/core/peeker.hpp>
+#include <boost/xpressive/detail/core/regex_impl.hpp>
+#include <boost/xpressive/detail/utility/hash_peek_bitset.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+///////////////////////////////////////////////////////////////////////////////
+// optimize_regex
+//
+template<typename BidiIter, typename Traits>
+inline void optimize_regex(regex_impl<BidiIter> &impl, Traits const &traits, mpl::true_)
+{
+ typedef typename iterator_value<BidiIter>::type char_type;
+
+ // optimization: get the peek chars OR the boyer-moore search string
+ hash_peek_bitset<char_type> bset;
+ xpression_peeker<char_type> peeker(&bset, traits);
+ impl.xpr_->peek(peeker);
+
+ // if we have a leading string literal, initialize a boyer-moore struct with it
+ std::pair<std::basic_string<char_type> const *, bool> str = peeker.get_string();
+ if(0 != str.first)
+ {
+ impl.finder_.reset
+ (
+ new boyer_moore_finder<BidiIter, Traits>
+ (
+ str.first->data()
+ , str.first->data() + str.first->size()
+ , traits
+ , str.second
+ )
+ );
+ }
+ else if(peeker.line_start())
+ {
+ impl.finder_.reset
+ (
+ new line_start_finder<BidiIter, Traits>(traits)
+ );
+ }
+ else if(256 != bset.count())
+ {
+ impl.finder_.reset
+ (
+ new hash_peek_finder<BidiIter, Traits>(bset)
+ );
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// optimize_regex
+//
+template<typename BidiIter, typename Traits>
+inline void optimize_regex(regex_impl<BidiIter> &impl, Traits const &traits, mpl::false_)
+{
+ typedef typename iterator_value<BidiIter>::type char_type;
+
+ // optimization: get the peek chars OR the line start finder
+ hash_peek_bitset<char_type> bset;
+ xpression_peeker<char_type> peeker(&bset, traits);
+ impl.xpr_->peek(peeker);
+
+ if(peeker.line_start())
+ {
+ impl.finder_.reset
+ (
+ new line_start_finder<BidiIter, Traits>(traits)
+ );
+ }
+ else if(256 != bset.count())
+ {
+ impl.finder_.reset
+ (
+ new hash_peek_finder<BidiIter, Traits>(bset)
+ );
+ }
+}
+
+}}} // namespace boost::xpressive
+
+#endif
diff --git a/boost/boost/xpressive/detail/core/peeker.hpp b/boost/boost/xpressive/detail/core/peeker.hpp
new file mode 100644
index 00000000000..2304fbea35d
--- /dev/null
+++ b/boost/boost/xpressive/detail/core/peeker.hpp
@@ -0,0 +1,197 @@
+///////////////////////////////////////////////////////////////////////////////
+// peeker.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_CORE_PEEKER_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_CORE_PEEKER_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <string>
+#include <typeinfo>
+#include <boost/assert.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/mpl/size_t.hpp>
+#include <boost/mpl/equal_to.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/core/matchers.hpp>
+#include <boost/xpressive/detail/utility/hash_peek_bitset.hpp>
+#include <boost/xpressive/detail/utility/never_true.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+///////////////////////////////////////////////////////////////////////////////
+// peek_next
+// tell whether or not to keep looking for a peek optimization
+template<typename Matcher>
+struct peek_next
+ : mpl::equal_to<typename Matcher::width, mpl::size_t<0> >
+{
+};
+
+template<>
+struct peek_next<mark_begin_matcher>
+ : mpl::true_
+{
+};
+
+template<>
+struct peek_next<repeat_begin_matcher>
+ : mpl::true_
+{
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// xpression_peeker
+//
+template<typename Char>
+struct xpression_peeker
+{
+ template<typename Traits>
+ explicit xpression_peeker(hash_peek_bitset<Char> *bset, Traits const &traits)
+ : bset_(bset)
+ , str_(0)
+ , str_icase_(false)
+ , line_start_(false)
+ , traits_(0)
+ , traits_type_(0)
+ {
+ this->set_traits(traits);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // accessors
+ std::pair<std::basic_string<Char> const *, bool> get_string() const
+ {
+ return std::make_pair(this->str_, this->str_icase_);
+ }
+
+ bool line_start() const
+ {
+ return this->line_start_;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // modifiers
+ void fail(bool do_fail = true)
+ {
+ if(do_fail)
+ {
+ this->bset_->set_all();
+ }
+ }
+
+ template<typename Xpr>
+ peek_next<Xpr> peek(Xpr const &)
+ {
+ this->fail(!peek_next<Xpr>::value);
+ return peek_next<Xpr>();
+ }
+
+ template<typename Traits>
+ mpl::true_ peek(assert_bol_matcher<Traits> const &)
+ {
+ this->line_start_ = true;
+ return mpl::true_();
+ }
+
+ template<typename Traits, bool ICase>
+ mpl::false_ peek(literal_matcher<Traits, ICase, false> const &xpr)
+ {
+ this->bset_->set_char(xpr.ch_, ICase, this->get_traits_<Traits>());
+ return mpl::false_();
+ }
+
+ template<typename Traits, bool ICase>
+ mpl::false_ peek(string_matcher<Traits, ICase> const &xpr)
+ {
+ this->bset_->set_char(xpr.str_[0], ICase, this->get_traits_<Traits>());
+ this->str_ = &xpr.str_;
+ this->str_icase_ = ICase;
+ return mpl::false_();
+ }
+
+ template<typename Alternates, typename Traits>
+ mpl::false_ peek(alternate_matcher<Alternates, Traits> const &xpr)
+ {
+ BOOST_ASSERT(0 != xpr.bset_.count());
+ this->bset_->set_bitset(xpr.bset_);
+ return mpl::false_();
+ }
+
+ template<typename Traits>
+ mpl::false_ peek(posix_charset_matcher<Traits> const &xpr)
+ {
+ this->bset_->set_class(xpr.mask_, xpr.not_, this->get_traits_<Traits>());
+ return mpl::false_();
+ }
+
+ template<typename Dummy = void>
+ struct is_char_8bit : mpl::bool_<1 == sizeof(Char)> {};
+
+ template<bool ICase, typename Traits>
+ typename enable_if<is_char_8bit<Traits>, mpl::false_>::type
+ peek(charset_matcher<Traits, ICase, basic_chset<Char> > const &xpr)
+ {
+ BOOST_ASSERT(0 != xpr.charset_.base().count());
+ this->bset_->set_charset(xpr.charset_, ICase);
+ return mpl::false_();
+ }
+
+ template<typename Traits, bool ICase>
+ mpl::false_ peek(range_matcher<Traits, ICase> const &xpr)
+ {
+ this->bset_->set_range(xpr.ch_min_, xpr.ch_max_, xpr.not_, ICase, this->get_traits_<Traits>());
+ return mpl::false_();
+ }
+
+ template<typename Xpr, bool Greedy>
+ mpl::false_ peek(simple_repeat_matcher<Xpr, Greedy> const &xpr)
+ {
+ 0 != xpr.min_ ? xpr.xpr_.peek(*this) : this->fail(); // could be a union of xpr and next
+ return mpl::false_();
+ }
+
+ template<typename Traits>
+ void set_traits(Traits const &traits)
+ {
+ if(0 == this->traits_)
+ {
+ this->traits_ = &traits;
+ this->traits_type_ = &typeid(Traits);
+ }
+ else if(*this->traits_type_ != typeid(Traits) || this->get_traits_<Traits>() != traits)
+ {
+ this->fail(); // traits mis-match! set all and bail
+ }
+ }
+
+private:
+
+ template<typename Traits>
+ Traits const &get_traits_() const
+ {
+ BOOST_ASSERT(!!(*this->traits_type_ == typeid(Traits)));
+ return *static_cast<Traits const *>(this->traits_);
+ }
+
+ hash_peek_bitset<Char> *bset_;
+ std::basic_string<Char> const *str_;
+ bool str_icase_;
+ bool line_start_;
+ void const *traits_;
+ std::type_info const *traits_type_;
+};
+
+}}} // namespace boost::xpressive::detail
+
+#endif
diff --git a/boost/boost/xpressive/detail/core/quant_style.hpp b/boost/boost/xpressive/detail/core/quant_style.hpp
new file mode 100644
index 00000000000..56f1957ee9d
--- /dev/null
+++ b/boost/boost/xpressive/detail/core/quant_style.hpp
@@ -0,0 +1,157 @@
+///////////////////////////////////////////////////////////////////////////////
+// quant_style.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_CORE_QUANT_STYLE_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_CORE_QUANT_STYLE_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/type_traits/is_base_and_derived.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/not_equal_to.hpp>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+
+#if defined(NDEBUG) & defined(BOOST_XPR_DEBUG_STACK)
+# undef BOOST_XPR_DEBUG_STACK
+#endif
+
+#ifdef BOOST_XPR_DEBUG_STACK
+# define BOOST_XPR_DEBUG_STACK_ASSERT BOOST_ASSERT
+#else
+# define BOOST_XPR_DEBUG_STACK_ASSERT(x) static_cast<void>(0)
+#endif
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+//////////////////////////////////////////////////////////////////////////
+// xpression_base
+//
+struct xpression_base
+{
+#ifdef BOOST_XPR_DEBUG_STACK
+ virtual ~xpression_base()
+ {
+ }
+#endif
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// is_xpr
+//
+template<typename T>
+struct is_xpr
+ : is_base_and_derived<xpression_base, T>
+{
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// quant_enum
+//
+enum quant_enum
+{
+ quant_none,
+ quant_auto,
+ quant_fixed_width,
+ quant_variable_width
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// quant_style
+//
+template<quant_enum QuantStyle, typename Width = unknown_width, typename Pure = mpl::true_>
+struct quant_style
+ : xpression_base
+{
+ typedef mpl::int_<QuantStyle> quant; // Which quantification strategy to use?
+ typedef Width width; // how many characters this matcher consumes
+ typedef Pure pure; // whether this matcher has observable side-effects
+
+ template<typename BidiIter>
+ static std::size_t get_width(state_type<BidiIter> *)
+ {
+ return Width::value;
+ }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// quant_style_none
+// this sub-expression cannot be quantified
+typedef quant_style<quant_none> quant_style_none;
+
+///////////////////////////////////////////////////////////////////////////////
+// quant_style_fixed_unknown_width
+// this sub-expression is fixed width for the purpose of quantification, but
+// the width cannot be determined at compile time. An example would be the
+// string_matcher or the mark_matcher.
+typedef quant_style<quant_fixed_width> quant_style_fixed_unknown_width;
+
+///////////////////////////////////////////////////////////////////////////////
+// quant_style_variable_width
+// this sub-expression can match a variable number of characters
+typedef quant_style<quant_variable_width> quant_style_variable_width;
+
+///////////////////////////////////////////////////////////////////////////////
+// quant_style_fixed_width
+// for when the sub-expression has a fixed width that is known at compile time
+template<std::size_t Width>
+struct quant_style_fixed_width
+ : quant_style<quant_fixed_width, mpl::size_t<Width> >
+{
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// quant_style_assertion
+// a zero-width assertion.
+struct quant_style_assertion
+ : quant_style<quant_none, mpl::size_t<0> >
+{
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// quant_style_auto
+// automatically pick the quantification style based on width and purity
+template<typename Width, typename Pure>
+struct quant_style_auto
+ : quant_style<quant_auto, Width, Pure>
+{
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// quant_type
+//
+template<typename Matcher, typename QuantStyle = typename Matcher::quant>
+struct quant_type
+ : QuantStyle
+{
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// when the quant_type is auto, determine the quant type from the width and purity
+template<typename Matcher>
+struct quant_type<Matcher, mpl::int_<quant_auto> >
+ : mpl::if_
+ <
+ mpl::and_
+ <
+ mpl::not_equal_to<typename Matcher::width, unknown_width>
+ , typename Matcher::pure
+ >
+ , mpl::int_<quant_fixed_width>
+ , mpl::int_<quant_variable_width>
+ >::type
+{
+};
+
+}}} // namespace boost::xpressive::detail
+
+#endif
diff --git a/boost/boost/xpressive/detail/core/regex_impl.hpp b/boost/boost/xpressive/detail/core/regex_impl.hpp
new file mode 100644
index 00000000000..4f15a495f61
--- /dev/null
+++ b/boost/boost/xpressive/detail/core/regex_impl.hpp
@@ -0,0 +1,105 @@
+///////////////////////////////////////////////////////////////////////////////
+// regex_impl.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_CORE_REGEX_IMPL_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_CORE_REGEX_IMPL_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <vector>
+#include <boost/noncopyable.hpp>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/utility/tracking_ptr.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+///////////////////////////////////////////////////////////////////////////////
+// finder
+//
+template<typename BidiIter>
+struct finder
+ : noncopyable
+{
+ virtual ~finder() {}
+ virtual bool operator ()(state_type<BidiIter> &state) const = 0;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// regex_impl
+//
+template<typename BidiIter>
+struct regex_impl
+ : enable_reference_tracking<regex_impl<BidiIter> >
+{
+ typedef typename iterator_value<BidiIter>::type char_type;
+
+ regex_impl()
+ : enable_reference_tracking<regex_impl<BidiIter> >()
+ , xpr_()
+ , traits_()
+ , finder_()
+ , mark_count_(0)
+ , hidden_mark_count_(0)
+ {
+ #ifdef BOOST_XPRESSIVE_DEBUG_CYCLE_TEST
+ ++instances;
+ #endif
+ }
+
+ regex_impl(regex_impl<BidiIter> const &that)
+ : enable_reference_tracking<regex_impl<BidiIter> >(that)
+ , xpr_(that.xpr_)
+ , traits_(that.traits_)
+ , finder_(that.finder_)
+ , mark_count_(that.mark_count_)
+ , hidden_mark_count_(that.hidden_mark_count_)
+ {
+ #ifdef BOOST_XPRESSIVE_DEBUG_CYCLE_TEST
+ ++instances;
+ #endif
+ }
+
+ ~regex_impl()
+ {
+ #ifdef BOOST_XPRESSIVE_DEBUG_CYCLE_TEST
+ --instances;
+ #endif
+ }
+
+ void swap(regex_impl<BidiIter> &that)
+ {
+ enable_reference_tracking<regex_impl<BidiIter> >::swap(that);
+ this->xpr_.swap(that.xpr_);
+ this->traits_.swap(that.traits_);
+ this->finder_.swap(that.finder_);
+ std::swap(this->mark_count_, that.mark_count_);
+ std::swap(this->hidden_mark_count_, that.hidden_mark_count_);
+ }
+
+ shared_ptr<matchable<BidiIter> const> xpr_;
+ shared_ptr<void const> traits_;
+ shared_ptr<finder<BidiIter> > finder_;
+ std::size_t mark_count_;
+ std::size_t hidden_mark_count_;
+
+ #ifdef BOOST_XPRESSIVE_DEBUG_CYCLE_TEST
+ static int instances;
+ #endif
+};
+
+#ifdef BOOST_XPRESSIVE_DEBUG_CYCLE_TEST
+template<typename BidiIter>
+int regex_impl<BidiIter>::instances = 0;
+#endif
+
+}}} // namespace boost::xpressive::detail
+
+#endif
diff --git a/boost/boost/xpressive/detail/core/results_cache.hpp b/boost/boost/xpressive/detail/core/results_cache.hpp
new file mode 100644
index 00000000000..85118531db9
--- /dev/null
+++ b/boost/boost/xpressive/detail/core/results_cache.hpp
@@ -0,0 +1,141 @@
+///////////////////////////////////////////////////////////////////////////////
+// results_cache.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_CORE_RESULTS_CACHE_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_CORE_RESULTS_CACHE_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <list>
+#include <boost/assert.hpp>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/core/access.hpp>
+#include <boost/xpressive/match_results.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+///////////////////////////////////////////////////////////////////////////////
+// nested_results
+// BUGBUG by using std::list, it makes construction of of an empty nested_results
+// incur a dynamic allocation. As a result, construction an empty match_results is
+// likewise not free. FIXME.
+#if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3206))
+template<typename BidiIter>
+struct nested_results
+ : std::list<match_results<BidiIter> >
+{
+ friend struct results_cache<BidiIter>;
+ friend struct match_results<BidiIter>;
+};
+#else
+template<typename BidiIter>
+struct nested_results
+ : private std::list<match_results<BidiIter> >
+{
+ friend struct results_cache<BidiIter>;
+ friend struct match_results<BidiIter>;
+ typedef std::list<match_results<BidiIter> > base_type;
+
+ using base_type::iterator;
+ using base_type::const_iterator;
+ #if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB , == 1)
+ // old Dinkumware doesn't expose pointer typedefs
+ typedef base_type::value_type *pointer;
+ typedef base_type::value_type const *const_pointer;
+ #else
+ using base_type::pointer;
+ using base_type::const_pointer;
+ #endif
+ using base_type::reference;
+ using base_type::const_reference;
+ using base_type::size_type;
+ using base_type::begin;
+ using base_type::end;
+ using base_type::size;
+ using base_type::empty;
+ using base_type::front;
+ using base_type::back;
+};
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// results_cache
+//
+// cache storage for reclaimed match_results structs
+template<typename BidiIter>
+struct results_cache
+{
+ typedef core_access<BidiIter> access;
+
+ match_results<BidiIter> &append_new(nested_results<BidiIter> &out)
+ {
+ if(this->cache_.empty())
+ {
+ out.push_back(match_results<BidiIter>());
+ }
+ else
+ {
+ BOOST_ASSERT(access::get_nested_results(this->cache_.back()).empty());
+ out.splice(out.end(), this->cache_, --this->cache_.end());
+ }
+ return out.back();
+ }
+
+ // move the last match_results struct into the cache
+ void reclaim_last(nested_results<BidiIter> &out)
+ {
+ BOOST_ASSERT(!out.empty());
+ // first, reclaim any nested results
+ nested_results<BidiIter> &nested = access::get_nested_results(out.back());
+ if(!nested.empty())
+ {
+ this->reclaim_all(nested);
+ }
+ // then, reclaim the last match_results
+ this->cache_.splice(this->cache_.end(), out, --out.end());
+ }
+
+ // move the last n match_results structs into the cache
+ void reclaim_last_n(nested_results<BidiIter> &out, std::size_t count)
+ {
+ for(; 0 != count; --count)
+ {
+ this->reclaim_last(out);
+ }
+ }
+
+ void reclaim_all(nested_results<BidiIter> &out)
+ {
+ typedef typename nested_results<BidiIter>::iterator iter_type;
+
+ // first, recursively reclaim all the nested results
+ for(iter_type begin = out.begin(); begin != out.end(); ++begin)
+ {
+ nested_results<BidiIter> &nested = access::get_nested_results(*begin);
+
+ if(!nested.empty())
+ {
+ this->reclaim_all(nested);
+ }
+ }
+
+ // next, reclaim the results themselves
+ this->cache_.splice(this->cache_.end(), out);
+ }
+
+private:
+
+ nested_results<BidiIter> cache_;
+};
+
+}}} // namespace boost::xpressive::detail
+
+#endif
diff --git a/boost/boost/xpressive/detail/core/state.hpp b/boost/boost/xpressive/detail/core/state.hpp
new file mode 100644
index 00000000000..9fea0f1d175
--- /dev/null
+++ b/boost/boost/xpressive/detail/core/state.hpp
@@ -0,0 +1,343 @@
+///////////////////////////////////////////////////////////////////////////////
+// state.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_CORE_STATE_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_CORE_STATE_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/shared_ptr.hpp>
+#include <boost/noncopyable.hpp>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/core/access.hpp>
+#include <boost/xpressive/detail/core/action_state.hpp>
+#include <boost/xpressive/detail/core/sub_match_vector.hpp>
+#include <boost/xpressive/detail/utility/sequence_stack.hpp>
+#include <boost/xpressive/detail/core/regex_impl.hpp>
+#include <boost/xpressive/regex_constants.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+///////////////////////////////////////////////////////////////////////////////
+// match_context
+//
+template<typename BidiIter>
+struct match_context
+{
+ match_context()
+ : results_ptr_(0)
+ , prev_context_(0)
+ , next_ptr_(0)
+ , traits_(0)
+ {
+ }
+
+ // pointer to the current match results, passed to actions as a parameter.
+ match_results<BidiIter> *results_ptr_;
+
+ // The previous match context, if this match_context corresponds to a nested regex invocation
+ match_context<BidiIter> *prev_context_;
+
+ // If this is a nested match, the "next" sub-expression to execute after the nested match
+ matchable<BidiIter> const *next_ptr_;
+
+ // A pointer to the current traits object
+ void const *traits_;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// match_flags
+//
+struct match_flags
+{
+ bool match_all_;
+ bool match_prev_avail_;
+ bool match_bol_;
+ bool match_eol_;
+ bool match_not_bow_;
+ bool match_not_eow_;
+ bool match_not_null_;
+ bool match_continuous_;
+ bool match_partial_;
+
+ explicit match_flags(regex_constants::match_flag_type flags)
+ : match_all_(false)
+ , match_prev_avail_(0 != (flags & regex_constants::match_prev_avail))
+ , match_bol_(match_prev_avail_ || 0 == (flags & regex_constants::match_not_bol))
+ , match_eol_(0 == (flags & regex_constants::match_not_eol))
+ , match_not_bow_(!match_prev_avail_ && 0 != (flags & regex_constants::match_not_bow))
+ , match_not_eow_(0 != (flags & regex_constants::match_not_eow))
+ , match_not_null_(0 != (flags & regex_constants::match_not_null))
+ , match_continuous_(0 != (flags & regex_constants::match_continuous))
+ , match_partial_(0 != (flags & regex_constants::match_partial))
+ {
+ }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// state_type
+//
+template<typename BidiIter>
+struct state_type
+ : noncopyable
+{
+ typedef core_access<BidiIter> access;
+ typedef match_context<BidiIter> match_context;
+ typedef results_extras<BidiIter> results_extras;
+ typedef regex_impl<BidiIter> regex_impl;
+ typedef matchable<BidiIter> matchable;
+ typedef match_results<BidiIter> match_results;
+ typedef sub_match_impl<BidiIter> sub_match_impl;
+
+ BidiIter cur_;
+ sub_match_impl *sub_matches_;
+ std::size_t mark_count_;
+ BidiIter begin_;
+ BidiIter end_;
+
+ match_flags flags_;
+ bool found_partial_match_;
+
+ match_context context_;
+ results_extras *extras_;
+ action_state action_state_;
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ state_type
+ (
+ BidiIter begin
+ , BidiIter end
+ , match_results &what
+ , regex_impl const &impl
+ , regex_constants::match_flag_type flags
+ )
+ : cur_(begin)
+ , sub_matches_(0)
+ , mark_count_(0)
+ , begin_(begin)
+ , end_(end)
+ , flags_(flags)
+ , found_partial_match_(false)
+ , context_() // zero-initializes the fields of context_
+ , extras_(&core_access<BidiIter>::get_extras(what))
+ , action_state_(core_access<BidiIter>::get_action_state(what))
+ {
+ // reclaim any cached memory in the match_results struct
+ this->extras_->sub_match_stack_.unwind();
+
+ // initialize the context_ struct
+ this->init_(impl, what);
+
+ // move all the nested match_results structs into the match_results cache
+ this->extras_->results_cache_.reclaim_all(access::get_nested_results(what));
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // reset
+ //void reset(match_results &what, basic_regex const &rex)
+ void reset(match_results &what, regex_impl const &impl)
+ {
+ this->extras_ = &core_access<BidiIter>::get_extras(what);
+ this->context_.prev_context_ = 0;
+ this->found_partial_match_ = false;
+ this->extras_->sub_match_stack_.unwind();
+ this->init_(impl, what);
+ this->extras_->results_cache_.reclaim_all(access::get_nested_results(what));
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // push_context
+ // called to prepare the state object for a regex match
+ match_context push_context(regex_impl const &impl, matchable const &next, match_context &prev)
+ {
+ // save state
+ match_context context = this->context_;
+
+ // create a new nested match_results for this regex
+ nested_results<BidiIter> &nested = access::get_nested_results(*context.results_ptr_);
+ match_results &what = this->extras_->results_cache_.append_new(nested);
+
+ // (re)initialize the match context
+ this->init_(impl, what);
+
+ // create a linked list of match_context structs
+ this->context_.prev_context_ = &prev;
+ this->context_.next_ptr_ = &next;
+
+ // record the start of the zero-th sub-match
+ this->sub_matches_[0].begin_ = this->cur_;
+
+ return context;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // pop_context
+ // called after a nested match failed to restore the context
+ void pop_context(regex_impl const &impl, bool success)
+ {
+ match_context &context = *this->context_.prev_context_;
+ if(!success)
+ {
+ match_results &what = *context.results_ptr_;
+ this->uninit_(impl, what);
+
+ // send the match_results struct back to the cache
+ nested_results<BidiIter> &nested = access::get_nested_results(what);
+ this->extras_->results_cache_.reclaim_last(nested);
+ }
+
+ // restore the state
+ this->context_ = context;
+ match_results &results = *this->context_.results_ptr_;
+ this->sub_matches_ = access::get_sub_matches(access::get_sub_match_vector(results));
+ this->mark_count_ = results.size();
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // swap_context
+ void swap_context(match_context &context)
+ {
+ std::swap(this->context_, context);
+ match_results &results = *this->context_.results_ptr_;
+ this->sub_matches_ = access::get_sub_matches(access::get_sub_match_vector(results));
+ this->mark_count_ = results.size();
+ }
+
+ // beginning of buffer
+ bool bos() const
+ {
+ return this->cur_ == this->begin_;
+ }
+
+ // end of buffer
+ bool eos()
+ {
+ return this->cur_ == this->end_ && this->found_partial_match();
+ }
+
+ // fetch the n-th sub_match
+ sub_match_impl &sub_match(int n)
+ {
+ return this->sub_matches_[n];
+ }
+
+ // called when a partial match has succeeded
+ void set_partial_match()
+ {
+ sub_match_impl &sub0 = this->sub_match(0);
+ sub0.first = sub0.begin_;
+ sub0.second = this->end_;
+ sub0.matched = false;
+ }
+
+ template<typename Traits>
+ Traits const &get_traits() const
+ {
+ return *static_cast<Traits const *>(this->context_.traits_);
+ }
+
+private:
+
+ void init_(regex_impl const &impl, match_results &what)
+ {
+ regex_id_type const id = impl.xpr_.get();
+ std::size_t const total_mark_count = impl.mark_count_ + impl.hidden_mark_count_ + 1;
+
+ // initialize the context and the sub_match vector
+ this->context_.results_ptr_ = &what;
+ this->context_.traits_ = impl.traits_.get();
+ this->mark_count_ = impl.mark_count_ + 1;
+ this->sub_matches_ = this->extras_->sub_match_stack_.push_sequence(total_mark_count);
+ this->sub_matches_ += impl.hidden_mark_count_;
+
+ // initialize the match_results struct
+ access::init_match_results(what, id, this->sub_matches_, this->mark_count_);
+ }
+
+ void uninit_(regex_impl const &impl, match_results &)
+ {
+ extras_->sub_match_stack_.unwind_to(this->sub_matches_ - impl.hidden_mark_count_);
+ }
+
+ bool found_partial_match()
+ {
+ this->found_partial_match_ = true;
+ return true;
+ }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// memento
+//
+template<typename BidiIter>
+struct memento
+{
+ sub_match_impl<BidiIter> *old_sub_matches_;
+ std::size_t nested_results_count_;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// save_sub_matches
+//
+template<typename BidiIter>
+inline memento<BidiIter> save_sub_matches(state_type<BidiIter> &state)
+{
+ memento<BidiIter> mem =
+ {
+ state.extras_->sub_match_stack_.push_sequence(state.mark_count_, no_fill)
+ , state.context_.results_ptr_->nested_results().size()
+ };
+ std::copy(state.sub_matches_, state.sub_matches_ + state.mark_count_, mem.old_sub_matches_);
+ return mem;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// restore_sub_matches
+//
+template<typename BidiIter>
+inline void restore_sub_matches(memento<BidiIter> const &mem, state_type<BidiIter> &state)
+{
+ typedef core_access<BidiIter> access;
+ nested_results<BidiIter> &nested = access::get_nested_results(*state.context_.results_ptr_);
+ std::size_t count = state.context_.results_ptr_->nested_results().size() - mem.nested_results_count_;
+ state.extras_->results_cache_.reclaim_last_n(nested, count);
+ std::copy(mem.old_sub_matches_, mem.old_sub_matches_ + state.mark_count_, state.sub_matches_);
+ state.extras_->sub_match_stack_.unwind_to(mem.old_sub_matches_);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// reclaim_sub_matches
+//
+template<typename BidiIter>
+inline void reclaim_sub_matches(memento<BidiIter> const &mem, state_type<BidiIter> &state)
+{
+ std::size_t count = state.context_.results_ptr_->nested_results().size() - mem.nested_results_count_;
+ if(count == 0)
+ {
+ state.extras_->sub_match_stack_.unwind_to(mem.old_sub_matches_);
+ }
+ // else we have we must orphan this block of backrefs because we are using the stack
+ // space above it.
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// traits_cast
+//
+template<typename Traits, typename BidiIter>
+inline Traits const &traits_cast(state_type<BidiIter> const &state)
+{
+ return state.template get_traits<Traits>();
+}
+
+}}} // namespace boost::xpressive::detail
+
+#endif
diff --git a/boost/boost/xpressive/detail/core/sub_match_impl.hpp b/boost/boost/xpressive/detail/core/sub_match_impl.hpp
new file mode 100644
index 00000000000..aa6fac7e782
--- /dev/null
+++ b/boost/boost/xpressive/detail/core/sub_match_impl.hpp
@@ -0,0 +1,43 @@
+///////////////////////////////////////////////////////////////////////////////
+// sub_match_impl.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_CORE_SUB_MATCH_IMPL_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_CORE_SUB_MATCH_IMPL_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/xpressive/sub_match.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+///////////////////////////////////////////////////////////////////////////////
+// sub_match_impl
+//
+template<typename BidiIter>
+struct sub_match_impl
+ : sub_match<BidiIter>
+{
+ unsigned int repeat_count_;
+ BidiIter begin_;
+ bool zero_width_;
+
+ sub_match_impl()
+ : sub_match<BidiIter>()
+ , repeat_count_(0)
+ , begin_()
+ , zero_width_(false)
+ {
+ }
+};
+
+}}} // namespace boost::xpressive::detail
+
+#endif
diff --git a/boost/boost/xpressive/detail/core/sub_match_vector.hpp b/boost/boost/xpressive/detail/core/sub_match_vector.hpp
new file mode 100644
index 00000000000..a4d524ee0ce
--- /dev/null
+++ b/boost/boost/xpressive/detail/core/sub_match_vector.hpp
@@ -0,0 +1,171 @@
+///////////////////////////////////////////////////////////////////////////////
+// sub_match_vector.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_CORE_SUB_MATCH_VECTOR_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_CORE_SUB_MATCH_VECTOR_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/noncopyable.hpp>
+#include <boost/iterator_adaptors.hpp>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/core/sub_match_impl.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+#if BOOST_ITERATOR_ADAPTORS_VERSION >= 0x0200
+
+//////////////////////////////////////////////////////////////////////////
+// sub_match_iterator
+//
+template<typename Value, typename MainIter>
+struct sub_match_iterator
+ : iterator_adaptor
+ <
+ sub_match_iterator<Value, MainIter>
+ , MainIter
+ , Value
+ , std::random_access_iterator_tag
+ >
+{
+ typedef iterator_adaptor
+ <
+ sub_match_iterator<Value, MainIter>
+ , MainIter
+ , Value
+ , std::random_access_iterator_tag
+ > base_t;
+
+ sub_match_iterator(MainIter baseiter)
+ : base_t(baseiter)
+ {
+ }
+};
+
+#endif
+
+//////////////////////////////////////////////////////////////////////////
+// sub_match_vector
+//
+template<typename BidiIter>
+struct sub_match_vector
+ : private noncopyable
+{
+private:
+ struct dummy { int i_; };
+ typedef int dummy::*bool_type;
+
+public:
+ typedef sub_match<BidiIter> value_type;
+ typedef std::size_t size_type;
+ typedef value_type const &const_reference;
+ typedef const_reference reference;
+ typedef typename iterator_difference<BidiIter>::type difference_type;
+ typedef typename iterator_value<BidiIter>::type char_type;
+ typedef std::basic_string<char_type> string_type;
+
+#if BOOST_ITERATOR_ADAPTORS_VERSION >= 0x0200
+
+ typedef sub_match_iterator
+ <
+ value_type const
+ , sub_match_impl<BidiIter> const *
+ > const_iterator;
+
+#else
+
+ typedef iterator_adaptor
+ <
+ sub_match_impl<BidiIter> const *
+ , default_iterator_policies
+ , value_type
+ , value_type const &
+ , value_type const *
+ > const_iterator;
+
+#endif // BOOST_ITERATOR_ADAPTORS_VERSION < 0x0200
+
+ typedef const_iterator iterator;
+
+ sub_match_vector()
+ : size_(0)
+ , sub_matches_(0)
+ {
+ }
+
+ const_reference operator [](size_type index) const
+ {
+ static value_type const s_null;
+ return (index >= this->size_)
+ ? s_null
+ : *static_cast<value_type const *>(&this->sub_matches_[ index ]);
+ }
+
+ size_type size() const
+ {
+ return this->size_;
+ }
+
+ bool empty() const
+ {
+ return 0 == this->size();
+ }
+
+ const_iterator begin() const
+ {
+ return const_iterator(this->sub_matches_);
+ }
+
+ const_iterator end() const
+ {
+ return const_iterator(this->sub_matches_ + this->size_);
+ }
+
+ operator bool_type() const
+ {
+ return (!this->empty() && (*this)[0].matched) ? &dummy::i_ : 0;
+ }
+
+ bool operator !() const
+ {
+ return this->empty() || !(*this)[0].matched;
+ }
+
+ void swap(sub_match_vector<BidiIter> &that)
+ {
+ std::swap(this->size_, that.size_);
+ std::swap(this->sub_matches_, that.sub_matches_);
+ }
+
+private:
+ friend struct detail::core_access<BidiIter>;
+
+ void init_(sub_match_impl<BidiIter> *sub_matches, size_type size)
+ {
+ this->size_ = size;
+ this->sub_matches_ = sub_matches;
+ }
+
+ void init_(sub_match_impl<BidiIter> *sub_matches, size_type size, sub_match_vector<BidiIter> const &that)
+ {
+ BOOST_ASSERT(size == that.size_);
+ this->size_ = size;
+ this->sub_matches_ = sub_matches;
+ std::copy(that.sub_matches_, that.sub_matches_ + that.size_, this->sub_matches_);
+ }
+
+ size_type size_;
+ sub_match_impl<BidiIter> *sub_matches_;
+};
+
+}}} // namespace boost::xpressive::detail
+
+#endif
diff --git a/boost/boost/xpressive/detail/detail_fwd.hpp b/boost/boost/xpressive/detail/detail_fwd.hpp
new file mode 100644
index 00000000000..6c97b5db1a8
--- /dev/null
+++ b/boost/boost/xpressive/detail/detail_fwd.hpp
@@ -0,0 +1,337 @@
+///////////////////////////////////////////////////////////////////////////////
+// detail_fwd.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_DETAIL_FWD_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_DETAIL_FWD_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <climits> // for INT_MAX
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/size_t.hpp>
+#include <boost/xpressive/xpressive_fwd.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+ typedef unsigned int uint_t;
+
+ template<uint_t Min, uint_t Max>
+ struct generic_quant_tag;
+
+ struct modifier_tag;
+
+ typedef mpl::size_t<INT_MAX / 2 - 1> unknown_width;
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // placeholders
+ //
+ template<typename Char, bool Not = false>
+ struct literal_placeholder;
+
+ template<typename Char>
+ struct string_placeholder;
+
+ struct mark_placeholder;
+
+ template<typename BidiIter, bool ByRef>
+ struct regex_placeholder;
+
+ struct posix_charset_placeholder;
+
+ template<typename Cond>
+ struct assert_word_placeholder;
+
+ template<typename Char>
+ struct range_placeholder;
+
+ struct assert_bol_placeholder;
+
+ struct assert_eol_placeholder;
+
+ struct logical_newline_placeholder;
+
+ struct self_placeholder;
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // matchers
+ //
+ struct end_matcher;
+
+ struct assert_bos_matcher;
+
+ struct assert_eos_matcher;
+
+ template<typename Traits>
+ struct assert_bol_matcher;
+
+ template<typename Traits>
+ struct assert_eol_matcher;
+
+ template<typename Cond, typename Traits>
+ struct assert_word_matcher;
+
+ struct true_matcher;
+
+ template<typename Alternates, typename Traits>
+ struct alternate_matcher;
+
+ struct alternate_end_matcher;
+
+ template<typename Traits>
+ struct posix_charset_matcher;
+
+ template<typename BidiIter>
+ struct alternates_factory;
+
+ template<typename BidiIter>
+ struct sequence;
+
+ template<typename Traits, bool ICase>
+ struct mark_matcher;
+
+ struct mark_begin_matcher;
+
+ struct mark_end_matcher;
+
+ template<typename BidiIter>
+ struct regex_matcher;
+
+ template<typename BidiIter>
+ struct regex_byref_matcher;
+
+ template<typename Traits>
+ struct compound_charset;
+
+ template<typename Traits, bool ICase, typename CharSet = compound_charset<Traits> >
+ struct charset_matcher;
+
+ template<typename Traits, bool ICase>
+ struct range_matcher;
+
+ template<typename Traits, int Size>
+ struct set_matcher;
+
+ template<typename Xpr, bool Greedy>
+ struct simple_repeat_matcher;
+
+ struct repeat_begin_matcher;
+
+ template<bool Greedy>
+ struct repeat_end_matcher;
+
+ template<typename Traits, bool ICase, bool Not>
+ struct literal_matcher;
+
+ template<typename Traits, bool ICase>
+ struct string_matcher;
+
+ template<typename Action>
+ struct action_matcher;
+
+ template<typename Xpr>
+ struct is_modifiable;
+
+ template<typename Alternates>
+ struct alternates_list;
+
+ template<typename Modifier>
+ struct modifier_op;
+
+ template<typename Left, typename Right>
+ struct modifier_sequencer;
+
+ struct icase_modifier;
+
+ template<typename BidiIter, typename ICase, typename Traits>
+ struct xpression_visitor;
+
+ template<typename BidiIter>
+ struct regex_impl;
+
+ template<typename BidiIter>
+ struct regex_matcher;
+
+ struct epsilon_matcher;
+
+ struct epsilon_mark_matcher;
+
+ template<typename BidiIter>
+ struct nested_results;
+
+ template<typename BidiIter>
+ struct regex_id_filter_predicate;
+
+ template<typename Xpr>
+ struct keeper_matcher;
+
+ template<typename Xpr>
+ struct lookahead_matcher;
+
+ template<typename Xpr>
+ struct lookbehind_matcher;
+
+ template<typename Cond>
+ struct assert_word_placeholder;
+
+ template<bool IsBoundary>
+ struct word_boundary;
+
+ template<typename BidiIter, typename Matcher>
+ sequence<BidiIter> make_dynamic_xpression(Matcher const &matcher);
+
+ template<typename Char>
+ struct xpression_linker;
+
+ template<typename Char>
+ struct xpression_peeker;
+
+ typedef proto::unary_op<mark_placeholder, proto::noop_tag> mark_tag;
+
+ struct any_matcher;
+
+ template<typename Traits>
+ struct logical_newline_matcher;
+
+ typedef proto::unary_op<logical_newline_placeholder, proto::noop_tag> logical_newline_xpression;
+
+ struct set_initializer;
+
+ typedef proto::unary_op<set_initializer, proto::noop_tag> set_initializer_type;
+
+ struct seq_tag;
+
+ template<bool Positive>
+ struct lookahead_tag;
+
+ template<bool Positive>
+ struct lookbehind_tag;
+
+ struct keeper_tag;
+
+ template<typename Locale>
+ struct locale_modifier;
+
+ template<typename Matcher>
+ struct matcher_wrapper;
+
+ template<typename Locale, typename BidiIter>
+ struct regex_traits_type;
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Misc.
+ struct no_next;
+
+ template<typename BidiIter>
+ struct core_access;
+
+ template<typename BidiIter>
+ struct state_type;
+
+ template<typename BidiIter>
+ struct matchable;
+
+ template<typename Matcher, typename BidiIter>
+ struct dynamic_xpression;
+
+ template<typename Matcher, typename Next>
+ struct static_xpression;
+
+ typedef static_xpression<end_matcher, no_next> end_xpression;
+
+ typedef static_xpression<alternate_end_matcher, no_next> alternate_end_xpression;
+
+ typedef static_xpression<true_matcher, no_next> true_xpression;
+
+ template<typename Matcher, typename Next = end_xpression>
+ struct static_xpression;
+
+ template<typename Top, typename Next>
+ struct stacked_xpression;
+
+ template<typename Xpr>
+ struct is_static_xpression;
+
+ template<typename BidiIter>
+ struct sub_match_impl;
+
+ template<typename BidiIter>
+ struct results_cache;
+
+ template<typename T>
+ struct sequence_stack;
+
+ template<typename BidiIter>
+ struct results_extras;
+
+ template<typename BidiIter>
+ struct match_context;
+
+ template<typename BidiIter>
+ struct sub_match_vector;
+
+ struct action_state;
+
+ template<typename Xpr, bool IsOp = proto::is_op<Xpr>::value>
+ struct as_xpr_type;
+
+ template<typename Traits, typename BidiIter>
+ Traits const &traits_cast(state_type<BidiIter> const &state);
+
+ template<typename Char>
+ struct basic_chset;
+
+ template<typename BidiIter>
+ struct memento;
+
+ template<typename Char, typename Traits>
+ void set_char(compound_charset<Traits> &chset, Char ch, Traits const &traits, bool icase);
+
+ template<typename Char, typename Traits>
+ void set_range(compound_charset<Traits> &chset, Char from, Char to, Traits const &traits, bool icase);
+
+ template<typename Traits>
+ void set_class(compound_charset<Traits> &chset, typename Traits::char_class_type char_class, bool no, Traits const &traits);
+
+ template<typename Char, typename Traits>
+ void set_char(basic_chset<Char> &chset, Char ch, Traits const &traits, bool icase);
+
+ template<typename Char, typename Traits>
+ void set_range(basic_chset<Char> &chset, Char from, Char to, Traits const &traits, bool icase);
+
+ template<typename Char, typename Traits>
+ void set_class(basic_chset<Char> &chset, typename Traits::char_class_type char_class, bool no, Traits const &traits);
+
+ template<typename Matcher>
+ static_xpression<Matcher> const
+ make_static_xpression(Matcher const &matcher);
+
+ template<typename Matcher, typename Next>
+ static_xpression<Matcher, Next> const
+ make_static_xpression(Matcher const &matcher, Next const &next);
+
+ int get_mark_number(mark_tag const &);
+
+ template<typename Xpr, typename BidiIter>
+ void static_compile(Xpr const &xpr, regex_impl<BidiIter> &impl);
+
+}}} // namespace boost::xpressive::detail
+
+/// INTERNAL ONLY
+namespace boost { namespace xpressive
+{
+
+ /// INTERNAL ONLY
+ template<typename Traits, std::size_t N>
+ typename Traits::char_class_type
+ lookup_classname(Traits const &traits, char const (&cname)[N], bool icase = false);
+
+}} // namespace boost::xpressive
+
+#endif
diff --git a/boost/boost/xpressive/detail/dynamic/dynamic.hpp b/boost/boost/xpressive/detail/dynamic/dynamic.hpp
new file mode 100644
index 00000000000..570673c2a1c
--- /dev/null
+++ b/boost/boost/xpressive/detail/dynamic/dynamic.hpp
@@ -0,0 +1,438 @@
+///////////////////////////////////////////////////////////////////////////////
+// dynamic.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_DYNAMIC_DYNAMIC_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_DYNAMIC_DYNAMIC_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <list>
+#include <utility>
+#include <algorithm>
+#include <boost/assert.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/core/quant_style.hpp>
+#include <boost/xpressive/detail/dynamic/matchable.hpp>
+#include <boost/xpressive/detail/core/icase.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+///////////////////////////////////////////////////////////////////////////////
+// invalid_xpression
+//
+template<typename BidiIter>
+struct invalid_xpression
+ : matchable<BidiIter>
+{
+ invalid_xpression()
+ : matchable<BidiIter>()
+ {
+ }
+
+ bool match(state_type<BidiIter> &) const
+ {
+ BOOST_ASSERT(false);
+ return false;
+ }
+
+ std::size_t get_width(state_type<BidiIter> *) const
+ {
+ return 0;
+ }
+
+ static void noop(matchable<BidiIter> const *)
+ {
+ }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// get_invalid_xpression
+//
+template<typename BidiIter>
+inline shared_ptr<matchable<BidiIter> const> const &get_invalid_xpression()
+{
+ static invalid_xpression<BidiIter> const invalid_xpr;
+
+ static shared_ptr<matchable<BidiIter> const> const invalid_ptr
+ (
+ static_cast<matchable<BidiIter> const *>(&invalid_xpr)
+ , &invalid_xpression<BidiIter>::noop
+ );
+
+ return invalid_ptr;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// dynamic_xpression
+//
+template<typename Matcher, typename BidiIter>
+struct dynamic_xpression
+ : Matcher
+ , matchable<BidiIter>
+{
+ typedef typename iterator_value<BidiIter>::type char_type;
+
+ shared_ptr<matchable<BidiIter> const> next_;
+
+ dynamic_xpression(Matcher const &matcher = Matcher())
+ : Matcher(matcher)
+ , next_(get_invalid_xpression<BidiIter>())
+ {
+ }
+
+ bool match(state_type<BidiIter> &state) const
+ {
+ return this->Matcher::match(state, *this->next_);
+ }
+
+ std::size_t get_width(state_type<BidiIter> *state) const
+ {
+ std::size_t this_width = this->Matcher::get_width(state);
+ if(this_width == unknown_width())
+ return unknown_width();
+ std::size_t that_width = this->next_->get_width(state);
+ if(that_width == unknown_width())
+ return unknown_width();
+ return this_width + that_width;
+ }
+
+ void link(xpression_linker<char_type> &linker) const
+ {
+ linker.link(*static_cast<Matcher const *>(this), this->next_.get());
+ this->next_->link(linker);
+ }
+
+ void peek(xpression_peeker<char_type> &peeker) const
+ {
+ this->peek_next_(peeker.peek(*static_cast<Matcher const *>(this)), peeker);
+ }
+
+ sequence<BidiIter> quantify
+ (
+ quant_spec const &spec
+ , std::size_t &hidden_mark_count
+ , sequence<BidiIter> seq
+ , alternates_factory<BidiIter> const &factory
+ ) const
+ {
+ return this->quantify_(spec, hidden_mark_count, seq, quant_type<Matcher>(), factory, this);
+ }
+
+ bool is_quantifiable() const
+ {
+ return quant_type<Matcher>::value != (int)quant_none || this->next_ != get_invalid_xpression<BidiIter>();
+ }
+
+private:
+
+ void peek_next_(mpl::true_, xpression_peeker<char_type> &peeker) const
+ {
+ this->next_->peek(peeker);
+ }
+
+ void peek_next_(mpl::false_, xpression_peeker<char_type> &) const
+ {
+ // no-op
+ }
+
+ sequence<BidiIter> quantify_
+ (
+ quant_spec const &
+ , std::size_t &
+ , sequence<BidiIter>
+ , mpl::int_<quant_none>
+ , alternates_factory<BidiIter> const &
+ , void const *
+ ) const;
+
+ sequence<BidiIter> quantify_
+ (
+ quant_spec const &
+ , std::size_t &
+ , sequence<BidiIter>
+ , mpl::int_<quant_fixed_width>
+ , alternates_factory<BidiIter> const &
+ , void const *
+ ) const;
+
+ sequence<BidiIter> quantify_
+ (
+ quant_spec const &
+ , std::size_t &
+ , sequence<BidiIter>
+ , mpl::int_<quant_variable_width>
+ , alternates_factory<BidiIter> const &
+ , void const *
+ ) const;
+
+ sequence<BidiIter> quantify_
+ (
+ quant_spec const &
+ , std::size_t &
+ , sequence<BidiIter>
+ , mpl::int_<quant_fixed_width>
+ , alternates_factory<BidiIter> const &
+ , mark_begin_matcher const *
+ ) const;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// make_dynamic_xpression
+//
+template<typename BidiIter, typename Matcher>
+inline sequence<BidiIter> make_dynamic_xpression(Matcher const &matcher)
+{
+ typedef dynamic_xpression<Matcher, BidiIter> xpression_type;
+ std::auto_ptr<xpression_type> xpr(new xpression_type(matcher));
+
+ sequence<BidiIter> seq;
+ seq.second = &xpr->next_;
+ seq.first = xpr;
+
+ return seq;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// alternates_factory
+//
+template<typename BidiIter>
+struct alternates_factory
+{
+ typedef std::vector<shared_ptr<matchable<BidiIter> const> > alternates_vector;
+
+ virtual ~alternates_factory() {}
+
+ virtual std::pair<sequence<BidiIter>, alternates_vector *>
+ operator ()() const = 0;
+};
+
+template<typename BidiIter, typename Traits>
+struct alternates_factory_impl
+ : alternates_factory<BidiIter>
+{
+ typedef typename alternates_factory<BidiIter>::alternates_vector alternates_vector;
+
+ std::pair<sequence<BidiIter>, alternates_vector *>
+ operator ()() const
+ {
+ typedef alternate_matcher<alternates_vector, Traits> alternate_matcher;
+ typedef dynamic_xpression<alternate_matcher, BidiIter> alternate_xpression;
+ shared_ptr<alternate_xpression> alt_xpr(new alternate_xpression);
+ sequence<BidiIter> seq(alt_xpr, &alt_xpr->next_);
+ return std::make_pair(seq, &alt_xpr->alternates_);
+ }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// alternates_to_matchable
+//
+template<typename BidiIter>
+inline sequence<BidiIter> alternates_to_matchable
+(
+ std::list<sequence<BidiIter> > const &alternates
+ , alternates_factory<BidiIter> const &factory
+)
+{
+ BOOST_ASSERT(0 != alternates.size());
+
+ // If there is only 1 alternate, just return it.
+ if(1 == alternates.size())
+ {
+ return alternates.front();
+ }
+
+ typedef std::vector<shared_ptr<matchable<BidiIter> const> > alternates_vector;
+ std::pair<sequence<BidiIter>, alternates_vector *> result = factory();
+
+ // through the wonders of reference counting, all alternates can share an end_alternate
+ typedef dynamic_xpression<alternate_end_matcher, BidiIter> alternate_end_xpression;
+ shared_ptr<alternate_end_xpression> end_alt_xpr(new alternate_end_xpression);
+
+ // terminate each alternate with an alternate_end_matcher
+ result.second->reserve(alternates.size());
+ typedef std::list<sequence<BidiIter> > alternates_list;
+ typename alternates_list::const_iterator begin = alternates.begin(), end = alternates.end();
+ for(; begin != end; ++begin)
+ {
+ if(!begin->is_empty())
+ {
+ result.second->push_back(begin->first);
+ *begin->second = end_alt_xpr;
+ }
+ else
+ {
+ result.second->push_back(end_alt_xpr);
+ }
+ }
+
+ return result.first;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// matcher_wrapper
+//
+template<typename Matcher>
+struct matcher_wrapper
+ : Matcher
+{
+ matcher_wrapper(Matcher const &matcher = Matcher())
+ : Matcher(matcher)
+ {
+ }
+
+ template<typename BidiIter>
+ bool match(state_type<BidiIter> &state) const
+ {
+ return this->Matcher::match(state, matcher_wrapper<true_matcher>());
+ }
+
+ template<typename Char>
+ void link(xpression_linker<Char> &linker) const
+ {
+ linker.link(*static_cast<Matcher const *>(this), 0);
+ }
+
+ template<typename Char>
+ void peek(xpression_peeker<Char> &peeker) const
+ {
+ peeker.peek(*static_cast<Matcher const *>(this));
+ }
+};
+
+//////////////////////////////////////////////////////////////////////////
+// dynamic_xpression::quantify_
+//
+// unquantifiable
+template<typename Matcher, typename BidiIter>
+inline sequence<BidiIter> dynamic_xpression<Matcher, BidiIter>::quantify_
+(
+ quant_spec const &spec
+ , std::size_t &hidden_mark_count
+ , sequence<BidiIter> seq
+ , mpl::int_<quant_none>
+ , alternates_factory<BidiIter> const &factory
+ , void const *
+) const
+{
+ BOOST_ASSERT(this->next_ != get_invalid_xpression<BidiIter>());
+ return this->quantify_(spec, hidden_mark_count, seq, mpl::int_<quant_variable_width>(), factory, this);
+}
+
+// fixed-width matchers
+template<typename Matcher, typename BidiIter>
+inline sequence<BidiIter> dynamic_xpression<Matcher, BidiIter>::quantify_
+(
+ quant_spec const &spec
+ , std::size_t &hidden_mark_count
+ , sequence<BidiIter> seq
+ , mpl::int_<quant_fixed_width>
+ , alternates_factory<BidiIter> const &factory
+ , void const *
+) const
+{
+ if(this->next_ != get_invalid_xpression<BidiIter>())
+ {
+ return this->quantify_(spec, hidden_mark_count, seq, mpl::int_<quant_variable_width>(), factory, this);
+ }
+
+ typedef matcher_wrapper<Matcher> xpr_type;
+
+ if(spec.greedy_)
+ {
+ simple_repeat_matcher<xpr_type, true> quant(*this, spec.min_, spec.max_);
+ return make_dynamic_xpression<BidiIter>(quant);
+ }
+ else
+ {
+ simple_repeat_matcher<xpr_type, false> quant(*this, spec.min_, spec.max_);
+ return make_dynamic_xpression<BidiIter>(quant);
+ }
+}
+
+// variable-width, no mark
+template<typename Matcher, typename BidiIter>
+inline sequence<BidiIter> dynamic_xpression<Matcher, BidiIter>::quantify_
+(
+ quant_spec const &spec
+ , std::size_t &hidden_mark_count
+ , sequence<BidiIter> seq
+ , mpl::int_<quant_variable_width>
+ , alternates_factory<BidiIter> const &factory
+ , void const *
+) const
+{
+ // create a hidden mark so this expression can be quantified
+ int mark_nbr = -static_cast<int>(++hidden_mark_count);
+ mark_begin_matcher mark_begin(mark_nbr);
+ mark_end_matcher mark_end(mark_nbr);
+ sequence<BidiIter> new_seq = make_dynamic_xpression<BidiIter>(mark_begin);
+ new_seq += seq;
+ new_seq += make_dynamic_xpression<BidiIter>(mark_end);
+ return new_seq.first->quantify(spec, hidden_mark_count, new_seq, factory);
+}
+
+// variable-width with mark
+template<typename Matcher, typename BidiIter>
+inline sequence<BidiIter> dynamic_xpression<Matcher, BidiIter>::quantify_
+(
+ quant_spec const &spec
+ , std::size_t &
+ , sequence<BidiIter> seq
+ , mpl::int_<quant_fixed_width>
+ , alternates_factory<BidiIter> const &factory
+ , mark_begin_matcher const *
+) const
+{
+ BOOST_ASSERT(spec.max_); // we should never get here if max is 0
+ int mark_number = this->mark_number_;
+
+ // only bother creating a quantifier if max is greater than one
+ if(1 < spec.max_)
+ {
+ unsigned int min = spec.min_ ? spec.min_ : 1U;
+ detail::sequence<BidiIter> seq_quant;
+ // TODO: statically bind the repeat_begin_matcher to the mark_begin for better perf
+ seq_quant += make_dynamic_xpression<BidiIter>(repeat_begin_matcher(mark_number));
+ // TODO: statically bind the mark_end to the quantifier_end for better perf
+ if(spec.greedy_)
+ {
+ repeat_end_matcher<true> end_quant(mark_number, min, spec.max_);
+ seq += make_dynamic_xpression<BidiIter>(end_quant);
+ }
+ else
+ {
+ repeat_end_matcher<false> end_quant(mark_number, min, spec.max_);
+ seq += make_dynamic_xpression<BidiIter>(end_quant);
+ }
+ seq_quant += seq;
+ seq = seq_quant;
+ }
+
+ // if min is 0, the quant must be made alternate with an empty matcher.
+ if(0 == spec.min_)
+ {
+ epsilon_mark_matcher mark(mark_number);
+ std::list<sequence<BidiIter> > alts;
+ alts.push_back(make_dynamic_xpression<BidiIter>(mark));
+ alts.push_back(seq);
+ if(spec.greedy_)
+ alts.reverse();
+ seq = alternates_to_matchable(alts, factory);
+ }
+
+ return seq;
+}
+
+}}} // namespace boost::xpressive::detail
+
+#endif
diff --git a/boost/boost/xpressive/detail/dynamic/matchable.hpp b/boost/boost/xpressive/detail/dynamic/matchable.hpp
new file mode 100644
index 00000000000..62a5f81ca25
--- /dev/null
+++ b/boost/boost/xpressive/detail/dynamic/matchable.hpp
@@ -0,0 +1,155 @@
+///////////////////////////////////////////////////////////////////////////////
+// matchable.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_DYNAMIC_MATCHABLE_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_DYNAMIC_MATCHABLE_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <utility>
+#include <boost/assert.hpp>
+#include <boost/shared_ptr.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/xpressive/detail/core/state.hpp>
+#include <boost/xpressive/detail/core/quant_style.hpp>
+#include <boost/xpressive/regex_error.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+template<typename BidiIter>
+struct matchable;
+
+///////////////////////////////////////////////////////////////////////////////
+// sequence
+//
+template<typename BidiIter>
+struct sequence
+ : std::pair
+ <
+ shared_ptr<matchable<BidiIter> const>
+ , shared_ptr<matchable<BidiIter> const> *
+ >
+{
+ typedef shared_ptr<matchable<BidiIter> const> matchable_ptr_t;
+ typedef std::pair<matchable_ptr_t, matchable_ptr_t *> base_t;
+
+ explicit sequence(matchable_ptr_t head = matchable_ptr_t(), matchable_ptr_t *tail_ptr = 0)
+ : base_t(head, tail_ptr)
+ {
+ }
+
+ bool is_empty() const
+ {
+ return !this->first;
+ }
+
+ sequence &operator +=(sequence that)
+ {
+ if(is_empty())
+ {
+ *this = that;
+ }
+ else if(!that.is_empty())
+ {
+ *this->second = that.first;
+ this->second = that.second;
+ }
+ return *this;
+ }
+};
+
+//////////////////////////////////////////////////////////////////////////
+// quant_spec
+//
+struct quant_spec
+{
+ unsigned int min_;
+ unsigned int max_;
+ bool greedy_;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// matchable
+//
+template<typename BidiIter>
+struct matchable
+ : xpression_base
+{
+ typedef typename iterator_value<BidiIter>::type char_type;
+
+ virtual ~matchable() {}
+
+ virtual bool match(state_type<BidiIter> &state) const = 0;
+
+ virtual std::size_t get_width(state_type<BidiIter> *state) const = 0;
+
+ virtual void link(xpression_linker<char_type> &) const {}
+
+ virtual void peek(xpression_peeker<char_type> &peeker) const
+ {
+ peeker.fail();
+ }
+
+ virtual sequence<BidiIter> quantify
+ (
+ quant_spec const & //spec
+ , std::size_t & //hidden_mark_count
+ , sequence<BidiIter> //seq
+ , alternates_factory<BidiIter> const &//factory
+ ) const
+ {
+ throw regex_error(regex_constants::error_badrepeat, "expression cannot be quantified");
+ }
+
+ virtual bool is_quantifiable() const
+ {
+ BOOST_ASSERT(false);
+ throw regex_error(regex_constants::error_internal, "internal error, sorry!");
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////
+ // The following 4 functions (push_match, top_match, pop_match and skip_match) are
+ // used to implement looping and branching across the matchers. Call push_match to record
+ // a position. Then, another matcher further down the xpression chain has the
+ // option to call either top_match, pop_match or skip_match. top_match and pop_match will
+ // jump back to the place recorded by push_match, whereas skip_match will skip the jump and
+ // pass execution down the xpression chain. top_match will leave the xpression on top of the
+ // stack, whereas pop_match will remove it. Each function comes in 2 flavors: one for
+ // statically bound xpressions and one for dynamically bound xpressions.
+ //
+
+ template<typename Top>
+ bool push_match(state_type<BidiIter> &state) const
+ {
+ BOOST_MPL_ASSERT((is_same<Top, matchable<BidiIter> >));
+ return this->match(state);
+ }
+
+ static bool top_match(state_type<BidiIter> &state, xpression_base const *top)
+ {
+ return static_cast<matchable<BidiIter> const *>(top)->match(state);
+ }
+
+ static bool pop_match(state_type<BidiIter> &state, xpression_base const *top)
+ {
+ return static_cast<matchable<BidiIter> const *>(top)->match(state);
+ }
+
+ bool skip_match(state_type<BidiIter> &state) const
+ {
+ return this->match(state);
+ }
+};
+
+}}} // namespace boost::xpressive::detail
+
+#endif
diff --git a/boost/boost/xpressive/detail/dynamic/parse_charset.hpp b/boost/boost/xpressive/detail/dynamic/parse_charset.hpp
new file mode 100644
index 00000000000..e67a2aef0e9
--- /dev/null
+++ b/boost/boost/xpressive/detail/dynamic/parse_charset.hpp
@@ -0,0 +1,360 @@
+///////////////////////////////////////////////////////////////////////////////
+// parse_charset.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_DYNAMIC_PARSE_CHARSET_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_DYNAMIC_PARSE_CHARSET_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/mpl/bool.hpp>
+#include <boost/integer.hpp>
+#include <boost/numeric/conversion/converter.hpp>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/dynamic/parser_enum.hpp>
+#include <boost/xpressive/detail/utility/literals.hpp>
+#include <boost/xpressive/detail/utility/chset/chset.hpp>
+#include <boost/xpressive/regex_constants.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+enum escape_type
+{
+ escape_char
+ , escape_mark
+ , escape_class
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// escape_value
+//
+template<typename Char, typename Class>
+struct escape_value
+{
+ Char ch_;
+ int mark_nbr_;
+ Class class_;
+ escape_type type_;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// char_overflow_handler
+//
+struct char_overflow_handler
+{
+ void operator ()(numeric::range_check_result result) const // throw(regex_error)
+ {
+ if(numeric::cInRange != result)
+ {
+ throw regex_error(regex_constants::error_escape,
+ "character escape too large to fit in target character type");
+ }
+ }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// parse_escape
+//
+template<typename FwdIter, typename CompilerTraits>
+escape_value<typename iterator_value<FwdIter>::type, typename CompilerTraits::regex_traits::char_class_type>
+parse_escape(FwdIter &begin, FwdIter end, CompilerTraits &traits)
+{
+ using namespace regex_constants;
+ typedef typename iterator_value<FwdIter>::type char_type;
+ typedef typename CompilerTraits::regex_traits regex_traits;
+ typedef typename regex_traits::char_class_type char_class_type;
+
+ // define an unsigned type the same size as char_type
+ typedef typename boost::uint_t<CHAR_BIT * sizeof(char_type)>::least uchar_t;
+ BOOST_MPL_ASSERT_RELATION(sizeof(uchar_t), ==, sizeof(char_type));
+ typedef numeric::conversion_traits<uchar_t, int> converstion_traits;
+
+ ensure(begin != end, error_escape, "unexpected end of pattern found");
+ numeric::converter<int, uchar_t, converstion_traits, char_overflow_handler> converter;
+ escape_value<char_type,char_class_type> esc = { 0, 0, 0, escape_char };
+ bool const icase = (0 != (regex_constants::icase_ & traits.flags()));
+ regex_traits const &rxtraits = traits.traits();
+ FwdIter tmp;
+
+ esc.class_ = rxtraits.lookup_classname(begin, begin + 1, icase);
+ if(0 != esc.class_)
+ {
+ esc.type_ = escape_class;
+ return esc;
+ }
+
+ if(-1 != rxtraits.value(*begin, 8))
+ {
+ esc.ch_ = converter(toi(begin, end, rxtraits, 8, 0777));
+ return esc;
+ }
+
+ switch(*begin)
+ {
+ // bell character
+ case BOOST_XPR_CHAR_(char_type, 'a'):
+ esc.ch_ = BOOST_XPR_CHAR_(char_type, '\a');
+ ++begin;
+ break;
+ // escape character
+ case BOOST_XPR_CHAR_(char_type, 'e'):
+ esc.ch_ = converter(27);
+ ++begin;
+ break;
+ // control character
+ case BOOST_XPR_CHAR_(char_type, 'c'):
+ ensure(++begin != end, error_escape, "unexpected end of pattern found");
+ ensure
+ (
+ rxtraits.in_range(BOOST_XPR_CHAR_(char_type, 'a'), BOOST_XPR_CHAR_(char_type, 'z'), *begin)
+ || rxtraits.in_range(BOOST_XPR_CHAR_(char_type, 'A'), BOOST_XPR_CHAR_(char_type, 'Z'), *begin)
+ , error_escape
+ , "invalid escape control letter; must be one of a-z or A-Z"
+ );
+ // Convert to character according to ECMA-262, section 15.10.2.10:
+ esc.ch_ = converter(*begin % 32);
+ ++begin;
+ break;
+ // formfeed character
+ case BOOST_XPR_CHAR_(char_type, 'f'):
+ esc.ch_ = BOOST_XPR_CHAR_(char_type, '\f');
+ ++begin;
+ break;
+ // newline
+ case BOOST_XPR_CHAR_(char_type, 'n'):
+ esc.ch_ = BOOST_XPR_CHAR_(char_type, '\n');
+ ++begin;
+ break;
+ // return
+ case BOOST_XPR_CHAR_(char_type, 'r'):
+ esc.ch_ = BOOST_XPR_CHAR_(char_type, '\r');
+ ++begin;
+ break;
+ // horizontal tab
+ case BOOST_XPR_CHAR_(char_type, 't'):
+ esc.ch_ = BOOST_XPR_CHAR_(char_type, '\t');
+ ++begin;
+ break;
+ // vertical tab
+ case BOOST_XPR_CHAR_(char_type, 'v'):
+ esc.ch_ = BOOST_XPR_CHAR_(char_type, '\v');
+ ++begin;
+ break;
+ // hex escape sequence
+ case BOOST_XPR_CHAR_(char_type, 'x'):
+ ensure(++begin != end, error_escape, "unexpected end of pattern found");
+ tmp = begin;
+ esc.ch_ = converter(toi(begin, end, rxtraits, 16, 0xff));
+ ensure(2 == std::distance(tmp, begin), error_escape, "invalid hex escape : "
+ "must be \\x HexDigit HexDigit");
+ break;
+ // Unicode escape sequence
+ case BOOST_XPR_CHAR_(char_type, 'u'):
+ ensure(++begin != end, error_escape, "unexpected end of pattern found");
+ tmp = begin;
+ esc.ch_ = converter(toi(begin, end, rxtraits, 16, 0xffff));
+ ensure(4 == std::distance(tmp, begin), error_escape, "invalid Unicode escape : "
+ "must be \\u HexDigit HexDigit HexDigit HexDigit");
+ break;
+ // backslash
+ case BOOST_XPR_CHAR_(char_type, '\\'):
+ //esc.ch_ = BOOST_XPR_CHAR_(char_type, '\\');
+ //++begin;
+ //break;
+ // all other escaped characters represent themselves
+ default:
+ esc.ch_ = *begin;
+ ++begin;
+ break;
+ }
+
+ return esc;
+}
+
+//////////////////////////////////////////////////////////////////////////
+// parse_charset
+//
+template<typename FwdIter, typename RegexTraits, typename CompilerTraits>
+inline void parse_charset
+(
+ FwdIter &begin
+ , FwdIter end
+ , compound_charset<RegexTraits> &chset
+ , CompilerTraits &traits
+)
+{
+ using namespace regex_constants;
+ typedef typename RegexTraits::char_type char_type;
+ typedef typename RegexTraits::char_class_type char_class_type;
+ BOOST_ASSERT(begin != end);
+ RegexTraits const &rxtraits = traits.traits();
+ bool const icase = (0 != (regex_constants::icase_ & traits.flags()));
+ FwdIter iprev = FwdIter();
+ escape_value<char_type, char_class_type> esc = {0, 0, 0, escape_char};
+ bool invert = false;
+
+ // check to see if we have an inverse charset
+ if(begin != end && token_charset_invert == traits.get_charset_token(iprev = begin, end))
+ {
+ begin = iprev;
+ invert = true;
+ }
+
+ // skip the end token if-and-only-if it is the first token in the charset
+ if(begin != end && token_charset_end == traits.get_charset_token(iprev = begin, end))
+ {
+ for(; begin != iprev; ++begin)
+ {
+ chset.set_char(*begin, rxtraits, icase);
+ }
+ }
+
+ compiler_token_type tok;
+ char_type ch_prev = char_type(), ch_next = char_type();
+ bool have_prev = false;
+
+ ensure(begin != end, error_brack, "unexpected end of pattern found");
+
+ // remember the current position and grab the next token
+ iprev = begin;
+ tok = traits.get_charset_token(begin, end);
+ do
+ {
+ ensure(begin != end, error_brack, "unexpected end of pattern found");
+
+ if(token_charset_hyphen == tok && have_prev)
+ {
+ // remember the current position
+ FwdIter iprev2 = begin;
+ have_prev = false;
+
+ // ch_prev is lower bound of a range
+ switch(traits.get_charset_token(begin, end))
+ {
+ case token_charset_hyphen:
+ case token_charset_invert:
+ begin = iprev2; // un-get these tokens and fall through
+ case token_literal:
+ ch_next = *begin++;
+ detail::ensure(ch_prev <= ch_next, error_range, "invalid charset range");
+ chset.set_range(ch_prev, ch_next, rxtraits, icase);
+ continue;
+ case token_charset_backspace:
+ ch_next = char_type(8); // backspace
+ detail::ensure(ch_prev <= ch_next, error_range, "invalid charset range");
+ chset.set_range(ch_prev, ch_next, rxtraits, icase);
+ continue;
+ case token_escape:
+ esc = parse_escape(begin, end, traits);
+ if(escape_char == esc.type_)
+ {
+ detail::ensure(ch_prev <= esc.ch_, error_range, "invalid charset range");
+ chset.set_range(ch_prev, esc.ch_, rxtraits, icase);
+ continue;
+ }
+ case token_charset_end: // fall through
+ default: // not a range.
+ begin = iprev; // backup to hyphen token
+ chset.set_char(ch_prev, rxtraits, icase);
+ chset.set_char(*begin++, rxtraits, icase);
+ continue;
+ }
+ }
+
+ if(have_prev)
+ {
+ chset.set_char(ch_prev, rxtraits, icase);
+ have_prev = false;
+ }
+
+ switch(tok)
+ {
+ case token_charset_hyphen:
+ case token_charset_invert:
+ case token_charset_end:
+ case token_posix_charset_end:
+ begin = iprev; // un-get these tokens
+ ch_prev = *begin++;
+ have_prev = true;
+ continue;
+
+ case token_charset_backspace:
+ ch_prev = char_type(8); // backspace
+ have_prev = true;
+ continue;
+
+ case token_posix_charset_begin:
+ {
+ FwdIter tmp = begin, start = begin;
+ bool invert = (token_charset_invert == traits.get_charset_token(tmp, end));
+ if(invert)
+ {
+ begin = start = tmp;
+ }
+ while(token_literal == (tok = traits.get_charset_token(begin, end)))
+ {
+ tmp = ++begin;
+ ensure(begin != end, error_brack, "unexpected end of pattern found");
+ }
+ if(token_posix_charset_end == tok)
+ {
+ char_class_type chclass = rxtraits.lookup_classname(start, tmp, icase);
+ ensure(0 != chclass, error_ctype, "unknown class name");
+ chset.set_class(chclass, invert);
+ continue;
+ }
+ begin = iprev; // un-get this token
+ ch_prev = *begin++;
+ have_prev = true;
+ }
+ continue;
+
+ case token_escape:
+ esc = parse_escape(begin, end, traits);
+ if(escape_char == esc.type_)
+ {
+ ch_prev = esc.ch_;
+ have_prev = true;
+ }
+ else if(escape_class == esc.type_)
+ {
+ char_class_type upper_ = lookup_classname(rxtraits, "upper");
+ BOOST_ASSERT(0 != upper_);
+ chset.set_class(esc.class_, rxtraits.isctype(*begin++, upper_));
+ }
+ else
+ {
+ BOOST_ASSERT(false);
+ }
+ continue;
+
+ default:
+ ch_prev = *begin++;
+ have_prev = true;
+ continue;
+ }
+ }
+ while(ensure((iprev = begin) != end, error_brack, "unexpected end of pattern found"),
+ token_charset_end != (tok = traits.get_charset_token(begin, end)));
+
+ if(have_prev)
+ {
+ chset.set_char(ch_prev, rxtraits, icase);
+ }
+
+ if(invert)
+ {
+ chset.inverse();
+ }
+}
+
+}}} // namespace boost::xpressive::detail
+
+#endif
diff --git a/boost/boost/xpressive/detail/dynamic/parser.hpp b/boost/boost/xpressive/detail/dynamic/parser.hpp
new file mode 100644
index 00000000000..5b9c3278bc7
--- /dev/null
+++ b/boost/boost/xpressive/detail/dynamic/parser.hpp
@@ -0,0 +1,346 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file parser.hpp
+/// Contains the definition of regex_compiler, a factory for building regex objects
+/// from strings.
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_DYNAMIC_PARSER_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_DYNAMIC_PARSER_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+# pragma warning(push)
+# pragma warning(disable : 4127) // conditional expression is constant
+#endif
+
+#include <boost/assert.hpp>
+#include <boost/xpressive/regex_constants.hpp>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/core/matchers.hpp>
+#include <boost/xpressive/detail/dynamic/dynamic.hpp>
+
+// The Regular Expression grammar, in pseudo BNF:
+//
+// expression = alternates ;
+//
+// alternates = sequence, *('|', sequence) ;
+//
+// sequence = quant, *(quant) ;
+//
+// quant = atom, [*+?] ;
+//
+// atom = literal |
+// '.' |
+// '\' any |
+// '(' expression ')' ;
+//
+// literal = not a meta-character ;
+//
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+///////////////////////////////////////////////////////////////////////////////
+// make_char_xpression
+//
+template<typename BidiIter, typename Char, typename Traits>
+inline sequence<BidiIter> make_char_xpression
+(
+ Char ch
+ , regex_constants::syntax_option_type flags
+ , Traits const &traits
+)
+{
+ if(0 != (regex_constants::icase_ & flags))
+ {
+ literal_matcher<Traits, true, false> matcher(ch, traits);
+ return make_dynamic_xpression<BidiIter>(matcher);
+ }
+ else
+ {
+ literal_matcher<Traits, false, false> matcher(ch, traits);
+ return make_dynamic_xpression<BidiIter>(matcher);
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// make_any_xpression
+//
+template<typename BidiIter, typename Traits>
+inline sequence<BidiIter> make_any_xpression
+(
+ regex_constants::syntax_option_type flags
+ , Traits const &traits
+)
+{
+ using namespace regex_constants;
+ typedef typename iterator_value<BidiIter>::type char_type;
+ typedef set_matcher<Traits, 2> set_matcher;
+ typedef literal_matcher<Traits, false, true> literal_matcher;
+
+ char_type const newline = traits.widen('\n');
+ set_matcher s(traits);
+ s.set_[0] = newline;
+ s.set_[1] = 0;
+ s.complement();
+
+ switch(((int)not_dot_newline | not_dot_null) & flags)
+ {
+ case not_dot_null:
+ return make_dynamic_xpression<BidiIter>(literal_matcher(char_type(0), traits));
+
+ case not_dot_newline:
+ return make_dynamic_xpression<BidiIter>(literal_matcher(newline, traits));
+
+ case (int)not_dot_newline | not_dot_null:
+ return make_dynamic_xpression<BidiIter>(s);
+
+ default:
+ return make_dynamic_xpression<BidiIter>(any_matcher());
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// make_literal_xpression
+//
+template<typename BidiIter, typename Char, typename Traits>
+inline sequence<BidiIter> make_literal_xpression
+(
+ std::basic_string<Char> const &literal
+ , regex_constants::syntax_option_type flags
+ , Traits const &traits
+)
+{
+ BOOST_ASSERT(0 != literal.size());
+ if(1 == literal.size())
+ {
+ return make_char_xpression<BidiIter>(literal[0], flags, traits);
+ }
+
+ typedef typename iterator_value<BidiIter>::type char_type;
+ BOOST_MPL_ASSERT((is_same<char_type, Char>));
+
+ if(0 != (regex_constants::icase_ & flags))
+ {
+ string_matcher<Traits, true> matcher(literal, traits);
+ return make_dynamic_xpression<BidiIter>(matcher);
+ }
+ else
+ {
+ string_matcher<Traits, false> matcher(literal, traits);
+ return make_dynamic_xpression<BidiIter>(matcher);
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// make_backref_xpression
+//
+template<typename BidiIter, typename Traits>
+inline sequence<BidiIter> make_backref_xpression
+(
+ int mark_nbr
+ , regex_constants::syntax_option_type flags
+ , Traits const &traits
+)
+{
+ typedef typename iterator_value<BidiIter>::type char_type;
+ if(0 != (regex_constants::icase_ & flags))
+ {
+ return make_dynamic_xpression<BidiIter>
+ (
+ mark_matcher<Traits, true>(mark_nbr, traits)
+ );
+ }
+ else
+ {
+ return make_dynamic_xpression<BidiIter>
+ (
+ mark_matcher<Traits, false>(mark_nbr, traits)
+ );
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// merge_charset
+//
+template<typename Char, typename Traits>
+inline void merge_charset
+(
+ basic_chset<Char> &basic
+ , compound_charset<Traits> const &compound
+ , Traits const &traits
+)
+{
+ if(0 != compound.posix_yes())
+ {
+ typename Traits::char_class_type mask = compound.posix_yes();
+ for(int i = 0; i <= UCHAR_MAX; ++i)
+ {
+ if(traits.isctype((Char)i, mask))
+ {
+ basic.set((Char)i);
+ }
+ }
+ }
+
+ if(!compound.posix_no().empty())
+ {
+ for(std::size_t j = 0; j < compound.posix_no().size(); ++j)
+ {
+ typename Traits::char_class_type mask = compound.posix_no()[j];
+ for(int i = 0; i <= UCHAR_MAX; ++i)
+ {
+ if(!traits.isctype((Char)i, mask))
+ {
+ basic.set((Char)i);
+ }
+ }
+ }
+ }
+
+ if(compound.is_inverted())
+ {
+ basic.inverse();
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// make_charset_xpression
+//
+template<typename BidiIter, typename Traits>
+inline sequence<BidiIter> make_charset_xpression
+(
+ compound_charset<Traits> &chset
+ , Traits const &traits
+ , regex_constants::syntax_option_type flags
+)
+{
+ typedef typename Traits::char_type char_type;
+ bool const icase = (0 != (regex_constants::icase_ & flags));
+ bool const optimize = 1 == sizeof(char_type) && 0 != (regex_constants::optimize & flags);
+
+ // don't care about compile speed -- fold eveything into a bitset<256>
+ if(optimize)
+ {
+ typedef basic_chset<char_type> charset_type;
+ charset_type charset(chset.basic_chset());
+ if(icase)
+ {
+ charset_matcher<Traits, true, charset_type> matcher(charset);
+ merge_charset(matcher.charset_, chset, traits);
+ return make_dynamic_xpression<BidiIter>(matcher);
+ }
+ else
+ {
+ charset_matcher<Traits, false, charset_type> matcher(charset);
+ merge_charset(matcher.charset_, chset, traits);
+ return make_dynamic_xpression<BidiIter>(matcher);
+ }
+ }
+
+ // special case to make [[:digit:]] fast
+ else if(chset.basic_chset().empty() && chset.posix_no().empty())
+ {
+ BOOST_ASSERT(0 != chset.posix_yes());
+ posix_charset_matcher<Traits> matcher(chset.posix_yes(), chset.is_inverted());
+ return make_dynamic_xpression<BidiIter>(matcher);
+ }
+
+ // default, slow
+ else
+ {
+ if(icase)
+ {
+ charset_matcher<Traits, true> matcher(chset);
+ return make_dynamic_xpression<BidiIter>(matcher);
+ }
+ else
+ {
+ charset_matcher<Traits, false> matcher(chset);
+ return make_dynamic_xpression<BidiIter>(matcher);
+ }
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// make_posix_charset_xpression
+//
+template<typename BidiIter, typename Traits>
+inline sequence<BidiIter> make_posix_charset_xpression
+(
+ typename Traits::char_class_type m
+ , bool no
+ , regex_constants::syntax_option_type //flags
+ , Traits const & //traits
+)
+{
+ posix_charset_matcher<Traits> charset(m, no);
+ return make_dynamic_xpression<BidiIter>(charset);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// make_assert_begin_line
+//
+template<typename BidiIter, typename Traits>
+inline sequence<BidiIter> make_assert_begin_line
+(
+ regex_constants::syntax_option_type flags
+ , Traits const &traits
+)
+{
+ if(0 != (regex_constants::single_line & flags))
+ {
+ return detail::make_dynamic_xpression<BidiIter>(detail::assert_bos_matcher());
+ }
+ else
+ {
+ detail::assert_bol_matcher<Traits> matcher(traits);
+ return detail::make_dynamic_xpression<BidiIter>(matcher);
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// make_assert_end_line
+//
+template<typename BidiIter, typename Traits>
+inline sequence<BidiIter> make_assert_end_line
+(
+ regex_constants::syntax_option_type flags
+ , Traits const &traits
+)
+{
+ if(0 != (regex_constants::single_line & flags))
+ {
+ return detail::make_dynamic_xpression<BidiIter>(detail::assert_eos_matcher());
+ }
+ else
+ {
+ detail::assert_eol_matcher<Traits> matcher(traits);
+ return detail::make_dynamic_xpression<BidiIter>(matcher);
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// make_assert_word
+//
+template<typename BidiIter, typename Cond, typename Traits>
+inline sequence<BidiIter> make_assert_word(Cond, Traits const &traits)
+{
+ typedef typename iterator_value<BidiIter>::type char_type;
+ return detail::make_dynamic_xpression<BidiIter>
+ (
+ detail::assert_word_matcher<Cond, Traits>(traits)
+ );
+}
+
+}}} // namespace boost::xpressive::detail
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma warning(pop)
+#endif
+
+#endif
diff --git a/boost/boost/xpressive/detail/dynamic/parser_enum.hpp b/boost/boost/xpressive/detail/dynamic/parser_enum.hpp
new file mode 100644
index 00000000000..c49d38e662f
--- /dev/null
+++ b/boost/boost/xpressive/detail/dynamic/parser_enum.hpp
@@ -0,0 +1,72 @@
+///////////////////////////////////////////////////////////////////////////////
+// parser_enum.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_DYNAMIC_PARSER_ENUM_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_DYNAMIC_PARSER_ENUM_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+namespace boost { namespace xpressive { namespace regex_constants
+{
+
+///////////////////////////////////////////////////////////////////////////////
+// compiler_token_type
+//
+enum compiler_token_type
+{
+ token_literal,
+ token_any, // .
+ token_escape, //
+ token_group_begin, // (
+ token_group_end, // )
+ token_alternate, // |
+ token_invalid_quantifier, // {
+ token_charset_begin, // [
+ token_charset_end, // ]
+ token_charset_invert, // ^
+ token_charset_hyphen, // -
+ token_charset_backspace, // \b
+ token_posix_charset_begin, // [:
+ token_posix_charset_end, // :]
+
+ token_quote_meta_begin, // \Q
+ token_quote_meta_end, // \E
+
+ token_no_mark, // ?:
+ token_positive_lookahead, // ?=
+ token_negative_lookahead, // ?!
+ token_positive_lookbehind, // ?<=
+ token_negative_lookbehind, // ?<!
+ token_independent_sub_expression, // ?>
+ token_comment, // ?#
+
+ token_assert_begin_sequence, // \A
+ token_assert_end_sequence, // \Z
+ token_assert_begin_line, // ^
+ token_assert_end_line, // $
+ token_assert_word_begin, // \<
+ token_assert_word_end, // \>
+ token_assert_word_boundary, // \b
+ token_assert_not_word_boundary, // \B
+
+ token_escape_newline, // \n
+ token_escape_escape, // \e
+ token_escape_formfeed, // \f
+ token_escape_horizontal_tab, // \t
+ token_escape_vertical_tab, // \v
+ token_escape_bell, // \a
+ token_escape_control, // \c
+
+ token_end_of_pattern
+};
+
+}}} // namespace boost::xpressive::regex_constants
+
+#endif
diff --git a/boost/boost/xpressive/detail/dynamic/parser_traits.hpp b/boost/boost/xpressive/detail/dynamic/parser_traits.hpp
new file mode 100644
index 00000000000..e2cbb86a7c6
--- /dev/null
+++ b/boost/boost/xpressive/detail/dynamic/parser_traits.hpp
@@ -0,0 +1,400 @@
+///////////////////////////////////////////////////////////////////////////////
+// detail/dynamic/parser_traits.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_DYNAMIC_PARSER_TRAITS_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_DYNAMIC_PARSER_TRAITS_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <string>
+#include <climits>
+#include <boost/assert.hpp>
+#include <boost/xpressive/regex_error.hpp>
+#include <boost/xpressive/regex_traits.hpp>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/dynamic/matchable.hpp>
+#include <boost/xpressive/detail/dynamic/parser_enum.hpp>
+#include <boost/xpressive/detail/utility/literals.hpp>
+#include <boost/xpressive/detail/utility/algorithm.hpp>
+
+namespace boost { namespace xpressive
+{
+
+///////////////////////////////////////////////////////////////////////////////
+// compiler_traits
+// this works for char and wchar_t. it must be specialized for anything else.
+//
+template<typename RegexTraits>
+struct compiler_traits
+{
+ typedef typename RegexTraits::char_type char_type;
+ typedef std::basic_string<char_type> string_type;
+ typedef typename string_type::const_iterator iterator_type;
+ typedef RegexTraits regex_traits;
+ typedef typename RegexTraits::locale_type locale_type;
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // constructor
+ explicit compiler_traits(RegexTraits const &traits = RegexTraits())
+ : traits_(traits)
+ , flags_(regex_constants::ECMAScript)
+ , space_(lookup_classname(traits_, "space"))
+ {
+ BOOST_ASSERT(0 != this->space_);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // flags
+ regex_constants::syntax_option_type flags() const
+ {
+ return this->flags_;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // flags
+ void flags(regex_constants::syntax_option_type flags)
+ {
+ this->flags_ = flags;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // traits
+ regex_traits &traits()
+ {
+ return this->traits_;
+ }
+
+ regex_traits const &traits() const
+ {
+ return this->traits_;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // imbue
+ locale_type imbue(locale_type const &loc)
+ {
+ locale_type oldloc = this->traits().imbue(loc);
+ this->space_ = lookup_classname(this->traits(), "space");
+ BOOST_ASSERT(0 != this->space_);
+ return oldloc;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // getloc
+ locale_type getloc() const
+ {
+ return this->traits().getloc();
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // get_token
+ // get a token and advance the iterator
+ regex_constants::compiler_token_type get_token(iterator_type &begin, iterator_type end)
+ {
+ using namespace regex_constants;
+ if(this->eat_ws_(begin, end) == end)
+ {
+ return regex_constants::token_end_of_pattern;
+ }
+
+ switch(*begin)
+ {
+ case BOOST_XPR_CHAR_(char_type, '\\'): return this->get_escape_token(++begin, end);
+ case BOOST_XPR_CHAR_(char_type, '.'): ++begin; return token_any;
+ case BOOST_XPR_CHAR_(char_type, '^'): ++begin; return token_assert_begin_line;
+ case BOOST_XPR_CHAR_(char_type, '$'): ++begin; return token_assert_end_line;
+ case BOOST_XPR_CHAR_(char_type, '('): ++begin; return token_group_begin;
+ case BOOST_XPR_CHAR_(char_type, ')'): ++begin; return token_group_end;
+ case BOOST_XPR_CHAR_(char_type, '|'): ++begin; return token_alternate;
+ case BOOST_XPR_CHAR_(char_type, '['): ++begin; return token_charset_begin;
+ case BOOST_XPR_CHAR_(char_type, ']'): ++begin; return token_charset_end;
+
+ case BOOST_XPR_CHAR_(char_type, '*'):
+ case BOOST_XPR_CHAR_(char_type, '+'):
+ case BOOST_XPR_CHAR_(char_type, '?'):
+ return token_invalid_quantifier;
+
+ case BOOST_XPR_CHAR_(char_type, '{'):
+ default:
+ return token_literal;
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // get_quant_spec
+ bool get_quant_spec(iterator_type &begin, iterator_type end, detail::quant_spec &spec)
+ {
+ using namespace regex_constants;
+ iterator_type old_begin;
+
+ if(this->eat_ws_(begin, end) == end)
+ {
+ return false;
+ }
+
+ switch(*begin)
+ {
+ case BOOST_XPR_CHAR_(char_type, '*'):
+ spec.min_ = 0;
+ spec.max_ = (std::numeric_limits<unsigned int>::max)();
+ break;
+
+ case BOOST_XPR_CHAR_(char_type, '+'):
+ spec.min_ = 1;
+ spec.max_ = (std::numeric_limits<unsigned int>::max)();
+ break;
+
+ case BOOST_XPR_CHAR_(char_type, '?'):
+ spec.min_ = 0;
+ spec.max_ = 1;
+ break;
+
+ case BOOST_XPR_CHAR_(char_type, '{'):
+ old_begin = this->eat_ws_(++begin, end);
+ spec.min_ = spec.max_ = detail::toi(begin, end, this->traits());
+ detail::ensure
+ (
+ begin != old_begin && begin != end, error_brace, "invalid quantifier"
+ );
+
+ if(*begin == BOOST_XPR_CHAR_(char_type, ','))
+ {
+ old_begin = this->eat_ws_(++begin, end);
+ spec.max_ = detail::toi(begin, end, this->traits());
+ detail::ensure
+ (
+ begin != end && BOOST_XPR_CHAR_(char_type, '}') == *begin
+ , error_brace, "invalid quantifier"
+ );
+
+ if(begin == old_begin)
+ {
+ spec.max_ = (std::numeric_limits<unsigned int>::max)();
+ }
+ else
+ {
+ detail::ensure
+ (
+ spec.min_ <= spec.max_, error_badbrace, "invalid quantification range"
+ );
+ }
+ }
+ else
+ {
+ detail::ensure
+ (
+ BOOST_XPR_CHAR_(char_type, '}') == *begin, error_brace, "invalid quantifier"
+ );
+ }
+ break;
+
+ default:
+ return false;
+ }
+
+ spec.greedy_ = true;
+ if(this->eat_ws_(++begin, end) != end && BOOST_XPR_CHAR_(char_type, '?') == *begin)
+ {
+ ++begin;
+ spec.greedy_ = false;
+ }
+
+ return true;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // get_group_type
+ regex_constants::compiler_token_type get_group_type(iterator_type &begin, iterator_type end)
+ {
+ using namespace regex_constants;
+ if(this->eat_ws_(begin, end) != end && BOOST_XPR_CHAR_(char_type, '?') == *begin)
+ {
+ this->eat_ws_(++begin, end);
+ detail::ensure(begin != end, error_paren, "incomplete extension");
+
+ switch(*begin)
+ {
+ case BOOST_XPR_CHAR_(char_type, ':'): ++begin; return token_no_mark;
+ case BOOST_XPR_CHAR_(char_type, '>'): ++begin; return token_independent_sub_expression;
+ case BOOST_XPR_CHAR_(char_type, '#'): ++begin; return token_comment;
+ case BOOST_XPR_CHAR_(char_type, '='): ++begin; return token_positive_lookahead;
+ case BOOST_XPR_CHAR_(char_type, '!'): ++begin; return token_negative_lookahead;
+ case BOOST_XPR_CHAR_(char_type, '<'):
+ this->eat_ws_(++begin, end);
+ detail::ensure(begin != end, error_paren, "incomplete extension");
+ switch(*begin)
+ {
+ case BOOST_XPR_CHAR_(char_type, '='): ++begin; return token_positive_lookbehind;
+ case BOOST_XPR_CHAR_(char_type, '!'): ++begin; return token_negative_lookbehind;
+ default:
+ throw regex_error(error_badbrace, "unrecognized extension");
+ }
+
+ case BOOST_XPR_CHAR_(char_type, 'i'):
+ case BOOST_XPR_CHAR_(char_type, 'm'):
+ case BOOST_XPR_CHAR_(char_type, 's'):
+ case BOOST_XPR_CHAR_(char_type, 'x'):
+ case BOOST_XPR_CHAR_(char_type, '-'):
+ return this->parse_mods_(begin, end);
+
+ default:
+ throw regex_error(error_badbrace, "unrecognized extension");
+ }
+ }
+
+ return token_literal;
+ }
+
+ //////////////////////////////////////////////////////////////////////////
+ // get_charset_token
+ // NOTE: white-space is *never* ignored in a charset.
+ regex_constants::compiler_token_type get_charset_token(iterator_type &begin, iterator_type end)
+ {
+ using namespace regex_constants;
+ BOOST_ASSERT(begin != end);
+ switch(*begin)
+ {
+ case BOOST_XPR_CHAR_(char_type, '^'): ++begin; return token_charset_invert;
+ case BOOST_XPR_CHAR_(char_type, '-'): ++begin; return token_charset_hyphen;
+ case BOOST_XPR_CHAR_(char_type, ']'): ++begin; return token_charset_end;
+ case BOOST_XPR_CHAR_(char_type, '['):
+ {
+ iterator_type next = begin; ++next;
+ if(next != end && *next == BOOST_XPR_CHAR_(char_type, ':'))
+ {
+ begin = ++next;
+ return token_posix_charset_begin;
+ }
+ }
+ break;
+ case BOOST_XPR_CHAR_(char_type, ':'):
+ {
+ iterator_type next = begin; ++next;
+ if(next != end && *next == BOOST_XPR_CHAR_(char_type, ']'))
+ {
+ begin = ++next;
+ return token_posix_charset_end;
+ }
+ }
+ break;
+ case BOOST_XPR_CHAR_(char_type, '\\'):
+ if(++begin != end)
+ {
+ switch(*begin)
+ {
+ case BOOST_XPR_CHAR_(char_type, 'b'): ++begin; return token_charset_backspace;
+ default:;
+ }
+ }
+ return token_escape;
+ default:;
+ }
+ return token_literal;
+ }
+
+ //////////////////////////////////////////////////////////////////////////
+ // get_escape_token
+ regex_constants::compiler_token_type get_escape_token(iterator_type &begin, iterator_type end)
+ {
+ using namespace regex_constants;
+ if(begin != end)
+ {
+ switch(*begin)
+ {
+ //case BOOST_XPR_CHAR_(char_type, 'a'): ++begin; return token_escape_bell;
+ //case BOOST_XPR_CHAR_(char_type, 'c'): ++begin; return token_escape_control;
+ //case BOOST_XPR_CHAR_(char_type, 'e'): ++begin; return token_escape_escape;
+ //case BOOST_XPR_CHAR_(char_type, 'f'): ++begin; return token_escape_formfeed;
+ //case BOOST_XPR_CHAR_(char_type, 'n'): ++begin; return token_escape_newline;
+ //case BOOST_XPR_CHAR_(char_type, 't'): ++begin; return token_escape_horizontal_tab;
+ //case BOOST_XPR_CHAR_(char_type, 'v'): ++begin; return token_escape_vertical_tab;
+ case BOOST_XPR_CHAR_(char_type, 'A'): ++begin; return token_assert_begin_sequence;
+ case BOOST_XPR_CHAR_(char_type, 'b'): ++begin; return token_assert_word_boundary;
+ case BOOST_XPR_CHAR_(char_type, 'B'): ++begin; return token_assert_not_word_boundary;
+ case BOOST_XPR_CHAR_(char_type, 'E'): ++begin; return token_quote_meta_end;
+ case BOOST_XPR_CHAR_(char_type, 'Q'): ++begin; return token_quote_meta_begin;
+ case BOOST_XPR_CHAR_(char_type, 'Z'): ++begin; return token_assert_end_sequence;
+ // Non-standard extension to ECMAScript syntax
+ case BOOST_XPR_CHAR_(char_type, '<'): ++begin; return token_assert_word_begin;
+ case BOOST_XPR_CHAR_(char_type, '>'): ++begin; return token_assert_word_end;
+ default:; // fall-through
+ }
+ }
+
+ return token_escape;
+ }
+
+private:
+
+ //////////////////////////////////////////////////////////////////////////
+ // parse_mods_
+ regex_constants::compiler_token_type parse_mods_(iterator_type &begin, iterator_type end)
+ {
+ using namespace regex_constants;
+ bool set = true;
+ do switch(*begin)
+ {
+ case BOOST_XPR_CHAR_(char_type, 'i'): this->flag_(set, icase_); break;
+ case BOOST_XPR_CHAR_(char_type, 'm'): this->flag_(!set, single_line); break;
+ case BOOST_XPR_CHAR_(char_type, 's'): this->flag_(!set, not_dot_newline); break;
+ case BOOST_XPR_CHAR_(char_type, 'x'): this->flag_(set, ignore_white_space); break;
+ case BOOST_XPR_CHAR_(char_type, ':'): ++begin; // fall-through
+ case BOOST_XPR_CHAR_(char_type, ')'): return token_no_mark;
+ case BOOST_XPR_CHAR_(char_type, '-'): if(false == (set = !set)) break; // else fall-through
+ default: throw regex_error(error_paren, "unknown pattern modifier");
+ }
+ while(detail::ensure(++begin != end, error_paren, "incomplete extension"));
+ return token_no_mark;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // flag_
+ void flag_(bool set, regex_constants::syntax_option_type flag)
+ {
+ this->flags_ = set ? (this->flags_ | flag) : (this->flags_ & ~flag);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // is_space_
+ bool is_space_(char_type ch) const
+ {
+ return this->traits().isctype(ch, this->space_);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // eat_ws_
+ iterator_type &eat_ws_(iterator_type &begin, iterator_type end)
+ {
+ if(0 != (regex_constants::ignore_white_space & this->flags()))
+ {
+ while(end != begin && (BOOST_XPR_CHAR_(char_type, '#') == *begin || this->is_space_(*begin)))
+ {
+ if(BOOST_XPR_CHAR_(char_type, '#') == *begin++)
+ {
+ while(end != begin && BOOST_XPR_CHAR_(char_type, '\n') != *begin++) {}
+ }
+ else
+ {
+ for(; end != begin && this->is_space_(*begin); ++begin) {}
+ }
+ }
+ }
+
+ return begin;
+ }
+
+ regex_traits traits_;
+ regex_constants::syntax_option_type flags_;
+ typename regex_traits::char_class_type space_;
+};
+
+}} // namespace boost::xpressive
+
+#endif
diff --git a/boost/boost/xpressive/detail/static/as_xpr.hpp b/boost/boost/xpressive/detail/static/as_xpr.hpp
new file mode 100644
index 00000000000..55ebf48e9c5
--- /dev/null
+++ b/boost/boost/xpressive/detail/static/as_xpr.hpp
@@ -0,0 +1,175 @@
+///////////////////////////////////////////////////////////////////////////////
+// as_xpr.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_STATIC_AS_XPR_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_STATIC_AS_XPR_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/ref.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/apply.hpp>
+#include <boost/mpl/placeholders.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/logical.hpp>
+#include <boost/type_traits/is_array.hpp>
+#include <boost/type_traits/remove_bounds.hpp>
+#include <boost/type_traits/remove_pointer.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/proto/proto.hpp>
+#include <boost/xpressive/detail/static/placeholders.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+ template<typename T>
+ struct wrap { wrap(T); };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // is_string_literal
+ //
+ template<typename T>
+ struct is_string_literal
+ : mpl::or_
+ <
+ is_convertible<T, wrap<char const *> >
+ , is_convertible<T, wrap<wchar_t const *> >
+ >
+ {
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // string_generator
+ //
+ template<typename String>
+ struct string_placeholder_generator
+ {
+ typedef typename remove_cv
+ <
+ typename mpl::eval_if
+ <
+ is_array<String>
+ , remove_bounds<String>
+ , remove_pointer<String>
+ >::type
+ >::type char_type;
+
+ typedef string_placeholder<char_type> type;
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // as_matcher
+ template<typename Matcher, bool IsXpr = is_xpr<Matcher>::value>
+ struct as_matcher_type
+ {
+ typedef Matcher type;
+
+ static type const &call(Matcher const &matcher)
+ {
+ return matcher;
+ }
+ };
+
+ template<typename Literal>
+ struct as_matcher_type<Literal, false>
+ {
+ typedef typename mpl::eval_if
+ <
+ is_string_literal<Literal>
+ , string_placeholder_generator<Literal>
+ , mpl::identity<literal_placeholder<Literal, false> >
+ >::type type;
+
+ static type call(Literal const &literal)
+ {
+ return type(literal);
+ }
+ };
+
+ template<typename BidiIter>
+ struct as_matcher_type<basic_regex<BidiIter>, false>
+ {
+ typedef regex_placeholder<BidiIter, false> type;
+
+ static type call(basic_regex<BidiIter> const &rex)
+ {
+ typedef core_access<BidiIter> access;
+ shared_ptr<regex_impl<BidiIter> > impl = access::get_regex_impl(rex);
+ return type(impl);
+ }
+ };
+
+ template<typename BidiIter>
+ struct as_matcher_type<reference_wrapper<basic_regex<BidiIter> const>, false>
+ {
+ typedef regex_placeholder<BidiIter, false> type;
+
+ static type call(reference_wrapper<basic_regex<BidiIter> const> const &rex)
+ {
+ typedef core_access<BidiIter> access;
+ shared_ptr<regex_impl<BidiIter> > impl = access::get_regex_impl(rex.get());
+ return type(impl);
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // as_xpr_type
+ //
+ template<typename Xpr>
+ struct as_xpr_type<Xpr, true> // is_op == true
+ {
+ typedef Xpr type;
+ typedef Xpr const &const_reference;
+
+ static Xpr const &call(Xpr const &xpr)
+ {
+ return xpr;
+ }
+ };
+
+ template<typename Xpr>
+ struct as_xpr_type<Xpr, false>
+ {
+ typedef proto::unary_op
+ <
+ typename as_matcher_type<Xpr>::type
+ , proto::noop_tag
+ > type;
+
+ typedef type const const_reference;
+
+ static type const call(Xpr const &xpr)
+ {
+ return proto::noop(detail::as_matcher_type<Xpr>::call(xpr));
+ }
+ };
+
+}}} // namespace boost::xpressive::detail
+
+
+namespace boost { namespace xpressive
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // as_xpr (from a literal to an xpression)
+ //
+ template<typename Xpr>
+ inline typename detail::as_xpr_type<Xpr>::const_reference
+ as_xpr(Xpr const &xpr)
+ {
+ return detail::as_xpr_type<Xpr>::call(xpr);
+ }
+
+}} // namespace boost::xpressive
+
+#endif
diff --git a/boost/boost/xpressive/detail/static/compile.hpp b/boost/boost/xpressive/detail/static/compile.hpp
new file mode 100644
index 00000000000..63b45aae7e6
--- /dev/null
+++ b/boost/boost/xpressive/detail/static/compile.hpp
@@ -0,0 +1,91 @@
+///////////////////////////////////////////////////////////////////////////////
+// compile.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_STATIC_COMPILE_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_STATIC_COMPILE_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/mpl/bool.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+#include <boost/xpressive/proto/proto.hpp>
+#include <boost/xpressive/regex_traits.hpp>
+#include <boost/xpressive/detail/core/regex_impl.hpp>
+#include <boost/xpressive/detail/core/linker.hpp>
+#include <boost/xpressive/detail/core/optimize.hpp>
+#include <boost/xpressive/detail/core/adaptor.hpp>
+#include <boost/xpressive/detail/core/matcher/end_matcher.hpp>
+#include <boost/xpressive/detail/static/static.hpp>
+#include <boost/xpressive/detail/static/productions/visitor.hpp>
+#include <boost/xpressive/detail/static/productions/domain_tags.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // static_compile_impl2
+ template<typename Xpr, typename BidiIter, typename Traits>
+ void static_compile_impl2(Xpr const &xpr, regex_impl<BidiIter> &impl, Traits const &traits)
+ {
+ typedef typename iterator_value<BidiIter>::type char_type;
+ // "compile" the regex and wrap it in an xpression_adaptor
+ xpression_visitor<BidiIter, mpl::false_, Traits> visitor(traits, impl.shared_from_this());
+ visitor.impl().traits_.reset(new Traits(visitor.traits()));
+ visitor.impl().xpr_ = make_adaptor<BidiIter>(
+ proto::compile(xpr, end_xpression(), visitor, seq_tag()));
+
+ // "link" the regex
+ xpression_linker<char_type> linker(visitor.traits());
+ visitor.impl().xpr_->link(linker);
+
+ // optimization: get the peek chars OR the boyer-moore search string
+ optimize_regex(visitor.impl(), visitor.traits(), is_random<BidiIter>());
+
+ // copy the implementation
+ impl.tracking_copy(visitor.impl());
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // static_compile_impl1
+ template<typename Xpr, typename BidiIter>
+ void static_compile_impl1(Xpr const &xpr, regex_impl<BidiIter> &impl)
+ {
+ // use default traits
+ typedef typename iterator_value<BidiIter>::type char_type;
+ typedef typename default_regex_traits<char_type>::type traits_type;
+ traits_type traits;
+ static_compile_impl2(xpr, impl, traits);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // static_compile_impl1
+ template<typename Locale, typename Xpr, typename BidiIter>
+ void static_compile_impl1
+ (
+ proto::binary_op<locale_modifier<Locale>, Xpr, modifier_tag> const &xpr
+ , regex_impl<BidiIter> &impl
+ )
+ {
+ // use specified traits
+ typedef typename regex_traits_type<Locale, BidiIter>::type traits_type;
+ static_compile_impl2(proto::right(xpr), impl, traits_type(proto::left(xpr).getloc()));
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // static_compile
+ template<typename Xpr, typename BidiIter>
+ void static_compile(Xpr const &xpr, regex_impl<BidiIter> &impl)
+ {
+ static_compile_impl1(xpr, impl);
+ }
+
+}}} // namespace boost::xpressive::detail
+
+#endif
diff --git a/boost/boost/xpressive/detail/static/is_pure.hpp b/boost/boost/xpressive/detail/static/is_pure.hpp
new file mode 100644
index 00000000000..e4a2c2e71c1
--- /dev/null
+++ b/boost/boost/xpressive/detail/static/is_pure.hpp
@@ -0,0 +1,249 @@
+///////////////////////////////////////////////////////////////////////////////
+// is_pure.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_STATIC_IS_PURE_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_STATIC_IS_PURE_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <vector>
+#include <boost/ref.hpp>
+#include <boost/shared_ptr.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/fold.hpp>
+#include <boost/mpl/lambda.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/mpl/not_equal_to.hpp>
+#include <boost/mpl/transform_view.hpp>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/static/as_xpr.hpp>
+#include <boost/xpressive/detail/static/width_of.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+ ///////////////////////////////////////////////////////////////////////////////
+ // use_simple_repeat
+ //
+ template<typename Xpr>
+ struct use_simple_repeat;
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // is_pure
+ //
+ template<typename Xpr>
+ struct is_pure;
+
+ template<>
+ struct is_pure<no_next>
+ : mpl::true_
+ {
+ };
+
+ template<typename Matcher>
+ struct is_pure<proto::unary_op<Matcher, proto::noop_tag> >
+ : as_matcher_type<Matcher>::type::pure
+ {
+ };
+
+ template<typename Left, typename Right>
+ struct is_pure<proto::binary_op<Left, Right, proto::right_shift_tag> >
+ : mpl::and_<is_pure<Left>, is_pure<Right> >
+ {
+ };
+
+ template<typename Left, typename Right>
+ struct is_pure<proto::binary_op<Left, Right, proto::bitor_tag> >
+ : mpl::and_<is_pure<Left>, is_pure<Right> >
+ {
+ };
+
+ template<typename Right>
+ struct is_pure<proto::binary_op<mark_tag, Right, proto::assign_tag> >
+ : mpl::false_
+ {
+ };
+
+ template<typename Right>
+ struct is_pure<proto::binary_op<set_initializer_type, Right, proto::assign_tag> >
+ : mpl::true_
+ {
+ };
+
+ template<typename Modifier, typename Xpr>
+ struct is_pure<proto::binary_op<Modifier, Xpr, modifier_tag> >
+ : is_pure<Xpr>
+ {
+ };
+
+ template<typename Xpr, bool Positive>
+ struct is_pure<proto::unary_op<Xpr, lookahead_tag<Positive> > >
+ : is_pure<Xpr>
+ {
+ };
+
+ template<typename Xpr, bool Positive>
+ struct is_pure<proto::unary_op<Xpr, lookbehind_tag<Positive> > >
+ : is_pure<Xpr>
+ {
+ };
+
+ template<typename Xpr>
+ struct is_pure<proto::unary_op<Xpr, keeper_tag> >
+ : is_pure<Xpr>
+ {
+ };
+
+ template<typename Matcher, typename Next>
+ struct is_pure<static_xpression<Matcher, Next> >
+ : mpl::and_<typename Matcher::pure, is_pure<Next> >::type
+ {
+ };
+
+ template<typename BidiIter>
+ struct is_pure<shared_ptr<matchable<BidiIter> const> >
+ : mpl::false_
+ {
+ };
+
+ template<typename BidiIter>
+ struct is_pure<std::vector<shared_ptr<matchable<BidiIter> const> > >
+ : mpl::false_
+ {
+ };
+
+ //template<typename BidiIter>
+ //struct is_pure<basic_regex<BidiIter> >
+ // : mpl::false_
+ //{
+ //};
+
+ template<typename BidiIter>
+ struct is_pure<proto::unary_op<basic_regex<BidiIter>, proto::noop_tag> >
+ : mpl::false_
+ {
+ };
+
+ template<typename BidiIter>
+ struct is_pure<proto::unary_op<reference_wrapper<basic_regex<BidiIter> const>, proto::noop_tag> >
+ : mpl::false_
+ {
+ };
+
+ // when complementing a set or an assertion, the purity is that of the set (true) or the assertion
+ template<typename Op>
+ struct is_pure<proto::unary_op<Op, proto::complement_tag> >
+ : is_pure<Op>
+ {
+ };
+
+ // The comma is used in list-initialized sets, which are pure
+ template<typename Left, typename Right>
+ struct is_pure<proto::binary_op<Left, Right, proto::comma_tag> >
+ : mpl::true_
+ {
+ };
+
+ // The subscript operator[] is used for sets, as in set['a' | range('b','h')]
+ // It is also used for actions, which by definition have side-effects and thus are impure
+ template<typename Left, typename Right>
+ struct is_pure<proto::binary_op<Left, Right, proto::subscript_tag> >
+ : is_same<Left, set_initializer_type>
+ {
+ // If Left is "set" then make sure that Right is pure
+ BOOST_MPL_ASSERT
+ ((
+ mpl::or_
+ <
+ mpl::not_<is_same<Left, set_initializer_type> >
+ , is_pure<Right>
+ >
+ ));
+ };
+
+ // Quantified expressions are pure IFF they use the simple_repeat_matcher
+
+ template<typename Op>
+ struct is_pure<proto::unary_op<Op, proto::unary_plus_tag> >
+ : use_simple_repeat<Op>
+ {
+ };
+
+ template<typename Op>
+ struct is_pure<proto::unary_op<Op, proto::unary_star_tag> >
+ : use_simple_repeat<Op>
+ {
+ };
+
+ template<typename Op>
+ struct is_pure<proto::unary_op<Op, proto::logical_not_tag> >
+ : use_simple_repeat<Op>
+ {
+ };
+
+ template<typename Op, uint_t Min, uint_t Max>
+ struct is_pure<proto::unary_op<Op, generic_quant_tag<Min, Max> > >
+ : use_simple_repeat<Op>
+ {
+ };
+
+ template<typename Op>
+ struct is_pure<proto::unary_op<Op, proto::unary_minus_tag> >
+ : is_pure<Op>
+ {
+ };
+
+ template<typename Alternates>
+ struct is_pure<alternates_list<Alternates> >
+ : mpl::fold
+ <
+ mpl::transform_view<Alternates, is_pure<mpl::_1> >
+ , mpl::true_
+ , mpl::and_<mpl::_1, mpl::_2>
+ >::type
+ {
+ };
+
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // use_simple_repeat
+ // BUGBUG this doesn't handle +(_ >> s1) correctly, right?
+ template<typename Xpr>
+ struct use_simple_repeat
+ : mpl::and_<mpl::not_equal_to<width_of<Xpr>, unknown_width>, is_pure<Xpr> >
+ {
+ // should never try to quantify something of 0-width
+ BOOST_MPL_ASSERT((mpl::not_equal_to<width_of<Xpr>, mpl::size_t<0> >));
+ };
+
+ template<typename Matcher>
+ struct use_simple_repeat<proto::unary_op<Matcher, proto::noop_tag> >
+ : mpl::and_
+ <
+ mpl::equal_to
+ <
+ quant_type<typename as_matcher_type<Matcher>::type>
+ , mpl::int_<quant_fixed_width>
+ >
+ , typename as_matcher_type<Matcher>::type::pure
+ >
+ {
+ BOOST_MPL_ASSERT_RELATION(0, !=, as_matcher_type<Matcher>::type::width::value);
+ };
+
+ template<typename Op, typename Arg>
+ struct is_pure<proto::op_proxy<Op, Arg> >
+ : is_pure<Op>
+ {
+ };
+
+}}} // namespace boost::xpressive::detail
+
+#endif
diff --git a/boost/boost/xpressive/detail/static/modifier.hpp b/boost/boost/xpressive/detail/static/modifier.hpp
new file mode 100644
index 00000000000..56f341e85de
--- /dev/null
+++ b/boost/boost/xpressive/detail/static/modifier.hpp
@@ -0,0 +1,61 @@
+///////////////////////////////////////////////////////////////////////////////
+// modifier.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_STATIC_MODIFIER_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_STATIC_MODIFIER_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+# pragma warning(push)
+# pragma warning(disable : 4510) // default constructor could not be generated
+# pragma warning(disable : 4610) // user defined constructor required
+#endif
+
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/regex_constants.hpp>
+#include <boost/xpressive/detail/static/as_xpr.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // modifier
+ template<typename Modifier>
+ struct modifier_op
+ {
+ typedef regex_constants::syntax_option_type opt_type;
+
+ template<typename Xpr>
+ struct apply
+ {
+ typedef proto::binary_op<Modifier, typename as_xpr_type<Xpr>::type, modifier_tag> type;
+ };
+
+ template<typename Xpr>
+ typename apply<Xpr>::type
+ operator ()(Xpr const &xpr) const
+ {
+ return proto::make_op<modifier_tag>(this->mod_, as_xpr(xpr));
+ }
+
+ operator opt_type() const
+ {
+ return this->opt_;
+ }
+
+ Modifier mod_;
+ opt_type opt_;
+ };
+
+}}}
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma warning(pop)
+#endif
+
+#endif
diff --git a/boost/boost/xpressive/detail/static/placeholders.hpp b/boost/boost/xpressive/detail/static/placeholders.hpp
new file mode 100644
index 00000000000..a4af88fd956
--- /dev/null
+++ b/boost/boost/xpressive/detail/static/placeholders.hpp
@@ -0,0 +1,162 @@
+///////////////////////////////////////////////////////////////////////////////
+// placeholders.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_STATIC_PLACEHOLDERS_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_STATIC_PLACEHOLDERS_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <string>
+#include <boost/shared_ptr.hpp>
+#include <boost/xpressive/detail/core/quant_style.hpp>
+#include <boost/xpressive/detail/core/regex_impl.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+///////////////////////////////////////////////////////////////////////////////
+// literal_placeholder
+//
+template<typename Char, bool Not>
+struct literal_placeholder
+ : quant_style_fixed_width<1>
+{
+ typedef mpl::bool_<Not> not_type;
+ Char ch_;
+
+ literal_placeholder(Char ch)
+ : ch_(ch)
+ {
+ }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// string_placeholder
+//
+template<typename Char>
+struct string_placeholder
+ : quant_style_fixed_unknown_width
+{
+ std::basic_string<Char> str_;
+
+ string_placeholder(std::basic_string<Char> const &str)
+ : str_(str)
+ {
+ }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// mark_placeholder
+//
+struct mark_placeholder
+ : quant_style_fixed_unknown_width
+{
+ int mark_number_;
+
+ mark_placeholder(int mark_number)
+ : mark_number_(mark_number)
+ {
+ }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// regex_placeholder
+//
+template<typename BidiIter, bool ByRef>
+struct regex_placeholder
+ : quant_style<quant_variable_width, unknown_width, mpl::false_>
+{
+ shared_ptr<regex_impl<BidiIter> > impl_;
+
+ regex_placeholder(shared_ptr<regex_impl<BidiIter> > const &impl)
+ : impl_(impl)
+ {
+ }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// posix_charset_placeholder
+//
+struct posix_charset_placeholder
+ : quant_style_fixed_width<1>
+{
+ char const *name_;
+ bool not_;
+
+ posix_charset_placeholder(char const *name)
+ : name_(name)
+ , not_(false)
+ {
+ }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// assert_word_placeholder
+//
+template<typename Cond>
+struct assert_word_placeholder
+ : quant_style_assertion
+{
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// range_placeholder
+//
+template<typename Char>
+struct range_placeholder
+ : quant_style_fixed_width<1>
+{
+ Char ch_min_;
+ Char ch_max_;
+ bool not_;
+
+ range_placeholder(Char ch_min, Char ch_max)
+ : ch_min_(ch_min)
+ , ch_max_(ch_max)
+ , not_(false)
+ {
+ }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// assert_bol_placeholder
+//
+struct assert_bol_placeholder
+ : quant_style_assertion
+{
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// assert_eol_placeholder
+//
+struct assert_eol_placeholder
+ : quant_style_assertion
+{
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// logical_newline_placeholder
+//
+struct logical_newline_placeholder
+ : quant_style_variable_width
+{
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// self_placeholder
+//
+struct self_placeholder
+ : quant_style<quant_variable_width, unknown_width, mpl::false_>
+{
+};
+
+}}} // namespace boost::xpressive::detail
+
+#endif
diff --git a/boost/boost/xpressive/detail/static/productions/alt_compilers.hpp b/boost/boost/xpressive/detail/static/productions/alt_compilers.hpp
new file mode 100644
index 00000000000..96d61acde56
--- /dev/null
+++ b/boost/boost/xpressive/detail/static/productions/alt_compilers.hpp
@@ -0,0 +1,96 @@
+///////////////////////////////////////////////////////////////////////////////
+// alt_compilers.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_STATIC_PRODUCTIONS_ALT_COMPILERS_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_STATIC_PRODUCTIONS_ALT_COMPILERS_HPP_EAN_10_04_2005
+
+#include <boost/version.hpp>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/proto/proto.hpp>
+#include <boost/xpressive/proto/compiler/fold.hpp>
+#include <boost/xpressive/proto/compiler/branch.hpp>
+#include <boost/xpressive/detail/utility/cons.hpp>
+#include <boost/xpressive/detail/utility/dont_care.hpp>
+#include <boost/xpressive/detail/static/productions/domain_tags.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // alt_branch
+ // Describes how to construct an alternate xpression
+ struct alt_branch
+ {
+ typedef boost::fusion::nil state_type;
+
+ template<typename Op, typename State, typename Visitor>
+ struct apply
+ {
+ typedef static_xpression
+ <
+ alternate_matcher<alternates_list<Op>, typename Visitor::traits_type>
+ , State
+ > type;
+ };
+
+ template<typename Op, typename State, typename Visitor>
+ static typename apply<Op, State, Visitor>::type
+ call(Op const &op, State const &state, Visitor &)
+ {
+ typedef alternate_matcher<alternates_list<Op>, typename Visitor::traits_type> alt_matcher;
+ return make_static_xpression(alt_matcher(op), state);
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // alt_list_branch
+ struct alt_list_branch
+ {
+ typedef alternate_end_xpression state_type;
+
+ template<typename Op, typename State, typename>
+ struct apply
+ {
+ typedef boost::fusion::cons<Op, State> type;
+ };
+
+ template<typename Op, typename State>
+ static boost::fusion::cons<Op, State>
+ call(Op const &op, State const &state, dont_care)
+ {
+ return boost::fusion::make_cons(op, state);
+ }
+ };
+
+}}}
+
+namespace boost { namespace proto
+{
+ // production for alternates in sequence
+ template<>
+ struct compiler<bitor_tag, xpressive::detail::seq_tag, void>
+ : branch_compiler<xpressive::detail::alt_branch, xpressive::detail::alt_tag>
+ {
+ };
+
+ // handle alternates with the alt branch compiler
+ template<typename OpTag>
+ struct compiler<OpTag, xpressive::detail::alt_tag, void>
+ : branch_compiler<xpressive::detail::alt_list_branch, xpressive::detail::seq_tag>
+ {
+ };
+
+ // production for alternates in alternate
+ template<>
+ struct compiler<bitor_tag, xpressive::detail::alt_tag, void>
+ : fold_compiler<bitor_tag, xpressive::detail::alt_tag>
+ {
+ };
+
+}}
+
+#endif
diff --git a/boost/boost/xpressive/detail/static/productions/charset_transforms.hpp b/boost/boost/xpressive/detail/static/productions/charset_transforms.hpp
new file mode 100644
index 00000000000..9b4b0153a08
--- /dev/null
+++ b/boost/boost/xpressive/detail/static/productions/charset_transforms.hpp
@@ -0,0 +1,140 @@
+///////////////////////////////////////////////////////////////////////////////
+// charset_transforms.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_STATIC_PRODUCTIONS_CHARSET_TRANSFORMS_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_STATIC_PRODUCTIONS_CHARSET_TRANSFORMS_HPP_EAN_10_04_2005
+
+#include <boost/mpl/assert.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/mpl/sizeof.hpp>
+#include <boost/mpl/size_t.hpp>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/proto/proto.hpp>
+#include <boost/xpressive/detail/utility/never_true.hpp>
+#include <boost/xpressive/detail/utility/chset/chset.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // charset_state
+ //
+ template<typename CharSet, typename Traits>
+ struct charset_state
+ {
+ typedef Traits traits_type;
+ typedef typename CharSet::char_type char_type;
+ typedef typename CharSet::icase_type icase_type;
+
+ explicit charset_state(CharSet &charset, traits_type const &traits)
+ : charset_(charset)
+ , traits_(traits)
+ {
+ }
+
+ template<bool Not>
+ void set(literal_matcher<traits_type, icase_type::value, Not> const &ch) const
+ {
+ // BUGBUG fixme!
+ BOOST_MPL_ASSERT_NOT((mpl::bool_<Not>));
+ set_char(this->charset_.charset_, ch.ch_, this->traits_, icase_type());
+ }
+
+ void set(range_matcher<traits_type, icase_type::value> const &rg) const
+ {
+ // BUGBUG fixme!
+ BOOST_ASSERT(!rg.not_);
+ set_range(this->charset_.charset_, rg.ch_min_, rg.ch_max_, this->traits_, icase_type());
+ }
+
+ template<int Size>
+ void set(set_matcher<traits_type, Size> const &set_) const
+ {
+ // BUGBUG fixme!
+ BOOST_ASSERT(!set_.not_);
+ for(int i=0; i<Size; ++i)
+ {
+ set_char(this->charset_.charset_, set_.set_[i], this->traits_, icase_type::value);
+ }
+ }
+
+ void set(posix_charset_matcher<traits_type> const &posix) const
+ {
+ set_class(this->charset_.charset_, posix.mask_, posix.not_, this->traits_);
+ }
+
+ template<typename Unknown>
+ void set(Unknown const &) const
+ {
+ // If this assert fires, it means that you have put something in a set[] that doesn't
+ // belong there. For instance, set["hello"]. Legal members of sets are characters,
+ // character ranges, list-initialized sets such as (set='a','b','c') and posix-style
+ // character sets such as digit and ~alpha.
+ BOOST_MPL_ASSERT((never_true<Unknown>));
+ }
+
+ private:
+ charset_state &operator =(charset_state const &);
+
+ CharSet &charset_;
+ traits_type const &traits_;
+ };
+
+ template<typename CharSet, typename Traits>
+ charset_state<CharSet, Traits> make_charset_state(CharSet &charset, Traits const &traits)
+ {
+ return charset_state<CharSet, Traits>(charset, traits);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ struct charset_transform
+ {
+ template<typename, typename, typename Visitor>
+ struct apply
+ {
+ typedef typename Visitor::char_type char_type;
+
+ // if sizeof(char_type)==1, merge everything into a basic_chset
+ // BUGBUG this is not optimal.
+ typedef typename mpl::if_
+ <
+ mpl::equal_to<mpl::sizeof_<char_type>, mpl::size_t<1> >
+ , basic_chset<char_type>
+ , compound_charset<typename Visitor::traits_type>
+ >::type charset_type;
+
+ typedef charset_matcher
+ <
+ typename Visitor::traits_type
+ , Visitor::icase_type::value
+ , charset_type
+ > matcher_type;
+
+ typedef proto::unary_op<matcher_type, proto::noop_tag> type;
+ };
+
+ template<typename Op, typename State, typename Visitor>
+ static typename apply<Op, State, Visitor>::type
+ call(Op const &op, State const &, Visitor &visitor, bool complement = false)
+ {
+ typedef typename apply<Op, State, Visitor>::matcher_type matcher_type;
+ matcher_type matcher;
+ // Walks the tree and fills in the charset
+ proto::compile(proto::right(op), make_charset_state(matcher, visitor.traits()), visitor, set_tag());
+ if(complement)
+ {
+ matcher.charset_.inverse();
+ }
+ return proto::noop(matcher);
+ }
+ };
+
+}}}
+
+#endif
+
diff --git a/boost/boost/xpressive/detail/static/productions/complement_compiler.hpp b/boost/boost/xpressive/detail/static/productions/complement_compiler.hpp
new file mode 100644
index 00000000000..710f7a108f6
--- /dev/null
+++ b/boost/boost/xpressive/detail/static/productions/complement_compiler.hpp
@@ -0,0 +1,251 @@
+////////////////////////////////////////////////////////////////////////////
+// complement_compiler.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_STATIC_PRODUCTIONS_COMPLEMENT_COMPILER_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_STATIC_PRODUCTIONS_COMPLEMENT_COMPILER_HPP_EAN_10_04_2005
+
+#include <boost/mpl/assert.hpp>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/proto/proto.hpp>
+#include <boost/xpressive/proto/compiler/transform.hpp>
+#include <boost/xpressive/detail/utility/dont_care.hpp>
+#include <boost/xpressive/detail/utility/never_true.hpp>
+#include <boost/xpressive/detail/static/productions/set_compilers.hpp>
+#include <boost/xpressive/detail/static/productions/domain_tags.hpp>
+#include <boost/xpressive/detail/static/productions/charset_transforms.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // complement
+ // the result of applying operator~ to various expressions
+ template<typename Op, typename Visitor>
+ struct complement
+ {
+ // If your compile breaks here, then you are applying the complement operator ~
+ // to something that does not support it. For instance, ~(_ >> 'a') will trigger this
+ // assertion because the sub-expression (_ >> 'a') has no complement.
+ BOOST_MPL_ASSERT((never_true<Op>));
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ template<typename Char, bool Not, typename Visitor>
+ struct complement<proto::unary_op<literal_placeholder<Char, Not>, proto::noop_tag>, Visitor>
+ {
+ typedef proto::unary_op<literal_placeholder<Char, !Not>, proto::noop_tag> type;
+
+ static type const call(proto::unary_op<literal_placeholder<Char, Not>, proto::noop_tag> const &op, Visitor &)
+ {
+ literal_placeholder<Char, !Not> literal = proto::arg(op).ch_;
+ return proto::noop(literal);
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ template<typename Char, typename Visitor>
+ struct complement<proto::unary_op<Char, proto::noop_tag>, Visitor>
+ {
+ typedef proto::unary_op<literal_placeholder<Char, true>, proto::noop_tag> type;
+
+ static type const call(proto::unary_op<Char, proto::noop_tag> const &op, Visitor &)
+ {
+ literal_placeholder<Char, true> literal = proto::arg(op);
+ return proto::noop(literal);
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ template<typename Traits, int Size, typename Visitor>
+ struct complement<proto::unary_op<set_matcher<Traits, Size>, proto::noop_tag>, Visitor>
+ {
+ typedef proto::unary_op<set_matcher<Traits, Size>, proto::noop_tag> type;
+
+ static type const call(proto::unary_op<set_matcher<Traits, Size>, proto::noop_tag> const &op, Visitor &)
+ {
+ set_matcher<Traits, Size> set = proto::arg(op);
+ set.complement();
+ return proto::noop(set);
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ template<typename Visitor>
+ struct complement<proto::unary_op<posix_charset_placeholder, proto::noop_tag>, Visitor>
+ {
+ typedef proto::unary_op<posix_charset_placeholder, proto::noop_tag> type;
+
+ static type const call(proto::unary_op<posix_charset_placeholder, proto::noop_tag> const &op, Visitor &)
+ {
+ posix_charset_placeholder posix = proto::arg(op);
+ posix.not_ = !posix.not_;
+ return proto::noop(posix);
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ template<typename Op, typename Visitor>
+ struct complement<proto::binary_op<set_initializer_type, Op, proto::subscript_tag>, Visitor>
+ {
+ typedef typename charset_transform::BOOST_NESTED_TEMPLATE apply
+ <
+ proto::binary_op<set_initializer_type, Op, proto::subscript_tag>
+ , dont_care
+ , Visitor
+ >::type type;
+
+ static type call(proto::binary_op<set_initializer_type, Op, proto::subscript_tag> const &op, Visitor &visitor)
+ {
+ return charset_transform::call(op, dont_care(), visitor, true);
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // for complementing a list-initialized set, as in ~(set= 'a','b','c')
+ template<typename Left, typename Right, typename Visitor>
+ struct complement<proto::binary_op<Left, Right, proto::comma_tag>, Visitor>
+ {
+ // First, convert the parse tree into a set_matcher
+ typedef typename proto::compiler<proto::comma_tag, lst_tag>::BOOST_NESTED_TEMPLATE apply
+ <
+ proto::binary_op<Left, Right, proto::comma_tag>
+ , dont_care
+ , Visitor
+ >::type set_matcher;
+
+ typedef proto::unary_op<set_matcher, proto::noop_tag> type;
+
+ static type const call(proto::binary_op<Left, Right, proto::comma_tag> const &op, Visitor &visitor)
+ {
+ set_matcher set(proto::compile(op, dont_care(), visitor, lst_tag()));
+ set.complement();
+ return proto::noop(set);
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ template<typename Op, typename Visitor>
+ struct complement<proto::unary_op<Op, lookahead_tag<true> >, Visitor>
+ {
+ typedef proto::unary_op<Op, lookahead_tag<false> > type;
+
+ static type call(proto::unary_op<Op, lookahead_tag<true> > const &op, Visitor &)
+ {
+ return proto::make_op<lookahead_tag<false> >(proto::arg(op));
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ template<typename Op, typename Visitor>
+ struct complement<proto::unary_op<Op, lookbehind_tag<true> >, Visitor>
+ {
+ typedef proto::unary_op<Op, lookbehind_tag<false> > type;
+
+ static type call(proto::unary_op<Op, lookbehind_tag<true> > const &op, Visitor &)
+ {
+ return proto::make_op<lookbehind_tag<false> >(proto::arg(op));
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ template<typename Visitor>
+ struct complement<proto::unary_op<assert_word_placeholder<word_boundary<true> >, proto::noop_tag>, Visitor>
+ {
+ typedef proto::unary_op<assert_word_placeholder<word_boundary<false> >, proto::noop_tag> type;
+
+ static type call(proto::unary_op<assert_word_placeholder<word_boundary<true> >, proto::noop_tag> const &, Visitor &)
+ {
+ return proto::noop(assert_word_placeholder<word_boundary<false> >());
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ template<typename Visitor>
+ struct complement<logical_newline_xpression, Visitor>
+ {
+ typedef proto::binary_op
+ <
+ proto::unary_op<logical_newline_xpression, lookahead_tag<false> >
+ , proto::unary_op<any_matcher, proto::noop_tag>
+ , proto::right_shift_tag
+ > type;
+
+ static type call(logical_newline_xpression const &op, Visitor &)
+ {
+ return proto::make_op<lookahead_tag<false> >(op) >> proto::noop(any_matcher());
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // complementing a complement is a no-op
+ template<typename Arg, typename Visitor>
+ struct complement<proto::unary_op<Arg, proto::complement_tag>, Visitor>
+ {
+ typedef Arg type;
+
+ static Arg const &call(proto::unary_op<Arg, proto::complement_tag> const &op, Visitor &)
+ {
+ return proto::arg(op);
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ template<typename Char, typename Visitor>
+ struct complement<proto::unary_op<range_placeholder<Char>, proto::noop_tag>, Visitor>
+ {
+ typedef proto::unary_op<range_placeholder<Char>, proto::noop_tag> type;
+
+ static type const call(proto::unary_op<range_placeholder<Char>, proto::noop_tag> const &op, Visitor &)
+ {
+ range_placeholder<Char> rng = proto::arg(op);
+ rng.not_ = !rng.not_;
+ return proto::noop(rng);
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // complement_transform
+ struct complement_transform
+ {
+ template<typename Op, typename, typename Visitor>
+ struct apply
+ {
+ typedef typename complement<typename proto::arg_type<Op>::type, Visitor>::type type;
+ };
+
+ template<typename Op, typename State, typename Visitor>
+ static typename complement<typename proto::arg_type<Op>::type, Visitor>::type
+ call(Op const &op, State const &, Visitor &visitor)
+ {
+ return complement<typename proto::arg_type<Op>::type, Visitor>::call(proto::arg(op), visitor);
+ }
+ };
+
+}}}
+
+namespace boost { namespace proto
+{
+
+ template<>
+ struct compiler<complement_tag, xpressive::detail::seq_tag, void>
+ : transform_compiler<xpressive::detail::complement_transform, xpressive::detail::seq_tag>
+ {
+ };
+
+}}
+
+#endif
diff --git a/boost/boost/xpressive/detail/static/productions/domain_tags.hpp b/boost/boost/xpressive/detail/static/productions/domain_tags.hpp
new file mode 100644
index 00000000000..db22a8c3d2d
--- /dev/null
+++ b/boost/boost/xpressive/detail/static/productions/domain_tags.hpp
@@ -0,0 +1,24 @@
+///////////////////////////////////////////////////////////////////////////////
+// domain_tags.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_STATIC_PRODUCTIONS_DOMAIN_TAGS_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_STATIC_PRODUCTIONS_DOMAIN_TAGS_HPP_EAN_10_04_2005
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // regex domain tags
+ struct seq_tag {};
+ struct alt_tag {};
+ struct lst_tag {};
+ struct set_tag {};
+ struct ind_tag {};
+
+}}}
+
+#endif
diff --git a/boost/boost/xpressive/detail/static/productions/independent_compiler.hpp b/boost/boost/xpressive/detail/static/productions/independent_compiler.hpp
new file mode 100644
index 00000000000..9afb12af8b2
--- /dev/null
+++ b/boost/boost/xpressive/detail/static/productions/independent_compiler.hpp
@@ -0,0 +1,135 @@
+///////////////////////////////////////////////////////////////////////////////
+// independent_compiler.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_STATIC_PRODUCTIONS_INDEPENDENT_COMPILER_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_STATIC_PRODUCTIONS_INDEPENDENT_COMPILER_HPP_EAN_10_04_2005
+
+#include <boost/mpl/bool.hpp>
+#include <boost/type_traits/is_base_and_derived.hpp>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/proto/proto.hpp>
+#include <boost/xpressive/detail/static/productions/domain_tags.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+ template<bool Positive>
+ struct lookahead_tag : proto::unary_tag {};
+
+ template<bool Positive>
+ struct lookbehind_tag : proto::unary_tag {};
+
+ struct keeper_tag : proto::unary_tag {};
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // lookahead_branch
+ template<bool Positive>
+ struct lookahead_branch
+ {
+ typedef true_xpression state_type;
+
+ template<typename Op, typename State, typename>
+ struct apply
+ {
+ typedef static_xpression<lookahead_matcher<Op>, State> type;
+ };
+
+ template<typename Op, typename State, typename Visitor>
+ static static_xpression<lookahead_matcher<Op>, State>
+ call(Op const &op, State const &state, Visitor &)
+ {
+ return make_static_xpression(lookahead_matcher<Op>(op, !Positive), state);
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // lookbehind_branch
+ template<bool Positive>
+ struct lookbehind_branch
+ {
+ typedef true_xpression state_type;
+
+ template<typename Op, typename State, typename>
+ struct apply
+ {
+ typedef static_xpression<lookbehind_matcher<Op>, State> type;
+ };
+
+ template<typename Op, typename State, typename Visitor>
+ static static_xpression<lookbehind_matcher<Op>, State>
+ call(Op const &op, State const &state, Visitor &)
+ {
+ return make_static_xpression(lookbehind_matcher<Op>(op, !Positive), state);
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // keeper_branch
+ struct keeper_branch
+ {
+ typedef true_xpression state_type;
+
+ template<typename Op, typename State, typename>
+ struct apply
+ {
+ typedef static_xpression<keeper_matcher<Op>, State> type;
+ };
+
+ template<typename Op, typename State, typename Visitor>
+ static static_xpression<keeper_matcher<Op>, State>
+ call(Op const &op, State const &state, Visitor &)
+ {
+ return make_static_xpression(keeper_matcher<Op>(op), state);
+ }
+ };
+
+}}}
+
+
+namespace boost { namespace proto
+{
+ // ericne, 28/nov/05: CW9_4 doesn't like partial specializations of the form:
+ // template<bool F> struct foo<bar<F> >
+ template<>
+ struct compiler<xpressive::detail::lookahead_tag<true>, xpressive::detail::seq_tag, void>
+ : branch_compiler<xpressive::detail::lookahead_branch<true>, xpressive::detail::ind_tag>
+ {
+ };
+
+ template<>
+ struct compiler<xpressive::detail::lookahead_tag<false>, xpressive::detail::seq_tag, void>
+ : branch_compiler<xpressive::detail::lookahead_branch<false>, xpressive::detail::ind_tag>
+ {
+ };
+
+ template<>
+ struct compiler<xpressive::detail::lookbehind_tag<true>, xpressive::detail::seq_tag, void>
+ : branch_compiler<xpressive::detail::lookbehind_branch<true>, xpressive::detail::ind_tag>
+ {
+ };
+
+ template<>
+ struct compiler<xpressive::detail::lookbehind_tag<false>, xpressive::detail::seq_tag, void>
+ : branch_compiler<xpressive::detail::lookbehind_branch<false>, xpressive::detail::ind_tag>
+ {
+ };
+
+ template<>
+ struct compiler<xpressive::detail::keeper_tag, xpressive::detail::seq_tag, void>
+ : branch_compiler<xpressive::detail::keeper_branch, xpressive::detail::ind_tag>
+ {
+ };
+
+ template<typename OpTag>
+ struct compiler<OpTag, xpressive::detail::ind_tag, void>
+ : transform_compiler<arg_transform, xpressive::detail::seq_tag>
+ {
+ };
+
+}}
+
+
+#endif
diff --git a/boost/boost/xpressive/detail/static/productions/marker_compiler.hpp b/boost/boost/xpressive/detail/static/productions/marker_compiler.hpp
new file mode 100644
index 00000000000..3c5e590b7ef
--- /dev/null
+++ b/boost/boost/xpressive/detail/static/productions/marker_compiler.hpp
@@ -0,0 +1,50 @@
+////////////////////////////////////////////////////////////////////////////
+// marker_compiler.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_STATIC_PRODUCTIONS_MARKER_COMPILER_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_STATIC_PRODUCTIONS_MARKER_COMPILER_HPP_EAN_10_04_2005
+
+#include <boost/type_traits/is_same.hpp>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/proto/proto.hpp>
+#include <boost/xpressive/proto/compiler/branch.hpp>
+#include <boost/xpressive/proto/compiler/conditional.hpp>
+#include <boost/xpressive/proto/compiler/transform.hpp>
+#include <boost/xpressive/detail/static/productions/domain_tags.hpp>
+#include <boost/xpressive/detail/static/productions/marker_transform.hpp>
+#include <boost/xpressive/detail/static/productions/set_compilers.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // assign_compiler
+ // could be (s1= 'a') or (set= 'a')
+ struct assign_compiler
+ : proto::conditional_compiler
+ <
+ is_marker_predicate
+ , proto::transform_compiler<marker_assign_transform, seq_tag>
+ , proto::branch_compiler<list_branch, lst_tag>
+ >
+ {
+ };
+
+}}}
+
+namespace boost { namespace proto
+{
+
+ template<>
+ struct compiler<assign_tag, xpressive::detail::seq_tag, void>
+ : xpressive::detail::assign_compiler
+ {
+ };
+
+}}
+
+#endif
diff --git a/boost/boost/xpressive/detail/static/productions/marker_transform.hpp b/boost/boost/xpressive/detail/static/productions/marker_transform.hpp
new file mode 100644
index 00000000000..2017a0b6cd9
--- /dev/null
+++ b/boost/boost/xpressive/detail/static/productions/marker_transform.hpp
@@ -0,0 +1,94 @@
+///////////////////////////////////////////////////////////////////////////////
+// marker_transform.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_STATIC_PRODUCTIONS_MARKER_TRANSFORM_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_STATIC_PRODUCTIONS_MARKER_TRANSFORM_HPP_EAN_10_04_2005
+
+#include <boost/mpl/bool.hpp>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/proto/proto.hpp>
+#include <boost/xpressive/proto/compiler/transform.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+ ///////////////////////////////////////////////////////////////////////////////
+ // is_marker
+ template<typename Op>
+ struct is_marker
+ : mpl::false_
+ {};
+
+ // (s1= ...) is a marker
+ template<typename Op>
+ struct is_marker<proto::binary_op<mark_tag, Op, proto::assign_tag> >
+ : mpl::true_
+ {};
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // is_marker_predicate
+ struct is_marker_predicate
+ {
+ template<typename Op, typename, typename>
+ struct apply
+ : is_marker<Op>
+ {
+ };
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // marker_transform
+ // Insert mark tags before and after the expression
+ struct marker_transform
+ {
+ template<typename Op, typename, typename>
+ struct apply
+ {
+ typedef proto::binary_op
+ <
+ proto::unary_op<mark_begin_matcher, proto::noop_tag>
+ , proto::binary_op
+ <
+ Op
+ , proto::unary_op<mark_end_matcher, proto::noop_tag>
+ , proto::right_shift_tag
+ >
+ , proto::right_shift_tag
+ > type;
+ };
+
+ template<typename Op, typename State, typename Visitor>
+ static typename apply<Op, State, Visitor>::type
+ call(Op const &op, State const &, Visitor &visitor, int mark_nbr = 0)
+ {
+ // if we're inserting a mark, and we're not being told the mark number,
+ // we're inserting a hidden mark ... so grab the next hidden mark number.
+ if(0 == mark_nbr)
+ {
+ mark_nbr = visitor.get_hidden_mark();
+ }
+
+ return proto::noop(mark_begin_matcher(mark_nbr))
+ >> (op >> proto::noop(mark_end_matcher(mark_nbr)));
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // marker_assign_transform
+ struct marker_assign_transform
+ : proto::compose_transforms<proto::right_transform, marker_transform>
+ {
+ template<typename Op, typename State, typename Visitor>
+ static typename apply<Op, State, Visitor>::type
+ call(Op const &op, State const &state, Visitor &visitor)
+ {
+ return marker_transform::call(proto::right(op), state, visitor, proto::arg(proto::left(op)).mark_number_);
+ }
+ };
+
+}}}
+
+#endif
diff --git a/boost/boost/xpressive/detail/static/productions/modify_compiler.hpp b/boost/boost/xpressive/detail/static/productions/modify_compiler.hpp
new file mode 100644
index 00000000000..daff802d7a1
--- /dev/null
+++ b/boost/boost/xpressive/detail/static/productions/modify_compiler.hpp
@@ -0,0 +1,82 @@
+///////////////////////////////////////////////////////////////////////////////
+// modify_compiler.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_STATIC_PRODUCTIONS_MODIFY_COMPILER_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_STATIC_PRODUCTIONS_MODIFY_COMPILER_HPP_EAN_10_04_2005
+
+#include <boost/xpressive/proto/proto.hpp>
+#include <boost/xpressive/detail/utility/ignore_unused.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // regex operator tags
+ struct modifier_tag
+ : proto::binary_tag
+ {
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // scoped_swap
+ // for swapping state back after proto::compile returns
+ template<typename Old, typename New>
+ struct scoped_swap
+ {
+ ~scoped_swap() { this->old_->swap(*this->new_); }
+ Old *old_;
+ New *new_;
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // modify_compiler
+ struct modify_compiler
+ {
+ template<typename Op, typename State, typename Visitor>
+ struct apply
+ {
+ typedef typename proto::left_type<Op>::type modifier_type;
+ typedef typename modifier_type::BOOST_NESTED_TEMPLATE apply<Visitor>::type visitor_type;
+ typedef typename proto::right_type<Op>::type op_type;
+
+ typedef typename proto::compiler<typename proto::tag_type<op_type>::type, seq_tag>::
+ BOOST_NESTED_TEMPLATE apply
+ <
+ op_type
+ , State
+ , visitor_type
+ >::type type;
+ };
+
+ template<typename Op, typename State, typename Visitor>
+ static typename apply<Op, State, Visitor>::type
+ call(Op const &op, State const &state, Visitor &visitor)
+ {
+ typedef typename apply<Op, State, Visitor>::visitor_type new_visitor_type;
+ new_visitor_type new_visitor(proto::left(op).call(visitor));
+ new_visitor.swap(visitor);
+ scoped_swap<Visitor, new_visitor_type> const undo = {&visitor, &new_visitor};
+ detail::ignore_unused(&undo);
+ return proto::compile(proto::right(op), state, new_visitor, seq_tag());
+ }
+ };
+
+}}}
+
+namespace boost { namespace proto
+{
+
+ // production for modifiers
+ template<>
+ struct compiler<xpressive::detail::modifier_tag, xpressive::detail::seq_tag, void>
+ : xpressive::detail::modify_compiler
+ {
+ };
+
+}}
+
+#endif
diff --git a/boost/boost/xpressive/detail/static/productions/noop_compiler.hpp b/boost/boost/xpressive/detail/static/productions/noop_compiler.hpp
new file mode 100644
index 00000000000..b3df027099e
--- /dev/null
+++ b/boost/boost/xpressive/detail/static/productions/noop_compiler.hpp
@@ -0,0 +1,55 @@
+///////////////////////////////////////////////////////////////////////////////
+// noop_compiler.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_STATIC_PRODUCTIONS_NOOP_COMPILER_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_STATIC_PRODUCTIONS_NOOP_COMPILER_HPP_EAN_10_04_2005
+
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/static/productions/independent_compiler.hpp>
+#include <boost/xpressive/detail/static/productions/domain_tags.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // regex compiler productions
+ struct noop_compiler
+ {
+ ///////////////////////////////////////////////////////////////////////////////
+ // transformation that happens to leaf nodes in the parse tree
+ template<typename Op, typename State, typename Visitor>
+ struct apply
+ {
+ typedef typename as_matcher_type<typename proto::arg_type<Op>::type>::type matcher1;
+ typedef typename Visitor::BOOST_NESTED_TEMPLATE apply<matcher1>::type matcher2;
+ typedef static_xpression<matcher2, State> type;
+ };
+
+ template<typename Op, typename State, typename Visitor>
+ static typename apply<Op, State, Visitor>::type
+ call(Op const &op, State const &state, Visitor &visitor)
+ {
+ typedef typename proto::arg_type<Op>::type arg_type;
+ return make_static_xpression(visitor.call(as_matcher_type<arg_type>::call(proto::arg(op))), state);
+ }
+ };
+
+}}}
+
+namespace boost { namespace proto
+{
+
+ // production for terminals in sequence
+ template<>
+ struct compiler<noop_tag, xpressive::detail::seq_tag, void>
+ : xpressive::detail::noop_compiler
+ {
+ };
+
+}}
+
+#endif
diff --git a/boost/boost/xpressive/detail/static/productions/productions.hpp b/boost/boost/xpressive/detail/static/productions/productions.hpp
new file mode 100644
index 00000000000..de9ec57fcca
--- /dev/null
+++ b/boost/boost/xpressive/detail/static/productions/productions.hpp
@@ -0,0 +1,108 @@
+///////////////////////////////////////////////////////////////////////////////
+// productions.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_STATIC_PRODUCTIONS_PRODUCTIONS_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_STATIC_PRODUCTIONS_PRODUCTIONS_HPP_EAN_10_04_2005
+
+#include <boost/ref.hpp>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+
+#include <boost/xpressive/proto/proto.hpp>
+#include <boost/xpressive/proto/compiler/fold.hpp>
+#include <boost/xpressive/proto/compiler/transform.hpp>
+#include <boost/xpressive/proto/compiler/conditional.hpp>
+
+#include <boost/xpressive/detail/static/productions/domain_tags.hpp>
+#include <boost/xpressive/detail/static/productions/visitor.hpp>
+#include <boost/xpressive/detail/static/productions/quant_compilers.hpp>
+#include <boost/xpressive/detail/static/productions/alt_compilers.hpp>
+#include <boost/xpressive/detail/static/productions/independent_compiler.hpp>
+#include <boost/xpressive/detail/static/productions/noop_compiler.hpp>
+#include <boost/xpressive/detail/static/productions/modify_compiler.hpp>
+#include <boost/xpressive/detail/static/productions/complement_compiler.hpp>
+#include <boost/xpressive/detail/static/productions/set_compilers.hpp>
+#include <boost/xpressive/detail/static/productions/marker_compiler.hpp>
+#include <boost/xpressive/detail/static/productions/charset_transforms.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ struct is_set_initializer_predicate
+ {
+ template<typename Op, typename, typename>
+ struct apply
+ {
+ typedef typename is_same<typename proto::left_type<Op>::type, set_initializer_type>::type type;
+ };
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ struct action_transform
+ {
+ template<typename Op, typename, typename>
+ struct apply
+ {
+ typedef proto::binary_op
+ <
+ typename proto::left_type<Op>::type
+ , typename proto::right_type<Op>::type
+ , proto::right_shift_tag
+ > type;
+ };
+
+ template<typename Op, typename State, typename Visitor>
+ static typename apply<Op, State, Visitor>::type
+ call(Op const &op, State const &, Visitor &)
+ {
+ return proto::left(op) >> proto::right(op);
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // subscript_compiler
+ struct subscript_compiler
+ : proto::conditional_compiler
+ <
+ is_set_initializer_predicate
+ , proto::transform_compiler<charset_transform, seq_tag>
+ , proto::transform_compiler<action_transform, seq_tag>
+ >
+ {
+ };
+
+}}}
+
+
+///////////////////////////////////////////////////////////////////////////////
+// misc regex compiler productions
+namespace boost { namespace proto
+{
+ template<typename BidiIter>
+ struct value_type<xpressive::basic_regex<BidiIter> >
+ {
+ // store regex objects in the parse tree by reference
+ typedef reference_wrapper<xpressive::basic_regex<BidiIter> const> type;
+ };
+
+ // production for sequences in sequence
+ template<>
+ struct compiler<right_shift_tag, xpressive::detail::seq_tag, void>
+ : fold_compiler<right_shift_tag, xpressive::detail::seq_tag>
+ {
+ };
+
+ template<>
+ struct compiler<subscript_tag, xpressive::detail::seq_tag, void>
+ : xpressive::detail::subscript_compiler
+ {
+ };
+}}
+
+#endif
diff --git a/boost/boost/xpressive/detail/static/productions/quant_compilers.hpp b/boost/boost/xpressive/detail/static/productions/quant_compilers.hpp
new file mode 100644
index 00000000000..1bb47a3fe8b
--- /dev/null
+++ b/boost/boost/xpressive/detail/static/productions/quant_compilers.hpp
@@ -0,0 +1,141 @@
+///////////////////////////////////////////////////////////////////////////////
+// quant_compilers.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_STATIC_PRODUCTIONS_QUANT_COMPILERS_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_STATIC_PRODUCTIONS_QUANT_COMPILERS_HPP_EAN_10_04_2005
+
+#include <limits.h>
+#include <boost/xpressive/proto/proto.hpp>
+#include <boost/xpressive/proto/compiler/branch.hpp>
+#include <boost/xpressive/proto/compiler/transform.hpp>
+#include <boost/xpressive/proto/compiler/conditional.hpp>
+#include <boost/xpressive/detail/static/productions/quant_traits.hpp>
+#include <boost/xpressive/detail/static/productions/quant_transforms.hpp>
+#include <boost/xpressive/detail/static/productions/marker_transform.hpp>
+#include <boost/xpressive/detail/static/productions/domain_tags.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+ typedef proto::unary_op<epsilon_matcher, proto::noop_tag> nil_op;
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // generic_quant_compiler
+ template<bool Greedy, uint_t Min, uint_t Max>
+ struct generic_quant_compiler
+ : proto::conditional_compiler
+ <
+ use_simple_repeat_predicate
+ , proto::branch_compiler<simple_repeat_branch<Greedy, Min, Max>, ind_tag>
+ , proto::transform_compiler
+ <
+ proto::compose_transforms
+ <
+ proto::arg_transform
+ , repeater_if_transform<Greedy, Min, Max>
+ >
+ , seq_tag
+ >
+ >
+ {
+ };
+
+ // degenerate case, foo{0,0} becomes nil
+ template<bool Greedy>
+ struct generic_quant_compiler<Greedy, 0, 0>
+ : proto::transform_compiler<proto::always_transform<nil_op>, seq_tag>
+ {
+ };
+
+ // degenerate case, foo{1,1} becomes foo
+ template<bool Greedy>
+ struct generic_quant_compiler<Greedy, 1, 1>
+ : proto::transform_compiler<proto::identity_transform, seq_tag>
+ {
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // non_greedy_compiler
+ struct non_greedy_compiler
+ {
+ template<typename Op, typename State, typename Visitor>
+ struct apply
+ {
+ typedef typename proto::arg_type<Op>::type arg_type;
+
+ // Did you apply operator- to something that wasn't a quantifier?
+ BOOST_MPL_ASSERT((is_greedy_quant<arg_type>));
+
+ typedef typename proto::tag_type<arg_type>::type tag_type;
+ typedef generic_quant_compiler
+ <
+ false
+ , min_type<tag_type>::type::value
+ , max_type<tag_type>::type::value
+ > compiler_type;
+
+ typedef typename compiler_type::BOOST_NESTED_TEMPLATE apply
+ <
+ arg_type
+ , State
+ , Visitor
+ >::type type;
+ };
+
+ template<typename Op, typename State, typename Visitor>
+ static typename apply<Op, State, Visitor>::type
+ call(Op const &op, State const &state, Visitor &visitor)
+ {
+ typedef typename apply<Op, State, Visitor>::compiler_type compiler_type;
+ return compiler_type::call(proto::arg(op), state, visitor);
+ }
+ };
+
+}}}
+
+
+namespace boost { namespace proto
+{
+
+ // production for one or more quant
+ template<>
+ struct compiler<unary_plus_tag, xpressive::detail::seq_tag, void>
+ : xpressive::detail::generic_quant_compiler<true, 1, UINT_MAX-1>
+ {
+ };
+
+ // production for zero or more quant
+ template<>
+ struct compiler<unary_star_tag, xpressive::detail::seq_tag, void>
+ : xpressive::detail::generic_quant_compiler<true, 0, UINT_MAX-1>
+ {
+ };
+
+ // production for optional
+ template<>
+ struct compiler<logical_not_tag, xpressive::detail::seq_tag, void>
+ : xpressive::detail::generic_quant_compiler<true, 0, 1>
+ {
+ };
+
+ // production for generic quantifiers
+ template<unsigned int Min, unsigned int Max>
+ struct compiler<xpressive::detail::generic_quant_tag<Min, Max>, xpressive::detail::seq_tag, void>
+ : xpressive::detail::generic_quant_compiler<true, Min, Max>
+ {
+ };
+
+ // production for non-greedy quantifiers
+ template<>
+ struct compiler<unary_minus_tag, xpressive::detail::seq_tag, void>
+ : xpressive::detail::non_greedy_compiler
+ {
+ };
+
+}}
+
+#endif
diff --git a/boost/boost/xpressive/detail/static/productions/quant_traits.hpp b/boost/boost/xpressive/detail/static/productions/quant_traits.hpp
new file mode 100644
index 00000000000..0b0fd79201e
--- /dev/null
+++ b/boost/boost/xpressive/detail/static/productions/quant_traits.hpp
@@ -0,0 +1,102 @@
+///////////////////////////////////////////////////////////////////////////////
+// quant_traits.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_STATIC_PRODUCTIONS_QUANT_TRAITS_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_STATIC_PRODUCTIONS_QUANT_TRAITS_HPP_EAN_10_04_2005
+
+#include <boost/mpl/or.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/integral_c.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/xpressive/proto/proto.hpp>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+
+#ifdef BOOST_MSVC
+# pragma warning(push)
+# pragma warning(disable: 4307) // '+' : integral constant overflow
+#endif
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // generic_quant_tag
+ template<uint_t Min, uint_t Max>
+ struct generic_quant_tag
+ : proto::unary_tag
+ {
+ typedef mpl::integral_c<uint_t, Min> min_type;
+ typedef mpl::integral_c<uint_t, Max> max_type;
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // min_type / max_type
+ template<typename Tag>
+ struct min_type : Tag::min_type {};
+
+ template<>
+ struct min_type<proto::unary_plus_tag> : mpl::integral_c<uint_t, 1> {};
+
+ template<>
+ struct min_type<proto::unary_star_tag> : mpl::integral_c<uint_t, 0> {};
+
+ template<>
+ struct min_type<proto::logical_not_tag> : mpl::integral_c<uint_t, 0> {};
+
+ template<typename Tag>
+ struct max_type : Tag::max_type {};
+
+ template<>
+ struct max_type<proto::unary_plus_tag> : mpl::integral_c<uint_t, UINT_MAX-1> {};
+
+ template<>
+ struct max_type<proto::unary_star_tag> : mpl::integral_c<uint_t, UINT_MAX-1> {};
+
+ template<>
+ struct max_type<proto::logical_not_tag> : mpl::integral_c<uint_t, 1> {};
+
+ struct use_simple_repeat_predicate
+ {
+ template<typename Op, typename, typename>
+ struct apply
+ : use_simple_repeat<typename proto::arg_type<Op>::type>
+ {
+ };
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // is_greedy_quant
+ template<typename Xpr>
+ struct is_greedy_quant
+ : mpl::false_
+ {
+ };
+
+ template<typename Op, typename Tag>
+ struct is_greedy_quant<proto::unary_op<Op, Tag> >
+ : mpl::or_
+ <
+ is_same<Tag, proto::unary_plus_tag>
+ , is_same<Tag, proto::unary_star_tag>
+ , is_same<Tag, proto::logical_not_tag>
+ >
+ {
+ };
+
+ template<typename Op, uint_t Min, uint_t Max>
+ struct is_greedy_quant<proto::unary_op<Op, generic_quant_tag<Min, Max> > >
+ : mpl::true_
+ {
+ };
+
+}}}
+
+#ifdef BOOST_MSVC
+# pragma warning(pop)
+#endif
+
+#endif
diff --git a/boost/boost/xpressive/detail/static/productions/quant_transforms.hpp b/boost/boost/xpressive/detail/static/productions/quant_transforms.hpp
new file mode 100644
index 00000000000..1d2f2e3f6ad
--- /dev/null
+++ b/boost/boost/xpressive/detail/static/productions/quant_transforms.hpp
@@ -0,0 +1,185 @@
+///////////////////////////////////////////////////////////////////////////////
+// quant_transforms.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_STATIC_PRODUCTIONS_QUANT_TRANSFORMS_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_STATIC_PRODUCTIONS_QUANT_TRANSFORMS_HPP_EAN_10_04_2005
+
+#include <boost/mpl/size_t.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/mpl/not_equal_to.hpp>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/static/width_of.hpp>
+#include <boost/xpressive/proto/proto.hpp>
+#include <boost/xpressive/detail/static/productions/quant_traits.hpp>
+#include <boost/xpressive/detail/static/productions/marker_transform.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // simple_repeat_branch
+ template<bool Greedy, uint_t Min, uint_t Max>
+ struct simple_repeat_branch
+ {
+ typedef true_xpression state_type;
+
+ template<typename Op, typename State, typename>
+ struct apply
+ {
+ typedef static_xpression<simple_repeat_matcher<Op, Greedy>, State> type;
+ };
+
+ template<typename Op, typename State, typename Visitor>
+ static typename apply<Op, State, Visitor>::type
+ call(Op const &op, State const &state, Visitor &)
+ {
+ return make_static_xpression(simple_repeat_matcher<Op, Greedy>(op, Min, Max), state);
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // repeater_transform
+ template<bool Greedy, uint_t Min, uint_t Max>
+ struct repeater_transform
+ {
+ template<typename Op, typename, typename>
+ struct apply
+ {
+ typedef proto::binary_op
+ <
+ proto::unary_op<repeat_begin_matcher, proto::noop_tag>
+ , proto::binary_op
+ <
+ Op
+ , proto::unary_op<repeat_end_matcher<Greedy>, proto::noop_tag>
+ , proto::right_shift_tag
+ >
+ , proto::right_shift_tag
+ > type;
+ };
+
+ template<typename Op, typename State, typename Visitor>
+ static typename apply<Op, State, Visitor>::type
+ call(Op const &op, State const &, Visitor &)
+ {
+ // Get the mark_number from the begin_mark_matcher
+ int mark_number = proto::arg(proto::left(op)).mark_number_;
+ BOOST_ASSERT(0 != mark_number);
+
+ return proto::noop(repeat_begin_matcher(mark_number))
+ >> (op >> proto::noop(repeat_end_matcher<Greedy>(mark_number, Min, Max)));
+ }
+ };
+
+ template<typename Op>
+ epsilon_mark_matcher make_eps(Op const &op, epsilon_mark_matcher *)
+ {
+ return epsilon_mark_matcher(proto::arg(proto::left(op)).mark_number_);
+ }
+
+ template<typename Op>
+ epsilon_matcher make_eps(Op const &op, epsilon_matcher *)
+ {
+ return epsilon_matcher();
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // optional_transform
+ // make alternate with epsilon_mark_matcher
+ template<bool Greedy, typename Epsilon>
+ struct optional_transform
+ {
+ template<typename Op, typename, typename>
+ struct apply
+ {
+ typedef proto::binary_op
+ <
+ Op
+ , proto::unary_op<Epsilon, proto::noop_tag>
+ , proto::bitor_tag
+ > type;
+ };
+
+ template<typename Op, typename State, typename Visitor>
+ static typename apply<Op, State, Visitor>::type
+ call(Op const &op, State const &, Visitor &)
+ {
+ return op | proto::noop(make_eps(op, (Epsilon *)0));
+ }
+ };
+
+ template<typename Epsilon>
+ struct optional_transform<false, Epsilon>
+ {
+ template<typename Op, typename, typename>
+ struct apply
+ {
+ typedef proto::binary_op
+ <
+ proto::unary_op<Epsilon, proto::noop_tag>
+ , Op
+ , proto::bitor_tag
+ > type;
+ };
+
+ template<typename Op, typename State, typename Visitor>
+ static typename apply<Op, State, Visitor>::type
+ call(Op const &op, State const &, Visitor &)
+ {
+ return proto::noop(make_eps(op, (Epsilon *)0)) | op;
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // marker_if_transform
+ // Insert marker matchers before and after the expression
+ typedef proto::conditional_transform<
+ is_marker_predicate
+ , marker_assign_transform
+ , marker_transform
+ > marker_if_transform;
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // repeater_if_transform
+ // Insert repeat and marker matcher before and after the expression
+ template<bool Greedy, uint_t Min, uint_t Max>
+ struct repeater_if_transform
+ : proto::compose_transforms
+ <
+ marker_if_transform
+ , repeater_transform<Greedy, Min, Max>
+ >
+ {
+ };
+
+ // transform *foo to (+foo | nil)
+ template<bool Greedy, uint_t Max>
+ struct repeater_if_transform<Greedy, 0, Max>
+ : proto::compose_transforms
+ <
+ repeater_if_transform<Greedy, 1, Max>
+ , optional_transform<Greedy, epsilon_mark_matcher>
+ >
+ {
+ };
+
+ // transform !(foo) to (foo | nil), with care to make sure
+ // that !(s1= foo) sets s1 to null if foo doesn't match.
+ template<bool Greedy>
+ struct repeater_if_transform<Greedy, 0, 1>
+ : proto::conditional_transform
+ <
+ is_marker_predicate
+ , optional_transform<Greedy, epsilon_mark_matcher>
+ , optional_transform<Greedy, epsilon_matcher>
+ >
+ {
+ };
+
+}}}
+
+#endif
diff --git a/boost/boost/xpressive/detail/static/productions/set_compilers.hpp b/boost/boost/xpressive/detail/static/productions/set_compilers.hpp
new file mode 100644
index 00000000000..83094713fb8
--- /dev/null
+++ b/boost/boost/xpressive/detail/static/productions/set_compilers.hpp
@@ -0,0 +1,171 @@
+////////////////////////////////////////////////////////////////////////////
+// set_compilers.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_STATIC_PRODUCTIONS_SET_COMPILERS_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_STATIC_PRODUCTIONS_SET_COMPILERS_HPP_EAN_10_04_2005
+
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/proto/proto.hpp>
+#include <boost/xpressive/proto/compiler/fold.hpp>
+#include <boost/xpressive/proto/compiler/branch.hpp>
+#include <boost/xpressive/detail/utility/dont_care.hpp>
+#include <boost/xpressive/detail/utility/traits_utils.hpp>
+#include <boost/xpressive/detail/static/productions/domain_tags.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // set_branch
+ //
+ struct set_branch
+ {
+ typedef no_next state_type;
+
+ template<typename, typename State, typename>
+ struct apply
+ {
+ typedef State type;
+ };
+
+ template<typename Op, typename State, typename Visitor>
+ static State const &call(Op const &op, State const &state, Visitor &)
+ {
+ return state.set(set_branch::get_matcher(op)), state;
+ }
+
+ private:
+
+ template<typename Matcher>
+ static Matcher const &get_matcher(static_xpression<Matcher, no_next> const &xpr)
+ {
+ return xpr;
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // list_branch
+ struct list_branch
+ {
+ typedef int state_type; // not used
+
+ template<typename Op, typename State, typename>
+ struct apply
+ {
+ typedef static_xpression<Op, State> type;
+ };
+
+ template<typename Op, typename State>
+ static static_xpression<Op, State>
+ call(Op const &op, State const &state, dont_care)
+ {
+ return make_static_xpression(op, state);
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // list_noop_compiler
+ struct list_noop_compiler
+ {
+ template<typename, typename State, typename>
+ struct apply
+ {
+ typedef typename State::next_type type;
+ };
+
+ template<typename Op, typename State, typename Visitor>
+ static typename State::next_type
+ call(Op const &op, State const &state, Visitor &visitor)
+ {
+ typedef typename Visitor::char_type char_type;
+ char_type ch = char_cast<char_type>(proto::arg(op), visitor.traits());
+ return state.push_back(ch, visitor.traits());
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // list_assign_compiler
+ struct list_assign_compiler
+ {
+ template<typename Op, typename, typename Visitor>
+ struct apply
+ {
+ typedef typename Visitor::traits_type traits_type;
+ typedef set_matcher<traits_type, 1> type;
+ };
+
+ template<typename Op, typename State, typename Visitor>
+ static typename apply<Op, State, Visitor>::type
+ call(Op const &op, State const &, Visitor &visitor)
+ {
+ typedef typename Visitor::char_type char_type;
+ char_type ch = char_cast<char_type>(proto::arg(proto::right(op)), visitor.traits());
+ return typename apply<Op, State, Visitor>::type(ch, visitor.traits());
+ }
+ };
+
+}}}
+
+namespace boost { namespace proto
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // compilers for sets such as set['a' | range('a','z')]
+ template<>
+ struct compiler<bitor_tag, xpressive::detail::set_tag, void>
+ : fold_compiler<bitor_tag, xpressive::detail::set_tag>
+ {
+ };
+
+ template<>
+ struct compiler<noop_tag, xpressive::detail::set_tag, void>
+ : branch_compiler<xpressive::detail::set_branch, xpressive::detail::seq_tag>
+ {
+ };
+
+ template<>
+ struct compiler<complement_tag, xpressive::detail::set_tag, void>
+ : branch_compiler<xpressive::detail::set_branch, xpressive::detail::seq_tag>
+ {
+ };
+
+ template<>
+ struct compiler<comma_tag, xpressive::detail::set_tag, void>
+ : branch_compiler<xpressive::detail::set_branch, xpressive::detail::seq_tag>
+ {
+ };
+
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // compilers for list-initialized sets such as (set='a','b','c')
+ template<>
+ struct compiler<comma_tag, xpressive::detail::seq_tag, void>
+ : branch_compiler<xpressive::detail::list_branch, xpressive::detail::lst_tag>
+ {
+ };
+
+ template<>
+ struct compiler<comma_tag, xpressive::detail::lst_tag, void>
+ : fold_compiler<comma_tag, xpressive::detail::lst_tag, false>
+ {
+ };
+
+ template<>
+ struct compiler<noop_tag, xpressive::detail::lst_tag, void>
+ : xpressive::detail::list_noop_compiler
+ {
+ };
+
+ template<>
+ struct compiler<assign_tag, xpressive::detail::lst_tag, void>
+ : xpressive::detail::list_assign_compiler
+ {
+ };
+
+}}
+
+#endif
diff --git a/boost/boost/xpressive/detail/static/productions/transmogrify.hpp b/boost/boost/xpressive/detail/static/productions/transmogrify.hpp
new file mode 100644
index 00000000000..39dc2dac282
--- /dev/null
+++ b/boost/boost/xpressive/detail/static/productions/transmogrify.hpp
@@ -0,0 +1,200 @@
+///////////////////////////////////////////////////////////////////////////////
+// transmogrify.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_STATIC_PRODUCTIONS_TRANSMOGRIFY_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_STATIC_PRODUCTIONS_TRANSMOGRIFY_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <cstring> // for std::strlen
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/core/matchers.hpp>
+#include <boost/xpressive/detail/static/placeholders.hpp>
+#include <boost/xpressive/detail/utility/dont_care.hpp>
+#include <boost/xpressive/detail/utility/traits_utils.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+ ///////////////////////////////////////////////////////////////////////////////
+ // transmogrify
+ //
+ template<typename BidiIter, typename ICase, typename Traits, typename Matcher>
+ struct transmogrify
+ {
+ typedef Matcher type;
+
+ static type const &call(Matcher const &m, dont_care)
+ {
+ return m;
+ }
+ };
+
+ template<typename BidiIter, typename ICase, typename Traits>
+ struct transmogrify<BidiIter, ICase, Traits, assert_bol_placeholder>
+ {
+ typedef assert_bol_matcher<Traits> type;
+
+ template<typename Visitor>
+ static type call(assert_bol_placeholder, Visitor &visitor)
+ {
+ return type(visitor.traits());
+ }
+ };
+
+ template<typename BidiIter, typename ICase, typename Traits>
+ struct transmogrify<BidiIter, ICase, Traits, assert_eol_placeholder>
+ {
+ typedef assert_eol_matcher<Traits> type;
+
+ template<typename Visitor>
+ static type call(assert_eol_placeholder, Visitor &visitor)
+ {
+ return type(visitor.traits());
+ }
+ };
+
+ template<typename BidiIter, typename ICase, typename Traits>
+ struct transmogrify<BidiIter, ICase, Traits, logical_newline_placeholder>
+ {
+ typedef logical_newline_matcher<Traits> type;
+
+ template<typename Visitor>
+ static type call(logical_newline_placeholder, Visitor &visitor)
+ {
+ return type(visitor.traits());
+ }
+ };
+
+ template<typename BidiIter, typename ICase, typename Traits, typename Char, bool Not>
+ struct transmogrify<BidiIter, ICase, Traits, literal_placeholder<Char, Not> >
+ {
+ typedef typename iterator_value<BidiIter>::type char_type;
+ typedef literal_matcher<Traits, ICase::value, Not> type;
+
+ template<typename Visitor>
+ static type call(literal_placeholder<Char, Not> const &m, Visitor &visitor)
+ {
+ char_type ch = char_cast<char_type>(m.ch_, visitor.traits());
+ return type(ch, visitor.traits());
+ }
+ };
+
+ template<typename BidiIter, typename ICase, typename Traits, typename Char>
+ struct transmogrify<BidiIter, ICase, Traits, range_placeholder<Char> >
+ {
+ // By design, we don't widen character ranges.
+ typedef typename iterator_value<BidiIter>::type char_type;
+ BOOST_MPL_ASSERT((is_same<Char, char_type>));
+ typedef range_matcher<Traits, ICase::value> type;
+
+ template<typename Visitor>
+ static type call(range_placeholder<Char> const &m, Visitor &visitor)
+ {
+ return type(m.ch_min_, m.ch_max_, m.not_, visitor.traits());
+ }
+ };
+
+ template<typename BidiIter, typename ICase, typename Traits, typename Char>
+ struct transmogrify<BidiIter, ICase, Traits, string_placeholder<Char> >
+ {
+ typedef typename iterator_value<BidiIter>::type char_type;
+ typedef string_matcher<Traits, ICase::value> type;
+
+ template<typename Visitor>
+ static type call(string_placeholder<Char> const &m, Visitor &visitor)
+ {
+ return type(string_cast<char_type>(m.str_, visitor.traits()), visitor.traits());
+ }
+ };
+
+ template<typename BidiIter, typename ICase, typename Traits>
+ struct transmogrify<BidiIter, ICase, Traits, mark_placeholder>
+ {
+ typedef mark_matcher<Traits, ICase::value> type;
+
+ template<typename Visitor>
+ static type call(mark_placeholder const &m, Visitor &visitor)
+ {
+ return type(m.mark_number_, visitor.traits());
+ }
+ };
+
+ template<typename BidiIter, typename ICase, typename Traits>
+ struct transmogrify<BidiIter, ICase, Traits, posix_charset_placeholder>
+ {
+ typedef posix_charset_matcher<Traits> type;
+
+ template<typename Visitor>
+ static type call(posix_charset_placeholder const &m, Visitor &visitor)
+ {
+ char const *name_end = m.name_ + std::strlen(m.name_);
+ return type(visitor.traits().lookup_classname(m.name_, name_end, ICase::value), m.not_);
+ }
+ };
+
+ template<typename BidiIter, typename Traits, int Size>
+ struct transmogrify<BidiIter, mpl::true_, Traits, set_matcher<Traits, Size> >
+ {
+ typedef set_matcher<Traits, Size> type;
+
+ template<typename Visitor>
+ static type call(set_matcher<Traits, Size> m, Visitor &visitor)
+ {
+ m.nocase(visitor.traits());
+ return m;
+ }
+ };
+
+ template<typename BidiIter, typename ICase, typename Traits, typename Cond>
+ struct transmogrify<BidiIter, ICase, Traits, assert_word_placeholder<Cond> >
+ {
+ typedef assert_word_matcher<Cond, Traits> type;
+
+ template<typename Visitor>
+ static type call(dont_care, Visitor &visitor)
+ {
+ return type(visitor.traits());
+ }
+ };
+
+ template<typename BidiIter, typename ICase, typename Traits, bool ByRef>
+ struct transmogrify<BidiIter, ICase, Traits, regex_placeholder<BidiIter, ByRef> >
+ {
+ typedef typename mpl::if_c
+ <
+ ByRef
+ , regex_byref_matcher<BidiIter>
+ , regex_matcher<BidiIter>
+ >::type type;
+
+ static type call(regex_placeholder<BidiIter, ByRef> const &m, dont_care)
+ {
+ return type(m.impl_);
+ }
+ };
+
+ template<typename BidiIter, typename ICase, typename Traits>
+ struct transmogrify<BidiIter, ICase, Traits, self_placeholder>
+ {
+ typedef regex_byref_matcher<BidiIter> type;
+
+ template<typename Visitor>
+ static type call(self_placeholder, Visitor &visitor)
+ {
+ return type(visitor.self());
+ }
+ };
+
+}}}
+
+#endif
diff --git a/boost/boost/xpressive/detail/static/productions/visitor.hpp b/boost/boost/xpressive/detail/static/productions/visitor.hpp
new file mode 100644
index 00000000000..7ce62455b63
--- /dev/null
+++ b/boost/boost/xpressive/detail/static/productions/visitor.hpp
@@ -0,0 +1,142 @@
+///////////////////////////////////////////////////////////////////////////////
+// visitor.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_STATIC_PRODUCTIONS_VISITOR_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_STATIC_PRODUCTIONS_VISITOR_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/mpl/bind.hpp>
+#include <boost/shared_ptr.hpp>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/core/regex_impl.hpp>
+#include <boost/xpressive/detail/static/productions/transmogrify.hpp>
+#include <boost/xpressive/detail/core/matcher/mark_begin_matcher.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ template<typename BidiIter>
+ struct xpression_visitor_base
+ {
+ explicit xpression_visitor_base(shared_ptr<regex_impl<BidiIter> > const &self)
+ : impl_()
+ , self_(self)
+ {
+ }
+
+ void swap(xpression_visitor_base &that)
+ {
+ this->impl_.swap(that.impl_);
+ this->self_.swap(that.self_);
+ }
+
+ int get_hidden_mark()
+ {
+ return -(int)(++this->impl_.hidden_mark_count_);
+ }
+
+ void mark_number(int mark_number)
+ {
+ if(0 < mark_number)
+ {
+ this->impl_.mark_count_ =
+ (std::max)(this->impl_.mark_count_, (std::size_t)mark_number);
+ }
+ }
+
+ shared_ptr<regex_impl<BidiIter> > &self()
+ {
+ return this->self_;
+ }
+
+ regex_impl<BidiIter> &impl()
+ {
+ return this->impl_;
+ }
+
+ protected:
+
+ template<typename Matcher>
+ void visit_(Matcher const &)
+ {
+ // no-op
+ }
+
+ template<bool ByRef>
+ void visit_(regex_placeholder<BidiIter, ByRef> const &rex)
+ {
+ // when visiting an embedded regex, track the references
+ this->impl_.track_reference(rex.impl_);
+ }
+
+ void visit_(mark_placeholder const &backref)
+ {
+ // keep track of the largest mark number found
+ this->mark_number(backref.mark_number_);
+ }
+
+ void visit_(mark_begin_matcher const &mark_begin)
+ {
+ // keep track of the largest mark number found
+ this->mark_number(mark_begin.mark_number_);
+ }
+
+ private:
+
+ regex_impl<BidiIter> impl_;
+ shared_ptr<regex_impl<BidiIter> > self_;
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //
+ template<typename BidiIter, typename ICase, typename Traits>
+ struct xpression_visitor
+ : xpression_visitor_base<BidiIter>
+ {
+ typedef BidiIter iterator_type;
+ typedef ICase icase_type;
+ typedef Traits traits_type;
+ typedef typename boost::iterator_value<BidiIter>::type char_type;
+
+ explicit xpression_visitor(Traits const &tr, shared_ptr<regex_impl<BidiIter> > const &self)
+ : xpression_visitor_base<BidiIter>(self)
+ , traits_(tr)
+ {
+ }
+
+ template<typename Matcher>
+ struct apply
+ {
+ typedef typename transmogrify<BidiIter, ICase, Traits, Matcher>::type type;
+ };
+
+ template<typename Matcher>
+ typename apply<Matcher>::type
+ call(Matcher const &matcher)
+ {
+ this->visit_(matcher);
+ return transmogrify<BidiIter, ICase, Traits, Matcher>::call(matcher, *this);
+ }
+
+ Traits const &traits() const
+ {
+ return this->traits_;
+ }
+
+ private:
+
+ Traits traits_;
+ };
+
+}}}
+
+#endif
diff --git a/boost/boost/xpressive/detail/static/regex_operators.hpp b/boost/boost/xpressive/detail/static/regex_operators.hpp
new file mode 100644
index 00000000000..4625450a4ab
--- /dev/null
+++ b/boost/boost/xpressive/detail/static/regex_operators.hpp
@@ -0,0 +1,164 @@
+///////////////////////////////////////////////////////////////////////////////
+// regex_operators.hpp
+//
+// Copyright 2005 Eric Niebler. 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_XPRESSIVE_DETAIL_STATIC_REGEX_OPERATORS_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_STATIC_REGEX_OPERATORS_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/utility/enable_if.hpp>
+#include <boost/xpressive/proto/proto.hpp>
+#include <boost/xpressive/basic_regex.hpp>
+
+namespace boost { namespace xpressive
+{
+
+///////////////////////////////////////////////////////////////////////////////
+// operator +
+template<typename BidiIter>
+inline proto::unary_op
+<
+ proto::unary_op<basic_regex<BidiIter>, proto::noop_tag>
+ , proto::unary_plus_tag
+>
+operator +(basic_regex<BidiIter> const &regex)
+{
+ return +proto::noop(regex);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// operator *
+template<typename BidiIter>
+inline proto::unary_op
+<
+ proto::unary_op<basic_regex<BidiIter>, proto::noop_tag>
+ , proto::unary_star_tag
+>
+operator *(basic_regex<BidiIter> const &regex)
+{
+ return *proto::noop(regex);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// operator !
+template<typename BidiIter>
+inline proto::unary_op
+<
+ proto::unary_op<basic_regex<BidiIter>, proto::noop_tag>
+ , proto::logical_not_tag
+>
+operator !(basic_regex<BidiIter> const &regex)
+{
+ return !proto::noop(regex);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// operator >>
+template<typename Right, typename BidiIter>
+inline typename disable_if
+<
+ proto::is_op<Right>
+ , proto::binary_op
+ <
+ proto::unary_op<basic_regex<BidiIter>, proto::noop_tag>
+ , proto::unary_op<Right, proto::noop_tag>
+ , proto::right_shift_tag
+ >
+>::type
+operator >>(basic_regex<BidiIter> const &regex, Right const &right)
+{
+ return proto::noop(regex) >> proto::noop(right);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// operator >>
+template<typename BidiIter, typename Left>
+inline typename disable_if
+<
+ proto::is_op<Left>
+ , proto::binary_op
+ <
+ proto::unary_op<Left, proto::noop_tag>
+ , proto::unary_op<basic_regex<BidiIter>, proto::noop_tag>
+ , proto::right_shift_tag
+ >
+>::type
+operator >>(Left const &left, basic_regex<BidiIter> const &regex)
+{
+ return proto::noop(left) >> proto::noop(regex);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// operator >>
+template<typename BidiIter>
+inline proto::binary_op
+<
+ proto::unary_op<basic_regex<BidiIter>, proto::noop_tag>
+ , proto::unary_op<basic_regex<BidiIter>, proto::noop_tag>
+ , proto::right_shift_tag
+>
+operator >>(basic_regex<BidiIter> const &left, basic_regex<BidiIter> const &right)
+{
+ return proto::noop(left) >> proto::noop(right);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// operator |
+template<typename Right, typename BidiIter>
+inline typename disable_if
+<
+ proto::is_op<Right>
+ , proto::binary_op
+ <
+ proto::unary_op<basic_regex<BidiIter>, proto::noop_tag>
+ , proto::unary_op<Right, proto::noop_tag>
+ , proto::bitor_tag
+ >
+>::type
+operator |(basic_regex<BidiIter> const &regex, Right const &right)
+{
+ return proto::noop(regex) | proto::noop(right);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// operator |
+template<typename BidiIter, typename Left>
+inline typename disable_if
+<
+ proto::is_op<Left>
+ , proto::binary_op
+ <
+ proto::unary_op<Left, proto::noop_tag>
+ , proto::unary_op<basic_regex<BidiIter>, proto::noop_tag>
+ , proto::bitor_tag
+ >
+>::type
+operator |(Left const &left, basic_regex<BidiIter> const &regex)
+{
+ return proto::noop(left) | proto::noop(regex);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// operator |
+template<typename BidiIter>
+inline proto::binary_op
+<
+ proto::unary_op<basic_regex<BidiIter>, proto::noop_tag>
+ , proto::unary_op<basic_regex<BidiIter>, proto::noop_tag>
+ , proto::bitor_tag
+>
+operator |(basic_regex<BidiIter> const &left, basic_regex<BidiIter> const &right)
+{
+ return proto::noop(left) | proto::noop(right);
+}
+
+}}
+
+#endif
diff --git a/boost/boost/xpressive/detail/static/static.hpp b/boost/boost/xpressive/detail/static/static.hpp
new file mode 100644
index 00000000000..64dd0ca919c
--- /dev/null
+++ b/boost/boost/xpressive/detail/static/static.hpp
@@ -0,0 +1,292 @@
+///////////////////////////////////////////////////////////////////////////////
+// static.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_STATIC_STATIC_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_STATIC_STATIC_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/mpl/assert.hpp>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/core/state.hpp>
+#include <boost/xpressive/detail/core/linker.hpp>
+#include <boost/xpressive/detail/core/peeker.hpp>
+
+// Random thoughts:
+// - must support indirect repeat counts {$n,$m}
+// - add ws to eat whitespace (make *ws illegal)
+// - a{n,m} -> repeat<n,m>(a)
+// - a{$n,$m} -> repeat(n,m)(a)
+// - add nil to match nothing
+// - instead of s1, s2, etc., how about s[1], s[2], etc.? Needlessly verbose?
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+#ifdef BOOST_XPR_DEBUG_STACK
+///////////////////////////////////////////////////////////////////////////////
+// top_type
+//
+template<typename Top>
+struct top_type
+{
+ typedef Top type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// top_type
+//
+template<typename Top, typename Next>
+struct top_type<stacked_xpression<Top, Next> >
+{
+ typedef Next type;
+};
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// stacked_xpression
+//
+template<typename Top, typename Next>
+struct stacked_xpression
+ : Next
+{
+ // match
+ // delegates to Next
+ template<typename BidiIter>
+ bool match(state_type<BidiIter> &state) const
+ {
+ return static_cast<Next const *>(this)->
+ BOOST_NESTED_TEMPLATE push_match<Top>(state);
+ }
+
+ // top_match
+ // jump back to the xpression on top of the xpression stack,
+ // and keep the xpression on the stack.
+ template<typename BidiIter>
+ static bool top_match(state_type<BidiIter> &state, xpression_base const *top)
+ {
+ BOOST_XPR_DEBUG_STACK_ASSERT(typeid(*top) == typeid(typename top_type<Top>::type));
+ return static_cast<Top const *>(top)->
+ BOOST_NESTED_TEMPLATE push_match<Top>(state);
+ }
+
+ // pop_match
+ // jump back to the xpression on top of the xpression stack,
+ // pop the xpression off the stack.
+ template<typename BidiIter>
+ static bool pop_match(state_type<BidiIter> &state, xpression_base const *top)
+ {
+ BOOST_XPR_DEBUG_STACK_ASSERT(typeid(*top) == typeid(typename top_type<Top>::type));
+ return static_cast<Top const *>(top)->match(state);
+ }
+
+ // skip_match
+ // pop the xpression off the top of the stack and ignore it; call
+ // match on next.
+ template<typename BidiIter>
+ bool skip_match(state_type<BidiIter> &state) const
+ {
+ // could be static_xpression::skip_impl or stacked_xpression::skip_impl
+ // depending on if there is 1 or more than 1 xpression on the
+ // xpression stack
+ return Top::skip_impl(*static_cast<Next const *>(this), state);
+ }
+
+//protected:
+
+ // skip_impl
+ // implementation of skip_match.
+ template<typename That, typename BidiIter>
+ static bool skip_impl(That const &that, state_type<BidiIter> &state)
+ {
+ return that.BOOST_NESTED_TEMPLATE push_match<Top>(state);
+ }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// stacked_xpression_cast
+//
+template<typename Top, typename Next>
+inline stacked_xpression<Top, Next> const &stacked_xpression_cast(Next const &next)
+{
+ // NOTE: this is a little white lie. The "next" object doesn't really have
+ // the type to which we're casting it. It is harmless, though. We are only using
+ // the cast to decorate the next object with type information. It is done
+ // this way to save stack space.
+ BOOST_MPL_ASSERT_RELATION(sizeof(stacked_xpression<Top, Next>), ==, sizeof(Next));
+ return *static_cast<stacked_xpression<Top, Next> const *>(&next);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// static_xpression
+//
+template<typename Matcher, typename Next>
+struct static_xpression
+ : Matcher
+{
+ Next next_;
+
+ static_xpression(Matcher const &matcher = Matcher(), Next const &next = Next())
+ : Matcher(matcher)
+ , next_(next)
+ {
+ }
+
+ // match
+ // delegates to the Matcher
+ template<typename BidiIter>
+ bool match(state_type<BidiIter> &state) const
+ {
+ return this->Matcher::match(state, this->next_);
+ }
+
+ // push_match
+ // call match on this, but also push "Top" onto the xpression
+ // stack so we know what we are jumping back to later.
+ template<typename Top, typename BidiIter>
+ bool push_match(state_type<BidiIter> &state) const
+ {
+ return this->Matcher::match(state, stacked_xpression_cast<Top>(this->next_));
+ }
+
+ // skip_impl
+ // implementation of skip_match, called from stacked_xpression::skip_match
+ template<typename That, typename BidiIter>
+ static bool skip_impl(That const &that, state_type<BidiIter> &state)
+ {
+ return that.match(state);
+ }
+
+ // for linking a compiled regular xpression
+ template<typename Char>
+ void link(xpression_linker<Char> &linker) const
+ {
+ linker.link(*static_cast<Matcher const *>(this), &this->next_);
+ this->next_.link(linker);
+ }
+
+ // for building a lead-follow
+ template<typename Char>
+ void peek(xpression_peeker<Char> &peeker) const
+ {
+ this->peek_next_(peeker.peek(*static_cast<Matcher const *>(this)), peeker);
+ }
+
+ // for getting xpression width
+ template<typename BidiIter>
+ std::size_t get_width(state_type<BidiIter> *state) const
+ {
+ // BUGBUG this gets called from the simple_repeat_matcher::match(), so this is slow.
+ // or will the compiler be able to optimize this all away?
+ std::size_t this_width = this->Matcher::get_width(state);
+ if(this_width == unknown_width())
+ return unknown_width();
+ std::size_t that_width = this->next_.get_width(state);
+ if(that_width == unknown_width())
+ return unknown_width();
+ return this_width + that_width;
+ }
+
+private: // hide this
+
+ static_xpression &operator =(static_xpression const &);
+
+ template<typename Char>
+ void peek_next_(mpl::true_, xpression_peeker<Char> &peeker) const
+ {
+ this->next_.peek(peeker);
+ }
+
+ template<typename Char>
+ static void peek_next_(mpl::false_, xpression_peeker<Char> &)
+ {
+ // no-op
+ }
+
+ using Matcher::width;
+ using Matcher::pure;
+};
+
+// syntactic sugar so this xpression can be treated the same as
+// (a smart pointer to) a dynamic xpression from templates
+template<typename Matcher, typename Next>
+inline static_xpression<Matcher, Next> const *
+get_pointer(static_xpression<Matcher, Next> const &xpr)
+{
+ return &xpr;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// make_static_xpression
+//
+template<typename Matcher>
+inline static_xpression<Matcher> const
+make_static_xpression(Matcher const &matcher)
+{
+ return static_xpression<Matcher>(matcher);
+}
+
+template<typename Matcher, typename Next>
+inline static_xpression<Matcher, Next> const
+make_static_xpression(Matcher const &matcher, Next const &next)
+{
+ return static_xpression<Matcher, Next>(matcher, next);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// no_next
+//
+struct no_next
+ : xpression_base
+{
+ template<typename Char>
+ void link(xpression_linker<Char> &) const
+ {
+ }
+
+ template<typename Char>
+ void peek(xpression_peeker<Char> &peeker) const
+ {
+ peeker.fail();
+ }
+
+ template<typename BidiIter>
+ static std::size_t get_width(state_type<BidiIter> *)
+ {
+ return 0;
+ }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// alternates_list
+//
+template<typename Alternates>
+struct alternates_list
+ : Alternates
+{
+ alternates_list(Alternates const &alternates)
+ : Alternates(alternates)
+ {
+ }
+private:
+ alternates_list &operator =(alternates_list const &);
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// get_mark_number
+//
+inline int get_mark_number(mark_tag const &mark)
+{
+ return proto::arg(mark).mark_number_;
+}
+
+}}} // namespace boost::xpressive::detail
+
+#endif
diff --git a/boost/boost/xpressive/detail/static/type_traits.hpp b/boost/boost/xpressive/detail/static/type_traits.hpp
new file mode 100644
index 00000000000..10d19958391
--- /dev/null
+++ b/boost/boost/xpressive/detail/static/type_traits.hpp
@@ -0,0 +1,91 @@
+///////////////////////////////////////////////////////////////////////////////
+// type_traits.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_STATIC_TYPE_TRAITS_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_STATIC_TYPE_TRAITS_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/ref.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+///////////////////////////////////////////////////////////////////////////////
+// is_static_xpression
+//
+template<typename T>
+struct is_static_xpression
+ : mpl::false_
+{
+};
+
+template<typename Matcher, typename Next>
+struct is_static_xpression<static_xpression<Matcher, Next> >
+ : mpl::true_
+{
+};
+
+template<typename Top, typename Next>
+struct is_static_xpression<stacked_xpression<Top, Next> >
+ : mpl::true_
+{
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// is_regex
+//
+template<typename Xpr>
+struct is_regex
+ : mpl::false_
+{
+};
+
+template<typename BidiIter>
+struct is_regex<basic_regex<BidiIter> >
+ : mpl::true_
+{
+};
+
+template<typename BidiIter>
+struct is_regex<reference_wrapper<basic_regex<BidiIter> > >
+ : mpl::true_
+{
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// is_modifiable
+//
+template<typename Xpr>
+struct is_modifiable
+ : mpl::not_<is_regex<Xpr> >
+{
+};
+
+//////////////////////////////////////////////////////////////////////////
+// is_random
+//
+template<typename BidiIter>
+struct is_random
+ : is_convertible
+ <
+ typename iterator_category<BidiIter>::type
+ , std::random_access_iterator_tag
+ >
+{
+};
+
+}}} // namespace boost::xpressive::detail
+
+#endif
diff --git a/boost/boost/xpressive/detail/static/width_of.hpp b/boost/boost/xpressive/detail/static/width_of.hpp
new file mode 100644
index 00000000000..db90b2a6bd0
--- /dev/null
+++ b/boost/boost/xpressive/detail/static/width_of.hpp
@@ -0,0 +1,267 @@
+///////////////////////////////////////////////////////////////////////////////
+// width_of.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_STATIC_WIDTH_OF_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_STATIC_WIDTH_OF_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <vector>
+#include <boost/ref.hpp>
+#include <boost/shared_ptr.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/fold.hpp>
+#include <boost/mpl/plus.hpp>
+#include <boost/mpl/front.hpp>
+#include <boost/mpl/times.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/mpl/lambda.hpp>
+#include <boost/mpl/size_t.hpp>
+#include <boost/mpl/logical.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/equal_to.hpp>
+#include <boost/mpl/transform_view.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/static/as_xpr.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+ ///////////////////////////////////////////////////////////////////////////////
+ // add_width
+ template<typename X, typename Y>
+ struct add_width
+ : mpl::eval_if
+ <
+ mpl::or_
+ <
+ mpl::equal_to<X, unknown_width>
+ , mpl::equal_to<Y, unknown_width>
+ >
+ , mpl::identity<unknown_width>
+ , mpl::plus<X, Y>
+ >::type
+ {
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // mult_width
+ template<typename X, typename Y>
+ struct mult_width
+ : mpl::eval_if
+ <
+ mpl::or_
+ <
+ mpl::equal_to<X, unknown_width>
+ , mpl::equal_to<Y, unknown_width>
+ >
+ , mpl::identity<unknown_width>
+ , mpl::times<X, Y>
+ >::type
+ {
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // equal_width
+ template<typename X, typename Y>
+ struct equal_width
+ : mpl::if_
+ <
+ mpl::equal_to<X, Y>
+ , X
+ , unknown_width
+ >::type
+ {
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // width_of
+ //
+ template<typename Xpr>
+ struct width_of;
+
+ template<>
+ struct width_of<no_next>
+ : mpl::size_t<0>
+ {
+ };
+
+ template<typename Matcher>
+ struct width_of<proto::unary_op<Matcher, proto::noop_tag> >
+ : as_matcher_type<Matcher>::type::width
+ {
+ };
+
+ template<typename Left, typename Right>
+ struct width_of<proto::binary_op<Left, Right, proto::right_shift_tag> >
+ : add_width<width_of<Left>, width_of<Right> >
+ {
+ };
+
+ template<typename Left, typename Right>
+ struct width_of<proto::binary_op<Left, Right, proto::bitor_tag> >
+ : equal_width<width_of<Left>, width_of<Right> >
+ {
+ };
+
+ template<typename Right>
+ struct width_of<proto::binary_op<mark_tag, Right, proto::assign_tag> >
+ : width_of<Right>
+ {
+ };
+
+ template<typename Right>
+ struct width_of<proto::binary_op<set_initializer_type, Right, proto::assign_tag> >
+ : mpl::size_t<1>
+ {
+ };
+
+ template<typename Modifier, typename Xpr>
+ struct width_of<proto::binary_op<Modifier, Xpr, modifier_tag> >
+ : width_of<Xpr>
+ {
+ };
+
+ template<typename Xpr, bool Positive>
+ struct width_of<proto::unary_op<Xpr, lookahead_tag<Positive> > >
+ : mpl::size_t<0>
+ {
+ };
+
+ template<typename Xpr, bool Positive>
+ struct width_of<proto::unary_op<Xpr, lookbehind_tag<Positive> > >
+ : mpl::size_t<0>
+ {
+ };
+
+ template<typename Xpr>
+ struct width_of<proto::unary_op<Xpr, keeper_tag> >
+ : width_of<Xpr>
+ {
+ };
+
+ template<typename Matcher, typename Next>
+ struct width_of<static_xpression<Matcher, Next> >
+ : add_width<typename Matcher::width, width_of<Next> >
+ {
+ };
+
+ template<typename BidiIter>
+ struct width_of<shared_ptr<matchable<BidiIter> const> >
+ : unknown_width
+ {
+ };
+
+ template<typename BidiIter>
+ struct width_of<std::vector<shared_ptr<matchable<BidiIter> const> > >
+ : unknown_width
+ {
+ };
+
+ template<typename BidiIter>
+ struct width_of<proto::unary_op<basic_regex<BidiIter>, proto::noop_tag> >
+ : unknown_width
+ {
+ };
+
+ template<typename BidiIter>
+ struct width_of<proto::unary_op<reference_wrapper<basic_regex<BidiIter> const>, proto::noop_tag> >
+ : unknown_width
+ {
+ };
+
+ template<typename Op>
+ struct width_of<proto::unary_op<Op, proto::unary_plus_tag> >
+ : unknown_width
+ {
+ };
+
+ template<typename Op>
+ struct width_of<proto::unary_op<Op, proto::unary_star_tag> >
+ : unknown_width
+ {
+ };
+
+ template<typename Op>
+ struct width_of<proto::unary_op<Op, proto::logical_not_tag> >
+ : unknown_width
+ {
+ };
+
+ template<typename Op, uint_t Min, uint_t Max>
+ struct width_of<proto::unary_op<Op, generic_quant_tag<Min, Max> > >
+ : mpl::if_c<Min==Max, mult_width<width_of<Op>, mpl::size_t<Min> >, unknown_width>::type
+ {
+ };
+
+ template<typename Op>
+ struct width_of<proto::unary_op<Op, proto::unary_minus_tag> >
+ : width_of<Op>
+ {
+ };
+
+ // when complementing a set or an assertion, the width is that of the set (1) or the assertion (0)
+ template<typename Op>
+ struct width_of<proto::unary_op<Op, proto::complement_tag> >
+ : width_of<Op>
+ {
+ };
+
+ // The comma is used in list-initialized sets, and the width of sets are 1
+ template<typename Left, typename Right>
+ struct width_of<proto::binary_op<Left, Right, proto::comma_tag> >
+ : mpl::size_t<1>
+ {
+ };
+
+ // The subscript operator[] is used for sets, as in set['a' | range('b','h')],
+ // or for actions as in (any >> expr)[ action ]
+ template<typename Left, typename Right>
+ struct width_of<proto::binary_op<Left, Right, proto::subscript_tag> >
+ : mpl::if_<is_same<Left, set_initializer_type>, mpl::size_t<1>, width_of<Left> >::type
+ {
+ // If Left is "set" then make sure that Right has a width_of 1
+ BOOST_MPL_ASSERT
+ ((
+ mpl::or_
+ <
+ mpl::not_<is_same<Left, set_initializer_type> >
+ , mpl::equal_to<width_of<Right>, mpl::size_t<1> >
+ >
+ ));
+ };
+
+ // The width of a list of alternates is N if all the alternates have width N, otherwise unknown_width
+ template<typename Widths>
+ struct alt_width_of
+ : mpl::fold
+ <
+ Widths
+ , typename mpl::front<Widths>::type
+ , equal_width<mpl::_1, mpl::_2>
+ >::type
+ {
+ };
+
+ template<typename Alternates>
+ struct width_of<alternates_list<Alternates> >
+ : alt_width_of<mpl::transform_view<Alternates, width_of<mpl::_1> > >
+ {
+ };
+
+ template<typename Op, typename Arg>
+ struct width_of<proto::op_proxy<Op, Arg> >
+ : width_of<Op>
+ {
+ };
+
+}}} // namespace boost::xpressive::detail
+
+#endif
diff --git a/boost/boost/xpressive/detail/utility/algorithm.hpp b/boost/boost/xpressive/detail/utility/algorithm.hpp
new file mode 100644
index 00000000000..fa94c0c693d
--- /dev/null
+++ b/boost/boost/xpressive/detail/utility/algorithm.hpp
@@ -0,0 +1,102 @@
+///////////////////////////////////////////////////////////////////////////////
+// algorithm.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_UTILITY_ALGORITHM_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_UTILITY_ALGORITHM_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <climits>
+#include <algorithm>
+#include <boost/iterator/iterator_traits.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+///////////////////////////////////////////////////////////////////////////////
+// any
+//
+template<typename InIter, typename Pred>
+inline bool any(InIter begin, InIter end, Pred pred)
+{
+ return end != std::find_if(begin, end, pred);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// find_nth_if
+//
+template<typename FwdIter, typename Diff, typename Pred>
+FwdIter find_nth_if(FwdIter begin, FwdIter end, Diff count, Pred pred)
+{
+ for(; begin != end; ++begin)
+ {
+ if(pred(*begin) && 0 == count--)
+ {
+ return begin;
+ }
+ }
+
+ return end;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// toi
+//
+template<typename InIter, typename Traits>
+int toi(InIter &begin, InIter end, Traits const &traits, int radix = 10, int max = INT_MAX)
+{
+ int i = 0, c = 0;
+ for(; begin != end && -1 != (c = traits.value(*begin, radix)); ++begin)
+ {
+ if(max < ((i *= radix) += c))
+ return i / radix;
+ }
+ return i;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// advance_to
+//
+template<typename BidiIter, typename Diff>
+inline bool advance_to_impl(BidiIter & iter, Diff diff, BidiIter end, std::bidirectional_iterator_tag)
+{
+ for(; 0 < diff && iter != end; --diff)
+ ++iter;
+ for(; 0 > diff && iter != end; ++diff)
+ --iter;
+ return 0 == diff;
+}
+
+template<typename RandIter, typename Diff>
+inline bool advance_to_impl(RandIter & iter, Diff diff, RandIter end, std::random_access_iterator_tag)
+{
+ if(0 < diff)
+ {
+ if((end - iter) < diff)
+ return false;
+ }
+ else if(0 > diff)
+ {
+ if((iter - end) < -diff)
+ return false;
+ }
+ iter += diff;
+ return true;
+}
+
+template<typename Iter, typename Diff>
+inline bool advance_to(Iter & iter, Diff diff, Iter end)
+{
+ return detail::advance_to_impl(iter, diff, end, typename iterator_category<Iter>::type());
+}
+
+}}}
+
+#endif
diff --git a/boost/boost/xpressive/detail/utility/any.hpp b/boost/boost/xpressive/detail/utility/any.hpp
new file mode 100644
index 00000000000..fcdfef8687a
--- /dev/null
+++ b/boost/boost/xpressive/detail/utility/any.hpp
@@ -0,0 +1,103 @@
+///////////////////////////////////////////////////////////////////////////////
+// any.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_UTILITY_ANY_HPP_EAN_11_19_2005
+#define BOOST_XPRESSIVE_DETAIL_UTILITY_ANY_HPP_EAN_11_19_2005
+
+#include <boost/version.hpp>
+
+#if BOOST_VERSION >= 103300
+
+// In Boost 1.33+, we have a cons list in Fusion, so just include it.
+# include <boost/spirit/fusion/algorithm/any.hpp>
+
+#else
+
+# include <boost/spirit/fusion/sequence/begin.hpp>
+# include <boost/spirit/fusion/sequence/end.hpp>
+# include <boost/spirit/fusion/iterator/equal_to.hpp>
+# include <boost/mpl/bool.hpp>
+# include <boost/spirit/fusion/iterator/equal_to.hpp>
+# include <boost/spirit/fusion/iterator/next.hpp>
+# include <boost/spirit/fusion/iterator/deref.hpp>
+
+namespace boost { namespace fusion
+{
+
+ namespace detail
+ {
+ template <typename First, typename Last, typename F>
+ inline bool
+ any(First const&, Last const&, F const&, mpl::true_)
+ {
+ return false;
+ }
+
+ template <typename First, typename Last, typename F>
+ inline bool
+ any(First const& first, Last const& last, F const& f, mpl::false_)
+ {
+ if(f(*first))
+ return true;
+ return detail::any(fusion::next(first), last, f
+ , meta::equal_to<BOOST_DEDUCED_TYPENAME meta::next<First>::type, Last>());
+ }
+ }
+
+ namespace meta
+ {
+ template <typename Sequence, typename F>
+ struct any
+ {
+ typedef bool type;
+ };
+ }
+
+ namespace function
+ {
+ struct any
+ {
+ template <typename Sequence, typename F>
+ struct apply
+ {
+ typedef bool type;
+ };
+
+ template <typename Sequence, typename F>
+ inline bool
+ operator()(Sequence const& seq, F const& f) const
+ {
+ return detail::any(
+ fusion::begin(seq)
+ , fusion::end(seq)
+ , f
+ , meta::equal_to<
+ BOOST_DEDUCED_TYPENAME meta::begin<Sequence>::type
+ , BOOST_DEDUCED_TYPENAME meta::end<Sequence>::type>());
+ }
+
+ template <typename Sequence, typename F>
+ inline bool
+ operator()(Sequence& seq, F const& f) const
+ {
+ return detail::any(
+ fusion::begin(seq)
+ , fusion::end(seq)
+ , f
+ , meta::equal_to<
+ BOOST_DEDUCED_TYPENAME meta::begin<Sequence>::type
+ , BOOST_DEDUCED_TYPENAME meta::end<Sequence>::type>());
+ }
+ };
+ }
+
+ function::any const any = function::any();
+}}
+
+#endif
+
+#endif
diff --git a/boost/boost/xpressive/detail/utility/boyer_moore.hpp b/boost/boost/xpressive/detail/utility/boyer_moore.hpp
new file mode 100644
index 00000000000..4c71d48886b
--- /dev/null
+++ b/boost/boost/xpressive/detail/utility/boyer_moore.hpp
@@ -0,0 +1,201 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file boyer_moore.hpp
+/// Contains the boyer-moore implementation. Note: this is *not* a general-
+/// purpose boyer-moore implementation. It truncates the search string at
+/// 256 characters, but it is sufficient for the needs of xpressive.
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_BOYER_MOORE_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_BOYER_MOORE_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+# pragma warning(push)
+# pragma warning(disable : 4100) // unreferenced formal parameter
+#endif
+
+#include <climits> // for UCHAR_MAX
+#include <cstddef> // for std::ptrdiff_t
+#include <utility> // for std::max
+#include <vector>
+#include <boost/mpl/bool.hpp>
+#include <boost/noncopyable.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+///////////////////////////////////////////////////////////////////////////////
+// boyer_moore
+//
+template<typename BidiIter, typename Traits>
+struct boyer_moore
+ : noncopyable
+{
+ typedef typename iterator_value<BidiIter>::type char_type;
+ typedef Traits traits_type;
+ typedef is_convertible<
+ typename Traits::version_tag *
+ , regex_traits_version_1_case_fold_tag *
+ > case_fold;
+ typedef typename Traits::string_type string_type;
+
+ // initialize the Boyer-Moore search data structure, using the
+ // search sub-sequence to prime the pump.
+ boyer_moore(char_type const *begin, char_type const *end, Traits const &traits, bool icase)
+ : begin_(begin)
+ , last_(begin)
+ , fold_()
+ , find_fun_(
+ icase
+ ? (case_fold() ? &boyer_moore::find_nocase_fold_ : &boyer_moore::find_nocase_)
+ : &boyer_moore::find_
+ )
+ {
+ std::ptrdiff_t const uchar_max = UCHAR_MAX;
+ std::ptrdiff_t diff = std::distance(begin, end);
+ this->length_ = static_cast<unsigned char>((std::min)(diff, uchar_max));
+ std::fill_n(static_cast<unsigned char *>(this->offsets_), uchar_max + 1, this->length_);
+ --this->length_;
+
+ icase ? this->init_(traits, case_fold()) : this->init_(traits, mpl::false_());
+ }
+
+ BidiIter find(BidiIter begin, BidiIter end, Traits const &traits) const
+ {
+ return (this->*this->find_fun_)(begin, end, traits);
+ }
+
+private:
+
+ void init_(Traits const &traits, mpl::false_)
+ {
+ for(unsigned char offset = this->length_; offset; --offset, ++this->last_)
+ {
+ this->offsets_[traits.hash(*this->last_)] = offset;
+ }
+ }
+
+ void init_(Traits const &traits, mpl::true_)
+ {
+ this->fold_.reserve(this->length_ + 1);
+ for(unsigned char offset = this->length_; offset; --offset, ++this->last_)
+ {
+ this->fold_.push_back(traits.fold_case(*this->last_));
+ for(typename string_type::const_iterator beg = this->fold_.back().begin(), end = this->fold_.back().end();
+ beg != end; ++beg)
+ {
+ this->offsets_[traits.hash(*beg)] = offset;
+ }
+ }
+ this->fold_.push_back(traits.fold_case(*this->last_));
+ }
+
+ // case-sensitive Boyer-Moore search
+ BidiIter find_(BidiIter begin, BidiIter end, Traits const &traits) const
+ {
+ typedef typename boost::iterator_difference<BidiIter>::type diff_type;
+ diff_type const endpos = std::distance(begin, end);
+ diff_type offset = static_cast<diff_type>(this->length_);
+
+ for(diff_type curpos = offset; curpos < endpos; curpos += offset)
+ {
+ std::advance(begin, offset);
+
+ char_type const *pat_tmp = this->last_;
+ BidiIter str_tmp = begin;
+
+ for(; traits.translate(*str_tmp) == *pat_tmp; --pat_tmp, --str_tmp)
+ {
+ if(pat_tmp == this->begin_)
+ {
+ return str_tmp;
+ }
+ }
+
+ offset = this->offsets_[traits.hash(traits.translate(*begin))];
+ }
+
+ return end;
+ }
+
+ // case-insensitive Boyer-Moore search
+ BidiIter find_nocase_(BidiIter begin, BidiIter end, Traits const &traits) const
+ {
+ typedef typename boost::iterator_difference<BidiIter>::type diff_type;
+ diff_type const endpos = std::distance(begin, end);
+ diff_type offset = static_cast<diff_type>(this->length_);
+
+ for(diff_type curpos = offset; curpos < endpos; curpos += offset)
+ {
+ std::advance(begin, offset);
+
+ char_type const *pat_tmp = this->last_;
+ BidiIter str_tmp = begin;
+
+ for(; traits.translate_nocase(*str_tmp) == *pat_tmp; --pat_tmp, --str_tmp)
+ {
+ if(pat_tmp == this->begin_)
+ {
+ return str_tmp;
+ }
+ }
+
+ offset = this->offsets_[traits.hash(traits.translate_nocase(*begin))];
+ }
+
+ return end;
+ }
+
+ // case-insensitive Boyer-Moore search with case-folding
+ BidiIter find_nocase_fold_(BidiIter begin, BidiIter end, Traits const &traits) const
+ {
+ typedef typename boost::iterator_difference<BidiIter>::type diff_type;
+ diff_type const endpos = std::distance(begin, end);
+ diff_type offset = static_cast<diff_type>(this->length_);
+
+ for(diff_type curpos = offset; curpos < endpos; curpos += offset)
+ {
+ std::advance(begin, offset);
+
+ string_type const *pat_tmp = &this->fold_.back();
+ BidiIter str_tmp = begin;
+
+ for(; pat_tmp->end() != std::find(pat_tmp->begin(), pat_tmp->end(), *str_tmp);
+ --pat_tmp, --str_tmp)
+ {
+ if(pat_tmp == &this->fold_.front())
+ {
+ return str_tmp;
+ }
+ }
+
+ offset = this->offsets_[traits.hash(*begin)];
+ }
+
+ return end;
+ }
+
+private:
+
+ char_type const *begin_;
+ char_type const *last_;
+ std::vector<string_type> fold_;
+ BidiIter (boyer_moore::*const find_fun_)(BidiIter, BidiIter, Traits const &) const;
+ unsigned char length_;
+ unsigned char offsets_[UCHAR_MAX + 1];
+};
+
+}}} // namespace boost::xpressive::detail
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma warning(pop)
+#endif
+
+#endif
diff --git a/boost/boost/xpressive/detail/utility/chset/basic_chset.hpp b/boost/boost/xpressive/detail/utility/chset/basic_chset.hpp
new file mode 100644
index 00000000000..1f203ca556f
--- /dev/null
+++ b/boost/boost/xpressive/detail/utility/chset/basic_chset.hpp
@@ -0,0 +1,150 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Joel de Guzman
+ Copyright (c) 2001-2003 Daniel Nuffer
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_XPRESSIVE_SPIRIT_BASIC_CHSET_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_SPIRIT_BASIC_CHSET_HPP_EAN_10_04_2005
+
+///////////////////////////////////////////////////////////////////////////////
+#include <bitset>
+#include <boost/mpl/bool.hpp>
+#include <boost/xpressive/detail/utility/chset/range_run.ipp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+///////////////////////////////////////////////////////////////////////////
+//
+// basic_chset: basic character set implementation using range_run
+//
+///////////////////////////////////////////////////////////////////////////
+template<typename Char>
+struct basic_chset
+{
+ basic_chset();
+ basic_chset(basic_chset const &arg);
+
+ bool empty() const;
+ void set(Char from, Char to);
+ template<typename Traits>
+ void set(Char from, Char to, Traits const &traits);
+ void set(Char c);
+ template<typename Traits>
+ void set(Char c, Traits const &traits);
+
+ void clear(Char from, Char to);
+ template<typename Traits>
+ void clear(Char from, Char to, Traits const &traits);
+ void clear(Char c);
+ template<typename Traits>
+ void clear(Char c, Traits const &traits);
+ void clear();
+
+ template<typename Traits>
+ bool test(Char v, Traits const &traits, mpl::false_) const; // case-sensitive
+ template<typename Traits>
+ bool test(Char v, Traits const &traits, mpl::true_) const; // case-insensitive
+
+ void inverse();
+ void swap(basic_chset& x);
+
+ basic_chset &operator |=(basic_chset const &x);
+ basic_chset &operator &=(basic_chset const &x);
+ basic_chset &operator -=(basic_chset const &x);
+ basic_chset &operator ^=(basic_chset const &x);
+
+private:
+ range_run<Char> rr_;
+};
+
+#if(CHAR_BIT == 8)
+
+///////////////////////////////////////////////////////////////////////////
+//
+// basic_chset: specializations for 8 bit chars using std::bitset
+//
+///////////////////////////////////////////////////////////////////////////
+template<typename Char>
+struct basic_chset_8bit
+{
+ basic_chset_8bit();
+ basic_chset_8bit(basic_chset_8bit const &arg);
+
+ bool empty() const;
+
+ void set(Char from, Char to);
+ template<typename Traits>
+ void set(Char from, Char to, Traits const &traits);
+ void set(Char c);
+ template<typename Traits>
+ void set(Char c, Traits const &traits);
+
+ void clear(Char from, Char to);
+ template<typename Traits>
+ void clear(Char from, Char to, Traits const &traits);
+ void clear(Char c);
+ template<typename Traits>
+ void clear(Char c, Traits const &traits);
+ void clear();
+
+ template<typename Traits>
+ bool test(Char v, Traits const &traits, mpl::false_) const; // case-sensitive
+ template<typename Traits>
+ bool test(Char v, Traits const &traits, mpl::true_) const; // case-insensitive
+
+ void inverse();
+ void swap(basic_chset_8bit& x);
+
+ basic_chset_8bit &operator |=(basic_chset_8bit const &x);
+ basic_chset_8bit &operator &=(basic_chset_8bit const &x);
+ basic_chset_8bit &operator -=(basic_chset_8bit const &x);
+ basic_chset_8bit &operator ^=(basic_chset_8bit const &x);
+
+ std::bitset<256> const &base() const;
+
+private:
+ std::bitset<256> bset_; // BUGBUG range-checking slows this down
+};
+
+/////////////////////////////////
+template<>
+struct basic_chset<char>
+ : basic_chset_8bit<char>
+{
+};
+
+/////////////////////////////////
+template<>
+struct basic_chset<signed char>
+ : basic_chset_8bit<signed char>
+{
+};
+
+/////////////////////////////////
+template<>
+struct basic_chset<unsigned char>
+ : basic_chset_8bit<unsigned char>
+{
+};
+
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// helpers
+template<typename Char, typename Traits>
+void set_char(basic_chset<Char> &chset, Char ch, Traits const &traits, bool icase);
+
+template<typename Char, typename Traits>
+void set_range(basic_chset<Char> &chset, Char from, Char to, Traits const &traits, bool icase);
+
+template<typename Char, typename Traits>
+void set_class(basic_chset<Char> &chset, typename Traits::char_class_type char_class, bool no, Traits const &traits);
+
+}}} // namespace boost::xpressive::detail
+
+#endif
diff --git a/boost/boost/xpressive/detail/utility/chset/basic_chset.ipp b/boost/boost/xpressive/detail/utility/chset/basic_chset.ipp
new file mode 100644
index 00000000000..6cd855a1d53
--- /dev/null
+++ b/boost/boost/xpressive/detail/utility/chset/basic_chset.ipp
@@ -0,0 +1,409 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Joel de Guzman
+ Copyright (c) 2001-2003 Daniel Nuffer
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_XPRESSIVE_SPIRIT_BASIC_CHSET_IPP
+#define BOOST_XPRESSIVE_SPIRIT_BASIC_CHSET_IPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <bitset>
+#include <boost/xpressive/detail/utility/chset/basic_chset.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace xpressive { namespace detail
+{
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// basic_chset: character set implementation
+//
+///////////////////////////////////////////////////////////////////////////////
+template<typename Char>
+inline basic_chset<Char>::basic_chset()
+{
+}
+
+//////////////////////////////////
+template<typename Char>
+inline basic_chset<Char>::basic_chset(basic_chset const &arg)
+ : rr_(arg.rr_)
+{
+}
+
+//////////////////////////////////
+template<typename Char>
+inline bool basic_chset<Char>::empty() const
+{
+ return this->rr_.empty();
+}
+
+//////////////////////////////////
+template<typename Char>
+template<typename Traits>
+inline bool basic_chset<Char>::test(Char v, Traits const &, mpl::false_) const // case-sensitive
+{
+ return this->rr_.test(v);
+}
+
+//////////////////////////////////
+template<typename Char>
+template<typename Traits>
+inline bool basic_chset<Char>::test(Char v, Traits const &traits, mpl::true_) const // case-insensitive
+{
+ return this->rr_.test(v, traits);
+}
+
+//////////////////////////////////
+template<typename Char>
+inline void basic_chset<Char>::set(Char from, Char to)
+{
+ this->rr_.set(range<Char>(from, to));
+}
+
+//////////////////////////////////
+template<typename Char>
+template<typename Traits>
+inline void basic_chset<Char>::set(Char from, Char to, Traits const &)
+{
+ this->rr_.set(range<Char>(from, to));
+}
+
+//////////////////////////////////
+template<typename Char>
+inline void basic_chset<Char>::set(Char c)
+{
+ this->rr_.set(range<Char>(c, c));
+}
+
+//////////////////////////////////
+template<typename Char>
+template<typename Traits>
+inline void basic_chset<Char>::set(Char c, Traits const &)
+{
+ this->rr_.set(range<Char>(c, c));
+}
+
+//////////////////////////////////
+template<typename Char>
+inline void basic_chset<Char>::clear(Char c)
+{
+ this->rr_.clear(range<Char>(c, c));
+}
+
+//////////////////////////////////
+template<typename Char>
+template<typename Traits>
+inline void basic_chset<Char>::clear(Char c, Traits const &)
+{
+ this->rr_.clear(range<Char>(c, c));
+}
+
+//////////////////////////////////
+template<typename Char>
+inline void basic_chset<Char>::clear(Char from, Char to)
+{
+ this->rr_.clear(range<Char>(from, to));
+}
+
+//////////////////////////////////
+template<typename Char>
+template<typename Traits>
+inline void basic_chset<Char>::clear(Char from, Char to, Traits const &)
+{
+ this->rr_.clear(range<Char>(from, to));
+}
+
+//////////////////////////////////
+template<typename Char>
+inline void basic_chset<Char>::clear()
+{
+ this->rr_.clear();
+}
+
+/////////////////////////////////
+template<typename Char>
+inline void basic_chset<Char>::inverse()
+{
+ // BUGBUG is this right? Does this handle icase correctly?
+ basic_chset<Char> inv;
+ inv.set((std::numeric_limits<Char>::min)(), (std::numeric_limits<Char>::max)());
+ inv -= *this;
+ this->swap(inv);
+}
+
+/////////////////////////////////
+template<typename Char>
+inline void basic_chset<Char>::swap(basic_chset<Char> &that)
+{
+ this->rr_.swap(that.rr_);
+}
+
+/////////////////////////////////
+template<typename Char>
+inline basic_chset<Char> &
+basic_chset<Char>::operator |=(basic_chset<Char> const &that)
+{
+ typedef typename range_run<Char>::const_iterator const_iterator;
+ for(const_iterator iter = that.rr_.begin(); iter != that.rr_.end(); ++iter)
+ {
+ this->rr_.set(*iter);
+ }
+ return *this;
+}
+
+/////////////////////////////////
+template<typename Char>
+inline basic_chset<Char> &
+basic_chset<Char>::operator &=(basic_chset<Char> const &that)
+{
+ basic_chset<Char> inv;
+ inv.set((std::numeric_limits<Char>::min)(), (std::numeric_limits<Char>::max)());
+ inv -= that;
+ *this -= inv;
+ return *this;
+}
+
+/////////////////////////////////
+template<typename Char>
+inline basic_chset<Char> &
+basic_chset<Char>::operator -=(basic_chset<Char> const &that)
+{
+ typedef typename range_run<Char>::const_iterator const_iterator;
+ for(const_iterator iter = that.rr_.begin(); iter != that.rr_.end(); ++iter)
+ {
+ this->rr_.clear(*iter);
+ }
+ return *this;
+}
+
+/////////////////////////////////
+template<typename Char>
+inline basic_chset<Char> &
+basic_chset<Char>::operator ^=(basic_chset<Char> const &that)
+{
+ basic_chset bma = that;
+ bma -= *this;
+ *this -= that;
+ *this |= bma;
+ return *this;
+}
+
+#if(CHAR_BIT == 8)
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// basic_chset: specializations for 8 bit chars using std::bitset
+//
+///////////////////////////////////////////////////////////////////////////////
+template<typename Char>
+inline basic_chset_8bit<Char>::basic_chset_8bit()
+{
+}
+
+/////////////////////////////////
+template<typename Char>
+inline basic_chset_8bit<Char>::basic_chset_8bit(basic_chset_8bit<Char> const &arg)
+ : bset_(arg.bset_)
+{
+}
+
+/////////////////////////////////
+template<typename Char>
+inline bool basic_chset_8bit<Char>::empty() const
+{
+ return !this->bset_.any();
+}
+
+/////////////////////////////////
+template<typename Char>
+template<typename Traits>
+inline bool basic_chset_8bit<Char>::test(Char v, Traits const &, mpl::false_) const // case-sensitive
+{
+ return this->bset_.test((unsigned char)v);
+}
+
+/////////////////////////////////
+template<typename Char>
+template<typename Traits>
+inline bool basic_chset_8bit<Char>::test(Char v, Traits const &traits, mpl::true_) const // case-insensitive
+{
+ return this->bset_.test((unsigned char)traits.translate_nocase(v));
+}
+
+/////////////////////////////////
+template<typename Char>
+inline void basic_chset_8bit<Char>::set(Char from, Char to)
+{
+ for(int i = from; i <= to; ++i)
+ {
+ this->bset_.set((unsigned char)i);
+ }
+}
+
+/////////////////////////////////
+template<typename Char>
+template<typename Traits>
+inline void basic_chset_8bit<Char>::set(Char from, Char to, Traits const &traits)
+{
+ for(int i = from; i <= to; ++i)
+ {
+ this->bset_.set((unsigned char)traits.translate_nocase((Char)i));
+ }
+}
+
+/////////////////////////////////
+template<typename Char>
+inline void basic_chset_8bit<Char>::set(Char c)
+{
+ this->bset_.set((unsigned char)c);
+}
+
+/////////////////////////////////
+template<typename Char>
+template<typename Traits>
+inline void basic_chset_8bit<Char>::set(Char c, Traits const &traits)
+{
+ this->bset_.set((unsigned char)traits.translate_nocase(c));
+}
+
+/////////////////////////////////
+template<typename Char>
+inline void basic_chset_8bit<Char>::clear(Char from, Char to)
+{
+ for(int i = from; i <= to; ++i)
+ {
+ this->bset_.reset((unsigned char)i);
+ }
+}
+
+/////////////////////////////////
+template<typename Char>
+template<typename Traits>
+inline void basic_chset_8bit<Char>::clear(Char from, Char to, Traits const &traits)
+{
+ for(int i = from; i <= to; ++i)
+ {
+ this->bset_.reset((unsigned char)traits.translate_nocase((Char)i));
+ }
+}
+
+/////////////////////////////////
+template<typename Char>
+inline void basic_chset_8bit<Char>::clear(Char c)
+{
+ this->bset_.reset((unsigned char)c);
+}
+
+/////////////////////////////////
+template<typename Char>
+template<typename Traits>
+inline void basic_chset_8bit<Char>::clear(Char c, Traits const &traits)
+{
+ this->bset_.reset((unsigned char)traits.tranlsate_nocase(c));
+}
+
+/////////////////////////////////
+template<typename Char>
+inline void basic_chset_8bit<Char>::clear()
+{
+ this->bset_.reset();
+}
+
+/////////////////////////////////
+template<typename Char>
+inline void basic_chset_8bit<Char>::inverse()
+{
+ this->bset_.flip();
+}
+
+/////////////////////////////////
+template<typename Char>
+inline void basic_chset_8bit<Char>::swap(basic_chset_8bit<Char> &that)
+{
+ std::swap(this->bset_, that.bset_);
+}
+
+/////////////////////////////////
+template<typename Char>
+inline basic_chset_8bit<Char> &
+basic_chset_8bit<Char>::operator |=(basic_chset_8bit<Char> const &that)
+{
+ this->bset_ |= that.bset_;
+ return *this;
+}
+
+/////////////////////////////////
+template<typename Char>
+inline basic_chset_8bit<Char> &
+basic_chset_8bit<Char>::operator &=(basic_chset_8bit<Char> const &that)
+{
+ this->bset_ &= that.bset_;
+ return *this;
+}
+
+/////////////////////////////////
+template<typename Char>
+inline basic_chset_8bit<Char> &
+basic_chset_8bit<Char>::operator -=(basic_chset_8bit<Char> const &that)
+{
+ this->bset_ &= ~that.bset_;
+ return *this;
+}
+
+/////////////////////////////////
+template<typename Char>
+inline basic_chset_8bit<Char> &
+basic_chset_8bit<Char>::operator ^=(basic_chset_8bit<Char> const &that)
+{
+ this->bset_ ^= that.bset_;
+ return *this;
+}
+
+template<typename Char>
+inline std::bitset<256> const &
+basic_chset_8bit<Char>::base() const
+{
+ return this->bset_;
+}
+
+#endif // if(CHAR_BIT == 8)
+
+
+///////////////////////////////////////////////////////////////////////////////
+// helpers
+template<typename Char, typename Traits>
+inline void set_char(basic_chset<Char> &chset, Char ch, Traits const &traits, bool icase)
+{
+ icase ? chset.set(ch, traits) : chset.set(ch);
+}
+
+template<typename Char, typename Traits>
+inline void set_range(basic_chset<Char> &chset, Char from, Char to, Traits const &traits, bool icase)
+{
+ icase ? chset.set(from, to, traits) : chset.set(from, to);
+}
+
+template<typename Char, typename Traits>
+inline void set_class(basic_chset<Char> &chset, typename Traits::char_class_type char_class, bool no, Traits const &traits)
+{
+ BOOST_MPL_ASSERT_RELATION(1, ==, sizeof(Char));
+ for(std::size_t i = 0; i <= UCHAR_MAX; ++i)
+ {
+ typedef typename std::char_traits<Char>::int_type int_type;
+ Char ch = std::char_traits<Char>::to_char_type(static_cast<int_type>(i));
+ if(no != traits.isctype(ch, char_class))
+ {
+ chset.set(ch);
+ }
+ }
+}
+
+}}} // namespace boost::xpressive::detail
+
+#endif
+
diff --git a/boost/boost/xpressive/detail/utility/chset/chset.hpp b/boost/boost/xpressive/detail/utility/chset/chset.hpp
new file mode 100644
index 00000000000..e97371eac99
--- /dev/null
+++ b/boost/boost/xpressive/detail/utility/chset/chset.hpp
@@ -0,0 +1,164 @@
+///////////////////////////////////////////////////////////////////////////////
+// chset.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_CHSET_CHSET_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_CHSET_CHSET_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <vector>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/utility/algorithm.hpp>
+#include <boost/xpressive/detail/utility/chset/basic_chset.ipp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+///////////////////////////////////////////////////////////////////////////////
+// compound_charset
+//
+template<typename Traits>
+struct compound_charset
+ : private basic_chset<typename Traits::char_type>
+{
+ typedef typename Traits::char_type char_type;
+ typedef basic_chset<char_type> base_type;
+ typedef Traits traits_type;
+ typedef typename Traits::char_class_type char_class_type;
+
+ compound_charset()
+ : base_type()
+ , complement_(false)
+ , has_posix_(false)
+ , posix_yes_()
+ , posix_no_()
+ {
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // accessors
+ basic_chset<char_type> const &basic_chset() const
+ {
+ return *this;
+ }
+
+ bool is_inverted() const
+ {
+ return this->complement_;
+ }
+
+ char_class_type posix_yes() const
+ {
+ return this->posix_yes_;
+ }
+
+ std::vector<char_class_type> const &posix_no() const
+ {
+ return this->posix_no_;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // complement
+ void inverse()
+ {
+ this->complement_ = !this->complement_;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // set
+ void set_char(char_type ch, Traits const &traits, bool icase)
+ {
+ icase ? this->base_type::set(ch, traits) : this->base_type::set(ch);
+ }
+
+ void set_range(char_type from, char_type to, Traits const &traits, bool icase)
+ {
+ icase ? this->base_type::set(from, to, traits) : this->base_type::set(from, to);
+ }
+
+ void set_class(char_class_type const &m, bool no)
+ {
+ this->has_posix_ = true;
+
+ if(no)
+ {
+ this->posix_no_.push_back(m);
+ }
+ else
+ {
+ this->posix_yes_ |= m;
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // test
+ template<typename ICase>
+ bool test(char_type ch, Traits const &traits, ICase) const
+ {
+ return this->complement_ !=
+ (this->base_type::test(ch, traits, ICase()) ||
+ (this->has_posix_ && this->test_posix(ch, traits)));
+ }
+
+private:
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // not_posix_pred
+ struct not_posix_pred
+ {
+ char_type ch_;
+ Traits const *traits_ptr_;
+
+ bool operator ()(typename call_traits<char_class_type>::param_type m) const
+ {
+ return !this->traits_ptr_->isctype(this->ch_, m);
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // test_posix
+ bool test_posix(char_type ch, Traits const &traits) const
+ {
+ not_posix_pred const pred = {ch, &traits};
+ return traits.isctype(ch, this->posix_yes_)
+ || any(this->posix_no_.begin(), this->posix_no_.end(), pred);
+ }
+
+ bool complement_;
+ bool has_posix_;
+ char_class_type posix_yes_;
+ std::vector<char_class_type> posix_no_;
+};
+
+
+///////////////////////////////////////////////////////////////////////////////
+// helpers
+template<typename Char, typename Traits>
+inline void set_char(compound_charset<Traits> &chset, Char ch, Traits const &traits, bool icase)
+{
+ chset.set_char(ch, traits, icase);
+}
+
+template<typename Char, typename Traits>
+inline void set_range(compound_charset<Traits> &chset, Char from, Char to, Traits const &traits, bool icase)
+{
+ chset.set_range(from, to, traits, icase);
+}
+
+template<typename Traits>
+inline void set_class(compound_charset<Traits> &chset, typename Traits::char_class_type char_class, bool no, Traits const &)
+{
+ chset.set_class(char_class, no);
+}
+
+}}} // namespace boost::xpressive::detail
+
+#endif
+
diff --git a/boost/boost/xpressive/detail/utility/chset/range_run.hpp b/boost/boost/xpressive/detail/utility/chset/range_run.hpp
new file mode 100644
index 00000000000..b1ec6475a42
--- /dev/null
+++ b/boost/boost/xpressive/detail/utility/chset/range_run.hpp
@@ -0,0 +1,102 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Joel de Guzman
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_XPRESSIVE_SPIRIT_RANGE_RUN_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_SPIRIT_RANGE_RUN_HPP_EAN_10_04_2005
+
+///////////////////////////////////////////////////////////////////////////////
+#include <vector>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace xpressive { namespace detail
+{
+
+///////////////////////////////////////////////////////////////////////////
+//
+// range class
+//
+// Implements a closed range of values. This class is used in
+// the implementation of the range_run class.
+//
+// { Low level implementation detail }
+// { Not to be confused with spirit::range }
+//
+///////////////////////////////////////////////////////////////////////////
+template<typename Char>
+struct range
+{
+ range(Char first, Char last);
+
+ bool is_valid() const;
+ bool includes(Char v) const;
+ bool includes(range const &r) const;
+ bool overlaps(range const &r) const;
+ void merge(range const &r);
+
+ Char first_;
+ Char last_;
+};
+
+//////////////////////////////////
+template<typename Char>
+struct range_compare
+{
+ bool operator()(range<Char> const &x, range<Char> const &y) const
+ {
+ return x.first_ < y.first_;
+ }
+};
+
+///////////////////////////////////////////////////////////////////////////
+//
+// range_run
+//
+// An implementation of a sparse bit (boolean) set. The set uses
+// a sorted vector of disjoint ranges. This class implements the
+// bare minimum essentials from which the full range of set
+// operators can be implemented. The set is constructed from
+// ranges. Internally, adjacent or overlapping ranges are
+// coalesced.
+//
+// range_runs are very space-economical in situations where there
+// are lots of ranges and a few individual disjoint values.
+// Searching is O(log n) where n is the number of ranges.
+//
+// { Low level implementation detail }
+//
+///////////////////////////////////////////////////////////////////////////
+template<typename Char>
+struct range_run
+{
+ typedef range<Char> range_type;
+ typedef std::vector<range_type> run_type;
+ typedef typename run_type::iterator iterator;
+ typedef typename run_type::const_iterator const_iterator;
+
+ void swap(range_run& rr);
+ bool empty() const;
+ bool test(Char v) const;
+ template<typename Traits>
+ bool test(Char v, Traits const &traits) const;
+ void set(range_type const &r);
+ void clear(range_type const &r);
+ void clear();
+
+ const_iterator begin() const;
+ const_iterator end() const;
+
+private:
+ void merge(iterator iter, range_type const &r);
+
+ run_type run_;
+};
+
+}}} // namespace boost::xpressive::detail
+
+#endif
+
diff --git a/boost/boost/xpressive/detail/utility/chset/range_run.ipp b/boost/boost/xpressive/detail/utility/chset/range_run.ipp
new file mode 100644
index 00000000000..44e52e510c6
--- /dev/null
+++ b/boost/boost/xpressive/detail/utility/chset/range_run.ipp
@@ -0,0 +1,237 @@
+/*=============================================================================
+ Copyright (c) 2001-2003 Joel de Guzman
+ http://spirit.sourceforge.net/
+
+ Use, modification and distribution is 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)
+=============================================================================*/
+#ifndef BOOST_XPRESSIVE_SPIRIT_RANGE_RUN_IPP
+#define BOOST_XPRESSIVE_SPIRIT_RANGE_RUN_IPP
+
+///////////////////////////////////////////////////////////////////////////////
+#include <algorithm> // for std::lower_bound
+#include <boost/limits.hpp>
+#include <boost/assert.hpp>
+#include <boost/xpressive/detail/utility/chset/range_run.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace xpressive { namespace detail
+{
+
+///////////////////////////////////////////////////////////////////////
+//
+// range class implementation
+//
+///////////////////////////////////////////////////////////////////////
+template<typename Char>
+inline range<Char>::range(Char first, Char last)
+ : first_(first)
+ , last_(last)
+{
+}
+
+//////////////////////////////////
+template<typename Char>
+inline bool range<Char>::is_valid() const
+{
+ return this->first_ <= this->last_;
+}
+
+//////////////////////////////////
+template<typename Char>
+inline bool range<Char>::includes(range<Char> const &r) const
+{
+ return (this->first_ <= r.first_) && (this->last_ >= r.last_);
+}
+
+//////////////////////////////////
+template<typename Char>
+inline bool range<Char>::includes(Char v) const
+{
+ return (this->first_ <= v) && (this->last_ >= v);
+}
+
+//////////////////////////////////
+template<typename Char>
+inline bool range<Char>::overlaps(range<Char> const &r) const
+{
+ Char decr_first =
+ this->first_ == (std::numeric_limits<Char>::min)() ? this->first_ : this->first_-1;
+ Char incr_last =
+ this->last_ == (std::numeric_limits<Char>::max)() ? this->last_ : this->last_+1;
+
+ return (decr_first <= r.last_) && (incr_last >= r.first_);
+}
+
+//////////////////////////////////
+template<typename Char>
+inline void range<Char>::merge(range<Char> const &r)
+{
+ this->first_ = (std::min)(this->first_, r.first_);
+ this->last_ = (std::max)(this->last_, r.last_);
+}
+
+///////////////////////////////////////////////////////////////////////
+//
+// range_run class implementation
+//
+///////////////////////////////////////////////////////////////////////
+template<typename Char>
+inline bool range_run<Char>::empty() const
+{
+ return this->run_.empty();
+}
+
+template<typename Char>
+inline bool range_run<Char>::test(Char v) const
+{
+ if(this->run_.empty())
+ {
+ return false;
+ }
+
+ const_iterator iter = std::lower_bound(
+ this->run_.begin()
+ , this->run_.end()
+ , range<Char>(v, v)
+ , range_compare<Char>()
+ );
+
+ return (iter != this->run_.end() && iter->includes(v))
+ || (iter != this->run_.begin() && (--iter)->includes(v));
+}
+
+template<typename Char>
+template<typename Traits>
+inline bool range_run<Char>::test(Char v, Traits const &traits) const
+{
+ const_iterator begin = this->run_.begin();
+ const_iterator end = this->run_.end();
+
+ for(; begin != end; ++begin)
+ {
+ if(traits.in_range_nocase(begin->first_, begin->last_, v))
+ {
+ return true;
+ }
+ }
+ return false;
+}
+
+//////////////////////////////////
+template<typename Char>
+inline void range_run<Char>::swap(range_run<Char> &rr)
+{
+ this->run_.swap(rr.run_);
+}
+
+//////////////////////////////////
+template<typename Char>
+void range_run<Char>::merge(iterator iter, range<Char> const &r)
+{
+ BOOST_ASSERT(iter != this->run_.end());
+ iter->merge(r);
+
+ iterator i = iter;
+ while(++i != this->run_.end() && iter->overlaps(*i))
+ {
+ iter->merge(*i);
+ }
+
+ this->run_.erase(++iter, i);
+}
+
+//////////////////////////////////
+template<typename Char>
+void range_run<Char>::set(range<Char> const &r)
+{
+ BOOST_ASSERT(r.is_valid());
+ if(!this->run_.empty())
+ {
+ iterator iter = std::lower_bound(this->run_.begin(), this->run_.end(), r, range_compare<Char>());
+
+ if((iter != this->run_.end() && iter->includes(r)) ||
+ (iter != this->run_.begin() && (iter - 1)->includes(r)))
+ {
+ return;
+ }
+ else if(iter != this->run_.begin() && (iter - 1)->overlaps(r))
+ {
+ this->merge(--iter, r);
+ }
+ else if(iter != this->run_.end() && iter->overlaps(r))
+ {
+ this->merge(iter, r);
+ }
+ else
+ {
+ this->run_.insert(iter, r);
+ }
+ }
+ else
+ {
+ this->run_.push_back(r);
+ }
+}
+
+//////////////////////////////////
+template<typename Char>
+void range_run<Char>::clear(range<Char> const &r)
+{
+ BOOST_ASSERT(r.is_valid());
+ if(!this->run_.empty())
+ {
+ iterator iter = std::lower_bound(this->run_.begin(), this->run_.end(), r, range_compare<Char>());
+ iterator left_iter;
+
+ if((iter != this->run_.begin()) &&
+ (left_iter = (iter - 1))->includes(r.first_))
+ {
+ if(left_iter->last_ > r.last_)
+ {
+ Char save_last = left_iter->last_;
+ left_iter->last_ = r.first_-1;
+ this->run_.insert(iter, range<Char>(r.last_+1, save_last));
+ return;
+ }
+ else
+ {
+ left_iter->last_ = r.first_-1;
+ }
+ }
+
+ iterator i = iter;
+ for(; i != this->run_.end() && r.includes(*i); ++i) {}
+ if(i != this->run_.end() && i->includes(r.last_))
+ {
+ i->first_ = r.last_+1;
+ }
+ this->run_.erase(iter, i);
+ }
+}
+
+//////////////////////////////////
+template<typename Char>
+inline void range_run<Char>::clear()
+{
+ this->run_.clear();
+}
+
+//////////////////////////////////
+template<typename Char>
+inline typename range_run<Char>::const_iterator range_run<Char>::begin() const
+{
+ return this->run_.begin();
+}
+
+//////////////////////////////////
+template<typename Char>
+inline typename range_run<Char>::const_iterator range_run<Char>::end() const
+{
+ return this->run_.end();
+}
+
+}}} // namespace boost::xpressive::detail
+
+#endif
diff --git a/boost/boost/xpressive/detail/utility/cons.hpp b/boost/boost/xpressive/detail/utility/cons.hpp
new file mode 100644
index 00000000000..b2919a5816d
--- /dev/null
+++ b/boost/boost/xpressive/detail/utility/cons.hpp
@@ -0,0 +1,304 @@
+///////////////////////////////////////////////////////////////////////////////
+// cons.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_UTILITY_CONS_HPP_EAN_11_19_2005
+#define BOOST_XPRESSIVE_DETAIL_UTILITY_CONS_HPP_EAN_11_19_2005
+
+#include <boost/version.hpp>
+
+#if BOOST_VERSION >= 103300
+
+// In Boost 1.33+, we have a cons list in Fusion, so just include it.
+# include <boost/spirit/fusion/sequence/cons.hpp>
+
+#else
+
+// For earlier versions of Boost, put the definition of cons here
+# include <boost/call_traits.hpp>
+# include <boost/mpl/if.hpp>
+# include <boost/mpl/eval_if.hpp>
+# include <boost/mpl/identity.hpp>
+# include <boost/type_traits/is_const.hpp>
+# include <boost/type_traits/add_const.hpp>
+# include <boost/type_traits/add_reference.hpp>
+# include <boost/spirit/fusion/detail/config.hpp>
+# include <boost/spirit/fusion/detail/access.hpp>
+# include <boost/spirit/fusion/iterator/next.hpp>
+# include <boost/spirit/fusion/iterator/equal_to.hpp>
+# include <boost/spirit/fusion/iterator/as_fusion_iterator.hpp>
+# include <boost/spirit/fusion/iterator/detail/iterator_base.hpp>
+# include <boost/spirit/fusion/sequence/begin.hpp>
+# include <boost/spirit/fusion/sequence/end.hpp>
+# include <boost/spirit/fusion/sequence/as_fusion_sequence.hpp>
+# include <boost/spirit/fusion/sequence/detail/sequence_base.hpp>
+
+namespace boost { namespace fusion
+{
+ struct nil;
+
+ struct cons_tag;
+
+ template <typename Car, typename Cdr>
+ struct cons;
+
+ struct cons_iterator_tag;
+
+ template <typename Cons>
+ struct cons_iterator;
+
+ namespace cons_detail
+ {
+ template <typename Iterator>
+ struct deref_traits_impl
+ {
+ typedef typename Iterator::cons_type cons_type;
+ typedef typename cons_type::car_type value_type;
+
+ typedef typename mpl::eval_if<
+ is_const<cons_type>
+ , add_reference<typename add_const<value_type>::type>
+ , add_reference<value_type> >::type
+ type;
+
+ static type
+ call(Iterator const& i)
+ {
+ return detail::ref(i.cons.car);
+ }
+ };
+
+ template <typename Iterator>
+ struct next_traits_impl
+ {
+ typedef typename Iterator::cons_type cons_type;
+ typedef typename cons_type::cdr_type cdr_type;
+
+ typedef cons_iterator<
+ typename mpl::eval_if<
+ is_const<cons_type>
+ , add_const<cdr_type>
+ , mpl::identity<cdr_type>
+ >::type>
+ type;
+
+ static type
+ call(Iterator const& i)
+ {
+ return type(detail::ref(i.cons.cdr));
+ }
+ };
+
+ template <typename Iterator>
+ struct value_traits_impl
+ {
+ typedef typename Iterator::cons_type cons_type;
+ typedef typename cons_type::car_type type;
+ };
+
+ template <typename Cons>
+ struct begin_traits_impl
+ {
+ typedef cons_iterator<Cons> type;
+
+ static type
+ call(Cons& t)
+ {
+ return type(t);
+ }
+ };
+
+ template <typename Cons>
+ struct end_traits_impl
+ {
+ typedef cons_iterator<
+ typename mpl::if_<is_const<Cons>, nil const, nil>::type>
+ type;
+
+ static type
+ call(Cons& t)
+ {
+ FUSION_RETURN_DEFAULT_CONSTRUCTED;
+ }
+ };
+ } // namespace cons_detail
+
+ namespace meta
+ {
+ template <typename Tag>
+ struct deref_impl;
+
+ template <>
+ struct deref_impl<cons_iterator_tag>
+ {
+ template <typename Iterator>
+ struct apply : cons_detail::deref_traits_impl<Iterator> {};
+ };
+
+ template <typename Tag>
+ struct next_impl;
+
+ template <>
+ struct next_impl<cons_iterator_tag>
+ {
+ template <typename Iterator>
+ struct apply : cons_detail::next_traits_impl<Iterator> {};
+ };
+
+ template <typename Tag>
+ struct value_impl;
+
+ template <>
+ struct value_impl<cons_iterator_tag>
+ {
+ template <typename Iterator>
+ struct apply : cons_detail::value_traits_impl<Iterator> {};
+ };
+
+ template <typename Tag>
+ struct begin_impl;
+
+ template <>
+ struct begin_impl<cons_tag>
+ {
+ template <typename Sequence>
+ struct apply : cons_detail::begin_traits_impl<Sequence>
+ {};
+ };
+
+ template <typename Tag>
+ struct end_impl;
+
+ template <>
+ struct end_impl<cons_tag>
+ {
+ template <typename Sequence>
+ struct apply : cons_detail::end_traits_impl<Sequence>
+ {};
+ };
+ } // namespace meta
+
+ template <typename Cons = nil>
+ struct cons_iterator : iterator_base<cons_iterator<Cons> >
+ {
+ typedef cons_iterator_tag tag;
+ typedef Cons cons_type;
+
+ explicit cons_iterator(cons_type& cons_)
+ : cons(cons_) {}
+
+ cons_type& cons;
+ };
+
+ template <>
+ struct cons_iterator<nil> : iterator_base<cons_iterator<nil> >
+ {
+ typedef cons_iterator_tag tag;
+ typedef nil cons_type;
+ cons_iterator() {}
+ explicit cons_iterator(nil const&) {}
+ };
+
+ template <>
+ struct cons_iterator<nil const> : iterator_base<cons_iterator<nil const> >
+ {
+ typedef cons_iterator_tag tag;
+ typedef nil const cons_type;
+ cons_iterator() {}
+ explicit cons_iterator(nil const&) {}
+ };
+
+ struct nil : sequence_base<nil>
+ {
+ typedef cons_tag tag;
+ typedef void_t car_type;
+ typedef void_t cdr_type;
+ };
+
+ template <typename Car, typename Cdr = nil>
+ struct cons : sequence_base<cons<Car,Cdr> >
+ {
+ typedef cons_tag tag;
+ typedef typename call_traits<Car>::value_type car_type;
+ typedef Cdr cdr_type;
+
+ cons()
+ : car(), cdr() {}
+
+ explicit cons(
+ typename call_traits<Car>::param_type car_
+ , typename call_traits<Cdr>::param_type cdr_ = Cdr())
+ : car(car_), cdr(cdr_) {}
+
+ car_type car;
+ cdr_type cdr;
+ };
+
+ template <typename Car>
+ inline cons<Car>
+ make_cons(Car const& car)
+ {
+ return cons<Car>(car);
+ }
+
+ template <typename Car, typename Cdr>
+ inline cons<Car, Cdr>
+ make_cons(Car const& car, Cdr const& cdr)
+ {
+ return cons<Car, Cdr>(car, cdr);
+ }
+}} // namespace boost::fusion
+
+namespace boost { namespace mpl
+{
+ template <typename Tag>
+ struct begin_impl;
+
+ template <typename Tag>
+ struct end_impl;
+
+ template <>
+ struct begin_impl<fusion::cons_tag>
+ : fusion::meta::begin_impl<fusion::cons_tag>
+ {
+ };
+
+ template <>
+ struct end_impl<fusion::cons_tag>
+ : fusion::meta::end_impl<fusion::cons_tag>
+ {
+ };
+
+}} // namespace boost::mpl
+
+#endif
+
+// Before Boost v1.33.1, Fusion cons lists were not valid MPL sequences.
+#if BOOST_VERSION < 103301
+namespace boost { namespace mpl
+{
+ template<typename Iterator>
+ struct next;
+
+ template<typename Cons>
+ struct next<fusion::cons_iterator<Cons> >
+ : fusion::cons_detail::next_traits_impl<fusion::cons_iterator<Cons> >
+ {
+ };
+
+ template<typename Iterator>
+ struct deref;
+
+ template<typename Cons>
+ struct deref<fusion::cons_iterator<Cons> >
+ : fusion::cons_detail::value_traits_impl<fusion::cons_iterator<Cons> >
+ {
+ };
+
+}} // namespace boost::mpl
+#endif
+
+#endif
diff --git a/boost/boost/xpressive/detail/utility/dont_care.hpp b/boost/boost/xpressive/detail/utility/dont_care.hpp
new file mode 100644
index 00000000000..37bd179dfcc
--- /dev/null
+++ b/boost/boost/xpressive/detail/utility/dont_care.hpp
@@ -0,0 +1,25 @@
+///////////////////////////////////////////////////////////////////////////////
+// dont_care.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_UTILITY_DONT_CARE_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_UTILITY_DONT_CARE_HPP_EAN_10_04_2005
+
+namespace boost { namespace xpressive { namespace detail
+{
+ ///////////////////////////////////////////////////////////////////////////////
+ // for function arguments we don't care about
+ struct dont_care
+ {
+ dont_care() {}
+
+ template<typename T>
+ dont_care(T const &) {}
+ };
+
+}}}
+
+#endif
diff --git a/boost/boost/xpressive/detail/utility/hash_peek_bitset.hpp b/boost/boost/xpressive/detail/utility/hash_peek_bitset.hpp
new file mode 100644
index 00000000000..2ff02ef0cd6
--- /dev/null
+++ b/boost/boost/xpressive/detail/utility/hash_peek_bitset.hpp
@@ -0,0 +1,175 @@
+///////////////////////////////////////////////////////////////////////////////
+// hash_peek_bitset.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_HASH_PEEK_BITSET_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_HASH_PEEK_BITSET_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+# pragma warning(push)
+# pragma warning(disable : 4100) // unreferenced formal parameter
+# pragma warning(disable : 4127) // conditional expression constant
+#endif
+
+#include <bitset>
+#include <string> // for std::char_traits
+#include <boost/xpressive/detail/utility/chset/basic_chset.ipp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+///////////////////////////////////////////////////////////////////////////////
+// hash_peek_bitset
+//
+template<typename Char>
+struct hash_peek_bitset
+{
+ typedef Char char_type;
+ typedef typename std::char_traits<char_type>::int_type int_type;
+
+ hash_peek_bitset()
+ : icase_(false)
+ , bset_()
+ {
+ }
+
+ std::size_t count() const
+ {
+ return this->bset_.count();
+ }
+
+ void set_all()
+ {
+ this->icase_ = false;
+ this->bset_.set();
+ }
+
+ template<typename Traits>
+ void set_char(char_type ch, bool icase, Traits const &traits)
+ {
+ if(this->test_icase_(icase))
+ {
+ ch = icase ? traits.translate_nocase(ch) : traits.translate(ch);
+ this->bset_.set(traits.hash(ch));
+ }
+ }
+
+ template<typename Traits>
+ void set_range(char_type from, char_type to, bool no, bool icase, Traits const &traits)
+ {
+ int_type ifrom = std::char_traits<char_type>::to_int_type(from);
+ int_type ito = std::char_traits<char_type>::to_int_type(to);
+ BOOST_ASSERT(ifrom <= ito);
+ // bound the computational complexity. BUGBUG could set the inverse range
+ if(no || 256 < (ito - ifrom))
+ {
+ this->set_all();
+ }
+ else if(this->test_icase_(icase))
+ {
+ for(int_type i = ifrom; i <= ito; ++i)
+ {
+ char_type ch = std::char_traits<char_type>::to_char_type(i);
+ ch = icase ? traits.translate_nocase(ch) : traits.translate(ch);
+ this->bset_.set(traits.hash(ch));
+ }
+ }
+ }
+
+ template<typename Traits>
+ void set_class(typename Traits::char_class_type char_class, bool no, Traits const &traits)
+ {
+ if(1 != sizeof(char_type))
+ {
+ // wide character set, no efficient way of filling in the bitset, so set them all to 1
+ this->set_all();
+ }
+ else
+ {
+ for(std::size_t i = 0; i <= UCHAR_MAX; ++i)
+ {
+ char_type ch = std::char_traits<char_type>::to_char_type(static_cast<int_type>(i));
+ if(no != traits.isctype(ch, char_class))
+ {
+ this->bset_.set(i);
+ }
+ }
+ }
+ }
+
+ void set_bitset(hash_peek_bitset<Char> const &that)
+ {
+ this->bset_ |= that.bset_;
+ }
+
+ void set_charset(basic_chset_8bit<Char> const &that, bool icase)
+ {
+ if(this->test_icase_(icase))
+ {
+ this->bset_ |= that.base();
+ }
+ }
+
+ bool icase() const
+ {
+ return this->icase_;
+ }
+
+ template<typename Traits>
+ bool test(char_type ch, Traits const &traits) const
+ {
+ ch = this->icase_ ? traits.translate_nocase(ch) : traits.translate(ch);
+ return this->bset_.test(traits.hash(ch));
+ }
+
+ template<typename Traits>
+ bool test(char_type ch, Traits const &traits, mpl::false_) const
+ {
+ BOOST_ASSERT(!this->icase_);
+ return this->bset_.test(traits.hash(traits.translate(ch)));
+ }
+
+ template<typename Traits>
+ bool test(char_type ch, Traits const &traits, mpl::true_) const
+ {
+ BOOST_ASSERT(this->icase_);
+ return this->bset_.test(traits.hash(traits.translate_nocase(ch)));
+ }
+
+private:
+
+ // Make sure all sub-expressions being merged have the same case-sensitivity
+ bool test_icase_(bool icase)
+ {
+ std::size_t count = this->bset_.count();
+
+ if(256 == count)
+ {
+ return false; // all set already, nothing to do
+ }
+ else if(0 != count && this->icase_ != icase)
+ {
+ this->set_all(); // icase mismatch! set all and bail
+ return false;
+ }
+
+ this->icase_ = icase;
+ return true;
+ }
+
+ bool icase_;
+ std::bitset<256> bset_;
+};
+
+}}} // namespace boost::xpressive::detail
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma warning(pop)
+#endif
+
+#endif
diff --git a/boost/boost/xpressive/detail/utility/ignore_unused.hpp b/boost/boost/xpressive/detail/utility/ignore_unused.hpp
new file mode 100644
index 00000000000..b92291423ab
--- /dev/null
+++ b/boost/boost/xpressive/detail/utility/ignore_unused.hpp
@@ -0,0 +1,26 @@
+///////////////////////////////////////////////////////////////////////////////
+// ignore_unused.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_UTILITY_IGNORE_UNUSED_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_UTILITY_IGNORE_UNUSED_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+ inline void ignore_unused(void const *)
+ {
+ }
+
+}}}
+
+#endif
+
diff --git a/boost/boost/xpressive/detail/utility/literals.hpp b/boost/boost/xpressive/detail/utility/literals.hpp
new file mode 100644
index 00000000000..d3d4ed4c3e1
--- /dev/null
+++ b/boost/boost/xpressive/detail/utility/literals.hpp
@@ -0,0 +1,93 @@
+///////////////////////////////////////////////////////////////////////////////
+// literals.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_UTILITY_LITERALS_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_UTILITY_LITERALS_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // for BOOST_STATIC_CONSTANT
+#include <boost/detail/workaround.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+///////////////////////////////////////////////////////////////////////////////
+// char_literal
+//
+template<typename Char, char Ch, wchar_t Wch>
+struct char_literal;
+
+template<char Ch, wchar_t Wch>
+struct char_literal<char, Ch, Wch>
+{
+ BOOST_STATIC_CONSTANT(char, value = Ch);
+};
+
+template<char Ch, wchar_t Wch>
+struct char_literal<wchar_t, Ch, Wch>
+{
+ BOOST_STATIC_CONSTANT(wchar_t, value = Wch);
+};
+
+#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION
+template<char Ch, wchar_t Wch>
+char const char_literal<char, Ch, Wch>::value;
+
+template<char Ch, wchar_t Wch>
+wchar_t const char_literal<wchar_t, Ch, Wch>::value;
+#endif
+
+template<typename Ch>
+struct string_literal;
+
+template<>
+struct string_literal<char>
+{
+ static char const *pick(char const *cstr, wchar_t const *)
+ {
+ return cstr;
+ }
+
+ static char pick(char ch, wchar_t)
+ {
+ return ch;
+ }
+};
+
+template<>
+struct string_literal<wchar_t>
+{
+ static wchar_t const *pick(char const *, wchar_t const *cstr)
+ {
+ return cstr;
+ }
+
+ static wchar_t pick(char, wchar_t ch)
+ {
+ return ch;
+ }
+};
+
+#if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3206))
+
+# define BOOST_XPR_CHAR_(Char, ch) ch
+# define BOOST_XPR_CSTR_(Char, st) boost::xpressive::detail::string_literal<Char>::pick(st, L##st)
+
+#else
+
+# define BOOST_XPR_CHAR_(Char, ch) boost::xpressive::detail::char_literal<Char, ch, L##ch>::value
+# define BOOST_XPR_CSTR_(Char, st) boost::xpressive::detail::string_literal<Char>::pick(st, L##st)
+
+#endif
+
+}}} // namespace boost::xpressive::detail
+
+#endif
diff --git a/boost/boost/xpressive/detail/utility/never_true.hpp b/boost/boost/xpressive/detail/utility/never_true.hpp
new file mode 100644
index 00000000000..3f258068088
--- /dev/null
+++ b/boost/boost/xpressive/detail/utility/never_true.hpp
@@ -0,0 +1,25 @@
+///////////////////////////////////////////////////////////////////////////////
+// never_true.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_UTILITY_NEVER_TRUE_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_UTILITY_NEVER_TRUE_HPP_EAN_10_04_2005
+
+#include <boost/mpl/bool.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+ // for use in static asserts
+ template<typename T>
+ struct never_true
+ : mpl::false_
+ {
+ };
+
+}}}
+
+#endif
diff --git a/boost/boost/xpressive/detail/utility/save_restore.hpp b/boost/boost/xpressive/detail/utility/save_restore.hpp
new file mode 100644
index 00000000000..21679b9dee4
--- /dev/null
+++ b/boost/boost/xpressive/detail/utility/save_restore.hpp
@@ -0,0 +1,55 @@
+///////////////////////////////////////////////////////////////////////////////
+// save_restore.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_UTILITY_SAVE_RESTORE_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_UTILITY_SAVE_RESTORE_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/noncopyable.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+ template<typename T>
+ struct save_restore
+ : private noncopyable
+ {
+ explicit save_restore(T &t)
+ : ref(t)
+ , val(t)
+ {
+ }
+
+ save_restore(T &t, T const &n)
+ : ref(t)
+ , val(t)
+ {
+ this->ref = n;
+ }
+
+ ~save_restore()
+ {
+ this->ref = this->val;
+ }
+
+ void restore()
+ {
+ this->ref = this->val;
+ }
+
+ private:
+ T &ref;
+ T const val;
+ };
+
+}}}
+
+#endif
diff --git a/boost/boost/xpressive/detail/utility/sequence_stack.hpp b/boost/boost/xpressive/detail/utility/sequence_stack.hpp
new file mode 100644
index 00000000000..28fd66edffd
--- /dev/null
+++ b/boost/boost/xpressive/detail/utility/sequence_stack.hpp
@@ -0,0 +1,241 @@
+///////////////////////////////////////////////////////////////////////////////
+// sequence_stack.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_SEQUENCE_STACK_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_SEQUENCE_STACK_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+# pragma warning(push)
+# pragma warning(disable : 4127) // conditional expression constant
+#endif
+
+#include <algorithm>
+#include <functional>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+//////////////////////////////////////////////////////////////////////////
+// sequence_stack
+//
+// For storing a stack of sequences of type T, where each sequence
+// is guaranteed to be stored in contiguous memory.
+template<typename T>
+struct sequence_stack
+{
+private:
+
+ struct chunk
+ {
+ chunk(std::size_t size, std::size_t count, chunk *back, chunk *next)
+ : begin_(new T[ size ])
+ , curr_(begin_ + count)
+ , end_(begin_ + size)
+ , back_(back)
+ , next_(next)
+ {
+ if(this->back_)
+ this->back_->next_ = this;
+ if(this->next_)
+ this->next_->back_ = this;
+ }
+
+ ~chunk()
+ {
+ delete[] this->begin_;
+ }
+
+ std::size_t size() const
+ {
+ return static_cast<std::size_t>(this->end_ - this->begin_);
+ }
+
+ T *const begin_, *curr_, *const end_;
+ chunk *back_, *next_;
+
+ private:
+ chunk &operator =(chunk const &);
+ };
+
+ chunk *current_chunk_;
+
+ // Cache these for faster access
+ T *begin_;
+ T *curr_;
+ T *end_;
+
+ T *grow_(std::size_t count)
+ {
+ if(this->current_chunk_)
+ {
+ // write the cached value of current into the node.
+ // OK to do this even if later statements throw.
+ this->current_chunk_->curr_ = this->curr_;
+
+ // Do we have a node with enough available memory already?
+ if(this->current_chunk_->next_ && count <= this->current_chunk_->next_->size())
+ {
+ this->current_chunk_ = this->current_chunk_->next_;
+ this->curr_ = this->current_chunk_->curr_ = this->current_chunk_->begin_ + count;
+ this->end_ = this->current_chunk_->end_;
+ this->begin_ = this->current_chunk_->begin_;
+ std::fill_n(this->begin_, count, T());
+ return this->begin_;
+ }
+
+ // grow exponentially
+ std::size_t new_size = (std::max)(count, static_cast<std::size_t>(this->current_chunk_->size() * 1.5));
+
+ // Create a new node and insert it into the list
+ this->current_chunk_ = new chunk(new_size, count, this->current_chunk_, this->current_chunk_->next_);
+ }
+ else
+ {
+ // first chunk is 256
+ std::size_t new_size = (std::max)(count, static_cast<std::size_t>(256U));
+
+ // Create a new node and insert it into the list
+ this->current_chunk_ = new chunk(new_size, count, 0, 0);
+ }
+
+ this->begin_ = this->current_chunk_->begin_;
+ this->curr_ = this->current_chunk_->curr_;
+ this->end_ = this->current_chunk_->end_;
+ return this->begin_;
+ }
+
+ void unwind_chunk_()
+ {
+ // write the cached value of curr_ into current_chunk_
+ this->current_chunk_->curr_ = this->begin_;
+ // make the previous chunk the current
+ this->current_chunk_ = this->current_chunk_->back_;
+
+ // update the cache
+ this->begin_ = this->current_chunk_->begin_;
+ this->curr_ = this->current_chunk_->curr_;
+ this->end_ = this->current_chunk_->end_;
+ }
+
+ bool in_current_chunk(T *ptr) const
+ {
+ return !std::less<void*>()(ptr, this->begin_) && std::less<void*>()(ptr, this->end_);
+ }
+
+public:
+ sequence_stack()
+ : current_chunk_(0)
+ , begin_(0)
+ , curr_(0)
+ , end_(0)
+ {
+ }
+
+ ~sequence_stack()
+ {
+ this->clear();
+ }
+
+ // walk to the front of the linked list
+ void unwind()
+ {
+ if(this->current_chunk_)
+ {
+ while(this->current_chunk_->back_)
+ {
+ this->current_chunk_->curr_ = this->current_chunk_->begin_;
+ this->current_chunk_ = this->current_chunk_->back_;
+ }
+
+ this->begin_ = this->curr_ = this->current_chunk_->curr_ = this->current_chunk_->begin_;
+ this->end_ = this->current_chunk_->end_;
+ }
+ }
+
+ void clear()
+ {
+ // walk to the front of the list
+ this->unwind();
+
+ // delete the list
+ for(chunk *next; this->current_chunk_; this->current_chunk_ = next)
+ {
+ next = this->current_chunk_->next_;
+ delete this->current_chunk_;
+ }
+
+ this->begin_ = this->curr_ = this->end_ = 0;
+ }
+
+ template<bool Fill>
+ T *push_sequence(std::size_t count, mpl::bool_<Fill>)
+ {
+ // This is the ptr to return
+ T *ptr = this->curr_;
+
+ // Advance the high-water mark
+ this->curr_ += count;
+
+ // Check to see if we have overflowed this buffer
+ if(std::less<void*>()(this->end_, this->curr_))
+ {
+ // oops, back this out.
+ this->curr_ = ptr;
+
+ // allocate a new block and return a ptr to the new memory
+ return this->grow_(count);
+ }
+
+ if(Fill)
+ {
+ std::fill_n(ptr, count, T());
+ }
+
+ return ptr;
+ }
+
+ T *push_sequence(std::size_t count)
+ {
+ return this->push_sequence(count, mpl::true_());
+ }
+
+ void unwind_to(T *ptr)
+ {
+ while(!this->in_current_chunk(ptr))
+ {
+ // completely unwind the current chunk, move to the previous chunk
+ this->unwind_chunk_();
+ }
+ this->current_chunk_->curr_ = this->curr_ = ptr;
+ }
+
+ // shrink-to-fit: remove any unused nodes in the chain
+ void conserve()
+ {
+ if(this->current_chunk_)
+ {
+ for(chunk *next; this->current_chunk_->next_; this->current_chunk_->next_ = next)
+ {
+ next = this->current_chunk_->next_->next_;
+ delete this->current_chunk_->next_;
+ }
+ }
+ }
+};
+
+typedef mpl::false_ no_fill_t;
+no_fill_t const no_fill = {};
+
+}}} // namespace boost::xpressive::detail
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma warning(pop)
+#endif
+
+#endif
diff --git a/boost/boost/xpressive/detail/utility/tracking_ptr.hpp b/boost/boost/xpressive/detail/utility/tracking_ptr.hpp
new file mode 100644
index 00000000000..388b46f271b
--- /dev/null
+++ b/boost/boost/xpressive/detail/utility/tracking_ptr.hpp
@@ -0,0 +1,489 @@
+///////////////////////////////////////////////////////////////////////////////
+// tracking_ptr.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_UTILITY_TRACKING_PTR_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_UTILITY_TRACKING_PTR_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#ifdef BOOST_XPRESSIVE_DEBUG_TRACKING_POINTER
+# include <iostream>
+#endif
+#include <set>
+#include <functional>
+#include <boost/config.hpp>
+#include <boost/assert.hpp>
+#include <boost/shared_ptr.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/enable_shared_from_this.hpp>
+#include <boost/type_traits/is_base_and_derived.hpp>
+#include <boost/iterator/iterator_facade.hpp>
+#include <boost/iterator/filter_iterator.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+template<typename Type>
+struct tracking_ptr;
+
+template<typename Derived>
+struct enable_reference_tracking;
+
+///////////////////////////////////////////////////////////////////////////////
+// weak_iterator
+// steps through a set of weak_ptr, converts to shared_ptrs on the fly and
+// removes from the set the weak_ptrs that have expired.
+template<typename Derived>
+struct weak_iterator
+ : boost::iterator_facade
+ <
+ weak_iterator<Derived>
+ , boost::shared_ptr<Derived> const
+ , std::forward_iterator_tag
+ >
+{
+ typedef std::set<boost::weak_ptr<Derived> > set_type;
+ typedef typename set_type::iterator base_iterator;
+
+ weak_iterator()
+ : cur_()
+ , iter_()
+ , set_(0)
+ {
+ }
+
+ weak_iterator(base_iterator iter, set_type *set)
+ : cur_()
+ , iter_(iter)
+ , set_(set)
+ {
+ this->satisfy_();
+ }
+
+private:
+ friend class boost::iterator_core_access;
+
+ boost::shared_ptr<Derived> const &dereference() const
+ {
+ return this->cur_;
+ }
+
+ void increment()
+ {
+ ++this->iter_;
+ this->satisfy_();
+ }
+
+ bool equal(weak_iterator<Derived> const &that) const
+ {
+ return this->iter_ == that.iter_;
+ }
+
+ void satisfy_()
+ {
+ while(this->iter_ != this->set_->end())
+ {
+ this->cur_ = this->iter_->lock();
+ if(this->cur_)
+ return;
+ base_iterator tmp = this->iter_++;
+ this->set_->erase(tmp);
+ }
+ this->cur_.reset();
+ }
+
+ boost::shared_ptr<Derived> cur_;
+ base_iterator iter_;
+ set_type *set_;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// reference_deleter
+//
+template<typename Derived>
+struct reference_deleter
+{
+ void operator ()(void *pv) const
+ {
+ typedef enable_reference_tracking<Derived> impl_type;
+ impl_type *pimpl = static_cast<impl_type *>(pv);
+ pimpl->refs_.clear();
+ }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// filter_self
+// for use with a filter_iterator to filter a node out of a list of dependencies
+template<typename Derived>
+struct filter_self
+ : std::unary_function<boost::shared_ptr<Derived>, bool>
+{
+ filter_self(enable_reference_tracking<Derived> *self)
+ : self_(self)
+ {
+ }
+
+ bool operator ()(boost::shared_ptr<Derived> const &that) const
+ {
+ return this->self_ != that.get();
+ }
+
+private:
+ enable_reference_tracking<Derived> *self_;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// enable_reference_tracking
+// inherit from this type to enable reference tracking for a type. You can
+// then use tracking_ptr (below) as a holder for derived objects.
+//
+template<typename Derived>
+struct enable_reference_tracking
+ : enable_shared_from_this<Derived>
+{
+ typedef enable_reference_tracking<Derived> this_type;
+ typedef std::set<shared_ptr<Derived> > references_type;
+ typedef std::set<weak_ptr<Derived> > dependents_type;
+
+ void tracking_copy(Derived const &that)
+ {
+ this->derived_() = that;
+ this->tracking_update();
+ }
+
+ // called automatically as a result of a tracking_copy(). Must be called explicitly
+ // if you change the references without calling tracking_copy().
+ void tracking_update()
+ {
+ // add "this" as a dependency to all the references
+ this->update_references_();
+ // notify our dependencies that we have new references
+ this->update_dependents_();
+ }
+
+ void tracking_clear()
+ {
+ this->derived_() = Derived();
+ }
+
+ void track_reference(shared_ptr<Derived> const &that)
+ {
+ // avoid some unbounded memory growth in certain circumstances by
+ // opportunistically removing stale dependencies from "that"
+ that->purge_stale_deps_();
+ // add "that" as a reference
+ this->refs_.insert(that);
+ // also inherit that's references
+ this->refs_.insert(that->refs_.begin(), that->refs_.end());
+ }
+
+ //{{AFX_DEBUG
+ #ifdef BOOST_XPRESSIVE_DEBUG_TRACKING_POINTER
+ friend std::ostream &operator <<(std::ostream &sout, enable_reference_tracking<Derived> const &that)
+ {
+ that.dump_(sout);
+ return sout;
+ }
+ #endif
+ //}}AFX_DEBUG
+
+protected:
+
+ enable_reference_tracking()
+ : refs_()
+ , deps_()
+ {
+ }
+
+ enable_reference_tracking(enable_reference_tracking<Derived> const &that)
+ : refs_()
+ , deps_()
+ {
+ this->operator =(that);
+ }
+
+ enable_reference_tracking<Derived> &operator =(enable_reference_tracking<Derived> const &that)
+ {
+ // BUGBUG derived classes will need to do something special to make their
+ // assignment operators exception-safe. Can we make this easier?
+ references_type(that.refs_).swap(this->refs_);
+ return *this;
+ }
+
+ void swap(enable_reference_tracking<Derived> &that)
+ {
+ this->refs_.swap(that.refs_);
+ }
+
+private:
+
+ friend struct tracking_ptr<Derived>;
+ friend struct reference_deleter<Derived>;
+
+ Derived &derived_()
+ {
+ return *static_cast<Derived *>(this);
+ }
+
+ bool has_deps_() const
+ {
+ return !this->deps_.empty();
+ }
+
+ shared_ptr<void> get_ref_deleter_()
+ {
+ return shared_ptr<void>(static_cast<void*>(this), reference_deleter<Derived>());
+ }
+
+ void update_references_()
+ {
+ typename references_type::iterator cur = this->refs_.begin();
+ typename references_type::iterator end = this->refs_.end();
+ for(; cur != end; ++cur)
+ {
+ if(this != cur->get()) // not necessary, but avoids a call to shared_from_this()
+ {
+ // for each reference, add this as a dependency
+ (*cur)->track_dependency_(this->shared_from_this());
+ }
+ }
+ }
+
+ void update_dependents_()
+ {
+ // called whenever this regex object changes (i.e., is assigned to). it walks
+ // the list of dependent regexes and updates *their* lists of references,
+ // thereby spreading out the reference counting responsibility evenly.
+ if(!this->refs_.empty())
+ {
+ weak_iterator<Derived> cur(this->deps_.begin(), &this->deps_);
+ weak_iterator<Derived> end(this->deps_.end(), &this->deps_);
+
+ for(; cur != end; ++cur)
+ {
+ (*cur)->track_reference(this->shared_from_this());
+ }
+ }
+ }
+
+ void track_dependency_(shared_ptr<Derived> const &dep)
+ {
+ if(this != dep.get()) // never add ourself as a dependency
+ {
+ // add dep as a dependency
+ this->deps_.insert(dep);
+
+ filter_self<Derived> not_self(this);
+ weak_iterator<Derived> begin(dep->deps_.begin(), &dep->deps_);
+ weak_iterator<Derived> end(dep->deps_.end(), &dep->deps_);
+
+ // also inherit dep's dependencies
+ this->deps_.insert(
+ boost::make_filter_iterator(not_self, begin, end)
+ , boost::make_filter_iterator(not_self, end, end)
+ );
+ }
+ }
+
+ void purge_stale_deps_()
+ {
+ weak_iterator<Derived> cur(this->deps_.begin(), &this->deps_);
+ weak_iterator<Derived> end(this->deps_.end(), &this->deps_);
+
+ for(; cur != end; ++cur)
+ ;
+ }
+
+ //{{AFX_DEBUG
+ #ifdef BOOST_XPRESSIVE_DEBUG_TRACKING_POINTER
+ void dump_(std::ostream &sout) const;
+ #endif
+ //}}AFX_DEBUG
+
+ references_type refs_;
+ dependents_type deps_;
+};
+
+//{{AFX_DEBUG
+#ifdef BOOST_XPRESSIVE_DEBUG_TRACKING_POINTER
+///////////////////////////////////////////////////////////////////////////////
+// dump_
+//
+template<typename Derived>
+inline void enable_reference_tracking<Derived>::dump_(std::ostream &sout) const
+{
+ shared_ptr<Derived const> this_ = this->shared_from_this();
+ sout << "0x" << (void*)this << " cnt=" << this_.use_count()-1 << " refs={";
+ typename references_type::const_iterator cur1 = this->refs_.begin();
+ typename references_type::const_iterator end1 = this->refs_.end();
+ for(; cur1 != end1; ++cur1)
+ {
+ sout << "0x" << (void*)&**cur1 << ',';
+ }
+ sout << "} deps={";
+ typename dependents_type::const_iterator cur2 = this->deps_.begin();
+ typename dependents_type::const_iterator end2 = this->deps_.end();
+ for(; cur2 != end2; ++cur2)
+ {
+ // ericne, 27/nov/05: CW9_4 doesn't like if(shared_ptr x = y)
+ shared_ptr<Derived> dep = cur2->lock();
+ if(dep.get())
+ {
+ sout << "0x" << (void*)&*dep << ',';
+ }
+ }
+ sout << '}';
+}
+#endif
+//}}AFX_DEBUG
+
+///////////////////////////////////////////////////////////////////////////////
+// tracking_ptr
+// holder for a reference-tracked type. Does cycle-breaking, lazy initialization
+// and copy-on-write. TODO: implement move semantics.
+//
+template<typename Type>
+struct tracking_ptr
+{
+private:
+ struct dummy_ { int n_; };
+ BOOST_MPL_ASSERT((is_base_and_derived<enable_reference_tracking<Type>, Type>));
+
+public:
+
+ typedef Type element_type;
+
+ tracking_ptr()
+ : data_()
+ , refs_()
+ {
+ }
+
+ tracking_ptr(tracking_ptr<element_type> const &that)
+ : data_()
+ , refs_()
+ {
+ this->operator =(that);
+ }
+
+ tracking_ptr<element_type> &operator =(tracking_ptr<element_type> const &that)
+ {
+ // Note: the copy-and-swap idiom doesn't work here if has_deps_()==true
+ // because it invalidates references to the element_type object.
+
+ if(that)
+ {
+ if(that.has_deps_() || this->has_deps_())
+ {
+ this->tracking_copy(*that.data_); // deep copy, forks data if necessary
+ }
+ else
+ {
+ this->refs_ = that.refs_; // shallow, copy-on-write
+ this->data_ = that.data_;
+ }
+ }
+ else if(*this)
+ {
+ this->data_->tracking_clear();
+ }
+
+ return *this;
+ }
+
+ // NOTE: this does *not* do tracking. Can't provide a non-throwing swap that tracks references
+ void swap(tracking_ptr<element_type> &that) // throw()
+ {
+ this->data_.swap(that.data_);
+ this->refs_.swap(that.refs_);
+ }
+
+ // deep copy, forces a fork and calls update() to update all the
+ // dependents and references.
+ void tracking_copy(element_type const &that)
+ {
+ this->get_(false)->tracking_copy(that);
+ }
+
+ // calling this forces this->data_ to fork.
+ shared_ptr<element_type> const &get() const
+ {
+ return this->get_(true); // copy == true
+ }
+
+ // smart-pointer operators
+ operator int dummy_::*() const
+ {
+ return this->data_ ? &dummy_::n_ : 0;
+ }
+
+ bool operator !() const
+ {
+ return !this->data_;
+ }
+
+ // Since this does not un-share the data, it returns a ptr-to-const
+ element_type const *operator ->() const
+ {
+ return this->data_.get();
+ }
+
+ // Since this does not un-share the data, it returns a ref-to-const
+ element_type const &operator *() const
+ {
+ return *this->data_;
+ }
+
+private:
+
+ // calling this forces data_ to fork. if 'copy' is true, then
+ // the old data is copied into the fork.
+ shared_ptr<element_type> const &get_(bool copy) const
+ {
+ if(!*this)
+ {
+ this->data_.reset(new element_type);
+ this->refs_ = this->data_->get_ref_deleter_();
+ }
+ else if(!this->unique_())
+ {
+ BOOST_ASSERT(!this->has_deps_());
+ shared_ptr<element_type> new_data(new element_type);
+ if(copy)
+ {
+ new_data->tracking_copy(*this->data_);
+ }
+ this->data_.swap(new_data);
+ this->refs_ = this->data_->get_ref_deleter_();
+ }
+
+ return this->data_;
+ }
+
+ // are we the only holders of this data?
+ bool unique_() const
+ {
+ return this->refs_.unique();
+ }
+
+ // does anybody have a dependency on us?
+ bool has_deps_() const
+ {
+ return this->data_ && this->data_->has_deps_();
+ }
+
+ // mutable to allow lazy initialization
+ mutable shared_ptr<element_type> data_;
+ mutable shared_ptr<void> refs_;
+};
+
+}}} // namespace boost::xpressive::detail
+
+#endif
diff --git a/boost/boost/xpressive/detail/utility/traits_utils.hpp b/boost/boost/xpressive/detail/utility/traits_utils.hpp
new file mode 100644
index 00000000000..0003e703a29
--- /dev/null
+++ b/boost/boost/xpressive/detail/utility/traits_utils.hpp
@@ -0,0 +1,90 @@
+///////////////////////////////////////////////////////////////////////////////
+// traits_utils.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DETAIL_UTILITY_TRAITS_UTILS_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DETAIL_UTILITY_TRAITS_UTILS_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+# pragma warning(push)
+# pragma warning(disable : 4100) // unreferenced formal parameter
+#endif
+
+#include <string>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // char_cast
+ //
+ template<typename ToChar, typename FromChar, typename Traits>
+ inline ToChar
+ char_cast(FromChar from, Traits const &, typename enable_if<is_same<ToChar, FromChar> >::type * = 0)
+ {
+ return from;
+ }
+
+ template<typename ToChar, typename FromChar, typename Traits>
+ inline ToChar
+ char_cast(FromChar from, Traits const &traits, typename disable_if<is_same<ToChar, FromChar> >::type * = 0)
+ {
+ BOOST_MPL_ASSERT((is_same<FromChar, char>));
+ return traits.widen(from);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // string_cast
+ //
+ template<typename ToChar, typename FromChar, typename Traits>
+ inline std::basic_string<ToChar> const &
+ string_cast(std::basic_string<FromChar> const &from, Traits const &, typename enable_if<is_same<ToChar, FromChar> >::type * = 0)
+ {
+ return from;
+ }
+
+ template<typename ToChar, typename FromChar, typename Traits>
+ inline std::basic_string<ToChar> const
+ string_cast(std::basic_string<FromChar> const &from, Traits const &traits, typename disable_if<is_same<ToChar, FromChar> >::type * = 0)
+ {
+ BOOST_MPL_ASSERT((is_same<FromChar, char>));
+ std::basic_string<ToChar> to;
+ to.reserve(from.size());
+ for(typename std::basic_string<FromChar>::size_type i = 0; i < from.size(); ++i)
+ {
+ to.push_back(traits.widen(from[i]));
+ }
+ return to;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // translate
+ //
+ template<typename Char, typename Traits>
+ inline Char translate(Char ch, Traits const &traits, mpl::false_) // case-sensitive
+ {
+ return traits.translate(ch);
+ }
+
+ template<typename Char, typename Traits>
+ inline Char translate(Char ch, Traits const &traits, mpl::true_) // case-insensitive
+ {
+ return traits.translate_nocase(ch);
+ }
+
+}}} // namespace boost::xpressive::detail
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma warning(pop)
+#endif
+
+#endif
diff --git a/boost/boost/xpressive/match_results.hpp b/boost/boost/xpressive/match_results.hpp
new file mode 100644
index 00000000000..84a6cdfedce
--- /dev/null
+++ b/boost/boost/xpressive/match_results.hpp
@@ -0,0 +1,524 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file match_results.hpp
+/// Contains the definition of the match_results type and associated helpers.
+/// The match_results type holds the results of a regex_match() or
+/// regex_search() operation.
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_MATCH_RESULTS_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_MATCH_RESULTS_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <iterator>
+#include <boost/assert.hpp>
+#include <boost/shared_ptr.hpp>
+#include <boost/iterator_adaptors.hpp>
+#if BOOST_ITERATOR_ADAPTORS_VERSION >= 0x0200
+# include <boost/iterator/filter_iterator.hpp>
+#endif
+#include <boost/xpressive/regex_constants.hpp>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/core/sub_match_vector.hpp>
+#include <boost/xpressive/detail/utility/sequence_stack.hpp>
+#include <boost/xpressive/detail/core/results_cache.hpp>
+#include <boost/xpressive/detail/core/action_state.hpp>
+#include <boost/xpressive/detail/utility/literals.hpp>
+#include <boost/xpressive/detail/utility/algorithm.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+///////////////////////////////////////////////////////////////////////////////
+// results_extras
+//
+template<typename BidiIter>
+struct results_extras
+{
+ sequence_stack<sub_match_impl<BidiIter> > sub_match_stack_;
+ results_cache<BidiIter> results_cache_;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// results_traits
+//
+template<typename Char>
+struct results_traits
+{
+ static int value(Char ch, int radix = 10)
+ {
+ BOOST_ASSERT(10 == radix);
+ if(ch >= BOOST_XPR_CHAR_(Char, '0') && ch <= BOOST_XPR_CHAR_(Char, '9'))
+ {
+ return ch - BOOST_XPR_CHAR_(Char, '0');
+ }
+ return -1;
+ }
+};
+
+} // namespace detail
+
+///////////////////////////////////////////////////////////////////////////////
+// match_results
+/// \brief Class template match_results\<\> holds the results of a regex_match() or a
+/// regex_search() as a collection of sub_match objects.
+///
+/// Class template match_results\<\> denotes a collection of sequences representing the result of
+/// a regular expression match. Storage for the collection is allocated and freed as necessary by
+/// the member functions of class match_results\<\>.
+///
+/// The class template match_results\<\> conforms to the requirements of a Sequence, as specified
+/// in (lib.sequence.reqmts), except that only operations defined for const-qualified Sequences are
+/// supported.
+template<typename BidiIter>
+struct match_results
+{
+private:
+ struct dummy { int i_; };
+ typedef int dummy::*bool_type;
+
+public:
+ typedef typename iterator_value<BidiIter>::type char_type;
+ typedef std::basic_string<char_type> string_type;
+ typedef std::size_t size_type;
+ typedef sub_match<BidiIter> value_type;
+ typedef typename iterator_difference<BidiIter>::type difference_type;
+ typedef value_type const &reference;
+ typedef value_type const &const_reference;
+
+ typedef typename detail::sub_match_vector<BidiIter>::iterator iterator;
+ typedef typename detail::sub_match_vector<BidiIter>::const_iterator const_iterator;
+ typedef typename detail::nested_results<BidiIter> nested_results_type;
+
+ /// \post regex_id() == 0
+ /// \post size() == 0
+ /// \post empty() == true
+ match_results()
+ : regex_id_(0)
+ , sub_matches_()
+ , base_()
+ , prefix_()
+ , suffix_()
+ , nested_results_()
+ , action_state_()
+ , extras_ptr_()
+ {
+ }
+
+ /// \param that The match_results object to copy
+ /// \post regex_id() == that.regex_id().
+ /// \post size() == that.size().
+ /// \post empty() == that.empty().
+ /// \post str(n) == that.str(n) for all positive integers n \< that.size().
+ /// \post prefix() == that.prefix().
+ /// \post suffix() == that.suffix().
+ /// \post (*this)[n] == that[n] for all positive integers n \< that.size().
+ /// \post length(n) == that.length(n) for all positive integers n \< that.size().
+ /// \post position(n) == that.position(n) for all positive integers n \< that.size().
+ match_results(match_results<BidiIter> const &that)
+ : regex_id_(that.regex_id_)
+ , sub_matches_()
+ , base_()
+ , prefix_()
+ , suffix_()
+ , nested_results_()
+ , action_state_(that.action_state_)
+ , extras_ptr_()
+ {
+ if(that)
+ {
+ extras_type &extras = this->get_extras_();
+ std::size_t size = that.sub_matches_.size();
+ detail::sub_match_impl<BidiIter> *sub_matches = extras.sub_match_stack_.push_sequence(size);
+ detail::core_access<BidiIter>::init_sub_match_vector(this->sub_matches_, sub_matches, size, that.sub_matches_);
+
+ // BUGBUG this doesn't share the extras::sequence_stack
+ this->nested_results_ = that.nested_results_;
+ this->prefix_ = that.prefix_;
+ this->suffix_ = that.suffix_;
+ this->base_ = that.base_;
+ }
+ }
+
+ ~match_results()
+ {
+ }
+
+ /// \param that The match_results object to copy.
+ /// \post regex_id() == that.regex_id().
+ /// \post size() == that.size().
+ /// \post empty() == that.empty().
+ /// \post str(n) == that.str(n) for all positive integers n \< that.size().
+ /// \post prefix() == that.prefix().
+ /// \post suffix() == that.suffix().
+ /// \post (*this)[n] == that[n] for all positive integers n \< that.size().
+ /// \post length(n) == that.length(n) for all positive integers n \< that.size().
+ /// \post position(n) == that.position(n) for all positive integers n \< that.size().
+ match_results<BidiIter> &operator =(match_results<BidiIter> const &that)
+ {
+ match_results<BidiIter>(that).swap(*this);
+ return *this;
+ }
+
+ /// Returns the number of sub_match elements stored in *this.
+ ///
+ size_type size() const
+ {
+ return this->sub_matches_.size();
+ }
+
+ /// Returns size() == 0.
+ ///
+ bool empty() const
+ {
+ return 0 == this->size();
+ }
+
+ /// Returns (*this)[sub].length().
+ ///
+ difference_type length(size_type sub = 0) const
+ {
+ return (*this)[ sub ].length();
+ }
+
+ /// If !(*this)[sub].matched then returns -1. Otherwise returns std::distance(base, (*this)[sub].first),
+ /// where base is the start iterator of the sequence that was searched. [Note – unless this is part
+ /// of a repeated search with a regex_iterator then base is the same as prefix().first – end note]
+ difference_type position(size_type sub = 0) const
+ {
+ return (*this)[ sub ].matched ? std::distance(this->base_, (*this)[ sub ].first) : -1;
+ }
+
+ /// Returns string_type((*this)[sub]).
+ ///
+ string_type str(size_type sub = 0) const
+ {
+ return (*this)[ sub ].str();
+ }
+
+ /// Returns a reference to the sub_match object representing the sequence that
+ /// matched marked sub-expression sub. If sub == 0 then returns a reference to a sub_match object
+ /// representing the sequence that matched the whole regular expression.
+ /// \pre sub \< (*this).size().
+ const_reference operator [](size_type sub) const
+ {
+ return this->sub_matches_[ sub ];
+ }
+
+ /// \overload
+ ///
+ const_reference operator [](detail::mark_tag const &mark) const
+ {
+ return this->sub_matches_[ detail::get_mark_number(mark) ];
+ }
+
+ /// Returns a reference to the sub_match object representing the character sequence from
+ /// the start of the string being matched/searched, to the start of the match found.
+ ///
+ const_reference prefix() const
+ {
+ return this->prefix_;
+ }
+
+ /// Returns a reference to the sub_match object representing the character sequence from
+ /// the end of the match found to the end of the string being matched/searched.
+ ///
+ const_reference suffix() const
+ {
+ return this->suffix_;
+ }
+
+ /// Returns a starting iterator that enumerates over all the marked sub-expression matches
+ /// stored in *this.
+ ///
+ const_iterator begin() const
+ {
+ return this->sub_matches_.begin();
+ }
+
+ /// Returns a terminating iterator that enumerates over all the marked sub-expression
+ /// matches stored in *this.
+ ///
+ const_iterator end() const
+ {
+ return this->sub_matches_.end();
+ }
+
+ /// Returns a true value if(*this)[0].matched, else returns a false value.
+ ///
+ operator bool_type() const
+ {
+ return (*this)[ 0 ].matched ? &dummy::i_ : 0;
+ }
+
+ /// Returns true if empty() || !(*this)[0].matched, else returns false.
+ ///
+ bool operator !() const
+ {
+ return this->empty() || !(*this)[ 0 ].matched;
+ }
+
+ /// Returns the id of the basic_regex object most recently used with this match_results object.
+ ///
+ regex_id_type regex_id() const
+ {
+ return this->regex_id_;
+ }
+
+ /// Returns a Sequence of nested match_results elements.
+ ///
+ nested_results_type const &nested_results() const
+ {
+ return this->nested_results_;
+ }
+
+ /// Copies the character sequence [fmt.begin(), fmt.end()) to OutputIterator out. For each format
+ /// specifier or escape sequence in fmt, replace that sequence with either the character(s) it
+ /// represents, or the sequence within *this to which it refers. The bitmasks specified in flags
+ /// determines what format specifiers or escape sequences are recognized, by default this is the
+ /// format used by ECMA-262, ECMAScript Language Specification, Chapter 15 part 5.4.11 String.prototype.replace.
+ template<typename OutputIterator>
+ OutputIterator format
+ (
+ OutputIterator out
+ , const string_type &fmt
+ , regex_constants::match_flag_type flags = regex_constants::format_default
+ ) const
+ {
+ detail::results_traits<char_type> traits;
+ typename string_type::const_iterator cur = fmt.begin(), end = fmt.end();
+
+ if(0 != (regex_constants::format_literal & flags))
+ {
+ out = std::copy(cur, end, out);
+ }
+ else while(cur != end)
+ {
+ if(BOOST_XPR_CHAR_(char_type, '$') != *cur)
+ {
+ *out++ = *cur++;
+ }
+ else if(++cur == end)
+ {
+ *out++ = BOOST_XPR_CHAR_(char_type, '$');
+ }
+ else if(BOOST_XPR_CHAR_(char_type, '$') == *cur)
+ {
+ *out++ = *cur++;
+ }
+ else if(BOOST_XPR_CHAR_(char_type, '&') == *cur) // whole match
+ {
+ ++cur;
+ out = std::copy((*this)[ 0 ].first, (*this)[ 0 ].second, out);
+ }
+ else if(BOOST_XPR_CHAR_(char_type, '`') == *cur) // prefix
+ {
+ ++cur;
+ out = std::copy(this->prefix().first, this->prefix().second, out);
+ }
+ else if(BOOST_XPR_CHAR_(char_type, '\'') == *cur) // suffix
+ {
+ ++cur;
+ out = std::copy(this->suffix().first, this->suffix().second, out);
+ }
+ else if(-1 != traits.value(*cur, 10)) // a sub-match
+ {
+ int max = static_cast<int>(this->size() - 1);
+ int br_nbr = detail::toi(cur, end, traits, 10, max);
+ detail::ensure(0 != br_nbr, regex_constants::error_subreg, "invalid back-reference");
+ out = std::copy((*this)[ br_nbr ].first, (*this)[ br_nbr ].second, out);
+ }
+ else
+ {
+ *out++ = BOOST_XPR_CHAR_(char_type, '$');
+ *out++ = *cur++;
+ }
+ }
+
+ return out;
+ }
+
+ /// Returns a copy of the string fmt. For each format specifier or escape sequence in fmt,
+ /// replace that sequence with either the character(s) it represents, or the sequence within
+ /// *this to which it refers. The bitmasks specified in flags determines what format specifiers
+ /// or escape sequences are recognized, by default this is the format used by ECMA-262,
+ /// ECMAScript Language Specification, Chapter 15 part 5.4.11 String.prototype.replace.
+ string_type format(const string_type &fmt, regex_constants::match_flag_type flags = regex_constants::format_default) const
+ {
+ string_type result;
+ result.reserve(fmt.length() * 2);
+ this->format(std::back_inserter(result), fmt, flags);
+ return result;
+ }
+
+ /// Swaps the contents of two match_results objects. Guaranteed not to throw.
+ /// \param that The match_results object to swap with.
+ /// \post *this contains the sequence of matched sub-expressions that were in that,
+ /// that contains the sequence of matched sub-expressions that were in *this.
+ /// \throw nothrow
+ void swap(match_results<BidiIter> &that) // throw()
+ {
+ std::swap(this->regex_id_, that.regex_id_);
+ this->sub_matches_.swap(that.sub_matches_);
+ std::swap(this->base_, that.base_);
+ std::swap(this->prefix_, that.prefix_);
+ std::swap(this->suffix_, that.suffix_);
+ this->nested_results_.swap(that.nested_results_);
+ std::swap(this->action_state_, that.action_state_);
+ this->extras_ptr_.swap(that.extras_ptr_);
+ }
+
+ /// INTERNAL ONLY
+ match_results<BidiIter> const &operator ()(regex_id_type regex_id, size_type index = 0) const
+ {
+ // BUGBUG this is linear, make it O(1)
+ static match_results<BidiIter> const s_null;
+
+ regex_id_filter_predicate<BidiIter> pred(regex_id);
+ typename nested_results_type::const_iterator
+ begin = this->nested_results_.begin()
+ , end = this->nested_results_.end()
+ , cur = detail::find_nth_if(begin, end, index, pred);
+
+ return (cur == end) ? s_null : *cur;
+ }
+
+ /// INTERNAL ONLY
+ match_results<BidiIter> const &operator ()(basic_regex<BidiIter> const &rex, std::size_t index = 0) const
+ {
+ return (*this)(rex.regex_id(), index);
+ }
+
+ // state:
+ /// INTERNAL ONLY
+ template<typename State>
+ void set_action_state(State &state)
+ {
+ this->action_state_.set(state);
+ }
+
+ /// INTERNAL ONLY
+ template<typename State>
+ State &get_action_state() const
+ {
+ return this->action_state_.BOOST_NESTED_TEMPLATE get<State>();
+ }
+
+private:
+
+ friend struct detail::core_access<BidiIter>;
+ typedef detail::results_extras<BidiIter> extras_type;
+
+ /// INTERNAL ONLY
+ void init_
+ (
+ regex_id_type regex_id
+ , detail::sub_match_impl<BidiIter> *sub_matches
+ , size_type size
+ )
+ {
+ this->regex_id_ = regex_id;
+ detail::core_access<BidiIter>::init_sub_match_vector(this->sub_matches_, sub_matches, size);
+ }
+
+ /// INTERNAL ONLY
+ extras_type &get_extras_()
+ {
+ if(!this->extras_ptr_)
+ {
+ this->extras_ptr_.reset(new extras_type);
+ }
+
+ return *this->extras_ptr_;
+ }
+
+ /// INTERNAL ONLY
+ void set_prefix_suffix_(BidiIter begin, BidiIter end)
+ {
+ this->base_ = begin;
+
+ this->prefix_.first = begin;
+ this->prefix_.second = (*this)[ 0 ].first;
+ this->prefix_.matched = this->prefix_.first != this->prefix_.second;
+
+ this->suffix_.first = (*this)[ 0 ].second;
+ this->suffix_.second = end;
+ this->suffix_.matched = this->suffix_.first != this->suffix_.second;
+
+ typename nested_results_type::iterator ibegin = this->nested_results_.begin();
+ typename nested_results_type::iterator iend = this->nested_results_.end();
+ for( ; ibegin != iend; ++ibegin )
+ {
+ ibegin->set_prefix_suffix_(begin, end);
+ }
+ }
+
+ /// INTERNAL ONLY
+ void reset_()
+ {
+ detail::core_access<BidiIter>::init_sub_match_vector(this->sub_matches_, 0, 0);
+ }
+
+ /// INTERNAL ONLY
+ void set_base_(BidiIter base)
+ {
+ this->base_ = base;
+
+ typename nested_results_type::iterator ibegin = this->nested_results_.begin();
+ typename nested_results_type::iterator iend = this->nested_results_.end();
+ for( ; ibegin != iend; ++ibegin )
+ {
+ ibegin->set_base_(base);
+ }
+ }
+
+ regex_id_type regex_id_;
+ detail::sub_match_vector<BidiIter> sub_matches_;
+ BidiIter base_;
+ sub_match<BidiIter> prefix_;
+ sub_match<BidiIter> suffix_;
+ nested_results_type nested_results_;
+ detail::action_state action_state_;
+ shared_ptr<extras_type> extras_ptr_;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// action_state_cast
+/// INTERNAL ONLY
+template<typename State, typename BidiIter>
+inline State &action_state_cast(match_results<BidiIter> const &what)
+{
+ return what.BOOST_NESTED_TEMPLATE get_action_state<State>();
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// regex_id_filter_predicate
+//
+template<typename BidiIter>
+struct regex_id_filter_predicate
+ : std::unary_function<match_results<BidiIter>, bool>
+{
+ regex_id_filter_predicate(regex_id_type regex_id)
+ : regex_id_(regex_id)
+ {
+ }
+
+ bool operator ()(match_results<BidiIter> const &res) const
+ {
+ return this->regex_id_ == res.regex_id();
+ }
+
+private:
+
+ regex_id_type regex_id_;
+};
+
+}} // namespace boost::xpressive
+
+#endif
diff --git a/boost/boost/xpressive/proto/arg_traits.hpp b/boost/boost/xpressive/proto/arg_traits.hpp
new file mode 100644
index 00000000000..2561532e8fe
--- /dev/null
+++ b/boost/boost/xpressive/proto/arg_traits.hpp
@@ -0,0 +1,123 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file arg_traits.hpp
+/// Contains definitions for value_type\<\>, arg_type\<\>, left_type\<\>,
+/// right_type\<\>, tag_type\<\>, and the helper functions arg(), left(),
+/// and right().
+//
+// Copyright 2004 Eric Niebler. 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_PROTO_ARG_TRAITS_HPP_EAN_04_01_2005
+#define BOOST_PROTO_ARG_TRAITS_HPP_EAN_04_01_2005
+
+#include <boost/call_traits.hpp>
+#include <boost/xpressive/proto/proto_fwd.hpp>
+
+namespace boost { namespace proto
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // value_type
+ // specialize this to control how user-defined types are stored in the parse tree
+ template<typename T>
+ struct value_type
+ {
+ typedef typename boost::call_traits<T>::value_type type;
+ };
+
+ template<>
+ struct value_type<fusion::void_t>
+ {
+ typedef fusion::void_t type;
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // argument type extractors
+ template<typename Op>
+ struct arg_type
+ {
+ typedef typename Op::arg_type type;
+ typedef type const &const_reference;
+ };
+
+ template<typename Op, typename Param>
+ struct arg_type<op_proxy<Op, Param> >
+ {
+ typedef typename Op::arg_type type;
+ typedef type const const_reference;
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // argument type extractors
+ template<typename Op>
+ struct left_type
+ {
+ typedef typename Op::left_type type;
+ typedef type const &const_reference;
+ };
+
+ template<typename Op, typename Param>
+ struct left_type<op_proxy<Op, Param> >
+ {
+ typedef typename Op::left_type type;
+ typedef type const const_reference;
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // argument type extractors
+ template<typename Op>
+ struct right_type
+ {
+ typedef typename Op::right_type type;
+ typedef type const &const_reference;
+ };
+
+ template<typename Op, typename Param>
+ struct right_type<op_proxy<Op, Param> >
+ {
+ typedef typename Op::right_type type;
+ typedef type const const_reference;
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // tag extractor
+ template<typename Op>
+ struct tag_type
+ {
+ typedef typename Op::tag_type type;
+ };
+
+ template<typename Op, typename Param>
+ struct tag_type<op_proxy<Op, Param> >
+ {
+ typedef typename Op::tag_type type;
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // arg
+ template<typename Op>
+ inline typename arg_type<Op>::const_reference arg(Op const &op)
+ {
+ return op.cast().arg;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // left
+ template<typename Op>
+ inline typename left_type<Op>::const_reference left(Op const &op)
+ {
+ return op.cast().left;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // right
+ template<typename Op>
+ inline typename right_type<Op>::const_reference right(Op const &op)
+ {
+ return op.cast().right;
+ }
+
+}}
+
+#endif
diff --git a/boost/boost/xpressive/proto/compiler/branch.hpp b/boost/boost/xpressive/proto/compiler/branch.hpp
new file mode 100644
index 00000000000..76c6d0a6a21
--- /dev/null
+++ b/boost/boost/xpressive/proto/compiler/branch.hpp
@@ -0,0 +1,63 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file branch.hpp
+/// A special-purpose proto compiler for compiling one branch of the expression
+/// tree separately from the rest. Given an expression and a proto lambda, it
+/// compiles the expression using an initial state determined by the lambda.
+/// It then passes the result along with the current state and the visitor
+/// to the lambda for further processing.
+//
+// Copyright 2004 Eric Niebler. 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_PROTO_COMPILER_BRANCH_HPP_EAN_04_01_2005
+#define BOOST_PROTO_COMPILER_BRANCH_HPP_EAN_04_01_2005
+
+#include <boost/xpressive/proto/proto_fwd.hpp>
+
+namespace boost { namespace proto
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // branch_compiler
+ template<typename Lambda, typename DomainTag>
+ struct branch_compiler
+ {
+ template<typename Op, typename State, typename Visitor>
+ struct apply
+ {
+ typedef proto::compiler<typename tag_type<Op>::type, DomainTag> compiler_type;
+
+ // Compile the branch
+ typedef typename compiler_type::BOOST_NESTED_TEMPLATE apply
+ <
+ Op
+ , typename Lambda::state_type
+ , Visitor
+ >::type branch_type;
+
+ // Pass the branch, state and visitor to the lambda
+ typedef typename Lambda::BOOST_NESTED_TEMPLATE apply
+ <
+ branch_type
+ , State
+ , Visitor
+ >::type type;
+ };
+
+ template<typename Op, typename State, typename Visitor>
+ static typename apply<Op, State, Visitor>::type
+ call(Op const &op, State const &state, Visitor &visitor)
+ {
+ return Lambda::call
+ (
+ proto::compile(op, typename Lambda::state_type(), visitor, DomainTag())
+ , state
+ , visitor
+ );
+ }
+ };
+
+}}
+
+#endif
diff --git a/boost/boost/xpressive/proto/compiler/conditional.hpp b/boost/boost/xpressive/proto/compiler/conditional.hpp
new file mode 100644
index 00000000000..25e5588c0f9
--- /dev/null
+++ b/boost/boost/xpressive/proto/compiler/conditional.hpp
@@ -0,0 +1,54 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file conditional.hpp
+/// A special-purpose proto compiler for compiling an expression either one
+/// way or another depending on the properties of the expression.
+//
+// Copyright 2004 Eric Niebler. 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_PROTO_COMPILER_CONDITIONAL_HPP_EAN_04_01_2005
+#define BOOST_PROTO_COMPILER_CONDITIONAL_HPP_EAN_04_01_2005
+
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/xpressive/proto/proto_fwd.hpp>
+
+namespace boost { namespace proto
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // conditional_compiler
+ template<typename Predicate, typename IfCompiler, typename ElseCompiler>
+ struct conditional_compiler
+ {
+ template<typename Op, typename State, typename Visitor>
+ struct apply
+ {
+ typedef typename boost::mpl::if_
+ <
+ typename Predicate::BOOST_NESTED_TEMPLATE apply<Op, State, Visitor>::type
+ , IfCompiler
+ , ElseCompiler
+ >::type compiler_type;
+
+ typedef typename compiler_type::BOOST_NESTED_TEMPLATE apply
+ <
+ Op
+ , State
+ , Visitor
+ >::type type;
+ };
+
+ template<typename Op, typename State, typename Visitor>
+ static typename apply<Op, State, Visitor>::type
+ call(Op const &op, State const &state, Visitor &visitor)
+ {
+ typedef typename apply<Op, State, Visitor>::compiler_type compiler_type;
+ return compiler_type::call(op, state, visitor);
+ }
+ };
+
+}}
+
+#endif
diff --git a/boost/boost/xpressive/proto/compiler/error.hpp b/boost/boost/xpressive/proto/compiler/error.hpp
new file mode 100644
index 00000000000..988eff549c9
--- /dev/null
+++ b/boost/boost/xpressive/proto/compiler/error.hpp
@@ -0,0 +1,31 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file error.hpp
+/// A special-purpose proto compiler that simply generates an error. Useful for
+/// flagging certain constructs as illegal.
+//
+// Copyright 2004 Eric Niebler. 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_PROTO_COMPILER_ERROR_HPP_EAN_04_01_2005
+#define BOOST_PROTO_COMPILER_ERROR_HPP_EAN_04_01_2005
+
+#include <boost/xpressive/proto/proto_fwd.hpp>
+
+namespace boost { namespace proto
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // error_compiler
+ struct error_compiler
+ {
+ template<typename Op, typename State, typename Visitor>
+ struct apply
+ {
+ typedef void type;
+ };
+ };
+
+}}
+
+#endif
diff --git a/boost/boost/xpressive/proto/compiler/fold.hpp b/boost/boost/xpressive/proto/compiler/fold.hpp
new file mode 100644
index 00000000000..275e950add8
--- /dev/null
+++ b/boost/boost/xpressive/proto/compiler/fold.hpp
@@ -0,0 +1,113 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file fold.hpp
+/// A special-purpose proto compiler for merging sequences of binary operations.
+/// It compiles the right operand and passes the result as state while compiling
+/// the left. Or, it might do the left first, if you choose.
+//
+// Copyright 2004 Eric Niebler. 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_PROTO_COMPILER_FOLD_HPP_EAN_04_01_2005
+#define BOOST_PROTO_COMPILER_FOLD_HPP_EAN_04_01_2005
+
+#include <boost/xpressive/proto/proto_fwd.hpp>
+
+namespace boost { namespace proto
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // fold_compiler
+ // Compiles the right side and passes the result as state while compiling the left.
+ // This is useful for serializing a tree.
+ template<typename OpTag, typename DomainTag, bool RightFirst>
+ struct fold_compiler
+ {
+ // sample compiler implementation for sequencing
+ template<typename Op, typename State, typename Visitor>
+ struct apply
+ {
+ typedef typename right_type<Op>::type right_type;
+ typedef typename left_type<Op>::type left_type;
+
+ // compile the right branch
+ typedef typename compiler<typename tag_type<right_type>::type, DomainTag>::
+ BOOST_NESTED_TEMPLATE apply
+ <
+ right_type
+ , State
+ , Visitor
+ >::type right_compiled_type;
+
+ // forward the result of the right branch to the left
+ typedef typename compiler<typename tag_type<left_type>::type, DomainTag>::
+ BOOST_NESTED_TEMPLATE apply
+ <
+ left_type
+ , right_compiled_type
+ , Visitor
+ >::type type;
+ };
+
+ template<typename Op, typename State, typename Visitor>
+ static typename apply<Op, State, Visitor>::type
+ call(Op const &op, State const &state, Visitor &visitor)
+ {
+ return proto::compile(
+ proto::left(op)
+ , proto::compile(proto::right(op), state, visitor, DomainTag())
+ , visitor
+ , DomainTag()
+ );
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // fold_compiler
+ // Compiles the left side and passes the result as state while compiling the right.
+ // This is useful for serializing a tree.
+ template<typename OpTag, typename DomainTag>
+ struct fold_compiler<OpTag, DomainTag, false>
+ {
+ // sample compiler implementation for sequencing
+ template<typename Op, typename State, typename Visitor>
+ struct apply
+ {
+ typedef typename right_type<Op>::type right_type;
+ typedef typename left_type<Op>::type left_type;
+
+ // compile the right branch
+ typedef typename compiler<typename tag_type<left_type>::type, DomainTag>::
+ BOOST_NESTED_TEMPLATE apply
+ <
+ left_type
+ , State
+ , Visitor
+ >::type left_compiled_type;
+
+ // forward the result of the right branch to the left
+ typedef typename compiler<typename tag_type<right_type>::type, DomainTag>::
+ BOOST_NESTED_TEMPLATE apply
+ <
+ right_type
+ , left_compiled_type
+ , Visitor
+ >::type type;
+ };
+
+ template<typename Op, typename State, typename Visitor>
+ static typename apply<Op, State, Visitor>::type
+ call(Op const &op, State const &state, Visitor &visitor)
+ {
+ return proto::compile(
+ proto::right(op)
+ , proto::compile(proto::left(op), state, visitor, DomainTag())
+ , visitor
+ , DomainTag()
+ );
+ }
+ };
+
+}}
+
+#endif
diff --git a/boost/boost/xpressive/proto/compiler/switch.hpp b/boost/boost/xpressive/proto/compiler/switch.hpp
new file mode 100644
index 00000000000..9fa7d737999
--- /dev/null
+++ b/boost/boost/xpressive/proto/compiler/switch.hpp
@@ -0,0 +1,55 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file switch.hpp
+/// A generalization of the conditional_compiler. Given N different compilers
+/// in a MPL-style map and a lambda that generates a key from an expression,
+/// find the compiler in the map corresponding to the key and use that compiler
+/// to compile the expression.
+//
+// Copyright 2004 Eric Niebler. 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_PROTO_COMPILER_SWITCH_HPP_EAN_04_01_2005
+#define BOOST_PROTO_COMPILER_SWITCH_HPP_EAN_04_01_2005
+
+#include <boost/mpl/at.hpp>
+#include <boost/xpressive/proto/proto_fwd.hpp>
+
+namespace boost { namespace proto
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // switch_compiler
+ // applies a transform, then looks up the appropriate compiler in a map
+ template<typename Lambda, typename Map>
+ struct switch_compiler
+ {
+ template<typename Op, typename State, typename Visitor>
+ struct apply
+ {
+ typedef typename boost::mpl::at
+ <
+ Map
+ , typename Lambda::BOOST_NESTED_TEMPLATE apply<Op, State, Visitor>::type
+ >::type compiler_type;
+
+ typedef typename compiler_type::BOOST_NESTED_TEMPLATE apply
+ <
+ Op
+ , State
+ , Visitor
+ >::type type;
+ };
+
+ template<typename Op, typename State, typename Visitor>
+ static typename apply<Op, State, Visitor>::type
+ call(Op const &op, State const &state, Visitor &visitor)
+ {
+ typedef typename apply<Op, State, Visitor>::compiler_type compiler_type;
+ return compiler_type::call(op, state, visitor);
+ }
+ };
+
+}}
+
+#endif
diff --git a/boost/boost/xpressive/proto/compiler/transform.hpp b/boost/boost/xpressive/proto/compiler/transform.hpp
new file mode 100644
index 00000000000..45d5991bd74
--- /dev/null
+++ b/boost/boost/xpressive/proto/compiler/transform.hpp
@@ -0,0 +1,253 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file transform.hpp
+/// A special-purpose proto compiler for applying a transformation to an
+/// expression. The transformation is a proto lambda. The result of the
+/// transformation is forwarded to the specified compiler, or to the
+/// default compiler for the resulting expression is no compiler is
+/// specified. Also included are some basic transforms, such as one that
+/// extracts the operand of a unary op, the left and right operands of
+/// a binary op, and a way to compose multiple transforms into one.
+//
+// Copyright 2004 Eric Niebler. 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_PROTO_COMPILER_TRANSFORM_HPP_EAN_04_01_2005
+#define BOOST_PROTO_COMPILER_TRANSFORM_HPP_EAN_04_01_2005
+
+#include <boost/xpressive/proto/proto_fwd.hpp>
+#include <boost/xpressive/proto/arg_traits.hpp>
+
+namespace boost { namespace proto
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // transform_compiler
+ // accepts a transformation as a lambda, applies the transformation to any
+ // parse tree passed in, and then compiles the result using the specified
+ // compiler
+ template<typename Lambda, typename DomainTag, typename Compiler>
+ struct transform_compiler
+ {
+ template<typename Op, typename State, typename Visitor>
+ struct apply
+ {
+ typedef typename Compiler::BOOST_NESTED_TEMPLATE apply
+ <
+ typename Lambda::BOOST_NESTED_TEMPLATE apply<Op, State, Visitor>::type
+ , State
+ , Visitor
+ >::type type;
+ };
+
+ template<typename Op, typename State, typename Visitor>
+ static typename apply<Op, State, Visitor>::type
+ call(Op const &op, State const &state, Visitor &visitor)
+ {
+ return Compiler::call(Lambda::call(op, state, visitor), state, visitor);
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // if no compiler is specified, the transform_compiler forwards to the default
+ // compiler
+ template<typename Lambda, typename DomainTag>
+ struct transform_compiler<Lambda, DomainTag, void>
+ {
+ template<typename Op, typename State, typename Visitor>
+ struct apply
+ {
+ typedef typename Lambda::BOOST_NESTED_TEMPLATE apply
+ <
+ Op
+ , State
+ , Visitor
+ >::type trans_type;
+
+ typedef proto::compiler<typename tag_type<trans_type>::type, DomainTag> compiler_type;
+
+ typedef typename compiler_type::BOOST_NESTED_TEMPLATE apply
+ <
+ trans_type
+ , State
+ , Visitor
+ >::type type;
+ };
+
+ template<typename Op, typename State, typename Visitor>
+ static typename apply<Op, State, Visitor>::type
+ call(Op const &op, State const &state, Visitor &visitor)
+ {
+ return proto::compile(Lambda::call(op, state, visitor), state, visitor, DomainTag());
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // identity_transform
+ // pass through without doing a transform
+ struct identity_transform
+ {
+ template<typename Op, typename, typename>
+ struct apply
+ {
+ typedef Op type;
+ };
+
+ template<typename Op, typename State, typename Visitor>
+ static Op const &call(Op const &op, State const &, Visitor &)
+ {
+ return op;
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // arg_transform
+ struct arg_transform
+ {
+ template<typename Op, typename, typename>
+ struct apply
+ {
+ typedef typename arg_type<Op>::type type;
+ };
+
+ template<typename Op, typename State, typename Visitor>
+ static typename arg_type<Op>::const_reference
+ call(Op const &op, State const &, Visitor &)
+ {
+ return proto::arg(op);
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // left_transform
+ struct left_transform
+ {
+ template<typename Op, typename, typename>
+ struct apply
+ {
+ typedef typename left_type<Op>::type type;
+ };
+
+ template<typename Op, typename State, typename Visitor>
+ static typename left_type<Op>::const_reference
+ call(Op const &op, State const &, Visitor &)
+ {
+ return proto::left(op);
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // right_transform
+ struct right_transform
+ {
+ template<typename Op, typename, typename>
+ struct apply
+ {
+ typedef typename right_type<Op>::type type;
+ };
+
+ template<typename Op, typename State, typename Visitor>
+ static typename right_type<Op>::const_reference
+ call(Op const &op, State const &, Visitor &)
+ {
+ return proto::right(op);
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // unary_op_transform
+ // insert a unary operation
+ template<typename Tag>
+ struct unary_op_transform
+ {
+ template<typename Op, typename, typename>
+ struct apply
+ {
+ typedef unary_op<Op, Tag> type;
+ };
+
+ template<typename Op, typename State, typename Visitor>
+ static unary_op<Op, Tag>
+ call(Op const &op, State const &, Visitor &)
+ {
+ return proto::make_op<Tag>(op);
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // compose_transforms
+ // execute two transforms in succession
+ template<typename First, typename Second>
+ struct compose_transforms
+ {
+ template<typename Op, typename State, typename Visitor>
+ struct apply
+ {
+ typedef typename Second::BOOST_NESTED_TEMPLATE apply
+ <
+ typename First::BOOST_NESTED_TEMPLATE apply<Op, State, Visitor>::type
+ , State
+ , Visitor
+ >::type type;
+ };
+
+ template<typename Op, typename State, typename Visitor>
+ static typename apply<Op, State, Visitor>::type
+ call(Op const &op, State const &state, Visitor &visitor)
+ {
+ return Second::call(First::call(op, state, visitor), state, visitor);
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // conditional_transform
+ // Conditionally execute a transform
+ template<typename Predicate, typename IfTransform, typename ElseTransform>
+ struct conditional_transform
+ {
+ template<typename Op, typename State, typename Visitor>
+ struct apply
+ {
+ typedef typename boost::mpl::if_
+ <
+ typename Predicate::BOOST_NESTED_TEMPLATE apply<Op, State, Visitor>::type
+ , IfTransform
+ , ElseTransform
+ >::type transform_type;
+
+ typedef typename transform_type::BOOST_NESTED_TEMPLATE apply
+ <
+ Op
+ , State
+ , Visitor
+ >::type type;
+ };
+
+ template<typename Op, typename State, typename Visitor>
+ static typename apply<Op, State, Visitor>::type
+ call(Op const &op, State const &state, Visitor &visitor)
+ {
+ return apply<Op, State, Visitor>::transform_type::call(op, state, visitor);
+ }
+ };
+
+ template<typename Always>
+ struct always_transform
+ {
+ template<typename, typename, typename>
+ struct apply
+ {
+ typedef Always type;
+ };
+
+ template<typename Op, typename State, typename Visitor>
+ static Always
+ call(Op const &, State const &, Visitor &)
+ {
+ return Always();
+ }
+ };
+
+}}
+
+#endif
diff --git a/boost/boost/xpressive/proto/op_base.hpp b/boost/boost/xpressive/proto/op_base.hpp
new file mode 100644
index 00000000000..34f4899fe83
--- /dev/null
+++ b/boost/boost/xpressive/proto/op_base.hpp
@@ -0,0 +1,279 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file op_base.hpp
+/// Contains definitions of unary_op\<\>, binary_op\<\> and nary_op\<\>,
+/// as well as the is_op\<\> and the make_op() helper function.
+//
+// Copyright 2004 Eric Niebler. 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_PROTO_OP_BASE_HPP_EAN_04_01_2005
+#define BOOST_PROTO_OP_BASE_HPP_EAN_04_01_2005
+
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/preprocessor/arithmetic/inc.hpp>
+#include <boost/preprocessor/facilities/intercept.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_trailing_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/repetition/enum_trailing_binary_params.hpp>
+#include <boost/preprocessor/repetition/repeat.hpp>
+#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/is_base_and_derived.hpp>
+#include <boost/spirit/fusion/sequence/tuple.hpp>
+#include <boost/xpressive/proto/proto_fwd.hpp>
+#include <boost/xpressive/proto/arg_traits.hpp>
+
+namespace boost { namespace proto
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // op_root
+ struct op_root
+ {
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // is_proxy
+ template<typename T>
+ struct is_proxy
+ : mpl::false_
+ {
+ };
+
+ template<typename Op, typename Param>
+ struct is_proxy<op_proxy<Op, Param> >
+ : mpl::true_
+ {
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // is_op
+ template<typename T>
+ struct is_op
+ : mpl::or_<is_proxy<T>, is_base_and_derived<op_root, T> >
+ {
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // as_op
+ template<typename Op>
+ struct as_op<Op, true>
+ {
+ typedef typename Op::type type;
+
+ static typename Op::const_reference make(Op const &op)
+ {
+ return op.cast();
+ }
+ };
+
+ template<typename T>
+ struct as_op<T, false>
+ {
+ typedef unary_op<T, noop_tag> type;
+
+ static type const make(T const &t)
+ {
+ return noop(t);
+ }
+ };
+
+// These operators must be members.
+#define BOOST_PROTO_DEFINE_MEMBER_OPS() \
+ template<typename Arg> \
+ binary_op<Op, typename as_op<Arg>::type, assign_tag> const \
+ operator =(Arg const &arg) const \
+ { \
+ return make_op<assign_tag>(this->cast(), as_op<Arg>::make(arg)); \
+ } \
+ template<typename Arg> \
+ binary_op<Op, typename as_op<Arg>::type, subscript_tag> const \
+ operator [](Arg const &arg) const \
+ { \
+ return make_op<subscript_tag>(this->cast(), as_op<Arg>::make(arg)); \
+ } \
+ nary_op<Op> operator ()() const \
+ { \
+ return nary_op<Op>(this->cast()); \
+ } \
+ BOOST_PP_REPEAT_FROM_TO(1, BOOST_PP_INC(BOOST_PROTO_MAX_ARITY), BOOST_PROTO_FUN_OP, _)
+
+#define BOOST_PROTO_FUN_OP(z, n, _) \
+ template<BOOST_PP_ENUM_PARAMS_Z(z, n, typename A)> \
+ nary_op<Op BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, n, A)> \
+ operator ()(BOOST_PP_ENUM_BINARY_PARAMS_Z(z, n, A, const &a)) const \
+ { \
+ return nary_op<Op BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, n, A)> \
+ (this->cast() BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, n, a)); \
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // op_base
+ template<typename Op>
+ struct op_base : op_root
+ {
+ typedef Op type;
+ typedef type const &const_reference;
+
+ Op &cast()
+ {
+ return *static_cast<Op *>(this);
+ }
+
+ Op const &cast() const
+ {
+ return *static_cast<Op const *>(this);
+ }
+
+ BOOST_PROTO_DEFINE_MEMBER_OPS()
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // unary_op
+ template<typename Arg, typename Tag>
+ struct unary_op : op_base<unary_op<Arg, Tag> >
+ {
+ typedef typename value_type<Arg>::type arg_type;
+ typedef Tag tag_type;
+
+ arg_type arg;
+
+ unary_op()
+ : arg()
+ {}
+
+ explicit unary_op(typename call_traits<Arg>::param_type arg_)
+ : arg(arg_)
+ {}
+
+ using op_base<unary_op<Arg, Tag> >::operator =;
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // binary_op
+ template<typename Left, typename Right, typename Tag>
+ struct binary_op : op_base<binary_op<Left, Right, Tag> >
+ {
+ typedef typename value_type<Left>::type left_type;
+ typedef typename value_type<Right>::type right_type;
+ typedef Tag tag_type;
+
+ left_type left;
+ right_type right;
+
+ binary_op()
+ : left()
+ , right()
+ {}
+
+ binary_op(
+ typename call_traits<Left>::param_type left_
+ , typename call_traits<Right>::param_type right_)
+ : left(left_)
+ , right(right_)
+ {}
+
+ using op_base<binary_op<Left, Right, Tag> >::operator =;
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // nary_op
+ template<typename Fun, BOOST_PP_ENUM_PARAMS(BOOST_PROTO_MAX_ARITY, typename A)>
+ struct nary_op
+ : op_base<nary_op<Fun, BOOST_PP_ENUM_PARAMS(BOOST_PROTO_MAX_ARITY, A)> >
+ {
+ typedef function_tag tag_type;
+ typedef Fun functor_type;
+ typedef fusion::tuple<
+ BOOST_PP_ENUM_BINARY_PARAMS(
+ BOOST_PROTO_MAX_ARITY, typename value_type<A, >::type BOOST_PP_INTERCEPT)
+ > args_type;
+
+ functor_type functor;
+ args_type args;
+
+ nary_op()
+ : functor()
+ , args()
+ {}
+
+ #define BOOST_PROTO_NARY_OP_CTOR(z, n, _) \
+ nary_op( \
+ typename call_traits<Fun>::param_type fun \
+ BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_Z(z, n, typename call_traits<A, >::param_type a))\
+ : functor(fun) \
+ , args(BOOST_PP_ENUM_PARAMS_Z(z, n, a)) \
+ {}
+
+ BOOST_PP_REPEAT(BOOST_PP_INC(BOOST_PROTO_MAX_ARITY), BOOST_PROTO_NARY_OP_CTOR, _)
+
+ #undef BOOST_PROTO_NARY_OP_CTOR
+
+ using op_base<nary_op<Fun, BOOST_PP_ENUM_PARAMS(BOOST_PROTO_MAX_ARITY, A)> >::operator =;
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // op_proxy
+ template<typename Op, typename Param>
+ struct op_proxy
+ {
+ typedef Op type;
+ typedef type const const_reference;
+ Param param_;
+
+ Op const cast() const
+ {
+ return Op(this->param_);
+ }
+
+ operator Op const() const
+ {
+ return this->cast();
+ }
+
+ BOOST_PROTO_DEFINE_MEMBER_OPS()
+ };
+
+ template<typename Op>
+ struct op_proxy<Op, void>
+ {
+ typedef Op type;
+ typedef type const const_reference;
+
+ Op const cast() const
+ {
+ return Op();
+ }
+
+ operator Op const() const
+ {
+ return this->cast();
+ }
+
+ BOOST_PROTO_DEFINE_MEMBER_OPS()
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // make_op
+ template<typename Op, typename Arg>
+ unary_op<Arg, Op> const
+ make_op(Arg const &arg)
+ {
+ return unary_op<Arg, Op>(arg);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // make_op
+ template<typename Op, typename Left, typename Right>
+ binary_op<Left, Right, Op> const
+ make_op(Left const &left, Right const &right)
+ {
+ return binary_op<Left, Right, Op>(left, right);
+ }
+
+}}
+
+#endif
diff --git a/boost/boost/xpressive/proto/op_tags.hpp b/boost/boost/xpressive/proto/op_tags.hpp
new file mode 100644
index 00000000000..e22f7eb8da6
--- /dev/null
+++ b/boost/boost/xpressive/proto/op_tags.hpp
@@ -0,0 +1,100 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file op_tags.hpp
+/// Contains the tags for all the overloadable operators in C++, as well as
+/// the base tags unary_tag, binary_tag and nary_tag, as well as the is_unary\<\>,
+/// is_binary\<\> and is_nary\<\> predicates.
+//
+// Copyright 2004 Eric Niebler. 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_PROTO_OP_TAGS_HPP_EAN_04_01_2005
+#define BOOST_PROTO_OP_TAGS_HPP_EAN_04_01_2005
+
+#include <boost/type_traits/is_base_and_derived.hpp>
+#include <boost/xpressive/proto/proto_fwd.hpp>
+
+namespace boost { namespace proto
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Operator tags
+ struct unary_tag {};
+ struct binary_tag {};
+ struct nary_tag {}; // for operator()
+
+ struct noop_tag : unary_tag {};
+ struct unary_plus_tag : unary_tag {};
+ struct unary_minus_tag : unary_tag {};
+ struct unary_star_tag : unary_tag {};
+ struct complement_tag : unary_tag {};
+ struct address_of_tag : unary_tag {};
+ struct logical_not_tag : unary_tag {};
+ struct pre_inc_tag : unary_tag {};
+ struct pre_dec_tag : unary_tag {};
+ struct post_inc_tag : unary_tag {};
+ struct post_dec_tag : unary_tag {};
+
+ struct left_shift_tag : binary_tag {};
+ struct right_shift_tag : binary_tag {};
+ struct multiply_tag : binary_tag {};
+ struct divide_tag : binary_tag {};
+ struct modulus_tag : binary_tag {};
+ struct add_tag : binary_tag {};
+ struct subtract_tag : binary_tag {};
+ struct less_tag : binary_tag {};
+ struct greater_tag : binary_tag {};
+ struct less_equal_tag : binary_tag {};
+ struct greater_equal_tag : binary_tag {};
+ struct equal_tag : binary_tag {};
+ struct not_equal_tag : binary_tag {};
+ struct logical_or_tag : binary_tag {};
+ struct logical_and_tag : binary_tag {};
+ struct bitand_tag : binary_tag {};
+ struct bitor_tag : binary_tag {};
+ struct bitxor_tag : binary_tag {};
+ struct comma_tag : binary_tag {};
+ struct mem_ptr_tag : binary_tag {};
+
+ struct assign_tag : binary_tag {};
+ struct left_shift_assign_tag : binary_tag {};
+ struct right_shift_assign_tag : binary_tag {};
+ struct multiply_assign_tag : binary_tag {};
+ struct divide_assign_tag : binary_tag {};
+ struct modulus_assign_tag : binary_tag {};
+ struct add_assign_tag : binary_tag {};
+ struct subtract_assign_tag : binary_tag {};
+ struct bitand_assign_tag : binary_tag {};
+ struct bitor_assign_tag : binary_tag {};
+ struct bitxor_assign_tag : binary_tag {};
+ struct subscript_tag : binary_tag {};
+
+ struct function_tag : nary_tag {};
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // is_unary
+ template<typename Tag>
+ struct is_unary
+ : boost::is_base_and_derived<unary_tag, Tag>
+ {
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // is_binary
+ template<typename Tag>
+ struct is_binary
+ : boost::is_base_and_derived<binary_tag, Tag>
+ {
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // is_nary
+ template<typename Tag>
+ struct is_nary
+ : boost::is_base_and_derived<nary_tag, Tag>
+ {
+ };
+
+}}
+
+#endif
diff --git a/boost/boost/xpressive/proto/operators.hpp b/boost/boost/xpressive/proto/operators.hpp
new file mode 100644
index 00000000000..120a90fea94
--- /dev/null
+++ b/boost/boost/xpressive/proto/operators.hpp
@@ -0,0 +1,135 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file operators.hpp
+/// Contains all the overloaded operators that make it possible to build
+/// expression templates using proto components
+//
+// Copyright 2004 Eric Niebler. 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_PROTO_OPERATORS_HPP_EAN_04_01_2005
+#define BOOST_PROTO_OPERATORS_HPP_EAN_04_01_2005
+
+#include <boost/mpl/or.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/preprocessor/punctuation/comma.hpp>
+#include <boost/xpressive/proto/proto_fwd.hpp>
+#include <boost/xpressive/proto/op_tags.hpp>
+#include <boost/xpressive/proto/op_base.hpp>
+
+namespace boost { namespace proto
+{
+ ///////////////////////////////////////////////////////////////////////////////
+ // unary_op_generator
+ template<typename Arg, typename Tag>
+ struct unary_op_generator
+ {
+ typedef unary_op<
+ typename as_op<Arg>::type
+ , Tag
+ > type;
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // binary_op_generator
+ template<typename Left, typename Right, typename Tag>
+ struct binary_op_generator
+ {
+ typedef binary_op<
+ typename as_op<Left>::type
+ , typename as_op<Right>::type
+ , Tag
+ > type;
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // unary operators
+ template<typename Arg>
+ unary_op<Arg, noop_tag> const
+ noop(Arg const &arg)
+ {
+ return make_op<noop_tag>(arg);
+ }
+
+#define BOOST_PROTO_UNARY_OP(op, tag) \
+ template<typename Arg> \
+ inline typename lazy_enable_if<is_op<Arg>, unary_op_generator<Arg, tag> >::type const \
+ operator op(Arg const &arg) \
+ { \
+ return make_op<tag>(as_op<Arg>::make(arg)); \
+ }
+
+#define BOOST_PROTO_BINARY_OP(op, tag) \
+ template<typename Left, typename Right> \
+ inline typename lazy_enable_if< \
+ mpl::or_<is_op<Left>, is_op<Right> > \
+ , binary_op_generator<Left, Right, tag> \
+ >::type const \
+ operator op(Left const &left, Right const &right) \
+ { \
+ return make_op<tag>(as_op<Left>::make(left), as_op<Right>::make(right)); \
+ }
+
+ BOOST_PROTO_UNARY_OP(+, unary_plus_tag)
+ BOOST_PROTO_UNARY_OP(-, unary_minus_tag)
+ BOOST_PROTO_UNARY_OP(*, unary_star_tag)
+ BOOST_PROTO_UNARY_OP(~, complement_tag)
+ BOOST_PROTO_UNARY_OP(&, address_of_tag)
+ BOOST_PROTO_UNARY_OP(!, logical_not_tag)
+ BOOST_PROTO_UNARY_OP(++, pre_inc_tag)
+ BOOST_PROTO_UNARY_OP(--, pre_dec_tag)
+
+ BOOST_PROTO_BINARY_OP(<<, left_shift_tag)
+ BOOST_PROTO_BINARY_OP(>>, right_shift_tag)
+ BOOST_PROTO_BINARY_OP(*, multiply_tag)
+ BOOST_PROTO_BINARY_OP(/, divide_tag)
+ BOOST_PROTO_BINARY_OP(%, modulus_tag)
+ BOOST_PROTO_BINARY_OP(+, add_tag)
+ BOOST_PROTO_BINARY_OP(-, subtract_tag)
+ BOOST_PROTO_BINARY_OP(<, less_tag)
+ BOOST_PROTO_BINARY_OP(>, greater_tag)
+ BOOST_PROTO_BINARY_OP(<=, less_equal_tag)
+ BOOST_PROTO_BINARY_OP(>=, greater_equal_tag)
+ BOOST_PROTO_BINARY_OP(==, equal_tag)
+ BOOST_PROTO_BINARY_OP(!=, not_equal_tag)
+ BOOST_PROTO_BINARY_OP(||, logical_or_tag)
+ BOOST_PROTO_BINARY_OP(&&, logical_and_tag)
+ BOOST_PROTO_BINARY_OP(&, bitand_tag)
+ BOOST_PROTO_BINARY_OP(|, bitor_tag)
+ BOOST_PROTO_BINARY_OP(^, bitxor_tag)
+ BOOST_PROTO_BINARY_OP(BOOST_PP_COMMA(), comma_tag)
+ BOOST_PROTO_BINARY_OP(->*, mem_ptr_tag)
+
+ BOOST_PROTO_BINARY_OP(<<=, left_shift_assign_tag)
+ BOOST_PROTO_BINARY_OP(>>=, right_shift_assign_tag)
+ BOOST_PROTO_BINARY_OP(*=, multiply_assign_tag)
+ BOOST_PROTO_BINARY_OP(/=, divide_assign_tag)
+ BOOST_PROTO_BINARY_OP(%=, modulus_assign_tag)
+ BOOST_PROTO_BINARY_OP(+=, add_assign_tag)
+ BOOST_PROTO_BINARY_OP(-=, subtract_assign_tag)
+ BOOST_PROTO_BINARY_OP(&=, bitand_assign_tag)
+ BOOST_PROTO_BINARY_OP(|=, bitor_assign_tag)
+ BOOST_PROTO_BINARY_OP(^=, bitxor_assign_tag)
+
+#undef BOOST_PROTO_BINARY_OP
+#undef BOOST_PROTO_UNARY_OP
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // post-fix operators
+ template<typename Arg>
+ inline typename lazy_enable_if<is_op<Arg>, unary_op_generator<Arg, post_inc_tag> >::type const
+ operator ++(Arg const &arg, int)
+ {
+ return make_op<post_inc_tag>(arg.cast());
+ }
+
+ template<typename Arg>
+ inline typename lazy_enable_if<is_op<Arg>, unary_op_generator<Arg, post_dec_tag> >::type const
+ operator --(Arg const &arg, int)
+ {
+ return make_op<post_dec_tag>(arg.cast());
+ }
+
+}}
+
+#endif
diff --git a/boost/boost/xpressive/proto/proto.hpp b/boost/boost/xpressive/proto/proto.hpp
new file mode 100644
index 00000000000..0e9b292fa47
--- /dev/null
+++ b/boost/boost/xpressive/proto/proto.hpp
@@ -0,0 +1,44 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file proto.hpp
+/// The proto expression template compiler and supporting utilities.
+//
+// Copyright 2004 Eric Niebler. 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_PROTO_HPP_EAN_04_01_2005
+#define BOOST_PROTO_HPP_EAN_04_01_2005
+
+#include <boost/xpressive/proto/proto_fwd.hpp>
+#include <boost/xpressive/proto/op_tags.hpp>
+#include <boost/xpressive/proto/op_base.hpp>
+#include <boost/xpressive/proto/operators.hpp>
+#include <boost/xpressive/proto/arg_traits.hpp>
+
+namespace boost { namespace proto
+{
+ ///////////////////////////////////////////////////////////////////////////////
+ // compile_result
+ template<typename Op, typename State, typename Visitor, typename DomainTag>
+ struct compile_result
+ {
+ typedef typename as_op<Op>::type op_type;
+ typedef typename tag_type<op_type>::type tag_type;
+ typedef compiler<tag_type, DomainTag> compiler_type;
+ typedef typename compiler_type::BOOST_NESTED_TEMPLATE apply<op_type, State, Visitor>::type type;
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // compile
+ template<typename Op, typename State, typename Visitor, typename DomainTag>
+ typename compile_result<Op, State, Visitor, DomainTag>::type const
+ compile(Op const &op, State const &state, Visitor &visitor, DomainTag)
+ {
+ typedef typename as_op<Op>::type op_type;
+ typedef compiler<typename tag_type<op_type>::type, DomainTag> compiler;
+ return compiler::call(as_op<Op>::make(op), state, visitor);
+ }
+
+}} // namespace boost::proto
+
+#endif
diff --git a/boost/boost/xpressive/proto/proto_fwd.hpp b/boost/boost/xpressive/proto/proto_fwd.hpp
new file mode 100644
index 00000000000..38bd112fae0
--- /dev/null
+++ b/boost/boost/xpressive/proto/proto_fwd.hpp
@@ -0,0 +1,199 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file proto_fwd.hpp
+/// Forward declarations of all of proto's public types and functions.
+//
+// Copyright 2004 Eric Niebler. 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_PROTO_FWD_HPP_EAN_04_01_2005
+#define BOOST_PROTO_FWD_HPP_EAN_04_01_2005
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/apply_fwd.hpp>
+#include <boost/spirit/fusion/sequence/tuple_forward.hpp>
+#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
+
+#ifndef BOOST_PROTO_MAX_ARITY
+# define BOOST_PROTO_MAX_ARITY FUSION_MAX_TUPLE_SIZE
+#endif
+
+namespace boost { namespace proto
+{
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Operator tags
+ struct unary_tag;
+ struct binary_tag;
+ struct nary_tag;
+
+ struct noop_tag;
+ struct unary_plus_tag;
+ struct unary_minus_tag;
+ struct unary_star_tag;
+ struct complement_tag;
+ struct address_of_tag;
+ struct logical_not_tag;
+ struct pre_inc_tag;
+ struct pre_dec_tag;
+ struct post_inc_tag;
+ struct post_dec_tag;
+
+ struct left_shift_tag;
+ struct right_shift_tag;
+ struct multiply_tag;
+ struct divide_tag;
+ struct modulus_tag;
+ struct add_tag;
+ struct subtract_tag;
+ struct less_tag;
+ struct greater_tag;
+ struct less_equal_tag;
+ struct greater_equal_tag;
+ struct equal_tag;
+ struct not_equal_tag;
+ struct logical_or_tag;
+ struct logical_and_tag;
+ struct bitand_tag;
+ struct bitor_tag;
+ struct bitxor_tag;
+ struct comma_tag;
+ struct mem_ptr_tag;
+
+ struct assign_tag;
+ struct left_shift_assign_tag;
+ struct right_shift_assign_tag;
+ struct multiply_assign_tag;
+ struct divide_assign_tag;
+ struct modulus_assign_tag;
+ struct add_assign_tag;
+ struct subtract_assign_tag;
+ struct bitand_assign_tag;
+ struct bitor_assign_tag;
+ struct bitxor_assign_tag;
+ struct subscript_tag;
+
+ struct function_tag;
+
+ template<typename Tag>
+ struct is_unary;
+
+ template<typename Tag>
+ struct is_binary;
+
+ template<typename Tag>
+ struct is_nary;
+
+ template<typename Arg, typename Op>
+ struct unary_op;
+
+ template<typename Left, typename Right, typename Op>
+ struct binary_op;
+
+ template<typename Op, typename Param = void>
+ struct op_proxy;
+
+ template
+ <
+ typename Fun
+ , BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(BOOST_PROTO_MAX_ARITY, typename A, fusion::void_t)
+ >
+ struct nary_op;
+
+ template<typename Op, typename Arg>
+ unary_op<Arg, Op> const
+ make_op(Arg const &arg);
+
+ template<typename Op, typename Left, typename Right>
+ binary_op<Left, Right, Op> const
+ make_op(Left const &left, Right const &right);
+
+ template<typename Arg>
+ unary_op<Arg, noop_tag> const
+ noop(Arg const &arg);
+
+ struct op_root;
+
+ template<typename T>
+ struct is_proxy;
+
+ template<typename T>
+ struct is_op;
+
+ template<typename T, bool IsOp = is_op<T>::value>
+ struct as_op;
+
+ template<typename Op>
+ struct op_base;
+
+ template<typename T>
+ struct value_type;
+
+ template<typename Op>
+ struct arg_type;
+
+ template<typename Op>
+ struct left_type;
+
+ template<typename Op>
+ struct right_type;
+
+ template<typename Op>
+ struct tag_type;
+
+ template<typename OpTag, typename DomainTag, typename Dummy = void>
+ struct compiler;
+
+ template<typename OpTag, typename DomainTag, bool RightFirst = true>
+ struct fold_compiler;
+
+ template<typename Lambda, typename DomainTag, typename Compiler = void>
+ struct transform_compiler;
+
+ template<typename Lambda, typename DomainTag>
+ struct branch_compiler;
+
+ template<typename Predicate, typename IfCompiler, typename ElseCompiler>
+ struct conditional_compiler;
+
+ template<typename Lambda, typename Map>
+ struct switch_compiler;
+
+ struct error_compiler;
+
+ struct identity_transform;
+
+ struct arg_transform;
+
+ struct left_transform;
+
+ struct right_transform;
+
+ template<typename Always>
+ struct always_transform;
+
+ template<typename First, typename Second>
+ struct compose_transforms;
+
+ template<typename Predicate, typename IfTransform, typename ElseTransform = identity_transform>
+ struct conditional_transform;
+
+ template<typename Op>
+ typename arg_type<Op>::const_reference arg(Op const &op);
+
+ template<typename Op>
+ typename left_type<Op>::const_reference left(Op const &op);
+
+ template<typename Op>
+ typename right_type<Op>::const_reference right(Op const &op);
+
+ template<typename Op, typename State, typename Visitor, typename DomainTag>
+ struct compile_result;
+
+ template<typename Op, typename State, typename Visitor, typename DomainTag>
+ typename compile_result<Op, State, Visitor, DomainTag>::type const
+ compile(Op const &op, State const &state, Visitor &visitor, DomainTag tag_type);
+
+}} // namespace boost::proto
+
+#endif
diff --git a/boost/boost/xpressive/proto/proto_typeof.hpp b/boost/boost/xpressive/proto/proto_typeof.hpp
new file mode 100644
index 00000000000..da1f321aa37
--- /dev/null
+++ b/boost/boost/xpressive/proto/proto_typeof.hpp
@@ -0,0 +1,75 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file proto_typeof.hpp
+/// Type registrations so that proto expression templates can be used together
+/// with the Boost.Typeof library.
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_PROTO_PROTO_TYPEOF_H
+#define BOOST_XPRESSIVE_PROTO_PROTO_TYPEOF_H
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp>
+#include <boost/typeof/typeof.hpp>
+#include <boost/xpressive/proto/proto_fwd.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+BOOST_TYPEOF_REGISTER_TYPE(boost::proto::unary_tag)
+BOOST_TYPEOF_REGISTER_TYPE(boost::proto::binary_tag)
+BOOST_TYPEOF_REGISTER_TYPE(boost::proto::nary_tag)
+BOOST_TYPEOF_REGISTER_TYPE(boost::proto::noop_tag)
+BOOST_TYPEOF_REGISTER_TYPE(boost::proto::unary_plus_tag)
+BOOST_TYPEOF_REGISTER_TYPE(boost::proto::unary_minus_tag)
+BOOST_TYPEOF_REGISTER_TYPE(boost::proto::unary_star_tag)
+BOOST_TYPEOF_REGISTER_TYPE(boost::proto::complement_tag)
+BOOST_TYPEOF_REGISTER_TYPE(boost::proto::address_of_tag)
+BOOST_TYPEOF_REGISTER_TYPE(boost::proto::logical_not_tag)
+BOOST_TYPEOF_REGISTER_TYPE(boost::proto::pre_inc_tag)
+BOOST_TYPEOF_REGISTER_TYPE(boost::proto::pre_dec_tag)
+BOOST_TYPEOF_REGISTER_TYPE(boost::proto::post_inc_tag)
+BOOST_TYPEOF_REGISTER_TYPE(boost::proto::post_dec_tag)
+BOOST_TYPEOF_REGISTER_TYPE(boost::proto::left_shift_tag)
+BOOST_TYPEOF_REGISTER_TYPE(boost::proto::right_shift_tag)
+BOOST_TYPEOF_REGISTER_TYPE(boost::proto::multiply_tag)
+BOOST_TYPEOF_REGISTER_TYPE(boost::proto::divide_tag)
+BOOST_TYPEOF_REGISTER_TYPE(boost::proto::modulus_tag)
+BOOST_TYPEOF_REGISTER_TYPE(boost::proto::add_tag)
+BOOST_TYPEOF_REGISTER_TYPE(boost::proto::subtract_tag)
+BOOST_TYPEOF_REGISTER_TYPE(boost::proto::less_tag)
+BOOST_TYPEOF_REGISTER_TYPE(boost::proto::greater_tag)
+BOOST_TYPEOF_REGISTER_TYPE(boost::proto::less_equal_tag)
+BOOST_TYPEOF_REGISTER_TYPE(boost::proto::greater_equal_tag)
+BOOST_TYPEOF_REGISTER_TYPE(boost::proto::equal_tag)
+BOOST_TYPEOF_REGISTER_TYPE(boost::proto::not_equal_tag)
+BOOST_TYPEOF_REGISTER_TYPE(boost::proto::logical_or_tag)
+BOOST_TYPEOF_REGISTER_TYPE(boost::proto::logical_and_tag)
+BOOST_TYPEOF_REGISTER_TYPE(boost::proto::bitand_tag)
+BOOST_TYPEOF_REGISTER_TYPE(boost::proto::bitor_tag)
+BOOST_TYPEOF_REGISTER_TYPE(boost::proto::bitxor_tag)
+BOOST_TYPEOF_REGISTER_TYPE(boost::proto::comma_tag)
+BOOST_TYPEOF_REGISTER_TYPE(boost::proto::mem_ptr_tag)
+BOOST_TYPEOF_REGISTER_TYPE(boost::proto::assign_tag)
+BOOST_TYPEOF_REGISTER_TYPE(boost::proto::left_shift_assign_tag)
+BOOST_TYPEOF_REGISTER_TYPE(boost::proto::right_shift_assign_tag)
+BOOST_TYPEOF_REGISTER_TYPE(boost::proto::multiply_assign_tag)
+BOOST_TYPEOF_REGISTER_TYPE(boost::proto::divide_assign_tag)
+BOOST_TYPEOF_REGISTER_TYPE(boost::proto::modulus_assign_tag)
+BOOST_TYPEOF_REGISTER_TYPE(boost::proto::add_assign_tag)
+BOOST_TYPEOF_REGISTER_TYPE(boost::proto::subtract_assign_tag)
+BOOST_TYPEOF_REGISTER_TYPE(boost::proto::bitand_assign_tag)
+BOOST_TYPEOF_REGISTER_TYPE(boost::proto::bitor_assign_tag)
+BOOST_TYPEOF_REGISTER_TYPE(boost::proto::bitxor_assign_tag)
+BOOST_TYPEOF_REGISTER_TYPE(boost::proto::subscript_tag)
+BOOST_TYPEOF_REGISTER_TYPE(boost::proto::function_tag)
+
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::unary_op, (typename)(typename))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::proto::binary_op, (typename)(typename)(typename))
+
+#endif
diff --git a/boost/boost/xpressive/regex_algorithms.hpp b/boost/boost/xpressive/regex_algorithms.hpp
new file mode 100644
index 00000000000..6148da7c023
--- /dev/null
+++ b/boost/boost/xpressive/regex_algorithms.hpp
@@ -0,0 +1,488 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file regex_algorithms.hpp
+/// Contains the regex_match(), regex_search() and regex_replace() algorithms.
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_ALGORITHMS_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_ALGORITHMS_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <iterator>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/core/state.hpp>
+#include <boost/xpressive/detail/utility/save_restore.hpp>
+
+namespace boost { namespace xpressive
+{
+
+///////////////////////////////////////////////////////////////////////////////
+// regex_match
+///////////////////////////////////////////////////////////////////////////////
+
+/// \brief See if a regex matches a sequence from beginning to end.
+///
+/// Determines whether there is an exact match between the regular expression re,
+/// and all of the sequence [begin, end).
+///
+/// \pre Types BidiIter and OtherBidiIter meet the requirements of a Bidirectional Iterator (24.1.4).
+/// \pre OtherBidiIter is convertible to BidiIter.
+/// \pre [begin,end) denotes a valid iterator range.
+/// \param begin The beginning of the sequence.
+/// \param end The end of the sequence.
+/// \param what The match_results struct into which the sub_matches will be written
+/// \param re The regular expression object to use
+/// \param flags Optional match flags, used to control how the expression is matched against the sequence. (See match_flag_type.)
+/// \return true if a match is found, false otherwise
+/// \throw regex_error on stack exhaustion
+template<typename OtherBidiIter, typename BidiIter>
+inline bool regex_match
+(
+ OtherBidiIter begin
+ , OtherBidiIter end
+ , match_results<BidiIter> &what
+ , basic_regex<BidiIter> const &re
+ , regex_constants::match_flag_type flags = regex_constants::match_default
+)
+{
+ typedef detail::core_access<BidiIter> access;
+
+ // an invlid regex matches nothing
+ if(!access::invalid(re))
+ {
+ // the state object holds matching state and
+ // is passed by reference to all the matchers
+ detail::state_type<BidiIter> state(begin, end, what, *access::get_regex_impl(re), flags);
+ state.flags_.match_all_ = true;
+ state.sub_match(0).begin_ = begin;
+
+ if(access::match(re, state))
+ {
+ access::set_prefix_suffix(what, begin, end);
+ return true;
+ }
+
+ // handle partial matches
+ else if(state.found_partial_match_ && 0 != (flags & regex_constants::match_partial))
+ {
+ return state.set_partial_match(), true;
+ }
+ }
+
+ access::reset(what);
+ return false;
+}
+
+/// \overload
+template<typename OtherBidiIter, typename BidiIter>
+inline bool regex_match
+(
+ OtherBidiIter begin
+ , OtherBidiIter end
+ , basic_regex<BidiIter> const &re
+ , regex_constants::match_flag_type flags = regex_constants::match_default
+)
+{
+ // BUGBUG this is inefficient
+ match_results<BidiIter> what;
+ return regex_match(begin, end, what, re, flags);
+}
+
+/// \overload
+template<typename Char>
+inline bool regex_match
+(
+ Char const *begin
+ , match_results<Char const*> &what
+ , basic_regex<Char const*> const &re
+ , regex_constants::match_flag_type flags = regex_constants::match_default
+)
+{
+ // BUGBUG this is inefficient
+ Char const *end = begin + std::char_traits<Char>::length(begin);
+ return regex_match(begin, end, what, re, flags);
+}
+
+/// \overload
+template<typename Char, typename Traits, typename Alloc>
+inline bool regex_match
+(
+ std::basic_string<Char, Traits, Alloc> const &str
+ , match_results<typename std::basic_string<Char, Traits, Alloc>::const_iterator> &what
+ , basic_regex<typename std::basic_string<Char, Traits, Alloc>::const_iterator> const &re
+ , regex_constants::match_flag_type flags = regex_constants::match_default
+)
+{
+ return regex_match(str.begin(), str.end(), what, re, flags);
+}
+
+/// \overload
+template<typename Char>
+inline bool regex_match
+(
+ Char const *begin
+ , basic_regex<Char const *> const &re
+ , regex_constants::match_flag_type flags = regex_constants::match_default
+)
+{
+ // BUGBUG this is inefficient
+ match_results<Char const *> what;
+ return regex_match(begin, what, re, flags);
+}
+
+/// \overload
+template<typename Char, typename Traits, typename Alloc>
+inline bool regex_match
+(
+ std::basic_string<Char, Traits, Alloc> const &str
+ , basic_regex<typename std::basic_string<Char, Traits, Alloc>::const_iterator> const &re
+ , regex_constants::match_flag_type flags = regex_constants::match_default
+)
+{
+ // BUGBUG this is inefficient
+ match_results<typename std::basic_string<Char, Traits, Alloc>::const_iterator> what;
+ return regex_match(str, what, re, flags);
+}
+
+
+///////////////////////////////////////////////////////////////////////////////
+// regex_search
+///////////////////////////////////////////////////////////////////////////////
+
+namespace detail
+{
+///////////////////////////////////////////////////////////////////////////////
+// regex_search_impl
+template<typename BidiIter>
+inline bool regex_search_impl
+(
+ state_type<BidiIter> &state
+ , basic_regex<BidiIter> const &re
+ , bool not_initial_null = false
+)
+{
+ typedef core_access<BidiIter> access;
+ typedef typename iterator_value<BidiIter>::type char_type;
+ match_results<BidiIter> &what = *state.context_.results_ptr_;
+
+ // an invlid regex matches nothing
+ if(!access::invalid(re))
+ {
+ bool const partial_ok = state.flags_.match_partial_;
+ save_restore<bool> not_null(state.flags_.match_not_null_, state.flags_.match_not_null_ || not_initial_null);
+ state.flags_.match_prev_avail_ = state.flags_.match_prev_avail_ || !state.bos();
+
+ regex_impl<BidiIter> const &impl = *access::get_regex_impl(re);
+ BidiIter const begin = state.cur_, end = state.end_;
+ BidiIter &sub0begin = state.sub_match(0).begin_;
+ sub0begin = state.cur_;
+
+ // If match_continuous is set, we only need to check for a match at the current position
+ if(state.flags_.match_continuous_)
+ {
+ if(access::match(re, state))
+ {
+ access::set_prefix_suffix(what, begin, end);
+ return true;
+ }
+
+ // handle partial matches
+ else if(partial_ok && state.found_partial_match_)
+ {
+ state.set_partial_match();
+ return true;
+ }
+ }
+
+ // If we have a finder, use it to find where a potential match can start
+ else if(impl.finder_)
+ {
+ finder<BidiIter> const &find = *impl.finder_;
+ if(find(state))
+ {
+ if(state.cur_ != begin)
+ {
+ not_null.restore();
+ }
+
+ do
+ {
+ sub0begin = state.cur_;
+ if(access::match(re, state))
+ {
+ access::set_prefix_suffix(what, begin, end);
+ return true;
+ }
+
+ // handle partial matches
+ else if(partial_ok && state.found_partial_match_)
+ {
+ state.set_partial_match();
+ return true;
+ }
+
+ BOOST_ASSERT(state.cur_ == sub0begin);
+ not_null.restore();
+ }
+ while(state.cur_ != state.end_ && (++state.cur_, find(state)));
+ }
+ }
+
+ // Otherwise, use brute force search at every position.
+ else
+ {
+ for(;;)
+ {
+ if(access::match(re, state))
+ {
+ access::set_prefix_suffix(what, begin, end);
+ return true;
+ }
+
+ // handle partial matches
+ else if(partial_ok && state.found_partial_match_)
+ {
+ state.set_partial_match();
+ return true;
+ }
+
+ else if(end == sub0begin)
+ {
+ break;
+ }
+
+ BOOST_ASSERT(state.cur_ == sub0begin);
+ state.cur_ = ++sub0begin;
+ not_null.restore();
+ }
+ }
+ }
+
+ access::reset(what);
+ return false;
+}
+} // namespace detail
+
+
+/// \brief Determines whether there is some sub-sequence within [begin,end) that matches the regular expression re.
+///
+/// Determines whether there is some sub-sequence within [begin,end) that matches the regular expression re.
+///
+/// \pre Types BidiIter and OtherBidiIter meet the requirements of a Bidirectional Iterator (24.1.4).
+/// \pre OtherBidiIter is convertible to BidiIter.
+/// \pre [begin,end) denotes a valid iterator range.
+/// \param begin The beginning of the sequence
+/// \param end The end of the sequence
+/// \param what The match_results struct into which the sub_matches will be written
+/// \param re The regular expression object to use
+/// \param flags Optional match flags, used to control how the expression is matched against the sequence. (See match_flag_type.)
+/// \return true if a match is found, false otherwise
+/// \throw regex_error on stack exhaustion
+template<typename OtherBidiIter, typename BidiIter>
+inline bool regex_search
+(
+ OtherBidiIter begin
+ , OtherBidiIter end
+ , match_results<BidiIter> &what
+ , basic_regex<BidiIter> const &re
+ , regex_constants::match_flag_type flags = regex_constants::match_default
+)
+{
+ typedef detail::core_access<BidiIter> access;
+
+ // an invlid regex matches nothing
+ if(!access::invalid(re))
+ {
+ // the state object holds matching state and
+ // is passed by reference to all the matchers
+ detail::state_type<BidiIter> state(begin, end, what, *access::get_regex_impl(re), flags);
+ return detail::regex_search_impl(state, re);
+ }
+
+ access::reset(what);
+ return false;
+}
+
+/// \overload
+template<typename OtherBidiIter, typename BidiIter>
+inline bool regex_search
+(
+ OtherBidiIter begin
+ , OtherBidiIter end
+ , basic_regex<BidiIter> const &re
+ , regex_constants::match_flag_type flags = regex_constants::match_default
+)
+{
+ // BUGBUG this is inefficient
+ match_results<BidiIter> what;
+ return regex_search(begin, end, what, re, flags);
+}
+
+/// \overload
+template<typename Char>
+inline bool regex_search
+(
+ Char const *begin
+ , match_results<Char const*> &what
+ , basic_regex<Char const*> const &re
+ , regex_constants::match_flag_type flags = regex_constants::match_default
+)
+{
+ // BUGBUG this is inefficient
+ Char const *end = begin + std::char_traits<Char>::length(begin);
+ return regex_search(begin, end, what, re, flags);
+}
+
+/// \overload
+template<typename Char, typename Traits, typename Alloc>
+inline bool regex_search
+(
+ std::basic_string<Char, Traits, Alloc> const &str
+ , match_results<typename std::basic_string<Char, Traits, Alloc>::const_iterator> &what
+ , basic_regex<typename std::basic_string<Char, Traits, Alloc>::const_iterator> const &re
+ , regex_constants::match_flag_type flags = regex_constants::match_default
+)
+{
+ return regex_search(str.begin(), str.end(), what, re, flags);
+}
+
+/// \overload
+template<typename Char>
+inline bool regex_search
+(
+ Char const *begin
+ , basic_regex<Char const *> const &re
+ , regex_constants::match_flag_type flags = regex_constants::match_default
+)
+{
+ // BUGBUG this is inefficient
+ match_results<Char const *> what;
+ return regex_search(begin, what, re, flags);
+}
+
+/// \overload
+template<typename Char, typename Traits, typename Alloc>
+inline bool regex_search
+(
+ std::basic_string<Char, Traits, Alloc> const &str
+ , basic_regex<typename std::basic_string<Char, Traits, Alloc>::const_iterator> const &re
+ , regex_constants::match_flag_type flags = regex_constants::match_default
+)
+{
+ // BUGBUG this is inefficient
+ match_results<typename std::basic_string<Char, Traits, Alloc>::const_iterator> what;
+ return regex_search(str, what, re, flags);
+}
+
+
+///////////////////////////////////////////////////////////////////////////////
+// regex_replace
+///////////////////////////////////////////////////////////////////////////////
+
+
+/// \brief Build an output sequence given an input sequence, a regex, and a format string.
+///
+/// Constructs a regex_iterator object: regex_iterator\< BidiIter \> i(begin, end, re, flags),
+/// and uses i to enumerate through all of the matches m of type match_results\< BidiIter \> that
+/// occur within the sequence [begin, end). If no such matches are found and !(flags \& format_no_copy)
+/// then calls std::copy(begin, end, out). Otherwise, for each match found, if !(flags \& format_no_copy)
+/// calls std::copy(m.prefix().first, m.prefix().second, out), and then calls m.format(out, fmt, flags).
+/// Finally if !(flags \& format_no_copy) calls std::copy(last_m.suffix().first, last_m.suffix().second, out)
+/// where last_m is a copy of the last match found. If flags \& format_first_only is non-zero then only
+/// the first match found is replaced.
+///
+/// \pre Types BidiIter and OtherBidiIter meet the requirements of a Bidirectional Iterator (24.1.4).
+/// \pre Type OutIter meets the requirements of an Output Iterator (24.1.2).
+/// \pre OtherBidiIter is convertible to BidiIter.
+/// \pre [begin,end) denotes a valid iterator range.
+///
+/// \param out An output iterator into which the output sequence is written.
+/// \param begin The beginning of the input sequence.
+/// \param end The end of the input sequence.
+/// \param re The regular expression object to use.
+/// \param fmt The format string used to format the replacement sequence.
+/// \param flags Optional match flags, used to control how the expression is matched against the sequence. (See match_flag_type.)
+/// \return The value of the output iterator after the output sequence has been written to it.
+/// \throw regex_error on stack exhaustion or invalid format string.
+template<typename OutIter, typename OtherBidiIter, typename BidiIter>
+inline OutIter regex_replace
+(
+ OutIter out
+ , OtherBidiIter begin
+ , OtherBidiIter end
+ , basic_regex<BidiIter> const &re
+ , std::basic_string<typename iterator_value<BidiIter>::type> const &fmt
+ , regex_constants::match_flag_type flags = regex_constants::match_default
+)
+{
+ using namespace regex_constants;
+ typedef detail::core_access<BidiIter> access;
+
+ BidiIter cur = begin;
+ match_results<BidiIter> what;
+ detail::state_type<BidiIter> state(begin, end, what, *access::get_regex_impl(re), flags);
+ bool const yes_copy = (0 == (flags & format_no_copy));
+
+ if(detail::regex_search_impl(state, re))
+ {
+ if(yes_copy)
+ {
+ out = std::copy(cur, what[0].first, out);
+ }
+
+ out = what.format(out, fmt, flags);
+ cur = state.cur_ = what[0].second;
+
+ if(0 == (flags & format_first_only))
+ {
+ bool not_null = (0 == what.length());
+ state.reset(what, *access::get_regex_impl(re));
+ while(detail::regex_search_impl(state, re, not_null))
+ {
+ if(yes_copy)
+ {
+ out = std::copy(cur, what[0].first, out);
+ }
+
+ access::set_prefix_suffix(what, begin, end);
+ out = what.format(out, fmt, flags);
+ cur = state.cur_ = what[0].second;
+ not_null = (0 == what.length());
+ state.reset(what, *access::get_regex_impl(re));
+ }
+ }
+ }
+
+ if(yes_copy)
+ {
+ out = std::copy(cur, static_cast<BidiIter>(end), out);
+ }
+
+ return out;
+}
+
+/// \overload
+template<typename Char>
+inline std::basic_string<Char> regex_replace
+(
+ std::basic_string<Char> const &str
+ , basic_regex<typename std::basic_string<Char>::const_iterator> const &re
+ , std::basic_string<Char> const &fmt
+ , regex_constants::match_flag_type flags = regex_constants::match_default
+)
+{
+ std::basic_string<Char> result;
+ result.reserve(fmt.length() * 2);
+ regex_replace(std::back_inserter(result), str.begin(), str.end(), re, fmt, flags);
+ return result;
+}
+
+}} // namespace boost::xpressive
+
+#endif
diff --git a/boost/boost/xpressive/regex_compiler.hpp b/boost/boost/xpressive/regex_compiler.hpp
new file mode 100644
index 00000000000..dc094fb11f7
--- /dev/null
+++ b/boost/boost/xpressive/regex_compiler.hpp
@@ -0,0 +1,553 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file regex_compiler.hpp
+/// Contains the definition of regex_compiler, a factory for building regex objects
+/// from strings.
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_REGEX_COMPILER_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_REGEX_COMPILER_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/xpressive/basic_regex.hpp>
+#include <boost/xpressive/detail/dynamic/parser.hpp>
+#include <boost/xpressive/detail/dynamic/parse_charset.hpp>
+#include <boost/xpressive/detail/dynamic/parser_enum.hpp>
+#include <boost/xpressive/detail/dynamic/parser_traits.hpp>
+#include <boost/xpressive/detail/core/linker.hpp>
+#include <boost/xpressive/detail/core/optimize.hpp>
+
+namespace boost { namespace xpressive
+{
+
+///////////////////////////////////////////////////////////////////////////////
+// regex_compiler
+//
+/// \brief Class template regex_compiler is a factory for building basic_regex objects from a string.
+///
+/// Class template regex_compiler is used to construct a basic_regex object from a string. The string
+/// should contain a valid regular expression. You can imbue a regex_compiler object with a locale,
+/// after which all basic_regex objects created with that regex_compiler object will use that locale.
+/// After creating a regex_compiler object, and optionally imbueing it with a locale, you can call the
+/// compile() method to construct a basic_regex object, passing it the string representing the regular
+/// expression. You can call compile() multiple times on the same regex_compiler object. Two basic_regex
+/// objects compiled from the same string will have different regex_id's.
+template<typename BidiIter, typename RegexTraits, typename CompilerTraits>
+struct regex_compiler
+{
+ typedef BidiIter iterator_type;
+ typedef typename iterator_value<BidiIter>::type char_type;
+ typedef std::basic_string<char_type> string_type;
+ typedef regex_constants::syntax_option_type flag_type;
+ typedef RegexTraits traits_type;
+ typedef typename traits_type::char_class_type char_class_type;
+ typedef typename traits_type::locale_type locale_type;
+
+ explicit regex_compiler(RegexTraits const &traits = RegexTraits())
+ : mark_count_(0)
+ , hidden_mark_count_(0)
+ , traits_(traits)
+ , upper_(0)
+ {
+ this->upper_ = lookup_classname(this->rxtraits(), "upper");
+ BOOST_ASSERT(0 != this->upper_);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // imbue
+ /// Specify the locale to be used by a regex_compiler.
+ ///
+ /// \param loc The locale that this regex_compiler should use.
+ /// \return The previous locale.
+ locale_type imbue(locale_type loc)
+ {
+ locale_type oldloc = this->traits_.imbue(loc);
+ this->upper_ = lookup_classname(this->rxtraits(), "upper");
+ BOOST_ASSERT(0 != this->upper_);
+ return oldloc;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // getloc
+ /// Get the locale used by a regex_compiler.
+ ///
+ /// \param loc The locale that this regex_compiler uses.
+ locale_type getloc() const
+ {
+ return this->traits_.getloc();
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // compile
+ /// Builds a basic_regex object from a std::string.
+ ///
+ /// \param pat A std::string containing the regular expression pattern.
+ /// \param flags Optional bitmask that determines how the pat string is interpreted. (See syntax_option_type.)
+ /// \return A basic_regex object corresponding to the regular expression represented by the string.
+ /// \pre The std::string pat contains a valid string-based representation of a regular expression.
+ /// \throw regex_error when the string has invalid regular expression syntax.
+ basic_regex<BidiIter> compile(string_type pat, flag_type flags = regex_constants::ECMAScript)
+ {
+ this->reset();
+ this->traits_.flags(flags);
+
+ string_iterator begin = pat.begin(), end = pat.end();
+
+ // at the top level, a regex is a sequence of alternates
+ alternates_list alternates;
+ this->parse_alternates(begin, end, alternates);
+ detail::ensure(begin == end, regex_constants::error_paren, "mismatched parenthesis");
+
+ // convert the alternates list to the appropriate matcher and terminate the sequence
+ detail::sequence<BidiIter> seq = detail::alternates_to_matchable(alternates, alternates_factory());
+ seq += detail::make_dynamic_xpression<BidiIter>(detail::end_matcher());
+
+ // fill in the back-pointers by visiting the regex parse tree
+ detail::xpression_linker<char_type> linker(this->rxtraits());
+ seq.first->link(linker);
+
+ // bundle the regex information into a regex_impl object
+ detail::regex_impl<BidiIter> impl;
+ impl.xpr_ = seq.first;
+ impl.traits_.reset(new RegexTraits(this->rxtraits()));
+ impl.mark_count_ = this->mark_count_;
+ impl.hidden_mark_count_ = this->hidden_mark_count_;
+
+ // optimization: get the peek chars OR the boyer-moore search string
+ detail::optimize_regex(impl, this->rxtraits(), detail::is_random<BidiIter>());
+
+ return detail::core_access<BidiIter>::make_regex(impl);
+ }
+
+private:
+
+ typedef typename string_type::const_iterator string_iterator;
+ typedef std::list<detail::sequence<BidiIter> > alternates_list;
+ typedef detail::escape_value<char_type, char_class_type> escape_value;
+ typedef detail::alternates_factory_impl<BidiIter, traits_type> alternates_factory;
+
+ ///////////////////////////////////////////////////////////////////////////
+ // reset
+ /// INTERNAL ONLY
+ void reset()
+ {
+ this->mark_count_ = 0;
+ this->hidden_mark_count_ = 0;
+ this->traits_.flags(regex_constants::ECMAScript);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // regex_traits
+ /// INTERNAL ONLY
+ traits_type &rxtraits()
+ {
+ return this->traits_.traits();
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // regex_traits
+ /// INTERNAL ONLY
+ traits_type const &rxtraits() const
+ {
+ return this->traits_.traits();
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // parse_alternates
+ /// INTERNAL ONLY
+ void parse_alternates(string_iterator &begin, string_iterator end, alternates_list &alternates)
+ {
+ using namespace regex_constants;
+ string_iterator old_begin;
+
+ do
+ {
+ alternates.push_back(this->parse_sequence(begin, end));
+ old_begin = begin;
+ }
+ while(begin != end && token_alternate == this->traits_.get_token(begin, end));
+
+ begin = old_begin;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // parse_group
+ /// INTERNAL ONLY
+ detail::sequence<BidiIter> parse_group(string_iterator &begin, string_iterator end)
+ {
+ using namespace regex_constants;
+ int mark_nbr = 0;
+ bool keeper = false;
+ bool lookahead = false;
+ bool lookbehind = false;
+ bool negative = false;
+ std::size_t old_mark_count = this->mark_count_;
+
+ detail::sequence<BidiIter> seq, seq_end;
+ string_iterator tmp = string_iterator();
+
+ syntax_option_type old_flags = this->traits_.flags();
+
+ switch(this->traits_.get_group_type(begin, end))
+ {
+ case token_no_mark:
+ // Don't process empty groups like (?:) or (?i)
+ // BUGBUG this doesn't handle the degenerate (?:)+ correctly
+ if(token_group_end == this->traits_.get_token(tmp = begin, end))
+ {
+ return this->parse_atom(begin = tmp, end);
+ }
+ break;
+
+ case token_negative_lookahead:
+ negative = true; // fall-through
+ case token_positive_lookahead:
+ lookahead = true;
+ seq_end = detail::make_dynamic_xpression<BidiIter>(detail::true_matcher());
+ break;
+
+ case token_negative_lookbehind:
+ negative = true; // fall-through
+ case token_positive_lookbehind:
+ lookbehind = true;
+ seq_end = detail::make_dynamic_xpression<BidiIter>(detail::true_matcher());
+ break;
+
+ case token_independent_sub_expression:
+ keeper = true;
+ seq_end = detail::make_dynamic_xpression<BidiIter>(detail::true_matcher());
+ break;
+
+ case token_comment:
+ while(detail::ensure(begin != end, error_paren, "mismatched parenthesis"))
+ {
+ switch(this->traits_.get_token(begin, end))
+ {
+ case token_group_end: return this->parse_atom(begin, end);
+ case token_escape: detail::ensure(begin != end, error_escape, "incomplete escape sequence");
+ case token_literal: ++begin;
+ default:;
+ }
+ }
+ break;
+
+ default:
+ mark_nbr = static_cast<int>(++this->mark_count_);
+ seq = detail::make_dynamic_xpression<BidiIter>(detail::mark_begin_matcher(mark_nbr));
+ seq_end = detail::make_dynamic_xpression<BidiIter>(detail::mark_end_matcher(mark_nbr));
+ break;
+ }
+
+ // alternates
+ alternates_list alternates;
+ this->parse_alternates(begin, end, alternates);
+ detail::ensure
+ (
+ begin != end && token_group_end == this->traits_.get_token(begin, end)
+ , error_paren
+ , "mismatched parenthesis"
+ );
+
+ seq += detail::alternates_to_matchable(alternates, alternates_factory());
+ seq += seq_end;
+
+ typedef shared_ptr<detail::matchable<BidiIter> const> xpr_type;
+ bool do_save = (this->mark_count_ != old_mark_count);
+
+ if(lookahead)
+ {
+ detail::lookahead_matcher<xpr_type> lookahead(seq.first, negative, do_save);
+ seq = detail::make_dynamic_xpression<BidiIter>(lookahead);
+ }
+ else if(lookbehind)
+ {
+ detail::lookbehind_matcher<xpr_type> lookbehind(seq.first, negative, do_save);
+ seq = detail::make_dynamic_xpression<BidiIter>(lookbehind);
+ }
+ else if(keeper) // independent sub-expression
+ {
+ detail::keeper_matcher<xpr_type> keeper(seq.first, do_save);
+ seq = detail::make_dynamic_xpression<BidiIter>(keeper);
+ }
+
+ // restore the modifiers
+ this->traits_.flags(old_flags);
+ return seq;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // parse_charset
+ /// INTERNAL ONLY
+ detail::sequence<BidiIter> parse_charset(string_iterator &begin, string_iterator end)
+ {
+ detail::compound_charset<traits_type> chset;
+
+ // call out to a helper to actually parse the character set
+ detail::parse_charset(begin, end, chset, this->traits_);
+
+ return detail::make_charset_xpression<BidiIter>
+ (
+ chset
+ , this->rxtraits()
+ , this->traits_.flags()
+ );
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // parse_atom
+ /// INTERNAL ONLY
+ detail::sequence<BidiIter> parse_atom(string_iterator &begin, string_iterator end)
+ {
+ using namespace regex_constants;
+ escape_value esc = { 0, 0, 0, detail::escape_char };
+ string_iterator old_begin = begin;
+
+ switch(this->traits_.get_token(begin, end))
+ {
+ case token_literal:
+ return detail::make_literal_xpression<BidiIter>
+ (
+ this->parse_literal(begin, end), this->traits_.flags(), this->rxtraits()
+ );
+
+ case token_any:
+ return detail::make_any_xpression<BidiIter>(this->traits_.flags(), this->rxtraits());
+
+ case token_assert_begin_sequence:
+ return detail::make_dynamic_xpression<BidiIter>(detail::assert_bos_matcher());
+
+ case token_assert_end_sequence:
+ return detail::make_dynamic_xpression<BidiIter>(detail::assert_eos_matcher());
+
+ case token_assert_begin_line:
+ return detail::make_assert_begin_line<BidiIter>(this->traits_.flags(), this->rxtraits());
+
+ case token_assert_end_line:
+ return detail::make_assert_end_line<BidiIter>(this->traits_.flags(), this->rxtraits());
+
+ case token_assert_word_boundary:
+ return detail::make_assert_word<BidiIter>(detail::word_boundary<true>(), this->rxtraits());
+
+ case token_assert_not_word_boundary:
+ return detail::make_assert_word<BidiIter>(detail::word_boundary<false>(), this->rxtraits());
+
+ case token_assert_word_begin:
+ return detail::make_assert_word<BidiIter>(detail::word_begin(), this->rxtraits());
+
+ case token_assert_word_end:
+ return detail::make_assert_word<BidiIter>(detail::word_end(), this->rxtraits());
+
+ case token_escape:
+ esc = this->parse_escape(begin, end);
+ switch(esc.type_)
+ {
+ case detail::escape_mark:
+ return detail::make_backref_xpression<BidiIter>
+ (
+ esc.mark_nbr_, this->traits_.flags(), this->rxtraits()
+ );
+ case detail::escape_char:
+ return detail::make_char_xpression<BidiIter>
+ (
+ esc.ch_, this->traits_.flags(), this->rxtraits()
+ );
+ case detail::escape_class:
+ return detail::make_posix_charset_xpression<BidiIter>
+ (
+ esc.class_
+ , this->rxtraits().isctype(*begin++, this->upper_)
+ , this->traits_.flags()
+ , this->rxtraits()
+ );
+ }
+
+ case token_group_begin:
+ return this->parse_group(begin, end);
+
+ case token_charset_begin:
+ return this->parse_charset(begin, end);
+
+ case token_invalid_quantifier:
+ throw regex_error(error_badrepeat, "quantifier not expected");
+
+ case token_quote_meta_begin:
+ return detail::make_literal_xpression<BidiIter>
+ (
+ this->parse_quote_meta(begin, end), this->traits_.flags(), this->rxtraits()
+ );
+
+ case token_quote_meta_end:
+ throw regex_error
+ (
+ error_escape
+ , "found quote-meta end without corresponding quote-meta begin"
+ );
+
+ case token_end_of_pattern:
+ break;
+
+ default:
+ begin = old_begin;
+ break;
+ }
+
+ return detail::sequence<BidiIter>();
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // parse_quant
+ /// INTERNAL ONLY
+ detail::sequence<BidiIter> parse_quant(string_iterator &begin, string_iterator end)
+ {
+ BOOST_ASSERT(begin != end);
+ detail::quant_spec spec = { 0, 0, false };
+ detail::sequence<BidiIter> seq = this->parse_atom(begin, end);
+
+ // BUGBUG this doesn't handle the degenerate (?:)+ correctly
+ if(!seq.is_empty() && begin != end && seq.first->is_quantifiable())
+ {
+ if(this->traits_.get_quant_spec(begin, end, spec))
+ {
+ BOOST_ASSERT(spec.min_ <= spec.max_);
+
+ if(0 == spec.max_) // quant {0,0} is degenerate -- matches nothing.
+ {
+ seq = this->parse_quant(begin, end);
+ }
+ else
+ {
+ seq = seq.first->quantify(spec, this->hidden_mark_count_, seq, alternates_factory());
+ }
+ }
+ }
+
+ return seq;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // parse_sequence
+ /// INTERNAL ONLY
+ detail::sequence<BidiIter> parse_sequence(string_iterator &begin, string_iterator end)
+ {
+ detail::sequence<BidiIter> seq;
+
+ while(begin != end)
+ {
+ detail::sequence<BidiIter> seq_quant = this->parse_quant(begin, end);
+
+ // did we find a quantified atom?
+ if(seq_quant.is_empty())
+ break;
+
+ // chain it to the end of the xpression sequence
+ seq += seq_quant;
+ }
+
+ return seq;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // parse_literal
+ // scan ahead looking for char literals to be globbed together into a string literal
+ /// INTERNAL ONLY
+ string_type parse_literal(string_iterator &begin, string_iterator end)
+ {
+ using namespace regex_constants;
+ BOOST_ASSERT(begin != end);
+ BOOST_ASSERT(token_literal == this->traits_.get_token(begin, end));
+ escape_value esc = { 0, 0, 0, detail::escape_char };
+ string_type literal(1, *begin);
+
+ for(string_iterator prev = begin, tmp = ++begin; begin != end; prev = begin, begin = tmp)
+ {
+ detail::quant_spec spec;
+ if(this->traits_.get_quant_spec(tmp, end, spec))
+ {
+ if(literal.size() != 1)
+ {
+ begin = prev;
+ literal.erase(literal.size() - 1);
+ }
+ return literal;
+ }
+ else switch(this->traits_.get_token(tmp, end))
+ {
+ case token_escape:
+ esc = this->parse_escape(tmp, end);
+ if(detail::escape_char != esc.type_) return literal;
+ literal += esc.ch_;
+ break;
+ case token_literal:
+ literal += *tmp++;
+ break;
+ default:
+ return literal;
+ }
+ }
+
+ return literal;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // parse_quote_meta
+ // scan ahead looking for char literals to be globbed together into a string literal
+ /// INTERNAL ONLY
+ string_type parse_quote_meta(string_iterator &begin, string_iterator end)
+ {
+ using namespace regex_constants;
+ string_iterator old_begin = begin, old_end;
+ while(end != (old_end = begin))
+ {
+ switch(this->traits_.get_token(begin, end))
+ {
+ case token_quote_meta_end: return string_type(old_begin, old_end);
+ case token_escape: detail::ensure(begin != end, error_escape, "incomplete escape sequence");
+ case token_literal: ++begin;
+ default:;
+ }
+ }
+ return string_type(old_begin, begin);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // parse_escape
+ /// INTERNAL ONLY
+ escape_value parse_escape(string_iterator &begin, string_iterator end)
+ {
+ detail::ensure(begin != end, regex_constants::error_escape, "incomplete escape sequence");
+
+ // first, check to see if this can be a backreference
+ if(0 < this->rxtraits().value(*begin, 10))
+ {
+ // Parse at most 3 decimal digits.
+ string_iterator tmp = begin;
+ int mark_nbr = detail::toi(tmp, end, this->rxtraits(), 10, 999);
+
+ // If the resulting number could conceivably be a backref, then it is.
+ if(10 > mark_nbr || mark_nbr <= static_cast<int>(this->mark_count_))
+ {
+ begin = tmp;
+ escape_value esc = {0, mark_nbr, 0, detail::escape_mark};
+ return esc;
+ }
+ }
+
+ // Not a backreference, defer to the parse_escape helper
+ return detail::parse_escape(begin, end, this->traits_);
+ }
+
+ std::size_t mark_count_;
+ std::size_t hidden_mark_count_;
+ CompilerTraits traits_;
+ typename RegexTraits::char_class_type upper_;
+};
+
+}} // namespace boost::xpressive
+
+#endif
diff --git a/boost/boost/xpressive/regex_constants.hpp b/boost/boost/xpressive/regex_constants.hpp
new file mode 100644
index 00000000000..d54ba22073c
--- /dev/null
+++ b/boost/boost/xpressive/regex_constants.hpp
@@ -0,0 +1,282 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file regex_constants.hpp
+/// Contains definitions for the syntax_option_type, match_flag_type and
+/// error_type enumerations.
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_REGEX_CONSTANTS_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_REGEX_CONSTANTS_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/mpl/identity.hpp>
+
+#ifndef BOOST_XPRESSIVE_DOXYGEN_INVOKED
+# define icase icase_
+#endif
+
+namespace boost { namespace xpressive { namespace regex_constants
+{
+
+/// Flags used to customize the regex syntax
+///
+enum syntax_option_type
+{
+ // these flags are required:
+
+ ECMAScript = 0, ///< Specifies that the grammar recognized by the regular expression
+ ///< engine uses its normal semantics: that is the same as that given
+ ///< in the ECMA-262, ECMAScript Language Specification, Chapter 15
+ ///< part 10, RegExp (Regular Expression) Objects (FWD.1).
+ ///<
+ icase = 1 << 1, ///< Specifies that matching of regular expressions against a character
+ ///< container sequence shall be performed without regard to case.
+ ///<
+ nosubs = 1 << 2, ///< Specifies that when a regular expression is matched against a
+ ///< character container sequence, then no sub-expression matches are to
+ ///< be stored in the supplied match_results structure.
+ ///<
+ optimize = 1 << 3, ///< Specifies that the regular expression engine should pay more
+ ///< attention to the speed with which regular expressions are matched,
+ ///< and less to the speed with which regular expression objects are
+ ///< constructed. Otherwise it has no detectable effect on the program
+ ///< output.
+ ///<
+ collate = 1 << 4, ///< Specifies that character ranges of the form "[a-b]" should be
+ ///< locale sensitive.
+ ///<
+
+ // These flags are optional. If the functionality is supported
+ // then the flags shall take these names.
+
+ //basic = 1 << 5, ///< Specifies that the grammar recognized by the regular expression
+ // ///< engine is the same as that used by POSIX basic regular expressions
+ // ///< in IEEE Std 1003.1-2001, Portable Operating System Interface
+ // ///< (POSIX), Base Definitions and Headers, Section 9, Regular
+ // ///< Expressions (FWD.1).
+ // ///<
+ //extended = 1 << 6, ///< Specifies that the grammar recognized by the regular expression
+ // ///< engine is the same as that used by POSIX extended regular
+ // ///< expressions in IEEE Std 1003.1-2001, Portable Operating System
+ // ///< Interface (POSIX), Base Definitions and Headers, Section 9,
+ // ///< Regular Expressions (FWD.1).
+ // ///<
+ //awk = 1 << 7, ///< Specifies that the grammar recognized by the regular expression
+ // ///< engine is the same as that used by POSIX utility awk in IEEE Std
+ // ///< 1003.1-2001, Portable Operating System Interface (POSIX), Shells
+ // ///< and Utilities, Section 4, awk (FWD.1).
+ // ///<
+ //grep = 1 << 8, ///< Specifies that the grammar recognized by the regular expression
+ // ///< engine is the same as that used by POSIX utility grep in IEEE Std
+ // ///< 1003.1-2001, Portable Operating System Interface (POSIX),
+ // ///< Shells and Utilities, Section 4, Utilities, grep (FWD.1).
+ // ///<
+ //egrep = 1 << 9, ///< Specifies that the grammar recognized by the regular expression
+ // ///< engine is the same as that used by POSIX utility grep when given
+ // ///< the -E option in IEEE Std 1003.1-2001, Portable Operating System
+ // ///< Interface (POSIX), Shells and Utilities, Section 4, Utilities,
+ // ///< grep (FWD.1).
+ // ///<
+
+ // these flags are specific to xpressive, and they help with perl compliance.
+
+ single_line = 1 << 10, ///< Specifies that the ^ and \$ metacharacters DO NOT match at
+ ///< internal line breaks. Note that this is the opposite of the
+ ///< perl default. It is the inverse of perl's /m (multi-line)
+ ///< modifier.
+ ///<
+ not_dot_null = 1 << 11, ///< Specifies that the . metacharacter does not match the null
+ ///< character \\0.
+ ///<
+ not_dot_newline = 1 << 12, ///< Specifies that the . metacharacter does not match the
+ ///< newline character \\n.
+ ///<
+ ignore_white_space = 1 << 13 ///< Specifies that non-escaped white-space is not significant.
+ ///<
+};
+
+/// Flags used to customize the behavior of the regex algorithms
+///
+enum match_flag_type
+{
+ match_default = 0, ///< Specifies that matching of regular expressions proceeds
+ ///< without any modification of the normal rules used in
+ ///< ECMA-262, ECMAScript Language Specification, Chapter 15
+ ///< part 10, RegExp (Regular Expression) Objects (FWD.1)
+ ///<
+ match_not_bol = 1 << 1, ///< Specifies that the expression "^" should not be matched
+ ///< against the sub-sequence [first,first).
+ ///<
+ match_not_eol = 1 << 2, ///< Specifies that the expression "\$" should not be
+ ///< matched against the sub-sequence [last,last).
+ ///<
+ match_not_bow = 1 << 3, ///< Specifies that the expression "\\b" should not be
+ ///< matched against the sub-sequence [first,first).
+ ///<
+ match_not_eow = 1 << 4, ///< Specifies that the expression "\\b" should not be
+ ///< matched against the sub-sequence [last,last).
+ ///<
+ match_any = 1 << 7, ///< Specifies that if more than one match is possible then
+ ///< any match is an acceptable result.
+ ///<
+ match_not_null = 1 << 8, ///< Specifies that the expression can not be matched
+ ///< against an empty sequence.
+ ///<
+ match_continuous = 1 << 10, ///< Specifies that the expression must match a sub-sequence
+ ///< that begins at first.
+ ///<
+ match_partial = 1 << 11, ///< Specifies that if no match can be found, then it is
+ ///< acceptable to return a match [from, last) where
+ ///< from!=last, if there exists some sequence of characters
+ ///< [from,to) of which [from,last) is a prefix, and which
+ ///< would result in a full match.
+ ///<
+ match_prev_avail = 1 << 12, ///< Specifies that --first is a valid iterator position,
+ ///< when this flag is set then the flags match_not_bol
+ ///< and match_not_bow are ignored by the regular expression
+ ///< algorithms (RE.7) and iterators (RE.8).
+ ///<
+ format_default = 0, ///< Specifies that when a regular expression match is to be
+ ///< replaced by a new string, that the new string is
+ ///< constructed using the rules used by the ECMAScript
+ ///< replace function in ECMA-262, ECMAScript Language
+ ///< Specification, Chapter 15 part 5.4.11
+ ///< String.prototype.replace. (FWD.1). In addition during
+ ///< search and replace operations then all non-overlapping
+ ///< occurrences of the regular expression are located and
+ ///< replaced, and sections of the input that did not match
+ ///< the expression, are copied unchanged to the output
+ ///< string.
+ ///<
+ //format_sed = 1 << 13, ///< Specifies that when a regular expression match is to be
+ // ///< replaced by a new string, that the new string is
+ // ///< constructed using the rules used by the Unix sed
+ // ///< utility in IEEE Std 1003.1-2001, Portable Operating
+ // ///< SystemInterface (POSIX), Shells and Utilities.
+ // ///<
+ //format_perl = 1 << 14, ///< Specifies that when a regular expression match is to be
+ // ///< replaced by a new string, that the new string is
+ // ///< constructed using an implementation defined superset
+ // ///< of the rules used by the ECMAScript replace function in
+ // ///< ECMA-262, ECMAScript Language Specification, Chapter 15
+ // ///< part 5.4.11 String.prototype.replace (FWD.1).
+ // ///<
+ format_no_copy = 1 << 15, ///< When specified during a search and replace operation,
+ ///< then sections of the character container sequence being
+ ///< searched that do match the regular expression, are not
+ ///< copied to the output string.
+ ///<
+ format_first_only = 1 << 16, ///< When specified during a search and replace operation,
+ ///< then only the first occurrence of the regular
+ ///< expression is replaced.
+ ///<
+ format_literal = 1 << 17 ///< Treat the format string as a literal.
+ ///<
+};
+
+/// Error codes used by the regex_error type
+///
+enum error_type
+{
+ error_collate, ///< The expression contained an invalid collating element name.
+ ///<
+ error_ctype, ///< The expression contained an invalid character class name.
+ ///<
+ error_escape, ///< The expression contained an invalid escaped character,
+ ///< or a trailing escape.
+ ///<
+ error_subreg, ///< The expression contained an invalid back-reference.
+ ///<
+ error_brack, ///< The expression contained mismatched [ and ].
+ ///<
+ error_paren, ///< The expression contained mismatched (and).
+ ///<
+ error_brace, ///< The expression contained mismatched { and }
+ ///<
+ error_badbrace, ///< The expression contained an invalid range in a {} expression.
+ ///<
+ error_range, ///< The expression contained an invalid character range, for
+ ///< example [b-a].
+ ///<
+ error_space, ///< There was insufficient memory to convert the expression into a
+ ///< finite state machine.
+ ///<
+ error_badrepeat, ///< One of *?+{ was not preceded by a valid regular expression.
+ ///<
+ error_complexity, ///< The complexity of an attempted match against a regular
+ ///< expression exceeded a pre-set level.
+ ///<
+ error_stack, ///< There was insufficient memory to determine whether the regular
+ ///< expression could match the specified character sequence.
+ ///<
+ error_badref, ///< An nested regex is uninitialized.
+ ///<
+ error_badlookbehind, ///< An attempt to create a variable-width look-behind assertion
+ ///< was detected.
+ ///<
+ error_internal ///< An internal error has occured.
+ ///<
+};
+
+/// INTERNAL ONLY
+inline syntax_option_type operator &(syntax_option_type b1, syntax_option_type b2)
+{
+ return static_cast<syntax_option_type>(
+ static_cast<int>(b1) & static_cast<int>(b2));
+}
+
+/// INTERNAL ONLY
+inline syntax_option_type operator |(syntax_option_type b1, syntax_option_type b2)
+{
+ return static_cast<syntax_option_type>(static_cast<int>(b1) | static_cast<int>(b2));
+}
+
+/// INTERNAL ONLY
+inline syntax_option_type operator ^(syntax_option_type b1, syntax_option_type b2)
+{
+ return static_cast<syntax_option_type>(static_cast<int>(b1) ^ static_cast<int>(b2));
+}
+
+/// INTERNAL ONLY
+inline syntax_option_type operator ~(syntax_option_type b)
+{
+ return static_cast<syntax_option_type>(~static_cast<int>(b));
+}
+
+/// INTERNAL ONLY
+inline match_flag_type operator &(match_flag_type b1, match_flag_type b2)
+{
+ return static_cast<match_flag_type>(static_cast<int>(b1) & static_cast<int>(b2));
+}
+
+/// INTERNAL ONLY
+inline match_flag_type operator |(match_flag_type b1, match_flag_type b2)
+{
+ return static_cast<match_flag_type>(static_cast<int>(b1) | static_cast<int>(b2));
+}
+
+/// INTERNAL ONLY
+inline match_flag_type operator ^(match_flag_type b1, match_flag_type b2)
+{
+ return static_cast<match_flag_type>(static_cast<int>(b1) ^ static_cast<int>(b2));
+}
+
+/// INTERNAL ONLY
+inline match_flag_type operator ~(match_flag_type b)
+{
+ return static_cast<match_flag_type>(~static_cast<int>(b));
+}
+
+}}} // namespace boost::xpressive::regex_constants
+
+#ifndef BOOST_XPRESSIVE_DOXYGEN_INVOKED
+# undef icase
+#endif
+
+#endif
diff --git a/boost/boost/xpressive/regex_error.hpp b/boost/boost/xpressive/regex_error.hpp
new file mode 100644
index 00000000000..6e995e5e291
--- /dev/null
+++ b/boost/boost/xpressive/regex_error.hpp
@@ -0,0 +1,82 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file regex_error.hpp
+/// Contains the definition of the regex_error exception class.
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_REGEX_ERROR_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_REGEX_ERROR_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <string>
+#include <stdexcept>
+#include <boost/xpressive/regex_constants.hpp>
+
+//{{AFX_DOC_COMMENT
+///////////////////////////////////////////////////////////////////////////////
+// This is a hack to get Doxygen to show the inheritance relation between
+// regex_error and std::runtime_error.
+#ifdef BOOST_XPRESSIVE_DOXYGEN_INVOKED
+/// INTERNAL ONLY
+namespace std
+{
+ /// INTERNAL ONLY
+ struct runtime_error {};
+}
+#endif
+//}}AFX_DOC_COMMENT
+
+namespace boost { namespace xpressive
+{
+
+////////////////////////////////////////////////////////////////////////////////
+// regex_error
+//
+/// \brief The class regex_error defines the type of objects thrown as
+/// exceptions to report errors during the conversion from a string representing
+/// a regular expression to a finite state machine.
+struct regex_error
+ : std::runtime_error
+{
+ /// Constructs an object of class regex_error.
+ /// \param code The error_type this regex_error represents.
+ /// \post code() == code
+ explicit regex_error(regex_constants::error_type code, char const *str = "")
+ : std::runtime_error(str)
+ , code_(code)
+ {
+ }
+
+ /// Accessor for the error_type value
+ /// \return the error_type code passed to the constructor
+ /// \throw nothrow
+ regex_constants::error_type code() const
+ {
+ return this->code_;
+ }
+
+private:
+
+ regex_constants::error_type code_;
+};
+
+namespace detail
+{
+
+//////////////////////////////////////////////////////////////////////////
+// ensure
+/// INTERNAL ONLY
+inline bool ensure(bool predicate, regex_constants::error_type code, char const *str = "")
+{
+ return predicate ? true : throw regex_error(code, str);
+}
+
+}}} // namespace boost::xpressive::detail
+
+#endif
diff --git a/boost/boost/xpressive/regex_iterator.hpp b/boost/boost/xpressive/regex_iterator.hpp
new file mode 100644
index 00000000000..3e67b3b5e5b
--- /dev/null
+++ b/boost/boost/xpressive/regex_iterator.hpp
@@ -0,0 +1,231 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file regex_iterator.hpp
+/// Contains the definition of the regex_iterator type, an STL-compatible iterator
+/// for stepping through all the matches in a sequence.
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_REGEX_ITERATOR_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_REGEX_ITERATOR_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/noncopyable.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/core/access.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+//////////////////////////////////////////////////////////////////////////
+// regex_iterator_impl
+//
+template<typename BidiIter>
+struct regex_iterator_impl
+ : private noncopyable
+{
+ typedef detail::core_access<BidiIter> access;
+
+ regex_iterator_impl
+ (
+ BidiIter begin
+ , BidiIter cur
+ , BidiIter end
+ , basic_regex<BidiIter> const *rex
+ , regex_constants::match_flag_type flags
+ , bool not_null = false
+ )
+ : what_()
+ , state_(begin, end, what_, *access::get_regex_impl(*rex), flags)
+ , rex_(rex)
+ , flags_(flags)
+ , not_null_(not_null)
+ {
+ this->state_.cur_ = cur;
+ }
+
+ bool next()
+ {
+ this->state_.reset(this->what_, *access::get_regex_impl(*this->rex_));
+ if(!regex_search_impl(this->state_, *this->rex_, this->not_null_))
+ {
+ return false;
+ }
+
+ // Report position() correctly by setting the base different from prefix().first
+ access::set_base(this->what_, this->state_.begin_);
+
+ this->state_.cur_ = this->what_[0].second;
+ this->not_null_ = (0 == this->what_.length());
+
+ return true;
+ }
+
+ bool equal_to(regex_iterator_impl<BidiIter> const &that) const
+ {
+ return this->rex_ == that.rex_
+ && this->state_.begin_ == that.state_.begin_
+ && this->state_.cur_ == that.state_.cur_
+ && this->state_.end_ == that.state_.end_
+ && this->flags_ == that.flags_
+ ;
+ }
+
+ match_results<BidiIter> what_;
+ state_type<BidiIter> state_;
+ basic_regex<BidiIter> const *const rex_;
+ regex_constants::match_flag_type const flags_;
+ bool not_null_;
+};
+
+} // namespace detail
+
+//////////////////////////////////////////////////////////////////////////
+// regex_iterator
+//
+template<typename BidiIter>
+struct regex_iterator
+{
+ typedef basic_regex<BidiIter> regex_type;
+ typedef match_results<BidiIter> value_type;
+ typedef typename iterator_difference<BidiIter>::type difference_type;
+ typedef value_type const *pointer;
+ typedef value_type const &reference;
+ typedef std::forward_iterator_tag iterator_category;
+
+ /// INTERNAL ONLY
+ typedef detail::regex_iterator_impl<BidiIter> impl_type_;
+
+ regex_iterator()
+ : impl_()
+ {
+ }
+
+ regex_iterator
+ (
+ BidiIter begin
+ , BidiIter end
+ , basic_regex<BidiIter> const &rex
+ , regex_constants::match_flag_type flags = regex_constants::match_default
+ )
+ : impl_(new impl_type_(begin, begin, end, &rex, flags))
+ {
+ this->next_();
+ }
+
+ regex_iterator(regex_iterator<BidiIter> const &that)
+ : impl_(that.impl_) // COW
+ {
+ }
+
+ regex_iterator<BidiIter> &operator =(regex_iterator<BidiIter> const &that)
+ {
+ this->impl_ = that.impl_; // COW
+ return *this;
+ }
+
+ friend bool operator ==(regex_iterator<BidiIter> const &left, regex_iterator<BidiIter> const &right)
+ {
+ if(!left.impl_ || !right.impl_)
+ {
+ return !left.impl_ && !right.impl_;
+ }
+
+ return left.impl_->equal_to(*right.impl_);
+ }
+
+ friend bool operator !=(regex_iterator<BidiIter> const &left, regex_iterator<BidiIter> const &right)
+ {
+ return !(left == right);
+ }
+
+ value_type const &operator *() const
+ {
+ return this->impl_->what_;
+ }
+
+ value_type const *operator ->() const
+ {
+ return &this->impl_->what_;
+ }
+
+ /// If what.prefix().first != what[0].second and if the element match_prev_avail is not set in
+ /// flags then sets it. Then behaves as if by calling regex_search(what[0].second, end, what, *pre, flags),
+ /// with the following variation: in the event that the previous match found was of zero length
+ /// (what[0].length() == 0) then attempts to find a non-zero length match starting at what[0].second,
+ /// only if that fails and provided what[0].second != suffix().second does it look for a (possibly
+ /// zero length) match starting from what[0].second + 1. If no further match is found then sets
+ /// *this equal to the end of sequence iterator.
+ /// \post (*this)-\>size() == pre-\>mark_count()
+ /// \post (*this)-\>empty() == false
+ /// \post (*this)-\>prefix().first == An iterator denoting the end point of the previous match found
+ /// \post (*this)-\>prefix().last == (**this)[0].first
+ /// \post (*this)-\>prefix().matched == (*this)-\>prefix().first != (*this)-\>prefix().second
+ /// \post (*this)-\>suffix().first == (**this)[0].second
+ /// \post (*this)-\>suffix().last == end
+ /// \post (*this)-\>suffix().matched == (*this)-\>suffix().first != (*this)-\>suffix().second
+ /// \post (**this)[0].first == The starting iterator for this match.
+ /// \post (**this)[0].second == The ending iterator for this match.
+ /// \post (**this)[0].matched == true if a full match was found, and false if it was a partial match (found as a result of the match_partial flag being set).
+ /// \post (**this)[n].first == For all integers n \< (*this)-\>size(), the start of the sequence that matched sub-expression n. Alternatively, if sub-expression n did not participate in the match, then end.
+ /// \post (**this)[n].second == For all integers n \< (*this)-\>size(), the end of the sequence that matched sub-expression n. Alternatively, if sub-expression n did not participate in the match, then end.
+ /// \post (**this)[n].matched == For all integers n \< (*this)-\>size(), true if sub-expression n participated in the match, false otherwise.
+ /// \post (*this)-\>position() == The distance from the start of the original sequence being iterated, to the start of this match.
+ regex_iterator<BidiIter> &operator ++()
+ {
+ this->fork_(); // un-share the implementation
+ this->next_();
+ return *this;
+ }
+
+ regex_iterator<BidiIter> operator ++(int)
+ {
+ regex_iterator<BidiIter> tmp(*this);
+ ++*this;
+ return tmp;
+ }
+
+private:
+
+ /// INTERNAL ONLY
+ void fork_()
+ {
+ if(!this->impl_.unique())
+ {
+ this->impl_.reset
+ (
+ new impl_type_
+ (
+ this->impl_->state_.begin_
+ , this->impl_->state_.cur_
+ , this->impl_->state_.end_
+ , this->impl_->rex_
+ , this->impl_->flags_
+ , this->impl_->not_null_
+ )
+ );
+ }
+ }
+
+ /// INTERNAL ONLY
+ void next_()
+ {
+ BOOST_ASSERT(this->impl_ && this->impl_.unique());
+ if(!this->impl_->next())
+ {
+ this->impl_.reset();
+ }
+ }
+
+ shared_ptr<impl_type_> impl_;
+};
+
+}} // namespace boost::xpressive
+
+#endif
diff --git a/boost/boost/xpressive/regex_primitives.hpp b/boost/boost/xpressive/regex_primitives.hpp
new file mode 100644
index 00000000000..1a55f05d496
--- /dev/null
+++ b/boost/boost/xpressive/regex_primitives.hpp
@@ -0,0 +1,655 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file regex_primitives.hpp
+/// Contains the syntax elements for writing static regular expressions.
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_REGEX_PRIMITIVES_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_REGEX_PRIMITIVES_HPP_EAN_10_04_2005
+
+#include <climits>
+#include <boost/mpl/assert.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/xpressive/proto/proto.hpp>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/core/icase.hpp>
+#include <boost/xpressive/detail/core/action.hpp>
+#include <boost/xpressive/detail/core/matchers.hpp>
+#include <boost/xpressive/detail/static/as_xpr.hpp>
+#include <boost/xpressive/detail/static/compile.hpp>
+#include <boost/xpressive/detail/static/modifier.hpp>
+#include <boost/xpressive/detail/static/regex_operators.hpp>
+#include <boost/xpressive/detail/static/productions/productions.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+typedef assert_word_placeholder<word_boundary<true> > assert_word_boundary;
+typedef assert_word_placeholder<word_begin> assert_word_begin;
+typedef assert_word_placeholder<word_end> assert_word_end;
+
+/*
+///////////////////////////////////////////////////////////////////////////////
+/// INTERNAL ONLY
+// BOOST_XPRESSIVE_GLOBAL
+// for defining globals that neither violate the One Definition Rule nor
+// lead to undefined behavior due to global object initialization order.
+//#define BOOST_XPRESSIVE_GLOBAL(type, name, init) \
+// namespace detail \
+// { \
+// template<int Dummy> \
+// struct BOOST_PP_CAT(global_pod_, name) \
+// { \
+// static type const value; \
+// private: \
+// union type_must_be_pod \
+// { \
+// type t; \
+// char ch; \
+// } u; \
+// }; \
+// template<int Dummy> \
+// type const BOOST_PP_CAT(global_pod_, name)<Dummy>::value = init; \
+// } \
+// type const &name = detail::BOOST_PP_CAT(global_pod_, name)<0>::value
+*/
+
+} // namespace detail
+
+/// INTERNAL ONLY (for backwards compatibility)
+unsigned int const repeat_max = UINT_MAX-1;
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief For infinite repetition of a sub-expression.
+///
+/// Magic value used with the repeat\<\>() function template
+/// to specify an unbounded repeat. Use as: repeat<17, inf>('a').
+/// The equivalent in perl is /a{17,}/.
+unsigned int const inf = UINT_MAX-1;
+
+/// INTERNAL ONLY (for backwards compatibility)
+proto::op_proxy<
+ proto::unary_op<detail::epsilon_matcher, proto::noop_tag>
+> const epsilon = {};
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief Successfully matches nothing.
+///
+/// Successfully matches a zero-width sequence. nil always succeeds and
+/// never consumes any characters.
+proto::op_proxy<
+ proto::unary_op<detail::epsilon_matcher, proto::noop_tag>
+> const nil = {};
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief Matches an alpha-numeric character.
+///
+/// The regex traits are used to determine which characters are alpha-numeric.
+/// To match any character that is not alpha-numeric, use ~alnum.
+///
+/// \attention alnum is equivalent to /[[:alnum:]]/ in perl. ~alnum is equivalent
+/// to /[[:^alnum:]]/ in perl.
+proto::op_proxy<
+ proto::unary_op<detail::posix_charset_placeholder, proto::noop_tag>
+ , char const *
+> const alnum = {"alnum"};
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief Matches an alphabetic character.
+///
+/// The regex traits are used to determine which characters are alphabetic.
+/// To match any character that is not alphabetic, use ~alpha.
+///
+/// \attention alpha is equivalent to /[[:alpha:]]/ in perl. ~alpha is equivalent
+/// to /[[:^alpha:]]/ in perl.
+proto::op_proxy<
+ proto::unary_op<detail::posix_charset_placeholder, proto::noop_tag>
+ , char const *
+> const alpha = {"alpha"};
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief Matches a blank (horizonal white-space) character.
+///
+/// The regex traits are used to determine which characters are blank characters.
+/// To match any character that is not blank, use ~blank.
+///
+/// \attention blank is equivalent to /[[:blank:]]/ in perl. ~blank is equivalent
+/// to /[[:^blank:]]/ in perl.
+proto::op_proxy<
+ proto::unary_op<detail::posix_charset_placeholder, proto::noop_tag>
+ , char const *
+> const blank = {"blank"};
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief Matches a control character.
+///
+/// The regex traits are used to determine which characters are control characters.
+/// To match any character that is not a control character, use ~cntrl.
+///
+/// \attention cntrl is equivalent to /[[:cntrl:]]/ in perl. ~cntrl is equivalent
+/// to /[[:^cntrl:]]/ in perl.
+proto::op_proxy<
+ proto::unary_op<detail::posix_charset_placeholder, proto::noop_tag>
+ , char const *
+> const cntrl = {"cntrl"};
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief Matches a digit character.
+///
+/// The regex traits are used to determine which characters are digits.
+/// To match any character that is not a digit, use ~digit.
+///
+/// \attention digit is equivalent to /[[:digit:]]/ in perl. ~digit is equivalent
+/// to /[[:^digit:]]/ in perl.
+proto::op_proxy<
+ proto::unary_op<detail::posix_charset_placeholder, proto::noop_tag>
+ , char const *
+> const digit = {"digit"};
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief Matches a graph character.
+///
+/// The regex traits are used to determine which characters are graphable.
+/// To match any character that is not graphable, use ~graph.
+///
+/// \attention graph is equivalent to /[[:graph:]]/ in perl. ~graph is equivalent
+/// to /[[:^graph:]]/ in perl.
+proto::op_proxy<
+ proto::unary_op<detail::posix_charset_placeholder, proto::noop_tag>
+ , char const *
+> const graph = {"graph"};
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief Matches a lower-case character.
+///
+/// The regex traits are used to determine which characters are lower-case.
+/// To match any character that is not a lower-case character, use ~lower.
+///
+/// \attention lower is equivalent to /[[:lower:]]/ in perl. ~lower is equivalent
+/// to /[[:^lower:]]/ in perl.
+proto::op_proxy<
+ proto::unary_op<detail::posix_charset_placeholder, proto::noop_tag>
+ , char const *
+> const lower = {"lower"};
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief Matches a printable character.
+///
+/// The regex traits are used to determine which characters are printable.
+/// To match any character that is not printable, use ~print.
+///
+/// \attention print is equivalent to /[[:print:]]/ in perl. ~print is equivalent
+/// to /[[:^print:]]/ in perl.
+proto::op_proxy<
+ proto::unary_op<detail::posix_charset_placeholder, proto::noop_tag>
+ , char const *
+> const print = {"print"};
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief Matches a punctuation character.
+///
+/// The regex traits are used to determine which characters are punctuation.
+/// To match any character that is not punctuation, use ~punct.
+///
+/// \attention punct is equivalent to /[[:punct:]]/ in perl. ~punct is equivalent
+/// to /[[:^punct:]]/ in perl.
+proto::op_proxy<
+ proto::unary_op<detail::posix_charset_placeholder, proto::noop_tag>
+ , char const *
+> const punct = {"punct"};
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief Matches a space character.
+///
+/// The regex traits are used to determine which characters are space characters.
+/// To match any character that is not white-space, use ~space.
+///
+/// \attention space is equivalent to /[[:space:]]/ in perl. ~space is equivalent
+/// to /[[:^space:]]/ in perl.
+proto::op_proxy<
+ proto::unary_op<detail::posix_charset_placeholder, proto::noop_tag>
+ , char const *
+> const space = {"space"};
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief Matches an upper-case character.
+///
+/// The regex traits are used to determine which characters are upper-case.
+/// To match any character that is not upper-case, use ~upper.
+///
+/// \attention upper is equivalent to /[[:upper:]]/ in perl. ~upper is equivalent
+/// to /[[:^upper:]]/ in perl.
+proto::op_proxy<
+ proto::unary_op<detail::posix_charset_placeholder, proto::noop_tag>
+ , char const *
+> const upper = {"upper"};
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief Matches a hexadecimal digit character.
+///
+/// The regex traits are used to determine which characters are hex digits.
+/// To match any character that is not a hex digit, use ~xdigit.
+///
+/// \attention xdigit is equivalent to /[[:xdigit:]]/ in perl. ~xdigit is equivalent
+/// to /[[:^xdigit:]]/ in perl.
+proto::op_proxy<
+ proto::unary_op<detail::posix_charset_placeholder, proto::noop_tag>
+ , char const *
+> const xdigit = {"xdigit"};
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief Beginning of sequence assertion.
+///
+/// For the character sequence [begin, end), 'bos' matches the
+/// zero-width sub-sequence [begin, begin).
+proto::op_proxy<
+ proto::unary_op<detail::assert_bos_matcher, proto::noop_tag>
+> const bos = {};
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief End of sequence assertion.
+///
+/// For the character sequence [begin, end),
+/// 'eos' matches the zero-width sub-sequence [end, end).
+///
+/// \attention Unlike the perl end of sequence assertion \$, 'eos' will
+/// not match at the position [end-1, end-1) if *(end-1) is '\\n'. To
+/// get that behavior, use (!_n >> eos).
+proto::op_proxy<
+ proto::unary_op<detail::assert_eos_matcher, proto::noop_tag>
+> const eos = {};
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief Beginning of line assertion.
+///
+/// 'bol' matches the zero-width sub-sequence
+/// immediately following a logical newline sequence. The regex traits
+/// is used to determine what constitutes a logical newline sequence.
+proto::op_proxy<
+ proto::unary_op<detail::assert_bol_placeholder, proto::noop_tag>
+> const bol = {};
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief End of line assertion.
+///
+/// 'eol' matches the zero-width sub-sequence
+/// immediately preceeding a logical newline sequence. The regex traits
+/// is used to determine what constitutes a logical newline sequence.
+proto::op_proxy<
+ proto::unary_op<detail::assert_eol_placeholder, proto::noop_tag>
+> const eol = {};
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief Beginning of word assertion.
+///
+/// 'bow' matches the zero-width sub-sequence
+/// immediately following a non-word character and preceeding a word character.
+/// The regex traits are used to determine what constitutes a word character.
+proto::op_proxy<
+ proto::unary_op<detail::assert_word_begin, proto::noop_tag>
+> const bow = {};
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief End of word assertion.
+///
+/// 'eow' matches the zero-width sub-sequence
+/// immediately following a word character and preceeding a non-word character.
+/// The regex traits are used to determine what constitutes a word character.
+proto::op_proxy<
+ proto::unary_op<detail::assert_word_end, proto::noop_tag>
+> const eow = {};
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief Word boundary assertion.
+///
+/// '_b' matches the zero-width sub-sequence at the beginning or the end of a word.
+/// It is equivalent to (bow | eow). The regex traits are used to determine what
+/// constitutes a word character. To match a non-word boundary, use ~_b.
+///
+/// \attention _b is like \\b in perl. ~_b is like \\B in perl.
+proto::op_proxy<
+ proto::unary_op<detail::assert_word_boundary, proto::noop_tag>
+> const _b = {};
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief Matches a word character.
+///
+/// '_w' matches a single word character. The regex traits are used to determine which
+/// characters are word characters. Use ~_w to match a character that is not a word
+/// character.
+///
+/// \attention _w is like \\w in perl. ~_w is like \\W in perl.
+proto::op_proxy<
+ proto::unary_op<detail::posix_charset_placeholder, proto::noop_tag>
+ , char const *
+> const _w = {"w"};
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief Matches a digit character.
+///
+/// '_d' matches a single digit character. The regex traits are used to determine which
+/// characters are digits. Use ~_d to match a character that is not a digit
+/// character.
+///
+/// \attention _d is like \\d in perl. ~_d is like \\D in perl.
+proto::op_proxy<
+ proto::unary_op<detail::posix_charset_placeholder, proto::noop_tag>
+ , char const *
+> const _d = {"d"};
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief Matches a space character.
+///
+/// '_s' matches a single space character. The regex traits are used to determine which
+/// characters are space characters. Use ~_s to match a character that is not a space
+/// character.
+///
+/// \attention _s is like \\s in perl. ~_s is like \\S in perl.
+proto::op_proxy<
+ proto::unary_op<detail::posix_charset_placeholder, proto::noop_tag>
+ , char const *
+> const _s = {"s"};
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief Matches a literal newline character, '\\n'.
+///
+/// '_n' matches a single newline character, '\\n'. Use ~_n to match a character
+/// that is not a newline.
+///
+/// \attention ~_n is like '.' in perl without the /s modifier.
+proto::op_proxy<
+ proto::unary_op<detail::literal_placeholder<char>, proto::noop_tag>
+ , char
+> const _n = {'\n'};
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief Matches a logical newline sequence.
+///
+/// '_ln' matches a logical newline sequence. This can be any character in the
+/// line separator class, as determined by the regex traits, or the '\\r\\n' sequence.
+/// For the purpose of back-tracking, '\\r\\n' is treated as a unit.
+/// To match any one character that is not a logical newline, use ~_ln.
+proto::op_proxy<
+ detail::logical_newline_xpression
+> const _ln = {};
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief Matches any one character.
+///
+/// Match any character, similar to '.' in perl syntax with the /s modifier.
+/// '_' matches any one character, including the newline.
+///
+/// \attention To match any character except the newline, use ~_n
+proto::op_proxy<
+ proto::unary_op<detail::any_matcher, proto::noop_tag>
+> const _ = {};
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief Reference to the current regex object
+///
+/// Useful when constructing recursive regular expression objects. The 'self'
+/// identifier is a short-hand for the current regex object. For instance,
+/// sregex rx = '(' >> (self | nil) >> ')'; will create a regex object that
+/// matches balanced parens such as "((()))".
+proto::op_proxy<
+ proto::unary_op<detail::self_placeholder, proto::noop_tag>
+> const self = {};
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief Used to create character sets.
+///
+/// There are two ways to create character sets with the 'set' identifier. The
+/// easiest is to create a comma-separated list of the characters in the set,
+/// as in (set= 'a','b','c'). This set will match 'a', 'b', or 'c'. The other
+/// way is to define the set as an argument to the set subscript operator.
+/// For instance, set[ 'a' | range('b','c') | digit ] will match an 'a', 'b',
+/// 'c' or a digit character.
+///
+/// To complement a set, apply the '~' operator. For instance, ~(set= 'a','b','c')
+/// will match any character that is not an 'a', 'b', or 'c'.
+///
+/// Sets can be composed of other, possibly complemented, sets. For instance,
+/// set[ ~digit | ~(set= 'a','b','c') ].
+proto::op_proxy<
+ detail::set_initializer_type
+> const set = {};
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief Sub-match placeholder, like $& in Perl
+proto::op_proxy<detail::mark_tag, int> const s0 = {0};
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief Sub-match placeholder, like $1 in perl.
+///
+/// To create a sub-match, assign a sub-expression to the sub-match placeholder.
+/// For instance, (s1= _) will match any one character and remember which
+/// character was matched in the 1st sub-match. Later in the pattern, you can
+/// refer back to the sub-match. For instance, (s1= _) >> s1 will match any
+/// character, and then match the same character again.
+///
+/// After a successful regex_match() or regex_search(), the sub-match placeholders
+/// can be used to index into the match_results\<\> object to retrieve the Nth
+/// sub-match.
+proto::op_proxy<detail::mark_tag, int> const s1 = {1};
+proto::op_proxy<detail::mark_tag, int> const s2 = {2};
+proto::op_proxy<detail::mark_tag, int> const s3 = {3};
+proto::op_proxy<detail::mark_tag, int> const s4 = {4};
+proto::op_proxy<detail::mark_tag, int> const s5 = {5};
+proto::op_proxy<detail::mark_tag, int> const s6 = {6};
+proto::op_proxy<detail::mark_tag, int> const s7 = {7};
+proto::op_proxy<detail::mark_tag, int> const s8 = {8};
+proto::op_proxy<detail::mark_tag, int> const s9 = {9};
+
+// NOTE: For the purpose of xpressive's documentation, make icase() look like an
+// ordinary function. In reality, it is a function object defined in detail/icase.hpp
+// so that it can serve double-duty as regex_constants::icase, the syntax_option_type.
+// Do the same for as_xpr(), which is actually defined in detail/static/as_xpr.hpp
+#ifdef BOOST_XPRESSIVE_DOXYGEN_INVOKED
+///////////////////////////////////////////////////////////////////////////////
+/// \brief Makes a literal into a regular expression.
+///
+/// Use as_xpr() to turn a literal into a regular expression. For instance,
+/// "foo" >> "bar" will not compile because both operands to the right-shift
+/// operator are const char*, and no such operator exists. Use as_xpr("foo") >> "bar"
+/// instead.
+///
+/// You can use as_xpr() with character literals in addition to string literals.
+/// For instance, as_xpr('a') will match an 'a'. You can also complement a
+/// character literal, as with ~as_xpr('a'). This will match any one character
+/// that is not an 'a'.
+template<typename Literal>
+inline typename detail::as_xpr_type<Literal>::const_reference
+as_xpr(Literal const &literal)
+{
+ return detail::as_xpr_type<Literal>::call(xpr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief Makes a sub-expression case-insensitive.
+///
+/// Use icase() to make a sub-expression case-insensitive. For instance,
+/// "foo" >> icase(set['b'] >> "ar") will match "foo" exactly followed by
+/// "bar" irrespective of case.
+template<typename Xpr>
+inline proto::binary_op<detail::icase_modifier, typename detail::as_xpr_type<Xpr>::type, modifier_tag> const
+icase(Xpr const &xpr)
+{
+ detail::icase_modifier mod;
+ return proto::make_op<modifier_tag>(mod, as_xpr(xpr));
+}
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief Embed a regex object by reference.
+///
+/// \param rex The basic_regex object to embed by reference.
+template<typename BidiIter>
+inline proto::unary_op<detail::regex_placeholder<BidiIter, true>, proto::noop_tag> const
+by_ref(basic_regex<BidiIter> const &rex)
+{
+ typedef detail::core_access<BidiIter> access;
+ shared_ptr<detail::regex_impl<BidiIter> > impl = access::get_regex_impl(rex);
+ return proto::noop(detail::regex_placeholder<BidiIter, true>(impl));
+}
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief Match a range of characters.
+///
+/// Match any character in the range [ch_min, ch_max].
+///
+/// \param ch_min The lower end of the range to match.
+/// \param ch_max The upper end of the range to match.
+template<typename Char>
+inline proto::unary_op<detail::range_placeholder<Char>, proto::noop_tag> const
+range(Char ch_min, Char ch_max)
+{
+ return proto::noop(detail::range_placeholder<Char>(ch_min, ch_max));
+}
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief Make a sub-expression optional. Equivalent to !as_xpr(xpr).
+///
+/// \param xpr The sub-expression to make optional.
+template<typename Xpr>
+inline proto::unary_op
+<
+ typename detail::as_xpr_type<Xpr>::type
+ , proto::logical_not_tag
+> const
+optional(Xpr const &xpr)
+{
+ return !as_xpr(xpr);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief Repeat a sub-expression multiple times.
+///
+/// There are two forms of the repeat\<\>() function template. To match a
+/// sub-expression N times, use repeat\<N\>(xpr). To match a sub-expression
+/// from M to N times, use repeat\<M,N\>(xpr).
+///
+/// The repeat\<\>() function creates a greedy quantifier. To make the quantifier
+/// non-greedy, apply the unary minus operator, as in -repeat\<M,N\>(xpr).
+///
+/// \param xpr The sub-expression to repeat.
+template<unsigned int Min, unsigned int Max, typename Xpr>
+inline proto::unary_op
+<
+ typename detail::as_xpr_type<Xpr>::type
+ , detail::generic_quant_tag<Min, Max>
+> const
+repeat(Xpr const &xpr)
+{
+ return proto::make_op<detail::generic_quant_tag<Min, Max> >(as_xpr(xpr));
+}
+
+/// \overload
+template<unsigned int Count, typename Xpr2>
+inline proto::unary_op
+<
+ typename detail::as_xpr_type<Xpr2>::type
+ , detail::generic_quant_tag<Count, Count>
+> const
+repeat(Xpr2 const &xpr)
+{
+ return proto::make_op<detail::generic_quant_tag<Count, Count> >(as_xpr(xpr));
+}
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief Create an independent sub-expression.
+///
+/// Turn off back-tracking for a sub-expression. Any branches or repeats within
+/// the sub-expression will match only one way, and no other alternatives are
+/// tried.
+///
+/// \attention keep(xpr) is equivalent to the perl (?>...) extension.
+///
+/// \param xpr The sub-expression to modify.
+template<typename Xpr>
+inline proto::unary_op
+<
+ typename detail::as_xpr_type<Xpr>::type
+ , detail::keeper_tag
+> const
+keep(Xpr const &xpr)
+{
+ return proto::make_op<detail::keeper_tag>(as_xpr(xpr));
+}
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief Look-ahead assertion.
+///
+/// before(xpr) succeeds if the xpr sub-expression would match at the current
+/// position in the sequence, but xpr is not included in the match. For instance,
+/// before("foo") succeeds if we are before a "foo". Look-ahead assertions can be
+/// negated with the bit-compliment operator.
+///
+/// \attention before(xpr) is equivalent to the perl (?=...) extension.
+/// ~before(xpr) is a negative look-ahead assertion, equivalent to the
+/// perl (?!...) extension.
+///
+/// \param xpr The sub-expression to put in the look-ahead assertion.
+template<typename Xpr>
+inline proto::unary_op
+<
+ typename detail::as_xpr_type<Xpr>::type
+ , detail::lookahead_tag<true>
+> const
+before(Xpr const &xpr)
+{
+ return proto::make_op<detail::lookahead_tag<true> >(as_xpr(xpr));
+}
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief Look-behind assertion.
+///
+/// after(xpr) succeeds if the xpr sub-expression would match at the current
+/// position minus N in the sequence, where N is the width of xpr. xpr is not included in
+/// the match. For instance, after("foo") succeeds if we are after a "foo". Look-behind
+/// assertions can be negated with the bit-complement operator.
+///
+/// \attention after(xpr) is equivalent to the perl (?<=...) extension.
+/// ~after(xpr) is a negative look-behind assertion, equivalent to the
+/// perl (?<!...) extension.
+///
+/// \param xpr The sub-expression to put in the look-ahead assertion.
+///
+/// \pre xpr cannot match a variable number of characters.
+template<typename Xpr>
+inline proto::unary_op
+<
+ typename detail::as_xpr_type<Xpr>::type
+ , detail::lookbehind_tag<true>
+> const
+after(Xpr const &xpr)
+{
+ return proto::make_op<detail::lookbehind_tag<true> >(as_xpr(xpr));
+}
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief Specify a regex traits or a std::locale.
+///
+/// imbue() instructs the regex engine to use the specified traits or locale
+/// when matching the regex. The entire expression must use the same traits/locale.
+/// For instance, the following specifies a locale for use with a regex:
+/// std::locale loc;
+/// sregex rx = imbue(loc)(+digit);
+///
+/// \param loc The std::locale or regex traits object.
+template<typename Locale>
+inline detail::modifier_op<detail::locale_modifier<Locale> > const
+imbue(Locale const &loc)
+{
+ detail::modifier_op<detail::locale_modifier<Locale> > mod =
+ {
+ detail::locale_modifier<Locale>(loc)
+ , regex_constants::ECMAScript
+ };
+ return mod;
+}
+
+}} // namespace boost::xpressive
+
+#endif
diff --git a/boost/boost/xpressive/regex_token_iterator.hpp b/boost/boost/xpressive/regex_token_iterator.hpp
new file mode 100644
index 00000000000..5966c1f0c6f
--- /dev/null
+++ b/boost/boost/xpressive/regex_token_iterator.hpp
@@ -0,0 +1,298 @@
+ ///////////////////////////////////////////////////////////////////////////////
+/// \file regex_token_iterator.hpp
+/// Contains the definition of regex_token_iterator, and STL-compatible iterator
+/// for tokenizing a string using a regular expression.
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_REGEX_TOKEN_ITERATOR_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_REGEX_TOKEN_ITERATOR_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <vector>
+#include <boost/mpl/assert.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/xpressive/regex_iterator.hpp>
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+//////////////////////////////////////////////////////////////////////////
+// regex_token_iterator_impl
+//
+template<typename BidiIter>
+struct regex_token_iterator_impl
+ : private noncopyable
+{
+ typedef typename iterator_value<BidiIter>::type char_type;
+
+ regex_token_iterator_impl
+ (
+ BidiIter begin
+ , BidiIter cur
+ , BidiIter end
+ , basic_regex<BidiIter> const *rex
+ , regex_constants::match_flag_type flags = regex_constants::match_default
+ , std::vector<int> subs = std::vector<int>(1, 0)
+ , int n = -2
+ , bool not_null = false
+ )
+ : iter_(begin, cur, end, rex, flags, not_null)
+ , result_()
+ , n_((-2 == n) ? static_cast<int>(subs.size()) - 1 : n)
+ , subs_()
+ {
+ this->subs_.swap(subs);
+ }
+
+ bool next()
+ {
+ if(-1 != this->n_)
+ {
+ BidiIter cur = this->iter_.state_.cur_;
+ if(++this->n_ != static_cast<int>(this->subs_.size()))
+ {
+ this->result_ = (-1 == this->subs_[ this->n_ ])
+ ? this->iter_.what_.prefix().str()
+ : this->iter_.what_[ this->subs_[ this->n_ ] ].str();
+ return true;
+ }
+ else if(this->iter_.next())
+ {
+ this->n_ = 0;
+ this->result_ = (-1 == this->subs_[ this->n_ ])
+ ? this->iter_.what_.prefix().str()
+ : this->iter_.what_[ this->subs_[ this->n_ ] ].str();
+ return true;
+ }
+ else if(cur != this->iter_.state_.end_ && -1 == this->subs_[ 0 ])
+ {
+ this->n_ = -1;
+ this->result_.assign(cur, this->iter_.state_.end_);
+ return true;
+ }
+ }
+
+ this->n_ = -1;
+ return false;
+ }
+
+ bool equal_to(regex_token_iterator_impl<BidiIter> const &that) const
+ {
+ return this->iter_.equal_to(that.iter_) && this->n_ == that.n_;
+ }
+
+ regex_iterator_impl<BidiIter> iter_;
+ std::basic_string<char_type> result_;
+ int n_;
+ std::vector<int> subs_;
+};
+
+inline int get_mark_number(int i)
+{
+ return i;
+}
+
+inline std::vector<int> to_vector(int sub_match)
+{
+ return std::vector<int>(1, sub_match);
+}
+
+inline std::vector<int> const &to_vector(std::vector<int> const &sub_matches)
+{
+ return sub_matches;
+}
+
+template<typename Int, std::size_t Size>
+inline std::vector<int> to_vector(Int const (&sub_matches)[ Size ])
+{
+ // so that people can specify sub-match indices inline with
+ // string literals, like "\1\2\3", leave off the trailing '\0'
+ std::size_t const size = Size - is_same<Int, char>::value;
+ std::vector<int> vect(size);
+ for(std::size_t i = 0; i < size; ++i)
+ {
+ vect[i] = get_mark_number(sub_matches[i]);
+ }
+ return vect;
+}
+
+template<typename Int>
+inline std::vector<int> to_vector(std::vector<Int> const &sub_matches)
+{
+ BOOST_MPL_ASSERT((is_convertible<Int, int>));
+ return std::vector<int>(sub_matches.begin(), sub_matches.end());
+}
+
+} // namespace detail
+
+//////////////////////////////////////////////////////////////////////////
+// regex_token_iterator
+//
+template<typename BidiIter>
+struct regex_token_iterator
+{
+ typedef basic_regex<BidiIter> regex_type;
+ typedef typename iterator_value<BidiIter>::type char_type;
+ typedef std::basic_string<char_type> value_type;
+ typedef typename iterator_difference<BidiIter>::type difference_type;
+ typedef value_type const *pointer;
+ typedef value_type const &reference;
+ typedef std::forward_iterator_tag iterator_category;
+
+ /// INTERNAL ONLY
+ typedef detail::regex_token_iterator_impl<BidiIter> impl_type_;
+
+ regex_token_iterator()
+ : impl_()
+ {
+ }
+
+ regex_token_iterator
+ (
+ BidiIter begin
+ , BidiIter end
+ , basic_regex<BidiIter> const &rex
+ )
+ : impl_(new impl_type_(begin, begin, end, &rex))
+ {
+ this->next_();
+ }
+
+ template<typename SubMatches>
+ regex_token_iterator
+ (
+ BidiIter begin
+ , BidiIter end
+ , basic_regex<BidiIter> const &rex
+ , SubMatches const &sub_matches
+ , regex_constants::match_flag_type flags = regex_constants::match_default
+ )
+ : impl_(new impl_type_(begin, begin, end, &rex, flags, detail::to_vector(sub_matches)))
+ {
+ this->next_();
+ }
+
+ regex_token_iterator(regex_token_iterator<BidiIter> const &that)
+ : impl_(that.impl_) // COW
+ {
+ }
+
+ regex_token_iterator<BidiIter> &operator =(regex_token_iterator<BidiIter> const &that)
+ {
+ this->impl_ = that.impl_; // COW
+ return *this;
+ }
+
+ friend bool operator ==(regex_token_iterator<BidiIter> const &left, regex_token_iterator<BidiIter> const &right)
+ {
+ if(!left.impl_ || !right.impl_)
+ {
+ return !left.impl_ && !right.impl_;
+ }
+
+ return left.impl_->equal_to(*right.impl_);
+ }
+
+ friend bool operator !=(regex_token_iterator<BidiIter> const &left, regex_token_iterator<BidiIter> const &right)
+ {
+ return !(left == right);
+ }
+
+ value_type const &operator *() const
+ {
+ return this->impl_->result_;
+ }
+
+ value_type const *operator ->() const
+ {
+ return &this->impl_->result_;
+ }
+
+ /// If N == -1 then sets *this equal to the end of sequence iterator.
+ /// Otherwise if N+1 \< subs.size(), then increments N and sets result equal to
+ /// ((subs[N] == -1) ? value_type(what.prefix().str()) : value_type(what[subs[N]].str())).
+ /// Otherwise if what.prefix().first != what[0].second and if the element match_prev_avail is
+ /// not set in flags then sets it. Then locates the next match as if by calling
+ /// regex_search(what[0].second, end, what, *pre, flags), with the following variation:
+ /// in the event that the previous match found was of zero length (what[0].length() == 0)
+ /// then attempts to find a non-zero length match starting at what[0].second, only if that
+ /// fails and provided what[0].second != suffix().second does it look for a (possibly zero
+ /// length) match starting from what[0].second + 1. If such a match is found then sets N
+ /// equal to zero, and sets result equal to
+ /// ((subs[N] == -1) ? value_type(what.prefix().str()) : value_type(what[subs[N]].str())).
+ /// Otherwise if no further matches were found, then let last_end be the endpoint of the last
+ /// match that was found. Then if last_end != end and subs[0] == -1 sets N equal to -1 and
+ /// sets result equal to value_type(last_end, end). Otherwise sets *this equal to the end
+ /// of sequence iterator.
+ regex_token_iterator<BidiIter> &operator ++()
+ {
+ this->fork_(); // un-share the implementation
+ this->next_();
+ return *this;
+ }
+
+ regex_token_iterator<BidiIter> operator ++(int)
+ {
+ regex_token_iterator<BidiIter> tmp(*this);
+ ++*this;
+ return tmp;
+ }
+
+private:
+
+ /// INTERNAL ONLY
+ void fork_()
+ {
+ if(!this->impl_.unique())
+ {
+ shared_ptr<impl_type_> clone
+ (
+ new impl_type_
+ (
+ this->impl_->iter_.state_.begin_
+ , this->impl_->iter_.state_.cur_
+ , this->impl_->iter_.state_.end_
+ , this->impl_->iter_.rex_
+ , this->impl_->iter_.flags_
+ , this->impl_->subs_
+ , this->impl_->n_
+ , this->impl_->iter_.not_null_
+ )
+ );
+
+ // only copy the match_results struct if we have to. Note: if the next call
+ // to impl_->next() will return false or call regex_search, we don't need to
+ // copy the match_results struct.
+ if(-1 != this->impl_->n_ && this->impl_->n_ + 1 != static_cast<int>(this->impl_->subs_.size()))
+ {
+ clone->iter_.what_ = this->impl_->iter_.what_;
+ }
+
+ this->impl_.swap(clone);
+ }
+ }
+
+ /// INTERNAL ONLY
+ void next_()
+ {
+ BOOST_ASSERT(this->impl_ && this->impl_.unique());
+ if(!this->impl_->next())
+ {
+ this->impl_.reset();
+ }
+ }
+
+ shared_ptr<impl_type_> impl_;
+};
+
+}} // namespace boost::xpressive
+
+#endif
diff --git a/boost/boost/xpressive/regex_traits.hpp b/boost/boost/xpressive/regex_traits.hpp
new file mode 100644
index 00000000000..72d8407a07a
--- /dev/null
+++ b/boost/boost/xpressive/regex_traits.hpp
@@ -0,0 +1,84 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file regex_traits.hpp
+/// Includes the C regex traits or the CPP regex traits header file depending on the
+/// BOOST_XPRESSIVE_USE_C_TRAITS macro.
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_REGEX_TRAITS_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_REGEX_TRAITS_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/xpressive/detail/detail_fwd.hpp>
+
+#ifdef BOOST_XPRESSIVE_USE_C_TRAITS
+# include <boost/xpressive/traits/c_regex_traits.hpp>
+#else
+# include <boost/xpressive/traits/cpp_regex_traits.hpp>
+#endif
+
+namespace boost { namespace xpressive
+{
+
+///////////////////////////////////////////////////////////////////////////////
+// regex_traits_version_1_tag
+/// Tag used to denote that a traits class conforms to the version 1 traits
+/// interface.
+struct regex_traits_version_1_tag
+{
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// regex_traits_version_1_case_fold_tag
+/// Tag used to denote that a traits class has the fold_case member function.
+struct regex_traits_version_1_case_fold_tag
+ : regex_traits_version_1_tag
+{
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// regex_traits
+/// Thin wrapper around the default regex_traits implementation, either
+/// cpp_regex_traits or c_regex_traits
+///
+template<typename Char, typename Impl>
+struct regex_traits
+ : Impl
+{
+ typedef typename Impl::locale_type locale_type;
+
+ regex_traits()
+ : Impl()
+ {
+ }
+
+ explicit regex_traits(locale_type const &loc)
+ : Impl(loc)
+ {
+ }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// lookup_classname
+/// INTERNAL ONLY
+template<typename Traits, std::size_t N>
+inline typename Traits::char_class_type
+lookup_classname(Traits const &traits, char const (&cname)[N], bool icase)
+{
+ typename Traits::char_type name[N] = {0};
+ for(std::size_t j = 0; j < N-1; ++j)
+ {
+ name[j] = traits.widen(cname[j]);
+ }
+ return traits.lookup_classname(name, name + N - 1, icase);
+}
+
+}}
+
+#endif
diff --git a/boost/boost/xpressive/sub_match.hpp b/boost/boost/xpressive/sub_match.hpp
new file mode 100644
index 00000000000..5ee69a70baa
--- /dev/null
+++ b/boost/boost/xpressive/sub_match.hpp
@@ -0,0 +1,331 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file sub_match.hpp
+/// Contains the definition of the class template sub_match\<\>
+/// and associated helper functions
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_SUB_MATCH_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_SUB_MATCH_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <iosfwd>
+#include <string>
+#include <utility>
+#include <iterator>
+#include <algorithm>
+#include <boost/iterator/iterator_traits.hpp>
+
+//{{AFX_DOC_COMMENT
+///////////////////////////////////////////////////////////////////////////////
+// This is a hack to get Doxygen to show the inheritance relation between
+// sub_match<T> and std::pair<T,T>.
+#ifdef BOOST_XPRESSIVE_DOXYGEN_INVOKED
+/// INTERNAL ONLY
+namespace std
+{
+ /// INTERNAL ONLY
+ template<typename, typename> struct pair {};
+}
+#endif
+//}}AFX_DOC_COMMENT
+
+namespace boost { namespace xpressive
+{
+
+///////////////////////////////////////////////////////////////////////////////
+// sub_match
+//
+/// \brief Class template sub_match denotes the sequence of characters matched by a particular marked sub-expression.
+///
+/// When the marked sub-expression denoted by an object of type sub_match\<\> participated in a
+/// regular expression match then member matched evaluates to true, and members first and second
+/// denote the range of characters [first,second) which formed that match. Otherwise matched is false,
+/// and members first and second contained undefined values.
+///
+/// If an object of type sub_match\<\> represents sub-expression 0 - that is to say the whole match -
+/// then member matched is always true, unless a partial match was obtained as a result of the flag
+/// match_partial being passed to a regular expression algorithm, in which case member matched is
+/// false, and members first and second represent the character range that formed the partial match.
+template<typename BidiIter>
+struct sub_match
+ : std::pair<BidiIter, BidiIter>
+{
+private:
+ struct dummy { int i_; };
+ typedef int dummy::*bool_type;
+
+public:
+ typedef typename iterator_value<BidiIter>::type value_type;
+ typedef typename iterator_difference<BidiIter>::type difference_type;
+ typedef std::basic_string<value_type> string_type;
+ typedef BidiIter iterator;
+
+ explicit sub_match(BidiIter first = BidiIter(), BidiIter second = BidiIter(), bool matched_ = false)
+ : std::pair<BidiIter, BidiIter>(first, second)
+ , matched(matched_)
+ {
+ }
+
+ string_type str() const
+ {
+ return this->matched ? string_type(this->first, this->second) : string_type();
+ }
+
+ operator string_type() const
+ {
+ return this->matched ? string_type(this->first, this->second) : string_type();
+ }
+
+ difference_type length() const
+ {
+ return this->matched ? std::distance(this->first, this->second) : 0;
+ }
+
+ operator bool_type() const
+ {
+ return this->matched ? &dummy::i_ : 0;
+ }
+
+ bool operator !() const
+ {
+ return !this->matched;
+ }
+
+ /// \brief Performs a lexicographic string comparison
+ /// \param str the string against which to compare
+ /// \return the results of (*this).str().compare(str)
+ int compare(string_type const &str) const
+ {
+ return this->str().compare(str);
+ }
+
+ /// \overload
+ int compare(sub_match const &sub) const
+ {
+ return this->str().compare(sub.str());
+ }
+
+ /// \overload
+ int compare(value_type const *ptr) const
+ {
+ return this->str().compare(ptr);
+ }
+
+ /// \brief true if this sub-match participated in the full match.
+ bool matched;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief insertion operator for sending sub-matches to ostreams
+/// \param sout output stream.
+/// \param sub sub_match object to be written to the stream.
+/// \return sout \<\< sub.str()
+template<typename BidiIter, typename Char, typename Traits>
+inline std::basic_ostream<Char, Traits> &operator <<
+(
+ std::basic_ostream<Char, Traits> &sout
+ , sub_match<BidiIter> const &sub
+)
+{
+ typedef typename iterator_value<BidiIter>::type char_type;
+ if(sub.matched)
+ {
+ std::ostream_iterator<char_type, Char, Traits> iout(sout);
+ std::copy(sub.first, sub.second, iout);
+ }
+ return sout;
+}
+
+
+// BUGBUG make these more efficient
+
+template<typename BidiIter>
+bool operator == (sub_match<BidiIter> const &lhs, sub_match<BidiIter> const &rhs)
+{
+ return lhs.compare(rhs) == 0;
+}
+
+template<typename BidiIter>
+bool operator != (sub_match<BidiIter> const &lhs, sub_match<BidiIter> const &rhs)
+{
+ return lhs.compare(rhs) != 0;
+}
+
+template<typename BidiIter>
+bool operator < (sub_match<BidiIter> const &lhs, sub_match<BidiIter> const &rhs)
+{
+ return lhs.compare(rhs) < 0;
+}
+
+template<typename BidiIter>
+bool operator <= (sub_match<BidiIter> const &lhs, sub_match<BidiIter> const &rhs)
+{
+ return lhs.compare(rhs) <= 0;
+}
+
+template<typename BidiIter>
+bool operator >= (sub_match<BidiIter> const &lhs, sub_match<BidiIter> const &rhs)
+{
+ return lhs.compare(rhs)>= 0;
+}
+
+template<typename BidiIter>
+bool operator> (sub_match<BidiIter> const &lhs, sub_match<BidiIter> const &rhs)
+{
+ return lhs.compare(rhs)> 0;
+}
+
+template<typename BidiIter>
+bool operator == (typename iterator_value<BidiIter>::type const *lhs, sub_match<BidiIter> const &rhs)
+{
+ return lhs == rhs.str();
+}
+
+template<typename BidiIter>
+bool operator != (typename iterator_value<BidiIter>::type const *lhs, sub_match<BidiIter> const &rhs)
+{
+ return lhs != rhs.str();
+}
+
+template<typename BidiIter>
+bool operator < (typename iterator_value<BidiIter>::type const *lhs, sub_match<BidiIter> const &rhs)
+{
+ return lhs < rhs.str();
+}
+
+template<typename BidiIter>
+bool operator> (typename iterator_value<BidiIter>::type const *lhs, sub_match<BidiIter> const &rhs)
+{
+ return lhs> rhs.str();
+}
+
+template<typename BidiIter>
+bool operator >= (typename iterator_value<BidiIter>::type const *lhs, sub_match<BidiIter> const &rhs)
+{
+ return lhs >= rhs.str();
+}
+
+template<typename BidiIter>
+bool operator <= (typename iterator_value<BidiIter>::type const *lhs, sub_match<BidiIter> const &rhs)
+{
+ return lhs <= rhs.str();
+}
+
+template<typename BidiIter>
+bool operator == (sub_match<BidiIter> const &lhs, typename iterator_value<BidiIter>::type const *rhs)
+{
+ return lhs.str() == rhs;
+}
+
+template<typename BidiIter>
+bool operator != (sub_match<BidiIter> const &lhs, typename iterator_value<BidiIter>::type const *rhs)
+{
+ return lhs.str() != rhs;
+}
+
+template<typename BidiIter>
+bool operator < (sub_match<BidiIter> const &lhs, typename iterator_value<BidiIter>::type const *rhs)
+{
+ return lhs.str() < rhs;
+}
+
+template<typename BidiIter>
+bool operator> (sub_match<BidiIter> const &lhs, typename iterator_value<BidiIter>::type const *rhs)
+{
+ return lhs.str()> rhs;
+}
+
+template<typename BidiIter>
+bool operator >= (sub_match<BidiIter> const &lhs, typename iterator_value<BidiIter>::type const *rhs)
+{
+ return lhs.str()>= rhs;
+}
+
+template<typename BidiIter>
+bool operator <= (sub_match<BidiIter> const &lhs, typename iterator_value<BidiIter>::type const *rhs)
+{
+ return lhs.str() <= rhs;
+}
+
+template<typename BidiIter>
+bool operator == (typename iterator_value<BidiIter>::type const &lhs, sub_match<BidiIter> const &rhs)
+{
+ return lhs == rhs.str();
+}
+
+template<typename BidiIter>
+bool operator != (typename iterator_value<BidiIter>::type const &lhs, sub_match<BidiIter> const &rhs)
+{
+ return lhs != rhs.str();
+}
+
+template<typename BidiIter>
+bool operator < (typename iterator_value<BidiIter>::type const &lhs, sub_match<BidiIter> const &rhs)
+{
+ return lhs < rhs.str();
+}
+
+template<typename BidiIter>
+bool operator> (typename iterator_value<BidiIter>::type const &lhs, sub_match<BidiIter> const &rhs)
+{
+ return lhs> rhs.str();
+}
+
+template<typename BidiIter>
+bool operator >= (typename iterator_value<BidiIter>::type const &lhs, sub_match<BidiIter> const &rhs)
+{
+ return lhs >= rhs.str();
+}
+
+template<typename BidiIter>
+bool operator <= (typename iterator_value<BidiIter>::type const &lhs, sub_match<BidiIter> const &rhs)
+{
+ return lhs <= rhs.str();
+}
+
+template<typename BidiIter>
+bool operator == (sub_match<BidiIter> const &lhs, typename iterator_value<BidiIter>::type const &rhs)
+{
+ return lhs.str() == rhs;
+}
+
+template<typename BidiIter>
+bool operator != (sub_match<BidiIter> const &lhs, typename iterator_value<BidiIter>::type const &rhs)
+{
+ return lhs.str() != rhs;
+}
+
+template<typename BidiIter>
+bool operator < (sub_match<BidiIter> const &lhs, typename iterator_value<BidiIter>::type const &rhs)
+{
+ return lhs.str() < rhs;
+}
+
+template<typename BidiIter>
+bool operator> (sub_match<BidiIter> const &lhs, typename iterator_value<BidiIter>::type const &rhs)
+{
+ return lhs.str()> rhs;
+}
+
+template<typename BidiIter>
+bool operator >= (sub_match<BidiIter> const &lhs, typename iterator_value<BidiIter>::type const &rhs)
+{
+ return lhs.str()>= rhs;
+}
+
+template<typename BidiIter>
+bool operator <= (sub_match<BidiIter> const &lhs, typename iterator_value<BidiIter>::type const &rhs)
+{
+ return lhs.str() <= rhs;
+}
+
+}} // namespace boost::xpressive
+
+#endif
diff --git a/boost/boost/xpressive/traits/c_regex_traits.hpp b/boost/boost/xpressive/traits/c_regex_traits.hpp
new file mode 100644
index 00000000000..de8675d69c0
--- /dev/null
+++ b/boost/boost/xpressive/traits/c_regex_traits.hpp
@@ -0,0 +1,366 @@
+//////////////////////////////////////////////////////////////////////////////
+/// \file c_regex_traits.hpp
+/// Contains the definition of the c_regex_traits\<\> template, which is a
+/// wrapper for the C locale functions that can be used to customize the
+/// behavior of static and dynamic regexes.
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_TRAITS_C_REGEX_TRAITS_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_TRAITS_C_REGEX_TRAITS_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp>
+#include <boost/assert.hpp>
+#include <boost/xpressive/traits/detail/c_ctype.hpp>
+
+namespace boost { namespace xpressive
+{
+
+namespace detail
+{
+ ///////////////////////////////////////////////////////////////////////////////
+ // empty_locale
+ struct empty_locale
+ {
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // c_regex_traits_base
+ template<typename Char, std::size_t SizeOfChar = sizeof(Char)>
+ struct c_regex_traits_base
+ {
+ protected:
+ template<typename Traits>
+ void imbue(Traits const &tr)
+ {
+ }
+ };
+
+ template<typename Char>
+ struct c_regex_traits_base<Char, 1>
+ {
+ protected:
+ template<typename Traits>
+ static void imbue(Traits const &)
+ {
+ }
+ };
+
+ #ifndef BOOST_XPRESSIVE_NO_WREGEX
+ template<std::size_t SizeOfChar>
+ struct c_regex_traits_base<wchar_t, SizeOfChar>
+ {
+ protected:
+ template<typename Traits>
+ static void imbue(Traits const &)
+ {
+ }
+ };
+ #endif
+
+ template<typename Char>
+ Char c_tolower(Char);
+
+ template<typename Char>
+ Char c_toupper(Char);
+
+ template<>
+ inline char c_tolower(char ch)
+ {
+ using namespace std;
+ return tolower(static_cast<unsigned char>(ch));
+ }
+
+ template<>
+ inline char c_toupper(char ch)
+ {
+ using namespace std;
+ return toupper(static_cast<unsigned char>(ch));
+ }
+
+ #ifndef BOOST_XPRESSIVE_NO_WREGEX
+ template<>
+ inline wchar_t c_tolower(wchar_t ch)
+ {
+ using namespace std;
+ return towlower(ch);
+ }
+
+ template<>
+ inline wchar_t c_toupper(wchar_t ch)
+ {
+ using namespace std;
+ return towupper(ch);
+ }
+ #endif
+
+} // namespace detail
+
+///////////////////////////////////////////////////////////////////////////////
+// regex_traits_version_1_tag
+//
+struct regex_traits_version_1_tag;
+
+///////////////////////////////////////////////////////////////////////////////
+// c_regex_traits
+//
+/// \brief Encapsaulates the standard C locale functions for use by the
+/// basic_regex\<\> class template.
+template<typename Char>
+struct c_regex_traits
+ : detail::c_regex_traits_base<Char>
+{
+ typedef Char char_type;
+ typedef std::basic_string<char_type> string_type;
+ typedef detail::empty_locale locale_type;
+ typedef typename detail::char_class_impl<Char>::char_class_type char_class_type;
+ typedef regex_traits_version_1_tag version_tag;
+ typedef detail::c_regex_traits_base<Char> base_type;
+
+ /// Initialize a c_regex_traits object to use the global C locale.
+ ///
+ c_regex_traits(locale_type const &loc = locale_type())
+ : base_type()
+ {
+ this->imbue(loc);
+ }
+
+ /// Checks two c_regex_traits objects for equality
+ ///
+ /// \return true.
+ bool operator ==(c_regex_traits<char_type> const &that) const
+ {
+ return true;
+ }
+
+ /// Checks two c_regex_traits objects for inequality
+ ///
+ /// \return false.
+ bool operator !=(c_regex_traits<char_type> const &that) const
+ {
+ return false;
+ }
+
+ /// Convert a char to a Char
+ ///
+ /// \param ch The source character.
+ /// \return ch if Char is char, std::btowc(ch) if Char is wchar_t.
+ static char_type widen(char ch);
+
+ /// Returns a hash value for a Char in the range [0, UCHAR_MAX]
+ ///
+ /// \param ch The source character.
+ /// \return a value between 0 and UCHAR_MAX, inclusive.
+ static unsigned char hash(char_type ch)
+ {
+ return static_cast<unsigned char>(std::char_traits<Char>::to_int_type(ch));
+ }
+
+ /// No-op
+ ///
+ /// \param ch The source character.
+ /// \return ch
+ static char_type translate(char_type ch)
+ {
+ return ch;
+ }
+
+ /// Converts a character to lower-case using the current global C locale.
+ ///
+ /// \param ch The source character.
+ /// \return std::tolower(ch) if Char is char, std::towlower(ch) if Char is wchar_t.
+ static char_type translate_nocase(char_type ch)
+ {
+ return detail::c_tolower(ch);
+ }
+
+ /// Checks to see if a character is within a character range.
+ ///
+ /// \param first The bottom of the range, inclusive.
+ /// \param last The top of the range, inclusive.
+ /// \param ch The source character.
+ /// \return first <= ch && ch <= last.
+ static bool in_range(char_type first, char_type last, char_type ch)
+ {
+ return first <= ch && ch <= last;
+ }
+
+ /// Checks to see if a character is within a character range, irregardless of case.
+ ///
+ /// \param first The bottom of the range, inclusive.
+ /// \param last The top of the range, inclusive.
+ /// \param ch The source character.
+ /// \return in_range(first, last, ch) || in_range(first, last, tolower(ch)) || in_range(first,
+ /// last, toupper(ch))
+ /// \attention The default implementation doesn't do proper Unicode
+ /// case folding, but this is the best we can do with the standard
+ /// C locale functions.
+ static bool in_range_nocase(char_type first, char_type last, char_type ch)
+ {
+ return c_regex_traits::in_range(first, last, ch)
+ || c_regex_traits::in_range(first, last, detail::c_tolower(ch))
+ || c_regex_traits::in_range(first, last, detail::c_toupper(ch));
+ }
+
+ /// Returns a sort key for the character sequence designated by the iterator range [F1, F2)
+ /// such that if the character sequence [G1, G2) sorts before the character sequence [H1, H2)
+ /// then v.transform(G1, G2) < v.transform(H1, H2).
+ ///
+ /// \attention Not used in xpressive 1.0
+ template<typename FwdIter>
+ static string_type transform(FwdIter begin, FwdIter end)
+ {
+ BOOST_ASSERT(false); // BUGBUG implement me
+ }
+
+ /// Returns a sort key for the character sequence designated by the iterator range [F1, F2)
+ /// such that if the character sequence [G1, G2) sorts before the character sequence [H1, H2)
+ /// when character case is not considered then
+ /// v.transform_primary(G1, G2) < v.transform_primary(H1, H2).
+ ///
+ /// \attention Not used in xpressive 1.0
+ template<typename FwdIter>
+ static string_type transform_primary(FwdIter begin, FwdIter end)
+ {
+ BOOST_ASSERT(false); // BUGBUG implement me
+ }
+
+ /// Returns a sequence of characters that represents the collating element
+ /// consisting of the character sequence designated by the iterator range [F1, F2).
+ /// Returns an empty string if the character sequence is not a valid collating element.
+ ///
+ /// \attention Not used in xpressive 1.0
+ template<typename FwdIter>
+ static string_type lookup_collatename(FwdIter begin, FwdIter end)
+ {
+ BOOST_ASSERT(false); // BUGBUG implement me
+ }
+
+ /// For the character class name represented by the specified character sequence,
+ /// return the corresponding bitmask representation.
+ ///
+ /// \param begin A forward iterator to the start of the character sequence representing
+ /// the name of the character class.
+ /// \param end The end of the character sequence.
+ /// \param icase Specifies whether the returned bitmask should represent the case-insensitive
+ /// version of the character class.
+ /// \return A bitmask representing the character class.
+ template<typename FwdIter>
+ static char_class_type lookup_classname(FwdIter begin, FwdIter end, bool icase)
+ {
+ return detail::char_class_impl<char_type>::lookup_classname(begin, end, icase);
+ }
+
+ /// Tests a character against a character class bitmask.
+ ///
+ /// \param ch The character to test.
+ /// \param mask The character class bitmask against which to test.
+ /// \pre mask is a bitmask returned by lookup_classname, or is several such masks bit-or'ed
+ /// together.
+ /// \return true if the character is a member of any of the specified character classes, false
+ /// otherwise.
+ static bool isctype(char_type ch, char_class_type mask)
+ {
+ return detail::char_class_impl<char_type>::isctype(ch, mask);
+ }
+
+ /// Convert a digit character into the integer it represents.
+ ///
+ /// \param ch The digit character.
+ /// \param radix The radix to use for the conversion.
+ /// \pre radix is one of 8, 10, or 16.
+ /// \return -1 if ch is not a digit character, the integer value of the character otherwise. If
+ /// char_type is char, std::strtol is used for the conversion. If char_type is wchar_t,
+ /// std::wcstol is used.
+ static int value(char_type ch, int radix);
+
+ /// No-op
+ ///
+ locale_type imbue(locale_type loc)
+ {
+ this->base_type::imbue(*this);
+ return loc;
+ }
+
+ /// No-op
+ ///
+ static locale_type getloc()
+ {
+ locale_type loc;
+ return loc;
+ }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// c_regex_traits<>::widen specializations
+/// INTERNAL ONLY
+template<>
+inline char c_regex_traits<char>::widen(char ch)
+{
+ return ch;
+}
+
+#ifndef BOOST_XPRESSIVE_NO_WREGEX
+/// INTERNAL ONLY
+template<>
+inline wchar_t c_regex_traits<wchar_t>::widen(char ch)
+{
+ using namespace std;
+ return btowc(ch);
+}
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// c_regex_traits<>::hash specializations
+/// INTERNAL ONLY
+template<>
+inline unsigned char c_regex_traits<char>::hash(char ch)
+{
+ return static_cast<unsigned char>(ch);
+}
+
+#ifndef BOOST_XPRESSIVE_NO_WREGEX
+/// INTERNAL ONLY
+template<>
+inline unsigned char c_regex_traits<wchar_t>::hash(wchar_t ch)
+{
+ return static_cast<unsigned char>(ch);
+}
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// c_regex_traits<>::value specializations
+/// INTERNAL ONLY
+template<>
+inline int c_regex_traits<char>::value(char ch, int radix)
+{
+ using namespace std;
+ BOOST_ASSERT(8 == radix || 10 == radix || 16 == radix);
+ char begin[2] = { ch, '\0' }, *end = 0;
+ int val = strtol(begin, &end, radix);
+ return begin == end ? -1 : val;
+}
+
+#ifndef BOOST_XPRESSIVE_NO_WREGEX
+/// INTERNAL ONLY
+template<>
+inline int c_regex_traits<wchar_t>::value(wchar_t ch, int radix)
+{
+ using namespace std;
+ BOOST_ASSERT(8 == radix || 10 == radix || 16 == radix);
+ wchar_t begin[2] = { ch, L'\0' }, *end = 0;
+ int val = wcstol(begin, &end, radix);
+ return begin == end ? -1 : val;
+}
+#endif
+
+}}
+
+#endif
diff --git a/boost/boost/xpressive/traits/cpp_regex_traits.hpp b/boost/boost/xpressive/traits/cpp_regex_traits.hpp
new file mode 100644
index 00000000000..abd44147b2c
--- /dev/null
+++ b/boost/boost/xpressive/traits/cpp_regex_traits.hpp
@@ -0,0 +1,676 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file cpp_regex_traits.hpp
+/// Contains the definition of the cpp_regex_traits\<\> template, which is a
+/// wrapper for std::locale that can be used to customize the behavior of
+/// static and dynamic regexes.
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_TRAITS_CPP_REGEX_TRAITS_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_TRAITS_CPP_REGEX_TRAITS_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <string>
+#include <locale>
+#include <sstream>
+#include <boost/config.hpp>
+#include <boost/assert.hpp>
+#include <boost/integer.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/utility/literals.hpp>
+
+// From John Maddock:
+// Fix for gcc prior to 3.4: std::ctype<wchar_t> doesn't allow masks to be combined, for example:
+// std::use_facet<std::ctype<wchar_t> >(locale()).is(std::ctype_base::lower|std::ctype_base::upper, L'a');
+// incorrectly returns false.
+// NOTE: later version of the gcc define __GLIBCXX__, not __GLIBCPP__
+#if BOOST_WORKAROUND(__GLIBCPP__, != 0)
+# define BOOST_XPRESSIVE_BUGGY_CTYPE_FACET
+#endif
+
+namespace boost { namespace xpressive
+{
+
+namespace detail
+{
+ // define an unsigned integral typedef of the same size as std::ctype_base::mask
+ typedef boost::uint_t<sizeof(std::ctype_base::mask) * CHAR_BIT>::least umask_t;
+ BOOST_MPL_ASSERT_RELATION(sizeof(std::ctype_base::mask), ==, sizeof(umask_t));
+
+ // Calculate what the size of the umaskex_t type should be to fix the 3 extra bitmasks
+ // 11 char categories in ctype_base
+ // + 3 extra categories for xpressive
+ // = 14 total bits needed
+ int const umaskex_bits = (14 > (sizeof(umask_t) * CHAR_BIT)) ? 14 : sizeof(umask_t) * CHAR_BIT;
+
+ // define an unsigned integral type with at least umaskex_bits
+ typedef boost::uint_t<umaskex_bits>::fast umaskex_t;
+ BOOST_MPL_ASSERT_RELATION(sizeof(umask_t), <=, sizeof(umaskex_t));
+
+ // cast a ctype mask to a umaskex_t
+ template<std::ctype_base::mask Mask>
+ struct mask_cast
+ {
+ BOOST_STATIC_CONSTANT(umaskex_t, value = static_cast<umask_t>(Mask));
+ };
+
+ #ifdef __CYGWIN__
+ // Work around a gcc warning on cygwin
+ template<>
+ struct mask_cast<std::ctype_base::print>
+ {
+ BOOST_MPL_ASSERT_RELATION('\227', ==, std::ctype_base::print);
+ BOOST_STATIC_CONSTANT(umaskex_t, value = 0227);
+ };
+ #endif
+
+ #ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION
+ template<std::ctype_base::mask Mask>
+ umaskex_t const mask_cast<Mask>::value;
+ #endif
+
+ #ifndef BOOST_XPRESSIVE_BUGGY_CTYPE_FACET
+ // an unsigned integer with the highest bit set
+ umaskex_t const highest_bit = 1 << (sizeof(umaskex_t) * CHAR_BIT - 1);
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // unused_mask
+ // find a bit in an int that isn't set
+ template<umaskex_t In, umaskex_t Out = highest_bit, bool Done = (0 == (Out & In))>
+ struct unused_mask
+ {
+ BOOST_MPL_ASSERT_RELATION(1, !=, Out);
+ BOOST_STATIC_CONSTANT(umaskex_t, value = (unused_mask<In, (Out >> 1)>::value));
+ };
+
+ template<umaskex_t In, umaskex_t Out>
+ struct unused_mask<In, Out, true>
+ {
+ BOOST_STATIC_CONSTANT(umaskex_t, value = Out);
+ };
+
+ #ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION
+ template<umaskex_t In, umaskex_t Out, bool Done>
+ umaskex_t const unused_mask<In, Out, Done>::value;
+ #endif
+
+ umaskex_t const std_ctype_alnum = mask_cast<std::ctype_base::alnum>::value;
+ umaskex_t const std_ctype_alpha = mask_cast<std::ctype_base::alpha>::value;
+ umaskex_t const std_ctype_cntrl = mask_cast<std::ctype_base::cntrl>::value;
+ umaskex_t const std_ctype_digit = mask_cast<std::ctype_base::digit>::value;
+ umaskex_t const std_ctype_graph = mask_cast<std::ctype_base::graph>::value;
+ umaskex_t const std_ctype_lower = mask_cast<std::ctype_base::lower>::value;
+ umaskex_t const std_ctype_print = mask_cast<std::ctype_base::print>::value;
+ umaskex_t const std_ctype_punct = mask_cast<std::ctype_base::punct>::value;
+ umaskex_t const std_ctype_space = mask_cast<std::ctype_base::space>::value;
+ umaskex_t const std_ctype_upper = mask_cast<std::ctype_base::upper>::value;
+ umaskex_t const std_ctype_xdigit = mask_cast<std::ctype_base::xdigit>::value;
+
+ // Reserve some bits for the implementation
+ #if defined(__GLIBCXX__) && __GLIBCXX__ >= 20050209
+ umaskex_t const std_ctype_reserved = 0x8000;
+ #else
+ umaskex_t const std_ctype_reserved = 0;
+ #endif
+
+ // Bitwise-or all the ctype masks together
+ umaskex_t const all_ctype_masks = std_ctype_reserved
+ | std_ctype_alnum | std_ctype_alpha | std_ctype_cntrl | std_ctype_digit
+ | std_ctype_graph | std_ctype_lower | std_ctype_print | std_ctype_punct
+ | std_ctype_space | std_ctype_upper | std_ctype_xdigit;
+
+ // define a new mask for "underscore" ("word" == alnum | underscore)
+ umaskex_t const non_std_ctype_underscore = unused_mask<all_ctype_masks>::value;
+
+ // define a new mask for "blank"
+ umaskex_t const non_std_ctype_blank = unused_mask<all_ctype_masks | non_std_ctype_underscore>::value;
+
+ // define a new mask for "newline"
+ umaskex_t const non_std_ctype_newline = unused_mask<all_ctype_masks | non_std_ctype_underscore | non_std_ctype_blank>::value;
+
+ #else
+ ///////////////////////////////////////////////////////////////////////////////
+ // Ugly work-around for buggy ctype facets.
+ umaskex_t const std_ctype_alnum = 1 << 0;
+ umaskex_t const std_ctype_alpha = 1 << 1;
+ umaskex_t const std_ctype_cntrl = 1 << 2;
+ umaskex_t const std_ctype_digit = 1 << 3;
+ umaskex_t const std_ctype_graph = 1 << 4;
+ umaskex_t const std_ctype_lower = 1 << 5;
+ umaskex_t const std_ctype_print = 1 << 6;
+ umaskex_t const std_ctype_punct = 1 << 7;
+ umaskex_t const std_ctype_space = 1 << 8;
+ umaskex_t const std_ctype_upper = 1 << 9;
+ umaskex_t const std_ctype_xdigit = 1 << 10;
+ umaskex_t const non_std_ctype_underscore = 1 << 11;
+ umaskex_t const non_std_ctype_blank = 1 << 12;
+ umaskex_t const non_std_ctype_newline = 1 << 13;
+
+ static umaskex_t const std_masks[] =
+ {
+ mask_cast<std::ctype_base::alnum>::value
+ , mask_cast<std::ctype_base::alpha>::value
+ , mask_cast<std::ctype_base::cntrl>::value
+ , mask_cast<std::ctype_base::digit>::value
+ , mask_cast<std::ctype_base::graph>::value
+ , mask_cast<std::ctype_base::lower>::value
+ , mask_cast<std::ctype_base::print>::value
+ , mask_cast<std::ctype_base::punct>::value
+ , mask_cast<std::ctype_base::space>::value
+ , mask_cast<std::ctype_base::upper>::value
+ , mask_cast<std::ctype_base::xdigit>::value
+ };
+
+ inline int mylog2(umaskex_t i)
+ {
+ return "\0\0\1\0\2\0\0\0\3"[i & 0xf]
+ + "\0\4\5\0\6\0\0\0\7"[(i & 0xf0) >> 04]
+ + "\0\10\11\0\12\0\0\0\13"[(i & 0xf00) >> 010];
+ }
+ #endif
+
+ // convenient constant for the extra masks
+ umaskex_t const non_std_ctype_masks = non_std_ctype_underscore | non_std_ctype_blank | non_std_ctype_newline;
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // cpp_regex_traits_base
+ // BUGBUG this should be replaced with a regex facet that lets you query for
+ // an array of underscore characters and an array of line separator characters.
+ template<typename Char, std::size_t SizeOfChar = sizeof(Char)>
+ struct cpp_regex_traits_base
+ {
+ protected:
+ void imbue(std::locale const &)
+ {
+ }
+
+ static bool is(std::ctype<Char> const &ct, Char ch, umaskex_t mask)
+ {
+ #ifndef BOOST_XPRESSIVE_BUGGY_CTYPE_FACET
+
+ if(ct.is((std::ctype_base::mask)(umask_t)mask, ch))
+ {
+ return true;
+ }
+
+ #else
+
+ umaskex_t tmp = mask & ~non_std_ctype_masks;
+ for(umaskex_t i; 0 != (i = (tmp & (~tmp+1))); tmp &= ~i)
+ {
+ std::ctype_base::mask m = (std::ctype_base::mask)(umask_t)std_masks[mylog2(i)];
+ if(ct.is(m, ch))
+ {
+ return true;
+ }
+ }
+
+ #endif
+
+ return ((mask & non_std_ctype_blank) && cpp_regex_traits_base::is_blank(ch))
+ || ((mask & non_std_ctype_underscore) && cpp_regex_traits_base::is_underscore(ch))
+ || ((mask & non_std_ctype_newline) && cpp_regex_traits_base::is_newline(ch));
+ }
+
+ private:
+ static bool is_blank(Char ch)
+ {
+ BOOST_MPL_ASSERT_RELATION('\t', ==, L'\t');
+ return L'\t' == ch;
+ }
+
+ static bool is_underscore(Char ch)
+ {
+ BOOST_MPL_ASSERT_RELATION('_', ==, L'_');
+ return L'_' == ch;
+ }
+
+ static bool is_newline(Char ch)
+ {
+ BOOST_MPL_ASSERT_RELATION('\r', ==, L'\r');
+ BOOST_MPL_ASSERT_RELATION('\n', ==, L'\n');
+ BOOST_MPL_ASSERT_RELATION('\f', ==, L'\f');
+ return L'\r' == ch || L'\n' == ch || L'\f' == ch
+ || (1 < SizeOfChar && (0x2028u == ch || 0x2029u == ch || 0x85u == ch));
+ }
+ };
+
+ #ifndef BOOST_XPRESSIVE_BUGGY_CTYPE_FACET
+
+ template<typename Char>
+ struct cpp_regex_traits_base<Char, 1>
+ {
+ protected:
+ void imbue(std::locale const &loc)
+ {
+ int i = 0;
+ Char allchars[UCHAR_MAX + 1];
+ for(i = 0; i <= UCHAR_MAX; ++i)
+ {
+ allchars[i] = static_cast<Char>(i);
+ }
+
+ std::ctype<Char> const &ct = BOOST_USE_FACET(std::ctype<Char>, loc);
+ std::ctype_base::mask tmp[UCHAR_MAX + 1];
+ ct.is(allchars, allchars + UCHAR_MAX + 1, tmp);
+ for(i = 0; i <= UCHAR_MAX; ++i)
+ {
+ this->masks_[i] = static_cast<umask_t>(tmp[i]);
+ BOOST_ASSERT(0 == (this->masks_[i] & non_std_ctype_masks));
+ }
+
+ this->masks_[static_cast<unsigned char>('_')] |= non_std_ctype_underscore;
+ this->masks_[static_cast<unsigned char>(' ')] |= non_std_ctype_blank;
+ this->masks_[static_cast<unsigned char>('\t')] |= non_std_ctype_blank;
+ this->masks_[static_cast<unsigned char>('\n')] |= non_std_ctype_newline;
+ this->masks_[static_cast<unsigned char>('\r')] |= non_std_ctype_newline;
+ this->masks_[static_cast<unsigned char>('\f')] |= non_std_ctype_newline;
+ }
+
+ bool is(std::ctype<Char> const &, Char ch, umaskex_t mask) const
+ {
+ return 0 != (this->masks_[static_cast<unsigned char>(ch)] & mask);
+ }
+
+ private:
+ umaskex_t masks_[UCHAR_MAX + 1];
+ };
+
+ #endif
+
+ template<typename Char>
+ struct version_tag
+ {
+ typedef regex_traits_version_1_tag type;
+ };
+
+ template<>
+ struct version_tag<char>
+ {
+ typedef regex_traits_version_1_case_fold_tag type;
+ };
+
+} // namespace detail
+
+///////////////////////////////////////////////////////////////////////////////
+// cpp_regex_traits
+//
+/// \brief Encapsaulates a std::locale for use by the
+/// basic_regex\<\> class template.
+template<typename Char>
+struct cpp_regex_traits
+ : detail::cpp_regex_traits_base<Char>
+{
+ typedef Char char_type;
+ typedef std::basic_string<char_type> string_type;
+ typedef std::locale locale_type;
+ typedef detail::umaskex_t char_class_type;
+ typedef typename detail::version_tag<Char>::type version_tag;
+ typedef detail::cpp_regex_traits_base<Char> base_type;
+
+ /// Initialize a cpp_regex_traits object to use the specified std::locale,
+ /// or the global std::locale if none is specified.
+ ///
+ cpp_regex_traits(locale_type const &loc = locale_type())
+ : base_type()
+ , loc_()
+ {
+ this->imbue(loc);
+ }
+
+ /// Checks two cpp_regex_traits objects for equality
+ ///
+ /// \return this->getloc() == that.getloc().
+ bool operator ==(cpp_regex_traits<char_type> const &that) const
+ {
+ return this->loc_ == that.loc_;
+ }
+
+ /// Checks two cpp_regex_traits objects for inequality
+ ///
+ /// \return this->getloc() != that.getloc().
+ bool operator !=(cpp_regex_traits<char_type> const &that) const
+ {
+ return this->loc_ != that.loc_;
+ }
+
+ /// Convert a char to a Char
+ ///
+ /// \param ch The source character.
+ /// \return std::use_facet<std::ctype<char_type> >(this->getloc()).widen(ch).
+ char_type widen(char ch) const
+ {
+ return this->ctype_->widen(ch);
+ }
+
+ /// Returns a hash value for a Char in the range [0, UCHAR_MAX]
+ ///
+ /// \param ch The source character.
+ /// \return a value between 0 and UCHAR_MAX, inclusive.
+ static unsigned char hash(char_type ch)
+ {
+ return static_cast<unsigned char>(std::char_traits<Char>::to_int_type(ch));
+ }
+
+ /// No-op
+ ///
+ /// \param ch The source character.
+ /// \return ch
+ static char_type translate(char_type ch)
+ {
+ return ch;
+ }
+
+ /// Converts a character to lower-case using the internally-stored std::locale.
+ ///
+ /// \param ch The source character.
+ /// \return std::tolower(ch, this->getloc()).
+ char_type translate_nocase(char_type ch) const
+ {
+ return this->ctype_->tolower(ch);
+ }
+
+ /// Returns a string_type containing all the characters that compare equal
+ /// disregrarding case to the one passed in. This function can only be called
+ /// if is_convertible<version_tag*, regex_traits_version_1_case_fold_tag*>::value
+ /// is true.
+ ///
+ /// \param ch The source character.
+ /// \return string_type containing all chars which are equal to ch when disregarding
+ /// case
+ //typedef array<char_type, 2> fold_case_type;
+ string_type fold_case(char_type ch) const
+ {
+ BOOST_MPL_ASSERT((is_same<char_type, char>));
+ char_type ntcs[] = {
+ this->ctype_->tolower(ch)
+ , this->ctype_->toupper(ch)
+ , 0
+ };
+ if(ntcs[1] == ntcs[0])
+ ntcs[1] = 0;
+ return string_type(ntcs);
+ }
+
+ /// Checks to see if a character is within a character range.
+ ///
+ /// \param first The bottom of the range, inclusive.
+ /// \param last The top of the range, inclusive.
+ /// \param ch The source character.
+ /// \return first <= ch && ch <= last.
+ static bool in_range(char_type first, char_type last, char_type ch)
+ {
+ return first <= ch && ch <= last;
+ }
+
+ /// Checks to see if a character is within a character range, irregardless of case.
+ ///
+ /// \param first The bottom of the range, inclusive.
+ /// \param last The top of the range, inclusive.
+ /// \param ch The source character.
+ /// \return in_range(first, last, ch) || in_range(first, last, tolower(ch, this->getloc())) ||
+ /// in_range(first, last, toupper(ch, this->getloc()))
+ /// \attention The default implementation doesn't do proper Unicode
+ /// case folding, but this is the best we can do with the standard
+ /// ctype facet.
+ bool in_range_nocase(char_type first, char_type last, char_type ch) const
+ {
+ // NOTE: this default implementation doesn't do proper Unicode
+ // case folding, but this is the best we can do with the standard
+ // std::ctype facet.
+ return this->in_range(first, last, ch)
+ || this->in_range(first, last, this->ctype_->toupper(ch))
+ || this->in_range(first, last, this->ctype_->tolower(ch));
+ }
+
+ /// INTERNAL ONLY
+ //string_type transform(char_type const *begin, char_type const *end) const
+ //{
+ // return this->collate_->transform(begin, end);
+ //}
+
+ /// Returns a sort key for the character sequence designated by the iterator range [F1, F2)
+ /// such that if the character sequence [G1, G2) sorts before the character sequence [H1, H2)
+ /// then v.transform(G1, G2) < v.transform(H1, H2).
+ ///
+ /// \attention Not used in xpressive 1.0
+ template<typename FwdIter>
+ string_type transform(FwdIter begin, FwdIter end) const
+ {
+ //string_type str(begin, end);
+ //return this->transform(str.data(), str.data() + str.size());
+
+ BOOST_ASSERT(false);
+ return string_type();
+ }
+
+ /// Returns a sort key for the character sequence designated by the iterator range [F1, F2)
+ /// such that if the character sequence [G1, G2) sorts before the character sequence [H1, H2)
+ /// when character case is not considered then
+ /// v.transform_primary(G1, G2) < v.transform_primary(H1, H2).
+ ///
+ /// \attention Not used in xpressive 1.0
+ template<typename FwdIter>
+ string_type transform_primary(FwdIter begin, FwdIter end) const
+ {
+ BOOST_ASSERT(false); // TODO implement me
+ return string_type();
+ }
+
+ /// Returns a sequence of characters that represents the collating element
+ /// consisting of the character sequence designated by the iterator range [F1, F2).
+ /// Returns an empty string if the character sequence is not a valid collating element.
+ ///
+ /// \attention Not used in xpressive 1.0
+ template<typename FwdIter>
+ string_type lookup_collatename(FwdIter begin, FwdIter end) const
+ {
+ BOOST_ASSERT(false); // TODO implement me
+ return string_type();
+ }
+
+ /// For the character class name represented by the specified character sequence,
+ /// return the corresponding bitmask representation.
+ ///
+ /// \param begin A forward iterator to the start of the character sequence representing
+ /// the name of the character class.
+ /// \param end The end of the character sequence.
+ /// \param icase Specifies whether the returned bitmask should represent the case-insensitive
+ /// version of the character class.
+ /// \return A bitmask representing the character class.
+ template<typename FwdIter>
+ char_class_type lookup_classname(FwdIter begin, FwdIter end, bool icase) const
+ {
+ static detail::umaskex_t const icase_masks =
+ detail::std_ctype_lower | detail::std_ctype_upper;
+
+ BOOST_ASSERT(begin != end);
+ char_class_type char_class = this->lookup_classname_impl_(begin, end);
+ if(0 == char_class)
+ {
+ // convert the string to lowercase
+ string_type classname(begin, end);
+ for(typename string_type::size_type i = 0, len = classname.size(); i < len; ++i)
+ {
+ classname[i] = this->translate_nocase(classname[i]);
+ }
+ char_class = this->lookup_classname_impl_(classname.begin(), classname.end());
+ }
+ // erase case-sensitivity if icase==true
+ if(icase && 0 != (char_class & icase_masks))
+ {
+ char_class |= icase_masks;
+ }
+ return char_class;
+ }
+
+ /// Tests a character against a character class bitmask.
+ ///
+ /// \param ch The character to test.
+ /// \param mask The character class bitmask against which to test.
+ /// \pre mask is a bitmask returned by lookup_classname, or is several such masks bit-or'ed
+ /// together.
+ /// \return true if the character is a member of any of the specified character classes, false
+ /// otherwise.
+ bool isctype(char_type ch, char_class_type mask) const
+ {
+ return this->base_type::is(*this->ctype_, ch, mask);
+ }
+
+ /// Convert a digit character into the integer it represents.
+ ///
+ /// \param ch The digit character.
+ /// \param radix The radix to use for the conversion.
+ /// \pre radix is one of 8, 10, or 16.
+ /// \return -1 if ch is not a digit character, the integer value of the character otherwise.
+ /// The conversion is performed by imbueing a std::stringstream with this->getloc();
+ /// setting the radix to one of oct, hex or dec; inserting ch into the stream; and
+ /// extracting an int.
+ int value(char_type ch, int radix) const
+ {
+ BOOST_ASSERT(8 == radix || 10 == radix || 16 == radix);
+ int val = -1;
+ std::basic_stringstream<char_type> str;
+ str.imbue(this->getloc());
+ str << (8 == radix ? std::oct : (16 == radix ? std::hex : std::dec));
+ str.put(ch);
+ str >> val;
+ return str.fail() ? -1 : val;
+ }
+
+ /// Imbues *this with loc
+ ///
+ /// \param loc A std::locale.
+ /// \return the previous std::locale used by *this.
+ locale_type imbue(locale_type loc)
+ {
+ locale_type old_loc = this->loc_;
+ this->loc_ = loc;
+ this->ctype_ = &BOOST_USE_FACET(std::ctype<char_type>, this->loc_);
+ //this->collate_ = &BOOST_USE_FACET(std::collate<char_type>, this->loc_);
+ this->base_type::imbue(this->loc_);
+ return old_loc;
+ }
+
+ /// Returns the current std::locale used by *this.
+ ///
+ locale_type getloc() const
+ {
+ return this->loc_;
+ }
+
+private:
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // char_class_pair
+ /// INTERNAL ONLY
+ struct char_class_pair
+ {
+ char_type const *class_name_;
+ char_class_type class_type_;
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // char_class
+ /// INTERNAL ONLY
+ static char_class_pair const &char_class(std::size_t j)
+ {
+ static char_class_pair const s_char_class_map[] =
+ {
+ { BOOST_XPR_CSTR_(char_type, "alnum"), detail::std_ctype_alnum }
+ , { BOOST_XPR_CSTR_(char_type, "alpha"), detail::std_ctype_alpha }
+ , { BOOST_XPR_CSTR_(char_type, "blank"), detail::non_std_ctype_blank }
+ , { BOOST_XPR_CSTR_(char_type, "cntrl"), detail::std_ctype_cntrl }
+ , { BOOST_XPR_CSTR_(char_type, "d"), detail::std_ctype_digit }
+ , { BOOST_XPR_CSTR_(char_type, "digit"), detail::std_ctype_digit }
+ , { BOOST_XPR_CSTR_(char_type, "graph"), detail::std_ctype_graph }
+ , { BOOST_XPR_CSTR_(char_type, "lower"), detail::std_ctype_lower }
+ , { BOOST_XPR_CSTR_(char_type, "newline"),detail::non_std_ctype_newline }
+ , { BOOST_XPR_CSTR_(char_type, "print"), detail::std_ctype_print }
+ , { BOOST_XPR_CSTR_(char_type, "punct"), detail::std_ctype_punct }
+ , { BOOST_XPR_CSTR_(char_type, "s"), detail::std_ctype_space }
+ , { BOOST_XPR_CSTR_(char_type, "space"), detail::std_ctype_space }
+ , { BOOST_XPR_CSTR_(char_type, "upper"), detail::std_ctype_upper }
+ , { BOOST_XPR_CSTR_(char_type, "w"), detail::std_ctype_alnum | detail::non_std_ctype_underscore }
+ , { BOOST_XPR_CSTR_(char_type, "xdigit"), detail::std_ctype_xdigit }
+ , { 0, 0 }
+ };
+ return s_char_class_map[j];
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // lookup_classname_impl
+ /// INTERNAL ONLY
+ template<typename FwdIter>
+ static char_class_type lookup_classname_impl_(FwdIter begin, FwdIter end)
+ {
+ // find the classname
+ typedef cpp_regex_traits<Char> this_t;
+ for(std::size_t j = 0; 0 != this_t::char_class(j).class_name_; ++j)
+ {
+ if(this_t::compare_(this_t::char_class(j).class_name_, begin, end))
+ {
+ return this_t::char_class(j).class_type_;
+ }
+ }
+ return 0;
+ }
+
+ /// INTERNAL ONLY
+ template<typename FwdIter>
+ static bool compare_(char_type const *name, FwdIter begin, FwdIter end)
+ {
+ for(; *name && begin != end; ++name, ++begin)
+ {
+ if(*name != *begin)
+ {
+ return false;
+ }
+ }
+ return !*name && begin == end;
+ }
+
+ locale_type loc_;
+ std::ctype<char_type> const *ctype_;
+ //std::collate<char_type> const *collate_;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// cpp_regex_traits<>::hash specializations
+template<>
+inline unsigned char cpp_regex_traits<unsigned char>::hash(unsigned char ch)
+{
+ return ch;
+}
+
+template<>
+inline unsigned char cpp_regex_traits<char>::hash(char ch)
+{
+ return static_cast<unsigned char>(ch);
+}
+
+template<>
+inline unsigned char cpp_regex_traits<signed char>::hash(signed char ch)
+{
+ return static_cast<unsigned char>(ch);
+}
+
+#ifndef BOOST_XPRESSIVE_NO_WREGEX
+template<>
+inline unsigned char cpp_regex_traits<wchar_t>::hash(wchar_t ch)
+{
+ return static_cast<unsigned char>(ch);
+}
+#endif
+
+}}
+
+#endif
diff --git a/boost/boost/xpressive/traits/detail/c_ctype.hpp b/boost/boost/xpressive/traits/detail/c_ctype.hpp
new file mode 100644
index 00000000000..9f536a15308
--- /dev/null
+++ b/boost/boost/xpressive/traits/detail/c_ctype.hpp
@@ -0,0 +1,841 @@
+///////////////////////////////////////////////////////////////////////////////
+// c_ctype.hpp
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_TRAITS_DETAIL_C_CTYPE_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_TRAITS_DETAIL_C_CTYPE_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <cctype>
+#include <cstring>
+#include <boost/mpl/assert.hpp>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+
+#ifndef BOOST_XPRESSIVE_NO_WREGEX
+# include <cwchar>
+# include <cwctype>
+#endif
+
+namespace boost { namespace xpressive { namespace detail
+{
+
+///////////////////////////////////////////////////////////////////////////////
+// isnewline
+//
+inline bool isnewline(char ch)
+{
+ switch(ch)
+ {
+ case L'\n': case L'\r': case L'\f':
+ return true;
+ default:
+ return false;
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// iswnewline
+//
+inline bool iswnewline(wchar_t ch)
+{
+ switch(ch)
+ {
+ case L'\n': case L'\r': case L'\f': case 0x2028u: case 0x2029u: case 0x85u:
+ return true;
+ default:
+ return false;
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// classname_a
+//
+template<typename FwdIter>
+inline std::string classname_a(FwdIter begin, FwdIter end)
+{
+ std::string name(begin, end);
+ for(std::size_t i = 0; i < name.size(); ++i)
+ {
+ using namespace std;
+ name[i] = tolower(static_cast<unsigned char>(name[i]));
+ }
+ return name;
+}
+
+#ifndef BOOST_XPRESSIVE_NO_WREGEX
+///////////////////////////////////////////////////////////////////////////////
+// classname_w
+//
+template<typename FwdIter>
+inline std::wstring classname_w(FwdIter begin, FwdIter end)
+{
+ std::wstring name(begin, end);
+ for(std::size_t i = 0; i < name.size(); ++i)
+ {
+ using namespace std;
+ name[i] = towlower(name[i]);
+ }
+ return name;
+}
+#endif
+
+
+
+///////////////////////////////////////////////////////////////////////////////
+// char_class_impl
+//
+template<typename Char>
+struct char_class_impl;
+
+
+#if defined(__QNXNTO__)
+
+///////////////////////////////////////////////////////////////////////////////
+//
+template<>
+struct char_class_impl<char>
+{
+ typedef short char_class_type;
+ BOOST_MPL_ASSERT_RELATION(0x07FF, ==, (_XB|_XA|_XS|_BB|_CN|_DI|_LO|_PU|_SP|_UP|_XD));
+ BOOST_STATIC_CONSTANT(short, char_class_underscore = 0x1000);
+ BOOST_STATIC_CONSTANT(short, char_class_newline = 0x2000);
+
+ template<typename FwdIter>
+ static char_class_type lookup_classname(FwdIter begin, FwdIter end, bool icase)
+ {
+ using namespace std;
+ string const name = classname_a(begin, end);
+ if(name == "alnum") return _DI|_LO|_UP|_XA;
+ if(name == "alpha") return _LO|_UP|_XA;
+ if(name == "blank") return _SP|_XB;
+ if(name == "cntrl") return _BB;
+ if(name == "d") return _DI;
+ if(name == "digit") return _DI;
+ if(name == "graph") return _DI|_LO|_PU|_UP|_XA;
+ if(name == "lower") return icase ? (_LO|_UP) : _LO;
+ if(name == "newline") return char_class_newline;
+ if(name == "print") return _DI|_LO|_PU|_SP|_UP|_XA;
+ if(name == "punct") return _PU;
+ if(name == "s") return _CN|_SP|_XS;
+ if(name == "space") return _CN|_SP|_XS;
+ if(name == "upper") return icase ? (_UP|_LO) : _UP;
+ if(name == "w") return _DI|_LO|_UP|_XA|char_class_underscore;
+ if(name == "xdigit") return _XD;
+ return 0;
+ }
+
+ static bool isctype(char ch, char_class_type mask)
+ {
+ using namespace std;
+ if(0 != (_Getchrtype((unsigned char)ch) & mask))
+ {
+ return true;
+ }
+
+ switch(ch)
+ {
+ case '_': return 0 != (mask & char_class_underscore);
+ case '\n': case '\r': case '\f': return 0 != (mask & char_class_newline);
+ default:;
+ }
+
+ return false;
+ }
+};
+
+#ifndef BOOST_XPRESSIVE_NO_WREGEX
+///////////////////////////////////////////////////////////////////////////////
+//
+template<>
+struct char_class_impl<wchar_t>
+{
+ typedef int char_class_type;
+ //BOOST_STATIC_CONSTANT(int, char_class_alnum = 0x0001);
+ BOOST_STATIC_CONSTANT(int, char_class_alpha = 0x0002);
+ BOOST_STATIC_CONSTANT(int, char_class_blank = 0x0004);
+ BOOST_STATIC_CONSTANT(int, char_class_cntrl = 0x0008);
+ BOOST_STATIC_CONSTANT(int, char_class_digit = 0x0010);
+ //BOOST_STATIC_CONSTANT(int, char_class_graph = 0x0020);
+ BOOST_STATIC_CONSTANT(int, char_class_lower = 0x0040);
+ //BOOST_STATIC_CONSTANT(int, char_class_print = 0x0080);
+ BOOST_STATIC_CONSTANT(int, char_class_punct = 0x0100);
+ BOOST_STATIC_CONSTANT(int, char_class_space = 0x0200);
+ BOOST_STATIC_CONSTANT(int, char_class_upper = 0x0400);
+ BOOST_STATIC_CONSTANT(int, char_class_underscore = 0x0800);
+ BOOST_STATIC_CONSTANT(int, char_class_xdigit = 0x1000);
+ BOOST_STATIC_CONSTANT(int, char_class_newline = 0x2000);
+
+ template<typename FwdIter>
+ static char_class_type lookup_classname(FwdIter begin, FwdIter end, bool icase)
+ {
+ using namespace std;
+ wstring const name = classname_w(begin, end);
+ if(name == L"alnum") return char_class_alpha|char_class_digit;
+ if(name == L"alpha") return char_class_alpha;
+ if(name == L"blank") return char_class_blank;
+ if(name == L"cntrl") return char_class_cntrl;
+ if(name == L"d") return char_class_digit;
+ if(name == L"digit") return char_class_digit;
+ if(name == L"graph") return char_class_punct|char_class_alpha|char_class_digit;
+ if(name == L"lower") return icase ? (char_class_lower|char_class_upper) : char_class_lower;
+ if(name == L"newline") return char_class_newline;
+ if(name == L"print") return char_class_blank|char_class_punct|char_class_alpha|char_class_digit;
+ if(name == L"punct") return char_class_punct;
+ if(name == L"s") return char_class_space;
+ if(name == L"space") return char_class_space;
+ if(name == L"upper") return icase ? (char_class_upper|char_class_lower) : char_class_upper;
+ if(name == L"w") return char_class_alpha|char_class_digit|char_class_underscore;
+ if(name == L"xdigit") return char_class_xdigit;
+ return 0;
+ }
+
+ static bool isctype(wchar_t ch, char_class_type mask)
+ {
+ using namespace std;
+ return ((char_class_alpha & mask) && iswalpha(ch))
+ || ((char_class_blank & mask) && (L' ' == ch || L'\t' == ch)) // BUGBUG
+ || ((char_class_cntrl & mask) && iswcntrl(ch))
+ || ((char_class_digit & mask) && iswdigit(ch))
+ || ((char_class_lower & mask) && iswlower(ch))
+ || ((char_class_newline & mask) && detail::iswnewline(ch))
+ || ((char_class_punct & mask) && iswpunct(ch))
+ || ((char_class_space & mask) && iswspace(ch))
+ || ((char_class_upper & mask) && iswupper(ch))
+ || ((char_class_underscore & mask) && L'_' == ch)
+ || ((char_class_xdigit & mask) && iswxdigit(ch))
+ ;
+ }
+};
+#endif
+
+
+#elif defined(__MINGW32_VERSION)
+
+
+///////////////////////////////////////////////////////////////////////////////
+//
+template<>
+struct char_class_impl<char>
+{
+ typedef int char_class_type;
+ BOOST_MPL_ASSERT_RELATION(0x81FF, ==, (_ALPHA|_UPPER|_LOWER|_DIGIT|_SPACE|_PUNCT|_CONTROL|_BLANK|_HEX|_LEADBYTE));
+ BOOST_STATIC_CONSTANT(int, char_class_underscore = 0x1000);
+ BOOST_STATIC_CONSTANT(int, char_class_newline = 0x2000);
+
+ template<typename FwdIter>
+ static char_class_type lookup_classname(FwdIter begin, FwdIter end, bool icase)
+ {
+ using namespace std;
+ string const name = classname_a(begin, end);
+ if(name == "alnum") return _ALPHA|_DIGIT;
+ if(name == "alpha") return _ALPHA;
+ if(name == "blank") return _BLANK; // this is ONLY space!!!
+ if(name == "cntrl") return _CONTROL;
+ if(name == "d") return _DIGIT;
+ if(name == "digit") return _DIGIT;
+ if(name == "graph") return _PUNCT|_ALPHA|_DIGIT;
+ if(name == "lower") return icase ? (_LOWER|_UPPER) : _LOWER;
+ if(name == "newline") return char_class_newline;
+ if(name == "print") return _BLANK|_PUNCT|_ALPHA|_DIGIT;
+ if(name == "punct") return _PUNCT;
+ if(name == "s") return _SPACE;
+ if(name == "space") return _SPACE;
+ if(name == "upper") return icase ? (_UPPER|_LOWER) : _UPPER;
+ if(name == "w") return _ALPHA|_DIGIT|char_class_underscore;
+ if(name == "xdigit") return _HEX;
+ return 0;
+ }
+
+ static bool isctype(char ch, char_class_type mask)
+ {
+ using namespace std;
+ if(0 != _isctype(static_cast<unsigned char>(ch), mask))
+ {
+ return true;
+ }
+
+ switch(ch)
+ {
+ case '\t': return 0 != (mask & _BLANK);
+ case '_': return 0 != (mask & char_class_underscore);
+ case '\n': case '\r': case '\f': return 0 != (mask & char_class_newline);
+ default:;
+ }
+
+ return false;
+ }
+};
+
+#ifndef BOOST_XPRESSIVE_NO_WREGEX
+///////////////////////////////////////////////////////////////////////////////
+//
+template<>
+struct char_class_impl<wchar_t>
+{
+ typedef wctype_t char_class_type;
+ BOOST_MPL_ASSERT_RELATION(0x81FF, ==, (_ALPHA|_UPPER|_LOWER|_DIGIT|_SPACE|_PUNCT|_CONTROL|_BLANK|_HEX|_LEADBYTE));
+ BOOST_STATIC_CONSTANT(int, char_class_underscore = 0x1000);
+ BOOST_STATIC_CONSTANT(int, char_class_newline = 0x2000);
+
+ template<typename FwdIter>
+ static char_class_type lookup_classname(FwdIter begin, FwdIter end, bool icase)
+ {
+ using namespace std;
+ wstring const name = classname_w(begin, end);
+ if(name == L"alnum") return _ALPHA|_DIGIT;
+ if(name == L"alpha") return _ALPHA;
+ if(name == L"blank") return _BLANK; // this is ONLY space!!!
+ if(name == L"cntrl") return _CONTROL;
+ if(name == L"d") return _DIGIT;
+ if(name == L"digit") return _DIGIT;
+ if(name == L"graph") return _PUNCT|_ALPHA|_DIGIT;
+ if(name == L"lower") return icase ? (_LOWER|_UPPER) : _LOWER;
+ if(name == L"newline") return char_class_newline;
+ if(name == L"print") return _BLANK|_PUNCT|_ALPHA|_DIGIT;
+ if(name == L"punct") return _PUNCT;
+ if(name == L"s") return _SPACE;
+ if(name == L"space") return _SPACE;
+ if(name == L"upper") return icase ? (_UPPER|_LOWER) : _UPPER;
+ if(name == L"w") return _ALPHA|_DIGIT|char_class_underscore;
+ if(name == L"xdigit") return _HEX;
+ return 0;
+ }
+
+ static bool isctype(wchar_t ch, char_class_type mask)
+ {
+ using namespace std;
+ if(0 != iswctype(ch, mask))
+ {
+ return true;
+ }
+
+ switch(ch)
+ {
+ case L'\t': return 0 != (mask & _BLANK);
+ case L'_': return 0 != (mask & char_class_underscore);
+ case L'\n': case L'\r': case L'\f': case 0x2028u: case 0x2029u: case 0x85u:
+ return 0 != (mask & char_class_newline);
+ default:;
+ }
+
+ return false;
+ }
+};
+#endif
+
+
+#elif defined(__CYGWIN__)
+
+
+
+///////////////////////////////////////////////////////////////////////////////
+//
+template<>
+struct char_class_impl<char>
+{
+ typedef int char_class_type;
+ BOOST_MPL_ASSERT_RELATION(0377, ==, (_U|_L|_N|_S|_P|_C|_B|_X));
+ BOOST_STATIC_CONSTANT(int, char_class_underscore = 0400);
+ BOOST_STATIC_CONSTANT(int, char_class_newline = 01000);
+
+ template<typename FwdIter>
+ static char_class_type lookup_classname(FwdIter begin, FwdIter end, bool icase)
+ {
+ using namespace std;
+ string const name = classname_a(begin, end);
+ if(name == "alnum") return _U|_L|_N;
+ if(name == "alpha") return _U|_L;
+ if(name == "blank") return _B; // BUGBUG what is this?
+ if(name == "cntrl") return _C;
+ if(name == "d") return _N;
+ if(name == "digit") return _N;
+ if(name == "graph") return _P|_U|_L|_N;
+ if(name == "lower") return icase ? (_L|_U) : _L;
+ if(name == "newline") return char_class_newline;
+ if(name == "print") return _B|_P|_U|_L|_N;
+ if(name == "punct") return _P;
+ if(name == "s") return _S;
+ if(name == "space") return _S;
+ if(name == "upper") return icase ? (_U|_L) : _U;
+ if(name == "w") return _U|_L|_N|char_class_underscore;
+ if(name == "xdigit") return _X;
+ return 0;
+ }
+
+ static bool isctype(char ch, char_class_type mask)
+ {
+ if(0 != static_cast<unsigned char>(((_ctype_+1)[(unsigned)(ch)]) & mask))
+ {
+ return true;
+ }
+
+ switch(ch)
+ {
+ case '_': return 0 != (mask & char_class_underscore);
+ case '\n': case '\r': case '\f': return 0 != (mask & char_class_newline);
+ default:;
+ }
+
+ return false;
+ }
+};
+
+#ifndef BOOST_XPRESSIVE_NO_WREGEX
+///////////////////////////////////////////////////////////////////////////////
+//
+template<>
+struct char_class_impl<wchar_t>
+{
+ typedef int char_class_type;
+ //BOOST_STATIC_CONSTANT(int, char_class_alnum = 0x0001);
+ BOOST_STATIC_CONSTANT(int, char_class_alpha = 0x0002);
+ BOOST_STATIC_CONSTANT(int, char_class_blank = 0x0004);
+ BOOST_STATIC_CONSTANT(int, char_class_cntrl = 0x0008);
+ BOOST_STATIC_CONSTANT(int, char_class_digit = 0x0010);
+ //BOOST_STATIC_CONSTANT(int, char_class_graph = 0x0020);
+ BOOST_STATIC_CONSTANT(int, char_class_lower = 0x0040);
+ //BOOST_STATIC_CONSTANT(int, char_class_print = 0x0080);
+ BOOST_STATIC_CONSTANT(int, char_class_punct = 0x0100);
+ BOOST_STATIC_CONSTANT(int, char_class_space = 0x0200);
+ BOOST_STATIC_CONSTANT(int, char_class_upper = 0x0400);
+ BOOST_STATIC_CONSTANT(int, char_class_underscore = 0x0800);
+ BOOST_STATIC_CONSTANT(int, char_class_xdigit = 0x1000);
+ BOOST_STATIC_CONSTANT(int, char_class_newline = 0x2000);
+
+ template<typename FwdIter>
+ static char_class_type lookup_classname(FwdIter begin, FwdIter end, bool icase)
+ {
+ using namespace std;
+ wstring const name = classname_w(begin, end);
+ if(name == L"alnum") return char_class_alpha|char_class_digit;
+ if(name == L"alpha") return char_class_alpha;
+ if(name == L"blank") return char_class_blank;
+ if(name == L"cntrl") return char_class_cntrl;
+ if(name == L"d") return char_class_digit;
+ if(name == L"digit") return char_class_digit;
+ if(name == L"graph") return char_class_punct|char_class_alpha|char_class_digit;
+ if(name == L"lower") return icase ? (char_class_lower|char_class_upper) : char_class_lower;
+ if(name == L"newline") return char_class_newline;
+ if(name == L"print") return char_class_blank|char_class_punct|char_class_alpha|char_class_digit;
+ if(name == L"punct") return char_class_punct;
+ if(name == L"s") return char_class_space;
+ if(name == L"space") return char_class_space;
+ if(name == L"upper") return icase ? (char_class_upper|char_class_lower) : char_class_upper;
+ if(name == L"w") return char_class_alpha|char_class_digit|char_class_underscore;
+ if(name == L"xdigit") return char_class_xdigit;
+ return 0;
+ }
+
+ static bool isctype(wchar_t ch, char_class_type mask)
+ {
+ using namespace std;
+ return ((char_class_alpha & mask) && iswalpha(ch))
+ || ((char_class_blank & mask) && (L' ' == ch || L'\t' == ch)) // BUGBUG
+ || ((char_class_cntrl & mask) && iswcntrl(ch))
+ || ((char_class_digit & mask) && iswdigit(ch))
+ || ((char_class_lower & mask) && iswlower(ch))
+ || ((char_class_newline & mask) && detail::iswnewline(ch))
+ || ((char_class_punct & mask) && iswpunct(ch))
+ || ((char_class_space & mask) && iswspace(ch))
+ || ((char_class_upper & mask) && iswupper(ch))
+ || ((char_class_underscore & mask) && L'_' == ch)
+ || ((char_class_xdigit & mask) && iswxdigit(ch))
+ ;
+ }
+};
+#endif
+
+
+
+#elif defined(__GLIBC__)
+
+
+
+
+///////////////////////////////////////////////////////////////////////////////
+//
+template<>
+struct char_class_impl<char>
+{
+ typedef int char_class_type;
+ BOOST_MPL_ASSERT_RELATION(0xffff, ==, (_ISalnum|_ISalpha|_ISblank|_IScntrl|_ISdigit|_ISgraph|
+ _ISlower|_ISprint|_ISpunct|_ISspace|_ISupper|_ISxdigit|0xffff));
+ BOOST_STATIC_CONSTANT(int, char_class_underscore = 0x00010000);
+ BOOST_STATIC_CONSTANT(int, char_class_newline = 0x00020000);
+
+ template<typename FwdIter>
+ static char_class_type lookup_classname(FwdIter begin, FwdIter end, bool icase)
+ {
+ using namespace std;
+ string const name = classname_a(begin, end);
+ if(name == "alnum") return _ISalnum;
+ if(name == "alpha") return _ISalpha;
+ if(name == "blank") return _ISblank;
+ if(name == "cntrl") return _IScntrl;
+ if(name == "d") return _ISdigit;
+ if(name == "digit") return _ISdigit;
+ if(name == "graph") return _ISgraph;
+ if(name == "lower") return icase ? (_ISlower|_ISupper) : _ISlower;
+ if(name == "print") return _ISprint;
+ if(name == "newline") return char_class_newline;
+ if(name == "punct") return _ISpunct;
+ if(name == "s") return _ISspace;
+ if(name == "space") return _ISspace;
+ if(name == "upper") return icase ? (_ISupper|_ISlower) : _ISupper;
+ if(name == "w") return _ISalnum|char_class_underscore;
+ if(name == "xdigit") return _ISxdigit;
+ return 0;
+ }
+
+ static bool isctype(char ch, char_class_type mask)
+ {
+ using namespace std;
+ if(0 != __isctype(static_cast<unsigned char>(ch), mask))
+ {
+ return true;
+ }
+
+ switch(ch)
+ {
+ case '_': return 0 != (mask & char_class_underscore);
+ case '\n': case '\r': case '\f': return 0 != (mask & char_class_newline);
+ default:;
+ }
+
+ return false;
+ }
+};
+
+#ifndef BOOST_XPRESSIVE_NO_WREGEX
+///////////////////////////////////////////////////////////////////////////////
+//
+template<>
+struct char_class_impl<wchar_t>
+{
+ typedef int char_class_type;
+ //BOOST_STATIC_CONSTANT(int, char_class_alnum = 0x0001);
+ BOOST_STATIC_CONSTANT(int, char_class_alpha = 0x0002);
+ BOOST_STATIC_CONSTANT(int, char_class_blank = 0x0004);
+ BOOST_STATIC_CONSTANT(int, char_class_cntrl = 0x0008);
+ BOOST_STATIC_CONSTANT(int, char_class_digit = 0x0010);
+ //BOOST_STATIC_CONSTANT(int, char_class_graph = 0x0020);
+ BOOST_STATIC_CONSTANT(int, char_class_lower = 0x0040);
+ //BOOST_STATIC_CONSTANT(int, char_class_print = 0x0080);
+ BOOST_STATIC_CONSTANT(int, char_class_punct = 0x0100);
+ BOOST_STATIC_CONSTANT(int, char_class_space = 0x0200);
+ BOOST_STATIC_CONSTANT(int, char_class_upper = 0x0400);
+ BOOST_STATIC_CONSTANT(int, char_class_underscore = 0x0800);
+ BOOST_STATIC_CONSTANT(int, char_class_xdigit = 0x1000);
+ BOOST_STATIC_CONSTANT(int, char_class_newline = 0x2000);
+
+ template<typename FwdIter>
+ static char_class_type lookup_classname(FwdIter begin, FwdIter end, bool icase)
+ {
+ using namespace std;
+ wstring const name = classname_w(begin, end);
+ if(name == L"alnum") return char_class_alpha|char_class_digit;
+ if(name == L"alpha") return char_class_alpha;
+ if(name == L"blank") return char_class_blank;
+ if(name == L"cntrl") return char_class_cntrl;
+ if(name == L"d") return char_class_digit;
+ if(name == L"digit") return char_class_digit;
+ if(name == L"graph") return char_class_punct|char_class_alpha|char_class_digit;
+ if(name == L"lower") return icase ? (char_class_lower|char_class_upper) : char_class_lower;
+ if(name == L"newline") return char_class_newline;
+ if(name == L"print") return char_class_blank|char_class_punct|char_class_alpha|char_class_digit;
+ if(name == L"punct") return char_class_punct;
+ if(name == L"s") return char_class_space;
+ if(name == L"space") return char_class_space;
+ if(name == L"upper") return icase ? (char_class_upper|char_class_lower) : char_class_upper;
+ if(name == L"w") return char_class_alpha|char_class_digit|char_class_underscore;
+ if(name == L"xdigit") return char_class_xdigit;
+ return 0;
+ }
+
+ static bool isctype(wchar_t ch, char_class_type mask)
+ {
+ using namespace std;
+ return ((char_class_alpha & mask) && iswalpha(ch))
+ || ((char_class_blank & mask) && (L' ' == ch || L'\t' == ch)) // BUGBUG
+ || ((char_class_cntrl & mask) && iswcntrl(ch))
+ || ((char_class_digit & mask) && iswdigit(ch))
+ || ((char_class_lower & mask) && iswlower(ch))
+ || ((char_class_newline & mask) && detail::iswnewline(ch))
+ || ((char_class_punct & mask) && iswpunct(ch))
+ || ((char_class_space & mask) && iswspace(ch))
+ || ((char_class_upper & mask) && iswupper(ch))
+ || ((char_class_underscore & mask) && L'_' == ch)
+ || ((char_class_xdigit & mask) && iswxdigit(ch))
+ ;
+ }
+};
+#endif
+
+
+
+#elif defined(_CPPLIB_VER) // Dinkumware STL
+
+
+
+
+///////////////////////////////////////////////////////////////////////////////
+//
+template<>
+struct char_class_impl<char>
+{
+ typedef int char_class_type;
+ BOOST_MPL_ASSERT_RELATION(0x81FF, ==, (_ALPHA|_UPPER|_LOWER|_DIGIT|_SPACE|_PUNCT|_CONTROL|_BLANK|_HEX|_LEADBYTE));
+ BOOST_STATIC_CONSTANT(int, char_class_underscore = 0x1000);
+ BOOST_STATIC_CONSTANT(int, char_class_newline = 0x2000);
+
+ template<typename FwdIter>
+ static char_class_type lookup_classname(FwdIter begin, FwdIter end, bool icase)
+ {
+ using namespace std;
+ string const name = classname_a(begin, end);
+ if(name == "alnum") return _ALPHA|_DIGIT;
+ if(name == "alpha") return _ALPHA;
+ if(name == "blank") return _BLANK; // this is ONLY space!!!
+ if(name == "cntrl") return _CONTROL;
+ if(name == "d") return _DIGIT;
+ if(name == "digit") return _DIGIT;
+ if(name == "graph") return _PUNCT|_ALPHA|_DIGIT;
+ if(name == "lower") return icase ? (_LOWER|_UPPER) : _LOWER;
+ if(name == "newline") return char_class_newline;
+ if(name == "print") return _BLANK|_PUNCT|_ALPHA|_DIGIT;
+ if(name == "punct") return _PUNCT;
+ if(name == "s") return _SPACE;
+ if(name == "space") return _SPACE;
+ if(name == "upper") return icase ? (_UPPER|_LOWER) : _UPPER;
+ if(name == "w") return _ALPHA|_DIGIT|char_class_underscore;
+ if(name == "xdigit") return _HEX;
+ return 0;
+ }
+
+ static bool isctype(char ch, char_class_type mask)
+ {
+ using namespace std;
+ if(0 != _isctype(static_cast<unsigned char>(ch), mask))
+ {
+ return true;
+ }
+
+ switch(ch)
+ {
+ case '\t': return 0 != (mask & _BLANK);
+ case '_': return 0 != (mask & char_class_underscore);
+ case '\n': case '\r': case '\f': return 0 != (mask & char_class_newline);
+ default:;
+ }
+
+ return false;
+ }
+};
+
+#ifndef BOOST_XPRESSIVE_NO_WREGEX
+///////////////////////////////////////////////////////////////////////////////
+//
+template<>
+struct char_class_impl<wchar_t>
+{
+ typedef wctype_t char_class_type;
+ BOOST_MPL_ASSERT_RELATION(0x81FF, ==, (_ALPHA|_UPPER|_LOWER|_DIGIT|_SPACE|_PUNCT|_CONTROL|_BLANK|_HEX|_LEADBYTE));
+ BOOST_STATIC_CONSTANT(int, char_class_underscore = 0x1000);
+ BOOST_STATIC_CONSTANT(int, char_class_newline = 0x2000);
+
+ template<typename FwdIter>
+ static char_class_type lookup_classname(FwdIter begin, FwdIter end, bool icase)
+ {
+ using namespace std;
+ wstring const name = classname_w(begin, end);
+ if(name == L"alnum") return _ALPHA|_DIGIT;
+ if(name == L"alpha") return _ALPHA;
+ if(name == L"blank") return _BLANK; // this is ONLY space!!!
+ if(name == L"cntrl") return _CONTROL;
+ if(name == L"d") return _DIGIT;
+ if(name == L"digit") return _DIGIT;
+ if(name == L"graph") return _PUNCT|_ALPHA|_DIGIT;
+ if(name == L"lower") return icase ? _LOWER|_UPPER : _LOWER;
+ if(name == L"newline") return char_class_newline;
+ if(name == L"print") return _BLANK|_PUNCT|_ALPHA|_DIGIT;
+ if(name == L"punct") return _PUNCT;
+ if(name == L"s") return _SPACE;
+ if(name == L"space") return _SPACE;
+ if(name == L"upper") return icase ? _UPPER|_LOWER : _UPPER;
+ if(name == L"w") return _ALPHA|_DIGIT|char_class_underscore;
+ if(name == L"xdigit") return _HEX;
+ return 0;
+ }
+
+ static bool isctype(wchar_t ch, char_class_type mask)
+ {
+ using namespace std;
+ if(0 != iswctype(ch, mask))
+ {
+ return true;
+ }
+
+ switch(ch)
+ {
+ case L'\t': return 0 != (mask & _BLANK);
+ case L'_': return 0 != (mask & char_class_underscore);
+ case L'\n': case L'\r': case L'\f': case 0x2028u: case 0x2029u: case 0x85u:
+ return 0 != (mask & char_class_newline);
+ default:;
+ }
+
+ return false;
+ }
+};
+#endif
+
+
+
+#else // unknown, use portable implementation
+
+
+
+
+///////////////////////////////////////////////////////////////////////////////
+//
+template<>
+struct char_class_impl<char>
+{
+ typedef int char_class_type;
+ //BOOST_STATIC_CONSTANT(int, char_class_alnum = 0x0001);
+ BOOST_STATIC_CONSTANT(int, char_class_alpha = 0x0002);
+ BOOST_STATIC_CONSTANT(int, char_class_blank = 0x0004);
+ BOOST_STATIC_CONSTANT(int, char_class_cntrl = 0x0008);
+ BOOST_STATIC_CONSTANT(int, char_class_digit = 0x0010);
+ //BOOST_STATIC_CONSTANT(int, char_class_graph = 0x0020);
+ BOOST_STATIC_CONSTANT(int, char_class_lower = 0x0040);
+ //BOOST_STATIC_CONSTANT(int, char_class_print = 0x0080);
+ BOOST_STATIC_CONSTANT(int, char_class_punct = 0x0100);
+ BOOST_STATIC_CONSTANT(int, char_class_space = 0x0200);
+ BOOST_STATIC_CONSTANT(int, char_class_upper = 0x0400);
+ BOOST_STATIC_CONSTANT(int, char_class_underscore = 0x0800);
+ BOOST_STATIC_CONSTANT(int, char_class_xdigit = 0x1000);
+ BOOST_STATIC_CONSTANT(int, char_class_newline = 0x2000);
+
+ template<typename FwdIter>
+ static char_class_type lookup_classname(FwdIter begin, FwdIter end, bool icase)
+ {
+ using namespace std;
+ string const name = classname_a(begin, end);
+ if(name == "alnum") return char_class_alpha|char_class_digit;
+ if(name == "alpha") return char_class_alpha;
+ if(name == "blank") return char_class_blank;
+ if(name == "cntrl") return char_class_cntrl;
+ if(name == "d") return char_class_digit;
+ if(name == "digit") return char_class_digit;
+ if(name == "graph") return char_class_punct|char_class_alpha|char_class_digit;
+ if(name == "lower") return icase ? (char_class_lower|char_class_upper) : char_class_lower;
+ if(name == "newline") return char_class_newline;
+ if(name == "print") return char_class_blank|char_class_punct|char_class_alpha|char_class_digit;
+ if(name == "punct") return char_class_punct;
+ if(name == "s") return char_class_space;
+ if(name == "space") return char_class_space;
+ if(name == "upper") return icase ? (char_class_upper|char_class_lower) : char_class_upper;
+ if(name == "w") return char_class_alpha|char_class_digit|char_class_underscore;
+ if(name == "xdigit") return char_class_xdigit;
+ return 0;
+ }
+
+ static bool isctype(char ch, char_class_type mask)
+ {
+ using namespace std;
+ unsigned char uch = static_cast<unsigned char>(ch);
+ return ((char_class_alpha & mask) && isalpha(uch))
+ || ((char_class_blank & mask) && (' ' == ch || '\t' == ch)) // BUGBUG
+ || ((char_class_cntrl & mask) && iscntrl(uch))
+ || ((char_class_digit & mask) && isdigit(uch))
+ || ((char_class_lower & mask) && islower(uch))
+ || ((char_class_newline & mask) && detail::isnewline(ch))
+ || ((char_class_punct & mask) && ispunct(uch))
+ || ((char_class_space & mask) && isspace(uch))
+ || ((char_class_upper & mask) && isupper(uch))
+ || ((char_class_underscore & mask) && '_' == ch)
+ || ((char_class_xdigit & mask) && isxdigit(uch))
+ ;
+ }
+};
+
+#ifndef BOOST_XPRESSIVE_NO_WREGEX
+///////////////////////////////////////////////////////////////////////////////
+//
+template<>
+struct char_class_impl<wchar_t>
+{
+ typedef int char_class_type;
+ //BOOST_STATIC_CONSTANT(int, char_class_alnum = 0x0001);
+ BOOST_STATIC_CONSTANT(int, char_class_alpha = 0x0002);
+ BOOST_STATIC_CONSTANT(int, char_class_blank = 0x0004);
+ BOOST_STATIC_CONSTANT(int, char_class_cntrl = 0x0008);
+ BOOST_STATIC_CONSTANT(int, char_class_digit = 0x0010);
+ //BOOST_STATIC_CONSTANT(int, char_class_graph = 0x0020);
+ BOOST_STATIC_CONSTANT(int, char_class_lower = 0x0040);
+ //BOOST_STATIC_CONSTANT(int, char_class_print = 0x0080);
+ BOOST_STATIC_CONSTANT(int, char_class_punct = 0x0100);
+ BOOST_STATIC_CONSTANT(int, char_class_space = 0x0200);
+ BOOST_STATIC_CONSTANT(int, char_class_upper = 0x0400);
+ BOOST_STATIC_CONSTANT(int, char_class_underscore = 0x0800);
+ BOOST_STATIC_CONSTANT(int, char_class_xdigit = 0x1000);
+ BOOST_STATIC_CONSTANT(int, char_class_newline = 0x2000);
+
+ template<typename FwdIter>
+ static char_class_type lookup_classname(FwdIter begin, FwdIter end, bool icase)
+ {
+ using namespace std;
+ wstring const name = classname_w(begin, end);
+ if(name == L"alnum") return char_class_alpha|char_class_digit;
+ if(name == L"alpha") return char_class_alpha;
+ if(name == L"blank") return char_class_blank;
+ if(name == L"cntrl") return char_class_cntrl;
+ if(name == L"d") return char_class_digit;
+ if(name == L"digit") return char_class_digit;
+ if(name == L"graph") return char_class_punct|char_class_alpha|char_class_digit;
+ if(name == L"newline") return char_class_newline;
+ if(name == L"lower") return icase ? (char_class_lower|char_class_upper) : char_class_lower;
+ if(name == L"print") return char_class_blank|char_class_punct|char_class_alpha|char_class_digit;
+ if(name == L"punct") return char_class_punct;
+ if(name == L"s") return char_class_space;
+ if(name == L"space") return char_class_space;
+ if(name == L"upper") return icase ? (char_class_upper|char_class_lower) : char_class_upper;
+ if(name == L"w") return char_class_alpha|char_class_digit|char_class_underscore;
+ if(name == L"xdigit") return char_class_xdigit;
+ return 0;
+ }
+
+ static bool isctype(wchar_t ch, char_class_type mask)
+ {
+ using namespace std;
+ return ((char_class_alpha & mask) && iswalpha(ch))
+ || ((char_class_blank & mask) && (L' ' == ch || L'\t' == ch)) // BUGBUG
+ || ((char_class_cntrl & mask) && iswcntrl(ch))
+ || ((char_class_digit & mask) && iswdigit(ch))
+ || ((char_class_lower & mask) && iswlower(ch))
+ || ((char_class_newline & mask) && detail::iswnewline(ch))
+ || ((char_class_punct & mask) && iswpunct(ch))
+ || ((char_class_space & mask) && iswspace(ch))
+ || ((char_class_upper & mask) && iswupper(ch))
+ || ((char_class_underscore & mask) && L'_' == ch)
+ || ((char_class_xdigit & mask) && iswxdigit(ch))
+ ;
+ }
+};
+#endif
+
+
+#endif
+
+
+}}} // namespace boost::xpressive::detail
+
+#endif
diff --git a/boost/boost/xpressive/traits/null_regex_traits.hpp b/boost/boost/xpressive/traits/null_regex_traits.hpp
new file mode 100644
index 00000000000..086aeceef9f
--- /dev/null
+++ b/boost/boost/xpressive/traits/null_regex_traits.hpp
@@ -0,0 +1,233 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file null_regex_traits.hpp
+/// Contains the definition of the null_regex_traits\<\> template, which is a
+/// stub regex traits implementation that can be used by static and dynamic
+/// regexes for searching non-character data.
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_TRAITS_NULL_REGEX_TRAITS_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_TRAITS_NULL_REGEX_TRAITS_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <vector>
+#include <boost/assert.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/xpressive/detail/detail_fwd.hpp>
+#include <boost/xpressive/detail/utility/never_true.hpp>
+#include <boost/xpressive/detail/utility/ignore_unused.hpp>
+
+namespace boost { namespace xpressive
+{
+
+namespace detail
+{
+ struct not_a_locale {};
+}
+
+struct regex_traits_version_1_tag;
+
+///////////////////////////////////////////////////////////////////////////////
+// null_regex_traits
+//
+/// \brief stub regex_traits for non-char data
+///
+template<typename Elem>
+struct null_regex_traits
+{
+ typedef Elem char_type;
+ typedef std::vector<char_type> string_type;
+ typedef detail::not_a_locale locale_type;
+ typedef int char_class_type;
+ typedef regex_traits_version_1_tag version_tag;
+
+ /// Initialize a null_regex_traits object.
+ ///
+ null_regex_traits(locale_type = locale_type())
+ {
+ }
+
+ /// Checks two null_regex_traits objects for equality
+ ///
+ /// \return true.
+ bool operator ==(null_regex_traits<char_type> const &that) const
+ {
+ detail::ignore_unused(&that);
+ return true;
+ }
+
+ /// Checks two null_regex_traits objects for inequality
+ ///
+ /// \return false.
+ bool operator !=(null_regex_traits<char_type> const &that) const
+ {
+ detail::ignore_unused(&that);
+ return false;
+ }
+
+ /// Convert a char to a Elem
+ ///
+ /// \param ch The source character.
+ /// \return Elem(ch).
+ char_type widen(char ch) const
+ {
+ //BOOST_MPL_ASSERT((detail::never_true<char_type>));
+ BOOST_ASSERT(false);
+ return char_type(ch);
+ }
+
+ /// Returns a hash value for a Elem in the range [0, UCHAR_MAX]
+ ///
+ /// \param ch The source character.
+ /// \return a value between 0 and UCHAR_MAX, inclusive.
+ static unsigned char hash(char_type ch)
+ {
+ return static_cast<unsigned char>(ch);
+ }
+
+ /// No-op
+ ///
+ /// \param ch The source character.
+ /// \return ch
+ static char_type translate(char_type ch)
+ {
+ return ch;
+ }
+
+ /// No-op
+ ///
+ /// \param ch The source character.
+ /// \return ch
+ static char_type translate_nocase(char_type ch)
+ {
+ return ch;
+ }
+
+ /// Checks to see if a character is within a character range.
+ ///
+ /// \param first The bottom of the range, inclusive.
+ /// \param last The top of the range, inclusive.
+ /// \param ch The source character.
+ /// \return first <= ch && ch <= last.
+ static bool in_range(char_type first, char_type last, char_type ch)
+ {
+ return first <= ch && ch <= last;
+ }
+
+ /// Checks to see if a character is within a character range.
+ ///
+ /// \param first The bottom of the range, inclusive.
+ /// \param last The top of the range, inclusive.
+ /// \param ch The source character.
+ /// \return first <= ch && ch <= last.
+ /// \attention Since the null_regex_traits does not do case-folding,
+ /// this function is equivalent to in_range().
+ static bool in_range_nocase(char_type first, char_type last, char_type ch)
+ {
+ return first <= ch && ch <= last;
+ }
+
+ /// Returns a sort key for the character sequence designated by the iterator range [F1, F2)
+ /// such that if the character sequence [G1, G2) sorts before the character sequence [H1, H2)
+ /// then v.transform(G1, G2) < v.transform(H1, H2).
+ ///
+ /// \attention Not used in xpressive 1.0
+ template<typename FwdIter>
+ static string_type transform(FwdIter begin, FwdIter end)
+ {
+ return string_type(begin, end);
+ }
+
+ /// Returns a sort key for the character sequence designated by the iterator range [F1, F2)
+ /// such that if the character sequence [G1, G2) sorts before the character sequence [H1, H2)
+ /// when character case is not considered then
+ /// v.transform_primary(G1, G2) < v.transform_primary(H1, H2).
+ ///
+ /// \attention Not used in xpressive 1.0
+ template<typename FwdIter>
+ static string_type transform_primary(FwdIter begin, FwdIter end)
+ {
+ return string_type(begin, end);
+ }
+
+ /// Returns a sequence of characters that represents the collating element
+ /// consisting of the character sequence designated by the iterator range [F1, F2).
+ /// Returns an empty string if the character sequence is not a valid collating element.
+ ///
+ /// \attention Not used in xpressive 1.0
+ template<typename FwdIter>
+ static string_type lookup_collatename(FwdIter begin, FwdIter end)
+ {
+ detail::ignore_unused(&begin);
+ detail::ignore_unused(&end);
+ return string_type();
+ }
+
+ /// The null_regex_traits does not have character classifications, so lookup_classname()
+ /// is unused.
+ ///
+ /// \param begin not used
+ /// \param end not used
+ /// \param icase not used
+ /// \return static_cast\<char_class_type\>(0)
+ template<typename FwdIter>
+ static char_class_type lookup_classname(FwdIter begin, FwdIter end, bool icase)
+ {
+ detail::ignore_unused(&begin);
+ detail::ignore_unused(&end);
+ detail::ignore_unused(&icase);
+ return 0;
+ }
+
+ /// The null_regex_traits does not have character classifications, so isctype()
+ /// is unused.
+ ///
+ /// \param ch not used
+ /// \param mask not used
+ /// \return false
+ static bool isctype(char_type ch, char_class_type mask)
+ {
+ detail::ignore_unused(&ch);
+ detail::ignore_unused(&mask);
+ return false;
+ }
+
+ /// The null_regex_traits recognizes no elements as digits, so value() is unused.
+ ///
+ /// \param ch not used
+ /// \param radix not used
+ /// \return -1
+ static int value(char_type ch, int radix)
+ {
+ detail::ignore_unused(&ch);
+ detail::ignore_unused(&radix);
+ return -1;
+ }
+
+ /// Not used
+ ///
+ /// \param loc not used
+ /// \return loc
+ static locale_type imbue(locale_type loc)
+ {
+ return loc;
+ }
+
+ /// Returns locale_type().
+ ///
+ /// \return locale_type()
+ static locale_type getloc()
+ {
+ return locale_type();
+ }
+};
+
+}}
+
+#endif
diff --git a/boost/boost/xpressive/xpressive.hpp b/boost/boost/xpressive/xpressive.hpp
new file mode 100644
index 00000000000..2a8b9142bd4
--- /dev/null
+++ b/boost/boost/xpressive/xpressive.hpp
@@ -0,0 +1,21 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file xpressive.hpp
+/// Includes all of xpressive including support for both static and
+/// dynamic regular expressions.
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/xpressive/xpressive_static.hpp>
+#include <boost/xpressive/xpressive_dynamic.hpp>
+
+#endif
diff --git a/boost/boost/xpressive/xpressive_dynamic.hpp b/boost/boost/xpressive/xpressive_dynamic.hpp
new file mode 100644
index 00000000000..5e135e6e886
--- /dev/null
+++ b/boost/boost/xpressive/xpressive_dynamic.hpp
@@ -0,0 +1,25 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file xpressive_dynamic.hpp
+/// Includes everything you need to write and use dynamic regular expressions.
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_DYNAMIC_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_DYNAMIC_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/xpressive/regex_compiler.hpp>
+#include <boost/xpressive/basic_regex.hpp>
+#include <boost/xpressive/sub_match.hpp>
+#include <boost/xpressive/match_results.hpp>
+#include <boost/xpressive/regex_algorithms.hpp>
+#include <boost/xpressive/regex_iterator.hpp>
+#include <boost/xpressive/regex_token_iterator.hpp>
+
+#endif
diff --git a/boost/boost/xpressive/xpressive_fwd.hpp b/boost/boost/xpressive/xpressive_fwd.hpp
new file mode 100644
index 00000000000..517d01f36f8
--- /dev/null
+++ b/boost/boost/xpressive/xpressive_fwd.hpp
@@ -0,0 +1,167 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file xpressive_fwd.hpp
+/// Forward declarations for all of xpressive's public data types.
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_XPRESSIVE_FWD_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_XPRESSIVE_FWD_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <string>
+#include <boost/config.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+
+#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+# error Sorry, xpressive requires a compiler that supports partial template specialization.
+#endif
+
+#if defined(BOOST_NO_STD_LOCALE) & !defined(BOOST_XPRESSIVE_USE_C_TRAITS)
+# define BOOST_XPRESSIVE_USE_C_TRAITS
+#endif
+
+#if defined(BOOST_NO_CWCHAR) | defined(BOOST_NO_CWCTYPE) | defined(BOOST_NO_STD_WSTRING)
+# ifndef BOOST_XPRESSIVE_NO_WREGEX
+# define BOOST_XPRESSIVE_NO_WREGEX
+# endif
+#endif
+
+#include <boost/xpressive/proto/proto_fwd.hpp>
+
+namespace boost { namespace xpressive
+{
+ template<typename Char, typename Impl>
+ struct regex_traits;
+
+ template<typename Char>
+ struct cpp_regex_traits;
+
+ template<typename Char>
+ struct c_regex_traits;
+
+ template<typename Elem>
+ struct null_regex_traits;
+
+ namespace detail
+ {
+ template<typename Char>
+ struct default_regex_traits
+ {
+ #ifdef BOOST_XPRESSIVE_USE_C_TRAITS
+ typedef c_regex_traits<Char> type;
+ #else
+ typedef cpp_regex_traits<Char> type;
+ #endif
+ };
+
+ struct mark_placeholder;
+
+ typedef proto::unary_op<detail::mark_placeholder, proto::noop_tag> mark_tag;
+
+ } // namespace detail
+
+ using detail::mark_tag;
+
+ typedef void const *regex_id_type;
+
+ struct regex_error;
+
+ struct regex_traits_version_1_tag;
+
+ struct regex_traits_version_1_case_fold_tag;
+
+ template<typename BidiIter>
+ struct basic_regex;
+
+ template<typename BidiIter>
+ struct match_results;
+
+ template<typename BidiIter>
+ struct regex_iterator;
+
+ template<typename BidiIter>
+ struct regex_token_iterator;
+
+ template<typename BidiIter>
+ struct regex_id_filter_predicate;
+
+ template<typename BidiIter>
+ struct sub_match;
+
+ template<typename Action, typename Saved = Action>
+ struct action;
+
+ template<typename RegexTraits>
+ struct compiler_traits;
+
+ template<typename Char, typename Impl = typename detail::default_regex_traits<Char>::type>
+ struct regex_traits;
+
+ template
+ <
+ typename BidiIter
+ , typename RegexTraits = regex_traits<typename iterator_value<BidiIter>::type>
+ , typename CompilerTraits = compiler_traits<RegexTraits>
+ >
+ struct regex_compiler;
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Common typedefs
+ //
+ typedef basic_regex<std::string::const_iterator> sregex;
+ typedef basic_regex<char const *> cregex;
+
+ #ifndef BOOST_XPRESSIVE_NO_WREGEX
+ typedef basic_regex<std::wstring::const_iterator> wsregex;
+ typedef basic_regex<wchar_t const *> wcregex;
+ #endif
+
+ typedef regex_compiler<std::string::const_iterator> sregex_compiler;
+ typedef regex_compiler<char const *> cregex_compiler;
+
+ #ifndef BOOST_XPRESSIVE_NO_WREGEX
+ typedef regex_compiler<std::wstring::const_iterator> wsregex_compiler;
+ typedef regex_compiler<wchar_t const *> wcregex_compiler;
+ #endif
+
+ typedef regex_iterator<std::string::const_iterator> sregex_iterator;
+ typedef regex_iterator<char const *> cregex_iterator;
+
+ #ifndef BOOST_XPRESSIVE_NO_WREGEX
+ typedef regex_iterator<std::wstring::const_iterator> wsregex_iterator;
+ typedef regex_iterator<wchar_t const *> wcregex_iterator;
+ #endif
+
+ typedef regex_token_iterator<std::string::const_iterator> sregex_token_iterator;
+ typedef regex_token_iterator<char const *> cregex_token_iterator;
+
+ #ifndef BOOST_XPRESSIVE_NO_WREGEX
+ typedef regex_token_iterator<std::wstring::const_iterator> wsregex_token_iterator;
+ typedef regex_token_iterator<wchar_t const *> wcregex_token_iterator;
+ #endif
+
+ typedef match_results<std::string::const_iterator> smatch;
+ typedef match_results<char const *> cmatch;
+
+ #ifndef BOOST_XPRESSIVE_NO_WREGEX
+ typedef match_results<std::wstring::const_iterator> wsmatch;
+ typedef match_results<wchar_t const *> wcmatch;
+ #endif
+
+ typedef regex_id_filter_predicate<std::string::const_iterator> sregex_id_filter_predicate;
+ typedef regex_id_filter_predicate<char const *> cregex_id_filter_predicate;
+
+ #ifndef BOOST_XPRESSIVE_NO_WREGEX
+ typedef regex_id_filter_predicate<std::wstring::const_iterator> wsregex_id_filter_predicate;
+ typedef regex_id_filter_predicate<wchar_t const *> wcregex_id_filter_predicate;
+ #endif
+
+}} // namespace boost::xpressive
+
+#endif
diff --git a/boost/boost/xpressive/xpressive_static.hpp b/boost/boost/xpressive/xpressive_static.hpp
new file mode 100644
index 00000000000..54fe4ae9d4f
--- /dev/null
+++ b/boost/boost/xpressive/xpressive_static.hpp
@@ -0,0 +1,32 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file xpressive_static.hpp
+/// Includes everything you need to write static regular expressions and use
+/// them.
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_STATIC_HPP_EAN_10_04_2005
+#define BOOST_XPRESSIVE_STATIC_HPP_EAN_10_04_2005
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#ifdef _MSC_VER
+// inline aggressively
+# pragma inline_recursion(on) // turn on inline recursion
+# pragma inline_depth(255) // max inline depth
+#endif
+
+#include <boost/xpressive/regex_primitives.hpp>
+#include <boost/xpressive/basic_regex.hpp>
+#include <boost/xpressive/sub_match.hpp>
+#include <boost/xpressive/match_results.hpp>
+#include <boost/xpressive/regex_algorithms.hpp>
+#include <boost/xpressive/regex_iterator.hpp>
+#include <boost/xpressive/regex_token_iterator.hpp>
+
+#endif
diff --git a/boost/boost/xpressive/xpressive_typeof.hpp b/boost/boost/xpressive/xpressive_typeof.hpp
new file mode 100644
index 00000000000..7fe54ba7c07
--- /dev/null
+++ b/boost/boost/xpressive/xpressive_typeof.hpp
@@ -0,0 +1,100 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file xpressive_typeof.hpp
+/// Type registrations so that xpressive can be used with the Boost.Typeof library.
+//
+// Copyright 2004 Eric Niebler. 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_XPRESSIVE_XPRESSIVE_TYPEOF_H
+#define BOOST_XPRESSIVE_XPRESSIVE_TYPEOF_H
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp>
+#include <boost/typeof/typeof.hpp>
+#ifndef BOOST_NO_STL_LOCALE
+# include <boost/typeof/std/locale.hpp>
+#endif
+#include <boost/xpressive/proto/proto_typeof.hpp>
+#include <boost/xpressive/xpressive_fwd.hpp>
+
+#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
+
+///////////////////////////////////////////////////////////////////////////////
+// Misc.
+//
+BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::set_initializer)
+BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::keeper_tag)
+BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::modifier_tag)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::generic_quant_tag, (unsigned int)(unsigned int))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::lookahead_tag, (bool))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::lookbehind_tag, (bool))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::basic_regex, (typename))
+
+///////////////////////////////////////////////////////////////////////////////
+// Placeholders
+//
+BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::mark_placeholder)
+BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::posix_charset_placeholder)
+BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::assert_bol_placeholder)
+BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::assert_eol_placeholder)
+BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::logical_newline_placeholder)
+BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::self_placeholder)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::string_placeholder, (typename))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::assert_word_placeholder, (typename))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::range_placeholder, (typename))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::regex_placeholder, (typename)(bool))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::literal_placeholder, (typename)(bool))
+
+///////////////////////////////////////////////////////////////////////////////
+// Matchers
+//
+BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::epsilon_matcher)
+BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::true_matcher)
+BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::end_matcher)
+BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::any_matcher)
+BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::assert_bos_matcher)
+BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::assert_eos_matcher)
+BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::mark_begin_matcher)
+BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::mark_end_matcher)
+BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::repeat_begin_matcher)
+BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::alternate_end_matcher)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::assert_bol_matcher, (typename))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::assert_eol_matcher, (typename))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::literal_matcher, (typename)(bool)(bool))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::string_matcher, (typename)(bool))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::charset_matcher, (typename)(bool)(typename))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::logical_newline_matcher, (typename))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::mark_matcher, (typename)(bool))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::repeat_end_matcher, (bool))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::alternate_matcher, (typename)(typename))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::simple_repeat_matcher, (typename)(bool))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::regex_byref_matcher, (typename))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::regex_matcher, (typename))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::posix_charset_matcher, (typename))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::assert_word_matcher, (typename)(typename))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::range_matcher, (typename)(bool))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::keeper_matcher, (typename))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::lookahead_matcher, (typename))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::lookbehind_matcher, (typename))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::set_matcher, (typename)(int))
+
+///////////////////////////////////////////////////////////////////////////////
+// Modifiers
+//
+BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::icase_modifier)
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::locale_modifier, (typename))
+
+///////////////////////////////////////////////////////////////////////////////
+// Traits
+//
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::null_regex_traits, (typename))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::cpp_regex_traits, (typename))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::c_regex_traits, (typename))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::regex_traits, (typename)(typename))
+
+#endif